DO NOT MERGE: Disable SpellChecker in secondary user's direct reply am: b52efcb9d5 am: 9b1ddfe488

Change-Id: Idcdef9d986a8d0e2f6f0209fd550900a6275796d
diff --git a/Android.bp b/Android.bp
index 33f3213..cb840cf 100644
--- a/Android.bp
+++ b/Android.bp
@@ -16,8 +16,6 @@
 cc_library {
     name: "libplatformprotos",
     host_supported: true,
-    // b/34740546, work around clang-tidy segmentation fault.
-    tidy_checks: ["-modernize*"],
     proto: {
         export_proto_headers: true,
         include_dirs: ["external/protobuf/src"],
diff --git a/Android.mk b/Android.mk
index 3fcfea9..a9cb7cc 100644
--- a/Android.mk
+++ b/Android.mk
@@ -71,8 +71,6 @@
 	core/java/android/accounts/IAccountManagerResponse.aidl \
 	core/java/android/accounts/IAccountAuthenticator.aidl \
 	core/java/android/accounts/IAccountAuthenticatorResponse.aidl \
-	core/java/android/app/IActivityContainer.aidl \
-	core/java/android/app/IActivityContainerCallback.aidl \
 	core/java/android/app/IActivityController.aidl \
 	core/java/android/app/IActivityManager.aidl \
 	core/java/android/app/IActivityPendingResult.aidl \
@@ -84,6 +82,7 @@
 	core/java/android/app/ITaskStackListener.aidl \
 	core/java/android/app/IBackupAgent.aidl \
 	core/java/android/app/IEphemeralResolver.aidl \
+	core/java/android/app/IInputForwarder.aidl \
 	core/java/android/app/IInstantAppResolver.aidl \
 	core/java/android/app/IInstrumentationWatcher.aidl \
 	core/java/android/app/INotificationManager.aidl \
@@ -114,6 +113,8 @@
 	core/java/android/app/backup/IRestoreObserver.aidl \
 	core/java/android/app/backup/IRestoreSession.aidl \
 	core/java/android/app/backup/ISelectBackupTransportCallback.aidl \
+	core/java/android/app/timezone/ICallback.aidl \
+	core/java/android/app/timezone/IRulesManager.aidl \
 	core/java/android/app/usage/ICacheQuotaService.aidl \
 	core/java/android/app/usage/IStorageStatsManager.aidl \
 	core/java/android/app/usage/IUsageStatsManager.aidl \
@@ -171,6 +172,7 @@
 	core/java/android/content/pm/IPackageInstallerCallback.aidl \
 	core/java/android/content/pm/IPackageInstallerSession.aidl \
 	core/java/android/content/pm/IPackageManager.aidl \
+	../native/libs/binder/aidl/android/content/pm/IPackageManagerNative.aidl \
 	core/java/android/content/pm/IPackageMoveObserver.aidl \
 	core/java/android/content/pm/IPackageStatsObserver.aidl \
 	core/java/android/content/pm/IPinItemRequest.aidl \
@@ -268,6 +270,8 @@
 	core/java/android/os/IRecoverySystemProgressListener.aidl \
 	core/java/android/os/IRemoteCallback.aidl \
 	core/java/android/os/ISchedulingPolicyService.aidl \
+	core/java/android/os/IThermalEventListener.aidl \
+	core/java/android/os/IThermalService.aidl \
 	core/java/android/os/IUpdateLock.aidl \
 	core/java/android/os/IUserManager.aidl \
 	core/java/android/os/IVibratorService.aidl \
@@ -438,10 +442,6 @@
 	location/java/android/location/INetInitiatedListener.aidl \
 	location/java/com/android/internal/location/ILocationProvider.aidl \
 	media/java/android/media/IAudioService.aidl \
-	../av/drm/libmediadrm/aidl/android/media/ICas.aidl \
-	../av/drm/libmediadrm/aidl/android/media/ICasListener.aidl \
-	../av/drm/libmediadrm/aidl/android/media/IDescrambler.aidl \
-	../av/drm/libmediadrm/aidl/android/media/IMediaCasService.aidl \
 	media/java/android/media/IAudioFocusDispatcher.aidl \
 	media/java/android/media/IAudioRoutesObserver.aidl \
 	media/java/android/media/IMediaHTTPConnection.aidl \
@@ -502,9 +502,9 @@
 	telecomm/java/com/android/internal/telecom/IInCallService.aidl \
 	telecomm/java/com/android/internal/telecom/ITelecomService.aidl \
 	telecomm/java/com/android/internal/telecom/RemoteServiceCallback.aidl \
-        telephony/java/android/telephony/mbms/IMbmsDownloadManagerCallback.aidl \
-	telephony/java/android/telephony/mbms/IMbmsStreamingManagerCallback.aidl \
-	telephony/java/android/telephony/mbms/IDownloadCallback.aidl \
+	telephony/java/android/telephony/mbms/IMbmsDownloadSessionCallback.aidl \
+	telephony/java/android/telephony/mbms/IMbmsStreamingSessionCallback.aidl \
+	telephony/java/android/telephony/mbms/IDownloadStateCallback.aidl \
         telephony/java/android/telephony/mbms/IStreamingServiceCallback.aidl \
 	telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl \
 	telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl \
@@ -569,6 +569,15 @@
 
 LOCAL_AIDL_INCLUDES += system/update_engine/binder_bindings
 
+LOCAL_AIDL_INCLUDES += frameworks/base/lowpan/java
+LOCAL_SRC_FILES += \
+	lowpan/java/android/net/lowpan/ILowpanEnergyScanCallback.aidl \
+	lowpan/java/android/net/lowpan/ILowpanNetScanCallback.aidl \
+	lowpan/java/android/net/lowpan/ILowpanInterfaceListener.aidl \
+	lowpan/java/android/net/lowpan/ILowpanInterface.aidl \
+	lowpan/java/android/net/lowpan/ILowpanManagerListener.aidl \
+	lowpan/java/android/net/lowpan/ILowpanManager.aidl
+
 # FRAMEWORKS_BASE_JAVA_SRC_DIRS comes from build/core/pathmap.mk
 LOCAL_AIDL_INCLUDES += \
       $(FRAMEWORKS_BASE_JAVA_SRC_DIRS) \
@@ -605,6 +614,8 @@
     android.hardware.vibrator-V1.1-java-constants        \
     android.hardware.wifi-V1.0-java-constants            \
 
+include hardware/interfaces/cas/1.0/CasHal.mk
+
 # Loaded with System.loadLibrary by android.view.textclassifier
 LOCAL_REQUIRED_MODULES += libtextclassifier
 
@@ -637,7 +648,6 @@
 
 aidl_files := \
         frameworks/base/telephony/java/android/telephony/mbms/DownloadRequest.aidl \
-        frameworks/base/telephony/java/android/telephony/mbms/DownloadStatus.aidl \
         frameworks/base/telephony/java/android/telephony/mbms/FileInfo.aidl \
         frameworks/base/telephony/java/android/telephony/mbms/FileServiceInfo.aidl \
         frameworks/base/telephony/java/android/telephony/mbms/ServiceInfo.aidl \
@@ -705,7 +715,9 @@
 	frameworks/base/core/java/android/print/PrinterInfo.aidl \
 	frameworks/base/core/java/android/print/PrintJobId.aidl \
 	frameworks/base/core/java/android/printservice/recommendation/RecommendationInfo.aidl \
+	frameworks/base/core/java/android/hardware/radio/ProgramSelector.aidl \
 	frameworks/base/core/java/android/hardware/radio/RadioManager.aidl \
+	frameworks/base/core/java/android/hardware/radio/RadioMetadata.aidl \
 	frameworks/base/core/java/android/hardware/usb/UsbDevice.aidl \
 	frameworks/base/core/java/android/hardware/usb/UsbInterface.aidl \
 	frameworks/base/core/java/android/hardware/usb/UsbEndpoint.aidl \
@@ -721,6 +733,7 @@
 	frameworks/base/core/java/android/os/DropBoxManager.aidl \
 	frameworks/base/core/java/android/os/Bundle.aidl \
 	frameworks/base/core/java/android/os/Debug.aidl \
+	frameworks/base/core/java/android/os/SharedMemory.aidl \
 	frameworks/base/core/java/android/os/StrictMode.aidl \
 	frameworks/base/core/java/android/accessibilityservice/AccessibilityServiceInfo.aidl \
 	frameworks/base/core/java/android/net/Network.aidl \
@@ -865,7 +878,6 @@
 # The result will be relative to frameworks/base.
 fwbase_dirs_to_document := \
 	legacy-test/src \
-	test-runner/src \
 	$(patsubst $(LOCAL_PATH)/%,%, \
 	  $(wildcard \
 	    $(foreach dir, $(FRAMEWORKS_BASE_JAVA_SRC_DIRS), \
@@ -883,6 +895,12 @@
 	../opt/net/voip/src/java/android/net/rtp \
 	../opt/net/voip/src/java/android/net/sip
 
+framework_base_android_test_mock_src_files := \
+	$(call all-java-files-under, test-runner/src/android/test/mock)
+
+framework_base_android_test_runner_excluding_mock_src_files := \
+	$(filter-out $(framework_base_android_test_mock_src_files), $(call all-java-files-under, test-runner/src))
+
 # These are relative to frameworks/base
 dirs_to_check_apis := \
   $(fwbase_dirs_to_document) \
@@ -902,8 +920,8 @@
 # FRAMEWORKS_BASE_SUBDIRS comes from build/core/pathmap.mk
 dirs_to_document := \
 	$(dirs_to_check_apis) \
-  $(addprefix ../../, $(FRAMEWORKS_DATA_BINDING_JAVA_SRC_DIRS)) \
-  $(addprefix ../../, $(FRAMEWORKS_SUPPORT_JAVA_SRC_DIRS)) \
+	test-runner/src \
+	$(addprefix ../../, $(FRAMEWORKS_DATA_BINDING_JAVA_SRC_DIRS))
 
 patterns_to_not_document := \
 	$(call find-no-docs-pattern, $(dirs_to_document))
@@ -925,7 +943,9 @@
 
 # These are relative to frameworks/base
 framework_docs_LOCAL_API_CHECK_SRC_FILES := \
-	$(call find-other-java-files, $(dirs_to_check_apis)) \
+	$(framework_base_android_test_mock_src_files) \
+	$(framework_base_android_test_runner_excluding_mock_src_files) \
+	$(call all-java-files-under, $(dirs_to_check_apis)) \
 	$(common_src_files)
 
 # This is used by ide.mk as the list of source files that are
@@ -949,8 +969,11 @@
 	ext \
 	icu4j \
 	framework \
-	voip-common
+	voip-common \
+	android.test.mock \
 
+# Platform docs can refer to Support Library APIs, but we don't actually build
+# them as part of the docs target, so we need to include them on the classpath.
 framework_docs_LOCAL_JAVA_LIBRARIES := \
 	$(framework_docs_LOCAL_API_CHECK_JAVA_LIBRARIES) \
 	$(FRAMEWORKS_SUPPORT_JAVA_LIBRARIES)
@@ -994,19 +1017,15 @@
     -since $(SRC_API_DIR)/24.txt 24 \
     -since $(SRC_API_DIR)/25.txt 25 \
     -since $(SRC_API_DIR)/26.txt 26 \
-    -werror -hide 111 -hide 113 -hide 121 \
+    -since $(SRC_API_DIR)/27.txt 27 \
+    -werror -lerror -hide 111 -hide 113 -hide 121 -hide 125 -hide 126 -hide 127 -hide 128 \
     -overview $(LOCAL_PATH)/core/java/overview.html \
 
-# Allow the support library to add its own droiddoc options.
-include $(LOCAL_PATH)/../support/droiddoc.mk
-
 framework_docs_LOCAL_API_CHECK_ADDITIONAL_JAVA_DIR:= \
 	$(call intermediates-dir-for,JAVA_LIBRARIES,framework,,COMMON)
 
 framework_docs_LOCAL_ADDITIONAL_JAVA_DIR:= \
-	$(framework_docs_LOCAL_API_CHECK_ADDITIONAL_JAVA_DIR) \
-	$(foreach lib,$(FRAMEWORKS_SUPPORT_JAVA_LIBRARIES),$(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)) \
-	$(foreach lib,$(FRAMEWORKS_SUPPORT_JAVA_LIBRARIES),$(call intermediates-dir-for,JAVA_LIBRARIES,$(lib)-res,,COMMON))
+	$(framework_docs_LOCAL_API_CHECK_ADDITIONAL_JAVA_DIR)
 
 framework_docs_LOCAL_ADDITIONAL_DEPENDENCIES := \
     frameworks/base/docs/knowntags.txt \
@@ -1049,6 +1068,11 @@
 		-resourcesdir $(LOCAL_PATH)/docs/html/reference/images/ \
 		-resourcesoutdir reference/android/images/
 
+# Federate Support Library references against local API file.
+framework_docs_LOCAL_DROIDDOC_OPTIONS += \
+		-federate SupportLib https://developer.android.com \
+		-federationapi SupportLib prebuilts/sdk/current/support-api.txt
+
 # ====  the api stubs and current.xml ===========================
 include $(CLEAR_VARS)
 
@@ -1352,6 +1376,7 @@
 		-toroot / \
 		-hdf android.whichdoc online \
 		-devsite \
+		-yamlV2 \
 		$(sample_groups) \
 		-hdf android.hasSamples true \
 		-samplesdir $(samples_dir)
diff --git a/apct-tests/perftests/core/src/android/database/CursorWindowPerfTest.java b/apct-tests/perftests/core/src/android/database/CursorWindowPerfTest.java
new file mode 100644
index 0000000..897d0ae
--- /dev/null
+++ b/apct-tests/perftests/core/src/android/database/CursorWindowPerfTest.java
@@ -0,0 +1,123 @@
+/*
+ * 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.database;
+
+import static org.junit.Assert.assertTrue;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteCursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.perftests.utils.BenchmarkState;
+import android.perftests.utils.PerfStatusReporter;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.LargeTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@LargeTest
+public class CursorWindowPerfTest {
+    @Rule
+    public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
+
+    private static Context getContext() {
+        return InstrumentationRegistry.getTargetContext();
+    }
+
+    private static final String DB_NAME = CursorWindowPerfTest.class.toString();
+
+    private static SQLiteDatabase sDatabase;
+
+    @BeforeClass
+    public static void setup() {
+        getContext().deleteDatabase(DB_NAME);
+        sDatabase = getContext().openOrCreateDatabase(DB_NAME, Context.MODE_PRIVATE, null);
+
+        for (TableHelper helper : TableHelper.TABLE_HELPERS) {
+            sDatabase.execSQL(helper.createSql());
+            final String insert = helper.insertSql();
+
+            // this test only needs 1 row
+            sDatabase.execSQL(insert, helper.createItem(0));
+        }
+
+    }
+
+    @AfterClass
+    public static void teardown() {
+        getContext().deleteDatabase(DB_NAME);
+    }
+
+    @Test
+    public void loadInt() {
+        loadRowFromCursorWindow(TableHelper.INT_1, false);
+    }
+
+    @Test
+    public void loadInt_doubleRef() {
+        loadRowFromCursorWindow(TableHelper.INT_1, true);
+    }
+
+    @Test
+    public void load10Ints() {
+        loadRowFromCursorWindow(TableHelper.INT_10, false);
+    }
+
+    @Test
+    public void loadUser() {
+        loadRowFromCursorWindow(TableHelper.USER, false);
+    }
+
+    private void loadRowFromCursorWindow(TableHelper helper, boolean doubleRef) {
+        try (Cursor cursor = sDatabase.rawQuery(helper.readSql(), new String[0])) {
+            TableHelper.CursorReader reader = helper.createReader(cursor);
+
+            SQLiteCursor sqLiteCursor = (SQLiteCursor) cursor;
+
+            sqLiteCursor.getCount(); // load one window
+            CursorWindow window = sqLiteCursor.getWindow();
+            assertTrue("must have enough rows", window.getNumRows() >= 1);
+            int start = window.getStartPosition();
+
+            BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+
+            if (!doubleRef) {
+                // normal access
+                while (state.keepRunning()) {
+                    cursor.moveToPosition(start);
+                    reader.read();
+                }
+            } else {
+                // add an extra window acquire/release to measure overhead
+                while (state.keepRunning()) {
+                    cursor.moveToPosition(start);
+                    try {
+                        window.acquireReference();
+                        reader.read();
+                    } finally {
+                        window.releaseReference();
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/apct-tests/perftests/core/src/android/database/TableHelper.java b/apct-tests/perftests/core/src/android/database/TableHelper.java
new file mode 100644
index 0000000..48f3781
--- /dev/null
+++ b/apct-tests/perftests/core/src/android/database/TableHelper.java
@@ -0,0 +1,223 @@
+/*
+ * 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.database;
+
+import java.util.Date;
+import java.util.UUID;
+
+/**
+ * Helper class for creating and querying data from a database in performance tests.
+ *
+ * Subclasses can define different table/query formats.
+ */
+public abstract class TableHelper {
+
+    public interface CursorReader {
+        void read();
+    }
+
+    public abstract String createSql();
+    public abstract String insertSql();
+    public abstract Object[] createItem(int id);
+    public abstract String readSql();
+    public abstract CursorReader createReader(Cursor cursor);
+
+    /**
+     * 1 column, single integer
+     */
+    public static TableHelper INT_1 = new TableHelper() {
+        @Override
+        public String createSql() {
+            return "CREATE TABLE `Int1` ("
+                    + "`a` INTEGER,"
+                    + " PRIMARY KEY(`a`))";
+        }
+
+        @Override
+        public String insertSql() {
+            return "INSERT INTO `Int1`(`a`)"
+                    + " VALUES (?)";
+        }
+
+        @Override
+        public Object[] createItem(int id) {
+            return new Object[] {
+                    id,
+            };
+        }
+
+        @Override
+        public String readSql() {
+            return "SELECT * from Int1";
+        }
+
+        @Override
+        public CursorReader createReader(final Cursor cursor) {
+            final int cursorIndexOfA = cursor.getColumnIndexOrThrow("a");
+            return () -> {
+                cursor.getInt(cursorIndexOfA);
+            };
+        }
+    };
+    /**
+     * 10 columns of integers
+     */
+    public static TableHelper INT_10 = new TableHelper() {
+        @Override
+        public String createSql() {
+            return "CREATE TABLE `Int10` ("
+                    + "`a` INTEGER,"
+                    + " `b` INTEGER,"
+                    + " `c` INTEGER,"
+                    + " `d` INTEGER,"
+                    + " `e` INTEGER,"
+                    + " `f` INTEGER,"
+                    + " `g` INTEGER,"
+                    + " `h` INTEGER,"
+                    + " `i` INTEGER,"
+                    + " `j` INTEGER,"
+                    + " PRIMARY KEY(`a`))";
+        }
+
+        @Override
+        public String insertSql() {
+            return "INSERT INTO `Int10`(`a`,`b`,`c`,`d`,`e`,`f`,`g`,`h`,`i`,`j`)"
+                    + " VALUES (?,?,?,?,?,?,?,?,?,?)";
+        }
+
+        @Override
+        public Object[] createItem(int id) {
+            return new Object[] {
+                    id,
+                    id + 1,
+                    id + 2,
+                    id + 3,
+                    id + 4,
+                    id + 5,
+                    id + 6,
+                    id + 7,
+                    id + 8,
+                    id + 9,
+            };
+        }
+
+        @Override
+        public String readSql() {
+            return "SELECT * from Int10";
+        }
+
+        @Override
+        public CursorReader createReader(final Cursor cursor) {
+            final int cursorIndexOfA = cursor.getColumnIndexOrThrow("a");
+            final int cursorIndexOfB = cursor.getColumnIndexOrThrow("b");
+            final int cursorIndexOfC = cursor.getColumnIndexOrThrow("c");
+            final int cursorIndexOfD = cursor.getColumnIndexOrThrow("d");
+            final int cursorIndexOfE = cursor.getColumnIndexOrThrow("e");
+            final int cursorIndexOfF = cursor.getColumnIndexOrThrow("f");
+            final int cursorIndexOfG = cursor.getColumnIndexOrThrow("g");
+            final int cursorIndexOfH = cursor.getColumnIndexOrThrow("h");
+            final int cursorIndexOfI = cursor.getColumnIndexOrThrow("i");
+            final int cursorIndexOfJ = cursor.getColumnIndexOrThrow("j");
+            return () -> {
+                cursor.getInt(cursorIndexOfA);
+                cursor.getInt(cursorIndexOfB);
+                cursor.getInt(cursorIndexOfC);
+                cursor.getInt(cursorIndexOfD);
+                cursor.getInt(cursorIndexOfE);
+                cursor.getInt(cursorIndexOfF);
+                cursor.getInt(cursorIndexOfG);
+                cursor.getInt(cursorIndexOfH);
+                cursor.getInt(cursorIndexOfI);
+                cursor.getInt(cursorIndexOfJ);
+            };
+        }
+    };
+
+    /**
+     * Mock up of 'user' table with various ints/strings
+     */
+    public static TableHelper USER = new TableHelper() {
+        @Override
+        public String createSql() {
+            return "CREATE TABLE `User` ("
+                    + "`mId` INTEGER,"
+                    + " `mName` TEXT,"
+                    + " `mLastName` TEXT,"
+                    + " `mAge` INTEGER,"
+                    + " `mAdmin` INTEGER,"
+                    + " `mWeight` DOUBLE,"
+                    + " `mBirthday` INTEGER,"
+                    + " `mMoreText` TEXT,"
+                    + " PRIMARY KEY(`mId`))";
+        }
+
+        @Override
+        public String insertSql() {
+            return "INSERT INTO `User`(`mId`,`mName`,`mLastName`,`mAge`,"
+                    + "`mAdmin`,`mWeight`,`mBirthday`,`mMoreText`) VALUES (?,?,?,?,?,?,?,?)";
+        }
+
+        @Override
+        public Object[] createItem(int id) {
+            return new Object[] {
+                    id,
+                    UUID.randomUUID().toString(),
+                    UUID.randomUUID().toString(),
+                    (int) (10 + Math.random() * 50),
+                    0,
+                    (float)0,
+                    new Date().getTime(),
+                    UUID.randomUUID().toString(),
+            };
+        }
+
+        @Override
+        public String readSql() {
+            return "SELECT * from User";
+        }
+
+        @Override
+        public CursorReader createReader(final Cursor cursor) {
+            final int cursorIndexOfMId = cursor.getColumnIndexOrThrow("mId");
+            final int cursorIndexOfMName = cursor.getColumnIndexOrThrow("mName");
+            final int cursorIndexOfMLastName = cursor.getColumnIndexOrThrow("mLastName");
+            final int cursorIndexOfMAge = cursor.getColumnIndexOrThrow("mAge");
+            final int cursorIndexOfMAdmin = cursor.getColumnIndexOrThrow("mAdmin");
+            final int cursorIndexOfMWeight = cursor.getColumnIndexOrThrow("mWeight");
+            final int cursorIndexOfMBirthday = cursor.getColumnIndexOrThrow("mBirthday");
+            final int cursorIndexOfMMoreTextField = cursor.getColumnIndexOrThrow("mMoreText");
+            return () -> {
+                cursor.getInt(cursorIndexOfMId);
+                cursor.getString(cursorIndexOfMName);
+                cursor.getString(cursorIndexOfMLastName);
+                cursor.getInt(cursorIndexOfMAge);
+                cursor.getInt(cursorIndexOfMAdmin);
+                cursor.getFloat(cursorIndexOfMWeight);
+                if (!cursor.isNull(cursorIndexOfMBirthday)) {
+                    cursor.getLong(cursorIndexOfMBirthday);
+                }
+                cursor.getString(cursorIndexOfMMoreTextField);
+            };
+        }
+    };
+
+    public static TableHelper[] TABLE_HELPERS = new TableHelper[] {
+            INT_1,
+            INT_10,
+            USER,
+    };
+}
diff --git a/apct-tests/perftests/core/src/android/graphics/perftests/PaintMeasureTextTest.java b/apct-tests/perftests/core/src/android/graphics/perftests/PaintMeasureTextTest.java
index b81908c..b9ee613 100644
--- a/apct-tests/perftests/core/src/android/graphics/perftests/PaintMeasureTextTest.java
+++ b/apct-tests/perftests/core/src/android/graphics/perftests/PaintMeasureTextTest.java
@@ -80,11 +80,11 @@
         }
 
         while (state.keepRunning()) {
-            state.pauseTiming();
             if (mCacheMode == DONT_USE_CACHE) {
+                state.pauseTiming();
                 Canvas.freeTextLayoutCaches();
+                state.resumeTiming();
             }
-            state.resumeTiming();
 
             paint.measureText(mText);
         }
diff --git a/apct-tests/perftests/core/src/android/os/ParcelPerfTest.java b/apct-tests/perftests/core/src/android/os/ParcelPerfTest.java
index 8cd45f7..a92597f 100644
--- a/apct-tests/perftests/core/src/android/os/ParcelPerfTest.java
+++ b/apct-tests/perftests/core/src/android/os/ParcelPerfTest.java
@@ -57,6 +57,46 @@
     }
 
     @Test
+    public void timeGetDataPosition() {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            mParcel.dataPosition();
+        }
+    }
+
+    @Test
+    public void timeSetDataSize() {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            mParcel.setDataSize(0);
+        }
+    }
+
+    @Test
+    public void timeGetDataSize() {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            mParcel.dataSize();
+        }
+    }
+
+    @Test
+    public void timeSetDataCapacity() {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            mParcel.setDataCapacity(0);
+        }
+    }
+
+    @Test
+    public void timeGetDataCapacity() {
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            mParcel.dataCapacity();
+        }
+    }
+
+    @Test
     public void timeWriteByte() {
         final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
         final byte val = 0xF;
@@ -112,4 +152,19 @@
             mParcel.readLong();
         }
     }
+
+    @Test
+    public void timeObtainRecycle() {
+        // Use up the pooled instances.
+        // A lot bigger than the actual size but in case someone increased it.
+        final int POOL_SIZE = 100;
+        for (int i = 0; i < POOL_SIZE; i++) {
+            Parcel.obtain();
+        }
+
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            Parcel.obtain().recycle();
+        }
+    }
 }
diff --git a/apct-tests/perftests/multiuser/Android.mk b/apct-tests/perftests/multiuser/Android.mk
index f670043..e3f7775 100644
--- a/apct-tests/perftests/multiuser/Android.mk
+++ b/apct-tests/perftests/multiuser/Android.mk
@@ -20,8 +20,7 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
-    android-support-test \
-    apct-perftests-utils
+    android-support-test
 
 LOCAL_PACKAGE_NAME := MultiUserPerfTests
 
diff --git a/apct-tests/perftests/multiuser/src/android/multiuser/BenchmarkResults.java b/apct-tests/perftests/multiuser/src/android/multiuser/BenchmarkResults.java
new file mode 100644
index 0000000..e417ca7
--- /dev/null
+++ b/apct-tests/perftests/multiuser/src/android/multiuser/BenchmarkResults.java
@@ -0,0 +1,83 @@
+/*
+ * 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.multiuser;
+
+import android.os.Bundle;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.concurrent.TimeUnit;
+
+public class BenchmarkResults {
+    private final ArrayList<Long> mResults = new ArrayList<>();
+
+    public void addDuration(long duration) {
+        mResults.add(TimeUnit.NANOSECONDS.toMillis(duration));
+    }
+
+    public Bundle getStatsToReport() {
+        final Bundle stats = new Bundle();
+        stats.putDouble("Mean (ms)", mean());
+        return stats;
+    }
+
+    public Bundle getStatsToLog() {
+        final Bundle stats = new Bundle();
+        stats.putDouble("Mean (ms)", mean());
+        stats.putDouble("Median (ms)", median());
+        stats.putDouble("Sigma (ms)", standardDeviation());
+        return stats;
+    }
+
+    public ArrayList<Long> getAllDurations() {
+        return mResults;
+    }
+
+    private double mean() {
+        final int size = mResults.size();
+        long sum = 0;
+        for (int i = 0; i < size; ++i) {
+            sum += mResults.get(i);
+        }
+        return (double) sum / size;
+    }
+
+    private double median() {
+        final int size = mResults.size();
+        if (size == 0) {
+            return 0f;
+        }
+        Collections.sort(mResults);
+        final int idx = size / 2;
+        return size % 2 == 0
+                ? (double) (mResults.get(idx) + mResults.get(idx - 1)) / 2
+                : mResults.get(idx);
+    }
+
+    private double standardDeviation() {
+        final int size = mResults.size();
+        if (size == 0) {
+            return 0f;
+        }
+        final double mean = mean();
+        double sd = 0;
+        for (int i = 0; i < size; ++i) {
+            double diff = mResults.get(i) - mean;
+            sd += diff * diff;
+        }
+        return Math.sqrt(sd / size);
+    }
+}
diff --git a/apct-tests/perftests/multiuser/src/android/multiuser/BenchmarkResultsReporter.java b/apct-tests/perftests/multiuser/src/android/multiuser/BenchmarkResultsReporter.java
new file mode 100644
index 0000000..d3a3ce5
--- /dev/null
+++ b/apct-tests/perftests/multiuser/src/android/multiuser/BenchmarkResultsReporter.java
@@ -0,0 +1,76 @@
+/*
+ * 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.multiuser;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.os.Bundle;
+import android.support.test.InstrumentationRegistry;
+import android.util.Log;
+
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+import java.util.ArrayList;
+
+public class BenchmarkResultsReporter implements TestRule {
+    private final BenchmarkRunner mRunner;
+
+    public BenchmarkResultsReporter(BenchmarkRunner benchmarkRunner) {
+        mRunner = benchmarkRunner;
+    }
+
+    @Override
+    public Statement apply(final Statement base, final Description description) {
+        return new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                base.evaluate();
+                final Bundle stats = mRunner.getStatsToReport();
+                final String summary = getSummaryString(description.getMethodName(),
+                        mRunner.getStatsToLog());
+                logSummary(description.getTestClass().getSimpleName(), summary,
+                        mRunner.getAllDurations());
+                stats.putString(Instrumentation.REPORT_KEY_STREAMRESULT, summary);
+                InstrumentationRegistry.getInstrumentation().sendStatus(
+                        Activity.RESULT_OK, stats);
+            }
+        };
+    }
+
+    private void logSummary(String tag, String summary, ArrayList<Long> durations) {
+        final StringBuilder sb = new StringBuilder(summary);
+        final int size = durations.size();
+        for (int i = 0; i < size; ++i) {
+            sb.append("\n").append(i).append("->").append(durations.get(i));
+        }
+        Log.d(tag, sb.toString());
+    }
+
+    private String getSummaryString(String testName, Bundle stats) {
+        final StringBuilder sb = new StringBuilder();
+        sb.append("\n\n").append(getKey(testName));
+        for (String key : stats.keySet()) {
+            sb.append("\n").append(key).append(": ").append(stats.get(key));
+        }
+        return sb.toString();
+    }
+
+    private String getKey(String testName) {
+        return testName.replaceAll("Perf$", "");
+    }
+}
diff --git a/apct-tests/perftests/multiuser/src/android/multiuser/BenchmarkRunner.java b/apct-tests/perftests/multiuser/src/android/multiuser/BenchmarkRunner.java
new file mode 100644
index 0000000..c7bebf3
--- /dev/null
+++ b/apct-tests/perftests/multiuser/src/android/multiuser/BenchmarkRunner.java
@@ -0,0 +1,107 @@
+/*
+ * 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.multiuser;
+
+import android.os.Bundle;
+import android.os.SystemClock;
+
+import java.util.ArrayList;
+
+// Based on //platform/frameworks/base/apct-tests/perftests/utils/BenchmarkState.java
+public class BenchmarkRunner {
+
+    private static long COOL_OFF_PERIOD_MS = 2000;
+
+    private static final int NUM_ITERATIONS = 4;
+
+    private static final int NOT_STARTED = 0;  // The benchmark has not started yet.
+    private static final int RUNNING = 1;  // The benchmark is running.
+    private static final int PAUSED = 2; // The benchmark is paused
+    private static final int FINISHED = 3;  // The benchmark has stopped.
+
+    private final BenchmarkResults mResults = new BenchmarkResults();
+    private int mState = NOT_STARTED;  // Current benchmark state.
+    private int mIteration;
+
+    public long mStartTimeNs;
+    public long mPausedDurationNs;
+    public long mPausedTimeNs;
+
+    public boolean keepRunning() {
+        switch (mState) {
+            case NOT_STARTED:
+                mState = RUNNING;
+                prepareForNextRun();
+                return true;
+            case RUNNING:
+                mIteration++;
+                return startNextTestRun();
+            case PAUSED:
+                throw new IllegalStateException("Benchmarking is in paused state");
+            case FINISHED:
+                throw new IllegalStateException("Benchmarking is finished");
+            default:
+                throw new IllegalStateException("BenchmarkRunner is in unknown state");
+        }
+    }
+
+    private boolean startNextTestRun() {
+        mResults.addDuration(System.nanoTime() - mStartTimeNs - mPausedDurationNs);
+        if (mIteration == NUM_ITERATIONS) {
+            mState = FINISHED;
+            return false;
+        } else {
+            prepareForNextRun();
+            return true;
+        }
+    }
+
+    private void prepareForNextRun() {
+        // TODO: Once http://b/63115387 is fixed, look into using "am wait-for-broadcast-idle"
+        // command instead of waiting for a fixed amount of time.
+        SystemClock.sleep(COOL_OFF_PERIOD_MS);
+        mStartTimeNs = System.nanoTime();
+        mPausedDurationNs = 0;
+    }
+
+    public void pauseTiming() {
+        if (mState != RUNNING) {
+            throw new IllegalStateException("Unable to pause the runner: not running currently");
+        }
+        mPausedTimeNs = System.nanoTime();
+        mState = PAUSED;
+    }
+
+    public void resumeTiming() {
+        if (mState != PAUSED) {
+            throw new IllegalStateException("Unable to resume the runner: already running");
+        }
+        mPausedDurationNs += System.nanoTime() - mPausedTimeNs;
+        mState = RUNNING;
+    }
+
+    public Bundle getStatsToReport() {
+        return mResults.getStatsToReport();
+    }
+
+    public Bundle getStatsToLog() {
+        return mResults.getStatsToLog();
+    }
+
+    public ArrayList<Long> getAllDurations() {
+        return mResults.getAllDurations();
+    }
+}
\ No newline at end of file
diff --git a/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTest.java b/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTest.java
deleted file mode 100644
index e89157b..0000000
--- a/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTest.java
+++ /dev/null
@@ -1,308 +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.multiuser;
-
-import android.app.ActivityManager;
-import android.app.IActivityManager;
-import android.app.IStopUserCallback;
-import android.app.UserSwitchObserver;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.UserInfo;
-import android.os.RemoteException;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.perftests.utils.BenchmarkState;
-import android.perftests.utils.PerfStatusReporter;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.LargeTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.ArrayList;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Perf tests for user life cycle events.
- *
- * Running the tests:
- * make MultiUserPerfTests &&
- * adb install -r \
- *     ${ANDROID_PRODUCT_OUT}/data/app/MultiUserPerfTests/MultiUserPerfTests.apk &&
- * adb shell am instrument -e class android.multiuser.UserLifecycleTest \
- *     -w com.android.perftests.multiuser/android.support.test.runner.AndroidJUnitRunner
- */
-@LargeTest
-@RunWith(AndroidJUnit4.class)
-public class UserLifecycleTest {
-    private final int TIMEOUT_IN_SECOND = 10;
-    private final int CHECK_USER_REMOVED_INTERVAL_MS = 200;
-
-    private UserManager mUm;
-    private ActivityManager mAm;
-    private IActivityManager mIam;
-    private BenchmarkState mState;
-    private ArrayList<Integer> mUsersToRemove;
-
-    @Rule
-    public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
-
-    @Before
-    public void setUp() {
-        final Context context = InstrumentationRegistry.getContext();
-        mUm = UserManager.get(context);
-        mAm = context.getSystemService(ActivityManager.class);
-        mIam = ActivityManager.getService();
-        mState = mPerfStatusReporter.getBenchmarkState();
-        mUsersToRemove = new ArrayList<>();
-    }
-
-    @After
-    public void tearDown() {
-        for (int userId : mUsersToRemove) {
-            try {
-                mUm.removeUser(userId);
-            } catch (Exception e) {
-                // Ignore
-            }
-        }
-    }
-
-    @Test
-    public void createAndStartUserPerf() throws Exception {
-        while (mState.keepRunning()) {
-            final UserInfo userInfo = mUm.createUser("TestUser", 0);
-
-            final CountDownLatch latch = new CountDownLatch(1);
-            registerBroadcastReceiver(Intent.ACTION_USER_STARTED, latch, userInfo.id);
-            mIam.startUserInBackground(userInfo.id);
-            latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
-
-            mState.pauseTiming();
-            removeUser(userInfo.id);
-            mState.resumeTiming();
-        }
-    }
-
-    @Test
-    public void switchUserPerf() throws Exception {
-        while (mState.keepRunning()) {
-            mState.pauseTiming();
-            final int startUser = mAm.getCurrentUser();
-            final UserInfo userInfo = mUm.createUser("TestUser", 0);
-            mState.resumeTiming();
-
-            switchUser(userInfo.id);
-
-            mState.pauseTiming();
-            switchUser(startUser);
-            removeUser(userInfo.id);
-            mState.resumeTiming();
-        }
-    }
-
-    @Test
-    public void stopUserPerf() throws Exception {
-        while (mState.keepRunning()) {
-            mState.pauseTiming();
-            final UserInfo userInfo = mUm.createUser("TestUser", 0);
-            final CountDownLatch latch = new CountDownLatch(1);
-            registerBroadcastReceiver(Intent.ACTION_USER_STARTED, latch, userInfo.id);
-            mIam.startUserInBackground(userInfo.id);
-            latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
-            mState.resumeTiming();
-
-            stopUser(userInfo.id, false);
-
-            mState.pauseTiming();
-            removeUser(userInfo.id);
-            mState.resumeTiming();
-        }
-    }
-
-    @Test
-    public void lockedBootCompletedPerf() throws Exception {
-        while (mState.keepRunning()) {
-            mState.pauseTiming();
-            final int startUser = mAm.getCurrentUser();
-            final UserInfo userInfo = mUm.createUser("TestUser", 0);
-            final CountDownLatch latch = new CountDownLatch(1);
-            registerUserSwitchObserver(null, latch, userInfo.id);
-            mState.resumeTiming();
-
-            mAm.switchUser(userInfo.id);
-            latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
-
-            mState.pauseTiming();
-            switchUser(startUser);
-            removeUser(userInfo.id);
-            mState.resumeTiming();
-        }
-    }
-
-    @Test
-    public void managedProfileUnlockPerf() throws Exception {
-        while (mState.keepRunning()) {
-            mState.pauseTiming();
-            final UserInfo userInfo = mUm.createProfileForUser("TestUser",
-                    UserInfo.FLAG_MANAGED_PROFILE, mAm.getCurrentUser());
-            final CountDownLatch latch = new CountDownLatch(1);
-            registerBroadcastReceiver(Intent.ACTION_USER_UNLOCKED, latch, userInfo.id);
-            mState.resumeTiming();
-
-            mIam.startUserInBackground(userInfo.id);
-            latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
-
-            mState.pauseTiming();
-            removeUser(userInfo.id);
-            mState.resumeTiming();
-        }
-    }
-
-    @Test
-    public void ephemeralUserStoppedPerf() throws Exception {
-        while (mState.keepRunning()) {
-            mState.pauseTiming();
-            final int startUser = mAm.getCurrentUser();
-            final UserInfo userInfo = mUm.createUser("TestUser",
-                    UserInfo.FLAG_EPHEMERAL | UserInfo.FLAG_DEMO);
-            switchUser(userInfo.id);
-            final CountDownLatch latch = new CountDownLatch(1);
-            InstrumentationRegistry.getContext().registerReceiver(new BroadcastReceiver() {
-                @Override
-                public void onReceive(Context context, Intent intent) {
-                    if (Intent.ACTION_USER_STOPPED.equals(intent.getAction()) && intent.getIntExtra(
-                            Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL) == userInfo.id) {
-                        latch.countDown();
-                    }
-                }
-            }, new IntentFilter(Intent.ACTION_USER_STOPPED));
-            final CountDownLatch switchLatch = new CountDownLatch(1);
-            registerUserSwitchObserver(switchLatch, null, startUser);
-            mState.resumeTiming();
-
-            mAm.switchUser(startUser);
-            latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
-
-            mState.pauseTiming();
-            switchLatch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
-            removeUser(userInfo.id);
-            mState.resumeTiming();
-        }
-    }
-
-    @Test
-    public void managedProfileStoppedPerf() throws Exception {
-        while (mState.keepRunning()) {
-            mState.pauseTiming();
-            final UserInfo userInfo = mUm.createProfileForUser("TestUser",
-                    UserInfo.FLAG_MANAGED_PROFILE, mAm.getCurrentUser());
-            final CountDownLatch latch = new CountDownLatch(1);
-            registerBroadcastReceiver(Intent.ACTION_USER_UNLOCKED, latch, userInfo.id);
-            mIam.startUserInBackground(userInfo.id);
-            latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
-            mState.resumeTiming();
-
-            stopUser(userInfo.id, true);
-
-            mState.pauseTiming();
-            removeUser(userInfo.id);
-            mState.resumeTiming();
-        }
-    }
-
-    private void switchUser(int userId) throws Exception {
-        final CountDownLatch latch = new CountDownLatch(1);
-        registerUserSwitchObserver(latch, null, userId);
-        mAm.switchUser(userId);
-        latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
-    }
-
-    private void stopUser(int userId, boolean force) throws Exception {
-        final CountDownLatch latch = new CountDownLatch(1);
-        mIam.stopUser(userId, force /* force */, new IStopUserCallback.Stub() {
-            @Override
-            public void userStopped(int userId) throws RemoteException {
-                latch.countDown();
-            }
-
-            @Override
-            public void userStopAborted(int userId) throws RemoteException {
-            }
-        });
-        latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
-    }
-
-    private void registerUserSwitchObserver(final CountDownLatch switchLatch,
-            final CountDownLatch bootCompleteLatch, final int userId) throws Exception {
-        ActivityManager.getService().registerUserSwitchObserver(
-                new UserSwitchObserver() {
-                    @Override
-                    public void onUserSwitchComplete(int newUserId) throws RemoteException {
-                        if (switchLatch != null && userId == newUserId) {
-                            switchLatch.countDown();
-                        }
-                    }
-
-                    @Override
-                    public void onLockedBootComplete(int newUserId) {
-                        if (bootCompleteLatch != null && userId == newUserId) {
-                            bootCompleteLatch.countDown();
-                        }
-                    }
-                }, "UserLifecycleTest");
-    }
-
-    private void registerBroadcastReceiver(final String action, final CountDownLatch latch,
-            final int userId) {
-        InstrumentationRegistry.getContext().registerReceiverAsUser(new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                if (action.equals(intent.getAction()) && intent.getIntExtra(
-                        Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL) == userId) {
-                    latch.countDown();
-                }
-            }
-        }, UserHandle.of(userId), new IntentFilter(action), null, null);
-    }
-
-    private void removeUser(int userId) {
-        try {
-            mUm.removeUser(userId);
-            final long startTime = System.currentTimeMillis();
-            final long timeoutInMs = TIMEOUT_IN_SECOND * 1000;
-            while (mUm.getUserInfo(userId) != null &&
-                    System.currentTimeMillis() - startTime < timeoutInMs) {
-                TimeUnit.MILLISECONDS.sleep(CHECK_USER_REMOVED_INTERVAL_MS);
-            }
-        } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
-        } catch (Exception e) {
-            // Ignore
-        }
-        if (mUm.getUserInfo(userId) != null) {
-            mUsersToRemove.add(userId);
-        }
-    }
-}
diff --git a/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java b/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
new file mode 100644
index 0000000..855be08
--- /dev/null
+++ b/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
@@ -0,0 +1,315 @@
+/*
+ * 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.multiuser;
+
+import android.app.ActivityManager;
+import android.app.IActivityManager;
+import android.app.IStopUserCallback;
+import android.app.UserSwitchObserver;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.UserInfo;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.LargeTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Perf tests for user life cycle events.
+ *
+ * Running the tests:
+ *
+ * make MultiUserPerfTests &&
+ * adb install -r \
+ *     ${ANDROID_PRODUCT_OUT}/data/app/MultiUserPerfTests/MultiUserPerfTests.apk &&
+ * adb shell am instrument -e class android.multiuser.UserLifecycleTests \
+ *     -w com.android.perftests.multiuser/android.support.test.runner.AndroidJUnitRunner
+ *
+ * or
+ *
+ * bit MultiUserPerfTests:android.multiuser.UserLifecycleTests
+ *
+ * Note: If you use bit for running the tests, benchmark results won't be printed on the host side.
+ * But in either case, results can be checked on the device side 'adb logcat -s UserLifecycleTests'
+ */
+@LargeTest
+@RunWith(AndroidJUnit4.class)
+public class UserLifecycleTests {
+    private static final String TAG = UserLifecycleTests.class.getSimpleName();
+
+    private final int TIMEOUT_IN_SECOND = 30;
+    private final int CHECK_USER_REMOVED_INTERVAL_MS = 200;
+
+    private UserManager mUm;
+    private ActivityManager mAm;
+    private IActivityManager mIam;
+    private ArrayList<Integer> mUsersToRemove;
+
+    private final BenchmarkRunner mRunner = new BenchmarkRunner();
+    @Rule
+    public BenchmarkResultsReporter mReporter = new BenchmarkResultsReporter(mRunner);
+
+    @Before
+    public void setUp() {
+        final Context context = InstrumentationRegistry.getContext();
+        mUm = UserManager.get(context);
+        mAm = context.getSystemService(ActivityManager.class);
+        mIam = ActivityManager.getService();
+        mUsersToRemove = new ArrayList<>();
+    }
+
+    @After
+    public void tearDown() {
+        for (int userId : mUsersToRemove) {
+            try {
+                mUm.removeUser(userId);
+            } catch (Exception e) {
+                // Ignore
+            }
+        }
+    }
+
+    @Test
+    public void createAndStartUser() throws Exception {
+        while (mRunner.keepRunning()) {
+            final UserInfo userInfo = mUm.createUser("TestUser", 0);
+
+            final CountDownLatch latch = new CountDownLatch(1);
+            registerBroadcastReceiver(Intent.ACTION_USER_STARTED, latch, userInfo.id);
+            mIam.startUserInBackground(userInfo.id);
+            latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
+
+            mRunner.pauseTiming();
+            removeUser(userInfo.id);
+            mRunner.resumeTiming();
+        }
+    }
+
+    @Test
+    public void switchUser() throws Exception {
+        while (mRunner.keepRunning()) {
+            mRunner.pauseTiming();
+            final int startUser = mAm.getCurrentUser();
+            final UserInfo userInfo = mUm.createUser("TestUser", 0);
+            mRunner.resumeTiming();
+
+            switchUser(userInfo.id);
+
+            mRunner.pauseTiming();
+            switchUser(startUser);
+            removeUser(userInfo.id);
+            mRunner.resumeTiming();
+        }
+    }
+
+    @Test
+    public void stopUser() throws Exception {
+        while (mRunner.keepRunning()) {
+            mRunner.pauseTiming();
+            final UserInfo userInfo = mUm.createUser("TestUser", 0);
+            final CountDownLatch latch = new CountDownLatch(1);
+            registerBroadcastReceiver(Intent.ACTION_USER_STARTED, latch, userInfo.id);
+            mIam.startUserInBackground(userInfo.id);
+            latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
+            mRunner.resumeTiming();
+
+            stopUser(userInfo.id, false);
+
+            mRunner.pauseTiming();
+            removeUser(userInfo.id);
+            mRunner.resumeTiming();
+        }
+    }
+
+    @Test
+    public void lockedBootCompleted() throws Exception {
+        while (mRunner.keepRunning()) {
+            mRunner.pauseTiming();
+            final int startUser = mAm.getCurrentUser();
+            final UserInfo userInfo = mUm.createUser("TestUser", 0);
+            final CountDownLatch latch = new CountDownLatch(1);
+            registerUserSwitchObserver(null, latch, userInfo.id);
+            mRunner.resumeTiming();
+
+            mAm.switchUser(userInfo.id);
+            latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
+
+            mRunner.pauseTiming();
+            switchUser(startUser);
+            removeUser(userInfo.id);
+            mRunner.resumeTiming();
+        }
+    }
+
+    @Test
+    public void managedProfileUnlock() throws Exception {
+        while (mRunner.keepRunning()) {
+            mRunner.pauseTiming();
+            final UserInfo userInfo = mUm.createProfileForUser("TestUser",
+                    UserInfo.FLAG_MANAGED_PROFILE, mAm.getCurrentUser());
+            final CountDownLatch latch = new CountDownLatch(1);
+            registerBroadcastReceiver(Intent.ACTION_USER_UNLOCKED, latch, userInfo.id);
+            mRunner.resumeTiming();
+
+            mIam.startUserInBackground(userInfo.id);
+            latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
+
+            mRunner.pauseTiming();
+            removeUser(userInfo.id);
+            mRunner.resumeTiming();
+        }
+    }
+
+    @Test
+    public void ephemeralUserStopped() throws Exception {
+        while (mRunner.keepRunning()) {
+            mRunner.pauseTiming();
+            final int startUser = mAm.getCurrentUser();
+            final UserInfo userInfo = mUm.createUser("TestUser",
+                    UserInfo.FLAG_EPHEMERAL | UserInfo.FLAG_DEMO);
+            switchUser(userInfo.id);
+            final CountDownLatch latch = new CountDownLatch(1);
+            InstrumentationRegistry.getContext().registerReceiver(new BroadcastReceiver() {
+                @Override
+                public void onReceive(Context context, Intent intent) {
+                    if (Intent.ACTION_USER_STOPPED.equals(intent.getAction()) && intent.getIntExtra(
+                            Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL) == userInfo.id) {
+                        latch.countDown();
+                    }
+                }
+            }, new IntentFilter(Intent.ACTION_USER_STOPPED));
+            final CountDownLatch switchLatch = new CountDownLatch(1);
+            registerUserSwitchObserver(switchLatch, null, startUser);
+            mRunner.resumeTiming();
+
+            mAm.switchUser(startUser);
+            latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
+
+            mRunner.pauseTiming();
+            switchLatch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
+            removeUser(userInfo.id);
+            mRunner.resumeTiming();
+        }
+    }
+
+    @Test
+    public void managedProfileStopped() throws Exception {
+        while (mRunner.keepRunning()) {
+            mRunner.pauseTiming();
+            final UserInfo userInfo = mUm.createProfileForUser("TestUser",
+                    UserInfo.FLAG_MANAGED_PROFILE, mAm.getCurrentUser());
+            final CountDownLatch latch = new CountDownLatch(1);
+            registerBroadcastReceiver(Intent.ACTION_USER_UNLOCKED, latch, userInfo.id);
+            mIam.startUserInBackground(userInfo.id);
+            latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
+            mRunner.resumeTiming();
+
+            stopUser(userInfo.id, true);
+
+            mRunner.pauseTiming();
+            removeUser(userInfo.id);
+            mRunner.resumeTiming();
+        }
+    }
+
+    private void switchUser(int userId) throws Exception {
+        final CountDownLatch latch = new CountDownLatch(1);
+        registerUserSwitchObserver(latch, null, userId);
+        mAm.switchUser(userId);
+        latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
+    }
+
+    private void stopUser(int userId, boolean force) throws Exception {
+        final CountDownLatch latch = new CountDownLatch(1);
+        mIam.stopUser(userId, force /* force */, new IStopUserCallback.Stub() {
+            @Override
+            public void userStopped(int userId) throws RemoteException {
+                latch.countDown();
+            }
+
+            @Override
+            public void userStopAborted(int userId) throws RemoteException {
+            }
+        });
+        latch.await(TIMEOUT_IN_SECOND, TimeUnit.SECONDS);
+    }
+
+    private void registerUserSwitchObserver(final CountDownLatch switchLatch,
+            final CountDownLatch bootCompleteLatch, final int userId) throws Exception {
+        ActivityManager.getService().registerUserSwitchObserver(
+                new UserSwitchObserver() {
+                    @Override
+                    public void onUserSwitchComplete(int newUserId) throws RemoteException {
+                        if (switchLatch != null && userId == newUserId) {
+                            switchLatch.countDown();
+                        }
+                    }
+
+                    @Override
+                    public void onLockedBootComplete(int newUserId) {
+                        if (bootCompleteLatch != null && userId == newUserId) {
+                            bootCompleteLatch.countDown();
+                        }
+                    }
+                }, TAG);
+    }
+
+    private void registerBroadcastReceiver(final String action, final CountDownLatch latch,
+            final int userId) {
+        InstrumentationRegistry.getContext().registerReceiverAsUser(new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                if (action.equals(intent.getAction()) && intent.getIntExtra(
+                        Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL) == userId) {
+                    latch.countDown();
+                }
+            }
+        }, UserHandle.of(userId), new IntentFilter(action), null, null);
+    }
+
+    private void removeUser(int userId) {
+        try {
+            mUm.removeUser(userId);
+            final long startTime = System.currentTimeMillis();
+            final long timeoutInMs = TIMEOUT_IN_SECOND * 1000;
+            while (mUm.getUserInfo(userId) != null &&
+                    System.currentTimeMillis() - startTime < timeoutInMs) {
+                TimeUnit.MILLISECONDS.sleep(CHECK_USER_REMOVED_INTERVAL_MS);
+            }
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+        } catch (Exception e) {
+            // Ignore
+        }
+        if (mUm.getUserInfo(userId) != null) {
+            mUsersToRemove.add(userId);
+        }
+    }
+}
diff --git a/api/current.txt b/api/current.txt
index 67280d0..5499d9e 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -388,6 +388,7 @@
     field public static final int childIndicatorRight = 16843024; // 0x1010110
     field public static final int childIndicatorStart = 16843731; // 0x10103d3
     field public static final int choiceMode = 16843051; // 0x101012b
+    field public static final int classLoader = 16844139; // 0x101056b
     field public static final int clearTaskOnLaunch = 16842773; // 0x1010015
     field public static final int clickable = 16842981; // 0x10100e5
     field public static final int clipChildren = 16842986; // 0x10100ea
@@ -918,6 +919,7 @@
     field public static final int multiprocess = 16842771; // 0x1010013
     field public static final int name = 16842755; // 0x1010003
     field public static final int navigationBarColor = 16843858; // 0x1010452
+    field public static final int navigationBarDividerColor = 16844141; // 0x101056d
     field public static final int navigationContentDescription = 16843969; // 0x10104c1
     field public static final int navigationIcon = 16843968; // 0x10104c0
     field public static final int navigationMode = 16843471; // 0x10102cf
@@ -1180,6 +1182,7 @@
     field public static final int showSilent = 16843259; // 0x10101fb
     field public static final int showText = 16843949; // 0x10104ad
     field public static final deprecated int showWeekNumber = 16843582; // 0x101033e
+    field public static final int showWhenLocked = 16844137; // 0x1010569
     field public static final deprecated int shownWeekCount = 16843585; // 0x1010341
     field public static final int shrinkColumns = 16843082; // 0x101014a
     field public static final deprecated int singleLine = 16843101; // 0x101015d
@@ -1438,6 +1441,7 @@
     field public static final int trimPathOffset = 16843786; // 0x101040a
     field public static final int trimPathStart = 16843784; // 0x1010408
     field public static final int tunerCount = 16844061; // 0x101051d
+    field public static final int turnScreenOn = 16844138; // 0x101056a
     field public static final int type = 16843169; // 0x10101a1
     field public static final int typeface = 16842902; // 0x1010096
     field public static final int uiOptions = 16843672; // 0x1010398
@@ -1521,6 +1525,8 @@
     field public static final int windowHideAnimation = 16842935; // 0x10100b7
     field public static final int windowIsFloating = 16842839; // 0x1010057
     field public static final int windowIsTranslucent = 16842840; // 0x1010058
+    field public static final int windowLayoutInDisplayCutoutMode = 16844166; // 0x1010586
+    field public static final int windowLightNavigationBar = 16844140; // 0x101056c
     field public static final int windowLightStatusBar = 16844000; // 0x10104e0
     field public static final int windowMinWidthMajor = 16843606; // 0x1010356
     field public static final int windowMinWidthMinor = 16843607; // 0x1010357
@@ -1935,6 +1941,7 @@
     field public static final int VideoView_error_text_invalid_progressive_playback = 17039381; // 0x1040015
     field public static final int VideoView_error_text_unknown = 17039377; // 0x1040011
     field public static final int VideoView_error_title = 17039378; // 0x1040012
+    field public static final int autofill = 17039386; // 0x104001a
     field public static final int cancel = 17039360; // 0x1040000
     field public static final int copy = 17039361; // 0x1040001
     field public static final int copyUrl = 17039362; // 0x1040002
@@ -3162,6 +3169,7 @@
 
   public final class AnimatorSet extends android.animation.Animator {
     ctor public AnimatorSet();
+    method public android.animation.AnimatorSet clone();
     method public java.util.ArrayList<android.animation.Animator> getChildAnimations();
     method public long getCurrentPlayTime();
     method public long getDuration();
@@ -3280,6 +3288,7 @@
 
   public final class ObjectAnimator extends android.animation.ValueAnimator {
     ctor public ObjectAnimator();
+    method public android.animation.ObjectAnimator clone();
     method public java.lang.String getPropertyName();
     method public java.lang.Object getTarget();
     method public static android.animation.ObjectAnimator ofArgb(java.lang.Object, java.lang.String, int...);
@@ -3305,6 +3314,7 @@
     method public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofPropertyValuesHolder(java.lang.Object, android.animation.PropertyValuesHolder...);
     method public void setAutoCancel(boolean);
+    method public android.animation.ObjectAnimator setDuration(long);
     method public void setProperty(android.util.Property);
     method public void setPropertyName(java.lang.String);
   }
@@ -3386,6 +3396,7 @@
     ctor public ValueAnimator();
     method public void addUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener);
     method public static boolean areAnimatorsEnabled();
+    method public android.animation.ValueAnimator clone();
     method public float getAnimatedFraction();
     method public java.lang.Object getAnimatedValue();
     method public java.lang.Object getAnimatedValue(java.lang.String);
@@ -3759,10 +3770,12 @@
     method public final void setResult(int);
     method public final void setResult(int, android.content.Intent);
     method public final deprecated void setSecondaryProgress(int);
+    method public void setShowWhenLocked(boolean);
     method public void setTaskDescription(android.app.ActivityManager.TaskDescription);
     method public void setTitle(java.lang.CharSequence);
     method public void setTitle(int);
     method public deprecated void setTitleColor(int);
+    method public void setTurnScreenOn(boolean);
     method public void setVisible(boolean);
     method public final void setVolumeControlStream(int);
     method public void setVrModeEnabled(boolean, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
@@ -4959,6 +4972,7 @@
     ctor public IntentService(java.lang.String);
     method public android.os.IBinder onBind(android.content.Intent);
     method protected abstract void onHandleIntent(android.content.Intent);
+    method public void onStart(android.content.Intent, int);
     method public void setIntentRedelivery(boolean);
   }
 
@@ -5592,6 +5606,7 @@
     method public java.util.List<android.app.NotificationChannelGroup> getNotificationChannelGroups();
     method public java.util.List<android.app.NotificationChannel> getNotificationChannels();
     method public android.app.NotificationManager.Policy getNotificationPolicy();
+    method public boolean isNotificationListenerAccessGranted(android.content.ComponentName);
     method public boolean isNotificationPolicyAccessGranted();
     method public void notify(int, android.app.Notification);
     method public void notify(java.lang.String, int, android.app.Notification);
@@ -6122,7 +6137,6 @@
   }
 
   public class WallpaperManager {
-    method public void addOnColorsChangedListener(android.app.WallpaperManager.OnColorsChangedListener);
     method public void addOnColorsChangedListener(android.app.WallpaperManager.OnColorsChangedListener, android.os.Handler);
     method public void clear() throws java.io.IOException;
     method public void clear(int) throws java.io.IOException;
@@ -9351,6 +9365,7 @@
     field public static final java.lang.String ACTION_INPUT_METHOD_CHANGED = "android.intent.action.INPUT_METHOD_CHANGED";
     field public static final java.lang.String ACTION_INSERT = "android.intent.action.INSERT";
     field public static final java.lang.String ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT";
+    field public static final java.lang.String ACTION_INSTALL_FAILURE = "android.intent.action.INSTALL_FAILURE";
     field public static final java.lang.String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE";
     field public static final java.lang.String ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED";
     field public static final java.lang.String ACTION_LOCKED_BOOT_COMPLETED = "android.intent.action.LOCKED_BOOT_COMPLETED";
@@ -9533,6 +9548,7 @@
     field public static final deprecated java.lang.String EXTRA_SHORTCUT_INTENT = "android.intent.extra.shortcut.INTENT";
     field public static final deprecated java.lang.String EXTRA_SHORTCUT_NAME = "android.intent.extra.shortcut.NAME";
     field public static final java.lang.String EXTRA_SHUTDOWN_USERSPACE_ONLY = "android.intent.extra.SHUTDOWN_USERSPACE_ONLY";
+    field public static final java.lang.String EXTRA_SPLIT_NAME = "android.intent.extra.SPLIT_NAME";
     field public static final java.lang.String EXTRA_STREAM = "android.intent.extra.STREAM";
     field public static final java.lang.String EXTRA_SUBJECT = "android.intent.extra.SUBJECT";
     field public static final java.lang.String EXTRA_TEMPLATE = "android.intent.extra.TEMPLATE";
@@ -10153,6 +10169,7 @@
     method public int describeContents();
     method public void dump(android.util.Printer, java.lang.String);
     method public static java.lang.CharSequence getCategoryTitle(android.content.Context, int);
+    method public boolean isVirtualPreload();
     method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager);
     field public static final int CATEGORY_AUDIO = 1; // 0x1
     field public static final int CATEGORY_GAME = 0; // 0x0
@@ -10487,6 +10504,7 @@
     method public java.io.OutputStream openWrite(java.lang.String, long, long) throws java.io.IOException;
     method public void removeSplit(java.lang.String) throws java.io.IOException;
     method public void setStagingProgress(float);
+    method public void transfer(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
   }
 
   public static abstract class PackageInstaller.SessionCallback {
@@ -10504,10 +10522,16 @@
     method public android.graphics.Bitmap getAppIcon();
     method public java.lang.CharSequence getAppLabel();
     method public java.lang.String getAppPackageName();
+    method public int getInstallLocation();
     method public int getInstallReason();
     method public java.lang.String getInstallerPackageName();
+    method public int getMode();
+    method public int getOriginatingUid();
+    method public android.net.Uri getOriginatingUri();
     method public float getProgress();
+    method public android.net.Uri getReferrerUri();
     method public int getSessionId();
+    method public long getSize();
     method public boolean isActive();
     method public boolean isSealed();
     method public void writeToParcel(android.os.Parcel, int);
@@ -10714,8 +10738,11 @@
     field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce";
     field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef";
     field public static final java.lang.String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep";
+    field public static final java.lang.String FEATURE_PC = "android.hardware.type.pc";
     field public static final java.lang.String FEATURE_PICTURE_IN_PICTURE = "android.software.picture_in_picture";
     field public static final java.lang.String FEATURE_PRINTING = "android.software.print";
+    field public static final java.lang.String FEATURE_RAM_LOW = "android.hardware.ram.low";
+    field public static final java.lang.String FEATURE_RAM_NORMAL = "android.hardware.ram.normal";
     field public static final java.lang.String FEATURE_SCREEN_LANDSCAPE = "android.hardware.screen.landscape";
     field public static final java.lang.String FEATURE_SCREEN_PORTRAIT = "android.hardware.screen.portrait";
     field public static final java.lang.String FEATURE_SECURELY_REMOVES_USERS = "android.software.securely_removes_users";
@@ -10755,6 +10782,7 @@
     field public static final java.lang.String FEATURE_WIFI = "android.hardware.wifi";
     field public static final java.lang.String FEATURE_WIFI_AWARE = "android.hardware.wifi.aware";
     field public static final java.lang.String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
+    field public static final java.lang.String FEATURE_WIFI_PASSPOINT = "android.hardware.wifi.passpoint";
     field public static final int GET_ACTIVITIES = 1; // 0x1
     field public static final int GET_CONFIGURATIONS = 16384; // 0x4000
     field public static final deprecated int GET_DISABLED_COMPONENTS = 512; // 0x200
@@ -10855,6 +10883,7 @@
     field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40
     field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20
     field public static final int PROTECTION_FLAG_INSTALLER = 256; // 0x100
+    field public static final int PROTECTION_FLAG_INSTANT = 4096; // 0x1000
     field public static final int PROTECTION_FLAG_PRE23 = 128; // 0x80
     field public static final int PROTECTION_FLAG_PREINSTALLED = 1024; // 0x400
     field public static final int PROTECTION_FLAG_PRIVILEGED = 16; // 0x10
@@ -11061,6 +11090,7 @@
 
   public static class AssetFileDescriptor.AutoCloseInputStream extends android.os.ParcelFileDescriptor.AutoCloseInputStream {
     ctor public AssetFileDescriptor.AutoCloseInputStream(android.content.res.AssetFileDescriptor) throws java.io.IOException;
+    method public void mark(int);
   }
 
   public static class AssetFileDescriptor.AutoCloseOutputStream extends android.os.ParcelFileDescriptor.AutoCloseOutputStream {
@@ -11368,6 +11398,7 @@
     method public void copyStringToBuffer(int, android.database.CharArrayBuffer);
     method public void deactivate();
     method public void fillWindow(int, android.database.CursorWindow);
+    method protected void finalize();
     method public byte[] getBlob(int);
     method public int getColumnCount();
     method public int getColumnIndex(java.lang.String);
@@ -11849,6 +11880,7 @@
     method public void beginTransactionWithListenerNonExclusive(android.database.sqlite.SQLiteTransactionListener);
     method public android.database.sqlite.SQLiteStatement compileStatement(java.lang.String) throws android.database.SQLException;
     method public static android.database.sqlite.SQLiteDatabase create(android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public static android.database.sqlite.SQLiteDatabase createInMemory(android.database.sqlite.SQLiteDatabase.OpenParams);
     method public int delete(java.lang.String, java.lang.String, java.lang.String[]);
     method public static boolean deleteDatabase(java.io.File);
     method public void disableWriteAheadLogging();
@@ -11878,6 +11910,7 @@
     method public boolean needUpgrade(int);
     method protected void onAllReferencesReleased();
     method public static android.database.sqlite.SQLiteDatabase openDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, int);
+    method public static android.database.sqlite.SQLiteDatabase openDatabase(java.io.File, android.database.sqlite.SQLiteDatabase.OpenParams);
     method public static android.database.sqlite.SQLiteDatabase openDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, int, android.database.DatabaseErrorHandler);
     method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.io.File, android.database.sqlite.SQLiteDatabase.CursorFactory);
     method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory);
@@ -11928,6 +11961,28 @@
     method public abstract android.database.Cursor newCursor(android.database.sqlite.SQLiteDatabase, android.database.sqlite.SQLiteCursorDriver, java.lang.String, android.database.sqlite.SQLiteQuery);
   }
 
+  public static final class SQLiteDatabase.OpenParams {
+    method public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory();
+    method public android.database.DatabaseErrorHandler getErrorHandler();
+    method public long getIdleConnectionTimeout();
+    method public int getLookasideSlotCount();
+    method public int getLookasideSlotSize();
+    method public int getOpenFlags();
+  }
+
+  public static final class SQLiteDatabase.OpenParams.Builder {
+    ctor public SQLiteDatabase.OpenParams.Builder();
+    ctor public SQLiteDatabase.OpenParams.Builder(android.database.sqlite.SQLiteDatabase.OpenParams);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder addOpenFlags(int);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams build();
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder removeOpenFlags(int);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setErrorHandler(android.database.DatabaseErrorHandler);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setIdleConnectionTimeout(long);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setLookasideConfig(int, int);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setOpenFlags(int);
+  }
+
   public class SQLiteDatabaseCorruptException extends android.database.sqlite.SQLiteException {
     ctor public SQLiteDatabaseCorruptException();
     ctor public SQLiteDatabaseCorruptException(java.lang.String);
@@ -11981,6 +12036,8 @@
     method public void onDowngrade(android.database.sqlite.SQLiteDatabase, int, int);
     method public void onOpen(android.database.sqlite.SQLiteDatabase);
     method public abstract void onUpgrade(android.database.sqlite.SQLiteDatabase, int, int);
+    method public void setIdleConnectionTimeout(long);
+    method public void setLookasideConfig(int, int);
     method public void setWriteAheadLoggingEnabled(boolean);
   }
 
@@ -13842,6 +13899,7 @@
     method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setOpacity(int);
     method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
   }
@@ -13922,6 +13980,7 @@
     method public void setAlpha(int);
     method public void setAntiAlias(boolean);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setGravity(int);
     method public void setMipMap(boolean);
     method public void setTargetDensity(android.graphics.Canvas);
@@ -14047,6 +14106,7 @@
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
     method protected void setConstantState(android.graphics.drawable.DrawableContainer.DrawableContainerState);
+    method public void setDither(boolean);
     method public void setEnterFadeDuration(int);
     method public void setExitFadeDuration(int);
     method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
@@ -14113,6 +14173,7 @@
     method public void setColors(int[]);
     method public void setCornerRadii(float[]);
     method public void setCornerRadius(float);
+    method public void setDither(boolean);
     method public void setGradientCenter(float, float);
     method public void setGradientRadius(float);
     method public void setGradientType(int);
@@ -14207,6 +14268,7 @@
     method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setDrawable(int, android.graphics.drawable.Drawable);
     method public boolean setDrawableByLayerId(int, android.graphics.drawable.Drawable);
     method public void setId(int, int);
@@ -14247,6 +14309,7 @@
     method public android.graphics.Paint getPaint();
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setTargetDensity(android.graphics.Canvas);
     method public void setTargetDensity(android.util.DisplayMetrics);
     method public void setTargetDensity(int);
@@ -14309,6 +14372,7 @@
     method protected void onDraw(android.graphics.drawable.shapes.Shape, android.graphics.Canvas, android.graphics.Paint);
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setIntrinsicHeight(int);
     method public void setIntrinsicWidth(int);
     method public void setPadding(int, int, int, int);
@@ -14350,27 +14414,32 @@
 
   public class ArcShape extends android.graphics.drawable.shapes.RectShape {
     ctor public ArcShape(float, float);
+    method public android.graphics.drawable.shapes.ArcShape clone() throws java.lang.CloneNotSupportedException;
     method public final float getStartAngle();
     method public final float getSweepAngle();
   }
 
   public class OvalShape extends android.graphics.drawable.shapes.RectShape {
     ctor public OvalShape();
+    method public android.graphics.drawable.shapes.OvalShape clone() throws java.lang.CloneNotSupportedException;
   }
 
   public class PathShape extends android.graphics.drawable.shapes.Shape {
     ctor public PathShape(android.graphics.Path, float, float);
+    method public android.graphics.drawable.shapes.PathShape clone() throws java.lang.CloneNotSupportedException;
     method public void draw(android.graphics.Canvas, android.graphics.Paint);
   }
 
   public class RectShape extends android.graphics.drawable.shapes.Shape {
     ctor public RectShape();
+    method public android.graphics.drawable.shapes.RectShape clone() throws java.lang.CloneNotSupportedException;
     method public void draw(android.graphics.Canvas, android.graphics.Paint);
     method protected final android.graphics.RectF rect();
   }
 
   public class RoundRectShape extends android.graphics.drawable.shapes.RectShape {
     ctor public RoundRectShape(float[], android.graphics.RectF, float[]);
+    method public android.graphics.drawable.shapes.RoundRectShape clone() throws java.lang.CloneNotSupportedException;
   }
 
   public abstract class Shape implements java.lang.Cloneable {
@@ -14455,6 +14524,7 @@
     method public final void autoFocus(android.hardware.Camera.AutoFocusCallback);
     method public final void cancelAutoFocus();
     method public final boolean enableShutterSound(boolean);
+    method protected void finalize();
     method public static void getCameraInfo(int, android.hardware.Camera.CameraInfo);
     method public static int getNumberOfCameras();
     method public android.hardware.Camera.Parameters getParameters();
@@ -15064,6 +15134,7 @@
     method public <T> T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
     method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableCaptureRequestKeys();
     method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getAvailableCaptureResultKeys();
+    method public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeys();
     field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
     field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
     field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_MODES;
@@ -15420,6 +15491,7 @@
   public final class CaptureRequest extends android.hardware.camera2.CameraMetadata implements android.os.Parcelable {
     method public int describeContents();
     method public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
+    method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getKeys();
     method public java.lang.Object getTag();
     method public boolean isReprocess();
     method public void writeToParcel(android.os.Parcel, int);
@@ -15498,6 +15570,7 @@
   public class CaptureResult extends android.hardware.camera2.CameraMetadata {
     method public <T> T get(android.hardware.camera2.CaptureResult.Key<T>);
     method public long getFrameNumber();
+    method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getKeys();
     method public android.hardware.camera2.CaptureRequest getRequest();
     method public int getSequenceId();
     field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
@@ -15789,9 +15862,12 @@
     field public static final int FINGERPRINT_ERROR_CANCELED = 5; // 0x5
     field public static final int FINGERPRINT_ERROR_HW_UNAVAILABLE = 1; // 0x1
     field public static final int FINGERPRINT_ERROR_LOCKOUT = 7; // 0x7
+    field public static final int FINGERPRINT_ERROR_LOCKOUT_PERMANENT = 9; // 0x9
     field public static final int FINGERPRINT_ERROR_NO_SPACE = 4; // 0x4
     field public static final int FINGERPRINT_ERROR_TIMEOUT = 3; // 0x3
     field public static final int FINGERPRINT_ERROR_UNABLE_TO_PROCESS = 2; // 0x2
+    field public static final int FINGERPRINT_ERROR_USER_CANCELED = 10; // 0xa
+    field public static final int FINGERPRINT_ERROR_VENDOR = 8; // 0x8
   }
 
   public static abstract class FingerprintManager.AuthenticationCallback {
@@ -17931,6 +18007,7 @@
   }
 
   public class DateIntervalFormat extends android.icu.text.UFormat {
+    method public synchronized java.lang.Object clone();
     method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
     method public final synchronized java.lang.StringBuffer format(android.icu.util.DateInterval, java.lang.StringBuffer, java.text.FieldPosition);
     method public final synchronized java.lang.StringBuffer format(android.icu.util.Calendar, android.icu.util.Calendar, java.lang.StringBuffer, java.text.FieldPosition);
@@ -18714,6 +18791,7 @@
 
   public final class RuleBasedCollator extends android.icu.text.Collator {
     ctor public RuleBasedCollator(java.lang.String) throws java.lang.Exception;
+    method public android.icu.text.RuleBasedCollator cloneAsThawed();
     method public int compare(java.lang.String, java.lang.String);
     method public android.icu.text.CollationElementIterator getCollationElementIterator(java.lang.String);
     method public android.icu.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
@@ -18740,6 +18818,7 @@
     method public void setFrenchCollation(boolean);
     method public void setFrenchCollationDefault();
     method public void setLowerCaseFirst(boolean);
+    method public android.icu.text.RuleBasedCollator setMaxVariable(int);
     method public void setNumericCollation(boolean);
     method public void setNumericCollationDefault();
     method public void setStrengthDefault();
@@ -21260,6 +21339,7 @@
     ctor public AudioRecord(int, int, int, int, int) throws java.lang.IllegalArgumentException;
     method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
     method public deprecated void addOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener, android.os.Handler);
+    method protected void finalize();
     method public int getAudioFormat();
     method public int getAudioSessionId();
     method public int getAudioSource();
@@ -21364,6 +21444,7 @@
     method public deprecated void addOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener, android.os.Handler);
     method public int attachAuxEffect(int);
     method public android.media.VolumeShaper createVolumeShaper(android.media.VolumeShaper.Configuration);
+    method protected void finalize();
     method public void flush();
     method public int getAudioFormat();
     method public int getAudioSessionId();
@@ -21762,6 +21843,7 @@
     method public boolean clearQueue();
     method public java.lang.Object clone() throws java.lang.CloneNotSupportedException;
     method public boolean closeJetFile();
+    method protected void finalize();
     method public static android.media.JetPlayer getJetPlayer();
     method public static int getMaxTracks();
     method public boolean loadJetFile(java.lang.String);
@@ -21801,6 +21883,7 @@
     ctor public MediaCas(int) throws android.media.MediaCasException.UnsupportedCasException;
     method public void close();
     method public static android.media.MediaCas.PluginDescriptor[] enumeratePlugins();
+    method protected void finalize();
     method public static boolean isSystemIdSupported(int);
     method public android.media.MediaCas.Session openSession() throws android.media.MediaCasException;
     method public void processEmm(byte[], int, int) throws android.media.MediaCasException;
@@ -21857,6 +21940,7 @@
     method public static android.view.Surface createPersistentInputSurface();
     method public final int dequeueInputBuffer(long);
     method public final int dequeueOutputBuffer(android.media.MediaCodec.BufferInfo, long);
+    method protected void finalize();
     method public final void flush();
     method public android.media.MediaCodecInfo getCodecInfo();
     method public java.nio.ByteBuffer getInputBuffer(int);
@@ -22097,6 +22181,8 @@
     field public static final int AVCLevel51 = 32768; // 0x8000
     field public static final int AVCLevel52 = 65536; // 0x10000
     field public static final int AVCProfileBaseline = 1; // 0x1
+    field public static final int AVCProfileConstrainedBaseline = 65536; // 0x10000
+    field public static final int AVCProfileConstrainedHigh = 524288; // 0x80000
     field public static final int AVCProfileExtended = 4; // 0x4
     field public static final int AVCProfileHigh = 8; // 0x8
     field public static final int AVCProfileHigh10 = 16; // 0x10
@@ -22114,11 +22200,13 @@
     field public static final int DolbyVisionLevelUhd60 = 256; // 0x100
     field public static final int DolbyVisionProfileDvavPen = 2; // 0x2
     field public static final int DolbyVisionProfileDvavPer = 1; // 0x1
+    field public static final int DolbyVisionProfileDvavSe = 512; // 0x200
     field public static final int DolbyVisionProfileDvheDen = 8; // 0x8
     field public static final int DolbyVisionProfileDvheDer = 4; // 0x4
     field public static final int DolbyVisionProfileDvheDtb = 128; // 0x80
     field public static final int DolbyVisionProfileDvheDth = 64; // 0x40
     field public static final int DolbyVisionProfileDvheDtr = 16; // 0x10
+    field public static final int DolbyVisionProfileDvheSt = 256; // 0x100
     field public static final int DolbyVisionProfileDvheStn = 32; // 0x20
     field public static final int H263Level10 = 1; // 0x1
     field public static final int H263Level20 = 2; // 0x2
@@ -22268,6 +22356,7 @@
 
   public final class MediaCrypto {
     ctor public MediaCrypto(java.util.UUID, byte[]) throws android.media.MediaCryptoException;
+    method protected void finalize();
     method public static final boolean isCryptoSchemeSupported(java.util.UUID);
     method public final void release();
     method public final boolean requiresSecureDecoderComponent(java.lang.String);
@@ -22288,6 +22377,7 @@
     ctor public MediaDescrambler(int) throws android.media.MediaCasException.UnsupportedCasException;
     method public void close();
     method public final int descramble(java.nio.ByteBuffer, java.nio.ByteBuffer, android.media.MediaCodec.CryptoInfo);
+    method protected void finalize();
     method public final boolean requiresSecureDecoderComponent(java.lang.String);
     method public final void setMediaCasSession(android.media.MediaCas.Session);
   }
@@ -22330,6 +22420,7 @@
   public final class MediaDrm {
     ctor public MediaDrm(java.util.UUID) throws android.media.UnsupportedSchemeException;
     method public void closeSession(byte[]);
+    method protected void finalize();
     method public android.media.MediaDrm.CryptoSession getCryptoSession(byte[], java.lang.String, java.lang.String);
     method public android.media.MediaDrm.KeyRequest getKeyRequest(byte[], byte[], java.lang.String, int, java.util.HashMap<java.lang.String, java.lang.String>) throws android.media.NotProvisionedException;
     method public byte[] getPropertyByteArray(java.lang.String);
@@ -22426,6 +22517,7 @@
   public final class MediaExtractor {
     ctor public MediaExtractor();
     method public boolean advance();
+    method protected void finalize();
     method public long getCachedDuration();
     method public android.media.MediaExtractor.CasInfo getCasInfo(int);
     method public android.media.DrmInitData getDrmInitData();
@@ -22658,6 +22750,7 @@
     method public android.graphics.Bitmap getFrameAtTime(long, int);
     method public android.graphics.Bitmap getFrameAtTime(long);
     method public android.graphics.Bitmap getFrameAtTime();
+    method public android.graphics.Bitmap getScaledFrameAtTime(long, int, int, int);
     method public void release();
     method public void setDataSource(java.lang.String) throws java.lang.IllegalArgumentException;
     method public void setDataSource(java.lang.String, java.util.Map<java.lang.String, java.lang.String>) throws java.lang.IllegalArgumentException;
@@ -22727,6 +22820,7 @@
     method public static android.media.MediaPlayer create(android.content.Context, int, android.media.AudioAttributes, int);
     method public android.media.VolumeShaper createVolumeShaper(android.media.VolumeShaper.Configuration);
     method public void deselectTrack(int) throws java.lang.IllegalStateException;
+    method protected void finalize();
     method public int getAudioSessionId();
     method public int getCurrentPosition();
     method public android.media.MediaPlayer.DrmInfo getDrmInfo();
@@ -22922,6 +23016,7 @@
 
   public class MediaRecorder {
     ctor public MediaRecorder();
+    method protected void finalize();
     method public static final int getAudioSourceMax();
     method public int getMaxAmplitude() throws java.lang.IllegalStateException;
     method public android.os.PersistableBundle getMetrics();
@@ -23193,6 +23288,7 @@
   public final class MediaSync {
     ctor public MediaSync();
     method public final android.view.Surface createInputSurface();
+    method protected void finalize();
     method public void flush();
     method public android.media.PlaybackParams getPlaybackParams();
     method public android.media.SyncParams getSyncParams();
@@ -23312,6 +23408,10 @@
 
   public deprecated class RemoteControlClient.MetadataEditor extends android.media.MediaMetadataEditor {
     method public synchronized void apply();
+    method public synchronized android.media.RemoteControlClient.MetadataEditor putBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException;
+    method public synchronized android.media.RemoteControlClient.MetadataEditor putLong(int, long) throws java.lang.IllegalArgumentException;
+    method public synchronized android.media.RemoteControlClient.MetadataEditor putObject(int, java.lang.Object) throws java.lang.IllegalArgumentException;
+    method public synchronized android.media.RemoteControlClient.MetadataEditor putString(int, java.lang.String) throws java.lang.IllegalArgumentException;
     field public static final int BITMAP_KEY_ARTWORK = 100; // 0x64
   }
 
@@ -23358,6 +23458,7 @@
   }
 
   public class Ringtone {
+    method protected void finalize();
     method public android.media.AudioAttributes getAudioAttributes();
     method public deprecated int getStreamType();
     method public java.lang.String getTitle(android.content.Context);
@@ -23411,6 +23512,7 @@
     ctor public deprecated SoundPool(int, int, int);
     method public final void autoPause();
     method public final void autoResume();
+    method protected void finalize();
     method public int load(java.lang.String, int);
     method public int load(android.content.Context, int, int);
     method public int load(android.content.res.AssetFileDescriptor, int);
@@ -23479,6 +23581,7 @@
 
   public class ToneGenerator {
     ctor public ToneGenerator(int, int);
+    method protected void finalize();
     method public final int getAudioSessionId();
     method public void release();
     method public boolean startTone(int);
@@ -23611,6 +23714,7 @@
   public final class VolumeShaper implements java.lang.AutoCloseable {
     method public void apply(android.media.VolumeShaper.Operation);
     method public void close();
+    method protected void finalize();
     method public float getVolume();
     method public void replace(android.media.VolumeShaper.Configuration, android.media.VolumeShaper.Operation, boolean);
   }
@@ -23665,6 +23769,7 @@
   }
 
   public class AudioEffect {
+    method protected void finalize();
     method public android.media.audiofx.AudioEffect.Descriptor getDescriptor() throws java.lang.IllegalStateException;
     method public boolean getEnabled() throws java.lang.IllegalStateException;
     method public int getId() throws java.lang.IllegalStateException;
@@ -23917,6 +24022,7 @@
 
   public class Visualizer {
     ctor public Visualizer(int) throws java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method protected void finalize();
     method public int getCaptureSize() throws java.lang.IllegalStateException;
     method public static int[] getCaptureSizeRange();
     method public boolean getEnabled();
@@ -24474,6 +24580,7 @@
     method public static boolean isChannelUriForPassthroughInput(android.net.Uri);
     method public static boolean isChannelUriForTunerInput(android.net.Uri);
     method public static boolean isProgramUri(android.net.Uri);
+    method public static boolean isRecordedProgramUri(android.net.Uri);
     method public static void requestChannelBrowsable(android.content.Context, long);
     field public static final java.lang.String ACTION_INITIALIZE_PROGRAMS = "android.media.tv.action.INITIALIZE_PROGRAMS";
     field public static final java.lang.String ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT = "android.media.tv.action.PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT";
@@ -25608,6 +25715,7 @@
     field public static final int TRANSPORT_BLUETOOTH = 2; // 0x2
     field public static final int TRANSPORT_CELLULAR = 0; // 0x0
     field public static final int TRANSPORT_ETHERNET = 3; // 0x3
+    field public static final int TRANSPORT_LOWPAN = 6; // 0x6
     field public static final int TRANSPORT_VPN = 4; // 0x4
     field public static final int TRANSPORT_WIFI = 1; // 0x1
     field public static final int TRANSPORT_WIFI_AWARE = 5; // 0x5
@@ -25924,6 +26032,7 @@
     method public boolean protect(java.net.DatagramSocket);
     method public boolean setUnderlyingNetworks(android.net.Network[]);
     field public static final java.lang.String SERVICE_INTERFACE = "android.net.VpnService";
+    field public static final java.lang.String SERVICE_META_DATA_SUPPORTS_ALWAYS_ON = "android.net.VpnService.SUPPORTS_ALWAYS_ON";
   }
 
   public class VpnService.Builder {
@@ -26975,7 +27084,8 @@
     method public abstract void onSuccess();
   }
 
-  public static class WifiP2pManager.Channel {
+  public static class WifiP2pManager.Channel implements java.lang.AutoCloseable {
+    method public void close();
   }
 
   public static abstract interface WifiP2pManager.ChannelListener {
@@ -30514,6 +30624,7 @@
     field public static final int N = 24; // 0x18
     field public static final int N_MR1 = 25; // 0x19
     field public static final int O = 26; // 0x1a
+    field public static final int O_MR1 = 27; // 0x1b
   }
 
   public final class Bundle extends android.os.BaseBundle implements java.lang.Cloneable android.os.Parcelable {
@@ -30579,6 +30690,7 @@
     method public void putStringArrayList(java.lang.String, java.util.ArrayList<java.lang.String>);
     method public void readFromParcel(android.os.Parcel);
     method public void setClassLoader(java.lang.ClassLoader);
+    method public synchronized java.lang.String toString();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.os.Bundle> CREATOR;
     field public static final android.os.Bundle EMPTY;
@@ -30809,6 +30921,7 @@
   public abstract class FileObserver {
     ctor public FileObserver(java.lang.String);
     ctor public FileObserver(java.lang.String, int);
+    method protected void finalize();
     method public abstract void onEvent(int, java.lang.String);
     method public void startWatching();
     method public void stopWatching();
@@ -30960,11 +31073,11 @@
 
   public class MemoryFile {
     ctor public MemoryFile(java.lang.String, int) throws java.io.IOException;
-    method public synchronized boolean allowPurging(boolean) throws java.io.IOException;
+    method public deprecated synchronized boolean allowPurging(boolean) throws java.io.IOException;
     method public void close();
     method public java.io.InputStream getInputStream();
     method public java.io.OutputStream getOutputStream();
-    method public boolean isPurgingAllowed();
+    method public deprecated boolean isPurgingAllowed();
     method public int length();
     method public int readBytes(byte[], int, int, int) throws java.io.IOException;
     method public void writeBytes(byte[], int, int, int) throws java.io.IOException;
@@ -31261,6 +31374,7 @@
     method public int describeContents();
     method public android.os.PersistableBundle getPersistableBundle(java.lang.String);
     method public void putPersistableBundle(java.lang.String, android.os.PersistableBundle);
+    method public synchronized java.lang.String toString();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.os.PersistableBundle> CREATOR;
     field public static final android.os.PersistableBundle EMPTY;
@@ -31388,6 +31502,20 @@
     field public static final android.os.Parcelable.Creator<android.os.ResultReceiver> CREATOR;
   }
 
+  public final class SharedMemory implements java.io.Closeable android.os.Parcelable {
+    method public void close();
+    method public static android.os.SharedMemory create(java.lang.String, int) throws android.system.ErrnoException;
+    method public int describeContents();
+    method public int getSize();
+    method public java.nio.ByteBuffer map(int, int, int) throws android.system.ErrnoException;
+    method public java.nio.ByteBuffer mapReadOnly() throws android.system.ErrnoException;
+    method public java.nio.ByteBuffer mapReadWrite() throws android.system.ErrnoException;
+    method public boolean setProtect(int);
+    method public static void unmap(java.nio.ByteBuffer);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.os.SharedMemory> CREATOR;
+  }
+
   public class StatFs {
     ctor public StatFs(java.lang.String);
     method public deprecated int getAvailableBlocks();
@@ -31792,6 +31920,7 @@
     method public android.os.storage.StorageVolume getStorageVolume(java.io.File);
     method public java.util.List<android.os.storage.StorageVolume> getStorageVolumes();
     method public java.util.UUID getUuidForPath(java.io.File) throws java.io.IOException;
+    method public boolean isAllocationSupported(java.io.FileDescriptor);
     method public boolean isCacheBehaviorGroup(java.io.File) throws java.io.IOException;
     method public boolean isCacheBehaviorTombstone(java.io.File) throws java.io.IOException;
     method public boolean isEncrypted(java.io.File);
@@ -35583,6 +35712,7 @@
     method public static android.renderscript.AllocationAdapter create1D(android.renderscript.RenderScript, android.renderscript.Allocation);
     method public static android.renderscript.AllocationAdapter create2D(android.renderscript.RenderScript, android.renderscript.Allocation);
     method public static android.renderscript.AllocationAdapter createTyped(android.renderscript.RenderScript, android.renderscript.Allocation, android.renderscript.Type);
+    method public synchronized void resize(int);
     method public void setFace(android.renderscript.Type.CubemapFace);
     method public void setLOD(int);
     method public void setX(int);
@@ -36842,6 +36972,30 @@
     field public static final java.lang.String SERVICE_META_DATA = "android.autofill";
   }
 
+  public final class CharSequenceTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.CharSequenceTransformation> CREATOR;
+  }
+
+  public static class CharSequenceTransformation.Builder {
+    ctor public CharSequenceTransformation.Builder(android.view.autofill.AutofillId, java.util.regex.Pattern, java.lang.String);
+    method public android.service.autofill.CharSequenceTransformation.Builder addField(android.view.autofill.AutofillId, java.util.regex.Pattern, java.lang.String);
+    method public android.service.autofill.CharSequenceTransformation build();
+  }
+
+  public final class CustomDescription implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.CustomDescription> CREATOR;
+  }
+
+  public static class CustomDescription.Builder {
+    ctor public CustomDescription.Builder(android.widget.RemoteViews);
+    method public android.service.autofill.CustomDescription.Builder addChild(int, android.service.autofill.Transformation);
+    method public android.service.autofill.CustomDescription build();
+  }
+
   public final class Dataset implements android.os.Parcelable {
     method public int describeContents();
     method public void writeToParcel(android.os.Parcel, int);
@@ -36915,6 +37069,32 @@
     method public android.service.autofill.FillResponse.Builder setSaveInfo(android.service.autofill.SaveInfo);
   }
 
+  public final class ImageTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.ImageTransformation> CREATOR;
+  }
+
+  public static class ImageTransformation.Builder {
+    ctor public ImageTransformation.Builder(android.view.autofill.AutofillId, java.util.regex.Pattern, int);
+    method public android.service.autofill.ImageTransformation.Builder addOption(java.util.regex.Pattern, int);
+    method public android.service.autofill.ImageTransformation build();
+  }
+
+  public final class LuhnChecksumValidator implements android.os.Parcelable android.service.autofill.Validator {
+    ctor public LuhnChecksumValidator(android.view.autofill.AutofillId...);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.LuhnChecksumValidator> CREATOR;
+  }
+
+  public final class RegexValidator implements android.os.Parcelable android.service.autofill.Validator {
+    ctor public RegexValidator(android.view.autofill.AutofillId, java.util.regex.Pattern);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.RegexValidator> CREATOR;
+  }
+
   public final class SaveCallback {
     method public void onFailure(java.lang.CharSequence);
     method public void onSuccess();
@@ -36937,11 +37117,14 @@
 
   public static final class SaveInfo.Builder {
     ctor public SaveInfo.Builder(int, android.view.autofill.AutofillId[]);
+    ctor public SaveInfo.Builder(int);
     method public android.service.autofill.SaveInfo build();
+    method public android.service.autofill.SaveInfo.Builder setCustomDescription(android.service.autofill.CustomDescription);
     method public android.service.autofill.SaveInfo.Builder setDescription(java.lang.CharSequence);
     method public android.service.autofill.SaveInfo.Builder setFlags(int);
     method public android.service.autofill.SaveInfo.Builder setNegativeAction(int, android.content.IntentSender);
     method public android.service.autofill.SaveInfo.Builder setOptionalIds(android.view.autofill.AutofillId[]);
+    method public android.service.autofill.SaveInfo.Builder setValidator(android.service.autofill.Validator);
   }
 
   public final class SaveRequest implements android.os.Parcelable {
@@ -36952,6 +37135,17 @@
     field public static final android.os.Parcelable.Creator<android.service.autofill.SaveRequest> CREATOR;
   }
 
+  public abstract interface Transformation {
+  }
+
+  public abstract interface Validator {
+  }
+
+  public final class Validators {
+    method public static android.service.autofill.Validator and(android.service.autofill.Validator...);
+    method public static android.service.autofill.Validator or(android.service.autofill.Validator...);
+  }
+
 }
 
 package android.service.carrier {
@@ -37585,8 +37779,10 @@
     method public android.view.SurfaceHolder getSurfaceHolder();
     method public boolean isPreview();
     method public boolean isVisible();
+    method public void notifyColorsChanged();
     method public void onApplyWindowInsets(android.view.WindowInsets);
     method public android.os.Bundle onCommand(java.lang.String, int, int, int, android.os.Bundle, boolean);
+    method public android.app.WallpaperColors onComputeColors();
     method public void onCreate(android.view.SurfaceHolder);
     method public void onDesiredSizeChanged(int, int);
     method public void onDestroy();
@@ -38168,6 +38364,7 @@
     field public static final int FD_CLOEXEC;
     field public static final int FIONREAD;
     field public static final int F_DUPFD;
+    field public static final int F_DUPFD_CLOEXEC;
     field public static final int F_GETFD;
     field public static final int F_GETFL;
     field public static final int F_GETLK;
@@ -38262,7 +38459,9 @@
     field public static final int NI_NUMERICSERV;
     field public static final int O_ACCMODE;
     field public static final int O_APPEND;
+    field public static final int O_CLOEXEC;
     field public static final int O_CREAT;
+    field public static final int O_DSYNC;
     field public static final int O_EXCL;
     field public static final int O_NOCTTY;
     field public static final int O_NOFOLLOW;
@@ -38508,14 +38707,18 @@
 
   public final class StructStat {
     ctor public StructStat(long, long, int, long, int, int, long, long, long, long, long, long, long);
+    ctor public StructStat(long, long, int, long, int, int, long, long, android.system.StructTimespec, android.system.StructTimespec, android.system.StructTimespec, long, long);
+    field public final android.system.StructTimespec st_atim;
     field public final long st_atime;
     field public final long st_blksize;
     field public final long st_blocks;
+    field public final android.system.StructTimespec st_ctim;
     field public final long st_ctime;
     field public final long st_dev;
     field public final int st_gid;
     field public final long st_ino;
     field public final int st_mode;
+    field public final android.system.StructTimespec st_mtim;
     field public final long st_mtime;
     field public final long st_nlink;
     field public final long st_rdev;
@@ -38538,6 +38741,13 @@
     field public final long f_namemax;
   }
 
+  public final class StructTimespec implements java.lang.Comparable {
+    ctor public StructTimespec(long, long);
+    method public int compareTo(android.system.StructTimespec);
+    field public final long tv_nsec;
+    field public final long tv_sec;
+  }
+
   public final class StructUtsname {
     ctor public StructUtsname(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
     field public final java.lang.String machine;
@@ -38672,6 +38882,7 @@
   public static final class Call.RttCall {
     method public int getRttAudioMode();
     method public java.lang.String read();
+    method public java.lang.String readImmediately() throws java.io.IOException;
     method public void setRttMode(int);
     method public void write(java.lang.String) throws java.io.IOException;
     field public static final int RTT_MODE_FULL = 1; // 0x1
@@ -39387,6 +39598,7 @@
     field public static final java.lang.String KEY_DEFAULT_VM_NUMBER_STRING = "default_vm_number_string";
     field public static final java.lang.String KEY_DIAL_STRING_REPLACE_STRING_ARRAY = "dial_string_replace_string_array";
     field public static final java.lang.String KEY_DISABLE_CDMA_ACTIVATION_CODE_BOOL = "disable_cdma_activation_code_bool";
+    field public static final java.lang.String KEY_DISPLAY_HD_AUDIO_PROPERTY_BOOL = "display_hd_audio_property_bool";
     field public static final java.lang.String KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL = "drop_video_call_when_answering_audio_call_bool";
     field public static final java.lang.String KEY_DTMF_TYPE_ENABLED_BOOL = "dtmf_type_enabled_bool";
     field public static final java.lang.String KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT = "duration_blocking_disabled_after_emergency_int";
@@ -39852,9 +40064,12 @@
     field public static final int MMS_ERROR_UNABLE_CONNECT_MMS = 3; // 0x3
     field public static final int MMS_ERROR_UNSPECIFIED = 1; // 0x1
     field public static final int RESULT_ERROR_GENERIC_FAILURE = 1; // 0x1
+    field public static final int RESULT_ERROR_LIMIT_EXCEEDED = 5; // 0x5
     field public static final int RESULT_ERROR_NO_SERVICE = 4; // 0x4
     field public static final int RESULT_ERROR_NULL_PDU = 3; // 0x3
     field public static final int RESULT_ERROR_RADIO_OFF = 2; // 0x2
+    field public static final int RESULT_ERROR_SHORT_CODE_NEVER_ALLOWED = 8; // 0x8
+    field public static final int RESULT_ERROR_SHORT_CODE_NOT_ALLOWED = 7; // 0x7
     field public static final int STATUS_ON_ICC_FREE = 0; // 0x0
     field public static final int STATUS_ON_ICC_READ = 1; // 0x1
     field public static final int STATUS_ON_ICC_SENT = 5; // 0x5
@@ -40067,6 +40282,7 @@
     field public static final java.lang.String EXTRA_CALL_VOICEMAIL_INTENT = "android.telephony.extra.CALL_VOICEMAIL_INTENT";
     field public static final java.lang.String EXTRA_HIDE_PUBLIC_SETTINGS = "android.telephony.extra.HIDE_PUBLIC_SETTINGS";
     field public static final java.lang.String EXTRA_INCOMING_NUMBER = "incoming_number";
+    field public static final java.lang.String EXTRA_IS_REFRESH = "android.telephony.extra.IS_REFRESH";
     field public static final java.lang.String EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT = "android.telephony.extra.LAUNCH_VOICEMAIL_SETTINGS_INTENT";
     field public static final java.lang.String EXTRA_NOTIFICATION_COUNT = "android.telephony.extra.NOTIFICATION_COUNT";
     field public static final java.lang.String EXTRA_PHONE_ACCOUNT_HANDLE = "android.telephony.extra.PHONE_ACCOUNT_HANDLE";
@@ -40268,6 +40484,7 @@
 
   public static deprecated class SmsMessage.SubmitPdu {
     ctor public deprecated SmsMessage.SubmitPdu();
+    method public deprecated java.lang.String toString();
     field public deprecated byte[] encodedMessage;
     field public deprecated byte[] encodedScAddress;
   }
@@ -40331,6 +40548,7 @@
     method public java.util.List<junit.framework.TestCase> getTestCases();
     method public java.lang.String getTestClassName();
     method public junit.framework.TestResult getTestResult();
+    method protected java.lang.Class loadSuiteClass(java.lang.String) throws java.lang.ClassNotFoundException;
     method protected void runFailed(java.lang.String);
     method public void runTest();
     method public void runTest(junit.framework.TestResult);
@@ -40591,10 +40809,12 @@
     ctor protected MockContentProvider();
     ctor public MockContentProvider(android.content.Context);
     ctor public MockContentProvider(android.content.Context, java.lang.String, java.lang.String, android.content.pm.PathPermission[]);
+    method public android.content.ContentProviderResult[] applyBatch(java.util.ArrayList<android.content.ContentProviderOperation>);
     method public int delete(android.net.Uri, java.lang.String, java.lang.String[]);
     method public java.lang.String getType(android.net.Uri);
     method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
     method public boolean onCreate();
+    method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle);
     method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
     method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
   }
@@ -40864,6 +41084,10 @@
 
   public deprecated class MockResources extends android.content.res.Resources {
     ctor public MockResources();
+    method public int getColor(int) throws android.content.res.Resources.NotFoundException;
+    method public android.content.res.ColorStateList getColorStateList(int) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
+    method public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics);
   }
 
 }
@@ -41099,6 +41323,7 @@
 
   public static class InputFilter.AllCaps implements android.text.InputFilter {
     ctor public InputFilter.AllCaps();
+    ctor public InputFilter.AllCaps(java.util.Locale);
     method public java.lang.CharSequence filter(java.lang.CharSequence, int, int, android.text.Spanned, int, int);
   }
 
@@ -42111,6 +42336,7 @@
 
   public abstract class MetricAffectingSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateLayout {
     ctor public MetricAffectingSpan();
+    method public android.text.style.MetricAffectingSpan getUnderlying();
     method public abstract void updateMeasureState(android.text.TextPaint);
   }
 
@@ -42791,14 +43017,28 @@
   public class TransitionSet extends android.transition.Transition {
     ctor public TransitionSet();
     ctor public TransitionSet(android.content.Context, android.util.AttributeSet);
+    method public android.transition.TransitionSet addListener(android.transition.Transition.TransitionListener);
+    method public android.transition.TransitionSet addTarget(android.view.View);
+    method public android.transition.TransitionSet addTarget(int);
+    method public android.transition.TransitionSet addTarget(java.lang.String);
+    method public android.transition.TransitionSet addTarget(java.lang.Class);
     method public android.transition.TransitionSet addTransition(android.transition.Transition);
     method public void captureEndValues(android.transition.TransitionValues);
     method public void captureStartValues(android.transition.TransitionValues);
+    method public android.transition.TransitionSet clone();
     method public int getOrdering();
     method public android.transition.Transition getTransitionAt(int);
     method public int getTransitionCount();
+    method public android.transition.TransitionSet removeListener(android.transition.Transition.TransitionListener);
+    method public android.transition.TransitionSet removeTarget(int);
+    method public android.transition.TransitionSet removeTarget(android.view.View);
+    method public android.transition.TransitionSet removeTarget(java.lang.Class);
+    method public android.transition.TransitionSet removeTarget(java.lang.String);
     method public android.transition.TransitionSet removeTransition(android.transition.Transition);
+    method public android.transition.TransitionSet setDuration(long);
+    method public android.transition.TransitionSet setInterpolator(android.animation.TimeInterpolator);
     method public android.transition.TransitionSet setOrdering(int);
+    method public android.transition.TransitionSet setStartDelay(long);
     field public static final int ORDERING_SEQUENTIAL = 1; // 0x1
     field public static final int ORDERING_TOGETHER = 0; // 0x0
   }
@@ -42963,6 +43203,9 @@
 
   public class Base64InputStream extends java.io.FilterInputStream {
     ctor public Base64InputStream(java.io.InputStream, int);
+    method public int available();
+    method public void mark(int);
+    method public void reset();
   }
 
   public class Base64OutputStream extends java.io.FilterOutputStream {
@@ -43930,9 +44173,13 @@
     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 KEYBOARD_PRESS = 3; // 0x3
+    field public static final int KEYBOARD_RELEASE = 7; // 0x7
     field public static final int KEYBOARD_TAP = 3; // 0x3
     field public static final int LONG_PRESS = 0; // 0x0
+    field public static final int TEXT_HANDLE_MOVE = 9; // 0x9
     field public static final int VIRTUAL_KEY = 1; // 0x1
+    field public static final int VIRTUAL_KEY_RELEASE = 8; // 0x8
   }
 
   public class InflateException extends java.lang.RuntimeException {
@@ -43961,6 +44208,7 @@
     method public android.os.Vibrator getVibrator();
     method public boolean[] hasKeys(int...);
     method public boolean hasMicrophone();
+    method public boolean isEnabled();
     method public boolean isVirtual();
     method public boolean supportsSource(int);
     method public void writeToParcel(android.os.Parcel, int);
@@ -45076,6 +45324,7 @@
     method public android.graphics.Canvas lockCanvas();
     method public android.graphics.Canvas lockCanvas(android.graphics.Rect);
     method protected final void onDraw(android.graphics.Canvas);
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
     method public void setOpaque(boolean);
     method public void setSurfaceTexture(android.graphics.SurfaceTexture);
     method public void setSurfaceTextureListener(android.view.TextureView.SurfaceTextureListener);
@@ -46099,6 +46348,7 @@
     method public int getLayoutMode();
     method public android.animation.LayoutTransition getLayoutTransition();
     method public int getNestedScrollAxes();
+    method public android.view.ViewGroupOverlay getOverlay();
     method public int getPersistentDrawingCache();
     method public boolean getTouchscreenBlocksFocus();
     method public int indexOfChild(android.view.View);
@@ -46529,6 +46779,7 @@
     method public final boolean isActive();
     method public abstract boolean isFloating();
     method public abstract boolean isShortcutKey(int, android.view.KeyEvent);
+    method public boolean isWideColorGamut();
     method public final void makeActive();
     method protected abstract void onActive();
     method public abstract void onConfigurationChanged(android.content.res.Configuration);
@@ -46791,12 +47042,12 @@
     field public static final int FLAG_SCALED = 16384; // 0x4000
     field public static final int FLAG_SECURE = 8192; // 0x2000
     field public static final int FLAG_SHOW_WALLPAPER = 1048576; // 0x100000
-    field public static final int FLAG_SHOW_WHEN_LOCKED = 524288; // 0x80000
+    field public static final deprecated int FLAG_SHOW_WHEN_LOCKED = 524288; // 0x80000
     field public static final int FLAG_SPLIT_TOUCH = 8388608; // 0x800000
     field public static final deprecated int FLAG_TOUCHABLE_WHEN_WAKING = 64; // 0x40
     field public static final int FLAG_TRANSLUCENT_NAVIGATION = 134217728; // 0x8000000
     field public static final int FLAG_TRANSLUCENT_STATUS = 67108864; // 0x4000000
-    field public static final int FLAG_TURN_SCREEN_ON = 2097152; // 0x200000
+    field public static final deprecated int FLAG_TURN_SCREEN_ON = 2097152; // 0x200000
     field public static final int FLAG_WATCH_OUTSIDE_TOUCH = 262144; // 0x40000
     field public static final int FORMAT_CHANGED = 8; // 0x8
     field public static final int LAST_APPLICATION_WINDOW = 99; // 0x63
@@ -46950,6 +47201,7 @@
   }
 
   public final class AccessibilityManager {
+    method public void addAccessibilityRequestPreparer(android.view.accessibility.AccessibilityRequestPreparer);
     method public boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
     method public void addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener, android.os.Handler);
     method public boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
@@ -46958,8 +47210,10 @@
     method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int);
     method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList();
     method public void interrupt();
+    method public static boolean isAccessibilityButtonSupported();
     method public boolean isEnabled();
     method public boolean isTouchExplorationEnabled();
+    method public void removeAccessibilityRequestPreparer(android.view.accessibility.AccessibilityRequestPreparer);
     method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
     method public boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
     method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
@@ -47276,6 +47530,13 @@
     method public void setToIndex(int);
   }
 
+  public abstract class AccessibilityRequestPreparer {
+    ctor public AccessibilityRequestPreparer(android.view.View, int);
+    method public android.view.View getView();
+    method public abstract void onPrepareExtraData(int, java.lang.String, android.os.Bundle, android.os.Message);
+    field public static final int REQUEST_TYPE_EXTRA_DATA = 1; // 0x1
+  }
+
   public final class AccessibilityWindowInfo implements android.os.Parcelable {
     method public int describeContents();
     method public android.view.accessibility.AccessibilityNodeInfo getAnchor();
@@ -47368,6 +47629,7 @@
     ctor public Animation(android.content.Context, android.util.AttributeSet);
     method protected void applyTransformation(float, android.view.animation.Transformation);
     method public void cancel();
+    method protected android.view.animation.Animation clone() throws java.lang.CloneNotSupportedException;
     method public long computeDurationHint();
     method protected void ensureInterpolator();
     method public int getBackgroundColor();
@@ -47439,6 +47701,7 @@
     ctor public AnimationSet(android.content.Context, android.util.AttributeSet);
     ctor public AnimationSet(boolean);
     method public void addAnimation(android.view.animation.Animation);
+    method protected android.view.animation.AnimationSet clone() throws java.lang.CloneNotSupportedException;
     method public java.util.List<android.view.animation.Animation> getAnimations();
   }
 
@@ -47643,6 +47906,8 @@
     method public void notifyViewEntered(android.view.View, int, android.graphics.Rect);
     method public void notifyViewExited(android.view.View);
     method public void notifyViewExited(android.view.View, int);
+    method public void notifyViewVisibilityChanged(android.view.View, boolean);
+    method public void notifyViewVisibilityChanged(android.view.View, int, boolean);
     method public void registerCallback(android.view.autofill.AutofillManager.AutofillCallback);
     method public void requestAutofill(android.view.View);
     method public void requestAutofill(android.view.View, int, android.graphics.Rect);
@@ -48289,6 +48554,10 @@
   public final deprecated class CookieSyncManager extends android.webkit.WebSyncManager {
     method public static android.webkit.CookieSyncManager createInstance(android.content.Context);
     method public static android.webkit.CookieSyncManager getInstance();
+    method public deprecated void resetSync();
+    method public deprecated void startSync();
+    method public deprecated void stopSync();
+    method public deprecated void sync();
     method protected deprecated void syncFromRamToFlash();
     field protected static final java.lang.String LOGTAG = "websync";
     field protected android.webkit.WebViewDatabase mDataBase;
@@ -48370,6 +48639,13 @@
     method public abstract int rendererPriorityAtExit();
   }
 
+  public abstract class SafeBrowsingResponse {
+    ctor public SafeBrowsingResponse();
+    method public abstract void backToSafety(boolean);
+    method public abstract void proceed(boolean);
+    method public abstract void showInterstitial(boolean);
+  }
+
   public class ServiceWorkerClient {
     ctor public ServiceWorkerClient();
     method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebResourceRequest);
@@ -48788,8 +49064,10 @@
     method public int getProgress();
     method public boolean getRendererPriorityWaivedWhenNotVisible();
     method public int getRendererRequestedPriority();
+    method public static android.net.Uri getSafeBrowsingPrivacyPolicyUrl();
     method public deprecated float getScale();
     method public android.webkit.WebSettings getSettings();
+    method public android.view.textclassifier.TextClassifier getTextClassifier();
     method public java.lang.String getTitle();
     method public java.lang.String getUrl();
     method public android.webkit.WebChromeClient getWebChromeClient();
@@ -48836,11 +49114,15 @@
     method public void setNetworkAvailable(boolean);
     method public deprecated void setPictureListener(android.webkit.WebView.PictureListener);
     method public void setRendererPriorityPolicy(int, boolean);
+    method public static void setSafeBrowsingWhitelist(java.util.List<java.lang.String>, android.webkit.ValueCallback<java.lang.Boolean>);
+    method public void setTextClassifier(android.view.textclassifier.TextClassifier);
     method public deprecated void setVerticalScrollbarOverlay(boolean);
     method public void setWebChromeClient(android.webkit.WebChromeClient);
     method public static void setWebContentsDebuggingEnabled(boolean);
     method public void setWebViewClient(android.webkit.WebViewClient);
+    method public deprecated boolean shouldDelayChildPressedState();
     method public deprecated boolean showFindDialog(java.lang.String, boolean);
+    method public static void startSafeBrowsing(android.content.Context, android.webkit.ValueCallback<java.lang.Boolean>);
     method public void stopLoading();
     method public void zoomBy(float);
     method public boolean zoomIn();
@@ -48903,6 +49185,7 @@
     method public void onReceivedLoginRequest(android.webkit.WebView, java.lang.String, java.lang.String, java.lang.String);
     method public void onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError);
     method public boolean onRenderProcessGone(android.webkit.WebView, android.webkit.RenderProcessGoneDetail);
+    method public void onSafeBrowsingHit(android.webkit.WebView, android.webkit.WebResourceRequest, int, android.webkit.SafeBrowsingResponse);
     method public void onScaleChanged(android.webkit.WebView, float, float);
     method public deprecated void onTooManyRedirects(android.webkit.WebView, android.os.Message, android.os.Message);
     method public void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
@@ -48927,6 +49210,10 @@
     field public static final int ERROR_UNSAFE_RESOURCE = -16; // 0xfffffff0
     field public static final int ERROR_UNSUPPORTED_AUTH_SCHEME = -3; // 0xfffffffd
     field public static final int ERROR_UNSUPPORTED_SCHEME = -10; // 0xfffffff6
+    field public static final int SAFE_BROWSING_THREAT_MALWARE = 1; // 0x1
+    field public static final int SAFE_BROWSING_THREAT_PHISHING = 2; // 0x2
+    field public static final int SAFE_BROWSING_THREAT_UNKNOWN = 0; // 0x0
+    field public static final int SAFE_BROWSING_THREAT_UNWANTED_SOFTWARE = 3; // 0x3
   }
 
   public abstract class WebViewDatabase {
@@ -48963,6 +49250,7 @@
     method public void clearTextFilter();
     method public void deferNotifyDataSetChanged();
     method public void fling(int);
+    method public android.widget.AbsListView.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public int getCacheColorHint();
     method public int getCheckedItemCount();
     method public long[] getCheckedItemIds();
@@ -49129,6 +49417,9 @@
     ctor public ActionMenuView(android.content.Context);
     ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
     method public void dismissPopupMenus();
+    method protected android.widget.ActionMenuView.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
     method public android.view.Menu getMenu();
     method public android.graphics.drawable.Drawable getOverflowIcon();
     method public int getPopupTheme();
@@ -49304,7 +49595,6 @@
     method public void addAll(T...);
     method public void clear();
     method public static android.widget.ArrayAdapter<java.lang.CharSequence> createFromResource(android.content.Context, int, int);
-    method public java.lang.CharSequence[] getAutofillOptions();
     method public android.content.Context getContext();
     method public int getCount();
     method public android.content.res.Resources.Theme getDropDownViewTheme();
@@ -49394,6 +49684,7 @@
     method public void notifyDataSetChanged();
     method public void notifyDataSetInvalidated();
     method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public void setAutofillOptions(java.lang.CharSequence...);
     method public void unregisterDataSetObserver(android.database.DataSetObserver);
   }
 
@@ -49672,6 +49963,7 @@
     ctor public EditText(android.content.Context, android.util.AttributeSet, int);
     ctor public EditText(android.content.Context, android.util.AttributeSet, int, int);
     method public void extendSelection(int);
+    method public android.text.Editable getText();
     method public void selectAll();
     method public void setSelection(int, int);
     method public void setSelection(int);
@@ -49793,6 +50085,8 @@
     ctor public FrameLayout(android.content.Context, android.util.AttributeSet);
     ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int);
     ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.FrameLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public deprecated boolean getConsiderGoneChildrenWhenMeasuring();
     method public boolean getMeasureAllChildren();
     method protected void onLayout(boolean, int, int, int, int);
@@ -49839,6 +50133,9 @@
     ctor public GridLayout(android.content.Context, android.util.AttributeSet);
     ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
     ctor public GridLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.GridLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.GridLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.GridLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
     method public int getAlignmentMode();
     method public int getColumnCount();
     method public int getOrientation();
@@ -50051,6 +50348,9 @@
     ctor public LinearLayout(android.content.Context, android.util.AttributeSet);
     ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int);
     ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.LinearLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.LinearLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.LinearLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
     method public int getBaselineAlignedChildIndex();
     method public android.graphics.drawable.Drawable getDividerDrawable();
     method public int getDividerPadding();
@@ -50437,6 +50737,8 @@
     method public final synchronized void incrementSecondaryProgressBy(int);
     method public boolean isAnimating();
     method public synchronized boolean isIndeterminate();
+    method protected synchronized void onDraw(android.graphics.Canvas);
+    method protected synchronized void onMeasure(int, int);
     method public void onRestoreInstanceState(android.os.Parcelable);
     method public android.os.Parcelable onSaveInstanceState();
     method public synchronized void setIndeterminate(boolean);
@@ -50492,6 +50794,7 @@
     ctor public RadioGroup(android.content.Context, android.util.AttributeSet);
     method public void check(int);
     method public void clearCheck();
+    method public android.widget.RadioGroup.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public int getCheckedRadioButtonId();
     method public void setOnCheckedChangeListener(android.widget.RadioGroup.OnCheckedChangeListener);
   }
@@ -50534,6 +50837,7 @@
     ctor public RelativeLayout(android.content.Context, android.util.AttributeSet);
     ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int);
     ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.widget.RelativeLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public int getGravity();
     method protected void onLayout(boolean, int, int, int, int);
     method public void setGravity(int);
@@ -51077,6 +51381,7 @@
   public class TableLayout extends android.widget.LinearLayout {
     ctor public TableLayout(android.content.Context);
     ctor public TableLayout(android.content.Context, android.util.AttributeSet);
+    method public android.widget.TableLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public boolean isColumnCollapsed(int);
     method public boolean isColumnShrinkable(int);
     method public boolean isColumnStretchable(int);
@@ -51101,6 +51406,7 @@
   public class TableRow extends android.widget.LinearLayout {
     ctor public TableRow(android.content.Context);
     ctor public TableRow(android.content.Context, android.util.AttributeSet);
+    method public android.widget.TableRow.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public android.view.View getVirtualChildAt(int);
     method public int getVirtualChildCount();
   }
@@ -51442,6 +51748,7 @@
     ctor public ToggleButton(android.content.Context);
     method public java.lang.CharSequence getTextOff();
     method public java.lang.CharSequence getTextOn();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
     method public void setTextOff(java.lang.CharSequence);
     method public void setTextOn(java.lang.CharSequence);
   }
@@ -51453,6 +51760,9 @@
     ctor public Toolbar(android.content.Context, android.util.AttributeSet, int, int);
     method public void collapseActionView();
     method public void dismissPopupMenus();
+    method protected android.widget.Toolbar.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.Toolbar.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.Toolbar.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
     method public int getContentInsetEnd();
     method public int getContentInsetEndWithActions();
     method public int getContentInsetLeft();
@@ -51974,6 +52284,13 @@
   public class BaseDexClassLoader extends java.lang.ClassLoader {
     ctor public BaseDexClassLoader(java.lang.String, java.io.File, java.lang.String, java.lang.ClassLoader);
     method public java.lang.String findLibrary(java.lang.String);
+    method protected java.util.Enumeration<java.net.URL> findResources(java.lang.String);
+    method protected synchronized java.lang.Package getPackage(java.lang.String);
+  }
+
+  public final class DelegateLastClassLoader extends dalvik.system.PathClassLoader {
+    ctor public DelegateLastClassLoader(java.lang.String, java.lang.ClassLoader);
+    ctor public DelegateLastClassLoader(java.lang.String, java.lang.String, java.lang.ClassLoader);
   }
 
   public class DexClassLoader extends dalvik.system.BaseDexClassLoader {
@@ -51992,6 +52309,7 @@
   }
 
   public final class InMemoryDexClassLoader extends dalvik.system.BaseDexClassLoader {
+    ctor public InMemoryDexClassLoader(java.nio.ByteBuffer[], java.lang.ClassLoader);
     ctor public InMemoryDexClassLoader(java.nio.ByteBuffer, java.lang.ClassLoader);
   }
 
@@ -52195,6 +52513,10 @@
   public class BufferedInputStream extends java.io.FilterInputStream {
     ctor public BufferedInputStream(java.io.InputStream);
     ctor public BufferedInputStream(java.io.InputStream, int);
+    method public synchronized int available() throws java.io.IOException;
+    method public synchronized int read() throws java.io.IOException;
+    method public synchronized int read(byte[], int, int) throws java.io.IOException;
+    method public synchronized long skip(long) throws java.io.IOException;
     field protected volatile byte[] buf;
     field protected int count;
     field protected int marklimit;
@@ -52205,6 +52527,9 @@
   public class BufferedOutputStream extends java.io.FilterOutputStream {
     ctor public BufferedOutputStream(java.io.OutputStream);
     ctor public BufferedOutputStream(java.io.OutputStream, int);
+    method public synchronized void flush() throws java.io.IOException;
+    method public synchronized void write(int) throws java.io.IOException;
+    method public synchronized void write(byte[], int, int) throws java.io.IOException;
     field protected byte[] buf;
     field protected int count;
   }
@@ -52230,7 +52555,12 @@
   public class ByteArrayInputStream extends java.io.InputStream {
     ctor public ByteArrayInputStream(byte[]);
     ctor public ByteArrayInputStream(byte[], int, int);
+    method public synchronized int available();
+    method public void mark(int);
     method public synchronized int read();
+    method public synchronized int read(byte[], int, int);
+    method public synchronized void reset();
+    method public synchronized long skip(long);
     field protected byte[] buf;
     field protected int count;
     field protected int mark;
@@ -52243,9 +52573,11 @@
     method public synchronized void reset();
     method public synchronized int size();
     method public synchronized byte[] toByteArray();
+    method public synchronized java.lang.String toString();
     method public synchronized java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException;
     method public deprecated synchronized java.lang.String toString(int);
     method public synchronized void write(int);
+    method public synchronized void write(byte[], int, int);
     method public synchronized void writeTo(java.io.OutputStream) throws java.io.IOException;
     field protected byte[] buf;
     field protected int count;
@@ -52265,12 +52597,17 @@
   public class CharArrayWriter extends java.io.Writer {
     ctor public CharArrayWriter();
     ctor public CharArrayWriter(int);
+    method public java.io.CharArrayWriter append(java.lang.CharSequence);
+    method public java.io.CharArrayWriter append(java.lang.CharSequence, int, int);
+    method public java.io.CharArrayWriter append(char);
     method public void close();
     method public void flush();
     method public void reset();
     method public int size();
     method public char[] toCharArray();
+    method public void write(int);
     method public void write(char[], int, int);
+    method public void write(java.lang.String, int, int);
     method public void writeTo(java.io.Writer) throws java.io.IOException;
     field protected char[] buf;
     field protected int count;
@@ -52357,6 +52694,8 @@
   public class DataOutputStream extends java.io.FilterOutputStream implements java.io.DataOutput {
     ctor public DataOutputStream(java.io.OutputStream);
     method public final int size();
+    method public synchronized void write(int) throws java.io.IOException;
+    method public synchronized void write(byte[], int, int) throws java.io.IOException;
     method public final void writeBoolean(boolean) throws java.io.IOException;
     method public final void writeByte(int) throws java.io.IOException;
     method public final void writeBytes(java.lang.String) throws java.io.IOException;
@@ -52456,6 +52795,7 @@
     ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException;
     ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException;
     ctor public FileInputStream(java.io.FileDescriptor);
+    method protected void finalize() throws java.io.IOException;
     method public java.nio.channels.FileChannel getChannel();
     method public final java.io.FileDescriptor getFD() throws java.io.IOException;
     method public int read() throws java.io.IOException;
@@ -52472,6 +52812,7 @@
     ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException;
     ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException;
     ctor public FileOutputStream(java.io.FileDescriptor);
+    method protected void finalize() throws java.io.IOException;
     method public java.nio.channels.FileChannel getChannel();
     method public final java.io.FileDescriptor getFD() throws java.io.IOException;
     method public void write(int) throws java.io.IOException;
@@ -52585,6 +52926,8 @@
   public deprecated class LineNumberInputStream extends java.io.FilterInputStream {
     ctor public LineNumberInputStream(java.io.InputStream);
     method public int getLineNumber();
+    method public void mark(int);
+    method public void reset() throws java.io.IOException;
     method public void setLineNumber(int);
   }
 
@@ -52814,8 +53157,10 @@
     ctor public PipedInputStream(java.io.PipedOutputStream, int) throws java.io.IOException;
     ctor public PipedInputStream();
     ctor public PipedInputStream(int);
+    method public synchronized int available() throws java.io.IOException;
     method public void connect(java.io.PipedOutputStream) throws java.io.IOException;
     method public synchronized int read() throws java.io.IOException;
+    method public synchronized int read(byte[], int, int) throws java.io.IOException;
     method protected synchronized void receive(int) throws java.io.IOException;
     field protected static final int PIPE_SIZE = 1024; // 0x400
     field protected byte[] buffer;
@@ -52827,6 +53172,7 @@
     ctor public PipedOutputStream(java.io.PipedInputStream) throws java.io.IOException;
     ctor public PipedOutputStream();
     method public synchronized void connect(java.io.PipedInputStream) throws java.io.IOException;
+    method public synchronized void flush() throws java.io.IOException;
     method public void write(int) throws java.io.IOException;
   }
 
@@ -52837,7 +53183,9 @@
     ctor public PipedReader(int);
     method public void close() throws java.io.IOException;
     method public void connect(java.io.PipedWriter) throws java.io.IOException;
+    method public synchronized int read() throws java.io.IOException;
     method public synchronized int read(char[], int, int) throws java.io.IOException;
+    method public synchronized boolean ready() throws java.io.IOException;
   }
 
   public class PipedWriter extends java.io.Writer {
@@ -52862,6 +53210,8 @@
     method public java.io.PrintStream append(char);
     method public boolean checkError();
     method protected void clearError();
+    method public void close();
+    method public void flush();
     method public java.io.PrintStream format(java.lang.String, java.lang.Object...);
     method public java.io.PrintStream format(java.util.Locale, java.lang.String, java.lang.Object...);
     method public void print(boolean);
@@ -52886,6 +53236,8 @@
     method public void println(java.lang.String);
     method public void println(java.lang.Object);
     method protected void setError();
+    method public void write(int);
+    method public void write(byte[], int, int);
   }
 
   public class PrintWriter extends java.io.Writer {
@@ -52897,6 +53249,9 @@
     ctor public PrintWriter(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
     ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException;
     ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    method public java.io.PrintWriter append(java.lang.CharSequence);
+    method public java.io.PrintWriter append(java.lang.CharSequence, int, int);
+    method public java.io.PrintWriter append(char);
     method public boolean checkError();
     method protected void clearError();
     method public void close();
@@ -52925,13 +53280,18 @@
     method public void println(java.lang.String);
     method public void println(java.lang.Object);
     method protected void setError();
+    method public void write(int);
     method public void write(char[], int, int);
+    method public void write(char[]);
+    method public void write(java.lang.String, int, int);
+    method public void write(java.lang.String);
     field protected java.io.Writer out;
   }
 
   public class PushbackInputStream extends java.io.FilterInputStream {
     ctor public PushbackInputStream(java.io.InputStream, int);
     ctor public PushbackInputStream(java.io.InputStream);
+    method public synchronized void close() throws java.io.IOException;
     method public void unread(int) throws java.io.IOException;
     method public void unread(byte[], int, int) throws java.io.IOException;
     method public void unread(byte[]) throws java.io.IOException;
@@ -53055,7 +53415,11 @@
 
   public deprecated class StringBufferInputStream extends java.io.InputStream {
     ctor public StringBufferInputStream(java.lang.String);
+    method public synchronized int available();
     method public synchronized int read();
+    method public synchronized int read(byte[], int, int);
+    method public synchronized void reset();
+    method public synchronized long skip(long);
     field protected java.lang.String buffer;
     field protected int count;
     field protected int pos;
@@ -53070,10 +53434,16 @@
   public class StringWriter extends java.io.Writer {
     ctor public StringWriter();
     ctor public StringWriter(int);
+    method public java.io.StringWriter append(java.lang.CharSequence);
+    method public java.io.StringWriter append(java.lang.CharSequence, int, int);
+    method public java.io.StringWriter append(char);
     method public void close() throws java.io.IOException;
     method public void flush();
     method public java.lang.StringBuffer getBuffer();
+    method public void write(int);
     method public void write(char[], int, int);
+    method public void write(java.lang.String);
+    method public void write(java.lang.String, int, int);
   }
 
   public class SyncFailedException extends java.io.IOException {
@@ -53088,6 +53458,7 @@
   public class UncheckedIOException extends java.lang.RuntimeException {
     ctor public UncheckedIOException(java.lang.String, java.io.IOException);
     ctor public UncheckedIOException(java.io.IOException);
+    method public java.io.IOException getCause();
   }
 
   public class UnsupportedEncodingException extends java.io.IOException {
@@ -53097,6 +53468,7 @@
 
   public class WriteAbortedException extends java.io.ObjectStreamException {
     ctor public WriteAbortedException(java.lang.String, java.lang.Exception);
+    method public java.lang.Throwable getCause();
     field public java.lang.Exception detail;
   }
 
@@ -53864,6 +54236,7 @@
     ctor public ClassNotFoundException();
     ctor public ClassNotFoundException(java.lang.String);
     ctor public ClassNotFoundException(java.lang.String, java.lang.Throwable);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getException();
   }
 
@@ -53968,6 +54341,7 @@
     ctor public ExceptionInInitializerError();
     ctor public ExceptionInInitializerError(java.lang.Throwable);
     ctor public ExceptionInInitializerError(java.lang.String);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getException();
   }
 
@@ -54755,8 +55129,16 @@
     method public synchronized java.lang.StringBuffer append(float);
     method public synchronized java.lang.StringBuffer append(double);
     method public synchronized java.lang.StringBuffer appendCodePoint(int);
+    method public synchronized int capacity();
+    method public synchronized char charAt(int);
+    method public synchronized int codePointAt(int);
+    method public synchronized int codePointBefore(int);
+    method public synchronized int codePointCount(int, int);
     method public synchronized java.lang.StringBuffer delete(int, int);
     method public synchronized java.lang.StringBuffer deleteCharAt(int);
+    method public synchronized void ensureCapacity(int);
+    method public synchronized void getChars(int, int, char[], int);
+    method public synchronized int indexOf(java.lang.String, int);
     method public synchronized java.lang.StringBuffer insert(int, char[], int, int);
     method public synchronized java.lang.StringBuffer insert(int, java.lang.Object);
     method public synchronized java.lang.StringBuffer insert(int, java.lang.String);
@@ -54769,9 +55151,18 @@
     method public java.lang.StringBuffer insert(int, long);
     method public java.lang.StringBuffer insert(int, float);
     method public java.lang.StringBuffer insert(int, double);
+    method public synchronized int lastIndexOf(java.lang.String, int);
+    method public synchronized int length();
+    method public synchronized int offsetByCodePoints(int, int);
     method public synchronized java.lang.StringBuffer replace(int, int, java.lang.String);
     method public synchronized java.lang.StringBuffer reverse();
+    method public synchronized void setCharAt(int, char);
+    method public synchronized void setLength(int);
+    method public synchronized java.lang.CharSequence subSequence(int, int);
+    method public synchronized java.lang.String substring(int);
+    method public synchronized java.lang.String substring(int, int);
     method public synchronized java.lang.String toString();
+    method public synchronized void trimToSize();
   }
 
   public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable {
@@ -55426,6 +55817,7 @@
     ctor protected InvocationTargetException();
     ctor public InvocationTargetException(java.lang.Throwable);
     ctor public InvocationTargetException(java.lang.Throwable, java.lang.String);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getTargetException();
   }
 
@@ -55541,6 +55933,7 @@
   public class UndeclaredThrowableException extends java.lang.RuntimeException {
     ctor public UndeclaredThrowableException(java.lang.Throwable);
     ctor public UndeclaredThrowableException(java.lang.Throwable, java.lang.String);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getUndeclaredThrowable();
   }
 
@@ -56438,6 +56831,7 @@
     method public java.lang.String getQuery();
     method public java.lang.String getRef();
     method public java.lang.String getUserInfo();
+    method public synchronized int hashCode();
     method public java.net.URLConnection openConnection() throws java.io.IOException;
     method public java.net.URLConnection openConnection(java.net.Proxy) throws java.io.IOException;
     method public final java.io.InputStream openStream() throws java.io.IOException;
@@ -56667,7 +57061,6 @@
     method public final int arrayOffset();
     method public abstract java.nio.CharBuffer asReadOnlyBuffer();
     method public final char charAt(int);
-    method public java.util.stream.IntStream chars();
     method public abstract java.nio.CharBuffer compact();
     method public int compareTo(java.nio.CharBuffer);
     method public abstract java.nio.CharBuffer duplicate();
@@ -57524,6 +57917,7 @@
 
   public final class DirectoryIteratorException extends java.util.ConcurrentModificationException {
     ctor public DirectoryIteratorException(java.io.IOException);
+    method public java.io.IOException getCause();
   }
 
   public class DirectoryNotEmptyException extends java.nio.file.FileSystemException {
@@ -58489,9 +58883,11 @@
   public static class KeyStore.PasswordProtection implements javax.security.auth.Destroyable java.security.KeyStore.ProtectionParameter {
     ctor public KeyStore.PasswordProtection(char[]);
     ctor public KeyStore.PasswordProtection(char[], java.lang.String, java.security.spec.AlgorithmParameterSpec);
+    method public synchronized void destroy() throws javax.security.auth.DestroyFailedException;
     method public synchronized char[] getPassword();
     method public java.lang.String getProtectionAlgorithm();
     method public java.security.spec.AlgorithmParameterSpec getProtectionParameters();
+    method public synchronized boolean isDestroyed();
   }
 
   public static final class KeyStore.PrivateKeyEntry implements java.security.KeyStore.Entry {
@@ -58671,6 +59067,7 @@
 
   public class PrivilegedActionException extends java.lang.Exception {
     ctor public PrivilegedActionException(java.lang.Exception);
+    method public java.lang.Throwable getCause();
     method public java.lang.Exception getException();
   }
 
@@ -58693,22 +59090,30 @@
     method public synchronized java.lang.Object compute(java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
     method public synchronized java.lang.Object computeIfAbsent(java.lang.Object, java.util.function.Function<? super java.lang.Object, ? extends java.lang.Object>);
     method public synchronized java.lang.Object computeIfPresent(java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
+    method public java.util.Enumeration<java.lang.Object> elements();
+    method public synchronized java.util.Set<java.util.Map.Entry<java.lang.Object, java.lang.Object>> entrySet();
     method public synchronized void forEach(java.util.function.BiConsumer<? super java.lang.Object, ? super java.lang.Object>);
+    method public java.lang.Object get(java.lang.Object);
     method public java.lang.String getInfo();
     method public java.lang.String getName();
     method public synchronized java.lang.Object getOrDefault(java.lang.Object, java.lang.Object);
     method public synchronized java.security.Provider.Service getService(java.lang.String, java.lang.String);
     method public synchronized java.util.Set<java.security.Provider.Service> getServices();
     method public double getVersion();
+    method public java.util.Set<java.lang.Object> keySet();
+    method public java.util.Enumeration<java.lang.Object> keys();
     method public synchronized java.lang.Object merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
     method public synchronized java.lang.Object put(java.lang.Object, java.lang.Object);
     method public synchronized void putAll(java.util.Map<?, ?>);
     method public synchronized java.lang.Object putIfAbsent(java.lang.Object, java.lang.Object);
     method protected synchronized void putService(java.security.Provider.Service);
+    method public synchronized java.lang.Object remove(java.lang.Object);
     method protected synchronized void removeService(java.security.Provider.Service);
     method public synchronized boolean replace(java.lang.Object, java.lang.Object, java.lang.Object);
     method public synchronized java.lang.Object replace(java.lang.Object, java.lang.Object);
     method public synchronized void replaceAll(java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
+    method public java.lang.String toString();
+    method public java.util.Collection<java.lang.Object> values();
   }
 
   public static class Provider.Service {
@@ -58754,7 +59159,9 @@
     method public final java.security.Provider getProvider();
     method public static byte[] getSeed(int);
     method protected final int next(int);
+    method public synchronized void nextBytes(byte[]);
     method public synchronized void setSeed(byte[]);
+    method public void setSeed(long);
   }
 
   public abstract class SecureRandomSpi implements java.io.Serializable {
@@ -59301,6 +59708,7 @@
 
   public abstract class PKIXRevocationChecker extends java.security.cert.PKIXCertPathChecker {
     ctor protected PKIXRevocationChecker();
+    method public java.security.cert.PKIXRevocationChecker clone();
     method public java.util.List<java.security.cert.Extension> getOcspExtensions();
     method public java.net.URI getOcspResponder();
     method public java.security.cert.X509Certificate getOcspResponderCert();
@@ -61553,7 +61961,6 @@
   public final class DayOfWeek extends java.lang.Enum implements java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
     method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
     method public static java.time.DayOfWeek from(java.time.temporal.TemporalAccessor);
-    method public int get(java.time.temporal.TemporalField);
     method public java.lang.String getDisplayName(java.time.format.TextStyle, java.util.Locale);
     method public long getLong(java.time.temporal.TemporalField);
     method public int getValue();
@@ -61561,8 +61968,6 @@
     method public java.time.DayOfWeek minus(long);
     method public static java.time.DayOfWeek of(int);
     method public java.time.DayOfWeek plus(long);
-    method public <R> R query(java.time.temporal.TemporalQuery<R>);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
     method public static java.time.DayOfWeek valueOf(java.lang.String);
     method public static final java.time.DayOfWeek[] values();
     enum_constant public static final java.time.DayOfWeek FRIDAY;
@@ -61638,6 +62043,8 @@
     method public boolean isBefore(java.time.Instant);
     method public boolean isSupported(java.time.temporal.TemporalField);
     method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.Instant minus(java.time.temporal.TemporalAmount);
+    method public java.time.Instant minus(long, java.time.temporal.TemporalUnit);
     method public java.time.Instant minusMillis(long);
     method public java.time.Instant minusNanos(long);
     method public java.time.Instant minusSeconds(long);
@@ -61647,6 +62054,7 @@
     method public static java.time.Instant ofEpochSecond(long);
     method public static java.time.Instant ofEpochSecond(long, long);
     method public static java.time.Instant parse(java.lang.CharSequence);
+    method public java.time.Instant plus(java.time.temporal.TemporalAmount);
     method public java.time.Instant plus(long, java.time.temporal.TemporalUnit);
     method public java.time.Instant plusMillis(long);
     method public java.time.Instant plusNanos(long);
@@ -61654,6 +62062,7 @@
     method public long toEpochMilli();
     method public java.time.Instant truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.Instant with(java.time.temporal.TemporalAdjuster);
     method public java.time.Instant with(java.time.temporal.TemporalField, long);
     field public static final java.time.Instant EPOCH;
     field public static final java.time.Instant MAX;
@@ -61663,6 +62072,7 @@
   public final class LocalDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
     method public java.time.LocalDateTime atStartOfDay();
     method public java.time.ZonedDateTime atStartOfDay(java.time.ZoneId);
+    method public java.time.LocalDateTime atTime(java.time.LocalTime);
     method public java.time.LocalDateTime atTime(int, int);
     method public java.time.LocalDateTime atTime(int, int, int);
     method public java.time.LocalDateTime atTime(int, int, int, int);
@@ -61677,6 +62087,8 @@
     method public int getMonthValue();
     method public int getYear();
     method public int lengthOfMonth();
+    method public java.time.LocalDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDate minus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalDate minusDays(long);
     method public java.time.LocalDate minusMonths(long);
     method public java.time.LocalDate minusWeeks(long);
@@ -61690,12 +62102,16 @@
     method public static java.time.LocalDate ofYearDay(int, int);
     method public static java.time.LocalDate parse(java.lang.CharSequence);
     method public static java.time.LocalDate parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalDate plusDays(long);
     method public java.time.LocalDate plusMonths(long);
     method public java.time.LocalDate plusWeeks(long);
     method public java.time.LocalDate plusYears(long);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
     method public java.time.Period until(java.time.chrono.ChronoLocalDate);
+    method public java.time.LocalDate with(java.time.temporal.TemporalAdjuster);
+    method public java.time.LocalDate with(java.time.temporal.TemporalField, long);
     method public java.time.LocalDate withDayOfMonth(int);
     method public java.time.LocalDate withDayOfYear(int);
     method public java.time.LocalDate withMonth(int);
@@ -61720,6 +62136,8 @@
     method public int getSecond();
     method public int getYear();
     method public boolean isSupported(java.time.temporal.TemporalField);
+    method public java.time.LocalDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDateTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalDateTime minusDays(long);
     method public java.time.LocalDateTime minusHours(long);
     method public java.time.LocalDateTime minusMinutes(long);
@@ -61742,6 +62160,7 @@
     method public static java.time.LocalDateTime ofInstant(java.time.Instant, java.time.ZoneId);
     method public static java.time.LocalDateTime parse(java.lang.CharSequence);
     method public static java.time.LocalDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalDateTime plus(java.time.temporal.TemporalAmount);
     method public java.time.LocalDateTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalDateTime plusDays(long);
     method public java.time.LocalDateTime plusHours(long);
@@ -61755,6 +62174,7 @@
     method public java.time.LocalTime toLocalTime();
     method public java.time.LocalDateTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.LocalDateTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.LocalDateTime with(java.time.temporal.TemporalField, long);
     method public java.time.LocalDateTime withDayOfMonth(int);
     method public java.time.LocalDateTime withDayOfYear(int);
@@ -61784,6 +62204,8 @@
     method public boolean isBefore(java.time.LocalTime);
     method public boolean isSupported(java.time.temporal.TemporalField);
     method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalTime minusHours(long);
     method public java.time.LocalTime minusMinutes(long);
     method public java.time.LocalTime minusNanos(long);
@@ -61798,6 +62220,7 @@
     method public static java.time.LocalTime ofSecondOfDay(long);
     method public static java.time.LocalTime parse(java.lang.CharSequence);
     method public static java.time.LocalTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalTime plus(java.time.temporal.TemporalAmount);
     method public java.time.LocalTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalTime plusHours(long);
     method public java.time.LocalTime plusMinutes(long);
@@ -61807,6 +62230,7 @@
     method public int toSecondOfDay();
     method public java.time.LocalTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.LocalTime with(java.time.temporal.TemporalField, long);
     method public java.time.LocalTime withHour(int);
     method public java.time.LocalTime withMinute(int);
@@ -61823,7 +62247,6 @@
     method public int firstDayOfYear(boolean);
     method public java.time.Month firstMonthOfQuarter();
     method public static java.time.Month from(java.time.temporal.TemporalAccessor);
-    method public int get(java.time.temporal.TemporalField);
     method public java.lang.String getDisplayName(java.time.format.TextStyle, java.util.Locale);
     method public long getLong(java.time.temporal.TemporalField);
     method public int getValue();
@@ -61834,8 +62257,6 @@
     method public java.time.Month minus(long);
     method public static java.time.Month of(int);
     method public java.time.Month plus(long);
-    method public <R> R query(java.time.temporal.TemporalQuery<R>);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
     method public static java.time.Month valueOf(java.lang.String);
     method public static final java.time.Month[] values();
     enum_constant public static final java.time.Month APRIL;
@@ -61902,6 +62323,8 @@
     method public boolean isEqual(java.time.OffsetDateTime);
     method public boolean isSupported(java.time.temporal.TemporalField);
     method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetDateTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.OffsetDateTime minusDays(long);
     method public java.time.OffsetDateTime minusHours(long);
     method public java.time.OffsetDateTime minusMinutes(long);
@@ -61919,6 +62342,7 @@
     method public static java.time.OffsetDateTime ofInstant(java.time.Instant, java.time.ZoneId);
     method public static java.time.OffsetDateTime parse(java.lang.CharSequence);
     method public static java.time.OffsetDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.OffsetDateTime plus(java.time.temporal.TemporalAmount);
     method public java.time.OffsetDateTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.OffsetDateTime plusDays(long);
     method public java.time.OffsetDateTime plusHours(long);
@@ -61938,6 +62362,7 @@
     method public java.time.ZonedDateTime toZonedDateTime();
     method public java.time.OffsetDateTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.OffsetDateTime with(java.time.temporal.TemporalField, long);
     method public java.time.OffsetDateTime withDayOfMonth(int);
     method public java.time.OffsetDateTime withDayOfYear(int);
@@ -61970,6 +62395,8 @@
     method public boolean isEqual(java.time.OffsetTime);
     method public boolean isSupported(java.time.temporal.TemporalField);
     method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.OffsetTime minusHours(long);
     method public java.time.OffsetTime minusMinutes(long);
     method public java.time.OffsetTime minusNanos(long);
@@ -61982,6 +62409,7 @@
     method public static java.time.OffsetTime ofInstant(java.time.Instant, java.time.ZoneId);
     method public static java.time.OffsetTime parse(java.lang.CharSequence);
     method public static java.time.OffsetTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.OffsetTime plus(java.time.temporal.TemporalAmount);
     method public java.time.OffsetTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.OffsetTime plusHours(long);
     method public java.time.OffsetTime plusMinutes(long);
@@ -61990,6 +62418,7 @@
     method public java.time.LocalTime toLocalTime();
     method public java.time.OffsetTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.OffsetTime with(java.time.temporal.TemporalField, long);
     method public java.time.OffsetTime withHour(int);
     method public java.time.OffsetTime withMinute(int);
@@ -62016,6 +62445,7 @@
     method public java.time.Period minusMonths(long);
     method public java.time.Period minusYears(long);
     method public java.time.Period multipliedBy(int);
+    method public java.time.Period negated();
     method public java.time.Period normalized();
     method public static java.time.Period of(int, int, int);
     method public static java.time.Period ofDays(int);
@@ -62054,6 +62484,8 @@
     method public boolean isSupported(java.time.temporal.TemporalUnit);
     method public boolean isValidMonthDay(java.time.MonthDay);
     method public int length();
+    method public java.time.Year minus(java.time.temporal.TemporalAmount);
+    method public java.time.Year minus(long, java.time.temporal.TemporalUnit);
     method public java.time.Year minusYears(long);
     method public static java.time.Year now();
     method public static java.time.Year now(java.time.ZoneId);
@@ -62061,9 +62493,11 @@
     method public static java.time.Year of(int);
     method public static java.time.Year parse(java.lang.CharSequence);
     method public static java.time.Year parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.Year plus(java.time.temporal.TemporalAmount);
     method public java.time.Year plus(long, java.time.temporal.TemporalUnit);
     method public java.time.Year plusYears(long);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.Year with(java.time.temporal.TemporalAdjuster);
     method public java.time.Year with(java.time.temporal.TemporalField, long);
     field public static final int MAX_VALUE = 999999999; // 0x3b9ac9ff
     field public static final int MIN_VALUE = -999999999; // 0xc4653601
@@ -62088,6 +62522,8 @@
     method public boolean isValidDay(int);
     method public int lengthOfMonth();
     method public int lengthOfYear();
+    method public java.time.YearMonth minus(java.time.temporal.TemporalAmount);
+    method public java.time.YearMonth minus(long, java.time.temporal.TemporalUnit);
     method public java.time.YearMonth minusMonths(long);
     method public java.time.YearMonth minusYears(long);
     method public static java.time.YearMonth now();
@@ -62097,10 +62533,12 @@
     method public static java.time.YearMonth of(int, int);
     method public static java.time.YearMonth parse(java.lang.CharSequence);
     method public static java.time.YearMonth parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.YearMonth plus(java.time.temporal.TemporalAmount);
     method public java.time.YearMonth plus(long, java.time.temporal.TemporalUnit);
     method public java.time.YearMonth plusMonths(long);
     method public java.time.YearMonth plusYears(long);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.YearMonth with(java.time.temporal.TemporalAdjuster);
     method public java.time.YearMonth with(java.time.temporal.TemporalField, long);
     method public java.time.YearMonth withMonth(int);
     method public java.time.YearMonth withYear(int);
@@ -62124,7 +62562,6 @@
     method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
     method public int compareTo(java.time.ZoneOffset);
     method public static java.time.ZoneOffset from(java.time.temporal.TemporalAccessor);
-    method public int get(java.time.temporal.TemporalField);
     method public java.lang.String getId();
     method public long getLong(java.time.temporal.TemporalField);
     method public java.time.zone.ZoneRules getRules();
@@ -62135,8 +62572,6 @@
     method public static java.time.ZoneOffset ofHoursMinutes(int, int);
     method public static java.time.ZoneOffset ofHoursMinutesSeconds(int, int, int);
     method public static java.time.ZoneOffset ofTotalSeconds(int);
-    method public <R> R query(java.time.temporal.TemporalQuery<R>);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
     field public static final java.time.ZoneOffset MAX;
     field public static final java.time.ZoneOffset MIN;
     field public static final java.time.ZoneOffset UTC;
@@ -62157,6 +62592,8 @@
     method public int getYear();
     method public java.time.ZoneId getZone();
     method public boolean isSupported(java.time.temporal.TemporalField);
+    method public java.time.ZonedDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.ZonedDateTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.ZonedDateTime minusDays(long);
     method public java.time.ZonedDateTime minusHours(long);
     method public java.time.ZonedDateTime minusMinutes(long);
@@ -62177,6 +62614,7 @@
     method public static java.time.ZonedDateTime ofStrict(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneId);
     method public static java.time.ZonedDateTime parse(java.lang.CharSequence);
     method public static java.time.ZonedDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.ZonedDateTime plus(java.time.temporal.TemporalAmount);
     method public java.time.ZonedDateTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.ZonedDateTime plusDays(long);
     method public java.time.ZonedDateTime plusHours(long);
@@ -62186,10 +62624,12 @@
     method public java.time.ZonedDateTime plusSeconds(long);
     method public java.time.ZonedDateTime plusWeeks(long);
     method public java.time.ZonedDateTime plusYears(long);
+    method public java.time.LocalDate toLocalDate();
     method public java.time.LocalDateTime toLocalDateTime();
     method public java.time.OffsetDateTime toOffsetDateTime();
     method public java.time.ZonedDateTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.ZonedDateTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.ZonedDateTime with(java.time.temporal.TemporalField, long);
     method public java.time.ZonedDateTime withDayOfMonth(int);
     method public java.time.ZonedDateTime withDayOfYear(int);
@@ -62234,17 +62674,27 @@
     method public default boolean isSupported(java.time.temporal.TemporalUnit);
     method public abstract int lengthOfMonth();
     method public default int lengthOfYear();
+    method public default java.time.chrono.ChronoLocalDate minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoLocalDate minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDate plus(java.time.temporal.TemporalAmount);
     method public default java.time.chrono.ChronoLocalDate plus(long, java.time.temporal.TemporalUnit);
     method public static java.util.Comparator<java.time.chrono.ChronoLocalDate> timeLineOrder();
     method public default long toEpochDay();
     method public abstract java.lang.String toString();
     method public abstract long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
     method public abstract java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalAdjuster);
     method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalField, long);
   }
 
    abstract class ChronoLocalDateImpl<D extends java.time.chrono.ChronoLocalDate> implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public D minus(java.time.temporal.TemporalAmount);
+    method public D minus(long, java.time.temporal.TemporalUnit);
+    method public D plus(java.time.temporal.TemporalAmount);
+    method public D plus(long, java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public D with(java.time.temporal.TemporalAdjuster);
+    method public D with(java.time.temporal.TemporalField, long);
   }
 
   public abstract interface ChronoLocalDateTime<D extends java.time.chrono.ChronoLocalDate> implements java.lang.Comparable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
@@ -62261,6 +62711,9 @@
     method public default boolean isEqual(java.time.chrono.ChronoLocalDateTime<?>);
     method public abstract boolean isSupported(java.time.temporal.TemporalField);
     method public default boolean isSupported(java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDateTime<D> minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoLocalDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDateTime<D> plus(java.time.temporal.TemporalAmount);
     method public abstract java.time.chrono.ChronoLocalDateTime<D> plus(long, java.time.temporal.TemporalUnit);
     method public static java.util.Comparator<java.time.chrono.ChronoLocalDateTime<?>> timeLineOrder();
     method public default long toEpochSecond(java.time.ZoneOffset);
@@ -62268,6 +62721,7 @@
     method public abstract D toLocalDate();
     method public abstract java.time.LocalTime toLocalTime();
     method public abstract java.lang.String toString();
+    method public default java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalAdjuster);
     method public abstract java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalField, long);
   }
 
@@ -62305,6 +62759,9 @@
     method public default boolean isEqual(java.time.chrono.ChronoZonedDateTime<?>);
     method public abstract boolean isSupported(java.time.temporal.TemporalField);
     method public default boolean isSupported(java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoZonedDateTime<D> minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoZonedDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoZonedDateTime<D> plus(java.time.temporal.TemporalAmount);
     method public abstract java.time.chrono.ChronoZonedDateTime<D> plus(long, java.time.temporal.TemporalUnit);
     method public static java.util.Comparator<java.time.chrono.ChronoZonedDateTime<?>> timeLineOrder();
     method public default long toEpochSecond();
@@ -62313,6 +62770,7 @@
     method public abstract java.time.chrono.ChronoLocalDateTime<D> toLocalDateTime();
     method public default java.time.LocalTime toLocalTime();
     method public abstract java.lang.String toString();
+    method public default java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalAdjuster);
     method public abstract java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalField, long);
     method public abstract java.time.chrono.ChronoZonedDateTime<D> withEarlierOffsetAtOverlap();
     method public abstract java.time.chrono.ChronoZonedDateTime<D> withLaterOffsetAtOverlap();
@@ -62379,6 +62837,7 @@
     method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.HijrahDate> localDateTime(java.time.temporal.TemporalAccessor);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.HijrahDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.HijrahChronology INSTANCE;
@@ -62390,23 +62849,24 @@
     method public java.time.chrono.HijrahChronology getChronology();
     method public java.time.chrono.HijrahEra getEra();
     method public long getLong(java.time.temporal.TemporalField);
-    method public boolean isLeapYear();
     method public int lengthOfMonth();
-    method public int lengthOfYear();
+    method public java.time.chrono.HijrahDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.HijrahDate minus(long, java.time.temporal.TemporalUnit);
     method public static java.time.chrono.HijrahDate now();
     method public static java.time.chrono.HijrahDate now(java.time.ZoneId);
     method public static java.time.chrono.HijrahDate now(java.time.Clock);
     method public static java.time.chrono.HijrahDate of(int, int, int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
-    method public long toEpochDay();
+    method public java.time.chrono.HijrahDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.HijrahDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalAdjuster);
     method public java.time.chrono.HijrahDate withVariant(java.time.chrono.HijrahChronology);
   }
 
   public final class HijrahEra extends java.lang.Enum implements java.time.chrono.Era {
     method public int getValue();
     method public static java.time.chrono.HijrahEra of(int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
     method public static java.time.chrono.HijrahEra valueOf(java.lang.String);
     method public static final java.time.chrono.HijrahEra[] values();
     enum_constant public static final java.time.chrono.HijrahEra AH;
@@ -62431,6 +62891,7 @@
     method public java.time.Period period(int, int, int);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.LocalDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.ZonedDateTime zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.ZonedDateTime zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.IsoChronology INSTANCE;
@@ -62463,6 +62924,7 @@
     method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.JapaneseDate> localDateTime(java.time.temporal.TemporalAccessor);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.JapaneseDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.JapaneseChronology INSTANCE;
@@ -62474,17 +62936,19 @@
     method public java.time.chrono.JapaneseChronology getChronology();
     method public java.time.chrono.JapaneseEra getEra();
     method public long getLong(java.time.temporal.TemporalField);
-    method public boolean isSupported(java.time.temporal.TemporalField);
     method public int lengthOfMonth();
-    method public int lengthOfYear();
+    method public java.time.chrono.JapaneseDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.JapaneseDate minus(long, java.time.temporal.TemporalUnit);
     method public static java.time.chrono.JapaneseDate now();
     method public static java.time.chrono.JapaneseDate now(java.time.ZoneId);
     method public static java.time.chrono.JapaneseDate now(java.time.Clock);
     method public static java.time.chrono.JapaneseDate of(java.time.chrono.JapaneseEra, int, int, int);
     method public static java.time.chrono.JapaneseDate of(int, int, int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
-    method public long toEpochDay();
+    method public java.time.chrono.JapaneseDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.JapaneseDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalAdjuster);
   }
 
   public final class JapaneseEra implements java.time.chrono.Era java.io.Serializable {
@@ -62516,6 +62980,7 @@
     method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.MinguoDate> localDateTime(java.time.temporal.TemporalAccessor);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.MinguoDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.MinguoChronology INSTANCE;
@@ -62528,13 +62993,17 @@
     method public java.time.chrono.MinguoEra getEra();
     method public long getLong(java.time.temporal.TemporalField);
     method public int lengthOfMonth();
+    method public java.time.chrono.MinguoDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.MinguoDate minus(long, java.time.temporal.TemporalUnit);
     method public static java.time.chrono.MinguoDate now();
     method public static java.time.chrono.MinguoDate now(java.time.ZoneId);
     method public static java.time.chrono.MinguoDate now(java.time.Clock);
     method public static java.time.chrono.MinguoDate of(int, int, int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
-    method public long toEpochDay();
+    method public java.time.chrono.MinguoDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.MinguoDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalAdjuster);
   }
 
   public final class MinguoEra extends java.lang.Enum implements java.time.chrono.Era {
@@ -62564,6 +63033,7 @@
     method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.ThaiBuddhistDate> localDateTime(java.time.temporal.TemporalAccessor);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.ThaiBuddhistDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.ThaiBuddhistChronology INSTANCE;
@@ -62576,13 +63046,17 @@
     method public java.time.chrono.ThaiBuddhistEra getEra();
     method public long getLong(java.time.temporal.TemporalField);
     method public int lengthOfMonth();
+    method public java.time.chrono.ThaiBuddhistDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ThaiBuddhistDate minus(long, java.time.temporal.TemporalUnit);
     method public static java.time.chrono.ThaiBuddhistDate now();
     method public static java.time.chrono.ThaiBuddhistDate now(java.time.ZoneId);
     method public static java.time.chrono.ThaiBuddhistDate now(java.time.Clock);
     method public static java.time.chrono.ThaiBuddhistDate of(int, int, int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
-    method public long toEpochDay();
+    method public java.time.chrono.ThaiBuddhistDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ThaiBuddhistDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalAdjuster);
   }
 
   public final class ThaiBuddhistEra extends java.lang.Enum implements java.time.chrono.Era {
@@ -62761,7 +63235,6 @@
     method public int checkValidIntValue(long);
     method public long checkValidValue(long);
     method public java.time.temporal.TemporalUnit getBaseUnit();
-    method public java.lang.String getDisplayName(java.util.Locale);
     method public long getFrom(java.time.temporal.TemporalAccessor);
     method public java.time.temporal.TemporalUnit getRangeUnit();
     method public boolean isDateBased();
@@ -62809,7 +63282,6 @@
     method public java.time.Duration getDuration();
     method public boolean isDateBased();
     method public boolean isDurationEstimated();
-    method public boolean isSupportedBy(java.time.temporal.Temporal);
     method public boolean isTimeBased();
     method public static java.time.temporal.ChronoUnit valueOf(java.lang.String);
     method public static final java.time.temporal.ChronoUnit[] values();
@@ -63149,7 +63621,6 @@
     method public E removeLast();
     method public boolean removeLastOccurrence(java.lang.Object);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public class ArrayList<E> extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
@@ -63160,11 +63631,7 @@
     method public void ensureCapacity(int);
     method public void forEach(java.util.function.Consumer<? super E>);
     method public E get(int);
-    method public boolean removeIf(java.util.function.Predicate<? super E>);
-    method public void replaceAll(java.util.function.UnaryOperator<E>);
     method public int size();
-    method public void sort(java.util.Comparator<? super E>);
-    method public java.util.Spliterator<E> spliterator();
     method public void trimToSize();
   }
 
@@ -63535,6 +64002,7 @@
     method public default boolean removeIf(java.util.function.Predicate<? super E>);
     method public abstract boolean retainAll(java.util.Collection<?>);
     method public abstract int size();
+    method public default java.util.Spliterator<E> spliterator();
     method public default java.util.stream.Stream<E> stream();
     method public abstract java.lang.Object[] toArray();
     method public abstract <T> T[] toArray(T[]);
@@ -63875,18 +64343,7 @@
     ctor public HashMap();
     ctor public HashMap(java.util.Map<? extends K, ? extends V>);
     method public java.lang.Object clone();
-    method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
-    method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
-    method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
-    method public V getOrDefault(java.lang.Object, V);
-    method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
-    method public V putIfAbsent(K, V);
-    method public boolean remove(java.lang.Object, java.lang.Object);
-    method public boolean replace(K, V, V);
-    method public V replace(K, V);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
   }
 
   public class HashSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
@@ -63897,7 +64354,6 @@
     method public java.lang.Object clone();
     method public java.util.Iterator<E> iterator();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public class Hashtable<K, V> extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
@@ -63915,9 +64371,11 @@
     method public boolean containsValue(java.lang.Object);
     method public synchronized java.util.Enumeration<V> elements();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
+    method public synchronized boolean equals(java.lang.Object);
     method public synchronized void forEach(java.util.function.BiConsumer<? super K, ? super V>);
     method public synchronized V get(java.lang.Object);
     method public synchronized V getOrDefault(java.lang.Object, V);
+    method public synchronized int hashCode();
     method public synchronized boolean isEmpty();
     method public java.util.Set<K> keySet();
     method public synchronized java.util.Enumeration<K> keys();
@@ -63932,6 +64390,7 @@
     method public synchronized V replace(K, V);
     method public synchronized void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public synchronized int size();
+    method public synchronized java.lang.String toString();
     method public java.util.Collection<V> values();
   }
 
@@ -63941,8 +64400,6 @@
     ctor public IdentityHashMap(java.util.Map<? extends K, ? extends V>);
     method public java.lang.Object clone();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
   }
 
   public class IllegalFormatCodePointException extends java.util.IllegalFormatException {
@@ -64053,7 +64510,6 @@
     method public E removeLast();
     method public boolean removeLastOccurrence(java.lang.Object);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public abstract interface List<E> implements java.util.Collection {
@@ -64676,6 +65132,7 @@
     ctor public SimpleTimeZone(int, java.lang.String, int, int, int, int, int, int, int, int, int, int, int);
     method public int getOffset(int, int, int, int, int, int);
     method public int getRawOffset();
+    method public synchronized int hashCode();
     method public boolean inDaylightTime(java.util.Date);
     method public void setDSTSavings(int);
     method public void setEndRule(int, int, int, int);
@@ -64948,7 +65405,6 @@
     method public K firstKey();
     method public java.util.Map.Entry<K, V> floorEntry(K);
     method public K floorKey(K);
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
     method public java.util.NavigableMap<K, V> headMap(K, boolean);
     method public java.util.SortedMap<K, V> headMap(K);
     method public java.util.Map.Entry<K, V> higherEntry(K);
@@ -64960,9 +65416,6 @@
     method public java.util.NavigableSet<K> navigableKeySet();
     method public java.util.Map.Entry<K, V> pollFirstEntry();
     method public java.util.Map.Entry<K, V> pollLastEntry();
-    method public boolean replace(K, V, V);
-    method public V replace(K, V);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public java.util.NavigableMap<K, V> subMap(K, boolean, K, boolean);
     method public java.util.SortedMap<K, V> subMap(K, K);
     method public java.util.NavigableMap<K, V> tailMap(K, boolean);
@@ -64990,7 +65443,6 @@
     method public E pollFirst();
     method public E pollLast();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
     method public java.util.SortedSet<E> subSet(E, E);
     method public java.util.NavigableSet<E> tailSet(E, boolean);
@@ -65027,30 +65479,49 @@
     ctor public Vector(int);
     ctor public Vector();
     ctor public Vector(java.util.Collection<? extends E>);
+    method public synchronized boolean add(E);
+    method public synchronized boolean addAll(java.util.Collection<? extends E>);
+    method public synchronized boolean addAll(int, java.util.Collection<? extends E>);
     method public synchronized void addElement(E);
     method public synchronized int capacity();
     method public synchronized java.lang.Object clone();
+    method public synchronized boolean containsAll(java.util.Collection<?>);
     method public synchronized void copyInto(java.lang.Object[]);
     method public synchronized E elementAt(int);
     method public java.util.Enumeration<E> elements();
     method public synchronized void ensureCapacity(int);
+    method public synchronized boolean equals(java.lang.Object);
     method public synchronized E firstElement();
     method public synchronized void forEach(java.util.function.Consumer<? super E>);
     method public synchronized E get(int);
+    method public synchronized int hashCode();
     method public synchronized int indexOf(java.lang.Object, int);
     method public synchronized void insertElementAt(E, int);
+    method public synchronized boolean isEmpty();
+    method public synchronized java.util.Iterator<E> iterator();
     method public synchronized E lastElement();
+    method public synchronized int lastIndexOf(java.lang.Object);
     method public synchronized int lastIndexOf(java.lang.Object, int);
+    method public synchronized java.util.ListIterator<E> listIterator(int);
+    method public synchronized java.util.ListIterator<E> listIterator();
+    method public synchronized E remove(int);
+    method public synchronized boolean removeAll(java.util.Collection<?>);
     method public synchronized void removeAllElements();
     method public synchronized boolean removeElement(java.lang.Object);
     method public synchronized void removeElementAt(int);
     method public synchronized boolean removeIf(java.util.function.Predicate<? super E>);
+    method protected synchronized void removeRange(int, int);
     method public synchronized void replaceAll(java.util.function.UnaryOperator<E>);
+    method public synchronized boolean retainAll(java.util.Collection<?>);
+    method public synchronized E set(int, E);
     method public synchronized void setElementAt(E, int);
     method public synchronized void setSize(int);
     method public synchronized int size();
     method public synchronized void sort(java.util.Comparator<? super E>);
-    method public java.util.Spliterator<E> spliterator();
+    method public synchronized java.util.List<E> subList(int, int);
+    method public synchronized java.lang.Object[] toArray();
+    method public synchronized <T> T[] toArray(T[]);
+    method public synchronized java.lang.String toString();
     method public synchronized void trimToSize();
     field protected int capacityIncrement;
     field protected int elementCount;
@@ -65063,8 +65534,6 @@
     ctor public WeakHashMap();
     ctor public WeakHashMap(java.util.Map<? extends K, ? extends V>);
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
   }
 
 }
@@ -65099,7 +65568,6 @@
     method public void put(E) throws java.lang.InterruptedException;
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
   }
 
@@ -65290,13 +65758,9 @@
     ctor public ConcurrentHashMap(java.util.Map<? extends K, ? extends V>);
     ctor public ConcurrentHashMap(int, float);
     ctor public ConcurrentHashMap(int, float, int);
-    method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
-    method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
-    method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public boolean contains(java.lang.Object);
     method public java.util.Enumeration<V> elements();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
     method public void forEach(long, java.util.function.BiConsumer<? super K, ? super V>);
     method public <U> void forEach(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachEntry(long, java.util.function.Consumer<? super java.util.Map.Entry<K, V>>);
@@ -65305,14 +65769,11 @@
     method public <U> void forEachKey(long, java.util.function.Function<? super K, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachValue(long, java.util.function.Consumer<? super V>);
     method public <U> void forEachValue(long, java.util.function.Function<? super V, ? extends U>, java.util.function.Consumer<? super U>);
-    method public V getOrDefault(java.lang.Object, V);
     method public java.util.concurrent.ConcurrentHashMap.KeySetView<K, V> keySet(V);
     method public java.util.Enumeration<K> keys();
     method public long mappingCount();
-    method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
     method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet();
     method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet(int);
-    method public V putIfAbsent(K, V);
     method public <U> U reduce(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public java.util.Map.Entry<K, V> reduceEntries(long, java.util.function.BiFunction<java.util.Map.Entry<K, V>, java.util.Map.Entry<K, V>, ? extends java.util.Map.Entry<K, V>>);
     method public <U> U reduceEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
@@ -65332,10 +65793,6 @@
     method public double reduceValuesToDouble(long, java.util.function.ToDoubleFunction<? super V>, double, java.util.function.DoubleBinaryOperator);
     method public int reduceValuesToInt(long, java.util.function.ToIntFunction<? super V>, int, java.util.function.IntBinaryOperator);
     method public long reduceValuesToLong(long, java.util.function.ToLongFunction<? super V>, long, java.util.function.LongBinaryOperator);
-    method public boolean remove(java.lang.Object, java.lang.Object);
-    method public boolean replace(K, V, V);
-    method public V replace(K, V);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public <U> U search(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>);
     method public <U> U searchEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>);
     method public <U> U searchKeys(long, java.util.function.Function<? super K, ? extends U>);
@@ -65396,7 +65853,6 @@
     method public E removeLast();
     method public boolean removeLastOccurrence(java.lang.Object);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public class ConcurrentLinkedQueue<E> extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable {
@@ -65407,7 +65863,6 @@
     method public E peek();
     method public E poll();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public abstract interface ConcurrentMap<K, V> implements java.util.Map {
@@ -65439,9 +65894,6 @@
     method public K ceilingKey(K);
     method public java.util.concurrent.ConcurrentSkipListMap<K, V> clone();
     method public java.util.Comparator<? super K> comparator();
-    method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
-    method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
-    method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public java.util.NavigableSet<K> descendingKeySet();
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> descendingMap();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
@@ -65449,25 +65901,18 @@
     method public K firstKey();
     method public java.util.Map.Entry<K, V> floorEntry(K);
     method public K floorKey(K);
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
-    method public V getOrDefault(java.lang.Object, V);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K, boolean);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K);
     method public java.util.Map.Entry<K, V> higherEntry(K);
     method public K higherKey(K);
+    method public java.util.NavigableSet<K> keySet();
     method public java.util.Map.Entry<K, V> lastEntry();
     method public K lastKey();
     method public java.util.Map.Entry<K, V> lowerEntry(K);
     method public K lowerKey(K);
-    method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
     method public java.util.NavigableSet<K> navigableKeySet();
     method public java.util.Map.Entry<K, V> pollFirstEntry();
     method public java.util.Map.Entry<K, V> pollLastEntry();
-    method public V putIfAbsent(K, V);
-    method public boolean remove(java.lang.Object, java.lang.Object);
-    method public boolean replace(K, V, V);
-    method public V replace(K, V);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> subMap(K, boolean, K, boolean);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> subMap(K, K);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> tailMap(K, boolean);
@@ -65495,7 +65940,6 @@
     method public E pollFirst();
     method public E pollLast();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
     method public java.util.NavigableSet<E> subSet(E, E);
     method public java.util.NavigableSet<E> tailSet(E, boolean);
@@ -65542,9 +65986,7 @@
     ctor public CopyOnWriteArraySet(java.util.Collection<? extends E>);
     method public void forEach(java.util.function.Consumer<? super E>);
     method public java.util.Iterator<E> iterator();
-    method public boolean removeIf(java.util.function.Predicate<? super E>);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public class CountDownLatch {
@@ -65703,6 +66145,7 @@
     method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
     method public boolean hasQueuedSubmissions();
     method public <T> T invoke(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>);
     method public boolean isQuiescent();
     method public boolean isShutdown();
     method public boolean isTerminated();
@@ -65712,6 +66155,9 @@
     method public void shutdown();
     method public java.util.List<java.lang.Runnable> shutdownNow();
     method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.Callable<T>);
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.lang.Runnable, T);
+    method public java.util.concurrent.ForkJoinTask<?> submit(java.lang.Runnable);
     field public static final java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory;
   }
 
@@ -65835,7 +66281,6 @@
     method public E removeLast();
     method public boolean removeLastOccurrence(java.lang.Object);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
     method public E takeFirst() throws java.lang.InterruptedException;
     method public E takeLast() throws java.lang.InterruptedException;
@@ -65856,7 +66301,6 @@
     method public void put(E) throws java.lang.InterruptedException;
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
   }
 
@@ -65876,7 +66320,6 @@
     method public void put(E);
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
     method public void transfer(E) throws java.lang.InterruptedException;
     method public boolean tryTransfer(E);
@@ -65924,7 +66367,6 @@
     method public void put(E);
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
   }
 
@@ -66028,7 +66470,6 @@
     method public void put(E) throws java.lang.InterruptedException;
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
   }
 
@@ -66040,9 +66481,11 @@
     method public static java.util.concurrent.ThreadLocalRandom current();
     method public double nextDouble(double);
     method public double nextDouble(double, double);
+    method public double nextGaussian();
     method public int nextInt(int, int);
     method public long nextLong(long);
     method public long nextLong(long, long);
+    method public void setSeed(long);
   }
 
   public class ThreadPoolExecutor extends java.util.concurrent.AbstractExecutorService {
@@ -66056,6 +66499,7 @@
     method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
     method protected void beforeExecute(java.lang.Thread, java.lang.Runnable);
     method public void execute(java.lang.Runnable);
+    method protected void finalize();
     method public int getActiveCount();
     method public long getCompletedTaskCount();
     method public int getCorePoolSize();
@@ -66926,8 +67370,11 @@
     ctor public JarFile(java.io.File) throws java.io.IOException;
     ctor public JarFile(java.io.File, boolean) throws java.io.IOException;
     ctor public JarFile(java.io.File, boolean, int) throws java.io.IOException;
+    method public java.util.Enumeration<java.util.jar.JarEntry> entries();
+    method public synchronized java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
     method public java.util.jar.JarEntry getJarEntry(java.lang.String);
     method public java.util.jar.Manifest getManifest() throws java.io.IOException;
+    method public java.util.stream.Stream<java.util.jar.JarEntry> stream();
     field public static final java.lang.String MANIFEST_NAME = "META-INF/MANIFEST.MF";
   }
 
@@ -67007,6 +67454,8 @@
 
   public class ConsoleHandler extends java.util.logging.StreamHandler {
     ctor public ConsoleHandler();
+    method public void close();
+    method public void publish(java.util.logging.LogRecord);
   }
 
   public class ErrorManager {
@@ -67796,6 +68245,7 @@
     method public int deflate(byte[]);
     method public int deflate(byte[], int, int, int);
     method public void end();
+    method protected void finalize();
     method public void finish();
     method public boolean finished();
     method public int getAdler();
@@ -67828,6 +68278,8 @@
     ctor public DeflaterInputStream(java.io.InputStream);
     ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater);
     ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater, int);
+    method public void mark(int);
+    method public void reset() throws java.io.IOException;
     field protected final byte[] buf;
     field protected final java.util.zip.Deflater def;
   }
@@ -67858,6 +68310,7 @@
     ctor public GZIPOutputStream(java.io.OutputStream, int, boolean) throws java.io.IOException;
     ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException;
     ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException;
+    method public synchronized void write(byte[], int, int) throws java.io.IOException;
     field protected java.util.zip.CRC32 crc;
   }
 
@@ -67865,6 +68318,7 @@
     ctor public Inflater(boolean);
     ctor public Inflater();
     method public void end();
+    method protected void finalize();
     method public boolean finished();
     method public int getAdler();
     method public long getBytesRead();
@@ -67991,6 +68445,7 @@
     ctor public ZipFile(java.io.File, java.nio.charset.Charset) throws java.io.IOException;
     method public void close() throws java.io.IOException;
     method public java.util.Enumeration<? extends java.util.zip.ZipEntry> entries();
+    method protected void finalize() throws java.io.IOException;
     method public java.lang.String getComment();
     method public java.util.zip.ZipEntry getEntry(java.lang.String);
     method public java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
@@ -68097,6 +68552,7 @@
     method public void setComment(java.lang.String);
     method public void setLevel(int);
     method public void setMethod(int);
+    method public synchronized void write(byte[], int, int) throws java.io.IOException;
     field public static final int CENATT = 36; // 0x24
     field public static final int CENATX = 38; // 0x26
     field public static final int CENCOM = 32; // 0x20
@@ -68253,6 +68709,7 @@
 
   public class ExemptionMechanism {
     ctor protected ExemptionMechanism(javax.crypto.ExemptionMechanismSpi, java.security.Provider, java.lang.String);
+    method protected void finalize();
     method public final byte[] genExemptionBlob() throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException;
     method public final int genExemptionBlob(byte[]) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
     method public final int genExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
@@ -70641,6 +71098,7 @@
     ctor public TransformerException(java.lang.String, java.lang.Throwable);
     ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator);
     ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator, java.lang.Throwable);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getException();
     method public java.lang.String getLocationAsString();
     method public javax.xml.transform.SourceLocator getLocator();
@@ -70911,6 +71369,7 @@
   public class XPathException extends java.lang.Exception {
     ctor public XPathException(java.lang.String);
     ctor public XPathException(java.lang.Throwable);
+    method public java.lang.Throwable getCause();
   }
 
   public abstract interface XPathExpression {
@@ -71339,6 +71798,8 @@
 
   public class JSONException extends java.lang.Exception {
     ctor public JSONException(java.lang.String);
+    ctor public JSONException(java.lang.String, java.lang.Throwable);
+    ctor public JSONException(java.lang.Throwable);
   }
 
   public class JSONObject {
diff --git a/api/removed.txt b/api/removed.txt
index 49b72e15..6c37a8f 100644
--- a/api/removed.txt
+++ b/api/removed.txt
@@ -15,6 +15,7 @@
 
   public class Notification implements android.os.Parcelable {
     method public deprecated java.lang.String getChannel();
+    method public static java.lang.Class<? extends android.app.Notification.Style> getNotificationStyleClass(java.lang.String);
     method public deprecated long getTimeout();
     method public deprecated void setLatestEventInfo(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, android.app.PendingIntent);
   }
@@ -24,30 +25,9 @@
     method public deprecated android.app.Notification.Builder setTimeout(long);
   }
 
-  public static final class Notification.TvExtender implements android.app.Notification.Extender {
-    method public deprecated java.lang.String getChannel();
-  }
-
   public final deprecated class PictureInPictureArgs implements android.os.Parcelable {
-    ctor public deprecated PictureInPictureArgs();
-    ctor public deprecated PictureInPictureArgs(float, java.util.List<android.app.RemoteAction>);
     method public static android.app.PictureInPictureArgs convert(android.app.PictureInPictureParams);
     method public static android.app.PictureInPictureParams convert(android.app.PictureInPictureArgs);
-    method public void copyOnlySet(android.app.PictureInPictureArgs);
-    method public java.util.List<android.app.RemoteAction> getActions();
-    method public float getAspectRatio();
-    method public android.util.Rational getAspectRatioRational();
-    method public android.graphics.Rect getSourceRectHint();
-    method public android.graphics.Rect getSourceRectHintInsets();
-    method public boolean hasSetActions();
-    method public boolean hasSetAspectRatio();
-    method public boolean hasSourceBoundsHint();
-    method public boolean hasSourceBoundsHintInsets();
-    method public deprecated void setActions(java.util.List<android.app.RemoteAction>);
-    method public deprecated void setAspectRatio(float);
-    method public deprecated void setSourceRectHint(android.graphics.Rect);
-    method public deprecated void setSourceRectHintInsets(android.graphics.Rect);
-    method public void truncateActions(int);
     field public static final android.os.Parcelable.Creator<android.app.PictureInPictureArgs> CREATOR;
   }
 
@@ -59,10 +39,6 @@
     method public android.app.PictureInPictureArgs.Builder setSourceRectHint(android.graphics.Rect);
   }
 
-  public final class RecoverableSecurityException extends java.lang.SecurityException implements android.os.Parcelable {
-    method public deprecated void showAsNotification(android.content.Context);
-  }
-
 }
 
 package android.app.admin {
@@ -70,8 +46,6 @@
   public class DevicePolicyManager {
     method public deprecated android.os.UserHandle createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle);
     method public deprecated android.os.UserHandle createUser(android.content.ComponentName, java.lang.String);
-    method public deprecated java.lang.String getDeviceInitializerApp();
-    method public deprecated android.content.ComponentName getDeviceInitializerComponent();
   }
 
 }
@@ -272,10 +246,6 @@
     ctor public BatteryManager();
   }
 
-  public class Build {
-    field public static final boolean PERMISSIONS_REVIEW_REQUIRED;
-  }
-
   public final class PowerManager {
     method public void goToSleep(long);
     method public deprecated void userActivity(long, boolean);
@@ -301,18 +271,8 @@
 package android.os.storage {
 
   public class StorageManager {
-    method public deprecated void allocateBytes(java.io.File, long, int) throws java.io.IOException;
-    method public deprecated long getAllocatableBytes(java.io.File, int) throws java.io.IOException;
-    method public deprecated long getCacheQuotaBytes(java.io.File) throws java.io.IOException;
-    method public deprecated long getCacheQuotaBytes() throws java.io.IOException;
-    method public deprecated long getCacheSizeBytes(java.io.File) throws java.io.IOException;
-    method public deprecated long getCacheSizeBytes() throws java.io.IOException;
-    method public deprecated long getExternalCacheQuotaBytes() throws java.io.IOException;
-    method public deprecated long getExternalCacheSizeBytes() throws java.io.IOException;
     method public android.os.storage.StorageVolume getPrimaryVolume();
     method public android.os.storage.StorageVolume[] getVolumeList();
-    method public deprecated boolean isCacheBehaviorAtomic(java.io.File) throws java.io.IOException;
-    method public deprecated void setCacheBehaviorAtomic(java.io.File, boolean) throws java.io.IOException;
   }
 
 }
@@ -356,11 +316,8 @@
     field public static final java.lang.String CREATED = "created";
     field public static final java.lang.String DATE = "date";
     field public static final java.lang.String FAVICON = "favicon";
-    field public static final java.lang.String THUMBNAIL = "thumbnail";
     field public static final java.lang.String TITLE = "title";
-    field public static final java.lang.String TOUCH_ICON = "touch_icon";
     field public static final java.lang.String URL = "url";
-    field public static final java.lang.String USER_ENTERED = "user_entered";
     field public static final java.lang.String VISITS = "visits";
   }
 
diff --git a/api/system-current.txt b/api/system-current.txt
index 35d392d..f17e47f 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -6,12 +6,13 @@
 
   public static final class Manifest.permission {
     ctor public Manifest.permission();
+    field public static final java.lang.String ACCESS_BROADCAST_RADIO = "android.permission.ACCESS_BROADCAST_RADIO";
     field public static final java.lang.String ACCESS_CACHE_FILESYSTEM = "android.permission.ACCESS_CACHE_FILESYSTEM";
     field public static final java.lang.String ACCESS_CHECKIN_PROPERTIES = "android.permission.ACCESS_CHECKIN_PROPERTIES";
     field public static final java.lang.String ACCESS_COARSE_LOCATION = "android.permission.ACCESS_COARSE_LOCATION";
     field public static final java.lang.String ACCESS_DRM_CERTIFICATES = "android.permission.ACCESS_DRM_CERTIFICATES";
     field public static final java.lang.String ACCESS_FINE_LOCATION = "android.permission.ACCESS_FINE_LOCATION";
-    field public static final java.lang.String ACCESS_FM_RADIO = "android.permission.ACCESS_FM_RADIO";
+    field public static final deprecated java.lang.String ACCESS_FM_RADIO = "android.permission.ACCESS_FM_RADIO";
     field public static final java.lang.String ACCESS_LOCATION_EXTRA_COMMANDS = "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS";
     field public static final java.lang.String ACCESS_MOCK_LOCATION = "android.permission.ACCESS_MOCK_LOCATION";
     field public static final java.lang.String ACCESS_MTP = "android.permission.ACCESS_MTP";
@@ -22,6 +23,7 @@
     field public static final java.lang.String ACCESS_SURFACE_FLINGER = "android.permission.ACCESS_SURFACE_FLINGER";
     field public static final java.lang.String ACCESS_WIFI_STATE = "android.permission.ACCESS_WIFI_STATE";
     field public static final java.lang.String ACCOUNT_MANAGER = "android.permission.ACCOUNT_MANAGER";
+    field public static final java.lang.String ACTIVITY_EMBEDDING = "android.permission.ACTIVITY_EMBEDDING";
     field public static final java.lang.String ADD_VOICEMAIL = "com.android.voicemail.permission.ADD_VOICEMAIL";
     field public static final java.lang.String ALLOCATE_AGGRESSIVE = "android.permission.ALLOCATE_AGGRESSIVE";
     field public static final java.lang.String ALLOW_ANY_CODEC_FOR_PLAYBACK = "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK";
@@ -147,6 +149,7 @@
     field public static final java.lang.String MANAGE_DEVICE_ADMINS = "android.permission.MANAGE_DEVICE_ADMINS";
     field public static final java.lang.String MANAGE_DOCUMENTS = "android.permission.MANAGE_DOCUMENTS";
     field public static final java.lang.String MANAGE_OWN_CALLS = "android.permission.MANAGE_OWN_CALLS";
+    field public static final java.lang.String MANAGE_SUBSCRIPTION_PLANS = "android.permission.MANAGE_SUBSCRIPTION_PLANS";
     field public static final java.lang.String MANAGE_USB = "android.permission.MANAGE_USB";
     field public static final java.lang.String MANAGE_USERS = "android.permission.MANAGE_USERS";
     field public static final java.lang.String MANAGE_USER_OEM_UNLOCK_STATE = "android.permission.MANAGE_USER_OEM_UNLOCK_STATE";
@@ -157,7 +160,7 @@
     field public static final java.lang.String MODIFY_AUDIO_SETTINGS = "android.permission.MODIFY_AUDIO_SETTINGS";
     field public static final java.lang.String MODIFY_CELL_BROADCASTS = "android.permission.MODIFY_CELL_BROADCASTS";
     field public static final java.lang.String MODIFY_DAY_NIGHT_MODE = "android.permission.MODIFY_DAY_NIGHT_MODE";
-    field public static final java.lang.String MODIFY_NETWORK_ACCOUNTING = "android.permission.MODIFY_NETWORK_ACCOUNTING";
+    field public static final deprecated java.lang.String MODIFY_NETWORK_ACCOUNTING = "android.permission.MODIFY_NETWORK_ACCOUNTING";
     field public static final java.lang.String MODIFY_PARENTAL_CONTROLS = "android.permission.MODIFY_PARENTAL_CONTROLS";
     field public static final java.lang.String MODIFY_PHONE_STATE = "android.permission.MODIFY_PHONE_STATE";
     field public static final java.lang.String MOUNT_FORMAT_FILESYSTEMS = "android.permission.MOUNT_FORMAT_FILESYSTEMS";
@@ -179,6 +182,7 @@
     field public static final java.lang.String READ_CALENDAR = "android.permission.READ_CALENDAR";
     field public static final java.lang.String READ_CALL_LOG = "android.permission.READ_CALL_LOG";
     field public static final java.lang.String READ_CONTACTS = "android.permission.READ_CONTACTS";
+    field public static final java.lang.String READ_CONTENT_RATING_SYSTEMS = "android.permission.READ_CONTENT_RATING_SYSTEMS";
     field public static final java.lang.String READ_DREAM_STATE = "android.permission.READ_DREAM_STATE";
     field public static final java.lang.String READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE";
     field public static final java.lang.String READ_FRAME_BUFFER = "android.permission.READ_FRAME_BUFFER";
@@ -189,12 +193,15 @@
     field public static final java.lang.String READ_OEM_UNLOCK_STATE = "android.permission.READ_OEM_UNLOCK_STATE";
     field public static final java.lang.String READ_PHONE_NUMBERS = "android.permission.READ_PHONE_NUMBERS";
     field public static final java.lang.String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE";
+    field public static final java.lang.String READ_PRINT_SERVICES = "android.permission.READ_PRINT_SERVICES";
+    field public static final java.lang.String READ_PRINT_SERVICE_RECOMMENDATIONS = "android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS";
     field public static final java.lang.String READ_PRIVILEGED_PHONE_STATE = "android.permission.READ_PRIVILEGED_PHONE_STATE";
     field public static final java.lang.String READ_SEARCH_INDEXABLES = "android.permission.READ_SEARCH_INDEXABLES";
     field public static final java.lang.String READ_SMS = "android.permission.READ_SMS";
     field public static final java.lang.String READ_SYNC_SETTINGS = "android.permission.READ_SYNC_SETTINGS";
     field public static final java.lang.String READ_SYNC_STATS = "android.permission.READ_SYNC_STATS";
     field public static final java.lang.String READ_VOICEMAIL = "com.android.voicemail.permission.READ_VOICEMAIL";
+    field public static final java.lang.String READ_WALLPAPER_INTERNAL = "android.permission.READ_WALLPAPER_INTERNAL";
     field public static final java.lang.String READ_WIFI_CREDENTIAL = "android.permission.READ_WIFI_CREDENTIAL";
     field public static final java.lang.String REAL_GET_TASKS = "android.permission.REAL_GET_TASKS";
     field public static final java.lang.String REBOOT = "android.permission.REBOOT";
@@ -257,6 +264,7 @@
     field public static final java.lang.String UPDATE_APP_OPS_STATS = "android.permission.UPDATE_APP_OPS_STATS";
     field public static final java.lang.String UPDATE_DEVICE_STATS = "android.permission.UPDATE_DEVICE_STATS";
     field public static final java.lang.String UPDATE_LOCK = "android.permission.UPDATE_LOCK";
+    field public static final java.lang.String UPDATE_TIME_ZONE_RULES = "android.permission.UPDATE_TIME_ZONE_RULES";
     field public static final java.lang.String USER_ACTIVITY = "android.permission.USER_ACTIVITY";
     field public static final java.lang.String USE_FINGERPRINT = "android.permission.USE_FINGERPRINT";
     field public static final java.lang.String USE_SIP = "android.permission.USE_SIP";
@@ -510,6 +518,7 @@
     field public static final int childIndicatorRight = 16843024; // 0x1010110
     field public static final int childIndicatorStart = 16843731; // 0x10103d3
     field public static final int choiceMode = 16843051; // 0x101012b
+    field public static final int classLoader = 16844139; // 0x101056b
     field public static final int clearTaskOnLaunch = 16842773; // 0x1010015
     field public static final int clickable = 16842981; // 0x10100e5
     field public static final int clipChildren = 16842986; // 0x10100ea
@@ -1040,6 +1049,7 @@
     field public static final int multiprocess = 16842771; // 0x1010013
     field public static final int name = 16842755; // 0x1010003
     field public static final int navigationBarColor = 16843858; // 0x1010452
+    field public static final int navigationBarDividerColor = 16844141; // 0x101056d
     field public static final int navigationContentDescription = 16843969; // 0x10104c1
     field public static final int navigationIcon = 16843968; // 0x10104c0
     field public static final int navigationMode = 16843471; // 0x10102cf
@@ -1308,6 +1318,7 @@
     field public static final int showSilent = 16843259; // 0x10101fb
     field public static final int showText = 16843949; // 0x10104ad
     field public static final deprecated int showWeekNumber = 16843582; // 0x101033e
+    field public static final int showWhenLocked = 16844137; // 0x1010569
     field public static final deprecated int shownWeekCount = 16843585; // 0x1010341
     field public static final int shrinkColumns = 16843082; // 0x101014a
     field public static final deprecated int singleLine = 16843101; // 0x101015d
@@ -1566,6 +1577,7 @@
     field public static final int trimPathOffset = 16843786; // 0x101040a
     field public static final int trimPathStart = 16843784; // 0x1010408
     field public static final int tunerCount = 16844061; // 0x101051d
+    field public static final int turnScreenOn = 16844138; // 0x101056a
     field public static final int type = 16843169; // 0x10101a1
     field public static final int typeface = 16842902; // 0x1010096
     field public static final int uiOptions = 16843672; // 0x1010398
@@ -1649,6 +1661,8 @@
     field public static final int windowHideAnimation = 16842935; // 0x10100b7
     field public static final int windowIsFloating = 16842839; // 0x1010057
     field public static final int windowIsTranslucent = 16842840; // 0x1010058
+    field public static final int windowLayoutInDisplayCutoutMode = 16844166; // 0x1010586
+    field public static final int windowLightNavigationBar = 16844140; // 0x101056c
     field public static final int windowLightStatusBar = 16844000; // 0x10104e0
     field public static final int windowMinWidthMajor = 16843606; // 0x1010356
     field public static final int windowMinWidthMinor = 16843607; // 0x1010357
@@ -2065,6 +2079,7 @@
     field public static final int VideoView_error_text_invalid_progressive_playback = 17039381; // 0x1040015
     field public static final int VideoView_error_text_unknown = 17039377; // 0x1040011
     field public static final int VideoView_error_title = 17039378; // 0x1040012
+    field public static final int autofill = 17039386; // 0x104001a
     field public static final int cancel = 17039360; // 0x1040000
     field public static final int copy = 17039361; // 0x1040001
     field public static final int copyUrl = 17039362; // 0x1040002
@@ -3294,6 +3309,7 @@
 
   public final class AnimatorSet extends android.animation.Animator {
     ctor public AnimatorSet();
+    method public android.animation.AnimatorSet clone();
     method public java.util.ArrayList<android.animation.Animator> getChildAnimations();
     method public long getCurrentPlayTime();
     method public long getDuration();
@@ -3412,6 +3428,7 @@
 
   public final class ObjectAnimator extends android.animation.ValueAnimator {
     ctor public ObjectAnimator();
+    method public android.animation.ObjectAnimator clone();
     method public java.lang.String getPropertyName();
     method public java.lang.Object getTarget();
     method public static android.animation.ObjectAnimator ofArgb(java.lang.Object, java.lang.String, int...);
@@ -3437,6 +3454,7 @@
     method public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofPropertyValuesHolder(java.lang.Object, android.animation.PropertyValuesHolder...);
     method public void setAutoCancel(boolean);
+    method public android.animation.ObjectAnimator setDuration(long);
     method public void setProperty(android.util.Property);
     method public void setPropertyName(java.lang.String);
   }
@@ -3518,6 +3536,7 @@
     ctor public ValueAnimator();
     method public void addUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener);
     method public static boolean areAnimatorsEnabled();
+    method public android.animation.ValueAnimator clone();
     method public float getAnimatedFraction();
     method public java.lang.Object getAnimatedValue();
     method public java.lang.Object getAnimatedValue(java.lang.String);
@@ -3896,10 +3915,12 @@
     method public final void setResult(int);
     method public final void setResult(int, android.content.Intent);
     method public final deprecated void setSecondaryProgress(int);
+    method public void setShowWhenLocked(boolean);
     method public void setTaskDescription(android.app.ActivityManager.TaskDescription);
     method public void setTitle(java.lang.CharSequence);
     method public void setTitle(int);
     method public deprecated void setTitleColor(int);
+    method public void setTurnScreenOn(boolean);
     method public void setVisible(boolean);
     method public final void setVolumeControlStream(int);
     method public void setVrModeEnabled(boolean, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
@@ -4701,14 +4722,6 @@
     field public static final int VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION = 3; // 0x3
   }
 
-  public abstract deprecated class EphemeralResolverService extends android.app.InstantAppResolverService {
-    ctor public EphemeralResolverService();
-    method public android.os.Looper getLooper();
-    method public abstract deprecated java.util.List<android.content.pm.EphemeralResolveInfo> onEphemeralResolveInfoList(int[], int);
-    method public android.content.pm.EphemeralResolveInfo onGetEphemeralIntentFilter(java.lang.String);
-    method public java.util.List<android.content.pm.EphemeralResolveInfo> onGetEphemeralResolveInfo(int[]);
-  }
-
   public class ExpandableListActivity extends android.app.Activity implements android.widget.ExpandableListView.OnChildClickListener android.widget.ExpandableListView.OnGroupCollapseListener android.widget.ExpandableListView.OnGroupExpandListener android.view.View.OnCreateContextMenuListener {
     ctor public ExpandableListActivity();
     method public android.widget.ExpandableListAdapter getExpandableListAdapter();
@@ -5142,6 +5155,7 @@
     ctor public IntentService(java.lang.String);
     method public android.os.IBinder onBind(android.content.Intent);
     method protected abstract void onHandleIntent(android.content.Intent);
+    method public void onStart(android.content.Intent, int);
     method public void setIntentRedelivery(boolean);
   }
 
@@ -5299,7 +5313,6 @@
     method public java.lang.String getGroup();
     method public int getGroupAlertBehavior();
     method public android.graphics.drawable.Icon getLargeIcon();
-    method public static java.lang.Class<? extends android.app.Notification.Style> getNotificationStyleClass(java.lang.String);
     method public java.lang.CharSequence getSettingsText();
     method public java.lang.String getShortcutId();
     method public android.graphics.drawable.Icon getSmallIcon();
@@ -5799,6 +5812,7 @@
     method public java.util.List<android.app.NotificationChannelGroup> getNotificationChannelGroups();
     method public java.util.List<android.app.NotificationChannel> getNotificationChannels();
     method public android.app.NotificationManager.Policy getNotificationPolicy();
+    method public boolean isNotificationListenerAccessGranted(android.content.ComponentName);
     method public boolean isNotificationPolicyAccessGranted();
     method public void notify(int, android.app.Notification);
     method public void notify(java.lang.String, int, android.app.Notification);
@@ -6295,6 +6309,7 @@
   }
 
   public class VrManager {
+    method public void setAndBindVrCompositor(android.content.ComponentName);
     method public void setPersistentVrModeEnabled(boolean);
   }
 
@@ -6333,7 +6348,6 @@
   }
 
   public class WallpaperManager {
-    method public void addOnColorsChangedListener(android.app.WallpaperManager.OnColorsChangedListener);
     method public void addOnColorsChangedListener(android.app.WallpaperManager.OnColorsChangedListener, android.os.Handler);
     method public void clear() throws java.io.IOException;
     method public void clear(int) throws java.io.IOException;
@@ -6514,8 +6528,6 @@
     method public int getCurrentFailedPasswordAttempts();
     method public java.util.List<java.lang.String> getDelegatePackages(android.content.ComponentName, java.lang.String);
     method public java.util.List<java.lang.String> getDelegatedScopes(android.content.ComponentName, java.lang.String);
-    method public deprecated java.lang.String getDeviceInitializerApp();
-    method public deprecated android.content.ComponentName getDeviceInitializerComponent();
     method public java.lang.String getDeviceOwner();
     method public android.content.ComponentName getDeviceOwnerComponentOnAnyUser();
     method public java.lang.CharSequence getDeviceOwnerLockScreenInfo();
@@ -6682,6 +6694,7 @@
     field public static final java.lang.String ACTION_SET_NEW_PASSWORD = "android.app.action.SET_NEW_PASSWORD";
     field public static final java.lang.String ACTION_SET_PROFILE_OWNER = "android.app.action.SET_PROFILE_OWNER";
     field public static final java.lang.String ACTION_START_ENCRYPTION = "android.app.action.START_ENCRYPTION";
+    field public static final java.lang.String ACTION_STATE_USER_SETUP_COMPLETE = "android.app.action.STATE_USER_SETUP_COMPLETE";
     field public static final java.lang.String ACTION_SYSTEM_UPDATE_POLICY_CHANGED = "android.app.action.SYSTEM_UPDATE_POLICY_CHANGED";
     field public static final java.lang.String DELEGATION_APP_RESTRICTIONS = "delegation-app-restrictions";
     field public static final java.lang.String DELEGATION_BLOCK_UNINSTALL = "delegation-block-uninstall";
@@ -9859,7 +9872,6 @@
     field public static final java.lang.String ACTION_DATE_CHANGED = "android.intent.action.DATE_CHANGED";
     field public static final java.lang.String ACTION_DEFAULT = "android.intent.action.VIEW";
     field public static final java.lang.String ACTION_DELETE = "android.intent.action.DELETE";
-    field public static final deprecated java.lang.String ACTION_DEVICE_INITIALIZATION_WIZARD = "android.intent.action.DEVICE_INITIALIZATION_WIZARD";
     field public static final deprecated java.lang.String ACTION_DEVICE_STORAGE_LOW = "android.intent.action.DEVICE_STORAGE_LOW";
     field public static final deprecated java.lang.String ACTION_DEVICE_STORAGE_OK = "android.intent.action.DEVICE_STORAGE_OK";
     field public static final java.lang.String ACTION_DIAL = "android.intent.action.DIAL";
@@ -9867,7 +9879,6 @@
     field public static final java.lang.String ACTION_DREAMING_STARTED = "android.intent.action.DREAMING_STARTED";
     field public static final java.lang.String ACTION_DREAMING_STOPPED = "android.intent.action.DREAMING_STOPPED";
     field public static final java.lang.String ACTION_EDIT = "android.intent.action.EDIT";
-    field public static final deprecated java.lang.String ACTION_EPHEMERAL_RESOLVER_SETTINGS = "android.intent.action.EPHEMERAL_RESOLVER_SETTINGS";
     field public static final java.lang.String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE";
     field public static final java.lang.String ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE";
     field public static final java.lang.String ACTION_FACTORY_RESET = "android.intent.action.FACTORY_RESET";
@@ -9881,7 +9892,7 @@
     field public static final java.lang.String ACTION_INPUT_METHOD_CHANGED = "android.intent.action.INPUT_METHOD_CHANGED";
     field public static final java.lang.String ACTION_INSERT = "android.intent.action.INSERT";
     field public static final java.lang.String ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT";
-    field public static final deprecated java.lang.String ACTION_INSTALL_EPHEMERAL_PACKAGE = "android.intent.action.INSTALL_EPHEMERAL_PACKAGE";
+    field public static final java.lang.String ACTION_INSTALL_FAILURE = "android.intent.action.INSTALL_FAILURE";
     field public static final java.lang.String ACTION_INSTALL_INSTANT_APP_PACKAGE = "android.intent.action.INSTALL_INSTANT_APP_PACKAGE";
     field public static final java.lang.String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE";
     field public static final java.lang.String ACTION_INSTANT_APP_RESOLVER_SETTINGS = "android.intent.action.INSTANT_APP_RESOLVER_SETTINGS";
@@ -9899,7 +9910,6 @@
     field public static final java.lang.String ACTION_MANAGE_PACKAGE_STORAGE = "android.intent.action.MANAGE_PACKAGE_STORAGE";
     field public static final java.lang.String ACTION_MANAGE_PERMISSIONS = "android.intent.action.MANAGE_PERMISSIONS";
     field public static final java.lang.String ACTION_MANAGE_PERMISSION_APPS = "android.intent.action.MANAGE_PERMISSION_APPS";
-    field public static final deprecated java.lang.String ACTION_MASTER_CLEAR = "android.intent.action.MASTER_CLEAR";
     field public static final java.lang.String ACTION_MASTER_CLEAR_NOTIFICATION = "android.intent.action.MASTER_CLEAR_NOTIFICATION";
     field public static final java.lang.String ACTION_MEDIA_BAD_REMOVAL = "android.intent.action.MEDIA_BAD_REMOVAL";
     field public static final java.lang.String ACTION_MEDIA_BUTTON = "android.intent.action.MEDIA_BUTTON";
@@ -9944,7 +9954,6 @@
     field public static final java.lang.String ACTION_QUICK_CLOCK = "android.intent.action.QUICK_CLOCK";
     field public static final java.lang.String ACTION_QUICK_VIEW = "android.intent.action.QUICK_VIEW";
     field public static final java.lang.String ACTION_REBOOT = "android.intent.action.REBOOT";
-    field public static final deprecated java.lang.String ACTION_RESOLVE_EPHEMERAL_PACKAGE = "android.intent.action.RESOLVE_EPHEMERAL_PACKAGE";
     field public static final java.lang.String ACTION_RESOLVE_INSTANT_APP_PACKAGE = "android.intent.action.RESOLVE_INSTANT_APP_PACKAGE";
     field public static final java.lang.String ACTION_REVIEW_PERMISSIONS = "android.intent.action.REVIEW_PERMISSIONS";
     field public static final java.lang.String ACTION_RUN = "android.intent.action.RUN";
@@ -9955,7 +9964,6 @@
     field public static final java.lang.String ACTION_SEND = "android.intent.action.SEND";
     field public static final java.lang.String ACTION_SENDTO = "android.intent.action.SENDTO";
     field public static final java.lang.String ACTION_SEND_MULTIPLE = "android.intent.action.SEND_MULTIPLE";
-    field public static final deprecated java.lang.String ACTION_SERVICE_STATE = "android.intent.action.SERVICE_STATE";
     field public static final java.lang.String ACTION_SET_WALLPAPER = "android.intent.action.SET_WALLPAPER";
     field public static final java.lang.String ACTION_SHOW_APP_INFO = "android.intent.action.SHOW_APP_INFO";
     field public static final java.lang.String ACTION_SHUTDOWN = "android.intent.action.ACTION_SHUTDOWN";
@@ -10031,8 +10039,6 @@
     field public static final java.lang.String EXTRA_BCC = "android.intent.extra.BCC";
     field public static final java.lang.String EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT";
     field public static final java.lang.String EXTRA_CC = "android.intent.extra.CC";
-    field public static final deprecated java.lang.String EXTRA_CDMA_DEFAULT_ROAMING_INDICATOR = "cdmaDefaultRoamingIndicator";
-    field public static final deprecated java.lang.String EXTRA_CDMA_ROAMING_INDICATOR = "cdmaRoamingIndicator";
     field public static final deprecated java.lang.String EXTRA_CHANGED_COMPONENT_NAME = "android.intent.extra.changed_component_name";
     field public static final java.lang.String EXTRA_CHANGED_COMPONENT_NAME_LIST = "android.intent.extra.changed_component_name_list";
     field public static final java.lang.String EXTRA_CHANGED_PACKAGE_LIST = "android.intent.extra.changed_package_list";
@@ -10043,14 +10049,7 @@
     field public static final java.lang.String EXTRA_CHOSEN_COMPONENT_INTENT_SENDER = "android.intent.extra.CHOSEN_COMPONENT_INTENT_SENDER";
     field public static final java.lang.String EXTRA_COMPONENT_NAME = "android.intent.extra.COMPONENT_NAME";
     field public static final java.lang.String EXTRA_CONTENT_ANNOTATIONS = "android.intent.extra.CONTENT_ANNOTATIONS";
-    field public static final deprecated java.lang.String EXTRA_CSS_INDICATOR = "cssIndicator";
-    field public static final deprecated java.lang.String EXTRA_DATA_OPERATOR_ALPHA_LONG = "data-operator-alpha-long";
-    field public static final deprecated java.lang.String EXTRA_DATA_OPERATOR_ALPHA_SHORT = "data-operator-alpha-short";
-    field public static final deprecated java.lang.String EXTRA_DATA_OPERATOR_NUMERIC = "data-operator-numeric";
-    field public static final deprecated java.lang.String EXTRA_DATA_RADIO_TECH = "dataRadioTechnology";
-    field public static final deprecated java.lang.String EXTRA_DATA_REG_STATE = "dataRegState";
     field public static final java.lang.String EXTRA_DATA_REMOVED = "android.intent.extra.DATA_REMOVED";
-    field public static final deprecated java.lang.String EXTRA_DATA_ROAMING_TYPE = "dataRoamingType";
     field public static final java.lang.String EXTRA_DOCK_STATE = "android.intent.extra.DOCK_STATE";
     field public static final int EXTRA_DOCK_STATE_CAR = 2; // 0x2
     field public static final int EXTRA_DOCK_STATE_DESK = 1; // 0x1
@@ -10059,7 +10058,6 @@
     field public static final int EXTRA_DOCK_STATE_UNDOCKED = 0; // 0x0
     field public static final java.lang.String EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP";
     field public static final java.lang.String EXTRA_EMAIL = "android.intent.extra.EMAIL";
-    field public static final deprecated java.lang.String EXTRA_EMERGENCY_ONLY = "emergencyOnly";
     field public static final java.lang.String EXTRA_EXCLUDE_COMPONENTS = "android.intent.extra.EXCLUDE_COMPONENTS";
     field public static final java.lang.String EXTRA_FORCE_FACTORY_RESET = "android.intent.extra.FORCE_FACTORY_RESET";
     field public static final java.lang.String EXTRA_FROM_STORAGE = "android.intent.extra.FROM_STORAGE";
@@ -10068,18 +10066,10 @@
     field public static final java.lang.String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS";
     field public static final java.lang.String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME";
     field public static final java.lang.String EXTRA_INTENT = "android.intent.extra.INTENT";
-    field public static final deprecated java.lang.String EXTRA_IS_DATA_ROAMING_FROM_REGISTRATION = "isDataRoamingFromRegistration";
-    field public static final deprecated java.lang.String EXTRA_IS_USING_CARRIER_AGGREGATION = "isUsingCarrierAggregation";
     field public static final java.lang.String EXTRA_KEY_EVENT = "android.intent.extra.KEY_EVENT";
     field public static final java.lang.String EXTRA_LOCAL_ONLY = "android.intent.extra.LOCAL_ONLY";
-    field public static final deprecated java.lang.String EXTRA_LTE_EARFCN_RSRP_BOOST = "LteEarfcnRsrpBoost";
-    field public static final deprecated java.lang.String EXTRA_MANUAL = "manual";
     field public static final java.lang.String EXTRA_MIME_TYPES = "android.intent.extra.MIME_TYPES";
-    field public static final deprecated java.lang.String EXTRA_NETWORK_ID = "networkId";
     field public static final java.lang.String EXTRA_NOT_UNKNOWN_SOURCE = "android.intent.extra.NOT_UNKNOWN_SOURCE";
-    field public static final deprecated java.lang.String EXTRA_OPERATOR_ALPHA_LONG = "operator-alpha-long";
-    field public static final deprecated java.lang.String EXTRA_OPERATOR_ALPHA_SHORT = "operator-alpha-short";
-    field public static final deprecated java.lang.String EXTRA_OPERATOR_NUMERIC = "operator-numeric";
     field public static final java.lang.String EXTRA_ORIGINATING_UID = "android.intent.extra.ORIGINATING_UID";
     field public static final java.lang.String EXTRA_ORIGINATING_URI = "android.intent.extra.ORIGINATING_URI";
     field public static final java.lang.String EXTRA_PACKAGES = "android.intent.extra.PACKAGES";
@@ -10110,15 +10100,11 @@
     field public static final java.lang.String EXTRA_SPLIT_NAME = "android.intent.extra.SPLIT_NAME";
     field public static final java.lang.String EXTRA_STREAM = "android.intent.extra.STREAM";
     field public static final java.lang.String EXTRA_SUBJECT = "android.intent.extra.SUBJECT";
-    field public static final deprecated java.lang.String EXTRA_SYSTEM_ID = "systemId";
     field public static final java.lang.String EXTRA_TEMPLATE = "android.intent.extra.TEMPLATE";
     field public static final java.lang.String EXTRA_TEXT = "android.intent.extra.TEXT";
     field public static final java.lang.String EXTRA_TITLE = "android.intent.extra.TITLE";
     field public static final java.lang.String EXTRA_UID = "android.intent.extra.UID";
     field public static final java.lang.String EXTRA_USER = "android.intent.extra.USER";
-    field public static final deprecated java.lang.String EXTRA_VOICE_RADIO_TECH = "radioTechnology";
-    field public static final deprecated java.lang.String EXTRA_VOICE_REG_STATE = "voiceRegState";
-    field public static final deprecated java.lang.String EXTRA_VOICE_ROAMING_TYPE = "voiceRoamingType";
     field public static final int FILL_IN_ACTION = 1; // 0x1
     field public static final int FILL_IN_CATEGORIES = 4; // 0x4
     field public static final int FILL_IN_CLIP_DATA = 128; // 0x80
@@ -10734,6 +10720,7 @@
     method public int describeContents();
     method public void dump(android.util.Printer, java.lang.String);
     method public static java.lang.CharSequence getCategoryTitle(android.content.Context, int);
+    method public boolean isVirtualPreload();
     method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager);
     field public static final int CATEGORY_AUDIO = 1; // 0x1
     field public static final int CATEGORY_GAME = 0; // 0x0
@@ -10856,41 +10843,6 @@
     field public int reqTouchScreen;
   }
 
-  public final deprecated class EphemeralIntentFilter implements android.os.Parcelable {
-    ctor public EphemeralIntentFilter(java.lang.String, java.util.List<android.content.IntentFilter>);
-    method public int describeContents();
-    method public java.util.List<android.content.IntentFilter> getFilters();
-    method public java.lang.String getSplitName();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<android.content.pm.EphemeralIntentFilter> CREATOR;
-  }
-
-  public final deprecated class EphemeralResolveInfo implements android.os.Parcelable {
-    ctor public deprecated EphemeralResolveInfo(android.net.Uri, java.lang.String, java.util.List<android.content.IntentFilter>);
-    ctor public deprecated EphemeralResolveInfo(android.content.pm.EphemeralResolveInfo.EphemeralDigest, java.lang.String, java.util.List<android.content.pm.EphemeralIntentFilter>);
-    ctor public EphemeralResolveInfo(android.content.pm.EphemeralResolveInfo.EphemeralDigest, java.lang.String, java.util.List<android.content.pm.EphemeralIntentFilter>, int);
-    ctor public EphemeralResolveInfo(java.lang.String, java.lang.String, java.util.List<android.content.pm.EphemeralIntentFilter>);
-    method public int describeContents();
-    method public byte[] getDigestBytes();
-    method public int getDigestPrefix();
-    method public deprecated java.util.List<android.content.IntentFilter> getFilters();
-    method public java.util.List<android.content.pm.EphemeralIntentFilter> getIntentFilters();
-    method public java.lang.String getPackageName();
-    method public int getVersionCode();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<android.content.pm.EphemeralResolveInfo> CREATOR;
-    field public static final java.lang.String SHA_ALGORITHM = "SHA-256";
-  }
-
-  public static final class EphemeralResolveInfo.EphemeralDigest implements android.os.Parcelable {
-    ctor public EphemeralResolveInfo.EphemeralDigest(java.lang.String);
-    method public int describeContents();
-    method public byte[][] getDigestBytes();
-    method public int[] getDigestPrefix();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<android.content.pm.EphemeralResolveInfo.EphemeralDigest> CREATOR;
-  }
-
   public final class FeatureGroupInfo implements android.os.Parcelable {
     ctor public FeatureGroupInfo();
     ctor public FeatureGroupInfo(android.content.pm.FeatureGroupInfo);
@@ -10949,7 +10901,6 @@
     method public int getVersionCode();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.content.pm.InstantAppResolveInfo> CREATOR;
-    field public static final java.lang.String SHA_ALGORITHM = "SHA-256";
   }
 
   public static final class InstantAppResolveInfo.InstantAppDigest implements android.os.Parcelable {
@@ -11154,12 +11105,14 @@
     method public void abandon();
     method public void close();
     method public void commit(android.content.IntentSender);
+    method public void commitTransferred(android.content.IntentSender);
     method public void fsync(java.io.OutputStream) throws java.io.IOException;
     method public java.lang.String[] getNames() throws java.io.IOException;
     method public java.io.InputStream openRead(java.lang.String) throws java.io.IOException;
     method public java.io.OutputStream openWrite(java.lang.String, long, long) throws java.io.IOException;
     method public void removeSplit(java.lang.String) throws java.io.IOException;
     method public void setStagingProgress(float);
+    method public void transfer(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
   }
 
   public static abstract class PackageInstaller.SessionCallback {
@@ -11174,13 +11127,26 @@
   public static class PackageInstaller.SessionInfo implements android.os.Parcelable {
     method public android.content.Intent createDetailsIntent();
     method public int describeContents();
+    method public boolean getAllocateAggressive();
+    method public boolean getAllowDowngrade();
     method public android.graphics.Bitmap getAppIcon();
     method public java.lang.CharSequence getAppLabel();
     method public java.lang.String getAppPackageName();
+    method public boolean getDontKillApp();
+    method public java.lang.String[] getGrantedRuntimePermissions();
+    method public boolean getInstallAsFullApp(boolean);
+    method public boolean getInstallAsInstantApp(boolean);
+    method public boolean getInstallAsVirtualPreload();
+    method public int getInstallLocation();
     method public int getInstallReason();
     method public java.lang.String getInstallerPackageName();
+    method public int getMode();
+    method public int getOriginatingUid();
+    method public android.net.Uri getOriginatingUri();
     method public float getProgress();
+    method public android.net.Uri getReferrerUri();
     method public int getSessionId();
+    method public long getSize();
     method public boolean isActive();
     method public boolean isSealed();
     method public void writeToParcel(android.os.Parcel, int);
@@ -11198,6 +11164,7 @@
     method public void setDontKillApp(boolean);
     method public void setGrantedRuntimePermissions(java.lang.String[]);
     method public void setInstallAsInstantApp(boolean);
+    method public void setInstallAsVirtualPreload();
     method public void setInstallLocation(int);
     method public void setInstallReason(int);
     method public void setOriginatingUid(int);
@@ -11325,6 +11292,8 @@
     method public abstract void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
     method public abstract boolean hasSystemFeature(java.lang.String);
     method public abstract boolean hasSystemFeature(java.lang.String, int);
+    method public abstract int installExistingPackage(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract int installExistingPackage(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
     method public abstract boolean isInstantApp();
     method public abstract boolean isInstantApp(java.lang.String);
     method public abstract boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
@@ -11338,6 +11307,7 @@
     method public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentContentProviders(android.content.Intent, int);
     method public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentServices(android.content.Intent, int);
     method public abstract java.util.List<android.content.pm.PermissionInfo> queryPermissionsByGroup(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract void registerDexModule(java.lang.String, android.content.pm.PackageManager.DexModuleRegisterCallback);
     method public abstract void removeOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener);
     method public abstract deprecated void removePackageFromPreferred(java.lang.String);
     method public abstract void removePermission(java.lang.String);
@@ -11377,6 +11347,7 @@
     field public static final java.lang.String FEATURE_BACKUP = "android.software.backup";
     field public static final java.lang.String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
     field public static final java.lang.String FEATURE_BLUETOOTH_LE = "android.hardware.bluetooth_le";
+    field public static final java.lang.String FEATURE_BROADCAST_RADIO = "android.hardware.broadcastradio";
     field public static final java.lang.String FEATURE_CAMERA = "android.hardware.camera";
     field public static final java.lang.String FEATURE_CAMERA_ANY = "android.hardware.camera.any";
     field public static final java.lang.String FEATURE_CAMERA_AUTOFOCUS = "android.hardware.camera.autofocus";
@@ -11416,8 +11387,11 @@
     field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce";
     field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef";
     field public static final java.lang.String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep";
+    field public static final java.lang.String FEATURE_PC = "android.hardware.type.pc";
     field public static final java.lang.String FEATURE_PICTURE_IN_PICTURE = "android.software.picture_in_picture";
     field public static final java.lang.String FEATURE_PRINTING = "android.software.print";
+    field public static final java.lang.String FEATURE_RAM_LOW = "android.hardware.ram.low";
+    field public static final java.lang.String FEATURE_RAM_NORMAL = "android.hardware.ram.normal";
     field public static final java.lang.String FEATURE_SCREEN_LANDSCAPE = "android.hardware.screen.landscape";
     field public static final java.lang.String FEATURE_SCREEN_PORTRAIT = "android.hardware.screen.portrait";
     field public static final java.lang.String FEATURE_SECURELY_REMOVES_USERS = "android.software.securely_removes_users";
@@ -11458,6 +11432,7 @@
     field public static final java.lang.String FEATURE_WIFI = "android.hardware.wifi";
     field public static final java.lang.String FEATURE_WIFI_AWARE = "android.hardware.wifi.aware";
     field public static final java.lang.String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
+    field public static final java.lang.String FEATURE_WIFI_PASSPOINT = "android.hardware.wifi.passpoint";
     field public static final int FLAG_PERMISSION_GRANTED_BY_DEFAULT = 32; // 0x20
     field public static final int FLAG_PERMISSION_POLICY_FIXED = 4; // 0x4
     field public static final int FLAG_PERMISSION_REVIEW_REQUIRED = 64; // 0x40
@@ -11557,6 +11532,11 @@
     field public static final int VERSION_CODE_HIGHEST = -1; // 0xffffffff
   }
 
+  public static abstract class PackageManager.DexModuleRegisterCallback {
+    ctor public PackageManager.DexModuleRegisterCallback();
+    method public abstract void onDexModuleRegistered(java.lang.String, boolean, java.lang.String);
+  }
+
   public static class PackageManager.NameNotFoundException extends android.util.AndroidException {
     ctor public PackageManager.NameNotFoundException();
     ctor public PackageManager.NameNotFoundException(java.lang.String);
@@ -11620,8 +11600,8 @@
     field public static final int PROTECTION_DANGEROUS = 1; // 0x1
     field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40
     field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20
-    field public static final int PROTECTION_FLAG_EPHEMERAL = 4096; // 0x1000
     field public static final int PROTECTION_FLAG_INSTALLER = 256; // 0x100
+    field public static final int PROTECTION_FLAG_INSTANT = 4096; // 0x1000
     field public static final int PROTECTION_FLAG_PRE23 = 128; // 0x80
     field public static final int PROTECTION_FLAG_PREINSTALLED = 1024; // 0x400
     field public static final int PROTECTION_FLAG_PRIVILEGED = 16; // 0x10
@@ -11842,6 +11822,7 @@
 
   public static class AssetFileDescriptor.AutoCloseInputStream extends android.os.ParcelFileDescriptor.AutoCloseInputStream {
     ctor public AssetFileDescriptor.AutoCloseInputStream(android.content.res.AssetFileDescriptor) throws java.io.IOException;
+    method public void mark(int);
   }
 
   public static class AssetFileDescriptor.AutoCloseOutputStream extends android.os.ParcelFileDescriptor.AutoCloseOutputStream {
@@ -12149,6 +12130,7 @@
     method public void copyStringToBuffer(int, android.database.CharArrayBuffer);
     method public void deactivate();
     method public void fillWindow(int, android.database.CursorWindow);
+    method protected void finalize();
     method public byte[] getBlob(int);
     method public int getColumnCount();
     method public int getColumnIndex(java.lang.String);
@@ -12630,6 +12612,7 @@
     method public void beginTransactionWithListenerNonExclusive(android.database.sqlite.SQLiteTransactionListener);
     method public android.database.sqlite.SQLiteStatement compileStatement(java.lang.String) throws android.database.SQLException;
     method public static android.database.sqlite.SQLiteDatabase create(android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public static android.database.sqlite.SQLiteDatabase createInMemory(android.database.sqlite.SQLiteDatabase.OpenParams);
     method public int delete(java.lang.String, java.lang.String, java.lang.String[]);
     method public static boolean deleteDatabase(java.io.File);
     method public void disableWriteAheadLogging();
@@ -12659,6 +12642,7 @@
     method public boolean needUpgrade(int);
     method protected void onAllReferencesReleased();
     method public static android.database.sqlite.SQLiteDatabase openDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, int);
+    method public static android.database.sqlite.SQLiteDatabase openDatabase(java.io.File, android.database.sqlite.SQLiteDatabase.OpenParams);
     method public static android.database.sqlite.SQLiteDatabase openDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, int, android.database.DatabaseErrorHandler);
     method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.io.File, android.database.sqlite.SQLiteDatabase.CursorFactory);
     method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory);
@@ -12709,6 +12693,28 @@
     method public abstract android.database.Cursor newCursor(android.database.sqlite.SQLiteDatabase, android.database.sqlite.SQLiteCursorDriver, java.lang.String, android.database.sqlite.SQLiteQuery);
   }
 
+  public static final class SQLiteDatabase.OpenParams {
+    method public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory();
+    method public android.database.DatabaseErrorHandler getErrorHandler();
+    method public long getIdleConnectionTimeout();
+    method public int getLookasideSlotCount();
+    method public int getLookasideSlotSize();
+    method public int getOpenFlags();
+  }
+
+  public static final class SQLiteDatabase.OpenParams.Builder {
+    ctor public SQLiteDatabase.OpenParams.Builder();
+    ctor public SQLiteDatabase.OpenParams.Builder(android.database.sqlite.SQLiteDatabase.OpenParams);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder addOpenFlags(int);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams build();
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder removeOpenFlags(int);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setErrorHandler(android.database.DatabaseErrorHandler);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setIdleConnectionTimeout(long);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setLookasideConfig(int, int);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setOpenFlags(int);
+  }
+
   public class SQLiteDatabaseCorruptException extends android.database.sqlite.SQLiteException {
     ctor public SQLiteDatabaseCorruptException();
     ctor public SQLiteDatabaseCorruptException(java.lang.String);
@@ -12762,6 +12768,8 @@
     method public void onDowngrade(android.database.sqlite.SQLiteDatabase, int, int);
     method public void onOpen(android.database.sqlite.SQLiteDatabase);
     method public abstract void onUpgrade(android.database.sqlite.SQLiteDatabase, int, int);
+    method public void setIdleConnectionTimeout(long);
+    method public void setLookasideConfig(int, int);
     method public void setWriteAheadLoggingEnabled(boolean);
   }
 
@@ -14623,6 +14631,7 @@
     method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setOpacity(int);
     method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
   }
@@ -14703,6 +14712,7 @@
     method public void setAlpha(int);
     method public void setAntiAlias(boolean);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setGravity(int);
     method public void setMipMap(boolean);
     method public void setTargetDensity(android.graphics.Canvas);
@@ -14828,6 +14838,7 @@
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
     method protected void setConstantState(android.graphics.drawable.DrawableContainer.DrawableContainerState);
+    method public void setDither(boolean);
     method public void setEnterFadeDuration(int);
     method public void setExitFadeDuration(int);
     method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
@@ -14894,6 +14905,7 @@
     method public void setColors(int[]);
     method public void setCornerRadii(float[]);
     method public void setCornerRadius(float);
+    method public void setDither(boolean);
     method public void setGradientCenter(float, float);
     method public void setGradientRadius(float);
     method public void setGradientType(int);
@@ -14988,6 +15000,7 @@
     method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setDrawable(int, android.graphics.drawable.Drawable);
     method public boolean setDrawableByLayerId(int, android.graphics.drawable.Drawable);
     method public void setId(int, int);
@@ -15028,6 +15041,7 @@
     method public android.graphics.Paint getPaint();
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setTargetDensity(android.graphics.Canvas);
     method public void setTargetDensity(android.util.DisplayMetrics);
     method public void setTargetDensity(int);
@@ -15090,6 +15104,7 @@
     method protected void onDraw(android.graphics.drawable.shapes.Shape, android.graphics.Canvas, android.graphics.Paint);
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setIntrinsicHeight(int);
     method public void setIntrinsicWidth(int);
     method public void setPadding(int, int, int, int);
@@ -15131,27 +15146,32 @@
 
   public class ArcShape extends android.graphics.drawable.shapes.RectShape {
     ctor public ArcShape(float, float);
+    method public android.graphics.drawable.shapes.ArcShape clone() throws java.lang.CloneNotSupportedException;
     method public final float getStartAngle();
     method public final float getSweepAngle();
   }
 
   public class OvalShape extends android.graphics.drawable.shapes.RectShape {
     ctor public OvalShape();
+    method public android.graphics.drawable.shapes.OvalShape clone() throws java.lang.CloneNotSupportedException;
   }
 
   public class PathShape extends android.graphics.drawable.shapes.Shape {
     ctor public PathShape(android.graphics.Path, float, float);
+    method public android.graphics.drawable.shapes.PathShape clone() throws java.lang.CloneNotSupportedException;
     method public void draw(android.graphics.Canvas, android.graphics.Paint);
   }
 
   public class RectShape extends android.graphics.drawable.shapes.Shape {
     ctor public RectShape();
+    method public android.graphics.drawable.shapes.RectShape clone() throws java.lang.CloneNotSupportedException;
     method public void draw(android.graphics.Canvas, android.graphics.Paint);
     method protected final android.graphics.RectF rect();
   }
 
   public class RoundRectShape extends android.graphics.drawable.shapes.RectShape {
     ctor public RoundRectShape(float[], android.graphics.RectF, float[]);
+    method public android.graphics.drawable.shapes.RoundRectShape clone() throws java.lang.CloneNotSupportedException;
   }
 
   public abstract class Shape implements java.lang.Cloneable {
@@ -15236,6 +15256,7 @@
     method public final void autoFocus(android.hardware.Camera.AutoFocusCallback);
     method public final void cancelAutoFocus();
     method public final boolean enableShutterSound(boolean);
+    method protected void finalize();
     method public static void getCameraInfo(int, android.hardware.Camera.CameraInfo);
     method public static int getNumberOfCameras();
     method public android.hardware.Camera.Parameters getParameters();
@@ -15853,6 +15874,7 @@
     method public <T> T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
     method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableCaptureRequestKeys();
     method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getAvailableCaptureResultKeys();
+    method public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeys();
     field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
     field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
     field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_MODES;
@@ -16213,6 +16235,7 @@
   public final class CaptureRequest extends android.hardware.camera2.CameraMetadata implements android.os.Parcelable {
     method public int describeContents();
     method public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
+    method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getKeys();
     method public java.lang.Object getTag();
     method public boolean isReprocess();
     method public void writeToParcel(android.os.Parcel, int);
@@ -16291,6 +16314,7 @@
   public class CaptureResult extends android.hardware.camera2.CameraMetadata {
     method public <T> T get(android.hardware.camera2.CaptureResult.Key<T>);
     method public long getFrameNumber();
+    method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getKeys();
     method public android.hardware.camera2.CaptureRequest getRequest();
     method public int getSequenceId();
     field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
@@ -16541,6 +16565,7 @@
     method public android.view.Display getDisplay(int);
     method public android.view.Display[] getDisplays();
     method public android.view.Display[] getDisplays(java.lang.String);
+    method public android.graphics.Point getStableDisplaySize();
     method public void registerDisplayListener(android.hardware.display.DisplayManager.DisplayListener, android.os.Handler);
     method public void unregisterDisplayListener(android.hardware.display.DisplayManager.DisplayListener);
     field public static final java.lang.String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
@@ -16589,9 +16614,12 @@
     field public static final int FINGERPRINT_ERROR_CANCELED = 5; // 0x5
     field public static final int FINGERPRINT_ERROR_HW_UNAVAILABLE = 1; // 0x1
     field public static final int FINGERPRINT_ERROR_LOCKOUT = 7; // 0x7
+    field public static final int FINGERPRINT_ERROR_LOCKOUT_PERMANENT = 9; // 0x9
     field public static final int FINGERPRINT_ERROR_NO_SPACE = 4; // 0x4
     field public static final int FINGERPRINT_ERROR_TIMEOUT = 3; // 0x3
     field public static final int FINGERPRINT_ERROR_UNABLE_TO_PROCESS = 2; // 0x2
+    field public static final int FINGERPRINT_ERROR_USER_CANCELED = 10; // 0xa
+    field public static final int FINGERPRINT_ERROR_VENDOR = 8; // 0x8
   }
 
   public static abstract class FingerprintManager.AuthenticationCallback {
@@ -17141,6 +17169,60 @@
 
 package android.hardware.radio {
 
+  public final class ProgramSelector implements android.os.Parcelable {
+    ctor public ProgramSelector(int, android.hardware.radio.ProgramSelector.Identifier, android.hardware.radio.ProgramSelector.Identifier[], long[]);
+    method public static android.hardware.radio.ProgramSelector createAmFmSelector(int, int);
+    method public static android.hardware.radio.ProgramSelector createAmFmSelector(int, int, int);
+    method public int describeContents();
+    method public android.hardware.radio.ProgramSelector.Identifier[] getAllIds(int);
+    method public long getFirstId(int);
+    method public android.hardware.radio.ProgramSelector.Identifier getPrimaryId();
+    method public int getProgramType();
+    method public android.hardware.radio.ProgramSelector.Identifier[] getSecondaryIds();
+    method public long[] getVendorIds();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.hardware.radio.ProgramSelector> CREATOR;
+    field public static final int IDENTIFIER_TYPE_AMFM_FREQUENCY = 1; // 0x1
+    field public static final int IDENTIFIER_TYPE_DAB_ENSEMBLE = 6; // 0x6
+    field public static final int IDENTIFIER_TYPE_DAB_FREQUENCY = 8; // 0x8
+    field public static final int IDENTIFIER_TYPE_DAB_SCID = 7; // 0x7
+    field public static final int IDENTIFIER_TYPE_DAB_SIDECC = 5; // 0x5
+    field public static final int IDENTIFIER_TYPE_DRMO_FREQUENCY = 10; // 0xa
+    field public static final int IDENTIFIER_TYPE_DRMO_MODULATION = 11; // 0xb
+    field public static final int IDENTIFIER_TYPE_DRMO_SERVICE_ID = 9; // 0x9
+    field public static final int IDENTIFIER_TYPE_HD_STATION_ID_EXT = 3; // 0x3
+    field public static final int IDENTIFIER_TYPE_HD_SUBCHANNEL = 4; // 0x4
+    field public static final int IDENTIFIER_TYPE_RDS_PI = 2; // 0x2
+    field public static final int IDENTIFIER_TYPE_SXM_CHANNEL = 13; // 0xd
+    field public static final int IDENTIFIER_TYPE_SXM_SERVICE_ID = 12; // 0xc
+    field public static final int IDENTIFIER_TYPE_VENDOR_PRIMARY_END = 1999; // 0x7cf
+    field public static final int IDENTIFIER_TYPE_VENDOR_PRIMARY_START = 1000; // 0x3e8
+    field public static final int PROGRAM_TYPE_AM = 1; // 0x1
+    field public static final int PROGRAM_TYPE_AM_HD = 3; // 0x3
+    field public static final int PROGRAM_TYPE_DAB = 5; // 0x5
+    field public static final int PROGRAM_TYPE_DRMO = 6; // 0x6
+    field public static final int PROGRAM_TYPE_FM = 2; // 0x2
+    field public static final int PROGRAM_TYPE_FM_HD = 4; // 0x4
+    field public static final int PROGRAM_TYPE_SXM = 7; // 0x7
+    field public static final int PROGRAM_TYPE_VENDOR_END = 1999; // 0x7cf
+    field public static final int PROGRAM_TYPE_VENDOR_START = 1000; // 0x3e8
+  }
+
+  public static final class ProgramSelector.Identifier implements android.os.Parcelable {
+    ctor public ProgramSelector.Identifier(int, long);
+    method public int describeContents();
+    method public int getType();
+    method public long getValue();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.hardware.radio.ProgramSelector.Identifier> CREATOR;
+  }
+
+  public static abstract class ProgramSelector.IdentifierType implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract class ProgramSelector.ProgramType implements java.lang.annotation.Annotation {
+  }
+
   public class RadioManager {
     method public int listModules(java.util.List<android.hardware.radio.RadioManager.ModuleProperties>);
     method public android.hardware.radio.RadioTuner openTuner(int, android.hardware.radio.RadioManager.BandConfig, boolean, android.hardware.radio.RadioTuner.Callback, android.os.Handler);
@@ -17148,6 +17230,7 @@
     field public static final int BAND_AM_HD = 3; // 0x3
     field public static final int BAND_FM = 1; // 0x1
     field public static final int BAND_FM_HD = 2; // 0x2
+    field public static final int BAND_INVALID = -1; // 0xffffffff
     field public static final int CLASS_AM_FM = 0; // 0x0
     field public static final int CLASS_DT = 2; // 0x2
     field public static final int CLASS_SAT = 1; // 0x1
@@ -17183,6 +17266,9 @@
     field public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.AmBandDescriptor> CREATOR;
   }
 
+  public static abstract class RadioManager.Band implements java.lang.annotation.Annotation {
+  }
+
   public static class RadioManager.BandConfig implements android.os.Parcelable {
     method public int describeContents();
     method public int getLowerLimit();
@@ -17201,6 +17287,8 @@
     method public int getSpacing();
     method public int getType();
     method public int getUpperLimit();
+    method public boolean isAmBand();
+    method public boolean isFmBand();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.BandDescriptor> CREATOR;
   }
@@ -17244,20 +17332,31 @@
     method public int getNumTuners();
     method public java.lang.String getProduct();
     method public java.lang.String getSerial();
+    method public java.lang.String getServiceName();
+    method public java.util.Map<java.lang.String, java.lang.String> getVendorInfo();
     method public java.lang.String getVersion();
+    method public boolean isBackgroundScanningSupported();
     method public boolean isCaptureSupported();
+    method public boolean isProgramIdentifierSupported(int);
+    method public boolean isProgramTypeSupported(int);
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.ModuleProperties> CREATOR;
   }
 
   public static class RadioManager.ProgramInfo implements android.os.Parcelable {
     method public int describeContents();
-    method public int getChannel();
+    method public deprecated int getChannel();
     method public android.hardware.radio.RadioMetadata getMetadata();
+    method public android.hardware.radio.ProgramSelector getSelector();
     method public int getSignalStrength();
-    method public int getSubChannel();
+    method public deprecated int getSubChannel();
+    method public java.util.Map<java.lang.String, java.lang.String> getVendorInfo();
     method public boolean isDigital();
+    method public boolean isLive();
+    method public boolean isMuted();
     method public boolean isStereo();
+    method public boolean isTrafficAnnouncementActive();
+    method public boolean isTrafficProgram();
     method public boolean isTuned();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.ProgramInfo> CREATOR;
@@ -17266,7 +17365,7 @@
   public final class RadioMetadata implements android.os.Parcelable {
     method public boolean containsKey(java.lang.String);
     method public int describeContents();
-    method public android.graphics.Bitmap getBitmap(java.lang.String);
+    method public deprecated android.graphics.Bitmap getBitmap(java.lang.String);
     method public android.hardware.radio.RadioMetadata.Clock getClock(java.lang.String);
     method public int getInt(java.lang.String);
     method public java.lang.String getString(java.lang.String);
@@ -17310,19 +17409,27 @@
   public abstract class RadioTuner {
     ctor public RadioTuner();
     method public abstract int cancel();
+    method public abstract void cancelAnnouncement();
     method public abstract void close();
     method public abstract int getConfiguration(android.hardware.radio.RadioManager.BandConfig[]);
     method public abstract boolean getMute();
     method public abstract int getProgramInformation(android.hardware.radio.RadioManager.ProgramInfo[]);
+    method public abstract java.util.List<android.hardware.radio.RadioManager.ProgramInfo> getProgramList(java.util.Map<java.lang.String, java.lang.String>);
     method public abstract boolean hasControl();
+    method public abstract boolean isAnalogForced();
     method public abstract boolean isAntennaConnected();
     method public abstract int scan(int, boolean);
+    method public abstract void setAnalogForced(boolean);
     method public abstract int setConfiguration(android.hardware.radio.RadioManager.BandConfig);
     method public abstract int setMute(boolean);
+    method public abstract boolean startBackgroundScan();
     method public abstract int step(int, boolean);
-    method public abstract int tune(int, int);
+    method public abstract deprecated int tune(int, int);
+    method public abstract void tune(android.hardware.radio.ProgramSelector);
     field public static final int DIRECTION_DOWN = 1; // 0x1
     field public static final int DIRECTION_UP = 0; // 0x0
+    field public static final int ERROR_BACKGROUND_SCAN_FAILED = 6; // 0x6
+    field public static final int ERROR_BACKGROUND_SCAN_UNAVAILABLE = 5; // 0x5
     field public static final int ERROR_CANCELLED = 2; // 0x2
     field public static final int ERROR_CONFIG = 4; // 0x4
     field public static final int ERROR_HARDWARE_FAILURE = 0; // 0x0
@@ -17333,12 +17440,15 @@
   public static abstract class RadioTuner.Callback {
     ctor public RadioTuner.Callback();
     method public void onAntennaState(boolean);
+    method public void onBackgroundScanAvailabilityChange(boolean);
+    method public void onBackgroundScanComplete();
     method public void onConfigurationChanged(android.hardware.radio.RadioManager.BandConfig);
     method public void onControlChanged(boolean);
     method public void onEmergencyAnnouncement(boolean);
     method public void onError(int);
-    method public void onMetadataChanged(android.hardware.radio.RadioMetadata);
+    method public deprecated void onMetadataChanged(android.hardware.radio.RadioMetadata);
     method public void onProgramInfoChanged(android.hardware.radio.RadioManager.ProgramInfo);
+    method public void onProgramListChanged();
     method public void onTrafficAnnouncement(boolean);
   }
 
@@ -19440,6 +19550,7 @@
   }
 
   public class DateIntervalFormat extends android.icu.text.UFormat {
+    method public synchronized java.lang.Object clone();
     method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
     method public final synchronized java.lang.StringBuffer format(android.icu.util.DateInterval, java.lang.StringBuffer, java.text.FieldPosition);
     method public final synchronized java.lang.StringBuffer format(android.icu.util.Calendar, android.icu.util.Calendar, java.lang.StringBuffer, java.text.FieldPosition);
@@ -20223,6 +20334,7 @@
 
   public final class RuleBasedCollator extends android.icu.text.Collator {
     ctor public RuleBasedCollator(java.lang.String) throws java.lang.Exception;
+    method public android.icu.text.RuleBasedCollator cloneAsThawed();
     method public int compare(java.lang.String, java.lang.String);
     method public android.icu.text.CollationElementIterator getCollationElementIterator(java.lang.String);
     method public android.icu.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
@@ -20249,6 +20361,7 @@
     method public void setFrenchCollation(boolean);
     method public void setFrenchCollationDefault();
     method public void setLowerCaseFirst(boolean);
+    method public android.icu.text.RuleBasedCollator setMaxVariable(int);
     method public void setNumericCollation(boolean);
     method public void setNumericCollationDefault();
     method public void setStrengthDefault();
@@ -23101,6 +23214,7 @@
     ctor public AudioRecord(android.media.AudioAttributes, android.media.AudioFormat, int, int) throws java.lang.IllegalArgumentException;
     method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
     method public deprecated void addOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener, android.os.Handler);
+    method protected void finalize();
     method public int getAudioFormat();
     method public int getAudioSessionId();
     method public int getAudioSource();
@@ -23207,6 +23321,7 @@
     method public deprecated void addOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener, android.os.Handler);
     method public int attachAuxEffect(int);
     method public android.media.VolumeShaper createVolumeShaper(android.media.VolumeShaper.Configuration);
+    method protected void finalize();
     method public void flush();
     method public int getAudioFormat();
     method public int getAudioSessionId();
@@ -23605,6 +23720,7 @@
     method public boolean clearQueue();
     method public java.lang.Object clone() throws java.lang.CloneNotSupportedException;
     method public boolean closeJetFile();
+    method protected void finalize();
     method public static android.media.JetPlayer getJetPlayer();
     method public static int getMaxTracks();
     method public boolean loadJetFile(java.lang.String);
@@ -23644,6 +23760,7 @@
     ctor public MediaCas(int) throws android.media.MediaCasException.UnsupportedCasException;
     method public void close();
     method public static android.media.MediaCas.PluginDescriptor[] enumeratePlugins();
+    method protected void finalize();
     method public static boolean isSystemIdSupported(int);
     method public android.media.MediaCas.Session openSession() throws android.media.MediaCasException;
     method public void processEmm(byte[], int, int) throws android.media.MediaCasException;
@@ -23700,6 +23817,7 @@
     method public static android.view.Surface createPersistentInputSurface();
     method public final int dequeueInputBuffer(long);
     method public final int dequeueOutputBuffer(android.media.MediaCodec.BufferInfo, long);
+    method protected void finalize();
     method public final void flush();
     method public android.media.MediaCodecInfo getCodecInfo();
     method public java.nio.ByteBuffer getInputBuffer(int);
@@ -23940,6 +24058,8 @@
     field public static final int AVCLevel51 = 32768; // 0x8000
     field public static final int AVCLevel52 = 65536; // 0x10000
     field public static final int AVCProfileBaseline = 1; // 0x1
+    field public static final int AVCProfileConstrainedBaseline = 65536; // 0x10000
+    field public static final int AVCProfileConstrainedHigh = 524288; // 0x80000
     field public static final int AVCProfileExtended = 4; // 0x4
     field public static final int AVCProfileHigh = 8; // 0x8
     field public static final int AVCProfileHigh10 = 16; // 0x10
@@ -23957,11 +24077,13 @@
     field public static final int DolbyVisionLevelUhd60 = 256; // 0x100
     field public static final int DolbyVisionProfileDvavPen = 2; // 0x2
     field public static final int DolbyVisionProfileDvavPer = 1; // 0x1
+    field public static final int DolbyVisionProfileDvavSe = 512; // 0x200
     field public static final int DolbyVisionProfileDvheDen = 8; // 0x8
     field public static final int DolbyVisionProfileDvheDer = 4; // 0x4
     field public static final int DolbyVisionProfileDvheDtb = 128; // 0x80
     field public static final int DolbyVisionProfileDvheDth = 64; // 0x40
     field public static final int DolbyVisionProfileDvheDtr = 16; // 0x10
+    field public static final int DolbyVisionProfileDvheSt = 256; // 0x100
     field public static final int DolbyVisionProfileDvheStn = 32; // 0x20
     field public static final int H263Level10 = 1; // 0x1
     field public static final int H263Level20 = 2; // 0x2
@@ -24111,6 +24233,7 @@
 
   public final class MediaCrypto {
     ctor public MediaCrypto(java.util.UUID, byte[]) throws android.media.MediaCryptoException;
+    method protected void finalize();
     method public static final boolean isCryptoSchemeSupported(java.util.UUID);
     method public final void release();
     method public final boolean requiresSecureDecoderComponent(java.lang.String);
@@ -24131,6 +24254,7 @@
     ctor public MediaDescrambler(int) throws android.media.MediaCasException.UnsupportedCasException;
     method public void close();
     method public final int descramble(java.nio.ByteBuffer, java.nio.ByteBuffer, android.media.MediaCodec.CryptoInfo);
+    method protected void finalize();
     method public final boolean requiresSecureDecoderComponent(java.lang.String);
     method public final void setMediaCasSession(android.media.MediaCas.Session);
   }
@@ -24173,6 +24297,7 @@
   public final class MediaDrm {
     ctor public MediaDrm(java.util.UUID) throws android.media.UnsupportedSchemeException;
     method public void closeSession(byte[]);
+    method protected void finalize();
     method public android.media.MediaDrm.CryptoSession getCryptoSession(byte[], java.lang.String, java.lang.String);
     method public android.media.MediaDrm.KeyRequest getKeyRequest(byte[], byte[], java.lang.String, int, java.util.HashMap<java.lang.String, java.lang.String>) throws android.media.NotProvisionedException;
     method public byte[] getPropertyByteArray(java.lang.String);
@@ -24269,6 +24394,7 @@
   public final class MediaExtractor {
     ctor public MediaExtractor();
     method public boolean advance();
+    method protected void finalize();
     method public long getCachedDuration();
     method public android.media.MediaExtractor.CasInfo getCasInfo(int);
     method public android.media.DrmInitData getDrmInitData();
@@ -24501,6 +24627,7 @@
     method public android.graphics.Bitmap getFrameAtTime(long, int);
     method public android.graphics.Bitmap getFrameAtTime(long);
     method public android.graphics.Bitmap getFrameAtTime();
+    method public android.graphics.Bitmap getScaledFrameAtTime(long, int, int, int);
     method public void release();
     method public void setDataSource(java.lang.String) throws java.lang.IllegalArgumentException;
     method public void setDataSource(java.lang.String, java.util.Map<java.lang.String, java.lang.String>) throws java.lang.IllegalArgumentException;
@@ -24570,6 +24697,7 @@
     method public static android.media.MediaPlayer create(android.content.Context, int, android.media.AudioAttributes, int);
     method public android.media.VolumeShaper createVolumeShaper(android.media.VolumeShaper.Configuration);
     method public void deselectTrack(int) throws java.lang.IllegalStateException;
+    method protected void finalize();
     method public int getAudioSessionId();
     method public int getCurrentPosition();
     method public android.media.MediaPlayer.DrmInfo getDrmInfo();
@@ -24765,6 +24893,7 @@
 
   public class MediaRecorder {
     ctor public MediaRecorder();
+    method protected void finalize();
     method public static final int getAudioSourceMax();
     method public int getMaxAmplitude() throws java.lang.IllegalStateException;
     method public android.os.PersistableBundle getMetrics();
@@ -25038,6 +25167,7 @@
   public final class MediaSync {
     ctor public MediaSync();
     method public final android.view.Surface createInputSurface();
+    method protected void finalize();
     method public void flush();
     method public android.media.PlaybackParams getPlaybackParams();
     method public android.media.SyncParams getSyncParams();
@@ -25166,6 +25296,10 @@
 
   public deprecated class RemoteControlClient.MetadataEditor extends android.media.MediaMetadataEditor {
     method public synchronized void apply();
+    method public synchronized android.media.RemoteControlClient.MetadataEditor putBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException;
+    method public synchronized android.media.RemoteControlClient.MetadataEditor putLong(int, long) throws java.lang.IllegalArgumentException;
+    method public synchronized android.media.RemoteControlClient.MetadataEditor putObject(int, java.lang.Object) throws java.lang.IllegalArgumentException;
+    method public synchronized android.media.RemoteControlClient.MetadataEditor putString(int, java.lang.String) throws java.lang.IllegalArgumentException;
     field public static final int BITMAP_KEY_ARTWORK = 100; // 0x64
   }
 
@@ -25212,6 +25346,7 @@
   }
 
   public class Ringtone {
+    method protected void finalize();
     method public android.media.AudioAttributes getAudioAttributes();
     method public deprecated int getStreamType();
     method public java.lang.String getTitle(android.content.Context);
@@ -25265,6 +25400,7 @@
     ctor public deprecated SoundPool(int, int, int);
     method public final void autoPause();
     method public final void autoResume();
+    method protected void finalize();
     method public int load(java.lang.String, int);
     method public int load(android.content.Context, int, int);
     method public int load(android.content.res.AssetFileDescriptor, int);
@@ -25333,6 +25469,7 @@
 
   public class ToneGenerator {
     ctor public ToneGenerator(int, int);
+    method protected void finalize();
     method public final int getAudioSessionId();
     method public void release();
     method public boolean startTone(int);
@@ -25465,6 +25602,7 @@
   public final class VolumeShaper implements java.lang.AutoCloseable {
     method public void apply(android.media.VolumeShaper.Operation);
     method public void close();
+    method protected void finalize();
     method public float getVolume();
     method public void replace(android.media.VolumeShaper.Configuration, android.media.VolumeShaper.Operation, boolean);
   }
@@ -25519,6 +25657,7 @@
   }
 
   public class AudioEffect {
+    method protected void finalize();
     method public android.media.audiofx.AudioEffect.Descriptor getDescriptor() throws java.lang.IllegalStateException;
     method public boolean getEnabled() throws java.lang.IllegalStateException;
     method public int getId() throws java.lang.IllegalStateException;
@@ -25771,6 +25910,7 @@
 
   public class Visualizer {
     ctor public Visualizer(int) throws java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method protected void finalize();
     method public int getCaptureSize() throws java.lang.IllegalStateException;
     method public static int[] getCaptureSizeRange();
     method public boolean getEnabled();
@@ -26462,6 +26602,7 @@
     method public static boolean isChannelUriForPassthroughInput(android.net.Uri);
     method public static boolean isChannelUriForTunerInput(android.net.Uri);
     method public static boolean isProgramUri(android.net.Uri);
+    method public static boolean isRecordedProgramUri(android.net.Uri);
     method public static void requestChannelBrowsable(android.content.Context, long);
     field public static final java.lang.String ACTION_CHANNEL_BROWSABLE_REQUESTED = "android.media.tv.action.CHANNEL_BROWSABLE_REQUESTED";
     field public static final java.lang.String ACTION_INITIALIZE_PROGRAMS = "android.media.tv.action.INITIALIZE_PROGRAMS";
@@ -27805,6 +27946,7 @@
     field public static final int TRANSPORT_BLUETOOTH = 2; // 0x2
     field public static final int TRANSPORT_CELLULAR = 0; // 0x0
     field public static final int TRANSPORT_ETHERNET = 3; // 0x3
+    field public static final int TRANSPORT_LOWPAN = 6; // 0x6
     field public static final int TRANSPORT_VPN = 4; // 0x4
     field public static final int TRANSPORT_WIFI = 1; // 0x1
     field public static final int TRANSPORT_WIFI_AWARE = 5; // 0x5
@@ -28033,6 +28175,7 @@
     method public static void incrementOperationCount(int);
     method public static void incrementOperationCount(int, int);
     method public static void setThreadStatsTag(int);
+    method public static void setThreadStatsTagApp();
     method public static void setThreadStatsTagBackup();
     method public static void setThreadStatsTagRestore();
     method public static void setThreadStatsUid(int);
@@ -28189,6 +28332,7 @@
     method public boolean protect(java.net.DatagramSocket);
     method public boolean setUnderlyingNetworks(android.net.Network[]);
     field public static final java.lang.String SERVICE_INTERFACE = "android.net.VpnService";
+    field public static final java.lang.String SERVICE_META_DATA_SUPPORTS_ALWAYS_ON = "android.net.VpnService.SUPPORTS_ALWAYS_ON";
   }
 
   public class VpnService.Builder {
@@ -28589,15 +28733,6 @@
 
 package android.net.wifi {
 
-  public deprecated class BatchedScanResult implements android.os.Parcelable {
-    ctor public BatchedScanResult();
-    ctor public BatchedScanResult(android.net.wifi.BatchedScanResult);
-    method public int describeContents();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public final java.util.List<android.net.wifi.ScanResult> scanResults;
-    field public boolean truncated;
-  }
-
   public class RttManager {
     method public void disableResponder(android.net.wifi.RttManager.ResponderCallback);
     method public void enableResponder(android.net.wifi.RttManager.ResponderCallback);
@@ -28816,7 +28951,6 @@
     field public int level;
     field public java.lang.CharSequence operatorFriendlyName;
     field public long timestamp;
-    field public boolean untrusted;
     field public java.lang.CharSequence venueName;
   }
 
@@ -28930,21 +29064,6 @@
     field public static final java.lang.String[] strings;
   }
 
-  public class WifiConnectionStatistics implements android.os.Parcelable {
-    ctor public WifiConnectionStatistics();
-    ctor public WifiConnectionStatistics(android.net.wifi.WifiConnectionStatistics);
-    method public int describeContents();
-    method public void incrementOrAddUntrusted(java.lang.String, int, int);
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<android.net.wifi.WifiConnectionStatistics> CREATOR;
-    field public int num24GhzConnected;
-    field public int num5GhzConnected;
-    field public int numAutoJoinAttempt;
-    field public int numAutoRoamAttempt;
-    field public int numWifiManagerJoinAttempt;
-    field public java.util.HashMap<java.lang.String, android.net.wifi.WifiNetworkConnectionStatistics> untrustedNetworkHistory;
-  }
-
   public class WifiEnterpriseConfig implements android.os.Parcelable {
     ctor public WifiEnterpriseConfig();
     ctor public WifiEnterpriseConfig(android.net.wifi.WifiEnterpriseConfig);
@@ -29035,10 +29154,8 @@
     method public boolean disableNetwork(int);
     method public boolean disconnect();
     method public boolean enableNetwork(int, boolean);
-    method public deprecated java.util.List<android.net.wifi.BatchedScanResult> getBatchedScanResults();
     method public java.util.List<android.net.wifi.WifiConfiguration> getConfiguredNetworks();
     method public android.net.wifi.WifiInfo getConnectionInfo();
-    method public android.net.wifi.WifiConnectionStatistics getConnectionStatistics();
     method public android.net.DhcpInfo getDhcpInfo();
     method public java.util.List<android.net.wifi.hotspot2.PasspointConfiguration> getPasspointConfigurations();
     method public java.util.List<android.net.wifi.WifiConfiguration> getPrivilegedConfiguredNetworks();
@@ -29047,7 +29164,6 @@
     method public int getWifiApState();
     method public int getWifiState();
     method public boolean is5GHzBandSupported();
-    method public deprecated boolean isBatchedScanSupported();
     method public boolean isDeviceToApRttSupported();
     method public boolean isDeviceToDeviceRttSupported();
     method public boolean isEnhancedPowerReportingSupported();
@@ -29068,10 +29184,8 @@
     method public void setTdlsEnabled(java.net.InetAddress, boolean);
     method public void setTdlsEnabledWithMacAddress(java.lang.String, boolean);
     method public boolean setWifiApConfiguration(android.net.wifi.WifiConfiguration);
-    method public boolean setWifiApEnabled(android.net.wifi.WifiConfiguration, boolean);
     method public boolean setWifiEnabled(boolean);
     method public void startLocalOnlyHotspot(android.net.wifi.WifiManager.LocalOnlyHotspotCallback, android.os.Handler);
-    method public deprecated boolean startLocationRestrictedScan(android.os.WorkSource);
     method public boolean startScan();
     method public boolean startScan(android.os.WorkSource);
     method public void startWps(android.net.wifi.WpsInfo, android.net.wifi.WifiManager.WpsCallback);
@@ -29672,7 +29786,8 @@
     method public abstract void onSuccess();
   }
 
-  public static class WifiP2pManager.Channel {
+  public static class WifiP2pManager.Channel implements java.lang.AutoCloseable {
+    method public void close();
   }
 
   public static abstract interface WifiP2pManager.ChannelListener {
@@ -33170,7 +33285,6 @@
     field public static final java.lang.String ID;
     field public static final java.lang.String MANUFACTURER;
     field public static final java.lang.String MODEL;
-    field public static final boolean PERMISSIONS_REVIEW_REQUIRED;
     field public static final java.lang.String PRODUCT;
     field public static final deprecated java.lang.String RADIO;
     field public static final deprecated java.lang.String SERIAL;
@@ -33225,6 +33339,7 @@
     field public static final int N = 24; // 0x18
     field public static final int N_MR1 = 25; // 0x19
     field public static final int O = 26; // 0x1a
+    field public static final int O_MR1 = 27; // 0x1b
   }
 
   public final class Bundle extends android.os.BaseBundle implements java.lang.Cloneable android.os.Parcelable {
@@ -33290,6 +33405,7 @@
     method public void putStringArrayList(java.lang.String, java.util.ArrayList<java.lang.String>);
     method public void readFromParcel(android.os.Parcel);
     method public void setClassLoader(java.lang.ClassLoader);
+    method public synchronized java.lang.String toString();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.os.Bundle> CREATOR;
     field public static final android.os.Bundle EMPTY;
@@ -33531,6 +33647,7 @@
   public abstract class FileObserver {
     ctor public FileObserver(java.lang.String);
     ctor public FileObserver(java.lang.String, int);
+    method protected void finalize();
     method public abstract void onEvent(int, java.lang.String);
     method public void startWatching();
     method public void stopWatching();
@@ -33703,11 +33820,11 @@
 
   public class MemoryFile {
     ctor public MemoryFile(java.lang.String, int) throws java.io.IOException;
-    method public synchronized boolean allowPurging(boolean) throws java.io.IOException;
+    method public deprecated synchronized boolean allowPurging(boolean) throws java.io.IOException;
     method public void close();
     method public java.io.InputStream getInputStream();
     method public java.io.OutputStream getOutputStream();
-    method public boolean isPurgingAllowed();
+    method public deprecated boolean isPurgingAllowed();
     method public int length();
     method public int readBytes(byte[], int, int, int) throws java.io.IOException;
     method public void writeBytes(byte[], int, int, int) throws java.io.IOException;
@@ -34004,6 +34121,7 @@
     method public int describeContents();
     method public android.os.PersistableBundle getPersistableBundle(java.lang.String);
     method public void putPersistableBundle(java.lang.String, android.os.PersistableBundle);
+    method public synchronized java.lang.String toString();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.os.PersistableBundle> CREATOR;
     field public static final android.os.PersistableBundle EMPTY;
@@ -34014,7 +34132,6 @@
     method public boolean isIgnoringBatteryOptimizations(java.lang.String);
     method public boolean isInteractive();
     method public boolean isPowerSaveMode();
-    method public boolean isScreenBrightnessBoosted();
     method public deprecated boolean isScreenOn();
     method public boolean isSustainedPerformanceModeSupported();
     method public boolean isWakeLockLevelSupported(int);
@@ -34024,7 +34141,6 @@
     field public static final int ACQUIRE_CAUSES_WAKEUP = 268435456; // 0x10000000
     field public static final java.lang.String ACTION_DEVICE_IDLE_MODE_CHANGED = "android.os.action.DEVICE_IDLE_MODE_CHANGED";
     field public static final java.lang.String ACTION_POWER_SAVE_MODE_CHANGED = "android.os.action.POWER_SAVE_MODE_CHANGED";
-    field public static final java.lang.String ACTION_SCREEN_BRIGHTNESS_BOOST_CHANGED = "android.os.action.SCREEN_BRIGHTNESS_BOOST_CHANGED";
     field public static final deprecated int FULL_WAKE_LOCK = 26; // 0x1a
     field public static final int ON_AFTER_RELEASE = 536870912; // 0x20000000
     field public static final int PARTIAL_WAKE_LOCK = 1; // 0x1
@@ -34160,6 +34276,20 @@
     field public static final android.os.Parcelable.Creator<android.os.ResultReceiver> CREATOR;
   }
 
+  public final class SharedMemory implements java.io.Closeable android.os.Parcelable {
+    method public void close();
+    method public static android.os.SharedMemory create(java.lang.String, int) throws android.system.ErrnoException;
+    method public int describeContents();
+    method public int getSize();
+    method public java.nio.ByteBuffer map(int, int, int) throws android.system.ErrnoException;
+    method public java.nio.ByteBuffer mapReadOnly() throws android.system.ErrnoException;
+    method public java.nio.ByteBuffer mapReadWrite() throws android.system.ErrnoException;
+    method public boolean setProtect(int);
+    method public static void unmap(java.nio.ByteBuffer);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.os.SharedMemory> CREATOR;
+  }
+
   public class StatFs {
     ctor public StatFs(java.lang.String);
     method public deprecated int getAvailableBlocks();
@@ -34292,6 +34422,7 @@
     method public void resetStatus();
     method public void resume();
     method public void suspend();
+    method public boolean unbind();
   }
 
   public static final class UpdateEngine.ErrorCodeConstants {
@@ -34644,6 +34775,7 @@
     method public android.os.storage.StorageVolume getStorageVolume(java.io.File);
     method public java.util.List<android.os.storage.StorageVolume> getStorageVolumes();
     method public java.util.UUID getUuidForPath(java.io.File) throws java.io.IOException;
+    method public boolean isAllocationSupported(java.io.FileDescriptor);
     method public boolean isCacheBehaviorGroup(java.io.File) throws java.io.IOException;
     method public boolean isCacheBehaviorTombstone(java.io.File) throws java.io.IOException;
     method public boolean isEncrypted(java.io.File);
@@ -38427,6 +38559,22 @@
     field public static final java.lang.String TYPE = "type";
   }
 
+  public final class TimeZoneRulesDataContract {
+    field public static final java.lang.String AUTHORITY = "com.android.timezone";
+  }
+
+  public static final class TimeZoneRulesDataContract.Operation {
+    field public static final java.lang.String COLUMN_DISTRO_MAJOR_VERSION = "distro_major_version";
+    field public static final java.lang.String COLUMN_DISTRO_MINOR_VERSION = "distro_minor_version";
+    field public static final java.lang.String COLUMN_REVISION = "revision";
+    field public static final java.lang.String COLUMN_RULES_VERSION = "rules_version";
+    field public static final java.lang.String COLUMN_TYPE = "type";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final java.lang.String TYPE_INSTALL = "INSTALL";
+    field public static final java.lang.String TYPE_NO_OP = "NOOP";
+    field public static final java.lang.String TYPE_UNINSTALL = "UNINSTALL";
+  }
+
   public class UserDictionary {
     ctor public UserDictionary();
     field public static final java.lang.String AUTHORITY = "user_dictionary";
@@ -38641,6 +38789,7 @@
     method public static android.renderscript.AllocationAdapter create1D(android.renderscript.RenderScript, android.renderscript.Allocation);
     method public static android.renderscript.AllocationAdapter create2D(android.renderscript.RenderScript, android.renderscript.Allocation);
     method public static android.renderscript.AllocationAdapter createTyped(android.renderscript.RenderScript, android.renderscript.Allocation, android.renderscript.Type);
+    method public synchronized void resize(int);
     method public void setFace(android.renderscript.Type.CubemapFace);
     method public void setLOD(int);
     method public void setX(int);
@@ -39912,6 +40061,30 @@
     field public static final java.lang.String SERVICE_META_DATA = "android.autofill";
   }
 
+  public final class CharSequenceTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.CharSequenceTransformation> CREATOR;
+  }
+
+  public static class CharSequenceTransformation.Builder {
+    ctor public CharSequenceTransformation.Builder(android.view.autofill.AutofillId, java.util.regex.Pattern, java.lang.String);
+    method public android.service.autofill.CharSequenceTransformation.Builder addField(android.view.autofill.AutofillId, java.util.regex.Pattern, java.lang.String);
+    method public android.service.autofill.CharSequenceTransformation build();
+  }
+
+  public final class CustomDescription implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.CustomDescription> CREATOR;
+  }
+
+  public static class CustomDescription.Builder {
+    ctor public CustomDescription.Builder(android.widget.RemoteViews);
+    method public android.service.autofill.CustomDescription.Builder addChild(int, android.service.autofill.Transformation);
+    method public android.service.autofill.CustomDescription build();
+  }
+
   public final class Dataset implements android.os.Parcelable {
     method public int describeContents();
     method public void writeToParcel(android.os.Parcel, int);
@@ -39985,6 +40158,32 @@
     method public android.service.autofill.FillResponse.Builder setSaveInfo(android.service.autofill.SaveInfo);
   }
 
+  public final class ImageTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.ImageTransformation> CREATOR;
+  }
+
+  public static class ImageTransformation.Builder {
+    ctor public ImageTransformation.Builder(android.view.autofill.AutofillId, java.util.regex.Pattern, int);
+    method public android.service.autofill.ImageTransformation.Builder addOption(java.util.regex.Pattern, int);
+    method public android.service.autofill.ImageTransformation build();
+  }
+
+  public final class LuhnChecksumValidator implements android.os.Parcelable android.service.autofill.Validator {
+    ctor public LuhnChecksumValidator(android.view.autofill.AutofillId...);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.LuhnChecksumValidator> CREATOR;
+  }
+
+  public final class RegexValidator implements android.os.Parcelable android.service.autofill.Validator {
+    ctor public RegexValidator(android.view.autofill.AutofillId, java.util.regex.Pattern);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.RegexValidator> CREATOR;
+  }
+
   public final class SaveCallback {
     method public void onFailure(java.lang.CharSequence);
     method public void onSuccess();
@@ -40007,11 +40206,14 @@
 
   public static final class SaveInfo.Builder {
     ctor public SaveInfo.Builder(int, android.view.autofill.AutofillId[]);
+    ctor public SaveInfo.Builder(int);
     method public android.service.autofill.SaveInfo build();
+    method public android.service.autofill.SaveInfo.Builder setCustomDescription(android.service.autofill.CustomDescription);
     method public android.service.autofill.SaveInfo.Builder setDescription(java.lang.CharSequence);
     method public android.service.autofill.SaveInfo.Builder setFlags(int);
     method public android.service.autofill.SaveInfo.Builder setNegativeAction(int, android.content.IntentSender);
     method public android.service.autofill.SaveInfo.Builder setOptionalIds(android.view.autofill.AutofillId[]);
+    method public android.service.autofill.SaveInfo.Builder setValidator(android.service.autofill.Validator);
   }
 
   public final class SaveRequest implements android.os.Parcelable {
@@ -40022,6 +40224,17 @@
     field public static final android.os.Parcelable.Creator<android.service.autofill.SaveRequest> CREATOR;
   }
 
+  public abstract interface Transformation {
+  }
+
+  public abstract interface Validator {
+  }
+
+  public final class Validators {
+    method public static android.service.autofill.Validator and(android.service.autofill.Validator...);
+    method public static android.service.autofill.Validator or(android.service.autofill.Validator...);
+  }
+
 }
 
 package android.service.carrier {
@@ -40304,9 +40517,7 @@
     method public final void cancelNotification(java.lang.String);
     method public final void cancelNotifications(java.lang.String[]);
     method public android.service.notification.StatusBarNotification[] getActiveNotifications();
-    method public android.service.notification.StatusBarNotification[] getActiveNotifications(int);
     method public android.service.notification.StatusBarNotification[] getActiveNotifications(java.lang.String[]);
-    method public android.service.notification.StatusBarNotification[] getActiveNotifications(java.lang.String[], int);
     method public final int getCurrentInterruptionFilter();
     method public final int getCurrentListenerHints();
     method public android.service.notification.NotificationListenerService.RankingMap getCurrentRanking();
@@ -40326,16 +40537,12 @@
     method public void onNotificationRemoved(android.service.notification.StatusBarNotification);
     method public void onNotificationRemoved(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap);
     method public void onNotificationRemoved(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap, int);
-    method public void registerAsSystemService(android.content.Context, android.content.ComponentName, int) throws android.os.RemoteException;
     method public final void requestInterruptionFilter(int);
     method public final void requestListenerHints(int);
     method public static void requestRebind(android.content.ComponentName);
     method public final void requestUnbind();
     method public final void setNotificationsShown(java.lang.String[]);
-    method public final void setOnNotificationPostedTrim(int);
-    method public final void snoozeNotification(java.lang.String, java.lang.String);
     method public final void snoozeNotification(java.lang.String, long);
-    method public void unregisterAsSystemService() throws android.os.RemoteException;
     method public final void updateNotificationChannel(java.lang.String, android.os.UserHandle, android.app.NotificationChannel);
     field public static final int HINT_HOST_DISABLE_CALL_EFFECTS = 4; // 0x4
     field public static final int HINT_HOST_DISABLE_EFFECTS = 1; // 0x1
@@ -40370,21 +40577,17 @@
     field public static final java.lang.String SERVICE_INTERFACE = "android.service.notification.NotificationListenerService";
     field public static final int SUPPRESSED_EFFECT_SCREEN_OFF = 1; // 0x1
     field public static final int SUPPRESSED_EFFECT_SCREEN_ON = 2; // 0x2
-    field public static final int TRIM_FULL = 0; // 0x0
-    field public static final int TRIM_LIGHT = 1; // 0x1
   }
 
   public static class NotificationListenerService.Ranking {
     ctor public NotificationListenerService.Ranking();
     method public boolean canShowBadge();
-    method public java.util.List<java.lang.String> getAdditionalPeople();
     method public android.app.NotificationChannel getChannel();
     method public int getImportance();
     method public java.lang.CharSequence getImportanceExplanation();
     method public java.lang.String getKey();
     method public java.lang.String getOverrideGroupKey();
     method public int getRank();
-    method public java.util.List<android.service.notification.SnoozeCriterion> getSnoozeCriteria();
     method public int getSuppressedVisualEffects();
     method public boolean isAmbient();
     method public boolean matchesInterruptionFilter();
@@ -40798,8 +41001,10 @@
     method public android.view.SurfaceHolder getSurfaceHolder();
     method public boolean isPreview();
     method public boolean isVisible();
+    method public void notifyColorsChanged();
     method public void onApplyWindowInsets(android.view.WindowInsets);
     method public android.os.Bundle onCommand(java.lang.String, int, int, int, android.os.Bundle, boolean);
+    method public android.app.WallpaperColors onComputeColors();
     method public void onCreate(android.view.SurfaceHolder);
     method public void onDesiredSizeChanged(int, int);
     method public void onDestroy();
@@ -41381,6 +41586,7 @@
     field public static final int FD_CLOEXEC;
     field public static final int FIONREAD;
     field public static final int F_DUPFD;
+    field public static final int F_DUPFD_CLOEXEC;
     field public static final int F_GETFD;
     field public static final int F_GETFL;
     field public static final int F_GETLK;
@@ -41475,7 +41681,9 @@
     field public static final int NI_NUMERICSERV;
     field public static final int O_ACCMODE;
     field public static final int O_APPEND;
+    field public static final int O_CLOEXEC;
     field public static final int O_CREAT;
+    field public static final int O_DSYNC;
     field public static final int O_EXCL;
     field public static final int O_NOCTTY;
     field public static final int O_NOFOLLOW;
@@ -41721,14 +41929,18 @@
 
   public final class StructStat {
     ctor public StructStat(long, long, int, long, int, int, long, long, long, long, long, long, long);
+    ctor public StructStat(long, long, int, long, int, int, long, long, android.system.StructTimespec, android.system.StructTimespec, android.system.StructTimespec, long, long);
+    field public final android.system.StructTimespec st_atim;
     field public final long st_atime;
     field public final long st_blksize;
     field public final long st_blocks;
+    field public final android.system.StructTimespec st_ctim;
     field public final long st_ctime;
     field public final long st_dev;
     field public final int st_gid;
     field public final long st_ino;
     field public final int st_mode;
+    field public final android.system.StructTimespec st_mtim;
     field public final long st_mtime;
     field public final long st_nlink;
     field public final long st_rdev;
@@ -41751,6 +41963,13 @@
     field public final long f_namemax;
   }
 
+  public final class StructTimespec implements java.lang.Comparable {
+    ctor public StructTimespec(long, long);
+    method public int compareTo(android.system.StructTimespec);
+    field public final long tv_nsec;
+    field public final long tv_sec;
+  }
+
   public final class StructUtsname {
     ctor public StructUtsname(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
     field public final java.lang.String machine;
@@ -41910,6 +42129,7 @@
   public static final class Call.RttCall {
     method public int getRttAudioMode();
     method public java.lang.String read();
+    method public java.lang.String readImmediately() throws java.io.IOException;
     method public void setRttMode(int);
     method public void write(java.lang.String) throws java.io.IOException;
     field public static final int RTT_MODE_FULL = 1; // 0x1
@@ -42811,6 +43031,7 @@
     field public static final java.lang.String KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING = "ci_action_on_sys_update_extra_val_string";
     field public static final java.lang.String KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING = "ci_action_on_sys_update_intent_string";
     field public static final java.lang.String KEY_CONFIG_IMS_PACKAGE_OVERRIDE_STRING = "config_ims_package_override_string";
+    field public static final java.lang.String KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING = "config_plans_package_override_string";
     field public static final java.lang.String KEY_CSP_ENABLED_BOOL = "csp_enabled_bool";
     field public static final java.lang.String KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG = "data_limit_threshold_bytes_long";
     field public static final java.lang.String KEY_DATA_WARNING_THRESHOLD_BYTES_LONG = "data_warning_threshold_bytes_long";
@@ -42818,6 +43039,7 @@
     field public static final java.lang.String KEY_DEFAULT_VM_NUMBER_STRING = "default_vm_number_string";
     field public static final java.lang.String KEY_DIAL_STRING_REPLACE_STRING_ARRAY = "dial_string_replace_string_array";
     field public static final java.lang.String KEY_DISABLE_CDMA_ACTIVATION_CODE_BOOL = "disable_cdma_activation_code_bool";
+    field public static final java.lang.String KEY_DISPLAY_HD_AUDIO_PROPERTY_BOOL = "display_hd_audio_property_bool";
     field public static final java.lang.String KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL = "drop_video_call_when_answering_audio_call_bool";
     field public static final java.lang.String KEY_DTMF_TYPE_ENABLED_BOOL = "dtmf_type_enabled_bool";
     field public static final java.lang.String KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT = "duration_blocking_disabled_after_emergency_int";
@@ -43285,9 +43507,12 @@
     field public static final int MMS_ERROR_UNABLE_CONNECT_MMS = 3; // 0x3
     field public static final int MMS_ERROR_UNSPECIFIED = 1; // 0x1
     field public static final int RESULT_ERROR_GENERIC_FAILURE = 1; // 0x1
+    field public static final int RESULT_ERROR_LIMIT_EXCEEDED = 5; // 0x5
     field public static final int RESULT_ERROR_NO_SERVICE = 4; // 0x4
     field public static final int RESULT_ERROR_NULL_PDU = 3; // 0x3
     field public static final int RESULT_ERROR_RADIO_OFF = 2; // 0x2
+    field public static final int RESULT_ERROR_SHORT_CODE_NEVER_ALLOWED = 8; // 0x8
+    field public static final int RESULT_ERROR_SHORT_CODE_NOT_ALLOWED = 7; // 0x7
     field public static final int STATUS_ON_ICC_FREE = 0; // 0x0
     field public static final int STATUS_ON_ICC_READ = 1; // 0x1
     field public static final int STATUS_ON_ICC_SENT = 5; // 0x5
@@ -43384,8 +43609,10 @@
     method public static int getDefaultSmsSubscriptionId();
     method public static int getDefaultSubscriptionId();
     method public static int getDefaultVoiceSubscriptionId();
+    method public java.util.List<android.telephony.SubscriptionPlan> getSubscriptionPlans(int);
     method public boolean isNetworkRoaming(int);
     method public void removeOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener);
+    method public void setSubscriptionPlans(int, java.util.List<android.telephony.SubscriptionPlan>);
     field public static final java.lang.String ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SMS_SUBSCRIPTION_CHANGED";
     field public static final java.lang.String ACTION_DEFAULT_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SUBSCRIPTION_CHANGED";
     field public static final int DATA_ROAMING_DISABLE = 0; // 0x0
@@ -43399,6 +43626,38 @@
     method public void onSubscriptionsChanged();
   }
 
+  public final class SubscriptionPlan implements android.os.Parcelable {
+    method public java.util.Iterator<android.util.Pair<java.time.ZonedDateTime, java.time.ZonedDateTime>> cycleIterator();
+    method public int describeContents();
+    method public int getDataLimitBehavior();
+    method public long getDataLimitBytes();
+    method public long getDataUsageBytes();
+    method public long getDataUsageTime();
+    method public java.lang.CharSequence getSummary();
+    method public java.lang.CharSequence getTitle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final long BYTES_UNKNOWN = -1L; // 0xffffffffffffffffL
+    field public static final long BYTES_UNLIMITED = 9223372036854775807L; // 0x7fffffffffffffffL
+    field public static final android.os.Parcelable.Creator<android.telephony.SubscriptionPlan> CREATOR;
+    field public static final int LIMIT_BEHAVIOR_BILLED = 1; // 0x1
+    field public static final int LIMIT_BEHAVIOR_DISABLED = 0; // 0x0
+    field public static final int LIMIT_BEHAVIOR_THROTTLED = 2; // 0x2
+    field public static final int LIMIT_BEHAVIOR_UNKNOWN = -1; // 0xffffffff
+    field public static final long TIME_UNKNOWN = -1L; // 0xffffffffffffffffL
+  }
+
+  public static class SubscriptionPlan.Builder {
+    method public android.telephony.SubscriptionPlan build();
+    method public static android.telephony.SubscriptionPlan.Builder createNonrecurring(java.time.ZonedDateTime, java.time.ZonedDateTime);
+    method public static android.telephony.SubscriptionPlan.Builder createRecurringDaily(java.time.ZonedDateTime);
+    method public static android.telephony.SubscriptionPlan.Builder createRecurringMonthly(java.time.ZonedDateTime);
+    method public static android.telephony.SubscriptionPlan.Builder createRecurringWeekly(java.time.ZonedDateTime);
+    method public android.telephony.SubscriptionPlan.Builder setDataLimit(long, int);
+    method public android.telephony.SubscriptionPlan.Builder setDataUsage(long, long);
+    method public android.telephony.SubscriptionPlan.Builder setSummary(java.lang.CharSequence);
+    method public android.telephony.SubscriptionPlan.Builder setTitle(java.lang.CharSequence);
+  }
+
   public final class TelephonyHistogram implements android.os.Parcelable {
     ctor public TelephonyHistogram(int, int, int);
     ctor public TelephonyHistogram(android.telephony.TelephonyHistogram);
@@ -43568,6 +43827,7 @@
     field public static final java.lang.String EXTRA_CALL_VOICEMAIL_INTENT = "android.telephony.extra.CALL_VOICEMAIL_INTENT";
     field public static final java.lang.String EXTRA_HIDE_PUBLIC_SETTINGS = "android.telephony.extra.HIDE_PUBLIC_SETTINGS";
     field public static final java.lang.String EXTRA_INCOMING_NUMBER = "incoming_number";
+    field public static final java.lang.String EXTRA_IS_REFRESH = "android.telephony.extra.IS_REFRESH";
     field public static final java.lang.String EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT = "android.telephony.extra.LAUNCH_VOICEMAIL_SETTINGS_INTENT";
     field public static final java.lang.String EXTRA_NOTIFICATION_COUNT = "android.telephony.extra.NOTIFICATION_COUNT";
     field public static final java.lang.String EXTRA_PHONE_ACCOUNT_HANDLE = "android.telephony.extra.PHONE_ACCOUNT_HANDLE";
@@ -43773,6 +44033,7 @@
 
   public static deprecated class SmsMessage.SubmitPdu {
     ctor public deprecated SmsMessage.SubmitPdu();
+    method public deprecated java.lang.String toString();
     field public deprecated byte[] encodedMessage;
     field public deprecated byte[] encodedScAddress;
   }
@@ -43845,6 +44106,7 @@
     method public java.util.List<junit.framework.TestCase> getTestCases();
     method public java.lang.String getTestClassName();
     method public junit.framework.TestResult getTestResult();
+    method protected java.lang.Class loadSuiteClass(java.lang.String) throws java.lang.ClassNotFoundException;
     method protected void runFailed(java.lang.String);
     method public void runTest();
     method public void runTest(junit.framework.TestResult);
@@ -44105,10 +44367,12 @@
     ctor protected MockContentProvider();
     ctor public MockContentProvider(android.content.Context);
     ctor public MockContentProvider(android.content.Context, java.lang.String, java.lang.String, android.content.pm.PathPermission[]);
+    method public android.content.ContentProviderResult[] applyBatch(java.util.ArrayList<android.content.ContentProviderOperation>);
     method public int delete(android.net.Uri, java.lang.String, java.lang.String[]);
     method public java.lang.String getType(android.net.Uri);
     method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
     method public boolean onCreate();
+    method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle);
     method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
     method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
   }
@@ -44368,6 +44632,8 @@
     method public void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
     method public boolean hasSystemFeature(java.lang.String);
     method public boolean hasSystemFeature(java.lang.String, int);
+    method public int installExistingPackage(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public int installExistingPackage(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
     method public boolean isInstantApp();
     method public boolean isInstantApp(java.lang.String);
     method public boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
@@ -44380,6 +44646,7 @@
     method public java.util.List<android.content.pm.ResolveInfo> queryIntentContentProviders(android.content.Intent, int);
     method public java.util.List<android.content.pm.ResolveInfo> queryIntentServices(android.content.Intent, int);
     method public java.util.List<android.content.pm.PermissionInfo> queryPermissionsByGroup(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public void registerDexModule(java.lang.String, android.content.pm.PackageManager.DexModuleRegisterCallback);
     method public void removeOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener);
     method public void removePackageFromPreferred(java.lang.String);
     method public void removePermission(java.lang.String);
@@ -44402,6 +44669,10 @@
 
   public deprecated class MockResources extends android.content.res.Resources {
     ctor public MockResources();
+    method public int getColor(int) throws android.content.res.Resources.NotFoundException;
+    method public android.content.res.ColorStateList getColorStateList(int) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
+    method public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics);
   }
 
 }
@@ -44637,6 +44908,7 @@
 
   public static class InputFilter.AllCaps implements android.text.InputFilter {
     ctor public InputFilter.AllCaps();
+    ctor public InputFilter.AllCaps(java.util.Locale);
     method public java.lang.CharSequence filter(java.lang.CharSequence, int, int, android.text.Spanned, int, int);
   }
 
@@ -45649,6 +45921,7 @@
 
   public abstract class MetricAffectingSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateLayout {
     ctor public MetricAffectingSpan();
+    method public android.text.style.MetricAffectingSpan getUnderlying();
     method public abstract void updateMeasureState(android.text.TextPaint);
   }
 
@@ -46329,14 +46602,28 @@
   public class TransitionSet extends android.transition.Transition {
     ctor public TransitionSet();
     ctor public TransitionSet(android.content.Context, android.util.AttributeSet);
+    method public android.transition.TransitionSet addListener(android.transition.Transition.TransitionListener);
+    method public android.transition.TransitionSet addTarget(android.view.View);
+    method public android.transition.TransitionSet addTarget(int);
+    method public android.transition.TransitionSet addTarget(java.lang.String);
+    method public android.transition.TransitionSet addTarget(java.lang.Class);
     method public android.transition.TransitionSet addTransition(android.transition.Transition);
     method public void captureEndValues(android.transition.TransitionValues);
     method public void captureStartValues(android.transition.TransitionValues);
+    method public android.transition.TransitionSet clone();
     method public int getOrdering();
     method public android.transition.Transition getTransitionAt(int);
     method public int getTransitionCount();
+    method public android.transition.TransitionSet removeListener(android.transition.Transition.TransitionListener);
+    method public android.transition.TransitionSet removeTarget(int);
+    method public android.transition.TransitionSet removeTarget(android.view.View);
+    method public android.transition.TransitionSet removeTarget(java.lang.Class);
+    method public android.transition.TransitionSet removeTarget(java.lang.String);
     method public android.transition.TransitionSet removeTransition(android.transition.Transition);
+    method public android.transition.TransitionSet setDuration(long);
+    method public android.transition.TransitionSet setInterpolator(android.animation.TimeInterpolator);
     method public android.transition.TransitionSet setOrdering(int);
+    method public android.transition.TransitionSet setStartDelay(long);
     field public static final int ORDERING_SEQUENTIAL = 1; // 0x1
     field public static final int ORDERING_TOGETHER = 0; // 0x0
   }
@@ -46501,6 +46788,9 @@
 
   public class Base64InputStream extends java.io.FilterInputStream {
     ctor public Base64InputStream(java.io.InputStream, int);
+    method public int available();
+    method public void mark(int);
+    method public void reset();
   }
 
   public class Base64OutputStream extends java.io.FilterOutputStream {
@@ -47470,9 +47760,13 @@
     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 KEYBOARD_PRESS = 3; // 0x3
+    field public static final int KEYBOARD_RELEASE = 7; // 0x7
     field public static final int KEYBOARD_TAP = 3; // 0x3
     field public static final int LONG_PRESS = 0; // 0x0
+    field public static final int TEXT_HANDLE_MOVE = 9; // 0x9
     field public static final int VIRTUAL_KEY = 1; // 0x1
+    field public static final int VIRTUAL_KEY_RELEASE = 8; // 0x8
   }
 
   public class InflateException extends java.lang.RuntimeException {
@@ -47501,6 +47795,7 @@
     method public android.os.Vibrator getVibrator();
     method public boolean[] hasKeys(int...);
     method public boolean hasMicrophone();
+    method public boolean isEnabled();
     method public boolean isVirtual();
     method public boolean supportsSource(int);
     method public void writeToParcel(android.os.Parcel, int);
@@ -48616,6 +48911,7 @@
     method public android.graphics.Canvas lockCanvas();
     method public android.graphics.Canvas lockCanvas(android.graphics.Rect);
     method protected final void onDraw(android.graphics.Canvas);
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
     method public void setOpaque(boolean);
     method public void setSurfaceTexture(android.graphics.SurfaceTexture);
     method public void setSurfaceTextureListener(android.view.TextureView.SurfaceTextureListener);
@@ -49639,6 +49935,7 @@
     method public int getLayoutMode();
     method public android.animation.LayoutTransition getLayoutTransition();
     method public int getNestedScrollAxes();
+    method public android.view.ViewGroupOverlay getOverlay();
     method public int getPersistentDrawingCache();
     method public boolean getTouchscreenBlocksFocus();
     method public int indexOfChild(android.view.View);
@@ -50069,6 +50366,7 @@
     method public final boolean isActive();
     method public abstract boolean isFloating();
     method public abstract boolean isShortcutKey(int, android.view.KeyEvent);
+    method public boolean isWideColorGamut();
     method public final void makeActive();
     method protected abstract void onActive();
     method public abstract void onConfigurationChanged(android.content.res.Configuration);
@@ -50335,12 +50633,12 @@
     field public static final int FLAG_SCALED = 16384; // 0x4000
     field public static final int FLAG_SECURE = 8192; // 0x2000
     field public static final int FLAG_SHOW_WALLPAPER = 1048576; // 0x100000
-    field public static final int FLAG_SHOW_WHEN_LOCKED = 524288; // 0x80000
+    field public static final deprecated int FLAG_SHOW_WHEN_LOCKED = 524288; // 0x80000
     field public static final int FLAG_SPLIT_TOUCH = 8388608; // 0x800000
     field public static final deprecated int FLAG_TOUCHABLE_WHEN_WAKING = 64; // 0x40
     field public static final int FLAG_TRANSLUCENT_NAVIGATION = 134217728; // 0x8000000
     field public static final int FLAG_TRANSLUCENT_STATUS = 67108864; // 0x4000000
-    field public static final int FLAG_TURN_SCREEN_ON = 2097152; // 0x200000
+    field public static final deprecated int FLAG_TURN_SCREEN_ON = 2097152; // 0x200000
     field public static final int FLAG_WATCH_OUTSIDE_TOUCH = 262144; // 0x40000
     field public static final int FORMAT_CHANGED = 8; // 0x8
     field public static final int LAST_APPLICATION_WINDOW = 99; // 0x63
@@ -50494,6 +50792,7 @@
   }
 
   public final class AccessibilityManager {
+    method public void addAccessibilityRequestPreparer(android.view.accessibility.AccessibilityRequestPreparer);
     method public boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
     method public void addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener, android.os.Handler);
     method public boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
@@ -50505,6 +50804,7 @@
     method public static boolean isAccessibilityButtonSupported();
     method public boolean isEnabled();
     method public boolean isTouchExplorationEnabled();
+    method public void removeAccessibilityRequestPreparer(android.view.accessibility.AccessibilityRequestPreparer);
     method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
     method public boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
     method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
@@ -50821,6 +51121,13 @@
     method public void setToIndex(int);
   }
 
+  public abstract class AccessibilityRequestPreparer {
+    ctor public AccessibilityRequestPreparer(android.view.View, int);
+    method public android.view.View getView();
+    method public abstract void onPrepareExtraData(int, java.lang.String, android.os.Bundle, android.os.Message);
+    field public static final int REQUEST_TYPE_EXTRA_DATA = 1; // 0x1
+  }
+
   public final class AccessibilityWindowInfo implements android.os.Parcelable {
     method public int describeContents();
     method public android.view.accessibility.AccessibilityNodeInfo getAnchor();
@@ -50913,6 +51220,7 @@
     ctor public Animation(android.content.Context, android.util.AttributeSet);
     method protected void applyTransformation(float, android.view.animation.Transformation);
     method public void cancel();
+    method protected android.view.animation.Animation clone() throws java.lang.CloneNotSupportedException;
     method public long computeDurationHint();
     method protected void ensureInterpolator();
     method public int getBackgroundColor();
@@ -50984,6 +51292,7 @@
     ctor public AnimationSet(android.content.Context, android.util.AttributeSet);
     ctor public AnimationSet(boolean);
     method public void addAnimation(android.view.animation.Animation);
+    method protected android.view.animation.AnimationSet clone() throws java.lang.CloneNotSupportedException;
     method public java.util.List<android.view.animation.Animation> getAnimations();
   }
 
@@ -51188,6 +51497,8 @@
     method public void notifyViewEntered(android.view.View, int, android.graphics.Rect);
     method public void notifyViewExited(android.view.View);
     method public void notifyViewExited(android.view.View, int);
+    method public void notifyViewVisibilityChanged(android.view.View, boolean);
+    method public void notifyViewVisibilityChanged(android.view.View, int, boolean);
     method public void registerCallback(android.view.autofill.AutofillManager.AutofillCallback);
     method public void requestAutofill(android.view.View);
     method public void requestAutofill(android.view.View, int, android.graphics.Rect);
@@ -51839,6 +52150,10 @@
   public final deprecated class CookieSyncManager extends android.webkit.WebSyncManager {
     method public static android.webkit.CookieSyncManager createInstance(android.content.Context);
     method public static android.webkit.CookieSyncManager getInstance();
+    method public deprecated void resetSync();
+    method public deprecated void startSync();
+    method public deprecated void stopSync();
+    method public deprecated void sync();
     method protected deprecated void syncFromRamToFlash();
     field protected static final java.lang.String LOGTAG = "websync";
     field protected android.webkit.WebViewDatabase mDataBase;
@@ -51969,6 +52284,13 @@
     method public abstract int rendererPriorityAtExit();
   }
 
+  public abstract class SafeBrowsingResponse {
+    ctor public SafeBrowsingResponse();
+    method public abstract void backToSafety(boolean);
+    method public abstract void proceed(boolean);
+    method public abstract void showInterstitial(boolean);
+  }
+
   public class ServiceWorkerClient {
     ctor public ServiceWorkerClient();
     method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebResourceRequest);
@@ -52426,8 +52748,10 @@
     method public int getProgress();
     method public boolean getRendererPriorityWaivedWhenNotVisible();
     method public int getRendererRequestedPriority();
+    method public static android.net.Uri getSafeBrowsingPrivacyPolicyUrl();
     method public deprecated float getScale();
     method public android.webkit.WebSettings getSettings();
+    method public android.view.textclassifier.TextClassifier getTextClassifier();
     method public java.lang.String getTitle();
     method public java.lang.String getUrl();
     method public android.webkit.WebChromeClient getWebChromeClient();
@@ -52475,16 +52799,19 @@
     method public void setNetworkAvailable(boolean);
     method public deprecated void setPictureListener(android.webkit.WebView.PictureListener);
     method public void setRendererPriorityPolicy(int, boolean);
+    method public static void setSafeBrowsingWhitelist(java.util.List<java.lang.String>, android.webkit.ValueCallback<java.lang.Boolean>);
+    method public void setTextClassifier(android.view.textclassifier.TextClassifier);
     method public deprecated void setVerticalScrollbarOverlay(boolean);
     method public void setWebChromeClient(android.webkit.WebChromeClient);
     method public static void setWebContentsDebuggingEnabled(boolean);
     method public void setWebViewClient(android.webkit.WebViewClient);
+    method public deprecated boolean shouldDelayChildPressedState();
     method public deprecated boolean showFindDialog(java.lang.String, boolean);
+    method public static void startSafeBrowsing(android.content.Context, android.webkit.ValueCallback<java.lang.Boolean>);
     method public void stopLoading();
     method public void zoomBy(float);
     method public boolean zoomIn();
     method public boolean zoomOut();
-    field public static final java.lang.String DATA_REDUCTION_PROXY_SETTING_CHANGED = "android.webkit.DATA_REDUCTION_PROXY_SETTING_CHANGED";
     field public static final int RENDERER_PRIORITY_BOUND = 1; // 0x1
     field public static final int RENDERER_PRIORITY_IMPORTANT = 2; // 0x2
     field public static final int RENDERER_PRIORITY_WAIVED = 0; // 0x0
@@ -52573,6 +52900,7 @@
     method public void onReceivedLoginRequest(android.webkit.WebView, java.lang.String, java.lang.String, java.lang.String);
     method public void onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError);
     method public boolean onRenderProcessGone(android.webkit.WebView, android.webkit.RenderProcessGoneDetail);
+    method public void onSafeBrowsingHit(android.webkit.WebView, android.webkit.WebResourceRequest, int, android.webkit.SafeBrowsingResponse);
     method public void onScaleChanged(android.webkit.WebView, float, float);
     method public deprecated void onTooManyRedirects(android.webkit.WebView, android.os.Message, android.os.Message);
     method public void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
@@ -52597,6 +52925,10 @@
     field public static final int ERROR_UNSAFE_RESOURCE = -16; // 0xfffffff0
     field public static final int ERROR_UNSUPPORTED_AUTH_SCHEME = -3; // 0xfffffffd
     field public static final int ERROR_UNSUPPORTED_SCHEME = -10; // 0xfffffff6
+    field public static final int SAFE_BROWSING_THREAT_MALWARE = 1; // 0x1
+    field public static final int SAFE_BROWSING_THREAT_PHISHING = 2; // 0x2
+    field public static final int SAFE_BROWSING_THREAT_UNKNOWN = 0; // 0x0
+    field public static final int SAFE_BROWSING_THREAT_UNWANTED_SOFTWARE = 3; // 0x3
   }
 
   public abstract class WebViewDatabase {
@@ -52667,7 +52999,10 @@
     method public abstract java.lang.String findAddress(java.lang.String);
     method public abstract void freeMemoryForTests();
     method public abstract java.lang.String getDefaultUserAgent(android.content.Context);
+    method public abstract android.net.Uri getSafeBrowsingPrivacyPolicyUrl();
+    method public abstract void initSafeBrowsing(android.content.Context, android.webkit.ValueCallback<java.lang.Boolean>);
     method public abstract android.net.Uri[] parseFileChooserResult(int, android.content.Intent);
+    method public abstract void setSafeBrowsingWhitelist(java.util.List<java.lang.String>, android.webkit.ValueCallback<java.lang.Boolean>);
     method public abstract void setWebContentsDebuggingEnabled(boolean);
   }
 
@@ -52873,6 +53208,7 @@
     method public void clearTextFilter();
     method public void deferNotifyDataSetChanged();
     method public void fling(int);
+    method public android.widget.AbsListView.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public int getCacheColorHint();
     method public int getCheckedItemCount();
     method public long[] getCheckedItemIds();
@@ -53039,6 +53375,9 @@
     ctor public ActionMenuView(android.content.Context);
     ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
     method public void dismissPopupMenus();
+    method protected android.widget.ActionMenuView.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
     method public android.view.Menu getMenu();
     method public android.graphics.drawable.Drawable getOverflowIcon();
     method public int getPopupTheme();
@@ -53214,7 +53553,6 @@
     method public void addAll(T...);
     method public void clear();
     method public static android.widget.ArrayAdapter<java.lang.CharSequence> createFromResource(android.content.Context, int, int);
-    method public java.lang.CharSequence[] getAutofillOptions();
     method public android.content.Context getContext();
     method public int getCount();
     method public android.content.res.Resources.Theme getDropDownViewTheme();
@@ -53304,6 +53642,7 @@
     method public void notifyDataSetChanged();
     method public void notifyDataSetInvalidated();
     method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public void setAutofillOptions(java.lang.CharSequence...);
     method public void unregisterDataSetObserver(android.database.DataSetObserver);
   }
 
@@ -53582,6 +53921,7 @@
     ctor public EditText(android.content.Context, android.util.AttributeSet, int);
     ctor public EditText(android.content.Context, android.util.AttributeSet, int, int);
     method public void extendSelection(int);
+    method public android.text.Editable getText();
     method public void selectAll();
     method public void setSelection(int, int);
     method public void setSelection(int);
@@ -53703,6 +54043,8 @@
     ctor public FrameLayout(android.content.Context, android.util.AttributeSet);
     ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int);
     ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.FrameLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public deprecated boolean getConsiderGoneChildrenWhenMeasuring();
     method public boolean getMeasureAllChildren();
     method protected void onLayout(boolean, int, int, int, int);
@@ -53749,6 +54091,9 @@
     ctor public GridLayout(android.content.Context, android.util.AttributeSet);
     ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
     ctor public GridLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.GridLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.GridLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.GridLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
     method public int getAlignmentMode();
     method public int getColumnCount();
     method public int getOrientation();
@@ -53961,6 +54306,9 @@
     ctor public LinearLayout(android.content.Context, android.util.AttributeSet);
     ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int);
     ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.LinearLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.LinearLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.LinearLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
     method public int getBaselineAlignedChildIndex();
     method public android.graphics.drawable.Drawable getDividerDrawable();
     method public int getDividerPadding();
@@ -54347,6 +54695,8 @@
     method public final synchronized void incrementSecondaryProgressBy(int);
     method public boolean isAnimating();
     method public synchronized boolean isIndeterminate();
+    method protected synchronized void onDraw(android.graphics.Canvas);
+    method protected synchronized void onMeasure(int, int);
     method public void onRestoreInstanceState(android.os.Parcelable);
     method public android.os.Parcelable onSaveInstanceState();
     method public synchronized void setIndeterminate(boolean);
@@ -54402,6 +54752,7 @@
     ctor public RadioGroup(android.content.Context, android.util.AttributeSet);
     method public void check(int);
     method public void clearCheck();
+    method public android.widget.RadioGroup.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public int getCheckedRadioButtonId();
     method public void setOnCheckedChangeListener(android.widget.RadioGroup.OnCheckedChangeListener);
   }
@@ -54444,6 +54795,7 @@
     ctor public RelativeLayout(android.content.Context, android.util.AttributeSet);
     ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int);
     ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.widget.RelativeLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public int getGravity();
     method protected void onLayout(boolean, int, int, int, int);
     method public void setGravity(int);
@@ -54987,6 +55339,7 @@
   public class TableLayout extends android.widget.LinearLayout {
     ctor public TableLayout(android.content.Context);
     ctor public TableLayout(android.content.Context, android.util.AttributeSet);
+    method public android.widget.TableLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public boolean isColumnCollapsed(int);
     method public boolean isColumnShrinkable(int);
     method public boolean isColumnStretchable(int);
@@ -55011,6 +55364,7 @@
   public class TableRow extends android.widget.LinearLayout {
     ctor public TableRow(android.content.Context);
     ctor public TableRow(android.content.Context, android.util.AttributeSet);
+    method public android.widget.TableRow.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public android.view.View getVirtualChildAt(int);
     method public int getVirtualChildCount();
   }
@@ -55352,6 +55706,7 @@
     ctor public ToggleButton(android.content.Context);
     method public java.lang.CharSequence getTextOff();
     method public java.lang.CharSequence getTextOn();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
     method public void setTextOff(java.lang.CharSequence);
     method public void setTextOn(java.lang.CharSequence);
   }
@@ -55363,6 +55718,9 @@
     ctor public Toolbar(android.content.Context, android.util.AttributeSet, int, int);
     method public void collapseActionView();
     method public void dismissPopupMenus();
+    method protected android.widget.Toolbar.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.Toolbar.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.Toolbar.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
     method public int getContentInsetEnd();
     method public int getContentInsetEndWithActions();
     method public int getContentInsetLeft();
@@ -55884,6 +56242,13 @@
   public class BaseDexClassLoader extends java.lang.ClassLoader {
     ctor public BaseDexClassLoader(java.lang.String, java.io.File, java.lang.String, java.lang.ClassLoader);
     method public java.lang.String findLibrary(java.lang.String);
+    method protected java.util.Enumeration<java.net.URL> findResources(java.lang.String);
+    method protected synchronized java.lang.Package getPackage(java.lang.String);
+  }
+
+  public final class DelegateLastClassLoader extends dalvik.system.PathClassLoader {
+    ctor public DelegateLastClassLoader(java.lang.String, java.lang.ClassLoader);
+    ctor public DelegateLastClassLoader(java.lang.String, java.lang.String, java.lang.ClassLoader);
   }
 
   public class DexClassLoader extends dalvik.system.BaseDexClassLoader {
@@ -55902,6 +56267,7 @@
   }
 
   public final class InMemoryDexClassLoader extends dalvik.system.BaseDexClassLoader {
+    ctor public InMemoryDexClassLoader(java.nio.ByteBuffer[], java.lang.ClassLoader);
     ctor public InMemoryDexClassLoader(java.nio.ByteBuffer, java.lang.ClassLoader);
   }
 
@@ -56105,6 +56471,10 @@
   public class BufferedInputStream extends java.io.FilterInputStream {
     ctor public BufferedInputStream(java.io.InputStream);
     ctor public BufferedInputStream(java.io.InputStream, int);
+    method public synchronized int available() throws java.io.IOException;
+    method public synchronized int read() throws java.io.IOException;
+    method public synchronized int read(byte[], int, int) throws java.io.IOException;
+    method public synchronized long skip(long) throws java.io.IOException;
     field protected volatile byte[] buf;
     field protected int count;
     field protected int marklimit;
@@ -56115,6 +56485,9 @@
   public class BufferedOutputStream extends java.io.FilterOutputStream {
     ctor public BufferedOutputStream(java.io.OutputStream);
     ctor public BufferedOutputStream(java.io.OutputStream, int);
+    method public synchronized void flush() throws java.io.IOException;
+    method public synchronized void write(int) throws java.io.IOException;
+    method public synchronized void write(byte[], int, int) throws java.io.IOException;
     field protected byte[] buf;
     field protected int count;
   }
@@ -56140,7 +56513,12 @@
   public class ByteArrayInputStream extends java.io.InputStream {
     ctor public ByteArrayInputStream(byte[]);
     ctor public ByteArrayInputStream(byte[], int, int);
+    method public synchronized int available();
+    method public void mark(int);
     method public synchronized int read();
+    method public synchronized int read(byte[], int, int);
+    method public synchronized void reset();
+    method public synchronized long skip(long);
     field protected byte[] buf;
     field protected int count;
     field protected int mark;
@@ -56153,9 +56531,11 @@
     method public synchronized void reset();
     method public synchronized int size();
     method public synchronized byte[] toByteArray();
+    method public synchronized java.lang.String toString();
     method public synchronized java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException;
     method public deprecated synchronized java.lang.String toString(int);
     method public synchronized void write(int);
+    method public synchronized void write(byte[], int, int);
     method public synchronized void writeTo(java.io.OutputStream) throws java.io.IOException;
     field protected byte[] buf;
     field protected int count;
@@ -56175,12 +56555,17 @@
   public class CharArrayWriter extends java.io.Writer {
     ctor public CharArrayWriter();
     ctor public CharArrayWriter(int);
+    method public java.io.CharArrayWriter append(java.lang.CharSequence);
+    method public java.io.CharArrayWriter append(java.lang.CharSequence, int, int);
+    method public java.io.CharArrayWriter append(char);
     method public void close();
     method public void flush();
     method public void reset();
     method public int size();
     method public char[] toCharArray();
+    method public void write(int);
     method public void write(char[], int, int);
+    method public void write(java.lang.String, int, int);
     method public void writeTo(java.io.Writer) throws java.io.IOException;
     field protected char[] buf;
     field protected int count;
@@ -56267,6 +56652,8 @@
   public class DataOutputStream extends java.io.FilterOutputStream implements java.io.DataOutput {
     ctor public DataOutputStream(java.io.OutputStream);
     method public final int size();
+    method public synchronized void write(int) throws java.io.IOException;
+    method public synchronized void write(byte[], int, int) throws java.io.IOException;
     method public final void writeBoolean(boolean) throws java.io.IOException;
     method public final void writeByte(int) throws java.io.IOException;
     method public final void writeBytes(java.lang.String) throws java.io.IOException;
@@ -56366,6 +56753,7 @@
     ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException;
     ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException;
     ctor public FileInputStream(java.io.FileDescriptor);
+    method protected void finalize() throws java.io.IOException;
     method public java.nio.channels.FileChannel getChannel();
     method public final java.io.FileDescriptor getFD() throws java.io.IOException;
     method public int read() throws java.io.IOException;
@@ -56382,6 +56770,7 @@
     ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException;
     ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException;
     ctor public FileOutputStream(java.io.FileDescriptor);
+    method protected void finalize() throws java.io.IOException;
     method public java.nio.channels.FileChannel getChannel();
     method public final java.io.FileDescriptor getFD() throws java.io.IOException;
     method public void write(int) throws java.io.IOException;
@@ -56495,6 +56884,8 @@
   public deprecated class LineNumberInputStream extends java.io.FilterInputStream {
     ctor public LineNumberInputStream(java.io.InputStream);
     method public int getLineNumber();
+    method public void mark(int);
+    method public void reset() throws java.io.IOException;
     method public void setLineNumber(int);
   }
 
@@ -56724,8 +57115,10 @@
     ctor public PipedInputStream(java.io.PipedOutputStream, int) throws java.io.IOException;
     ctor public PipedInputStream();
     ctor public PipedInputStream(int);
+    method public synchronized int available() throws java.io.IOException;
     method public void connect(java.io.PipedOutputStream) throws java.io.IOException;
     method public synchronized int read() throws java.io.IOException;
+    method public synchronized int read(byte[], int, int) throws java.io.IOException;
     method protected synchronized void receive(int) throws java.io.IOException;
     field protected static final int PIPE_SIZE = 1024; // 0x400
     field protected byte[] buffer;
@@ -56737,6 +57130,7 @@
     ctor public PipedOutputStream(java.io.PipedInputStream) throws java.io.IOException;
     ctor public PipedOutputStream();
     method public synchronized void connect(java.io.PipedInputStream) throws java.io.IOException;
+    method public synchronized void flush() throws java.io.IOException;
     method public void write(int) throws java.io.IOException;
   }
 
@@ -56747,7 +57141,9 @@
     ctor public PipedReader(int);
     method public void close() throws java.io.IOException;
     method public void connect(java.io.PipedWriter) throws java.io.IOException;
+    method public synchronized int read() throws java.io.IOException;
     method public synchronized int read(char[], int, int) throws java.io.IOException;
+    method public synchronized boolean ready() throws java.io.IOException;
   }
 
   public class PipedWriter extends java.io.Writer {
@@ -56772,6 +57168,8 @@
     method public java.io.PrintStream append(char);
     method public boolean checkError();
     method protected void clearError();
+    method public void close();
+    method public void flush();
     method public java.io.PrintStream format(java.lang.String, java.lang.Object...);
     method public java.io.PrintStream format(java.util.Locale, java.lang.String, java.lang.Object...);
     method public void print(boolean);
@@ -56796,6 +57194,8 @@
     method public void println(java.lang.String);
     method public void println(java.lang.Object);
     method protected void setError();
+    method public void write(int);
+    method public void write(byte[], int, int);
   }
 
   public class PrintWriter extends java.io.Writer {
@@ -56807,6 +57207,9 @@
     ctor public PrintWriter(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
     ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException;
     ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    method public java.io.PrintWriter append(java.lang.CharSequence);
+    method public java.io.PrintWriter append(java.lang.CharSequence, int, int);
+    method public java.io.PrintWriter append(char);
     method public boolean checkError();
     method protected void clearError();
     method public void close();
@@ -56835,13 +57238,18 @@
     method public void println(java.lang.String);
     method public void println(java.lang.Object);
     method protected void setError();
+    method public void write(int);
     method public void write(char[], int, int);
+    method public void write(char[]);
+    method public void write(java.lang.String, int, int);
+    method public void write(java.lang.String);
     field protected java.io.Writer out;
   }
 
   public class PushbackInputStream extends java.io.FilterInputStream {
     ctor public PushbackInputStream(java.io.InputStream, int);
     ctor public PushbackInputStream(java.io.InputStream);
+    method public synchronized void close() throws java.io.IOException;
     method public void unread(int) throws java.io.IOException;
     method public void unread(byte[], int, int) throws java.io.IOException;
     method public void unread(byte[]) throws java.io.IOException;
@@ -56965,7 +57373,11 @@
 
   public deprecated class StringBufferInputStream extends java.io.InputStream {
     ctor public StringBufferInputStream(java.lang.String);
+    method public synchronized int available();
     method public synchronized int read();
+    method public synchronized int read(byte[], int, int);
+    method public synchronized void reset();
+    method public synchronized long skip(long);
     field protected java.lang.String buffer;
     field protected int count;
     field protected int pos;
@@ -56980,10 +57392,16 @@
   public class StringWriter extends java.io.Writer {
     ctor public StringWriter();
     ctor public StringWriter(int);
+    method public java.io.StringWriter append(java.lang.CharSequence);
+    method public java.io.StringWriter append(java.lang.CharSequence, int, int);
+    method public java.io.StringWriter append(char);
     method public void close() throws java.io.IOException;
     method public void flush();
     method public java.lang.StringBuffer getBuffer();
+    method public void write(int);
     method public void write(char[], int, int);
+    method public void write(java.lang.String);
+    method public void write(java.lang.String, int, int);
   }
 
   public class SyncFailedException extends java.io.IOException {
@@ -56998,6 +57416,7 @@
   public class UncheckedIOException extends java.lang.RuntimeException {
     ctor public UncheckedIOException(java.lang.String, java.io.IOException);
     ctor public UncheckedIOException(java.io.IOException);
+    method public java.io.IOException getCause();
   }
 
   public class UnsupportedEncodingException extends java.io.IOException {
@@ -57007,6 +57426,7 @@
 
   public class WriteAbortedException extends java.io.ObjectStreamException {
     ctor public WriteAbortedException(java.lang.String, java.lang.Exception);
+    method public java.lang.Throwable getCause();
     field public java.lang.Exception detail;
   }
 
@@ -57774,6 +58194,7 @@
     ctor public ClassNotFoundException();
     ctor public ClassNotFoundException(java.lang.String);
     ctor public ClassNotFoundException(java.lang.String, java.lang.Throwable);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getException();
   }
 
@@ -57878,6 +58299,7 @@
     ctor public ExceptionInInitializerError();
     ctor public ExceptionInInitializerError(java.lang.Throwable);
     ctor public ExceptionInInitializerError(java.lang.String);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getException();
   }
 
@@ -58665,8 +59087,16 @@
     method public synchronized java.lang.StringBuffer append(float);
     method public synchronized java.lang.StringBuffer append(double);
     method public synchronized java.lang.StringBuffer appendCodePoint(int);
+    method public synchronized int capacity();
+    method public synchronized char charAt(int);
+    method public synchronized int codePointAt(int);
+    method public synchronized int codePointBefore(int);
+    method public synchronized int codePointCount(int, int);
     method public synchronized java.lang.StringBuffer delete(int, int);
     method public synchronized java.lang.StringBuffer deleteCharAt(int);
+    method public synchronized void ensureCapacity(int);
+    method public synchronized void getChars(int, int, char[], int);
+    method public synchronized int indexOf(java.lang.String, int);
     method public synchronized java.lang.StringBuffer insert(int, char[], int, int);
     method public synchronized java.lang.StringBuffer insert(int, java.lang.Object);
     method public synchronized java.lang.StringBuffer insert(int, java.lang.String);
@@ -58679,9 +59109,18 @@
     method public java.lang.StringBuffer insert(int, long);
     method public java.lang.StringBuffer insert(int, float);
     method public java.lang.StringBuffer insert(int, double);
+    method public synchronized int lastIndexOf(java.lang.String, int);
+    method public synchronized int length();
+    method public synchronized int offsetByCodePoints(int, int);
     method public synchronized java.lang.StringBuffer replace(int, int, java.lang.String);
     method public synchronized java.lang.StringBuffer reverse();
+    method public synchronized void setCharAt(int, char);
+    method public synchronized void setLength(int);
+    method public synchronized java.lang.CharSequence subSequence(int, int);
+    method public synchronized java.lang.String substring(int);
+    method public synchronized java.lang.String substring(int, int);
     method public synchronized java.lang.String toString();
+    method public synchronized void trimToSize();
   }
 
   public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable {
@@ -59336,6 +59775,7 @@
     ctor protected InvocationTargetException();
     ctor public InvocationTargetException(java.lang.Throwable);
     ctor public InvocationTargetException(java.lang.Throwable, java.lang.String);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getTargetException();
   }
 
@@ -59451,6 +59891,7 @@
   public class UndeclaredThrowableException extends java.lang.RuntimeException {
     ctor public UndeclaredThrowableException(java.lang.Throwable);
     ctor public UndeclaredThrowableException(java.lang.Throwable, java.lang.String);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getUndeclaredThrowable();
   }
 
@@ -60348,6 +60789,7 @@
     method public java.lang.String getQuery();
     method public java.lang.String getRef();
     method public java.lang.String getUserInfo();
+    method public synchronized int hashCode();
     method public java.net.URLConnection openConnection() throws java.io.IOException;
     method public java.net.URLConnection openConnection(java.net.Proxy) throws java.io.IOException;
     method public final java.io.InputStream openStream() throws java.io.IOException;
@@ -60577,7 +61019,6 @@
     method public final int arrayOffset();
     method public abstract java.nio.CharBuffer asReadOnlyBuffer();
     method public final char charAt(int);
-    method public java.util.stream.IntStream chars();
     method public abstract java.nio.CharBuffer compact();
     method public int compareTo(java.nio.CharBuffer);
     method public abstract java.nio.CharBuffer duplicate();
@@ -61434,6 +61875,7 @@
 
   public final class DirectoryIteratorException extends java.util.ConcurrentModificationException {
     ctor public DirectoryIteratorException(java.io.IOException);
+    method public java.io.IOException getCause();
   }
 
   public class DirectoryNotEmptyException extends java.nio.file.FileSystemException {
@@ -62399,9 +62841,11 @@
   public static class KeyStore.PasswordProtection implements javax.security.auth.Destroyable java.security.KeyStore.ProtectionParameter {
     ctor public KeyStore.PasswordProtection(char[]);
     ctor public KeyStore.PasswordProtection(char[], java.lang.String, java.security.spec.AlgorithmParameterSpec);
+    method public synchronized void destroy() throws javax.security.auth.DestroyFailedException;
     method public synchronized char[] getPassword();
     method public java.lang.String getProtectionAlgorithm();
     method public java.security.spec.AlgorithmParameterSpec getProtectionParameters();
+    method public synchronized boolean isDestroyed();
   }
 
   public static final class KeyStore.PrivateKeyEntry implements java.security.KeyStore.Entry {
@@ -62581,6 +63025,7 @@
 
   public class PrivilegedActionException extends java.lang.Exception {
     ctor public PrivilegedActionException(java.lang.Exception);
+    method public java.lang.Throwable getCause();
     method public java.lang.Exception getException();
   }
 
@@ -62603,22 +63048,30 @@
     method public synchronized java.lang.Object compute(java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
     method public synchronized java.lang.Object computeIfAbsent(java.lang.Object, java.util.function.Function<? super java.lang.Object, ? extends java.lang.Object>);
     method public synchronized java.lang.Object computeIfPresent(java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
+    method public java.util.Enumeration<java.lang.Object> elements();
+    method public synchronized java.util.Set<java.util.Map.Entry<java.lang.Object, java.lang.Object>> entrySet();
     method public synchronized void forEach(java.util.function.BiConsumer<? super java.lang.Object, ? super java.lang.Object>);
+    method public java.lang.Object get(java.lang.Object);
     method public java.lang.String getInfo();
     method public java.lang.String getName();
     method public synchronized java.lang.Object getOrDefault(java.lang.Object, java.lang.Object);
     method public synchronized java.security.Provider.Service getService(java.lang.String, java.lang.String);
     method public synchronized java.util.Set<java.security.Provider.Service> getServices();
     method public double getVersion();
+    method public java.util.Set<java.lang.Object> keySet();
+    method public java.util.Enumeration<java.lang.Object> keys();
     method public synchronized java.lang.Object merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
     method public synchronized java.lang.Object put(java.lang.Object, java.lang.Object);
     method public synchronized void putAll(java.util.Map<?, ?>);
     method public synchronized java.lang.Object putIfAbsent(java.lang.Object, java.lang.Object);
     method protected synchronized void putService(java.security.Provider.Service);
+    method public synchronized java.lang.Object remove(java.lang.Object);
     method protected synchronized void removeService(java.security.Provider.Service);
     method public synchronized boolean replace(java.lang.Object, java.lang.Object, java.lang.Object);
     method public synchronized java.lang.Object replace(java.lang.Object, java.lang.Object);
     method public synchronized void replaceAll(java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
+    method public java.lang.String toString();
+    method public java.util.Collection<java.lang.Object> values();
   }
 
   public static class Provider.Service {
@@ -62664,7 +63117,9 @@
     method public final java.security.Provider getProvider();
     method public static byte[] getSeed(int);
     method protected final int next(int);
+    method public synchronized void nextBytes(byte[]);
     method public synchronized void setSeed(byte[]);
+    method public void setSeed(long);
   }
 
   public abstract class SecureRandomSpi implements java.io.Serializable {
@@ -63211,6 +63666,7 @@
 
   public abstract class PKIXRevocationChecker extends java.security.cert.PKIXCertPathChecker {
     ctor protected PKIXRevocationChecker();
+    method public java.security.cert.PKIXRevocationChecker clone();
     method public java.util.List<java.security.cert.Extension> getOcspExtensions();
     method public java.net.URI getOcspResponder();
     method public java.security.cert.X509Certificate getOcspResponderCert();
@@ -65463,7 +65919,6 @@
   public final class DayOfWeek extends java.lang.Enum implements java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
     method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
     method public static java.time.DayOfWeek from(java.time.temporal.TemporalAccessor);
-    method public int get(java.time.temporal.TemporalField);
     method public java.lang.String getDisplayName(java.time.format.TextStyle, java.util.Locale);
     method public long getLong(java.time.temporal.TemporalField);
     method public int getValue();
@@ -65471,8 +65926,6 @@
     method public java.time.DayOfWeek minus(long);
     method public static java.time.DayOfWeek of(int);
     method public java.time.DayOfWeek plus(long);
-    method public <R> R query(java.time.temporal.TemporalQuery<R>);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
     method public static java.time.DayOfWeek valueOf(java.lang.String);
     method public static final java.time.DayOfWeek[] values();
     enum_constant public static final java.time.DayOfWeek FRIDAY;
@@ -65548,6 +66001,8 @@
     method public boolean isBefore(java.time.Instant);
     method public boolean isSupported(java.time.temporal.TemporalField);
     method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.Instant minus(java.time.temporal.TemporalAmount);
+    method public java.time.Instant minus(long, java.time.temporal.TemporalUnit);
     method public java.time.Instant minusMillis(long);
     method public java.time.Instant minusNanos(long);
     method public java.time.Instant minusSeconds(long);
@@ -65557,6 +66012,7 @@
     method public static java.time.Instant ofEpochSecond(long);
     method public static java.time.Instant ofEpochSecond(long, long);
     method public static java.time.Instant parse(java.lang.CharSequence);
+    method public java.time.Instant plus(java.time.temporal.TemporalAmount);
     method public java.time.Instant plus(long, java.time.temporal.TemporalUnit);
     method public java.time.Instant plusMillis(long);
     method public java.time.Instant plusNanos(long);
@@ -65564,6 +66020,7 @@
     method public long toEpochMilli();
     method public java.time.Instant truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.Instant with(java.time.temporal.TemporalAdjuster);
     method public java.time.Instant with(java.time.temporal.TemporalField, long);
     field public static final java.time.Instant EPOCH;
     field public static final java.time.Instant MAX;
@@ -65573,6 +66030,7 @@
   public final class LocalDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
     method public java.time.LocalDateTime atStartOfDay();
     method public java.time.ZonedDateTime atStartOfDay(java.time.ZoneId);
+    method public java.time.LocalDateTime atTime(java.time.LocalTime);
     method public java.time.LocalDateTime atTime(int, int);
     method public java.time.LocalDateTime atTime(int, int, int);
     method public java.time.LocalDateTime atTime(int, int, int, int);
@@ -65587,6 +66045,8 @@
     method public int getMonthValue();
     method public int getYear();
     method public int lengthOfMonth();
+    method public java.time.LocalDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDate minus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalDate minusDays(long);
     method public java.time.LocalDate minusMonths(long);
     method public java.time.LocalDate minusWeeks(long);
@@ -65600,12 +66060,16 @@
     method public static java.time.LocalDate ofYearDay(int, int);
     method public static java.time.LocalDate parse(java.lang.CharSequence);
     method public static java.time.LocalDate parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalDate plusDays(long);
     method public java.time.LocalDate plusMonths(long);
     method public java.time.LocalDate plusWeeks(long);
     method public java.time.LocalDate plusYears(long);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
     method public java.time.Period until(java.time.chrono.ChronoLocalDate);
+    method public java.time.LocalDate with(java.time.temporal.TemporalAdjuster);
+    method public java.time.LocalDate with(java.time.temporal.TemporalField, long);
     method public java.time.LocalDate withDayOfMonth(int);
     method public java.time.LocalDate withDayOfYear(int);
     method public java.time.LocalDate withMonth(int);
@@ -65630,6 +66094,8 @@
     method public int getSecond();
     method public int getYear();
     method public boolean isSupported(java.time.temporal.TemporalField);
+    method public java.time.LocalDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDateTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalDateTime minusDays(long);
     method public java.time.LocalDateTime minusHours(long);
     method public java.time.LocalDateTime minusMinutes(long);
@@ -65652,6 +66118,7 @@
     method public static java.time.LocalDateTime ofInstant(java.time.Instant, java.time.ZoneId);
     method public static java.time.LocalDateTime parse(java.lang.CharSequence);
     method public static java.time.LocalDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalDateTime plus(java.time.temporal.TemporalAmount);
     method public java.time.LocalDateTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalDateTime plusDays(long);
     method public java.time.LocalDateTime plusHours(long);
@@ -65665,6 +66132,7 @@
     method public java.time.LocalTime toLocalTime();
     method public java.time.LocalDateTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.LocalDateTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.LocalDateTime with(java.time.temporal.TemporalField, long);
     method public java.time.LocalDateTime withDayOfMonth(int);
     method public java.time.LocalDateTime withDayOfYear(int);
@@ -65694,6 +66162,8 @@
     method public boolean isBefore(java.time.LocalTime);
     method public boolean isSupported(java.time.temporal.TemporalField);
     method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalTime minusHours(long);
     method public java.time.LocalTime minusMinutes(long);
     method public java.time.LocalTime minusNanos(long);
@@ -65708,6 +66178,7 @@
     method public static java.time.LocalTime ofSecondOfDay(long);
     method public static java.time.LocalTime parse(java.lang.CharSequence);
     method public static java.time.LocalTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalTime plus(java.time.temporal.TemporalAmount);
     method public java.time.LocalTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalTime plusHours(long);
     method public java.time.LocalTime plusMinutes(long);
@@ -65717,6 +66188,7 @@
     method public int toSecondOfDay();
     method public java.time.LocalTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.LocalTime with(java.time.temporal.TemporalField, long);
     method public java.time.LocalTime withHour(int);
     method public java.time.LocalTime withMinute(int);
@@ -65733,7 +66205,6 @@
     method public int firstDayOfYear(boolean);
     method public java.time.Month firstMonthOfQuarter();
     method public static java.time.Month from(java.time.temporal.TemporalAccessor);
-    method public int get(java.time.temporal.TemporalField);
     method public java.lang.String getDisplayName(java.time.format.TextStyle, java.util.Locale);
     method public long getLong(java.time.temporal.TemporalField);
     method public int getValue();
@@ -65744,8 +66215,6 @@
     method public java.time.Month minus(long);
     method public static java.time.Month of(int);
     method public java.time.Month plus(long);
-    method public <R> R query(java.time.temporal.TemporalQuery<R>);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
     method public static java.time.Month valueOf(java.lang.String);
     method public static final java.time.Month[] values();
     enum_constant public static final java.time.Month APRIL;
@@ -65812,6 +66281,8 @@
     method public boolean isEqual(java.time.OffsetDateTime);
     method public boolean isSupported(java.time.temporal.TemporalField);
     method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetDateTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.OffsetDateTime minusDays(long);
     method public java.time.OffsetDateTime minusHours(long);
     method public java.time.OffsetDateTime minusMinutes(long);
@@ -65829,6 +66300,7 @@
     method public static java.time.OffsetDateTime ofInstant(java.time.Instant, java.time.ZoneId);
     method public static java.time.OffsetDateTime parse(java.lang.CharSequence);
     method public static java.time.OffsetDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.OffsetDateTime plus(java.time.temporal.TemporalAmount);
     method public java.time.OffsetDateTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.OffsetDateTime plusDays(long);
     method public java.time.OffsetDateTime plusHours(long);
@@ -65848,6 +66320,7 @@
     method public java.time.ZonedDateTime toZonedDateTime();
     method public java.time.OffsetDateTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.OffsetDateTime with(java.time.temporal.TemporalField, long);
     method public java.time.OffsetDateTime withDayOfMonth(int);
     method public java.time.OffsetDateTime withDayOfYear(int);
@@ -65880,6 +66353,8 @@
     method public boolean isEqual(java.time.OffsetTime);
     method public boolean isSupported(java.time.temporal.TemporalField);
     method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.OffsetTime minusHours(long);
     method public java.time.OffsetTime minusMinutes(long);
     method public java.time.OffsetTime minusNanos(long);
@@ -65892,6 +66367,7 @@
     method public static java.time.OffsetTime ofInstant(java.time.Instant, java.time.ZoneId);
     method public static java.time.OffsetTime parse(java.lang.CharSequence);
     method public static java.time.OffsetTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.OffsetTime plus(java.time.temporal.TemporalAmount);
     method public java.time.OffsetTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.OffsetTime plusHours(long);
     method public java.time.OffsetTime plusMinutes(long);
@@ -65900,6 +66376,7 @@
     method public java.time.LocalTime toLocalTime();
     method public java.time.OffsetTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.OffsetTime with(java.time.temporal.TemporalField, long);
     method public java.time.OffsetTime withHour(int);
     method public java.time.OffsetTime withMinute(int);
@@ -65926,6 +66403,7 @@
     method public java.time.Period minusMonths(long);
     method public java.time.Period minusYears(long);
     method public java.time.Period multipliedBy(int);
+    method public java.time.Period negated();
     method public java.time.Period normalized();
     method public static java.time.Period of(int, int, int);
     method public static java.time.Period ofDays(int);
@@ -65964,6 +66442,8 @@
     method public boolean isSupported(java.time.temporal.TemporalUnit);
     method public boolean isValidMonthDay(java.time.MonthDay);
     method public int length();
+    method public java.time.Year minus(java.time.temporal.TemporalAmount);
+    method public java.time.Year minus(long, java.time.temporal.TemporalUnit);
     method public java.time.Year minusYears(long);
     method public static java.time.Year now();
     method public static java.time.Year now(java.time.ZoneId);
@@ -65971,9 +66451,11 @@
     method public static java.time.Year of(int);
     method public static java.time.Year parse(java.lang.CharSequence);
     method public static java.time.Year parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.Year plus(java.time.temporal.TemporalAmount);
     method public java.time.Year plus(long, java.time.temporal.TemporalUnit);
     method public java.time.Year plusYears(long);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.Year with(java.time.temporal.TemporalAdjuster);
     method public java.time.Year with(java.time.temporal.TemporalField, long);
     field public static final int MAX_VALUE = 999999999; // 0x3b9ac9ff
     field public static final int MIN_VALUE = -999999999; // 0xc4653601
@@ -65998,6 +66480,8 @@
     method public boolean isValidDay(int);
     method public int lengthOfMonth();
     method public int lengthOfYear();
+    method public java.time.YearMonth minus(java.time.temporal.TemporalAmount);
+    method public java.time.YearMonth minus(long, java.time.temporal.TemporalUnit);
     method public java.time.YearMonth minusMonths(long);
     method public java.time.YearMonth minusYears(long);
     method public static java.time.YearMonth now();
@@ -66007,10 +66491,12 @@
     method public static java.time.YearMonth of(int, int);
     method public static java.time.YearMonth parse(java.lang.CharSequence);
     method public static java.time.YearMonth parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.YearMonth plus(java.time.temporal.TemporalAmount);
     method public java.time.YearMonth plus(long, java.time.temporal.TemporalUnit);
     method public java.time.YearMonth plusMonths(long);
     method public java.time.YearMonth plusYears(long);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.YearMonth with(java.time.temporal.TemporalAdjuster);
     method public java.time.YearMonth with(java.time.temporal.TemporalField, long);
     method public java.time.YearMonth withMonth(int);
     method public java.time.YearMonth withYear(int);
@@ -66034,7 +66520,6 @@
     method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
     method public int compareTo(java.time.ZoneOffset);
     method public static java.time.ZoneOffset from(java.time.temporal.TemporalAccessor);
-    method public int get(java.time.temporal.TemporalField);
     method public java.lang.String getId();
     method public long getLong(java.time.temporal.TemporalField);
     method public java.time.zone.ZoneRules getRules();
@@ -66045,8 +66530,6 @@
     method public static java.time.ZoneOffset ofHoursMinutes(int, int);
     method public static java.time.ZoneOffset ofHoursMinutesSeconds(int, int, int);
     method public static java.time.ZoneOffset ofTotalSeconds(int);
-    method public <R> R query(java.time.temporal.TemporalQuery<R>);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
     field public static final java.time.ZoneOffset MAX;
     field public static final java.time.ZoneOffset MIN;
     field public static final java.time.ZoneOffset UTC;
@@ -66067,6 +66550,8 @@
     method public int getYear();
     method public java.time.ZoneId getZone();
     method public boolean isSupported(java.time.temporal.TemporalField);
+    method public java.time.ZonedDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.ZonedDateTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.ZonedDateTime minusDays(long);
     method public java.time.ZonedDateTime minusHours(long);
     method public java.time.ZonedDateTime minusMinutes(long);
@@ -66087,6 +66572,7 @@
     method public static java.time.ZonedDateTime ofStrict(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneId);
     method public static java.time.ZonedDateTime parse(java.lang.CharSequence);
     method public static java.time.ZonedDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.ZonedDateTime plus(java.time.temporal.TemporalAmount);
     method public java.time.ZonedDateTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.ZonedDateTime plusDays(long);
     method public java.time.ZonedDateTime plusHours(long);
@@ -66096,10 +66582,12 @@
     method public java.time.ZonedDateTime plusSeconds(long);
     method public java.time.ZonedDateTime plusWeeks(long);
     method public java.time.ZonedDateTime plusYears(long);
+    method public java.time.LocalDate toLocalDate();
     method public java.time.LocalDateTime toLocalDateTime();
     method public java.time.OffsetDateTime toOffsetDateTime();
     method public java.time.ZonedDateTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.ZonedDateTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.ZonedDateTime with(java.time.temporal.TemporalField, long);
     method public java.time.ZonedDateTime withDayOfMonth(int);
     method public java.time.ZonedDateTime withDayOfYear(int);
@@ -66144,17 +66632,27 @@
     method public default boolean isSupported(java.time.temporal.TemporalUnit);
     method public abstract int lengthOfMonth();
     method public default int lengthOfYear();
+    method public default java.time.chrono.ChronoLocalDate minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoLocalDate minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDate plus(java.time.temporal.TemporalAmount);
     method public default java.time.chrono.ChronoLocalDate plus(long, java.time.temporal.TemporalUnit);
     method public static java.util.Comparator<java.time.chrono.ChronoLocalDate> timeLineOrder();
     method public default long toEpochDay();
     method public abstract java.lang.String toString();
     method public abstract long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
     method public abstract java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalAdjuster);
     method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalField, long);
   }
 
    abstract class ChronoLocalDateImpl<D extends java.time.chrono.ChronoLocalDate> implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public D minus(java.time.temporal.TemporalAmount);
+    method public D minus(long, java.time.temporal.TemporalUnit);
+    method public D plus(java.time.temporal.TemporalAmount);
+    method public D plus(long, java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public D with(java.time.temporal.TemporalAdjuster);
+    method public D with(java.time.temporal.TemporalField, long);
   }
 
   public abstract interface ChronoLocalDateTime<D extends java.time.chrono.ChronoLocalDate> implements java.lang.Comparable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
@@ -66171,6 +66669,9 @@
     method public default boolean isEqual(java.time.chrono.ChronoLocalDateTime<?>);
     method public abstract boolean isSupported(java.time.temporal.TemporalField);
     method public default boolean isSupported(java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDateTime<D> minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoLocalDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDateTime<D> plus(java.time.temporal.TemporalAmount);
     method public abstract java.time.chrono.ChronoLocalDateTime<D> plus(long, java.time.temporal.TemporalUnit);
     method public static java.util.Comparator<java.time.chrono.ChronoLocalDateTime<?>> timeLineOrder();
     method public default long toEpochSecond(java.time.ZoneOffset);
@@ -66178,6 +66679,7 @@
     method public abstract D toLocalDate();
     method public abstract java.time.LocalTime toLocalTime();
     method public abstract java.lang.String toString();
+    method public default java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalAdjuster);
     method public abstract java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalField, long);
   }
 
@@ -66215,6 +66717,9 @@
     method public default boolean isEqual(java.time.chrono.ChronoZonedDateTime<?>);
     method public abstract boolean isSupported(java.time.temporal.TemporalField);
     method public default boolean isSupported(java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoZonedDateTime<D> minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoZonedDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoZonedDateTime<D> plus(java.time.temporal.TemporalAmount);
     method public abstract java.time.chrono.ChronoZonedDateTime<D> plus(long, java.time.temporal.TemporalUnit);
     method public static java.util.Comparator<java.time.chrono.ChronoZonedDateTime<?>> timeLineOrder();
     method public default long toEpochSecond();
@@ -66223,6 +66728,7 @@
     method public abstract java.time.chrono.ChronoLocalDateTime<D> toLocalDateTime();
     method public default java.time.LocalTime toLocalTime();
     method public abstract java.lang.String toString();
+    method public default java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalAdjuster);
     method public abstract java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalField, long);
     method public abstract java.time.chrono.ChronoZonedDateTime<D> withEarlierOffsetAtOverlap();
     method public abstract java.time.chrono.ChronoZonedDateTime<D> withLaterOffsetAtOverlap();
@@ -66289,6 +66795,7 @@
     method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.HijrahDate> localDateTime(java.time.temporal.TemporalAccessor);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.HijrahDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.HijrahChronology INSTANCE;
@@ -66300,23 +66807,24 @@
     method public java.time.chrono.HijrahChronology getChronology();
     method public java.time.chrono.HijrahEra getEra();
     method public long getLong(java.time.temporal.TemporalField);
-    method public boolean isLeapYear();
     method public int lengthOfMonth();
-    method public int lengthOfYear();
+    method public java.time.chrono.HijrahDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.HijrahDate minus(long, java.time.temporal.TemporalUnit);
     method public static java.time.chrono.HijrahDate now();
     method public static java.time.chrono.HijrahDate now(java.time.ZoneId);
     method public static java.time.chrono.HijrahDate now(java.time.Clock);
     method public static java.time.chrono.HijrahDate of(int, int, int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
-    method public long toEpochDay();
+    method public java.time.chrono.HijrahDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.HijrahDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalAdjuster);
     method public java.time.chrono.HijrahDate withVariant(java.time.chrono.HijrahChronology);
   }
 
   public final class HijrahEra extends java.lang.Enum implements java.time.chrono.Era {
     method public int getValue();
     method public static java.time.chrono.HijrahEra of(int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
     method public static java.time.chrono.HijrahEra valueOf(java.lang.String);
     method public static final java.time.chrono.HijrahEra[] values();
     enum_constant public static final java.time.chrono.HijrahEra AH;
@@ -66341,6 +66849,7 @@
     method public java.time.Period period(int, int, int);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.LocalDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.ZonedDateTime zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.ZonedDateTime zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.IsoChronology INSTANCE;
@@ -66373,6 +66882,7 @@
     method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.JapaneseDate> localDateTime(java.time.temporal.TemporalAccessor);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.JapaneseDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.JapaneseChronology INSTANCE;
@@ -66384,17 +66894,19 @@
     method public java.time.chrono.JapaneseChronology getChronology();
     method public java.time.chrono.JapaneseEra getEra();
     method public long getLong(java.time.temporal.TemporalField);
-    method public boolean isSupported(java.time.temporal.TemporalField);
     method public int lengthOfMonth();
-    method public int lengthOfYear();
+    method public java.time.chrono.JapaneseDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.JapaneseDate minus(long, java.time.temporal.TemporalUnit);
     method public static java.time.chrono.JapaneseDate now();
     method public static java.time.chrono.JapaneseDate now(java.time.ZoneId);
     method public static java.time.chrono.JapaneseDate now(java.time.Clock);
     method public static java.time.chrono.JapaneseDate of(java.time.chrono.JapaneseEra, int, int, int);
     method public static java.time.chrono.JapaneseDate of(int, int, int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
-    method public long toEpochDay();
+    method public java.time.chrono.JapaneseDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.JapaneseDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalAdjuster);
   }
 
   public final class JapaneseEra implements java.time.chrono.Era java.io.Serializable {
@@ -66426,6 +66938,7 @@
     method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.MinguoDate> localDateTime(java.time.temporal.TemporalAccessor);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.MinguoDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.MinguoChronology INSTANCE;
@@ -66438,13 +66951,17 @@
     method public java.time.chrono.MinguoEra getEra();
     method public long getLong(java.time.temporal.TemporalField);
     method public int lengthOfMonth();
+    method public java.time.chrono.MinguoDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.MinguoDate minus(long, java.time.temporal.TemporalUnit);
     method public static java.time.chrono.MinguoDate now();
     method public static java.time.chrono.MinguoDate now(java.time.ZoneId);
     method public static java.time.chrono.MinguoDate now(java.time.Clock);
     method public static java.time.chrono.MinguoDate of(int, int, int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
-    method public long toEpochDay();
+    method public java.time.chrono.MinguoDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.MinguoDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalAdjuster);
   }
 
   public final class MinguoEra extends java.lang.Enum implements java.time.chrono.Era {
@@ -66474,6 +66991,7 @@
     method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.ThaiBuddhistDate> localDateTime(java.time.temporal.TemporalAccessor);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.ThaiBuddhistDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.ThaiBuddhistChronology INSTANCE;
@@ -66486,13 +67004,17 @@
     method public java.time.chrono.ThaiBuddhistEra getEra();
     method public long getLong(java.time.temporal.TemporalField);
     method public int lengthOfMonth();
+    method public java.time.chrono.ThaiBuddhistDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ThaiBuddhistDate minus(long, java.time.temporal.TemporalUnit);
     method public static java.time.chrono.ThaiBuddhistDate now();
     method public static java.time.chrono.ThaiBuddhistDate now(java.time.ZoneId);
     method public static java.time.chrono.ThaiBuddhistDate now(java.time.Clock);
     method public static java.time.chrono.ThaiBuddhistDate of(int, int, int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
-    method public long toEpochDay();
+    method public java.time.chrono.ThaiBuddhistDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ThaiBuddhistDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalAdjuster);
   }
 
   public final class ThaiBuddhistEra extends java.lang.Enum implements java.time.chrono.Era {
@@ -66671,7 +67193,6 @@
     method public int checkValidIntValue(long);
     method public long checkValidValue(long);
     method public java.time.temporal.TemporalUnit getBaseUnit();
-    method public java.lang.String getDisplayName(java.util.Locale);
     method public long getFrom(java.time.temporal.TemporalAccessor);
     method public java.time.temporal.TemporalUnit getRangeUnit();
     method public boolean isDateBased();
@@ -66719,7 +67240,6 @@
     method public java.time.Duration getDuration();
     method public boolean isDateBased();
     method public boolean isDurationEstimated();
-    method public boolean isSupportedBy(java.time.temporal.Temporal);
     method public boolean isTimeBased();
     method public static java.time.temporal.ChronoUnit valueOf(java.lang.String);
     method public static final java.time.temporal.ChronoUnit[] values();
@@ -67059,7 +67579,6 @@
     method public E removeLast();
     method public boolean removeLastOccurrence(java.lang.Object);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public class ArrayList<E> extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
@@ -67070,11 +67589,7 @@
     method public void ensureCapacity(int);
     method public void forEach(java.util.function.Consumer<? super E>);
     method public E get(int);
-    method public boolean removeIf(java.util.function.Predicate<? super E>);
-    method public void replaceAll(java.util.function.UnaryOperator<E>);
     method public int size();
-    method public void sort(java.util.Comparator<? super E>);
-    method public java.util.Spliterator<E> spliterator();
     method public void trimToSize();
   }
 
@@ -67445,6 +67960,7 @@
     method public default boolean removeIf(java.util.function.Predicate<? super E>);
     method public abstract boolean retainAll(java.util.Collection<?>);
     method public abstract int size();
+    method public default java.util.Spliterator<E> spliterator();
     method public default java.util.stream.Stream<E> stream();
     method public abstract java.lang.Object[] toArray();
     method public abstract <T> T[] toArray(T[]);
@@ -67785,18 +68301,7 @@
     ctor public HashMap();
     ctor public HashMap(java.util.Map<? extends K, ? extends V>);
     method public java.lang.Object clone();
-    method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
-    method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
-    method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
-    method public V getOrDefault(java.lang.Object, V);
-    method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
-    method public V putIfAbsent(K, V);
-    method public boolean remove(java.lang.Object, java.lang.Object);
-    method public boolean replace(K, V, V);
-    method public V replace(K, V);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
   }
 
   public class HashSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
@@ -67807,7 +68312,6 @@
     method public java.lang.Object clone();
     method public java.util.Iterator<E> iterator();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public class Hashtable<K, V> extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
@@ -67825,9 +68329,11 @@
     method public boolean containsValue(java.lang.Object);
     method public synchronized java.util.Enumeration<V> elements();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
+    method public synchronized boolean equals(java.lang.Object);
     method public synchronized void forEach(java.util.function.BiConsumer<? super K, ? super V>);
     method public synchronized V get(java.lang.Object);
     method public synchronized V getOrDefault(java.lang.Object, V);
+    method public synchronized int hashCode();
     method public synchronized boolean isEmpty();
     method public java.util.Set<K> keySet();
     method public synchronized java.util.Enumeration<K> keys();
@@ -67842,6 +68348,7 @@
     method public synchronized V replace(K, V);
     method public synchronized void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public synchronized int size();
+    method public synchronized java.lang.String toString();
     method public java.util.Collection<V> values();
   }
 
@@ -67851,8 +68358,6 @@
     ctor public IdentityHashMap(java.util.Map<? extends K, ? extends V>);
     method public java.lang.Object clone();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
   }
 
   public class IllegalFormatCodePointException extends java.util.IllegalFormatException {
@@ -67963,7 +68468,6 @@
     method public E removeLast();
     method public boolean removeLastOccurrence(java.lang.Object);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public abstract interface List<E> implements java.util.Collection {
@@ -68586,6 +69090,7 @@
     ctor public SimpleTimeZone(int, java.lang.String, int, int, int, int, int, int, int, int, int, int, int);
     method public int getOffset(int, int, int, int, int, int);
     method public int getRawOffset();
+    method public synchronized int hashCode();
     method public boolean inDaylightTime(java.util.Date);
     method public void setDSTSavings(int);
     method public void setEndRule(int, int, int, int);
@@ -68858,7 +69363,6 @@
     method public K firstKey();
     method public java.util.Map.Entry<K, V> floorEntry(K);
     method public K floorKey(K);
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
     method public java.util.NavigableMap<K, V> headMap(K, boolean);
     method public java.util.SortedMap<K, V> headMap(K);
     method public java.util.Map.Entry<K, V> higherEntry(K);
@@ -68870,9 +69374,6 @@
     method public java.util.NavigableSet<K> navigableKeySet();
     method public java.util.Map.Entry<K, V> pollFirstEntry();
     method public java.util.Map.Entry<K, V> pollLastEntry();
-    method public boolean replace(K, V, V);
-    method public V replace(K, V);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public java.util.NavigableMap<K, V> subMap(K, boolean, K, boolean);
     method public java.util.SortedMap<K, V> subMap(K, K);
     method public java.util.NavigableMap<K, V> tailMap(K, boolean);
@@ -68900,7 +69401,6 @@
     method public E pollFirst();
     method public E pollLast();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
     method public java.util.SortedSet<E> subSet(E, E);
     method public java.util.NavigableSet<E> tailSet(E, boolean);
@@ -68937,30 +69437,49 @@
     ctor public Vector(int);
     ctor public Vector();
     ctor public Vector(java.util.Collection<? extends E>);
+    method public synchronized boolean add(E);
+    method public synchronized boolean addAll(java.util.Collection<? extends E>);
+    method public synchronized boolean addAll(int, java.util.Collection<? extends E>);
     method public synchronized void addElement(E);
     method public synchronized int capacity();
     method public synchronized java.lang.Object clone();
+    method public synchronized boolean containsAll(java.util.Collection<?>);
     method public synchronized void copyInto(java.lang.Object[]);
     method public synchronized E elementAt(int);
     method public java.util.Enumeration<E> elements();
     method public synchronized void ensureCapacity(int);
+    method public synchronized boolean equals(java.lang.Object);
     method public synchronized E firstElement();
     method public synchronized void forEach(java.util.function.Consumer<? super E>);
     method public synchronized E get(int);
+    method public synchronized int hashCode();
     method public synchronized int indexOf(java.lang.Object, int);
     method public synchronized void insertElementAt(E, int);
+    method public synchronized boolean isEmpty();
+    method public synchronized java.util.Iterator<E> iterator();
     method public synchronized E lastElement();
+    method public synchronized int lastIndexOf(java.lang.Object);
     method public synchronized int lastIndexOf(java.lang.Object, int);
+    method public synchronized java.util.ListIterator<E> listIterator(int);
+    method public synchronized java.util.ListIterator<E> listIterator();
+    method public synchronized E remove(int);
+    method public synchronized boolean removeAll(java.util.Collection<?>);
     method public synchronized void removeAllElements();
     method public synchronized boolean removeElement(java.lang.Object);
     method public synchronized void removeElementAt(int);
     method public synchronized boolean removeIf(java.util.function.Predicate<? super E>);
+    method protected synchronized void removeRange(int, int);
     method public synchronized void replaceAll(java.util.function.UnaryOperator<E>);
+    method public synchronized boolean retainAll(java.util.Collection<?>);
+    method public synchronized E set(int, E);
     method public synchronized void setElementAt(E, int);
     method public synchronized void setSize(int);
     method public synchronized int size();
     method public synchronized void sort(java.util.Comparator<? super E>);
-    method public java.util.Spliterator<E> spliterator();
+    method public synchronized java.util.List<E> subList(int, int);
+    method public synchronized java.lang.Object[] toArray();
+    method public synchronized <T> T[] toArray(T[]);
+    method public synchronized java.lang.String toString();
     method public synchronized void trimToSize();
     field protected int capacityIncrement;
     field protected int elementCount;
@@ -68973,8 +69492,6 @@
     ctor public WeakHashMap();
     ctor public WeakHashMap(java.util.Map<? extends K, ? extends V>);
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
   }
 
 }
@@ -69009,7 +69526,6 @@
     method public void put(E) throws java.lang.InterruptedException;
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
   }
 
@@ -69200,13 +69716,9 @@
     ctor public ConcurrentHashMap(java.util.Map<? extends K, ? extends V>);
     ctor public ConcurrentHashMap(int, float);
     ctor public ConcurrentHashMap(int, float, int);
-    method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
-    method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
-    method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public boolean contains(java.lang.Object);
     method public java.util.Enumeration<V> elements();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
     method public void forEach(long, java.util.function.BiConsumer<? super K, ? super V>);
     method public <U> void forEach(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachEntry(long, java.util.function.Consumer<? super java.util.Map.Entry<K, V>>);
@@ -69215,14 +69727,11 @@
     method public <U> void forEachKey(long, java.util.function.Function<? super K, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachValue(long, java.util.function.Consumer<? super V>);
     method public <U> void forEachValue(long, java.util.function.Function<? super V, ? extends U>, java.util.function.Consumer<? super U>);
-    method public V getOrDefault(java.lang.Object, V);
     method public java.util.concurrent.ConcurrentHashMap.KeySetView<K, V> keySet(V);
     method public java.util.Enumeration<K> keys();
     method public long mappingCount();
-    method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
     method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet();
     method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet(int);
-    method public V putIfAbsent(K, V);
     method public <U> U reduce(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public java.util.Map.Entry<K, V> reduceEntries(long, java.util.function.BiFunction<java.util.Map.Entry<K, V>, java.util.Map.Entry<K, V>, ? extends java.util.Map.Entry<K, V>>);
     method public <U> U reduceEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
@@ -69242,10 +69751,6 @@
     method public double reduceValuesToDouble(long, java.util.function.ToDoubleFunction<? super V>, double, java.util.function.DoubleBinaryOperator);
     method public int reduceValuesToInt(long, java.util.function.ToIntFunction<? super V>, int, java.util.function.IntBinaryOperator);
     method public long reduceValuesToLong(long, java.util.function.ToLongFunction<? super V>, long, java.util.function.LongBinaryOperator);
-    method public boolean remove(java.lang.Object, java.lang.Object);
-    method public boolean replace(K, V, V);
-    method public V replace(K, V);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public <U> U search(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>);
     method public <U> U searchEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>);
     method public <U> U searchKeys(long, java.util.function.Function<? super K, ? extends U>);
@@ -69306,7 +69811,6 @@
     method public E removeLast();
     method public boolean removeLastOccurrence(java.lang.Object);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public class ConcurrentLinkedQueue<E> extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable {
@@ -69317,7 +69821,6 @@
     method public E peek();
     method public E poll();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public abstract interface ConcurrentMap<K, V> implements java.util.Map {
@@ -69349,9 +69852,6 @@
     method public K ceilingKey(K);
     method public java.util.concurrent.ConcurrentSkipListMap<K, V> clone();
     method public java.util.Comparator<? super K> comparator();
-    method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
-    method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
-    method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public java.util.NavigableSet<K> descendingKeySet();
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> descendingMap();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
@@ -69359,25 +69859,18 @@
     method public K firstKey();
     method public java.util.Map.Entry<K, V> floorEntry(K);
     method public K floorKey(K);
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
-    method public V getOrDefault(java.lang.Object, V);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K, boolean);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K);
     method public java.util.Map.Entry<K, V> higherEntry(K);
     method public K higherKey(K);
+    method public java.util.NavigableSet<K> keySet();
     method public java.util.Map.Entry<K, V> lastEntry();
     method public K lastKey();
     method public java.util.Map.Entry<K, V> lowerEntry(K);
     method public K lowerKey(K);
-    method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
     method public java.util.NavigableSet<K> navigableKeySet();
     method public java.util.Map.Entry<K, V> pollFirstEntry();
     method public java.util.Map.Entry<K, V> pollLastEntry();
-    method public V putIfAbsent(K, V);
-    method public boolean remove(java.lang.Object, java.lang.Object);
-    method public boolean replace(K, V, V);
-    method public V replace(K, V);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> subMap(K, boolean, K, boolean);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> subMap(K, K);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> tailMap(K, boolean);
@@ -69405,7 +69898,6 @@
     method public E pollFirst();
     method public E pollLast();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
     method public java.util.NavigableSet<E> subSet(E, E);
     method public java.util.NavigableSet<E> tailSet(E, boolean);
@@ -69452,9 +69944,7 @@
     ctor public CopyOnWriteArraySet(java.util.Collection<? extends E>);
     method public void forEach(java.util.function.Consumer<? super E>);
     method public java.util.Iterator<E> iterator();
-    method public boolean removeIf(java.util.function.Predicate<? super E>);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public class CountDownLatch {
@@ -69613,6 +70103,7 @@
     method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
     method public boolean hasQueuedSubmissions();
     method public <T> T invoke(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>);
     method public boolean isQuiescent();
     method public boolean isShutdown();
     method public boolean isTerminated();
@@ -69622,6 +70113,9 @@
     method public void shutdown();
     method public java.util.List<java.lang.Runnable> shutdownNow();
     method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.Callable<T>);
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.lang.Runnable, T);
+    method public java.util.concurrent.ForkJoinTask<?> submit(java.lang.Runnable);
     field public static final java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory;
   }
 
@@ -69745,7 +70239,6 @@
     method public E removeLast();
     method public boolean removeLastOccurrence(java.lang.Object);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
     method public E takeFirst() throws java.lang.InterruptedException;
     method public E takeLast() throws java.lang.InterruptedException;
@@ -69766,7 +70259,6 @@
     method public void put(E) throws java.lang.InterruptedException;
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
   }
 
@@ -69786,7 +70278,6 @@
     method public void put(E);
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
     method public void transfer(E) throws java.lang.InterruptedException;
     method public boolean tryTransfer(E);
@@ -69834,7 +70325,6 @@
     method public void put(E);
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
   }
 
@@ -69938,7 +70428,6 @@
     method public void put(E) throws java.lang.InterruptedException;
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
   }
 
@@ -69950,9 +70439,11 @@
     method public static java.util.concurrent.ThreadLocalRandom current();
     method public double nextDouble(double);
     method public double nextDouble(double, double);
+    method public double nextGaussian();
     method public int nextInt(int, int);
     method public long nextLong(long);
     method public long nextLong(long, long);
+    method public void setSeed(long);
   }
 
   public class ThreadPoolExecutor extends java.util.concurrent.AbstractExecutorService {
@@ -69966,6 +70457,7 @@
     method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
     method protected void beforeExecute(java.lang.Thread, java.lang.Runnable);
     method public void execute(java.lang.Runnable);
+    method protected void finalize();
     method public int getActiveCount();
     method public long getCompletedTaskCount();
     method public int getCorePoolSize();
@@ -70836,8 +71328,11 @@
     ctor public JarFile(java.io.File) throws java.io.IOException;
     ctor public JarFile(java.io.File, boolean) throws java.io.IOException;
     ctor public JarFile(java.io.File, boolean, int) throws java.io.IOException;
+    method public java.util.Enumeration<java.util.jar.JarEntry> entries();
+    method public synchronized java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
     method public java.util.jar.JarEntry getJarEntry(java.lang.String);
     method public java.util.jar.Manifest getManifest() throws java.io.IOException;
+    method public java.util.stream.Stream<java.util.jar.JarEntry> stream();
     field public static final java.lang.String MANIFEST_NAME = "META-INF/MANIFEST.MF";
   }
 
@@ -70917,6 +71412,8 @@
 
   public class ConsoleHandler extends java.util.logging.StreamHandler {
     ctor public ConsoleHandler();
+    method public void close();
+    method public void publish(java.util.logging.LogRecord);
   }
 
   public class ErrorManager {
@@ -71706,6 +72203,7 @@
     method public int deflate(byte[]);
     method public int deflate(byte[], int, int, int);
     method public void end();
+    method protected void finalize();
     method public void finish();
     method public boolean finished();
     method public int getAdler();
@@ -71738,6 +72236,8 @@
     ctor public DeflaterInputStream(java.io.InputStream);
     ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater);
     ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater, int);
+    method public void mark(int);
+    method public void reset() throws java.io.IOException;
     field protected final byte[] buf;
     field protected final java.util.zip.Deflater def;
   }
@@ -71768,6 +72268,7 @@
     ctor public GZIPOutputStream(java.io.OutputStream, int, boolean) throws java.io.IOException;
     ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException;
     ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException;
+    method public synchronized void write(byte[], int, int) throws java.io.IOException;
     field protected java.util.zip.CRC32 crc;
   }
 
@@ -71775,6 +72276,7 @@
     ctor public Inflater(boolean);
     ctor public Inflater();
     method public void end();
+    method protected void finalize();
     method public boolean finished();
     method public int getAdler();
     method public long getBytesRead();
@@ -71901,6 +72403,7 @@
     ctor public ZipFile(java.io.File, java.nio.charset.Charset) throws java.io.IOException;
     method public void close() throws java.io.IOException;
     method public java.util.Enumeration<? extends java.util.zip.ZipEntry> entries();
+    method protected void finalize() throws java.io.IOException;
     method public java.lang.String getComment();
     method public java.util.zip.ZipEntry getEntry(java.lang.String);
     method public java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
@@ -72007,6 +72510,7 @@
     method public void setComment(java.lang.String);
     method public void setLevel(int);
     method public void setMethod(int);
+    method public synchronized void write(byte[], int, int) throws java.io.IOException;
     field public static final int CENATT = 36; // 0x24
     field public static final int CENATX = 38; // 0x26
     field public static final int CENCOM = 32; // 0x20
@@ -72163,6 +72667,7 @@
 
   public class ExemptionMechanism {
     ctor protected ExemptionMechanism(javax.crypto.ExemptionMechanismSpi, java.security.Provider, java.lang.String);
+    method protected void finalize();
     method public final byte[] genExemptionBlob() throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException;
     method public final int genExemptionBlob(byte[]) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
     method public final int genExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
@@ -74551,6 +75056,7 @@
     ctor public TransformerException(java.lang.String, java.lang.Throwable);
     ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator);
     ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator, java.lang.Throwable);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getException();
     method public java.lang.String getLocationAsString();
     method public javax.xml.transform.SourceLocator getLocator();
@@ -74821,6 +75327,7 @@
   public class XPathException extends java.lang.Exception {
     ctor public XPathException(java.lang.String);
     ctor public XPathException(java.lang.Throwable);
+    method public java.lang.Throwable getCause();
   }
 
   public abstract interface XPathExpression {
@@ -75249,6 +75756,8 @@
 
   public class JSONException extends java.lang.Exception {
     ctor public JSONException(java.lang.String);
+    ctor public JSONException(java.lang.String, java.lang.Throwable);
+    ctor public JSONException(java.lang.Throwable);
   }
 
   public class JSONObject {
diff --git a/api/system-removed.txt b/api/system-removed.txt
index 48f62b1..4f78176 100644
--- a/api/system-removed.txt
+++ b/api/system-removed.txt
@@ -9,12 +9,20 @@
     method public static deprecated int getMaxNumPictureInPictureActions();
   }
 
+  public abstract deprecated class EphemeralResolverService extends android.app.InstantAppResolverService {
+    ctor public EphemeralResolverService();
+    method public abstract deprecated java.util.List<android.content.pm.EphemeralResolveInfo> onEphemeralResolveInfoList(int[], int);
+    method public android.content.pm.EphemeralResolveInfo onGetEphemeralIntentFilter(java.lang.String);
+    method public java.util.List<android.content.pm.EphemeralResolveInfo> onGetEphemeralResolveInfo(int[]);
+  }
+
   public class KeyguardManager {
     method public deprecated void dismissKeyguard(android.app.Activity, android.app.KeyguardManager.KeyguardDismissCallback, android.os.Handler);
   }
 
   public class Notification implements android.os.Parcelable {
     method public deprecated java.lang.String getChannel();
+    method public static java.lang.Class<? extends android.app.Notification.Style> getNotificationStyleClass(java.lang.String);
     method public deprecated long getTimeout();
     method public deprecated void setLatestEventInfo(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, android.app.PendingIntent);
   }
@@ -29,25 +37,8 @@
   }
 
   public final deprecated class PictureInPictureArgs implements android.os.Parcelable {
-    ctor public deprecated PictureInPictureArgs();
-    ctor public deprecated PictureInPictureArgs(float, java.util.List<android.app.RemoteAction>);
     method public static android.app.PictureInPictureArgs convert(android.app.PictureInPictureParams);
     method public static android.app.PictureInPictureParams convert(android.app.PictureInPictureArgs);
-    method public void copyOnlySet(android.app.PictureInPictureArgs);
-    method public java.util.List<android.app.RemoteAction> getActions();
-    method public float getAspectRatio();
-    method public android.util.Rational getAspectRatioRational();
-    method public android.graphics.Rect getSourceRectHint();
-    method public android.graphics.Rect getSourceRectHintInsets();
-    method public boolean hasSetActions();
-    method public boolean hasSetAspectRatio();
-    method public boolean hasSourceBoundsHint();
-    method public boolean hasSourceBoundsHintInsets();
-    method public deprecated void setActions(java.util.List<android.app.RemoteAction>);
-    method public deprecated void setAspectRatio(float);
-    method public deprecated void setSourceRectHint(android.graphics.Rect);
-    method public deprecated void setSourceRectHintInsets(android.graphics.Rect);
-    method public void truncateActions(int);
     field public static final android.os.Parcelable.Creator<android.app.PictureInPictureArgs> CREATOR;
   }
 
@@ -59,10 +50,6 @@
     method public android.app.PictureInPictureArgs.Builder setSourceRectHint(android.graphics.Rect);
   }
 
-  public final class RecoverableSecurityException extends java.lang.SecurityException implements android.os.Parcelable {
-    method public deprecated void showAsNotification(android.content.Context);
-  }
-
 }
 
 package android.app.admin {
@@ -70,6 +57,8 @@
   public class DevicePolicyManager {
     method public deprecated android.os.UserHandle createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle);
     method public deprecated android.os.UserHandle createUser(android.content.ComponentName, java.lang.String);
+    method public deprecated java.lang.String getDeviceInitializerApp();
+    method public deprecated android.content.ComponentName getDeviceInitializerComponent();
   }
 
 }
@@ -104,7 +93,35 @@
   }
 
   public class Intent implements java.lang.Cloneable android.os.Parcelable {
+    field public static final deprecated java.lang.String ACTION_DEVICE_INITIALIZATION_WIZARD = "android.intent.action.DEVICE_INITIALIZATION_WIZARD";
+    field public static final deprecated java.lang.String ACTION_EPHEMERAL_RESOLVER_SETTINGS = "android.intent.action.EPHEMERAL_RESOLVER_SETTINGS";
+    field public static final deprecated java.lang.String ACTION_INSTALL_EPHEMERAL_PACKAGE = "android.intent.action.INSTALL_EPHEMERAL_PACKAGE";
+    field public static final deprecated java.lang.String ACTION_MASTER_CLEAR = "android.intent.action.MASTER_CLEAR";
+    field public static final deprecated java.lang.String ACTION_RESOLVE_EPHEMERAL_PACKAGE = "android.intent.action.RESOLVE_EPHEMERAL_PACKAGE";
+    field public static final deprecated java.lang.String ACTION_SERVICE_STATE = "android.intent.action.SERVICE_STATE";
+    field public static final deprecated java.lang.String EXTRA_CDMA_DEFAULT_ROAMING_INDICATOR = "cdmaDefaultRoamingIndicator";
+    field public static final deprecated java.lang.String EXTRA_CDMA_ROAMING_INDICATOR = "cdmaRoamingIndicator";
+    field public static final deprecated java.lang.String EXTRA_CSS_INDICATOR = "cssIndicator";
+    field public static final deprecated java.lang.String EXTRA_DATA_OPERATOR_ALPHA_LONG = "data-operator-alpha-long";
+    field public static final deprecated java.lang.String EXTRA_DATA_OPERATOR_ALPHA_SHORT = "data-operator-alpha-short";
+    field public static final deprecated java.lang.String EXTRA_DATA_OPERATOR_NUMERIC = "data-operator-numeric";
+    field public static final deprecated java.lang.String EXTRA_DATA_RADIO_TECH = "dataRadioTechnology";
+    field public static final deprecated java.lang.String EXTRA_DATA_REG_STATE = "dataRegState";
+    field public static final deprecated java.lang.String EXTRA_DATA_ROAMING_TYPE = "dataRoamingType";
+    field public static final deprecated java.lang.String EXTRA_EMERGENCY_ONLY = "emergencyOnly";
+    field public static final deprecated java.lang.String EXTRA_IS_DATA_ROAMING_FROM_REGISTRATION = "isDataRoamingFromRegistration";
+    field public static final deprecated java.lang.String EXTRA_IS_USING_CARRIER_AGGREGATION = "isUsingCarrierAggregation";
+    field public static final deprecated java.lang.String EXTRA_LTE_EARFCN_RSRP_BOOST = "LteEarfcnRsrpBoost";
+    field public static final deprecated java.lang.String EXTRA_MANUAL = "manual";
+    field public static final deprecated java.lang.String EXTRA_NETWORK_ID = "networkId";
+    field public static final deprecated java.lang.String EXTRA_OPERATOR_ALPHA_LONG = "operator-alpha-long";
+    field public static final deprecated java.lang.String EXTRA_OPERATOR_ALPHA_SHORT = "operator-alpha-short";
+    field public static final deprecated java.lang.String EXTRA_OPERATOR_NUMERIC = "operator-numeric";
     field public static final deprecated java.lang.String EXTRA_QUICK_VIEW_ADVANCED = "android.intent.extra.QUICK_VIEW_ADVANCED";
+    field public static final deprecated java.lang.String EXTRA_SYSTEM_ID = "systemId";
+    field public static final deprecated java.lang.String EXTRA_VOICE_RADIO_TECH = "radioTechnology";
+    field public static final deprecated java.lang.String EXTRA_VOICE_REG_STATE = "voiceRegState";
+    field public static final deprecated java.lang.String EXTRA_VOICE_ROAMING_TYPE = "voiceRoamingType";
   }
 
 }
@@ -119,6 +136,35 @@
     field public deprecated boolean encryptionAware;
   }
 
+  public final deprecated class EphemeralIntentFilter implements android.os.Parcelable {
+    ctor public EphemeralIntentFilter(java.lang.String, java.util.List<android.content.IntentFilter>);
+    method public java.util.List<android.content.IntentFilter> getFilters();
+    method public java.lang.String getSplitName();
+    field public static final android.os.Parcelable.Creator<android.content.pm.EphemeralIntentFilter> CREATOR;
+  }
+
+  public final deprecated class EphemeralResolveInfo implements android.os.Parcelable {
+    ctor public deprecated EphemeralResolveInfo(android.net.Uri, java.lang.String, java.util.List<android.content.IntentFilter>);
+    ctor public deprecated EphemeralResolveInfo(android.content.pm.EphemeralResolveInfo.EphemeralDigest, java.lang.String, java.util.List<android.content.pm.EphemeralIntentFilter>);
+    ctor public EphemeralResolveInfo(android.content.pm.EphemeralResolveInfo.EphemeralDigest, java.lang.String, java.util.List<android.content.pm.EphemeralIntentFilter>, int);
+    ctor public EphemeralResolveInfo(java.lang.String, java.lang.String, java.util.List<android.content.pm.EphemeralIntentFilter>);
+    method public byte[] getDigestBytes();
+    method public int getDigestPrefix();
+    method public deprecated java.util.List<android.content.IntentFilter> getFilters();
+    method public java.util.List<android.content.pm.EphemeralIntentFilter> getIntentFilters();
+    method public java.lang.String getPackageName();
+    method public int getVersionCode();
+    field public static final android.os.Parcelable.Creator<android.content.pm.EphemeralResolveInfo> CREATOR;
+    field public static final java.lang.String SHA_ALGORITHM = "SHA-256";
+  }
+
+  public static final class EphemeralResolveInfo.EphemeralDigest implements android.os.Parcelable {
+    ctor public EphemeralResolveInfo.EphemeralDigest(java.lang.String);
+    method public byte[][] getDigestBytes();
+    method public int[] getDigestPrefix();
+    field public static final android.os.Parcelable.Creator<android.content.pm.EphemeralResolveInfo.EphemeralDigest> CREATOR;
+  }
+
   public class PackageInfo implements android.os.Parcelable {
     field public static final int REQUESTED_PERMISSION_REQUIRED = 1; // 0x1
   }
@@ -264,16 +310,51 @@
 
 }
 
+package android.net.wifi {
+
+  public class ScanResult implements android.os.Parcelable {
+    field public boolean untrusted;
+  }
+
+  public class WifiConnectionStatistics implements android.os.Parcelable {
+    ctor public WifiConnectionStatistics();
+    ctor public WifiConnectionStatistics(android.net.wifi.WifiConnectionStatistics);
+    method public void incrementOrAddUntrusted(java.lang.String, int, int);
+    field public static final android.os.Parcelable.Creator<android.net.wifi.WifiConnectionStatistics> CREATOR;
+    field public int num24GhzConnected;
+    field public int num5GhzConnected;
+    field public int numAutoJoinAttempt;
+    field public int numAutoRoamAttempt;
+    field public int numWifiManagerJoinAttempt;
+    field public java.util.HashMap<java.lang.String, android.net.wifi.WifiNetworkConnectionStatistics> untrustedNetworkHistory;
+  }
+
+  public class WifiManager {
+    method public deprecated java.util.List<android.net.wifi.BatchedScanResult> getBatchedScanResults();
+    method public android.net.wifi.WifiConnectionStatistics getConnectionStatistics();
+    method public deprecated boolean isBatchedScanSupported();
+    method public deprecated boolean setWifiApEnabled(android.net.wifi.WifiConfiguration, boolean);
+    method public deprecated boolean startLocationRestrictedScan(android.os.WorkSource);
+  }
+
+}
+
 package android.os {
 
   public class BatteryManager {
     ctor public BatteryManager();
   }
 
+  public class Build {
+    field public static final boolean PERMISSIONS_REVIEW_REQUIRED;
+  }
+
   public final class PowerManager {
     method public void goToSleep(long);
+    method public deprecated boolean isScreenBrightnessBoosted();
     method public deprecated void userActivity(long, boolean);
     method public void wakeUp(long);
+    field public static final deprecated java.lang.String ACTION_SCREEN_BRIGHTNESS_BOOST_CHANGED = "android.os.action.SCREEN_BRIGHTNESS_BOOST_CHANGED";
   }
 
   public class RecoverySystem {
@@ -295,18 +376,8 @@
 package android.os.storage {
 
   public class StorageManager {
-    method public deprecated void allocateBytes(java.io.File, long, int) throws java.io.IOException;
-    method public deprecated long getAllocatableBytes(java.io.File, int) throws java.io.IOException;
-    method public deprecated long getCacheQuotaBytes(java.io.File) throws java.io.IOException;
-    method public deprecated long getCacheQuotaBytes() throws java.io.IOException;
-    method public deprecated long getCacheSizeBytes(java.io.File) throws java.io.IOException;
-    method public deprecated long getCacheSizeBytes() throws java.io.IOException;
-    method public deprecated long getExternalCacheQuotaBytes() throws java.io.IOException;
-    method public deprecated long getExternalCacheSizeBytes() throws java.io.IOException;
     method public android.os.storage.StorageVolume getPrimaryVolume();
     method public android.os.storage.StorageVolume[] getVolumeList();
-    method public deprecated boolean isCacheBehaviorAtomic(java.io.File) throws java.io.IOException;
-    method public deprecated void setCacheBehaviorAtomic(java.io.File, boolean) throws java.io.IOException;
   }
 
 }
@@ -350,11 +421,8 @@
     field public static final java.lang.String CREATED = "created";
     field public static final java.lang.String DATE = "date";
     field public static final java.lang.String FAVICON = "favicon";
-    field public static final java.lang.String THUMBNAIL = "thumbnail";
     field public static final java.lang.String TITLE = "title";
-    field public static final java.lang.String TOUCH_ICON = "touch_icon";
     field public static final java.lang.String URL = "url";
-    field public static final java.lang.String USER_ENTERED = "user_entered";
     field public static final java.lang.String VISITS = "visits";
   }
 
@@ -445,6 +513,26 @@
 
 }
 
+package android.service.notification {
+
+  public abstract class NotificationListenerService extends android.app.Service {
+    method public android.service.notification.StatusBarNotification[] getActiveNotifications(int);
+    method public android.service.notification.StatusBarNotification[] getActiveNotifications(java.lang.String[], int);
+    method public void registerAsSystemService(android.content.Context, android.content.ComponentName, int) throws android.os.RemoteException;
+    method public final void setOnNotificationPostedTrim(int);
+    method public final void snoozeNotification(java.lang.String, java.lang.String);
+    method public void unregisterAsSystemService() throws android.os.RemoteException;
+    field public static final int TRIM_FULL = 0; // 0x0
+    field public static final int TRIM_LIGHT = 1; // 0x1
+  }
+
+  public static class NotificationListenerService.Ranking {
+    method public java.util.List<java.lang.String> getAdditionalPeople();
+    method public java.util.List<android.service.notification.SnoozeCriterion> getSnoozeCriteria();
+  }
+
+}
+
 package android.speech.tts {
 
   public abstract class UtteranceProgressListener {
diff --git a/api/test-current.txt b/api/test-current.txt
index e657170..eb896da 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -388,6 +388,7 @@
     field public static final int childIndicatorRight = 16843024; // 0x1010110
     field public static final int childIndicatorStart = 16843731; // 0x10103d3
     field public static final int choiceMode = 16843051; // 0x101012b
+    field public static final int classLoader = 16844139; // 0x101056b
     field public static final int clearTaskOnLaunch = 16842773; // 0x1010015
     field public static final int clickable = 16842981; // 0x10100e5
     field public static final int clipChildren = 16842986; // 0x10100ea
@@ -918,6 +919,7 @@
     field public static final int multiprocess = 16842771; // 0x1010013
     field public static final int name = 16842755; // 0x1010003
     field public static final int navigationBarColor = 16843858; // 0x1010452
+    field public static final int navigationBarDividerColor = 16844141; // 0x101056d
     field public static final int navigationContentDescription = 16843969; // 0x10104c1
     field public static final int navigationIcon = 16843968; // 0x10104c0
     field public static final int navigationMode = 16843471; // 0x10102cf
@@ -1180,6 +1182,7 @@
     field public static final int showSilent = 16843259; // 0x10101fb
     field public static final int showText = 16843949; // 0x10104ad
     field public static final deprecated int showWeekNumber = 16843582; // 0x101033e
+    field public static final int showWhenLocked = 16844137; // 0x1010569
     field public static final deprecated int shownWeekCount = 16843585; // 0x1010341
     field public static final int shrinkColumns = 16843082; // 0x101014a
     field public static final deprecated int singleLine = 16843101; // 0x101015d
@@ -1438,6 +1441,7 @@
     field public static final int trimPathOffset = 16843786; // 0x101040a
     field public static final int trimPathStart = 16843784; // 0x1010408
     field public static final int tunerCount = 16844061; // 0x101051d
+    field public static final int turnScreenOn = 16844138; // 0x101056a
     field public static final int type = 16843169; // 0x10101a1
     field public static final int typeface = 16842902; // 0x1010096
     field public static final int uiOptions = 16843672; // 0x1010398
@@ -1521,6 +1525,8 @@
     field public static final int windowHideAnimation = 16842935; // 0x10100b7
     field public static final int windowIsFloating = 16842839; // 0x1010057
     field public static final int windowIsTranslucent = 16842840; // 0x1010058
+    field public static final int windowLayoutInDisplayCutoutMode = 16844166; // 0x1010586
+    field public static final int windowLightNavigationBar = 16844140; // 0x101056c
     field public static final int windowLightStatusBar = 16844000; // 0x10104e0
     field public static final int windowMinWidthMajor = 16843606; // 0x1010356
     field public static final int windowMinWidthMinor = 16843607; // 0x1010357
@@ -1935,6 +1941,7 @@
     field public static final int VideoView_error_text_invalid_progressive_playback = 17039381; // 0x1040015
     field public static final int VideoView_error_text_unknown = 17039377; // 0x1040011
     field public static final int VideoView_error_title = 17039378; // 0x1040012
+    field public static final int autofill = 17039386; // 0x104001a
     field public static final int cancel = 17039360; // 0x1040000
     field public static final int copy = 17039361; // 0x1040001
     field public static final int copyUrl = 17039362; // 0x1040002
@@ -3162,6 +3169,7 @@
 
   public final class AnimatorSet extends android.animation.Animator {
     ctor public AnimatorSet();
+    method public android.animation.AnimatorSet clone();
     method public java.util.ArrayList<android.animation.Animator> getChildAnimations();
     method public long getCurrentPlayTime();
     method public long getDuration();
@@ -3280,6 +3288,7 @@
 
   public final class ObjectAnimator extends android.animation.ValueAnimator {
     ctor public ObjectAnimator();
+    method public android.animation.ObjectAnimator clone();
     method public java.lang.String getPropertyName();
     method public java.lang.Object getTarget();
     method public static android.animation.ObjectAnimator ofArgb(java.lang.Object, java.lang.String, int...);
@@ -3305,6 +3314,7 @@
     method public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofPropertyValuesHolder(java.lang.Object, android.animation.PropertyValuesHolder...);
     method public void setAutoCancel(boolean);
+    method public android.animation.ObjectAnimator setDuration(long);
     method public void setProperty(android.util.Property);
     method public void setPropertyName(java.lang.String);
   }
@@ -3386,6 +3396,7 @@
     ctor public ValueAnimator();
     method public void addUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener);
     method public static boolean areAnimatorsEnabled();
+    method public android.animation.ValueAnimator clone();
     method public float getAnimatedFraction();
     method public java.lang.Object getAnimatedValue();
     method public java.lang.Object getAnimatedValue(java.lang.String);
@@ -3761,10 +3772,12 @@
     method public final void setResult(int);
     method public final void setResult(int, android.content.Intent);
     method public final deprecated void setSecondaryProgress(int);
+    method public void setShowWhenLocked(boolean);
     method public void setTaskDescription(android.app.ActivityManager.TaskDescription);
     method public void setTitle(java.lang.CharSequence);
     method public void setTitle(int);
     method public deprecated void setTitleColor(int);
+    method public void setTurnScreenOn(boolean);
     method public void setVisible(boolean);
     method public final void setVolumeControlStream(int);
     method public void setVrModeEnabled(boolean, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
@@ -4972,6 +4985,7 @@
     ctor public IntentService(java.lang.String);
     method public android.os.IBinder onBind(android.content.Intent);
     method protected abstract void onHandleIntent(android.content.Intent);
+    method public void onStart(android.content.Intent, int);
     method public void setIntentRedelivery(boolean);
   }
 
@@ -5606,6 +5620,7 @@
     method public java.util.List<android.app.NotificationChannelGroup> getNotificationChannelGroups();
     method public java.util.List<android.app.NotificationChannel> getNotificationChannels();
     method public android.app.NotificationManager.Policy getNotificationPolicy();
+    method public boolean isNotificationListenerAccessGranted(android.content.ComponentName);
     method public boolean isNotificationPolicyAccessGranted();
     method public void notify(int, android.app.Notification);
     method public void notify(java.lang.String, int, android.app.Notification);
@@ -6143,7 +6158,6 @@
   }
 
   public class WallpaperManager {
-    method public void addOnColorsChangedListener(android.app.WallpaperManager.OnColorsChangedListener);
     method public void addOnColorsChangedListener(android.app.WallpaperManager.OnColorsChangedListener, android.os.Handler);
     method public void clear() throws java.io.IOException;
     method public void clear(int) throws java.io.IOException;
@@ -9386,6 +9400,7 @@
     field public static final java.lang.String ACTION_INPUT_METHOD_CHANGED = "android.intent.action.INPUT_METHOD_CHANGED";
     field public static final java.lang.String ACTION_INSERT = "android.intent.action.INSERT";
     field public static final java.lang.String ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT";
+    field public static final java.lang.String ACTION_INSTALL_FAILURE = "android.intent.action.INSTALL_FAILURE";
     field public static final java.lang.String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE";
     field public static final java.lang.String ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED";
     field public static final java.lang.String ACTION_LOCKED_BOOT_COMPLETED = "android.intent.action.LOCKED_BOOT_COMPLETED";
@@ -9568,6 +9583,7 @@
     field public static final deprecated java.lang.String EXTRA_SHORTCUT_INTENT = "android.intent.extra.shortcut.INTENT";
     field public static final deprecated java.lang.String EXTRA_SHORTCUT_NAME = "android.intent.extra.shortcut.NAME";
     field public static final java.lang.String EXTRA_SHUTDOWN_USERSPACE_ONLY = "android.intent.extra.SHUTDOWN_USERSPACE_ONLY";
+    field public static final java.lang.String EXTRA_SPLIT_NAME = "android.intent.extra.SPLIT_NAME";
     field public static final java.lang.String EXTRA_STREAM = "android.intent.extra.STREAM";
     field public static final java.lang.String EXTRA_SUBJECT = "android.intent.extra.SUBJECT";
     field public static final java.lang.String EXTRA_TEMPLATE = "android.intent.extra.TEMPLATE";
@@ -10190,6 +10206,7 @@
     method public static java.lang.CharSequence getCategoryTitle(android.content.Context, int);
     method public boolean isPrivilegedApp();
     method public boolean isSystemApp();
+    method public boolean isVirtualPreload();
     method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager);
     field public static final int CATEGORY_AUDIO = 1; // 0x1
     field public static final int CATEGORY_GAME = 0; // 0x0
@@ -10525,6 +10542,7 @@
     method public java.io.OutputStream openWrite(java.lang.String, long, long) throws java.io.IOException;
     method public void removeSplit(java.lang.String) throws java.io.IOException;
     method public void setStagingProgress(float);
+    method public void transfer(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
   }
 
   public static abstract class PackageInstaller.SessionCallback {
@@ -10542,10 +10560,16 @@
     method public android.graphics.Bitmap getAppIcon();
     method public java.lang.CharSequence getAppLabel();
     method public java.lang.String getAppPackageName();
+    method public int getInstallLocation();
     method public int getInstallReason();
     method public java.lang.String getInstallerPackageName();
+    method public int getMode();
+    method public int getOriginatingUid();
+    method public android.net.Uri getOriginatingUri();
     method public float getProgress();
+    method public android.net.Uri getReferrerUri();
     method public int getSessionId();
+    method public long getSize();
     method public boolean isActive();
     method public boolean isSealed();
     method public void writeToParcel(android.os.Parcel, int);
@@ -10654,6 +10678,7 @@
     method public abstract int getPackageUid(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
     method public abstract java.lang.String[] getPackagesForUid(int);
     method public abstract java.util.List<android.content.pm.PackageInfo> getPackagesHoldingPermissions(java.lang.String[], int);
+    method public abstract java.lang.String getPermissionControllerPackageName();
     method public abstract android.content.pm.PermissionGroupInfo getPermissionGroupInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
     method public abstract android.content.pm.PermissionInfo getPermissionInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
     method public abstract int getPreferredActivities(java.util.List<android.content.IntentFilter>, java.util.List<android.content.ComponentName>, java.lang.String);
@@ -10755,8 +10780,11 @@
     field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce";
     field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef";
     field public static final java.lang.String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep";
+    field public static final java.lang.String FEATURE_PC = "android.hardware.type.pc";
     field public static final java.lang.String FEATURE_PICTURE_IN_PICTURE = "android.software.picture_in_picture";
     field public static final java.lang.String FEATURE_PRINTING = "android.software.print";
+    field public static final java.lang.String FEATURE_RAM_LOW = "android.hardware.ram.low";
+    field public static final java.lang.String FEATURE_RAM_NORMAL = "android.hardware.ram.normal";
     field public static final java.lang.String FEATURE_SCREEN_LANDSCAPE = "android.hardware.screen.landscape";
     field public static final java.lang.String FEATURE_SCREEN_PORTRAIT = "android.hardware.screen.portrait";
     field public static final java.lang.String FEATURE_SECURELY_REMOVES_USERS = "android.software.securely_removes_users";
@@ -10796,6 +10824,7 @@
     field public static final java.lang.String FEATURE_WIFI = "android.hardware.wifi";
     field public static final java.lang.String FEATURE_WIFI_AWARE = "android.hardware.wifi.aware";
     field public static final java.lang.String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
+    field public static final java.lang.String FEATURE_WIFI_PASSPOINT = "android.hardware.wifi.passpoint";
     field public static final int GET_ACTIVITIES = 1; // 0x1
     field public static final int GET_CONFIGURATIONS = 16384; // 0x4000
     field public static final deprecated int GET_DISABLED_COMPONENTS = 512; // 0x200
@@ -10895,8 +10924,8 @@
     field public static final int PROTECTION_DANGEROUS = 1; // 0x1
     field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40
     field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20
-    field public static final int PROTECTION_FLAG_EPHEMERAL = 4096; // 0x1000
     field public static final int PROTECTION_FLAG_INSTALLER = 256; // 0x100
+    field public static final int PROTECTION_FLAG_INSTANT = 4096; // 0x1000
     field public static final int PROTECTION_FLAG_PRE23 = 128; // 0x80
     field public static final int PROTECTION_FLAG_PREINSTALLED = 1024; // 0x400
     field public static final int PROTECTION_FLAG_PRIVILEGED = 16; // 0x10
@@ -11104,6 +11133,7 @@
 
   public static class AssetFileDescriptor.AutoCloseInputStream extends android.os.ParcelFileDescriptor.AutoCloseInputStream {
     ctor public AssetFileDescriptor.AutoCloseInputStream(android.content.res.AssetFileDescriptor) throws java.io.IOException;
+    method public void mark(int);
   }
 
   public static class AssetFileDescriptor.AutoCloseOutputStream extends android.os.ParcelFileDescriptor.AutoCloseOutputStream {
@@ -11411,6 +11441,7 @@
     method public void copyStringToBuffer(int, android.database.CharArrayBuffer);
     method public void deactivate();
     method public void fillWindow(int, android.database.CursorWindow);
+    method protected void finalize();
     method public byte[] getBlob(int);
     method public int getColumnCount();
     method public int getColumnIndex(java.lang.String);
@@ -11892,6 +11923,7 @@
     method public void beginTransactionWithListenerNonExclusive(android.database.sqlite.SQLiteTransactionListener);
     method public android.database.sqlite.SQLiteStatement compileStatement(java.lang.String) throws android.database.SQLException;
     method public static android.database.sqlite.SQLiteDatabase create(android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public static android.database.sqlite.SQLiteDatabase createInMemory(android.database.sqlite.SQLiteDatabase.OpenParams);
     method public int delete(java.lang.String, java.lang.String, java.lang.String[]);
     method public static boolean deleteDatabase(java.io.File);
     method public void disableWriteAheadLogging();
@@ -11921,6 +11953,7 @@
     method public boolean needUpgrade(int);
     method protected void onAllReferencesReleased();
     method public static android.database.sqlite.SQLiteDatabase openDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, int);
+    method public static android.database.sqlite.SQLiteDatabase openDatabase(java.io.File, android.database.sqlite.SQLiteDatabase.OpenParams);
     method public static android.database.sqlite.SQLiteDatabase openDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory, int, android.database.DatabaseErrorHandler);
     method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.io.File, android.database.sqlite.SQLiteDatabase.CursorFactory);
     method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, android.database.sqlite.SQLiteDatabase.CursorFactory);
@@ -11971,6 +12004,28 @@
     method public abstract android.database.Cursor newCursor(android.database.sqlite.SQLiteDatabase, android.database.sqlite.SQLiteCursorDriver, java.lang.String, android.database.sqlite.SQLiteQuery);
   }
 
+  public static final class SQLiteDatabase.OpenParams {
+    method public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory();
+    method public android.database.DatabaseErrorHandler getErrorHandler();
+    method public long getIdleConnectionTimeout();
+    method public int getLookasideSlotCount();
+    method public int getLookasideSlotSize();
+    method public int getOpenFlags();
+  }
+
+  public static final class SQLiteDatabase.OpenParams.Builder {
+    ctor public SQLiteDatabase.OpenParams.Builder();
+    ctor public SQLiteDatabase.OpenParams.Builder(android.database.sqlite.SQLiteDatabase.OpenParams);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder addOpenFlags(int);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams build();
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder removeOpenFlags(int);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setErrorHandler(android.database.DatabaseErrorHandler);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setIdleConnectionTimeout(long);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setLookasideConfig(int, int);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setOpenFlags(int);
+  }
+
   public class SQLiteDatabaseCorruptException extends android.database.sqlite.SQLiteException {
     ctor public SQLiteDatabaseCorruptException();
     ctor public SQLiteDatabaseCorruptException(java.lang.String);
@@ -11986,6 +12041,40 @@
     ctor public SQLiteDatatypeMismatchException(java.lang.String);
   }
 
+  public final class SQLiteDebug {
+    method public static void dump(android.util.Printer, java.lang.String[]);
+    method public static android.database.sqlite.SQLiteDebug.PagerStats getDatabaseInfo();
+    field public static final boolean DEBUG_SQL_LOG;
+    field public static final boolean DEBUG_SQL_STATEMENTS;
+    field public static final boolean DEBUG_SQL_TIME;
+  }
+
+  public static class SQLiteDebug.DbStats {
+    ctor public SQLiteDebug.DbStats(java.lang.String, long, long, int, int, int, int);
+    field public java.lang.String cache;
+    field public java.lang.String dbName;
+    field public long dbSize;
+    field public int lookaside;
+    field public long pageSize;
+  }
+
+  public static class SQLiteDebug.PagerStats {
+    ctor public SQLiteDebug.PagerStats();
+    field public java.util.ArrayList<android.database.sqlite.SQLiteDebug.DbStats> dbStats;
+    field public int largestMemAlloc;
+    field public int memoryUsed;
+    field public int pageCacheOverflow;
+  }
+
+  public final class SQLiteDirectCursorDriver implements android.database.sqlite.SQLiteCursorDriver {
+    ctor public SQLiteDirectCursorDriver(android.database.sqlite.SQLiteDatabase, java.lang.String, java.lang.String, android.os.CancellationSignal);
+    method public void cursorClosed();
+    method public void cursorDeactivated();
+    method public void cursorRequeried(android.database.Cursor);
+    method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase.CursorFactory, java.lang.String[]);
+    method public void setBindArguments(java.lang.String[]);
+  }
+
   public class SQLiteDiskIOException extends android.database.sqlite.SQLiteException {
     ctor public SQLiteDiskIOException();
     ctor public SQLiteDiskIOException(java.lang.String);
@@ -12007,6 +12096,18 @@
     ctor public SQLiteFullException(java.lang.String);
   }
 
+  public final class SQLiteGlobal {
+    method public static java.lang.String getDefaultJournalMode();
+    method public static int getDefaultPageSize();
+    method public static java.lang.String getDefaultSyncMode();
+    method public static int getIdleConnectionTimeout();
+    method public static int getJournalSizeLimit();
+    method public static int getWALAutoCheckpoint();
+    method public static int getWALConnectionPoolSize();
+    method public static java.lang.String getWALSyncMode();
+    method public static int releaseMemory();
+  }
+
   public class SQLiteMisuseException extends android.database.sqlite.SQLiteException {
     ctor public SQLiteMisuseException();
     ctor public SQLiteMisuseException(java.lang.String);
@@ -12024,6 +12125,8 @@
     method public void onDowngrade(android.database.sqlite.SQLiteDatabase, int, int);
     method public void onOpen(android.database.sqlite.SQLiteDatabase);
     method public abstract void onUpgrade(android.database.sqlite.SQLiteDatabase, int, int);
+    method public void setIdleConnectionTimeout(long);
+    method public void setLookasideConfig(int, int);
     method public void setWriteAheadLoggingEnabled(boolean);
   }
 
@@ -13886,6 +13989,7 @@
     method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setOpacity(int);
     method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
     field public static final float MASK_SIZE = 100.0f;
@@ -13967,6 +14071,7 @@
     method public void setAlpha(int);
     method public void setAntiAlias(boolean);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setGravity(int);
     method public void setMipMap(boolean);
     method public void setTargetDensity(android.graphics.Canvas);
@@ -14094,6 +14199,7 @@
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
     method protected void setConstantState(android.graphics.drawable.DrawableContainer.DrawableContainerState);
+    method public void setDither(boolean);
     method public void setEnterFadeDuration(int);
     method public void setExitFadeDuration(int);
     method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
@@ -14160,6 +14266,7 @@
     method public void setColors(int[]);
     method public void setCornerRadii(float[]);
     method public void setCornerRadius(float);
+    method public void setDither(boolean);
     method public void setGradientCenter(float, float);
     method public void setGradientRadius(float);
     method public void setGradientType(int);
@@ -14254,6 +14361,7 @@
     method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setDrawable(int, android.graphics.drawable.Drawable);
     method public boolean setDrawableByLayerId(int, android.graphics.drawable.Drawable);
     method public void setId(int, int);
@@ -14294,6 +14402,7 @@
     method public android.graphics.Paint getPaint();
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setTargetDensity(android.graphics.Canvas);
     method public void setTargetDensity(android.util.DisplayMetrics);
     method public void setTargetDensity(int);
@@ -14356,6 +14465,7 @@
     method protected void onDraw(android.graphics.drawable.shapes.Shape, android.graphics.Canvas, android.graphics.Paint);
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
     method public void setIntrinsicHeight(int);
     method public void setIntrinsicWidth(int);
     method public void setPadding(int, int, int, int);
@@ -14398,27 +14508,32 @@
 
   public class ArcShape extends android.graphics.drawable.shapes.RectShape {
     ctor public ArcShape(float, float);
+    method public android.graphics.drawable.shapes.ArcShape clone() throws java.lang.CloneNotSupportedException;
     method public final float getStartAngle();
     method public final float getSweepAngle();
   }
 
   public class OvalShape extends android.graphics.drawable.shapes.RectShape {
     ctor public OvalShape();
+    method public android.graphics.drawable.shapes.OvalShape clone() throws java.lang.CloneNotSupportedException;
   }
 
   public class PathShape extends android.graphics.drawable.shapes.Shape {
     ctor public PathShape(android.graphics.Path, float, float);
+    method public android.graphics.drawable.shapes.PathShape clone() throws java.lang.CloneNotSupportedException;
     method public void draw(android.graphics.Canvas, android.graphics.Paint);
   }
 
   public class RectShape extends android.graphics.drawable.shapes.Shape {
     ctor public RectShape();
+    method public android.graphics.drawable.shapes.RectShape clone() throws java.lang.CloneNotSupportedException;
     method public void draw(android.graphics.Canvas, android.graphics.Paint);
     method protected final android.graphics.RectF rect();
   }
 
   public class RoundRectShape extends android.graphics.drawable.shapes.RectShape {
     ctor public RoundRectShape(float[], android.graphics.RectF, float[]);
+    method public android.graphics.drawable.shapes.RoundRectShape clone() throws java.lang.CloneNotSupportedException;
   }
 
   public abstract class Shape implements java.lang.Cloneable {
@@ -14503,6 +14618,7 @@
     method public final void autoFocus(android.hardware.Camera.AutoFocusCallback);
     method public final void cancelAutoFocus();
     method public final boolean enableShutterSound(boolean);
+    method protected void finalize();
     method public static void getCameraInfo(int, android.hardware.Camera.CameraInfo);
     method public static int getNumberOfCameras();
     method public android.hardware.Camera.Parameters getParameters();
@@ -15112,6 +15228,7 @@
     method public <T> T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
     method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableCaptureRequestKeys();
     method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getAvailableCaptureResultKeys();
+    method public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeys();
     field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
     field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
     field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_MODES;
@@ -15472,6 +15589,7 @@
   public final class CaptureRequest extends android.hardware.camera2.CameraMetadata implements android.os.Parcelable {
     method public int describeContents();
     method public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
+    method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getKeys();
     method public java.lang.Object getTag();
     method public boolean isReprocess();
     method public void writeToParcel(android.os.Parcel, int);
@@ -15550,6 +15668,7 @@
   public class CaptureResult extends android.hardware.camera2.CameraMetadata {
     method public <T> T get(android.hardware.camera2.CaptureResult.Key<T>);
     method public long getFrameNumber();
+    method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getKeys();
     method public android.hardware.camera2.CaptureRequest getRequest();
     method public int getSequenceId();
     field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
@@ -15841,9 +15960,12 @@
     field public static final int FINGERPRINT_ERROR_CANCELED = 5; // 0x5
     field public static final int FINGERPRINT_ERROR_HW_UNAVAILABLE = 1; // 0x1
     field public static final int FINGERPRINT_ERROR_LOCKOUT = 7; // 0x7
+    field public static final int FINGERPRINT_ERROR_LOCKOUT_PERMANENT = 9; // 0x9
     field public static final int FINGERPRINT_ERROR_NO_SPACE = 4; // 0x4
     field public static final int FINGERPRINT_ERROR_TIMEOUT = 3; // 0x3
     field public static final int FINGERPRINT_ERROR_UNABLE_TO_PROCESS = 2; // 0x2
+    field public static final int FINGERPRINT_ERROR_USER_CANCELED = 10; // 0xa
+    field public static final int FINGERPRINT_ERROR_VENDOR = 8; // 0x8
   }
 
   public static abstract class FingerprintManager.AuthenticationCallback {
@@ -17983,6 +18105,7 @@
   }
 
   public class DateIntervalFormat extends android.icu.text.UFormat {
+    method public synchronized java.lang.Object clone();
     method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition);
     method public final synchronized java.lang.StringBuffer format(android.icu.util.DateInterval, java.lang.StringBuffer, java.text.FieldPosition);
     method public final synchronized java.lang.StringBuffer format(android.icu.util.Calendar, android.icu.util.Calendar, java.lang.StringBuffer, java.text.FieldPosition);
@@ -18766,6 +18889,7 @@
 
   public final class RuleBasedCollator extends android.icu.text.Collator {
     ctor public RuleBasedCollator(java.lang.String) throws java.lang.Exception;
+    method public android.icu.text.RuleBasedCollator cloneAsThawed();
     method public int compare(java.lang.String, java.lang.String);
     method public android.icu.text.CollationElementIterator getCollationElementIterator(java.lang.String);
     method public android.icu.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
@@ -18792,6 +18916,7 @@
     method public void setFrenchCollation(boolean);
     method public void setFrenchCollationDefault();
     method public void setLowerCaseFirst(boolean);
+    method public android.icu.text.RuleBasedCollator setMaxVariable(int);
     method public void setNumericCollation(boolean);
     method public void setNumericCollationDefault();
     method public void setStrengthDefault();
@@ -21370,6 +21495,7 @@
     ctor public AudioRecord(int, int, int, int, int) throws java.lang.IllegalArgumentException;
     method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
     method public deprecated void addOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener, android.os.Handler);
+    method protected void finalize();
     method public int getAudioFormat();
     method public int getAudioSessionId();
     method public int getAudioSource();
@@ -21474,6 +21600,7 @@
     method public deprecated void addOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener, android.os.Handler);
     method public int attachAuxEffect(int);
     method public android.media.VolumeShaper createVolumeShaper(android.media.VolumeShaper.Configuration);
+    method protected void finalize();
     method public void flush();
     method public int getAudioFormat();
     method public int getAudioSessionId();
@@ -21872,6 +21999,7 @@
     method public boolean clearQueue();
     method public java.lang.Object clone() throws java.lang.CloneNotSupportedException;
     method public boolean closeJetFile();
+    method protected void finalize();
     method public static android.media.JetPlayer getJetPlayer();
     method public static int getMaxTracks();
     method public boolean loadJetFile(java.lang.String);
@@ -21911,6 +22039,7 @@
     ctor public MediaCas(int) throws android.media.MediaCasException.UnsupportedCasException;
     method public void close();
     method public static android.media.MediaCas.PluginDescriptor[] enumeratePlugins();
+    method protected void finalize();
     method public static boolean isSystemIdSupported(int);
     method public android.media.MediaCas.Session openSession() throws android.media.MediaCasException;
     method public void processEmm(byte[], int, int) throws android.media.MediaCasException;
@@ -21967,6 +22096,7 @@
     method public static android.view.Surface createPersistentInputSurface();
     method public final int dequeueInputBuffer(long);
     method public final int dequeueOutputBuffer(android.media.MediaCodec.BufferInfo, long);
+    method protected void finalize();
     method public final void flush();
     method public android.media.MediaCodecInfo getCodecInfo();
     method public java.nio.ByteBuffer getInputBuffer(int);
@@ -22207,6 +22337,8 @@
     field public static final int AVCLevel51 = 32768; // 0x8000
     field public static final int AVCLevel52 = 65536; // 0x10000
     field public static final int AVCProfileBaseline = 1; // 0x1
+    field public static final int AVCProfileConstrainedBaseline = 65536; // 0x10000
+    field public static final int AVCProfileConstrainedHigh = 524288; // 0x80000
     field public static final int AVCProfileExtended = 4; // 0x4
     field public static final int AVCProfileHigh = 8; // 0x8
     field public static final int AVCProfileHigh10 = 16; // 0x10
@@ -22224,11 +22356,13 @@
     field public static final int DolbyVisionLevelUhd60 = 256; // 0x100
     field public static final int DolbyVisionProfileDvavPen = 2; // 0x2
     field public static final int DolbyVisionProfileDvavPer = 1; // 0x1
+    field public static final int DolbyVisionProfileDvavSe = 512; // 0x200
     field public static final int DolbyVisionProfileDvheDen = 8; // 0x8
     field public static final int DolbyVisionProfileDvheDer = 4; // 0x4
     field public static final int DolbyVisionProfileDvheDtb = 128; // 0x80
     field public static final int DolbyVisionProfileDvheDth = 64; // 0x40
     field public static final int DolbyVisionProfileDvheDtr = 16; // 0x10
+    field public static final int DolbyVisionProfileDvheSt = 256; // 0x100
     field public static final int DolbyVisionProfileDvheStn = 32; // 0x20
     field public static final int H263Level10 = 1; // 0x1
     field public static final int H263Level20 = 2; // 0x2
@@ -22378,6 +22512,7 @@
 
   public final class MediaCrypto {
     ctor public MediaCrypto(java.util.UUID, byte[]) throws android.media.MediaCryptoException;
+    method protected void finalize();
     method public static final boolean isCryptoSchemeSupported(java.util.UUID);
     method public final void release();
     method public final boolean requiresSecureDecoderComponent(java.lang.String);
@@ -22398,6 +22533,7 @@
     ctor public MediaDescrambler(int) throws android.media.MediaCasException.UnsupportedCasException;
     method public void close();
     method public final int descramble(java.nio.ByteBuffer, java.nio.ByteBuffer, android.media.MediaCodec.CryptoInfo);
+    method protected void finalize();
     method public final boolean requiresSecureDecoderComponent(java.lang.String);
     method public final void setMediaCasSession(android.media.MediaCas.Session);
   }
@@ -22440,6 +22576,7 @@
   public final class MediaDrm {
     ctor public MediaDrm(java.util.UUID) throws android.media.UnsupportedSchemeException;
     method public void closeSession(byte[]);
+    method protected void finalize();
     method public android.media.MediaDrm.CryptoSession getCryptoSession(byte[], java.lang.String, java.lang.String);
     method public android.media.MediaDrm.KeyRequest getKeyRequest(byte[], byte[], java.lang.String, int, java.util.HashMap<java.lang.String, java.lang.String>) throws android.media.NotProvisionedException;
     method public byte[] getPropertyByteArray(java.lang.String);
@@ -22536,6 +22673,7 @@
   public final class MediaExtractor {
     ctor public MediaExtractor();
     method public boolean advance();
+    method protected void finalize();
     method public long getCachedDuration();
     method public android.media.MediaExtractor.CasInfo getCasInfo(int);
     method public android.media.DrmInitData getDrmInitData();
@@ -22768,6 +22906,7 @@
     method public android.graphics.Bitmap getFrameAtTime(long, int);
     method public android.graphics.Bitmap getFrameAtTime(long);
     method public android.graphics.Bitmap getFrameAtTime();
+    method public android.graphics.Bitmap getScaledFrameAtTime(long, int, int, int);
     method public void release();
     method public void setDataSource(java.lang.String) throws java.lang.IllegalArgumentException;
     method public void setDataSource(java.lang.String, java.util.Map<java.lang.String, java.lang.String>) throws java.lang.IllegalArgumentException;
@@ -22837,6 +22976,7 @@
     method public static android.media.MediaPlayer create(android.content.Context, int, android.media.AudioAttributes, int);
     method public android.media.VolumeShaper createVolumeShaper(android.media.VolumeShaper.Configuration);
     method public void deselectTrack(int) throws java.lang.IllegalStateException;
+    method protected void finalize();
     method public int getAudioSessionId();
     method public int getCurrentPosition();
     method public android.media.MediaPlayer.DrmInfo getDrmInfo();
@@ -23032,6 +23172,7 @@
 
   public class MediaRecorder {
     ctor public MediaRecorder();
+    method protected void finalize();
     method public static final int getAudioSourceMax();
     method public int getMaxAmplitude() throws java.lang.IllegalStateException;
     method public android.os.PersistableBundle getMetrics();
@@ -23303,6 +23444,7 @@
   public final class MediaSync {
     ctor public MediaSync();
     method public final android.view.Surface createInputSurface();
+    method protected void finalize();
     method public void flush();
     method public android.media.PlaybackParams getPlaybackParams();
     method public android.media.SyncParams getSyncParams();
@@ -23422,6 +23564,10 @@
 
   public deprecated class RemoteControlClient.MetadataEditor extends android.media.MediaMetadataEditor {
     method public synchronized void apply();
+    method public synchronized android.media.RemoteControlClient.MetadataEditor putBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException;
+    method public synchronized android.media.RemoteControlClient.MetadataEditor putLong(int, long) throws java.lang.IllegalArgumentException;
+    method public synchronized android.media.RemoteControlClient.MetadataEditor putObject(int, java.lang.Object) throws java.lang.IllegalArgumentException;
+    method public synchronized android.media.RemoteControlClient.MetadataEditor putString(int, java.lang.String) throws java.lang.IllegalArgumentException;
     field public static final int BITMAP_KEY_ARTWORK = 100; // 0x64
   }
 
@@ -23468,6 +23614,7 @@
   }
 
   public class Ringtone {
+    method protected void finalize();
     method public android.media.AudioAttributes getAudioAttributes();
     method public deprecated int getStreamType();
     method public java.lang.String getTitle(android.content.Context);
@@ -23521,6 +23668,7 @@
     ctor public deprecated SoundPool(int, int, int);
     method public final void autoPause();
     method public final void autoResume();
+    method protected void finalize();
     method public int load(java.lang.String, int);
     method public int load(android.content.Context, int, int);
     method public int load(android.content.res.AssetFileDescriptor, int);
@@ -23589,6 +23737,7 @@
 
   public class ToneGenerator {
     ctor public ToneGenerator(int, int);
+    method protected void finalize();
     method public final int getAudioSessionId();
     method public void release();
     method public boolean startTone(int);
@@ -23721,6 +23870,7 @@
   public final class VolumeShaper implements java.lang.AutoCloseable {
     method public void apply(android.media.VolumeShaper.Operation);
     method public void close();
+    method protected void finalize();
     method public float getVolume();
     method public void replace(android.media.VolumeShaper.Configuration, android.media.VolumeShaper.Operation, boolean);
   }
@@ -23775,6 +23925,7 @@
   }
 
   public class AudioEffect {
+    method protected void finalize();
     method public android.media.audiofx.AudioEffect.Descriptor getDescriptor() throws java.lang.IllegalStateException;
     method public boolean getEnabled() throws java.lang.IllegalStateException;
     method public int getId() throws java.lang.IllegalStateException;
@@ -24027,6 +24178,7 @@
 
   public class Visualizer {
     ctor public Visualizer(int) throws java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method protected void finalize();
     method public int getCaptureSize() throws java.lang.IllegalStateException;
     method public static int[] getCaptureSizeRange();
     method public boolean getEnabled();
@@ -24584,6 +24736,7 @@
     method public static boolean isChannelUriForPassthroughInput(android.net.Uri);
     method public static boolean isChannelUriForTunerInput(android.net.Uri);
     method public static boolean isProgramUri(android.net.Uri);
+    method public static boolean isRecordedProgramUri(android.net.Uri);
     method public static void requestChannelBrowsable(android.content.Context, long);
     field public static final java.lang.String ACTION_INITIALIZE_PROGRAMS = "android.media.tv.action.INITIALIZE_PROGRAMS";
     field public static final java.lang.String ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT = "android.media.tv.action.PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT";
@@ -25718,6 +25871,7 @@
     field public static final int TRANSPORT_BLUETOOTH = 2; // 0x2
     field public static final int TRANSPORT_CELLULAR = 0; // 0x0
     field public static final int TRANSPORT_ETHERNET = 3; // 0x3
+    field public static final int TRANSPORT_LOWPAN = 6; // 0x6
     field public static final int TRANSPORT_VPN = 4; // 0x4
     field public static final int TRANSPORT_WIFI = 1; // 0x1
     field public static final int TRANSPORT_WIFI_AWARE = 5; // 0x5
@@ -26034,6 +26188,7 @@
     method public boolean protect(java.net.DatagramSocket);
     method public boolean setUnderlyingNetworks(android.net.Network[]);
     field public static final java.lang.String SERVICE_INTERFACE = "android.net.VpnService";
+    field public static final java.lang.String SERVICE_META_DATA_SUPPORTS_ALWAYS_ON = "android.net.VpnService.SUPPORTS_ALWAYS_ON";
   }
 
   public class VpnService.Builder {
@@ -27085,7 +27240,8 @@
     method public abstract void onSuccess();
   }
 
-  public static class WifiP2pManager.Channel {
+  public static class WifiP2pManager.Channel implements java.lang.AutoCloseable {
+    method public void close();
   }
 
   public static abstract interface WifiP2pManager.ChannelListener {
@@ -30624,6 +30780,7 @@
     field public static final int N = 24; // 0x18
     field public static final int N_MR1 = 25; // 0x19
     field public static final int O = 26; // 0x1a
+    field public static final int O_MR1 = 27; // 0x1b
   }
 
   public final class Bundle extends android.os.BaseBundle implements java.lang.Cloneable android.os.Parcelable {
@@ -30689,6 +30846,7 @@
     method public void putStringArrayList(java.lang.String, java.util.ArrayList<java.lang.String>);
     method public void readFromParcel(android.os.Parcel);
     method public void setClassLoader(java.lang.ClassLoader);
+    method public synchronized java.lang.String toString();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.os.Bundle> CREATOR;
     field public static final android.os.Bundle EMPTY;
@@ -30919,6 +31077,7 @@
   public abstract class FileObserver {
     ctor public FileObserver(java.lang.String);
     ctor public FileObserver(java.lang.String, int);
+    method protected void finalize();
     method public abstract void onEvent(int, java.lang.String);
     method public void startWatching();
     method public void stopWatching();
@@ -31091,11 +31250,11 @@
 
   public class MemoryFile {
     ctor public MemoryFile(java.lang.String, int) throws java.io.IOException;
-    method public synchronized boolean allowPurging(boolean) throws java.io.IOException;
+    method public deprecated synchronized boolean allowPurging(boolean) throws java.io.IOException;
     method public void close();
     method public java.io.InputStream getInputStream();
     method public java.io.OutputStream getOutputStream();
-    method public boolean isPurgingAllowed();
+    method public deprecated boolean isPurgingAllowed();
     method public int length();
     method public int readBytes(byte[], int, int, int) throws java.io.IOException;
     method public void writeBytes(byte[], int, int, int) throws java.io.IOException;
@@ -31392,6 +31551,7 @@
     method public int describeContents();
     method public android.os.PersistableBundle getPersistableBundle(java.lang.String);
     method public void putPersistableBundle(java.lang.String, android.os.PersistableBundle);
+    method public synchronized java.lang.String toString();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.os.PersistableBundle> CREATOR;
     field public static final android.os.PersistableBundle EMPTY;
@@ -31520,6 +31680,20 @@
     field public static final android.os.Parcelable.Creator<android.os.ResultReceiver> CREATOR;
   }
 
+  public final class SharedMemory implements java.io.Closeable android.os.Parcelable {
+    method public void close();
+    method public static android.os.SharedMemory create(java.lang.String, int) throws android.system.ErrnoException;
+    method public int describeContents();
+    method public int getSize();
+    method public java.nio.ByteBuffer map(int, int, int) throws android.system.ErrnoException;
+    method public java.nio.ByteBuffer mapReadOnly() throws android.system.ErrnoException;
+    method public java.nio.ByteBuffer mapReadWrite() throws android.system.ErrnoException;
+    method public boolean setProtect(int);
+    method public static void unmap(java.nio.ByteBuffer);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.os.SharedMemory> CREATOR;
+  }
+
   public class StatFs {
     ctor public StatFs(java.lang.String);
     method public deprecated int getAvailableBlocks();
@@ -31544,6 +31718,7 @@
     method public static android.os.StrictMode.VmPolicy getVmPolicy();
     method public static void noteSlowCall(java.lang.String);
     method public static void setThreadPolicy(android.os.StrictMode.ThreadPolicy);
+    method public static void setViolationListener(android.os.StrictMode.ViolationListener);
     method public static void setVmPolicy(android.os.StrictMode.VmPolicy);
   }
 
@@ -31577,6 +31752,10 @@
     method public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
   }
 
+  public static abstract interface StrictMode.ViolationListener {
+    method public abstract void onViolation(java.lang.String);
+  }
+
   public static final class StrictMode.VmPolicy {
     field public static final android.os.StrictMode.VmPolicy LAX;
   }
@@ -31927,6 +32106,7 @@
     method public android.os.storage.StorageVolume getStorageVolume(java.io.File);
     method public java.util.List<android.os.storage.StorageVolume> getStorageVolumes();
     method public java.util.UUID getUuidForPath(java.io.File) throws java.io.IOException;
+    method public boolean isAllocationSupported(java.io.FileDescriptor);
     method public boolean isCacheBehaviorGroup(java.io.File) throws java.io.IOException;
     method public boolean isCacheBehaviorTombstone(java.io.File) throws java.io.IOException;
     method public boolean isEncrypted(java.io.File);
@@ -32618,9 +32798,7 @@
 
   public final class PrintManager {
     method public java.util.List<android.print.PrintJob> getPrintJobs();
-    method public java.util.List<android.printservice.PrintServiceInfo> getPrintServices(int);
     method public android.print.PrintJob print(java.lang.String, android.print.PrintDocumentAdapter, android.print.PrintAttributes);
-    field public static final int ALL_SERVICES = 3; // 0x3
   }
 
   public final class PrinterCapabilitiesInfo implements android.os.Parcelable {
@@ -32750,13 +32928,6 @@
     field public static final java.lang.String SERVICE_META_DATA = "android.printservice";
   }
 
-  public final class PrintServiceInfo implements android.os.Parcelable {
-    method public int describeContents();
-    method public android.content.ComponentName getComponentName();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<android.printservice.PrintServiceInfo> CREATOR;
-  }
-
   public abstract class PrinterDiscoverySession {
     ctor public PrinterDiscoverySession();
     method public final void addPrinters(java.util.List<android.print.PrinterInfo>);
@@ -35023,7 +35194,7 @@
     field public static final java.lang.String DISABLED_PRINT_SERVICES = "disabled_print_services";
     field public static final java.lang.String ENABLED_ACCESSIBILITY_SERVICES = "enabled_accessibility_services";
     field public static final java.lang.String ENABLED_INPUT_METHODS = "enabled_input_methods";
-    field public static final java.lang.String ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES = "enabled_notification_policy_access_packages";
+    field public static final deprecated java.lang.String ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES = "enabled_notification_policy_access_packages";
     field public static final deprecated java.lang.String HTTP_PROXY = "http_proxy";
     field public static final java.lang.String INPUT_METHOD_SELECTOR_VISIBILITY = "input_method_selector_visibility";
     field public static final deprecated java.lang.String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
@@ -35055,6 +35226,7 @@
     field public static final java.lang.String TTS_ENABLED_PLUGINS = "tts_enabled_plugins";
     field public static final deprecated java.lang.String TTS_USE_DEFAULTS = "tts_use_defaults";
     field public static final deprecated java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
+    field public static final java.lang.String USER_SETUP_COMPLETE = "user_setup_complete";
     field public static final deprecated java.lang.String USE_GOOGLE_MAIL = "use_google_mail";
     field public static final java.lang.String VOICE_INTERACTION_SERVICE = "voice_interaction_service";
     field public static final deprecated java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
@@ -35737,6 +35909,7 @@
     method public static android.renderscript.AllocationAdapter create1D(android.renderscript.RenderScript, android.renderscript.Allocation);
     method public static android.renderscript.AllocationAdapter create2D(android.renderscript.RenderScript, android.renderscript.Allocation);
     method public static android.renderscript.AllocationAdapter createTyped(android.renderscript.RenderScript, android.renderscript.Allocation, android.renderscript.Type);
+    method public synchronized void resize(int);
     method public void setFace(android.renderscript.Type.CubemapFace);
     method public void setLOD(int);
     method public void setX(int);
@@ -37008,6 +37181,31 @@
     field public static final java.lang.String SERVICE_META_DATA = "android.autofill";
   }
 
+  public final class CharSequenceTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public void apply(android.service.autofill.ValueFinder, android.widget.RemoteViews, int) throws java.lang.Exception;
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.CharSequenceTransformation> CREATOR;
+  }
+
+  public static class CharSequenceTransformation.Builder {
+    ctor public CharSequenceTransformation.Builder(android.view.autofill.AutofillId, java.util.regex.Pattern, java.lang.String);
+    method public android.service.autofill.CharSequenceTransformation.Builder addField(android.view.autofill.AutofillId, java.util.regex.Pattern, java.lang.String);
+    method public android.service.autofill.CharSequenceTransformation build();
+  }
+
+  public final class CustomDescription implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.CustomDescription> CREATOR;
+  }
+
+  public static class CustomDescription.Builder {
+    ctor public CustomDescription.Builder(android.widget.RemoteViews);
+    method public android.service.autofill.CustomDescription.Builder addChild(int, android.service.autofill.Transformation);
+    method public android.service.autofill.CustomDescription build();
+  }
+
   public final class Dataset implements android.os.Parcelable {
     method public int describeContents();
     method public void writeToParcel(android.os.Parcel, int);
@@ -37081,6 +37279,35 @@
     method public android.service.autofill.FillResponse.Builder setSaveInfo(android.service.autofill.SaveInfo);
   }
 
+  public final class ImageTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public void apply(android.service.autofill.ValueFinder, android.widget.RemoteViews, int) throws java.lang.Exception;
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.ImageTransformation> CREATOR;
+  }
+
+  public static class ImageTransformation.Builder {
+    ctor public ImageTransformation.Builder(android.view.autofill.AutofillId, java.util.regex.Pattern, int);
+    method public android.service.autofill.ImageTransformation.Builder addOption(java.util.regex.Pattern, int);
+    method public android.service.autofill.ImageTransformation build();
+  }
+
+  public final class LuhnChecksumValidator implements android.os.Parcelable android.service.autofill.Validator {
+    ctor public LuhnChecksumValidator(android.view.autofill.AutofillId...);
+    method public int describeContents();
+    method public boolean isValid(android.service.autofill.ValueFinder);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.LuhnChecksumValidator> CREATOR;
+  }
+
+  public final class RegexValidator implements android.os.Parcelable android.service.autofill.Validator {
+    ctor public RegexValidator(android.view.autofill.AutofillId, java.util.regex.Pattern);
+    method public int describeContents();
+    method public boolean isValid(android.service.autofill.ValueFinder);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.service.autofill.RegexValidator> CREATOR;
+  }
+
   public final class SaveCallback {
     method public void onFailure(java.lang.CharSequence);
     method public void onSuccess();
@@ -37103,11 +37330,14 @@
 
   public static final class SaveInfo.Builder {
     ctor public SaveInfo.Builder(int, android.view.autofill.AutofillId[]);
+    ctor public SaveInfo.Builder(int);
     method public android.service.autofill.SaveInfo build();
+    method public android.service.autofill.SaveInfo.Builder setCustomDescription(android.service.autofill.CustomDescription);
     method public android.service.autofill.SaveInfo.Builder setDescription(java.lang.CharSequence);
     method public android.service.autofill.SaveInfo.Builder setFlags(int);
     method public android.service.autofill.SaveInfo.Builder setNegativeAction(int, android.content.IntentSender);
     method public android.service.autofill.SaveInfo.Builder setOptionalIds(android.view.autofill.AutofillId[]);
+    method public android.service.autofill.SaveInfo.Builder setValidator(android.service.autofill.Validator);
   }
 
   public final class SaveRequest implements android.os.Parcelable {
@@ -37118,6 +37348,21 @@
     field public static final android.os.Parcelable.Creator<android.service.autofill.SaveRequest> CREATOR;
   }
 
+  public abstract interface Transformation {
+  }
+
+  public abstract interface Validator {
+  }
+
+  public final class Validators {
+    method public static android.service.autofill.Validator and(android.service.autofill.Validator...);
+    method public static android.service.autofill.Validator or(android.service.autofill.Validator...);
+  }
+
+  public abstract interface ValueFinder {
+    method public abstract java.lang.String findByAutofillId(android.view.autofill.AutofillId);
+  }
+
 }
 
 package android.service.carrier {
@@ -37425,7 +37670,6 @@
     method public static void requestRebind(android.content.ComponentName);
     method public final void requestUnbind();
     method public final void setNotificationsShown(java.lang.String[]);
-    method public final void snoozeNotification(java.lang.String, java.lang.String);
     method public final void snoozeNotification(java.lang.String, long);
     method public final void updateNotificationChannel(java.lang.String, android.os.UserHandle, android.app.NotificationChannel);
     field public static final int HINT_HOST_DISABLE_CALL_EFFECTS = 4; // 0x4
@@ -37466,14 +37710,12 @@
   public static class NotificationListenerService.Ranking {
     ctor public NotificationListenerService.Ranking();
     method public boolean canShowBadge();
-    method public java.util.List<java.lang.String> getAdditionalPeople();
     method public android.app.NotificationChannel getChannel();
     method public int getImportance();
     method public java.lang.CharSequence getImportanceExplanation();
     method public java.lang.String getKey();
     method public java.lang.String getOverrideGroupKey();
     method public int getRank();
-    method public java.util.List<android.service.notification.SnoozeCriterion> getSnoozeCriteria();
     method public int getSuppressedVisualEffects();
     method public boolean isAmbient();
     method public boolean matchesInterruptionFilter();
@@ -37792,8 +38034,10 @@
     method public android.view.SurfaceHolder getSurfaceHolder();
     method public boolean isPreview();
     method public boolean isVisible();
+    method public void notifyColorsChanged();
     method public void onApplyWindowInsets(android.view.WindowInsets);
     method public android.os.Bundle onCommand(java.lang.String, int, int, int, android.os.Bundle, boolean);
+    method public android.app.WallpaperColors onComputeColors();
     method public void onCreate(android.view.SurfaceHolder);
     method public void onDesiredSizeChanged(int, int);
     method public void onDestroy();
@@ -38375,6 +38619,7 @@
     field public static final int FD_CLOEXEC;
     field public static final int FIONREAD;
     field public static final int F_DUPFD;
+    field public static final int F_DUPFD_CLOEXEC;
     field public static final int F_GETFD;
     field public static final int F_GETFL;
     field public static final int F_GETLK;
@@ -38469,7 +38714,9 @@
     field public static final int NI_NUMERICSERV;
     field public static final int O_ACCMODE;
     field public static final int O_APPEND;
+    field public static final int O_CLOEXEC;
     field public static final int O_CREAT;
+    field public static final int O_DSYNC;
     field public static final int O_EXCL;
     field public static final int O_NOCTTY;
     field public static final int O_NOFOLLOW;
@@ -38715,14 +38962,18 @@
 
   public final class StructStat {
     ctor public StructStat(long, long, int, long, int, int, long, long, long, long, long, long, long);
+    ctor public StructStat(long, long, int, long, int, int, long, long, android.system.StructTimespec, android.system.StructTimespec, android.system.StructTimespec, long, long);
+    field public final android.system.StructTimespec st_atim;
     field public final long st_atime;
     field public final long st_blksize;
     field public final long st_blocks;
+    field public final android.system.StructTimespec st_ctim;
     field public final long st_ctime;
     field public final long st_dev;
     field public final int st_gid;
     field public final long st_ino;
     field public final int st_mode;
+    field public final android.system.StructTimespec st_mtim;
     field public final long st_mtime;
     field public final long st_nlink;
     field public final long st_rdev;
@@ -38745,6 +38996,13 @@
     field public final long f_namemax;
   }
 
+  public final class StructTimespec implements java.lang.Comparable {
+    ctor public StructTimespec(long, long);
+    method public int compareTo(android.system.StructTimespec);
+    field public final long tv_nsec;
+    field public final long tv_sec;
+  }
+
   public final class StructUtsname {
     ctor public StructUtsname(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
     field public final java.lang.String machine;
@@ -39611,6 +39869,7 @@
     field public static final java.lang.String KEY_DEFAULT_VM_NUMBER_STRING = "default_vm_number_string";
     field public static final java.lang.String KEY_DIAL_STRING_REPLACE_STRING_ARRAY = "dial_string_replace_string_array";
     field public static final java.lang.String KEY_DISABLE_CDMA_ACTIVATION_CODE_BOOL = "disable_cdma_activation_code_bool";
+    field public static final java.lang.String KEY_DISPLAY_HD_AUDIO_PROPERTY_BOOL = "display_hd_audio_property_bool";
     field public static final java.lang.String KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL = "drop_video_call_when_answering_audio_call_bool";
     field public static final java.lang.String KEY_DTMF_TYPE_ENABLED_BOOL = "dtmf_type_enabled_bool";
     field public static final java.lang.String KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT = "duration_blocking_disabled_after_emergency_int";
@@ -40076,9 +40335,12 @@
     field public static final int MMS_ERROR_UNABLE_CONNECT_MMS = 3; // 0x3
     field public static final int MMS_ERROR_UNSPECIFIED = 1; // 0x1
     field public static final int RESULT_ERROR_GENERIC_FAILURE = 1; // 0x1
+    field public static final int RESULT_ERROR_LIMIT_EXCEEDED = 5; // 0x5
     field public static final int RESULT_ERROR_NO_SERVICE = 4; // 0x4
     field public static final int RESULT_ERROR_NULL_PDU = 3; // 0x3
     field public static final int RESULT_ERROR_RADIO_OFF = 2; // 0x2
+    field public static final int RESULT_ERROR_SHORT_CODE_NEVER_ALLOWED = 8; // 0x8
+    field public static final int RESULT_ERROR_SHORT_CODE_NOT_ALLOWED = 7; // 0x7
     field public static final int STATUS_ON_ICC_FREE = 0; // 0x0
     field public static final int STATUS_ON_ICC_READ = 1; // 0x1
     field public static final int STATUS_ON_ICC_SENT = 5; // 0x5
@@ -40291,6 +40553,7 @@
     field public static final java.lang.String EXTRA_CALL_VOICEMAIL_INTENT = "android.telephony.extra.CALL_VOICEMAIL_INTENT";
     field public static final java.lang.String EXTRA_HIDE_PUBLIC_SETTINGS = "android.telephony.extra.HIDE_PUBLIC_SETTINGS";
     field public static final java.lang.String EXTRA_INCOMING_NUMBER = "incoming_number";
+    field public static final java.lang.String EXTRA_IS_REFRESH = "android.telephony.extra.IS_REFRESH";
     field public static final java.lang.String EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT = "android.telephony.extra.LAUNCH_VOICEMAIL_SETTINGS_INTENT";
     field public static final java.lang.String EXTRA_NOTIFICATION_COUNT = "android.telephony.extra.NOTIFICATION_COUNT";
     field public static final java.lang.String EXTRA_PHONE_ACCOUNT_HANDLE = "android.telephony.extra.PHONE_ACCOUNT_HANDLE";
@@ -40492,6 +40755,7 @@
 
   public static deprecated class SmsMessage.SubmitPdu {
     ctor public deprecated SmsMessage.SubmitPdu();
+    method public deprecated java.lang.String toString();
     field public deprecated byte[] encodedMessage;
     field public deprecated byte[] encodedScAddress;
   }
@@ -40555,6 +40819,7 @@
     method public java.util.List<junit.framework.TestCase> getTestCases();
     method public java.lang.String getTestClassName();
     method public junit.framework.TestResult getTestResult();
+    method protected java.lang.Class loadSuiteClass(java.lang.String) throws java.lang.ClassNotFoundException;
     method protected void runFailed(java.lang.String);
     method public void runTest();
     method public void runTest(junit.framework.TestResult);
@@ -40815,10 +41080,12 @@
     ctor protected MockContentProvider();
     ctor public MockContentProvider(android.content.Context);
     ctor public MockContentProvider(android.content.Context, java.lang.String, java.lang.String, android.content.pm.PathPermission[]);
+    method public android.content.ContentProviderResult[] applyBatch(java.util.ArrayList<android.content.ContentProviderOperation>);
     method public int delete(android.net.Uri, java.lang.String, java.lang.String[]);
     method public java.lang.String getType(android.net.Uri);
     method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
     method public boolean onCreate();
+    method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle);
     method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
     method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
   }
@@ -41044,6 +41311,7 @@
     method public int getPackageUid(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
     method public java.lang.String[] getPackagesForUid(int);
     method public java.util.List<android.content.pm.PackageInfo> getPackagesHoldingPermissions(java.lang.String[], int);
+    method public java.lang.String getPermissionControllerPackageName();
     method public android.content.pm.PermissionGroupInfo getPermissionGroupInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
     method public android.content.pm.PermissionInfo getPermissionInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
     method public int getPreferredActivities(java.util.List<android.content.IntentFilter>, java.util.List<android.content.ComponentName>, java.lang.String);
@@ -41092,6 +41360,10 @@
 
   public deprecated class MockResources extends android.content.res.Resources {
     ctor public MockResources();
+    method public int getColor(int) throws android.content.res.Resources.NotFoundException;
+    method public android.content.res.ColorStateList getColorStateList(int) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
+    method public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics);
   }
 
 }
@@ -41327,6 +41599,7 @@
 
   public static class InputFilter.AllCaps implements android.text.InputFilter {
     ctor public InputFilter.AllCaps();
+    ctor public InputFilter.AllCaps(java.util.Locale);
     method public java.lang.CharSequence filter(java.lang.CharSequence, int, int, android.text.Spanned, int, int);
   }
 
@@ -42339,6 +42612,7 @@
 
   public abstract class MetricAffectingSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateLayout {
     ctor public MetricAffectingSpan();
+    method public android.text.style.MetricAffectingSpan getUnderlying();
     method public abstract void updateMeasureState(android.text.TextPaint);
   }
 
@@ -43020,14 +43294,28 @@
   public class TransitionSet extends android.transition.Transition {
     ctor public TransitionSet();
     ctor public TransitionSet(android.content.Context, android.util.AttributeSet);
+    method public android.transition.TransitionSet addListener(android.transition.Transition.TransitionListener);
+    method public android.transition.TransitionSet addTarget(android.view.View);
+    method public android.transition.TransitionSet addTarget(int);
+    method public android.transition.TransitionSet addTarget(java.lang.String);
+    method public android.transition.TransitionSet addTarget(java.lang.Class);
     method public android.transition.TransitionSet addTransition(android.transition.Transition);
     method public void captureEndValues(android.transition.TransitionValues);
     method public void captureStartValues(android.transition.TransitionValues);
+    method public android.transition.TransitionSet clone();
     method public int getOrdering();
     method public android.transition.Transition getTransitionAt(int);
     method public int getTransitionCount();
+    method public android.transition.TransitionSet removeListener(android.transition.Transition.TransitionListener);
+    method public android.transition.TransitionSet removeTarget(int);
+    method public android.transition.TransitionSet removeTarget(android.view.View);
+    method public android.transition.TransitionSet removeTarget(java.lang.Class);
+    method public android.transition.TransitionSet removeTarget(java.lang.String);
     method public android.transition.TransitionSet removeTransition(android.transition.Transition);
+    method public android.transition.TransitionSet setDuration(long);
+    method public android.transition.TransitionSet setInterpolator(android.animation.TimeInterpolator);
     method public android.transition.TransitionSet setOrdering(int);
+    method public android.transition.TransitionSet setStartDelay(long);
     field public static final int ORDERING_SEQUENTIAL = 1; // 0x1
     field public static final int ORDERING_TOGETHER = 0; // 0x0
   }
@@ -43192,6 +43480,9 @@
 
   public class Base64InputStream extends java.io.FilterInputStream {
     ctor public Base64InputStream(java.io.InputStream, int);
+    method public int available();
+    method public void mark(int);
+    method public void reset();
   }
 
   public class Base64OutputStream extends java.io.FilterOutputStream {
@@ -44026,6 +44317,7 @@
     method public abstract void invalidate();
     method public void invalidateContentRect();
     method public boolean isTitleOptional();
+    method public boolean isUiFocusable();
     method public void onWindowFocusChanged(boolean);
     method public abstract void setCustomView(android.view.View);
     method public abstract void setSubtitle(java.lang.CharSequence);
@@ -44324,9 +44616,13 @@
     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 KEYBOARD_PRESS = 3; // 0x3
+    field public static final int KEYBOARD_RELEASE = 7; // 0x7
     field public static final int KEYBOARD_TAP = 3; // 0x3
     field public static final int LONG_PRESS = 0; // 0x0
+    field public static final int TEXT_HANDLE_MOVE = 9; // 0x9
     field public static final int VIRTUAL_KEY = 1; // 0x1
+    field public static final int VIRTUAL_KEY_RELEASE = 8; // 0x8
   }
 
   public class InflateException extends java.lang.RuntimeException {
@@ -44357,6 +44653,7 @@
     method public android.os.Vibrator getVibrator();
     method public boolean[] hasKeys(int...);
     method public boolean hasMicrophone();
+    method public boolean isEnabled();
     method public boolean isVirtual();
     method public boolean supportsSource(int);
     method public void writeToParcel(android.os.Parcel, int);
@@ -45477,6 +45774,7 @@
     method public android.graphics.Canvas lockCanvas();
     method public android.graphics.Canvas lockCanvas(android.graphics.Rect);
     method protected final void onDraw(android.graphics.Canvas);
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
     method public void setOpaque(boolean);
     method public void setSurfaceTexture(android.graphics.SurfaceTexture);
     method public void setSurfaceTextureListener(android.view.TextureView.SurfaceTextureListener);
@@ -45972,6 +46270,7 @@
     method public void setFocusable(int);
     method public void setFocusableInTouchMode(boolean);
     method public void setFocusedByDefault(boolean);
+    method public final void setFocusedInCluster();
     method public void setForeground(android.graphics.drawable.Drawable);
     method public void setForegroundGravity(int);
     method public void setForegroundTintList(android.content.res.ColorStateList);
@@ -46509,6 +46808,7 @@
     method public int getLayoutMode();
     method public android.animation.LayoutTransition getLayoutTransition();
     method public int getNestedScrollAxes();
+    method public android.view.ViewGroupOverlay getOverlay();
     method public int getPersistentDrawingCache();
     method public boolean getTouchscreenBlocksFocus();
     method public int indexOfChild(android.view.View);
@@ -46939,6 +47239,7 @@
     method public final boolean isActive();
     method public abstract boolean isFloating();
     method public abstract boolean isShortcutKey(int, android.view.KeyEvent);
+    method public boolean isWideColorGamut();
     method public final void makeActive();
     method protected abstract void onActive();
     method public abstract void onConfigurationChanged(android.content.res.Configuration);
@@ -47202,12 +47503,12 @@
     field public static final int FLAG_SCALED = 16384; // 0x4000
     field public static final int FLAG_SECURE = 8192; // 0x2000
     field public static final int FLAG_SHOW_WALLPAPER = 1048576; // 0x100000
-    field public static final int FLAG_SHOW_WHEN_LOCKED = 524288; // 0x80000
+    field public static final deprecated int FLAG_SHOW_WHEN_LOCKED = 524288; // 0x80000
     field public static final int FLAG_SPLIT_TOUCH = 8388608; // 0x800000
     field public static final deprecated int FLAG_TOUCHABLE_WHEN_WAKING = 64; // 0x40
     field public static final int FLAG_TRANSLUCENT_NAVIGATION = 134217728; // 0x8000000
     field public static final int FLAG_TRANSLUCENT_STATUS = 67108864; // 0x4000000
-    field public static final int FLAG_TURN_SCREEN_ON = 2097152; // 0x200000
+    field public static final deprecated int FLAG_TURN_SCREEN_ON = 2097152; // 0x200000
     field public static final int FLAG_WATCH_OUTSIDE_TOUCH = 262144; // 0x40000
     field public static final int FORMAT_CHANGED = 8; // 0x8
     field public static final int LAST_APPLICATION_WINDOW = 99; // 0x63
@@ -47373,6 +47674,7 @@
     method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int);
     method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList();
     method public void interrupt();
+    method public static boolean isAccessibilityButtonSupported();
     method public boolean isEnabled();
     method public boolean isTouchExplorationEnabled();
     method public void removeAccessibilityRequestPreparer(android.view.accessibility.AccessibilityRequestPreparer);
@@ -47793,6 +48095,7 @@
     ctor public Animation(android.content.Context, android.util.AttributeSet);
     method protected void applyTransformation(float, android.view.animation.Transformation);
     method public void cancel();
+    method protected android.view.animation.Animation clone() throws java.lang.CloneNotSupportedException;
     method public long computeDurationHint();
     method protected void ensureInterpolator();
     method public int getBackgroundColor();
@@ -47864,6 +48167,7 @@
     ctor public AnimationSet(android.content.Context, android.util.AttributeSet);
     ctor public AnimationSet(boolean);
     method public void addAnimation(android.view.animation.Animation);
+    method protected android.view.animation.AnimationSet clone() throws java.lang.CloneNotSupportedException;
     method public java.util.List<android.view.animation.Animation> getAnimations();
   }
 
@@ -48050,6 +48354,7 @@
 package android.view.autofill {
 
   public final class AutofillId implements android.os.Parcelable {
+    ctor public AutofillId(int);
     method public int describeContents();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.view.autofill.AutofillId> CREATOR;
@@ -48068,6 +48373,8 @@
     method public void notifyViewEntered(android.view.View, int, android.graphics.Rect);
     method public void notifyViewExited(android.view.View);
     method public void notifyViewExited(android.view.View, int);
+    method public void notifyViewVisibilityChanged(android.view.View, boolean);
+    method public void notifyViewVisibilityChanged(android.view.View, int, boolean);
     method public void registerCallback(android.view.autofill.AutofillManager.AutofillCallback);
     method public void requestAutofill(android.view.View);
     method public void requestAutofill(android.view.View, int, android.graphics.Rect);
@@ -48714,6 +49021,10 @@
   public final deprecated class CookieSyncManager extends android.webkit.WebSyncManager {
     method public static android.webkit.CookieSyncManager createInstance(android.content.Context);
     method public static android.webkit.CookieSyncManager getInstance();
+    method public deprecated void resetSync();
+    method public deprecated void startSync();
+    method public deprecated void stopSync();
+    method public deprecated void sync();
     method protected deprecated void syncFromRamToFlash();
     field protected static final java.lang.String LOGTAG = "websync";
     field protected android.webkit.WebViewDatabase mDataBase;
@@ -48795,6 +49106,13 @@
     method public abstract int rendererPriorityAtExit();
   }
 
+  public abstract class SafeBrowsingResponse {
+    ctor public SafeBrowsingResponse();
+    method public abstract void backToSafety(boolean);
+    method public abstract void proceed(boolean);
+    method public abstract void showInterstitial(boolean);
+  }
+
   public class ServiceWorkerClient {
     ctor public ServiceWorkerClient();
     method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebResourceRequest);
@@ -49213,8 +49531,10 @@
     method public int getProgress();
     method public boolean getRendererPriorityWaivedWhenNotVisible();
     method public int getRendererRequestedPriority();
+    method public static android.net.Uri getSafeBrowsingPrivacyPolicyUrl();
     method public deprecated float getScale();
     method public android.webkit.WebSettings getSettings();
+    method public android.view.textclassifier.TextClassifier getTextClassifier();
     method public java.lang.String getTitle();
     method public java.lang.String getUrl();
     method public android.webkit.WebChromeClient getWebChromeClient();
@@ -49261,11 +49581,15 @@
     method public void setNetworkAvailable(boolean);
     method public deprecated void setPictureListener(android.webkit.WebView.PictureListener);
     method public void setRendererPriorityPolicy(int, boolean);
+    method public static void setSafeBrowsingWhitelist(java.util.List<java.lang.String>, android.webkit.ValueCallback<java.lang.Boolean>);
+    method public void setTextClassifier(android.view.textclassifier.TextClassifier);
     method public deprecated void setVerticalScrollbarOverlay(boolean);
     method public void setWebChromeClient(android.webkit.WebChromeClient);
     method public static void setWebContentsDebuggingEnabled(boolean);
     method public void setWebViewClient(android.webkit.WebViewClient);
+    method public deprecated boolean shouldDelayChildPressedState();
     method public deprecated boolean showFindDialog(java.lang.String, boolean);
+    method public static void startSafeBrowsing(android.content.Context, android.webkit.ValueCallback<java.lang.Boolean>);
     method public void stopLoading();
     method public void zoomBy(float);
     method public boolean zoomIn();
@@ -49328,6 +49652,7 @@
     method public void onReceivedLoginRequest(android.webkit.WebView, java.lang.String, java.lang.String, java.lang.String);
     method public void onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError);
     method public boolean onRenderProcessGone(android.webkit.WebView, android.webkit.RenderProcessGoneDetail);
+    method public void onSafeBrowsingHit(android.webkit.WebView, android.webkit.WebResourceRequest, int, android.webkit.SafeBrowsingResponse);
     method public void onScaleChanged(android.webkit.WebView, float, float);
     method public deprecated void onTooManyRedirects(android.webkit.WebView, android.os.Message, android.os.Message);
     method public void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
@@ -49352,6 +49677,10 @@
     field public static final int ERROR_UNSAFE_RESOURCE = -16; // 0xfffffff0
     field public static final int ERROR_UNSUPPORTED_AUTH_SCHEME = -3; // 0xfffffffd
     field public static final int ERROR_UNSUPPORTED_SCHEME = -10; // 0xfffffff6
+    field public static final int SAFE_BROWSING_THREAT_MALWARE = 1; // 0x1
+    field public static final int SAFE_BROWSING_THREAT_PHISHING = 2; // 0x2
+    field public static final int SAFE_BROWSING_THREAT_UNKNOWN = 0; // 0x0
+    field public static final int SAFE_BROWSING_THREAT_UNWANTED_SOFTWARE = 3; // 0x3
   }
 
   public abstract class WebViewDatabase {
@@ -49388,6 +49717,7 @@
     method public void clearTextFilter();
     method public void deferNotifyDataSetChanged();
     method public void fling(int);
+    method public android.widget.AbsListView.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public int getCacheColorHint();
     method public int getCheckedItemCount();
     method public long[] getCheckedItemIds();
@@ -49554,6 +49884,9 @@
     ctor public ActionMenuView(android.content.Context);
     ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
     method public void dismissPopupMenus();
+    method protected android.widget.ActionMenuView.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
     method public android.view.Menu getMenu();
     method public android.graphics.drawable.Drawable getOverflowIcon();
     method public int getPopupTheme();
@@ -49729,7 +50062,6 @@
     method public void addAll(T...);
     method public void clear();
     method public static android.widget.ArrayAdapter<java.lang.CharSequence> createFromResource(android.content.Context, int, int);
-    method public java.lang.CharSequence[] getAutofillOptions();
     method public android.content.Context getContext();
     method public int getCount();
     method public android.content.res.Resources.Theme getDropDownViewTheme();
@@ -49819,6 +50151,7 @@
     method public void notifyDataSetChanged();
     method public void notifyDataSetInvalidated();
     method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public void setAutofillOptions(java.lang.CharSequence...);
     method public void unregisterDataSetObserver(android.database.DataSetObserver);
   }
 
@@ -50101,6 +50434,7 @@
     ctor public EditText(android.content.Context, android.util.AttributeSet, int);
     ctor public EditText(android.content.Context, android.util.AttributeSet, int, int);
     method public void extendSelection(int);
+    method public android.text.Editable getText();
     method public void selectAll();
     method public void setSelection(int, int);
     method public void setSelection(int);
@@ -50222,6 +50556,8 @@
     ctor public FrameLayout(android.content.Context, android.util.AttributeSet);
     ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int);
     ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.FrameLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public deprecated boolean getConsiderGoneChildrenWhenMeasuring();
     method public boolean getMeasureAllChildren();
     method protected void onLayout(boolean, int, int, int, int);
@@ -50268,6 +50604,9 @@
     ctor public GridLayout(android.content.Context, android.util.AttributeSet);
     ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
     ctor public GridLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.GridLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.GridLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.GridLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
     method public int getAlignmentMode();
     method public int getColumnCount();
     method public int getOrientation();
@@ -50480,6 +50819,9 @@
     ctor public LinearLayout(android.content.Context, android.util.AttributeSet);
     ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int);
     ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.LinearLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.LinearLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.LinearLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
     method public int getBaselineAlignedChildIndex();
     method public android.graphics.drawable.Drawable getDividerDrawable();
     method public int getDividerPadding();
@@ -50868,6 +51210,8 @@
     method public final synchronized void incrementSecondaryProgressBy(int);
     method public boolean isAnimating();
     method public synchronized boolean isIndeterminate();
+    method protected synchronized void onDraw(android.graphics.Canvas);
+    method protected synchronized void onMeasure(int, int);
     method public void onRestoreInstanceState(android.os.Parcelable);
     method public android.os.Parcelable onSaveInstanceState();
     method public synchronized void setIndeterminate(boolean);
@@ -50923,6 +51267,7 @@
     ctor public RadioGroup(android.content.Context, android.util.AttributeSet);
     method public void check(int);
     method public void clearCheck();
+    method public android.widget.RadioGroup.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public int getCheckedRadioButtonId();
     method public void setOnCheckedChangeListener(android.widget.RadioGroup.OnCheckedChangeListener);
   }
@@ -50965,6 +51310,7 @@
     ctor public RelativeLayout(android.content.Context, android.util.AttributeSet);
     ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int);
     ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.widget.RelativeLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public int getGravity();
     method protected void onLayout(boolean, int, int, int, int);
     method public void setGravity(int);
@@ -51509,6 +51855,7 @@
   public class TableLayout extends android.widget.LinearLayout {
     ctor public TableLayout(android.content.Context);
     ctor public TableLayout(android.content.Context, android.util.AttributeSet);
+    method public android.widget.TableLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public boolean isColumnCollapsed(int);
     method public boolean isColumnShrinkable(int);
     method public boolean isColumnStretchable(int);
@@ -51533,6 +51880,7 @@
   public class TableRow extends android.widget.LinearLayout {
     ctor public TableRow(android.content.Context);
     ctor public TableRow(android.content.Context, android.util.AttributeSet);
+    method public android.widget.TableRow.LayoutParams generateLayoutParams(android.util.AttributeSet);
     method public android.view.View getVirtualChildAt(int);
     method public int getVirtualChildCount();
   }
@@ -51881,6 +52229,7 @@
     ctor public ToggleButton(android.content.Context);
     method public java.lang.CharSequence getTextOff();
     method public java.lang.CharSequence getTextOn();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
     method public void setTextOff(java.lang.CharSequence);
     method public void setTextOn(java.lang.CharSequence);
   }
@@ -51892,6 +52241,9 @@
     ctor public Toolbar(android.content.Context, android.util.AttributeSet, int, int);
     method public void collapseActionView();
     method public void dismissPopupMenus();
+    method protected android.widget.Toolbar.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.Toolbar.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.Toolbar.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
     method public int getContentInsetEnd();
     method public int getContentInsetEndWithActions();
     method public int getContentInsetLeft();
@@ -52414,6 +52766,13 @@
   public class BaseDexClassLoader extends java.lang.ClassLoader {
     ctor public BaseDexClassLoader(java.lang.String, java.io.File, java.lang.String, java.lang.ClassLoader);
     method public java.lang.String findLibrary(java.lang.String);
+    method protected java.util.Enumeration<java.net.URL> findResources(java.lang.String);
+    method protected synchronized java.lang.Package getPackage(java.lang.String);
+  }
+
+  public final class DelegateLastClassLoader extends dalvik.system.PathClassLoader {
+    ctor public DelegateLastClassLoader(java.lang.String, java.lang.ClassLoader);
+    ctor public DelegateLastClassLoader(java.lang.String, java.lang.String, java.lang.ClassLoader);
   }
 
   public class DexClassLoader extends dalvik.system.BaseDexClassLoader {
@@ -52432,6 +52791,7 @@
   }
 
   public final class InMemoryDexClassLoader extends dalvik.system.BaseDexClassLoader {
+    ctor public InMemoryDexClassLoader(java.nio.ByteBuffer[], java.lang.ClassLoader);
     ctor public InMemoryDexClassLoader(java.nio.ByteBuffer, java.lang.ClassLoader);
   }
 
@@ -52635,6 +52995,10 @@
   public class BufferedInputStream extends java.io.FilterInputStream {
     ctor public BufferedInputStream(java.io.InputStream);
     ctor public BufferedInputStream(java.io.InputStream, int);
+    method public synchronized int available() throws java.io.IOException;
+    method public synchronized int read() throws java.io.IOException;
+    method public synchronized int read(byte[], int, int) throws java.io.IOException;
+    method public synchronized long skip(long) throws java.io.IOException;
     field protected volatile byte[] buf;
     field protected int count;
     field protected int marklimit;
@@ -52645,6 +53009,9 @@
   public class BufferedOutputStream extends java.io.FilterOutputStream {
     ctor public BufferedOutputStream(java.io.OutputStream);
     ctor public BufferedOutputStream(java.io.OutputStream, int);
+    method public synchronized void flush() throws java.io.IOException;
+    method public synchronized void write(int) throws java.io.IOException;
+    method public synchronized void write(byte[], int, int) throws java.io.IOException;
     field protected byte[] buf;
     field protected int count;
   }
@@ -52670,7 +53037,12 @@
   public class ByteArrayInputStream extends java.io.InputStream {
     ctor public ByteArrayInputStream(byte[]);
     ctor public ByteArrayInputStream(byte[], int, int);
+    method public synchronized int available();
+    method public void mark(int);
     method public synchronized int read();
+    method public synchronized int read(byte[], int, int);
+    method public synchronized void reset();
+    method public synchronized long skip(long);
     field protected byte[] buf;
     field protected int count;
     field protected int mark;
@@ -52683,9 +53055,11 @@
     method public synchronized void reset();
     method public synchronized int size();
     method public synchronized byte[] toByteArray();
+    method public synchronized java.lang.String toString();
     method public synchronized java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException;
     method public deprecated synchronized java.lang.String toString(int);
     method public synchronized void write(int);
+    method public synchronized void write(byte[], int, int);
     method public synchronized void writeTo(java.io.OutputStream) throws java.io.IOException;
     field protected byte[] buf;
     field protected int count;
@@ -52705,12 +53079,17 @@
   public class CharArrayWriter extends java.io.Writer {
     ctor public CharArrayWriter();
     ctor public CharArrayWriter(int);
+    method public java.io.CharArrayWriter append(java.lang.CharSequence);
+    method public java.io.CharArrayWriter append(java.lang.CharSequence, int, int);
+    method public java.io.CharArrayWriter append(char);
     method public void close();
     method public void flush();
     method public void reset();
     method public int size();
     method public char[] toCharArray();
+    method public void write(int);
     method public void write(char[], int, int);
+    method public void write(java.lang.String, int, int);
     method public void writeTo(java.io.Writer) throws java.io.IOException;
     field protected char[] buf;
     field protected int count;
@@ -52797,6 +53176,8 @@
   public class DataOutputStream extends java.io.FilterOutputStream implements java.io.DataOutput {
     ctor public DataOutputStream(java.io.OutputStream);
     method public final int size();
+    method public synchronized void write(int) throws java.io.IOException;
+    method public synchronized void write(byte[], int, int) throws java.io.IOException;
     method public final void writeBoolean(boolean) throws java.io.IOException;
     method public final void writeByte(int) throws java.io.IOException;
     method public final void writeBytes(java.lang.String) throws java.io.IOException;
@@ -52896,6 +53277,7 @@
     ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException;
     ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException;
     ctor public FileInputStream(java.io.FileDescriptor);
+    method protected void finalize() throws java.io.IOException;
     method public java.nio.channels.FileChannel getChannel();
     method public final java.io.FileDescriptor getFD() throws java.io.IOException;
     method public int read() throws java.io.IOException;
@@ -52912,6 +53294,7 @@
     ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException;
     ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException;
     ctor public FileOutputStream(java.io.FileDescriptor);
+    method protected void finalize() throws java.io.IOException;
     method public java.nio.channels.FileChannel getChannel();
     method public final java.io.FileDescriptor getFD() throws java.io.IOException;
     method public void write(int) throws java.io.IOException;
@@ -53025,6 +53408,8 @@
   public deprecated class LineNumberInputStream extends java.io.FilterInputStream {
     ctor public LineNumberInputStream(java.io.InputStream);
     method public int getLineNumber();
+    method public void mark(int);
+    method public void reset() throws java.io.IOException;
     method public void setLineNumber(int);
   }
 
@@ -53254,8 +53639,10 @@
     ctor public PipedInputStream(java.io.PipedOutputStream, int) throws java.io.IOException;
     ctor public PipedInputStream();
     ctor public PipedInputStream(int);
+    method public synchronized int available() throws java.io.IOException;
     method public void connect(java.io.PipedOutputStream) throws java.io.IOException;
     method public synchronized int read() throws java.io.IOException;
+    method public synchronized int read(byte[], int, int) throws java.io.IOException;
     method protected synchronized void receive(int) throws java.io.IOException;
     field protected static final int PIPE_SIZE = 1024; // 0x400
     field protected byte[] buffer;
@@ -53267,6 +53654,7 @@
     ctor public PipedOutputStream(java.io.PipedInputStream) throws java.io.IOException;
     ctor public PipedOutputStream();
     method public synchronized void connect(java.io.PipedInputStream) throws java.io.IOException;
+    method public synchronized void flush() throws java.io.IOException;
     method public void write(int) throws java.io.IOException;
   }
 
@@ -53277,7 +53665,9 @@
     ctor public PipedReader(int);
     method public void close() throws java.io.IOException;
     method public void connect(java.io.PipedWriter) throws java.io.IOException;
+    method public synchronized int read() throws java.io.IOException;
     method public synchronized int read(char[], int, int) throws java.io.IOException;
+    method public synchronized boolean ready() throws java.io.IOException;
   }
 
   public class PipedWriter extends java.io.Writer {
@@ -53302,6 +53692,8 @@
     method public java.io.PrintStream append(char);
     method public boolean checkError();
     method protected void clearError();
+    method public void close();
+    method public void flush();
     method public java.io.PrintStream format(java.lang.String, java.lang.Object...);
     method public java.io.PrintStream format(java.util.Locale, java.lang.String, java.lang.Object...);
     method public void print(boolean);
@@ -53326,6 +53718,8 @@
     method public void println(java.lang.String);
     method public void println(java.lang.Object);
     method protected void setError();
+    method public void write(int);
+    method public void write(byte[], int, int);
   }
 
   public class PrintWriter extends java.io.Writer {
@@ -53337,6 +53731,9 @@
     ctor public PrintWriter(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
     ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException;
     ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    method public java.io.PrintWriter append(java.lang.CharSequence);
+    method public java.io.PrintWriter append(java.lang.CharSequence, int, int);
+    method public java.io.PrintWriter append(char);
     method public boolean checkError();
     method protected void clearError();
     method public void close();
@@ -53365,13 +53762,18 @@
     method public void println(java.lang.String);
     method public void println(java.lang.Object);
     method protected void setError();
+    method public void write(int);
     method public void write(char[], int, int);
+    method public void write(char[]);
+    method public void write(java.lang.String, int, int);
+    method public void write(java.lang.String);
     field protected java.io.Writer out;
   }
 
   public class PushbackInputStream extends java.io.FilterInputStream {
     ctor public PushbackInputStream(java.io.InputStream, int);
     ctor public PushbackInputStream(java.io.InputStream);
+    method public synchronized void close() throws java.io.IOException;
     method public void unread(int) throws java.io.IOException;
     method public void unread(byte[], int, int) throws java.io.IOException;
     method public void unread(byte[]) throws java.io.IOException;
@@ -53495,7 +53897,11 @@
 
   public deprecated class StringBufferInputStream extends java.io.InputStream {
     ctor public StringBufferInputStream(java.lang.String);
+    method public synchronized int available();
     method public synchronized int read();
+    method public synchronized int read(byte[], int, int);
+    method public synchronized void reset();
+    method public synchronized long skip(long);
     field protected java.lang.String buffer;
     field protected int count;
     field protected int pos;
@@ -53510,10 +53916,16 @@
   public class StringWriter extends java.io.Writer {
     ctor public StringWriter();
     ctor public StringWriter(int);
+    method public java.io.StringWriter append(java.lang.CharSequence);
+    method public java.io.StringWriter append(java.lang.CharSequence, int, int);
+    method public java.io.StringWriter append(char);
     method public void close() throws java.io.IOException;
     method public void flush();
     method public java.lang.StringBuffer getBuffer();
+    method public void write(int);
     method public void write(char[], int, int);
+    method public void write(java.lang.String);
+    method public void write(java.lang.String, int, int);
   }
 
   public class SyncFailedException extends java.io.IOException {
@@ -53528,6 +53940,7 @@
   public class UncheckedIOException extends java.lang.RuntimeException {
     ctor public UncheckedIOException(java.lang.String, java.io.IOException);
     ctor public UncheckedIOException(java.io.IOException);
+    method public java.io.IOException getCause();
   }
 
   public class UnsupportedEncodingException extends java.io.IOException {
@@ -53537,6 +53950,7 @@
 
   public class WriteAbortedException extends java.io.ObjectStreamException {
     ctor public WriteAbortedException(java.lang.String, java.lang.Exception);
+    method public java.lang.Throwable getCause();
     field public java.lang.Exception detail;
   }
 
@@ -54304,6 +54718,7 @@
     ctor public ClassNotFoundException();
     ctor public ClassNotFoundException(java.lang.String);
     ctor public ClassNotFoundException(java.lang.String, java.lang.Throwable);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getException();
   }
 
@@ -54408,6 +54823,7 @@
     ctor public ExceptionInInitializerError();
     ctor public ExceptionInInitializerError(java.lang.Throwable);
     ctor public ExceptionInInitializerError(java.lang.String);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getException();
   }
 
@@ -55195,8 +55611,16 @@
     method public synchronized java.lang.StringBuffer append(float);
     method public synchronized java.lang.StringBuffer append(double);
     method public synchronized java.lang.StringBuffer appendCodePoint(int);
+    method public synchronized int capacity();
+    method public synchronized char charAt(int);
+    method public synchronized int codePointAt(int);
+    method public synchronized int codePointBefore(int);
+    method public synchronized int codePointCount(int, int);
     method public synchronized java.lang.StringBuffer delete(int, int);
     method public synchronized java.lang.StringBuffer deleteCharAt(int);
+    method public synchronized void ensureCapacity(int);
+    method public synchronized void getChars(int, int, char[], int);
+    method public synchronized int indexOf(java.lang.String, int);
     method public synchronized java.lang.StringBuffer insert(int, char[], int, int);
     method public synchronized java.lang.StringBuffer insert(int, java.lang.Object);
     method public synchronized java.lang.StringBuffer insert(int, java.lang.String);
@@ -55209,9 +55633,18 @@
     method public java.lang.StringBuffer insert(int, long);
     method public java.lang.StringBuffer insert(int, float);
     method public java.lang.StringBuffer insert(int, double);
+    method public synchronized int lastIndexOf(java.lang.String, int);
+    method public synchronized int length();
+    method public synchronized int offsetByCodePoints(int, int);
     method public synchronized java.lang.StringBuffer replace(int, int, java.lang.String);
     method public synchronized java.lang.StringBuffer reverse();
+    method public synchronized void setCharAt(int, char);
+    method public synchronized void setLength(int);
+    method public synchronized java.lang.CharSequence subSequence(int, int);
+    method public synchronized java.lang.String substring(int);
+    method public synchronized java.lang.String substring(int, int);
     method public synchronized java.lang.String toString();
+    method public synchronized void trimToSize();
   }
 
   public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable {
@@ -55866,6 +56299,7 @@
     ctor protected InvocationTargetException();
     ctor public InvocationTargetException(java.lang.Throwable);
     ctor public InvocationTargetException(java.lang.Throwable, java.lang.String);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getTargetException();
   }
 
@@ -55981,6 +56415,7 @@
   public class UndeclaredThrowableException extends java.lang.RuntimeException {
     ctor public UndeclaredThrowableException(java.lang.Throwable);
     ctor public UndeclaredThrowableException(java.lang.Throwable, java.lang.String);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getUndeclaredThrowable();
   }
 
@@ -56878,6 +57313,7 @@
     method public java.lang.String getQuery();
     method public java.lang.String getRef();
     method public java.lang.String getUserInfo();
+    method public synchronized int hashCode();
     method public java.net.URLConnection openConnection() throws java.io.IOException;
     method public java.net.URLConnection openConnection(java.net.Proxy) throws java.io.IOException;
     method public final java.io.InputStream openStream() throws java.io.IOException;
@@ -57107,7 +57543,6 @@
     method public final int arrayOffset();
     method public abstract java.nio.CharBuffer asReadOnlyBuffer();
     method public final char charAt(int);
-    method public java.util.stream.IntStream chars();
     method public abstract java.nio.CharBuffer compact();
     method public int compareTo(java.nio.CharBuffer);
     method public abstract java.nio.CharBuffer duplicate();
@@ -57964,6 +58399,7 @@
 
   public final class DirectoryIteratorException extends java.util.ConcurrentModificationException {
     ctor public DirectoryIteratorException(java.io.IOException);
+    method public java.io.IOException getCause();
   }
 
   public class DirectoryNotEmptyException extends java.nio.file.FileSystemException {
@@ -58929,9 +59365,11 @@
   public static class KeyStore.PasswordProtection implements javax.security.auth.Destroyable java.security.KeyStore.ProtectionParameter {
     ctor public KeyStore.PasswordProtection(char[]);
     ctor public KeyStore.PasswordProtection(char[], java.lang.String, java.security.spec.AlgorithmParameterSpec);
+    method public synchronized void destroy() throws javax.security.auth.DestroyFailedException;
     method public synchronized char[] getPassword();
     method public java.lang.String getProtectionAlgorithm();
     method public java.security.spec.AlgorithmParameterSpec getProtectionParameters();
+    method public synchronized boolean isDestroyed();
   }
 
   public static final class KeyStore.PrivateKeyEntry implements java.security.KeyStore.Entry {
@@ -59111,6 +59549,7 @@
 
   public class PrivilegedActionException extends java.lang.Exception {
     ctor public PrivilegedActionException(java.lang.Exception);
+    method public java.lang.Throwable getCause();
     method public java.lang.Exception getException();
   }
 
@@ -59133,22 +59572,30 @@
     method public synchronized java.lang.Object compute(java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
     method public synchronized java.lang.Object computeIfAbsent(java.lang.Object, java.util.function.Function<? super java.lang.Object, ? extends java.lang.Object>);
     method public synchronized java.lang.Object computeIfPresent(java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
+    method public java.util.Enumeration<java.lang.Object> elements();
+    method public synchronized java.util.Set<java.util.Map.Entry<java.lang.Object, java.lang.Object>> entrySet();
     method public synchronized void forEach(java.util.function.BiConsumer<? super java.lang.Object, ? super java.lang.Object>);
+    method public java.lang.Object get(java.lang.Object);
     method public java.lang.String getInfo();
     method public java.lang.String getName();
     method public synchronized java.lang.Object getOrDefault(java.lang.Object, java.lang.Object);
     method public synchronized java.security.Provider.Service getService(java.lang.String, java.lang.String);
     method public synchronized java.util.Set<java.security.Provider.Service> getServices();
     method public double getVersion();
+    method public java.util.Set<java.lang.Object> keySet();
+    method public java.util.Enumeration<java.lang.Object> keys();
     method public synchronized java.lang.Object merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
     method public synchronized java.lang.Object put(java.lang.Object, java.lang.Object);
     method public synchronized void putAll(java.util.Map<?, ?>);
     method public synchronized java.lang.Object putIfAbsent(java.lang.Object, java.lang.Object);
     method protected synchronized void putService(java.security.Provider.Service);
+    method public synchronized java.lang.Object remove(java.lang.Object);
     method protected synchronized void removeService(java.security.Provider.Service);
     method public synchronized boolean replace(java.lang.Object, java.lang.Object, java.lang.Object);
     method public synchronized java.lang.Object replace(java.lang.Object, java.lang.Object);
     method public synchronized void replaceAll(java.util.function.BiFunction<? super java.lang.Object, ? super java.lang.Object, ? extends java.lang.Object>);
+    method public java.lang.String toString();
+    method public java.util.Collection<java.lang.Object> values();
   }
 
   public static class Provider.Service {
@@ -59194,7 +59641,9 @@
     method public final java.security.Provider getProvider();
     method public static byte[] getSeed(int);
     method protected final int next(int);
+    method public synchronized void nextBytes(byte[]);
     method public synchronized void setSeed(byte[]);
+    method public void setSeed(long);
   }
 
   public abstract class SecureRandomSpi implements java.io.Serializable {
@@ -59741,6 +60190,7 @@
 
   public abstract class PKIXRevocationChecker extends java.security.cert.PKIXCertPathChecker {
     ctor protected PKIXRevocationChecker();
+    method public java.security.cert.PKIXRevocationChecker clone();
     method public java.util.List<java.security.cert.Extension> getOcspExtensions();
     method public java.net.URI getOcspResponder();
     method public java.security.cert.X509Certificate getOcspResponderCert();
@@ -61993,7 +62443,6 @@
   public final class DayOfWeek extends java.lang.Enum implements java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
     method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
     method public static java.time.DayOfWeek from(java.time.temporal.TemporalAccessor);
-    method public int get(java.time.temporal.TemporalField);
     method public java.lang.String getDisplayName(java.time.format.TextStyle, java.util.Locale);
     method public long getLong(java.time.temporal.TemporalField);
     method public int getValue();
@@ -62001,8 +62450,6 @@
     method public java.time.DayOfWeek minus(long);
     method public static java.time.DayOfWeek of(int);
     method public java.time.DayOfWeek plus(long);
-    method public <R> R query(java.time.temporal.TemporalQuery<R>);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
     method public static java.time.DayOfWeek valueOf(java.lang.String);
     method public static final java.time.DayOfWeek[] values();
     enum_constant public static final java.time.DayOfWeek FRIDAY;
@@ -62078,6 +62525,8 @@
     method public boolean isBefore(java.time.Instant);
     method public boolean isSupported(java.time.temporal.TemporalField);
     method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.Instant minus(java.time.temporal.TemporalAmount);
+    method public java.time.Instant minus(long, java.time.temporal.TemporalUnit);
     method public java.time.Instant minusMillis(long);
     method public java.time.Instant minusNanos(long);
     method public java.time.Instant minusSeconds(long);
@@ -62087,6 +62536,7 @@
     method public static java.time.Instant ofEpochSecond(long);
     method public static java.time.Instant ofEpochSecond(long, long);
     method public static java.time.Instant parse(java.lang.CharSequence);
+    method public java.time.Instant plus(java.time.temporal.TemporalAmount);
     method public java.time.Instant plus(long, java.time.temporal.TemporalUnit);
     method public java.time.Instant plusMillis(long);
     method public java.time.Instant plusNanos(long);
@@ -62094,6 +62544,7 @@
     method public long toEpochMilli();
     method public java.time.Instant truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.Instant with(java.time.temporal.TemporalAdjuster);
     method public java.time.Instant with(java.time.temporal.TemporalField, long);
     field public static final java.time.Instant EPOCH;
     field public static final java.time.Instant MAX;
@@ -62103,6 +62554,7 @@
   public final class LocalDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
     method public java.time.LocalDateTime atStartOfDay();
     method public java.time.ZonedDateTime atStartOfDay(java.time.ZoneId);
+    method public java.time.LocalDateTime atTime(java.time.LocalTime);
     method public java.time.LocalDateTime atTime(int, int);
     method public java.time.LocalDateTime atTime(int, int, int);
     method public java.time.LocalDateTime atTime(int, int, int, int);
@@ -62117,6 +62569,8 @@
     method public int getMonthValue();
     method public int getYear();
     method public int lengthOfMonth();
+    method public java.time.LocalDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDate minus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalDate minusDays(long);
     method public java.time.LocalDate minusMonths(long);
     method public java.time.LocalDate minusWeeks(long);
@@ -62130,12 +62584,16 @@
     method public static java.time.LocalDate ofYearDay(int, int);
     method public static java.time.LocalDate parse(java.lang.CharSequence);
     method public static java.time.LocalDate parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalDate plusDays(long);
     method public java.time.LocalDate plusMonths(long);
     method public java.time.LocalDate plusWeeks(long);
     method public java.time.LocalDate plusYears(long);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
     method public java.time.Period until(java.time.chrono.ChronoLocalDate);
+    method public java.time.LocalDate with(java.time.temporal.TemporalAdjuster);
+    method public java.time.LocalDate with(java.time.temporal.TemporalField, long);
     method public java.time.LocalDate withDayOfMonth(int);
     method public java.time.LocalDate withDayOfYear(int);
     method public java.time.LocalDate withMonth(int);
@@ -62160,6 +62618,8 @@
     method public int getSecond();
     method public int getYear();
     method public boolean isSupported(java.time.temporal.TemporalField);
+    method public java.time.LocalDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDateTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalDateTime minusDays(long);
     method public java.time.LocalDateTime minusHours(long);
     method public java.time.LocalDateTime minusMinutes(long);
@@ -62182,6 +62642,7 @@
     method public static java.time.LocalDateTime ofInstant(java.time.Instant, java.time.ZoneId);
     method public static java.time.LocalDateTime parse(java.lang.CharSequence);
     method public static java.time.LocalDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalDateTime plus(java.time.temporal.TemporalAmount);
     method public java.time.LocalDateTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalDateTime plusDays(long);
     method public java.time.LocalDateTime plusHours(long);
@@ -62195,6 +62656,7 @@
     method public java.time.LocalTime toLocalTime();
     method public java.time.LocalDateTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.LocalDateTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.LocalDateTime with(java.time.temporal.TemporalField, long);
     method public java.time.LocalDateTime withDayOfMonth(int);
     method public java.time.LocalDateTime withDayOfYear(int);
@@ -62224,6 +62686,8 @@
     method public boolean isBefore(java.time.LocalTime);
     method public boolean isSupported(java.time.temporal.TemporalField);
     method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalTime minusHours(long);
     method public java.time.LocalTime minusMinutes(long);
     method public java.time.LocalTime minusNanos(long);
@@ -62238,6 +62702,7 @@
     method public static java.time.LocalTime ofSecondOfDay(long);
     method public static java.time.LocalTime parse(java.lang.CharSequence);
     method public static java.time.LocalTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalTime plus(java.time.temporal.TemporalAmount);
     method public java.time.LocalTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.LocalTime plusHours(long);
     method public java.time.LocalTime plusMinutes(long);
@@ -62247,6 +62712,7 @@
     method public int toSecondOfDay();
     method public java.time.LocalTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.LocalTime with(java.time.temporal.TemporalField, long);
     method public java.time.LocalTime withHour(int);
     method public java.time.LocalTime withMinute(int);
@@ -62263,7 +62729,6 @@
     method public int firstDayOfYear(boolean);
     method public java.time.Month firstMonthOfQuarter();
     method public static java.time.Month from(java.time.temporal.TemporalAccessor);
-    method public int get(java.time.temporal.TemporalField);
     method public java.lang.String getDisplayName(java.time.format.TextStyle, java.util.Locale);
     method public long getLong(java.time.temporal.TemporalField);
     method public int getValue();
@@ -62274,8 +62739,6 @@
     method public java.time.Month minus(long);
     method public static java.time.Month of(int);
     method public java.time.Month plus(long);
-    method public <R> R query(java.time.temporal.TemporalQuery<R>);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
     method public static java.time.Month valueOf(java.lang.String);
     method public static final java.time.Month[] values();
     enum_constant public static final java.time.Month APRIL;
@@ -62342,6 +62805,8 @@
     method public boolean isEqual(java.time.OffsetDateTime);
     method public boolean isSupported(java.time.temporal.TemporalField);
     method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetDateTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.OffsetDateTime minusDays(long);
     method public java.time.OffsetDateTime minusHours(long);
     method public java.time.OffsetDateTime minusMinutes(long);
@@ -62359,6 +62824,7 @@
     method public static java.time.OffsetDateTime ofInstant(java.time.Instant, java.time.ZoneId);
     method public static java.time.OffsetDateTime parse(java.lang.CharSequence);
     method public static java.time.OffsetDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.OffsetDateTime plus(java.time.temporal.TemporalAmount);
     method public java.time.OffsetDateTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.OffsetDateTime plusDays(long);
     method public java.time.OffsetDateTime plusHours(long);
@@ -62378,6 +62844,7 @@
     method public java.time.ZonedDateTime toZonedDateTime();
     method public java.time.OffsetDateTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.OffsetDateTime with(java.time.temporal.TemporalField, long);
     method public java.time.OffsetDateTime withDayOfMonth(int);
     method public java.time.OffsetDateTime withDayOfYear(int);
@@ -62410,6 +62877,8 @@
     method public boolean isEqual(java.time.OffsetTime);
     method public boolean isSupported(java.time.temporal.TemporalField);
     method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.OffsetTime minusHours(long);
     method public java.time.OffsetTime minusMinutes(long);
     method public java.time.OffsetTime minusNanos(long);
@@ -62422,6 +62891,7 @@
     method public static java.time.OffsetTime ofInstant(java.time.Instant, java.time.ZoneId);
     method public static java.time.OffsetTime parse(java.lang.CharSequence);
     method public static java.time.OffsetTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.OffsetTime plus(java.time.temporal.TemporalAmount);
     method public java.time.OffsetTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.OffsetTime plusHours(long);
     method public java.time.OffsetTime plusMinutes(long);
@@ -62430,6 +62900,7 @@
     method public java.time.LocalTime toLocalTime();
     method public java.time.OffsetTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.OffsetTime with(java.time.temporal.TemporalField, long);
     method public java.time.OffsetTime withHour(int);
     method public java.time.OffsetTime withMinute(int);
@@ -62456,6 +62927,7 @@
     method public java.time.Period minusMonths(long);
     method public java.time.Period minusYears(long);
     method public java.time.Period multipliedBy(int);
+    method public java.time.Period negated();
     method public java.time.Period normalized();
     method public static java.time.Period of(int, int, int);
     method public static java.time.Period ofDays(int);
@@ -62494,6 +62966,8 @@
     method public boolean isSupported(java.time.temporal.TemporalUnit);
     method public boolean isValidMonthDay(java.time.MonthDay);
     method public int length();
+    method public java.time.Year minus(java.time.temporal.TemporalAmount);
+    method public java.time.Year minus(long, java.time.temporal.TemporalUnit);
     method public java.time.Year minusYears(long);
     method public static java.time.Year now();
     method public static java.time.Year now(java.time.ZoneId);
@@ -62501,9 +62975,11 @@
     method public static java.time.Year of(int);
     method public static java.time.Year parse(java.lang.CharSequence);
     method public static java.time.Year parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.Year plus(java.time.temporal.TemporalAmount);
     method public java.time.Year plus(long, java.time.temporal.TemporalUnit);
     method public java.time.Year plusYears(long);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.Year with(java.time.temporal.TemporalAdjuster);
     method public java.time.Year with(java.time.temporal.TemporalField, long);
     field public static final int MAX_VALUE = 999999999; // 0x3b9ac9ff
     field public static final int MIN_VALUE = -999999999; // 0xc4653601
@@ -62528,6 +63004,8 @@
     method public boolean isValidDay(int);
     method public int lengthOfMonth();
     method public int lengthOfYear();
+    method public java.time.YearMonth minus(java.time.temporal.TemporalAmount);
+    method public java.time.YearMonth minus(long, java.time.temporal.TemporalUnit);
     method public java.time.YearMonth minusMonths(long);
     method public java.time.YearMonth minusYears(long);
     method public static java.time.YearMonth now();
@@ -62537,10 +63015,12 @@
     method public static java.time.YearMonth of(int, int);
     method public static java.time.YearMonth parse(java.lang.CharSequence);
     method public static java.time.YearMonth parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.YearMonth plus(java.time.temporal.TemporalAmount);
     method public java.time.YearMonth plus(long, java.time.temporal.TemporalUnit);
     method public java.time.YearMonth plusMonths(long);
     method public java.time.YearMonth plusYears(long);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.YearMonth with(java.time.temporal.TemporalAdjuster);
     method public java.time.YearMonth with(java.time.temporal.TemporalField, long);
     method public java.time.YearMonth withMonth(int);
     method public java.time.YearMonth withYear(int);
@@ -62564,7 +63044,6 @@
     method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
     method public int compareTo(java.time.ZoneOffset);
     method public static java.time.ZoneOffset from(java.time.temporal.TemporalAccessor);
-    method public int get(java.time.temporal.TemporalField);
     method public java.lang.String getId();
     method public long getLong(java.time.temporal.TemporalField);
     method public java.time.zone.ZoneRules getRules();
@@ -62575,8 +63054,6 @@
     method public static java.time.ZoneOffset ofHoursMinutes(int, int);
     method public static java.time.ZoneOffset ofHoursMinutesSeconds(int, int, int);
     method public static java.time.ZoneOffset ofTotalSeconds(int);
-    method public <R> R query(java.time.temporal.TemporalQuery<R>);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
     field public static final java.time.ZoneOffset MAX;
     field public static final java.time.ZoneOffset MIN;
     field public static final java.time.ZoneOffset UTC;
@@ -62597,6 +63074,8 @@
     method public int getYear();
     method public java.time.ZoneId getZone();
     method public boolean isSupported(java.time.temporal.TemporalField);
+    method public java.time.ZonedDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.ZonedDateTime minus(long, java.time.temporal.TemporalUnit);
     method public java.time.ZonedDateTime minusDays(long);
     method public java.time.ZonedDateTime minusHours(long);
     method public java.time.ZonedDateTime minusMinutes(long);
@@ -62617,6 +63096,7 @@
     method public static java.time.ZonedDateTime ofStrict(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneId);
     method public static java.time.ZonedDateTime parse(java.lang.CharSequence);
     method public static java.time.ZonedDateTime parse(java.lang.CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.ZonedDateTime plus(java.time.temporal.TemporalAmount);
     method public java.time.ZonedDateTime plus(long, java.time.temporal.TemporalUnit);
     method public java.time.ZonedDateTime plusDays(long);
     method public java.time.ZonedDateTime plusHours(long);
@@ -62626,10 +63106,12 @@
     method public java.time.ZonedDateTime plusSeconds(long);
     method public java.time.ZonedDateTime plusWeeks(long);
     method public java.time.ZonedDateTime plusYears(long);
+    method public java.time.LocalDate toLocalDate();
     method public java.time.LocalDateTime toLocalDateTime();
     method public java.time.OffsetDateTime toOffsetDateTime();
     method public java.time.ZonedDateTime truncatedTo(java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.ZonedDateTime with(java.time.temporal.TemporalAdjuster);
     method public java.time.ZonedDateTime with(java.time.temporal.TemporalField, long);
     method public java.time.ZonedDateTime withDayOfMonth(int);
     method public java.time.ZonedDateTime withDayOfYear(int);
@@ -62674,17 +63156,27 @@
     method public default boolean isSupported(java.time.temporal.TemporalUnit);
     method public abstract int lengthOfMonth();
     method public default int lengthOfYear();
+    method public default java.time.chrono.ChronoLocalDate minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoLocalDate minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDate plus(java.time.temporal.TemporalAmount);
     method public default java.time.chrono.ChronoLocalDate plus(long, java.time.temporal.TemporalUnit);
     method public static java.util.Comparator<java.time.chrono.ChronoLocalDate> timeLineOrder();
     method public default long toEpochDay();
     method public abstract java.lang.String toString();
     method public abstract long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
     method public abstract java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalAdjuster);
     method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalField, long);
   }
 
    abstract class ChronoLocalDateImpl<D extends java.time.chrono.ChronoLocalDate> implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public D minus(java.time.temporal.TemporalAmount);
+    method public D minus(long, java.time.temporal.TemporalUnit);
+    method public D plus(java.time.temporal.TemporalAmount);
+    method public D plus(long, java.time.temporal.TemporalUnit);
     method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public D with(java.time.temporal.TemporalAdjuster);
+    method public D with(java.time.temporal.TemporalField, long);
   }
 
   public abstract interface ChronoLocalDateTime<D extends java.time.chrono.ChronoLocalDate> implements java.lang.Comparable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
@@ -62701,6 +63193,9 @@
     method public default boolean isEqual(java.time.chrono.ChronoLocalDateTime<?>);
     method public abstract boolean isSupported(java.time.temporal.TemporalField);
     method public default boolean isSupported(java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDateTime<D> minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoLocalDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDateTime<D> plus(java.time.temporal.TemporalAmount);
     method public abstract java.time.chrono.ChronoLocalDateTime<D> plus(long, java.time.temporal.TemporalUnit);
     method public static java.util.Comparator<java.time.chrono.ChronoLocalDateTime<?>> timeLineOrder();
     method public default long toEpochSecond(java.time.ZoneOffset);
@@ -62708,6 +63203,7 @@
     method public abstract D toLocalDate();
     method public abstract java.time.LocalTime toLocalTime();
     method public abstract java.lang.String toString();
+    method public default java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalAdjuster);
     method public abstract java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalField, long);
   }
 
@@ -62745,6 +63241,9 @@
     method public default boolean isEqual(java.time.chrono.ChronoZonedDateTime<?>);
     method public abstract boolean isSupported(java.time.temporal.TemporalField);
     method public default boolean isSupported(java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoZonedDateTime<D> minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoZonedDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoZonedDateTime<D> plus(java.time.temporal.TemporalAmount);
     method public abstract java.time.chrono.ChronoZonedDateTime<D> plus(long, java.time.temporal.TemporalUnit);
     method public static java.util.Comparator<java.time.chrono.ChronoZonedDateTime<?>> timeLineOrder();
     method public default long toEpochSecond();
@@ -62753,6 +63252,7 @@
     method public abstract java.time.chrono.ChronoLocalDateTime<D> toLocalDateTime();
     method public default java.time.LocalTime toLocalTime();
     method public abstract java.lang.String toString();
+    method public default java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalAdjuster);
     method public abstract java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalField, long);
     method public abstract java.time.chrono.ChronoZonedDateTime<D> withEarlierOffsetAtOverlap();
     method public abstract java.time.chrono.ChronoZonedDateTime<D> withLaterOffsetAtOverlap();
@@ -62819,6 +63319,7 @@
     method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.HijrahDate> localDateTime(java.time.temporal.TemporalAccessor);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.HijrahDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.HijrahChronology INSTANCE;
@@ -62830,23 +63331,24 @@
     method public java.time.chrono.HijrahChronology getChronology();
     method public java.time.chrono.HijrahEra getEra();
     method public long getLong(java.time.temporal.TemporalField);
-    method public boolean isLeapYear();
     method public int lengthOfMonth();
-    method public int lengthOfYear();
+    method public java.time.chrono.HijrahDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.HijrahDate minus(long, java.time.temporal.TemporalUnit);
     method public static java.time.chrono.HijrahDate now();
     method public static java.time.chrono.HijrahDate now(java.time.ZoneId);
     method public static java.time.chrono.HijrahDate now(java.time.Clock);
     method public static java.time.chrono.HijrahDate of(int, int, int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
-    method public long toEpochDay();
+    method public java.time.chrono.HijrahDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.HijrahDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalAdjuster);
     method public java.time.chrono.HijrahDate withVariant(java.time.chrono.HijrahChronology);
   }
 
   public final class HijrahEra extends java.lang.Enum implements java.time.chrono.Era {
     method public int getValue();
     method public static java.time.chrono.HijrahEra of(int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
     method public static java.time.chrono.HijrahEra valueOf(java.lang.String);
     method public static final java.time.chrono.HijrahEra[] values();
     enum_constant public static final java.time.chrono.HijrahEra AH;
@@ -62871,6 +63373,7 @@
     method public java.time.Period period(int, int, int);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.LocalDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.ZonedDateTime zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.ZonedDateTime zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.IsoChronology INSTANCE;
@@ -62903,6 +63406,7 @@
     method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.JapaneseDate> localDateTime(java.time.temporal.TemporalAccessor);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.JapaneseDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.JapaneseChronology INSTANCE;
@@ -62914,17 +63418,19 @@
     method public java.time.chrono.JapaneseChronology getChronology();
     method public java.time.chrono.JapaneseEra getEra();
     method public long getLong(java.time.temporal.TemporalField);
-    method public boolean isSupported(java.time.temporal.TemporalField);
     method public int lengthOfMonth();
-    method public int lengthOfYear();
+    method public java.time.chrono.JapaneseDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.JapaneseDate minus(long, java.time.temporal.TemporalUnit);
     method public static java.time.chrono.JapaneseDate now();
     method public static java.time.chrono.JapaneseDate now(java.time.ZoneId);
     method public static java.time.chrono.JapaneseDate now(java.time.Clock);
     method public static java.time.chrono.JapaneseDate of(java.time.chrono.JapaneseEra, int, int, int);
     method public static java.time.chrono.JapaneseDate of(int, int, int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
-    method public long toEpochDay();
+    method public java.time.chrono.JapaneseDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.JapaneseDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalAdjuster);
   }
 
   public final class JapaneseEra implements java.time.chrono.Era java.io.Serializable {
@@ -62956,6 +63462,7 @@
     method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.MinguoDate> localDateTime(java.time.temporal.TemporalAccessor);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.MinguoDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.MinguoChronology INSTANCE;
@@ -62968,13 +63475,17 @@
     method public java.time.chrono.MinguoEra getEra();
     method public long getLong(java.time.temporal.TemporalField);
     method public int lengthOfMonth();
+    method public java.time.chrono.MinguoDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.MinguoDate minus(long, java.time.temporal.TemporalUnit);
     method public static java.time.chrono.MinguoDate now();
     method public static java.time.chrono.MinguoDate now(java.time.ZoneId);
     method public static java.time.chrono.MinguoDate now(java.time.Clock);
     method public static java.time.chrono.MinguoDate of(int, int, int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
-    method public long toEpochDay();
+    method public java.time.chrono.MinguoDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.MinguoDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalAdjuster);
   }
 
   public final class MinguoEra extends java.lang.Enum implements java.time.chrono.Era {
@@ -63004,6 +63515,7 @@
     method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.ThaiBuddhistDate> localDateTime(java.time.temporal.TemporalAccessor);
     method public int prolepticYear(java.time.chrono.Era, int);
     method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.ThaiBuddhistDate resolveDate(java.util.Map<java.time.temporal.TemporalField, java.lang.Long>, java.time.format.ResolverStyle);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.temporal.TemporalAccessor);
     method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
     field public static final java.time.chrono.ThaiBuddhistChronology INSTANCE;
@@ -63016,13 +63528,17 @@
     method public java.time.chrono.ThaiBuddhistEra getEra();
     method public long getLong(java.time.temporal.TemporalField);
     method public int lengthOfMonth();
+    method public java.time.chrono.ThaiBuddhistDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ThaiBuddhistDate minus(long, java.time.temporal.TemporalUnit);
     method public static java.time.chrono.ThaiBuddhistDate now();
     method public static java.time.chrono.ThaiBuddhistDate now(java.time.ZoneId);
     method public static java.time.chrono.ThaiBuddhistDate now(java.time.Clock);
     method public static java.time.chrono.ThaiBuddhistDate of(int, int, int);
-    method public java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
-    method public long toEpochDay();
+    method public java.time.chrono.ThaiBuddhistDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ThaiBuddhistDate plus(long, java.time.temporal.TemporalUnit);
     method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalAdjuster);
   }
 
   public final class ThaiBuddhistEra extends java.lang.Enum implements java.time.chrono.Era {
@@ -63201,7 +63717,6 @@
     method public int checkValidIntValue(long);
     method public long checkValidValue(long);
     method public java.time.temporal.TemporalUnit getBaseUnit();
-    method public java.lang.String getDisplayName(java.util.Locale);
     method public long getFrom(java.time.temporal.TemporalAccessor);
     method public java.time.temporal.TemporalUnit getRangeUnit();
     method public boolean isDateBased();
@@ -63249,7 +63764,6 @@
     method public java.time.Duration getDuration();
     method public boolean isDateBased();
     method public boolean isDurationEstimated();
-    method public boolean isSupportedBy(java.time.temporal.Temporal);
     method public boolean isTimeBased();
     method public static java.time.temporal.ChronoUnit valueOf(java.lang.String);
     method public static final java.time.temporal.ChronoUnit[] values();
@@ -63589,7 +64103,6 @@
     method public E removeLast();
     method public boolean removeLastOccurrence(java.lang.Object);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public class ArrayList<E> extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
@@ -63600,11 +64113,7 @@
     method public void ensureCapacity(int);
     method public void forEach(java.util.function.Consumer<? super E>);
     method public E get(int);
-    method public boolean removeIf(java.util.function.Predicate<? super E>);
-    method public void replaceAll(java.util.function.UnaryOperator<E>);
     method public int size();
-    method public void sort(java.util.Comparator<? super E>);
-    method public java.util.Spliterator<E> spliterator();
     method public void trimToSize();
   }
 
@@ -63975,6 +64484,7 @@
     method public default boolean removeIf(java.util.function.Predicate<? super E>);
     method public abstract boolean retainAll(java.util.Collection<?>);
     method public abstract int size();
+    method public default java.util.Spliterator<E> spliterator();
     method public default java.util.stream.Stream<E> stream();
     method public abstract java.lang.Object[] toArray();
     method public abstract <T> T[] toArray(T[]);
@@ -64315,18 +64825,7 @@
     ctor public HashMap();
     ctor public HashMap(java.util.Map<? extends K, ? extends V>);
     method public java.lang.Object clone();
-    method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
-    method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
-    method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
-    method public V getOrDefault(java.lang.Object, V);
-    method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
-    method public V putIfAbsent(K, V);
-    method public boolean remove(java.lang.Object, java.lang.Object);
-    method public boolean replace(K, V, V);
-    method public V replace(K, V);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
   }
 
   public class HashSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
@@ -64337,7 +64836,6 @@
     method public java.lang.Object clone();
     method public java.util.Iterator<E> iterator();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public class Hashtable<K, V> extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
@@ -64355,9 +64853,11 @@
     method public boolean containsValue(java.lang.Object);
     method public synchronized java.util.Enumeration<V> elements();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
+    method public synchronized boolean equals(java.lang.Object);
     method public synchronized void forEach(java.util.function.BiConsumer<? super K, ? super V>);
     method public synchronized V get(java.lang.Object);
     method public synchronized V getOrDefault(java.lang.Object, V);
+    method public synchronized int hashCode();
     method public synchronized boolean isEmpty();
     method public java.util.Set<K> keySet();
     method public synchronized java.util.Enumeration<K> keys();
@@ -64372,6 +64872,7 @@
     method public synchronized V replace(K, V);
     method public synchronized void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public synchronized int size();
+    method public synchronized java.lang.String toString();
     method public java.util.Collection<V> values();
   }
 
@@ -64381,8 +64882,6 @@
     ctor public IdentityHashMap(java.util.Map<? extends K, ? extends V>);
     method public java.lang.Object clone();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
   }
 
   public class IllegalFormatCodePointException extends java.util.IllegalFormatException {
@@ -64493,7 +64992,6 @@
     method public E removeLast();
     method public boolean removeLastOccurrence(java.lang.Object);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public abstract interface List<E> implements java.util.Collection {
@@ -65116,6 +65614,7 @@
     ctor public SimpleTimeZone(int, java.lang.String, int, int, int, int, int, int, int, int, int, int, int);
     method public int getOffset(int, int, int, int, int, int);
     method public int getRawOffset();
+    method public synchronized int hashCode();
     method public boolean inDaylightTime(java.util.Date);
     method public void setDSTSavings(int);
     method public void setEndRule(int, int, int, int);
@@ -65388,7 +65887,6 @@
     method public K firstKey();
     method public java.util.Map.Entry<K, V> floorEntry(K);
     method public K floorKey(K);
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
     method public java.util.NavigableMap<K, V> headMap(K, boolean);
     method public java.util.SortedMap<K, V> headMap(K);
     method public java.util.Map.Entry<K, V> higherEntry(K);
@@ -65400,9 +65898,6 @@
     method public java.util.NavigableSet<K> navigableKeySet();
     method public java.util.Map.Entry<K, V> pollFirstEntry();
     method public java.util.Map.Entry<K, V> pollLastEntry();
-    method public boolean replace(K, V, V);
-    method public V replace(K, V);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public java.util.NavigableMap<K, V> subMap(K, boolean, K, boolean);
     method public java.util.SortedMap<K, V> subMap(K, K);
     method public java.util.NavigableMap<K, V> tailMap(K, boolean);
@@ -65430,7 +65925,6 @@
     method public E pollFirst();
     method public E pollLast();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
     method public java.util.SortedSet<E> subSet(E, E);
     method public java.util.NavigableSet<E> tailSet(E, boolean);
@@ -65467,30 +65961,49 @@
     ctor public Vector(int);
     ctor public Vector();
     ctor public Vector(java.util.Collection<? extends E>);
+    method public synchronized boolean add(E);
+    method public synchronized boolean addAll(java.util.Collection<? extends E>);
+    method public synchronized boolean addAll(int, java.util.Collection<? extends E>);
     method public synchronized void addElement(E);
     method public synchronized int capacity();
     method public synchronized java.lang.Object clone();
+    method public synchronized boolean containsAll(java.util.Collection<?>);
     method public synchronized void copyInto(java.lang.Object[]);
     method public synchronized E elementAt(int);
     method public java.util.Enumeration<E> elements();
     method public synchronized void ensureCapacity(int);
+    method public synchronized boolean equals(java.lang.Object);
     method public synchronized E firstElement();
     method public synchronized void forEach(java.util.function.Consumer<? super E>);
     method public synchronized E get(int);
+    method public synchronized int hashCode();
     method public synchronized int indexOf(java.lang.Object, int);
     method public synchronized void insertElementAt(E, int);
+    method public synchronized boolean isEmpty();
+    method public synchronized java.util.Iterator<E> iterator();
     method public synchronized E lastElement();
+    method public synchronized int lastIndexOf(java.lang.Object);
     method public synchronized int lastIndexOf(java.lang.Object, int);
+    method public synchronized java.util.ListIterator<E> listIterator(int);
+    method public synchronized java.util.ListIterator<E> listIterator();
+    method public synchronized E remove(int);
+    method public synchronized boolean removeAll(java.util.Collection<?>);
     method public synchronized void removeAllElements();
     method public synchronized boolean removeElement(java.lang.Object);
     method public synchronized void removeElementAt(int);
     method public synchronized boolean removeIf(java.util.function.Predicate<? super E>);
+    method protected synchronized void removeRange(int, int);
     method public synchronized void replaceAll(java.util.function.UnaryOperator<E>);
+    method public synchronized boolean retainAll(java.util.Collection<?>);
+    method public synchronized E set(int, E);
     method public synchronized void setElementAt(E, int);
     method public synchronized void setSize(int);
     method public synchronized int size();
     method public synchronized void sort(java.util.Comparator<? super E>);
-    method public java.util.Spliterator<E> spliterator();
+    method public synchronized java.util.List<E> subList(int, int);
+    method public synchronized java.lang.Object[] toArray();
+    method public synchronized <T> T[] toArray(T[]);
+    method public synchronized java.lang.String toString();
     method public synchronized void trimToSize();
     field protected int capacityIncrement;
     field protected int elementCount;
@@ -65503,8 +66016,6 @@
     ctor public WeakHashMap();
     ctor public WeakHashMap(java.util.Map<? extends K, ? extends V>);
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
   }
 
 }
@@ -65539,7 +66050,6 @@
     method public void put(E) throws java.lang.InterruptedException;
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
   }
 
@@ -65730,13 +66240,9 @@
     ctor public ConcurrentHashMap(java.util.Map<? extends K, ? extends V>);
     ctor public ConcurrentHashMap(int, float);
     ctor public ConcurrentHashMap(int, float, int);
-    method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
-    method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
-    method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public boolean contains(java.lang.Object);
     method public java.util.Enumeration<V> elements();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
     method public void forEach(long, java.util.function.BiConsumer<? super K, ? super V>);
     method public <U> void forEach(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachEntry(long, java.util.function.Consumer<? super java.util.Map.Entry<K, V>>);
@@ -65745,14 +66251,11 @@
     method public <U> void forEachKey(long, java.util.function.Function<? super K, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachValue(long, java.util.function.Consumer<? super V>);
     method public <U> void forEachValue(long, java.util.function.Function<? super V, ? extends U>, java.util.function.Consumer<? super U>);
-    method public V getOrDefault(java.lang.Object, V);
     method public java.util.concurrent.ConcurrentHashMap.KeySetView<K, V> keySet(V);
     method public java.util.Enumeration<K> keys();
     method public long mappingCount();
-    method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
     method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet();
     method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet(int);
-    method public V putIfAbsent(K, V);
     method public <U> U reduce(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public java.util.Map.Entry<K, V> reduceEntries(long, java.util.function.BiFunction<java.util.Map.Entry<K, V>, java.util.Map.Entry<K, V>, ? extends java.util.Map.Entry<K, V>>);
     method public <U> U reduceEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
@@ -65772,10 +66275,6 @@
     method public double reduceValuesToDouble(long, java.util.function.ToDoubleFunction<? super V>, double, java.util.function.DoubleBinaryOperator);
     method public int reduceValuesToInt(long, java.util.function.ToIntFunction<? super V>, int, java.util.function.IntBinaryOperator);
     method public long reduceValuesToLong(long, java.util.function.ToLongFunction<? super V>, long, java.util.function.LongBinaryOperator);
-    method public boolean remove(java.lang.Object, java.lang.Object);
-    method public boolean replace(K, V, V);
-    method public V replace(K, V);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public <U> U search(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>);
     method public <U> U searchEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>);
     method public <U> U searchKeys(long, java.util.function.Function<? super K, ? extends U>);
@@ -65836,7 +66335,6 @@
     method public E removeLast();
     method public boolean removeLastOccurrence(java.lang.Object);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public class ConcurrentLinkedQueue<E> extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable {
@@ -65847,7 +66345,6 @@
     method public E peek();
     method public E poll();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public abstract interface ConcurrentMap<K, V> implements java.util.Map {
@@ -65879,9 +66376,6 @@
     method public K ceilingKey(K);
     method public java.util.concurrent.ConcurrentSkipListMap<K, V> clone();
     method public java.util.Comparator<? super K> comparator();
-    method public V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
-    method public V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
-    method public V computeIfPresent(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public java.util.NavigableSet<K> descendingKeySet();
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> descendingMap();
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
@@ -65889,25 +66383,18 @@
     method public K firstKey();
     method public java.util.Map.Entry<K, V> floorEntry(K);
     method public K floorKey(K);
-    method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
-    method public V getOrDefault(java.lang.Object, V);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K, boolean);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K);
     method public java.util.Map.Entry<K, V> higherEntry(K);
     method public K higherKey(K);
+    method public java.util.NavigableSet<K> keySet();
     method public java.util.Map.Entry<K, V> lastEntry();
     method public K lastKey();
     method public java.util.Map.Entry<K, V> lowerEntry(K);
     method public K lowerKey(K);
-    method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
     method public java.util.NavigableSet<K> navigableKeySet();
     method public java.util.Map.Entry<K, V> pollFirstEntry();
     method public java.util.Map.Entry<K, V> pollLastEntry();
-    method public V putIfAbsent(K, V);
-    method public boolean remove(java.lang.Object, java.lang.Object);
-    method public boolean replace(K, V, V);
-    method public V replace(K, V);
-    method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> subMap(K, boolean, K, boolean);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> subMap(K, K);
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> tailMap(K, boolean);
@@ -65935,7 +66422,6 @@
     method public E pollFirst();
     method public E pollLast();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
     method public java.util.NavigableSet<E> subSet(E, E);
     method public java.util.NavigableSet<E> tailSet(E, boolean);
@@ -65982,9 +66468,7 @@
     ctor public CopyOnWriteArraySet(java.util.Collection<? extends E>);
     method public void forEach(java.util.function.Consumer<? super E>);
     method public java.util.Iterator<E> iterator();
-    method public boolean removeIf(java.util.function.Predicate<? super E>);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
   }
 
   public class CountDownLatch {
@@ -66143,6 +66627,7 @@
     method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
     method public boolean hasQueuedSubmissions();
     method public <T> T invoke(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>);
     method public boolean isQuiescent();
     method public boolean isShutdown();
     method public boolean isTerminated();
@@ -66152,6 +66637,9 @@
     method public void shutdown();
     method public java.util.List<java.lang.Runnable> shutdownNow();
     method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.Callable<T>);
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.lang.Runnable, T);
+    method public java.util.concurrent.ForkJoinTask<?> submit(java.lang.Runnable);
     field public static final java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory;
   }
 
@@ -66275,7 +66763,6 @@
     method public E removeLast();
     method public boolean removeLastOccurrence(java.lang.Object);
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
     method public E takeFirst() throws java.lang.InterruptedException;
     method public E takeLast() throws java.lang.InterruptedException;
@@ -66296,7 +66783,6 @@
     method public void put(E) throws java.lang.InterruptedException;
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
   }
 
@@ -66316,7 +66802,6 @@
     method public void put(E);
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
     method public void transfer(E) throws java.lang.InterruptedException;
     method public boolean tryTransfer(E);
@@ -66364,7 +66849,6 @@
     method public void put(E);
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
   }
 
@@ -66468,7 +66952,6 @@
     method public void put(E) throws java.lang.InterruptedException;
     method public int remainingCapacity();
     method public int size();
-    method public java.util.Spliterator<E> spliterator();
     method public E take() throws java.lang.InterruptedException;
   }
 
@@ -66480,9 +66963,11 @@
     method public static java.util.concurrent.ThreadLocalRandom current();
     method public double nextDouble(double);
     method public double nextDouble(double, double);
+    method public double nextGaussian();
     method public int nextInt(int, int);
     method public long nextLong(long);
     method public long nextLong(long, long);
+    method public void setSeed(long);
   }
 
   public class ThreadPoolExecutor extends java.util.concurrent.AbstractExecutorService {
@@ -66496,6 +66981,7 @@
     method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
     method protected void beforeExecute(java.lang.Thread, java.lang.Runnable);
     method public void execute(java.lang.Runnable);
+    method protected void finalize();
     method public int getActiveCount();
     method public long getCompletedTaskCount();
     method public int getCorePoolSize();
@@ -67366,8 +67852,11 @@
     ctor public JarFile(java.io.File) throws java.io.IOException;
     ctor public JarFile(java.io.File, boolean) throws java.io.IOException;
     ctor public JarFile(java.io.File, boolean, int) throws java.io.IOException;
+    method public java.util.Enumeration<java.util.jar.JarEntry> entries();
+    method public synchronized java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
     method public java.util.jar.JarEntry getJarEntry(java.lang.String);
     method public java.util.jar.Manifest getManifest() throws java.io.IOException;
+    method public java.util.stream.Stream<java.util.jar.JarEntry> stream();
     field public static final java.lang.String MANIFEST_NAME = "META-INF/MANIFEST.MF";
   }
 
@@ -67447,6 +67936,8 @@
 
   public class ConsoleHandler extends java.util.logging.StreamHandler {
     ctor public ConsoleHandler();
+    method public void close();
+    method public void publish(java.util.logging.LogRecord);
   }
 
   public class ErrorManager {
@@ -68236,6 +68727,7 @@
     method public int deflate(byte[]);
     method public int deflate(byte[], int, int, int);
     method public void end();
+    method protected void finalize();
     method public void finish();
     method public boolean finished();
     method public int getAdler();
@@ -68268,6 +68760,8 @@
     ctor public DeflaterInputStream(java.io.InputStream);
     ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater);
     ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater, int);
+    method public void mark(int);
+    method public void reset() throws java.io.IOException;
     field protected final byte[] buf;
     field protected final java.util.zip.Deflater def;
   }
@@ -68298,6 +68792,7 @@
     ctor public GZIPOutputStream(java.io.OutputStream, int, boolean) throws java.io.IOException;
     ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException;
     ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException;
+    method public synchronized void write(byte[], int, int) throws java.io.IOException;
     field protected java.util.zip.CRC32 crc;
   }
 
@@ -68305,6 +68800,7 @@
     ctor public Inflater(boolean);
     ctor public Inflater();
     method public void end();
+    method protected void finalize();
     method public boolean finished();
     method public int getAdler();
     method public long getBytesRead();
@@ -68431,6 +68927,7 @@
     ctor public ZipFile(java.io.File, java.nio.charset.Charset) throws java.io.IOException;
     method public void close() throws java.io.IOException;
     method public java.util.Enumeration<? extends java.util.zip.ZipEntry> entries();
+    method protected void finalize() throws java.io.IOException;
     method public java.lang.String getComment();
     method public java.util.zip.ZipEntry getEntry(java.lang.String);
     method public java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
@@ -68537,6 +69034,7 @@
     method public void setComment(java.lang.String);
     method public void setLevel(int);
     method public void setMethod(int);
+    method public synchronized void write(byte[], int, int) throws java.io.IOException;
     field public static final int CENATT = 36; // 0x24
     field public static final int CENATX = 38; // 0x26
     field public static final int CENCOM = 32; // 0x20
@@ -68693,6 +69191,7 @@
 
   public class ExemptionMechanism {
     ctor protected ExemptionMechanism(javax.crypto.ExemptionMechanismSpi, java.security.Provider, java.lang.String);
+    method protected void finalize();
     method public final byte[] genExemptionBlob() throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException;
     method public final int genExemptionBlob(byte[]) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
     method public final int genExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
@@ -71081,6 +71580,7 @@
     ctor public TransformerException(java.lang.String, java.lang.Throwable);
     ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator);
     ctor public TransformerException(java.lang.String, javax.xml.transform.SourceLocator, java.lang.Throwable);
+    method public java.lang.Throwable getCause();
     method public java.lang.Throwable getException();
     method public java.lang.String getLocationAsString();
     method public javax.xml.transform.SourceLocator getLocator();
@@ -71351,6 +71851,7 @@
   public class XPathException extends java.lang.Exception {
     ctor public XPathException(java.lang.String);
     ctor public XPathException(java.lang.Throwable);
+    method public java.lang.Throwable getCause();
   }
 
   public abstract interface XPathExpression {
@@ -71779,6 +72280,8 @@
 
   public class JSONException extends java.lang.Exception {
     ctor public JSONException(java.lang.String);
+    ctor public JSONException(java.lang.String, java.lang.Throwable);
+    ctor public JSONException(java.lang.Throwable);
   }
 
   public class JSONObject {
diff --git a/api/test-removed.txt b/api/test-removed.txt
index 49b72e15..6c37a8f 100644
--- a/api/test-removed.txt
+++ b/api/test-removed.txt
@@ -15,6 +15,7 @@
 
   public class Notification implements android.os.Parcelable {
     method public deprecated java.lang.String getChannel();
+    method public static java.lang.Class<? extends android.app.Notification.Style> getNotificationStyleClass(java.lang.String);
     method public deprecated long getTimeout();
     method public deprecated void setLatestEventInfo(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, android.app.PendingIntent);
   }
@@ -24,30 +25,9 @@
     method public deprecated android.app.Notification.Builder setTimeout(long);
   }
 
-  public static final class Notification.TvExtender implements android.app.Notification.Extender {
-    method public deprecated java.lang.String getChannel();
-  }
-
   public final deprecated class PictureInPictureArgs implements android.os.Parcelable {
-    ctor public deprecated PictureInPictureArgs();
-    ctor public deprecated PictureInPictureArgs(float, java.util.List<android.app.RemoteAction>);
     method public static android.app.PictureInPictureArgs convert(android.app.PictureInPictureParams);
     method public static android.app.PictureInPictureParams convert(android.app.PictureInPictureArgs);
-    method public void copyOnlySet(android.app.PictureInPictureArgs);
-    method public java.util.List<android.app.RemoteAction> getActions();
-    method public float getAspectRatio();
-    method public android.util.Rational getAspectRatioRational();
-    method public android.graphics.Rect getSourceRectHint();
-    method public android.graphics.Rect getSourceRectHintInsets();
-    method public boolean hasSetActions();
-    method public boolean hasSetAspectRatio();
-    method public boolean hasSourceBoundsHint();
-    method public boolean hasSourceBoundsHintInsets();
-    method public deprecated void setActions(java.util.List<android.app.RemoteAction>);
-    method public deprecated void setAspectRatio(float);
-    method public deprecated void setSourceRectHint(android.graphics.Rect);
-    method public deprecated void setSourceRectHintInsets(android.graphics.Rect);
-    method public void truncateActions(int);
     field public static final android.os.Parcelable.Creator<android.app.PictureInPictureArgs> CREATOR;
   }
 
@@ -59,10 +39,6 @@
     method public android.app.PictureInPictureArgs.Builder setSourceRectHint(android.graphics.Rect);
   }
 
-  public final class RecoverableSecurityException extends java.lang.SecurityException implements android.os.Parcelable {
-    method public deprecated void showAsNotification(android.content.Context);
-  }
-
 }
 
 package android.app.admin {
@@ -70,8 +46,6 @@
   public class DevicePolicyManager {
     method public deprecated android.os.UserHandle createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle);
     method public deprecated android.os.UserHandle createUser(android.content.ComponentName, java.lang.String);
-    method public deprecated java.lang.String getDeviceInitializerApp();
-    method public deprecated android.content.ComponentName getDeviceInitializerComponent();
   }
 
 }
@@ -272,10 +246,6 @@
     ctor public BatteryManager();
   }
 
-  public class Build {
-    field public static final boolean PERMISSIONS_REVIEW_REQUIRED;
-  }
-
   public final class PowerManager {
     method public void goToSleep(long);
     method public deprecated void userActivity(long, boolean);
@@ -301,18 +271,8 @@
 package android.os.storage {
 
   public class StorageManager {
-    method public deprecated void allocateBytes(java.io.File, long, int) throws java.io.IOException;
-    method public deprecated long getAllocatableBytes(java.io.File, int) throws java.io.IOException;
-    method public deprecated long getCacheQuotaBytes(java.io.File) throws java.io.IOException;
-    method public deprecated long getCacheQuotaBytes() throws java.io.IOException;
-    method public deprecated long getCacheSizeBytes(java.io.File) throws java.io.IOException;
-    method public deprecated long getCacheSizeBytes() throws java.io.IOException;
-    method public deprecated long getExternalCacheQuotaBytes() throws java.io.IOException;
-    method public deprecated long getExternalCacheSizeBytes() throws java.io.IOException;
     method public android.os.storage.StorageVolume getPrimaryVolume();
     method public android.os.storage.StorageVolume[] getVolumeList();
-    method public deprecated boolean isCacheBehaviorAtomic(java.io.File) throws java.io.IOException;
-    method public deprecated void setCacheBehaviorAtomic(java.io.File, boolean) throws java.io.IOException;
   }
 
 }
@@ -356,11 +316,8 @@
     field public static final java.lang.String CREATED = "created";
     field public static final java.lang.String DATE = "date";
     field public static final java.lang.String FAVICON = "favicon";
-    field public static final java.lang.String THUMBNAIL = "thumbnail";
     field public static final java.lang.String TITLE = "title";
-    field public static final java.lang.String TOUCH_ICON = "touch_icon";
     field public static final java.lang.String URL = "url";
-    field public static final java.lang.String USER_ENTERED = "user_entered";
     field public static final java.lang.String VISITS = "visits";
   }
 
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index f003061..ab075ee 100644
--- a/cmds/am/src/com/android/commands/am/Am.java
+++ b/cmds/am/src/com/android/commands/am/Am.java
@@ -16,70 +16,25 @@
 
 package com.android.commands.am;
 
-import static android.app.ActivityManager.RESIZE_MODE_SYSTEM;
-import static android.app.ActivityManager.RESIZE_MODE_USER;
-import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
-import static android.app.ActivityManager.StackId.INVALID_STACK_ID;
-
 import android.app.ActivityManager;
-import android.app.ActivityManager.StackInfo;
-import android.app.IActivityContainer;
-import android.app.IActivityController;
 import android.app.IActivityManager;
-import android.app.IInstrumentationWatcher;
-import android.app.Instrumentation;
-import android.app.IStopUserCallback;
-import android.app.ProfilerInfo;
-import android.app.UiAutomationConnection;
-import android.app.usage.ConfigurationStats;
-import android.app.usage.IUsageStatsManager;
-import android.app.usage.UsageStatsManager;
-import android.content.ComponentCallbacks2;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.IIntentReceiver;
-import android.content.Intent;
 import android.content.pm.IPackageManager;
-import android.content.pm.InstrumentationInfo;
-import android.content.pm.ParceledListSlice;
-import android.content.pm.UserInfo;
-import android.content.res.Configuration;
-import android.graphics.Rect;
-import android.os.Binder;
-import android.os.Build;
-import android.os.Bundle;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
 import android.os.ResultReceiver;
 import android.os.SELinux;
 import android.os.ServiceManager;
 import android.os.ShellCallback;
-import android.os.ShellCommand;
-import android.os.SystemProperties;
 import android.os.UserHandle;
-import android.text.TextUtils;
 import android.util.AndroidException;
-import android.util.ArrayMap;
-import android.util.Log;
-import android.view.IWindowManager;
 
 import com.android.internal.os.BaseCommand;
-import com.android.internal.util.HexDump;
-import com.android.internal.util.Preconditions;
 
-import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.io.InputStreamReader;
 import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
 
 public class Am extends BaseCommand {
 
diff --git a/cmds/am/src/com/android/commands/am/Instrument.java b/cmds/am/src/com/android/commands/am/Instrument.java
index 4966b43..b69ef1c 100644
--- a/cmds/am/src/com/android/commands/am/Instrument.java
+++ b/cmds/am/src/com/android/commands/am/Instrument.java
@@ -25,7 +25,6 @@
 import android.content.pm.InstrumentationInfo;
 import android.os.Build;
 import android.os.Bundle;
-import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.util.AndroidException;
@@ -34,6 +33,8 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 
@@ -95,6 +96,12 @@
         public void onError(String errorText, boolean commandError);
     }
 
+    private static Collection<String> sorted(Collection<String> list) {
+        final ArrayList<String> copy = new ArrayList<>(list);
+        Collections.sort(copy);
+        return copy;
+    }
+
     /**
      * Printer for the 'classic' text based status reporting.
      */
@@ -124,7 +131,7 @@
                 System.out.print(pretty);
             } else {
                 if (results != null) {
-                    for (String key : results.keySet()) {
+                    for (String key : sorted(results.keySet())) {
                         System.out.println(
                                 "INSTRUMENTATION_STATUS: " + key + "=" + results.get(key));
                     }
@@ -145,7 +152,7 @@
                 System.out.println(pretty);
             } else {
                 if (results != null) {
-                    for (String key : results.keySet()) {
+                    for (String key : sorted(results.keySet())) {
                         System.out.println(
                                 "INSTRUMENTATION_RESULT: " + key + "=" + results.get(key));
                     }
@@ -156,6 +163,10 @@
 
         @Override
         public void onError(String errorText, boolean commandError) {
+            if (mRawMode) {
+                System.out.println("onError: commandError=" + commandError + " message="
+                        + errorText);
+            }
             // The regular BaseCommand error printing will print the commandErrors.
             if (!commandError) {
                 System.out.println(errorText);
@@ -214,7 +225,7 @@
         private void writeBundle(ProtoOutputStream proto, long fieldId, Bundle bundle) {
             final long bundleToken = proto.startObject(fieldId);
 
-            for (final String key: bundle.keySet()) {
+            for (final String key: sorted(bundle.keySet())) {
                 final long entryToken = proto.startRepeatedObject(
                         InstrumentationData.ResultsBundle.ENTRIES);
 
diff --git a/cmds/app_process/app_main.cpp b/cmds/app_process/app_main.cpp
index e56417b..1671337 100644
--- a/cmds/app_process/app_main.cpp
+++ b/cmds/app_process/app_main.cpp
@@ -235,6 +235,9 @@
     for (i = 0; i < argc; i++) {
         if (known_command == true) {
           runtime.addOption(strdup(argv[i]));
+          // The static analyzer gets upset that we don't ever free the above
+          // string. Since the allocation is from main, leaking it doesn't seem
+          // problematic. NOLINTNEXTLINE
           ALOGV("app_process main add known option '%s'", argv[i]);
           known_command = false;
           continue;
@@ -258,6 +261,9 @@
         }
 
         runtime.addOption(strdup(argv[i]));
+        // The static analyzer gets upset that we don't ever free the above
+        // string. Since the allocation is from main, leaking it doesn't seem
+        // problematic. NOLINTNEXTLINE
         ALOGV("app_process main add option '%s'", argv[i]);
     }
 
diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
index 1bcfb22..b61cdec 100644
--- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
+++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
@@ -17,8 +17,8 @@
 package com.android.commands.bmgr;
 
 import android.app.backup.BackupManager;
-import android.app.backup.BackupManagerMonitor;
 import android.app.backup.BackupProgress;
+import android.app.backup.BackupTransport;
 import android.app.backup.IBackupManager;
 import android.app.backup.IBackupObserver;
 import android.app.backup.IRestoreObserver;
@@ -30,8 +30,11 @@
 import android.content.pm.PackageInfo;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.SystemClock;
 import android.os.UserHandle;
-import android.util.Log;
+import android.util.ArraySet;
+
+import com.android.internal.annotations.GuardedBy;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -97,6 +100,11 @@
             return;
         }
 
+        if ("init".equals(op)) {
+            doInit();
+            return;
+        }
+
         if ("list".equals(op)) {
             doList();
             return;
@@ -204,7 +212,7 @@
         System.out.println("Performing full transport backup");
 
         String pkg;
-        ArrayList<String> allPkgs = new ArrayList<String>();
+        ArraySet<String> allPkgs = new ArraySet<String>();
         while ((pkg = nextArg()) != null) {
             allPkgs.add(pkg);
         }
@@ -218,11 +226,59 @@
         }
     }
 
-    class BackupObserver extends IBackupObserver.Stub {
-        boolean done = false;
+    // IBackupObserver generically usable for any backup/init operation
+    abstract class Observer extends IBackupObserver.Stub {
+        private final Object trigger = new Object();
+
+        @GuardedBy("trigger")
+        private volatile boolean done = false;
 
         @Override
         public void onUpdate(String currentPackage, BackupProgress backupProgress) {
+        }
+
+        @Override
+        public void onResult(String currentPackage, int status) {
+        }
+
+        @Override
+        public void backupFinished(int status) {
+            synchronized (trigger) {
+                done = true;
+                trigger.notify();
+            }
+        }
+
+        public boolean done() {
+            return this.done;
+        }
+
+        // Wait forever
+        public void waitForCompletion() {
+            waitForCompletion(0);
+        }
+
+        // Wait for a given time and then give up
+        public void waitForCompletion(long timeout) {
+            // The backupFinished() callback will throw the 'done' flag; we
+            // just sit and wait on that notification.
+            final long targetTime = SystemClock.elapsedRealtime() + timeout;
+            synchronized (trigger) {
+                // Wait until either we're done, or we've reached a stated positive timeout
+                while (!done && (timeout <= 0 || SystemClock.elapsedRealtime() < targetTime)) {
+                    try {
+                        trigger.wait(1000L);
+                    } catch (InterruptedException ex) {
+                    }
+                }
+            }
+        }
+    }
+
+    class BackupObserver extends Observer {
+        @Override
+        public void onUpdate(String currentPackage, BackupProgress backupProgress) {
+            super.onUpdate(currentPackage, backupProgress);
             System.out.println(
                 "Package " + currentPackage + " with progress: " + backupProgress.bytesTransferred
                     + "/" + backupProgress.bytesExpected);
@@ -230,33 +286,17 @@
 
         @Override
         public void onResult(String currentPackage, int status) {
+            super.onResult(currentPackage, status);
             System.out.println("Package " + currentPackage + " with result: "
                     + convertBackupStatusToString(status));
         }
 
         @Override
         public void backupFinished(int status) {
+            super.backupFinished(status);
             System.out.println("Backup finished with result: "
                     + convertBackupStatusToString(status));
-            synchronized (this) {
-                done = true;
-                this.notify();
-            }
         }
-
-        public void waitForCompletion() {
-            // The backupFinished() callback will throw the 'done' flag; we
-            // just sit and wait on that notification.
-            synchronized (this) {
-                while (!this.done) {
-                    try {
-                        this.wait();
-                    } catch (InterruptedException ex) {
-                    }
-                }
-            }
-        }
-
     }
 
     private static String convertBackupStatusToString(int errorCode) {
@@ -270,7 +310,8 @@
             case BackupManager.ERROR_TRANSPORT_ABORTED:
                 return "Transport error";
             case BackupManager.ERROR_TRANSPORT_PACKAGE_REJECTED:
-                return "Transport rejected package";
+                return "Transport rejected package because it wasn't able to process it"
+                        + " at the time";
             case BackupManager.ERROR_AGENT_FAILURE:
                 return "Agent error";
             case BackupManager.ERROR_TRANSPORT_QUOTA_EXCEEDED:
@@ -348,7 +389,9 @@
             } else if (pkg.equals("--incremental")) {
                 nonIncrementalBackup = false;
             } else {
-                allPkgs.add(pkg);
+                if (!allPkgs.contains(pkg)) {
+                    allPkgs.add(pkg);
+                }
             }
         }
         if (backupAll) {
@@ -469,6 +512,39 @@
         }
     }
 
+    class InitObserver extends Observer {
+        public int result = BackupTransport.TRANSPORT_ERROR;
+
+        @Override
+        public void backupFinished(int status) {
+            super.backupFinished(status);
+            result = status;
+        }
+    }
+
+    private void doInit() {
+        ArraySet<String> transports = new ArraySet<>();
+        String transport;
+        while ((transport = nextArg()) != null) {
+            transports.add(transport);
+        }
+        if (transports.size() == 0) {
+            showUsage();
+            return;
+        }
+
+        InitObserver observer = new InitObserver();
+        try {
+            System.out.println("Initializing transports: " + transports);
+            mBmgr.initializeTransports(transports.toArray(new String[transports.size()]), observer);
+            observer.waitForCompletion(30*1000L);
+            System.out.println("Initialization result: " + observer.result);
+        } catch (RemoteException e) {
+            System.err.println(e.toString());
+            System.err.println(BMGR_NOT_RUNNING_ERR);
+        }
+    }
+
     private void doList() {
         String arg = nextArg();     // sets, transports, packages set#
         if ("transports".equals(arg)) {
diff --git a/cmds/bootanimation/Android.mk b/cmds/bootanimation/Android.mk
index 7ab402a..73ec63f 100644
--- a/cmds/bootanimation/Android.mk
+++ b/cmds/bootanimation/Android.mk
@@ -8,10 +8,6 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES:= \
-    bootanimation_main.cpp \
-    audioplay.cpp \
-
 LOCAL_CFLAGS += ${bootanimation_CommonCFlags}
 
 LOCAL_SHARED_LIBRARIES := \
@@ -24,6 +20,29 @@
     liblog \
     libutils \
 
+LOCAL_SRC_FILES:= \
+    BootAnimationUtil.cpp \
+
+ifeq ($(PRODUCT_IOT),true)
+LOCAL_SRC_FILES += \
+    iot/iotbootanimation_main.cpp \
+    iot/BootAction.cpp
+
+LOCAL_SHARED_LIBRARIES += \
+    libandroidthings \
+    libbase \
+    libbinder
+
+LOCAL_STATIC_LIBRARIES += cpufeatures
+
+else
+
+LOCAL_SRC_FILES += \
+    bootanimation_main.cpp \
+    audioplay.cpp \
+
+endif  # PRODUCT_IOT
+
 LOCAL_MODULE:= bootanimation
 
 LOCAL_INIT_RC := bootanim.rc
@@ -45,6 +64,8 @@
 LOCAL_SRC_FILES:= \
     BootAnimation.cpp
 
+LOCAL_CFLAGS += ${bootanimation_CommonCFlags}
+
 LOCAL_C_INCLUDES += \
     external/tinyalsa/include \
     frameworks/wilhelm/include
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index 6b2de4b..6526123 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -96,11 +96,9 @@
 
 // ---------------------------------------------------------------------------
 
-BootAnimation::BootAnimation(InitCallback initCallback,
-                             PlayPartCallback partCallback)
+BootAnimation::BootAnimation(sp<Callbacks> callbacks)
         : Thread(false), mClockEnabled(true), mTimeIsAccurate(false),
-        mTimeFormat12Hour(false), mTimeCheckThread(NULL),
-        mInitCallback(initCallback), mPlayPartCallback(partCallback) {
+        mTimeFormat12Hour(false), mTimeCheckThread(NULL), mCallbacks(callbacks) {
     mSession = new SurfaceComposerClient();
 
     std::string powerCtl = android::base::GetProperty("sys.powerctl", "");
@@ -357,6 +355,8 @@
     initTexture(&mAndroid[0], mAssets, "images/android-logo-mask.png");
     initTexture(&mAndroid[1], mAssets, "images/android-logo-shine.png");
 
+    mCallbacks->init({});
+
     // clear screen
     glShadeModel(GL_FLAT);
     glDisable(GL_DITHER);
@@ -424,6 +424,7 @@
     int exitnow = atoi(value);
     if (exitnow) {
         requestExit();
+        mCallbacks->shutdown();
     }
 }
 
@@ -777,9 +778,7 @@
         }
     }
 
-    if (mInitCallback != nullptr) {
-        mInitCallback(animation.parts);
-    }
+    mCallbacks->init(animation.parts);
 
     zip->endIteration(cookie);
 
@@ -887,9 +886,7 @@
             if(exitPending() && !part.playUntilComplete)
                 break;
 
-            if (mPlayPartCallback != nullptr) {
-                mPlayPartCallback(i, part, r);
-            }
+            mCallbacks->playPart(i, part, r);
 
             glClearColor(
                     part.backgroundColor[0],
diff --git a/cmds/bootanimation/BootAnimation.h b/cmds/bootanimation/BootAnimation.h
index 3ebe7d6..56e131523 100644
--- a/cmds/bootanimation/BootAnimation.h
+++ b/cmds/bootanimation/BootAnimation.h
@@ -93,22 +93,27 @@
         Font clockFont;
     };
 
-    // Callback will be called during initialization after we have loaded
-    // the animation and be provided with all parts in animation.
-    typedef std::function<void(const Vector<Animation::Part>& parts)> InitCallback;
+    // All callbacks will be called from this class's internal thread.
+    class Callbacks : public RefBase {
+    public:
+        // Will be called during initialization after we have loaded
+        // the animation and be provided with all parts in animation.
+        virtual void init(const Vector<Animation::Part>& /*parts*/) {}
 
-    // Callback will be called while animation is playing before each part is
-    // played. It will be provided with the part and play count for it.
-    // It will be provided with the partNumber for the part about to be played,
-    // as well as a reference to the part itself. It will also be provided with
-    // which play of that part is about to start, some parts are repeated
-    // multiple times.
-    typedef std::function<void(int partNumber, const Animation::Part& part, int playNumber)>
-            PlayPartCallback;
+        // Will be called while animation is playing before each part is
+        // played. It will be provided with the part and play count for it.
+        // It will be provided with the partNumber for the part about to be played,
+        // as well as a reference to the part itself. It will also be provided with
+        // which play of that part is about to start, some parts are repeated
+        // multiple times.
+        virtual void playPart(int /*partNumber*/, const Animation::Part& /*part*/,
+                              int /*playNumber*/) {}
 
-    // Callbacks may be null and will be called from this class's internal
-    // thread.
-    BootAnimation(InitCallback initCallback, PlayPartCallback partCallback);
+        // Will be called when animation is done and thread is shutting down.
+        virtual void shutdown() {}
+    };
+
+    BootAnimation(sp<Callbacks> callbacks);
 
     sp<SurfaceComposerClient> session() const;
 
@@ -170,8 +175,7 @@
     String8     mZipFileName;
     SortedVector<String8> mLoadedFiles;
     sp<TimeCheckThread> mTimeCheckThread = nullptr;
-    InitCallback mInitCallback = nullptr;
-    PlayPartCallback mPlayPartCallback = nullptr;
+    sp<Callbacks> mCallbacks;
 };
 
 // ---------------------------------------------------------------------------
diff --git a/cmds/bootanimation/BootAnimationUtil.cpp b/cmds/bootanimation/BootAnimationUtil.cpp
new file mode 100644
index 0000000..7718daf
--- /dev/null
+++ b/cmds/bootanimation/BootAnimationUtil.cpp
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ */
+
+#include "BootAnimationUtil.h"
+
+#include <inttypes.h>
+
+#include <binder/IServiceManager.h>
+#include <cutils/properties.h>
+#include <utils/Log.h>
+#include <utils/SystemClock.h>
+
+namespace android {
+
+bool bootAnimationDisabled() {
+    char value[PROPERTY_VALUE_MAX];
+    property_get("debug.sf.nobootanimation", value, "0");
+    if (atoi(value) > 0) {
+        return true;
+    }
+
+    property_get("ro.boot.quiescent", value, "0");
+    return atoi(value) > 0;
+}
+
+void waitForSurfaceFlinger() {
+    // TODO: replace this with better waiting logic in future, b/35253872
+    int64_t waitStartTime = elapsedRealtime();
+    sp<IServiceManager> sm = defaultServiceManager();
+    const String16 name("SurfaceFlinger");
+    const int SERVICE_WAIT_SLEEP_MS = 100;
+    const int LOG_PER_RETRIES = 10;
+    int retry = 0;
+    while (sm->checkService(name) == nullptr) {
+        retry++;
+        if ((retry % LOG_PER_RETRIES) == 0) {
+            ALOGW("Waiting for SurfaceFlinger, waited for %" PRId64 " ms",
+                  elapsedRealtime() - waitStartTime);
+        }
+        usleep(SERVICE_WAIT_SLEEP_MS * 1000);
+    };
+    int64_t totalWaited = elapsedRealtime() - waitStartTime;
+    if (totalWaited > SERVICE_WAIT_SLEEP_MS) {
+        ALOGI("Waiting for SurfaceFlinger took %" PRId64 " ms", totalWaited);
+    }
+}
+
+}  // namespace android
diff --git a/cmds/bootanimation/BootAnimationUtil.h b/cmds/bootanimation/BootAnimationUtil.h
new file mode 100644
index 0000000..60987cd1
--- /dev/null
+++ b/cmds/bootanimation/BootAnimationUtil.h
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+namespace android {
+
+// Returns true if boot animation is disabled.
+bool bootAnimationDisabled();
+
+// Waits until the surface flinger is up.
+void waitForSurfaceFlinger();
+
+}  // namespace android
diff --git a/cmds/bootanimation/bootanimation_main.cpp b/cmds/bootanimation/bootanimation_main.cpp
index c11d905..8501982 100644
--- a/cmds/bootanimation/bootanimation_main.cpp
+++ b/cmds/bootanimation/bootanimation_main.cpp
@@ -30,6 +30,7 @@
 #include <android-base/properties.h>
 
 #include "BootAnimation.h"
+#include "BootAnimationUtil.h"
 #include "audioplay.h"
 
 using namespace android;
@@ -95,6 +96,49 @@
     return true;
 }
 
+class AudioAnimationCallbacks : public android::BootAnimation::Callbacks {
+public:
+    void init(const Vector<Animation::Part>& parts) override {
+        const Animation::Part* partWithAudio = nullptr;
+        for (const Animation::Part& part : parts) {
+            if (part.audioData != nullptr) {
+                partWithAudio = &part;
+            }
+        }
+
+        if (partWithAudio == nullptr) {
+            return;
+        }
+
+        ALOGD("found audio.wav, creating playback engine");
+        initAudioThread = new InitAudioThread(partWithAudio->audioData,
+                partWithAudio->audioLength);
+        initAudioThread->run("BootAnimation::InitAudioThread", PRIORITY_NORMAL);
+    };
+
+    void playPart(int partNumber, const Animation::Part& part, int playNumber) override {
+        // only play audio file the first time we animate the part
+        if (playNumber == 0 && part.audioData && playSoundsAllowed()) {
+            ALOGD("playing clip for part%d, size=%d",
+                  partNumber, part.audioLength);
+            // Block until the audio engine is finished initializing.
+            if (initAudioThread != nullptr) {
+                initAudioThread->join();
+            }
+            audioplay::playClip(part.audioData, part.audioLength);
+        }
+    };
+
+    void shutdown() override {
+        // we've finally played everything we're going to play
+        audioplay::setPlaying(false);
+        audioplay::destroy();
+    };
+
+private:
+    sp<InitAudioThread> initAudioThread = nullptr;
+};
+
 }  // namespace
 
 
@@ -102,83 +146,21 @@
 {
     setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_DISPLAY);
 
-    char value[PROPERTY_VALUE_MAX];
-    property_get("debug.sf.nobootanimation", value, "0");
-    int noBootAnimation = atoi(value);
-    if (!noBootAnimation) {
-        property_get("ro.boot.quiescent", value, "0");
-        noBootAnimation = atoi(value);
-    }
+    bool noBootAnimation = bootAnimationDisabled();
     ALOGI_IF(noBootAnimation,  "boot animation disabled");
     if (!noBootAnimation) {
 
         sp<ProcessState> proc(ProcessState::self());
         ProcessState::self()->startThreadPool();
 
-        // TODO: replace this with better waiting logic in future, b/35253872
-        int64_t waitStartTime = elapsedRealtime();
-        sp<IServiceManager> sm = defaultServiceManager();
-        const String16 name("SurfaceFlinger");
-        const int SERVICE_WAIT_SLEEP_MS = 100;
-        const int LOG_PER_RETRIES = 10;
-        int retry = 0;
-        while (sm->checkService(name) == nullptr) {
-            retry++;
-            if ((retry % LOG_PER_RETRIES) == 0) {
-                ALOGW("Waiting for SurfaceFlinger, waited for %" PRId64 " ms",
-                      elapsedRealtime() - waitStartTime);
-            }
-            usleep(SERVICE_WAIT_SLEEP_MS * 1000);
-        };
-        int64_t totalWaited = elapsedRealtime() - waitStartTime;
-        if (totalWaited > SERVICE_WAIT_SLEEP_MS) {
-            ALOGI("Waiting for SurfaceFlinger took %" PRId64 " ms", totalWaited);
-        }
-
-        // TODO: Move audio code to a new class that just exports the callbacks.
-        sp<InitAudioThread> initAudioThread = nullptr;
-
-        auto initCallback = [&](const Vector<Animation::Part>& parts) {
-            const Animation::Part* partWithAudio = nullptr;
-            for (const Animation::Part& part : parts) {
-                if (part.audioData != nullptr) {
-                    partWithAudio = &part;
-                }
-            }
-
-            if (partWithAudio == nullptr) {
-                return;
-            }
-
-            ALOGD("found audio.wav, creating playback engine");
-            initAudioThread = new InitAudioThread(partWithAudio->audioData,
-                    partWithAudio->audioLength);
-            initAudioThread->run("BootAnimation::InitAudioThread", PRIORITY_NORMAL);
-
-        };
-
-        auto partCallback = [&](int partNumber, const Animation::Part& part,
-                                int playNumber) {
-            // only play audio file the first time we animate the part
-            if (playNumber == 0 && part.audioData && playSoundsAllowed()) {
-                ALOGD("playing clip for part%d, size=%d",
-                      partNumber, part.audioLength);
-                // Block until the audio engine is finished initializing.
-                if (initAudioThread != nullptr) {
-                    initAudioThread->join();
-                }
-                audioplay::playClip(part.audioData, part.audioLength);
-            }
-        };
+        waitForSurfaceFlinger();
 
         // create the boot animation object
-        sp<BootAnimation> boot = new BootAnimation(initCallback, partCallback);
+        sp<BootAnimation> boot = new BootAnimation(new AudioAnimationCallbacks());
+        ALOGV("Boot animation set up. Joining pool.");
 
         IPCThreadState::self()->joinThreadPool();
-
-        // we've finally played everything we're going to play
-        audioplay::setPlaying(false);
-        audioplay::destroy();
     }
+    ALOGV("Boot animation exit");
     return 0;
 }
diff --git a/cmds/bootanimation/iot/BootAction.cpp b/cmds/bootanimation/iot/BootAction.cpp
new file mode 100644
index 0000000..8fda87e
--- /dev/null
+++ b/cmds/bootanimation/iot/BootAction.cpp
@@ -0,0 +1,175 @@
+/*
+ * 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.
+ */
+
+#include "BootAction.h"
+
+#define LOG_TAG "BootAction"
+
+#include <android-base/strings.h>
+#include <cpu-features.h>
+#include <dlfcn.h>
+#include <pio/peripheral_manager_client.h>
+#include <utils/Log.h>
+
+using android::base::Split;
+using android::base::Join;
+using android::base::StartsWith;
+using android::base::EndsWith;
+
+namespace android {
+
+BootAction::~BootAction() {
+    if (mLibHandle != nullptr) {
+        dlclose(mLibHandle);
+    }
+}
+
+bool BootAction::init(const std::string& libraryPath, const std::string& config) {
+    APeripheralManagerClient* client = nullptr;
+    ALOGD("Connecting to peripheralmanager");
+    // Wait for peripheral manager to come up.
+    while (client == nullptr) {
+        client = APeripheralManagerClient_new();
+        if (client == nullptr) {
+          ALOGV("peripheralmanager is not up, sleeping before we check again.");
+          usleep(250000);
+        }
+    }
+    ALOGD("Peripheralmanager is up.");
+    APeripheralManagerClient_delete(client);
+
+    std::string path_to_lib = libraryPath;
+    if (!parseConfig(config, &path_to_lib)) {
+        return false;
+    }
+
+    ALOGI("Loading boot action %s", path_to_lib.c_str());
+    mLibHandle = dlopen(path_to_lib.c_str(), RTLD_NOW);
+    if (mLibHandle == nullptr) {
+        ALOGE("Unable to load library at %s :: %s",
+              path_to_lib.c_str(), dlerror());
+        return false;
+    }
+
+    void* loaded = nullptr;
+    if (!loadSymbol("boot_action_init", &loaded) || loaded == nullptr) {
+        return false;
+    }
+    mLibInit = reinterpret_cast<libInit>(loaded);
+
+    loaded = nullptr;
+    if (!loadSymbol("boot_action_shutdown", &loaded) || loaded == nullptr) {
+        return false;
+    }
+    mLibShutdown = reinterpret_cast<libShutdown>(loaded);
+
+    // StartPart is considered optional, if it isn't exported by the library
+    // we will still call init and shutdown.
+    loaded = nullptr;
+    if (!loadSymbol("boot_action_start_part", &loaded) || loaded == nullptr) {
+        ALOGI("No boot_action_start_part found, action will not be told when "
+              "Animation parts change.");
+    } else {
+        mLibStartPart = reinterpret_cast<libStartPart>(loaded);
+    }
+
+    ALOGD("Entering boot_action_init");
+    bool result = mLibInit();
+    ALOGD("Returned from boot_action_init");
+    return result;
+}
+
+void BootAction::startPart(int partNumber, int playNumber) {
+    if (mLibStartPart == nullptr) return;
+
+    ALOGD("Entering boot_action_start_part");
+    mLibStartPart(partNumber, playNumber);
+    ALOGD("Returned from boot_action_start_part");
+}
+
+void BootAction::shutdown() {
+    ALOGD("Entering boot_action_shutdown");
+    mLibShutdown();
+    ALOGD("Returned from boot_action_shutdown");
+}
+
+bool BootAction::loadSymbol(const char* symbol, void** loaded) {
+    *loaded = dlsym(mLibHandle, symbol);
+    if (loaded == nullptr) {
+        ALOGE("Unable to load symbol : %s :: %s", symbol, dlerror());
+        return false;
+    }
+    return true;
+}
+
+
+bool BootAction::parseConfig(const std::string& config, std::string* path) {
+    auto lines = Split(config, "\n");
+
+    if (lines.size() < 1) {
+        ALOGE("Config format invalid, expected one line, found %d",
+              lines.size());
+        return false;
+    }
+
+    size_t lineNumber = 0;
+    auto& line1 = lines.at(lineNumber);
+    while (StartsWith(line1, "#")) {
+      if (lines.size() < ++lineNumber) {
+        ALOGE("Config file contains no non-comment lines.");
+        return false;
+      }
+      line1 = lines.at(lineNumber);
+    }
+
+    const std::string libraryNameToken("LIBRARY_NAME=");
+    if (!StartsWith(line1, libraryNameToken.c_str())) {
+        ALOGE("Invalid config format, expected second line to start  with %s "
+              "Instead found: %s", libraryNameToken.c_str(), line1.c_str());
+        return false;
+    }
+
+    std::string libraryName = line1.substr(libraryNameToken.length());
+
+    *path += "/";
+    *path += architectureDirectory();
+    *path += "/";
+    *path += libraryName;
+
+    return true;
+}
+
+const char* BootAction::architectureDirectory() {
+  switch(android_getCpuFamily()) {
+      case ANDROID_CPU_FAMILY_ARM:
+          return "arm";
+      case ANDROID_CPU_FAMILY_X86:
+          return "x86";
+      case ANDROID_CPU_FAMILY_MIPS:
+          return "mips";
+      case ANDROID_CPU_FAMILY_ARM64:
+          return "arm64";
+      case ANDROID_CPU_FAMILY_X86_64:
+          return "x86_64";
+      case ANDROID_CPU_FAMILY_MIPS64:
+          return "mips64";
+      default:
+          ALOGE("Unsupported cpu family: %d", android_getCpuFamily());
+          return "";
+  }
+}
+
+}  // namespace android
diff --git a/cmds/bootanimation/iot/BootAction.h b/cmds/bootanimation/iot/BootAction.h
new file mode 100644
index 0000000..31d0d1f
--- /dev/null
+++ b/cmds/bootanimation/iot/BootAction.h
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ */
+
+#ifndef _BOOTANIMATION_BOOTACTION_H
+#define _BOOTANIMATION_BOOTACTION_H
+
+#include <string>
+
+#include <utils/RefBase.h>
+
+namespace android {
+
+class BootAction : public RefBase {
+public:
+    ~BootAction();
+    // Parse the contents of the config file. We expect one line:
+    // LIBRARY_NAME=
+    //
+    // LIBRARY_NAME is the name of the shared library that contains the boot action.
+    bool init(const std::string& libraryPath, const std::string& config);
+
+    // The animation is going to start playing partNumber for the playCount'th
+    // time, update the action as needed.
+    // This is run in the same thread as the boot animation,
+    // you must not block here.
+    void startPart(int partNumber, int playCount);
+
+    // Shutdown the boot action, this will be called shortly before the
+    // process is shut down to allow time for cleanup.
+    void shutdown();
+
+private:
+    typedef bool (*libInit)();
+    typedef void (*libStartPart)(int partNumber, int playNumber);
+    typedef void (*libShutdown)();
+
+    bool parseConfig(const std::string& config, std::string* path);
+    bool loadSymbol(const char* symbol, void** loaded);
+    const char* architectureDirectory();
+
+    void* mLibHandle = nullptr;
+    libInit mLibInit = nullptr;
+    libStartPart mLibStartPart = nullptr;
+    libShutdown mLibShutdown = nullptr;
+};
+
+}  // namespace android
+
+
+#endif  // _BOOTANIMATION_BOOTACTION_H
diff --git a/cmds/bootanimation/iot/iotbootanimation_main.cpp b/cmds/bootanimation/iot/iotbootanimation_main.cpp
new file mode 100644
index 0000000..d1ae786
--- /dev/null
+++ b/cmds/bootanimation/iot/iotbootanimation_main.cpp
@@ -0,0 +1,93 @@
+/*
+ * 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 "IotBootAnimation"
+
+#include <android-base/file.h>
+#include <binder/IPCThreadState.h>
+#include <binder/IServiceManager.h>
+#include <binder/ProcessState.h>
+#include <cutils/properties.h>
+#include <sys/resource.h>
+#include <utils/Log.h>
+#include <utils/threads.h>
+#include <BootAnimation.h>
+
+#include "BootAction.h"
+#include "BootAnimationUtil.h"
+
+using namespace android;
+using android::base::ReadFileToString;
+
+// Create a typedef for readability.
+typedef android::BootAnimation::Animation Animation;
+
+namespace {
+
+class BootActionAnimationCallbacks : public android::BootAnimation::Callbacks {public:
+    void init(const Vector<Animation::Part>&) override {
+        // Create and initialize BootActions if we have a boot_action.conf.
+        std::string bootActionConf;
+        if (ReadFileToString("/oem/app/etc/boot_action.conf", &bootActionConf)) {
+            mBootAction = new BootAction();
+            if (!mBootAction->init("/oem/app/lib", bootActionConf)) {
+                mBootAction = NULL;
+            }
+        } else {
+            ALOGI("No boot actions specified");
+        }
+
+    };
+
+    void playPart(int partNumber, const Animation::Part&, int playNumber) override {
+        if (mBootAction != nullptr) {
+            mBootAction->startPart(partNumber, playNumber);
+        }
+    };
+
+    void shutdown() override {
+        if (mBootAction != nullptr) {
+            mBootAction->shutdown();
+            // Give it two seconds to shut down.
+            sleep(2);
+            mBootAction = nullptr;
+        }
+    };
+
+private:
+    sp<BootAction> mBootAction = nullptr;
+};
+
+}  // namespace
+
+int main() {
+    setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_DISPLAY);
+
+    if (bootAnimationDisabled()) {
+        ALOGI("boot animation disabled");
+        return 0;
+    }
+
+    waitForSurfaceFlinger();
+
+    sp<ProcessState> proc(ProcessState::self());
+    ProcessState::self()->startThreadPool();
+
+    sp<BootAnimation> boot = new BootAnimation(new BootActionAnimationCallbacks());
+
+    IPCThreadState::self()->joinThreadPool();
+    return 0;
+}
diff --git a/cmds/bu/src/com/android/commands/bu/Backup.java b/cmds/bu/src/com/android/commands/bu/Backup.java
index 345895b..834658d 100644
--- a/cmds/bu/src/com/android/commands/bu/Backup.java
+++ b/cmds/bu/src/com/android/commands/bu/Backup.java
@@ -136,7 +136,9 @@
             if (fd != null) {
                 try {
                     fd.close();
-                } catch (IOException e) {}
+                } catch (IOException e) {
+                    Log.e(TAG, "IO error closing output for backup: " + e.getMessage());
+                }
             }
         }
     }
diff --git a/cmds/hid/jni/com_android_commands_hid_Device.cpp b/cmds/hid/jni/com_android_commands_hid_Device.cpp
index 107dc86..bf2e45c 100644
--- a/cmds/hid/jni/com_android_commands_hid_Device.cpp
+++ b/cmds/hid/jni/com_android_commands_hid_Device.cpp
@@ -101,16 +101,15 @@
 
     struct uhid_event ev;
     memset(&ev, 0, sizeof(ev));
-    ev.type = UHID_CREATE2;
-    strncpy((char*)ev.u.create2.name, name, UHID_MAX_NAME_LENGTH);
-    memcpy(&ev.u.create2.rd_data, descriptor.get(),
-            descriptorSize * sizeof(ev.u.create2.rd_data[0]));
-    ev.u.create2.rd_size = descriptorSize;
-    ev.u.create2.bus = BUS_BLUETOOTH;
-    ev.u.create2.vendor = vid;
-    ev.u.create2.product = pid;
-    ev.u.create2.version = 0;
-    ev.u.create2.country = 0;
+    ev.type = UHID_CREATE;
+    strncpy((char*)ev.u.create.name, name, UHID_MAX_NAME_LENGTH);
+    ev.u.create.rd_data = descriptor.get();
+    ev.u.create.rd_size = descriptorSize;
+    ev.u.create.bus = BUS_BLUETOOTH;
+    ev.u.create.vendor = vid;
+    ev.u.create.product = pid;
+    ev.u.create.version = 0;
+    ev.u.create.country = 0;
 
     errno = 0;
     ssize_t ret = TEMP_FAILURE_RETRY(::write(fd, &ev, sizeof(ev)));
@@ -159,9 +158,9 @@
 void Device::sendReport(uint8_t* report, size_t reportSize) {
     struct uhid_event ev;
     memset(&ev, 0, sizeof(ev));
-    ev.type = UHID_INPUT2;
-    ev.u.input2.size = reportSize;
-    memcpy(&ev.u.input2.data, report, reportSize);
+    ev.type = UHID_INPUT;
+    ev.u.input.size = reportSize;
+    memcpy(&ev.u.input.data, report, reportSize);
     ssize_t ret = TEMP_FAILURE_RETRY(::write(mFd, &ev, sizeof(ev)));
     if (ret < 0 || ret != sizeof(ev)) {
         LOGE("Failed to send hid event: %s", strerror(errno));
diff --git a/cmds/locksettings/src/com/android/commands/locksettings/LockSettingsCmd.java b/cmds/locksettings/src/com/android/commands/locksettings/LockSettingsCmd.java
index 1e426d6..6a4a4be 100644
--- a/cmds/locksettings/src/com/android/commands/locksettings/LockSettingsCmd.java
+++ b/cmds/locksettings/src/com/android/commands/locksettings/LockSettingsCmd.java
@@ -33,6 +33,12 @@
             "       locksettings set-pin [--old OLD_CREDENTIAL] NEW_PIN\n" +
             "       locksettings set-password [--old OLD_CREDENTIAL] NEW_PASSWORD\n" +
             "       locksettings clear [--old OLD_CREDENTIAL]\n" +
+            "       locksettings verify [--old OLD_CREDENTIAL]\n" +
+            "       locksettings set-disabled DISABLED\n" +
+            "       locksettings get-disabled\n" +
+            "\n" +
+            "flags: \n" +
+            "       --user USER_ID: specify the user, default value is current user\n" +
             "\n" +
             "locksettings set-pattern: sets a pattern\n" +
             "    A pattern is specified by a non-separated list of numbers that index the cell\n" +
@@ -44,7 +50,13 @@
             "\n" +
             "locksettings set-password: sets a password\n" +
             "\n" +
-            "locksettings clear: clears the unlock credential\n";
+            "locksettings clear: clears the unlock credential\n" +
+            "\n" +
+            "locksettings verify: verifies the credential and unlocks the user\n" +
+            "\n" +
+            "locksettings set-disabled: sets whether the lock screen should be disabled\n" +
+            "\n" +
+            "locksettings get-disabled: retrieves whether the lock screen is disabled\n";
 
     public static void main(String[] args) {
         (new LockSettingsCmd()).run(args);
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java
index c4193f6..ad989de 100644
--- a/cmds/pm/src/com/android/commands/pm/Pm.java
+++ b/cmds/pm/src/com/android/commands/pm/Pm.java
@@ -1033,7 +1033,7 @@
 
             if (info != null) {
                 System.out.println("Success: created user id " + info.id);
-                return 1;
+                return 0;
             } else {
                 System.err.println("Error: couldn't create User.");
                 return 1;
diff --git a/cmds/requestsync/src/com/android/commands/requestsync/RequestSync.java b/cmds/requestsync/src/com/android/commands/requestsync/RequestSync.java
index 50ee564..360b230 100644
--- a/cmds/requestsync/src/com/android/commands/requestsync/RequestSync.java
+++ b/cmds/requestsync/src/com/android/commands/requestsync/RequestSync.java
@@ -29,10 +29,41 @@
     private int mNextArg;
     private String mCurArgData;
 
+    enum Operation {
+        REQUEST_SYNC {
+            @Override
+            void invoke(RequestSync caller) {
+                ContentResolver.requestSync(caller.mAccount, caller.mAuthority, caller.mExtras);
+            }
+        },
+        ADD_PERIODIC_SYNC {
+            @Override
+            void invoke(RequestSync caller) {
+                ContentResolver.addPeriodicSync(caller.mAccount, caller.mAuthority, caller.mExtras,
+                        caller.mPeriodicIntervalSeconds);
+            }
+        },
+        REMOVE_PERIODIC_SYNC {
+            @Override
+            void invoke(RequestSync caller) {
+                ContentResolver.removePeriodicSync(
+                        caller.mAccount, caller.mAuthority, caller.mExtras);
+            }
+        };
+
+        abstract void invoke(RequestSync caller);
+    }
+
+    private Operation mOperation;
+
     // account & authority
-    private String mAccountName = null;
-    private String mAccountType = null;
-    private String mAuthority = null;
+    private String mAccountName;
+    private String mAccountType;
+    private String mAuthority;
+
+    private Account mAccount;
+
+    private int mPeriodicIntervalSeconds;
 
     // extras
     private Bundle mExtras = new Bundle();
@@ -80,11 +111,28 @@
                 }
             }
 
-            ContentResolver.requestSync(account, mAuthority, mExtras);
+            mAccount = account;
+
+            mOperation.invoke(this);
         }
     }
 
     private boolean parseArgs() throws URISyntaxException {
+        mOperation = Operation.REQUEST_SYNC;
+        if (mArgs.length > 0) {
+            switch (mArgs[0]) {
+                case "add-periodic":
+                    mNextArg++;
+                    mOperation = Operation.ADD_PERIODIC_SYNC;
+                    mPeriodicIntervalSeconds = Integer.parseInt(nextArgRequired());
+                    break;
+                case "remove-periodic":
+                    mNextArg++;
+                    mOperation = Operation.REMOVE_PERIODIC_SYNC;
+                    break;
+            }
+        }
+
         String opt;
         while ((opt=nextOption()) != null) {
             if (opt.equals("-h") || opt.equals("--help")) {
@@ -114,6 +162,8 @@
                 mExtras.putBoolean(ContentResolver.SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS, true);
             } else if (opt.equals("-u") || opt.equals("--upload-only")) {
                 mExtras.putBoolean(ContentResolver.SYNC_EXTRAS_UPLOAD, true);
+            } else if (opt.equals("--rc") || opt.equals("--require-charging")) {
+                mExtras.putBoolean(ContentResolver.SYNC_EXTRAS_REQUIRE_CHARGING, true);
             } else if (opt.equals("-e") || opt.equals("--es") || opt.equals("--extra-string")) {
                 final String key = nextArgRequired();
                 final String value = nextArgRequired();
@@ -207,31 +257,43 @@
 
     private static void showUsage() {
         System.err.println(
-                "usage: requestsync [options]\n" +
-                "With no options, a sync will be requested for all account and all sync\n" +
-                "authorities with no extras. Options can be:\n" +
-                "    -h|--help: Display this message\n" +
-                "    -n|--account-name <ACCOUNT-NAME>\n" +
-                "    -t|--account-type <ACCOUNT-TYPE>\n" +
-                "    -a|--authority <AUTHORITY>\n" +
-                "  Add ContentResolver extras:\n" +
-                "    --is|--ignore-settings: Add SYNC_EXTRAS_IGNORE_SETTINGS\n" +
-                "    --ib|--ignore-backoff: Add SYNC_EXTRAS_IGNORE_BACKOFF\n" +
-                "    --dd|--discard-deletions: Add SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS\n" +
-                "    --nr|--no-retry: Add SYNC_EXTRAS_DO_NOT_RETRY\n" +
-                "    --ex|--expedited: Add SYNC_EXTRAS_EXPEDITED\n" +
-                "    --i|--initialize: Add SYNC_EXTRAS_INITIALIZE\n" +
-                "    --m|--manual: Add SYNC_EXTRAS_MANUAL\n" +
-                "    --od|--override-deletions: Add SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS\n" +
-                "    --u|--upload-only: Add SYNC_EXTRAS_UPLOAD\n" +
-                "  Add custom extras:\n" +
-                "    -e|--es|--extra-string <KEY> <VALUE>\n" +
-                "    --esn|--extra-string-null <KEY>\n" +
-                "    --ei|--extra-int <KEY> <VALUE>\n" +
-                "    --el|--extra-long <KEY> <VALUE>\n" +
-                "    --ef|--extra-float <KEY> <VALUE>\n" +
-                "    --ed|--extra-double <KEY> <VALUE>\n" +
-                "    --ez|--extra-bool <KEY> <VALUE>\n"
+                "Usage:\n" +
+                "\n" +
+                "  requestsync [options]\n" +
+                "    With no options, a sync will be requested for all account and all sync\n" +
+                "    authorities with no extras.\n" +
+                "    Basic options:\n" +
+                "       -h|--help: Display this message\n" +
+                "       -n|--account-name <ACCOUNT-NAME>\n" +
+                "       -t|--account-type <ACCOUNT-TYPE>\n" +
+                "       -a|--authority <AUTHORITY>\n" +
+                "    ContentResolver extra options:\n" +
+                "      --is|--ignore-settings: Add SYNC_EXTRAS_IGNORE_SETTINGS\n" +
+                "      --ib|--ignore-backoff: Add SYNC_EXTRAS_IGNORE_BACKOFF\n" +
+                "      --dd|--discard-deletions: Add SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS\n" +
+                "      --nr|--no-retry: Add SYNC_EXTRAS_DO_NOT_RETRY\n" +
+                "      --ex|--expedited: Add SYNC_EXTRAS_EXPEDITED\n" +
+                "      -i|--initialize: Add SYNC_EXTRAS_INITIALIZE\n" +
+                "      --m|--manual: Add SYNC_EXTRAS_MANUAL\n" +
+                "      --od|--override-deletions: Add SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS\n" +
+                "      -u|--upload-only: Add SYNC_EXTRAS_UPLOAD\n" +
+                "      --rc|--require-charging: Add SYNC_EXTRAS_REQUIRE_CHARGING\n" +
+                "    Custom extra options:\n" +
+                "      -e|--es|--extra-string <KEY> <VALUE>\n" +
+                "      --esn|--extra-string-null <KEY>\n" +
+                "      --ei|--extra-int <KEY> <VALUE>\n" +
+                "      --el|--extra-long <KEY> <VALUE>\n" +
+                "      --ef|--extra-float <KEY> <VALUE>\n" +
+                "      --ed|--extra-double <KEY> <VALUE>\n" +
+                "      --ez|--extra-bool <KEY> <VALUE>\n" +
+                "\n" +
+                "  requestsync add-periodic INTERVAL-SECOND [options]\n" +
+                        "  requestsync remove-periodic [options]\n" +
+                "    Mandatory options:\n" +
+                "      -n|--account-name <ACCOUNT-NAME>\n" +
+                "      -t|--account-type <ACCOUNT-TYPE>\n" +
+                "      -a|--authority <AUTHORITY>\n" +
+                "    Also takes the above extra options.\n"
                 );
     }
 }
diff --git a/cmds/svc/src/com/android/commands/svc/BluetoothCommand.java b/cmds/svc/src/com/android/commands/svc/BluetoothCommand.java
new file mode 100644
index 0000000..b572ce2
--- /dev/null
+++ b/cmds/svc/src/com/android/commands/svc/BluetoothCommand.java
@@ -0,0 +1,58 @@
+/*
+ * 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.commands.svc;
+
+import android.bluetooth.BluetoothAdapter;
+import android.os.RemoteException;
+
+public class BluetoothCommand extends Svc.Command {
+
+    public BluetoothCommand() {
+        super("bluetooth");
+    }
+
+    @Override
+    public String shortHelp() {
+        return "Control Bluetooth service";
+    }
+
+    @Override
+    public String longHelp() {
+        return shortHelp() + "\n"
+                + "\n"
+                + "usage: svc bluetooth [enable|disable]\n"
+                + "         Turn Bluetooth on or off.\n\n";
+    }
+
+    @Override
+    public void run(String[] args) {
+        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+
+        if (adapter == null) {
+            System.err.println("Got a null BluetoothAdapter, is the system running?");
+            return;
+        }
+
+        if (args.length == 2 && "enable".equals(args[1])) {
+            adapter.enable();
+        } else if (args.length == 2 && "disable".equals(args[1])) {
+            adapter.disable();
+        } else {
+            System.err.println(longHelp());
+        }
+    }
+}
diff --git a/cmds/svc/src/com/android/commands/svc/NfcCommand.java b/cmds/svc/src/com/android/commands/svc/NfcCommand.java
index 02a92b9..020ca33 100644
--- a/cmds/svc/src/com/android/commands/svc/NfcCommand.java
+++ b/cmds/svc/src/com/android/commands/svc/NfcCommand.java
@@ -17,8 +17,6 @@
 package com.android.commands.svc;
 
 import android.content.Context;
-import android.content.pm.IPackageManager;
-import android.content.pm.PackageManager;
 import android.nfc.INfcAdapter;
 import android.os.RemoteException;
 import android.os.ServiceManager;
@@ -44,42 +42,27 @@
 
     @Override
     public void run(String[] args) {
-        boolean validCommand = false;
-        if (args.length >= 2) {
-            boolean flag = false;
-            if ("enable".equals(args[1])) {
-                flag = true;
-                validCommand = true;
-            } else if ("disable".equals(args[1])) {
-                flag = false;
-                validCommand = true;
-            }
-            if (validCommand) {
-                IPackageManager pm = IPackageManager.Stub.asInterface(
-                        ServiceManager.getService("package"));
-                try {
-                    if (pm.hasSystemFeature(PackageManager.FEATURE_NFC, 0) ||
-			pm.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION, 0)) {
-                        INfcAdapter nfc = INfcAdapter.Stub
-                                .asInterface(ServiceManager.getService(Context.NFC_SERVICE));
-                        try {
-                            if (flag) {
-                                nfc.enable();
-                            } else
-                                nfc.disable(true);
-                        } catch (RemoteException e) {
-                            System.err.println("NFC operation failed: " + e);
-                        }
-                    } else {
-                        System.err.println("NFC feature not supported.");
-                    }
-                } catch (RemoteException e) {
-                    System.err.println("RemoteException while calling PackageManager, is the "
-                            + "system running?");
-                }
+        INfcAdapter adapter = INfcAdapter.Stub.asInterface(
+                ServiceManager.getService(Context.NFC_SERVICE));
+
+        if (adapter == null) {
+            System.err.println("Got a null NfcAdapter, is the system running?");
+            return;
+        }
+
+        try {
+            if (args.length == 2 && "enable".equals(args[1])) {
+                adapter.enable();
+                return;
+            } else if (args.length == 2 && "disable".equals(args[1])) {
+                adapter.disable(true);
                 return;
             }
+        } catch (RemoteException e) {
+            System.err.println("NFC operation failed: " + e);
+            return;
         }
+
         System.err.println(longHelp());
     }
 
diff --git a/cmds/svc/src/com/android/commands/svc/Svc.java b/cmds/svc/src/com/android/commands/svc/Svc.java
index 2cccd1a..62225df 100644
--- a/cmds/svc/src/com/android/commands/svc/Svc.java
+++ b/cmds/svc/src/com/android/commands/svc/Svc.java
@@ -97,5 +97,6 @@
             new WifiCommand(),
             new UsbCommand(),
             new NfcCommand(),
+            new BluetoothCommand(),
     };
 }
diff --git a/compiled-classes-phone b/compiled-classes-phone
deleted file mode 100644
index d11f0ba..0000000
--- a/compiled-classes-phone
+++ /dev/null
@@ -1,8524 +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.
-#
-#
-#
-# Compiled-classes filter file for phones.
-#
-# Using a compiled-classes file filters non-mentioned classes from being compiled into
-# the boot.oat file(s), reducing the size of the boot image. This is a tradeoff, as classes
-# that have not been compiled must be run with the interpreter or through JIT.
-#
-# This file has been derived for mainline phone (and tablet) usage in concern with the
-# preloaded-classes file, but is not used by default. To use this file, add a copy statement
-# to your device.mk, e.g.,
-#
-#   PRODUCT_COPY_FILES += \
-#     frameworks/base/compiled-classes-phone:system/etc/compiled-classes
-#
-android.R$styleable
-android.accessibilityservice.AccessibilityServiceInfo
-android.accessibilityservice.AccessibilityServiceInfo$1
-android.accessibilityservice.IAccessibilityServiceClient
-android.accessibilityservice.IAccessibilityServiceConnection
-android.accessibilityservice.IAccessibilityServiceConnection$Stub
-android.accounts.AbstractAccountAuthenticator
-android.accounts.AbstractAccountAuthenticator$Transport
-android.accounts.Account
-android.accounts.Account$1
-android.accounts.AccountAndUser
-android.accounts.AccountAuthenticatorResponse
-android.accounts.AccountAuthenticatorResponse$1
-android.accounts.AccountManager
-android.accounts.AccountManager$1
-android.accounts.AccountManager$11
-android.accounts.AccountManager$19
-android.accounts.AccountManager$3
-android.accounts.AccountManager$4
-android.accounts.AccountManager$AmsTask
-android.accounts.AccountManager$AmsTask$1
-android.accounts.AccountManager$AmsTask$Response
-android.accounts.AccountManager$BaseFutureTask
-android.accounts.AccountManager$BaseFutureTask$1
-android.accounts.AccountManager$BaseFutureTask$Response
-android.accounts.AccountManager$Future2Task
-android.accounts.AccountManager$Future2Task$1
-android.accounts.AccountManagerCallback
-android.accounts.AccountManagerFuture
-android.accounts.AccountManagerInternal
-android.accounts.AccountManagerInternal$OnAppPermissionChangeListener
-android.accounts.AccountsException
-android.accounts.AuthenticatorDescription
-android.accounts.AuthenticatorDescription$1
-android.accounts.AuthenticatorException
-android.accounts.IAccountAuthenticator
-android.accounts.IAccountAuthenticator$Stub
-android.accounts.IAccountAuthenticator$Stub$Proxy
-android.accounts.IAccountAuthenticatorResponse
-android.accounts.IAccountAuthenticatorResponse$Stub
-android.accounts.IAccountAuthenticatorResponse$Stub$Proxy
-android.accounts.IAccountManager
-android.accounts.IAccountManager$Stub
-android.accounts.IAccountManager$Stub$Proxy
-android.accounts.IAccountManagerResponse
-android.accounts.IAccountManagerResponse$Stub
-android.accounts.IAccountManagerResponse$Stub$Proxy
-android.accounts.OnAccountsUpdateListener
-android.accounts.OperationCanceledException
-android.animation.AnimationHandler
-android.animation.AnimationHandler$1
-android.animation.AnimationHandler$AnimationFrameCallback
-android.animation.AnimationHandler$AnimationFrameCallbackProvider
-android.animation.AnimationHandler$MyFrameCallbackProvider
-android.animation.Animator
-android.animation.Animator$AnimatorConstantState
-android.animation.Animator$AnimatorListener
-android.animation.Animator$AnimatorPauseListener
-android.animation.AnimatorInflater
-android.animation.AnimatorInflater$PathDataEvaluator
-android.animation.AnimatorListenerAdapter
-android.animation.AnimatorSet
-android.animation.AnimatorSet$1
-android.animation.AnimatorSet$2
-android.animation.AnimatorSet$3
-android.animation.AnimatorSet$AnimationEvent
-android.animation.AnimatorSet$Builder
-android.animation.AnimatorSet$Node
-android.animation.AnimatorSet$SeekState
-android.animation.ArgbEvaluator
-android.animation.FloatArrayEvaluator
-android.animation.FloatEvaluator
-android.animation.FloatKeyframeSet
-android.animation.IntEvaluator
-android.animation.IntKeyframeSet
-android.animation.Keyframe
-android.animation.Keyframe$FloatKeyframe
-android.animation.Keyframe$IntKeyframe
-android.animation.Keyframe$ObjectKeyframe
-android.animation.KeyframeSet
-android.animation.Keyframes
-android.animation.Keyframes$FloatKeyframes
-android.animation.Keyframes$IntKeyframes
-android.animation.LayoutTransition
-android.animation.LayoutTransition$1
-android.animation.LayoutTransition$2
-android.animation.LayoutTransition$3
-android.animation.LayoutTransition$4
-android.animation.LayoutTransition$5
-android.animation.LayoutTransition$CleanupCallback
-android.animation.LayoutTransition$TransitionListener
-android.animation.ObjectAnimator
-android.animation.PathKeyframes
-android.animation.PathKeyframes$1
-android.animation.PathKeyframes$2
-android.animation.PathKeyframes$FloatKeyframesBase
-android.animation.PathKeyframes$IntKeyframesBase
-android.animation.PathKeyframes$SimpleKeyframes
-android.animation.PropertyValuesHolder
-android.animation.PropertyValuesHolder$1
-android.animation.PropertyValuesHolder$FloatPropertyValuesHolder
-android.animation.PropertyValuesHolder$IntPropertyValuesHolder
-android.animation.PropertyValuesHolder$PropertyValues
-android.animation.PropertyValuesHolder$PropertyValues$DataSource
-android.animation.RectEvaluator
-android.animation.RevealAnimator
-android.animation.StateListAnimator
-android.animation.StateListAnimator$1
-android.animation.StateListAnimator$StateListAnimatorConstantState
-android.animation.StateListAnimator$Tuple
-android.animation.TimeAnimator
-android.animation.TimeAnimator$TimeListener
-android.animation.TimeInterpolator
-android.animation.TypeEvaluator
-android.animation.ValueAnimator
-android.animation.ValueAnimator$AnimatorUpdateListener
-android.app.-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU
-android.app.-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU$1
-android.app.-$Lambda$CsyQO--8YdRe5wlajUCi-L98enA$1
-android.app.-$Lambda$CsyQO--8YdRe5wlajUCi-L98enA$2
-android.app.-$Lambda$CsyQO--8YdRe5wlajUCi-L98enA$3
-android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk
-android.app.-$Lambda$c44uHH2WE4sJvw5tZZB6gRzEaHI
-android.app.-$Lambda$c44uHH2WE4sJvw5tZZB6gRzEaHI$1
-android.app.-$Lambda$vZ1qb742P9hE4drBY-TrOZB_qKo
-android.app.-$Lambda$w9bG0NLfK6B6UpQKzQS6S1ayAh0
-android.app.-$Lambda$w9bG0NLfK6B6UpQKzQS6S1ayAh0$1
-android.app.ActionBar
-android.app.ActionBar$LayoutParams
-android.app.Activity
-android.app.Activity$HostCallbacks
-android.app.ActivityManager
-android.app.ActivityManager$1
-android.app.ActivityManager$AppTask
-android.app.ActivityManager$MemoryInfo
-android.app.ActivityManager$MemoryInfo$1
-android.app.ActivityManager$OnUidImportanceListener
-android.app.ActivityManager$ProcessErrorStateInfo
-android.app.ActivityManager$RecentTaskInfo
-android.app.ActivityManager$RecentTaskInfo$1
-android.app.ActivityManager$RunningAppProcessInfo
-android.app.ActivityManager$RunningAppProcessInfo$1
-android.app.ActivityManager$RunningServiceInfo
-android.app.ActivityManager$RunningServiceInfo$1
-android.app.ActivityManager$RunningTaskInfo
-android.app.ActivityManager$RunningTaskInfo$1
-android.app.ActivityManager$StackId
-android.app.ActivityManager$StackInfo
-android.app.ActivityManager$StackInfo$1
-android.app.ActivityManager$TaskDescription
-android.app.ActivityManager$TaskDescription$1
-android.app.ActivityManager$TaskSnapshot
-android.app.ActivityManager$TaskSnapshot$1
-android.app.ActivityManager$TaskThumbnail
-android.app.ActivityManager$TaskThumbnailInfo
-android.app.ActivityManager$TaskThumbnailInfo$1
-android.app.ActivityManager$UidObserver
-android.app.ActivityManagerInternal
-android.app.ActivityManagerInternal$SleepToken
-android.app.ActivityOptions
-android.app.ActivityOptions$1
-android.app.ActivityOptions$1$1
-android.app.ActivityOptions$OnAnimationFinishedListener
-android.app.ActivityOptions$OnAnimationStartedListener
-android.app.ActivityThread
-android.app.ActivityThread$1
-android.app.ActivityThread$2
-android.app.ActivityThread$ActivityClientRecord
-android.app.ActivityThread$ActivityConfigChangeData
-android.app.ActivityThread$AppBindData
-android.app.ActivityThread$ApplicationThread
-android.app.ActivityThread$BindServiceData
-android.app.ActivityThread$ContextCleanupInfo
-android.app.ActivityThread$CreateServiceData
-android.app.ActivityThread$DropBoxReporter
-android.app.ActivityThread$EventLoggingReporter
-android.app.ActivityThread$GcIdler
-android.app.ActivityThread$H
-android.app.ActivityThread$Idler
-android.app.ActivityThread$NewIntentData
-android.app.ActivityThread$Profiler
-android.app.ActivityThread$ProviderClientRecord
-android.app.ActivityThread$ProviderKey
-android.app.ActivityThread$ProviderRefCount
-android.app.ActivityThread$ReceiverData
-android.app.ActivityThread$RequestAssistContextExtras
-android.app.ActivityThread$ResultData
-android.app.ActivityThread$ServiceArgsData
-android.app.ActivityThread$StopInfo
-android.app.ActivityTransitionCoordinator
-android.app.ActivityTransitionCoordinator$ContinueTransitionListener
-android.app.ActivityTransitionCoordinator$FixedEpicenterCallback
-android.app.ActivityTransitionCoordinator$GhostViewListeners
-android.app.ActivityTransitionCoordinator$SharedElementOriginalState
-android.app.ActivityTransitionState
-android.app.AlarmManager$AlarmClockInfo
-android.app.AlarmManager$ListenerWrapper
-android.app.AlarmManager$OnAlarmListener
-android.app.AlertDialog
-android.app.AlertDialog$Builder
-android.app.AppGlobals
-android.app.AppOpsManager
-android.app.AppOpsManager$1
-android.app.AppOpsManager$OnOpChangedInternalListener
-android.app.AppOpsManager$OnOpChangedListener
-android.app.AppOpsManager$OpEntry
-android.app.AppOpsManager$OpEntry$1
-android.app.AppOpsManager$PackageOps
-android.app.AppOpsManager$PackageOps$1
-android.app.Application
-android.app.Application$ActivityLifecycleCallbacks
-android.app.ApplicationErrorReport
-android.app.ApplicationErrorReport$AnrInfo
-android.app.ApplicationErrorReport$CrashInfo
-android.app.ApplicationErrorReport$ParcelableCrashInfo
-android.app.ApplicationErrorReport$ParcelableCrashInfo$1
-android.app.ApplicationLoaders
-android.app.ApplicationPackageManager
-android.app.ApplicationPackageManager$MoveCallbackDelegate
-android.app.ApplicationPackageManager$OnPermissionsChangeListenerDelegate
-android.app.ApplicationPackageManager$ResourceName
-android.app.AutomaticZenRule
-android.app.BackStackRecord
-android.app.BackStackRecord$Op
-android.app.BroadcastOptions
-android.app.ContentProviderHolder
-android.app.ContentProviderHolder$1
-android.app.ContextImpl
-android.app.ContextImpl$ApplicationContentResolver
-android.app.DatePickerDialog$OnDateSetListener
-android.app.DexLoadReporter
-android.app.Dialog
-android.app.Dialog$ListenersHandler
-android.app.DialogFragment
-android.app.DownloadManager
-android.app.DownloadManager$CursorTranslator
-android.app.DownloadManager$Query
-android.app.EnterTransitionCoordinator
-android.app.EnterTransitionCoordinator$1
-android.app.EnterTransitionCoordinator$2
-android.app.EnterTransitionCoordinator$3
-android.app.EnterTransitionCoordinator$4
-android.app.EnterTransitionCoordinator$5
-android.app.EnterTransitionCoordinator$6
-android.app.ExitTransitionCoordinator
-android.app.ExitTransitionCoordinator$10
-android.app.ExitTransitionCoordinator$3
-android.app.ExitTransitionCoordinator$9
-android.app.Fragment
-android.app.Fragment$1
-android.app.Fragment$AnimationInfo
-android.app.FragmentContainer
-android.app.FragmentController
-android.app.FragmentHostCallback
-android.app.FragmentManager
-android.app.FragmentManager$BackStackEntry
-android.app.FragmentManager$FragmentLifecycleCallbacks
-android.app.FragmentManager$OnBackStackChangedListener
-android.app.FragmentManagerImpl
-android.app.FragmentManagerImpl$1
-android.app.FragmentManagerImpl$AnimateOnHWLayerIfNeededListener
-android.app.FragmentManagerImpl$OpGenerator
-android.app.FragmentManagerState
-android.app.FragmentManagerState$1
-android.app.FragmentState
-android.app.FragmentState$1
-android.app.FragmentTransaction
-android.app.FragmentTransition
-android.app.FragmentTransition$FragmentContainerTransition
-android.app.IActivityContainer
-android.app.IActivityContainer$Stub
-android.app.IActivityContainerCallback
-android.app.IActivityController
-android.app.IActivityManager
-android.app.IActivityManager$Stub
-android.app.IActivityManager$Stub$Proxy
-android.app.IAlarmCompleteListener
-android.app.IAlarmCompleteListener$Stub
-android.app.IAlarmCompleteListener$Stub$Proxy
-android.app.IAlarmListener
-android.app.IAlarmListener$Stub
-android.app.IAlarmListener$Stub$Proxy
-android.app.IAlarmManager
-android.app.IAlarmManager$Stub
-android.app.IAlarmManager$Stub$Proxy
-android.app.IAppTask
-android.app.IAppTask$Stub
-android.app.IAppTask$Stub$Proxy
-android.app.IApplicationThread
-android.app.IApplicationThread$Stub
-android.app.IApplicationThread$Stub$Proxy
-android.app.IInstantAppResolver
-android.app.IInstantAppResolver$Stub
-android.app.IInstantAppResolver$Stub$Proxy
-android.app.IInstrumentationWatcher
-android.app.IInstrumentationWatcher$Stub
-android.app.INotificationManager
-android.app.INotificationManager$Stub
-android.app.INotificationManager$Stub$Proxy
-android.app.IProcessObserver
-android.app.IProcessObserver$Stub
-android.app.IProcessObserver$Stub$Proxy
-android.app.ISearchManager
-android.app.ISearchManager$Stub
-android.app.ISearchManager$Stub$Proxy
-android.app.IServiceConnection
-android.app.IServiceConnection$Stub
-android.app.IServiceConnection$Stub$Proxy
-android.app.IStopUserCallback
-android.app.ITaskStackListener
-android.app.ITaskStackListener$Stub
-android.app.ITaskStackListener$Stub$Proxy
-android.app.ITransientNotification
-android.app.ITransientNotification$Stub
-android.app.ITransientNotification$Stub$Proxy
-android.app.IUiAutomationConnection
-android.app.IUiAutomationConnection$Stub
-android.app.IUiModeManager
-android.app.IUiModeManager$Stub
-android.app.IUiModeManager$Stub$Proxy
-android.app.IUidObserver
-android.app.IUidObserver$Stub
-android.app.IUidObserver$Stub$Proxy
-android.app.IUserSwitchObserver
-android.app.IUserSwitchObserver$Stub
-android.app.IUserSwitchObserver$Stub$Proxy
-android.app.IWallpaperManager
-android.app.IWallpaperManager$Stub
-android.app.IWallpaperManager$Stub$Proxy
-android.app.IWallpaperManagerCallback
-android.app.IWallpaperManagerCallback$Stub
-android.app.IWallpaperManagerCallback$Stub$Proxy
-android.app.InstantAppResolverService
-android.app.InstantAppResolverService$1
-android.app.InstantAppResolverService$InstantAppResolutionCallback
-android.app.InstantAppResolverService$ServiceHandler
-android.app.Instrumentation
-android.app.IntentReceiverLeaked
-android.app.IntentService
-android.app.IntentService$ServiceHandler
-android.app.JobSchedulerImpl
-android.app.KeyguardManager
-android.app.ListActivity
-android.app.ListFragment
-android.app.ListFragment$1
-android.app.ListFragment$2
-android.app.LoadedApk
-android.app.LoadedApk$ReceiverDispatcher
-android.app.LoadedApk$ReceiverDispatcher$Args
-android.app.LoadedApk$ReceiverDispatcher$InnerReceiver
-android.app.LoadedApk$ServiceDispatcher
-android.app.LoadedApk$ServiceDispatcher$ConnectionInfo
-android.app.LoadedApk$ServiceDispatcher$DeathMonitor
-android.app.LoadedApk$ServiceDispatcher$InnerConnection
-android.app.LoadedApk$ServiceDispatcher$RunConnection
-android.app.LoadedApk$WarningContextClassLoader
-android.app.LoaderManager
-android.app.LoaderManager$LoaderCallbacks
-android.app.LoaderManagerImpl
-android.app.LoaderManagerImpl$LoaderInfo
-android.app.NativeActivity
-android.app.Notification
-android.app.Notification$1
-android.app.Notification$Action
-android.app.Notification$Action$1
-android.app.Notification$Action$Builder
-android.app.Notification$BigPictureStyle
-android.app.Notification$BigTextStyle
-android.app.Notification$Builder
-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
-android.app.Notification$StandardTemplateParams
-android.app.Notification$Style
-android.app.Notification$TvExtender
-android.app.Notification$WearableExtender
-android.app.NotificationChannel
-android.app.NotificationChannel$1
-android.app.NotificationChannelGroup
-android.app.NotificationChannelGroup$1
-android.app.NotificationManager
-android.app.NotificationManager$Policy
-android.app.NotificationManager$Policy$1
-android.app.OnActivityPausedListener
-android.app.PackageInstallObserver
-android.app.PackageInstallObserver$1
-android.app.PendingIntent
-android.app.PendingIntent$1
-android.app.PendingIntent$CanceledException
-android.app.PendingIntent$FinishedDispatcher
-android.app.PendingIntent$OnFinished
-android.app.PendingIntent$OnMarshaledListener
-android.app.PictureInPictureParams
-android.app.PictureInPictureParams$1
-android.app.PictureInPictureParams$Builder
-android.app.ProfilerInfo
-android.app.ProgressDialog
-android.app.QueuedWork
-android.app.QueuedWork$QueuedWorkHandler
-android.app.ReceiverRestrictedContext
-android.app.RemoteAction
-android.app.RemoteAction$1
-android.app.RemoteInput
-android.app.RemoteInput$1
-android.app.ResourcesManager
-android.app.ResourcesManager$1
-android.app.ResourcesManager$ActivityResources
-android.app.ResultInfo
-android.app.ResultInfo$1
-android.app.SearchableInfo
-android.app.SearchableInfo$1
-android.app.Service
-android.app.ServiceConnectionLeaked
-android.app.ServiceStartArgs
-android.app.ServiceStartArgs$1
-android.app.SharedElementCallback
-android.app.SharedElementCallback$1
-android.app.SharedElementCallback$OnSharedElementsReadyListener
-android.app.SharedPreferencesImpl
-android.app.SharedPreferencesImpl$1
-android.app.SharedPreferencesImpl$2
-android.app.SharedPreferencesImpl$EditorImpl
-android.app.SharedPreferencesImpl$EditorImpl$1
-android.app.SharedPreferencesImpl$EditorImpl$2
-android.app.SharedPreferencesImpl$EditorImpl$3
-android.app.SharedPreferencesImpl$MemoryCommitResult
-android.app.StatusBarManager
-android.app.SynchronousUserSwitchObserver
-android.app.SystemServiceRegistry
-android.app.SystemServiceRegistry$1
-android.app.SystemServiceRegistry$10
-android.app.SystemServiceRegistry$11
-android.app.SystemServiceRegistry$12
-android.app.SystemServiceRegistry$13
-android.app.SystemServiceRegistry$14
-android.app.SystemServiceRegistry$15
-android.app.SystemServiceRegistry$16
-android.app.SystemServiceRegistry$17
-android.app.SystemServiceRegistry$18
-android.app.SystemServiceRegistry$19
-android.app.SystemServiceRegistry$2
-android.app.SystemServiceRegistry$20
-android.app.SystemServiceRegistry$21
-android.app.SystemServiceRegistry$22
-android.app.SystemServiceRegistry$23
-android.app.SystemServiceRegistry$24
-android.app.SystemServiceRegistry$25
-android.app.SystemServiceRegistry$26
-android.app.SystemServiceRegistry$27
-android.app.SystemServiceRegistry$28
-android.app.SystemServiceRegistry$29
-android.app.SystemServiceRegistry$3
-android.app.SystemServiceRegistry$30
-android.app.SystemServiceRegistry$31
-android.app.SystemServiceRegistry$32
-android.app.SystemServiceRegistry$33
-android.app.SystemServiceRegistry$34
-android.app.SystemServiceRegistry$35
-android.app.SystemServiceRegistry$36
-android.app.SystemServiceRegistry$37
-android.app.SystemServiceRegistry$38
-android.app.SystemServiceRegistry$39
-android.app.SystemServiceRegistry$4
-android.app.SystemServiceRegistry$40
-android.app.SystemServiceRegistry$41
-android.app.SystemServiceRegistry$42
-android.app.SystemServiceRegistry$43
-android.app.SystemServiceRegistry$44
-android.app.SystemServiceRegistry$45
-android.app.SystemServiceRegistry$46
-android.app.SystemServiceRegistry$47
-android.app.SystemServiceRegistry$48
-android.app.SystemServiceRegistry$49
-android.app.SystemServiceRegistry$5
-android.app.SystemServiceRegistry$50
-android.app.SystemServiceRegistry$51
-android.app.SystemServiceRegistry$52
-android.app.SystemServiceRegistry$53
-android.app.SystemServiceRegistry$54
-android.app.SystemServiceRegistry$55
-android.app.SystemServiceRegistry$56
-android.app.SystemServiceRegistry$57
-android.app.SystemServiceRegistry$58
-android.app.SystemServiceRegistry$59
-android.app.SystemServiceRegistry$6
-android.app.SystemServiceRegistry$60
-android.app.SystemServiceRegistry$61
-android.app.SystemServiceRegistry$62
-android.app.SystemServiceRegistry$63
-android.app.SystemServiceRegistry$64
-android.app.SystemServiceRegistry$65
-android.app.SystemServiceRegistry$66
-android.app.SystemServiceRegistry$67
-android.app.SystemServiceRegistry$68
-android.app.SystemServiceRegistry$69
-android.app.SystemServiceRegistry$7
-android.app.SystemServiceRegistry$70
-android.app.SystemServiceRegistry$71
-android.app.SystemServiceRegistry$72
-android.app.SystemServiceRegistry$73
-android.app.SystemServiceRegistry$74
-android.app.SystemServiceRegistry$75
-android.app.SystemServiceRegistry$76
-android.app.SystemServiceRegistry$77
-android.app.SystemServiceRegistry$78
-android.app.SystemServiceRegistry$79
-android.app.SystemServiceRegistry$8
-android.app.SystemServiceRegistry$80
-android.app.SystemServiceRegistry$81
-android.app.SystemServiceRegistry$82
-android.app.SystemServiceRegistry$9
-android.app.SystemServiceRegistry$CachedServiceFetcher
-android.app.SystemServiceRegistry$ServiceFetcher
-android.app.SystemServiceRegistry$StaticApplicationContextServiceFetcher
-android.app.SystemServiceRegistry$StaticServiceFetcher
-android.app.TaskStackListener
-android.app.TimePickerDialog$OnTimeSetListener
-android.app.UiModeManager
-android.app.UserSwitchObserver
-android.app.Vr2dDisplayProperties
-android.app.VrManager
-android.app.WaitResult
-android.app.WallpaperInfo
-android.app.WallpaperManager
-android.app.WallpaperManager$Globals
-android.app.admin.DeviceAdminInfo
-android.app.admin.DeviceAdminInfo$1
-android.app.admin.DeviceAdminInfo$PolicyInfo
-android.app.admin.DevicePolicyManager
-android.app.admin.DevicePolicyManagerInternal
-android.app.admin.DevicePolicyManagerInternal$OnCrossProfileWidgetProvidersChangeListener
-android.app.admin.IDevicePolicyManager
-android.app.admin.IDevicePolicyManager$Stub
-android.app.admin.IDevicePolicyManager$Stub$Proxy
-android.app.admin.PasswordMetrics
-android.app.admin.PasswordMetrics$1
-android.app.admin.SecurityLog
-android.app.admin.SecurityLog$SecurityEvent
-android.app.admin.SecurityLog$SecurityEvent$1
-android.app.admin.SystemUpdateInfo
-android.app.admin.SystemUpdateInfo$1
-android.app.admin.SystemUpdatePolicy
-android.app.admin.SystemUpdatePolicy$1
-android.app.assist.AssistContent
-android.app.assist.AssistStructure
-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
-android.app.assist.AssistStructure$ViewNode
-android.app.assist.AssistStructure$ViewNodeBuilder
-android.app.assist.AssistStructure$ViewNodeText
-android.app.assist.AssistStructure$ViewStackEntry
-android.app.assist.AssistStructure$WindowNode
-android.app.backup.BackupAgent
-android.app.backup.BackupAgentHelper
-android.app.backup.BackupDataInput
-android.app.backup.BackupDataInput$EntityHeader
-android.app.backup.BackupDataOutput
-android.app.backup.BackupHelper
-android.app.backup.BackupHelperDispatcher
-android.app.backup.BackupHelperDispatcher$Header
-android.app.backup.BackupManager
-android.app.backup.BackupTransport
-android.app.backup.BackupTransport$TransportImpl
-android.app.backup.FileBackupHelperBase
-android.app.backup.FullBackup
-android.app.backup.FullBackupDataOutput
-android.app.backup.IBackupManager
-android.app.backup.IBackupManager$Stub
-android.app.backup.IBackupManager$Stub$Proxy
-android.app.backup.IBackupManagerMonitor
-android.app.backup.IBackupObserver
-android.app.backup.IFullBackupRestoreObserver
-android.app.backup.IRestoreSession
-android.app.backup.ISelectBackupTransportCallback
-android.app.backup.RestoreDescription
-android.app.backup.RestoreSet
-android.app.job.IJobCallback
-android.app.job.IJobCallback$Stub
-android.app.job.IJobCallback$Stub$Proxy
-android.app.job.IJobScheduler
-android.app.job.IJobScheduler$Stub
-android.app.job.IJobScheduler$Stub$Proxy
-android.app.job.IJobService
-android.app.job.IJobService$Stub
-android.app.job.IJobService$Stub$Proxy
-android.app.job.JobInfo
-android.app.job.JobInfo$1
-android.app.job.JobInfo$Builder
-android.app.job.JobInfo$TriggerContentUri
-android.app.job.JobInfo$TriggerContentUri$1
-android.app.job.JobParameters
-android.app.job.JobParameters$1
-android.app.job.JobScheduler
-android.app.job.JobService
-android.app.job.JobService$1
-android.app.job.JobServiceEngine
-android.app.job.JobServiceEngine$JobHandler
-android.app.job.JobServiceEngine$JobInterface
-android.app.job.JobWorkItem
-android.app.trust.IStrongAuthTracker
-android.app.trust.IStrongAuthTracker$Stub
-android.app.trust.IStrongAuthTracker$Stub$Proxy
-android.app.trust.ITrustListener
-android.app.trust.ITrustListener$Stub
-android.app.trust.ITrustListener$Stub$Proxy
-android.app.trust.ITrustManager
-android.app.trust.ITrustManager$Stub
-android.app.trust.ITrustManager$Stub$Proxy
-android.app.trust.TrustManager
-android.app.trust.TrustManager$1
-android.app.trust.TrustManager$2
-android.app.trust.TrustManager$TrustListener
-android.app.usage.CacheQuotaHint
-android.app.usage.CacheQuotaHint$1
-android.app.usage.CacheQuotaHint$Builder
-android.app.usage.ConfigurationStats
-android.app.usage.ConfigurationStats$1
-android.app.usage.ExternalStorageStats
-android.app.usage.ICacheQuotaService
-android.app.usage.ICacheQuotaService$Stub
-android.app.usage.ICacheQuotaService$Stub$Proxy
-android.app.usage.IStorageStatsManager
-android.app.usage.IStorageStatsManager$Stub
-android.app.usage.IUsageStatsManager
-android.app.usage.IUsageStatsManager$Stub
-android.app.usage.IUsageStatsManager$Stub$Proxy
-android.app.usage.NetworkStatsManager
-android.app.usage.StorageStats
-android.app.usage.StorageStatsManager
-android.app.usage.TimeSparseArray
-android.app.usage.UsageEvents
-android.app.usage.UsageEvents$1
-android.app.usage.UsageEvents$Event
-android.app.usage.UsageStats
-android.app.usage.UsageStats$1
-android.app.usage.UsageStatsManager
-android.app.usage.UsageStatsManagerInternal
-android.app.usage.UsageStatsManagerInternal$AppIdleStateChangeListener
-android.appwidget.AppWidgetHost
-android.appwidget.AppWidgetHost$Callbacks
-android.appwidget.AppWidgetHost$UpdateHandler
-android.appwidget.AppWidgetHostView
-android.appwidget.AppWidgetHostView$1
-android.appwidget.AppWidgetHostView$ParcelableSparseArray
-android.appwidget.AppWidgetHostView$ParcelableSparseArray$1
-android.appwidget.AppWidgetManager
-android.appwidget.AppWidgetProvider
-android.appwidget.AppWidgetProviderInfo
-android.appwidget.AppWidgetProviderInfo$1
-android.appwidget.PendingHostUpdate
-android.appwidget.PendingHostUpdate$1
-android.bluetooth.BluetoothA2dp
-android.bluetooth.BluetoothA2dp$1
-android.bluetooth.BluetoothA2dp$2
-android.bluetooth.BluetoothActivityEnergyInfo
-android.bluetooth.BluetoothAdapter
-android.bluetooth.BluetoothAdapter$1
-android.bluetooth.BluetoothAdapter$BluetoothStateChangeCallback
-android.bluetooth.BluetoothCodecConfig
-android.bluetooth.BluetoothCodecConfig$1
-android.bluetooth.BluetoothCodecStatus
-android.bluetooth.BluetoothDevice
-android.bluetooth.BluetoothDevice$1
-android.bluetooth.BluetoothDevice$2
-android.bluetooth.BluetoothGatt
-android.bluetooth.BluetoothGattCallback
-android.bluetooth.BluetoothGattCharacteristic
-android.bluetooth.BluetoothGattDescriptor
-android.bluetooth.BluetoothGattService
-android.bluetooth.BluetoothHeadset
-android.bluetooth.BluetoothHeadset$1
-android.bluetooth.BluetoothHeadset$2
-android.bluetooth.BluetoothHeadset$3
-android.bluetooth.BluetoothHealthAppConfiguration
-android.bluetooth.BluetoothInputDevice
-android.bluetooth.BluetoothInputDevice$1
-android.bluetooth.BluetoothInputDevice$2
-android.bluetooth.BluetoothInputStream
-android.bluetooth.BluetoothManager
-android.bluetooth.BluetoothMap
-android.bluetooth.BluetoothMap$1
-android.bluetooth.BluetoothMap$2
-android.bluetooth.BluetoothOutputStream
-android.bluetooth.BluetoothPan
-android.bluetooth.BluetoothPan$1
-android.bluetooth.BluetoothPan$2
-android.bluetooth.BluetoothPbap
-android.bluetooth.BluetoothPbap$1
-android.bluetooth.BluetoothPbap$2
-android.bluetooth.BluetoothPbap$ServiceListener
-android.bluetooth.BluetoothProfile
-android.bluetooth.BluetoothProfile$ServiceListener
-android.bluetooth.BluetoothServerSocket
-android.bluetooth.BluetoothSocket
-android.bluetooth.BluetoothSocket$SocketState
-android.bluetooth.BluetoothUuid
-android.bluetooth.IBluetooth
-android.bluetooth.IBluetooth$Stub
-android.bluetooth.IBluetooth$Stub$Proxy
-android.bluetooth.IBluetoothA2dp
-android.bluetooth.IBluetoothA2dp$Stub
-android.bluetooth.IBluetoothA2dp$Stub$Proxy
-android.bluetooth.IBluetoothCallback
-android.bluetooth.IBluetoothCallback$Stub
-android.bluetooth.IBluetoothCallback$Stub$Proxy
-android.bluetooth.IBluetoothGatt
-android.bluetooth.IBluetoothGatt$Stub
-android.bluetooth.IBluetoothGatt$Stub$Proxy
-android.bluetooth.IBluetoothGattCallback
-android.bluetooth.IBluetoothGattServerCallback
-android.bluetooth.IBluetoothHeadset
-android.bluetooth.IBluetoothHeadset$Stub
-android.bluetooth.IBluetoothHeadset$Stub$Proxy
-android.bluetooth.IBluetoothHeadsetPhone
-android.bluetooth.IBluetoothHeadsetPhone$Stub
-android.bluetooth.IBluetoothHeadsetPhone$Stub$Proxy
-android.bluetooth.IBluetoothHealth
-android.bluetooth.IBluetoothHealth$Stub
-android.bluetooth.IBluetoothHealthCallback
-android.bluetooth.IBluetoothInputDevice
-android.bluetooth.IBluetoothInputDevice$Stub
-android.bluetooth.IBluetoothInputDevice$Stub$Proxy
-android.bluetooth.IBluetoothManager
-android.bluetooth.IBluetoothManager$Stub
-android.bluetooth.IBluetoothManager$Stub$Proxy
-android.bluetooth.IBluetoothManagerCallback
-android.bluetooth.IBluetoothManagerCallback$Stub
-android.bluetooth.IBluetoothManagerCallback$Stub$Proxy
-android.bluetooth.IBluetoothMap
-android.bluetooth.IBluetoothMap$Stub
-android.bluetooth.IBluetoothMap$Stub$Proxy
-android.bluetooth.IBluetoothPan
-android.bluetooth.IBluetoothPan$Stub
-android.bluetooth.IBluetoothPan$Stub$Proxy
-android.bluetooth.IBluetoothPbap
-android.bluetooth.IBluetoothPbap$Stub
-android.bluetooth.IBluetoothPbap$Stub$Proxy
-android.bluetooth.IBluetoothProfileServiceConnection
-android.bluetooth.IBluetoothProfileServiceConnection$Stub
-android.bluetooth.IBluetoothProfileServiceConnection$Stub$Proxy
-android.bluetooth.IBluetoothSap
-android.bluetooth.IBluetoothSap$Stub
-android.bluetooth.IBluetoothStateChangeCallback
-android.bluetooth.IBluetoothStateChangeCallback$Stub
-android.bluetooth.IBluetoothStateChangeCallback$Stub$Proxy
-android.bluetooth.OobData
-android.bluetooth.UidTraffic
-android.bluetooth.UidTraffic$1
-android.bluetooth.le.AdvertiseData
-android.bluetooth.le.AdvertisingSetParameters
-android.bluetooth.le.BluetoothLeAdvertiser
-android.bluetooth.le.BluetoothLeScanner
-android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper
-android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper$1
-android.bluetooth.le.BluetoothLeUtils
-android.bluetooth.le.IAdvertisingSetCallback
-android.bluetooth.le.IPeriodicAdvertisingCallback
-android.bluetooth.le.IScannerCallback
-android.bluetooth.le.IScannerCallback$Stub
-android.bluetooth.le.IScannerCallback$Stub$Proxy
-android.bluetooth.le.PeriodicAdvertisingParameters
-android.bluetooth.le.ScanCallback
-android.bluetooth.le.ScanFilter
-android.bluetooth.le.ScanFilter$1
-android.bluetooth.le.ScanFilter$Builder
-android.bluetooth.le.ScanRecord
-android.bluetooth.le.ScanResult
-android.bluetooth.le.ScanResult$1
-android.bluetooth.le.ScanSettings
-android.bluetooth.le.ScanSettings$1
-android.bluetooth.le.ScanSettings$Builder
-android.companion.AssociationRequest
-android.companion.CompanionDeviceManager
-android.companion.ICompanionDeviceManager
-android.companion.ICompanionDeviceManager$Stub
-android.companion.IFindDeviceCallback
-android.content.AbstractThreadedSyncAdapter
-android.content.AbstractThreadedSyncAdapter$ISyncAdapterImpl
-android.content.AbstractThreadedSyncAdapter$SyncThread
-android.content.ActivityNotFoundException
-android.content.AsyncQueryHandler
-android.content.AsyncQueryHandler$WorkerArgs
-android.content.AsyncQueryHandler$WorkerHandler
-android.content.AsyncTaskLoader
-android.content.AsyncTaskLoader$LoadTask
-android.content.BroadcastReceiver
-android.content.BroadcastReceiver$PendingResult
-android.content.BroadcastReceiver$PendingResult$1
-android.content.ClipData
-android.content.ClipData$1
-android.content.ClipData$Item
-android.content.ClipDescription
-android.content.ClipDescription$1
-android.content.ClipboardManager
-android.content.ClipboardManager$1
-android.content.ClipboardManager$2
-android.content.ClipboardManager$OnPrimaryClipChangedListener
-android.content.ComponentCallbacks
-android.content.ComponentCallbacks2
-android.content.ComponentName
-android.content.ComponentName$1
-android.content.ContentProvider
-android.content.ContentProvider$PipeDataWriter
-android.content.ContentProvider$Transport
-android.content.ContentProviderClient
-android.content.ContentProviderClient$CursorWrapperInner
-android.content.ContentProviderNative
-android.content.ContentProviderOperation
-android.content.ContentProviderOperation$1
-android.content.ContentProviderOperation$Builder
-android.content.ContentProviderProxy
-android.content.ContentProviderResult
-android.content.ContentProviderResult$1
-android.content.ContentQueryMap
-android.content.ContentResolver
-android.content.ContentResolver$1
-android.content.ContentResolver$CursorWrapperInner
-android.content.ContentResolver$ParcelFileDescriptorInner
-android.content.ContentUris
-android.content.ContentValues
-android.content.ContentValues$1
-android.content.Context
-android.content.ContextWrapper
-android.content.CursorLoader
-android.content.DialogInterface
-android.content.DialogInterface$OnCancelListener
-android.content.DialogInterface$OnClickListener
-android.content.DialogInterface$OnDismissListener
-android.content.DialogInterface$OnKeyListener
-android.content.DialogInterface$OnMultiChoiceClickListener
-android.content.DialogInterface$OnShowListener
-android.content.IClipboard
-android.content.IClipboard$Stub
-android.content.IClipboard$Stub$Proxy
-android.content.IContentProvider
-android.content.IContentService
-android.content.IContentService$Stub
-android.content.IContentService$Stub$Proxy
-android.content.IIntentReceiver
-android.content.IIntentReceiver$Stub
-android.content.IIntentReceiver$Stub$Proxy
-android.content.IIntentSender
-android.content.IIntentSender$Stub
-android.content.IIntentSender$Stub$Proxy
-android.content.IOnPrimaryClipChangedListener
-android.content.IOnPrimaryClipChangedListener$Stub
-android.content.IRestrictionsManager
-android.content.IRestrictionsManager$Stub
-android.content.IRestrictionsManager$Stub$Proxy
-android.content.ISyncAdapter
-android.content.ISyncAdapter$Stub
-android.content.ISyncAdapter$Stub$Proxy
-android.content.ISyncContext
-android.content.ISyncContext$Stub
-android.content.ISyncContext$Stub$Proxy
-android.content.ISyncStatusObserver
-android.content.ISyncStatusObserver$Stub
-android.content.ISyncStatusObserver$Stub$Proxy
-android.content.Intent
-android.content.Intent$1
-android.content.Intent$FilterComparison
-android.content.Intent$ShortcutIconResource
-android.content.Intent$ShortcutIconResource$1
-android.content.IntentFilter
-android.content.IntentFilter$1
-android.content.IntentFilter$AuthorityEntry
-android.content.IntentFilter$MalformedMimeTypeException
-android.content.IntentSender
-android.content.IntentSender$1
-android.content.IntentSender$SendIntentException
-android.content.Loader
-android.content.Loader$ForceLoadContentObserver
-android.content.Loader$OnLoadCanceledListener
-android.content.Loader$OnLoadCompleteListener
-android.content.OperationApplicationException
-android.content.PeriodicSync
-android.content.PeriodicSync$1
-android.content.ReceiverCallNotAllowedException
-android.content.RestrictionEntry
-android.content.RestrictionEntry$1
-android.content.RestrictionsManager
-android.content.SearchRecentSuggestionsProvider
-android.content.SearchRecentSuggestionsProvider$DatabaseHelper
-android.content.ServiceConnection
-android.content.SharedPreferences
-android.content.SharedPreferences$Editor
-android.content.SharedPreferences$OnSharedPreferenceChangeListener
-android.content.SyncAdapterType
-android.content.SyncAdapterType$1
-android.content.SyncAdaptersCache
-android.content.SyncAdaptersCache$MySerializer
-android.content.SyncContext
-android.content.SyncInfo
-android.content.SyncInfo$1
-android.content.SyncRequest
-android.content.SyncRequest$1
-android.content.SyncRequest$Builder
-android.content.SyncResult
-android.content.SyncResult$1
-android.content.SyncStats
-android.content.SyncStats$1
-android.content.SyncStatusInfo
-android.content.SyncStatusInfo$1
-android.content.SyncStatusObserver
-android.content.UndoManager
-android.content.UndoManager$UndoState
-android.content.UndoOperation
-android.content.UndoOwner
-android.content.UriMatcher
-android.content.om.IOverlayManager
-android.content.om.IOverlayManager$Stub
-android.content.om.OverlayInfo
-android.content.pm.ActivityInfo
-android.content.pm.ActivityInfo$1
-android.content.pm.ActivityInfo$WindowLayout
-android.content.pm.ApplicationInfo
-android.content.pm.ApplicationInfo$1
-android.content.pm.AuxiliaryResolveInfo
-android.content.pm.BaseParceledListSlice
-android.content.pm.BaseParceledListSlice$1
-android.content.pm.ChangedPackages
-android.content.pm.ComponentInfo
-android.content.pm.ConfigurationInfo
-android.content.pm.ConfigurationInfo$1
-android.content.pm.FallbackCategoryProvider
-android.content.pm.FeatureGroupInfo
-android.content.pm.FeatureGroupInfo$1
-android.content.pm.FeatureInfo
-android.content.pm.FeatureInfo$1
-android.content.pm.ILauncherApps
-android.content.pm.ILauncherApps$Stub
-android.content.pm.ILauncherApps$Stub$Proxy
-android.content.pm.IOnAppsChangedListener
-android.content.pm.IOnAppsChangedListener$Stub
-android.content.pm.IOnAppsChangedListener$Stub$Proxy
-android.content.pm.IOnPermissionsChangeListener
-android.content.pm.IOnPermissionsChangeListener$Stub
-android.content.pm.IOnPermissionsChangeListener$Stub$Proxy
-android.content.pm.IOtaDexopt
-android.content.pm.IOtaDexopt$Stub
-android.content.pm.IPackageDataObserver
-android.content.pm.IPackageDataObserver$Stub
-android.content.pm.IPackageDataObserver$Stub$Proxy
-android.content.pm.IPackageDeleteObserver
-android.content.pm.IPackageDeleteObserver2
-android.content.pm.IPackageInstallObserver
-android.content.pm.IPackageInstallObserver2
-android.content.pm.IPackageInstallObserver2$Stub
-android.content.pm.IPackageInstaller
-android.content.pm.IPackageInstaller$Stub
-android.content.pm.IPackageInstaller$Stub$Proxy
-android.content.pm.IPackageInstallerCallback
-android.content.pm.IPackageInstallerCallback$Stub
-android.content.pm.IPackageInstallerCallback$Stub$Proxy
-android.content.pm.IPackageInstallerSession
-android.content.pm.IPackageInstallerSession$Stub
-android.content.pm.IPackageInstallerSession$Stub$Proxy
-android.content.pm.IPackageManager
-android.content.pm.IPackageManager$Stub
-android.content.pm.IPackageManager$Stub$Proxy
-android.content.pm.IPackageMoveObserver
-android.content.pm.IPackageMoveObserver$Stub
-android.content.pm.IPackageMoveObserver$Stub$Proxy
-android.content.pm.IPackageStatsObserver
-android.content.pm.IPackageStatsObserver$Stub
-android.content.pm.IShortcutService
-android.content.pm.IShortcutService$Stub
-android.content.pm.IShortcutService$Stub$Proxy
-android.content.pm.InstantAppRequest
-android.content.pm.InstantAppResolveInfo$InstantAppDigest
-android.content.pm.InstantAppResolveInfo$InstantAppDigest$1
-android.content.pm.InstrumentationInfo
-android.content.pm.InstrumentationInfo$1
-android.content.pm.IntentFilterVerificationInfo
-android.content.pm.IntentFilterVerificationInfo$1
-android.content.pm.KeySet
-android.content.pm.LauncherActivityInfo
-android.content.pm.LauncherApps
-android.content.pm.LauncherApps$1
-android.content.pm.LauncherApps$Callback
-android.content.pm.LauncherApps$CallbackMessageHandler
-android.content.pm.LauncherApps$CallbackMessageHandler$CallbackInfo
-android.content.pm.LauncherApps$ShortcutQuery
-android.content.pm.PackageCleanItem
-android.content.pm.PackageInfo
-android.content.pm.PackageInfo$1
-android.content.pm.PackageInfoLite
-android.content.pm.PackageInfoLite$1
-android.content.pm.PackageInstaller
-android.content.pm.PackageInstaller$Session
-android.content.pm.PackageInstaller$SessionCallback
-android.content.pm.PackageInstaller$SessionCallbackDelegate
-android.content.pm.PackageInstaller$SessionInfo
-android.content.pm.PackageInstaller$SessionInfo$1
-android.content.pm.PackageInstaller$SessionParams
-android.content.pm.PackageInstaller$SessionParams$1
-android.content.pm.PackageItemInfo
-android.content.pm.PackageManager
-android.content.pm.PackageManager$MoveCallback
-android.content.pm.PackageManager$NameNotFoundException
-android.content.pm.PackageManager$OnPermissionsChangedListener
-android.content.pm.PackageManagerInternal
-android.content.pm.PackageManagerInternal$ExternalSourcesPolicy
-android.content.pm.PackageManagerInternal$PackagesProvider
-android.content.pm.PackageManagerInternal$SyncAdapterPackagesProvider
-android.content.pm.PackageParser
-android.content.pm.PackageParser$Activity
-android.content.pm.PackageParser$Activity$1
-android.content.pm.PackageParser$ActivityIntentInfo
-android.content.pm.PackageParser$ApkLite
-android.content.pm.PackageParser$Callback
-android.content.pm.PackageParser$CallbackImpl
-android.content.pm.PackageParser$Component
-android.content.pm.PackageParser$IntentInfo
-android.content.pm.PackageParser$NewPermissionInfo
-android.content.pm.PackageParser$Package
-android.content.pm.PackageParser$Package$1
-android.content.pm.PackageParser$PackageLite
-android.content.pm.PackageParser$PackageParserException
-android.content.pm.PackageParser$ParseComponentArgs
-android.content.pm.PackageParser$ParsePackageItemArgs
-android.content.pm.PackageParser$Permission
-android.content.pm.PackageParser$Permission$1
-android.content.pm.PackageParser$PermissionGroup
-android.content.pm.PackageParser$PermissionGroup$1
-android.content.pm.PackageParser$Provider
-android.content.pm.PackageParser$Provider$1
-android.content.pm.PackageParser$ProviderIntentInfo
-android.content.pm.PackageParser$Service
-android.content.pm.PackageParser$Service$1
-android.content.pm.PackageParser$ServiceIntentInfo
-android.content.pm.PackageParser$SplitNameComparator
-android.content.pm.PackageParser$SplitPermissionInfo
-android.content.pm.PackageStats
-android.content.pm.PackageUserState
-android.content.pm.ParceledListSlice
-android.content.pm.ParceledListSlice$1
-android.content.pm.PathPermission
-android.content.pm.PathPermission$1
-android.content.pm.PermissionGroupInfo
-android.content.pm.PermissionGroupInfo$1
-android.content.pm.PermissionInfo
-android.content.pm.PermissionInfo$1
-android.content.pm.ProviderInfo
-android.content.pm.ProviderInfo$1
-android.content.pm.RegisteredServicesCache
-android.content.pm.RegisteredServicesCache$1
-android.content.pm.RegisteredServicesCache$2
-android.content.pm.RegisteredServicesCache$3
-android.content.pm.RegisteredServicesCache$ServiceInfo
-android.content.pm.RegisteredServicesCache$UserServices
-android.content.pm.RegisteredServicesCacheListener
-android.content.pm.ResolveInfo
-android.content.pm.ResolveInfo$1
-android.content.pm.SELinuxUtil
-android.content.pm.ServiceInfo
-android.content.pm.ServiceInfo$1
-android.content.pm.SharedLibraryInfo
-android.content.pm.SharedLibraryInfo$1
-android.content.pm.ShortcutInfo
-android.content.pm.ShortcutInfo$1
-android.content.pm.ShortcutInfo$Builder
-android.content.pm.ShortcutManager
-android.content.pm.ShortcutServiceInternal
-android.content.pm.ShortcutServiceInternal$ShortcutChangeListener
-android.content.pm.Signature
-android.content.pm.Signature$1
-android.content.pm.StringParceledListSlice
-android.content.pm.StringParceledListSlice$1
-android.content.pm.UserInfo
-android.content.pm.UserInfo$1
-android.content.pm.VerifierDeviceIdentity
-android.content.pm.VerifierInfo
-android.content.pm.VersionedPackage
-android.content.pm.VersionedPackage$1
-android.content.pm.XmlSerializerAndParser
-android.content.pm.split.DefaultSplitAssetLoader
-android.content.pm.split.SplitAssetLoader
-android.content.pm.split.SplitDependencyLoader$IllegalDependencyException
-android.content.res.AssetFileDescriptor
-android.content.res.AssetFileDescriptor$1
-android.content.res.AssetFileDescriptor$AutoCloseInputStream
-android.content.res.AssetManager
-android.content.res.AssetManager$AssetInputStream
-android.content.res.ColorStateList
-android.content.res.ColorStateList$1
-android.content.res.ColorStateList$ColorStateListFactory
-android.content.res.CompatResources
-android.content.res.CompatibilityInfo
-android.content.res.CompatibilityInfo$1
-android.content.res.CompatibilityInfo$2
-android.content.res.ComplexColor
-android.content.res.Configuration
-android.content.res.Configuration$1
-android.content.res.ConfigurationBoundResourceCache
-android.content.res.ConstantState
-android.content.res.DrawableCache
-android.content.res.GradientColor
-android.content.res.ObbInfo
-android.content.res.ObbInfo$1
-android.content.res.ObbScanner
-android.content.res.Resources
-android.content.res.Resources$NotFoundException
-android.content.res.Resources$Theme
-android.content.res.Resources$ThemeKey
-android.content.res.ResourcesImpl
-android.content.res.ResourcesImpl$ThemeImpl
-android.content.res.ResourcesKey
-android.content.res.StringBlock
-android.content.res.StringBlock$StyleIDs
-android.content.res.ThemedResourceCache
-android.content.res.TypedArray
-android.content.res.XmlBlock
-android.content.res.XmlBlock$Parser
-android.content.res.XmlResourceParser
-android.database.AbstractCursor
-android.database.AbstractCursor$SelfContentObserver
-android.database.AbstractWindowedCursor
-android.database.BulkCursorDescriptor
-android.database.BulkCursorDescriptor$1
-android.database.BulkCursorNative
-android.database.BulkCursorProxy
-android.database.BulkCursorToCursorAdaptor
-android.database.CharArrayBuffer
-android.database.ContentObservable
-android.database.ContentObserver
-android.database.ContentObserver$NotificationRunnable
-android.database.ContentObserver$Transport
-android.database.CrossProcessCursor
-android.database.CrossProcessCursorWrapper
-android.database.Cursor
-android.database.CursorIndexOutOfBoundsException
-android.database.CursorToBulkCursorAdaptor
-android.database.CursorToBulkCursorAdaptor$ContentObserverProxy
-android.database.CursorWindow
-android.database.CursorWindow$1
-android.database.CursorWrapper
-android.database.DataSetObservable
-android.database.DataSetObserver
-android.database.DatabaseErrorHandler
-android.database.DatabaseUtils
-android.database.DatabaseUtils$InsertHelper
-android.database.DefaultDatabaseErrorHandler
-android.database.IBulkCursor
-android.database.IContentObserver
-android.database.IContentObserver$Stub
-android.database.IContentObserver$Stub$Proxy
-android.database.MatrixCursor
-android.database.MatrixCursor$RowBuilder
-android.database.MergeCursor
-android.database.MergeCursor$1
-android.database.Observable
-android.database.SQLException
-android.database.StaleDataException
-android.database.sqlite.DatabaseObjectNotClosedException
-android.database.sqlite.SQLiteAbortException
-android.database.sqlite.SQLiteCantOpenDatabaseException
-android.database.sqlite.SQLiteClosable
-android.database.sqlite.SQLiteConnection
-android.database.sqlite.SQLiteConnection$Operation
-android.database.sqlite.SQLiteConnection$OperationLog
-android.database.sqlite.SQLiteConnection$PreparedStatement
-android.database.sqlite.SQLiteConnection$PreparedStatementCache
-android.database.sqlite.SQLiteConnectionPool
-android.database.sqlite.SQLiteConnectionPool$AcquiredConnectionStatus
-android.database.sqlite.SQLiteConnectionPool$ConnectionWaiter
-android.database.sqlite.SQLiteConstraintException
-android.database.sqlite.SQLiteCursor
-android.database.sqlite.SQLiteCursorDriver
-android.database.sqlite.SQLiteCustomFunction
-android.database.sqlite.SQLiteDatabase
-android.database.sqlite.SQLiteDatabase$1
-android.database.sqlite.SQLiteDatabase$2
-android.database.sqlite.SQLiteDatabase$CursorFactory
-android.database.sqlite.SQLiteDatabase$CustomFunction
-android.database.sqlite.SQLiteDatabaseConfiguration
-android.database.sqlite.SQLiteDatabaseCorruptException
-android.database.sqlite.SQLiteDatabaseLockedException
-android.database.sqlite.SQLiteDebug
-android.database.sqlite.SQLiteDebug$PagerStats
-android.database.sqlite.SQLiteDirectCursorDriver
-android.database.sqlite.SQLiteDiskIOException
-android.database.sqlite.SQLiteDoneException
-android.database.sqlite.SQLiteException
-android.database.sqlite.SQLiteFullException
-android.database.sqlite.SQLiteGlobal
-android.database.sqlite.SQLiteOpenHelper
-android.database.sqlite.SQLiteProgram
-android.database.sqlite.SQLiteQuery
-android.database.sqlite.SQLiteQueryBuilder
-android.database.sqlite.SQLiteReadOnlyDatabaseException
-android.database.sqlite.SQLiteSession
-android.database.sqlite.SQLiteSession$Transaction
-android.database.sqlite.SQLiteStatement
-android.database.sqlite.SQLiteStatementInfo
-android.database.sqlite.SQLiteTransactionListener
-android.database.sqlite.SqliteWrapper
-android.ddm.DdmHandleAppName
-android.ddm.DdmHandleExit
-android.ddm.DdmHandleHeap
-android.ddm.DdmHandleHello
-android.ddm.DdmHandleNativeHeap
-android.ddm.DdmHandleProfiling
-android.ddm.DdmHandleThread
-android.ddm.DdmHandleViewDebug
-android.ddm.DdmRegister
-android.drm.DrmManagerClient$OnErrorListener
-android.drm.DrmManagerClient$OnEventListener
-android.drm.DrmManagerClient$OnInfoListener
-android.drm.DrmOutputStream
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$1
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$2
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$4
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$6
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$7
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$8
-android.graphics.BaseCanvas
-android.graphics.Bitmap
-android.graphics.Bitmap$1
-android.graphics.Bitmap$CompressFormat
-android.graphics.Bitmap$Config
-android.graphics.BitmapFactory
-android.graphics.BitmapFactory$Options
-android.graphics.BitmapRegionDecoder
-android.graphics.BitmapShader
-android.graphics.BlurMaskFilter
-android.graphics.BlurMaskFilter$Blur
-android.graphics.Camera
-android.graphics.Canvas
-android.graphics.Canvas$EdgeType
-android.graphics.Canvas$NoImagePreloadHolder
-android.graphics.CanvasProperty
-android.graphics.Color
-android.graphics.ColorFilter
-android.graphics.ColorMatrix
-android.graphics.ColorMatrixColorFilter
-android.graphics.ColorSpace
-android.graphics.ColorSpace$Adaptation
-android.graphics.ColorSpace$Lab
-android.graphics.ColorSpace$Model
-android.graphics.ColorSpace$Named
-android.graphics.ColorSpace$Rgb
-android.graphics.ColorSpace$Rgb$TransferParameters
-android.graphics.ColorSpace$Xyz
-android.graphics.ComposePathEffect
-android.graphics.ComposeShader
-android.graphics.CornerPathEffect
-android.graphics.DashPathEffect
-android.graphics.DiscretePathEffect
-android.graphics.DrawFilter
-android.graphics.EmbossMaskFilter
-android.graphics.FontFamily
-android.graphics.FontListParser
-android.graphics.GraphicBuffer
-android.graphics.GraphicBuffer$1
-android.graphics.ImageFormat
-android.graphics.Insets
-android.graphics.Interpolator
-android.graphics.Interpolator$Result
-android.graphics.LightingColorFilter
-android.graphics.LinearGradient
-android.graphics.MaskFilter
-android.graphics.Matrix
-android.graphics.Matrix$1
-android.graphics.Matrix$NoImagePreloadHolder
-android.graphics.Matrix$ScaleToFit
-android.graphics.Movie
-android.graphics.NinePatch
-android.graphics.NinePatch$InsetStruct
-android.graphics.Outline
-android.graphics.Paint
-android.graphics.Paint$Align
-android.graphics.Paint$Cap
-android.graphics.Paint$FontMetrics
-android.graphics.Paint$FontMetricsInt
-android.graphics.Paint$Join
-android.graphics.Paint$NoImagePreloadHolder
-android.graphics.Paint$Style
-android.graphics.PaintFlagsDrawFilter
-android.graphics.Path
-android.graphics.Path$Direction
-android.graphics.Path$FillType
-android.graphics.Path$Op
-android.graphics.PathDashPathEffect
-android.graphics.PathEffect
-android.graphics.PathMeasure
-android.graphics.Picture
-android.graphics.Picture$RecordingCanvas
-android.graphics.PixelFormat
-android.graphics.Point
-android.graphics.Point$1
-android.graphics.PointF
-android.graphics.PointF$1
-android.graphics.PorterDuff
-android.graphics.PorterDuff$Mode
-android.graphics.PorterDuffColorFilter
-android.graphics.PorterDuffXfermode
-android.graphics.RadialGradient
-android.graphics.Rect
-android.graphics.Rect$1
-android.graphics.Rect$UnflattenHelper
-android.graphics.RectF
-android.graphics.RectF$1
-android.graphics.Region
-android.graphics.Region$1
-android.graphics.Region$Op
-android.graphics.RegionIterator
-android.graphics.Shader
-android.graphics.Shader$TileMode
-android.graphics.SumPathEffect
-android.graphics.SurfaceTexture
-android.graphics.SurfaceTexture$1
-android.graphics.SurfaceTexture$OnFrameAvailableListener
-android.graphics.SweepGradient
-android.graphics.TableMaskFilter
-android.graphics.TemporaryBuffer
-android.graphics.Typeface
-android.graphics.Typeface$Builder
-android.graphics.Xfermode
-android.graphics.YuvImage
-android.graphics.drawable.AdaptiveIconDrawable
-android.graphics.drawable.AdaptiveIconDrawable$ChildDrawable
-android.graphics.drawable.AdaptiveIconDrawable$LayerState
-android.graphics.drawable.Animatable
-android.graphics.drawable.Animatable2
-android.graphics.drawable.Animatable2$AnimationCallback
-android.graphics.drawable.AnimatedStateListDrawable
-android.graphics.drawable.AnimatedStateListDrawable$AnimatedStateListState
-android.graphics.drawable.AnimatedStateListDrawable$AnimatedVectorDrawableTransition
-android.graphics.drawable.AnimatedStateListDrawable$AnimationDrawableTransition
-android.graphics.drawable.AnimatedStateListDrawable$FrameInterpolator
-android.graphics.drawable.AnimatedStateListDrawable$Transition
-android.graphics.drawable.AnimatedVectorDrawable
-android.graphics.drawable.AnimatedVectorDrawable$1
-android.graphics.drawable.AnimatedVectorDrawable$2
-android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState
-android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator
-android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimator
-android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimatorRT
-android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimatorUI
-android.graphics.drawable.AnimationDrawable
-android.graphics.drawable.AnimationDrawable$AnimationState
-android.graphics.drawable.BitmapDrawable
-android.graphics.drawable.BitmapDrawable$BitmapState
-android.graphics.drawable.ClipDrawable
-android.graphics.drawable.ClipDrawable$ClipState
-android.graphics.drawable.ColorDrawable
-android.graphics.drawable.ColorDrawable$ColorState
-android.graphics.drawable.Drawable
-android.graphics.drawable.Drawable$Callback
-android.graphics.drawable.Drawable$ConstantState
-android.graphics.drawable.DrawableContainer
-android.graphics.drawable.DrawableContainer$1
-android.graphics.drawable.DrawableContainer$BlockInvalidateCallback
-android.graphics.drawable.DrawableContainer$DrawableContainerState
-android.graphics.drawable.DrawableInflater
-android.graphics.drawable.DrawableWrapper
-android.graphics.drawable.DrawableWrapper$DrawableWrapperState
-android.graphics.drawable.GradientDrawable
-android.graphics.drawable.GradientDrawable$GradientState
-android.graphics.drawable.GradientDrawable$Orientation
-android.graphics.drawable.Icon
-android.graphics.drawable.Icon$1
-android.graphics.drawable.InsetDrawable
-android.graphics.drawable.InsetDrawable$InsetState
-android.graphics.drawable.InsetDrawable$InsetValue
-android.graphics.drawable.LayerDrawable
-android.graphics.drawable.LayerDrawable$ChildDrawable
-android.graphics.drawable.LayerDrawable$LayerState
-android.graphics.drawable.NinePatchDrawable
-android.graphics.drawable.NinePatchDrawable$NinePatchState
-android.graphics.drawable.PaintDrawable
-android.graphics.drawable.PictureDrawable
-android.graphics.drawable.RippleBackground
-android.graphics.drawable.RippleBackground$1
-android.graphics.drawable.RippleBackground$BackgroundProperty
-android.graphics.drawable.RippleComponent
-android.graphics.drawable.RippleComponent$RenderNodeAnimatorSet
-android.graphics.drawable.RippleDrawable
-android.graphics.drawable.RippleDrawable$RippleState
-android.graphics.drawable.RippleForeground
-android.graphics.drawable.RippleForeground$1
-android.graphics.drawable.RippleForeground$2
-android.graphics.drawable.RippleForeground$3
-android.graphics.drawable.RippleForeground$4
-android.graphics.drawable.RippleForeground$LogDecelerateInterpolator
-android.graphics.drawable.RotateDrawable
-android.graphics.drawable.RotateDrawable$RotateState
-android.graphics.drawable.ScaleDrawable
-android.graphics.drawable.ScaleDrawable$ScaleState
-android.graphics.drawable.ShapeDrawable
-android.graphics.drawable.ShapeDrawable$ShaderFactory
-android.graphics.drawable.ShapeDrawable$ShapeState
-android.graphics.drawable.StateListDrawable
-android.graphics.drawable.StateListDrawable$StateListState
-android.graphics.drawable.TransitionDrawable
-android.graphics.drawable.TransitionDrawable$TransitionState
-android.graphics.drawable.VectorDrawable
-android.graphics.drawable.VectorDrawable$VClipPath
-android.graphics.drawable.VectorDrawable$VFullPath
-android.graphics.drawable.VectorDrawable$VFullPath$1
-android.graphics.drawable.VectorDrawable$VFullPath$10
-android.graphics.drawable.VectorDrawable$VFullPath$2
-android.graphics.drawable.VectorDrawable$VFullPath$3
-android.graphics.drawable.VectorDrawable$VFullPath$4
-android.graphics.drawable.VectorDrawable$VFullPath$5
-android.graphics.drawable.VectorDrawable$VFullPath$6
-android.graphics.drawable.VectorDrawable$VFullPath$7
-android.graphics.drawable.VectorDrawable$VFullPath$8
-android.graphics.drawable.VectorDrawable$VFullPath$9
-android.graphics.drawable.VectorDrawable$VGroup
-android.graphics.drawable.VectorDrawable$VGroup$1
-android.graphics.drawable.VectorDrawable$VGroup$2
-android.graphics.drawable.VectorDrawable$VGroup$3
-android.graphics.drawable.VectorDrawable$VGroup$4
-android.graphics.drawable.VectorDrawable$VGroup$5
-android.graphics.drawable.VectorDrawable$VGroup$6
-android.graphics.drawable.VectorDrawable$VGroup$7
-android.graphics.drawable.VectorDrawable$VGroup$8
-android.graphics.drawable.VectorDrawable$VGroup$9
-android.graphics.drawable.VectorDrawable$VObject
-android.graphics.drawable.VectorDrawable$VPath
-android.graphics.drawable.VectorDrawable$VPath$1
-android.graphics.drawable.VectorDrawable$VectorDrawableState
-android.graphics.drawable.VectorDrawable$VectorDrawableState$1
-android.graphics.drawable.shapes.OvalShape
-android.graphics.drawable.shapes.RectShape
-android.graphics.drawable.shapes.RoundRectShape
-android.graphics.drawable.shapes.Shape
-android.graphics.fonts.FontVariationAxis
-android.graphics.pdf.PdfDocument
-android.graphics.pdf.PdfEditor
-android.graphics.pdf.PdfRenderer
-android.hardware.Camera
-android.hardware.Camera$CameraInfo
-android.hardware.Camera$ErrorCallback
-android.hardware.Camera$Face
-android.hardware.CameraStatus
-android.hardware.CameraStatus$1
-android.hardware.ConsumerIrManager
-android.hardware.GeomagneticField
-android.hardware.GeomagneticField$LegendreTable
-android.hardware.HardwareBuffer
-android.hardware.HardwareBuffer$1
-android.hardware.ICameraService
-android.hardware.ICameraService$Stub
-android.hardware.ICameraService$Stub$Proxy
-android.hardware.ICameraServiceListener
-android.hardware.ICameraServiceListener$Stub
-android.hardware.ICameraServiceProxy
-android.hardware.ICameraServiceProxy$Stub
-android.hardware.IConsumerIrService
-android.hardware.IConsumerIrService$Stub
-android.hardware.ISerialManager
-android.hardware.ISerialManager$Stub
-android.hardware.Sensor
-android.hardware.SensorAdditionalInfo
-android.hardware.SensorEvent
-android.hardware.SensorEventListener
-android.hardware.SensorManager
-android.hardware.SerialManager
-android.hardware.SerialPort
-android.hardware.SystemSensorManager
-android.hardware.SystemSensorManager$BaseEventQueue
-android.hardware.SystemSensorManager$SensorEventQueue
-android.hardware.SystemSensorManager$TriggerEventQueue
-android.hardware.TriggerEvent
-android.hardware.TriggerEventListener
-android.hardware.camera2.CameraAccessException
-android.hardware.camera2.CameraCaptureSession
-android.hardware.camera2.CameraCaptureSession$CaptureCallback
-android.hardware.camera2.CameraCaptureSession$StateCallback
-android.hardware.camera2.CameraCharacteristics
-android.hardware.camera2.CameraCharacteristics$1
-android.hardware.camera2.CameraCharacteristics$2
-android.hardware.camera2.CameraCharacteristics$3
-android.hardware.camera2.CameraCharacteristics$4
-android.hardware.camera2.CameraCharacteristics$5
-android.hardware.camera2.CameraCharacteristics$Key
-android.hardware.camera2.CameraDevice
-android.hardware.camera2.CameraDevice$StateCallback
-android.hardware.camera2.CameraManager
-android.hardware.camera2.CameraManager$AvailabilityCallback
-android.hardware.camera2.CameraManager$CameraManagerGlobal
-android.hardware.camera2.CameraManager$CameraManagerGlobal$1
-android.hardware.camera2.CameraManager$CameraManagerGlobal$2
-android.hardware.camera2.CameraManager$CameraManagerGlobal$3
-android.hardware.camera2.CameraManager$CameraManagerGlobal$4
-android.hardware.camera2.CameraManager$TorchCallback
-android.hardware.camera2.CameraMetadata
-android.hardware.camera2.CaptureFailure
-android.hardware.camera2.CaptureRequest
-android.hardware.camera2.CaptureRequest$1
-android.hardware.camera2.CaptureRequest$2
-android.hardware.camera2.CaptureRequest$Builder
-android.hardware.camera2.CaptureRequest$Key
-android.hardware.camera2.CaptureResult
-android.hardware.camera2.CaptureResult$1
-android.hardware.camera2.CaptureResult$2
-android.hardware.camera2.CaptureResult$3
-android.hardware.camera2.CaptureResult$Key
-android.hardware.camera2.DngCreator
-android.hardware.camera2.ICameraDeviceCallbacks
-android.hardware.camera2.ICameraDeviceCallbacks$Stub
-android.hardware.camera2.ICameraDeviceUser
-android.hardware.camera2.ICameraDeviceUser$Stub
-android.hardware.camera2.ICameraDeviceUser$Stub$Proxy
-android.hardware.camera2.TotalCaptureResult
-android.hardware.camera2.dispatch.ArgumentReplacingDispatcher
-android.hardware.camera2.dispatch.BroadcastDispatcher
-android.hardware.camera2.dispatch.Dispatchable
-android.hardware.camera2.dispatch.DuckTypingDispatcher
-android.hardware.camera2.dispatch.HandlerDispatcher
-android.hardware.camera2.dispatch.HandlerDispatcher$1
-android.hardware.camera2.dispatch.InvokeDispatcher
-android.hardware.camera2.dispatch.MethodNameInvoker
-android.hardware.camera2.impl.CallbackProxies$DeviceCaptureCallbackProxy
-android.hardware.camera2.impl.CallbackProxies$SessionStateCallbackProxy
-android.hardware.camera2.impl.CameraCaptureSessionCore
-android.hardware.camera2.impl.CameraCaptureSessionImpl
-android.hardware.camera2.impl.CameraCaptureSessionImpl$1
-android.hardware.camera2.impl.CameraCaptureSessionImpl$2
-android.hardware.camera2.impl.CameraCaptureSessionImpl$AbortDrainListener
-android.hardware.camera2.impl.CameraCaptureSessionImpl$IdleDrainListener
-android.hardware.camera2.impl.CameraCaptureSessionImpl$SequenceDrainListener
-android.hardware.camera2.impl.CameraDeviceImpl
-android.hardware.camera2.impl.CameraDeviceImpl$1
-android.hardware.camera2.impl.CameraDeviceImpl$10
-android.hardware.camera2.impl.CameraDeviceImpl$2
-android.hardware.camera2.impl.CameraDeviceImpl$3
-android.hardware.camera2.impl.CameraDeviceImpl$4
-android.hardware.camera2.impl.CameraDeviceImpl$5
-android.hardware.camera2.impl.CameraDeviceImpl$6
-android.hardware.camera2.impl.CameraDeviceImpl$7
-android.hardware.camera2.impl.CameraDeviceImpl$9
-android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks
-android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks$2
-android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks$3
-android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks$4
-android.hardware.camera2.impl.CameraDeviceImpl$CaptureCallback
-android.hardware.camera2.impl.CameraDeviceImpl$CaptureCallbackHolder
-android.hardware.camera2.impl.CameraDeviceImpl$FrameNumberTracker
-android.hardware.camera2.impl.CameraDeviceImpl$RequestLastFrameNumbersHolder
-android.hardware.camera2.impl.CameraDeviceImpl$StateCallbackKK
-android.hardware.camera2.impl.CameraMetadataNative
-android.hardware.camera2.impl.CameraMetadataNative$1
-android.hardware.camera2.impl.CameraMetadataNative$10
-android.hardware.camera2.impl.CameraMetadataNative$11
-android.hardware.camera2.impl.CameraMetadataNative$12
-android.hardware.camera2.impl.CameraMetadataNative$13
-android.hardware.camera2.impl.CameraMetadataNative$14
-android.hardware.camera2.impl.CameraMetadataNative$15
-android.hardware.camera2.impl.CameraMetadataNative$16
-android.hardware.camera2.impl.CameraMetadataNative$17
-android.hardware.camera2.impl.CameraMetadataNative$18
-android.hardware.camera2.impl.CameraMetadataNative$19
-android.hardware.camera2.impl.CameraMetadataNative$2
-android.hardware.camera2.impl.CameraMetadataNative$3
-android.hardware.camera2.impl.CameraMetadataNative$4
-android.hardware.camera2.impl.CameraMetadataNative$5
-android.hardware.camera2.impl.CameraMetadataNative$6
-android.hardware.camera2.impl.CameraMetadataNative$7
-android.hardware.camera2.impl.CameraMetadataNative$8
-android.hardware.camera2.impl.CameraMetadataNative$9
-android.hardware.camera2.impl.CameraMetadataNative$Key
-android.hardware.camera2.impl.CaptureResultExtras
-android.hardware.camera2.impl.CaptureResultExtras$1
-android.hardware.camera2.impl.GetCommand
-android.hardware.camera2.impl.ICameraDeviceUserWrapper
-android.hardware.camera2.impl.SetCommand
-android.hardware.camera2.legacy.LegacyCameraDevice
-android.hardware.camera2.legacy.LegacyExceptionUtils
-android.hardware.camera2.legacy.LegacyExceptionUtils$BufferQueueAbandonedException
-android.hardware.camera2.legacy.PerfMeasurement
-android.hardware.camera2.marshal.MarshalHelpers
-android.hardware.camera2.marshal.MarshalQueryable
-android.hardware.camera2.marshal.MarshalRegistry
-android.hardware.camera2.marshal.MarshalRegistry$MarshalToken
-android.hardware.camera2.marshal.Marshaler
-android.hardware.camera2.marshal.impl.MarshalQueryableArray
-android.hardware.camera2.marshal.impl.MarshalQueryableArray$MarshalerArray
-android.hardware.camera2.marshal.impl.MarshalQueryableBlackLevelPattern
-android.hardware.camera2.marshal.impl.MarshalQueryableBlackLevelPattern$MarshalerBlackLevelPattern
-android.hardware.camera2.marshal.impl.MarshalQueryableBoolean
-android.hardware.camera2.marshal.impl.MarshalQueryableBoolean$MarshalerBoolean
-android.hardware.camera2.marshal.impl.MarshalQueryableColorSpaceTransform
-android.hardware.camera2.marshal.impl.MarshalQueryableColorSpaceTransform$MarshalerColorSpaceTransform
-android.hardware.camera2.marshal.impl.MarshalQueryableEnum
-android.hardware.camera2.marshal.impl.MarshalQueryableHighSpeedVideoConfiguration
-android.hardware.camera2.marshal.impl.MarshalQueryableHighSpeedVideoConfiguration$MarshalerHighSpeedVideoConfiguration
-android.hardware.camera2.marshal.impl.MarshalQueryableMeteringRectangle
-android.hardware.camera2.marshal.impl.MarshalQueryableMeteringRectangle$MarshalerMeteringRectangle
-android.hardware.camera2.marshal.impl.MarshalQueryableNativeByteToInteger
-android.hardware.camera2.marshal.impl.MarshalQueryableNativeByteToInteger$MarshalerNativeByteToInteger
-android.hardware.camera2.marshal.impl.MarshalQueryablePair
-android.hardware.camera2.marshal.impl.MarshalQueryablePair$MarshalerPair
-android.hardware.camera2.marshal.impl.MarshalQueryableParcelable
-android.hardware.camera2.marshal.impl.MarshalQueryablePrimitive
-android.hardware.camera2.marshal.impl.MarshalQueryablePrimitive$MarshalerPrimitive
-android.hardware.camera2.marshal.impl.MarshalQueryableRange
-android.hardware.camera2.marshal.impl.MarshalQueryableRange$MarshalerRange
-android.hardware.camera2.marshal.impl.MarshalQueryableRect
-android.hardware.camera2.marshal.impl.MarshalQueryableRect$MarshalerRect
-android.hardware.camera2.marshal.impl.MarshalQueryableReprocessFormatsMap
-android.hardware.camera2.marshal.impl.MarshalQueryableReprocessFormatsMap$MarshalerReprocessFormatsMap
-android.hardware.camera2.marshal.impl.MarshalQueryableRggbChannelVector
-android.hardware.camera2.marshal.impl.MarshalQueryableRggbChannelVector$MarshalerRggbChannelVector
-android.hardware.camera2.marshal.impl.MarshalQueryableSize
-android.hardware.camera2.marshal.impl.MarshalQueryableSize$MarshalerSize
-android.hardware.camera2.marshal.impl.MarshalQueryableSizeF
-android.hardware.camera2.marshal.impl.MarshalQueryableStreamConfiguration
-android.hardware.camera2.marshal.impl.MarshalQueryableStreamConfiguration$MarshalerStreamConfiguration
-android.hardware.camera2.marshal.impl.MarshalQueryableStreamConfigurationDuration
-android.hardware.camera2.marshal.impl.MarshalQueryableStreamConfigurationDuration$MarshalerStreamConfigurationDuration
-android.hardware.camera2.marshal.impl.MarshalQueryableString
-android.hardware.camera2.params.BlackLevelPattern
-android.hardware.camera2.params.ColorSpaceTransform
-android.hardware.camera2.params.Face
-android.hardware.camera2.params.HighSpeedVideoConfiguration
-android.hardware.camera2.params.InputConfiguration
-android.hardware.camera2.params.LensShadingMap
-android.hardware.camera2.params.MeteringRectangle
-android.hardware.camera2.params.OutputConfiguration
-android.hardware.camera2.params.OutputConfiguration$1
-android.hardware.camera2.params.ReprocessFormatsMap
-android.hardware.camera2.params.RggbChannelVector
-android.hardware.camera2.params.StreamConfiguration
-android.hardware.camera2.params.StreamConfigurationDuration
-android.hardware.camera2.params.StreamConfigurationMap
-android.hardware.camera2.params.TonemapCurve
-android.hardware.camera2.utils.HashCodeHelpers
-android.hardware.camera2.utils.SubmitInfo
-android.hardware.camera2.utils.SubmitInfo$1
-android.hardware.camera2.utils.SurfaceUtils
-android.hardware.camera2.utils.TaskDrainer
-android.hardware.camera2.utils.TaskDrainer$1
-android.hardware.camera2.utils.TaskDrainer$DrainListener
-android.hardware.camera2.utils.TaskSingleDrainer
-android.hardware.camera2.utils.TypeReference
-android.hardware.camera2.utils.TypeReference$SpecializedBaseTypeReference
-android.hardware.camera2.utils.TypeReference$SpecializedTypeReference
-android.hardware.display.DisplayManager
-android.hardware.display.DisplayManager$DisplayListener
-android.hardware.display.DisplayManagerGlobal
-android.hardware.display.DisplayManagerGlobal$DisplayListenerDelegate
-android.hardware.display.DisplayManagerGlobal$DisplayManagerCallback
-android.hardware.display.DisplayManagerInternal
-android.hardware.display.DisplayManagerInternal$DisplayPowerCallbacks
-android.hardware.display.DisplayManagerInternal$DisplayPowerRequest
-android.hardware.display.DisplayManagerInternal$DisplayTransactionListener
-android.hardware.display.DisplayViewport
-android.hardware.display.IDisplayManager
-android.hardware.display.IDisplayManager$Stub
-android.hardware.display.IDisplayManager$Stub$Proxy
-android.hardware.display.IDisplayManagerCallback
-android.hardware.display.IDisplayManagerCallback$Stub
-android.hardware.display.IDisplayManagerCallback$Stub$Proxy
-android.hardware.display.IVirtualDisplayCallback
-android.hardware.display.WifiDisplay
-android.hardware.display.WifiDisplay$1
-android.hardware.display.WifiDisplaySessionInfo
-android.hardware.display.WifiDisplaySessionInfo$1
-android.hardware.display.WifiDisplayStatus
-android.hardware.display.WifiDisplayStatus$1
-android.hardware.fingerprint.Fingerprint
-android.hardware.fingerprint.Fingerprint$1
-android.hardware.fingerprint.FingerprintManager
-android.hardware.fingerprint.FingerprintManager$1
-android.hardware.fingerprint.FingerprintManager$2
-android.hardware.fingerprint.FingerprintManager$AuthenticationCallback
-android.hardware.fingerprint.FingerprintManager$AuthenticationResult
-android.hardware.fingerprint.FingerprintManager$LockoutResetCallback
-android.hardware.fingerprint.FingerprintManager$MyHandler
-android.hardware.fingerprint.IFingerprintClientActiveCallback
-android.hardware.fingerprint.IFingerprintService
-android.hardware.fingerprint.IFingerprintService$Stub
-android.hardware.fingerprint.IFingerprintService$Stub$Proxy
-android.hardware.fingerprint.IFingerprintServiceLockoutResetCallback
-android.hardware.fingerprint.IFingerprintServiceLockoutResetCallback$Stub
-android.hardware.fingerprint.IFingerprintServiceLockoutResetCallback$Stub$Proxy
-android.hardware.fingerprint.IFingerprintServiceReceiver
-android.hardware.fingerprint.IFingerprintServiceReceiver$Stub
-android.hardware.hdmi.HdmiControlManager
-android.hardware.hdmi.HdmiPlaybackClient$DisplayStatusCallback
-android.hardware.input.IInputDevicesChangedListener
-android.hardware.input.IInputDevicesChangedListener$Stub
-android.hardware.input.IInputDevicesChangedListener$Stub$Proxy
-android.hardware.input.IInputManager
-android.hardware.input.IInputManager$Stub
-android.hardware.input.IInputManager$Stub$Proxy
-android.hardware.input.ITabletModeChangedListener
-android.hardware.input.InputDeviceIdentifier
-android.hardware.input.InputDeviceIdentifier$1
-android.hardware.input.InputManager
-android.hardware.input.InputManager$InputDeviceListener
-android.hardware.input.InputManager$InputDeviceListenerDelegate
-android.hardware.input.InputManager$InputDevicesChangedListener
-android.hardware.input.InputManager$OnTabletModeChangedListener
-android.hardware.input.InputManagerInternal
-android.hardware.input.KeyboardLayout
-android.hardware.input.KeyboardLayout$1
-android.hardware.input.TouchCalibration
-android.hardware.input.TouchCalibration$1
-android.hardware.location.ActivityRecognitionHardware
-android.hardware.location.ContextHubInfo
-android.hardware.location.ContextHubInfo$1
-android.hardware.location.ContextHubManager
-android.hardware.location.ContextHubManager$1
-android.hardware.location.ContextHubManager$Callback
-android.hardware.location.ContextHubManager$ICallback
-android.hardware.location.ContextHubMessage
-android.hardware.location.ContextHubMessage$1
-android.hardware.location.GeofenceHardware
-android.hardware.location.GeofenceHardware$GeofenceHardwareMonitorCallbackWrapper
-android.hardware.location.GeofenceHardwareCallback
-android.hardware.location.GeofenceHardwareImpl
-android.hardware.location.GeofenceHardwareImpl$1
-android.hardware.location.GeofenceHardwareImpl$2
-android.hardware.location.GeofenceHardwareImpl$3
-android.hardware.location.GeofenceHardwareImpl$Reaper
-android.hardware.location.GeofenceHardwareMonitorCallback
-android.hardware.location.GeofenceHardwareService
-android.hardware.location.GeofenceHardwareService$1
-android.hardware.location.IActivityRecognitionHardware
-android.hardware.location.IActivityRecognitionHardware$Stub
-android.hardware.location.IActivityRecognitionHardwareClient
-android.hardware.location.IActivityRecognitionHardwareClient$Stub
-android.hardware.location.IActivityRecognitionHardwareClient$Stub$Proxy
-android.hardware.location.IActivityRecognitionHardwareWatcher
-android.hardware.location.IContextHubCallback
-android.hardware.location.IContextHubCallback$Stub
-android.hardware.location.IContextHubCallback$Stub$Proxy
-android.hardware.location.IContextHubService
-android.hardware.location.IContextHubService$Stub
-android.hardware.location.IContextHubService$Stub$Proxy
-android.hardware.location.IFusedLocationHardware
-android.hardware.location.IGeofenceHardware
-android.hardware.location.IGeofenceHardware$Stub
-android.hardware.location.IGeofenceHardware$Stub$Proxy
-android.hardware.location.IGeofenceHardwareMonitorCallback
-android.hardware.location.IGeofenceHardwareMonitorCallback$Stub
-android.hardware.location.IGeofenceHardwareMonitorCallback$Stub$Proxy
-android.hardware.location.MemoryRegion
-android.hardware.location.MemoryRegion$1
-android.hardware.location.NanoApp
-android.hardware.location.NanoAppFilter
-android.hardware.location.NanoAppFilter$1
-android.hardware.location.NanoAppInstanceInfo
-android.hardware.location.NanoAppInstanceInfo$1
-android.hardware.radio.RadioManager
-android.hardware.radio.RadioManager$AmBandConfig
-android.hardware.radio.RadioManager$AmBandConfig$1
-android.hardware.radio.RadioManager$AmBandDescriptor
-android.hardware.radio.RadioManager$AmBandDescriptor$1
-android.hardware.radio.RadioManager$BandConfig
-android.hardware.radio.RadioManager$BandConfig$1
-android.hardware.radio.RadioManager$BandDescriptor
-android.hardware.radio.RadioManager$BandDescriptor$1
-android.hardware.radio.RadioManager$FmBandConfig
-android.hardware.radio.RadioManager$FmBandConfig$1
-android.hardware.radio.RadioManager$FmBandDescriptor
-android.hardware.radio.RadioManager$FmBandDescriptor$1
-android.hardware.radio.RadioManager$ModuleProperties
-android.hardware.radio.RadioManager$ModuleProperties$1
-android.hardware.radio.RadioManager$ProgramInfo
-android.hardware.radio.RadioManager$ProgramInfo$1
-android.hardware.radio.RadioMetadata
-android.hardware.radio.RadioMetadata$1
-android.hardware.radio.RadioModule
-android.hardware.radio.RadioTuner
-android.hardware.radio.V1_0.Call
-android.hardware.radio.V1_0.CardStatus
-android.hardware.radio.V1_0.CdmaSignalStrength
-android.hardware.radio.V1_0.CellIdentity
-android.hardware.radio.V1_0.CellIdentityCdma
-android.hardware.radio.V1_0.CellIdentityGsm
-android.hardware.radio.V1_0.CellIdentityLte
-android.hardware.radio.V1_0.CellIdentityTdscdma
-android.hardware.radio.V1_0.CellIdentityWcdma
-android.hardware.radio.V1_0.CellInfo
-android.hardware.radio.V1_0.CellInfoCdma
-android.hardware.radio.V1_0.CellInfoGsm
-android.hardware.radio.V1_0.CellInfoLte
-android.hardware.radio.V1_0.CellInfoTdscdma
-android.hardware.radio.V1_0.CellInfoType
-android.hardware.radio.V1_0.CellInfoWcdma
-android.hardware.radio.V1_0.DataRegStateResult
-android.hardware.radio.V1_0.EvdoSignalStrength
-android.hardware.radio.V1_0.GsmSignalStrength
-android.hardware.radio.V1_0.HardwareConfig
-android.hardware.radio.V1_0.IRadio
-android.hardware.radio.V1_0.IRadio$Proxy
-android.hardware.radio.V1_0.IRadioIndication
-android.hardware.radio.V1_0.IRadioIndication$Stub
-android.hardware.radio.V1_0.IRadioResponse
-android.hardware.radio.V1_0.IRadioResponse$Stub
-android.hardware.radio.V1_0.LceStatusInfo
-android.hardware.radio.V1_0.LteSignalStrength
-android.hardware.radio.V1_0.RadioCapability
-android.hardware.radio.V1_0.RadioResponseInfo
-android.hardware.radio.V1_0.RegState
-android.hardware.radio.V1_0.SignalStrength
-android.hardware.radio.V1_0.TdScdmaSignalStrength
-android.hardware.radio.V1_0.VoiceRegStateResult
-android.hardware.radio.V1_0.WcdmaSignalStrength
-android.hardware.radio.deprecated.V1_0.IOemHook
-android.hardware.radio.deprecated.V1_0.IOemHook$Proxy
-android.hardware.radio.deprecated.V1_0.IOemHookIndication
-android.hardware.radio.deprecated.V1_0.IOemHookIndication$Stub
-android.hardware.radio.deprecated.V1_0.IOemHookResponse
-android.hardware.radio.deprecated.V1_0.IOemHookResponse$Stub
-android.hardware.soundtrigger.IRecognitionStatusCallback
-android.hardware.soundtrigger.IRecognitionStatusCallback$Stub
-android.hardware.soundtrigger.KeyphraseEnrollmentInfo
-android.hardware.soundtrigger.KeyphraseMetadata
-android.hardware.soundtrigger.SoundTrigger
-android.hardware.soundtrigger.SoundTrigger$ConfidenceLevel
-android.hardware.soundtrigger.SoundTrigger$ConfidenceLevel$1
-android.hardware.soundtrigger.SoundTrigger$GenericRecognitionEvent
-android.hardware.soundtrigger.SoundTrigger$GenericRecognitionEvent$1
-android.hardware.soundtrigger.SoundTrigger$GenericSoundModel
-android.hardware.soundtrigger.SoundTrigger$Keyphrase
-android.hardware.soundtrigger.SoundTrigger$Keyphrase$1
-android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionEvent
-android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionEvent$1
-android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionExtra
-android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionExtra$1
-android.hardware.soundtrigger.SoundTrigger$KeyphraseSoundModel
-android.hardware.soundtrigger.SoundTrigger$KeyphraseSoundModel$1
-android.hardware.soundtrigger.SoundTrigger$ModuleProperties
-android.hardware.soundtrigger.SoundTrigger$ModuleProperties$1
-android.hardware.soundtrigger.SoundTrigger$RecognitionConfig
-android.hardware.soundtrigger.SoundTrigger$RecognitionConfig$1
-android.hardware.soundtrigger.SoundTrigger$RecognitionEvent
-android.hardware.soundtrigger.SoundTrigger$RecognitionEvent$1
-android.hardware.soundtrigger.SoundTrigger$SoundModel
-android.hardware.soundtrigger.SoundTrigger$SoundModelEvent
-android.hardware.soundtrigger.SoundTrigger$SoundModelEvent$1
-android.hardware.soundtrigger.SoundTrigger$StatusListener
-android.hardware.soundtrigger.SoundTriggerModule
-android.hardware.usb.IUsbManager
-android.hardware.usb.IUsbManager$Stub
-android.hardware.usb.IUsbManager$Stub$Proxy
-android.hardware.usb.UsbAccessory
-android.hardware.usb.UsbDevice
-android.hardware.usb.UsbDeviceConnection
-android.hardware.usb.UsbManager
-android.hardware.usb.UsbPort
-android.hardware.usb.UsbPort$1
-android.hardware.usb.UsbPortStatus
-android.hardware.usb.UsbPortStatus$1
-android.hardware.usb.UsbRequest
-android.hidl.base.V1_0.DebugInfo
-android.hidl.base.V1_0.IBase
-android.hidl.manager.V1_0.IServiceManager
-android.hidl.manager.V1_0.IServiceManager$Proxy
-android.hidl.manager.V1_0.IServiceNotification
-android.hidl.manager.V1_0.IServiceNotification$Stub
-android.icu.impl.BMPSet
-android.icu.impl.CacheBase
-android.icu.impl.CacheValue
-android.icu.impl.CacheValue$NullValue
-android.icu.impl.CacheValue$SoftValue
-android.icu.impl.CacheValue$Strength
-android.icu.impl.CalendarUtil
-android.icu.impl.CalendarUtil$CalendarPreferences
-android.icu.impl.CaseMapImpl
-android.icu.impl.CaseMapImpl$GreekUpper
-android.icu.impl.CaseMapImpl$StringContextIterator
-android.icu.impl.CharTrie
-android.icu.impl.CharacterIteration
-android.icu.impl.ClassLoaderUtil
-android.icu.impl.CurrencyData
-android.icu.impl.CurrencyData$CurrencyDisplayInfo
-android.icu.impl.CurrencyData$CurrencyDisplayInfoProvider
-android.icu.impl.CurrencyData$CurrencySpacingInfo
-android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingPattern
-android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingType
-android.icu.impl.DateNumberFormat
-android.icu.impl.DontCareFieldPosition
-android.icu.impl.Grego
-android.icu.impl.ICUBinary
-android.icu.impl.ICUBinary$Authenticate
-android.icu.impl.ICUBinary$DatPackageReader
-android.icu.impl.ICUBinary$DatPackageReader$IsAcceptable
-android.icu.impl.ICUBinary$DataFile
-android.icu.impl.ICUBinary$PackageDataFile
-android.icu.impl.ICUCache
-android.icu.impl.ICUConfig
-android.icu.impl.ICUCurrencyDisplayInfoProvider
-android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo
-android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$SpacingInfoSink
-android.icu.impl.ICUCurrencyMetaInfo
-android.icu.impl.ICUCurrencyMetaInfo$Collector
-android.icu.impl.ICUCurrencyMetaInfo$CurrencyCollector
-android.icu.impl.ICUCurrencyMetaInfo$UniqueList
-android.icu.impl.ICUData
-android.icu.impl.ICUDebug
-android.icu.impl.ICULangDataTables
-android.icu.impl.ICULocaleService
-android.icu.impl.ICULocaleService$ICUResourceBundleFactory
-android.icu.impl.ICULocaleService$LocaleKey
-android.icu.impl.ICULocaleService$LocaleKeyFactory
-android.icu.impl.ICUNotifier
-android.icu.impl.ICURWLock
-android.icu.impl.ICURegionDataTables
-android.icu.impl.ICUResourceBundle
-android.icu.impl.ICUResourceBundle$1
-android.icu.impl.ICUResourceBundle$2
-android.icu.impl.ICUResourceBundle$3
-android.icu.impl.ICUResourceBundle$3$1
-android.icu.impl.ICUResourceBundle$4
-android.icu.impl.ICUResourceBundle$AvailEntry
-android.icu.impl.ICUResourceBundle$Loader
-android.icu.impl.ICUResourceBundle$OpenType
-android.icu.impl.ICUResourceBundle$WholeBundle
-android.icu.impl.ICUResourceBundleImpl
-android.icu.impl.ICUResourceBundleImpl$ResourceArray
-android.icu.impl.ICUResourceBundleImpl$ResourceBinary
-android.icu.impl.ICUResourceBundleImpl$ResourceContainer
-android.icu.impl.ICUResourceBundleImpl$ResourceInt
-android.icu.impl.ICUResourceBundleImpl$ResourceIntVector
-android.icu.impl.ICUResourceBundleImpl$ResourceString
-android.icu.impl.ICUResourceBundleImpl$ResourceTable
-android.icu.impl.ICUResourceBundleReader
-android.icu.impl.ICUResourceBundleReader$Array
-android.icu.impl.ICUResourceBundleReader$Array16
-android.icu.impl.ICUResourceBundleReader$Array32
-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
-android.icu.impl.ICUResourceBundleReader$ResourceCache$Level
-android.icu.impl.ICUResourceBundleReader$Table
-android.icu.impl.ICUResourceBundleReader$Table16
-android.icu.impl.ICUResourceBundleReader$Table1632
-android.icu.impl.ICUResourceTableAccess
-android.icu.impl.ICUService
-android.icu.impl.ICUService$CacheEntry
-android.icu.impl.ICUService$Factory
-android.icu.impl.ICUService$Key
-android.icu.impl.IDNA2003
-android.icu.impl.JavaTimeZone
-android.icu.impl.LocaleDisplayNamesImpl
-android.icu.impl.LocaleDisplayNamesImpl$Cache
-android.icu.impl.LocaleDisplayNamesImpl$CapitalizationContextUsage
-android.icu.impl.LocaleDisplayNamesImpl$DataTable
-android.icu.impl.LocaleDisplayNamesImpl$DataTables
-android.icu.impl.LocaleDisplayNamesImpl$ICUDataTable
-android.icu.impl.LocaleDisplayNamesImpl$ICUDataTables
-android.icu.impl.LocaleDisplayNamesImpl$LangDataTables
-android.icu.impl.LocaleDisplayNamesImpl$RegionDataTables
-android.icu.impl.LocaleIDParser
-android.icu.impl.LocaleIDs
-android.icu.impl.Norm2AllModes
-android.icu.impl.Norm2AllModes$1
-android.icu.impl.Norm2AllModes$ComposeNormalizer2
-android.icu.impl.Norm2AllModes$DecomposeNormalizer2
-android.icu.impl.Norm2AllModes$FCDNormalizer2
-android.icu.impl.Norm2AllModes$NFCSingleton
-android.icu.impl.Norm2AllModes$NFKCSingleton
-android.icu.impl.Norm2AllModes$NoopNormalizer2
-android.icu.impl.Norm2AllModes$Norm2AllModesSingleton
-android.icu.impl.Norm2AllModes$Normalizer2WithImpl
-android.icu.impl.Normalizer2Impl
-android.icu.impl.Normalizer2Impl$1
-android.icu.impl.Normalizer2Impl$IsAcceptable
-android.icu.impl.Normalizer2Impl$ReorderingBuffer
-android.icu.impl.OlsonTimeZone
-android.icu.impl.Pair
-android.icu.impl.PatternProps
-android.icu.impl.PatternTokenizer
-android.icu.impl.PluralRulesLoader
-android.icu.impl.ReplaceableUCharacterIterator
-android.icu.impl.RuleCharacterIterator
-android.icu.impl.SimpleCache
-android.icu.impl.SimpleFormatterImpl
-android.icu.impl.SoftCache
-android.icu.impl.StandardPlural
-android.icu.impl.StringPrepDataReader
-android.icu.impl.Trie
-android.icu.impl.Trie$DataManipulate
-android.icu.impl.Trie$DefaultGetFoldingOffset
-android.icu.impl.Trie2
-android.icu.impl.Trie2$1
-android.icu.impl.Trie2$Range
-android.icu.impl.Trie2$Trie2Iterator
-android.icu.impl.Trie2$UTrie2Header
-android.icu.impl.Trie2$ValueMapper
-android.icu.impl.Trie2$ValueWidth
-android.icu.impl.Trie2_16
-android.icu.impl.Trie2_32
-android.icu.impl.UBiDiProps
-android.icu.impl.UBiDiProps$IsAcceptable
-android.icu.impl.UCaseProps
-android.icu.impl.UCaseProps$ContextIterator
-android.icu.impl.UCaseProps$IsAcceptable
-android.icu.impl.UCharacterProperty
-android.icu.impl.UCharacterProperty$1
-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$2
-android.icu.impl.UCharacterProperty$20
-android.icu.impl.UCharacterProperty$21
-android.icu.impl.UCharacterProperty$22
-android.icu.impl.UCharacterProperty$23
-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.UPropertyAliases
-android.icu.impl.UPropertyAliases$IsAcceptable
-android.icu.impl.URLHandler$URLVisitor
-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.USerializedSet
-android.icu.impl.Utility
-android.icu.impl.ZoneMeta
-android.icu.impl.ZoneMeta$CustomTimeZoneCache
-android.icu.impl.ZoneMeta$SystemTimeZoneCache
-android.icu.impl.coll.Collation
-android.icu.impl.coll.CollationCompare
-android.icu.impl.coll.CollationData
-android.icu.impl.coll.CollationDataReader
-android.icu.impl.coll.CollationDataReader$IsAcceptable
-android.icu.impl.coll.CollationFCD
-android.icu.impl.coll.CollationFastLatin
-android.icu.impl.coll.CollationIterator
-android.icu.impl.coll.CollationIterator$CEBuffer
-android.icu.impl.coll.CollationKeys
-android.icu.impl.coll.CollationKeys$LevelCallback
-android.icu.impl.coll.CollationKeys$SortKeyByteSink
-android.icu.impl.coll.CollationLoader
-android.icu.impl.coll.CollationRoot
-android.icu.impl.coll.CollationSettings
-android.icu.impl.coll.CollationTailoring
-android.icu.impl.coll.ContractionsAndExpansions
-android.icu.impl.coll.FCDUTF16CollationIterator
-android.icu.impl.coll.SharedObject
-android.icu.impl.coll.SharedObject$Reference
-android.icu.impl.coll.UTF16CollationIterator
-android.icu.impl.locale.AsciiUtil
-android.icu.impl.locale.BaseLocale
-android.icu.impl.locale.BaseLocale$Cache
-android.icu.impl.locale.BaseLocale$Key
-android.icu.impl.locale.LocaleObjectCache
-android.icu.impl.locale.LocaleObjectCache$CacheEntry
-android.icu.impl.locale.LocaleSyntaxException
-android.icu.lang.UCharacter
-android.icu.lang.UCharacterEnums$ECharacterCategory
-android.icu.lang.UCharacterEnums$ECharacterDirection
-android.icu.lang.UScript
-android.icu.lang.UScript$ScriptUsage
-android.icu.math.BigDecimal
-android.icu.math.MathContext
-android.icu.text.AlphabeticIndex
-android.icu.text.AlphabeticIndex$1
-android.icu.text.AlphabeticIndex$Bucket
-android.icu.text.AlphabeticIndex$Bucket$LabelType
-android.icu.text.AlphabeticIndex$BucketList
-android.icu.text.AlphabeticIndex$ImmutableIndex
-android.icu.text.Bidi
-android.icu.text.Bidi$ImpTabPair
-android.icu.text.BreakIterator
-android.icu.text.BreakIterator$BreakIteratorCache
-android.icu.text.BreakIterator$BreakIteratorServiceShim
-android.icu.text.BreakIteratorFactory
-android.icu.text.BreakIteratorFactory$BFService
-android.icu.text.BreakIteratorFactory$BFService$1RBBreakIteratorFactory
-android.icu.text.CaseMap
-android.icu.text.CaseMap$Upper
-android.icu.text.CollationKey
-android.icu.text.Collator
-android.icu.text.Collator$ServiceShim
-android.icu.text.CollatorServiceShim
-android.icu.text.CollatorServiceShim$CService
-android.icu.text.CollatorServiceShim$CService$1CollatorFactory
-android.icu.text.CurrencyDisplayNames
-android.icu.text.CurrencyMetaInfo
-android.icu.text.CurrencyMetaInfo$CurrencyDigits
-android.icu.text.CurrencyMetaInfo$CurrencyFilter
-android.icu.text.CurrencyPluralInfo
-android.icu.text.DateFormat
-android.icu.text.DateFormat$BooleanAttribute
-android.icu.text.DateFormat$Field
-android.icu.text.DateFormatSymbols
-android.icu.text.DateFormatSymbols$1
-android.icu.text.DateFormatSymbols$CalendarDataSink
-android.icu.text.DateFormatSymbols$CalendarDataSink$AliasType
-android.icu.text.DateFormatSymbols$CapitalizationContextUsage
-android.icu.text.DateIntervalFormat
-android.icu.text.DateIntervalFormat$BestMatchInfo
-android.icu.text.DateIntervalFormat$SkeletonAndItsBestMatch
-android.icu.text.DateIntervalInfo
-android.icu.text.DateIntervalInfo$DateIntervalSink
-android.icu.text.DateIntervalInfo$PatternInfo
-android.icu.text.DateTimePatternGenerator
-android.icu.text.DateTimePatternGenerator$AppendItemFormatsSink
-android.icu.text.DateTimePatternGenerator$AppendItemNamesSink
-android.icu.text.DateTimePatternGenerator$AvailableFormatsSink
-android.icu.text.DateTimePatternGenerator$DTPGflags
-android.icu.text.DateTimePatternGenerator$DateTimeMatcher
-android.icu.text.DateTimePatternGenerator$DayPeriodAllowedHoursSink
-android.icu.text.DateTimePatternGenerator$DistanceInfo
-android.icu.text.DateTimePatternGenerator$FormatParser
-android.icu.text.DateTimePatternGenerator$PatternInfo
-android.icu.text.DateTimePatternGenerator$PatternWithMatcher
-android.icu.text.DateTimePatternGenerator$PatternWithSkeletonFlag
-android.icu.text.DateTimePatternGenerator$SkeletonFields
-android.icu.text.DateTimePatternGenerator$VariableField
-android.icu.text.DecimalFormat
-android.icu.text.DecimalFormat$Unit
-android.icu.text.DecimalFormatSymbols
-android.icu.text.DecimalFormatSymbols$1
-android.icu.text.DecimalFormatSymbols$CacheData
-android.icu.text.DecimalFormatSymbols$DecFmtDataSink
-android.icu.text.DigitList
-android.icu.text.DisplayContext
-android.icu.text.DisplayContext$Type
-android.icu.text.Edits
-android.icu.text.IDNA
-android.icu.text.LanguageBreakEngine
-android.icu.text.ListFormatter$Style
-android.icu.text.LocaleDisplayNames
-android.icu.text.LocaleDisplayNames$DialectHandling
-android.icu.text.MeasureFormat
-android.icu.text.MeasureFormat$FormatWidth
-android.icu.text.MeasureFormat$ImmutableNumberFormat
-android.icu.text.MeasureFormat$MeasureFormatData
-android.icu.text.MeasureFormat$UnitDataSink
-android.icu.text.Normalizer
-android.icu.text.Normalizer$FCDMode
-android.icu.text.Normalizer$Mode
-android.icu.text.Normalizer$ModeImpl
-android.icu.text.Normalizer$NFCMode
-android.icu.text.Normalizer$NFCModeImpl
-android.icu.text.Normalizer$NFDMode
-android.icu.text.Normalizer$NFKCMode
-android.icu.text.Normalizer$NFKDMode
-android.icu.text.Normalizer$NFKDModeImpl
-android.icu.text.Normalizer$NONEMode
-android.icu.text.Normalizer$QuickCheckResult
-android.icu.text.Normalizer2
-android.icu.text.NumberFormat
-android.icu.text.NumberFormat$Field
-android.icu.text.NumberFormat$NumberFormatShim
-android.icu.text.NumberFormatServiceShim
-android.icu.text.NumberFormatServiceShim$NFService
-android.icu.text.NumberFormatServiceShim$NFService$1RBNumberFormatFactory
-android.icu.text.NumberingSystem
-android.icu.text.NumberingSystem$1
-android.icu.text.NumberingSystem$2
-android.icu.text.NumberingSystem$LocaleLookupData
-android.icu.text.PluralRanges
-android.icu.text.PluralRanges$Matrix
-android.icu.text.PluralRules
-android.icu.text.PluralRules$1
-android.icu.text.PluralRules$AndConstraint
-android.icu.text.PluralRules$BinaryConstraint
-android.icu.text.PluralRules$Constraint
-android.icu.text.PluralRules$Factory
-android.icu.text.PluralRules$FixedDecimal
-android.icu.text.PluralRules$FixedDecimalRange
-android.icu.text.PluralRules$FixedDecimalSamples
-android.icu.text.PluralRules$Operand
-android.icu.text.PluralRules$PluralType
-android.icu.text.PluralRules$RangeConstraint
-android.icu.text.PluralRules$Rule
-android.icu.text.PluralRules$RuleList
-android.icu.text.PluralRules$SampleType
-android.icu.text.PluralRules$SimpleTokenizer
-android.icu.text.QuantityFormatter
-android.icu.text.RBBIDataWrapper
-android.icu.text.RBBIDataWrapper$IsAcceptable
-android.icu.text.RBBIDataWrapper$RBBIDataHeader
-android.icu.text.RBBIDataWrapper$TrieFoldingFunc
-android.icu.text.RawCollationKey
-android.icu.text.RelativeDateTimeFormatter
-android.icu.text.RelativeDateTimeFormatter$AbsoluteUnit
-android.icu.text.RelativeDateTimeFormatter$Cache
-android.icu.text.RelativeDateTimeFormatter$Cache$1
-android.icu.text.RelativeDateTimeFormatter$Direction
-android.icu.text.RelativeDateTimeFormatter$Loader
-android.icu.text.RelativeDateTimeFormatter$RelDateTimeDataSink
-android.icu.text.RelativeDateTimeFormatter$RelDateTimeDataSink$DateTimeUnit
-android.icu.text.RelativeDateTimeFormatter$RelativeDateTimeFormatterData
-android.icu.text.RelativeDateTimeFormatter$RelativeUnit
-android.icu.text.RelativeDateTimeFormatter$Style
-android.icu.text.Replaceable
-android.icu.text.ReplaceableString
-android.icu.text.RuleBasedBreakIterator
-android.icu.text.RuleBasedBreakIterator$LookAheadResults
-android.icu.text.RuleBasedCollator
-android.icu.text.RuleBasedCollator$CollationBuffer
-android.icu.text.RuleBasedCollator$CollationKeyByteSink
-android.icu.text.RuleBasedCollator$FCDUTF16NFDIterator
-android.icu.text.RuleBasedCollator$NFDIterator
-android.icu.text.RuleBasedCollator$UTF16NFDIterator
-android.icu.text.SimpleDateFormat
-android.icu.text.SimpleDateFormat$PatternItem
-android.icu.text.StringPrep
-android.icu.text.StringPrepParseException
-android.icu.text.TimeZoneNames$NameType
-android.icu.text.UCharacterIterator
-android.icu.text.UFieldPosition
-android.icu.text.UFormat
-android.icu.text.UForwardCharacterIterator
-android.icu.text.UTF16
-android.icu.text.UTF16$StringComparator
-android.icu.text.UnhandledBreakEngine
-android.icu.text.UnicodeFilter
-android.icu.text.UnicodeMatcher
-android.icu.text.UnicodeSet
-android.icu.text.UnicodeSet$Filter
-android.icu.text.UnicodeSet$GeneralCategoryMaskFilter
-android.icu.text.UnicodeSet$IntPropertyFilter
-android.icu.text.UnicodeSet$UnicodeSetIterator2
-android.icu.util.BasicTimeZone
-android.icu.util.ByteArrayWrapper
-android.icu.util.BytesTrie
-android.icu.util.BytesTrie$Result
-android.icu.util.Calendar
-android.icu.util.Calendar$CalType
-android.icu.util.Calendar$FormatConfiguration
-android.icu.util.Calendar$PatternData
-android.icu.util.Calendar$WeekData
-android.icu.util.Calendar$WeekDataCache
-android.icu.util.CharsTrie
-android.icu.util.CharsTrie$Entry
-android.icu.util.CharsTrie$Iterator
-android.icu.util.Currency
-android.icu.util.Currency$1
-android.icu.util.Currency$CurrencyUsage
-android.icu.util.Currency$EquivalenceRelation
-android.icu.util.CurrencyAmount
-android.icu.util.Freezable
-android.icu.util.GregorianCalendar
-android.icu.util.ICUException
-android.icu.util.ICUUncheckedIOException
-android.icu.util.LocaleData
-android.icu.util.Measure
-android.icu.util.MeasureUnit
-android.icu.util.MeasureUnit$1
-android.icu.util.MeasureUnit$2
-android.icu.util.MeasureUnit$3
-android.icu.util.MeasureUnit$Factory
-android.icu.util.Output
-android.icu.util.SimpleTimeZone
-android.icu.util.TimeUnit
-android.icu.util.TimeZone
-android.icu.util.TimeZone$ConstantZone
-android.icu.util.ULocale
-android.icu.util.ULocale$1
-android.icu.util.ULocale$2
-android.icu.util.ULocale$Category
-android.icu.util.ULocale$JDKLocaleHelper
-android.icu.util.ULocale$Type
-android.icu.util.UResourceBundle
-android.icu.util.UResourceBundle$RootType
-android.icu.util.UResourceBundleIterator
-android.icu.util.UResourceTypeMismatchException
-android.icu.util.VersionInfo
-android.inputmethodservice.AbstractInputMethodService
-android.inputmethodservice.AbstractInputMethodService$AbstractInputMethodImpl
-android.inputmethodservice.AbstractInputMethodService$AbstractInputMethodSessionImpl
-android.inputmethodservice.IInputMethodSessionWrapper
-android.inputmethodservice.IInputMethodSessionWrapper$ImeInputEventReceiver
-android.inputmethodservice.IInputMethodWrapper
-android.inputmethodservice.IInputMethodWrapper$InputMethodSessionCallbackWrapper
-android.inputmethodservice.InputMethodService
-android.inputmethodservice.InputMethodService$1
-android.inputmethodservice.InputMethodService$2
-android.inputmethodservice.InputMethodService$InputMethodImpl
-android.inputmethodservice.InputMethodService$InputMethodSessionImpl
-android.inputmethodservice.InputMethodService$Insets
-android.inputmethodservice.InputMethodService$SettingsObserver
-android.inputmethodservice.SoftInputWindow
-android.location.Address
-android.location.Address$1
-android.location.BatchedLocationCallbackTransport
-android.location.BatchedLocationCallbackTransport$CallbackTransport
-android.location.Country
-android.location.Country$1
-android.location.CountryDetector
-android.location.CountryDetector$ListenerTransport
-android.location.CountryDetector$ListenerTransport$1
-android.location.CountryListener
-android.location.Criteria
-android.location.Criteria$1
-android.location.Geocoder
-android.location.GeocoderParams
-android.location.GeocoderParams$1
-android.location.Geofence
-android.location.GnssMeasurementCallbackTransport
-android.location.GnssMeasurementCallbackTransport$ListenerTransport
-android.location.GnssNavigationMessageCallbackTransport
-android.location.GnssNavigationMessageCallbackTransport$ListenerTransport
-android.location.GnssStatus
-android.location.GnssStatus$Callback
-android.location.GpsSatellite
-android.location.GpsStatus
-android.location.GpsStatus$1
-android.location.GpsStatus$Listener
-android.location.GpsStatus$SatelliteIterator
-android.location.IBatchedLocationCallback
-android.location.IBatchedLocationCallback$Stub
-android.location.ICountryDetector
-android.location.ICountryDetector$Stub
-android.location.ICountryDetector$Stub$Proxy
-android.location.ICountryListener
-android.location.ICountryListener$Stub
-android.location.ICountryListener$Stub$Proxy
-android.location.IFusedProvider
-android.location.IFusedProvider$Stub
-android.location.IGeocodeProvider
-android.location.IGeocodeProvider$Stub
-android.location.IGeocodeProvider$Stub$Proxy
-android.location.IGeofenceProvider
-android.location.IGeofenceProvider$Stub
-android.location.IGeofenceProvider$Stub$Proxy
-android.location.IGnssMeasurementsListener
-android.location.IGnssMeasurementsListener$Stub
-android.location.IGnssNavigationMessageListener
-android.location.IGnssNavigationMessageListener$Stub
-android.location.IGnssStatusListener
-android.location.IGnssStatusListener$Stub
-android.location.IGnssStatusListener$Stub$Proxy
-android.location.IGnssStatusProvider
-android.location.IGnssStatusProvider$Stub
-android.location.IGpsGeofenceHardware
-android.location.IGpsGeofenceHardware$Stub
-android.location.ILocationListener
-android.location.ILocationListener$Stub
-android.location.ILocationListener$Stub$Proxy
-android.location.ILocationManager
-android.location.ILocationManager$Stub
-android.location.ILocationManager$Stub$Proxy
-android.location.INetInitiatedListener
-android.location.INetInitiatedListener$Stub
-android.location.LocalListenerHelper
-android.location.Location
-android.location.Location$1
-android.location.Location$2
-android.location.Location$BearingDistanceCache
-android.location.LocationListener
-android.location.LocationManager
-android.location.LocationManager$GnssStatusListenerTransport
-android.location.LocationManager$GnssStatusListenerTransport$1
-android.location.LocationManager$GnssStatusListenerTransport$GnssHandler
-android.location.LocationManager$ListenerTransport
-android.location.LocationManager$ListenerTransport$1
-android.location.LocationManager$ListenerTransport$2
-android.location.LocationProvider
-android.location.LocationRequest
-android.location.LocationRequest$1
-android.media.AudioAttributes
-android.media.AudioAttributes$1
-android.media.AudioAttributes$Builder
-android.media.AudioDeviceCallback
-android.media.AudioDeviceInfo
-android.media.AudioDevicePort
-android.media.AudioDevicePortConfig
-android.media.AudioFocusInfo
-android.media.AudioFocusInfo$1
-android.media.AudioFocusRequest
-android.media.AudioFocusRequest$Builder
-android.media.AudioFormat
-android.media.AudioFormat$1
-android.media.AudioFormat$Builder
-android.media.AudioGain
-android.media.AudioGainConfig
-android.media.AudioHandle
-android.media.AudioManager
-android.media.AudioManager$1
-android.media.AudioManager$2
-android.media.AudioManager$3
-android.media.AudioManager$FocusRequestInfo
-android.media.AudioManager$NativeEventHandlerDelegate
-android.media.AudioManager$NativeEventHandlerDelegate$1
-android.media.AudioManager$OnAmPortUpdateListener
-android.media.AudioManager$OnAudioFocusChangeListener
-android.media.AudioManager$OnAudioPortUpdateListener
-android.media.AudioManager$ServiceEventHandlerDelegate
-android.media.AudioManager$ServiceEventHandlerDelegate$1
-android.media.AudioManagerInternal
-android.media.AudioManagerInternal$RingerModeDelegate
-android.media.AudioMixPort
-android.media.AudioMixPortConfig
-android.media.AudioPatch
-android.media.AudioPlaybackConfiguration
-android.media.AudioPlaybackConfiguration$1
-android.media.AudioPlaybackConfiguration$IPlayerShell
-android.media.AudioPlaybackConfiguration$PlayerDeathMonitor
-android.media.AudioPort
-android.media.AudioPortConfig
-android.media.AudioPortEventHandler
-android.media.AudioPortEventHandler$1
-android.media.AudioRecord
-android.media.AudioRoutesInfo
-android.media.AudioRoutesInfo$1
-android.media.AudioRouting
-android.media.AudioSystem
-android.media.AudioSystem$AudioRecordingCallback
-android.media.AudioSystem$DynamicPolicyCallback
-android.media.AudioSystem$ErrorCallback
-android.media.AudioTimestamp
-android.media.AudioTrack
-android.media.BufferingParams
-android.media.BufferingParams$1
-android.media.CamcorderProfile
-android.media.CameraProfile
-android.media.DecoderCapabilities
-android.media.DeniedByServerException
-android.media.EncoderCapabilities
-android.media.ExifInterface
-android.media.ExifInterface$ByteOrderedDataInputStream
-android.media.ExifInterface$ExifAttribute
-android.media.ExifInterface$ExifTag
-android.media.IAudioFocusDispatcher
-android.media.IAudioFocusDispatcher$Stub
-android.media.IAudioFocusDispatcher$Stub$Proxy
-android.media.IAudioRoutesObserver
-android.media.IAudioRoutesObserver$Stub
-android.media.IAudioRoutesObserver$Stub$Proxy
-android.media.IAudioService
-android.media.IAudioService$Stub
-android.media.IAudioService$Stub$Proxy
-android.media.IMediaHTTPConnection
-android.media.IMediaHTTPConnection$Stub
-android.media.IMediaHTTPService
-android.media.IMediaHTTPService$Stub
-android.media.IMediaResourceMonitor
-android.media.IMediaResourceMonitor$Stub
-android.media.IMediaRouterClient
-android.media.IMediaRouterClient$Stub
-android.media.IMediaRouterClient$Stub$Proxy
-android.media.IMediaRouterService
-android.media.IMediaRouterService$Stub
-android.media.IMediaRouterService$Stub$Proxy
-android.media.IPlaybackConfigDispatcher
-android.media.IPlaybackConfigDispatcher$Stub
-android.media.IPlayer
-android.media.IPlayer$Stub
-android.media.IPlayer$Stub$Proxy
-android.media.IRecordingConfigDispatcher
-android.media.IRecordingConfigDispatcher$Stub
-android.media.IRemoteVolumeController
-android.media.IRemoteVolumeController$Stub
-android.media.IRemoteVolumeController$Stub$Proxy
-android.media.IRemoteVolumeObserver
-android.media.IRemoteVolumeObserver$Stub
-android.media.IRingtonePlayer
-android.media.IRingtonePlayer$Stub
-android.media.IRingtonePlayer$Stub$Proxy
-android.media.IVolumeController
-android.media.IVolumeController$Stub
-android.media.IVolumeController$Stub$Proxy
-android.media.Image
-android.media.Image$Plane
-android.media.ImageReader
-android.media.ImageReader$ListenerHandler
-android.media.ImageReader$OnImageAvailableListener
-android.media.ImageReader$SurfaceImage
-android.media.ImageReader$SurfaceImage$SurfacePlane
-android.media.ImageUtils
-android.media.ImageWriter
-android.media.ImageWriter$ListenerHandler
-android.media.ImageWriter$OnImageReleasedListener
-android.media.ImageWriter$WriterSurfaceImage
-android.media.ImageWriter$WriterSurfaceImage$SurfacePlane
-android.media.JetPlayer
-android.media.MediaCodec
-android.media.MediaCodec$BufferInfo
-android.media.MediaCodec$BufferMap
-android.media.MediaCodec$BufferMap$CodecBuffer
-android.media.MediaCodec$CodecException
-android.media.MediaCodec$CryptoException
-android.media.MediaCodec$CryptoInfo
-android.media.MediaCodec$CryptoInfo$Pattern
-android.media.MediaCodec$EventHandler
-android.media.MediaCodec$PersistentSurface
-android.media.MediaCodecInfo
-android.media.MediaCodecInfo$AudioCapabilities
-android.media.MediaCodecInfo$CodecCapabilities
-android.media.MediaCodecInfo$CodecProfileLevel
-android.media.MediaCodecInfo$EncoderCapabilities
-android.media.MediaCodecInfo$Feature
-android.media.MediaCodecInfo$VideoCapabilities
-android.media.MediaCodecList
-android.media.MediaCrypto
-android.media.MediaCryptoException
-android.media.MediaDescrambler
-android.media.MediaDescription
-android.media.MediaDescription$1
-android.media.MediaDescription$Builder
-android.media.MediaDrm
-android.media.MediaDrm$Certificate
-android.media.MediaDrm$EventHandler
-android.media.MediaDrm$KeyRequest
-android.media.MediaDrm$MediaDrmStateException
-android.media.MediaDrm$OnEventListener
-android.media.MediaDrm$ProvisionRequest
-android.media.MediaDrmException
-android.media.MediaExtractor
-android.media.MediaFile
-android.media.MediaFile$MediaFileType
-android.media.MediaFormat
-android.media.MediaHTTPConnection
-android.media.MediaHTTPService
-android.media.MediaMetadata
-android.media.MediaMetadata$1
-android.media.MediaMetadata$Builder
-android.media.MediaMetadataRetriever
-android.media.MediaMuxer
-android.media.MediaPlayer
-android.media.MediaPlayer$1
-android.media.MediaPlayer$2
-android.media.MediaPlayer$4
-android.media.MediaPlayer$4$1
-android.media.MediaPlayer$EventHandler
-android.media.MediaPlayer$OnCompletionListener
-android.media.MediaPlayer$OnErrorListener
-android.media.MediaPlayer$OnInfoListener
-android.media.MediaPlayer$OnPreparedListener
-android.media.MediaPlayer$OnSeekCompleteListener
-android.media.MediaPlayer$OnSubtitleDataListener
-android.media.MediaPlayer$TimeProvider
-android.media.MediaPlayer$TimeProvider$EventHandler
-android.media.MediaPlayer$TrackInfo
-android.media.MediaPlayer$TrackInfo$1
-android.media.MediaRecorder
-android.media.MediaRecorder$EventHandler
-android.media.MediaRecorder$OnErrorListener
-android.media.MediaRouter
-android.media.MediaRouter$Callback
-android.media.MediaRouter$CallbackInfo
-android.media.MediaRouter$RouteCategory
-android.media.MediaRouter$RouteGroup
-android.media.MediaRouter$RouteInfo
-android.media.MediaRouter$RouteInfo$1
-android.media.MediaRouter$SimpleCallback
-android.media.MediaRouter$Static
-android.media.MediaRouter$Static$1
-android.media.MediaRouter$Static$Client
-android.media.MediaRouter$Static$Client$1
-android.media.MediaRouter$VolumeCallback
-android.media.MediaRouter$VolumeChangeReceiver
-android.media.MediaRouter$WifiDisplayStatusChangedReceiver
-android.media.MediaRouterClientState
-android.media.MediaRouterClientState$1
-android.media.MediaRouterClientState$RouteInfo
-android.media.MediaRouterClientState$RouteInfo$1
-android.media.MediaScanner
-android.media.MediaScannerConnection
-android.media.MediaScannerConnection$OnScanCompletedListener
-android.media.MediaSync
-android.media.MediaTimeProvider
-android.media.MediaTimeProvider$OnMediaTimeListener
-android.media.MiniThumbFile
-android.media.NotProvisionedException
-android.media.PlaybackParams
-android.media.PlaybackParams$1
-android.media.PlayerBase
-android.media.PlayerBase$IAppOpsCallbackWrapper
-android.media.PlayerBase$IPlayerWrapper
-android.media.PlayerBase$PlayerIdCard
-android.media.PlayerBase$PlayerIdCard$1
-android.media.PlayerProxy
-android.media.Rating
-android.media.Rating$1
-android.media.RemoteDisplay
-android.media.ResampleInputStream
-android.media.SoundPool
-android.media.SoundPool$Builder
-android.media.SoundPool$EventHandler
-android.media.SoundPool$OnLoadCompleteListener
-android.media.SubtitleController
-android.media.SubtitleController$1
-android.media.SubtitleController$2
-android.media.SubtitleController$Anchor
-android.media.SubtitleController$Listener
-android.media.SubtitleTrack
-android.media.SyncParams
-android.media.ThumbnailUtils
-android.media.ThumbnailUtils$SizedThumbnailBitmap
-android.media.ToneGenerator
-android.media.UnsupportedSchemeException
-android.media.Utils
-android.media.Utils$1
-android.media.Utils$2
-android.media.VolumeAutomation
-android.media.VolumePolicy
-android.media.VolumePolicy$1
-android.media.VolumeShaper
-android.media.VolumeShaper$Configuration
-android.media.VolumeShaper$Configuration$1
-android.media.VolumeShaper$Configuration$Builder
-android.media.VolumeShaper$Operation
-android.media.VolumeShaper$Operation$1
-android.media.VolumeShaper$Operation$Builder
-android.media.VolumeShaper$State
-android.media.VolumeShaper$State$1
-android.media.audiofx.AudioEffect
-android.media.audiofx.AudioEffect$Descriptor
-android.media.audiofx.LoudnessEnhancer
-android.media.audiofx.Virtualizer
-android.media.audiofx.Visualizer
-android.media.audiopolicy.AudioMix
-android.media.audiopolicy.AudioMixingRule
-android.media.audiopolicy.AudioMixingRule$AudioMixMatchCriterion
-android.media.audiopolicy.AudioPolicyConfig
-android.media.audiopolicy.IAudioPolicyCallback
-android.media.audiopolicy.IAudioPolicyCallback$Stub
-android.media.browse.MediaBrowser
-android.media.browse.MediaBrowser$1
-android.media.browse.MediaBrowser$2
-android.media.browse.MediaBrowser$6
-android.media.browse.MediaBrowser$ConnectionCallback
-android.media.browse.MediaBrowser$MediaServiceConnection
-android.media.browse.MediaBrowser$MediaServiceConnection$1
-android.media.browse.MediaBrowser$ServiceCallbacks
-android.media.midi.IMidiDeviceListener
-android.media.midi.IMidiDeviceOpenCallback
-android.media.midi.IMidiDeviceServer
-android.media.midi.IMidiManager
-android.media.midi.IMidiManager$Stub
-android.media.midi.MidiDeviceInfo
-android.media.midi.MidiDeviceStatus
-android.media.midi.MidiManager
-android.media.projection.IMediaProjection
-android.media.projection.IMediaProjectionManager
-android.media.projection.IMediaProjectionManager$Stub
-android.media.projection.IMediaProjectionManager$Stub$Proxy
-android.media.projection.IMediaProjectionWatcherCallback
-android.media.projection.IMediaProjectionWatcherCallback$Stub
-android.media.projection.IMediaProjectionWatcherCallback$Stub$Proxy
-android.media.projection.MediaProjectionInfo
-android.media.projection.MediaProjectionManager
-android.media.projection.MediaProjectionManager$Callback
-android.media.projection.MediaProjectionManager$CallbackDelegate
-android.media.session.IActiveSessionsListener
-android.media.session.IActiveSessionsListener$Stub
-android.media.session.IActiveSessionsListener$Stub$Proxy
-android.media.session.ICallback
-android.media.session.ICallback$Stub
-android.media.session.ICallback$Stub$Proxy
-android.media.session.IOnMediaKeyListener
-android.media.session.IOnVolumeKeyLongPressListener
-android.media.session.ISession
-android.media.session.ISession$Stub
-android.media.session.ISession$Stub$Proxy
-android.media.session.ISessionCallback
-android.media.session.ISessionCallback$Stub
-android.media.session.ISessionCallback$Stub$Proxy
-android.media.session.ISessionController
-android.media.session.ISessionController$Stub
-android.media.session.ISessionController$Stub$Proxy
-android.media.session.ISessionControllerCallback
-android.media.session.ISessionControllerCallback$Stub
-android.media.session.ISessionControllerCallback$Stub$Proxy
-android.media.session.ISessionManager
-android.media.session.ISessionManager$Stub
-android.media.session.ISessionManager$Stub$Proxy
-android.media.session.MediaController
-android.media.session.MediaController$Callback
-android.media.session.MediaController$CallbackStub
-android.media.session.MediaController$MessageHandler
-android.media.session.MediaController$PlaybackInfo
-android.media.session.MediaController$TransportControls
-android.media.session.MediaSession
-android.media.session.MediaSession$Callback
-android.media.session.MediaSession$CallbackMessageHandler
-android.media.session.MediaSession$CallbackStub
-android.media.session.MediaSession$QueueItem
-android.media.session.MediaSession$QueueItem$1
-android.media.session.MediaSession$Token
-android.media.session.MediaSession$Token$1
-android.media.session.MediaSessionManager
-android.media.session.MediaSessionManager$Callback
-android.media.session.MediaSessionManager$CallbackImpl
-android.media.session.MediaSessionManager$CallbackImpl$3
-android.media.session.MediaSessionManager$CallbackImpl$4
-android.media.session.MediaSessionManager$OnActiveSessionsChangedListener
-android.media.session.MediaSessionManager$SessionsChangedWrapper
-android.media.session.MediaSessionManager$SessionsChangedWrapper$1
-android.media.session.MediaSessionManager$SessionsChangedWrapper$1$1
-android.media.session.ParcelableVolumeInfo
-android.media.session.ParcelableVolumeInfo$1
-android.media.session.PlaybackState
-android.media.session.PlaybackState$1
-android.media.session.PlaybackState$Builder
-android.media.session.PlaybackState$CustomAction
-android.media.session.PlaybackState$CustomAction$1
-android.media.session.PlaybackState$CustomAction$Builder
-android.media.soundtrigger.SoundTriggerManager
-android.media.tv.TvInputHardwareInfo$Builder
-android.media.tv.TvInputManager
-android.media.tv.TvStreamConfig
-android.media.tv.TvStreamConfig$Builder
-android.metrics.LogMaker
-android.mtp.MtpDatabase
-android.mtp.MtpDevice
-android.mtp.MtpDeviceInfo
-android.mtp.MtpEvent
-android.mtp.MtpObjectInfo
-android.mtp.MtpPropertyGroup
-android.mtp.MtpPropertyList
-android.mtp.MtpServer
-android.mtp.MtpStorage
-android.mtp.MtpStorageInfo
-android.net.ConnectivityManager
-android.net.ConnectivityManager$CallbackHandler
-android.net.ConnectivityManager$NetworkCallback
-android.net.ConnectivityManager$OnNetworkActiveListener
-android.net.ConnectivityManager$PacketKeepaliveCallback
-android.net.ConnectivityMetricsEvent
-android.net.ConnectivityMetricsEvent$1
-android.net.ConnectivityThread
-android.net.ConnectivityThread$Singleton
-android.net.Credentials
-android.net.DataUsageRequest
-android.net.DhcpInfo
-android.net.DhcpInfo$1
-android.net.DhcpResults
-android.net.DhcpResults$1
-android.net.EthernetManager
-android.net.EthernetManager$1
-android.net.EthernetManager$2
-android.net.EventLogTags
-android.net.IConnectivityManager
-android.net.IConnectivityManager$Stub
-android.net.IConnectivityManager$Stub$Proxy
-android.net.IEthernetManager
-android.net.IEthernetManager$Stub
-android.net.IEthernetServiceListener
-android.net.IEthernetServiceListener$Stub
-android.net.IIpConnectivityMetrics
-android.net.IIpConnectivityMetrics$Stub
-android.net.IIpSecService
-android.net.IIpSecService$Stub
-android.net.INetd
-android.net.INetd$Stub
-android.net.INetd$Stub$Proxy
-android.net.INetdEventCallback
-android.net.INetworkManagementEventObserver
-android.net.INetworkManagementEventObserver$Stub
-android.net.INetworkPolicyListener
-android.net.INetworkPolicyListener$Stub
-android.net.INetworkPolicyListener$Stub$Proxy
-android.net.INetworkPolicyManager
-android.net.INetworkPolicyManager$Stub
-android.net.INetworkPolicyManager$Stub$Proxy
-android.net.INetworkRecommendationProvider
-android.net.INetworkRecommendationProvider$Stub
-android.net.INetworkRecommendationProvider$Stub$Proxy
-android.net.INetworkScoreCache
-android.net.INetworkScoreCache$Stub
-android.net.INetworkScoreCache$Stub$Proxy
-android.net.INetworkScoreService
-android.net.INetworkScoreService$Stub
-android.net.INetworkScoreService$Stub$Proxy
-android.net.INetworkStatsService
-android.net.INetworkStatsService$Stub
-android.net.INetworkStatsService$Stub$Proxy
-android.net.INetworkStatsSession
-android.net.InterfaceConfiguration
-android.net.InterfaceConfiguration$1
-android.net.IpConfiguration
-android.net.IpConfiguration$1
-android.net.IpConfiguration$IpAssignment
-android.net.IpConfiguration$ProxySettings
-android.net.IpPrefix
-android.net.IpPrefix$1
-android.net.IpSecConfig
-android.net.IpSecManager
-android.net.LinkAddress
-android.net.LinkAddress$1
-android.net.LinkProperties
-android.net.LinkProperties$1
-android.net.LinkProperties$CompareResult
-android.net.LinkProperties$ProvisioningChange
-android.net.LocalServerSocket
-android.net.LocalSocket
-android.net.LocalSocketAddress
-android.net.LocalSocketAddress$Namespace
-android.net.LocalSocketImpl
-android.net.LocalSocketImpl$SocketInputStream
-android.net.LocalSocketImpl$SocketOutputStream
-android.net.MatchAllNetworkSpecifier
-android.net.MatchAllNetworkSpecifier$1
-android.net.Network
-android.net.Network$1
-android.net.Network$2
-android.net.Network$NetworkBoundSocketFactory
-android.net.NetworkAgent
-android.net.NetworkCapabilities
-android.net.NetworkCapabilities$1
-android.net.NetworkConfig
-android.net.NetworkFactory
-android.net.NetworkFactory$NetworkRequestInfo
-android.net.NetworkIdentity
-android.net.NetworkInfo
-android.net.NetworkInfo$1
-android.net.NetworkInfo$DetailedState
-android.net.NetworkInfo$State
-android.net.NetworkKey
-android.net.NetworkKey$1
-android.net.NetworkMisc
-android.net.NetworkMisc$1
-android.net.NetworkPolicy
-android.net.NetworkPolicy$1
-android.net.NetworkPolicyManager
-android.net.NetworkQuotaInfo
-android.net.NetworkRecommendationProvider
-android.net.NetworkRecommendationProvider$ServiceWrapper
-android.net.NetworkRecommendationProvider$ServiceWrapper$1
-android.net.NetworkRequest
-android.net.NetworkRequest$1
-android.net.NetworkRequest$Builder
-android.net.NetworkRequest$Type
-android.net.NetworkScoreManager
-android.net.NetworkScorerAppData
-android.net.NetworkScorerAppData$1
-android.net.NetworkSpecifier
-android.net.NetworkState
-android.net.NetworkState$1
-android.net.NetworkStats
-android.net.NetworkStats$1
-android.net.NetworkStats$Entry
-android.net.NetworkStats$NonMonotonicObserver
-android.net.NetworkStatsHistory
-android.net.NetworkStatsHistory$1
-android.net.NetworkStatsHistory$DataStreamUtils
-android.net.NetworkStatsHistory$Entry
-android.net.NetworkTemplate
-android.net.NetworkTemplate$1
-android.net.NetworkUtils
-android.net.ParseException
-android.net.Proxy
-android.net.ProxyInfo
-android.net.ProxyInfo$1
-android.net.RouteInfo
-android.net.RouteInfo$1
-android.net.RssiCurve
-android.net.RssiCurve$1
-android.net.SSLCertificateSocketFactory
-android.net.SSLCertificateSocketFactory$1
-android.net.SSLSessionCache
-android.net.ScoredNetwork
-android.net.ScoredNetwork$1
-android.net.SntpClient
-android.net.StaticIpConfiguration
-android.net.StaticIpConfiguration$1
-android.net.StringNetworkSpecifier
-android.net.StringNetworkSpecifier$1
-android.net.TrafficStats
-android.net.UidRange
-android.net.Uri
-android.net.Uri$1
-android.net.Uri$AbstractHierarchicalUri
-android.net.Uri$AbstractPart
-android.net.Uri$Builder
-android.net.Uri$HierarchicalUri
-android.net.Uri$OpaqueUri
-android.net.Uri$Part
-android.net.Uri$Part$EmptyPart
-android.net.Uri$PathPart
-android.net.Uri$PathSegments
-android.net.Uri$PathSegmentsBuilder
-android.net.Uri$StringUri
-android.net.WebAddress
-android.net.WifiKey
-android.net.WifiKey$1
-android.net.http.AndroidHttpClient
-android.net.http.AndroidHttpClient$1
-android.net.http.AndroidHttpClient$2
-android.net.http.AndroidHttpClient$CurlLogger
-android.net.http.AndroidHttpClient$LoggingConfiguration
-android.net.http.HttpResponseCache
-android.net.http.SslCertificate
-android.net.http.X509TrustManagerExtensions
-android.net.metrics.ApfProgramEvent
-android.net.metrics.ApfProgramEvent$1
-android.net.metrics.ApfStats
-android.net.metrics.ApfStats$1
-android.net.metrics.ConnectStats
-android.net.metrics.DefaultNetworkEvent
-android.net.metrics.DefaultNetworkEvent$1
-android.net.metrics.DhcpClientEvent
-android.net.metrics.DhcpClientEvent$1
-android.net.metrics.DnsEvent
-android.net.metrics.IpConnectivityLog
-android.net.metrics.IpManagerEvent
-android.net.metrics.IpManagerEvent$1
-android.net.metrics.NetworkEvent
-android.net.metrics.NetworkEvent$1
-android.net.metrics.RaEvent
-android.net.metrics.RaEvent$1
-android.net.metrics.RaEvent$Builder
-android.net.metrics.ValidationProbeEvent
-android.net.metrics.ValidationProbeEvent$1
-android.net.metrics.ValidationProbeEvent$Decoder
-android.net.nsd.INsdManager
-android.net.nsd.INsdManager$Stub
-android.net.nsd.NsdManager
-android.net.sip.ISipService
-android.net.sip.ISipService$Stub
-android.net.sip.SipManager
-android.net.wifi.IRttManager
-android.net.wifi.IRttManager$Stub
-android.net.wifi.IWifiManager
-android.net.wifi.IWifiManager$Stub
-android.net.wifi.IWifiManager$Stub$Proxy
-android.net.wifi.IWifiScanner
-android.net.wifi.IWifiScanner$Stub
-android.net.wifi.IWifiScanner$Stub$Proxy
-android.net.wifi.ParcelUtil
-android.net.wifi.RttManager
-android.net.wifi.RttManager$RttCapabilities
-android.net.wifi.RttManager$RttListener
-android.net.wifi.RttManager$RttResult
-android.net.wifi.ScanResult
-android.net.wifi.ScanResult$1
-android.net.wifi.ScanResult$InformationElement
-android.net.wifi.ScanSettings
-android.net.wifi.SupplicantState
-android.net.wifi.SupplicantState$1
-android.net.wifi.WifiActivityEnergyInfo
-android.net.wifi.WifiActivityEnergyInfo$1
-android.net.wifi.WifiConfiguration
-android.net.wifi.WifiConfiguration$1
-android.net.wifi.WifiConfiguration$KeyMgmt
-android.net.wifi.WifiConfiguration$NetworkSelectionStatus
-android.net.wifi.WifiConfiguration$Visibility
-android.net.wifi.WifiConnectionStatistics
-android.net.wifi.WifiConnectionStatistics$1
-android.net.wifi.WifiEnterpriseConfig
-android.net.wifi.WifiEnterpriseConfig$1
-android.net.wifi.WifiInfo
-android.net.wifi.WifiInfo$1
-android.net.wifi.WifiLinkLayerStats
-android.net.wifi.WifiLinkLayerStats$1
-android.net.wifi.WifiManager
-android.net.wifi.WifiManager$ActionListener
-android.net.wifi.WifiManager$MulticastLock
-android.net.wifi.WifiManager$WifiLock
-android.net.wifi.WifiNetworkScoreCache
-android.net.wifi.WifiNetworkScoreCache$CacheListener
-android.net.wifi.WifiNetworkScoreCache$CacheListener$1
-android.net.wifi.WifiScanner
-android.net.wifi.WifiScanner$ActionListener
-android.net.wifi.WifiScanner$ChannelSpec
-android.net.wifi.WifiScanner$ParcelableScanData
-android.net.wifi.WifiScanner$ParcelableScanData$1
-android.net.wifi.WifiScanner$ParcelableScanResults
-android.net.wifi.WifiScanner$ParcelableScanResults$1
-android.net.wifi.WifiScanner$PnoScanListener
-android.net.wifi.WifiScanner$ScanData
-android.net.wifi.WifiScanner$ScanData$1
-android.net.wifi.WifiScanner$ScanListener
-android.net.wifi.WifiScanner$ScanSettings
-android.net.wifi.WifiScanner$ScanSettings$1
-android.net.wifi.WifiScanner$ScanSettings$HiddenNetwork
-android.net.wifi.WifiScanner$ServiceHandler
-android.net.wifi.WifiSsid
-android.net.wifi.WifiSsid$1
-android.net.wifi.WpsInfo
-android.net.wifi.WpsInfo$1
-android.net.wifi.aware.WifiAwareManager
-android.net.wifi.hotspot2.PasspointConfiguration
-android.net.wifi.p2p.IWifiP2pManager
-android.net.wifi.p2p.IWifiP2pManager$Stub
-android.net.wifi.p2p.WifiP2pConfig
-android.net.wifi.p2p.WifiP2pConfig$1
-android.net.wifi.p2p.WifiP2pDevice
-android.net.wifi.p2p.WifiP2pDevice$1
-android.net.wifi.p2p.WifiP2pDeviceList
-android.net.wifi.p2p.WifiP2pDeviceList$1
-android.net.wifi.p2p.WifiP2pGroup
-android.net.wifi.p2p.WifiP2pGroup$1
-android.net.wifi.p2p.WifiP2pGroupList
-android.net.wifi.p2p.WifiP2pGroupList$1
-android.net.wifi.p2p.WifiP2pGroupList$2
-android.net.wifi.p2p.WifiP2pGroupList$GroupDeleteListener
-android.net.wifi.p2p.WifiP2pInfo
-android.net.wifi.p2p.WifiP2pInfo$1
-android.net.wifi.p2p.WifiP2pManager
-android.net.wifi.p2p.WifiP2pWfdInfo
-android.net.wifi.p2p.WifiP2pWfdInfo$1
-android.nfc.BeamShareData
-android.nfc.FormatException
-android.nfc.IAppCallback
-android.nfc.IAppCallback$Stub
-android.nfc.IAppCallback$Stub$Proxy
-android.nfc.INfcAdapter
-android.nfc.INfcAdapter$Stub
-android.nfc.INfcAdapter$Stub$Proxy
-android.nfc.INfcAdapterExtras
-android.nfc.INfcCardEmulation
-android.nfc.INfcCardEmulation$Stub
-android.nfc.INfcCardEmulation$Stub$Proxy
-android.nfc.INfcFCardEmulation
-android.nfc.INfcFCardEmulation$Stub
-android.nfc.INfcFCardEmulation$Stub$Proxy
-android.nfc.INfcTag
-android.nfc.INfcTag$Stub
-android.nfc.INfcTag$Stub$Proxy
-android.nfc.INfcUnlockHandler
-android.nfc.ITagRemovedCallback
-android.nfc.NdefMessage
-android.nfc.NfcActivityManager
-android.nfc.NfcActivityManager$NfcActivityState
-android.nfc.NfcActivityManager$NfcApplicationState
-android.nfc.NfcAdapter
-android.nfc.NfcAdapter$1
-android.nfc.NfcAdapter$CreateBeamUrisCallback
-android.nfc.NfcAdapter$CreateNdefMessageCallback
-android.nfc.NfcAdapter$OnNdefPushCompleteCallback
-android.nfc.NfcEvent
-android.nfc.NfcManager
-android.nfc.Tag
-android.nfc.TechListParcel
-android.nfc.TransceiveResult
-android.nfc.cardemulation.AidGroup
-android.nfc.cardemulation.AidGroup$1
-android.nfc.cardemulation.ApduServiceInfo
-android.nfc.cardemulation.ApduServiceInfo$1
-android.nfc.cardemulation.CardEmulation
-android.nfc.cardemulation.HostApduService
-android.nfc.cardemulation.HostApduService$MsgHandler
-android.opengl.EGL14
-android.opengl.EGLConfig
-android.opengl.EGLContext
-android.opengl.EGLDisplay
-android.opengl.EGLExt
-android.opengl.EGLObjectHandle
-android.opengl.EGLSurface
-android.opengl.ETC1
-android.opengl.GLES10
-android.opengl.GLES10Ext
-android.opengl.GLES11
-android.opengl.GLES11Ext
-android.opengl.GLES20
-android.opengl.GLES30
-android.opengl.GLES31
-android.opengl.GLES31Ext
-android.opengl.GLES32
-android.opengl.GLUtils
-android.opengl.Matrix
-android.opengl.Visibility
-android.os.-$Lambda$-dncxFEc2F2bgG2fsIoC6FC6WNE
-android.os.-$Lambda$-dncxFEc2F2bgG2fsIoC6FC6WNE$1
-android.os.-$Lambda$6x30vPJhBKUfNY8tswxuZo3DCe0
-android.os.AsyncResult
-android.os.AsyncTask
-android.os.AsyncTask$1
-android.os.AsyncTask$2
-android.os.AsyncTask$3
-android.os.AsyncTask$AsyncTaskResult
-android.os.AsyncTask$InternalHandler
-android.os.AsyncTask$SerialExecutor
-android.os.AsyncTask$SerialExecutor$1
-android.os.AsyncTask$Status
-android.os.AsyncTask$WorkerRunnable
-android.os.BadParcelableException
-android.os.BaseBundle
-android.os.BaseBundle$NoImagePreloadHolder
-android.os.BatteryManager
-android.os.BatteryManagerInternal
-android.os.BatteryProperties
-android.os.BatteryProperties$1
-android.os.BatteryStats
-android.os.BatteryStats$BitDescription
-android.os.BatteryStats$ControllerActivityCounter
-android.os.BatteryStats$Counter
-android.os.BatteryStats$DailyItem
-android.os.BatteryStats$HistoryEventTracker
-android.os.BatteryStats$HistoryItem
-android.os.BatteryStats$HistoryStepDetails
-android.os.BatteryStats$HistoryTag
-android.os.BatteryStats$IntToString
-android.os.BatteryStats$LevelStepTracker
-android.os.BatteryStats$LongCounter
-android.os.BatteryStats$LongCounterArray
-android.os.BatteryStats$PackageChange
-android.os.BatteryStats$Timer
-android.os.BatteryStats$Uid
-android.os.BatteryStats$Uid$Pid
-android.os.BatteryStats$Uid$Pkg
-android.os.BatteryStats$Uid$Pkg$Serv
-android.os.BatteryStats$Uid$Sensor
-android.os.BatteryStats$Uid$Wakelock
-android.os.Binder
-android.os.BinderProxy
-android.os.Build
-android.os.Build$VERSION
-android.os.Bundle
-android.os.Bundle$1
-android.os.CancellationSignal
-android.os.CancellationSignal$OnCancelListener
-android.os.CancellationSignal$Transport
-android.os.CommonTimeConfig$OnServerDiedListener
-android.os.ConditionVariable
-android.os.CountDownTimer
-android.os.CpuUsageInfo
-android.os.CpuUsageInfo$1
-android.os.DeadObjectException
-android.os.DeadSystemException
-android.os.Debug
-android.os.Debug$MemoryInfo
-android.os.Debug$MemoryInfo$1
-android.os.DropBoxManager
-android.os.DropBoxManager$Entry
-android.os.DropBoxManager$Entry$1
-android.os.Environment
-android.os.Environment$UserEnvironment
-android.os.FactoryTest
-android.os.FileBridge
-android.os.FileBridge$FileBridgeOutputStream
-android.os.FileObserver$ObserverThread
-android.os.FileUtils
-android.os.GraphicsEnvironment
-android.os.Handler
-android.os.Handler$BlockingRunnable
-android.os.Handler$Callback
-android.os.Handler$MessengerImpl
-android.os.HandlerThread
-android.os.HardwarePropertiesManager
-android.os.HwBinder
-android.os.HwBlob
-android.os.HwParcel
-android.os.HwRemoteBinder
-android.os.IBatteryPropertiesListener
-android.os.IBatteryPropertiesListener$Stub
-android.os.IBatteryPropertiesRegistrar
-android.os.IBatteryPropertiesRegistrar$Stub
-android.os.IBatteryPropertiesRegistrar$Stub$Proxy
-android.os.IBinder
-android.os.IBinder$DeathRecipient
-android.os.ICancellationSignal
-android.os.ICancellationSignal$Stub
-android.os.ICancellationSignal$Stub$Proxy
-android.os.IDeviceIdentifiersPolicyService
-android.os.IDeviceIdentifiersPolicyService$Stub
-android.os.IDeviceIdleController
-android.os.IDeviceIdleController$Stub
-android.os.IDeviceIdleController$Stub$Proxy
-android.os.IHardwarePropertiesManager
-android.os.IHardwarePropertiesManager$Stub
-android.os.IHardwarePropertiesManager$Stub$Proxy
-android.os.IHwBinder
-android.os.IHwBinder$DeathRecipient
-android.os.IHwInterface
-android.os.IIncidentManager
-android.os.IIncidentManager$Stub
-android.os.IInstalld
-android.os.IInstalld$Stub
-android.os.IInstalld$Stub$Proxy
-android.os.IInterface
-android.os.IMaintenanceActivityListener
-android.os.IMessenger
-android.os.IMessenger$Stub
-android.os.IMessenger$Stub$Proxy
-android.os.INetworkActivityListener
-android.os.INetworkManagementService
-android.os.INetworkManagementService$Stub
-android.os.INetworkManagementService$Stub$Proxy
-android.os.IPermissionController
-android.os.IPermissionController$Stub
-android.os.IPowerManager
-android.os.IPowerManager$Stub
-android.os.IPowerManager$Stub$Proxy
-android.os.IProcessInfoService
-android.os.IProcessInfoService$Stub
-android.os.IProgressListener
-android.os.IRecoverySystem
-android.os.IRecoverySystem$Stub
-android.os.IRecoverySystemProgressListener
-android.os.IRemoteCallback
-android.os.IRemoteCallback$Stub
-android.os.IRemoteCallback$Stub$Proxy
-android.os.ISchedulingPolicyService
-android.os.ISchedulingPolicyService$Stub
-android.os.IServiceManager
-android.os.IUpdateLock
-android.os.IUpdateLock$Stub
-android.os.IUserManager
-android.os.IUserManager$Stub
-android.os.IUserManager$Stub$Proxy
-android.os.IVibratorService
-android.os.IVibratorService$Stub
-android.os.IVibratorService$Stub$Proxy
-android.os.IncidentManager
-android.os.LocaleList
-android.os.LocaleList$1
-android.os.Looper
-android.os.MemoryFile
-android.os.Message
-android.os.Message$1
-android.os.MessageQueue
-android.os.MessageQueue$FileDescriptorRecord
-android.os.MessageQueue$IdleHandler
-android.os.MessageQueue$OnFileDescriptorEventListener
-android.os.Messenger
-android.os.Messenger$1
-android.os.OperationCanceledException
-android.os.Parcel
-android.os.Parcel$1
-android.os.Parcel$2
-android.os.ParcelFileDescriptor
-android.os.ParcelFileDescriptor$1
-android.os.ParcelFileDescriptor$2
-android.os.ParcelFileDescriptor$AutoCloseInputStream
-android.os.ParcelFileDescriptor$AutoCloseOutputStream
-android.os.ParcelFileDescriptor$OnCloseListener
-android.os.ParcelFileDescriptor$Status
-android.os.ParcelFormatException
-android.os.ParcelUuid
-android.os.ParcelUuid$1
-android.os.Parcelable
-android.os.Parcelable$ClassLoaderCreator
-android.os.Parcelable$Creator
-android.os.ParcelableException
-android.os.ParcelableParcel
-android.os.ParcelableParcel$1
-android.os.PatternMatcher
-android.os.PatternMatcher$1
-android.os.PersistableBundle
-android.os.PersistableBundle$1
-android.os.PersistableBundle$MyReadMapCallback
-android.os.PooledStringReader
-android.os.PooledStringWriter
-android.os.PowerManager
-android.os.PowerManager$WakeLock
-android.os.PowerManager$WakeLock$1
-android.os.PowerManagerInternal
-android.os.PowerManagerInternal$LowPowerModeListener
-android.os.PowerSaveState
-android.os.PowerSaveState$1
-android.os.PowerSaveState$Builder
-android.os.Process
-android.os.Process$ProcessStartResult
-android.os.RecoverySystem
-android.os.RecoverySystem$ProgressListener
-android.os.Registrant
-android.os.RegistrantList
-android.os.RemoteCallback
-android.os.RemoteCallback$1
-android.os.RemoteCallback$2
-android.os.RemoteCallback$OnResultListener
-android.os.RemoteCallbackList
-android.os.RemoteCallbackList$Callback
-android.os.RemoteException
-android.os.ResultReceiver
-android.os.ResultReceiver$1
-android.os.ResultReceiver$MyResultReceiver
-android.os.ResultReceiver$MyRunnable
-android.os.SELinux
-android.os.Seccomp
-android.os.ServiceManager
-android.os.ServiceManager$ServiceNotFoundException
-android.os.ServiceManagerNative
-android.os.ServiceManagerProxy
-android.os.ServiceSpecificException
-android.os.ShellCallback
-android.os.StatFs
-android.os.StrictMode
-android.os.StrictMode$1
-android.os.StrictMode$2
-android.os.StrictMode$3
-android.os.StrictMode$4
-android.os.StrictMode$5
-android.os.StrictMode$6
-android.os.StrictMode$7
-android.os.StrictMode$8
-android.os.StrictMode$9
-android.os.StrictMode$AndroidBlockGuardPolicy
-android.os.StrictMode$AndroidBlockGuardPolicy$1
-android.os.StrictMode$AndroidCloseGuardReporter
-android.os.StrictMode$InstanceCountViolation
-android.os.StrictMode$InstanceTracker
-android.os.StrictMode$LogStackTrace
-android.os.StrictMode$Span
-android.os.StrictMode$StrictModeCustomViolation
-android.os.StrictMode$StrictModeDiskReadViolation
-android.os.StrictMode$StrictModeDiskWriteViolation
-android.os.StrictMode$StrictModeViolation
-android.os.StrictMode$ThreadPolicy
-android.os.StrictMode$ThreadPolicy$Builder
-android.os.StrictMode$ThreadSpanState
-android.os.StrictMode$ViolationInfo
-android.os.StrictMode$ViolationInfo$1
-android.os.StrictMode$VmPolicy
-android.os.StrictMode$VmPolicy$Builder
-android.os.SynchronousResultReceiver
-android.os.SynchronousResultReceiver$Result
-android.os.SystemClock
-android.os.SystemProperties
-android.os.SystemService
-android.os.SystemService$1
-android.os.SystemService$State
-android.os.SystemVibrator
-android.os.TokenWatcher
-android.os.TokenWatcher$1
-android.os.Trace
-android.os.Trace$1
-android.os.TransactionTooLargeException
-android.os.UEventObserver
-android.os.UEventObserver$UEvent
-android.os.UEventObserver$UEventThread
-android.os.UpdateLock
-android.os.UserHandle
-android.os.UserHandle$1
-android.os.UserManager
-android.os.UserManager$EnforcingUser
-android.os.UserManager$EnforcingUser$1
-android.os.UserManagerInternal
-android.os.UserManagerInternal$UserRestrictionsListener
-android.os.VibrationEffect
-android.os.VibrationEffect$1
-android.os.VibrationEffect$OneShot
-android.os.VibrationEffect$Prebaked
-android.os.VibrationEffect$Prebaked$1
-android.os.VibrationEffect$Waveform
-android.os.VibrationEffect$Waveform$1
-android.os.Vibrator
-android.os.VintfObject
-android.os.VintfRuntimeInfo
-android.os.WorkSource
-android.os.WorkSource$1
-android.os.ZygoteProcess
-android.os.ZygoteProcess$ZygoteState
-android.os.ZygoteStartFailedEx
-android.os.health.HealthStatsParceler
-android.os.health.SystemHealthManager
-android.os.storage.DiskInfo
-android.os.storage.DiskInfo$1
-android.os.storage.IObbActionListener
-android.os.storage.IObbActionListener$Stub
-android.os.storage.IStorageEventListener
-android.os.storage.IStorageEventListener$Stub
-android.os.storage.IStorageEventListener$Stub$Proxy
-android.os.storage.IStorageManager
-android.os.storage.IStorageManager$Stub
-android.os.storage.IStorageManager$Stub$Proxy
-android.os.storage.IStorageShutdownObserver
-android.os.storage.StorageEventListener
-android.os.storage.StorageManager
-android.os.storage.StorageManager$ObbActionListener
-android.os.storage.StorageManager$StorageEventListenerDelegate
-android.os.storage.StorageManagerInternal
-android.os.storage.StorageManagerInternal$ExternalStorageMountPolicy
-android.os.storage.StorageVolume
-android.os.storage.StorageVolume$1
-android.os.storage.VolumeInfo
-android.os.storage.VolumeInfo$1
-android.os.storage.VolumeInfo$2
-android.os.storage.VolumeRecord
-android.os.storage.VolumeRecord$1
-android.preference.GenericInflater$Parent
-android.preference.Preference
-android.preference.Preference$BaseSavedState
-android.preference.Preference$BaseSavedState$1
-android.preference.Preference$OnPreferenceChangeListener
-android.preference.PreferenceActivity
-android.preference.PreferenceFragment
-android.preference.PreferenceFragment$OnPreferenceStartFragmentCallback
-android.preference.PreferenceGroup
-android.preference.PreferenceManager
-android.preference.PreferenceManager$OnPreferenceTreeClickListener
-android.preference.PreferenceScreen
-android.print.IPrintDocumentAdapter
-android.print.IPrintJobStateChangeListener
-android.print.IPrintManager
-android.print.IPrintManager$Stub
-android.print.IPrintServicesChangeListener
-android.print.IPrintSpooler
-android.print.IPrintSpooler$Stub
-android.print.IPrintSpooler$Stub$Proxy
-android.print.IPrintSpoolerCallbacks
-android.print.IPrintSpoolerCallbacks$Stub
-android.print.IPrintSpoolerClient
-android.print.IPrintSpoolerClient$Stub
-android.print.IPrinterDiscoveryObserver
-android.print.PageRange
-android.print.PrintAttributes
-android.print.PrintDocumentAdapter
-android.print.PrintDocumentAdapter$LayoutResultCallback
-android.print.PrintDocumentAdapter$WriteResultCallback
-android.print.PrintJobId
-android.print.PrintJobInfo
-android.print.PrintManager
-android.print.PrinterId
-android.printservice.IPrintServiceClient
-android.printservice.IPrintServiceClient$Stub
-android.printservice.PrintServiceInfo
-android.printservice.PrintServiceInfo$1
-android.printservice.recommendation.IRecommendationsChangeListener
-android.provider.-$Lambda$87WmhkvObehVg0OMBzwa_MTVV8g
-android.provider.-$Lambda$a7Jyr6j_Mb70hHJ2ssL1AAhKh4c
-android.provider.BaseColumns
-android.provider.BlockedNumberContract
-android.provider.BlockedNumberContract$BlockedNumbers
-android.provider.CalendarContract
-android.provider.CalendarContract$Attendees
-android.provider.CalendarContract$AttendeesColumns
-android.provider.CalendarContract$CalendarAlerts
-android.provider.CalendarContract$CalendarAlertsColumns
-android.provider.CalendarContract$CalendarCache
-android.provider.CalendarContract$CalendarCacheColumns
-android.provider.CalendarContract$CalendarColumns
-android.provider.CalendarContract$CalendarSyncColumns
-android.provider.CalendarContract$Calendars
-android.provider.CalendarContract$Colors
-android.provider.CalendarContract$ColorsColumns
-android.provider.CalendarContract$Events
-android.provider.CalendarContract$EventsColumns
-android.provider.CalendarContract$ExtendedProperties
-android.provider.CalendarContract$ExtendedPropertiesColumns
-android.provider.CalendarContract$Instances
-android.provider.CalendarContract$Reminders
-android.provider.CalendarContract$RemindersColumns
-android.provider.CalendarContract$SyncColumns
-android.provider.CallLog
-android.provider.CallLog$Calls
-android.provider.ContactsContract
-android.provider.ContactsContract$BaseSyncColumns
-android.provider.ContactsContract$CommonDataKinds$BaseTypes
-android.provider.ContactsContract$CommonDataKinds$Callable
-android.provider.ContactsContract$CommonDataKinds$CommonColumns
-android.provider.ContactsContract$CommonDataKinds$Email
-android.provider.ContactsContract$CommonDataKinds$Event
-android.provider.ContactsContract$CommonDataKinds$Im
-android.provider.ContactsContract$CommonDataKinds$Phone
-android.provider.ContactsContract$CommonDataKinds$Relation
-android.provider.ContactsContract$CommonDataKinds$StructuredPostal
-android.provider.ContactsContract$ContactCounts
-android.provider.ContactsContract$ContactNameColumns
-android.provider.ContactsContract$ContactOptionsColumns
-android.provider.ContactsContract$ContactStatusColumns
-android.provider.ContactsContract$Contacts
-android.provider.ContactsContract$ContactsColumns
-android.provider.ContactsContract$Data
-android.provider.ContactsContract$DataColumns
-android.provider.ContactsContract$DataColumnsWithJoins
-android.provider.ContactsContract$DataUsageFeedback
-android.provider.ContactsContract$DataUsageStatColumns
-android.provider.ContactsContract$DeletedContacts
-android.provider.ContactsContract$DeletedContactsColumns
-android.provider.ContactsContract$Directory
-android.provider.ContactsContract$DisplayPhoto
-android.provider.ContactsContract$Groups
-android.provider.ContactsContract$GroupsColumns
-android.provider.ContactsContract$MetadataSync
-android.provider.ContactsContract$MetadataSyncColumns
-android.provider.ContactsContract$PhoneLookup
-android.provider.ContactsContract$PhoneLookupColumns
-android.provider.ContactsContract$Profile
-android.provider.ContactsContract$ProviderStatus
-android.provider.ContactsContract$RawContacts
-android.provider.ContactsContract$RawContactsColumns
-android.provider.ContactsContract$RawContactsEntity
-android.provider.ContactsContract$StatusColumns
-android.provider.ContactsContract$SyncColumns
-android.provider.DocumentsContract
-android.provider.DocumentsContract$Path
-android.provider.DocumentsProvider
-android.provider.Downloads
-android.provider.Downloads$Impl
-android.provider.FontsContract
-android.provider.FontsContract$1
-android.provider.MediaStore$Audio
-android.provider.MediaStore$Audio$AlbumColumns
-android.provider.MediaStore$Audio$Albums
-android.provider.MediaStore$Audio$AudioColumns
-android.provider.MediaStore$Audio$Media
-android.provider.MediaStore$Audio$Playlists
-android.provider.MediaStore$Audio$PlaylistsColumns
-android.provider.MediaStore$Files
-android.provider.MediaStore$Images$ImageColumns
-android.provider.MediaStore$Images$Media
-android.provider.MediaStore$Images$Thumbnails
-android.provider.MediaStore$MediaColumns
-android.provider.MediaStore$Video$Media
-android.provider.MediaStore$Video$VideoColumns
-android.provider.OpenableColumns
-android.provider.SearchIndexableData
-android.provider.SearchIndexableResource
-android.provider.SearchIndexablesProvider
-android.provider.SearchRecentSuggestions
-android.provider.Settings
-android.provider.Settings$ContentProviderHolder
-android.provider.Settings$GenerationTracker
-android.provider.Settings$Global
-android.provider.Settings$NameValueCache
-android.provider.Settings$NameValueTable
-android.provider.Settings$Secure
-android.provider.Settings$SettingNotFoundException
-android.provider.Settings$System
-android.provider.Settings$System$1
-android.provider.Settings$System$2
-android.provider.Settings$System$3
-android.provider.Settings$System$4
-android.provider.Settings$System$5
-android.provider.Settings$System$6
-android.provider.Settings$System$7
-android.provider.Settings$System$8
-android.provider.Settings$System$9
-android.provider.Settings$System$DiscreteValueValidator
-android.provider.Settings$System$InclusiveFloatRangeValidator
-android.provider.Settings$System$InclusiveIntegerRangeValidator
-android.provider.Settings$System$Validator
-android.provider.SyncStateContract$Columns
-android.provider.Telephony$BaseMmsColumns
-android.provider.Telephony$Carriers
-android.provider.Telephony$Mms
-android.provider.Telephony$MmsSms
-android.provider.Telephony$ServiceStateTable
-android.provider.Telephony$Sms
-android.provider.Telephony$TextBasedSmsColumns
-android.provider.Telephony$Threads
-android.provider.Telephony$ThreadsColumns
-android.provider.UserDictionary$Words
-android.provider.VoicemailContract$Status
-android.provider.VoicemailContract$Voicemails
-android.renderscript.Allocation
-android.renderscript.BaseObj
-android.renderscript.Matrix4f
-android.renderscript.RenderScriptCacheDir
-android.security.GateKeeper
-android.security.IKeyChainService
-android.security.IKeyChainService$Stub
-android.security.IKeyChainService$Stub$Proxy
-android.security.IKeystoreService
-android.security.IKeystoreService$Stub
-android.security.IKeystoreService$Stub$Proxy
-android.security.KeyChain
-android.security.KeyChain$1
-android.security.KeyChain$KeyChainConnection
-android.security.KeyStore
-android.security.NetworkSecurityPolicy
-android.security.keymaster.IKeyAttestationApplicationIdProvider
-android.security.keymaster.IKeyAttestationApplicationIdProvider$Stub
-android.security.keymaster.KeyAttestationApplicationId
-android.security.keymaster.KeymasterArguments
-android.security.keymaster.KeymasterArguments$1
-android.security.keystore.AndroidKeyStoreBCWorkaroundProvider
-android.security.keystore.AndroidKeyStoreKeyGeneratorSpi
-android.security.keystore.AndroidKeyStoreKeyGeneratorSpi$AES
-android.security.keystore.AndroidKeyStoreProvider
-android.security.keystore.AndroidKeyStoreSpi
-android.security.keystore.ArrayUtils
-android.security.keystore.KeyGenParameterSpec
-android.security.keystore.KeyGenParameterSpec$Builder
-android.security.keystore.KeyInfo
-android.security.keystore.KeyPermanentlyInvalidatedException
-android.security.keystore.KeyProperties
-android.security.keystore.KeyProperties$BlockMode
-android.security.keystore.KeyProperties$EncryptionPadding
-android.security.keystore.KeyProperties$Purpose
-android.security.keystore.KeymasterUtils
-android.security.keystore.UserNotAuthenticatedException
-android.security.keystore.Utils
-android.security.net.config.ApplicationConfig
-android.security.net.config.CertificateSource
-android.security.net.config.CertificatesEntryRef
-android.security.net.config.ConfigNetworkSecurityPolicy
-android.security.net.config.ConfigSource
-android.security.net.config.DirectoryCertificateSource
-android.security.net.config.DirectoryCertificateSource$1
-android.security.net.config.DirectoryCertificateSource$3
-android.security.net.config.DirectoryCertificateSource$CertSelector
-android.security.net.config.KeyStoreCertificateSource
-android.security.net.config.KeyStoreConfigSource
-android.security.net.config.ManifestConfigSource
-android.security.net.config.ManifestConfigSource$DefaultConfigSource
-android.security.net.config.NetworkSecurityConfig
-android.security.net.config.NetworkSecurityConfig$1
-android.security.net.config.NetworkSecurityConfig$Builder
-android.security.net.config.NetworkSecurityConfigProvider
-android.security.net.config.NetworkSecurityTrustManager
-android.security.net.config.PinSet
-android.security.net.config.RootTrustManager
-android.security.net.config.RootTrustManagerFactorySpi
-android.security.net.config.SystemCertificateSource
-android.security.net.config.TrustedCertificateStoreAdapter
-android.security.net.config.UserCertificateSource
-android.security.net.config.XmlConfigSource
-android.security.net.config.XmlConfigSource$ParserException
-android.service.autofill.-$Lambda$svbjmB3NFhHnuZrn67G14PFSJlY
-android.service.autofill.AutofillService
-android.service.autofill.AutofillService$1
-android.service.autofill.AutofillServiceInfo
-android.service.autofill.FillCallback
-android.service.autofill.FillContext
-android.service.autofill.FillContext$1
-android.service.autofill.FillEventHistory
-android.service.autofill.FillRequest
-android.service.autofill.FillRequest$1
-android.service.autofill.FillResponse
-android.service.autofill.IAutoFillService
-android.service.autofill.IAutoFillService$Stub
-android.service.autofill.IAutoFillService$Stub$Proxy
-android.service.autofill.IFillCallback
-android.service.autofill.IFillCallback$Stub
-android.service.autofill.IFillCallback$Stub$Proxy
-android.service.autofill.SaveCallback
-android.service.autofill.SaveRequest
-android.service.carrier.CarrierIdentifier
-android.service.carrier.CarrierIdentifier$1
-android.service.carrier.ICarrierService
-android.service.carrier.ICarrierService$Stub
-android.service.carrier.ICarrierService$Stub$Proxy
-android.service.dreams.DreamManagerInternal
-android.service.dreams.IDreamManager
-android.service.dreams.IDreamManager$Stub
-android.service.dreams.IDreamManager$Stub$Proxy
-android.service.gatekeeper.IGateKeeperService
-android.service.gatekeeper.IGateKeeperService$Stub
-android.service.gatekeeper.IGateKeeperService$Stub$Proxy
-android.service.media.IMediaBrowserService
-android.service.media.IMediaBrowserService$Stub
-android.service.media.IMediaBrowserService$Stub$Proxy
-android.service.media.IMediaBrowserServiceCallbacks
-android.service.media.IMediaBrowserServiceCallbacks$Stub
-android.service.notification.Adjustment
-android.service.notification.Condition
-android.service.notification.Condition$1
-android.service.notification.ConditionProviderService
-android.service.notification.ConditionProviderService$H
-android.service.notification.ConditionProviderService$Provider
-android.service.notification.IConditionListener
-android.service.notification.IConditionListener$Stub
-android.service.notification.IConditionProvider
-android.service.notification.IConditionProvider$Stub
-android.service.notification.INotificationListener
-android.service.notification.INotificationListener$Stub
-android.service.notification.INotificationListener$Stub$Proxy
-android.service.notification.IStatusBarNotificationHolder
-android.service.notification.IStatusBarNotificationHolder$Stub
-android.service.notification.IStatusBarNotificationHolder$Stub$Proxy
-android.service.notification.NotificationListenerService
-android.service.notification.NotificationListenerService$MyHandler
-android.service.notification.NotificationListenerService$NotificationListenerWrapper
-android.service.notification.NotificationListenerService$Ranking
-android.service.notification.NotificationListenerService$RankingMap
-android.service.notification.NotificationListenerService$RankingMap$1
-android.service.notification.NotificationRankingUpdate
-android.service.notification.NotificationRankingUpdate$1
-android.service.notification.StatusBarNotification
-android.service.notification.StatusBarNotification$1
-android.service.notification.ZenModeConfig
-android.service.notification.ZenModeConfig$1
-android.service.notification.ZenModeConfig$Diff
-android.service.notification.ZenModeConfig$EventInfo
-android.service.notification.ZenModeConfig$ScheduleInfo
-android.service.notification.ZenModeConfig$ZenRule
-android.service.notification.ZenModeConfig$ZenRule$1
-android.service.oemlock.IOemLockService
-android.service.oemlock.IOemLockService$Stub
-android.service.oemlock.OemLockManager
-android.service.persistentdata.IPersistentDataBlockService
-android.service.persistentdata.IPersistentDataBlockService$Stub
-android.service.persistentdata.IPersistentDataBlockService$Stub$Proxy
-android.service.persistentdata.PersistentDataBlockManager
-android.service.quicksettings.IQSService
-android.service.quicksettings.IQSService$Stub
-android.service.quicksettings.Tile
-android.service.textservice.SpellCheckerService
-android.service.textservice.SpellCheckerService$InternalISpellCheckerSession
-android.service.textservice.SpellCheckerService$Session
-android.service.textservice.SpellCheckerService$SpellCheckerServiceBinder
-android.service.voice.AlwaysOnHotwordDetector
-android.service.voice.AlwaysOnHotwordDetector$Callback
-android.service.voice.AlwaysOnHotwordDetector$EventPayload
-android.service.voice.AlwaysOnHotwordDetector$MyHandler
-android.service.voice.AlwaysOnHotwordDetector$RefreshAvailabiltyTask
-android.service.voice.AlwaysOnHotwordDetector$SoundTriggerListener
-android.service.voice.IVoiceInteractionService
-android.service.voice.IVoiceInteractionService$Stub
-android.service.voice.IVoiceInteractionService$Stub$Proxy
-android.service.voice.IVoiceInteractionSession
-android.service.voice.VoiceInteractionManagerInternal
-android.service.voice.VoiceInteractionService
-android.service.voice.VoiceInteractionService$1
-android.service.voice.VoiceInteractionService$MyHandler
-android.service.voice.VoiceInteractionServiceInfo
-android.service.vr.IPersistentVrStateCallbacks
-android.service.vr.IPersistentVrStateCallbacks$Stub
-android.service.vr.IVrManager
-android.service.vr.IVrManager$Stub
-android.service.vr.IVrManager$Stub$Proxy
-android.service.vr.IVrStateCallbacks
-android.service.vr.IVrStateCallbacks$Stub
-android.service.vr.IVrStateCallbacks$Stub$Proxy
-android.service.wallpaper.IWallpaperConnection
-android.service.wallpaper.IWallpaperConnection$Stub
-android.service.wallpaper.IWallpaperConnection$Stub$Proxy
-android.service.wallpaper.IWallpaperEngine
-android.service.wallpaper.IWallpaperEngine$Stub
-android.service.wallpaper.IWallpaperEngine$Stub$Proxy
-android.service.wallpaper.IWallpaperService
-android.service.wallpaper.IWallpaperService$Stub
-android.service.wallpaper.IWallpaperService$Stub$Proxy
-android.service.wallpaper.WallpaperService
-android.service.wallpaper.WallpaperService$Engine
-android.service.wallpaper.WallpaperService$Engine$1
-android.service.wallpaper.WallpaperService$Engine$2
-android.service.wallpaper.WallpaperService$Engine$3
-android.service.wallpaper.WallpaperService$Engine$WallpaperInputEventReceiver
-android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper
-android.service.wallpaper.WallpaperService$IWallpaperServiceWrapper
-android.service.wallpaper.WallpaperService$WallpaperCommand
-android.speech.SpeechRecognizer
-android.speech.tts.AbstractEventLogger
-android.speech.tts.AbstractSynthesisCallback
-android.speech.tts.AudioPlaybackHandler
-android.speech.tts.AudioPlaybackHandler$MessageLoop
-android.speech.tts.EventLogger
-android.speech.tts.FileSynthesisCallback
-android.speech.tts.ITextToSpeechCallback
-android.speech.tts.ITextToSpeechCallback$Stub
-android.speech.tts.ITextToSpeechCallback$Stub$Proxy
-android.speech.tts.ITextToSpeechService
-android.speech.tts.ITextToSpeechService$Stub
-android.speech.tts.ITextToSpeechService$Stub$Proxy
-android.speech.tts.SynthesisCallback
-android.speech.tts.SynthesisRequest
-android.speech.tts.TextToSpeech
-android.speech.tts.TextToSpeech$10
-android.speech.tts.TextToSpeech$16
-android.speech.tts.TextToSpeech$17
-android.speech.tts.TextToSpeech$7
-android.speech.tts.TextToSpeech$Action
-android.speech.tts.TextToSpeech$Connection
-android.speech.tts.TextToSpeech$Connection$1
-android.speech.tts.TextToSpeech$Connection$SetupConnectionAsyncTask
-android.speech.tts.TextToSpeech$EngineInfo
-android.speech.tts.TextToSpeech$OnInitListener
-android.speech.tts.TextToSpeechService
-android.speech.tts.TextToSpeechService$1
-android.speech.tts.TextToSpeechService$CallbackMap
-android.speech.tts.TextToSpeechService$SpeechItem
-android.speech.tts.TextToSpeechService$SynthHandler
-android.speech.tts.TextToSpeechService$SynthHandler$1
-android.speech.tts.TextToSpeechService$SynthHandler$2
-android.speech.tts.TextToSpeechService$SynthThread
-android.speech.tts.TextToSpeechService$SynthesisSpeechItem
-android.speech.tts.TextToSpeechService$SynthesisToFileOutputStreamSpeechItem
-android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher
-android.speech.tts.TextToSpeechService$UtteranceSpeechItem
-android.speech.tts.TextToSpeechService$UtteranceSpeechItemWithParams
-android.speech.tts.TtsEngines
-android.speech.tts.TtsEngines$EngineInfoComparator
-android.speech.tts.UtteranceProgressListener
-android.system.ErrnoException
-android.system.GaiException
-android.system.NetlinkSocketAddress
-android.system.Os
-android.system.OsConstants
-android.system.PacketSocketAddress
-android.system.StructAddrinfo
-android.system.StructFlock
-android.system.StructGroupReq
-android.system.StructGroupSourceReq
-android.system.StructIcmpHdr
-android.system.StructIfaddrs
-android.system.StructLinger
-android.system.StructPasswd
-android.system.StructPollfd
-android.system.StructStat
-android.system.StructStatVfs
-android.system.StructTimeval
-android.system.StructUcred
-android.system.StructUtsname
-android.system.UnixSocketAddress
-android.telecom.-$Lambda$afyb_ODGzn3xMew6fjs8ANSIdVo
-android.telecom.CallAudioState
-android.telecom.CallAudioState$1
-android.telecom.Conference
-android.telecom.Conference$Listener
-android.telecom.Conferenceable
-android.telecom.Connection
-android.telecom.Connection$1
-android.telecom.Connection$2
-android.telecom.Connection$FailureSignalingConnection
-android.telecom.Connection$Listener
-android.telecom.ConnectionRequest
-android.telecom.ConnectionRequest$1
-android.telecom.ConnectionRequest$Builder
-android.telecom.ConnectionService
-android.telecom.ConnectionService$1
-android.telecom.ConnectionService$2
-android.telecom.ConnectionService$2$1
-android.telecom.ConnectionService$3
-android.telecom.ConnectionService$4
-android.telecom.ConnectionService$5
-android.telecom.ConnectionService$5$1
-android.telecom.ConnectionServiceAdapter
-android.telecom.DefaultDialerManager
-android.telecom.DisconnectCause
-android.telecom.DisconnectCause$1
-android.telecom.Log
-android.telecom.Log$1
-android.telecom.Logging.-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24
-android.telecom.Logging.-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24$1
-android.telecom.Logging.-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24$2
-android.telecom.Logging.EventManager
-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.Runnable
-android.telecom.Logging.Runnable$1
-android.telecom.Logging.Session
-android.telecom.Logging.Session$Info
-android.telecom.Logging.Session$Info$1
-android.telecom.Logging.SessionManager
-android.telecom.Logging.SessionManager$ICurrentThreadId
-android.telecom.Logging.SessionManager$ISessionCleanupTimeoutMs
-android.telecom.Logging.SessionManager$ISessionIdQueryHandler
-android.telecom.Logging.SessionManager$ISessionListener
-android.telecom.ParcelableCall
-android.telecom.ParcelableCall$1
-android.telecom.ParcelableConference
-android.telecom.ParcelableConnection
-android.telecom.ParcelableConnection$1
-android.telecom.PhoneAccount
-android.telecom.PhoneAccount$1
-android.telecom.PhoneAccount$Builder
-android.telecom.PhoneAccountHandle
-android.telecom.PhoneAccountHandle$1
-android.telecom.RemoteConnectionManager
-android.telecom.StatusHints
-android.telecom.TelecomAnalytics
-android.telecom.TelecomManager
-android.telecom.VideoProfile
-android.telecom.VideoProfile$1
-android.telephony.CarrierConfigManager
-android.telephony.CellIdentityWcdma
-android.telephony.CellIdentityWcdma$1
-android.telephony.CellInfo
-android.telephony.CellInfo$1
-android.telephony.CellInfoCdma
-android.telephony.CellInfoGsm
-android.telephony.CellInfoLte
-android.telephony.CellInfoWcdma
-android.telephony.CellInfoWcdma$1
-android.telephony.CellLocation
-android.telephony.CellSignalStrength
-android.telephony.CellSignalStrengthWcdma
-android.telephony.CellSignalStrengthWcdma$1
-android.telephony.ClientRequestStats
-android.telephony.ClientRequestStats$1
-android.telephony.DisconnectCause
-android.telephony.IccOpenLogicalChannelResponse
-android.telephony.ModemActivityInfo
-android.telephony.PhoneNumberFormattingTextWatcher
-android.telephony.PhoneNumberUtils
-android.telephony.PhoneStateListener
-android.telephony.PhoneStateListener$1
-android.telephony.PhoneStateListener$IPhoneStateListenerStub
-android.telephony.PreciseCallState
-android.telephony.PreciseCallState$1
-android.telephony.PreciseDataConnectionState
-android.telephony.PreciseDataConnectionState$1
-android.telephony.RadioAccessFamily
-android.telephony.Rlog
-android.telephony.ServiceState
-android.telephony.ServiceState$1
-android.telephony.SignalStrength
-android.telephony.SignalStrength$1
-android.telephony.SmsManager
-android.telephony.SmsMessage
-android.telephony.SubscriptionInfo
-android.telephony.SubscriptionInfo$1
-android.telephony.SubscriptionManager
-android.telephony.SubscriptionManager$OnSubscriptionsChangedListener
-android.telephony.SubscriptionManager$OnSubscriptionsChangedListener$1
-android.telephony.SubscriptionManager$OnSubscriptionsChangedListener$2
-android.telephony.TelephonyHistogram
-android.telephony.TelephonyHistogram$1
-android.telephony.TelephonyManager
-android.telephony.TelephonyManager$MultiSimVariants
-android.telephony.VisualVoicemailSmsFilterSettings
-android.telephony.VoLteServiceState
-android.telephony.VoLteServiceState$1
-android.telephony.gsm.GsmCellLocation
-android.telephony.ims.ImsServiceProxy$INotifyStatusChanged
-android.telephony.ims.ImsServiceProxyCompat
-android.telephony.ims.feature.IMMTelFeature
-android.telephony.ims.stub.ImsConfigImplBase
-android.telephony.ims.stub.ImsEcbmImplBase
-android.telephony.ims.stub.ImsUtImplBase
-android.telephony.ims.stub.ImsUtListenerImplBase
-android.text.AndroidBidi
-android.text.AndroidCharacter
-android.text.Annotation
-android.text.BidiFormatter
-android.text.BidiFormatter$DirectionalityEstimator
-android.text.BoringLayout
-android.text.BoringLayout$Metrics
-android.text.CharSequenceCharacterIterator
-android.text.ClipboardManager
-android.text.DynamicLayout
-android.text.DynamicLayout$ChangeWatcher
-android.text.Editable
-android.text.Editable$Factory
-android.text.FontConfig
-android.text.FontConfig$Alias
-android.text.FontConfig$Family
-android.text.FontConfig$Font
-android.text.GetChars
-android.text.GraphicsOperations
-android.text.Html
-android.text.Html$HtmlParser
-android.text.Html$TagHandler
-android.text.HtmlToSpannedConverter
-android.text.HtmlToSpannedConverter$Bold
-android.text.HtmlToSpannedConverter$Href
-android.text.Hyphenator
-android.text.Hyphenator$HyphenationData
-android.text.InputFilter
-android.text.InputFilter$LengthFilter
-android.text.InputType
-android.text.Layout
-android.text.Layout$Alignment
-android.text.Layout$Directions
-android.text.Layout$Ellipsizer
-android.text.Layout$SpannedEllipsizer
-android.text.MeasuredText
-android.text.NoCopySpan
-android.text.NoCopySpan$Concrete
-android.text.PackedIntVector
-android.text.PackedObjectVector
-android.text.ParcelableSpan
-android.text.Selection
-android.text.Selection$END
-android.text.Selection$PositionIterator
-android.text.Selection$START
-android.text.SpanSet
-android.text.SpanWatcher
-android.text.Spannable
-android.text.Spannable$Factory
-android.text.SpannableString
-android.text.SpannableStringBuilder
-android.text.SpannableStringInternal
-android.text.Spanned
-android.text.SpannedString
-android.text.StaticLayout
-android.text.StaticLayout$Builder
-android.text.StaticLayout$LineBreaks
-android.text.TextDirectionHeuristic
-android.text.TextDirectionHeuristics
-android.text.TextDirectionHeuristics$AnyStrong
-android.text.TextDirectionHeuristics$FirstStrong
-android.text.TextDirectionHeuristics$TextDirectionAlgorithm
-android.text.TextDirectionHeuristics$TextDirectionHeuristicImpl
-android.text.TextDirectionHeuristics$TextDirectionHeuristicInternal
-android.text.TextDirectionHeuristics$TextDirectionHeuristicLocale
-android.text.TextLine
-android.text.TextPaint
-android.text.TextUtils
-android.text.TextUtils$1
-android.text.TextUtils$EllipsizeCallback
-android.text.TextUtils$SimpleStringSplitter
-android.text.TextUtils$StringSplitter
-android.text.TextUtils$TruncateAt
-android.text.TextWatcher
-android.text.format.DateFormat
-android.text.format.DateUtils
-android.text.format.Formatter
-android.text.format.Formatter$BytesResult
-android.text.format.Time
-android.text.format.Time$TimeCalculator
-android.text.format.TimeFormatter
-android.text.method.AllCapsTransformationMethod
-android.text.method.ArrowKeyMovementMethod
-android.text.method.BaseKeyListener
-android.text.method.BaseMovementMethod
-android.text.method.DialerKeyListener
-android.text.method.KeyListener
-android.text.method.LinkMovementMethod
-android.text.method.MetaKeyKeyListener
-android.text.method.MovementMethod
-android.text.method.NumberKeyListener
-android.text.method.PasswordTransformationMethod
-android.text.method.QwertyKeyListener
-android.text.method.QwertyKeyListener$Replaced
-android.text.method.ReplacementTransformationMethod
-android.text.method.ReplacementTransformationMethod$ReplacementCharSequence
-android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence
-android.text.method.ScrollingMovementMethod
-android.text.method.SingleLineTransformationMethod
-android.text.method.TextKeyListener
-android.text.method.TextKeyListener$Capitalize
-android.text.method.TextKeyListener$SettingsObserver
-android.text.method.Touch
-android.text.method.Touch$DragState
-android.text.method.TransformationMethod
-android.text.method.TransformationMethod2
-android.text.method.WordIterator
-android.text.style.AlignmentSpan
-android.text.style.BackgroundColorSpan
-android.text.style.CharacterStyle
-android.text.style.CharacterStyle$Passthrough
-android.text.style.ClickableSpan
-android.text.style.DynamicDrawableSpan
-android.text.style.EasyEditSpan
-android.text.style.ForegroundColorSpan
-android.text.style.ImageSpan
-android.text.style.LeadingMarginSpan
-android.text.style.LeadingMarginSpan$LeadingMarginSpan2
-android.text.style.LeadingMarginSpan$Standard
-android.text.style.LineBackgroundSpan
-android.text.style.LineHeightSpan
-android.text.style.LineHeightSpan$WithDensity
-android.text.style.MetricAffectingSpan
-android.text.style.MetricAffectingSpan$Passthrough
-android.text.style.ParagraphStyle
-android.text.style.RelativeSizeSpan
-android.text.style.ReplacementSpan
-android.text.style.SpellCheckSpan
-android.text.style.StrikethroughSpan
-android.text.style.StyleSpan
-android.text.style.SuggestionSpan
-android.text.style.TabStopSpan
-android.text.style.TextAppearanceSpan
-android.text.style.TtsSpan
-android.text.style.TtsSpan$Builder
-android.text.style.TtsSpan$SemioticClassBuilder
-android.text.style.TtsSpan$TelephoneBuilder
-android.text.style.TtsSpan$VerbatimBuilder
-android.text.style.TypefaceSpan
-android.text.style.URLSpan
-android.text.style.UnderlineSpan
-android.text.style.UpdateAppearance
-android.text.style.UpdateLayout
-android.text.style.WrapTogetherSpan
-android.text.util.Linkify
-android.text.util.Linkify$1
-android.text.util.Linkify$2
-android.text.util.Linkify$3
-android.text.util.Linkify$4
-android.text.util.Linkify$MatchFilter
-android.text.util.Linkify$TransformFilter
-android.text.util.Rfc822Token
-android.text.util.Rfc822Tokenizer
-android.transition.ArcMotion
-android.transition.AutoTransition
-android.transition.ChangeBounds
-android.transition.ChangeBounds$1
-android.transition.ChangeBounds$2
-android.transition.ChangeBounds$3
-android.transition.ChangeBounds$4
-android.transition.ChangeBounds$5
-android.transition.ChangeBounds$6
-android.transition.ChangeBounds$9
-android.transition.ChangeClipBounds
-android.transition.ChangeImageTransform
-android.transition.ChangeImageTransform$1
-android.transition.ChangeImageTransform$2
-android.transition.ChangeTransform
-android.transition.ChangeTransform$1
-android.transition.ChangeTransform$2
-android.transition.ChangeTransform$3
-android.transition.ChangeTransform$GhostListener
-android.transition.ChangeTransform$PathAnimatorMatrix
-android.transition.ChangeTransform$Transforms
-android.transition.CircularPropagation
-android.transition.Explode
-android.transition.Fade
-android.transition.Fade$1
-android.transition.Fade$FadeAnimatorListener
-android.transition.PathMotion
-android.transition.Scene
-android.transition.SidePropagation
-android.transition.Slide
-android.transition.Slide$1
-android.transition.Slide$2
-android.transition.Slide$3
-android.transition.Slide$4
-android.transition.Slide$5
-android.transition.Slide$6
-android.transition.Slide$CalculateSlide
-android.transition.Slide$CalculateSlideHorizontal
-android.transition.Slide$CalculateSlideVertical
-android.transition.Transition
-android.transition.Transition$1
-android.transition.Transition$2
-android.transition.Transition$3
-android.transition.Transition$AnimationInfo
-android.transition.Transition$ArrayListManager
-android.transition.Transition$EpicenterCallback
-android.transition.Transition$TransitionListener
-android.transition.TransitionInflater
-android.transition.TransitionListenerAdapter
-android.transition.TransitionManager
-android.transition.TransitionManager$MultiListener
-android.transition.TransitionManager$MultiListener$1
-android.transition.TransitionPropagation
-android.transition.TransitionSet
-android.transition.TransitionSet$TransitionSetListener
-android.transition.TransitionUtils
-android.transition.TransitionValues
-android.transition.TransitionValuesMaps
-android.transition.Visibility
-android.transition.Visibility$1
-android.transition.Visibility$VisibilityInfo
-android.transition.VisibilityPropagation
-android.util.AndroidException
-android.util.AndroidRuntimeException
-android.util.ArrayMap
-android.util.ArrayMap$1
-android.util.ArraySet
-android.util.ArraySet$1
-android.util.AtomicFile
-android.util.AttributeSet
-android.util.Base64
-android.util.Base64$Coder
-android.util.Base64$Decoder
-android.util.Base64$Encoder
-android.util.BootTimingsTraceLog
-android.util.ByteStringUtils
-android.util.ContainerHelpers
-android.util.DebugUtils
-android.util.DisplayMetrics
-android.util.EventLog
-android.util.EventLog$Event
-android.util.FastImmutableArraySet
-android.util.FastImmutableArraySet$FastIterator
-android.util.FloatProperty
-android.util.IconDrawableFactory
-android.util.IntArray
-android.util.IntProperty
-android.util.JsonReader
-android.util.JsonScope
-android.util.JsonToken
-android.util.JsonWriter
-android.util.KeyValueListParser
-android.util.LauncherIcons
-android.util.LauncherIcons$ShadowDrawable
-android.util.LauncherIcons$ShadowDrawable$MyConstantState
-android.util.LocalLog
-android.util.LocalLog$ReadOnlyLocalLog
-android.util.Log
-android.util.Log$1
-android.util.Log$ImmediateLogWriter
-android.util.Log$TerribleFailure
-android.util.Log$TerribleFailureHandler
-android.util.LogPrinter
-android.util.LongArray
-android.util.LongSparseArray
-android.util.LongSparseLongArray
-android.util.LruCache
-android.util.MapCollections
-android.util.MapCollections$ArrayIterator
-android.util.MapCollections$EntrySet
-android.util.MapCollections$KeySet
-android.util.MapCollections$MapIterator
-android.util.MapCollections$ValuesCollection
-android.util.MathUtils
-android.util.MemoryIntArray
-android.util.MemoryIntArray$1
-android.util.MergedConfiguration
-android.util.MergedConfiguration$1
-android.util.MutableBoolean
-android.util.MutableInt
-android.util.MutableLong
-android.util.NtpTrustedTime
-android.util.Pair
-android.util.PathParser
-android.util.PathParser$PathData
-android.util.Patterns
-android.util.Pools$Pool
-android.util.Pools$SimplePool
-android.util.Pools$SynchronizedPool
-android.util.Printer
-android.util.Property
-android.util.Range
-android.util.Rational
-android.util.ReflectiveProperty
-android.util.Singleton
-android.util.Size
-android.util.SizeF
-android.util.Slog
-android.util.SparseArray
-android.util.SparseBooleanArray
-android.util.SparseIntArray
-android.util.SparseLongArray
-android.util.Spline
-android.util.Spline$MonotoneCubicSpline
-android.util.StateSet
-android.util.SuperNotCalledException
-android.util.TimeFormatException
-android.util.TimeUtils
-android.util.TimedRemoteCaller
-android.util.TimingLogger
-android.util.TrustedTime
-android.util.TypedValue
-android.util.Xml
-android.util.Xml$XmlSerializerFactory
-android.util.XmlPullAttributes
-android.util.apk.ApkSignatureSchemeV2Verifier
-android.util.apk.ApkSignatureSchemeV2Verifier$SignatureNotFoundException
-android.util.apk.ZipUtils
-android.util.jar.StrictJarFile
-android.util.jar.StrictJarFile$EntryIterator
-android.util.jar.StrictJarFile$FDStream
-android.util.jar.StrictJarFile$JarFileInputStream
-android.util.jar.StrictJarFile$ZipInflaterInputStream
-android.util.jar.StrictJarManifest
-android.util.jar.StrictJarManifest$Chunk
-android.util.jar.StrictJarManifestReader
-android.util.jar.StrictJarVerifier
-android.util.jar.StrictJarVerifier$VerifierEntry
-android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk
-android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$1
-android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$2
-android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$3
-android.view.-$Lambda$P6MTGFSudLpwrqb6oVD8FdorW1c
-android.view.-$Lambda$iU_USrtPm1XIm5H9QYQvXfBGDE4
-android.view.-$Lambda$iU_USrtPm1XIm5H9QYQvXfBGDE4$1
-android.view.AbsSavedState
-android.view.AbsSavedState$1
-android.view.AbsSavedState$2
-android.view.ActionMode
-android.view.ActionMode$Callback
-android.view.ActionMode$Callback2
-android.view.ActionProvider
-android.view.ActionProvider$SubUiVisibilityListener
-android.view.AppTransitionAnimationSpec
-android.view.AppTransitionAnimationSpec$1
-android.view.Choreographer
-android.view.Choreographer$1
-android.view.Choreographer$2
-android.view.Choreographer$CallbackQueue
-android.view.Choreographer$CallbackRecord
-android.view.Choreographer$FrameCallback
-android.view.Choreographer$FrameDisplayEventReceiver
-android.view.Choreographer$FrameHandler
-android.view.ContextMenu
-android.view.ContextMenu$ContextMenuInfo
-android.view.ContextThemeWrapper
-android.view.Display
-android.view.Display$HdrCapabilities
-android.view.Display$HdrCapabilities$1
-android.view.Display$Mode
-android.view.Display$Mode$1
-android.view.DisplayAdjustments
-android.view.DisplayEventReceiver
-android.view.DisplayInfo
-android.view.DisplayInfo$1
-android.view.DisplayListCanvas
-android.view.DragEvent
-android.view.FallbackEventHandler
-android.view.FocusFinder
-android.view.FocusFinder$1
-android.view.FocusFinder$FocusSorter
-android.view.FocusFinder$UserSpecifiedFocusComparator
-android.view.FocusFinder$UserSpecifiedFocusComparator$NextFocusGetter
-android.view.FrameInfo
-android.view.FrameMetrics
-android.view.FrameMetricsObserver
-android.view.FrameStats
-android.view.GestureDetector
-android.view.GestureDetector$GestureHandler
-android.view.GestureDetector$OnContextClickListener
-android.view.GestureDetector$OnDoubleTapListener
-android.view.GestureDetector$OnGestureListener
-android.view.GestureDetector$SimpleOnGestureListener
-android.view.GhostView
-android.view.Gravity
-android.view.HandlerActionQueue
-android.view.HandlerActionQueue$HandlerAction
-android.view.HardwareLayer
-android.view.IAppTransitionAnimationSpecsFuture
-android.view.IAppTransitionAnimationSpecsFuture$Stub
-android.view.IAppTransitionAnimationSpecsFuture$Stub$Proxy
-android.view.IApplicationToken
-android.view.IApplicationToken$Stub
-android.view.IDockedStackListener
-android.view.IDockedStackListener$Stub
-android.view.IDockedStackListener$Stub$Proxy
-android.view.IGraphicsStats
-android.view.IGraphicsStats$Stub
-android.view.IGraphicsStats$Stub$Proxy
-android.view.IGraphicsStatsCallback
-android.view.IGraphicsStatsCallback$Stub
-android.view.IGraphicsStatsCallback$Stub$Proxy
-android.view.IInputFilter
-android.view.IOnKeyguardExitResult
-android.view.IPinnedStackController
-android.view.IPinnedStackController$Stub
-android.view.IPinnedStackController$Stub$Proxy
-android.view.IPinnedStackListener
-android.view.IPinnedStackListener$Stub
-android.view.IPinnedStackListener$Stub$Proxy
-android.view.IRotationWatcher
-android.view.IRotationWatcher$Stub
-android.view.IRotationWatcher$Stub$Proxy
-android.view.IWindow
-android.view.IWindow$Stub
-android.view.IWindow$Stub$Proxy
-android.view.IWindowFocusObserver
-android.view.IWindowId
-android.view.IWindowId$Stub
-android.view.IWindowId$Stub$Proxy
-android.view.IWindowManager
-android.view.IWindowManager$Stub
-android.view.IWindowManager$Stub$Proxy
-android.view.IWindowSession
-android.view.IWindowSession$Stub
-android.view.IWindowSession$Stub$Proxy
-android.view.IWindowSessionCallback
-android.view.IWindowSessionCallback$Stub
-android.view.IWindowSessionCallback$Stub$Proxy
-android.view.InflateException
-android.view.InputChannel
-android.view.InputChannel$1
-android.view.InputDevice
-android.view.InputDevice$1
-android.view.InputDevice$MotionRange
-android.view.InputEvent
-android.view.InputEvent$1
-android.view.InputEventConsistencyVerifier
-android.view.InputEventReceiver
-android.view.InputEventReceiver$Factory
-android.view.InputEventSender
-android.view.InputQueue
-android.view.InputQueue$Callback
-android.view.InputQueue$FinishedInputEventCallback
-android.view.KeyCharacterMap
-android.view.KeyCharacterMap$1
-android.view.KeyCharacterMap$FallbackAction
-android.view.KeyEvent
-android.view.KeyEvent$1
-android.view.KeyEvent$Callback
-android.view.KeyEvent$DispatcherState
-android.view.KeyboardShortcutGroup
-android.view.KeyboardShortcutGroup$1
-android.view.KeyboardShortcutInfo
-android.view.KeyboardShortcutInfo$1
-android.view.LayoutInflater
-android.view.LayoutInflater$Factory
-android.view.LayoutInflater$Factory2
-android.view.LayoutInflater$FactoryMerger
-android.view.LayoutInflater$Filter
-android.view.MagnificationSpec
-android.view.Menu
-android.view.MenuInflater
-android.view.MenuInflater$MenuState
-android.view.MenuItem
-android.view.MenuItem$OnActionExpandListener
-android.view.MenuItem$OnMenuItemClickListener
-android.view.MotionEvent
-android.view.MotionEvent$1
-android.view.MotionEvent$PointerCoords
-android.view.MotionEvent$PointerProperties
-android.view.NotificationHeaderView
-android.view.NotificationHeaderView$1
-android.view.NotificationHeaderView$HeaderTouchListener
-android.view.OrientationEventListener
-android.view.OrientationEventListener$SensorEventListenerImpl
-android.view.PointerIcon
-android.view.PointerIcon$1
-android.view.RecordingCanvas
-android.view.RemotableViewMethod
-android.view.RenderNode
-android.view.RenderNode$NoImagePreloadHolder
-android.view.RenderNodeAnimator
-android.view.RenderNodeAnimator$1
-android.view.RenderNodeAnimatorSetHelper
-android.view.ScaleGestureDetector
-android.view.ScaleGestureDetector$1
-android.view.ScaleGestureDetector$OnScaleGestureListener
-android.view.ScaleGestureDetector$SimpleOnScaleGestureListener
-android.view.SearchEvent
-android.view.SubMenu
-android.view.Surface
-android.view.Surface$1
-android.view.Surface$CompatibleCanvas
-android.view.Surface$OutOfResourcesException
-android.view.SurfaceControl
-android.view.SurfaceControl$PhysicalDisplayInfo
-android.view.SurfaceHolder
-android.view.SurfaceHolder$Callback
-android.view.SurfaceHolder$Callback2
-android.view.SurfaceSession
-android.view.SurfaceView
-android.view.SurfaceView$1
-android.view.SurfaceView$2
-android.view.SurfaceView$3
-android.view.SurfaceView$4
-android.view.TextureView
-android.view.TextureView$1
-android.view.TextureView$SurfaceTextureListener
-android.view.ThreadedRenderer
-android.view.ThreadedRenderer$DrawCallbacks
-android.view.ThreadedRenderer$ProcessInitializer
-android.view.ThreadedRenderer$ProcessInitializer$1
-android.view.TouchDelegate
-android.view.VelocityTracker
-android.view.VelocityTracker$Estimator
-android.view.View
-android.view.View$1
-android.view.View$10
-android.view.View$11
-android.view.View$12
-android.view.View$2
-android.view.View$3
-android.view.View$4
-android.view.View$5
-android.view.View$6
-android.view.View$7
-android.view.View$8
-android.view.View$9
-android.view.View$AccessibilityDelegate
-android.view.View$AttachInfo
-android.view.View$AttachInfo$Callbacks
-android.view.View$BaseSavedState
-android.view.View$BaseSavedState$1
-android.view.View$CheckForLongPress
-android.view.View$CheckForTap
-android.view.View$DeclaredOnClickListener
-android.view.View$ForegroundInfo
-android.view.View$ListenerInfo
-android.view.View$MatchIdPredicate
-android.view.View$MeasureSpec
-android.view.View$OnApplyWindowInsetsListener
-android.view.View$OnAttachStateChangeListener
-android.view.View$OnClickListener
-android.view.View$OnCreateContextMenuListener
-android.view.View$OnDragListener
-android.view.View$OnFocusChangeListener
-android.view.View$OnGenericMotionListener
-android.view.View$OnHoverListener
-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
-android.view.View$ScrollabilityCache
-android.view.View$TintInfo
-android.view.View$TooltipInfo
-android.view.View$TransformationInfo
-android.view.View$UnsetPressedState
-android.view.View$VisibilityChangeForAutofillHandler
-android.view.ViewAnimationUtils
-android.view.ViewConfiguration
-android.view.ViewDebug$CapturedViewProperty
-android.view.ViewDebug$ExportedProperty
-android.view.ViewDebug$HierarchyHandler
-android.view.ViewGroup
-android.view.ViewGroup$1
-android.view.ViewGroup$2
-android.view.ViewGroup$3
-android.view.ViewGroup$4
-android.view.ViewGroup$ChildListForAutoFill
-android.view.ViewGroup$LayoutParams
-android.view.ViewGroup$MarginLayoutParams
-android.view.ViewGroup$OnHierarchyChangeListener
-android.view.ViewGroup$TouchTarget
-android.view.ViewGroupOverlay
-android.view.ViewManager
-android.view.ViewOutlineProvider
-android.view.ViewOutlineProvider$1
-android.view.ViewOutlineProvider$2
-android.view.ViewOutlineProvider$3
-android.view.ViewOverlay
-android.view.ViewOverlay$OverlayViewGroup
-android.view.ViewParent
-android.view.ViewPropertyAnimator
-android.view.ViewPropertyAnimator$1
-android.view.ViewPropertyAnimator$2
-android.view.ViewPropertyAnimator$3
-android.view.ViewPropertyAnimator$AnimatorEventListener
-android.view.ViewPropertyAnimator$NameValuesHolder
-android.view.ViewPropertyAnimator$PropertyBundle
-android.view.ViewRootImpl
-android.view.ViewRootImpl$1
-android.view.ViewRootImpl$2
-android.view.ViewRootImpl$4
-android.view.ViewRootImpl$AccessibilityInteractionConnectionManager
-android.view.ViewRootImpl$ActivityConfigCallback
-android.view.ViewRootImpl$AsyncInputStage
-android.view.ViewRootImpl$ConfigChangedCallback
-android.view.ViewRootImpl$ConsumeBatchedInputImmediatelyRunnable
-android.view.ViewRootImpl$ConsumeBatchedInputRunnable
-android.view.ViewRootImpl$EarlyPostImeInputStage
-android.view.ViewRootImpl$HighContrastTextManager
-android.view.ViewRootImpl$ImeInputStage
-android.view.ViewRootImpl$InputStage
-android.view.ViewRootImpl$InvalidateOnAnimationRunnable
-android.view.ViewRootImpl$NativePostImeInputStage
-android.view.ViewRootImpl$NativePreImeInputStage
-android.view.ViewRootImpl$QueuedInputEvent
-android.view.ViewRootImpl$SyntheticInputStage
-android.view.ViewRootImpl$SyntheticJoystickHandler
-android.view.ViewRootImpl$SyntheticKeyboardHandler
-android.view.ViewRootImpl$SyntheticTouchNavigationHandler
-android.view.ViewRootImpl$SyntheticTouchNavigationHandler$1
-android.view.ViewRootImpl$SyntheticTrackballHandler
-android.view.ViewRootImpl$SystemUiVisibilityInfo
-android.view.ViewRootImpl$TrackballAxis
-android.view.ViewRootImpl$TraversalRunnable
-android.view.ViewRootImpl$ViewPostImeInputStage
-android.view.ViewRootImpl$ViewPreImeInputStage
-android.view.ViewRootImpl$ViewRootHandler
-android.view.ViewRootImpl$W
-android.view.ViewRootImpl$WindowInputEventReceiver
-android.view.ViewRootImpl$WindowStoppedCallback
-android.view.ViewStructure
-android.view.ViewStructure$HtmlInfo
-android.view.ViewStub
-android.view.ViewStub$OnInflateListener
-android.view.ViewStub$ViewReplaceRunnable
-android.view.ViewTreeObserver
-android.view.ViewTreeObserver$CopyOnWriteArray
-android.view.ViewTreeObserver$CopyOnWriteArray$Access
-android.view.ViewTreeObserver$InternalInsetsInfo
-android.view.ViewTreeObserver$OnComputeInternalInsetsListener
-android.view.ViewTreeObserver$OnDrawListener
-android.view.ViewTreeObserver$OnGlobalFocusChangeListener
-android.view.ViewTreeObserver$OnGlobalLayoutListener
-android.view.ViewTreeObserver$OnPreDrawListener
-android.view.ViewTreeObserver$OnScrollChangedListener
-android.view.ViewTreeObserver$OnTouchModeChangeListener
-android.view.Window
-android.view.Window$Callback
-android.view.Window$OnWindowDismissedCallback
-android.view.Window$OnWindowSwipeDismissedCallback
-android.view.Window$WindowControllerCallback
-android.view.WindowAnimationFrameStats
-android.view.WindowAnimationFrameStats$1
-android.view.WindowCallbackWrapper
-android.view.WindowCallbacks
-android.view.WindowContentFrameStats
-android.view.WindowContentFrameStats$1
-android.view.WindowId
-android.view.WindowId$1
-android.view.WindowInsets
-android.view.WindowLeaked
-android.view.WindowManager
-android.view.WindowManager$BadTokenException
-android.view.WindowManager$InvalidDisplayException
-android.view.WindowManager$KeyboardShortcutsReceiver
-android.view.WindowManager$LayoutParams
-android.view.WindowManager$LayoutParams$1
-android.view.WindowManagerGlobal
-android.view.WindowManagerGlobal$1
-android.view.WindowManagerGlobal$2
-android.view.WindowManagerImpl
-android.view.WindowManagerInternal
-android.view.WindowManagerInternal$AppTransitionListener
-android.view.WindowManagerInternal$MagnificationCallbacks
-android.view.WindowManagerInternal$OnHardKeyboardStatusChangeListener
-android.view.WindowManagerInternal$WindowsForAccessibilityCallback
-android.view.WindowManagerPolicy
-android.view.WindowManagerPolicy$InputConsumer
-android.view.WindowManagerPolicy$OnKeyguardExitResult
-android.view.WindowManagerPolicy$PointerEventListener
-android.view.WindowManagerPolicy$ScreenOffListener
-android.view.WindowManagerPolicy$ScreenOnListener
-android.view.WindowManagerPolicy$StartingSurface
-android.view.WindowManagerPolicy$WindowManagerFuncs
-android.view.WindowManagerPolicy$WindowState
-android.view.accessibility.AccessibilityEvent
-android.view.accessibility.AccessibilityEvent$1
-android.view.accessibility.AccessibilityEventSource
-android.view.accessibility.AccessibilityManager
-android.view.accessibility.AccessibilityManager$1
-android.view.accessibility.AccessibilityManager$AccessibilityServicesStateChangeListener
-android.view.accessibility.AccessibilityManager$AccessibilityStateChangeListener
-android.view.accessibility.AccessibilityManager$HighTextContrastChangeListener
-android.view.accessibility.AccessibilityManager$MyCallback
-android.view.accessibility.AccessibilityManager$TouchExplorationStateChangeListener
-android.view.accessibility.AccessibilityNodeInfo
-android.view.accessibility.AccessibilityNodeInfo$AccessibilityAction
-android.view.accessibility.AccessibilityNodeProvider
-android.view.accessibility.AccessibilityRecord
-android.view.accessibility.CaptioningManager
-android.view.accessibility.CaptioningManager$1
-android.view.accessibility.CaptioningManager$CaptionStyle
-android.view.accessibility.CaptioningManager$CaptioningChangeListener
-android.view.accessibility.CaptioningManager$MyContentObserver
-android.view.accessibility.IAccessibilityInteractionConnection
-android.view.accessibility.IAccessibilityInteractionConnection$Stub
-android.view.accessibility.IAccessibilityInteractionConnection$Stub$Proxy
-android.view.accessibility.IAccessibilityInteractionConnectionCallback
-android.view.accessibility.IAccessibilityManager
-android.view.accessibility.IAccessibilityManager$Stub
-android.view.accessibility.IAccessibilityManager$Stub$Proxy
-android.view.accessibility.IAccessibilityManagerClient
-android.view.accessibility.IAccessibilityManagerClient$Stub
-android.view.accessibility.IAccessibilityManagerClient$Stub$Proxy
-android.view.animation.AccelerateDecelerateInterpolator
-android.view.animation.AccelerateInterpolator
-android.view.animation.AlphaAnimation
-android.view.animation.Animation
-android.view.animation.Animation$1
-android.view.animation.Animation$2
-android.view.animation.Animation$3
-android.view.animation.Animation$AnimationListener
-android.view.animation.Animation$Description
-android.view.animation.Animation$NoImagePreloadHolder
-android.view.animation.AnimationSet
-android.view.animation.AnimationUtils
-android.view.animation.AnimationUtils$1
-android.view.animation.AnimationUtils$AnimationState
-android.view.animation.BaseInterpolator
-android.view.animation.ClipRectAnimation
-android.view.animation.CycleInterpolator
-android.view.animation.DecelerateInterpolator
-android.view.animation.GridLayoutAnimationController$AnimationParameters
-android.view.animation.Interpolator
-android.view.animation.LayoutAnimationController
-android.view.animation.LayoutAnimationController$AnimationParameters
-android.view.animation.LinearInterpolator
-android.view.animation.OvershootInterpolator
-android.view.animation.PathInterpolator
-android.view.animation.ScaleAnimation
-android.view.animation.Transformation
-android.view.animation.TranslateAnimation
-android.view.autofill.AutofillId
-android.view.autofill.AutofillId$1
-android.view.autofill.AutofillManager
-android.view.autofill.AutofillManager$AutofillClient
-android.view.autofill.AutofillManager$AutofillManagerClient
-android.view.autofill.AutofillValue
-android.view.autofill.AutofillValue$1
-android.view.autofill.Helper
-android.view.autofill.IAutoFillManager
-android.view.autofill.IAutoFillManager$Stub
-android.view.autofill.IAutoFillManager$Stub$Proxy
-android.view.autofill.IAutoFillManagerClient
-android.view.autofill.IAutoFillManagerClient$Stub
-android.view.autofill.IAutoFillManagerClient$Stub$Proxy
-android.view.autofill.IAutofillWindowPresenter
-android.view.inputmethod.BaseInputConnection
-android.view.inputmethod.CompletionInfo
-android.view.inputmethod.CompletionInfo$1
-android.view.inputmethod.ComposingText
-android.view.inputmethod.CorrectionInfo
-android.view.inputmethod.CursorAnchorInfo
-android.view.inputmethod.CursorAnchorInfo$Builder
-android.view.inputmethod.EditorInfo
-android.view.inputmethod.EditorInfo$1
-android.view.inputmethod.ExtractedText
-android.view.inputmethod.ExtractedText$1
-android.view.inputmethod.ExtractedTextRequest
-android.view.inputmethod.ExtractedTextRequest$1
-android.view.inputmethod.InputBinding
-android.view.inputmethod.InputBinding$1
-android.view.inputmethod.InputConnection
-android.view.inputmethod.InputConnectionInspector
-android.view.inputmethod.InputConnectionWrapper
-android.view.inputmethod.InputContentInfo
-android.view.inputmethod.InputMethod
-android.view.inputmethod.InputMethod$SessionCallback
-android.view.inputmethod.InputMethodInfo
-android.view.inputmethod.InputMethodInfo$1
-android.view.inputmethod.InputMethodManager
-android.view.inputmethod.InputMethodManager$1
-android.view.inputmethod.InputMethodManager$2
-android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper
-android.view.inputmethod.InputMethodManager$FinishedInputEventCallback
-android.view.inputmethod.InputMethodManager$H
-android.view.inputmethod.InputMethodManager$ImeInputEventSender
-android.view.inputmethod.InputMethodManager$PendingEvent
-android.view.inputmethod.InputMethodManagerInternal
-android.view.inputmethod.InputMethodSession
-android.view.inputmethod.InputMethodSession$EventCallback
-android.view.inputmethod.InputMethodSubtype
-android.view.inputmethod.InputMethodSubtype$1
-android.view.inputmethod.InputMethodSubtype$InputMethodSubtypeBuilder
-android.view.inputmethod.InputMethodSubtypeArray
-android.view.textclassifier.TextClassificationManager
-android.view.textclassifier.TextClassifier
-android.view.textclassifier.TextClassifier$1
-android.view.textclassifier.TextClassifierImpl
-android.view.textservice.SpellCheckerInfo
-android.view.textservice.SpellCheckerInfo$1
-android.view.textservice.SpellCheckerSession
-android.view.textservice.SpellCheckerSession$1
-android.view.textservice.SpellCheckerSession$InternalListener
-android.view.textservice.SpellCheckerSession$SpellCheckerSessionListener
-android.view.textservice.SpellCheckerSession$SpellCheckerSessionListenerImpl
-android.view.textservice.SpellCheckerSession$SpellCheckerSessionListenerImpl$SpellCheckerParams
-android.view.textservice.SpellCheckerSubtype
-android.view.textservice.SpellCheckerSubtype$1
-android.view.textservice.SuggestionsInfo
-android.view.textservice.TextInfo
-android.view.textservice.TextServicesManager
-android.webkit.ConsoleMessage
-android.webkit.ConsoleMessage$MessageLevel
-android.webkit.CookieManager
-android.webkit.CookieSyncManager
-android.webkit.DownloadListener
-android.webkit.GeolocationPermissions
-android.webkit.IWebViewUpdateService
-android.webkit.IWebViewUpdateService$Stub
-android.webkit.IWebViewUpdateService$Stub$Proxy
-android.webkit.JavascriptInterface
-android.webkit.MimeTypeMap
-android.webkit.ServiceWorkerClient
-android.webkit.ServiceWorkerController
-android.webkit.ServiceWorkerWebSettings
-android.webkit.TokenBindingService
-android.webkit.URLUtil
-android.webkit.UserPackage
-android.webkit.ValueCallback
-android.webkit.WebBackForwardList
-android.webkit.WebChromeClient
-android.webkit.WebChromeClient$CustomViewCallback
-android.webkit.WebIconDatabase
-android.webkit.WebMessage
-android.webkit.WebMessagePort
-android.webkit.WebResourceRequest
-android.webkit.WebSettings
-android.webkit.WebSettings$LayoutAlgorithm
-android.webkit.WebSettings$PluginState
-android.webkit.WebSettings$RenderPriority
-android.webkit.WebSettings$ZoomDensity
-android.webkit.WebStorage
-android.webkit.WebSyncManager
-android.webkit.WebView
-android.webkit.WebView$FindListener
-android.webkit.WebView$HitTestResult
-android.webkit.WebView$PictureListener
-android.webkit.WebView$PrivateAccess
-android.webkit.WebView$VisualStateCallback
-android.webkit.WebViewClient
-android.webkit.WebViewDatabase
-android.webkit.WebViewDelegate
-android.webkit.WebViewDelegate$1
-android.webkit.WebViewDelegate$OnTraceEnabledChangeListener
-android.webkit.WebViewFactory
-android.webkit.WebViewFactory$1
-android.webkit.WebViewFactory$MissingWebViewPackageException
-android.webkit.WebViewFactory$RelroFileCreator
-android.webkit.WebViewFactoryProvider
-android.webkit.WebViewFactoryProvider$Statics
-android.webkit.WebViewProvider
-android.webkit.WebViewProvider$ScrollDelegate
-android.webkit.WebViewProvider$ViewDelegate
-android.webkit.WebViewProviderInfo
-android.webkit.WebViewProviderInfo$1
-android.webkit.WebViewProviderResponse
-android.webkit.WebViewProviderResponse$1
-android.webkit.WebViewZygote
-android.widget.-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4
-android.widget.-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4$1
-android.widget.-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4$2
-android.widget.-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4$3
-android.widget.-$Lambda$tfOQKOmkDz_xLYaBQX_cysn8vbE
-android.widget.AbsListView
-android.widget.AbsListView$3
-android.widget.AbsListView$AdapterDataSetObserver
-android.widget.AbsListView$CheckForTap
-android.widget.AbsListView$FlingRunnable
-android.widget.AbsListView$FlingRunnable$1
-android.widget.AbsListView$LayoutParams
-android.widget.AbsListView$MultiChoiceModeListener
-android.widget.AbsListView$MultiChoiceModeWrapper
-android.widget.AbsListView$OnScrollListener
-android.widget.AbsListView$PerformClick
-android.widget.AbsListView$RecycleBin
-android.widget.AbsListView$RecyclerListener
-android.widget.AbsListView$SavedState
-android.widget.AbsListView$SavedState$1
-android.widget.AbsListView$SelectionBoundsAdjuster
-android.widget.AbsListView$WindowRunnnable
-android.widget.AbsSeekBar
-android.widget.AbsSpinner
-android.widget.AbsSpinner$RecycleBin
-android.widget.AbsoluteLayout
-android.widget.ActionMenuPresenter
-android.widget.ActionMenuPresenter$1
-android.widget.ActionMenuPresenter$2
-android.widget.ActionMenuPresenter$ActionMenuPopupCallback
-android.widget.ActionMenuPresenter$OverflowMenuButton
-android.widget.ActionMenuPresenter$OverflowMenuButton$1
-android.widget.ActionMenuPresenter$PopupPresenterCallback
-android.widget.ActionMenuView
-android.widget.ActionMenuView$ActionMenuChildView
-android.widget.ActionMenuView$ActionMenuPresenterCallback
-android.widget.ActionMenuView$LayoutParams
-android.widget.ActionMenuView$MenuBuilderCallback
-android.widget.ActionMenuView$OnMenuItemClickListener
-android.widget.Adapter
-android.widget.AdapterView
-android.widget.AdapterView$AdapterDataSetObserver
-android.widget.AdapterView$OnItemClickListener
-android.widget.AdapterView$OnItemLongClickListener
-android.widget.AdapterView$OnItemSelectedListener
-android.widget.AdapterView$SelectionNotifier
-android.widget.ArrayAdapter
-android.widget.AutoCompleteTextView
-android.widget.AutoCompleteTextView$DropDownItemClickListener
-android.widget.AutoCompleteTextView$MyWatcher
-android.widget.AutoCompleteTextView$PassThroughClickListener
-android.widget.AutoCompleteTextView$PopupDataSetObserver
-android.widget.AutoCompleteTextView$PopupDataSetObserver$1
-android.widget.AutoCompleteTextView$Validator
-android.widget.BaseAdapter
-android.widget.Button
-android.widget.CheckBox
-android.widget.Checkable
-android.widget.CheckedTextView
-android.widget.Chronometer
-android.widget.Chronometer$1
-android.widget.CompoundButton
-android.widget.CompoundButton$OnCheckedChangeListener
-android.widget.CursorAdapter
-android.widget.CursorFilter$CursorFilterClient
-android.widget.DatePicker
-android.widget.DateTimeView
-android.widget.DateTimeView$ReceiverInfo
-android.widget.DateTimeView$ReceiverInfo$1
-android.widget.DateTimeView$ReceiverInfo$2
-android.widget.DropDownListView
-android.widget.EdgeEffect
-android.widget.EditText
-android.widget.Editor
-android.widget.Editor$1
-android.widget.Editor$2
-android.widget.Editor$Blink
-android.widget.Editor$CursorAnchorInfoNotifier
-android.widget.Editor$CursorController
-android.widget.Editor$EditOperation
-android.widget.Editor$EditOperation$1
-android.widget.Editor$HandleView
-android.widget.Editor$InputContentType
-android.widget.Editor$InputMethodState
-android.widget.Editor$InsertionHandleView
-android.widget.Editor$InsertionHandleView$2
-android.widget.Editor$InsertionPointCursorController
-android.widget.Editor$PositionListener
-android.widget.Editor$ProcessTextIntentActionsHandler
-android.widget.Editor$SelectionModifierCursorController
-android.widget.Editor$SpanController
-android.widget.Editor$SuggestionHelper
-android.widget.Editor$SuggestionHelper$SuggestionSpanComparator
-android.widget.Editor$TextRenderNode
-android.widget.Editor$TextViewPositionListener
-android.widget.Editor$UndoInputFilter
-android.widget.ExpandableListConnector
-android.widget.FastScroller
-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.Filter
-android.widget.Filter$FilterListener
-android.widget.Filter$FilterResults
-android.widget.Filter$RequestArguments
-android.widget.Filter$RequestHandler
-android.widget.Filter$ResultsHandler
-android.widget.Filterable
-android.widget.ForwardingListener
-android.widget.FrameLayout
-android.widget.FrameLayout$LayoutParams
-android.widget.GridLayout
-android.widget.GridLayout$1
-android.widget.GridLayout$2
-android.widget.GridLayout$3
-android.widget.GridLayout$4
-android.widget.GridLayout$5
-android.widget.GridLayout$6
-android.widget.GridLayout$6$1
-android.widget.GridLayout$7
-android.widget.GridLayout$8
-android.widget.GridLayout$Alignment
-android.widget.GridLayout$Arc
-android.widget.GridLayout$Assoc
-android.widget.GridLayout$Axis
-android.widget.GridLayout$Axis$1
-android.widget.GridLayout$Bounds
-android.widget.GridLayout$Interval
-android.widget.GridLayout$LayoutParams
-android.widget.GridLayout$MutableInt
-android.widget.GridLayout$PackedMap
-android.widget.GridLayout$Spec
-android.widget.GridView
-android.widget.HeaderViewListAdapter
-android.widget.HorizontalScrollView
-android.widget.HorizontalScrollView$SavedState
-android.widget.HorizontalScrollView$SavedState$1
-android.widget.ImageButton
-android.widget.ImageView
-android.widget.ImageView$ImageDrawableCallback
-android.widget.ImageView$ScaleType
-android.widget.LinearLayout
-android.widget.LinearLayout$LayoutParams
-android.widget.ListAdapter
-android.widget.ListPopupWindow
-android.widget.ListPopupWindow$2
-android.widget.ListPopupWindow$3
-android.widget.ListPopupWindow$ListSelectorHider
-android.widget.ListPopupWindow$PopupDataSetObserver
-android.widget.ListPopupWindow$PopupScrollListener
-android.widget.ListPopupWindow$PopupTouchInterceptor
-android.widget.ListPopupWindow$ResizePopupRunnable
-android.widget.ListView
-android.widget.ListView$ArrowScrollFocusResult
-android.widget.ListView$FixedViewInfo
-android.widget.MediaController
-android.widget.MediaController$MediaPlayerControl
-android.widget.MultiAutoCompleteTextView
-android.widget.MultiAutoCompleteTextView$Tokenizer
-android.widget.NumberPicker
-android.widget.NumberPicker$Formatter
-android.widget.NumberPicker$OnValueChangeListener
-android.widget.OverScroller
-android.widget.OverScroller$SplineOverScroller
-android.widget.PopupMenu
-android.widget.PopupMenu$1
-android.widget.PopupMenu$2
-android.widget.PopupMenu$3
-android.widget.PopupMenu$OnMenuItemClickListener
-android.widget.PopupWindow
-android.widget.PopupWindow$1
-android.widget.PopupWindow$2
-android.widget.PopupWindow$OnDismissListener
-android.widget.PopupWindow$PopupBackgroundView
-android.widget.PopupWindow$PopupDecorView
-android.widget.PopupWindow$PopupDecorView$1
-android.widget.ProgressBar
-android.widget.ProgressBar$1
-android.widget.ProgressBar$ProgressTintInfo
-android.widget.ProgressBar$RefreshData
-android.widget.ProgressBar$RefreshProgressRunnable
-android.widget.ProgressBar$SavedState
-android.widget.ProgressBar$SavedState$1
-android.widget.QuickContactBadge
-android.widget.QuickContactBadge$QueryHandler
-android.widget.RadioButton
-android.widget.RadioGroup
-android.widget.RadioGroup$CheckedStateTracker
-android.widget.RadioGroup$LayoutParams
-android.widget.RadioGroup$OnCheckedChangeListener
-android.widget.RadioGroup$PassThroughHierarchyChangeListener
-android.widget.RatingBar
-android.widget.RelativeLayout
-android.widget.RelativeLayout$DependencyGraph
-android.widget.RelativeLayout$DependencyGraph$Node
-android.widget.RelativeLayout$LayoutParams
-android.widget.RemoteViews
-android.widget.RemoteViews$1
-android.widget.RemoteViews$2
-android.widget.RemoteViews$3
-android.widget.RemoteViews$Action
-android.widget.RemoteViews$ActionException
-android.widget.RemoteViews$AsyncApplyTask
-android.widget.RemoteViews$BitmapCache
-android.widget.RemoteViews$BitmapReflectionAction
-android.widget.RemoteViews$LayoutParamAction
-android.widget.RemoteViews$MemoryUsageCounter
-android.widget.RemoteViews$MutablePair
-android.widget.RemoteViews$OnClickHandler
-android.widget.RemoteViews$OnViewAppliedListener
-android.widget.RemoteViews$ReflectionAction
-android.widget.RemoteViews$RemoteView
-android.widget.RemoteViews$RemoteViewsContextWrapper
-android.widget.RemoteViews$RunnableAction
-android.widget.RemoteViews$RuntimeAction
-android.widget.RemoteViews$SetDrawableParameters
-android.widget.RemoteViews$SetOnClickPendingIntent
-android.widget.RemoteViews$SetOnClickPendingIntent$1
-android.widget.RemoteViews$ViewGroupAction
-android.widget.RemoteViews$ViewGroupAction$1
-android.widget.RemoteViews$ViewGroupAction$2
-android.widget.RemoteViews$ViewPaddingAction
-android.widget.RemoteViews$ViewTree
-android.widget.RemoteViewsAdapter$RemoteAdapterConnectionCallback
-android.widget.ResourceCursorAdapter
-android.widget.RtlSpacingHelper
-android.widget.ScrollBarDrawable
-android.widget.ScrollView
-android.widget.ScrollView$SavedState
-android.widget.ScrollView$SavedState$1
-android.widget.Scroller
-android.widget.Scroller$ViscousFluidInterpolator
-android.widget.SearchView$OnCloseListener
-android.widget.SectionIndexer
-android.widget.SeekBar
-android.widget.SeekBar$OnSeekBarChangeListener
-android.widget.SelectionActionModeHelper
-android.widget.SelectionActionModeHelper$SelectionTracker
-android.widget.SelectionActionModeHelper$TextClassificationHelper
-android.widget.SimpleCursorAdapter
-android.widget.Space
-android.widget.SpellChecker
-android.widget.SpellChecker$SpellParser
-android.widget.Spinner
-android.widget.Spinner$1
-android.widget.Spinner$DialogPopup
-android.widget.Spinner$DropDownAdapter
-android.widget.Spinner$DropdownPopup
-android.widget.Spinner$DropdownPopup$1
-android.widget.Spinner$SpinnerPopup
-android.widget.SpinnerAdapter
-android.widget.Switch
-android.widget.Switch$1
-android.widget.TabHost
-android.widget.TabHost$1
-android.widget.TabHost$2
-android.widget.TabHost$ContentStrategy
-android.widget.TabHost$FactoryContentStrategy
-android.widget.TabHost$IndicatorStrategy
-android.widget.TabHost$OnTabChangeListener
-android.widget.TabHost$TabContentFactory
-android.widget.TabHost$TabSpec
-android.widget.TabHost$ViewIndicatorStrategy
-android.widget.TabWidget
-android.widget.TabWidget$OnTabSelectionChanged
-android.widget.TabWidget$TabClickListener
-android.widget.TableLayout
-android.widget.TextClock
-android.widget.TextClock$1
-android.widget.TextClock$2
-android.widget.TextClock$FormatChangeObserver
-android.widget.TextSwitcher
-android.widget.TextView
-android.widget.TextView$2
-android.widget.TextView$3
-android.widget.TextView$BufferType
-android.widget.TextView$ChangeWatcher
-android.widget.TextView$CharWrapper
-android.widget.TextView$Drawables
-android.widget.TextView$Marquee
-android.widget.TextView$Marquee$1
-android.widget.TextView$Marquee$2
-android.widget.TextView$Marquee$3
-android.widget.TextView$OnEditorActionListener
-android.widget.TextView$SavedState
-android.widget.TextView$SavedState$1
-android.widget.ThemedSpinnerAdapter
-android.widget.TimePicker
-android.widget.TimePicker$OnTimeChangedListener
-android.widget.Toast
-android.widget.Toast$TN
-android.widget.Toast$TN$1
-android.widget.ToggleButton
-android.widget.Toolbar
-android.widget.Toolbar$1
-android.widget.Toolbar$2
-android.widget.Toolbar$ExpandedActionViewMenuPresenter
-android.widget.Toolbar$LayoutParams
-android.widget.Toolbar$OnMenuItemClickListener
-android.widget.VideoView
-android.widget.ViewAnimator
-android.widget.ViewFlipper
-android.widget.ViewFlipper$1
-android.widget.ViewFlipper$2
-android.widget.ViewSwitcher
-android.widget.WrapperListAdapter
-com.android.framework.protobuf.nano.CodedInputByteBufferNano
-com.android.framework.protobuf.nano.CodedOutputByteBufferNano
-com.android.framework.protobuf.nano.InternalNano
-com.android.framework.protobuf.nano.InvalidProtocolBufferNanoException
-com.android.framework.protobuf.nano.MessageNano
-com.android.framework.protobuf.nano.WireFormatNano
-com.android.i18n.phonenumbers.AlternateFormatsCountryCodeSet
-com.android.i18n.phonenumbers.AsYouTypeFormatter
-com.android.i18n.phonenumbers.CountryCodeToRegionCodeMap
-com.android.i18n.phonenumbers.MetadataLoader
-com.android.i18n.phonenumbers.MetadataManager
-com.android.i18n.phonenumbers.MetadataManager$1
-com.android.i18n.phonenumbers.MetadataSource
-com.android.i18n.phonenumbers.MultiFileMetadataSourceImpl
-com.android.i18n.phonenumbers.NumberParseException
-com.android.i18n.phonenumbers.NumberParseException$ErrorType
-com.android.i18n.phonenumbers.PhoneNumberMatcher
-com.android.i18n.phonenumbers.PhoneNumberMatcher$State
-com.android.i18n.phonenumbers.PhoneNumberUtil
-com.android.i18n.phonenumbers.PhoneNumberUtil$1
-com.android.i18n.phonenumbers.PhoneNumberUtil$Leniency
-com.android.i18n.phonenumbers.PhoneNumberUtil$Leniency$1
-com.android.i18n.phonenumbers.PhoneNumberUtil$Leniency$2
-com.android.i18n.phonenumbers.PhoneNumberUtil$Leniency$3
-com.android.i18n.phonenumbers.PhoneNumberUtil$Leniency$4
-com.android.i18n.phonenumbers.PhoneNumberUtil$PhoneNumberFormat
-com.android.i18n.phonenumbers.PhoneNumberUtil$PhoneNumberType
-com.android.i18n.phonenumbers.PhoneNumberUtil$ValidationResult
-com.android.i18n.phonenumbers.Phonemetadata$NumberFormat
-com.android.i18n.phonenumbers.Phonemetadata$PhoneMetadata
-com.android.i18n.phonenumbers.Phonemetadata$PhoneMetadataCollection
-com.android.i18n.phonenumbers.Phonemetadata$PhoneNumberDesc
-com.android.i18n.phonenumbers.Phonenumber$PhoneNumber
-com.android.i18n.phonenumbers.Phonenumber$PhoneNumber$CountryCodeSource
-com.android.i18n.phonenumbers.RegexCache
-com.android.i18n.phonenumbers.RegexCache$LRUCache
-com.android.i18n.phonenumbers.RegexCache$LRUCache$1
-com.android.i18n.phonenumbers.ShortNumbersRegionCodeSet
-com.android.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder
-com.android.i18n.phonenumbers.prefixmapper.MappingFileProvider
-com.android.i18n.phonenumbers.prefixmapper.PrefixFileReader
-com.android.ims.-$Lambda$AvFHcs3Z6Dq6dkOugMW9Kc7Qzng$4
-com.android.ims.ImsCall$Listener
-com.android.ims.ImsCallForwardInfo
-com.android.ims.ImsCallProfile
-com.android.ims.ImsConfig
-com.android.ims.ImsConfigListener
-com.android.ims.ImsConfigListener$Stub
-com.android.ims.ImsConnectionStateListener
-com.android.ims.ImsEcbm
-com.android.ims.ImsEcbm$ImsEcbmListenerProxy
-com.android.ims.ImsEcbmStateListener
-com.android.ims.ImsException
-com.android.ims.ImsExternalCallStateListener
-com.android.ims.ImsManager
-com.android.ims.ImsManager$1
-com.android.ims.ImsManager$ImsRegistrationListenerProxy
-com.android.ims.ImsManager$ImsServiceDeathRecipient
-com.android.ims.ImsReasonInfo
-com.android.ims.ImsReasonInfo$1
-com.android.ims.ImsSsInfo
-com.android.ims.internal.IImsCallSession
-com.android.ims.internal.IImsCallSessionListener
-com.android.ims.internal.IImsConfig
-com.android.ims.internal.IImsConfig$Stub
-com.android.ims.internal.IImsEcbm
-com.android.ims.internal.IImsEcbm$Stub
-com.android.ims.internal.IImsEcbmListener
-com.android.ims.internal.IImsEcbmListener$Stub
-com.android.ims.internal.IImsMultiEndpoint
-com.android.ims.internal.IImsRegistrationListener
-com.android.ims.internal.IImsRegistrationListener$Stub
-com.android.ims.internal.IImsService
-com.android.ims.internal.IImsService$Stub
-com.android.ims.internal.IImsServiceController
-com.android.ims.internal.IImsServiceFeatureListener
-com.android.ims.internal.IImsUt
-com.android.ims.internal.IImsUt$Stub
-com.android.ims.internal.IImsUtListener
-com.android.ims.internal.IImsUtListener$Stub
-com.android.internal.R$styleable
-com.android.internal.alsa.AlsaCardsParser
-com.android.internal.alsa.AlsaCardsParser$AlsaCardRecord
-com.android.internal.alsa.AlsaDevicesParser
-com.android.internal.alsa.LineTokenizer
-com.android.internal.app.AlertController
-com.android.internal.app.AlertController$1
-com.android.internal.app.AlertController$AlertParams
-com.android.internal.app.AlertController$AlertParams$1
-com.android.internal.app.AlertController$AlertParams$4
-com.android.internal.app.AlertController$ButtonHandler
-com.android.internal.app.AlertController$RecycleListView
-com.android.internal.app.AssistUtils
-com.android.internal.app.IAppOpsCallback
-com.android.internal.app.IAppOpsCallback$Stub
-com.android.internal.app.IAppOpsCallback$Stub$Proxy
-com.android.internal.app.IAppOpsService
-com.android.internal.app.IAppOpsService$Stub
-com.android.internal.app.IAppOpsService$Stub$Proxy
-com.android.internal.app.IAssistScreenshotReceiver
-com.android.internal.app.IBatteryStats
-com.android.internal.app.IBatteryStats$Stub
-com.android.internal.app.IBatteryStats$Stub$Proxy
-com.android.internal.app.IMediaContainerService
-com.android.internal.app.IMediaContainerService$Stub
-com.android.internal.app.IMediaContainerService$Stub$Proxy
-com.android.internal.app.ISoundTriggerService
-com.android.internal.app.ISoundTriggerService$Stub
-com.android.internal.app.IVoiceInteractionManagerService
-com.android.internal.app.IVoiceInteractionManagerService$Stub
-com.android.internal.app.IVoiceInteractionManagerService$Stub$Proxy
-com.android.internal.app.IVoiceInteractionSessionListener
-com.android.internal.app.IVoiceInteractionSessionListener$Stub
-com.android.internal.app.IVoiceInteractionSessionListener$Stub$Proxy
-com.android.internal.app.IVoiceInteractionSessionShowCallback
-com.android.internal.app.IVoiceInteractionSessionShowCallback$Stub
-com.android.internal.app.IVoiceInteractor
-com.android.internal.app.IVoiceInteractor$Stub
-com.android.internal.app.NightDisplayController
-com.android.internal.app.NightDisplayController$Callback
-com.android.internal.app.NightDisplayController$LocalTime
-com.android.internal.app.ProcessMap
-com.android.internal.app.ResolverActivity
-com.android.internal.app.ToolbarActionBar
-com.android.internal.app.ToolbarActionBar$1
-com.android.internal.app.ToolbarActionBar$2
-com.android.internal.app.ToolbarActionBar$ActionMenuPresenterCallback
-com.android.internal.app.ToolbarActionBar$MenuBuilderCallback
-com.android.internal.app.ToolbarActionBar$ToolbarCallbackWrapper
-com.android.internal.app.WindowDecorActionBar
-com.android.internal.app.WindowDecorActionBar$1
-com.android.internal.app.WindowDecorActionBar$2
-com.android.internal.app.WindowDecorActionBar$3
-com.android.internal.app.WindowDecorActionBar$ActionModeImpl
-com.android.internal.app.procstats.DurationsTable
-com.android.internal.app.procstats.IProcessStats
-com.android.internal.app.procstats.IProcessStats$Stub
-com.android.internal.app.procstats.ProcessState
-com.android.internal.app.procstats.ProcessState$1
-com.android.internal.app.procstats.ProcessStats
-com.android.internal.app.procstats.ProcessStats$1
-com.android.internal.app.procstats.ProcessStats$PackageState
-com.android.internal.app.procstats.ProcessStats$ProcessStateHolder
-com.android.internal.app.procstats.PssTable
-com.android.internal.app.procstats.ServiceState
-com.android.internal.app.procstats.SparseMappingTable
-com.android.internal.app.procstats.SparseMappingTable$Table
-com.android.internal.app.procstats.SysMemUsageTable
-com.android.internal.appwidget.IAppWidgetHost
-com.android.internal.appwidget.IAppWidgetHost$Stub
-com.android.internal.appwidget.IAppWidgetHost$Stub$Proxy
-com.android.internal.appwidget.IAppWidgetService
-com.android.internal.appwidget.IAppWidgetService$Stub
-com.android.internal.appwidget.IAppWidgetService$Stub$Proxy
-com.android.internal.backup.IBackupTransport
-com.android.internal.backup.IBackupTransport$Stub
-com.android.internal.backup.IBackupTransport$Stub$Proxy
-com.android.internal.backup.LocalTransport
-com.android.internal.backup.LocalTransportService
-com.android.internal.content.FileSystemProvider
-com.android.internal.content.NativeLibraryHelper
-com.android.internal.content.NativeLibraryHelper$Handle
-com.android.internal.content.PackageHelper
-com.android.internal.content.PackageHelper$1
-com.android.internal.content.PackageHelper$TestableInterface
-com.android.internal.content.PackageMonitor
-com.android.internal.content.ReferrerIntent
-com.android.internal.content.ReferrerIntent$1
-com.android.internal.graphics.drawable.AnimationScaleListDrawable
-com.android.internal.graphics.drawable.AnimationScaleListDrawable$AnimationScaleListState
-com.android.internal.hardware.AmbientDisplayConfiguration
-com.android.internal.inputmethod.IInputContentUriToken
-com.android.internal.inputmethod.InputMethodSubtypeHandle
-com.android.internal.inputmethod.InputMethodSubtypeSwitchingController
-com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$ControllerImpl
-com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$DynamicRotationList
-com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$ImeSubtypeListItem
-com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList
-com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList$1
-com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$StaticRotationList
-com.android.internal.inputmethod.InputMethodUtils
-com.android.internal.inputmethod.InputMethodUtils$1
-com.android.internal.inputmethod.InputMethodUtils$InputMethodListBuilder
-com.android.internal.inputmethod.InputMethodUtils$InputMethodSettings
-com.android.internal.inputmethod.LocaleUtils
-com.android.internal.inputmethod.LocaleUtils$LocaleExtractor
-com.android.internal.inputmethod.LocaleUtils$ScoreEntry
-com.android.internal.location.GpsNetInitiatedHandler
-com.android.internal.location.GpsNetInitiatedHandler$1
-com.android.internal.location.GpsNetInitiatedHandler$2
-com.android.internal.location.ILocationProvider
-com.android.internal.location.ILocationProvider$Stub
-com.android.internal.location.ILocationProvider$Stub$Proxy
-com.android.internal.location.ProviderProperties
-com.android.internal.location.ProviderProperties$1
-com.android.internal.location.ProviderRequest
-com.android.internal.location.ProviderRequest$1
-com.android.internal.logging.AndroidConfig
-com.android.internal.logging.AndroidHandler
-com.android.internal.logging.AndroidHandler$1
-com.android.internal.logging.EventLogTags
-com.android.internal.logging.MetricsLogger
-com.android.internal.net.LegacyVpnInfo
-com.android.internal.net.NetworkStatsFactory
-com.android.internal.net.VpnConfig
-com.android.internal.net.VpnInfo
-com.android.internal.net.VpnProfile
-com.android.internal.notification.SystemNotificationChannels
-com.android.internal.os.AndroidPrintStream
-com.android.internal.os.AppFuseMount
-com.android.internal.os.AtomicFile
-com.android.internal.os.BackgroundThread
-com.android.internal.os.BatteryStatsHelper
-com.android.internal.os.BatteryStatsImpl
-com.android.internal.os.BatteryStatsImpl$1
-com.android.internal.os.BatteryStatsImpl$6
-com.android.internal.os.BatteryStatsImpl$BatchTimer
-com.android.internal.os.BatteryStatsImpl$BatteryCallback
-com.android.internal.os.BatteryStatsImpl$Clocks
-com.android.internal.os.BatteryStatsImpl$ControllerActivityCounterImpl
-com.android.internal.os.BatteryStatsImpl$Counter
-com.android.internal.os.BatteryStatsImpl$DualTimer
-com.android.internal.os.BatteryStatsImpl$DurationTimer
-com.android.internal.os.BatteryStatsImpl$ExternalStatsSync
-com.android.internal.os.BatteryStatsImpl$LongSamplingCounter
-com.android.internal.os.BatteryStatsImpl$LongSamplingCounterArray
-com.android.internal.os.BatteryStatsImpl$MyHandler
-com.android.internal.os.BatteryStatsImpl$OverflowArrayMap
-com.android.internal.os.BatteryStatsImpl$PlatformIdleStateCallback
-com.android.internal.os.BatteryStatsImpl$SamplingTimer
-com.android.internal.os.BatteryStatsImpl$StopwatchTimer
-com.android.internal.os.BatteryStatsImpl$SystemClocks
-com.android.internal.os.BatteryStatsImpl$TimeBase
-com.android.internal.os.BatteryStatsImpl$TimeBaseObs
-com.android.internal.os.BatteryStatsImpl$Timer
-com.android.internal.os.BatteryStatsImpl$Uid
-com.android.internal.os.BatteryStatsImpl$Uid$1
-com.android.internal.os.BatteryStatsImpl$Uid$2
-com.android.internal.os.BatteryStatsImpl$Uid$3
-com.android.internal.os.BatteryStatsImpl$Uid$Pkg
-com.android.internal.os.BatteryStatsImpl$Uid$Pkg$Serv
-com.android.internal.os.BatteryStatsImpl$Uid$Sensor
-com.android.internal.os.BatteryStatsImpl$Uid$Wakelock
-com.android.internal.os.BinderInternal
-com.android.internal.os.BinderInternal$GcWatcher
-com.android.internal.os.FuseAppLoop
-com.android.internal.os.FuseAppLoop$1
-com.android.internal.os.FuseUnavailableMountException
-com.android.internal.os.HandlerCaller
-com.android.internal.os.HandlerCaller$Callback
-com.android.internal.os.HandlerCaller$MyHandler
-com.android.internal.os.IDropBoxManagerService
-com.android.internal.os.IDropBoxManagerService$Stub
-com.android.internal.os.IDropBoxManagerService$Stub$Proxy
-com.android.internal.os.IResultReceiver
-com.android.internal.os.IResultReceiver$Stub
-com.android.internal.os.IResultReceiver$Stub$Proxy
-com.android.internal.os.KernelCpuSpeedReader
-com.android.internal.os.KernelMemoryBandwidthStats
-com.android.internal.os.KernelUidCpuFreqTimeReader
-com.android.internal.os.KernelUidCpuTimeReader
-com.android.internal.os.KernelWakelockReader
-com.android.internal.os.KernelWakelockStats
-com.android.internal.os.KernelWakelockStats$Entry
-com.android.internal.os.LoggingPrintStream
-com.android.internal.os.LoggingPrintStream$1
-com.android.internal.os.PathClassLoaderFactory
-com.android.internal.os.PowerProfile
-com.android.internal.os.PowerProfile$CpuClusterKey
-com.android.internal.os.ProcessCpuTracker
-com.android.internal.os.ProcessCpuTracker$1
-com.android.internal.os.ProcessCpuTracker$FilterStats
-com.android.internal.os.ProcessCpuTracker$Stats
-com.android.internal.os.RoSystemProperties
-com.android.internal.os.RuntimeInit
-com.android.internal.os.RuntimeInit$1
-com.android.internal.os.RuntimeInit$Arguments
-com.android.internal.os.RuntimeInit$KillApplicationHandler
-com.android.internal.os.RuntimeInit$LoggingHandler
-com.android.internal.os.SamplingProfilerIntegration
-com.android.internal.os.SomeArgs
-com.android.internal.os.Zygote
-com.android.internal.os.Zygote$MethodAndArgsCaller
-com.android.internal.os.ZygoteConnection
-com.android.internal.os.ZygoteConnection$Arguments
-com.android.internal.os.ZygoteInit
-com.android.internal.os.ZygoteSecurityException
-com.android.internal.os.ZygoteServer
-com.android.internal.policy.DecorContext
-com.android.internal.policy.DecorView
-com.android.internal.policy.DecorView$1
-com.android.internal.policy.DecorView$ActionModeCallback2Wrapper
-com.android.internal.policy.DecorView$ColorViewAttributes
-com.android.internal.policy.DecorView$ColorViewState
-com.android.internal.policy.DividerSnapAlgorithm
-com.android.internal.policy.DividerSnapAlgorithm$SnapTarget
-com.android.internal.policy.DockedDividerUtils
-com.android.internal.policy.IKeyguardDismissCallback
-com.android.internal.policy.IKeyguardDrawnCallback
-com.android.internal.policy.IKeyguardDrawnCallback$Stub
-com.android.internal.policy.IKeyguardDrawnCallback$Stub$Proxy
-com.android.internal.policy.IKeyguardExitCallback
-com.android.internal.policy.IKeyguardService
-com.android.internal.policy.IKeyguardService$Stub
-com.android.internal.policy.IKeyguardService$Stub$Proxy
-com.android.internal.policy.IKeyguardStateCallback
-com.android.internal.policy.IKeyguardStateCallback$Stub
-com.android.internal.policy.IKeyguardStateCallback$Stub$Proxy
-com.android.internal.policy.IShortcutService
-com.android.internal.policy.IShortcutService$Stub
-com.android.internal.policy.IShortcutService$Stub$Proxy
-com.android.internal.policy.PhoneFallbackEventHandler
-com.android.internal.policy.PhoneLayoutInflater
-com.android.internal.policy.PhoneWindow
-com.android.internal.policy.PhoneWindow$1
-com.android.internal.policy.PhoneWindow$ActionMenuPresenterCallback
-com.android.internal.policy.PhoneWindow$PanelFeatureState
-com.android.internal.policy.PhoneWindow$PhoneWindowMenuCallback
-com.android.internal.policy.PhoneWindow$RotationWatcher
-com.android.internal.policy.PhoneWindow$RotationWatcher$1
-com.android.internal.policy.PipSnapAlgorithm
-com.android.internal.statusbar.IStatusBar
-com.android.internal.statusbar.IStatusBar$Stub
-com.android.internal.statusbar.IStatusBar$Stub$Proxy
-com.android.internal.statusbar.IStatusBarService
-com.android.internal.statusbar.IStatusBarService$Stub
-com.android.internal.statusbar.IStatusBarService$Stub$Proxy
-com.android.internal.statusbar.NotificationVisibility
-com.android.internal.statusbar.NotificationVisibility$1
-com.android.internal.statusbar.StatusBarIcon
-com.android.internal.statusbar.StatusBarIcon$1
-com.android.internal.telecom.IConnectionService
-com.android.internal.telecom.IConnectionService$Stub
-com.android.internal.telecom.IConnectionService$Stub$Proxy
-com.android.internal.telecom.IConnectionServiceAdapter
-com.android.internal.telecom.IConnectionServiceAdapter$Stub
-com.android.internal.telecom.IConnectionServiceAdapter$Stub$Proxy
-com.android.internal.telecom.IInCallAdapter
-com.android.internal.telecom.IInCallAdapter$Stub
-com.android.internal.telecom.IInCallService
-com.android.internal.telecom.IInCallService$Stub
-com.android.internal.telecom.IInCallService$Stub$Proxy
-com.android.internal.telecom.ITelecomService
-com.android.internal.telecom.ITelecomService$Stub
-com.android.internal.telecom.ITelecomService$Stub$Proxy
-com.android.internal.telecom.IVideoProvider
-com.android.internal.telecom.IVideoProvider$Stub
-com.android.internal.telecom.RemoteServiceCallback
-com.android.internal.telecom.RemoteServiceCallback$Stub
-com.android.internal.telecom.RemoteServiceCallback$Stub$Proxy
-com.android.internal.telephony.AppSmsManager
-com.android.internal.telephony.BaseCommands
-com.android.internal.telephony.Call
-com.android.internal.telephony.Call$SrvccState
-com.android.internal.telephony.Call$State
-com.android.internal.telephony.CallManager
-com.android.internal.telephony.CallManager$CallManagerHandler
-com.android.internal.telephony.CallStateException
-com.android.internal.telephony.CallTracker
-com.android.internal.telephony.CallerInfo
-com.android.internal.telephony.CallerInfoAsyncQuery
-com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler
-com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler$CallerInfoWorkerHandler
-com.android.internal.telephony.CallerInfoAsyncQuery$CookieWrapper
-com.android.internal.telephony.CallerInfoAsyncQuery$OnQueryCompleteListener
-com.android.internal.telephony.CarrierActionAgent
-com.android.internal.telephony.CarrierActionAgent$1
-com.android.internal.telephony.CarrierActionAgent$SettingsObserver
-com.android.internal.telephony.CarrierAppUtils
-com.android.internal.telephony.CarrierServiceBindHelper
-com.android.internal.telephony.CarrierServiceBindHelper$1
-com.android.internal.telephony.CarrierServiceBindHelper$2
-com.android.internal.telephony.CarrierServiceBindHelper$AppBinding
-com.android.internal.telephony.CarrierServiceBindHelper$CarrierServicePackageMonitor
-com.android.internal.telephony.CarrierServiceStateTracker
-com.android.internal.telephony.CarrierServiceStateTracker$1
-com.android.internal.telephony.CarrierSignalAgent
-com.android.internal.telephony.CarrierSignalAgent$1
-com.android.internal.telephony.CellBroadcastHandler
-com.android.internal.telephony.CellNetworkScanResult
-com.android.internal.telephony.ClientWakelockAccountant
-com.android.internal.telephony.ClientWakelockTracker
-com.android.internal.telephony.CommandException
-com.android.internal.telephony.CommandException$Error
-com.android.internal.telephony.CommandsInterface
-com.android.internal.telephony.CommandsInterface$RadioState
-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
-com.android.internal.telephony.DeviceStateMonitor
-com.android.internal.telephony.DeviceStateMonitor$1
-com.android.internal.telephony.DeviceStateMonitor$2
-com.android.internal.telephony.EncodeException
-com.android.internal.telephony.GsmAlphabet
-com.android.internal.telephony.GsmAlphabet$TextEncodingDetails
-com.android.internal.telephony.GsmCdmaCall
-com.android.internal.telephony.GsmCdmaCallTracker
-com.android.internal.telephony.GsmCdmaCallTracker$1
-com.android.internal.telephony.GsmCdmaConnection
-com.android.internal.telephony.GsmCdmaPhone
-com.android.internal.telephony.GsmCdmaPhone$1
-com.android.internal.telephony.GsmCdmaPhone$2
-com.android.internal.telephony.HardwareConfig
-com.android.internal.telephony.ICarrierConfigLoader
-com.android.internal.telephony.ICarrierConfigLoader$Stub
-com.android.internal.telephony.ICarrierConfigLoader$Stub$Proxy
-com.android.internal.telephony.IIccPhoneBook
-com.android.internal.telephony.IIccPhoneBook$Stub
-com.android.internal.telephony.IMms
-com.android.internal.telephony.IMms$Stub
-com.android.internal.telephony.IOnSubscriptionsChangedListener
-com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub
-com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub$Proxy
-com.android.internal.telephony.IPhoneStateListener
-com.android.internal.telephony.IPhoneStateListener$Stub
-com.android.internal.telephony.IPhoneStateListener$Stub$Proxy
-com.android.internal.telephony.IPhoneSubInfo
-com.android.internal.telephony.IPhoneSubInfo$Stub
-com.android.internal.telephony.IPhoneSubInfo$Stub$Proxy
-com.android.internal.telephony.ISms
-com.android.internal.telephony.ISms$Stub
-com.android.internal.telephony.ISms$Stub$Proxy
-com.android.internal.telephony.ISub
-com.android.internal.telephony.ISub$Stub
-com.android.internal.telephony.ISub$Stub$Proxy
-com.android.internal.telephony.ITelephony
-com.android.internal.telephony.ITelephony$Stub
-com.android.internal.telephony.ITelephony$Stub$Proxy
-com.android.internal.telephony.ITelephonyRegistry
-com.android.internal.telephony.ITelephonyRegistry$Stub
-com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy
-com.android.internal.telephony.IWapPushManager
-com.android.internal.telephony.IccCard
-com.android.internal.telephony.IccCardConstants$State
-com.android.internal.telephony.IccPhoneBookInterfaceManager
-com.android.internal.telephony.IccPhoneBookInterfaceManager$1
-com.android.internal.telephony.IccProvider
-com.android.internal.telephony.IccSmsInterfaceManager
-com.android.internal.telephony.IccSmsInterfaceManager$1
-com.android.internal.telephony.IccSmsInterfaceManager$CdmaBroadcastRangeManager
-com.android.internal.telephony.IccSmsInterfaceManager$CellBroadcastRangeManager
-com.android.internal.telephony.ImsSMSDispatcher
-com.android.internal.telephony.InboundSmsHandler
-com.android.internal.telephony.InboundSmsHandler$1
-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$StartupState
-com.android.internal.telephony.InboundSmsHandler$WaitingState
-com.android.internal.telephony.IntRangeManager
-com.android.internal.telephony.OemHookIndication
-com.android.internal.telephony.OemHookResponse
-com.android.internal.telephony.OperatorInfo
-com.android.internal.telephony.Phone
-com.android.internal.telephony.Phone$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
-com.android.internal.telephony.PhoneInternalInterface$DataActivityState
-com.android.internal.telephony.PhoneNotifier
-com.android.internal.telephony.PhoneSubInfoController
-com.android.internal.telephony.PhoneSwitcher
-com.android.internal.telephony.PhoneSwitcher$1
-com.android.internal.telephony.PhoneSwitcher$2
-com.android.internal.telephony.PhoneSwitcher$PhoneState
-com.android.internal.telephony.PhoneSwitcher$PhoneSwitcherNetworkRequestListener
-com.android.internal.telephony.ProxyController
-com.android.internal.telephony.ProxyController$1
-com.android.internal.telephony.RIL
-com.android.internal.telephony.RIL$RadioProxyDeathRecipient
-com.android.internal.telephony.RIL$RilHandler
-com.android.internal.telephony.RILConstants
-com.android.internal.telephony.RILRequest
-com.android.internal.telephony.RadioCapability
-com.android.internal.telephony.RadioIndication
-com.android.internal.telephony.RadioResponse
-com.android.internal.telephony.RatRatcheter
-com.android.internal.telephony.RatRatcheter$1
-com.android.internal.telephony.RestrictedState
-com.android.internal.telephony.RetryManager
-com.android.internal.telephony.RilWakelockInfo
-com.android.internal.telephony.SMSDispatcher
-com.android.internal.telephony.SMSDispatcher$SettingsObserver
-com.android.internal.telephony.ServiceStateTracker
-com.android.internal.telephony.ServiceStateTracker$1
-com.android.internal.telephony.ServiceStateTracker$2
-com.android.internal.telephony.ServiceStateTracker$3
-com.android.internal.telephony.ServiceStateTracker$CellInfoResult
-com.android.internal.telephony.ServiceStateTracker$SstSubscriptionsChangedListener
-com.android.internal.telephony.SimActivationTracker
-com.android.internal.telephony.SimActivationTracker$1
-com.android.internal.telephony.SmsApplication
-com.android.internal.telephony.SmsApplication$SmsApplicationData
-com.android.internal.telephony.SmsApplication$SmsPackageMonitor
-com.android.internal.telephony.SmsBroadcastUndelivered
-com.android.internal.telephony.SmsBroadcastUndelivered$1
-com.android.internal.telephony.SmsBroadcastUndelivered$ScanRawTableThread
-com.android.internal.telephony.SmsMessageBase
-com.android.internal.telephony.SmsStorageMonitor
-com.android.internal.telephony.SmsStorageMonitor$1
-com.android.internal.telephony.SmsUsageMonitor
-com.android.internal.telephony.SmsUsageMonitor$SettingsObserver
-com.android.internal.telephony.SmsUsageMonitor$SettingsObserverHandler
-com.android.internal.telephony.SubscriptionController
-com.android.internal.telephony.SubscriptionController$ScLocalLog
-com.android.internal.telephony.SubscriptionInfoUpdater
-com.android.internal.telephony.SubscriptionInfoUpdater$1
-com.android.internal.telephony.SubscriptionInfoUpdater$2
-com.android.internal.telephony.SubscriptionMonitor
-com.android.internal.telephony.SubscriptionMonitor$1
-com.android.internal.telephony.SubscriptionMonitor$2
-com.android.internal.telephony.TelephonyCapabilities
-com.android.internal.telephony.TelephonyComponentFactory
-com.android.internal.telephony.TelephonyDevController
-com.android.internal.telephony.TelephonyTester
-com.android.internal.telephony.TelephonyTester$1
-com.android.internal.telephony.UiccPhoneBookController
-com.android.internal.telephony.UiccSmsController
-com.android.internal.telephony.WakeLockStateMachine
-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.WapPushOverSms
-com.android.internal.telephony.WapPushOverSms$1
-com.android.internal.telephony.WapPushOverSms$BindServiceThread
-com.android.internal.telephony.cat.AppInterface
-com.android.internal.telephony.cat.CatLog
-com.android.internal.telephony.cat.CatService
-com.android.internal.telephony.cdma.CdmaInboundSmsHandler
-com.android.internal.telephony.cdma.CdmaSMSDispatcher
-com.android.internal.telephony.cdma.CdmaServiceCategoryProgramHandler
-com.android.internal.telephony.cdma.CdmaServiceCategoryProgramHandler$1
-com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager
-com.android.internal.telephony.cdma.EriInfo
-com.android.internal.telephony.cdma.EriManager
-com.android.internal.telephony.cdma.EriManager$EriFile
-com.android.internal.telephony.dataconnection.ApnContext
-com.android.internal.telephony.dataconnection.DataConnection
-com.android.internal.telephony.dataconnection.DataEnabledSettings
-com.android.internal.telephony.dataconnection.DcController
-com.android.internal.telephony.dataconnection.DcController$1
-com.android.internal.telephony.dataconnection.DcController$DccDefaultState
-com.android.internal.telephony.dataconnection.DcFailBringUp
-com.android.internal.telephony.dataconnection.DcFailCause
-com.android.internal.telephony.dataconnection.DcRequest
-com.android.internal.telephony.dataconnection.DcTesterDeactivateAll
-com.android.internal.telephony.dataconnection.DcTesterDeactivateAll$1
-com.android.internal.telephony.dataconnection.DcTesterFailBringUpAll
-com.android.internal.telephony.dataconnection.DcTesterFailBringUpAll$1
-com.android.internal.telephony.dataconnection.DcTracker
-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$ApnChangeObserver
-com.android.internal.telephony.dataconnection.DcTracker$DataAllowFailReason
-com.android.internal.telephony.dataconnection.DcTracker$DataAllowFailReasonType
-com.android.internal.telephony.dataconnection.DcTracker$RetryFailures
-com.android.internal.telephony.dataconnection.DcTracker$SettingsObserver
-com.android.internal.telephony.dataconnection.DcTracker$TxRxSum
-com.android.internal.telephony.dataconnection.TelephonyNetworkFactory
-com.android.internal.telephony.dataconnection.TelephonyNetworkFactory$InternalHandler
-com.android.internal.telephony.gsm.GsmCellBroadcastHandler
-com.android.internal.telephony.gsm.GsmInboundSmsHandler
-com.android.internal.telephony.gsm.GsmSMSDispatcher
-com.android.internal.telephony.gsm.SmsMessage
-com.android.internal.telephony.gsm.UsimDataDownloadHandler
-com.android.internal.telephony.ims.-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg
-com.android.internal.telephony.ims.-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg$1
-com.android.internal.telephony.ims.-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg$2
-com.android.internal.telephony.ims.ImsResolver
-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$ImsServiceControllerFactory
-com.android.internal.telephony.ims.ImsResolver$SubscriptionManagerProxy
-com.android.internal.telephony.ims.ImsServiceController$ImsServiceControllerCallbacks
-com.android.internal.telephony.imsphone.-$Lambda$tILLuSJl16qfDJK1ikBVGFm2D5w
-com.android.internal.telephony.imsphone.-$Lambda$tILLuSJl16qfDJK1ikBVGFm2D5w$1
-com.android.internal.telephony.imsphone.ImsExternalCallTracker
-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.ImsExternalConnection$Listener
-com.android.internal.telephony.imsphone.ImsPhone
-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.ImsPhoneBase
-com.android.internal.telephony.imsphone.ImsPhoneCall
-com.android.internal.telephony.imsphone.ImsPhoneCallTracker
-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$IRetryTimeout
-com.android.internal.telephony.imsphone.ImsPhoneCallTracker$PhoneStateListener
-com.android.internal.telephony.imsphone.ImsPhoneCommandInterface
-com.android.internal.telephony.imsphone.ImsPhoneFactory
-com.android.internal.telephony.imsphone.ImsPullCall
-com.android.internal.telephony.metrics.CallSessionEventBuilder
-com.android.internal.telephony.metrics.InProgressCallSession
-com.android.internal.telephony.metrics.InProgressSmsSession
-com.android.internal.telephony.metrics.SmsSessionEventBuilder
-com.android.internal.telephony.metrics.TelephonyEventBuilder
-com.android.internal.telephony.metrics.TelephonyMetrics
-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$RilDataCall
-com.android.internal.telephony.nano.TelephonyProto$SmsSession$Event
-com.android.internal.telephony.nano.TelephonyProto$TelephonyCallSession$Event
-com.android.internal.telephony.nano.TelephonyProto$TelephonyCallSession$Event$RilCall
-com.android.internal.telephony.nano.TelephonyProto$TelephonyEvent
-com.android.internal.telephony.nano.TelephonyProto$TelephonyServiceState
-com.android.internal.telephony.nano.TelephonyProto$TelephonyServiceState$TelephonyOperator
-com.android.internal.telephony.nano.TelephonyProto$TelephonySettings
-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.WireFormatNano
-com.android.internal.telephony.test.SimulatedRadioControl
-com.android.internal.telephony.uicc.IccCardApplicationStatus
-com.android.internal.telephony.uicc.IccCardApplicationStatus$AppType
-com.android.internal.telephony.uicc.IccCardProxy
-com.android.internal.telephony.uicc.IccCardStatus
-com.android.internal.telephony.uicc.IccCardStatus$CardState
-com.android.internal.telephony.uicc.IccCardStatus$PinState
-com.android.internal.telephony.uicc.IccConstants
-com.android.internal.telephony.uicc.IccRecords
-com.android.internal.telephony.uicc.IccUtils
-com.android.internal.telephony.uicc.UiccCard
-com.android.internal.telephony.uicc.UiccCard$1
-com.android.internal.telephony.uicc.UiccCardApplication
-com.android.internal.telephony.uicc.UiccController
-com.android.internal.telephony.uicc.UiccStateChangedLauncher
-com.android.internal.telephony.util.NotificationChannelController
-com.android.internal.telephony.util.NotificationChannelController$1
-com.android.internal.textservice.ISpellCheckerService
-com.android.internal.textservice.ISpellCheckerService$Stub
-com.android.internal.textservice.ISpellCheckerService$Stub$Proxy
-com.android.internal.textservice.ISpellCheckerServiceCallback
-com.android.internal.textservice.ISpellCheckerServiceCallback$Stub
-com.android.internal.textservice.ISpellCheckerServiceCallback$Stub$Proxy
-com.android.internal.textservice.ISpellCheckerSession
-com.android.internal.textservice.ISpellCheckerSession$Stub
-com.android.internal.textservice.ISpellCheckerSession$Stub$Proxy
-com.android.internal.textservice.ISpellCheckerSessionListener
-com.android.internal.textservice.ISpellCheckerSessionListener$Stub
-com.android.internal.textservice.ISpellCheckerSessionListener$Stub$Proxy
-com.android.internal.textservice.ITextServicesManager
-com.android.internal.textservice.ITextServicesManager$Stub
-com.android.internal.textservice.ITextServicesManager$Stub$Proxy
-com.android.internal.textservice.ITextServicesSessionListener
-com.android.internal.textservice.ITextServicesSessionListener$Stub
-com.android.internal.textservice.ITextServicesSessionListener$Stub$Proxy
-com.android.internal.transition.EpicenterTranslateClipReveal
-com.android.internal.transition.TransitionConstants
-com.android.internal.util.ArrayUtils
-com.android.internal.util.AsyncChannel
-com.android.internal.util.AsyncChannel$AsyncChannelConnection
-com.android.internal.util.AsyncChannel$DeathMonitor
-com.android.internal.util.AsyncChannel$SyncMessenger
-com.android.internal.util.AsyncChannel$SyncMessenger$SyncHandler
-com.android.internal.util.BitUtils
-com.android.internal.util.CollectionUtils
-com.android.internal.util.ConcurrentUtils
-com.android.internal.util.ConcurrentUtils$1
-com.android.internal.util.ConcurrentUtils$1$1
-com.android.internal.util.DumpUtils$Dump
-com.android.internal.util.ExponentiallyBucketedHistogram
-com.android.internal.util.FastMath
-com.android.internal.util.FastPrintWriter
-com.android.internal.util.FastPrintWriter$DummyWriter
-com.android.internal.util.FastXmlSerializer
-com.android.internal.util.FileRotator
-com.android.internal.util.FileRotator$FileInfo
-com.android.internal.util.FileRotator$Reader
-com.android.internal.util.FileRotator$Rewriter
-com.android.internal.util.FileRotator$Writer
-com.android.internal.util.GrowingArrayUtils
-com.android.internal.util.HexDump
-com.android.internal.util.IState
-com.android.internal.util.ImageUtils
-com.android.internal.util.IndentingPrintWriter
-com.android.internal.util.IntPair
-com.android.internal.util.JournaledFile
-com.android.internal.util.LineBreakBufferedWriter
-com.android.internal.util.LocalLog
-com.android.internal.util.MemInfoReader
-com.android.internal.util.MessageUtils
-com.android.internal.util.NotificationColorUtil
-com.android.internal.util.NotificationColorUtil$ColorUtilsFromCompat
-com.android.internal.util.NotificationMessagingUtil
-com.android.internal.util.NotificationMessagingUtil$1
-com.android.internal.util.Preconditions
-com.android.internal.util.ProcFileReader
-com.android.internal.util.ProgressReporter
-com.android.internal.util.RingBufferIndices
-com.android.internal.util.ScreenShapeHelper
-com.android.internal.util.State
-com.android.internal.util.StateMachine
-com.android.internal.util.StateMachine$LogRec
-com.android.internal.util.StateMachine$LogRecords
-com.android.internal.util.StateMachine$SmHandler
-com.android.internal.util.StateMachine$SmHandler$HaltingState
-com.android.internal.util.StateMachine$SmHandler$QuittingState
-com.android.internal.util.StateMachine$SmHandler$StateInfo
-com.android.internal.util.ToBooleanFunction
-com.android.internal.util.TokenBucket
-com.android.internal.util.VirtualRefBasePtr
-com.android.internal.util.WakeupMessage
-com.android.internal.util.XmlUtils
-com.android.internal.util.XmlUtils$ReadMapCallback
-com.android.internal.util.XmlUtils$WriteMapCallback
-com.android.internal.view.ActionBarPolicy
-com.android.internal.view.BaseIWindow
-com.android.internal.view.BaseSurfaceHolder
-com.android.internal.view.IInputConnectionWrapper
-com.android.internal.view.IInputConnectionWrapper$MyHandler
-com.android.internal.view.IInputContext
-com.android.internal.view.IInputContext$Stub
-com.android.internal.view.IInputContext$Stub$Proxy
-com.android.internal.view.IInputContextCallback
-com.android.internal.view.IInputContextCallback$Stub
-com.android.internal.view.IInputContextCallback$Stub$Proxy
-com.android.internal.view.IInputMethod
-com.android.internal.view.IInputMethod$Stub
-com.android.internal.view.IInputMethod$Stub$Proxy
-com.android.internal.view.IInputMethodClient
-com.android.internal.view.IInputMethodClient$Stub
-com.android.internal.view.IInputMethodClient$Stub$Proxy
-com.android.internal.view.IInputMethodManager
-com.android.internal.view.IInputMethodManager$Stub
-com.android.internal.view.IInputMethodManager$Stub$Proxy
-com.android.internal.view.IInputMethodSession
-com.android.internal.view.IInputMethodSession$Stub
-com.android.internal.view.IInputMethodSession$Stub$Proxy
-com.android.internal.view.IInputSessionCallback
-com.android.internal.view.IInputSessionCallback$Stub
-com.android.internal.view.IInputSessionCallback$Stub$Proxy
-com.android.internal.view.InputBindResult
-com.android.internal.view.InputBindResult$1
-com.android.internal.view.InputConnectionWrapper
-com.android.internal.view.InputConnectionWrapper$InputContextCallback
-com.android.internal.view.OneShotPreDrawListener
-com.android.internal.view.RootViewSurfaceTaker
-com.android.internal.view.RotationPolicy
-com.android.internal.view.RotationPolicy$RotationPolicyListener
-com.android.internal.view.RotationPolicy$RotationPolicyListener$1
-com.android.internal.view.SurfaceCallbackHelper
-com.android.internal.view.SurfaceCallbackHelper$1
-com.android.internal.view.SurfaceFlingerVsyncChoreographer
-com.android.internal.view.WindowManagerPolicyThread
-com.android.internal.view.animation.FallbackLUTInterpolator
-com.android.internal.view.animation.HasNativeInterpolator
-com.android.internal.view.animation.NativeInterpolatorFactory
-com.android.internal.view.animation.NativeInterpolatorFactoryHelper
-com.android.internal.view.menu.ActionMenuItem
-com.android.internal.view.menu.ActionMenuItemView
-com.android.internal.view.menu.ActionMenuItemView$PopupCallback
-com.android.internal.view.menu.BaseMenuPresenter
-com.android.internal.view.menu.ContextMenuBuilder
-com.android.internal.view.menu.MenuBuilder
-com.android.internal.view.menu.MenuBuilder$Callback
-com.android.internal.view.menu.MenuBuilder$ItemInvoker
-com.android.internal.view.menu.MenuHelper
-com.android.internal.view.menu.MenuItemImpl
-com.android.internal.view.menu.MenuPopupHelper
-com.android.internal.view.menu.MenuPopupHelper$1
-com.android.internal.view.menu.MenuPresenter
-com.android.internal.view.menu.MenuPresenter$Callback
-com.android.internal.view.menu.MenuView
-com.android.internal.view.menu.MenuView$ItemView
-com.android.internal.view.menu.ShowableListMenu
-com.android.internal.widget.-$Lambda$LaTFiUorkqfcqmu-zMQbCLeO77c
-com.android.internal.widget.AbsActionBarView
-com.android.internal.widget.AbsActionBarView$VisibilityAnimListener
-com.android.internal.widget.ActionBarContainer
-com.android.internal.widget.ActionBarContainer$ActionBarBackgroundDrawable
-com.android.internal.widget.ActionBarContextView
-com.android.internal.widget.ActionBarContextView$1
-com.android.internal.widget.ActionBarOverlayLayout
-com.android.internal.widget.ActionBarOverlayLayout$1
-com.android.internal.widget.ActionBarOverlayLayout$2
-com.android.internal.widget.ActionBarOverlayLayout$3
-com.android.internal.widget.ActionBarOverlayLayout$4
-com.android.internal.widget.ActionBarOverlayLayout$5
-com.android.internal.widget.ActionBarOverlayLayout$ActionBarVisibilityCallback
-com.android.internal.widget.ActionBarOverlayLayout$LayoutParams
-com.android.internal.widget.AlertDialogLayout
-com.android.internal.widget.BackgroundFallback
-com.android.internal.widget.ButtonBarLayout
-com.android.internal.widget.CachingIconView
-com.android.internal.widget.DecorContentParent
-com.android.internal.widget.DecorToolbar
-com.android.internal.widget.DialogTitle
-com.android.internal.widget.EditableInputConnection
-com.android.internal.widget.ICheckCredentialProgressCallback
-com.android.internal.widget.ILockSettings
-com.android.internal.widget.ILockSettings$Stub
-com.android.internal.widget.ILockSettings$Stub$Proxy
-com.android.internal.widget.ImageFloatingTextView
-com.android.internal.widget.LockPatternUtils
-com.android.internal.widget.LockPatternUtils$RequestThrottledException
-com.android.internal.widget.LockPatternUtils$StrongAuthTracker
-com.android.internal.widget.LockPatternUtils$StrongAuthTracker$1
-com.android.internal.widget.LockPatternUtils$StrongAuthTracker$H
-com.android.internal.widget.MediaNotificationView
-com.android.internal.widget.NotificationActionListLayout
-com.android.internal.widget.NotificationExpandButton
-com.android.internal.widget.ScrollBarUtils
-com.android.internal.widget.ToolbarWidgetWrapper
-com.android.internal.widget.ToolbarWidgetWrapper$1
-com.android.internal.widget.ToolbarWidgetWrapper$2
-com.android.internal.widget.VerifyCredentialResponse
-com.android.okhttp.Address
-com.android.okhttp.AndroidInternal
-com.android.okhttp.AndroidShimResponseCache
-com.android.okhttp.Authenticator
-com.android.okhttp.Cache
-com.android.okhttp.Cache$1
-com.android.okhttp.Cache$CacheRequestImpl
-com.android.okhttp.Cache$CacheRequestImpl$1
-com.android.okhttp.Cache$Entry
-com.android.okhttp.CacheControl
-com.android.okhttp.CacheControl$Builder
-com.android.okhttp.CertificatePinner
-com.android.okhttp.CertificatePinner$Builder
-com.android.okhttp.CipherSuite
-com.android.okhttp.ConfigAwareConnectionPool
-com.android.okhttp.ConfigAwareConnectionPool$1
-com.android.okhttp.Connection
-com.android.okhttp.ConnectionPool
-com.android.okhttp.ConnectionPool$1
-com.android.okhttp.ConnectionSpec
-com.android.okhttp.ConnectionSpec$Builder
-com.android.okhttp.Dispatcher
-com.android.okhttp.Dns
-com.android.okhttp.Dns$1
-com.android.okhttp.Handshake
-com.android.okhttp.Headers
-com.android.okhttp.Headers$Builder
-com.android.okhttp.HttpHandler
-com.android.okhttp.HttpHandler$CleartextURLFilter
-com.android.okhttp.HttpUrl
-com.android.okhttp.HttpUrl$Builder
-com.android.okhttp.HttpUrl$Builder$ParseResult
-com.android.okhttp.HttpsHandler
-com.android.okhttp.OkCacheContainer
-com.android.okhttp.OkHttpClient
-com.android.okhttp.OkHttpClient$1
-com.android.okhttp.OkUrlFactory
-com.android.okhttp.Protocol
-com.android.okhttp.Request
-com.android.okhttp.Request$Builder
-com.android.okhttp.RequestBody
-com.android.okhttp.RequestBody$2
-com.android.okhttp.Response
-com.android.okhttp.Response$Builder
-com.android.okhttp.ResponseBody
-com.android.okhttp.Route
-com.android.okhttp.TlsVersion
-com.android.okhttp.internal.ConnectionSpecSelector
-com.android.okhttp.internal.DiskLruCache
-com.android.okhttp.internal.DiskLruCache$1
-com.android.okhttp.internal.DiskLruCache$2
-com.android.okhttp.internal.DiskLruCache$3
-com.android.okhttp.internal.DiskLruCache$Editor
-com.android.okhttp.internal.DiskLruCache$Editor$1
-com.android.okhttp.internal.DiskLruCache$Entry
-com.android.okhttp.internal.FaultHidingSink
-com.android.okhttp.internal.Internal
-com.android.okhttp.internal.InternalCache
-com.android.okhttp.internal.OptionalMethod
-com.android.okhttp.internal.Platform
-com.android.okhttp.internal.RouteDatabase
-com.android.okhttp.internal.URLFilter
-com.android.okhttp.internal.Util
-com.android.okhttp.internal.Util$1
-com.android.okhttp.internal.http.AuthenticatorAdapter
-com.android.okhttp.internal.http.CacheRequest
-com.android.okhttp.internal.http.CacheStrategy
-com.android.okhttp.internal.http.CacheStrategy$Factory
-com.android.okhttp.internal.http.HeaderParser
-com.android.okhttp.internal.http.Http1xStream
-com.android.okhttp.internal.http.Http1xStream$AbstractSource
-com.android.okhttp.internal.http.Http1xStream$ChunkedSink
-com.android.okhttp.internal.http.Http1xStream$ChunkedSource
-com.android.okhttp.internal.http.Http1xStream$FixedLengthSink
-com.android.okhttp.internal.http.Http1xStream$FixedLengthSource
-com.android.okhttp.internal.http.Http1xStream$UnknownLengthSource
-com.android.okhttp.internal.http.HttpEngine
-com.android.okhttp.internal.http.HttpEngine$1
-com.android.okhttp.internal.http.HttpEngine$2
-com.android.okhttp.internal.http.HttpMethod
-com.android.okhttp.internal.http.HttpStream
-com.android.okhttp.internal.http.OkHeaders
-com.android.okhttp.internal.http.OkHeaders$1
-com.android.okhttp.internal.http.RealResponseBody
-com.android.okhttp.internal.http.RequestException
-com.android.okhttp.internal.http.RequestLine
-com.android.okhttp.internal.http.RetryableSink
-com.android.okhttp.internal.http.RouteException
-com.android.okhttp.internal.http.RouteSelector
-com.android.okhttp.internal.http.StatusLine
-com.android.okhttp.internal.http.StreamAllocation
-com.android.okhttp.internal.huc.DelegatingHttpsURLConnection
-com.android.okhttp.internal.huc.HttpURLConnectionImpl
-com.android.okhttp.internal.huc.HttpsURLConnectionImpl
-com.android.okhttp.internal.io.FileSystem
-com.android.okhttp.internal.io.FileSystem$1
-com.android.okhttp.internal.io.RealConnection
-com.android.okhttp.internal.tls.OkHostnameVerifier
-com.android.okhttp.okio.AsyncTimeout
-com.android.okhttp.okio.AsyncTimeout$1
-com.android.okhttp.okio.AsyncTimeout$2
-com.android.okhttp.okio.AsyncTimeout$Watchdog
-com.android.okhttp.okio.Base64
-com.android.okhttp.okio.Buffer
-com.android.okhttp.okio.BufferedSink
-com.android.okhttp.okio.BufferedSource
-com.android.okhttp.okio.ByteString
-com.android.okhttp.okio.ForwardingSink
-com.android.okhttp.okio.ForwardingTimeout
-com.android.okhttp.okio.GzipSource
-com.android.okhttp.okio.InflaterSource
-com.android.okhttp.okio.Okio
-com.android.okhttp.okio.Okio$1
-com.android.okhttp.okio.Okio$2
-com.android.okhttp.okio.Okio$3
-com.android.okhttp.okio.RealBufferedSink
-com.android.okhttp.okio.RealBufferedSink$1
-com.android.okhttp.okio.RealBufferedSource
-com.android.okhttp.okio.RealBufferedSource$1
-com.android.okhttp.okio.Segment
-com.android.okhttp.okio.SegmentPool
-com.android.okhttp.okio.Sink
-com.android.okhttp.okio.Source
-com.android.okhttp.okio.Timeout
-com.android.okhttp.okio.Timeout$1
-com.android.okhttp.okio.Util
-com.android.org.bouncycastle.asn1.ASN1BitString
-com.android.org.bouncycastle.asn1.ASN1Choice
-com.android.org.bouncycastle.asn1.ASN1Encodable
-com.android.org.bouncycastle.asn1.ASN1EncodableVector
-com.android.org.bouncycastle.asn1.ASN1InputStream
-com.android.org.bouncycastle.asn1.ASN1Integer
-com.android.org.bouncycastle.asn1.ASN1Null
-com.android.org.bouncycastle.asn1.ASN1Object
-com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier
-com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier$OidHandle
-com.android.org.bouncycastle.asn1.ASN1OutputStream
-com.android.org.bouncycastle.asn1.ASN1Primitive
-com.android.org.bouncycastle.asn1.ASN1Sequence
-com.android.org.bouncycastle.asn1.ASN1Set
-com.android.org.bouncycastle.asn1.ASN1StreamParser
-com.android.org.bouncycastle.asn1.ASN1String
-com.android.org.bouncycastle.asn1.ASN1TaggedObject
-com.android.org.bouncycastle.asn1.ASN1TaggedObjectParser
-com.android.org.bouncycastle.asn1.ASN1UTCTime
-com.android.org.bouncycastle.asn1.BERTags
-com.android.org.bouncycastle.asn1.DERBitString
-com.android.org.bouncycastle.asn1.DERFactory
-com.android.org.bouncycastle.asn1.DERNull
-com.android.org.bouncycastle.asn1.DEROutputStream
-com.android.org.bouncycastle.asn1.DERPrintableString
-com.android.org.bouncycastle.asn1.DERSequence
-com.android.org.bouncycastle.asn1.DERSet
-com.android.org.bouncycastle.asn1.DERTaggedObject
-com.android.org.bouncycastle.asn1.DLSequence
-com.android.org.bouncycastle.asn1.DLSet
-com.android.org.bouncycastle.asn1.DefiniteLengthInputStream
-com.android.org.bouncycastle.asn1.InMemoryRepresentable
-com.android.org.bouncycastle.asn1.IndefiniteLengthInputStream
-com.android.org.bouncycastle.asn1.LimitedInputStream
-com.android.org.bouncycastle.asn1.OIDTokenizer
-com.android.org.bouncycastle.asn1.StreamUtil
-com.android.org.bouncycastle.asn1.bc.BCObjectIdentifiers
-com.android.org.bouncycastle.asn1.iana.IANAObjectIdentifiers
-com.android.org.bouncycastle.asn1.misc.MiscObjectIdentifiers
-com.android.org.bouncycastle.asn1.nist.NISTObjectIdentifiers
-com.android.org.bouncycastle.asn1.oiw.OIWObjectIdentifiers
-com.android.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers
-com.android.org.bouncycastle.asn1.x500.RDN
-com.android.org.bouncycastle.asn1.x500.X500Name
-com.android.org.bouncycastle.asn1.x500.X500NameStyle
-com.android.org.bouncycastle.asn1.x500.style.AbstractX500NameStyle
-com.android.org.bouncycastle.asn1.x500.style.BCStyle
-com.android.org.bouncycastle.asn1.x509.AlgorithmIdentifier
-com.android.org.bouncycastle.asn1.x509.Certificate
-com.android.org.bouncycastle.asn1.x509.SubjectPublicKeyInfo
-com.android.org.bouncycastle.asn1.x509.TBSCertificate
-com.android.org.bouncycastle.asn1.x509.Time
-com.android.org.bouncycastle.asn1.x509.X509ObjectIdentifiers
-com.android.org.bouncycastle.asn1.x9.X9ObjectIdentifiers
-com.android.org.bouncycastle.crypto.AsymmetricBlockCipher
-com.android.org.bouncycastle.crypto.CipherKeyGenerator
-com.android.org.bouncycastle.crypto.CipherParameters
-com.android.org.bouncycastle.crypto.CryptoException
-com.android.org.bouncycastle.crypto.Digest
-com.android.org.bouncycastle.crypto.ExtendedDigest
-com.android.org.bouncycastle.crypto.InvalidCipherTextException
-com.android.org.bouncycastle.crypto.KeyGenerationParameters
-com.android.org.bouncycastle.crypto.Mac
-com.android.org.bouncycastle.crypto.PBEParametersGenerator
-com.android.org.bouncycastle.crypto.digests.AndroidDigestFactory
-com.android.org.bouncycastle.crypto.digests.AndroidDigestFactoryInterface
-com.android.org.bouncycastle.crypto.digests.AndroidDigestFactoryOpenSSL
-com.android.org.bouncycastle.crypto.digests.EncodableDigest
-com.android.org.bouncycastle.crypto.digests.GeneralDigest
-com.android.org.bouncycastle.crypto.digests.OpenSSLDigest
-com.android.org.bouncycastle.crypto.digests.OpenSSLDigest$SHA1
-com.android.org.bouncycastle.crypto.digests.SHA1Digest
-com.android.org.bouncycastle.crypto.encodings.OAEPEncoding
-com.android.org.bouncycastle.crypto.engines.RSABlindedEngine
-com.android.org.bouncycastle.crypto.engines.RSACoreEngine
-com.android.org.bouncycastle.crypto.generators.PKCS12ParametersGenerator
-com.android.org.bouncycastle.crypto.io.MacInputStream
-com.android.org.bouncycastle.crypto.macs.HMac
-com.android.org.bouncycastle.crypto.params.KeyParameter
-com.android.org.bouncycastle.jcajce.provider.asymmetric.DH$Mappings
-com.android.org.bouncycastle.jcajce.provider.asymmetric.DSA$Mappings
-com.android.org.bouncycastle.jcajce.provider.asymmetric.EC$Mappings
-com.android.org.bouncycastle.jcajce.provider.asymmetric.RSA$Mappings
-com.android.org.bouncycastle.jcajce.provider.asymmetric.X509$Mappings
-com.android.org.bouncycastle.jcajce.provider.asymmetric.dh.KeyFactorySpi
-com.android.org.bouncycastle.jcajce.provider.asymmetric.dsa.DSAUtil
-com.android.org.bouncycastle.jcajce.provider.asymmetric.dsa.KeyFactorySpi
-com.android.org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi
-com.android.org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi$EC
-com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi
-com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi$NoPadding
-com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi
-com.android.org.bouncycastle.jcajce.provider.asymmetric.util.BaseCipherSpi
-com.android.org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi
-com.android.org.bouncycastle.jcajce.provider.asymmetric.util.PKCS12BagAttributeCarrierImpl
-com.android.org.bouncycastle.jcajce.provider.asymmetric.x509.CertificateFactory
-com.android.org.bouncycastle.jcajce.provider.asymmetric.x509.PEMUtil
-com.android.org.bouncycastle.jcajce.provider.asymmetric.x509.X509CertificateObject
-com.android.org.bouncycastle.jcajce.provider.config.ConfigurableProvider
-com.android.org.bouncycastle.jcajce.provider.config.ProviderConfiguration
-com.android.org.bouncycastle.jcajce.provider.config.ProviderConfigurationPermission
-com.android.org.bouncycastle.jcajce.provider.digest.DigestAlgorithmProvider
-com.android.org.bouncycastle.jcajce.provider.digest.MD5
-com.android.org.bouncycastle.jcajce.provider.digest.MD5$Mappings
-com.android.org.bouncycastle.jcajce.provider.digest.SHA1
-com.android.org.bouncycastle.jcajce.provider.digest.SHA1$KeyGenerator
-com.android.org.bouncycastle.jcajce.provider.digest.SHA1$Mappings
-com.android.org.bouncycastle.jcajce.provider.digest.SHA224
-com.android.org.bouncycastle.jcajce.provider.digest.SHA224$Mappings
-com.android.org.bouncycastle.jcajce.provider.digest.SHA256
-com.android.org.bouncycastle.jcajce.provider.digest.SHA256$Mappings
-com.android.org.bouncycastle.jcajce.provider.digest.SHA384
-com.android.org.bouncycastle.jcajce.provider.digest.SHA384$Mappings
-com.android.org.bouncycastle.jcajce.provider.digest.SHA512
-com.android.org.bouncycastle.jcajce.provider.digest.SHA512$Mappings
-com.android.org.bouncycastle.jcajce.provider.keystore.BC$Mappings
-com.android.org.bouncycastle.jcajce.provider.keystore.PKCS12$Mappings
-com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi
-com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi$Std
-com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi$StoreEntry
-com.android.org.bouncycastle.jcajce.provider.symmetric.AES
-com.android.org.bouncycastle.jcajce.provider.symmetric.AES$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.ARC4
-com.android.org.bouncycastle.jcajce.provider.symmetric.ARC4$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.Blowfish
-com.android.org.bouncycastle.jcajce.provider.symmetric.Blowfish$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.DES
-com.android.org.bouncycastle.jcajce.provider.symmetric.DES$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.DESede
-com.android.org.bouncycastle.jcajce.provider.symmetric.DESede$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2
-com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12
-com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.PBES2AlgorithmParameters
-com.android.org.bouncycastle.jcajce.provider.symmetric.PBES2AlgorithmParameters$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.RC2
-com.android.org.bouncycastle.jcajce.provider.symmetric.RC2$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.SymmetricAlgorithmProvider
-com.android.org.bouncycastle.jcajce.provider.symmetric.Twofish
-com.android.org.bouncycastle.jcajce.provider.symmetric.Twofish$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator
-com.android.org.bouncycastle.jcajce.provider.util.AlgorithmProvider
-com.android.org.bouncycastle.jcajce.provider.util.AsymmetricAlgorithmProvider
-com.android.org.bouncycastle.jcajce.provider.util.AsymmetricKeyInfoConverter
-com.android.org.bouncycastle.jcajce.provider.util.DigestFactory
-com.android.org.bouncycastle.jcajce.util.BCJcaJceHelper
-com.android.org.bouncycastle.jcajce.util.JcaJceHelper
-com.android.org.bouncycastle.jcajce.util.ProviderJcaJceHelper
-com.android.org.bouncycastle.jce.interfaces.BCKeyStore
-com.android.org.bouncycastle.jce.interfaces.PKCS12BagAttributeCarrier
-com.android.org.bouncycastle.jce.provider.BouncyCastleProvider
-com.android.org.bouncycastle.jce.provider.BouncyCastleProvider$1
-com.android.org.bouncycastle.jce.provider.BouncyCastleProviderConfiguration
-com.android.org.bouncycastle.jce.provider.CertStoreCollectionSpi
-com.android.org.bouncycastle.util.Arrays
-com.android.org.bouncycastle.util.Encodable
-com.android.org.bouncycastle.util.Integers
-com.android.org.bouncycastle.util.Iterable
-com.android.org.bouncycastle.util.Memoable
-com.android.org.bouncycastle.util.Pack
-com.android.org.bouncycastle.util.Strings
-com.android.org.bouncycastle.util.Strings$1
-com.android.org.bouncycastle.util.io.Streams
-com.android.org.conscrypt.AbstractOpenSSLSession
-com.android.org.conscrypt.AbstractSessionContext
-com.android.org.conscrypt.AbstractSessionContext$1
-com.android.org.conscrypt.AddressUtils
-com.android.org.conscrypt.ArrayUtils
-com.android.org.conscrypt.ByteArray
-com.android.org.conscrypt.CertBlacklist
-com.android.org.conscrypt.CertificatePriorityComparator
-com.android.org.conscrypt.ChainStrengthAnalyzer
-com.android.org.conscrypt.ClientSessionContext
-com.android.org.conscrypt.ClientSessionContext$HostAndPort
-com.android.org.conscrypt.CryptoUpcalls
-com.android.org.conscrypt.EvpMdRef$MD5
-com.android.org.conscrypt.EvpMdRef$SHA1
-com.android.org.conscrypt.EvpMdRef$SHA256
-com.android.org.conscrypt.FileClientSessionCache
-com.android.org.conscrypt.FileClientSessionCache$CacheFile
-com.android.org.conscrypt.FileClientSessionCache$Impl
-com.android.org.conscrypt.Hex
-com.android.org.conscrypt.JSSEProvider
-com.android.org.conscrypt.KeyManagerFactoryImpl
-com.android.org.conscrypt.KeyManagerImpl
-com.android.org.conscrypt.NativeCrypto
-com.android.org.conscrypt.NativeCrypto$SSLHandshakeCallbacks
-com.android.org.conscrypt.NativeCryptoJni
-com.android.org.conscrypt.NativeRef
-com.android.org.conscrypt.NativeRef$EC_GROUP
-com.android.org.conscrypt.NativeRef$EC_POINT
-com.android.org.conscrypt.NativeRef$EVP_CIPHER_CTX
-com.android.org.conscrypt.NativeRef$EVP_MD_CTX
-com.android.org.conscrypt.NativeRef$EVP_PKEY
-com.android.org.conscrypt.NativeRef$HMAC_CTX
-com.android.org.conscrypt.OpenSSLBIOInputStream
-com.android.org.conscrypt.OpenSSLCipher
-com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER
-com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER$AES
-com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER$AES$CBC
-com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER$AES$CBC$PKCS5Padding
-com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER$AES_BASE
-com.android.org.conscrypt.OpenSSLCipher$Mode
-com.android.org.conscrypt.OpenSSLCipher$Padding
-com.android.org.conscrypt.OpenSSLContextImpl
-com.android.org.conscrypt.OpenSSLContextImpl$TLSv12
-com.android.org.conscrypt.OpenSSLECGroupContext
-com.android.org.conscrypt.OpenSSLECKeyFactory
-com.android.org.conscrypt.OpenSSLECPointContext
-com.android.org.conscrypt.OpenSSLECPublicKey
-com.android.org.conscrypt.OpenSSLExtendedSessionImpl
-com.android.org.conscrypt.OpenSSLKey
-com.android.org.conscrypt.OpenSSLKeyHolder
-com.android.org.conscrypt.OpenSSLMac
-com.android.org.conscrypt.OpenSSLMac$HmacSHA1
-com.android.org.conscrypt.OpenSSLMac$HmacSHA256
-com.android.org.conscrypt.OpenSSLMessageDigestJDK
-com.android.org.conscrypt.OpenSSLMessageDigestJDK$MD5
-com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA1
-com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA256
-com.android.org.conscrypt.OpenSSLProvider
-com.android.org.conscrypt.OpenSSLRSAKeyFactory
-com.android.org.conscrypt.OpenSSLRSAPublicKey
-com.android.org.conscrypt.OpenSSLRandom
-com.android.org.conscrypt.OpenSSLSessionImpl
-com.android.org.conscrypt.OpenSSLSignature
-com.android.org.conscrypt.OpenSSLSignature$EngineType
-com.android.org.conscrypt.OpenSSLSignature$RSAPKCS1Padding
-com.android.org.conscrypt.OpenSSLSignature$SHA1RSA
-com.android.org.conscrypt.OpenSSLSignature$SHA256RSA
-com.android.org.conscrypt.OpenSSLSocketFactoryImpl
-com.android.org.conscrypt.OpenSSLSocketImpl
-com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream
-com.android.org.conscrypt.OpenSSLSocketImpl$SSLOutputStream
-com.android.org.conscrypt.OpenSSLSocketImplWrapper
-com.android.org.conscrypt.OpenSSLX509CertPath
-com.android.org.conscrypt.OpenSSLX509CertPath$Encoding
-com.android.org.conscrypt.OpenSSLX509Certificate
-com.android.org.conscrypt.OpenSSLX509CertificateFactory
-com.android.org.conscrypt.OpenSSLX509CertificateFactory$1
-com.android.org.conscrypt.OpenSSLX509CertificateFactory$2
-com.android.org.conscrypt.OpenSSLX509CertificateFactory$Parser
-com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException
-com.android.org.conscrypt.Platform
-com.android.org.conscrypt.SSLClientSessionCache
-com.android.org.conscrypt.SSLParametersImpl
-com.android.org.conscrypt.SSLParametersImpl$AliasChooser
-com.android.org.conscrypt.SSLParametersImpl$PSKCallbacks
-com.android.org.conscrypt.SSLUtils
-com.android.org.conscrypt.ServerSessionContext
-com.android.org.conscrypt.TrustManagerFactoryImpl
-com.android.org.conscrypt.TrustManagerImpl
-com.android.org.conscrypt.TrustManagerImpl$ExtendedKeyUsagePKIXCertPathChecker
-com.android.org.conscrypt.TrustManagerImpl$TrustAnchorComparator
-com.android.org.conscrypt.TrustedCertificateIndex
-com.android.org.conscrypt.TrustedCertificateKeyStoreSpi
-com.android.org.conscrypt.TrustedCertificateStore
-com.android.org.conscrypt.TrustedCertificateStore$1
-com.android.org.conscrypt.TrustedCertificateStore$2
-com.android.org.conscrypt.TrustedCertificateStore$4
-com.android.org.conscrypt.TrustedCertificateStore$5
-com.android.org.conscrypt.TrustedCertificateStore$CertSelector
-com.android.org.conscrypt.TrustedCertificateStore$PreloadHolder
-com.android.org.conscrypt.ct.CTLogInfo
-com.android.org.conscrypt.ct.CTLogStore
-com.android.org.conscrypt.ct.CTLogStoreImpl
-com.android.org.conscrypt.ct.CTLogStoreImpl$InvalidLogFileException
-com.android.org.conscrypt.ct.CTPolicy
-com.android.org.conscrypt.ct.CTPolicyImpl
-com.android.org.conscrypt.ct.CTVerifier
-com.android.org.conscrypt.ct.KnownLogs
-com.android.org.conscrypt.ct.SerializationException
-com.android.server.AppWidgetBackupBridge
-com.android.server.BootReceiver
-com.android.server.BootReceiver$1
-com.android.server.BootReceiver$2
-com.android.server.LocalServices
-com.android.server.NetworkManagementSocketTagger
-com.android.server.NetworkManagementSocketTagger$1
-com.android.server.NetworkManagementSocketTagger$SocketTags
-com.android.server.SystemConfig
-com.android.server.SystemConfig$PermissionEntry
-com.android.server.WidgetBackupProvider
-com.android.server.backup.AccountSyncSettingsBackupHelper
-com.android.server.net.BaseNetworkObserver
-com.android.server.net.DnsServerEntry
-com.android.server.net.DnsServerRepository
-com.android.server.net.NetlinkTracker
-com.android.server.net.NetlinkTracker$Callback
-com.android.server.sip.SipService
-com.android.server.sip.SipService$ConnectivityReceiver
-com.android.server.sip.SipService$MyExecutor
-com.android.server.sip.SipWakeLock
-com.android.server.sip.SipWakeupTimer
-com.android.server.sip.SipWakeupTimer$MyEventComparator
-com.android.server.wifi.nano.WifiMetricsProto$AlertReasonCount
-com.android.server.wifi.nano.WifiMetricsProto$ConnectionEvent
-com.android.server.wifi.nano.WifiMetricsProto$RouterFingerPrint
-com.android.server.wifi.nano.WifiMetricsProto$RssiPollCount
-com.android.server.wifi.nano.WifiMetricsProto$SoftApDurationBucket
-com.android.server.wifi.nano.WifiMetricsProto$SoftApReturnCodeCount
-com.android.server.wifi.nano.WifiMetricsProto$StaEvent
-com.android.server.wifi.nano.WifiMetricsProto$StaEvent$ConfigInfo
-com.android.server.wifi.nano.WifiMetricsProto$WifiLog
-com.android.server.wifi.nano.WifiMetricsProto$WifiLog$ScanReturnEntry
-com.android.server.wifi.nano.WifiMetricsProto$WifiLog$WifiSystemStateEntry
-com.android.server.wifi.nano.WifiMetricsProto$WifiScoreCount
-com.android.server.wm.nano.WindowManagerProtos$TaskSnapshotProto
-com.google.android.collect.Lists
-com.google.android.collect.Maps
-com.google.android.collect.Sets
-com.google.android.gles_jni.EGLConfigImpl
-com.google.android.gles_jni.EGLContextImpl
-com.google.android.gles_jni.EGLDisplayImpl
-com.google.android.gles_jni.EGLImpl
-com.google.android.gles_jni.EGLSurfaceImpl
-com.google.android.gles_jni.GLImpl
-com.google.android.mms.MmsException
-dalvik.annotation.optimization.CriticalNative
-dalvik.annotation.optimization.FastNative
-dalvik.system.-$Lambda$xxvwQBVHC44UYbpcpA8j0sUqLOo
-dalvik.system.BaseDexClassLoader
-dalvik.system.BaseDexClassLoader$Reporter
-dalvik.system.BlockGuard
-dalvik.system.BlockGuard$1
-dalvik.system.BlockGuard$2
-dalvik.system.BlockGuard$BlockGuardPolicyException
-dalvik.system.BlockGuard$Policy
-dalvik.system.ClassExt
-dalvik.system.CloseGuard
-dalvik.system.CloseGuard$DefaultReporter
-dalvik.system.CloseGuard$DefaultTracker
-dalvik.system.CloseGuard$Reporter
-dalvik.system.CloseGuard$Tracker
-dalvik.system.DalvikLogHandler
-dalvik.system.DalvikLogging
-dalvik.system.DexClassLoader
-dalvik.system.DexFile
-dalvik.system.DexFile$DFEnum
-dalvik.system.DexPathList
-dalvik.system.DexPathList$Element
-dalvik.system.DexPathList$NativeLibraryElement
-dalvik.system.EmulatedStackFrame
-dalvik.system.EmulatedStackFrame$Range
-dalvik.system.PathClassLoader
-dalvik.system.SocketTagger
-dalvik.system.SocketTagger$1
-dalvik.system.VMDebug
-dalvik.system.VMRuntime
-dalvik.system.VMStack
-dalvik.system.ZygoteHooks
-java.io.Bits
-java.io.BufferedInputStream
-java.io.BufferedOutputStream
-java.io.BufferedReader
-java.io.BufferedWriter
-java.io.ByteArrayInputStream
-java.io.ByteArrayOutputStream
-java.io.CharArrayWriter
-java.io.Closeable
-java.io.Console
-java.io.DataInput
-java.io.DataInputStream
-java.io.DataOutput
-java.io.DataOutputStream
-java.io.DefaultFileSystem
-java.io.EOFException
-java.io.ExpiringCache
-java.io.ExpiringCache$1
-java.io.ExpiringCache$Entry
-java.io.Externalizable
-java.io.File
-java.io.File$PathStatus
-java.io.File$TempDirectory
-java.io.FileDescriptor
-java.io.FileDescriptor$1
-java.io.FileFilter
-java.io.FileInputStream
-java.io.FileInputStream$UseManualSkipException
-java.io.FileNotFoundException
-java.io.FileOutputStream
-java.io.FileReader
-java.io.FileSystem
-java.io.FileWriter
-java.io.FilenameFilter
-java.io.FilterInputStream
-java.io.FilterOutputStream
-java.io.FilterReader
-java.io.Flushable
-java.io.IOException
-java.io.InputStream
-java.io.InputStreamReader
-java.io.InterruptedIOException
-java.io.InvalidClassException
-java.io.InvalidObjectException
-java.io.ObjectInput
-java.io.ObjectInputStream
-java.io.ObjectInputStream$BlockDataInputStream
-java.io.ObjectInputStream$HandleTable
-java.io.ObjectInputStream$HandleTable$HandleList
-java.io.ObjectInputStream$PeekInputStream
-java.io.ObjectInputStream$ValidationList
-java.io.ObjectOutput
-java.io.ObjectOutputStream
-java.io.ObjectOutputStream$BlockDataOutputStream
-java.io.ObjectOutputStream$HandleTable
-java.io.ObjectOutputStream$PutField
-java.io.ObjectOutputStream$ReplaceTable
-java.io.ObjectStreamClass
-java.io.ObjectStreamClass$1
-java.io.ObjectStreamClass$2
-java.io.ObjectStreamClass$3
-java.io.ObjectStreamClass$4
-java.io.ObjectStreamClass$5
-java.io.ObjectStreamClass$Caches
-java.io.ObjectStreamClass$ClassDataSlot
-java.io.ObjectStreamClass$EntryFuture
-java.io.ObjectStreamClass$ExceptionInfo
-java.io.ObjectStreamClass$FieldReflector
-java.io.ObjectStreamClass$FieldReflectorKey
-java.io.ObjectStreamClass$MemberSignature
-java.io.ObjectStreamClass$WeakClassKey
-java.io.ObjectStreamConstants
-java.io.ObjectStreamException
-java.io.ObjectStreamField
-java.io.OutputStream
-java.io.OutputStreamWriter
-java.io.PrintStream
-java.io.PrintWriter
-java.io.PushbackInputStream
-java.io.PushbackReader
-java.io.RandomAccessFile
-java.io.Reader
-java.io.SequenceInputStream
-java.io.SerialCallbackContext
-java.io.Serializable
-java.io.SerializablePermission
-java.io.StreamCorruptedException
-java.io.StringReader
-java.io.StringWriter
-java.io.UnixFileSystem
-java.io.UnsupportedEncodingException
-java.io.Writer
-java.lang.-$Lambda$S9HjrJh0nDg7IyU6wZdPArnZWRQ
-java.lang.-$Lambda$S9HjrJh0nDg7IyU6wZdPArnZWRQ$1
-java.lang.AbstractMethodError
-java.lang.AbstractStringBuilder
-java.lang.AndroidHardcodedSystemProperties
-java.lang.Appendable
-java.lang.ArithmeticException
-java.lang.ArrayIndexOutOfBoundsException
-java.lang.ArrayStoreException
-java.lang.AssertionError
-java.lang.AutoCloseable
-java.lang.Boolean
-java.lang.BootClassLoader
-java.lang.Byte
-java.lang.Byte$ByteCache
-java.lang.CaseMapper
-java.lang.CaseMapper$1
-java.lang.CharSequence
-java.lang.CharSequence$1CharIterator
-java.lang.CharSequence$1CodePointIterator
-java.lang.Character
-java.lang.Character$CharacterCache
-java.lang.Character$Subset
-java.lang.Character$UnicodeBlock
-java.lang.Class
-java.lang.Class$Caches
-java.lang.ClassCastException
-java.lang.ClassLoader
-java.lang.ClassLoader$SystemClassLoader
-java.lang.ClassNotFoundException
-java.lang.CloneNotSupportedException
-java.lang.Cloneable
-java.lang.Comparable
-java.lang.Daemons
-java.lang.Daemons$Daemon
-java.lang.Daemons$FinalizerDaemon
-java.lang.Daemons$FinalizerWatchdogDaemon
-java.lang.Daemons$HeapTaskDaemon
-java.lang.Daemons$ReferenceQueueDaemon
-java.lang.Deprecated
-java.lang.DexCache
-java.lang.Double
-java.lang.Enum
-java.lang.Enum$1
-java.lang.EnumConstantNotPresentException
-java.lang.Error
-java.lang.Exception
-java.lang.ExceptionInInitializerError
-java.lang.Float
-java.lang.IllegalAccessError
-java.lang.IllegalAccessException
-java.lang.IllegalArgumentException
-java.lang.IllegalMonitorStateException
-java.lang.IllegalStateException
-java.lang.IllegalThreadStateException
-java.lang.IncompatibleClassChangeError
-java.lang.IndexOutOfBoundsException
-java.lang.InheritableThreadLocal
-java.lang.InstantiationError
-java.lang.InstantiationException
-java.lang.Integer
-java.lang.Integer$IntegerCache
-java.lang.InternalError
-java.lang.InterruptedException
-java.lang.Iterable
-java.lang.JavaLangAccess
-java.lang.LinkageError
-java.lang.Long
-java.lang.Long$LongCache
-java.lang.Math
-java.lang.Math$RandomNumberGeneratorHolder
-java.lang.NegativeArraySizeException
-java.lang.NoClassDefFoundError
-java.lang.NoSuchFieldError
-java.lang.NoSuchFieldException
-java.lang.NoSuchMethodError
-java.lang.NoSuchMethodException
-java.lang.NullPointerException
-java.lang.Number
-java.lang.NumberFormatException
-java.lang.Object
-java.lang.OutOfMemoryError
-java.lang.Package
-java.lang.Process
-java.lang.ProcessBuilder
-java.lang.ProcessEnvironment
-java.lang.Readable
-java.lang.ReflectiveOperationException
-java.lang.Runnable
-java.lang.Runtime
-java.lang.RuntimeException
-java.lang.RuntimePermission
-java.lang.SecurityException
-java.lang.SecurityManager
-java.lang.Short
-java.lang.Short$ShortCache
-java.lang.StackOverflowError
-java.lang.StackTraceElement
-java.lang.StrictMath
-java.lang.String
-java.lang.String$CaseInsensitiveComparator
-java.lang.StringBuffer
-java.lang.StringBuilder
-java.lang.StringFactory
-java.lang.StringIndexOutOfBoundsException
-java.lang.System
-java.lang.System$PropertiesWithNonOverrideableDefaults
-java.lang.Thread
-java.lang.Thread$1
-java.lang.Thread$Caches
-java.lang.Thread$State
-java.lang.Thread$UncaughtExceptionHandler
-java.lang.Thread$WeakClassKey
-java.lang.ThreadDeath
-java.lang.ThreadGroup
-java.lang.ThreadLocal
-java.lang.ThreadLocal$SuppliedThreadLocal
-java.lang.ThreadLocal$ThreadLocalMap
-java.lang.ThreadLocal$ThreadLocalMap$Entry
-java.lang.Throwable
-java.lang.Throwable$PrintStreamOrWriter
-java.lang.Throwable$SentinelHolder
-java.lang.Throwable$WrappedPrintStream
-java.lang.Throwable$WrappedPrintWriter
-java.lang.TypeNotPresentException
-java.lang.UNIXProcess
-java.lang.UnsatisfiedLinkError
-java.lang.UnsupportedOperationException
-java.lang.VMClassLoader
-java.lang.VerifyError
-java.lang.VirtualMachineError
-java.lang.Void
-java.lang.annotation.Annotation
-java.lang.annotation.AnnotationTypeMismatchException
-java.lang.annotation.IncompleteAnnotationException
-java.lang.annotation.Inherited
-java.lang.annotation.Retention
-java.lang.annotation.Target
-java.lang.invoke.CallSite
-java.lang.invoke.ConstantCallSite
-java.lang.invoke.MethodHandle
-java.lang.invoke.MethodHandleImpl
-java.lang.invoke.MethodHandleImpl$HandleInfo
-java.lang.invoke.MethodHandleInfo
-java.lang.invoke.MethodHandleStatics
-java.lang.invoke.MethodHandles
-java.lang.invoke.MethodHandles$Lookup
-java.lang.invoke.MethodType
-java.lang.invoke.MethodType$ConcurrentWeakInternSet
-java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry
-java.lang.invoke.MethodTypeForm
-java.lang.invoke.Transformers$BindTo
-java.lang.invoke.Transformers$Collector
-java.lang.invoke.Transformers$Construct
-java.lang.invoke.Transformers$Spreader
-java.lang.invoke.Transformers$Transformer
-java.lang.invoke.Transformers$VarargsCollector
-java.lang.invoke.WrongMethodTypeException
-java.lang.ref.FinalizerReference
-java.lang.ref.FinalizerReference$Sentinel
-java.lang.ref.PhantomReference
-java.lang.ref.Reference
-java.lang.ref.ReferenceQueue
-java.lang.ref.SoftReference
-java.lang.ref.WeakReference
-java.lang.reflect.AccessibleObject
-java.lang.reflect.AnnotatedElement
-java.lang.reflect.Array
-java.lang.reflect.Constructor
-java.lang.reflect.Executable
-java.lang.reflect.Executable$GenericInfo
-java.lang.reflect.Field
-java.lang.reflect.GenericArrayType
-java.lang.reflect.GenericDeclaration
-java.lang.reflect.InvocationHandler
-java.lang.reflect.InvocationTargetException
-java.lang.reflect.MalformedParametersException
-java.lang.reflect.Member
-java.lang.reflect.Method
-java.lang.reflect.Method$1
-java.lang.reflect.Modifier
-java.lang.reflect.Parameter
-java.lang.reflect.ParameterizedType
-java.lang.reflect.Proxy
-java.lang.reflect.Proxy$1
-java.lang.reflect.Proxy$Key1
-java.lang.reflect.Proxy$Key2
-java.lang.reflect.Proxy$KeyFactory
-java.lang.reflect.Proxy$KeyX
-java.lang.reflect.Proxy$ProxyClassFactory
-java.lang.reflect.Type
-java.lang.reflect.TypeVariable
-java.lang.reflect.UndeclaredThrowableException
-java.lang.reflect.WeakCache
-java.lang.reflect.WeakCache$CacheKey
-java.lang.reflect.WeakCache$CacheValue
-java.lang.reflect.WeakCache$Factory
-java.lang.reflect.WeakCache$LookupValue
-java.lang.reflect.WeakCache$Value
-java.lang.reflect.WildcardType
-java.math.BigDecimal
-java.math.BigInt
-java.math.BigInteger
-java.math.Conversion
-java.math.Division
-java.math.MathContext
-java.math.Multiplication
-java.math.NativeBN
-java.math.RoundingMode
-java.net.AbstractPlainDatagramSocketImpl
-java.net.AbstractPlainSocketImpl
-java.net.AddressCache
-java.net.AddressCache$AddressCacheEntry
-java.net.AddressCache$AddressCacheKey
-java.net.ConnectException
-java.net.CookieHandler
-java.net.CookieManager
-java.net.CookiePolicy
-java.net.CookiePolicy$1
-java.net.CookiePolicy$2
-java.net.CookiePolicy$3
-java.net.CookieStore
-java.net.DatagramPacket
-java.net.DatagramSocket
-java.net.DatagramSocket$1
-java.net.DatagramSocketImpl
-java.net.DefaultDatagramSocketImplFactory
-java.net.DefaultFileNameMap
-java.net.DefaultInterface
-java.net.FileNameMap
-java.net.HttpURLConnection
-java.net.IDN
-java.net.InMemoryCookieStore
-java.net.Inet4Address
-java.net.Inet6Address
-java.net.Inet6Address$Inet6AddressHolder
-java.net.Inet6AddressImpl
-java.net.InetAddress
-java.net.InetAddress$1
-java.net.InetAddress$InetAddressHolder
-java.net.InetAddressImpl
-java.net.InetSocketAddress
-java.net.InetSocketAddress$InetSocketAddressHolder
-java.net.InterfaceAddress
-java.net.JarURLConnection
-java.net.MalformedURLException
-java.net.MulticastSocket
-java.net.NetworkInterface
-java.net.NetworkInterface$1checkedAddresses
-java.net.NoRouteToHostException
-java.net.Parts
-java.net.PlainDatagramSocketImpl
-java.net.PlainSocketImpl
-java.net.PortUnreachableException
-java.net.ProtocolException
-java.net.ProtocolFamily
-java.net.Proxy
-java.net.Proxy$Type
-java.net.ProxySelector
-java.net.ResponseCache
-java.net.ServerSocket
-java.net.Socket
-java.net.Socket$1
-java.net.Socket$2
-java.net.Socket$3
-java.net.SocketAddress
-java.net.SocketException
-java.net.SocketImpl
-java.net.SocketInputStream
-java.net.SocketOptions
-java.net.SocketOutputStream
-java.net.SocketTimeoutException
-java.net.SocksConsts
-java.net.SocksSocketImpl
-java.net.StandardProtocolFamily
-java.net.URI
-java.net.URI$Parser
-java.net.URISyntaxException
-java.net.URL
-java.net.URLConnection
-java.net.URLDecoder
-java.net.URLEncoder
-java.net.URLStreamHandler
-java.net.URLStreamHandlerFactory
-java.net.UnknownHostException
-java.net.UnknownServiceException
-java.nio.Bits
-java.nio.Buffer
-java.nio.BufferOverflowException
-java.nio.BufferUnderflowException
-java.nio.ByteBuffer
-java.nio.ByteBufferAsCharBuffer
-java.nio.ByteBufferAsDoubleBuffer
-java.nio.ByteBufferAsFloatBuffer
-java.nio.ByteBufferAsIntBuffer
-java.nio.ByteBufferAsLongBuffer
-java.nio.ByteBufferAsShortBuffer
-java.nio.ByteOrder
-java.nio.CharBuffer
-java.nio.DirectByteBuffer
-java.nio.DirectByteBuffer$MemoryRef
-java.nio.DoubleBuffer
-java.nio.FloatBuffer
-java.nio.HeapByteBuffer
-java.nio.HeapCharBuffer
-java.nio.IntBuffer
-java.nio.InvalidMarkException
-java.nio.LongBuffer
-java.nio.MappedByteBuffer
-java.nio.NIOAccess
-java.nio.NioUtils
-java.nio.ReadOnlyBufferException
-java.nio.ShortBuffer
-java.nio.StringCharBuffer
-java.nio.channels.AsynchronousCloseException
-java.nio.channels.ByteChannel
-java.nio.channels.CancelledKeyException
-java.nio.channels.Channel
-java.nio.channels.Channels
-java.nio.channels.Channels$1
-java.nio.channels.ClosedByInterruptException
-java.nio.channels.ClosedChannelException
-java.nio.channels.DatagramChannel
-java.nio.channels.FileChannel
-java.nio.channels.FileChannel$MapMode
-java.nio.channels.FileLock
-java.nio.channels.GatheringByteChannel
-java.nio.channels.InterruptibleChannel
-java.nio.channels.MulticastChannel
-java.nio.channels.NetworkChannel
-java.nio.channels.NonWritableChannelException
-java.nio.channels.OverlappingFileLockException
-java.nio.channels.ReadableByteChannel
-java.nio.channels.ScatteringByteChannel
-java.nio.channels.SeekableByteChannel
-java.nio.channels.SelectableChannel
-java.nio.channels.SelectionKey
-java.nio.channels.Selector
-java.nio.channels.ServerSocketChannel
-java.nio.channels.SocketChannel
-java.nio.channels.WritableByteChannel
-java.nio.channels.spi.AbstractInterruptibleChannel
-java.nio.channels.spi.AbstractInterruptibleChannel$1
-java.nio.channels.spi.AbstractSelectableChannel
-java.nio.channels.spi.AbstractSelectionKey
-java.nio.channels.spi.AbstractSelector
-java.nio.channels.spi.AbstractSelector$1
-java.nio.channels.spi.SelectorProvider
-java.nio.channels.spi.SelectorProvider$1
-java.nio.charset.CharacterCodingException
-java.nio.charset.Charset
-java.nio.charset.CharsetDecoder
-java.nio.charset.CharsetDecoderICU
-java.nio.charset.CharsetEncoder
-java.nio.charset.CharsetEncoderICU
-java.nio.charset.CharsetICU
-java.nio.charset.CoderResult
-java.nio.charset.CoderResult$1
-java.nio.charset.CoderResult$2
-java.nio.charset.CoderResult$Cache
-java.nio.charset.CodingErrorAction
-java.nio.charset.IllegalCharsetNameException
-java.nio.charset.StandardCharsets
-java.nio.charset.UnsupportedCharsetException
-java.nio.file.AccessMode
-java.nio.file.CopyOption
-java.nio.file.FileAlreadyExistsException
-java.nio.file.FileSystem
-java.nio.file.FileSystemException
-java.nio.file.FileSystems
-java.nio.file.FileSystems$DefaultFileSystemHolder
-java.nio.file.FileSystems$DefaultFileSystemHolder$1
-java.nio.file.Files
-java.nio.file.LinkOption
-java.nio.file.NoSuchFileException
-java.nio.file.OpenOption
-java.nio.file.Path
-java.nio.file.Paths
-java.nio.file.StandardOpenOption
-java.nio.file.Watchable
-java.nio.file.attribute.AttributeView
-java.nio.file.attribute.BasicFileAttributeView
-java.nio.file.attribute.BasicFileAttributes
-java.nio.file.attribute.FileAttribute
-java.nio.file.attribute.FileAttributeView
-java.nio.file.attribute.PosixFileAttributes
-java.nio.file.spi.FileSystemProvider
-java.security.AccessControlContext
-java.security.AccessControlException
-java.security.AccessController
-java.security.AlgorithmConstraints
-java.security.AlgorithmParameters
-java.security.AlgorithmParametersSpi
-java.security.BasicPermission
-java.security.CodeSigner
-java.security.CryptoPrimitive
-java.security.DigestException
-java.security.GeneralSecurityException
-java.security.Guard
-java.security.InvalidAlgorithmParameterException
-java.security.InvalidKeyException
-java.security.InvalidParameterException
-java.security.Key
-java.security.KeyException
-java.security.KeyFactory
-java.security.KeyFactorySpi
-java.security.KeyManagementException
-java.security.KeyPair
-java.security.KeyPairGenerator
-java.security.KeyPairGeneratorSpi
-java.security.KeyStore
-java.security.KeyStore$1
-java.security.KeyStoreException
-java.security.KeyStoreSpi
-java.security.MessageDigest
-java.security.MessageDigest$Delegate
-java.security.MessageDigestSpi
-java.security.NoSuchAlgorithmException
-java.security.NoSuchProviderException
-java.security.Permission
-java.security.PermissionCollection
-java.security.Permissions
-java.security.Principal
-java.security.PrivateKey
-java.security.PrivilegedAction
-java.security.PrivilegedActionException
-java.security.PrivilegedExceptionAction
-java.security.ProtectionDomain
-java.security.Provider
-java.security.Provider$EngineDescription
-java.security.Provider$Service
-java.security.Provider$ServiceKey
-java.security.Provider$UString
-java.security.PublicKey
-java.security.SecureRandom
-java.security.SecureRandomSpi
-java.security.Security
-java.security.Signature
-java.security.Signature$Delegate
-java.security.SignatureException
-java.security.SignatureSpi
-java.security.UnrecoverableEntryException
-java.security.UnrecoverableKeyException
-java.security.cert.CRL
-java.security.cert.CRLException
-java.security.cert.CRLReason
-java.security.cert.CertPath
-java.security.cert.CertPathBuilderException
-java.security.cert.CertPathChecker
-java.security.cert.CertPathHelperImpl
-java.security.cert.CertPathParameters
-java.security.cert.CertPathValidator
-java.security.cert.CertPathValidatorException
-java.security.cert.CertPathValidatorResult
-java.security.cert.CertPathValidatorSpi
-java.security.cert.CertSelector
-java.security.cert.CertStore
-java.security.cert.CertStoreException
-java.security.cert.CertStoreParameters
-java.security.cert.CertStoreSpi
-java.security.cert.Certificate
-java.security.cert.CertificateEncodingException
-java.security.cert.CertificateException
-java.security.cert.CertificateExpiredException
-java.security.cert.CertificateFactory
-java.security.cert.CertificateFactorySpi
-java.security.cert.CertificateNotYetValidException
-java.security.cert.CertificateParsingException
-java.security.cert.CollectionCertStoreParameters
-java.security.cert.Extension
-java.security.cert.PKIXCertPathChecker
-java.security.cert.PKIXCertPathValidatorResult
-java.security.cert.PKIXParameters
-java.security.cert.PKIXRevocationChecker
-java.security.cert.PKIXRevocationChecker$Option
-java.security.cert.PolicyNode
-java.security.cert.PolicyQualifierInfo
-java.security.cert.TrustAnchor
-java.security.cert.X509CertSelector
-java.security.cert.X509Certificate
-java.security.cert.X509Extension
-java.security.interfaces.DSAKey
-java.security.interfaces.DSAPublicKey
-java.security.interfaces.ECKey
-java.security.interfaces.ECPrivateKey
-java.security.interfaces.ECPublicKey
-java.security.interfaces.RSAKey
-java.security.interfaces.RSAPrivateKey
-java.security.interfaces.RSAPublicKey
-java.security.spec.AlgorithmParameterSpec
-java.security.spec.ECField
-java.security.spec.ECFieldFp
-java.security.spec.ECGenParameterSpec
-java.security.spec.ECParameterSpec
-java.security.spec.ECPoint
-java.security.spec.ECPrivateKeySpec
-java.security.spec.ECPublicKeySpec
-java.security.spec.EllipticCurve
-java.security.spec.EncodedKeySpec
-java.security.spec.InvalidKeySpecException
-java.security.spec.InvalidParameterSpecException
-java.security.spec.KeySpec
-java.security.spec.MGF1ParameterSpec
-java.security.spec.PKCS8EncodedKeySpec
-java.security.spec.RSAPrivateCrtKeySpec
-java.security.spec.RSAPrivateKeySpec
-java.security.spec.RSAPublicKeySpec
-java.security.spec.X509EncodedKeySpec
-java.sql.Timestamp
-java.text.AttributedCharacterIterator$Attribute
-java.text.Bidi
-java.text.BreakIterator
-java.text.CalendarBuilder
-java.text.CharacterIterator
-java.text.CollationKey
-java.text.Collator
-java.text.DateFormat
-java.text.DateFormat$Field
-java.text.DateFormatSymbols
-java.text.DecimalFormat
-java.text.DecimalFormatSymbols
-java.text.DontCareFieldPosition
-java.text.DontCareFieldPosition$1
-java.text.FieldPosition
-java.text.FieldPosition$Delegate
-java.text.Format
-java.text.Format$Field
-java.text.Format$FieldDelegate
-java.text.IcuIteratorWrapper
-java.text.MessageFormat
-java.text.MessageFormat$Field
-java.text.Normalizer
-java.text.Normalizer$Form
-java.text.NumberFormat
-java.text.ParseException
-java.text.ParsePosition
-java.text.RuleBasedCollator
-java.text.SimpleDateFormat
-java.text.StringCharacterIterator
-java.time.DateTimeException
-java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo
-java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$1
-java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$2
-java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$3
-java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$4
-java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$5
-java.util.-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw
-java.util.-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw$1
-java.util.-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw$2
-java.util.-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw$3
-java.util.AbstractCollection
-java.util.AbstractList
-java.util.AbstractList$Itr
-java.util.AbstractList$ListItr
-java.util.AbstractMap
-java.util.AbstractMap$1
-java.util.AbstractMap$2
-java.util.AbstractMap$2$1
-java.util.AbstractMap$SimpleEntry
-java.util.AbstractMap$SimpleImmutableEntry
-java.util.AbstractQueue
-java.util.AbstractSequentialList
-java.util.AbstractSet
-java.util.ArrayDeque
-java.util.ArrayDeque$DeqIterator
-java.util.ArrayDeque$DescendingIterator
-java.util.ArrayList
-java.util.ArrayList$ArrayListSpliterator
-java.util.ArrayList$Itr
-java.util.ArrayList$ListItr
-java.util.ArrayList$SubList
-java.util.ArrayList$SubList$1
-java.util.ArrayPrefixHelpers$CumulateTask
-java.util.ArrayPrefixHelpers$DoubleCumulateTask
-java.util.ArrayPrefixHelpers$IntCumulateTask
-java.util.ArrayPrefixHelpers$LongCumulateTask
-java.util.Arrays
-java.util.Arrays$ArrayList
-java.util.Arrays$NaturalOrder
-java.util.ArraysParallelSortHelpers$FJByte$Sorter
-java.util.ArraysParallelSortHelpers$FJChar$Sorter
-java.util.ArraysParallelSortHelpers$FJDouble$Sorter
-java.util.ArraysParallelSortHelpers$FJFloat$Sorter
-java.util.ArraysParallelSortHelpers$FJInt$Sorter
-java.util.ArraysParallelSortHelpers$FJLong$Sorter
-java.util.ArraysParallelSortHelpers$FJObject$Sorter
-java.util.ArraysParallelSortHelpers$FJShort$Sorter
-java.util.Base64
-java.util.Base64$Decoder
-java.util.Base64$Encoder
-java.util.BitSet
-java.util.Calendar
-java.util.Collection
-java.util.Collections
-java.util.Collections$1
-java.util.Collections$2
-java.util.Collections$3
-java.util.Collections$AsLIFOQueue
-java.util.Collections$CheckedCollection
-java.util.Collections$CheckedList
-java.util.Collections$CheckedMap
-java.util.Collections$CheckedNavigableMap
-java.util.Collections$CheckedNavigableSet
-java.util.Collections$CheckedQueue
-java.util.Collections$CheckedRandomAccessList
-java.util.Collections$CheckedSet
-java.util.Collections$CheckedSortedMap
-java.util.Collections$CheckedSortedSet
-java.util.Collections$CopiesList
-java.util.Collections$EmptyEnumeration
-java.util.Collections$EmptyIterator
-java.util.Collections$EmptyList
-java.util.Collections$EmptyListIterator
-java.util.Collections$EmptyMap
-java.util.Collections$EmptySet
-java.util.Collections$ReverseComparator
-java.util.Collections$ReverseComparator2
-java.util.Collections$SetFromMap
-java.util.Collections$SingletonList
-java.util.Collections$SingletonMap
-java.util.Collections$SingletonSet
-java.util.Collections$SynchronizedCollection
-java.util.Collections$SynchronizedList
-java.util.Collections$SynchronizedMap
-java.util.Collections$SynchronizedNavigableMap
-java.util.Collections$SynchronizedNavigableSet
-java.util.Collections$SynchronizedRandomAccessList
-java.util.Collections$SynchronizedSet
-java.util.Collections$SynchronizedSortedMap
-java.util.Collections$SynchronizedSortedSet
-java.util.Collections$UnmodifiableCollection
-java.util.Collections$UnmodifiableCollection$1
-java.util.Collections$UnmodifiableList
-java.util.Collections$UnmodifiableList$1
-java.util.Collections$UnmodifiableMap
-java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet
-java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$1
-java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry
-java.util.Collections$UnmodifiableNavigableMap
-java.util.Collections$UnmodifiableNavigableMap$EmptyNavigableMap
-java.util.Collections$UnmodifiableNavigableSet
-java.util.Collections$UnmodifiableNavigableSet$EmptyNavigableSet
-java.util.Collections$UnmodifiableRandomAccessList
-java.util.Collections$UnmodifiableSet
-java.util.Collections$UnmodifiableSortedMap
-java.util.Collections$UnmodifiableSortedSet
-java.util.ComparableTimSort
-java.util.Comparator
-java.util.Comparators$NaturalOrderComparator
-java.util.Comparators$NullComparator
-java.util.ConcurrentModificationException
-java.util.Currency
-java.util.Date
-java.util.Deque
-java.util.Dictionary
-java.util.DualPivotQuicksort
-java.util.EmptyStackException
-java.util.EnumMap
-java.util.EnumMap$1
-java.util.EnumMap$EntryIterator
-java.util.EnumMap$EntryIterator$Entry
-java.util.EnumMap$EntrySet
-java.util.EnumMap$EnumMapIterator
-java.util.EnumMap$KeyIterator
-java.util.EnumMap$KeySet
-java.util.EnumMap$ValueIterator
-java.util.EnumMap$Values
-java.util.EnumSet
-java.util.EnumSet$SerializationProxy
-java.util.Enumeration
-java.util.EventListener
-java.util.FormatFlagsConversionMismatchException
-java.util.Formattable
-java.util.Formatter
-java.util.Formatter$Conversion
-java.util.Formatter$DateTime
-java.util.Formatter$FixedString
-java.util.Formatter$Flags
-java.util.Formatter$FormatSpecifier
-java.util.Formatter$FormatSpecifierParser
-java.util.Formatter$FormatString
-java.util.FormatterClosedException
-java.util.GregorianCalendar
-java.util.HashMap
-java.util.HashMap$EntryIterator
-java.util.HashMap$EntrySet
-java.util.HashMap$HashIterator
-java.util.HashMap$KeyIterator
-java.util.HashMap$KeySet
-java.util.HashMap$Node
-java.util.HashMap$TreeNode
-java.util.HashMap$ValueIterator
-java.util.HashMap$Values
-java.util.HashSet
-java.util.Hashtable
-java.util.Hashtable$EntrySet
-java.util.Hashtable$Enumerator
-java.util.Hashtable$HashtableEntry
-java.util.Hashtable$KeySet
-java.util.Hashtable$ValueCollection
-java.util.IdentityHashMap
-java.util.IdentityHashMap$EntryIterator
-java.util.IdentityHashMap$EntryIterator$Entry
-java.util.IdentityHashMap$EntrySet
-java.util.IdentityHashMap$IdentityHashMapIterator
-java.util.IdentityHashMap$KeyIterator
-java.util.IdentityHashMap$KeySet
-java.util.IdentityHashMap$ValueIterator
-java.util.IdentityHashMap$Values
-java.util.IllegalFormatException
-java.util.IllformedLocaleException
-java.util.Iterator
-java.util.JumboEnumSet
-java.util.JumboEnumSet$EnumSetIterator
-java.util.LinkedHashMap
-java.util.LinkedHashMap$LinkedEntryIterator
-java.util.LinkedHashMap$LinkedEntrySet
-java.util.LinkedHashMap$LinkedHashIterator
-java.util.LinkedHashMap$LinkedHashMapEntry
-java.util.LinkedHashMap$LinkedKeyIterator
-java.util.LinkedHashMap$LinkedKeySet
-java.util.LinkedHashMap$LinkedValueIterator
-java.util.LinkedHashMap$LinkedValues
-java.util.LinkedHashSet
-java.util.LinkedList
-java.util.LinkedList$DescendingIterator
-java.util.LinkedList$ListItr
-java.util.LinkedList$Node
-java.util.List
-java.util.ListIterator
-java.util.Locale
-java.util.Locale$Builder
-java.util.Locale$Cache
-java.util.Locale$Category
-java.util.Locale$FilteringMode
-java.util.Locale$LanguageRange
-java.util.Locale$LocaleKey
-java.util.Locale$NoImagePreloadHolder
-java.util.Map
-java.util.Map$Entry
-java.util.MissingFormatArgumentException
-java.util.MissingResourceException
-java.util.NavigableMap
-java.util.NavigableSet
-java.util.NoSuchElementException
-java.util.Objects
-java.util.Observable
-java.util.Observer
-java.util.Optional
-java.util.PrimitiveIterator
-java.util.PrimitiveIterator$OfInt
-java.util.PriorityQueue
-java.util.PriorityQueue$Itr
-java.util.Properties
-java.util.Properties$LineReader
-java.util.PropertyResourceBundle
-java.util.Queue
-java.util.Random
-java.util.RandomAccess
-java.util.RandomAccessSubList
-java.util.RegularEnumSet
-java.util.RegularEnumSet$EnumSetIterator
-java.util.ResourceBundle
-java.util.ResourceBundle$1
-java.util.ResourceBundle$BundleReference
-java.util.ResourceBundle$CacheKey
-java.util.ResourceBundle$CacheKeyReference
-java.util.ResourceBundle$Control
-java.util.ResourceBundle$Control$1
-java.util.ResourceBundle$Control$CandidateListCache
-java.util.ResourceBundle$LoaderReference
-java.util.Scanner
-java.util.Scanner$1
-java.util.ServiceConfigurationError
-java.util.ServiceLoader
-java.util.ServiceLoader$1
-java.util.ServiceLoader$LazyIterator
-java.util.Set
-java.util.SimpleTimeZone
-java.util.SortedMap
-java.util.SortedSet
-java.util.Spliterator
-java.util.Spliterator$OfDouble
-java.util.Spliterator$OfInt
-java.util.Spliterator$OfLong
-java.util.Spliterator$OfPrimitive
-java.util.Spliterators
-java.util.Spliterators$EmptySpliterator
-java.util.Spliterators$EmptySpliterator$OfDouble
-java.util.Spliterators$EmptySpliterator$OfInt
-java.util.Spliterators$EmptySpliterator$OfLong
-java.util.Spliterators$EmptySpliterator$OfRef
-java.util.Spliterators$IntArraySpliterator
-java.util.Spliterators$IteratorSpliterator
-java.util.Stack
-java.util.StringJoiner
-java.util.StringTokenizer
-java.util.SubList
-java.util.SubList$1
-java.util.TaskQueue
-java.util.TimSort
-java.util.TimeZone
-java.util.Timer
-java.util.Timer$1
-java.util.TimerTask
-java.util.TimerThread
-java.util.TreeMap
-java.util.TreeMap$AscendingSubMap
-java.util.TreeMap$AscendingSubMap$AscendingEntrySetView
-java.util.TreeMap$EntryIterator
-java.util.TreeMap$EntrySet
-java.util.TreeMap$KeyIterator
-java.util.TreeMap$KeySet
-java.util.TreeMap$NavigableSubMap
-java.util.TreeMap$NavigableSubMap$EntrySetView
-java.util.TreeMap$NavigableSubMap$SubMapEntryIterator
-java.util.TreeMap$NavigableSubMap$SubMapIterator
-java.util.TreeMap$NavigableSubMap$SubMapKeyIterator
-java.util.TreeMap$PrivateEntryIterator
-java.util.TreeMap$TreeMapEntry
-java.util.TreeMap$ValueIterator
-java.util.TreeMap$Values
-java.util.TreeSet
-java.util.UUID
-java.util.UUID$Holder
-java.util.UnknownFormatConversionException
-java.util.Vector
-java.util.Vector$1
-java.util.Vector$Itr
-java.util.WeakHashMap
-java.util.WeakHashMap$Entry
-java.util.WeakHashMap$EntrySet
-java.util.WeakHashMap$HashIterator
-java.util.WeakHashMap$KeyIterator
-java.util.WeakHashMap$KeySet
-java.util.WeakHashMap$ValueIterator
-java.util.WeakHashMap$Values
-java.util.concurrent.-$Lambda$xR9BLpu6SifNikvFgr4lEiECBsk
-java.util.concurrent.AbstractExecutorService
-java.util.concurrent.ArrayBlockingQueue
-java.util.concurrent.BlockingDeque
-java.util.concurrent.BlockingQueue
-java.util.concurrent.Callable
-java.util.concurrent.CancellationException
-java.util.concurrent.CompletableFuture
-java.util.concurrent.CompletableFuture$AltResult
-java.util.concurrent.CompletableFuture$AsynchronousCompletionTask
-java.util.concurrent.CompletableFuture$Completion
-java.util.concurrent.CompletionStage
-java.util.concurrent.ConcurrentHashMap
-java.util.concurrent.ConcurrentHashMap$BaseIterator
-java.util.concurrent.ConcurrentHashMap$BulkTask
-java.util.concurrent.ConcurrentHashMap$CollectionView
-java.util.concurrent.ConcurrentHashMap$CounterCell
-java.util.concurrent.ConcurrentHashMap$EntryIterator
-java.util.concurrent.ConcurrentHashMap$EntrySetView
-java.util.concurrent.ConcurrentHashMap$ForEachEntryTask
-java.util.concurrent.ConcurrentHashMap$ForEachKeyTask
-java.util.concurrent.ConcurrentHashMap$ForEachMappingTask
-java.util.concurrent.ConcurrentHashMap$ForEachTransformedEntryTask
-java.util.concurrent.ConcurrentHashMap$ForEachTransformedKeyTask
-java.util.concurrent.ConcurrentHashMap$ForEachTransformedMappingTask
-java.util.concurrent.ConcurrentHashMap$ForEachTransformedValueTask
-java.util.concurrent.ConcurrentHashMap$ForEachValueTask
-java.util.concurrent.ConcurrentHashMap$ForwardingNode
-java.util.concurrent.ConcurrentHashMap$KeyIterator
-java.util.concurrent.ConcurrentHashMap$KeySetView
-java.util.concurrent.ConcurrentHashMap$KeySpliterator
-java.util.concurrent.ConcurrentHashMap$MapEntry
-java.util.concurrent.ConcurrentHashMap$MapReduceEntriesTask
-java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToDoubleTask
-java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToIntTask
-java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToLongTask
-java.util.concurrent.ConcurrentHashMap$MapReduceKeysTask
-java.util.concurrent.ConcurrentHashMap$MapReduceKeysToDoubleTask
-java.util.concurrent.ConcurrentHashMap$MapReduceKeysToIntTask
-java.util.concurrent.ConcurrentHashMap$MapReduceKeysToLongTask
-java.util.concurrent.ConcurrentHashMap$MapReduceMappingsTask
-java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToDoubleTask
-java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToIntTask
-java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToLongTask
-java.util.concurrent.ConcurrentHashMap$MapReduceValuesTask
-java.util.concurrent.ConcurrentHashMap$MapReduceValuesToDoubleTask
-java.util.concurrent.ConcurrentHashMap$MapReduceValuesToIntTask
-java.util.concurrent.ConcurrentHashMap$MapReduceValuesToLongTask
-java.util.concurrent.ConcurrentHashMap$Node
-java.util.concurrent.ConcurrentHashMap$ReduceEntriesTask
-java.util.concurrent.ConcurrentHashMap$ReduceKeysTask
-java.util.concurrent.ConcurrentHashMap$ReduceValuesTask
-java.util.concurrent.ConcurrentHashMap$ReservationNode
-java.util.concurrent.ConcurrentHashMap$SearchEntriesTask
-java.util.concurrent.ConcurrentHashMap$SearchKeysTask
-java.util.concurrent.ConcurrentHashMap$SearchMappingsTask
-java.util.concurrent.ConcurrentHashMap$SearchValuesTask
-java.util.concurrent.ConcurrentHashMap$Segment
-java.util.concurrent.ConcurrentHashMap$Traverser
-java.util.concurrent.ConcurrentHashMap$TreeBin
-java.util.concurrent.ConcurrentHashMap$TreeNode
-java.util.concurrent.ConcurrentHashMap$ValueIterator
-java.util.concurrent.ConcurrentHashMap$ValuesView
-java.util.concurrent.ConcurrentLinkedDeque
-java.util.concurrent.ConcurrentLinkedDeque$Node
-java.util.concurrent.ConcurrentLinkedQueue
-java.util.concurrent.ConcurrentLinkedQueue$Itr
-java.util.concurrent.ConcurrentLinkedQueue$Node
-java.util.concurrent.ConcurrentMap
-java.util.concurrent.ConcurrentNavigableMap
-java.util.concurrent.ConcurrentSkipListMap
-java.util.concurrent.ConcurrentSkipListMap$HeadIndex
-java.util.concurrent.ConcurrentSkipListMap$Index
-java.util.concurrent.ConcurrentSkipListMap$Iter
-java.util.concurrent.ConcurrentSkipListMap$Node
-java.util.concurrent.ConcurrentSkipListMap$ValueIterator
-java.util.concurrent.ConcurrentSkipListMap$Values
-java.util.concurrent.CopyOnWriteArrayList
-java.util.concurrent.CopyOnWriteArrayList$COWIterator
-java.util.concurrent.CopyOnWriteArraySet
-java.util.concurrent.CountDownLatch
-java.util.concurrent.CountDownLatch$Sync
-java.util.concurrent.CountedCompleter
-java.util.concurrent.DelayQueue
-java.util.concurrent.Delayed
-java.util.concurrent.ExecutionException
-java.util.concurrent.Executor
-java.util.concurrent.ExecutorService
-java.util.concurrent.Executors
-java.util.concurrent.Executors$DefaultThreadFactory
-java.util.concurrent.Executors$DelegatedExecutorService
-java.util.concurrent.Executors$DelegatedScheduledExecutorService
-java.util.concurrent.Executors$FinalizableDelegatedExecutorService
-java.util.concurrent.Executors$RunnableAdapter
-java.util.concurrent.ForkJoinPool
-java.util.concurrent.ForkJoinPool$1
-java.util.concurrent.ForkJoinPool$DefaultForkJoinWorkerThreadFactory
-java.util.concurrent.ForkJoinPool$ForkJoinWorkerThreadFactory
-java.util.concurrent.ForkJoinTask
-java.util.concurrent.ForkJoinTask$ExceptionNode
-java.util.concurrent.Future
-java.util.concurrent.FutureTask
-java.util.concurrent.FutureTask$WaitNode
-java.util.concurrent.LinkedBlockingDeque
-java.util.concurrent.LinkedBlockingDeque$AbstractItr
-java.util.concurrent.LinkedBlockingDeque$Itr
-java.util.concurrent.LinkedBlockingDeque$Node
-java.util.concurrent.LinkedBlockingQueue
-java.util.concurrent.LinkedBlockingQueue$Itr
-java.util.concurrent.LinkedBlockingQueue$Node
-java.util.concurrent.PriorityBlockingQueue
-java.util.concurrent.RejectedExecutionException
-java.util.concurrent.RejectedExecutionHandler
-java.util.concurrent.RunnableFuture
-java.util.concurrent.RunnableScheduledFuture
-java.util.concurrent.ScheduledExecutorService
-java.util.concurrent.ScheduledFuture
-java.util.concurrent.ScheduledThreadPoolExecutor
-java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
-java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask
-java.util.concurrent.Semaphore
-java.util.concurrent.Semaphore$NonfairSync
-java.util.concurrent.Semaphore$Sync
-java.util.concurrent.SynchronousQueue
-java.util.concurrent.SynchronousQueue$TransferQueue
-java.util.concurrent.SynchronousQueue$TransferStack
-java.util.concurrent.SynchronousQueue$TransferStack$SNode
-java.util.concurrent.SynchronousQueue$Transferer
-java.util.concurrent.ThreadFactory
-java.util.concurrent.ThreadLocalRandom
-java.util.concurrent.ThreadLocalRandom$1
-java.util.concurrent.ThreadPoolExecutor
-java.util.concurrent.ThreadPoolExecutor$AbortPolicy
-java.util.concurrent.ThreadPoolExecutor$DiscardOldestPolicy
-java.util.concurrent.ThreadPoolExecutor$DiscardPolicy
-java.util.concurrent.ThreadPoolExecutor$Worker
-java.util.concurrent.TimeUnit
-java.util.concurrent.TimeUnit$1
-java.util.concurrent.TimeUnit$2
-java.util.concurrent.TimeUnit$3
-java.util.concurrent.TimeUnit$4
-java.util.concurrent.TimeUnit$5
-java.util.concurrent.TimeUnit$6
-java.util.concurrent.TimeUnit$7
-java.util.concurrent.TimeoutException
-java.util.concurrent.atomic.AtomicBoolean
-java.util.concurrent.atomic.AtomicInteger
-java.util.concurrent.atomic.AtomicIntegerArray
-java.util.concurrent.atomic.AtomicIntegerFieldUpdater
-java.util.concurrent.atomic.AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl
-java.util.concurrent.atomic.AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl$1
-java.util.concurrent.atomic.AtomicLong
-java.util.concurrent.atomic.AtomicLongArray
-java.util.concurrent.atomic.AtomicReference
-java.util.concurrent.atomic.AtomicReferenceArray
-java.util.concurrent.atomic.AtomicReferenceFieldUpdater
-java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
-java.util.concurrent.locks.AbstractOwnableSynchronizer
-java.util.concurrent.locks.AbstractQueuedSynchronizer
-java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
-java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
-java.util.concurrent.locks.Condition
-java.util.concurrent.locks.Lock
-java.util.concurrent.locks.LockSupport
-java.util.concurrent.locks.ReadWriteLock
-java.util.concurrent.locks.ReentrantLock
-java.util.concurrent.locks.ReentrantLock$FairSync
-java.util.concurrent.locks.ReentrantLock$NonfairSync
-java.util.concurrent.locks.ReentrantLock$Sync
-java.util.concurrent.locks.ReentrantReadWriteLock
-java.util.concurrent.locks.ReentrantReadWriteLock$FairSync
-java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync
-java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock
-java.util.concurrent.locks.ReentrantReadWriteLock$Sync
-java.util.concurrent.locks.ReentrantReadWriteLock$Sync$HoldCounter
-java.util.concurrent.locks.ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter
-java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock
-java.util.function.-$Lambda$1MZdIZ-DL_fjy9l0o8IMJk57T2g
-java.util.function.-$Lambda$VGDeaUHZQIZywZW2ttlyhwk3Cmk
-java.util.function.-$Lambda$VGDeaUHZQIZywZW2ttlyhwk3Cmk$1
-java.util.function.BiConsumer
-java.util.function.BiFunction
-java.util.function.BinaryOperator
-java.util.function.Consumer
-java.util.function.DoubleBinaryOperator
-java.util.function.DoubleUnaryOperator
-java.util.function.Function
-java.util.function.IntBinaryOperator
-java.util.function.IntConsumer
-java.util.function.IntFunction
-java.util.function.IntToDoubleFunction
-java.util.function.IntToLongFunction
-java.util.function.IntUnaryOperator
-java.util.function.LongBinaryOperator
-java.util.function.LongConsumer
-java.util.function.LongUnaryOperator
-java.util.function.Predicate
-java.util.function.Supplier
-java.util.function.ToDoubleBiFunction
-java.util.function.ToDoubleFunction
-java.util.function.ToIntBiFunction
-java.util.function.ToIntFunction
-java.util.function.ToLongBiFunction
-java.util.function.ToLongFunction
-java.util.function.UnaryOperator
-java.util.jar.Attributes
-java.util.jar.Attributes$Name
-java.util.jar.JarEntry
-java.util.jar.JarFile
-java.util.jar.JarFile$JarEntryIterator
-java.util.jar.JarFile$JarFileEntry
-java.util.jar.JarVerifier
-java.util.jar.JarVerifier$1
-java.util.jar.JarVerifier$VerifierStream
-java.util.jar.Manifest
-java.util.jar.Manifest$FastInputStream
-java.util.logging.ErrorManager
-java.util.logging.FileHandler
-java.util.logging.FileHandler$InitializationErrorManager
-java.util.logging.FileHandler$MeteredStream
-java.util.logging.Filter
-java.util.logging.Formatter
-java.util.logging.Handler
-java.util.logging.Level
-java.util.logging.Level$KnownLevel
-java.util.logging.LogManager
-java.util.logging.LogManager$1
-java.util.logging.LogManager$2
-java.util.logging.LogManager$3
-java.util.logging.LogManager$5
-java.util.logging.LogManager$Cleaner
-java.util.logging.LogManager$LogNode
-java.util.logging.LogManager$LoggerContext
-java.util.logging.LogManager$LoggerContext$1
-java.util.logging.LogManager$LoggerWeakRef
-java.util.logging.LogManager$RootLogger
-java.util.logging.LogManager$SystemLoggerContext
-java.util.logging.LogRecord
-java.util.logging.Logger
-java.util.logging.Logger$1
-java.util.logging.Logger$LoggerBundle
-java.util.logging.LoggingPermission
-java.util.logging.LoggingProxyImpl
-java.util.logging.SimpleFormatter
-java.util.logging.StreamHandler
-java.util.logging.XMLFormatter
-java.util.prefs.AbstractPreferences
-java.util.prefs.FileSystemPreferences
-java.util.prefs.Preferences
-java.util.regex.MatchResult
-java.util.regex.Matcher
-java.util.regex.Matcher$OffsetBasedMatchResult
-java.util.regex.Pattern
-java.util.regex.PatternSyntaxException
-java.util.stream.-$Lambda$DJvCeprCIGMk0JvfSkTmQUmEYKA$1
-java.util.stream.-$Lambda$QgGTJrv63_zzBbeGjswm_UMqEbo$12
-java.util.stream.-$Lambda$QgGTJrv63_zzBbeGjswm_UMqEbo$5
-java.util.stream.-$Lambda$QgGTJrv63_zzBbeGjswm_UMqEbo$6
-java.util.stream.-$Lambda$RYrQKhHyGc-mMxiERR98xxRAWkA$5
-java.util.stream.-$Lambda$ioGbka_-VkWTFjRjTt8T4zzsxgk$3
-java.util.stream.-$Lambda$ioGbka_-VkWTFjRjTt8T4zzsxgk$7
-java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$21
-java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$22
-java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$26
-java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$4
-java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$5
-java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$51
-java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$54
-java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$67
-java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$83
-java.util.stream.AbstractPipeline
-java.util.stream.AbstractSpinedBuffer
-java.util.stream.BaseStream
-java.util.stream.Collector
-java.util.stream.Collector$Characteristics
-java.util.stream.Collectors
-java.util.stream.Collectors$CollectorImpl
-java.util.stream.DistinctOps
-java.util.stream.DistinctOps$1
-java.util.stream.DistinctOps$1$2
-java.util.stream.DoubleStream
-java.util.stream.FindOps
-java.util.stream.FindOps$FindOp
-java.util.stream.FindOps$FindSink
-java.util.stream.FindOps$FindSink$OfRef
-java.util.stream.ForEachOps
-java.util.stream.ForEachOps$ForEachOp
-java.util.stream.ForEachOps$ForEachOp$OfRef
-java.util.stream.IntPipeline
-java.util.stream.IntPipeline$4
-java.util.stream.IntPipeline$4$1
-java.util.stream.IntPipeline$Head
-java.util.stream.IntPipeline$StatelessOp
-java.util.stream.IntStream
-java.util.stream.LongPipeline
-java.util.stream.LongPipeline$StatelessOp
-java.util.stream.LongStream
-java.util.stream.Node
-java.util.stream.Node$Builder
-java.util.stream.Node$Builder$OfInt
-java.util.stream.Node$OfDouble
-java.util.stream.Node$OfInt
-java.util.stream.Node$OfLong
-java.util.stream.Node$OfPrimitive
-java.util.stream.Nodes
-java.util.stream.Nodes$EmptyNode
-java.util.stream.Nodes$EmptyNode$OfDouble
-java.util.stream.Nodes$EmptyNode$OfInt
-java.util.stream.Nodes$EmptyNode$OfLong
-java.util.stream.Nodes$EmptyNode$OfRef
-java.util.stream.Nodes$IntSpinedNodeBuilder
-java.util.stream.PipelineHelper
-java.util.stream.ReduceOps
-java.util.stream.ReduceOps$3
-java.util.stream.ReduceOps$3ReducingSink
-java.util.stream.ReduceOps$8
-java.util.stream.ReduceOps$8ReducingSink
-java.util.stream.ReduceOps$AccumulatingSink
-java.util.stream.ReduceOps$Box
-java.util.stream.ReduceOps$ReduceOp
-java.util.stream.ReferencePipeline
-java.util.stream.ReferencePipeline$2
-java.util.stream.ReferencePipeline$2$1
-java.util.stream.ReferencePipeline$3
-java.util.stream.ReferencePipeline$3$1
-java.util.stream.ReferencePipeline$4
-java.util.stream.ReferencePipeline$4$1
-java.util.stream.ReferencePipeline$5
-java.util.stream.ReferencePipeline$5$1
-java.util.stream.ReferencePipeline$Head
-java.util.stream.ReferencePipeline$StatefulOp
-java.util.stream.ReferencePipeline$StatelessOp
-java.util.stream.Sink
-java.util.stream.Sink$ChainedInt
-java.util.stream.Sink$ChainedReference
-java.util.stream.Sink$OfInt
-java.util.stream.Sink$OfLong
-java.util.stream.SliceOps
-java.util.stream.SliceOps$1
-java.util.stream.SliceOps$1$1
-java.util.stream.SpinedBuffer$OfInt
-java.util.stream.SpinedBuffer$OfPrimitive
-java.util.stream.Stream
-java.util.stream.StreamOpFlag
-java.util.stream.StreamOpFlag$MaskBuilder
-java.util.stream.StreamOpFlag$Type
-java.util.stream.StreamShape
-java.util.stream.StreamSpliterators$InfiniteSupplyingSpliterator
-java.util.stream.StreamSpliterators$InfiniteSupplyingSpliterator$OfRef
-java.util.stream.StreamSupport
-java.util.stream.TerminalOp
-java.util.stream.TerminalSink
-java.util.zip.Adler32
-java.util.zip.CRC32
-java.util.zip.CheckedInputStream
-java.util.zip.Checksum
-java.util.zip.DataFormatException
-java.util.zip.Deflater
-java.util.zip.DeflaterOutputStream
-java.util.zip.GZIPInputStream
-java.util.zip.GZIPInputStream$1
-java.util.zip.GZIPOutputStream
-java.util.zip.Inflater
-java.util.zip.InflaterInputStream
-java.util.zip.ZStreamRef
-java.util.zip.ZipCoder
-java.util.zip.ZipConstants
-java.util.zip.ZipEntry
-java.util.zip.ZipException
-java.util.zip.ZipFile
-java.util.zip.ZipFile$ZipEntryIterator
-java.util.zip.ZipFile$ZipFileInflaterInputStream
-java.util.zip.ZipFile$ZipFileInputStream
-java.util.zip.ZipInputStream
-java.util.zip.ZipUtils
-javax.crypto.BadPaddingException
-javax.crypto.Cipher
-javax.crypto.Cipher$CipherSpiAndProvider
-javax.crypto.Cipher$InitParams
-javax.crypto.Cipher$InitType
-javax.crypto.Cipher$NeedToSet
-javax.crypto.Cipher$SpiAndProviderUpdater
-javax.crypto.Cipher$Transform
-javax.crypto.CipherSpi
-javax.crypto.IllegalBlockSizeException
-javax.crypto.JarVerifier
-javax.crypto.JceSecurity
-javax.crypto.JceSecurity$1
-javax.crypto.KeyGenerator
-javax.crypto.KeyGeneratorSpi
-javax.crypto.Mac
-javax.crypto.MacSpi
-javax.crypto.NoSuchPaddingException
-javax.crypto.NullCipher
-javax.crypto.SecretKey
-javax.crypto.ShortBufferException
-javax.crypto.spec.IvParameterSpec
-javax.crypto.spec.OAEPParameterSpec
-javax.crypto.spec.PBEParameterSpec
-javax.crypto.spec.PSource
-javax.crypto.spec.PSource$PSpecified
-javax.crypto.spec.SecretKeySpec
-javax.microedition.khronos.egl.EGL
-javax.microedition.khronos.egl.EGL10
-javax.microedition.khronos.egl.EGLConfig
-javax.microedition.khronos.egl.EGLContext
-javax.microedition.khronos.egl.EGLDisplay
-javax.microedition.khronos.egl.EGLSurface
-javax.microedition.khronos.opengles.GL
-javax.microedition.khronos.opengles.GL10
-javax.microedition.khronos.opengles.GL10Ext
-javax.microedition.khronos.opengles.GL11
-javax.microedition.khronos.opengles.GL11Ext
-javax.microedition.khronos.opengles.GL11ExtensionPack
-javax.net.DefaultSocketFactory
-javax.net.ServerSocketFactory
-javax.net.SocketFactory
-javax.net.ssl.ExtendedSSLSession
-javax.net.ssl.HandshakeCompletedListener
-javax.net.ssl.HostnameVerifier
-javax.net.ssl.HttpsURLConnection
-javax.net.ssl.KeyManager
-javax.net.ssl.KeyManagerFactory
-javax.net.ssl.KeyManagerFactory$1
-javax.net.ssl.KeyManagerFactorySpi
-javax.net.ssl.SNIHostName
-javax.net.ssl.SNIServerName
-javax.net.ssl.SSLContext
-javax.net.ssl.SSLContextSpi
-javax.net.ssl.SSLEngine
-javax.net.ssl.SSLException
-javax.net.ssl.SSLParameters
-javax.net.ssl.SSLPeerUnverifiedException
-javax.net.ssl.SSLProtocolException
-javax.net.ssl.SSLServerSocketFactory
-javax.net.ssl.SSLSession
-javax.net.ssl.SSLSessionContext
-javax.net.ssl.SSLSocket
-javax.net.ssl.SSLSocketFactory
-javax.net.ssl.SSLSocketFactory$1
-javax.net.ssl.TrustManager
-javax.net.ssl.TrustManagerFactory
-javax.net.ssl.TrustManagerFactory$1
-javax.net.ssl.TrustManagerFactorySpi
-javax.net.ssl.X509ExtendedKeyManager
-javax.net.ssl.X509ExtendedTrustManager
-javax.net.ssl.X509KeyManager
-javax.net.ssl.X509TrustManager
-javax.security.auth.Destroyable
-javax.security.auth.callback.UnsupportedCallbackException
-javax.security.auth.x500.X500Principal
-javax.security.cert.Certificate
-javax.security.cert.CertificateEncodingException
-javax.security.cert.CertificateException
-javax.security.cert.X509Certificate
-javax.sip.SipException
-javax.xml.parsers.ParserConfigurationException
-javax.xml.parsers.SAXParser
-javax.xml.parsers.SAXParserFactory
-javax.xml.transform.TransformerConfigurationException
-javax.xml.transform.TransformerException
-junit.framework.Assert
-libcore.icu.CollationKeyICU
-libcore.icu.DateIntervalFormat
-libcore.icu.DateUtilsBridge
-libcore.icu.ICU
-libcore.icu.LocaleData
-libcore.icu.NativeConverter
-libcore.icu.RelativeDateTimeFormatter
-libcore.icu.RelativeDateTimeFormatter$FormatterCache
-libcore.icu.TimeZoneNames
-libcore.icu.TimeZoneNames$1
-libcore.icu.TimeZoneNames$ZoneStringsCache
-libcore.internal.StringPool
-libcore.io.AsynchronousCloseMonitor
-libcore.io.BlockGuardOs
-libcore.io.BufferIterator
-libcore.io.ClassPathURLStreamHandler
-libcore.io.ClassPathURLStreamHandler$ClassPathURLConnection
-libcore.io.ClassPathURLStreamHandler$ClassPathURLConnection$1
-libcore.io.DropBox
-libcore.io.DropBox$DefaultReporter
-libcore.io.DropBox$Reporter
-libcore.io.EventLogger
-libcore.io.EventLogger$DefaultReporter
-libcore.io.EventLogger$Reporter
-libcore.io.ForwardingOs
-libcore.io.IoBridge
-libcore.io.IoTracker
-libcore.io.IoTracker$Mode
-libcore.io.IoUtils
-libcore.io.IoUtils$FileReader
-libcore.io.Libcore
-libcore.io.Linux
-libcore.io.Memory
-libcore.io.MemoryMappedFile
-libcore.io.NioBufferIterator
-libcore.io.Os
-libcore.io.Streams
-libcore.math.MathUtils
-libcore.net.MimeUtils
-libcore.net.NetworkSecurityPolicy
-libcore.net.NetworkSecurityPolicy$DefaultNetworkSecurityPolicy
-libcore.net.UriCodec
-libcore.net.event.NetworkEventDispatcher
-libcore.net.event.NetworkEventListener
-libcore.reflect.AnnotatedElements
-libcore.reflect.AnnotationFactory
-libcore.reflect.AnnotationMember
-libcore.reflect.AnnotationMember$DefaultValues
-libcore.reflect.GenericArrayTypeImpl
-libcore.reflect.GenericSignatureParser
-libcore.reflect.ListOfTypes
-libcore.reflect.ListOfVariables
-libcore.reflect.ParameterizedTypeImpl
-libcore.reflect.TypeVariableImpl
-libcore.reflect.Types
-libcore.util.BasicLruCache
-libcore.util.CharsetUtils
-libcore.util.CollectionUtils
-libcore.util.EmptyArray
-libcore.util.HexEncoding
-libcore.util.NativeAllocationRegistry
-libcore.util.NativeAllocationRegistry$CleanerRunner
-libcore.util.NativeAllocationRegistry$CleanerThunk
-libcore.util.Objects
-libcore.util.TimeZoneDataFiles
-libcore.util.ZoneInfo
-libcore.util.ZoneInfo$CheckedArithmeticException
-libcore.util.ZoneInfo$OffsetInterval
-libcore.util.ZoneInfo$WallTime
-libcore.util.ZoneInfoDB
-libcore.util.ZoneInfoDB$TzData
-libcore.util.ZoneInfoDB$TzData$1
-org.apache.commons.logging.Log
-org.apache.commons.logging.LogFactory
-org.apache.commons.logging.impl.Jdk14Logger
-org.apache.commons.logging.impl.WeakHashtable
-org.apache.harmony.dalvik.NativeTestTarget
-org.apache.harmony.dalvik.ddmc.Chunk
-org.apache.harmony.dalvik.ddmc.ChunkHandler
-org.apache.harmony.dalvik.ddmc.DdmServer
-org.apache.harmony.dalvik.ddmc.DdmVmInternal
-org.apache.harmony.luni.internal.util.TimezoneGetter
-org.apache.harmony.xml.ExpatAttributes
-org.apache.harmony.xml.ExpatException
-org.apache.harmony.xml.ExpatParser
-org.apache.harmony.xml.ExpatParser$CurrentAttributes
-org.apache.harmony.xml.ExpatParser$ExpatLocator
-org.apache.harmony.xml.ExpatReader
-org.apache.harmony.xml.parsers.SAXParserFactoryImpl
-org.apache.harmony.xml.parsers.SAXParserImpl
-org.apache.http.ConnectionReuseStrategy
-org.apache.http.FormattedHeader
-org.apache.http.Header
-org.apache.http.HeaderElement
-org.apache.http.HeaderElementIterator
-org.apache.http.HeaderIterator
-org.apache.http.HttpClientConnection
-org.apache.http.HttpConnection
-org.apache.http.HttpConnectionMetrics
-org.apache.http.HttpEntity
-org.apache.http.HttpEntityEnclosingRequest
-org.apache.http.HttpException
-org.apache.http.HttpHost
-org.apache.http.HttpInetConnection
-org.apache.http.HttpMessage
-org.apache.http.HttpRequest
-org.apache.http.HttpRequestFactory
-org.apache.http.HttpRequestInterceptor
-org.apache.http.HttpResponse
-org.apache.http.HttpResponseFactory
-org.apache.http.HttpResponseInterceptor
-org.apache.http.HttpServerConnection
-org.apache.http.HttpVersion
-org.apache.http.NameValuePair
-org.apache.http.ParseException
-org.apache.http.ProtocolException
-org.apache.http.ProtocolVersion
-org.apache.http.ReasonPhraseCatalog
-org.apache.http.RequestLine
-org.apache.http.StatusLine
-org.apache.http.auth.AuthSchemeFactory
-org.apache.http.auth.AuthSchemeRegistry
-org.apache.http.auth.AuthState
-org.apache.http.auth.AuthenticationException
-org.apache.http.client.AuthenticationHandler
-org.apache.http.client.ClientProtocolException
-org.apache.http.client.CookieStore
-org.apache.http.client.CredentialsProvider
-org.apache.http.client.HttpClient
-org.apache.http.client.HttpRequestRetryHandler
-org.apache.http.client.HttpResponseException
-org.apache.http.client.RedirectHandler
-org.apache.http.client.RequestDirector
-org.apache.http.client.ResponseHandler
-org.apache.http.client.UserTokenHandler
-org.apache.http.client.entity.UrlEncodedFormEntity
-org.apache.http.client.methods.AbortableHttpRequest
-org.apache.http.client.methods.HttpEntityEnclosingRequestBase
-org.apache.http.client.methods.HttpGet
-org.apache.http.client.methods.HttpPost
-org.apache.http.client.methods.HttpPut
-org.apache.http.client.methods.HttpRequestBase
-org.apache.http.client.methods.HttpUriRequest
-org.apache.http.client.params.HttpClientParams
-org.apache.http.client.protocol.RequestAddCookies
-org.apache.http.client.protocol.RequestDefaultHeaders
-org.apache.http.client.protocol.RequestProxyAuthentication
-org.apache.http.client.protocol.RequestTargetAuthentication
-org.apache.http.client.protocol.ResponseProcessCookies
-org.apache.http.client.utils.URIUtils
-org.apache.http.client.utils.URLEncodedUtils
-org.apache.http.conn.BasicManagedEntity
-org.apache.http.conn.ClientConnectionManager
-org.apache.http.conn.ClientConnectionOperator
-org.apache.http.conn.ClientConnectionRequest
-org.apache.http.conn.ConnectTimeoutException
-org.apache.http.conn.ConnectionKeepAliveStrategy
-org.apache.http.conn.ConnectionReleaseTrigger
-org.apache.http.conn.EofSensorInputStream
-org.apache.http.conn.EofSensorWatcher
-org.apache.http.conn.ManagedClientConnection
-org.apache.http.conn.OperatedClientConnection
-org.apache.http.conn.params.ConnManagerPNames
-org.apache.http.conn.params.ConnManagerParamBean
-org.apache.http.conn.params.ConnManagerParams
-org.apache.http.conn.params.ConnManagerParams$1
-org.apache.http.conn.params.ConnPerRoute
-org.apache.http.conn.params.ConnPerRouteBean
-org.apache.http.conn.params.ConnRoutePNames
-org.apache.http.conn.params.ConnRouteParams
-org.apache.http.conn.routing.BasicRouteDirector
-org.apache.http.conn.routing.HttpRoute
-org.apache.http.conn.routing.HttpRouteDirector
-org.apache.http.conn.routing.HttpRoutePlanner
-org.apache.http.conn.routing.RouteInfo
-org.apache.http.conn.routing.RouteInfo$LayerType
-org.apache.http.conn.routing.RouteInfo$TunnelType
-org.apache.http.conn.routing.RouteTracker
-org.apache.http.conn.scheme.LayeredSocketFactory
-org.apache.http.conn.scheme.PlainSocketFactory
-org.apache.http.conn.scheme.Scheme
-org.apache.http.conn.scheme.SchemeRegistry
-org.apache.http.conn.scheme.SocketFactory
-org.apache.http.conn.ssl.AbstractVerifier
-org.apache.http.conn.ssl.AllowAllHostnameVerifier
-org.apache.http.conn.ssl.AndroidDistinguishedNameParser
-org.apache.http.conn.ssl.BrowserCompatHostnameVerifier
-org.apache.http.conn.ssl.SSLSocketFactory
-org.apache.http.conn.ssl.StrictHostnameVerifier
-org.apache.http.conn.ssl.X509HostnameVerifier
-org.apache.http.cookie.ClientCookie
-org.apache.http.cookie.Cookie
-org.apache.http.cookie.CookieAttributeHandler
-org.apache.http.cookie.CookieIdentityComparator
-org.apache.http.cookie.CookieOrigin
-org.apache.http.cookie.CookiePathComparator
-org.apache.http.cookie.CookieSpec
-org.apache.http.cookie.CookieSpecFactory
-org.apache.http.cookie.CookieSpecRegistry
-org.apache.http.cookie.MalformedCookieException
-org.apache.http.cookie.SetCookie
-org.apache.http.entity.AbstractHttpEntity
-org.apache.http.entity.BasicHttpEntity
-org.apache.http.entity.ByteArrayEntity
-org.apache.http.entity.ContentLengthStrategy
-org.apache.http.entity.HttpEntityWrapper
-org.apache.http.entity.InputStreamEntity
-org.apache.http.entity.StringEntity
-org.apache.http.impl.AbstractHttpClientConnection
-org.apache.http.impl.AbstractHttpServerConnection
-org.apache.http.impl.DefaultConnectionReuseStrategy
-org.apache.http.impl.DefaultHttpRequestFactory
-org.apache.http.impl.DefaultHttpResponseFactory
-org.apache.http.impl.DefaultHttpServerConnection
-org.apache.http.impl.EnglishReasonPhraseCatalog
-org.apache.http.impl.HttpConnectionMetricsImpl
-org.apache.http.impl.SocketHttpClientConnection
-org.apache.http.impl.SocketHttpServerConnection
-org.apache.http.impl.auth.BasicSchemeFactory
-org.apache.http.impl.auth.DigestSchemeFactory
-org.apache.http.impl.client.AbstractAuthenticationHandler
-org.apache.http.impl.client.AbstractHttpClient
-org.apache.http.impl.client.BasicCookieStore
-org.apache.http.impl.client.BasicCredentialsProvider
-org.apache.http.impl.client.ClientParamsStack
-org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy
-org.apache.http.impl.client.DefaultHttpClient
-org.apache.http.impl.client.DefaultHttpRequestRetryHandler
-org.apache.http.impl.client.DefaultProxyAuthenticationHandler
-org.apache.http.impl.client.DefaultRedirectHandler
-org.apache.http.impl.client.DefaultRequestDirector
-org.apache.http.impl.client.DefaultTargetAuthenticationHandler
-org.apache.http.impl.client.DefaultUserTokenHandler
-org.apache.http.impl.client.EntityEnclosingRequestWrapper
-org.apache.http.impl.client.RequestWrapper
-org.apache.http.impl.client.RoutedRequest
-org.apache.http.impl.client.TunnelRefusedException
-org.apache.http.impl.conn.AbstractClientConnAdapter
-org.apache.http.impl.conn.AbstractPoolEntry
-org.apache.http.impl.conn.AbstractPooledConnAdapter
-org.apache.http.impl.conn.DefaultClientConnection
-org.apache.http.impl.conn.DefaultClientConnectionOperator
-org.apache.http.impl.conn.DefaultResponseParser
-org.apache.http.impl.conn.IdleConnectionHandler
-org.apache.http.impl.conn.IdleConnectionHandler$TimeValues
-org.apache.http.impl.conn.ProxySelectorRoutePlanner
-org.apache.http.impl.conn.tsccm.AbstractConnPool
-org.apache.http.impl.conn.tsccm.BasicPoolEntry
-org.apache.http.impl.conn.tsccm.BasicPoolEntryRef
-org.apache.http.impl.conn.tsccm.BasicPooledConnAdapter
-org.apache.http.impl.conn.tsccm.ConnPoolByRoute
-org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1
-org.apache.http.impl.conn.tsccm.PoolEntryRequest
-org.apache.http.impl.conn.tsccm.RefQueueHandler
-org.apache.http.impl.conn.tsccm.RefQueueWorker
-org.apache.http.impl.conn.tsccm.RouteSpecificPool
-org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager
-org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1
-org.apache.http.impl.conn.tsccm.WaitingThreadAborter
-org.apache.http.impl.cookie.AbstractCookieAttributeHandler
-org.apache.http.impl.cookie.AbstractCookieSpec
-org.apache.http.impl.cookie.BasicClientCookie
-org.apache.http.impl.cookie.BasicCommentHandler
-org.apache.http.impl.cookie.BasicDomainHandler
-org.apache.http.impl.cookie.BasicExpiresHandler
-org.apache.http.impl.cookie.BasicMaxAgeHandler
-org.apache.http.impl.cookie.BasicPathHandler
-org.apache.http.impl.cookie.BasicSecureHandler
-org.apache.http.impl.cookie.BestMatchSpec
-org.apache.http.impl.cookie.BestMatchSpecFactory
-org.apache.http.impl.cookie.BrowserCompatSpec
-org.apache.http.impl.cookie.BrowserCompatSpecFactory
-org.apache.http.impl.cookie.CookieSpecBase
-org.apache.http.impl.cookie.DateParseException
-org.apache.http.impl.cookie.DateUtils
-org.apache.http.impl.cookie.DateUtils$DateFormatHolder
-org.apache.http.impl.cookie.DateUtils$DateFormatHolder$1
-org.apache.http.impl.cookie.NetscapeDomainHandler
-org.apache.http.impl.cookie.NetscapeDraftHeaderParser
-org.apache.http.impl.cookie.NetscapeDraftSpec
-org.apache.http.impl.cookie.NetscapeDraftSpecFactory
-org.apache.http.impl.cookie.RFC2109DomainHandler
-org.apache.http.impl.cookie.RFC2109Spec
-org.apache.http.impl.cookie.RFC2109SpecFactory
-org.apache.http.impl.cookie.RFC2109VersionHandler
-org.apache.http.impl.cookie.RFC2965CommentUrlAttributeHandler
-org.apache.http.impl.cookie.RFC2965DiscardAttributeHandler
-org.apache.http.impl.cookie.RFC2965DomainAttributeHandler
-org.apache.http.impl.cookie.RFC2965PortAttributeHandler
-org.apache.http.impl.cookie.RFC2965Spec
-org.apache.http.impl.cookie.RFC2965SpecFactory
-org.apache.http.impl.cookie.RFC2965VersionAttributeHandler
-org.apache.http.impl.entity.EntityDeserializer
-org.apache.http.impl.entity.EntitySerializer
-org.apache.http.impl.entity.LaxContentLengthStrategy
-org.apache.http.impl.entity.StrictContentLengthStrategy
-org.apache.http.impl.io.AbstractMessageParser
-org.apache.http.impl.io.AbstractMessageWriter
-org.apache.http.impl.io.AbstractSessionInputBuffer
-org.apache.http.impl.io.AbstractSessionOutputBuffer
-org.apache.http.impl.io.ChunkedInputStream
-org.apache.http.impl.io.ContentLengthInputStream
-org.apache.http.impl.io.ContentLengthOutputStream
-org.apache.http.impl.io.HttpRequestParser
-org.apache.http.impl.io.HttpRequestWriter
-org.apache.http.impl.io.HttpResponseWriter
-org.apache.http.impl.io.HttpTransportMetricsImpl
-org.apache.http.impl.io.IdentityOutputStream
-org.apache.http.impl.io.SocketInputBuffer
-org.apache.http.impl.io.SocketOutputBuffer
-org.apache.http.io.HttpMessageParser
-org.apache.http.io.HttpMessageWriter
-org.apache.http.io.HttpTransportMetrics
-org.apache.http.io.SessionInputBuffer
-org.apache.http.io.SessionOutputBuffer
-org.apache.http.message.AbstractHttpMessage
-org.apache.http.message.BasicHeader
-org.apache.http.message.BasicHeaderElement
-org.apache.http.message.BasicHeaderElementIterator
-org.apache.http.message.BasicHeaderValueParser
-org.apache.http.message.BasicHttpRequest
-org.apache.http.message.BasicHttpResponse
-org.apache.http.message.BasicLineFormatter
-org.apache.http.message.BasicLineParser
-org.apache.http.message.BasicListHeaderIterator
-org.apache.http.message.BasicNameValuePair
-org.apache.http.message.BasicRequestLine
-org.apache.http.message.BasicStatusLine
-org.apache.http.message.BufferedHeader
-org.apache.http.message.HeaderGroup
-org.apache.http.message.HeaderValueParser
-org.apache.http.message.LineFormatter
-org.apache.http.message.LineParser
-org.apache.http.message.ParserCursor
-org.apache.http.params.AbstractHttpParams
-org.apache.http.params.BasicHttpParams
-org.apache.http.params.CoreConnectionPNames
-org.apache.http.params.CoreProtocolPNames
-org.apache.http.params.DefaultedHttpParams
-org.apache.http.params.HttpAbstractParamBean
-org.apache.http.params.HttpConnectionParams
-org.apache.http.params.HttpParams
-org.apache.http.params.HttpProtocolParams
-org.apache.http.protocol.BasicHttpContext
-org.apache.http.protocol.BasicHttpProcessor
-org.apache.http.protocol.DefaultedHttpContext
-org.apache.http.protocol.HTTP
-org.apache.http.protocol.HttpContext
-org.apache.http.protocol.HttpProcessor
-org.apache.http.protocol.HttpRequestExecutor
-org.apache.http.protocol.HttpRequestHandler
-org.apache.http.protocol.HttpRequestHandlerRegistry
-org.apache.http.protocol.HttpRequestHandlerResolver
-org.apache.http.protocol.HttpRequestInterceptorList
-org.apache.http.protocol.HttpResponseInterceptorList
-org.apache.http.protocol.HttpService
-org.apache.http.protocol.RequestConnControl
-org.apache.http.protocol.RequestContent
-org.apache.http.protocol.RequestExpectContinue
-org.apache.http.protocol.RequestTargetHost
-org.apache.http.protocol.RequestUserAgent
-org.apache.http.protocol.ResponseConnControl
-org.apache.http.protocol.ResponseContent
-org.apache.http.protocol.UriPatternMatcher
-org.apache.http.util.ByteArrayBuffer
-org.apache.http.util.CharArrayBuffer
-org.apache.http.util.EntityUtils
-org.apache.http.util.LangUtils
-org.ccil.cowan.tagsoup.AttributesImpl
-org.ccil.cowan.tagsoup.AutoDetector
-org.ccil.cowan.tagsoup.Element
-org.ccil.cowan.tagsoup.ElementType
-org.ccil.cowan.tagsoup.HTMLModels
-org.ccil.cowan.tagsoup.HTMLScanner
-org.ccil.cowan.tagsoup.HTMLSchema
-org.ccil.cowan.tagsoup.Parser
-org.ccil.cowan.tagsoup.Parser$1
-org.ccil.cowan.tagsoup.ScanHandler
-org.ccil.cowan.tagsoup.Scanner
-org.ccil.cowan.tagsoup.Schema
-org.json.JSON
-org.json.JSONArray
-org.json.JSONException
-org.json.JSONObject
-org.json.JSONObject$1
-org.json.JSONStringer
-org.json.JSONStringer$Scope
-org.json.JSONTokener
-org.kxml2.io.KXmlParser
-org.kxml2.io.KXmlParser$ValueContext
-org.kxml2.io.KXmlSerializer
-org.xml.sax.Attributes
-org.xml.sax.ContentHandler
-org.xml.sax.DTDHandler
-org.xml.sax.EntityResolver
-org.xml.sax.ErrorHandler
-org.xml.sax.InputSource
-org.xml.sax.Locator
-org.xml.sax.SAXException
-org.xml.sax.SAXNotRecognizedException
-org.xml.sax.SAXNotSupportedException
-org.xml.sax.SAXParseException
-org.xml.sax.XMLReader
-org.xml.sax.ext.DeclHandler
-org.xml.sax.ext.DefaultHandler2
-org.xml.sax.ext.EntityResolver2
-org.xml.sax.ext.LexicalHandler
-org.xml.sax.helpers.AttributesImpl
-org.xml.sax.helpers.DefaultHandler
-org.xmlpull.v1.XmlPullParser
-org.xmlpull.v1.XmlPullParserException
-org.xmlpull.v1.XmlPullParserFactory
-org.xmlpull.v1.XmlSerializer
-sun.invoke.util.BytecodeDescriptor
-sun.invoke.util.VerifyAccess
-sun.invoke.util.Wrapper
-sun.invoke.util.Wrapper$Format
-sun.misc.ASCIICaseInsensitiveComparator
-sun.misc.Cleaner
-sun.misc.CompoundEnumeration
-sun.misc.FDBigInteger
-sun.misc.FloatingDecimal
-sun.misc.FloatingDecimal$1
-sun.misc.FloatingDecimal$ASCIIToBinaryBuffer
-sun.misc.FloatingDecimal$ASCIIToBinaryConverter
-sun.misc.FloatingDecimal$BinaryToASCIIBuffer
-sun.misc.FloatingDecimal$BinaryToASCIIConverter
-sun.misc.FloatingDecimal$ExceptionalBinaryToASCIIBuffer
-sun.misc.FloatingDecimal$PreparedASCIIToBinaryBuffer
-sun.misc.FormattedFloatingDecimal
-sun.misc.FormattedFloatingDecimal$1
-sun.misc.FormattedFloatingDecimal$Form
-sun.misc.IOUtils
-sun.misc.JavaIOFileDescriptorAccess
-sun.misc.LRUCache
-sun.misc.REException
-sun.misc.SharedSecrets
-sun.misc.Unsafe
-sun.misc.VM
-sun.misc.Version
-sun.net.ConnectionResetException
-sun.net.NetHooks
-sun.net.NetProperties
-sun.net.NetProperties$1
-sun.net.ResourceManager
-sun.net.spi.DefaultProxySelector
-sun.net.spi.DefaultProxySelector$1
-sun.net.spi.DefaultProxySelector$NonProxyInfo
-sun.net.spi.nameservice.NameService
-sun.net.util.IPAddressUtil
-sun.net.www.ParseUtil
-sun.net.www.protocol.file.Handler
-sun.net.www.protocol.jar.Handler
-sun.nio.ch.AbstractPollArrayWrapper
-sun.nio.ch.AbstractPollSelectorImpl
-sun.nio.ch.AllocatedNativeObject
-sun.nio.ch.ChannelInputStream
-sun.nio.ch.DatagramChannelImpl
-sun.nio.ch.DatagramDispatcher
-sun.nio.ch.DefaultSelectorProvider
-sun.nio.ch.DirectBuffer
-sun.nio.ch.FileChannelImpl
-sun.nio.ch.FileChannelImpl$Unmapper
-sun.nio.ch.FileDescriptorHolderSocketImpl
-sun.nio.ch.FileDispatcher
-sun.nio.ch.FileDispatcherImpl
-sun.nio.ch.FileKey
-sun.nio.ch.FileLockImpl
-sun.nio.ch.FileLockTable
-sun.nio.ch.IOStatus
-sun.nio.ch.IOUtil
-sun.nio.ch.Interruptible
-sun.nio.ch.NativeDispatcher
-sun.nio.ch.NativeObject
-sun.nio.ch.NativeThread
-sun.nio.ch.NativeThreadSet
-sun.nio.ch.Net
-sun.nio.ch.Net$1
-sun.nio.ch.Net$4
-sun.nio.ch.PollArrayWrapper
-sun.nio.ch.PollSelectorImpl
-sun.nio.ch.PollSelectorProvider
-sun.nio.ch.SelChImpl
-sun.nio.ch.SelectionKeyImpl
-sun.nio.ch.SelectorImpl
-sun.nio.ch.SelectorProviderImpl
-sun.nio.ch.ServerSocketChannelImpl
-sun.nio.ch.SharedFileLockTable
-sun.nio.ch.SharedFileLockTable$FileLockReference
-sun.nio.ch.SocketAdaptor
-sun.nio.ch.SocketAdaptor$1
-sun.nio.ch.SocketAdaptor$2
-sun.nio.ch.SocketAdaptor$SocketInputStream
-sun.nio.ch.SocketChannelImpl
-sun.nio.ch.SocketDispatcher
-sun.nio.ch.Util
-sun.nio.ch.Util$1
-sun.nio.ch.Util$2
-sun.nio.ch.Util$BufferCache
-sun.nio.cs.ArrayDecoder
-sun.nio.cs.ArrayEncoder
-sun.nio.cs.StreamDecoder
-sun.nio.cs.StreamEncoder
-sun.nio.cs.ThreadLocalCoders
-sun.nio.cs.ThreadLocalCoders$1
-sun.nio.cs.ThreadLocalCoders$2
-sun.nio.cs.ThreadLocalCoders$Cache
-sun.nio.fs.AbstractBasicFileAttributeView
-sun.nio.fs.AbstractFileSystemProvider
-sun.nio.fs.AbstractPath
-sun.nio.fs.DefaultFileSystemProvider
-sun.nio.fs.DynamicFileAttributeView
-sun.nio.fs.LinuxFileSystem
-sun.nio.fs.LinuxFileSystemProvider
-sun.nio.fs.NativeBuffer
-sun.nio.fs.NativeBuffer$Deallocator
-sun.nio.fs.NativeBuffers
-sun.nio.fs.UnixChannelFactory
-sun.nio.fs.UnixChannelFactory$Flags
-sun.nio.fs.UnixConstants
-sun.nio.fs.UnixException
-sun.nio.fs.UnixFileAttributeViews
-sun.nio.fs.UnixFileAttributeViews$Basic
-sun.nio.fs.UnixFileAttributes
-sun.nio.fs.UnixFileAttributes$UnixAsBasicFileAttributes
-sun.nio.fs.UnixFileModeAttribute
-sun.nio.fs.UnixFileStoreAttributes
-sun.nio.fs.UnixFileSystem
-sun.nio.fs.UnixFileSystemProvider
-sun.nio.fs.UnixMountEntry
-sun.nio.fs.UnixNativeDispatcher
-sun.nio.fs.UnixPath
-sun.nio.fs.Util
-sun.reflect.misc.ReflectUtil
-sun.security.action.GetBooleanAction
-sun.security.action.GetIntegerAction
-sun.security.action.GetPropertyAction
-sun.security.jca.GetInstance
-sun.security.jca.GetInstance$Instance
-sun.security.jca.JCAUtil
-sun.security.jca.ProviderConfig
-sun.security.jca.ProviderConfig$2
-sun.security.jca.ProviderList
-sun.security.jca.ProviderList$1
-sun.security.jca.ProviderList$2
-sun.security.jca.ProviderList$3
-sun.security.jca.ProviderList$ServiceList
-sun.security.jca.ProviderList$ServiceList$1
-sun.security.jca.Providers
-sun.security.jca.ServiceId
-sun.security.pkcs.ContentInfo
-sun.security.pkcs.PKCS7
-sun.security.pkcs.PKCS7$VerbatimX509Certificate
-sun.security.pkcs.PKCS7$WrappedX509Certificate
-sun.security.pkcs.PKCS9Attribute
-sun.security.pkcs.SignerInfo
-sun.security.provider.CertPathProvider
-sun.security.provider.X509Factory
-sun.security.provider.certpath.AdaptableX509CertSelector
-sun.security.provider.certpath.AlgorithmChecker
-sun.security.provider.certpath.BasicChecker
-sun.security.provider.certpath.CertId
-sun.security.provider.certpath.CertPathHelper
-sun.security.provider.certpath.ConstraintsChecker
-sun.security.provider.certpath.KeyChecker
-sun.security.provider.certpath.OCSP$RevocationStatus
-sun.security.provider.certpath.OCSP$RevocationStatus$CertStatus
-sun.security.provider.certpath.OCSPResponse
-sun.security.provider.certpath.OCSPResponse$ResponseStatus
-sun.security.provider.certpath.OCSPResponse$SingleResponse
-sun.security.provider.certpath.PKIX
-sun.security.provider.certpath.PKIX$ValidatorParams
-sun.security.provider.certpath.PKIXCertPathValidator
-sun.security.provider.certpath.PKIXMasterCertPathValidator
-sun.security.provider.certpath.PolicyChecker
-sun.security.provider.certpath.PolicyNodeImpl
-sun.security.provider.certpath.RevocationChecker
-sun.security.provider.certpath.RevocationChecker$1
-sun.security.provider.certpath.RevocationChecker$Mode
-sun.security.provider.certpath.RevocationChecker$RevocationProperties
-sun.security.util.AbstractAlgorithmConstraints
-sun.security.util.AbstractAlgorithmConstraints$1
-sun.security.util.AlgorithmDecomposer
-sun.security.util.BitArray
-sun.security.util.ByteArrayLexOrder
-sun.security.util.ByteArrayTagOrder
-sun.security.util.Cache
-sun.security.util.Cache$EqualByteArray
-sun.security.util.CertConstraintParameters
-sun.security.util.Debug
-sun.security.util.DerEncoder
-sun.security.util.DerIndefLenConverter
-sun.security.util.DerInputBuffer
-sun.security.util.DerInputStream
-sun.security.util.DerOutputStream
-sun.security.util.DerValue
-sun.security.util.DisabledAlgorithmConstraints
-sun.security.util.DisabledAlgorithmConstraints$Constraint
-sun.security.util.DisabledAlgorithmConstraints$Constraint$Operator
-sun.security.util.DisabledAlgorithmConstraints$Constraints
-sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraint
-sun.security.util.KeyUtil
-sun.security.util.Length
-sun.security.util.ManifestDigester
-sun.security.util.ManifestDigester$Entry
-sun.security.util.ManifestDigester$Position
-sun.security.util.ManifestEntryVerifier
-sun.security.util.ManifestEntryVerifier$SunProviderHolder
-sun.security.util.MemoryCache
-sun.security.util.MemoryCache$CacheEntry
-sun.security.util.MemoryCache$SoftCacheEntry
-sun.security.util.ObjectIdentifier
-sun.security.util.SignatureFileVerifier
-sun.security.x509.AVA
-sun.security.x509.AVAKeyword
-sun.security.x509.AccessDescription
-sun.security.x509.AlgorithmId
-sun.security.x509.AuthorityInfoAccessExtension
-sun.security.x509.AuthorityKeyIdentifierExtension
-sun.security.x509.BasicConstraintsExtension
-sun.security.x509.CRLDistributionPointsExtension
-sun.security.x509.CRLNumberExtension
-sun.security.x509.CRLReasonCodeExtension
-sun.security.x509.CertAttrSet
-sun.security.x509.CertificateAlgorithmId
-sun.security.x509.CertificateExtensions
-sun.security.x509.CertificateIssuerExtension
-sun.security.x509.CertificatePoliciesExtension
-sun.security.x509.CertificatePolicyId
-sun.security.x509.CertificateSerialNumber
-sun.security.x509.CertificateValidity
-sun.security.x509.CertificateVersion
-sun.security.x509.CertificateX509Key
-sun.security.x509.DNSName
-sun.security.x509.DeltaCRLIndicatorExtension
-sun.security.x509.DistributionPoint
-sun.security.x509.ExtendedKeyUsageExtension
-sun.security.x509.Extension
-sun.security.x509.FreshestCRLExtension
-sun.security.x509.GeneralName
-sun.security.x509.GeneralNameInterface
-sun.security.x509.GeneralNames
-sun.security.x509.InhibitAnyPolicyExtension
-sun.security.x509.IssuerAlternativeNameExtension
-sun.security.x509.IssuingDistributionPointExtension
-sun.security.x509.KeyIdentifier
-sun.security.x509.KeyUsageExtension
-sun.security.x509.NameConstraintsExtension
-sun.security.x509.NetscapeCertTypeExtension
-sun.security.x509.OCSPNoCheckExtension
-sun.security.x509.OIDMap
-sun.security.x509.OIDMap$OIDInfo
-sun.security.x509.PKIXExtensions
-sun.security.x509.PolicyConstraintsExtension
-sun.security.x509.PolicyInformation
-sun.security.x509.PolicyMappingsExtension
-sun.security.x509.PrivateKeyUsageExtension
-sun.security.x509.RDN
-sun.security.x509.SerialNumber
-sun.security.x509.SubjectAlternativeNameExtension
-sun.security.x509.SubjectInfoAccessExtension
-sun.security.x509.SubjectKeyIdentifierExtension
-sun.security.x509.URIName
-sun.security.x509.X500Name
-sun.security.x509.X500Name$1
-sun.security.x509.X509AttributeName
-sun.security.x509.X509CertImpl
-sun.security.x509.X509CertInfo
-sun.security.x509.X509Key
-sun.util.calendar.AbstractCalendar
-sun.util.calendar.BaseCalendar
-sun.util.calendar.BaseCalendar$Date
-sun.util.calendar.CalendarDate
-sun.util.calendar.CalendarSystem
-sun.util.calendar.CalendarUtils
-sun.util.calendar.Gregorian
-sun.util.calendar.Gregorian$Date
-sun.util.calendar.JulianCalendar
-sun.util.calendar.LocalGregorianCalendar
-sun.util.locale.BaseLocale
-sun.util.locale.BaseLocale$Cache
-sun.util.locale.BaseLocale$Key
-sun.util.locale.Extension
-sun.util.locale.InternalLocaleBuilder
-sun.util.locale.InternalLocaleBuilder$CaseInsensitiveChar
-sun.util.locale.LanguageTag
-sun.util.locale.LocaleExtensions
-sun.util.locale.LocaleObjectCache
-sun.util.locale.LocaleObjectCache$CacheEntry
-sun.util.locale.LocaleSyntaxException
-sun.util.locale.LocaleUtils
-sun.util.locale.ParseStatus
-sun.util.locale.StringTokenIterator
-sun.util.locale.UnicodeLocaleExtension
-sun.util.logging.LoggingProxy
-sun.util.logging.LoggingSupport
-sun.util.logging.LoggingSupport$1
-sun.util.logging.LoggingSupport$2
-sun.util.logging.PlatformLogger
-sun.util.logging.PlatformLogger$1
-sun.util.logging.PlatformLogger$JavaLoggerProxy
-sun.util.logging.PlatformLogger$Level
-sun.util.logging.PlatformLogger$LoggerProxy
diff --git a/config/boot-image-profile.txt b/config/boot-image-profile.txt
new file mode 100644
index 0000000..21f6739
--- /dev/null
+++ b/config/boot-image-profile.txt
@@ -0,0 +1,54833 @@
+HPLandroid/accessibilityservice/AccessibilityService$Callbacks;->init(ILandroid/os/IBinder;)V
+HPLandroid/accessibilityservice/AccessibilityService$Callbacks;->onAccessibilityButtonAvailabilityChanged(Z)V
+HPLandroid/accessibilityservice/AccessibilityService$Callbacks;->onAccessibilityButtonClicked()V
+HPLandroid/accessibilityservice/AccessibilityService$Callbacks;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLandroid/accessibilityservice/AccessibilityService$Callbacks;->onFingerprintCapturingGesturesChanged(Z)V
+HPLandroid/accessibilityservice/AccessibilityService$Callbacks;->onFingerprintGesture(I)V
+HPLandroid/accessibilityservice/AccessibilityService$Callbacks;->onGesture(I)Z
+HPLandroid/accessibilityservice/AccessibilityService$Callbacks;->onInterrupt()V
+HPLandroid/accessibilityservice/AccessibilityService$Callbacks;->onKeyEvent(Landroid/view/KeyEvent;)Z
+HPLandroid/accessibilityservice/AccessibilityService$Callbacks;->onMagnificationChanged(Landroid/graphics/Region;FFF)V
+HPLandroid/accessibilityservice/AccessibilityService$Callbacks;->onPerformGestureResult(IZ)V
+HPLandroid/accessibilityservice/AccessibilityService$Callbacks;->onServiceConnected()V
+HPLandroid/accessibilityservice/AccessibilityService$Callbacks;->onSoftKeyboardShowModeChanged(I)V
+HPLandroid/accessibilityservice/AccessibilityService$IAccessibilityServiceClientWrapper;-><init>(Landroid/content/Context;Landroid/os/Looper;Landroid/accessibilityservice/AccessibilityService$Callbacks;)V
+HPLandroid/accessibilityservice/AccessibilityService$IAccessibilityServiceClientWrapper;->executeMessage(Landroid/os/Message;)V
+HPLandroid/accessibilityservice/AccessibilityService$IAccessibilityServiceClientWrapper;->init(Landroid/accessibilityservice/IAccessibilityServiceConnection;ILandroid/os/IBinder;)V
+HPLandroid/accessibilityservice/AccessibilityService$IAccessibilityServiceClientWrapper;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;Z)V
+HPLandroid/accessibilityservice/AccessibilityServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/accessibilityservice/AccessibilityServiceInfo;
+HPLandroid/accessibilityservice/AccessibilityServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;->-wrap0(Landroid/accessibilityservice/AccessibilityServiceInfo;Landroid/os/Parcel;)V
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;-><init>()V
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;-><init>(Landroid/content/pm/ResolveInfo;Landroid/content/Context;)V
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;->equals(Ljava/lang/Object;)Z
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;->getCapabilities()I
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;->getComponentName()Landroid/content/ComponentName;
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;->getId()Ljava/lang/String;
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;->getResolveInfo()Landroid/content/pm/ResolveInfo;
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;->initFromParcel(Landroid/os/Parcel;)V
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;->isDirectBootAware()Z
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;->setCapabilities(I)V
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;->setComponentName(Landroid/content/ComponentName;)V
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;->updateDynamicallyConfigurableProperties(Landroid/accessibilityservice/AccessibilityServiceInfo;)V
+HPLandroid/accessibilityservice/AccessibilityServiceInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/accessibilityservice/IAccessibilityServiceClient$Stub$Proxy;->init(Landroid/accessibilityservice/IAccessibilityServiceConnection;ILandroid/os/IBinder;)V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient$Stub$Proxy;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;Z)V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient$Stub;-><init>()V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/accessibilityservice/IAccessibilityServiceClient$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accessibilityservice/IAccessibilityServiceClient;
+HPLandroid/accessibilityservice/IAccessibilityServiceClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/accessibilityservice/IAccessibilityServiceClient;->clearAccessibilityCache()V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient;->init(Landroid/accessibilityservice/IAccessibilityServiceConnection;ILandroid/os/IBinder;)V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient;->onAccessibilityButtonAvailabilityChanged(Z)V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient;->onAccessibilityButtonClicked()V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;Z)V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient;->onFingerprintCapturingGesturesChanged(Z)V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient;->onFingerprintGesture(I)V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient;->onGesture(I)V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient;->onInterrupt()V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient;->onKeyEvent(Landroid/view/KeyEvent;I)V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient;->onMagnificationChanged(Landroid/graphics/Region;FFF)V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient;->onPerformGestureResult(IZ)V
+HPLandroid/accessibilityservice/IAccessibilityServiceClient;->onSoftKeyboardShowModeChanged(I)V
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection$Stub$Proxy;->findAccessibilityNodeInfoByAccessibilityId(IJILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IJLandroid/os/Bundle;)Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection$Stub$Proxy;->getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection$Stub$Proxy;->getWindow(I)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection$Stub$Proxy;->getWindows()Ljava/util/List;
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection$Stub$Proxy;->performAccessibilityAction(IJILandroid/os/Bundle;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection$Stub$Proxy;->setServiceInfo(Landroid/accessibilityservice/AccessibilityServiceInfo;)V
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection$Stub;-><init>()V
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accessibilityservice/IAccessibilityServiceConnection;
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->disableSelf()V
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->findAccessibilityNodeInfoByAccessibilityId(IJILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IJLandroid/os/Bundle;)Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->findAccessibilityNodeInfosByText(IJLjava/lang/String;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->findAccessibilityNodeInfosByViewId(IJLjava/lang/String;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->findFocus(IJIILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->focusSearch(IJIILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->getMagnificationCenterX()F
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->getMagnificationCenterY()F
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->getMagnificationRegion()Landroid/graphics/Region;
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->getMagnificationScale()F
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->getWindow(I)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->getWindows()Ljava/util/List;
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->isAccessibilityButtonAvailable()Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->isFingerprintGestureDetectionAvailable()Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->performAccessibilityAction(IJILandroid/os/Bundle;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->performGlobalAction(I)Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->resetMagnification(Z)Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->sendGesture(ILandroid/content/pm/ParceledListSlice;)V
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->setMagnificationCallbackEnabled(Z)V
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->setMagnificationScaleAndCenter(FFFZ)Z
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->setOnKeyEventResult(ZI)V
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->setServiceInfo(Landroid/accessibilityservice/AccessibilityServiceInfo;)V
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->setSoftKeyboardCallbackEnabled(Z)V
+HPLandroid/accessibilityservice/IAccessibilityServiceConnection;->setSoftKeyboardShowMode(I)Z
+HPLandroid/accounts/AbstractAccountAuthenticator$Transport;-><init>(Landroid/accounts/AbstractAccountAuthenticator;)V
+HPLandroid/accounts/AbstractAccountAuthenticator$Transport;-><init>(Landroid/accounts/AbstractAccountAuthenticator;Landroid/accounts/AbstractAccountAuthenticator$Transport;)V
+HPLandroid/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
+HPLandroid/accounts/AbstractAccountAuthenticator;->-wrap0(Landroid/accounts/AbstractAccountAuthenticator;)V
+HPLandroid/accounts/AbstractAccountAuthenticator;-><init>(Landroid/content/Context;)V
+HPLandroid/accounts/AbstractAccountAuthenticator;->addAccount(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
+HPLandroid/accounts/AbstractAccountAuthenticator;->checkBinderPermission()V
+HPLandroid/accounts/AbstractAccountAuthenticator;->confirmCredentials(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Landroid/os/Bundle;)Landroid/os/Bundle;
+HPLandroid/accounts/AbstractAccountAuthenticator;->editProperties(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;)Landroid/os/Bundle;
+HPLandroid/accounts/AbstractAccountAuthenticator;->getAuthToken(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
+HPLandroid/accounts/AbstractAccountAuthenticator;->getAuthTokenLabel(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/accounts/AbstractAccountAuthenticator;->getIBinder()Landroid/os/IBinder;
+HPLandroid/accounts/AbstractAccountAuthenticator;->hasFeatures(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;[Ljava/lang/String;)Landroid/os/Bundle;
+HPLandroid/accounts/AbstractAccountAuthenticator;->updateCredentials(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
+HPLandroid/accounts/Account;->getAccessId()Ljava/lang/String;
+HPLandroid/accounts/AccountAndUser;-><init>(Landroid/accounts/Account;I)V
+HPLandroid/accounts/AccountAndUser;->equals(Ljava/lang/Object;)Z
+HPLandroid/accounts/AccountAndUser;->hashCode()I
+HPLandroid/accounts/AccountAndUser;->toString()Ljava/lang/String;
+HPLandroid/accounts/AccountAuthenticatorResponse$1;-><init>()V
+HPLandroid/accounts/AccountAuthenticatorResponse;-><init>(Landroid/accounts/IAccountAuthenticatorResponse;)V
+HPLandroid/accounts/AccountManager$Future2Task;->getResult(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HPLandroid/accounts/AccountManager;->blockingGetAuthToken(Landroid/accounts/Account;Ljava/lang/String;Z)Ljava/lang/String;
+HPLandroid/accounts/AccountManager;->getAccountsAsUser(I)[Landroid/accounts/Account;
+HPLandroid/accounts/AccountManager;->getPassword(Landroid/accounts/Account;)Ljava/lang/String;
+HPLandroid/accounts/AccountManager;->getUserData(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/accounts/AccountManager;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/UserHandle;)Z
+HPLandroid/accounts/AccountManager;->invalidateAuthToken(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/accounts/AccountManager;->peekAuthToken(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/accounts/AccountManager;->removeOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;)V
+HPLandroid/accounts/AccountManager;->setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/accounts/AccountManager;->setUserData(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/accounts/AccountManagerInternal$OnAppPermissionChangeListener;->onAppPermissionChanged(Landroid/accounts/Account;I)V
+HPLandroid/accounts/AccountManagerInternal;-><init>()V
+HPLandroid/accounts/AccountManagerInternal;->addOnAppPermissionChangeListener(Landroid/accounts/AccountManagerInternal$OnAppPermissionChangeListener;)V
+HPLandroid/accounts/AccountManagerInternal;->backupAccountAccessPermissions(I)[B
+HPLandroid/accounts/AccountManagerInternal;->hasAccountAccess(Landroid/accounts/Account;I)Z
+HPLandroid/accounts/AccountManagerInternal;->requestAccountAccess(Landroid/accounts/Account;Ljava/lang/String;ILandroid/os/RemoteCallback;)V
+HPLandroid/accounts/AccountManagerInternal;->restoreAccountAccessPermissions([BI)V
+HPLandroid/accounts/AuthenticatorDescription;-><init>(Ljava/lang/String;)V
+HPLandroid/accounts/AuthenticatorDescription;-><init>(Ljava/lang/String;Ljava/lang/String;IIIIZ)V
+HPLandroid/accounts/AuthenticatorDescription;->equals(Ljava/lang/Object;)Z
+HPLandroid/accounts/AuthenticatorDescription;->hashCode()I
+HPLandroid/accounts/AuthenticatorDescription;->newKey(Ljava/lang/String;)Landroid/accounts/AuthenticatorDescription;
+HPLandroid/accounts/AuthenticatorDescription;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/accounts/IAccountAuthenticator$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/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
+HPLandroid/accounts/IAccountAuthenticator$Stub;-><init>()V
+HPLandroid/accounts/IAccountAuthenticator$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/accounts/IAccountAuthenticator$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountAuthenticator;
+HPLandroid/accounts/IAccountAuthenticator$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/accounts/IAccountAuthenticator;->addAccount(Landroid/accounts/IAccountAuthenticatorResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/accounts/IAccountAuthenticator;->addAccountFromCredentials(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Landroid/os/Bundle;)V
+HPLandroid/accounts/IAccountAuthenticator;->confirmCredentials(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Landroid/os/Bundle;)V
+HPLandroid/accounts/IAccountAuthenticator;->editProperties(Landroid/accounts/IAccountAuthenticatorResponse;Ljava/lang/String;)V
+HPLandroid/accounts/IAccountAuthenticator;->finishSession(Landroid/accounts/IAccountAuthenticatorResponse;Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/accounts/IAccountAuthenticator;->getAccountCredentialsForCloning(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;)V
+HPLandroid/accounts/IAccountAuthenticator;->getAccountRemovalAllowed(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;)V
+HPLandroid/accounts/IAccountAuthenticator;->getAuthToken(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/accounts/IAccountAuthenticator;->getAuthTokenLabel(Landroid/accounts/IAccountAuthenticatorResponse;Ljava/lang/String;)V
+HPLandroid/accounts/IAccountAuthenticator;->hasFeatures(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;[Ljava/lang/String;)V
+HPLandroid/accounts/IAccountAuthenticator;->isCredentialsUpdateSuggested(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;)V
+HPLandroid/accounts/IAccountAuthenticator;->startAddAccountSession(Landroid/accounts/IAccountAuthenticatorResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/accounts/IAccountAuthenticator;->startUpdateCredentialsSession(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/accounts/IAccountAuthenticator;->updateCredentials(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/accounts/IAccountAuthenticatorResponse$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/accounts/IAccountAuthenticatorResponse$Stub$Proxy;->onResult(Landroid/os/Bundle;)V
+HPLandroid/accounts/IAccountAuthenticatorResponse$Stub;-><init>()V
+HPLandroid/accounts/IAccountAuthenticatorResponse$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/accounts/IAccountAuthenticatorResponse$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountAuthenticatorResponse;
+HPLandroid/accounts/IAccountAuthenticatorResponse$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/accounts/IAccountAuthenticatorResponse;->onError(ILjava/lang/String;)V
+HPLandroid/accounts/IAccountAuthenticatorResponse;->onRequestContinued()V
+HPLandroid/accounts/IAccountAuthenticatorResponse;->onResult(Landroid/os/Bundle;)V
+HPLandroid/accounts/IAccountManager$Stub$Proxy;->getPassword(Landroid/accounts/Account;)Ljava/lang/String;
+HPLandroid/accounts/IAccountManager$Stub$Proxy;->getUserData(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/accounts/IAccountManager$Stub$Proxy;->invalidateAuthToken(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/accounts/IAccountManager$Stub$Proxy;->peekAuthToken(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/accounts/IAccountManager$Stub$Proxy;->setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/accounts/IAccountManager$Stub$Proxy;->setUserData(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/accounts/IAccountManager$Stub$Proxy;->unregisterAccountListener([Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/accounts/IAccountManager$Stub;-><init>()V
+HPLandroid/accounts/IAccountManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/accounts/IAccountManagerResponse$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/accounts/IAccountManagerResponse$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/accounts/IAccountManagerResponse$Stub$Proxy;->onResult(Landroid/os/Bundle;)V
+HPLandroid/accounts/IAccountManagerResponse$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountManagerResponse;
+HPLandroid/animation/Animator$AnimatorConstantState;->getChangingConfigurations()I
+HPLandroid/animation/Animator;->addPauseListener(Landroid/animation/Animator$AnimatorPauseListener;)V
+HPLandroid/animation/Animator;->getListeners()Ljava/util/ArrayList;
+HPLandroid/animation/AnimatorSet;->skipToEndValue(Z)V
+HPLandroid/animation/FloatArrayEvaluator;-><init>([F)V
+HPLandroid/animation/FloatArrayEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroid/animation/FloatArrayEvaluator;->evaluate(F[F[F)[F
+HPLandroid/animation/Keyframe$IntKeyframe;->getValue()Ljava/lang/Object;
+HPLandroid/animation/Keyframe$IntKeyframe;->setValue(Ljava/lang/Object;)V
+HPLandroid/animation/KeyframeSet;->ofPath(Landroid/graphics/Path;)Landroid/animation/PathKeyframes;
+HPLandroid/animation/LayoutTransition$1;-><init>(Landroid/animation/LayoutTransition;Landroid/view/View;)V
+HPLandroid/animation/LayoutTransition$1;->onAnimationEnd(Landroid/animation/Animator;)V
+HPLandroid/animation/LayoutTransition$2;-><init>(Landroid/animation/LayoutTransition;Landroid/animation/Animator;IJLandroid/view/View;Landroid/view/ViewGroup;)V
+HPLandroid/animation/LayoutTransition$2;->onLayoutChange(Landroid/view/View;IIIIIIII)V
+HPLandroid/animation/LayoutTransition$3;-><init>(Landroid/animation/LayoutTransition;Landroid/view/ViewGroup;Landroid/view/View;ILandroid/view/View$OnLayoutChangeListener;)V
+HPLandroid/animation/LayoutTransition$3;->onAnimationEnd(Landroid/animation/Animator;)V
+HPLandroid/animation/LayoutTransition$3;->onAnimationStart(Landroid/animation/Animator;)V
+HPLandroid/animation/LayoutTransition$4;-><init>(Landroid/animation/LayoutTransition;Landroid/view/View;Landroid/view/ViewGroup;)V
+HPLandroid/animation/LayoutTransition$4;->onAnimationEnd(Landroid/animation/Animator;)V
+HPLandroid/animation/LayoutTransition$5;-><init>(Landroid/animation/LayoutTransition;Landroid/view/View;FLandroid/view/ViewGroup;)V
+HPLandroid/animation/LayoutTransition$5;->onAnimationEnd(Landroid/animation/Animator;)V
+HPLandroid/animation/LayoutTransition;->-get0(Landroid/animation/LayoutTransition;)Ljava/util/LinkedHashMap;
+HPLandroid/animation/LayoutTransition;->-get1(Landroid/animation/LayoutTransition;)Ljava/util/LinkedHashMap;
+HPLandroid/animation/LayoutTransition;->-get10(Landroid/animation/LayoutTransition;)J
+HPLandroid/animation/LayoutTransition;->-get11(Landroid/animation/LayoutTransition;)Landroid/animation/TimeInterpolator;
+HPLandroid/animation/LayoutTransition;->-get12(Landroid/animation/LayoutTransition;)J
+HPLandroid/animation/LayoutTransition;->-get13(Landroid/animation/LayoutTransition;)Ljava/util/ArrayList;
+HPLandroid/animation/LayoutTransition;->-get14(Landroid/animation/LayoutTransition;)Ljava/util/HashMap;
+HPLandroid/animation/LayoutTransition;->-get16()Landroid/animation/TimeInterpolator;
+HPLandroid/animation/LayoutTransition;->-get17()Landroid/animation/TimeInterpolator;
+HPLandroid/animation/LayoutTransition;->-get18(Landroid/animation/LayoutTransition;)J
+HPLandroid/animation/LayoutTransition;->-get2(Landroid/animation/LayoutTransition;)Ljava/util/LinkedHashMap;
+HPLandroid/animation/LayoutTransition;->-get3(Landroid/animation/LayoutTransition;)Ljava/util/HashMap;
+HPLandroid/animation/LayoutTransition;->-get7(Landroid/animation/LayoutTransition;)J
+HPLandroid/animation/LayoutTransition;->-get8(Landroid/animation/LayoutTransition;)J
+HPLandroid/animation/LayoutTransition;->-get9(Landroid/animation/LayoutTransition;)Landroid/animation/TimeInterpolator;
+HPLandroid/animation/LayoutTransition;->-set0(Landroid/animation/LayoutTransition;J)J
+HPLandroid/animation/LayoutTransition;->-wrap0(Landroid/animation/LayoutTransition;)Z
+HPLandroid/animation/LayoutTransition;->hasListeners()Z
+HPLandroid/animation/LayoutTransition;->isTransitionTypeEnabled(I)Z
+HPLandroid/animation/LayoutTransition;->runAppearingTransition(Landroid/view/ViewGroup;Landroid/view/View;)V
+HPLandroid/animation/LayoutTransition;->runDisappearingTransition(Landroid/view/ViewGroup;Landroid/view/View;)V
+HPLandroid/animation/LayoutTransition;->setupChangeAnimation(Landroid/view/ViewGroup;ILandroid/animation/Animator;JLandroid/view/View;)V
+HPLandroid/animation/LayoutTransition;->startChangingAnimations()V
+HPLandroid/animation/ObjectAnimator;->ofObject(Ljava/lang/Object;Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;
+HPLandroid/animation/ObjectAnimator;->setupEndValues()V
+HPLandroid/animation/ObjectAnimator;->setupStartValues()V
+HPLandroid/animation/PathKeyframes$SimpleKeyframes;->getKeyframes()Ljava/util/ArrayList;
+HPLandroid/animation/PathKeyframes$SimpleKeyframes;->getKeyframes()Ljava/util/List;
+HPLandroid/animation/PathKeyframes;->-get0()Ljava/util/ArrayList;
+HPLandroid/animation/PathKeyframes;-><init>(Landroid/graphics/Path;)V
+HPLandroid/animation/PathKeyframes;->getKeyframes()Ljava/util/ArrayList;
+HPLandroid/animation/PathKeyframes;->getKeyframes()Ljava/util/List;
+HPLandroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V
+HPLandroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;->setupSetter(Ljava/lang/Class;)V
+HPLandroid/animation/PropertyValuesHolder;->-wrap1(Ljava/lang/Class;Ljava/lang/String;)J
+HPLandroid/animation/PropertyValuesHolder;->-wrap7(Ljava/lang/Object;JI)V
+HPLandroid/animation/PropertyValuesHolder;->ofObject(Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;
+HPLandroid/animation/PropertyValuesHolder;->ofObject(Landroid/util/Property;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
+HPLandroid/animation/PropertyValuesHolder;->setupEndValue(Ljava/lang/Object;)V
+HPLandroid/animation/PropertyValuesHolder;->setupStartValue(Ljava/lang/Object;)V
+HPLandroid/animation/PropertyValuesHolder;->setupValue(Ljava/lang/Object;Landroid/animation/Keyframe;)V
+HPLandroid/animation/RevealAnimator;-><init>(Landroid/view/View;IIFF)V
+HPLandroid/animation/RevealAnimator;->onFinished()V
+HPLandroid/animation/StateListAnimator$StateListAnimatorConstantState;->getChangingConfigurations()I
+HPLandroid/animation/ValueAnimator;->areAnimatorsEnabled()Z
+HPLandroid/animation/ValueAnimator;->getAnimatedValue(Ljava/lang/String;)Ljava/lang/Object;
+HPLandroid/animation/ValueAnimator;->getCurrentPlayTime()J
+HPLandroid/animation/ValueAnimator;->ofObject(Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ValueAnimator;
+HPLandroid/animation/ValueAnimator;->ofPropertyValuesHolder([Landroid/animation/PropertyValuesHolder;)Landroid/animation/ValueAnimator;
+HPLandroid/app/-$Lambda$zUW-hE_1K7BzT3PNwqZSM6y8x_4$1;->$m$0()V
+HPLandroid/app/-$Lambda$zUW-hE_1K7BzT3PNwqZSM6y8x_4$1;-><init>(IILjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLandroid/app/-$Lambda$zUW-hE_1K7BzT3PNwqZSM6y8x_4$1;->run()V
+HPLandroid/app/ActionBar;->onDestroy()V
+HPLandroid/app/Activity$HostCallbacks;->onShouldSaveFragmentState(Landroid/app/Fragment;)Z
+HPLandroid/app/Activity$HostCallbacks;->onStartActivityAsUserFromFragment(Landroid/app/Fragment;Landroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)V
+HPLandroid/app/Activity$NonConfigurationInstances;-><init>()V
+HPLandroid/app/Activity;->canStartActivityForResult()Z
+HPLandroid/app/Activity;->cancelInputsAndStartExitTransition(Landroid/os/Bundle;)V
+HPLandroid/app/Activity;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HPLandroid/app/Activity;->finish()V
+HPLandroid/app/Activity;->finish(I)V
+HPLandroid/app/Activity;->finishAfterTransition()V
+HPLandroid/app/Activity;->finishAndRemoveTask()V
+HPLandroid/app/Activity;->getAutofillManager()Landroid/view/autofill/AutofillManager;
+HPLandroid/app/Activity;->getRequestedOrientation()I
+HPLandroid/app/Activity;->isInPictureInPictureMode()Z
+HPLandroid/app/Activity;->onBackPressed()V
+HPLandroid/app/Activity;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/app/Activity;->onDestroy()V
+HPLandroid/app/Activity;->onDetachedFromWindow()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
+HPLandroid/app/Activity;->onRestart()V
+HPLandroid/app/Activity;->onRetainNonConfigurationChildInstances()Ljava/util/HashMap;
+HPLandroid/app/Activity;->onTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/app/Activity;->overridePendingTransition(II)V
+HPLandroid/app/Activity;->performDestroy()V
+HPLandroid/app/Activity;->retainNonConfigurationInstances()Landroid/app/Activity$NonConfigurationInstances;
+HPLandroid/app/Activity;->setImmersive(Z)V
+HPLandroid/app/Activity;->setResult(I)V
+HPLandroid/app/Activity;->startActivity(Landroid/content/Intent;)V
+HPLandroid/app/Activity;->startActivity(Landroid/content/Intent;Landroid/os/Bundle;)V
+HPLandroid/app/Activity;->startActivityAsUserFromFragment(Landroid/app/Fragment;Landroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)V
+HPLandroid/app/Activity;->startActivityForResultAsUser(Landroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)V
+HPLandroid/app/Activity;->startActivityForResultAsUser(Landroid/content/Intent;ILandroid/os/UserHandle;)V
+HPLandroid/app/Activity;->startActivityForResultAsUser(Landroid/content/Intent;Ljava/lang/String;ILandroid/os/Bundle;Landroid/os/UserHandle;)V
+HPLandroid/app/ActivityManager$AppTask;->setExcludeFromRecents(Z)V
+HPLandroid/app/ActivityManager$MemoryInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/ActivityManager$OnUidImportanceListener;->onUidImportance(II)V
+HPLandroid/app/ActivityManager$RecentTaskInfo;-><init>()V
+HPLandroid/app/ActivityManager$RecentTaskInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/ActivityManager$RunningAppProcessInfo;-><init>(Ljava/lang/String;I[Ljava/lang/String;)V
+HPLandroid/app/ActivityManager$RunningAppProcessInfo;->importanceToProcState(I)I
+HPLandroid/app/ActivityManager$RunningAppProcessInfo;->procStateToImportance(I)I
+HPLandroid/app/ActivityManager$RunningAppProcessInfo;->procStateToImportanceForClient(ILandroid/content/Context;)I
+HPLandroid/app/ActivityManager$RunningAppProcessInfo;->procStateToImportanceForTargetSdk(II)I
+HPLandroid/app/ActivityManager$RunningAppProcessInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/ActivityManager$RunningServiceInfo$1;-><init>()V
+HPLandroid/app/ActivityManager$RunningServiceInfo;-><init>()V
+HPLandroid/app/ActivityManager$RunningServiceInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/ActivityManager$RunningTaskInfo;-><init>()V
+HPLandroid/app/ActivityManager$RunningTaskInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/ActivityManager$StackId;->allowTopTaskToReturnHome(I)Z
+HPLandroid/app/ActivityManager$StackId;->canReceiveKeys(I)Z
+HPLandroid/app/ActivityManager$StackId;->hasMovementAnimations(I)Z
+HPLandroid/app/ActivityManager$StackId;->isAlwaysOnTop(I)Z
+HPLandroid/app/ActivityManager$StackId;->isBackdropToTranslucentActivity(I)Z
+HPLandroid/app/ActivityManager$StackId;->isDynamicStack(I)Z
+HPLandroid/app/ActivityManager$StackId;->isHomeOrRecentsStack(I)Z
+HPLandroid/app/ActivityManager$StackId;->isResizeableByDockedStack(I)Z
+HPLandroid/app/ActivityManager$StackId;->isStackAffectedByDragResizing(I)Z
+HPLandroid/app/ActivityManager$StackId;->isStaticStack(I)Z
+HPLandroid/app/ActivityManager$StackId;->isTaskResizeAllowed(I)Z
+HPLandroid/app/ActivityManager$StackId;->keepFocusInStackIfPossible(I)Z
+HPLandroid/app/ActivityManager$StackId;->normallyFullscreenWindows(I)Z
+HPLandroid/app/ActivityManager$StackId;->persistTaskBounds(I)Z
+HPLandroid/app/ActivityManager$StackId;->tasksAreFloating(I)Z
+HPLandroid/app/ActivityManager$StackId;->useWindowFrameForBackdrop(I)Z
+HPLandroid/app/ActivityManager$StackId;->windowsAreScaleable(I)Z
+HPLandroid/app/ActivityManager$StackInfo$1;-><init>()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;
+HPLandroid/app/ActivityManager$StackInfo;-><init>()V
+HPLandroid/app/ActivityManager$StackInfo;-><init>(Landroid/os/Parcel;)V
+HPLandroid/app/ActivityManager$StackInfo;-><init>(Landroid/os/Parcel;Landroid/app/ActivityManager$StackInfo;)V
+HPLandroid/app/ActivityManager$StackInfo;->readFromParcel(Landroid/os/Parcel;)V
+HPLandroid/app/ActivityManager$StackInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/ActivityManager$TaskDescription;-><init>(Landroid/app/ActivityManager$TaskDescription;)V
+HPLandroid/app/ActivityManager$TaskDescription;->copyFrom(Landroid/app/ActivityManager$TaskDescription;)V
+HPLandroid/app/ActivityManager$TaskDescription;->getBackgroundColor()I
+HPLandroid/app/ActivityManager$TaskDescription;->getInMemoryIcon()Landroid/graphics/Bitmap;
+HPLandroid/app/ActivityManager$TaskDescription;->getLabel()Ljava/lang/String;
+HPLandroid/app/ActivityManager$TaskDescription;->getNavigationBarColor()I
+HPLandroid/app/ActivityManager$TaskDescription;->getStatusBarColor()I
+HPLandroid/app/ActivityManager$TaskDescription;->restoreFromXml(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/app/ActivityManager$TaskDescription;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLandroid/app/ActivityManager$TaskDescription;->setIconFilename(Ljava/lang/String;)V
+HPLandroid/app/ActivityManager$TaskDescription;->setLabel(Ljava/lang/String;)V
+HPLandroid/app/ActivityManager$TaskSnapshot$1;-><init>()V
+HPLandroid/app/ActivityManager$TaskSnapshot$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ActivityManager$TaskSnapshot;
+HPLandroid/app/ActivityManager$TaskSnapshot$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/app/ActivityManager$TaskSnapshot;-><init>(Landroid/graphics/GraphicBuffer;ILandroid/graphics/Rect;ZF)V
+HPLandroid/app/ActivityManager$TaskSnapshot;-><init>(Landroid/os/Parcel;)V
+HPLandroid/app/ActivityManager$TaskSnapshot;-><init>(Landroid/os/Parcel;Landroid/app/ActivityManager$TaskSnapshot;)V
+HPLandroid/app/ActivityManager$TaskSnapshot;->getContentInsets()Landroid/graphics/Rect;
+HPLandroid/app/ActivityManager$TaskSnapshot;->getOrientation()I
+HPLandroid/app/ActivityManager$TaskSnapshot;->getScale()F
+HPLandroid/app/ActivityManager$TaskSnapshot;->getSnapshot()Landroid/graphics/GraphicBuffer;
+HPLandroid/app/ActivityManager$TaskSnapshot;->isReducedResolution()Z
+HPLandroid/app/ActivityManager$TaskSnapshot;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/ActivityManager$TaskThumbnailInfo$1;-><init>()V
+HPLandroid/app/ActivityManager$TaskThumbnailInfo;-><init>()V
+HPLandroid/app/ActivityManager$TaskThumbnailInfo;->reset()V
+HPLandroid/app/ActivityManager$TaskThumbnailInfo;->restoreFromXml(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/app/ActivityManager$TaskThumbnailInfo;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLandroid/app/ActivityManager$UidObserver;-><init>(Landroid/app/ActivityManager$OnUidImportanceListener;Landroid/content/Context;)V
+HPLandroid/app/ActivityManager$UidObserver;->onUidGone(IZ)V
+HPLandroid/app/ActivityManager$UidObserver;->onUidStateChanged(IIJ)V
+HPLandroid/app/ActivityManager;->addOnUidImportanceListener(Landroid/app/ActivityManager$OnUidImportanceListener;I)V
+HPLandroid/app/ActivityManager;->checkComponentPermission(Ljava/lang/String;IIZ)I
+HPLandroid/app/ActivityManager;->checkUidPermission(Ljava/lang/String;I)I
+HPLandroid/app/ActivityManager;->getDefaultAppRecentsLimitStatic()I
+HPLandroid/app/ActivityManager;->getLockTaskModeState()I
+HPLandroid/app/ActivityManager;->getMaxAppRecentsLimitStatic()I
+HPLandroid/app/ActivityManager;->getPackageImportance(Ljava/lang/String;)I
+HPLandroid/app/ActivityManager;->handleIncomingUser(IIIZZLjava/lang/String;Ljava/lang/String;)I
+HPLandroid/app/ActivityManager;->isInLockTaskMode()Z
+HPLandroid/app/ActivityManager;->isProcStateBackground(I)Z
+HPLandroid/app/ActivityManager;->isStartResultSuccessful(I)Z
+HPLandroid/app/ActivityManager;->isSystemReady()Z
+HPLandroid/app/ActivityManager;->isUserRunning(I)Z
+HPLandroid/app/ActivityManager;->noteAlarmFinish(Landroid/app/PendingIntent;ILjava/lang/String;)V
+HPLandroid/app/ActivityManager;->noteAlarmStart(Landroid/app/PendingIntent;ILjava/lang/String;)V
+HPLandroid/app/ActivityManager;->noteWakeupAlarm(Landroid/app/PendingIntent;ILjava/lang/String;Ljava/lang/String;)V
+HPLandroid/app/ActivityManager;->supportsMultiWindow(Landroid/content/Context;)Z
+HPLandroid/app/ActivityManager;->supportsSplitScreenMultiWindow(Landroid/content/Context;)Z
+HPLandroid/app/ActivityManagerInternal$SleepToken;-><init>()V
+HPLandroid/app/ActivityManagerInternal$SleepToken;->release()V
+HPLandroid/app/ActivityOptions;-><init>()V
+HPLandroid/app/ActivityOptions;-><init>(Landroid/os/Bundle;)V
+HPLandroid/app/ActivityOptions;->abort(Landroid/app/ActivityOptions;)V
+HPLandroid/app/ActivityOptions;->disallowEnterPictureInPictureWhileLaunching()Z
+HPLandroid/app/ActivityOptions;->forTargetActivity()Landroid/app/ActivityOptions;
+HPLandroid/app/ActivityOptions;->getAnimationType()I
+HPLandroid/app/ActivityOptions;->getCustomEnterResId()I
+HPLandroid/app/ActivityOptions;->getCustomExitResId()I
+HPLandroid/app/ActivityOptions;->getHeight()I
+HPLandroid/app/ActivityOptions;->getLaunchBounds()Landroid/graphics/Rect;
+HPLandroid/app/ActivityOptions;->getLaunchDisplayId()I
+HPLandroid/app/ActivityOptions;->getLaunchStackId()I
+HPLandroid/app/ActivityOptions;->getLaunchTaskBehind()Z
+HPLandroid/app/ActivityOptions;->getLaunchTaskId()I
+HPLandroid/app/ActivityOptions;->getOnAnimationStartListener()Landroid/os/IRemoteCallback;
+HPLandroid/app/ActivityOptions;->getPackageName()Ljava/lang/String;
+HPLandroid/app/ActivityOptions;->getRotationAnimationHint()I
+HPLandroid/app/ActivityOptions;->getStartX()I
+HPLandroid/app/ActivityOptions;->getStartY()I
+HPLandroid/app/ActivityOptions;->getUsageTimeReport()Landroid/app/PendingIntent;
+HPLandroid/app/ActivityOptions;->getWidth()I
+HPLandroid/app/ActivityOptions;->makeClipRevealAnimation(Landroid/view/View;IIII)Landroid/app/ActivityOptions;
+HPLandroid/app/ActivityOptions;->popAppVerificationBundle()Landroid/os/Bundle;
+HPLandroid/app/ActivityOptions;->toBundle()Landroid/os/Bundle;
+HPLandroid/app/ActivityThread$ApplicationThread;->dispatchPackageBroadcast(I[Ljava/lang/String;)V
+HPLandroid/app/ActivityThread$ApplicationThread;->scheduleActivityConfigurationChanged(Landroid/os/IBinder;Landroid/content/res/Configuration;)V
+HPLandroid/app/ActivityThread$ApplicationThread;->scheduleApplicationInfoChanged(Landroid/content/pm/ApplicationInfo;)V
+HPLandroid/app/ActivityThread$ApplicationThread;->scheduleConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/app/ActivityThread$ApplicationThread;->scheduleDestroyActivity(Landroid/os/IBinder;ZI)V
+HPLandroid/app/ActivityThread$ApplicationThread;->scheduleInstallProvider(Landroid/content/pm/ProviderInfo;)V
+HPLandroid/app/ActivityThread$ApplicationThread;->scheduleNewIntent(Ljava/util/List;Landroid/os/IBinder;Z)V
+HPLandroid/app/ActivityThread$ApplicationThread;->scheduleRelaunchActivity(Landroid/os/IBinder;Ljava/util/List;Ljava/util/List;IZLandroid/content/res/Configuration;Landroid/content/res/Configuration;Z)V
+HPLandroid/app/ActivityThread$ApplicationThread;->scheduleResumeActivity(Landroid/os/IBinder;IZLandroid/os/Bundle;)V
+HPLandroid/app/ActivityThread$ApplicationThread;->scheduleWindowVisibility(Landroid/os/IBinder;Z)V
+HPLandroid/app/ActivityThread$GcIdler;->queueIdle()Z
+HPLandroid/app/ActivityThread$NewIntentData;-><init>()V
+HPLandroid/app/ActivityThread;->-wrap14(Landroid/app/ActivityThread;Landroid/app/ActivityThread$NewIntentData;)V
+HPLandroid/app/ActivityThread;->-wrap18(Landroid/app/ActivityThread;Landroid/app/ActivityThread$ActivityClientRecord;)V
+HPLandroid/app/ActivityThread;->-wrap29(Landroid/app/ActivityThread;Landroid/os/IBinder;Z)V
+HPLandroid/app/ActivityThread;->-wrap34(Landroid/app/ActivityThread;ILjava/lang/Object;II)V
+HPLandroid/app/ActivityThread;->-wrap5(Landroid/app/ActivityThread;Landroid/os/IBinder;ZIZ)V
+HPLandroid/app/ActivityThread;->applyConfigurationToResources(Landroid/content/res/Configuration;)V
+HPLandroid/app/ActivityThread;->createNewConfigAndUpdateIfNotNull(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)Landroid/content/res/Configuration;
+HPLandroid/app/ActivityThread;->doGcIfNeeded()V
+HPLandroid/app/ActivityThread;->handleApplicationInfoChanged(Landroid/content/pm/ApplicationInfo;)V
+HPLandroid/app/ActivityThread;->handleDestroyActivity(Landroid/os/IBinder;ZIZ)V
+HPLandroid/app/ActivityThread;->handleDispatchPackageBroadcast(I[Ljava/lang/String;)V
+HPLandroid/app/ActivityThread;->handleInstallProvider(Landroid/content/pm/ProviderInfo;)V
+HPLandroid/app/ActivityThread;->handleNewIntent(Landroid/app/ActivityThread$NewIntentData;)V
+HPLandroid/app/ActivityThread;->handleRelaunchActivity(Landroid/app/ActivityThread$ActivityClientRecord;)V
+HPLandroid/app/ActivityThread;->handleWindowVisibility(Landroid/os/IBinder;Z)V
+HPLandroid/app/ActivityThread;->installSystemApplicationInfo(Landroid/content/pm/ApplicationInfo;Ljava/lang/ClassLoader;)V
+HPLandroid/app/ActivityThread;->installSystemProviders(Ljava/util/List;)V
+HPLandroid/app/ActivityThread;->performConfigurationChanged(Landroid/content/ComponentCallbacks2;Landroid/content/res/Configuration;)V
+HPLandroid/app/ActivityThread;->performDestroyActivity(Landroid/os/IBinder;ZIZ)Landroid/app/ActivityThread$ActivityClientRecord;
+HPLandroid/app/ActivityThread;->performNewIntents(Landroid/os/IBinder;Ljava/util/List;Z)V
+HPLandroid/app/ActivityThread;->requestRelaunchActivity(Landroid/os/IBinder;Ljava/util/List;Ljava/util/List;IZLandroid/content/res/Configuration;Landroid/content/res/Configuration;ZZ)V
+HPLandroid/app/ActivityThread;->requestRelaunchAllActivities()V
+HPLandroid/app/ActivityThread;->scheduleGcIdler()V
+HPLandroid/app/ActivityThread;->sendMessage(ILjava/lang/Object;II)V
+HPLandroid/app/ActivityTransitionState;->startExitBackTransition(Landroid/app/Activity;)Z
+HPLandroid/app/AlarmManager$ListenerWrapper;-><init>(Landroid/app/AlarmManager;Landroid/app/AlarmManager$OnAlarmListener;)V
+HPLandroid/app/AlarmManager$ListenerWrapper;->cancel()V
+HPLandroid/app/AlarmManager$ListenerWrapper;->doAlarm(Landroid/app/IAlarmCompleteListener;)V
+HPLandroid/app/AlarmManager$ListenerWrapper;->run()V
+HPLandroid/app/AlarmManager$ListenerWrapper;->setHandler(Landroid/os/Handler;)V
+HPLandroid/app/AlarmManager;->-get0(Landroid/app/AlarmManager;)Landroid/app/IAlarmManager;
+HPLandroid/app/AlarmManager;->-get1()Landroid/util/ArrayMap;
+HPLandroid/app/AlarmManager;->cancel(Landroid/app/AlarmManager$OnAlarmListener;)V
+HPLandroid/app/AlarmManager;->set(IJJJLandroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;Landroid/os/WorkSource;)V
+HPLandroid/app/AlarmManager;->set(IJJJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;Landroid/os/WorkSource;)V
+HPLandroid/app/AlarmManager;->set(IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V
+HPLandroid/app/AlarmManager;->setAndAllowWhileIdle(IJLandroid/app/PendingIntent;)V
+HPLandroid/app/AlarmManager;->setExact(IJLandroid/app/PendingIntent;)V
+HPLandroid/app/AlarmManager;->setExact(IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V
+HPLandroid/app/AlarmManager;->setWindow(IJJLandroid/app/PendingIntent;)V
+HPLandroid/app/AlertDialog$Builder;->setPositiveButton(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;
+HPLandroid/app/AlertDialog;->onCreate(Landroid/os/Bundle;)V
+HPLandroid/app/AppOpsManager$OnOpChangedInternalListener;-><init>()V
+HPLandroid/app/AppOpsManager$OpEntry;-><init>(IIJJIILjava/lang/String;)V
+HPLandroid/app/AppOpsManager$OpEntry;->getDuration()I
+HPLandroid/app/AppOpsManager$OpEntry;->getMode()I
+HPLandroid/app/AppOpsManager$OpEntry;->getProxyPackageName()Ljava/lang/String;
+HPLandroid/app/AppOpsManager$OpEntry;->getProxyUid()I
+HPLandroid/app/AppOpsManager$OpEntry;->getRejectTime()J
+HPLandroid/app/AppOpsManager$OpEntry;->getTime()J
+HPLandroid/app/AppOpsManager$OpEntry;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/AppOpsManager$PackageOps;-><init>(Ljava/lang/String;ILjava/util/List;)V
+HPLandroid/app/AppOpsManager$PackageOps;->getPackageName()Ljava/lang/String;
+HPLandroid/app/AppOpsManager$PackageOps;->getUid()I
+HPLandroid/app/AppOpsManager$PackageOps;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/AppOpsManager;->finishOp(IILjava/lang/String;)V
+HPLandroid/app/AppOpsManager;->finishOp(Ljava/lang/String;ILjava/lang/String;)V
+HPLandroid/app/AppOpsManager;->isOperationActive(IILjava/lang/String;)Z
+HPLandroid/app/AppOpsManager;->noteOp(Ljava/lang/String;ILjava/lang/String;)I
+HPLandroid/app/AppOpsManager;->noteOpNoThrow(IILjava/lang/String;)I
+HPLandroid/app/AppOpsManager;->noteOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I
+HPLandroid/app/AppOpsManager;->opToRestriction(I)Ljava/lang/String;
+HPLandroid/app/AppOpsManager;->setRestriction(III[Ljava/lang/String;)V
+HPLandroid/app/AppOpsManager;->setUidMode(III)V
+HPLandroid/app/AppOpsManager;->stopWatchingMode(Landroid/app/AppOpsManager$OnOpChangedListener;)V
+HPLandroid/app/Application;->dispatchActivityDestroyed(Landroid/app/Activity;)V
+HPLandroid/app/Application;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/app/Application;->unregisterComponentCallbacks(Landroid/content/ComponentCallbacks;)V
+HPLandroid/app/ApplicationErrorReport$ParcelableCrashInfo$1;-><init>()V
+HPLandroid/app/ApplicationErrorReport$ParcelableCrashInfo;-><init>(Ljava/lang/Throwable;)V
+HPLandroid/app/ApplicationPackageManager;->canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String;
+HPLandroid/app/ApplicationPackageManager;->checkSignatures(II)I
+HPLandroid/app/ApplicationPackageManager;->getChangedPackages(I)Landroid/content/pm/ChangedPackages;
+HPLandroid/app/ApplicationPackageManager;->getInstalledApplications(I)Ljava/util/List;
+HPLandroid/app/ApplicationPackageManager;->getInstalledApplicationsAsUser(II)Ljava/util/List;
+HPLandroid/app/ApplicationPackageManager;->getPackageSizeInfoAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageStatsObserver;)V
+HPLandroid/app/ApplicationPackageManager;->getPackageUidAsUser(Ljava/lang/String;I)I
+HPLandroid/app/ApplicationPackageManager;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)I
+HPLandroid/app/ApplicationPackageManager;->getPermissionInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;
+HPLandroid/app/ApplicationPackageManager;->getServicesSystemSharedLibraryPackageName()Ljava/lang/String;
+HPLandroid/app/ApplicationPackageManager;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)V
+HPLandroid/app/ApplicationPackageManager;->handlePackageBroadcast(I[Ljava/lang/String;Z)V
+HPLandroid/app/ApplicationPackageManager;->isInstantApp()Z
+HPLandroid/app/ApplicationPackageManager;->isInstantApp(Ljava/lang/String;)Z
+HPLandroid/app/ApplicationPackageManager;->queryIntentActivityOptions(Landroid/content/ComponentName;[Landroid/content/Intent;Landroid/content/Intent;I)Ljava/util/List;
+HPLandroid/app/ApplicationPackageManager;->removeOnPermissionsChangeListener(Landroid/content/pm/PackageManager$OnPermissionsChangedListener;)V
+HPLandroid/app/ApplicationPackageManager;->replacePreferredActivityAsUser(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V
+HPLandroid/app/ApplicationPackageManager;->setApplicationEnabledSetting(Ljava/lang/String;II)V
+HPLandroid/app/AutomaticZenRule$1;-><init>()V
+HPLandroid/app/AutomaticZenRule;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Landroid/net/Uri;IZ)V
+HPLandroid/app/AutomaticZenRule;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Landroid/net/Uri;IZJ)V
+HPLandroid/app/AutomaticZenRule;->isEnabled()Z
+HPLandroid/app/BackStackRecord;->hide(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;
+HPLandroid/app/BackStackRecord;->remove(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;
+HPLandroid/app/BackStackRecord;->setBreadCrumbTitle(Ljava/lang/CharSequence;)Landroid/app/FragmentTransaction;
+HPLandroid/app/BroadcastOptions;-><init>()V
+HPLandroid/app/BroadcastOptions;-><init>(Landroid/os/Bundle;)V
+HPLandroid/app/BroadcastOptions;->getMaxManifestReceiverApiLevel()I
+HPLandroid/app/BroadcastOptions;->getMinManifestReceiverApiLevel()I
+HPLandroid/app/BroadcastOptions;->getTemporaryAppWhitelistDuration()J
+HPLandroid/app/BroadcastOptions;->makeBasic()Landroid/app/BroadcastOptions;
+HPLandroid/app/BroadcastOptions;->setMaxManifestReceiverApiLevel(I)V
+HPLandroid/app/BroadcastOptions;->setTemporaryAppWhitelistDuration(J)V
+HPLandroid/app/BroadcastOptions;->toBundle()Landroid/os/Bundle;
+HPLandroid/app/ContextImpl;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/Handler;Landroid/os/UserHandle;)Z
+HPLandroid/app/ContextImpl;->checkCallingPermission(Ljava/lang/String;)I
+HPLandroid/app/ContextImpl;->deleteSharedPreferences(Ljava/lang/String;)Z
+HPLandroid/app/ContextImpl;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/app/ContextImpl;->enforcePermission(Ljava/lang/String;IILjava/lang/String;)V
+HPLandroid/app/ContextImpl;->getMainThreadHandler()Landroid/os/Handler;
+HPLandroid/app/ContextImpl;->installSystemApplicationInfo(Landroid/content/pm/ApplicationInfo;Ljava/lang/ClassLoader;)V
+HPLandroid/app/ContextImpl;->removeStickyBroadcast(Landroid/content/Intent;)V
+HPLandroid/app/ContextImpl;->sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;)V
+HPLandroid/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
+HPLandroid/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/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
+HPLandroid/app/ContextImpl;->sendStickyBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/os/Bundle;)V
+HPLandroid/app/ContextImpl;->startActivityAsUser(Landroid/content/Intent;Landroid/os/Bundle;Landroid/os/UserHandle;)V
+HPLandroid/app/ContextImpl;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
+HPLandroid/app/ContextImpl;->startServiceAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/ComponentName;
+HPLandroid/app/Dialog$ListenersHandler;->handleMessage(Landroid/os/Message;)V
+HPLandroid/app/Dialog;->dismiss()V
+HPLandroid/app/Dialog;->dismissDialog()V
+HPLandroid/app/Dialog;->dispatchOnCreate(Landroid/os/Bundle;)V
+HPLandroid/app/Dialog;->dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z
+HPLandroid/app/Dialog;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/app/Dialog;->hide()V
+HPLandroid/app/Dialog;->isShowing()Z
+HPLandroid/app/Dialog;->onAttachedToWindow()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;->onWindowFocusChanged(Z)V
+HPLandroid/app/Dialog;->sendDismissMessage()V
+HPLandroid/app/Dialog;->sendShowMessage()V
+HPLandroid/app/Dialog;->show()V
+HPLandroid/app/Fragment;->getStateAfterAnimating()I
+HPLandroid/app/Fragment;->getTag()Ljava/lang/String;
+HPLandroid/app/Fragment;->initState()V
+HPLandroid/app/Fragment;->isHideReplaced()Z
+HPLandroid/app/Fragment;->isInBackStack()Z
+HPLandroid/app/Fragment;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/app/Fragment;->onDestroy()V
+HPLandroid/app/Fragment;->onDestroyView()V
+HPLandroid/app/Fragment;->onDetach()V
+HPLandroid/app/Fragment;->onHiddenChanged(Z)V
+HPLandroid/app/Fragment;->performConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/app/Fragment;->performDestroy()V
+HPLandroid/app/Fragment;->performDestroyView()V
+HPLandroid/app/Fragment;->performDetach()V
+HPLandroid/app/Fragment;->setAnimatingAway(Landroid/animation/Animator;)V
+HPLandroid/app/Fragment;->setStateAfterAnimating(I)V
+HPLandroid/app/Fragment;->startActivityForResultAsUser(Landroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)V
+HPLandroid/app/FragmentController;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/app/FragmentController;->dispatchDestroy()V
+HPLandroid/app/FragmentController;->doLoaderDestroy()V
+HPLandroid/app/FragmentController;->restoreLoaderNonConfig(Landroid/util/ArrayMap;)V
+HPLandroid/app/FragmentController;->retainLoaderNonConfig()Landroid/util/ArrayMap;
+HPLandroid/app/FragmentController;->retainNestedNonConfig()Landroid/app/FragmentManagerNonConfig;
+HPLandroid/app/FragmentHostCallback;->doLoaderDestroy()V
+HPLandroid/app/FragmentHostCallback;->inactivateFragment(Ljava/lang/String;)V
+HPLandroid/app/FragmentHostCallback;->restoreLoaderNonConfig(Landroid/util/ArrayMap;)V
+HPLandroid/app/FragmentHostCallback;->retainLoaderNonConfig()Landroid/util/ArrayMap;
+HPLandroid/app/FragmentManager$FragmentLifecycleCallbacks;->onFragmentActivityCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V
+HPLandroid/app/FragmentManager$FragmentLifecycleCallbacks;->onFragmentAttached(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/content/Context;)V
+HPLandroid/app/FragmentManager$FragmentLifecycleCallbacks;->onFragmentCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V
+HPLandroid/app/FragmentManager$FragmentLifecycleCallbacks;->onFragmentPreAttached(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/content/Context;)V
+HPLandroid/app/FragmentManager$FragmentLifecycleCallbacks;->onFragmentPreCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V
+HPLandroid/app/FragmentManager$FragmentLifecycleCallbacks;->onFragmentResumed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V
+HPLandroid/app/FragmentManager$FragmentLifecycleCallbacks;->onFragmentStarted(Landroid/app/FragmentManager;Landroid/app/Fragment;)V
+HPLandroid/app/FragmentManagerImpl$2;-><init>(Landroid/app/FragmentManagerImpl;Landroid/view/ViewGroup;Landroid/view/View;Landroid/app/Fragment;)V
+HPLandroid/app/FragmentManagerImpl$2;->onAnimationEnd(Landroid/animation/Animator;)V
+HPLandroid/app/FragmentManagerImpl;->completeShowHideFragment(Landroid/app/Fragment;)V
+HPLandroid/app/FragmentManagerImpl;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/app/FragmentManagerImpl;->dispatchDestroy()V
+HPLandroid/app/FragmentManagerImpl;->dispatchDestroyView()V
+HPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentDestroyed(Landroid/app/Fragment;Z)V
+HPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentDetached(Landroid/app/Fragment;Z)V
+HPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentViewDestroyed(Landroid/app/Fragment;Z)V
+HPLandroid/app/FragmentManagerImpl;->hideFragment(Landroid/app/Fragment;)V
+HPLandroid/app/FragmentManagerImpl;->isStateSaved()Z
+HPLandroid/app/FragmentManagerImpl;->makeInactive(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
+HPLandroid/app/FragmentManagerImpl;->removeFragment(Landroid/app/Fragment;)V
+HPLandroid/app/FragmentManagerImpl;->retainNonConfig()Landroid/app/FragmentManagerNonConfig;
+HPLandroid/app/FragmentManagerImpl;->setRetaining(Landroid/app/FragmentManagerNonConfig;)V
+HPLandroid/app/FragmentManagerNonConfig;-><init>(Ljava/util/List;Ljava/util/List;)V
+HPLandroid/app/FragmentTransition;->captureInSharedElements(Landroid/util/ArrayMap;Landroid/transition/TransitionSet;Landroid/app/FragmentTransition$FragmentContainerTransition;)Landroid/util/ArrayMap;
+HPLandroid/app/FragmentTransition;->captureOutSharedElements(Landroid/util/ArrayMap;Landroid/transition/TransitionSet;Landroid/app/FragmentTransition$FragmentContainerTransition;)Landroid/util/ArrayMap;
+HPLandroid/app/IActivityManager$Stub$Proxy;->activityDestroyed(Landroid/os/IBinder;)V
+HPLandroid/app/IActivityManager$Stub$Proxy;->activityRelaunched(Landroid/os/IBinder;)V
+HPLandroid/app/IActivityManager$Stub$Proxy;->finishActivity(Landroid/os/IBinder;ILandroid/content/Intent;I)Z
+HPLandroid/app/IActivityManager$Stub$Proxy;->getLockTaskModeState()I
+HPLandroid/app/IActivityManager$Stub$Proxy;->getPackageForIntentSender(Landroid/content/IIntentSender;)Ljava/lang/String;
+HPLandroid/app/IActivityManager$Stub$Proxy;->getPackageProcessState(Ljava/lang/String;Ljava/lang/String;)I
+HPLandroid/app/IActivityManager$Stub$Proxy;->getRequestedOrientation(Landroid/os/IBinder;)I
+HPLandroid/app/IActivityManager$Stub$Proxy;->getTaskDescriptionIcon(Ljava/lang/String;I)Landroid/graphics/Bitmap;
+HPLandroid/app/IActivityManager$Stub$Proxy;->getTaskSnapshot(IZ)Landroid/app/ActivityManager$TaskSnapshot;
+HPLandroid/app/IActivityManager$Stub$Proxy;->getUidForIntentSender(Landroid/content/IIntentSender;)I
+HPLandroid/app/IActivityManager$Stub$Proxy;->isInLockTaskMode()Z
+HPLandroid/app/IActivityManager$Stub$Proxy;->isInPictureInPictureMode(Landroid/os/IBinder;)Z
+HPLandroid/app/IActivityManager$Stub$Proxy;->isUserRunning(II)Z
+HPLandroid/app/IActivityManager$Stub$Proxy;->keyguardGoingAway(I)V
+HPLandroid/app/IActivityManager$Stub$Proxy;->overridePendingTransition(Landroid/os/IBinder;Ljava/lang/String;II)V
+HPLandroid/app/IActivityManager$Stub$Proxy;->registerUidObserver(Landroid/app/IUidObserver;IILjava/lang/String;)V
+HPLandroid/app/IActivityManager$Stub$Proxy;->setHasTopUi(Z)V
+HPLandroid/app/IActivityManager$Stub$Proxy;->setImmersive(Landroid/os/IBinder;Z)V
+HPLandroid/app/IActivityManager$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/IActivityManager$Stub$Proxy;->unbroadcastIntent(Landroid/app/IApplicationThread;Landroid/content/Intent;I)V
+HPLandroid/app/IActivityManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/IAlarmCompleteListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/IAlarmCompleteListener$Stub$Proxy;->alarmComplete(Landroid/os/IBinder;)V
+HPLandroid/app/IAlarmCompleteListener$Stub;-><init>()V
+HPLandroid/app/IAlarmCompleteListener$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/IAlarmCompleteListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IAlarmCompleteListener;
+HPLandroid/app/IAlarmCompleteListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/IAlarmCompleteListener;->alarmComplete(Landroid/os/IBinder;)V
+HPLandroid/app/IAlarmListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/IAlarmListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/IAlarmListener$Stub$Proxy;->doAlarm(Landroid/app/IAlarmCompleteListener;)V
+HPLandroid/app/IAlarmListener$Stub;-><init>()V
+HPLandroid/app/IAlarmListener$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/IAlarmListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IAlarmListener;
+HPLandroid/app/IAlarmListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/IAlarmListener;->doAlarm(Landroid/app/IAlarmCompleteListener;)V
+HPLandroid/app/IAlarmManager$Stub$Proxy;->setTime(J)Z
+HPLandroid/app/IAlarmManager$Stub;-><init>()V
+HPLandroid/app/IAlarmManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/IAppTask$Stub$Proxy;->setExcludeFromRecents(Z)V
+HPLandroid/app/IAppTask$Stub;-><init>()V
+HPLandroid/app/IAppTask$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/IAppTask$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/IApplicationThread$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/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;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->clearDnsCache()V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->dispatchPackageBroadcast(I[Ljava/lang/String;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->dumpGfxInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->dumpHeap(ZZZLjava/lang/String;Landroid/os/ParcelFileDescriptor;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->dumpMemInfo(Landroid/os/ParcelFileDescriptor;Landroid/os/Debug$MemoryInfo;ZZZZZ[Ljava/lang/String;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->requestAssistContextExtras(Landroid/os/IBinder;Landroid/os/IBinder;III)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleActivityConfigurationChanged(Landroid/os/IBinder;Landroid/content/res/Configuration;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleBindService(Landroid/os/IBinder;Landroid/content/Intent;ZI)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleCreateService(Landroid/os/IBinder;Landroid/content/pm/ServiceInfo;Landroid/content/res/CompatibilityInfo;I)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleDestroyActivity(Landroid/os/IBinder;ZI)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleEnterAnimationComplete(Landroid/os/IBinder;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleInstallProvider(Landroid/content/pm/ProviderInfo;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleLaunchActivity(Landroid/content/Intent;Landroid/os/IBinder;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;ZZLandroid/app/ProfilerInfo;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleNewIntent(Ljava/util/List;Landroid/os/IBinder;Z)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->schedulePauseActivity(Landroid/os/IBinder;ZZIZ)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
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleRelaunchActivity(Landroid/os/IBinder;Ljava/util/List;Ljava/util/List;IZLandroid/content/res/Configuration;Landroid/content/res/Configuration;Z)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleResumeActivity(Landroid/os/IBinder;IZLandroid/os/Bundle;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleSendResult(Landroid/os/IBinder;Ljava/util/List;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleServiceArgs(Landroid/os/IBinder;Landroid/content/pm/ParceledListSlice;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleSleeping(Landroid/os/IBinder;Z)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleStopActivity(Landroid/os/IBinder;ZI)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleStopService(Landroid/os/IBinder;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleTrimMemory(I)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleUnbindService(Landroid/os/IBinder;Landroid/content/Intent;)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->scheduleWindowVisibility(Landroid/os/IBinder;Z)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->setProcessState(I)V
+HPLandroid/app/IApplicationThread$Stub$Proxy;->unstableProviderDied(Landroid/os/IBinder;)V
+HPLandroid/app/IApplicationThread$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IApplicationThread;
+HPLandroid/app/IInstantAppResolver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/IInstantAppResolver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/IInstantAppResolver$Stub$Proxy;->getInstantAppResolveInfoList([ILjava/lang/String;ILandroid/os/IRemoteCallback;)V
+HPLandroid/app/IInstantAppResolver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IInstantAppResolver;
+HPLandroid/app/IInstantAppResolver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/IInstrumentationWatcher$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/IInstrumentationWatcher$Stub$Proxy;->instrumentationFinished(Landroid/content/ComponentName;ILandroid/os/Bundle;)V
+HPLandroid/app/INotificationManager$Stub$Proxy;->enqueueNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;I)V
+HPLandroid/app/INotificationManager$Stub$Proxy;->getZenRules()Ljava/util/List;
+HPLandroid/app/INotificationManager$Stub$Proxy;->setNotificationsShownFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;)V
+HPLandroid/app/INotificationManager$Stub;-><init>()V
+HPLandroid/app/INotificationManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/IProcessObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/IProcessObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/IProcessObserver$Stub$Proxy;->onForegroundActivitiesChanged(IIZ)V
+HPLandroid/app/IProcessObserver$Stub$Proxy;->onProcessDied(II)V
+HPLandroid/app/IProcessObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IProcessObserver;
+HPLandroid/app/IProcessObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/ISearchManager$Stub;-><init>()V
+HPLandroid/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
+HPLandroid/app/IServiceConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IServiceConnection;
+HPLandroid/app/ITaskStackListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/ITaskStackListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/ITaskStackListener$Stub$Proxy;->onActivityRequestedOrientationChanged(II)V
+HPLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskCreated(ILandroid/content/ComponentName;)V
+HPLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskDescriptionChanged(ILandroid/app/ActivityManager$TaskDescription;)V
+HPLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskMovedToFront(I)V
+HPLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskRemovalStarted(I)V
+HPLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskRemoved(I)V
+HPLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskSnapshotChanged(ILandroid/app/ActivityManager$TaskSnapshot;)V
+HPLandroid/app/ITaskStackListener$Stub$Proxy;->onTaskStackChanged()V
+HPLandroid/app/ITaskStackListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/ITaskStackListener;
+HPLandroid/app/ITransientNotification$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/ITransientNotification$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/ITransientNotification$Stub$Proxy;->hide()V
+HPLandroid/app/ITransientNotification$Stub$Proxy;->show(Landroid/os/IBinder;)V
+HPLandroid/app/ITransientNotification$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/ITransientNotification;
+HPLandroid/app/IUiAutomationConnection$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/IUiAutomationConnection$Stub$Proxy;->connect(Landroid/accessibilityservice/IAccessibilityServiceClient;I)V
+HPLandroid/app/IUiAutomationConnection$Stub$Proxy;->executeShellCommand(Ljava/lang/String;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;)V
+HPLandroid/app/IUiAutomationConnection$Stub$Proxy;->injectInputEvent(Landroid/view/InputEvent;Z)Z
+HPLandroid/app/IUiAutomationConnection$Stub$Proxy;->shutdown()V
+HPLandroid/app/IUiModeManager$Stub;-><init>()V
+HPLandroid/app/IUiModeManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/IUidObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/IUidObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/IUidObserver$Stub$Proxy;->onUidGone(IZ)V
+HPLandroid/app/IUidObserver$Stub$Proxy;->onUidStateChanged(IIJ)V
+HPLandroid/app/IUidObserver$Stub;-><init>()V
+HPLandroid/app/IUidObserver$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/IUidObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IUidObserver;
+HPLandroid/app/IUidObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/IUidObserver;->onUidActive(I)V
+HPLandroid/app/IUidObserver;->onUidCachedChanged(IZ)V
+HPLandroid/app/IUidObserver;->onUidGone(IZ)V
+HPLandroid/app/IUidObserver;->onUidIdle(IZ)V
+HPLandroid/app/IUidObserver;->onUidStateChanged(IIJ)V
+HPLandroid/app/IUserSwitchObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/IUserSwitchObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/IUserSwitchObserver$Stub$Proxy;->onLockedBootComplete(I)V
+HPLandroid/app/IUserSwitchObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IUserSwitchObserver;
+HPLandroid/app/IUserSwitchObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/IWallpaperManager$Stub$Proxy;->isSetWallpaperAllowed(Ljava/lang/String;)Z
+HPLandroid/app/IWallpaperManager$Stub;-><init>()V
+HPLandroid/app/IWallpaperManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/IWallpaperManagerCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/IWallpaperManagerCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/IWallpaperManagerCallback$Stub$Proxy;->onWallpaperColorsChanged(Landroid/app/WallpaperColors;II)V
+HPLandroid/app/IWallpaperManagerCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IWallpaperManagerCallback;
+HPLandroid/app/IWallpaperManagerCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/InstantAppResolverService$1;->getInstantAppResolveInfoList([ILjava/lang/String;ILandroid/os/IRemoteCallback;)V
+HPLandroid/app/InstantAppResolverService$InstantAppResolutionCallback;-><init>(ILandroid/os/IRemoteCallback;)V
+HPLandroid/app/InstantAppResolverService$InstantAppResolutionCallback;->onInstantAppResolveInfo(Ljava/util/List;)V
+HPLandroid/app/InstantAppResolverService$ServiceHandler;->handleMessage(Landroid/os/Message;)V
+HPLandroid/app/InstantAppResolverService;->-get0()Z
+HPLandroid/app/InstantAppResolverService;->_onGetInstantAppResolveInfo([ILjava/lang/String;Landroid/app/InstantAppResolverService$InstantAppResolutionCallback;)V
+HPLandroid/app/Instrumentation;->callActivityOnDestroy(Landroid/app/Activity;)V
+HPLandroid/app/Instrumentation;->callActivityOnRestart(Landroid/app/Activity;)V
+HPLandroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Ljava/lang/String;Landroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/Instrumentation$ActivityResult;
+HPLandroid/app/Instrumentation;->getUiAutomation(I)Landroid/app/UiAutomation;
+HPLandroid/app/IntentService;->setIntentRedelivery(Z)V
+HPLandroid/app/JobSchedulerImpl;->enqueue(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I
+HPLandroid/app/JobSchedulerImpl;->scheduleAsPackage(Landroid/app/job/JobInfo;Ljava/lang/String;ILjava/lang/String;)I
+HPLandroid/app/LoadedApk$ServiceDispatcher$DeathMonitor;->binderDied()V
+HPLandroid/app/LoadedApk$ServiceDispatcher;->death(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLandroid/app/LoadedApk$ServiceDispatcher;->doDeath(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLandroid/app/LoadedApk;->installSystemApplicationInfo(Landroid/content/pm/ApplicationInfo;Ljava/lang/ClassLoader;)V
+HPLandroid/app/LoadedApk;->makePaths(Landroid/app/ActivityThread;Landroid/content/pm/ApplicationInfo;Ljava/util/List;)V
+HPLandroid/app/LoadedApk;->updateApplicationInfo(Landroid/content/pm/ApplicationInfo;Ljava/util/List;)V
+HPLandroid/app/LoaderManagerImpl$LoaderInfo;->cancel()Z
+HPLandroid/app/LoaderManagerImpl;->doDestroy()V
+HPLandroid/app/LoaderManagerImpl;->doReportNextStart()V
+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;
+HPLandroid/app/Notification$Action;->-get1(Landroid/app/Notification$Action;)[Landroid/app/RemoteInput;
+HPLandroid/app/Notification$Action;-><init>(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)V
+HPLandroid/app/Notification$Action;-><init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Landroid/app/PendingIntent;Landroid/os/Bundle;[Landroid/app/RemoteInput;Z)V
+HPLandroid/app/Notification$Action;-><init>(Landroid/os/Parcel;)V
+HPLandroid/app/Notification$Action;-><init>(Landroid/os/Parcel;Landroid/app/Notification$Action;)V
+HPLandroid/app/Notification$Action;->clone()Landroid/app/Notification$Action;
+HPLandroid/app/Notification$Action;->getAllowGeneratedReplies()Z
+HPLandroid/app/Notification$Action;->getIcon()Landroid/graphics/drawable/Icon;
+HPLandroid/app/Notification$Action;->getRemoteInputs()[Landroid/app/RemoteInput;
+HPLandroid/app/Notification$Action;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;)V
+HPLandroid/app/Notification$Builder;->addAction(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;
+HPLandroid/app/Notification$Builder;->addExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;
+HPLandroid/app/Notification$Builder;->applyStandardTemplateWithActions(I)Landroid/widget/RemoteViews;
+HPLandroid/app/Notification$Builder;->applyStandardTemplateWithActions(ILandroid/app/Notification$StandardTemplateParams;)Landroid/widget/RemoteViews;
+HPLandroid/app/Notification$Builder;->createSummaryText()Ljava/lang/CharSequence;
+HPLandroid/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;ZZZ)Landroid/widget/RemoteViews;
+HPLandroid/app/Notification$Builder;->getActionLayoutResource()I
+HPLandroid/app/Notification$Builder;->getBigBaseLayoutResource()I
+HPLandroid/app/Notification$Builder;->getExtras()Landroid/os/Bundle;
+HPLandroid/app/Notification$Builder;->hasValidRemoteInput(Landroid/app/Notification$Action;)Z
+HPLandroid/app/Notification$Builder;->makeAmbientNotification()Landroid/widget/RemoteViews;
+HPLandroid/app/Notification$Builder;->makeLowPriorityContentView(Z)Landroid/widget/RemoteViews;
+HPLandroid/app/Notification$Builder;->makeNotificationHeader(Z)Landroid/widget/RemoteViews;
+HPLandroid/app/Notification$Builder;->makePublicContentView()Landroid/widget/RemoteViews;
+HPLandroid/app/Notification$Builder;->makePublicView(Z)Landroid/widget/RemoteViews;
+HPLandroid/app/Notification$Builder;->maybeCloneStrippedForDelivery(Landroid/app/Notification;Z)Landroid/app/Notification;
+HPLandroid/app/Notification$Builder;->processLargeLegacyIcon(Landroid/graphics/drawable/Icon;Landroid/widget/RemoteViews;)V
+HPLandroid/app/Notification$Builder;->processLegacyText(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;->resetStandardTemplateWithActions(Landroid/widget/RemoteViews;)V
+HPLandroid/app/Notification$Builder;->resolveAmbientColor()I
+HPLandroid/app/Notification$Builder;->setBackgroundColorHint(I)V
+HPLandroid/app/Notification$Builder;->setChannel(Ljava/lang/String;)Landroid/app/Notification$Builder;
+HPLandroid/app/Notification$Builder;->textColorsNeedInversion()Z
+HPLandroid/app/Notification$BuilderRemoteViews;-><init>(Landroid/os/Parcel;)V
+HPLandroid/app/Notification$BuilderRemoteViews;->clone()Landroid/app/Notification$BuilderRemoteViews;
+HPLandroid/app/Notification$BuilderRemoteViews;->clone()Landroid/widget/RemoteViews;
+HPLandroid/app/Notification$Extender;->extend(Landroid/app/Notification$Builder;)Landroid/app/Notification$Builder;
+HPLandroid/app/Notification$StandardTemplateParams;->ambient(Z)Landroid/app/Notification$StandardTemplateParams;
+HPLandroid/app/Notification$StandardTemplateParams;->hasProgress(Z)Landroid/app/Notification$StandardTemplateParams;
+HPLandroid/app/Notification$TvExtender;-><init>()V
+HPLandroid/app/Notification$TvExtender;->extend(Landroid/app/Notification$Builder;)Landroid/app/Notification$Builder;
+HPLandroid/app/Notification$TvExtender;->setChannelId(Ljava/lang/String;)Landroid/app/Notification$TvExtender;
+HPLandroid/app/Notification;->-get0(Landroid/app/Notification;)J
+HPLandroid/app/Notification;->clone()Landroid/app/Notification;
+HPLandroid/app/Notification;->cloneInto(Landroid/app/Notification;Z)V
+HPLandroid/app/Notification;->getBadgeIconType()I
+HPLandroid/app/Notification;->getChannelId()Ljava/lang/String;
+HPLandroid/app/Notification;->getShortcutId()Ljava/lang/String;
+HPLandroid/app/Notification;->getTimeoutAfter()J
+HPLandroid/app/Notification;->hasCompletedProgress()Z
+HPLandroid/app/Notification;->hasMediaSession()Z
+HPLandroid/app/Notification;->isGroupChild()Z
+HPLandroid/app/Notification;->isGroupSummary()Z
+HPLandroid/app/Notification;->isMediaNotification()Z
+HPLandroid/app/Notification;->lightenPayload()V
+HPLandroid/app/Notification;->showsChronometer()Z
+HPLandroid/app/Notification;->toString()Ljava/lang/String;
+HPLandroid/app/Notification;->visibilityToString(I)Ljava/lang/String;
+HPLandroid/app/NotificationChannel;->canBypassDnd()Z
+HPLandroid/app/NotificationChannel;->canShowBadge()Z
+HPLandroid/app/NotificationChannel;->getAudioAttributes()Landroid/media/AudioAttributes;
+HPLandroid/app/NotificationChannel;->getDescription()Ljava/lang/String;
+HPLandroid/app/NotificationChannel;->getGroup()Ljava/lang/String;
+HPLandroid/app/NotificationChannel;->getImportance()I
+HPLandroid/app/NotificationChannel;->getLightColor()I
+HPLandroid/app/NotificationChannel;->getLockscreenVisibility()I
+HPLandroid/app/NotificationChannel;->getName()Ljava/lang/CharSequence;
+HPLandroid/app/NotificationChannel;->getSound()Landroid/net/Uri;
+HPLandroid/app/NotificationChannel;->getUserLockedFields()I
+HPLandroid/app/NotificationChannel;->getVibrationPattern()[J
+HPLandroid/app/NotificationChannel;->isBlockableSystem()Z
+HPLandroid/app/NotificationChannel;->isDeleted()Z
+HPLandroid/app/NotificationChannel;->lockFields(I)V
+HPLandroid/app/NotificationChannel;->populateFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
+HPLandroid/app/NotificationChannel;->safeAudioAttributes(Lorg/xmlpull/v1/XmlPullParser;)Landroid/media/AudioAttributes;
+HPLandroid/app/NotificationChannel;->safeBool(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Z)Z
+HPLandroid/app/NotificationChannel;->safeInt(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
+HPLandroid/app/NotificationChannel;->safeLongArray(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;[J)[J
+HPLandroid/app/NotificationChannel;->safeUri(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/net/Uri;
+HPLandroid/app/NotificationChannel;->setBlockableSystem(Z)V
+HPLandroid/app/NotificationChannel;->setBypassDnd(Z)V
+HPLandroid/app/NotificationChannel;->setDeleted(Z)V
+HPLandroid/app/NotificationChannel;->setDescription(Ljava/lang/String;)V
+HPLandroid/app/NotificationChannel;->setLightColor(I)V
+HPLandroid/app/NotificationChannel;->setLockscreenVisibility(I)V
+HPLandroid/app/NotificationChannel;->setName(Ljava/lang/CharSequence;)V
+HPLandroid/app/NotificationChannel;->setVibrationPattern([J)V
+HPLandroid/app/NotificationChannel;->shouldShowLights()Z
+HPLandroid/app/NotificationChannel;->shouldVibrate()Z
+HPLandroid/app/NotificationChannel;->tryParseInt(Ljava/lang/String;I)I
+HPLandroid/app/NotificationChannel;->unlockFields(I)V
+HPLandroid/app/NotificationChannel;->writeXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLandroid/app/NotificationChannelGroup;->equals(Ljava/lang/Object;)Z
+HPLandroid/app/NotificationChannelGroup;->getName()Ljava/lang/CharSequence;
+HPLandroid/app/NotificationChannelGroup;->writeXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLandroid/app/NotificationManager$Policy$1;-><init>()V
+HPLandroid/app/NotificationManager$Policy;-><init>(IIII)V
+HPLandroid/app/NotificationManager$Policy;->equals(Ljava/lang/Object;)Z
+HPLandroid/app/NotificationManager;->fixLegacySmallIcon(Landroid/app/Notification;Ljava/lang/String;)V
+HPLandroid/app/NotificationManager;->getAutomaticZenRules()Ljava/util/Map;
+HPLandroid/app/NotificationManager;->notify(ILandroid/app/Notification;)V
+HPLandroid/app/NotificationManager;->notify(Ljava/lang/String;ILandroid/app/Notification;)V
+HPLandroid/app/NotificationManager;->notifyAsUser(Ljava/lang/String;ILandroid/app/Notification;Landroid/os/UserHandle;)V
+HPLandroid/app/NotificationManager;->setNotificationListenerAccessGrantedForUser(Landroid/content/ComponentName;IZ)V
+HPLandroid/app/NotificationManager;->setNotificationPolicyAccessGranted(Ljava/lang/String;Z)V
+HPLandroid/app/PackageInstallObserver$1;-><init>(Landroid/app/PackageInstallObserver;)V
+HPLandroid/app/PackageInstallObserver$1;->onPackageInstalled(Ljava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/app/PackageInstallObserver;-><init>()V
+HPLandroid/app/PackageInstallObserver;->getBinder()Landroid/content/pm/IPackageInstallObserver2;
+HPLandroid/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
+HPLandroid/app/PendingIntent;->describeContents()I
+HPLandroid/app/PendingIntent;->getActivityAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent;
+HPLandroid/app/PendingIntent;->getCreatorPackage()Ljava/lang/String;
+HPLandroid/app/PendingIntent;->getCreatorUid()I
+HPLandroid/app/PendingIntent;->getIntent()Landroid/content/Intent;
+HPLandroid/app/PendingIntent;->getTag(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/app/PendingIntent;->getTarget()Landroid/content/IIntentSender;
+HPLandroid/app/PendingIntent;->getTargetPackage()Ljava/lang/String;
+HPLandroid/app/PendingIntent;->readPendingIntentOrNullFromParcel(Landroid/os/Parcel;)Landroid/app/PendingIntent;
+HPLandroid/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;)V
+HPLandroid/app/PendingIntent;->send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;)V
+HPLandroid/app/PendingIntent;->toString()Ljava/lang/String;
+HPLandroid/app/PictureInPictureParams$1;-><init>()V
+HPLandroid/app/PictureInPictureParams$Builder;-><init>()V
+HPLandroid/app/PictureInPictureParams$Builder;->build()Landroid/app/PictureInPictureParams;
+HPLandroid/app/PictureInPictureParams;-><init>(Landroid/util/Rational;Ljava/util/List;Landroid/graphics/Rect;)V
+HPLandroid/app/RemoteInput$1;-><init>()V
+HPLandroid/app/ResourcesManager;->appendLibAssetForMainAssetPath(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/app/ResourcesManager;->applyNewResourceDirsLocked(Ljava/lang/String;[Ljava/lang/String;)V
+HPLandroid/app/ResourcesManager;->findKeyForResourceImplLocked(Landroid/content/res/ResourcesImpl;)Landroid/content/res/ResourcesKey;
+HPLandroid/app/ResourcesManager;->findOrCreateResourcesImplForKeyLocked(Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;
+HPLandroid/app/ResourcesManager;->redirectResourcesToNewImplLocked(Landroid/util/ArrayMap;)V
+HPLandroid/app/ResultInfo;-><init>(Ljava/lang/String;IILandroid/content/Intent;)V
+HPLandroid/app/ResultInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/SearchableInfo$1;-><init>()V
+HPLandroid/app/SearchableInfo;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;Landroid/content/ComponentName;)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;->getSearchActivity()Landroid/content/ComponentName;
+HPLandroid/app/SearchableInfo;->shouldIncludeInGlobalSearch()Z
+HPLandroid/app/Service;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/app/Service;->onTrimMemory(I)V
+HPLandroid/app/Service;->stopSelfResult(I)Z
+HPLandroid/app/ServiceStartArgs;-><init>(ZIILandroid/content/Intent;)V
+HPLandroid/app/ServiceStartArgs;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/SystemServiceRegistry$14;->createService()Landroid/location/CountryDetector;
+HPLandroid/app/SystemServiceRegistry$14;->createService()Ljava/lang/Object;
+HPLandroid/app/SystemServiceRegistry$19;->createService(Landroid/app/ContextImpl;)Landroid/os/DropBoxManager;
+HPLandroid/app/SystemServiceRegistry$19;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HPLandroid/app/SystemServiceRegistry$23;->createService()Landroid/view/textservice/TextServicesManager;
+HPLandroid/app/SystemServiceRegistry$23;->createService()Ljava/lang/Object;
+HPLandroid/app/SystemServiceRegistry$51;->createService(Landroid/app/ContextImpl;)Landroid/net/wifi/WifiScanner;
+HPLandroid/app/SystemServiceRegistry$51;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HPLandroid/app/SystemServiceRegistry$52;->createService(Landroid/app/ContextImpl;)Landroid/net/wifi/RttManager;
+HPLandroid/app/SystemServiceRegistry$52;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HPLandroid/app/SystemServiceRegistry$53;->createService(Landroid/app/ContextImpl;)Landroid/net/EthernetManager;
+HPLandroid/app/SystemServiceRegistry$53;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HPLandroid/app/SystemServiceRegistry$71;->createService()Landroid/service/persistentdata/PersistentDataBlockManager;
+HPLandroid/app/SystemServiceRegistry$71;->createService()Ljava/lang/Object;
+HPLandroid/app/SystemServiceRegistry$81;->createService(Landroid/app/ContextImpl;)Landroid/hardware/location/ContextHubManager;
+HPLandroid/app/SystemServiceRegistry$81;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HPLandroid/app/TaskStackListener;->onActivityRequestedOrientationChanged(II)V
+HPLandroid/app/TaskStackListener;->onTaskMovedToFront(I)V
+HPLandroid/app/TaskStackListener;->onTaskRemovalStarted(I)V
+HPLandroid/app/TaskStackListener;->onTaskRemoved(I)V
+HPLandroid/app/UiAutomation$IAccessibilityServiceClientImpl$1;-><init>(Landroid/app/UiAutomation;)V
+HPLandroid/app/UiAutomation$IAccessibilityServiceClientImpl$1;->init(ILandroid/os/IBinder;)V
+HPLandroid/app/UiAutomation$IAccessibilityServiceClientImpl$1;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLandroid/app/UiAutomation$IAccessibilityServiceClientImpl$1;->onServiceConnected()V
+HPLandroid/app/UiAutomation$IAccessibilityServiceClientImpl;-><init>(Landroid/app/UiAutomation;Landroid/os/Looper;)V
+HPLandroid/app/UiAutomation$OnAccessibilityEventListener;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLandroid/app/UiAutomation;->-get0(Landroid/app/UiAutomation;)Ljava/util/ArrayList;
+HPLandroid/app/UiAutomation;->-get1(Landroid/app/UiAutomation;)Ljava/lang/Object;
+HPLandroid/app/UiAutomation;->-get2(Landroid/app/UiAutomation;)Landroid/app/UiAutomation$OnAccessibilityEventListener;
+HPLandroid/app/UiAutomation;->-get3(Landroid/app/UiAutomation;)Z
+HPLandroid/app/UiAutomation;->-set0(Landroid/app/UiAutomation;I)I
+HPLandroid/app/UiAutomation;->-set1(Landroid/app/UiAutomation;J)J
+HPLandroid/app/UiAutomation;-><init>(Landroid/os/Looper;Landroid/app/IUiAutomationConnection;)V
+HPLandroid/app/UiAutomation;->connect(I)V
+HPLandroid/app/UiAutomation;->executeAndWaitForEvent(Ljava/lang/Runnable;Landroid/app/UiAutomation$AccessibilityEventFilter;J)Landroid/view/accessibility/AccessibilityEvent;
+HPLandroid/app/UiAutomation;->executeShellCommand(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HPLandroid/app/UiAutomation;->getFlags()I
+HPLandroid/app/UiAutomation;->getRootInActiveWindow()Landroid/view/accessibility/AccessibilityNodeInfo;
+HPLandroid/app/UiAutomation;->getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;
+HPLandroid/app/UiAutomation;->getWindows()Ljava/util/List;
+HPLandroid/app/UiAutomation;->injectInputEvent(Landroid/view/InputEvent;Z)Z
+HPLandroid/app/UiAutomation;->isConnectedLocked()Z
+HPLandroid/app/UiAutomation;->isDestroyed()Z
+HPLandroid/app/UiAutomation;->setOnAccessibilityEventListener(Landroid/app/UiAutomation$OnAccessibilityEventListener;)V
+HPLandroid/app/UiAutomation;->setServiceInfo(Landroid/accessibilityservice/AccessibilityServiceInfo;)V
+HPLandroid/app/UiAutomation;->throwIfConnectedLocked()V
+HPLandroid/app/UiAutomation;->throwIfNotConnectedLocked()V
+HPLandroid/app/UiAutomation;->waitForIdle(JJ)V
+HPLandroid/app/UserSwitchObserver;->onLockedBootComplete(I)V
+HPLandroid/app/WaitResult$1;-><init>()V
+HPLandroid/app/WaitResult;-><init>()V
+HPLandroid/app/WallpaperInfo;-><init>(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)V
+HPLandroid/app/WallpaperInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/WallpaperManager$Globals;->lambda$-android_app_WallpaperManager$Globals_13333(Landroid/util/Pair;Landroid/app/WallpaperColors;II)V
+HPLandroid/app/WallpaperManager$Globals;->onWallpaperColorsChanged(Landroid/app/WallpaperColors;II)V
+HPLandroid/app/WallpaperManager;->-get1()Landroid/app/WallpaperManager$Globals;
+HPLandroid/app/WallpaperManager;->getDefaultWallpaperComponent(Landroid/content/Context;)Landroid/content/ComponentName;
+HPLandroid/app/WallpaperManager;->isSetWallpaperAllowed()Z
+HPLandroid/app/admin/DeviceAdminInfo$1;-><init>()V
+HPLandroid/app/admin/DeviceAdminInfo$PolicyInfo;-><init>(ILjava/lang/String;II)V
+HPLandroid/app/admin/DeviceAdminInfo$PolicyInfo;-><init>(ILjava/lang/String;IIII)V
+HPLandroid/app/admin/DeviceAdminInfo;-><init>(Landroid/content/Context;Landroid/content/pm/ActivityInfo;)V
+HPLandroid/app/admin/DeviceAdminInfo;->getActivityInfo()Landroid/content/pm/ActivityInfo;
+HPLandroid/app/admin/DeviceAdminInfo;->getComponent()Landroid/content/ComponentName;
+HPLandroid/app/admin/DeviceAdminInfo;->getPackageName()Ljava/lang/String;
+HPLandroid/app/admin/DeviceAdminInfo;->readPoliciesFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
+HPLandroid/app/admin/DeviceAdminInfo;->usesPolicy(I)Z
+HPLandroid/app/admin/DeviceAdminInfo;->writePoliciesToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLandroid/app/admin/DevicePolicyManager;->getDeviceOwner()Ljava/lang/String;
+HPLandroid/app/admin/DevicePolicyManager;->getDeviceOwnerComponentOnCallingUser()Landroid/content/ComponentName;
+HPLandroid/app/admin/DevicePolicyManager;->getDeviceOwnerOrganizationName()Ljava/lang/CharSequence;
+HPLandroid/app/admin/DevicePolicyManager;->getPasswordQuality(Landroid/content/ComponentName;I)I
+HPLandroid/app/admin/DevicePolicyManager;->isNetworkLoggingEnabled(Landroid/content/ComponentName;)Z
+HPLandroid/app/admin/DevicePolicyManager;->isUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;)Z
+HPLandroid/app/admin/DevicePolicyManager;->packageHasActiveAdmins(Ljava/lang/String;I)Z
+HPLandroid/app/admin/DevicePolicyManager;->reportPasswordChanged(I)V
+HPLandroid/app/admin/DevicePolicyManager;->setActivePasswordState(Landroid/app/admin/PasswordMetrics;I)V
+HPLandroid/app/admin/DevicePolicyManagerInternal$OnCrossProfileWidgetProvidersChangeListener;->onCrossProfileWidgetProvidersChanged(ILjava/util/List;)V
+HPLandroid/app/admin/DevicePolicyManagerInternal;-><init>()V
+HPLandroid/app/admin/DevicePolicyManagerInternal;->addOnCrossProfileWidgetProvidersChangeListener(Landroid/app/admin/DevicePolicyManagerInternal$OnCrossProfileWidgetProvidersChangeListener;)V
+HPLandroid/app/admin/DevicePolicyManagerInternal;->createShowAdminSupportIntent(IZ)Landroid/content/Intent;
+HPLandroid/app/admin/DevicePolicyManagerInternal;->createUserRestrictionSupportIntent(ILjava/lang/String;)Landroid/content/Intent;
+HPLandroid/app/admin/DevicePolicyManagerInternal;->getCrossProfileWidgetProviders(I)Ljava/util/List;
+HPLandroid/app/admin/DevicePolicyManagerInternal;->isActiveAdminWithPolicy(II)Z
+HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getDeviceOwnerOrganizationName()Ljava/lang/CharSequence;
+HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->isNetworkLoggingEnabled(Landroid/content/ComponentName;)Z
+HPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->isUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;)Z
+HPLandroid/app/admin/IDevicePolicyManager$Stub;-><init>()V
+HPLandroid/app/admin/IDevicePolicyManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/admin/PasswordMetrics$1;-><init>()V
+HPLandroid/app/admin/PasswordMetrics;-><init>()V
+HPLandroid/app/admin/PasswordMetrics;-><init>(II)V
+HPLandroid/app/admin/PasswordMetrics;-><init>(IIIIIIII)V
+HPLandroid/app/assist/AssistStructure$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/assist/AssistStructure;
+HPLandroid/app/assist/AssistStructure$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/app/assist/AssistStructure$AutofillOverlay;-><init>()V
+HPLandroid/app/assist/AssistStructure$ParcelTransferReader;-><init>(Landroid/app/assist/AssistStructure;Landroid/os/IBinder;)V
+HPLandroid/app/assist/AssistStructure$ParcelTransferReader;->fetchData()V
+HPLandroid/app/assist/AssistStructure$ParcelTransferReader;->go()V
+HPLandroid/app/assist/AssistStructure$ParcelTransferReader;->readParcel(II)Landroid/os/Parcel;
+HPLandroid/app/assist/AssistStructure$ViewNode;-><init>(Landroid/app/assist/AssistStructure$ParcelTransferReader;I)V
+HPLandroid/app/assist/AssistStructure$ViewNode;->getAutofillHints()[Ljava/lang/String;
+HPLandroid/app/assist/AssistStructure$ViewNode;->getAutofillId()Landroid/view/autofill/AutofillId;
+HPLandroid/app/assist/AssistStructure$ViewNode;->getAutofillType()I
+HPLandroid/app/assist/AssistStructure$ViewNode;->getChildAt(I)Landroid/app/assist/AssistStructure$ViewNode;
+HPLandroid/app/assist/AssistStructure$ViewNode;->getHeight()I
+HPLandroid/app/assist/AssistStructure$ViewNode;->getHint()Ljava/lang/String;
+HPLandroid/app/assist/AssistStructure$ViewNode;->getHtmlInfo()Landroid/view/ViewStructure$HtmlInfo;
+HPLandroid/app/assist/AssistStructure$ViewNode;->getIdEntry()Ljava/lang/String;
+HPLandroid/app/assist/AssistStructure$ViewNode;->getInputType()I
+HPLandroid/app/assist/AssistStructure$ViewNode;->getLeft()I
+HPLandroid/app/assist/AssistStructure$ViewNode;->getScrollX()I
+HPLandroid/app/assist/AssistStructure$ViewNode;->getScrollY()I
+HPLandroid/app/assist/AssistStructure$ViewNode;->getTop()I
+HPLandroid/app/assist/AssistStructure$ViewNode;->getVisibility()I
+HPLandroid/app/assist/AssistStructure$ViewNode;->getWidth()I
+HPLandroid/app/assist/AssistStructure$ViewNode;->setAutofillOverlay(Landroid/app/assist/AssistStructure$AutofillOverlay;)V
+HPLandroid/app/assist/AssistStructure$ViewNodeText;-><init>(Landroid/os/Parcel;Z)V
+HPLandroid/app/assist/AssistStructure$WindowNode;-><init>(Landroid/app/assist/AssistStructure$ParcelTransferReader;)V
+HPLandroid/app/assist/AssistStructure$WindowNode;->getHeight()I
+HPLandroid/app/assist/AssistStructure$WindowNode;->getRootViewNode()Landroid/app/assist/AssistStructure$ViewNode;
+HPLandroid/app/assist/AssistStructure$WindowNode;->getWidth()I
+HPLandroid/app/assist/AssistStructure;->-set0(Landroid/app/assist/AssistStructure;J)J
+HPLandroid/app/assist/AssistStructure;->-set1(Landroid/app/assist/AssistStructure;J)J
+HPLandroid/app/assist/AssistStructure;->-set2(Landroid/app/assist/AssistStructure;I)I
+HPLandroid/app/assist/AssistStructure;-><init>(Landroid/os/Parcel;)V
+HPLandroid/app/assist/AssistStructure;->ensureData()V
+HPLandroid/app/assist/AssistStructure;->getActivityComponent()Landroid/content/ComponentName;
+HPLandroid/app/assist/AssistStructure;->getFlags()I
+HPLandroid/app/assist/AssistStructure;->getWindowNodeAt(I)Landroid/app/assist/AssistStructure$WindowNode;
+HPLandroid/app/assist/AssistStructure;->getWindowNodeCount()I
+HPLandroid/app/assist/AssistStructure;->sanitizeForParceling(Z)V
+HPLandroid/app/assist/AssistStructure;->setHomeActivity(Z)V
+HPLandroid/app/backup/BackupHelper;->performBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V
+HPLandroid/app/backup/BackupHelper;->restoreEntity(Landroid/app/backup/BackupDataInputStream;)V
+HPLandroid/app/backup/BackupHelper;->writeNewStateDescription(Landroid/os/ParcelFileDescriptor;)V
+HPLandroid/app/backup/BackupManager;->dataChanged(Ljava/lang/String;)V
+HPLandroid/app/backup/BackupManager;->isBackupEnabled()Z
+HPLandroid/app/backup/BackupTransport$TransportImpl;->getCurrentRestoreSet()J
+HPLandroid/app/backup/IBackupManager$Stub$Proxy;->isBackupEnabled()Z
+HPLandroid/app/backup/IBackupManager$Stub;-><init>()V
+HPLandroid/app/backup/IBackupManager$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/backup/IBackupManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/backup/ISelectBackupTransportCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/backup/ISelectBackupTransportCallback$Stub$Proxy;->onSuccess(Ljava/lang/String;)V
+HPLandroid/app/backup/ISelectBackupTransportCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/ISelectBackupTransportCallback;
+HPLandroid/app/backup/ISelectBackupTransportCallback;->onFailure(I)V
+HPLandroid/app/backup/ISelectBackupTransportCallback;->onSuccess(Ljava/lang/String;)V
+HPLandroid/app/backup/SelectBackupTransportCallback;-><init>()V
+HPLandroid/app/job/IJobCallback$Stub$Proxy;->acknowledgeStopMessage(IZ)V
+HPLandroid/app/job/IJobCallback$Stub$Proxy;->completeWork(II)Z
+HPLandroid/app/job/IJobCallback$Stub$Proxy;->dequeueWork(I)Landroid/app/job/JobWorkItem;
+HPLandroid/app/job/IJobCallback$Stub;-><init>()V
+HPLandroid/app/job/IJobCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/job/IJobScheduler$Stub$Proxy;->enqueue(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I
+HPLandroid/app/job/IJobScheduler$Stub;-><init>()V
+HPLandroid/app/job/IJobScheduler$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/job/IJobService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/job/IJobService$Stub$Proxy;->startJob(Landroid/app/job/JobParameters;)V
+HPLandroid/app/job/IJobService$Stub$Proxy;->stopJob(Landroid/app/job/JobParameters;)V
+HPLandroid/app/job/IJobService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobService;
+HPLandroid/app/job/JobInfo$Builder;->setFlags(I)Landroid/app/job/JobInfo$Builder;
+HPLandroid/app/job/JobInfo$Builder;->setPriority(I)Landroid/app/job/JobInfo$Builder;
+HPLandroid/app/job/JobInfo$TriggerContentUri;->equals(Ljava/lang/Object;)Z
+HPLandroid/app/job/JobInfo$TriggerContentUri;->getFlags()I
+HPLandroid/app/job/JobInfo$TriggerContentUri;->getUri()Landroid/net/Uri;
+HPLandroid/app/job/JobInfo$TriggerContentUri;->hashCode()I
+HPLandroid/app/job/JobInfo;->equals(Ljava/lang/Object;)Z
+HPLandroid/app/job/JobInfo;->getBackoffPolicy()I
+HPLandroid/app/job/JobInfo;->getClipData()Landroid/content/ClipData;
+HPLandroid/app/job/JobInfo;->getClipGrantFlags()I
+HPLandroid/app/job/JobInfo;->getConstraintFlags()I
+HPLandroid/app/job/JobInfo;->getExtras()Landroid/os/PersistableBundle;
+HPLandroid/app/job/JobInfo;->getFlags()I
+HPLandroid/app/job/JobInfo;->getInitialBackoffMillis()J
+HPLandroid/app/job/JobInfo;->getMaxExecutionDelayMillis()J
+HPLandroid/app/job/JobInfo;->getMinBackoffMillis()J
+HPLandroid/app/job/JobInfo;->getMinLatencyMillis()J
+HPLandroid/app/job/JobInfo;->getNetworkType()I
+HPLandroid/app/job/JobInfo;->getPriority()I
+HPLandroid/app/job/JobInfo;->getTransientExtras()Landroid/os/Bundle;
+HPLandroid/app/job/JobInfo;->getTriggerContentMaxDelay()J
+HPLandroid/app/job/JobInfo;->getTriggerContentUpdateDelay()J
+HPLandroid/app/job/JobInfo;->getTriggerContentUris()[Landroid/app/job/JobInfo$TriggerContentUri;
+HPLandroid/app/job/JobInfo;->hasEarlyConstraint()Z
+HPLandroid/app/job/JobInfo;->hasLateConstraint()Z
+HPLandroid/app/job/JobInfo;->isPersisted()Z
+HPLandroid/app/job/JobInfo;->kindofEqualsBundle(Landroid/os/BaseBundle;Landroid/os/BaseBundle;)Z
+HPLandroid/app/job/JobParameters;-><init>(Landroid/os/IBinder;ILandroid/os/PersistableBundle;Landroid/os/Bundle;Landroid/content/ClipData;IZ[Landroid/net/Uri;[Ljava/lang/String;)V
+HPLandroid/app/job/JobParameters;->completeWork(Landroid/app/job/JobWorkItem;)V
+HPLandroid/app/job/JobParameters;->dequeueWork()Landroid/app/job/JobWorkItem;
+HPLandroid/app/job/JobParameters;->getReasonName(I)Ljava/lang/String;
+HPLandroid/app/job/JobParameters;->getStopReason()I
+HPLandroid/app/job/JobParameters;->getTriggeredContentAuthorities()[Ljava/lang/String;
+HPLandroid/app/job/JobParameters;->getTriggeredContentUris()[Landroid/net/Uri;
+HPLandroid/app/job/JobParameters;->isOverrideDeadlineExpired()Z
+HPLandroid/app/job/JobParameters;->setStopReason(I)V
+HPLandroid/app/job/JobParameters;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/job/JobService$1;->onStopJob(Landroid/app/job/JobParameters;)Z
+HPLandroid/app/job/JobServiceEngine$JobHandler;->ackStopMessage(Landroid/app/job/JobParameters;Z)V
+HPLandroid/app/job/JobServiceEngine$JobInterface;->stopJob(Landroid/app/job/JobParameters;)V
+HPLandroid/app/job/JobWorkItem$1;-><init>()V
+HPLandroid/app/job/JobWorkItem$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/job/JobWorkItem;
+HPLandroid/app/job/JobWorkItem$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/app/job/JobWorkItem;-><init>(Landroid/content/Intent;)V
+HPLandroid/app/job/JobWorkItem;-><init>(Landroid/os/Parcel;)V
+HPLandroid/app/job/JobWorkItem;->bumpDeliveryCount()V
+HPLandroid/app/job/JobWorkItem;->getGrants()Ljava/lang/Object;
+HPLandroid/app/job/JobWorkItem;->getIntent()Landroid/content/Intent;
+HPLandroid/app/job/JobWorkItem;->getWorkId()I
+HPLandroid/app/job/JobWorkItem;->setWorkId(I)V
+HPLandroid/app/job/JobWorkItem;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/timezone/DistroFormatVersion$1;-><init>()V
+HPLandroid/app/timezone/DistroFormatVersion;-><init>(II)V
+HPLandroid/app/timezone/IRulesManager$Stub;-><init>()V
+HPLandroid/app/timezone/IRulesManager;->getRulesState()Landroid/app/timezone/RulesState;
+HPLandroid/app/timezone/IRulesManager;->requestInstall(Landroid/os/ParcelFileDescriptor;[BLandroid/app/timezone/ICallback;)I
+HPLandroid/app/timezone/IRulesManager;->requestNothing([BZ)V
+HPLandroid/app/timezone/IRulesManager;->requestUninstall([BLandroid/app/timezone/ICallback;)I
+HPLandroid/app/timezone/Utils;->validateVersion(Ljava/lang/String;I)I
+HPLandroid/app/trust/IStrongAuthTracker$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/trust/IStrongAuthTracker$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/app/trust/IStrongAuthTracker$Stub$Proxy;->onStrongAuthRequiredChanged(II)V
+HPLandroid/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
+HPLandroid/app/trust/ITrustListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/trust/ITrustListener$Stub$Proxy;->onTrustChanged(ZII)V
+HPLandroid/app/trust/ITrustListener$Stub$Proxy;->onTrustManagedChanged(ZI)V
+HPLandroid/app/trust/ITrustListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/trust/ITrustListener;
+HPLandroid/app/trust/ITrustManager$Stub$Proxy;->clearAllFingerprints()V
+HPLandroid/app/trust/ITrustManager$Stub$Proxy;->isTrustUsuallyManaged(I)Z
+HPLandroid/app/trust/ITrustManager$Stub;-><init>()V
+HPLandroid/app/trust/ITrustManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/trust/TrustManager;->clearAllFingerprints()V
+HPLandroid/app/trust/TrustManager;->isTrustUsuallyManaged(I)Z
+HPLandroid/app/trust/TrustManager;->reportEnabledTrustAgentsChanged(I)V
+HPLandroid/app/usage/CacheQuotaHint$1;-><init>()V
+HPLandroid/app/usage/CacheQuotaHint$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/CacheQuotaHint;
+HPLandroid/app/usage/CacheQuotaHint$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/app/usage/CacheQuotaHint$Builder;->-get0(Landroid/app/usage/CacheQuotaHint$Builder;)J
+HPLandroid/app/usage/CacheQuotaHint$Builder;->-get1(Landroid/app/usage/CacheQuotaHint$Builder;)I
+HPLandroid/app/usage/CacheQuotaHint$Builder;->-get2(Landroid/app/usage/CacheQuotaHint$Builder;)Landroid/app/usage/UsageStats;
+HPLandroid/app/usage/CacheQuotaHint$Builder;->-get3(Landroid/app/usage/CacheQuotaHint$Builder;)Ljava/lang/String;
+HPLandroid/app/usage/CacheQuotaHint$Builder;-><init>()V
+HPLandroid/app/usage/CacheQuotaHint$Builder;->build()Landroid/app/usage/CacheQuotaHint;
+HPLandroid/app/usage/CacheQuotaHint$Builder;->setQuota(J)Landroid/app/usage/CacheQuotaHint$Builder;
+HPLandroid/app/usage/CacheQuotaHint$Builder;->setUid(I)Landroid/app/usage/CacheQuotaHint$Builder;
+HPLandroid/app/usage/CacheQuotaHint$Builder;->setUsageStats(Landroid/app/usage/UsageStats;)Landroid/app/usage/CacheQuotaHint$Builder;
+HPLandroid/app/usage/CacheQuotaHint$Builder;->setVolumeUuid(Ljava/lang/String;)Landroid/app/usage/CacheQuotaHint$Builder;
+HPLandroid/app/usage/CacheQuotaHint;-><init>(Landroid/app/usage/CacheQuotaHint$Builder;)V
+HPLandroid/app/usage/CacheQuotaHint;->getQuota()J
+HPLandroid/app/usage/CacheQuotaHint;->getUid()I
+HPLandroid/app/usage/CacheQuotaHint;->getVolumeUuid()Ljava/lang/String;
+HPLandroid/app/usage/CacheQuotaHint;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/usage/ConfigurationStats$1;-><init>()V
+HPLandroid/app/usage/ConfigurationStats;-><init>()V
+HPLandroid/app/usage/ICacheQuotaService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/app/usage/ICacheQuotaService$Stub$Proxy;->computeCacheQuotaHints(Landroid/os/RemoteCallback;Ljava/util/List;)V
+HPLandroid/app/usage/ICacheQuotaService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/usage/ICacheQuotaService;
+HPLandroid/app/usage/ICacheQuotaService;->computeCacheQuotaHints(Landroid/os/RemoteCallback;Ljava/util/List;)V
+HPLandroid/app/usage/IStorageStatsManager$Stub;-><init>()V
+HPLandroid/app/usage/IStorageStatsManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/usage/IUsageStatsManager$Stub$Proxy;->isAppInactive(Ljava/lang/String;I)Z
+HPLandroid/app/usage/IUsageStatsManager$Stub$Proxy;->queryEvents(JJLjava/lang/String;)Landroid/app/usage/UsageEvents;
+HPLandroid/app/usage/IUsageStatsManager$Stub;-><init>()V
+HPLandroid/app/usage/IUsageStatsManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/app/usage/StorageStats;-><init>()V
+HPLandroid/app/usage/StorageStatsManager;->getCacheBytes(Ljava/lang/String;)J
+HPLandroid/app/usage/StorageStatsManager;->getCacheBytes(Ljava/util/UUID;)J
+HPLandroid/app/usage/StorageStatsManager;->isQuotaSupported(Ljava/lang/String;)Z
+HPLandroid/app/usage/StorageStatsManager;->isQuotaSupported(Ljava/util/UUID;)Z
+HPLandroid/app/usage/TimeSparseArray;-><init>()V
+HPLandroid/app/usage/TimeSparseArray;->closestIndexOnOrAfter(J)I
+HPLandroid/app/usage/TimeSparseArray;->closestIndexOnOrBefore(J)I
+HPLandroid/app/usage/UsageEvents$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/UsageEvents;
+HPLandroid/app/usage/UsageEvents$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/app/usage/UsageEvents$Event;-><init>()V
+HPLandroid/app/usage/UsageEvents$Event;->getClassName()Ljava/lang/String;
+HPLandroid/app/usage/UsageEvents$Event;->getConfiguration()Landroid/content/res/Configuration;
+HPLandroid/app/usage/UsageEvents$Event;->getEventType()I
+HPLandroid/app/usage/UsageEvents$Event;->getObfuscatedIfInstantApp()Landroid/app/usage/UsageEvents$Event;
+HPLandroid/app/usage/UsageEvents$Event;->getPackageName()Ljava/lang/String;
+HPLandroid/app/usage/UsageEvents$Event;->getTimeStamp()J
+HPLandroid/app/usage/UsageEvents;-><init>(Landroid/os/Parcel;)V
+HPLandroid/app/usage/UsageEvents;-><init>(Ljava/util/List;[Ljava/lang/String;)V
+HPLandroid/app/usage/UsageEvents;->findStringIndex(Ljava/lang/String;)I
+HPLandroid/app/usage/UsageEvents;->getNextEvent(Landroid/app/usage/UsageEvents$Event;)Z
+HPLandroid/app/usage/UsageEvents;->hasNextEvent()Z
+HPLandroid/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;-><init>()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;-><init>()V
+HPLandroid/app/usage/UsageStats;-><init>(Landroid/app/usage/UsageStats;)V
+HPLandroid/app/usage/UsageStats;->getPackageName()Ljava/lang/String;
+HPLandroid/app/usage/UsageStats;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/app/usage/UsageStatsManager;->isAppInactive(Ljava/lang/String;)Z
+HPLandroid/app/usage/UsageStatsManager;->queryEvents(JJ)Landroid/app/usage/UsageEvents;
+HPLandroid/app/usage/UsageStatsManagerInternal$AppIdleStateChangeListener;-><init>()V
+HPLandroid/app/usage/UsageStatsManagerInternal;-><init>()V
+HPLandroid/app/usage/UsageStatsManagerInternal;->addAppIdleStateChangeListener(Landroid/app/usage/UsageStatsManagerInternal$AppIdleStateChangeListener;)V
+HPLandroid/app/usage/UsageStatsManagerInternal;->applyRestoredPayload(ILjava/lang/String;[B)V
+HPLandroid/app/usage/UsageStatsManagerInternal;->getBackupPayload(ILjava/lang/String;)[B
+HPLandroid/app/usage/UsageStatsManagerInternal;->getIdleUidsForUser(I)[I
+HPLandroid/app/usage/UsageStatsManagerInternal;->isAppIdle(Ljava/lang/String;II)Z
+HPLandroid/app/usage/UsageStatsManagerInternal;->isAppIdleParoleOn()Z
+HPLandroid/app/usage/UsageStatsManagerInternal;->prepareShutdown()V
+HPLandroid/app/usage/UsageStatsManagerInternal;->queryUsageStatsForUser(IIJJZ)Ljava/util/List;
+HPLandroid/app/usage/UsageStatsManagerInternal;->removeAppIdleStateChangeListener(Landroid/app/usage/UsageStatsManagerInternal$AppIdleStateChangeListener;)V
+HPLandroid/app/usage/UsageStatsManagerInternal;->reportConfigurationChange(Landroid/content/res/Configuration;I)V
+HPLandroid/app/usage/UsageStatsManagerInternal;->reportContentProviderUsage(Ljava/lang/String;Ljava/lang/String;I)V
+HPLandroid/app/usage/UsageStatsManagerInternal;->reportEvent(Landroid/content/ComponentName;II)V
+HPLandroid/app/usage/UsageStatsManagerInternal;->reportEvent(Ljava/lang/String;II)V
+HPLandroid/app/usage/UsageStatsManagerInternal;->reportShortcutUsage(Ljava/lang/String;Ljava/lang/String;I)V
+HPLandroid/appwidget/AppWidgetManager;->isBoundWidgetPackage(Ljava/lang/String;I)Z
+HPLandroid/appwidget/AppWidgetProviderInfo;-><init>()V
+HPLandroid/bluetooth/BluetoothA2dp$1;->onBluetoothStateChange(Z)V
+HPLandroid/bluetooth/BluetoothA2dp$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLandroid/bluetooth/BluetoothA2dp;->-get2(Landroid/bluetooth/BluetoothA2dp;)Landroid/bluetooth/IBluetoothA2dp;
+HPLandroid/bluetooth/BluetoothA2dp;->-get3(Landroid/bluetooth/BluetoothA2dp;)Landroid/bluetooth/BluetoothProfile$ServiceListener;
+HPLandroid/bluetooth/BluetoothA2dp;->-get4(Landroid/bluetooth/BluetoothA2dp;)Ljava/util/concurrent/locks/ReentrantReadWriteLock;
+HPLandroid/bluetooth/BluetoothA2dp;->-set0(Landroid/bluetooth/BluetoothA2dp;Landroid/bluetooth/IBluetoothA2dp;)Landroid/bluetooth/IBluetoothA2dp;
+HPLandroid/bluetooth/BluetoothA2dp;->close()V
+HPLandroid/bluetooth/BluetoothA2dp;->finalize()V
+HPLandroid/bluetooth/BluetoothA2dp;->getConnectedDevices()Ljava/util/List;
+HPLandroid/bluetooth/BluetoothA2dp;->getDevicesMatchingConnectionStates([I)Ljava/util/List;
+HPLandroid/bluetooth/BluetoothA2dp;->isEnabled()Z
+HPLandroid/bluetooth/BluetoothActivityEnergyInfo$1;-><init>()V
+HPLandroid/bluetooth/BluetoothActivityEnergyInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/BluetoothActivityEnergyInfo;
+HPLandroid/bluetooth/BluetoothActivityEnergyInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/bluetooth/BluetoothActivityEnergyInfo;-><init>(JIJJJJ)V
+HPLandroid/bluetooth/BluetoothActivityEnergyInfo;-><init>(Landroid/os/Parcel;)V
+HPLandroid/bluetooth/BluetoothActivityEnergyInfo;->getControllerEnergyUsed()J
+HPLandroid/bluetooth/BluetoothActivityEnergyInfo;->getControllerIdleTimeMillis()J
+HPLandroid/bluetooth/BluetoothActivityEnergyInfo;->getControllerRxTimeMillis()J
+HPLandroid/bluetooth/BluetoothActivityEnergyInfo;->getControllerTxTimeMillis()J
+HPLandroid/bluetooth/BluetoothActivityEnergyInfo;->getUidTraffic()[Landroid/bluetooth/UidTraffic;
+HPLandroid/bluetooth/BluetoothActivityEnergyInfo;->isValid()Z
+HPLandroid/bluetooth/BluetoothActivityEnergyInfo;->setUidTraffic([Landroid/bluetooth/UidTraffic;)V
+HPLandroid/bluetooth/BluetoothActivityEnergyInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/bluetooth/BluetoothAdapter;->checkBluetoothAddress(Ljava/lang/String;)Z
+HPLandroid/bluetooth/BluetoothAdapter;->closeProfileProxy(ILandroid/bluetooth/BluetoothProfile;)V
+HPLandroid/bluetooth/BluetoothAdapter;->enableBLE()Z
+HPLandroid/bluetooth/BluetoothAdapter;->getBluetoothLeScanner()Landroid/bluetooth/le/BluetoothLeScanner;
+HPLandroid/bluetooth/BluetoothAdapter;->getLeAccess()Z
+HPLandroid/bluetooth/BluetoothAdapter;->getLeState()I
+HPLandroid/bluetooth/BluetoothAdapter;->getRemoteDevice(Ljava/lang/String;)Landroid/bluetooth/BluetoothDevice;
+HPLandroid/bluetooth/BluetoothAdapter;->isBleScanAlwaysAvailable()Z
+HPLandroid/bluetooth/BluetoothAdapter;->isLeEnabled()Z
+HPLandroid/bluetooth/BluetoothAdapter;->isOffloadedFilteringSupported()Z
+HPLandroid/bluetooth/BluetoothAdapter;->nameForState(I)Ljava/lang/String;
+HPLandroid/bluetooth/BluetoothAdapter;->requestControllerActivityEnergyInfo(Landroid/os/ResultReceiver;)V
+HPLandroid/bluetooth/BluetoothDevice$2;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/BluetoothDevice;
+HPLandroid/bluetooth/BluetoothDevice$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/bluetooth/BluetoothDevice;-><init>(Ljava/lang/String;)V
+HPLandroid/bluetooth/BluetoothDevice;->getAddress()Ljava/lang/String;
+HPLandroid/bluetooth/BluetoothDevice;->getService()Landroid/bluetooth/IBluetooth;
+HPLandroid/bluetooth/BluetoothDevice;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/bluetooth/BluetoothGattCallback;-><init>()V
+HPLandroid/bluetooth/BluetoothHeadset;->getConnectedDevices()Ljava/util/List;
+HPLandroid/bluetooth/BluetoothHeadset;->isEnabled()Z
+HPLandroid/bluetooth/BluetoothHeadset;->phoneStateChanged(IIILjava/lang/String;I)V
+HPLandroid/bluetooth/BluetoothInputDevice$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLandroid/bluetooth/BluetoothInputDevice;->-get3(Landroid/bluetooth/BluetoothInputDevice;)Landroid/bluetooth/BluetoothProfile$ServiceListener;
+HPLandroid/bluetooth/BluetoothInputDevice;->-set0(Landroid/bluetooth/BluetoothInputDevice;Landroid/bluetooth/IBluetoothInputDevice;)Landroid/bluetooth/IBluetoothInputDevice;
+HPLandroid/bluetooth/BluetoothInputDevice;->getConnectedDevices()Ljava/util/List;
+HPLandroid/bluetooth/BluetoothInputDevice;->isEnabled()Z
+HPLandroid/bluetooth/BluetoothMap$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLandroid/bluetooth/BluetoothMap;->-get3(Landroid/bluetooth/BluetoothMap;)Landroid/bluetooth/BluetoothProfile$ServiceListener;
+HPLandroid/bluetooth/BluetoothMap;->-set0(Landroid/bluetooth/BluetoothMap;Landroid/bluetooth/IBluetoothMap;)Landroid/bluetooth/IBluetoothMap;
+HPLandroid/bluetooth/BluetoothMap;->-wrap0(Ljava/lang/String;)V
+HPLandroid/bluetooth/BluetoothMap;->getConnectedDevices()Ljava/util/List;
+HPLandroid/bluetooth/BluetoothMap;->isEnabled()Z
+HPLandroid/bluetooth/BluetoothMap;->log(Ljava/lang/String;)V
+HPLandroid/bluetooth/BluetoothPan$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLandroid/bluetooth/BluetoothPan;->-get3(Landroid/bluetooth/BluetoothPan;)Landroid/bluetooth/BluetoothProfile$ServiceListener;
+HPLandroid/bluetooth/BluetoothPan;->-set0(Landroid/bluetooth/BluetoothPan;Landroid/bluetooth/IBluetoothPan;)Landroid/bluetooth/IBluetoothPan;
+HPLandroid/bluetooth/BluetoothPbap$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLandroid/bluetooth/BluetoothPbap;->-get3(Landroid/bluetooth/BluetoothPbap;)Landroid/bluetooth/BluetoothPbap$ServiceListener;
+HPLandroid/bluetooth/BluetoothPbap;->-set0(Landroid/bluetooth/BluetoothPbap;Landroid/bluetooth/IBluetoothPbap;)Landroid/bluetooth/IBluetoothPbap;
+HPLandroid/bluetooth/BluetoothPbap;->-wrap0(Ljava/lang/String;)V
+HPLandroid/bluetooth/BluetoothPbap;->log(Ljava/lang/String;)V
+HPLandroid/bluetooth/BluetoothUuid;->getServiceIdentifierFromParcelUuid(Landroid/os/ParcelUuid;)I
+HPLandroid/bluetooth/BluetoothUuid;->parseUuidFrom([B)Landroid/os/ParcelUuid;
+HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->enable()Z
+HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->isOffloadedFilteringSupported()Z
+HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->onLeServiceUp()V
+HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->registerCallback(Landroid/bluetooth/IBluetoothCallback;)V
+HPLandroid/bluetooth/IBluetooth$Stub$Proxy;->requestActivityInfo(Landroid/os/ResultReceiver;)V
+HPLandroid/bluetooth/IBluetoothA2dp$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/bluetooth/IBluetoothA2dp$Stub$Proxy;->getConnectedDevices()Ljava/util/List;
+HPLandroid/bluetooth/IBluetoothA2dp$Stub$Proxy;->getDevicesMatchingConnectionStates([I)Ljava/util/List;
+HPLandroid/bluetooth/IBluetoothA2dp$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothA2dp;
+HPLandroid/bluetooth/IBluetoothA2dp$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/bluetooth/IBluetoothCallback$Stub;-><init>()V
+HPLandroid/bluetooth/IBluetoothCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/bluetooth/IBluetoothCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/bluetooth/IBluetoothGatt$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/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;)V
+HPLandroid/bluetooth/IBluetoothGatt$Stub$Proxy;->stopScan(I)V
+HPLandroid/bluetooth/IBluetoothGatt$Stub$Proxy;->unregisterScanner(I)V
+HPLandroid/bluetooth/IBluetoothGatt$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothGatt;
+HPLandroid/bluetooth/IBluetoothGatt$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/bluetooth/IBluetoothHeadset$Stub$Proxy;->getConnectedDevices()Ljava/util/List;
+HPLandroid/bluetooth/IBluetoothHeadset$Stub$Proxy;->phoneStateChanged(IIILjava/lang/String;I)V
+HPLandroid/bluetooth/IBluetoothHeadsetPhone$Stub;-><init>()V
+HPLandroid/bluetooth/IBluetoothInputDevice$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/bluetooth/IBluetoothInputDevice$Stub$Proxy;->getConnectedDevices()Ljava/util/List;
+HPLandroid/bluetooth/IBluetoothInputDevice$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothInputDevice;
+HPLandroid/bluetooth/IBluetoothInputDevice$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->getBluetoothGatt()Landroid/bluetooth/IBluetoothGatt;
+HPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->isBleScanAlwaysAvailable()Z
+HPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->unregisterStateChangeCallback(Landroid/bluetooth/IBluetoothStateChangeCallback;)V
+HPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->updateBleAppCount(Landroid/os/IBinder;ZLjava/lang/String;)I
+HPLandroid/bluetooth/IBluetoothManager$Stub;-><init>()V
+HPLandroid/bluetooth/IBluetoothManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/bluetooth/IBluetoothManagerCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/bluetooth/IBluetoothManagerCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/bluetooth/IBluetoothManagerCallback$Stub$Proxy;->onBluetoothServiceUp(Landroid/bluetooth/IBluetooth;)V
+HPLandroid/bluetooth/IBluetoothManagerCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothManagerCallback;
+HPLandroid/bluetooth/IBluetoothMap$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/bluetooth/IBluetoothMap$Stub$Proxy;->getConnectedDevices()Ljava/util/List;
+HPLandroid/bluetooth/IBluetoothMap$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothMap;
+HPLandroid/bluetooth/IBluetoothMap$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/bluetooth/IBluetoothPan$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/bluetooth/IBluetoothPan$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothPan;
+HPLandroid/bluetooth/IBluetoothPbap$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/bluetooth/IBluetoothPbap$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothPbap;
+HPLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub$Proxy;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothProfileServiceConnection;
+HPLandroid/bluetooth/IBluetoothStateChangeCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/bluetooth/IBluetoothStateChangeCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/bluetooth/IBluetoothStateChangeCallback$Stub$Proxy;->onBluetoothStateChange(Z)V
+HPLandroid/bluetooth/IBluetoothStateChangeCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothStateChangeCallback;
+HPLandroid/bluetooth/le/BluetoothLeScanner$BleScanCallbackWrapper$1;-><init>(Landroid/bluetooth/le/BluetoothLeScanner$BleScanCallbackWrapper;Landroid/bluetooth/le/ScanResult;)V
+HPLandroid/bluetooth/le/BluetoothLeScanner$BleScanCallbackWrapper$1;->run()V
+HPLandroid/bluetooth/le/BluetoothLeScanner$BleScanCallbackWrapper;->-get0(Landroid/bluetooth/le/BluetoothLeScanner$BleScanCallbackWrapper;)Landroid/bluetooth/le/ScanCallback;
+HPLandroid/bluetooth/le/BluetoothLeScanner$BleScanCallbackWrapper;-><init>(Landroid/bluetooth/le/BluetoothLeScanner;Landroid/bluetooth/IBluetoothGatt;Ljava/util/List;Landroid/bluetooth/le/ScanSettings;Landroid/os/WorkSource;Landroid/bluetooth/le/ScanCallback;Ljava/util/List;)V
+HPLandroid/bluetooth/le/BluetoothLeScanner$BleScanCallbackWrapper;->onScanResult(Landroid/bluetooth/le/ScanResult;)V
+HPLandroid/bluetooth/le/BluetoothLeScanner$BleScanCallbackWrapper;->onScannerRegistered(II)V
+HPLandroid/bluetooth/le/BluetoothLeScanner$BleScanCallbackWrapper;->startRegistration()V
+HPLandroid/bluetooth/le/BluetoothLeScanner$BleScanCallbackWrapper;->stopLeScan()V
+HPLandroid/bluetooth/le/BluetoothLeScanner;->-get0(Landroid/bluetooth/le/BluetoothLeScanner;)Ljava/util/Map;
+HPLandroid/bluetooth/le/BluetoothLeScanner;-><init>(Landroid/bluetooth/IBluetoothManager;)V
+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/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
+HPLandroid/bluetooth/le/BluetoothLeUtils;->checkAdapterStateOn(Landroid/bluetooth/BluetoothAdapter;)V
+HPLandroid/bluetooth/le/IScannerCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/bluetooth/le/IScannerCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/bluetooth/le/IScannerCallback$Stub$Proxy;->onScanResult(Landroid/bluetooth/le/ScanResult;)V
+HPLandroid/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;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/le/IScannerCallback;
+HPLandroid/bluetooth/le/IScannerCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/bluetooth/le/IScannerCallback;->onBatchScanResults(Ljava/util/List;)V
+HPLandroid/bluetooth/le/IScannerCallback;->onFoundOrLost(ZLandroid/bluetooth/le/ScanResult;)V
+HPLandroid/bluetooth/le/IScannerCallback;->onScanManagerErrorCallback(I)V
+HPLandroid/bluetooth/le/IScannerCallback;->onScanResult(Landroid/bluetooth/le/ScanResult;)V
+HPLandroid/bluetooth/le/IScannerCallback;->onScannerRegistered(II)V
+HPLandroid/bluetooth/le/ScanCallback;-><init>()V
+HPLandroid/bluetooth/le/ScanFilter$1;-><init>()V
+HPLandroid/bluetooth/le/ScanFilter$1;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/le/ScanFilter;
+HPLandroid/bluetooth/le/ScanFilter$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/bluetooth/le/ScanFilter$Builder;-><init>()V
+HPLandroid/bluetooth/le/ScanFilter$Builder;->build()Landroid/bluetooth/le/ScanFilter;
+HPLandroid/bluetooth/le/ScanFilter$Builder;->setManufacturerData(I[B[B)Landroid/bluetooth/le/ScanFilter$Builder;
+HPLandroid/bluetooth/le/ScanFilter$Builder;->setServiceData(Landroid/os/ParcelUuid;[B)Landroid/bluetooth/le/ScanFilter$Builder;
+HPLandroid/bluetooth/le/ScanFilter$Builder;->setServiceUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;
+HPLandroid/bluetooth/le/ScanFilter;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;[B[BI[B[B)V
+HPLandroid/bluetooth/le/ScanFilter;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;[B[BI[B[BLandroid/bluetooth/le/ScanFilter;)V
+HPLandroid/bluetooth/le/ScanFilter;->getDeviceAddress()Ljava/lang/String;
+HPLandroid/bluetooth/le/ScanFilter;->getDeviceName()Ljava/lang/String;
+HPLandroid/bluetooth/le/ScanFilter;->getManufacturerData()[B
+HPLandroid/bluetooth/le/ScanFilter;->getManufacturerDataMask()[B
+HPLandroid/bluetooth/le/ScanFilter;->getManufacturerId()I
+HPLandroid/bluetooth/le/ScanFilter;->getServiceData()[B
+HPLandroid/bluetooth/le/ScanFilter;->getServiceDataMask()[B
+HPLandroid/bluetooth/le/ScanFilter;->getServiceDataUuid()Landroid/os/ParcelUuid;
+HPLandroid/bluetooth/le/ScanFilter;->getServiceUuid()Landroid/os/ParcelUuid;
+HPLandroid/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;->matchesServiceUuid(Ljava/util/UUID;Ljava/util/UUID;Ljava/util/UUID;)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;-><init>(Ljava/util/List;Landroid/util/SparseArray;Ljava/util/Map;IILjava/lang/String;[B)V
+HPLandroid/bluetooth/le/ScanRecord;->extractBytes([BII)[B
+HPLandroid/bluetooth/le/ScanRecord;->getBytes()[B
+HPLandroid/bluetooth/le/ScanRecord;->getManufacturerSpecificData(I)[B
+HPLandroid/bluetooth/le/ScanRecord;->getServiceData(Landroid/os/ParcelUuid;)[B
+HPLandroid/bluetooth/le/ScanRecord;->getServiceUuids()Ljava/util/List;
+HPLandroid/bluetooth/le/ScanRecord;->parseFromBytes([B)Landroid/bluetooth/le/ScanRecord;
+HPLandroid/bluetooth/le/ScanRecord;->parseServiceUuid([BIIILjava/util/List;)I
+HPLandroid/bluetooth/le/ScanResult$1;-><init>()V
+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;-><init>(Landroid/os/Parcel;)V
+HPLandroid/bluetooth/le/ScanResult;-><init>(Landroid/os/Parcel;Landroid/bluetooth/le/ScanResult;)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;->getTimestampNanos()J
+HPLandroid/bluetooth/le/ScanResult;->readFromParcel(Landroid/os/Parcel;)V
+HPLandroid/bluetooth/le/ScanResult;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/bluetooth/le/ScanSettings$1;-><init>()V
+HPLandroid/bluetooth/le/ScanSettings$1;->createFromParcel(Landroid/os/Parcel;)Landroid/bluetooth/le/ScanSettings;
+HPLandroid/bluetooth/le/ScanSettings$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/bluetooth/le/ScanSettings$Builder;-><init>()V
+HPLandroid/bluetooth/le/ScanSettings$Builder;->build()Landroid/bluetooth/le/ScanSettings;
+HPLandroid/bluetooth/le/ScanSettings$Builder;->isValidCallbackType(I)Z
+HPLandroid/bluetooth/le/ScanSettings$Builder;->setCallbackType(I)Landroid/bluetooth/le/ScanSettings$Builder;
+HPLandroid/bluetooth/le/ScanSettings$Builder;->setMatchMode(I)Landroid/bluetooth/le/ScanSettings$Builder;
+HPLandroid/bluetooth/le/ScanSettings$Builder;->setNumOfMatches(I)Landroid/bluetooth/le/ScanSettings$Builder;
+HPLandroid/bluetooth/le/ScanSettings$Builder;->setReportDelay(J)Landroid/bluetooth/le/ScanSettings$Builder;
+HPLandroid/bluetooth/le/ScanSettings$Builder;->setScanMode(I)Landroid/bluetooth/le/ScanSettings$Builder;
+HPLandroid/bluetooth/le/ScanSettings;-><init>(IIIJIIZI)V
+HPLandroid/bluetooth/le/ScanSettings;-><init>(IIIJIIZILandroid/bluetooth/le/ScanSettings;)V
+HPLandroid/bluetooth/le/ScanSettings;-><init>(Landroid/os/Parcel;)V
+HPLandroid/bluetooth/le/ScanSettings;-><init>(Landroid/os/Parcel;Landroid/bluetooth/le/ScanSettings;)V
+HPLandroid/bluetooth/le/ScanSettings;->getCallbackType()I
+HPLandroid/bluetooth/le/ScanSettings;->getLegacy()Z
+HPLandroid/bluetooth/le/ScanSettings;->getMatchMode()I
+HPLandroid/bluetooth/le/ScanSettings;->getReportDelayMillis()J
+HPLandroid/bluetooth/le/ScanSettings;->getScanMode()I
+HPLandroid/bluetooth/le/ScanSettings;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/companion/ICompanionDeviceManager$Stub;-><init>()V
+HPLandroid/companion/ICompanionDeviceManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/companion/ICompanionDeviceManager;
+HPLandroid/companion/ICompanionDeviceManager;->associate(Landroid/companion/AssociationRequest;Landroid/companion/IFindDeviceCallback;Ljava/lang/String;)V
+HPLandroid/companion/ICompanionDeviceManager;->disassociate(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/companion/ICompanionDeviceManager;->getAssociations(Ljava/lang/String;I)Ljava/util/List;
+HPLandroid/companion/ICompanionDeviceManager;->hasNotificationAccess(Landroid/content/ComponentName;)Z
+HPLandroid/companion/ICompanionDeviceManager;->requestNotificationAccess(Landroid/content/ComponentName;)Landroid/app/PendingIntent;
+HPLandroid/companion/ICompanionDeviceManager;->stopScan(Landroid/companion/AssociationRequest;Landroid/companion/IFindDeviceCallback;Ljava/lang/String;)V
+HPLandroid/content/AbstractThreadedSyncAdapter;->getContext()Landroid/content/Context;
+HPLandroid/content/AsyncTaskLoader$LoadTask;->run()V
+HPLandroid/content/AsyncTaskLoader;->onCanceled(Ljava/lang/Object;)V
+HPLandroid/content/BroadcastReceiver;->checkSynchronousHint()V
+HPLandroid/content/BroadcastReceiver;->getResultCode()I
+HPLandroid/content/BroadcastReceiver;->getResultData()Ljava/lang/String;
+HPLandroid/content/BroadcastReceiver;->getSendingUserId()I
+HPLandroid/content/BroadcastReceiver;->goAsync()Landroid/content/BroadcastReceiver$PendingResult;
+HPLandroid/content/BroadcastReceiver;->isOrderedBroadcast()Z
+HPLandroid/content/BroadcastReceiver;->setResult(ILjava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/content/BroadcastReceiver;->setResultCode(I)V
+HPLandroid/content/BroadcastReceiver;->setResultExtras(Landroid/os/Bundle;)V
+HPLandroid/content/ComponentName$1;->newArray(I)[Landroid/content/ComponentName;
+HPLandroid/content/ComponentName$1;->newArray(I)[Ljava/lang/Object;
+HPLandroid/content/ComponentName;->appendShortString(Ljava/lang/StringBuilder;)V
+HPLandroid/content/ComponentName;->compareTo(Landroid/content/ComponentName;)I
+HPLandroid/content/ComponentName;->printShortClassName(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/content/ComponentName;->printShortString(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/content/ContentProvider$Transport;->bulkInsert(Ljava/lang/String;Landroid/net/Uri;[Landroid/content/ContentValues;)I
+HPLandroid/content/ContentProvider$Transport;->enforceFilePermission(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/IBinder;)V
+HPLandroid/content/ContentProvider$Transport;->openTypedAssetFile(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/content/res/AssetFileDescriptor;
+HPLandroid/content/ContentProvider;->getWritePermission()Ljava/lang/String;
+HPLandroid/content/ContentProvider;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/content/ContentProvider;->openAssetFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;
+HPLandroid/content/ContentProvider;->openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;
+HPLandroid/content/ContentProvider;->openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;
+HPLandroid/content/ContentProviderClient$CursorWrapperInner;-><init>(Landroid/content/ContentProviderClient;Landroid/database/Cursor;)V
+HPLandroid/content/ContentProviderClient$CursorWrapperInner;->close()V
+HPLandroid/content/ContentProviderClient$CursorWrapperInner;->finalize()V
+HPLandroid/content/ContentProviderClient;->query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
+HPLandroid/content/ContentProviderClient;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
+HPLandroid/content/ContentProviderClient;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
+HPLandroid/content/ContentProviderProxy;->delete(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I
+HPLandroid/content/ContentProviderProxy;->getType(Landroid/net/Uri;)Ljava/lang/String;
+HPLandroid/content/ContentProviderProxy;->insert(Ljava/lang/String;Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
+HPLandroid/content/ContentProviderProxy;->update(Ljava/lang/String;Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I
+HPLandroid/content/ContentQueryMap;->getValues(Ljava/lang/String;)Landroid/content/ContentValues;
+HPLandroid/content/ContentResolver$OpenResourceIdResult;-><init>(Landroid/content/ContentResolver;)V
+HPLandroid/content/ContentResolver;->addPeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V
+HPLandroid/content/ContentResolver;->bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I
+HPLandroid/content/ContentResolver;->getResourceId(Landroid/net/Uri;)Landroid/content/ContentResolver$OpenResourceIdResult;
+HPLandroid/content/ContentResolver;->getSyncAdapterPackagesForAuthorityAsUser(Ljava/lang/String;I)[Ljava/lang/String;
+HPLandroid/content/ContentResolver;->openInputStream(Landroid/net/Uri;)Ljava/io/InputStream;
+HPLandroid/content/ContentResolver;->setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V
+HPLandroid/content/ContentUris;->parseId(Landroid/net/Uri;)J
+HPLandroid/content/ContentValues$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ContentValues;
+HPLandroid/content/ContentValues$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/content/ContentValues;-><init>(Landroid/content/ContentValues;)V
+HPLandroid/content/ContentValues;-><init>(Ljava/util/HashMap;)V
+HPLandroid/content/ContentValues;-><init>(Ljava/util/HashMap;Landroid/content/ContentValues;)V
+HPLandroid/content/ContentValues;->getAsByteArray(Ljava/lang/String;)[B
+HPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Double;)V
+HPLandroid/content/ContentValues;->putNull(Ljava/lang/String;)V
+HPLandroid/content/ContentValues;->valueSet()Ljava/util/Set;
+HPLandroid/content/ContentValues;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/Context;->unregisterComponentCallbacks(Landroid/content/ComponentCallbacks;)V
+HPLandroid/content/ContextWrapper;->checkCallingPermission(Ljava/lang/String;)I
+HPLandroid/content/ContextWrapper;->createCredentialProtectedStorageContext()Landroid/content/Context;
+HPLandroid/content/ContextWrapper;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/content/ContextWrapper;->getMainThreadHandler()Landroid/os/Handler;
+HPLandroid/content/ContextWrapper;->moveDatabaseFrom(Landroid/content/Context;Ljava/lang/String;)Z
+HPLandroid/content/ContextWrapper;->moveSharedPreferencesFrom(Landroid/content/Context;Ljava/lang/String;)Z
+HPLandroid/content/ContextWrapper;->removeStickyBroadcast(Landroid/content/Intent;)V
+HPLandroid/content/ContextWrapper;->sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;)V
+HPLandroid/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;ILandroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/content/ContextWrapper;->startServiceAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/ComponentName;
+HPLandroid/content/IClipboard$Stub;-><init>()V
+HPLandroid/content/IClipboard$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/content/IContentService$Stub$Proxy;->addPeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V
+HPLandroid/content/IContentService$Stub$Proxy;->setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V
+HPLandroid/content/IContentService$Stub;-><init>()V
+HPLandroid/content/IContentService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/content/IIntentReceiver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/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
+HPLandroid/content/IIntentReceiver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/content/IIntentSender$Stub;-><init>()V
+HPLandroid/content/IIntentSender$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/content/IOnPrimaryClipChangedListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/content/IOnPrimaryClipChangedListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/content/IOnPrimaryClipChangedListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IOnPrimaryClipChangedListener;
+HPLandroid/content/IRestrictionsManager$Stub;-><init>()V
+HPLandroid/content/IRestrictionsManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/content/ISyncAdapter$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/content/ISyncAdapter$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/content/ISyncAdapter$Stub$Proxy;->cancelSync(Landroid/content/ISyncContext;)V
+HPLandroid/content/ISyncAdapter$Stub$Proxy;->startSync(Landroid/content/ISyncContext;Ljava/lang/String;Landroid/accounts/Account;Landroid/os/Bundle;)V
+HPLandroid/content/ISyncAdapter$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncAdapter;
+HPLandroid/content/ISyncContext$Stub$Proxy;->onFinished(Landroid/content/SyncResult;)V
+HPLandroid/content/ISyncContext$Stub;-><init>()V
+HPLandroid/content/ISyncContext$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/content/ISyncContext$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/content/ISyncStatusObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/content/ISyncStatusObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/content/ISyncStatusObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncStatusObserver;
+HPLandroid/content/Intent$1;->newArray(I)[Landroid/content/Intent;
+HPLandroid/content/Intent$1;->newArray(I)[Ljava/lang/Object;
+HPLandroid/content/Intent$CommandOptionHandler;->handleOption(Ljava/lang/String;Landroid/os/ShellCommand;)Z
+HPLandroid/content/Intent$FilterComparison;->getIntent()Landroid/content/Intent;
+HPLandroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;Landroid/content/Context;Ljava/lang/Class;)V
+HPLandroid/content/Intent;->canStripForHistory()Z
+HPLandroid/content/Intent;->cloneFilter()Landroid/content/Intent;
+HPLandroid/content/Intent;->createChooser(Landroid/content/Intent;Ljava/lang/CharSequence;)Landroid/content/Intent;
+HPLandroid/content/Intent;->createChooser(Landroid/content/Intent;Ljava/lang/CharSequence;Landroid/content/IntentSender;)Landroid/content/Intent;
+HPLandroid/content/Intent;->describeContents()I
+HPLandroid/content/Intent;->fillIn(Landroid/content/Intent;I)I
+HPLandroid/content/Intent;->getByteArrayExtra(Ljava/lang/String;)[B
+HPLandroid/content/Intent;->getContentUserHint()I
+HPLandroid/content/Intent;->getFloatExtra(Ljava/lang/String;F)F
+HPLandroid/content/Intent;->getLaunchToken()Ljava/lang/String;
+HPLandroid/content/Intent;->getParcelableArrayExtra(Ljava/lang/String;)[Landroid/os/Parcelable;
+HPLandroid/content/Intent;->getSourceBounds()Landroid/graphics/Rect;
+HPLandroid/content/Intent;->getStringArrayExtra(Ljava/lang/String;)[Ljava/lang/String;
+HPLandroid/content/Intent;->hasFileDescriptors()Z
+HPLandroid/content/Intent;->isAccessUriMode(I)Z
+HPLandroid/content/Intent;->isDocument()Z
+HPLandroid/content/Intent;->makeMainActivity(Landroid/content/ComponentName;)Landroid/content/Intent;
+HPLandroid/content/Intent;->makeMainSelectorActivity(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;
+HPLandroid/content/Intent;->makeRestartActivityTask(Landroid/content/ComponentName;)Landroid/content/Intent;
+HPLandroid/content/Intent;->maybeStripForHistory()Landroid/content/Intent;
+HPLandroid/content/Intent;->parseCommandArgs(Landroid/os/ShellCommand;Landroid/content/Intent$CommandOptionHandler;)Landroid/content/Intent;
+HPLandroid/content/Intent;->parseIntent(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/content/Intent;
+HPLandroid/content/Intent;->putExtra(Ljava/lang/String;F)Landroid/content/Intent;
+HPLandroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/io/Serializable;)Landroid/content/Intent;
+HPLandroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/content/Intent;
+HPLandroid/content/Intent;->putExtra(Ljava/lang/String;[B)Landroid/content/Intent;
+HPLandroid/content/Intent;->putExtra(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/Intent;
+HPLandroid/content/Intent;->putParcelableArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;
+HPLandroid/content/Intent;->putStringArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;
+HPLandroid/content/Intent;->replaceExtras(Landroid/content/Intent;)Landroid/content/Intent;
+HPLandroid/content/Intent;->restoreFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/content/Intent;
+HPLandroid/content/Intent;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLandroid/content/Intent;->setSelector(Landroid/content/Intent;)V
+HPLandroid/content/Intent;->setSourceBounds(Landroid/graphics/Rect;)V
+HPLandroid/content/Intent;->toShortString(ZZZZ)Ljava/lang/String;
+HPLandroid/content/IntentFilter$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/IntentFilter;
+HPLandroid/content/IntentFilter$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/content/IntentFilter$AuthorityEntry;->-get0(Landroid/content/IntentFilter$AuthorityEntry;)Ljava/lang/String;
+HPLandroid/content/IntentFilter$AuthorityEntry;->-get1(Landroid/content/IntentFilter$AuthorityEntry;)I
+HPLandroid/content/IntentFilter$AuthorityEntry;->-get2(Landroid/content/IntentFilter$AuthorityEntry;)Z
+HPLandroid/content/IntentFilter$AuthorityEntry;->match(Landroid/net/Uri;)I
+HPLandroid/content/IntentFilter;-><init>(Landroid/content/IntentFilter;)V
+HPLandroid/content/IntentFilter;->addDataPath(Landroid/os/PatternMatcher;)V
+HPLandroid/content/IntentFilter;->addDataPath(Ljava/lang/String;I)V
+HPLandroid/content/IntentFilter;->dump(Landroid/util/Printer;Ljava/lang/String;)V
+HPLandroid/content/IntentFilter;->findMimeType(Ljava/lang/String;)Z
+HPLandroid/content/IntentFilter;->getDataScheme(I)Ljava/lang/String;
+HPLandroid/content/IntentFilter;->hasDataPath(Ljava/lang/String;)Z
+HPLandroid/content/IntentFilter;->hasDataScheme(Ljava/lang/String;)Z
+HPLandroid/content/IntentFilter;->hasDataSchemeSpecificPart(Ljava/lang/String;)Z
+HPLandroid/content/IntentFilter;->isImplicitlyVisibleToInstantApp()Z
+HPLandroid/content/IntentFilter;->isVisibleToInstantApp()Z
+HPLandroid/content/IntentFilter;->match(Landroid/content/ContentResolver;Landroid/content/Intent;ZLjava/lang/String;)I
+HPLandroid/content/IntentFilter;->matchDataAuthority(Landroid/net/Uri;)I
+HPLandroid/content/IntentFilter;->needsVerification()Z
+HPLandroid/content/IntentFilter;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLandroid/content/IntentSender$1;-><init>()V
+HPLandroid/content/IntentSender;-><init>(Landroid/content/IIntentSender;)V
+HPLandroid/content/IntentSender;->sendIntent(Landroid/content/Context;ILandroid/content/Intent;Landroid/content/IntentSender$OnFinished;Landroid/os/Handler;)V
+HPLandroid/content/IntentSender;->sendIntent(Landroid/content/Context;ILandroid/content/Intent;Landroid/content/IntentSender$OnFinished;Landroid/os/Handler;Ljava/lang/String;)V
+HPLandroid/content/ServiceConnection;->onBindingDied(Landroid/content/ComponentName;)V
+HPLandroid/content/SyncAdapterType;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/content/SyncAdapterType;->allowParallelSyncs()Z
+HPLandroid/content/SyncAdapterType;->equals(Ljava/lang/Object;)Z
+HPLandroid/content/SyncAdapterType;->hashCode()I
+HPLandroid/content/SyncAdapterType;->isAlwaysSyncable()Z
+HPLandroid/content/SyncAdapterType;->newKey(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SyncAdapterType;
+HPLandroid/content/SyncAdapterType;->supportsUploading()Z
+HPLandroid/content/SyncAdapterType;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/SyncAdaptersCache$MySerializer;-><init>()V
+HPLandroid/content/SyncAdaptersCache$MySerializer;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/content/SyncAdapterType;
+HPLandroid/content/SyncAdaptersCache$MySerializer;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Ljava/lang/Object;
+HPLandroid/content/SyncAdaptersCache;-><init>(Landroid/content/Context;)V
+HPLandroid/content/SyncAdaptersCache;->getSyncAdapterPackagesForAuthority(Ljava/lang/String;I)[Ljava/lang/String;
+HPLandroid/content/SyncAdaptersCache;->onServicesChangedLocked(I)V
+HPLandroid/content/SyncAdaptersCache;->parseServiceAttributes(Landroid/content/res/Resources;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/content/SyncAdapterType;
+HPLandroid/content/SyncAdaptersCache;->parseServiceAttributes(Landroid/content/res/Resources;Ljava/lang/String;Landroid/util/AttributeSet;)Ljava/lang/Object;
+HPLandroid/content/SyncContext;->onFinished(Landroid/content/SyncResult;)V
+HPLandroid/content/SyncInfo$1;-><init>()V
+HPLandroid/content/SyncInfo;-><init>(ILandroid/accounts/Account;Ljava/lang/String;J)V
+HPLandroid/content/SyncRequest$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/SyncRequest;
+HPLandroid/content/SyncRequest$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/content/SyncRequest;-><init>(Landroid/os/Parcel;)V
+HPLandroid/content/SyncRequest;-><init>(Landroid/os/Parcel;Landroid/content/SyncRequest;)V
+HPLandroid/content/SyncRequest;->getAccount()Landroid/accounts/Account;
+HPLandroid/content/SyncRequest;->getBundle()Landroid/os/Bundle;
+HPLandroid/content/SyncRequest;->getProvider()Ljava/lang/String;
+HPLandroid/content/SyncRequest;->getSyncFlexTime()J
+HPLandroid/content/SyncRequest;->getSyncRunTime()J
+HPLandroid/content/SyncRequest;->isPeriodic()Z
+HPLandroid/content/SyncResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/SyncResult;
+HPLandroid/content/SyncResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/content/SyncResult;-><init>(Landroid/os/Parcel;)V
+HPLandroid/content/SyncResult;-><init>(Landroid/os/Parcel;Landroid/content/SyncResult;)V
+HPLandroid/content/SyncResult;->hasError()Z
+HPLandroid/content/SyncResult;->hasHardError()Z
+HPLandroid/content/SyncResult;->hasSoftError()Z
+HPLandroid/content/SyncResult;->toDebugString()Ljava/lang/String;
+HPLandroid/content/SyncResult;->toString()Ljava/lang/String;
+HPLandroid/content/SyncResult;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/SyncStats;-><init>(Landroid/os/Parcel;)V
+HPLandroid/content/SyncStats;->toString()Ljava/lang/String;
+HPLandroid/content/SyncStats;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/SyncStatusInfo$1;-><init>()V
+HPLandroid/content/SyncStatusInfo;-><init>(Landroid/os/Parcel;)V
+HPLandroid/content/SyncStatusInfo;->addEvent(Ljava/lang/String;)V
+HPLandroid/content/SyncStatusInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/UndoManager$UndoState;-><init>(Landroid/content/UndoManager;I)V
+HPLandroid/content/UndoManager$UndoState;->addOperation(Landroid/content/UndoOperation;)V
+HPLandroid/content/UndoManager$UndoState;->canMerge()Z
+HPLandroid/content/UndoManager$UndoState;->commit()V
+HPLandroid/content/UndoManager$UndoState;->destroy()V
+HPLandroid/content/UndoManager$UndoState;->getCommitId()I
+HPLandroid/content/UndoManager$UndoState;->getLastOperation(Ljava/lang/Class;Landroid/content/UndoOwner;)Landroid/content/UndoOperation;
+HPLandroid/content/UndoManager$UndoState;->hasData()Z
+HPLandroid/content/UndoManager$UndoState;->hasMultipleOwners()Z
+HPLandroid/content/UndoManager$UndoState;->hasOperation(Landroid/content/UndoOwner;)Z
+HPLandroid/content/UndoManager$UndoState;->makeExecuted()V
+HPLandroid/content/UndoManager$UndoState;->matchOwner(Landroid/content/UndoOwner;)Z
+HPLandroid/content/UndoManager$UndoState;->setCanMerge(Z)Z
+HPLandroid/content/UndoManager$UndoState;->updateLabel(Ljava/lang/CharSequence;)V
+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;->commitState(Landroid/content/UndoOwner;)I
+HPLandroid/content/UndoManager;->createWorkingState()V
+HPLandroid/content/UndoManager;->endUpdate()V
+HPLandroid/content/UndoManager;->findPrevState(Ljava/util/ArrayList;[Landroid/content/UndoOwner;I)I
+HPLandroid/content/UndoManager;->getLastOperation(Ljava/lang/Class;Landroid/content/UndoOwner;I)Landroid/content/UndoOperation;
+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
+HPLandroid/content/UndoManager;->saveOwner(Landroid/content/UndoOwner;Landroid/os/Parcel;)V
+HPLandroid/content/UndoOperation;-><init>(Landroid/content/UndoOwner;)V
+HPLandroid/content/UndoOperation;->allowMerge()Z
+HPLandroid/content/UndoOperation;->commit()V
+HPLandroid/content/UndoOperation;->getOwner()Landroid/content/UndoOwner;
+HPLandroid/content/UndoOperation;->getOwnerData()Ljava/lang/Object;
+HPLandroid/content/UndoOperation;->hasData()Z
+HPLandroid/content/UndoOperation;->matchOwner(Landroid/content/UndoOwner;)Z
+HPLandroid/content/UndoOperation;->redo()V
+HPLandroid/content/UndoOperation;->undo()V
+HPLandroid/content/UndoOwner;->getData()Ljava/lang/Object;
+HPLandroid/content/om/IOverlayManager$Stub;-><init>()V
+HPLandroid/content/om/IOverlayManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/content/om/OverlayInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V
+HPLandroid/content/om/OverlayInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/pm/ActivityInfo$WindowLayout;-><init>(IFIFIII)V
+HPLandroid/content/pm/ActivityInfo;-><init>(Landroid/content/pm/ActivityInfo;)V
+HPLandroid/content/pm/ActivityInfo;->getRealConfigChanged()I
+HPLandroid/content/pm/ActivityInfo;->isFixedOrientation(I)Z
+HPLandroid/content/pm/ActivityInfo;->isPreserveOrientationMode(I)Z
+HPLandroid/content/pm/ActivityInfo;->isResizeableMode(I)Z
+HPLandroid/content/pm/ActivityInfo;->isTranslucentOrFloating(Landroid/content/res/TypedArray;)Z
+HPLandroid/content/pm/ActivityInfo;->supportsPictureInPicture()Z
+HPLandroid/content/pm/ApplicationInfo;->getBaseCodePath()Ljava/lang/String;
+HPLandroid/content/pm/ApplicationInfo;->getBaseResourcePath()Ljava/lang/String;
+HPLandroid/content/pm/ApplicationInfo;->getSplitCodePaths()[Ljava/lang/String;
+HPLandroid/content/pm/ApplicationInfo;->hasCode()Z
+HPLandroid/content/pm/ApplicationInfo;->isEncryptionAware()Z
+HPLandroid/content/pm/ApplicationInfo;->isPartiallyDirectBootAware()Z
+HPLandroid/content/pm/ApplicationInfo;->toString()Ljava/lang/String;
+HPLandroid/content/pm/ApplicationInfo;->usesCompatibilityMode()Z
+HPLandroid/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
+HPLandroid/content/pm/BaseParceledListSlice;->-get0()Z
+HPLandroid/content/pm/BaseParceledListSlice;->-get2(Landroid/content/pm/BaseParceledListSlice;)Ljava/util/List;
+HPLandroid/content/pm/BaseParceledListSlice;->-wrap0(Ljava/lang/Class;Ljava/lang/Class;)V
+HPLandroid/content/pm/BaseParceledListSlice;->setInlineCountLimit(I)V
+HPLandroid/content/pm/ChangedPackages$1;-><init>()V
+HPLandroid/content/pm/ChangedPackages$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ChangedPackages;
+HPLandroid/content/pm/ChangedPackages$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/content/pm/ChangedPackages;-><init>(ILjava/util/List;)V
+HPLandroid/content/pm/ChangedPackages;-><init>(Landroid/os/Parcel;)V
+HPLandroid/content/pm/ChangedPackages;->getPackageNames()Ljava/util/List;
+HPLandroid/content/pm/ChangedPackages;->getSequenceNumber()I
+HPLandroid/content/pm/ChangedPackages;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/pm/ComponentInfo;-><init>(Landroid/content/pm/ComponentInfo;)V
+HPLandroid/content/pm/ComponentInfo;->getComponentName()Landroid/content/ComponentName;
+HPLandroid/content/pm/ComponentInfo;->isEnabled()Z
+HPLandroid/content/pm/ComponentInfo;->loadDefaultIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;
+HPLandroid/content/pm/ConfigurationInfo;-><init>()V
+HPLandroid/content/pm/ConfigurationInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/pm/FallbackCategoryProvider;->loadFallbacks()V
+HPLandroid/content/pm/FeatureInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/pm/ILauncherApps$Stub;-><init>()V
+HPLandroid/content/pm/ILauncherApps$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/content/pm/IOnAppsChangedListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/content/pm/IOnAppsChangedListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/content/pm/IOnAppsChangedListener$Stub$Proxy;->onPackageChanged(Landroid/os/UserHandle;Ljava/lang/String;)V
+HPLandroid/content/pm/IOnAppsChangedListener$Stub$Proxy;->onShortcutChanged(Landroid/os/UserHandle;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
+HPLandroid/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
+HPLandroid/content/pm/IOnPermissionsChangeListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/content/pm/IOnPermissionsChangeListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/content/pm/IOnPermissionsChangeListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IOnPermissionsChangeListener;
+HPLandroid/content/pm/IOtaDexopt$Stub;-><init>()V
+HPLandroid/content/pm/IOtaDexopt;->cleanup()V
+HPLandroid/content/pm/IOtaDexopt;->dexoptNextPackage()V
+HPLandroid/content/pm/IOtaDexopt;->getProgress()F
+HPLandroid/content/pm/IOtaDexopt;->isDone()Z
+HPLandroid/content/pm/IOtaDexopt;->nextDexoptCommand()Ljava/lang/String;
+HPLandroid/content/pm/IOtaDexopt;->prepare()V
+HPLandroid/content/pm/IPackageInstallObserver2$Stub;-><init>()V
+HPLandroid/content/pm/IPackageInstaller$Stub$Proxy;->getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;
+HPLandroid/content/pm/IPackageInstaller$Stub;-><init>()V
+HPLandroid/content/pm/IPackageInstaller$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/content/pm/IPackageInstaller$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/content/pm/IPackageInstallerCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->onSessionActiveChanged(IZ)V
+HPLandroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->onSessionCreated(I)V
+HPLandroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->onSessionFinished(IZ)V
+HPLandroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->onSessionProgressChanged(IF)V
+HPLandroid/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;-><init>()V
+HPLandroid/content/pm/IPackageInstallerSession;->abandon()V
+HPLandroid/content/pm/IPackageInstallerSession;->addClientProgress(F)V
+HPLandroid/content/pm/IPackageInstallerSession;->close()V
+HPLandroid/content/pm/IPackageInstallerSession;->commit(Landroid/content/IntentSender;Z)V
+HPLandroid/content/pm/IPackageInstallerSession;->getNames()[Ljava/lang/String;
+HPLandroid/content/pm/IPackageInstallerSession;->openRead(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HPLandroid/content/pm/IPackageInstallerSession;->openWrite(Ljava/lang/String;JJ)Landroid/os/ParcelFileDescriptor;
+HPLandroid/content/pm/IPackageInstallerSession;->removeSplit(Ljava/lang/String;)V
+HPLandroid/content/pm/IPackageInstallerSession;->setClientProgress(F)V
+HPLandroid/content/pm/IPackageInstallerSession;->transfer(Ljava/lang/String;)V
+HPLandroid/content/pm/IPackageManager$Stub$Proxy;->getChangedPackages(II)Landroid/content/pm/ChangedPackages;
+HPLandroid/content/pm/IPackageManager$Stub$Proxy;->isInstantApp(Ljava/lang/String;I)Z
+HPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentActivityOptions(Landroid/content/ComponentName;[Landroid/content/Intent;[Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+HPLandroid/content/pm/IPackageManager$Stub$Proxy;->removeOnPermissionsChangeListener(Landroid/content/pm/IOnPermissionsChangeListener;)V
+HPLandroid/content/pm/IPackageManager$Stub$Proxy;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V
+HPLandroid/content/pm/IPackageManager$Stub$Proxy;->setApplicationEnabledSetting(Ljava/lang/String;IIILjava/lang/String;)V
+HPLandroid/content/pm/IPackageManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/content/pm/IPackageManagerNative$Stub;-><init>()V
+HPLandroid/content/pm/IPackageManagerNative$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/content/pm/IPackageManagerNative;->getNamesForUids([I)[Ljava/lang/String;
+HPLandroid/content/pm/IPackageMoveObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/content/pm/IPackageMoveObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/content/pm/IPackageMoveObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageMoveObserver;
+HPLandroid/content/pm/IPackageStatsObserver$Stub;-><init>()V
+HPLandroid/content/pm/IPackageStatsObserver;->onGetStatsCompleted(Landroid/content/pm/PackageStats;Z)V
+HPLandroid/content/pm/IShortcutService$Stub$Proxy;->reportShortcutUsed(Ljava/lang/String;Ljava/lang/String;I)V
+HPLandroid/content/pm/IShortcutService$Stub;-><init>()V
+HPLandroid/content/pm/IShortcutService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/content/pm/InstantAppRequest;-><init>(Landroid/content/pm/AuxiliaryResolveInfo;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;ILandroid/os/Bundle;Z)V
+HPLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest$1;-><init>()V
+HPLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;-><init>(Ljava/lang/String;)V
+HPLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;-><init>(Ljava/lang/String;I)V
+HPLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;->generateDigest(Ljava/lang/String;I)[[B
+HPLandroid/content/pm/InstantAppResolveInfo$InstantAppDigest;->getDigestPrefix()[I
+HPLandroid/content/pm/InstrumentationInfo;-><init>()V
+HPLandroid/content/pm/InstrumentationInfo;-><init>(Landroid/content/pm/InstrumentationInfo;)V
+HPLandroid/content/pm/InstrumentationInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/pm/LauncherActivityInfo;->getIcon(I)Landroid/graphics/drawable/Drawable;
+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
+HPLandroid/content/pm/LauncherApps$CallbackMessageHandler$CallbackInfo;-><init>()V
+HPLandroid/content/pm/LauncherApps$CallbackMessageHandler$CallbackInfo;-><init>(Landroid/content/pm/LauncherApps$CallbackMessageHandler$CallbackInfo;)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
+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;
+HPLandroid/content/pm/LauncherApps$ShortcutQuery;->setShortcutIds(Ljava/util/List;)Landroid/content/pm/LauncherApps$ShortcutQuery;
+HPLandroid/content/pm/LauncherApps;->-get0(Landroid/content/pm/LauncherApps;)Ljava/util/List;
+HPLandroid/content/pm/PackageBackwardCompatibility;->modifySharedLibraries(Landroid/content/pm/PackageParser$Package;)V
+HPLandroid/content/pm/PackageBackwardCompatibility;->orgApacheHttpLegacy(Ljava/util/ArrayList;)Ljava/util/ArrayList;
+HPLandroid/content/pm/PackageInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/pm/PackageInfoLite$1;-><init>()V
+HPLandroid/content/pm/PackageInfoLite$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageInfoLite;
+HPLandroid/content/pm/PackageInfoLite$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/content/pm/PackageInfoLite;-><init>(Landroid/os/Parcel;)V
+HPLandroid/content/pm/PackageInfoLite;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageInfoLite;)V
+HPLandroid/content/pm/PackageInstaller$Session;-><init>(Landroid/content/pm/IPackageInstallerSession;)V
+HPLandroid/content/pm/PackageInstaller$Session;->addProgress(F)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;->openWrite(Ljava/lang/String;JJ)Ljava/io/OutputStream;
+HPLandroid/content/pm/PackageInstaller$SessionCallbackDelegate;->handleMessage(Landroid/os/Message;)Z
+HPLandroid/content/pm/PackageInstaller$SessionCallbackDelegate;->onSessionActiveChanged(IZ)V
+HPLandroid/content/pm/PackageInstaller$SessionCallbackDelegate;->onSessionCreated(I)V
+HPLandroid/content/pm/PackageInstaller$SessionCallbackDelegate;->onSessionFinished(IZ)V
+HPLandroid/content/pm/PackageInstaller$SessionCallbackDelegate;->onSessionProgressChanged(IF)V
+HPLandroid/content/pm/PackageInstaller$SessionInfo$1;-><init>()V
+HPLandroid/content/pm/PackageInstaller$SessionInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageInstaller$SessionInfo;
+HPLandroid/content/pm/PackageInstaller$SessionInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/content/pm/PackageInstaller$SessionInfo;-><init>()V
+HPLandroid/content/pm/PackageInstaller$SessionInfo;-><init>(Landroid/os/Parcel;)V
+HPLandroid/content/pm/PackageInstaller$SessionInfo;->getInstallerPackageName()Ljava/lang/String;
+HPLandroid/content/pm/PackageInstaller$SessionInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/pm/PackageInstaller$SessionParams$1;-><init>()V
+HPLandroid/content/pm/PackageInstaller$SessionParams;-><init>(I)V
+HPLandroid/content/pm/PackageInstaller$SessionParams;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLandroid/content/pm/PackageInstaller$SessionParams;->setInstallFlagsInternal()V
+HPLandroid/content/pm/PackageInstaller$SessionParams;->setSize(J)V
+HPLandroid/content/pm/PackageInstaller;->getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;
+HPLandroid/content/pm/PackageManager;->getPackageSizeInfo(Ljava/lang/String;Landroid/content/pm/IPackageStatsObserver;)V
+HPLandroid/content/pm/PackageManager;->installStatusToPublicStatus(I)I
+HPLandroid/content/pm/PackageManager;->installStatusToString(I)Ljava/lang/String;
+HPLandroid/content/pm/PackageManager;->installStatusToString(ILjava/lang/String;)Ljava/lang/String;
+HPLandroid/content/pm/PackageManager;->permissionFlagToString(I)Ljava/lang/String;
+HPLandroid/content/pm/PackageManagerInternal$ExternalSourcesPolicy;->getPackageTrustedToInstallApps(Ljava/lang/String;I)I
+HPLandroid/content/pm/PackageManagerInternal$SyncAdapterPackagesProvider;->getPackages(Ljava/lang/String;I)[Ljava/lang/String;
+HPLandroid/content/pm/PackageManagerInternal;-><init>()V
+HPLandroid/content/pm/PackageManagerInternal;->addIsolatedUid(II)V
+HPLandroid/content/pm/PackageManagerInternal;->canAccessInstantApps(II)Z
+HPLandroid/content/pm/PackageManagerInternal;->getActivityInfo(Landroid/content/ComponentName;III)Landroid/content/pm/ActivityInfo;
+HPLandroid/content/pm/PackageManagerInternal;->getApplicationInfo(Ljava/lang/String;III)Landroid/content/pm/ApplicationInfo;
+HPLandroid/content/pm/PackageManagerInternal;->getHomeActivitiesAsUser(Ljava/util/List;I)Landroid/content/ComponentName;
+HPLandroid/content/pm/PackageManagerInternal;->getNameForUid(I)Ljava/lang/String;
+HPLandroid/content/pm/PackageManagerInternal;->getOverlayPackages(I)Ljava/util/List;
+HPLandroid/content/pm/PackageManagerInternal;->getPackageInfo(Ljava/lang/String;III)Landroid/content/pm/PackageInfo;
+HPLandroid/content/pm/PackageManagerInternal;->getSetupWizardPackageName()Ljava/lang/String;
+HPLandroid/content/pm/PackageManagerInternal;->getTargetPackageNames(I)Ljava/util/List;
+HPLandroid/content/pm/PackageManagerInternal;->getUidTargetSdkVersion(I)I
+HPLandroid/content/pm/PackageManagerInternal;->grantDefaultPermissionsToDefaultDialerApp(Ljava/lang/String;I)V
+HPLandroid/content/pm/PackageManagerInternal;->grantDefaultPermissionsToDefaultSimCallManager(Ljava/lang/String;I)V
+HPLandroid/content/pm/PackageManagerInternal;->grantDefaultPermissionsToDefaultSmsApp(Ljava/lang/String;I)V
+HPLandroid/content/pm/PackageManagerInternal;->grantEphemeralAccess(ILandroid/content/Intent;II)V
+HPLandroid/content/pm/PackageManagerInternal;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;IZ)V
+HPLandroid/content/pm/PackageManagerInternal;->hasInstantApplicationMetadata(Ljava/lang/String;I)Z
+HPLandroid/content/pm/PackageManagerInternal;->isInstantAppInstallerComponent(Landroid/content/ComponentName;)Z
+HPLandroid/content/pm/PackageManagerInternal;->isPackageDataProtected(ILjava/lang/String;)Z
+HPLandroid/content/pm/PackageManagerInternal;->isPackageEphemeral(ILjava/lang/String;)Z
+HPLandroid/content/pm/PackageManagerInternal;->isPackagePersistent(Ljava/lang/String;)Z
+HPLandroid/content/pm/PackageManagerInternal;->isPermissionsReviewRequired(Ljava/lang/String;I)Z
+HPLandroid/content/pm/PackageManagerInternal;->pruneInstantApps()V
+HPLandroid/content/pm/PackageManagerInternal;->queryIntentActivities(Landroid/content/Intent;III)Ljava/util/List;
+HPLandroid/content/pm/PackageManagerInternal;->removeIsolatedUid(I)V
+HPLandroid/content/pm/PackageManagerInternal;->requestInstantAppResolutionPhaseTwo(Landroid/content/pm/AuxiliaryResolveInfo;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;I)V
+HPLandroid/content/pm/PackageManagerInternal;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo;
+HPLandroid/content/pm/PackageManagerInternal;->resolveService(Landroid/content/Intent;Ljava/lang/String;III)Landroid/content/pm/ResolveInfo;
+HPLandroid/content/pm/PackageManagerInternal;->revokeRuntimePermission(Ljava/lang/String;Ljava/lang/String;IZ)V
+HPLandroid/content/pm/PackageManagerInternal;->setDeviceAndProfileOwnerPackages(ILjava/lang/String;Landroid/util/SparseArray;)V
+HPLandroid/content/pm/PackageManagerInternal;->setDialerAppPackagesProvider(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+HPLandroid/content/pm/PackageManagerInternal;->setEnabledOverlayPackages(ILjava/lang/String;Ljava/util/List;)Z
+HPLandroid/content/pm/PackageManagerInternal;->setExternalSourcesPolicy(Landroid/content/pm/PackageManagerInternal$ExternalSourcesPolicy;)V
+HPLandroid/content/pm/PackageManagerInternal;->setKeepUninstalledPackages(Ljava/util/List;)V
+HPLandroid/content/pm/PackageManagerInternal;->setLocationPackagesProvider(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+HPLandroid/content/pm/PackageManagerInternal;->setSimCallManagerPackagesProvider(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+HPLandroid/content/pm/PackageManagerInternal;->setSmsAppPackagesProvider(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+HPLandroid/content/pm/PackageManagerInternal;->setSyncAdapterPackagesprovider(Landroid/content/pm/PackageManagerInternal$SyncAdapterPackagesProvider;)V
+HPLandroid/content/pm/PackageManagerInternal;->setVoiceInteractionPackagesProvider(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+HPLandroid/content/pm/PackageManagerInternal;->wasPackageEverLaunched(Ljava/lang/String;I)Z
+HPLandroid/content/pm/PackageParser$Activity;->-wrap0(Landroid/content/pm/PackageParser$Activity;)Z
+HPLandroid/content/pm/PackageParser$Activity;->-wrap1(Landroid/content/pm/PackageParser$Activity;F)V
+HPLandroid/content/pm/PackageParser$Activity;-><init>(Landroid/content/pm/PackageParser$ParseComponentArgs;Landroid/content/pm/ActivityInfo;)V
+HPLandroid/content/pm/PackageParser$Activity;->hasMaxAspectRatio()Z
+HPLandroid/content/pm/PackageParser$Activity;->setMaxAspectRatio(F)V
+HPLandroid/content/pm/PackageParser$ActivityIntentInfo;-><init>(Landroid/content/pm/PackageParser$Activity;)V
+HPLandroid/content/pm/PackageParser$ApkLite;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;IIILjava/util/List;[Landroid/content/pm/Signature;[[Ljava/security/cert/Certificate;ZZZZZZ)V
+HPLandroid/content/pm/PackageParser$CachedComponentArgs;-><init>()V
+HPLandroid/content/pm/PackageParser$CachedComponentArgs;-><init>(Landroid/content/pm/PackageParser$CachedComponentArgs;)V
+HPLandroid/content/pm/PackageParser$Component;-><init>(Landroid/content/pm/PackageParser$ParseComponentArgs;Landroid/content/pm/ComponentInfo;)V
+HPLandroid/content/pm/PackageParser$Component;-><init>(Landroid/content/pm/PackageParser$ParsePackageItemArgs;Landroid/content/pm/PackageItemInfo;)V
+HPLandroid/content/pm/PackageParser$Component;->appendComponentShortName(Ljava/lang/StringBuilder;)V
+HPLandroid/content/pm/PackageParser$Component;->printComponentShortName(Ljava/io/PrintWriter;)V
+HPLandroid/content/pm/PackageParser$Instrumentation;-><init>(Landroid/content/pm/PackageParser$ParsePackageItemArgs;Landroid/content/pm/InstrumentationInfo;)V
+HPLandroid/content/pm/PackageParser$IntentInfo;-><init>()V
+HPLandroid/content/pm/PackageParser$Package;-><init>(Ljava/lang/String;)V
+HPLandroid/content/pm/PackageParser$Package;->canHaveOatDir()Z
+HPLandroid/content/pm/PackageParser$Package;->getAllCodePaths()Ljava/util/List;
+HPLandroid/content/pm/PackageParser$Package;->getAllCodePathsExcludingResourceOnly()Ljava/util/List;
+HPLandroid/content/pm/PackageParser$Package;->hasComponentClassName(Ljava/lang/String;)Z
+HPLandroid/content/pm/PackageParser$Package;->isForwardLocked()Z
+HPLandroid/content/pm/PackageParser$Package;->isLibrary()Z
+HPLandroid/content/pm/PackageParser$Package;->isMatch(I)Z
+HPLandroid/content/pm/PackageParser$Package;->setApplicationInfoFlags(II)V
+HPLandroid/content/pm/PackageParser$Package;->setBaseCodePath(Ljava/lang/String;)V
+HPLandroid/content/pm/PackageParser$Package;->setCodePath(Ljava/lang/String;)V
+HPLandroid/content/pm/PackageParser$Package;->setSignatures([Landroid/content/pm/Signature;)V
+HPLandroid/content/pm/PackageParser$Package;->setSplitCodePaths([Ljava/lang/String;)V
+HPLandroid/content/pm/PackageParser$Package;->setUse32bitAbi(Z)V
+HPLandroid/content/pm/PackageParser$Package;->setVolumeUuid(Ljava/lang/String;)V
+HPLandroid/content/pm/PackageParser$Package;->toString()Ljava/lang/String;
+HPLandroid/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
+HPLandroid/content/pm/PackageParser$PackageLite;->getAllCodePaths()Ljava/util/List;
+HPLandroid/content/pm/PackageParser$ParseComponentArgs;-><init>(Landroid/content/pm/PackageParser$Package;[Ljava/lang/String;IIIIII[Ljava/lang/String;III)V
+HPLandroid/content/pm/PackageParser$ParsePackageItemArgs;-><init>(Landroid/content/pm/PackageParser$Package;[Ljava/lang/String;IIIIII)V
+HPLandroid/content/pm/PackageParser$Permission;-><init>(Landroid/content/pm/PackageParser$Package;)V
+HPLandroid/content/pm/PackageParser$Permission;->toString()Ljava/lang/String;
+HPLandroid/content/pm/PackageParser$Provider;-><init>(Landroid/content/pm/PackageParser$ParseComponentArgs;Landroid/content/pm/ProviderInfo;)V
+HPLandroid/content/pm/PackageParser$Provider;->toString()Ljava/lang/String;
+HPLandroid/content/pm/PackageParser$ProviderIntentInfo;-><init>(Landroid/content/pm/PackageParser$Provider;)V
+HPLandroid/content/pm/PackageParser$Service;-><init>(Landroid/content/pm/PackageParser$ParseComponentArgs;Landroid/content/pm/ServiceInfo;)V
+HPLandroid/content/pm/PackageParser$ServiceIntentInfo;-><init>(Landroid/content/pm/PackageParser$Service;)V
+HPLandroid/content/pm/PackageParser;->-wrap0(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageItemInfo;[Ljava/lang/String;Ljava/lang/String;Landroid/content/res/TypedArray;ZIIIIII)Z
+HPLandroid/content/pm/PackageParser;->-wrap1(Ljava/lang/String;Ljava/lang/String;Ljava/lang/CharSequence;I[Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/content/pm/PackageParser;->buildClassName(Ljava/lang/String;Ljava/lang/CharSequence;[Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/content/pm/PackageParser;->buildCompoundName(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/content/pm/PackageParser;->buildProcessName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/CharSequence;I[Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/content/pm/PackageParser;->buildTaskAffinityName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/CharSequence;[Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/content/pm/PackageParser;->cacheResult(Ljava/io/File;ILandroid/content/pm/PackageParser$Package;)V
+HPLandroid/content/pm/PackageParser;->computeMinSdkVersion(ILjava/lang/String;I[Ljava/lang/String;[Ljava/lang/String;)I
+HPLandroid/content/pm/PackageParser;->computeTargetSdkVersion(ILjava/lang/String;I[Ljava/lang/String;[Ljava/lang/String;)I
+HPLandroid/content/pm/PackageParser;->generateApplicationInfo(Landroid/content/pm/PackageParser$Package;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ApplicationInfo;
+HPLandroid/content/pm/PackageParser;->generateInstrumentationInfo(Landroid/content/pm/PackageParser$Instrumentation;I)Landroid/content/pm/InstrumentationInfo;
+HPLandroid/content/pm/PackageParser;->generatePackageInfo(Landroid/content/pm/PackageParser$Package;[IIJJLjava/util/Set;Landroid/content/pm/PackageUserState;I)Landroid/content/pm/PackageInfo;
+HPLandroid/content/pm/PackageParser;->generatePermissionInfo(Landroid/content/pm/PackageParser$Permission;I)Landroid/content/pm/PermissionInfo;
+HPLandroid/content/pm/PackageParser;->generateProviderInfo(Landroid/content/pm/PackageParser$Provider;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ProviderInfo;
+HPLandroid/content/pm/PackageParser;->generateServiceInfo(Landroid/content/pm/PackageParser$Service;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ServiceInfo;
+HPLandroid/content/pm/PackageParser;->getActivityConfigChanges(II)I
+HPLandroid/content/pm/PackageParser;->getApkSigningVersion(Landroid/content/pm/PackageParser$Package;)I
+HPLandroid/content/pm/PackageParser;->hasDomainURLs(Landroid/content/pm/PackageParser$Package;)Z
+HPLandroid/content/pm/PackageParser;->isAvailable(Landroid/content/pm/PackageUserState;)Z
+HPLandroid/content/pm/PackageParser;->isImplicitlyExposedIntent(Landroid/content/pm/PackageParser$IntentInfo;)Z
+HPLandroid/content/pm/PackageParser;->loadApkIntoAssetManager(Landroid/content/res/AssetManager;Ljava/lang/String;I)I
+HPLandroid/content/pm/PackageParser;->newConfiguredAssetManager()Landroid/content/res/AssetManager;
+HPLandroid/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;
+HPLandroid/content/pm/PackageParser;->parseActivityAlias(Landroid/content/pm/PackageParser$Package;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;Landroid/content/pm/PackageParser$CachedComponentArgs;)Landroid/content/pm/PackageParser$Activity;
+HPLandroid/content/pm/PackageParser;->parseAllMetaData(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Ljava/lang/String;Landroid/content/pm/PackageParser$Component;[Ljava/lang/String;)Z
+HPLandroid/content/pm/PackageParser;->parseApkLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$ApkLite;
+HPLandroid/content/pm/PackageParser;->parseApkLite(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;[Landroid/content/pm/Signature;[[Ljava/security/cert/Certificate;)Landroid/content/pm/PackageParser$ApkLite;
+HPLandroid/content/pm/PackageParser;->parseBaseApk(Ljava/io/File;Landroid/content/res/AssetManager;I)Landroid/content/pm/PackageParser$Package;
+HPLandroid/content/pm/PackageParser;->parseBaseApk(Ljava/lang/String;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;)Landroid/content/pm/PackageParser$Package;
+HPLandroid/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;
+HPLandroid/content/pm/PackageParser;->parseBaseApplication(Landroid/content/pm/PackageParser$Package;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;)Z
+HPLandroid/content/pm/PackageParser;->parseInstrumentation(Landroid/content/pm/PackageParser$Package;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;[Ljava/lang/String;)Landroid/content/pm/PackageParser$Instrumentation;
+HPLandroid/content/pm/PackageParser;->parseIntent(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ZZLandroid/content/pm/PackageParser$IntentInfo;[Ljava/lang/String;)Z
+HPLandroid/content/pm/PackageParser;->parseLayout(Landroid/content/res/Resources;Landroid/util/AttributeSet;Landroid/content/pm/PackageParser$Activity;)V
+HPLandroid/content/pm/PackageParser;->parseMetaData(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/os/Bundle;[Ljava/lang/String;)Landroid/os/Bundle;
+HPLandroid/content/pm/PackageParser;->parsePackage(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package;
+HPLandroid/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
+HPLandroid/content/pm/PackageParser;->parsePackageLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$PackageLite;
+HPLandroid/content/pm/PackageParser;->parsePackageSplitNames(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/util/Pair;
+HPLandroid/content/pm/PackageParser;->parsePermission(Landroid/content/pm/PackageParser$Package;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;[Ljava/lang/String;)Z
+HPLandroid/content/pm/PackageParser;->parseProvider(Landroid/content/pm/PackageParser$Package;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;Landroid/content/pm/PackageParser$CachedComponentArgs;)Landroid/content/pm/PackageParser$Provider;
+HPLandroid/content/pm/PackageParser;->parseProviderTags(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ZLandroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageParser$Provider;[Ljava/lang/String;)Z
+HPLandroid/content/pm/PackageParser;->parseService(Landroid/content/pm/PackageParser$Package;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;Landroid/content/pm/PackageParser$CachedComponentArgs;)Landroid/content/pm/PackageParser$Service;
+HPLandroid/content/pm/PackageParser;->parseUsesFeature(Landroid/content/res/Resources;Landroid/util/AttributeSet;)Landroid/content/pm/FeatureInfo;
+HPLandroid/content/pm/PackageParser;->parseUsesPermission(Landroid/content/pm/PackageParser$Package;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Z
+HPLandroid/content/pm/PackageParser;->populateCertificates(Landroid/content/pm/PackageParser$Package;[[Ljava/security/cert/Certificate;)V
+HPLandroid/content/pm/PackageParser;->setActivityResizeMode(Landroid/content/pm/ActivityInfo;Landroid/content/res/TypedArray;Landroid/content/pm/PackageParser$Package;)V
+HPLandroid/content/pm/PackageParser;->setCompatibilityModeEnabled(Z)V
+HPLandroid/content/pm/PackageParser;->setMaxAspectRatio(Landroid/content/pm/PackageParser$Package;)V
+HPLandroid/content/pm/PackageParser;->validateName(Ljava/lang/String;ZZ)Ljava/lang/String;
+HPLandroid/content/pm/PackageStats$1;-><init>()V
+HPLandroid/content/pm/PackageStats;-><init>(Ljava/lang/String;)V
+HPLandroid/content/pm/ParceledListSlice;->emptyList()Landroid/content/pm/ParceledListSlice;
+HPLandroid/content/pm/ParceledListSlice;->setInlineCountLimit(I)V
+HPLandroid/content/pm/PathPermission;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+HPLandroid/content/pm/PermissionInfo$1;->newArray(I)[Landroid/content/pm/PermissionInfo;
+HPLandroid/content/pm/PermissionInfo$1;->newArray(I)[Ljava/lang/Object;
+HPLandroid/content/pm/PermissionInfo;->protectionToString(I)Ljava/lang/String;
+HPLandroid/content/pm/PermissionInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/pm/ProviderInfo;-><init>()V
+HPLandroid/content/pm/ProviderInfo;-><init>(Landroid/content/pm/ProviderInfo;)V
+HPLandroid/content/pm/ProviderInfo;->toString()Ljava/lang/String;
+HPLandroid/content/pm/RegisteredServicesCache$1;-><init>(Landroid/content/pm/RegisteredServicesCache;)V
+HPLandroid/content/pm/RegisteredServicesCache$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLandroid/content/pm/RegisteredServicesCache$2;-><init>(Landroid/content/pm/RegisteredServicesCache;)V
+HPLandroid/content/pm/RegisteredServicesCache$3;-><init>(Landroid/content/pm/RegisteredServicesCache;)V
+HPLandroid/content/pm/RegisteredServicesCache$ServiceInfo;-><init>(Ljava/lang/Object;Landroid/content/pm/ComponentInfo;Landroid/content/ComponentName;)V
+HPLandroid/content/pm/RegisteredServicesCache$UserServices;-><init>()V
+HPLandroid/content/pm/RegisteredServicesCache$UserServices;-><init>(Landroid/content/pm/RegisteredServicesCache$UserServices;)V
+HPLandroid/content/pm/RegisteredServicesCache;->-wrap0(Landroid/content/pm/RegisteredServicesCache;Landroid/content/Intent;I)V
+HPLandroid/content/pm/RegisteredServicesCache;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/XmlSerializerAndParser;)V
+HPLandroid/content/pm/RegisteredServicesCache;->containsType(Ljava/util/ArrayList;Ljava/lang/Object;)Z
+HPLandroid/content/pm/RegisteredServicesCache;->createFileForUser(I)Landroid/util/AtomicFile;
+HPLandroid/content/pm/RegisteredServicesCache;->findOrCreateUserLocked(I)Landroid/content/pm/RegisteredServicesCache$UserServices;
+HPLandroid/content/pm/RegisteredServicesCache;->findOrCreateUserLocked(IZ)Landroid/content/pm/RegisteredServicesCache$UserServices;
+HPLandroid/content/pm/RegisteredServicesCache;->generateServicesMap([II)V
+HPLandroid/content/pm/RegisteredServicesCache;->getAllServices(I)Ljava/util/Collection;
+HPLandroid/content/pm/RegisteredServicesCache;->getDataDirectory()Ljava/io/File;
+HPLandroid/content/pm/RegisteredServicesCache;->getServiceInfo(Ljava/lang/Object;I)Landroid/content/pm/RegisteredServicesCache$ServiceInfo;
+HPLandroid/content/pm/RegisteredServicesCache;->getUser(I)Landroid/content/pm/UserInfo;
+HPLandroid/content/pm/RegisteredServicesCache;->getUserSystemDirectory(I)Ljava/io/File;
+HPLandroid/content/pm/RegisteredServicesCache;->handlePackageEvent(Landroid/content/Intent;I)V
+HPLandroid/content/pm/RegisteredServicesCache;->invalidateCache(I)V
+HPLandroid/content/pm/RegisteredServicesCache;->migrateIfNecessaryLocked()V
+HPLandroid/content/pm/RegisteredServicesCache;->onServicesChangedLocked(I)V
+HPLandroid/content/pm/RegisteredServicesCache;->parseServiceInfo(Landroid/content/pm/ResolveInfo;)Landroid/content/pm/RegisteredServicesCache$ServiceInfo;
+HPLandroid/content/pm/RegisteredServicesCache;->queryIntentServices(I)Ljava/util/List;
+HPLandroid/content/pm/RegisteredServicesCache;->readPersistentServicesLocked(Ljava/io/InputStream;)V
+HPLandroid/content/pm/RegisteredServicesCache;->setListener(Landroid/content/pm/RegisteredServicesCacheListener;Landroid/os/Handler;)V
+HPLandroid/content/pm/RegisteredServicesCache;->updateServices(I)V
+HPLandroid/content/pm/ResolveInfo;->getIconResource()I
+HPLandroid/content/pm/ResolveInfo;->getIconResourceInternal()I
+HPLandroid/content/pm/ResolveInfo;->loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
+HPLandroid/content/pm/ResolveInfo;->toString()Ljava/lang/String;
+HPLandroid/content/pm/ResolveInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/pm/ServiceInfo;-><init>()V
+HPLandroid/content/pm/ServiceInfo;-><init>(Landroid/content/pm/ServiceInfo;)V
+HPLandroid/content/pm/ServiceInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/pm/SharedLibraryInfo;->getName()Ljava/lang/String;
+HPLandroid/content/pm/SharedLibraryInfo;->isStatic()Z
+HPLandroid/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;)V
+HPLandroid/content/pm/ShortcutInfo;-><init>(Landroid/content/pm/ShortcutInfo;I)V
+HPLandroid/content/pm/ShortcutInfo;->addFlags(I)V
+HPLandroid/content/pm/ShortcutInfo;->clearFlags(I)V
+HPLandroid/content/pm/ShortcutInfo;->clearIcon()V
+HPLandroid/content/pm/ShortcutInfo;->clearImplicitRankAndRankChangedFlag()V
+HPLandroid/content/pm/ShortcutInfo;->clone(I)Landroid/content/pm/ShortcutInfo;
+HPLandroid/content/pm/ShortcutInfo;->clonePersistableBundle([Landroid/os/PersistableBundle;)[Landroid/os/PersistableBundle;
+HPLandroid/content/pm/ShortcutInfo;->copyNonNullFieldsFrom(Landroid/content/pm/ShortcutInfo;)V
+HPLandroid/content/pm/ShortcutInfo;->enforceMandatoryFields(Z)V
+HPLandroid/content/pm/ShortcutInfo;->ensureUpdatableWith(Landroid/content/pm/ShortcutInfo;)V
+HPLandroid/content/pm/ShortcutInfo;->getBitmapPath()Ljava/lang/String;
+HPLandroid/content/pm/ShortcutInfo;->getCategories()Ljava/util/Set;
+HPLandroid/content/pm/ShortcutInfo;->getDisabledMessage()Ljava/lang/CharSequence;
+HPLandroid/content/pm/ShortcutInfo;->getDisabledMessageResName()Ljava/lang/String;
+HPLandroid/content/pm/ShortcutInfo;->getDisabledMessageResourceId()I
+HPLandroid/content/pm/ShortcutInfo;->getExtras()Landroid/os/PersistableBundle;
+HPLandroid/content/pm/ShortcutInfo;->getFlags()I
+HPLandroid/content/pm/ShortcutInfo;->getIcon()Landroid/graphics/drawable/Icon;
+HPLandroid/content/pm/ShortcutInfo;->getIconResName()Ljava/lang/String;
+HPLandroid/content/pm/ShortcutInfo;->getIconResourceId()I
+HPLandroid/content/pm/ShortcutInfo;->getImplicitRank()I
+HPLandroid/content/pm/ShortcutInfo;->getIntentPersistableExtrases()[Landroid/os/PersistableBundle;
+HPLandroid/content/pm/ShortcutInfo;->getIntentsNoExtras()[Landroid/content/Intent;
+HPLandroid/content/pm/ShortcutInfo;->getLastChangedTimestamp()J
+HPLandroid/content/pm/ShortcutInfo;->getPackage()Ljava/lang/String;
+HPLandroid/content/pm/ShortcutInfo;->getRank()I
+HPLandroid/content/pm/ShortcutInfo;->getResourceEntryName(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/content/pm/ShortcutInfo;->getResourcePackageName(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/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;
+HPLandroid/content/pm/ShortcutInfo;->getText()Ljava/lang/CharSequence;
+HPLandroid/content/pm/ShortcutInfo;->getTextResId()I
+HPLandroid/content/pm/ShortcutInfo;->getTextResName()Ljava/lang/String;
+HPLandroid/content/pm/ShortcutInfo;->getTitle()Ljava/lang/CharSequence;
+HPLandroid/content/pm/ShortcutInfo;->getTitleResId()I
+HPLandroid/content/pm/ShortcutInfo;->getTitleResName()Ljava/lang/String;
+HPLandroid/content/pm/ShortcutInfo;->getUserId()I
+HPLandroid/content/pm/ShortcutInfo;->hasAnyResources()Z
+HPLandroid/content/pm/ShortcutInfo;->hasIconFile()Z
+HPLandroid/content/pm/ShortcutInfo;->hasIconResource()Z
+HPLandroid/content/pm/ShortcutInfo;->hasRank()Z
+HPLandroid/content/pm/ShortcutInfo;->hasStringResources()Z
+HPLandroid/content/pm/ShortcutInfo;->isAlive()Z
+HPLandroid/content/pm/ShortcutInfo;->isFloating()Z
+HPLandroid/content/pm/ShortcutInfo;->isIconPendingSave()Z
+HPLandroid/content/pm/ShortcutInfo;->isImmutable()Z
+HPLandroid/content/pm/ShortcutInfo;->isManifestShortcut()Z
+HPLandroid/content/pm/ShortcutInfo;->isOriginallyFromManifest()Z
+HPLandroid/content/pm/ShortcutInfo;->isPinned()Z
+HPLandroid/content/pm/ShortcutInfo;->isRankChanged()Z
+HPLandroid/content/pm/ShortcutInfo;->isReturnedByServer()Z
+HPLandroid/content/pm/ShortcutInfo;->lookUpResourceId(Landroid/content/res/Resources;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
+HPLandroid/content/pm/ShortcutInfo;->lookUpResourceName(Landroid/content/res/Resources;IZLjava/lang/String;)Ljava/lang/String;
+HPLandroid/content/pm/ShortcutInfo;->lookupAndFillInResourceIds(Landroid/content/res/Resources;)V
+HPLandroid/content/pm/ShortcutInfo;->lookupAndFillInResourceNames(Landroid/content/res/Resources;)V
+HPLandroid/content/pm/ShortcutInfo;->replaceFlags(I)V
+HPLandroid/content/pm/ShortcutInfo;->resolveResourceStrings(Landroid/content/res/Resources;)V
+HPLandroid/content/pm/ShortcutInfo;->setBitmapPath(Ljava/lang/String;)V
+HPLandroid/content/pm/ShortcutInfo;->setIconResName(Ljava/lang/String;)V
+HPLandroid/content/pm/ShortcutInfo;->setIconResourceId(I)V
+HPLandroid/content/pm/ShortcutInfo;->setImplicitRank(I)V
+HPLandroid/content/pm/ShortcutInfo;->setIntentExtras(Landroid/content/Intent;Landroid/os/PersistableBundle;)Landroid/content/Intent;
+HPLandroid/content/pm/ShortcutInfo;->setIntents([Landroid/content/Intent;)V
+HPLandroid/content/pm/ShortcutInfo;->setRank(I)V
+HPLandroid/content/pm/ShortcutInfo;->setReturnedByServer()V
+HPLandroid/content/pm/ShortcutInfo;->setTimestamp(J)V
+HPLandroid/content/pm/ShortcutManager;->reportShortcutUsed(Ljava/lang/String;)V
+HPLandroid/content/pm/ShortcutServiceInternal$ShortcutChangeListener;->onShortcutChanged(Ljava/lang/String;I)V
+HPLandroid/content/pm/ShortcutServiceInternal;-><init>()V
+HPLandroid/content/pm/ShortcutServiceInternal;->addListener(Landroid/content/pm/ShortcutServiceInternal$ShortcutChangeListener;)V
+HPLandroid/content/pm/ShortcutServiceInternal;->createShortcutIntents(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)[Landroid/content/Intent;
+HPLandroid/content/pm/ShortcutServiceInternal;->getShortcutIconFd(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Landroid/os/ParcelFileDescriptor;
+HPLandroid/content/pm/ShortcutServiceInternal;->getShortcutIconResId(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)I
+HPLandroid/content/pm/ShortcutServiceInternal;->getShortcuts(ILjava/lang/String;JLjava/lang/String;Ljava/util/List;Landroid/content/ComponentName;II)Ljava/util/List;
+HPLandroid/content/pm/ShortcutServiceInternal;->hasShortcutHostPermission(ILjava/lang/String;)Z
+HPLandroid/content/pm/ShortcutServiceInternal;->isPinnedByCaller(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Z
+HPLandroid/content/pm/ShortcutServiceInternal;->isRequestPinItemSupported(II)Z
+HPLandroid/content/pm/ShortcutServiceInternal;->pinShortcuts(ILjava/lang/String;Ljava/lang/String;Ljava/util/List;I)V
+HPLandroid/content/pm/ShortcutServiceInternal;->requestPinAppWidget(Ljava/lang/String;Landroid/appwidget/AppWidgetProviderInfo;Landroid/os/Bundle;Landroid/content/IntentSender;I)Z
+HPLandroid/content/pm/Signature;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/pm/StringParceledListSlice$1;-><init>()V
+HPLandroid/content/pm/StringParceledListSlice$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/StringParceledListSlice;
+HPLandroid/content/pm/StringParceledListSlice$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/content/pm/StringParceledListSlice;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V
+HPLandroid/content/pm/StringParceledListSlice;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;Landroid/content/pm/StringParceledListSlice;)V
+HPLandroid/content/pm/StringParceledListSlice;->getList()Ljava/util/List;
+HPLandroid/content/pm/UserInfo;->isDemo()Z
+HPLandroid/content/pm/UserInfo;->isInitialized()Z
+HPLandroid/content/pm/UserInfo;->isPrimary()Z
+HPLandroid/content/pm/UserInfo;->isQuietModeEnabled()Z
+HPLandroid/content/pm/UserInfo;->isSystemOnly()Z
+HPLandroid/content/pm/UserInfo;->isSystemOnly(I)Z
+HPLandroid/content/pm/UserInfo;->toString()Ljava/lang/String;
+HPLandroid/content/pm/UserInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/pm/split/DefaultSplitAssetLoader;-><init>(Landroid/content/pm/PackageParser$PackageLite;I)V
+HPLandroid/content/pm/split/DefaultSplitAssetLoader;->close()V
+HPLandroid/content/pm/split/DefaultSplitAssetLoader;->getBaseAssetManager()Landroid/content/res/AssetManager;
+HPLandroid/content/pm/split/DefaultSplitAssetLoader;->loadApkIntoAssetManager(Landroid/content/res/AssetManager;Ljava/lang/String;I)V
+HPLandroid/content/pm/split/SplitAssetLoader;->getBaseAssetManager()Landroid/content/res/AssetManager;
+HPLandroid/content/pm/split/SplitAssetLoader;->getSplitAssetManager(I)Landroid/content/res/AssetManager;
+HPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream;-><init>(Landroid/content/res/AssetFileDescriptor;)V
+HPLandroid/content/res/AssetFileDescriptor;->createInputStream()Ljava/io/FileInputStream;
+HPLandroid/content/res/AssetFileDescriptor;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/res/AssetManager;->close()V
+HPLandroid/content/res/AssetManager;->openXmlResourceParser(ILjava/lang/String;)Landroid/content/res/XmlResourceParser;
+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;
+HPLandroid/content/res/ColorStateList$ColorStateListFactory;->getChangingConfigurations()I
+HPLandroid/content/res/ColorStateList;->-get0(Landroid/content/res/ColorStateList;)I
+HPLandroid/content/res/ColorStateList;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/res/CompatibilityInfo;-><init>(Landroid/content/pm/ApplicationInfo;IIZ)V
+HPLandroid/content/res/CompatibilityInfo;->alwaysSupportsScreen()Z
+HPLandroid/content/res/CompatibilityInfo;->computeCompatibleScaling(Landroid/util/DisplayMetrics;Landroid/util/DisplayMetrics;)F
+HPLandroid/content/res/CompatibilityInfo;->neverSupportsScreen()Z
+HPLandroid/content/res/CompatibilityInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/content/res/Configuration;->readXmlAttrs(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Configuration;)V
+HPLandroid/content/res/Configuration;->reduceScreenLayout(III)I
+HPLandroid/content/res/Configuration;->resetScreenLayout(I)I
+HPLandroid/content/res/Configuration;->toString()Ljava/lang/String;
+HPLandroid/content/res/Configuration;->writeXmlAttrs(Lorg/xmlpull/v1/XmlSerializer;Landroid/content/res/Configuration;)V
+HPLandroid/content/res/ConfigurationBoundResourceCache;->shouldInvalidateEntry(Landroid/content/res/ConstantState;I)Z
+HPLandroid/content/res/ConfigurationBoundResourceCache;->shouldInvalidateEntry(Ljava/lang/Object;I)Z
+HPLandroid/content/res/DrawableCache;->shouldInvalidateEntry(Landroid/graphics/drawable/Drawable$ConstantState;I)Z
+HPLandroid/content/res/DrawableCache;->shouldInvalidateEntry(Ljava/lang/Object;I)Z
+HPLandroid/content/res/Resources$Theme;->getChangingConfigurations()I
+HPLandroid/content/res/Resources$Theme;->rebase()V
+HPLandroid/content/res/Resources;->flushLayoutCache()V
+HPLandroid/content/res/Resources;->getQuantityString(II)Ljava/lang/String;
+HPLandroid/content/res/Resources;->getText(ILjava/lang/CharSequence;)Ljava/lang/CharSequence;
+HPLandroid/content/res/Resources;->parseBundleExtra(Ljava/lang/String;Landroid/util/AttributeSet;Landroid/os/Bundle;)V
+HPLandroid/content/res/ResourcesImpl$ThemeImpl;->-get0(Landroid/content/res/ResourcesImpl$ThemeImpl;)Landroid/content/res/Resources$ThemeKey;
+HPLandroid/content/res/ResourcesImpl$ThemeImpl;->getChangingConfigurations()I
+HPLandroid/content/res/ResourcesImpl$ThemeImpl;->rebase()V
+HPLandroid/content/res/ResourcesImpl;->newThemeImpl(Landroid/content/res/Resources$ThemeKey;)Landroid/content/res/ResourcesImpl$ThemeImpl;
+HPLandroid/content/res/StringBlock$StyleIDs;->-get0(Landroid/content/res/StringBlock$StyleIDs;)I
+HPLandroid/content/res/StringBlock$StyleIDs;->-get1(Landroid/content/res/StringBlock$StyleIDs;)I
+HPLandroid/content/res/StringBlock$StyleIDs;->-get10(Landroid/content/res/StringBlock$StyleIDs;)I
+HPLandroid/content/res/StringBlock$StyleIDs;->-get2(Landroid/content/res/StringBlock$StyleIDs;)I
+HPLandroid/content/res/StringBlock$StyleIDs;->-get3(Landroid/content/res/StringBlock$StyleIDs;)I
+HPLandroid/content/res/StringBlock$StyleIDs;->-get4(Landroid/content/res/StringBlock$StyleIDs;)I
+HPLandroid/content/res/StringBlock$StyleIDs;->-get5(Landroid/content/res/StringBlock$StyleIDs;)I
+HPLandroid/content/res/StringBlock$StyleIDs;->-get6(Landroid/content/res/StringBlock$StyleIDs;)I
+HPLandroid/content/res/StringBlock$StyleIDs;->-get7(Landroid/content/res/StringBlock$StyleIDs;)I
+HPLandroid/content/res/StringBlock$StyleIDs;->-get8(Landroid/content/res/StringBlock$StyleIDs;)I
+HPLandroid/content/res/StringBlock$StyleIDs;->-get9(Landroid/content/res/StringBlock$StyleIDs;)I
+HPLandroid/content/res/StringBlock$StyleIDs;->-set10(Landroid/content/res/StringBlock$StyleIDs;I)I
+HPLandroid/content/res/StringBlock$StyleIDs;-><init>()V
+HPLandroid/content/res/StringBlock;->applyStyles(Ljava/lang/String;[ILandroid/content/res/StringBlock$StyleIDs;)Ljava/lang/CharSequence;
+HPLandroid/content/res/ThemedResourceCache;->pruneEntryLocked(Ljava/lang/Object;I)Z
+HPLandroid/content/res/TypedArray;->getNonConfigurationString(II)Ljava/lang/String;
+HPLandroid/content/res/TypedArray;->getNonResourceString(I)Ljava/lang/String;
+HPLandroid/content/res/XmlBlock$Parser;->getAttributeFloatValue(IF)F
+HPLandroid/content/res/XmlBlock$Parser;->getAttributeFloatValue(Ljava/lang/String;Ljava/lang/String;F)F
+HPLandroid/content/res/XmlBlock$Parser;->getAttributeIntValue(II)I
+HPLandroid/content/res/XmlBlock$Parser;->getAttributeIntValue(Ljava/lang/String;Ljava/lang/String;I)I
+HPLandroid/content/res/XmlBlock$Parser;->getIdAttributeResourceValue(I)I
+HPLandroid/content/res/XmlBlock$Parser;->nextTag()I
+HPLandroid/database/AbstractCursor;->getExtras()Landroid/os/Bundle;
+HPLandroid/database/AbstractCursor;->isBeforeFirst()Z
+HPLandroid/database/AbstractCursor;->moveToPrevious()Z
+HPLandroid/database/AbstractWindowedCursor;->getType(I)I
+HPLandroid/database/CrossProcessCursorWrapper;->fillWindow(ILandroid/database/CursorWindow;)V
+HPLandroid/database/CrossProcessCursorWrapper;->getWindow()Landroid/database/CursorWindow;
+HPLandroid/database/CursorToBulkCursorAdaptor$ContentObserverProxy;->onChange(ZLandroid/net/Uri;)V
+HPLandroid/database/CursorToBulkCursorAdaptor;->binderDied()V
+HPLandroid/database/CursorToBulkCursorAdaptor;->getExtras()Landroid/os/Bundle;
+HPLandroid/database/CursorWindow;-><init>(Z)V
+HPLandroid/database/CursorWindow;->isNull(II)Z
+HPLandroid/database/CursorWindow;->putDouble(DII)Z
+HPLandroid/database/CursorWrapper;->getDouble(I)D
+HPLandroid/database/CursorWrapper;->getType(I)I
+HPLandroid/database/CursorWrapper;->getWantsAllOnMoveCalls()Z
+HPLandroid/database/CursorWrapper;->isBeforeFirst()Z
+HPLandroid/database/CursorWrapper;->moveToLast()Z
+HPLandroid/database/CursorWrapper;->moveToPrevious()Z
+HPLandroid/database/CursorWrapper;->respond(Landroid/os/Bundle;)Landroid/os/Bundle;
+HPLandroid/database/DatabaseUtils;->appendEscapedSQLString(Ljava/lang/StringBuilder;Ljava/lang/String;)V
+HPLandroid/database/DatabaseUtils;->appendValueToSql(Ljava/lang/StringBuilder;Ljava/lang/Object;)V
+HPLandroid/database/DatabaseUtils;->concatenateWhere(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/database/DatabaseUtils;->cursorRowToContentValues(Landroid/database/Cursor;Landroid/content/ContentValues;)V
+HPLandroid/database/DatabaseUtils;->readExceptionFromParcel(Landroid/os/Parcel;Ljava/lang/String;I)V
+HPLandroid/database/DatabaseUtils;->sqlEscapeString(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/database/DatabaseUtils;->stringForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/database/DatabaseUtils;->stringForQuery(Landroid/database/sqlite/SQLiteStatement;[Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/database/IContentObserver$Stub$Proxy;->onChange(ZLandroid/net/Uri;I)V
+HPLandroid/database/sqlite/SQLiteConnection$OperationLog;->failOperation(ILjava/lang/Exception;)V
+HPLandroid/database/sqlite/SQLiteConnection;->collectDbStatsUnsafe(Ljava/util/ArrayList;)V
+HPLandroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;->handleMessage(Landroid/os/Message;)V
+HPLandroid/database/sqlite/SQLiteConnectionPool;->-get1(Landroid/database/sqlite/SQLiteConnectionPool;)Landroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;
+HPLandroid/database/sqlite/SQLiteConnectionPool;->-get2(Landroid/database/sqlite/SQLiteConnectionPool;)Ljava/lang/Object;
+HPLandroid/database/sqlite/SQLiteConnectionPool;->-wrap0(Landroid/database/sqlite/SQLiteConnectionPool;I)Z
+HPLandroid/database/sqlite/SQLiteConnectionPool;->closeAvailableConnectionLocked(I)Z
+HPLandroid/database/sqlite/SQLiteConnectionPool;->discardAcquiredConnectionsLocked()V
+HPLandroid/database/sqlite/SQLiteConstraintException;-><init>(Ljava/lang/String;)V
+HPLandroid/database/sqlite/SQLiteCursor;-><init>(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)V
+HPLandroid/database/sqlite/SQLiteCursor;->setSelectionArguments([Ljava/lang/String;)V
+HPLandroid/database/sqlite/SQLiteDatabase;->beginTransactionWithListener(Landroid/database/sqlite/SQLiteTransactionListener;)V
+HPLandroid/database/sqlite/SQLiteDatabase;->enableWriteAheadLogging()Z
+HPLandroid/database/sqlite/SQLiteDatabase;->getLabel()Ljava/lang/String;
+HPLandroid/database/sqlite/SQLiteDatabase;->insertOrThrow(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J
+HPLandroid/database/sqlite/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
+HPLandroid/database/sqlite/SQLiteDatabase;->rawQueryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
+HPLandroid/database/sqlite/SQLiteDatabase;->replaceOrThrow(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J
+HPLandroid/database/sqlite/SQLiteDatabase;->setForeignKeyConstraintsEnabled(Z)V
+HPLandroid/database/sqlite/SQLiteDatabase;->setPageSize(J)V
+HPLandroid/database/sqlite/SQLiteDirectCursorDriver;->setBindArguments([Ljava/lang/String;)V
+HPLandroid/database/sqlite/SQLiteProgram;->bindBlob(I[B)V
+HPLandroid/database/sqlite/SQLiteProgram;->bindNull(I)V
+HPLandroid/database/sqlite/SQLiteQueryBuilder;->buildUnionQuery([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/database/sqlite/SQLiteSession;->executeForString(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)Ljava/lang/String;
+HPLandroid/database/sqlite/SQLiteStatement;->simpleQueryForString()Ljava/lang/String;
+HPLandroid/ddm/DdmHandleHeap;->handleHPGC(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
+HPLandroid/drm/DrmManagerClient$EventHandler;-><init>(Landroid/drm/DrmManagerClient;Landroid/os/Looper;)V
+HPLandroid/drm/DrmManagerClient$InfoHandler;-><init>(Landroid/drm/DrmManagerClient;Landroid/os/Looper;)V
+HPLandroid/drm/DrmManagerClient$OnErrorListener;->onError(Landroid/drm/DrmManagerClient;Landroid/drm/DrmErrorEvent;)V
+HPLandroid/drm/DrmManagerClient$OnEventListener;->onEvent(Landroid/drm/DrmManagerClient;Landroid/drm/DrmEvent;)V
+HPLandroid/drm/DrmManagerClient$OnInfoListener;->onInfo(Landroid/drm/DrmManagerClient;Landroid/drm/DrmInfoEvent;)V
+HPLandroid/drm/DrmManagerClient;-><init>(Landroid/content/Context;)V
+HPLandroid/drm/DrmManagerClient;->canHandle(Landroid/net/Uri;Ljava/lang/String;)Z
+HPLandroid/drm/DrmManagerClient;->canHandle(Ljava/lang/String;Ljava/lang/String;)Z
+HPLandroid/drm/DrmManagerClient;->convertUriToPath(Landroid/net/Uri;)Ljava/lang/String;
+HPLandroid/drm/DrmManagerClient;->createEventThreads()V
+HPLandroid/drm/DrmManagerClient;->createListeners()V
+HPLandroid/drm/DrmManagerClient;->setOnErrorListener(Landroid/drm/DrmManagerClient$OnErrorListener;)V
+HPLandroid/drm/DrmManagerClient;->setOnEventListener(Landroid/drm/DrmManagerClient$OnEventListener;)V
+HPLandroid/drm/DrmManagerClient;->setOnInfoListener(Landroid/drm/DrmManagerClient$OnInfoListener;)V
+HPLandroid/graphics/BaseCanvas;->drawRect(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
+HPLandroid/graphics/BaseCanvas;->drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V
+HPLandroid/graphics/Bitmap$CompressFormat;->valueOf(Ljava/lang/String;)Landroid/graphics/Bitmap$CompressFormat;
+HPLandroid/graphics/Bitmap$CompressFormat;->values()[Landroid/graphics/Bitmap$CompressFormat;
+HPLandroid/graphics/Bitmap;->createBitmap(Landroid/graphics/Bitmap;IIII)Landroid/graphics/Bitmap;
+HPLandroid/graphics/Bitmap;->createGraphicBufferHandle()Landroid/graphics/GraphicBuffer;
+HPLandroid/graphics/Bitmap;->createHardwareBitmap(Landroid/graphics/GraphicBuffer;)Landroid/graphics/Bitmap;
+HPLandroid/graphics/Bitmap;->reconfigure(IILandroid/graphics/Bitmap$Config;)V
+HPLandroid/graphics/Bitmap;->sameAs(Landroid/graphics/Bitmap;)Z
+HPLandroid/graphics/BitmapFactory;->decodeByteArray([BII)Landroid/graphics/Bitmap;
+HPLandroid/graphics/BitmapFactory;->decodeFile(Ljava/lang/String;)Landroid/graphics/Bitmap;
+HPLandroid/graphics/BitmapFactory;->decodeFile(Ljava/lang/String;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
+HPLandroid/graphics/BitmapFactory;->decodeStream(Ljava/io/InputStream;)Landroid/graphics/Bitmap;
+HPLandroid/graphics/Canvas;->clipOutPath(Landroid/graphics/Path;)Z
+HPLandroid/graphics/Canvas;->clipPath(Landroid/graphics/Path;Landroid/graphics/Region$Op;)Z
+HPLandroid/graphics/Canvas;->clipRect(Landroid/graphics/Rect;Landroid/graphics/Region$Op;)Z
+HPLandroid/graphics/Canvas;->clipRect(Landroid/graphics/RectF;)Z
+HPLandroid/graphics/Canvas;->drawPicture(Landroid/graphics/Picture;)V
+HPLandroid/graphics/Canvas;->drawPicture(Landroid/graphics/Picture;Landroid/graphics/Rect;)V
+HPLandroid/graphics/Canvas;->drawPicture(Landroid/graphics/Picture;Landroid/graphics/RectF;)V
+HPLandroid/graphics/Canvas;->drawRect(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
+HPLandroid/graphics/Canvas;->drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V
+HPLandroid/graphics/Canvas;->freeTextLayoutCaches()V
+HPLandroid/graphics/Canvas;->getClipBounds()Landroid/graphics/Rect;
+HPLandroid/graphics/Canvas;->isOpaque()Z
+HPLandroid/graphics/Canvas;->saveLayer(FFFFLandroid/graphics/Paint;I)I
+HPLandroid/graphics/Canvas;->saveLayerAlpha(FFFFI)I
+HPLandroid/graphics/Canvas;->saveLayerAlpha(FFFFII)I
+HPLandroid/graphics/Canvas;->saveLayerAlpha(Landroid/graphics/RectF;II)I
+HPLandroid/graphics/Canvas;->setDensity(I)V
+HPLandroid/graphics/Canvas;->setMatrix(Landroid/graphics/Matrix;)V
+HPLandroid/graphics/Canvas;->setScreenDensity(I)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/ColorMatrix;->getArray()[F
+HPLandroid/graphics/ColorMatrix;->setSaturation(F)V
+HPLandroid/graphics/ColorMatrixColorFilter;->createNativeInstance()J
+HPLandroid/graphics/CornerPathEffect;-><init>(F)V
+HPLandroid/graphics/FontFamily;->finalize()V
+HPLandroid/graphics/GraphicBuffer$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/GraphicBuffer;
+HPLandroid/graphics/GraphicBuffer$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/graphics/GraphicBuffer;->-wrap0(Landroid/os/Parcel;)J
+HPLandroid/graphics/GraphicBuffer;-><init>(IIIIJ)V
+HPLandroid/graphics/GraphicBuffer;-><init>(IIIIJLandroid/graphics/GraphicBuffer;)V
+HPLandroid/graphics/GraphicBuffer;->createFromExisting(IIIIJ)Landroid/graphics/GraphicBuffer;
+HPLandroid/graphics/GraphicBuffer;->finalize()V
+HPLandroid/graphics/GraphicBuffer;->getFormat()I
+HPLandroid/graphics/GraphicBuffer;->getHeight()I
+HPLandroid/graphics/GraphicBuffer;->getWidth()I
+HPLandroid/graphics/GraphicBuffer;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/graphics/Interpolator;->finalize()V
+HPLandroid/graphics/LeakyTypefaceStorage;->readTypefaceFromParcel(Landroid/os/Parcel;)Landroid/graphics/Typeface;
+HPLandroid/graphics/MaskFilter;->finalize()V
+HPLandroid/graphics/Matrix;->getValues([F)V
+HPLandroid/graphics/Matrix;->postConcat(Landroid/graphics/Matrix;)Z
+HPLandroid/graphics/Matrix;->postRotate(F)Z
+HPLandroid/graphics/Matrix;->setConcat(Landroid/graphics/Matrix;Landroid/graphics/Matrix;)Z
+HPLandroid/graphics/Matrix;->setRotate(FFF)V
+HPLandroid/graphics/Matrix;->setValues([F)V
+HPLandroid/graphics/Paint;->clearShadowLayer()V
+HPLandroid/graphics/Paint;->getFontSpacing()F
+HPLandroid/graphics/Paint;->getUnderlinePosition()F
+HPLandroid/graphics/Paint;->getUnderlineThickness()F
+HPLandroid/graphics/Paint;->measureText(Ljava/lang/CharSequence;II)F
+HPLandroid/graphics/Paint;->measureText([CII)F
+HPLandroid/graphics/Paint;->reset()V
+HPLandroid/graphics/Paint;->setElegantTextHeight(Z)V
+HPLandroid/graphics/Path$Op;-><init>(Ljava/lang/String;I)V
+HPLandroid/graphics/Path;->addOval(FFFFLandroid/graphics/Path$Direction;)V
+HPLandroid/graphics/Path;->addOval(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V
+HPLandroid/graphics/Path;->addRect(FFFFLandroid/graphics/Path$Direction;)V
+HPLandroid/graphics/Path;->addRect(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V
+HPLandroid/graphics/Path;->addRoundRect(FFFFFFLandroid/graphics/Path$Direction;)V
+HPLandroid/graphics/Path;->addRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Path$Direction;)V
+HPLandroid/graphics/Path;->arcTo(FFFFFFZ)V
+HPLandroid/graphics/Path;->arcTo(Landroid/graphics/RectF;FF)V
+HPLandroid/graphics/Path;->arcTo(Landroid/graphics/RectF;FFZ)V
+HPLandroid/graphics/Path;->detectSimplePath(FFFFLandroid/graphics/Path$Direction;)V
+HPLandroid/graphics/Path;->op(Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z
+HPLandroid/graphics/Path;->op(Landroid/graphics/Path;Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z
+HPLandroid/graphics/Path;->rMoveTo(FF)V
+HPLandroid/graphics/Path;->transform(Landroid/graphics/Matrix;)V
+HPLandroid/graphics/PathEffect;-><init>()V
+HPLandroid/graphics/Picture;->draw(Landroid/graphics/Canvas;)V
+HPLandroid/graphics/Picture;->finalize()V
+HPLandroid/graphics/Picture;->getHeight()I
+HPLandroid/graphics/Picture;->getWidth()I
+HPLandroid/graphics/Point$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/Point;
+HPLandroid/graphics/Point$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/graphics/Point;-><init>(Landroid/graphics/Point;)V
+HPLandroid/graphics/Point;->offset(II)V
+HPLandroid/graphics/Point;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/graphics/PorterDuff$Mode;->valueOf(Ljava/lang/String;)Landroid/graphics/PorterDuff$Mode;
+HPLandroid/graphics/PorterDuff$Mode;->values()[Landroid/graphics/PorterDuff$Mode;
+HPLandroid/graphics/RadialGradient;->createNativeInstance(J)J
+HPLandroid/graphics/Rect$UnflattenHelper;->getMatcher(Ljava/lang/String;)Ljava/util/regex/Matcher;
+HPLandroid/graphics/Rect;->flattenToString()Ljava/lang/String;
+HPLandroid/graphics/Rect;->inset(IIII)V
+HPLandroid/graphics/Rect;->setIntersect(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
+HPLandroid/graphics/Rect;->toShortString()Ljava/lang/String;
+HPLandroid/graphics/Rect;->toShortString(Ljava/lang/StringBuilder;)Ljava/lang/String;
+HPLandroid/graphics/Rect;->unflattenFromString(Ljava/lang/String;)Landroid/graphics/Rect;
+HPLandroid/graphics/RectF;-><init>(Landroid/graphics/RectF;)V
+HPLandroid/graphics/RectF;->offsetTo(FF)V
+HPLandroid/graphics/Region;->getBounds(Landroid/graphics/Rect;)Z
+HPLandroid/graphics/Region;->obtain()Landroid/graphics/Region;
+HPLandroid/graphics/Region;->op(Landroid/graphics/Rect;Landroid/graphics/Region$Op;)Z
+HPLandroid/graphics/Region;->op(Landroid/graphics/Rect;Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z
+HPLandroid/graphics/Region;->op(Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z
+HPLandroid/graphics/Region;->op(Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z
+HPLandroid/graphics/Region;->set(Landroid/graphics/Rect;)Z
+HPLandroid/graphics/Region;->translate(II)V
+HPLandroid/graphics/Region;->union(Landroid/graphics/Rect;)Z
+HPLandroid/graphics/SurfaceTexture;-><init>(I)V
+HPLandroid/graphics/SurfaceTexture;-><init>(IZ)V
+HPLandroid/graphics/SurfaceTexture;->finalize()V
+HPLandroid/graphics/SurfaceTexture;->isSingleBuffered()Z
+HPLandroid/graphics/SurfaceTexture;->release()V
+HPLandroid/graphics/SurfaceTexture;->setOnFrameAvailableListener(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V
+HPLandroid/graphics/TableMaskFilter;-><init>(J)V
+HPLandroid/graphics/TableMaskFilter;->CreateClipTable(II)Landroid/graphics/TableMaskFilter;
+HPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->newDrawable()Landroid/graphics/drawable/Drawable;
+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$FrameInterpolator;-><init>(Landroid/graphics/drawable/AnimationDrawable;Z)V
+HPLandroid/graphics/drawable/AnimatedStateListDrawable$FrameInterpolator;->getInterpolation(F)F
+HPLandroid/graphics/drawable/AnimatedStateListDrawable$FrameInterpolator;->getTotalDuration()I
+HPLandroid/graphics/drawable/AnimatedStateListDrawable$FrameInterpolator;->updateFrames(Landroid/graphics/drawable/AnimationDrawable;Z)I
+HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->-get0(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;)Landroid/animation/Animator$AnimatorListener;
+HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->-wrap0(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;)V
+HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->isRunning()Z
+HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->resume()V
+HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->transferPendingActions(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;)V
+HPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorUI;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable;)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;->start()V
+HPLandroid/graphics/drawable/AnimatedVectorDrawable;->fallbackOntoUI()V
+HPLandroid/graphics/drawable/AnimatedVectorDrawable;->forceAnimationOnUI()V
+HPLandroid/graphics/drawable/AnimatedVectorDrawable;->setHotspot(FF)V
+HPLandroid/graphics/drawable/AnimatedVectorDrawable;->setTintMode(Landroid/graphics/PorterDuff$Mode;)V
+HPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->-get0(Landroid/graphics/drawable/AnimationDrawable$AnimationState;)[I
+HPLandroid/graphics/drawable/AnimationDrawable;->addFrame(Landroid/graphics/drawable/Drawable;I)V
+HPLandroid/graphics/drawable/AnimationDrawable;->getDuration(I)I
+HPLandroid/graphics/drawable/AnimationDrawable;->getFrame(I)Landroid/graphics/drawable/Drawable;
+HPLandroid/graphics/drawable/AnimationDrawable;->getNumberOfFrames()I
+HPLandroid/graphics/drawable/AnimationDrawable;->isRunning()Z
+HPLandroid/graphics/drawable/AnimationDrawable;->nextFrame(Z)V
+HPLandroid/graphics/drawable/AnimationDrawable;->run()V
+HPLandroid/graphics/drawable/AnimationDrawable;->setOneShot(Z)V
+HPLandroid/graphics/drawable/AnimationDrawable;->start()V
+HPLandroid/graphics/drawable/AnimationDrawable;->stop()V
+HPLandroid/graphics/drawable/ClipDrawable$ClipState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+HPLandroid/graphics/drawable/ClipDrawable;-><init>(Landroid/graphics/drawable/ClipDrawable$ClipState;Landroid/content/res/Resources;Landroid/graphics/drawable/ClipDrawable;)V
+HPLandroid/graphics/drawable/ColorDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HPLandroid/graphics/drawable/Drawable;->copyBounds()Landroid/graphics/Rect;
+HPLandroid/graphics/drawable/Drawable;->hasFocusStateSpecified()Z
+HPLandroid/graphics/drawable/DrawableContainer$1;->run()V
+HPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V
+HPLandroid/graphics/drawable/DrawableContainer;->onLevelChange(I)Z
+HPLandroid/graphics/drawable/DrawableContainer;->setColorFilter(Landroid/graphics/ColorFilter;)V
+HPLandroid/graphics/drawable/DrawableContainer;->setCurrentIndex(I)V
+HPLandroid/graphics/drawable/DrawableContainer;->setEnterFadeDuration(I)V
+HPLandroid/graphics/drawable/DrawableContainer;->setExitFadeDuration(I)V
+HPLandroid/graphics/drawable/DrawableContainer;->setHotspot(FF)V
+HPLandroid/graphics/drawable/DrawableContainer;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V
+HPLandroid/graphics/drawable/DrawableWrapper;->setHotspot(FF)V
+HPLandroid/graphics/drawable/GradientDrawable$GradientState;->setGradientRadius(FI)V
+HPLandroid/graphics/drawable/GradientDrawable$GradientState;->setGradientType(I)V
+HPLandroid/graphics/drawable/GradientDrawable;-><init>(Landroid/graphics/drawable/GradientDrawable$Orientation;[I)V
+HPLandroid/graphics/drawable/GradientDrawable;->buildRing(Landroid/graphics/drawable/GradientDrawable$GradientState;)Landroid/graphics/Path;
+HPLandroid/graphics/drawable/GradientDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
+HPLandroid/graphics/drawable/GradientDrawable;->onLevelChange(I)Z
+HPLandroid/graphics/drawable/GradientDrawable;->setGradientRadius(F)V
+HPLandroid/graphics/drawable/GradientDrawable;->setGradientType(I)V
+HPLandroid/graphics/drawable/Icon;->createFromStream(Ljava/io/InputStream;)Landroid/graphics/drawable/Icon;
+HPLandroid/graphics/drawable/Icon;->sameAs(Landroid/graphics/drawable/Icon;)Z
+HPLandroid/graphics/drawable/Icon;->scaleDownIfNecessary(II)V
+HPLandroid/graphics/drawable/Icon;->scaleDownIfNecessary(Landroid/graphics/Bitmap;II)Landroid/graphics/Bitmap;
+HPLandroid/graphics/drawable/Icon;->writeToStream(Ljava/io/OutputStream;)V
+HPLandroid/graphics/drawable/LayerDrawable;->setAlpha(I)V
+HPLandroid/graphics/drawable/LayerDrawable;->setHotspot(FF)V
+HPLandroid/graphics/drawable/LayerDrawable;->setId(II)V
+HPLandroid/graphics/drawable/LayerDrawable;->setLayerGravity(II)V
+HPLandroid/graphics/drawable/LayerDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
+HPLandroid/graphics/drawable/LevelListDrawable$LevelListState;-><init>(Landroid/graphics/drawable/LevelListDrawable$LevelListState;Landroid/graphics/drawable/LevelListDrawable;Landroid/content/res/Resources;)V
+HPLandroid/graphics/drawable/LevelListDrawable$LevelListState;->addLevel(IILandroid/graphics/drawable/Drawable;)V
+HPLandroid/graphics/drawable/LevelListDrawable$LevelListState;->indexOfLevel(I)I
+HPLandroid/graphics/drawable/LevelListDrawable;-><init>()V
+HPLandroid/graphics/drawable/LevelListDrawable;-><init>(Landroid/graphics/drawable/LevelListDrawable$LevelListState;Landroid/content/res/Resources;)V
+HPLandroid/graphics/drawable/LevelListDrawable;->addLevel(IILandroid/graphics/drawable/Drawable;)V
+HPLandroid/graphics/drawable/LevelListDrawable;->onLevelChange(I)Z
+HPLandroid/graphics/drawable/LevelListDrawable;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
+HPLandroid/graphics/drawable/NinePatchDrawable;->getAlpha()I
+HPLandroid/graphics/drawable/RippleBackground;->createHardwareExit(Landroid/graphics/Paint;)Landroid/graphics/drawable/RippleComponent$RenderNodeAnimatorSet;
+HPLandroid/graphics/drawable/RippleBackground;->drawHardware(Landroid/view/DisplayListCanvas;)Z
+HPLandroid/graphics/drawable/RippleBackground;->drawSoftware(Landroid/graphics/Canvas;Landroid/graphics/Paint;)Z
+HPLandroid/graphics/drawable/RippleBackground;->jumpValuesToExit()V
+HPLandroid/graphics/drawable/RippleComponent$RenderNodeAnimatorSet;-><init>()V
+HPLandroid/graphics/drawable/RippleComponent$RenderNodeAnimatorSet;->add(Landroid/view/RenderNodeAnimator;)V
+HPLandroid/graphics/drawable/RippleComponent$RenderNodeAnimatorSet;->end()V
+HPLandroid/graphics/drawable/RippleComponent$RenderNodeAnimatorSet;->isRunning()Z
+HPLandroid/graphics/drawable/RippleComponent$RenderNodeAnimatorSet;->start(Landroid/view/DisplayListCanvas;)V
+HPLandroid/graphics/drawable/RippleComponent;->getBounds(Landroid/graphics/Rect;)V
+HPLandroid/graphics/drawable/RippleComponent;->onBoundsChange()V
+HPLandroid/graphics/drawable/RippleComponent;->onHotspotBoundsChanged()V
+HPLandroid/graphics/drawable/RippleDrawable$RippleState;->newDrawable()Landroid/graphics/drawable/Drawable;
+HPLandroid/graphics/drawable/RippleDrawable;->drawMask(Landroid/graphics/Canvas;)V
+HPLandroid/graphics/drawable/RippleDrawable;->hasFocusStateSpecified()Z
+HPLandroid/graphics/drawable/RippleDrawable;->tryRippleExit()V
+HPLandroid/graphics/drawable/RippleForeground$1;->onAnimationEnd(Landroid/animation/Animator;)V
+HPLandroid/graphics/drawable/RippleForeground$2;->get(Landroid/graphics/drawable/RippleForeground;)Ljava/lang/Float;
+HPLandroid/graphics/drawable/RippleForeground$2;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroid/graphics/drawable/RippleForeground$2;->setValue(Landroid/graphics/drawable/RippleForeground;F)V
+HPLandroid/graphics/drawable/RippleForeground$2;->setValue(Ljava/lang/Object;F)V
+HPLandroid/graphics/drawable/RippleForeground$3;->get(Landroid/graphics/drawable/RippleForeground;)Ljava/lang/Float;
+HPLandroid/graphics/drawable/RippleForeground$3;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroid/graphics/drawable/RippleForeground$3;->setValue(Landroid/graphics/drawable/RippleForeground;F)V
+HPLandroid/graphics/drawable/RippleForeground$3;->setValue(Ljava/lang/Object;F)V
+HPLandroid/graphics/drawable/RippleForeground$4;->get(Landroid/graphics/drawable/RippleForeground;)Ljava/lang/Float;
+HPLandroid/graphics/drawable/RippleForeground$4;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroid/graphics/drawable/RippleForeground$4;->setValue(Landroid/graphics/drawable/RippleForeground;F)V
+HPLandroid/graphics/drawable/RippleForeground$4;->setValue(Ljava/lang/Object;F)V
+HPLandroid/graphics/drawable/RippleForeground$LogDecelerateInterpolator;->getInterpolation(F)F
+HPLandroid/graphics/drawable/RippleForeground;->-get0(Landroid/graphics/drawable/RippleForeground;)F
+HPLandroid/graphics/drawable/RippleForeground;->-get1(Landroid/graphics/drawable/RippleForeground;)F
+HPLandroid/graphics/drawable/RippleForeground;->-get2(Landroid/graphics/drawable/RippleForeground;)F
+HPLandroid/graphics/drawable/RippleForeground;->-set0(Landroid/graphics/drawable/RippleForeground;Z)Z
+HPLandroid/graphics/drawable/RippleForeground;->-set1(Landroid/graphics/drawable/RippleForeground;F)F
+HPLandroid/graphics/drawable/RippleForeground;->-set2(Landroid/graphics/drawable/RippleForeground;F)F
+HPLandroid/graphics/drawable/RippleForeground;->-set3(Landroid/graphics/drawable/RippleForeground;F)F
+HPLandroid/graphics/drawable/RippleForeground;->-set4(Landroid/graphics/drawable/RippleForeground;F)F
+HPLandroid/graphics/drawable/RippleForeground;->computeBoundedTargetValues()V
+HPLandroid/graphics/drawable/RippleForeground;->createHardwareExit(Landroid/graphics/Paint;)Landroid/graphics/drawable/RippleComponent$RenderNodeAnimatorSet;
+HPLandroid/graphics/drawable/RippleForeground;->createSoftwareExit()Landroid/animation/Animator;
+HPLandroid/graphics/drawable/RippleForeground;->drawHardware(Landroid/view/DisplayListCanvas;)Z
+HPLandroid/graphics/drawable/RippleForeground;->getBounds(Landroid/graphics/Rect;)V
+HPLandroid/graphics/drawable/RippleForeground;->getCurrentX()F
+HPLandroid/graphics/drawable/RippleForeground;->getCurrentY()F
+HPLandroid/graphics/drawable/RippleForeground;->getOpacityExitDuration()I
+HPLandroid/graphics/drawable/RippleForeground;->getRadiusExitDuration()I
+HPLandroid/graphics/drawable/RippleForeground;->hasFinishedExit()Z
+HPLandroid/graphics/drawable/RippleForeground;->jumpValuesToExit()V
+HPLandroid/graphics/drawable/RippleForeground;->move(FF)V
+HPLandroid/graphics/drawable/RotateDrawable;->onLevelChange(I)Z
+HPLandroid/graphics/drawable/ScaleDrawable;->draw(Landroid/graphics/Canvas;)V
+HPLandroid/graphics/drawable/ScaleDrawable;->onLevelChange(I)Z
+HPLandroid/graphics/drawable/StateListDrawable$StateListState;->newDrawable()Landroid/graphics/drawable/Drawable;
+HPLandroid/graphics/drawable/TransitionDrawable;-><init>(Landroid/graphics/drawable/TransitionDrawable$TransitionState;[Landroid/graphics/drawable/Drawable;)V
+HPLandroid/graphics/drawable/TransitionDrawable;-><init>([Landroid/graphics/drawable/Drawable;)V
+HPLandroid/graphics/drawable/TransitionDrawable;->setCrossFadeEnabled(Z)V
+HPLandroid/graphics/drawable/TransitionDrawable;->startTransition(I)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$8;->setValue(Landroid/graphics/drawable/VectorDrawable$VGroup;F)V
+HPLandroid/graphics/drawable/VectorDrawable$VGroup$8;->setValue(Ljava/lang/Object;F)V
+HPLandroid/graphics/drawable/VectorDrawable$VGroup;->setRotation(F)V
+HPLandroid/graphics/drawable/VectorDrawable$VGroup;->setTranslateX(F)V
+HPLandroid/graphics/drawable/VectorDrawable$VGroup;->setTranslateY(F)V
+HPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getProperty(Ljava/lang/String;)Landroid/util/Property;
+HPLandroid/graphics/drawable/VectorDrawable;->-wrap36(JF)V
+HPLandroid/graphics/drawable/VectorDrawable;->-wrap42(JF)V
+HPLandroid/graphics/drawable/VectorDrawable;->-wrap43(JF)V
+HPLandroid/graphics/drawable/VectorDrawable;->getOpticalInsets()Landroid/graphics/Insets;
+HPLandroid/hardware/GeomagneticField;->getHorizontalStrength()F
+HPLandroid/hardware/GeomagneticField;->getInclination()F
+HPLandroid/hardware/ICameraService$Stub$Proxy;->notifySystemEvent(I[I)V
+HPLandroid/hardware/ICameraServiceProxy$Stub;-><init>()V
+HPLandroid/hardware/ICameraServiceProxy$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/hardware/ICameraServiceProxy;->notifyCameraState(Ljava/lang/String;IILjava/lang/String;)V
+HPLandroid/hardware/ICameraServiceProxy;->pingForUserUpdate()V
+HPLandroid/hardware/IConsumerIrService$Stub;-><init>()V
+HPLandroid/hardware/ISerialManager$Stub;-><init>()V
+HPLandroid/hardware/Sensor;->getFifoMaxEventCount()I
+HPLandroid/hardware/Sensor;->getMaximumRange()F
+HPLandroid/hardware/SensorAdditionalInfo;-><init>(Landroid/hardware/Sensor;II[I[F)V
+HPLandroid/hardware/SensorAdditionalInfo;->createLocalGeomagneticField(FFF)Landroid/hardware/SensorAdditionalInfo;
+HPLandroid/hardware/SensorManager;->getDefaultSensor(IZ)Landroid/hardware/Sensor;
+HPLandroid/hardware/SensorManager;->requestTriggerSensor(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z
+HPLandroid/hardware/SensorManager;->setOperationParameter(Landroid/hardware/SensorAdditionalInfo;)Z
+HPLandroid/hardware/SystemSensorManager$TriggerEventQueue;-><init>(Landroid/hardware/TriggerEventListener;Landroid/os/Looper;Landroid/hardware/SystemSensorManager;Ljava/lang/String;)V
+HPLandroid/hardware/SystemSensorManager$TriggerEventQueue;->addSensorEvent(Landroid/hardware/Sensor;)V
+HPLandroid/hardware/SystemSensorManager;->requestTriggerSensorImpl(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z
+HPLandroid/hardware/SystemSensorManager;->setOperationParameterImpl(Landroid/hardware/SensorAdditionalInfo;)Z
+HPLandroid/hardware/TriggerEvent;-><init>(I)V
+HPLandroid/hardware/TriggerEventListener;-><init>()V
+HPLandroid/hardware/TriggerEventListener;->onTrigger(Landroid/hardware/TriggerEvent;)V
+HPLandroid/hardware/camera2/CameraAccessException;-><init>(ILjava/lang/String;Ljava/lang/Throwable;)V
+HPLandroid/hardware/camera2/CameraAccessException;->getCombinedMessage(ILjava/lang/String;)Ljava/lang/String;
+HPLandroid/hardware/camera2/CameraAccessException;->getProblemString(I)Ljava/lang/String;
+HPLandroid/hardware/camera2/CameraDevice$StateCallback;->onClosed(Landroid/hardware/camera2/CameraDevice;)V
+HPLandroid/hardware/camera2/CameraManager$AvailabilityCallback;->onCameraAvailable(Ljava/lang/String;)V
+HPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$4;-><init>(Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;Landroid/hardware/camera2/CameraManager$TorchCallback;Ljava/lang/String;)V
+HPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$4;->run()V
+HPLandroid/hardware/camera2/CameraManager;->throwAsPublicException(Ljava/lang/Throwable;)V
+HPLandroid/hardware/camera2/CaptureRequest;->containsTarget(Landroid/view/Surface;)Z
+HPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;->disconnect()V
+HPLandroid/hardware/camera2/impl/CallbackProxies$DeviceCaptureCallbackProxy;->onCaptureBufferLost(Landroid/hardware/camera2/CameraDevice;Landroid/hardware/camera2/CaptureRequest;Landroid/view/Surface;J)V
+HPLandroid/hardware/camera2/impl/CallbackProxies$DeviceCaptureCallbackProxy;->onCaptureSequenceAborted(Landroid/hardware/camera2/CameraDevice;I)V
+HPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$1;->onCaptureBufferLost(Landroid/hardware/camera2/CameraDevice;Landroid/hardware/camera2/CaptureRequest;Landroid/view/Surface;J)V
+HPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$1;->onCaptureSequenceAborted(Landroid/hardware/camera2/CameraDevice;I)V
+HPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->finalize()V
+HPLandroid/hardware/camera2/impl/CameraDeviceImpl$5;->run()V
+HPLandroid/hardware/camera2/impl/CameraDeviceImpl$9;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl;ILandroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallbackHolder;)V
+HPLandroid/hardware/camera2/impl/CameraDeviceImpl$9;->run()V
+HPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks$5;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks;Landroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallbackHolder;Landroid/hardware/camera2/CaptureRequest;Landroid/view/Surface;J)V
+HPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks$5;->run()V
+HPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks;->onCaptureErrorLocked(ILandroid/hardware/camera2/impl/CaptureResultExtras;)V
+HPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks;->onDeviceError(ILandroid/hardware/camera2/impl/CaptureResultExtras;)V
+HPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-get4(Landroid/hardware/camera2/impl/CameraDeviceImpl;)Landroid/util/SparseArray;
+HPLandroid/hardware/camera2/impl/CameraDeviceImpl;->close()V
+HPLandroid/hardware/camera2/impl/CameraDeviceImpl;->finalize()V
+HPLandroid/hardware/camera2/impl/CameraMetadataNative$14;->getValue(Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;
+HPLandroid/hardware/camera2/impl/CameraMetadataNative;->-wrap2(Landroid/hardware/camera2/impl/CameraMetadataNative;)Landroid/hardware/camera2/params/LensShadingMap;
+HPLandroid/hardware/camera2/impl/CameraMetadataNative;->getLensShadingMap()Landroid/hardware/camera2/params/LensShadingMap;
+HPLandroid/hardware/camera2/impl/CaptureResultExtras;->getErrorStreamId()I
+HPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;->disconnect()V
+HPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;->unlinkToDeath(Landroid/os/IBinder$DeathRecipient;I)V
+HPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePair$MarshalerPair;->getNativeSize()I
+HPLandroid/hardware/camera2/params/LensShadingMap;-><init>([FII)V
+HPLandroid/hardware/camera2/params/LensShadingMap;->getColumnCount()I
+HPLandroid/hardware/camera2/params/LensShadingMap;->getGainFactor(III)F
+HPLandroid/hardware/camera2/params/LensShadingMap;->getGainFactorCount()I
+HPLandroid/hardware/camera2/params/LensShadingMap;->getRowCount()I
+HPLandroid/hardware/camera2/params/RggbChannelVector;->getComponent(I)F
+HPLandroid/hardware/camera2/utils/TypeReference;->getArrayClass(Ljava/lang/Class;)Ljava/lang/Class;
+HPLandroid/hardware/display/DisplayManager;->unregisterDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;)V
+HPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->clearEvents()V
+HPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->handleMessage(Landroid/os/Message;)V
+HPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->sendDisplayEvent(II)V
+HPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;->onDisplayEvent(II)V
+HPLandroid/hardware/display/DisplayManagerGlobal;->-wrap0(Landroid/hardware/display/DisplayManagerGlobal;II)V
+HPLandroid/hardware/display/DisplayManagerGlobal;->handleDisplayEvent(II)V
+HPLandroid/hardware/display/DisplayManagerGlobal;->unregisterDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;)V
+HPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;-><init>(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;)V
+HPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->copyFrom(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;)V
+HPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->equals(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;)Z
+HPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->isBrightOrDim()Z
+HPLandroid/hardware/display/DisplayViewport;->copyFrom(Landroid/hardware/display/DisplayViewport;)V
+HPLandroid/hardware/display/IDisplayManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/hardware/display/IDisplayManagerCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/hardware/display/IDisplayManagerCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/hardware/display/IDisplayManagerCallback$Stub$Proxy;->onDisplayEvent(II)V
+HPLandroid/hardware/display/IDisplayManagerCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/display/IDisplayManagerCallback;
+HPLandroid/hardware/display/IDisplayManagerCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/hardware/display/WifiDisplaySessionInfo;-><init>()V
+HPLandroid/hardware/display/WifiDisplaySessionInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/hardware/display/WifiDisplayStatus;-><init>()V
+HPLandroid/hardware/display/WifiDisplayStatus;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/hardware/fingerprint/IFingerprintService$Stub;-><init>()V
+HPLandroid/hardware/fingerprint/IFingerprintService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback;
+HPLandroid/hardware/hdmi/HdmiPlaybackClient$DisplayStatusCallback;->onComplete(I)V
+HPLandroid/hardware/input/IInputDevicesChangedListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/hardware/input/IInputDevicesChangedListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/hardware/input/IInputDevicesChangedListener$Stub$Proxy;->onInputDevicesChanged([I)V
+HPLandroid/hardware/input/IInputDevicesChangedListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/input/IInputDevicesChangedListener;
+HPLandroid/hardware/input/IInputDevicesChangedListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/hardware/input/IInputManager$Stub$Proxy;->injectInputEvent(Landroid/view/InputEvent;I)Z
+HPLandroid/hardware/input/IInputManager$Stub;-><init>()V
+HPLandroid/hardware/input/IInputManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/hardware/input/InputDeviceIdentifier;->getDescriptor()Ljava/lang/String;
+HPLandroid/hardware/input/InputDeviceIdentifier;->getProductId()I
+HPLandroid/hardware/input/InputDeviceIdentifier;->getVendorId()I
+HPLandroid/hardware/input/InputManager$InputDeviceListenerDelegate;->handleMessage(Landroid/os/Message;)V
+HPLandroid/hardware/input/InputManager$InputDevicesChangedListener;->onInputDevicesChanged([I)V
+HPLandroid/hardware/input/InputManager;->-wrap0(Landroid/hardware/input/InputManager;[I)V
+HPLandroid/hardware/input/InputManager;->containsDeviceId([II)Z
+HPLandroid/hardware/input/InputManager;->injectInputEvent(Landroid/view/InputEvent;I)Z
+HPLandroid/hardware/input/InputManager;->onInputDevicesChanged([I)V
+HPLandroid/hardware/input/InputManager;->sendMessageToInputDeviceListenersLocked(II)V
+HPLandroid/hardware/input/InputManager;->unregisterInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;)V
+HPLandroid/hardware/input/InputManagerInternal;-><init>()V
+HPLandroid/hardware/input/InputManagerInternal;->injectInputEvent(Landroid/view/InputEvent;II)Z
+HPLandroid/hardware/input/InputManagerInternal;->onInputMethodSubtypeChanged(ILandroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)V
+HPLandroid/hardware/input/InputManagerInternal;->setDisplayViewports(Landroid/hardware/display/DisplayViewport;Landroid/hardware/display/DisplayViewport;Ljava/util/List;)V
+HPLandroid/hardware/input/InputManagerInternal;->setInteractive(Z)V
+HPLandroid/hardware/input/InputManagerInternal;->setPulseGestureEnabled(Z)V
+HPLandroid/hardware/input/InputManagerInternal;->toggleCapsLock(I)V
+HPLandroid/hardware/input/KeyboardLayout$1;-><init>()V
+HPLandroid/hardware/input/KeyboardLayout;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/os/LocaleList;II)V
+HPLandroid/hardware/input/KeyboardLayout;->getDescriptor()Ljava/lang/String;
+HPLandroid/hardware/input/TouchCalibration;->getAffineTransform()[F
+HPLandroid/hardware/location/ActivityRecognitionHardware;->isSupported()Z
+HPLandroid/hardware/location/ContextHubInfo$1;-><init>()V
+HPLandroid/hardware/location/ContextHubInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/location/ContextHubInfo;
+HPLandroid/hardware/location/ContextHubInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/hardware/location/ContextHubInfo;-><init>()V
+HPLandroid/hardware/location/ContextHubInfo;-><init>(Landroid/os/Parcel;)V
+HPLandroid/hardware/location/ContextHubInfo;-><init>(Landroid/os/Parcel;Landroid/hardware/location/ContextHubInfo;)V
+HPLandroid/hardware/location/ContextHubInfo;->getId()I
+HPLandroid/hardware/location/ContextHubInfo;->getMaxPacketLengthBytes()I
+HPLandroid/hardware/location/ContextHubInfo;->getName()Ljava/lang/String;
+HPLandroid/hardware/location/ContextHubInfo;->setId(I)V
+HPLandroid/hardware/location/ContextHubInfo;->setMaxPacketLenBytes(I)V
+HPLandroid/hardware/location/ContextHubInfo;->setMemoryRegions([Landroid/hardware/location/MemoryRegion;)V
+HPLandroid/hardware/location/ContextHubInfo;->setName(Ljava/lang/String;)V
+HPLandroid/hardware/location/ContextHubInfo;->setPeakMips(F)V
+HPLandroid/hardware/location/ContextHubInfo;->setPeakPowerDrawMw(F)V
+HPLandroid/hardware/location/ContextHubInfo;->setPlatformVersion(I)V
+HPLandroid/hardware/location/ContextHubInfo;->setSleepPowerDrawMw(F)V
+HPLandroid/hardware/location/ContextHubInfo;->setStoppedPowerDrawMw(F)V
+HPLandroid/hardware/location/ContextHubInfo;->setSupportedSensors([I)V
+HPLandroid/hardware/location/ContextHubInfo;->setToolchain(Ljava/lang/String;)V
+HPLandroid/hardware/location/ContextHubInfo;->setToolchainVersion(I)V
+HPLandroid/hardware/location/ContextHubInfo;->setVendor(Ljava/lang/String;)V
+HPLandroid/hardware/location/ContextHubInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/hardware/location/ContextHubManager$1;-><init>(Landroid/hardware/location/ContextHubManager;)V
+HPLandroid/hardware/location/ContextHubManager$1;->onMessageReceipt(IILandroid/hardware/location/ContextHubMessage;)V
+HPLandroid/hardware/location/ContextHubManager$ICallback;->onMessageReceipt(IILandroid/hardware/location/ContextHubMessage;)V
+HPLandroid/hardware/location/ContextHubManager;->-get0(Landroid/hardware/location/ContextHubManager;)Landroid/hardware/location/ContextHubManager$Callback;
+HPLandroid/hardware/location/ContextHubManager;->-get2(Landroid/hardware/location/ContextHubManager;)Landroid/hardware/location/ContextHubManager$ICallback;
+HPLandroid/hardware/location/ContextHubManager;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
+HPLandroid/hardware/location/ContextHubManager;->findNanoAppOnHub(ILandroid/hardware/location/NanoAppFilter;)[I
+HPLandroid/hardware/location/ContextHubManager;->getContextHubHandles()[I
+HPLandroid/hardware/location/ContextHubManager;->getContextHubInfo(I)Landroid/hardware/location/ContextHubInfo;
+HPLandroid/hardware/location/ContextHubManager;->getNanoAppInstanceInfo(I)Landroid/hardware/location/NanoAppInstanceInfo;
+HPLandroid/hardware/location/ContextHubManager;->registerCallback(Landroid/hardware/location/ContextHubManager$ICallback;)I
+HPLandroid/hardware/location/ContextHubManager;->sendMessage(IILandroid/hardware/location/ContextHubMessage;)I
+HPLandroid/hardware/location/ContextHubMessage$1;-><init>()V
+HPLandroid/hardware/location/ContextHubMessage$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/location/ContextHubMessage;
+HPLandroid/hardware/location/ContextHubMessage$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/hardware/location/ContextHubMessage;-><init>(II[B)V
+HPLandroid/hardware/location/ContextHubMessage;-><init>(Landroid/os/Parcel;)V
+HPLandroid/hardware/location/ContextHubMessage;-><init>(Landroid/os/Parcel;Landroid/hardware/location/ContextHubMessage;)V
+HPLandroid/hardware/location/ContextHubMessage;->getData()[B
+HPLandroid/hardware/location/ContextHubMessage;->getMsgType()I
+HPLandroid/hardware/location/ContextHubMessage;->getVersion()I
+HPLandroid/hardware/location/ContextHubMessage;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/hardware/location/GeofenceHardware$GeofenceHardwareMonitorCallbackWrapper;-><init>(Landroid/hardware/location/GeofenceHardware;Landroid/hardware/location/GeofenceHardwareMonitorCallback;)V
+HPLandroid/hardware/location/GeofenceHardware;-><init>(Landroid/hardware/location/IGeofenceHardware;)V
+HPLandroid/hardware/location/GeofenceHardware;->getMonitorCallbackWrapper(Landroid/hardware/location/GeofenceHardwareMonitorCallback;)Landroid/hardware/location/GeofenceHardware$GeofenceHardwareMonitorCallbackWrapper;
+HPLandroid/hardware/location/GeofenceHardware;->registerForMonitorStateChangeCallback(ILandroid/hardware/location/GeofenceHardwareMonitorCallback;)Z
+HPLandroid/hardware/location/GeofenceHardwareCallback;-><init>()V
+HPLandroid/hardware/location/GeofenceHardwareImpl$1;-><init>(Landroid/hardware/location/GeofenceHardwareImpl;)V
+HPLandroid/hardware/location/GeofenceHardwareImpl$2;-><init>(Landroid/hardware/location/GeofenceHardwareImpl;)V
+HPLandroid/hardware/location/GeofenceHardwareImpl$2;->handleMessage(Landroid/os/Message;)V
+HPLandroid/hardware/location/GeofenceHardwareImpl$3;-><init>(Landroid/hardware/location/GeofenceHardwareImpl;)V
+HPLandroid/hardware/location/GeofenceHardwareImpl$3;->handleMessage(Landroid/os/Message;)V
+HPLandroid/hardware/location/GeofenceHardwareImpl$Reaper;-><init>(Landroid/hardware/location/GeofenceHardwareImpl;Landroid/hardware/location/IGeofenceHardwareMonitorCallback;I)V
+HPLandroid/hardware/location/GeofenceHardwareImpl$Reaper;->binderDied()V
+HPLandroid/hardware/location/GeofenceHardwareImpl$Reaper;->binderEquals(Landroid/os/IInterface;Landroid/os/IInterface;)Z
+HPLandroid/hardware/location/GeofenceHardwareImpl$Reaper;->equals(Ljava/lang/Object;)Z
+HPLandroid/hardware/location/GeofenceHardwareImpl;->-get0()Z
+HPLandroid/hardware/location/GeofenceHardwareImpl;->-get1(Landroid/hardware/location/GeofenceHardwareImpl;)[Ljava/util/ArrayList;
+HPLandroid/hardware/location/GeofenceHardwareImpl;->-get2(Landroid/hardware/location/GeofenceHardwareImpl;)Landroid/os/Handler;
+HPLandroid/hardware/location/GeofenceHardwareImpl;->-get5(Landroid/hardware/location/GeofenceHardwareImpl;)Landroid/os/Handler;
+HPLandroid/hardware/location/GeofenceHardwareImpl;->-get6(Landroid/hardware/location/GeofenceHardwareImpl;)Ljava/util/ArrayList;
+HPLandroid/hardware/location/GeofenceHardwareImpl;-><init>(Landroid/content/Context;)V
+HPLandroid/hardware/location/GeofenceHardwareImpl;->getAllowedResolutionLevel(II)I
+HPLandroid/hardware/location/GeofenceHardwareImpl;->getInstance(Landroid/content/Context;)Landroid/hardware/location/GeofenceHardwareImpl;
+HPLandroid/hardware/location/GeofenceHardwareImpl;->getMonitoringResolutionLevel(I)I
+HPLandroid/hardware/location/GeofenceHardwareImpl;->registerForMonitorStateChangeCallback(ILandroid/hardware/location/IGeofenceHardwareMonitorCallback;)Z
+HPLandroid/hardware/location/GeofenceHardwareImpl;->setFusedGeofenceHardware(Landroid/location/IFusedGeofenceHardware;)V
+HPLandroid/hardware/location/GeofenceHardwareImpl;->setGpsHardwareGeofence(Landroid/location/IGpsGeofenceHardware;)V
+HPLandroid/hardware/location/GeofenceHardwareImpl;->setMonitorAvailability(II)V
+HPLandroid/hardware/location/GeofenceHardwareImpl;->updateFusedHardwareAvailability()V
+HPLandroid/hardware/location/GeofenceHardwareImpl;->updateGpsHardwareAvailability()V
+HPLandroid/hardware/location/GeofenceHardwareMonitorCallback;-><init>()V
+HPLandroid/hardware/location/GeofenceHardwareService$1;-><init>(Landroid/hardware/location/GeofenceHardwareService;)V
+HPLandroid/hardware/location/GeofenceHardwareService$1;->registerForMonitorStateChangeCallback(ILandroid/hardware/location/IGeofenceHardwareMonitorCallback;)Z
+HPLandroid/hardware/location/GeofenceHardwareService$1;->setFusedGeofenceHardware(Landroid/location/IFusedGeofenceHardware;)V
+HPLandroid/hardware/location/GeofenceHardwareService$1;->setGpsGeofenceHardware(Landroid/location/IGpsGeofenceHardware;)V
+HPLandroid/hardware/location/GeofenceHardwareService;->-get0(Landroid/hardware/location/GeofenceHardwareService;)Landroid/content/Context;
+HPLandroid/hardware/location/GeofenceHardwareService;->-get1(Landroid/hardware/location/GeofenceHardwareService;)Landroid/hardware/location/GeofenceHardwareImpl;
+HPLandroid/hardware/location/GeofenceHardwareService;->-wrap0(Landroid/hardware/location/GeofenceHardwareService;III)V
+HPLandroid/hardware/location/GeofenceHardwareService;-><init>()V
+HPLandroid/hardware/location/GeofenceHardwareService;->checkPermission(III)V
+HPLandroid/hardware/location/GeofenceHardwareService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HPLandroid/hardware/location/GeofenceHardwareService;->onCreate()V
+HPLandroid/hardware/location/IActivityRecognitionHardwareClient$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/hardware/location/IActivityRecognitionHardwareClient$Stub$Proxy;->onAvailabilityChanged(ZLandroid/hardware/location/IActivityRecognitionHardware;)V
+HPLandroid/hardware/location/IActivityRecognitionHardwareClient$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IActivityRecognitionHardwareClient;
+HPLandroid/hardware/location/IContextHubCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/hardware/location/IContextHubCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/hardware/location/IContextHubCallback$Stub$Proxy;->onMessageReceipt(IILandroid/hardware/location/ContextHubMessage;)V
+HPLandroid/hardware/location/IContextHubCallback$Stub;-><init>()V
+HPLandroid/hardware/location/IContextHubCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/hardware/location/IContextHubCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IContextHubCallback;
+HPLandroid/hardware/location/IContextHubCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/hardware/location/IContextHubCallback;->onMessageReceipt(IILandroid/hardware/location/ContextHubMessage;)V
+HPLandroid/hardware/location/IContextHubService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/hardware/location/IContextHubService$Stub$Proxy;->findNanoAppOnHub(ILandroid/hardware/location/NanoAppFilter;)[I
+HPLandroid/hardware/location/IContextHubService$Stub$Proxy;->getContextHubHandles()[I
+HPLandroid/hardware/location/IContextHubService$Stub$Proxy;->getContextHubInfo(I)Landroid/hardware/location/ContextHubInfo;
+HPLandroid/hardware/location/IContextHubService$Stub$Proxy;->getNanoAppInstanceInfo(I)Landroid/hardware/location/NanoAppInstanceInfo;
+HPLandroid/hardware/location/IContextHubService$Stub$Proxy;->registerCallback(Landroid/hardware/location/IContextHubCallback;)I
+HPLandroid/hardware/location/IContextHubService$Stub$Proxy;->sendMessage(IILandroid/hardware/location/ContextHubMessage;)I
+HPLandroid/hardware/location/IContextHubService$Stub;-><init>()V
+HPLandroid/hardware/location/IContextHubService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IContextHubService;
+HPLandroid/hardware/location/IContextHubService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/hardware/location/IGeofenceHardware$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/hardware/location/IGeofenceHardware$Stub$Proxy;->registerForMonitorStateChangeCallback(ILandroid/hardware/location/IGeofenceHardwareMonitorCallback;)Z
+HPLandroid/hardware/location/IGeofenceHardware$Stub;-><init>()V
+HPLandroid/hardware/location/IGeofenceHardware$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/hardware/location/IGeofenceHardware$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IGeofenceHardware;
+HPLandroid/hardware/location/IGeofenceHardware$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/hardware/location/IGeofenceHardware;->addCircularFence(ILandroid/hardware/location/GeofenceHardwareRequestParcelable;Landroid/hardware/location/IGeofenceHardwareCallback;)Z
+HPLandroid/hardware/location/IGeofenceHardware;->getMonitoringTypes()[I
+HPLandroid/hardware/location/IGeofenceHardware;->getStatusOfMonitoringType(I)I
+HPLandroid/hardware/location/IGeofenceHardware;->pauseGeofence(II)Z
+HPLandroid/hardware/location/IGeofenceHardware;->registerForMonitorStateChangeCallback(ILandroid/hardware/location/IGeofenceHardwareMonitorCallback;)Z
+HPLandroid/hardware/location/IGeofenceHardware;->removeGeofence(II)Z
+HPLandroid/hardware/location/IGeofenceHardware;->resumeGeofence(III)Z
+HPLandroid/hardware/location/IGeofenceHardware;->setFusedGeofenceHardware(Landroid/location/IFusedGeofenceHardware;)V
+HPLandroid/hardware/location/IGeofenceHardware;->setGpsGeofenceHardware(Landroid/location/IGpsGeofenceHardware;)V
+HPLandroid/hardware/location/IGeofenceHardware;->unregisterForMonitorStateChangeCallback(ILandroid/hardware/location/IGeofenceHardwareMonitorCallback;)Z
+HPLandroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub;-><init>()V
+HPLandroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IGeofenceHardwareMonitorCallback;
+HPLandroid/hardware/location/IGeofenceHardwareMonitorCallback;->onMonitoringSystemChange(Landroid/hardware/location/GeofenceHardwareMonitorEvent;)V
+HPLandroid/hardware/location/MemoryRegion$1;-><init>()V
+HPLandroid/hardware/location/MemoryRegion$1;->newArray(I)[Landroid/hardware/location/MemoryRegion;
+HPLandroid/hardware/location/MemoryRegion$1;->newArray(I)[Ljava/lang/Object;
+HPLandroid/hardware/location/NanoAppFilter$1;-><init>()V
+HPLandroid/hardware/location/NanoAppFilter$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/location/NanoAppFilter;
+HPLandroid/hardware/location/NanoAppFilter$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/hardware/location/NanoAppFilter;-><init>(JIIJ)V
+HPLandroid/hardware/location/NanoAppFilter;-><init>(Landroid/os/Parcel;)V
+HPLandroid/hardware/location/NanoAppFilter;-><init>(Landroid/os/Parcel;Landroid/hardware/location/NanoAppFilter;)V
+HPLandroid/hardware/location/NanoAppFilter;->testMatch(Landroid/hardware/location/NanoAppInstanceInfo;)Z
+HPLandroid/hardware/location/NanoAppFilter;->versionsMatch(III)Z
+HPLandroid/hardware/location/NanoAppFilter;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/hardware/location/NanoAppInstanceInfo$1;-><init>()V
+HPLandroid/hardware/location/NanoAppInstanceInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/location/NanoAppInstanceInfo;
+HPLandroid/hardware/location/NanoAppInstanceInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/hardware/location/NanoAppInstanceInfo;-><init>()V
+HPLandroid/hardware/location/NanoAppInstanceInfo;-><init>(Landroid/os/Parcel;)V
+HPLandroid/hardware/location/NanoAppInstanceInfo;-><init>(Landroid/os/Parcel;Landroid/hardware/location/NanoAppInstanceInfo;)V
+HPLandroid/hardware/location/NanoAppInstanceInfo;->getAppId()J
+HPLandroid/hardware/location/NanoAppInstanceInfo;->getAppVersion()I
+HPLandroid/hardware/location/NanoAppInstanceInfo;->setAppId(J)V
+HPLandroid/hardware/location/NanoAppInstanceInfo;->setAppVersion(I)V
+HPLandroid/hardware/location/NanoAppInstanceInfo;->setContexthubId(I)V
+HPLandroid/hardware/location/NanoAppInstanceInfo;->setHandle(I)V
+HPLandroid/hardware/location/NanoAppInstanceInfo;->setName(Ljava/lang/String;)V
+HPLandroid/hardware/location/NanoAppInstanceInfo;->setNeededExecMemBytes(I)V
+HPLandroid/hardware/location/NanoAppInstanceInfo;->setNeededReadMemBytes(I)V
+HPLandroid/hardware/location/NanoAppInstanceInfo;->setNeededWriteMemBytes(I)V
+HPLandroid/hardware/location/NanoAppInstanceInfo;->setPublisher(Ljava/lang/String;)V
+HPLandroid/hardware/location/NanoAppInstanceInfo;->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
+HPLandroid/hardware/radio/V1_0/CdmaBroadcastSmsConfigInfo;-><init>()V
+HPLandroid/hardware/radio/V1_0/CdmaBroadcastSmsConfigInfo;->toString()Ljava/lang/String;
+HPLandroid/hardware/radio/V1_0/CdmaBroadcastSmsConfigInfo;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+HPLandroid/hardware/radio/V1_0/CdmaBroadcastSmsConfigInfo;->writeVectorToParcel(Landroid/os/HwParcel;Ljava/util/ArrayList;)V
+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/CellInfo;-><init>()V
+HPLandroid/hardware/radio/V1_0/CellInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/radio/V1_0/CellInfo;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
+HPLandroid/hardware/radio/V1_0/CellInfoLte;-><init>()V
+HPLandroid/hardware/radio/V1_0/CellInfoLte;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/radio/V1_0/GsmBroadcastSmsConfigInfo;-><init>()V
+HPLandroid/hardware/radio/V1_0/GsmBroadcastSmsConfigInfo;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+HPLandroid/hardware/radio/V1_0/GsmBroadcastSmsConfigInfo;->writeVectorToParcel(Landroid/os/HwParcel;Ljava/util/ArrayList;)V
+HPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getCellInfoList(I)V
+HPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getModemActivityInfo(I)V
+HPLandroid/hardware/radio/V1_0/IRadio$Proxy;->setCdmaBroadcastConfig(ILjava/util/ArrayList;)V
+HPLandroid/hardware/radio/V1_0/IRadio$Proxy;->setGsmBroadcastConfig(ILjava/util/ArrayList;)V
+HPLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/hardware/soundtrigger/SoundTrigger$StatusListener;->onRecognition(Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;)V
+HPLandroid/hardware/soundtrigger/SoundTrigger$StatusListener;->onServiceDied()V
+HPLandroid/hardware/soundtrigger/SoundTrigger$StatusListener;->onServiceStateChange(I)V
+HPLandroid/hardware/soundtrigger/SoundTrigger$StatusListener;->onSoundModelUpdate(Landroid/hardware/soundtrigger/SoundTrigger$SoundModelEvent;)V
+HPLandroid/hardware/usb/IUsbManager$Stub;-><init>()V
+HPLandroid/hardware/usb/IUsbManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/hardware/usb/UsbManager;->addFunction(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/hardware/usb/UsbManager;->containsFunction(Ljava/lang/String;Ljava/lang/String;)Z
+HPLandroid/hardware/usb/UsbPort$1;-><init>()V
+HPLandroid/hardware/usb/UsbPort;-><init>(Ljava/lang/String;I)V
+HPLandroid/hardware/usb/UsbPort;->checkRoles(II)V
+HPLandroid/hardware/usb/UsbPort;->combineRolesAsBit(II)I
+HPLandroid/hardware/usb/UsbPort;->dataRoleToString(I)Ljava/lang/String;
+HPLandroid/hardware/usb/UsbPort;->describeContents()I
+HPLandroid/hardware/usb/UsbPort;->getSupportedModes()I
+HPLandroid/hardware/usb/UsbPort;->isModeSupported(I)Z
+HPLandroid/hardware/usb/UsbPort;->modeToString(I)Ljava/lang/String;
+HPLandroid/hardware/usb/UsbPort;->powerRoleToString(I)Ljava/lang/String;
+HPLandroid/hardware/usb/UsbPort;->roleCombinationsToString(I)Ljava/lang/String;
+HPLandroid/hardware/usb/UsbPort;->toString()Ljava/lang/String;
+HPLandroid/hardware/usb/UsbPort;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/hardware/usb/UsbPortStatus$1;-><init>()V
+HPLandroid/hardware/usb/UsbPortStatus;-><init>(IIII)V
+HPLandroid/hardware/usb/UsbPortStatus;->describeContents()I
+HPLandroid/hardware/usb/UsbPortStatus;->getCurrentDataRole()I
+HPLandroid/hardware/usb/UsbPortStatus;->getCurrentMode()I
+HPLandroid/hardware/usb/UsbPortStatus;->getCurrentPowerRole()I
+HPLandroid/hardware/usb/UsbPortStatus;->getSupportedRoleCombinations()I
+HPLandroid/hardware/usb/UsbPortStatus;->isConnected()Z
+HPLandroid/hardware/usb/UsbPortStatus;->isRoleCombinationSupported(II)Z
+HPLandroid/hardware/usb/UsbPortStatus;->toString()Ljava/lang/String;
+HPLandroid/hardware/usb/UsbPortStatus;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/hidl/manager/V1_0/IServiceManager$Proxy;->getTransport(Ljava/lang/String;Ljava/lang/String;)B
+HPLandroid/hidl/manager/V1_0/IServiceManager$Proxy;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/icu/impl/CalendarAstronomer$2;-><init>(Landroid/icu/impl/CalendarAstronomer;)V
+HPLandroid/icu/impl/CalendarAstronomer$2;->eval()Landroid/icu/impl/CalendarAstronomer$Equatorial;
+HPLandroid/icu/impl/CalendarAstronomer$CoordFunc;->eval()Landroid/icu/impl/CalendarAstronomer$Equatorial;
+HPLandroid/icu/impl/CalendarAstronomer$Equatorial;-><init>(DD)V
+HPLandroid/icu/impl/CalendarAstronomer$MoonAge;-><init>(D)V
+HPLandroid/icu/impl/CalendarAstronomer$SolarLongitude;-><init>(D)V
+HPLandroid/icu/impl/CalendarAstronomer;-><init>()V
+HPLandroid/icu/impl/CalendarAstronomer;-><init>(DD)V
+HPLandroid/icu/impl/CalendarAstronomer;-><init>(J)V
+HPLandroid/icu/impl/CalendarAstronomer;->clearCache()V
+HPLandroid/icu/impl/CalendarAstronomer;->eclipticObliquity()D
+HPLandroid/icu/impl/CalendarAstronomer;->eclipticToEquatorial(DD)Landroid/icu/impl/CalendarAstronomer$Equatorial;
+HPLandroid/icu/impl/CalendarAstronomer;->getJulianDay()D
+HPLandroid/icu/impl/CalendarAstronomer;->getSiderealOffset()D
+HPLandroid/icu/impl/CalendarAstronomer;->getSunLongitude()D
+HPLandroid/icu/impl/CalendarAstronomer;->getSunLongitude(D)[D
+HPLandroid/icu/impl/CalendarAstronomer;->getSunPosition()Landroid/icu/impl/CalendarAstronomer$Equatorial;
+HPLandroid/icu/impl/CalendarAstronomer;->getSunRiseSet(Z)J
+HPLandroid/icu/impl/CalendarAstronomer;->lstToUT(D)J
+HPLandroid/icu/impl/CalendarAstronomer;->norm2PI(D)D
+HPLandroid/icu/impl/CalendarAstronomer;->normPI(D)D
+HPLandroid/icu/impl/CalendarAstronomer;->normalize(DD)D
+HPLandroid/icu/impl/CalendarAstronomer;->riseOrSet(Landroid/icu/impl/CalendarAstronomer$CoordFunc;ZDDJ)J
+HPLandroid/icu/impl/CalendarAstronomer;->setTime(J)V
+HPLandroid/icu/impl/CalendarAstronomer;->trueAnomaly(DD)D
+HPLandroid/icu/impl/CharTrie;->getCodePointValue(I)C
+HPLandroid/icu/impl/CharacterIteration;->next32(Ljava/text/CharacterIterator;)I
+HPLandroid/icu/impl/CharacterIteration;->nextTrail32(Ljava/text/CharacterIterator;I)I
+HPLandroid/icu/impl/CharacterIteration;->previous32(Ljava/text/CharacterIterator;)I
+HPLandroid/icu/impl/DontCareFieldPosition;-><init>()V
+HPLandroid/icu/impl/DontCareFieldPosition;->setBeginIndex(I)V
+HPLandroid/icu/impl/DontCareFieldPosition;->setEndIndex(I)V
+HPLandroid/icu/impl/ICULangDataTables;-><init>()V
+HPLandroid/icu/impl/ICULangDataTables;->get(Landroid/icu/util/ULocale;Z)Landroid/icu/impl/LocaleDisplayNamesImpl$DataTable;
+HPLandroid/icu/impl/ICURegionDataTables;-><init>()V
+HPLandroid/icu/impl/ICURegionDataTables;->get(Landroid/icu/util/ULocale;Z)Landroid/icu/impl/LocaleDisplayNamesImpl$DataTable;
+HPLandroid/icu/impl/ICUResourceTableAccess;->getTableString(Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/impl/JavaTimeZone;-><init>(Ljava/util/TimeZone;Ljava/lang/String;)V
+HPLandroid/icu/impl/JavaTimeZone;->clone()Ljava/lang/Object;
+HPLandroid/icu/impl/JavaTimeZone;->freeze()Landroid/icu/util/TimeZone;
+HPLandroid/icu/impl/JavaTimeZone;->getOffset(JZ[I)V
+HPLandroid/icu/impl/JavaTimeZone;->hashCode()I
+HPLandroid/icu/impl/JavaTimeZone;->isFrozen()Z
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$Cache;->-getandroid-icu-text-DisplayContext$TypeSwitchesValues()[I
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$Cache;-><init>()V
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$Cache;-><init>(Landroid/icu/impl/LocaleDisplayNamesImpl$Cache;)V
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$Cache;->get(Landroid/icu/util/ULocale;[Landroid/icu/text/DisplayContext;)Landroid/icu/text/LocaleDisplayNames;
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$CapitalizationContextUsage;-><init>(Ljava/lang/String;I)V
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$DataTable;-><init>(Z)V
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$DataTable;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$DataTables;-><init>()V
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$DataTables;->load(Ljava/lang/String;)Landroid/icu/impl/LocaleDisplayNamesImpl$DataTables;
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$ICUDataTable;-><init>(Ljava/lang/String;Landroid/icu/util/ULocale;Z)V
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$ICUDataTable;->get(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$ICUDataTable;->getLocale()Landroid/icu/util/ULocale;
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$ICUDataTables;-><init>(Ljava/lang/String;)V
+HPLandroid/icu/impl/LocaleDisplayNamesImpl$ICUDataTables;->get(Landroid/icu/util/ULocale;Z)Landroid/icu/impl/LocaleDisplayNamesImpl$DataTable;
+HPLandroid/icu/impl/LocaleDisplayNamesImpl;->-getandroid-icu-text-DisplayContext$TypeSwitchesValues()[I
+HPLandroid/icu/impl/LocaleDisplayNamesImpl;-><init>(Landroid/icu/util/ULocale;[Landroid/icu/text/DisplayContext;)V
+HPLandroid/icu/impl/LocaleDisplayNamesImpl;->adjustForUsageAndContext(Landroid/icu/impl/LocaleDisplayNamesImpl$CapitalizationContextUsage;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/impl/LocaleDisplayNamesImpl;->appendWithSep(Ljava/lang/String;Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;
+HPLandroid/icu/impl/LocaleDisplayNamesImpl;->getInstance(Landroid/icu/util/ULocale;[Landroid/icu/text/DisplayContext;)Landroid/icu/text/LocaleDisplayNames;
+HPLandroid/icu/impl/LocaleDisplayNamesImpl;->localeDisplayName(Ljava/util/Locale;)Ljava/lang/String;
+HPLandroid/icu/impl/LocaleDisplayNamesImpl;->localeDisplayNameInternal(Landroid/icu/util/ULocale;)Ljava/lang/String;
+HPLandroid/icu/impl/LocaleDisplayNamesImpl;->localeIdName(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/impl/LocaleDisplayNamesImpl;->regionDisplayName(Ljava/lang/String;Z)Ljava/lang/String;
+HPLandroid/icu/impl/Normalizer2Impl;->isCompYesAndZeroCC(I)Z
+HPLandroid/icu/impl/OlsonTimeZone;->clone()Ljava/lang/Object;
+HPLandroid/icu/impl/OlsonTimeZone;->getCanonicalID()Ljava/lang/String;
+HPLandroid/icu/impl/OlsonTimeZone;->isFrozen()Z
+HPLandroid/icu/impl/SimpleFormatterImpl;->formatCompiledPattern(Ljava/lang/String;[Ljava/lang/CharSequence;)Ljava/lang/String;
+HPLandroid/icu/impl/SimpleFormatterImpl;->formatRawPattern(Ljava/lang/String;II[Ljava/lang/CharSequence;)Ljava/lang/String;
+HPLandroid/icu/impl/TextTrieMap$Node;-><init>(Landroid/icu/impl/TextTrieMap;)V
+HPLandroid/icu/impl/TextTrieMap$Node;-><init>(Landroid/icu/impl/TextTrieMap;Landroid/icu/impl/TextTrieMap$Node;)V
+HPLandroid/icu/impl/TextTrieMap;-><init>(Z)V
+HPLandroid/icu/impl/TimeZoneNamesFactoryImpl;-><init>()V
+HPLandroid/icu/impl/TimeZoneNamesFactoryImpl;->getTimeZoneNames(Landroid/icu/util/ULocale;)Landroid/icu/text/TimeZoneNames;
+HPLandroid/icu/impl/TimeZoneNamesImpl$MZ2TZsCache;-><init>()V
+HPLandroid/icu/impl/TimeZoneNamesImpl$MZ2TZsCache;-><init>(Landroid/icu/impl/TimeZoneNamesImpl$MZ2TZsCache;)V
+HPLandroid/icu/impl/TimeZoneNamesImpl$MZMapEntry;-><init>(Ljava/lang/String;JJ)V
+HPLandroid/icu/impl/TimeZoneNamesImpl$MZMapEntry;->from()J
+HPLandroid/icu/impl/TimeZoneNamesImpl$MZMapEntry;->mzID()Ljava/lang/String;
+HPLandroid/icu/impl/TimeZoneNamesImpl$MZMapEntry;->to()J
+HPLandroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;-><init>()V
+HPLandroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;-><init>(Landroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;)V
+HPLandroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;->createInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
+HPLandroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;->parseDate(Ljava/lang/String;)J
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNames$NameTypeIndex;-><init>(Ljava/lang/String;I)V
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNames$NameTypeIndex;->values()[Landroid/icu/impl/TimeZoneNamesImpl$ZNames$NameTypeIndex;
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->-getandroid-icu-text-TimeZoneNames$NameTypeSwitchesValues()[I
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;-><init>([Ljava/lang/String;)V
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->createMetaZoneAndPutInCache(Ljava/util/Map;[Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->createTimeZoneAndPutInCache(Ljava/util/Map;[Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->getName(Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->getNameTypeIndex(Landroid/icu/text/TimeZoneNames$NameType;)I
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->-wrap0(Landroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;)[Ljava/lang/String;
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;-><init>()V
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;-><init>(Landroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;)V
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->getNames()[Ljava/lang/String;
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->loadMetaZone(Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;)V
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->loadNames(Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;)V
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->loadTimeZone(Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;)V
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->nameTypeIndexFromKey(Landroid/icu/impl/UResource$Key;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames$NameTypeIndex;
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->setNameIfEmpty(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HPLandroid/icu/impl/TimeZoneNamesImpl;-><init>(Landroid/icu/util/ULocale;)V
+HPLandroid/icu/impl/TimeZoneNamesImpl;->_getAvailableMetaZoneIDs(Ljava/lang/String;)Ljava/util/Set;
+HPLandroid/icu/impl/TimeZoneNamesImpl;->_getMetaZoneID(Ljava/lang/String;J)Ljava/lang/String;
+HPLandroid/icu/impl/TimeZoneNamesImpl;->getAvailableMetaZoneIDs(Ljava/lang/String;)Ljava/util/Set;
+HPLandroid/icu/impl/TimeZoneNamesImpl;->getDefaultExemplarLocationName(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/impl/TimeZoneNamesImpl;->getMetaZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
+HPLandroid/icu/impl/TimeZoneNamesImpl;->getMetaZoneID(Ljava/lang/String;J)Ljava/lang/String;
+HPLandroid/icu/impl/TimeZoneNamesImpl;->getTimeZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
+HPLandroid/icu/impl/TimeZoneNamesImpl;->initialize(Landroid/icu/util/ULocale;)V
+HPLandroid/icu/impl/TimeZoneNamesImpl;->loadMetaZoneNames(Ljava/lang/String;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
+HPLandroid/icu/impl/TimeZoneNamesImpl;->loadStrings(Ljava/lang/String;)V
+HPLandroid/icu/impl/TimeZoneNamesImpl;->loadTimeZoneNames(Ljava/lang/String;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
+HPLandroid/icu/impl/UBiDiProps;->getClass(I)I
+HPLandroid/icu/impl/UBiDiProps;->getClassFromProps(I)I
+HPLandroid/icu/impl/UResource$Key;->substring(II)Ljava/lang/String;
+HPLandroid/icu/impl/ZoneMeta;->getCanonicalCLDRID(Landroid/icu/util/TimeZone;)Ljava/lang/String;
+HPLandroid/icu/lang/UCharacter;->codePointAt(Ljava/lang/CharSequence;I)I
+HPLandroid/icu/lang/UCharacter;->getDirection(I)I
+HPLandroid/icu/lang/UCharacter;->isHighSurrogate(C)Z
+HPLandroid/icu/math/BigDecimal;-><init>(Ljava/lang/String;)V
+HPLandroid/icu/math/BigDecimal;-><init>(Ljava/math/BigInteger;I)V
+HPLandroid/icu/math/BigDecimal;-><init>([CII)V
+HPLandroid/icu/text/AlphabeticIndex$Bucket;->-get0(Landroid/icu/text/AlphabeticIndex$Bucket;)Landroid/icu/text/AlphabeticIndex$Bucket;
+HPLandroid/icu/text/AlphabeticIndex$Bucket;->-get1(Landroid/icu/text/AlphabeticIndex$Bucket;)I
+HPLandroid/icu/text/AlphabeticIndex$Bucket;->-get3(Landroid/icu/text/AlphabeticIndex$Bucket;)Ljava/lang/String;
+HPLandroid/icu/text/AlphabeticIndex$Bucket;->getLabel()Ljava/lang/String;
+HPLandroid/icu/text/AlphabeticIndex$BucketList;->-get0(Landroid/icu/text/AlphabeticIndex$BucketList;)Ljava/util/List;
+HPLandroid/icu/text/AlphabeticIndex$BucketList;->-wrap0(Landroid/icu/text/AlphabeticIndex$BucketList;)I
+HPLandroid/icu/text/AlphabeticIndex$BucketList;->-wrap1(Landroid/icu/text/AlphabeticIndex$BucketList;Ljava/lang/CharSequence;Landroid/icu/text/Collator;)I
+HPLandroid/icu/text/AlphabeticIndex$BucketList;->getBucketCount()I
+HPLandroid/icu/text/AlphabeticIndex$BucketList;->getBucketIndex(Ljava/lang/CharSequence;Landroid/icu/text/Collator;)I
+HPLandroid/icu/text/AlphabeticIndex$ImmutableIndex;->getBucket(I)Landroid/icu/text/AlphabeticIndex$Bucket;
+HPLandroid/icu/text/AlphabeticIndex$ImmutableIndex;->getBucketIndex(Ljava/lang/CharSequence;)I
+HPLandroid/icu/text/Bidi$ImpTabPair;-><init>([[B[[B[S[S)V
+HPLandroid/icu/text/Bidi;->DirPropFlag(B)I
+HPLandroid/icu/text/Bidi;->requiresBidi([CII)Z
+HPLandroid/icu/text/BreakIterator$BreakIteratorCache;->createBreakInstance()Landroid/icu/text/BreakIterator;
+HPLandroid/icu/text/BreakIterator$BreakIteratorCache;->getLocale()Landroid/icu/util/ULocale;
+HPLandroid/icu/text/BreakIterator;->setText(Ljava/lang/String;)V
+HPLandroid/icu/text/DateFormat;->format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HPLandroid/icu/text/DateFormat;->getCalendar()Landroid/icu/util/Calendar;
+HPLandroid/icu/text/DateFormat;->setTimeZone(Landroid/icu/util/TimeZone;)V
+HPLandroid/icu/text/DateIntervalFormat$BestMatchInfo;-><init>(Ljava/lang/String;I)V
+HPLandroid/icu/text/DateIntervalFormat$SkeletonAndItsBestMatch;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/icu/text/DateIntervalFormat;-><init>(Ljava/lang/String;Landroid/icu/util/ULocale;Landroid/icu/text/SimpleDateFormat;)V
+HPLandroid/icu/text/DateIntervalFormat;->format(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HPLandroid/icu/text/DateIntervalFormat;->genIntervalPattern(ILjava/lang/String;Ljava/lang/String;ILjava/util/Map;)Landroid/icu/text/DateIntervalFormat$SkeletonAndItsBestMatch;
+HPLandroid/icu/text/DateIntervalFormat;->genSeparateDateTimePtn(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Landroid/icu/text/DateTimePatternGenerator;)Z
+HPLandroid/icu/text/DateIntervalFormat;->getDateTimeSkeleton(Ljava/lang/String;Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;)V
+HPLandroid/icu/text/DateIntervalFormat;->getInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateIntervalFormat;
+HPLandroid/icu/text/DateIntervalFormat;->initializeIntervalPattern(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/util/Map;
+HPLandroid/icu/text/DateIntervalFormat;->initializePattern(Landroid/icu/impl/ICUCache;)V
+HPLandroid/icu/text/DateIntervalFormat;->setTimeZone(Landroid/icu/util/TimeZone;)V
+HPLandroid/icu/text/DateIntervalInfo$DateIntervalSink;-><init>(Landroid/icu/text/DateIntervalInfo;)V
+HPLandroid/icu/text/DateIntervalInfo$DateIntervalSink;->getAndResetNextCalendarType()Ljava/lang/String;
+HPLandroid/icu/text/DateIntervalInfo$DateIntervalSink;->processSkeletonTable(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HPLandroid/icu/text/DateIntervalInfo$DateIntervalSink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HPLandroid/icu/text/DateIntervalInfo$DateIntervalSink;->setIntervalPatternIfAbsent(Ljava/lang/String;Ljava/lang/String;Landroid/icu/impl/UResource$Value;)V
+HPLandroid/icu/text/DateIntervalInfo$DateIntervalSink;->validateAndProcessPatternLetter(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HPLandroid/icu/text/DateIntervalInfo$PatternInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V
+HPLandroid/icu/text/DateIntervalInfo;->-get0()Ljava/lang/String;
+HPLandroid/icu/text/DateIntervalInfo;->-get1()Ljava/lang/String;
+HPLandroid/icu/text/DateIntervalInfo;->-get2(Landroid/icu/text/DateIntervalInfo;)Ljava/util/Map;
+HPLandroid/icu/text/DateIntervalInfo;->-wrap0(Landroid/icu/text/DateIntervalInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/text/DateIntervalInfo$PatternInfo;
+HPLandroid/icu/text/DateIntervalInfo;-><init>(Landroid/icu/util/ULocale;)V
+HPLandroid/icu/text/DateIntervalInfo;->clone()Ljava/lang/Object;
+HPLandroid/icu/text/DateIntervalInfo;->cloneUnfrozenDII()Ljava/lang/Object;
+HPLandroid/icu/text/DateIntervalInfo;->freeze()Landroid/icu/text/DateIntervalInfo;
+HPLandroid/icu/text/DateIntervalInfo;->genPatternInfo(Ljava/lang/String;Z)Landroid/icu/text/DateIntervalInfo$PatternInfo;
+HPLandroid/icu/text/DateIntervalInfo;->getBestSkeleton(Ljava/lang/String;)Landroid/icu/text/DateIntervalFormat$BestMatchInfo;
+HPLandroid/icu/text/DateIntervalInfo;->getDefaultOrder()Z
+HPLandroid/icu/text/DateIntervalInfo;->getIntervalPattern(Ljava/lang/String;I)Landroid/icu/text/DateIntervalInfo$PatternInfo;
+HPLandroid/icu/text/DateIntervalInfo;->initializeData(Landroid/icu/util/ULocale;)V
+HPLandroid/icu/text/DateIntervalInfo;->parseSkeleton(Ljava/lang/String;[I)V
+HPLandroid/icu/text/DateIntervalInfo;->setFallbackIntervalPattern(Ljava/lang/String;)V
+HPLandroid/icu/text/DateIntervalInfo;->setIntervalPatternInternally(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/text/DateIntervalInfo$PatternInfo;
+HPLandroid/icu/text/DateIntervalInfo;->setup(Landroid/icu/util/ULocale;)V
+HPLandroid/icu/text/DateIntervalInfo;->splitPatternInto2Part(Ljava/lang/String;)I
+HPLandroid/icu/text/DateIntervalInfo;->stringNumeric(IIC)Z
+HPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->getFieldMask()I
+HPLandroid/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;
+HPLandroid/icu/text/DateTimePatternGenerator;->getDateTimeFormat()Ljava/lang/String;
+HPLandroid/icu/text/DecimalFormat;->getNegativePrefix()Ljava/lang/String;
+HPLandroid/icu/text/DecimalFormat;->getNegativeSuffix()Ljava/lang/String;
+HPLandroid/icu/text/DecimalFormat;->getPositivePrefix()Ljava/lang/String;
+HPLandroid/icu/text/DecimalFormat;->getPositiveSuffix()Ljava/lang/String;
+HPLandroid/icu/text/DecimalFormatSymbols;->getInstance(Ljava/util/Locale;)Landroid/icu/text/DecimalFormatSymbols;
+HPLandroid/icu/text/DigitList;->getBigDecimalICU(Z)Landroid/icu/math/BigDecimal;
+HPLandroid/icu/text/DisplayContext$Type;->values()[Landroid/icu/text/DisplayContext$Type;
+HPLandroid/icu/text/Edits$Iterator;-><init>([CIZZ)V
+HPLandroid/icu/text/Edits$Iterator;-><init>([CIZZLandroid/icu/text/Edits$Iterator;)V
+HPLandroid/icu/text/Edits$Iterator;->destinationIndex()I
+HPLandroid/icu/text/Edits$Iterator;->findSourceIndex(I)Z
+HPLandroid/icu/text/Edits$Iterator;->hasChange()Z
+HPLandroid/icu/text/Edits$Iterator;->next(Z)Z
+HPLandroid/icu/text/Edits$Iterator;->sourceIndex()I
+HPLandroid/icu/text/Edits$Iterator;->updateIndexes()V
+HPLandroid/icu/text/Edits;->getFineIterator()Landroid/icu/text/Edits$Iterator;
+HPLandroid/icu/text/LocaleDisplayNames$DialectHandling;-><init>(Ljava/lang/String;I)V
+HPLandroid/icu/text/LocaleDisplayNames;-><init>()V
+HPLandroid/icu/text/LocaleDisplayNames;->getContext(Landroid/icu/text/DisplayContext$Type;)Landroid/icu/text/DisplayContext;
+HPLandroid/icu/text/LocaleDisplayNames;->getDialectHandling()Landroid/icu/text/LocaleDisplayNames$DialectHandling;
+HPLandroid/icu/text/LocaleDisplayNames;->getInstance(Landroid/icu/util/ULocale;[Landroid/icu/text/DisplayContext;)Landroid/icu/text/LocaleDisplayNames;
+HPLandroid/icu/text/LocaleDisplayNames;->getInstance(Ljava/util/Locale;[Landroid/icu/text/DisplayContext;)Landroid/icu/text/LocaleDisplayNames;
+HPLandroid/icu/text/LocaleDisplayNames;->getLocale()Landroid/icu/util/ULocale;
+HPLandroid/icu/text/LocaleDisplayNames;->getUiListCompareWholeItems(Ljava/util/Set;Ljava/util/Comparator;)Ljava/util/List;
+HPLandroid/icu/text/LocaleDisplayNames;->keyDisplayName(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/text/LocaleDisplayNames;->keyValueDisplayName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/text/LocaleDisplayNames;->languageDisplayName(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/text/LocaleDisplayNames;->localeDisplayName(Landroid/icu/util/ULocale;)Ljava/lang/String;
+HPLandroid/icu/text/LocaleDisplayNames;->localeDisplayName(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/text/LocaleDisplayNames;->localeDisplayName(Ljava/util/Locale;)Ljava/lang/String;
+HPLandroid/icu/text/LocaleDisplayNames;->regionDisplayName(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/text/LocaleDisplayNames;->scriptDisplayName(I)Ljava/lang/String;
+HPLandroid/icu/text/LocaleDisplayNames;->scriptDisplayName(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/text/LocaleDisplayNames;->variantDisplayName(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/text/RBBIDataWrapper;->getRowIndex(I)I
+HPLandroid/icu/text/RBBIDataWrapper;->getStateTableFlags([S)I
+HPLandroid/icu/text/RelativeDateTimeFormatter$AbsoluteUnit;-><init>(Ljava/lang/String;I)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$AbsoluteUnit;->values()[Landroid/icu/text/RelativeDateTimeFormatter$AbsoluteUnit;
+HPLandroid/icu/text/RelativeDateTimeFormatter$Cache$1;-><init>(Landroid/icu/text/RelativeDateTimeFormatter$Cache;)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$Cache$1;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroid/icu/text/RelativeDateTimeFormatter$Cache$1;->createInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeFormatterData;
+HPLandroid/icu/text/RelativeDateTimeFormatter$Cache;-><init>()V
+HPLandroid/icu/text/RelativeDateTimeFormatter$Cache;-><init>(Landroid/icu/text/RelativeDateTimeFormatter$Cache;)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$Cache;->get(Landroid/icu/util/ULocale;)Landroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeFormatterData;
+HPLandroid/icu/text/RelativeDateTimeFormatter$Direction;-><init>(Ljava/lang/String;I)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$Direction;->values()[Landroid/icu/text/RelativeDateTimeFormatter$Direction;
+HPLandroid/icu/text/RelativeDateTimeFormatter$Loader;-><init>(Landroid/icu/util/ULocale;)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$Loader;->getDateTimePattern(Landroid/icu/impl/ICUResourceBundle;)Ljava/lang/String;
+HPLandroid/icu/text/RelativeDateTimeFormatter$Loader;->load()Landroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeFormatterData;
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink$DateTimeUnit;->-wrap0(Ljava/lang/CharSequence;)Landroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink$DateTimeUnit;
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink$DateTimeUnit;-><init>(Ljava/lang/String;ILandroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;Landroid/icu/text/RelativeDateTimeFormatter$AbsoluteUnit;)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink$DateTimeUnit;->orNullFromString(Ljava/lang/CharSequence;)Landroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink$DateTimeUnit;
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink;->-getandroid-icu-text-RelativeDateTimeFormatter$StyleSwitchesValues()[I
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink;-><init>()V
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink;->consumeTableRelative(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink;->consumeTableRelativeTime(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink;->consumeTimeDetail(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink;->consumeTimeUnit(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink;->handleAlias(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink;->handlePlainDirection(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink;->styleFromAlias(Landroid/icu/impl/UResource$Value;)Landroid/icu/text/RelativeDateTimeFormatter$Style;
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink;->styleFromKey(Landroid/icu/impl/UResource$Key;)Landroid/icu/text/RelativeDateTimeFormatter$Style;
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelDateTimeDataSink;->styleSuffixLength(Landroid/icu/text/RelativeDateTimeFormatter$Style;)I
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeFormatterData;-><init>(Ljava/util/EnumMap;Ljava/util/EnumMap;Ljava/lang/String;)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;-><init>(Ljava/lang/String;I)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;->values()[Landroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;
+HPLandroid/icu/text/RelativeDateTimeFormatter$Style;-><init>(Ljava/lang/String;I)V
+HPLandroid/icu/text/RelativeDateTimeFormatter$Style;->values()[Landroid/icu/text/RelativeDateTimeFormatter$Style;
+HPLandroid/icu/text/RelativeDateTimeFormatter;->-get0()[Landroid/icu/text/RelativeDateTimeFormatter$Style;
+HPLandroid/icu/text/RelativeDateTimeFormatter;->-wrap0(Landroid/icu/impl/UResource$Key;)Landroid/icu/text/RelativeDateTimeFormatter$Direction;
+HPLandroid/icu/text/RelativeDateTimeFormatter;-><init>(Ljava/util/EnumMap;Ljava/util/EnumMap;Ljava/lang/String;Landroid/icu/text/PluralRules;Landroid/icu/text/NumberFormat;Landroid/icu/text/RelativeDateTimeFormatter$Style;Landroid/icu/text/DisplayContext;Landroid/icu/text/BreakIterator;Landroid/icu/util/ULocale;)V
+HPLandroid/icu/text/RelativeDateTimeFormatter;->adjustForContext(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/text/RelativeDateTimeFormatter;->format(DLandroid/icu/text/RelativeDateTimeFormatter$Direction;Landroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;)Ljava/lang/String;
+HPLandroid/icu/text/RelativeDateTimeFormatter;->getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/NumberFormat;Landroid/icu/text/RelativeDateTimeFormatter$Style;Landroid/icu/text/DisplayContext;)Landroid/icu/text/RelativeDateTimeFormatter;
+HPLandroid/icu/text/RelativeDateTimeFormatter;->getRelativeUnitPattern(Landroid/icu/text/RelativeDateTimeFormatter$Style;Landroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;ILandroid/icu/impl/StandardPlural;)Ljava/lang/String;
+HPLandroid/icu/text/RelativeDateTimeFormatter;->getRelativeUnitPluralPattern(Landroid/icu/text/RelativeDateTimeFormatter$Style;Landroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;ILandroid/icu/impl/StandardPlural;)Ljava/lang/String;
+HPLandroid/icu/text/RelativeDateTimeFormatter;->keyToDirection(Landroid/icu/impl/UResource$Key;)Landroid/icu/text/RelativeDateTimeFormatter$Direction;
+HPLandroid/icu/text/RuleBasedBreakIterator$LookAheadResults;->reset()V
+HPLandroid/icu/text/RuleBasedBreakIterator;->current()I
+HPLandroid/icu/text/RuleBasedBreakIterator;->first()I
+HPLandroid/icu/text/RuleBasedBreakIterator;->following(I)I
+HPLandroid/icu/text/RuleBasedBreakIterator;->getText()Ljava/text/CharacterIterator;
+HPLandroid/icu/text/RuleBasedBreakIterator;->handleNext([S)I
+HPLandroid/icu/text/RuleBasedBreakIterator;->handlePrevious([S)I
+HPLandroid/icu/text/RuleBasedBreakIterator;->last()I
+HPLandroid/icu/text/RuleBasedBreakIterator;->next()I
+HPLandroid/icu/text/RuleBasedBreakIterator;->preceding(I)I
+HPLandroid/icu/text/RuleBasedBreakIterator;->previous()I
+HPLandroid/icu/text/RuleBasedBreakIterator;->rulesFollowing(I)I
+HPLandroid/icu/text/RuleBasedBreakIterator;->rulesPreceding(I)I
+HPLandroid/icu/text/RuleBasedBreakIterator;->setText(Ljava/text/CharacterIterator;)V
+HPLandroid/icu/text/SimpleDateFormat;->getLevelFromChar(C)I
+HPLandroid/icu/text/SimpleDateFormat;->getLocale()Landroid/icu/util/ULocale;
+HPLandroid/icu/text/SimpleDateFormat;->isFieldUnitIgnored(Ljava/lang/String;I)Z
+HPLandroid/icu/text/TimeZoneNames$Cache;-><init>()V
+HPLandroid/icu/text/TimeZoneNames$Cache;-><init>(Landroid/icu/text/TimeZoneNames$Cache;)V
+HPLandroid/icu/text/TimeZoneNames$Cache;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroid/icu/text/TimeZoneNames$Cache;->createInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/TimeZoneNames;
+HPLandroid/icu/text/TimeZoneNames$Factory;-><init>()V
+HPLandroid/icu/text/TimeZoneNames$Factory;->getTimeZoneNames(Landroid/icu/util/ULocale;)Landroid/icu/text/TimeZoneNames;
+HPLandroid/icu/text/TimeZoneNames;->-get0()Landroid/icu/text/TimeZoneNames$Factory;
+HPLandroid/icu/text/TimeZoneNames;-><init>()V
+HPLandroid/icu/text/TimeZoneNames;->getAvailableMetaZoneIDs()Ljava/util/Set;
+HPLandroid/icu/text/TimeZoneNames;->getAvailableMetaZoneIDs(Ljava/lang/String;)Ljava/util/Set;
+HPLandroid/icu/text/TimeZoneNames;->getDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;J)Ljava/lang/String;
+HPLandroid/icu/text/TimeZoneNames;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/TimeZoneNames;
+HPLandroid/icu/text/TimeZoneNames;->getInstance(Ljava/util/Locale;)Landroid/icu/text/TimeZoneNames;
+HPLandroid/icu/text/TimeZoneNames;->getMetaZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
+HPLandroid/icu/text/TimeZoneNames;->getMetaZoneID(Ljava/lang/String;J)Ljava/lang/String;
+HPLandroid/icu/text/TimeZoneNames;->getReferenceZoneID(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/icu/text/TimeZoneNames;->getTimeZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
+HPLandroid/icu/text/UTF16;->isTrailSurrogate(C)Z
+HPLandroid/icu/util/Calendar;->clone()Ljava/lang/Object;
+HPLandroid/icu/util/Calendar;->getRepeatedWallTimeOption()I
+HPLandroid/icu/util/Calendar;->getSkippedWallTimeOption()I
+HPLandroid/icu/util/Calendar;->isEquivalentTo(Landroid/icu/util/Calendar;)Z
+HPLandroid/icu/util/Calendar;->isLenient()Z
+HPLandroid/icu/util/GregorianCalendar;->isEquivalentTo(Landroid/icu/util/Calendar;)Z
+HPLandroid/icu/util/TimeZone;-><init>()V
+HPLandroid/icu/util/TimeZone;->equals(Ljava/lang/Object;)Z
+HPLandroid/icu/util/TimeZone;->hashCode()I
+HPLandroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;->dispatchKeyEvent(ILandroid/view/KeyEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V
+HPLandroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;->isEnabled()Z
+HPLandroid/inputmethodservice/IInputMethodSessionWrapper$ImeInputEventReceiver;->finishedEvent(IZ)V
+HPLandroid/inputmethodservice/IInputMethodSessionWrapper$ImeInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;I)V
+HPLandroid/inputmethodservice/IInputMethodSessionWrapper;->displayCompletions([Landroid/view/inputmethod/CompletionInfo;)V
+HPLandroid/inputmethodservice/IInputMethodSessionWrapper;->doFinishSession()V
+HPLandroid/inputmethodservice/IInputMethodSessionWrapper;->executeMessage(Landroid/os/Message;)V
+HPLandroid/inputmethodservice/IInputMethodSessionWrapper;->finishSession()V
+HPLandroid/inputmethodservice/IInputMethodSessionWrapper;->updateSelection(IIIIII)V
+HPLandroid/inputmethodservice/IInputMethodSessionWrapper;->viewClicked(Z)V
+HPLandroid/inputmethodservice/IInputMethodWrapper;->changeInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)V
+HPLandroid/inputmethodservice/IInputMethodWrapper;->hideSoftInput(ILandroid/os/ResultReceiver;)V
+HPLandroid/inputmethodservice/IInputMethodWrapper;->showSoftInput(ILandroid/os/ResultReceiver;)V
+HPLandroid/inputmethodservice/IInputMethodWrapper;->unbindInput()V
+HPLandroid/inputmethodservice/InputMethodService$1;->onComputeInternalInsets(Landroid/view/ViewTreeObserver$InternalInsetsInfo;)V
+HPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->changeInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)V
+HPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->hideSoftInput(ILandroid/os/ResultReceiver;)V
+HPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->restartInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V
+HPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->showSoftInput(ILandroid/os/ResultReceiver;)V
+HPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->unbindInput()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
+HPLandroid/inputmethodservice/InputMethodService;->-get0(Landroid/inputmethodservice/InputMethodService;)Landroid/os/IBinder;
+HPLandroid/inputmethodservice/InputMethodService;->-wrap0(Landroid/inputmethodservice/InputMethodService;IZ)Z
+HPLandroid/inputmethodservice/InputMethodService;->-wrap1(Landroid/inputmethodservice/InputMethodService;)V
+HPLandroid/inputmethodservice/InputMethodService;->-wrap2(Landroid/inputmethodservice/InputMethodService;)V
+HPLandroid/inputmethodservice/InputMethodService;->clearInsetOfPreviousIme()V
+HPLandroid/inputmethodservice/InputMethodService;->dispatchOnShowInputRequested(IZ)Z
+HPLandroid/inputmethodservice/InputMethodService;->doHideWindow()V
+HPLandroid/inputmethodservice/InputMethodService;->doMovementKey(ILandroid/view/KeyEvent;I)Z
+HPLandroid/inputmethodservice/InputMethodService;->finishViews()V
+HPLandroid/inputmethodservice/InputMethodService;->getCurrentInputConnection()Landroid/view/inputmethod/InputConnection;
+HPLandroid/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
+HPLandroid/inputmethodservice/InputMethodService;->isFullscreenMode()Z
+HPLandroid/inputmethodservice/InputMethodService;->isInputViewShown()Z
+HPLandroid/inputmethodservice/InputMethodService;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/inputmethodservice/InputMethodService;->onConfigureWindow(Landroid/view/Window;ZZ)V
+HPLandroid/inputmethodservice/InputMethodService;->onDisplayCompletions([Landroid/view/inputmethod/CompletionInfo;)V
+HPLandroid/inputmethodservice/InputMethodService;->onEvaluateFullscreenMode()Z
+HPLandroid/inputmethodservice/InputMethodService;->onFinishInput()V
+HPLandroid/inputmethodservice/InputMethodService;->onFinishInputView(Z)V
+HPLandroid/inputmethodservice/InputMethodService;->onKeyDown(ILandroid/view/KeyEvent;)Z
+HPLandroid/inputmethodservice/InputMethodService;->onKeyUp(ILandroid/view/KeyEvent;)Z
+HPLandroid/inputmethodservice/InputMethodService;->onShowInputRequested(IZ)Z
+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;->requestHideSelf(I)V
+HPLandroid/inputmethodservice/InputMethodService;->resetStateForNewConfiguration()V
+HPLandroid/inputmethodservice/InputMethodService;->setInputView(Landroid/view/View;)V
+HPLandroid/inputmethodservice/InputMethodService;->showWindow(Z)V
+HPLandroid/inputmethodservice/InputMethodService;->showWindowInner(Z)V
+HPLandroid/inputmethodservice/InputMethodService;->startExtractingText(Z)V
+HPLandroid/inputmethodservice/InputMethodService;->updateCandidatesVisibility(Z)V
+HPLandroid/inputmethodservice/InputMethodService;->updateExtractFrameVisibility()V
+HPLandroid/inputmethodservice/InputMethodService;->updateFullscreenMode()V
+HPLandroid/inputmethodservice/InputMethodService;->updateInputViewShown()V
+HPLandroid/inputmethodservice/SoftInputWindow;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/location/Address$1;-><init>()V
+HPLandroid/location/Address$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/Address;
+HPLandroid/location/Address$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/location/Address;->-get0(Landroid/location/Address;)Ljava/util/HashMap;
+HPLandroid/location/Address;->-get1(Landroid/location/Address;)Z
+HPLandroid/location/Address;->-get2(Landroid/location/Address;)Z
+HPLandroid/location/Address;->-get3(Landroid/location/Address;)I
+HPLandroid/location/Address;->-set0(Landroid/location/Address;Ljava/util/HashMap;)Ljava/util/HashMap;
+HPLandroid/location/Address;->-set1(Landroid/location/Address;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/Address;->-set10(Landroid/location/Address;D)D
+HPLandroid/location/Address;->-set11(Landroid/location/Address;I)I
+HPLandroid/location/Address;->-set12(Landroid/location/Address;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/Address;->-set13(Landroid/location/Address;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/Address;->-set14(Landroid/location/Address;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/Address;->-set15(Landroid/location/Address;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/Address;->-set16(Landroid/location/Address;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/Address;->-set17(Landroid/location/Address;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/Address;->-set18(Landroid/location/Address;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/Address;->-set19(Landroid/location/Address;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/Address;->-set2(Landroid/location/Address;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/Address;->-set3(Landroid/location/Address;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/Address;->-set4(Landroid/location/Address;Landroid/os/Bundle;)Landroid/os/Bundle;
+HPLandroid/location/Address;->-set5(Landroid/location/Address;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/Address;->-set6(Landroid/location/Address;Z)Z
+HPLandroid/location/Address;->-set7(Landroid/location/Address;Z)Z
+HPLandroid/location/Address;->-set8(Landroid/location/Address;D)D
+HPLandroid/location/Address;->-set9(Landroid/location/Address;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/Address;-><init>(Ljava/util/Locale;)V
+HPLandroid/location/Address;->getCountryCode()Ljava/lang/String;
+HPLandroid/location/Address;->setAddressLine(ILjava/lang/String;)V
+HPLandroid/location/Address;->setAdminArea(Ljava/lang/String;)V
+HPLandroid/location/Address;->setCountryCode(Ljava/lang/String;)V
+HPLandroid/location/Address;->setCountryName(Ljava/lang/String;)V
+HPLandroid/location/Address;->setFeatureName(Ljava/lang/String;)V
+HPLandroid/location/Address;->setLatitude(D)V
+HPLandroid/location/Address;->setLocality(Ljava/lang/String;)V
+HPLandroid/location/Address;->setLongitude(D)V
+HPLandroid/location/Address;->setPostalCode(Ljava/lang/String;)V
+HPLandroid/location/Address;->setPremises(Ljava/lang/String;)V
+HPLandroid/location/Address;->setSubThoroughfare(Ljava/lang/String;)V
+HPLandroid/location/Address;->setThoroughfare(Ljava/lang/String;)V
+HPLandroid/location/Address;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/location/Country$1;-><init>()V
+HPLandroid/location/Country$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/Country;
+HPLandroid/location/Country$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/location/Country;-><init>(Landroid/location/Country;)V
+HPLandroid/location/Country;-><init>(Ljava/lang/String;I)V
+HPLandroid/location/Country;-><init>(Ljava/lang/String;IJ)V
+HPLandroid/location/Country;-><init>(Ljava/lang/String;IJLandroid/location/Country;)V
+HPLandroid/location/Country;->equals(Ljava/lang/Object;)Z
+HPLandroid/location/Country;->getCountryIso()Ljava/lang/String;
+HPLandroid/location/Country;->getSource()I
+HPLandroid/location/Country;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/location/CountryDetector$ListenerTransport$1;-><init>(Landroid/location/CountryDetector$ListenerTransport;Landroid/location/Country;)V
+HPLandroid/location/CountryDetector$ListenerTransport$1;->run()V
+HPLandroid/location/CountryDetector$ListenerTransport;->-get0(Landroid/location/CountryDetector$ListenerTransport;)Landroid/location/CountryListener;
+HPLandroid/location/CountryDetector$ListenerTransport;-><init>(Landroid/location/CountryListener;Landroid/os/Looper;)V
+HPLandroid/location/CountryDetector$ListenerTransport;->onCountryDetected(Landroid/location/Country;)V
+HPLandroid/location/CountryDetector;-><init>(Landroid/location/ICountryDetector;)V
+HPLandroid/location/CountryDetector;->addCountryListener(Landroid/location/CountryListener;Landroid/os/Looper;)V
+HPLandroid/location/CountryDetector;->detectCountry()Landroid/location/Country;
+HPLandroid/location/Geocoder;->getFromLocation(DDI)Ljava/util/List;
+HPLandroid/location/GeocoderParams$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/GeocoderParams;
+HPLandroid/location/GeocoderParams$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/location/GeocoderParams;->-set0(Landroid/location/GeocoderParams;Ljava/util/Locale;)Ljava/util/Locale;
+HPLandroid/location/GeocoderParams;->-set1(Landroid/location/GeocoderParams;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/location/GeocoderParams;-><init>()V
+HPLandroid/location/GeocoderParams;-><init>(Landroid/location/GeocoderParams;)V
+HPLandroid/location/GeocoderParams;->getClientPackage()Ljava/lang/String;
+HPLandroid/location/GeocoderParams;->getLocale()Ljava/util/Locale;
+HPLandroid/location/GeocoderParams;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/location/GpsSatellite;->usedInFix()Z
+HPLandroid/location/ICountryDetector$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/location/ICountryDetector$Stub$Proxy;->detectCountry()Landroid/location/Country;
+HPLandroid/location/ICountryDetector$Stub;-><init>()V
+HPLandroid/location/ICountryDetector$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ICountryDetector;
+HPLandroid/location/ICountryDetector$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/location/ICountryDetector;->addCountryListener(Landroid/location/ICountryListener;)V
+HPLandroid/location/ICountryDetector;->detectCountry()Landroid/location/Country;
+HPLandroid/location/ICountryDetector;->removeCountryListener(Landroid/location/ICountryListener;)V
+HPLandroid/location/ICountryListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/location/ICountryListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/location/ICountryListener$Stub$Proxy;->onCountryDetected(Landroid/location/Country;)V
+HPLandroid/location/ICountryListener$Stub;-><init>()V
+HPLandroid/location/ICountryListener$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/location/ICountryListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ICountryListener;
+HPLandroid/location/ICountryListener;->onCountryDetected(Landroid/location/Country;)V
+HPLandroid/location/IFusedProvider$Stub;-><init>()V
+HPLandroid/location/IFusedProvider;->onFusedLocationHardwareChange(Landroid/hardware/location/IFusedLocationHardware;)V
+HPLandroid/location/IGeocodeProvider$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/location/IGeocodeProvider$Stub$Proxy;->getFromLocation(DDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String;
+HPLandroid/location/IGeocodeProvider$Stub;-><init>()V
+HPLandroid/location/IGeocodeProvider$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/IGeocodeProvider;
+HPLandroid/location/IGeocodeProvider$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/location/IGeocodeProvider;->getFromLocation(DDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String;
+HPLandroid/location/IGeocodeProvider;->getFromLocationName(Ljava/lang/String;DDDDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String;
+HPLandroid/location/IGeofenceProvider$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/location/IGeofenceProvider$Stub$Proxy;->setGeofenceHardware(Landroid/hardware/location/IGeofenceHardware;)V
+HPLandroid/location/IGeofenceProvider$Stub;-><init>()V
+HPLandroid/location/IGeofenceProvider$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/IGeofenceProvider;
+HPLandroid/location/IGeofenceProvider$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/location/IGeofenceProvider;->setGeofenceHardware(Landroid/hardware/location/IGeofenceHardware;)V
+HPLandroid/location/IGnssStatusListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/location/IGnssStatusListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+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)V
+HPLandroid/location/IGnssStatusListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/IGnssStatusListener;
+HPLandroid/location/IGnssStatusProvider$Stub;-><init>()V
+HPLandroid/location/IGnssStatusProvider;->registerGnssStatusCallback(Landroid/location/IGnssStatusListener;)V
+HPLandroid/location/IGnssStatusProvider;->unregisterGnssStatusCallback(Landroid/location/IGnssStatusListener;)V
+HPLandroid/location/IGpsGeofenceHardware$Stub;-><init>()V
+HPLandroid/location/IGpsGeofenceHardware;->addCircularHardwareGeofence(IDDDIIII)Z
+HPLandroid/location/IGpsGeofenceHardware;->isHardwareGeofenceSupported()Z
+HPLandroid/location/IGpsGeofenceHardware;->pauseHardwareGeofence(I)Z
+HPLandroid/location/IGpsGeofenceHardware;->removeHardwareGeofence(I)Z
+HPLandroid/location/IGpsGeofenceHardware;->resumeHardwareGeofence(II)Z
+HPLandroid/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
+HPLandroid/location/ILocationListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationListener;
+HPLandroid/location/ILocationListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/location/ILocationManager$Stub$Proxy;->getProviderProperties(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;
+HPLandroid/location/ILocationManager$Stub$Proxy;->locationCallbackFinished(Landroid/location/ILocationListener;)V
+HPLandroid/location/ILocationManager$Stub$Proxy;->removeUpdates(Landroid/location/ILocationListener;Landroid/app/PendingIntent;Ljava/lang/String;)V
+HPLandroid/location/ILocationManager$Stub$Proxy;->reportLocation(Landroid/location/Location;Z)V
+HPLandroid/location/ILocationManager$Stub$Proxy;->unregisterGnssStatusCallback(Landroid/location/IGnssStatusListener;)V
+HPLandroid/location/ILocationManager$Stub;-><init>()V
+HPLandroid/location/ILocationManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/location/INetInitiatedListener$Stub;-><init>()V
+HPLandroid/location/INetInitiatedListener;->sendNiResponse(II)Z
+HPLandroid/location/Location;-><init>(Landroid/location/Location;)V
+HPLandroid/location/Location;->getBearing()F
+HPLandroid/location/Location;->getExtraLocation(Ljava/lang/String;)Landroid/location/Location;
+HPLandroid/location/Location;->getSpeed()F
+HPLandroid/location/Location;->hasBearingAccuracy()Z
+HPLandroid/location/Location;->hasSpeedAccuracy()Z
+HPLandroid/location/Location;->hasVerticalAccuracy()Z
+HPLandroid/location/Location;->isComplete()Z
+HPLandroid/location/Location;->isFromMockProvider()Z
+HPLandroid/location/Location;->removeAltitude()V
+HPLandroid/location/Location;->removeBearing()V
+HPLandroid/location/Location;->removeSpeed()V
+HPLandroid/location/Location;->set(Landroid/location/Location;)V
+HPLandroid/location/Location;->setElapsedRealtimeNanos(J)V
+HPLandroid/location/Location;->setExtraLocation(Ljava/lang/String;Landroid/location/Location;)V
+HPLandroid/location/Location;->setProvider(Ljava/lang/String;)V
+HPLandroid/location/Location;->setSpeed(F)V
+HPLandroid/location/Location;->toString()Ljava/lang/String;
+HPLandroid/location/Location;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/location/LocationManager$GnssStatusListenerTransport$1;->onFirstFix(I)V
+HPLandroid/location/LocationManager$GnssStatusListenerTransport$1;->onStopped()V
+HPLandroid/location/LocationManager$GnssStatusListenerTransport;->onFirstFix(I)V
+HPLandroid/location/LocationManager$GnssStatusListenerTransport;->onGnssStopped()V
+HPLandroid/location/LocationManager$ListenerTransport$1;->handleMessage(Landroid/os/Message;)V
+HPLandroid/location/LocationManager$ListenerTransport$2;-><init>(Landroid/location/LocationManager$ListenerTransport;Landroid/os/Looper;)V
+HPLandroid/location/LocationManager$ListenerTransport$2;->handleMessage(Landroid/os/Message;)V
+HPLandroid/location/LocationManager$ListenerTransport;->-wrap0(Landroid/location/LocationManager$ListenerTransport;Landroid/os/Message;)V
+HPLandroid/location/LocationManager$ListenerTransport;->_handleMessage(Landroid/os/Message;)V
+HPLandroid/location/LocationManager$ListenerTransport;->onLocationChanged(Landroid/location/Location;)V
+HPLandroid/location/LocationManager;->-get1(Landroid/location/LocationManager;)Landroid/location/ILocationManager;
+HPLandroid/location/LocationManager;->-get2(Landroid/location/LocationManager;)I
+HPLandroid/location/LocationManager;->-set1(Landroid/location/LocationManager;I)I
+HPLandroid/location/LocationManager;->createProvider(Ljava/lang/String;Lcom/android/internal/location/ProviderProperties;)Landroid/location/LocationProvider;
+HPLandroid/location/LocationManager;->getProvider(Ljava/lang/String;)Landroid/location/LocationProvider;
+HPLandroid/location/LocationManager;->removeGpsStatusListener(Landroid/location/GpsStatus$Listener;)V
+HPLandroid/location/LocationManager;->removeUpdates(Landroid/location/LocationListener;)V
+HPLandroid/location/LocationManager;->requestLocationUpdates(Landroid/location/LocationRequest;Landroid/location/LocationListener;Landroid/os/Looper;)V
+HPLandroid/location/LocationProvider;-><init>(Ljava/lang/String;Lcom/android/internal/location/ProviderProperties;)V
+HPLandroid/location/LocationRequest$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/LocationRequest;
+HPLandroid/location/LocationRequest$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/location/LocationRequest;-><init>(Landroid/location/LocationRequest;)V
+HPLandroid/location/LocationRequest;->decrementNumUpdates()V
+HPLandroid/location/LocationRequest;->getExpireAt()J
+HPLandroid/location/LocationRequest;->getFastestInterval()J
+HPLandroid/location/LocationRequest;->getHideFromAppOps()Z
+HPLandroid/location/LocationRequest;->getInterval()J
+HPLandroid/location/LocationRequest;->getNumUpdates()I
+HPLandroid/location/LocationRequest;->getProvider()Ljava/lang/String;
+HPLandroid/location/LocationRequest;->getSmallestDisplacement()F
+HPLandroid/location/LocationRequest;->getWorkSource()Landroid/os/WorkSource;
+HPLandroid/location/LocationRequest;->setExpireAt(J)Landroid/location/LocationRequest;
+HPLandroid/location/LocationRequest;->setHideFromAppOps(Z)V
+HPLandroid/location/LocationRequest;->setWorkSource(Landroid/os/WorkSource;)V
+HPLandroid/media/AudioAttributes$Builder;-><init>(Landroid/media/AudioAttributes;)V
+HPLandroid/media/AudioAttributes$Builder;->replaceFlags(I)Landroid/media/AudioAttributes$Builder;
+HPLandroid/media/AudioAttributes$Builder;->setInternalCapturePreset(I)Landroid/media/AudioAttributes$Builder;
+HPLandroid/media/AudioAttributes$Builder;->setLegacyStreamType(I)Landroid/media/AudioAttributes$Builder;
+HPLandroid/media/AudioAttributes;->-get0(Landroid/media/AudioAttributes;)I
+HPLandroid/media/AudioAttributes;->-get1(Landroid/media/AudioAttributes;)I
+HPLandroid/media/AudioAttributes;->-get2(Landroid/media/AudioAttributes;)Ljava/util/HashSet;
+HPLandroid/media/AudioAttributes;->-get3(Landroid/media/AudioAttributes;)I
+HPLandroid/media/AudioAttributes;->equals(Ljava/lang/Object;)Z
+HPLandroid/media/AudioAttributes;->getCapturePreset()I
+HPLandroid/media/AudioAttributes;->getContentType()I
+HPLandroid/media/AudioAttributes;->toLegacyStreamType(Landroid/media/AudioAttributes;)I
+HPLandroid/media/AudioDeviceCallback;-><init>()V
+HPLandroid/media/AudioDeviceInfo;-><init>(Landroid/media/AudioDevicePort;)V
+HPLandroid/media/AudioDeviceInfo;->convertInternalDeviceToDeviceType(I)I
+HPLandroid/media/AudioDeviceInfo;->getType()I
+HPLandroid/media/AudioDevicePort;-><init>(Landroid/media/AudioHandle;Ljava/lang/String;[I[I[I[I[Landroid/media/AudioGain;ILjava/lang/String;)V
+HPLandroid/media/AudioDevicePort;->buildConfig(IIILandroid/media/AudioGainConfig;)Landroid/media/AudioDevicePortConfig;
+HPLandroid/media/AudioDevicePort;->buildConfig(IIILandroid/media/AudioGainConfig;)Landroid/media/AudioPortConfig;
+HPLandroid/media/AudioDevicePort;->type()I
+HPLandroid/media/AudioDevicePortConfig;-><init>(Landroid/media/AudioDevicePort;IIILandroid/media/AudioGainConfig;)V
+HPLandroid/media/AudioFocusInfo$1;-><init>()V
+HPLandroid/media/AudioFocusInfo;-><init>(Landroid/media/AudioAttributes;ILjava/lang/String;Ljava/lang/String;IIII)V
+HPLandroid/media/AudioFocusInfo;->clearLossReceived()V
+HPLandroid/media/AudioFocusRequest$Builder;-><init>(I)V
+HPLandroid/media/AudioFocusRequest$Builder;->build()Landroid/media/AudioFocusRequest;
+HPLandroid/media/AudioFocusRequest$Builder;->setAcceptsDelayedFocusGain(Z)Landroid/media/AudioFocusRequest$Builder;
+HPLandroid/media/AudioFocusRequest$Builder;->setAudioAttributes(Landroid/media/AudioAttributes;)Landroid/media/AudioFocusRequest$Builder;
+HPLandroid/media/AudioFocusRequest$Builder;->setFocusGain(I)Landroid/media/AudioFocusRequest$Builder;
+HPLandroid/media/AudioFocusRequest$Builder;->setLocksFocus(Z)Landroid/media/AudioFocusRequest$Builder;
+HPLandroid/media/AudioFocusRequest$Builder;->setOnAudioFocusChangeListener(Landroid/media/AudioManager$OnAudioFocusChangeListener;Landroid/os/Handler;)Landroid/media/AudioFocusRequest$Builder;
+HPLandroid/media/AudioFocusRequest$Builder;->setOnAudioFocusChangeListenerInt(Landroid/media/AudioManager$OnAudioFocusChangeListener;Landroid/os/Handler;)Landroid/media/AudioFocusRequest$Builder;
+HPLandroid/media/AudioFocusRequest$Builder;->setWillPauseWhenDucked(Z)Landroid/media/AudioFocusRequest$Builder;
+HPLandroid/media/AudioFocusRequest;->-get0()Landroid/media/AudioAttributes;
+HPLandroid/media/AudioFocusRequest;-><init>(Landroid/media/AudioManager$OnAudioFocusChangeListener;Landroid/os/Handler;Landroid/media/AudioAttributes;II)V
+HPLandroid/media/AudioFocusRequest;-><init>(Landroid/media/AudioManager$OnAudioFocusChangeListener;Landroid/os/Handler;Landroid/media/AudioAttributes;IILandroid/media/AudioFocusRequest;)V
+HPLandroid/media/AudioFocusRequest;->getAudioAttributes()Landroid/media/AudioAttributes;
+HPLandroid/media/AudioFocusRequest;->getFlags()I
+HPLandroid/media/AudioFocusRequest;->getFocusGain()I
+HPLandroid/media/AudioFocusRequest;->getOnAudioFocusChangeListener()Landroid/media/AudioManager$OnAudioFocusChangeListener;
+HPLandroid/media/AudioFocusRequest;->getOnAudioFocusChangeListenerHandler()Landroid/os/Handler;
+HPLandroid/media/AudioFocusRequest;->isValidFocusGain(I)Z
+HPLandroid/media/AudioFocusRequest;->locksFocus()Z
+HPLandroid/media/AudioFormat$Builder;->build()Landroid/media/AudioFormat;
+HPLandroid/media/AudioFormat;->-set0(Landroid/media/AudioFormat;I)I
+HPLandroid/media/AudioFormat;->-set1(Landroid/media/AudioFormat;I)I
+HPLandroid/media/AudioFormat;->-set2(Landroid/media/AudioFormat;I)I
+HPLandroid/media/AudioFormat;->-set3(Landroid/media/AudioFormat;I)I
+HPLandroid/media/AudioFormat;->-set4(Landroid/media/AudioFormat;I)I
+HPLandroid/media/AudioFormat;-><init>(I)V
+HPLandroid/media/AudioFormat;-><init>(ILandroid/media/AudioFormat;)V
+HPLandroid/media/AudioFormat;->channelCountFromOutChannelMask(I)I
+HPLandroid/media/AudioFormat;->getBytesPerSample(I)I
+HPLandroid/media/AudioFormat;->getChannelCount()I
+HPLandroid/media/AudioFormat;->getChannelIndexMask()I
+HPLandroid/media/AudioFormat;->getChannelMask()I
+HPLandroid/media/AudioFormat;->getEncoding()I
+HPLandroid/media/AudioFormat;->getPropertySetMask()I
+HPLandroid/media/AudioFormat;->getSampleRate()I
+HPLandroid/media/AudioFormat;->isEncodingLinearFrames(I)Z
+HPLandroid/media/AudioFormat;->isEncodingLinearPcm(I)Z
+HPLandroid/media/AudioFormat;->isPublicEncoding(I)Z
+HPLandroid/media/AudioFormat;->isValidEncoding(I)Z
+HPLandroid/media/AudioHandle;-><init>(I)V
+HPLandroid/media/AudioHandle;->equals(Ljava/lang/Object;)Z
+HPLandroid/media/AudioHandle;->id()I
+HPLandroid/media/AudioManager$FocusRequestInfo;-><init>(Landroid/media/AudioFocusRequest;Landroid/os/Handler;)V
+HPLandroid/media/AudioManager$NativeEventHandlerDelegate$1;-><init>(Landroid/media/AudioManager$NativeEventHandlerDelegate;Landroid/os/Looper;Landroid/media/AudioDeviceCallback;)V
+HPLandroid/media/AudioManager$NativeEventHandlerDelegate$1;->handleMessage(Landroid/os/Message;)V
+HPLandroid/media/AudioManager$NativeEventHandlerDelegate;-><init>(Landroid/media/AudioManager;Landroid/media/AudioDeviceCallback;Landroid/os/Handler;)V
+HPLandroid/media/AudioManager$NativeEventHandlerDelegate;->getHandler()Landroid/os/Handler;
+HPLandroid/media/AudioManager$OnAmPortUpdateListener;-><init>(Landroid/media/AudioManager;)V
+HPLandroid/media/AudioManager$OnAmPortUpdateListener;-><init>(Landroid/media/AudioManager;Landroid/media/AudioManager$OnAmPortUpdateListener;)V
+HPLandroid/media/AudioManager$OnAmPortUpdateListener;->onAudioPatchListUpdate([Landroid/media/AudioPatch;)V
+HPLandroid/media/AudioManager$OnAmPortUpdateListener;->onAudioPortListUpdate([Landroid/media/AudioPort;)V
+HPLandroid/media/AudioManager$OnAudioPortUpdateListener;->onAudioPatchListUpdate([Landroid/media/AudioPatch;)V
+HPLandroid/media/AudioManager$OnAudioPortUpdateListener;->onAudioPortListUpdate([Landroid/media/AudioPort;)V
+HPLandroid/media/AudioManager$OnAudioPortUpdateListener;->onServiceDied()V
+HPLandroid/media/AudioManager$ServiceEventHandlerDelegate;->getHandler()Landroid/os/Handler;
+HPLandroid/media/AudioManager;->-wrap1(Landroid/media/AudioManager;Landroid/os/Handler;)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;->abandonAudioFocusForCall()V
+HPLandroid/media/AudioManager;->broadcastDeviceListChange(Landroid/os/Handler;)V
+HPLandroid/media/AudioManager;->calcListDeltas(Ljava/util/ArrayList;Ljava/util/ArrayList;I)[Landroid/media/AudioDeviceInfo;
+HPLandroid/media/AudioManager;->checkFlags(Landroid/media/AudioDevicePort;I)Z
+HPLandroid/media/AudioManager;->checkTypes(Landroid/media/AudioDevicePort;)Z
+HPLandroid/media/AudioManager;->filterDevicePorts(Ljava/util/ArrayList;Ljava/util/ArrayList;)V
+HPLandroid/media/AudioManager;->forceVolumeControlStream(I)V
+HPLandroid/media/AudioManager;->getDevices(I)[Landroid/media/AudioDeviceInfo;
+HPLandroid/media/AudioManager;->getDevicesStatic(I)[Landroid/media/AudioDeviceInfo;
+HPLandroid/media/AudioManager;->getIdForAudioFocusListener(Landroid/media/AudioManager$OnAudioFocusChangeListener;)Ljava/lang/String;
+HPLandroid/media/AudioManager;->getUiSoundsStreamType()I
+HPLandroid/media/AudioManager;->infoListFromPortList(Ljava/util/ArrayList;I)[Landroid/media/AudioDeviceInfo;
+HPLandroid/media/AudioManager;->isInputDevice(I)Z
+HPLandroid/media/AudioManager;->isMicrophoneMute()Z
+HPLandroid/media/AudioManager;->isSpeakerphoneOn()Z
+HPLandroid/media/AudioManager;->isStreamAffectedByRingerMode(I)Z
+HPLandroid/media/AudioManager;->listAudioDevicePorts(Ljava/util/ArrayList;)I
+HPLandroid/media/AudioManager;->notifyVolumeControllerVisible(Landroid/media/IVolumeController;Z)V
+HPLandroid/media/AudioManager;->playSoundEffect(II)V
+HPLandroid/media/AudioManager;->preDispatchKeyEvent(Landroid/view/KeyEvent;I)V
+HPLandroid/media/AudioManager;->registerAudioDeviceCallback(Landroid/media/AudioDeviceCallback;Landroid/os/Handler;)V
+HPLandroid/media/AudioManager;->registerAudioFocusRequest(Landroid/media/AudioFocusRequest;)V
+HPLandroid/media/AudioManager;->registerAudioPortUpdateListener(Landroid/media/AudioManager$OnAudioPortUpdateListener;)V
+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
+HPLandroid/media/AudioManager;->requestAudioFocusForCall(II)V
+HPLandroid/media/AudioManager;->resetAudioPortGeneration()I
+HPLandroid/media/AudioManager;->setMode(I)V
+HPLandroid/media/AudioManager;->unregisterAudioFocusRequest(Landroid/media/AudioManager$OnAudioFocusChangeListener;)V
+HPLandroid/media/AudioManager;->updateAudioPortCache(Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)I
+HPLandroid/media/AudioManager;->updatePortConfig(Landroid/media/AudioPortConfig;Ljava/util/ArrayList;)Landroid/media/AudioPortConfig;
+HPLandroid/media/AudioManagerInternal$RingerModeDelegate;->canVolumeDownEnterSilent()Z
+HPLandroid/media/AudioManagerInternal$RingerModeDelegate;->getRingerModeAffectedStreams(I)I
+HPLandroid/media/AudioManagerInternal$RingerModeDelegate;->onSetRingerModeExternal(IILjava/lang/String;ILandroid/media/VolumePolicy;)I
+HPLandroid/media/AudioManagerInternal$RingerModeDelegate;->onSetRingerModeInternal(IILjava/lang/String;ILandroid/media/VolumePolicy;)I
+HPLandroid/media/AudioManagerInternal;-><init>()V
+HPLandroid/media/AudioManagerInternal;->adjustStreamVolumeForUid(IIILjava/lang/String;I)V
+HPLandroid/media/AudioManagerInternal;->adjustSuggestedStreamVolumeForUid(IIILjava/lang/String;I)V
+HPLandroid/media/AudioManagerInternal;->getRingerModeInternal()I
+HPLandroid/media/AudioManagerInternal;->setAccessibilityServiceUids(Landroid/util/IntArray;)V
+HPLandroid/media/AudioManagerInternal;->setRingerModeDelegate(Landroid/media/AudioManagerInternal$RingerModeDelegate;)V
+HPLandroid/media/AudioManagerInternal;->setRingerModeInternal(ILjava/lang/String;)V
+HPLandroid/media/AudioManagerInternal;->setStreamVolumeForUid(IIILjava/lang/String;I)V
+HPLandroid/media/AudioManagerInternal;->updateRingerModeAffectedStreamsInternal()V
+HPLandroid/media/AudioMixPort;-><init>(Landroid/media/AudioHandle;IILjava/lang/String;[I[I[I[I[Landroid/media/AudioGain;)V
+HPLandroid/media/AudioMixPort;->buildConfig(IIILandroid/media/AudioGainConfig;)Landroid/media/AudioMixPortConfig;
+HPLandroid/media/AudioMixPort;->buildConfig(IIILandroid/media/AudioGainConfig;)Landroid/media/AudioPortConfig;
+HPLandroid/media/AudioMixPortConfig;-><init>(Landroid/media/AudioMixPort;IIILandroid/media/AudioGainConfig;)V
+HPLandroid/media/AudioPatch;-><init>(Landroid/media/AudioHandle;[Landroid/media/AudioPortConfig;[Landroid/media/AudioPortConfig;)V
+HPLandroid/media/AudioPatch;->sinks()[Landroid/media/AudioPortConfig;
+HPLandroid/media/AudioPatch;->sources()[Landroid/media/AudioPortConfig;
+HPLandroid/media/AudioPlaybackConfiguration$1;-><init>()V
+HPLandroid/media/AudioPlaybackConfiguration$IPlayerShell;-><init>(Landroid/media/AudioPlaybackConfiguration;Landroid/media/IPlayer;)V
+HPLandroid/media/AudioPlaybackConfiguration$IPlayerShell;->binderDied()V
+HPLandroid/media/AudioPlaybackConfiguration$IPlayerShell;->getIPlayer()Landroid/media/IPlayer;
+HPLandroid/media/AudioPlaybackConfiguration$IPlayerShell;->monitorDeath()V
+HPLandroid/media/AudioPlaybackConfiguration$PlayerDeathMonitor;->playerDeath(I)V
+HPLandroid/media/AudioPlaybackConfiguration;->-wrap0(Landroid/media/AudioPlaybackConfiguration;)V
+HPLandroid/media/AudioPlaybackConfiguration;-><init>(Landroid/media/PlayerBase$PlayerIdCard;III)V
+HPLandroid/media/AudioPlaybackConfiguration;->getAudioAttributes()Landroid/media/AudioAttributes;
+HPLandroid/media/AudioPlaybackConfiguration;->getClientPid()I
+HPLandroid/media/AudioPlaybackConfiguration;->getClientUid()I
+HPLandroid/media/AudioPlaybackConfiguration;->getIPlayer()Landroid/media/IPlayer;
+HPLandroid/media/AudioPlaybackConfiguration;->getPlayerInterfaceId()I
+HPLandroid/media/AudioPlaybackConfiguration;->getPlayerProxy()Landroid/media/PlayerProxy;
+HPLandroid/media/AudioPlaybackConfiguration;->getPlayerState()I
+HPLandroid/media/AudioPlaybackConfiguration;->getPlayerType()I
+HPLandroid/media/AudioPlaybackConfiguration;->handleAudioAttributesEvent(Landroid/media/AudioAttributes;)Z
+HPLandroid/media/AudioPlaybackConfiguration;->handleStateEvent(I)Z
+HPLandroid/media/AudioPlaybackConfiguration;->init()V
+HPLandroid/media/AudioPlaybackConfiguration;->isActive()Z
+HPLandroid/media/AudioPlaybackConfiguration;->playerDied()V
+HPLandroid/media/AudioPort;-><init>(Landroid/media/AudioHandle;ILjava/lang/String;[I[I[I[I[Landroid/media/AudioGain;)V
+HPLandroid/media/AudioPort;->handle()Landroid/media/AudioHandle;
+HPLandroid/media/AudioPort;->id()I
+HPLandroid/media/AudioPort;->role()I
+HPLandroid/media/AudioPortConfig;-><init>(Landroid/media/AudioPort;IIILandroid/media/AudioGainConfig;)V
+HPLandroid/media/AudioPortConfig;->channelMask()I
+HPLandroid/media/AudioPortConfig;->format()I
+HPLandroid/media/AudioPortConfig;->gain()Landroid/media/AudioGainConfig;
+HPLandroid/media/AudioPortConfig;->port()Landroid/media/AudioPort;
+HPLandroid/media/AudioPortConfig;->samplingRate()I
+HPLandroid/media/AudioPortEventHandler$1;-><init>(Landroid/media/AudioPortEventHandler;Landroid/os/Looper;)V
+HPLandroid/media/AudioPortEventHandler$1;->handleMessage(Landroid/os/Message;)V
+HPLandroid/media/AudioPortEventHandler;->-get0(Landroid/media/AudioPortEventHandler;)Ljava/util/ArrayList;
+HPLandroid/media/AudioPortEventHandler;->handler()Landroid/os/Handler;
+HPLandroid/media/AudioPortEventHandler;->init()V
+HPLandroid/media/AudioPortEventHandler;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V
+HPLandroid/media/AudioPortEventHandler;->registerListener(Landroid/media/AudioManager$OnAudioPortUpdateListener;)V
+HPLandroid/media/AudioRecord;-><init>(IIIII)V
+HPLandroid/media/AudioRecord;-><init>(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;II)V
+HPLandroid/media/AudioRecord;->audioBuffSizeCheck(I)V
+HPLandroid/media/AudioRecord;->audioParamCheck(III)V
+HPLandroid/media/AudioRecord;->finalize()V
+HPLandroid/media/AudioRecord;->getChannelMaskFromLegacyConfig(IZ)I
+HPLandroid/media/AudioRecord;->getMinBufferSize(III)I
+HPLandroid/media/AudioRecord;->getRecordingState()I
+HPLandroid/media/AudioRecord;->getState()I
+HPLandroid/media/AudioRecord;->handleFullVolumeRec(Z)V
+HPLandroid/media/AudioRecord;->read([BII)I
+HPLandroid/media/AudioRecord;->read([BIII)I
+HPLandroid/media/AudioRecord;->release()V
+HPLandroid/media/AudioRecord;->startRecording()V
+HPLandroid/media/AudioRecord;->stop()V
+HPLandroid/media/AudioRoutesInfo;-><init>(Landroid/media/AudioRoutesInfo;)V
+HPLandroid/media/AudioRoutesInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/media/AudioSystem$AudioRecordingCallback;->onRecordingConfigurationChanged(IIII[ILjava/lang/String;)V
+HPLandroid/media/AudioSystem$DynamicPolicyCallback;->onDynamicPolicyMixStateUpdate(Ljava/lang/String;I)V
+HPLandroid/media/AudioSystem;->getNumStreamTypes()I
+HPLandroid/media/AudioSystem;->getOutputDeviceName(I)Ljava/lang/String;
+HPLandroid/media/AudioSystem;->getValueForVibrateSetting(III)I
+HPLandroid/media/AudioSystem;->recordingCallbackFromNative(IIII[I)V
+HPLandroid/media/AudioSystem;->setRecordingCallback(Landroid/media/AudioSystem$AudioRecordingCallback;)V
+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;->audioBuffSizeCheck(I)V
+HPLandroid/media/AudioTrack;->audioParamCheck(IIIII)V
+HPLandroid/media/AudioTrack;->clampGainOrLevel(F)F
+HPLandroid/media/AudioTrack;->finalize()V
+HPLandroid/media/AudioTrack;->flush()V
+HPLandroid/media/AudioTrack;->getAudioSessionId()I
+HPLandroid/media/AudioTrack;->getLatency()I
+HPLandroid/media/AudioTrack;->getMinBufferSize(III)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;->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
+HPLandroid/media/IAudioFocusDispatcher$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/media/IAudioFocusDispatcher$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/IAudioFocusDispatcher$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioFocusDispatcher;
+HPLandroid/media/IAudioRoutesObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/media/IAudioRoutesObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/IAudioRoutesObserver$Stub$Proxy;->dispatchAudioRoutesChanged(Landroid/media/AudioRoutesInfo;)V
+HPLandroid/media/IAudioRoutesObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioRoutesObserver;
+HPLandroid/media/IAudioRoutesObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/IAudioService$Stub$Proxy;->abandonAudioFocus(Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Landroid/media/AudioAttributes;Ljava/lang/String;)I
+HPLandroid/media/IAudioService$Stub$Proxy;->forceVolumeControlStream(ILandroid/os/IBinder;)V
+HPLandroid/media/IAudioService$Stub$Proxy;->getUiSoundsStreamType()I
+HPLandroid/media/IAudioService$Stub$Proxy;->isStreamAffectedByRingerMode(I)Z
+HPLandroid/media/IAudioService$Stub$Proxy;->notifyVolumeControllerVisible(Landroid/media/IVolumeController;Z)V
+HPLandroid/media/IAudioService$Stub$Proxy;->playerEvent(II)V
+HPLandroid/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;-><init>()V
+HPLandroid/media/IAudioService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/IMediaResourceMonitor$Stub;-><init>()V
+HPLandroid/media/IMediaResourceMonitor$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/IMediaResourceMonitor;->notifyResourceGranted(II)V
+HPLandroid/media/IMediaRouterClient$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/media/IMediaRouterClient$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/IMediaRouterClient$Stub$Proxy;->onRestoreRoute()V
+HPLandroid/media/IMediaRouterClient$Stub$Proxy;->onStateChanged()V
+HPLandroid/media/IMediaRouterClient$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IMediaRouterClient;
+HPLandroid/media/IMediaRouterClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/IMediaRouterService$Stub;-><init>()V
+HPLandroid/media/IMediaRouterService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/IPlaybackConfigDispatcher$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/IPlayer$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/media/IPlayer$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/IPlayer$Stub$Proxy;->pause()V
+HPLandroid/media/IPlayer$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IPlayer;
+HPLandroid/media/IPlayer$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/IRemoteVolumeController$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/media/IRemoteVolumeController$Stub$Proxy;->updateRemoteController(Landroid/media/session/ISessionController;)V
+HPLandroid/media/IRemoteVolumeController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IRemoteVolumeController;
+HPLandroid/media/IRemoteVolumeController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/IRingtonePlayer$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/IRingtonePlayer$Stub$Proxy;->stopAsync()V
+HPLandroid/media/IRingtonePlayer$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/IVolumeController$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/media/IVolumeController$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/IVolumeController$Stub$Proxy;->setLayoutDirection(I)V
+HPLandroid/media/IVolumeController$Stub$Proxy;->volumeChanged(II)V
+HPLandroid/media/IVolumeController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IVolumeController;
+HPLandroid/media/IVolumeController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/Image$Plane;-><init>()V
+HPLandroid/media/ImageReader$SurfaceImage$SurfacePlane;->-wrap0(Landroid/media/ImageReader$SurfaceImage$SurfacePlane;)V
+HPLandroid/media/ImageReader$SurfaceImage$SurfacePlane;-><init>(Landroid/media/ImageReader$SurfaceImage;IILjava/nio/ByteBuffer;)V
+HPLandroid/media/ImageReader$SurfaceImage$SurfacePlane;->clearBuffer()V
+HPLandroid/media/ImageReader$SurfaceImage$SurfacePlane;->getBuffer()Ljava/nio/ByteBuffer;
+HPLandroid/media/ImageReader$SurfaceImage$SurfacePlane;->getPixelStride()I
+HPLandroid/media/ImageReader$SurfaceImage$SurfacePlane;->getRowStride()I
+HPLandroid/media/ImageReader$SurfaceImage;->getPlanes()[Landroid/media/Image$Plane;
+HPLandroid/media/ImageReader;->-get1(Landroid/media/ImageReader;)I
+HPLandroid/media/ImageReader;->-get5(Landroid/media/ImageReader;)I
+HPLandroid/media/ImageReader;->acquireLatestImage()Landroid/media/Image;
+HPLandroid/media/ImageReader;->acquireNextImageNoThrowISE()Landroid/media/Image;
+HPLandroid/media/ImageReader;->discardFreeBuffers()V
+HPLandroid/media/ImageReader;->finalize()V
+HPLandroid/media/ImageWriter;->finalize()V
+HPLandroid/media/MediaCodec$BufferInfo;-><init>()V
+HPLandroid/media/MediaCodec$BufferInfo;->dup()Landroid/media/MediaCodec$BufferInfo;
+HPLandroid/media/MediaCodec$BufferInfo;->set(IIJI)V
+HPLandroid/media/MediaCodec$BufferMap;-><init>()V
+HPLandroid/media/MediaCodec$BufferMap;-><init>(Landroid/media/MediaCodec$BufferMap;)V
+HPLandroid/media/MediaCodec$BufferMap;->clear()V
+HPLandroid/media/MediaCodec$BufferMap;->remove(I)V
+HPLandroid/media/MediaCodec$CryptoInfo$Pattern;-><init>(II)V
+HPLandroid/media/MediaCodec$CryptoInfo$Pattern;->set(II)V
+HPLandroid/media/MediaCodec$CryptoInfo;-><init>()V
+HPLandroid/media/MediaCodec$CryptoInfo;->set(I[I[I[B[BI)V
+HPLandroid/media/MediaCodec$EventHandler;-><init>(Landroid/media/MediaCodec;Landroid/media/MediaCodec;Landroid/os/Looper;)V
+HPLandroid/media/MediaCodec;-><init>(Ljava/lang/String;ZZ)V
+HPLandroid/media/MediaCodec;->cacheBuffers(Z)V
+HPLandroid/media/MediaCodec;->configure(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;I)V
+HPLandroid/media/MediaCodec;->configure(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;Landroid/os/IHwBinder;I)V
+HPLandroid/media/MediaCodec;->createByCodecName(Ljava/lang/String;)Landroid/media/MediaCodec;
+HPLandroid/media/MediaCodec;->dequeueInputBuffer(J)I
+HPLandroid/media/MediaCodec;->dequeueOutputBuffer(Landroid/media/MediaCodec$BufferInfo;J)I
+HPLandroid/media/MediaCodec;->finalize()V
+HPLandroid/media/MediaCodec;->freeAllTrackedBuffers()V
+HPLandroid/media/MediaCodec;->freeByteBuffer(Ljava/nio/ByteBuffer;)V
+HPLandroid/media/MediaCodec;->freeByteBuffers([Ljava/nio/ByteBuffer;)V
+HPLandroid/media/MediaCodec;->getInputBuffers()[Ljava/nio/ByteBuffer;
+HPLandroid/media/MediaCodec;->getOutputBuffers()[Ljava/nio/ByteBuffer;
+HPLandroid/media/MediaCodec;->getOutputFormat()Landroid/media/MediaFormat;
+HPLandroid/media/MediaCodec;->invalidateByteBuffer([Ljava/nio/ByteBuffer;I)V
+HPLandroid/media/MediaCodec;->invalidateByteBuffers([Ljava/nio/ByteBuffer;)V
+HPLandroid/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
+HPLandroid/media/MediaCodec;->setOutputSurface(Landroid/view/Surface;)V
+HPLandroid/media/MediaCodec;->start()V
+HPLandroid/media/MediaCodec;->stop()V
+HPLandroid/media/MediaCodec;->validateInputByteBuffer([Ljava/nio/ByteBuffer;I)V
+HPLandroid/media/MediaCodec;->validateOutputByteBuffer([Ljava/nio/ByteBuffer;ILandroid/media/MediaCodec$BufferInfo;)V
+HPLandroid/media/MediaCodecInfo$AudioCapabilities;->getMaxInputChannelCount()I
+HPLandroid/media/MediaCodecInfo$AudioCapabilities;->isSampleRateSupported(I)Z
+HPLandroid/media/MediaCodecInfo$CodecCapabilities;->getAudioCapabilities()Landroid/media/MediaCodecInfo$AudioCapabilities;
+HPLandroid/media/MediaCodecInfo$CodecCapabilities;->getVideoCapabilities()Landroid/media/MediaCodecInfo$VideoCapabilities;
+HPLandroid/media/MediaCodecInfo$VideoCapabilities;->isSizeSupported(II)Z
+HPLandroid/media/MediaCodecInfo$VideoCapabilities;->supports(Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Number;)Z
+HPLandroid/media/MediaCrypto;-><init>(Ljava/util/UUID;[B)V
+HPLandroid/media/MediaCrypto;->finalize()V
+HPLandroid/media/MediaCrypto;->getByteArrayFromUUID(Ljava/util/UUID;)[B
+HPLandroid/media/MediaDescription$1;-><init>()V
+HPLandroid/media/MediaDescription$Builder;-><init>()V
+HPLandroid/media/MediaDescription$Builder;->build()Landroid/media/MediaDescription;
+HPLandroid/media/MediaDescription$Builder;->setDescription(Ljava/lang/CharSequence;)Landroid/media/MediaDescription$Builder;
+HPLandroid/media/MediaDescription$Builder;->setIconBitmap(Landroid/graphics/Bitmap;)Landroid/media/MediaDescription$Builder;
+HPLandroid/media/MediaDescription$Builder;->setIconUri(Landroid/net/Uri;)Landroid/media/MediaDescription$Builder;
+HPLandroid/media/MediaDescription$Builder;->setMediaId(Ljava/lang/String;)Landroid/media/MediaDescription$Builder;
+HPLandroid/media/MediaDescription$Builder;->setMediaUri(Landroid/net/Uri;)Landroid/media/MediaDescription$Builder;
+HPLandroid/media/MediaDescription$Builder;->setSubtitle(Ljava/lang/CharSequence;)Landroid/media/MediaDescription$Builder;
+HPLandroid/media/MediaDescription$Builder;->setTitle(Ljava/lang/CharSequence;)Landroid/media/MediaDescription$Builder;
+HPLandroid/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
+HPLandroid/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;)V
+HPLandroid/media/MediaDescription;->getDescription()Ljava/lang/CharSequence;
+HPLandroid/media/MediaDescription;->toString()Ljava/lang/String;
+HPLandroid/media/MediaDrm$EventHandler;->handleMessage(Landroid/os/Message;)V
+HPLandroid/media/MediaDrm$KeyRequest;->getData()[B
+HPLandroid/media/MediaDrm$KeyRequest;->getDefaultUrl()Ljava/lang/String;
+HPLandroid/media/MediaDrm$OnEventListener;->onEvent(Landroid/media/MediaDrm;[BII[B)V
+HPLandroid/media/MediaDrm;->-get0(Landroid/media/MediaDrm;)J
+HPLandroid/media/MediaDrm;->-get2(Landroid/media/MediaDrm;)Landroid/media/MediaDrm$OnExpirationUpdateListener;
+HPLandroid/media/MediaDrm;->-get3(Landroid/media/MediaDrm;)Landroid/media/MediaDrm$OnKeyStatusChangeListener;
+HPLandroid/media/MediaDrm;->finalize()V
+HPLandroid/media/MediaDrm;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V
+HPLandroid/media/MediaDrm;->setOnEventListener(Landroid/media/MediaDrm$OnEventListener;)V
+HPLandroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I
+HPLandroid/media/MediaFormat;->setByteBuffer(Ljava/lang/String;Ljava/nio/ByteBuffer;)V
+HPLandroid/media/MediaFormat;->setLong(Ljava/lang/String;J)V
+HPLandroid/media/MediaMetadata$1;-><init>()V
+HPLandroid/media/MediaMetadata$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/MediaMetadata;
+HPLandroid/media/MediaMetadata$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/media/MediaMetadata$Builder;-><init>(Landroid/media/MediaMetadata;)V
+HPLandroid/media/MediaMetadata$Builder;-><init>(Landroid/media/MediaMetadata;I)V
+HPLandroid/media/MediaMetadata$Builder;->build()Landroid/media/MediaMetadata;
+HPLandroid/media/MediaMetadata;->-get1(Landroid/media/MediaMetadata;)Landroid/os/Bundle;
+HPLandroid/media/MediaMetadata;-><init>(Landroid/os/Bundle;)V
+HPLandroid/media/MediaMetadata;-><init>(Landroid/os/Bundle;Landroid/media/MediaMetadata;)V
+HPLandroid/media/MediaMetadata;-><init>(Landroid/os/Parcel;)V
+HPLandroid/media/MediaMetadata;-><init>(Landroid/os/Parcel;Landroid/media/MediaMetadata;)V
+HPLandroid/media/MediaMetadata;->containsKey(Ljava/lang/String;)Z
+HPLandroid/media/MediaMetadata;->getBitmap(Ljava/lang/String;)Landroid/graphics/Bitmap;
+HPLandroid/media/MediaMetadata;->getDescription()Landroid/media/MediaDescription;
+HPLandroid/media/MediaMetadata;->getLong(Ljava/lang/String;)J
+HPLandroid/media/MediaMetadata;->getString(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/media/MediaMetadata;->getText(Ljava/lang/String;)Ljava/lang/CharSequence;
+HPLandroid/media/MediaMetadata;->size()I
+HPLandroid/media/MediaMetadata;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/media/MediaPlayer$2;->onCompletion(Landroid/media/MediaPlayer;)V
+HPLandroid/media/MediaPlayer$TimeProvider;->close()V
+HPLandroid/media/MediaPlayer$TimeProvider;->finalize()V
+HPLandroid/media/MediaPlayer;->-get11(Landroid/media/MediaPlayer;)Landroid/media/MediaPlayer$OnErrorListener;
+HPLandroid/media/MediaPlayer;->-get7(Landroid/media/MediaPlayer;)Landroid/media/MediaPlayer$OnCompletionListener;
+HPLandroid/media/MediaPlayer;->-get8(Landroid/media/MediaPlayer;)Landroid/media/MediaPlayer$OnCompletionListener;
+HPLandroid/media/MediaPlayer;->-wrap4(Landroid/media/MediaPlayer;Z)V
+HPLandroid/media/MediaPlayer;->cleanDrmObj()V
+HPLandroid/media/MediaPlayer;->finalize()V
+HPLandroid/media/MediaPlayer;->pause()V
+HPLandroid/media/MediaPlayer;->playerPause()V
+HPLandroid/media/MediaPlayer;->release()V
+HPLandroid/media/MediaPlayer;->reset()V
+HPLandroid/media/MediaPlayer;->resetDrmState()V
+HPLandroid/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
+HPLandroid/media/MediaPlayer;->stayAwake(Z)V
+HPLandroid/media/MediaPlayer;->updateSurfaceScreenOn()V
+HPLandroid/media/MediaRecorder;->getAudioSourceMax()I
+HPLandroid/media/MediaRecorder;->isSystemOnlyAudioSource(I)Z
+HPLandroid/media/MediaRouter$Static$1$1;-><init>(Landroid/media/MediaRouter$Static$1;Landroid/media/AudioRoutesInfo;)V
+HPLandroid/media/MediaRouter$Static$1$1;->run()V
+HPLandroid/media/MediaRouter$Static$1;->dispatchAudioRoutesChanged(Landroid/media/AudioRoutesInfo;)V
+HPLandroid/media/MediaRouter$Static$Client$1;-><init>(Landroid/media/MediaRouter$Static$Client;)V
+HPLandroid/media/MediaRouter$Static$Client$1;->run()V
+HPLandroid/media/MediaRouter$Static$Client;->onRestoreRoute()V
+HPLandroid/media/MediaRouter$Static$Client;->onStateChanged()V
+HPLandroid/media/MediaRouter$Static;->onDisplayChanged(I)V
+HPLandroid/media/MediaRouter$Static;->updatePresentationDisplays(I)V
+HPLandroid/media/MediaRouterClientState$1;-><init>()V
+HPLandroid/media/MediaRouterClientState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/MediaRouterClientState;
+HPLandroid/media/MediaRouterClientState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/media/MediaRouterClientState$RouteInfo$1;-><init>()V
+HPLandroid/media/MediaRouterClientState;-><init>()V
+HPLandroid/media/MediaRouterClientState;-><init>(Landroid/os/Parcel;)V
+HPLandroid/media/MediaRouterClientState;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/media/PlayerBase$IPlayerWrapper;->pause()V
+HPLandroid/media/PlayerBase$PlayerIdCard$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/PlayerBase$PlayerIdCard;
+HPLandroid/media/PlayerBase$PlayerIdCard$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/media/PlayerBase$PlayerIdCard;-><init>(Landroid/os/Parcel;)V
+HPLandroid/media/PlayerBase$PlayerIdCard;-><init>(Landroid/os/Parcel;Landroid/media/PlayerBase$PlayerIdCard;)V
+HPLandroid/media/PlayerBase;->basePause()V
+HPLandroid/media/PlayerBase;->baseRelease()V
+HPLandroid/media/PlayerBase;->baseStart()V
+HPLandroid/media/PlayerBase;->baseStop()V
+HPLandroid/media/PlayerBase;->getStartDelayMs()I
+HPLandroid/media/PlayerProxy;-><init>(Landroid/media/AudioPlaybackConfiguration;)V
+HPLandroid/media/PlayerProxy;->pause()V
+HPLandroid/media/Ringtone;->finalize()V
+HPLandroid/media/Ringtone;->setAudioAttributes(Landroid/media/AudioAttributes;)V
+HPLandroid/media/Ringtone;->setStreamType(I)V
+HPLandroid/media/Ringtone;->stop()V
+HPLandroid/media/SoundPool;->finalize()V
+HPLandroid/media/SoundPool;->play(IFFIIF)I
+HPLandroid/media/SoundPool;->playerPause()V
+HPLandroid/media/SoundPool;->release()V
+HPLandroid/media/SubtitleController;->-wrap0(Landroid/media/SubtitleController;)V
+HPLandroid/media/SubtitleController;->-wrap2(Landroid/media/SubtitleController;Landroid/media/SubtitleTrack;)V
+HPLandroid/media/SubtitleController;->doHide()V
+HPLandroid/media/SubtitleController;->doSelectTrack(Landroid/media/SubtitleTrack;)V
+HPLandroid/media/SubtitleController;->finalize()V
+HPLandroid/media/SubtitleController;->hide()V
+HPLandroid/media/SubtitleController;->reset()V
+HPLandroid/media/SubtitleController;->selectTrack(Landroid/media/SubtitleTrack;)Z
+HPLandroid/media/ToneGenerator;->finalize()V
+HPLandroid/media/VolumePolicy$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/VolumePolicy;
+HPLandroid/media/VolumePolicy$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/media/VolumePolicy;->equals(Ljava/lang/Object;)Z
+HPLandroid/media/VolumeShaper$Configuration$Builder;-><init>()V
+HPLandroid/media/VolumeShaper$Configuration$Builder;->build()Landroid/media/VolumeShaper$Configuration;
+HPLandroid/media/VolumeShaper$Configuration$Builder;->setCurve([F[F)Landroid/media/VolumeShaper$Configuration$Builder;
+HPLandroid/media/VolumeShaper$Configuration$Builder;->setDuration(J)Landroid/media/VolumeShaper$Configuration$Builder;
+HPLandroid/media/VolumeShaper$Configuration$Builder;->setId(I)Landroid/media/VolumeShaper$Configuration$Builder;
+HPLandroid/media/VolumeShaper$Configuration$Builder;->setOptionFlags(I)Landroid/media/VolumeShaper$Configuration$Builder;
+HPLandroid/media/VolumeShaper$Configuration;->-wrap0([F[FZZ)V
+HPLandroid/media/VolumeShaper$Configuration;-><init>(I)V
+HPLandroid/media/VolumeShaper$Configuration;-><init>(IIIDI[F[F)V
+HPLandroid/media/VolumeShaper$Configuration;-><init>(IIIDI[F[FLandroid/media/VolumeShaper$Configuration;)V
+HPLandroid/media/VolumeShaper$Configuration;->checkCurveForErrors([F[FZ)Ljava/lang/String;
+HPLandroid/media/VolumeShaper$Configuration;->checkCurveForErrorsAndThrowException([F[FZZ)V
+HPLandroid/media/VolumeShaper$Operation$Builder;-><init>(Landroid/media/VolumeShaper$Operation;)V
+HPLandroid/media/VolumeShaper$Operation$Builder;->build()Landroid/media/VolumeShaper$Operation;
+HPLandroid/media/VolumeShaper$Operation$Builder;->createIfNeeded()Landroid/media/VolumeShaper$Operation$Builder;
+HPLandroid/media/VolumeShaper$Operation$Builder;->setXOffset(F)Landroid/media/VolumeShaper$Operation$Builder;
+HPLandroid/media/VolumeShaper$Operation;->-get0(Landroid/media/VolumeShaper$Operation;)I
+HPLandroid/media/VolumeShaper$Operation;->-get1(Landroid/media/VolumeShaper$Operation;)I
+HPLandroid/media/VolumeShaper$Operation;->-get2(Landroid/media/VolumeShaper$Operation;)F
+HPLandroid/media/VolumeShaper$Operation;-><init>(IIF)V
+HPLandroid/media/VolumeShaper$Operation;-><init>(IIFLandroid/media/VolumeShaper$Operation;)V
+HPLandroid/media/audiofx/AudioEffect$Descriptor;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/media/audiofx/AudioEffect;-><init>(Ljava/util/UUID;Ljava/util/UUID;II)V
+HPLandroid/media/audiofx/AudioEffect;->byteArrayToInt([B)I
+HPLandroid/media/audiofx/AudioEffect;->byteArrayToInt([BI)I
+HPLandroid/media/audiofx/AudioEffect;->checkState(Ljava/lang/String;)V
+HPLandroid/media/audiofx/AudioEffect;->checkStatus(I)V
+HPLandroid/media/audiofx/AudioEffect;->finalize()V
+HPLandroid/media/audiofx/AudioEffect;->getDescriptor()Landroid/media/audiofx/AudioEffect$Descriptor;
+HPLandroid/media/audiofx/AudioEffect;->getParameter(I[I)I
+HPLandroid/media/audiofx/AudioEffect;->getParameter([B[B)I
+HPLandroid/media/audiofx/AudioEffect;->intToByteArray(I)[B
+HPLandroid/media/audiofx/AudioEffect;->isError(I)Z
+HPLandroid/media/audiofx/AudioEffect;->queryEffects()[Landroid/media/audiofx/AudioEffect$Descriptor;
+HPLandroid/media/audiofx/Virtualizer;-><init>(II)V
+HPLandroid/media/audiopolicy/IAudioPolicyCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/audiopolicy/IAudioPolicyCallback;
+HPLandroid/media/midi/IMidiManager$Stub;-><init>()V
+HPLandroid/media/midi/IMidiManager;->closeDevice(Landroid/os/IBinder;Landroid/os/IBinder;)V
+HPLandroid/media/midi/IMidiManager;->getDeviceStatus(Landroid/media/midi/MidiDeviceInfo;)Landroid/media/midi/MidiDeviceStatus;
+HPLandroid/media/midi/IMidiManager;->getDevices()[Landroid/media/midi/MidiDeviceInfo;
+HPLandroid/media/midi/IMidiManager;->getServiceDeviceInfo(Ljava/lang/String;Ljava/lang/String;)Landroid/media/midi/MidiDeviceInfo;
+HPLandroid/media/midi/IMidiManager;->openBluetoothDevice(Landroid/os/IBinder;Landroid/bluetooth/BluetoothDevice;Landroid/media/midi/IMidiDeviceOpenCallback;)V
+HPLandroid/media/midi/IMidiManager;->openDevice(Landroid/os/IBinder;Landroid/media/midi/MidiDeviceInfo;Landroid/media/midi/IMidiDeviceOpenCallback;)V
+HPLandroid/media/midi/IMidiManager;->registerDeviceServer(Landroid/media/midi/IMidiDeviceServer;II[Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;I)Landroid/media/midi/MidiDeviceInfo;
+HPLandroid/media/midi/IMidiManager;->registerListener(Landroid/os/IBinder;Landroid/media/midi/IMidiDeviceListener;)V
+HPLandroid/media/midi/IMidiManager;->setDeviceStatus(Landroid/media/midi/IMidiDeviceServer;Landroid/media/midi/MidiDeviceStatus;)V
+HPLandroid/media/midi/IMidiManager;->unregisterDeviceServer(Landroid/media/midi/IMidiDeviceServer;)V
+HPLandroid/media/midi/IMidiManager;->unregisterListener(Landroid/os/IBinder;Landroid/media/midi/IMidiDeviceListener;)V
+HPLandroid/media/projection/IMediaProjectionManager$Stub;-><init>()V
+HPLandroid/media/projection/IMediaProjectionManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/projection/IMediaProjectionWatcherCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/media/projection/IMediaProjectionWatcherCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/projection/IMediaProjectionWatcherCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/projection/IMediaProjectionWatcherCallback;
+HPLandroid/media/session/IActiveSessionsListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/media/session/IActiveSessionsListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/session/IActiveSessionsListener$Stub$Proxy;->onActiveSessionsChanged(Ljava/util/List;)V
+HPLandroid/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
+HPLandroid/media/session/ICallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/media/session/ICallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/session/ICallback$Stub$Proxy;->onAddressedPlayerChangedToMediaSession(Landroid/media/session/MediaSession$Token;)V
+HPLandroid/media/session/ICallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ICallback;
+HPLandroid/media/session/ICallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/session/ISession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/media/session/ISession$Stub$Proxy;->destroy()V
+HPLandroid/media/session/ISession$Stub$Proxy;->getController()Landroid/media/session/ISessionController;
+HPLandroid/media/session/ISession$Stub$Proxy;->setActive(Z)V
+HPLandroid/media/session/ISession$Stub$Proxy;->setFlags(I)V
+HPLandroid/media/session/ISession$Stub$Proxy;->setLaunchPendingIntent(Landroid/app/PendingIntent;)V
+HPLandroid/media/session/ISession$Stub$Proxy;->setMediaButtonReceiver(Landroid/app/PendingIntent;)V
+HPLandroid/media/session/ISession$Stub$Proxy;->setMetadata(Landroid/media/MediaMetadata;)V
+HPLandroid/media/session/ISession$Stub$Proxy;->setPlaybackState(Landroid/media/session/PlaybackState;)V
+HPLandroid/media/session/ISession$Stub$Proxy;->setPlaybackToLocal(Landroid/media/AudioAttributes;)V
+HPLandroid/media/session/ISession$Stub;-><init>()V
+HPLandroid/media/session/ISession$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/session/ISession$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ISession;
+HPLandroid/media/session/ISession$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/session/ISession;->destroy()V
+HPLandroid/media/session/ISession;->getCallingPackage()Ljava/lang/String;
+HPLandroid/media/session/ISession;->getController()Landroid/media/session/ISessionController;
+HPLandroid/media/session/ISession;->sendEvent(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISession;->setActive(Z)V
+HPLandroid/media/session/ISession;->setCurrentVolume(I)V
+HPLandroid/media/session/ISession;->setExtras(Landroid/os/Bundle;)V
+HPLandroid/media/session/ISession;->setFlags(I)V
+HPLandroid/media/session/ISession;->setLaunchPendingIntent(Landroid/app/PendingIntent;)V
+HPLandroid/media/session/ISession;->setMediaButtonReceiver(Landroid/app/PendingIntent;)V
+HPLandroid/media/session/ISession;->setMetadata(Landroid/media/MediaMetadata;)V
+HPLandroid/media/session/ISession;->setPlaybackState(Landroid/media/session/PlaybackState;)V
+HPLandroid/media/session/ISession;->setPlaybackToLocal(Landroid/media/AudioAttributes;)V
+HPLandroid/media/session/ISession;->setPlaybackToRemote(II)V
+HPLandroid/media/session/ISession;->setQueue(Landroid/content/pm/ParceledListSlice;)V
+HPLandroid/media/session/ISession;->setQueueTitle(Ljava/lang/CharSequence;)V
+HPLandroid/media/session/ISession;->setRatingType(I)V
+HPLandroid/media/session/ISessionCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/media/session/ISessionCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/session/ISessionCallback$Stub;-><init>()V
+HPLandroid/media/session/ISessionCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/session/ISessionCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ISessionCallback;
+HPLandroid/media/session/ISessionCallback;->onAdjustVolume(I)V
+HPLandroid/media/session/ISessionCallback;->onCommand(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ResultReceiver;)V
+HPLandroid/media/session/ISessionCallback;->onCustomAction(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionCallback;->onFastForward()V
+HPLandroid/media/session/ISessionCallback;->onMediaButton(Landroid/content/Intent;ILandroid/os/ResultReceiver;)V
+HPLandroid/media/session/ISessionCallback;->onNext()V
+HPLandroid/media/session/ISessionCallback;->onPause()V
+HPLandroid/media/session/ISessionCallback;->onPlay()V
+HPLandroid/media/session/ISessionCallback;->onPlayFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionCallback;->onPlayFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionCallback;->onPlayFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionCallback;->onPrepare()V
+HPLandroid/media/session/ISessionCallback;->onPrepareFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionCallback;->onPrepareFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionCallback;->onPrepareFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionCallback;->onPrevious()V
+HPLandroid/media/session/ISessionCallback;->onRate(Landroid/media/Rating;)V
+HPLandroid/media/session/ISessionCallback;->onRewind()V
+HPLandroid/media/session/ISessionCallback;->onSeekTo(J)V
+HPLandroid/media/session/ISessionCallback;->onSetVolumeTo(I)V
+HPLandroid/media/session/ISessionCallback;->onSkipToTrack(J)V
+HPLandroid/media/session/ISessionCallback;->onStop()V
+HPLandroid/media/session/ISessionController$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/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/ParcelableVolumeInfo;
+HPLandroid/media/session/ISessionController$Stub$Proxy;->registerCallbackListener(Landroid/media/session/ISessionControllerCallback;)V
+HPLandroid/media/session/ISessionController$Stub$Proxy;->unregisterCallbackListener(Landroid/media/session/ISessionControllerCallback;)V
+HPLandroid/media/session/ISessionController$Stub;-><init>()V
+HPLandroid/media/session/ISessionController$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/session/ISessionController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ISessionController;
+HPLandroid/media/session/ISessionController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/session/ISessionController;->adjustVolume(IILjava/lang/String;)V
+HPLandroid/media/session/ISessionController;->fastForward()V
+HPLandroid/media/session/ISessionController;->getExtras()Landroid/os/Bundle;
+HPLandroid/media/session/ISessionController;->getFlags()J
+HPLandroid/media/session/ISessionController;->getLaunchPendingIntent()Landroid/app/PendingIntent;
+HPLandroid/media/session/ISessionController;->getMetadata()Landroid/media/MediaMetadata;
+HPLandroid/media/session/ISessionController;->getPackageName()Ljava/lang/String;
+HPLandroid/media/session/ISessionController;->getPlaybackState()Landroid/media/session/PlaybackState;
+HPLandroid/media/session/ISessionController;->getQueue()Landroid/content/pm/ParceledListSlice;
+HPLandroid/media/session/ISessionController;->getQueueTitle()Ljava/lang/CharSequence;
+HPLandroid/media/session/ISessionController;->getRatingType()I
+HPLandroid/media/session/ISessionController;->getTag()Ljava/lang/String;
+HPLandroid/media/session/ISessionController;->getVolumeAttributes()Landroid/media/session/ParcelableVolumeInfo;
+HPLandroid/media/session/ISessionController;->isTransportControlEnabled()Z
+HPLandroid/media/session/ISessionController;->next()V
+HPLandroid/media/session/ISessionController;->pause()V
+HPLandroid/media/session/ISessionController;->play()V
+HPLandroid/media/session/ISessionController;->playFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionController;->playFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionController;->playFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionController;->prepare()V
+HPLandroid/media/session/ISessionController;->prepareFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionController;->prepareFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionController;->prepareFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionController;->previous()V
+HPLandroid/media/session/ISessionController;->rate(Landroid/media/Rating;)V
+HPLandroid/media/session/ISessionController;->registerCallbackListener(Landroid/media/session/ISessionControllerCallback;)V
+HPLandroid/media/session/ISessionController;->rewind()V
+HPLandroid/media/session/ISessionController;->seekTo(J)V
+HPLandroid/media/session/ISessionController;->sendCommand(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ResultReceiver;)V
+HPLandroid/media/session/ISessionController;->sendCustomAction(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionController;->sendMediaButton(Landroid/view/KeyEvent;)Z
+HPLandroid/media/session/ISessionController;->setVolumeTo(IILjava/lang/String;)V
+HPLandroid/media/session/ISessionController;->skipToQueueItem(J)V
+HPLandroid/media/session/ISessionController;->stop()V
+HPLandroid/media/session/ISessionController;->unregisterCallbackListener(Landroid/media/session/ISessionControllerCallback;)V
+HPLandroid/media/session/ISessionControllerCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->onMetadataChanged(Landroid/media/MediaMetadata;)V
+HPLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->onPlaybackStateChanged(Landroid/media/session/PlaybackState;)V
+HPLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->onSessionDestroyed()V
+HPLandroid/media/session/ISessionControllerCallback$Stub;-><init>()V
+HPLandroid/media/session/ISessionControllerCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/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/ISessionControllerCallback;->onEvent(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionControllerCallback;->onExtrasChanged(Landroid/os/Bundle;)V
+HPLandroid/media/session/ISessionControllerCallback;->onMetadataChanged(Landroid/media/MediaMetadata;)V
+HPLandroid/media/session/ISessionControllerCallback;->onPlaybackStateChanged(Landroid/media/session/PlaybackState;)V
+HPLandroid/media/session/ISessionControllerCallback;->onQueueChanged(Landroid/content/pm/ParceledListSlice;)V
+HPLandroid/media/session/ISessionControllerCallback;->onQueueTitleChanged(Ljava/lang/CharSequence;)V
+HPLandroid/media/session/ISessionControllerCallback;->onSessionDestroyed()V
+HPLandroid/media/session/ISessionControllerCallback;->onVolumeInfoChanged(Landroid/media/session/ParcelableVolumeInfo;)V
+HPLandroid/media/session/ISessionManager$Stub$Proxy;->createSession(Ljava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;I)Landroid/media/session/ISession;
+HPLandroid/media/session/ISessionManager$Stub$Proxy;->dispatchVolumeKeyEvent(Landroid/view/KeyEvent;IZ)V
+HPLandroid/media/session/ISessionManager$Stub$Proxy;->removeSessionsListener(Landroid/media/session/IActiveSessionsListener;)V
+HPLandroid/media/session/ISessionManager$Stub;-><init>()V
+HPLandroid/media/session/ISessionManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/media/session/MediaController$CallbackStub;-><init>(Landroid/media/session/MediaController;)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;->onSessionDestroyed()V
+HPLandroid/media/session/MediaController$MessageHandler;->-get0(Landroid/media/session/MediaController$MessageHandler;)Landroid/media/session/MediaController$Callback;
+HPLandroid/media/session/MediaController$MessageHandler;->-set0(Landroid/media/session/MediaController$MessageHandler;Z)Z
+HPLandroid/media/session/MediaController$MessageHandler;-><init>(Landroid/os/Looper;Landroid/media/session/MediaController$Callback;)V
+HPLandroid/media/session/MediaController$MessageHandler;->handleMessage(Landroid/os/Message;)V
+HPLandroid/media/session/MediaController$MessageHandler;->post(ILjava/lang/Object;Landroid/os/Bundle;)V
+HPLandroid/media/session/MediaController$PlaybackInfo;-><init>(ILandroid/media/AudioAttributes;III)V
+HPLandroid/media/session/MediaController$PlaybackInfo;->getPlaybackType()I
+HPLandroid/media/session/MediaController$TransportControls;-><init>(Landroid/media/session/MediaController;)V
+HPLandroid/media/session/MediaController$TransportControls;-><init>(Landroid/media/session/MediaController;Landroid/media/session/MediaController$TransportControls;)V
+HPLandroid/media/session/MediaController;->-wrap0(Landroid/media/session/MediaController;ILjava/lang/Object;Landroid/os/Bundle;)V
+HPLandroid/media/session/MediaController;-><init>(Landroid/content/Context;Landroid/media/session/ISessionController;)V
+HPLandroid/media/session/MediaController;-><init>(Landroid/content/Context;Landroid/media/session/MediaSession$Token;)V
+HPLandroid/media/session/MediaController;->addCallbackLocked(Landroid/media/session/MediaController$Callback;Landroid/os/Handler;)V
+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;->getSessionToken()Landroid/media/session/MediaSession$Token;
+HPLandroid/media/session/MediaController;->getTransportControls()Landroid/media/session/MediaController$TransportControls;
+HPLandroid/media/session/MediaController;->postMessage(ILjava/lang/Object;Landroid/os/Bundle;)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
+HPLandroid/media/session/MediaSession$Callback;->-set0(Landroid/media/session/MediaSession$Callback;Landroid/media/session/MediaSession$CallbackMessageHandler;)Landroid/media/session/MediaSession$CallbackMessageHandler;
+HPLandroid/media/session/MediaSession$Callback;->-set1(Landroid/media/session/MediaSession$Callback;Landroid/media/session/MediaSession;)Landroid/media/session/MediaSession;
+HPLandroid/media/session/MediaSession$CallbackMessageHandler;->-get0(Landroid/media/session/MediaSession$CallbackMessageHandler;)Landroid/media/session/MediaSession$Callback;
+HPLandroid/media/session/MediaSession$CallbackMessageHandler;-><init>(Landroid/media/session/MediaSession;Landroid/os/Looper;Landroid/media/session/MediaSession$Callback;)V
+HPLandroid/media/session/MediaSession$CallbackStub;-><init>(Landroid/media/session/MediaSession;)V
+HPLandroid/media/session/MediaSession$Token$1;-><init>()V
+HPLandroid/media/session/MediaSession$Token$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/session/MediaSession$Token;
+HPLandroid/media/session/MediaSession$Token$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/media/session/MediaSession$Token;-><init>(Landroid/media/session/ISessionController;)V
+HPLandroid/media/session/MediaSession$Token;->equals(Ljava/lang/Object;)Z
+HPLandroid/media/session/MediaSession$Token;->getBinder()Landroid/media/session/ISessionController;
+HPLandroid/media/session/MediaSession$Token;->hashCode()I
+HPLandroid/media/session/MediaSession$Token;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/media/session/MediaSession;-><init>(Landroid/content/Context;Ljava/lang/String;)V
+HPLandroid/media/session/MediaSession;-><init>(Landroid/content/Context;Ljava/lang/String;I)V
+HPLandroid/media/session/MediaSession;->getSessionToken()Landroid/media/session/MediaSession$Token;
+HPLandroid/media/session/MediaSession;->isActive()Z
+HPLandroid/media/session/MediaSession;->isActiveState(I)Z
+HPLandroid/media/session/MediaSession;->release()V
+HPLandroid/media/session/MediaSession;->setActive(Z)V
+HPLandroid/media/session/MediaSession;->setCallback(Landroid/media/session/MediaSession$Callback;)V
+HPLandroid/media/session/MediaSession;->setCallback(Landroid/media/session/MediaSession$Callback;Landroid/os/Handler;)V
+HPLandroid/media/session/MediaSession;->setFlags(I)V
+HPLandroid/media/session/MediaSession;->setMediaButtonReceiver(Landroid/app/PendingIntent;)V
+HPLandroid/media/session/MediaSession;->setMetadata(Landroid/media/MediaMetadata;)V
+HPLandroid/media/session/MediaSession;->setPlaybackState(Landroid/media/session/PlaybackState;)V
+HPLandroid/media/session/MediaSession;->setPlaybackToLocal(Landroid/media/AudioAttributes;)V
+HPLandroid/media/session/MediaSession;->setSessionActivity(Landroid/app/PendingIntent;)V
+HPLandroid/media/session/MediaSessionLegacyHelper;-><init>(Landroid/content/Context;)V
+HPLandroid/media/session/MediaSessionLegacyHelper;->getHelper(Landroid/content/Context;)Landroid/media/session/MediaSessionLegacyHelper;
+HPLandroid/media/session/MediaSessionLegacyHelper;->sendVolumeKeyEvent(Landroid/view/KeyEvent;IZ)V
+HPLandroid/media/session/MediaSessionManager$CallbackImpl$3;-><init>(Landroid/media/session/MediaSessionManager$CallbackImpl;Landroid/media/session/MediaSession$Token;)V
+HPLandroid/media/session/MediaSessionManager$CallbackImpl$3;->run()V
+HPLandroid/media/session/MediaSessionManager$CallbackImpl;->-get0(Landroid/media/session/MediaSessionManager$CallbackImpl;)Landroid/media/session/MediaSessionManager$Callback;
+HPLandroid/media/session/MediaSessionManager$CallbackImpl;->onAddressedPlayerChangedToMediaSession(Landroid/media/session/MediaSession$Token;)V
+HPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper$1$1;-><init>(Landroid/media/session/MediaSessionManager$SessionsChangedWrapper$1;Ljava/util/List;)V
+HPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper$1$1;->run()V
+HPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper$1;->onActiveSessionsChanged(Ljava/util/List;)V
+HPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper;->-get0(Landroid/media/session/MediaSessionManager$SessionsChangedWrapper;)Landroid/content/Context;
+HPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper;->-get1(Landroid/media/session/MediaSessionManager$SessionsChangedWrapper;)Landroid/os/Handler;
+HPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper;->-get2(Landroid/media/session/MediaSessionManager$SessionsChangedWrapper;)Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;
+HPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper;->-wrap0(Landroid/media/session/MediaSessionManager$SessionsChangedWrapper;)V
+HPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper;->release()V
+HPLandroid/media/session/MediaSessionManager;->createSession(Landroid/media/session/MediaSession$CallbackStub;Ljava/lang/String;I)Landroid/media/session/ISession;
+HPLandroid/media/session/MediaSessionManager;->dispatchVolumeKeyEvent(Landroid/view/KeyEvent;IZ)V
+HPLandroid/media/session/ParcelableVolumeInfo$1;-><init>()V
+HPLandroid/media/session/ParcelableVolumeInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/session/ParcelableVolumeInfo;
+HPLandroid/media/session/ParcelableVolumeInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/media/session/ParcelableVolumeInfo;-><init>(ILandroid/media/AudioAttributes;III)V
+HPLandroid/media/session/ParcelableVolumeInfo;-><init>(Landroid/os/Parcel;)V
+HPLandroid/media/session/ParcelableVolumeInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/media/session/PlaybackState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/session/PlaybackState;
+HPLandroid/media/session/PlaybackState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/media/session/PlaybackState$Builder;-><init>(Landroid/media/session/PlaybackState;)V
+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$CustomAction$1;-><init>()V
+HPLandroid/media/session/PlaybackState;->-get0(Landroid/media/session/PlaybackState;)J
+HPLandroid/media/session/PlaybackState;->-get1(Landroid/media/session/PlaybackState;)J
+HPLandroid/media/session/PlaybackState;->-get2(Landroid/media/session/PlaybackState;)J
+HPLandroid/media/session/PlaybackState;->-get3(Landroid/media/session/PlaybackState;)Ljava/util/List;
+HPLandroid/media/session/PlaybackState;->-get4(Landroid/media/session/PlaybackState;)Ljava/lang/CharSequence;
+HPLandroid/media/session/PlaybackState;->-get5(Landroid/media/session/PlaybackState;)Landroid/os/Bundle;
+HPLandroid/media/session/PlaybackState;->-get6(Landroid/media/session/PlaybackState;)J
+HPLandroid/media/session/PlaybackState;->-get7(Landroid/media/session/PlaybackState;)F
+HPLandroid/media/session/PlaybackState;->-get8(Landroid/media/session/PlaybackState;)I
+HPLandroid/media/session/PlaybackState;->-get9(Landroid/media/session/PlaybackState;)J
+HPLandroid/media/session/PlaybackState;-><init>(Landroid/os/Parcel;)V
+HPLandroid/media/session/PlaybackState;-><init>(Landroid/os/Parcel;Landroid/media/session/PlaybackState;)V
+HPLandroid/media/session/PlaybackState;->getActiveQueueItemId()J
+HPLandroid/media/session/PlaybackState;->getLastPositionUpdateTime()J
+HPLandroid/media/session/PlaybackState;->getPlaybackSpeed()F
+HPLandroid/media/session/PlaybackState;->getPosition()J
+HPLandroid/media/session/PlaybackState;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/metrics/LogMaker;-><init>([Ljava/lang/Object;)V
+HPLandroid/metrics/LogMaker;->clearCategory()Landroid/metrics/LogMaker;
+HPLandroid/metrics/LogMaker;->clearSubtype()Landroid/metrics/LogMaker;
+HPLandroid/metrics/LogMaker;->clearTaggedData(I)Landroid/metrics/LogMaker;
+HPLandroid/metrics/LogMaker;->clearType()Landroid/metrics/LogMaker;
+HPLandroid/metrics/LogMaker;->deserialize([Ljava/lang/Object;)V
+HPLandroid/metrics/LogMaker;->getCategory()I
+HPLandroid/metrics/LogMaker;->getCounterBucket()J
+HPLandroid/metrics/LogMaker;->getCounterName()Ljava/lang/String;
+HPLandroid/metrics/LogMaker;->getCounterValue()I
+HPLandroid/metrics/LogMaker;->getSubtype()I
+HPLandroid/metrics/LogMaker;->getTimestamp()J
+HPLandroid/metrics/LogMaker;->isLongCounterBucket()Z
+HPLandroid/metrics/LogMaker;->setCounterBucket(I)Landroid/metrics/LogMaker;
+HPLandroid/metrics/LogMaker;->setCounterName(Ljava/lang/String;)Landroid/metrics/LogMaker;
+HPLandroid/metrics/LogMaker;->setCounterValue(I)Landroid/metrics/LogMaker;
+HPLandroid/metrics/LogMaker;->setProcessId(I)Landroid/metrics/LogMaker;
+HPLandroid/metrics/LogMaker;->setTimestamp(J)Landroid/metrics/LogMaker;
+HPLandroid/metrics/LogMaker;->setUid(I)Landroid/metrics/LogMaker;
+HPLandroid/metrics/MetricsReader$Event;-><init>(Landroid/util/EventLog$Event;)V
+HPLandroid/metrics/MetricsReader$Event;->getData()Ljava/lang/Object;
+HPLandroid/metrics/MetricsReader$Event;->getProcessId()I
+HPLandroid/metrics/MetricsReader$Event;->getTimeMillis()J
+HPLandroid/metrics/MetricsReader$Event;->getUid()I
+HPLandroid/metrics/MetricsReader$LogReader;->readEvents([IJLjava/util/Collection;)V
+HPLandroid/metrics/MetricsReader$LogReader;->writeCheckpoint(I)V
+HPLandroid/metrics/MetricsReader;->checkpoint()V
+HPLandroid/metrics/MetricsReader;->hasNext()Z
+HPLandroid/metrics/MetricsReader;->next()Landroid/metrics/LogMaker;
+HPLandroid/metrics/MetricsReader;->read(J)V
+HPLandroid/metrics/MetricsReader;->reset()V
+HPLandroid/net/ConnectivityManager$NetworkCallback;->onAvailable(Landroid/net/Network;)V
+HPLandroid/net/ConnectivityManager$NetworkCallback;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
+HPLandroid/net/ConnectivityManager$NetworkCallback;->onPreCheck(Landroid/net/Network;)V
+HPLandroid/net/ConnectivityManager$OnNetworkActiveListener;->onNetworkActive()V
+HPLandroid/net/ConnectivityManager;->bindProcessToNetwork(Landroid/net/Network;)Z
+HPLandroid/net/ConnectivityManager;->checkChangePermission(Landroid/content/Context;)Z
+HPLandroid/net/ConnectivityManager;->enforceTetherChangePermission(Landroid/content/Context;Ljava/lang/String;)V
+HPLandroid/net/ConnectivityManager;->getActiveNetworkForUid(IZ)Landroid/net/Network;
+HPLandroid/net/ConnectivityManager;->getActiveNetworkInfoForUid(IZ)Landroid/net/NetworkInfo;
+HPLandroid/net/ConnectivityManager;->getBackgroundDataSetting()Z
+HPLandroid/net/ConnectivityManager;->getBoundNetworkForProcess()Landroid/net/Network;
+HPLandroid/net/ConnectivityManager;->getDefaultNetworkCapabilitiesForUser(I)[Landroid/net/NetworkCapabilities;
+HPLandroid/net/ConnectivityManager;->getDefaultProxy()Landroid/net/ProxyInfo;
+HPLandroid/net/ConnectivityManager;->getInstance()Landroid/net/ConnectivityManager;
+HPLandroid/net/ConnectivityManager;->getInstanceOrNull()Landroid/net/ConnectivityManager;
+HPLandroid/net/ConnectivityManager;->getNetworkTypeName(I)Ljava/lang/String;
+HPLandroid/net/ConnectivityManager;->getProcessDefaultNetwork()Landroid/net/Network;
+HPLandroid/net/ConnectivityManager;->getProxyForNetwork(Landroid/net/Network;)Landroid/net/ProxyInfo;
+HPLandroid/net/ConnectivityManager;->isNetworkTypeMobile(I)Z
+HPLandroid/net/ConnectivityManager;->isNetworkTypeWifi(I)Z
+HPLandroid/net/ConnectivityManager;->registerDefaultNetworkCallback(Landroid/net/ConnectivityManager$NetworkCallback;)V
+HPLandroid/net/ConnectivityManager;->registerDefaultNetworkCallback(Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;)V
+HPLandroid/net/ConnectivityManager;->registerNetworkAgent(Landroid/os/Messenger;Landroid/net/NetworkInfo;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;ILandroid/net/NetworkMisc;)I
+HPLandroid/net/ConnectivityManager;->reportNetworkConnectivity(Landroid/net/Network;Z)V
+HPLandroid/net/ConnectivityManager;->setProcessDefaultNetwork(Landroid/net/Network;)Z
+HPLandroid/net/ConnectivityManager;->unregisterNetworkCallback(Landroid/net/ConnectivityManager$NetworkCallback;)V
+HPLandroid/net/ConnectivityMetricsEvent$1;-><init>()V
+HPLandroid/net/ConnectivityMetricsEvent;-><init>()V
+HPLandroid/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;
+HPLandroid/net/DhcpInfo;-><init>()V
+HPLandroid/net/DhcpInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/DhcpResults$1;-><init>()V
+HPLandroid/net/DhcpResults;-><init>()V
+HPLandroid/net/DhcpResults;-><init>(Landroid/net/DhcpResults;)V
+HPLandroid/net/DhcpResults;->hasMeteredHint()Z
+HPLandroid/net/DhcpResults;->toString()Ljava/lang/String;
+HPLandroid/net/EthernetManager$1;-><init>(Landroid/net/EthernetManager;)V
+HPLandroid/net/EthernetManager$2;-><init>(Landroid/net/EthernetManager;)V
+HPLandroid/net/EthernetManager;-><init>(Landroid/content/Context;Landroid/net/IEthernetManager;)V
+HPLandroid/net/EventLogTags;->writeNtpFailure(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/net/IConnectivityManager$Stub$Proxy;->getDefaultNetworkCapabilitiesForUser(I)[Landroid/net/NetworkCapabilities;
+HPLandroid/net/IConnectivityManager$Stub$Proxy;->getVpnConfig(I)Lcom/android/internal/net/VpnConfig;
+HPLandroid/net/IConnectivityManager$Stub$Proxy;->releaseNetworkRequest(Landroid/net/NetworkRequest;)V
+HPLandroid/net/IConnectivityManager$Stub$Proxy;->reportNetworkConnectivity(Landroid/net/Network;Z)V
+HPLandroid/net/IConnectivityManager$Stub;-><init>()V
+HPLandroid/net/IConnectivityManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/net/IEthernetManager$Stub;-><init>()V
+HPLandroid/net/IEthernetManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IEthernetManager;
+HPLandroid/net/IEthernetManager;->addListener(Landroid/net/IEthernetServiceListener;)V
+HPLandroid/net/IEthernetManager;->getConfiguration()Landroid/net/IpConfiguration;
+HPLandroid/net/IEthernetManager;->isAvailable()Z
+HPLandroid/net/IEthernetManager;->removeListener(Landroid/net/IEthernetServiceListener;)V
+HPLandroid/net/IEthernetManager;->setConfiguration(Landroid/net/IpConfiguration;)V
+HPLandroid/net/IEthernetServiceListener$Stub;-><init>()V
+HPLandroid/net/IEthernetServiceListener;->onAvailabilityChanged(Z)V
+HPLandroid/net/IIpConnectivityMetrics$Stub;-><init>()V
+HPLandroid/net/IIpConnectivityMetrics$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IIpConnectivityMetrics;
+HPLandroid/net/IIpConnectivityMetrics;->logEvent(Landroid/net/ConnectivityMetricsEvent;)I
+HPLandroid/net/IIpConnectivityMetrics;->registerNetdEventCallback(Landroid/net/INetdEventCallback;)Z
+HPLandroid/net/IIpConnectivityMetrics;->unregisterNetdEventCallback()Z
+HPLandroid/net/INetd$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/net/INetd$Stub$Proxy;->firewallReplaceUidChain(Ljava/lang/String;Z[I)Z
+HPLandroid/net/INetd$Stub$Proxy;->setIPv6AddrGenMode(Ljava/lang/String;I)V
+HPLandroid/net/INetd$Stub$Proxy;->setResolverConfiguration(I[Ljava/lang/String;[Ljava/lang/String;[I)V
+HPLandroid/net/INetd$Stub$Proxy;->socketDestroy([Landroid/net/UidRange;[I)V
+HPLandroid/net/INetd$Stub$Proxy;->wakeupAddInterface(Ljava/lang/String;Ljava/lang/String;II)V
+HPLandroid/net/INetd$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetd;
+HPLandroid/net/INetd;->addPrivateDnsServer(Ljava/lang/String;ILjava/lang/String;[Ljava/lang/String;)V
+HPLandroid/net/INetd;->bandwidthEnableDataSaver(Z)Z
+HPLandroid/net/INetd;->firewallReplaceUidChain(Ljava/lang/String;Z[I)Z
+HPLandroid/net/INetd;->getMetricsReportingLevel()I
+HPLandroid/net/INetd;->getResolverInfo(I[Ljava/lang/String;[Ljava/lang/String;[I[I)V
+HPLandroid/net/INetd;->interfaceAddAddress(Ljava/lang/String;Ljava/lang/String;I)V
+HPLandroid/net/INetd;->interfaceDelAddress(Ljava/lang/String;Ljava/lang/String;I)V
+HPLandroid/net/INetd;->ipSecAddSecurityAssociation(IIILjava/lang/String;Ljava/lang/String;JILjava/lang/String;[BILjava/lang/String;[BIIII)V
+HPLandroid/net/INetd;->ipSecAllocateSpi(IILjava/lang/String;Ljava/lang/String;I)I
+HPLandroid/net/INetd;->ipSecApplyTransportModeTransform(Ljava/io/FileDescriptor;IILjava/lang/String;Ljava/lang/String;I)V
+HPLandroid/net/INetd;->ipSecDeleteSecurityAssociation(IILjava/lang/String;Ljava/lang/String;I)V
+HPLandroid/net/INetd;->ipSecRemoveTransportModeTransform(Ljava/io/FileDescriptor;)V
+HPLandroid/net/INetd;->isAlive()Z
+HPLandroid/net/INetd;->networkRejectNonSecureVpn(Z[Landroid/net/UidRange;)V
+HPLandroid/net/INetd;->removePrivateDnsServer(Ljava/lang/String;)V
+HPLandroid/net/INetd;->setIPv6AddrGenMode(Ljava/lang/String;I)V
+HPLandroid/net/INetd;->setMetricsReportingLevel(I)V
+HPLandroid/net/INetd;->setProcSysNet(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/net/INetd;->setResolverConfiguration(I[Ljava/lang/String;[Ljava/lang/String;[I)V
+HPLandroid/net/INetd;->socketDestroy([Landroid/net/UidRange;[I)V
+HPLandroid/net/INetd;->tetherApplyDnsInterfaces()Z
+HPLandroid/net/INetd;->wakeupAddInterface(Ljava/lang/String;Ljava/lang/String;II)V
+HPLandroid/net/INetd;->wakeupDelInterface(Ljava/lang/String;Ljava/lang/String;II)V
+HPLandroid/net/INetworkManagementEventObserver$Stub;-><init>()V
+HPLandroid/net/INetworkManagementEventObserver$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/net/INetworkPolicyListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/net/INetworkPolicyListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/net/INetworkPolicyListener$Stub$Proxy;->onMeteredIfacesChanged([Ljava/lang/String;)V
+HPLandroid/net/INetworkPolicyListener$Stub$Proxy;->onUidRulesChanged(II)V
+HPLandroid/net/INetworkPolicyListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkPolicyListener;
+HPLandroid/net/INetworkPolicyListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/net/INetworkPolicyManager$Stub;-><init>()V
+HPLandroid/net/INetworkPolicyManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/net/INetworkRecommendationProvider$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/net/INetworkRecommendationProvider$Stub$Proxy;->requestScores([Landroid/net/NetworkKey;)V
+HPLandroid/net/INetworkRecommendationProvider$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkRecommendationProvider;
+HPLandroid/net/INetworkRecommendationProvider$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/net/INetworkScoreCache$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/net/INetworkScoreService$Stub$Proxy;->getActiveScorerPackage()Ljava/lang/String;
+HPLandroid/net/INetworkScoreService$Stub$Proxy;->updateScores([Landroid/net/ScoredNetwork;)Z
+HPLandroid/net/INetworkScoreService$Stub;-><init>()V
+HPLandroid/net/INetworkScoreService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/net/INetworkStatsService$Stub$Proxy;->incrementOperationCount(III)V
+HPLandroid/net/INetworkStatsService$Stub;-><init>()V
+HPLandroid/net/INetworkStatsService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/net/ITetheringStatsProvider$Stub;-><init>()V
+HPLandroid/net/InterfaceConfiguration$1;-><init>()V
+HPLandroid/net/InterfaceConfiguration;-><init>()V
+HPLandroid/net/InterfaceConfiguration;->getFlags()Ljava/lang/Iterable;
+HPLandroid/net/InterfaceConfiguration;->getLinkAddress()Landroid/net/LinkAddress;
+HPLandroid/net/InterfaceConfiguration;->setFlag(Ljava/lang/String;)V
+HPLandroid/net/InterfaceConfiguration;->setHardwareAddress(Ljava/lang/String;)V
+HPLandroid/net/InterfaceConfiguration;->setInterfaceUp()V
+HPLandroid/net/InterfaceConfiguration;->setLinkAddress(Landroid/net/LinkAddress;)V
+HPLandroid/net/InterfaceConfiguration;->validateFlag(Ljava/lang/String;)V
+HPLandroid/net/IpConfiguration;-><init>(Landroid/net/IpConfiguration$IpAssignment;Landroid/net/IpConfiguration$ProxySettings;Landroid/net/StaticIpConfiguration;Landroid/net/ProxyInfo;)V
+HPLandroid/net/IpConfiguration;-><init>(Landroid/net/IpConfiguration;)V
+HPLandroid/net/IpConfiguration;->setIpAssignment(Landroid/net/IpConfiguration$IpAssignment;)V
+HPLandroid/net/IpConfiguration;->setProxySettings(Landroid/net/IpConfiguration$ProxySettings;)V
+HPLandroid/net/IpConfiguration;->toString()Ljava/lang/String;
+HPLandroid/net/IpConfiguration;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/IpPrefix;-><init>(Ljava/lang/String;)V
+HPLandroid/net/IpPrefix;-><init>(Ljava/net/InetAddress;I)V
+HPLandroid/net/IpPrefix;->contains(Ljava/net/InetAddress;)Z
+HPLandroid/net/IpPrefix;->hashCode()I
+HPLandroid/net/IpPrefix;->toString()Ljava/lang/String;
+HPLandroid/net/IpPrefix;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/LinkAddress;-><init>(Ljava/lang/String;II)V
+HPLandroid/net/LinkAddress;-><init>(Ljava/net/InetAddress;I)V
+HPLandroid/net/LinkAddress;->equals(Ljava/lang/Object;)Z
+HPLandroid/net/LinkAddress;->getAddress()Ljava/net/InetAddress;
+HPLandroid/net/LinkAddress;->getPrefixLength()I
+HPLandroid/net/LinkAddress;->isGlobalPreferred()Z
+HPLandroid/net/LinkAddress;->isIPv6()Z
+HPLandroid/net/LinkAddress;->isIPv6ULA()Z
+HPLandroid/net/LinkAddress;->scopeForUnicastAddress(Ljava/net/InetAddress;)I
+HPLandroid/net/LinkAddress;->toString()Ljava/lang/String;
+HPLandroid/net/LinkAddress;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/LinkProperties$CompareResult;-><init>()V
+HPLandroid/net/LinkProperties$ProvisioningChange;-><init>(Ljava/lang/String;I)V
+HPLandroid/net/LinkProperties$ProvisioningChange;->values()[Landroid/net/LinkProperties$ProvisioningChange;
+HPLandroid/net/LinkProperties;-><init>(Landroid/net/LinkProperties;)V
+HPLandroid/net/LinkProperties;->clear()V
+HPLandroid/net/LinkProperties;->compareAllInterfaceNames(Landroid/net/LinkProperties;)Landroid/net/LinkProperties$CompareResult;
+HPLandroid/net/LinkProperties;->compareAllRoutes(Landroid/net/LinkProperties;)Landroid/net/LinkProperties$CompareResult;
+HPLandroid/net/LinkProperties;->describeContents()I
+HPLandroid/net/LinkProperties;->equals(Ljava/lang/Object;)Z
+HPLandroid/net/LinkProperties;->getAddresses()Ljava/util/List;
+HPLandroid/net/LinkProperties;->getAllInterfaceNames()Ljava/util/List;
+HPLandroid/net/LinkProperties;->getAllRoutes()Ljava/util/List;
+HPLandroid/net/LinkProperties;->getDomains()Ljava/lang/String;
+HPLandroid/net/LinkProperties;->getHttpProxy()Landroid/net/ProxyInfo;
+HPLandroid/net/LinkProperties;->getInterfaceName()Ljava/lang/String;
+HPLandroid/net/LinkProperties;->getLinkAddresses()Ljava/util/List;
+HPLandroid/net/LinkProperties;->getMtu()I
+HPLandroid/net/LinkProperties;->getRoutes()Ljava/util/List;
+HPLandroid/net/LinkProperties;->getStackedLinks()Ljava/util/List;
+HPLandroid/net/LinkProperties;->getTcpBufferSizes()Ljava/lang/String;
+HPLandroid/net/LinkProperties;->hasGlobalIPv6Address()Z
+HPLandroid/net/LinkProperties;->hasIPv4Address()Z
+HPLandroid/net/LinkProperties;->hasIPv4AddressOnInterface(Ljava/lang/String;)Z
+HPLandroid/net/LinkProperties;->hasIPv4DefaultRoute()Z
+HPLandroid/net/LinkProperties;->hasIPv4DnsServer()Z
+HPLandroid/net/LinkProperties;->hasIPv6DefaultRoute()Z
+HPLandroid/net/LinkProperties;->hasIPv6DnsServer()Z
+HPLandroid/net/LinkProperties;->isIPv4Provisioned()Z
+HPLandroid/net/LinkProperties;->isIPv6Provisioned()Z
+HPLandroid/net/LinkProperties;->isIdenticalAddresses(Landroid/net/LinkProperties;)Z
+HPLandroid/net/LinkProperties;->isIdenticalDnses(Landroid/net/LinkProperties;)Z
+HPLandroid/net/LinkProperties;->isIdenticalHttpProxy(Landroid/net/LinkProperties;)Z
+HPLandroid/net/LinkProperties;->isIdenticalInterfaceName(Landroid/net/LinkProperties;)Z
+HPLandroid/net/LinkProperties;->isIdenticalMtu(Landroid/net/LinkProperties;)Z
+HPLandroid/net/LinkProperties;->isIdenticalRoutes(Landroid/net/LinkProperties;)Z
+HPLandroid/net/LinkProperties;->isIdenticalStackedLinks(Landroid/net/LinkProperties;)Z
+HPLandroid/net/LinkProperties;->isIdenticalTcpBufferSizes(Landroid/net/LinkProperties;)Z
+HPLandroid/net/LinkProperties;->isProvisioned()Z
+HPLandroid/net/LinkProperties;->isReachable(Ljava/net/InetAddress;)Z
+HPLandroid/net/LinkProperties;->removeLinkAddress(Landroid/net/LinkAddress;)Z
+HPLandroid/net/LinkProperties;->removeRoute(Landroid/net/RouteInfo;)Z
+HPLandroid/net/LinkProperties;->setDnsServers(Ljava/util/Collection;)V
+HPLandroid/net/LinkProperties;->setHttpProxy(Landroid/net/ProxyInfo;)V
+HPLandroid/net/LinkProperties;->setLinkAddresses(Ljava/util/Collection;)V
+HPLandroid/net/LinkProperties;->toString()Ljava/lang/String;
+HPLandroid/net/LinkProperties;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/LocalSocket;->getAncillaryFileDescriptors()[Ljava/io/FileDescriptor;
+HPLandroid/net/LocalSocketImpl$SocketInputStream;->close()V
+HPLandroid/net/LocalSocketImpl$SocketInputStream;->read()I
+HPLandroid/net/LocalSocketImpl$SocketInputStream;->read([B)I
+HPLandroid/net/LocalSocketImpl$SocketOutputStream;->close()V
+HPLandroid/net/LocalSocketImpl$SocketOutputStream;->write(I)V
+HPLandroid/net/LocalSocketImpl;->-wrap0(Landroid/net/LocalSocketImpl;Ljava/io/FileDescriptor;)I
+HPLandroid/net/LocalSocketImpl;->-wrap2(Landroid/net/LocalSocketImpl;ILjava/io/FileDescriptor;)V
+HPLandroid/net/LocalSocketImpl;->getAncillaryFileDescriptors()[Ljava/io/FileDescriptor;
+HPLandroid/net/Network$2;-><init>(Landroid/net/Network;)V
+HPLandroid/net/Network$2;->lookup(Ljava/lang/String;)Ljava/util/List;
+HPLandroid/net/Network$NetworkBoundSocketFactory;-><init>(Landroid/net/Network;I)V
+HPLandroid/net/Network$NetworkBoundSocketFactory;->createSocket()Ljava/net/Socket;
+HPLandroid/net/Network;-><init>(Landroid/net/Network;)V
+HPLandroid/net/Network;->bindSocket(Ljava/io/FileDescriptor;)V
+HPLandroid/net/Network;->bindSocket(Ljava/net/Socket;)V
+HPLandroid/net/Network;->getAllByName(Ljava/lang/String;)[Ljava/net/InetAddress;
+HPLandroid/net/Network;->getSocketFactory()Ljavax/net/SocketFactory;
+HPLandroid/net/Network;->hashCode()I
+HPLandroid/net/Network;->maybeInitHttpClient()V
+HPLandroid/net/Network;->openConnection(Ljava/net/URL;)Ljava/net/URLConnection;
+HPLandroid/net/Network;->openConnection(Ljava/net/URL;Ljava/net/Proxy;)Ljava/net/URLConnection;
+HPLandroid/net/Network;->toString()Ljava/lang/String;
+HPLandroid/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
+HPLandroid/net/NetworkAgent;->handleMessage(Landroid/os/Message;)V
+HPLandroid/net/NetworkAgent;->log(Ljava/lang/String;)V
+HPLandroid/net/NetworkAgent;->queueOrSendMessage(IIILjava/lang/Object;)V
+HPLandroid/net/NetworkAgent;->queueOrSendMessage(ILjava/lang/Object;)V
+HPLandroid/net/NetworkAgent;->queueOrSendMessage(Landroid/os/Message;)V
+HPLandroid/net/NetworkAgent;->sendLinkProperties(Landroid/net/LinkProperties;)V
+HPLandroid/net/NetworkAgent;->sendNetworkCapabilities(Landroid/net/NetworkCapabilities;)V
+HPLandroid/net/NetworkAgent;->sendNetworkInfo(Landroid/net/NetworkInfo;)V
+HPLandroid/net/NetworkAgent;->sendNetworkScore(I)V
+HPLandroid/net/NetworkAgent;->unwanted()V
+HPLandroid/net/NetworkCapabilities$1;->newArray(I)[Landroid/net/NetworkCapabilities;
+HPLandroid/net/NetworkCapabilities$1;->newArray(I)[Ljava/lang/Object;
+HPLandroid/net/NetworkCapabilities;->describeFirstNonRequestableCapability()Ljava/lang/String;
+HPLandroid/net/NetworkCapabilities;->equalRequestableCapabilities(Landroid/net/NetworkCapabilities;)Z
+HPLandroid/net/NetworkCapabilities;->equalsNetCapabilitiesRequestable(Landroid/net/NetworkCapabilities;)Z
+HPLandroid/net/NetworkCapabilities;->getLinkDownstreamBandwidthKbps()I
+HPLandroid/net/NetworkCapabilities;->getLinkUpstreamBandwidthKbps()I
+HPLandroid/net/NetworkCapabilities;->satisfiedByImmutableNetworkCapabilities(Landroid/net/NetworkCapabilities;)Z
+HPLandroid/net/NetworkCapabilities;->setSignalStrength(I)V
+HPLandroid/net/NetworkFactory;->needNetworkFor(Landroid/net/NetworkRequest;I)V
+HPLandroid/net/NetworkIdentity;-><init>(IILjava/lang/String;Ljava/lang/String;ZZ)V
+HPLandroid/net/NetworkIdentity;->buildNetworkIdentity(Landroid/content/Context;Landroid/net/NetworkState;)Landroid/net/NetworkIdentity;
+HPLandroid/net/NetworkIdentity;->equals(Ljava/lang/Object;)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
+HPLandroid/net/NetworkIdentity;->hashCode()I
+HPLandroid/net/NetworkInfo;-><init>(Landroid/net/NetworkInfo;)V
+HPLandroid/net/NetworkInfo;->describeContents()I
+HPLandroid/net/NetworkInfo;->getReason()Ljava/lang/String;
+HPLandroid/net/NetworkInfo;->isAvailable()Z
+HPLandroid/net/NetworkInfo;->isFailover()Z
+HPLandroid/net/NetworkInfo;->setExtraInfo(Ljava/lang/String;)V
+HPLandroid/net/NetworkInfo;->setIsAvailable(Z)V
+HPLandroid/net/NetworkInfo;->setType(I)V
+HPLandroid/net/NetworkInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/NetworkKey$1;-><init>()V
+HPLandroid/net/NetworkKey$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/NetworkKey;
+HPLandroid/net/NetworkKey$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/net/NetworkKey$1;->newArray(I)[Landroid/net/NetworkKey;
+HPLandroid/net/NetworkKey$1;->newArray(I)[Ljava/lang/Object;
+HPLandroid/net/NetworkKey;-><init>(Landroid/net/WifiKey;)V
+HPLandroid/net/NetworkKey;-><init>(Landroid/os/Parcel;)V
+HPLandroid/net/NetworkKey;-><init>(Landroid/os/Parcel;Landroid/net/NetworkKey;)V
+HPLandroid/net/NetworkKey;->createFromScanResult(Landroid/net/wifi/ScanResult;)Landroid/net/NetworkKey;
+HPLandroid/net/NetworkKey;->equals(Ljava/lang/Object;)Z
+HPLandroid/net/NetworkKey;->hashCode()I
+HPLandroid/net/NetworkKey;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/NetworkMisc$1;-><init>()V
+HPLandroid/net/NetworkMisc;-><init>()V
+HPLandroid/net/NetworkMisc;-><init>(Landroid/net/NetworkMisc;)V
+HPLandroid/net/NetworkPolicyManager;->isProcStateAllowedWhileIdleOrPowerSaveMode(I)Z
+HPLandroid/net/NetworkPolicyManager;->isProcStateAllowedWhileOnRestrictBackground(I)Z
+HPLandroid/net/NetworkRecommendationProvider$ServiceWrapper$1;-><init>(Landroid/net/NetworkRecommendationProvider$ServiceWrapper;[Landroid/net/NetworkKey;)V
+HPLandroid/net/NetworkRecommendationProvider$ServiceWrapper$1;->run()V
+HPLandroid/net/NetworkRecommendationProvider$ServiceWrapper;->enforceCallingPermission()V
+HPLandroid/net/NetworkRecommendationProvider$ServiceWrapper;->execute(Ljava/lang/Runnable;)V
+HPLandroid/net/NetworkRecommendationProvider$ServiceWrapper;->requestScores([Landroid/net/NetworkKey;)V
+HPLandroid/net/NetworkRequest;-><init>(Landroid/net/NetworkRequest;)V
+HPLandroid/net/NetworkRequest;->isBackgroundRequest()Z
+HPLandroid/net/NetworkRequest;->isForegroundRequest()Z
+HPLandroid/net/NetworkRequest;->isListen()Z
+HPLandroid/net/NetworkRequest;->isRequest()Z
+HPLandroid/net/NetworkRequest;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/NetworkScoreManager;->getActiveScorerPackage()Ljava/lang/String;
+HPLandroid/net/NetworkScoreManager;->isCallerActiveScorer(I)Z
+HPLandroid/net/NetworkScoreManager;->registerNetworkScoreCache(ILandroid/net/INetworkScoreCache;I)V
+HPLandroid/net/NetworkScoreManager;->requestScores([Landroid/net/NetworkKey;)Z
+HPLandroid/net/NetworkScoreManager;->updateScores([Landroid/net/ScoredNetwork;)Z
+HPLandroid/net/NetworkScorerAppData$1;-><init>()V
+HPLandroid/net/NetworkScorerAppData;-><init>(ILandroid/content/ComponentName;Ljava/lang/String;Landroid/content/ComponentName;Ljava/lang/String;)V
+HPLandroid/net/NetworkScorerAppData;->equals(Ljava/lang/Object;)Z
+HPLandroid/net/NetworkScorerAppData;->getRecommendationServiceComponent()Landroid/content/ComponentName;
+HPLandroid/net/NetworkScorerAppData;->getRecommendationServicePackageName()Ljava/lang/String;
+HPLandroid/net/NetworkState$1;-><init>()V
+HPLandroid/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$Entry;-><init>()V
+HPLandroid/net/NetworkStats$Entry;-><init>(Ljava/lang/String;IIIIIJJJJJ)V
+HPLandroid/net/NetworkStats$Entry;-><init>(Ljava/lang/String;IIIJJJJJ)V
+HPLandroid/net/NetworkStats$Entry;->isEmpty()Z
+HPLandroid/net/NetworkStats$Entry;->isNegative()Z
+HPLandroid/net/NetworkStats$NonMonotonicObserver;->foundNonMonotonic(Landroid/net/NetworkStats;ILandroid/net/NetworkStats;ILjava/lang/Object;)V
+HPLandroid/net/NetworkStats;->addValues(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats;
+HPLandroid/net/NetworkStats;->combineAllValues(Landroid/net/NetworkStats;)V
+HPLandroid/net/NetworkStats;->combineValues(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats;
+HPLandroid/net/NetworkStats;->combineValues(Ljava/lang/String;IIIJJJJJ)Landroid/net/NetworkStats;
+HPLandroid/net/NetworkStats;->findIndex(Ljava/lang/String;IIIII)I
+HPLandroid/net/NetworkStats;->findIndexHinted(Ljava/lang/String;IIIIII)I
+HPLandroid/net/NetworkStats;->getElapsedRealtime()J
+HPLandroid/net/NetworkStats;->getTotal(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
+HPLandroid/net/NetworkStats;->getTotal(Landroid/net/NetworkStats$Entry;Ljava/util/HashSet;IZ)Landroid/net/NetworkStats$Entry;
+HPLandroid/net/NetworkStats;->getValues(ILandroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
+HPLandroid/net/NetworkStats;->setElapsedRealtime(J)V
+HPLandroid/net/NetworkStats;->size()I
+HPLandroid/net/NetworkStats;->subtract(Landroid/net/NetworkStats;Landroid/net/NetworkStats;Landroid/net/NetworkStats$NonMonotonicObserver;Ljava/lang/Object;)Landroid/net/NetworkStats;
+HPLandroid/net/NetworkStats;->subtract(Landroid/net/NetworkStats;Landroid/net/NetworkStats;Landroid/net/NetworkStats$NonMonotonicObserver;Ljava/lang/Object;Landroid/net/NetworkStats;)Landroid/net/NetworkStats;
+HPLandroid/net/NetworkStatsHistory$1;-><init>()V
+HPLandroid/net/NetworkStatsHistory$DataStreamUtils;->readVarLong(Ljava/io/DataInputStream;)J
+HPLandroid/net/NetworkStatsHistory$DataStreamUtils;->readVarLongArray(Ljava/io/DataInputStream;)[J
+HPLandroid/net/NetworkStatsHistory$DataStreamUtils;->writeVarLong(Ljava/io/DataOutputStream;J)V
+HPLandroid/net/NetworkStatsHistory$DataStreamUtils;->writeVarLongArray(Ljava/io/DataOutputStream;[JI)V
+HPLandroid/net/NetworkStatsHistory$Entry;-><init>()V
+HPLandroid/net/NetworkStatsHistory;-><init>(J)V
+HPLandroid/net/NetworkStatsHistory;-><init>(JI)V
+HPLandroid/net/NetworkStatsHistory;-><init>(JII)V
+HPLandroid/net/NetworkStatsHistory;-><init>(Ljava/io/DataInputStream;)V
+HPLandroid/net/NetworkStatsHistory;->addLong([JIJ)V
+HPLandroid/net/NetworkStatsHistory;->ensureBuckets(JJ)V
+HPLandroid/net/NetworkStatsHistory;->getBucketDuration()J
+HPLandroid/net/NetworkStatsHistory;->getEnd()J
+HPLandroid/net/NetworkStatsHistory;->getIndexAfter(J)I
+HPLandroid/net/NetworkStatsHistory;->getLong([JIJ)J
+HPLandroid/net/NetworkStatsHistory;->getStart()J
+HPLandroid/net/NetworkStatsHistory;->getTotalBytes()J
+HPLandroid/net/NetworkStatsHistory;->getValues(JJJLandroid/net/NetworkStatsHistory$Entry;)Landroid/net/NetworkStatsHistory$Entry;
+HPLandroid/net/NetworkStatsHistory;->insertBucket(IJ)V
+HPLandroid/net/NetworkStatsHistory;->recordData(JJLandroid/net/NetworkStats$Entry;)V
+HPLandroid/net/NetworkStatsHistory;->recordEntireHistory(Landroid/net/NetworkStatsHistory;)V
+HPLandroid/net/NetworkStatsHistory;->recordHistory(Landroid/net/NetworkStatsHistory;JJ)V
+HPLandroid/net/NetworkStatsHistory;->setLong([JIJ)V
+HPLandroid/net/NetworkStatsHistory;->size()I
+HPLandroid/net/NetworkStatsHistory;->writeToStream(Ljava/io/DataOutputStream;)V
+HPLandroid/net/NetworkTemplate$1;-><init>()V
+HPLandroid/net/NetworkTemplate;-><init>(ILjava/lang/String;Ljava/lang/String;)V
+HPLandroid/net/NetworkTemplate;-><init>(ILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/net/NetworkTemplate;->buildTemplateMobileWildcard()Landroid/net/NetworkTemplate;
+HPLandroid/net/NetworkTemplate;->buildTemplateWifiWildcard()Landroid/net/NetworkTemplate;
+HPLandroid/net/NetworkTemplate;->isKnownMatchRule(I)Z
+HPLandroid/net/NetworkTemplate;->matches(Landroid/net/NetworkIdentity;)Z
+HPLandroid/net/NetworkTemplate;->matchesMobileWildcard(Landroid/net/NetworkIdentity;)Z
+HPLandroid/net/NetworkTemplate;->matchesWifiWildcard(Landroid/net/NetworkIdentity;)Z
+HPLandroid/net/NetworkUtils;->addressTypeMatches(Ljava/net/InetAddress;Ljava/net/InetAddress;)Z
+HPLandroid/net/NetworkUtils;->makeStrings(Ljava/util/Collection;)[Ljava/lang/String;
+HPLandroid/net/NetworkUtils;->netmaskToPrefixLength(Ljava/net/Inet4Address;)I
+HPLandroid/net/NetworkUtils;->numericToInetAddress(Ljava/lang/String;)Ljava/net/InetAddress;
+HPLandroid/net/NetworkUtils;->parseIpAndMask(Ljava/lang/String;)Landroid/util/Pair;
+HPLandroid/net/NetworkUtils;->protectFromVpn(Ljava/io/FileDescriptor;)Z
+HPLandroid/net/RouteInfo;-><init>(Landroid/net/IpPrefix;Ljava/net/InetAddress;Ljava/lang/String;)V
+HPLandroid/net/RouteInfo;-><init>(Landroid/net/LinkAddress;Ljava/net/InetAddress;Ljava/lang/String;)V
+HPLandroid/net/RouteInfo;->hasGateway()Z
+HPLandroid/net/RouteInfo;->isDefaultRoute()Z
+HPLandroid/net/RouteInfo;->isIPv4Default()Z
+HPLandroid/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;
+HPLandroid/net/RouteInfo;->toString()Ljava/lang/String;
+HPLandroid/net/RouteInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/RssiCurve$1;-><init>()V
+HPLandroid/net/RssiCurve$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/RssiCurve;
+HPLandroid/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
+HPLandroid/net/RssiCurve;-><init>(Landroid/os/Parcel;Landroid/net/RssiCurve;)V
+HPLandroid/net/RssiCurve;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/SSLCertificateSocketFactory;->createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;
+HPLandroid/net/SSLCertificateSocketFactory;->getDelegate()Ljavax/net/ssl/SSLSocketFactory;
+HPLandroid/net/SSLCertificateSocketFactory;->isSslCheckRelaxed()Z
+HPLandroid/net/SSLCertificateSocketFactory;->makeSocketFactory([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;)Ljavax/net/ssl/SSLSocketFactory;
+HPLandroid/net/SSLCertificateSocketFactory;->verifyHostname(Ljava/net/Socket;Ljava/lang/String;)V
+HPLandroid/net/ScoredNetwork$1;-><init>()V
+HPLandroid/net/ScoredNetwork$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/ScoredNetwork;
+HPLandroid/net/ScoredNetwork$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/net/ScoredNetwork$1;->newArray(I)[Landroid/net/ScoredNetwork;
+HPLandroid/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
+HPLandroid/net/ScoredNetwork;-><init>(Landroid/os/Parcel;)V
+HPLandroid/net/ScoredNetwork;-><init>(Landroid/os/Parcel;Landroid/net/ScoredNetwork;)V
+HPLandroid/net/ScoredNetwork;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/StaticIpConfiguration$1;-><init>()V
+HPLandroid/net/StaticIpConfiguration;-><init>()V
+HPLandroid/net/StaticIpConfiguration;-><init>(Landroid/net/StaticIpConfiguration;)V
+HPLandroid/net/StaticIpConfiguration;->getRoutes(Ljava/lang/String;)Ljava/util/List;
+HPLandroid/net/StaticIpConfiguration;->toString()Ljava/lang/String;
+HPLandroid/net/TrafficStats;->clearThreadStatsTag()V
+HPLandroid/net/TrafficStats;->clearThreadStatsUid()V
+HPLandroid/net/TrafficStats;->getRxPackets(Ljava/lang/String;)J
+HPLandroid/net/TrafficStats;->getTxPackets(Ljava/lang/String;)J
+HPLandroid/net/TrafficStats;->incrementOperationCount(II)V
+HPLandroid/net/TrafficStats;->setThreadStatsUid(I)V
+HPLandroid/net/TrafficStats;->tagSocket(Ljava/net/Socket;)V
+HPLandroid/net/TrafficStats;->untagSocket(Ljava/net/Socket;)V
+HPLandroid/net/Uri$1;->newArray(I)[Landroid/net/Uri;
+HPLandroid/net/Uri$1;->newArray(I)[Ljava/lang/Object;
+HPLandroid/net/Uri$Builder;->encodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HPLandroid/net/Uri$Builder;->fragment(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HPLandroid/net/Uri$Builder;->opaquePart(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
+HPLandroid/net/Uri$Builder;->query(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HPLandroid/net/Uri$Builder;->toString()Ljava/lang/String;
+HPLandroid/net/Uri$HierarchicalUri;->getEncodedPath()Ljava/lang/String;
+HPLandroid/net/Uri$HierarchicalUri;->getFragment()Ljava/lang/String;
+HPLandroid/net/Uri$HierarchicalUri;->getQuery()Ljava/lang/String;
+HPLandroid/net/Uri$OpaqueUri;->buildUpon()Landroid/net/Uri$Builder;
+HPLandroid/net/Uri$OpaqueUri;->getAuthority()Ljava/lang/String;
+HPLandroid/net/Uri$OpaqueUri;->getEncodedSchemeSpecificPart()Ljava/lang/String;
+HPLandroid/net/Uri$OpaqueUri;->getSchemeSpecificPart()Ljava/lang/String;
+HPLandroid/net/Uri$OpaqueUri;->toString()Ljava/lang/String;
+HPLandroid/net/Uri$StringUri;->getEncodedPath()Ljava/lang/String;
+HPLandroid/net/Uri$StringUri;->getQuery()Ljava/lang/String;
+HPLandroid/net/Uri$StringUri;->isRelative()Z
+HPLandroid/net/Uri;->fromFile(Ljava/io/File;)Landroid/net/Uri;
+HPLandroid/net/Uri;->isAbsolute()Z
+HPLandroid/net/WifiKey$1;-><init>()V
+HPLandroid/net/WifiKey$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/WifiKey;
+HPLandroid/net/WifiKey$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/net/WifiKey;-><init>(Landroid/os/Parcel;)V
+HPLandroid/net/WifiKey;-><init>(Landroid/os/Parcel;Landroid/net/WifiKey;)V
+HPLandroid/net/WifiKey;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/net/WifiKey;->equals(Ljava/lang/Object;)Z
+HPLandroid/net/WifiKey;->hashCode()I
+HPLandroid/net/WifiKey;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/http/AndroidHttpClient$1;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V
+HPLandroid/net/http/AndroidHttpClient$2;->createHttpContext()Lorg/apache/http/protocol/HttpContext;
+HPLandroid/net/http/AndroidHttpClient$2;->createHttpProcessor()Lorg/apache/http/protocol/BasicHttpProcessor;
+HPLandroid/net/http/AndroidHttpClient$CurlLogger;-><init>(Landroid/net/http/AndroidHttpClient;)V
+HPLandroid/net/http/AndroidHttpClient$CurlLogger;-><init>(Landroid/net/http/AndroidHttpClient;Landroid/net/http/AndroidHttpClient$CurlLogger;)V
+HPLandroid/net/http/AndroidHttpClient$CurlLogger;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V
+HPLandroid/net/http/AndroidHttpClient$LoggingConfiguration;->-wrap0(Landroid/net/http/AndroidHttpClient$LoggingConfiguration;)Z
+HPLandroid/net/http/AndroidHttpClient$LoggingConfiguration;->isLoggable()Z
+HPLandroid/net/http/AndroidHttpClient;->-get0(Landroid/net/http/AndroidHttpClient;)Landroid/net/http/AndroidHttpClient$LoggingConfiguration;
+HPLandroid/net/http/AndroidHttpClient;->-get1()Lorg/apache/http/HttpRequestInterceptor;
+HPLandroid/net/http/AndroidHttpClient;->execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;
+HPLandroid/net/http/AndroidHttpClient;->getCompressedEntity([BLandroid/content/ContentResolver;)Lorg/apache/http/entity/AbstractHttpEntity;
+HPLandroid/net/http/AndroidHttpClient;->getMinGzipSize(Landroid/content/ContentResolver;)J
+HPLandroid/net/http/AndroidHttpClient;->getParams()Lorg/apache/http/params/HttpParams;
+HPLandroid/net/http/AndroidHttpClient;->getUngzippedContent(Lorg/apache/http/HttpEntity;)Ljava/io/InputStream;
+HPLandroid/net/http/AndroidHttpClient;->modifyRequestToAcceptGzipResponse(Lorg/apache/http/HttpRequest;)V
+HPLandroid/net/http/HttpResponseCache;->getCache()Lcom/android/okhttp/Cache;
+HPLandroid/net/metrics/ApfProgramEvent$1;-><init>()V
+HPLandroid/net/metrics/ApfProgramEvent;-><init>()V
+HPLandroid/net/metrics/ApfProgramEvent;->flagsFor(ZZ)I
+HPLandroid/net/metrics/ApfStats$1;-><init>()V
+HPLandroid/net/metrics/ApfStats;-><init>()V
+HPLandroid/net/metrics/ConnectStats;-><init>(IJLcom/android/internal/util/TokenBucket;I)V
+HPLandroid/net/metrics/ConnectStats;->addEvent(IILjava/lang/String;)V
+HPLandroid/net/metrics/ConnectStats;->countConnect(ILjava/lang/String;)V
+HPLandroid/net/metrics/ConnectStats;->countLatency(II)V
+HPLandroid/net/metrics/ConnectStats;->isIPv6(Ljava/lang/String;)Z
+HPLandroid/net/metrics/ConnectStats;->isNonBlocking(I)Z
+HPLandroid/net/metrics/ConnectStats;->isSuccess(I)Z
+HPLandroid/net/metrics/DefaultNetworkEvent$1;-><init>()V
+HPLandroid/net/metrics/DefaultNetworkEvent;-><init>(I[IIZZ)V
+HPLandroid/net/metrics/DhcpClientEvent$1;-><init>()V
+HPLandroid/net/metrics/DhcpClientEvent;-><init>(Ljava/lang/String;I)V
+HPLandroid/net/metrics/DnsEvent;-><init>(IJI)V
+HPLandroid/net/metrics/DnsEvent;->addResult(BBI)V
+HPLandroid/net/metrics/DnsEvent;->resize(I)V
+HPLandroid/net/metrics/IpConnectivityLog;-><init>()V
+HPLandroid/net/metrics/IpConnectivityLog;->checkLoggerService()Z
+HPLandroid/net/metrics/IpConnectivityLog;->log(I[ILandroid/os/Parcelable;)Z
+HPLandroid/net/metrics/IpConnectivityLog;->log(Landroid/net/ConnectivityMetricsEvent;)Z
+HPLandroid/net/metrics/IpConnectivityLog;->log(Landroid/os/Parcelable;)Z
+HPLandroid/net/metrics/IpConnectivityLog;->log(Ljava/lang/String;Landroid/os/Parcelable;)Z
+HPLandroid/net/metrics/IpConnectivityLog;->makeEv(Landroid/os/Parcelable;)Landroid/net/ConnectivityMetricsEvent;
+HPLandroid/net/metrics/IpManagerEvent$1;-><init>()V
+HPLandroid/net/metrics/IpManagerEvent;-><init>(IJ)V
+HPLandroid/net/metrics/NetworkEvent$1;-><init>()V
+HPLandroid/net/metrics/NetworkEvent;-><init>(II)V
+HPLandroid/net/metrics/NetworkEvent;-><init>(IIJ)V
+HPLandroid/net/metrics/RaEvent$1;-><init>()V
+HPLandroid/net/metrics/RaEvent$Builder;-><init>()V
+HPLandroid/net/metrics/RaEvent$Builder;->build()Landroid/net/metrics/RaEvent;
+HPLandroid/net/metrics/RaEvent$Builder;->updateLifetime(JJ)J
+HPLandroid/net/metrics/RaEvent$Builder;->updatePrefixPreferredLifetime(J)Landroid/net/metrics/RaEvent$Builder;
+HPLandroid/net/metrics/RaEvent$Builder;->updatePrefixValidLifetime(J)Landroid/net/metrics/RaEvent$Builder;
+HPLandroid/net/metrics/RaEvent$Builder;->updateRdnssLifetime(J)Landroid/net/metrics/RaEvent$Builder;
+HPLandroid/net/metrics/RaEvent$Builder;->updateRouterLifetime(J)Landroid/net/metrics/RaEvent$Builder;
+HPLandroid/net/metrics/RaEvent;-><init>(JJJJJJ)V
+HPLandroid/net/metrics/ValidationProbeEvent$1;-><init>()V
+HPLandroid/net/metrics/ValidationProbeEvent;-><init>()V
+HPLandroid/net/metrics/ValidationProbeEvent;->getProbeName(I)Ljava/lang/String;
+HPLandroid/net/metrics/ValidationProbeEvent;->makeProbeType(IZ)I
+HPLandroid/net/nsd/INsdManager$Stub;-><init>()V
+HPLandroid/net/nsd/INsdManager;->getMessenger()Landroid/os/Messenger;
+HPLandroid/net/nsd/INsdManager;->setEnabled(Z)V
+HPLandroid/net/sip/ISipService$Stub;-><init>()V
+HPLandroid/net/sip/ISipService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/sip/ISipService;
+HPLandroid/net/sip/ISipService;->close(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/net/sip/ISipService;->createSession(Landroid/net/sip/SipProfile;Landroid/net/sip/ISipSessionListener;Ljava/lang/String;)Landroid/net/sip/ISipSession;
+HPLandroid/net/sip/ISipService;->getListOfProfiles(Ljava/lang/String;)[Landroid/net/sip/SipProfile;
+HPLandroid/net/sip/ISipService;->getPendingSession(Ljava/lang/String;Ljava/lang/String;)Landroid/net/sip/ISipSession;
+HPLandroid/net/sip/ISipService;->isOpened(Ljava/lang/String;Ljava/lang/String;)Z
+HPLandroid/net/sip/ISipService;->isRegistered(Ljava/lang/String;Ljava/lang/String;)Z
+HPLandroid/net/sip/ISipService;->open(Landroid/net/sip/SipProfile;Ljava/lang/String;)V
+HPLandroid/net/sip/ISipService;->open3(Landroid/net/sip/SipProfile;Landroid/app/PendingIntent;Landroid/net/sip/ISipSessionListener;Ljava/lang/String;)V
+HPLandroid/net/sip/ISipService;->setRegistrationListener(Ljava/lang/String;Landroid/net/sip/ISipSessionListener;Ljava/lang/String;)V
+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;->isSipWifiOnly(Landroid/content/Context;)Z
+HPLandroid/net/sip/SipManager;->newInstance(Landroid/content/Context;)Landroid/net/sip/SipManager;
+HPLandroid/net/wifi/IRttManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/net/wifi/IRttManager$Stub$Proxy;->getMessenger(Landroid/os/IBinder;[I)Landroid/os/Messenger;
+HPLandroid/net/wifi/IRttManager$Stub;-><init>()V
+HPLandroid/net/wifi/IRttManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IRttManager;
+HPLandroid/net/wifi/IRttManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/net/wifi/IRttManager;->getMessenger(Landroid/os/IBinder;[I)Landroid/os/Messenger;
+HPLandroid/net/wifi/IRttManager;->getRttCapabilities()Landroid/net/wifi/RttManager$RttCapabilities;
+HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->acquireMulticastLock(Landroid/os/IBinder;Ljava/lang/String;)V
+HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getDhcpInfo()Landroid/net/DhcpInfo;
+HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getSupportedFeatures()I
+HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->isScanAlwaysAvailable()Z
+HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->releaseMulticastLock()V
+HPLandroid/net/wifi/IWifiManager$Stub$Proxy;->startScan(Landroid/net/wifi/ScanSettings;Landroid/os/WorkSource;Ljava/lang/String;)V
+HPLandroid/net/wifi/IWifiManager$Stub;-><init>()V
+HPLandroid/net/wifi/IWifiManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/net/wifi/IWifiScanner$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/net/wifi/IWifiScanner$Stub$Proxy;->getMessenger()Landroid/os/Messenger;
+HPLandroid/net/wifi/IWifiScanner$Stub;-><init>()V
+HPLandroid/net/wifi/IWifiScanner$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiScanner;
+HPLandroid/net/wifi/IWifiScanner$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/net/wifi/IWifiScanner;->getAvailableChannels(I)Landroid/os/Bundle;
+HPLandroid/net/wifi/IWifiScanner;->getMessenger()Landroid/os/Messenger;
+HPLandroid/net/wifi/ParcelUtil;->writeCertificates(Landroid/os/Parcel;[Ljava/security/cert/X509Certificate;)V
+HPLandroid/net/wifi/ParcelUtil;->writePrivateKey(Landroid/os/Parcel;Ljava/security/PrivateKey;)V
+HPLandroid/net/wifi/RttManager$RttClient$1;-><init>()V
+HPLandroid/net/wifi/RttManager$RttClient$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/RttManager$RttClient;
+HPLandroid/net/wifi/RttManager$RttClient$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/net/wifi/RttManager$RttClient;-><init>(Landroid/os/Parcel;)V
+HPLandroid/net/wifi/RttManager$RttClient;-><init>(Ljava/lang/String;)V
+HPLandroid/net/wifi/RttManager$RttClient;->getPackageName()Ljava/lang/String;
+HPLandroid/net/wifi/RttManager$RttClient;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/wifi/RttManager$RttListener;->onAborted()V
+HPLandroid/net/wifi/RttManager$RttListener;->onFailure(ILjava/lang/String;)V
+HPLandroid/net/wifi/RttManager$RttListener;->onSuccess([Landroid/net/wifi/RttManager$RttResult;)V
+HPLandroid/net/wifi/RttManager$ServiceHandler;-><init>(Landroid/net/wifi/RttManager;Landroid/os/Looper;)V
+HPLandroid/net/wifi/RttManager$ServiceHandler;->handleMessage(Landroid/os/Message;)V
+HPLandroid/net/wifi/RttManager;-><init>(Landroid/content/Context;Landroid/net/wifi/IRttManager;Landroid/os/Looper;)V
+HPLandroid/net/wifi/ScanResult;-><init>(Landroid/net/wifi/WifiSsid;Ljava/lang/String;JI[BLjava/lang/String;IIJ)V
+HPLandroid/net/wifi/ScanResult;->averageRssi(IJI)V
+HPLandroid/net/wifi/ScanResult;->is24GHz()Z
+HPLandroid/net/wifi/ScanResult;->is24GHz(I)Z
+HPLandroid/net/wifi/ScanResult;->is5GHz()Z
+HPLandroid/net/wifi/ScanResult;->is5GHz(I)Z
+HPLandroid/net/wifi/ScanResult;->is80211mcResponder()Z
+HPLandroid/net/wifi/ScanResult;->setFlag(J)V
+HPLandroid/net/wifi/ScanResult;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/wifi/SupplicantState;->-getandroid-net-wifi-SupplicantStateSwitchesValues()[I
+HPLandroid/net/wifi/SupplicantState;->describeContents()I
+HPLandroid/net/wifi/SupplicantState;->isConnecting(Landroid/net/wifi/SupplicantState;)Z
+HPLandroid/net/wifi/SupplicantState;->isDriverActive(Landroid/net/wifi/SupplicantState;)Z
+HPLandroid/net/wifi/SupplicantState;->isHandshakeState(Landroid/net/wifi/SupplicantState;)Z
+HPLandroid/net/wifi/SupplicantState;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/wifi/WifiActivityEnergyInfo;->getControllerEnergyUsed()J
+HPLandroid/net/wifi/WifiActivityEnergyInfo;->getControllerIdleTimeMillis()J
+HPLandroid/net/wifi/WifiActivityEnergyInfo;->getControllerRxTimeMillis()J
+HPLandroid/net/wifi/WifiActivityEnergyInfo;->getControllerTxTimeMillis()J
+HPLandroid/net/wifi/WifiActivityEnergyInfo;->getStackState()I
+HPLandroid/net/wifi/WifiActivityEnergyInfo;->getTimeStamp()J
+HPLandroid/net/wifi/WifiActivityEnergyInfo;->isValid()Z
+HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->clearDisableReasonCounter()V
+HPLandroid/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;->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;->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
+HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->isDisabledByReason(I)Z
+HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->isNetworkEnabled()Z
+HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->isNetworkTemporaryDisabled()Z
+HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->isNotRecommended()Z
+HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setCandidate(Landroid/net/wifi/ScanResult;)V
+HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setCandidateScore(I)V
+HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setSeenInLastQualifiedNetworkSelection(Z)V
+HPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->writeToParcel(Landroid/os/Parcel;)V
+HPLandroid/net/wifi/WifiConfiguration$RecentFailure;->clear()V
+HPLandroid/net/wifi/WifiConfiguration$RecentFailure;->getAssociationStatus()I
+HPLandroid/net/wifi/WifiConfiguration$Visibility;-><init>()V
+HPLandroid/net/wifi/WifiConfiguration;-><init>(Landroid/net/wifi/WifiConfiguration;)V
+HPLandroid/net/wifi/WifiConfiguration;->configKey()Ljava/lang/String;
+HPLandroid/net/wifi/WifiConfiguration;->configKey(Z)Ljava/lang/String;
+HPLandroid/net/wifi/WifiConfiguration;->describeContents()I
+HPLandroid/net/wifi/WifiConfiguration;->getHttpProxy()Landroid/net/ProxyInfo;
+HPLandroid/net/wifi/WifiConfiguration;->getIpAssignment()Landroid/net/IpConfiguration$IpAssignment;
+HPLandroid/net/wifi/WifiConfiguration;->getIpConfiguration()Landroid/net/IpConfiguration;
+HPLandroid/net/wifi/WifiConfiguration;->getNetworkSelectionStatus()Landroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;
+HPLandroid/net/wifi/WifiConfiguration;->isEphemeral()Z
+HPLandroid/net/wifi/WifiConfiguration;->isMetered(Landroid/net/wifi/WifiConfiguration;Landroid/net/wifi/WifiInfo;)Z
+HPLandroid/net/wifi/WifiConfiguration;->isPasspoint()Z
+HPLandroid/net/wifi/WifiConfiguration;->setIpConfiguration(Landroid/net/IpConfiguration;)V
+HPLandroid/net/wifi/WifiConfiguration;->setNetworkSelectionStatus(Landroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;)V
+HPLandroid/net/wifi/WifiConfiguration;->setVisibility(Landroid/net/wifi/WifiConfiguration$Visibility;)V
+HPLandroid/net/wifi/WifiConfiguration;->toString()Ljava/lang/String;
+HPLandroid/net/wifi/WifiConfiguration;->userApprovedAsString(I)Ljava/lang/String;
+HPLandroid/net/wifi/WifiConfiguration;->writeBitSet(Landroid/os/Parcel;Ljava/util/BitSet;)V
+HPLandroid/net/wifi/WifiConfiguration;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/wifi/WifiConnectionStatistics$1;-><init>()V
+HPLandroid/net/wifi/WifiConnectionStatistics;-><init>()V
+HPLandroid/net/wifi/WifiEnterpriseConfig;-><init>(Landroid/net/wifi/WifiEnterpriseConfig;)V
+HPLandroid/net/wifi/WifiEnterpriseConfig;->copyFrom(Landroid/net/wifi/WifiEnterpriseConfig;ZLjava/lang/String;)V
+HPLandroid/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;
+HPLandroid/net/wifi/WifiEnterpriseConfig;->getPassword()Ljava/lang/String;
+HPLandroid/net/wifi/WifiEnterpriseConfig;->toString()Ljava/lang/String;
+HPLandroid/net/wifi/WifiEnterpriseConfig;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/wifi/WifiInfo;-><init>(Landroid/net/wifi/WifiInfo;)V
+HPLandroid/net/wifi/WifiInfo;->describeContents()I
+HPLandroid/net/wifi/WifiInfo;->getDetailedStateOf(Landroid/net/wifi/SupplicantState;)Landroid/net/NetworkInfo$DetailedState;
+HPLandroid/net/wifi/WifiInfo;->getFrequency()I
+HPLandroid/net/wifi/WifiInfo;->getHiddenSSID()Z
+HPLandroid/net/wifi/WifiInfo;->getLinkSpeed()I
+HPLandroid/net/wifi/WifiInfo;->getMacAddress()Ljava/lang/String;
+HPLandroid/net/wifi/WifiInfo;->getMeteredHint()Z
+HPLandroid/net/wifi/WifiInfo;->getNetworkId()I
+HPLandroid/net/wifi/WifiInfo;->getRssi()I
+HPLandroid/net/wifi/WifiInfo;->getRxSuccessRatePps()D
+HPLandroid/net/wifi/WifiInfo;->getSupplicantState()Landroid/net/wifi/SupplicantState;
+HPLandroid/net/wifi/WifiInfo;->getTxSuccessRatePps()D
+HPLandroid/net/wifi/WifiInfo;->is24GHz()Z
+HPLandroid/net/wifi/WifiInfo;->is5GHz()Z
+HPLandroid/net/wifi/WifiInfo;->isEphemeral()Z
+HPLandroid/net/wifi/WifiInfo;->removeDoubleQuotes(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/net/wifi/WifiInfo;->reset()V
+HPLandroid/net/wifi/WifiInfo;->setBSSID(Ljava/lang/String;)V
+HPLandroid/net/wifi/WifiInfo;->setEphemeral(Z)V
+HPLandroid/net/wifi/WifiInfo;->setMacAddress(Ljava/lang/String;)V
+HPLandroid/net/wifi/WifiInfo;->setMeteredHint(Z)V
+HPLandroid/net/wifi/WifiInfo;->setSSID(Landroid/net/wifi/WifiSsid;)V
+HPLandroid/net/wifi/WifiInfo;->setSupplicantState(Landroid/net/wifi/SupplicantState;)V
+HPLandroid/net/wifi/WifiInfo;->toString()Ljava/lang/String;
+HPLandroid/net/wifi/WifiInfo;->updatePacketRates(JJ)V
+HPLandroid/net/wifi/WifiInfo;->updatePacketRates(Landroid/net/wifi/WifiLinkLayerStats;J)V
+HPLandroid/net/wifi/WifiInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/wifi/WifiLinkLayerStats$1;-><init>()V
+HPLandroid/net/wifi/WifiLinkLayerStats;-><init>()V
+HPLandroid/net/wifi/WifiManager$MulticastLock;-><init>(Landroid/net/wifi/WifiManager;Ljava/lang/String;)V
+HPLandroid/net/wifi/WifiManager$MulticastLock;-><init>(Landroid/net/wifi/WifiManager;Ljava/lang/String;Landroid/net/wifi/WifiManager$MulticastLock;)V
+HPLandroid/net/wifi/WifiManager$MulticastLock;->acquire()V
+HPLandroid/net/wifi/WifiManager$MulticastLock;->finalize()V
+HPLandroid/net/wifi/WifiManager$MulticastLock;->isHeld()Z
+HPLandroid/net/wifi/WifiManager$MulticastLock;->release()V
+HPLandroid/net/wifi/WifiManager$MulticastLock;->setReferenceCounted(Z)V
+HPLandroid/net/wifi/WifiManager$WifiLock;->isHeld()Z
+HPLandroid/net/wifi/WifiManager$WifiLock;->setReferenceCounted(Z)V
+HPLandroid/net/wifi/WifiManager$WifiLock;->setWorkSource(Landroid/os/WorkSource;)V
+HPLandroid/net/wifi/WifiManager;->calculateSignalLevel(II)I
+HPLandroid/net/wifi/WifiManager;->createMulticastLock(Ljava/lang/String;)Landroid/net/wifi/WifiManager$MulticastLock;
+HPLandroid/net/wifi/WifiManager;->createWifiLock(Ljava/lang/String;)Landroid/net/wifi/WifiManager$WifiLock;
+HPLandroid/net/wifi/WifiManager;->finalize()V
+HPLandroid/net/wifi/WifiManager;->getDhcpInfo()Landroid/net/DhcpInfo;
+HPLandroid/net/wifi/WifiManager;->getSupportedFeatures()I
+HPLandroid/net/wifi/WifiManager;->isDeviceToApRttSupported()Z
+HPLandroid/net/wifi/WifiManager;->isFeatureSupported(I)Z
+HPLandroid/net/wifi/WifiManager;->isScanAlwaysAvailable()Z
+HPLandroid/net/wifi/WifiManager;->startScan()Z
+HPLandroid/net/wifi/WifiManager;->startScan(Landroid/os/WorkSource;)Z
+HPLandroid/net/wifi/WifiNetworkScoreCache;-><init>(Landroid/content/Context;)V
+HPLandroid/net/wifi/WifiNetworkScoreCache;->buildNetworkKey(Landroid/net/NetworkKey;)Ljava/lang/String;
+HPLandroid/net/wifi/WifiNetworkScoreCache;->buildNetworkKey(Landroid/net/ScoredNetwork;)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
+HPLandroid/net/wifi/WifiScanner$ChannelSpec;-><init>(I)V
+HPLandroid/net/wifi/WifiScanner$ParcelableScanData$1;-><init>()V
+HPLandroid/net/wifi/WifiScanner$ParcelableScanData$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/WifiScanner$ParcelableScanData;
+HPLandroid/net/wifi/WifiScanner$ParcelableScanData$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/net/wifi/WifiScanner$ParcelableScanData;-><init>([Landroid/net/wifi/WifiScanner$ScanData;)V
+HPLandroid/net/wifi/WifiScanner$ParcelableScanData;->getResults()[Landroid/net/wifi/WifiScanner$ScanData;
+HPLandroid/net/wifi/WifiScanner$ParcelableScanData;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/wifi/WifiScanner$ParcelableScanResults$1;-><init>()V
+HPLandroid/net/wifi/WifiScanner$ParcelableScanResults;-><init>([Landroid/net/wifi/ScanResult;)V
+HPLandroid/net/wifi/WifiScanner$ParcelableScanResults;->getResults()[Landroid/net/wifi/ScanResult;
+HPLandroid/net/wifi/WifiScanner$PnoScanListener;->onPnoNetworkFound([Landroid/net/wifi/ScanResult;)V
+HPLandroid/net/wifi/WifiScanner$ScanData$1;-><init>()V
+HPLandroid/net/wifi/WifiScanner$ScanData$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/WifiScanner$ScanData;
+HPLandroid/net/wifi/WifiScanner$ScanData$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/net/wifi/WifiScanner$ScanData;-><init>(IIIZ[Landroid/net/wifi/ScanResult;)V
+HPLandroid/net/wifi/WifiScanner$ScanData;-><init>(II[Landroid/net/wifi/ScanResult;)V
+HPLandroid/net/wifi/WifiScanner$ScanData;->getBucketsScanned()I
+HPLandroid/net/wifi/WifiScanner$ScanData;->getFlags()I
+HPLandroid/net/wifi/WifiScanner$ScanData;->getId()I
+HPLandroid/net/wifi/WifiScanner$ScanData;->getResults()[Landroid/net/wifi/ScanResult;
+HPLandroid/net/wifi/WifiScanner$ScanData;->isAllChannelsScanned()Z
+HPLandroid/net/wifi/WifiScanner$ScanData;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/wifi/WifiScanner$ScanSettings$1;-><init>()V
+HPLandroid/net/wifi/WifiScanner$ScanSettings$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/wifi/WifiScanner$ScanSettings;
+HPLandroid/net/wifi/WifiScanner$ScanSettings$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/net/wifi/WifiScanner$ScanSettings;-><init>()V
+HPLandroid/net/wifi/WifiScanner$ScanSettings;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/wifi/WifiScanner$ServiceHandler;-><init>(Landroid/net/wifi/WifiScanner;Landroid/os/Looper;)V
+HPLandroid/net/wifi/WifiScanner$ServiceHandler;->handleMessage(Landroid/os/Message;)V
+HPLandroid/net/wifi/WifiScanner;->-wrap0(Landroid/net/wifi/WifiScanner;I)Ljava/lang/Object;
+HPLandroid/net/wifi/WifiScanner;->-wrap1(Landroid/net/wifi/WifiScanner;I)Ljava/lang/Object;
+HPLandroid/net/wifi/WifiScanner;-><init>(Landroid/content/Context;Landroid/net/wifi/IWifiScanner;Landroid/os/Looper;)V
+HPLandroid/net/wifi/WifiScanner;->addListener(Landroid/net/wifi/WifiScanner$ActionListener;)I
+HPLandroid/net/wifi/WifiScanner;->getListener(I)Ljava/lang/Object;
+HPLandroid/net/wifi/WifiScanner;->getListenerKey(Ljava/lang/Object;)I
+HPLandroid/net/wifi/WifiScanner;->getSingleScanResults()Ljava/util/List;
+HPLandroid/net/wifi/WifiScanner;->putListener(Ljava/lang/Object;)I
+HPLandroid/net/wifi/WifiScanner;->registerScanListener(Landroid/net/wifi/WifiScanner$ScanListener;)V
+HPLandroid/net/wifi/WifiScanner;->removeListener(I)Ljava/lang/Object;
+HPLandroid/net/wifi/WifiScanner;->startScan(Landroid/net/wifi/WifiScanner$ScanSettings;Landroid/net/wifi/WifiScanner$ScanListener;Landroid/os/WorkSource;)V
+HPLandroid/net/wifi/WifiScanner;->validateChannel()V
+HPLandroid/net/wifi/WifiSsid;->createFromByteArray([B)Landroid/net/wifi/WifiSsid;
+HPLandroid/net/wifi/WifiSsid;->createFromHex(Ljava/lang/String;)Landroid/net/wifi/WifiSsid;
+HPLandroid/net/wifi/WifiSsid;->isHidden()Z
+HPLandroid/net/wifi/WifiSsid;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/net/wifi/WifiWakeReasonAndCounts$1;-><init>()V
+HPLandroid/net/wifi/WifiWakeReasonAndCounts;-><init>()V
+HPLandroid/net/wifi/WifiWakeReasonAndCounts;->toString()Ljava/lang/String;
+HPLandroid/net/wifi/WpsInfo$1;-><init>()V
+HPLandroid/net/wifi/WpsInfo;-><init>()V
+HPLandroid/net/wifi/p2p/IWifiP2pManager$Stub;-><init>()V
+HPLandroid/net/wifi/p2p/WifiP2pConfig$1;-><init>()V
+HPLandroid/net/wifi/p2p/WifiP2pConfig;-><init>()V
+HPLandroid/net/wifi/p2p/WifiP2pConfig;->invalidate()V
+HPLandroid/net/wifi/p2p/WifiP2pDevice$1;-><init>()V
+HPLandroid/net/wifi/p2p/WifiP2pDevice;-><init>()V
+HPLandroid/net/wifi/p2p/WifiP2pDevice;-><init>(Landroid/net/wifi/p2p/WifiP2pDevice;)V
+HPLandroid/net/wifi/p2p/WifiP2pDevice;->describeContents()I
+HPLandroid/net/wifi/p2p/WifiP2pDeviceList$1;-><init>()V
+HPLandroid/net/wifi/p2p/WifiP2pDeviceList;-><init>()V
+HPLandroid/net/wifi/p2p/WifiP2pGroup$1;-><init>()V
+HPLandroid/net/wifi/p2p/WifiP2pGroup;-><init>(Landroid/net/wifi/p2p/WifiP2pGroup;)V
+HPLandroid/net/wifi/p2p/WifiP2pGroup;->describeContents()I
+HPLandroid/net/wifi/p2p/WifiP2pGroupList$1;-><init>()V
+HPLandroid/net/wifi/p2p/WifiP2pGroupList$2;-><init>(Landroid/net/wifi/p2p/WifiP2pGroupList;I)V
+HPLandroid/net/wifi/p2p/WifiP2pGroupList$GroupDeleteListener;->onDeleteGroup(I)V
+HPLandroid/net/wifi/p2p/WifiP2pGroupList;-><init>(Landroid/net/wifi/p2p/WifiP2pGroupList;Landroid/net/wifi/p2p/WifiP2pGroupList$GroupDeleteListener;)V
+HPLandroid/net/wifi/p2p/WifiP2pGroupList;->clear()Z
+HPLandroid/net/wifi/p2p/WifiP2pGroupList;->getGroupList()Ljava/util/Collection;
+HPLandroid/net/wifi/p2p/WifiP2pInfo$1;-><init>()V
+HPLandroid/net/wifi/p2p/WifiP2pInfo;-><init>()V
+HPLandroid/net/wifi/p2p/WifiP2pInfo;-><init>(Landroid/net/wifi/p2p/WifiP2pInfo;)V
+HPLandroid/net/wifi/p2p/WifiP2pInfo;->describeContents()I
+HPLandroid/net/wifi/p2p/WifiP2pManager$PeerListListener;->onPeersAvailable(Landroid/net/wifi/p2p/WifiP2pDeviceList;)V
+HPLandroid/net/wifi/p2p/WifiP2pManager$PersistentGroupInfoListener;->onPersistentGroupInfoAvailable(Landroid/net/wifi/p2p/WifiP2pGroupList;)V
+HPLandroid/net/wifi/p2p/WifiP2pWfdInfo$1;-><init>()V
+HPLandroid/net/wifi/p2p/WifiP2pWfdInfo;-><init>(Landroid/net/wifi/p2p/WifiP2pWfdInfo;)V
+HPLandroid/nfc/IAppCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/nfc/IAppCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/nfc/IAppCallback;
+HPLandroid/nfc/INfcAdapter$Stub$Proxy;->setReaderMode(Landroid/os/IBinder;Landroid/nfc/IAppCallback;ILandroid/os/Bundle;)V
+HPLandroid/nfc/INfcAdapter$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/nfc/INfcCardEmulation$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/nfc/INfcFCardEmulation$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/nfc/INfcTag$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/nfc/NfcActivityManager$NfcActivityState;->destroy()V
+HPLandroid/nfc/NfcActivityManager$NfcApplicationState;->unregister()V
+HPLandroid/nfc/NfcActivityManager;->destroyActivityState(Landroid/app/Activity;)V
+HPLandroid/nfc/NfcActivityManager;->onActivityDestroyed(Landroid/app/Activity;)V
+HPLandroid/nfc/NfcActivityManager;->onActivityPaused(Landroid/app/Activity;)V
+HPLandroid/nfc/NfcActivityManager;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V
+HPLandroid/nfc/NfcActivityManager;->onActivityStopped(Landroid/app/Activity;)V
+HPLandroid/nfc/NfcActivityManager;->setNdefPushContentUri(Landroid/app/Activity;[Landroid/net/Uri;)V
+HPLandroid/nfc/NfcActivityManager;->setNdefPushContentUriCallback(Landroid/app/Activity;Landroid/nfc/NfcAdapter$CreateBeamUrisCallback;)V
+HPLandroid/nfc/NfcActivityManager;->unregisterApplication(Landroid/app/Application;)V
+HPLandroid/nfc/NfcAdapter$CreateBeamUrisCallback;->createBeamUris(Landroid/nfc/NfcEvent;)[Landroid/net/Uri;
+HPLandroid/nfc/NfcAdapter;->setBeamPushUris([Landroid/net/Uri;Landroid/app/Activity;)V
+HPLandroid/nfc/NfcAdapter;->setBeamPushUrisCallback(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback;Landroid/app/Activity;)V
+HPLandroid/nfc/cardemulation/HostApduService$MsgHandler;-><init>(Landroid/nfc/cardemulation/HostApduService;)V
+HPLandroid/nfc/cardemulation/HostApduService;-><init>()V
+HPLandroid/nfc/cardemulation/HostApduService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HPLandroid/nfc/cardemulation/HostApduService;->onDeactivated(I)V
+HPLandroid/nfc/cardemulation/HostApduService;->processCommandApdu([BLandroid/os/Bundle;)[B
+HPLandroid/opengl/EGLConfig;-><init>(J)V
+HPLandroid/opengl/EGLContext;-><init>(J)V
+HPLandroid/opengl/EGLObjectHandle;->getNativeHandle()J
+HPLandroid/opengl/EGLSurface;-><init>(J)V
+HPLandroid/os/AsyncTask;->publishProgress([Ljava/lang/Object;)V
+HPLandroid/os/BaseBundle;->getBooleanArray(Ljava/lang/String;)[Z
+HPLandroid/os/BaseBundle;->getCharSequenceArray(Ljava/lang/String;)[Ljava/lang/CharSequence;
+HPLandroid/os/BaseBundle;->getDouble(Ljava/lang/String;D)D
+HPLandroid/os/BaseBundle;->getFloat(Ljava/lang/String;F)F
+HPLandroid/os/BaseBundle;->getFloatArray(Ljava/lang/String;)[F
+HPLandroid/os/BaseBundle;->getIntegerArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
+HPLandroid/os/BaseBundle;->getLongArray(Ljava/lang/String;)[J
+HPLandroid/os/BaseBundle;->getPairValue()Ljava/lang/String;
+HPLandroid/os/BaseBundle;->kindofEquals(Landroid/os/BaseBundle;)Z
+HPLandroid/os/BaseBundle;->maybeIsEmpty()Z
+HPLandroid/os/BaseBundle;->putAll(Landroid/os/PersistableBundle;)V
+HPLandroid/os/BaseBundle;->putBooleanArray(Ljava/lang/String;[Z)V
+HPLandroid/os/BaseBundle;->putDouble(Ljava/lang/String;D)V
+HPLandroid/os/BaseBundle;->putFloat(Ljava/lang/String;F)V
+HPLandroid/os/BaseBundle;->putIntegerArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
+HPLandroid/os/BaseBundle;->putLongArray(Ljava/lang/String;[J)V
+HPLandroid/os/BatteryManagerInternal;-><init>()V
+HPLandroid/os/BatteryManagerInternal;->getBatteryLevel()I
+HPLandroid/os/BatteryManagerInternal;->getBatteryLevelLow()Z
+HPLandroid/os/BatteryManagerInternal;->getInvalidCharger()I
+HPLandroid/os/BatteryManagerInternal;->getPlugType()I
+HPLandroid/os/BatteryManagerInternal;->isPowered(I)Z
+HPLandroid/os/BatteryProperties$1;-><init>()V
+HPLandroid/os/BatteryProperties$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/BatteryProperties;
+HPLandroid/os/BatteryProperties$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/os/BatteryProperties;-><init>()V
+HPLandroid/os/BatteryProperties;-><init>(Landroid/os/Parcel;)V
+HPLandroid/os/BatteryProperties;-><init>(Landroid/os/Parcel;Landroid/os/BatteryProperties;)V
+HPLandroid/os/BatteryProperties;->set(Landroid/os/BatteryProperties;)V
+HPLandroid/os/BatteryStats$1;-><init>(Landroid/os/BatteryStats;)V
+HPLandroid/os/BatteryStats$HistoryEventTracker;->getStateForEvent(I)Ljava/util/HashMap;
+HPLandroid/os/BatteryStats$HistoryEventTracker;->updateState(ILjava/lang/String;II)Z
+HPLandroid/os/BatteryStats$HistoryTag;->equals(Ljava/lang/Object;)Z
+HPLandroid/os/BatteryStats$HistoryTag;->readFromParcel(Landroid/os/Parcel;)V
+HPLandroid/os/BatteryStats$HistoryTag;->setTo(Landroid/os/BatteryStats$HistoryTag;)V
+HPLandroid/os/BatteryStats$HistoryTag;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/os/BatteryStats$LevelStepTracker;->clearTime()V
+HPLandroid/os/BatteryStats$LevelStepTracker;->computeTimeEstimate(JJ[I)J
+HPLandroid/os/BatteryStats$Timer;->getCurrentDurationMsLocked(J)J
+HPLandroid/os/BatteryStats$Timer;->getMaxDurationMsLocked(J)J
+HPLandroid/os/BatteryStats$Timer;->getTotalDurationMsLocked(J)J
+HPLandroid/os/BatteryStats$Uid$Pid;-><init>(Landroid/os/BatteryStats$Uid;)V
+HPLandroid/os/BatteryStats$Uid$Proc$ExcessivePower;-><init>()V
+HPLandroid/os/BatteryStats;->-getcom-android-internal-os-BatterySipper$DrainTypeSwitchesValues()[I
+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;->dumpDailyLevelStepSummary(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Landroid/os/BatteryStats$LevelStepTracker;Ljava/lang/StringBuilder;[I)V
+HPLandroid/os/BatteryStats;->dumpDurationSteps(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Landroid/os/BatteryStats$LevelStepTracker;Z)Z
+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;->dumpTimer(Ljava/io/PrintWriter;ILjava/lang/String;Ljava/lang/String;Landroid/os/BatteryStats$Timer;JI)V
+HPLandroid/os/BatteryStats;->formatBytesLocked(J)Ljava/lang/String;
+HPLandroid/os/BatteryStats;->formatRatioLocked(JJ)Ljava/lang/String;
+HPLandroid/os/BatteryStats;->formatTimeMs(Ljava/lang/StringBuilder;J)V
+HPLandroid/os/BatteryStats;->formatTimeMsNoSpace(Ljava/lang/StringBuilder;J)V
+HPLandroid/os/BatteryStats;->formatTimeRaw(Ljava/lang/StringBuilder;J)V
+HPLandroid/os/BatteryStats;->printControllerActivity(Ljava/io/PrintWriter;Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;Landroid/os/BatteryStats$ControllerActivityCounter;I)V
+HPLandroid/os/BatteryStats;->printControllerActivityIfInteresting(Ljava/io/PrintWriter;Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;Landroid/os/BatteryStats$ControllerActivityCounter;I)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
+HPLandroid/os/Binder;->doDump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLandroid/os/Binder;->dump(Ljava/io/FileDescriptor;[Ljava/lang/String;)V
+HPLandroid/os/Binder;->isProxy(Landroid/os/IInterface;)Z
+HPLandroid/os/Binder;->shellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
+HPLandroid/os/BinderProxy;->dump(Ljava/io/FileDescriptor;[Ljava/lang/String;)V
+HPLandroid/os/BinderProxy;->sendDeathNotice(Landroid/os/IBinder$DeathRecipient;)V
+HPLandroid/os/Build;->getRadioVersion()Ljava/lang/String;
+HPLandroid/os/Build;->isBuildConsistent()Z
+HPLandroid/os/Bundle;-><init>(Landroid/os/PersistableBundle;)V
+HPLandroid/os/Bundle;->describeContents()I
+HPLandroid/os/Bundle;->forPair(Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;
+HPLandroid/os/Bundle;->getBinder(Ljava/lang/String;)Landroid/os/IBinder;
+HPLandroid/os/Bundle;->getCharSequenceArray(Ljava/lang/String;)[Ljava/lang/CharSequence;
+HPLandroid/os/Bundle;->getFloat(Ljava/lang/String;F)F
+HPLandroid/os/Bundle;->getFloatArray(Ljava/lang/String;)[F
+HPLandroid/os/Bundle;->getIntegerArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
+HPLandroid/os/Bundle;->getSize()I
+HPLandroid/os/Bundle;->hasFileDescriptors()Z
+HPLandroid/os/Bundle;->putFloat(Ljava/lang/String;F)V
+HPLandroid/os/Bundle;->putIntegerArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
+HPLandroid/os/Bundle;->putParcelableList(Ljava/lang/String;Ljava/util/List;)V
+HPLandroid/os/CancellationSignal;->setOnCancelListener(Landroid/os/CancellationSignal$OnCancelListener;)V
+HPLandroid/os/CommonTimeConfig$OnServerDiedListener;->onServerDied()V
+HPLandroid/os/DeadObjectException;-><init>()V
+HPLandroid/os/Debug$MemoryInfo;->getTotalUss()I
+HPLandroid/os/Debug$MemoryInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/os/Debug;->dumpService(Ljava/lang/String;Ljava/io/FileDescriptor;[Ljava/lang/String;)Z
+HPLandroid/os/Debug;->threadCpuTimeNanos()J
+HPLandroid/os/DropBoxManager$Entry$1;-><init>()V
+HPLandroid/os/DropBoxManager$Entry$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/DropBoxManager$Entry;
+HPLandroid/os/DropBoxManager$Entry$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/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
+HPLandroid/os/DropBoxManager$Entry;-><init>(Ljava/lang/String;JLjava/lang/String;)V
+HPLandroid/os/DropBoxManager$Entry;-><init>(Ljava/lang/String;J[BI)V
+HPLandroid/os/DropBoxManager$Entry;->close()V
+HPLandroid/os/DropBoxManager$Entry;->getFlags()I
+HPLandroid/os/DropBoxManager$Entry;->getInputStream()Ljava/io/InputStream;
+HPLandroid/os/DropBoxManager$Entry;->getTag()Ljava/lang/String;
+HPLandroid/os/DropBoxManager$Entry;->getTimeMillis()J
+HPLandroid/os/DropBoxManager$Entry;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/os/DropBoxManager;-><init>(Landroid/content/Context;Lcom/android/internal/os/IDropBoxManagerService;)V
+HPLandroid/os/DropBoxManager;->addFile(Ljava/lang/String;Ljava/io/File;I)V
+HPLandroid/os/DropBoxManager;->addText(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/os/DropBoxManager;->getNextEntry(Ljava/lang/String;J)Landroid/os/DropBoxManager$Entry;
+HPLandroid/os/DropBoxManager;->isTagEnabled(Ljava/lang/String;)Z
+HPLandroid/os/Environment;->getDataAppDirectory(Ljava/lang/String;)Ljava/io/File;
+HPLandroid/os/Environment;->getDataMiscCeDirectory()Ljava/io/File;
+HPLandroid/os/Environment;->getDataMiscCeDirectory(I)Ljava/io/File;
+HPLandroid/os/Environment;->getDataMiscDirectory()Ljava/io/File;
+HPLandroid/os/Environment;->getDataSystemCeDirectory()Ljava/io/File;
+HPLandroid/os/Environment;->getDataSystemCeDirectory(I)Ljava/io/File;
+HPLandroid/os/Environment;->getDataSystemDeDirectory()Ljava/io/File;
+HPLandroid/os/Environment;->getDataSystemDeDirectory(I)Ljava/io/File;
+HPLandroid/os/Environment;->getDownloadCacheDirectory()Ljava/io/File;
+HPLandroid/os/Environment;->getLegacyExternalStorageDirectory()Ljava/io/File;
+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
+HPLandroid/os/FileBridge;-><init>()V
+HPLandroid/os/FileBridge;->forceClose()V
+HPLandroid/os/FileBridge;->getClientSocket()Ljava/io/FileDescriptor;
+HPLandroid/os/FileBridge;->isClosed()Z
+HPLandroid/os/FileBridge;->run()V
+HPLandroid/os/FileBridge;->setTargetFile(Ljava/io/FileDescriptor;)V
+HPLandroid/os/FileUtils$1;-><init>()V
+HPLandroid/os/FileUtils;->buildValidExtFilename(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/os/FileUtils;->deleteOlderFiles(Ljava/io/File;IJ)Z
+HPLandroid/os/FileUtils;->isValidExtFilename(Ljava/lang/String;)Z
+HPLandroid/os/FileUtils;->isValidExtFilenameChar(C)Z
+HPLandroid/os/FileUtils;->rewriteAfterRename(Ljava/io/File;Ljava/io/File;Ljava/io/File;)Ljava/io/File;
+HPLandroid/os/FileUtils;->rewriteAfterRename(Ljava/io/File;Ljava/io/File;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/os/FileUtils;->rewriteAfterRename(Ljava/io/File;Ljava/io/File;[Ljava/lang/String;)[Ljava/lang/String;
+HPLandroid/os/FileUtils;->roundStorageSize(J)J
+HPLandroid/os/FileUtils;->setPermissions(Ljava/io/FileDescriptor;III)I
+HPLandroid/os/FileUtils;->stringToFile(Ljava/io/File;Ljava/lang/String;)V
+HPLandroid/os/FileUtils;->stringToFile(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/os/FileUtils;->trimFilename(Ljava/lang/StringBuilder;I)V
+HPLandroid/os/Handler$BlockingRunnable;-><init>(Ljava/lang/Runnable;)V
+HPLandroid/os/Handler$BlockingRunnable;->postAndWait(Landroid/os/Handler;J)Z
+HPLandroid/os/Handler$BlockingRunnable;->run()V
+HPLandroid/os/Handler;->hasCallbacks(Ljava/lang/Runnable;)Z
+HPLandroid/os/Handler;->runWithScissors(Ljava/lang/Runnable;J)Z
+HPLandroid/os/Handler;->sendEmptyMessageAtTime(IJ)Z
+HPLandroid/os/HandlerThread;->quitSafely()Z
+HPLandroid/os/HwBlob;->wrapArray([I)[Ljava/lang/Integer;
+HPLandroid/os/HwParcel;->readInt32Vector()Ljava/util/ArrayList;
+HPLandroid/os/HwParcel;->writeInt8Vector(Ljava/util/ArrayList;)V
+HPLandroid/os/IBatteryPropertiesListener$Stub;-><init>()V
+HPLandroid/os/IBatteryPropertiesListener$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/os/IBatteryPropertiesListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/IBatteryPropertiesListener;->batteryPropertiesChanged(Landroid/os/BatteryProperties;)V
+HPLandroid/os/IBatteryPropertiesRegistrar$Stub$Proxy;->registerListener(Landroid/os/IBatteryPropertiesListener;)V
+HPLandroid/os/ICancellationSignal$Stub$Proxy;->cancel()V
+HPLandroid/os/ICancellationSignal$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/os/IDeviceIdentifiersPolicyService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/IDeviceIdleController$Stub;-><init>()V
+HPLandroid/os/IDeviceIdleController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/IHardwarePropertiesManager$Stub;-><init>()V
+HPLandroid/os/IHardwarePropertiesManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/IIncidentManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IIncidentManager;
+HPLandroid/os/IInstalld$Stub$Proxy;->clearAppData(Ljava/lang/String;Ljava/lang/String;IIJ)V
+HPLandroid/os/IInstalld$Stub$Proxy;->clearAppProfiles(Ljava/lang/String;)V
+HPLandroid/os/IInstalld$Stub$Proxy;->createOatDir(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/os/IInstalld$Stub$Proxy;->createUserData(Ljava/lang/String;III)V
+HPLandroid/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;Z)V
+HPLandroid/os/IInstalld$Stub$Proxy;->getUserSize(Ljava/lang/String;II[I)[J
+HPLandroid/os/IInstalld$Stub$Proxy;->idmap(Ljava/lang/String;Ljava/lang/String;I)V
+HPLandroid/os/IInstalld$Stub$Proxy;->isQuotaSupported(Ljava/lang/String;)Z
+HPLandroid/os/IInstalld$Stub$Proxy;->linkNativeLibraryDirectory(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+HPLandroid/os/IInstalld$Stub$Proxy;->markBootComplete(Ljava/lang/String;)V
+HPLandroid/os/IInstalld$Stub$Proxy;->rmPackageDir(Ljava/lang/String;)V
+HPLandroid/os/IInstalld$Stub$Proxy;->rmdex(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/os/IInstalld$Stub$Proxy;->setAppQuota(Ljava/lang/String;IIJ)V
+HPLandroid/os/INetworkManagementService$Stub;-><init>()V
+HPLandroid/os/INetworkManagementService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/IPermissionController$Stub;-><init>()V
+HPLandroid/os/IPermissionController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/IPermissionController;->checkPermission(Ljava/lang/String;II)Z
+HPLandroid/os/IPermissionController;->getPackagesForUid(I)[Ljava/lang/String;
+HPLandroid/os/IPermissionController;->isRuntimePermission(Ljava/lang/String;)Z
+HPLandroid/os/IPowerManager$Stub$Proxy;->isWakeLockLevelSupported(I)Z
+HPLandroid/os/IProcessInfoService$Stub;-><init>()V
+HPLandroid/os/IProcessInfoService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/IProcessInfoService;->getProcessStatesAndOomScoresFromPids([I[I[I)V
+HPLandroid/os/IProcessInfoService;->getProcessStatesFromPids([I[I)V
+HPLandroid/os/IRecoverySystem$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/IRemoteCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/os/IRemoteCallback$Stub$Proxy;->sendResult(Landroid/os/Bundle;)V
+HPLandroid/os/IRemoteCallback$Stub;-><init>()V
+HPLandroid/os/IRemoteCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/os/IRemoteCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IRemoteCallback;
+HPLandroid/os/IRemoteCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/IRemoteCallback;->sendResult(Landroid/os/Bundle;)V
+HPLandroid/os/ISchedulingPolicyService$Stub;-><init>()V
+HPLandroid/os/ISchedulingPolicyService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/ISchedulingPolicyService;->requestPriority(IIIZ)I
+HPLandroid/os/IUpdateLock$Stub;-><init>()V
+HPLandroid/os/IUpdateLock$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IUpdateLock;
+HPLandroid/os/IUpdateLock;->acquireUpdateLock(Landroid/os/IBinder;Ljava/lang/String;)V
+HPLandroid/os/IUpdateLock;->releaseUpdateLock(Landroid/os/IBinder;)V
+HPLandroid/os/IUserManager$Stub$Proxy;->getUserHandle(I)I
+HPLandroid/os/IUserManager$Stub$Proxy;->isRestricted()Z
+HPLandroid/os/IUserManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/IVibratorService$Stub;-><init>()V
+HPLandroid/os/IVibratorService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/LocaleList;->toString()Ljava/lang/String;
+HPLandroid/os/Looper;->toString()Ljava/lang/String;
+HPLandroid/os/MemoryFile;-><init>(Ljava/lang/String;I)V
+HPLandroid/os/MemoryFile;->beginAccess()V
+HPLandroid/os/MemoryFile;->checkActive()V
+HPLandroid/os/MemoryFile;->close()V
+HPLandroid/os/MemoryFile;->deactivate()V
+HPLandroid/os/MemoryFile;->endAccess()V
+HPLandroid/os/MemoryFile;->getFileDescriptor()Ljava/io/FileDescriptor;
+HPLandroid/os/MemoryFile;->readBytes([BIII)I
+HPLandroid/os/MemoryFile;->writeBytes([BIII)V
+HPLandroid/os/Message;->copyFrom(Landroid/os/Message;)V
+HPLandroid/os/Message;->getWhen()J
+HPLandroid/os/Message;->setTarget(Landroid/os/Handler;)V
+HPLandroid/os/MessageQueue;->hasMessages(Landroid/os/Handler;Ljava/lang/Runnable;Ljava/lang/Object;)Z
+HPLandroid/os/MessageQueue;->isPolling()Z
+HPLandroid/os/MessageQueue;->isPollingLocked()Z
+HPLandroid/os/Messenger;->describeContents()I
+HPLandroid/os/Messenger;->equals(Ljava/lang/Object;)Z
+HPLandroid/os/Messenger;->hashCode()I
+HPLandroid/os/Parcel;->compareData(Landroid/os/Parcel;)I
+HPLandroid/os/Parcel;->readCharSequenceArray()[Ljava/lang/CharSequence;
+HPLandroid/os/Parcel;->readFileDescriptor()Landroid/os/ParcelFileDescriptor;
+HPLandroid/os/Parcel;->readSparseBooleanArrayInternal(Landroid/util/SparseBooleanArray;I)V
+HPLandroid/os/Parcel;->writeBinderList(Ljava/util/List;)V
+HPLandroid/os/Parcel;->writeBooleanArray([Z)V
+HPLandroid/os/Parcel;->writeDouble(D)V
+HPLandroid/os/Parcel;->writeDoubleArray([D)V
+HPLandroid/os/Parcel;->writeException(Ljava/lang/Exception;)V
+HPLandroid/os/Parcel;->writeFloatArray([F)V
+HPLandroid/os/Parcel;->writeSparseBooleanArray(Landroid/util/SparseBooleanArray;)V
+HPLandroid/os/Parcel;->writeStrongInterface(Landroid/os/IInterface;)V
+HPLandroid/os/Parcel;->writeTypedObject(Landroid/os/Parcelable;I)V
+HPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;->read()I
+HPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;->read([B)I
+HPLandroid/os/ParcelFileDescriptor;->canDetectErrors()Z
+HPLandroid/os/ParcelFileDescriptor;->createPipe()[Landroid/os/ParcelFileDescriptor;
+HPLandroid/os/ParcelFileDescriptor;->fromData([BLjava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HPLandroid/os/ParcelFileDescriptor;->getFile(Ljava/io/FileDescriptor;)Ljava/io/File;
+HPLandroid/os/ParcelFileDescriptor;->getStatSize()J
+HPLandroid/os/ParcelFileDescriptor;->parseMode(Ljava/lang/String;)I
+HPLandroid/os/ParcelUuid;->hashCode()I
+HPLandroid/os/PatternMatcher;->match(Ljava/lang/String;)Z
+HPLandroid/os/PatternMatcher;->matchGlobPattern(Ljava/lang/String;Ljava/lang/String;)Z
+HPLandroid/os/PatternMatcher;->matchPattern(Ljava/lang/String;Ljava/lang/String;[II)Z
+HPLandroid/os/PatternMatcher;->toString()Ljava/lang/String;
+HPLandroid/os/PersistableBundle$MyReadMapCallback;-><init>()V
+HPLandroid/os/PersistableBundle$MyReadMapCallback;->readThisUnknownObjectXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/Object;
+HPLandroid/os/PersistableBundle;->clone()Ljava/lang/Object;
+HPLandroid/os/PersistableBundle;->getPersistableBundle(Ljava/lang/String;)Landroid/os/PersistableBundle;
+HPLandroid/os/PersistableBundle;->putPersistableBundle(Ljava/lang/String;Landroid/os/PersistableBundle;)V
+HPLandroid/os/PersistableBundle;->restoreFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/os/PersistableBundle;
+HPLandroid/os/PersistableBundle;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLandroid/os/PersistableBundle;->writeUnknownObject(Ljava/lang/Object;Ljava/lang/String;Lorg/xmlpull/v1/XmlSerializer;)V
+HPLandroid/os/PooledStringReader;-><init>(Landroid/os/Parcel;)V
+HPLandroid/os/PooledStringReader;->readString()Ljava/lang/String;
+HPLandroid/os/PowerManager$WakeLock$1;->run()V
+HPLandroid/os/PowerManager$WakeLock;->setHistoryTag(Ljava/lang/String;)V
+HPLandroid/os/PowerManager$WakeLock;->setUnimportantForLogging(Z)V
+HPLandroid/os/PowerManager;->getDefaultScreenBrightnessForVrSetting()I
+HPLandroid/os/PowerManager;->getMaximumScreenBrightnessForVrSetting()I
+HPLandroid/os/PowerManager;->getMaximumScreenBrightnessSetting()I
+HPLandroid/os/PowerManager;->getMinimumScreenBrightnessForVrSetting()I
+HPLandroid/os/PowerManager;->getMinimumScreenBrightnessSetting()I
+HPLandroid/os/PowerManager;->isWakeLockLevelSupported(I)Z
+HPLandroid/os/PowerManager;->wakeUp(JLjava/lang/String;)V
+HPLandroid/os/PowerManagerInternal;->isInteractive(I)Z
+HPLandroid/os/Process$ProcessStartResult;-><init>()V
+HPLandroid/os/Process;->getThreadGroupLeader(I)I
+HPLandroid/os/Process;->isThreadInProcess(II)Z
+HPLandroid/os/Process;->killProcessQuiet(I)V
+HPLandroid/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;)Landroid/os/Process$ProcessStartResult;
+HPLandroid/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;)Landroid/os/Process$ProcessStartResult;
+HPLandroid/os/RecoverySystem;->handleAftermath(Landroid/content/Context;)Ljava/lang/String;
+HPLandroid/os/RemoteCallback$1;-><init>()V
+HPLandroid/os/RemoteCallback$2;-><init>(Landroid/os/RemoteCallback;)V
+HPLandroid/os/RemoteCallback$2;->sendResult(Landroid/os/Bundle;)V
+HPLandroid/os/RemoteCallback$OnResultListener;->onResult(Landroid/os/Bundle;)V
+HPLandroid/os/RemoteCallback;-><init>(Landroid/os/RemoteCallback$OnResultListener;)V
+HPLandroid/os/RemoteCallback;-><init>(Landroid/os/RemoteCallback$OnResultListener;Landroid/os/Handler;)V
+HPLandroid/os/RemoteCallback;->sendResult(Landroid/os/Bundle;)V
+HPLandroid/os/RemoteCallback;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/os/RemoteCallbackList$Callback;->binderDied()V
+HPLandroid/os/RemoteCallbackList;->broadcast(Ljava/util/function/Consumer;)V
+HPLandroid/os/RemoteCallbackList;->getBroadcastCookie(I)Ljava/lang/Object;
+HPLandroid/os/RemoteCallbackList;->getRegisteredCallbackCount()I
+HPLandroid/os/RemoteCallbackList;->kill()V
+HPLandroid/os/RemoteCallbackList;->onCallbackDied(Landroid/os/IInterface;)V
+HPLandroid/os/RemoteCallbackList;->onCallbackDied(Landroid/os/IInterface;Ljava/lang/Object;)V
+HPLandroid/os/RemoteCallbackList;->unregister(Landroid/os/IInterface;)Z
+HPLandroid/os/RemoteException;-><init>()V
+HPLandroid/os/ResultReceiver$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/ResultReceiver;
+HPLandroid/os/ResultReceiver$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/os/ResultReceiver$MyResultReceiver;-><init>(Landroid/os/ResultReceiver;)V
+HPLandroid/os/ResultReceiver$MyResultReceiver;->send(ILandroid/os/Bundle;)V
+HPLandroid/os/ResultReceiver;-><init>(Landroid/os/Parcel;)V
+HPLandroid/os/ResultReceiver;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/os/SELinux;->restorecon(Ljava/io/File;)Z
+HPLandroid/os/SELinux;->restoreconRecursive(Ljava/io/File;)Z
+HPLandroid/os/ServiceSpecificException;-><init>(ILjava/lang/String;)V
+HPLandroid/os/ServiceSpecificException;->toString()Ljava/lang/String;
+HPLandroid/os/SharedMemory$1;-><init>()V
+HPLandroid/os/SharedMemory$Closer;-><init>(Ljava/io/FileDescriptor;Landroid/os/SharedMemory$MemoryRegistration;)V
+HPLandroid/os/SharedMemory$Closer;-><init>(Ljava/io/FileDescriptor;Landroid/os/SharedMemory$MemoryRegistration;Landroid/os/SharedMemory$Closer;)V
+HPLandroid/os/SharedMemory$Closer;->run()V
+HPLandroid/os/SharedMemory$MemoryRegistration;-><init>(I)V
+HPLandroid/os/SharedMemory$MemoryRegistration;-><init>(ILandroid/os/SharedMemory$MemoryRegistration;)V
+HPLandroid/os/SharedMemory$MemoryRegistration;->acquire()Landroid/os/SharedMemory$MemoryRegistration;
+HPLandroid/os/SharedMemory$MemoryRegistration;->release()V
+HPLandroid/os/SharedMemory$Unmapper;-><init>(JILandroid/os/SharedMemory$MemoryRegistration;)V
+HPLandroid/os/SharedMemory$Unmapper;-><init>(JILandroid/os/SharedMemory$MemoryRegistration;Landroid/os/SharedMemory$Unmapper;)V
+HPLandroid/os/SharedMemory$Unmapper;->run()V
+HPLandroid/os/SharedMemory;-><init>(Ljava/io/FileDescriptor;)V
+HPLandroid/os/SharedMemory;->checkOpen()V
+HPLandroid/os/SharedMemory;->close()V
+HPLandroid/os/SharedMemory;->create(Ljava/lang/String;I)Landroid/os/SharedMemory;
+HPLandroid/os/SharedMemory;->getFileDescriptor()Ljava/io/FileDescriptor;
+HPLandroid/os/SharedMemory;->map(III)Ljava/nio/ByteBuffer;
+HPLandroid/os/SharedMemory;->mapReadWrite()Ljava/nio/ByteBuffer;
+HPLandroid/os/SharedMemory;->unmap(Ljava/nio/ByteBuffer;)V
+HPLandroid/os/SharedMemory;->validateProt(I)V
+HPLandroid/os/ShellCallback$1;-><init>()V
+HPLandroid/os/ShellCallback$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/ShellCallback;
+HPLandroid/os/ShellCallback$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/os/ShellCallback;-><init>(Landroid/os/Parcel;)V
+HPLandroid/os/ShellCallback;->openOutputFile(Ljava/lang/String;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HPLandroid/os/ShellCommand;-><init>()V
+HPLandroid/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
+HPLandroid/os/ShellCommand;->getErrPrintWriter()Ljava/io/PrintWriter;
+HPLandroid/os/ShellCommand;->getNextArg()Ljava/lang/String;
+HPLandroid/os/ShellCommand;->getNextArgRequired()Ljava/lang/String;
+HPLandroid/os/ShellCommand;->getNextOption()Ljava/lang/String;
+HPLandroid/os/ShellCommand;->getOutPrintWriter()Ljava/io/PrintWriter;
+HPLandroid/os/ShellCommand;->getRawErrorStream()Ljava/io/OutputStream;
+HPLandroid/os/ShellCommand;->getRawInputStream()Ljava/io/InputStream;
+HPLandroid/os/ShellCommand;->getRawOutputStream()Ljava/io/OutputStream;
+HPLandroid/os/ShellCommand;->getShellCallback()Landroid/os/ShellCallback;
+HPLandroid/os/ShellCommand;->init(Landroid/os/Binder;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;I)V
+HPLandroid/os/ShellCommand;->openOutputFileForSystem(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HPLandroid/os/ShellCommand;->peekNextArg()Ljava/lang/String;
+HPLandroid/os/StatFs;->getAvailableBlocks()I
+HPLandroid/os/StatFs;->getAvailableBytes()J
+HPLandroid/os/StatFs;->getBlockCount()I
+HPLandroid/os/StatFs;->getBlockCountLong()J
+HPLandroid/os/StatFs;->getTotalBytes()J
+HPLandroid/os/StatFs;->restat(Ljava/lang/String;)V
+HPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onNetwork()V
+HPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onResourceMismatch(Ljava/lang/Object;)V
+HPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onUnbufferedIO()V
+HPLandroid/os/StrictMode$InstanceTracker;->finalize()V
+HPLandroid/os/StrictMode$ViolationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/StrictMode$ViolationInfo;
+HPLandroid/os/StrictMode$ViolationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/os/StrictMode$ViolationInfo;-><init>(Landroid/os/Parcel;)V
+HPLandroid/os/StrictMode;->-wrap2(ILandroid/os/StrictMode$ViolationInfo;)V
+HPLandroid/os/StrictMode;->decrementExpectedActivityCount(Ljava/lang/Class;)V
+HPLandroid/os/StrictMode;->noteResourceMismatch(Ljava/lang/Object;)V
+HPLandroid/os/StrictMode;->onSqliteObjectLeaked(Ljava/lang/String;Ljava/lang/Throwable;)V
+HPLandroid/os/SystemClock;->setCurrentTimeMillis(J)Z
+HPLandroid/os/SystemProperties;->getLong(Ljava/lang/String;J)J
+HPLandroid/os/SystemService$1;-><init>()V
+HPLandroid/os/SystemService$State;-><init>(Ljava/lang/String;ILjava/lang/String;)V
+HPLandroid/os/SystemService;->-get1()Ljava/util/HashMap;
+HPLandroid/os/SystemService;->getState(Ljava/lang/String;)Landroid/os/SystemService$State;
+HPLandroid/os/SystemService;->isRunning(Ljava/lang/String;)Z
+HPLandroid/os/SystemService;->isStopped(Ljava/lang/String;)Z
+HPLandroid/os/SystemService;->restart(Ljava/lang/String;)V
+HPLandroid/os/SystemService;->start(Ljava/lang/String;)V
+HPLandroid/os/SystemService;->waitForState(Ljava/lang/String;Landroid/os/SystemService$State;J)V
+HPLandroid/os/SystemVibrator;-><init>()V
+HPLandroid/os/SystemVibrator;->cancel()V
+HPLandroid/os/SystemVibrator;->usageForAttributes(Landroid/media/AudioAttributes;)I
+HPLandroid/os/SystemVibrator;->vibrate(ILjava/lang/String;Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;)V
+HPLandroid/os/TokenWatcher$1;-><init>(Landroid/os/TokenWatcher;)V
+HPLandroid/os/TokenWatcher$1;->run()V
+HPLandroid/os/TokenWatcher$Death;-><init>(Landroid/os/TokenWatcher;Landroid/os/IBinder;Ljava/lang/String;)V
+HPLandroid/os/TokenWatcher$Death;->finalize()V
+HPLandroid/os/TokenWatcher;->-get0(Landroid/os/TokenWatcher;)I
+HPLandroid/os/TokenWatcher;->-get2(Landroid/os/TokenWatcher;)Ljava/util/WeakHashMap;
+HPLandroid/os/TokenWatcher;->-set0(Landroid/os/TokenWatcher;I)I
+HPLandroid/os/TokenWatcher;-><init>(Landroid/os/Handler;Ljava/lang/String;)V
+HPLandroid/os/TokenWatcher;->acquire(Landroid/os/IBinder;Ljava/lang/String;)V
+HPLandroid/os/TokenWatcher;->acquired()V
+HPLandroid/os/TokenWatcher;->cleanup(Landroid/os/IBinder;Z)V
+HPLandroid/os/TokenWatcher;->isAcquired()Z
+HPLandroid/os/TokenWatcher;->release(Landroid/os/IBinder;)V
+HPLandroid/os/TokenWatcher;->released()V
+HPLandroid/os/TokenWatcher;->sendNotificationLocked(Z)V
+HPLandroid/os/UEventObserver$UEvent;-><init>(Ljava/lang/String;)V
+HPLandroid/os/UEventObserver$UEvent;->get(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/os/UEventObserver$UEventThread;-><init>()V
+HPLandroid/os/UEventObserver$UEventThread;->addObserver(Ljava/lang/String;Landroid/os/UEventObserver;)V
+HPLandroid/os/UEventObserver$UEventThread;->run()V
+HPLandroid/os/UEventObserver$UEventThread;->sendEvent(Ljava/lang/String;)V
+HPLandroid/os/UEventObserver;->-wrap0()Ljava/lang/String;
+HPLandroid/os/UEventObserver;->-wrap1(Ljava/lang/String;)V
+HPLandroid/os/UEventObserver;->-wrap3()V
+HPLandroid/os/UEventObserver;-><init>()V
+HPLandroid/os/UEventObserver;->getThread()Landroid/os/UEventObserver$UEventThread;
+HPLandroid/os/UEventObserver;->startObserving(Ljava/lang/String;)V
+HPLandroid/os/UpdateLock;->acquire()V
+HPLandroid/os/UpdateLock;->acquireLocked()V
+HPLandroid/os/UpdateLock;->checkService()V
+HPLandroid/os/UpdateLock;->isHeld()Z
+HPLandroid/os/UpdateLock;->release()V
+HPLandroid/os/UpdateLock;->releaseLocked()V
+HPLandroid/os/UserHandle;->describeContents()I
+HPLandroid/os/UserHandle;->formatUid(Ljava/io/PrintWriter;I)V
+HPLandroid/os/UserHandle;->formatUid(Ljava/lang/StringBuilder;I)V
+HPLandroid/os/UserHandle;->getSharedAppGid(I)I
+HPLandroid/os/UserHandle;->getUserGid(I)I
+HPLandroid/os/UserHandle;->getUserHandleForUid(I)Landroid/os/UserHandle;
+HPLandroid/os/UserHandle;->isApp(I)Z
+HPLandroid/os/UserHandle;->isIsolated(I)Z
+HPLandroid/os/UserHandle;->isSameUser(II)Z
+HPLandroid/os/UserHandle;->isSystem()Z
+HPLandroid/os/UserManager;->getCredentialOwnerProfile(I)I
+HPLandroid/os/UserManager;->getEnabledProfileIds(I)[I
+HPLandroid/os/UserManager;->getUserCount()I
+HPLandroid/os/UserManager;->getUserForSerialNumber(J)Landroid/os/UserHandle;
+HPLandroid/os/UserManager;->getUserHandle(I)I
+HPLandroid/os/UserManager;->isGuestUser(I)Z
+HPLandroid/os/UserManager;->isLinkedUser()Z
+HPLandroid/os/UserManager;->isPrimaryUser()Z
+HPLandroid/os/UserManager;->isSystemUser()Z
+HPLandroid/os/VibrationEffect$1;-><init>()V
+HPLandroid/os/VibrationEffect$Prebaked$1;-><init>()V
+HPLandroid/os/VibrationEffect$Prebaked;-><init>(I)V
+HPLandroid/os/VibrationEffect$Prebaked;->getId()I
+HPLandroid/os/VibrationEffect$Prebaked;->validate()V
+HPLandroid/os/VibrationEffect$Waveform$1;-><init>()V
+HPLandroid/os/VibrationEffect$Waveform;-><init>([J[II)V
+HPLandroid/os/VibrationEffect$Waveform;->hasNonZeroEntry([J)Z
+HPLandroid/os/VibrationEffect$Waveform;->validate()V
+HPLandroid/os/VibrationEffect;-><init>()V
+HPLandroid/os/VibrationEffect;->createWaveform([JI)Landroid/os/VibrationEffect;
+HPLandroid/os/VibrationEffect;->createWaveform([J[II)Landroid/os/VibrationEffect;
+HPLandroid/os/VibrationEffect;->get(I)Landroid/os/VibrationEffect;
+HPLandroid/os/VibrationEffect;->validate()V
+HPLandroid/os/Vibrator;-><init>()V
+HPLandroid/os/WorkSource$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/WorkSource;
+HPLandroid/os/WorkSource$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/os/WorkSource;-><init>(Landroid/os/Parcel;)V
+HPLandroid/os/WorkSource;->add(I)Z
+HPLandroid/os/WorkSource;->addWork(Landroid/os/WorkSource;ILjava/lang/String;)Landroid/os/WorkSource;
+HPLandroid/os/WorkSource;->clearNames()V
+HPLandroid/os/WorkSource;->equals(Ljava/lang/Object;)Z
+HPLandroid/os/WorkSource;->hashCode()I
+HPLandroid/os/WorkSource;->insert(II)V
+HPLandroid/os/WorkSource;->setReturningDiffs(Landroid/os/WorkSource;)[Landroid/os/WorkSource;
+HPLandroid/os/WorkSource;->toString()Ljava/lang/String;
+HPLandroid/os/WorkSource;->updateUidsLocked(Landroid/os/WorkSource;ZZ)Z
+HPLandroid/os/ZygoteProcess$ZygoteState;->isClosed()Z
+HPLandroid/os/ZygoteProcess$ZygoteState;->matches(Ljava/lang/String;)Z
+HPLandroid/os/ZygoteProcess;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/os/ZygoteProcess;->establishZygoteConnectionForAbi(Ljava/lang/String;)V
+HPLandroid/os/ZygoteProcess;->openZygoteSocketIfNeeded(Ljava/lang/String;)Landroid/os/ZygoteProcess$ZygoteState;
+HPLandroid/os/ZygoteProcess;->preloadDefault(Ljava/lang/String;)Z
+HPLandroid/os/ZygoteProcess;->preloadPackageForAbi(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
+HPLandroid/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;)Landroid/os/Process$ProcessStartResult;
+HPLandroid/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;[Ljava/lang/String;)Landroid/os/Process$ProcessStartResult;
+HPLandroid/os/ZygoteProcess;->zygoteSendArgsAndGetResult(Landroid/os/ZygoteProcess$ZygoteState;Ljava/util/ArrayList;)Landroid/os/Process$ProcessStartResult;
+HPLandroid/os/storage/IStorageEventListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/os/storage/IStorageEventListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/os/storage/IStorageEventListener$Stub$Proxy;->onStorageStateChanged(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/os/storage/IStorageEventListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/storage/IStorageEventListener;
+HPLandroid/os/storage/IStorageEventListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/storage/IStorageManager$Stub;-><init>()V
+HPLandroid/os/storage/IStorageManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/os/storage/StorageEventListener;->onStorageStateChanged(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/os/storage/StorageManager$StorageEventListenerDelegate;->handleMessage(Landroid/os/Message;)Z
+HPLandroid/os/storage/StorageManager$StorageEventListenerDelegate;->onStorageStateChanged(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/os/storage/StorageManager$StorageEventListenerDelegate;->onVolumeStateChanged(Landroid/os/storage/VolumeInfo;II)V
+HPLandroid/os/storage/StorageManager;->allocateBytes(Ljava/io/FileDescriptor;JI)V
+HPLandroid/os/storage/StorageManager;->allocateBytes(Ljava/util/UUID;JI)V
+HPLandroid/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;
+HPLandroid/os/storage/StorageManager;->findVolumeByQualifiedUuid(Ljava/lang/String;)Landroid/os/storage/VolumeInfo;
+HPLandroid/os/storage/StorageManager;->from(Landroid/content/Context;)Landroid/os/storage/StorageManager;
+HPLandroid/os/storage/StorageManager;->getBestVolumeDescription(Landroid/os/storage/VolumeInfo;)Ljava/lang/String;
+HPLandroid/os/storage/StorageManager;->getPrimaryStorageSize()J
+HPLandroid/os/storage/StorageManager;->getPrimaryVolume()Landroid/os/storage/StorageVolume;
+HPLandroid/os/storage/StorageManager;->getPrimaryVolume([Landroid/os/storage/StorageVolume;)Landroid/os/storage/StorageVolume;
+HPLandroid/os/storage/StorageManager;->getStorageCacheBytes(Ljava/io/File;I)J
+HPLandroid/os/storage/StorageManager;->getStorageFullBytes(Ljava/io/File;)J
+HPLandroid/os/storage/StorageManager;->getStorageLowBytes(Ljava/io/File;)J
+HPLandroid/os/storage/StorageManager;->getStorageVolume(Ljava/io/File;)Landroid/os/storage/StorageVolume;
+HPLandroid/os/storage/StorageManager;->getVolumeList()[Landroid/os/storage/StorageVolume;
+HPLandroid/os/storage/StorageManager;->getWritablePrivateVolumes()Ljava/util/List;
+HPLandroid/os/storage/StorageManager;->isFileEncryptedEmulatedOnly()Z
+HPLandroid/os/storage/StorageManager;->isUserKeyUnlocked(I)Z
+HPLandroid/os/storage/StorageManager;->prepareUserStorage(Ljava/lang/String;III)V
+HPLandroid/os/storage/StorageManagerInternal;-><init>()V
+HPLandroid/os/storage/StorageManagerInternal;->addExternalStoragePolicy(Landroid/os/storage/StorageManagerInternal$ExternalStorageMountPolicy;)V
+HPLandroid/os/storage/StorageManagerInternal;->getExternalStorageMountMode(ILjava/lang/String;)I
+HPLandroid/os/storage/StorageManagerInternal;->onExternalStoragePolicyChanged(ILjava/lang/String;)V
+HPLandroid/os/storage/StorageVolume;-><init>(Ljava/lang/String;ILjava/io/File;Ljava/lang/String;ZZZJZJLandroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/os/storage/StorageVolume;->allowMassStorage()Z
+HPLandroid/os/storage/StorageVolume;->describeContents()I
+HPLandroid/os/storage/StorageVolume;->getId()Ljava/lang/String;
+HPLandroid/os/storage/StorageVolume;->getOwner()Landroid/os/UserHandle;
+HPLandroid/os/storage/StorageVolume;->getPath()Ljava/lang/String;
+HPLandroid/os/storage/StorageVolume;->isPrimary()Z
+HPLandroid/os/storage/StorageVolume;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/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;
+HPLandroid/os/storage/VolumeInfo;->clone()Landroid/os/storage/VolumeInfo;
+HPLandroid/os/storage/VolumeInfo;->getBroadcastForEnvironment(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/os/storage/VolumeInfo;->getDescription()Ljava/lang/String;
+HPLandroid/os/storage/VolumeInfo;->getEnvironmentForState(I)Ljava/lang/String;
+HPLandroid/os/storage/VolumeInfo;->getId()Ljava/lang/String;
+HPLandroid/os/storage/VolumeInfo;->getPath()Ljava/io/File;
+HPLandroid/os/storage/VolumeInfo;->getPathForUser(I)Ljava/io/File;
+HPLandroid/os/storage/VolumeInfo;->getState()I
+HPLandroid/os/storage/VolumeInfo;->isMountedWritable()Z
+HPLandroid/os/storage/VolumeInfo;->isPrimary()Z
+HPLandroid/os/storage/VolumeInfo;->isVisible()Z
+HPLandroid/os/storage/VolumeInfo;->isVisibleForRead(I)Z
+HPLandroid/os/storage/VolumeInfo;->isVisibleForWrite(I)Z
+HPLandroid/os/storage/VolumeInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/preference/Preference$BaseSavedState$1;-><init>()V
+HPLandroid/preference/Preference$BaseSavedState;-><init>(Landroid/os/Parcel;)V
+HPLandroid/preference/Preference$BaseSavedState;-><init>(Landroid/os/Parcelable;)V
+HPLandroid/preference/SeekBarVolumizer$Callback;->onMuted(ZZ)V
+HPLandroid/preference/SeekBarVolumizer$Callback;->onProgressChanged(Landroid/widget/SeekBar;IZ)V
+HPLandroid/preference/SeekBarVolumizer$Callback;->onSampleStarting(Landroid/preference/SeekBarVolumizer;)V
+HPLandroid/preference/SeekBarVolumizer$H;-><init>(Landroid/preference/SeekBarVolumizer;)V
+HPLandroid/preference/SeekBarVolumizer$H;-><init>(Landroid/preference/SeekBarVolumizer;Landroid/preference/SeekBarVolumizer$H;)V
+HPLandroid/preference/SeekBarVolumizer$H;->handleMessage(Landroid/os/Message;)V
+HPLandroid/preference/SeekBarVolumizer$H;->postUpdateSlider(IIZ)V
+HPLandroid/preference/SeekBarVolumizer$Observer;-><init>(Landroid/preference/SeekBarVolumizer;Landroid/os/Handler;)V
+HPLandroid/preference/SeekBarVolumizer$Receiver;-><init>(Landroid/preference/SeekBarVolumizer;)V
+HPLandroid/preference/SeekBarVolumizer$Receiver;-><init>(Landroid/preference/SeekBarVolumizer;Landroid/preference/SeekBarVolumizer$Receiver;)V
+HPLandroid/preference/SeekBarVolumizer$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLandroid/preference/SeekBarVolumizer$Receiver;->setListening(Z)V
+HPLandroid/preference/SeekBarVolumizer;->-get0(Landroid/preference/SeekBarVolumizer;)Z
+HPLandroid/preference/SeekBarVolumizer;->-get1(Landroid/preference/SeekBarVolumizer;)Landroid/media/AudioManager;
+HPLandroid/preference/SeekBarVolumizer;->-get3(Landroid/preference/SeekBarVolumizer;)Landroid/content/Context;
+HPLandroid/preference/SeekBarVolumizer;->-get5(Landroid/preference/SeekBarVolumizer;)Z
+HPLandroid/preference/SeekBarVolumizer;->-get7(Landroid/preference/SeekBarVolumizer;)Z
+HPLandroid/preference/SeekBarVolumizer;->-get8(Landroid/preference/SeekBarVolumizer;)Landroid/widget/SeekBar;
+HPLandroid/preference/SeekBarVolumizer;->-set0(Landroid/preference/SeekBarVolumizer;I)I
+HPLandroid/preference/SeekBarVolumizer;->-set1(Landroid/preference/SeekBarVolumizer;I)I
+HPLandroid/preference/SeekBarVolumizer;->-set3(Landroid/preference/SeekBarVolumizer;I)I
+HPLandroid/preference/SeekBarVolumizer;->-wrap2(Landroid/preference/SeekBarVolumizer;)V
+HPLandroid/preference/SeekBarVolumizer;-><init>(Landroid/content/Context;ILandroid/net/Uri;Landroid/preference/SeekBarVolumizer$Callback;)V
+HPLandroid/preference/SeekBarVolumizer;->handleMessage(Landroid/os/Message;)Z
+HPLandroid/preference/SeekBarVolumizer;->isNotificationOrRing(I)Z
+HPLandroid/preference/SeekBarVolumizer;->isZenMuted()Z
+HPLandroid/preference/SeekBarVolumizer;->onInitSample()V
+HPLandroid/preference/SeekBarVolumizer;->onStopSample()V
+HPLandroid/preference/SeekBarVolumizer;->postStopSample()V
+HPLandroid/preference/SeekBarVolumizer;->setSeekBar(Landroid/widget/SeekBar;)V
+HPLandroid/preference/SeekBarVolumizer;->start()V
+HPLandroid/preference/SeekBarVolumizer;->stop()V
+HPLandroid/preference/SeekBarVolumizer;->updateSeekBar()V
+HPLandroid/preference/SeekBarVolumizer;->updateSlider()V
+HPLandroid/print/IPrintManager$Stub;-><init>()V
+HPLandroid/print/IPrintManager;->addPrintJobStateChangeListener(Landroid/print/IPrintJobStateChangeListener;II)V
+HPLandroid/print/IPrintManager;->addPrintServiceRecommendationsChangeListener(Landroid/printservice/recommendation/IRecommendationsChangeListener;I)V
+HPLandroid/print/IPrintManager;->addPrintServicesChangeListener(Landroid/print/IPrintServicesChangeListener;I)V
+HPLandroid/print/IPrintManager;->cancelPrintJob(Landroid/print/PrintJobId;II)V
+HPLandroid/print/IPrintManager;->createPrinterDiscoverySession(Landroid/print/IPrinterDiscoveryObserver;I)V
+HPLandroid/print/IPrintManager;->destroyPrinterDiscoverySession(Landroid/print/IPrinterDiscoveryObserver;I)V
+HPLandroid/print/IPrintManager;->getCustomPrinterIcon(Landroid/print/PrinterId;I)Landroid/graphics/drawable/Icon;
+HPLandroid/print/IPrintManager;->getPrintJobInfo(Landroid/print/PrintJobId;II)Landroid/print/PrintJobInfo;
+HPLandroid/print/IPrintManager;->getPrintJobInfos(II)Ljava/util/List;
+HPLandroid/print/IPrintManager;->getPrintServiceRecommendations(I)Ljava/util/List;
+HPLandroid/print/IPrintManager;->getPrintServices(II)Ljava/util/List;
+HPLandroid/print/IPrintManager;->print(Ljava/lang/String;Landroid/print/IPrintDocumentAdapter;Landroid/print/PrintAttributes;Ljava/lang/String;II)Landroid/os/Bundle;
+HPLandroid/print/IPrintManager;->removePrintJobStateChangeListener(Landroid/print/IPrintJobStateChangeListener;I)V
+HPLandroid/print/IPrintManager;->removePrintServiceRecommendationsChangeListener(Landroid/printservice/recommendation/IRecommendationsChangeListener;I)V
+HPLandroid/print/IPrintManager;->removePrintServicesChangeListener(Landroid/print/IPrintServicesChangeListener;I)V
+HPLandroid/print/IPrintManager;->restartPrintJob(Landroid/print/PrintJobId;II)V
+HPLandroid/print/IPrintManager;->setPrintServiceEnabled(Landroid/content/ComponentName;ZI)V
+HPLandroid/print/IPrintManager;->startPrinterDiscovery(Landroid/print/IPrinterDiscoveryObserver;Ljava/util/List;I)V
+HPLandroid/print/IPrintManager;->startPrinterStateTracking(Landroid/print/PrinterId;I)V
+HPLandroid/print/IPrintManager;->stopPrinterDiscovery(Landroid/print/IPrinterDiscoveryObserver;I)V
+HPLandroid/print/IPrintManager;->stopPrinterStateTracking(Landroid/print/PrinterId;I)V
+HPLandroid/print/IPrintManager;->validatePrinters(Ljava/util/List;I)V
+HPLandroid/print/IPrintSpooler$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/print/IPrintSpooler$Stub$Proxy;->pruneApprovedPrintServices(Ljava/util/List;)V
+HPLandroid/print/IPrintSpooler$Stub$Proxy;->removeObsoletePrintJobs()V
+HPLandroid/print/IPrintSpooler$Stub$Proxy;->setClient(Landroid/print/IPrintSpoolerClient;)V
+HPLandroid/print/IPrintSpooler$Stub;->asInterface(Landroid/os/IBinder;)Landroid/print/IPrintSpooler;
+HPLandroid/print/IPrintSpooler;->clearCustomPrinterIconCache(Landroid/print/IPrintSpoolerCallbacks;I)V
+HPLandroid/print/IPrintSpooler;->createPrintJob(Landroid/print/PrintJobInfo;)V
+HPLandroid/print/IPrintSpooler;->getCustomPrinterIcon(Landroid/print/PrinterId;Landroid/print/IPrintSpoolerCallbacks;I)V
+HPLandroid/print/IPrintSpooler;->getPrintJobInfo(Landroid/print/PrintJobId;Landroid/print/IPrintSpoolerCallbacks;II)V
+HPLandroid/print/IPrintSpooler;->getPrintJobInfos(Landroid/print/IPrintSpoolerCallbacks;Landroid/content/ComponentName;III)V
+HPLandroid/print/IPrintSpooler;->onCustomPrinterIconLoaded(Landroid/print/PrinterId;Landroid/graphics/drawable/Icon;Landroid/print/IPrintSpoolerCallbacks;I)V
+HPLandroid/print/IPrintSpooler;->pruneApprovedPrintServices(Ljava/util/List;)V
+HPLandroid/print/IPrintSpooler;->removeObsoletePrintJobs()V
+HPLandroid/print/IPrintSpooler;->setClient(Landroid/print/IPrintSpoolerClient;)V
+HPLandroid/print/IPrintSpooler;->setPrintJobCancelling(Landroid/print/PrintJobId;Z)V
+HPLandroid/print/IPrintSpooler;->setPrintJobState(Landroid/print/PrintJobId;ILjava/lang/String;Landroid/print/IPrintSpoolerCallbacks;I)V
+HPLandroid/print/IPrintSpooler;->setPrintJobTag(Landroid/print/PrintJobId;Ljava/lang/String;Landroid/print/IPrintSpoolerCallbacks;I)V
+HPLandroid/print/IPrintSpooler;->setProgress(Landroid/print/PrintJobId;F)V
+HPLandroid/print/IPrintSpooler;->setStatus(Landroid/print/PrintJobId;Ljava/lang/CharSequence;)V
+HPLandroid/print/IPrintSpooler;->setStatusRes(Landroid/print/PrintJobId;ILjava/lang/CharSequence;)V
+HPLandroid/print/IPrintSpooler;->writePrintJobData(Landroid/os/ParcelFileDescriptor;Landroid/print/PrintJobId;)V
+HPLandroid/print/IPrintSpoolerCallbacks$Stub;-><init>()V
+HPLandroid/print/IPrintSpoolerCallbacks;->onCancelPrintJobResult(ZI)V
+HPLandroid/print/IPrintSpoolerClient$Stub;-><init>()V
+HPLandroid/print/IPrintSpoolerClient$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/print/IPrintSpoolerClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/print/IPrintSpoolerClient;->onAllPrintJobsForServiceHandled(Landroid/content/ComponentName;)V
+HPLandroid/print/IPrintSpoolerClient;->onAllPrintJobsHandled()V
+HPLandroid/print/IPrintSpoolerClient;->onPrintJobQueued(Landroid/print/PrintJobInfo;)V
+HPLandroid/print/IPrintSpoolerClient;->onPrintJobStateChanged(Landroid/print/PrintJobInfo;)V
+HPLandroid/print/PrintDocumentAdapter;-><init>()V
+HPLandroid/print/PrintDocumentAdapter;->onLayout(Landroid/print/PrintAttributes;Landroid/print/PrintAttributes;Landroid/os/CancellationSignal;Landroid/print/PrintDocumentAdapter$LayoutResultCallback;Landroid/os/Bundle;)V
+HPLandroid/print/PrintDocumentAdapter;->onWrite([Landroid/print/PageRange;Landroid/os/ParcelFileDescriptor;Landroid/os/CancellationSignal;Landroid/print/PrintDocumentAdapter$WriteResultCallback;)V
+HPLandroid/printservice/IPrintServiceClient$Stub;-><init>()V
+HPLandroid/printservice/IPrintServiceClient;->getPrintJobInfo(Landroid/print/PrintJobId;)Landroid/print/PrintJobInfo;
+HPLandroid/printservice/IPrintServiceClient;->getPrintJobInfos()Ljava/util/List;
+HPLandroid/printservice/IPrintServiceClient;->onCustomPrinterIconLoaded(Landroid/print/PrinterId;Landroid/graphics/drawable/Icon;)V
+HPLandroid/printservice/IPrintServiceClient;->onPrintersAdded(Landroid/content/pm/ParceledListSlice;)V
+HPLandroid/printservice/IPrintServiceClient;->onPrintersRemoved(Landroid/content/pm/ParceledListSlice;)V
+HPLandroid/printservice/IPrintServiceClient;->setPrintJobState(Landroid/print/PrintJobId;ILjava/lang/String;)Z
+HPLandroid/printservice/IPrintServiceClient;->setPrintJobTag(Landroid/print/PrintJobId;Ljava/lang/String;)Z
+HPLandroid/printservice/IPrintServiceClient;->setProgress(Landroid/print/PrintJobId;F)V
+HPLandroid/printservice/IPrintServiceClient;->setStatus(Landroid/print/PrintJobId;Ljava/lang/CharSequence;)V
+HPLandroid/printservice/IPrintServiceClient;->setStatusRes(Landroid/print/PrintJobId;ILjava/lang/CharSequence;)V
+HPLandroid/printservice/IPrintServiceClient;->writePrintJobData(Landroid/os/ParcelFileDescriptor;Landroid/print/PrintJobId;)V
+HPLandroid/printservice/PrintServiceInfo$1;-><init>()V
+HPLandroid/printservice/PrintServiceInfo;-><init>(Landroid/content/pm/ResolveInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/printservice/PrintServiceInfo;->create(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)Landroid/printservice/PrintServiceInfo;
+HPLandroid/printservice/PrintServiceInfo;->getComponentName()Landroid/content/ComponentName;
+HPLandroid/printservice/PrintServiceInfo;->getResolveInfo()Landroid/content/pm/ResolveInfo;
+HPLandroid/printservice/PrintServiceInfo;->hashCode()I
+HPLandroid/printservice/PrintServiceInfo;->isEnabled()Z
+HPLandroid/printservice/PrintServiceInfo;->setIsEnabled(Z)V
+HPLandroid/provider/CallLog$Calls;->addCall(Lcom/android/internal/telephony/CallerInfo;Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIILandroid/telecom/PhoneAccountHandle;JILjava/lang/Long;ZLandroid/os/UserHandle;)Landroid/net/Uri;
+HPLandroid/provider/CallLog$Calls;->addCall(Lcom/android/internal/telephony/CallerInfo;Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIILandroid/telecom/PhoneAccountHandle;JILjava/lang/Long;ZLandroid/os/UserHandle;Z)Landroid/net/Uri;
+HPLandroid/provider/CallLog$Calls;->addEntryAndRemoveExpiredEntries(Landroid/content/Context;Landroid/os/UserManager;Landroid/os/UserHandle;Landroid/content/ContentValues;)Landroid/net/Uri;
+HPLandroid/provider/CallLog$Calls;->getLastOutgoingCall(Landroid/content/Context;)Ljava/lang/String;
+HPLandroid/provider/ContactsContract$CommonDataKinds$Email;->getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;
+HPLandroid/provider/ContactsContract$CommonDataKinds$Phone;->getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;
+HPLandroid/provider/ContactsContract$Directory;->isRemoteDirectoryId(J)Z
+HPLandroid/provider/Downloads;->removeAllDownloadsByPackage(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/provider/MediaStore$Images$Thumbnails;->getContentUri(Ljava/lang/String;)Landroid/net/Uri;
+HPLandroid/provider/Settings$Global;->getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F
+HPLandroid/provider/Settings$Global;->getMovedToSecureSettings(Ljava/util/Set;)V
+HPLandroid/provider/Settings$Global;->isValidZenMode(I)Z
+HPLandroid/provider/Settings$Global;->zenModeToString(I)Ljava/lang/String;
+HPLandroid/provider/Settings$Secure;->getCloneToManagedProfileSettings(Ljava/util/Set;)V
+HPLandroid/provider/Settings$Secure;->getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J
+HPLandroid/provider/Settings$Secure;->getMovedToGlobalSettings(Ljava/util/Set;)V
+HPLandroid/provider/Settings$Secure;->isLocationProviderEnabled(Landroid/content/ContentResolver;Ljava/lang/String;)Z
+HPLandroid/provider/Settings$Secure;->putIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z
+HPLandroid/provider/Settings$Secure;->putLongForUser(Landroid/content/ContentResolver;Ljava/lang/String;JI)Z
+HPLandroid/provider/Settings$Secure;->putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z
+HPLandroid/provider/Settings$Secure;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z
+HPLandroid/provider/Settings$Secure;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZI)Z
+HPLandroid/provider/Settings$System$1;->validate(Ljava/lang/String;)Z
+HPLandroid/provider/Settings$System$DiscreteValueValidator;->validate(Ljava/lang/String;)Z
+HPLandroid/provider/Settings$System;->adjustConfigurationForUser(Landroid/content/ContentResolver;Landroid/content/res/Configuration;IZ)V
+HPLandroid/provider/Settings$System;->clearConfiguration(Landroid/content/res/Configuration;)V
+HPLandroid/provider/Settings$System;->getCloneFromParentOnValueSettings(Ljava/util/Map;)V
+HPLandroid/provider/Settings$System;->getCloneToManagedProfileSettings(Ljava/util/Set;)V
+HPLandroid/provider/Settings$System;->getConfiguration(Landroid/content/ContentResolver;Landroid/content/res/Configuration;)V
+HPLandroid/provider/Settings$System;->getFloat(Landroid/content/ContentResolver;Ljava/lang/String;)F
+HPLandroid/provider/Settings$System;->getFloatForUser(Landroid/content/ContentResolver;Ljava/lang/String;FI)F
+HPLandroid/provider/Settings$System;->getFloatForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)F
+HPLandroid/provider/Settings$System;->getMovedToGlobalSettings(Ljava/util/Set;)V
+HPLandroid/provider/Settings$System;->getMovedToSecureSettings(Ljava/util/Set;)V
+HPLandroid/provider/Settings$System;->getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/provider/Settings$System;->putIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z
+HPLandroid/provider/Settings$System;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z
+HPLandroid/provider/Settings;->checkAndNoteChangeNetworkStateOperation(Landroid/content/Context;ILjava/lang/String;Z)Z
+HPLandroid/provider/Settings;->checkAndNoteWriteSettingsOperation(Landroid/content/Context;ILjava/lang/String;Z)Z
+HPLandroid/provider/Settings;->getPackageNameForUid(Landroid/content/Context;I)Ljava/lang/String;
+HPLandroid/provider/Settings;->isCallingPackageAllowedToPerformAppOpsProtectedOperation(Landroid/content/Context;ILjava/lang/String;ZI[Ljava/lang/String;Z)Z
+HPLandroid/provider/Settings;->setInSystemServer()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
+HPLandroid/security/Credentials;->deleteAllTypesForAlias(Landroid/security/KeyStore;Ljava/lang/String;I)Z
+HPLandroid/security/Credentials;->deleteCertificateTypesForAlias(Landroid/security/KeyStore;Ljava/lang/String;I)Z
+HPLandroid/security/Credentials;->deletePrivateKeyTypeForAlias(Landroid/security/KeyStore;Ljava/lang/String;I)Z
+HPLandroid/security/Credentials;->deleteSecretKeyTypeForAlias(Landroid/security/KeyStore;Ljava/lang/String;I)Z
+HPLandroid/security/IKeyChainService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/security/IKeyChainService$Stub$Proxy;->getUserCaAliases()Landroid/content/pm/StringParceledListSlice;
+HPLandroid/security/IKeyChainService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/security/IKeyChainService;
+HPLandroid/security/IKeyChainService;->containsCaAlias(Ljava/lang/String;)Z
+HPLandroid/security/IKeyChainService;->deleteCaCertificate(Ljava/lang/String;)Z
+HPLandroid/security/IKeyChainService;->getCaCertificateChainAliases(Ljava/lang/String;Z)Ljava/util/List;
+HPLandroid/security/IKeyChainService;->getCaCertificates(Ljava/lang/String;)[B
+HPLandroid/security/IKeyChainService;->getCertificate(Ljava/lang/String;)[B
+HPLandroid/security/IKeyChainService;->getEncodedCaCertificate(Ljava/lang/String;Z)[B
+HPLandroid/security/IKeyChainService;->getSystemCaAliases()Landroid/content/pm/StringParceledListSlice;
+HPLandroid/security/IKeyChainService;->getUserCaAliases()Landroid/content/pm/StringParceledListSlice;
+HPLandroid/security/IKeyChainService;->hasGrant(ILjava/lang/String;)Z
+HPLandroid/security/IKeyChainService;->installCaCertificate([B)Ljava/lang/String;
+HPLandroid/security/IKeyChainService;->installKeyPair([B[B[BLjava/lang/String;)Z
+HPLandroid/security/IKeyChainService;->removeKeyPair(Ljava/lang/String;)Z
+HPLandroid/security/IKeyChainService;->requestPrivateKey(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/security/IKeyChainService;->reset()Z
+HPLandroid/security/IKeyChainService;->setGrant(ILjava/lang/String;Z)V
+HPLandroid/security/IKeystoreService$Stub$Proxy;->del(Ljava/lang/String;I)I
+HPLandroid/security/IKeystoreService$Stub$Proxy;->exist(Ljava/lang/String;I)I
+HPLandroid/security/IKeystoreService$Stub$Proxy;->getState(I)I
+HPLandroid/security/IKeystoreService$Stub$Proxy;->onUserPasswordChanged(ILjava/lang/String;)I
+HPLandroid/security/KeyChain$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLandroid/security/KeyChain$KeyChainConnection;-><init>(Landroid/content/Context;Landroid/content/ServiceConnection;Landroid/security/IKeyChainService;)V
+HPLandroid/security/KeyChain$KeyChainConnection;->close()V
+HPLandroid/security/KeyChain$KeyChainConnection;->getService()Landroid/security/IKeyChainService;
+HPLandroid/security/KeyStore$State;-><init>(Ljava/lang/String;I)V
+HPLandroid/security/KeyStore;->contains(Ljava/lang/String;)Z
+HPLandroid/security/KeyStore;->contains(Ljava/lang/String;I)Z
+HPLandroid/security/KeyStore;->delete(Ljava/lang/String;I)Z
+HPLandroid/security/KeyStore;->onUserPasswordChanged(ILjava/lang/String;)Z
+HPLandroid/security/KeyStore;->state(I)Landroid/security/KeyStore$State;
+HPLandroid/security/keymaster/IKeyAttestationApplicationIdProvider$Stub;-><init>()V
+HPLandroid/security/keymaster/IKeyAttestationApplicationIdProvider;->getKeyAttestationApplicationId(I)Landroid/security/keymaster/KeyAttestationApplicationId;
+HPLandroid/security/keystore/AndroidKeyStoreBCWorkaroundProvider;-><init>()V
+HPLandroid/security/keystore/AndroidKeyStoreBCWorkaroundProvider;->putAsymmetricCipherImpl(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/security/keystore/AndroidKeyStoreBCWorkaroundProvider;->putMacImpl(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/security/keystore/AndroidKeyStoreBCWorkaroundProvider;->putSignatureImpl(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/security/keystore/AndroidKeyStoreBCWorkaroundProvider;->putSymmetricCipherImpl(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->finalize()V
+HPLandroid/security/keystore/AndroidKeyStoreProvider;-><init>()V
+HPLandroid/security/keystore/AndroidKeyStoreProvider;->install()V
+HPLandroid/security/keystore/AndroidKeyStoreProvider;->putKeyFactoryImpl(Ljava/lang/String;)V
+HPLandroid/security/keystore/AndroidKeyStoreProvider;->putSecretKeyFactoryImpl(Ljava/lang/String;)V
+HPLandroid/security/keystore/AndroidKeyStoreRSACipherSpi$PKCS1Padding;->finalize()V
+HPLandroid/security/keystore/AndroidKeyStoreSpi;-><init>()V
+HPLandroid/security/keystore/AndroidKeyStoreSpi;->engineContainsAlias(Ljava/lang/String;)Z
+HPLandroid/security/keystore/AndroidKeyStoreSpi;->engineDeleteEntry(Ljava/lang/String;)V
+HPLandroid/security/keystore/AndroidKeyStoreSpi;->engineLoad(Ljava/security/KeyStore$LoadStoreParameter;)V
+HPLandroid/security/net/config/ApplicationConfig;->isCleartextTrafficPermitted(Ljava/lang/String;)Z
+HPLandroid/security/net/config/ConfigNetworkSecurityPolicy;->isCleartextTrafficPermitted(Ljava/lang/String;)Z
+HPLandroid/security/net/config/NetworkSecurityConfig;->isCleartextTrafficPermitted()Z
+HPLandroid/service/autofill/-$Lambda$svbjmB3NFhHnuZrn67G14PFSJlY;->$m$0(Landroid/os/Message;)V
+HPLandroid/service/autofill/-$Lambda$svbjmB3NFhHnuZrn67G14PFSJlY;-><init>(Ljava/lang/Object;)V
+HPLandroid/service/autofill/-$Lambda$svbjmB3NFhHnuZrn67G14PFSJlY;->executeMessage(Landroid/os/Message;)V
+HPLandroid/service/autofill/AutofillService$1;-><init>(Landroid/service/autofill/AutofillService;)V
+HPLandroid/service/autofill/AutofillService$1;->onConnectedStateChanged(Z)V
+HPLandroid/service/autofill/AutofillService$1;->onFillRequest(Landroid/service/autofill/FillRequest;Landroid/service/autofill/IFillCallback;)V
+HPLandroid/service/autofill/AutofillService;->-get0(Landroid/service/autofill/AutofillService;)Lcom/android/internal/os/HandlerCaller;
+HPLandroid/service/autofill/AutofillService;-><init>()V
+HPLandroid/service/autofill/AutofillService;->getFillEventHistory()Landroid/service/autofill/FillEventHistory;
+HPLandroid/service/autofill/AutofillService;->lambda$-android_service_autofill_AutofillService_22062(Landroid/os/Message;)V
+HPLandroid/service/autofill/AutofillService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HPLandroid/service/autofill/AutofillService;->onCreate()V
+HPLandroid/service/autofill/AutofillService;->onFillRequest(Landroid/service/autofill/FillRequest;Landroid/os/CancellationSignal;Landroid/service/autofill/FillCallback;)V
+HPLandroid/service/autofill/AutofillService;->onSaveRequest(Landroid/service/autofill/SaveRequest;Landroid/service/autofill/SaveCallback;)V
+HPLandroid/service/autofill/AutofillServiceInfo;-><init>(Landroid/content/pm/PackageManager;Landroid/content/ComponentName;I)V
+HPLandroid/service/autofill/AutofillServiceInfo;-><init>(Landroid/content/pm/PackageManager;Landroid/content/pm/ServiceInfo;)V
+HPLandroid/service/autofill/AutofillServiceInfo;->getMetaDataArray(Landroid/content/pm/PackageManager;Landroid/content/pm/ServiceInfo;)Landroid/content/res/TypedArray;
+HPLandroid/service/autofill/AutofillServiceInfo;->getServiceInfo()Landroid/content/pm/ServiceInfo;
+HPLandroid/service/autofill/AutofillServiceInfo;->getServiceInfoOrThrow(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;
+HPLandroid/service/autofill/FillCallback;-><init>(Landroid/service/autofill/IFillCallback;I)V
+HPLandroid/service/autofill/FillCallback;->assertNotCalled()V
+HPLandroid/service/autofill/FillCallback;->onSuccess(Landroid/service/autofill/FillResponse;)V
+HPLandroid/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;
+HPLandroid/service/autofill/FillContext;-><init>(ILandroid/app/assist/AssistStructure;)V
+HPLandroid/service/autofill/FillContext;-><init>(Landroid/os/Parcel;)V
+HPLandroid/service/autofill/FillContext;-><init>(Landroid/os/Parcel;Landroid/service/autofill/FillContext;)V
+HPLandroid/service/autofill/FillContext;->findViewNodesByAutofillIds([Landroid/view/autofill/AutofillId;)[Landroid/app/assist/AssistStructure$ViewNode;
+HPLandroid/service/autofill/FillContext;->getStructure()Landroid/app/assist/AssistStructure;
+HPLandroid/service/autofill/FillContext;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/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;
+HPLandroid/service/autofill/FillRequest;-><init>(ILjava/util/ArrayList;Landroid/os/Bundle;I)V
+HPLandroid/service/autofill/FillRequest;-><init>(Landroid/os/Parcel;)V
+HPLandroid/service/autofill/FillRequest;-><init>(Landroid/os/Parcel;Landroid/service/autofill/FillRequest;)V
+HPLandroid/service/autofill/FillRequest;->getFillContexts()Ljava/util/List;
+HPLandroid/service/autofill/FillRequest;->getFlags()I
+HPLandroid/service/autofill/FillRequest;->getId()I
+HPLandroid/service/autofill/FillRequest;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/service/autofill/IAutoFillService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/service/autofill/IAutoFillService$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/service/autofill/IAutoFillService$Stub$Proxy;->onConnectedStateChanged(Z)V
+HPLandroid/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;
+HPLandroid/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
+HPLandroid/service/autofill/IAutoFillService;->onConnectedStateChanged(Z)V
+HPLandroid/service/autofill/IAutoFillService;->onFillRequest(Landroid/service/autofill/FillRequest;Landroid/service/autofill/IFillCallback;)V
+HPLandroid/service/autofill/IAutoFillService;->onSaveRequest(Landroid/service/autofill/SaveRequest;Landroid/service/autofill/ISaveCallback;)V
+HPLandroid/service/autofill/IFillCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/service/autofill/IFillCallback$Stub$Proxy;->onCancellable(Landroid/os/ICancellationSignal;)V
+HPLandroid/service/autofill/IFillCallback$Stub$Proxy;->onSuccess(Landroid/service/autofill/FillResponse;)V
+HPLandroid/service/autofill/IFillCallback$Stub;-><init>()V
+HPLandroid/service/autofill/IFillCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/service/autofill/IFillCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/autofill/IFillCallback;
+HPLandroid/service/autofill/IFillCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/service/autofill/IFillCallback;->onCancellable(Landroid/os/ICancellationSignal;)V
+HPLandroid/service/autofill/IFillCallback;->onFailure(Ljava/lang/CharSequence;)V
+HPLandroid/service/autofill/IFillCallback;->onSuccess(Landroid/service/autofill/FillResponse;)V
+HPLandroid/service/dreams/DreamManagerInternal;-><init>()V
+HPLandroid/service/dreams/DreamManagerInternal;->isDreaming()Z
+HPLandroid/service/dreams/DreamManagerInternal;->startDream(Z)V
+HPLandroid/service/dreams/DreamManagerInternal;->stopDream(Z)V
+HPLandroid/service/dreams/IDreamManager$Stub$Proxy;->awaken()V
+HPLandroid/service/dreams/IDreamManager$Stub$Proxy;->isDreaming()Z
+HPLandroid/service/dreams/IDreamManager$Stub;-><init>()V
+HPLandroid/service/dreams/IDreamManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/service/gatekeeper/IGateKeeperService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/service/gatekeeper/IGateKeeperService$Stub$Proxy;->clearSecureUserId(I)V
+HPLandroid/service/gatekeeper/IGateKeeperService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/gatekeeper/IGateKeeperService;
+HPLandroid/service/gatekeeper/IGateKeeperService;->clearSecureUserId(I)V
+HPLandroid/service/gatekeeper/IGateKeeperService;->enroll(I[B[B[B)Landroid/service/gatekeeper/GateKeeperResponse;
+HPLandroid/service/gatekeeper/IGateKeeperService;->getSecureUserId(I)J
+HPLandroid/service/gatekeeper/IGateKeeperService;->reportDeviceSetupComplete()V
+HPLandroid/service/gatekeeper/IGateKeeperService;->verify(I[B[B)Landroid/service/gatekeeper/GateKeeperResponse;
+HPLandroid/service/gatekeeper/IGateKeeperService;->verifyChallenge(IJ[B[B)Landroid/service/gatekeeper/GateKeeperResponse;
+HPLandroid/service/notification/Condition;->equals(Ljava/lang/Object;)Z
+HPLandroid/service/notification/Condition;->hashCode()I
+HPLandroid/service/notification/Condition;->stateToString(I)Ljava/lang/String;
+HPLandroid/service/notification/Condition;->toString()Ljava/lang/String;
+HPLandroid/service/notification/Condition;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/service/notification/ConditionProviderService$Provider;->onSubscribe(Landroid/net/Uri;)V
+HPLandroid/service/notification/ConditionProviderService;->getNotificationInterface()Landroid/app/INotificationManager;
+HPLandroid/service/notification/ConditionProviderService;->notifyCondition(Landroid/service/notification/Condition;)V
+HPLandroid/service/notification/ConditionProviderService;->notifyConditions([Landroid/service/notification/Condition;)V
+HPLandroid/service/notification/IConditionProvider$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/service/notification/IConditionProvider$Stub$Proxy;->onConnected()V
+HPLandroid/service/notification/IConditionProvider$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/service/notification/IConditionProvider$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/notification/IConditionProvider;
+HPLandroid/service/notification/INotificationListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/service/notification/INotificationListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/service/notification/INotificationListener$Stub$Proxy;->onListenerConnected(Landroid/service/notification/NotificationRankingUpdate;)V
+HPLandroid/service/notification/INotificationListener$Stub$Proxy;->onNotificationPosted(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;)V
+HPLandroid/service/notification/INotificationListener$Stub$Proxy;->onNotificationRemoved(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;I)V
+HPLandroid/service/notification/INotificationListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/notification/INotificationListener;
+HPLandroid/service/notification/IStatusBarNotificationHolder$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/service/notification/IStatusBarNotificationHolder$Stub$Proxy;->get()Landroid/service/notification/StatusBarNotification;
+HPLandroid/service/notification/IStatusBarNotificationHolder$Stub;-><init>()V
+HPLandroid/service/notification/IStatusBarNotificationHolder$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/service/notification/IStatusBarNotificationHolder$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/notification/IStatusBarNotificationHolder;
+HPLandroid/service/notification/IStatusBarNotificationHolder$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/service/notification/IStatusBarNotificationHolder;->get()Landroid/service/notification/StatusBarNotification;
+HPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationPosted(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;)V
+HPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationRemoved(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;I)V
+HPLandroid/service/notification/NotificationListenerService$Ranking;->getChannel()Landroid/app/NotificationChannel;
+HPLandroid/service/notification/NotificationListenerService$Ranking;->getImportance()I
+HPLandroid/service/notification/NotificationListenerService$Ranking;->getOverrideGroupKey()Ljava/lang/String;
+HPLandroid/service/notification/NotificationListenerService$Ranking;->getRank()I
+HPLandroid/service/notification/NotificationListenerService$Ranking;->getSnoozeCriteria()Ljava/util/List;
+HPLandroid/service/notification/NotificationListenerService$Ranking;->getSuppressedVisualEffects()I
+HPLandroid/service/notification/NotificationListenerService$Ranking;->getVisibilityOverride()I
+HPLandroid/service/notification/NotificationListenerService$Ranking;->isAmbient()Z
+HPLandroid/service/notification/NotificationListenerService;->-get4(Landroid/service/notification/NotificationListenerService;)Landroid/service/notification/NotificationListenerService$RankingMap;
+HPLandroid/service/notification/NotificationListenerService;->-wrap0(Landroid/service/notification/NotificationListenerService;Landroid/app/Notification;)V
+HPLandroid/service/notification/NotificationListenerService;->-wrap1(Landroid/service/notification/NotificationListenerService;Landroid/app/Notification;)V
+HPLandroid/service/notification/NotificationListenerService;->getActiveNotifications([Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification;
+HPLandroid/service/notification/NotificationListenerService;->onNotificationPosted(Landroid/service/notification/StatusBarNotification;)V
+HPLandroid/service/notification/NotificationListenerService;->onNotificationPosted(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)V
+HPLandroid/service/notification/NotificationListenerService;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;)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;->setNotificationsShown([Ljava/lang/String;)V
+HPLandroid/service/notification/NotificationRankingUpdate;-><init>([Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/Bundle;[ILandroid/os/Bundle;Landroid/os/Bundle;Landroid/os/Bundle;Landroid/os/Bundle;Landroid/os/Bundle;Landroid/os/Bundle;)V
+HPLandroid/service/notification/NotificationRankingUpdate;->writeToParcel(Landroid/os/Parcel;I)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;
+HPLandroid/service/notification/StatusBarNotification;->getGroup()Ljava/lang/String;
+HPLandroid/service/notification/StatusBarNotification;->getGroupKey()Ljava/lang/String;
+HPLandroid/service/notification/StatusBarNotification;->getId()I
+HPLandroid/service/notification/StatusBarNotification;->getInitialPid()I
+HPLandroid/service/notification/StatusBarNotification;->getOverrideGroupKey()Ljava/lang/String;
+HPLandroid/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;->isAppGroup()Z
+HPLandroid/service/notification/StatusBarNotification;->isClearable()Z
+HPLandroid/service/notification/StatusBarNotification;->isGroup()Z
+HPLandroid/service/notification/StatusBarNotification;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/service/notification/ZenModeConfig$Diff;-><init>()V
+HPLandroid/service/notification/ZenModeConfig$Diff;->addLine(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Landroid/service/notification/ZenModeConfig$Diff;
+HPLandroid/service/notification/ZenModeConfig$Diff;->addLine(Ljava/lang/String;Ljava/lang/String;)Landroid/service/notification/ZenModeConfig$Diff;
+HPLandroid/service/notification/ZenModeConfig$Diff;->addLine(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Landroid/service/notification/ZenModeConfig$Diff;
+HPLandroid/service/notification/ZenModeConfig$Diff;->toString()Ljava/lang/String;
+HPLandroid/service/notification/ZenModeConfig$EventInfo;-><init>()V
+HPLandroid/service/notification/ZenModeConfig$ScheduleInfo;-><init>()V
+HPLandroid/service/notification/ZenModeConfig$ZenRule;->-wrap0(Landroid/service/notification/ZenModeConfig$Diff;Ljava/lang/String;Landroid/service/notification/ZenModeConfig$ZenRule;Landroid/service/notification/ZenModeConfig$ZenRule;)V
+HPLandroid/service/notification/ZenModeConfig$ZenRule;-><init>()V
+HPLandroid/service/notification/ZenModeConfig$ZenRule;->appendDiff(Landroid/service/notification/ZenModeConfig$Diff;Ljava/lang/String;Landroid/service/notification/ZenModeConfig$ZenRule;)V
+HPLandroid/service/notification/ZenModeConfig$ZenRule;->appendDiff(Landroid/service/notification/ZenModeConfig$Diff;Ljava/lang/String;Landroid/service/notification/ZenModeConfig$ZenRule;Landroid/service/notification/ZenModeConfig$ZenRule;)V
+HPLandroid/service/notification/ZenModeConfig$ZenRule;->equals(Ljava/lang/Object;)Z
+HPLandroid/service/notification/ZenModeConfig$ZenRule;->hashCode()I
+HPLandroid/service/notification/ZenModeConfig$ZenRule;->toString()Ljava/lang/String;
+HPLandroid/service/notification/ZenModeConfig$ZenRule;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/service/notification/ZenModeConfig;-><init>()V
+HPLandroid/service/notification/ZenModeConfig;->addKeys(Landroid/util/ArraySet;Landroid/util/ArrayMap;)V
+HPLandroid/service/notification/ZenModeConfig;->copy()Landroid/service/notification/ZenModeConfig;
+HPLandroid/service/notification/ZenModeConfig;->diff(Landroid/service/notification/ZenModeConfig;)Landroid/service/notification/ZenModeConfig$Diff;
+HPLandroid/service/notification/ZenModeConfig;->diff(Landroid/service/notification/ZenModeConfig;Landroid/service/notification/ZenModeConfig;)Landroid/service/notification/ZenModeConfig$Diff;
+HPLandroid/service/notification/ZenModeConfig;->equals(Ljava/lang/Object;)Z
+HPLandroid/service/notification/ZenModeConfig;->hashCode()I
+HPLandroid/service/notification/ZenModeConfig;->isValid()Z
+HPLandroid/service/notification/ZenModeConfig;->isValidAutomaticRule(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
+HPLandroid/service/notification/ZenModeConfig;->isValidCountdownConditionId(Landroid/net/Uri;)Z
+HPLandroid/service/notification/ZenModeConfig;->isValidEventConditionId(Landroid/net/Uri;)Z
+HPLandroid/service/notification/ZenModeConfig;->isValidHour(I)Z
+HPLandroid/service/notification/ZenModeConfig;->isValidManualRule(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
+HPLandroid/service/notification/ZenModeConfig;->isValidMinute(I)Z
+HPLandroid/service/notification/ZenModeConfig;->isValidScheduleConditionId(Landroid/net/Uri;)Z
+HPLandroid/service/notification/ZenModeConfig;->isValidSource(I)Z
+HPLandroid/service/notification/ZenModeConfig;->readConditionXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/service/notification/Condition;
+HPLandroid/service/notification/ZenModeConfig;->readRuleXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/service/notification/ZenModeConfig$ZenRule;
+HPLandroid/service/notification/ZenModeConfig;->readXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/service/notification/ZenModeConfig;
+HPLandroid/service/notification/ZenModeConfig;->safeBoolean(Ljava/lang/String;Z)Z
+HPLandroid/service/notification/ZenModeConfig;->safeBoolean(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Z)Z
+HPLandroid/service/notification/ZenModeConfig;->safeComponentName(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/content/ComponentName;
+HPLandroid/service/notification/ZenModeConfig;->safeInt(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
+HPLandroid/service/notification/ZenModeConfig;->safeLong(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;J)J
+HPLandroid/service/notification/ZenModeConfig;->safeUri(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/net/Uri;
+HPLandroid/service/notification/ZenModeConfig;->sameCondition(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
+HPLandroid/service/notification/ZenModeConfig;->sourceToPrioritySenders(II)I
+HPLandroid/service/notification/ZenModeConfig;->sourceToString(I)Ljava/lang/String;
+HPLandroid/service/notification/ZenModeConfig;->toDayList([I)Ljava/lang/String;
+HPLandroid/service/notification/ZenModeConfig;->toEventConditionId(Landroid/service/notification/ZenModeConfig$EventInfo;)Landroid/net/Uri;
+HPLandroid/service/notification/ZenModeConfig;->toNotificationPolicy()Landroid/app/NotificationManager$Policy;
+HPLandroid/service/notification/ZenModeConfig;->toScheduleConditionId(Landroid/service/notification/ZenModeConfig$ScheduleInfo;)Landroid/net/Uri;
+HPLandroid/service/notification/ZenModeConfig;->toString()Ljava/lang/String;
+HPLandroid/service/notification/ZenModeConfig;->tryParseDayList(Ljava/lang/String;Ljava/lang/String;)[I
+HPLandroid/service/notification/ZenModeConfig;->tryParseEventConditionId(Landroid/net/Uri;)Landroid/service/notification/ZenModeConfig$EventInfo;
+HPLandroid/service/notification/ZenModeConfig;->tryParseHourAndMinute(Ljava/lang/String;)[I
+HPLandroid/service/notification/ZenModeConfig;->tryParseInt(Ljava/lang/String;I)I
+HPLandroid/service/notification/ZenModeConfig;->tryParseLong(Ljava/lang/String;J)J
+HPLandroid/service/notification/ZenModeConfig;->tryParseScheduleConditionId(Landroid/net/Uri;)Landroid/service/notification/ZenModeConfig$ScheduleInfo;
+HPLandroid/service/notification/ZenModeConfig;->tryParseZenMode(Ljava/lang/String;I)I
+HPLandroid/service/notification/ZenModeConfig;->writeConditionXml(Landroid/service/notification/Condition;Lorg/xmlpull/v1/XmlSerializer;)V
+HPLandroid/service/notification/ZenModeConfig;->writeRuleXml(Landroid/service/notification/ZenModeConfig$ZenRule;Lorg/xmlpull/v1/XmlSerializer;)V
+HPLandroid/service/notification/ZenModeConfig;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/service/notification/ZenModeConfig;->writeXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLandroid/service/oemlock/IOemLockService$Stub;-><init>()V
+HPLandroid/service/oemlock/IOemLockService;->canUserAllowOemUnlock()Z
+HPLandroid/service/oemlock/IOemLockService;->isDeviceOemUnlocked()Z
+HPLandroid/service/oemlock/IOemLockService;->isOemUnlockAllowed()Z
+HPLandroid/service/oemlock/IOemLockService;->isOemUnlockAllowedByCarrier()Z
+HPLandroid/service/oemlock/IOemLockService;->isOemUnlockAllowedByUser()Z
+HPLandroid/service/oemlock/IOemLockService;->setOemUnlockAllowedByCarrier(Z[B)V
+HPLandroid/service/oemlock/IOemLockService;->setOemUnlockAllowedByUser(Z)V
+HPLandroid/service/persistentdata/IPersistentDataBlockService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/service/persistentdata/IPersistentDataBlockService$Stub;-><init>()V
+HPLandroid/service/persistentdata/IPersistentDataBlockService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/persistentdata/IPersistentDataBlockService;
+HPLandroid/service/persistentdata/IPersistentDataBlockService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/service/persistentdata/IPersistentDataBlockService;->getDataBlockSize()I
+HPLandroid/service/persistentdata/IPersistentDataBlockService;->getFlashLockState()I
+HPLandroid/service/persistentdata/IPersistentDataBlockService;->getMaximumDataBlockSize()J
+HPLandroid/service/persistentdata/IPersistentDataBlockService;->getOemUnlockEnabled()Z
+HPLandroid/service/persistentdata/IPersistentDataBlockService;->hasFrpCredentialHandle()Z
+HPLandroid/service/persistentdata/IPersistentDataBlockService;->read()[B
+HPLandroid/service/persistentdata/IPersistentDataBlockService;->setOemUnlockEnabled(Z)V
+HPLandroid/service/persistentdata/IPersistentDataBlockService;->wipe()V
+HPLandroid/service/persistentdata/IPersistentDataBlockService;->write([B)I
+HPLandroid/service/persistentdata/PersistentDataBlockManager;-><init>(Landroid/service/persistentdata/IPersistentDataBlockService;)V
+HPLandroid/service/textservice/SpellCheckerService$InternalISpellCheckerSession;-><init>(Ljava/lang/String;Lcom/android/internal/textservice/ISpellCheckerSessionListener;Landroid/os/Bundle;Landroid/service/textservice/SpellCheckerService$Session;)V
+HPLandroid/service/textservice/SpellCheckerService$InternalISpellCheckerSession;->getLocale()Ljava/lang/String;
+HPLandroid/service/textservice/SpellCheckerService$InternalISpellCheckerSession;->onCancel()V
+HPLandroid/service/textservice/SpellCheckerService$InternalISpellCheckerSession;->onClose()V
+HPLandroid/service/textservice/SpellCheckerService$InternalISpellCheckerSession;->onGetSentenceSuggestionsMultiple([Landroid/view/textservice/TextInfo;I)V
+HPLandroid/service/textservice/SpellCheckerService$SentenceLevelAdapter$SentenceTextInfoParams;-><init>(Landroid/view/textservice/TextInfo;Ljava/util/ArrayList;)V
+HPLandroid/service/textservice/SpellCheckerService$SentenceLevelAdapter$SentenceWordItem;-><init>(Landroid/view/textservice/TextInfo;II)V
+HPLandroid/service/textservice/SpellCheckerService$SentenceLevelAdapter;->-wrap0(Landroid/service/textservice/SpellCheckerService$SentenceLevelAdapter;Landroid/view/textservice/TextInfo;)Landroid/service/textservice/SpellCheckerService$SentenceLevelAdapter$SentenceTextInfoParams;
+HPLandroid/service/textservice/SpellCheckerService$SentenceLevelAdapter;-><init>(Ljava/util/Locale;)V
+HPLandroid/service/textservice/SpellCheckerService$SentenceLevelAdapter;->getSplitWords(Landroid/view/textservice/TextInfo;)Landroid/service/textservice/SpellCheckerService$SentenceLevelAdapter$SentenceTextInfoParams;
+HPLandroid/service/textservice/SpellCheckerService$SentenceLevelAdapter;->reconstructSuggestions(Landroid/service/textservice/SpellCheckerService$SentenceLevelAdapter$SentenceTextInfoParams;[Landroid/view/textservice/SuggestionsInfo;)Landroid/view/textservice/SentenceSuggestionsInfo;
+HPLandroid/service/textservice/SpellCheckerService$Session;-><init>()V
+HPLandroid/service/textservice/SpellCheckerService$Session;->getLocale()Ljava/lang/String;
+HPLandroid/service/textservice/SpellCheckerService$Session;->onCancel()V
+HPLandroid/service/textservice/SpellCheckerService$Session;->onClose()V
+HPLandroid/service/textservice/SpellCheckerService$Session;->onGetSentenceSuggestionsMultiple([Landroid/view/textservice/TextInfo;I)[Landroid/view/textservice/SentenceSuggestionsInfo;
+HPLandroid/service/textservice/SpellCheckerService$Session;->onGetSuggestions(Landroid/view/textservice/TextInfo;I)Landroid/view/textservice/SuggestionsInfo;
+HPLandroid/service/textservice/SpellCheckerService$Session;->onGetSuggestionsMultiple([Landroid/view/textservice/TextInfo;IZ)[Landroid/view/textservice/SuggestionsInfo;
+HPLandroid/service/textservice/SpellCheckerService$Session;->setInternalISpellCheckerSession(Landroid/service/textservice/SpellCheckerService$InternalISpellCheckerSession;)V
+HPLandroid/service/textservice/SpellCheckerService$SpellCheckerServiceBinder;-><init>(Landroid/service/textservice/SpellCheckerService;)V
+HPLandroid/service/textservice/SpellCheckerService$SpellCheckerServiceBinder;->getISpellCheckerSession(Ljava/lang/String;Lcom/android/internal/textservice/ISpellCheckerSessionListener;Landroid/os/Bundle;Lcom/android/internal/textservice/ISpellCheckerServiceCallback;)V
+HPLandroid/service/textservice/SpellCheckerService;-><init>()V
+HPLandroid/service/textservice/SpellCheckerService;->createSession()Landroid/service/textservice/SpellCheckerService$Session;
+HPLandroid/service/textservice/SpellCheckerService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HPLandroid/service/voice/IVoiceInteractionService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/service/voice/IVoiceInteractionService$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/service/voice/IVoiceInteractionService$Stub$Proxy;->ready()V
+HPLandroid/service/voice/IVoiceInteractionService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/voice/IVoiceInteractionService;
+HPLandroid/service/voice/VoiceInteractionManagerInternal;-><init>()V
+HPLandroid/service/voice/VoiceInteractionManagerInternal;->startLocalVoiceInteraction(Landroid/os/IBinder;Landroid/os/Bundle;)V
+HPLandroid/service/voice/VoiceInteractionManagerInternal;->stopLocalVoiceInteraction(Landroid/os/IBinder;)V
+HPLandroid/service/voice/VoiceInteractionManagerInternal;->supportsLocalVoiceInteraction()Z
+HPLandroid/service/voice/VoiceInteractionServiceInfo;-><init>(Landroid/content/pm/PackageManager;Landroid/content/ComponentName;I)V
+HPLandroid/service/voice/VoiceInteractionServiceInfo;-><init>(Landroid/content/pm/PackageManager;Landroid/content/pm/ServiceInfo;)V
+HPLandroid/service/voice/VoiceInteractionServiceInfo;->getParseError()Ljava/lang/String;
+HPLandroid/service/voice/VoiceInteractionServiceInfo;->getServiceInfoOrThrow(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;
+HPLandroid/service/voice/VoiceInteractionServiceInfo;->getSessionService()Ljava/lang/String;
+HPLandroid/service/voice/VoiceInteractionServiceInfo;->getSupportsAssist()Z
+HPLandroid/service/voice/VoiceInteractionServiceInfo;->getSupportsLaunchFromKeyguard()Z
+HPLandroid/service/vr/IPersistentVrStateCallbacks$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/service/vr/IPersistentVrStateCallbacks$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/service/vr/IPersistentVrStateCallbacks$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/service/vr/IPersistentVrStateCallbacks$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/vr/IPersistentVrStateCallbacks;
+HPLandroid/service/vr/IVrManager$Stub$Proxy;->unregisterListener(Landroid/service/vr/IVrStateCallbacks;)V
+HPLandroid/service/vr/IVrManager$Stub;-><init>()V
+HPLandroid/service/vr/IVrManager$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/service/vr/IVrManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/service/vr/IVrStateCallbacks$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/service/vr/IVrStateCallbacks$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/service/vr/IVrStateCallbacks$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/vr/IVrStateCallbacks;
+HPLandroid/service/wallpaper/-$Lambda$htiXs5zQinBXs3seMVLgh3fgmis;->$m$0()Ljava/lang/Object;
+HPLandroid/service/wallpaper/-$Lambda$htiXs5zQinBXs3seMVLgh3fgmis;->get()Ljava/lang/Object;
+HPLandroid/service/wallpaper/IWallpaperConnection$Stub;-><init>()V
+HPLandroid/service/wallpaper/IWallpaperConnection$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/service/wallpaper/IWallpaperConnection$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/service/wallpaper/IWallpaperEngine$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/service/wallpaper/IWallpaperEngine$Stub$Proxy;->requestWallpaperColors()V
+HPLandroid/service/wallpaper/IWallpaperEngine$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/wallpaper/IWallpaperEngine;
+HPLandroid/service/wallpaper/IWallpaperService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/service/wallpaper/IWallpaperService$Stub$Proxy;->attach(Landroid/service/wallpaper/IWallpaperConnection;Landroid/os/IBinder;IZIILandroid/graphics/Rect;)V
+HPLandroid/service/wallpaper/IWallpaperService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/wallpaper/IWallpaperService;
+HPLandroid/service/wallpaper/WallpaperService$Engine$2;->dispatchAppVisibility(Z)V
+HPLandroid/service/wallpaper/WallpaperService$Engine$2;->resized(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZI)V
+HPLandroid/service/wallpaper/WallpaperService$Engine$3;->onDisplayChanged(I)V
+HPLandroid/service/wallpaper/WallpaperService$Engine$WallpaperInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;I)V
+HPLandroid/service/wallpaper/WallpaperService$Engine;->-android_service_wallpaper_WallpaperService$Engine-mthref-1()Ljava/lang/Long;
+HPLandroid/service/wallpaper/WallpaperService$Engine;->-wrap0(Landroid/service/wallpaper/WallpaperService$Engine;Landroid/view/MotionEvent;)V
+HPLandroid/service/wallpaper/WallpaperService$Engine;->dispatchPointer(Landroid/view/MotionEvent;)V
+HPLandroid/service/wallpaper/WallpaperService$Engine;->doVisibilityChanged(Z)V
+HPLandroid/service/wallpaper/WallpaperService$Engine;->notifyColorsChanged()V
+HPLandroid/service/wallpaper/WallpaperService$Engine;->reportVisibility()V
+HPLandroid/speech/tts/AudioPlaybackHandler;->quit()V
+HPLandroid/speech/tts/AudioPlaybackHandler;->removeAllMessages()V
+HPLandroid/speech/tts/AudioPlaybackHandler;->stop(Landroid/speech/tts/PlaybackQueueItem;)V
+HPLandroid/speech/tts/TextToSpeechService$1;->isLanguageAvailable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
+HPLandroid/speech/tts/TextToSpeechService$CallbackMap;->kill()V
+HPLandroid/speech/tts/TextToSpeechService$CallbackMap;->onCallbackDied(Landroid/os/IInterface;Ljava/lang/Object;)V
+HPLandroid/speech/tts/TextToSpeechService$CallbackMap;->onCallbackDied(Landroid/speech/tts/ITextToSpeechCallback;Ljava/lang/Object;)V
+HPLandroid/speech/tts/TextToSpeechService$SynthHandler;->quit()V
+HPLandroid/speech/tts/TextToSpeechService$SynthHandler;->setCurrentSpeechItem(Landroid/speech/tts/TextToSpeechService$SpeechItem;)Landroid/speech/tts/TextToSpeechService$SpeechItem;
+HPLandroid/speech/tts/TextToSpeechService;->onDestroy()V
+HPLandroid/system/ErrnoException;->getMessage()Ljava/lang/String;
+HPLandroid/system/ErrnoException;->rethrowAsIOException()Ljava/io/IOException;
+HPLandroid/system/GaiException;->rethrowAsUnknownHostException(Ljava/lang/String;)Ljava/net/UnknownHostException;
+HPLandroid/system/NetlinkSocketAddress;-><init>(II)V
+HPLandroid/system/Os;->accept(Ljava/io/FileDescriptor;Ljava/net/InetSocketAddress;)Ljava/io/FileDescriptor;
+HPLandroid/system/Os;->access(Ljava/lang/String;I)Z
+HPLandroid/system/Os;->bind(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
+HPLandroid/system/Os;->bind(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V
+HPLandroid/system/Os;->connect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
+HPLandroid/system/Os;->fchmod(Ljava/io/FileDescriptor;I)V
+HPLandroid/system/Os;->fchown(Ljava/io/FileDescriptor;II)V
+HPLandroid/system/Os;->fstat(Ljava/io/FileDescriptor;)Landroid/system/StructStat;
+HPLandroid/system/Os;->fsync(Ljava/io/FileDescriptor;)V
+HPLandroid/system/Os;->getpeername(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;
+HPLandroid/system/Os;->getxattr(Ljava/lang/String;Ljava/lang/String;)[B
+HPLandroid/system/Os;->mlock(JJ)V
+HPLandroid/system/Os;->mmap(JJIILjava/io/FileDescriptor;J)J
+HPLandroid/system/Os;->munlock(JJ)V
+HPLandroid/system/Os;->munmap(JJ)V
+HPLandroid/system/Os;->pipe()[Ljava/io/FileDescriptor;
+HPLandroid/system/Os;->posix_fallocate(Ljava/io/FileDescriptor;JJ)V
+HPLandroid/system/Os;->read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
+HPLandroid/system/Os;->read(Ljava/io/FileDescriptor;[BII)I
+HPLandroid/system/Os;->readlink(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/system/Os;->rename(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/system/Os;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/SocketAddress;)I
+HPLandroid/system/Os;->setsockoptIfreq(Ljava/io/FileDescriptor;IILjava/lang/String;)V
+HPLandroid/system/Os;->setsockoptInt(Ljava/io/FileDescriptor;III)V
+HPLandroid/system/Os;->setsockoptTimeval(Ljava/io/FileDescriptor;IILandroid/system/StructTimeval;)V
+HPLandroid/system/Os;->socketpair(IIILjava/io/FileDescriptor;Ljava/io/FileDescriptor;)V
+HPLandroid/system/Os;->write(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
+HPLandroid/system/OsConstants;->S_ISREG(I)Z
+HPLandroid/system/OsConstants;->errnoName(I)Ljava/lang/String;
+HPLandroid/system/PacketSocketAddress;-><init>(I[B)V
+HPLandroid/system/PacketSocketAddress;-><init>(SI)V
+HPLandroid/system/PacketSocketAddress;-><init>(SISB[B)V
+HPLandroid/system/StructGroupReq;-><init>(ILjava/net/InetAddress;)V
+HPLandroid/system/StructTimeval;-><init>(JJ)V
+HPLandroid/system/StructTimeval;->fromMillis(J)Landroid/system/StructTimeval;
+HPLandroid/system/UnixSocketAddress;-><init>([B)V
+HPLandroid/system/UnixSocketAddress;->createFileSystem(Ljava/lang/String;)Landroid/system/UnixSocketAddress;
+HPLandroid/telecom/-$Lambda$afyb_ODGzn3xMew6fjs8ANSIdVo;->$m$0()Ljava/lang/String;
+HPLandroid/telecom/-$Lambda$afyb_ODGzn3xMew6fjs8ANSIdVo;-><init>()V
+HPLandroid/telecom/-$Lambda$afyb_ODGzn3xMew6fjs8ANSIdVo;->getSessionId()Ljava/lang/String;
+HPLandroid/telecom/AudioState$1;-><init>()V
+HPLandroid/telecom/AudioState;-><init>(Landroid/telecom/CallAudioState;)V
+HPLandroid/telecom/Call$1;-><init>(Landroid/telecom/Call;Landroid/telecom/Call$Callback;Landroid/telecom/Call;I)V
+HPLandroid/telecom/Call$1;->run()V
+HPLandroid/telecom/Call$4;-><init>(Landroid/telecom/Call;Landroid/telecom/Call$Callback;Landroid/telecom/Call;Landroid/telecom/Call$Details;)V
+HPLandroid/telecom/Call$4;->run()V
+HPLandroid/telecom/Call$8;-><init>(Landroid/telecom/Call;Landroid/telecom/Call$Callback;Landroid/telecom/Call;Landroid/telecom/CallbackRecord;)V
+HPLandroid/telecom/Call$8;->run()V
+HPLandroid/telecom/Call$Callback;-><init>()V
+HPLandroid/telecom/Call$Callback;->onCallDestroyed(Landroid/telecom/Call;)V
+HPLandroid/telecom/Call$Callback;->onStateChanged(Landroid/telecom/Call;I)V
+HPLandroid/telecom/Call$Details;-><init>(Ljava/lang/String;Landroid/net/Uri;ILjava/lang/String;ILandroid/telecom/PhoneAccountHandle;IILandroid/telecom/DisconnectCause;JLandroid/telecom/GatewayInfo;ILandroid/telecom/StatusHints;Landroid/os/Bundle;Landroid/os/Bundle;J)V
+HPLandroid/telecom/Call$Details;->can(I)Z
+HPLandroid/telecom/Call$Details;->can(II)Z
+HPLandroid/telecom/Call$Details;->capabilitiesToString(I)Ljava/lang/String;
+HPLandroid/telecom/Call$Details;->createFromParcelableCall(Landroid/telecom/ParcelableCall;)Landroid/telecom/Call$Details;
+HPLandroid/telecom/Call$Details;->equals(Ljava/lang/Object;)Z
+HPLandroid/telecom/Call$Details;->getAccountHandle()Landroid/telecom/PhoneAccountHandle;
+HPLandroid/telecom/Call$Details;->getCallCapabilities()I
+HPLandroid/telecom/Call$Details;->getCallProperties()I
+HPLandroid/telecom/Call$Details;->getCallerDisplayName()Ljava/lang/String;
+HPLandroid/telecom/Call$Details;->getCallerDisplayNamePresentation()I
+HPLandroid/telecom/Call$Details;->getConnectTimeMillis()J
+HPLandroid/telecom/Call$Details;->getDisconnectCause()Landroid/telecom/DisconnectCause;
+HPLandroid/telecom/Call$Details;->getExtras()Landroid/os/Bundle;
+HPLandroid/telecom/Call$Details;->getGatewayInfo()Landroid/telecom/GatewayInfo;
+HPLandroid/telecom/Call$Details;->getHandle()Landroid/net/Uri;
+HPLandroid/telecom/Call$Details;->getHandlePresentation()I
+HPLandroid/telecom/Call$Details;->getIntentExtras()Landroid/os/Bundle;
+HPLandroid/telecom/Call$Details;->getStatusHints()Landroid/telecom/StatusHints;
+HPLandroid/telecom/Call$Details;->getVideoState()I
+HPLandroid/telecom/Call$Details;->hasProperty(I)Z
+HPLandroid/telecom/Call$Details;->hasProperty(II)Z
+HPLandroid/telecom/Call$Details;->propertiesToString(I)Ljava/lang/String;
+HPLandroid/telecom/Call$Details;->toString()Ljava/lang/String;
+HPLandroid/telecom/Call;->-get0(Landroid/telecom/Call;)Ljava/util/List;
+HPLandroid/telecom/Call;->-get1(Landroid/telecom/Call;)Landroid/telecom/Phone;
+HPLandroid/telecom/Call;-><init>(Landroid/telecom/Phone;Ljava/lang/String;Landroid/telecom/InCallAdapter;ILjava/lang/String;I)V
+HPLandroid/telecom/Call;->fireCallDestroyed()V
+HPLandroid/telecom/Call;->fireDetailsChanged(Landroid/telecom/Call$Details;)V
+HPLandroid/telecom/Call;->fireStateChanged(I)V
+HPLandroid/telecom/Call;->getChildren()Ljava/util/List;
+HPLandroid/telecom/Call;->getConferenceableCalls()Ljava/util/List;
+HPLandroid/telecom/Call;->getDetails()Landroid/telecom/Call$Details;
+HPLandroid/telecom/Call;->getParent()Landroid/telecom/Call;
+HPLandroid/telecom/Call;->getState()I
+HPLandroid/telecom/Call;->getVideoCall()Landroid/telecom/InCallService$VideoCall;
+HPLandroid/telecom/Call;->internalGetCallId()Ljava/lang/String;
+HPLandroid/telecom/Call;->internalUpdate(Landroid/telecom/ParcelableCall;Ljava/util/Map;)V
+HPLandroid/telecom/Call;->registerCallback(Landroid/telecom/Call$Callback;)V
+HPLandroid/telecom/Call;->registerCallback(Landroid/telecom/Call$Callback;Landroid/os/Handler;)V
+HPLandroid/telecom/Call;->stateToString(I)Ljava/lang/String;
+HPLandroid/telecom/Call;->toString()Ljava/lang/String;
+HPLandroid/telecom/Call;->unregisterCallback(Landroid/telecom/Call$Callback;)V
+HPLandroid/telecom/CallAudioState$1;-><init>()V
+HPLandroid/telecom/CallAudioState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telecom/CallAudioState;
+HPLandroid/telecom/CallAudioState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/telecom/CallAudioState;-><init>(ZII)V
+HPLandroid/telecom/CallAudioState;->audioRouteToString(I)Ljava/lang/String;
+HPLandroid/telecom/CallAudioState;->equals(Ljava/lang/Object;)Z
+HPLandroid/telecom/CallAudioState;->getRoute()I
+HPLandroid/telecom/CallAudioState;->getSupportedRouteMask()I
+HPLandroid/telecom/CallAudioState;->isMuted()Z
+HPLandroid/telecom/CallAudioState;->listAppend(Ljava/lang/StringBuffer;Ljava/lang/String;)V
+HPLandroid/telecom/CallAudioState;->toString()Ljava/lang/String;
+HPLandroid/telecom/CallAudioState;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/telecom/CallbackRecord;-><init>(Ljava/lang/Object;Landroid/os/Handler;)V
+HPLandroid/telecom/CallbackRecord;->getCallback()Ljava/lang/Object;
+HPLandroid/telecom/CallbackRecord;->getHandler()Landroid/os/Handler;
+HPLandroid/telecom/Conference$Listener;-><init>()V
+HPLandroid/telecom/Conferenceable;-><init>()V
+HPLandroid/telecom/Connection$1;-><init>(Landroid/telecom/Connection;)V
+HPLandroid/telecom/Connection$2;-><init>(Landroid/telecom/Connection;)V
+HPLandroid/telecom/Connection$FailureSignalingConnection;-><init>(Landroid/telecom/DisconnectCause;)V
+HPLandroid/telecom/Connection$FailureSignalingConnection;->checkImmutable()V
+HPLandroid/telecom/Connection$Listener;-><init>()V
+HPLandroid/telecom/Connection;-><init>()V
+HPLandroid/telecom/Connection;->can(II)Z
+HPLandroid/telecom/Connection;->capabilitiesToString(I)Ljava/lang/String;
+HPLandroid/telecom/Connection;->capabilitiesToStringInternal(IZ)Ljava/lang/String;
+HPLandroid/telecom/Connection;->createFailedConnection(Landroid/telecom/DisconnectCause;)Landroid/telecom/Connection;
+HPLandroid/telecom/Connection;->getAddress()Landroid/net/Uri;
+HPLandroid/telecom/Connection;->getAddressPresentation()I
+HPLandroid/telecom/Connection;->getAudioModeIsVoip()Z
+HPLandroid/telecom/Connection;->getCallerDisplayName()Ljava/lang/String;
+HPLandroid/telecom/Connection;->getCallerDisplayNamePresentation()I
+HPLandroid/telecom/Connection;->getConferenceables()Ljava/util/List;
+HPLandroid/telecom/Connection;->getConnectElapsedTimeMillis()J
+HPLandroid/telecom/Connection;->getConnectTimeMillis()J
+HPLandroid/telecom/Connection;->getConnectionCapabilities()I
+HPLandroid/telecom/Connection;->getConnectionProperties()I
+HPLandroid/telecom/Connection;->getDisconnectCause()Landroid/telecom/DisconnectCause;
+HPLandroid/telecom/Connection;->getExtras()Landroid/os/Bundle;
+HPLandroid/telecom/Connection;->getState()I
+HPLandroid/telecom/Connection;->getStatusHints()Landroid/telecom/StatusHints;
+HPLandroid/telecom/Connection;->getSupportedAudioRoutes()I
+HPLandroid/telecom/Connection;->getVideoProvider()Landroid/telecom/Connection$VideoProvider;
+HPLandroid/telecom/Connection;->getVideoState()I
+HPLandroid/telecom/Connection;->isRingbackRequested()Z
+HPLandroid/telecom/Connection;->onStateChanged(I)V
+HPLandroid/telecom/Connection;->propertiesToString(I)Ljava/lang/String;
+HPLandroid/telecom/Connection;->propertiesToStringInternal(IZ)Ljava/lang/String;
+HPLandroid/telecom/Connection;->setDisconnected(Landroid/telecom/DisconnectCause;)V
+HPLandroid/telecom/Connection;->setState(I)V
+HPLandroid/telecom/Connection;->setTelecomCallId(Ljava/lang/String;)V
+HPLandroid/telecom/Connection;->stateToString(I)Ljava/lang/String;
+HPLandroid/telecom/Connection;->toLogSafePhoneNumber(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/telecom/ConnectionRequest$1;-><init>()V
+HPLandroid/telecom/ConnectionRequest$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telecom/ConnectionRequest;
+HPLandroid/telecom/ConnectionRequest$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/telecom/ConnectionRequest$Builder;-><init>()V
+HPLandroid/telecom/ConnectionRequest$Builder;->build()Landroid/telecom/ConnectionRequest;
+HPLandroid/telecom/ConnectionRequest$Builder;->setAccountHandle(Landroid/telecom/PhoneAccountHandle;)Landroid/telecom/ConnectionRequest$Builder;
+HPLandroid/telecom/ConnectionRequest$Builder;->setAddress(Landroid/net/Uri;)Landroid/telecom/ConnectionRequest$Builder;
+HPLandroid/telecom/ConnectionRequest$Builder;->setExtras(Landroid/os/Bundle;)Landroid/telecom/ConnectionRequest$Builder;
+HPLandroid/telecom/ConnectionRequest$Builder;->setRttPipeFromInCall(Landroid/os/ParcelFileDescriptor;)Landroid/telecom/ConnectionRequest$Builder;
+HPLandroid/telecom/ConnectionRequest$Builder;->setRttPipeToInCall(Landroid/os/ParcelFileDescriptor;)Landroid/telecom/ConnectionRequest$Builder;
+HPLandroid/telecom/ConnectionRequest$Builder;->setShouldShowIncomingCallUi(Z)Landroid/telecom/ConnectionRequest$Builder;
+HPLandroid/telecom/ConnectionRequest$Builder;->setTelecomCallId(Ljava/lang/String;)Landroid/telecom/ConnectionRequest$Builder;
+HPLandroid/telecom/ConnectionRequest$Builder;->setVideoState(I)Landroid/telecom/ConnectionRequest$Builder;
+HPLandroid/telecom/ConnectionRequest;-><init>(Landroid/os/Parcel;)V
+HPLandroid/telecom/ConnectionRequest;-><init>(Landroid/os/Parcel;Landroid/telecom/ConnectionRequest;)V
+HPLandroid/telecom/ConnectionRequest;-><init>(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;Landroid/os/Bundle;ILjava/lang/String;ZLandroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;)V
+HPLandroid/telecom/ConnectionRequest;-><init>(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;Landroid/os/Bundle;ILjava/lang/String;ZLandroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/telecom/ConnectionRequest;)V
+HPLandroid/telecom/ConnectionRequest;->getAccountHandle()Landroid/telecom/PhoneAccountHandle;
+HPLandroid/telecom/ConnectionRequest;->getAddress()Landroid/net/Uri;
+HPLandroid/telecom/ConnectionRequest;->toString()Ljava/lang/String;
+HPLandroid/telecom/ConnectionRequest;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/telecom/ConnectionService$1;-><init>(Landroid/telecom/ConnectionService;)V
+HPLandroid/telecom/ConnectionService$1;->addConnectionServiceAdapter(Lcom/android/internal/telecom/IConnectionServiceAdapter;Landroid/telecom/Logging/Session$Info;)V
+HPLandroid/telecom/ConnectionService$1;->createConnection(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;Landroid/telecom/ConnectionRequest;ZZLandroid/telecom/Logging/Session$Info;)V
+HPLandroid/telecom/ConnectionService$1;->removeConnectionServiceAdapter(Lcom/android/internal/telecom/IConnectionServiceAdapter;Landroid/telecom/Logging/Session$Info;)V
+HPLandroid/telecom/ConnectionService$2$1;-><init>(Landroid/telecom/ConnectionService$2;Ljava/lang/String;Ljava/lang/Object;Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;Landroid/telecom/ConnectionRequest;ZZ)V
+HPLandroid/telecom/ConnectionService$2$1;->loggedRun()V
+HPLandroid/telecom/ConnectionService$2;-><init>(Landroid/telecom/ConnectionService;Landroid/os/Looper;)V
+HPLandroid/telecom/ConnectionService$2;->handleMessage(Landroid/os/Message;)V
+HPLandroid/telecom/ConnectionService$3;-><init>(Landroid/telecom/ConnectionService;)V
+HPLandroid/telecom/ConnectionService$4;-><init>(Landroid/telecom/ConnectionService;)V
+HPLandroid/telecom/ConnectionService$5$1;-><init>(Landroid/telecom/ConnectionService$5;Ljava/lang/String;Ljava/lang/Object;Ljava/util/List;Ljava/util/List;)V
+HPLandroid/telecom/ConnectionService$5$1;->loggedRun()V
+HPLandroid/telecom/ConnectionService$5;-><init>(Landroid/telecom/ConnectionService;)V
+HPLandroid/telecom/ConnectionService$5;->onResult(Ljava/util/List;Ljava/util/List;)V
+HPLandroid/telecom/ConnectionService;->-get0(Landroid/telecom/ConnectionService;)Landroid/telecom/ConnectionServiceAdapter;
+HPLandroid/telecom/ConnectionService;->-get1(Landroid/telecom/ConnectionService;)Z
+HPLandroid/telecom/ConnectionService;->-get2(Landroid/telecom/ConnectionService;)Landroid/os/Handler;
+HPLandroid/telecom/ConnectionService;->-get5(Landroid/telecom/ConnectionService;)Ljava/util/List;
+HPLandroid/telecom/ConnectionService;->-wrap14(Landroid/telecom/ConnectionService;)V
+HPLandroid/telecom/ConnectionService;->-wrap15(Landroid/telecom/ConnectionService;)V
+HPLandroid/telecom/ConnectionService;->-wrap7(Landroid/telecom/ConnectionService;Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;Landroid/telecom/ConnectionRequest;ZZ)V
+HPLandroid/telecom/ConnectionService;-><init>()V
+HPLandroid/telecom/ConnectionService;->createConnection(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;Landroid/telecom/ConnectionRequest;ZZ)V
+HPLandroid/telecom/ConnectionService;->createIdList(Ljava/util/List;)Ljava/util/List;
+HPLandroid/telecom/ConnectionService;->endAllConnections()V
+HPLandroid/telecom/ConnectionService;->getAllConnections()Ljava/util/Collection;
+HPLandroid/telecom/ConnectionService;->onAccountsInitialized()V
+HPLandroid/telecom/ConnectionService;->onAdapterAttached()V
+HPLandroid/telecom/ConnectionService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HPLandroid/telecom/ConnectionService;->onUnbind(Landroid/content/Intent;)Z
+HPLandroid/telecom/ConnectionServiceAdapter;-><init>()V
+HPLandroid/telecom/ConnectionServiceAdapter;->addAdapter(Lcom/android/internal/telecom/IConnectionServiceAdapter;)V
+HPLandroid/telecom/ConnectionServiceAdapter;->handleCreateConnectionComplete(Ljava/lang/String;Landroid/telecom/ConnectionRequest;Landroid/telecom/ParcelableConnection;)V
+HPLandroid/telecom/ConnectionServiceAdapter;->queryRemoteConnectionServices(Lcom/android/internal/telecom/RemoteServiceCallback;)V
+HPLandroid/telecom/ConnectionServiceAdapter;->removeAdapter(Lcom/android/internal/telecom/IConnectionServiceAdapter;)V
+HPLandroid/telecom/DefaultDialerManager;->filterByIntent(Landroid/content/Context;Ljava/util/List;Landroid/content/Intent;)Ljava/util/List;
+HPLandroid/telecom/DefaultDialerManager;->getDefaultDialerApplication(Landroid/content/Context;I)Ljava/lang/String;
+HPLandroid/telecom/DefaultDialerManager;->getInstalledDialerApplications(Landroid/content/Context;I)Ljava/util/List;
+HPLandroid/telecom/DefaultDialerManager;->getTelecomManager(Landroid/content/Context;)Landroid/telecom/TelecomManager;
+HPLandroid/telecom/DisconnectCause$1;-><init>()V
+HPLandroid/telecom/DisconnectCause$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telecom/DisconnectCause;
+HPLandroid/telecom/DisconnectCause$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/telecom/DisconnectCause;-><init>(I)V
+HPLandroid/telecom/DisconnectCause;-><init>(ILjava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;I)V
+HPLandroid/telecom/DisconnectCause;->equals(Ljava/lang/Object;)Z
+HPLandroid/telecom/DisconnectCause;->getCode()I
+HPLandroid/telecom/DisconnectCause;->getDescription()Ljava/lang/CharSequence;
+HPLandroid/telecom/DisconnectCause;->getLabel()Ljava/lang/CharSequence;
+HPLandroid/telecom/DisconnectCause;->getReason()Ljava/lang/String;
+HPLandroid/telecom/DisconnectCause;->toString()Ljava/lang/String;
+HPLandroid/telecom/DisconnectCause;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/telecom/InCallAdapter;-><init>(Lcom/android/internal/telecom/IInCallAdapter;)V
+HPLandroid/telecom/InCallService$1;-><init>(Landroid/telecom/InCallService;Landroid/os/Looper;)V
+HPLandroid/telecom/InCallService$1;->handleMessage(Landroid/os/Message;)V
+HPLandroid/telecom/InCallService$2;-><init>(Landroid/telecom/InCallService;)V
+HPLandroid/telecom/InCallService$2;->onAudioStateChanged(Landroid/telecom/Phone;Landroid/telecom/AudioState;)V
+HPLandroid/telecom/InCallService$2;->onCallAdded(Landroid/telecom/Phone;Landroid/telecom/Call;)V
+HPLandroid/telecom/InCallService$2;->onCallAudioStateChanged(Landroid/telecom/Phone;Landroid/telecom/CallAudioState;)V
+HPLandroid/telecom/InCallService$2;->onCallRemoved(Landroid/telecom/Phone;Landroid/telecom/Call;)V
+HPLandroid/telecom/InCallService$2;->onCanAddCallChanged(Landroid/telecom/Phone;Z)V
+HPLandroid/telecom/InCallService$InCallServiceBinder;-><init>(Landroid/telecom/InCallService;)V
+HPLandroid/telecom/InCallService$InCallServiceBinder;-><init>(Landroid/telecom/InCallService;Landroid/telecom/InCallService$InCallServiceBinder;)V
+HPLandroid/telecom/InCallService$InCallServiceBinder;->addCall(Landroid/telecom/ParcelableCall;)V
+HPLandroid/telecom/InCallService$InCallServiceBinder;->onCallAudioStateChanged(Landroid/telecom/CallAudioState;)V
+HPLandroid/telecom/InCallService$InCallServiceBinder;->onCanAddCallChanged(Z)V
+HPLandroid/telecom/InCallService$InCallServiceBinder;->setInCallAdapter(Lcom/android/internal/telecom/IInCallAdapter;)V
+HPLandroid/telecom/InCallService$InCallServiceBinder;->updateCall(Landroid/telecom/ParcelableCall;)V
+HPLandroid/telecom/InCallService;->-get0(Landroid/telecom/InCallService;)Landroid/os/Handler;
+HPLandroid/telecom/InCallService;->-get1(Landroid/telecom/InCallService;)Landroid/telecom/Phone;
+HPLandroid/telecom/InCallService;->-get2(Landroid/telecom/InCallService;)Landroid/telecom/Phone$Listener;
+HPLandroid/telecom/InCallService;->-set0(Landroid/telecom/InCallService;Landroid/telecom/Phone;)Landroid/telecom/Phone;
+HPLandroid/telecom/InCallService;-><init>()V
+HPLandroid/telecom/InCallService;->onAudioStateChanged(Landroid/telecom/AudioState;)V
+HPLandroid/telecom/InCallService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HPLandroid/telecom/InCallService;->onPhoneCreated(Landroid/telecom/Phone;)V
+HPLandroid/telecom/InCallService;->onPhoneDestroyed(Landroid/telecom/Phone;)V
+HPLandroid/telecom/InCallService;->onUnbind(Landroid/content/Intent;)Z
+HPLandroid/telecom/Log;->-android_telecom_Log-mthref-0()Ljava/lang/String;
+HPLandroid/telecom/Log;->addEvent(Landroid/telecom/Logging/EventManager$Loggable;Ljava/lang/String;)V
+HPLandroid/telecom/Log;->addEvent(Landroid/telecom/Logging/EventManager$Loggable;Ljava/lang/String;Ljava/lang/Object;)V
+HPLandroid/telecom/Log;->addRequestResponsePair(Landroid/telecom/Logging/EventManager$TimedEventPair;)V
+HPLandroid/telecom/Log;->cancelSubsession(Landroid/telecom/Logging/Session;)V
+HPLandroid/telecom/Log;->continueSession(Landroid/telecom/Logging/Session;Ljava/lang/String;)V
+HPLandroid/telecom/Log;->createSubsession()Landroid/telecom/Logging/Session;
+HPLandroid/telecom/Log;->d(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
+HPLandroid/telecom/Log;->endSession()V
+HPLandroid/telecom/Log;->getEventManager()Landroid/telecom/Logging/EventManager;
+HPLandroid/telecom/Log;->getExternalSession()Landroid/telecom/Logging/Session$Info;
+HPLandroid/telecom/Log;->getSessionManager()Landroid/telecom/Logging/SessionManager;
+HPLandroid/telecom/Log;->i(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
+HPLandroid/telecom/Log;->piiHandle(Ljava/lang/Object;)Ljava/lang/String;
+HPLandroid/telecom/Log;->registerEventListener(Landroid/telecom/Logging/EventManager$EventListener;)V
+HPLandroid/telecom/Log;->registerSessionListener(Landroid/telecom/Logging/SessionManager$ISessionListener;)V
+HPLandroid/telecom/Log;->setSessionContext(Landroid/content/Context;)V
+HPLandroid/telecom/Log;->setTag(Ljava/lang/String;)V
+HPLandroid/telecom/Log;->startSession(Landroid/telecom/Logging/Session$Info;Ljava/lang/String;)V
+HPLandroid/telecom/Log;->startSession(Ljava/lang/String;)V
+HPLandroid/telecom/Log;->v(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
+HPLandroid/telecom/Logging/-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24$1;->$m$0()J
+HPLandroid/telecom/Logging/-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24$1;-><init>(Ljava/lang/Object;)V
+HPLandroid/telecom/Logging/-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24$1;->get()J
+HPLandroid/telecom/Logging/-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24$2;->$m$0()V
+HPLandroid/telecom/Logging/-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24$2;-><init>(Ljava/lang/Object;)V
+HPLandroid/telecom/Logging/-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24$2;->run()V
+HPLandroid/telecom/Logging/-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24;->$m$0()I
+HPLandroid/telecom/Logging/-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24;-><init>()V
+HPLandroid/telecom/Logging/-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24;->get()I
+HPLandroid/telecom/Logging/EventManager$Event;-><init>(Ljava/lang/String;Ljava/lang/String;JLjava/lang/Object;)V
+HPLandroid/telecom/Logging/EventManager$EventListener;->eventRecordAdded(Landroid/telecom/Logging/EventManager$EventRecord;)V
+HPLandroid/telecom/Logging/EventManager$EventRecord;-><init>(Landroid/telecom/Logging/EventManager;Landroid/telecom/Logging/EventManager$Loggable;)V
+HPLandroid/telecom/Logging/EventManager$EventRecord;->addEvent(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V
+HPLandroid/telecom/Logging/EventManager$EventRecord;->getRecordEntry()Landroid/telecom/Logging/EventManager$Loggable;
+HPLandroid/telecom/Logging/EventManager$Loggable;->getDescription()Ljava/lang/String;
+HPLandroid/telecom/Logging/EventManager$Loggable;->getId()Ljava/lang/String;
+HPLandroid/telecom/Logging/EventManager$TimedEventPair;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/telecom/Logging/EventManager$TimedEventPair;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V
+HPLandroid/telecom/Logging/EventManager;-><init>(Landroid/telecom/Logging/SessionManager$ISessionIdQueryHandler;)V
+HPLandroid/telecom/Logging/EventManager;->addEventRecord(Landroid/telecom/Logging/EventManager$EventRecord;)V
+HPLandroid/telecom/Logging/EventManager;->addRequestResponsePair(Landroid/telecom/Logging/EventManager$TimedEventPair;)V
+HPLandroid/telecom/Logging/EventManager;->event(Landroid/telecom/Logging/EventManager$Loggable;Ljava/lang/String;Ljava/lang/Object;)V
+HPLandroid/telecom/Logging/EventManager;->registerEventListener(Landroid/telecom/Logging/EventManager$EventListener;)V
+HPLandroid/telecom/Logging/Runnable$1;-><init>(Landroid/telecom/Logging/Runnable;)V
+HPLandroid/telecom/Logging/Runnable$1;->run()V
+HPLandroid/telecom/Logging/Runnable;->-get0(Landroid/telecom/Logging/Runnable;)Ljava/lang/Object;
+HPLandroid/telecom/Logging/Runnable;->-get1(Landroid/telecom/Logging/Runnable;)Landroid/telecom/Logging/Session;
+HPLandroid/telecom/Logging/Runnable;->-get2(Landroid/telecom/Logging/Runnable;)Ljava/lang/String;
+HPLandroid/telecom/Logging/Runnable;->-set0(Landroid/telecom/Logging/Runnable;Landroid/telecom/Logging/Session;)Landroid/telecom/Logging/Session;
+HPLandroid/telecom/Logging/Runnable;-><init>(Ljava/lang/String;Ljava/lang/Object;)V
+HPLandroid/telecom/Logging/Runnable;->cancel()V
+HPLandroid/telecom/Logging/Runnable;->prepare()Ljava/lang/Runnable;
+HPLandroid/telecom/Logging/Session$Info$1;-><init>()V
+HPLandroid/telecom/Logging/Session$Info$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telecom/Logging/Session$Info;
+HPLandroid/telecom/Logging/Session$Info$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/telecom/Logging/Session$Info;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/telecom/Logging/Session$Info;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLandroid/telecom/Logging/Session$Info;->getInfo(Landroid/telecom/Logging/Session;)Landroid/telecom/Logging/Session$Info;
+HPLandroid/telecom/Logging/Session$Info;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/telecom/Logging/Session;->-wrap0(Landroid/telecom/Logging/Session;)Z
+HPLandroid/telecom/Logging/Session;->-wrap1(Landroid/telecom/Logging/Session;)Ljava/lang/String;
+HPLandroid/telecom/Logging/Session;-><init>(Ljava/lang/String;Ljava/lang/String;JZLjava/lang/String;)V
+HPLandroid/telecom/Logging/Session;->addChild(Landroid/telecom/Logging/Session;)V
+HPLandroid/telecom/Logging/Session;->equals(Ljava/lang/Object;)Z
+HPLandroid/telecom/Logging/Session;->getChildSessions()Ljava/util/ArrayList;
+HPLandroid/telecom/Logging/Session;->getExecutionStartTimeMilliseconds()J
+HPLandroid/telecom/Logging/Session;->getFullMethodPath(Ljava/lang/StringBuilder;Z)V
+HPLandroid/telecom/Logging/Session;->getFullMethodPath(Z)Ljava/lang/String;
+HPLandroid/telecom/Logging/Session;->getFullSessionId()Ljava/lang/String;
+HPLandroid/telecom/Logging/Session;->getInfo()Landroid/telecom/Logging/Session$Info;
+HPLandroid/telecom/Logging/Session;->getLocalExecutionTime()J
+HPLandroid/telecom/Logging/Session;->getNextChildId()Ljava/lang/String;
+HPLandroid/telecom/Logging/Session;->getParentSession()Landroid/telecom/Logging/Session;
+HPLandroid/telecom/Logging/Session;->getShortMethodName()Ljava/lang/String;
+HPLandroid/telecom/Logging/Session;->isExternal()Z
+HPLandroid/telecom/Logging/Session;->isSessionCompleted()Z
+HPLandroid/telecom/Logging/Session;->isSessionExternal()Z
+HPLandroid/telecom/Logging/Session;->isStartedFromActiveSession()Z
+HPLandroid/telecom/Logging/Session;->markSessionCompleted(J)V
+HPLandroid/telecom/Logging/Session;->removeChild(Landroid/telecom/Logging/Session;)V
+HPLandroid/telecom/Logging/Session;->setExecutionStartTimeMs(J)V
+HPLandroid/telecom/Logging/Session;->setIsExternal(Z)V
+HPLandroid/telecom/Logging/Session;->setParentSession(Landroid/telecom/Logging/Session;)V
+HPLandroid/telecom/Logging/Session;->setSessionId(Ljava/lang/String;)V
+HPLandroid/telecom/Logging/Session;->setShortMethodName(Ljava/lang/String;)V
+HPLandroid/telecom/Logging/Session;->toString()Ljava/lang/String;
+HPLandroid/telecom/Logging/SessionManager$ICurrentThreadId;->get()I
+HPLandroid/telecom/Logging/SessionManager$ISessionCleanupTimeoutMs;->get()J
+HPLandroid/telecom/Logging/SessionManager$ISessionIdQueryHandler;->getSessionId()Ljava/lang/String;
+HPLandroid/telecom/Logging/SessionManager$ISessionListener;->sessionComplete(Ljava/lang/String;J)V
+HPLandroid/telecom/Logging/SessionManager;->-android_telecom_Logging_SessionManager-mthref-0()I
+HPLandroid/telecom/Logging/SessionManager;-><init>()V
+HPLandroid/telecom/Logging/SessionManager;->cancelSubsession(Landroid/telecom/Logging/Session;)V
+HPLandroid/telecom/Logging/SessionManager;->cleanupStaleSessions(J)V
+HPLandroid/telecom/Logging/SessionManager;->continueSession(Landroid/telecom/Logging/Session;Ljava/lang/String;)V
+HPLandroid/telecom/Logging/SessionManager;->createSubsession()Landroid/telecom/Logging/Session;
+HPLandroid/telecom/Logging/SessionManager;->createSubsession(Z)Landroid/telecom/Logging/Session;
+HPLandroid/telecom/Logging/SessionManager;->endParentSessions(Landroid/telecom/Logging/Session;)V
+HPLandroid/telecom/Logging/SessionManager;->endSession()V
+HPLandroid/telecom/Logging/SessionManager;->getBase64Encoding(I)Ljava/lang/String;
+HPLandroid/telecom/Logging/SessionManager;->getCallingThreadId()I
+HPLandroid/telecom/Logging/SessionManager;->getCleanupTimeout(Landroid/content/Context;)J
+HPLandroid/telecom/Logging/SessionManager;->getExternalSession()Landroid/telecom/Logging/Session$Info;
+HPLandroid/telecom/Logging/SessionManager;->getNextSessionID()Ljava/lang/String;
+HPLandroid/telecom/Logging/SessionManager;->getSessionCleanupTimeoutMs()J
+HPLandroid/telecom/Logging/SessionManager;->getSessionId()Ljava/lang/String;
+HPLandroid/telecom/Logging/SessionManager;->lambda$-android_telecom_Logging_SessionManager_1888()V
+HPLandroid/telecom/Logging/SessionManager;->lambda$-android_telecom_Logging_SessionManager_2450()J
+HPLandroid/telecom/Logging/SessionManager;->notifySessionCompleteListeners(Ljava/lang/String;J)V
+HPLandroid/telecom/Logging/SessionManager;->registerSessionListener(Landroid/telecom/Logging/SessionManager$ISessionListener;)V
+HPLandroid/telecom/Logging/SessionManager;->resetStaleSessionTimer()V
+HPLandroid/telecom/Logging/SessionManager;->setContext(Landroid/content/Context;)V
+HPLandroid/telecom/Logging/SessionManager;->startExternalSession(Landroid/telecom/Logging/Session$Info;Ljava/lang/String;)V
+HPLandroid/telecom/Logging/SessionManager;->startSession(Landroid/telecom/Logging/Session$Info;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/telecom/Logging/SessionManager;->startSession(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/telecom/ParcelableCall$1;-><init>()V
+HPLandroid/telecom/ParcelableCall$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telecom/ParcelableCall;
+HPLandroid/telecom/ParcelableCall$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/telecom/ParcelableCall;-><init>(Ljava/lang/String;ILandroid/telecom/DisconnectCause;Ljava/util/List;IIIJLandroid/net/Uri;ILjava/lang/String;ILandroid/telecom/GatewayInfo;Landroid/telecom/PhoneAccountHandle;ZLcom/android/internal/telecom/IVideoProvider;ZLandroid/telecom/ParcelableRttCall;Ljava/lang/String;Ljava/util/List;Landroid/telecom/StatusHints;ILjava/util/List;Landroid/os/Bundle;Landroid/os/Bundle;J)V
+HPLandroid/telecom/ParcelableCall;->getAccountHandle()Landroid/telecom/PhoneAccountHandle;
+HPLandroid/telecom/ParcelableCall;->getCallerDisplayName()Ljava/lang/String;
+HPLandroid/telecom/ParcelableCall;->getCallerDisplayNamePresentation()I
+HPLandroid/telecom/ParcelableCall;->getCannedSmsResponses()Ljava/util/List;
+HPLandroid/telecom/ParcelableCall;->getCapabilities()I
+HPLandroid/telecom/ParcelableCall;->getChildCallIds()Ljava/util/List;
+HPLandroid/telecom/ParcelableCall;->getConferenceableCallIds()Ljava/util/List;
+HPLandroid/telecom/ParcelableCall;->getConnectTimeMillis()J
+HPLandroid/telecom/ParcelableCall;->getCreationTimeMillis()J
+HPLandroid/telecom/ParcelableCall;->getDisconnectCause()Landroid/telecom/DisconnectCause;
+HPLandroid/telecom/ParcelableCall;->getExtras()Landroid/os/Bundle;
+HPLandroid/telecom/ParcelableCall;->getGatewayInfo()Landroid/telecom/GatewayInfo;
+HPLandroid/telecom/ParcelableCall;->getHandle()Landroid/net/Uri;
+HPLandroid/telecom/ParcelableCall;->getHandlePresentation()I
+HPLandroid/telecom/ParcelableCall;->getId()Ljava/lang/String;
+HPLandroid/telecom/ParcelableCall;->getIntentExtras()Landroid/os/Bundle;
+HPLandroid/telecom/ParcelableCall;->getParcelableRttCall()Landroid/telecom/ParcelableRttCall;
+HPLandroid/telecom/ParcelableCall;->getParentCallId()Ljava/lang/String;
+HPLandroid/telecom/ParcelableCall;->getProperties()I
+HPLandroid/telecom/ParcelableCall;->getState()I
+HPLandroid/telecom/ParcelableCall;->getStatusHints()Landroid/telecom/StatusHints;
+HPLandroid/telecom/ParcelableCall;->getVideoCallImpl(Ljava/lang/String;I)Landroid/telecom/VideoCallImpl;
+HPLandroid/telecom/ParcelableCall;->getVideoState()I
+HPLandroid/telecom/ParcelableCall;->isVideoCallProviderChanged()Z
+HPLandroid/telecom/ParcelableCall;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/telecom/ParcelableConnection$1;-><init>()V
+HPLandroid/telecom/ParcelableConnection$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telecom/ParcelableConnection;
+HPLandroid/telecom/ParcelableConnection$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/telecom/ParcelableConnection;-><init>(Landroid/telecom/PhoneAccountHandle;IIIILandroid/net/Uri;ILjava/lang/String;ILcom/android/internal/telecom/IVideoProvider;IZZJJLandroid/telecom/StatusHints;Landroid/telecom/DisconnectCause;Ljava/util/List;Landroid/os/Bundle;)V
+HPLandroid/telecom/ParcelableConnection;-><init>(Landroid/telecom/PhoneAccountHandle;IIIILandroid/net/Uri;ILjava/lang/String;ILcom/android/internal/telecom/IVideoProvider;IZZJJLandroid/telecom/StatusHints;Landroid/telecom/DisconnectCause;Ljava/util/List;Landroid/os/Bundle;Ljava/lang/String;)V
+HPLandroid/telecom/ParcelableConnection;->getDisconnectCause()Landroid/telecom/DisconnectCause;
+HPLandroid/telecom/ParcelableConnection;->getState()I
+HPLandroid/telecom/ParcelableConnection;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/telecom/Phone$Listener;-><init>()V
+HPLandroid/telecom/Phone;-><init>(Landroid/telecom/InCallAdapter;Ljava/lang/String;I)V
+HPLandroid/telecom/Phone;->addListener(Landroid/telecom/Phone$Listener;)V
+HPLandroid/telecom/Phone;->checkCallTree(Landroid/telecom/ParcelableCall;)V
+HPLandroid/telecom/Phone;->destroy()V
+HPLandroid/telecom/Phone;->fireCallAdded(Landroid/telecom/Call;)V
+HPLandroid/telecom/Phone;->fireCallAudioStateChanged(Landroid/telecom/CallAudioState;)V
+HPLandroid/telecom/Phone;->fireCallRemoved(Landroid/telecom/Call;)V
+HPLandroid/telecom/Phone;->fireCanAddCallChanged(Z)V
+HPLandroid/telecom/Phone;->internalAddCall(Landroid/telecom/ParcelableCall;)V
+HPLandroid/telecom/Phone;->internalCallAudioStateChanged(Landroid/telecom/CallAudioState;)V
+HPLandroid/telecom/Phone;->internalRemoveCall(Landroid/telecom/Call;)V
+HPLandroid/telecom/Phone;->internalSetCanAddCall(Z)V
+HPLandroid/telecom/Phone;->internalUpdateCall(Landroid/telecom/ParcelableCall;)V
+HPLandroid/telecom/Phone;->removeListener(Landroid/telecom/Phone$Listener;)V
+HPLandroid/telecom/PhoneAccount$Builder;->setIsEnabled(Z)Landroid/telecom/PhoneAccount$Builder;
+HPLandroid/telecom/PhoneAccount$Builder;->setSupportedAudioRoutes(I)Landroid/telecom/PhoneAccount$Builder;
+HPLandroid/telecom/PhoneAccount;->getAddress()Landroid/net/Uri;
+HPLandroid/telecom/PhoneAccount;->getCapabilities()I
+HPLandroid/telecom/PhoneAccount;->getHighlightColor()I
+HPLandroid/telecom/PhoneAccount;->getIcon()Landroid/graphics/drawable/Icon;
+HPLandroid/telecom/PhoneAccount;->getLabel()Ljava/lang/CharSequence;
+HPLandroid/telecom/PhoneAccount;->getShortDescription()Ljava/lang/CharSequence;
+HPLandroid/telecom/PhoneAccount;->getSubscriptionAddress()Landroid/net/Uri;
+HPLandroid/telecom/PhoneAccount;->getSupportedAudioRoutes()I
+HPLandroid/telecom/PhoneAccount;->getSupportedUriSchemes()Ljava/util/List;
+HPLandroid/telecom/PhoneAccount;->isEnabled()Z
+HPLandroid/telecom/PhoneAccount;->isSelfManaged()Z
+HPLandroid/telecom/PhoneAccount;->setIsEnabled(Z)V
+HPLandroid/telecom/PhoneAccount;->supportsUriScheme(Ljava/lang/String;)Z
+HPLandroid/telecom/PhoneAccountHandle;->describeContents()I
+HPLandroid/telecom/PhoneAccountHandle;->hashCode()I
+HPLandroid/telecom/RemoteConnectionManager;-><init>(Landroid/telecom/ConnectionService;)V
+HPLandroid/telecom/TelecomAnalytics$SessionTiming$1;-><init>()V
+HPLandroid/telecom/TelecomAnalytics$SessionTiming;-><init>(IJ)V
+HPLandroid/telecom/TelecomManager;->getDefaultPhoneApp()Landroid/content/ComponentName;
+HPLandroid/telecom/TelecomManager;->getLine1Number(Landroid/telecom/PhoneAccountHandle;)Ljava/lang/String;
+HPLandroid/telecom/TelecomManager;->getPhoneAccountsSupportingScheme(Ljava/lang/String;)Ljava/util/List;
+HPLandroid/telecom/TelecomManager;->getSystemDialerPackage()Ljava/lang/String;
+HPLandroid/telecom/TelecomManager;->isRinging()Z
+HPLandroid/telecom/TelecomManager;->isVoiceMailNumber(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;)Z
+HPLandroid/telecom/TelecomManager;->placeCall(Landroid/net/Uri;Landroid/os/Bundle;)V
+HPLandroid/telecom/TimedEvent;-><init>()V
+HPLandroid/telecom/TimedEvent;->getKey()Ljava/lang/Object;
+HPLandroid/telecom/TimedEvent;->getTime()J
+HPLandroid/telecom/VideoProfile$1;-><init>()V
+HPLandroid/telecom/VideoProfile;->hasState(II)Z
+HPLandroid/telecom/VideoProfile;->isPaused(I)Z
+HPLandroid/telecom/VideoProfile;->isReceptionEnabled(I)Z
+HPLandroid/telecom/VideoProfile;->isTransmissionEnabled(I)Z
+HPLandroid/telecom/VideoProfile;->isVideo(I)Z
+HPLandroid/telecom/VideoProfile;->videoStateToString(I)Ljava/lang/String;
+HPLandroid/telephony/CellIdentityLte$1;-><init>()V
+HPLandroid/telephony/CellIdentityLte$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellIdentityLte;
+HPLandroid/telephony/CellIdentityLte$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/telephony/CellIdentityLte;-><init>(Landroid/os/Parcel;)V
+HPLandroid/telephony/CellIdentityLte;-><init>(Landroid/os/Parcel;Landroid/telephony/CellIdentityLte;)V
+HPLandroid/telephony/CellIdentityLte;->getCi()I
+HPLandroid/telephony/CellIdentityLte;->getMcc()I
+HPLandroid/telephony/CellIdentityLte;->getMnc()I
+HPLandroid/telephony/CellIdentityLte;->getPci()I
+HPLandroid/telephony/CellIdentityLte;->getTac()I
+HPLandroid/telephony/CellIdentityLte;->toString()Ljava/lang/String;
+HPLandroid/telephony/CellIdentityLte;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/telephony/CellInfo$1;-><init>()V
+HPLandroid/telephony/CellInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellInfo;
+HPLandroid/telephony/CellInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/telephony/CellInfo;-><init>(Landroid/os/Parcel;)V
+HPLandroid/telephony/CellInfo;->getTimeStamp()J
+HPLandroid/telephony/CellInfo;->isRegistered()Z
+HPLandroid/telephony/CellInfo;->timeStampTypeToString(I)Ljava/lang/String;
+HPLandroid/telephony/CellInfo;->toString()Ljava/lang/String;
+HPLandroid/telephony/CellInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/telephony/CellInfo;->writeToParcel(Landroid/os/Parcel;II)V
+HPLandroid/telephony/CellInfoLte$1;-><init>()V
+HPLandroid/telephony/CellInfoLte;-><init>(Landroid/os/Parcel;)V
+HPLandroid/telephony/CellInfoLte;->createFromParcelBody(Landroid/os/Parcel;)Landroid/telephony/CellInfoLte;
+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
+HPLandroid/telephony/CellLocation;->getEmpty()Landroid/telephony/CellLocation;
+HPLandroid/telephony/CellSignalStrength;-><init>()V
+HPLandroid/telephony/CellSignalStrength;->copy()Landroid/telephony/CellSignalStrength;
+HPLandroid/telephony/CellSignalStrength;->equals(Ljava/lang/Object;)Z
+HPLandroid/telephony/CellSignalStrength;->getAsuLevel()I
+HPLandroid/telephony/CellSignalStrength;->getDbm()I
+HPLandroid/telephony/CellSignalStrength;->getLevel()I
+HPLandroid/telephony/CellSignalStrength;->hashCode()I
+HPLandroid/telephony/CellSignalStrength;->setDefaultValues()V
+HPLandroid/telephony/CellSignalStrengthLte$1;-><init>()V
+HPLandroid/telephony/CellSignalStrengthLte$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthLte;
+HPLandroid/telephony/CellSignalStrengthLte$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/telephony/CellSignalStrengthLte;-><init>(Landroid/os/Parcel;)V
+HPLandroid/telephony/CellSignalStrengthLte;-><init>(Landroid/os/Parcel;Landroid/telephony/CellSignalStrengthLte;)V
+HPLandroid/telephony/CellSignalStrengthLte;->getDbm()I
+HPLandroid/telephony/CellSignalStrengthLte;->getTimingAdvance()I
+HPLandroid/telephony/CellSignalStrengthLte;->toString()Ljava/lang/String;
+HPLandroid/telephony/CellSignalStrengthLte;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/telephony/DisconnectCause;->toString(I)Ljava/lang/String;
+HPLandroid/telephony/ModemActivityInfo$1;-><init>()V
+HPLandroid/telephony/ModemActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/ModemActivityInfo;
+HPLandroid/telephony/ModemActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/telephony/ModemActivityInfo;-><init>(JII[III)V
+HPLandroid/telephony/ModemActivityInfo;->getEnergyUsed()I
+HPLandroid/telephony/ModemActivityInfo;->getIdleTimeMillis()I
+HPLandroid/telephony/ModemActivityInfo;->getRxTimeMillis()I
+HPLandroid/telephony/ModemActivityInfo;->getSleepTimeMillis()I
+HPLandroid/telephony/ModemActivityInfo;->getTxTimeMillis()[I
+HPLandroid/telephony/ModemActivityInfo;->isEmpty()Z
+HPLandroid/telephony/ModemActivityInfo;->isValid()Z
+HPLandroid/telephony/ModemActivityInfo;->toString()Ljava/lang/String;
+HPLandroid/telephony/ModemActivityInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/telephony/PhoneNumberFormattingTextWatcher;->afterTextChanged(Landroid/text/Editable;)V
+HPLandroid/telephony/PhoneNumberFormattingTextWatcher;->beforeTextChanged(Ljava/lang/CharSequence;III)V
+HPLandroid/telephony/PhoneNumberFormattingTextWatcher;->getFormattedNumber(CZ)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberFormattingTextWatcher;->hasSeparator(Ljava/lang/CharSequence;II)Z
+HPLandroid/telephony/PhoneNumberFormattingTextWatcher;->onTextChanged(Ljava/lang/CharSequence;III)V
+HPLandroid/telephony/PhoneNumberFormattingTextWatcher;->reformat(Ljava/lang/CharSequence;I)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->addTtsSpan(Landroid/text/Spannable;II)V
+HPLandroid/telephony/PhoneNumberUtils;->compare(Ljava/lang/String;Ljava/lang/String;)Z
+HPLandroid/telephony/PhoneNumberUtils;->compare(Ljava/lang/String;Ljava/lang/String;Z)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;->convertToEmergencyNumber(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->createTtsSpan(Ljava/lang/String;)Landroid/text/style/TtsSpan;
+HPLandroid/telephony/PhoneNumberUtils;->createTtsSpannable(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HPLandroid/telephony/PhoneNumberUtils;->extractNetworkPortion(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->extractNetworkPortionAlt(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->extractPostDialPortion(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->formatNumber(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->formatNumber(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->formatNumberInternal(Ljava/lang/String;Ljava/lang/String;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->formatNumberToE164(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->getDefaultVoiceSubId()I
+HPLandroid/telephony/PhoneNumberUtils;->getNumberFromIntent(Landroid/content/Intent;Landroid/content/Context;)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->indexOfLastNetworkChar(Ljava/lang/String;)I
+HPLandroid/telephony/PhoneNumberUtils;->is12Key(C)Z
+HPLandroid/telephony/PhoneNumberUtils;->isDialable(C)Z
+HPLandroid/telephony/PhoneNumberUtils;->isEmergencyNumber(ILjava/lang/String;)Z
+HPLandroid/telephony/PhoneNumberUtils;->isEmergencyNumber(Ljava/lang/String;)Z
+HPLandroid/telephony/PhoneNumberUtils;->isEmergencyNumberInternal(ILjava/lang/String;Ljava/lang/String;Z)Z
+HPLandroid/telephony/PhoneNumberUtils;->isEmergencyNumberInternal(ILjava/lang/String;Z)Z
+HPLandroid/telephony/PhoneNumberUtils;->isISODigit(C)Z
+HPLandroid/telephony/PhoneNumberUtils;->isLocalEmergencyNumber(Landroid/content/Context;ILjava/lang/String;)Z
+HPLandroid/telephony/PhoneNumberUtils;->isLocalEmergencyNumber(Landroid/content/Context;Ljava/lang/String;)Z
+HPLandroid/telephony/PhoneNumberUtils;->isLocalEmergencyNumberInternal(ILjava/lang/String;Landroid/content/Context;Z)Z
+HPLandroid/telephony/PhoneNumberUtils;->isNonSeparator(C)Z
+HPLandroid/telephony/PhoneNumberUtils;->isPotentialLocalEmergencyNumber(Landroid/content/Context;ILjava/lang/String;)Z
+HPLandroid/telephony/PhoneNumberUtils;->isPotentialLocalEmergencyNumber(Landroid/content/Context;Ljava/lang/String;)Z
+HPLandroid/telephony/PhoneNumberUtils;->isUriNumber(Ljava/lang/String;)Z
+HPLandroid/telephony/PhoneNumberUtils;->isVoiceMailNumber(Landroid/content/Context;ILjava/lang/String;)Z
+HPLandroid/telephony/PhoneNumberUtils;->minPositive(II)I
+HPLandroid/telephony/PhoneNumberUtils;->normalizeNumber(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->replaceUnicodeDigits(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->splitAtNonNumerics(Ljava/lang/CharSequence;)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->stripSeparators(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/telephony/PhoneNumberUtils;->ttsSpanAsPhoneNumber(Landroid/text/Spannable;II)V
+HPLandroid/telephony/PreciseCallState$1;-><init>()V
+HPLandroid/telephony/PreciseCallState;-><init>()V
+HPLandroid/telephony/PreciseDataConnectionState$1;-><init>()V
+HPLandroid/telephony/PreciseDataConnectionState;-><init>()V
+HPLandroid/telephony/ServiceState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/ServiceState;
+HPLandroid/telephony/ServiceState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/telephony/ServiceState;-><init>(Landroid/os/Parcel;)V
+HPLandroid/telephony/ServiceState;->fillInNotifierBundle(Landroid/os/Bundle;)V
+HPLandroid/telephony/SignalStrength$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/SignalStrength;
+HPLandroid/telephony/SignalStrength$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/telephony/SignalStrength;-><init>(Landroid/os/Parcel;)V
+HPLandroid/telephony/SignalStrength;->fillInNotifierBundle(Landroid/os/Bundle;)V
+HPLandroid/telephony/SignalStrength;->getCdmaDbm()I
+HPLandroid/telephony/SignalStrength;->getCdmaEcio()I
+HPLandroid/telephony/SignalStrength;->getCdmaLevel()I
+HPLandroid/telephony/SignalStrength;->getEvdoDbm()I
+HPLandroid/telephony/SignalStrength;->getEvdoLevel()I
+HPLandroid/telephony/SignalStrength;->getEvdoSnr()I
+HPLandroid/telephony/SignalStrength;->getLevel()I
+HPLandroid/telephony/TelephonyManager;->createForPhoneAccountHandle(Landroid/telecom/PhoneAccountHandle;)Landroid/telephony/TelephonyManager;
+HPLandroid/telephony/TelephonyManager;->getAllCellInfo()Ljava/util/List;
+HPLandroid/telephony/TelephonyManager;->getCellLocation()Landroid/telephony/CellLocation;
+HPLandroid/telephony/TelephonyManager;->getDataEnabled()Z
+HPLandroid/telephony/TelephonyManager;->getDataEnabled(I)Z
+HPLandroid/telephony/TelephonyManager;->getEmergencyCallbackMode()Z
+HPLandroid/telephony/TelephonyManager;->getEmergencyCallbackMode(I)Z
+HPLandroid/telephony/TelephonyManager;->getGroupIdLevel1()Ljava/lang/String;
+HPLandroid/telephony/TelephonyManager;->getNetworkType()I
+HPLandroid/telephony/TelephonyManager;->getPackagesWithCarrierPrivileges()Ljava/util/List;
+HPLandroid/telephony/TelephonyManager;->getPhoneTypeFromProperty(I)I
+HPLandroid/telephony/TelephonyManager;->getSubIdForPhoneAccount(Landroid/telecom/PhoneAccount;)I
+HPLandroid/telephony/TelephonyManager;->getSubIdForPhoneAccountHandle(Landroid/telecom/PhoneAccountHandle;)I
+HPLandroid/telephony/TelephonyManager;->getTetherApnRequired()I
+HPLandroid/telephony/TelephonyManager;->getVoiceMailNumber(I)Ljava/lang/String;
+HPLandroid/telephony/TelephonyManager;->getVoiceNetworkType()I
+HPLandroid/telephony/TelephonyManager;->getVoiceNetworkType(I)I
+HPLandroid/telephony/TelephonyManager;->getVtDataUsage(I)Landroid/net/NetworkStats;
+HPLandroid/telephony/TelephonyManager;->isDataEnabled()Z
+HPLandroid/telephony/TelephonyManager;->isNetworkRoaming()Z
+HPLandroid/telephony/TelephonyManager;->isNetworkRoaming(I)Z
+HPLandroid/telephony/VoLteServiceState$1;-><init>()V
+HPLandroid/telephony/VoLteServiceState;-><init>()V
+HPLandroid/telephony/VoLteServiceState;->initialize()V
+HPLandroid/telephony/gsm/GsmCellLocation;->fillInNotifierBundle(Landroid/os/Bundle;)V
+HPLandroid/telephony/ims/ImsService$1;->getConfigInterface(II)Lcom/android/ims/internal/IImsConfig;
+HPLandroid/test/InstrumentationTestCase;->getInstrumentation()Landroid/app/Instrumentation;
+HPLandroid/text/AndroidBidi;->bidi(I[C[BIZ)I
+HPLandroid/text/AndroidBidi;->directions(I[BI[CII)Landroid/text/Layout$Directions;
+HPLandroid/text/Annotation;-><init>(Landroid/os/Parcel;)V
+HPLandroid/text/Annotation;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/text/Annotation;->getSpanTypeIdInternal()I
+HPLandroid/text/Annotation;->getValue()Ljava/lang/String;
+HPLandroid/text/Annotation;->writeToParcelInternal(Landroid/os/Parcel;I)V
+HPLandroid/text/BidiFormatter;->getInstance()Landroid/text/BidiFormatter;
+HPLandroid/text/BidiFormatter;->isRtlLocale(Ljava/util/Locale;)Z
+HPLandroid/text/BidiFormatter;->unicodeWrap(Ljava/lang/String;Landroid/text/TextDirectionHeuristic;)Ljava/lang/String;
+HPLandroid/text/BoringLayout;->getEllipsisCount(I)I
+HPLandroid/text/CharSequenceCharacterIterator;-><init>(Ljava/lang/CharSequence;II)V
+HPLandroid/text/CharSequenceCharacterIterator;->current()C
+HPLandroid/text/CharSequenceCharacterIterator;->first()C
+HPLandroid/text/CharSequenceCharacterIterator;->getBeginIndex()I
+HPLandroid/text/CharSequenceCharacterIterator;->getEndIndex()I
+HPLandroid/text/CharSequenceCharacterIterator;->getIndex()I
+HPLandroid/text/CharSequenceCharacterIterator;->next()C
+HPLandroid/text/CharSequenceCharacterIterator;->previous()C
+HPLandroid/text/CharSequenceCharacterIterator;->setIndex(I)C
+HPLandroid/text/DynamicLayout$ChangeWatcher;->afterTextChanged(Landroid/text/Editable;)V
+HPLandroid/text/DynamicLayout$ChangeWatcher;->beforeTextChanged(Ljava/lang/CharSequence;III)V
+HPLandroid/text/DynamicLayout$ChangeWatcher;->onTextChanged(Ljava/lang/CharSequence;III)V
+HPLandroid/text/DynamicLayout$ChangeWatcher;->reflow(Ljava/lang/CharSequence;III)V
+HPLandroid/text/DynamicLayout;->-wrap0(Landroid/text/DynamicLayout;Ljava/lang/CharSequence;III)V
+HPLandroid/text/Html$HtmlParser;->-get0()Lorg/ccil/cowan/tagsoup/HTMLSchema;
+HPLandroid/text/Html$TagHandler;->handleTag(ZLjava/lang/String;Landroid/text/Editable;Lorg/xml/sax/XMLReader;)V
+HPLandroid/text/Html;->fromHtml(Ljava/lang/String;)Landroid/text/Spanned;
+HPLandroid/text/Html;->fromHtml(Ljava/lang/String;I)Landroid/text/Spanned;
+HPLandroid/text/Html;->fromHtml(Ljava/lang/String;ILandroid/text/Html$ImageGetter;Landroid/text/Html$TagHandler;)Landroid/text/Spanned;
+HPLandroid/text/Html;->fromHtml(Ljava/lang/String;Landroid/text/Html$ImageGetter;Landroid/text/Html$TagHandler;)Landroid/text/Spanned;
+HPLandroid/text/HtmlToSpannedConverter$Bold;-><init>()V
+HPLandroid/text/HtmlToSpannedConverter$Bold;-><init>(Landroid/text/HtmlToSpannedConverter$Bold;)V
+HPLandroid/text/HtmlToSpannedConverter$Href;-><init>(Ljava/lang/String;)V
+HPLandroid/text/HtmlToSpannedConverter;-><init>(Ljava/lang/String;Landroid/text/Html$ImageGetter;Landroid/text/Html$TagHandler;Lorg/ccil/cowan/tagsoup/Parser;I)V
+HPLandroid/text/HtmlToSpannedConverter;->characters([CII)V
+HPLandroid/text/HtmlToSpannedConverter;->convert()Landroid/text/Spanned;
+HPLandroid/text/HtmlToSpannedConverter;->end(Landroid/text/Editable;Ljava/lang/Class;Ljava/lang/Object;)V
+HPLandroid/text/HtmlToSpannedConverter;->endA(Landroid/text/Editable;)V
+HPLandroid/text/HtmlToSpannedConverter;->endDocument()V
+HPLandroid/text/HtmlToSpannedConverter;->endElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/text/HtmlToSpannedConverter;->endPrefixMapping(Ljava/lang/String;)V
+HPLandroid/text/HtmlToSpannedConverter;->getLast(Landroid/text/Spanned;Ljava/lang/Class;)Ljava/lang/Object;
+HPLandroid/text/HtmlToSpannedConverter;->handleBr(Landroid/text/Editable;)V
+HPLandroid/text/HtmlToSpannedConverter;->handleEndTag(Ljava/lang/String;)V
+HPLandroid/text/HtmlToSpannedConverter;->handleStartTag(Ljava/lang/String;Lorg/xml/sax/Attributes;)V
+HPLandroid/text/HtmlToSpannedConverter;->setDocumentLocator(Lorg/xml/sax/Locator;)V
+HPLandroid/text/HtmlToSpannedConverter;->setSpanFromMark(Landroid/text/Spannable;Ljava/lang/Object;[Ljava/lang/Object;)V
+HPLandroid/text/HtmlToSpannedConverter;->start(Landroid/text/Editable;Ljava/lang/Object;)V
+HPLandroid/text/HtmlToSpannedConverter;->startA(Landroid/text/Editable;Lorg/xml/sax/Attributes;)V
+HPLandroid/text/HtmlToSpannedConverter;->startDocument()V
+HPLandroid/text/HtmlToSpannedConverter;->startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V
+HPLandroid/text/HtmlToSpannedConverter;->startPrefixMapping(Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/text/InputFilter$LengthFilter;-><init>(I)V
+HPLandroid/text/InputFilter$LengthFilter;->filter(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Ljava/lang/CharSequence;
+HPLandroid/text/Layout$Ellipsizer;->charAt(I)C
+HPLandroid/text/Layout$Ellipsizer;->getChars(II[CI)V
+HPLandroid/text/Layout;->-wrap0(Landroid/text/Layout;III[CILandroid/text/TextUtils$TruncateAt;)V
+HPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;)V
+HPLandroid/text/Layout;->ellipsize(III[CILandroid/text/TextUtils$TruncateAt;)V
+HPLandroid/text/Layout;->getEllipsisChar(Landroid/text/TextUtils$TruncateAt;)C
+HPLandroid/text/Layout;->getHorizontal(IZ)F
+HPLandroid/text/Layout;->getOffsetForHorizontal(IF)I
+HPLandroid/text/Layout;->getOffsetForHorizontal(IFZ)I
+HPLandroid/text/Layout;->getPrimaryHorizontal(I)F
+HPLandroid/text/Selection$PositionIterator;->following(I)I
+HPLandroid/text/Selection$PositionIterator;->preceding(I)I
+HPLandroid/text/Selection;->removeSelection(Landroid/text/Spannable;)V
+HPLandroid/text/SpannableString;-><init>(Ljava/lang/CharSequence;II)V
+HPLandroid/text/SpannableString;->equals(Ljava/lang/Object;)Z
+HPLandroid/text/SpannableString;->nextSpanTransition(IILjava/lang/Class;)I
+HPLandroid/text/SpannableString;->removeSpan(Ljava/lang/Object;)V
+HPLandroid/text/SpannableString;->subSequence(II)Ljava/lang/CharSequence;
+HPLandroid/text/SpannableStringBuilder;->append(C)Landroid/text/Editable;
+HPLandroid/text/SpannableStringBuilder;->append(C)Landroid/text/SpannableStringBuilder;
+HPLandroid/text/SpannableStringBuilder;->append(C)Ljava/lang/Appendable;
+HPLandroid/text/SpannableStringBuilder;->append(Ljava/lang/CharSequence;Ljava/lang/Object;I)Landroid/text/SpannableStringBuilder;
+HPLandroid/text/SpannableStringBuilder;->clear()V
+HPLandroid/text/SpannableStringBuilder;->clearSpans()V
+HPLandroid/text/SpannableStringBuilder;->delete(II)Landroid/text/Editable;
+HPLandroid/text/SpannableStringBuilder;->delete(II)Landroid/text/SpannableStringBuilder;
+HPLandroid/text/SpannableStringBuilder;->equals(Ljava/lang/Object;)Z
+HPLandroid/text/SpannableStringBuilder;->getTextWatcherDepth()I
+HPLandroid/text/SpannableStringBuilder;->insert(ILjava/lang/CharSequence;)Landroid/text/Editable;
+HPLandroid/text/SpannableStringBuilder;->insert(ILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
+HPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/Editable;
+HPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;II)Landroid/text/Editable;
+HPLandroid/text/SpannableStringBuilder;->resizeFor(I)V
+HPLandroid/text/SpannableStringInternal;->equals(Ljava/lang/Object;)Z
+HPLandroid/text/SpannableStringInternal;->hashCode()I
+HPLandroid/text/SpannableStringInternal;->removeSpan(Ljava/lang/Object;)V
+HPLandroid/text/SpannableStringInternal;->sendSpanRemoved(Ljava/lang/Object;II)V
+HPLandroid/text/SpannedString;-><init>(Ljava/lang/CharSequence;II)V
+HPLandroid/text/SpannedString;->equals(Ljava/lang/Object;)Z
+HPLandroid/text/SpannedString;->hashCode()I
+HPLandroid/text/SpannedString;->subSequence(II)Ljava/lang/CharSequence;
+HPLandroid/text/StaticLayout$Builder;->-wrap0(Landroid/text/StaticLayout$Builder;)V
+HPLandroid/text/StaticLayout$Builder;->setIndents([I[I)Landroid/text/StaticLayout$Builder;
+HPLandroid/text/StaticLayout;->-wrap6(J[I)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
+HPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->isRtl([CII)Z
+HPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;->defaultIsRtl()Z
+HPLandroid/text/TextLine$DecorationInfo;->copyInfo()Landroid/text/TextLine$DecorationInfo;
+HPLandroid/text/TextLine;->drawStroke(Landroid/text/TextPaint;Landroid/graphics/Canvas;IFFFFF)V
+HPLandroid/text/TextPaint;-><init>(Landroid/graphics/Paint;)V
+HPLandroid/text/TextPaint;->getUnderlineThickness()F
+HPLandroid/text/TextUtils$SimpleStringSplitter;->hasNext()Z
+HPLandroid/text/TextUtils;->-wrap0(Landroid/os/Parcel;Landroid/text/Spannable;Ljava/lang/Object;)V
+HPLandroid/text/TextUtils;->concat([Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HPLandroid/text/TextUtils;->ellipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLandroid/text/TextUtils$TruncateAt;)Ljava/lang/CharSequence;
+HPLandroid/text/TextUtils;->getCapsMode(Ljava/lang/CharSequence;II)I
+HPLandroid/text/TextUtils;->getTrimmedLength(Ljava/lang/CharSequence;)I
+HPLandroid/text/TextUtils;->isDigitsOnly(Ljava/lang/CharSequence;)Z
+HPLandroid/text/TextUtils;->nullIfEmpty(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/text/TextUtils;->readSpan(Landroid/os/Parcel;Landroid/text/Spannable;Ljava/lang/Object;)V
+HPLandroid/text/TextUtils;->safeIntern(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/text/TextUtils;->substring(Ljava/lang/CharSequence;II)Ljava/lang/String;
+HPLandroid/text/TextUtils;->toUpperMapToDest(Landroid/icu/text/Edits$Iterator;I)I
+HPLandroid/text/TextUtils;->writeWhere(Landroid/os/Parcel;Landroid/text/Spanned;Ljava/lang/Object;)V
+HPLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;JJI)Ljava/lang/String;
+HPLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJI)Ljava/util/Formatter;
+HPLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJILjava/lang/String;)Ljava/util/Formatter;
+HPLandroid/text/format/DateUtils;->getRelativeTimeSpanString(JJJ)Ljava/lang/CharSequence;
+HPLandroid/text/format/DateUtils;->getRelativeTimeSpanString(JJJI)Ljava/lang/CharSequence;
+HPLandroid/text/format/DateUtils;->getRelativeTimeSpanString(Landroid/content/Context;J)Ljava/lang/CharSequence;
+HPLandroid/text/format/DateUtils;->getRelativeTimeSpanString(Landroid/content/Context;JZ)Ljava/lang/CharSequence;
+HPLandroid/text/format/Time$TimeCalculator;->toMillis(Z)J
+HPLandroid/text/format/Time;->toMillis(Z)J
+HPLandroid/text/format/TimeFormatter;->outputYear(IZZI)V
+HPLandroid/text/method/ArrowKeyMovementMethod;->handleMovementKey(Landroid/widget/TextView;Landroid/text/Spannable;IILandroid/view/KeyEvent;)Z
+HPLandroid/text/method/ArrowKeyMovementMethod;->isSelecting(Landroid/text/Spannable;)Z
+HPLandroid/text/method/ArrowKeyMovementMethod;->onTouchEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z
+HPLandroid/text/method/BaseKeyListener;->backspace(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z
+HPLandroid/text/method/BaseKeyListener;->backspaceOrForwardDelete(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;Z)Z
+HPLandroid/text/method/BaseKeyListener;->deleteSelection(Landroid/view/View;Landroid/text/Editable;)Z
+HPLandroid/text/method/BaseKeyListener;->getOffsetForBackspaceKey(Ljava/lang/CharSequence;I)I
+HPLandroid/text/method/BaseKeyListener;->onKeyDown(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z
+HPLandroid/text/method/BaseMovementMethod;->getMovementMetaState(Landroid/text/Spannable;Landroid/view/KeyEvent;)I
+HPLandroid/text/method/BaseMovementMethod;->handleMovementKey(Landroid/widget/TextView;Landroid/text/Spannable;IILandroid/view/KeyEvent;)Z
+HPLandroid/text/method/BaseMovementMethod;->onKeyDown(Landroid/widget/TextView;Landroid/text/Spannable;ILandroid/view/KeyEvent;)Z
+HPLandroid/text/method/BaseMovementMethod;->onKeyUp(Landroid/widget/TextView;Landroid/text/Spannable;ILandroid/view/KeyEvent;)Z
+HPLandroid/text/method/DialerKeyListener;->getAcceptedChars()[C
+HPLandroid/text/method/DialerKeyListener;->lookup(Landroid/view/KeyEvent;Landroid/text/Spannable;)I
+HPLandroid/text/method/LinkMovementMethod;->initialize(Landroid/widget/TextView;Landroid/text/Spannable;)V
+HPLandroid/text/method/MetaKeyKeyListener;->adjust(Landroid/text/Spannable;Ljava/lang/Object;)V
+HPLandroid/text/method/MetaKeyKeyListener;->adjustMetaAfterKeypress(Landroid/text/Spannable;)V
+HPLandroid/text/method/MetaKeyKeyListener;->getMetaState(JI)I
+HPLandroid/text/method/MetaKeyKeyListener;->getMetaState(Ljava/lang/CharSequence;ILandroid/view/KeyEvent;)I
+HPLandroid/text/method/MetaKeyKeyListener;->getMetaState(Ljava/lang/CharSequence;Landroid/view/KeyEvent;)I
+HPLandroid/text/method/MetaKeyKeyListener;->onKeyDown(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z
+HPLandroid/text/method/MetaKeyKeyListener;->onKeyUp(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z
+HPLandroid/text/method/NumberKeyListener;->filter(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Ljava/lang/CharSequence;
+HPLandroid/text/method/NumberKeyListener;->ok([CC)Z
+HPLandroid/text/method/NumberKeyListener;->onKeyDown(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z
+HPLandroid/text/method/QwertyKeyListener;-><init>(Landroid/text/method/TextKeyListener$Capitalize;ZZ)V
+HPLandroid/text/method/QwertyKeyListener;->getInstanceForFullKeyboard()Landroid/text/method/QwertyKeyListener;
+HPLandroid/text/method/QwertyKeyListener;->onKeyDown(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z
+HPLandroid/text/method/TextKeyListener$SettingsObserver;-><init>(Landroid/text/method/TextKeyListener;)V
+HPLandroid/text/method/TextKeyListener$SettingsObserver;->onChange(Z)V
+HPLandroid/text/method/TextKeyListener;->-get0(Landroid/text/method/TextKeyListener;)Ljava/lang/ref/WeakReference;
+HPLandroid/text/method/TextKeyListener;->-wrap0(Landroid/text/method/TextKeyListener;Landroid/content/ContentResolver;)V
+HPLandroid/text/method/TextKeyListener;->getKeyListener(Landroid/view/KeyEvent;)Landroid/text/method/KeyListener;
+HPLandroid/text/method/TextKeyListener;->getPrefs(Landroid/content/Context;)I
+HPLandroid/text/method/TextKeyListener;->initPrefs(Landroid/content/Context;)V
+HPLandroid/text/method/TextKeyListener;->onKeyDown(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z
+HPLandroid/text/method/TextKeyListener;->onKeyUp(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z
+HPLandroid/text/method/TextKeyListener;->updatePrefs(Landroid/content/ContentResolver;)V
+HPLandroid/text/method/Touch$DragState;-><init>(FFII)V
+HPLandroid/text/method/Touch;->onTouchEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z
+HPLandroid/text/method/TransformationMethod;->getTransformation(Ljava/lang/CharSequence;Landroid/view/View;)Ljava/lang/CharSequence;
+HPLandroid/text/method/TransformationMethod;->onFocusChanged(Landroid/view/View;Ljava/lang/CharSequence;ZILandroid/graphics/Rect;)V
+HPLandroid/text/method/WordIterator;-><init>(Ljava/util/Locale;)V
+HPLandroid/text/method/WordIterator;->checkOffsetIsValid(I)V
+HPLandroid/text/method/WordIterator;->following(I)I
+HPLandroid/text/method/WordIterator;->getBeginning(I)I
+HPLandroid/text/method/WordIterator;->getBeginning(IZ)I
+HPLandroid/text/method/WordIterator;->isAfterLetterOrDigit(I)Z
+HPLandroid/text/method/WordIterator;->isOnLetterOrDigit(I)Z
+HPLandroid/text/method/WordIterator;->setCharSequence(Ljava/lang/CharSequence;II)V
+HPLandroid/text/style/AccessibilityClickableSpan$1;-><init>()V
+HPLandroid/text/style/AccessibilityClickableSpan;-><init>(Landroid/os/Parcel;)V
+HPLandroid/text/style/AccessibilityClickableSpan;->copyConnectionDataFrom(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/text/style/AccessibilityURLSpan;-><init>(Landroid/os/Parcel;)V
+HPLandroid/text/style/CharacterStyle$Passthrough;-><init>(Landroid/text/style/CharacterStyle;)V
+HPLandroid/text/style/CharacterStyle$Passthrough;->updateDrawState(Landroid/text/TextPaint;)V
+HPLandroid/text/style/CharacterStyle;->getUnderlying()Landroid/text/style/CharacterStyle;
+HPLandroid/text/style/CharacterStyle;->wrap(Landroid/text/style/CharacterStyle;)Landroid/text/style/CharacterStyle;
+HPLandroid/text/style/ClickableSpan;-><init>()V
+HPLandroid/text/style/ClickableSpan;->onClick(Landroid/view/View;)V
+HPLandroid/text/style/ClickableSpan;->updateDrawState(Landroid/text/TextPaint;)V
+HPLandroid/text/style/DynamicDrawableSpan;->draw(Landroid/graphics/Canvas;Ljava/lang/CharSequence;IIFIIILandroid/graphics/Paint;)V
+HPLandroid/text/style/ForegroundColorSpan;-><init>(Landroid/os/Parcel;)V
+HPLandroid/text/style/ForegroundColorSpan;->getSpanTypeIdInternal()I
+HPLandroid/text/style/ForegroundColorSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
+HPLandroid/text/style/LocaleSpan;-><init>(Landroid/os/Parcel;)V
+HPLandroid/text/style/MetricAffectingSpan$Passthrough;-><init>(Landroid/text/style/MetricAffectingSpan;)V
+HPLandroid/text/style/MetricAffectingSpan$Passthrough;->updateDrawState(Landroid/text/TextPaint;)V
+HPLandroid/text/style/MetricAffectingSpan$Passthrough;->updateMeasureState(Landroid/text/TextPaint;)V
+HPLandroid/text/style/MetricAffectingSpan;->getUnderlying()Landroid/text/style/CharacterStyle;
+HPLandroid/text/style/MetricAffectingSpan;->getUnderlying()Landroid/text/style/MetricAffectingSpan;
+HPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/content/Context;I)V
+HPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/content/Context;II)V
+HPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/os/Parcel;)V
+HPLandroid/text/style/TextAppearanceSpan;->updateDrawState(Landroid/text/TextPaint;)V
+HPLandroid/text/style/TextAppearanceSpan;->updateMeasureState(Landroid/text/TextPaint;)V
+HPLandroid/text/style/TtsSpan$TelephoneBuilder;-><init>()V
+HPLandroid/text/style/TtsSpan$TelephoneBuilder;->setNumberParts(Ljava/lang/String;)Landroid/text/style/TtsSpan$TelephoneBuilder;
+HPLandroid/text/style/TtsSpan;->getSpanTypeIdInternal()I
+HPLandroid/text/style/TtsSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
+HPLandroid/text/style/URLSpan;-><init>(Landroid/os/Parcel;)V
+HPLandroid/text/style/URLSpan;-><init>(Ljava/lang/String;)V
+HPLandroid/text/style/UnderlineSpan;-><init>()V
+HPLandroid/text/style/UnderlineSpan;-><init>(Landroid/os/Parcel;)V
+HPLandroid/text/style/UnderlineSpan;->getSpanTypeIdInternal()I
+HPLandroid/text/style/UnderlineSpan;->updateDrawState(Landroid/text/TextPaint;)V
+HPLandroid/text/style/UnderlineSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
+HPLandroid/text/util/Linkify$1;-><init>()V
+HPLandroid/text/util/Linkify$2;-><init>()V
+HPLandroid/text/util/Linkify$3;-><init>()V
+HPLandroid/text/util/Linkify$4;-><init>()V
+HPLandroid/text/util/Linkify$TransformFilter;->transformUrl(Ljava/util/regex/Matcher;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/text/util/Linkify;->addLinks(Landroid/text/Spannable;I)Z
+HPLandroid/text/util/Linkify;->addLinks(Landroid/text/Spannable;ILandroid/content/Context;)Z
+HPLandroid/text/util/Linkify;->gatherLinks(Ljava/util/ArrayList;Landroid/text/Spannable;Ljava/util/regex/Pattern;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)V
+HPLandroid/text/util/Linkify;->gatherTelLinks(Ljava/util/ArrayList;Landroid/text/Spannable;Landroid/content/Context;)V
+HPLandroid/text/util/Linkify;->pruneOverlaps(Ljava/util/ArrayList;)V
+HPLandroid/text/util/Rfc822Token;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/text/util/Rfc822Token;->quoteNameIfNecessary(Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/text/util/Rfc822Token;->toString()Ljava/lang/String;
+HPLandroid/text/util/Rfc822Tokenizer;-><init>()V
+HPLandroid/text/util/Rfc822Tokenizer;->crunch(Ljava/lang/StringBuilder;)V
+HPLandroid/text/util/Rfc822Tokenizer;->findTokenEnd(Ljava/lang/CharSequence;I)I
+HPLandroid/text/util/Rfc822Tokenizer;->findTokenStart(Ljava/lang/CharSequence;I)I
+HPLandroid/text/util/Rfc822Tokenizer;->tokenize(Ljava/lang/CharSequence;Ljava/util/Collection;)V
+HPLandroid/transition/ArcMotion;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/transition/ArcMotion;->getPath(FFFF)Landroid/graphics/Path;
+HPLandroid/transition/ArcMotion;->setMaximumAngle(F)V
+HPLandroid/transition/ArcMotion;->setMinimumHorizontalAngle(F)V
+HPLandroid/transition/ArcMotion;->setMinimumVerticalAngle(F)V
+HPLandroid/transition/ArcMotion;->toTangent(F)F
+HPLandroid/transition/ChangeBounds$4;->set(Landroid/view/View;Landroid/graphics/PointF;)V
+HPLandroid/transition/ChangeBounds$4;->set(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLandroid/transition/ChangeBounds$9;-><init>(Landroid/transition/ChangeBounds;Landroid/view/ViewGroup;)V
+HPLandroid/transition/ChangeBounds$9;->onTransitionEnd(Landroid/transition/Transition;)V
+HPLandroid/transition/ChangeBounds;->captureEndValues(Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeBounds;->captureStartValues(Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeBounds;->captureValues(Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeBounds;->createAnimator(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;
+HPLandroid/transition/ChangeBounds;->getTransitionProperties()[Ljava/lang/String;
+HPLandroid/transition/ChangeBounds;->parentMatches(Landroid/view/View;Landroid/view/View;)Z
+HPLandroid/transition/ChangeClipBounds;->captureEndValues(Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeClipBounds;->captureStartValues(Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeClipBounds;->captureValues(Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeClipBounds;->getTransitionProperties()[Ljava/lang/String;
+HPLandroid/transition/ChangeImageTransform;->captureEndValues(Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeImageTransform;->captureStartValues(Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeImageTransform;->captureValues(Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeImageTransform;->getTransitionProperties()[Ljava/lang/String;
+HPLandroid/transition/ChangeTransform$1;->set(Landroid/transition/ChangeTransform$PathAnimatorMatrix;[F)V
+HPLandroid/transition/ChangeTransform$1;->set(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLandroid/transition/ChangeTransform$2;->set(Landroid/transition/ChangeTransform$PathAnimatorMatrix;Landroid/graphics/PointF;)V
+HPLandroid/transition/ChangeTransform$2;->set(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLandroid/transition/ChangeTransform$3;-><init>(Landroid/transition/ChangeTransform;ZLandroid/graphics/Matrix;Landroid/view/View;Landroid/transition/ChangeTransform$Transforms;Landroid/transition/ChangeTransform$PathAnimatorMatrix;)V
+HPLandroid/transition/ChangeTransform$3;->onAnimationEnd(Landroid/animation/Animator;)V
+HPLandroid/transition/ChangeTransform$3;->setCurrentMatrix(Landroid/graphics/Matrix;)V
+HPLandroid/transition/ChangeTransform$GhostListener;-><init>(Landroid/view/View;Landroid/view/View;Landroid/view/GhostView;)V
+HPLandroid/transition/ChangeTransform$GhostListener;->onTransitionEnd(Landroid/transition/Transition;)V
+HPLandroid/transition/ChangeTransform$PathAnimatorMatrix;-><init>(Landroid/view/View;[F)V
+HPLandroid/transition/ChangeTransform$PathAnimatorMatrix;->setAnimationMatrix()V
+HPLandroid/transition/ChangeTransform$PathAnimatorMatrix;->setTranslation(Landroid/graphics/PointF;)V
+HPLandroid/transition/ChangeTransform$PathAnimatorMatrix;->setValues([F)V
+HPLandroid/transition/ChangeTransform$Transforms;-><init>(Landroid/view/View;)V
+HPLandroid/transition/ChangeTransform$Transforms;->equals(Ljava/lang/Object;)Z
+HPLandroid/transition/ChangeTransform$Transforms;->restore(Landroid/view/View;)V
+HPLandroid/transition/ChangeTransform;->-get0(Landroid/transition/ChangeTransform;)Z
+HPLandroid/transition/ChangeTransform;->-wrap1(Landroid/view/View;FFFFFFFF)V
+HPLandroid/transition/ChangeTransform;->captureEndValues(Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeTransform;->captureStartValues(Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeTransform;->captureValues(Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeTransform;->createAnimator(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;
+HPLandroid/transition/ChangeTransform;->createGhostView(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeTransform;->createTransformAnimator(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;Z)Landroid/animation/ObjectAnimator;
+HPLandroid/transition/ChangeTransform;->getTransitionProperties()[Ljava/lang/String;
+HPLandroid/transition/ChangeTransform;->parentsMatch(Landroid/view/ViewGroup;Landroid/view/ViewGroup;)Z
+HPLandroid/transition/ChangeTransform;->setIdentityTransforms(Landroid/view/View;)V
+HPLandroid/transition/ChangeTransform;->setMatricesForParent(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)V
+HPLandroid/transition/ChangeTransform;->setTransforms(Landroid/view/View;FFFFFFFF)V
+HPLandroid/transition/Fade$1;-><init>(Landroid/transition/Fade;Landroid/view/View;)V
+HPLandroid/transition/Fade$1;->onTransitionEnd(Landroid/transition/Transition;)V
+HPLandroid/transition/Fade$FadeAnimatorListener;-><init>(Landroid/view/View;)V
+HPLandroid/transition/Fade$FadeAnimatorListener;->onAnimationEnd(Landroid/animation/Animator;)V
+HPLandroid/transition/Fade$FadeAnimatorListener;->onAnimationStart(Landroid/animation/Animator;)V
+HPLandroid/transition/Fade;-><init>()V
+HPLandroid/transition/Fade;->captureStartValues(Landroid/transition/TransitionValues;)V
+HPLandroid/transition/Fade;->createAnimation(Landroid/view/View;FF)Landroid/animation/Animator;
+HPLandroid/transition/Fade;->getStartAlpha(Landroid/transition/TransitionValues;F)F
+HPLandroid/transition/Fade;->onDisappear(Landroid/view/ViewGroup;Landroid/view/View;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;
+HPLandroid/transition/PathMotion;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/transition/Scene;->getCurrentScene(Landroid/view/View;)Landroid/transition/Scene;
+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
+HPLandroid/transition/Transition$EpicenterCallback;-><init>()V
+HPLandroid/transition/Transition$EpicenterCallback;->onGetEpicenter(Landroid/transition/Transition;)Landroid/graphics/Rect;
+HPLandroid/transition/Transition;->-get0(Landroid/transition/Transition;)Ljava/util/ArrayList;
+HPLandroid/transition/Transition;->addTarget(I)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;->getMatchedTransitionValues(Landroid/view/View;Z)Landroid/transition/TransitionValues;
+HPLandroid/transition/Transition;->getName()Ljava/lang/String;
+HPLandroid/transition/Transition;->getPathMotion()Landroid/transition/PathMotion;
+HPLandroid/transition/Transition;->getRunningAnimators()Landroid/util/ArrayMap;
+HPLandroid/transition/Transition;->getStartDelay()J
+HPLandroid/transition/Transition;->getTargetIds()Ljava/util/List;
+HPLandroid/transition/Transition;->getTargetNames()Ljava/util/List;
+HPLandroid/transition/Transition;->getTargetTypes()Ljava/util/List;
+HPLandroid/transition/Transition;->getTargets()Ljava/util/List;
+HPLandroid/transition/Transition;->getTransitionValues(Landroid/view/View;Z)Landroid/transition/TransitionValues;
+HPLandroid/transition/Transition;->isTransitionRequired(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Z
+HPLandroid/transition/Transition;->isValidTarget(Landroid/view/View;)Z
+HPLandroid/transition/Transition;->isValueChanged(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;Ljava/lang/String;)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;->removeTarget(Landroid/view/View;)Landroid/transition/Transition;
+HPLandroid/transition/Transition;->runAnimator(Landroid/animation/Animator;Landroid/util/ArrayMap;)V
+HPLandroid/transition/Transition;->runAnimators()V
+HPLandroid/transition/Transition;->setEpicenterCallback(Landroid/transition/Transition$EpicenterCallback;)V
+HPLandroid/transition/Transition;->setPathMotion(Landroid/transition/PathMotion;)V
+HPLandroid/transition/Transition;->start()V
+HPLandroid/transition/TransitionInflater;->createCustom(Landroid/util/AttributeSet;Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
+HPLandroid/transition/TransitionInflater;->getTargetIds(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/transition/Transition;)V
+HPLandroid/transition/TransitionListenerAdapter;-><init>()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;-><init>(Landroid/transition/Transition;Landroid/view/ViewGroup;)V
+HPLandroid/transition/TransitionManager$MultiListener;->onPreDraw()Z
+HPLandroid/transition/TransitionManager$MultiListener;->removeListeners()V
+HPLandroid/transition/TransitionManager;->-get0()Ljava/util/ArrayList;
+HPLandroid/transition/TransitionManager;->-wrap0()Landroid/util/ArrayMap;
+HPLandroid/transition/TransitionManager;->sceneChangeRunTransition(Landroid/view/ViewGroup;Landroid/transition/Transition;)V
+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
+HPLandroid/transition/TransitionSet;->addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;
+HPLandroid/transition/TransitionSet;->addTarget(I)Landroid/transition/Transition;
+HPLandroid/transition/TransitionSet;->addTarget(I)Landroid/transition/TransitionSet;
+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
+HPLandroid/transition/TransitionSet;->getTransitionAt(I)Landroid/transition/Transition;
+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
+HPLandroid/transition/TransitionSet;->setDuration(J)Landroid/transition/Transition;
+HPLandroid/transition/TransitionSet;->setEpicenterCallback(Landroid/transition/Transition$EpicenterCallback;)V
+HPLandroid/transition/TransitionSet;->setInterpolator(Landroid/animation/TimeInterpolator;)Landroid/transition/Transition;
+HPLandroid/transition/TransitionSet;->setPathMotion(Landroid/transition/PathMotion;)V
+HPLandroid/transition/TransitionSet;->setupStartEndListeners()V
+HPLandroid/transition/TransitionUtils;->copyViewImage(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/View;)Landroid/view/View;
+HPLandroid/transition/TransitionUtils;->createViewBitmap(Landroid/view/View;Landroid/graphics/Matrix;Landroid/graphics/RectF;)Landroid/graphics/Bitmap;
+HPLandroid/transition/TransitionValues;-><init>()V
+HPLandroid/transition/Visibility$1;-><init>(Landroid/transition/Visibility;Landroid/view/ViewGroup;Landroid/view/View;)V
+HPLandroid/transition/Visibility$1;->onTransitionEnd(Landroid/transition/Transition;)V
+HPLandroid/transition/Visibility$VisibilityInfo;-><init>()V
+HPLandroid/transition/Visibility$VisibilityInfo;-><init>(Landroid/transition/Visibility$VisibilityInfo;)V
+HPLandroid/transition/Visibility;->captureEndValues(Landroid/transition/TransitionValues;)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;
+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;->onDisappear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;
+HPLandroid/util/AndroidException;-><init>()V
+HPLandroid/util/AndroidException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+HPLandroid/util/ArrayMap$1;->colGetMap()Ljava/util/Map;
+HPLandroid/util/ArrayMap$1;->colIndexOfKey(Ljava/lang/Object;)I
+HPLandroid/util/ArrayMap$1;->colIndexOfValue(Ljava/lang/Object;)I
+HPLandroid/util/ArrayMap$1;->colSetValue(ILjava/lang/Object;)Ljava/lang/Object;
+HPLandroid/util/ArrayMap;->containsValue(Ljava/lang/Object;)Z
+HPLandroid/util/ArrayMap;->equals(Ljava/lang/Object;)Z
+HPLandroid/util/ArrayMap;->hashCode()I
+HPLandroid/util/ArrayMap;->indexOfValue(Ljava/lang/Object;)I
+HPLandroid/util/ArrayMap;->setValueAt(ILjava/lang/Object;)Ljava/lang/Object;
+HPLandroid/util/ArraySet;->hashCode()I
+HPLandroid/util/ArraySet;->removeAll(Landroid/util/ArraySet;)Z
+HPLandroid/util/ArraySet;->toArray()[Ljava/lang/Object;
+HPLandroid/util/ArraySet;->toString()Ljava/lang/String;
+HPLandroid/util/AtomicFile;->exists()Z
+HPLandroid/util/AtomicFile;->failWrite(Ljava/io/FileOutputStream;)V
+HPLandroid/util/AtomicFile;->finishWrite(Ljava/io/FileOutputStream;)V
+HPLandroid/util/AtomicFile;->getLastModifiedTime()J
+HPLandroid/util/AtomicFile;->readFully()[B
+HPLandroid/util/AtomicFile;->startWrite()Ljava/io/FileOutputStream;
+HPLandroid/util/Base64;->encodeToString([BIII)Ljava/lang/String;
+HPLandroid/util/EventLog$Event;-><init>([B)V
+HPLandroid/util/EventLog$Event;->decodeObject()Ljava/lang/Object;
+HPLandroid/util/EventLog$Event;->getData()Ljava/lang/Object;
+HPLandroid/util/EventLog$Event;->getProcessId()I
+HPLandroid/util/EventLog$Event;->getTag()I
+HPLandroid/util/EventLog$Event;->getTimeNanos()J
+HPLandroid/util/EventLog$Event;->getUid()I
+HPLandroid/util/EventLog;->getTagCode(Ljava/lang/String;)I
+HPLandroid/util/EventLog;->readTagsFile()V
+HPLandroid/util/FloatProperty;->set(Ljava/lang/Object;Ljava/lang/Float;)V
+HPLandroid/util/FloatProperty;->set(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLandroid/util/IconDrawableFactory;->getBadgedIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;I)Landroid/graphics/drawable/Drawable;
+HPLandroid/util/IconDrawableFactory;->getShadowedIcon(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
+HPLandroid/util/IntArray;->addAll(Landroid/util/IntArray;)V
+HPLandroid/util/IntArray;->indexOf(I)I
+HPLandroid/util/IntArray;->remove(I)V
+HPLandroid/util/IntArray;->toArray()[I
+HPLandroid/util/JsonReader;->endArray()V
+HPLandroid/util/JsonReader;->setLenient(Z)V
+HPLandroid/util/KeyValueListParser;->getBoolean(Ljava/lang/String;Z)Z
+HPLandroid/util/KeyValueListParser;->getFloat(Ljava/lang/String;F)F
+HPLandroid/util/KeyValueListParser;->getInt(Ljava/lang/String;I)I
+HPLandroid/util/KeyValueListParser;->getLong(Ljava/lang/String;J)J
+HPLandroid/util/KeyValueListParser;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/util/KeyValueListParser;->setString(Ljava/lang/String;)V
+HPLandroid/util/LauncherIcons$ShadowDrawable$MyConstantState;-><init>(Landroid/graphics/Bitmap;Landroid/graphics/drawable/Drawable$ConstantState;)V
+HPLandroid/util/LauncherIcons$ShadowDrawable;-><init>(Landroid/graphics/Bitmap;Landroid/graphics/drawable/Drawable;)V
+HPLandroid/util/LauncherIcons;->getShadowBitmap(Landroid/graphics/drawable/AdaptiveIconDrawable;)Landroid/graphics/Bitmap;
+HPLandroid/util/LauncherIcons;->wrapIconDrawableWithShadow(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
+HPLandroid/util/LocalLog$ReadOnlyLocalLog;-><init>(Landroid/util/LocalLog;)V
+HPLandroid/util/LocalLog$ReadOnlyLocalLog;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLandroid/util/LocalLog;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLandroid/util/LocalLog;->readOnlyLocalLog()Landroid/util/LocalLog$ReadOnlyLocalLog;
+HPLandroid/util/LocalLog;->reverseDump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLandroid/util/Log$1;->onTerribleFailure(Ljava/lang/String;Landroid/util/Log$TerribleFailure;Z)V
+HPLandroid/util/Log$TerribleFailure;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+HPLandroid/util/Log;->wtf(ILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ZZ)I
+HPLandroid/util/LongArray;->addAll(Landroid/util/LongArray;)V
+HPLandroid/util/LongArray;->clone()Landroid/util/LongArray;
+HPLandroid/util/LongArray;->indexOf(J)I
+HPLandroid/util/LongSparseArray;->append(JLjava/lang/Object;)V
+HPLandroid/util/LongSparseArray;->keyAt(I)J
+HPLandroid/util/LongSparseArray;->remove(J)V
+HPLandroid/util/LongSparseArray;->removeAt(I)V
+HPLandroid/util/LruCache;->entryRemoved(ZLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLandroid/util/LruCache;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroid/util/LruCache;->snapshot()Ljava/util/Map;
+HPLandroid/util/MapCollections$KeySet;->contains(Ljava/lang/Object;)Z
+HPLandroid/util/MapCollections$KeySet;->containsAll(Ljava/util/Collection;)Z
+HPLandroid/util/MapCollections$KeySet;->equals(Ljava/lang/Object;)Z
+HPLandroid/util/MapCollections$KeySet;->isEmpty()Z
+HPLandroid/util/MapCollections$KeySet;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HPLandroid/util/MapCollections$MapIterator;->setValue(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroid/util/MapCollections$ValuesCollection;->contains(Ljava/lang/Object;)Z
+HPLandroid/util/MapCollections$ValuesCollection;->size()I
+HPLandroid/util/MapCollections$ValuesCollection;->toArray()[Ljava/lang/Object;
+HPLandroid/util/MapCollections;->containsAllHelper(Ljava/util/Map;Ljava/util/Collection;)Z
+HPLandroid/util/MapCollections;->equalsSetHelper(Ljava/util/Set;Ljava/lang/Object;)Z
+HPLandroid/util/MapCollections;->toArrayHelper([Ljava/lang/Object;I)[Ljava/lang/Object;
+HPLandroid/util/MathUtils;->constrain(JJJ)J
+HPLandroid/util/MemoryIntArray;-><init>(I)V
+HPLandroid/util/MemoryIntArray;->enforceWritable()V
+HPLandroid/util/MemoryIntArray;->isWritable()Z
+HPLandroid/util/MemoryIntArray;->set(II)V
+HPLandroid/util/MemoryIntArray;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/util/MergedConfiguration;-><init>(Landroid/content/res/Configuration;)V
+HPLandroid/util/MergedConfiguration;-><init>(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)V
+HPLandroid/util/MergedConfiguration;-><init>(Landroid/util/MergedConfiguration;)V
+HPLandroid/util/MergedConfiguration;->getMergedConfiguration()Landroid/content/res/Configuration;
+HPLandroid/util/MergedConfiguration;->setGlobalConfiguration(Landroid/content/res/Configuration;)V
+HPLandroid/util/MergedConfiguration;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/util/NtpTrustedTime;->currentTimeMillis()J
+HPLandroid/util/NtpTrustedTime;->getCacheAge()J
+HPLandroid/util/NtpTrustedTime;->getCacheCertainty()J
+HPLandroid/util/PrintWriterPrinter;-><init>(Ljava/io/PrintWriter;)V
+HPLandroid/util/PrintWriterPrinter;->println(Ljava/lang/String;)V
+HPLandroid/util/Slog;->println(ILjava/lang/String;Ljava/lang/String;)I
+HPLandroid/util/Slog;->wtf(Ljava/lang/String;Ljava/lang/String;)I
+HPLandroid/util/SparseArray;->indexOfValue(Ljava/lang/Object;)I
+HPLandroid/util/SparseArray;->removeReturnOld(I)Ljava/lang/Object;
+HPLandroid/util/SparseArray;->toString()Ljava/lang/String;
+HPLandroid/util/SparseBooleanArray;->clone()Landroid/util/SparseBooleanArray;
+HPLandroid/util/SparseBooleanArray;->delete(I)V
+HPLandroid/util/SparseBooleanArray;->equals(Ljava/lang/Object;)Z
+HPLandroid/util/SparseBooleanArray;->removeAt(I)V
+HPLandroid/util/SparseBooleanArray;->setValueAt(IZ)V
+HPLandroid/util/SparseIntArray;->delete(I)V
+HPLandroid/util/SparseIntArray;->setValueAt(II)V
+HPLandroid/util/SparseIntArray;->toString()Ljava/lang/String;
+HPLandroid/util/SparseLongArray;->indexOfKey(I)I
+HPLandroid/util/SparseLongArray;->keyAt(I)I
+HPLandroid/util/SparseLongArray;->removeAt(I)V
+HPLandroid/util/SparseLongArray;->valueAt(I)J
+HPLandroid/util/Spline$MonotoneCubicSpline;-><init>([F[F)V
+HPLandroid/util/Spline$MonotoneCubicSpline;->interpolate(F)F
+HPLandroid/util/Spline;-><init>()V
+HPLandroid/util/Spline;->createMonotoneCubicSpline([F[F)Landroid/util/Spline;
+HPLandroid/util/Spline;->createSpline([F[F)Landroid/util/Spline;
+HPLandroid/util/Spline;->interpolate(F)F
+HPLandroid/util/Spline;->isMonotonic([F)Z
+HPLandroid/util/Spline;->isStrictlyIncreasing([F)Z
+HPLandroid/util/StateSet;->isWildCard([I)Z
+HPLandroid/util/TimeUtils;->formatDuration(JLjava/io/PrintWriter;)V
+HPLandroid/util/TimeUtils;->formatDuration(JLjava/io/PrintWriter;I)V
+HPLandroid/util/TimedRemoteCaller;-><init>(J)V
+HPLandroid/util/TimedRemoteCaller;->getResultTimed(I)Ljava/lang/Object;
+HPLandroid/util/TimedRemoteCaller;->onBeforeRemoteCall()I
+HPLandroid/util/TimedRemoteCaller;->onRemoteMethodResult(Ljava/lang/Object;I)V
+HPLandroid/util/Xml;->newSerializer()Lorg/xmlpull/v1/XmlSerializer;
+HPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->hasSignature(Ljava/lang/String;)Z
+HPLandroid/view/AbsSavedState;-><init>(Landroid/os/Parcel;)V
+HPLandroid/view/AccessibilityInteractionController$AccessibilityNodePrefetcher;->prefetchPredecessorsOfRealNode(Landroid/view/View;Ljava/util/List;)V
+HPLandroid/view/AccessibilityInteractionController$AccessibilityNodePrefetcher;->prefetchSiblingsOfRealNode(Landroid/view/View;Ljava/util/List;)V
+HPLandroid/view/AccessibilityInteractionController;->findViewByAccessibilityId(I)Landroid/view/View;
+HPLandroid/view/AppTransitionAnimationSpec$1;-><init>()V
+HPLandroid/view/AppTransitionAnimationSpec;-><init>(ILandroid/graphics/GraphicBuffer;Landroid/graphics/Rect;)V
+HPLandroid/view/Choreographer$CallbackQueue;->hasDueCallbacksLocked(J)Z
+HPLandroid/view/Choreographer$FrameHandler;->handleMessage(Landroid/os/Message;)V
+HPLandroid/view/Choreographer;->doScheduleCallback(I)V
+HPLandroid/view/Choreographer;->doScheduleVsync()V
+HPLandroid/view/Choreographer;->removeFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
+HPLandroid/view/Choreographer;->subtractFrameDelay(J)J
+HPLandroid/view/ContextThemeWrapper;->getOverrideConfiguration()Landroid/content/res/Configuration;
+HPLandroid/view/Display$HdrCapabilities;->getSupportedHdrTypes()[I
+HPLandroid/view/Display$HdrCapabilities;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/Display$Mode;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/Display;->getLayerStack()I
+HPLandroid/view/Display;->getMaximumSizeDimension()I
+HPLandroid/view/Display;->getMode()Landroid/view/Display$Mode;
+HPLandroid/view/Display;->hasAccess(I)Z
+HPLandroid/view/DisplayEventReceiver;->dispose(Z)V
+HPLandroid/view/DisplayEventReceiver;->finalize()V
+HPLandroid/view/DisplayInfo;-><init>(Landroid/view/DisplayInfo;)V
+HPLandroid/view/DisplayInfo;->getAppMetrics(Landroid/util/DisplayMetrics;)V
+HPLandroid/view/DisplayInfo;->getAppMetrics(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;)V
+HPLandroid/view/DisplayInfo;->isHdr()Z
+HPLandroid/view/DisplayInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/DisplayListCanvas;->drawCircle(Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;)V
+HPLandroid/view/DisplayListCanvas;->drawRoundRect(Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;Landroid/graphics/CanvasProperty;)V
+HPLandroid/view/FocusFinder;->findNextFocus(Landroid/view/ViewGroup;Landroid/view/View;Landroid/graphics/Rect;ILjava/util/ArrayList;)Landroid/view/View;
+HPLandroid/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;
+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
+HPLandroid/view/FocusFinder;->setFocusTopLeft(Landroid/view/ViewGroup;Landroid/graphics/Rect;)V
+HPLandroid/view/GestureDetector$GestureHandler;->handleMessage(Landroid/os/Message;)V
+HPLandroid/view/GestureDetector$SimpleOnGestureListener;->onDoubleTap(Landroid/view/MotionEvent;)Z
+HPLandroid/view/GestureDetector$SimpleOnGestureListener;->onDoubleTapEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/view/GestureDetector$SimpleOnGestureListener;->onDown(Landroid/view/MotionEvent;)Z
+HPLandroid/view/GestureDetector$SimpleOnGestureListener;->onFling(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
+HPLandroid/view/GestureDetector$SimpleOnGestureListener;->onLongPress(Landroid/view/MotionEvent;)V
+HPLandroid/view/GestureDetector$SimpleOnGestureListener;->onScroll(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
+HPLandroid/view/GestureDetector$SimpleOnGestureListener;->onShowPress(Landroid/view/MotionEvent;)V
+HPLandroid/view/GestureDetector$SimpleOnGestureListener;->onSingleTapConfirmed(Landroid/view/MotionEvent;)Z
+HPLandroid/view/GestureDetector$SimpleOnGestureListener;->onSingleTapUp(Landroid/view/MotionEvent;)Z
+HPLandroid/view/GestureDetector;->-get0(Landroid/view/GestureDetector;)Landroid/view/MotionEvent;
+HPLandroid/view/GestureDetector;->-get1(Landroid/view/GestureDetector;)Landroid/view/GestureDetector$OnDoubleTapListener;
+HPLandroid/view/GestureDetector;->-get2(Landroid/view/GestureDetector;)Landroid/view/GestureDetector$OnGestureListener;
+HPLandroid/view/GestureDetector;->-get3(Landroid/view/GestureDetector;)Z
+HPLandroid/view/GestureDetector;->-set0(Landroid/view/GestureDetector;Z)Z
+HPLandroid/view/GestureDetector;->-wrap0(Landroid/view/GestureDetector;)V
+HPLandroid/view/GestureDetector;->cancelTaps()V
+HPLandroid/view/GestureDetector;->dispatchLongPress()V
+HPLandroid/view/GestureDetector;->isConsideredDoubleTap(Landroid/view/MotionEvent;Landroid/view/MotionEvent;Landroid/view/MotionEvent;)Z
+HPLandroid/view/GestureDetector;->onTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/view/GhostView;-><init>(Landroid/view/View;)V
+HPLandroid/view/GhostView;->addGhost(Landroid/view/View;Landroid/view/ViewGroup;Landroid/graphics/Matrix;)Landroid/view/GhostView;
+HPLandroid/view/GhostView;->copySize(Landroid/view/View;Landroid/view/View;)V
+HPLandroid/view/GhostView;->insertIntoOverlay(Landroid/view/ViewGroup;Landroid/view/ViewGroup;Landroid/view/GhostView;Ljava/util/ArrayList;I)V
+HPLandroid/view/GhostView;->isGhostWrapper(Landroid/view/View;)Z
+HPLandroid/view/GhostView;->moveGhostViewsToTop(Landroid/view/ViewGroup;Ljava/util/ArrayList;)I
+HPLandroid/view/GhostView;->onDetachedFromWindow()V
+HPLandroid/view/GhostView;->onDraw(Landroid/graphics/Canvas;)V
+HPLandroid/view/GhostView;->removeGhost(Landroid/view/View;)V
+HPLandroid/view/GhostView;->setMatrix(Landroid/graphics/Matrix;)V
+HPLandroid/view/Gravity;->applyDisplay(ILandroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLandroid/view/HardwareLayer;->destroy()V
+HPLandroid/view/HardwareLayer;->detachSurfaceTexture()V
+HPLandroid/view/HardwareLayer;->isValid()Z
+HPLandroid/view/HardwareLayer;->setTransform(Landroid/graphics/Matrix;)V
+HPLandroid/view/IApplicationToken$Stub;-><init>()V
+HPLandroid/view/IApplicationToken$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/IDockedStackListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/view/IDockedStackListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/IDockedStackListener$Stub$Proxy;->onAdjustedForImeChanged(ZJ)V
+HPLandroid/view/IDockedStackListener$Stub$Proxy;->onDividerVisibilityChanged(Z)V
+HPLandroid/view/IDockedStackListener$Stub$Proxy;->onDockedStackExistsChanged(Z)V
+HPLandroid/view/IDockedStackListener$Stub$Proxy;->onDockedStackMinimizedChanged(ZJZ)V
+HPLandroid/view/IDockedStackListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IDockedStackListener;
+HPLandroid/view/IDockedStackListener;->onAdjustedForImeChanged(ZJ)V
+HPLandroid/view/IDockedStackListener;->onDividerVisibilityChanged(Z)V
+HPLandroid/view/IDockedStackListener;->onDockSideChanged(I)V
+HPLandroid/view/IDockedStackListener;->onDockedStackExistsChanged(Z)V
+HPLandroid/view/IDockedStackListener;->onDockedStackMinimizedChanged(ZJZ)V
+HPLandroid/view/IGraphicsStats$Stub;-><init>()V
+HPLandroid/view/IGraphicsStats$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/view/IGraphicsStatsCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/view/IGraphicsStatsCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/IGraphicsStatsCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IGraphicsStatsCallback;
+HPLandroid/view/IPinnedStackController$Stub$Proxy;->setMinEdgeSize(I)V
+HPLandroid/view/IPinnedStackController$Stub;-><init>()V
+HPLandroid/view/IPinnedStackController$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/IPinnedStackController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/view/IPinnedStackListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/view/IPinnedStackListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/IPinnedStackListener$Stub$Proxy;->onActionsChanged(Landroid/content/pm/ParceledListSlice;)V
+HPLandroid/view/IPinnedStackListener$Stub$Proxy;->onImeVisibilityChanged(ZI)V
+HPLandroid/view/IPinnedStackListener$Stub$Proxy;->onListenerRegistered(Landroid/view/IPinnedStackController;)V
+HPLandroid/view/IPinnedStackListener$Stub$Proxy;->onMinimizedStateChanged(Z)V
+HPLandroid/view/IPinnedStackListener$Stub$Proxy;->onMovementBoundsChanged(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZI)V
+HPLandroid/view/IPinnedStackListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IPinnedStackListener;
+HPLandroid/view/IRotationWatcher$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/view/IRotationWatcher$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/IRotationWatcher$Stub$Proxy;->onRotationChanged(I)V
+HPLandroid/view/IRotationWatcher$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/IRotationWatcher$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IRotationWatcher;
+HPLandroid/view/IRotationWatcher$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/view/IWallpaperVisibilityListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/view/IWallpaperVisibilityListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/IWallpaperVisibilityListener$Stub$Proxy;->onWallpaperVisibilityChanged(ZI)V
+HPLandroid/view/IWallpaperVisibilityListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWallpaperVisibilityListener;
+HPLandroid/view/IWallpaperVisibilityListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/view/IWindow$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/view/IWindow$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/IWindow$Stub$Proxy;->closeSystemDialogs(Ljava/lang/String;)V
+HPLandroid/view/IWindow$Stub$Proxy;->dispatchAppVisibility(Z)V
+HPLandroid/view/IWindow$Stub$Proxy;->dispatchSystemUiVisibilityChanged(IIII)V
+HPLandroid/view/IWindow$Stub$Proxy;->dispatchWallpaperOffsets(FFFFZ)V
+HPLandroid/view/IWindow$Stub$Proxy;->dispatchWindowShown()V
+HPLandroid/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;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZI)V
+HPLandroid/view/IWindow$Stub$Proxy;->windowFocusChanged(ZZ)V
+HPLandroid/view/IWindow$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindow;
+HPLandroid/view/IWindowId$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/view/IWindowId$Stub;-><init>()V
+HPLandroid/view/IWindowId$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/IWindowId$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowId;
+HPLandroid/view/IWindowId;->isFocused()Z
+HPLandroid/view/IWindowId;->registerFocusObserver(Landroid/view/IWindowFocusObserver;)V
+HPLandroid/view/IWindowId;->unregisterFocusObserver(Landroid/view/IWindowFocusObserver;)V
+HPLandroid/view/IWindowManager$Stub$Proxy;->watchRotation(Landroid/view/IRotationWatcher;I)I
+HPLandroid/view/IWindowManager$Stub;-><init>()V
+HPLandroid/view/IWindowManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/view/IWindowSession$Stub$Proxy;->getWindowId(Landroid/os/IBinder;)Landroid/view/IWindowId;
+HPLandroid/view/IWindowSession$Stub$Proxy;->performHapticFeedback(Landroid/view/IWindow;IZ)Z
+HPLandroid/view/IWindowSession$Stub$Proxy;->remove(Landroid/view/IWindow;)V
+HPLandroid/view/IWindowSession$Stub;-><init>()V
+HPLandroid/view/IWindowSession$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/IWindowSession$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/view/IWindowSessionCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/view/IWindowSessionCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowSessionCallback;
+HPLandroid/view/InputChannel;->dup()Landroid/view/InputChannel;
+HPLandroid/view/InputChannel;->finalize()V
+HPLandroid/view/InputChannel;->openInputChannelPair(Ljava/lang/String;)[Landroid/view/InputChannel;
+HPLandroid/view/InputChannel;->transferTo(Landroid/view/InputChannel;)V
+HPLandroid/view/InputChannel;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/InputDevice$MotionRange;->-get0(Landroid/view/InputDevice$MotionRange;)I
+HPLandroid/view/InputDevice$MotionRange;->-get1(Landroid/view/InputDevice$MotionRange;)F
+HPLandroid/view/InputDevice$MotionRange;->-get2(Landroid/view/InputDevice$MotionRange;)F
+HPLandroid/view/InputDevice$MotionRange;->-get3(Landroid/view/InputDevice$MotionRange;)F
+HPLandroid/view/InputDevice$MotionRange;->-get4(Landroid/view/InputDevice$MotionRange;)F
+HPLandroid/view/InputDevice$MotionRange;->-get5(Landroid/view/InputDevice$MotionRange;)F
+HPLandroid/view/InputDevice$MotionRange;->-get6(Landroid/view/InputDevice$MotionRange;)I
+HPLandroid/view/InputDevice;-><init>(IIILjava/lang/String;IILjava/lang/String;ZIILandroid/view/KeyCharacterMap;ZZZ)V
+HPLandroid/view/InputDevice;->getGeneration()I
+HPLandroid/view/InputDevice;->getId()I
+HPLandroid/view/InputDevice;->getIdentifier()Landroid/hardware/input/InputDeviceIdentifier;
+HPLandroid/view/InputDevice;->getKeyboardType()I
+HPLandroid/view/InputDevice;->isExternal()Z
+HPLandroid/view/InputDevice;->isFullKeyboard()Z
+HPLandroid/view/InputDevice;->isVirtual()Z
+HPLandroid/view/InputDevice;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/InputEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/InputEvent;
+HPLandroid/view/InputEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/view/InputEventReceiver;->dispose()V
+HPLandroid/view/InputEventReceiver;->dispose(Z)V
+HPLandroid/view/InputEventReceiver;->finalize()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()V
+HPLandroid/view/InputEventSender;->dispose(Z)V
+HPLandroid/view/InputEventSender;->finalize()V
+HPLandroid/view/InputEventSender;->sendInputEvent(ILandroid/view/InputEvent;)Z
+HPLandroid/view/KeyCharacterMap$FallbackAction;-><init>()V
+HPLandroid/view/KeyCharacterMap$FallbackAction;->obtain()Landroid/view/KeyCharacterMap$FallbackAction;
+HPLandroid/view/KeyCharacterMap$FallbackAction;->recycle()V
+HPLandroid/view/KeyCharacterMap;-><init>(J)V
+HPLandroid/view/KeyCharacterMap;->finalize()V
+HPLandroid/view/KeyCharacterMap;->getEvents([C)[Landroid/view/KeyEvent;
+HPLandroid/view/KeyCharacterMap;->getFallbackAction(II)Landroid/view/KeyCharacterMap$FallbackAction;
+HPLandroid/view/KeyCharacterMap;->getModifierBehavior()I
+HPLandroid/view/KeyCharacterMap;->getNumber(I)C
+HPLandroid/view/KeyCharacterMap;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/KeyEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/KeyEvent;
+HPLandroid/view/KeyEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/view/KeyEvent$DispatcherState;->handleUpEvent(Landroid/view/KeyEvent;)V
+HPLandroid/view/KeyEvent$DispatcherState;->startTracking(Landroid/view/KeyEvent;Ljava/lang/Object;)V
+HPLandroid/view/KeyEvent;->-get0(Landroid/view/KeyEvent;)I
+HPLandroid/view/KeyEvent;->-set0(Landroid/view/KeyEvent;I)I
+HPLandroid/view/KeyEvent;-><init>()V
+HPLandroid/view/KeyEvent;-><init>(II)V
+HPLandroid/view/KeyEvent;-><init>(JJIIIIIII)V
+HPLandroid/view/KeyEvent;-><init>(JJIIIIIIII)V
+HPLandroid/view/KeyEvent;-><init>(Landroid/os/Parcel;)V
+HPLandroid/view/KeyEvent;->actionToString(I)Ljava/lang/String;
+HPLandroid/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
+HPLandroid/view/KeyEvent;->getAction()I
+HPLandroid/view/KeyEvent;->getDeviceId()I
+HPLandroid/view/KeyEvent;->getDownTime()J
+HPLandroid/view/KeyEvent;->getEventTime()J
+HPLandroid/view/KeyEvent;->getEventTimeNano()J
+HPLandroid/view/KeyEvent;->getFlags()I
+HPLandroid/view/KeyEvent;->getKeyCharacterMap()Landroid/view/KeyCharacterMap;
+HPLandroid/view/KeyEvent;->getKeyCode()I
+HPLandroid/view/KeyEvent;->getMetaState()I
+HPLandroid/view/KeyEvent;->getNumber()C
+HPLandroid/view/KeyEvent;->getRepeatCount()I
+HPLandroid/view/KeyEvent;->getSource()I
+HPLandroid/view/KeyEvent;->getUnicodeChar()I
+HPLandroid/view/KeyEvent;->getUnicodeChar(I)I
+HPLandroid/view/KeyEvent;->hasModifiers(I)Z
+HPLandroid/view/KeyEvent;->hasNoModifiers()Z
+HPLandroid/view/KeyEvent;->isAltKey(I)Z
+HPLandroid/view/KeyEvent;->isAltPressed()Z
+HPLandroid/view/KeyEvent;->isCanceled()Z
+HPLandroid/view/KeyEvent;->isConfirmKey(I)Z
+HPLandroid/view/KeyEvent;->isCtrlPressed()Z
+HPLandroid/view/KeyEvent;->isLongPress()Z
+HPLandroid/view/KeyEvent;->isMetaKey(I)Z
+HPLandroid/view/KeyEvent;->isMetaPressed()Z
+HPLandroid/view/KeyEvent;->isModifierKey(I)Z
+HPLandroid/view/KeyEvent;->isShiftPressed()Z
+HPLandroid/view/KeyEvent;->isSystem()Z
+HPLandroid/view/KeyEvent;->isSystemKey(I)Z
+HPLandroid/view/KeyEvent;->isTracking()Z
+HPLandroid/view/KeyEvent;->isWakeKey()Z
+HPLandroid/view/KeyEvent;->isWakeKey(I)Z
+HPLandroid/view/KeyEvent;->keyCodeToString(I)Ljava/lang/String;
+HPLandroid/view/KeyEvent;->metaStateFilterDirectionalModifiers(IIIII)I
+HPLandroid/view/KeyEvent;->metaStateHasModifiers(II)Z
+HPLandroid/view/KeyEvent;->metaStateHasNoModifiers(I)Z
+HPLandroid/view/KeyEvent;->metaStateToString(I)Ljava/lang/String;
+HPLandroid/view/KeyEvent;->obtain()Landroid/view/KeyEvent;
+HPLandroid/view/KeyEvent;->obtain(JJIIIIIIIILjava/lang/String;)Landroid/view/KeyEvent;
+HPLandroid/view/KeyEvent;->recycle()V
+HPLandroid/view/KeyEvent;->recycleIfNeededAfterDispatch()V
+HPLandroid/view/KeyEvent;->startTracking()V
+HPLandroid/view/KeyEvent;->toString()Ljava/lang/String;
+HPLandroid/view/KeyEvent;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/MagnificationSpec$1;-><init>()V
+HPLandroid/view/MagnificationSpec;-><init>()V
+HPLandroid/view/MagnificationSpec;->obtain()Landroid/view/MagnificationSpec;
+HPLandroid/view/MotionEvent$PointerCoords;-><init>()V
+HPLandroid/view/MotionEvent$PointerCoords;->clear()V
+HPLandroid/view/MotionEvent$PointerCoords;->createArray(I)[Landroid/view/MotionEvent$PointerCoords;
+HPLandroid/view/MotionEvent$PointerProperties;-><init>()V
+HPLandroid/view/MotionEvent$PointerProperties;->clear()V
+HPLandroid/view/MotionEvent$PointerProperties;->createArray(I)[Landroid/view/MotionEvent$PointerProperties;
+HPLandroid/view/MotionEvent$PointerProperties;->equals(Landroid/view/MotionEvent$PointerProperties;)Z
+HPLandroid/view/MotionEvent$PointerProperties;->equals(Ljava/lang/Object;)Z
+HPLandroid/view/MotionEvent;->createFromParcelBody(Landroid/os/Parcel;)Landroid/view/MotionEvent;
+HPLandroid/view/MotionEvent;->ensureSharedTempPointerCapacity(I)V
+HPLandroid/view/MotionEvent;->finalize()V
+HPLandroid/view/MotionEvent;->findPointerIndex(I)I
+HPLandroid/view/MotionEvent;->getActionButton()I
+HPLandroid/view/MotionEvent;->getButtonState()I
+HPLandroid/view/MotionEvent;->getEdgeFlags()I
+HPLandroid/view/MotionEvent;->getEventTime()J
+HPLandroid/view/MotionEvent;->getHistoricalEventTime(I)J
+HPLandroid/view/MotionEvent;->getHistoricalPressure(II)F
+HPLandroid/view/MotionEvent;->getHistoricalX(II)F
+HPLandroid/view/MotionEvent;->getHistoricalY(II)F
+HPLandroid/view/MotionEvent;->getPressure(I)F
+HPLandroid/view/MotionEvent;->getToolType(I)I
+HPLandroid/view/MotionEvent;->isButtonPressed(I)Z
+HPLandroid/view/MotionEvent;->isHoverExitPending()Z
+HPLandroid/view/MotionEvent;->isWithinBoundsNoHistory(FFFF)Z
+HPLandroid/view/MotionEvent;->obtain(JJIFFFFIFFII)Landroid/view/MotionEvent;
+HPLandroid/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(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;
+HPLandroid/view/MotionEvent;->obtainNoHistory(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;
+HPLandroid/view/MotionEvent;->setLocation(FF)V
+HPLandroid/view/MotionEvent;->setSource(I)V
+HPLandroid/view/MotionEvent;->split(I)Landroid/view/MotionEvent;
+HPLandroid/view/MotionEvent;->transform(Landroid/graphics/Matrix;)V
+HPLandroid/view/MotionEvent;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/NotificationHeaderView$1;-><init>(Landroid/view/NotificationHeaderView;)V
+HPLandroid/view/NotificationHeaderView$HeaderTouchListener;-><init>(Landroid/view/NotificationHeaderView;)V
+HPLandroid/view/NotificationHeaderView$HeaderTouchListener;->addRectAroundView(Landroid/view/View;)Landroid/graphics/Rect;
+HPLandroid/view/NotificationHeaderView$HeaderTouchListener;->addWidthRect()V
+HPLandroid/view/NotificationHeaderView$HeaderTouchListener;->bindTouchRects()V
+HPLandroid/view/NotificationHeaderView$HeaderTouchListener;->getRectAroundView(Landroid/view/View;)Landroid/graphics/Rect;
+HPLandroid/view/NotificationHeaderView;->-get2(Landroid/view/NotificationHeaderView;)Landroid/widget/ImageView;
+HPLandroid/view/NotificationHeaderView;->-get5(Landroid/view/NotificationHeaderView;)Lcom/android/internal/widget/CachingIconView;
+HPLandroid/view/NotificationHeaderView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/view/NotificationHeaderView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HPLandroid/view/NotificationHeaderView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HPLandroid/view/NotificationHeaderView;->drawableStateChanged()V
+HPLandroid/view/NotificationHeaderView;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
+HPLandroid/view/NotificationHeaderView;->getIcon()Lcom/android/internal/widget/CachingIconView;
+HPLandroid/view/NotificationHeaderView;->getOriginalIconColor()I
+HPLandroid/view/NotificationHeaderView;->hasOverlappingRendering()Z
+HPLandroid/view/NotificationHeaderView;->onFinishInflate()V
+HPLandroid/view/NotificationHeaderView;->onLayout(ZIIII)V
+HPLandroid/view/NotificationHeaderView;->onMeasure(II)V
+HPLandroid/view/NotificationHeaderView;->setAcceptAllTouches(Z)V
+HPLandroid/view/NotificationHeaderView;->setExpandOnlyOnButton(Z)V
+HPLandroid/view/NotificationHeaderView;->setExpanded(Z)V
+HPLandroid/view/NotificationHeaderView;->setOnClickListener(Landroid/view/View$OnClickListener;)V
+HPLandroid/view/NotificationHeaderView;->setOriginalIconColor(I)V
+HPLandroid/view/NotificationHeaderView;->setOriginalNotificationColor(I)V
+HPLandroid/view/NotificationHeaderView;->setShowExpandButtonAtEnd(Z)V
+HPLandroid/view/NotificationHeaderView;->updateExpandButton()V
+HPLandroid/view/NotificationHeaderView;->updateTouchListener()V
+HPLandroid/view/OrientationEventListener;->-set0(Landroid/view/OrientationEventListener;I)I
+HPLandroid/view/OrientationEventListener;->disable()V
+HPLandroid/view/PointerIcon;->setUseLargeIcons(Z)V
+HPLandroid/view/RecordingCanvas;->drawArc(FFFFFFZLandroid/graphics/Paint;)V
+HPLandroid/view/RecordingCanvas;->drawArc(Landroid/graphics/RectF;FFZLandroid/graphics/Paint;)V
+HPLandroid/view/RecordingCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/RectF;Landroid/graphics/Paint;)V
+HPLandroid/view/RecordingCanvas;->drawColor(I)V
+HPLandroid/view/RecordingCanvas;->drawLine(FFFFLandroid/graphics/Paint;)V
+HPLandroid/view/RecordingCanvas;->drawPaint(Landroid/graphics/Paint;)V
+HPLandroid/view/RecordingCanvas;->drawText([CIIFFLandroid/graphics/Paint;)V
+HPLandroid/view/RecordingCanvas;->drawTextRun([CIIIIFFZLandroid/graphics/Paint;)V
+HPLandroid/view/RemotableViewMethod;->asyncImpl()Ljava/lang/String;
+HPLandroid/view/RenderNode;->addAnimator(Landroid/view/RenderNodeAnimator;)V
+HPLandroid/view/RenderNode;->getInverseMatrix(Landroid/graphics/Matrix;)V
+HPLandroid/view/RenderNode;->offsetLeftAndRight(I)Z
+HPLandroid/view/RenderNode;->setBottom(I)Z
+HPLandroid/view/RenderNode;->setClipBounds(Landroid/graphics/Rect;)Z
+HPLandroid/view/RenderNode;->setLeft(I)Z
+HPLandroid/view/RenderNode;->setRevealClip(ZFFF)Z
+HPLandroid/view/RenderNode;->setRight(I)Z
+HPLandroid/view/RenderNodeAnimator;-><init>(IF)V
+HPLandroid/view/RenderNodeAnimator;-><init>(IIFF)V
+HPLandroid/view/RenderNodeAnimator;-><init>(Landroid/graphics/CanvasProperty;F)V
+HPLandroid/view/RenderNodeAnimator;-><init>(Landroid/graphics/CanvasProperty;IF)V
+HPLandroid/view/RenderNodeAnimator;->applyInterpolator()V
+HPLandroid/view/RenderNodeAnimator;->callOnFinished(Landroid/view/RenderNodeAnimator;)V
+HPLandroid/view/RenderNodeAnimator;->cancel()V
+HPLandroid/view/RenderNodeAnimator;->checkMutable()V
+HPLandroid/view/RenderNodeAnimator;->cloneListeners()Ljava/util/ArrayList;
+HPLandroid/view/RenderNodeAnimator;->doStart()V
+HPLandroid/view/RenderNodeAnimator;->end()V
+HPLandroid/view/RenderNodeAnimator;->getNativeAnimator()J
+HPLandroid/view/RenderNodeAnimator;->getTotalDuration()J
+HPLandroid/view/RenderNodeAnimator;->init(J)V
+HPLandroid/view/RenderNodeAnimator;->isRunning()Z
+HPLandroid/view/RenderNodeAnimator;->moveToRunningState()V
+HPLandroid/view/RenderNodeAnimator;->notifyStartListeners()V
+HPLandroid/view/RenderNodeAnimator;->onFinished()V
+HPLandroid/view/RenderNodeAnimator;->releaseNativePtr()V
+HPLandroid/view/RenderNodeAnimator;->setDuration(J)Landroid/animation/Animator;
+HPLandroid/view/RenderNodeAnimator;->setDuration(J)Landroid/view/RenderNodeAnimator;
+HPLandroid/view/RenderNodeAnimator;->setInterpolator(Landroid/animation/TimeInterpolator;)V
+HPLandroid/view/RenderNodeAnimator;->setStartDelay(J)V
+HPLandroid/view/RenderNodeAnimator;->setStartValue(F)V
+HPLandroid/view/RenderNodeAnimator;->setTarget(Landroid/graphics/Canvas;)V
+HPLandroid/view/RenderNodeAnimator;->setTarget(Landroid/view/RenderNode;)V
+HPLandroid/view/RenderNodeAnimator;->setTarget(Landroid/view/View;)V
+HPLandroid/view/RenderNodeAnimator;->start()V
+HPLandroid/view/ScaleGestureDetector;->getCurrentSpan()F
+HPLandroid/view/ScaleGestureDetector;->getCurrentSpanX()F
+HPLandroid/view/ScaleGestureDetector;->getFocusX()F
+HPLandroid/view/ScaleGestureDetector;->getFocusY()F
+HPLandroid/view/ScaleGestureDetector;->inAnchoredScaleMode()Z
+HPLandroid/view/ScaleGestureDetector;->onTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/view/Surface;-><init>(Landroid/graphics/SurfaceTexture;)V
+HPLandroid/view/Surface;->attachAndQueueBuffer(Landroid/graphics/GraphicBuffer;)V
+HPLandroid/view/Surface;->destroy()V
+HPLandroid/view/Surface;->finalize()V
+HPLandroid/view/Surface;->lockCanvas(Landroid/graphics/Rect;)Landroid/graphics/Canvas;
+HPLandroid/view/Surface;->unlockCanvasAndPost(Landroid/graphics/Canvas;)V
+HPLandroid/view/Surface;->unlockSwCanvasAndPost(Landroid/graphics/Canvas;)V
+HPLandroid/view/SurfaceControl;-><init>(Landroid/view/SurfaceSession;Ljava/lang/String;IIIIII)V
+HPLandroid/view/SurfaceControl;->closeTransactionSync()V
+HPLandroid/view/SurfaceControl;->detachChildren()V
+HPLandroid/view/SurfaceControl;->screenshot(Landroid/os/IBinder;Landroid/view/Surface;)V
+HPLandroid/view/SurfaceControl;->screenshot(Landroid/os/IBinder;Landroid/view/Surface;Landroid/graphics/Rect;IIIIZZ)V
+HPLandroid/view/SurfaceControl;->screenshotToBuffer(Landroid/graphics/Rect;IIIIZI)Landroid/graphics/GraphicBuffer;
+HPLandroid/view/SurfaceControl;->setAlpha(F)V
+HPLandroid/view/SurfaceControl;->setAnimationTransaction()V
+HPLandroid/view/SurfaceControl;->setDisplayLayerStack(Landroid/os/IBinder;I)V
+HPLandroid/view/SurfaceControl;->setDisplayProjection(Landroid/os/IBinder;ILandroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLandroid/view/SurfaceControl;->setFinalCrop(Landroid/graphics/Rect;)V
+HPLandroid/view/SurfaceControl;->setLayerStack(I)V
+HPLandroid/view/SurfaceControl;->setOpaque(Z)V
+HPLandroid/view/SurfaceControl;->setTransparentRegionHint(Landroid/graphics/Region;)V
+HPLandroid/view/SurfaceControl;->setWindowCrop(Landroid/graphics/Rect;)V
+HPLandroid/view/SurfaceSession;-><init>()V
+HPLandroid/view/SurfaceSession;->finalize()V
+HPLandroid/view/SurfaceSession;->kill()V
+HPLandroid/view/SurfaceView$3;->setSizeFromLayout()V
+HPLandroid/view/SurfaceView;->setSecure(Z)V
+HPLandroid/view/SurfaceView;->windowStopped(Z)V
+HPLandroid/view/TextureView;->destroyHardwareLayer()V
+HPLandroid/view/TextureView;->destroyHardwareResources()V
+HPLandroid/view/TextureView;->onDetachedFromWindowInternal()V
+HPLandroid/view/TextureView;->releaseSurfaceTexture()V
+HPLandroid/view/ThreadedRenderer;->createHardwareBitmap(Landroid/view/RenderNode;II)Landroid/graphics/Bitmap;
+HPLandroid/view/ThreadedRenderer;->detachSurfaceTexture(J)V
+HPLandroid/view/ThreadedRenderer;->finalize()V
+HPLandroid/view/ThreadedRenderer;->invalidateRoot()V
+HPLandroid/view/ThreadedRenderer;->onLayerDestroyed(Landroid/view/HardwareLayer;)V
+HPLandroid/view/ThreadedRenderer;->registerAnimatingRenderNode(Landroid/view/RenderNode;)V
+HPLandroid/view/ThreadedRenderer;->setRequested(Z)V
+HPLandroid/view/ThreadedRenderer;->updateSurface(Landroid/view/Surface;)V
+HPLandroid/view/TouchDelegate;->onTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/view/VelocityTracker;->addMovement(Landroid/view/MotionEvent;)V
+HPLandroid/view/VelocityTracker;->clear()V
+HPLandroid/view/VelocityTracker;->computeCurrentVelocity(I)V
+HPLandroid/view/VelocityTracker;->computeCurrentVelocity(IF)V
+HPLandroid/view/VelocityTracker;->finalize()V
+HPLandroid/view/VelocityTracker;->getXVelocity()F
+HPLandroid/view/VelocityTracker;->getXVelocity(I)F
+HPLandroid/view/VelocityTracker;->getYVelocity()F
+HPLandroid/view/VelocityTracker;->getYVelocity(I)F
+HPLandroid/view/VelocityTracker;->recycle()V
+HPLandroid/view/View$11;->get(Landroid/view/View;)Ljava/lang/Float;
+HPLandroid/view/View$11;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroid/view/View$11;->setValue(Landroid/view/View;F)V
+HPLandroid/view/View$11;->setValue(Ljava/lang/Object;F)V
+HPLandroid/view/View$12;->get(Landroid/view/View;)Ljava/lang/Float;
+HPLandroid/view/View$12;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroid/view/View$12;->setValue(Landroid/view/View;F)V
+HPLandroid/view/View$12;->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;
+HPLandroid/view/View$5;->setValue(Landroid/view/View;F)V
+HPLandroid/view/View$5;->setValue(Ljava/lang/Object;F)V
+HPLandroid/view/View$6;->get(Landroid/view/View;)Ljava/lang/Float;
+HPLandroid/view/View$6;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroid/view/View$6;->setValue(Landroid/view/View;F)V
+HPLandroid/view/View$6;->setValue(Ljava/lang/Object;F)V
+HPLandroid/view/View$8;->setValue(Landroid/view/View;F)V
+HPLandroid/view/View$8;->setValue(Ljava/lang/Object;F)V
+HPLandroid/view/View$CheckForLongPress;-><init>(Landroid/view/View;)V
+HPLandroid/view/View$CheckForLongPress;-><init>(Landroid/view/View;Landroid/view/View$CheckForLongPress;)V
+HPLandroid/view/View$CheckForLongPress;->rememberPressedState()V
+HPLandroid/view/View$CheckForLongPress;->rememberWindowAttachCount()V
+HPLandroid/view/View$CheckForLongPress;->setAnchor(FF)V
+HPLandroid/view/View$CheckForTap;->run()V
+HPLandroid/view/View$ForegroundInfo;->-get0(Landroid/view/View$ForegroundInfo;)Z
+HPLandroid/view/View$ForegroundInfo;->-get4(Landroid/view/View$ForegroundInfo;)Landroid/graphics/Rect;
+HPLandroid/view/View$ForegroundInfo;->-get5(Landroid/view/View$ForegroundInfo;)Landroid/graphics/Rect;
+HPLandroid/view/View$MatchIdPredicate;-><init>()V
+HPLandroid/view/View$MatchIdPredicate;-><init>(Landroid/view/View$MatchIdPredicate;)V
+HPLandroid/view/View$MatchIdPredicate;->test(Landroid/view/View;)Z
+HPLandroid/view/View$MatchIdPredicate;->test(Ljava/lang/Object;)Z
+HPLandroid/view/View$TransformationInfo;->-get0(Landroid/view/View$TransformationInfo;)Landroid/graphics/Matrix;
+HPLandroid/view/View$TransformationInfo;->-set0(Landroid/view/View$TransformationInfo;Landroid/graphics/Matrix;)Landroid/graphics/Matrix;
+HPLandroid/view/View$UnsetPressedState;->run()V
+HPLandroid/view/View$VisibilityChangeForAutofillHandler;-><init>(Landroid/view/autofill/AutofillManager;Landroid/view/View;)V
+HPLandroid/view/View$VisibilityChangeForAutofillHandler;-><init>(Landroid/view/autofill/AutofillManager;Landroid/view/View;Landroid/view/View$VisibilityChangeForAutofillHandler;)V
+HPLandroid/view/View$VisibilityChangeForAutofillHandler;->handleMessage(Landroid/os/Message;)V
+HPLandroid/view/View;->-wrap0(Landroid/view/View;IFF)V
+HPLandroid/view/View;->-wrap1(Landroid/view/View;ZFF)V
+HPLandroid/view/View;->awakenScrollBars(I)Z
+HPLandroid/view/View;->checkForLongClick(IFF)V
+HPLandroid/view/View;->computeHorizontalScrollExtent()I
+HPLandroid/view/View;->computeHorizontalScrollOffset()I
+HPLandroid/view/View;->computeHorizontalScrollRange()I
+HPLandroid/view/View;->computeVerticalScrollExtent()I
+HPLandroid/view/View;->computeVerticalScrollOffset()I
+HPLandroid/view/View;->computeVerticalScrollRange()I
+HPLandroid/view/View;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/view/View;->dispatchGenericMotionEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/view/View;->dispatchGenericMotionEventInternal(Landroid/view/MotionEvent;)Z
+HPLandroid/view/View;->dispatchHoverEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/view/View;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HPLandroid/view/View;->dispatchKeyEventPreIme(Landroid/view/KeyEvent;)Z
+HPLandroid/view/View;->dispatchSystemUiVisibilityChanged(I)V
+HPLandroid/view/View;->dispatchTooltipHoverEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/view/View;->findUserSetNextFocus(Landroid/view/View;I)Landroid/view/View;
+HPLandroid/view/View;->findViewByAccessibilityId(I)Landroid/view/View;
+HPLandroid/view/View;->findViewByAccessibilityIdTraversal(I)Landroid/view/View;
+HPLandroid/view/View;->findViewInsideOutShouldExist(Landroid/view/View;I)Landroid/view/View;
+HPLandroid/view/View;->focusSearch(I)Landroid/view/View;
+HPLandroid/view/View;->getApplicationWindowToken()Landroid/os/IBinder;
+HPLandroid/view/View;->getClipBounds()Landroid/graphics/Rect;
+HPLandroid/view/View;->getFocusedRect(Landroid/graphics/Rect;)V
+HPLandroid/view/View;->getGlobalVisibleRect(Landroid/graphics/Rect;)Z
+HPLandroid/view/View;->getInverseMatrix()Landroid/graphics/Matrix;
+HPLandroid/view/View;->getKeyDispatcherState()Landroid/view/KeyEvent$DispatcherState;
+HPLandroid/view/View;->getLocalVisibleRect(Landroid/graphics/Rect;)Z
+HPLandroid/view/View;->getOutlineProvider()Landroid/view/ViewOutlineProvider;
+HPLandroid/view/View;->getRootWindowInsets()Landroid/view/WindowInsets;
+HPLandroid/view/View;->getScrollIndicatorBounds(Landroid/graphics/Rect;)V
+HPLandroid/view/View;->getSolidColor()I
+HPLandroid/view/View;->getTransitionName()Ljava/lang/String;
+HPLandroid/view/View;->getVerticalFadingEdgeLength()I
+HPLandroid/view/View;->getWindowId()Landroid/view/WindowId;
+HPLandroid/view/View;->hasExplicitFocusable()Z
+HPLandroid/view/View;->hasHoveredChild()Z
+HPLandroid/view/View;->hasNestedScrollingParent()Z
+HPLandroid/view/View;->initializeScrollIndicatorsInternal()V
+HPLandroid/view/View;->isHapticFeedbackEnabled()Z
+HPLandroid/view/View;->isHoverable()Z
+HPLandroid/view/View;->isHovered()Z
+HPLandroid/view/View;->isNestedScrollingEnabled()Z
+HPLandroid/view/View;->isVerticalFadingEdgeEnabled()Z
+HPLandroid/view/View;->notifyGlobalFocusCleared(Landroid/view/View;)V
+HPLandroid/view/View;->onCloseSystemDialogs(Ljava/lang/String;)V
+HPLandroid/view/View;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/view/View;->onGenericMotionEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/view/View;->onHoverEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/view/View;->onKeyDown(ILandroid/view/KeyEvent;)Z
+HPLandroid/view/View;->onKeyPreIme(ILandroid/view/KeyEvent;)Z
+HPLandroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z
+HPLandroid/view/View;->overScrollBy(IIIIIIIIZ)Z
+HPLandroid/view/View;->performHapticFeedback(I)Z
+HPLandroid/view/View;->performHapticFeedback(II)Z
+HPLandroid/view/View;->postOnAnimationDelayed(Ljava/lang/Runnable;J)V
+HPLandroid/view/View;->scheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;J)V
+HPLandroid/view/View;->scrollBy(II)V
+HPLandroid/view/View;->sendAccessibilityHoverEvent(I)V
+HPLandroid/view/View;->setAccessibilityTraversalBefore(I)V
+HPLandroid/view/View;->setAnimationMatrix(Landroid/graphics/Matrix;)V
+HPLandroid/view/View;->setBottom(I)V
+HPLandroid/view/View;->setDrawingCacheEnabled(Z)V
+HPLandroid/view/View;->setFadingEdgeLength(I)V
+HPLandroid/view/View;->setLayerPaint(Landroid/graphics/Paint;)V
+HPLandroid/view/View;->setLeft(I)V
+HPLandroid/view/View;->setLeftTopRightBottom(IIII)V
+HPLandroid/view/View;->setRevealClip(ZFFF)V
+HPLandroid/view/View;->setRight(I)V
+HPLandroid/view/View;->setScrollIndicators(II)V
+HPLandroid/view/View;->setScrollX(I)V
+HPLandroid/view/View;->setScrollY(I)V
+HPLandroid/view/View;->setTop(I)V
+HPLandroid/view/View;->setTransitionVisibility(I)V
+HPLandroid/view/View;->startNestedScroll(I)Z
+HPLandroid/view/View;->transformMatrixToGlobal(Landroid/graphics/Matrix;)V
+HPLandroid/view/View;->transformMatrixToLocal(Landroid/graphics/Matrix;)V
+HPLandroid/view/View;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V
+HPLandroid/view/View;->updateLocalSystemUiVisibility(II)Z
+HPLandroid/view/ViewAnimationUtils;->createCircularReveal(Landroid/view/View;IIFF)Landroid/animation/Animator;
+HPLandroid/view/ViewConfiguration;->getHoverTapSlop()I
+HPLandroid/view/ViewConfiguration;->getHoverTapTimeout()I
+HPLandroid/view/ViewConfiguration;->getKeyRepeatDelay()I
+HPLandroid/view/ViewConfiguration;->getKeyRepeatTimeout()I
+HPLandroid/view/ViewGroup$2;->endTransition(Landroid/animation/LayoutTransition;Landroid/view/ViewGroup;Landroid/view/View;I)V
+HPLandroid/view/ViewGroup$2;->startTransition(Landroid/animation/LayoutTransition;Landroid/view/ViewGroup;Landroid/view/View;I)V
+HPLandroid/view/ViewGroup$HoverTarget;-><init>()V
+HPLandroid/view/ViewGroup$HoverTarget;->obtain(Landroid/view/View;)Landroid/view/ViewGroup$HoverTarget;
+HPLandroid/view/ViewGroup$HoverTarget;->recycle()V
+HPLandroid/view/ViewGroup;->-get2(Landroid/view/ViewGroup;)Z
+HPLandroid/view/ViewGroup;->-get3(Landroid/view/ViewGroup;)Ljava/util/ArrayList;
+HPLandroid/view/ViewGroup;->addDisappearingView(Landroid/view/View;)V
+HPLandroid/view/ViewGroup;->addTransientView(Landroid/view/View;I)V
+HPLandroid/view/ViewGroup;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/view/ViewGroup;->dispatchDrawableHotspotChanged(FF)V
+HPLandroid/view/ViewGroup;->dispatchHoverEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/view/ViewGroup;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HPLandroid/view/ViewGroup;->dispatchKeyEventPreIme(Landroid/view/KeyEvent;)Z
+HPLandroid/view/ViewGroup;->dispatchSystemUiVisibilityChanged(I)V
+HPLandroid/view/ViewGroup;->dispatchTooltipHoverEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/view/ViewGroup;->dispatchTooltipHoverEvent(Landroid/view/MotionEvent;Landroid/view/View;)Z
+HPLandroid/view/ViewGroup;->dispatchTransformedGenericPointerEvent(Landroid/view/MotionEvent;Landroid/view/View;)Z
+HPLandroid/view/ViewGroup;->findViewByAccessibilityIdTraversal(I)Landroid/view/View;
+HPLandroid/view/ViewGroup;->focusSearch(Landroid/view/View;I)Landroid/view/View;
+HPLandroid/view/ViewGroup;->getChildDrawingOrder(II)I
+HPLandroid/view/ViewGroup;->getScrollIndicatorBounds(Landroid/graphics/Rect;)V
+HPLandroid/view/ViewGroup;->getTransientViewCount()I
+HPLandroid/view/ViewGroup;->hasHoveredChild()Z
+HPLandroid/view/ViewGroup;->invalidateChildInParent([ILandroid/graphics/Rect;)Landroid/view/ViewParent;
+HPLandroid/view/ViewGroup;->isTransitionGroup()Z
+HPLandroid/view/ViewGroup;->offsetRectIntoDescendantCoords(Landroid/view/View;Landroid/graphics/Rect;)V
+HPLandroid/view/ViewGroup;->onInterceptHoverEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/view/ViewGroup;->onStartNestedScroll(Landroid/view/View;Landroid/view/View;I)Z
+HPLandroid/view/ViewGroup;->recomputeViewAttributes(Landroid/view/View;)V
+HPLandroid/view/ViewGroup;->removeDetachedView(Landroid/view/View;Z)V
+HPLandroid/view/ViewGroup;->removeTransientView(Landroid/view/View;)V
+HPLandroid/view/ViewGroup;->requestDisallowInterceptTouchEvent(Z)V
+HPLandroid/view/ViewGroup;->requestTransitionStart(Landroid/animation/LayoutTransition;)V
+HPLandroid/view/ViewGroup;->startViewTransition(Landroid/view/View;)V
+HPLandroid/view/ViewGroup;->suppressLayout(Z)V
+HPLandroid/view/ViewGroup;->updateLocalSystemUiVisibility(II)Z
+HPLandroid/view/ViewGroup;->updateViewLayout(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HPLandroid/view/ViewGroupOverlay;->remove(Landroid/view/View;)V
+HPLandroid/view/ViewOverlay$OverlayViewGroup;->clear()V
+HPLandroid/view/ViewOverlay$OverlayViewGroup;->invalidate(IIII)V
+HPLandroid/view/ViewOverlay$OverlayViewGroup;->invalidateParentIfNeeded()V
+HPLandroid/view/ViewOverlay$OverlayViewGroup;->remove(Landroid/view/View;)V
+HPLandroid/view/ViewOverlay;->clear()V
+HPLandroid/view/ViewPropertyAnimator$PropertyBundle;->cancel(I)Z
+HPLandroid/view/ViewPropertyAnimator;->setUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)Landroid/view/ViewPropertyAnimator;
+HPLandroid/view/ViewPropertyAnimator;->x(F)Landroid/view/ViewPropertyAnimator;
+HPLandroid/view/ViewPropertyAnimator;->y(F)Landroid/view/ViewPropertyAnimator;
+HPLandroid/view/ViewRootImpl$1;->onDisplayChanged(I)V
+HPLandroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;->ensureNoConnection()V
+HPLandroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;->onAccessibilityStateChanged(Z)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
+HPLandroid/view/ViewRootImpl$AsyncInputStage;->enqueue(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HPLandroid/view/ViewRootImpl$CalledFromWrongThreadException;-><init>(Ljava/lang/String;)V
+HPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processKeyEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HPLandroid/view/ViewRootImpl$ImeInputStage;->onFinishedInputEvent(Ljava/lang/Object;Z)V
+HPLandroid/view/ViewRootImpl$ImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HPLandroid/view/ViewRootImpl$NativePreImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HPLandroid/view/ViewRootImpl$SyntheticInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HPLandroid/view/ViewRootImpl$SystemUiVisibilityInfo;-><init>()V
+HPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->performFocusNavigation(Landroid/view/KeyEvent;)Z
+HPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->processKeyEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HPLandroid/view/ViewRootImpl$ViewPreImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HPLandroid/view/ViewRootImpl$ViewPreImeInputStage;->processKeyEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HPLandroid/view/ViewRootImpl$W;->dispatchSystemUiVisibilityChanged(IIII)V
+HPLandroid/view/ViewRootImpl$W;->dispatchWindowShown()V
+HPLandroid/view/ViewRootImpl$W;->moved(II)V
+HPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->dispose()V
+HPLandroid/view/ViewRootImpl;->-wrap1(Landroid/view/ViewRootImpl;Landroid/view/KeyEvent;)Z
+HPLandroid/view/ViewRootImpl;->-wrap10(Landroid/view/ViewRootImpl;Landroid/graphics/Rect;)V
+HPLandroid/view/ViewRootImpl;->-wrap12(Landroid/view/ViewRootImpl;Landroid/util/MergedConfiguration;ZI)V
+HPLandroid/view/ViewRootImpl;->-wrap7(Landroid/view/View;)V
+HPLandroid/view/ViewRootImpl;->checkForLeavingTouchModeAndConsume(Landroid/view/KeyEvent;)Z
+HPLandroid/view/ViewRootImpl;->destroyHardwareRenderer()V
+HPLandroid/view/ViewRootImpl;->die(Z)Z
+HPLandroid/view/ViewRootImpl;->dispatchDetachedFromWindow()V
+HPLandroid/view/ViewRootImpl;->dispatchKeyFromIme(Landroid/view/KeyEvent;)V
+HPLandroid/view/ViewRootImpl;->dispatchMoved(II)V
+HPLandroid/view/ViewRootImpl;->dispatchSystemUiVisibilityChanged(IIII)V
+HPLandroid/view/ViewRootImpl;->dispatchWindowShown()V
+HPLandroid/view/ViewRootImpl;->doDie()V
+HPLandroid/view/ViewRootImpl;->drawSoftware(Landroid/view/Surface;Landroid/view/View$AttachInfo;IIZLandroid/graphics/Rect;)Z
+HPLandroid/view/ViewRootImpl;->findAncestorToTakeFocusInTouchMode(Landroid/view/View;)Landroid/view/ViewGroup;
+HPLandroid/view/ViewRootImpl;->focusSearch(Landroid/view/View;I)Landroid/view/View;
+HPLandroid/view/ViewRootImpl;->forceLayout(Landroid/view/View;)V
+HPLandroid/view/ViewRootImpl;->getParent()Landroid/view/ViewParent;
+HPLandroid/view/ViewRootImpl;->handleDispatchSystemUiVisibilityChanged(Landroid/view/ViewRootImpl$SystemUiVisibilityInfo;)V
+HPLandroid/view/ViewRootImpl;->handleDispatchWindowShown()V
+HPLandroid/view/ViewRootImpl;->isNavigationKey(Landroid/view/KeyEvent;)Z
+HPLandroid/view/ViewRootImpl;->isTypingKey(Landroid/view/KeyEvent;)Z
+HPLandroid/view/ViewRootImpl;->leaveTouchMode()Z
+HPLandroid/view/ViewRootImpl;->onStartNestedScroll(Landroid/view/View;Landroid/view/View;I)Z
+HPLandroid/view/ViewRootImpl;->performHapticFeedback(IZ)Z
+HPLandroid/view/ViewRootImpl;->registerAnimatingRenderNode(Landroid/view/RenderNode;)V
+HPLandroid/view/ViewRootImpl;->removeSendWindowContentChangedCallback()V
+HPLandroid/view/ViewRootImpl;->removeWindowCallbacks(Landroid/view/WindowCallbacks;)V
+HPLandroid/view/ViewRootImpl;->requestDisallowInterceptTouchEvent(Z)V
+HPLandroid/view/ViewRootImpl;->requestTransitionStart(Landroid/animation/LayoutTransition;)V
+HPLandroid/view/ViewRootImpl;->transformMatrixToGlobal(Landroid/graphics/Matrix;)V
+HPLandroid/view/ViewRootImpl;->transformMatrixToLocal(Landroid/graphics/Matrix;)V
+HPLandroid/view/ViewRootImpl;->unscheduleConsumeBatchedInput()V
+HPLandroid/view/ViewRootImpl;->unscheduleTraversals()V
+HPLandroid/view/ViewStub$ViewReplaceRunnable;-><init>(Landroid/view/ViewStub;Landroid/view/View;)V
+HPLandroid/view/ViewStub$ViewReplaceRunnable;->run()V
+HPLandroid/view/ViewStub;->-wrap0(Landroid/view/ViewStub;Landroid/view/View;Landroid/view/ViewGroup;)V
+HPLandroid/view/ViewStub;->setVisibilityAsync(I)Ljava/lang/Runnable;
+HPLandroid/view/ViewTreeObserver;->dispatchOnWindowShown()V
+HPLandroid/view/ViewTreeObserver;->removeGlobalOnLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V
+HPLandroid/view/ViewTreeObserver;->removeOnDrawListener(Landroid/view/ViewTreeObserver$OnDrawListener;)V
+HPLandroid/view/Window;->destroy()V
+HPLandroid/view/Window;->isOutOfBounds(Landroid/content/Context;Landroid/view/MotionEvent;)Z
+HPLandroid/view/Window;->setType(I)V
+HPLandroid/view/Window;->shouldCloseOnTouch(Landroid/content/Context;Landroid/view/MotionEvent;)Z
+HPLandroid/view/WindowCallbackWrapper;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/view/WindowId$1;-><init>()V
+HPLandroid/view/WindowId;-><init>(Landroid/view/IWindowId;)V
+HPLandroid/view/WindowInfo$1;-><init>()V
+HPLandroid/view/WindowInfo;-><init>()V
+HPLandroid/view/WindowInfo;->clear()V
+HPLandroid/view/WindowInfo;->obtain()Landroid/view/WindowInfo;
+HPLandroid/view/WindowInfo;->obtain(Landroid/view/WindowInfo;)Landroid/view/WindowInfo;
+HPLandroid/view/WindowInfo;->recycle()V
+HPLandroid/view/WindowInsets;->consumeSystemWindowInsets(ZZZZ)Landroid/view/WindowInsets;
+HPLandroid/view/WindowManager$LayoutParams;->isFullscreen()Z
+HPLandroid/view/WindowManager$LayoutParams;->isSystemAlertWindowType(I)Z
+HPLandroid/view/WindowManagerGlobal;->closeAll(Landroid/os/IBinder;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/view/WindowManagerGlobal;->closeAllExceptView(Landroid/os/IBinder;Landroid/view/View;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/view/WindowManagerGlobal;->doRemoveView(Landroid/view/ViewRootImpl;)V
+HPLandroid/view/WindowManagerGlobal;->doTrimForeground()V
+HPLandroid/view/WindowManagerGlobal;->removeView(Landroid/view/View;Z)V
+HPLandroid/view/WindowManagerGlobal;->removeViewLocked(IZ)V
+HPLandroid/view/WindowManagerImpl;->removeView(Landroid/view/View;)V
+HPLandroid/view/WindowManagerImpl;->removeViewImmediate(Landroid/view/View;)V
+HPLandroid/view/WindowManagerInternal$AppTransitionListener;-><init>()V
+HPLandroid/view/WindowManagerInternal$AppTransitionListener;->onAppTransitionCancelledLocked(I)V
+HPLandroid/view/WindowManagerInternal$AppTransitionListener;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HPLandroid/view/WindowManagerInternal$AppTransitionListener;->onAppTransitionPendingLocked()V
+HPLandroid/view/WindowManagerInternal$AppTransitionListener;->onAppTransitionStartingLocked(ILandroid/os/IBinder;Landroid/os/IBinder;Landroid/view/animation/Animation;Landroid/view/animation/Animation;)I
+HPLandroid/view/WindowManagerInternal$MagnificationCallbacks;->onMagnificationRegionChanged(Landroid/graphics/Region;)V
+HPLandroid/view/WindowManagerInternal$MagnificationCallbacks;->onRectangleOnScreenRequested(IIII)V
+HPLandroid/view/WindowManagerInternal$MagnificationCallbacks;->onRotationChanged(I)V
+HPLandroid/view/WindowManagerInternal$MagnificationCallbacks;->onUserContextChanged()V
+HPLandroid/view/WindowManagerInternal$OnHardKeyboardStatusChangeListener;->onHardKeyboardStatusChange(Z)V
+HPLandroid/view/WindowManagerInternal$WindowsForAccessibilityCallback;->onWindowsForAccessibilityChanged(Ljava/util/List;)V
+HPLandroid/view/WindowManagerInternal;-><init>()V
+HPLandroid/view/WindowManagerInternal;->addWindowToken(Landroid/os/IBinder;II)V
+HPLandroid/view/WindowManagerInternal;->clearLastInputMethodWindowForTransition()V
+HPLandroid/view/WindowManagerInternal;->computeWindowsForAccessibility()V
+HPLandroid/view/WindowManagerInternal;->getCompatibleMagnificationSpecForWindow(Landroid/os/IBinder;)Landroid/view/MagnificationSpec;
+HPLandroid/view/WindowManagerInternal;->getFocusedWindowToken()Landroid/os/IBinder;
+HPLandroid/view/WindowManagerInternal;->getInputMethodWindowVisibleHeight()I
+HPLandroid/view/WindowManagerInternal;->getMagnificationRegion(Landroid/graphics/Region;)V
+HPLandroid/view/WindowManagerInternal;->getWindowFrame(Landroid/os/IBinder;Landroid/graphics/Rect;)V
+HPLandroid/view/WindowManagerInternal;->isDockedDividerResizing()Z
+HPLandroid/view/WindowManagerInternal;->isHardKeyboardAvailable()Z
+HPLandroid/view/WindowManagerInternal;->isKeyguardGoingAway()Z
+HPLandroid/view/WindowManagerInternal;->isKeyguardLocked()Z
+HPLandroid/view/WindowManagerInternal;->isKeyguardShowingAndNotOccluded()Z
+HPLandroid/view/WindowManagerInternal;->isStackVisible(I)Z
+HPLandroid/view/WindowManagerInternal;->registerAppTransitionListener(Landroid/view/WindowManagerInternal$AppTransitionListener;)V
+HPLandroid/view/WindowManagerInternal;->removeWindowToken(Landroid/os/IBinder;ZI)V
+HPLandroid/view/WindowManagerInternal;->requestTraversalFromDisplayManager()V
+HPLandroid/view/WindowManagerInternal;->saveLastInputMethodWindowForTransition()V
+HPLandroid/view/WindowManagerInternal;->setForceShowMagnifiableBounds(Z)V
+HPLandroid/view/WindowManagerInternal;->setInputFilter(Landroid/view/IInputFilter;)V
+HPLandroid/view/WindowManagerInternal;->setMagnificationCallbacks(Landroid/view/WindowManagerInternal$MagnificationCallbacks;)V
+HPLandroid/view/WindowManagerInternal;->setMagnificationSpec(Landroid/view/MagnificationSpec;)V
+HPLandroid/view/WindowManagerInternal;->setOnHardKeyboardStatusChangeListener(Landroid/view/WindowManagerInternal$OnHardKeyboardStatusChangeListener;)V
+HPLandroid/view/WindowManagerInternal;->setVr2dDisplayId(I)V
+HPLandroid/view/WindowManagerInternal;->setWindowsForAccessibilityCallback(Landroid/view/WindowManagerInternal$WindowsForAccessibilityCallback;)V
+HPLandroid/view/WindowManagerInternal;->showGlobalActions()V
+HPLandroid/view/WindowManagerInternal;->updateInputMethodWindowStatus(Landroid/os/IBinder;ZZLandroid/os/IBinder;)V
+HPLandroid/view/WindowManagerInternal;->waitForAllWindowsDrawn(Ljava/lang/Runnable;J)V
+HPLandroid/view/WindowManagerPolicy$PointerEventListener;->onPointerEvent(Landroid/view/MotionEvent;I)V
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->createInputConsumer(Landroid/os/Looper;Ljava/lang/String;Landroid/view/InputEventReceiver$Factory;)Landroid/view/WindowManagerPolicy$InputConsumer;
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->getCameraLensCoverState()I
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->getDockedDividerInsetsLw()I
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->getInputMethodWindowLw()Landroid/view/WindowManagerPolicy$WindowState;
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->getLidState()I
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->getStackBounds(ILandroid/graphics/Rect;)V
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->getWindowManagerLock()Ljava/lang/Object;
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->lockDeviceNow()V
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->notifyKeyguardTrustedChanged()V
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->notifyShowingDreamChanged()V
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->reboot(Z)V
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->rebootSafeMode(Z)V
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->reevaluateStatusBarVisibility()V
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->registerPointerEventListener(Landroid/view/WindowManagerPolicy$PointerEventListener;)V
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->screenTurningOff(Landroid/view/WindowManagerPolicy$ScreenOffListener;)V
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->shutdown(Z)V
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->switchInputMethod(Z)V
+HPLandroid/view/WindowManagerPolicy$WindowManagerFuncs;->unregisterPointerEventListener(Landroid/view/WindowManagerPolicy$PointerEventListener;)V
+HPLandroid/view/WindowManagerPolicy$WindowState;->canAcquireSleepToken()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->canAffectSystemUiFlags()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->computeFrameLw(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLandroid/view/WindowManagerPolicy$WindowState;->getAppToken()Landroid/view/IApplicationToken;
+HPLandroid/view/WindowManagerPolicy$WindowState;->getAttrs()Landroid/view/WindowManager$LayoutParams;
+HPLandroid/view/WindowManagerPolicy$WindowState;->getBaseType()I
+HPLandroid/view/WindowManagerPolicy$WindowState;->getContentFrameLw()Landroid/graphics/Rect;
+HPLandroid/view/WindowManagerPolicy$WindowState;->getDisplayFrameLw()Landroid/graphics/Rect;
+HPLandroid/view/WindowManagerPolicy$WindowState;->getDisplayId()I
+HPLandroid/view/WindowManagerPolicy$WindowState;->getFrameLw()Landroid/graphics/Rect;
+HPLandroid/view/WindowManagerPolicy$WindowState;->getGivenContentInsetsLw()Landroid/graphics/Rect;
+HPLandroid/view/WindowManagerPolicy$WindowState;->getGivenInsetsPendingLw()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->getGivenVisibleInsetsLw()Landroid/graphics/Rect;
+HPLandroid/view/WindowManagerPolicy$WindowState;->getNeedsMenuLw(Landroid/view/WindowManagerPolicy$WindowState;)Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->getOverscanFrameLw()Landroid/graphics/Rect;
+HPLandroid/view/WindowManagerPolicy$WindowState;->getOwningPackage()Ljava/lang/String;
+HPLandroid/view/WindowManagerPolicy$WindowState;->getOwningUid()I
+HPLandroid/view/WindowManagerPolicy$WindowState;->getRotationAnimationHint()I
+HPLandroid/view/WindowManagerPolicy$WindowState;->getShownPositionLw()Landroid/graphics/Point;
+HPLandroid/view/WindowManagerPolicy$WindowState;->getStackId()I
+HPLandroid/view/WindowManagerPolicy$WindowState;->getSurfaceLayer()I
+HPLandroid/view/WindowManagerPolicy$WindowState;->getSystemUiVisibility()I
+HPLandroid/view/WindowManagerPolicy$WindowState;->getVisibleFrameLw()Landroid/graphics/Rect;
+HPLandroid/view/WindowManagerPolicy$WindowState;->hasAppShownWindows()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->hasDrawnLw()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->hideLw(Z)Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->isAlive()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->isAnimatingLw()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->isDefaultDisplay()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->isDimming()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->isDisplayedLw()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->isDrawnLw()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->isGoneForLayoutLw()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->isInMultiWindowMode()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->isInputMethodWindow()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->isVisibleLw()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->isVoiceInteraction()Z
+HPLandroid/view/WindowManagerPolicy$WindowState;->showLw(Z)Z
+HPLandroid/view/WindowManagerPolicy;->addSplashScreen(Landroid/os/IBinder;Ljava/lang/String;ILandroid/content/res/CompatibilityInfo;Ljava/lang/CharSequence;IIIILandroid/content/res/Configuration;I)Landroid/view/WindowManagerPolicy$StartingSurface;
+HPLandroid/view/WindowManagerPolicy;->adjustConfigurationLw(Landroid/content/res/Configuration;II)V
+HPLandroid/view/WindowManagerPolicy;->adjustSystemUiVisibilityLw(I)I
+HPLandroid/view/WindowManagerPolicy;->adjustWindowParamsLw(Landroid/view/WindowManager$LayoutParams;)V
+HPLandroid/view/WindowManagerPolicy;->allowAppAnimationsLw()Z
+HPLandroid/view/WindowManagerPolicy;->applyPostLayoutPolicyLw(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManagerPolicy$WindowState;)V
+HPLandroid/view/WindowManagerPolicy;->beginLayoutLw(ZIIII)V
+HPLandroid/view/WindowManagerPolicy;->beginPostLayoutPolicyLw(II)V
+HPLandroid/view/WindowManagerPolicy;->canBeHiddenByKeyguardLw(Landroid/view/WindowManagerPolicy$WindowState;)Z
+HPLandroid/view/WindowManagerPolicy;->canDismissBootAnimation()Z
+HPLandroid/view/WindowManagerPolicy;->canMagnifyWindow(I)Z
+HPLandroid/view/WindowManagerPolicy;->checkAddPermission(Landroid/view/WindowManager$LayoutParams;[I)I
+HPLandroid/view/WindowManagerPolicy;->checkShowToOwnerOnly(Landroid/view/WindowManager$LayoutParams;)Z
+HPLandroid/view/WindowManagerPolicy;->createHiddenByKeyguardExit(ZZ)Landroid/view/animation/Animation;
+HPLandroid/view/WindowManagerPolicy;->createKeyguardWallpaperExit(Z)Landroid/view/animation/Animation;
+HPLandroid/view/WindowManagerPolicy;->dismissKeyguardLw(Lcom/android/internal/policy/IKeyguardDismissCallback;)V
+HPLandroid/view/WindowManagerPolicy;->dispatchUnhandledKey(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;
+HPLandroid/view/WindowManagerPolicy;->dump(Ljava/lang/String;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLandroid/view/WindowManagerPolicy;->enableKeyguard(Z)V
+HPLandroid/view/WindowManagerPolicy;->enableScreenAfterBoot()V
+HPLandroid/view/WindowManagerPolicy;->exitKeyguardSecurely(Landroid/view/WindowManagerPolicy$OnKeyguardExitResult;)V
+HPLandroid/view/WindowManagerPolicy;->finishLayoutLw()V
+HPLandroid/view/WindowManagerPolicy;->finishPostLayoutPolicyLw()I
+HPLandroid/view/WindowManagerPolicy;->finishedGoingToSleep(I)V
+HPLandroid/view/WindowManagerPolicy;->finishedWakingUp()V
+HPLandroid/view/WindowManagerPolicy;->focusChangedLw(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManagerPolicy$WindowState;)I
+HPLandroid/view/WindowManagerPolicy;->getConfigDisplayHeight(IIIII)I
+HPLandroid/view/WindowManagerPolicy;->getConfigDisplayWidth(IIIII)I
+HPLandroid/view/WindowManagerPolicy;->getContentRectLw(Landroid/graphics/Rect;)V
+HPLandroid/view/WindowManagerPolicy;->getInputMethodWindowVisibleHeightLw()I
+HPLandroid/view/WindowManagerPolicy;->getInsetHintLw(Landroid/view/WindowManager$LayoutParams;Landroid/graphics/Rect;IIILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
+HPLandroid/view/WindowManagerPolicy;->getMaxWallpaperLayer()I
+HPLandroid/view/WindowManagerPolicy;->getNavBarPosition()I
+HPLandroid/view/WindowManagerPolicy;->getNonDecorDisplayHeight(IIIII)I
+HPLandroid/view/WindowManagerPolicy;->getNonDecorDisplayWidth(IIIII)I
+HPLandroid/view/WindowManagerPolicy;->getNonDecorInsetsLw(IIILandroid/graphics/Rect;)V
+HPLandroid/view/WindowManagerPolicy;->getStableInsetsLw(IIILandroid/graphics/Rect;)V
+HPLandroid/view/WindowManagerPolicy;->getSubWindowLayerFromTypeLw(I)I
+HPLandroid/view/WindowManagerPolicy;->getSystemDecorLayerLw()I
+HPLandroid/view/WindowManagerPolicy;->getUserRotationMode()I
+HPLandroid/view/WindowManagerPolicy;->getWindowLayerFromTypeLw(I)I
+HPLandroid/view/WindowManagerPolicy;->getWindowLayerFromTypeLw(IZ)I
+HPLandroid/view/WindowManagerPolicy;->getWindowLayerLw(Landroid/view/WindowManagerPolicy$WindowState;)I
+HPLandroid/view/WindowManagerPolicy;->hasNavigationBar()Z
+HPLandroid/view/WindowManagerPolicy;->hideBootMessages()V
+HPLandroid/view/WindowManagerPolicy;->inKeyguardRestrictedKeyInputMode()Z
+HPLandroid/view/WindowManagerPolicy;->init(Landroid/content/Context;Landroid/view/IWindowManager;Landroid/view/WindowManagerPolicy$WindowManagerFuncs;)V
+HPLandroid/view/WindowManagerPolicy;->interceptKeyBeforeDispatching(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/KeyEvent;I)J
+HPLandroid/view/WindowManagerPolicy;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
+HPLandroid/view/WindowManagerPolicy;->interceptMotionBeforeQueueingNonInteractive(JI)I
+HPLandroid/view/WindowManagerPolicy;->isDefaultOrientationForced()Z
+HPLandroid/view/WindowManagerPolicy;->isDockSideAllowed(I)Z
+HPLandroid/view/WindowManagerPolicy;->isKeyguardDrawnLw()Z
+HPLandroid/view/WindowManagerPolicy;->isKeyguardHostWindow(Landroid/view/WindowManager$LayoutParams;)Z
+HPLandroid/view/WindowManagerPolicy;->isKeyguardLocked()Z
+HPLandroid/view/WindowManagerPolicy;->isKeyguardOccluded()Z
+HPLandroid/view/WindowManagerPolicy;->isKeyguardSecure(I)Z
+HPLandroid/view/WindowManagerPolicy;->isKeyguardShowingAndNotOccluded()Z
+HPLandroid/view/WindowManagerPolicy;->isKeyguardTrustedLw()Z
+HPLandroid/view/WindowManagerPolicy;->isNavBarForcedShownLw(Landroid/view/WindowManagerPolicy$WindowState;)Z
+HPLandroid/view/WindowManagerPolicy;->isScreenOn()Z
+HPLandroid/view/WindowManagerPolicy;->isShowingDreamLw()Z
+HPLandroid/view/WindowManagerPolicy;->isTopLevelWindow(I)Z
+HPLandroid/view/WindowManagerPolicy;->keepScreenOnStartedLw()V
+HPLandroid/view/WindowManagerPolicy;->keepScreenOnStoppedLw()V
+HPLandroid/view/WindowManagerPolicy;->layoutWindowLw(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManagerPolicy$WindowState;)V
+HPLandroid/view/WindowManagerPolicy;->lockNow(Landroid/os/Bundle;)V
+HPLandroid/view/WindowManagerPolicy;->notifyCameraLensCoverSwitchChanged(JZ)V
+HPLandroid/view/WindowManagerPolicy;->notifyLidSwitchChanged(JZ)V
+HPLandroid/view/WindowManagerPolicy;->okToAnimate()Z
+HPLandroid/view/WindowManagerPolicy;->onConfigurationChanged()V
+HPLandroid/view/WindowManagerPolicy;->onKeyguardOccludedChangedLw(Z)V
+HPLandroid/view/WindowManagerPolicy;->onSystemUiStarted()V
+HPLandroid/view/WindowManagerPolicy;->performHapticFeedbackLw(Landroid/view/WindowManagerPolicy$WindowState;IZ)Z
+HPLandroid/view/WindowManagerPolicy;->prepareAddWindowLw(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManager$LayoutParams;)I
+HPLandroid/view/WindowManagerPolicy;->registerShortcutKey(JLcom/android/internal/policy/IShortcutService;)V
+HPLandroid/view/WindowManagerPolicy;->removeWindowLw(Landroid/view/WindowManagerPolicy$WindowState;)V
+HPLandroid/view/WindowManagerPolicy;->rotationForOrientationLw(II)I
+HPLandroid/view/WindowManagerPolicy;->rotationHasCompatibleMetricsLw(II)Z
+HPLandroid/view/WindowManagerPolicy;->screenTurnedOff()V
+HPLandroid/view/WindowManagerPolicy;->screenTurnedOn()V
+HPLandroid/view/WindowManagerPolicy;->screenTurningOff(Landroid/view/WindowManagerPolicy$ScreenOffListener;)V
+HPLandroid/view/WindowManagerPolicy;->screenTurningOn(Landroid/view/WindowManagerPolicy$ScreenOnListener;)V
+HPLandroid/view/WindowManagerPolicy;->selectAnimationLw(Landroid/view/WindowManagerPolicy$WindowState;I)I
+HPLandroid/view/WindowManagerPolicy;->selectRotationAnimationLw([I)V
+HPLandroid/view/WindowManagerPolicy;->setCurrentOrientationLw(I)V
+HPLandroid/view/WindowManagerPolicy;->setCurrentUserLw(I)V
+HPLandroid/view/WindowManagerPolicy;->setDisplayOverscan(Landroid/view/Display;IIII)V
+HPLandroid/view/WindowManagerPolicy;->setInitialDisplaySize(Landroid/view/Display;III)V
+HPLandroid/view/WindowManagerPolicy;->setLastInputMethodWindowLw(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManagerPolicy$WindowState;)V
+HPLandroid/view/WindowManagerPolicy;->setPipVisibilityLw(Z)V
+HPLandroid/view/WindowManagerPolicy;->setRecentsVisibilityLw(Z)V
+HPLandroid/view/WindowManagerPolicy;->setRotationLw(I)V
+HPLandroid/view/WindowManagerPolicy;->setSafeMode(Z)V
+HPLandroid/view/WindowManagerPolicy;->setSwitchingUser(Z)V
+HPLandroid/view/WindowManagerPolicy;->setUserRotationMode(II)V
+HPLandroid/view/WindowManagerPolicy;->shouldRotateSeamlessly(II)Z
+HPLandroid/view/WindowManagerPolicy;->showBootMessage(Ljava/lang/CharSequence;Z)V
+HPLandroid/view/WindowManagerPolicy;->showGlobalActions()V
+HPLandroid/view/WindowManagerPolicy;->showRecentApps(Z)V
+HPLandroid/view/WindowManagerPolicy;->startKeyguardExitAnimation(JJ)V
+HPLandroid/view/WindowManagerPolicy;->startedGoingToSleep(I)V
+HPLandroid/view/WindowManagerPolicy;->startedWakingUp()V
+HPLandroid/view/WindowManagerPolicy;->systemBooted()V
+HPLandroid/view/WindowManagerPolicy;->systemReady()V
+HPLandroid/view/WindowManagerPolicy;->userActivity()V
+HPLandroid/view/WindowManagerPolicy;->validateRotationAnimationLw(IIZ)Z
+HPLandroid/view/accessibility/-$Lambda$T3m_l9_RA18vCOcakSWp1lZCy5g$1;->$m$0()V
+HPLandroid/view/accessibility/-$Lambda$T3m_l9_RA18vCOcakSWp1lZCy5g$1;-><init>(BZLjava/lang/Object;)V
+HPLandroid/view/accessibility/-$Lambda$T3m_l9_RA18vCOcakSWp1lZCy5g$1;->run()V
+HPLandroid/view/accessibility/-$Lambda$T3m_l9_RA18vCOcakSWp1lZCy5g;->$m$0()V
+HPLandroid/view/accessibility/-$Lambda$T3m_l9_RA18vCOcakSWp1lZCy5g;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLandroid/view/accessibility/-$Lambda$T3m_l9_RA18vCOcakSWp1lZCy5g;->run()V
+HPLandroid/view/accessibility/AccessibilityCache$AccessibilityNodeRefresher;-><init>()V
+HPLandroid/view/accessibility/AccessibilityCache$AccessibilityNodeRefresher;->refreshNode(Landroid/view/accessibility/AccessibilityNodeInfo;Z)Z
+HPLandroid/view/accessibility/AccessibilityCache;-><init>(Landroid/view/accessibility/AccessibilityCache$AccessibilityNodeRefresher;)V
+HPLandroid/view/accessibility/AccessibilityCache;->add(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/view/accessibility/AccessibilityCache;->addWindow(Landroid/view/accessibility/AccessibilityWindowInfo;)V
+HPLandroid/view/accessibility/AccessibilityCache;->clear()V
+HPLandroid/view/accessibility/AccessibilityCache;->clearNodesForWindowLocked(I)V
+HPLandroid/view/accessibility/AccessibilityCache;->clearSubTreeLocked(IJ)V
+HPLandroid/view/accessibility/AccessibilityCache;->clearSubTreeRecursiveLocked(Landroid/util/LongSparseArray;J)V
+HPLandroid/view/accessibility/AccessibilityCache;->clearWindowCache()V
+HPLandroid/view/accessibility/AccessibilityCache;->getNode(IJ)Landroid/view/accessibility/AccessibilityNodeInfo;
+HPLandroid/view/accessibility/AccessibilityCache;->getWindow(I)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLandroid/view/accessibility/AccessibilityCache;->getWindows()Ljava/util/List;
+HPLandroid/view/accessibility/AccessibilityCache;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLandroid/view/accessibility/AccessibilityCache;->refreshCachedNodeLocked(IJ)V
+HPLandroid/view/accessibility/AccessibilityCache;->setWindows(Ljava/util/List;)V
+HPLandroid/view/accessibility/AccessibilityEvent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/accessibility/AccessibilityEvent;
+HPLandroid/view/accessibility/AccessibilityEvent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/view/accessibility/AccessibilityEvent;->appendRecord(Landroid/view/accessibility/AccessibilityRecord;)V
+HPLandroid/view/accessibility/AccessibilityEvent;->getAction()I
+HPLandroid/view/accessibility/AccessibilityEvent;->getContentChangeTypes()I
+HPLandroid/view/accessibility/AccessibilityEvent;->getEventTime()J
+HPLandroid/view/accessibility/AccessibilityEvent;->getPackageName()Ljava/lang/CharSequence;
+HPLandroid/view/accessibility/AccessibilityEvent;->init(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLandroid/view/accessibility/AccessibilityEvent;->initFromParcel(Landroid/os/Parcel;)V
+HPLandroid/view/accessibility/AccessibilityEvent;->obtain(Landroid/view/accessibility/AccessibilityEvent;)Landroid/view/accessibility/AccessibilityEvent;
+HPLandroid/view/accessibility/AccessibilityEvent;->readAccessibilityRecordFromParcel(Landroid/view/accessibility/AccessibilityRecord;Landroid/os/Parcel;)V
+HPLandroid/view/accessibility/AccessibilityEvent;->setSealed(Z)V
+HPLandroid/view/accessibility/AccessibilityInteractionClient;-><init>()V
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->addConnection(ILandroid/accessibilityservice/IAccessibilityServiceConnection;)V
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->checkFindAccessibilityNodeInfoResultIntegrity(Ljava/util/List;)V
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->clearCache()V
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->clearResultLocked()V
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->finalizeAndCacheAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;I)V
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->finalizeAndCacheAccessibilityNodeInfos(Ljava/util/List;I)V
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->findAccessibilityNodeInfoByAccessibilityId(IIJZILandroid/os/Bundle;)Landroid/view/accessibility/AccessibilityNodeInfo;
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->findFocus(IIJI)Landroid/view/accessibility/AccessibilityNodeInfo;
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->getConnection(I)Landroid/accessibilityservice/IAccessibilityServiceConnection;
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->getFindAccessibilityNodeInfoResultAndClear(I)Landroid/view/accessibility/AccessibilityNodeInfo;
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->getFindAccessibilityNodeInfosResultAndClear(I)Ljava/util/List;
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->getInstance()Landroid/view/accessibility/AccessibilityInteractionClient;
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->getInstanceForThread(J)Landroid/view/accessibility/AccessibilityInteractionClient;
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->getPerformAccessibilityActionResultAndClear(I)Z
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->getRootInActiveWindow(I)Landroid/view/accessibility/AccessibilityNodeInfo;
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->getSameProcessMessageAndClear()Landroid/os/Message;
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->getWindow(II)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->getWindows(I)Ljava/util/List;
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->performAccessibilityAction(IIJILandroid/os/Bundle;)Z
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->setFindAccessibilityNodeInfoResult(Landroid/view/accessibility/AccessibilityNodeInfo;I)V
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->setFindAccessibilityNodeInfosResult(Ljava/util/List;I)V
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->setPerformAccessibilityActionResult(ZI)V
+HPLandroid/view/accessibility/AccessibilityInteractionClient;->waitForResultTimedLocked(I)Z
+HPLandroid/view/accessibility/AccessibilityManager$1;->lambda$-android_view_accessibility_AccessibilityManager$1_8835(Landroid/view/accessibility/AccessibilityManager$AccessibilityServicesStateChangeListener;)V
+HPLandroid/view/accessibility/AccessibilityManager$1;->notifyServicesStateChanged()V
+HPLandroid/view/accessibility/AccessibilityManager;->-get1(Landroid/view/accessibility/AccessibilityManager;)Landroid/util/ArrayMap;
+HPLandroid/view/accessibility/AccessibilityManager;->addAccessibilityServicesStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityServicesStateChangeListener;Landroid/os/Handler;)V
+HPLandroid/view/accessibility/AccessibilityManager;->lambda$-android_view_accessibility_AccessibilityManager_38231(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;Z)V
+HPLandroid/view/accessibility/AccessibilityManager;->notifyAccessibilityButtonVisibilityChanged(Z)V
+HPLandroid/view/accessibility/AccessibilityManager;->removeAccessibilityInteractionConnection(Landroid/view/IWindow;)V
+HPLandroid/view/accessibility/AccessibilityManager;->removeAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;)Z
+HPLandroid/view/accessibility/AccessibilityManager;->removeHighTextContrastStateChangeListener(Landroid/view/accessibility/AccessibilityManager$HighTextContrastChangeListener;)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/accessibility/AccessibilityNodeInfo;
+HPLandroid/view/accessibility/AccessibilityNodeInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->getId()I
+HPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->toString()Ljava/lang/String;
+HPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;->obtain(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;
+HPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;->obtain(IIIIZ)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;
+HPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;->obtain(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;
+HPLandroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;-><init>(IFFF)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;->clear()V
+HPLandroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;->getCurrent()F
+HPLandroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;->getMax()F
+HPLandroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;->getMin()F
+HPLandroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;->getType()I
+HPLandroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;->obtain(IFFF)Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;
+HPLandroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;->obtain(Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;)Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;
+HPLandroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;->recycle()V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->-wrap0(I)Ljava/lang/String;
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->-wrap1(Landroid/view/accessibility/AccessibilityNodeInfo;Landroid/os/Parcel;)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->canPerformRequestOverConnection(J)Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->enforceSealed()V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->equals(Ljava/lang/Object;)Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->getActionSymbolicName(I)Ljava/lang/String;
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->getBooleanProperty(I)Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->getChild(I)Landroid/view/accessibility/AccessibilityNodeInfo;
+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;->getCollectionItemInfo()Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->getConnectionId()I
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->getContentDescription()Ljava/lang/CharSequence;
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->getNodeForAccessibilityId(J)Landroid/view/accessibility/AccessibilityNodeInfo;
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->getPackageName()Ljava/lang/CharSequence;
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->getParent()Landroid/view/accessibility/AccessibilityNodeInfo;
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->getParentNodeId()J
+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;->getWindow()Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->getWindowId()I
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->hashCode()I
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->initFromParcel(Landroid/os/Parcel;)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->isAccessibilityFocused()Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->isCheckable()Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->isChecked()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;->isImportantForAccessibility()Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->isLongClickable()Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->isPassword()Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->isScrollable()Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->isSelected()Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->isVisibleToUser()Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->obtain(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroid/view/accessibility/AccessibilityNodeInfo;
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->performAction(ILandroid/os/Bundle;)Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->refresh()Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->refresh(Landroid/os/Bundle;Z)Z
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->setCheckable(Z)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->setChecked(Z)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->setConnectionId(I)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->setEditable(Z)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->setInputType(I)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->setRangeInfo(Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->setScrollable(Z)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->setSealed(Z)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->setTraversalAfter(Landroid/view/View;)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->setTraversalAfter(Landroid/view/View;I)V
+HPLandroid/view/accessibility/AccessibilityNodeInfo;->toString()Ljava/lang/String;
+HPLandroid/view/accessibility/AccessibilityRecord;->getBooleanProperty(I)Z
+HPLandroid/view/accessibility/AccessibilityRecord;->getFromIndex()I
+HPLandroid/view/accessibility/AccessibilityRecord;->getItemCount()I
+HPLandroid/view/accessibility/AccessibilityRecord;->getMaxScrollY()I
+HPLandroid/view/accessibility/AccessibilityRecord;->getScrollX()I
+HPLandroid/view/accessibility/AccessibilityRecord;->getScrollY()I
+HPLandroid/view/accessibility/AccessibilityRecord;->getSourceNodeId()J
+HPLandroid/view/accessibility/AccessibilityRecord;->getToIndex()I
+HPLandroid/view/accessibility/AccessibilityRecord;->getWindowId()I
+HPLandroid/view/accessibility/AccessibilityRecord;->init(Landroid/view/accessibility/AccessibilityRecord;)V
+HPLandroid/view/accessibility/AccessibilityRecord;->isImportantForAccessibility()Z
+HPLandroid/view/accessibility/AccessibilityRecord;->obtain()Landroid/view/accessibility/AccessibilityRecord;
+HPLandroid/view/accessibility/AccessibilityRecord;->obtain(Landroid/view/accessibility/AccessibilityRecord;)Landroid/view/accessibility/AccessibilityRecord;
+HPLandroid/view/accessibility/AccessibilityRecord;->recycle()V
+HPLandroid/view/accessibility/AccessibilityRecord;->setConnectionId(I)V
+HPLandroid/view/accessibility/AccessibilityRecord;->setFromIndex(I)V
+HPLandroid/view/accessibility/AccessibilityRecord;->setSealed(Z)V
+HPLandroid/view/accessibility/AccessibilityRecord;->setToIndex(I)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo$1;-><init>()V
+HPLandroid/view/accessibility/AccessibilityWindowInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLandroid/view/accessibility/AccessibilityWindowInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->-wrap0(Landroid/view/accessibility/AccessibilityWindowInfo;Landroid/os/Parcel;)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;-><init>()V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->clear()V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->getBooleanProperty(I)Z
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->getBoundsInScreen(Landroid/graphics/Rect;)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->getId()I
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->getLayer()I
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->getRoot()Landroid/view/accessibility/AccessibilityNodeInfo;
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->getType()I
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->inPictureInPicture()Z
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->initFromParcel(Landroid/os/Parcel;)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->isActive()Z
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->isFocused()Z
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->isInPictureInPictureMode()Z
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->obtain()Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->obtain(Landroid/view/accessibility/AccessibilityWindowInfo;)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->recycle()V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->setAccessibilityFocused(Z)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->setActive(Z)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->setAnchorId(I)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->setBooleanProperty(IZ)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->setBoundsInScreen(Landroid/graphics/Rect;)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->setConnectionId(I)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->setFocused(Z)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->setId(I)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->setLayer(I)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->setPictureInPicture(Z)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->setTitle(Ljava/lang/CharSequence;)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->setType(I)V
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->toString()Ljava/lang/String;
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->typeToString(I)Ljava/lang/String;
+HPLandroid/view/accessibility/AccessibilityWindowInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/accessibility/CaptioningManager;->removeCaptioningChangeListener(Landroid/view/accessibility/CaptioningManager$CaptioningChangeListener;)V
+HPLandroid/view/accessibility/IAccessibilityInteractionConnection$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/view/accessibility/IAccessibilityInteractionConnection$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/accessibility/IAccessibilityInteractionConnection$Stub$Proxy;->findAccessibilityNodeInfoByAccessibilityId(JLandroid/graphics/Region;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIJLandroid/view/MagnificationSpec;Landroid/os/Bundle;)V
+HPLandroid/view/accessibility/IAccessibilityInteractionConnection$Stub$Proxy;->findFocus(JILandroid/graphics/Region;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIJLandroid/view/MagnificationSpec;)V
+HPLandroid/view/accessibility/IAccessibilityInteractionConnection$Stub$Proxy;->performAccessibilityAction(JILandroid/os/Bundle;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIJ)V
+HPLandroid/view/accessibility/IAccessibilityInteractionConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/accessibility/IAccessibilityInteractionConnection;
+HPLandroid/view/accessibility/IAccessibilityInteractionConnectionCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/accessibility/IAccessibilityInteractionConnectionCallback$Stub;-><init>()V
+HPLandroid/view/accessibility/IAccessibilityInteractionConnectionCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/accessibility/IAccessibilityInteractionConnectionCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->removeAccessibilityInteractionConnection(Landroid/view/IWindow;)V
+HPLandroid/view/accessibility/IAccessibilityManager$Stub;-><init>()V
+HPLandroid/view/accessibility/IAccessibilityManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/view/accessibility/IAccessibilityManagerClient$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/view/accessibility/IAccessibilityManagerClient$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/accessibility/IAccessibilityManagerClient$Stub$Proxy;->notifyServicesStateChanged()V
+HPLandroid/view/accessibility/IAccessibilityManagerClient$Stub$Proxy;->setRelevantEventTypes(I)V
+HPLandroid/view/accessibility/IAccessibilityManagerClient$Stub$Proxy;->setState(I)V
+HPLandroid/view/accessibility/IAccessibilityManagerClient$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/accessibility/IAccessibilityManagerClient;
+HPLandroid/view/animation/AccelerateInterpolator;->getInterpolation(F)F
+HPLandroid/view/animation/Animation;->computeDurationHint()J
+HPLandroid/view/animation/Animation;->fireAnimationRepeat()V
+HPLandroid/view/animation/Animation;->getBackgroundColor()I
+HPLandroid/view/animation/Animation;->getDetachWallpaper()Z
+HPLandroid/view/animation/Animation;->getInterpolator()Landroid/view/animation/Interpolator;
+HPLandroid/view/animation/Animation;->getRepeatCount()I
+HPLandroid/view/animation/Animation;->getZAdjustment()I
+HPLandroid/view/animation/Animation;->restrictDuration(J)V
+HPLandroid/view/animation/Animation;->scaleCurrentDuration(F)V
+HPLandroid/view/animation/Animation;->start()V
+HPLandroid/view/animation/AnimationSet;-><init>(Z)V
+HPLandroid/view/animation/AnimationSet;->computeDurationHint()J
+HPLandroid/view/animation/AnimationSet;->restrictDuration(J)V
+HPLandroid/view/animation/AnimationSet;->scaleCurrentDuration(F)V
+HPLandroid/view/animation/ClipRectAnimation;-><init>(IIIIIIII)V
+HPLandroid/view/animation/ClipRectAnimation;->willChangeTransformationMatrix()Z
+HPLandroid/view/animation/OvershootInterpolator;->getInterpolation(F)F
+HPLandroid/view/animation/RotateAnimation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/view/animation/RotateAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
+HPLandroid/view/animation/RotateAnimation;->initialize(IIII)V
+HPLandroid/view/animation/RotateAnimation;->initializePivotPoint()V
+HPLandroid/view/animation/ScaleAnimation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/view/animation/ScaleAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
+HPLandroid/view/animation/ScaleAnimation;->initialize(IIII)V
+HPLandroid/view/animation/ScaleAnimation;->initializePivotPoint()V
+HPLandroid/view/animation/ScaleAnimation;->resolveScale(FIIII)F
+HPLandroid/view/animation/Transformation;->getClipRect()Landroid/graphics/Rect;
+HPLandroid/view/animation/Transformation;->hasClipRect()Z
+HPLandroid/view/animation/Transformation;->setClipRect(IIII)V
+HPLandroid/view/animation/Transformation;->setClipRect(Landroid/graphics/Rect;)V
+HPLandroid/view/animation/TranslateAnimation;-><init>(FFFF)V
+HPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/autofill/AutofillId;
+HPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/view/autofill/AutofillId;-><init>(Landroid/os/Parcel;)V
+HPLandroid/view/autofill/AutofillId;-><init>(Landroid/os/Parcel;Landroid/view/autofill/AutofillId;)V
+HPLandroid/view/autofill/AutofillId;->equals(Ljava/lang/Object;)Z
+HPLandroid/view/autofill/AutofillId;->hashCode()I
+HPLandroid/view/autofill/AutofillId;->toString()Ljava/lang/String;
+HPLandroid/view/autofill/AutofillManager$AutofillCallback;-><init>()V
+HPLandroid/view/autofill/AutofillManager;->cancel()V
+HPLandroid/view/autofill/AutofillManager;->cancelSessionLocked()V
+HPLandroid/view/autofill/AutofillManager;->getFillEventHistory()Landroid/service/autofill/FillEventHistory;
+HPLandroid/view/autofill/AutofillManager;->onSaveInstanceState(Landroid/os/Bundle;)V
+HPLandroid/view/autofill/AutofillManager;->registerCallback(Landroid/view/autofill/AutofillManager$AutofillCallback;)V
+HPLandroid/view/autofill/AutofillManager;->updateSessionLocked(Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;II)V
+HPLandroid/view/autofill/AutofillManagerInternal;-><init>()V
+HPLandroid/view/autofill/AutofillManagerInternal;->onBackKeyPressed()V
+HPLandroid/view/autofill/AutofillValue$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/autofill/AutofillValue;
+HPLandroid/view/autofill/AutofillValue$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/view/autofill/AutofillValue;-><init>(Landroid/os/Parcel;)V
+HPLandroid/view/autofill/AutofillValue;-><init>(Landroid/os/Parcel;Landroid/view/autofill/AutofillValue;)V
+HPLandroid/view/autofill/AutofillValue;->equals(Ljava/lang/Object;)Z
+HPLandroid/view/autofill/AutofillValue;->getTextValue()Ljava/lang/CharSequence;
+HPLandroid/view/autofill/AutofillValue;->isText()Z
+HPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->getFillEventHistory()Landroid/service/autofill/FillEventHistory;
+HPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->setHasCallback(IIZ)V
+HPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->updateSession(ILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;III)V
+HPLandroid/view/autofill/IAutoFillManager$Stub;-><init>()V
+HPLandroid/view/autofill/IAutoFillManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/view/autofill/IAutoFillManagerClient$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLandroid/view/autofill/IAutoFillManagerClient$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLandroid/view/autofill/IAutoFillManagerClient$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/autofill/IAutoFillManagerClient;
+HPLandroid/view/inputmethod/BaseInputConnection;-><init>(Landroid/view/View;Z)V
+HPLandroid/view/inputmethod/BaseInputConnection;->closeConnection()V
+HPLandroid/view/inputmethod/BaseInputConnection;->deleteSurroundingText(II)Z
+HPLandroid/view/inputmethod/BaseInputConnection;->ensureDefaultComposingSpans()V
+HPLandroid/view/inputmethod/BaseInputConnection;->getComposingSpanEnd(Landroid/text/Spannable;)I
+HPLandroid/view/inputmethod/BaseInputConnection;->getComposingSpanStart(Landroid/text/Spannable;)I
+HPLandroid/view/inputmethod/BaseInputConnection;->getCursorCapsMode(I)I
+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;
+HPLandroid/view/inputmethod/BaseInputConnection;->replaceText(Ljava/lang/CharSequence;IZ)V
+HPLandroid/view/inputmethod/BaseInputConnection;->reportFullscreenMode(Z)Z
+HPLandroid/view/inputmethod/BaseInputConnection;->sendKeyEvent(Landroid/view/KeyEvent;)Z
+HPLandroid/view/inputmethod/BaseInputConnection;->setComposingRegion(II)Z
+HPLandroid/view/inputmethod/BaseInputConnection;->setComposingSpans(Landroid/text/Spannable;)V
+HPLandroid/view/inputmethod/BaseInputConnection;->setComposingSpans(Landroid/text/Spannable;II)V
+HPLandroid/view/inputmethod/BaseInputConnection;->setComposingText(Ljava/lang/CharSequence;I)Z
+HPLandroid/view/inputmethod/CompletionInfo$1;-><init>()V
+HPLandroid/view/inputmethod/ExtractedText$1;-><init>()V
+HPLandroid/view/inputmethod/ExtractedText;-><init>()V
+HPLandroid/view/inputmethod/InputBinding;-><init>(Landroid/view/inputmethod/InputConnection;Landroid/os/IBinder;II)V
+HPLandroid/view/inputmethod/InputBinding;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/inputmethod/InputConnectionInspector;->getMissingMethodFlags(Landroid/view/inputmethod/InputConnection;)I
+HPLandroid/view/inputmethod/InputConnectionWrapper;-><init>(Landroid/view/inputmethod/InputConnection;Z)V
+HPLandroid/view/inputmethod/InputConnectionWrapper;->closeConnection()V
+HPLandroid/view/inputmethod/InputConnectionWrapper;->getHandler()Landroid/os/Handler;
+HPLandroid/view/inputmethod/InputConnectionWrapper;->getMissingMethodFlags()I
+HPLandroid/view/inputmethod/InputConnectionWrapper;->reportFullscreenMode(Z)Z
+HPLandroid/view/inputmethod/InputMethodInfo$1;-><init>()V
+HPLandroid/view/inputmethod/InputMethodInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/inputmethod/InputMethodInfo;
+HPLandroid/view/inputmethod/InputMethodInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/view/inputmethod/InputMethodInfo;-><init>(Landroid/content/Context;Landroid/content/pm/ResolveInfo;Ljava/util/List;)V
+HPLandroid/view/inputmethod/InputMethodInfo;-><init>(Landroid/os/Parcel;)V
+HPLandroid/view/inputmethod/InputMethodInfo;->computeId(Landroid/content/pm/ResolveInfo;)Ljava/lang/String;
+HPLandroid/view/inputmethod/InputMethodInfo;->equals(Ljava/lang/Object;)Z
+HPLandroid/view/inputmethod/InputMethodInfo;->getComponent()Landroid/content/ComponentName;
+HPLandroid/view/inputmethod/InputMethodInfo;->getId()Ljava/lang/String;
+HPLandroid/view/inputmethod/InputMethodInfo;->getIsDefaultResourceId()I
+HPLandroid/view/inputmethod/InputMethodInfo;->getPackageName()Ljava/lang/String;
+HPLandroid/view/inputmethod/InputMethodInfo;->getServiceInfo()Landroid/content/pm/ServiceInfo;
+HPLandroid/view/inputmethod/InputMethodInfo;->getSubtypeAt(I)Landroid/view/inputmethod/InputMethodSubtype;
+HPLandroid/view/inputmethod/InputMethodInfo;->getSubtypeCount()I
+HPLandroid/view/inputmethod/InputMethodInfo;->hashCode()I
+HPLandroid/view/inputmethod/InputMethodInfo;->isAuxiliaryIme()Z
+HPLandroid/view/inputmethod/InputMethodInfo;->isDefault(Landroid/content/Context;)Z
+HPLandroid/view/inputmethod/InputMethodInfo;->loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
+HPLandroid/view/inputmethod/InputMethodInfo;->supportsSwitchingToNextInputMethod()Z
+HPLandroid/view/inputmethod/InputMethodInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/inputmethod/InputMethodManager$ControlledInputConnectionWrapper;->deactivate()V
+HPLandroid/view/inputmethod/InputMethodManager$ControlledInputConnectionWrapper;->isActive()Z
+HPLandroid/view/inputmethod/InputMethodManager$ControlledInputConnectionWrapper;->onUserAction()V
+HPLandroid/view/inputmethod/InputMethodManager$ImeInputEventSender;-><init>(Landroid/view/inputmethod/InputMethodManager;Landroid/view/InputChannel;Landroid/os/Looper;)V
+HPLandroid/view/inputmethod/InputMethodManager$ImeInputEventSender;->onInputEventFinished(IZ)V
+HPLandroid/view/inputmethod/InputMethodManager$PendingEvent;-><init>(Landroid/view/inputmethod/InputMethodManager;)V
+HPLandroid/view/inputmethod/InputMethodManager$PendingEvent;-><init>(Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager$PendingEvent;)V
+HPLandroid/view/inputmethod/InputMethodManager$PendingEvent;->recycle()V
+HPLandroid/view/inputmethod/InputMethodManager$PendingEvent;->run()V
+HPLandroid/view/inputmethod/InputMethodManager;->-wrap1(Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager$PendingEvent;)V
+HPLandroid/view/inputmethod/InputMethodManager;->closeCurrentInput()V
+HPLandroid/view/inputmethod/InputMethodManager;->dispatchInputEvent(Landroid/view/InputEvent;Ljava/lang/Object;Landroid/view/inputmethod/InputMethodManager$FinishedInputEventCallback;Landroid/os/Handler;)I
+HPLandroid/view/inputmethod/InputMethodManager;->dispatchKeyEventFromInputMethod(Landroid/view/View;Landroid/view/KeyEvent;)V
+HPLandroid/view/inputmethod/InputMethodManager;->finishInputLocked()V
+HPLandroid/view/inputmethod/InputMethodManager;->finishedInputEvent(IZZ)V
+HPLandroid/view/inputmethod/InputMethodManager;->flushPendingEventsLocked()V
+HPLandroid/view/inputmethod/InputMethodManager;->getEnabledInputMethodList()Ljava/util/List;
+HPLandroid/view/inputmethod/InputMethodManager;->getEnabledInputMethodSubtypeList(Landroid/view/inputmethod/InputMethodInfo;Z)Ljava/util/List;
+HPLandroid/view/inputmethod/InputMethodManager;->getInputMethodList()Ljava/util/List;
+HPLandroid/view/inputmethod/InputMethodManager;->hideSoftInputFromInputMethod(Landroid/os/IBinder;I)V
+HPLandroid/view/inputmethod/InputMethodManager;->hideStatusIcon(Landroid/os/IBinder;)V
+HPLandroid/view/inputmethod/InputMethodManager;->invokeFinishedInputEventCallback(Landroid/view/inputmethod/InputMethodManager$PendingEvent;Z)V
+HPLandroid/view/inputmethod/InputMethodManager;->isCursorAnchorInfoEnabled()Z
+HPLandroid/view/inputmethod/InputMethodManager;->notifyUserAction()V
+HPLandroid/view/inputmethod/InputMethodManager;->obtainPendingEventLocked(Landroid/view/InputEvent;Ljava/lang/Object;Ljava/lang/String;Landroid/view/inputmethod/InputMethodManager$FinishedInputEventCallback;Landroid/os/Handler;)Landroid/view/inputmethod/InputMethodManager$PendingEvent;
+HPLandroid/view/inputmethod/InputMethodManager;->recyclePendingEventLocked(Landroid/view/inputmethod/InputMethodManager$PendingEvent;)V
+HPLandroid/view/inputmethod/InputMethodManager;->sendInputEventOnMainLooperLocked(Landroid/view/inputmethod/InputMethodManager$PendingEvent;)I
+HPLandroid/view/inputmethod/InputMethodManager;->setAdditionalInputMethodSubtypes(Ljava/lang/String;[Landroid/view/inputmethod/InputMethodSubtype;)V
+HPLandroid/view/inputmethod/InputMethodManager;->setImeWindowStatus(Landroid/os/IBinder;Landroid/os/IBinder;II)V
+HPLandroid/view/inputmethod/InputMethodManager;->shouldOfferSwitchingToNextInputMethod(Landroid/os/IBinder;)Z
+HPLandroid/view/inputmethod/InputMethodManager;->showSoftInput(Landroid/view/View;I)Z
+HPLandroid/view/inputmethod/InputMethodManager;->showSoftInput(Landroid/view/View;ILandroid/os/ResultReceiver;)Z
+HPLandroid/view/inputmethod/InputMethodManager;->updateSelection(Landroid/view/View;IIII)V
+HPLandroid/view/inputmethod/InputMethodManager;->windowDismissed(Landroid/os/IBinder;)V
+HPLandroid/view/inputmethod/InputMethodManagerInternal;->hideCurrentInputMethod()V
+HPLandroid/view/inputmethod/InputMethodManagerInternal;->setInteractive(Z)V
+HPLandroid/view/inputmethod/InputMethodManagerInternal;->switchInputMethod(Z)V
+HPLandroid/view/inputmethod/InputMethodSubtype$1;->newArray(I)[Landroid/view/inputmethod/InputMethodSubtype;
+HPLandroid/view/inputmethod/InputMethodSubtype$1;->newArray(I)[Ljava/lang/Object;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->-get0(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Z
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->-get1(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Z
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->-get2(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Z
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->-get3(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Ljava/lang/String;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->-get4(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)I
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->-get5(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)I
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->-get6(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Ljava/lang/String;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->-get7(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Ljava/lang/String;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->-get8(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)Ljava/lang/String;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->-get9(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)I
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;-><init>()V
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->build()Landroid/view/inputmethod/InputMethodSubtype;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setIsAsciiCapable(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setIsAuxiliary(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setLanguageTag(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setOverridesImplicitlyEnabledSubtype(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setSubtypeExtraValue(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setSubtypeIconResId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setSubtypeId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setSubtypeLocale(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setSubtypeMode(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
+HPLandroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;->setSubtypeNameResId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
+HPLandroid/view/inputmethod/InputMethodSubtype;-><init>(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;)V
+HPLandroid/view/inputmethod/InputMethodSubtype;-><init>(Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;Landroid/view/inputmethod/InputMethodSubtype;)V
+HPLandroid/view/inputmethod/InputMethodSubtype;->equals(Ljava/lang/Object;)Z
+HPLandroid/view/inputmethod/InputMethodSubtype;->getDisplayName(Landroid/content/Context;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;
+HPLandroid/view/inputmethod/InputMethodSubtype;->getExtraValue()Ljava/lang/String;
+HPLandroid/view/inputmethod/InputMethodSubtype;->getIconResId()I
+HPLandroid/view/inputmethod/InputMethodSubtype;->getLanguageTag()Ljava/lang/String;
+HPLandroid/view/inputmethod/InputMethodSubtype;->getLocaleDisplayName(Ljava/util/Locale;Ljava/util/Locale;Landroid/icu/text/DisplayContext;)Ljava/lang/String;
+HPLandroid/view/inputmethod/InputMethodSubtype;->getLocaleFromContext(Landroid/content/Context;)Ljava/util/Locale;
+HPLandroid/view/inputmethod/InputMethodSubtype;->getLocaleObject()Ljava/util/Locale;
+HPLandroid/view/inputmethod/InputMethodSubtype;->getMode()Ljava/lang/String;
+HPLandroid/view/inputmethod/InputMethodSubtype;->getNameResId()I
+HPLandroid/view/inputmethod/InputMethodSubtype;->getSubtypeId()I
+HPLandroid/view/inputmethod/InputMethodSubtype;->hasSubtypeId()Z
+HPLandroid/view/inputmethod/InputMethodSubtype;->hashCode()I
+HPLandroid/view/inputmethod/InputMethodSubtype;->hashCodeInternal(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZZ)I
+HPLandroid/view/inputmethod/InputMethodSubtype;->isAsciiCapable()Z
+HPLandroid/view/inputmethod/InputMethodSubtype;->isAuxiliary()Z
+HPLandroid/view/inputmethod/InputMethodSubtype;->overridesImplicitlyEnabledSubtype()Z
+HPLandroid/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
+HPLandroid/view/inputmethod/InputMethodSubtypeArray;-><init>(Ljava/util/List;)V
+HPLandroid/view/inputmethod/InputMethodSubtypeArray;->compress([B)[B
+HPLandroid/view/inputmethod/InputMethodSubtypeArray;->decompress([BI)[B
+HPLandroid/view/inputmethod/InputMethodSubtypeArray;->get(I)Landroid/view/inputmethod/InputMethodSubtype;
+HPLandroid/view/inputmethod/InputMethodSubtypeArray;->getCount()I
+HPLandroid/view/inputmethod/InputMethodSubtypeArray;->marshall([Landroid/view/inputmethod/InputMethodSubtype;)[B
+HPLandroid/view/inputmethod/InputMethodSubtypeArray;->unmarshall([B)[Landroid/view/inputmethod/InputMethodSubtype;
+HPLandroid/view/inputmethod/InputMethodSubtypeArray;->writeToParcel(Landroid/os/Parcel;)V
+HPLandroid/view/textservice/SentenceSuggestionsInfo$1;-><init>()V
+HPLandroid/view/textservice/SentenceSuggestionsInfo;-><init>([Landroid/view/textservice/SuggestionsInfo;[I[I)V
+HPLandroid/view/textservice/SentenceSuggestionsInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/textservice/SpellCheckerInfo$1;-><init>()V
+HPLandroid/view/textservice/SpellCheckerInfo;-><init>(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)V
+HPLandroid/view/textservice/SpellCheckerInfo;->getComponent()Landroid/content/ComponentName;
+HPLandroid/view/textservice/SpellCheckerInfo;->getId()Ljava/lang/String;
+HPLandroid/view/textservice/SpellCheckerInfo;->getPackageName()Ljava/lang/String;
+HPLandroid/view/textservice/SpellCheckerInfo;->getSubtypeAt(I)Landroid/view/textservice/SpellCheckerSubtype;
+HPLandroid/view/textservice/SpellCheckerInfo;->getSubtypeCount()I
+HPLandroid/view/textservice/SpellCheckerInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListener;->onGetSentenceSuggestions([Landroid/view/textservice/SentenceSuggestionsInfo;)V
+HPLandroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListener;->onGetSuggestions([Landroid/view/textservice/SuggestionsInfo;)V
+HPLandroid/view/textservice/SpellCheckerSubtype$1;-><init>()V
+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
+HPLandroid/view/textservice/SpellCheckerSubtype;->getLocale()Ljava/lang/String;
+HPLandroid/view/textservice/SpellCheckerSubtype;->getLocaleObject()Ljava/util/Locale;
+HPLandroid/view/textservice/SpellCheckerSubtype;->hashCodeInternal(Ljava/lang/String;Ljava/lang/String;)I
+HPLandroid/view/textservice/SpellCheckerSubtype;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/textservice/SuggestionsInfo$1;-><init>()V
+HPLandroid/view/textservice/SuggestionsInfo;-><init>(I[Ljava/lang/String;)V
+HPLandroid/view/textservice/SuggestionsInfo;-><init>(I[Ljava/lang/String;II)V
+HPLandroid/view/textservice/SuggestionsInfo;->getSequence()I
+HPLandroid/view/textservice/SuggestionsInfo;->setCookieAndSequence(II)V
+HPLandroid/view/textservice/SuggestionsInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/view/textservice/TextInfo$1;-><init>()V
+HPLandroid/view/textservice/TextInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textservice/TextInfo;
+HPLandroid/view/textservice/TextInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/view/textservice/TextInfo$1;->newArray(I)[Landroid/view/textservice/TextInfo;
+HPLandroid/view/textservice/TextInfo$1;->newArray(I)[Ljava/lang/Object;
+HPLandroid/view/textservice/TextInfo;-><init>(Landroid/os/Parcel;)V
+HPLandroid/view/textservice/TextInfo;-><init>(Ljava/lang/CharSequence;IIII)V
+HPLandroid/view/textservice/TextInfo;->getCookie()I
+HPLandroid/view/textservice/TextInfo;->getSequence()I
+HPLandroid/view/textservice/TextInfo;->getText()Ljava/lang/String;
+HPLandroid/view/textservice/TextServicesManager;-><init>()V
+HPLandroid/view/textservice/TextServicesManager;->getCurrentSpellChecker()Landroid/view/textservice/SpellCheckerInfo;
+HPLandroid/view/textservice/TextServicesManager;->getCurrentSpellCheckerSubtype(Z)Landroid/view/textservice/SpellCheckerSubtype;
+HPLandroid/view/textservice/TextServicesManager;->getInstance()Landroid/view/textservice/TextServicesManager;
+HPLandroid/view/textservice/TextServicesManager;->isSpellCheckerEnabled()Z
+HPLandroid/webkit/GeolocationPermissions;-><init>()V
+HPLandroid/webkit/IWebViewUpdateService$Stub;-><init>()V
+HPLandroid/webkit/IWebViewUpdateService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/webkit/ServiceWorkerController;-><init>()V
+HPLandroid/webkit/ServiceWorkerController;->getServiceWorkerWebSettings()Landroid/webkit/ServiceWorkerWebSettings;
+HPLandroid/webkit/ServiceWorkerController;->setServiceWorkerClient(Landroid/webkit/ServiceWorkerClient;)V
+HPLandroid/webkit/UserPackage;-><init>(Landroid/content/pm/UserInfo;Landroid/content/pm/PackageInfo;)V
+HPLandroid/webkit/UserPackage;->getAllUsers(Landroid/content/Context;)Ljava/util/List;
+HPLandroid/webkit/UserPackage;->getPackageInfo()Landroid/content/pm/PackageInfo;
+HPLandroid/webkit/UserPackage;->getPackageInfosAllUsers(Landroid/content/Context;Ljava/lang/String;I)Ljava/util/List;
+HPLandroid/webkit/UserPackage;->hasCorrectTargetSdkVersion(Landroid/content/pm/PackageInfo;)Z
+HPLandroid/webkit/UserPackage;->isEnabledPackage()Z
+HPLandroid/webkit/UserPackage;->isInstalledPackage()Z
+HPLandroid/webkit/WebSettings$LayoutAlgorithm;-><init>(Ljava/lang/String;I)V
+HPLandroid/webkit/WebSettings$PluginState;-><init>(Ljava/lang/String;I)V
+HPLandroid/webkit/WebSettings;-><init>()V
+HPLandroid/webkit/WebSettings;->enableSmoothTransition()Z
+HPLandroid/webkit/WebSettings;->getAcceptThirdPartyCookies()Z
+HPLandroid/webkit/WebSettings;->getAllowContentAccess()Z
+HPLandroid/webkit/WebSettings;->getAllowFileAccess()Z
+HPLandroid/webkit/WebSettings;->getAllowFileAccessFromFileURLs()Z
+HPLandroid/webkit/WebSettings;->getAllowUniversalAccessFromFileURLs()Z
+HPLandroid/webkit/WebSettings;->getBlockNetworkImage()Z
+HPLandroid/webkit/WebSettings;->getBlockNetworkLoads()Z
+HPLandroid/webkit/WebSettings;->getBuiltInZoomControls()Z
+HPLandroid/webkit/WebSettings;->getCacheMode()I
+HPLandroid/webkit/WebSettings;->getCursiveFontFamily()Ljava/lang/String;
+HPLandroid/webkit/WebSettings;->getDatabaseEnabled()Z
+HPLandroid/webkit/WebSettings;->getDatabasePath()Ljava/lang/String;
+HPLandroid/webkit/WebSettings;->getDefaultFixedFontSize()I
+HPLandroid/webkit/WebSettings;->getDefaultFontSize()I
+HPLandroid/webkit/WebSettings;->getDefaultTextEncodingName()Ljava/lang/String;
+HPLandroid/webkit/WebSettings;->getDefaultZoom()Landroid/webkit/WebSettings$ZoomDensity;
+HPLandroid/webkit/WebSettings;->getDisabledActionModeMenuItems()I
+HPLandroid/webkit/WebSettings;->getDisplayZoomControls()Z
+HPLandroid/webkit/WebSettings;->getDomStorageEnabled()Z
+HPLandroid/webkit/WebSettings;->getFantasyFontFamily()Ljava/lang/String;
+HPLandroid/webkit/WebSettings;->getFixedFontFamily()Ljava/lang/String;
+HPLandroid/webkit/WebSettings;->getJavaScriptCanOpenWindowsAutomatically()Z
+HPLandroid/webkit/WebSettings;->getJavaScriptEnabled()Z
+HPLandroid/webkit/WebSettings;->getLayoutAlgorithm()Landroid/webkit/WebSettings$LayoutAlgorithm;
+HPLandroid/webkit/WebSettings;->getLightTouchEnabled()Z
+HPLandroid/webkit/WebSettings;->getLoadWithOverviewMode()Z
+HPLandroid/webkit/WebSettings;->getLoadsImagesAutomatically()Z
+HPLandroid/webkit/WebSettings;->getMediaPlaybackRequiresUserGesture()Z
+HPLandroid/webkit/WebSettings;->getMinimumFontSize()I
+HPLandroid/webkit/WebSettings;->getMinimumLogicalFontSize()I
+HPLandroid/webkit/WebSettings;->getMixedContentMode()I
+HPLandroid/webkit/WebSettings;->getNavDump()Z
+HPLandroid/webkit/WebSettings;->getOffscreenPreRaster()Z
+HPLandroid/webkit/WebSettings;->getPluginState()Landroid/webkit/WebSettings$PluginState;
+HPLandroid/webkit/WebSettings;->getPluginsEnabled()Z
+HPLandroid/webkit/WebSettings;->getSafeBrowsingEnabled()Z
+HPLandroid/webkit/WebSettings;->getSansSerifFontFamily()Ljava/lang/String;
+HPLandroid/webkit/WebSettings;->getSaveFormData()Z
+HPLandroid/webkit/WebSettings;->getSavePassword()Z
+HPLandroid/webkit/WebSettings;->getSerifFontFamily()Ljava/lang/String;
+HPLandroid/webkit/WebSettings;->getStandardFontFamily()Ljava/lang/String;
+HPLandroid/webkit/WebSettings;->getTextZoom()I
+HPLandroid/webkit/WebSettings;->getUseWebViewBackgroundForOverscrollBackground()Z
+HPLandroid/webkit/WebSettings;->getUseWideViewPort()Z
+HPLandroid/webkit/WebSettings;->getUserAgent()I
+HPLandroid/webkit/WebSettings;->getUserAgentString()Ljava/lang/String;
+HPLandroid/webkit/WebSettings;->getVideoOverlayForEmbeddedEncryptedVideoEnabled()Z
+HPLandroid/webkit/WebSettings;->setAcceptThirdPartyCookies(Z)V
+HPLandroid/webkit/WebSettings;->setAllowContentAccess(Z)V
+HPLandroid/webkit/WebSettings;->setAllowFileAccess(Z)V
+HPLandroid/webkit/WebSettings;->setAllowFileAccessFromFileURLs(Z)V
+HPLandroid/webkit/WebSettings;->setAllowUniversalAccessFromFileURLs(Z)V
+HPLandroid/webkit/WebSettings;->setAppCacheEnabled(Z)V
+HPLandroid/webkit/WebSettings;->setAppCacheMaxSize(J)V
+HPLandroid/webkit/WebSettings;->setAppCachePath(Ljava/lang/String;)V
+HPLandroid/webkit/WebSettings;->setBlockNetworkImage(Z)V
+HPLandroid/webkit/WebSettings;->setBlockNetworkLoads(Z)V
+HPLandroid/webkit/WebSettings;->setBuiltInZoomControls(Z)V
+HPLandroid/webkit/WebSettings;->setCacheMode(I)V
+HPLandroid/webkit/WebSettings;->setCursiveFontFamily(Ljava/lang/String;)V
+HPLandroid/webkit/WebSettings;->setDatabaseEnabled(Z)V
+HPLandroid/webkit/WebSettings;->setDatabasePath(Ljava/lang/String;)V
+HPLandroid/webkit/WebSettings;->setDefaultFixedFontSize(I)V
+HPLandroid/webkit/WebSettings;->setDefaultFontSize(I)V
+HPLandroid/webkit/WebSettings;->setDefaultTextEncodingName(Ljava/lang/String;)V
+HPLandroid/webkit/WebSettings;->setDefaultZoom(Landroid/webkit/WebSettings$ZoomDensity;)V
+HPLandroid/webkit/WebSettings;->setDisabledActionModeMenuItems(I)V
+HPLandroid/webkit/WebSettings;->setDisplayZoomControls(Z)V
+HPLandroid/webkit/WebSettings;->setDomStorageEnabled(Z)V
+HPLandroid/webkit/WebSettings;->setEnableSmoothTransition(Z)V
+HPLandroid/webkit/WebSettings;->setFantasyFontFamily(Ljava/lang/String;)V
+HPLandroid/webkit/WebSettings;->setFixedFontFamily(Ljava/lang/String;)V
+HPLandroid/webkit/WebSettings;->setGeolocationDatabasePath(Ljava/lang/String;)V
+HPLandroid/webkit/WebSettings;->setGeolocationEnabled(Z)V
+HPLandroid/webkit/WebSettings;->setJavaScriptCanOpenWindowsAutomatically(Z)V
+HPLandroid/webkit/WebSettings;->setJavaScriptEnabled(Z)V
+HPLandroid/webkit/WebSettings;->setLayoutAlgorithm(Landroid/webkit/WebSettings$LayoutAlgorithm;)V
+HPLandroid/webkit/WebSettings;->setLightTouchEnabled(Z)V
+HPLandroid/webkit/WebSettings;->setLoadWithOverviewMode(Z)V
+HPLandroid/webkit/WebSettings;->setLoadsImagesAutomatically(Z)V
+HPLandroid/webkit/WebSettings;->setMediaPlaybackRequiresUserGesture(Z)V
+HPLandroid/webkit/WebSettings;->setMinimumFontSize(I)V
+HPLandroid/webkit/WebSettings;->setMinimumLogicalFontSize(I)V
+HPLandroid/webkit/WebSettings;->setMixedContentMode(I)V
+HPLandroid/webkit/WebSettings;->setNavDump(Z)V
+HPLandroid/webkit/WebSettings;->setNeedInitialFocus(Z)V
+HPLandroid/webkit/WebSettings;->setOffscreenPreRaster(Z)V
+HPLandroid/webkit/WebSettings;->setPluginState(Landroid/webkit/WebSettings$PluginState;)V
+HPLandroid/webkit/WebSettings;->setPluginsEnabled(Z)V
+HPLandroid/webkit/WebSettings;->setRenderPriority(Landroid/webkit/WebSettings$RenderPriority;)V
+HPLandroid/webkit/WebSettings;->setSafeBrowsingEnabled(Z)V
+HPLandroid/webkit/WebSettings;->setSansSerifFontFamily(Ljava/lang/String;)V
+HPLandroid/webkit/WebSettings;->setSaveFormData(Z)V
+HPLandroid/webkit/WebSettings;->setSavePassword(Z)V
+HPLandroid/webkit/WebSettings;->setSerifFontFamily(Ljava/lang/String;)V
+HPLandroid/webkit/WebSettings;->setStandardFontFamily(Ljava/lang/String;)V
+HPLandroid/webkit/WebSettings;->setSupportMultipleWindows(Z)V
+HPLandroid/webkit/WebSettings;->setSupportZoom(Z)V
+HPLandroid/webkit/WebSettings;->setTextZoom(I)V
+HPLandroid/webkit/WebSettings;->setUseWebViewBackgroundForOverscrollBackground(Z)V
+HPLandroid/webkit/WebSettings;->setUseWideViewPort(Z)V
+HPLandroid/webkit/WebSettings;->setUserAgent(I)V
+HPLandroid/webkit/WebSettings;->setUserAgentString(Ljava/lang/String;)V
+HPLandroid/webkit/WebSettings;->setVideoOverlayForEmbeddedEncryptedVideoEnabled(Z)V
+HPLandroid/webkit/WebSettings;->supportMultipleWindows()Z
+HPLandroid/webkit/WebSettings;->supportZoom()Z
+HPLandroid/webkit/WebStorage;-><init>()V
+HPLandroid/webkit/WebView$HitTestResult;-><init>()V
+HPLandroid/webkit/WebView$PrivateAccess;-><init>(Landroid/webkit/WebView;)V
+HPLandroid/webkit/WebView$PrivateAccess;->super_getScrollBarStyle()I
+HPLandroid/webkit/WebView$PrivateAccess;->super_setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V
+HPLandroid/webkit/WebView;->-wrap14(Landroid/webkit/WebView;)I
+HPLandroid/webkit/WebView;->-wrap18(Landroid/webkit/WebView;Landroid/view/ViewGroup$LayoutParams;)V
+HPLandroid/webkit/WebView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/webkit/WebView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HPLandroid/webkit/WebView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HPLandroid/webkit/WebView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;IILjava/util/Map;Z)V
+HPLandroid/webkit/WebView;->checkThread()V
+HPLandroid/webkit/WebView;->ensureProviderCreated()V
+HPLandroid/webkit/WebView;->getFactory()Landroid/webkit/WebViewFactoryProvider;
+HPLandroid/webkit/WebView;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V
+HPLandroid/webkit/WebView;->setOverScrollMode(I)V
+HPLandroid/webkit/WebViewClient;-><init>()V
+HPLandroid/webkit/WebViewDelegate$1;-><init>(Landroid/webkit/WebViewDelegate;Landroid/webkit/WebViewDelegate$OnTraceEnabledChangeListener;)V
+HPLandroid/webkit/WebViewDelegate$OnTraceEnabledChangeListener;->onTraceEnabledChange(Z)V
+HPLandroid/webkit/WebViewDelegate;->addWebViewAssetPath(Landroid/content/Context;)V
+HPLandroid/webkit/WebViewDelegate;->getPackageId(Landroid/content/res/Resources;Ljava/lang/String;)I
+HPLandroid/webkit/WebViewDelegate;->isTraceTagEnabled()Z
+HPLandroid/webkit/WebViewDelegate;->setOnTraceEnabledChangeListener(Landroid/webkit/WebViewDelegate$OnTraceEnabledChangeListener;)V
+HPLandroid/webkit/WebViewFactory;->onWebViewProviderChanged(Landroid/content/pm/PackageInfo;)I
+HPLandroid/webkit/WebViewFactory;->prepareWebViewInSystemServer([Ljava/lang/String;)I
+HPLandroid/webkit/WebViewLibraryLoader$1;-><init>(Ljava/lang/String;)V
+HPLandroid/webkit/WebViewLibraryLoader;->createRelroFile(Z[Ljava/lang/String;)V
+HPLandroid/webkit/WebViewLibraryLoader;->getLoadFromApkPath(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/webkit/WebViewLibraryLoader;->getWebViewNativeLibraryPaths(Landroid/content/pm/PackageInfo;)[Ljava/lang/String;
+HPLandroid/webkit/WebViewLibraryLoader;->setWebViewZygoteVmSize(J)V
+HPLandroid/webkit/WebViewLibraryLoader;->updateWebViewZygoteVmSize(Landroid/content/pm/PackageInfo;)[Ljava/lang/String;
+HPLandroid/webkit/WebViewProvider$ScrollDelegate;->computeHorizontalScrollOffset()I
+HPLandroid/webkit/WebViewProvider$ScrollDelegate;->computeHorizontalScrollRange()I
+HPLandroid/webkit/WebViewProvider$ScrollDelegate;->computeScroll()V
+HPLandroid/webkit/WebViewProvider$ScrollDelegate;->computeVerticalScrollExtent()I
+HPLandroid/webkit/WebViewProvider$ScrollDelegate;->computeVerticalScrollOffset()I
+HPLandroid/webkit/WebViewProvider$ScrollDelegate;->computeVerticalScrollRange()I
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->findFocus(Landroid/view/View;)Landroid/view/View;
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->getAccessibilityNodeProvider()Landroid/view/accessibility/AccessibilityNodeProvider;
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->getHandler(Landroid/os/Handler;)Landroid/os/Handler;
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onActivityResult(IILandroid/content/Intent;)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onAttachedToWindow()V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onDetachedFromWindow()V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onDragEvent(Landroid/view/DragEvent;)Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onDraw(Landroid/graphics/Canvas;)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onFinishTemporaryDetach()V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onFocusChanged(ZILandroid/graphics/Rect;)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onGenericMotionEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onHoverEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onInitializeAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onKeyDown(ILandroid/view/KeyEvent;)Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onKeyMultiple(IILandroid/view/KeyEvent;)Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onKeyUp(ILandroid/view/KeyEvent;)Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onMeasure(II)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onOverScrolled(IIZZ)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onProvideVirtualStructure(Landroid/view/ViewStructure;)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onScrollChanged(IIII)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onSizeChanged(IIII)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onStartTemporaryDetach()V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onTrackballEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onVisibilityChanged(Landroid/view/View;I)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onWindowFocusChanged(Z)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->onWindowVisibilityChanged(I)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->performAccessibilityAction(ILandroid/os/Bundle;)Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->performLongClick()Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->preDispatchDraw(Landroid/graphics/Canvas;)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->requestFocus(ILandroid/graphics/Rect;)Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->setBackgroundColor(I)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->setFrame(IIII)Z
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->setLayerType(ILandroid/graphics/Paint;)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->setOverScrollMode(I)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->setScrollBarStyle(I)V
+HPLandroid/webkit/WebViewProvider$ViewDelegate;->shouldDelayChildPressedState()Z
+HPLandroid/webkit/WebViewProvider;->addJavascriptInterface(Ljava/lang/Object;Ljava/lang/String;)V
+HPLandroid/webkit/WebViewProvider;->canGoBack()Z
+HPLandroid/webkit/WebViewProvider;->canGoBackOrForward(I)Z
+HPLandroid/webkit/WebViewProvider;->canGoForward()Z
+HPLandroid/webkit/WebViewProvider;->canZoomIn()Z
+HPLandroid/webkit/WebViewProvider;->canZoomOut()Z
+HPLandroid/webkit/WebViewProvider;->capturePicture()Landroid/graphics/Picture;
+HPLandroid/webkit/WebViewProvider;->clearCache(Z)V
+HPLandroid/webkit/WebViewProvider;->clearFormData()V
+HPLandroid/webkit/WebViewProvider;->clearHistory()V
+HPLandroid/webkit/WebViewProvider;->clearMatches()V
+HPLandroid/webkit/WebViewProvider;->clearSslPreferences()V
+HPLandroid/webkit/WebViewProvider;->clearView()V
+HPLandroid/webkit/WebViewProvider;->copyBackForwardList()Landroid/webkit/WebBackForwardList;
+HPLandroid/webkit/WebViewProvider;->createPrintDocumentAdapter(Ljava/lang/String;)Landroid/print/PrintDocumentAdapter;
+HPLandroid/webkit/WebViewProvider;->createWebMessageChannel()[Landroid/webkit/WebMessagePort;
+HPLandroid/webkit/WebViewProvider;->destroy()V
+HPLandroid/webkit/WebViewProvider;->documentHasImages(Landroid/os/Message;)V
+HPLandroid/webkit/WebViewProvider;->dumpViewHierarchyWithProperties(Ljava/io/BufferedWriter;I)V
+HPLandroid/webkit/WebViewProvider;->evaluateJavaScript(Ljava/lang/String;Landroid/webkit/ValueCallback;)V
+HPLandroid/webkit/WebViewProvider;->findAll(Ljava/lang/String;)I
+HPLandroid/webkit/WebViewProvider;->findAllAsync(Ljava/lang/String;)V
+HPLandroid/webkit/WebViewProvider;->findHierarchyView(Ljava/lang/String;I)Landroid/view/View;
+HPLandroid/webkit/WebViewProvider;->findNext(Z)V
+HPLandroid/webkit/WebViewProvider;->flingScroll(II)V
+HPLandroid/webkit/WebViewProvider;->freeMemory()V
+HPLandroid/webkit/WebViewProvider;->getCertificate()Landroid/net/http/SslCertificate;
+HPLandroid/webkit/WebViewProvider;->getContentHeight()I
+HPLandroid/webkit/WebViewProvider;->getContentWidth()I
+HPLandroid/webkit/WebViewProvider;->getFavicon()Landroid/graphics/Bitmap;
+HPLandroid/webkit/WebViewProvider;->getHitTestResult()Landroid/webkit/WebView$HitTestResult;
+HPLandroid/webkit/WebViewProvider;->getHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+HPLandroid/webkit/WebViewProvider;->getOriginalUrl()Ljava/lang/String;
+HPLandroid/webkit/WebViewProvider;->getProgress()I
+HPLandroid/webkit/WebViewProvider;->getRendererPriorityWaivedWhenNotVisible()Z
+HPLandroid/webkit/WebViewProvider;->getRendererRequestedPriority()I
+HPLandroid/webkit/WebViewProvider;->getScale()F
+HPLandroid/webkit/WebViewProvider;->getScrollDelegate()Landroid/webkit/WebViewProvider$ScrollDelegate;
+HPLandroid/webkit/WebViewProvider;->getSettings()Landroid/webkit/WebSettings;
+HPLandroid/webkit/WebViewProvider;->getTitle()Ljava/lang/String;
+HPLandroid/webkit/WebViewProvider;->getTouchIconUrl()Ljava/lang/String;
+HPLandroid/webkit/WebViewProvider;->getUrl()Ljava/lang/String;
+HPLandroid/webkit/WebViewProvider;->getViewDelegate()Landroid/webkit/WebViewProvider$ViewDelegate;
+HPLandroid/webkit/WebViewProvider;->getVisibleTitleHeight()I
+HPLandroid/webkit/WebViewProvider;->getWebChromeClient()Landroid/webkit/WebChromeClient;
+HPLandroid/webkit/WebViewProvider;->getWebViewClient()Landroid/webkit/WebViewClient;
+HPLandroid/webkit/WebViewProvider;->getZoomControls()Landroid/view/View;
+HPLandroid/webkit/WebViewProvider;->goBack()V
+HPLandroid/webkit/WebViewProvider;->goBackOrForward(I)V
+HPLandroid/webkit/WebViewProvider;->goForward()V
+HPLandroid/webkit/WebViewProvider;->init(Ljava/util/Map;Z)V
+HPLandroid/webkit/WebViewProvider;->insertVisualStateCallback(JLandroid/webkit/WebView$VisualStateCallback;)V
+HPLandroid/webkit/WebViewProvider;->invokeZoomPicker()V
+HPLandroid/webkit/WebViewProvider;->isPaused()Z
+HPLandroid/webkit/WebViewProvider;->isPrivateBrowsingEnabled()Z
+HPLandroid/webkit/WebViewProvider;->loadData(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/webkit/WebViewProvider;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/webkit/WebViewProvider;->loadUrl(Ljava/lang/String;)V
+HPLandroid/webkit/WebViewProvider;->loadUrl(Ljava/lang/String;Ljava/util/Map;)V
+HPLandroid/webkit/WebViewProvider;->notifyFindDialogDismissed()V
+HPLandroid/webkit/WebViewProvider;->onPause()V
+HPLandroid/webkit/WebViewProvider;->onResume()V
+HPLandroid/webkit/WebViewProvider;->overlayHorizontalScrollbar()Z
+HPLandroid/webkit/WebViewProvider;->overlayVerticalScrollbar()Z
+HPLandroid/webkit/WebViewProvider;->pageDown(Z)Z
+HPLandroid/webkit/WebViewProvider;->pageUp(Z)Z
+HPLandroid/webkit/WebViewProvider;->pauseTimers()V
+HPLandroid/webkit/WebViewProvider;->postMessageToMainFrame(Landroid/webkit/WebMessage;Landroid/net/Uri;)V
+HPLandroid/webkit/WebViewProvider;->postUrl(Ljava/lang/String;[B)V
+HPLandroid/webkit/WebViewProvider;->reload()V
+HPLandroid/webkit/WebViewProvider;->removeJavascriptInterface(Ljava/lang/String;)V
+HPLandroid/webkit/WebViewProvider;->requestFocusNodeHref(Landroid/os/Message;)V
+HPLandroid/webkit/WebViewProvider;->requestImageRef(Landroid/os/Message;)V
+HPLandroid/webkit/WebViewProvider;->restorePicture(Landroid/os/Bundle;Ljava/io/File;)Z
+HPLandroid/webkit/WebViewProvider;->restoreState(Landroid/os/Bundle;)Landroid/webkit/WebBackForwardList;
+HPLandroid/webkit/WebViewProvider;->resumeTimers()V
+HPLandroid/webkit/WebViewProvider;->savePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/webkit/WebViewProvider;->savePicture(Landroid/os/Bundle;Ljava/io/File;)Z
+HPLandroid/webkit/WebViewProvider;->saveState(Landroid/os/Bundle;)Landroid/webkit/WebBackForwardList;
+HPLandroid/webkit/WebViewProvider;->saveWebArchive(Ljava/lang/String;)V
+HPLandroid/webkit/WebViewProvider;->saveWebArchive(Ljava/lang/String;ZLandroid/webkit/ValueCallback;)V
+HPLandroid/webkit/WebViewProvider;->setCertificate(Landroid/net/http/SslCertificate;)V
+HPLandroid/webkit/WebViewProvider;->setDownloadListener(Landroid/webkit/DownloadListener;)V
+HPLandroid/webkit/WebViewProvider;->setFindListener(Landroid/webkit/WebView$FindListener;)V
+HPLandroid/webkit/WebViewProvider;->setHorizontalScrollbarOverlay(Z)V
+HPLandroid/webkit/WebViewProvider;->setHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLandroid/webkit/WebViewProvider;->setInitialScale(I)V
+HPLandroid/webkit/WebViewProvider;->setMapTrackballToArrowKeys(Z)V
+HPLandroid/webkit/WebViewProvider;->setNetworkAvailable(Z)V
+HPLandroid/webkit/WebViewProvider;->setPictureListener(Landroid/webkit/WebView$PictureListener;)V
+HPLandroid/webkit/WebViewProvider;->setRendererPriorityPolicy(IZ)V
+HPLandroid/webkit/WebViewProvider;->setVerticalScrollbarOverlay(Z)V
+HPLandroid/webkit/WebViewProvider;->setWebChromeClient(Landroid/webkit/WebChromeClient;)V
+HPLandroid/webkit/WebViewProvider;->setWebViewClient(Landroid/webkit/WebViewClient;)V
+HPLandroid/webkit/WebViewProvider;->showFindDialog(Ljava/lang/String;Z)Z
+HPLandroid/webkit/WebViewProvider;->stopLoading()V
+HPLandroid/webkit/WebViewProvider;->zoomBy(F)Z
+HPLandroid/webkit/WebViewProvider;->zoomIn()Z
+HPLandroid/webkit/WebViewProvider;->zoomOut()Z
+HPLandroid/webkit/WebViewProviderInfo$1;-><init>()V
+HPLandroid/webkit/WebViewProviderInfo;-><init>(Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)V
+HPLandroid/webkit/WebViewProviderResponse;-><init>(Landroid/content/pm/PackageInfo;I)V
+HPLandroid/webkit/WebViewProviderResponse;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/webkit/WebViewZygote;->connectToZygoteIfNeededLocked()V
+HPLandroid/webkit/WebViewZygote;->getPackageName()Ljava/lang/String;
+HPLandroid/webkit/WebViewZygote;->getProcess()Landroid/os/ZygoteProcess;
+HPLandroid/webkit/WebViewZygote;->getServiceNameLocked()Ljava/lang/String;
+HPLandroid/webkit/WebViewZygote;->isMultiprocessEnabled()Z
+HPLandroid/webkit/WebViewZygote;->onWebViewProviderChanged(Landroid/content/pm/PackageInfo;Ljava/lang/String;)V
+HPLandroid/webkit/WebViewZygote;->setMultiprocessEnabled(Z)V
+HPLandroid/webkit/WebViewZygote;->waitForServiceStartAndConnect()V
+HPLandroid/widget/-$Lambda$4jHC8VaIirQBkUjvvJtjqGMnk38;->$m$0()V
+HPLandroid/widget/-$Lambda$4jHC8VaIirQBkUjvvJtjqGMnk38;-><init>(BLjava/lang/Object;)V
+HPLandroid/widget/-$Lambda$4jHC8VaIirQBkUjvvJtjqGMnk38;->run()V
+HPLandroid/widget/AbsListView$ListItemAccessibilityDelegate;->onInitializeAccessibilityNodeInfo(Landroid/view/View;Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/widget/AbsListView$RecycleBin;->clearScrap(Ljava/util/ArrayList;)V
+HPLandroid/widget/AbsListView$RecycleBin;->removeDetachedView(Landroid/view/View;Z)V
+HPLandroid/widget/AbsListView$SavedState;-><init>(Landroid/os/Parcelable;)V
+HPLandroid/widget/AbsListView$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/widget/AbsListView$SelectionBoundsAdjuster;->adjustListItemSelectionBounds(Landroid/graphics/Rect;)V
+HPLandroid/widget/AbsListView;->-wrap6(Landroid/widget/AbsListView;Landroid/view/View;Z)V
+HPLandroid/widget/AbsListView;->canScrollDown()Z
+HPLandroid/widget/AbsListView;->canScrollUp()Z
+HPLandroid/widget/AbsListView;->checkInputConnectionProxy(Landroid/view/View;)Z
+HPLandroid/widget/AbsListView;->clearScrollingCache()V
+HPLandroid/widget/AbsListView;->findViewByAccessibilityIdTraversal(I)Landroid/view/View;
+HPLandroid/widget/AbsListView;->getChoiceMode()I
+HPLandroid/widget/AbsListView;->getFocusedRect(Landroid/graphics/Rect;)V
+HPLandroid/widget/AbsListView;->getSelectedView()Landroid/view/View;
+HPLandroid/widget/AbsListView;->getSelectionModeForAccessibility()I
+HPLandroid/widget/AbsListView;->initOrResetVelocityTracker()V
+HPLandroid/widget/AbsListView;->initVelocityTrackerIfNotExists()V
+HPLandroid/widget/AbsListView;->isItemChecked(I)Z
+HPLandroid/widget/AbsListView;->isItemClickable(Landroid/view/View;)Z
+HPLandroid/widget/AbsListView;->onCancelPendingInputEvents()V
+HPLandroid/widget/AbsListView;->onDetachedFromWindow()V
+HPLandroid/widget/AbsListView;->onInitializeAccessibilityNodeInfoForItem(Landroid/view/View;ILandroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/widget/AbsListView;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/widget/AbsListView;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/widget/AbsListView;->onSaveInstanceState()Landroid/os/Parcelable;
+HPLandroid/widget/AbsListView;->reconcileSelectedPosition()I
+HPLandroid/widget/AbsListView;->recycleVelocityTracker()V
+HPLandroid/widget/AbsListView;->reportScrollStateChange(I)V
+HPLandroid/widget/AbsListView;->setItemChecked(IZ)V
+HPLandroid/widget/AbsListView;->startScrollIfNeeded(IILandroid/view/MotionEvent;)Z
+HPLandroid/widget/AbsSeekBar;->canUserSetProgress()Z
+HPLandroid/widget/AbsSeekBar;->drawThumb(Landroid/graphics/Canvas;)V
+HPLandroid/widget/AbsSeekBar;->drawTickMarks(Landroid/graphics/Canvas;)V
+HPLandroid/widget/AbsSeekBar;->drawTrack(Landroid/graphics/Canvas;)V
+HPLandroid/widget/AbsSeekBar;->onDraw(Landroid/graphics/Canvas;)V
+HPLandroid/widget/AbsSeekBar;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/widget/AbsSeekBar;->onSizeChanged(IIII)V
+HPLandroid/widget/AbsSeekBar;->updateThumbAndTrackPos(II)V
+HPLandroid/widget/AbsoluteLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HPLandroid/widget/ActionMenuPresenter$2;->onViewAttachedToWindow(Landroid/view/View;)V
+HPLandroid/widget/ActionMenuPresenter$2;->onViewDetachedFromWindow(Landroid/view/View;)V
+HPLandroid/widget/ActionMenuPresenter$SavedState$1;-><init>()V
+HPLandroid/widget/ActionMenuPresenter$SavedState;-><init>()V
+HPLandroid/widget/ActionMenuPresenter;->-get1(Landroid/widget/ActionMenuPresenter;)Landroid/view/ViewTreeObserver$OnPreDrawListener;
+HPLandroid/widget/ActionMenuPresenter;->-get3(Landroid/widget/ActionMenuPresenter;)Lcom/android/internal/view/menu/MenuView;
+HPLandroid/widget/ActionMenuPresenter;->-get6(Landroid/widget/ActionMenuPresenter;)Landroid/util/SparseArray;
+HPLandroid/widget/ActionMenuPresenter;->-get8(Landroid/widget/ActionMenuPresenter;)Landroid/util/SparseArray;
+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;->isOverflowMenuShowing()Z
+HPLandroid/widget/ActionMenuPresenter;->onCloseMenu(Lcom/android/internal/view/menu/MenuBuilder;Z)V
+HPLandroid/widget/ActionMenuPresenter;->onSaveInstanceState()Landroid/os/Parcelable;
+HPLandroid/widget/ActionMenuView$ActionMenuPresenterCallback;-><init>(Landroid/widget/ActionMenuView;)V
+HPLandroid/widget/ActionMenuView$ActionMenuPresenterCallback;-><init>(Landroid/widget/ActionMenuView;Landroid/widget/ActionMenuView$ActionMenuPresenterCallback;)V
+HPLandroid/widget/ActionMenuView;->dismissPopupMenus()V
+HPLandroid/widget/ActionMenuView;->isOverflowMenuShowing()Z
+HPLandroid/widget/ActionMenuView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/widget/ActionMenuView;->onDetachedFromWindow()V
+HPLandroid/widget/Adapter;->getAutofillOptions()[Ljava/lang/CharSequence;
+HPLandroid/widget/AdapterView$OnItemLongClickListener;->onItemLongClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)Z
+HPLandroid/widget/AdapterView;->dispatchPopulateAccessibilityEventInternal(Landroid/view/accessibility/AccessibilityEvent;)Z
+HPLandroid/widget/AdapterView;->dispatchSaveInstanceState(Landroid/util/SparseArray;)V
+HPLandroid/widget/AdapterView;->getPositionForView(Landroid/view/View;)I
+HPLandroid/widget/AdapterView;->getSelectedItemId()J
+HPLandroid/widget/AdapterView;->getSelectedItemPosition()I
+HPLandroid/widget/AdapterView;->isScrollableForAccessibility()Z
+HPLandroid/widget/AdapterView;->onDetachedFromWindow()V
+HPLandroid/widget/AdapterView;->onInitializeAccessibilityEventInternal(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLandroid/widget/AdapterView;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/widget/AdapterView;->onProvideAutofillStructure(Landroid/view/ViewStructure;I)V
+HPLandroid/widget/AdapterView;->onRequestSendAccessibilityEventInternal(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z
+HPLandroid/widget/ArrayAdapter;-><init>(Landroid/content/Context;I)V
+HPLandroid/widget/ArrayAdapter;-><init>(Landroid/content/Context;IILjava/util/List;)V
+HPLandroid/widget/ArrayAdapter;-><init>(Landroid/content/Context;IILjava/util/List;Z)V
+HPLandroid/widget/ArrayAdapter;->clear()V
+HPLandroid/widget/ArrayAdapter;->notifyDataSetChanged()V
+HPLandroid/widget/AutoCompleteTextView$PopupDataSetObserver$1;-><init>(Landroid/widget/AutoCompleteTextView$PopupDataSetObserver;)V
+HPLandroid/widget/AutoCompleteTextView$PopupDataSetObserver;-><init>(Landroid/widget/AutoCompleteTextView;)V
+HPLandroid/widget/AutoCompleteTextView$PopupDataSetObserver;-><init>(Landroid/widget/AutoCompleteTextView;Landroid/widget/AutoCompleteTextView$PopupDataSetObserver;)V
+HPLandroid/widget/AutoCompleteTextView;->getAdapter()Landroid/widget/ListAdapter;
+HPLandroid/widget/AutoCompleteTextView;->onAttachedToWindow()V
+HPLandroid/widget/AutoCompleteTextView;->onFocusChanged(ZILandroid/graphics/Rect;)V
+HPLandroid/widget/AutoCompleteTextView;->onKeyDown(ILandroid/view/KeyEvent;)Z
+HPLandroid/widget/AutoCompleteTextView;->onKeyPreIme(ILandroid/view/KeyEvent;)Z
+HPLandroid/widget/AutoCompleteTextView;->onKeyUp(ILandroid/view/KeyEvent;)Z
+HPLandroid/widget/AutoCompleteTextView;->onWindowFocusChanged(Z)V
+HPLandroid/widget/AutoCompleteTextView;->setAdapter(Landroid/widget/ListAdapter;)V
+HPLandroid/widget/AutoCompleteTextView;->setDropDownAnchor(I)V
+HPLandroid/widget/AutoCompleteTextView;->setFrame(IIII)Z
+HPLandroid/widget/AutoCompleteTextView;->setThreshold(I)V
+HPLandroid/widget/BaseAdapter;->getAutofillOptions()[Ljava/lang/CharSequence;
+HPLandroid/widget/BaseAdapter;->isEmpty()Z
+HPLandroid/widget/BaseAdapter;->unregisterDataSetObserver(Landroid/database/DataSetObserver;)V
+HPLandroid/widget/Chronometer$1;-><init>(Landroid/widget/Chronometer;)V
+HPLandroid/widget/Chronometer;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/widget/Chronometer;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HPLandroid/widget/Chronometer;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HPLandroid/widget/Chronometer;->init()V
+HPLandroid/widget/Chronometer;->onDetachedFromWindow()V
+HPLandroid/widget/Chronometer;->onVisibilityChanged(Landroid/view/View;I)V
+HPLandroid/widget/Chronometer;->onWindowVisibilityChanged(I)V
+HPLandroid/widget/Chronometer;->setCountDown(Z)V
+HPLandroid/widget/Chronometer;->setFormat(Ljava/lang/String;)V
+HPLandroid/widget/Chronometer;->stop()V
+HPLandroid/widget/Chronometer;->updateRunning()V
+HPLandroid/widget/Chronometer;->updateText(J)V
+HPLandroid/widget/CompoundButton$SavedState$1;-><init>()V
+HPLandroid/widget/CompoundButton$SavedState;-><init>(Landroid/os/Parcelable;)V
+HPLandroid/widget/CompoundButton$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/widget/CompoundButton;->getButtonDrawable()Landroid/graphics/drawable/Drawable;
+HPLandroid/widget/CompoundButton;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/widget/CompoundButton;->onSaveInstanceState()Landroid/os/Parcelable;
+HPLandroid/widget/CursorAdapter;-><init>(Landroid/content/Context;Landroid/database/Cursor;I)V
+HPLandroid/widget/CursorAdapter;->getCount()I
+HPLandroid/widget/CursorAdapter;->getCursor()Landroid/database/Cursor;
+HPLandroid/widget/CursorAdapter;->getItem(I)Ljava/lang/Object;
+HPLandroid/widget/CursorAdapter;->getItemId(I)J
+HPLandroid/widget/CursorAdapter;->hasStableIds()Z
+HPLandroid/widget/CursorAdapter;->init(Landroid/content/Context;Landroid/database/Cursor;I)V
+HPLandroid/widget/CursorAdapter;->swapCursor(Landroid/database/Cursor;)Landroid/database/Cursor;
+HPLandroid/widget/CursorFilter$CursorFilterClient;->changeCursor(Landroid/database/Cursor;)V
+HPLandroid/widget/CursorFilter$CursorFilterClient;->convertToString(Landroid/database/Cursor;)Ljava/lang/CharSequence;
+HPLandroid/widget/CursorFilter$CursorFilterClient;->getCursor()Landroid/database/Cursor;
+HPLandroid/widget/CursorFilter$CursorFilterClient;->runQueryOnBackgroundThread(Ljava/lang/CharSequence;)Landroid/database/Cursor;
+HPLandroid/widget/DateTimeView$ReceiverInfo$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLandroid/widget/DateTimeView$ReceiverInfo;->addView(Landroid/widget/DateTimeView;)V
+HPLandroid/widget/DateTimeView$ReceiverInfo;->getApplicationContextIfAvailable(Landroid/content/Context;)Landroid/content/Context;
+HPLandroid/widget/DateTimeView$ReceiverInfo;->getSoonestUpdateTime()J
+HPLandroid/widget/DateTimeView$ReceiverInfo;->lambda$-android_widget_DateTimeView$ReceiverInfo_16933(Landroid/widget/DateTimeView;)V
+HPLandroid/widget/DateTimeView$ReceiverInfo;->register(Landroid/content/Context;)V
+HPLandroid/widget/DateTimeView$ReceiverInfo;->removeView(Landroid/widget/DateTimeView;)V
+HPLandroid/widget/DateTimeView$ReceiverInfo;->updateAll()V
+HPLandroid/widget/DateTimeView;->-get0(Landroid/widget/DateTimeView;)J
+HPLandroid/widget/DateTimeView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/widget/DateTimeView;->clearFormatAndUpdate()V
+HPLandroid/widget/DateTimeView;->onAttachedToWindow()V
+HPLandroid/widget/DateTimeView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/widget/DateTimeView;->onDetachedFromWindow()V
+HPLandroid/widget/DateTimeView;->setShowRelativeTime(Z)V
+HPLandroid/widget/DateTimeView;->setTime(J)V
+HPLandroid/widget/DateTimeView;->setVisibility(I)V
+HPLandroid/widget/DateTimeView;->update()V
+HPLandroid/widget/DateTimeView;->updateNowText()V
+HPLandroid/widget/DateTimeView;->updateRelativeTime()V
+HPLandroid/widget/EdgeEffect;->draw(Landroid/graphics/Canvas;)Z
+HPLandroid/widget/EdgeEffect;->onAbsorb(I)V
+HPLandroid/widget/EdgeEffect;->onPull(F)V
+HPLandroid/widget/EdgeEffect;->onPull(FF)V
+HPLandroid/widget/EdgeEffect;->onRelease()V
+HPLandroid/widget/EdgeEffect;->setSize(II)V
+HPLandroid/widget/EdgeEffect;->update()V
+HPLandroid/widget/EditText;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HPLandroid/widget/EditText;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/widget/EditText;->setSelection(II)V
+HPLandroid/widget/Editor$Blink;->cancel()V
+HPLandroid/widget/Editor$EditOperation$1;-><init>()V
+HPLandroid/widget/Editor$EditOperation;->-get0(Landroid/widget/Editor$EditOperation;)Ljava/lang/String;
+HPLandroid/widget/Editor$EditOperation;->-get1(Landroid/widget/Editor$EditOperation;)Ljava/lang/String;
+HPLandroid/widget/Editor$EditOperation;->-wrap0(Landroid/widget/Editor$EditOperation;Landroid/widget/Editor$EditOperation;)Z
+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;->forceMergeWith(Landroid/widget/Editor$EditOperation;)V
+HPLandroid/widget/Editor$EditOperation;->getNewTextEnd()I
+HPLandroid/widget/Editor$EditOperation;->getOldTextEnd()I
+HPLandroid/widget/Editor$EditOperation;->mergeDeleteWith(Landroid/widget/Editor$EditOperation;)Z
+HPLandroid/widget/Editor$EditOperation;->mergeInsertWith(Landroid/widget/Editor$EditOperation;)Z
+HPLandroid/widget/Editor$EditOperation;->mergeReplaceWith(Landroid/widget/Editor$EditOperation;)Z
+HPLandroid/widget/Editor$EditOperation;->mergeWith(Landroid/widget/Editor$EditOperation;)Z
+HPLandroid/widget/Editor$EditOperation;->modifyText(Landroid/text/Editable;IILjava/lang/CharSequence;II)V
+HPLandroid/widget/Editor$EditOperation;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/widget/Editor$InputMethodState;-><init>()V
+HPLandroid/widget/Editor$InsertionPointCursorController;->invalidateHandle()V
+HPLandroid/widget/Editor$PositionListener;->removeSubscriber(Landroid/widget/Editor$TextViewPositionListener;)V
+HPLandroid/widget/Editor$ProcessTextIntentActionsHandler;->createProcessTextIntent()Landroid/content/Intent;
+HPLandroid/widget/Editor$ProcessTextIntentActionsHandler;->initializeAccessibilityActions()V
+HPLandroid/widget/Editor$ProcessTextIntentActionsHandler;->loadSupportedActivities()V
+HPLandroid/widget/Editor$SelectionModifierCursorController;->getMinTouchOffset()I
+HPLandroid/widget/Editor$SelectionModifierCursorController;->onTouchEvent(Landroid/view/MotionEvent;)V
+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;->getLastEdit()Landroid/widget/Editor$EditOperation;
+HPLandroid/widget/Editor$UndoInputFilter;->handleEdit(Ljava/lang/CharSequence;IILandroid/text/Spanned;IIZ)V
+HPLandroid/widget/Editor$UndoInputFilter;->isComposition(Ljava/lang/CharSequence;)Z
+HPLandroid/widget/Editor$UndoInputFilter;->isInTextWatcher()Z
+HPLandroid/widget/Editor$UndoInputFilter;->recordEdit(Landroid/widget/Editor$EditOperation;I)V
+HPLandroid/widget/Editor;->-get14(Landroid/widget/Editor;)Landroid/content/UndoManager;
+HPLandroid/widget/Editor;->-get15(Landroid/widget/Editor;)Landroid/content/UndoOwner;
+HPLandroid/widget/Editor;->-wrap5(Landroid/widget/Editor;)Z
+HPLandroid/widget/Editor;->-wrap9(Ljava/lang/CharSequence;II)Z
+HPLandroid/widget/Editor;->beginBatchEdit()V
+HPLandroid/widget/Editor;->createInputMethodStateIfNeeded()V
+HPLandroid/widget/Editor;->discardTextDisplayLists()V
+HPLandroid/widget/Editor;->downgradeEasyCorrectionSpans()V
+HPLandroid/widget/Editor;->endBatchEdit()V
+HPLandroid/widget/Editor;->finishBatchEdit(Landroid/widget/Editor$InputMethodState;)V
+HPLandroid/widget/Editor;->hasSelectionController()Z
+HPLandroid/widget/Editor;->isValidRange(Ljava/lang/CharSequence;II)Z
+HPLandroid/widget/Editor;->onDetachedFromWindow()V
+HPLandroid/widget/Editor;->onLocaleChanged()V
+HPLandroid/widget/Editor;->onTouchEvent(Landroid/view/MotionEvent;)V
+HPLandroid/widget/Editor;->reportExtractedText()Z
+HPLandroid/widget/Editor;->shouldFilterOutTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/widget/Editor;->suspendBlink()V
+HPLandroid/widget/Editor;->updateFloatingToolbarVisibility(Landroid/view/MotionEvent;)V
+HPLandroid/widget/Editor;->updateTapState(Landroid/view/MotionEvent;)V
+HPLandroid/widget/FastScroller;->getPosFromItemCount(III)F
+HPLandroid/widget/FastScroller;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/widget/FastScroller;->onSizeChanged(IIII)V
+HPLandroid/widget/FastScroller;->setThumbPos(F)V
+HPLandroid/widget/Filter;->performFiltering(Ljava/lang/CharSequence;)Landroid/widget/Filter$FilterResults;
+HPLandroid/widget/Filter;->publishResults(Ljava/lang/CharSequence;Landroid/widget/Filter$FilterResults;)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$5;->getAlignmentValue(Landroid/view/View;II)I
+HPLandroid/widget/GridLayout$5;->getGravityOffset(Landroid/view/View;I)I
+HPLandroid/widget/GridLayout$6$1;-><init>(Landroid/widget/GridLayout$6;)V
+HPLandroid/widget/GridLayout$6$1;->getOffset(Landroid/widget/GridLayout;Landroid/view/View;Landroid/widget/GridLayout$Alignment;IZ)I
+HPLandroid/widget/GridLayout$6$1;->include(II)V
+HPLandroid/widget/GridLayout$6$1;->reset()V
+HPLandroid/widget/GridLayout$6$1;->size(Z)I
+HPLandroid/widget/GridLayout$6;->getAlignmentValue(Landroid/view/View;II)I
+HPLandroid/widget/GridLayout$6;->getBounds()Landroid/widget/GridLayout$Bounds;
+HPLandroid/widget/GridLayout$6;->getGravityOffset(Landroid/view/View;I)I
+HPLandroid/widget/GridLayout$7;->getAlignmentValue(Landroid/view/View;II)I
+HPLandroid/widget/GridLayout$7;->getGravityOffset(Landroid/view/View;I)I
+HPLandroid/widget/GridLayout$7;->getSizeInCell(Landroid/view/View;II)I
+HPLandroid/widget/GridLayout$Alignment;->getBounds()Landroid/widget/GridLayout$Bounds;
+HPLandroid/widget/GridLayout$Alignment;->getSizeInCell(Landroid/view/View;II)I
+HPLandroid/widget/GridLayout$Arc;-><init>(Landroid/widget/GridLayout$Interval;Landroid/widget/GridLayout$MutableInt;)V
+HPLandroid/widget/GridLayout$Assoc;-><init>(Ljava/lang/Class;Ljava/lang/Class;)V
+HPLandroid/widget/GridLayout$Assoc;->of(Ljava/lang/Class;Ljava/lang/Class;)Landroid/widget/GridLayout$Assoc;
+HPLandroid/widget/GridLayout$Assoc;->pack()Landroid/widget/GridLayout$PackedMap;
+HPLandroid/widget/GridLayout$Assoc;->put(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLandroid/widget/GridLayout$Axis$1;-><init>(Landroid/widget/GridLayout$Axis;[Landroid/widget/GridLayout$Arc;)V
+HPLandroid/widget/GridLayout$Axis$1;->sort()[Landroid/widget/GridLayout$Arc;
+HPLandroid/widget/GridLayout$Axis$1;->walk(I)V
+HPLandroid/widget/GridLayout$Axis;->addComponentSizes(Ljava/util/List;Landroid/widget/GridLayout$PackedMap;)V
+HPLandroid/widget/GridLayout$Axis;->calculateMaxIndex()I
+HPLandroid/widget/GridLayout$Axis;->calculateTotalWeight()F
+HPLandroid/widget/GridLayout$Axis;->computeArcs()V
+HPLandroid/widget/GridLayout$Axis;->computeGroupBounds()V
+HPLandroid/widget/GridLayout$Axis;->computeHasWeights()Z
+HPLandroid/widget/GridLayout$Axis;->computeLinks(Landroid/widget/GridLayout$PackedMap;Z)V
+HPLandroid/widget/GridLayout$Axis;->computeLocations([I)V
+HPLandroid/widget/GridLayout$Axis;->createArcs()[Landroid/widget/GridLayout$Arc;
+HPLandroid/widget/GridLayout$Axis;->createGroupBounds()Landroid/widget/GridLayout$PackedMap;
+HPLandroid/widget/GridLayout$Axis;->createLinks(Z)Landroid/widget/GridLayout$PackedMap;
+HPLandroid/widget/GridLayout$Axis;->getArcs()[Landroid/widget/GridLayout$Arc;
+HPLandroid/widget/GridLayout$Axis;->getBackwardLinks()Landroid/widget/GridLayout$PackedMap;
+HPLandroid/widget/GridLayout$Axis;->getCount()I
+HPLandroid/widget/GridLayout$Axis;->getDeltas()[I
+HPLandroid/widget/GridLayout$Axis;->getForwardLinks()Landroid/widget/GridLayout$PackedMap;
+HPLandroid/widget/GridLayout$Axis;->getGroupBounds()Landroid/widget/GridLayout$PackedMap;
+HPLandroid/widget/GridLayout$Axis;->getLocations()[I
+HPLandroid/widget/GridLayout$Axis;->getMaxIndex()I
+HPLandroid/widget/GridLayout$Axis;->getMeasure(I)I
+HPLandroid/widget/GridLayout$Axis;->getMeasure(II)I
+HPLandroid/widget/GridLayout$Axis;->groupArcsByFirstVertex([Landroid/widget/GridLayout$Arc;)[[Landroid/widget/GridLayout$Arc;
+HPLandroid/widget/GridLayout$Axis;->hasWeights()Z
+HPLandroid/widget/GridLayout$Axis;->include(Ljava/util/List;Landroid/widget/GridLayout$Interval;Landroid/widget/GridLayout$MutableInt;)V
+HPLandroid/widget/GridLayout$Axis;->include(Ljava/util/List;Landroid/widget/GridLayout$Interval;Landroid/widget/GridLayout$MutableInt;Z)V
+HPLandroid/widget/GridLayout$Axis;->init([I)V
+HPLandroid/widget/GridLayout$Axis;->layout(I)V
+HPLandroid/widget/GridLayout$Axis;->relax([ILandroid/widget/GridLayout$Arc;)Z
+HPLandroid/widget/GridLayout$Axis;->setParentConstraints(II)V
+HPLandroid/widget/GridLayout$Axis;->shareOutDelta(IF)V
+HPLandroid/widget/GridLayout$Axis;->size([I)I
+HPLandroid/widget/GridLayout$Axis;->solve([I)Z
+HPLandroid/widget/GridLayout$Axis;->solve([Landroid/widget/GridLayout$Arc;[I)Z
+HPLandroid/widget/GridLayout$Axis;->solve([Landroid/widget/GridLayout$Arc;[IZ)Z
+HPLandroid/widget/GridLayout$Axis;->solveAndDistributeSpace([I)V
+HPLandroid/widget/GridLayout$Axis;->topologicalSort(Ljava/util/List;)[Landroid/widget/GridLayout$Arc;
+HPLandroid/widget/GridLayout$Axis;->topologicalSort([Landroid/widget/GridLayout$Arc;)[Landroid/widget/GridLayout$Arc;
+HPLandroid/widget/GridLayout$Bounds;-><init>()V
+HPLandroid/widget/GridLayout$Bounds;-><init>(Landroid/widget/GridLayout$Bounds;)V
+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;->include(Landroid/widget/GridLayout;Landroid/view/View;Landroid/widget/GridLayout$Spec;Landroid/widget/GridLayout$Axis;I)V
+HPLandroid/widget/GridLayout$Bounds;->reset()V
+HPLandroid/widget/GridLayout$Bounds;->size(Z)I
+HPLandroid/widget/GridLayout$Interval;->equals(Ljava/lang/Object;)Z
+HPLandroid/widget/GridLayout$Interval;->hashCode()I
+HPLandroid/widget/GridLayout$Interval;->inverse()Landroid/widget/GridLayout$Interval;
+HPLandroid/widget/GridLayout$LayoutParams;->hashCode()I
+HPLandroid/widget/GridLayout$LayoutParams;->setColumnSpecSpan(Landroid/widget/GridLayout$Interval;)V
+HPLandroid/widget/GridLayout$LayoutParams;->setRowSpecSpan(Landroid/widget/GridLayout$Interval;)V
+HPLandroid/widget/GridLayout$MutableInt;-><init>()V
+HPLandroid/widget/GridLayout$MutableInt;->reset()V
+HPLandroid/widget/GridLayout$PackedMap;-><init>([Ljava/lang/Object;[Ljava/lang/Object;)V
+HPLandroid/widget/GridLayout$PackedMap;-><init>([Ljava/lang/Object;[Ljava/lang/Object;Landroid/widget/GridLayout$PackedMap;)V
+HPLandroid/widget/GridLayout$PackedMap;->compact([Ljava/lang/Object;[I)[Ljava/lang/Object;
+HPLandroid/widget/GridLayout$PackedMap;->createIndex([Ljava/lang/Object;)[I
+HPLandroid/widget/GridLayout$PackedMap;->getValue(I)Ljava/lang/Object;
+HPLandroid/widget/GridLayout$Spec;->-wrap0(Landroid/widget/GridLayout$Spec;Z)Landroid/widget/GridLayout$Alignment;
+HPLandroid/widget/GridLayout$Spec;->copyWriteSpan(Landroid/widget/GridLayout$Interval;)Landroid/widget/GridLayout$Spec;
+HPLandroid/widget/GridLayout$Spec;->equals(Ljava/lang/Object;)Z
+HPLandroid/widget/GridLayout$Spec;->getAbsoluteAlignment(Z)Landroid/widget/GridLayout$Alignment;
+HPLandroid/widget/GridLayout$Spec;->getFlexibility()I
+HPLandroid/widget/GridLayout$Spec;->hashCode()I
+HPLandroid/widget/GridLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/widget/GridLayout;->adjust(II)I
+HPLandroid/widget/GridLayout;->append([Ljava/lang/Object;[Ljava/lang/Object;)[Ljava/lang/Object;
+HPLandroid/widget/GridLayout;->canStretch(I)Z
+HPLandroid/widget/GridLayout;->clip(Landroid/widget/GridLayout$Interval;ZI)I
+HPLandroid/widget/GridLayout;->computeLayoutParamsHashCode()I
+HPLandroid/widget/GridLayout;->consistencyCheck()V
+HPLandroid/widget/GridLayout;->fits([IIII)Z
+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;->getMeasurementIncludingMargin(Landroid/view/View;Z)I
+HPLandroid/widget/GridLayout;->getTotalMargin(Landroid/view/View;Z)I
+HPLandroid/widget/GridLayout;->max2([II)I
+HPLandroid/widget/GridLayout;->measureChildWithMargins2(Landroid/view/View;IIII)V
+HPLandroid/widget/GridLayout;->measureChildrenWithMargins(IIZ)V
+HPLandroid/widget/GridLayout;->onChildVisibilityChanged(Landroid/view/View;II)V
+HPLandroid/widget/GridLayout;->onLayout(ZIIII)V
+HPLandroid/widget/GridLayout;->onMeasure(II)V
+HPLandroid/widget/GridLayout;->onSetLayoutParams(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HPLandroid/widget/GridLayout;->procrusteanFill([IIII)V
+HPLandroid/widget/GridLayout;->setCellGroup(Landroid/widget/GridLayout$LayoutParams;IIII)V
+HPLandroid/widget/GridLayout;->validateLayoutParams()V
+HPLandroid/widget/GridView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/widget/GridView;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HPLandroid/widget/GridView;->setGravity(I)V
+HPLandroid/widget/HeaderViewListAdapter;->isEmpty()Z
+HPLandroid/widget/HeaderViewListAdapter;->removeHeader(Landroid/view/View;)Z
+HPLandroid/widget/HeaderViewListAdapter;->unregisterDataSetObserver(Landroid/database/DataSetObserver;)V
+HPLandroid/widget/HorizontalScrollView$SavedState;-><init>(Landroid/os/Parcelable;)V
+HPLandroid/widget/HorizontalScrollView$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/widget/HorizontalScrollView;->computeHorizontalScrollRange()I
+HPLandroid/widget/HorizontalScrollView;->getScrollRange()I
+HPLandroid/widget/HorizontalScrollView;->inChild(II)Z
+HPLandroid/widget/HorizontalScrollView;->initOrResetVelocityTracker()V
+HPLandroid/widget/HorizontalScrollView;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/widget/HorizontalScrollView;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/widget/HorizontalScrollView;->onOverScrolled(IIZZ)V
+HPLandroid/widget/HorizontalScrollView;->onSaveInstanceState()Landroid/os/Parcelable;
+HPLandroid/widget/HorizontalScrollView;->shouldDelayChildPressedState()Z
+HPLandroid/widget/HorizontalScrollView;->smoothScrollBy(II)V
+HPLandroid/widget/HorizontalScrollView;->smoothScrollTo(II)V
+HPLandroid/widget/ImageView$ImageDrawableCallback;-><init>(Landroid/widget/ImageView;Landroid/graphics/drawable/Drawable;Landroid/net/Uri;I)V
+HPLandroid/widget/ImageView$ImageDrawableCallback;->run()V
+HPLandroid/widget/ImageView$ScaleType;->values()[Landroid/widget/ImageView$ScaleType;
+HPLandroid/widget/ImageView;->-set0(Landroid/widget/ImageView;I)I
+HPLandroid/widget/ImageView;->-set1(Landroid/widget/ImageView;Landroid/net/Uri;)Landroid/net/Uri;
+HPLandroid/widget/ImageView;->clearColorFilter()V
+HPLandroid/widget/ImageView;->getImageAlpha()I
+HPLandroid/widget/ImageView;->getImageMatrix()Landroid/graphics/Matrix;
+HPLandroid/widget/ImageView;->getScaleType()Landroid/widget/ImageView$ScaleType;
+HPLandroid/widget/ImageView;->onPopulateAccessibilityEventInternal(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLandroid/widget/ImageView;->setBaselineAlignBottom(Z)V
+HPLandroid/widget/ImageView;->setCropToPadding(Z)V
+HPLandroid/widget/ImageView;->setImageIconAsync(Landroid/graphics/drawable/Icon;)Ljava/lang/Runnable;
+HPLandroid/widget/LinearLayout;->drawDividersHorizontal(Landroid/graphics/Canvas;)V
+HPLandroid/widget/LinearLayout;->drawDividersVertical(Landroid/graphics/Canvas;)V
+HPLandroid/widget/LinearLayout;->drawVerticalDivider(Landroid/graphics/Canvas;I)V
+HPLandroid/widget/LinearLayout;->getDividerDrawable()Landroid/graphics/drawable/Drawable;
+HPLandroid/widget/LinearLayout;->getGravity()I
+HPLandroid/widget/LinearLayout;->getShowDividers()I
+HPLandroid/widget/LinearLayout;->isShowingDividers()Z
+HPLandroid/widget/LinearLayout;->setShowDividers(I)V
+HPLandroid/widget/LinearLayout;->shouldDelayChildPressedState()Z
+HPLandroid/widget/ListPopupWindow$PopupDataSetObserver;-><init>(Landroid/widget/ListPopupWindow;)V
+HPLandroid/widget/ListPopupWindow$PopupDataSetObserver;-><init>(Landroid/widget/ListPopupWindow;Landroid/widget/ListPopupWindow$PopupDataSetObserver;)V
+HPLandroid/widget/ListPopupWindow;-><init>(Landroid/content/Context;)V
+HPLandroid/widget/ListPopupWindow;->onKeyDown(ILandroid/view/KeyEvent;)Z
+HPLandroid/widget/ListPopupWindow;->onKeyUp(ILandroid/view/KeyEvent;)Z
+HPLandroid/widget/ListPopupWindow;->setAdapter(Landroid/widget/ListAdapter;)V
+HPLandroid/widget/ListPopupWindow;->setAnchorView(Landroid/view/View;)V
+HPLandroid/widget/ListPopupWindow;->setOnDismissListener(Landroid/widget/PopupWindow$OnDismissListener;)V
+HPLandroid/widget/ListView;->findMotionRow(I)I
+HPLandroid/widget/ListView;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HPLandroid/widget/ListView;->onDetachedFromWindow()V
+HPLandroid/widget/ListView;->onInitializeAccessibilityNodeInfoForItem(Landroid/view/View;ILandroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/widget/ListView;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/widget/ListView;->removeFixedViewInfo(Landroid/view/View;Ljava/util/ArrayList;)V
+HPLandroid/widget/ListView;->removeHeaderView(Landroid/view/View;)Z
+HPLandroid/widget/ListView;->setDividerHeight(I)V
+HPLandroid/widget/ListView;->setHeaderDividersEnabled(Z)V
+HPLandroid/widget/MultiAutoCompleteTextView$Tokenizer;->findTokenEnd(Ljava/lang/CharSequence;I)I
+HPLandroid/widget/MultiAutoCompleteTextView$Tokenizer;->findTokenStart(Ljava/lang/CharSequence;I)I
+HPLandroid/widget/MultiAutoCompleteTextView$Tokenizer;->terminateToken(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HPLandroid/widget/MultiAutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/widget/MultiAutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HPLandroid/widget/MultiAutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HPLandroid/widget/MultiAutoCompleteTextView;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HPLandroid/widget/MultiAutoCompleteTextView;->setTokenizer(Landroid/widget/MultiAutoCompleteTextView$Tokenizer;)V
+HPLandroid/widget/OverScroller$SplineOverScroller;->-get0(Landroid/widget/OverScroller$SplineOverScroller;)F
+HPLandroid/widget/OverScroller$SplineOverScroller;->-get1(Landroid/widget/OverScroller$SplineOverScroller;)I
+HPLandroid/widget/OverScroller$SplineOverScroller;->-get2(Landroid/widget/OverScroller$SplineOverScroller;)I
+HPLandroid/widget/OverScroller$SplineOverScroller;->-get3(Landroid/widget/OverScroller$SplineOverScroller;)I
+HPLandroid/widget/OverScroller$SplineOverScroller;->-get6(Landroid/widget/OverScroller$SplineOverScroller;)J
+HPLandroid/widget/OverScroller$SplineOverScroller;->-set0(Landroid/widget/OverScroller$SplineOverScroller;Z)Z
+HPLandroid/widget/OverScroller$SplineOverScroller;->continueWhenFinished()Z
+HPLandroid/widget/OverScroller$SplineOverScroller;->fling(IIIII)V
+HPLandroid/widget/OverScroller$SplineOverScroller;->getSplineDeceleration(I)D
+HPLandroid/widget/OverScroller$SplineOverScroller;->getSplineFlingDistance(I)D
+HPLandroid/widget/OverScroller$SplineOverScroller;->getSplineFlingDuration(I)I
+HPLandroid/widget/OverScroller$SplineOverScroller;->springback(III)Z
+HPLandroid/widget/OverScroller$SplineOverScroller;->startScroll(III)V
+HPLandroid/widget/OverScroller$SplineOverScroller;->update()Z
+HPLandroid/widget/OverScroller$SplineOverScroller;->updateScroll(F)V
+HPLandroid/widget/OverScroller;->fling(IIIIIIII)V
+HPLandroid/widget/OverScroller;->fling(IIIIIIIIII)V
+HPLandroid/widget/OverScroller;->forceFinished(Z)V
+HPLandroid/widget/OverScroller;->getCurrVelocity()F
+HPLandroid/widget/OverScroller;->getCurrX()I
+HPLandroid/widget/OverScroller;->getCurrY()I
+HPLandroid/widget/OverScroller;->getDuration()I
+HPLandroid/widget/OverScroller;->getFinalX()I
+HPLandroid/widget/OverScroller;->getFinalY()I
+HPLandroid/widget/OverScroller;->springBack(IIIIII)Z
+HPLandroid/widget/OverScroller;->startScroll(IIII)V
+HPLandroid/widget/OverScroller;->startScroll(IIIII)V
+HPLandroid/widget/PopupMenu;-><init>(Landroid/content/Context;Landroid/view/View;)V
+HPLandroid/widget/PopupWindow$PopupBackgroundView;-><init>(Landroid/widget/PopupWindow;Landroid/content/Context;)V
+HPLandroid/widget/PopupWindow$PopupBackgroundView;->onCreateDrawableState(I)[I
+HPLandroid/widget/PopupWindow$PopupDecorView$1;-><init>(Landroid/widget/PopupWindow$PopupDecorView;)V
+HPLandroid/widget/PopupWindow$PopupDecorView;-><init>(Landroid/widget/PopupWindow;Landroid/content/Context;)V
+HPLandroid/widget/PopupWindow;->-get1(Landroid/widget/PopupWindow;)Z
+HPLandroid/widget/PopupWindow;-><init>(Landroid/content/Context;)V
+HPLandroid/widget/PopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/widget/PopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HPLandroid/widget/PopupWindow;->computeAnimationResource()I
+HPLandroid/widget/PopupWindow;->computeFlags(I)I
+HPLandroid/widget/PopupWindow;->computeGravity()I
+HPLandroid/widget/PopupWindow;->createBackgroundView(Landroid/view/View;)Landroid/widget/PopupWindow$PopupBackgroundView;
+HPLandroid/widget/PopupWindow;->createDecorView(Landroid/view/View;)Landroid/widget/PopupWindow$PopupDecorView;
+HPLandroid/widget/PopupWindow;->createPopupLayoutParams(Landroid/os/IBinder;)Landroid/view/WindowManager$LayoutParams;
+HPLandroid/widget/PopupWindow;->detachFromAnchor()V
+HPLandroid/widget/PopupWindow;->invokePopup(Landroid/view/WindowManager$LayoutParams;)V
+HPLandroid/widget/PopupWindow;->isSplitTouchEnabled()Z
+HPLandroid/widget/PopupWindow;->preparePopup(Landroid/view/WindowManager$LayoutParams;)V
+HPLandroid/widget/PopupWindow;->setAnimationStyle(I)V
+HPLandroid/widget/PopupWindow;->setFocusable(Z)V
+HPLandroid/widget/PopupWindow;->setHeight(I)V
+HPLandroid/widget/PopupWindow;->setLayoutDirectionFromAnchor()V
+HPLandroid/widget/PopupWindow;->setOnDismissListener(Landroid/widget/PopupWindow$OnDismissListener;)V
+HPLandroid/widget/PopupWindow;->setOutsideTouchable(Z)V
+HPLandroid/widget/PopupWindow;->setTouchable(Z)V
+HPLandroid/widget/PopupWindow;->setWidth(I)V
+HPLandroid/widget/PopupWindow;->showAtLocation(Landroid/os/IBinder;III)V
+HPLandroid/widget/PopupWindow;->showAtLocation(Landroid/view/View;III)V
+HPLandroid/widget/ProgressBar$AccessibilityEventSender;-><init>(Landroid/widget/ProgressBar;)V
+HPLandroid/widget/ProgressBar$AccessibilityEventSender;-><init>(Landroid/widget/ProgressBar;Landroid/widget/ProgressBar$AccessibilityEventSender;)V
+HPLandroid/widget/ProgressBar$AccessibilityEventSender;->run()V
+HPLandroid/widget/ProgressBar$RefreshData;-><init>()V
+HPLandroid/widget/ProgressBar$RefreshData;->obtain(IIZZ)Landroid/widget/ProgressBar$RefreshData;
+HPLandroid/widget/ProgressBar$RefreshData;->recycle()V
+HPLandroid/widget/ProgressBar$RefreshProgressRunnable;-><init>(Landroid/widget/ProgressBar;)V
+HPLandroid/widget/ProgressBar$RefreshProgressRunnable;-><init>(Landroid/widget/ProgressBar;Landroid/widget/ProgressBar$RefreshProgressRunnable;)V
+HPLandroid/widget/ProgressBar$RefreshProgressRunnable;->run()V
+HPLandroid/widget/ProgressBar$SavedState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/widget/ProgressBar$SavedState;
+HPLandroid/widget/ProgressBar$SavedState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLandroid/widget/ProgressBar$SavedState;-><init>(Landroid/os/Parcel;)V
+HPLandroid/widget/ProgressBar$SavedState;-><init>(Landroid/os/Parcel;Landroid/widget/ProgressBar$SavedState;)V
+HPLandroid/widget/ProgressBar;->-get0(Landroid/widget/ProgressBar;)Ljava/util/ArrayList;
+HPLandroid/widget/ProgressBar;->-set0(Landroid/widget/ProgressBar;Z)Z
+HPLandroid/widget/ProgressBar;->-wrap0(Landroid/widget/ProgressBar;IIZZZ)V
+HPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;)V
+HPLandroid/widget/ProgressBar;->applyProgressBackgroundTint()V
+HPLandroid/widget/ProgressBar;->drawableHotspotChanged(FF)V
+HPLandroid/widget/ProgressBar;->onDetachedFromWindow()V
+HPLandroid/widget/ProgressBar;->onInitializeAccessibilityEventInternal(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLandroid/widget/ProgressBar;->onRestoreInstanceState(Landroid/os/Parcelable;)V
+HPLandroid/widget/ProgressBar;->scheduleAccessibilityEventSender()V
+HPLandroid/widget/ProgressBar;->setIndeterminateTintList(Landroid/content/res/ColorStateList;)V
+HPLandroid/widget/ProgressBar;->setProgressBackgroundTintList(Landroid/content/res/ColorStateList;)V
+HPLandroid/widget/QuickContactBadge$QueryHandler;-><init>(Landroid/widget/QuickContactBadge;Landroid/content/ContentResolver;)V
+HPLandroid/widget/QuickContactBadge;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/widget/QuickContactBadge;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HPLandroid/widget/QuickContactBadge;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HPLandroid/widget/QuickContactBadge;->assignContactUri(Landroid/net/Uri;)V
+HPLandroid/widget/QuickContactBadge;->drawableStateChanged()V
+HPLandroid/widget/QuickContactBadge;->isAssigned()Z
+HPLandroid/widget/QuickContactBadge;->onAttachedToWindow()V
+HPLandroid/widget/QuickContactBadge;->onContactUriChanged()V
+HPLandroid/widget/QuickContactBadge;->setOverlay(Landroid/graphics/drawable/Drawable;)V
+HPLandroid/widget/QuickContactBadge;->setPrioritizedMimeType(Ljava/lang/String;)V
+HPLandroid/widget/RadioGroup;->getAutofillType()I
+HPLandroid/widget/RelativeLayout$TopToBottomLeftToRightComparator;-><init>(Landroid/widget/RelativeLayout;)V
+HPLandroid/widget/RelativeLayout$TopToBottomLeftToRightComparator;-><init>(Landroid/widget/RelativeLayout;Landroid/widget/RelativeLayout$TopToBottomLeftToRightComparator;)V
+HPLandroid/widget/RelativeLayout$TopToBottomLeftToRightComparator;->compare(Landroid/view/View;Landroid/view/View;)I
+HPLandroid/widget/RelativeLayout$TopToBottomLeftToRightComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLandroid/widget/RelativeLayout;->dispatchPopulateAccessibilityEventInternal(Landroid/view/accessibility/AccessibilityEvent;)Z
+HPLandroid/widget/RelativeLayout;->shouldDelayChildPressedState()Z
+HPLandroid/widget/RemoteViews$1;->initialValue()Ljava/lang/Object;
+HPLandroid/widget/RemoteViews$1;->initialValue()[Ljava/lang/Object;
+HPLandroid/widget/RemoteViews$2;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
+HPLandroid/widget/RemoteViews$3;->createFromParcel(Landroid/os/Parcel;)Landroid/widget/RemoteViews;
+HPLandroid/widget/RemoteViews$3;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+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;->-get1(Landroid/widget/RemoteViews$AsyncApplyTask;)Landroid/view/View;
+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$AsyncApplyTask;)V
+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
+HPLandroid/widget/RemoteViews$BitmapCache;-><init>(Landroid/os/Parcel;)V
+HPLandroid/widget/RemoteViews$BitmapCache;->assimilate(Landroid/widget/RemoteViews$BitmapCache;)V
+HPLandroid/widget/RemoteViews$BitmapCache;->clone()Landroid/widget/RemoteViews$BitmapCache;
+HPLandroid/widget/RemoteViews$LayoutParamAction;-><init>(Landroid/os/Parcel;)V
+HPLandroid/widget/RemoteViews$LayoutParamAction;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
+HPLandroid/widget/RemoteViews$LayoutParamAction;->resolveDimenPixelOffset(Landroid/view/View;I)I
+HPLandroid/widget/RemoteViews$MemoryUsageCounter;->getMemoryUsage()I
+HPLandroid/widget/RemoteViews$MemoryUsageCounter;->increment(I)V
+HPLandroid/widget/RemoteViews$MutablePair;->equals(Ljava/lang/Object;)Z
+HPLandroid/widget/RemoteViews$MutablePair;->hashCode()I
+HPLandroid/widget/RemoteViews$OnViewAppliedListener;->onError(Ljava/lang/Exception;)V
+HPLandroid/widget/RemoteViews$OnViewAppliedListener;->onViewApplied(Landroid/view/View;)V
+HPLandroid/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
+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;
+HPLandroid/widget/RemoteViews$RemoteViewsContextWrapper;-><init>(Landroid/content/Context;Landroid/content/Context;)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;-><init>(Ljava/lang/Runnable;)V
+HPLandroid/widget/RemoteViews$RunnableAction;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
+HPLandroid/widget/RemoteViews$SetDrawableParameters;-><init>(Landroid/widget/RemoteViews;Landroid/os/Parcel;)V
+HPLandroid/widget/RemoteViews$SetDrawableParameters;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
+HPLandroid/widget/RemoteViews$SetOnClickPendingIntent$1;-><init>(Landroid/widget/RemoteViews$SetOnClickPendingIntent;Landroid/widget/RemoteViews$OnClickHandler;)V
+HPLandroid/widget/RemoteViews$SetOnClickPendingIntent;-><init>(Landroid/widget/RemoteViews;ILandroid/app/PendingIntent;)V
+HPLandroid/widget/RemoteViews$SetOnClickPendingIntent;-><init>(Landroid/widget/RemoteViews;Landroid/os/Parcel;)V
+HPLandroid/widget/RemoteViews$SetOnClickPendingIntent;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
+HPLandroid/widget/RemoteViews$SetOnClickPendingIntent;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/widget/RemoteViews$TextViewSizeAction;-><init>(Landroid/widget/RemoteViews;IIF)V
+HPLandroid/widget/RemoteViews$TextViewSizeAction;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/widget/RemoteViews$ViewGroupActionAdd$1;-><init>(Landroid/widget/RemoteViews$ViewGroupActionAdd;Landroid/widget/RemoteViews$AsyncApplyTask;Landroid/widget/RemoteViews$ViewTree;Landroid/view/ViewGroup;)V
+HPLandroid/widget/RemoteViews$ViewGroupActionAdd$1;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
+HPLandroid/widget/RemoteViews$ViewGroupActionAdd;->-get0(Landroid/widget/RemoteViews$ViewGroupActionAdd;)I
+HPLandroid/widget/RemoteViews$ViewGroupActionAdd;-><init>(Landroid/widget/RemoteViews;ILandroid/widget/RemoteViews;)V
+HPLandroid/widget/RemoteViews$ViewGroupActionAdd;-><init>(Landroid/widget/RemoteViews;ILandroid/widget/RemoteViews;I)V
+HPLandroid/widget/RemoteViews$ViewGroupActionAdd;-><init>(Landroid/widget/RemoteViews;Landroid/os/Parcel;Landroid/widget/RemoteViews$BitmapCache;Landroid/content/pm/ApplicationInfo;I)V
+HPLandroid/widget/RemoteViews$ViewGroupActionAdd;->hasSameAppInfo(Landroid/content/pm/ApplicationInfo;)Z
+HPLandroid/widget/RemoteViews$ViewGroupActionAdd;->initActionAsync(Landroid/widget/RemoteViews$ViewTree;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)Landroid/widget/RemoteViews$Action;
+HPLandroid/widget/RemoteViews$ViewGroupActionAdd;->updateMemoryUsageEstimate(Landroid/widget/RemoteViews$MemoryUsageCounter;)V
+HPLandroid/widget/RemoteViews$ViewGroupActionAdd;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/widget/RemoteViews$ViewGroupActionRemove$1;-><init>(Landroid/widget/RemoteViews$ViewGroupActionRemove;Landroid/view/ViewGroup;)V
+HPLandroid/widget/RemoteViews$ViewGroupActionRemove$1;->apply(Landroid/view/View;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)V
+HPLandroid/widget/RemoteViews$ViewGroupActionRemove;->-get0(Landroid/widget/RemoteViews$ViewGroupActionRemove;)I
+HPLandroid/widget/RemoteViews$ViewGroupActionRemove;-><init>(Landroid/widget/RemoteViews;I)V
+HPLandroid/widget/RemoteViews$ViewGroupActionRemove;-><init>(Landroid/widget/RemoteViews;II)V
+HPLandroid/widget/RemoteViews$ViewGroupActionRemove;-><init>(Landroid/widget/RemoteViews;Landroid/os/Parcel;)V
+HPLandroid/widget/RemoteViews$ViewGroupActionRemove;->initActionAsync(Landroid/widget/RemoteViews$ViewTree;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnClickHandler;)Landroid/widget/RemoteViews$Action;
+HPLandroid/widget/RemoteViews$ViewGroupActionRemove;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/widget/RemoteViews$ViewPaddingAction;-><init>(Landroid/widget/RemoteViews;IIIII)V
+HPLandroid/widget/RemoteViews$ViewPaddingAction;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/widget/RemoteViews$ViewTree;->-get0(Landroid/widget/RemoteViews$ViewTree;)Landroid/view/View;
+HPLandroid/widget/RemoteViews$ViewTree;->-set0(Landroid/widget/RemoteViews$ViewTree;Ljava/util/ArrayList;)Ljava/util/ArrayList;
+HPLandroid/widget/RemoteViews$ViewTree;-><init>(Landroid/view/View;)V
+HPLandroid/widget/RemoteViews$ViewTree;-><init>(Landroid/view/View;Landroid/widget/RemoteViews$ViewTree;)V
+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
+HPLandroid/widget/RemoteViews;->-get0()Landroid/widget/RemoteViews$Action;
+HPLandroid/widget/RemoteViews;->-get2(Landroid/widget/RemoteViews;)Ljava/util/ArrayList;
+HPLandroid/widget/RemoteViews;->-get3(Landroid/widget/RemoteViews;)Landroid/content/pm/ApplicationInfo;
+HPLandroid/widget/RemoteViews;->-get5(Landroid/widget/RemoteViews;)Z
+HPLandroid/widget/RemoteViews;->-wrap1(Landroid/widget/RemoteViews;Landroid/content/Context;Landroid/widget/RemoteViews;Landroid/view/ViewGroup;)Landroid/view/View;
+HPLandroid/widget/RemoteViews;->-wrap2(Landroid/widget/RemoteViews;Landroid/content/Context;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnViewAppliedListener;Landroid/widget/RemoteViews$OnClickHandler;)Landroid/widget/RemoteViews$AsyncApplyTask;
+HPLandroid/widget/RemoteViews;->-wrap3(Ljava/lang/Object;)[Ljava/lang/Object;
+HPLandroid/widget/RemoteViews;->-wrap4(Landroid/widget/RemoteViews;Ljava/lang/reflect/Method;)Ljava/lang/reflect/Method;
+HPLandroid/widget/RemoteViews;->-wrap5(Landroid/widget/RemoteViews;Landroid/view/View;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/reflect/Method;
+HPLandroid/widget/RemoteViews;->-wrap6(Landroid/widget/RemoteViews;Landroid/widget/RemoteViews;)V
+HPLandroid/widget/RemoteViews;->-wrap7(Landroid/content/Context;Landroid/widget/RemoteViews$OnClickHandler;)V
+HPLandroid/widget/RemoteViews;-><init>(Landroid/os/Parcel;)V
+HPLandroid/widget/RemoteViews;-><init>(Landroid/os/Parcel;Landroid/widget/RemoteViews$BitmapCache;Landroid/content/pm/ApplicationInfo;I)V
+HPLandroid/widget/RemoteViews;-><init>(Landroid/os/Parcel;Landroid/widget/RemoteViews$BitmapCache;Landroid/content/pm/ApplicationInfo;ILandroid/widget/RemoteViews;)V
+HPLandroid/widget/RemoteViews;-><init>(Ljava/lang/String;I)V
+HPLandroid/widget/RemoteViews;->addView(ILandroid/widget/RemoteViews;)V
+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;->clone()Landroid/widget/RemoteViews;
+HPLandroid/widget/RemoteViews;->configureRemoteViewsAsChild(Landroid/widget/RemoteViews;)V
+HPLandroid/widget/RemoteViews;->estimateMemoryUsage()I
+HPLandroid/widget/RemoteViews;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
+HPLandroid/widget/RemoteViews;->getAsyncApplyTask(Landroid/content/Context;Landroid/view/ViewGroup;Landroid/widget/RemoteViews$OnViewAppliedListener;Landroid/widget/RemoteViews$OnClickHandler;)Landroid/widget/RemoteViews$AsyncApplyTask;
+HPLandroid/widget/RemoteViews;->getAsyncMethod(Ljava/lang/reflect/Method;)Ljava/lang/reflect/Method;
+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;)Ljava/lang/reflect/Method;
+HPLandroid/widget/RemoteViews;->getPackage()Ljava/lang/String;
+HPLandroid/widget/RemoteViews;->getRemoteViewsToApply(Landroid/content/Context;)Landroid/widget/RemoteViews;
+HPLandroid/widget/RemoteViews;->inflateView(Landroid/content/Context;Landroid/widget/RemoteViews;Landroid/view/ViewGroup;)Landroid/view/View;
+HPLandroid/widget/RemoteViews;->isReapplyDisallowed()Z
+HPLandroid/widget/RemoteViews;->loadTransitionOverride(Landroid/content/Context;Landroid/widget/RemoteViews$OnClickHandler;)V
+HPLandroid/widget/RemoteViews;->onLoadClass(Ljava/lang/Class;)Z
+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
+HPLandroid/widget/RemoteViews;->setBitmapCache(Landroid/widget/RemoteViews$BitmapCache;)V
+HPLandroid/widget/RemoteViews;->setContentDescription(ILjava/lang/CharSequence;)V
+HPLandroid/widget/RemoteViews;->setNotRoot()V
+HPLandroid/widget/RemoteViews;->setOnClickPendingIntent(ILandroid/app/PendingIntent;)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;->setTextViewTextSize(IIF)V
+HPLandroid/widget/RemoteViews;->setViewLayoutMarginBottomDimen(II)V
+HPLandroid/widget/RemoteViews;->setViewPadding(IIIII)V
+HPLandroid/widget/RemoteViews;->startTaskOnExecutor(Landroid/widget/RemoteViews$AsyncApplyTask;Ljava/util/concurrent/Executor;)Landroid/os/CancellationSignal;
+HPLandroid/widget/RemoteViews;->wrapArg(Ljava/lang/Object;)[Ljava/lang/Object;
+HPLandroid/widget/ResourceCursorAdapter;-><init>(Landroid/content/Context;ILandroid/database/Cursor;I)V
+HPLandroid/widget/ScrollBarDrawable;->setAlwaysDrawVerticalTrack(Z)V
+HPLandroid/widget/ScrollView;->addView(Landroid/view/View;)V
+HPLandroid/widget/ScrollView;->addView(Landroid/view/View;I)V
+HPLandroid/widget/ScrollView;->canScroll()Z
+HPLandroid/widget/ScrollView;->computeScroll()V
+HPLandroid/widget/ScrollView;->computeScrollDeltaToGetChildRectOnScreen(Landroid/graphics/Rect;)I
+HPLandroid/widget/ScrollView;->computeVerticalScrollOffset()I
+HPLandroid/widget/ScrollView;->computeVerticalScrollRange()I
+HPLandroid/widget/ScrollView;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HPLandroid/widget/ScrollView;->doScrollY(I)V
+HPLandroid/widget/ScrollView;->draw(Landroid/graphics/Canvas;)V
+HPLandroid/widget/ScrollView;->executeKeyEvent(Landroid/view/KeyEvent;)Z
+HPLandroid/widget/ScrollView;->getScrollRange()I
+HPLandroid/widget/ScrollView;->inChild(II)Z
+HPLandroid/widget/ScrollView;->initOrResetVelocityTracker()V
+HPLandroid/widget/ScrollView;->isOffScreen(Landroid/view/View;)Z
+HPLandroid/widget/ScrollView;->isViewDescendantOf(Landroid/view/View;Landroid/view/View;)Z
+HPLandroid/widget/ScrollView;->isWithinDeltaOfScreen(Landroid/view/View;II)Z
+HPLandroid/widget/ScrollView;->onDetachedFromWindow()V
+HPLandroid/widget/ScrollView;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/widget/ScrollView;->onRequestFocusInDescendants(ILandroid/graphics/Rect;)Z
+HPLandroid/widget/ScrollView;->recycleVelocityTracker()V
+HPLandroid/widget/ScrollView;->requestChildFocus(Landroid/view/View;Landroid/view/View;)V
+HPLandroid/widget/ScrollView;->requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z
+HPLandroid/widget/ScrollView;->scrollToChild(Landroid/view/View;)V
+HPLandroid/widget/ScrollView;->scrollToChildRect(Landroid/graphics/Rect;Z)Z
+HPLandroid/widget/ScrollView;->shouldDelayChildPressedState()Z
+HPLandroid/widget/ScrollView;->smoothScrollBy(II)V
+HPLandroid/widget/ScrollView;->smoothScrollTo(II)V
+HPLandroid/widget/Scroller$ViscousFluidInterpolator;->getInterpolation(F)F
+HPLandroid/widget/Scroller;->fling(IIIIIIII)V
+HPLandroid/widget/Scroller;->forceFinished(Z)V
+HPLandroid/widget/Scroller;->getFinalX()I
+HPLandroid/widget/Scroller;->getFinalY()I
+HPLandroid/widget/Scroller;->getSplineDeceleration(F)D
+HPLandroid/widget/Scroller;->getSplineFlingDistance(F)D
+HPLandroid/widget/Scroller;->getSplineFlingDuration(F)I
+HPLandroid/widget/SearchView$OnQueryTextListener;->onQueryTextChange(Ljava/lang/String;)Z
+HPLandroid/widget/SearchView$OnQueryTextListener;->onQueryTextSubmit(Ljava/lang/String;)Z
+HPLandroid/widget/SeekBar;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HPLandroid/widget/SeekBar;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/widget/SimpleCursorAdapter;-><init>(Landroid/content/Context;ILandroid/database/Cursor;[Ljava/lang/String;[II)V
+HPLandroid/widget/SimpleCursorAdapter;->findColumns(Landroid/database/Cursor;[Ljava/lang/String;)V
+HPLandroid/widget/SimpleCursorAdapter;->swapCursor(Landroid/database/Cursor;)Landroid/database/Cursor;
+HPLandroid/widget/Space;-><init>(Landroid/content/Context;)V
+HPLandroid/widget/SpellChecker;-><init>(Landroid/widget/TextView;)V
+HPLandroid/widget/SpellChecker;->closeSession()V
+HPLandroid/widget/SpellChecker;->isSessionActive()Z
+HPLandroid/widget/SpellChecker;->resetSession()V
+HPLandroid/widget/SpellChecker;->setLocale(Ljava/util/Locale;)V
+HPLandroid/widget/SpellChecker;->spellCheck(II)V
+HPLandroid/widget/Switch$1;->get(Landroid/widget/Switch;)Ljava/lang/Float;
+HPLandroid/widget/Switch$1;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroid/widget/Switch$1;->setValue(Landroid/widget/Switch;F)V
+HPLandroid/widget/Switch$1;->setValue(Ljava/lang/Object;F)V
+HPLandroid/widget/Switch;->-get0(Landroid/widget/Switch;)F
+HPLandroid/widget/Switch;->-wrap0(Landroid/widget/Switch;F)V
+HPLandroid/widget/Switch;->animateThumbToCheckedState(Z)V
+HPLandroid/widget/Switch;->draw(Landroid/graphics/Canvas;)V
+HPLandroid/widget/Switch;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HPLandroid/widget/Switch;->getCompoundPaddingLeft()I
+HPLandroid/widget/Switch;->getCompoundPaddingRight()I
+HPLandroid/widget/Switch;->getTargetCheckedState()Z
+HPLandroid/widget/Switch;->getThumbOffset()I
+HPLandroid/widget/Switch;->getThumbScrollRange()I
+HPLandroid/widget/Switch;->jumpDrawablesToCurrentState()V
+HPLandroid/widget/Switch;->onDraw(Landroid/graphics/Canvas;)V
+HPLandroid/widget/Switch;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HPLandroid/widget/Switch;->onLayout(ZIIII)V
+HPLandroid/widget/Switch;->onMeasure(II)V
+HPLandroid/widget/Switch;->setTextOff(Ljava/lang/CharSequence;)V
+HPLandroid/widget/Switch;->setTextOn(Ljava/lang/CharSequence;)V
+HPLandroid/widget/TextClock$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLandroid/widget/TextClock$FormatChangeObserver;->onChange(ZLandroid/net/Uri;)V
+HPLandroid/widget/TextClock;->-get1(Landroid/widget/TextClock;)Ljava/lang/String;
+HPLandroid/widget/TextClock;->-wrap0(Landroid/widget/TextClock;)V
+HPLandroid/widget/TextClock;->-wrap2(Landroid/widget/TextClock;)V
+HPLandroid/widget/TextView$2;-><init>(Landroid/widget/TextView;)V
+HPLandroid/widget/TextView$2;->run()V
+HPLandroid/widget/TextView$3;-><init>(Landroid/widget/TextView;)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
+HPLandroid/widget/TextView$ChangeWatcher;->onTextChanged(Ljava/lang/CharSequence;III)V
+HPLandroid/widget/TextView$Marquee$1;-><init>(Landroid/widget/TextView$Marquee;)V
+HPLandroid/widget/TextView$Marquee$1;->doFrame(J)V
+HPLandroid/widget/TextView$Marquee$2;-><init>(Landroid/widget/TextView$Marquee;)V
+HPLandroid/widget/TextView$Marquee$2;->doFrame(J)V
+HPLandroid/widget/TextView$Marquee$3;-><init>(Landroid/widget/TextView$Marquee;)V
+HPLandroid/widget/TextView$Marquee$3;->doFrame(J)V
+HPLandroid/widget/TextView$Marquee;->-get0(Landroid/widget/TextView$Marquee;)Landroid/view/Choreographer;
+HPLandroid/widget/TextView$Marquee;->-get1(Landroid/widget/TextView$Marquee;)I
+HPLandroid/widget/TextView$Marquee;->-get2(Landroid/widget/TextView$Marquee;)B
+HPLandroid/widget/TextView$Marquee;->-set0(Landroid/widget/TextView$Marquee;J)J
+HPLandroid/widget/TextView$Marquee;->-set1(Landroid/widget/TextView$Marquee;I)I
+HPLandroid/widget/TextView$Marquee;->-set2(Landroid/widget/TextView$Marquee;B)B
+HPLandroid/widget/TextView$Marquee;-><init>(Landroid/widget/TextView;)V
+HPLandroid/widget/TextView$Marquee;->getGhostOffset()F
+HPLandroid/widget/TextView$Marquee;->getMaxFadeScroll()F
+HPLandroid/widget/TextView$Marquee;->getScroll()F
+HPLandroid/widget/TextView$Marquee;->isRunning()Z
+HPLandroid/widget/TextView$Marquee;->isStopped()Z
+HPLandroid/widget/TextView$Marquee;->resetScroll()V
+HPLandroid/widget/TextView$Marquee;->shouldDrawGhost()Z
+HPLandroid/widget/TextView$Marquee;->shouldDrawLeftFade()Z
+HPLandroid/widget/TextView$Marquee;->start(I)V
+HPLandroid/widget/TextView$Marquee;->stop()V
+HPLandroid/widget/TextView$Marquee;->tick()V
+HPLandroid/widget/TextView;->-get0(Landroid/widget/TextView;)Landroid/content/Context;
+HPLandroid/widget/TextView;->-get2(Landroid/widget/TextView;)Landroid/text/Layout;
+HPLandroid/widget/TextView;->-wrap0(Landroid/widget/TextView;Ljava/lang/CharSequence;III)V
+HPLandroid/widget/TextView;->-wrap1(Landroid/widget/TextView;)V
+HPLandroid/widget/TextView;->beginBatchEdit()V
+HPLandroid/widget/TextView;->canCopy()Z
+HPLandroid/widget/TextView;->canCut()Z
+HPLandroid/widget/TextView;->canMarquee()Z
+HPLandroid/widget/TextView;->canPaste()Z
+HPLandroid/widget/TextView;->canProcessText()Z
+HPLandroid/widget/TextView;->canShare()Z
+HPLandroid/widget/TextView;->clearComposingText()V
+HPLandroid/widget/TextView;->computeHorizontalScrollRange()I
+HPLandroid/widget/TextView;->computeVerticalScrollExtent()I
+HPLandroid/widget/TextView;->computeVerticalScrollRange()I
+HPLandroid/widget/TextView;->convertToLocalHorizontalCoordinate(F)F
+HPLandroid/widget/TextView;->didTouchFocusSelect()Z
+HPLandroid/widget/TextView;->doKeyDown(ILandroid/view/KeyEvent;Landroid/view/KeyEvent;)I
+HPLandroid/widget/TextView;->drawableHotspotChanged(FF)V
+HPLandroid/widget/TextView;->endBatchEdit()V
+HPLandroid/widget/TextView;->findLargestTextSizeWhichFits(Landroid/graphics/RectF;)I
+HPLandroid/widget/TextView;->getBottomVerticalOffset(Z)I
+HPLandroid/widget/TextView;->getBreakStrategy()I
+HPLandroid/widget/TextView;->getCompoundDrawablePadding()I
+HPLandroid/widget/TextView;->getCompoundDrawables()[Landroid/graphics/drawable/Drawable;
+HPLandroid/widget/TextView;->getFadeHeight(Z)I
+HPLandroid/widget/TextView;->getFadeTop(Z)I
+HPLandroid/widget/TextView;->getFocusedRect(Landroid/graphics/Rect;)V
+HPLandroid/widget/TextView;->getHorizontalFadingEdgeStrength(FF)F
+HPLandroid/widget/TextView;->getHyphenationFrequency()I
+HPLandroid/widget/TextView;->getIncludeFontPadding()Z
+HPLandroid/widget/TextView;->getJustificationMode()I
+HPLandroid/widget/TextView;->getLeftFadingEdgeStrength()F
+HPLandroid/widget/TextView;->getLineAtCoordinate(F)I
+HPLandroid/widget/TextView;->getLineSpacingExtra()F
+HPLandroid/widget/TextView;->getLineSpacingMultiplier()F
+HPLandroid/widget/TextView;->getMaxHeight()I
+HPLandroid/widget/TextView;->getMaxWidth()I
+HPLandroid/widget/TextView;->getOffsetAtCoordinate(IF)I
+HPLandroid/widget/TextView;->getOffsetForPosition(FF)I
+HPLandroid/widget/TextView;->getRightFadingEdgeStrength()F
+HPLandroid/widget/TextView;->getSpellCheckerLocale()Ljava/util/Locale;
+HPLandroid/widget/TextView;->getTextServicesLocale(Z)Ljava/util/Locale;
+HPLandroid/widget/TextView;->getTotalPaddingBottom()I
+HPLandroid/widget/TextView;->getTotalPaddingLeft()I
+HPLandroid/widget/TextView;->getTotalPaddingRight()I
+HPLandroid/widget/TextView;->getTypeface()Landroid/graphics/Typeface;
+HPLandroid/widget/TextView;->handleBackInTextActionModeIfNeeded(Landroid/view/KeyEvent;)Z
+HPLandroid/widget/TextView;->handleTextChanged(Ljava/lang/CharSequence;III)V
+HPLandroid/widget/TextView;->invalidateCursor()V
+HPLandroid/widget/TextView;->isDeviceProvisioned()Z
+HPLandroid/widget/TextView;->isDirectionalNavigationKey(I)Z
+HPLandroid/widget/TextView;->isPaddingOffsetRequired()Z
+HPLandroid/widget/TextView;->onBeginBatchEdit()V
+HPLandroid/widget/TextView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLandroid/widget/TextView;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
+HPLandroid/widget/TextView;->onEndBatchEdit()V
+HPLandroid/widget/TextView;->onKeyDown(ILandroid/view/KeyEvent;)Z
+HPLandroid/widget/TextView;->onKeyPreIme(ILandroid/view/KeyEvent;)Z
+HPLandroid/widget/TextView;->onKeyUp(ILandroid/view/KeyEvent;)Z
+HPLandroid/widget/TextView;->onLocaleChanged()V
+HPLandroid/widget/TextView;->onPopulateAccessibilityEventInternal(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLandroid/widget/TextView;->onTouchEvent(Landroid/view/MotionEvent;)Z
+HPLandroid/widget/TextView;->resetErrorChangedFlag()V
+HPLandroid/widget/TextView;->setMaxEms(I)V
+HPLandroid/widget/TextView;->shouldAdvanceFocusOnEnter()Z
+HPLandroid/widget/TextView;->suggestedSizeFitsInSpace(ILandroid/graphics/RectF;)Z
+HPLandroid/widget/TextView;->updateAfterEdit()V
+HPLandroid/widget/TextView;->updateTextServicesLocaleAsync()V
+HPLandroid/widget/TextView;->updateTextServicesLocaleLocked()V
+HPLandroid/widget/Toolbar$ExpandedActionViewMenuPresenter;->getId()I
+HPLandroid/widget/Toolbar$ExpandedActionViewMenuPresenter;->onCloseMenu(Lcom/android/internal/view/menu/MenuBuilder;Z)V
+HPLandroid/widget/Toolbar$SavedState$1;-><init>()V
+HPLandroid/widget/Toolbar$SavedState;-><init>(Landroid/os/Parcelable;)V
+HPLandroid/widget/Toolbar$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/widget/Toolbar;->dismissPopupMenus()V
+HPLandroid/widget/Toolbar;->hasExpandedActionView()Z
+HPLandroid/widget/Toolbar;->isOverflowMenuShowing()Z
+HPLandroid/widget/Toolbar;->onDetachedFromWindow()V
+HPLandroid/widget/Toolbar;->onSaveInstanceState()Landroid/os/Parcelable;
+HPLandroid/widget/Toolbar;->setTitle(I)V
+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;->getBaseline()I
+HPLandroid/widget/ViewAnimator;->getCurrentView()Landroid/view/View;
+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/ViewFlipper$1;-><init>(Landroid/widget/ViewFlipper;)V
+HPLandroid/widget/ViewFlipper$2;-><init>(Landroid/widget/ViewFlipper;)V
+HPLandroid/widget/ViewFlipper;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLandroid/widget/ViewFlipper;->onAttachedToWindow()V
+HPLandroid/widget/ViewFlipper;->onDetachedFromWindow()V
+HPLandroid/widget/ViewFlipper;->onWindowVisibilityChanged(I)V
+HPLandroid/widget/ViewFlipper;->updateRunning()V
+HPLandroid/widget/ViewFlipper;->updateRunning(Z)V
+HPLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;-><init>([BII)V
+HPLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->checkLastTagWas(I)V
+HPLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->isAtEnd()Z
+HPLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->newInstance([BII)Lcom/android/framework/protobuf/nano/CodedInputByteBufferNano;
+HPLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readInt32()I
+HPLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readRawByte()B
+HPLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readRawVarint32()I
+HPLcom/android/framework/protobuf/nano/CodedInputByteBufferNano;->readTag()I
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;-><init>(Ljava/nio/ByteBuffer;)V
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;-><init>([BII)V
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->checkNoSpaceLeft()V
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeInt32Size(II)I
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeInt32SizeNoTag(I)I
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeRawVarint32Size(I)I
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->computeTagSize(I)I
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->newInstance([BII)Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->spaceLeft()I
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeInt32(II)V
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeInt32NoTag(I)V
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeRawByte(B)V
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeRawByte(I)V
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeRawVarint32(I)V
+HPLcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;->writeTag(II)V
+HPLcom/android/framework/protobuf/nano/MessageNano;-><init>()V
+HPLcom/android/framework/protobuf/nano/MessageNano;->computeSerializedSize()I
+HPLcom/android/framework/protobuf/nano/MessageNano;->getSerializedSize()I
+HPLcom/android/framework/protobuf/nano/MessageNano;->mergeFrom(Lcom/android/framework/protobuf/nano/MessageNano;[B)Lcom/android/framework/protobuf/nano/MessageNano;
+HPLcom/android/framework/protobuf/nano/MessageNano;->mergeFrom(Lcom/android/framework/protobuf/nano/MessageNano;[BII)Lcom/android/framework/protobuf/nano/MessageNano;
+HPLcom/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
+HPLcom/android/framework/protobuf/nano/MessageNano;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
+HPLcom/android/framework/protobuf/nano/WireFormatNano;->makeTag(II)I
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->appendNationalNumber(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->attemptToChooseFormattingPattern()Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->attemptToExtractIdd()Z
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->attemptToFormatAccruedDigits()Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->clear()V
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->createFormattingTemplate(Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;)Z
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->getAvailableFormats(Ljava/lang/String;)V
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->getFormattingTemplate(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->getRememberedPosition()I
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->inputAccruedNationalNumber()Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->inputDigit(C)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->inputDigitAndRememberPosition(C)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->inputDigitHelper(C)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->inputDigitWithOptionToRememberPosition(CZ)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->isDigitOrLeadingPlusSign(C)Z
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->isFormatEligible(Ljava/lang/String;)Z
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->isNanpaNumberWithNationalPrefix()Z
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->maybeCreateNewTemplate()Z
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->narrowDownPossibleFormats(Ljava/lang/String;)V
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->normalizeAndAccrueDigitsAndPlusSign(CZ)C
+HPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->removeNationalPrefixFromNationalNumber()Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/NumberParseException$ErrorType;-><init>(Ljava/lang/String;I)V
+HPLcom/android/i18n/phonenumbers/NumberParseException;-><init>(Lcom/android/i18n/phonenumbers/NumberParseException$ErrorType;Ljava/lang/String;)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberMatcher$State;-><init>(Ljava/lang/String;I)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberMatcher;-><init>(Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Ljava/lang/CharSequence;Ljava/lang/String;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency;J)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberMatcher;->find(I)Lcom/android/i18n/phonenumbers/PhoneNumberMatch;
+HPLcom/android/i18n/phonenumbers/PhoneNumberMatcher;->hasNext()Z
+HPLcom/android/i18n/phonenumbers/PhoneNumberMatcher;->limit(II)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil$1;-><init>(Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Ljava/lang/CharSequence;Ljava/lang/String;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency;J)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil$1;->iterator()Ljava/util/Iterator;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency$1;-><init>(Ljava/lang/String;I)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency$2;-><init>(Ljava/lang/String;I)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency$3;-><init>(Ljava/lang/String;I)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency$4;-><init>(Ljava/lang/String;I)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency;-><init>(Ljava/lang/String;I)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency;-><init>(Ljava/lang/String;ILcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency;)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;-><init>(Ljava/lang/String;I)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;->values()[Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;-><init>(Ljava/lang/String;I)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult;-><init>(Ljava/lang/String;I)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->-getcom-android-i18n-phonenumbers-PhoneNumberUtil$PhoneNumberFormatSwitchesValues()[I
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->-getcom-android-i18n-phonenumbers-Phonenumber$PhoneNumber$CountryCodeSourceSwitchesValues()[I
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->buildNationalNumberForParsing(Ljava/lang/String;Ljava/lang/StringBuilder;)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->checkRegionForParsing(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->chooseFormattingPatternForNumber(Ljava/util/List;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->extractPossibleNumber(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->findNumbers(Ljava/lang/CharSequence;Ljava/lang/String;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency;J)Ljava/lang/Iterable;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->format(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->format(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->formatInOriginalFormat(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->formatNsn(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->formatNsn(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->formatNsnUsingPattern(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getMetadataForRegionOrCallingCode(ILjava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNationalSignificantNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNddPrefixForRegion(Ljava/lang/String;Z)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNumberType(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNumberTypeHelper(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;
+HPLcom/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;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->hasFormattingPatternForNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Z
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->hasUnexpectedItalianLeadingZero(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Z
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->hasValidCountryCallingCode(I)Z
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isNumberMatchingDesc(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Z
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isValidNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Z
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isValidNumberForRegion(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/lang/String;)Z
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isViablePhoneNumber(Ljava/lang/String;)Z
+HPLcom/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
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeExtractCountryCode(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Ljava/lang/StringBuilder;ZLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)I
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeStripExtension(Ljava/lang/StringBuilder;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeStripInternationalPrefixAndNormalize(Ljava/lang/StringBuilder;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeStripNationalPrefixAndCarrierCode(Ljava/lang/StringBuilder;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Ljava/lang/StringBuilder;)Z
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalize(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalize(Ljava/lang/StringBuilder;)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeDiallableCharsOnly(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeDigits(Ljava/lang/String;Z)Ljava/lang/StringBuilder;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeDigitsOnly(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeHelper(Ljava/lang/String;Ljava/util/Map;Z)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parse(Ljava/lang/String;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parse(Ljava/lang/String;Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parseAndKeepRawInput(Ljava/lang/String;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parseAndKeepRawInput(Ljava/lang/String;Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parseHelper(Ljava/lang/String;Ljava/lang/String;ZZLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parsePrefixAsIdd(Ljava/util/regex/Pattern;Ljava/lang/StringBuilder;)Z
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->prefixNumberWithCountryCallingCode(ILcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->rawInputContainsNationalPrefix(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->setItalianLeadingZerosForPhoneNumber(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V
+HPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->testNumberLength(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult;
+HPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getFormat()Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getNationalPrefixFormattingRule()Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getPattern()Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->isNationalPrefixOptionalWhenFormatting()Z
+HPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->leadingDigitsPatternSize()I
+HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getGeneralDesc()Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
+HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getInternationalPrefix()Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getLeadingDigits()Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getNationalPrefix()Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getNationalPrefixForParsing()Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->hasLeadingDigits()Z
+HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->hasNationalPrefix()Z
+HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->hasNationalPrefixForParsing()Z
+HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->intlNumberFormats()Ljava/util/List;
+HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->numberFormats()Ljava/util/List;
+HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setLeadingDigits(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
+HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;->getPossibleLengthList()Ljava/util/List;
+HPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;->getPossibleLengthLocalOnlyList()Ljava/util/List;
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;-><init>(Ljava/lang/String;I)V
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;->values()[Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;-><init>()V
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->getCountryCode()I
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->getCountryCodeSource()Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->getNationalNumber()J
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->getRawInput()Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->hasCountryCodeSource()Z
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->hasExtension()Z
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->hasRawInput()Z
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->isItalianLeadingZero()Z
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->setCountryCode(I)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->setCountryCodeSource(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->setNationalNumber(J)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
+HPLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;->setRawInput(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
+HPLcom/android/i18n/phonenumbers/RegexCache$LRUCache$1;->removeEldestEntry(Ljava/util/Map$Entry;)Z
+HPLcom/android/i18n/phonenumbers/RegexCache$LRUCache;->-get0(Lcom/android/i18n/phonenumbers/RegexCache$LRUCache;)I
+HPLcom/android/i18n/phonenumbers/RegexCache$LRUCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/i18n/phonenumbers/RegexCache$LRUCache;->put(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/i18n/phonenumbers/RegexCache;->getPatternForRegex(Ljava/lang/String;)Ljava/util/regex/Pattern;
+HPLcom/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder;-><init>(Ljava/lang/String;)V
+HPLcom/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder;->getDescriptionForNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/util/Locale;)Ljava/lang/String;
+HPLcom/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder;->getInstance()Lcom/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder;
+HPLcom/android/i18n/phonenumbers/prefixmapper/MappingFileProvider;-><init>()V
+HPLcom/android/i18n/phonenumbers/prefixmapper/MappingFileProvider;->readExternal(Ljava/io/ObjectInput;)V
+HPLcom/android/i18n/phonenumbers/prefixmapper/PrefixFileReader;-><init>(Ljava/lang/String;)V
+HPLcom/android/i18n/phonenumbers/prefixmapper/PrefixFileReader;->close(Ljava/io/InputStream;)V
+HPLcom/android/i18n/phonenumbers/prefixmapper/PrefixFileReader;->loadMappingFileProvider()V
+HPLcom/android/ims/ImsManager;->getIntCarrierConfig(Landroid/content/Context;Ljava/lang/String;)I
+HPLcom/android/ims/ImsManager;->getWfcMode(Landroid/content/Context;)I
+HPLcom/android/ims/ImsManager;->isWfcEnabledByPlatform(Landroid/content/Context;)Z
+HPLcom/android/ims/ImsManager;->onProvisionedValueChanged(Landroid/content/Context;ILjava/lang/String;)V
+HPLcom/android/ims/internal/IImsConfig$Stub;->asBinder()Landroid/os/IBinder;
+HPLcom/android/ims/internal/IImsConfig$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/ims/internal/IImsServiceController$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/ims/internal/IImsServiceFeatureListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/ims/internal/IImsServiceFeatureListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/IImsServiceFeatureListener;
+HPLcom/android/ims/internal/uce/common/CapInfo$1;-><init>()V
+HPLcom/android/ims/internal/uce/common/StatusCode$1;-><init>()V
+HPLcom/android/ims/internal/uce/common/StatusCode$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/ims/internal/uce/common/StatusCode;
+HPLcom/android/ims/internal/uce/common/StatusCode$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLcom/android/ims/internal/uce/common/StatusCode;-><init>()V
+HPLcom/android/ims/internal/uce/common/StatusCode;-><init>(Landroid/os/Parcel;)V
+HPLcom/android/ims/internal/uce/common/StatusCode;-><init>(Landroid/os/Parcel;Lcom/android/ims/internal/uce/common/StatusCode;)V
+HPLcom/android/ims/internal/uce/common/StatusCode;->getStatusCode()I
+HPLcom/android/ims/internal/uce/common/StatusCode;->readFromParcel(Landroid/os/Parcel;)V
+HPLcom/android/ims/internal/uce/common/StatusCode;->setStatusCode(I)V
+HPLcom/android/ims/internal/uce/common/StatusCode;->writeToParcel(Landroid/os/Parcel;I)V
+HPLcom/android/ims/internal/uce/common/UceLong$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/ims/internal/uce/common/UceLong;
+HPLcom/android/ims/internal/uce/common/UceLong$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLcom/android/ims/internal/uce/common/UceLong;-><init>(Landroid/os/Parcel;)V
+HPLcom/android/ims/internal/uce/common/UceLong;-><init>(Landroid/os/Parcel;Lcom/android/ims/internal/uce/common/UceLong;)V
+HPLcom/android/ims/internal/uce/common/UceLong;->readFromParcel(Landroid/os/Parcel;)V
+HPLcom/android/ims/internal/uce/common/UceLong;->setUceLong(J)V
+HPLcom/android/ims/internal/uce/common/UceLong;->writeToParcel(Landroid/os/Parcel;)V
+HPLcom/android/ims/internal/uce/common/UceLong;->writeToParcel(Landroid/os/Parcel;I)V
+HPLcom/android/ims/internal/uce/presence/IPresenceListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/ims/internal/uce/presence/IPresenceListener$Stub$Proxy;->serviceUnAvailable(Lcom/android/ims/internal/uce/common/StatusCode;)V
+HPLcom/android/ims/internal/uce/presence/IPresenceListener$Stub;->asBinder()Landroid/os/IBinder;
+HPLcom/android/ims/internal/uce/presence/IPresenceListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/uce/presence/IPresenceListener;
+HPLcom/android/ims/internal/uce/presence/IPresenceListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/ims/internal/uce/presence/IPresenceService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/ims/internal/uce/presence/IPresenceService$Stub;-><init>()V
+HPLcom/android/ims/internal/uce/presence/IPresenceService$Stub;->asBinder()Landroid/os/IBinder;
+HPLcom/android/ims/internal/uce/presence/IPresenceService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/uce/presence/IPresenceService;
+HPLcom/android/ims/internal/uce/presence/IPresenceService;->addListener(ILcom/android/ims/internal/uce/presence/IPresenceListener;Lcom/android/ims/internal/uce/common/UceLong;)Lcom/android/ims/internal/uce/common/StatusCode;
+HPLcom/android/ims/internal/uce/presence/IPresenceService;->getContactCap(ILjava/lang/String;I)Lcom/android/ims/internal/uce/common/StatusCode;
+HPLcom/android/ims/internal/uce/presence/IPresenceService;->getContactListCap(I[Ljava/lang/String;I)Lcom/android/ims/internal/uce/common/StatusCode;
+HPLcom/android/ims/internal/uce/presence/IPresenceService;->getVersion(I)Lcom/android/ims/internal/uce/common/StatusCode;
+HPLcom/android/ims/internal/uce/presence/IPresenceService;->publishMyCap(ILcom/android/ims/internal/uce/presence/PresCapInfo;I)Lcom/android/ims/internal/uce/common/StatusCode;
+HPLcom/android/ims/internal/uce/presence/IPresenceService;->reenableService(II)Lcom/android/ims/internal/uce/common/StatusCode;
+HPLcom/android/ims/internal/uce/presence/IPresenceService;->removeListener(ILcom/android/ims/internal/uce/common/UceLong;)Lcom/android/ims/internal/uce/common/StatusCode;
+HPLcom/android/ims/internal/uce/presence/IPresenceService;->setNewFeatureTag(ILjava/lang/String;Lcom/android/ims/internal/uce/presence/PresServiceInfo;I)Lcom/android/ims/internal/uce/common/StatusCode;
+HPLcom/android/ims/internal/uce/presence/PresCmdId$1;-><init>()V
+HPLcom/android/ims/internal/uce/presence/PresCmdStatus$1;-><init>()V
+HPLcom/android/ims/internal/uce/presence/PresPublishTriggerType$1;-><init>()V
+HPLcom/android/ims/internal/uce/presence/PresResInfo$1;-><init>()V
+HPLcom/android/ims/internal/uce/presence/PresResInstanceInfo$1;-><init>()V
+HPLcom/android/ims/internal/uce/presence/PresRlmiInfo$1;-><init>()V
+HPLcom/android/ims/internal/uce/presence/PresSipResponse$1;-><init>()V
+HPLcom/android/ims/internal/uce/presence/PresSubscriptionState$1;-><init>()V
+HPLcom/android/ims/internal/uce/presence/PresTupleInfo$1;-><init>()V
+HPLcom/android/ims/internal/uce/uceservice/IUceListener$Stub;-><init>()V
+HPLcom/android/ims/internal/uce/uceservice/IUceListener;->setStatus(I)V
+HPLcom/android/ims/internal/uce/uceservice/IUceService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/ims/internal/uce/uceservice/IUceService$Stub$Proxy;->createPresenceService(Lcom/android/ims/internal/uce/presence/IPresenceListener;Lcom/android/ims/internal/uce/common/UceLong;)I
+HPLcom/android/ims/internal/uce/uceservice/IUceService$Stub$Proxy;->getPresenceService()Lcom/android/ims/internal/uce/presence/IPresenceService;
+HPLcom/android/ims/internal/uce/uceservice/IUceService$Stub$Proxy;->getServiceStatus()Z
+HPLcom/android/ims/internal/uce/uceservice/IUceService$Stub;-><init>()V
+HPLcom/android/ims/internal/uce/uceservice/IUceService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/ims/internal/uce/uceservice/IUceService;->createOptionsService(Lcom/android/ims/internal/uce/options/IOptionsListener;Lcom/android/ims/internal/uce/common/UceLong;)I
+HPLcom/android/ims/internal/uce/uceservice/IUceService;->createPresenceService(Lcom/android/ims/internal/uce/presence/IPresenceListener;Lcom/android/ims/internal/uce/common/UceLong;)I
+HPLcom/android/ims/internal/uce/uceservice/IUceService;->destroyOptionsService(I)V
+HPLcom/android/ims/internal/uce/uceservice/IUceService;->destroyPresenceService(I)V
+HPLcom/android/ims/internal/uce/uceservice/IUceService;->getOptionsService()Lcom/android/ims/internal/uce/options/IOptionsService;
+HPLcom/android/ims/internal/uce/uceservice/IUceService;->getPresenceService()Lcom/android/ims/internal/uce/presence/IPresenceService;
+HPLcom/android/ims/internal/uce/uceservice/IUceService;->getServiceStatus()Z
+HPLcom/android/ims/internal/uce/uceservice/IUceService;->isServiceStarted()Z
+HPLcom/android/ims/internal/uce/uceservice/IUceService;->startService(Lcom/android/ims/internal/uce/uceservice/IUceListener;)Z
+HPLcom/android/ims/internal/uce/uceservice/IUceService;->stopService()Z
+HPLcom/android/internal/alsa/AlsaCardsParser$AlsaCardRecord;->-wrap0(Lcom/android/internal/alsa/AlsaCardsParser$AlsaCardRecord;Ljava/lang/String;I)Z
+HPLcom/android/internal/alsa/AlsaCardsParser$AlsaCardRecord;-><init>(Lcom/android/internal/alsa/AlsaCardsParser;)V
+HPLcom/android/internal/alsa/AlsaCardsParser$AlsaCardRecord;->parse(Ljava/lang/String;I)Z
+HPLcom/android/internal/alsa/AlsaCardsParser;->-get0()Lcom/android/internal/alsa/LineTokenizer;
+HPLcom/android/internal/alsa/AlsaCardsParser;-><init>()V
+HPLcom/android/internal/alsa/AlsaCardsParser;->scan()V
+HPLcom/android/internal/alsa/AlsaDevicesParser;-><init>()V
+HPLcom/android/internal/alsa/LineTokenizer;-><init>(Ljava/lang/String;)V
+HPLcom/android/internal/alsa/LineTokenizer;->nextDelimiter(Ljava/lang/String;I)I
+HPLcom/android/internal/alsa/LineTokenizer;->nextToken(Ljava/lang/String;I)I
+HPLcom/android/internal/app/AlertController$1;->onClick(Landroid/view/View;)V
+HPLcom/android/internal/app/AlertController$ButtonHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/internal/app/AlertController;->-get0(Lcom/android/internal/app/AlertController;)Landroid/widget/Button;
+HPLcom/android/internal/app/AlertController;->-get2(Lcom/android/internal/app/AlertController;)Landroid/widget/Button;
+HPLcom/android/internal/app/AlertController;->-get4(Lcom/android/internal/app/AlertController;)Landroid/widget/Button;
+HPLcom/android/internal/app/AlertController;->-get5(Lcom/android/internal/app/AlertController;)Landroid/os/Message;
+HPLcom/android/internal/app/AlertController;->-get6(Lcom/android/internal/app/AlertController;)Landroid/content/DialogInterface;
+HPLcom/android/internal/app/AlertController;->-get7(Lcom/android/internal/app/AlertController;)Landroid/os/Handler;
+HPLcom/android/internal/app/AlertController;->installContent()V
+HPLcom/android/internal/app/AlertController;->resolvePanel(Landroid/view/View;Landroid/view/View;)Landroid/view/ViewGroup;
+HPLcom/android/internal/app/AlertController;->selectContentView()I
+HPLcom/android/internal/app/AlertController;->setBackground(Landroid/content/res/TypedArray;Landroid/view/View;Landroid/view/View;Landroid/view/View;Landroid/view/View;ZZZ)V
+HPLcom/android/internal/app/AlertController;->setupButtons(Landroid/view/ViewGroup;)V
+HPLcom/android/internal/app/AlertController;->setupContent(Landroid/view/ViewGroup;)V
+HPLcom/android/internal/app/AlertController;->setupCustomContent(Landroid/view/ViewGroup;)V
+HPLcom/android/internal/app/AlertController;->setupTitle(Landroid/view/ViewGroup;)V
+HPLcom/android/internal/app/AlertController;->setupView()V
+HPLcom/android/internal/app/AlertController;->shouldCenterSingleButton(Landroid/content/Context;)Z
+HPLcom/android/internal/app/AssistUtils;->getActiveServiceComponentName()Landroid/content/ComponentName;
+HPLcom/android/internal/app/AssistUtils;->onLockscreenShown()V
+HPLcom/android/internal/app/IAppOpsCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/app/IAppOpsCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/app/IAppOpsCallback$Stub$Proxy;->opChanged(IILjava/lang/String;)V
+HPLcom/android/internal/app/IAppOpsCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IAppOpsCallback;
+HPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;)V
+HPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->setUidMode(III)V
+HPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->stopWatchingMode(Lcom/android/internal/app/IAppOpsCallback;)V
+HPLcom/android/internal/app/IAppOpsService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->noteBleScanResults(Landroid/os/WorkSource;I)V
+HPLcom/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
+HPLcom/android/internal/app/IBatteryStats$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/app/IMediaContainerService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/app/IMediaContainerService$Stub$Proxy;->getMinimalPackageInfo(Ljava/lang/String;ILjava/lang/String;)Landroid/content/pm/PackageInfoLite;
+HPLcom/android/internal/app/IMediaContainerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IMediaContainerService;
+HPLcom/android/internal/app/IMediaContainerService;->calculateInstalledSize(Ljava/lang/String;ZLjava/lang/String;)J
+HPLcom/android/internal/app/IMediaContainerService;->clearDirectory(Ljava/lang/String;)V
+HPLcom/android/internal/app/IMediaContainerService;->copyPackage(Ljava/lang/String;Lcom/android/internal/os/IParcelFileDescriptorFactory;)I
+HPLcom/android/internal/app/IMediaContainerService;->copyPackageToContainer(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/lang/String;)Ljava/lang/String;
+HPLcom/android/internal/app/IMediaContainerService;->getMinimalPackageInfo(Ljava/lang/String;ILjava/lang/String;)Landroid/content/pm/PackageInfoLite;
+HPLcom/android/internal/app/IMediaContainerService;->getObbInfo(Ljava/lang/String;)Landroid/content/res/ObbInfo;
+HPLcom/android/internal/app/ISoundTriggerService$Stub;-><init>()V
+HPLcom/android/internal/app/ISoundTriggerService;->deleteSoundModel(Landroid/os/ParcelUuid;)V
+HPLcom/android/internal/app/ISoundTriggerService;->getSoundModel(Landroid/os/ParcelUuid;)Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;
+HPLcom/android/internal/app/ISoundTriggerService;->isRecognitionActive(Landroid/os/ParcelUuid;)Z
+HPLcom/android/internal/app/ISoundTriggerService;->loadGenericSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;)I
+HPLcom/android/internal/app/ISoundTriggerService;->loadKeyphraseSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;)I
+HPLcom/android/internal/app/ISoundTriggerService;->startRecognition(Landroid/os/ParcelUuid;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
+HPLcom/android/internal/app/ISoundTriggerService;->startRecognitionForIntent(Landroid/os/ParcelUuid;Landroid/app/PendingIntent;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
+HPLcom/android/internal/app/ISoundTriggerService;->stopRecognition(Landroid/os/ParcelUuid;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
+HPLcom/android/internal/app/ISoundTriggerService;->stopRecognitionForIntent(Landroid/os/ParcelUuid;)I
+HPLcom/android/internal/app/ISoundTriggerService;->unloadSoundModel(Landroid/os/ParcelUuid;)I
+HPLcom/android/internal/app/ISoundTriggerService;->updateSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;)V
+HPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->getActiveServiceComponentName()Landroid/content/ComponentName;
+HPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->onLockscreenShown()V
+HPLcom/android/internal/app/IVoiceInteractionManagerService$Stub;-><init>()V
+HPLcom/android/internal/app/IVoiceInteractionManagerService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/app/IVoiceInteractionSessionListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/app/IVoiceInteractionSessionListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/app/IVoiceInteractionSessionListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractionSessionListener;
+HPLcom/android/internal/app/LocalePickerWithRegion$LocaleSelectedListener;->onLocaleSelected(Lcom/android/internal/app/LocaleStore$LocaleInfo;)V
+HPLcom/android/internal/app/NightDisplayController;->getAutoMode()I
+HPLcom/android/internal/app/NightDisplayController;->getColorTemperature()I
+HPLcom/android/internal/app/NightDisplayController;->getDefaultColorTemperature()I
+HPLcom/android/internal/app/NightDisplayController;->getMaximumColorTemperature()I
+HPLcom/android/internal/app/NightDisplayController;->getMinimumColorTemperature()I
+HPLcom/android/internal/app/ProcessMap;->get(Ljava/lang/String;I)Ljava/lang/Object;
+HPLcom/android/internal/app/ProcessMap;->put(Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/internal/app/ProcessMap;->remove(Ljava/lang/String;I)Ljava/lang/Object;
+HPLcom/android/internal/app/ProcessMap;->size()I
+HPLcom/android/internal/app/WindowDecorActionBar;->collapseActionView()Z
+HPLcom/android/internal/app/procstats/DurationsTable;-><init>(Lcom/android/internal/app/procstats/SparseMappingTable;)V
+HPLcom/android/internal/app/procstats/DurationsTable;->addDuration(IJ)V
+HPLcom/android/internal/app/procstats/DurationsTable;->addDurations(Lcom/android/internal/app/procstats/DurationsTable;)V
+HPLcom/android/internal/app/procstats/IProcessStats$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/app/procstats/ProcessState$1;-><init>()V
+HPLcom/android/internal/app/procstats/ProcessState;-><init>(Lcom/android/internal/app/procstats/ProcessState;Ljava/lang/String;IILjava/lang/String;J)V
+HPLcom/android/internal/app/procstats/ProcessState;-><init>(Lcom/android/internal/app/procstats/ProcessStats;Ljava/lang/String;IILjava/lang/String;)V
+HPLcom/android/internal/app/procstats/ProcessState;->addPss(JJZLandroid/util/ArrayMap;)V
+HPLcom/android/internal/app/procstats/ProcessState;->clone(J)Lcom/android/internal/app/procstats/ProcessState;
+HPLcom/android/internal/app/procstats/ProcessState;->commitStateTime(J)V
+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;->ensureNotDead()V
+HPLcom/android/internal/app/procstats/ProcessState;->getCommonProcess()Lcom/android/internal/app/procstats/ProcessState;
+HPLcom/android/internal/app/procstats/ProcessState;->getName()Ljava/lang/String;
+HPLcom/android/internal/app/procstats/ProcessState;->getPackage()Ljava/lang/String;
+HPLcom/android/internal/app/procstats/ProcessState;->getVersion()I
+HPLcom/android/internal/app/procstats/ProcessState;->incActiveServices(Ljava/lang/String;)V
+HPLcom/android/internal/app/procstats/ProcessState;->incStartedServices(IJLjava/lang/String;)V
+HPLcom/android/internal/app/procstats/ProcessState;->isMultiPackage()Z
+HPLcom/android/internal/app/procstats/ProcessState;->makeActive()V
+HPLcom/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;->reportExcessiveCpu(Landroid/util/ArrayMap;)V
+HPLcom/android/internal/app/procstats/ProcessState;->setMultiPackage(Z)V
+HPLcom/android/internal/app/procstats/ProcessState;->setState(IIJLandroid/util/ArrayMap;)V
+HPLcom/android/internal/app/procstats/ProcessState;->setState(IJ)V
+HPLcom/android/internal/app/procstats/ProcessState;->writeToParcel(Landroid/os/Parcel;J)V
+HPLcom/android/internal/app/procstats/ProcessStats$PackageState;-><init>(Ljava/lang/String;I)V
+HPLcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;-><init>(I)V
+HPLcom/android/internal/app/procstats/ProcessStats;->addSysMemUsage(JJJJJ)V
+HPLcom/android/internal/app/procstats/ProcessStats;->getPackageStateLocked(Ljava/lang/String;II)Lcom/android/internal/app/procstats/ProcessStats$PackageState;
+HPLcom/android/internal/app/procstats/ProcessStats;->getProcessStateLocked(Ljava/lang/String;IILjava/lang/String;)Lcom/android/internal/app/procstats/ProcessState;
+HPLcom/android/internal/app/procstats/ProcessStats;->getServiceStateLocked(Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;)Lcom/android/internal/app/procstats/ServiceState;
+HPLcom/android/internal/app/procstats/ProcessStats;->writeCommonString(Landroid/os/Parcel;Ljava/lang/String;)V
+HPLcom/android/internal/app/procstats/ProcessStats;->writeCompactedLongArray(Landroid/os/Parcel;[JI)V
+HPLcom/android/internal/app/procstats/ProcessStats;->writeToParcel(Landroid/os/Parcel;I)V
+HPLcom/android/internal/app/procstats/ProcessStats;->writeToParcel(Landroid/os/Parcel;JI)V
+HPLcom/android/internal/app/procstats/PssTable;-><init>(Lcom/android/internal/app/procstats/SparseMappingTable;)V
+HPLcom/android/internal/app/procstats/PssTable;->mergeStats(IIJJJJJJ)V
+HPLcom/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;->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;->getProcess()Lcom/android/internal/app/procstats/ProcessState;
+HPLcom/android/internal/app/procstats/ServiceState;->getProcessName()Ljava/lang/String;
+HPLcom/android/internal/app/procstats/ServiceState;->isInUse()Z
+HPLcom/android/internal/app/procstats/ServiceState;->isRestarting()Z
+HPLcom/android/internal/app/procstats/ServiceState;->setBound(ZIJ)V
+HPLcom/android/internal/app/procstats/ServiceState;->setExecuting(ZIJ)V
+HPLcom/android/internal/app/procstats/ServiceState;->setMemFactor(IJ)V
+HPLcom/android/internal/app/procstats/ServiceState;->setProcess(Lcom/android/internal/app/procstats/ProcessState;)V
+HPLcom/android/internal/app/procstats/ServiceState;->setRestarting(ZIJ)V
+HPLcom/android/internal/app/procstats/ServiceState;->setStarted(ZIJ)V
+HPLcom/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/SparseMappingTable$Table;->assertConsistency()V
+HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->binarySearch(B)I
+HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->copyFrom(Lcom/android/internal/app/procstats/SparseMappingTable$Table;I)V
+HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getArrayForKey(I)[J
+HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getKeyAt(I)I
+HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getKeyCount()I
+HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getOrAddKey(BI)I
+HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getValue(I)J
+HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->getValue(II)J
+HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->setValue(IIJ)V
+HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->setValue(IJ)V
+HPLcom/android/internal/app/procstats/SparseMappingTable$Table;->writeToParcel(Landroid/os/Parcel;)V
+HPLcom/android/internal/app/procstats/SparseMappingTable;->-get0(Lcom/android/internal/app/procstats/SparseMappingTable;)Ljava/util/ArrayList;
+HPLcom/android/internal/app/procstats/SparseMappingTable;->-get1(Lcom/android/internal/app/procstats/SparseMappingTable;)I
+HPLcom/android/internal/app/procstats/SparseMappingTable;->-set0(Lcom/android/internal/app/procstats/SparseMappingTable;I)I
+HPLcom/android/internal/app/procstats/SparseMappingTable;->getArrayFromKey(I)I
+HPLcom/android/internal/app/procstats/SparseMappingTable;->getIdFromKey(I)B
+HPLcom/android/internal/app/procstats/SparseMappingTable;->getIndexFromKey(I)I
+HPLcom/android/internal/app/procstats/SparseMappingTable;->writeCompactedLongArray(Landroid/os/Parcel;[JI)V
+HPLcom/android/internal/app/procstats/SparseMappingTable;->writeToParcel(Landroid/os/Parcel;)V
+HPLcom/android/internal/app/procstats/SysMemUsageTable;->mergeStats(I[JI)V
+HPLcom/android/internal/app/procstats/SysMemUsageTable;->mergeSysMemUsage([JI[JI)V
+HPLcom/android/internal/appwidget/IAppWidgetHost$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/appwidget/IAppWidgetHost$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/appwidget/IAppWidgetHost;
+HPLcom/android/internal/appwidget/IAppWidgetService$Stub;-><init>()V
+HPLcom/android/internal/appwidget/IAppWidgetService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/backup/IBackupTransport$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->getCurrentRestoreSet()J
+HPLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->name()Ljava/lang/String;
+HPLcom/android/internal/backup/IBackupTransport$Stub$Proxy;->transportDirName()Ljava/lang/String;
+HPLcom/android/internal/backup/IBackupTransport$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/backup/IBackupTransport;
+HPLcom/android/internal/backup/LocalTransport;-><init>(Landroid/content/Context;)V
+HPLcom/android/internal/backup/LocalTransport;->makeDataDirs()V
+HPLcom/android/internal/backup/LocalTransport;->name()Ljava/lang/String;
+HPLcom/android/internal/backup/LocalTransport;->transportDirName()Ljava/lang/String;
+HPLcom/android/internal/backup/LocalTransportService;-><init>()V
+HPLcom/android/internal/backup/LocalTransportService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HPLcom/android/internal/backup/LocalTransportService;->onCreate()V
+HPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->toString()Ljava/lang/String;
+HPLcom/android/internal/colorextraction/ColorExtractor;->onColorsChanged(Landroid/app/WallpaperColors;I)V
+HPLcom/android/internal/colorextraction/ColorExtractor;->triggerColorsChanged(I)V
+HPLcom/android/internal/colorextraction/drawable/GradientDrawable$1;->onAnimationEnd(Landroid/animation/Animator;Z)V
+HPLcom/android/internal/colorextraction/drawable/GradientDrawable;->-get0(Lcom/android/internal/colorextraction/drawable/GradientDrawable;)Landroid/animation/ValueAnimator;
+HPLcom/android/internal/colorextraction/drawable/GradientDrawable;->-set0(Lcom/android/internal/colorextraction/drawable/GradientDrawable;Landroid/animation/ValueAnimator;)Landroid/animation/ValueAnimator;
+HPLcom/android/internal/colorextraction/drawable/GradientDrawable;->draw(Landroid/graphics/Canvas;)V
+HPLcom/android/internal/colorextraction/drawable/GradientDrawable;->getAlpha()I
+HPLcom/android/internal/content/NativeLibraryHelper$Handle;-><init>([JZZZ)V
+HPLcom/android/internal/content/NativeLibraryHelper$Handle;->close()V
+HPLcom/android/internal/content/NativeLibraryHelper$Handle;->create(Landroid/content/pm/PackageParser$Package;)Lcom/android/internal/content/NativeLibraryHelper$Handle;
+HPLcom/android/internal/content/NativeLibraryHelper$Handle;->create(Landroid/content/pm/PackageParser$PackageLite;)Lcom/android/internal/content/NativeLibraryHelper$Handle;
+HPLcom/android/internal/content/NativeLibraryHelper$Handle;->create(Ljava/io/File;)Lcom/android/internal/content/NativeLibraryHelper$Handle;
+HPLcom/android/internal/content/NativeLibraryHelper$Handle;->create(Ljava/util/List;ZZZ)Lcom/android/internal/content/NativeLibraryHelper$Handle;
+HPLcom/android/internal/content/NativeLibraryHelper$Handle;->finalize()V
+HPLcom/android/internal/content/NativeLibraryHelper;->-wrap0(Ljava/lang/String;)J
+HPLcom/android/internal/content/NativeLibraryHelper;->-wrap1(J)V
+HPLcom/android/internal/content/NativeLibraryHelper;->copyNativeBinaries(Lcom/android/internal/content/NativeLibraryHelper$Handle;Ljava/io/File;Ljava/lang/String;)I
+HPLcom/android/internal/content/NativeLibraryHelper;->copyNativeBinariesForSupportedAbi(Lcom/android/internal/content/NativeLibraryHelper$Handle;Ljava/io/File;[Ljava/lang/String;Z)I
+HPLcom/android/internal/content/NativeLibraryHelper;->copyNativeBinariesWithOverride(Lcom/android/internal/content/NativeLibraryHelper$Handle;Ljava/io/File;Ljava/lang/String;)I
+HPLcom/android/internal/content/NativeLibraryHelper;->createNativeLibrarySubdir(Ljava/io/File;)V
+HPLcom/android/internal/content/NativeLibraryHelper;->findSupportedAbi(Lcom/android/internal/content/NativeLibraryHelper$Handle;[Ljava/lang/String;)I
+HPLcom/android/internal/content/NativeLibraryHelper;->hasRenderscriptBitcode(Lcom/android/internal/content/NativeLibraryHelper$Handle;)Z
+HPLcom/android/internal/content/NativeLibraryHelper;->removeNativeBinariesFromDirLI(Ljava/io/File;Z)V
+HPLcom/android/internal/content/PackageHelper$1;-><init>()V
+HPLcom/android/internal/content/PackageHelper$1;->getAllow3rdPartyOnInternalConfig(Landroid/content/Context;)Z
+HPLcom/android/internal/content/PackageHelper$1;->getDataDirectory()Ljava/io/File;
+HPLcom/android/internal/content/PackageHelper$1;->getExistingAppInfo(Landroid/content/Context;Ljava/lang/String;)Landroid/content/pm/ApplicationInfo;
+HPLcom/android/internal/content/PackageHelper$1;->getForceAllowOnExternalSetting(Landroid/content/Context;)Z
+HPLcom/android/internal/content/PackageHelper$1;->getStorageManager(Landroid/content/Context;)Landroid/os/storage/StorageManager;
+HPLcom/android/internal/content/PackageHelper$TestableInterface;-><init>()V
+HPLcom/android/internal/content/PackageHelper$TestableInterface;->fitsOnInternalStorage(Landroid/content/Context;Landroid/content/pm/PackageInstaller$SessionParams;)Z
+HPLcom/android/internal/content/PackageHelper$TestableInterface;->getAllow3rdPartyOnInternalConfig(Landroid/content/Context;)Z
+HPLcom/android/internal/content/PackageHelper$TestableInterface;->getDataDirectory()Ljava/io/File;
+HPLcom/android/internal/content/PackageHelper$TestableInterface;->getExistingAppInfo(Landroid/content/Context;Ljava/lang/String;)Landroid/content/pm/ApplicationInfo;
+HPLcom/android/internal/content/PackageHelper$TestableInterface;->getForceAllowOnExternalSetting(Landroid/content/Context;)Z
+HPLcom/android/internal/content/PackageHelper$TestableInterface;->getStorageManager(Landroid/content/Context;)Landroid/os/storage/StorageManager;
+HPLcom/android/internal/content/PackageHelper;->getDefaultTestableInterface()Lcom/android/internal/content/PackageHelper$TestableInterface;
+HPLcom/android/internal/content/PackageHelper;->getSecureContainerList()[Ljava/lang/String;
+HPLcom/android/internal/content/PackageHelper;->getStorageManager()Landroid/os/storage/IStorageManager;
+HPLcom/android/internal/content/PackageHelper;->resolveInstallVolume(Landroid/content/Context;Landroid/content/pm/PackageInstaller$SessionParams;)Ljava/lang/String;
+HPLcom/android/internal/content/PackageHelper;->resolveInstallVolume(Landroid/content/Context;Landroid/content/pm/PackageInstaller$SessionParams;Lcom/android/internal/content/PackageHelper$TestableInterface;)Ljava/lang/String;
+HPLcom/android/internal/content/PackageHelper;->resolveInstallVolume(Landroid/content/Context;Ljava/lang/String;IJLcom/android/internal/content/PackageHelper$TestableInterface;)Ljava/lang/String;
+HPLcom/android/internal/content/PackageHelper;->translateAllocateFlags(I)I
+HPLcom/android/internal/content/PackageMonitor;->didSomePackagesChange()Z
+HPLcom/android/internal/content/PackageMonitor;->getChangingUserId()I
+HPLcom/android/internal/content/PackageMonitor;->getPackageName(Landroid/content/Intent;)Ljava/lang/String;
+HPLcom/android/internal/content/PackageMonitor;->isComponentModified(Ljava/lang/String;)Z
+HPLcom/android/internal/content/PackageMonitor;->isPackageAppearing(Ljava/lang/String;)I
+HPLcom/android/internal/content/PackageMonitor;->isPackageDisappearing(Ljava/lang/String;)I
+HPLcom/android/internal/content/PackageMonitor;->isPackageModified(Ljava/lang/String;)Z
+HPLcom/android/internal/content/PackageMonitor;->onBeginPackageChanges()V
+HPLcom/android/internal/content/PackageMonitor;->onFinishPackageChanges()V
+HPLcom/android/internal/content/PackageMonitor;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+HPLcom/android/internal/content/PackageMonitor;->onPackageAppeared(Ljava/lang/String;I)V
+HPLcom/android/internal/content/PackageMonitor;->onPackageChanged(Ljava/lang/String;I[Ljava/lang/String;)Z
+HPLcom/android/internal/content/PackageMonitor;->onPackageDisappeared(Ljava/lang/String;I)V
+HPLcom/android/internal/content/PackageMonitor;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/internal/content/PackageMonitor;->onPackageUpdateFinished(Ljava/lang/String;I)V
+HPLcom/android/internal/content/PackageMonitor;->onPackageUpdateStarted(Ljava/lang/String;I)V
+HPLcom/android/internal/content/PackageMonitor;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/internal/content/PackageMonitor;->onSomePackagesChanged()V
+HPLcom/android/internal/content/PackageMonitor;->register(Landroid/content/Context;Landroid/os/Looper;Z)V
+HPLcom/android/internal/content/ReferrerIntent;-><init>(Landroid/content/Intent;Ljava/lang/String;)V
+HPLcom/android/internal/content/ReferrerIntent;->writeToParcel(Landroid/os/Parcel;I)V
+HPLcom/android/internal/hardware/AmbientDisplayConfiguration;->alwaysOnAvailable()Z
+HPLcom/android/internal/hardware/AmbientDisplayConfiguration;->alwaysOnDisplayAvailable()Z
+HPLcom/android/internal/hardware/AmbientDisplayConfiguration;->alwaysOnDisplayDebuggingEnabled()Z
+HPLcom/android/internal/hardware/AmbientDisplayConfiguration;->alwaysOnEnabled(I)Z
+HPLcom/android/internal/hardware/AmbientDisplayConfiguration;->ambientDisplayAvailable()Z
+HPLcom/android/internal/hardware/AmbientDisplayConfiguration;->ambientDisplayComponent()Ljava/lang/String;
+HPLcom/android/internal/hardware/AmbientDisplayConfiguration;->boolSetting(Ljava/lang/String;II)Z
+HPLcom/android/internal/hardware/AmbientDisplayConfiguration;->boolSettingDefaultOn(Ljava/lang/String;I)Z
+HPLcom/android/internal/hardware/AmbientDisplayConfiguration;->enabled(I)Z
+HPLcom/android/internal/hardware/AmbientDisplayConfiguration;->pulseOnNotificationAvailable()Z
+HPLcom/android/internal/hardware/AmbientDisplayConfiguration;->pulseOnNotificationEnabled(I)Z
+HPLcom/android/internal/inputmethod/InputMethodSubtypeHandle;-><init>(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)V
+HPLcom/android/internal/inputmethod/InputMethodSubtypeHandle;->equals(Ljava/lang/Object;)Z
+HPLcom/android/internal/inputmethod/InputMethodSubtypeHandle;->getInputMethodId()Ljava/lang/String;
+HPLcom/android/internal/inputmethod/InputMethodSubtypeHandle;->getSubtypeId()I
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;-><init>(Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$StaticRotationList;)V
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;->createFrom(Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;Ljava/util/List;)Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;->filterImeSubtypeList(Ljava/util/List;Z)Ljava/util/List;
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;->getNextInputMethod(ZLandroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;Z)Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;->onUserActionLocked(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)V
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;->-get0(Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;)Ljava/util/List;
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;-><init>(Ljava/util/List;)V
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;-><init>(Ljava/util/List;Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;)V
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;->getNextInputMethodLocked(ZLandroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;Z)Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;->getUsageRank(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)I
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;->onUserAction(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)V
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;-><init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/view/inputmethod/InputMethodInfo;ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;->equals(Ljava/lang/Object;)Z
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList$1;-><init>(Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList;)V
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList$1;->compare(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodInfo;)I
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList;->-get0(Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList;)Landroid/content/pm/PackageManager;
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList;-><init>(Landroid/content/Context;Lcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;)V
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList;->getSortedInputMethodAndSubtypeList(ZZ)Ljava/util/List;
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$StaticRotationList;->-get0(Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$StaticRotationList;)Ljava/util/List;
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$StaticRotationList;-><init>(Ljava/util/List;)V
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController;->-wrap0(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)I
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController;-><init>(Lcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;Landroid/content/Context;)V
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController;->calculateSubtypeId(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)I
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController;->createInstanceLocked(Lcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;Landroid/content/Context;)Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController;
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController;->getNextInputMethodLocked(ZLandroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;Z)Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController;->onUserActionLocked(Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)V
+HPLcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController;->resetCircularListLocked(Landroid/content/Context;)V
+HPLcom/android/internal/inputmethod/InputMethodUtils$1;-><init>()V
+HPLcom/android/internal/inputmethod/InputMethodUtils$1;->get(Landroid/view/inputmethod/InputMethodSubtype;)Ljava/util/Locale;
+HPLcom/android/internal/inputmethod/InputMethodUtils$1;->get(Ljava/lang/Object;)Ljava/util/Locale;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodListBuilder;-><init>()V
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodListBuilder;-><init>(Lcom/android/internal/inputmethod/InputMethodUtils$InputMethodListBuilder;)V
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodListBuilder;->build()Ljava/util/ArrayList;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodListBuilder;->fillAuxiliaryImes(Ljava/util/ArrayList;Landroid/content/Context;)Lcom/android/internal/inputmethod/InputMethodUtils$InputMethodListBuilder;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodListBuilder;->fillImes(Ljava/util/ArrayList;Landroid/content/Context;ZLjava/util/Locale;ZLjava/lang/String;)Lcom/android/internal/inputmethod/InputMethodUtils$InputMethodListBuilder;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodListBuilder;->isEmpty()Z
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;-><init>(Landroid/content/res/Resources;Landroid/content/ContentResolver;Ljava/util/HashMap;Ljava/util/ArrayList;IZ)V
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->addSubtypeToHistory(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->buildInputMethodsAndSubtypeList(Ljava/lang/String;Landroid/text/TextUtils$SimpleStringSplitter;Landroid/text/TextUtils$SimpleStringSplitter;)Ljava/util/List;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->createEnabledInputMethodListLocked(Ljava/util/List;)Ljava/util/ArrayList;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getBoolean(Ljava/lang/String;Z)Z
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getCurrentUserId()I
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodListLocked()Ljava/util/ArrayList;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodSubtypeListLocked(Landroid/content/Context;Landroid/view/inputmethod/InputMethodInfo;Z)Ljava/util/List;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodSubtypeListLocked(Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/List;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodsAndSubtypeListLocked()Ljava/util/List;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodsStr()Ljava/lang/String;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getExplicitlyOrImplicitlyEnabledInputMethodsAndSubtypeListLocked(Landroid/content/Context;)Ljava/util/HashMap;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getInt(Ljava/lang/String;I)I
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getSelectedInputMethod()Ljava/lang/String;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getSelectedInputMethodSubtypeHashCode()I
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getSelectedInputMethodSubtypeId(Ljava/lang/String;)I
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->getSubtypeHistoryStr()Ljava/lang/String;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->isCurrentProfile(I)Z
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->isShowImeWithHardKeyboardEnabled()Z
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->isSubtypeSelected()Z
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->loadInputMethodAndSubtypeHistoryLocked()Ljava/util/List;
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->putInt(Ljava/lang/String;I)V
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->putSelectedInputMethod(Ljava/lang/String;)V
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->putSelectedSubtype(I)V
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->putString(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->putSubtypeHistoryStr(Ljava/lang/String;)V
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->saveCurrentInputMethodAndSubtypeToHistory(Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->saveSubtypeHistory(Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->setCurrentProfileIds([I)V
+HPLcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;->switchCurrentUser(IZ)V
+HPLcom/android/internal/inputmethod/InputMethodUtils;->-get0()Ljava/lang/String;
+HPLcom/android/internal/inputmethod/InputMethodUtils;->-wrap0(Landroid/view/inputmethod/InputMethodInfo;Landroid/content/Context;Z)Z
+HPLcom/android/internal/inputmethod/InputMethodUtils;->canAddToLastInputMethod(Landroid/view/inputmethod/InputMethodSubtype;)Z
+HPLcom/android/internal/inputmethod/InputMethodUtils;->checkIfPackageBelongsToUid(Landroid/app/AppOpsManager;ILjava/lang/String;)Z
+HPLcom/android/internal/inputmethod/InputMethodUtils;->constructLocaleFromString(Ljava/lang/String;)Ljava/util/Locale;
+HPLcom/android/internal/inputmethod/InputMethodUtils;->containsSubtypeOf(Landroid/view/inputmethod/InputMethodInfo;Ljava/util/Locale;ZLjava/lang/String;)Z
+HPLcom/android/internal/inputmethod/InputMethodUtils;->getDefaultEnabledImes(Landroid/content/Context;Ljava/util/ArrayList;)Ljava/util/ArrayList;
+HPLcom/android/internal/inputmethod/InputMethodUtils;->getFallbackLocaleForDefaultIme(Ljava/util/ArrayList;Landroid/content/Context;)Ljava/util/Locale;
+HPLcom/android/internal/inputmethod/InputMethodUtils;->getImplicitlyApplicableSubtypesLocked(Landroid/content/res/Resources;Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/ArrayList;
+HPLcom/android/internal/inputmethod/InputMethodUtils;->getImplicitlyApplicableSubtypesLockedImpl(Landroid/content/res/Resources;Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/ArrayList;
+HPLcom/android/internal/inputmethod/InputMethodUtils;->getMinimumKeyboardSetWithSystemLocale(Ljava/util/ArrayList;Landroid/content/Context;Ljava/util/Locale;Ljava/util/Locale;)Lcom/android/internal/inputmethod/InputMethodUtils$InputMethodListBuilder;
+HPLcom/android/internal/inputmethod/InputMethodUtils;->getSubtypeIdFromHashCode(Landroid/view/inputmethod/InputMethodInfo;I)I
+HPLcom/android/internal/inputmethod/InputMethodUtils;->getSubtypes(Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/ArrayList;
+HPLcom/android/internal/inputmethod/InputMethodUtils;->getSystemLocaleFromContext(Landroid/content/Context;)Ljava/util/Locale;
+HPLcom/android/internal/inputmethod/InputMethodUtils;->isSystemAuxilialyImeThatHasAutomaticSubtype(Landroid/view/inputmethod/InputMethodInfo;Landroid/content/Context;Z)Z
+HPLcom/android/internal/inputmethod/InputMethodUtils;->isSystemIme(Landroid/view/inputmethod/InputMethodInfo;)Z
+HPLcom/android/internal/inputmethod/InputMethodUtils;->isSystemImeThatHasSubtypeOf(Landroid/view/inputmethod/InputMethodInfo;Landroid/content/Context;ZLjava/util/Locale;ZLjava/lang/String;)Z
+HPLcom/android/internal/inputmethod/InputMethodUtils;->isValidSubtypeId(Landroid/view/inputmethod/InputMethodInfo;I)Z
+HPLcom/android/internal/inputmethod/InputMethodUtils;->setDisabledUntilUsed(Landroid/content/pm/IPackageManager;Ljava/lang/String;ILjava/lang/String;)V
+HPLcom/android/internal/inputmethod/InputMethodUtils;->setNonSelectedSystemImesDisabledUntilUsed(Landroid/content/pm/IPackageManager;Ljava/util/List;ILjava/lang/String;)V
+HPLcom/android/internal/inputmethod/LocaleUtils$LocaleExtractor;->get(Ljava/lang/Object;)Ljava/util/Locale;
+HPLcom/android/internal/inputmethod/LocaleUtils$ScoreEntry;-><init>([BI)V
+HPLcom/android/internal/inputmethod/LocaleUtils$ScoreEntry;->compare([B[B)I
+HPLcom/android/internal/inputmethod/LocaleUtils$ScoreEntry;->set([BI)V
+HPLcom/android/internal/inputmethod/LocaleUtils$ScoreEntry;->updateIfBetter([BI)V
+HPLcom/android/internal/inputmethod/LocaleUtils;->calculateMatchingSubScore(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)B
+HPLcom/android/internal/inputmethod/LocaleUtils;->filterByLanguage(Ljava/util/List;Lcom/android/internal/inputmethod/LocaleUtils$LocaleExtractor;Landroid/os/LocaleList;Ljava/util/ArrayList;)V
+HPLcom/android/internal/location/GpsNetInitiatedHandler$1;-><init>(Lcom/android/internal/location/GpsNetInitiatedHandler;)V
+HPLcom/android/internal/location/GpsNetInitiatedHandler$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/internal/location/GpsNetInitiatedHandler$2;-><init>(Lcom/android/internal/location/GpsNetInitiatedHandler;)V
+HPLcom/android/internal/location/GpsNetInitiatedHandler;-><init>(Landroid/content/Context;Landroid/location/INetInitiatedListener;Z)V
+HPLcom/android/internal/location/GpsNetInitiatedHandler;->getInEmergency()Z
+HPLcom/android/internal/location/GpsNetInitiatedHandler;->getLocationEnabled()Z
+HPLcom/android/internal/location/GpsNetInitiatedHandler;->setInEmergency(Z)V
+HPLcom/android/internal/location/GpsNetInitiatedHandler;->setSuplEsEnabled(Z)V
+HPLcom/android/internal/location/GpsNetInitiatedHandler;->updateLocationMode()V
+HPLcom/android/internal/location/ILocationProvider$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/location/ILocationProvider$Stub$Proxy;->enable()V
+HPLcom/android/internal/location/ILocationProvider$Stub$Proxy;->getProperties()Lcom/android/internal/location/ProviderProperties;
+HPLcom/android/internal/location/ILocationProvider$Stub$Proxy;->getStatus(Landroid/os/Bundle;)I
+HPLcom/android/internal/location/ILocationProvider$Stub$Proxy;->getStatusUpdateTime()J
+HPLcom/android/internal/location/ILocationProvider$Stub$Proxy;->setRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
+HPLcom/android/internal/location/ILocationProvider$Stub;-><init>()V
+HPLcom/android/internal/location/ILocationProvider$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/location/ILocationProvider;
+HPLcom/android/internal/location/ILocationProvider$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/location/ILocationProvider;->disable()V
+HPLcom/android/internal/location/ILocationProvider;->enable()V
+HPLcom/android/internal/location/ILocationProvider;->getProperties()Lcom/android/internal/location/ProviderProperties;
+HPLcom/android/internal/location/ILocationProvider;->getStatus(Landroid/os/Bundle;)I
+HPLcom/android/internal/location/ILocationProvider;->getStatusUpdateTime()J
+HPLcom/android/internal/location/ILocationProvider;->sendExtraCommand(Ljava/lang/String;Landroid/os/Bundle;)Z
+HPLcom/android/internal/location/ILocationProvider;->setRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
+HPLcom/android/internal/location/ProviderProperties$1;-><init>()V
+HPLcom/android/internal/location/ProviderProperties$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/location/ProviderProperties;
+HPLcom/android/internal/location/ProviderProperties$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLcom/android/internal/location/ProviderProperties;-><init>(ZZZZZZZII)V
+HPLcom/android/internal/location/ProviderProperties;->writeToParcel(Landroid/os/Parcel;I)V
+HPLcom/android/internal/location/ProviderRequest$1;-><init>()V
+HPLcom/android/internal/location/ProviderRequest$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/location/ProviderRequest;
+HPLcom/android/internal/location/ProviderRequest$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLcom/android/internal/location/ProviderRequest;-><init>()V
+HPLcom/android/internal/location/ProviderRequest;->writeToParcel(Landroid/os/Parcel;I)V
+HPLcom/android/internal/location/gnssmetrics/GnssMetrics$Statistics;-><init>(Lcom/android/internal/location/gnssmetrics/GnssMetrics;)V
+HPLcom/android/internal/location/gnssmetrics/GnssMetrics$Statistics;-><init>(Lcom/android/internal/location/gnssmetrics/GnssMetrics;Lcom/android/internal/location/gnssmetrics/GnssMetrics$Statistics;)V
+HPLcom/android/internal/location/gnssmetrics/GnssMetrics$Statistics;->addItem(D)V
+HPLcom/android/internal/location/gnssmetrics/GnssMetrics$Statistics;->reset()V
+HPLcom/android/internal/location/gnssmetrics/GnssMetrics;-><init>()V
+HPLcom/android/internal/location/gnssmetrics/GnssMetrics;->logCn0([FI)V
+HPLcom/android/internal/location/gnssmetrics/GnssMetrics;->reset()V
+HPLcom/android/internal/logging/EventLogTags;->writeSysuiCount(Ljava/lang/String;I)V
+HPLcom/android/internal/logging/EventLogTags;->writeSysuiHistogram(Ljava/lang/String;I)V
+HPLcom/android/internal/logging/EventLogTags;->writeSysuiViewVisibility(II)V
+HPLcom/android/internal/logging/MetricsLogger;->count(Landroid/content/Context;Ljava/lang/String;I)V
+HPLcom/android/internal/logging/MetricsLogger;->count(Ljava/lang/String;I)V
+HPLcom/android/internal/logging/MetricsLogger;->hidden(I)V
+HPLcom/android/internal/logging/MetricsLogger;->hidden(Landroid/content/Context;I)V
+HPLcom/android/internal/logging/MetricsLogger;->histogram(Landroid/content/Context;Ljava/lang/String;I)V
+HPLcom/android/internal/logging/MetricsLogger;->histogram(Ljava/lang/String;I)V
+HPLcom/android/internal/logging/MetricsLogger;->visibility(IZ)V
+HPLcom/android/internal/logging/MetricsLogger;->visible(I)V
+HPLcom/android/internal/logging/MetricsLogger;->visible(Landroid/content/Context;I)V
+HPLcom/android/internal/net/NetworkStatsFactory;->readNetworkStatsDetail(I[Ljava/lang/String;ILandroid/net/NetworkStats;)Landroid/net/NetworkStats;
+HPLcom/android/internal/net/NetworkStatsFactory;->readNetworkStatsDetailInternal(I[Ljava/lang/String;ILandroid/net/NetworkStats;)Landroid/net/NetworkStats;
+HPLcom/android/internal/net/NetworkStatsFactory;->readNetworkStatsSummaryDev()Landroid/net/NetworkStats;
+HPLcom/android/internal/net/NetworkStatsFactory;->readNetworkStatsSummaryXt()Landroid/net/NetworkStats;
+HPLcom/android/internal/notification/SystemNotificationChannels;->createAll(Landroid/content/Context;)V
+HPLcom/android/internal/notification/SystemNotificationChannels;->newAccountChannel(Landroid/content/Context;)Landroid/app/NotificationChannel;
+HPLcom/android/internal/os/AtomicFile;->exists()Z
+HPLcom/android/internal/os/AtomicFile;->finishWrite(Ljava/io/FileOutputStream;)V
+HPLcom/android/internal/os/AtomicFile;->readFully()[B
+HPLcom/android/internal/os/AtomicFile;->startWrite()Ljava/io/FileOutputStream;
+HPLcom/android/internal/os/BatterySipper$DrainType;-><init>(Ljava/lang/String;I)V
+HPLcom/android/internal/os/BatterySipper$DrainType;->values()[Lcom/android/internal/os/BatterySipper$DrainType;
+HPLcom/android/internal/os/BatterySipper;-><init>(Lcom/android/internal/os/BatterySipper$DrainType;Landroid/os/BatteryStats$Uid;D)V
+HPLcom/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
+HPLcom/android/internal/os/BatteryStatsHelper$1;-><init>(Lcom/android/internal/os/BatteryStatsHelper;)V
+HPLcom/android/internal/os/BatteryStatsHelper;->addBluetoothUsage()V
+HPLcom/android/internal/os/BatteryStatsHelper;->addEntry(Lcom/android/internal/os/BatterySipper$DrainType;JD)Lcom/android/internal/os/BatterySipper;
+HPLcom/android/internal/os/BatteryStatsHelper;->addIdleUsage()V
+HPLcom/android/internal/os/BatteryStatsHelper;->addMemoryUsage()V
+HPLcom/android/internal/os/BatteryStatsHelper;->addPhoneUsage()V
+HPLcom/android/internal/os/BatteryStatsHelper;->addRadioUsage()V
+HPLcom/android/internal/os/BatteryStatsHelper;->addScreenUsage()V
+HPLcom/android/internal/os/BatteryStatsHelper;->addUserUsage()V
+HPLcom/android/internal/os/BatteryStatsHelper;->addWiFiUsage()V
+HPLcom/android/internal/os/BatteryStatsHelper;->aggregateSippers(Lcom/android/internal/os/BatterySipper;Ljava/util/List;Ljava/lang/String;)V
+HPLcom/android/internal/os/BatteryStatsHelper;->checkHasBluetoothPowerReporting(Landroid/os/BatteryStats;Lcom/android/internal/os/PowerProfile;)Z
+HPLcom/android/internal/os/BatteryStatsHelper;->checkHasWifiPowerReporting(Landroid/os/BatteryStats;Lcom/android/internal/os/PowerProfile;)Z
+HPLcom/android/internal/os/BatteryStatsHelper;->convertMsToUs(J)J
+HPLcom/android/internal/os/BatteryStatsHelper;->convertUsToMs(J)J
+HPLcom/android/internal/os/BatteryStatsHelper;->create(Landroid/os/BatteryStats;)V
+HPLcom/android/internal/os/BatteryStatsHelper;->getComputedPower()D
+HPLcom/android/internal/os/BatteryStatsHelper;->getForegroundActivityTotalTimeUs(Landroid/os/BatteryStats$Uid;J)J
+HPLcom/android/internal/os/BatteryStatsHelper;->getMaxDrainedPower()D
+HPLcom/android/internal/os/BatteryStatsHelper;->getMinDrainedPower()D
+HPLcom/android/internal/os/BatteryStatsHelper;->getMobilemsppList()Ljava/util/List;
+HPLcom/android/internal/os/BatteryStatsHelper;->getPowerProfile()Lcom/android/internal/os/PowerProfile;
+HPLcom/android/internal/os/BatteryStatsHelper;->getProcessForegroundTimeMs(Landroid/os/BatteryStats$Uid;I)J
+HPLcom/android/internal/os/BatteryStatsHelper;->getTotalPower()D
+HPLcom/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
+HPLcom/android/internal/os/BatteryStatsHelper;->processMiscUsage()V
+HPLcom/android/internal/os/BatteryStatsHelper;->refreshStats(II)V
+HPLcom/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
+HPLcom/android/internal/os/BatteryStatsImpl$3;-><init>(Lcom/android/internal/os/BatteryStatsImpl;ILandroid/util/SparseLongArray;)V
+HPLcom/android/internal/os/BatteryStatsImpl$3;->onUidCpuTime(IJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$4;-><init>(Lcom/android/internal/os/BatteryStatsImpl;)V
+HPLcom/android/internal/os/BatteryStatsImpl$4;->onCpuFreqs([J)V
+HPLcom/android/internal/os/BatteryStatsImpl$4;->onUidCpuFreqTime(I[J)V
+HPLcom/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
+HPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Lcom/android/internal/os/BatteryStatsImpl$Uid;ILcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)V
+HPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->abortLastDuration(Lcom/android/internal/os/BatteryStatsImpl;)V
+HPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->addDuration(Lcom/android/internal/os/BatteryStatsImpl;J)V
+HPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->computeCurrentCountLocked()I
+HPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->computeOverage(J)J
+HPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->computeRunTimeLocked(J)J
+HPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->onTimeStopped(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->recomputeLastDuration(JZ)V
+HPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->reset(Z)Z
+HPLcom/android/internal/os/BatteryStatsImpl$BatchTimer;->writeToParcel(Landroid/os/Parcel;J)V
+HPLcom/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;->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;
+HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getTxTimeCounters()[Landroid/os/BatteryStats$LongCounter;
+HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->getTxTimeCounters()[Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
+HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->reset(Z)V
+HPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->writeToParcel(Landroid/os/Parcel;I)V
+HPLcom/android/internal/os/BatteryStatsImpl$Counter;->addAtomic(I)V
+HPLcom/android/internal/os/BatteryStatsImpl$Counter;->getCountLocked(I)I
+HPLcom/android/internal/os/BatteryStatsImpl$Counter;->onTimeStarted(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$Counter;->onTimeStopped(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$Counter;->reset(Z)V
+HPLcom/android/internal/os/BatteryStatsImpl$Counter;->stepAtomic()V
+HPLcom/android/internal/os/BatteryStatsImpl$Counter;->writeToParcel(Landroid/os/Parcel;)V
+HPLcom/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;
+HPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->reset(Z)Z
+HPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->startRunningLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->stopRunningLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->writeToParcel(Landroid/os/Parcel;J)V
+HPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->onTimeStarted(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->onTimeStopped(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->reset(Z)Z
+HPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->startRunningLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->stopRunningLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->writeToParcel(Landroid/os/Parcel;J)V
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->addCountLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->detach()V
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->getCountLocked(I)J
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->onTimeStarted(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->onTimeStopped(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->writeToParcel(Landroid/os/Parcel;)V
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->addCountLocked([J)V
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->detach()V
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->fillArray([JJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->getCountsLocked(I)[J
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->getSize()I
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->onTimeStarted(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->onTimeStopped(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->reset(Z)V
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->writeToParcel(Landroid/os/Parcel;)V
+HPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->writeToParcel(Landroid/os/Parcel;Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;)V
+HPLcom/android/internal/os/BatteryStatsImpl$MyHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;->cleanup()V
+HPLcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;->startObject(Ljava/lang/String;)Ljava/lang/Object;
+HPLcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;->stopObject(Ljava/lang/String;)Ljava/lang/Object;
+HPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->writeToParcel(Landroid/os/Parcel;J)V
+HPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->detach()V
+HPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->isRunningLocked()Z
+HPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->onTimeStopped(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->refreshTimersLocked(JLjava/util/ArrayList;Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;)J
+HPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->reset(Z)Z
+HPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->setMark(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->startRunningLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->stopRunningLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->writeToParcel(Landroid/os/Parcel;J)V
+HPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->remove(Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;)V
+HPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->reset(JJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->setRunning(ZJJ)Z
+HPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->writeToParcel(Landroid/os/Parcel;JJ)V
+HPLcom/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
+HPLcom/android/internal/os/BatteryStatsImpl$Timer;->onTimeStarted(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$Timer;->onTimeStopped(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$Timer;->reset(Z)Z
+HPLcom/android/internal/os/BatteryStatsImpl$Timer;->writeTimerToParcel(Landroid/os/Parcel;Lcom/android/internal/os/BatteryStatsImpl$Timer;J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Timer;->writeToParcel(Landroid/os/Parcel;J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$1;->instantiateObject()Lcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$1;->instantiateObject()Ljava/lang/Object;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->detach()V
+HPLcom/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
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->getStarts(I)I
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->onTimeStopped(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->startLaunchedLocked()V
+HPLcom/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
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->writeToParcelLocked(Landroid/os/Parcel;)V
+HPLcom/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;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;->noteWakeupAlarmLocked(Ljava/lang/String;)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;->writeToParcelLocked(Landroid/os/Parcel;)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->addCpuTimeLocked(II)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->addExcessiveCpu(JJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->addForegroundTimeLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->countExcessivePowers()I
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->detach()V
+HPLcom/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;->incStartsLocked()V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->isActive()Z
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->onTimeStopped(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->writeToParcelLocked(Landroid/os/Parcel;)V
+HPLcom/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;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;->reset()Z
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;->writeToParcelLocked(Landroid/os/Parcel;J)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;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;->reset()Z
+HPLcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;->writeToParcelLocked(Landroid/os/Parcel;J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->createCameraTurnedOnTimerLocked()Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->createVibratorOnTimerLocked()Lcom/android/internal/os/BatteryStatsImpl$BatchTimer;
+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;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothScanBackgroundTimer()Landroid/os/BatteryStats$Timer;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothScanBackgroundTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothScanResultBgCounter()Landroid/os/BatteryStats$Counter;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothScanResultBgCounter()Lcom/android/internal/os/BatteryStatsImpl$Counter;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothScanResultCounter()Landroid/os/BatteryStats$Counter;
+HPLcom/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;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothUnoptimizedScanBackgroundTimer()Landroid/os/BatteryStats$Timer;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothUnoptimizedScanBackgroundTimer()Lcom/android/internal/os/BatteryStatsImpl$Timer;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getBluetoothUnoptimizedScanTimer()Landroid/os/BatteryStats$Timer;
+HPLcom/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;->getCpuFreqTimes(I)[J
+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;->getNetworkActivityBytes(II)J
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getNetworkActivityPackets(II)J
+HPLcom/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;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getPidStatsLocked(I)Landroid/os/BatteryStats$Uid$Pid;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getProcessStateTime(IJI)J
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getProcessStats()Landroid/util/ArrayMap;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getScreenOffCpuFreqTimes(I)[J
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getSensorStats()Landroid/util/SparseArray;
+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;
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
+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
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiScanCount(I)I
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWifiScanTime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->hasUserActivity()Z
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->initNetworkActivityLocked()V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->isInBackground()Z
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteActivityPausedLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteActivityResumedLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteAudioTurnedOffLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteAudioTurnedOnLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteBluetoothScanResultsLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteBluetoothScanStartedLocked(JZ)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteBluetoothScanStoppedLocked(JZ)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteCameraTurnedOffLocked(J)V
+HPLcom/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
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteFullWifiLockAcquiredLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteFullWifiLockReleasedLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteNetworkActivityLocked(IJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStartGps(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStartJobLocked(Ljava/lang/String;J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStartSensor(IJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStartSyncLocked(Ljava/lang/String;J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStartWakeLocked(ILjava/lang/String;IJ)V
+HPLcom/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
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStopSyncLocked(Ljava/lang/String;J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteStopWakeLocked(ILjava/lang/String;IJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteUserActivityLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteVibratorOffLocked()V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteVibratorOnLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteWifiMulticastDisabledLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteWifiMulticastEnabledLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteWifiRadioApWakeupLocked()V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteWifiScanStartedLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->noteWifiScanStoppedLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->reportExcessiveCpuLocked(Ljava/lang/String;JJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->reset(JJ)Z
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->updateOnBatteryBgTimeBase(JJ)Z
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->updateOnBatteryScreenOffBgTimeBase(JJ)Z
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->updateUidProcessStateLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl$Uid;->writeToParcelLocked(Landroid/os/Parcel;JJ)V
+HPLcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;->-wrap0(Lcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;I)Z
+HPLcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;->exists(I)Z
+HPLcom/android/internal/os/BatteryStatsImpl;->-get0()I
+HPLcom/android/internal/os/BatteryStatsImpl;->-get1(Lcom/android/internal/os/BatteryStatsImpl;)Lcom/android/internal/os/BatteryStatsImpl$BatteryCallback;
+HPLcom/android/internal/os/BatteryStatsImpl;->-get5(Lcom/android/internal/os/BatteryStatsImpl;)Lcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;
+HPLcom/android/internal/os/BatteryStatsImpl;->-set0(Lcom/android/internal/os/BatteryStatsImpl;[J)[J
+HPLcom/android/internal/os/BatteryStatsImpl;->-wrap0(Lcom/android/internal/os/BatteryStatsImpl$DualTimer;Z)Z
+HPLcom/android/internal/os/BatteryStatsImpl;->-wrap1(Lcom/android/internal/os/BatteryStatsImpl$Timer;Z)Z
+HPLcom/android/internal/os/BatteryStatsImpl;->-wrap2(Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->-wrap3(Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;Z)V
+HPLcom/android/internal/os/BatteryStatsImpl;->addIsolatedUidLocked(II)V
+HPLcom/android/internal/os/BatteryStatsImpl;->addPackageChange(Landroid/os/BatteryStats$PackageChange;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->aggregateLastWakeupUptimeLocked(J)V
+HPLcom/android/internal/os/BatteryStatsImpl;->buildBatteryLevelInt(Landroid/os/BatteryStats$HistoryItem;)I
+HPLcom/android/internal/os/BatteryStatsImpl;->buildStateInt(Landroid/os/BatteryStats$HistoryItem;)I
+HPLcom/android/internal/os/BatteryStatsImpl;->computeBatteryRealtime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->computeBatteryScreenOffRealtime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->computeBatteryScreenOffUptime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->computeBatteryTimeRemaining(J)J
+HPLcom/android/internal/os/BatteryStatsImpl;->computeBatteryUptime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->computeHistoryStepDetails(Landroid/os/BatteryStats$HistoryStepDetails;Landroid/os/BatteryStats$HistoryStepDetails;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->detachLongCounterIfNotNull(Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->dumpLocked(Landroid/content/Context;Ljava/io/PrintWriter;IIJ)V
+HPLcom/android/internal/os/BatteryStatsImpl;->excludeFromStringArray([Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+HPLcom/android/internal/os/BatteryStatsImpl;->finishAddingCpuLocked(IIIIIIII)V
+HPLcom/android/internal/os/BatteryStatsImpl;->getBatteryRealtime(J)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getBatteryUptime(J)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getBatteryUptimeLocked()J
+HPLcom/android/internal/os/BatteryStatsImpl;->getBluetoothControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
+HPLcom/android/internal/os/BatteryStatsImpl;->getBluetoothScanTime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getChargeLevelStepTracker()Landroid/os/BatteryStats$LevelStepTracker;
+HPLcom/android/internal/os/BatteryStatsImpl;->getCpuFreqs()[J
+HPLcom/android/internal/os/BatteryStatsImpl;->getCurrentDailyStartTime()J
+HPLcom/android/internal/os/BatteryStatsImpl;->getDailyChargeLevelStepTracker()Landroid/os/BatteryStats$LevelStepTracker;
+HPLcom/android/internal/os/BatteryStatsImpl;->getDailyDischargeLevelStepTracker()Landroid/os/BatteryStats$LevelStepTracker;
+HPLcom/android/internal/os/BatteryStatsImpl;->getDailyItemLocked(I)Landroid/os/BatteryStats$DailyItem;
+HPLcom/android/internal/os/BatteryStatsImpl;->getDailyPackageChanges()Ljava/util/ArrayList;
+HPLcom/android/internal/os/BatteryStatsImpl;->getDeviceIdleModeCount(II)I
+HPLcom/android/internal/os/BatteryStatsImpl;->getDeviceIdleModeTime(IJI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getDeviceIdlingCount(II)I
+HPLcom/android/internal/os/BatteryStatsImpl;->getDeviceIdlingTime(IJI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getDischargeCoulombCounter()Landroid/os/BatteryStats$LongCounter;
+HPLcom/android/internal/os/BatteryStatsImpl;->getDischargeLevelStepTracker()Landroid/os/BatteryStats$LevelStepTracker;
+HPLcom/android/internal/os/BatteryStatsImpl;->getDischargeScreenOffCoulombCounter()Landroid/os/BatteryStats$LongCounter;
+HPLcom/android/internal/os/BatteryStatsImpl;->getEndPlatformVersion()Ljava/lang/String;
+HPLcom/android/internal/os/BatteryStatsImpl;->getEstimatedBatteryCapacity()I
+HPLcom/android/internal/os/BatteryStatsImpl;->getGlobalWifiRunningTime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getHistoryBaseTime()J
+HPLcom/android/internal/os/BatteryStatsImpl;->getInteractiveTime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getKernelMemoryStats()Landroid/util/LongSparseArray;
+HPLcom/android/internal/os/BatteryStatsImpl;->getKernelWakelockStats()Ljava/util/Map;
+HPLcom/android/internal/os/BatteryStatsImpl;->getLongestDeviceIdleModeTime(I)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getMaxLearnedBatteryCapacity()I
+HPLcom/android/internal/os/BatteryStatsImpl;->getMinLearnedBatteryCapacity()I
+HPLcom/android/internal/os/BatteryStatsImpl;->getMobileRadioActiveAdjustedTime(I)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getMobileRadioActiveCount(I)I
+HPLcom/android/internal/os/BatteryStatsImpl;->getMobileRadioActiveTime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getMobileRadioActiveUnknownCount(I)I
+HPLcom/android/internal/os/BatteryStatsImpl;->getMobileRadioActiveUnknownTime(I)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getModemControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
+HPLcom/android/internal/os/BatteryStatsImpl;->getNetworkActivityBytes(II)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getNetworkActivityPackets(II)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getNextMaxDailyDeadline()J
+HPLcom/android/internal/os/BatteryStatsImpl;->getNextMinDailyDeadline()J
+HPLcom/android/internal/os/BatteryStatsImpl;->getNumConnectivityChange(I)I
+HPLcom/android/internal/os/BatteryStatsImpl;->getPackageStatsLocked(ILjava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;
+HPLcom/android/internal/os/BatteryStatsImpl;->getParcelVersion()I
+HPLcom/android/internal/os/BatteryStatsImpl;->getPhoneDataConnectionCount(II)I
+HPLcom/android/internal/os/BatteryStatsImpl;->getPhoneDataConnectionTime(IJI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getPhoneOnTime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getPhoneSignalScanningTime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getPhoneSignalStrengthCount(II)I
+HPLcom/android/internal/os/BatteryStatsImpl;->getPhoneSignalStrengthTime(IJI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getPowerSaveModeEnabledTime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getProcessStatsLocked(ILjava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;
+HPLcom/android/internal/os/BatteryStatsImpl;->getScreenBrightnessTime(IJI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getScreenOnCount(I)I
+HPLcom/android/internal/os/BatteryStatsImpl;->getScreenOnTime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getServiceStatsLocked(ILjava/lang/String;Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
+HPLcom/android/internal/os/BatteryStatsImpl;->getStartCount()I
+HPLcom/android/internal/os/BatteryStatsImpl;->getStartPlatformVersion()Ljava/lang/String;
+HPLcom/android/internal/os/BatteryStatsImpl;->getUidStats()Landroid/util/SparseArray;
+HPLcom/android/internal/os/BatteryStatsImpl;->getUidStatsLocked(I)Lcom/android/internal/os/BatteryStatsImpl$Uid;
+HPLcom/android/internal/os/BatteryStatsImpl;->getWakeupReasonStats()Ljava/util/Map;
+HPLcom/android/internal/os/BatteryStatsImpl;->getWifiControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
+HPLcom/android/internal/os/BatteryStatsImpl;->getWifiOnTime(JI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getWifiSignalStrengthCount(II)I
+HPLcom/android/internal/os/BatteryStatsImpl;->getWifiSignalStrengthTime(IJI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getWifiStateCount(II)I
+HPLcom/android/internal/os/BatteryStatsImpl;->getWifiStateTime(IJI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->getWifiSupplStateCount(II)I
+HPLcom/android/internal/os/BatteryStatsImpl;->getWifiSupplStateTime(IJI)J
+HPLcom/android/internal/os/BatteryStatsImpl;->hasBluetoothActivityReporting()Z
+HPLcom/android/internal/os/BatteryStatsImpl;->hasWifiActivityReporting()Z
+HPLcom/android/internal/os/BatteryStatsImpl;->includeInStringArray([Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+HPLcom/android/internal/os/BatteryStatsImpl;->initActiveHistoryEventsLocked(JJ)V
+HPLcom/android/internal/os/BatteryStatsImpl;->isCharging()Z
+HPLcom/android/internal/os/BatteryStatsImpl;->isOnBattery()Z
+HPLcom/android/internal/os/BatteryStatsImpl;->mapUid(I)I
+HPLcom/android/internal/os/BatteryStatsImpl;->noteActivityPausedLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteActivityResumedLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteAlarmFinishLocked(Ljava/lang/String;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteAlarmStartLocked(Ljava/lang/String;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteAudioOffLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteAudioOnLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteBluetoothScanResultsFromSourceLocked(Landroid/os/WorkSource;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteBluetoothScanStartedFromSourceLocked(Landroid/os/WorkSource;Z)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteBluetoothScanStartedLocked(IZ)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteBluetoothScanStoppedFromSourceLocked(Landroid/os/WorkSource;Z)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteBluetoothScanStoppedLocked(IZ)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteCameraOffLocked(I)V
+HPLcom/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
+HPLcom/android/internal/os/BatteryStatsImpl;->noteConnectivityChangedLocked(ILjava/lang/String;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteCurrentTimeChangedLocked()V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteEventLocked(ILjava/lang/String;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteFullWifiLockAcquiredFromSourceLocked(Landroid/os/WorkSource;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteFullWifiLockAcquiredLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteFullWifiLockReleasedFromSourceLocked(Landroid/os/WorkSource;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteFullWifiLockReleasedLocked(I)V
+HPLcom/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
+HPLcom/android/internal/os/BatteryStatsImpl;->noteLongPartialWakelockFinish(Ljava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteLongPartialWakelockStart(Ljava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteNetworkInterfaceTypeLocked(Ljava/lang/String;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->notePackageInstalledLocked(Ljava/lang/String;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->notePhoneSignalStrengthLocked(Landroid/telephony/SignalStrength;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->notePhoneStateLocked(II)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteProcessDiedLocked(II)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteProcessFinishLocked(Ljava/lang/String;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteProcessStartLocked(Ljava/lang/String;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteResetBluetoothScanLocked()V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteScreenBrightnessLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteScreenStateLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteStartGpsLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteStartSensorLocked(II)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteStartWakeFromSourceLocked(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZ)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteStartWakeLocked(IILjava/lang/String;Ljava/lang/String;IZJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteStopGpsLocked(I)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
+HPLcom/android/internal/os/BatteryStatsImpl;->noteStopWakeLocked(IILjava/lang/String;Ljava/lang/String;IJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteSyncFinishLocked(Ljava/lang/String;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteSyncStartLocked(Ljava/lang/String;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteUidProcessStateLocked(II)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteUserActivityLocked(II)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteVibratorOffLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteVibratorOnLocked(IJ)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiMulticastDisabledLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiMulticastEnabledLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiOffLocked()V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiOnLocked()V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiRadioApWakeupLocked(JJI)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiRadioPowerState(IJI)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiRssiChangedLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiRunningLocked(Landroid/os/WorkSource;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiScanStartedFromSourceLocked(Landroid/os/WorkSource;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiScanStartedLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiScanStoppedFromSourceLocked(Landroid/os/WorkSource;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiScanStoppedLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiStateLocked(ILjava/lang/String;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->noteWifiSupplicantStateChangedLocked(IZ)V
+HPLcom/android/internal/os/BatteryStatsImpl;->prepareForDumpLocked()V
+HPLcom/android/internal/os/BatteryStatsImpl;->readNetworkStatsLocked([Ljava/lang/String;)Landroid/net/NetworkStats;
+HPLcom/android/internal/os/BatteryStatsImpl;->recordCurrentTimeChangeLocked(JJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl;->removeIsolatedUidLocked(I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->reportExcessiveCpuLocked(ILjava/lang/String;JJ)V
+HPLcom/android/internal/os/BatteryStatsImpl;->requestImmediateCpuUpdate()V
+HPLcom/android/internal/os/BatteryStatsImpl;->resetAllStatsCmdLocked()V
+HPLcom/android/internal/os/BatteryStatsImpl;->resetAllStatsLocked()V
+HPLcom/android/internal/os/BatteryStatsImpl;->resetLongCounterIfNotNull(Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;Z)V
+HPLcom/android/internal/os/BatteryStatsImpl;->resetTimerIfNotNull(Lcom/android/internal/os/BatteryStatsImpl$DualTimer;Z)Z
+HPLcom/android/internal/os/BatteryStatsImpl;->resetTimerIfNotNull(Lcom/android/internal/os/BatteryStatsImpl$Timer;Z)Z
+HPLcom/android/internal/os/BatteryStatsImpl;->scheduleRemoveIsolatedUidLocked(II)V
+HPLcom/android/internal/os/BatteryStatsImpl;->scheduleSyncExternalStatsLocked(Ljava/lang/String;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->setBatteryStateLocked(IIIIIIII)V
+HPLcom/android/internal/os/BatteryStatsImpl;->setChargingLocked(Z)Z
+HPLcom/android/internal/os/BatteryStatsImpl;->setNoAutoReset(Z)V
+HPLcom/android/internal/os/BatteryStatsImpl;->setOnBatteryLocked(JJZIII)V
+HPLcom/android/internal/os/BatteryStatsImpl;->startAddingCpuLocked()Z
+HPLcom/android/internal/os/BatteryStatsImpl;->updateAllPhoneStateLocked(III)V
+HPLcom/android/internal/os/BatteryStatsImpl;->updateBluetoothStateLocked(Landroid/bluetooth/BluetoothActivityEnergyInfo;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->updateDischargeScreenLevelsLocked(ZZ)V
+HPLcom/android/internal/os/BatteryStatsImpl;->updateMobileRadioState(Landroid/telephony/ModemActivityInfo;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->updateTimeBasesLocked(ZZJJ)V
+HPLcom/android/internal/os/BatteryStatsImpl;->updateWifiState(Landroid/net/wifi/WifiActivityEnergyInfo;)V
+HPLcom/android/internal/os/BatteryStatsImpl;->writeHistoryTag(Landroid/os/BatteryStats$HistoryTag;)I
+HPLcom/android/internal/os/BatteryStatsImpl;->writeSyncLocked()V
+HPLcom/android/internal/os/BatteryStatsImpl;->writeToParcel(Landroid/os/Parcel;I)V
+HPLcom/android/internal/os/BatteryStatsImpl;->writeToParcelLocked(Landroid/os/Parcel;ZI)V
+HPLcom/android/internal/os/BinderInternal;->forceBinderGc()V
+HPLcom/android/internal/os/BinderInternal;->forceGc(Ljava/lang/String;)V
+HPLcom/android/internal/os/BinderInternal;->getLastGcTime()J
+HPLcom/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
+HPLcom/android/internal/os/BluetoothPowerCalculator;->calculateRemaining(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats;JJI)V
+HPLcom/android/internal/os/BluetoothPowerCalculator;->reset()V
+HPLcom/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
+HPLcom/android/internal/os/ClassLoaderFactory;->isDelegateLastClassLoaderName(Ljava/lang/String;)Z
+HPLcom/android/internal/os/ClassLoaderFactory;->isValidClassLoaderName(Ljava/lang/String;)Z
+HPLcom/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
+HPLcom/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
+HPLcom/android/internal/os/HandlerCaller;->obtainMessageBO(IZLjava/lang/Object;)Landroid/os/Message;
+HPLcom/android/internal/os/HandlerCaller;->obtainMessageI(II)Landroid/os/Message;
+HPLcom/android/internal/os/HandlerCaller;->obtainMessageIIIIII(IIIIIII)Landroid/os/Message;
+HPLcom/android/internal/os/HandlerCaller;->obtainMessageIIO(IIILjava/lang/Object;)Landroid/os/Message;
+HPLcom/android/internal/os/HandlerCaller;->obtainMessageIIOOOO(IIILjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
+HPLcom/android/internal/os/HandlerCaller;->obtainMessageIOO(IILjava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
+HPLcom/android/internal/os/HandlerCaller;->obtainMessageOOO(ILjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
+HPLcom/android/internal/os/HandlerCaller;->removeMessages(I)V
+HPLcom/android/internal/os/HandlerCaller;->sendMessageDelayed(Landroid/os/Message;J)V
+HPLcom/android/internal/os/IDropBoxManagerService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/os/IDropBoxManagerService$Stub$Proxy;->add(Landroid/os/DropBoxManager$Entry;)V
+HPLcom/android/internal/os/IDropBoxManagerService$Stub$Proxy;->getNextEntry(Ljava/lang/String;J)Landroid/os/DropBoxManager$Entry;
+HPLcom/android/internal/os/IDropBoxManagerService$Stub;-><init>()V
+HPLcom/android/internal/os/IDropBoxManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/os/IDropBoxManagerService;
+HPLcom/android/internal/os/IDropBoxManagerService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/os/IDropBoxManagerService;->add(Landroid/os/DropBoxManager$Entry;)V
+HPLcom/android/internal/os/IDropBoxManagerService;->getNextEntry(Ljava/lang/String;J)Landroid/os/DropBoxManager$Entry;
+HPLcom/android/internal/os/IDropBoxManagerService;->isTagEnabled(Ljava/lang/String;)Z
+HPLcom/android/internal/os/IResultReceiver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/os/IResultReceiver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/os/IResultReceiver$Stub$Proxy;->send(ILandroid/os/Bundle;)V
+HPLcom/android/internal/os/IResultReceiver$Stub;-><init>()V
+HPLcom/android/internal/os/IResultReceiver$Stub;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/os/IResultReceiver$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/os/IResultReceiver;
+HPLcom/android/internal/os/IResultReceiver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/os/IResultReceiver;->send(ILandroid/os/Bundle;)V
+HPLcom/android/internal/os/IShellCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/os/IShellCallback$Stub$Proxy;->openOutputFile(Ljava/lang/String;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/internal/os/IShellCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/os/IShellCallback;
+HPLcom/android/internal/os/IShellCallback;->openOutputFile(Ljava/lang/String;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/internal/os/KernelUidCpuFreqTimeReader$Callback;->onCpuFreqs([J)V
+HPLcom/android/internal/os/KernelUidCpuFreqTimeReader$Callback;->onUidCpuFreqTime(I[J)V
+HPLcom/android/internal/os/KernelUidCpuFreqTimeReader;->removeUid(I)V
+HPLcom/android/internal/os/KernelUidCpuTimeReader$Callback;->onUidCpuTime(IJJ)V
+HPLcom/android/internal/os/KernelUidCpuTimeReader;->removeUid(I)V
+HPLcom/android/internal/os/KernelUidCpuTimeReader;->removeUidsFromKernelModule(II)V
+HPLcom/android/internal/os/LoggingPrintStream;->println(Ljava/lang/String;)V
+HPLcom/android/internal/os/MemoryPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;)V
+HPLcom/android/internal/os/MemoryPowerCalculator;->calculateRemaining(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats;JJI)V
+HPLcom/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
+HPLcom/android/internal/os/MobileRadioPowerCalculator;->calculateRemaining(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats;JJI)V
+HPLcom/android/internal/os/MobileRadioPowerCalculator;->getMobilePowerPerPacket(JI)D
+HPLcom/android/internal/os/MobileRadioPowerCalculator;->reset()V
+HPLcom/android/internal/os/MobileRadioPowerCalculator;->reset(Landroid/os/BatteryStats;)V
+HPLcom/android/internal/os/PowerCalculator;-><init>()V
+HPLcom/android/internal/os/PowerCalculator;->reset()V
+HPLcom/android/internal/os/PowerProfile$CpuClusterKey;->-get1(Lcom/android/internal/os/PowerProfile$CpuClusterKey;)Ljava/lang/String;
+HPLcom/android/internal/os/PowerProfile;->getAveragePower(Ljava/lang/String;I)D
+HPLcom/android/internal/os/PowerProfile;->getAveragePowerForCpu(II)D
+HPLcom/android/internal/os/PowerProfile;->getNumElements(Ljava/lang/String;)I
+HPLcom/android/internal/os/ProcessCpuTracker$FilterStats;->needed(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+HPLcom/android/internal/os/ProcessCpuTracker;->countStats()I
+HPLcom/android/internal/os/ProcessCpuTracker;->getCpuTimeForPid(I)J
+HPLcom/android/internal/os/ProcessCpuTracker;->getLastIdleTime()I
+HPLcom/android/internal/os/ProcessCpuTracker;->getLastIoWaitTime()I
+HPLcom/android/internal/os/ProcessCpuTracker;->getLastIrqTime()I
+HPLcom/android/internal/os/ProcessCpuTracker;->getLastSoftIrqTime()I
+HPLcom/android/internal/os/ProcessCpuTracker;->getLastSystemTime()I
+HPLcom/android/internal/os/ProcessCpuTracker;->getLastUserTime()I
+HPLcom/android/internal/os/ProcessCpuTracker;->getStats(I)Lcom/android/internal/os/ProcessCpuTracker$Stats;
+HPLcom/android/internal/os/ProcessCpuTracker;->getStats(Lcom/android/internal/os/ProcessCpuTracker$FilterStats;)Ljava/util/List;
+HPLcom/android/internal/os/ProcessCpuTracker;->hasGoodLastStats()Z
+HPLcom/android/internal/os/RuntimeInit;->wtf(Ljava/lang/String;Ljava/lang/Throwable;Z)V
+HPLcom/android/internal/os/SensorPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;Landroid/hardware/SensorManager;)V
+HPLcom/android/internal/os/SensorPowerCalculator;->calculateApp(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats$Uid;JJI)V
+HPLcom/android/internal/os/TransferPipe;-><init>()V
+HPLcom/android/internal/os/TransferPipe;-><init>(Ljava/lang/String;)V
+HPLcom/android/internal/os/TransferPipe;->closeFd(I)V
+HPLcom/android/internal/os/TransferPipe;->getReadFd()Landroid/os/ParcelFileDescriptor;
+HPLcom/android/internal/os/TransferPipe;->getWriteFd()Landroid/os/ParcelFileDescriptor;
+HPLcom/android/internal/os/TransferPipe;->go(Ljava/io/FileDescriptor;)V
+HPLcom/android/internal/os/TransferPipe;->go(Ljava/io/FileDescriptor;J)V
+HPLcom/android/internal/os/TransferPipe;->kill()V
+HPLcom/android/internal/os/TransferPipe;->run()V
+HPLcom/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
+HPLcom/android/internal/os/WakelockPowerCalculator;->calculateRemaining(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats;JJI)V
+HPLcom/android/internal/os/WakelockPowerCalculator;->reset()V
+HPLcom/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
+HPLcom/android/internal/os/WifiPowerCalculator;->calculateRemaining(Lcom/android/internal/os/BatterySipper;Landroid/os/BatteryStats;JJI)V
+HPLcom/android/internal/os/WifiPowerCalculator;->reset()V
+HPLcom/android/internal/policy/DecorView$2;-><init>(Lcom/android/internal/policy/DecorView;Lcom/android/internal/policy/DecorView$ColorViewState;)V
+HPLcom/android/internal/policy/DecorView$2;->run()V
+HPLcom/android/internal/policy/DecorView$ColorViewAttributes;->isVisible(IIIZ)Z
+HPLcom/android/internal/policy/DecorView;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HPLcom/android/internal/policy/DecorView;->getColorViewLeftInset(II)I
+HPLcom/android/internal/policy/DecorView;->getNavigationBarRect(IILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/internal/policy/DecorView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLcom/android/internal/policy/DecorView;->onDetachedFromWindow()V
+HPLcom/android/internal/policy/DecorView;->onTouchEvent(Landroid/view/MotionEvent;)Z
+HPLcom/android/internal/policy/DecorView;->releaseThreadedRenderer()V
+HPLcom/android/internal/policy/DecorView;->superDispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HPLcom/android/internal/policy/IKeyguardDrawnCallback$Stub$Proxy;->onDrawn()V
+HPLcom/android/internal/policy/IKeyguardDrawnCallback$Stub;-><init>()V
+HPLcom/android/internal/policy/IKeyguardDrawnCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/policy/IKeyguardDrawnCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/policy/IKeyguardService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->addStateMonitorCallback(Lcom/android/internal/policy/IKeyguardStateCallback;)V
+HPLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onBootCompleted()V
+HPLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onScreenTurnedOn()V
+HPLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onScreenTurningOn(Lcom/android/internal/policy/IKeyguardDrawnCallback;)V
+HPLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onStartedWakingUp()V
+HPLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->onSystemReady()V
+HPLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->setKeyguardEnabled(Z)V
+HPLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->setOccluded(ZZ)V
+HPLcom/android/internal/policy/IKeyguardService$Stub$Proxy;->startKeyguardExitAnimation(JJ)V
+HPLcom/android/internal/policy/IKeyguardService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IKeyguardService;
+HPLcom/android/internal/policy/IKeyguardStateCallback$Stub;-><init>()V
+HPLcom/android/internal/policy/IKeyguardStateCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/policy/IKeyguardStateCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/policy/IShortcutService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/policy/IShortcutService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IShortcutService;
+HPLcom/android/internal/policy/PhoneFallbackEventHandler;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HPLcom/android/internal/policy/PhoneFallbackEventHandler;->getAudioManager()Landroid/media/AudioManager;
+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
+HPLcom/android/internal/policy/PhoneWindow$ActionMenuPresenterCallback;->onCloseMenu(Lcom/android/internal/view/menu/MenuBuilder;Z)V
+HPLcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState$1;-><init>()V
+HPLcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;-><init>()V
+HPLcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;-><init>(Lcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;)V
+HPLcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
+HPLcom/android/internal/policy/PhoneWindow$PanelFeatureState;->onRestoreInstanceState(Landroid/os/Parcelable;)V
+HPLcom/android/internal/policy/PhoneWindow$PanelFeatureState;->onSaveInstanceState()Landroid/os/Parcelable;
+HPLcom/android/internal/policy/PhoneWindow;->checkCloseActionMenu(Landroid/view/Menu;)V
+HPLcom/android/internal/policy/PhoneWindow;->closePanel(Lcom/android/internal/policy/PhoneWindow$PanelFeatureState;Z)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
+HPLcom/android/internal/policy/PhoneWindow;->reportActivityRelaunched()V
+HPLcom/android/internal/policy/PhoneWindow;->restorePanelState(Landroid/util/SparseArray;)V
+HPLcom/android/internal/policy/PhoneWindow;->sendCloseSystemWindows(Landroid/content/Context;Ljava/lang/String;)V
+HPLcom/android/internal/policy/PhoneWindow;->setIsStartingWindow(Z)V
+HPLcom/android/internal/policy/PhoneWindow;->superDispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HPLcom/android/internal/policy/PipSnapAlgorithm;->applySnapFraction(Landroid/graphics/Rect;Landroid/graphics/Rect;F)V
+HPLcom/android/internal/policy/PipSnapAlgorithm;->getMovementBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;I)V
+HPLcom/android/internal/policy/PipSnapAlgorithm;->getSizeForAspectRatio(FFII)Landroid/util/Size;
+HPLcom/android/internal/policy/PipSnapAlgorithm;->getSnapFraction(Landroid/graphics/Rect;Landroid/graphics/Rect;)F
+HPLcom/android/internal/policy/PipSnapAlgorithm;->snapRectToClosestEdge(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->appTransitionCancelled()V
+HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->appTransitionFinished()V
+HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->appTransitionPending()V
+HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->appTransitionStarting(JJ)V
+HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->disable(II)V
+HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->handleSystemKey(I)V
+HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->setImeWindowStatus(Landroid/os/IBinder;IIZ)V
+HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->setSystemUiVisibility(IIIILandroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->setTopAppHidesStatusBar(Z)V
+HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->setWindowState(II)V
+HPLcom/android/internal/statusbar/IStatusBar$Stub$Proxy;->topAppWindowChanged(Z)V
+HPLcom/android/internal/statusbar/IStatusBar$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/statusbar/IStatusBar;
+HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->clearNotificationEffects()V
+HPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->onNotificationExpansionChanged(Ljava/lang/String;ZZ)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
+HPLcom/android/internal/statusbar/IStatusBarService$Stub;-><init>()V
+HPLcom/android/internal/statusbar/IStatusBarService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/statusbar/NotificationVisibility$1;-><init>()V
+HPLcom/android/internal/statusbar/NotificationVisibility$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/statusbar/NotificationVisibility;
+HPLcom/android/internal/statusbar/NotificationVisibility$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLcom/android/internal/statusbar/NotificationVisibility$1;->newArray(I)[Lcom/android/internal/statusbar/NotificationVisibility;
+HPLcom/android/internal/statusbar/NotificationVisibility$1;->newArray(I)[Ljava/lang/Object;
+HPLcom/android/internal/statusbar/NotificationVisibility;->-wrap0(Landroid/os/Parcel;)Lcom/android/internal/statusbar/NotificationVisibility;
+HPLcom/android/internal/statusbar/NotificationVisibility;-><init>()V
+HPLcom/android/internal/statusbar/NotificationVisibility;->equals(Ljava/lang/Object;)Z
+HPLcom/android/internal/statusbar/NotificationVisibility;->hashCode()I
+HPLcom/android/internal/statusbar/NotificationVisibility;->obtain()Lcom/android/internal/statusbar/NotificationVisibility;
+HPLcom/android/internal/statusbar/NotificationVisibility;->obtain(Landroid/os/Parcel;)Lcom/android/internal/statusbar/NotificationVisibility;
+HPLcom/android/internal/statusbar/NotificationVisibility;->obtain(Ljava/lang/String;IZ)Lcom/android/internal/statusbar/NotificationVisibility;
+HPLcom/android/internal/statusbar/NotificationVisibility;->readFromParcel(Landroid/os/Parcel;)V
+HPLcom/android/internal/statusbar/NotificationVisibility;->recycle()V
+HPLcom/android/internal/statusbar/NotificationVisibility;->writeToParcel(Landroid/os/Parcel;I)V
+HPLcom/android/internal/telecom/IConnectionService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/telecom/IConnectionService$Stub$Proxy;->addConnectionServiceAdapter(Lcom/android/internal/telecom/IConnectionServiceAdapter;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService$Stub$Proxy;->createConnection(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;Landroid/telecom/ConnectionRequest;ZZLandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService$Stub$Proxy;->removeConnectionServiceAdapter(Lcom/android/internal/telecom/IConnectionServiceAdapter;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService$Stub;-><init>()V
+HPLcom/android/internal/telecom/IConnectionService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telecom/IConnectionService;
+HPLcom/android/internal/telecom/IConnectionService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/telecom/IConnectionService;->abort(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->addConnectionServiceAdapter(Lcom/android/internal/telecom/IConnectionServiceAdapter;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->answer(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->answerVideo(Ljava/lang/String;ILandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->conference(Ljava/lang/String;Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->createConnection(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;Landroid/telecom/ConnectionRequest;ZZLandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->createConnectionComplete(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->createConnectionFailed(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;Landroid/telecom/ConnectionRequest;ZLandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->disconnect(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->hold(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->mergeConference(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->onCallAudioStateChanged(Ljava/lang/String;Landroid/telecom/CallAudioState;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->onExtrasChanged(Ljava/lang/String;Landroid/os/Bundle;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->onPostDialContinue(Ljava/lang/String;ZLandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->playDtmfTone(Ljava/lang/String;CLandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->pullExternalCall(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->reject(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->rejectWithMessage(Ljava/lang/String;Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->removeConnectionServiceAdapter(Lcom/android/internal/telecom/IConnectionServiceAdapter;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->respondToRttUpgradeRequest(Ljava/lang/String;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->sendCallEvent(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->silence(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->splitFromConference(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->startRtt(Ljava/lang/String;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->stopDtmfTone(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->stopRtt(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->swapConference(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionService;->unhold(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/telecom/IConnectionServiceAdapter$Stub$Proxy;->handleCreateConnectionComplete(Ljava/lang/String;Landroid/telecom/ConnectionRequest;Landroid/telecom/ParcelableConnection;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter$Stub$Proxy;->queryRemoteConnectionServices(Lcom/android/internal/telecom/RemoteServiceCallback;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter$Stub;-><init>()V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter$Stub;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/telecom/IConnectionServiceAdapter$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telecom/IConnectionServiceAdapter;
+HPLcom/android/internal/telecom/IConnectionServiceAdapter$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->addConferenceCall(Ljava/lang/String;Landroid/telecom/ParcelableConference;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->addExistingConnection(Ljava/lang/String;Landroid/telecom/ParcelableConnection;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->handleCreateConnectionComplete(Ljava/lang/String;Landroid/telecom/ConnectionRequest;Landroid/telecom/ParcelableConnection;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->onConnectionEvent(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->onPostDialChar(Ljava/lang/String;CLandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->onPostDialWait(Ljava/lang/String;Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->onRemoteRttRequest(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->onRttInitiationFailure(Ljava/lang/String;ILandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->onRttInitiationSuccess(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->onRttSessionRemotelyTerminated(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->putExtras(Ljava/lang/String;Landroid/os/Bundle;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->queryRemoteConnectionServices(Lcom/android/internal/telecom/RemoteServiceCallback;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->removeCall(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->removeExtras(Ljava/lang/String;Ljava/util/List;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setActive(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setAddress(Ljava/lang/String;Landroid/net/Uri;ILandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setAudioRoute(Ljava/lang/String;ILandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setCallerDisplayName(Ljava/lang/String;Ljava/lang/String;ILandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setConferenceMergeFailed(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setConferenceableConnections(Ljava/lang/String;Ljava/util/List;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setConnectionCapabilities(Ljava/lang/String;ILandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setConnectionProperties(Ljava/lang/String;ILandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setDialing(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setDisconnected(Ljava/lang/String;Landroid/telecom/DisconnectCause;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setIsConferenced(Ljava/lang/String;Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setIsVoipAudioMode(Ljava/lang/String;ZLandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setOnHold(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setPulling(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setRingbackRequested(Ljava/lang/String;ZLandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setRinging(Ljava/lang/String;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setStatusHints(Ljava/lang/String;Landroid/telecom/StatusHints;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setVideoProvider(Ljava/lang/String;Lcom/android/internal/telecom/IVideoProvider;Landroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IConnectionServiceAdapter;->setVideoState(Ljava/lang/String;ILandroid/telecom/Logging/Session$Info;)V
+HPLcom/android/internal/telecom/IInCallAdapter$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/telecom/IInCallAdapter$Stub;-><init>()V
+HPLcom/android/internal/telecom/IInCallAdapter$Stub;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/telecom/IInCallAdapter$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telecom/IInCallAdapter;
+HPLcom/android/internal/telecom/IInCallAdapter;->answerCall(Ljava/lang/String;I)V
+HPLcom/android/internal/telecom/IInCallAdapter;->conference(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->disconnectCall(Ljava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->holdCall(Ljava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->mergeConference(Ljava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->mute(Z)V
+HPLcom/android/internal/telecom/IInCallAdapter;->phoneAccountSelected(Ljava/lang/String;Landroid/telecom/PhoneAccountHandle;Z)V
+HPLcom/android/internal/telecom/IInCallAdapter;->playDtmfTone(Ljava/lang/String;C)V
+HPLcom/android/internal/telecom/IInCallAdapter;->postDialContinue(Ljava/lang/String;Z)V
+HPLcom/android/internal/telecom/IInCallAdapter;->pullExternalCall(Ljava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->putExtras(Ljava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->rejectCall(Ljava/lang/String;ZLjava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->removeExtras(Ljava/lang/String;Ljava/util/List;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->respondToRttRequest(Ljava/lang/String;IZ)V
+HPLcom/android/internal/telecom/IInCallAdapter;->sendCallEvent(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->sendRttRequest(Ljava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->setAudioRoute(I)V
+HPLcom/android/internal/telecom/IInCallAdapter;->setRttMode(Ljava/lang/String;I)V
+HPLcom/android/internal/telecom/IInCallAdapter;->splitFromConference(Ljava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->stopDtmfTone(Ljava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->stopRtt(Ljava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->swapConference(Ljava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallAdapter;->turnOffProximitySensor(Z)V
+HPLcom/android/internal/telecom/IInCallAdapter;->turnOnProximitySensor()V
+HPLcom/android/internal/telecom/IInCallAdapter;->unholdCall(Ljava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/telecom/IInCallService$Stub$Proxy;->addCall(Landroid/telecom/ParcelableCall;)V
+HPLcom/android/internal/telecom/IInCallService$Stub$Proxy;->onCallAudioStateChanged(Landroid/telecom/CallAudioState;)V
+HPLcom/android/internal/telecom/IInCallService$Stub$Proxy;->onCanAddCallChanged(Z)V
+HPLcom/android/internal/telecom/IInCallService$Stub$Proxy;->setInCallAdapter(Lcom/android/internal/telecom/IInCallAdapter;)V
+HPLcom/android/internal/telecom/IInCallService$Stub$Proxy;->updateCall(Landroid/telecom/ParcelableCall;)V
+HPLcom/android/internal/telecom/IInCallService$Stub;-><init>()V
+HPLcom/android/internal/telecom/IInCallService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telecom/IInCallService;
+HPLcom/android/internal/telecom/IInCallService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/telecom/IInCallService;->addCall(Landroid/telecom/ParcelableCall;)V
+HPLcom/android/internal/telecom/IInCallService;->bringToForeground(Z)V
+HPLcom/android/internal/telecom/IInCallService;->onCallAudioStateChanged(Landroid/telecom/CallAudioState;)V
+HPLcom/android/internal/telecom/IInCallService;->onCanAddCallChanged(Z)V
+HPLcom/android/internal/telecom/IInCallService;->onConnectionEvent(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/internal/telecom/IInCallService;->onRttInitiationFailure(Ljava/lang/String;I)V
+HPLcom/android/internal/telecom/IInCallService;->onRttUpgradeRequest(Ljava/lang/String;I)V
+HPLcom/android/internal/telecom/IInCallService;->setInCallAdapter(Lcom/android/internal/telecom/IInCallAdapter;)V
+HPLcom/android/internal/telecom/IInCallService;->setPostDial(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallService;->setPostDialWait(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/internal/telecom/IInCallService;->silenceRinger()V
+HPLcom/android/internal/telecom/IInCallService;->updateCall(Landroid/telecom/ParcelableCall;)V
+HPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getLine1Number(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getPhoneAccountsSupportingScheme(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getSystemDialerPackage()Ljava/lang/String;
+HPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->isRinging(Ljava/lang/String;)Z
+HPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->isVoiceMailNumber(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->placeCall(Landroid/net/Uri;Landroid/os/Bundle;Ljava/lang/String;)V
+HPLcom/android/internal/telecom/ITelecomService$Stub;-><init>()V
+HPLcom/android/internal/telecom/ITelecomService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/telecom/IVideoProvider$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telecom/IVideoProvider;
+HPLcom/android/internal/telecom/RemoteServiceCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/telecom/RemoteServiceCallback$Stub$Proxy;->onResult(Ljava/util/List;Ljava/util/List;)V
+HPLcom/android/internal/telecom/RemoteServiceCallback$Stub;-><init>()V
+HPLcom/android/internal/telecom/RemoteServiceCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/telecom/RemoteServiceCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telecom/RemoteServiceCallback;
+HPLcom/android/internal/telecom/RemoteServiceCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/telecom/RemoteServiceCallback;->onError()V
+HPLcom/android/internal/telecom/RemoteServiceCallback;->onResult(Ljava/util/List;Ljava/util/List;)V
+HPLcom/android/internal/telephony/BaseCommands;->getRilVersion()I
+HPLcom/android/internal/telephony/CallerInfo;-><init>()V
+HPLcom/android/internal/telephony/CallerInfo;->doSecondaryLookupIfNecessary(Landroid/content/Context;Ljava/lang/String;Lcom/android/internal/telephony/CallerInfo;)Lcom/android/internal/telephony/CallerInfo;
+HPLcom/android/internal/telephony/CallerInfo;->getCallerInfo(Landroid/content/Context;Landroid/net/Uri;Landroid/database/Cursor;)Lcom/android/internal/telephony/CallerInfo;
+HPLcom/android/internal/telephony/CallerInfo;->getCurrentCountryIso(Landroid/content/Context;)Ljava/lang/String;
+HPLcom/android/internal/telephony/CallerInfo;->getCurrentCountryIso(Landroid/content/Context;Ljava/util/Locale;)Ljava/lang/String;
+HPLcom/android/internal/telephony/CallerInfo;->getGeoDescription(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/internal/telephony/CallerInfo;->normalize(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/internal/telephony/CallerInfo;->toString()Ljava/lang/String;
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler$1;-><init>(Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;Lcom/android/internal/telephony/CallerInfoAsyncQuery$CookieWrapper;I)V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler$1;->run()V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler$CallerInfoWorkerHandler;-><init>(Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;Landroid/os/Looper;)V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler$CallerInfoWorkerHandler;->handleGeoDescription(Landroid/os/Message;)V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler$CallerInfoWorkerHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;->-get0(Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;)Lcom/android/internal/telephony/CallerInfo;
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;->-get1(Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;)Landroid/content/Context;
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;->-set0(Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;Lcom/android/internal/telephony/CallerInfo;)Lcom/android/internal/telephony/CallerInfo;
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;->-set1(Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;Landroid/content/Context;)Landroid/content/Context;
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;->-set2(Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;Landroid/net/Uri;)Landroid/net/Uri;
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;-><init>(Lcom/android/internal/telephony/CallerInfoAsyncQuery;Landroid/content/Context;)V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;-><init>(Lcom/android/internal/telephony/CallerInfoAsyncQuery;Landroid/content/Context;Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;)V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;->createHandler(Landroid/os/Looper;)Landroid/os/Handler;
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;->onQueryComplete(ILjava/lang/Object;Landroid/database/Cursor;)V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CookieWrapper;-><init>()V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery$CookieWrapper;-><init>(Lcom/android/internal/telephony/CallerInfoAsyncQuery$CookieWrapper;)V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery;->-wrap0(Landroid/net/Uri;)Ljava/lang/String;
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery;->-wrap1(Lcom/android/internal/telephony/CallerInfoAsyncQuery;)V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery;-><init>()V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery;->allocate(Landroid/content/Context;Landroid/net/Uri;)V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery;->getCurrentProfileContentResolver(Landroid/content/Context;)Landroid/content/ContentResolver;
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery;->release()V
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery;->sanitizeUriToString(Landroid/net/Uri;)Ljava/lang/String;
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery;->startQuery(ILandroid/content/Context;Ljava/lang/String;Lcom/android/internal/telephony/CallerInfoAsyncQuery$OnQueryCompleteListener;Ljava/lang/Object;)Lcom/android/internal/telephony/CallerInfoAsyncQuery;
+HPLcom/android/internal/telephony/CallerInfoAsyncQuery;->startQuery(ILandroid/content/Context;Ljava/lang/String;Lcom/android/internal/telephony/CallerInfoAsyncQuery$OnQueryCompleteListener;Ljava/lang/Object;I)Lcom/android/internal/telephony/CallerInfoAsyncQuery;
+HPLcom/android/internal/telephony/CarrierAppUtils;->disableCarrierAppsUntilPrivileged(Ljava/lang/String;Landroid/content/pm/IPackageManager;Landroid/content/ContentResolver;I)V
+HPLcom/android/internal/telephony/CarrierServiceBindHelper$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/internal/telephony/CarrierServiceBindHelper$AppBinding;->getPackage()Ljava/lang/String;
+HPLcom/android/internal/telephony/CarrierServiceBindHelper$CarrierServicePackageMonitor;->evaluateBinding(Ljava/lang/String;Z)V
+HPLcom/android/internal/telephony/CarrierServiceBindHelper$CarrierServicePackageMonitor;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+HPLcom/android/internal/telephony/CarrierServiceBindHelper$CarrierServicePackageMonitor;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/internal/telephony/CarrierServiceBindHelper$CarrierServicePackageMonitor;->onPackageUpdateFinished(Ljava/lang/String;I)V
+HPLcom/android/internal/telephony/CarrierServiceBindHelper;->-get0(Lcom/android/internal/telephony/CarrierServiceBindHelper;)[Lcom/android/internal/telephony/CarrierServiceBindHelper$AppBinding;
+HPLcom/android/internal/telephony/DeviceStateMonitor$1;->onDisplayChanged(I)V
+HPLcom/android/internal/telephony/DeviceStateMonitor;->-wrap1(Lcom/android/internal/telephony/DeviceStateMonitor;)Z
+HPLcom/android/internal/telephony/DeviceStateMonitor;->isLowDataExpected()Z
+HPLcom/android/internal/telephony/DeviceStateMonitor;->shouldTurnOffDormancyUpdate()Z
+HPLcom/android/internal/telephony/DeviceStateMonitor;->shouldTurnOffFullNetworkUpdate()Z
+HPLcom/android/internal/telephony/DeviceStateMonitor;->shouldTurnOffSignalStrength()Z
+HPLcom/android/internal/telephony/GsmCdmaPhone;->getDataEnabled()Z
+HPLcom/android/internal/telephony/GsmCdmaPhone;->getDeviceId()Ljava/lang/String;
+HPLcom/android/internal/telephony/GsmCdmaPhone;->getFullIccSerialNumber()Ljava/lang/String;
+HPLcom/android/internal/telephony/GsmCdmaPhone;->getGroupIdLevel1()Ljava/lang/String;
+HPLcom/android/internal/telephony/GsmCdmaPhone;->getIccSmsInterfaceManager()Lcom/android/internal/telephony/IccSmsInterfaceManager;
+HPLcom/android/internal/telephony/GsmCdmaPhone;->getVoiceMailNumber()Ljava/lang/String;
+HPLcom/android/internal/telephony/ICarrierConfigLoader$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/telephony/IMms$Stub;-><init>()V
+HPLcom/android/internal/telephony/IMms;->addMultimediaMessageDraft(Ljava/lang/String;Landroid/net/Uri;)Landroid/net/Uri;
+HPLcom/android/internal/telephony/IMms;->addTextMessageDraft(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;
+HPLcom/android/internal/telephony/IMms;->archiveStoredConversation(Ljava/lang/String;JZ)Z
+HPLcom/android/internal/telephony/IMms;->deleteStoredConversation(Ljava/lang/String;J)Z
+HPLcom/android/internal/telephony/IMms;->deleteStoredMessage(Ljava/lang/String;Landroid/net/Uri;)Z
+HPLcom/android/internal/telephony/IMms;->downloadMessage(ILjava/lang/String;Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;Landroid/app/PendingIntent;)V
+HPLcom/android/internal/telephony/IMms;->getAutoPersisting()Z
+HPLcom/android/internal/telephony/IMms;->getCarrierConfigValues(I)Landroid/os/Bundle;
+HPLcom/android/internal/telephony/IMms;->importMultimediaMessage(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;JZZ)Landroid/net/Uri;
+HPLcom/android/internal/telephony/IMms;->importTextMessage(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;JZZ)Landroid/net/Uri;
+HPLcom/android/internal/telephony/IMms;->sendMessage(ILjava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/PendingIntent;)V
+HPLcom/android/internal/telephony/IMms;->sendStoredMessage(ILjava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;Landroid/app/PendingIntent;)V
+HPLcom/android/internal/telephony/IMms;->setAutoPersisting(Ljava/lang/String;Z)V
+HPLcom/android/internal/telephony/IMms;->updateStoredMessageStatus(Ljava/lang/String;Landroid/net/Uri;Landroid/content/ContentValues;)Z
+HPLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub$Proxy;->onSubscriptionsChanged()V
+HPLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;
+HPLcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/telephony/IPhoneStateListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IPhoneStateListener;
+HPLcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getGroupIdLevel1(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getVoiceMailNumberForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HPLcom/android/internal/telephony/IPhoneSubInfo$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/telephony/ISms$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/telephony/ISub$Stub$Proxy;->getActiveSubIdList()[I
+HPLcom/android/internal/telephony/ISub$Stub$Proxy;->getPhoneId(I)I
+HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getAllCellInfo(Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getCellLocation(Ljava/lang/String;)Landroid/os/Bundle;
+HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getDataEnabled(I)Z
+HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getEmergencyCallbackMode(I)Z
+HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getMergedSubscriberIds(Ljava/lang/String;)[Ljava/lang/String;
+HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getNetworkType()I
+HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getSubIdForPhoneAccount(Landroid/telecom/PhoneAccount;)I
+HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getTetherApnRequired()I
+HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getVoiceNetworkTypeForSubscriber(ILjava/lang/String;)I
+HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getVtDataUsage(IZ)Landroid/net/NetworkStats;
+HPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->requestModemActivityInfo(Landroid/os/ResultReceiver;)V
+HPLcom/android/internal/telephony/ITelephony$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/telephony/ITelephonyRegistry$Stub;-><init>()V
+HPLcom/android/internal/telephony/ITelephonyRegistry$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/telephony/IccSmsInterfaceManager$1;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/internal/telephony/IccSmsInterfaceManager$CdmaBroadcastRangeManager;->addRange(IIZ)V
+HPLcom/android/internal/telephony/IccSmsInterfaceManager$CdmaBroadcastRangeManager;->finishUpdate()Z
+HPLcom/android/internal/telephony/IccSmsInterfaceManager$CdmaBroadcastRangeManager;->startUpdate()V
+HPLcom/android/internal/telephony/IccSmsInterfaceManager$CellBroadcastRangeManager;->addRange(IIZ)V
+HPLcom/android/internal/telephony/IccSmsInterfaceManager$CellBroadcastRangeManager;->finishUpdate()Z
+HPLcom/android/internal/telephony/IccSmsInterfaceManager$CellBroadcastRangeManager;->startUpdate()V
+HPLcom/android/internal/telephony/IccSmsInterfaceManager;->-wrap0(Lcom/android/internal/telephony/IccSmsInterfaceManager;[Lcom/android/internal/telephony/cdma/CdmaSmsBroadcastConfigInfo;)Z
+HPLcom/android/internal/telephony/IccSmsInterfaceManager;->-wrap1(Lcom/android/internal/telephony/IccSmsInterfaceManager;[Lcom/android/internal/telephony/gsm/SmsBroadcastConfigInfo;)Z
+HPLcom/android/internal/telephony/IccSmsInterfaceManager;->disableCdmaBroadcastRange(II)Z
+HPLcom/android/internal/telephony/IccSmsInterfaceManager;->disableCellBroadcastRange(III)Z
+HPLcom/android/internal/telephony/IccSmsInterfaceManager;->disableGsmBroadcastRange(II)Z
+HPLcom/android/internal/telephony/IccSmsInterfaceManager;->enableCdmaBroadcastRange(II)Z
+HPLcom/android/internal/telephony/IccSmsInterfaceManager;->enableCellBroadcastRange(III)Z
+HPLcom/android/internal/telephony/IccSmsInterfaceManager;->enableGsmBroadcastRange(II)Z
+HPLcom/android/internal/telephony/IccSmsInterfaceManager;->log(Ljava/lang/String;)V
+HPLcom/android/internal/telephony/IccSmsInterfaceManager;->setCdmaBroadcastConfig([Lcom/android/internal/telephony/cdma/CdmaSmsBroadcastConfigInfo;)Z
+HPLcom/android/internal/telephony/IccSmsInterfaceManager;->setCellBroadcastConfig([Lcom/android/internal/telephony/gsm/SmsBroadcastConfigInfo;)Z
+HPLcom/android/internal/telephony/InboundSmsHandler;->cancelNewMessageNotification(Landroid/content/Context;)V
+HPLcom/android/internal/telephony/InboundSmsHandler;->isCurrentFormat3gpp2()Z
+HPLcom/android/internal/telephony/IntRangeManager;->disableRange(IILjava/lang/String;)Z
+HPLcom/android/internal/telephony/IntRangeManager;->enableRange(IILjava/lang/String;)Z
+HPLcom/android/internal/telephony/IntRangeManager;->populateAllRanges()V
+HPLcom/android/internal/telephony/IntRangeManager;->tryAddRanges(IIZ)Z
+HPLcom/android/internal/telephony/IntentBroadcaster$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/internal/telephony/IntentBroadcaster;->-get0(Lcom/android/internal/telephony/IntentBroadcaster;)Ljava/util/Map;
+HPLcom/android/internal/telephony/IntentBroadcaster;->-wrap0(Lcom/android/internal/telephony/IntentBroadcaster;Ljava/lang/String;)V
+HPLcom/android/internal/telephony/Phone$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/internal/telephony/Phone;->getAllCellInfo(Landroid/os/WorkSource;)Ljava/util/List;
+HPLcom/android/internal/telephony/Phone;->getModemActivityInfo(Landroid/os/Message;)V
+HPLcom/android/internal/telephony/Phone;->hasMatchedTetherApnSetting()Z
+HPLcom/android/internal/telephony/Phone;->privatizeCellInfoList(Ljava/util/List;)Ljava/util/List;
+HPLcom/android/internal/telephony/PhoneConstantConversions;->convertDataState(I)Lcom/android/internal/telephony/PhoneConstants$DataState;
+HPLcom/android/internal/telephony/PhoneFactory;->getDefaultSubscription()I
+HPLcom/android/internal/telephony/PhoneSubInfoController;->checkReadPhoneState(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/internal/telephony/PhoneSubInfoController;->getDefaultSubscription()I
+HPLcom/android/internal/telephony/PhoneSubInfoController;->getDeviceId(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/internal/telephony/PhoneSubInfoController;->getDeviceIdForPhone(ILjava/lang/String;)Ljava/lang/String;
+HPLcom/android/internal/telephony/PhoneSubInfoController;->getGroupIdLevel1(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/internal/telephony/PhoneSubInfoController;->getGroupIdLevel1ForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HPLcom/android/internal/telephony/PhoneSubInfoController;->getSubscriberIdForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HPLcom/android/internal/telephony/PhoneSubInfoController;->getVoiceMailNumberForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HPLcom/android/internal/telephony/RIL;->-wrap3(Lcom/android/internal/telephony/RIL;I)Lcom/android/internal/telephony/RILRequest;
+HPLcom/android/internal/telephony/RIL;->convertHalCellInfoList(Ljava/util/ArrayList;)Ljava/util/ArrayList;
+HPLcom/android/internal/telephony/RIL;->getCellInfoList(Landroid/os/Message;Landroid/os/WorkSource;)V
+HPLcom/android/internal/telephony/RIL;->getModemActivityInfo(Landroid/os/Message;)V
+HPLcom/android/internal/telephony/RIL;->setCdmaBroadcastConfig([Lcom/android/internal/telephony/cdma/CdmaSmsBroadcastConfigInfo;Landroid/os/Message;)V
+HPLcom/android/internal/telephony/RIL;->setGsmBroadcastConfig([Lcom/android/internal/telephony/gsm/SmsBroadcastConfigInfo;Landroid/os/Message;)V
+HPLcom/android/internal/telephony/RIL;->unsljLogRet(ILjava/lang/Object;)V
+HPLcom/android/internal/telephony/RadioIndication;->nitzTimeReceived(ILjava/lang/String;J)V
+HPLcom/android/internal/telephony/RadioResponse;->getCellInfoListResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HPLcom/android/internal/telephony/RadioResponse;->getModemActivityInfoResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/ActivityStatsInfo;)V
+HPLcom/android/internal/telephony/RadioResponse;->responseActivityData(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/ActivityStatsInfo;)V
+HPLcom/android/internal/telephony/RadioResponse;->responseCellInfoList(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HPLcom/android/internal/telephony/RadioResponse;->setCdmaBroadcastConfigResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HPLcom/android/internal/telephony/RadioResponse;->setGsmBroadcastConfigResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HPLcom/android/internal/telephony/ServiceStateTracker$CellInfoResult;-><init>(Lcom/android/internal/telephony/ServiceStateTracker;)V
+HPLcom/android/internal/telephony/ServiceStateTracker$CellInfoResult;-><init>(Lcom/android/internal/telephony/ServiceStateTracker;Lcom/android/internal/telephony/ServiceStateTracker$CellInfoResult;)V
+HPLcom/android/internal/telephony/ServiceStateTracker;->getAllCellInfo(Landroid/os/WorkSource;)Ljava/util/List;
+HPLcom/android/internal/telephony/ServiceStateTracker;->getAutoTime()Z
+HPLcom/android/internal/telephony/ServiceStateTracker;->getAutoTimeZone()Z
+HPLcom/android/internal/telephony/ServiceStateTracker;->isCallerOnDifferentThread()Z
+HPLcom/android/internal/telephony/ServiceStateTracker;->saveNitzTime(J)V
+HPLcom/android/internal/telephony/ServiceStateTracker;->setAndBroadcastNetworkSetTime(J)V
+HPLcom/android/internal/telephony/ServiceStateTracker;->setTimeFromNITZString(Ljava/lang/String;J)V
+HPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->-get3(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;)Ljava/lang/String;
+HPLcom/android/internal/telephony/SmsApplication$SmsPackageMonitor;->onPackageAppeared(Ljava/lang/String;I)V
+HPLcom/android/internal/telephony/SmsApplication$SmsPackageMonitor;->onPackageChanged()V
+HPLcom/android/internal/telephony/SmsApplication$SmsPackageMonitor;->onPackageDisappeared(Ljava/lang/String;I)V
+HPLcom/android/internal/telephony/SmsApplication$SmsPackageMonitor;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/internal/telephony/SmsApplication;->-wrap0(Landroid/content/pm/PackageManager;Landroid/content/ComponentName;I)V
+HPLcom/android/internal/telephony/SmsApplication;->assignWriteSmsPermissionToSystemApp(Landroid/content/Context;Landroid/content/pm/PackageManager;Landroid/app/AppOpsManager;Ljava/lang/String;)V
+HPLcom/android/internal/telephony/SmsApplication;->assignWriteSmsPermissionToSystemUid(Landroid/app/AppOpsManager;I)V
+HPLcom/android/internal/telephony/SmsApplication;->configurePreferredActivity(Landroid/content/pm/PackageManager;Landroid/content/ComponentName;I)V
+HPLcom/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;
+HPLcom/android/internal/telephony/SmsApplication;->getDefaultSmsApplicationPackageName(Landroid/content/Context;)Ljava/lang/String;
+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
+HPLcom/android/internal/telephony/SmsBroadcastUndelivered$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/internal/telephony/SmsBroadcastUndelivered$ScanRawTableThread;-><init>(Lcom/android/internal/telephony/SmsBroadcastUndelivered;Landroid/content/Context;)V
+HPLcom/android/internal/telephony/SmsBroadcastUndelivered$ScanRawTableThread;-><init>(Lcom/android/internal/telephony/SmsBroadcastUndelivered;Landroid/content/Context;Lcom/android/internal/telephony/SmsBroadcastUndelivered$ScanRawTableThread;)V
+HPLcom/android/internal/telephony/SmsBroadcastUndelivered$ScanRawTableThread;->run()V
+HPLcom/android/internal/telephony/SmsBroadcastUndelivered;->-wrap0(Lcom/android/internal/telephony/SmsBroadcastUndelivered;)V
+HPLcom/android/internal/telephony/SmsBroadcastUndelivered;->scanRawTable()V
+HPLcom/android/internal/telephony/SubscriptionController;->getActiveSubInfoCount(Ljava/lang/String;)I
+HPLcom/android/internal/telephony/UiccSmsController;->disableCellBroadcastRangeForSubscriber(IIII)Z
+HPLcom/android/internal/telephony/UiccSmsController;->enableCellBroadcastRangeForSubscriber(IIII)Z
+HPLcom/android/internal/telephony/UiccSmsController;->getIccSmsInterfaceManager(I)Lcom/android/internal/telephony/IccSmsInterfaceManager;
+HPLcom/android/internal/telephony/UiccSmsController;->getPhone(I)Lcom/android/internal/telephony/Phone;
+HPLcom/android/internal/telephony/UiccSmsController;->getPreferredSmsSubscription()I
+HPLcom/android/internal/telephony/UiccSmsController;->isSmsSimPickActivityNeeded(I)Z
+HPLcom/android/internal/telephony/WapPushOverSms$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/internal/telephony/WapPushOverSms$BindServiceThread;-><init>(Lcom/android/internal/telephony/WapPushOverSms;Landroid/content/Context;)V
+HPLcom/android/internal/telephony/WapPushOverSms$BindServiceThread;-><init>(Lcom/android/internal/telephony/WapPushOverSms;Landroid/content/Context;Lcom/android/internal/telephony/WapPushOverSms$BindServiceThread;)V
+HPLcom/android/internal/telephony/WapPushOverSms$BindServiceThread;->run()V
+HPLcom/android/internal/telephony/WapPushOverSms;->-get0(Lcom/android/internal/telephony/WapPushOverSms;)Landroid/content/Context;
+HPLcom/android/internal/telephony/WapPushOverSms;->-wrap0(Lcom/android/internal/telephony/WapPushOverSms;Landroid/content/Context;)V
+HPLcom/android/internal/telephony/WapPushOverSms;->bindWapPushManagerService(Landroid/content/Context;)V
+HPLcom/android/internal/telephony/cat/AppInterface;->onCmdResponse(Lcom/android/internal/telephony/cat/CatResponseMessage;)V
+HPLcom/android/internal/telephony/cat/CatLog;->d(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/internal/telephony/cat/CatService;->getInstance(I)Lcom/android/internal/telephony/cat/AppInterface;
+HPLcom/android/internal/telephony/cat/CatService;->getInstance(Lcom/android/internal/telephony/CommandsInterface;Landroid/content/Context;Lcom/android/internal/telephony/uicc/UiccCard;I)Lcom/android/internal/telephony/cat/CatService;
+HPLcom/android/internal/telephony/cdma/CdmaSmsBroadcastConfigInfo;-><init>(IIIZ)V
+HPLcom/android/internal/telephony/cdma/CdmaSmsBroadcastConfigInfo;->getFromServiceCategory()I
+HPLcom/android/internal/telephony/cdma/CdmaSmsBroadcastConfigInfo;->getLanguage()I
+HPLcom/android/internal/telephony/cdma/CdmaSmsBroadcastConfigInfo;->getToServiceCategory()I
+HPLcom/android/internal/telephony/cdma/CdmaSmsBroadcastConfigInfo;->isSelected()Z
+HPLcom/android/internal/telephony/dataconnection/DcTracker;->fetchDunApn()Lcom/android/internal/telephony/dataconnection/ApnSetting;
+HPLcom/android/internal/telephony/dataconnection/DcTracker;->hasMatchedTetherApnSetting()Z
+HPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->-wrap3(Lcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;Landroid/os/Message;)V
+HPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->onReleaseNetworkFor(Landroid/os/Message;)V
+HPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->releaseNetworkFor(Landroid/net/NetworkRequest;)V
+HPLcom/android/internal/telephony/gsm/SmsBroadcastConfigInfo;-><init>(IIIIZ)V
+HPLcom/android/internal/telephony/gsm/SmsBroadcastConfigInfo;->getFromCodeScheme()I
+HPLcom/android/internal/telephony/gsm/SmsBroadcastConfigInfo;->getFromServiceId()I
+HPLcom/android/internal/telephony/gsm/SmsBroadcastConfigInfo;->getToCodeScheme()I
+HPLcom/android/internal/telephony/gsm/SmsBroadcastConfigInfo;->getToServiceId()I
+HPLcom/android/internal/telephony/gsm/SmsBroadcastConfigInfo;->isSelected()Z
+HPLcom/android/internal/telephony/gsm/SmsBroadcastConfigInfo;->toString()Ljava/lang/String;
+HPLcom/android/internal/telephony/ims/-$Lambda$QWnMjc1b65aK4eEOKtjIsxJ2Sp4;->$m$2(Ljava/lang/Object;)Z
+HPLcom/android/internal/telephony/ims/-$Lambda$QWnMjc1b65aK4eEOKtjIsxJ2Sp4;->test(Ljava/lang/Object;)Z
+HPLcom/android/internal/telephony/ims/ImsResolver$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/internal/telephony/ims/ImsResolver;->-get0(Lcom/android/internal/telephony/ims/ImsResolver;)Landroid/os/Handler;
+HPLcom/android/internal/telephony/ims/ImsResolver;->getInfoByPackageName(Ljava/util/Set;Ljava/lang/String;)Ljava/util/Optional;
+HPLcom/android/internal/telephony/ims/ImsResolver;->lambda$-com_android_internal_telephony_ims_ImsResolver_19379(Ljava/lang/String;Lcom/android/internal/telephony/ims/ImsResolver$ImsServiceInfo;)Z
+HPLcom/android/internal/telephony/ims/ImsResolver;->maybeRemovedImsService(Ljava/lang/String;)Z
+HPLcom/android/internal/telephony/metrics/CallSessionEventBuilder;->setNITZ(J)Lcom/android/internal/telephony/metrics/CallSessionEventBuilder;
+HPLcom/android/internal/telephony/metrics/TelephonyEventBuilder;->setNITZ(J)Lcom/android/internal/telephony/metrics/TelephonyEventBuilder;
+HPLcom/android/internal/telephony/metrics/TelephonyMetrics;->writeNITZEvent(IJ)V
+HPLcom/android/internal/telephony/uicc/UiccCard;->getCarrierPrivilegeStatus(Landroid/content/pm/PackageManager;Ljava/lang/String;)I
+HPLcom/android/internal/textservice/ISpellCheckerService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/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
+HPLcom/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
+HPLcom/android/internal/textservice/ISpellCheckerService;->getISpellCheckerSession(Ljava/lang/String;Lcom/android/internal/textservice/ISpellCheckerSessionListener;Landroid/os/Bundle;Lcom/android/internal/textservice/ISpellCheckerServiceCallback;)V
+HPLcom/android/internal/textservice/ISpellCheckerServiceCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/textservice/ISpellCheckerServiceCallback$Stub$Proxy;->onSessionCreated(Lcom/android/internal/textservice/ISpellCheckerSession;)V
+HPLcom/android/internal/textservice/ISpellCheckerServiceCallback$Stub;-><init>()V
+HPLcom/android/internal/textservice/ISpellCheckerServiceCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/textservice/ISpellCheckerServiceCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/textservice/ISpellCheckerServiceCallback;
+HPLcom/android/internal/textservice/ISpellCheckerServiceCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/textservice/ISpellCheckerServiceCallback;->onSessionCreated(Lcom/android/internal/textservice/ISpellCheckerSession;)V
+HPLcom/android/internal/textservice/ISpellCheckerSession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/textservice/ISpellCheckerSession$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/textservice/ISpellCheckerSession$Stub;-><init>()V
+HPLcom/android/internal/textservice/ISpellCheckerSession$Stub;->asBinder()Landroid/os/IBinder;
+HPLcom/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
+HPLcom/android/internal/textservice/ISpellCheckerSession;->onCancel()V
+HPLcom/android/internal/textservice/ISpellCheckerSession;->onClose()V
+HPLcom/android/internal/textservice/ISpellCheckerSession;->onGetSentenceSuggestionsMultiple([Landroid/view/textservice/TextInfo;I)V
+HPLcom/android/internal/textservice/ISpellCheckerSession;->onGetSuggestionsMultiple([Landroid/view/textservice/TextInfo;IZ)V
+HPLcom/android/internal/textservice/ISpellCheckerSessionListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/textservice/ISpellCheckerSessionListener$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/textservice/ISpellCheckerSessionListener$Stub$Proxy;->onGetSentenceSuggestions([Landroid/view/textservice/SentenceSuggestionsInfo;)V
+HPLcom/android/internal/textservice/ISpellCheckerSessionListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/textservice/ISpellCheckerSessionListener;
+HPLcom/android/internal/textservice/ISpellCheckerSessionListener;->onGetSentenceSuggestions([Landroid/view/textservice/SentenceSuggestionsInfo;)V
+HPLcom/android/internal/textservice/ISpellCheckerSessionListener;->onGetSuggestions([Landroid/view/textservice/SuggestionsInfo;)V
+HPLcom/android/internal/textservice/ITextServicesManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/textservice/ITextServicesManager$Stub$Proxy;->getCurrentSpellCheckerSubtype(Ljava/lang/String;Z)Landroid/view/textservice/SpellCheckerSubtype;
+HPLcom/android/internal/textservice/ITextServicesManager$Stub$Proxy;->isSpellCheckerEnabled()Z
+HPLcom/android/internal/textservice/ITextServicesManager$Stub;-><init>()V
+HPLcom/android/internal/textservice/ITextServicesManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/textservice/ITextServicesManager;
+HPLcom/android/internal/textservice/ITextServicesManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/textservice/ITextServicesManager;->finishSpellCheckerService(Lcom/android/internal/textservice/ISpellCheckerSessionListener;)V
+HPLcom/android/internal/textservice/ITextServicesManager;->getCurrentSpellChecker(Ljava/lang/String;)Landroid/view/textservice/SpellCheckerInfo;
+HPLcom/android/internal/textservice/ITextServicesManager;->getCurrentSpellCheckerSubtype(Ljava/lang/String;Z)Landroid/view/textservice/SpellCheckerSubtype;
+HPLcom/android/internal/textservice/ITextServicesManager;->getEnabledSpellCheckers()[Landroid/view/textservice/SpellCheckerInfo;
+HPLcom/android/internal/textservice/ITextServicesManager;->getSpellCheckerService(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/textservice/ITextServicesSessionListener;Lcom/android/internal/textservice/ISpellCheckerSessionListener;Landroid/os/Bundle;)V
+HPLcom/android/internal/textservice/ITextServicesManager;->isSpellCheckerEnabled()Z
+HPLcom/android/internal/textservice/ITextServicesSessionListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/textservice/ITextServicesSessionListener$Stub$Proxy;->onServiceConnected(Lcom/android/internal/textservice/ISpellCheckerSession;)V
+HPLcom/android/internal/textservice/ITextServicesSessionListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/textservice/ITextServicesSessionListener;
+HPLcom/android/internal/textservice/ITextServicesSessionListener;->onServiceConnected(Lcom/android/internal/textservice/ISpellCheckerSession;)V
+HPLcom/android/internal/transition/EpicenterTranslateClipReveal;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLcom/android/internal/util/ArrayUtils;->add(Ljava/util/ArrayList;Ljava/lang/Object;)Ljava/util/ArrayList;
+HPLcom/android/internal/util/ArrayUtils;->contains(Ljava/util/Collection;Ljava/lang/Object;)Z
+HPLcom/android/internal/util/ArrayUtils;->contains([II)Z
+HPLcom/android/internal/util/ArrayUtils;->isEmpty([B)Z
+HPLcom/android/internal/util/ArrayUtils;->newUnpaddedByteArray(I)[B
+HPLcom/android/internal/util/ArrayUtils;->remove(Ljava/util/ArrayList;Ljava/lang/Object;)Ljava/util/ArrayList;
+HPLcom/android/internal/util/ArrayUtils;->total([J)J
+HPLcom/android/internal/util/ArrayUtils;->trimToSize([Ljava/lang/Object;I)[Ljava/lang/Object;
+HPLcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;->-get0(Lcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;)Ljava/lang/Object;
+HPLcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;->-get1(Lcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;)Landroid/os/Message;
+HPLcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;->-set0(Lcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;Landroid/os/Message;)Landroid/os/Message;
+HPLcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;-><init>(Lcom/android/internal/util/AsyncChannel$SyncMessenger;Landroid/os/Looper;)V
+HPLcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;-><init>(Lcom/android/internal/util/AsyncChannel$SyncMessenger;Landroid/os/Looper;Lcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;)V
+HPLcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/internal/util/AsyncChannel$SyncMessenger;->-wrap0(Landroid/os/Messenger;Landroid/os/Message;)Landroid/os/Message;
+HPLcom/android/internal/util/AsyncChannel$SyncMessenger;-><init>()V
+HPLcom/android/internal/util/AsyncChannel$SyncMessenger;->obtain()Lcom/android/internal/util/AsyncChannel$SyncMessenger;
+HPLcom/android/internal/util/AsyncChannel$SyncMessenger;->recycle()V
+HPLcom/android/internal/util/AsyncChannel$SyncMessenger;->sendMessageSynchronously(Landroid/os/Messenger;Landroid/os/Message;)Landroid/os/Message;
+HPLcom/android/internal/util/AsyncChannel;->connect(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Handler;)V
+HPLcom/android/internal/util/AsyncChannel;->connectSync(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Messenger;)I
+HPLcom/android/internal/util/AsyncChannel;->replyToMessage(Landroid/os/Message;II)V
+HPLcom/android/internal/util/AsyncChannel;->replyToMessage(Landroid/os/Message;Landroid/os/Message;)V
+HPLcom/android/internal/util/AsyncChannel;->sendMessage(I)V
+HPLcom/android/internal/util/AsyncChannel;->sendMessage(II)V
+HPLcom/android/internal/util/AsyncChannel;->sendMessage(III)V
+HPLcom/android/internal/util/AsyncChannel;->sendMessage(IIILjava/lang/Object;)V
+HPLcom/android/internal/util/AsyncChannel;->sendMessage(ILjava/lang/Object;)V
+HPLcom/android/internal/util/AsyncChannel;->sendMessage(Landroid/os/Message;)V
+HPLcom/android/internal/util/AsyncChannel;->sendMessageSynchronously(I)Landroid/os/Message;
+HPLcom/android/internal/util/AsyncChannel;->sendMessageSynchronously(II)Landroid/os/Message;
+HPLcom/android/internal/util/AsyncChannel;->sendMessageSynchronously(Landroid/os/Message;)Landroid/os/Message;
+HPLcom/android/internal/util/BitUtils;->bytesToBEInt([B)I
+HPLcom/android/internal/util/BitUtils;->getUint16(Ljava/nio/ByteBuffer;I)I
+HPLcom/android/internal/util/BitUtils;->getUint32(Ljava/nio/ByteBuffer;I)J
+HPLcom/android/internal/util/BitUtils;->getUint8(Ljava/nio/ByteBuffer;I)I
+HPLcom/android/internal/util/BitUtils;->maskedEquals(Ljava/util/UUID;Ljava/util/UUID;Ljava/util/UUID;)Z
+HPLcom/android/internal/util/BitUtils;->packBits([I)J
+HPLcom/android/internal/util/BitUtils;->uint16(S)I
+HPLcom/android/internal/util/BitUtils;->uint32(I)J
+HPLcom/android/internal/util/BitUtils;->uint8(B)I
+HPLcom/android/internal/util/CollectionUtils;->map(Ljava/util/Set;Ljava/util/function/Function;)Ljava/util/Set;
+HPLcom/android/internal/util/ConcurrentUtils;->waitForFutureNoInterrupt(Ljava/util/concurrent/Future;Ljava/lang/String;)Ljava/lang/Object;
+HPLcom/android/internal/util/DumpUtils$Dump;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/internal/util/DumpUtils;->checkDumpAndUsageStatsPermission(Landroid/content/Context;Ljava/lang/String;Ljava/io/PrintWriter;)Z
+HPLcom/android/internal/util/DumpUtils;->checkDumpPermission(Landroid/content/Context;Ljava/lang/String;Ljava/io/PrintWriter;)Z
+HPLcom/android/internal/util/DumpUtils;->checkUsageStatsPermission(Landroid/content/Context;Ljava/lang/String;Ljava/io/PrintWriter;)Z
+HPLcom/android/internal/util/FastPrintWriter;-><init>(Ljava/io/Writer;)V
+HPLcom/android/internal/util/FastPrintWriter;->appendLocked(C)V
+HPLcom/android/internal/util/FastPrintWriter;->appendLocked([CII)V
+HPLcom/android/internal/util/FastPrintWriter;->print(C)V
+HPLcom/android/internal/util/FastPrintWriter;->print(I)V
+HPLcom/android/internal/util/FastPrintWriter;->print(J)V
+HPLcom/android/internal/util/FastPrintWriter;->println(I)V
+HPLcom/android/internal/util/FastPrintWriter;->setError()V
+HPLcom/android/internal/util/FastPrintWriter;->write(I)V
+HPLcom/android/internal/util/FastPrintWriter;->write(Ljava/lang/String;II)V
+HPLcom/android/internal/util/FastPrintWriter;->write([CII)V
+HPLcom/android/internal/util/FastXmlSerializer;->setOutput(Ljava/io/Writer;)V
+HPLcom/android/internal/util/FileRotator$FileInfo;-><init>(Ljava/lang/String;)V
+HPLcom/android/internal/util/FileRotator$FileInfo;->isActive()Z
+HPLcom/android/internal/util/FileRotator$FileInfo;->parse(Ljava/lang/String;)Z
+HPLcom/android/internal/util/FileRotator$Rewriter;->reset()V
+HPLcom/android/internal/util/FileRotator$Rewriter;->shouldWrite()Z
+HPLcom/android/internal/util/FileRotator$Writer;->write(Ljava/io/OutputStream;)V
+HPLcom/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
+HPLcom/android/internal/util/FileRotator;->readFile(Ljava/io/File;Lcom/android/internal/util/FileRotator$Reader;)V
+HPLcom/android/internal/util/FileRotator;->readMatching(Lcom/android/internal/util/FileRotator$Reader;JJ)V
+HPLcom/android/internal/util/FileRotator;->rewriteActive(Lcom/android/internal/util/FileRotator$Rewriter;J)V
+HPLcom/android/internal/util/FileRotator;->rewriteSingle(Lcom/android/internal/util/FileRotator$Rewriter;Ljava/lang/String;)V
+HPLcom/android/internal/util/FileRotator;->writeFile(Ljava/io/File;Lcom/android/internal/util/FileRotator$Writer;)V
+HPLcom/android/internal/util/HexDump;->toHexString([B)Ljava/lang/String;
+HPLcom/android/internal/util/HexDump;->toHexString([BIIZ)Ljava/lang/String;
+HPLcom/android/internal/util/HexDump;->toHexString([BZ)Ljava/lang/String;
+HPLcom/android/internal/util/IndentingPrintWriter;-><init>(Ljava/io/Writer;Ljava/lang/String;)V
+HPLcom/android/internal/util/IndentingPrintWriter;->printHexPair(Ljava/lang/String;I)V
+HPLcom/android/internal/util/IndentingPrintWriter;->printPair(Ljava/lang/String;[Ljava/lang/Object;)V
+HPLcom/android/internal/util/IntPair;->of(II)J
+HPLcom/android/internal/util/LocalLog;-><init>(Ljava/lang/String;)V
+HPLcom/android/internal/util/MemInfoReader;->getCachedSizeKb()J
+HPLcom/android/internal/util/MemInfoReader;->getFreeSizeKb()J
+HPLcom/android/internal/util/MemInfoReader;->getKernelUsedSizeKb()J
+HPLcom/android/internal/util/MemInfoReader;->getSwapFreeSizeKb()J
+HPLcom/android/internal/util/MemInfoReader;->getSwapTotalSizeKb()J
+HPLcom/android/internal/util/MemInfoReader;->getTotalSizeKb()J
+HPLcom/android/internal/util/MemInfoReader;->getZramTotalSizeKb()J
+HPLcom/android/internal/util/MessageUtils;->findMessageNames([Ljava/lang/Class;)Landroid/util/SparseArray;
+HPLcom/android/internal/util/MessageUtils;->findMessageNames([Ljava/lang/Class;[Ljava/lang/String;)Landroid/util/SparseArray;
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->HSLToColor([F)I
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->LABToColor(DDD)I
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->LABToXYZ(DDD[D)V
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->RGBToHSL(III[F)V
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->RGBToLAB(III[D)V
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->RGBToXYZ(III[D)V
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->XYZToColor(DDD)I
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->XYZToLAB(DDD[D)V
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->calculateContrast(II)D
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->calculateLuminance(I)D
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->colorToHSL(I[F)V
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->colorToLAB(I[D)V
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->colorToXYZ(I[D)V
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->constrain(FFF)F
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->constrain(III)I
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->getTempDouble3Array()[D
+HPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->pivotXyzComponent(D)D
+HPLcom/android/internal/util/NotificationColorUtil;->calculateContrast(II)D
+HPLcom/android/internal/util/NotificationColorUtil;->ensureLargeTextContrast(IIZ)I
+HPLcom/android/internal/util/NotificationColorUtil;->ensureTextContrast(IIZ)I
+HPLcom/android/internal/util/NotificationColorUtil;->ensureTextContrastOnBlack(I)I
+HPLcom/android/internal/util/NotificationColorUtil;->findAlphaToMeetContrast(IID)I
+HPLcom/android/internal/util/NotificationColorUtil;->findContrastColor(IIZD)I
+HPLcom/android/internal/util/NotificationColorUtil;->findContrastColorAgainstDark(IIZD)I
+HPLcom/android/internal/util/NotificationColorUtil;->getShiftedColor(II)I
+HPLcom/android/internal/util/NotificationColorUtil;->resolveAmbientColor(Landroid/content/Context;I)I
+HPLcom/android/internal/util/NotificationColorUtil;->resolveColor(Landroid/content/Context;I)I
+HPLcom/android/internal/util/NotificationColorUtil;->resolveContrastColor(Landroid/content/Context;II)I
+HPLcom/android/internal/util/NotificationColorUtil;->resolveContrastColor(Landroid/content/Context;IIZ)I
+HPLcom/android/internal/util/NotificationColorUtil;->satisfiesTextContrast(II)Z
+HPLcom/android/internal/util/NotificationMessagingUtil;->isImportantMessaging(Landroid/service/notification/StatusBarNotification;I)Z
+HPLcom/android/internal/util/ObjectUtils;->compare(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
+HPLcom/android/internal/util/Preconditions;->checkArgumentNonnegative(I)I
+HPLcom/android/internal/util/Preconditions;->checkCollectionElementsNotNull(Ljava/util/Collection;Ljava/lang/String;)Ljava/util/Collection;
+HPLcom/android/internal/util/Preconditions;->checkFlagsArgument(II)I
+HPLcom/android/internal/util/ProcFileReader;-><init>(Ljava/io/InputStream;)V
+HPLcom/android/internal/util/ProcFileReader;-><init>(Ljava/io/InputStream;I)V
+HPLcom/android/internal/util/ProcFileReader;->close()V
+HPLcom/android/internal/util/ProcFileReader;->consumeBuf(I)V
+HPLcom/android/internal/util/ProcFileReader;->fillBuf()I
+HPLcom/android/internal/util/ProcFileReader;->finishLine()V
+HPLcom/android/internal/util/ProcFileReader;->hasMoreData()Z
+HPLcom/android/internal/util/ProcFileReader;->nextInt()I
+HPLcom/android/internal/util/ProcFileReader;->nextLong()J
+HPLcom/android/internal/util/ProcFileReader;->nextString()Ljava/lang/String;
+HPLcom/android/internal/util/ProcFileReader;->nextTokenIndex()I
+HPLcom/android/internal/util/ProcFileReader;->parseAndConsumeLong(I)J
+HPLcom/android/internal/util/ProcFileReader;->parseAndConsumeString(I)Ljava/lang/String;
+HPLcom/android/internal/util/ProgressReporter;->addListener(Landroid/os/IProgressListener;)V
+HPLcom/android/internal/util/ProgressReporter;->finish()V
+HPLcom/android/internal/util/ProgressReporter;->notifyFinished(ILandroid/os/Bundle;)V
+HPLcom/android/internal/util/ProgressReporter;->notifyProgress(IILandroid/os/Bundle;)V
+HPLcom/android/internal/util/ProgressReporter;->notifyStarted(ILandroid/os/Bundle;)V
+HPLcom/android/internal/util/ProgressReporter;->setProgress(I)V
+HPLcom/android/internal/util/ProgressReporter;->setProgress(IILjava/lang/CharSequence;)V
+HPLcom/android/internal/util/ProgressReporter;->setProgress(ILjava/lang/CharSequence;)V
+HPLcom/android/internal/util/ProgressReporter;->start()V
+HPLcom/android/internal/util/RingBufferIndices;-><init>(I)V
+HPLcom/android/internal/util/RingBufferIndices;->add()I
+HPLcom/android/internal/util/ScreenShapeHelper;->getWindowOutsetBottomPx(Landroid/content/res/Resources;)I
+HPLcom/android/internal/util/SizedInputStream;-><init>(Ljava/io/InputStream;J)V
+HPLcom/android/internal/util/SizedInputStream;->close()V
+HPLcom/android/internal/util/SizedInputStream;->read([BII)I
+HPLcom/android/internal/util/State;->getName()Ljava/lang/String;
+HPLcom/android/internal/util/State;->processMessage(Landroid/os/Message;)Z
+HPLcom/android/internal/util/StateMachine$LogRec;->toString()Ljava/lang/String;
+HPLcom/android/internal/util/StateMachine$LogRecords;->count()I
+HPLcom/android/internal/util/StateMachine$LogRecords;->get(I)Lcom/android/internal/util/StateMachine$LogRec;
+HPLcom/android/internal/util/StateMachine$LogRecords;->setLogOnlyTransitions(Z)V
+HPLcom/android/internal/util/StateMachine$LogRecords;->size()I
+HPLcom/android/internal/util/StateMachine$SmHandler;->-get0(Lcom/android/internal/util/StateMachine$SmHandler;)Z
+HPLcom/android/internal/util/StateMachine$SmHandler;->-wrap6(Lcom/android/internal/util/StateMachine$SmHandler;Landroid/os/Message;)V
+HPLcom/android/internal/util/StateMachine$SmHandler;->deferMessage(Landroid/os/Message;)V
+HPLcom/android/internal/util/StateMachine;-><init>(Ljava/lang/String;Landroid/os/Looper;)V
+HPLcom/android/internal/util/StateMachine;->deferMessage(Landroid/os/Message;)V
+HPLcom/android/internal/util/StateMachine;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/internal/util/StateMachine;->getLogRec(I)Lcom/android/internal/util/StateMachine$LogRec;
+HPLcom/android/internal/util/StateMachine;->getLogRecCount()I
+HPLcom/android/internal/util/StateMachine;->getLogRecSize()I
+HPLcom/android/internal/util/StateMachine;->getWhatToString(I)Ljava/lang/String;
+HPLcom/android/internal/util/StateMachine;->logd(Ljava/lang/String;)V
+HPLcom/android/internal/util/StateMachine;->obtainMessage(II)Landroid/os/Message;
+HPLcom/android/internal/util/StateMachine;->obtainMessage(III)Landroid/os/Message;
+HPLcom/android/internal/util/StateMachine;->obtainMessage(IIILjava/lang/Object;)Landroid/os/Message;
+HPLcom/android/internal/util/StateMachine;->sendMessage(II)V
+HPLcom/android/internal/util/StateMachine;->sendMessage(III)V
+HPLcom/android/internal/util/StateMachine;->sendMessage(IIILjava/lang/Object;)V
+HPLcom/android/internal/util/StateMachine;->sendMessageDelayed(ILjava/lang/Object;J)V
+HPLcom/android/internal/util/StateMachine;->sendMessageDelayed(Landroid/os/Message;J)V
+HPLcom/android/internal/util/StateMachine;->setLogOnlyTransitions(Z)V
+HPLcom/android/internal/util/StateMachine;->unhandledMessage(Landroid/os/Message;)V
+HPLcom/android/internal/util/TokenBucket;-><init>(II)V
+HPLcom/android/internal/util/TokenBucket;-><init>(III)V
+HPLcom/android/internal/util/TokenBucket;->fill()V
+HPLcom/android/internal/util/TokenBucket;->get()Z
+HPLcom/android/internal/util/TokenBucket;->get(I)I
+HPLcom/android/internal/util/TokenBucket;->scaledTime()J
+HPLcom/android/internal/util/WakeupMessage;-><init>(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/String;I)V
+HPLcom/android/internal/util/WakeupMessage;-><init>(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/String;IIILjava/lang/Object;)V
+HPLcom/android/internal/util/WakeupMessage;->cancel()V
+HPLcom/android/internal/util/WakeupMessage;->onAlarm()V
+HPLcom/android/internal/util/WakeupMessage;->schedule(J)V
+HPLcom/android/internal/util/XmlUtils$ReadMapCallback;->readThisUnknownObjectXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/Object;
+HPLcom/android/internal/util/XmlUtils;->readBooleanAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Z
+HPLcom/android/internal/util/XmlUtils;->readLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)J
+HPLcom/android/internal/util/XmlUtils;->readThisArrayMapXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;)Landroid/util/ArrayMap;
+HPLcom/android/internal/util/XmlUtils;->readThisByteArrayXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;[Ljava/lang/String;)[B
+HPLcom/android/internal/util/XmlUtils;->readThisLongArrayXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;[Ljava/lang/String;)[J
+HPLcom/android/internal/util/XmlUtils;->readThisStringArrayXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
+HPLcom/android/internal/util/XmlUtils;->writeBooleanAttribute(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Z)V
+HPLcom/android/internal/util/XmlUtils;->writeByteArrayXml([BLjava/lang/String;Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/internal/util/XmlUtils;->writeLongArrayXml([JLjava/lang/String;Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/internal/util/XmlUtils;->writeLongAttribute(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;J)V
+HPLcom/android/internal/util/XmlUtils;->writeStringArrayXml([Ljava/lang/String;Ljava/lang/String;Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/internal/util/XmlUtils;->writeUriAttribute(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Landroid/net/Uri;)V
+HPLcom/android/internal/view/BaseIWindow;->closeSystemDialogs(Ljava/lang/String;)V
+HPLcom/android/internal/view/BaseIWindow;->dispatchAppVisibility(Z)V
+HPLcom/android/internal/view/IInputConnectionWrapper;->beginBatchEdit()V
+HPLcom/android/internal/view/IInputConnectionWrapper;->closeConnection()V
+HPLcom/android/internal/view/IInputConnectionWrapper;->deleteSurroundingText(II)V
+HPLcom/android/internal/view/IInputConnectionWrapper;->endBatchEdit()V
+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
+HPLcom/android/internal/view/IInputConnectionWrapper;->obtainMessageII(III)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;
+HPLcom/android/internal/view/IInputConnectionWrapper;->obtainMessageO(ILjava/lang/Object;)Landroid/os/Message;
+HPLcom/android/internal/view/IInputConnectionWrapper;->sendKeyEvent(Landroid/view/KeyEvent;)V
+HPLcom/android/internal/view/IInputConnectionWrapper;->setComposingRegion(II)V
+HPLcom/android/internal/view/IInputConnectionWrapper;->setComposingText(Ljava/lang/CharSequence;I)V
+HPLcom/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;->clearMetaKeyStates(I)V
+HPLcom/android/internal/view/IInputContext$Stub$Proxy;->commitText(Ljava/lang/CharSequence;I)V
+HPLcom/android/internal/view/IInputContext$Stub$Proxy;->deleteSurroundingText(II)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;->performEditorAction(I)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
+HPLcom/android/internal/view/IInputContextCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+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;-><init>()V
+HPLcom/android/internal/view/IInputContextCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/view/IInputContextCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputContextCallback;
+HPLcom/android/internal/view/IInputContextCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/view/IInputContextCallback;->setCommitContentResult(ZI)V
+HPLcom/android/internal/view/IInputContextCallback;->setCursorCapsMode(II)V
+HPLcom/android/internal/view/IInputContextCallback;->setExtractedText(Landroid/view/inputmethod/ExtractedText;I)V
+HPLcom/android/internal/view/IInputContextCallback;->setRequestUpdateCursorAnchorInfoResult(ZI)V
+HPLcom/android/internal/view/IInputContextCallback;->setSelectedText(Ljava/lang/CharSequence;I)V
+HPLcom/android/internal/view/IInputContextCallback;->setTextAfterCursor(Ljava/lang/CharSequence;I)V
+HPLcom/android/internal/view/IInputContextCallback;->setTextBeforeCursor(Ljava/lang/CharSequence;I)V
+HPLcom/android/internal/view/IInputMethod$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/view/IInputMethod$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/view/IInputMethod$Stub$Proxy;->attachToken(Landroid/os/IBinder;)V
+HPLcom/android/internal/view/IInputMethod$Stub$Proxy;->bindInput(Landroid/view/inputmethod/InputBinding;)V
+HPLcom/android/internal/view/IInputMethod$Stub$Proxy;->changeInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)V
+HPLcom/android/internal/view/IInputMethod$Stub$Proxy;->createSession(Landroid/view/InputChannel;Lcom/android/internal/view/IInputSessionCallback;)V
+HPLcom/android/internal/view/IInputMethod$Stub$Proxy;->hideSoftInput(ILandroid/os/ResultReceiver;)V
+HPLcom/android/internal/view/IInputMethod$Stub$Proxy;->setSessionEnabled(Lcom/android/internal/view/IInputMethodSession;Z)V
+HPLcom/android/internal/view/IInputMethod$Stub$Proxy;->showSoftInput(ILandroid/os/ResultReceiver;)V
+HPLcom/android/internal/view/IInputMethod$Stub$Proxy;->startInput(Landroid/os/IBinder;Lcom/android/internal/view/IInputContext;ILandroid/view/inputmethod/EditorInfo;Z)V
+HPLcom/android/internal/view/IInputMethod$Stub$Proxy;->unbindInput()V
+HPLcom/android/internal/view/IInputMethod$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethod;
+HPLcom/android/internal/view/IInputMethodClient$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/internal/view/IInputMethodClient$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/view/IInputMethodClient$Stub$Proxy;->onBindMethod(Lcom/android/internal/view/InputBindResult;)V
+HPLcom/android/internal/view/IInputMethodClient$Stub$Proxy;->onUnbindMethod(II)V
+HPLcom/android/internal/view/IInputMethodClient$Stub$Proxy;->reportFullscreenMode(Z)V
+HPLcom/android/internal/view/IInputMethodClient$Stub$Proxy;->setActive(ZZ)V
+HPLcom/android/internal/view/IInputMethodClient$Stub$Proxy;->setUserActionNotificationSequenceNumber(I)V
+HPLcom/android/internal/view/IInputMethodClient$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodClient;
+HPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->getEnabledInputMethodList()Ljava/util/List;
+HPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->getEnabledInputMethodSubtypeList(Ljava/lang/String;Z)Ljava/util/List;
+HPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->getInputMethodList()Ljava/util/List;
+HPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->hideMySoftInput(Landroid/os/IBinder;I)V
+HPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->notifyUserAction(I)V
+HPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->setAdditionalInputMethodSubtypes(Ljava/lang/String;[Landroid/view/inputmethod/InputMethodSubtype;)V
+HPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->setImeWindowStatus(Landroid/os/IBinder;Landroid/os/IBinder;II)V
+HPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->shouldOfferSwitchingToNextInputMethod(Landroid/os/IBinder;)Z
+HPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->showSoftInput(Lcom/android/internal/view/IInputMethodClient;ILandroid/os/ResultReceiver;)Z
+HPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->updateStatusIcon(Landroid/os/IBinder;Ljava/lang/String;I)V
+HPLcom/android/internal/view/IInputMethodManager$Stub;-><init>()V
+HPLcom/android/internal/view/IInputMethodManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/view/IInputMethodSession$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/view/IInputMethodSession$Stub$Proxy;->displayCompletions([Landroid/view/inputmethod/CompletionInfo;)V
+HPLcom/android/internal/view/IInputMethodSession$Stub$Proxy;->finishSession()V
+HPLcom/android/internal/view/IInputMethodSession$Stub$Proxy;->updateSelection(IIIIII)V
+HPLcom/android/internal/view/IInputMethodSession$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/view/IInputSessionCallback$Stub;-><init>()V
+HPLcom/android/internal/view/IInputSessionCallback$Stub;->asBinder()Landroid/os/IBinder;
+HPLcom/android/internal/view/IInputSessionCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/view/InputBindResult;-><init>(Lcom/android/internal/view/IInputMethodSession;Landroid/view/InputChannel;Ljava/lang/String;II)V
+HPLcom/android/internal/view/InputBindResult;->writeToParcel(Landroid/os/Parcel;I)V
+HPLcom/android/internal/view/InputConnectionWrapper$InputContextCallback;->-wrap0()Lcom/android/internal/view/InputConnectionWrapper$InputContextCallback;
+HPLcom/android/internal/view/InputConnectionWrapper$InputContextCallback;->-wrap1(Lcom/android/internal/view/InputConnectionWrapper$InputContextCallback;)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;->clearMetaKeyStates(I)Z
+HPLcom/android/internal/view/InputConnectionWrapper;->commitText(Ljava/lang/CharSequence;I)Z
+HPLcom/android/internal/view/InputConnectionWrapper;->deleteSurroundingText(II)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;->performEditorAction(I)Z
+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/WindowManagerPolicyThread;->set(Ljava/lang/Thread;Landroid/os/Looper;)V
+HPLcom/android/internal/view/animation/FallbackLUTInterpolator;->createLUT(Landroid/animation/TimeInterpolator;J)[F
+HPLcom/android/internal/view/animation/FallbackLUTInterpolator;->createNativeInterpolator(Landroid/animation/TimeInterpolator;J)J
+HPLcom/android/internal/view/menu/ActionMenuItemView;->getItemData()Lcom/android/internal/view/menu/MenuItemImpl;
+HPLcom/android/internal/view/menu/BaseMenuPresenter;->getId()I
+HPLcom/android/internal/view/menu/BaseMenuPresenter;->onCloseMenu(Lcom/android/internal/view/menu/MenuBuilder;Z)V
+HPLcom/android/internal/view/menu/MenuBuilder;->add(IIII)Landroid/view/MenuItem;
+HPLcom/android/internal/view/menu/MenuBuilder;->close()V
+HPLcom/android/internal/view/menu/MenuBuilder;->close(Z)V
+HPLcom/android/internal/view/menu/MenuBuilder;->dispatchSaveInstanceState(Landroid/os/Bundle;)V
+HPLcom/android/internal/view/menu/MenuBuilder;->savePresenterStates(Landroid/os/Bundle;)V
+HPLcom/android/internal/view/menu/MenuItemImpl;->applyIconTintIfNecessary(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
+HPLcom/android/internal/view/menu/MenuItemImpl;->setOnMenuItemClickListener(Landroid/view/MenuItem$OnMenuItemClickListener;)Landroid/view/MenuItem;
+HPLcom/android/internal/view/menu/MenuItemImpl;->showsTextAsAction()Z
+HPLcom/android/internal/widget/-$Lambda$LaTFiUorkqfcqmu-zMQbCLeO77c;-><init>()V
+HPLcom/android/internal/widget/ActionBarContextView;->onDetachedFromWindow()V
+HPLcom/android/internal/widget/ActionBarOverlayLayout;->dismissPopups()V
+HPLcom/android/internal/widget/ActionBarOverlayLayout;->haltActionBarHideOffsetAnimations()V
+HPLcom/android/internal/widget/ActionBarOverlayLayout;->isOverflowMenuShowing()Z
+HPLcom/android/internal/widget/ActionBarOverlayLayout;->onDetachedFromWindow()V
+HPLcom/android/internal/widget/ActionBarOverlayLayout;->saveToolbarHierarchyState(Landroid/util/SparseArray;)V
+HPLcom/android/internal/widget/ActionBarOverlayLayout;->shouldDelayChildPressedState()Z
+HPLcom/android/internal/widget/AlertDialogLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLcom/android/internal/widget/AlertDialogLayout;->forceUniformWidth(II)V
+HPLcom/android/internal/widget/AlertDialogLayout;->onLayout(ZIIII)V
+HPLcom/android/internal/widget/AlertDialogLayout;->onMeasure(II)V
+HPLcom/android/internal/widget/AlertDialogLayout;->resolveMinimumHeight(Landroid/view/View;)I
+HPLcom/android/internal/widget/AlertDialogLayout;->setChildFrame(Landroid/view/View;IIII)V
+HPLcom/android/internal/widget/AlertDialogLayout;->tryOnMeasure(II)Z
+HPLcom/android/internal/widget/ButtonBarLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLcom/android/internal/widget/ButtonBarLayout;->getMinimumHeight()I
+HPLcom/android/internal/widget/ButtonBarLayout;->getNextVisibleChildIndex(I)I
+HPLcom/android/internal/widget/ButtonBarLayout;->isStacked()Z
+HPLcom/android/internal/widget/ButtonBarLayout;->onMeasure(II)V
+HPLcom/android/internal/widget/CachingIconView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLcom/android/internal/widget/CachingIconView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLcom/android/internal/widget/CachingIconView;->resetCache()V
+HPLcom/android/internal/widget/CachingIconView;->setForceHidden(Z)V
+HPLcom/android/internal/widget/CachingIconView;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V
+HPLcom/android/internal/widget/CachingIconView;->setImageIconAsync(Landroid/graphics/drawable/Icon;)Ljava/lang/Runnable;
+HPLcom/android/internal/widget/CachingIconView;->setVisibility(I)V
+HPLcom/android/internal/widget/CachingIconView;->updateVisibility()V
+HPLcom/android/internal/widget/DialogTitle;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLcom/android/internal/widget/EditableInputConnection;-><init>(Landroid/widget/TextView;)V
+HPLcom/android/internal/widget/EditableInputConnection;->beginBatchEdit()Z
+HPLcom/android/internal/widget/EditableInputConnection;->closeConnection()V
+HPLcom/android/internal/widget/EditableInputConnection;->endBatchEdit()Z
+HPLcom/android/internal/widget/EditableInputConnection;->getEditable()Landroid/text/Editable;
+HPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->setBoolean(Ljava/lang/String;ZI)V
+HPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->userPresent(I)V
+HPLcom/android/internal/widget/ILockSettings$Stub;-><init>()V
+HPLcom/android/internal/widget/ILockSettings$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/internal/widget/ImageFloatingTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLcom/android/internal/widget/ImageFloatingTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HPLcom/android/internal/widget/ImageFloatingTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HPLcom/android/internal/widget/ImageFloatingTextView;->makeSingleLayout(ILandroid/text/BoringLayout$Metrics;ILandroid/text/Layout$Alignment;ZLandroid/text/TextUtils$TruncateAt;Z)Landroid/text/Layout;
+HPLcom/android/internal/widget/ImageFloatingTextView;->onMeasure(II)V
+HPLcom/android/internal/widget/ImageFloatingTextView;->onRtlPropertiesChanged(I)V
+HPLcom/android/internal/widget/ImageFloatingTextView;->requestLayout()V
+HPLcom/android/internal/widget/LockPatternUtils$1;-><init>(Lcom/android/internal/widget/LockPatternUtils;Landroid/os/IBinder;ILjava/lang/String;)V
+HPLcom/android/internal/widget/LockPatternUtils$1;->doInBackground([Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/internal/widget/LockPatternUtils$1;->doInBackground([Ljava/lang/Void;)Ljava/lang/Void;
+HPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$1;->onStrongAuthRequiredChanged(II)V
+HPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$H;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->-get0(Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;)Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$H;
+HPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->handleStrongAuthRequiredChanged(II)V
+HPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->isTrustAllowedForUser(I)Z
+HPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->onStrongAuthRequiredChanged(I)V
+HPLcom/android/internal/widget/LockPatternUtils;->clearLock(Ljava/lang/String;I)V
+HPLcom/android/internal/widget/LockPatternUtils;->frpCredentialEnabled()Z
+HPLcom/android/internal/widget/LockPatternUtils;->getActivePasswordQuality(I)I
+HPLcom/android/internal/widget/LockPatternUtils;->getTrustManager()Landroid/app/trust/TrustManager;
+HPLcom/android/internal/widget/LockPatternUtils;->isDeviceEncryptionEnabled()Z
+HPLcom/android/internal/widget/LockPatternUtils;->isLockPasswordEnabled(I)Z
+HPLcom/android/internal/widget/LockPatternUtils;->isLockPatternEnabled(I)Z
+HPLcom/android/internal/widget/LockPatternUtils;->isManagedProfile(I)Z
+HPLcom/android/internal/widget/LockPatternUtils;->isSeparateProfileChallengeEnabled(I)Z
+HPLcom/android/internal/widget/LockPatternUtils;->isTrustUsuallyManaged(I)Z
+HPLcom/android/internal/widget/LockPatternUtils;->onAfterChangingPassword(I)V
+HPLcom/android/internal/widget/LockPatternUtils;->setCredentialRequiredToDecrypt(Z)V
+HPLcom/android/internal/widget/LockPatternUtils;->setLong(Ljava/lang/String;JI)V
+HPLcom/android/internal/widget/LockPatternUtils;->updateEncryptionPassword(ILjava/lang/String;)V
+HPLcom/android/internal/widget/LockPatternUtils;->userPresent(I)V
+HPLcom/android/internal/widget/NotificationActionListLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLcom/android/internal/widget/NotificationActionListLayout;->clearMeasureOrder()V
+HPLcom/android/internal/widget/NotificationActionListLayout;->onFinishInflate()V
+HPLcom/android/internal/widget/NotificationActionListLayout;->onLayout(ZIIII)V
+HPLcom/android/internal/widget/NotificationActionListLayout;->onMeasure(II)V
+HPLcom/android/internal/widget/NotificationActionListLayout;->onViewAdded(Landroid/view/View;)V
+HPLcom/android/internal/widget/NotificationActionListLayout;->setEmphasizedMode(Z)V
+HPLcom/android/internal/widget/NotificationExpandButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLcom/android/internal/widget/NotificationExpandButton;->setLabeledBy(Landroid/view/View;)V
+HPLcom/android/internal/widget/PreferenceImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HPLcom/android/internal/widget/PreferenceImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HPLcom/android/internal/widget/PreferenceImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HPLcom/android/internal/widget/PreferenceImageView;->onMeasure(II)V
+HPLcom/android/internal/widget/ToolbarWidgetWrapper;->dismissPopupMenus()V
+HPLcom/android/internal/widget/ToolbarWidgetWrapper;->hasExpandedActionView()Z
+HPLcom/android/internal/widget/ToolbarWidgetWrapper;->isOverflowMenuShowing()Z
+HPLcom/android/internal/widget/ToolbarWidgetWrapper;->saveHierarchyState(Landroid/util/SparseArray;)V
+HPLcom/android/okhttp/AndroidInternal;->setResponseCache(Lcom/android/okhttp/OkUrlFactory;Ljava/net/ResponseCache;)V
+HPLcom/android/okhttp/AndroidShimResponseCache;->getCache()Lcom/android/okhttp/Cache;
+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$CacheRequestImpl$1;-><init>(Lcom/android/okhttp/Cache$CacheRequestImpl;Lcom/android/okhttp/okio/Sink;Lcom/android/okhttp/internal/DiskLruCache$Editor;)V
+HPLcom/android/okhttp/Cache$CacheRequestImpl$1;->close()V
+HPLcom/android/okhttp/Cache$CacheRequestImpl;->-get0(Lcom/android/okhttp/Cache$CacheRequestImpl;)Z
+HPLcom/android/okhttp/Cache$CacheRequestImpl;->-set0(Lcom/android/okhttp/Cache$CacheRequestImpl;Z)Z
+HPLcom/android/okhttp/Cache$CacheRequestImpl;-><init>(Lcom/android/okhttp/Cache;Lcom/android/okhttp/internal/DiskLruCache$Editor;)V
+HPLcom/android/okhttp/Cache$CacheRequestImpl;->body()Lcom/android/okhttp/okio/Sink;
+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
+HPLcom/android/okhttp/Cache;->-get2(Lcom/android/okhttp/Cache;)I
+HPLcom/android/okhttp/Cache;->-set1(Lcom/android/okhttp/Cache;I)I
+HPLcom/android/okhttp/Cache;->-wrap0(Lcom/android/okhttp/Cache;Lcom/android/okhttp/Response;)Lcom/android/okhttp/internal/http/CacheRequest;
+HPLcom/android/okhttp/Cache;->-wrap4(Lcom/android/okhttp/Cache;Lcom/android/okhttp/internal/http/CacheStrategy;)V
+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;->remove(Lcom/android/okhttp/Request;)V
+HPLcom/android/okhttp/Cache;->trackResponse(Lcom/android/okhttp/internal/http/CacheStrategy;)V
+HPLcom/android/okhttp/Cache;->urlToKey(Lcom/android/okhttp/Request;)Ljava/lang/String;
+HPLcom/android/okhttp/CacheControl;->noStore()Z
+HPLcom/android/okhttp/ConfigAwareConnectionPool$1;->onNetworkConfigurationChanged()V
+HPLcom/android/okhttp/ConfigAwareConnectionPool;->-set0(Lcom/android/okhttp/ConfigAwareConnectionPool;Lcom/android/okhttp/ConnectionPool;)Lcom/android/okhttp/ConnectionPool;
+HPLcom/android/okhttp/Handshake;->cipherSuite()Ljava/lang/String;
+HPLcom/android/okhttp/Handshake;->localCertificates()Ljava/util/List;
+HPLcom/android/okhttp/Handshake;->peerCertificates()Ljava/util/List;
+HPLcom/android/okhttp/Headers$Builder;->get(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/okhttp/HttpHandler$CleartextURLFilter;->checkURLPermitted(Ljava/net/URL;)V
+HPLcom/android/okhttp/HttpHandler;->newOkUrlFactory(Ljava/net/Proxy;)Lcom/android/okhttp/OkUrlFactory;
+HPLcom/android/okhttp/HttpUrl;->resolve(Ljava/lang/String;)Lcom/android/okhttp/HttpUrl;
+HPLcom/android/okhttp/HttpUrl;->toString()Ljava/lang/String;
+HPLcom/android/okhttp/HttpUrl;->url()Ljava/net/URL;
+HPLcom/android/okhttp/OkHttpClient;->clone()Lcom/android/okhttp/OkHttpClient;
+HPLcom/android/okhttp/OkHttpClient;->getDefaultSSLSocketFactory()Ljavax/net/ssl/SSLSocketFactory;
+HPLcom/android/okhttp/OkHttpClient;->getFollowRedirects()Z
+HPLcom/android/okhttp/OkHttpClient;->setCache(Lcom/android/okhttp/Cache;)Lcom/android/okhttp/OkHttpClient;
+HPLcom/android/okhttp/OkHttpClient;->setDns(Lcom/android/okhttp/Dns;)Lcom/android/okhttp/OkHttpClient;
+HPLcom/android/okhttp/OkHttpClient;->setSocketFactory(Ljavax/net/SocketFactory;)Lcom/android/okhttp/OkHttpClient;
+HPLcom/android/okhttp/Request$Builder;->removeHeader(Ljava/lang/String;)Lcom/android/okhttp/Request$Builder;
+HPLcom/android/okhttp/Request;->url()Ljava/net/URL;
+HPLcom/android/okhttp/Request;->urlString()Ljava/lang/String;
+HPLcom/android/okhttp/Response$Builder;->checkPriorResponse(Lcom/android/okhttp/Response;)V
+HPLcom/android/okhttp/Response;->cacheControl()Lcom/android/okhttp/CacheControl;
+HPLcom/android/okhttp/Response;->handshake()Lcom/android/okhttp/Handshake;
+HPLcom/android/okhttp/Response;->message()Ljava/lang/String;
+HPLcom/android/okhttp/ResponseBody;->close()V
+HPLcom/android/okhttp/internal/DiskLruCache$3;-><init>(Lcom/android/okhttp/internal/DiskLruCache;Lcom/android/okhttp/okio/Sink;)V
+HPLcom/android/okhttp/internal/DiskLruCache$Editor$1;-><init>(Lcom/android/okhttp/internal/DiskLruCache$Editor;Lcom/android/okhttp/okio/Sink;)V
+HPLcom/android/okhttp/internal/DiskLruCache$Editor;->-get0(Lcom/android/okhttp/internal/DiskLruCache$Editor;)Lcom/android/okhttp/internal/DiskLruCache$Entry;
+HPLcom/android/okhttp/internal/DiskLruCache$Editor;->-get1(Lcom/android/okhttp/internal/DiskLruCache$Editor;)[Z
+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$Editor;)V
+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;->-get0(Lcom/android/okhttp/internal/DiskLruCache$Entry;)[Ljava/io/File;
+HPLcom/android/okhttp/internal/DiskLruCache$Entry;->-get1(Lcom/android/okhttp/internal/DiskLruCache$Entry;)Lcom/android/okhttp/internal/DiskLruCache$Editor;
+HPLcom/android/okhttp/internal/DiskLruCache$Entry;->-get2(Lcom/android/okhttp/internal/DiskLruCache$Entry;)[Ljava/io/File;
+HPLcom/android/okhttp/internal/DiskLruCache$Entry;->-get3(Lcom/android/okhttp/internal/DiskLruCache$Entry;)Ljava/lang/String;
+HPLcom/android/okhttp/internal/DiskLruCache$Entry;->-get4(Lcom/android/okhttp/internal/DiskLruCache$Entry;)[J
+HPLcom/android/okhttp/internal/DiskLruCache$Entry;->-get5(Lcom/android/okhttp/internal/DiskLruCache$Entry;)Z
+HPLcom/android/okhttp/internal/DiskLruCache$Entry;->-set0(Lcom/android/okhttp/internal/DiskLruCache$Entry;Lcom/android/okhttp/internal/DiskLruCache$Editor;)Lcom/android/okhttp/internal/DiskLruCache$Editor;
+HPLcom/android/okhttp/internal/DiskLruCache$Entry;->-set1(Lcom/android/okhttp/internal/DiskLruCache$Entry;Z)Z
+HPLcom/android/okhttp/internal/DiskLruCache$Entry;->-set2(Lcom/android/okhttp/internal/DiskLruCache$Entry;J)J
+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$Entry;)V
+HPLcom/android/okhttp/internal/DiskLruCache$Entry;->writeLengths(Lcom/android/okhttp/okio/BufferedSink;)V
+HPLcom/android/okhttp/internal/DiskLruCache;->-get2(Lcom/android/okhttp/internal/DiskLruCache;)Ljava/io/File;
+HPLcom/android/okhttp/internal/DiskLruCache;->-get3(Lcom/android/okhttp/internal/DiskLruCache;)Lcom/android/okhttp/internal/io/FileSystem;
+HPLcom/android/okhttp/internal/DiskLruCache;->-get6(Lcom/android/okhttp/internal/DiskLruCache;)I
+HPLcom/android/okhttp/internal/DiskLruCache;->-wrap2(Lcom/android/okhttp/internal/DiskLruCache;Lcom/android/okhttp/internal/DiskLruCache$Editor;Z)V
+HPLcom/android/okhttp/internal/DiskLruCache;->checkNotClosed()V
+HPLcom/android/okhttp/internal/DiskLruCache;->completeEdit(Lcom/android/okhttp/internal/DiskLruCache$Editor;Z)V
+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;->rebuildJournal()V
+HPLcom/android/okhttp/internal/DiskLruCache;->remove(Ljava/lang/String;)Z
+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
+HPLcom/android/okhttp/internal/Util;->closeQuietly(Ljava/io/Closeable;)V
+HPLcom/android/okhttp/internal/Util;->closeQuietly(Ljava/net/Socket;)V
+HPLcom/android/okhttp/internal/Util;->discard(Lcom/android/okhttp/okio/Source;ILjava/util/concurrent/TimeUnit;)Z
+HPLcom/android/okhttp/internal/Util;->md5Hex(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/okhttp/internal/Util;->skipAll(Lcom/android/okhttp/okio/Source;ILjava/util/concurrent/TimeUnit;)Z
+HPLcom/android/okhttp/internal/http/CacheRequest;->abort()V
+HPLcom/android/okhttp/internal/http/CacheRequest;->body()Lcom/android/okhttp/okio/Sink;
+HPLcom/android/okhttp/internal/http/CacheStrategy;->isCacheable(Lcom/android/okhttp/Response;Lcom/android/okhttp/Request;)Z
+HPLcom/android/okhttp/internal/http/HeaderParser;->parseSeconds(Ljava/lang/String;I)I
+HPLcom/android/okhttp/internal/http/HeaderParser;->skipUntil(Ljava/lang/String;ILjava/lang/String;)I
+HPLcom/android/okhttp/internal/http/HeaderParser;->skipWhitespace(Ljava/lang/String;I)I
+HPLcom/android/okhttp/internal/http/Http1xStream$AbstractSource;->timeout()Lcom/android/okhttp/okio/Timeout;
+HPLcom/android/okhttp/internal/http/Http1xStream$AbstractSource;->unexpectedEndOfInput()V
+HPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;->close()V
+HPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSink;-><init>(Lcom/android/okhttp/internal/http/Http1xStream;J)V
+HPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSink;-><init>(Lcom/android/okhttp/internal/http/Http1xStream;JLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSink;)V
+HPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSink;->close()V
+HPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSink;->write(Lcom/android/okhttp/okio/Buffer;J)V
+HPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSource;->close()V
+HPLcom/android/okhttp/internal/http/Http1xStream;->newFixedLengthSink(J)Lcom/android/okhttp/okio/Sink;
+HPLcom/android/okhttp/internal/http/HttpEngine$2;-><init>(Lcom/android/okhttp/internal/http/HttpEngine;Lcom/android/okhttp/okio/BufferedSource;Lcom/android/okhttp/internal/http/CacheRequest;Lcom/android/okhttp/okio/BufferedSink;)V
+HPLcom/android/okhttp/internal/http/HttpEngine$2;->close()V
+HPLcom/android/okhttp/internal/http/HttpEngine$2;->read(Lcom/android/okhttp/okio/Buffer;J)J
+HPLcom/android/okhttp/internal/http/HttpEngine$2;->timeout()Lcom/android/okhttp/okio/Timeout;
+HPLcom/android/okhttp/internal/http/HttpEngine;->close()Lcom/android/okhttp/internal/http/StreamAllocation;
+HPLcom/android/okhttp/internal/http/HttpEngine;->getRequest()Lcom/android/okhttp/Request;
+HPLcom/android/okhttp/internal/http/HttpEngine;->sameConnection(Lcom/android/okhttp/HttpUrl;)Z
+HPLcom/android/okhttp/internal/http/HttpMethod;->invalidatesCache(Ljava/lang/String;)Z
+HPLcom/android/okhttp/internal/http/OkHeaders$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/okhttp/internal/http/OkHeaders$1;->compare(Ljava/lang/String;Ljava/lang/String;)I
+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;->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;
+HPLcom/android/okhttp/internal/http/StatusLine;->get(Lcom/android/okhttp/Response;)Lcom/android/okhttp/internal/http/StatusLine;
+HPLcom/android/okhttp/internal/http/StatusLine;->toString()Ljava/lang/String;
+HPLcom/android/okhttp/internal/http/StreamAllocation;->noNewStreams()V
+HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->connect()V
+HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getContentEncoding()Ljava/lang/String;
+HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getContentLength()I
+HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getErrorStream()Ljava/io/InputStream;
+HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getHeaderFields()Ljava/util/Map;
+HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getRequestProperties()Ljava/util/Map;
+HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getRequestProperty(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getResponseMessage()Ljava/lang/String;
+HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getURL()Ljava/net/URL;
+HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setDefaultUseCaches(Z)V
+HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setFixedLengthStreamingMode(I)V
+HPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setRequestMethod(Ljava/lang/String;)V
+HPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getErrorStream()Ljava/io/InputStream;
+HPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getHeaderFields()Ljava/util/Map;
+HPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getRequestProperties()Ljava/util/Map;
+HPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getRequestProperty(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getResponseMessage()Ljava/lang/String;
+HPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->setFixedLengthStreamingMode(I)V
+HPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->setFixedLengthStreamingMode(J)V
+HPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->setRequestMethod(Ljava/lang/String;)V
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->connect()V
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getContentEncoding()Ljava/lang/String;
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getContentLength()I
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getErrorStream()Ljava/io/InputStream;
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getHeaderFields()Ljava/util/Map;
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getRequestProperties()Ljava/util/Map;
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getRequestProperty(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getResponseMessage()Ljava/lang/String;
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getURL()Ljava/net/URL;
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setDefaultUseCaches(Z)V
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setFixedLengthStreamingMode(I)V
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setHostnameVerifier(Ljavax/net/ssl/HostnameVerifier;)V
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setRequestMethod(Ljava/lang/String;)V
+HPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setSSLSocketFactory(Ljavax/net/ssl/SSLSocketFactory;)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/okio/Base64;->encode([B)Ljava/lang/String;
+HPLcom/android/okhttp/okio/Base64;->encode([B[B)Ljava/lang/String;
+HPLcom/android/okhttp/okio/Buffer;->clear()V
+HPLcom/android/okhttp/okio/Buffer;->readByte()B
+HPLcom/android/okhttp/okio/Buffer;->readInt()I
+HPLcom/android/okhttp/okio/Buffer;->readIntLe()I
+HPLcom/android/okhttp/okio/Buffer;->readShort()S
+HPLcom/android/okhttp/okio/Buffer;->writeDecimalLong(J)Lcom/android/okhttp/okio/Buffer;
+HPLcom/android/okhttp/okio/ByteString;-><init>([B)V
+HPLcom/android/okhttp/okio/ByteString;->base64()Ljava/lang/String;
+HPLcom/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
+HPLcom/android/okhttp/okio/ForwardingTimeout;->clearDeadline()Lcom/android/okhttp/okio/Timeout;
+HPLcom/android/okhttp/okio/ForwardingTimeout;->deadlineNanoTime(J)Lcom/android/okhttp/okio/Timeout;
+HPLcom/android/okhttp/okio/ForwardingTimeout;->hasDeadline()Z
+HPLcom/android/okhttp/okio/GzipSource;-><init>(Lcom/android/okhttp/okio/Source;)V
+HPLcom/android/okhttp/okio/GzipSource;->checkEqual(Ljava/lang/String;II)V
+HPLcom/android/okhttp/okio/GzipSource;->close()V
+HPLcom/android/okhttp/okio/GzipSource;->consumeHeader()V
+HPLcom/android/okhttp/okio/GzipSource;->consumeTrailer()V
+HPLcom/android/okhttp/okio/GzipSource;->read(Lcom/android/okhttp/okio/Buffer;J)J
+HPLcom/android/okhttp/okio/GzipSource;->updateCrc(Lcom/android/okhttp/okio/Buffer;JJ)V
+HPLcom/android/okhttp/okio/InflaterSource;-><init>(Lcom/android/okhttp/okio/BufferedSource;Ljava/util/zip/Inflater;)V
+HPLcom/android/okhttp/okio/InflaterSource;->close()V
+HPLcom/android/okhttp/okio/InflaterSource;->read(Lcom/android/okhttp/okio/Buffer;J)J
+HPLcom/android/okhttp/okio/InflaterSource;->refill()Z
+HPLcom/android/okhttp/okio/InflaterSource;->releaseInflatedBytes()V
+HPLcom/android/okhttp/okio/Okio$1;->close()V
+HPLcom/android/okhttp/okio/Okio$3;->newTimeoutException(Ljava/io/IOException;)Ljava/io/IOException;
+HPLcom/android/okhttp/okio/Okio$3;->timedOut()V
+HPLcom/android/okhttp/okio/Okio;->appendingSink(Ljava/io/File;)Lcom/android/okhttp/okio/Sink;
+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;
+HPLcom/android/okhttp/okio/RealBufferedSink$1;->close()V
+HPLcom/android/okhttp/okio/RealBufferedSink;->emit()Lcom/android/okhttp/okio/BufferedSink;
+HPLcom/android/okhttp/okio/RealBufferedSink;->writeByte(I)Lcom/android/okhttp/okio/BufferedSink;
+HPLcom/android/okhttp/okio/RealBufferedSink;->writeDecimalLong(J)Lcom/android/okhttp/okio/BufferedSink;
+HPLcom/android/okhttp/okio/RealBufferedSource$1;->close()V
+HPLcom/android/okhttp/okio/RealBufferedSource$1;->read()I
+HPLcom/android/okhttp/okio/RealBufferedSource;->buffer()Lcom/android/okhttp/okio/Buffer;
+HPLcom/android/okhttp/okio/RealBufferedSource;->close()V
+HPLcom/android/okhttp/okio/RealBufferedSource;->readIntLe()I
+HPLcom/android/okhttp/okio/RealBufferedSource;->readShort()S
+HPLcom/android/okhttp/okio/RealBufferedSource;->skip(J)V
+HPLcom/android/okhttp/okio/Timeout$1;->deadlineNanoTime(J)Lcom/android/okhttp/okio/Timeout;
+HPLcom/android/okhttp/okio/Timeout;->deadlineNanoTime()J
+HPLcom/android/okhttp/okio/Timeout;->deadlineNanoTime(J)Lcom/android/okhttp/okio/Timeout;
+HPLcom/android/okhttp/okio/Util;->reverseBytesInt(I)I
+HPLcom/android/org/bouncycastle/asn1/ASN1Integer;-><init>(Ljava/math/BigInteger;)V
+HPLcom/android/org/bouncycastle/asn1/DERBitString;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
+HPLcom/android/org/bouncycastle/asn1/DERSequence;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1EncodableVector;)V
+HPLcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
+HPLcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
+HPLcom/android/org/bouncycastle/asn1/x509/DSAParameter;-><init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
+HPLcom/android/org/bouncycastle/asn1/x509/DSAParameter;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
+HPLcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;-><init>(Lcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
+HPLcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
+HPLcom/android/org/bouncycastle/crypto/DSA;->generateSignature([B)[Ljava/math/BigInteger;
+HPLcom/android/org/bouncycastle/crypto/DSA;->init(ZLcom/android/org/bouncycastle/crypto/CipherParameters;)V
+HPLcom/android/org/bouncycastle/crypto/DSA;->verifySignature([BLjava/math/BigInteger;Ljava/math/BigInteger;)Z
+HPLcom/android/org/bouncycastle/crypto/digests/AndroidDigestFactory;->getSHA256()Lcom/android/org/bouncycastle/crypto/Digest;
+HPLcom/android/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface;->getMD5()Lcom/android/org/bouncycastle/crypto/Digest;
+HPLcom/android/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface;->getSHA1()Lcom/android/org/bouncycastle/crypto/Digest;
+HPLcom/android/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface;->getSHA224()Lcom/android/org/bouncycastle/crypto/Digest;
+HPLcom/android/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface;->getSHA256()Lcom/android/org/bouncycastle/crypto/Digest;
+HPLcom/android/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface;->getSHA384()Lcom/android/org/bouncycastle/crypto/Digest;
+HPLcom/android/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface;->getSHA512()Lcom/android/org/bouncycastle/crypto/Digest;
+HPLcom/android/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL;-><init>()V
+HPLcom/android/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL;->getSHA256()Lcom/android/org/bouncycastle/crypto/Digest;
+HPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$SHA256;-><init>()V
+HPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest;-><init>(Ljava/lang/String;I)V
+HPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest;->doFinal([BI)I
+HPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest;->getDigestSize()I
+HPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest;->reset()V
+HPLcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest;->update([BII)V
+HPLcom/android/org/bouncycastle/crypto/params/DSAKeyParameters;->getParameters()Lcom/android/org/bouncycastle/crypto/params/DSAParameters;
+HPLcom/android/org/bouncycastle/crypto/params/DSAParameters;->getG()Ljava/math/BigInteger;
+HPLcom/android/org/bouncycastle/crypto/params/DSAPublicKeyParameters;->getY()Ljava/math/BigInteger;
+HPLcom/android/org/bouncycastle/crypto/signers/DSAKCalculator;->init(Ljava/math/BigInteger;Ljava/math/BigInteger;[B)V
+HPLcom/android/org/bouncycastle/crypto/signers/DSAKCalculator;->init(Ljava/math/BigInteger;Ljava/security/SecureRandom;)V
+HPLcom/android/org/bouncycastle/crypto/signers/DSAKCalculator;->isDeterministic()Z
+HPLcom/android/org/bouncycastle/crypto/signers/DSAKCalculator;->nextK()Ljava/math/BigInteger;
+HPLcom/android/org/bouncycastle/crypto/signers/DSASigner;-><init>()V
+HPLcom/android/org/bouncycastle/crypto/signers/DSASigner;->calculateE(Ljava/math/BigInteger;[B)Ljava/math/BigInteger;
+HPLcom/android/org/bouncycastle/crypto/signers/DSASigner;->init(ZLcom/android/org/bouncycastle/crypto/CipherParameters;)V
+HPLcom/android/org/bouncycastle/crypto/signers/DSASigner;->initSecureRandom(ZLjava/security/SecureRandom;)Ljava/security/SecureRandom;
+HPLcom/android/org/bouncycastle/crypto/signers/DSASigner;->verifySignature([BLjava/math/BigInteger;Ljava/math/BigInteger;)Z
+HPLcom/android/org/bouncycastle/crypto/signers/RandomDSAKCalculator;-><init>()V
+HPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;->engineGetKeyParameters()Lcom/android/org/bouncycastle/crypto/params/DSAPublicKeyParameters;
+HPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;->getEncoded()[B
+HPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsa256;-><init>()V
+HPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner;-><init>(Lcom/android/org/bouncycastle/crypto/Digest;Lcom/android/org/bouncycastle/crypto/DSA;)V
+HPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner;->derDecode([B)[Ljava/math/BigInteger;
+HPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner;->engineInitVerify(Ljava/security/PublicKey;)V
+HPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner;->engineUpdate([BII)V
+HPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner;->engineVerify([B)Z
+HPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil;->generatePublicKeyParameter(Ljava/security/PublicKey;)Lcom/android/org/bouncycastle/crypto/params/AsymmetricKeyParameter;
+HPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/util/KeyUtil;->getEncodedSubjectPublicKeyInfo(Lcom/android/org/bouncycastle/asn1/x509/AlgorithmIdentifier;Lcom/android/org/bouncycastle/asn1/ASN1Encodable;)[B
+HPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/util/KeyUtil;->getEncodedSubjectPublicKeyInfo(Lcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;)[B
+HPLcom/android/org/conscrypt/AbstractConscryptSocket;->getFileDescriptor$()Ljava/io/FileDescriptor;
+HPLcom/android/org/conscrypt/AbstractConscryptSocket;->isInputShutdown()Z
+HPLcom/android/org/conscrypt/AbstractConscryptSocket;->isOutputShutdown()Z
+HPLcom/android/org/conscrypt/AbstractConscryptSocket;->setNpnProtocols([B)V
+HPLcom/android/org/conscrypt/AbstractSessionContext;->finalize()V
+HPLcom/android/org/conscrypt/ActiveSession;->getLocalPrincipal()Ljava/security/Principal;
+HPLcom/android/org/conscrypt/ClientSessionContext;->onBeforeRemoveSession(Lcom/android/org/conscrypt/SslSessionWrapper;)V
+HPLcom/android/org/conscrypt/ClientSessionContext;->setPersistentCache(Lcom/android/org/conscrypt/SSLClientSessionCache;)V
+HPLcom/android/org/conscrypt/Conscrypt;->newPreferredSSLContextSpi()Ljavax/net/ssl/SSLContextSpi;
+HPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->finalize()V
+HPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->setChannelIdPrivateKey(Ljava/security/PrivateKey;)V
+HPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->setHandshakeTimeout(I)V
+HPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->setSoWriteTimeout(I)V
+HPLcom/android/org/conscrypt/DelegatingExtendedSSLSession;->getLocalPrincipal()Ljava/security/Principal;
+HPLcom/android/org/conscrypt/FileClientSessionCache$Impl;->fileName(Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/org/conscrypt/FileClientSessionCache$Impl;->getSessionData(Ljava/lang/String;I)[B
+HPLcom/android/org/conscrypt/FileClientSessionCache$Impl;->putSessionData(Ljavax/net/ssl/SSLSession;[B)V
+HPLcom/android/org/conscrypt/NativeRef$SSL_SESSION;->doFree(J)V
+HPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER;->doFinalInternal([BII)I
+HPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER;->getOutputSizeForFinal(I)I
+HPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER;->reset()V
+HPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER;->updateInternal([BII[BII)I
+HPLcom/android/org/conscrypt/OpenSSLCipher;->engineDoFinal([BII)[B
+HPLcom/android/org/conscrypt/OpenSSLCipherRSA;->engineGetBlockSize()I
+HPLcom/android/org/conscrypt/OpenSSLCipherRSA;->isInitialized()Z
+HPLcom/android/org/conscrypt/OpenSSLCipherRSA;->keySizeBytes()I
+HPLcom/android/org/conscrypt/OpenSSLCipherRSA;->paddedBlockSizeBytes()I
+HPLcom/android/org/conscrypt/OpenSSLContextImpl;->engineGetClientSessionContext()Lcom/android/org/conscrypt/ClientSessionContext;
+HPLcom/android/org/conscrypt/OpenSSLContextImpl;->getPreferred()Lcom/android/org/conscrypt/OpenSSLContextImpl;
+HPLcom/android/org/conscrypt/OpenSSLKey;->getPrivateKey()Ljava/security/PrivateKey;
+HPLcom/android/org/conscrypt/OpenSSLKey;->getPrivateKey(Ljava/security/spec/PKCS8EncodedKeySpec;I)Ljava/security/PrivateKey;
+HPLcom/android/org/conscrypt/OpenSSLRSAKeyFactory;->engineGeneratePrivate(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;
+HPLcom/android/org/conscrypt/OpenSSLRSAPrivateKey;-><init>(Lcom/android/org/conscrypt/OpenSSLKey;)V
+HPLcom/android/org/conscrypt/OpenSSLSocketImpl;->getFileDescriptor$()Ljava/io/FileDescriptor;
+HPLcom/android/org/conscrypt/OpenSSLSocketImpl;->isInputShutdown()Z
+HPLcom/android/org/conscrypt/OpenSSLSocketImpl;->isOutputShutdown()Z
+HPLcom/android/org/conscrypt/OpenSSLSocketImpl;->setNpnProtocols([B)V
+HPLcom/android/org/conscrypt/OpenSSLX509Certificate;->fromX509Der([B)Lcom/android/org/conscrypt/OpenSSLX509Certificate;
+HPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getSignature()[B
+HPLcom/android/org/conscrypt/OpenSSLX509Certificate;->verifyInternal(Ljava/security/PublicKey;Ljava/lang/String;)V
+HPLcom/android/org/conscrypt/Platform;->closeGuardWarnIfOpen(Ljava/lang/Object;)V
+HPLcom/android/org/conscrypt/Platform;->setSocketWriteTimeout(Ljava/net/Socket;J)V
+HPLcom/android/org/conscrypt/SSLParametersImpl;->isSniEnabledByDefault()Z
+HPLcom/android/org/conscrypt/SSLUtils$SessionType;-><init>(Ljava/lang/String;II)V
+HPLcom/android/org/conscrypt/SSLUtils$SessionType;->isSupportedType(I)Z
+HPLcom/android/org/conscrypt/SslSessionWrapper$Impl$1;-><init>(Lcom/android/org/conscrypt/SslSessionWrapper$Impl;)V
+HPLcom/android/org/conscrypt/SslSessionWrapper$Impl$1;->getPeerHost()Ljava/lang/String;
+HPLcom/android/org/conscrypt/SslSessionWrapper$Impl$1;->getPeerPort()I
+HPLcom/android/org/conscrypt/SslSessionWrapper$Impl;->toBytes()[B
+HPLcom/android/org/conscrypt/SslSessionWrapper$Impl;->toSSLSession()Ljavax/net/ssl/SSLSession;
+HPLcom/android/org/conscrypt/SslSessionWrapper;->checkRemaining(Ljava/nio/ByteBuffer;I)V
+HPLcom/android/org/conscrypt/SslSessionWrapper;->newInstance(Lcom/android/org/conscrypt/AbstractSessionContext;[BLjava/lang/String;I)Lcom/android/org/conscrypt/SslSessionWrapper;
+HPLcom/android/org/conscrypt/TrustManagerFactoryImpl;-><init>()V
+HPLcom/android/org/conscrypt/TrustManagerFactoryImpl;->engineGetTrustManagers()[Ljavax/net/ssl/TrustManager;
+HPLcom/android/org/conscrypt/TrustManagerFactoryImpl;->engineInit(Ljava/security/KeyStore;)V
+HPLcom/android/org/conscrypt/TrustManagerImpl;-><init>(Ljava/security/KeyStore;)V
+HPLcom/android/org/conscrypt/TrustManagerImpl;-><init>(Ljava/security/KeyStore;Lcom/android/org/conscrypt/CertPinManager;)V
+HPLcom/android/org/conscrypt/TrustManagerImpl;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)V
+HPLcom/android/org/conscrypt/TrustedCertificateStore$2;-><init>(Lcom/android/org/conscrypt/TrustedCertificateStore;Ljava/security/cert/X509Certificate;)V
+HPLcom/android/org/conscrypt/TrustedCertificateStore$4;-><init>(Lcom/android/org/conscrypt/TrustedCertificateStore;Ljava/security/cert/X509Certificate;)V
+HPLcom/android/org/conscrypt/TrustedCertificateStore$5;-><init>(Lcom/android/org/conscrypt/TrustedCertificateStore;Ljava/security/cert/X509Certificate;)V
+HPLcom/android/org/conscrypt/TrustedCertificateStore$5;->match(Ljava/security/cert/X509Certificate;)Z
+HPLcom/android/org/conscrypt/TrustedCertificateStore;->-wrap0(Lcom/android/org/conscrypt/TrustedCertificateStore;Ljava/security/cert/X509Certificate;)Z
+HPLcom/android/org/conscrypt/TrustedCertificateStore;->findAllIssuers(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
+HPLcom/android/org/conscrypt/TrustedCertificateStore;->getTrustAnchor(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate;
+HPLcom/android/server/AppWidgetBackupBridge;->register(Lcom/android/server/WidgetBackupProvider;)V
+HPLcom/android/server/BootReceiver$1;-><init>(Lcom/android/server/BootReceiver;Landroid/content/Context;)V
+HPLcom/android/server/BootReceiver$1;->run()V
+HPLcom/android/server/BootReceiver$2;-><init>(Lcom/android/server/BootReceiver;Ljava/lang/String;ILandroid/os/DropBoxManager;Ljava/lang/String;)V
+HPLcom/android/server/BootReceiver;->-wrap2(Lcom/android/server/BootReceiver;Landroid/content/Context;)V
+HPLcom/android/server/BootReceiver;->-wrap3(Lcom/android/server/BootReceiver;Landroid/content/Context;)V
+HPLcom/android/server/BootReceiver;-><init>()V
+HPLcom/android/server/BootReceiver;->addFsckErrorsToDropBoxAndLogFsStat(Landroid/os/DropBoxManager;Ljava/util/HashMap;Ljava/lang/String;ILjava/lang/String;)V
+HPLcom/android/server/BootReceiver;->getBootHeadersToLogAndUpdate()Ljava/lang/String;
+HPLcom/android/server/BootReceiver;->getCurrentBootHeaders()Ljava/lang/String;
+HPLcom/android/server/BootReceiver;->getPreviousBootHeaders()Ljava/lang/String;
+HPLcom/android/server/BootReceiver;->logBootEvents(Landroid/content/Context;)V
+HPLcom/android/server/BootReceiver;->logFsMountTime()V
+HPLcom/android/server/BootReceiver;->logFsShutdownTime()V
+HPLcom/android/server/BootReceiver;->logSystemServerShutdownTimeMetrics()V
+HPLcom/android/server/BootReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/BootReceiver;->readTimestamps()Ljava/util/HashMap;
+HPLcom/android/server/BootReceiver;->removeOldUpdatePackages(Landroid/content/Context;)V
+HPLcom/android/server/BootReceiver;->writeTimestamps(Ljava/util/HashMap;)V
+HPLcom/android/server/NetworkManagementSocketTagger;->setKernelCounterSet(II)V
+HPLcom/android/server/NetworkManagementSocketTagger;->setThreadSocketStatsUid(I)I
+HPLcom/android/server/SystemConfig;->getAllowImplicitBroadcasts()Landroid/util/ArraySet;
+HPLcom/android/server/SystemConfig;->getAllowInDataUsageSave()Landroid/util/ArraySet;
+HPLcom/android/server/SystemConfig;->getAllowInPowerSave()Landroid/util/ArraySet;
+HPLcom/android/server/SystemConfig;->getAllowInPowerSaveExceptIdle()Landroid/util/ArraySet;
+HPLcom/android/server/SystemConfig;->getAllowUnthrottledLocation()Landroid/util/ArraySet;
+HPLcom/android/server/SystemConfig;->getBackupTransportWhitelist()Landroid/util/ArraySet;
+HPLcom/android/server/SystemConfig;->getDefaultVrComponents()Landroid/util/ArraySet;
+HPLcom/android/server/WidgetBackupProvider;->getWidgetParticipants(I)Ljava/util/List;
+HPLcom/android/server/WidgetBackupProvider;->getWidgetState(Ljava/lang/String;I)[B
+HPLcom/android/server/WidgetBackupProvider;->restoreFinished(I)V
+HPLcom/android/server/WidgetBackupProvider;->restoreStarting(I)V
+HPLcom/android/server/WidgetBackupProvider;->restoreWidgetState(Ljava/lang/String;[BI)V
+HPLcom/android/server/backup/AccountSyncSettingsBackupHelper;-><init>(Landroid/content/Context;)V
+HPLcom/android/server/backup/AccountSyncSettingsBackupHelper;->accountAdded(Landroid/content/Context;)V
+HPLcom/android/server/backup/AccountSyncSettingsBackupHelper;->accountAddedInternal()V
+HPLcom/android/server/net/BaseNetworkObserver;-><init>()V
+HPLcom/android/server/net/BaseNetworkObserver;->addressUpdated(Ljava/lang/String;Landroid/net/LinkAddress;)V
+HPLcom/android/server/net/BaseNetworkObserver;->interfaceAdded(Ljava/lang/String;)V
+HPLcom/android/server/net/BaseNetworkObserver;->interfaceClassDataActivityChanged(Ljava/lang/String;ZJ)V
+HPLcom/android/server/net/BaseNetworkObserver;->interfaceDnsServerInfo(Ljava/lang/String;J[Ljava/lang/String;)V
+HPLcom/android/server/net/BaseNetworkObserver;->interfaceLinkStateChanged(Ljava/lang/String;Z)V
+HPLcom/android/server/net/BaseNetworkObserver;->interfaceRemoved(Ljava/lang/String;)V
+HPLcom/android/server/net/BaseNetworkObserver;->limitReached(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/net/BaseNetworkObserver;->routeUpdated(Landroid/net/RouteInfo;)V
+HPLcom/android/server/net/DnsServerEntry;-><init>(Ljava/net/InetAddress;J)V
+HPLcom/android/server/net/DnsServerEntry;->compareTo(Lcom/android/server/net/DnsServerEntry;)I
+HPLcom/android/server/net/DnsServerEntry;->compareTo(Ljava/lang/Object;)I
+HPLcom/android/server/net/DnsServerRepository;-><init>()V
+HPLcom/android/server/net/DnsServerRepository;->addServers(J[Ljava/lang/String;)Z
+HPLcom/android/server/net/DnsServerRepository;->setDnsServersOn(Landroid/net/LinkProperties;)V
+HPLcom/android/server/net/DnsServerRepository;->updateCurrentServers()Z
+HPLcom/android/server/net/DnsServerRepository;->updateExistingEntry(Ljava/net/InetAddress;J)Z
+HPLcom/android/server/net/NetlinkTracker$Callback;->update()V
+HPLcom/android/server/net/NetlinkTracker;-><init>(Ljava/lang/String;Lcom/android/server/net/NetlinkTracker$Callback;)V
+HPLcom/android/server/net/NetlinkTracker;->addressRemoved(Ljava/lang/String;Landroid/net/LinkAddress;)V
+HPLcom/android/server/net/NetlinkTracker;->addressUpdated(Ljava/lang/String;Landroid/net/LinkAddress;)V
+HPLcom/android/server/net/NetlinkTracker;->clearLinkProperties()V
+HPLcom/android/server/net/NetlinkTracker;->getLinkProperties()Landroid/net/LinkProperties;
+HPLcom/android/server/net/NetlinkTracker;->interfaceDnsServerInfo(Ljava/lang/String;J[Ljava/lang/String;)V
+HPLcom/android/server/net/NetlinkTracker;->interfaceRemoved(Ljava/lang/String;)V
+HPLcom/android/server/net/NetlinkTracker;->maybeLog(Ljava/lang/String;Ljava/lang/Object;)V
+HPLcom/android/server/net/NetlinkTracker;->maybeLog(Ljava/lang/String;Ljava/lang/String;Landroid/net/LinkAddress;)V
+HPLcom/android/server/net/NetlinkTracker;->routeRemoved(Landroid/net/RouteInfo;)V
+HPLcom/android/server/net/NetlinkTracker;->routeUpdated(Landroid/net/RouteInfo;)V
+HPLcom/android/server/sip/SipService$ConnectivityReceiver;-><init>(Lcom/android/server/sip/SipService;)V
+HPLcom/android/server/sip/SipService$ConnectivityReceiver;-><init>(Lcom/android/server/sip/SipService;Lcom/android/server/sip/SipService$ConnectivityReceiver;)V
+HPLcom/android/server/sip/SipService$MyExecutor;-><init>(Lcom/android/server/sip/SipService;)V
+HPLcom/android/server/sip/SipService;->-wrap0()Landroid/os/Looper;
+HPLcom/android/server/sip/SipService;-><init>(Landroid/content/Context;)V
+HPLcom/android/server/sip/SipService;->createLooper()Landroid/os/Looper;
+HPLcom/android/server/sip/SipService;->log(Ljava/lang/String;)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/SipWakeLock;-><init>(Landroid/os/PowerManager;)V
+HPLcom/android/server/sip/SipWakeupTimer$MyEventComparator;-><init>()V
+HPLcom/android/server/sip/SipWakeupTimer$MyEventComparator;-><init>(Lcom/android/server/sip/SipWakeupTimer$MyEventComparator;)V
+HPLcom/android/server/sip/SipWakeupTimer;-><init>(Landroid/content/Context;Ljava/util/concurrent/Executor;)V
+HPLcom/android/server/sip/SipWakeupTimer;->getAction()Ljava/lang/String;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$AlertReasonCount;->emptyArray()[Lcom/android/server/wifi/nano/WifiMetricsProto$AlertReasonCount;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$ConnectionEvent;-><init>()V
+HPLcom/android/server/wifi/nano/WifiMetricsProto$ConnectionEvent;->clear()Lcom/android/server/wifi/nano/WifiMetricsProto$ConnectionEvent;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$ConnectionEvent;->emptyArray()[Lcom/android/server/wifi/nano/WifiMetricsProto$ConnectionEvent;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$NumConnectableNetworksBucket;->emptyArray()[Lcom/android/server/wifi/nano/WifiMetricsProto$NumConnectableNetworksBucket;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$RouterFingerPrint;-><init>()V
+HPLcom/android/server/wifi/nano/WifiMetricsProto$RouterFingerPrint;->clear()Lcom/android/server/wifi/nano/WifiMetricsProto$RouterFingerPrint;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$RssiPollCount;->emptyArray()[Lcom/android/server/wifi/nano/WifiMetricsProto$RssiPollCount;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$SoftApDurationBucket;->emptyArray()[Lcom/android/server/wifi/nano/WifiMetricsProto$SoftApDurationBucket;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$SoftApReturnCodeCount;->emptyArray()[Lcom/android/server/wifi/nano/WifiMetricsProto$SoftApReturnCodeCount;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$StaEvent$ConfigInfo;-><init>()V
+HPLcom/android/server/wifi/nano/WifiMetricsProto$StaEvent$ConfigInfo;->clear()Lcom/android/server/wifi/nano/WifiMetricsProto$StaEvent$ConfigInfo;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$StaEvent;-><init>()V
+HPLcom/android/server/wifi/nano/WifiMetricsProto$StaEvent;->clear()Lcom/android/server/wifi/nano/WifiMetricsProto$StaEvent;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$StaEvent;->emptyArray()[Lcom/android/server/wifi/nano/WifiMetricsProto$StaEvent;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$WifiLog$ScanReturnEntry;->emptyArray()[Lcom/android/server/wifi/nano/WifiMetricsProto$WifiLog$ScanReturnEntry;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$WifiLog$WifiSystemStateEntry;->emptyArray()[Lcom/android/server/wifi/nano/WifiMetricsProto$WifiLog$WifiSystemStateEntry;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$WifiLog;-><init>()V
+HPLcom/android/server/wifi/nano/WifiMetricsProto$WifiLog;->clear()Lcom/android/server/wifi/nano/WifiMetricsProto$WifiLog;
+HPLcom/android/server/wifi/nano/WifiMetricsProto$WifiScoreCount;->emptyArray()[Lcom/android/server/wifi/nano/WifiMetricsProto$WifiScoreCount;
+HPLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;-><init>()V
+HPLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;->clear()Lcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;
+HPLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;->computeSerializedSize()I
+HPLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;->mergeFrom(Lcom/android/framework/protobuf/nano/CodedInputByteBufferNano;)Lcom/android/framework/protobuf/nano/MessageNano;
+HPLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;->mergeFrom(Lcom/android/framework/protobuf/nano/CodedInputByteBufferNano;)Lcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;
+HPLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;->parseFrom([B)Lcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;
+HPLcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;->writeTo(Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;)V
+HPLcom/google/android/collect/Sets;->newHashSet()Ljava/util/HashSet;
+HPLdalvik/system/SocketTagger;->tag(Ljava/net/Socket;)V
+HPLdalvik/system/SocketTagger;->untag(Ljava/net/Socket;)V
+HPLjava/io/Bits;->getBoolean([BI)Z
+HPLjava/io/Bits;->putBoolean([BIZ)V
+HPLjava/io/Bits;->putDouble([BID)V
+HPLjava/io/BufferedInputStream;->reset()V
+HPLjava/io/BufferedInputStream;->skip(J)J
+HPLjava/io/BufferedReader;->mark(I)V
+HPLjava/io/BufferedReader;->read()I
+HPLjava/io/BufferedReader;->read([CII)I
+HPLjava/io/BufferedReader;->read1([CII)I
+HPLjava/io/BufferedReader;->reset()V
+HPLjava/io/BufferedReader;->skip(J)J
+HPLjava/io/BufferedWriter;->close()V
+HPLjava/io/BufferedWriter;->write(I)V
+HPLjava/io/ByteArrayOutputStream;->toString()Ljava/lang/String;
+HPLjava/io/CharArrayWriter;->flush()V
+HPLjava/io/CharArrayWriter;->reset()V
+HPLjava/io/CharArrayWriter;->toCharArray()[C
+HPLjava/io/DataInputStream;->read([B)I
+HPLjava/io/DataInputStream;->readByte()B
+HPLjava/io/DataInputStream;->skipBytes(I)I
+HPLjava/io/DataOutputStream;->write(I)V
+HPLjava/io/DataOutputStream;->writeBoolean(Z)V
+HPLjava/io/DataOutputStream;->writeByte(I)V
+HPLjava/io/DataOutputStream;->writeDouble(D)V
+HPLjava/io/File;->list(Ljava/io/FilenameFilter;)[Ljava/lang/String;
+HPLjava/io/File;->setReadable(Z)Z
+HPLjava/io/File;->setWritable(Z)Z
+HPLjava/io/File;->toPath()Ljava/nio/file/Path;
+HPLjava/io/FileOutputStream;->getChannel()Ljava/nio/channels/FileChannel;
+HPLjava/io/FileWriter;-><init>(Ljava/io/File;)V
+HPLjava/io/FilterInputStream;->mark(I)V
+HPLjava/io/FilterInputStream;->markSupported()Z
+HPLjava/io/FilterInputStream;->reset()V
+HPLjava/io/FilterInputStream;->skip(J)J
+HPLjava/io/FilterOutputStream;->write(I)V
+HPLjava/io/FilterOutputStream;->write([BII)V
+HPLjava/io/FilterReader;-><init>(Ljava/io/Reader;)V
+HPLjava/io/FilterReader;->read()I
+HPLjava/io/InputStream;->available()I
+HPLjava/io/InputStream;->close()V
+HPLjava/io/InputStream;->markSupported()Z
+HPLjava/io/InputStreamReader;->ready()Z
+HPLjava/io/ObjectInputStream$BlockDataInputStream;->readFloat()F
+HPLjava/io/ObjectInputStream$BlockDataInputStream;->readFloats([FII)V
+HPLjava/io/ObjectInputStream;->-wrap2([BI[FII)V
+HPLjava/io/ObjectInputStream;->readClass(Z)Ljava/lang/Class;
+HPLjava/io/ObjectInputStream;->readFloat()F
+HPLjava/io/ObjectInputStream;->readFully([B)V
+HPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeBoolean(Z)V
+HPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeFloat(F)V
+HPLjava/io/ObjectOutputStream$HandleTable;->growSpine()V
+HPLjava/io/ObjectOutputStream$ReplaceTable;->assign(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLjava/io/ObjectOutputStream;->enableReplaceObject(Z)Z
+HPLjava/io/ObjectOutputStream;->write([B)V
+HPLjava/io/ObjectOutputStream;->writeBoolean(Z)V
+HPLjava/io/ObjectOutputStream;->writeClass(Ljava/lang/Class;Z)V
+HPLjava/io/ObjectOutputStream;->writeEnum(Ljava/lang/Enum;Ljava/io/ObjectStreamClass;Z)V
+HPLjava/io/ObjectOutputStream;->writeFloat(F)V
+HPLjava/io/ObjectStreamClass$3;->compare(Ljava/io/ObjectStreamClass$MemberSignature;Ljava/io/ObjectStreamClass$MemberSignature;)I
+HPLjava/io/ObjectStreamClass$3;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLjava/io/ObjectStreamClass$5;->compare(Ljava/io/ObjectStreamClass$MemberSignature;Ljava/io/ObjectStreamClass$MemberSignature;)I
+HPLjava/io/ObjectStreamClass$5;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLjava/io/ObjectStreamClass;->getPackageName(Ljava/lang/Class;)Ljava/lang/String;
+HPLjava/io/ObjectStreamClass;->invokeWriteReplace(Ljava/lang/Object;)Ljava/lang/Object;
+HPLjava/io/ObjectStreamClass;->packageEquals(Ljava/lang/Class;Ljava/lang/Class;)Z
+HPLjava/io/OutputStream;->close()V
+HPLjava/io/OutputStreamWriter;-><init>(Ljava/io/OutputStream;Ljava/lang/String;)V
+HPLjava/io/OutputStreamWriter;->write(Ljava/lang/String;II)V
+HPLjava/io/PrintStream;-><init>(Ljava/io/OutputStream;ZLjava/lang/String;)V
+HPLjava/io/PrintStream;-><init>(ZLjava/io/OutputStream;Ljava/nio/charset/Charset;)V
+HPLjava/io/PrintStream;->print(J)V
+HPLjava/io/PrintStream;->toCharset(Ljava/lang/String;)Ljava/nio/charset/Charset;
+HPLjava/io/PrintWriter;-><init>(Ljava/io/OutputStream;)V
+HPLjava/io/PrintWriter;-><init>(Ljava/io/OutputStream;Z)V
+HPLjava/io/PrintWriter;->print(I)V
+HPLjava/io/PrintWriter;->print(J)V
+HPLjava/io/PrintWriter;->print(Ljava/lang/Object;)V
+HPLjava/io/PrintWriter;->print(Z)V
+HPLjava/io/PrintWriter;->println(I)V
+HPLjava/io/PrintWriter;->println(J)V
+HPLjava/io/PrintWriter;->println(Z)V
+HPLjava/io/PushbackReader;-><init>(Ljava/io/Reader;I)V
+HPLjava/io/PushbackReader;->ensureOpen()V
+HPLjava/io/PushbackReader;->read()I
+HPLjava/io/PushbackReader;->unread(I)V
+HPLjava/io/RandomAccessFile;->getFilePointer()J
+HPLjava/io/RandomAccessFile;->setLength(J)V
+HPLjava/io/RandomAccessFile;->write([B)V
+HPLjava/io/RandomAccessFile;->write([BII)V
+HPLjava/io/RandomAccessFile;->writeBytes([BII)V
+HPLjava/io/RandomAccessFile;->writeUTF(Ljava/lang/String;)V
+HPLjava/io/Reader;->read([C)I
+HPLjava/io/SequenceInputStream;->available()I
+HPLjava/io/SequenceInputStream;->close()V
+HPLjava/io/SequenceInputStream;->read([BII)I
+HPLjava/io/StringReader;->read()I
+HPLjava/io/Writer;->append(C)Ljava/io/Writer;
+HPLjava/io/Writer;->append(Ljava/lang/CharSequence;)Ljava/io/Writer;
+HPLjava/io/Writer;->write(Ljava/lang/String;II)V
+HPLjava/lang/AbstractStringBuilder;->indexOf(Ljava/lang/String;)I
+HPLjava/lang/AbstractStringBuilder;->subSequence(II)Ljava/lang/CharSequence;
+HPLjava/lang/AbstractStringBuilder;->trimToSize()V
+HPLjava/lang/Byte;->compare(BB)I
+HPLjava/lang/Byte;->compareTo(Ljava/lang/Byte;)I
+HPLjava/lang/Byte;->compareTo(Ljava/lang/Object;)I
+HPLjava/lang/Byte;->parseByte(Ljava/lang/String;)B
+HPLjava/lang/Byte;->parseByte(Ljava/lang/String;I)B
+HPLjava/lang/Character$Subset;->equals(Ljava/lang/Object;)Z
+HPLjava/lang/Character$Subset;->hashCode()I
+HPLjava/lang/Character;->codePointBefore(Ljava/lang/CharSequence;I)I
+HPLjava/lang/Character;->isISOControl(C)Z
+HPLjava/lang/Character;->isISOControl(I)Z
+HPLjava/lang/Character;->isSupplementaryCodePoint(I)Z
+HPLjava/lang/Character;->isSurrogatePair(CC)Z
+HPLjava/lang/Class;->getConstructors()[Ljava/lang/reflect/Constructor;
+HPLjava/lang/Class;->getEnumConstants()[Ljava/lang/Object;
+HPLjava/lang/Class;->getTypeName()Ljava/lang/String;
+HPLjava/lang/ClassCastException;-><init>(Ljava/lang/String;)V
+HPLjava/lang/Daemons$FinalizerWatchdogDaemon;->getNeedToWork()Z
+HPLjava/lang/Double;->equals(Ljava/lang/Object;)Z
+HPLjava/lang/Double;->hashCode()I
+HPLjava/lang/Double;->hashCode(D)I
+HPLjava/lang/Double;->longValue()J
+HPLjava/lang/Error;-><init>()V
+HPLjava/lang/InstantiationException;-><init>(Ljava/lang/String;)V
+HPLjava/lang/Integer;->byteValue()B
+HPLjava/lang/Integer;->shortValue()S
+HPLjava/lang/Long;->compare(JJ)I
+HPLjava/lang/Long;->floatValue()F
+HPLjava/lang/Long;->toBinaryString(J)Ljava/lang/String;
+HPLjava/lang/Long;->toOctalString(J)Ljava/lang/String;
+HPLjava/lang/Math;->abs(I)I
+HPLjava/lang/Math;->abs(J)J
+HPLjava/lang/Math;->copySign(FF)F
+HPLjava/lang/Math;->powerOfTwoD(I)D
+HPLjava/lang/Math;->scalb(FI)F
+HPLjava/lang/Math;->signum(F)F
+HPLjava/lang/Package;->getImplementationVersion()Ljava/lang/String;
+HPLjava/lang/Package;->hashCode()I
+HPLjava/lang/Process;-><init>()V
+HPLjava/lang/ProcessBuilder$NullInputStream;-><init>()V
+HPLjava/lang/ProcessBuilder$NullOutputStream;-><init>()V
+HPLjava/lang/ProcessBuilder;-><init>([Ljava/lang/String;)V
+HPLjava/lang/ProcessBuilder;->directory(Ljava/io/File;)Ljava/lang/ProcessBuilder;
+HPLjava/lang/ProcessBuilder;->environment([Ljava/lang/String;)Ljava/lang/ProcessBuilder;
+HPLjava/lang/ProcessBuilder;->start()Ljava/lang/Process;
+HPLjava/lang/ProcessEnvironment$ExternalData;-><init>(Ljava/lang/String;[B)V
+HPLjava/lang/ProcessEnvironment$ExternalData;->getBytes()[B
+HPLjava/lang/ProcessEnvironment$ExternalData;->hashCode()I
+HPLjava/lang/ProcessEnvironment$StringEnvironment;-><init>(Ljava/util/Map;)V
+HPLjava/lang/ProcessEnvironment$Value;-><init>(Ljava/lang/String;[B)V
+HPLjava/lang/ProcessEnvironment$Value;->valueOf([B)Ljava/lang/ProcessEnvironment$Value;
+HPLjava/lang/ProcessEnvironment$Variable;-><init>(Ljava/lang/String;[B)V
+HPLjava/lang/ProcessEnvironment$Variable;->valueOf([B)Ljava/lang/ProcessEnvironment$Variable;
+HPLjava/lang/ProcessEnvironment;->-wrap2([B)I
+HPLjava/lang/ProcessEnvironment;->arrayHash([B)I
+HPLjava/lang/ProcessEnvironment;->toEnvironmentBlock(Ljava/util/Map;[I)[B
+HPLjava/lang/ProcessImpl;->start([Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;[Ljava/lang/ProcessBuilder$Redirect;Z)Ljava/lang/Process;
+HPLjava/lang/ProcessImpl;->toCString(Ljava/lang/String;)[B
+HPLjava/lang/ReflectiveOperationException;-><init>(Ljava/lang/Throwable;)V
+HPLjava/lang/Runnable;->run()V
+HPLjava/lang/Runtime;->exec(Ljava/lang/String;)Ljava/lang/Process;
+HPLjava/lang/Runtime;->exec(Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
+HPLjava/lang/Runtime;->exec([Ljava/lang/String;)Ljava/lang/Process;
+HPLjava/lang/Runtime;->exec([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
+HPLjava/lang/Short;-><init>(S)V
+HPLjava/lang/Short;->equals(Ljava/lang/Object;)Z
+HPLjava/lang/Short;->hashCode()I
+HPLjava/lang/Short;->hashCode(S)I
+HPLjava/lang/Short;->parseShort(Ljava/lang/String;)S
+HPLjava/lang/Short;->parseShort(Ljava/lang/String;I)S
+HPLjava/lang/Short;->shortValue()S
+HPLjava/lang/Short;->valueOf(S)Ljava/lang/Short;
+HPLjava/lang/String;->join(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/String;
+HPLjava/lang/StringBuffer;->append(Ljava/lang/Object;)Ljava/lang/StringBuffer;
+HPLjava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/AbstractStringBuilder;
+HPLjava/lang/StringBuffer;->append(Z)Ljava/lang/StringBuffer;
+HPLjava/lang/StringBuffer;->substring(I)Ljava/lang/String;
+HPLjava/lang/StringBuffer;->substring(II)Ljava/lang/String;
+HPLjava/lang/StringBuilder;->append(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;
+HPLjava/lang/StringBuilder;->indexOf(Ljava/lang/String;)I
+HPLjava/lang/StringBuilder;->subSequence(II)Ljava/lang/CharSequence;
+HPLjava/lang/StringBuilder;->trimToSize()V
+HPLjava/lang/System;->arraycopy([DI[DII)V
+HPLjava/lang/System;->arraycopy([SI[SII)V
+HPLjava/lang/System;->logE(Ljava/lang/String;Ljava/lang/Throwable;)V
+HPLjava/lang/Thread;->toString()Ljava/lang/String;
+HPLjava/lang/ThreadGroup;->getName()Ljava/lang/String;
+HPLjava/lang/ThreadGroup;->getParent()Ljava/lang/ThreadGroup;
+HPLjava/lang/ThreadLocal$ThreadLocalMap;->prevIndex(II)I
+HPLjava/lang/ThreadLocal$ThreadLocalMap;->replaceStaleEntry(Ljava/lang/ThreadLocal;Ljava/lang/Object;I)V
+HPLjava/lang/Throwable;->initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;
+HPLjava/lang/Throwable;->writeObject(Ljava/io/ObjectOutputStream;)V
+HPLjava/lang/UNIXProcess$1;-><init>()V
+HPLjava/lang/UNIXProcess$1;->run()Ljava/lang/Object;
+HPLjava/lang/UNIXProcess$1;->run()Ljava/util/concurrent/Executor;
+HPLjava/lang/UNIXProcess$2;-><init>(Ljava/lang/UNIXProcess;[I)V
+HPLjava/lang/UNIXProcess$2;->run()Ljava/lang/Object;
+HPLjava/lang/UNIXProcess$2;->run()Ljava/lang/Void;
+HPLjava/lang/UNIXProcess$3;-><init>(Ljava/lang/UNIXProcess;)V
+HPLjava/lang/UNIXProcess$3;->run()V
+HPLjava/lang/UNIXProcess$ProcessPipeInputStream;-><init>(I)V
+HPLjava/lang/UNIXProcess$ProcessPipeInputStream;->drainInputStream(Ljava/io/InputStream;)[B
+HPLjava/lang/UNIXProcess$ProcessPipeInputStream;->processExited()V
+HPLjava/lang/UNIXProcess$ProcessPipeOutputStream;-><init>(I)V
+HPLjava/lang/UNIXProcess$ProcessPipeOutputStream;->processExited()V
+HPLjava/lang/UNIXProcess$ProcessReaperThreadFactory$1;-><init>()V
+HPLjava/lang/UNIXProcess$ProcessReaperThreadFactory$1;->run()Ljava/lang/Object;
+HPLjava/lang/UNIXProcess$ProcessReaperThreadFactory$1;->run()Ljava/lang/ThreadGroup;
+HPLjava/lang/UNIXProcess$ProcessReaperThreadFactory;-><init>()V
+HPLjava/lang/UNIXProcess$ProcessReaperThreadFactory;-><init>(Ljava/lang/UNIXProcess$ProcessReaperThreadFactory;)V
+HPLjava/lang/UNIXProcess$ProcessReaperThreadFactory;->getRootThreadGroup()Ljava/lang/ThreadGroup;
+HPLjava/lang/UNIXProcess$ProcessReaperThreadFactory;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
+HPLjava/lang/UNIXProcess;->-get0(Ljava/lang/UNIXProcess;)I
+HPLjava/lang/UNIXProcess;->-wrap0(Ljava/lang/UNIXProcess;I)I
+HPLjava/lang/UNIXProcess;-><init>([B[BI[BI[B[IZ)V
+HPLjava/lang/UNIXProcess;->getErrorStream()Ljava/io/InputStream;
+HPLjava/lang/UNIXProcess;->getInputStream()Ljava/io/InputStream;
+HPLjava/lang/UNIXProcess;->initStreams([I)V
+HPLjava/lang/UNIXProcess;->newFileDescriptor(I)Ljava/io/FileDescriptor;
+HPLjava/lang/UNIXProcess;->processExited(I)V
+HPLjava/lang/UNIXProcess;->waitFor()I
+HPLjava/lang/reflect/Executable;->isDefaultMethodInternal()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;
+HPLjava/lang/reflect/InvocationTargetException;-><init>(Ljava/lang/Throwable;)V
+HPLjava/lang/reflect/Method;->hashCode()I
+HPLjava/lang/reflect/Method;->isDefault()Z
+HPLjava/lang/reflect/Method;->specificToStringHeader(Ljava/lang/StringBuilder;)V
+HPLjava/lang/reflect/Method;->toString()Ljava/lang/String;
+HPLjava/lang/reflect/Modifier;->isAbstract(I)Z
+HPLjava/lang/reflect/Modifier;->methodModifiers()I
+HPLjava/lang/reflect/Modifier;->toString(I)Ljava/lang/String;
+HPLjava/math/BigInt;->modInverse(Ljava/math/BigInt;Ljava/math/BigInt;)Ljava/math/BigInt;
+HPLjava/math/BigInt;->modulus(Ljava/math/BigInt;Ljava/math/BigInt;)Ljava/math/BigInt;
+HPLjava/math/BigInteger;->mod(Ljava/math/BigInteger;)Ljava/math/BigInteger;
+HPLjava/math/BigInteger;->modInverse(Ljava/math/BigInteger;)Ljava/math/BigInteger;
+HPLjava/net/AbstractPlainDatagramSocketImpl;->joinGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V
+HPLjava/net/AbstractPlainDatagramSocketImpl;->leaveGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V
+HPLjava/net/AbstractPlainSocketImpl;->finalize()V
+HPLjava/net/AbstractPlainSocketImpl;->getTimeout()I
+HPLjava/net/AbstractPlainSocketImpl;->isConnectionReset()Z
+HPLjava/net/AddressCache;->putUnknownHost(Ljava/lang/String;ILjava/lang/String;)V
+HPLjava/net/CookieHandler;-><init>()V
+HPLjava/net/CookieHandler;->get(Ljava/net/URI;Ljava/util/Map;)Ljava/util/Map;
+HPLjava/net/CookieHandler;->put(Ljava/net/URI;Ljava/util/Map;)V
+HPLjava/net/CookieManager;-><init>()V
+HPLjava/net/CookieManager;-><init>(Ljava/net/CookieStore;Ljava/net/CookiePolicy;)V
+HPLjava/net/CookieManager;->getCookieStore()Ljava/net/CookieStore;
+HPLjava/net/CookiePolicy$1;-><init>()V
+HPLjava/net/CookiePolicy$2;-><init>()V
+HPLjava/net/CookiePolicy$3;-><init>()V
+HPLjava/net/CookieStore;->add(Ljava/net/URI;Ljava/net/HttpCookie;)V
+HPLjava/net/CookieStore;->get(Ljava/net/URI;)Ljava/util/List;
+HPLjava/net/CookieStore;->getCookies()Ljava/util/List;
+HPLjava/net/CookieStore;->getURIs()Ljava/util/List;
+HPLjava/net/CookieStore;->remove(Ljava/net/URI;Ljava/net/HttpCookie;)Z
+HPLjava/net/CookieStore;->removeAll()Z
+HPLjava/net/DatagramPacket;-><init>([BIILjava/net/SocketAddress;)V
+HPLjava/net/DatagramPacket;-><init>([BILjava/net/SocketAddress;)V
+HPLjava/net/DatagramPacket;->setSocketAddress(Ljava/net/SocketAddress;)V
+HPLjava/net/InMemoryCookieStore;-><init>()V
+HPLjava/net/InMemoryCookieStore;-><init>(I)V
+HPLjava/net/InMemoryCookieStore;->getCookies()Ljava/util/List;
+HPLjava/net/Inet4Address;->isLinkLocalAddress()Z
+HPLjava/net/Inet4Address;->isLoopbackAddress()Z
+HPLjava/net/Inet6Address$Inet6AddressHolder;->isLoopbackAddress()Z
+HPLjava/net/Inet6Address;->isLoopbackAddress()Z
+HPLjava/net/InetAddress;->getAllByNameOnNet(Ljava/lang/String;I)[Ljava/net/InetAddress;
+HPLjava/net/InetAddress;->parseNumericAddress(Ljava/lang/String;)Ljava/net/InetAddress;
+HPLjava/net/InetSocketAddress$InetSocketAddressHolder;->toString()Ljava/lang/String;
+HPLjava/net/InetSocketAddress;->toString()Ljava/lang/String;
+HPLjava/net/InterfaceAddress;->getAddress()Ljava/net/InetAddress;
+HPLjava/net/MulticastSocket;-><init>(I)V
+HPLjava/net/MulticastSocket;->joinGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V
+HPLjava/net/MulticastSocket;->leaveGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V
+HPLjava/net/MulticastSocket;->setTimeToLive(I)V
+HPLjava/net/NetworkInterface;->getByName(Ljava/lang/String;)Ljava/net/NetworkInterface;
+HPLjava/net/NetworkInterface;->getHardwareAddress()[B
+HPLjava/net/NetworkInterface;->getInterfaceAddresses()Ljava/util/List;
+HPLjava/net/NetworkInterface;->getMTU()I
+HPLjava/net/NetworkInterface;->isUp()Z
+HPLjava/net/NetworkInterface;->isVirtual()Z
+HPLjava/net/NetworkInterface;->supportsMulticast()Z
+HPLjava/net/PlainDatagramSocketImpl;->join(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)V
+HPLjava/net/PlainDatagramSocketImpl;->leave(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)V
+HPLjava/net/PlainDatagramSocketImpl;->makeGroupReq(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)Landroid/system/StructGroupReq;
+HPLjava/net/PlainDatagramSocketImpl;->setTimeToLive(I)V
+HPLjava/net/PlainSocketImpl;->socketGetOption(I)Ljava/lang/Object;
+HPLjava/net/Proxy$Type;->values()[Ljava/net/Proxy$Type;
+HPLjava/net/Socket;-><init>(Ljava/net/InetAddress;I)V
+HPLjava/net/Socket;-><init>([Ljava/net/InetAddress;ILjava/net/SocketAddress;Z)V
+HPLjava/net/Socket;->connect(Ljava/net/SocketAddress;)V
+HPLjava/net/Socket;->getInetAddress()Ljava/net/InetAddress;
+HPLjava/net/Socket;->getReuseAddress()Z
+HPLjava/net/Socket;->nonNullAddress(Ljava/net/InetAddress;)[Ljava/net/InetAddress;
+HPLjava/net/Socket;->setTcpNoDelay(Z)V
+HPLjava/net/SocketException;-><init>(Ljava/lang/String;)V
+HPLjava/net/SocketImpl;->getInetAddress()Ljava/net/InetAddress;
+HPLjava/net/SocketInputStream;->finalize()V
+HPLjava/net/SocketInputStream;->read([BII)I
+HPLjava/net/SocketInputStream;->read([BIII)I
+HPLjava/net/SocketInputStream;->socketRead(Ljava/io/FileDescriptor;[BIII)I
+HPLjava/net/SocketOutputStream;->finalize()V
+HPLjava/net/SocketOutputStream;->socketWrite([BII)V
+HPLjava/net/SocketOutputStream;->write([BII)V
+HPLjava/net/SocksSocketImpl;->getInetAddress()Ljava/net/InetAddress;
+HPLjava/net/URI$Parser;->fail(Ljava/lang/String;I)V
+HPLjava/net/URI$Parser;->scanEscape(IIC)I
+HPLjava/net/URI;->-get17()J
+HPLjava/net/URI;->-get4()J
+HPLjava/net/URI;->-set4(Ljava/net/URI;I)I
+HPLjava/net/URI;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLjava/net/URI;->encode(Ljava/lang/String;)Ljava/lang/String;
+HPLjava/net/URI;->equal(Ljava/lang/String;Ljava/lang/String;)Z
+HPLjava/net/URI;->equalIgnoringCase(Ljava/lang/String;Ljava/lang/String;)Z
+HPLjava/net/URI;->equals(Ljava/lang/Object;)Z
+HPLjava/net/URI;->getPort()I
+HPLjava/net/URI;->getRawFragment()Ljava/lang/String;
+HPLjava/net/URI;->getRawPath()Ljava/lang/String;
+HPLjava/net/URI;->getRawQuery()Ljava/lang/String;
+HPLjava/net/URI;->toASCIIString()Ljava/lang/String;
+HPLjava/net/URI;->toURL()Ljava/net/URL;
+HPLjava/net/URISyntaxException;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
+HPLjava/net/URLConnection;->getContentEncoding()Ljava/lang/String;
+HPLjava/net/URLConnection;->getContentLength()I
+HPLjava/net/URLConnection;->getContentLengthLong()J
+HPLjava/net/URLConnection;->getHeaderFieldLong(Ljava/lang/String;J)J
+HPLjava/net/URLConnection;->setDefaultUseCaches(Z)V
+HPLjava/net/URLDecoder;->decode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLjava/net/URLDecoder;->isValidHexChar(C)Z
+HPLjava/net/UnknownHostException;-><init>(Ljava/lang/String;)V
+HPLjava/nio/Bits;->getDouble(Ljava/nio/ByteBuffer;IZ)D
+HPLjava/nio/Bits;->getDoubleL(Ljava/nio/ByteBuffer;I)D
+HPLjava/nio/Bits;->getFloatB(Ljava/nio/ByteBuffer;I)F
+HPLjava/nio/Bits;->putDouble(Ljava/nio/ByteBuffer;IDZ)V
+HPLjava/nio/Bits;->putDoubleB(Ljava/nio/ByteBuffer;ID)V
+HPLjava/nio/Bits;->putFloat(Ljava/nio/ByteBuffer;IFZ)V
+HPLjava/nio/Bits;->putFloatB(Ljava/nio/ByteBuffer;IF)V
+HPLjava/nio/Bits;->putShort(Ljava/nio/ByteBuffer;ISZ)V
+HPLjava/nio/Bits;->putShortB(Ljava/nio/ByteBuffer;IS)V
+HPLjava/nio/Bits;->putShortL(Ljava/nio/ByteBuffer;IS)V
+HPLjava/nio/Bits;->short0(S)B
+HPLjava/nio/Bits;->short1(S)B
+HPLjava/nio/ByteBuffer;->equals(BB)Z
+HPLjava/nio/ByteBuffer;->equals(Ljava/lang/Object;)Z
+HPLjava/nio/ByteBuffer;->hashCode()I
+HPLjava/nio/ByteBufferAsIntBuffer;->get()I
+HPLjava/nio/ByteBufferAsIntBuffer;->get(I)I
+HPLjava/nio/ByteBufferAsIntBuffer;->put(I)Ljava/nio/IntBuffer;
+HPLjava/nio/ByteBufferAsIntBuffer;->put(II)Ljava/nio/IntBuffer;
+HPLjava/nio/ByteBufferAsIntBuffer;->put([III)Ljava/nio/IntBuffer;
+HPLjava/nio/ByteBufferAsLongBuffer;->put([JII)Ljava/nio/LongBuffer;
+HPLjava/nio/DirectByteBuffer$MemoryRef;->free()V
+HPLjava/nio/DirectByteBuffer;-><init>(JI)V
+HPLjava/nio/DirectByteBuffer;->address()J
+HPLjava/nio/DirectByteBuffer;->asReadOnlyBuffer()Ljava/nio/ByteBuffer;
+HPLjava/nio/DirectByteBuffer;->cleaner()Lsun/misc/Cleaner;
+HPLjava/nio/DirectByteBuffer;->getLong()J
+HPLjava/nio/DirectByteBuffer;->getLong(I)J
+HPLjava/nio/DirectByteBuffer;->getLong(J)J
+HPLjava/nio/DirectByteBuffer;->isAccessible()Z
+HPLjava/nio/DirectByteBuffer;->isReadOnly()Z
+HPLjava/nio/DirectByteBuffer;->put([BII)Ljava/nio/ByteBuffer;
+HPLjava/nio/DirectByteBuffer;->putLong(IJ)Ljava/nio/ByteBuffer;
+HPLjava/nio/DirectByteBuffer;->putLong(JJ)Ljava/nio/ByteBuffer;
+HPLjava/nio/DirectByteBuffer;->setAccessible(Z)V
+HPLjava/nio/HeapByteBuffer;->asLongBuffer()Ljava/nio/LongBuffer;
+HPLjava/nio/HeapByteBuffer;->asReadOnlyBuffer()Ljava/nio/ByteBuffer;
+HPLjava/nio/HeapByteBuffer;->asShortBuffer()Ljava/nio/ShortBuffer;
+HPLjava/nio/HeapByteBuffer;->get(I)B
+HPLjava/nio/HeapByteBuffer;->getDouble()D
+HPLjava/nio/HeapByteBuffer;->getIntUnchecked(I)I
+HPLjava/nio/HeapByteBuffer;->getShort()S
+HPLjava/nio/HeapByteBuffer;->getUnchecked(I[JII)V
+HPLjava/nio/HeapByteBuffer;->getUnchecked(I[SII)V
+HPLjava/nio/HeapByteBuffer;->putDouble(D)Ljava/nio/ByteBuffer;
+HPLjava/nio/HeapByteBuffer;->putFloat(F)Ljava/nio/ByteBuffer;
+HPLjava/nio/HeapByteBuffer;->putIntUnchecked(II)V
+HPLjava/nio/HeapByteBuffer;->putShort(IS)Ljava/nio/ByteBuffer;
+HPLjava/nio/HeapByteBuffer;->putShort(S)Ljava/nio/ByteBuffer;
+HPLjava/nio/HeapByteBuffer;->putUnchecked(I[III)V
+HPLjava/nio/HeapByteBuffer;->putUnchecked(I[JII)V
+HPLjava/nio/HeapByteBuffer;->putUnchecked(I[SII)V
+HPLjava/nio/IntBuffer;->put([I)Ljava/nio/IntBuffer;
+HPLjava/nio/LongBuffer;->put([J)Ljava/nio/LongBuffer;
+HPLjava/nio/MappedByteBuffer;-><init>(IIII)V
+HPLjava/nio/NioUtils;->freeDirectBuffer(Ljava/nio/ByteBuffer;)V
+HPLjava/nio/NioUtils;->unsafeArray(Ljava/nio/ByteBuffer;)[B
+HPLjava/nio/NioUtils;->unsafeArrayOffset(Ljava/nio/ByteBuffer;)I
+HPLjava/nio/channels/Channels$ReadableByteChannelImpl;-><init>(Ljava/io/InputStream;)V
+HPLjava/nio/channels/Channels$ReadableByteChannelImpl;->implCloseChannel()V
+HPLjava/nio/channels/Channels$ReadableByteChannelImpl;->read(Ljava/nio/ByteBuffer;)I
+HPLjava/nio/channels/Channels;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
+HPLjava/nio/channels/Channels;->newChannel(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;
+HPLjava/nio/channels/Channels;->newInputStream(Ljava/nio/channels/ReadableByteChannel;)Ljava/io/InputStream;
+HPLjava/nio/channels/Channels;->newReader(Ljava/nio/channels/ReadableByteChannel;Ljava/nio/charset/CharsetDecoder;I)Ljava/io/Reader;
+HPLjava/nio/file/Files;->newByteChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;
+HPLjava/nio/file/Files;->newByteChannel(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/SeekableByteChannel;
+HPLjava/nio/file/Files;->read(Ljava/io/InputStream;I)[B
+HPLjava/nio/file/Files;->readAllBytes(Ljava/nio/file/Path;)[B
+HPLjava/nio/file/attribute/BasicFileAttributes;->creationTime()Ljava/nio/file/attribute/FileTime;
+HPLjava/nio/file/attribute/BasicFileAttributes;->fileKey()Ljava/lang/Object;
+HPLjava/nio/file/attribute/BasicFileAttributes;->isDirectory()Z
+HPLjava/nio/file/attribute/BasicFileAttributes;->isOther()Z
+HPLjava/nio/file/attribute/BasicFileAttributes;->isRegularFile()Z
+HPLjava/nio/file/attribute/BasicFileAttributes;->isSymbolicLink()Z
+HPLjava/nio/file/attribute/BasicFileAttributes;->lastAccessTime()Ljava/nio/file/attribute/FileTime;
+HPLjava/nio/file/attribute/BasicFileAttributes;->lastModifiedTime()Ljava/nio/file/attribute/FileTime;
+HPLjava/nio/file/attribute/BasicFileAttributes;->size()J
+HPLjava/security/DigestInputStream;-><init>(Ljava/io/InputStream;Ljava/security/MessageDigest;)V
+HPLjava/security/DigestInputStream;->getMessageDigest()Ljava/security/MessageDigest;
+HPLjava/security/DigestInputStream;->read([BII)I
+HPLjava/security/DigestInputStream;->setMessageDigest(Ljava/security/MessageDigest;)V
+HPLjava/security/KeyFactory;->generatePrivate(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;
+HPLjava/security/KeyPair;-><init>(Ljava/security/PublicKey;Ljava/security/PrivateKey;)V
+HPLjava/security/KeyPair;->getPrivate()Ljava/security/PrivateKey;
+HPLjava/security/KeyPair;->getPublic()Ljava/security/PublicKey;
+HPLjava/security/KeyPairGenerator;-><init>(Ljava/lang/String;)V
+HPLjava/security/KeyPairGenerator;->getInstance(Ljava/lang/String;)Ljava/security/KeyPairGenerator;
+HPLjava/security/KeyPairGenerator;->getInstance(Lsun/security/jca/GetInstance$Instance;Ljava/lang/String;)Ljava/security/KeyPairGenerator;
+HPLjava/security/KeyPairGenerator;->initialize(Ljava/security/spec/AlgorithmParameterSpec;)V
+HPLjava/security/KeyPairGeneratorSpi;-><init>()V
+HPLjava/security/KeyStore;->containsAlias(Ljava/lang/String;)Z
+HPLjava/security/KeyStore;->deleteEntry(Ljava/lang/String;)V
+HPLjava/security/MessageDigest;->getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/MessageDigest;
+HPLjava/security/Principal;->equals(Ljava/lang/Object;)Z
+HPLjava/security/Principal;->getName()Ljava/lang/String;
+HPLjava/security/Principal;->hashCode()I
+HPLjava/security/Principal;->toString()Ljava/lang/String;
+HPLjava/security/Security;->addProvider(Ljava/security/Provider;)I
+HPLjava/security/Signature$Delegate;->engineInitSign(Ljava/security/PrivateKey;)V
+HPLjava/security/Signature$Delegate;->engineSign()[B
+HPLjava/security/Signature;->initSign(Ljava/security/PrivateKey;)V
+HPLjava/security/Signature;->sign()[B
+HPLjava/security/Signature;->update([B)V
+HPLjava/security/cert/Certificate;->equals(Ljava/lang/Object;)Z
+HPLjava/security/interfaces/ECPrivateKey;->getS()Ljava/math/BigInteger;
+HPLjava/security/spec/ECGenParameterSpec;-><init>(Ljava/lang/String;)V
+HPLjava/security/spec/ECGenParameterSpec;->getName()Ljava/lang/String;
+HPLjava/security/spec/EllipticCurve;->getA()Ljava/math/BigInteger;
+HPLjava/security/spec/EllipticCurve;->getB()Ljava/math/BigInteger;
+HPLjava/security/spec/PKCS8EncodedKeySpec;-><init>([B)V
+HPLjava/security/spec/PKCS8EncodedKeySpec;->getEncoded()[B
+HPLjava/text/Bidi;->requiresBidi([CII)Z
+HPLjava/text/DateFormat;->getTimeInstance()Ljava/text/DateFormat;
+HPLjava/text/DecimalFormat;-><init>(Ljava/lang/String;)V
+HPLjava/text/DecimalFormat;->format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HPLjava/text/DecimalFormat;->getNegativePrefix()Ljava/lang/String;
+HPLjava/text/DecimalFormat;->getNegativeSuffix()Ljava/lang/String;
+HPLjava/text/DecimalFormat;->getPositivePrefix()Ljava/lang/String;
+HPLjava/text/DecimalFormat;->getPositiveSuffix()Ljava/lang/String;
+HPLjava/text/DecimalFormatSymbols;->getInfinity()Ljava/lang/String;
+HPLjava/text/DecimalFormatSymbols;->getNaN()Ljava/lang/String;
+HPLjava/text/IcuIteratorWrapper;->last()I
+HPLjava/text/IcuIteratorWrapper;->next()I
+HPLjava/text/IcuIteratorWrapper;->setText(Ljava/lang/String;)V
+HPLjava/text/NumberFormat;->getNumberInstance()Ljava/text/NumberFormat;
+HPLjava/text/NumberFormat;->getNumberInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;
+HPLjava/text/NumberFormat;->parse(Ljava/lang/String;)Ljava/lang/Number;
+HPLjava/text/RuleBasedCollator;->compare(Ljava/lang/String;Ljava/lang/String;)I
+HPLjava/text/StringCharacterIterator;->current()C
+HPLjava/text/StringCharacterIterator;->first()C
+HPLjava/text/StringCharacterIterator;->getEndIndex()I
+HPLjava/text/StringCharacterIterator;->getIndex()I
+HPLjava/text/StringCharacterIterator;->next()C
+HPLjava/text/StringCharacterIterator;->setIndex(I)C
+HPLjava/util/AbstractCollection;->remove(Ljava/lang/Object;)Z
+HPLjava/util/AbstractList$ListItr;->hasPrevious()Z
+HPLjava/util/AbstractList$ListItr;->nextIndex()I
+HPLjava/util/AbstractList$ListItr;->previous()Ljava/lang/Object;
+HPLjava/util/AbstractList$ListItr;->previousIndex()I
+HPLjava/util/AbstractList;->clear()V
+HPLjava/util/AbstractList;->indexOf(Ljava/lang/Object;)I
+HPLjava/util/AbstractList;->removeRange(II)V
+HPLjava/util/AbstractList;->subList(II)Ljava/util/List;
+HPLjava/util/AbstractMap$2$1;-><init>(Ljava/util/AbstractMap$2;)V
+HPLjava/util/AbstractMap$2$1;->hasNext()Z
+HPLjava/util/AbstractMap$2$1;->next()Ljava/lang/Object;
+HPLjava/util/AbstractMap$2;-><init>(Ljava/util/AbstractMap;)V
+HPLjava/util/AbstractMap$2;->iterator()Ljava/util/Iterator;
+HPLjava/util/AbstractMap;->putAll(Ljava/util/Map;)V
+HPLjava/util/AbstractMap;->values()Ljava/util/Collection;
+HPLjava/util/ArrayDeque$DescendingIterator;-><init>(Ljava/util/ArrayDeque;)V
+HPLjava/util/ArrayDeque$DescendingIterator;-><init>(Ljava/util/ArrayDeque;Ljava/util/ArrayDeque$DescendingIterator;)V
+HPLjava/util/ArrayDeque$DescendingIterator;->hasNext()Z
+HPLjava/util/ArrayDeque$DescendingIterator;->next()Ljava/lang/Object;
+HPLjava/util/ArrayDeque;->contains(Ljava/lang/Object;)Z
+HPLjava/util/ArrayDeque;->descendingIterator()Ljava/util/Iterator;
+HPLjava/util/ArrayList$ArrayListSpliterator;-><init>(Ljava/util/ArrayList;III)V
+HPLjava/util/ArrayList$ArrayListSpliterator;->characteristics()I
+HPLjava/util/ArrayList$ArrayListSpliterator;->estimateSize()J
+HPLjava/util/ArrayList$ArrayListSpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
+HPLjava/util/ArrayList$ArrayListSpliterator;->getFence()I
+HPLjava/util/ArrayList$SubList$1;->previousIndex()I
+HPLjava/util/ArrayList$SubList;->removeRange(II)V
+HPLjava/util/ArrayList$SubList;->set(ILjava/lang/Object;)Ljava/lang/Object;
+HPLjava/util/ArrayList;->addAll(ILjava/util/Collection;)Z
+HPLjava/util/ArrayList;->lastIndexOf(Ljava/lang/Object;)I
+HPLjava/util/ArrayList;->readObject(Ljava/io/ObjectInputStream;)V
+HPLjava/util/ArrayList;->removeRange(II)V
+HPLjava/util/ArrayList;->spliterator()Ljava/util/Spliterator;
+HPLjava/util/ArrayList;->writeObject(Ljava/io/ObjectOutputStream;)V
+HPLjava/util/Arrays$ArrayList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HPLjava/util/Arrays;->binarySearch([CC)I
+HPLjava/util/Arrays;->binarySearch([JIIJ)I
+HPLjava/util/Arrays;->binarySearch([Ljava/lang/Object;IILjava/lang/Object;Ljava/util/Comparator;)I
+HPLjava/util/Arrays;->binarySearch0([CIIC)I
+HPLjava/util/Arrays;->copyOf([DI)[D
+HPLjava/util/Arrays;->copyOf([SI)[S
+HPLjava/util/Arrays;->copyOf([ZI)[Z
+HPLjava/util/Arrays;->equals([J[J)Z
+HPLjava/util/Arrays;->equals([S[S)Z
+HPLjava/util/Arrays;->fill([JIIJ)V
+HPLjava/util/Arrays;->fill([SS)V
+HPLjava/util/Arrays;->fill([ZIIZ)V
+HPLjava/util/Arrays;->hashCode([J)I
+HPLjava/util/Arrays;->sort([C)V
+HPLjava/util/Arrays;->sort([F)V
+HPLjava/util/Arrays;->sort([S)V
+HPLjava/util/Arrays;->spliterator([III)Ljava/util/Spliterator$OfInt;
+HPLjava/util/Arrays;->stream([I)Ljava/util/stream/IntStream;
+HPLjava/util/Arrays;->stream([III)Ljava/util/stream/IntStream;
+HPLjava/util/Arrays;->toString([B)Ljava/lang/String;
+HPLjava/util/BitSet;-><init>([J)V
+HPLjava/util/BitSet;->andNot(Ljava/util/BitSet;)V
+HPLjava/util/BitSet;->clear()V
+HPLjava/util/BitSet;->clone()Ljava/lang/Object;
+HPLjava/util/BitSet;->isEmpty()Z
+HPLjava/util/BitSet;->length()I
+HPLjava/util/BitSet;->nextClearBit(I)I
+HPLjava/util/BitSet;->size()I
+HPLjava/util/BitSet;->toByteArray()[B
+HPLjava/util/BitSet;->trimToSize()V
+HPLjava/util/BitSet;->valueOf(Ljava/nio/ByteBuffer;)Ljava/util/BitSet;
+HPLjava/util/BitSet;->valueOf([B)Ljava/util/BitSet;
+HPLjava/util/Calendar;->clear(I)V
+HPLjava/util/Collection;->spliterator()Ljava/util/Spliterator;
+HPLjava/util/Collections$CopiesList;->get(I)Ljava/lang/Object;
+HPLjava/util/Collections$CopiesList;->size()I
+HPLjava/util/Collections$EmptyList;->contains(Ljava/lang/Object;)Z
+HPLjava/util/Collections$EmptyList;->hashCode()I
+HPLjava/util/Collections$EmptyList;->listIterator()Ljava/util/ListIterator;
+HPLjava/util/Collections$EmptyList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HPLjava/util/Collections$EmptyMap;->containsKey(Ljava/lang/Object;)Z
+HPLjava/util/Collections$EmptyMap;->equals(Ljava/lang/Object;)Z
+HPLjava/util/Collections$EmptyMap;->keySet()Ljava/util/Set;
+HPLjava/util/Collections$ReverseComparator2;-><init>(Ljava/util/Comparator;)V
+HPLjava/util/Collections$SetFromMap;->stream()Ljava/util/stream/Stream;
+HPLjava/util/Collections$SetFromMap;->toArray()[Ljava/lang/Object;
+HPLjava/util/Collections$SynchronizedCollection;->contains(Ljava/lang/Object;)Z
+HPLjava/util/Collections$SynchronizedCollection;->toArray()[Ljava/lang/Object;
+HPLjava/util/Collections$SynchronizedSet;->equals(Ljava/lang/Object;)Z
+HPLjava/util/Collections$UnmodifiableList;->indexOf(Ljava/lang/Object;)I
+HPLjava/util/Collections$UnmodifiableMap;->toString()Ljava/lang/String;
+HPLjava/util/Collections$UnmodifiableSortedMap;-><init>(Ljava/util/SortedMap;)V
+HPLjava/util/Collections$UnmodifiableSortedSet;-><init>(Ljava/util/SortedSet;)V
+HPLjava/util/Collections;->emptyListIterator()Ljava/util/ListIterator;
+HPLjava/util/Collections;->max(Ljava/util/Collection;)Ljava/lang/Object;
+HPLjava/util/Collections;->min(Ljava/util/Collection;)Ljava/lang/Object;
+HPLjava/util/Collections;->reverseOrder(Ljava/util/Comparator;)Ljava/util/Comparator;
+HPLjava/util/Collections;->shuffle(Ljava/util/List;)V
+HPLjava/util/Collections;->shuffle(Ljava/util/List;Ljava/util/Random;)V
+HPLjava/util/Collections;->synchronizedCollection(Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/Collection;
+HPLjava/util/Collections;->unmodifiableSortedMap(Ljava/util/SortedMap;)Ljava/util/SortedMap;
+HPLjava/util/Collections;->unmodifiableSortedSet(Ljava/util/SortedSet;)Ljava/util/SortedSet;
+HPLjava/util/Date;-><init>(IIIIII)V
+HPLjava/util/Date;->after(Ljava/util/Date;)Z
+HPLjava/util/Date;->convertToAbbr(Ljava/lang/StringBuilder;Ljava/lang/String;)Ljava/lang/StringBuilder;
+HPLjava/util/Date;->getCalendarSystem(I)Lsun/util/calendar/BaseCalendar;
+HPLjava/util/Date;->getCalendarSystem(Lsun/util/calendar/BaseCalendar$Date;)Lsun/util/calendar/BaseCalendar;
+HPLjava/util/Date;->normalize(Lsun/util/calendar/BaseCalendar$Date;)Lsun/util/calendar/BaseCalendar$Date;
+HPLjava/util/Date;->toString()Ljava/lang/String;
+HPLjava/util/DualPivotQuicksort;->doSort([CII[CII)V
+HPLjava/util/DualPivotQuicksort;->doSort([FII[FII)V
+HPLjava/util/DualPivotQuicksort;->doSort([SII[SII)V
+HPLjava/util/DualPivotQuicksort;->sort([CIIZ)V
+HPLjava/util/DualPivotQuicksort;->sort([CII[CII)V
+HPLjava/util/DualPivotQuicksort;->sort([FIIZ)V
+HPLjava/util/DualPivotQuicksort;->sort([FII[FII)V
+HPLjava/util/DualPivotQuicksort;->sort([SIIZ)V
+HPLjava/util/DualPivotQuicksort;->sort([SII[SII)V
+HPLjava/util/EnumSet$SerializationProxy;-><init>(Ljava/util/EnumSet;)V
+HPLjava/util/EnumSet;->-get0()[Ljava/lang/Enum;
+HPLjava/util/EnumSet;->writeReplace()Ljava/lang/Object;
+HPLjava/util/Formatter$FormatSpecifier;->checkCharacter()V
+HPLjava/util/Formatter$FormatSpecifier;->print(SLjava/util/Locale;)V
+HPLjava/util/Formatter$FormatSpecifier;->printCharacter(Ljava/lang/Object;)V
+HPLjava/util/Formatter;->close()V
+HPLjava/util/Formatter;->out()Ljava/lang/Appendable;
+HPLjava/util/GregorianCalendar;-><init>(Ljava/util/TimeZone;)V
+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;->getTreeNode(ILjava/lang/Object;)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;->treeify([Ljava/util/HashMap$Node;)V
+HPLjava/util/HashMap$TreeNode;->untreeify(Ljava/util/HashMap;)Ljava/util/HashMap$Node;
+HPLjava/util/HashMap$Values;->forEach(Ljava/util/function/Consumer;)V
+HPLjava/util/HashMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLjava/util/HashMap;->loadFactor()F
+HPLjava/util/HashMap;->newTreeNode(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode;
+HPLjava/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;
+HPLjava/util/HashSet;-><init>(IF)V
+HPLjava/util/HashSet;->readObject(Ljava/io/ObjectInputStream;)V
+HPLjava/util/HashSet;->writeObject(Ljava/io/ObjectOutputStream;)V
+HPLjava/util/Hashtable$KeySet;-><init>(Ljava/util/Hashtable;)V
+HPLjava/util/Hashtable$KeySet;-><init>(Ljava/util/Hashtable;Ljava/util/Hashtable$KeySet;)V
+HPLjava/util/Hashtable$KeySet;->iterator()Ljava/util/Iterator;
+HPLjava/util/Hashtable$KeySet;->size()I
+HPLjava/util/Hashtable$ValueCollection;-><init>(Ljava/util/Hashtable;)V
+HPLjava/util/Hashtable$ValueCollection;-><init>(Ljava/util/Hashtable;Ljava/util/Hashtable$ValueCollection;)V
+HPLjava/util/Hashtable$ValueCollection;->iterator()Ljava/util/Iterator;
+HPLjava/util/Hashtable$ValueCollection;->size()I
+HPLjava/util/Hashtable;->-get0(Ljava/util/Hashtable;)I
+HPLjava/util/Hashtable;->keySet()Ljava/util/Set;
+HPLjava/util/Hashtable;->size()I
+HPLjava/util/Hashtable;->values()Ljava/util/Collection;
+HPLjava/util/IdentityHashMap$KeySet;->size()I
+HPLjava/util/IdentityHashMap$Values;-><init>(Ljava/util/IdentityHashMap;)V
+HPLjava/util/IdentityHashMap$Values;-><init>(Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap$Values;)V
+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;
+HPLjava/util/IdentityHashMap;->clear()V
+HPLjava/util/IdentityHashMap;->values()Ljava/util/Collection;
+HPLjava/util/JumboEnumSet;->contains(Ljava/lang/Object;)Z
+HPLjava/util/JumboEnumSet;->remove(Ljava/lang/Object;)Z
+HPLjava/util/LinkedHashMap$LinkedHashIterator;->remove()V
+HPLjava/util/LinkedHashMap$LinkedKeySet;->contains(Ljava/lang/Object;)Z
+HPLjava/util/LinkedHashMap;->internalWriteEntries(Ljava/io/ObjectOutputStream;)V
+HPLjava/util/LinkedHashMap;->newTreeNode(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode;
+HPLjava/util/LinkedHashMap;->reinitialize()V
+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
+HPLjava/util/LinkedHashSet;-><init>(IF)V
+HPLjava/util/LinkedList$DescendingIterator;-><init>(Ljava/util/LinkedList;)V
+HPLjava/util/LinkedList$DescendingIterator;-><init>(Ljava/util/LinkedList;Ljava/util/LinkedList$DescendingIterator;)V
+HPLjava/util/LinkedList$DescendingIterator;->hasNext()Z
+HPLjava/util/LinkedList$DescendingIterator;->next()Ljava/lang/Object;
+HPLjava/util/LinkedList$DescendingIterator;->remove()V
+HPLjava/util/LinkedList$ListItr;->add(Ljava/lang/Object;)V
+HPLjava/util/LinkedList$ListItr;->hasPrevious()Z
+HPLjava/util/LinkedList$ListItr;->previous()Ljava/lang/Object;
+HPLjava/util/LinkedList$ListItr;->remove()V
+HPLjava/util/LinkedList;->descendingIterator()Ljava/util/Iterator;
+HPLjava/util/LinkedList;->getFirst()Ljava/lang/Object;
+HPLjava/util/LinkedList;->getLast()Ljava/lang/Object;
+HPLjava/util/LinkedList;->offerFirst(Ljava/lang/Object;)Z
+HPLjava/util/LinkedList;->pollLast()Ljava/lang/Object;
+HPLjava/util/LinkedList;->push(Ljava/lang/Object;)V
+HPLjava/util/LinkedList;->removeLast()Ljava/lang/Object;
+HPLjava/util/LinkedList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HPLjava/util/LinkedList;->unlinkLast(Ljava/util/LinkedList$Node;)Ljava/lang/Object;
+HPLjava/util/Locale;->getDisplayCountry(Ljava/util/Locale;)Ljava/lang/String;
+HPLjava/util/Locale;->getDisplayLanguage()Ljava/lang/String;
+HPLjava/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;
+HPLjava/util/Locale;->isValidBcp47Alpha(Ljava/lang/String;II)Z
+HPLjava/util/Locale;->normalizeAndValidateLanguage(Ljava/lang/String;Z)Ljava/lang/String;
+HPLjava/util/Locale;->normalizeAndValidateRegion(Ljava/lang/String;Z)Ljava/lang/String;
+HPLjava/util/Map;->computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
+HPLjava/util/NoSuchElementException;-><init>()V
+HPLjava/util/Objects;->toString(Ljava/lang/Object;)Ljava/lang/String;
+HPLjava/util/Optional;->orElse(Ljava/lang/Object;)Ljava/lang/Object;
+HPLjava/util/PriorityQueue;->clear()V
+HPLjava/util/PriorityQueue;->heapify()V
+HPLjava/util/PriorityQueue;->initFromCollection(Ljava/util/Collection;)V
+HPLjava/util/RandomAccessSubList;-><init>(Ljava/util/AbstractList;II)V
+HPLjava/util/Scanner$1;-><init>(Ljava/util/Scanner;I)V
+HPLjava/util/Scanner$1;->create(Ljava/lang/Object;)Ljava/lang/Object;
+HPLjava/util/Scanner$1;->create(Ljava/lang/String;)Ljava/util/regex/Pattern;
+HPLjava/util/Scanner;-><init>(Ljava/io/File;)V
+HPLjava/util/Scanner;-><init>(Ljava/lang/Readable;Ljava/util/regex/Pattern;)V
+HPLjava/util/Scanner;-><init>(Ljava/lang/String;)V
+HPLjava/util/Scanner;-><init>(Ljava/nio/channels/ReadableByteChannel;)V
+HPLjava/util/Scanner;->buildIntegerPatternString()Ljava/lang/String;
+HPLjava/util/Scanner;->clearCaches()V
+HPLjava/util/Scanner;->close()V
+HPLjava/util/Scanner;->ensureOpen()V
+HPLjava/util/Scanner;->findPatternInBuffer(Ljava/util/regex/Pattern;I)Ljava/lang/String;
+HPLjava/util/Scanner;->findWithinHorizon(Ljava/util/regex/Pattern;I)Ljava/lang/String;
+HPLjava/util/Scanner;->getCompleteTokenInBuffer(Ljava/util/regex/Pattern;)Ljava/lang/String;
+HPLjava/util/Scanner;->hasNext()Z
+HPLjava/util/Scanner;->hasTokenInBuffer()Z
+HPLjava/util/Scanner;->integerPattern()Ljava/util/regex/Pattern;
+HPLjava/util/Scanner;->linePattern()Ljava/util/regex/Pattern;
+HPLjava/util/Scanner;->makeReadable(Ljava/nio/channels/ReadableByteChannel;)Ljava/lang/Readable;
+HPLjava/util/Scanner;->makeReadable(Ljava/nio/channels/ReadableByteChannel;Ljava/nio/charset/CharsetDecoder;)Ljava/lang/Readable;
+HPLjava/util/Scanner;->match()Ljava/util/regex/MatchResult;
+HPLjava/util/Scanner;->next()Ljava/lang/String;
+HPLjava/util/Scanner;->next(Ljava/util/regex/Pattern;)Ljava/lang/String;
+HPLjava/util/Scanner;->nextLine()Ljava/lang/String;
+HPLjava/util/Scanner;->nextLong()J
+HPLjava/util/Scanner;->nextLong(I)J
+HPLjava/util/Scanner;->readInput()V
+HPLjava/util/Scanner;->revertState(Z)Z
+HPLjava/util/Scanner;->saveState()V
+HPLjava/util/Scanner;->setRadix(I)V
+HPLjava/util/Scanner;->useDelimiter(Ljava/lang/String;)Ljava/util/Scanner;
+HPLjava/util/Scanner;->useLocale(Ljava/util/Locale;)Ljava/util/Scanner;
+HPLjava/util/Spliterator$OfInt;->forEachRemaining(Ljava/util/function/Consumer;)V
+HPLjava/util/Spliterators$IntArraySpliterator;-><init>([IIII)V
+HPLjava/util/Spliterators$IntArraySpliterator;->characteristics()I
+HPLjava/util/Spliterators$IntArraySpliterator;->estimateSize()J
+HPLjava/util/Spliterators$IntArraySpliterator;->forEachRemaining(Ljava/util/function/IntConsumer;)V
+HPLjava/util/Spliterators;->checkFromToBounds(III)V
+HPLjava/util/Spliterators;->spliterator([IIII)Ljava/util/Spliterator$OfInt;
+HPLjava/util/StringTokenizer;-><init>(Ljava/lang/String;)V
+HPLjava/util/StringTokenizer;->countTokens()I
+HPLjava/util/StringTokenizer;->nextToken(Ljava/lang/String;)Ljava/lang/String;
+HPLjava/util/SubList$1;-><init>(Ljava/util/SubList;I)V
+HPLjava/util/SubList$1;->hasNext()Z
+HPLjava/util/SubList$1;->next()Ljava/lang/Object;
+HPLjava/util/SubList$1;->nextIndex()I
+HPLjava/util/SubList;->-get0(Ljava/util/SubList;)Ljava/util/AbstractList;
+HPLjava/util/SubList;->-get1(Ljava/util/SubList;)I
+HPLjava/util/SubList;->-get2(Ljava/util/SubList;)I
+HPLjava/util/SubList;-><init>(Ljava/util/AbstractList;II)V
+HPLjava/util/SubList;->checkForComodification()V
+HPLjava/util/SubList;->iterator()Ljava/util/Iterator;
+HPLjava/util/SubList;->listIterator(I)Ljava/util/ListIterator;
+HPLjava/util/SubList;->rangeCheckForAdd(I)V
+HPLjava/util/SubList;->size()I
+HPLjava/util/TimeZone;->appendNumber(Ljava/lang/StringBuilder;II)V
+HPLjava/util/TimeZone;->createGmtOffsetString(ZZI)Ljava/lang/String;
+HPLjava/util/TimeZone;->getDisplayName(ZILjava/util/Locale;)Ljava/lang/String;
+HPLjava/util/Timer;->cancel()V
+HPLjava/util/Timer;->schedule(Ljava/util/TimerTask;J)V
+HPLjava/util/TreeMap$AscendingSubMap;->comparator()Ljava/util/Comparator;
+HPLjava/util/TreeMap$AscendingSubMap;->keyIterator()Ljava/util/Iterator;
+HPLjava/util/TreeMap$NavigableSubMap$EntrySetView;->isEmpty()Z
+HPLjava/util/TreeMap$NavigableSubMap$EntrySetView;->size()I
+HPLjava/util/TreeMap$NavigableSubMap$SubMapEntryIterator;->remove()V
+HPLjava/util/TreeMap$NavigableSubMap$SubMapIterator;->removeAscending()V
+HPLjava/util/TreeMap$NavigableSubMap$SubMapKeyIterator;-><init>(Ljava/util/TreeMap$NavigableSubMap;Ljava/util/TreeMap$TreeMapEntry;Ljava/util/TreeMap$TreeMapEntry;)V
+HPLjava/util/TreeMap$NavigableSubMap$SubMapKeyIterator;->next()Ljava/lang/Object;
+HPLjava/util/TreeMap$NavigableSubMap;->isEmpty()Z
+HPLjava/util/TreeMap$NavigableSubMap;->navigableKeySet()Ljava/util/NavigableSet;
+HPLjava/util/TreeMap$NavigableSubMap;->size()I
+HPLjava/util/TreeMap;-><init>(Ljava/util/Map;)V
+HPLjava/util/TreeMap;->addAllForTreeSet(Ljava/util/SortedSet;Ljava/lang/Object;)V
+HPLjava/util/TreeMap;->firstEntry()Ljava/util/Map$Entry;
+HPLjava/util/TreeMap;->getLastEntry()Ljava/util/TreeMap$TreeMapEntry;
+HPLjava/util/TreeMap;->headMap(Ljava/lang/Object;Z)Ljava/util/NavigableMap;
+HPLjava/util/TreeMap;->lastKey()Ljava/lang/Object;
+HPLjava/util/TreeMap;->pollLastEntry()Ljava/util/Map$Entry;
+HPLjava/util/TreeMap;->putAll(Ljava/util/Map;)V
+HPLjava/util/TreeMap;->tailMap(Ljava/lang/Object;Z)Ljava/util/NavigableMap;
+HPLjava/util/TreeSet;-><init>(Ljava/util/SortedSet;)V
+HPLjava/util/TreeSet;->comparator()Ljava/util/Comparator;
+HPLjava/util/TreeSet;->last()Ljava/lang/Object;
+HPLjava/util/TreeSet;->subSet(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/SortedSet;
+HPLjava/util/TreeSet;->subSet(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/NavigableSet;
+HPLjava/util/TreeSet;->tailSet(Ljava/lang/Object;)Ljava/util/SortedSet;
+HPLjava/util/TreeSet;->tailSet(Ljava/lang/Object;Z)Ljava/util/NavigableSet;
+HPLjava/util/Vector;->insertElementAt(Ljava/lang/Object;I)V
+HPLjava/util/Vector;->setElementAt(Ljava/lang/Object;I)V
+HPLjava/util/WeakHashMap$ValueIterator;-><init>(Ljava/util/WeakHashMap;)V
+HPLjava/util/WeakHashMap$ValueIterator;-><init>(Ljava/util/WeakHashMap;Ljava/util/WeakHashMap$ValueIterator;)V
+HPLjava/util/WeakHashMap$ValueIterator;->next()Ljava/lang/Object;
+HPLjava/util/WeakHashMap$Values;-><init>(Ljava/util/WeakHashMap;)V
+HPLjava/util/WeakHashMap$Values;-><init>(Ljava/util/WeakHashMap;Ljava/util/WeakHashMap$Values;)V
+HPLjava/util/WeakHashMap$Values;->iterator()Ljava/util/Iterator;
+HPLjava/util/WeakHashMap;->values()Ljava/util/Collection;
+HPLjava/util/concurrent/AbstractExecutorService;->submit(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;
+HPLjava/util/concurrent/ArrayBlockingQueue;->itemAt(I)Ljava/lang/Object;
+HPLjava/util/concurrent/ArrayBlockingQueue;->peek()Ljava/lang/Object;
+HPLjava/util/concurrent/ArrayBlockingQueue;->poll()Ljava/lang/Object;
+HPLjava/util/concurrent/CancellationException;-><init>(Ljava/lang/String;)V
+HPLjava/util/concurrent/CompletableFuture$Completion;-><init>()V
+HPLjava/util/concurrent/CompletableFuture$Completion;->isLive()Z
+HPLjava/util/concurrent/CompletableFuture$Completion;->tryFire(I)Ljava/util/concurrent/CompletableFuture;
+HPLjava/util/concurrent/CompletableFuture$Signaller;-><init>(ZJJ)V
+HPLjava/util/concurrent/CompletableFuture$Signaller;->block()Z
+HPLjava/util/concurrent/CompletableFuture$Signaller;->isReleasable()Z
+HPLjava/util/concurrent/CompletableFuture$Signaller;->tryFire(I)Ljava/util/concurrent/CompletableFuture;
+HPLjava/util/concurrent/CompletableFuture;->casStack(Ljava/util/concurrent/CompletableFuture$Completion;Ljava/util/concurrent/CompletableFuture$Completion;)Z
+HPLjava/util/concurrent/CompletableFuture;->lazySetNext(Ljava/util/concurrent/CompletableFuture$Completion;Ljava/util/concurrent/CompletableFuture$Completion;)V
+HPLjava/util/concurrent/CompletableFuture;->timedGet(J)Ljava/lang/Object;
+HPLjava/util/concurrent/CompletableFuture;->tryPushStack(Ljava/util/concurrent/CompletableFuture$Completion;)Z
+HPLjava/util/concurrent/ConcurrentHashMap$BaseIterator;->remove()V
+HPLjava/util/concurrent/ConcurrentHashMap$CollectionView;->toArray()[Ljava/lang/Object;
+HPLjava/util/concurrent/ConcurrentHashMap$CounterCell;-><init>(J)V
+HPLjava/util/concurrent/ConcurrentHashMap$KeySetView;->spliterator()Ljava/util/Spliterator;
+HPLjava/util/concurrent/ConcurrentHashMap$KeySpliterator;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;IIIJ)V
+HPLjava/util/concurrent/ConcurrentHashMap$KeySpliterator;->characteristics()I
+HPLjava/util/concurrent/ConcurrentHashMap$KeySpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
+HPLjava/util/concurrent/ConcurrentHashMap$ReservationNode;-><init>()V
+HPLjava/util/concurrent/ConcurrentHashMap;->computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
+HPLjava/util/concurrent/ConcurrentHashMap;->fullAddCount(JZ)V
+HPLjava/util/concurrent/ConcurrentHashMap;->mappingCount()J
+HPLjava/util/concurrent/ConcurrentLinkedDeque$Node;->casItem(Ljava/lang/Object;Ljava/lang/Object;)Z
+HPLjava/util/concurrent/ConcurrentLinkedDeque$Node;->casPrev(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)Z
+HPLjava/util/concurrent/ConcurrentLinkedDeque$Node;->lazySetNext(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)V
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->add(Ljava/lang/Object;)Z
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->casTail(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)Z
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->isEmpty()Z
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->nextTerminator()Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->offerLast(Ljava/lang/Object;)Z
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->peekFirst()Ljava/lang/Object;
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->pollFirst()Ljava/lang/Object;
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->prevTerminator()Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->removeFirst()Ljava/lang/Object;
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->screenNullResult(Ljava/lang/Object;)Ljava/lang/Object;
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->skipDeletedPredecessors(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)V
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->skipDeletedSuccessors(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)V
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->succ(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->unlink(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)V
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->unlinkLast(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)V
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->updateHead()V
+HPLjava/util/concurrent/ConcurrentLinkedDeque;->updateTail()V
+HPLjava/util/concurrent/ConcurrentSkipListMap;-><init>()V
+HPLjava/util/concurrent/ConcurrentSkipListMap;->clear()V
+HPLjava/util/concurrent/ConcurrentSkipListMap;->containsKey(Ljava/lang/Object;)Z
+HPLjava/util/concurrent/ConcurrentSkipListMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLjava/util/concurrent/ConcurrentSkipListSet;-><init>()V
+HPLjava/util/concurrent/ConcurrentSkipListSet;->add(Ljava/lang/Object;)Z
+HPLjava/util/concurrent/ConcurrentSkipListSet;->contains(Ljava/lang/Object;)Z
+HPLjava/util/concurrent/CopyOnWriteArrayList;->addAllAbsent(Ljava/util/Collection;)I
+HPLjava/util/concurrent/CopyOnWriteArrayList;->removeAll(Ljava/util/Collection;)Z
+HPLjava/util/concurrent/CopyOnWriteArrayList;->toArray()[Ljava/lang/Object;
+HPLjava/util/concurrent/CopyOnWriteArraySet;->addAll(Ljava/util/Collection;)Z
+HPLjava/util/concurrent/CopyOnWriteArraySet;->toArray()[Ljava/lang/Object;
+HPLjava/util/concurrent/ForkJoinPool$ManagedBlocker;->block()Z
+HPLjava/util/concurrent/ForkJoinPool$ManagedBlocker;->isReleasable()Z
+HPLjava/util/concurrent/ForkJoinPool;->managedBlock(Ljava/util/concurrent/ForkJoinPool$ManagedBlocker;)V
+HPLjava/util/concurrent/ForkJoinTask;-><init>()V
+HPLjava/util/concurrent/Future;->get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HPLjava/util/concurrent/LinkedBlockingDeque;->add(Ljava/lang/Object;)Z
+HPLjava/util/concurrent/LinkedBlockingDeque;->addLast(Ljava/lang/Object;)V
+HPLjava/util/concurrent/LinkedBlockingDeque;->clear()V
+HPLjava/util/concurrent/LinkedBlockingDeque;->peek()Ljava/lang/Object;
+HPLjava/util/concurrent/LinkedBlockingDeque;->peekFirst()Ljava/lang/Object;
+HPLjava/util/concurrent/LinkedBlockingDeque;->poll()Ljava/lang/Object;
+HPLjava/util/concurrent/LinkedBlockingDeque;->pollFirst()Ljava/lang/Object;
+HPLjava/util/concurrent/LinkedBlockingDeque;->pop()Ljava/lang/Object;
+HPLjava/util/concurrent/LinkedBlockingDeque;->remove()Ljava/lang/Object;
+HPLjava/util/concurrent/LinkedBlockingDeque;->removeFirst()Ljava/lang/Object;
+HPLjava/util/concurrent/LinkedBlockingDeque;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HPLjava/util/concurrent/LinkedBlockingQueue$Itr;-><init>(Ljava/util/concurrent/LinkedBlockingQueue;)V
+HPLjava/util/concurrent/LinkedBlockingQueue$Itr;->hasNext()Z
+HPLjava/util/concurrent/LinkedBlockingQueue;->iterator()Ljava/util/Iterator;
+HPLjava/util/concurrent/LinkedBlockingQueue;->remainingCapacity()I
+HPLjava/util/concurrent/LinkedBlockingQueue;->signalNotFull()V
+HPLjava/util/concurrent/Phaser;-><init>(I)V
+HPLjava/util/concurrent/Phaser;-><init>(Ljava/util/concurrent/Phaser;I)V
+HPLjava/util/concurrent/Phaser;->arriveAndDeregister()I
+HPLjava/util/concurrent/Phaser;->doArrive(I)I
+HPLjava/util/concurrent/Phaser;->doRegister(I)I
+HPLjava/util/concurrent/Phaser;->onAdvance(II)Z
+HPLjava/util/concurrent/Phaser;->register()I
+HPLjava/util/concurrent/Phaser;->releaseWaiters(I)V
+HPLjava/util/concurrent/PriorityBlockingQueue;->contains(Ljava/lang/Object;)Z
+HPLjava/util/concurrent/PriorityBlockingQueue;->indexOf(Ljava/lang/Object;)I
+HPLjava/util/concurrent/PriorityBlockingQueue;->peek()Ljava/lang/Object;
+HPLjava/util/concurrent/PriorityBlockingQueue;->poll()Ljava/lang/Object;
+HPLjava/util/concurrent/PriorityBlockingQueue;->tryGrow([Ljava/lang/Object;I)V
+HPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->grow()V
+HPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->indexOf(Ljava/lang/Object;)I
+HPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->remove(Ljava/lang/Object;)Z
+HPLjava/util/concurrent/ScheduledThreadPoolExecutor;->scheduleWithFixedDelay(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
+HPLjava/util/concurrent/SynchronousQueue$TransferStack$SNode;->casNext(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;)Z
+HPLjava/util/concurrent/SynchronousQueue;->offer(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z
+HPLjava/util/concurrent/ThreadLocalRandom;->getProbe()I
+HPLjava/util/concurrent/ThreadPoolExecutor;->awaitTermination(JLjava/util/concurrent/TimeUnit;)Z
+HPLjava/util/concurrent/ThreadPoolExecutor;->remove(Ljava/lang/Runnable;)Z
+HPLjava/util/concurrent/TimeUnit$1;->toSeconds(J)J
+HPLjava/util/concurrent/TimeUnit$2;->toMillis(J)J
+HPLjava/util/concurrent/TimeUnit$3;->toHours(J)J
+HPLjava/util/concurrent/TimeUnit$4;->convert(JLjava/util/concurrent/TimeUnit;)J
+HPLjava/util/concurrent/TimeUnit$5;->convert(JLjava/util/concurrent/TimeUnit;)J
+HPLjava/util/concurrent/TimeUnit$5;->toMicros(J)J
+HPLjava/util/concurrent/TimeUnit$6;->toNanos(J)J
+HPLjava/util/concurrent/TimeUnit$7;->toMinutes(J)J
+HPLjava/util/concurrent/TimeUnit$7;->toNanos(J)J
+HPLjava/util/concurrent/TimeoutException;-><init>(Ljava/lang/String;)V
+HPLjava/util/concurrent/atomic/AtomicLong;->decrementAndGet()J
+HPLjava/util/concurrent/atomic/AtomicReference;->lazySet(Ljava/lang/Object;)V
+HPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;->compareAndSetNext(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
+HPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->cancelAcquire(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
+HPLjava/util/concurrent/locks/ReentrantLock$Sync;->getHoldCount()I
+HPLjava/util/concurrent/locks/ReentrantLock;->getHoldCount()I
+HPLjava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;->writerShouldBlock()Z
+HPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->fullTryAcquireShared(Ljava/lang/Thread;)I
+HPLjava/util/function/LongConsumer;->accept(J)V
+HPLjava/util/jar/JarVerifier$VerifierStream;->read()I
+HPLjava/util/jar/JarVerifier;->update(ILsun/security/util/ManifestEntryVerifier;)V
+HPLjava/util/logging/Filter;->isLoggable(Ljava/util/logging/LogRecord;)Z
+HPLjava/util/logging/Logger;->getAnonymousLogger()Ljava/util/logging/Logger;
+HPLjava/util/logging/Logger;->getAnonymousLogger(Ljava/lang/String;)Ljava/util/logging/Logger;
+HPLjava/util/logging/Logger;->logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V
+HPLjava/util/logging/Logger;->logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
+HPLjava/util/logging/Logger;->logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
+HPLjava/util/regex/Matcher$OffsetBasedMatchResult;-><init>(Ljava/lang/String;[I)V
+HPLjava/util/regex/Matcher$OffsetBasedMatchResult;->end(I)I
+HPLjava/util/regex/Matcher$OffsetBasedMatchResult;->group(I)Ljava/lang/String;
+HPLjava/util/regex/Matcher$OffsetBasedMatchResult;->start(I)I
+HPLjava/util/regex/Matcher;->find(I)Z
+HPLjava/util/regex/Matcher;->group()Ljava/lang/String;
+HPLjava/util/regex/Matcher;->hitEnd()Z
+HPLjava/util/regex/Matcher;->region(II)Ljava/util/regex/Matcher;
+HPLjava/util/regex/Matcher;->regionEnd()I
+HPLjava/util/regex/Matcher;->regionStart()I
+HPLjava/util/regex/Matcher;->requireEnd()Z
+HPLjava/util/regex/Matcher;->toMatchResult()Ljava/util/regex/MatchResult;
+HPLjava/util/regex/Matcher;->useAnchoringBounds(Z)Ljava/util/regex/Matcher;
+HPLjava/util/regex/Matcher;->useTransparentBounds(Z)Ljava/util/regex/Matcher;
+HPLjava/util/stream/-$Lambda$Lw2Alu2LEcypd4PXrfG0QIAAKKo;->$m$3(I)Ljava/lang/Object;
+HPLjava/util/stream/-$Lambda$Lw2Alu2LEcypd4PXrfG0QIAAKKo;-><init>(B)V
+HPLjava/util/stream/-$Lambda$Lw2Alu2LEcypd4PXrfG0QIAAKKo;->apply(I)Ljava/lang/Object;
+HPLjava/util/stream/-$Lambda$PVrT5KMXWM352lNCiKPCMdt2xL8;->$m$18()Ljava/lang/Object;
+HPLjava/util/stream/-$Lambda$QgGTJrv63_zzBbeGjswm_UMqEbo$3;->$m$0(Ljava/lang/Object;)I
+HPLjava/util/stream/-$Lambda$QgGTJrv63_zzBbeGjswm_UMqEbo$3;-><init>()V
+HPLjava/util/stream/-$Lambda$QgGTJrv63_zzBbeGjswm_UMqEbo$3;->applyAsInt(Ljava/lang/Object;)I
+HPLjava/util/stream/-$Lambda$RYrQKhHyGc-mMxiERR98xxRAWkA;-><init>(B)V
+HPLjava/util/stream/-$Lambda$Y1nWb7oHyESmWtTUR-RlHqf5IfU;->$m$5(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLjava/util/stream/-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$3;->$m$2(Ljava/lang/Object;)Ljava/lang/Object;
+HPLjava/util/stream/-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$3;-><init>(BLjava/lang/Object;)V
+HPLjava/util/stream/-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$3;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLjava/util/stream/-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$5;->$m$0(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLjava/util/stream/-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$5;-><init>(BLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLjava/util/stream/-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$5;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLjava/util/stream/-$Lambda$s-muF8cTY6kf2DcLR-Ys2NMV7bA;-><init>(BLjava/lang/Object;)V
+HPLjava/util/stream/-$Lambda$zzPjrAVaRLtDBFYnKhJM_a3VmMk;-><init>(B)V
+HPLjava/util/stream/AbstractPipeline;->evaluate(Ljava/util/Spliterator;ZLjava/util/function/IntFunction;)Ljava/util/stream/Node;
+HPLjava/util/stream/AbstractPipeline;->evaluateToArrayNode(Ljava/util/function/IntFunction;)Ljava/util/stream/Node;
+HPLjava/util/stream/AbstractPipeline;->exactOutputSizeIfKnown(Ljava/util/Spliterator;)J
+HPLjava/util/stream/AbstractSpinedBuffer;-><init>()V
+HPLjava/util/stream/AbstractSpinedBuffer;->chunkSize(I)I
+HPLjava/util/stream/AbstractSpinedBuffer;->count()J
+HPLjava/util/stream/Collectors;->-java_util_stream_Collectors-mthref-3()Ljava/util/Set;
+HPLjava/util/stream/Collectors;->-java_util_stream_Collectors-mthref-4(Ljava/util/Set;Ljava/lang/Object;)V
+HPLjava/util/stream/Collectors;->groupingBy(Ljava/util/function/Function;Ljava/util/function/Supplier;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;
+HPLjava/util/stream/Collectors;->lambda$-java_util_stream_Collectors_40369(Ljava/util/function/Function;Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/Map;Ljava/lang/Object;)V
+HPLjava/util/stream/Collectors;->lambda$-java_util_stream_Collectors_40537(Ljava/util/function/Supplier;Ljava/lang/Object;)Ljava/lang/Object;
+HPLjava/util/stream/Collectors;->mapMerger(Ljava/util/function/BinaryOperator;)Ljava/util/function/BinaryOperator;
+HPLjava/util/stream/Collectors;->toSet()Ljava/util/stream/Collector;
+HPLjava/util/stream/DistinctOps$1$2;-><init>(Ljava/util/stream/DistinctOps$1;Ljava/util/stream/Sink;)V
+HPLjava/util/stream/DistinctOps$1$2;->accept(Ljava/lang/Object;)V
+HPLjava/util/stream/DistinctOps$1$2;->begin(J)V
+HPLjava/util/stream/DistinctOps$1$2;->end()V
+HPLjava/util/stream/DistinctOps$1;-><init>(Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;I)V
+HPLjava/util/stream/DistinctOps$1;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
+HPLjava/util/stream/DistinctOps;->makeRef(Ljava/util/stream/AbstractPipeline;)Ljava/util/stream/ReferencePipeline;
+HPLjava/util/stream/ForEachOps$ForEachOp$OfRef;->accept(Ljava/lang/Object;)V
+HPLjava/util/stream/IntPipeline$4$1;-><init>(Ljava/util/stream/IntPipeline$4;Ljava/util/stream/Sink;Ljava/util/function/IntFunction;)V
+HPLjava/util/stream/IntPipeline$4$1;->accept(I)V
+HPLjava/util/stream/IntPipeline$4;-><init>(Ljava/util/stream/IntPipeline;Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;ILjava/util/function/IntFunction;)V
+HPLjava/util/stream/IntPipeline$4;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
+HPLjava/util/stream/IntPipeline$Head;-><init>(Ljava/util/Spliterator;IZ)V
+HPLjava/util/stream/IntPipeline$StatelessOp;-><init>(Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;I)V
+HPLjava/util/stream/IntPipeline$StatelessOp;->opIsStateful()Z
+HPLjava/util/stream/IntPipeline;->-java_util_stream_IntPipeline-mthref-1(I)Ljava/lang/Integer;
+HPLjava/util/stream/IntPipeline;-><init>(Ljava/util/Spliterator;IZ)V
+HPLjava/util/stream/IntPipeline;-><init>(Ljava/util/stream/AbstractPipeline;I)V
+HPLjava/util/stream/IntPipeline;->boxed()Ljava/util/stream/Stream;
+HPLjava/util/stream/IntPipeline;->distinct()Ljava/util/stream/IntStream;
+HPLjava/util/stream/IntPipeline;->lambda$-java_util_stream_IntPipeline_14709(Ljava/lang/Integer;)I
+HPLjava/util/stream/IntPipeline;->makeNodeBuilder(JLjava/util/function/IntFunction;)Ljava/util/stream/Node$Builder;
+HPLjava/util/stream/IntPipeline;->mapToObj(Ljava/util/function/IntFunction;)Ljava/util/stream/Stream;
+HPLjava/util/stream/IntPipeline;->toArray()[I
+HPLjava/util/stream/IntStream;->of([I)Ljava/util/stream/IntStream;
+HPLjava/util/stream/LongPipeline$StatelessOp;-><init>(Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;I)V
+HPLjava/util/stream/LongPipeline$StatelessOp;->opIsStateful()Z
+HPLjava/util/stream/LongPipeline;-><init>(Ljava/util/stream/AbstractPipeline;I)V
+HPLjava/util/stream/LongPipeline;->reduce(JLjava/util/function/LongBinaryOperator;)J
+HPLjava/util/stream/LongPipeline;->sum()J
+HPLjava/util/stream/Node$Builder$OfInt;->build()Ljava/util/stream/Node$OfInt;
+HPLjava/util/stream/Node;->getChildCount()I
+HPLjava/util/stream/Nodes$EmptyNode$OfDouble;-><init>()V
+HPLjava/util/stream/Nodes$EmptyNode$OfInt;-><init>()V
+HPLjava/util/stream/Nodes$EmptyNode$OfLong;-><init>()V
+HPLjava/util/stream/Nodes$EmptyNode$OfRef;-><init>()V
+HPLjava/util/stream/Nodes$EmptyNode$OfRef;-><init>(Ljava/util/stream/Nodes$EmptyNode$OfRef;)V
+HPLjava/util/stream/Nodes$EmptyNode;-><init>()V
+HPLjava/util/stream/Nodes$IntSpinedNodeBuilder;-><init>()V
+HPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->accept(I)V
+HPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->asPrimitiveArray()Ljava/lang/Object;
+HPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->asPrimitiveArray()[I
+HPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->begin(J)V
+HPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->build()Ljava/util/stream/Node$OfInt;
+HPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->build()Ljava/util/stream/Node;
+HPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->copyInto(Ljava/lang/Object;I)V
+HPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->copyInto([II)V
+HPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->end()V
+HPLjava/util/stream/Nodes$IntSpinedNodeBuilder;->newArray(I)Ljava/lang/Object;
+HPLjava/util/stream/Nodes$SpinedNodeBuilder;-><init>()V
+HPLjava/util/stream/Nodes$SpinedNodeBuilder;->accept(Ljava/lang/Object;)V
+HPLjava/util/stream/Nodes$SpinedNodeBuilder;->asArray(Ljava/util/function/IntFunction;)[Ljava/lang/Object;
+HPLjava/util/stream/Nodes$SpinedNodeBuilder;->begin(J)V
+HPLjava/util/stream/Nodes$SpinedNodeBuilder;->build()Ljava/util/stream/Node;
+HPLjava/util/stream/Nodes$SpinedNodeBuilder;->copyInto([Ljava/lang/Object;I)V
+HPLjava/util/stream/Nodes$SpinedNodeBuilder;->end()V
+HPLjava/util/stream/Nodes;->builder()Ljava/util/stream/Node$Builder;
+HPLjava/util/stream/Nodes;->builder(JLjava/util/function/IntFunction;)Ljava/util/stream/Node$Builder;
+HPLjava/util/stream/Nodes;->flatten(Ljava/util/stream/Node;Ljava/util/function/IntFunction;)Ljava/util/stream/Node;
+HPLjava/util/stream/Nodes;->flattenInt(Ljava/util/stream/Node$OfInt;)Ljava/util/stream/Node$OfInt;
+HPLjava/util/stream/Nodes;->intBuilder()Ljava/util/stream/Node$Builder$OfInt;
+HPLjava/util/stream/Nodes;->intBuilder(J)Ljava/util/stream/Node$Builder$OfInt;
+HPLjava/util/stream/ReduceOps$8;-><init>(Ljava/util/stream/StreamShape;JLjava/util/function/LongBinaryOperator;)V
+HPLjava/util/stream/ReduceOps$8;->makeSink()Ljava/util/stream/ReduceOps$8ReducingSink;
+HPLjava/util/stream/ReduceOps$8;->makeSink()Ljava/util/stream/ReduceOps$AccumulatingSink;
+HPLjava/util/stream/ReduceOps$8ReducingSink;-><init>(JLjava/util/function/LongBinaryOperator;)V
+HPLjava/util/stream/ReduceOps$8ReducingSink;->begin(J)V
+HPLjava/util/stream/ReduceOps$8ReducingSink;->get()Ljava/lang/Long;
+HPLjava/util/stream/ReduceOps$8ReducingSink;->get()Ljava/lang/Object;
+HPLjava/util/stream/ReduceOps;->makeLong(JLjava/util/function/LongBinaryOperator;)Ljava/util/stream/TerminalOp;
+HPLjava/util/stream/ReferencePipeline$2$1;->accept(Ljava/lang/Object;)V
+HPLjava/util/stream/ReferencePipeline$4$1;-><init>(Ljava/util/stream/ReferencePipeline$4;Ljava/util/stream/Sink;Ljava/util/function/ToIntFunction;)V
+HPLjava/util/stream/ReferencePipeline$4$1;->accept(Ljava/lang/Object;)V
+HPLjava/util/stream/ReferencePipeline$4;-><init>(Ljava/util/stream/ReferencePipeline;Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;ILjava/util/function/ToIntFunction;)V
+HPLjava/util/stream/ReferencePipeline$4;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
+HPLjava/util/stream/ReferencePipeline$5$1;-><init>(Ljava/util/stream/ReferencePipeline$5;Ljava/util/stream/Sink;Ljava/util/function/ToLongFunction;)V
+HPLjava/util/stream/ReferencePipeline$5;-><init>(Ljava/util/stream/ReferencePipeline;Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;ILjava/util/function/ToLongFunction;)V
+HPLjava/util/stream/ReferencePipeline$5;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
+HPLjava/util/stream/ReferencePipeline;->count()J
+HPLjava/util/stream/ReferencePipeline;->distinct()Ljava/util/stream/Stream;
+HPLjava/util/stream/ReferencePipeline;->makeNodeBuilder(JLjava/util/function/IntFunction;)Ljava/util/stream/Node$Builder;
+HPLjava/util/stream/ReferencePipeline;->mapToInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/IntStream;
+HPLjava/util/stream/ReferencePipeline;->mapToLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/LongStream;
+HPLjava/util/stream/ReferencePipeline;->toArray(Ljava/util/function/IntFunction;)[Ljava/lang/Object;
+HPLjava/util/stream/Sink$ChainedInt;-><init>(Ljava/util/stream/Sink;)V
+HPLjava/util/stream/Sink$ChainedInt;->begin(J)V
+HPLjava/util/stream/Sink$ChainedInt;->end()V
+HPLjava/util/stream/Sink$OfInt;->accept(I)V
+HPLjava/util/stream/Sink$OfLong;->accept(J)V
+HPLjava/util/stream/SpinedBuffer$OfInt;-><init>()V
+HPLjava/util/stream/SpinedBuffer$OfInt;->accept(I)V
+HPLjava/util/stream/SpinedBuffer$OfInt;->arrayLength(Ljava/lang/Object;)I
+HPLjava/util/stream/SpinedBuffer$OfInt;->arrayLength([I)I
+HPLjava/util/stream/SpinedBuffer$OfInt;->newArray(I)[I
+HPLjava/util/stream/SpinedBuffer$OfPrimitive;-><init>()V
+HPLjava/util/stream/SpinedBuffer$OfPrimitive;->arrayForEach(Ljava/lang/Object;IILjava/lang/Object;)V
+HPLjava/util/stream/SpinedBuffer$OfPrimitive;->arrayLength(Ljava/lang/Object;)I
+HPLjava/util/stream/SpinedBuffer$OfPrimitive;->asPrimitiveArray()Ljava/lang/Object;
+HPLjava/util/stream/SpinedBuffer$OfPrimitive;->capacity()J
+HPLjava/util/stream/SpinedBuffer$OfPrimitive;->clear()V
+HPLjava/util/stream/SpinedBuffer$OfPrimitive;->copyInto(Ljava/lang/Object;I)V
+HPLjava/util/stream/SpinedBuffer$OfPrimitive;->count()J
+HPLjava/util/stream/SpinedBuffer$OfPrimitive;->ensureCapacity(J)V
+HPLjava/util/stream/SpinedBuffer$OfPrimitive;->forEach(Ljava/util/function/Consumer;)V
+HPLjava/util/stream/SpinedBuffer$OfPrimitive;->iterator()Ljava/util/Iterator;
+HPLjava/util/stream/SpinedBuffer$OfPrimitive;->newArrayArray(I)[Ljava/lang/Object;
+HPLjava/util/stream/SpinedBuffer$OfPrimitive;->preAccept()V
+HPLjava/util/stream/SpinedBuffer;-><init>()V
+HPLjava/util/stream/SpinedBuffer;->accept(Ljava/lang/Object;)V
+HPLjava/util/stream/SpinedBuffer;->asArray(Ljava/util/function/IntFunction;)[Ljava/lang/Object;
+HPLjava/util/stream/SpinedBuffer;->capacity()J
+HPLjava/util/stream/SpinedBuffer;->clear()V
+HPLjava/util/stream/SpinedBuffer;->copyInto([Ljava/lang/Object;I)V
+HPLjava/util/stream/SpinedBuffer;->count()J
+HPLjava/util/stream/SpinedBuffer;->ensureCapacity(J)V
+HPLjava/util/stream/SpinedBuffer;->increaseCapacity()V
+HPLjava/util/stream/SpinedBuffer;->inflateSpine()V
+HPLjava/util/stream/StreamSupport;->intStream(Ljava/util/Spliterator$OfInt;Z)Ljava/util/stream/IntStream;
+HPLjava/util/stream/TerminalOp;->getOpFlags()I
+HPLjava/util/zip/Adler32;->update(I)V
+HPLjava/util/zip/Adler32;->update([B)V
+HPLjava/util/zip/Deflater;-><init>()V
+HPLjava/util/zip/Deflater;->deflate([B)I
+HPLjava/util/zip/Deflater;->setInput([B)V
+HPLjava/util/zip/Deflater;->setLevel(I)V
+HPLjava/util/zip/DeflaterOutputStream;->flush()V
+HPLjava/util/zip/Inflater;->getTotalOut()I
+HPLjava/util/zip/InflaterInputStream;->available()I
+HPLjava/util/zip/ZipFile$ZipFileInputStream;->read()I
+HPLjava/util/zip/ZipFile;-><init>(Ljava/io/File;)V
+HPLjavax/crypto/Cipher;->doFinal()[B
+HPLjavax/crypto/Cipher;->doFinal([BII)[B
+HPLjavax/crypto/Cipher;->doFinal([BII[BI)I
+HPLjavax/crypto/Cipher;->getAlgorithm()Ljava/lang/String;
+HPLjavax/crypto/Cipher;->getBlockSize()I
+HPLjavax/crypto/Cipher;->getIV()[B
+HPLjavax/crypto/Cipher;->update([B)[B
+HPLjavax/crypto/Cipher;->update([BII[BI)I
+HPLjavax/crypto/Mac;->reset()V
+HPLjavax/crypto/Mac;->update(B)V
+HPLjavax/security/auth/x500/X500Principal;-><init>(Ljava/lang/String;)V
+HPLjavax/security/auth/x500/X500Principal;-><init>(Ljava/lang/String;Ljava/util/Map;)V
+HPLlibcore/icu/DateIntervalFormat;->formatDateRange(JJILjava/lang/String;)Ljava/lang/String;
+HPLlibcore/icu/DateIntervalFormat;->formatDateRange(Landroid/icu/util/ULocale;Landroid/icu/util/TimeZone;JJI)Ljava/lang/String;
+HPLlibcore/icu/DateIntervalFormat;->getFormatter(Ljava/lang/String;Landroid/icu/util/ULocale;Landroid/icu/util/TimeZone;)Landroid/icu/text/DateIntervalFormat;
+HPLlibcore/icu/DateIntervalFormat;->isMidnight(Landroid/icu/util/Calendar;)Z
+HPLlibcore/icu/DateUtilsBridge;->createIcuCalendar(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;J)Landroid/icu/util/Calendar;
+HPLlibcore/icu/DateUtilsBridge;->fallInSameMonth(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z
+HPLlibcore/icu/DateUtilsBridge;->fallInSameYear(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z
+HPLlibcore/icu/DateUtilsBridge;->fallOnDifferentDates(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z
+HPLlibcore/icu/DateUtilsBridge;->icuTimeZone(Ljava/util/TimeZone;)Landroid/icu/util/TimeZone;
+HPLlibcore/icu/DateUtilsBridge;->isThisYear(Landroid/icu/util/Calendar;)Z
+HPLlibcore/icu/DateUtilsBridge;->onTheHour(Landroid/icu/util/Calendar;)Z
+HPLlibcore/icu/DateUtilsBridge;->toSkeleton(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;I)Ljava/lang/String;
+HPLlibcore/icu/ICU;->getDisplayCountry(Ljava/util/Locale;Ljava/util/Locale;)Ljava/lang/String;
+HPLlibcore/icu/ICU;->getDisplayLanguage(Ljava/util/Locale;Ljava/util/Locale;)Ljava/lang/String;
+HPLlibcore/icu/RelativeDateTimeFormatter$FormatterCache;-><init>()V
+HPLlibcore/icu/RelativeDateTimeFormatter;->getFormatter(Landroid/icu/util/ULocale;Landroid/icu/text/RelativeDateTimeFormatter$Style;Landroid/icu/text/DisplayContext;)Landroid/icu/text/RelativeDateTimeFormatter;
+HPLlibcore/icu/RelativeDateTimeFormatter;->getRelativeTimeSpanString(Landroid/icu/util/ULocale;Landroid/icu/util/TimeZone;JJJILandroid/icu/text/DisplayContext;)Ljava/lang/String;
+HPLlibcore/icu/RelativeDateTimeFormatter;->getRelativeTimeSpanString(Ljava/util/Locale;Ljava/util/TimeZone;JJJI)Ljava/lang/String;
+HPLlibcore/icu/RelativeDateTimeFormatter;->getRelativeTimeSpanString(Ljava/util/Locale;Ljava/util/TimeZone;JJJILandroid/icu/text/DisplayContext;)Ljava/lang/String;
+HPLlibcore/io/BlockGuardOs;->accept(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)Ljava/io/FileDescriptor;
+HPLlibcore/io/BlockGuardOs;->access(Ljava/lang/String;I)Z
+HPLlibcore/io/BlockGuardOs;->fchmod(Ljava/io/FileDescriptor;I)V
+HPLlibcore/io/BlockGuardOs;->fchown(Ljava/io/FileDescriptor;II)V
+HPLlibcore/io/BlockGuardOs;->fsync(Ljava/io/FileDescriptor;)V
+HPLlibcore/io/BlockGuardOs;->ftruncate(Ljava/io/FileDescriptor;J)V
+HPLlibcore/io/BlockGuardOs;->getxattr(Ljava/lang/String;Ljava/lang/String;)[B
+HPLlibcore/io/BlockGuardOs;->posix_fallocate(Ljava/io/FileDescriptor;JJ)V
+HPLlibcore/io/BlockGuardOs;->read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
+HPLlibcore/io/BlockGuardOs;->readlink(Ljava/lang/String;)Ljava/lang/String;
+HPLlibcore/io/BlockGuardOs;->rename(Ljava/lang/String;Ljava/lang/String;)V
+HPLlibcore/io/BlockGuardOs;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/SocketAddress;)I
+HPLlibcore/io/BlockGuardOs;->write(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
+HPLlibcore/io/ForwardingOs;->bind(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V
+HPLlibcore/io/ForwardingOs;->gai_strerror(I)Ljava/lang/String;
+HPLlibcore/io/ForwardingOs;->getpeername(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;
+HPLlibcore/io/ForwardingOs;->mlock(JJ)V
+HPLlibcore/io/ForwardingOs;->munlock(JJ)V
+HPLlibcore/io/ForwardingOs;->pipe2(I)[Ljava/io/FileDescriptor;
+HPLlibcore/io/ForwardingOs;->setsockoptByte(Ljava/io/FileDescriptor;III)V
+HPLlibcore/io/ForwardingOs;->setsockoptGroupReq(Ljava/io/FileDescriptor;IILandroid/system/StructGroupReq;)V
+HPLlibcore/io/ForwardingOs;->setsockoptIfreq(Ljava/io/FileDescriptor;IILjava/lang/String;)V
+HPLlibcore/io/ForwardingOs;->setsockoptTimeval(Ljava/io/FileDescriptor;IILandroid/system/StructTimeval;)V
+HPLlibcore/io/ForwardingOs;->strerror(I)Ljava/lang/String;
+HPLlibcore/io/IoBridge;->booleanFromInt(I)Z
+HPLlibcore/io/IoBridge;->getSocketOption(Ljava/io/FileDescriptor;I)Ljava/lang/Object;
+HPLlibcore/io/IoBridge;->getSocketOptionErrno(Ljava/io/FileDescriptor;I)Ljava/lang/Object;
+HPLlibcore/io/Linux;->maybeUpdateBufferPosition(Ljava/nio/ByteBuffer;II)V
+HPLlibcore/io/Linux;->read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
+HPLlibcore/io/Linux;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/SocketAddress;)I
+HPLlibcore/io/Linux;->write(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I
+HPLlibcore/io/Memory;->peekLong(JZ)J
+HPLlibcore/io/Memory;->pokeInt([BIILjava/nio/ByteOrder;)V
+HPLlibcore/io/Memory;->pokeLong(JJZ)V
+HPLlibcore/net/NetworkSecurityPolicy$DefaultNetworkSecurityPolicy;->isCertificateTransparencyVerificationRequired(Ljava/lang/String;)Z
+HPLlibcore/net/NetworkSecurityPolicy$DefaultNetworkSecurityPolicy;->isCleartextTrafficPermitted()Z
+HPLlibcore/net/NetworkSecurityPolicy$DefaultNetworkSecurityPolicy;->isCleartextTrafficPermitted(Ljava/lang/String;)Z
+HPLlibcore/net/NetworkSecurityPolicy;->isCertificateTransparencyVerificationRequired(Ljava/lang/String;)Z
+HPLlibcore/net/NetworkSecurityPolicy;->isCleartextTrafficPermitted()Z
+HPLlibcore/net/NetworkSecurityPolicy;->isCleartextTrafficPermitted(Ljava/lang/String;)Z
+HPLlibcore/reflect/GenericArrayTypeImpl;->equals(Ljava/lang/Object;)Z
+HPLlibcore/reflect/GenericArrayTypeImpl;->getGenericComponentType()Ljava/lang/reflect/Type;
+HPLlibcore/reflect/ParameterizedTypeImpl;->hashCode()I
+HPLlibcore/util/HexEncoding;->decode([CZ)[B
+HPLlibcore/util/HexEncoding;->encode([BII)[C
+HPLlibcore/util/HexEncoding;->toDigit([CI)I
+HPLlibcore/util/ZoneInfo$OffsetInterval;-><init>(IIII)V
+HPLlibcore/util/ZoneInfo$OffsetInterval;->containsWallTime(J)Z
+HPLlibcore/util/ZoneInfo$OffsetInterval;->create(Llibcore/util/ZoneInfo;I)Llibcore/util/ZoneInfo$OffsetInterval;
+HPLlibcore/util/ZoneInfo$OffsetInterval;->getIsDst()I
+HPLlibcore/util/ZoneInfo$OffsetInterval;->getTotalOffsetSeconds()I
+HPLlibcore/util/ZoneInfo$WallTime;->copyFieldsToCalendar()V
+HPLlibcore/util/ZoneInfo$WallTime;->doWallTimeSearch(Llibcore/util/ZoneInfo;IIZ)Ljava/lang/Integer;
+HPLlibcore/util/ZoneInfo$WallTime;->mktime(Llibcore/util/ZoneInfo;)I
+HPLlibcore/util/ZoneInfo;->-get4(Llibcore/util/ZoneInfo;)[B
+HPLlibcore/util/ZoneInfo;->-wrap1(II)I
+HPLlibcore/util/ZoneInfo;->checkedSubtract(II)I
+HPLlibcore/util/ZoneInfo;->equals(Ljava/lang/Object;)Z
+HPLlibcore/util/ZoneInfo;->hashCode()I
+HPLlibcore/util/ZoneInfo;->setRawOffset(I)V
+HPLorg/apache/commons/logging/impl/Jdk14Logger;->info(Ljava/lang/Object;)V
+HPLorg/apache/commons/logging/impl/Jdk14Logger;->isDebugEnabled()Z
+HPLorg/apache/commons/logging/impl/Jdk14Logger;->log(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
+HPLorg/apache/harmony/xml/ExpatAttributes;->getType(I)Ljava/lang/String;
+HPLorg/apache/harmony/xml/ExpatAttributes;->getURI(I)Ljava/lang/String;
+HPLorg/apache/harmony/xml/ExpatAttributes;->getValue(Ljava/lang/String;)Ljava/lang/String;
+HPLorg/apache/harmony/xml/ExpatParser;->endCdata()V
+HPLorg/apache/harmony/xml/ExpatParser;->endDtd()V
+HPLorg/apache/harmony/xml/ExpatParser;->startCdata()V
+HPLorg/apache/harmony/xml/ExpatParser;->startDtd(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/apache/http/FormattedHeader;->getBuffer()Lorg/apache/http/util/CharArrayBuffer;
+HPLorg/apache/http/FormattedHeader;->getValuePos()I
+HPLorg/apache/http/HeaderElement;->getName()Ljava/lang/String;
+HPLorg/apache/http/HeaderElement;->getParameter(I)Lorg/apache/http/NameValuePair;
+HPLorg/apache/http/HeaderElement;->getParameterByName(Ljava/lang/String;)Lorg/apache/http/NameValuePair;
+HPLorg/apache/http/HeaderElement;->getParameterCount()I
+HPLorg/apache/http/HeaderElement;->getParameters()[Lorg/apache/http/NameValuePair;
+HPLorg/apache/http/HeaderElement;->getValue()Ljava/lang/String;
+HPLorg/apache/http/HeaderElementIterator;->hasNext()Z
+HPLorg/apache/http/HeaderElementIterator;->nextElement()Lorg/apache/http/HeaderElement;
+HPLorg/apache/http/HeaderIterator;->hasNext()Z
+HPLorg/apache/http/HeaderIterator;->nextHeader()Lorg/apache/http/Header;
+HPLorg/apache/http/HttpConnection;->close()V
+HPLorg/apache/http/HttpConnection;->getSocketTimeout()I
+HPLorg/apache/http/HttpConnection;->isOpen()Z
+HPLorg/apache/http/HttpConnection;->setSocketTimeout(I)V
+HPLorg/apache/http/HttpConnection;->shutdown()V
+HPLorg/apache/http/HttpConnectionMetrics;->getMetric(Ljava/lang/String;)Ljava/lang/Object;
+HPLorg/apache/http/HttpConnectionMetrics;->getReceivedBytesCount()J
+HPLorg/apache/http/HttpConnectionMetrics;->getRequestCount()J
+HPLorg/apache/http/HttpConnectionMetrics;->getResponseCount()J
+HPLorg/apache/http/HttpConnectionMetrics;->getSentBytesCount()J
+HPLorg/apache/http/HttpConnectionMetrics;->reset()V
+HPLorg/apache/http/HttpEntityEnclosingRequest;->expectContinue()Z
+HPLorg/apache/http/HttpEntityEnclosingRequest;->getEntity()Lorg/apache/http/HttpEntity;
+HPLorg/apache/http/HttpEntityEnclosingRequest;->setEntity(Lorg/apache/http/HttpEntity;)V
+HPLorg/apache/http/HttpHost;-><init>(Ljava/lang/String;ILjava/lang/String;)V
+HPLorg/apache/http/HttpHost;->equals(Ljava/lang/Object;)Z
+HPLorg/apache/http/HttpHost;->getHostName()Ljava/lang/String;
+HPLorg/apache/http/HttpHost;->getPort()I
+HPLorg/apache/http/HttpHost;->getSchemeName()Ljava/lang/String;
+HPLorg/apache/http/HttpHost;->hashCode()I
+HPLorg/apache/http/HttpHost;->toHostString()Ljava/lang/String;
+HPLorg/apache/http/HttpHost;->toURI()Ljava/lang/String;
+HPLorg/apache/http/HttpRequest;->getRequestLine()Lorg/apache/http/RequestLine;
+HPLorg/apache/http/HttpVersion;-><init>(II)V
+HPLorg/apache/http/HttpVersion;->forVersion(II)Lorg/apache/http/ProtocolVersion;
+HPLorg/apache/http/NameValuePair;->getName()Ljava/lang/String;
+HPLorg/apache/http/NameValuePair;->getValue()Ljava/lang/String;
+HPLorg/apache/http/ProtocolVersion;->compareToVersion(Lorg/apache/http/ProtocolVersion;)I
+HPLorg/apache/http/ProtocolVersion;->getMajor()I
+HPLorg/apache/http/ProtocolVersion;->getMinor()I
+HPLorg/apache/http/ProtocolVersion;->getProtocol()Ljava/lang/String;
+HPLorg/apache/http/ProtocolVersion;->isComparable(Lorg/apache/http/ProtocolVersion;)Z
+HPLorg/apache/http/ProtocolVersion;->lessEquals(Lorg/apache/http/ProtocolVersion;)Z
+HPLorg/apache/http/RequestLine;->getMethod()Ljava/lang/String;
+HPLorg/apache/http/RequestLine;->getProtocolVersion()Lorg/apache/http/ProtocolVersion;
+HPLorg/apache/http/RequestLine;->getUri()Ljava/lang/String;
+HPLorg/apache/http/auth/AuthSchemeRegistry;-><init>()V
+HPLorg/apache/http/auth/AuthSchemeRegistry;->register(Ljava/lang/String;Lorg/apache/http/auth/AuthSchemeFactory;)V
+HPLorg/apache/http/auth/AuthState;-><init>()V
+HPLorg/apache/http/auth/AuthState;->getAuthScheme()Lorg/apache/http/auth/AuthScheme;
+HPLorg/apache/http/auth/AuthState;->setAuthScope(Lorg/apache/http/auth/AuthScope;)V
+HPLorg/apache/http/client/AuthenticationHandler;->selectScheme(Ljava/util/Map;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/auth/AuthScheme;
+HPLorg/apache/http/client/CredentialsProvider;->clear()V
+HPLorg/apache/http/client/CredentialsProvider;->getCredentials(Lorg/apache/http/auth/AuthScope;)Lorg/apache/http/auth/Credentials;
+HPLorg/apache/http/client/CredentialsProvider;->setCredentials(Lorg/apache/http/auth/AuthScope;Lorg/apache/http/auth/Credentials;)V
+HPLorg/apache/http/client/HttpRequestRetryHandler;->retryRequest(Ljava/io/IOException;ILorg/apache/http/protocol/HttpContext;)Z
+HPLorg/apache/http/client/RedirectHandler;->getLocationURI(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Ljava/net/URI;
+HPLorg/apache/http/client/RedirectHandler;->isRedirectRequested(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z
+HPLorg/apache/http/client/RequestDirector;->execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;
+HPLorg/apache/http/client/UserTokenHandler;->getUserToken(Lorg/apache/http/protocol/HttpContext;)Ljava/lang/Object;
+HPLorg/apache/http/client/entity/UrlEncodedFormEntity;-><init>(Ljava/util/List;)V
+HPLorg/apache/http/client/methods/AbortableHttpRequest;->abort()V
+HPLorg/apache/http/client/methods/AbortableHttpRequest;->setConnectionRequest(Lorg/apache/http/conn/ClientConnectionRequest;)V
+HPLorg/apache/http/client/methods/AbortableHttpRequest;->setReleaseTrigger(Lorg/apache/http/conn/ConnectionReleaseTrigger;)V
+HPLorg/apache/http/client/methods/HttpEntityEnclosingRequestBase;-><init>()V
+HPLorg/apache/http/client/methods/HttpEntityEnclosingRequestBase;->getEntity()Lorg/apache/http/HttpEntity;
+HPLorg/apache/http/client/methods/HttpEntityEnclosingRequestBase;->setEntity(Lorg/apache/http/HttpEntity;)V
+HPLorg/apache/http/client/methods/HttpGet;-><init>(Ljava/lang/String;)V
+HPLorg/apache/http/client/methods/HttpGet;-><init>(Ljava/net/URI;)V
+HPLorg/apache/http/client/methods/HttpGet;->getMethod()Ljava/lang/String;
+HPLorg/apache/http/client/methods/HttpPost;-><init>(Ljava/lang/String;)V
+HPLorg/apache/http/client/methods/HttpPost;-><init>(Ljava/net/URI;)V
+HPLorg/apache/http/client/methods/HttpPost;->getMethod()Ljava/lang/String;
+HPLorg/apache/http/client/methods/HttpPut;-><init>(Ljava/lang/String;)V
+HPLorg/apache/http/client/methods/HttpPut;->getMethod()Ljava/lang/String;
+HPLorg/apache/http/client/methods/HttpRequestBase;-><init>()V
+HPLorg/apache/http/client/methods/HttpRequestBase;->getMethod()Ljava/lang/String;
+HPLorg/apache/http/client/methods/HttpRequestBase;->getURI()Ljava/net/URI;
+HPLorg/apache/http/client/methods/HttpRequestBase;->setConnectionRequest(Lorg/apache/http/conn/ClientConnectionRequest;)V
+HPLorg/apache/http/client/methods/HttpRequestBase;->setReleaseTrigger(Lorg/apache/http/conn/ConnectionReleaseTrigger;)V
+HPLorg/apache/http/client/methods/HttpRequestBase;->setURI(Ljava/net/URI;)V
+HPLorg/apache/http/client/methods/HttpUriRequest;->abort()V
+HPLorg/apache/http/client/methods/HttpUriRequest;->getMethod()Ljava/lang/String;
+HPLorg/apache/http/client/methods/HttpUriRequest;->getURI()Ljava/net/URI;
+HPLorg/apache/http/client/methods/HttpUriRequest;->isAborted()Z
+HPLorg/apache/http/client/params/HttpClientParams;->getCookiePolicy(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;
+HPLorg/apache/http/client/params/HttpClientParams;->isAuthenticating(Lorg/apache/http/params/HttpParams;)Z
+HPLorg/apache/http/client/params/HttpClientParams;->isRedirecting(Lorg/apache/http/params/HttpParams;)Z
+HPLorg/apache/http/client/protocol/RequestAddCookies;-><init>()V
+HPLorg/apache/http/client/protocol/RequestAddCookies;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/client/protocol/RequestDefaultHeaders;-><init>()V
+HPLorg/apache/http/client/protocol/RequestDefaultHeaders;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/client/protocol/RequestProxyAuthentication;-><init>()V
+HPLorg/apache/http/client/protocol/RequestProxyAuthentication;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/client/protocol/RequestTargetAuthentication;-><init>()V
+HPLorg/apache/http/client/protocol/RequestTargetAuthentication;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/client/protocol/ResponseProcessCookies;-><init>()V
+HPLorg/apache/http/client/protocol/ResponseProcessCookies;->process(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/client/protocol/ResponseProcessCookies;->processCookies(Lorg/apache/http/HeaderIterator;Lorg/apache/http/cookie/CookieSpec;Lorg/apache/http/cookie/CookieOrigin;Lorg/apache/http/client/CookieStore;)V
+HPLorg/apache/http/client/utils/URIUtils;->createURI(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/net/URI;
+HPLorg/apache/http/client/utils/URIUtils;->rewriteURI(Ljava/net/URI;Lorg/apache/http/HttpHost;)Ljava/net/URI;
+HPLorg/apache/http/client/utils/URIUtils;->rewriteURI(Ljava/net/URI;Lorg/apache/http/HttpHost;Z)Ljava/net/URI;
+HPLorg/apache/http/client/utils/URLEncodedUtils;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLorg/apache/http/client/utils/URLEncodedUtils;->format(Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;
+HPLorg/apache/http/conn/BasicManagedEntity;-><init>(Lorg/apache/http/HttpEntity;Lorg/apache/http/conn/ManagedClientConnection;Z)V
+HPLorg/apache/http/conn/BasicManagedEntity;->consumeContent()V
+HPLorg/apache/http/conn/BasicManagedEntity;->eofDetected(Ljava/io/InputStream;)Z
+HPLorg/apache/http/conn/BasicManagedEntity;->getContent()Ljava/io/InputStream;
+HPLorg/apache/http/conn/BasicManagedEntity;->releaseManagedConnection()V
+HPLorg/apache/http/conn/BasicManagedEntity;->streamClosed(Ljava/io/InputStream;)Z
+HPLorg/apache/http/conn/ClientConnectionRequest;->abortRequest()V
+HPLorg/apache/http/conn/ClientConnectionRequest;->getConnection(JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/conn/ManagedClientConnection;
+HPLorg/apache/http/conn/ConnectionKeepAliveStrategy;->getKeepAliveDuration(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)J
+HPLorg/apache/http/conn/EofSensorInputStream;-><init>(Ljava/io/InputStream;Lorg/apache/http/conn/EofSensorWatcher;)V
+HPLorg/apache/http/conn/EofSensorInputStream;->available()I
+HPLorg/apache/http/conn/EofSensorInputStream;->checkClose()V
+HPLorg/apache/http/conn/EofSensorInputStream;->checkEOF(I)V
+HPLorg/apache/http/conn/EofSensorInputStream;->close()V
+HPLorg/apache/http/conn/EofSensorInputStream;->isReadAllowed()Z
+HPLorg/apache/http/conn/EofSensorInputStream;->read()I
+HPLorg/apache/http/conn/EofSensorInputStream;->read([B)I
+HPLorg/apache/http/conn/EofSensorInputStream;->read([BII)I
+HPLorg/apache/http/conn/EofSensorWatcher;->eofDetected(Ljava/io/InputStream;)Z
+HPLorg/apache/http/conn/EofSensorWatcher;->streamAbort(Ljava/io/InputStream;)Z
+HPLorg/apache/http/conn/EofSensorWatcher;->streamClosed(Ljava/io/InputStream;)Z
+HPLorg/apache/http/conn/ManagedClientConnection;->getRoute()Lorg/apache/http/conn/routing/HttpRoute;
+HPLorg/apache/http/conn/ManagedClientConnection;->getSSLSession()Ljavax/net/ssl/SSLSession;
+HPLorg/apache/http/conn/ManagedClientConnection;->getState()Ljava/lang/Object;
+HPLorg/apache/http/conn/ManagedClientConnection;->isMarkedReusable()Z
+HPLorg/apache/http/conn/ManagedClientConnection;->isSecure()Z
+HPLorg/apache/http/conn/ManagedClientConnection;->layerProtocol(Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/conn/ManagedClientConnection;->markReusable()V
+HPLorg/apache/http/conn/ManagedClientConnection;->open(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/conn/ManagedClientConnection;->setIdleDuration(JLjava/util/concurrent/TimeUnit;)V
+HPLorg/apache/http/conn/ManagedClientConnection;->setState(Ljava/lang/Object;)V
+HPLorg/apache/http/conn/ManagedClientConnection;->tunnelProxy(Lorg/apache/http/HttpHost;ZLorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/conn/ManagedClientConnection;->tunnelTarget(ZLorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/conn/ManagedClientConnection;->unmarkReusable()V
+HPLorg/apache/http/conn/OperatedClientConnection;->getSocket()Ljava/net/Socket;
+HPLorg/apache/http/conn/OperatedClientConnection;->getTargetHost()Lorg/apache/http/HttpHost;
+HPLorg/apache/http/conn/OperatedClientConnection;->isSecure()Z
+HPLorg/apache/http/conn/OperatedClientConnection;->openCompleted(ZLorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/conn/OperatedClientConnection;->opening(Ljava/net/Socket;Lorg/apache/http/HttpHost;)V
+HPLorg/apache/http/conn/OperatedClientConnection;->update(Ljava/net/Socket;Lorg/apache/http/HttpHost;ZLorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/conn/params/ConnManagerParams$1;->getMaxForRoute(Lorg/apache/http/conn/routing/HttpRoute;)I
+HPLorg/apache/http/conn/params/ConnManagerParams;->getTimeout(Lorg/apache/http/params/HttpParams;)J
+HPLorg/apache/http/conn/params/ConnManagerParams;->setTimeout(Lorg/apache/http/params/HttpParams;J)V
+HPLorg/apache/http/conn/params/ConnPerRouteBean;->getMaxForRoute(Lorg/apache/http/conn/routing/HttpRoute;)I
+HPLorg/apache/http/conn/params/ConnRouteParams;->getForcedRoute(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/conn/routing/HttpRoute;
+HPLorg/apache/http/conn/params/ConnRouteParams;->getLocalAddress(Lorg/apache/http/params/HttpParams;)Ljava/net/InetAddress;
+HPLorg/apache/http/conn/routing/BasicRouteDirector;-><init>()V
+HPLorg/apache/http/conn/routing/BasicRouteDirector;->directStep(Lorg/apache/http/conn/routing/RouteInfo;Lorg/apache/http/conn/routing/RouteInfo;)I
+HPLorg/apache/http/conn/routing/BasicRouteDirector;->nextStep(Lorg/apache/http/conn/routing/RouteInfo;Lorg/apache/http/conn/routing/RouteInfo;)I
+HPLorg/apache/http/conn/routing/HttpRoute;-><init>(Ljava/net/InetAddress;Lorg/apache/http/HttpHost;[Lorg/apache/http/HttpHost;ZLorg/apache/http/conn/routing/RouteInfo$TunnelType;Lorg/apache/http/conn/routing/RouteInfo$LayerType;)V
+HPLorg/apache/http/conn/routing/HttpRoute;-><init>(Lorg/apache/http/HttpHost;)V
+HPLorg/apache/http/conn/routing/HttpRoute;-><init>(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Z)V
+HPLorg/apache/http/conn/routing/HttpRoute;-><init>(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;[Lorg/apache/http/HttpHost;ZLorg/apache/http/conn/routing/RouteInfo$TunnelType;Lorg/apache/http/conn/routing/RouteInfo$LayerType;)V
+HPLorg/apache/http/conn/routing/HttpRoute;->equals(Ljava/lang/Object;)Z
+HPLorg/apache/http/conn/routing/HttpRoute;->getHopCount()I
+HPLorg/apache/http/conn/routing/HttpRoute;->getLocalAddress()Ljava/net/InetAddress;
+HPLorg/apache/http/conn/routing/HttpRoute;->getProxyHost()Lorg/apache/http/HttpHost;
+HPLorg/apache/http/conn/routing/HttpRoute;->getTargetHost()Lorg/apache/http/HttpHost;
+HPLorg/apache/http/conn/routing/HttpRoute;->hashCode()I
+HPLorg/apache/http/conn/routing/HttpRoute;->isSecure()Z
+HPLorg/apache/http/conn/routing/HttpRoute;->toChain([Lorg/apache/http/HttpHost;)[Lorg/apache/http/HttpHost;
+HPLorg/apache/http/conn/routing/HttpRouteDirector;->nextStep(Lorg/apache/http/conn/routing/RouteInfo;Lorg/apache/http/conn/routing/RouteInfo;)I
+HPLorg/apache/http/conn/routing/HttpRoutePlanner;->determineRoute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/conn/routing/HttpRoute;
+HPLorg/apache/http/conn/routing/RouteInfo$LayerType;-><init>(Ljava/lang/String;I)V
+HPLorg/apache/http/conn/routing/RouteInfo$TunnelType;-><init>(Ljava/lang/String;I)V
+HPLorg/apache/http/conn/routing/RouteTracker;-><init>(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;)V
+HPLorg/apache/http/conn/routing/RouteTracker;-><init>(Lorg/apache/http/conn/routing/HttpRoute;)V
+HPLorg/apache/http/conn/routing/RouteTracker;->connectTarget(Z)V
+HPLorg/apache/http/conn/routing/RouteTracker;->toRoute()Lorg/apache/http/conn/routing/HttpRoute;
+HPLorg/apache/http/conn/scheme/PlainSocketFactory;->connectSocket(Ljava/net/Socket;Ljava/lang/String;ILjava/net/InetAddress;ILorg/apache/http/params/HttpParams;)Ljava/net/Socket;
+HPLorg/apache/http/conn/scheme/PlainSocketFactory;->createSocket()Ljava/net/Socket;
+HPLorg/apache/http/conn/scheme/Scheme;->isLayered()Z
+HPLorg/apache/http/conn/scheme/Scheme;->resolvePort(I)I
+HPLorg/apache/http/conn/scheme/SchemeRegistry;->get(Ljava/lang/String;)Lorg/apache/http/conn/scheme/Scheme;
+HPLorg/apache/http/conn/scheme/SchemeRegistry;->getScheme(Ljava/lang/String;)Lorg/apache/http/conn/scheme/Scheme;
+HPLorg/apache/http/conn/ssl/AbstractVerifier;->acceptableCountryWildcard(Ljava/lang/String;)Z
+HPLorg/apache/http/conn/ssl/AbstractVerifier;->getCNs(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;
+HPLorg/apache/http/conn/ssl/AbstractVerifier;->getDNSSubjectAlts(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;
+HPLorg/apache/http/conn/ssl/AbstractVerifier;->isIPv4Address(Ljava/lang/String;)Z
+HPLorg/apache/http/conn/ssl/AbstractVerifier;->verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)V
+HPLorg/apache/http/conn/ssl/AbstractVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSocket;)V
+HPLorg/apache/http/conn/ssl/AbstractVerifier;->verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Z)V
+HPLorg/apache/http/conn/ssl/AndroidDistinguishedNameParser;-><init>(Ljavax/security/auth/x500/X500Principal;)V
+HPLorg/apache/http/conn/ssl/AndroidDistinguishedNameParser;->escapedAV()Ljava/lang/String;
+HPLorg/apache/http/conn/ssl/AndroidDistinguishedNameParser;->getAllMostSpecificFirst(Ljava/lang/String;)Ljava/util/List;
+HPLorg/apache/http/conn/ssl/AndroidDistinguishedNameParser;->nextAT()Ljava/lang/String;
+HPLorg/apache/http/conn/ssl/BrowserCompatHostnameVerifier;->verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V
+HPLorg/apache/http/conn/ssl/SSLSocketFactory;->createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;
+HPLorg/apache/http/conn/ssl/SSLSocketFactory;->isSecure(Ljava/net/Socket;)Z
+HPLorg/apache/http/cookie/ClientCookie;->containsAttribute(Ljava/lang/String;)Z
+HPLorg/apache/http/cookie/ClientCookie;->getAttribute(Ljava/lang/String;)Ljava/lang/String;
+HPLorg/apache/http/cookie/Cookie;->getComment()Ljava/lang/String;
+HPLorg/apache/http/cookie/Cookie;->getCommentURL()Ljava/lang/String;
+HPLorg/apache/http/cookie/Cookie;->getDomain()Ljava/lang/String;
+HPLorg/apache/http/cookie/Cookie;->getExpiryDate()Ljava/util/Date;
+HPLorg/apache/http/cookie/Cookie;->getName()Ljava/lang/String;
+HPLorg/apache/http/cookie/Cookie;->getPath()Ljava/lang/String;
+HPLorg/apache/http/cookie/Cookie;->getPorts()[I
+HPLorg/apache/http/cookie/Cookie;->getValue()Ljava/lang/String;
+HPLorg/apache/http/cookie/Cookie;->getVersion()I
+HPLorg/apache/http/cookie/Cookie;->isExpired(Ljava/util/Date;)Z
+HPLorg/apache/http/cookie/Cookie;->isPersistent()Z
+HPLorg/apache/http/cookie/Cookie;->isSecure()Z
+HPLorg/apache/http/cookie/CookieOrigin;-><init>(Ljava/lang/String;ILjava/lang/String;Z)V
+HPLorg/apache/http/cookie/CookieOrigin;->getHost()Ljava/lang/String;
+HPLorg/apache/http/cookie/CookieOrigin;->getPath()Ljava/lang/String;
+HPLorg/apache/http/cookie/CookieOrigin;->isSecure()Z
+HPLorg/apache/http/cookie/CookiePathComparator;-><init>()V
+HPLorg/apache/http/cookie/CookieSpecRegistry;-><init>()V
+HPLorg/apache/http/cookie/CookieSpecRegistry;->getCookieSpec(Ljava/lang/String;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/cookie/CookieSpec;
+HPLorg/apache/http/cookie/CookieSpecRegistry;->register(Ljava/lang/String;Lorg/apache/http/cookie/CookieSpecFactory;)V
+HPLorg/apache/http/cookie/SetCookie;->setComment(Ljava/lang/String;)V
+HPLorg/apache/http/cookie/SetCookie;->setDomain(Ljava/lang/String;)V
+HPLorg/apache/http/cookie/SetCookie;->setExpiryDate(Ljava/util/Date;)V
+HPLorg/apache/http/cookie/SetCookie;->setPath(Ljava/lang/String;)V
+HPLorg/apache/http/cookie/SetCookie;->setSecure(Z)V
+HPLorg/apache/http/cookie/SetCookie;->setValue(Ljava/lang/String;)V
+HPLorg/apache/http/cookie/SetCookie;->setVersion(I)V
+HPLorg/apache/http/entity/AbstractHttpEntity;->getContentEncoding()Lorg/apache/http/Header;
+HPLorg/apache/http/entity/AbstractHttpEntity;->getContentType()Lorg/apache/http/Header;
+HPLorg/apache/http/entity/AbstractHttpEntity;->isChunked()Z
+HPLorg/apache/http/entity/AbstractHttpEntity;->setChunked(Z)V
+HPLorg/apache/http/entity/BasicHttpEntity;->isStreaming()Z
+HPLorg/apache/http/entity/ByteArrayEntity;-><init>([B)V
+HPLorg/apache/http/entity/ByteArrayEntity;->getContentLength()J
+HPLorg/apache/http/entity/ByteArrayEntity;->isStreaming()Z
+HPLorg/apache/http/entity/ByteArrayEntity;->writeTo(Ljava/io/OutputStream;)V
+HPLorg/apache/http/entity/HttpEntityWrapper;-><init>(Lorg/apache/http/HttpEntity;)V
+HPLorg/apache/http/entity/HttpEntityWrapper;->getContentEncoding()Lorg/apache/http/Header;
+HPLorg/apache/http/entity/HttpEntityWrapper;->getContentLength()J
+HPLorg/apache/http/entity/InputStreamEntity;-><init>(Ljava/io/InputStream;J)V
+HPLorg/apache/http/entity/InputStreamEntity;->consumeContent()V
+HPLorg/apache/http/entity/InputStreamEntity;->getContent()Ljava/io/InputStream;
+HPLorg/apache/http/entity/InputStreamEntity;->getContentLength()J
+HPLorg/apache/http/entity/StringEntity;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/apache/http/entity/StringEntity;->getContentLength()J
+HPLorg/apache/http/entity/StringEntity;->isStreaming()Z
+HPLorg/apache/http/entity/StringEntity;->writeTo(Ljava/io/OutputStream;)V
+HPLorg/apache/http/impl/AbstractHttpClientConnection;-><init>()V
+HPLorg/apache/http/impl/AbstractHttpClientConnection;->assertOpen()V
+HPLorg/apache/http/impl/AbstractHttpClientConnection;->createEntityDeserializer()Lorg/apache/http/impl/entity/EntityDeserializer;
+HPLorg/apache/http/impl/AbstractHttpClientConnection;->createEntitySerializer()Lorg/apache/http/impl/entity/EntitySerializer;
+HPLorg/apache/http/impl/AbstractHttpClientConnection;->createHttpResponseFactory()Lorg/apache/http/HttpResponseFactory;
+HPLorg/apache/http/impl/AbstractHttpClientConnection;->createRequestWriter(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageWriter;
+HPLorg/apache/http/impl/AbstractHttpClientConnection;->doFlush()V
+HPLorg/apache/http/impl/AbstractHttpClientConnection;->flush()V
+HPLorg/apache/http/impl/AbstractHttpClientConnection;->init(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/AbstractHttpClientConnection;->receiveResponseEntity(Lorg/apache/http/HttpResponse;)V
+HPLorg/apache/http/impl/AbstractHttpClientConnection;->receiveResponseHeader()Lorg/apache/http/HttpResponse;
+HPLorg/apache/http/impl/AbstractHttpClientConnection;->sendRequestEntity(Lorg/apache/http/HttpEntityEnclosingRequest;)V
+HPLorg/apache/http/impl/AbstractHttpClientConnection;->sendRequestHeader(Lorg/apache/http/HttpRequest;)V
+HPLorg/apache/http/impl/DefaultConnectionReuseStrategy;->keepAlive(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z
+HPLorg/apache/http/impl/DefaultHttpResponseFactory;->determineLocale(Lorg/apache/http/protocol/HttpContext;)Ljava/util/Locale;
+HPLorg/apache/http/impl/DefaultHttpResponseFactory;->newHttpResponse(Lorg/apache/http/StatusLine;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;
+HPLorg/apache/http/impl/HttpConnectionMetricsImpl;-><init>(Lorg/apache/http/io/HttpTransportMetrics;Lorg/apache/http/io/HttpTransportMetrics;)V
+HPLorg/apache/http/impl/HttpConnectionMetricsImpl;->incrementRequestCount()V
+HPLorg/apache/http/impl/HttpConnectionMetricsImpl;->incrementResponseCount()V
+HPLorg/apache/http/impl/SocketHttpClientConnection;-><init>()V
+HPLorg/apache/http/impl/SocketHttpClientConnection;->assertNotOpen()V
+HPLorg/apache/http/impl/SocketHttpClientConnection;->assertOpen()V
+HPLorg/apache/http/impl/SocketHttpClientConnection;->bind(Ljava/net/Socket;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/SocketHttpClientConnection;->createSessionInputBuffer(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionInputBuffer;
+HPLorg/apache/http/impl/SocketHttpClientConnection;->createSessionOutputBuffer(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionOutputBuffer;
+HPLorg/apache/http/impl/SocketHttpClientConnection;->getRemotePort()I
+HPLorg/apache/http/impl/SocketHttpClientConnection;->isOpen()Z
+HPLorg/apache/http/impl/SocketHttpClientConnection;->setSocketTimeout(I)V
+HPLorg/apache/http/impl/auth/BasicSchemeFactory;-><init>()V
+HPLorg/apache/http/impl/auth/DigestSchemeFactory;-><init>()V
+HPLorg/apache/http/impl/client/AbstractAuthenticationHandler;-><init>()V
+HPLorg/apache/http/impl/client/AbstractHttpClient;->createClientRequestDirector(Lorg/apache/http/protocol/HttpRequestExecutor;Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/conn/ConnectionKeepAliveStrategy;Lorg/apache/http/conn/routing/HttpRoutePlanner;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/client/HttpRequestRetryHandler;Lorg/apache/http/client/RedirectHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/UserTokenHandler;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/client/RequestDirector;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->determineParams(Lorg/apache/http/HttpRequest;)Lorg/apache/http/params/HttpParams;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->determineTarget(Lorg/apache/http/client/methods/HttpUriRequest;)Lorg/apache/http/HttpHost;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->execute(Lorg/apache/http/client/methods/HttpUriRequest;)Lorg/apache/http/HttpResponse;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getAuthSchemes()Lorg/apache/http/auth/AuthSchemeRegistry;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getConnectionKeepAliveStrategy()Lorg/apache/http/conn/ConnectionKeepAliveStrategy;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getConnectionReuseStrategy()Lorg/apache/http/ConnectionReuseStrategy;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getCookieSpecs()Lorg/apache/http/cookie/CookieSpecRegistry;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getCredentialsProvider()Lorg/apache/http/client/CredentialsProvider;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getHttpProcessor()Lorg/apache/http/protocol/BasicHttpProcessor;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getHttpRequestRetryHandler()Lorg/apache/http/client/HttpRequestRetryHandler;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getParams()Lorg/apache/http/params/HttpParams;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getProxyAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getRedirectHandler()Lorg/apache/http/client/RedirectHandler;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getRequestExecutor()Lorg/apache/http/protocol/HttpRequestExecutor;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getRoutePlanner()Lorg/apache/http/conn/routing/HttpRoutePlanner;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getTargetAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;
+HPLorg/apache/http/impl/client/AbstractHttpClient;->getUserTokenHandler()Lorg/apache/http/client/UserTokenHandler;
+HPLorg/apache/http/impl/client/BasicCookieStore;->addCookie(Lorg/apache/http/cookie/Cookie;)V
+HPLorg/apache/http/impl/client/BasicCookieStore;->clear()V
+HPLorg/apache/http/impl/client/BasicCookieStore;->getCookies()Ljava/util/List;
+HPLorg/apache/http/impl/client/BasicCredentialsProvider;-><init>()V
+HPLorg/apache/http/impl/client/ClientParamsStack;-><init>(Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/client/ClientParamsStack;->getParameter(Ljava/lang/String;)Ljava/lang/Object;
+HPLorg/apache/http/impl/client/DefaultConnectionKeepAliveStrategy;-><init>()V
+HPLorg/apache/http/impl/client/DefaultConnectionKeepAliveStrategy;->getKeepAliveDuration(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)J
+HPLorg/apache/http/impl/client/DefaultHttpClient;->createAuthSchemeRegistry()Lorg/apache/http/auth/AuthSchemeRegistry;
+HPLorg/apache/http/impl/client/DefaultHttpClient;->createConnectionKeepAliveStrategy()Lorg/apache/http/conn/ConnectionKeepAliveStrategy;
+HPLorg/apache/http/impl/client/DefaultHttpClient;->createConnectionReuseStrategy()Lorg/apache/http/ConnectionReuseStrategy;
+HPLorg/apache/http/impl/client/DefaultHttpClient;->createCookieSpecRegistry()Lorg/apache/http/cookie/CookieSpecRegistry;
+HPLorg/apache/http/impl/client/DefaultHttpClient;->createCredentialsProvider()Lorg/apache/http/client/CredentialsProvider;
+HPLorg/apache/http/impl/client/DefaultHttpClient;->createHttpProcessor()Lorg/apache/http/protocol/BasicHttpProcessor;
+HPLorg/apache/http/impl/client/DefaultHttpClient;->createHttpRequestRetryHandler()Lorg/apache/http/client/HttpRequestRetryHandler;
+HPLorg/apache/http/impl/client/DefaultHttpClient;->createHttpRoutePlanner()Lorg/apache/http/conn/routing/HttpRoutePlanner;
+HPLorg/apache/http/impl/client/DefaultHttpClient;->createProxyAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;
+HPLorg/apache/http/impl/client/DefaultHttpClient;->createRedirectHandler()Lorg/apache/http/client/RedirectHandler;
+HPLorg/apache/http/impl/client/DefaultHttpClient;->createRequestExecutor()Lorg/apache/http/protocol/HttpRequestExecutor;
+HPLorg/apache/http/impl/client/DefaultHttpClient;->createTargetAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;
+HPLorg/apache/http/impl/client/DefaultHttpClient;->createUserTokenHandler()Lorg/apache/http/client/UserTokenHandler;
+HPLorg/apache/http/impl/client/DefaultHttpRequestRetryHandler;-><init>()V
+HPLorg/apache/http/impl/client/DefaultHttpRequestRetryHandler;-><init>(IZ)V
+HPLorg/apache/http/impl/client/DefaultProxyAuthenticationHandler;-><init>()V
+HPLorg/apache/http/impl/client/DefaultProxyAuthenticationHandler;->isAuthenticationRequested(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z
+HPLorg/apache/http/impl/client/DefaultRedirectHandler;-><init>()V
+HPLorg/apache/http/impl/client/DefaultRequestDirector;-><init>(Lorg/apache/http/protocol/HttpRequestExecutor;Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/conn/ConnectionKeepAliveStrategy;Lorg/apache/http/conn/routing/HttpRoutePlanner;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/client/HttpRequestRetryHandler;Lorg/apache/http/client/RedirectHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/UserTokenHandler;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/client/DefaultRequestDirector;->determineRoute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/conn/routing/HttpRoute;
+HPLorg/apache/http/impl/client/DefaultRequestDirector;->establishRoute(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/impl/client/DefaultRequestDirector;->execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;
+HPLorg/apache/http/impl/client/DefaultRequestDirector;->handleResponse(Lorg/apache/http/impl/client/RoutedRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/impl/client/RoutedRequest;
+HPLorg/apache/http/impl/client/DefaultRequestDirector;->rewriteRequestURI(Lorg/apache/http/impl/client/RequestWrapper;Lorg/apache/http/conn/routing/HttpRoute;)V
+HPLorg/apache/http/impl/client/DefaultRequestDirector;->wrapRequest(Lorg/apache/http/HttpRequest;)Lorg/apache/http/impl/client/RequestWrapper;
+HPLorg/apache/http/impl/client/DefaultTargetAuthenticationHandler;-><init>()V
+HPLorg/apache/http/impl/client/DefaultTargetAuthenticationHandler;->isAuthenticationRequested(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z
+HPLorg/apache/http/impl/client/DefaultUserTokenHandler;-><init>()V
+HPLorg/apache/http/impl/client/DefaultUserTokenHandler;->getAuthPrincipal(Lorg/apache/http/auth/AuthState;)Ljava/security/Principal;
+HPLorg/apache/http/impl/client/DefaultUserTokenHandler;->getUserToken(Lorg/apache/http/protocol/HttpContext;)Ljava/lang/Object;
+HPLorg/apache/http/impl/client/EntityEnclosingRequestWrapper;-><init>(Lorg/apache/http/HttpEntityEnclosingRequest;)V
+HPLorg/apache/http/impl/client/EntityEnclosingRequestWrapper;->expectContinue()Z
+HPLorg/apache/http/impl/client/EntityEnclosingRequestWrapper;->getEntity()Lorg/apache/http/HttpEntity;
+HPLorg/apache/http/impl/client/RequestWrapper;-><init>(Lorg/apache/http/HttpRequest;)V
+HPLorg/apache/http/impl/client/RequestWrapper;->getExecCount()I
+HPLorg/apache/http/impl/client/RequestWrapper;->getMethod()Ljava/lang/String;
+HPLorg/apache/http/impl/client/RequestWrapper;->getProtocolVersion()Lorg/apache/http/ProtocolVersion;
+HPLorg/apache/http/impl/client/RequestWrapper;->getRequestLine()Lorg/apache/http/RequestLine;
+HPLorg/apache/http/impl/client/RequestWrapper;->getURI()Ljava/net/URI;
+HPLorg/apache/http/impl/client/RequestWrapper;->incrementExecCount()V
+HPLorg/apache/http/impl/client/RequestWrapper;->resetHeaders()V
+HPLorg/apache/http/impl/client/RequestWrapper;->setURI(Ljava/net/URI;)V
+HPLorg/apache/http/impl/client/RoutedRequest;-><init>(Lorg/apache/http/impl/client/RequestWrapper;Lorg/apache/http/conn/routing/HttpRoute;)V
+HPLorg/apache/http/impl/client/RoutedRequest;->getRequest()Lorg/apache/http/impl/client/RequestWrapper;
+HPLorg/apache/http/impl/client/RoutedRequest;->getRoute()Lorg/apache/http/conn/routing/HttpRoute;
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;-><init>(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/conn/OperatedClientConnection;)V
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->assertNotAborted()V
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->assertValid(Lorg/apache/http/conn/OperatedClientConnection;)V
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->detach()V
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->flush()V
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->getManager()Lorg/apache/http/conn/ClientConnectionManager;
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->getRemotePort()I
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->getSSLSession()Ljavax/net/ssl/SSLSession;
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->getWrappedConnection()Lorg/apache/http/conn/OperatedClientConnection;
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->isMarkedReusable()Z
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->isOpen()Z
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->isSecure()Z
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->markReusable()V
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->receiveResponseEntity(Lorg/apache/http/HttpResponse;)V
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->receiveResponseHeader()Lorg/apache/http/HttpResponse;
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->releaseConnection()V
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->sendRequestEntity(Lorg/apache/http/HttpEntityEnclosingRequest;)V
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->sendRequestHeader(Lorg/apache/http/HttpRequest;)V
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->setIdleDuration(JLjava/util/concurrent/TimeUnit;)V
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->setSocketTimeout(I)V
+HPLorg/apache/http/impl/conn/AbstractClientConnAdapter;->unmarkReusable()V
+HPLorg/apache/http/impl/conn/AbstractPoolEntry;-><init>(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/routing/HttpRoute;)V
+HPLorg/apache/http/impl/conn/AbstractPoolEntry;->getState()Ljava/lang/Object;
+HPLorg/apache/http/impl/conn/AbstractPoolEntry;->open(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/conn/AbstractPoolEntry;->setState(Ljava/lang/Object;)V
+HPLorg/apache/http/impl/conn/AbstractPooledConnAdapter;-><init>(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/impl/conn/AbstractPoolEntry;)V
+HPLorg/apache/http/impl/conn/AbstractPooledConnAdapter;->assertAttached()V
+HPLorg/apache/http/impl/conn/AbstractPooledConnAdapter;->detach()V
+HPLorg/apache/http/impl/conn/AbstractPooledConnAdapter;->getRoute()Lorg/apache/http/conn/routing/HttpRoute;
+HPLorg/apache/http/impl/conn/AbstractPooledConnAdapter;->open(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/conn/AbstractPooledConnAdapter;->setState(Ljava/lang/Object;)V
+HPLorg/apache/http/impl/conn/DefaultClientConnection;-><init>()V
+HPLorg/apache/http/impl/conn/DefaultClientConnection;->createResponseParser(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpResponseFactory;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageParser;
+HPLorg/apache/http/impl/conn/DefaultClientConnection;->createSessionInputBuffer(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionInputBuffer;
+HPLorg/apache/http/impl/conn/DefaultClientConnection;->createSessionOutputBuffer(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionOutputBuffer;
+HPLorg/apache/http/impl/conn/DefaultClientConnection;->getSocket()Ljava/net/Socket;
+HPLorg/apache/http/impl/conn/DefaultClientConnection;->isSecure()Z
+HPLorg/apache/http/impl/conn/DefaultClientConnection;->openCompleted(ZLorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/conn/DefaultClientConnection;->opening(Ljava/net/Socket;Lorg/apache/http/HttpHost;)V
+HPLorg/apache/http/impl/conn/DefaultClientConnection;->receiveResponseHeader()Lorg/apache/http/HttpResponse;
+HPLorg/apache/http/impl/conn/DefaultClientConnection;->sendRequestHeader(Lorg/apache/http/HttpRequest;)V
+HPLorg/apache/http/impl/conn/DefaultClientConnectionOperator;->createConnection()Lorg/apache/http/conn/OperatedClientConnection;
+HPLorg/apache/http/impl/conn/DefaultClientConnectionOperator;->openConnection(Lorg/apache/http/conn/OperatedClientConnection;Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/conn/DefaultClientConnectionOperator;->prepareSocket(Ljava/net/Socket;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/conn/DefaultResponseParser;-><init>(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/HttpResponseFactory;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/conn/DefaultResponseParser;->parseHead(Lorg/apache/http/io/SessionInputBuffer;)Lorg/apache/http/HttpMessage;
+HPLorg/apache/http/impl/conn/IdleConnectionHandler$TimeValues;->-get1(Lorg/apache/http/impl/conn/IdleConnectionHandler$TimeValues;)J
+HPLorg/apache/http/impl/conn/IdleConnectionHandler$TimeValues;-><init>(JJLjava/util/concurrent/TimeUnit;)V
+HPLorg/apache/http/impl/conn/IdleConnectionHandler;->add(Lorg/apache/http/HttpConnection;JLjava/util/concurrent/TimeUnit;)V
+HPLorg/apache/http/impl/conn/IdleConnectionHandler;->remove(Lorg/apache/http/HttpConnection;)Z
+HPLorg/apache/http/impl/conn/ProxySelectorRoutePlanner;->-getjava-net-Proxy$TypeSwitchesValues()[I
+HPLorg/apache/http/impl/conn/ProxySelectorRoutePlanner;-><init>(Lorg/apache/http/conn/scheme/SchemeRegistry;Ljava/net/ProxySelector;)V
+HPLorg/apache/http/impl/conn/ProxySelectorRoutePlanner;->chooseProxy(Ljava/util/List;Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Ljava/net/Proxy;
+HPLorg/apache/http/impl/conn/ProxySelectorRoutePlanner;->determineProxy(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpHost;
+HPLorg/apache/http/impl/conn/ProxySelectorRoutePlanner;->determineRoute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/conn/routing/HttpRoute;
+HPLorg/apache/http/impl/conn/tsccm/BasicPoolEntry;-><init>(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/ref/ReferenceQueue;)V
+HPLorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getConnection()Lorg/apache/http/conn/OperatedClientConnection;
+HPLorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getPlannedRoute()Lorg/apache/http/conn/routing/HttpRoute;
+HPLorg/apache/http/impl/conn/tsccm/BasicPoolEntry;->getWeakRef()Lorg/apache/http/impl/conn/tsccm/BasicPoolEntryRef;
+HPLorg/apache/http/impl/conn/tsccm/BasicPoolEntryRef;-><init>(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;Ljava/lang/ref/ReferenceQueue;)V
+HPLorg/apache/http/impl/conn/tsccm/BasicPooledConnAdapter;-><init>(Lorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;Lorg/apache/http/impl/conn/AbstractPoolEntry;)V
+HPLorg/apache/http/impl/conn/tsccm/BasicPooledConnAdapter;->detach()V
+HPLorg/apache/http/impl/conn/tsccm/BasicPooledConnAdapter;->getManager()Lorg/apache/http/conn/ClientConnectionManager;
+HPLorg/apache/http/impl/conn/tsccm/BasicPooledConnAdapter;->getPoolEntry()Lorg/apache/http/impl/conn/AbstractPoolEntry;
+HPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute$1;-><init>(Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;Lorg/apache/http/impl/conn/tsccm/WaitingThreadAborter;Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)V
+HPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute$1;->getPoolEntry(JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;
+HPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->createEntry(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;Lorg/apache/http/conn/ClientConnectionOperator;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;
+HPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->freeEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;ZJLjava/util/concurrent/TimeUnit;)V
+HPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->getEntryBlocking(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;Lorg/apache/http/impl/conn/tsccm/WaitingThreadAborter;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;
+HPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->getFreeEntry(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;
+HPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->getRoutePool(Lorg/apache/http/conn/routing/HttpRoute;Z)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;
+HPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->newRouteSpecificPool(Lorg/apache/http/conn/routing/HttpRoute;)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;
+HPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->notifyWaitingThread(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)V
+HPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->requestPoolEntry(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/PoolEntryRequest;
+HPLorg/apache/http/impl/conn/tsccm/PoolEntryRequest;->abortRequest()V
+HPLorg/apache/http/impl/conn/tsccm/PoolEntryRequest;->getPoolEntry(JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;
+HPLorg/apache/http/impl/conn/tsccm/RouteSpecificPool;-><init>(Lorg/apache/http/conn/routing/HttpRoute;I)V
+HPLorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->allocEntry(Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;
+HPLorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->createdEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V
+HPLorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->freeEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V
+HPLorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->getCapacity()I
+HPLorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->getRoute()Lorg/apache/http/conn/routing/HttpRoute;
+HPLorg/apache/http/impl/conn/tsccm/RouteSpecificPool;->hasThread()Z
+HPLorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager$1;-><init>(Lorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;Lorg/apache/http/impl/conn/tsccm/PoolEntryRequest;Lorg/apache/http/conn/routing/HttpRoute;)V
+HPLorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager$1;->getConnection(JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/conn/ManagedClientConnection;
+HPLorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;->-get0(Lorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;)Lorg/apache/commons/logging/Log;
+HPLorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;->releaseConnection(Lorg/apache/http/conn/ManagedClientConnection;JLjava/util/concurrent/TimeUnit;)V
+HPLorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;->requestConnection(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/conn/ClientConnectionRequest;
+HPLorg/apache/http/impl/conn/tsccm/WaitingThreadAborter;-><init>()V
+HPLorg/apache/http/impl/cookie/AbstractCookieAttributeHandler;-><init>()V
+HPLorg/apache/http/impl/cookie/AbstractCookieAttributeHandler;->match(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)Z
+HPLorg/apache/http/impl/cookie/AbstractCookieAttributeHandler;->validate(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)V
+HPLorg/apache/http/impl/cookie/AbstractCookieSpec;-><init>()V
+HPLorg/apache/http/impl/cookie/AbstractCookieSpec;->findAttribHandler(Ljava/lang/String;)Lorg/apache/http/cookie/CookieAttributeHandler;
+HPLorg/apache/http/impl/cookie/AbstractCookieSpec;->getAttribHandlers()Ljava/util/Collection;
+HPLorg/apache/http/impl/cookie/AbstractCookieSpec;->registerAttribHandler(Ljava/lang/String;Lorg/apache/http/cookie/CookieAttributeHandler;)V
+HPLorg/apache/http/impl/cookie/BasicClientCookie;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/apache/http/impl/cookie/BasicClientCookie;->getDomain()Ljava/lang/String;
+HPLorg/apache/http/impl/cookie/BasicClientCookie;->getName()Ljava/lang/String;
+HPLorg/apache/http/impl/cookie/BasicClientCookie;->getPath()Ljava/lang/String;
+HPLorg/apache/http/impl/cookie/BasicClientCookie;->getValue()Ljava/lang/String;
+HPLorg/apache/http/impl/cookie/BasicClientCookie;->getVersion()I
+HPLorg/apache/http/impl/cookie/BasicClientCookie;->isExpired(Ljava/util/Date;)Z
+HPLorg/apache/http/impl/cookie/BasicClientCookie;->isSecure()Z
+HPLorg/apache/http/impl/cookie/BasicClientCookie;->setAttribute(Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/apache/http/impl/cookie/BasicClientCookie;->setDomain(Ljava/lang/String;)V
+HPLorg/apache/http/impl/cookie/BasicClientCookie;->setExpiryDate(Ljava/util/Date;)V
+HPLorg/apache/http/impl/cookie/BasicClientCookie;->setPath(Ljava/lang/String;)V
+HPLorg/apache/http/impl/cookie/BasicClientCookie;->setSecure(Z)V
+HPLorg/apache/http/impl/cookie/BasicCommentHandler;-><init>()V
+HPLorg/apache/http/impl/cookie/BasicDomainHandler;-><init>()V
+HPLorg/apache/http/impl/cookie/BasicDomainHandler;->match(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)Z
+HPLorg/apache/http/impl/cookie/BasicDomainHandler;->validate(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)V
+HPLorg/apache/http/impl/cookie/BasicExpiresHandler;-><init>([Ljava/lang/String;)V
+HPLorg/apache/http/impl/cookie/BasicExpiresHandler;->parse(Lorg/apache/http/cookie/SetCookie;Ljava/lang/String;)V
+HPLorg/apache/http/impl/cookie/BasicMaxAgeHandler;-><init>()V
+HPLorg/apache/http/impl/cookie/BasicPathHandler;-><init>()V
+HPLorg/apache/http/impl/cookie/BasicPathHandler;->match(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)Z
+HPLorg/apache/http/impl/cookie/BasicPathHandler;->parse(Lorg/apache/http/cookie/SetCookie;Ljava/lang/String;)V
+HPLorg/apache/http/impl/cookie/BasicPathHandler;->validate(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)V
+HPLorg/apache/http/impl/cookie/BasicSecureHandler;-><init>()V
+HPLorg/apache/http/impl/cookie/BasicSecureHandler;->match(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)Z
+HPLorg/apache/http/impl/cookie/BasicSecureHandler;->parse(Lorg/apache/http/cookie/SetCookie;Ljava/lang/String;)V
+HPLorg/apache/http/impl/cookie/BestMatchSpec;-><init>([Ljava/lang/String;Z)V
+HPLorg/apache/http/impl/cookie/BestMatchSpec;->formatCookies(Ljava/util/List;)Ljava/util/List;
+HPLorg/apache/http/impl/cookie/BestMatchSpec;->getCompat()Lorg/apache/http/impl/cookie/BrowserCompatSpec;
+HPLorg/apache/http/impl/cookie/BestMatchSpec;->getNetscape()Lorg/apache/http/impl/cookie/NetscapeDraftSpec;
+HPLorg/apache/http/impl/cookie/BestMatchSpec;->getStrict()Lorg/apache/http/impl/cookie/RFC2965Spec;
+HPLorg/apache/http/impl/cookie/BestMatchSpec;->getVersion()I
+HPLorg/apache/http/impl/cookie/BestMatchSpec;->getVersionHeader()Lorg/apache/http/Header;
+HPLorg/apache/http/impl/cookie/BestMatchSpec;->match(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)Z
+HPLorg/apache/http/impl/cookie/BestMatchSpec;->parse(Lorg/apache/http/Header;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List;
+HPLorg/apache/http/impl/cookie/BestMatchSpec;->validate(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)V
+HPLorg/apache/http/impl/cookie/BestMatchSpecFactory;-><init>()V
+HPLorg/apache/http/impl/cookie/BestMatchSpecFactory;->newInstance(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/cookie/CookieSpec;
+HPLorg/apache/http/impl/cookie/BrowserCompatSpec;-><init>([Ljava/lang/String;)V
+HPLorg/apache/http/impl/cookie/BrowserCompatSpec;->formatCookies(Ljava/util/List;)Ljava/util/List;
+HPLorg/apache/http/impl/cookie/BrowserCompatSpecFactory;-><init>()V
+HPLorg/apache/http/impl/cookie/CookieSpecBase;-><init>()V
+HPLorg/apache/http/impl/cookie/CookieSpecBase;->getDefaultDomain(Lorg/apache/http/cookie/CookieOrigin;)Ljava/lang/String;
+HPLorg/apache/http/impl/cookie/CookieSpecBase;->getDefaultPath(Lorg/apache/http/cookie/CookieOrigin;)Ljava/lang/String;
+HPLorg/apache/http/impl/cookie/CookieSpecBase;->match(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)Z
+HPLorg/apache/http/impl/cookie/CookieSpecBase;->parse([Lorg/apache/http/HeaderElement;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List;
+HPLorg/apache/http/impl/cookie/CookieSpecBase;->validate(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)V
+HPLorg/apache/http/impl/cookie/DateUtils;->parseDate(Ljava/lang/String;[Ljava/lang/String;)Ljava/util/Date;
+HPLorg/apache/http/impl/cookie/NetscapeDomainHandler;-><init>()V
+HPLorg/apache/http/impl/cookie/NetscapeDraftHeaderParser;-><init>()V
+HPLorg/apache/http/impl/cookie/NetscapeDraftHeaderParser;->parseHeader(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/HeaderElement;
+HPLorg/apache/http/impl/cookie/NetscapeDraftSpec;-><init>([Ljava/lang/String;)V
+HPLorg/apache/http/impl/cookie/NetscapeDraftSpec;->parse(Lorg/apache/http/Header;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List;
+HPLorg/apache/http/impl/cookie/NetscapeDraftSpecFactory;-><init>()V
+HPLorg/apache/http/impl/cookie/RFC2109DomainHandler;-><init>()V
+HPLorg/apache/http/impl/cookie/RFC2109Spec;-><init>([Ljava/lang/String;Z)V
+HPLorg/apache/http/impl/cookie/RFC2109SpecFactory;-><init>()V
+HPLorg/apache/http/impl/cookie/RFC2109VersionHandler;-><init>()V
+HPLorg/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler;-><init>()V
+HPLorg/apache/http/impl/cookie/RFC2965DiscardAttributeHandler;-><init>()V
+HPLorg/apache/http/impl/cookie/RFC2965DomainAttributeHandler;-><init>()V
+HPLorg/apache/http/impl/cookie/RFC2965PortAttributeHandler;-><init>()V
+HPLorg/apache/http/impl/cookie/RFC2965Spec;-><init>([Ljava/lang/String;Z)V
+HPLorg/apache/http/impl/cookie/RFC2965Spec;->getVersion()I
+HPLorg/apache/http/impl/cookie/RFC2965Spec;->getVersionHeader()Lorg/apache/http/Header;
+HPLorg/apache/http/impl/cookie/RFC2965SpecFactory;-><init>()V
+HPLorg/apache/http/impl/cookie/RFC2965VersionAttributeHandler;-><init>()V
+HPLorg/apache/http/impl/entity/EntityDeserializer;-><init>(Lorg/apache/http/entity/ContentLengthStrategy;)V
+HPLorg/apache/http/impl/entity/EntityDeserializer;->deserialize(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpMessage;)Lorg/apache/http/HttpEntity;
+HPLorg/apache/http/impl/entity/EntityDeserializer;->doDeserialize(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpMessage;)Lorg/apache/http/entity/BasicHttpEntity;
+HPLorg/apache/http/impl/entity/EntitySerializer;-><init>(Lorg/apache/http/entity/ContentLengthStrategy;)V
+HPLorg/apache/http/impl/entity/EntitySerializer;->doSerialize(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/HttpMessage;)Ljava/io/OutputStream;
+HPLorg/apache/http/impl/entity/EntitySerializer;->serialize(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/HttpMessage;Lorg/apache/http/HttpEntity;)V
+HPLorg/apache/http/impl/entity/LaxContentLengthStrategy;-><init>()V
+HPLorg/apache/http/impl/entity/LaxContentLengthStrategy;->determineLength(Lorg/apache/http/HttpMessage;)J
+HPLorg/apache/http/impl/entity/StrictContentLengthStrategy;-><init>()V
+HPLorg/apache/http/impl/entity/StrictContentLengthStrategy;->determineLength(Lorg/apache/http/HttpMessage;)J
+HPLorg/apache/http/impl/io/AbstractMessageParser;-><init>(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/io/AbstractMessageParser;->parse()Lorg/apache/http/HttpMessage;
+HPLorg/apache/http/impl/io/AbstractMessageParser;->parseHead(Lorg/apache/http/io/SessionInputBuffer;)Lorg/apache/http/HttpMessage;
+HPLorg/apache/http/impl/io/AbstractMessageParser;->parseHeaders(Lorg/apache/http/io/SessionInputBuffer;IILorg/apache/http/message/LineParser;)[Lorg/apache/http/Header;
+HPLorg/apache/http/impl/io/AbstractMessageWriter;-><init>(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/message/LineFormatter;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/io/AbstractMessageWriter;->write(Lorg/apache/http/HttpMessage;)V
+HPLorg/apache/http/impl/io/AbstractMessageWriter;->writeHeadLine(Lorg/apache/http/HttpMessage;)V
+HPLorg/apache/http/impl/io/AbstractSessionInputBuffer;-><init>()V
+HPLorg/apache/http/impl/io/AbstractSessionInputBuffer;->fillBuffer()I
+HPLorg/apache/http/impl/io/AbstractSessionInputBuffer;->getMetrics()Lorg/apache/http/io/HttpTransportMetrics;
+HPLorg/apache/http/impl/io/AbstractSessionInputBuffer;->hasBufferedData()Z
+HPLorg/apache/http/impl/io/AbstractSessionInputBuffer;->init(Ljava/io/InputStream;ILorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/io/AbstractSessionInputBuffer;->lineFromReadBuffer(Lorg/apache/http/util/CharArrayBuffer;I)I
+HPLorg/apache/http/impl/io/AbstractSessionInputBuffer;->locateLF()I
+HPLorg/apache/http/impl/io/AbstractSessionInputBuffer;->read()I
+HPLorg/apache/http/impl/io/AbstractSessionInputBuffer;->read([BII)I
+HPLorg/apache/http/impl/io/AbstractSessionInputBuffer;->readLine(Lorg/apache/http/util/CharArrayBuffer;)I
+HPLorg/apache/http/impl/io/AbstractSessionOutputBuffer;-><init>()V
+HPLorg/apache/http/impl/io/AbstractSessionOutputBuffer;->flush()V
+HPLorg/apache/http/impl/io/AbstractSessionOutputBuffer;->flushBuffer()V
+HPLorg/apache/http/impl/io/AbstractSessionOutputBuffer;->getMetrics()Lorg/apache/http/io/HttpTransportMetrics;
+HPLorg/apache/http/impl/io/AbstractSessionOutputBuffer;->init(Ljava/io/OutputStream;ILorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/io/AbstractSessionOutputBuffer;->write([B)V
+HPLorg/apache/http/impl/io/AbstractSessionOutputBuffer;->write([BII)V
+HPLorg/apache/http/impl/io/AbstractSessionOutputBuffer;->writeLine(Lorg/apache/http/util/CharArrayBuffer;)V
+HPLorg/apache/http/impl/io/ChunkedInputStream;-><init>(Lorg/apache/http/io/SessionInputBuffer;)V
+HPLorg/apache/http/impl/io/ChunkedInputStream;->close()V
+HPLorg/apache/http/impl/io/ChunkedInputStream;->exhaustInputStream(Ljava/io/InputStream;)V
+HPLorg/apache/http/impl/io/ChunkedInputStream;->getChunkSize()I
+HPLorg/apache/http/impl/io/ChunkedInputStream;->nextChunk()V
+HPLorg/apache/http/impl/io/ChunkedInputStream;->parseTrailerHeaders()V
+HPLorg/apache/http/impl/io/ChunkedInputStream;->read()I
+HPLorg/apache/http/impl/io/ChunkedInputStream;->read([B)I
+HPLorg/apache/http/impl/io/ChunkedInputStream;->read([BII)I
+HPLorg/apache/http/impl/io/ContentLengthInputStream;-><init>(Lorg/apache/http/io/SessionInputBuffer;J)V
+HPLorg/apache/http/impl/io/ContentLengthInputStream;->close()V
+HPLorg/apache/http/impl/io/ContentLengthInputStream;->read([B)I
+HPLorg/apache/http/impl/io/ContentLengthInputStream;->read([BII)I
+HPLorg/apache/http/impl/io/ContentLengthOutputStream;-><init>(Lorg/apache/http/io/SessionOutputBuffer;J)V
+HPLorg/apache/http/impl/io/ContentLengthOutputStream;->close()V
+HPLorg/apache/http/impl/io/ContentLengthOutputStream;->flush()V
+HPLorg/apache/http/impl/io/ContentLengthOutputStream;->write([B)V
+HPLorg/apache/http/impl/io/ContentLengthOutputStream;->write([BII)V
+HPLorg/apache/http/impl/io/HttpRequestWriter;-><init>(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/message/LineFormatter;Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/io/HttpRequestWriter;->writeHeadLine(Lorg/apache/http/HttpMessage;)V
+HPLorg/apache/http/impl/io/HttpTransportMetricsImpl;-><init>()V
+HPLorg/apache/http/impl/io/HttpTransportMetricsImpl;->incrementBytesTransferred(J)V
+HPLorg/apache/http/impl/io/SocketInputBuffer;-><init>(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/impl/io/SocketOutputBuffer;-><init>(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/io/HttpMessageParser;->parse()Lorg/apache/http/HttpMessage;
+HPLorg/apache/http/io/HttpMessageWriter;->write(Lorg/apache/http/HttpMessage;)V
+HPLorg/apache/http/io/HttpTransportMetrics;->getBytesTransferred()J
+HPLorg/apache/http/io/HttpTransportMetrics;->reset()V
+HPLorg/apache/http/io/SessionInputBuffer;->getMetrics()Lorg/apache/http/io/HttpTransportMetrics;
+HPLorg/apache/http/io/SessionInputBuffer;->isDataAvailable(I)Z
+HPLorg/apache/http/io/SessionInputBuffer;->read()I
+HPLorg/apache/http/io/SessionInputBuffer;->read([B)I
+HPLorg/apache/http/io/SessionInputBuffer;->read([BII)I
+HPLorg/apache/http/io/SessionInputBuffer;->readLine()Ljava/lang/String;
+HPLorg/apache/http/io/SessionInputBuffer;->readLine(Lorg/apache/http/util/CharArrayBuffer;)I
+HPLorg/apache/http/io/SessionOutputBuffer;->flush()V
+HPLorg/apache/http/io/SessionOutputBuffer;->getMetrics()Lorg/apache/http/io/HttpTransportMetrics;
+HPLorg/apache/http/io/SessionOutputBuffer;->write(I)V
+HPLorg/apache/http/io/SessionOutputBuffer;->write([B)V
+HPLorg/apache/http/io/SessionOutputBuffer;->write([BII)V
+HPLorg/apache/http/io/SessionOutputBuffer;->writeLine(Ljava/lang/String;)V
+HPLorg/apache/http/io/SessionOutputBuffer;->writeLine(Lorg/apache/http/util/CharArrayBuffer;)V
+HPLorg/apache/http/message/AbstractHttpMessage;->addHeader(Lorg/apache/http/Header;)V
+HPLorg/apache/http/message/AbstractHttpMessage;->containsHeader(Ljava/lang/String;)Z
+HPLorg/apache/http/message/AbstractHttpMessage;->getFirstHeader(Ljava/lang/String;)Lorg/apache/http/Header;
+HPLorg/apache/http/message/AbstractHttpMessage;->getHeaders(Ljava/lang/String;)[Lorg/apache/http/Header;
+HPLorg/apache/http/message/AbstractHttpMessage;->getLastHeader(Ljava/lang/String;)Lorg/apache/http/Header;
+HPLorg/apache/http/message/AbstractHttpMessage;->getParams()Lorg/apache/http/params/HttpParams;
+HPLorg/apache/http/message/AbstractHttpMessage;->headerIterator()Lorg/apache/http/HeaderIterator;
+HPLorg/apache/http/message/AbstractHttpMessage;->headerIterator(Ljava/lang/String;)Lorg/apache/http/HeaderIterator;
+HPLorg/apache/http/message/AbstractHttpMessage;->setHeader(Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/apache/http/message/AbstractHttpMessage;->setHeaders([Lorg/apache/http/Header;)V
+HPLorg/apache/http/message/AbstractHttpMessage;->setParams(Lorg/apache/http/params/HttpParams;)V
+HPLorg/apache/http/message/BasicHeader;->getElements()[Lorg/apache/http/HeaderElement;
+HPLorg/apache/http/message/BasicHeaderElement;-><init>(Ljava/lang/String;Ljava/lang/String;[Lorg/apache/http/NameValuePair;)V
+HPLorg/apache/http/message/BasicHeaderElement;->getName()Ljava/lang/String;
+HPLorg/apache/http/message/BasicHeaderElement;->getParameterByName(Ljava/lang/String;)Lorg/apache/http/NameValuePair;
+HPLorg/apache/http/message/BasicHeaderElement;->getParameters()[Lorg/apache/http/NameValuePair;
+HPLorg/apache/http/message/BasicHeaderElement;->getValue()Ljava/lang/String;
+HPLorg/apache/http/message/BasicHeaderElementIterator;-><init>(Lorg/apache/http/HeaderIterator;)V
+HPLorg/apache/http/message/BasicHeaderElementIterator;-><init>(Lorg/apache/http/HeaderIterator;Lorg/apache/http/message/HeaderValueParser;)V
+HPLorg/apache/http/message/BasicHeaderElementIterator;->hasNext()Z
+HPLorg/apache/http/message/BasicHeaderElementIterator;->parseNextElement()V
+HPLorg/apache/http/message/BasicHeaderValueParser;-><init>()V
+HPLorg/apache/http/message/BasicHeaderValueParser;->createHeaderElement(Ljava/lang/String;Ljava/lang/String;[Lorg/apache/http/NameValuePair;)Lorg/apache/http/HeaderElement;
+HPLorg/apache/http/message/BasicHeaderValueParser;->createNameValuePair(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/http/NameValuePair;
+HPLorg/apache/http/message/BasicHeaderValueParser;->isOneOf(C[C)Z
+HPLorg/apache/http/message/BasicHeaderValueParser;->parseElements(Ljava/lang/String;Lorg/apache/http/message/HeaderValueParser;)[Lorg/apache/http/HeaderElement;
+HPLorg/apache/http/message/BasicHeaderValueParser;->parseElements(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)[Lorg/apache/http/HeaderElement;
+HPLorg/apache/http/message/BasicHeaderValueParser;->parseHeaderElement(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/HeaderElement;
+HPLorg/apache/http/message/BasicHeaderValueParser;->parseNameValuePair(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/NameValuePair;
+HPLorg/apache/http/message/BasicHeaderValueParser;->parseNameValuePair(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;[C)Lorg/apache/http/NameValuePair;
+HPLorg/apache/http/message/BasicHeaderValueParser;->parseParameters(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)[Lorg/apache/http/NameValuePair;
+HPLorg/apache/http/message/BasicHttpResponse;->setStatusLine(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)V
+HPLorg/apache/http/message/BasicLineFormatter;-><init>()V
+HPLorg/apache/http/message/BasicLineFormatter;->appendProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/ProtocolVersion;)Lorg/apache/http/util/CharArrayBuffer;
+HPLorg/apache/http/message/BasicLineFormatter;->doFormatHeader(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/Header;)V
+HPLorg/apache/http/message/BasicLineFormatter;->doFormatRequestLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/RequestLine;)V
+HPLorg/apache/http/message/BasicLineFormatter;->estimateProtocolVersionLen(Lorg/apache/http/ProtocolVersion;)I
+HPLorg/apache/http/message/BasicLineFormatter;->formatHeader(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/Header;)Lorg/apache/http/util/CharArrayBuffer;
+HPLorg/apache/http/message/BasicLineFormatter;->formatRequestLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/RequestLine;)Lorg/apache/http/util/CharArrayBuffer;
+HPLorg/apache/http/message/BasicLineFormatter;->initBuffer(Lorg/apache/http/util/CharArrayBuffer;)Lorg/apache/http/util/CharArrayBuffer;
+HPLorg/apache/http/message/BasicLineParser;-><init>()V
+HPLorg/apache/http/message/BasicLineParser;-><init>(Lorg/apache/http/ProtocolVersion;)V
+HPLorg/apache/http/message/BasicLineParser;->createProtocolVersion(II)Lorg/apache/http/ProtocolVersion;
+HPLorg/apache/http/message/BasicLineParser;->createStatusLine(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)Lorg/apache/http/StatusLine;
+HPLorg/apache/http/message/BasicLineParser;->hasProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Z
+HPLorg/apache/http/message/BasicLineParser;->parseHeader(Lorg/apache/http/util/CharArrayBuffer;)Lorg/apache/http/Header;
+HPLorg/apache/http/message/BasicLineParser;->parseProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/ProtocolVersion;
+HPLorg/apache/http/message/BasicLineParser;->parseStatusLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/StatusLine;
+HPLorg/apache/http/message/BasicLineParser;->skipWhitespace(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)V
+HPLorg/apache/http/message/BasicListHeaderIterator;-><init>(Ljava/util/List;Ljava/lang/String;)V
+HPLorg/apache/http/message/BasicListHeaderIterator;->filterHeader(I)Z
+HPLorg/apache/http/message/BasicListHeaderIterator;->findNext(I)I
+HPLorg/apache/http/message/BasicListHeaderIterator;->hasNext()Z
+HPLorg/apache/http/message/BasicListHeaderIterator;->next()Ljava/lang/Object;
+HPLorg/apache/http/message/BasicListHeaderIterator;->nextHeader()Lorg/apache/http/Header;
+HPLorg/apache/http/message/BasicNameValuePair;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/apache/http/message/BasicNameValuePair;->getName()Ljava/lang/String;
+HPLorg/apache/http/message/BasicNameValuePair;->getValue()Ljava/lang/String;
+HPLorg/apache/http/message/BasicRequestLine;-><init>(Ljava/lang/String;Ljava/lang/String;Lorg/apache/http/ProtocolVersion;)V
+HPLorg/apache/http/message/BasicRequestLine;->getMethod()Ljava/lang/String;
+HPLorg/apache/http/message/BasicRequestLine;->getProtocolVersion()Lorg/apache/http/ProtocolVersion;
+HPLorg/apache/http/message/BasicRequestLine;->getUri()Ljava/lang/String;
+HPLorg/apache/http/message/BasicStatusLine;->getProtocolVersion()Lorg/apache/http/ProtocolVersion;
+HPLorg/apache/http/message/BufferedHeader;-><init>(Lorg/apache/http/util/CharArrayBuffer;)V
+HPLorg/apache/http/message/BufferedHeader;->getBuffer()Lorg/apache/http/util/CharArrayBuffer;
+HPLorg/apache/http/message/BufferedHeader;->getElements()[Lorg/apache/http/HeaderElement;
+HPLorg/apache/http/message/BufferedHeader;->getName()Ljava/lang/String;
+HPLorg/apache/http/message/BufferedHeader;->getValue()Ljava/lang/String;
+HPLorg/apache/http/message/BufferedHeader;->getValuePos()I
+HPLorg/apache/http/message/HeaderGroup;->clear()V
+HPLorg/apache/http/message/HeaderGroup;->containsHeader(Ljava/lang/String;)Z
+HPLorg/apache/http/message/HeaderGroup;->getFirstHeader(Ljava/lang/String;)Lorg/apache/http/Header;
+HPLorg/apache/http/message/HeaderGroup;->getHeaders(Ljava/lang/String;)[Lorg/apache/http/Header;
+HPLorg/apache/http/message/HeaderGroup;->getLastHeader(Ljava/lang/String;)Lorg/apache/http/Header;
+HPLorg/apache/http/message/HeaderGroup;->iterator()Lorg/apache/http/HeaderIterator;
+HPLorg/apache/http/message/HeaderGroup;->iterator(Ljava/lang/String;)Lorg/apache/http/HeaderIterator;
+HPLorg/apache/http/message/HeaderGroup;->setHeaders([Lorg/apache/http/Header;)V
+HPLorg/apache/http/message/HeaderGroup;->updateHeader(Lorg/apache/http/Header;)V
+HPLorg/apache/http/message/HeaderValueParser;->parseElements(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)[Lorg/apache/http/HeaderElement;
+HPLorg/apache/http/message/HeaderValueParser;->parseHeaderElement(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/HeaderElement;
+HPLorg/apache/http/message/HeaderValueParser;->parseNameValuePair(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/NameValuePair;
+HPLorg/apache/http/message/HeaderValueParser;->parseParameters(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)[Lorg/apache/http/NameValuePair;
+HPLorg/apache/http/message/LineFormatter;->appendProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/ProtocolVersion;)Lorg/apache/http/util/CharArrayBuffer;
+HPLorg/apache/http/message/LineFormatter;->formatHeader(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/Header;)Lorg/apache/http/util/CharArrayBuffer;
+HPLorg/apache/http/message/LineFormatter;->formatRequestLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/RequestLine;)Lorg/apache/http/util/CharArrayBuffer;
+HPLorg/apache/http/message/LineFormatter;->formatStatusLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/StatusLine;)Lorg/apache/http/util/CharArrayBuffer;
+HPLorg/apache/http/message/LineParser;->hasProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Z
+HPLorg/apache/http/message/LineParser;->parseHeader(Lorg/apache/http/util/CharArrayBuffer;)Lorg/apache/http/Header;
+HPLorg/apache/http/message/LineParser;->parseProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/ProtocolVersion;
+HPLorg/apache/http/message/LineParser;->parseRequestLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/RequestLine;
+HPLorg/apache/http/message/LineParser;->parseStatusLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/StatusLine;
+HPLorg/apache/http/message/ParserCursor;-><init>(II)V
+HPLorg/apache/http/message/ParserCursor;->atEnd()Z
+HPLorg/apache/http/message/ParserCursor;->getPos()I
+HPLorg/apache/http/message/ParserCursor;->getUpperBound()I
+HPLorg/apache/http/message/ParserCursor;->updatePos(I)V
+HPLorg/apache/http/params/AbstractHttpParams;->getBooleanParameter(Ljava/lang/String;Z)Z
+HPLorg/apache/http/params/AbstractHttpParams;->getLongParameter(Ljava/lang/String;J)J
+HPLorg/apache/http/params/AbstractHttpParams;->isParameterTrue(Ljava/lang/String;)Z
+HPLorg/apache/http/params/AbstractHttpParams;->setLongParameter(Ljava/lang/String;J)Lorg/apache/http/params/HttpParams;
+HPLorg/apache/http/params/HttpConnectionParams;->getConnectionTimeout(Lorg/apache/http/params/HttpParams;)I
+HPLorg/apache/http/params/HttpConnectionParams;->getLinger(Lorg/apache/http/params/HttpParams;)I
+HPLorg/apache/http/params/HttpConnectionParams;->getSoTimeout(Lorg/apache/http/params/HttpParams;)I
+HPLorg/apache/http/params/HttpConnectionParams;->getSocketBufferSize(Lorg/apache/http/params/HttpParams;)I
+HPLorg/apache/http/params/HttpConnectionParams;->getTcpNoDelay(Lorg/apache/http/params/HttpParams;)Z
+HPLorg/apache/http/params/HttpConnectionParams;->isStaleCheckingEnabled(Lorg/apache/http/params/HttpParams;)Z
+HPLorg/apache/http/params/HttpProtocolParams;->getHttpElementCharset(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;
+HPLorg/apache/http/params/HttpProtocolParams;->getUserAgent(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;
+HPLorg/apache/http/params/HttpProtocolParams;->getVersion(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/ProtocolVersion;
+HPLorg/apache/http/params/HttpProtocolParams;->useExpectContinue(Lorg/apache/http/params/HttpParams;)Z
+HPLorg/apache/http/protocol/BasicHttpContext;-><init>()V
+HPLorg/apache/http/protocol/BasicHttpContext;-><init>(Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/protocol/BasicHttpContext;->getAttribute(Ljava/lang/String;)Ljava/lang/Object;
+HPLorg/apache/http/protocol/BasicHttpContext;->setAttribute(Ljava/lang/String;Ljava/lang/Object;)V
+HPLorg/apache/http/protocol/BasicHttpProcessor;->copy()Lorg/apache/http/protocol/BasicHttpProcessor;
+HPLorg/apache/http/protocol/BasicHttpProcessor;->copyInterceptors(Lorg/apache/http/protocol/BasicHttpProcessor;)V
+HPLorg/apache/http/protocol/BasicHttpProcessor;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/protocol/BasicHttpProcessor;->process(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/protocol/DefaultedHttpContext;-><init>(Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/protocol/DefaultedHttpContext;->getAttribute(Ljava/lang/String;)Ljava/lang/Object;
+HPLorg/apache/http/protocol/DefaultedHttpContext;->setAttribute(Ljava/lang/String;Ljava/lang/Object;)V
+HPLorg/apache/http/protocol/HTTP;->isWhitespace(C)Z
+HPLorg/apache/http/protocol/HttpContext;->getAttribute(Ljava/lang/String;)Ljava/lang/Object;
+HPLorg/apache/http/protocol/HttpContext;->removeAttribute(Ljava/lang/String;)Ljava/lang/Object;
+HPLorg/apache/http/protocol/HttpContext;->setAttribute(Ljava/lang/String;Ljava/lang/Object;)V
+HPLorg/apache/http/protocol/HttpRequestExecutor;-><init>()V
+HPLorg/apache/http/protocol/HttpRequestExecutor;->canResponseHaveBody(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;)Z
+HPLorg/apache/http/protocol/HttpRequestExecutor;->doReceiveResponse(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpClientConnection;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;
+HPLorg/apache/http/protocol/HttpRequestExecutor;->doSendRequest(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpClientConnection;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;
+HPLorg/apache/http/protocol/HttpRequestExecutor;->execute(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpClientConnection;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;
+HPLorg/apache/http/protocol/HttpRequestExecutor;->postProcess(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/protocol/HttpRequestExecutor;->preProcess(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/protocol/RequestConnControl;-><init>()V
+HPLorg/apache/http/protocol/RequestConnControl;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/protocol/RequestContent;-><init>()V
+HPLorg/apache/http/protocol/RequestContent;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/protocol/RequestExpectContinue;-><init>()V
+HPLorg/apache/http/protocol/RequestExpectContinue;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/protocol/RequestTargetHost;-><init>()V
+HPLorg/apache/http/protocol/RequestTargetHost;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/protocol/RequestUserAgent;-><init>()V
+HPLorg/apache/http/protocol/RequestUserAgent;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V
+HPLorg/apache/http/util/ByteArrayBuffer;-><init>(I)V
+HPLorg/apache/http/util/ByteArrayBuffer;->append(Lorg/apache/http/util/CharArrayBuffer;II)V
+HPLorg/apache/http/util/ByteArrayBuffer;->append([BII)V
+HPLorg/apache/http/util/ByteArrayBuffer;->append([CII)V
+HPLorg/apache/http/util/ByteArrayBuffer;->buffer()[B
+HPLorg/apache/http/util/ByteArrayBuffer;->capacity()I
+HPLorg/apache/http/util/ByteArrayBuffer;->clear()V
+HPLorg/apache/http/util/ByteArrayBuffer;->isEmpty()Z
+HPLorg/apache/http/util/ByteArrayBuffer;->isFull()Z
+HPLorg/apache/http/util/ByteArrayBuffer;->length()I
+HPLorg/apache/http/util/CharArrayBuffer;-><init>(I)V
+HPLorg/apache/http/util/CharArrayBuffer;->append(C)V
+HPLorg/apache/http/util/CharArrayBuffer;->append(Ljava/lang/String;)V
+HPLorg/apache/http/util/CharArrayBuffer;->append([BII)V
+HPLorg/apache/http/util/CharArrayBuffer;->append([CII)V
+HPLorg/apache/http/util/CharArrayBuffer;->buffer()[C
+HPLorg/apache/http/util/CharArrayBuffer;->charAt(I)C
+HPLorg/apache/http/util/CharArrayBuffer;->clear()V
+HPLorg/apache/http/util/CharArrayBuffer;->ensureCapacity(I)V
+HPLorg/apache/http/util/CharArrayBuffer;->expand(I)V
+HPLorg/apache/http/util/CharArrayBuffer;->indexOf(I)I
+HPLorg/apache/http/util/CharArrayBuffer;->indexOf(III)I
+HPLorg/apache/http/util/CharArrayBuffer;->length()I
+HPLorg/apache/http/util/CharArrayBuffer;->substring(II)Ljava/lang/String;
+HPLorg/apache/http/util/CharArrayBuffer;->substringTrimmed(II)Ljava/lang/String;
+HPLorg/apache/http/util/CharArrayBuffer;->toString()Ljava/lang/String;
+HPLorg/apache/http/util/EntityUtils;->getContentCharSet(Lorg/apache/http/HttpEntity;)Ljava/lang/String;
+HPLorg/apache/http/util/EntityUtils;->toString(Lorg/apache/http/HttpEntity;Ljava/lang/String;)Ljava/lang/String;
+HPLorg/apache/http/util/LangUtils;->equals(Ljava/lang/Object;Ljava/lang/Object;)Z
+HPLorg/apache/http/util/LangUtils;->hashCode(II)I
+HPLorg/apache/http/util/LangUtils;->hashCode(ILjava/lang/Object;)I
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;-><init>()V
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;-><init>(Lorg/xml/sax/Attributes;)V
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;->addAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;->clear()V
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;->ensureCapacity(I)V
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;->getIndex(Ljava/lang/String;)I
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;->getLength()I
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;->getLocalName(I)Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;->getQName(I)Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;->getType(I)Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;->getURI(I)Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;->getValue(I)Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;->getValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;->removeAttribute(I)V
+HPLorg/ccil/cowan/tagsoup/AttributesImpl;->setAttributes(Lorg/xml/sax/Attributes;)V
+HPLorg/ccil/cowan/tagsoup/AutoDetector;->autoDetectingReader(Ljava/io/InputStream;)Ljava/io/Reader;
+HPLorg/ccil/cowan/tagsoup/Element;-><init>(Lorg/ccil/cowan/tagsoup/ElementType;Z)V
+HPLorg/ccil/cowan/tagsoup/Element;->atts()Lorg/ccil/cowan/tagsoup/AttributesImpl;
+HPLorg/ccil/cowan/tagsoup/Element;->canContain(Lorg/ccil/cowan/tagsoup/Element;)Z
+HPLorg/ccil/cowan/tagsoup/Element;->clean()V
+HPLorg/ccil/cowan/tagsoup/Element;->flags()I
+HPLorg/ccil/cowan/tagsoup/Element;->isPreclosed()Z
+HPLorg/ccil/cowan/tagsoup/Element;->localName()Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/Element;->model()I
+HPLorg/ccil/cowan/tagsoup/Element;->name()Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/Element;->namespace()Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/Element;->next()Lorg/ccil/cowan/tagsoup/Element;
+HPLorg/ccil/cowan/tagsoup/Element;->parent()Lorg/ccil/cowan/tagsoup/ElementType;
+HPLorg/ccil/cowan/tagsoup/Element;->setAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/ccil/cowan/tagsoup/Element;->setNext(Lorg/ccil/cowan/tagsoup/Element;)V
+HPLorg/ccil/cowan/tagsoup/ElementType;-><init>(Ljava/lang/String;IIILorg/ccil/cowan/tagsoup/Schema;)V
+HPLorg/ccil/cowan/tagsoup/ElementType;->atts()Lorg/ccil/cowan/tagsoup/AttributesImpl;
+HPLorg/ccil/cowan/tagsoup/ElementType;->canContain(Lorg/ccil/cowan/tagsoup/ElementType;)Z
+HPLorg/ccil/cowan/tagsoup/ElementType;->flags()I
+HPLorg/ccil/cowan/tagsoup/ElementType;->localName()Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/ElementType;->localName(Ljava/lang/String;)Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/ElementType;->model()I
+HPLorg/ccil/cowan/tagsoup/ElementType;->name()Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/ElementType;->namespace()Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/ElementType;->namespace(Ljava/lang/String;Z)Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/ElementType;->normalize(Ljava/lang/String;)Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/ElementType;->parent()Lorg/ccil/cowan/tagsoup/ElementType;
+HPLorg/ccil/cowan/tagsoup/ElementType;->setAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/ccil/cowan/tagsoup/ElementType;->setAttribute(Lorg/ccil/cowan/tagsoup/AttributesImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/ccil/cowan/tagsoup/ElementType;->setParent(Lorg/ccil/cowan/tagsoup/ElementType;)V
+HPLorg/ccil/cowan/tagsoup/HTMLScanner;-><init>()V
+HPLorg/ccil/cowan/tagsoup/HTMLScanner;->mark()V
+HPLorg/ccil/cowan/tagsoup/HTMLScanner;->resetDocumentLocator(Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/ccil/cowan/tagsoup/HTMLScanner;->save(ILorg/ccil/cowan/tagsoup/ScanHandler;)V
+HPLorg/ccil/cowan/tagsoup/HTMLScanner;->scan(Ljava/io/Reader;Lorg/ccil/cowan/tagsoup/ScanHandler;)V
+HPLorg/ccil/cowan/tagsoup/HTMLScanner;->unread(Ljava/io/PushbackReader;I)V
+HPLorg/ccil/cowan/tagsoup/HTMLSchema;-><init>()V
+HPLorg/ccil/cowan/tagsoup/Parser$1;-><init>(Lorg/ccil/cowan/tagsoup/Parser;)V
+HPLorg/ccil/cowan/tagsoup/Parser;-><init>()V
+HPLorg/ccil/cowan/tagsoup/Parser;->aname([CII)V
+HPLorg/ccil/cowan/tagsoup/Parser;->aval([CII)V
+HPLorg/ccil/cowan/tagsoup/Parser;->eof([CII)V
+HPLorg/ccil/cowan/tagsoup/Parser;->etag([CII)V
+HPLorg/ccil/cowan/tagsoup/Parser;->etag_basic([CII)V
+HPLorg/ccil/cowan/tagsoup/Parser;->etag_cdata([CII)Z
+HPLorg/ccil/cowan/tagsoup/Parser;->expandEntities(Ljava/lang/String;)Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/Parser;->foreign(Ljava/lang/String;Ljava/lang/String;)Z
+HPLorg/ccil/cowan/tagsoup/Parser;->getReader(Lorg/xml/sax/InputSource;)Ljava/io/Reader;
+HPLorg/ccil/cowan/tagsoup/Parser;->gi([CII)V
+HPLorg/ccil/cowan/tagsoup/Parser;->makeName([CII)Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/Parser;->parse(Lorg/xml/sax/InputSource;)V
+HPLorg/ccil/cowan/tagsoup/Parser;->pcdata([CII)V
+HPLorg/ccil/cowan/tagsoup/Parser;->pop()V
+HPLorg/ccil/cowan/tagsoup/Parser;->prefixOf(Ljava/lang/String;)Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/Parser;->push(Lorg/ccil/cowan/tagsoup/Element;)V
+HPLorg/ccil/cowan/tagsoup/Parser;->rectify(Lorg/ccil/cowan/tagsoup/Element;)V
+HPLorg/ccil/cowan/tagsoup/Parser;->restart(Lorg/ccil/cowan/tagsoup/Element;)V
+HPLorg/ccil/cowan/tagsoup/Parser;->setContentHandler(Lorg/xml/sax/ContentHandler;)V
+HPLorg/ccil/cowan/tagsoup/Parser;->setProperty(Ljava/lang/String;Ljava/lang/Object;)V
+HPLorg/ccil/cowan/tagsoup/Parser;->setup()V
+HPLorg/ccil/cowan/tagsoup/Parser;->stagc([CII)V
+HPLorg/ccil/cowan/tagsoup/Parser;->truthValue(Z)Ljava/lang/Boolean;
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->adup([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->aname([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->aval([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->cdsect([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->cmnt([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->decl([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->entity([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->eof([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->etag([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->getEntity()I
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->gi([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->pcdata([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->pi([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->pitarget([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->stagc([CII)V
+HPLorg/ccil/cowan/tagsoup/ScanHandler;->stage([CII)V
+HPLorg/ccil/cowan/tagsoup/Scanner;->resetDocumentLocator(Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/ccil/cowan/tagsoup/Scanner;->scan(Ljava/io/Reader;Lorg/ccil/cowan/tagsoup/ScanHandler;)V
+HPLorg/ccil/cowan/tagsoup/Scanner;->startCDATA()V
+HPLorg/ccil/cowan/tagsoup/Schema;-><init>()V
+HPLorg/ccil/cowan/tagsoup/Schema;->attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/ccil/cowan/tagsoup/Schema;->elementType(Ljava/lang/String;III)V
+HPLorg/ccil/cowan/tagsoup/Schema;->entity(Ljava/lang/String;I)V
+HPLorg/ccil/cowan/tagsoup/Schema;->getElementType(Ljava/lang/String;)Lorg/ccil/cowan/tagsoup/ElementType;
+HPLorg/ccil/cowan/tagsoup/Schema;->getPrefix()Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/Schema;->getURI()Ljava/lang/String;
+HPLorg/ccil/cowan/tagsoup/Schema;->parent(Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/ccil/cowan/tagsoup/Schema;->setPrefix(Ljava/lang/String;)V
+HPLorg/ccil/cowan/tagsoup/Schema;->setURI(Ljava/lang/String;)V
+HPLorg/json/JSON;->toDouble(Ljava/lang/Object;)Ljava/lang/Double;
+HPLorg/json/JSONArray;-><init>(Ljava/util/Collection;)V
+HPLorg/json/JSONArray;->getInt(I)I
+HPLorg/json/JSONArray;->getJSONArray(I)Lorg/json/JSONArray;
+HPLorg/json/JSONArray;->getLong(I)J
+HPLorg/json/JSONArray;->opt(I)Ljava/lang/Object;
+HPLorg/json/JSONArray;->optInt(I)I
+HPLorg/json/JSONArray;->optInt(II)I
+HPLorg/json/JSONArray;->optJSONArray(I)Lorg/json/JSONArray;
+HPLorg/json/JSONArray;->optJSONObject(I)Lorg/json/JSONObject;
+HPLorg/json/JSONArray;->put(J)Lorg/json/JSONArray;
+HPLorg/json/JSONObject;-><init>(Ljava/util/Map;)V
+HPLorg/json/JSONObject;->getBoolean(Ljava/lang/String;)Z
+HPLorg/json/JSONObject;->getDouble(Ljava/lang/String;)D
+HPLorg/json/JSONObject;->isNull(Ljava/lang/String;)Z
+HPLorg/json/JSONObject;->optDouble(Ljava/lang/String;)D
+HPLorg/json/JSONObject;->optDouble(Ljava/lang/String;D)D
+HPLorg/json/JSONObject;->optJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;
+HPLorg/json/JSONObject;->optLong(Ljava/lang/String;)J
+HPLorg/json/JSONObject;->put(Ljava/lang/String;D)Lorg/json/JSONObject;
+HPLorg/json/JSONObject;->wrap(Ljava/lang/Object;)Ljava/lang/Object;
+HPLorg/kxml2/io/KXmlParser;->getAttributeCount()I
+HPLorg/kxml2/io/KXmlParser;->getAttributeName(I)Ljava/lang/String;
+HPLorg/kxml2/io/KXmlParser;->getAttributeValue(I)Ljava/lang/String;
+HPLorg/kxml2/io/KXmlSerializer;-><init>()V
+HPLorg/kxml2/io/KXmlSerializer;->append(C)V
+HPLorg/kxml2/io/KXmlSerializer;->append(Ljava/lang/String;)V
+HPLorg/kxml2/io/KXmlSerializer;->append(Ljava/lang/String;II)V
+HPLorg/kxml2/io/KXmlSerializer;->attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HPLorg/kxml2/io/KXmlSerializer;->check(Z)V
+HPLorg/kxml2/io/KXmlSerializer;->endDocument()V
+HPLorg/kxml2/io/KXmlSerializer;->endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HPLorg/kxml2/io/KXmlSerializer;->flush()V
+HPLorg/kxml2/io/KXmlSerializer;->flushBuffer()V
+HPLorg/kxml2/io/KXmlSerializer;->getDepth()I
+HPLorg/kxml2/io/KXmlSerializer;->getNamespace()Ljava/lang/String;
+HPLorg/kxml2/io/KXmlSerializer;->getPrefix(Ljava/lang/String;ZZ)Ljava/lang/String;
+HPLorg/kxml2/io/KXmlSerializer;->setFeature(Ljava/lang/String;Z)V
+HPLorg/kxml2/io/KXmlSerializer;->setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V
+HPLorg/kxml2/io/KXmlSerializer;->setOutput(Ljava/io/Writer;)V
+HPLorg/kxml2/io/KXmlSerializer;->setPrefix(Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/kxml2/io/KXmlSerializer;->startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V
+HPLorg/kxml2/io/KXmlSerializer;->startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HPLorg/kxml2/io/KXmlSerializer;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HPLorg/kxml2/io/KXmlSerializer;->writeEscaped(Ljava/lang/String;I)V
+HPLorg/xml/sax/EntityResolver;->resolveEntity(Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;
+HPLorg/xml/sax/InputSource;-><init>(Ljava/io/Reader;)V
+HPLorg/xml/sax/InputSource;->setCharacterStream(Ljava/io/Reader;)V
+HPLorg/xml/sax/ext/DefaultHandler2;->endDTD()V
+HPLorg/xml/sax/ext/DefaultHandler2;->startDTD(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLorg/xml/sax/ext/LexicalHandler;->comment([CII)V
+HPLorg/xml/sax/helpers/AttributesImpl;-><init>(Lorg/xml/sax/Attributes;)V
+HPLorg/xml/sax/helpers/AttributesImpl;->clear()V
+HPLorg/xml/sax/helpers/AttributesImpl;->getValue(Ljava/lang/String;)Ljava/lang/String;
+HPLorg/xml/sax/helpers/AttributesImpl;->setAttributes(Lorg/xml/sax/Attributes;)V
+HPLorg/xml/sax/helpers/DefaultHandler;->endDocument()V
+HPLorg/xml/sax/helpers/DefaultHandler;->startDocument()V
+HPLorg/xmlpull/v1/XmlPullParserFactory;-><init>()V
+HPLorg/xmlpull/v1/XmlPullParserFactory;->getSerializerInstance()Lorg/xmlpull/v1/XmlSerializer;
+HPLorg/xmlpull/v1/XmlPullParserFactory;->newInstance()Lorg/xmlpull/v1/XmlPullParserFactory;
+HPLorg/xmlpull/v1/XmlPullParserFactory;->newInstance(Ljava/lang/String;Ljava/lang/Class;)Lorg/xmlpull/v1/XmlPullParserFactory;
+HPLorg/xmlpull/v1/XmlPullParserFactory;->newSerializer()Lorg/xmlpull/v1/XmlSerializer;
+HPLsun/misc/FDBigInteger;->addAndCmp(Lsun/misc/FDBigInteger;Lsun/misc/FDBigInteger;)I
+HPLsun/misc/FDBigInteger;->checkZeroTail([II)I
+HPLsun/misc/FDBigInteger;->getNormalizationBias()I
+HPLsun/misc/FDBigInteger;->mult([IIII[I)V
+HPLsun/misc/FDBigInteger;->multAndCarryBy10([II[I)I
+HPLsun/misc/FDBigInteger;->multBy10()Lsun/misc/FDBigInteger;
+HPLsun/misc/FDBigInteger;->multDiffMe(JLsun/misc/FDBigInteger;)J
+HPLsun/misc/FDBigInteger;->quoRemIteration(Lsun/misc/FDBigInteger;)I
+HPLsun/misc/FDBigInteger;->size()I
+HPLsun/misc/FDBigInteger;->valueOfPow2(I)Lsun/misc/FDBigInteger;
+HPLsun/misc/FDBigInteger;->valueOfPow52(II)Lsun/misc/FDBigInteger;
+HPLsun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer;->toJavaFormatString()Ljava/lang/String;
+HPLsun/misc/LRUCache;-><init>(I)V
+HPLsun/misc/LRUCache;->create(Ljava/lang/Object;)Ljava/lang/Object;
+HPLsun/misc/LRUCache;->forName(Ljava/lang/Object;)Ljava/lang/Object;
+HPLsun/misc/LRUCache;->hasName(Ljava/lang/Object;Ljava/lang/Object;)Z
+HPLsun/misc/LRUCache;->moveToFront([Ljava/lang/Object;I)V
+HPLsun/nio/ch/ChannelInputStream;-><init>(Ljava/nio/channels/ReadableByteChannel;)V
+HPLsun/nio/ch/ChannelInputStream;->close()V
+HPLsun/nio/ch/ChannelInputStream;->read()I
+HPLsun/nio/ch/ChannelInputStream;->read(Ljava/nio/ByteBuffer;)I
+HPLsun/nio/ch/ChannelInputStream;->read(Ljava/nio/channels/ReadableByteChannel;Ljava/nio/ByteBuffer;)I
+HPLsun/nio/ch/ChannelInputStream;->read([BII)I
+HPLsun/nio/ch/FileChannelImpl$Unmapper;->run()V
+HPLsun/nio/ch/FileChannelImpl;->-wrap0(JJ)I
+HPLsun/nio/ch/FileChannelImpl;->read(Ljava/nio/ByteBuffer;)I
+HPLsun/nio/ch/FileChannelImpl;->write(Ljava/nio/ByteBuffer;)I
+HPLsun/nio/ch/FileDispatcherImpl;->close(Ljava/io/FileDescriptor;)V
+HPLsun/nio/ch/FileDispatcherImpl;->read(Ljava/io/FileDescriptor;JI)I
+HPLsun/nio/ch/FileDispatcherImpl;->write(Ljava/io/FileDescriptor;JI)I
+HPLsun/nio/ch/IOStatus;->normalize(I)I
+HPLsun/nio/ch/IOUtil;->read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;JLsun/nio/ch/NativeDispatcher;)I
+HPLsun/nio/ch/IOUtil;->readIntoNativeBuffer(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;JLsun/nio/ch/NativeDispatcher;)I
+HPLsun/nio/ch/IOUtil;->write(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;JLsun/nio/ch/NativeDispatcher;)I
+HPLsun/nio/ch/IOUtil;->writeFromNativeBuffer(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;JLsun/nio/ch/NativeDispatcher;)I
+HPLsun/nio/ch/Util$1;-><init>()V
+HPLsun/nio/ch/Util$1;->initialValue()Ljava/lang/Object;
+HPLsun/nio/ch/Util$1;->initialValue()Lsun/nio/ch/Util$BufferCache;
+HPLsun/nio/ch/Util$BufferCache;-><init>()V
+HPLsun/nio/ch/Util$BufferCache;->get(I)Ljava/nio/ByteBuffer;
+HPLsun/nio/ch/Util$BufferCache;->isEmpty()Z
+HPLsun/nio/ch/Util$BufferCache;->next(I)I
+HPLsun/nio/ch/Util$BufferCache;->offerFirst(Ljava/nio/ByteBuffer;)Z
+HPLsun/nio/ch/Util$BufferCache;->removeFirst()Ljava/nio/ByteBuffer;
+HPLsun/nio/ch/Util;->-get0()I
+HPLsun/nio/ch/Util;->free(Ljava/nio/ByteBuffer;)V
+HPLsun/nio/ch/Util;->getTemporaryDirectBuffer(I)Ljava/nio/ByteBuffer;
+HPLsun/nio/ch/Util;->offerFirstTemporaryDirectBuffer(Ljava/nio/ByteBuffer;)V
+HPLsun/nio/cs/StreamDecoder;-><init>(Ljava/nio/channels/ReadableByteChannel;Ljava/nio/charset/CharsetDecoder;I)V
+HPLsun/nio/cs/StreamDecoder;->forDecoder(Ljava/nio/channels/ReadableByteChannel;Ljava/nio/charset/CharsetDecoder;I)Lsun/nio/cs/StreamDecoder;
+HPLsun/nio/cs/StreamDecoder;->implReady()Z
+HPLsun/nio/cs/StreamDecoder;->ready()Z
+HPLsun/nio/cs/StreamEncoder;->write(Ljava/lang/String;II)V
+HPLsun/nio/fs/UnixFileSystemProvider;->newByteChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;
+HPLsun/reflect/misc/ReflectUtil;->checkPackageAccess(Ljava/lang/Class;)V
+HPLsun/reflect/misc/ReflectUtil;->checkPackageAccess(Ljava/lang/String;)V
+HPLsun/reflect/misc/ReflectUtil;->isNonPublicProxyClass(Ljava/lang/Class;)Z
+HPLsun/security/jca/GetInstance;->getInstance(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)Lsun/security/jca/GetInstance$Instance;
+HPLsun/security/jca/GetInstance;->getService(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;
+HPLsun/security/jca/JCAUtil;->getSecureRandom()Ljava/security/SecureRandom;
+HPLsun/security/util/DerValue;-><init>(Ljava/lang/String;)V
+HPLsun/security/util/DerValue;->init(BLjava/lang/String;)Lsun/security/util/DerInputStream;
+HPLsun/security/util/ManifestEntryVerifier;->update(B)V
+HPLsun/security/x509/AVA;-><init>(Ljava/io/Reader;ILjava/util/Map;)V
+HPLsun/security/x509/AVA;-><init>(Ljava/io/Reader;Ljava/util/Map;)V
+HPLsun/security/x509/AVA;->isTerminator(II)Z
+HPLsun/security/x509/AVA;->parseString(Ljava/io/Reader;IILjava/lang/StringBuilder;)Lsun/security/util/DerValue;
+HPLsun/security/x509/AVA;->readChar(Ljava/io/Reader;Ljava/lang/String;)I
+HPLsun/security/x509/AVAKeyword;->getOID(Ljava/lang/String;ILjava/util/Map;)Lsun/security/util/ObjectIdentifier;
+HPLsun/security/x509/CertAttrSet;->delete(Ljava/lang/String;)V
+HPLsun/security/x509/CertAttrSet;->encode(Ljava/io/OutputStream;)V
+HPLsun/security/x509/CertAttrSet;->get(Ljava/lang/String;)Ljava/lang/Object;
+HPLsun/security/x509/CertAttrSet;->getElements()Ljava/util/Enumeration;
+HPLsun/security/x509/CertAttrSet;->getName()Ljava/lang/String;
+HPLsun/security/x509/CertAttrSet;->set(Ljava/lang/String;Ljava/lang/Object;)V
+HPLsun/security/x509/CertAttrSet;->toString()Ljava/lang/String;
+HPLsun/security/x509/RDN;-><init>(Ljava/lang/String;Ljava/util/Map;)V
+HPLsun/security/x509/X500Name;-><init>(Ljava/lang/String;Ljava/util/Map;)V
+HPLsun/security/x509/X500Name;->checkNoNewLinesNorTabsAtBeginningOfDN(Ljava/lang/String;)V
+HPLsun/security/x509/X500Name;->countQuotes(Ljava/lang/String;II)I
+HPLsun/security/x509/X500Name;->escaped(IILjava/lang/String;)Z
+HPLsun/security/x509/X500Name;->parseDN(Ljava/lang/String;Ljava/util/Map;)V
+HPLsun/util/calendar/BaseCalendar$Date;->setNormalizedDate(III)Lsun/util/calendar/BaseCalendar$Date;
+HPLsun/util/calendar/CalendarDate;->isDaylightTime()Z
+HPLsun/util/calendar/CalendarDate;->isStandardTime()Z
+HPLsun/util/calendar/CalendarUtils;->sprintf0d(Ljava/lang/StringBuilder;II)Ljava/lang/StringBuilder;
+HPLsun/util/locale/Extension;-><init>(CLjava/lang/String;)V
+HPLsun/util/locale/Extension;->getID()Ljava/lang/String;
+HPLsun/util/locale/Extension;->setValue(Ljava/lang/String;)V
+HPLsun/util/locale/Extension;->toString()Ljava/lang/String;
+HPLsun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar;-><init>(C)V
+HPLsun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar;-><init>(Ljava/lang/String;)V
+HPLsun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar;-><init>(Ljava/lang/String;Lsun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar;)V
+HPLsun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar;->hashCode()I
+HPLsun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar;->value()C
+HPLsun/util/locale/LanguageTag;->isExtensionSingleton(Ljava/lang/String;)Z
+HPLsun/util/locale/LanguageTag;->isExtensionSubtag(Ljava/lang/String;)Z
+HPLsun/util/locale/LanguageTag;->isPrivateusePrefixChar(C)Z
+HPLsun/util/locale/LanguageTag;->isVariant(Ljava/lang/String;)Z
+HPLsun/util/locale/LocaleExtensions;-><init>(Ljava/lang/String;Ljava/lang/Character;Lsun/util/locale/Extension;)V
+HPLsun/util/locale/LocaleExtensions;-><init>(Ljava/util/Map;Ljava/util/Set;Ljava/util/Map;)V
+HPLsun/util/locale/LocaleExtensions;->equals(Ljava/lang/Object;)Z
+HPLsun/util/locale/LocaleExtensions;->getID()Ljava/lang/String;
+HPLsun/util/locale/LocaleExtensions;->hashCode()I
+HPLsun/util/locale/LocaleExtensions;->isEmpty()Z
+HPLsun/util/locale/LocaleExtensions;->toID(Ljava/util/SortedMap;)Ljava/lang/String;
+HPLsun/util/locale/LocaleUtils;->isAlphaNumeric(C)Z
+HPLsun/util/locale/LocaleUtils;->isAlphaNumericString(Ljava/lang/String;)Z
+HPLsun/util/locale/StringTokenIterator;->currentStart()I
+HPLsun/util/locale/UnicodeLocaleExtension;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HPLsun/util/locale/UnicodeLocaleExtension;->isSingletonChar(C)Z
+HSLandroid/os/PowerManagerInternal$LowPowerModeListener;->getServiceType()I
+HSLandroid/os/PowerManagerInternal$LowPowerModeListener;->onLowPowerModeChanged(Landroid/os/PowerSaveState;)V
+HSLandroid/service/vr/IPersistentVrStateCallbacks;->onPersistentVrStateChanged(Z)V
+HSLandroid/view/ScaleGestureDetector$OnScaleGestureListener;->onScale(Landroid/view/ScaleGestureDetector;)Z
+HSLandroid/view/ScaleGestureDetector$OnScaleGestureListener;->onScaleBegin(Landroid/view/ScaleGestureDetector;)Z
+HSLandroid/view/ScaleGestureDetector$OnScaleGestureListener;->onScaleEnd(Landroid/view/ScaleGestureDetector;)V
+HSLandroid/view/ViewStub$OnInflateListener;->onInflate(Landroid/view/ViewStub;Landroid/view/View;)V
+HSPLandroid/accessibilityservice/AccessibilityServiceInfo$1;-><init>()V
+HSPLandroid/accounts/Account$1;-><init>()V
+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;
+HSPLandroid/accounts/Account$1;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/accounts/Account;-><init>(Landroid/os/Parcel;)V
+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
+HSPLandroid/accounts/Account;->hashCode()I
+HSPLandroid/accounts/Account;->toString()Ljava/lang/String;
+HSPLandroid/accounts/Account;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/accounts/AccountManager$11;-><init>(Landroid/accounts/AccountManager;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$11;->doWork()V
+HSPLandroid/accounts/AccountManager$19;-><init>(Landroid/accounts/AccountManager;Landroid/accounts/OnAccountsUpdateListener;[Landroid/accounts/Account;)V
+HSPLandroid/accounts/AccountManager$19;->run()V
+HSPLandroid/accounts/AccountManager$1;-><init>(Landroid/accounts/AccountManager;)V
+HSPLandroid/accounts/AccountManager$3;-><init>(Landroid/accounts/AccountManager;Landroid/accounts/AccountManager;Landroid/os/Handler;Landroid/accounts/AccountManagerCallback;Landroid/accounts/Account;[Ljava/lang/String;)V
+HSPLandroid/accounts/AccountManager$3;->bundleToResult(Landroid/os/Bundle;)Ljava/lang/Boolean;
+HSPLandroid/accounts/AccountManager$3;->bundleToResult(Landroid/os/Bundle;)Ljava/lang/Object;
+HSPLandroid/accounts/AccountManager$3;->doWork()V
+HSPLandroid/accounts/AccountManager$4;-><init>(Landroid/accounts/AccountManager;Landroid/accounts/AccountManager;Landroid/os/Handler;Landroid/accounts/AccountManagerCallback;Ljava/lang/String;[Ljava/lang/String;)V
+HSPLandroid/accounts/AccountManager$4;->bundleToResult(Landroid/os/Bundle;)Ljava/lang/Object;
+HSPLandroid/accounts/AccountManager$4;->bundleToResult(Landroid/os/Bundle;)[Landroid/accounts/Account;
+HSPLandroid/accounts/AccountManager$4;->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$AmsTask$Response;)V
+HSPLandroid/accounts/AccountManager$AmsTask$Response;->onResult(Landroid/os/Bundle;)V
+HSPLandroid/accounts/AccountManager$AmsTask;-><init>(Landroid/accounts/AccountManager;Landroid/app/Activity;Landroid/os/Handler;Landroid/accounts/AccountManagerCallback;)V
+HSPLandroid/accounts/AccountManager$AmsTask;->doWork()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;->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$1;-><init>(Landroid/accounts/AccountManager;)V
+HSPLandroid/accounts/AccountManager$BaseFutureTask$Response;-><init>(Landroid/accounts/AccountManager$BaseFutureTask;)V
+HSPLandroid/accounts/AccountManager$BaseFutureTask$Response;->onResult(Landroid/os/Bundle;)V
+HSPLandroid/accounts/AccountManager$BaseFutureTask;->-wrap1(Landroid/accounts/AccountManager$BaseFutureTask;Ljava/lang/Object;)V
+HSPLandroid/accounts/AccountManager$BaseFutureTask;-><init>(Landroid/accounts/AccountManager;Landroid/os/Handler;)V
+HSPLandroid/accounts/AccountManager$BaseFutureTask;->bundleToResult(Landroid/os/Bundle;)Ljava/lang/Object;
+HSPLandroid/accounts/AccountManager$BaseFutureTask;->doWork()V
+HSPLandroid/accounts/AccountManager$BaseFutureTask;->postRunnableToHandler(Ljava/lang/Runnable;)V
+HSPLandroid/accounts/AccountManager$BaseFutureTask;->startTask()V
+HSPLandroid/accounts/AccountManager$Future2Task$1;-><init>(Landroid/accounts/AccountManager$Future2Task;)V
+HSPLandroid/accounts/AccountManager$Future2Task$1;->run()V
+HSPLandroid/accounts/AccountManager$Future2Task;-><init>(Landroid/accounts/AccountManager;Landroid/os/Handler;Landroid/accounts/AccountManagerCallback;)V
+HSPLandroid/accounts/AccountManager$Future2Task;->done()V
+HSPLandroid/accounts/AccountManager$Future2Task;->getResult()Ljava/lang/Object;
+HSPLandroid/accounts/AccountManager$Future2Task;->internalGetResult(Ljava/lang/Long;Ljava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HSPLandroid/accounts/AccountManager$Future2Task;->start()Landroid/accounts/AccountManager$Future2Task;
+HSPLandroid/accounts/AccountManager;->-get0(Landroid/accounts/AccountManager;)Ljava/util/HashMap;
+HSPLandroid/accounts/AccountManager;->-get1(Landroid/accounts/AccountManager;)Ljava/util/HashMap;
+HSPLandroid/accounts/AccountManager;->-get2(Landroid/accounts/AccountManager;)Landroid/content/Context;
+HSPLandroid/accounts/AccountManager;->-get3(Landroid/accounts/AccountManager;)Landroid/os/Handler;
+HSPLandroid/accounts/AccountManager;->-get4(Landroid/accounts/AccountManager;)Landroid/accounts/IAccountManager;
+HSPLandroid/accounts/AccountManager;->-wrap1(Landroid/accounts/AccountManager;)V
+HSPLandroid/accounts/AccountManager;-><init>(Landroid/content/Context;Landroid/accounts/IAccountManager;)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;->ensureNotOnMainThread()V
+HSPLandroid/accounts/AccountManager;->get(Landroid/content/Context;)Landroid/accounts/AccountManager;
+HSPLandroid/accounts/AccountManager;->getAccounts()[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;
+HSPLandroid/accounts/AccountManager;->hasFeatures(Landroid/accounts/Account;[Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;
+HSPLandroid/accounts/AccountManager;->postToHandler(Landroid/os/Handler;Landroid/accounts/OnAccountsUpdateListener;[Landroid/accounts/Account;)V
+HSPLandroid/accounts/AccountManagerCallback;->run(Landroid/accounts/AccountManagerFuture;)V
+HSPLandroid/accounts/AccountManagerFuture;->cancel(Z)Z
+HSPLandroid/accounts/AccountManagerFuture;->getResult()Ljava/lang/Object;
+HSPLandroid/accounts/AccountManagerFuture;->getResult(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HSPLandroid/accounts/AccountManagerFuture;->isCancelled()Z
+HSPLandroid/accounts/AccountManagerFuture;->isDone()Z
+HSPLandroid/accounts/AuthenticatorDescription$1;-><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>(Landroid/os/Parcel;Landroid/accounts/AuthenticatorDescription;)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;
+HSPLandroid/accounts/IAccountManager$Stub$Proxy;->hasFeatures(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;[Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager$Stub$Proxy;->onAccountAccessed(Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager$Stub$Proxy;->registerAccountListener([Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountManager;
+HSPLandroid/accounts/IAccountManager;->accountAuthenticated(Landroid/accounts/Account;)Z
+HSPLandroid/accounts/IAccountManager;->addAccount(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;ZLandroid/os/Bundle;)V
+HSPLandroid/accounts/IAccountManager;->addAccountAsUser(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;ZLandroid/os/Bundle;I)V
+HSPLandroid/accounts/IAccountManager;->addAccountExplicitly(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Z
+HSPLandroid/accounts/IAccountManager;->addAccountExplicitlyWithVisibility(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Ljava/util/Map;)Z
+HSPLandroid/accounts/IAccountManager;->addSharedAccountsFromParentUser(IILjava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->clearPassword(Landroid/accounts/Account;)V
+HSPLandroid/accounts/IAccountManager;->confirmCredentialsAsUser(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Landroid/os/Bundle;ZI)V
+HSPLandroid/accounts/IAccountManager;->copyAccountToUser(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;II)V
+HSPLandroid/accounts/IAccountManager;->createRequestAccountAccessIntentSenderAsUser(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/IntentSender;
+HSPLandroid/accounts/IAccountManager;->editProperties(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;Z)V
+HSPLandroid/accounts/IAccountManager;->finishSessionAsUser(Landroid/accounts/IAccountManagerResponse;Landroid/os/Bundle;ZLandroid/os/Bundle;I)V
+HSPLandroid/accounts/IAccountManager;->getAccountByTypeAndFeatures(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->getAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;)I
+HSPLandroid/accounts/IAccountManager;->getAccounts(Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;
+HSPLandroid/accounts/IAccountManager;->getAccountsAndVisibilityForPackage(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Map;
+HSPLandroid/accounts/IAccountManager;->getAccountsAsUser(Ljava/lang/String;ILjava/lang/String;)[Landroid/accounts/Account;
+HSPLandroid/accounts/IAccountManager;->getAccountsByFeatures(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->getAccountsByTypeForPackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;
+HSPLandroid/accounts/IAccountManager;->getAccountsForPackage(Ljava/lang/String;ILjava/lang/String;)[Landroid/accounts/Account;
+HSPLandroid/accounts/IAccountManager;->getAuthToken(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;ZZLandroid/os/Bundle;)V
+HSPLandroid/accounts/IAccountManager;->getAuthTokenLabel(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->getAuthenticatorTypes(I)[Landroid/accounts/AuthenticatorDescription;
+HSPLandroid/accounts/IAccountManager;->getPackagesAndVisibilityForAccount(Landroid/accounts/Account;)Ljava/util/Map;
+HSPLandroid/accounts/IAccountManager;->getPassword(Landroid/accounts/Account;)Ljava/lang/String;
+HSPLandroid/accounts/IAccountManager;->getPreviousName(Landroid/accounts/Account;)Ljava/lang/String;
+HSPLandroid/accounts/IAccountManager;->getSharedAccountsAsUser(I)[Landroid/accounts/Account;
+HSPLandroid/accounts/IAccountManager;->getUserData(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/accounts/IAccountManager;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/UserHandle;)Z
+HSPLandroid/accounts/IAccountManager;->hasFeatures(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;[Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->invalidateAuthToken(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->isCredentialsUpdateSuggested(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->onAccountAccessed(Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->peekAuthToken(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/accounts/IAccountManager;->registerAccountListener([Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->removeAccount(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Z)V
+HSPLandroid/accounts/IAccountManager;->removeAccountAsUser(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;ZI)V
+HSPLandroid/accounts/IAccountManager;->removeAccountExplicitly(Landroid/accounts/Account;)Z
+HSPLandroid/accounts/IAccountManager;->removeSharedAccountAsUser(Landroid/accounts/Account;I)Z
+HSPLandroid/accounts/IAccountManager;->renameAccount(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->renameSharedAccountAsUser(Landroid/accounts/Account;Ljava/lang/String;I)Z
+HSPLandroid/accounts/IAccountManager;->setAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;I)Z
+HSPLandroid/accounts/IAccountManager;->setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->setPassword(Landroid/accounts/Account;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->setUserData(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->someUserHasAccount(Landroid/accounts/Account;)Z
+HSPLandroid/accounts/IAccountManager;->startAddAccountSession(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;ZLandroid/os/Bundle;)V
+HSPLandroid/accounts/IAccountManager;->startUpdateCredentialsSession(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;ZLandroid/os/Bundle;)V
+HSPLandroid/accounts/IAccountManager;->unregisterAccountListener([Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/accounts/IAccountManager;->updateAppPermission(Landroid/accounts/Account;Ljava/lang/String;IZ)V
+HSPLandroid/accounts/IAccountManager;->updateCredentials(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;ZLandroid/os/Bundle;)V
+HSPLandroid/accounts/IAccountManagerResponse$Stub;-><init>()V
+HSPLandroid/accounts/IAccountManagerResponse$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/accounts/IAccountManagerResponse$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/accounts/IAccountManagerResponse;->onError(ILjava/lang/String;)V
+HSPLandroid/accounts/IAccountManagerResponse;->onResult(Landroid/os/Bundle;)V
+HSPLandroid/accounts/OnAccountsUpdateListener;->onAccountsUpdated([Landroid/accounts/Account;)V
+HSPLandroid/animation/AnimationHandler$1;-><init>(Landroid/animation/AnimationHandler;)V
+HSPLandroid/animation/AnimationHandler$1;->doFrame(J)V
+HSPLandroid/animation/AnimationHandler$AnimationFrameCallback;->commitAnimationFrame(J)V
+HSPLandroid/animation/AnimationHandler$AnimationFrameCallback;->doAnimationFrame(J)Z
+HSPLandroid/animation/AnimationHandler$AnimationFrameCallbackProvider;->getFrameDelay()J
+HSPLandroid/animation/AnimationHandler$AnimationFrameCallbackProvider;->getFrameTime()J
+HSPLandroid/animation/AnimationHandler$AnimationFrameCallbackProvider;->postCommitCallback(Ljava/lang/Runnable;)V
+HSPLandroid/animation/AnimationHandler$AnimationFrameCallbackProvider;->postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
+HSPLandroid/animation/AnimationHandler$AnimationFrameCallbackProvider;->setFrameDelay(J)V
+HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;-><init>(Landroid/animation/AnimationHandler;)V
+HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;-><init>(Landroid/animation/AnimationHandler;Landroid/animation/AnimationHandler$MyFrameCallbackProvider;)V
+HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;->getFrameTime()J
+HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;->postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
+HSPLandroid/animation/AnimationHandler;->-get0(Landroid/animation/AnimationHandler;)Ljava/util/ArrayList;
+HSPLandroid/animation/AnimationHandler;->-wrap0(Landroid/animation/AnimationHandler;)Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;
+HSPLandroid/animation/AnimationHandler;->-wrap2(Landroid/animation/AnimationHandler;J)V
+HSPLandroid/animation/AnimationHandler;-><init>()V
+HSPLandroid/animation/AnimationHandler;->addAnimationFrameCallback(Landroid/animation/AnimationHandler$AnimationFrameCallback;J)V
+HSPLandroid/animation/AnimationHandler;->autoCancelBasedOn(Landroid/animation/ObjectAnimator;)V
+HSPLandroid/animation/AnimationHandler;->cleanUpList()V
+HSPLandroid/animation/AnimationHandler;->doAnimationFrame(J)V
+HSPLandroid/animation/AnimationHandler;->getAnimationCount()I
+HSPLandroid/animation/AnimationHandler;->getCallbackSize()I
+HSPLandroid/animation/AnimationHandler;->getInstance()Landroid/animation/AnimationHandler;
+HSPLandroid/animation/AnimationHandler;->getProvider()Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;
+HSPLandroid/animation/AnimationHandler;->isCallbackDue(Landroid/animation/AnimationHandler$AnimationFrameCallback;J)Z
+HSPLandroid/animation/AnimationHandler;->removeCallback(Landroid/animation/AnimationHandler$AnimationFrameCallback;)V
+HSPLandroid/animation/AnimationHandler;->setProvider(Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;)V
+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$AnimatorPauseListener;->onAnimationPause(Landroid/animation/Animator;)V
+HSPLandroid/animation/Animator$AnimatorPauseListener;->onAnimationResume(Landroid/animation/Animator;)V
+HSPLandroid/animation/Animator;->-set0(Landroid/animation/Animator;Landroid/animation/Animator$AnimatorConstantState;)Landroid/animation/Animator$AnimatorConstantState;
+HSPLandroid/animation/Animator;-><init>()V
+HSPLandroid/animation/Animator;->addListener(Landroid/animation/Animator$AnimatorListener;)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;->isPaused()Z
+HSPLandroid/animation/Animator;->pause()V
+HSPLandroid/animation/Animator;->removeAllListeners()V
+HSPLandroid/animation/Animator;->removeListener(Landroid/animation/Animator$AnimatorListener;)V
+HSPLandroid/animation/Animator;->setAllowRunningAsynchronously(Z)V
+HSPLandroid/animation/AnimatorInflater$PathDataEvaluator;-><init>()V
+HSPLandroid/animation/AnimatorInflater$PathDataEvaluator;-><init>(Landroid/animation/AnimatorInflater$PathDataEvaluator;)V
+HSPLandroid/animation/AnimatorInflater$PathDataEvaluator;->evaluate(FLandroid/util/PathParser$PathData;Landroid/util/PathParser$PathData;)Landroid/util/PathParser$PathData;
+HSPLandroid/animation/AnimatorInflater$PathDataEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+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
+HSPLandroid/animation/AnimatorInflater;->getPVH(Landroid/content/res/TypedArray;IIILjava/lang/String;)Landroid/animation/PropertyValuesHolder;
+HSPLandroid/animation/AnimatorInflater;->inferValueTypeFromValues(Landroid/content/res/TypedArray;II)I
+HSPLandroid/animation/AnimatorInflater;->isColorType(I)Z
+HSPLandroid/animation/AnimatorInflater;->loadAnimator(Landroid/content/Context;I)Landroid/animation/Animator;
+HSPLandroid/animation/AnimatorInflater;->loadAnimator(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;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;->loadPvh(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)Landroid/animation/PropertyValuesHolder;
+HSPLandroid/animation/AnimatorInflater;->loadStateListAnimator(Landroid/content/Context;I)Landroid/animation/StateListAnimator;
+HSPLandroid/animation/AnimatorInflater;->loadValues(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)[Landroid/animation/PropertyValuesHolder;
+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
+HSPLandroid/animation/AnimatorListenerAdapter;-><init>()V
+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
+HSPLandroid/animation/AnimatorSet$AnimationEvent;-><init>(Landroid/animation/AnimatorSet$Node;I)V
+HSPLandroid/animation/AnimatorSet$AnimationEvent;->getTime()J
+HSPLandroid/animation/AnimatorSet$Builder;-><init>(Landroid/animation/AnimatorSet;Landroid/animation/Animator;)V
+HSPLandroid/animation/AnimatorSet$Builder;->after(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
+HSPLandroid/animation/AnimatorSet$Builder;->before(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
+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;
+HSPLandroid/animation/AnimatorSet$SeekState;-><init>(Landroid/animation/AnimatorSet;)V
+HSPLandroid/animation/AnimatorSet$SeekState;-><init>(Landroid/animation/AnimatorSet;Landroid/animation/AnimatorSet$SeekState;)V
+HSPLandroid/animation/AnimatorSet$SeekState;->getPlayTimeNormalized()J
+HSPLandroid/animation/AnimatorSet$SeekState;->isActive()Z
+HSPLandroid/animation/AnimatorSet$SeekState;->reset()V
+HSPLandroid/animation/AnimatorSet;->-get0(Landroid/animation/AnimatorSet;)Landroid/util/ArrayMap;
+HSPLandroid/animation/AnimatorSet;->-get1(Landroid/animation/AnimatorSet;)Z
+HSPLandroid/animation/AnimatorSet;->-set0(Landroid/animation/AnimatorSet;Z)Z
+HSPLandroid/animation/AnimatorSet;->-wrap0(Landroid/animation/AnimatorSet;Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Node;
+HSPLandroid/animation/AnimatorSet;-><init>()V
+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
+HSPLandroid/animation/AnimatorSet;->doAnimationFrame(J)Z
+HSPLandroid/animation/AnimatorSet;->end()V
+HSPLandroid/animation/AnimatorSet;->endAnimation()V
+HSPLandroid/animation/AnimatorSet;->findLatestEventIdForTime(J)I
+HSPLandroid/animation/AnimatorSet;->findSiblings(Landroid/animation/AnimatorSet$Node;Ljava/util/ArrayList;)V
+HSPLandroid/animation/AnimatorSet;->getChangingConfigurations()I
+HSPLandroid/animation/AnimatorSet;->getChildAnimations()Ljava/util/ArrayList;
+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;
+HSPLandroid/animation/AnimatorSet;->playSequentially([Landroid/animation/Animator;)V
+HSPLandroid/animation/AnimatorSet;->playTogether(Ljava/util/Collection;)V
+HSPLandroid/animation/AnimatorSet;->playTogether([Landroid/animation/Animator;)V
+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/Animator;
+HSPLandroid/animation/AnimatorSet;->setDuration(J)Landroid/animation/AnimatorSet;
+HSPLandroid/animation/AnimatorSet;->setInterpolator(Landroid/animation/TimeInterpolator;)V
+HSPLandroid/animation/AnimatorSet;->setTarget(Ljava/lang/Object;)V
+HSPLandroid/animation/AnimatorSet;->shouldPlayTogether()Z
+HSPLandroid/animation/AnimatorSet;->sortAnimationEvents()V
+HSPLandroid/animation/AnimatorSet;->start()V
+HSPLandroid/animation/AnimatorSet;->start(ZZ)V
+HSPLandroid/animation/AnimatorSet;->startAnimation()V
+HSPLandroid/animation/AnimatorSet;->startWithoutPulsing(Z)V
+HSPLandroid/animation/AnimatorSet;->updateAnimatorsDuration()V
+HSPLandroid/animation/AnimatorSet;->updatePlayTime(Landroid/animation/AnimatorSet$Node;Ljava/util/ArrayList;)V
+HSPLandroid/animation/ArgbEvaluator;-><init>()V
+HSPLandroid/animation/ArgbEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/animation/ArgbEvaluator;->getInstance()Landroid/animation/ArgbEvaluator;
+HSPLandroid/animation/FloatEvaluator;-><init>()V
+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/IntEvaluator;-><init>()V
+HSPLandroid/animation/IntKeyframeSet;-><init>([Landroid/animation/Keyframe$IntKeyframe;)V
+HSPLandroid/animation/IntKeyframeSet;->clone()Landroid/animation/IntKeyframeSet;
+HSPLandroid/animation/IntKeyframeSet;->clone()Landroid/animation/Keyframes;
+HSPLandroid/animation/IntKeyframeSet;->getIntValue(F)I
+HSPLandroid/animation/IntKeyframeSet;->getValue(F)Ljava/lang/Object;
+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>(F)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$ObjectKeyframe;-><init>(FLjava/lang/Object;)V
+HSPLandroid/animation/Keyframe$ObjectKeyframe;->clone()Landroid/animation/Keyframe$ObjectKeyframe;
+HSPLandroid/animation/Keyframe$ObjectKeyframe;->clone()Landroid/animation/Keyframe;
+HSPLandroid/animation/Keyframe$ObjectKeyframe;->getValue()Ljava/lang/Object;
+HSPLandroid/animation/Keyframe;-><init>()V
+HSPLandroid/animation/Keyframe;->clone()Landroid/animation/Keyframe;
+HSPLandroid/animation/Keyframe;->getFraction()F
+HSPLandroid/animation/Keyframe;->getInterpolator()Landroid/animation/TimeInterpolator;
+HSPLandroid/animation/Keyframe;->getValue()Ljava/lang/Object;
+HSPLandroid/animation/Keyframe;->hasValue()Z
+HSPLandroid/animation/Keyframe;->ofFloat(F)Landroid/animation/Keyframe;
+HSPLandroid/animation/Keyframe;->ofFloat(FF)Landroid/animation/Keyframe;
+HSPLandroid/animation/Keyframe;->ofInt(F)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;->setValue(Ljava/lang/Object;)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;
+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;
+HSPLandroid/animation/KeyframeSet;->ofPath(Landroid/graphics/Path;F)Landroid/animation/PathKeyframes;
+HSPLandroid/animation/KeyframeSet;->setEvaluator(Landroid/animation/TypeEvaluator;)V
+HSPLandroid/animation/Keyframes$FloatKeyframes;->getFloatValue(F)F
+HSPLandroid/animation/Keyframes$IntKeyframes;->getIntValue(F)I
+HSPLandroid/animation/Keyframes;->getKeyframes()Ljava/util/List;
+HSPLandroid/animation/Keyframes;->getType()Ljava/lang/Class;
+HSPLandroid/animation/Keyframes;->getValue(F)Ljava/lang/Object;
+HSPLandroid/animation/Keyframes;->setEvaluator(Landroid/animation/TypeEvaluator;)V
+HSPLandroid/animation/LayoutTransition$CleanupCallback;-><init>(Ljava/util/Map;Landroid/view/ViewGroup;)V
+HSPLandroid/animation/LayoutTransition$CleanupCallback;->cleanup()V
+HSPLandroid/animation/LayoutTransition$CleanupCallback;->onPreDraw()Z
+HSPLandroid/animation/LayoutTransition$TransitionListener;->endTransition(Landroid/animation/LayoutTransition;Landroid/view/ViewGroup;Landroid/view/View;I)V
+HSPLandroid/animation/LayoutTransition$TransitionListener;->startTransition(Landroid/animation/LayoutTransition;Landroid/view/ViewGroup;Landroid/view/View;I)V
+HSPLandroid/animation/LayoutTransition;-><init>()V
+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
+HSPLandroid/animation/LayoutTransition;->getAnimator(I)Landroid/animation/Animator;
+HSPLandroid/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
+HSPLandroid/animation/LayoutTransition;->runChangeTransition(Landroid/view/ViewGroup;Landroid/view/View;I)V
+HSPLandroid/animation/LayoutTransition;->setAnimateParentHierarchy(Z)V
+HSPLandroid/animation/LayoutTransition;->setAnimator(ILandroid/animation/Animator;)V
+HSPLandroid/animation/LayoutTransition;->setDuration(J)V
+HSPLandroid/animation/LayoutTransition;->setInterpolator(ILandroid/animation/TimeInterpolator;)V
+HSPLandroid/animation/LayoutTransition;->setStartDelay(IJ)V
+HSPLandroid/animation/LayoutTransition;->showChild(Landroid/view/ViewGroup;Landroid/view/View;I)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;->clone()Landroid/animation/ValueAnimator;
+HSPLandroid/animation/ObjectAnimator;->getTarget()Ljava/lang/Object;
+HSPLandroid/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;
+HSPLandroid/animation/ObjectAnimator;->ofInt(Ljava/lang/Object;Landroid/util/Property;[I)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;
+HSPLandroid/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
+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;->shouldAutoCancel(Landroid/animation/AnimationHandler$AnimationFrameCallback;)Z
+HSPLandroid/animation/ObjectAnimator;->start()V
+HSPLandroid/animation/PathKeyframes$1;-><init>(Landroid/animation/PathKeyframes;)V
+HSPLandroid/animation/PathKeyframes$1;->getFloatValue(F)F
+HSPLandroid/animation/PathKeyframes$2;-><init>(Landroid/animation/PathKeyframes;)V
+HSPLandroid/animation/PathKeyframes$2;->getFloatValue(F)F
+HSPLandroid/animation/PathKeyframes$FloatKeyframesBase;-><init>()V
+HSPLandroid/animation/PathKeyframes$FloatKeyframesBase;->getValue(F)Ljava/lang/Object;
+HSPLandroid/animation/PathKeyframes$SimpleKeyframes;-><init>()V
+HSPLandroid/animation/PathKeyframes$SimpleKeyframes;-><init>(Landroid/animation/PathKeyframes$SimpleKeyframes;)V
+HSPLandroid/animation/PathKeyframes$SimpleKeyframes;->clone()Landroid/animation/Keyframes;
+HSPLandroid/animation/PathKeyframes;-><init>(Landroid/graphics/Path;F)V
+HSPLandroid/animation/PathKeyframes;->createXFloatKeyframes()Landroid/animation/Keyframes$FloatKeyframes;
+HSPLandroid/animation/PathKeyframes;->createYFloatKeyframes()Landroid/animation/Keyframes$FloatKeyframes;
+HSPLandroid/animation/PathKeyframes;->getValue(F)Ljava/lang/Object;
+HSPLandroid/animation/PathKeyframes;->interpolate(FFF)F
+HSPLandroid/animation/PathKeyframes;->interpolateInRange(FII)Landroid/graphics/PointF;
+HSPLandroid/animation/PathKeyframes;->pointForIndex(I)Landroid/graphics/PointF;
+HSPLandroid/animation/PropertyValuesHolder$1;-><init>(Landroid/animation/PropertyValuesHolder;)V
+HSPLandroid/animation/PropertyValuesHolder$1;->getValueAtFraction(F)Ljava/lang/Object;
+HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;-><init>(Landroid/util/Property;[F)V
+HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;-><init>(Ljava/lang/String;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;
+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>(Landroid/util/Property;[I)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;
+HSPLandroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;->getAnimatedValue()Ljava/lang/Object;
+HSPLandroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;->setIntValues([I)V
+HSPLandroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;->setProperty(Landroid/util/Property;)V
+HSPLandroid/animation/PropertyValuesHolder$PropertyValues$DataSource;->getValueAtFraction(F)Ljava/lang/Object;
+HSPLandroid/animation/PropertyValuesHolder$PropertyValues;-><init>()V
+HSPLandroid/animation/PropertyValuesHolder;->-wrap0(Ljava/lang/Class;Ljava/lang/String;)J
+HSPLandroid/animation/PropertyValuesHolder;->-wrap4(Ljava/lang/Object;JF)V
+HSPLandroid/animation/PropertyValuesHolder;-><init>(Landroid/util/Property;)V
+HSPLandroid/animation/PropertyValuesHolder;-><init>(Landroid/util/Property;Landroid/animation/PropertyValuesHolder;)V
+HSPLandroid/animation/PropertyValuesHolder;-><init>(Ljava/lang/String;)V
+HSPLandroid/animation/PropertyValuesHolder;-><init>(Ljava/lang/String;Landroid/animation/PropertyValuesHolder;)V
+HSPLandroid/animation/PropertyValuesHolder;->calculateValue(F)V
+HSPLandroid/animation/PropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder;
+HSPLandroid/animation/PropertyValuesHolder;->convertBack(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/animation/PropertyValuesHolder;->getAnimatedValue()Ljava/lang/Object;
+HSPLandroid/animation/PropertyValuesHolder;->getMethodName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/animation/PropertyValuesHolder;->getPropertyFunction(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/reflect/Method;
+HSPLandroid/animation/PropertyValuesHolder;->getPropertyName()Ljava/lang/String;
+HSPLandroid/animation/PropertyValuesHolder;->getPropertyValues(Landroid/animation/PropertyValuesHolder$PropertyValues;)V
+HSPLandroid/animation/PropertyValuesHolder;->getValueType()Ljava/lang/Class;
+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(Landroid/util/Property;[I)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;
+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
+HSPLandroid/animation/PropertyValuesHolder;->setIntValues([I)V
+HSPLandroid/animation/PropertyValuesHolder;->setObjectValues([Ljava/lang/Object;)V
+HSPLandroid/animation/PropertyValuesHolder;->setProperty(Landroid/util/Property;)V
+HSPLandroid/animation/PropertyValuesHolder;->setPropertyName(Ljava/lang/String;)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/RectEvaluator;-><init>()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
+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$Tuple;)V
+HSPLandroid/animation/StateListAnimator;->-get0(Landroid/animation/StateListAnimator;)Landroid/animation/Animator;
+HSPLandroid/animation/StateListAnimator;->-set0(Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator$StateListAnimatorConstantState;)Landroid/animation/StateListAnimator$StateListAnimatorConstantState;
+HSPLandroid/animation/StateListAnimator;->-set1(Landroid/animation/StateListAnimator;Landroid/animation/Animator;)Landroid/animation/Animator;
+HSPLandroid/animation/StateListAnimator;-><init>()V
+HSPLandroid/animation/StateListAnimator;->addState([ILandroid/animation/Animator;)V
+HSPLandroid/animation/StateListAnimator;->appendChangingConfigurations(I)V
+HSPLandroid/animation/StateListAnimator;->cancel()V
+HSPLandroid/animation/StateListAnimator;->clearTarget()V
+HSPLandroid/animation/StateListAnimator;->clone()Landroid/animation/StateListAnimator;
+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/StateListAnimator;->start(Landroid/animation/StateListAnimator$Tuple;)V
+HSPLandroid/animation/TimeAnimator$TimeListener;->onTimeUpdate(Landroid/animation/TimeAnimator;JJ)V
+HSPLandroid/animation/TimeAnimator;-><init>()V
+HSPLandroid/animation/TimeAnimator;->animateValue(F)V
+HSPLandroid/animation/TimeAnimator;->initAnimation()V
+HSPLandroid/animation/TimeAnimator;->setTimeListener(Landroid/animation/TimeAnimator$TimeListener;)V
+HSPLandroid/animation/TimeInterpolator;->getInterpolation(F)F
+HSPLandroid/animation/ValueAnimator$AnimatorUpdateListener;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
+HSPLandroid/animation/ValueAnimator;-><init>()V
+HSPLandroid/animation/ValueAnimator;->addAnimationCallback(J)V
+HSPLandroid/animation/ValueAnimator;->addUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V
+HSPLandroid/animation/ValueAnimator;->animateBasedOnTime(J)Z
+HSPLandroid/animation/ValueAnimator;->animateValue(F)V
+HSPLandroid/animation/ValueAnimator;->cancel()V
+HSPLandroid/animation/ValueAnimator;->clampFraction(F)F
+HSPLandroid/animation/ValueAnimator;->clone()Landroid/animation/Animator;
+HSPLandroid/animation/ValueAnimator;->clone()Landroid/animation/ValueAnimator;
+HSPLandroid/animation/ValueAnimator;->doAnimationFrame(J)Z
+HSPLandroid/animation/ValueAnimator;->end()V
+HSPLandroid/animation/ValueAnimator;->endAnimation()V
+HSPLandroid/animation/ValueAnimator;->getAnimatedFraction()F
+HSPLandroid/animation/ValueAnimator;->getAnimatedValue()Ljava/lang/Object;
+HSPLandroid/animation/ValueAnimator;->getAnimationHandler()Landroid/animation/AnimationHandler;
+HSPLandroid/animation/ValueAnimator;->getCurrentAnimationsCount()I
+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;->getRepeatCount()I
+HSPLandroid/animation/ValueAnimator;->getRepeatMode()I
+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
+HSPLandroid/animation/ValueAnimator;->isPulsingInternal()Z
+HSPLandroid/animation/ValueAnimator;->isRunning()Z
+HSPLandroid/animation/ValueAnimator;->isStarted()Z
+HSPLandroid/animation/ValueAnimator;->notifyStartListeners()V
+HSPLandroid/animation/ValueAnimator;->ofFloat([F)Landroid/animation/ValueAnimator;
+HSPLandroid/animation/ValueAnimator;->ofInt([I)Landroid/animation/ValueAnimator;
+HSPLandroid/animation/ValueAnimator;->pause()V
+HSPLandroid/animation/ValueAnimator;->pulseAnimationFrame(J)Z
+HSPLandroid/animation/ValueAnimator;->removeAnimationCallback()V
+HSPLandroid/animation/ValueAnimator;->reverse()V
+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
+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
+HSPLandroid/animation/ValueAnimator;->setObjectValues([Ljava/lang/Object;)V
+HSPLandroid/animation/ValueAnimator;->setRepeatCount(I)V
+HSPLandroid/animation/ValueAnimator;->setRepeatMode(I)V
+HSPLandroid/animation/ValueAnimator;->setStartDelay(J)V
+HSPLandroid/animation/ValueAnimator;->setValues([Landroid/animation/PropertyValuesHolder;)V
+HSPLandroid/animation/ValueAnimator;->shouldPlayBackward(IZ)Z
+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/app/-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU$1;->$m$0(Landroid/content/res/Configuration;)V
+HSPLandroid/app/-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU$1;-><init>(Ljava/lang/Object;)V
+HSPLandroid/app/-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU$1;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLandroid/app/-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU;->$m$0(Landroid/content/res/Configuration;I)V
+HSPLandroid/app/-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU;-><init>(Ljava/lang/Object;)V
+HSPLandroid/app/-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU;->onConfigurationChanged(Landroid/content/res/Configuration;I)V
+HSPLandroid/app/-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ;->$m$7()V
+HSPLandroid/app/-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ;-><init>(BLjava/lang/Object;)V
+HSPLandroid/app/-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ;->run()V
+HSPLandroid/app/-$Lambda$c44uHH2WE4sJvw5tZZB6gRzEaHI;-><init>(Ljava/lang/Object;)V
+HSPLandroid/app/-$Lambda$vZ1qb742P9hE4drBY-TrOZB_qKo;->$m$0(Landroid/app/PendingIntent;Landroid/os/Parcel;I)V
+HSPLandroid/app/-$Lambda$vZ1qb742P9hE4drBY-TrOZB_qKo;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroid/app/-$Lambda$vZ1qb742P9hE4drBY-TrOZB_qKo;->onMarshaled(Landroid/app/PendingIntent;Landroid/os/Parcel;I)V
+HSPLandroid/app/-$Lambda$zUW-hE_1K7BzT3PNwqZSM6y8x_4;->$m$0(Ljava/lang/Object;)Z
+HSPLandroid/app/-$Lambda$zUW-hE_1K7BzT3PNwqZSM6y8x_4;-><init>(Ljava/lang/Object;)V
+HSPLandroid/app/-$Lambda$zUW-hE_1K7BzT3PNwqZSM6y8x_4;->test(Ljava/lang/Object;)Z
+HSPLandroid/app/ActionBar$LayoutParams;-><init>(II)V
+HSPLandroid/app/ActionBar$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/app/ActionBar;-><init>()V
+HSPLandroid/app/ActionBar;->addOnMenuVisibilityListener(Landroid/app/ActionBar$OnMenuVisibilityListener;)V
+HSPLandroid/app/ActionBar;->addTab(Landroid/app/ActionBar$Tab;)V
+HSPLandroid/app/ActionBar;->addTab(Landroid/app/ActionBar$Tab;I)V
+HSPLandroid/app/ActionBar;->addTab(Landroid/app/ActionBar$Tab;IZ)V
+HSPLandroid/app/ActionBar;->addTab(Landroid/app/ActionBar$Tab;Z)V
+HSPLandroid/app/ActionBar;->getCustomView()Landroid/view/View;
+HSPLandroid/app/ActionBar;->getDisplayOptions()I
+HSPLandroid/app/ActionBar;->getHeight()I
+HSPLandroid/app/ActionBar;->getNavigationItemCount()I
+HSPLandroid/app/ActionBar;->getNavigationMode()I
+HSPLandroid/app/ActionBar;->getSelectedNavigationIndex()I
+HSPLandroid/app/ActionBar;->getSelectedTab()Landroid/app/ActionBar$Tab;
+HSPLandroid/app/ActionBar;->getSubtitle()Ljava/lang/CharSequence;
+HSPLandroid/app/ActionBar;->getTabAt(I)Landroid/app/ActionBar$Tab;
+HSPLandroid/app/ActionBar;->getTabCount()I
+HSPLandroid/app/ActionBar;->getTitle()Ljava/lang/CharSequence;
+HSPLandroid/app/ActionBar;->hide()V
+HSPLandroid/app/ActionBar;->invalidateOptionsMenu()Z
+HSPLandroid/app/ActionBar;->isShowing()Z
+HSPLandroid/app/ActionBar;->newTab()Landroid/app/ActionBar$Tab;
+HSPLandroid/app/ActionBar;->removeAllTabs()V
+HSPLandroid/app/ActionBar;->removeOnMenuVisibilityListener(Landroid/app/ActionBar$OnMenuVisibilityListener;)V
+HSPLandroid/app/ActionBar;->removeTab(Landroid/app/ActionBar$Tab;)V
+HSPLandroid/app/ActionBar;->removeTabAt(I)V
+HSPLandroid/app/ActionBar;->selectTab(Landroid/app/ActionBar$Tab;)V
+HSPLandroid/app/ActionBar;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/app/ActionBar;->setCustomView(I)V
+HSPLandroid/app/ActionBar;->setCustomView(Landroid/view/View;)V
+HSPLandroid/app/ActionBar;->setCustomView(Landroid/view/View;Landroid/app/ActionBar$LayoutParams;)V
+HSPLandroid/app/ActionBar;->setDisplayHomeAsUpEnabled(Z)V
+HSPLandroid/app/ActionBar;->setDisplayOptions(I)V
+HSPLandroid/app/ActionBar;->setDisplayOptions(II)V
+HSPLandroid/app/ActionBar;->setDisplayShowCustomEnabled(Z)V
+HSPLandroid/app/ActionBar;->setDisplayShowHomeEnabled(Z)V
+HSPLandroid/app/ActionBar;->setDisplayShowTitleEnabled(Z)V
+HSPLandroid/app/ActionBar;->setDisplayUseLogoEnabled(Z)V
+HSPLandroid/app/ActionBar;->setIcon(I)V
+HSPLandroid/app/ActionBar;->setIcon(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/app/ActionBar;->setListNavigationCallbacks(Landroid/widget/SpinnerAdapter;Landroid/app/ActionBar$OnNavigationListener;)V
+HSPLandroid/app/ActionBar;->setLogo(I)V
+HSPLandroid/app/ActionBar;->setLogo(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/app/ActionBar;->setNavigationMode(I)V
+HSPLandroid/app/ActionBar;->setSelectedNavigationItem(I)V
+HSPLandroid/app/ActionBar;->setSubtitle(I)V
+HSPLandroid/app/ActionBar;->setSubtitle(Ljava/lang/CharSequence;)V
+HSPLandroid/app/ActionBar;->setTitle(I)V
+HSPLandroid/app/ActionBar;->setTitle(Ljava/lang/CharSequence;)V
+HSPLandroid/app/ActionBar;->show()V
+HSPLandroid/app/Activity$HostCallbacks;-><init>(Landroid/app/Activity;)V
+HSPLandroid/app/Activity$HostCallbacks;->onAttachFragment(Landroid/app/Fragment;)V
+HSPLandroid/app/Activity$HostCallbacks;->onFindViewById(I)Landroid/view/View;
+HSPLandroid/app/Activity$HostCallbacks;->onGetLayoutInflater()Landroid/view/LayoutInflater;
+HSPLandroid/app/Activity$HostCallbacks;->onGetWindowAnimations()I
+HSPLandroid/app/Activity$HostCallbacks;->onHasView()Z
+HSPLandroid/app/Activity$HostCallbacks;->onHasWindowAnimations()Z
+HSPLandroid/app/Activity$HostCallbacks;->onInvalidateOptionsMenu()V
+HSPLandroid/app/Activity$HostCallbacks;->onUseFragmentManagerInflaterFactory()Z
+HSPLandroid/app/Activity;-><init>()V
+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;)V
+HSPLandroid/app/Activity;->autofillCallbackResetableStateAvailable()V
+HSPLandroid/app/Activity;->dispatchActivityResult(Ljava/lang/String;IILandroid/content/Intent;)V
+HSPLandroid/app/Activity;->dispatchEnterAnimationComplete()V
+HSPLandroid/app/Activity;->dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroid/app/Activity;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/app/Activity;->findViewById(I)Landroid/view/View;
+HSPLandroid/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;->getCallingActivity()Landroid/content/ComponentName;
+HSPLandroid/app/Activity;->getComponentName()Landroid/content/ComponentName;
+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;
+HSPLandroid/app/Activity;->getLoaderManager()Landroid/app/LoaderManager;
+HSPLandroid/app/Activity;->getMenuInflater()Landroid/view/MenuInflater;
+HSPLandroid/app/Activity;->getNextAutofillId()I
+HSPLandroid/app/Activity;->getReferrer()Landroid/net/Uri;
+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;->getVolumeControlStream()I
+HSPLandroid/app/Activity;->getWindow()Landroid/view/Window;
+HSPLandroid/app/Activity;->getWindowManager()Landroid/view/WindowManager;
+HSPLandroid/app/Activity;->getWindowStackId()I
+HSPLandroid/app/Activity;->hasWindowFocus()Z
+HSPLandroid/app/Activity;->initWindowDecorActionBar()V
+HSPLandroid/app/Activity;->invalidateOptionsMenu()V
+HSPLandroid/app/Activity;->isChangingConfigurations()Z
+HSPLandroid/app/Activity;->isChild()Z
+HSPLandroid/app/Activity;->isDestroyed()Z
+HSPLandroid/app/Activity;->isFinishing()Z
+HSPLandroid/app/Activity;->isInMultiWindowMode()Z
+HSPLandroid/app/Activity;->isResumed()Z
+HSPLandroid/app/Activity;->isTaskRoot()Z
+HSPLandroid/app/Activity;->isTopOfTask()Z
+HSPLandroid/app/Activity;->makeVisible()V
+HSPLandroid/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
+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
+HSPLandroid/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;->onEnterAnimationComplete()V
+HSPLandroid/app/Activity;->onPause()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
+HSPLandroid/app/Activity;->onProvideReferrer()Landroid/net/Uri;
+HSPLandroid/app/Activity;->onRestoreInstanceState(Landroid/os/Bundle;)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;->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;->performCreate(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->performCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V
+HSPLandroid/app/Activity;->performNewIntent(Landroid/content/Intent;)V
+HSPLandroid/app/Activity;->performPause()V
+HSPLandroid/app/Activity;->performRestart()V
+HSPLandroid/app/Activity;->performRestoreInstanceState(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->performResume()V
+HSPLandroid/app/Activity;->performSaveInstanceState(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->performStart()V
+HSPLandroid/app/Activity;->performStop(Z)V
+HSPLandroid/app/Activity;->performUserLeaving()V
+HSPLandroid/app/Activity;->registerForContextMenu(Landroid/view/View;)V
+HSPLandroid/app/Activity;->reportFullyDrawn()V
+HSPLandroid/app/Activity;->requestWindowFeature(I)Z
+HSPLandroid/app/Activity;->restoreHasCurrentPermissionRequest(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->restoreManagedDialogs(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->runOnUiThread(Ljava/lang/Runnable;)V
+HSPLandroid/app/Activity;->saveManagedDialogs(Landroid/os/Bundle;)V
+HSPLandroid/app/Activity;->setActionBar(Landroid/widget/Toolbar;)V
+HSPLandroid/app/Activity;->setContentView(I)V
+HSPLandroid/app/Activity;->setContentView(Landroid/view/View;)V
+HSPLandroid/app/Activity;->setDefaultKeyMode(I)V
+HSPLandroid/app/Activity;->setDisablePreviewScreenshots(Z)V
+HSPLandroid/app/Activity;->setIntent(Landroid/content/Intent;)V
+HSPLandroid/app/Activity;->setRequestedOrientation(I)V
+HSPLandroid/app/Activity;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V
+HSPLandroid/app/Activity;->setTheme(I)V
+HSPLandroid/app/Activity;->setTitle(I)V
+HSPLandroid/app/Activity;->setTitle(Ljava/lang/CharSequence;)V
+HSPLandroid/app/Activity;->setVolumeControlStream(I)V
+HSPLandroid/app/Activity;->shouldShowRequestPermissionRationale(Ljava/lang/String;)Z
+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;-><init>()V
+HSPLandroid/app/ActivityManager$1;->create()Landroid/app/IActivityManager;
+HSPLandroid/app/ActivityManager$1;->create()Ljava/lang/Object;
+HSPLandroid/app/ActivityManager$AppTask;-><init>(Landroid/app/IAppTask;)V
+HSPLandroid/app/ActivityManager$AppTask;->getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;
+HSPLandroid/app/ActivityManager$MemoryInfo$1;-><init>()V
+HSPLandroid/app/ActivityManager$MemoryInfo;-><init>()V
+HSPLandroid/app/ActivityManager$MemoryInfo;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/app/ActivityManager$RecentTaskInfo$1;-><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;
+HSPLandroid/app/ActivityManager$RecentTaskInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/ActivityManager$RecentTaskInfo;-><init>(Landroid/os/Parcel;Landroid/app/ActivityManager$RecentTaskInfo;)V
+HSPLandroid/app/ActivityManager$RecentTaskInfo;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/app/ActivityManager$RunningAppProcessInfo$1;-><init>()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
+HSPLandroid/app/ActivityManager$RunningAppProcessInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/ActivityManager$RunningAppProcessInfo;-><init>(Landroid/os/Parcel;Landroid/app/ActivityManager$RunningAppProcessInfo;)V
+HSPLandroid/app/ActivityManager$RunningAppProcessInfo;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/app/ActivityManager$RunningTaskInfo$1;-><init>()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;
+HSPLandroid/app/ActivityManager$RunningTaskInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/ActivityManager$RunningTaskInfo;-><init>(Landroid/os/Parcel;Landroid/app/ActivityManager$RunningTaskInfo;)V
+HSPLandroid/app/ActivityManager$RunningTaskInfo;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/app/ActivityManager$StackId;->hasWindowDecor(I)Z
+HSPLandroid/app/ActivityManager$StackId;->hasWindowShadow(I)Z
+HSPLandroid/app/ActivityManager$TaskDescription$1;-><init>()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
+HSPLandroid/app/ActivityManager$TaskDescription;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/ActivityManager$TaskDescription;-><init>(Landroid/os/Parcel;Landroid/app/ActivityManager$TaskDescription;)V
+HSPLandroid/app/ActivityManager$TaskDescription;-><init>(Ljava/lang/String;Landroid/graphics/Bitmap;I)V
+HSPLandroid/app/ActivityManager$TaskDescription;-><init>(Ljava/lang/String;Landroid/graphics/Bitmap;Ljava/lang/String;IIII)V
+HSPLandroid/app/ActivityManager$TaskDescription;->copyFromPreserveHiddenFields(Landroid/app/ActivityManager$TaskDescription;)V
+HSPLandroid/app/ActivityManager$TaskDescription;->getIcon()Landroid/graphics/Bitmap;
+HSPLandroid/app/ActivityManager$TaskDescription;->getIconFilename()Ljava/lang/String;
+HSPLandroid/app/ActivityManager$TaskDescription;->getPrimaryColor()I
+HSPLandroid/app/ActivityManager$TaskDescription;->loadTaskDescriptionIcon(Ljava/lang/String;I)Landroid/graphics/Bitmap;
+HSPLandroid/app/ActivityManager$TaskDescription;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/app/ActivityManager$TaskDescription;->setBackgroundColor(I)V
+HSPLandroid/app/ActivityManager$TaskDescription;->setIcon(Landroid/graphics/Bitmap;)V
+HSPLandroid/app/ActivityManager$TaskDescription;->setNavigationBarColor(I)V
+HSPLandroid/app/ActivityManager$TaskDescription;->setPrimaryColor(I)V
+HSPLandroid/app/ActivityManager$TaskDescription;->setStatusBarColor(I)V
+HSPLandroid/app/ActivityManager$TaskDescription;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/ActivityManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
+HSPLandroid/app/ActivityManager;->broadcastStickyIntent(Landroid/content/Intent;I)V
+HSPLandroid/app/ActivityManager;->broadcastStickyIntent(Landroid/content/Intent;II)V
+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
+HSPLandroid/app/ActivityManager;->getMaxRecentTasksStatic()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;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
+HSPLandroid/app/ActivityManager;->getRecentTasksForUser(III)Ljava/util/List;
+HSPLandroid/app/ActivityManager;->getRunningAppProcesses()Ljava/util/List;
+HSPLandroid/app/ActivityManager;->getRunningTasks(I)Ljava/util/List;
+HSPLandroid/app/ActivityManager;->getService()Landroid/app/IActivityManager;
+HSPLandroid/app/ActivityManager;->isHighEndGfx()Z
+HSPLandroid/app/ActivityManager;->isLowRamDevice()Z
+HSPLandroid/app/ActivityManager;->isLowRamDeviceStatic()Z
+HSPLandroid/app/ActivityManager;->isRunningInTestHarness()Z
+HSPLandroid/app/ActivityManager;->isStartResultFatalError(I)Z
+HSPLandroid/app/ActivityManager;->isUserAMonkey()Z
+HSPLandroid/app/ActivityManager;->staticGetLargeMemoryClass()I
+HSPLandroid/app/ActivityManager;->staticGetMemoryClass()I
+HSPLandroid/app/ActivityManagerInternal;-><init>()V
+HSPLandroid/app/ActivityManagerInternal;->acquireSleepToken(Ljava/lang/String;I)Landroid/app/ActivityManagerInternal$SleepToken;
+HSPLandroid/app/ActivityManagerInternal;->checkContentProviderAccess(Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/app/ActivityManagerInternal;->clearSavedANRState()V
+HSPLandroid/app/ActivityManagerInternal;->getHomeActivityForUser(I)Landroid/content/ComponentName;
+HSPLandroid/app/ActivityManagerInternal;->getTopVisibleActivities()Ljava/util/List;
+HSPLandroid/app/ActivityManagerInternal;->getUidProcessState(I)I
+HSPLandroid/app/ActivityManagerInternal;->grantUriPermissionFromIntent(ILjava/lang/String;Landroid/content/Intent;I)V
+HSPLandroid/app/ActivityManagerInternal;->isSystemReady()Z
+HSPLandroid/app/ActivityManagerInternal;->killForegroundAppsForUser(I)V
+HSPLandroid/app/ActivityManagerInternal;->notifyAppTransitionCancelled()V
+HSPLandroid/app/ActivityManagerInternal;->notifyAppTransitionFinished()V
+HSPLandroid/app/ActivityManagerInternal;->notifyAppTransitionStarting(Landroid/util/SparseIntArray;J)V
+HSPLandroid/app/ActivityManagerInternal;->notifyDockedStackMinimizedChanged(Z)V
+HSPLandroid/app/ActivityManagerInternal;->notifyKeyguardFlagsChanged(Ljava/lang/Runnable;)V
+HSPLandroid/app/ActivityManagerInternal;->notifyKeyguardTrustedChanged()V
+HSPLandroid/app/ActivityManagerInternal;->notifyNetworkPolicyRulesUpdated(IJ)V
+HSPLandroid/app/ActivityManagerInternal;->onLocalVoiceInteractionStarted(Landroid/os/IBinder;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;)V
+HSPLandroid/app/ActivityManagerInternal;->onUserRemoved(I)V
+HSPLandroid/app/ActivityManagerInternal;->onWakefulnessChanged(I)V
+HSPLandroid/app/ActivityManagerInternal;->saveANRState(Ljava/lang/String;)V
+HSPLandroid/app/ActivityManagerInternal;->setDeviceIdleWhitelist([I)V
+HSPLandroid/app/ActivityManagerInternal;->setFocusedActivity(Landroid/os/IBinder;)V
+HSPLandroid/app/ActivityManagerInternal;->setHasOverlayUi(IZ)V
+HSPLandroid/app/ActivityManagerInternal;->setPendingIntentWhitelistDuration(Landroid/content/IIntentSender;Landroid/os/IBinder;J)V
+HSPLandroid/app/ActivityManagerInternal;->setVr2dDisplayId(I)V
+HSPLandroid/app/ActivityManagerInternal;->startActivitiesAsPackage(Ljava/lang/String;I[Landroid/content/Intent;Landroid/os/Bundle;)I
+HSPLandroid/app/ActivityManagerInternal;->startIsolatedProcess(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Runnable;)I
+HSPLandroid/app/ActivityManagerInternal;->updateDeviceIdleTempWhitelist([IIZ)V
+HSPLandroid/app/ActivityManagerInternal;->updatePersistentConfigurationForUser(Landroid/content/res/Configuration;I)V
+HSPLandroid/app/ActivityOptions$OnAnimationFinishedListener;->onAnimationFinished()V
+HSPLandroid/app/ActivityOptions$OnAnimationStartedListener;->onAnimationStarted()V
+HSPLandroid/app/ActivityOptions;->fromBundle(Landroid/os/Bundle;)Landroid/app/ActivityOptions;
+HSPLandroid/app/ActivityThread$1;-><init>(Landroid/app/ActivityThread;)V
+HSPLandroid/app/ActivityThread$1;->run()V
+HSPLandroid/app/ActivityThread$2;-><init>(Landroid/app/ActivityThread;Landroid/app/IActivityManager;)V
+HSPLandroid/app/ActivityThread$2;->run()V
+HSPLandroid/app/ActivityThread$ActivityClientRecord;->-get0(Landroid/app/ActivityThread$ActivityClientRecord;)Landroid/content/res/Configuration;
+HSPLandroid/app/ActivityThread$ActivityClientRecord;-><init>()V
+HSPLandroid/app/ActivityThread$ActivityClientRecord;->isPersistable()Z
+HSPLandroid/app/ActivityThread$ActivityClientRecord;->isPreHoneycomb()Z
+HSPLandroid/app/ActivityThread$ActivityClientRecord;->lambda$-android_app_ActivityThread$ActivityClientRecord_15507(Landroid/content/res/Configuration;I)V
+HSPLandroid/app/ActivityThread$ActivityConfigChangeData;-><init>(Landroid/os/IBinder;Landroid/content/res/Configuration;)V
+HSPLandroid/app/ActivityThread$AppBindData;-><init>()V
+HSPLandroid/app/ActivityThread$ApplicationThread;-><init>(Landroid/app/ActivityThread;)V
+HSPLandroid/app/ActivityThread$ApplicationThread;-><init>(Landroid/app/ActivityThread;Landroid/app/ActivityThread$ApplicationThread;)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;)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->clearDnsCache()V
+HSPLandroid/app/ActivityThread$ApplicationThread;->dumpGfxInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)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;->requestAssistContextExtras(Landroid/os/IBinder;Landroid/os/IBinder;III)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleBindService(Landroid/os/IBinder;Landroid/content/Intent;ZI)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleCreateService(Landroid/os/IBinder;Landroid/content/pm/ServiceInfo;Landroid/content/res/CompatibilityInfo;I)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleEnterAnimationComplete(Landroid/os/IBinder;)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleLaunchActivity(Landroid/content/Intent;Landroid/os/IBinder;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;ZZLandroid/app/ProfilerInfo;)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->schedulePauseActivity(Landroid/os/IBinder;ZZIZ)V
+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;->scheduleSendResult(Landroid/os/IBinder;Ljava/util/List;)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;->scheduleStopActivity(Landroid/os/IBinder;ZI)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleStopService(Landroid/os/IBinder;)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;->setProcessState(I)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->updatePendingConfiguration(Landroid/content/res/Configuration;)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->updateProcessState(IZ)V
+HSPLandroid/app/ActivityThread$BindServiceData;-><init>()V
+HSPLandroid/app/ActivityThread$ContextCleanupInfo;-><init>()V
+HSPLandroid/app/ActivityThread$CreateServiceData;-><init>()V
+HSPLandroid/app/ActivityThread$CreateServiceData;->toString()Ljava/lang/String;
+HSPLandroid/app/ActivityThread$DropBoxReporter;-><init>(Landroid/app/ActivityThread;)V
+HSPLandroid/app/ActivityThread$EventLoggingReporter;-><init>()V
+HSPLandroid/app/ActivityThread$EventLoggingReporter;-><init>(Landroid/app/ActivityThread$EventLoggingReporter;)V
+HSPLandroid/app/ActivityThread$GcIdler;-><init>(Landroid/app/ActivityThread;)V
+HSPLandroid/app/ActivityThread$H;-><init>(Landroid/app/ActivityThread;)V
+HSPLandroid/app/ActivityThread$H;-><init>(Landroid/app/ActivityThread;Landroid/app/ActivityThread$H;)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$Idler;)V
+HSPLandroid/app/ActivityThread$Idler;->queueIdle()Z
+HSPLandroid/app/ActivityThread$Profiler;-><init>()V
+HSPLandroid/app/ActivityThread$ProviderClientRecord;-><init>(Landroid/app/ActivityThread;[Ljava/lang/String;Landroid/content/IContentProvider;Landroid/content/ContentProvider;Landroid/app/ContentProviderHolder;)V
+HSPLandroid/app/ActivityThread$ProviderKey;-><init>(Ljava/lang/String;I)V
+HSPLandroid/app/ActivityThread$ProviderKey;->equals(Ljava/lang/Object;)Z
+HSPLandroid/app/ActivityThread$ProviderKey;->hashCode()I
+HSPLandroid/app/ActivityThread$ProviderRefCount;-><init>(Landroid/app/ContentProviderHolder;Landroid/app/ActivityThread$ProviderClientRecord;II)V
+HSPLandroid/app/ActivityThread$ReceiverData;-><init>(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZLandroid/os/IBinder;I)V
+HSPLandroid/app/ActivityThread$RequestAssistContextExtras;-><init>()V
+HSPLandroid/app/ActivityThread$ResultData;-><init>()V
+HSPLandroid/app/ActivityThread$ServiceArgsData;-><init>()V
+HSPLandroid/app/ActivityThread$ServiceArgsData;->toString()Ljava/lang/String;
+HSPLandroid/app/ActivityThread$StopInfo;-><init>()V
+HSPLandroid/app/ActivityThread$StopInfo;-><init>(Landroid/app/ActivityThread$StopInfo;)V
+HSPLandroid/app/ActivityThread$StopInfo;->run()V
+HSPLandroid/app/ActivityThread;->-get1(Landroid/app/ActivityThread;)Landroid/app/ResourcesManager;
+HSPLandroid/app/ActivityThread;->-wrap0(Landroid/app/ActivityThread;)I
+HSPLandroid/app/ActivityThread;->-wrap1(Landroid/app/ActivityThread;Landroid/app/ActivityThread$AppBindData;)V
+HSPLandroid/app/ActivityThread;->-wrap10(Landroid/app/ActivityThread;Landroid/os/IBinder;)V
+HSPLandroid/app/ActivityThread;->-wrap11(Landroid/app/ActivityThread;Landroid/app/ActivityThread$ActivityClientRecord;Landroid/content/Intent;Ljava/lang/String;)V
+HSPLandroid/app/ActivityThread;->-wrap15(Landroid/app/ActivityThread;Landroid/os/IBinder;ZZIZI)V
+HSPLandroid/app/ActivityThread;->-wrap17(Landroid/app/ActivityThread;Landroid/app/ActivityThread$ReceiverData;)V
+HSPLandroid/app/ActivityThread;->-wrap19(Landroid/app/ActivityThread;Landroid/app/ActivityThread$ResultData;)V
+HSPLandroid/app/ActivityThread;->-wrap2(Landroid/app/ActivityThread;Landroid/app/ActivityThread$BindServiceData;)V
+HSPLandroid/app/ActivityThread;->-wrap20(Landroid/app/ActivityThread;Landroid/app/ActivityThread$ServiceArgsData;)V
+HSPLandroid/app/ActivityThread;->-wrap21(Landroid/app/ActivityThread;Landroid/os/Bundle;)V
+HSPLandroid/app/ActivityThread;->-wrap22(Landroid/app/ActivityThread;Landroid/os/IBinder;Z)V
+HSPLandroid/app/ActivityThread;->-wrap24(Landroid/app/ActivityThread;Landroid/os/IBinder;ZII)V
+HSPLandroid/app/ActivityThread;->-wrap26(Landroid/app/ActivityThread;Landroid/os/IBinder;)V
+HSPLandroid/app/ActivityThread;->-wrap27(Landroid/app/ActivityThread;Landroid/app/ActivityThread$BindServiceData;)V
+HSPLandroid/app/ActivityThread;->-wrap30(Landroid/app/ActivityThread;Ljava/io/FileDescriptor;)V
+HSPLandroid/app/ActivityThread;->-wrap31(Landroid/app/ActivityThread;ILjava/lang/Object;)V
+HSPLandroid/app/ActivityThread;->-wrap32(Landroid/app/ActivityThread;ILjava/lang/Object;I)V
+HSPLandroid/app/ActivityThread;->-wrap35(Landroid/app/ActivityThread;ILjava/lang/Object;III)V
+HSPLandroid/app/ActivityThread;->-wrap4(Landroid/app/ActivityThread;Landroid/app/ActivityThread$CreateServiceData;)V
+HSPLandroid/app/ActivityThread;-><init>()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;->applyConfigCompatMainThread(ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Configuration;
+HSPLandroid/app/ActivityThread;->attach(Z)V
+HSPLandroid/app/ActivityThread;->callCallActivityOnSaveInstanceState(Landroid/app/ActivityThread$ActivityClientRecord;)V
+HSPLandroid/app/ActivityThread;->checkAndBlockForNetworkAccess()V
+HSPLandroid/app/ActivityThread;->checkAndUpdateLifecycleSeq(ILandroid/app/ActivityThread$ActivityClientRecord;Ljava/lang/String;)Z
+HSPLandroid/app/ActivityThread;->cleanUpPendingRemoveWindows(Landroid/app/ActivityThread$ActivityClientRecord;Z)V
+HSPLandroid/app/ActivityThread;->collectComponentCallbacks(ZLandroid/content/res/Configuration;)Ljava/util/ArrayList;
+HSPLandroid/app/ActivityThread;->completeRemoveProvider(Landroid/app/ActivityThread$ProviderRefCount;)V
+HSPLandroid/app/ActivityThread;->createBaseContextForActivity(Landroid/app/ActivityThread$ActivityClientRecord;)Landroid/app/ContextImpl;
+HSPLandroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread;
+HSPLandroid/app/ActivityThread;->currentApplication()Landroid/app/Application;
+HSPLandroid/app/ActivityThread;->currentOpPackageName()Ljava/lang/String;
+HSPLandroid/app/ActivityThread;->currentPackageName()Ljava/lang/String;
+HSPLandroid/app/ActivityThread;->deliverNewIntents(Landroid/app/ActivityThread$ActivityClientRecord;Ljava/util/List;)V
+HSPLandroid/app/ActivityThread;->deliverResults(Landroid/app/ActivityThread$ActivityClientRecord;Ljava/util/List;)V
+HSPLandroid/app/ActivityThread;->dumpMemInfoTable(Ljava/io/PrintWriter;Landroid/os/Debug$MemoryInfo;ZZZZILjava/lang/String;JJJJJJ)V
+HSPLandroid/app/ActivityThread;->ensureJitEnabled()V
+HSPLandroid/app/ActivityThread;->freeTextLayoutCachesIfNeeded(I)V
+HSPLandroid/app/ActivityThread;->getApplication()Landroid/app/Application;
+HSPLandroid/app/ActivityThread;->getApplicationThread()Landroid/app/ActivityThread$ApplicationThread;
+HSPLandroid/app/ActivityThread;->getHandler()Landroid/os/Handler;
+HSPLandroid/app/ActivityThread;->getInstrumentation()Landroid/app/Instrumentation;
+HSPLandroid/app/ActivityThread;->getInstrumentationLibrary(Landroid/content/pm/ApplicationInfo;Landroid/content/pm/InstrumentationInfo;)Ljava/lang/String;
+HSPLandroid/app/ActivityThread;->getIntCoreSetting(Ljava/lang/String;I)I
+HSPLandroid/app/ActivityThread;->getIntentBeingBroadcast()Landroid/content/Intent;
+HSPLandroid/app/ActivityThread;->getLifecycleSeq()I
+HSPLandroid/app/ActivityThread;->getLooper()Landroid/os/Looper;
+HSPLandroid/app/ActivityThread;->getPackageInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;I)Landroid/app/LoadedApk;
+HSPLandroid/app/ActivityThread;->getPackageInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;ZZZ)Landroid/app/LoadedApk;
+HSPLandroid/app/ActivityThread;->getPackageInfo(Ljava/lang/String;Landroid/content/res/CompatibilityInfo;II)Landroid/app/LoadedApk;
+HSPLandroid/app/ActivityThread;->getPackageInfoNoCheck(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;)Landroid/app/LoadedApk;
+HSPLandroid/app/ActivityThread;->getPackageManager()Landroid/content/pm/IPackageManager;
+HSPLandroid/app/ActivityThread;->getSystemContext()Landroid/app/ContextImpl;
+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/app/ActivityThread$ActivityConfigChangeData;I)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;Landroid/content/res/CompatibilityInfo;)V
+HSPLandroid/app/ActivityThread;->handleCreateService(Landroid/app/ActivityThread$CreateServiceData;)V
+HSPLandroid/app/ActivityThread;->handleEnterAnimationComplete(Landroid/os/IBinder;)V
+HSPLandroid/app/ActivityThread;->handleLaunchActivity(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/content/Intent;Ljava/lang/String;)V
+HSPLandroid/app/ActivityThread;->handlePauseActivity(Landroid/os/IBinder;ZZIZI)V
+HSPLandroid/app/ActivityThread;->handleReceiver(Landroid/app/ActivityThread$ReceiverData;)V
+HSPLandroid/app/ActivityThread;->handleRequestAssistContextExtras(Landroid/app/ActivityThread$RequestAssistContextExtras;)V
+HSPLandroid/app/ActivityThread;->handleResumeActivity(Landroid/os/IBinder;ZZZILjava/lang/String;)V
+HSPLandroid/app/ActivityThread;->handleSendResult(Landroid/app/ActivityThread$ResultData;)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;->handleStopActivity(Landroid/os/IBinder;ZII)V
+HSPLandroid/app/ActivityThread;->handleStopService(Landroid/os/IBinder;)V
+HSPLandroid/app/ActivityThread;->handleTrimMemory(I)V
+HSPLandroid/app/ActivityThread;->handleUnbindService(Landroid/app/ActivityThread$BindServiceData;)V
+HSPLandroid/app/ActivityThread;->incProviderRefLocked(Landroid/app/ActivityThread$ProviderRefCount;Z)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;->isSystem()Z
+HSPLandroid/app/ActivityThread;->lambda$-android_app_ActivityThread_278860(Landroid/content/res/Configuration;)V
+HSPLandroid/app/ActivityThread;->main([Ljava/lang/String;)V
+HSPLandroid/app/ActivityThread;->onCoreSettingsChange()V
+HSPLandroid/app/ActivityThread;->performActivityConfigurationChanged(Landroid/app/Activity;Landroid/content/res/Configuration;Landroid/content/res/Configuration;IZ)Landroid/content/res/Configuration;
+HSPLandroid/app/ActivityThread;->performConfigurationChangedForActivity(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/content/res/Configuration;)V
+HSPLandroid/app/ActivityThread;->performConfigurationChangedForActivity(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/content/res/Configuration;IZ)Landroid/content/res/Configuration;
+HSPLandroid/app/ActivityThread;->performLaunchActivity(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/content/Intent;)Landroid/app/Activity;
+HSPLandroid/app/ActivityThread;->performPauseActivity(Landroid/app/ActivityThread$ActivityClientRecord;ZZLjava/lang/String;)Landroid/os/Bundle;
+HSPLandroid/app/ActivityThread;->performPauseActivity(Landroid/os/IBinder;ZZLjava/lang/String;)Landroid/os/Bundle;
+HSPLandroid/app/ActivityThread;->performPauseActivityIfNeeded(Landroid/app/ActivityThread$ActivityClientRecord;Ljava/lang/String;)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/ActivityThread$StopInfo;ZZLjava/lang/String;)V
+HSPLandroid/app/ActivityThread;->performUserLeavingActivity(Landroid/app/ActivityThread$ActivityClientRecord;)V
+HSPLandroid/app/ActivityThread;->printRow(Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/Object;)V
+HSPLandroid/app/ActivityThread;->releaseProvider(Landroid/content/IContentProvider;Z)Z
+HSPLandroid/app/ActivityThread;->reportSizeConfigurations(Landroid/app/ActivityThread$ActivityClientRecord;)V
+HSPLandroid/app/ActivityThread;->scheduleContextCleanup(Landroid/app/ContextImpl;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/ActivityThread;->sendMessage(ILjava/lang/Object;)V
+HSPLandroid/app/ActivityThread;->sendMessage(ILjava/lang/Object;I)V
+HSPLandroid/app/ActivityThread;->sendMessage(ILjava/lang/Object;III)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;->updateDefaultDensity()V
+HSPLandroid/app/ActivityThread;->updateLocaleListFromAppContext(Landroid/content/Context;Landroid/os/LocaleList;)V
+HSPLandroid/app/ActivityThread;->updateVisibility(Landroid/app/ActivityThread$ActivityClientRecord;Z)V
+HSPLandroid/app/ActivityTransitionState;-><init>()V
+HSPLandroid/app/ActivityTransitionState;->enterReady(Landroid/app/Activity;)V
+HSPLandroid/app/ActivityTransitionState;->onResume(Landroid/app/Activity;Z)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
+HSPLandroid/app/AlarmManager$OnAlarmListener;->onAlarm()V
+HSPLandroid/app/AlarmManager;-><init>(Landroid/app/IAlarmManager;Landroid/content/Context;)V
+HSPLandroid/app/AlarmManager;->cancel(Landroid/app/PendingIntent;)V
+HSPLandroid/app/AlarmManager;->getNextAlarmClock(I)Landroid/app/AlarmManager$AlarmClockInfo;
+HSPLandroid/app/AlarmManager;->legacyExactLength()J
+HSPLandroid/app/AlarmManager;->set(IJJJLandroid/app/PendingIntent;Landroid/os/WorkSource;)V
+HSPLandroid/app/AlarmManager;->set(IJLandroid/app/PendingIntent;)V
+HSPLandroid/app/AlarmManager;->setExactAndAllowWhileIdle(IJLandroid/app/PendingIntent;)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/AlertDialog$Builder;-><init>(Landroid/content/Context;)V
+HSPLandroid/app/AlertDialog$Builder;-><init>(Landroid/content/Context;I)V
+HSPLandroid/app/AlertDialog$Builder;->create()Landroid/app/AlertDialog;
+HSPLandroid/app/AlertDialog$Builder;->setMessage(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;
+HSPLandroid/app/AlertDialog$Builder;->setNegativeButton(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;
+HSPLandroid/app/AlertDialog$Builder;->setNegativeButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;
+HSPLandroid/app/AlertDialog$Builder;->setPositiveButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;
+HSPLandroid/app/AlertDialog$Builder;->setTitle(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;
+HSPLandroid/app/AlertDialog;->-get0(Landroid/app/AlertDialog;)Lcom/android/internal/app/AlertController;
+HSPLandroid/app/AlertDialog;-><init>(Landroid/content/Context;IZ)V
+HSPLandroid/app/AlertDialog;->resolveDialogTheme(Landroid/content/Context;I)I
+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/AppOpsManager$1;-><init>(Landroid/app/AppOpsManager;Landroid/app/AppOpsManager$OnOpChangedListener;)V
+HSPLandroid/app/AppOpsManager$OnOpChangedListener;->onOpChanged(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/AppOpsManager$OpEntry$1;-><init>()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>(Landroid/os/Parcel;)V
+HSPLandroid/app/AppOpsManager$OpEntry;->getOp()I
+HSPLandroid/app/AppOpsManager$OpEntry;->isRunning()Z
+HSPLandroid/app/AppOpsManager$PackageOps$1;-><init>()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
+HSPLandroid/app/AppOpsManager$PackageOps;->getOps()Ljava/util/List;
+HSPLandroid/app/AppOpsManager;-><init>(Landroid/content/Context;Lcom/android/internal/app/IAppOpsService;)V
+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
+HSPLandroid/app/AppOpsManager;->getPackagesForOps([I)Ljava/util/List;
+HSPLandroid/app/AppOpsManager;->getToken(Lcom/android/internal/app/IAppOpsService;)Landroid/os/IBinder;
+HSPLandroid/app/AppOpsManager;->noteOp(IILjava/lang/String;)I
+HSPLandroid/app/AppOpsManager;->noteProxyOp(ILjava/lang/String;)I
+HSPLandroid/app/AppOpsManager;->noteProxyOp(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/app/AppOpsManager;->noteProxyOpNoThrow(ILjava/lang/String;)I
+HSPLandroid/app/AppOpsManager;->opToDefaultMode(I)I
+HSPLandroid/app/AppOpsManager;->opToSwitch(I)I
+HSPLandroid/app/AppOpsManager;->permissionToOp(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/AppOpsManager;->permissionToOpCode(Ljava/lang/String;)I
+HSPLandroid/app/AppOpsManager;->startOpNoThrow(IILjava/lang/String;)I
+HSPLandroid/app/AppOpsManager;->startOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I
+HSPLandroid/app/AppOpsManager;->startWatchingMode(ILjava/lang/String;Landroid/app/AppOpsManager$OnOpChangedListener;)V
+HSPLandroid/app/AppOpsManager;->startWatchingMode(Ljava/lang/String;Ljava/lang/String;Landroid/app/AppOpsManager$OnOpChangedListener;)V
+HSPLandroid/app/AppOpsManager;->strOpToOp(Ljava/lang/String;)I
+HSPLandroid/app/Application$ActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroid/app/Application$ActivityLifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
+HSPLandroid/app/Application$ActivityLifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
+HSPLandroid/app/Application$ActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V
+HSPLandroid/app/Application$ActivityLifecycleCallbacks;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroid/app/Application$ActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V
+HSPLandroid/app/Application$ActivityLifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
+HSPLandroid/app/Application;-><init>()V
+HSPLandroid/app/Application;->attach(Landroid/content/Context;)V
+HSPLandroid/app/Application;->collectActivityLifecycleCallbacks()[Ljava/lang/Object;
+HSPLandroid/app/Application;->collectComponentCallbacks()[Ljava/lang/Object;
+HSPLandroid/app/Application;->dispatchActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroid/app/Application;->dispatchActivityPaused(Landroid/app/Activity;)V
+HSPLandroid/app/Application;->dispatchActivityResumed(Landroid/app/Activity;)V
+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
+HSPLandroid/app/Application;->onCreate()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
+HSPLandroid/app/ApplicationErrorReport$CrashInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/ApplicationErrorReport$CrashInfo;-><init>(Ljava/lang/Throwable;)V
+HSPLandroid/app/ApplicationErrorReport$CrashInfo;->appendStackTrace(Ljava/lang/String;)V
+HSPLandroid/app/ApplicationErrorReport$CrashInfo;->sanitizeString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/ApplicationErrorReport$CrashInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/ApplicationLoaders;-><init>()V
+HSPLandroid/app/ApplicationLoaders;->getClassLoader(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/ClassLoader;
+HSPLandroid/app/ApplicationLoaders;->getClassLoader(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/ClassLoader;
+HSPLandroid/app/ApplicationLoaders;->getDefault()Landroid/app/ApplicationLoaders;
+HSPLandroid/app/ApplicationPackageManager$MoveCallbackDelegate;-><init>(Landroid/content/pm/PackageManager$MoveCallback;Landroid/os/Looper;)V
+HSPLandroid/app/ApplicationPackageManager$OnPermissionsChangeListenerDelegate;-><init>(Landroid/app/ApplicationPackageManager;Landroid/content/pm/PackageManager$OnPermissionsChangedListener;Landroid/os/Looper;)V
+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;-><init>(Landroid/app/ContextImpl;Landroid/content/pm/IPackageManager;)V
+HSPLandroid/app/ApplicationPackageManager;->addOnPermissionsChangeListener(Landroid/content/pm/PackageManager$OnPermissionsChangedListener;)V
+HSPLandroid/app/ApplicationPackageManager;->checkPermission(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/app/ApplicationPackageManager;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/app/ApplicationPackageManager;->configurationChanged()V
+HSPLandroid/app/ApplicationPackageManager;->getActivityInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
+HSPLandroid/app/ApplicationPackageManager;->getApplicationEnabledSetting(Ljava/lang/String;)I
+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;
+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;->getComponentEnabledSetting(Landroid/content/ComponentName;)I
+HSPLandroid/app/ApplicationPackageManager;->getDefaultActivityIcon()Landroid/graphics/drawable/Drawable;
+HSPLandroid/app/ApplicationPackageManager;->getDrawable(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
+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;->getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo;
+HSPLandroid/app/ApplicationPackageManager;->getLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;
+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;II)I
+HSPLandroid/app/ApplicationPackageManager;->getPackagesForUid(I)[Ljava/lang/String;
+HSPLandroid/app/ApplicationPackageManager;->getReceiverInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
+HSPLandroid/app/ApplicationPackageManager;->getResourcesForActivity(Landroid/content/ComponentName;)Landroid/content/res/Resources;
+HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/Resources;
+HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Ljava/lang/String;)Landroid/content/res/Resources;
+HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplicationAsUser(Ljava/lang/String;I)Landroid/content/res/Resources;
+HSPLandroid/app/ApplicationPackageManager;->getServiceInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;
+HSPLandroid/app/ApplicationPackageManager;->getSystemAvailableFeatures()[Landroid/content/pm/FeatureInfo;
+HSPLandroid/app/ApplicationPackageManager;->getSystemSharedLibraryNames()[Ljava/lang/String;
+HSPLandroid/app/ApplicationPackageManager;->getText(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;
+HSPLandroid/app/ApplicationPackageManager;->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;->getUserManager()Landroid/os/UserManager;
+HSPLandroid/app/ApplicationPackageManager;->getXml(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/content/res/XmlResourceParser;
+HSPLandroid/app/ApplicationPackageManager;->hasSystemFeature(Ljava/lang/String;)Z
+HSPLandroid/app/ApplicationPackageManager;->hasSystemFeature(Ljava/lang/String;I)Z
+HSPLandroid/app/ApplicationPackageManager;->isManagedProfile(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;
+HSPLandroid/app/ApplicationPackageManager;->maybeAdjustApplicationInfo(Landroid/content/pm/ApplicationInfo;)Landroid/content/pm/ApplicationInfo;
+HSPLandroid/app/ApplicationPackageManager;->putCachedIcon(Landroid/app/ApplicationPackageManager$ResourceName;Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/app/ApplicationPackageManager;->putCachedString(Landroid/app/ApplicationPackageManager$ResourceName;Ljava/lang/CharSequence;)V
+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;->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;->registerMoveCallback(Landroid/content/pm/PackageManager$MoveCallback;Landroid/os/Handler;)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;->setComponentEnabledSetting(Landroid/content/ComponentName;II)V
+HSPLandroid/app/ApplicationPackageManager;->shouldShowRequestPermissionRationale(Ljava/lang/String;)Z
+HSPLandroid/app/BackStackRecord$Op;-><init>(ILandroid/app/Fragment;)V
+HSPLandroid/app/BackStackRecord;-><init>(Landroid/app/FragmentManagerImpl;)V
+HSPLandroid/app/BackStackRecord;->add(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;
+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;->attach(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/BackStackRecord;->bumpBackStackNesting(I)V
+HSPLandroid/app/BackStackRecord;->commit()I
+HSPLandroid/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
+HSPLandroid/app/BackStackRecord;->interactsWith(I)Z
+HSPLandroid/app/BackStackRecord;->isEmpty()Z
+HSPLandroid/app/BackStackRecord;->isFragmentPostponed(Landroid/app/BackStackRecord$Op;)Z
+HSPLandroid/app/BackStackRecord;->isPostponed()Z
+HSPLandroid/app/BackStackRecord;->replace(ILandroid/app/Fragment;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/BackStackRecord;->replace(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/BackStackRecord;->runOnCommitRunnables()V
+HSPLandroid/app/BackStackRecord;->setBreadCrumbTitle(I)Landroid/app/FragmentTransaction;
+HSPLandroid/app/BackStackRecord;->setTransition(I)Landroid/app/FragmentTransaction;
+HSPLandroid/app/BackStackState$1;-><init>()V
+HSPLandroid/app/ContentProviderHolder$1;-><init>()V
+HSPLandroid/app/ContentProviderHolder$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ContentProviderHolder;
+HSPLandroid/app/ContentProviderHolder$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/ContentProviderHolder;-><init>(Landroid/content/pm/ProviderInfo;)V
+HSPLandroid/app/ContentProviderHolder;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/ContentProviderHolder;-><init>(Landroid/os/Parcel;Landroid/app/ContentProviderHolder;)V
+HSPLandroid/app/ContentProviderHolder;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/ContextImpl$1;-><init>(Ljava/lang/String;)V
+HSPLandroid/app/ContextImpl$1;->accept(Ljava/io/File;Ljava/lang/String;)Z
+HSPLandroid/app/ContextImpl$ApplicationContentResolver;-><init>(Landroid/content/Context;Landroid/app/ActivityThread;Landroid/os/UserHandle;)V
+HSPLandroid/app/ContextImpl$ApplicationContentResolver;->acquireExistingProvider(Landroid/content/Context;Ljava/lang/String;)Landroid/content/IContentProvider;
+HSPLandroid/app/ContextImpl$ApplicationContentResolver;->acquireProvider(Landroid/content/Context;Ljava/lang/String;)Landroid/content/IContentProvider;
+HSPLandroid/app/ContextImpl$ApplicationContentResolver;->acquireUnstableProvider(Landroid/content/Context;Ljava/lang/String;)Landroid/content/IContentProvider;
+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
+HSPLandroid/app/ContextImpl;-><init>(Landroid/app/ContextImpl;Landroid/app/ActivityThread;Landroid/app/LoadedApk;Ljava/lang/String;Landroid/os/IBinder;Landroid/os/UserHandle;ILjava/lang/ClassLoader;)V
+HSPLandroid/app/ContextImpl;->bindService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)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;ILandroid/os/Handler;Landroid/os/UserHandle;)Z
+HSPLandroid/app/ContextImpl;->canLoadUnsafeResources()Z
+HSPLandroid/app/ContextImpl;->checkCallingOrSelfPermission(Ljava/lang/String;)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;->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;->createApplicationContext(Landroid/content/pm/ApplicationInfo;I)Landroid/content/Context;
+HSPLandroid/app/ContextImpl;->createConfigurationContext(Landroid/content/res/Configuration;)Landroid/content/Context;
+HSPLandroid/app/ContextImpl;->createCredentialProtectedStorageContext()Landroid/content/Context;
+HSPLandroid/app/ContextImpl;->createDeviceProtectedStorageContext()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;->createSystemContext(Landroid/app/ActivityThread;)Landroid/app/ContextImpl;
+HSPLandroid/app/ContextImpl;->createSystemUiContext(Landroid/app/ContextImpl;)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
+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;->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;
+HSPLandroid/app/ContextImpl;->getAssets()Landroid/content/res/AssetManager;
+HSPLandroid/app/ContextImpl;->getBasePackageName()Ljava/lang/String;
+HSPLandroid/app/ContextImpl;->getCacheDir()Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getClassLoader()Ljava/lang/ClassLoader;
+HSPLandroid/app/ContextImpl;->getCodeCacheDir()Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getContentResolver()Landroid/content/ContentResolver;
+HSPLandroid/app/ContextImpl;->getDataDir()Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getDatabasePath(Ljava/lang/String;)Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getDatabasesDir()Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getDir(Ljava/lang/String;I)Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getDisplay()Landroid/view/Display;
+HSPLandroid/app/ContextImpl;->getDisplayAdjustments(I)Landroid/view/DisplayAdjustments;
+HSPLandroid/app/ContextImpl;->getExternalCacheDir()Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getExternalCacheDirs()[Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getExternalFilesDir(Ljava/lang/String;)Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getFileStreamPath(Ljava/lang/String;)Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getFilesDir()Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getImpl(Landroid/content/Context;)Landroid/app/ContextImpl;
+HSPLandroid/app/ContextImpl;->getMainLooper()Landroid/os/Looper;
+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;->getPreferencesDir()Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getReceiverRestrictedContext()Landroid/content/Context;
+HSPLandroid/app/ContextImpl;->getResources()Landroid/content/res/Resources;
+HSPLandroid/app/ContextImpl;->getSharedPreferences(Ljava/io/File;I)Landroid/content/SharedPreferences;
+HSPLandroid/app/ContextImpl;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;
+HSPLandroid/app/ContextImpl;->getSharedPreferencesCacheLocked()Landroid/util/ArrayMap;
+HSPLandroid/app/ContextImpl;->getSharedPreferencesPath(Ljava/lang/String;)Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/app/ContextImpl;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;
+HSPLandroid/app/ContextImpl;->getTheme()Landroid/content/res/Resources$Theme;
+HSPLandroid/app/ContextImpl;->getThemeResId()I
+HSPLandroid/app/ContextImpl;->getUserId()I
+HSPLandroid/app/ContextImpl;->initializeTheme()V
+HSPLandroid/app/ContextImpl;->isCredentialProtectedStorage()Z
+HSPLandroid/app/ContextImpl;->isDeviceProtectedStorage()Z
+HSPLandroid/app/ContextImpl;->isRestricted()Z
+HSPLandroid/app/ContextImpl;->makeFilename(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
+HSPLandroid/app/ContextImpl;->moveDatabaseFrom(Landroid/content/Context;Ljava/lang/String;)Z
+HSPLandroid/app/ContextImpl;->moveFiles(Ljava/io/File;Ljava/io/File;Ljava/lang/String;)I
+HSPLandroid/app/ContextImpl;->moveSharedPreferencesFrom(Landroid/content/Context;Ljava/lang/String;)Z
+HSPLandroid/app/ContextImpl;->openFileInput(Ljava/lang/String;)Ljava/io/FileInputStream;
+HSPLandroid/app/ContextImpl;->openFileOutput(Ljava/lang/String;I)Ljava/io/FileOutputStream;
+HSPLandroid/app/ContextImpl;->openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;
+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;->registerReceiverInternal(Landroid/content/BroadcastReceiver;ILandroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;Landroid/content/Context;I)Landroid/content/Intent;
+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;->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;->sendStickyBroadcast(Landroid/content/Intent;)V
+HSPLandroid/app/ContextImpl;->sendStickyBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
+HSPLandroid/app/ContextImpl;->setFilePermissionsFromMode(Ljava/lang/String;II)V
+HSPLandroid/app/ContextImpl;->setOuterContext(Landroid/content/Context;)V
+HSPLandroid/app/ContextImpl;->setResources(Landroid/content/res/Resources;)V
+HSPLandroid/app/ContextImpl;->setTheme(I)V
+HSPLandroid/app/ContextImpl;->startActivity(Landroid/content/Intent;)V
+HSPLandroid/app/ContextImpl;->startActivity(Landroid/content/Intent;Landroid/os/Bundle;)V
+HSPLandroid/app/ContextImpl;->startService(Landroid/content/Intent;)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
+HSPLandroid/app/ContextImpl;->unbindService(Landroid/content/ServiceConnection;)V
+HSPLandroid/app/ContextImpl;->unregisterReceiver(Landroid/content/BroadcastReceiver;)V
+HSPLandroid/app/ContextImpl;->validateServiceIntent(Landroid/content/Intent;)V
+HSPLandroid/app/ContextImpl;->warnIfCallingFromSystemProcess()V
+HSPLandroid/app/DexLoadReporter;-><init>()V
+HSPLandroid/app/DexLoadReporter;->getInstance()Landroid/app/DexLoadReporter;
+HSPLandroid/app/DexLoadReporter;->isSecondaryDexFile(Ljava/lang/String;[Ljava/lang/String;)Z
+HSPLandroid/app/DexLoadReporter;->notifyPackageManager(Ljava/util/List;Ljava/util/List;)V
+HSPLandroid/app/DexLoadReporter;->registerAppDataDir(Ljava/lang/String;Ljava/lang/String;)V
+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
+HSPLandroid/app/Dialog$ListenersHandler;-><init>(Landroid/app/Dialog;)V
+HSPLandroid/app/Dialog;-><init>(Landroid/content/Context;)V
+HSPLandroid/app/Dialog;-><init>(Landroid/content/Context;I)V
+HSPLandroid/app/Dialog;-><init>(Landroid/content/Context;IZ)V
+HSPLandroid/app/Dialog;->findViewById(I)Landroid/view/View;
+HSPLandroid/app/Dialog;->getContext()Landroid/content/Context;
+HSPLandroid/app/Dialog;->getLayoutInflater()Landroid/view/LayoutInflater;
+HSPLandroid/app/Dialog;->getWindow()Landroid/view/Window;
+HSPLandroid/app/Dialog;->onContentChanged()V
+HSPLandroid/app/Dialog;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V
+HSPLandroid/app/Dialog;->setCancelable(Z)V
+HSPLandroid/app/Dialog;->setCanceledOnTouchOutside(Z)V
+HSPLandroid/app/Dialog;->setContentView(I)V
+HSPLandroid/app/Dialog;->setContentView(Landroid/view/View;)V
+HSPLandroid/app/Dialog;->setOnCancelListener(Landroid/content/DialogInterface$OnCancelListener;)V
+HSPLandroid/app/Dialog;->setOnDismissListener(Landroid/content/DialogInterface$OnDismissListener;)V
+HSPLandroid/app/Dialog;->setOnShowListener(Landroid/content/DialogInterface$OnShowListener;)V
+HSPLandroid/app/Dialog;->updateWindowForCancelable()V
+HSPLandroid/app/DialogFragment;-><init>()V
+HSPLandroid/app/DownloadManager;-><init>(Landroid/content/Context;)V
+HSPLandroid/app/Fragment$1;-><init>(Landroid/app/Fragment;)V
+HSPLandroid/app/Fragment$1;->onFindViewById(I)Landroid/view/View;
+HSPLandroid/app/Fragment$1;->onHasView()Z
+HSPLandroid/app/Fragment$AnimationInfo;->-get0(Landroid/app/Fragment$AnimationInfo;)Ljava/lang/Boolean;
+HSPLandroid/app/Fragment$AnimationInfo;->-get1(Landroid/app/Fragment$AnimationInfo;)Ljava/lang/Boolean;
+HSPLandroid/app/Fragment$AnimationInfo;->-get2(Landroid/app/Fragment$AnimationInfo;)Landroid/transition/Transition;
+HSPLandroid/app/Fragment$AnimationInfo;->-get3(Landroid/app/Fragment$AnimationInfo;)Landroid/transition/Transition;
+HSPLandroid/app/Fragment$AnimationInfo;->-get4(Landroid/app/Fragment$AnimationInfo;)Landroid/transition/Transition;
+HSPLandroid/app/Fragment$AnimationInfo;->-get6(Landroid/app/Fragment$AnimationInfo;)Landroid/transition/Transition;
+HSPLandroid/app/Fragment$AnimationInfo;->-get7(Landroid/app/Fragment$AnimationInfo;)Landroid/transition/Transition;
+HSPLandroid/app/Fragment$AnimationInfo;->-set0(Landroid/app/Fragment$AnimationInfo;Ljava/lang/Boolean;)Ljava/lang/Boolean;
+HSPLandroid/app/Fragment$AnimationInfo;->-set1(Landroid/app/Fragment$AnimationInfo;Ljava/lang/Boolean;)Ljava/lang/Boolean;
+HSPLandroid/app/Fragment$AnimationInfo;->-set3(Landroid/app/Fragment$AnimationInfo;Landroid/transition/Transition;)Landroid/transition/Transition;
+HSPLandroid/app/Fragment$AnimationInfo;->-set4(Landroid/app/Fragment$AnimationInfo;Landroid/transition/Transition;)Landroid/transition/Transition;
+HSPLandroid/app/Fragment$AnimationInfo;->-set5(Landroid/app/Fragment$AnimationInfo;Landroid/transition/Transition;)Landroid/transition/Transition;
+HSPLandroid/app/Fragment$AnimationInfo;->-set6(Landroid/app/Fragment$AnimationInfo;Landroid/transition/Transition;)Landroid/transition/Transition;
+HSPLandroid/app/Fragment$AnimationInfo;->-set7(Landroid/app/Fragment$AnimationInfo;Landroid/transition/Transition;)Landroid/transition/Transition;
+HSPLandroid/app/Fragment$AnimationInfo;-><init>()V
+HSPLandroid/app/Fragment;->-get0()Landroid/transition/Transition;
+HSPLandroid/app/Fragment;-><init>()V
+HSPLandroid/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;
+HSPLandroid/app/Fragment;->getArguments()Landroid/os/Bundle;
+HSPLandroid/app/Fragment;->getChildFragmentManager()Landroid/app/FragmentManager;
+HSPLandroid/app/Fragment;->getContext()Landroid/content/Context;
+HSPLandroid/app/Fragment;->getEnterTransition()Landroid/transition/Transition;
+HSPLandroid/app/Fragment;->getExitTransition()Landroid/transition/Transition;
+HSPLandroid/app/Fragment;->getFragmentManager()Landroid/app/FragmentManager;
+HSPLandroid/app/Fragment;->getLoaderManager()Landroid/app/LoaderManager;
+HSPLandroid/app/Fragment;->getNextAnim()I
+HSPLandroid/app/Fragment;->getNextTransition()I
+HSPLandroid/app/Fragment;->getNextTransitionStyle()I
+HSPLandroid/app/Fragment;->getParentFragment()Landroid/app/Fragment;
+HSPLandroid/app/Fragment;->getReenterTransition()Landroid/transition/Transition;
+HSPLandroid/app/Fragment;->getResources()Landroid/content/res/Resources;
+HSPLandroid/app/Fragment;->getReturnTransition()Landroid/transition/Transition;
+HSPLandroid/app/Fragment;->getSharedElementEnterTransition()Landroid/transition/Transition;
+HSPLandroid/app/Fragment;->getSharedElementReturnTransition()Landroid/transition/Transition;
+HSPLandroid/app/Fragment;->getString(I)Ljava/lang/String;
+HSPLandroid/app/Fragment;->getUserVisibleHint()Z
+HSPLandroid/app/Fragment;->getView()Landroid/view/View;
+HSPLandroid/app/Fragment;->hashCode()I
+HSPLandroid/app/Fragment;->instantiate(Landroid/content/Context;Ljava/lang/String;)Landroid/app/Fragment;
+HSPLandroid/app/Fragment;->instantiate(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;
+HSPLandroid/app/Fragment;->instantiateChildFragmentManager()V
+HSPLandroid/app/Fragment;->isAdded()Z
+HSPLandroid/app/Fragment;->isHidden()Z
+HSPLandroid/app/Fragment;->isPostponed()Z
+HSPLandroid/app/Fragment;->isResumed()Z
+HSPLandroid/app/Fragment;->isVisible()Z
+HSPLandroid/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
+HSPLandroid/app/Fragment;->onAttachFragment(Landroid/app/Fragment;)V
+HSPLandroid/app/Fragment;->onCreate(Landroid/os/Bundle;)V
+HSPLandroid/app/Fragment;->onCreateAnimator(IZI)Landroid/animation/Animator;
+HSPLandroid/app/Fragment;->onCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)V
+HSPLandroid/app/Fragment;->onCreateView(Landroid/view/LayoutInflater;Landroid/view/ViewGroup;Landroid/os/Bundle;)Landroid/view/View;
+HSPLandroid/app/Fragment;->onGetLayoutInflater(Landroid/os/Bundle;)Landroid/view/LayoutInflater;
+HSPLandroid/app/Fragment;->onInflate(Landroid/app/Activity;Landroid/util/AttributeSet;Landroid/os/Bundle;)V
+HSPLandroid/app/Fragment;->onInflate(Landroid/content/Context;Landroid/util/AttributeSet;Landroid/os/Bundle;)V
+HSPLandroid/app/Fragment;->onInflate(Landroid/util/AttributeSet;Landroid/os/Bundle;)V
+HSPLandroid/app/Fragment;->onPause()V
+HSPLandroid/app/Fragment;->onPrepareOptionsMenu(Landroid/view/Menu;)V
+HSPLandroid/app/Fragment;->onResume()V
+HSPLandroid/app/Fragment;->onSaveInstanceState(Landroid/os/Bundle;)V
+HSPLandroid/app/Fragment;->onStart()V
+HSPLandroid/app/Fragment;->onStop()V
+HSPLandroid/app/Fragment;->onTrimMemory(I)V
+HSPLandroid/app/Fragment;->onViewCreated(Landroid/view/View;Landroid/os/Bundle;)V
+HSPLandroid/app/Fragment;->onViewStateRestored(Landroid/os/Bundle;)V
+HSPLandroid/app/Fragment;->performActivityCreated(Landroid/os/Bundle;)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;
+HSPLandroid/app/Fragment;->performGetLayoutInflater(Landroid/os/Bundle;)Landroid/view/LayoutInflater;
+HSPLandroid/app/Fragment;->performPause()V
+HSPLandroid/app/Fragment;->performPrepareOptionsMenu(Landroid/view/Menu;)Z
+HSPLandroid/app/Fragment;->performResume()V
+HSPLandroid/app/Fragment;->performSaveInstanceState(Landroid/os/Bundle;)V
+HSPLandroid/app/Fragment;->performStart()V
+HSPLandroid/app/Fragment;->performStop()V
+HSPLandroid/app/Fragment;->performTrimMemory(I)V
+HSPLandroid/app/Fragment;->restoreChildFragmentState(Landroid/os/Bundle;Z)V
+HSPLandroid/app/Fragment;->restoreViewState(Landroid/os/Bundle;)V
+HSPLandroid/app/Fragment;->setAllowEnterTransitionOverlap(Z)V
+HSPLandroid/app/Fragment;->setAllowReturnTransitionOverlap(Z)V
+HSPLandroid/app/Fragment;->setArguments(Landroid/os/Bundle;)V
+HSPLandroid/app/Fragment;->setEnterTransition(Landroid/transition/Transition;)V
+HSPLandroid/app/Fragment;->setExitTransition(Landroid/transition/Transition;)V
+HSPLandroid/app/Fragment;->setHasOptionsMenu(Z)V
+HSPLandroid/app/Fragment;->setIndex(ILandroid/app/Fragment;)V
+HSPLandroid/app/Fragment;->setMenuVisibility(Z)V
+HSPLandroid/app/Fragment;->setNextAnim(I)V
+HSPLandroid/app/Fragment;->setNextTransition(II)V
+HSPLandroid/app/Fragment;->setReenterTransition(Landroid/transition/Transition;)V
+HSPLandroid/app/Fragment;->setRetainInstance(Z)V
+HSPLandroid/app/Fragment;->setReturnTransition(Landroid/transition/Transition;)V
+HSPLandroid/app/Fragment;->setSharedElementEnterTransition(Landroid/transition/Transition;)V
+HSPLandroid/app/Fragment;->setSharedElementReturnTransition(Landroid/transition/Transition;)V
+HSPLandroid/app/Fragment;->setUserVisibleHint(Z)V
+HSPLandroid/app/Fragment;->shouldChangeTransition(Landroid/transition/Transition;Landroid/transition/Transition;)Z
+HSPLandroid/app/Fragment;->toString()Ljava/lang/String;
+HSPLandroid/app/FragmentContainer;-><init>()V
+HSPLandroid/app/FragmentContainer;->instantiate(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;
+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
+HSPLandroid/app/FragmentController;->dispatchCreate()V
+HSPLandroid/app/FragmentController;->dispatchCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)Z
+HSPLandroid/app/FragmentController;->dispatchPause()V
+HSPLandroid/app/FragmentController;->dispatchPrepareOptionsMenu(Landroid/view/Menu;)Z
+HSPLandroid/app/FragmentController;->dispatchResume()V
+HSPLandroid/app/FragmentController;->dispatchStart()V
+HSPLandroid/app/FragmentController;->dispatchStop()V
+HSPLandroid/app/FragmentController;->dispatchTrimMemory(I)V
+HSPLandroid/app/FragmentController;->doLoaderStart()V
+HSPLandroid/app/FragmentController;->doLoaderStop(Z)V
+HSPLandroid/app/FragmentController;->execPendingActions()Z
+HSPLandroid/app/FragmentController;->getFragmentManager()Landroid/app/FragmentManager;
+HSPLandroid/app/FragmentController;->getLoaderManager()Landroid/app/LoaderManager;
+HSPLandroid/app/FragmentController;->noteStateNotSaved()V
+HSPLandroid/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;-><init>(Landroid/content/Context;Landroid/os/Handler;I)V
+HSPLandroid/app/FragmentHostCallback;->chooseHandler(Landroid/content/Context;Landroid/os/Handler;)Landroid/os/Handler;
+HSPLandroid/app/FragmentHostCallback;->doLoaderStart()V
+HSPLandroid/app/FragmentHostCallback;->doLoaderStop(Z)V
+HSPLandroid/app/FragmentHostCallback;->getActivity()Landroid/app/Activity;
+HSPLandroid/app/FragmentHostCallback;->getContext()Landroid/content/Context;
+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;
+HSPLandroid/app/FragmentHostCallback;->getLoaderManagerImpl()Landroid/app/LoaderManagerImpl;
+HSPLandroid/app/FragmentHostCallback;->getRetainLoaders()Z
+HSPLandroid/app/FragmentHostCallback;->onGetHost()Ljava/lang/Object;
+HSPLandroid/app/FragmentHostCallback;->reportLoaderStart()V
+HSPLandroid/app/FragmentManager$BackStackEntry;->getBreadCrumbShortTitle()Ljava/lang/CharSequence;
+HSPLandroid/app/FragmentManager$BackStackEntry;->getBreadCrumbShortTitleRes()I
+HSPLandroid/app/FragmentManager$BackStackEntry;->getBreadCrumbTitle()Ljava/lang/CharSequence;
+HSPLandroid/app/FragmentManager$BackStackEntry;->getBreadCrumbTitleRes()I
+HSPLandroid/app/FragmentManager$BackStackEntry;->getId()I
+HSPLandroid/app/FragmentManager$BackStackEntry;->getName()Ljava/lang/String;
+HSPLandroid/app/FragmentManager$FragmentLifecycleCallbacks;-><init>()V
+HSPLandroid/app/FragmentManager$OnBackStackChangedListener;->onBackStackChanged()V
+HSPLandroid/app/FragmentManager;-><init>()V
+HSPLandroid/app/FragmentManager;->addOnBackStackChangedListener(Landroid/app/FragmentManager$OnBackStackChangedListener;)V
+HSPLandroid/app/FragmentManager;->beginTransaction()Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentManager;->dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLandroid/app/FragmentManager;->executePendingTransactions()Z
+HSPLandroid/app/FragmentManager;->findFragmentById(I)Landroid/app/Fragment;
+HSPLandroid/app/FragmentManager;->findFragmentByTag(Ljava/lang/String;)Landroid/app/Fragment;
+HSPLandroid/app/FragmentManager;->getBackStackEntryAt(I)Landroid/app/FragmentManager$BackStackEntry;
+HSPLandroid/app/FragmentManager;->getBackStackEntryCount()I
+HSPLandroid/app/FragmentManager;->getFragment(Landroid/os/Bundle;Ljava/lang/String;)Landroid/app/Fragment;
+HSPLandroid/app/FragmentManager;->getFragments()Ljava/util/List;
+HSPLandroid/app/FragmentManager;->getPrimaryNavigationFragment()Landroid/app/Fragment;
+HSPLandroid/app/FragmentManager;->isDestroyed()Z
+HSPLandroid/app/FragmentManager;->isStateSaved()Z
+HSPLandroid/app/FragmentManager;->popBackStack()V
+HSPLandroid/app/FragmentManager;->popBackStack(II)V
+HSPLandroid/app/FragmentManager;->popBackStack(Ljava/lang/String;I)V
+HSPLandroid/app/FragmentManager;->popBackStackImmediate()Z
+HSPLandroid/app/FragmentManager;->popBackStackImmediate(II)Z
+HSPLandroid/app/FragmentManager;->popBackStackImmediate(Ljava/lang/String;I)Z
+HSPLandroid/app/FragmentManager;->putFragment(Landroid/os/Bundle;Ljava/lang/String;Landroid/app/Fragment;)V
+HSPLandroid/app/FragmentManager;->registerFragmentLifecycleCallbacks(Landroid/app/FragmentManager$FragmentLifecycleCallbacks;Z)V
+HSPLandroid/app/FragmentManager;->removeOnBackStackChangedListener(Landroid/app/FragmentManager$OnBackStackChangedListener;)V
+HSPLandroid/app/FragmentManager;->saveFragmentInstanceState(Landroid/app/Fragment;)Landroid/app/Fragment$SavedState;
+HSPLandroid/app/FragmentManager;->unregisterFragmentLifecycleCallbacks(Landroid/app/FragmentManager$FragmentLifecycleCallbacks;)V
+HSPLandroid/app/FragmentManagerImpl$1;-><init>(Landroid/app/FragmentManagerImpl;)V
+HSPLandroid/app/FragmentManagerImpl$1;->run()V
+HSPLandroid/app/FragmentManagerImpl$AnimateOnHWLayerIfNeededListener;-><init>(Landroid/view/View;)V
+HSPLandroid/app/FragmentManagerImpl$AnimateOnHWLayerIfNeededListener;->onAnimationEnd(Landroid/animation/Animator;)V
+HSPLandroid/app/FragmentManagerImpl$AnimateOnHWLayerIfNeededListener;->onAnimationStart(Landroid/animation/Animator;)V
+HSPLandroid/app/FragmentManagerImpl$OpGenerator;->generateOps(Ljava/util/ArrayList;Ljava/util/ArrayList;)Z
+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;->addOnBackStackChangedListener(Landroid/app/FragmentManager$OnBackStackChangedListener;)V
+HSPLandroid/app/FragmentManagerImpl;->attachController(Landroid/app/FragmentHostCallback;Landroid/app/FragmentContainer;Landroid/app/Fragment;)V
+HSPLandroid/app/FragmentManagerImpl;->attachFragment(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;->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
+HSPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentCreated(Landroid/app/Fragment;Landroid/os/Bundle;Z)V
+HSPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentPaused(Landroid/app/Fragment;Z)V
+HSPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentPreAttached(Landroid/app/Fragment;Landroid/content/Context;Z)V
+HSPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentPreCreated(Landroid/app/Fragment;Landroid/os/Bundle;Z)V
+HSPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentResumed(Landroid/app/Fragment;Z)V
+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
+HSPLandroid/app/FragmentManagerImpl;->dispatchOnFragmentViewCreated(Landroid/app/Fragment;Landroid/view/View;Landroid/os/Bundle;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
+HSPLandroid/app/FragmentManagerImpl;->ensureExecReady(Z)V
+HSPLandroid/app/FragmentManagerImpl;->ensureInflatedFragmentView(Landroid/app/Fragment;)V
+HSPLandroid/app/FragmentManagerImpl;->execPendingActions()Z
+HSPLandroid/app/FragmentManagerImpl;->executeOps(Ljava/util/ArrayList;Ljava/util/ArrayList;II)V
+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
+HSPLandroid/app/FragmentManagerImpl;->findFragmentById(I)Landroid/app/Fragment;
+HSPLandroid/app/FragmentManagerImpl;->findFragmentByTag(Ljava/lang/String;)Landroid/app/Fragment;
+HSPLandroid/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
+HSPLandroid/app/FragmentManagerImpl;->getFragment(Landroid/os/Bundle;Ljava/lang/String;)Landroid/app/Fragment;
+HSPLandroid/app/FragmentManagerImpl;->getLayoutInflaterFactory()Landroid/view/LayoutInflater$Factory2;
+HSPLandroid/app/FragmentManagerImpl;->getPrimaryNavigationFragment()Landroid/app/Fragment;
+HSPLandroid/app/FragmentManagerImpl;->getTargetSdk()I
+HSPLandroid/app/FragmentManagerImpl;->invalidateOptionsMenu()V
+HSPLandroid/app/FragmentManagerImpl;->isDestroyed()Z
+HSPLandroid/app/FragmentManagerImpl;->isStateAtLeast(I)Z
+HSPLandroid/app/FragmentManagerImpl;->loadAnimator(Landroid/app/Fragment;IZI)Landroid/animation/Animator;
+HSPLandroid/app/FragmentManagerImpl;->makeActive(Landroid/app/Fragment;)V
+HSPLandroid/app/FragmentManagerImpl;->makeRemovedFragmentsInvisible(Landroid/util/ArraySet;)V
+HSPLandroid/app/FragmentManagerImpl;->modifiesAlpha(Landroid/animation/Animator;)Z
+HSPLandroid/app/FragmentManagerImpl;->moveFragmentToExpectedState(Landroid/app/Fragment;)V
+HSPLandroid/app/FragmentManagerImpl;->moveToState(IZ)V
+HSPLandroid/app/FragmentManagerImpl;->moveToState(Landroid/app/Fragment;)V
+HSPLandroid/app/FragmentManagerImpl;->moveToState(Landroid/app/Fragment;IIIZ)V
+HSPLandroid/app/FragmentManagerImpl;->noteStateNotSaved()V
+HSPLandroid/app/FragmentManagerImpl;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
+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;->registerFragmentLifecycleCallbacks(Landroid/app/FragmentManager$FragmentLifecycleCallbacks;Z)V
+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;
+HSPLandroid/app/FragmentManagerImpl;->saveFragmentViewState(Landroid/app/Fragment;)V
+HSPLandroid/app/FragmentManagerImpl;->saveNonConfig()V
+HSPLandroid/app/FragmentManagerImpl;->scheduleCommit()V
+HSPLandroid/app/FragmentManagerImpl;->setHWLayerAnimListenerIfAlpha(Landroid/view/View;Landroid/animation/Animator;)V
+HSPLandroid/app/FragmentManagerImpl;->shouldRunOnHWLayer(Landroid/view/View;Landroid/animation/Animator;)Z
+HSPLandroid/app/FragmentManagerImpl;->startPendingDeferredFragments()V
+HSPLandroid/app/FragmentManagerImpl;->transitToStyleIndex(IZ)I
+HSPLandroid/app/FragmentManagerState$1;-><init>()V
+HSPLandroid/app/FragmentManagerState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/FragmentManagerState;
+HSPLandroid/app/FragmentManagerState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/FragmentManagerState;-><init>()V
+HSPLandroid/app/FragmentManagerState;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/FragmentManagerState;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/FragmentState$1;-><init>()V
+HSPLandroid/app/FragmentState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/FragmentState;
+HSPLandroid/app/FragmentState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/FragmentState$1;->newArray(I)[Landroid/app/FragmentState;
+HSPLandroid/app/FragmentState$1;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/app/FragmentState;-><init>(Landroid/app/Fragment;)V
+HSPLandroid/app/FragmentState;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/FragmentState;->instantiate(Landroid/app/FragmentHostCallback;Landroid/app/FragmentContainer;Landroid/app/Fragment;Landroid/app/FragmentManagerNonConfig;)Landroid/app/Fragment;
+HSPLandroid/app/FragmentState;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/FragmentTransaction;-><init>()V
+HSPLandroid/app/FragmentTransaction;->add(ILandroid/app/Fragment;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->add(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->add(Landroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->addSharedElement(Landroid/view/View;Ljava/lang/String;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->addToBackStack(Ljava/lang/String;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->attach(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->commit()I
+HSPLandroid/app/FragmentTransaction;->commitAllowingStateLoss()I
+HSPLandroid/app/FragmentTransaction;->commitNow()V
+HSPLandroid/app/FragmentTransaction;->commitNowAllowingStateLoss()V
+HSPLandroid/app/FragmentTransaction;->detach(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->disallowAddToBackStack()Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->hide(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->isAddToBackStackAllowed()Z
+HSPLandroid/app/FragmentTransaction;->isEmpty()Z
+HSPLandroid/app/FragmentTransaction;->remove(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->replace(ILandroid/app/Fragment;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->replace(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->runOnCommit(Ljava/lang/Runnable;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->setBreadCrumbShortTitle(I)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->setBreadCrumbShortTitle(Ljava/lang/CharSequence;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->setBreadCrumbTitle(I)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->setBreadCrumbTitle(Ljava/lang/CharSequence;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->setCustomAnimations(II)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->setCustomAnimations(IIII)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->setPrimaryNavigationFragment(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->setReorderingAllowed(Z)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->setTransition(I)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->setTransitionStyle(I)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransaction;->show(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;
+HSPLandroid/app/FragmentTransition$FragmentContainerTransition;-><init>()V
+HSPLandroid/app/FragmentTransition;->addToFirstInLastOut(Landroid/app/BackStackRecord;Landroid/app/BackStackRecord$Op;Landroid/util/SparseArray;ZZ)V
+HSPLandroid/app/FragmentTransition;->calculateFragments(Landroid/app/BackStackRecord;Landroid/util/SparseArray;Z)V
+HSPLandroid/app/FragmentTransition;->calculateNameOverrides(ILjava/util/ArrayList;Ljava/util/ArrayList;II)Landroid/util/ArrayMap;
+HSPLandroid/app/FragmentTransition;->cloneTransition(Landroid/transition/Transition;)Landroid/transition/Transition;
+HSPLandroid/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;
+HSPLandroid/app/FragmentTransition;->configureTransitionsReordered(Landroid/app/FragmentManagerImpl;ILandroid/app/FragmentTransition$FragmentContainerTransition;Landroid/view/View;Landroid/util/ArrayMap;)V
+HSPLandroid/app/FragmentTransition;->ensureContainer(Landroid/app/FragmentTransition$FragmentContainerTransition;Landroid/util/SparseArray;I)Landroid/app/FragmentTransition$FragmentContainerTransition;
+HSPLandroid/app/FragmentTransition;->getEnterTransition(Landroid/app/Fragment;Z)Landroid/transition/Transition;
+HSPLandroid/app/FragmentTransition;->getExitTransition(Landroid/app/Fragment;Z)Landroid/transition/Transition;
+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;->activityIdle(Landroid/os/IBinder;Landroid/content/res/Configuration;Z)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->activityPaused(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->activityResumed(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->activitySlept(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->activityStopped(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/lang/CharSequence;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->addPackageDependency(Ljava/lang/String;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->attachApplication(Landroid/app/IApplicationThread;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->bindService(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;ILjava/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;->checkPermission(Ljava/lang/String;II)I
+HSPLandroid/app/IActivityManager$Stub$Proxy;->checkPermissionWithToken(Ljava/lang/String;IILandroid/os/IBinder;)I
+HSPLandroid/app/IActivityManager$Stub$Proxy;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getActivityDisplayId(Landroid/os/IBinder;)I
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getActivityOptions(Landroid/os/IBinder;)Landroid/os/Bundle;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getActivityStackId(Landroid/os/IBinder;)I
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getAppTasks(Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getCallingActivity(Landroid/os/IBinder;)Landroid/content/ComponentName;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getContentProvider(Landroid/app/IApplicationThread;Ljava/lang/String;IZ)Landroid/app/ContentProviderHolder;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getCurrentUser()Landroid/content/pm/UserInfo;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getDeviceConfigurationInfo()Landroid/content/pm/ConfigurationInfo;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getFocusedStackId()I
+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;->getLastResumedActivityUserId()I
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getMyMemoryState(Landroid/app/ActivityManager$RunningAppProcessInfo;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getProviderMimeType(Landroid/net/Uri;I)Ljava/lang/String;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getRecentTasks(III)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getRunningAppProcesses()Ljava/util/List;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getStackInfo(I)Landroid/app/ActivityManager$StackInfo;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getTaskForActivity(Landroid/os/IBinder;Z)I
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getTasks(II)Ljava/util/List;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->handleApplicationStrictModeViolation(Landroid/os/IBinder;ILandroid/os/StrictMode$ViolationInfo;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->isInMultiWindowMode(Landroid/os/IBinder;)Z
+HSPLandroid/app/IActivityManager$Stub$Proxy;->isTopOfTask(Landroid/os/IBinder;)Z
+HSPLandroid/app/IActivityManager$Stub$Proxy;->isUserAMonkey()Z
+HSPLandroid/app/IActivityManager$Stub$Proxy;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->publishService(Landroid/os/IBinder;Landroid/content/Intent;Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->refContentProvider(Landroid/os/IBinder;II)Z
+HSPLandroid/app/IActivityManager$Stub$Proxy;->registerProcessObserver(Landroid/app/IProcessObserver;)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;->registerTaskStackListener(Landroid/app/ITaskStackListener;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->registerUserSwitchObserver(Landroid/app/IUserSwitchObserver;Ljava/lang/String;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->removeContentProvider(Landroid/os/IBinder;Z)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->reportActivityFullyDrawn(Landroid/os/IBinder;Z)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->reportAssistContextExtras(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;Landroid/net/Uri;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->reportSizeConfigurations(Landroid/os/IBinder;[I[I[I)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
+HSPLandroid/app/IActivityManager$Stub$Proxy;->setDisablePreviewScreenshots(Landroid/os/IBinder;Z)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->setLockScreenShown(Z)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->setRenderThread(I)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->setRequestedOrientation(Landroid/os/IBinder;I)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->setServiceForeground(Landroid/content/ComponentName;Landroid/os/IBinder;ILandroid/app/Notification;I)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->setTaskDescription(Landroid/os/IBinder;Landroid/app/ActivityManager$TaskDescription;)V
+HSPLandroid/app/IActivityManager$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
+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
+HSPLandroid/app/IActivityManager$Stub$Proxy;->unregisterReceiver(Landroid/content/IIntentReceiver;)V
+HSPLandroid/app/IActivityManager$Stub;-><init>()V
+HSPLandroid/app/IActivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IActivityManager;
+HSPLandroid/app/IActivityManager;->activityDestroyed(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->activityIdle(Landroid/os/IBinder;Landroid/content/res/Configuration;Z)V
+HSPLandroid/app/IActivityManager;->activityPaused(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->activityRelaunched(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->activityResumed(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->activitySlept(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->activityStopped(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/lang/CharSequence;)V
+HSPLandroid/app/IActivityManager;->addAppTask(Landroid/os/IBinder;Landroid/content/Intent;Landroid/app/ActivityManager$TaskDescription;Landroid/graphics/Bitmap;)I
+HSPLandroid/app/IActivityManager;->addInstrumentationResults(Landroid/app/IApplicationThread;Landroid/os/Bundle;)V
+HSPLandroid/app/IActivityManager;->addPackageDependency(Ljava/lang/String;)V
+HSPLandroid/app/IActivityManager;->appNotRespondingViaProvider(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->attachApplication(Landroid/app/IApplicationThread;)V
+HSPLandroid/app/IActivityManager;->backgroundWhitelistUid(I)V
+HSPLandroid/app/IActivityManager;->backupAgentCreated(Ljava/lang/String;Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->bindBackupAgent(Ljava/lang/String;II)Z
+HSPLandroid/app/IActivityManager;->bindService(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;ILjava/lang/String;I)I
+HSPLandroid/app/IActivityManager;->bootAnimationComplete()V
+HSPLandroid/app/IActivityManager;->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;->cancelIntentSender(Landroid/content/IIntentSender;)V
+HSPLandroid/app/IActivityManager;->cancelTaskThumbnailTransition(I)V
+HSPLandroid/app/IActivityManager;->cancelTaskWindowTransition(I)V
+HSPLandroid/app/IActivityManager;->checkGrantUriPermission(ILjava/lang/String;Landroid/net/Uri;II)I
+HSPLandroid/app/IActivityManager;->checkPermission(Ljava/lang/String;II)I
+HSPLandroid/app/IActivityManager;->checkPermissionWithToken(Ljava/lang/String;IILandroid/os/IBinder;)I
+HSPLandroid/app/IActivityManager;->checkUriPermission(Landroid/net/Uri;IIIILandroid/os/IBinder;)I
+HSPLandroid/app/IActivityManager;->clearApplicationUserData(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;I)Z
+HSPLandroid/app/IActivityManager;->clearGrantedUriPermissions(Ljava/lang/String;I)V
+HSPLandroid/app/IActivityManager;->clearPendingBackup()V
+HSPLandroid/app/IActivityManager;->closeSystemDialogs(Ljava/lang/String;)V
+HSPLandroid/app/IActivityManager;->convertFromTranslucent(Landroid/os/IBinder;)Z
+HSPLandroid/app/IActivityManager;->convertToTranslucent(Landroid/os/IBinder;Landroid/os/Bundle;)Z
+HSPLandroid/app/IActivityManager;->crashApplication(IILjava/lang/String;ILjava/lang/String;)V
+HSPLandroid/app/IActivityManager;->createStackOnDisplay(I)I
+HSPLandroid/app/IActivityManager;->dismissKeyguard(Landroid/os/IBinder;Lcom/android/internal/policy/IKeyguardDismissCallback;)V
+HSPLandroid/app/IActivityManager;->dumpHeap(Ljava/lang/String;IZZZLjava/lang/String;Landroid/os/ParcelFileDescriptor;)Z
+HSPLandroid/app/IActivityManager;->dumpHeapFinished(Ljava/lang/String;)V
+HSPLandroid/app/IActivityManager;->enterPictureInPictureMode(Landroid/os/IBinder;Landroid/app/PictureInPictureParams;)Z
+HSPLandroid/app/IActivityManager;->enterSafeMode()V
+HSPLandroid/app/IActivityManager;->exitFreeformMode(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->finishActivity(Landroid/os/IBinder;ILandroid/content/Intent;I)Z
+HSPLandroid/app/IActivityManager;->finishActivityAffinity(Landroid/os/IBinder;)Z
+HSPLandroid/app/IActivityManager;->finishHeavyWeightApp()V
+HSPLandroid/app/IActivityManager;->finishInstrumentation(Landroid/app/IApplicationThread;ILandroid/os/Bundle;)V
+HSPLandroid/app/IActivityManager;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V
+HSPLandroid/app/IActivityManager;->finishSubActivity(Landroid/os/IBinder;Ljava/lang/String;I)V
+HSPLandroid/app/IActivityManager;->finishVoiceTask(Landroid/service/voice/IVoiceInteractionSession;)V
+HSPLandroid/app/IActivityManager;->forceStopPackage(Ljava/lang/String;I)V
+HSPLandroid/app/IActivityManager;->getActivityClassForToken(Landroid/os/IBinder;)Landroid/content/ComponentName;
+HSPLandroid/app/IActivityManager;->getActivityDisplayId(Landroid/os/IBinder;)I
+HSPLandroid/app/IActivityManager;->getActivityOptions(Landroid/os/IBinder;)Landroid/os/Bundle;
+HSPLandroid/app/IActivityManager;->getActivityStackId(Landroid/os/IBinder;)I
+HSPLandroid/app/IActivityManager;->getAllStackInfos()Ljava/util/List;
+HSPLandroid/app/IActivityManager;->getAppTaskThumbnailSize()Landroid/graphics/Point;
+HSPLandroid/app/IActivityManager;->getAppTasks(Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/app/IActivityManager;->getAssistContextExtras(I)Landroid/os/Bundle;
+HSPLandroid/app/IActivityManager;->getCallingActivity(Landroid/os/IBinder;)Landroid/content/ComponentName;
+HSPLandroid/app/IActivityManager;->getCallingPackage(Landroid/os/IBinder;)Ljava/lang/String;
+HSPLandroid/app/IActivityManager;->getConfiguration()Landroid/content/res/Configuration;
+HSPLandroid/app/IActivityManager;->getContentProvider(Landroid/app/IApplicationThread;Ljava/lang/String;IZ)Landroid/app/ContentProviderHolder;
+HSPLandroid/app/IActivityManager;->getContentProviderExternal(Ljava/lang/String;ILandroid/os/IBinder;)Landroid/app/ContentProviderHolder;
+HSPLandroid/app/IActivityManager;->getCurrentUser()Landroid/content/pm/UserInfo;
+HSPLandroid/app/IActivityManager;->getDeviceConfigurationInfo()Landroid/content/pm/ConfigurationInfo;
+HSPLandroid/app/IActivityManager;->getFocusedStackId()I
+HSPLandroid/app/IActivityManager;->getFrontActivityScreenCompatMode()I
+HSPLandroid/app/IActivityManager;->getGrantedUriPermissions(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/IActivityManager;->getIntentForIntentSender(Landroid/content/IIntentSender;)Landroid/content/Intent;
+HSPLandroid/app/IActivityManager;->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;->getLastResumedActivityUserId()I
+HSPLandroid/app/IActivityManager;->getLaunchedFromPackage(Landroid/os/IBinder;)Ljava/lang/String;
+HSPLandroid/app/IActivityManager;->getLaunchedFromUid(Landroid/os/IBinder;)I
+HSPLandroid/app/IActivityManager;->getLockTaskModeState()I
+HSPLandroid/app/IActivityManager;->getMaxNumPictureInPictureActions(Landroid/os/IBinder;)I
+HSPLandroid/app/IActivityManager;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V
+HSPLandroid/app/IActivityManager;->getMemoryTrimLevel()I
+HSPLandroid/app/IActivityManager;->getMyMemoryState(Landroid/app/ActivityManager$RunningAppProcessInfo;)V
+HSPLandroid/app/IActivityManager;->getPackageAskScreenCompat(Ljava/lang/String;)Z
+HSPLandroid/app/IActivityManager;->getPackageForIntentSender(Landroid/content/IIntentSender;)Ljava/lang/String;
+HSPLandroid/app/IActivityManager;->getPackageForToken(Landroid/os/IBinder;)Ljava/lang/String;
+HSPLandroid/app/IActivityManager;->getPackageProcessState(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/app/IActivityManager;->getPackageScreenCompatMode(Ljava/lang/String;)I
+HSPLandroid/app/IActivityManager;->getPersistedUriPermissions(Ljava/lang/String;Z)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/IActivityManager;->getProcessLimit()I
+HSPLandroid/app/IActivityManager;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
+HSPLandroid/app/IActivityManager;->getProcessPss([I)[J
+HSPLandroid/app/IActivityManager;->getProcessesInErrorState()Ljava/util/List;
+HSPLandroid/app/IActivityManager;->getProviderMimeType(Landroid/net/Uri;I)Ljava/lang/String;
+HSPLandroid/app/IActivityManager;->getRecentTasks(III)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/IActivityManager;->getRequestedOrientation(Landroid/os/IBinder;)I
+HSPLandroid/app/IActivityManager;->getRunningAppProcesses()Ljava/util/List;
+HSPLandroid/app/IActivityManager;->getRunningExternalApplications()Ljava/util/List;
+HSPLandroid/app/IActivityManager;->getRunningServiceControlPanel(Landroid/content/ComponentName;)Landroid/app/PendingIntent;
+HSPLandroid/app/IActivityManager;->getRunningUserIds()[I
+HSPLandroid/app/IActivityManager;->getServices(II)Ljava/util/List;
+HSPLandroid/app/IActivityManager;->getStackInfo(I)Landroid/app/ActivityManager$StackInfo;
+HSPLandroid/app/IActivityManager;->getTagForIntentSender(Landroid/content/IIntentSender;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/IActivityManager;->getTaskBounds(I)Landroid/graphics/Rect;
+HSPLandroid/app/IActivityManager;->getTaskDescription(I)Landroid/app/ActivityManager$TaskDescription;
+HSPLandroid/app/IActivityManager;->getTaskDescriptionIcon(Ljava/lang/String;I)Landroid/graphics/Bitmap;
+HSPLandroid/app/IActivityManager;->getTaskForActivity(Landroid/os/IBinder;Z)I
+HSPLandroid/app/IActivityManager;->getTaskSnapshot(IZ)Landroid/app/ActivityManager$TaskSnapshot;
+HSPLandroid/app/IActivityManager;->getTaskThumbnail(I)Landroid/app/ActivityManager$TaskThumbnail;
+HSPLandroid/app/IActivityManager;->getTasks(II)Ljava/util/List;
+HSPLandroid/app/IActivityManager;->getUidForIntentSender(Landroid/content/IIntentSender;)I
+HSPLandroid/app/IActivityManager;->getUidProcessState(ILjava/lang/String;)I
+HSPLandroid/app/IActivityManager;->getUriPermissionOwnerForActivity(Landroid/os/IBinder;)Landroid/os/IBinder;
+HSPLandroid/app/IActivityManager;->grantUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
+HSPLandroid/app/IActivityManager;->grantUriPermissionFromOwner(Landroid/os/IBinder;ILjava/lang/String;Landroid/net/Uri;III)V
+HSPLandroid/app/IActivityManager;->handleApplicationCrash(Landroid/os/IBinder;Landroid/app/ApplicationErrorReport$ParcelableCrashInfo;)V
+HSPLandroid/app/IActivityManager;->handleApplicationStrictModeViolation(Landroid/os/IBinder;ILandroid/os/StrictMode$ViolationInfo;)V
+HSPLandroid/app/IActivityManager;->handleApplicationWtf(Landroid/os/IBinder;Ljava/lang/String;ZLandroid/app/ApplicationErrorReport$ParcelableCrashInfo;)Z
+HSPLandroid/app/IActivityManager;->handleIncomingUser(IIIZZLjava/lang/String;Ljava/lang/String;)I
+HSPLandroid/app/IActivityManager;->hang(Landroid/os/IBinder;Z)V
+HSPLandroid/app/IActivityManager;->inputDispatchingTimedOut(IZLjava/lang/String;)J
+HSPLandroid/app/IActivityManager;->isAppForeground(I)Z
+HSPLandroid/app/IActivityManager;->isAppStartModeDisabled(ILjava/lang/String;)Z
+HSPLandroid/app/IActivityManager;->isAssistDataAllowedOnCurrentActivity()Z
+HSPLandroid/app/IActivityManager;->isImmersive(Landroid/os/IBinder;)Z
+HSPLandroid/app/IActivityManager;->isInLockTaskMode()Z
+HSPLandroid/app/IActivityManager;->isInMultiWindowMode(Landroid/os/IBinder;)Z
+HSPLandroid/app/IActivityManager;->isInPictureInPictureMode(Landroid/os/IBinder;)Z
+HSPLandroid/app/IActivityManager;->isIntentSenderAnActivity(Landroid/content/IIntentSender;)Z
+HSPLandroid/app/IActivityManager;->isIntentSenderTargetedToPackage(Landroid/content/IIntentSender;)Z
+HSPLandroid/app/IActivityManager;->isRootVoiceInteraction(Landroid/os/IBinder;)Z
+HSPLandroid/app/IActivityManager;->isTopActivityImmersive()Z
+HSPLandroid/app/IActivityManager;->isTopOfTask(Landroid/os/IBinder;)Z
+HSPLandroid/app/IActivityManager;->isUserAMonkey()Z
+HSPLandroid/app/IActivityManager;->isUserRunning(II)Z
+HSPLandroid/app/IActivityManager;->isVrModePackageEnabled(Landroid/content/ComponentName;)Z
+HSPLandroid/app/IActivityManager;->keyguardGoingAway(I)V
+HSPLandroid/app/IActivityManager;->killAllBackgroundProcesses()V
+HSPLandroid/app/IActivityManager;->killApplication(Ljava/lang/String;IILjava/lang/String;)V
+HSPLandroid/app/IActivityManager;->killApplicationProcess(Ljava/lang/String;I)V
+HSPLandroid/app/IActivityManager;->killBackgroundProcesses(Ljava/lang/String;I)V
+HSPLandroid/app/IActivityManager;->killPackageDependents(Ljava/lang/String;I)V
+HSPLandroid/app/IActivityManager;->killPids([ILjava/lang/String;Z)Z
+HSPLandroid/app/IActivityManager;->killProcessesBelowForeground(Ljava/lang/String;)Z
+HSPLandroid/app/IActivityManager;->killUid(IILjava/lang/String;)V
+HSPLandroid/app/IActivityManager;->launchAssistIntent(Landroid/content/Intent;ILjava/lang/String;ILandroid/os/Bundle;)Z
+HSPLandroid/app/IActivityManager;->makePackageIdle(Ljava/lang/String;I)V
+HSPLandroid/app/IActivityManager;->moveActivityTaskToBack(Landroid/os/IBinder;Z)Z
+HSPLandroid/app/IActivityManager;->moveStackToDisplay(II)V
+HSPLandroid/app/IActivityManager;->moveTaskBackwards(I)V
+HSPLandroid/app/IActivityManager;->moveTaskToDockedStack(IIZZLandroid/graphics/Rect;)Z
+HSPLandroid/app/IActivityManager;->moveTaskToFront(IILandroid/os/Bundle;)V
+HSPLandroid/app/IActivityManager;->moveTaskToStack(IIZ)V
+HSPLandroid/app/IActivityManager;->moveTasksToFullscreenStack(IZ)V
+HSPLandroid/app/IActivityManager;->moveTopActivityToPinnedStack(ILandroid/graphics/Rect;)Z
+HSPLandroid/app/IActivityManager;->navigateUpTo(Landroid/os/IBinder;Landroid/content/Intent;ILandroid/content/Intent;)Z
+HSPLandroid/app/IActivityManager;->newUriPermissionOwner(Ljava/lang/String;)Landroid/os/IBinder;
+HSPLandroid/app/IActivityManager;->noteAlarmFinish(Landroid/content/IIntentSender;ILjava/lang/String;)V
+HSPLandroid/app/IActivityManager;->noteAlarmStart(Landroid/content/IIntentSender;ILjava/lang/String;)V
+HSPLandroid/app/IActivityManager;->noteWakeupAlarm(Landroid/content/IIntentSender;ILjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/IActivityManager;->notifyActivityDrawn(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->notifyCleartextNetwork(I[B)V
+HSPLandroid/app/IActivityManager;->notifyEnterAnimationComplete(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->notifyLaunchTaskBehindComplete(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->notifyLockedProfile(I)V
+HSPLandroid/app/IActivityManager;->notifyPinnedStackAnimationEnded()V
+HSPLandroid/app/IActivityManager;->notifyPinnedStackAnimationStarted()V
+HSPLandroid/app/IActivityManager;->openContentUri(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/app/IActivityManager;->overridePendingTransition(Landroid/os/IBinder;Ljava/lang/String;II)V
+HSPLandroid/app/IActivityManager;->peekService(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;)Landroid/os/IBinder;
+HSPLandroid/app/IActivityManager;->performIdleMaintenance()V
+HSPLandroid/app/IActivityManager;->positionTaskInStack(III)V
+HSPLandroid/app/IActivityManager;->profileControl(Ljava/lang/String;IZLandroid/app/ProfilerInfo;I)Z
+HSPLandroid/app/IActivityManager;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V
+HSPLandroid/app/IActivityManager;->publishService(Landroid/os/IBinder;Landroid/content/Intent;Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->refContentProvider(Landroid/os/IBinder;II)Z
+HSPLandroid/app/IActivityManager;->registerIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)V
+HSPLandroid/app/IActivityManager;->registerProcessObserver(Landroid/app/IProcessObserver;)V
+HSPLandroid/app/IActivityManager;->registerReceiver(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;
+HSPLandroid/app/IActivityManager;->registerTaskStackListener(Landroid/app/ITaskStackListener;)V
+HSPLandroid/app/IActivityManager;->registerUidObserver(Landroid/app/IUidObserver;IILjava/lang/String;)V
+HSPLandroid/app/IActivityManager;->registerUserSwitchObserver(Landroid/app/IUserSwitchObserver;Ljava/lang/String;)V
+HSPLandroid/app/IActivityManager;->releaseActivityInstance(Landroid/os/IBinder;)Z
+HSPLandroid/app/IActivityManager;->releasePersistableUriPermission(Landroid/net/Uri;II)V
+HSPLandroid/app/IActivityManager;->releaseSomeActivities(Landroid/app/IApplicationThread;)V
+HSPLandroid/app/IActivityManager;->removeContentProvider(Landroid/os/IBinder;Z)V
+HSPLandroid/app/IActivityManager;->removeContentProviderExternal(Ljava/lang/String;Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->removeStack(I)V
+HSPLandroid/app/IActivityManager;->removeTask(I)Z
+HSPLandroid/app/IActivityManager;->reportActivityFullyDrawn(Landroid/os/IBinder;Z)V
+HSPLandroid/app/IActivityManager;->reportAssistContextExtras(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;Landroid/net/Uri;)V
+HSPLandroid/app/IActivityManager;->reportSizeConfigurations(Landroid/os/IBinder;[I[I[I)V
+HSPLandroid/app/IActivityManager;->requestActivityRelaunch(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->requestAssistContextExtras(ILcom/android/internal/os/IResultReceiver;Landroid/os/Bundle;Landroid/os/IBinder;ZZ)Z
+HSPLandroid/app/IActivityManager;->requestAutofillData(Lcom/android/internal/os/IResultReceiver;Landroid/os/Bundle;Landroid/os/IBinder;I)Z
+HSPLandroid/app/IActivityManager;->requestBugReport(I)V
+HSPLandroid/app/IActivityManager;->requestTelephonyBugReport(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/IActivityManager;->resizeDockedStack(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLandroid/app/IActivityManager;->resizePinnedStack(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLandroid/app/IActivityManager;->resizeStack(ILandroid/graphics/Rect;ZZZI)V
+HSPLandroid/app/IActivityManager;->resizeTask(ILandroid/graphics/Rect;I)V
+HSPLandroid/app/IActivityManager;->restart()V
+HSPLandroid/app/IActivityManager;->restartUserInBackground(I)I
+HSPLandroid/app/IActivityManager;->resumeAppSwitches()V
+HSPLandroid/app/IActivityManager;->revokeUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
+HSPLandroid/app/IActivityManager;->revokeUriPermissionFromOwner(Landroid/os/IBinder;Landroid/net/Uri;II)V
+HSPLandroid/app/IActivityManager;->scheduleApplicationInfoChanged(Ljava/util/List;I)V
+HSPLandroid/app/IActivityManager;->sendIdleJobTrigger()V
+HSPLandroid/app/IActivityManager;->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;->serviceDoneExecuting(Landroid/os/IBinder;III)V
+HSPLandroid/app/IActivityManager;->setActivityController(Landroid/app/IActivityController;Z)V
+HSPLandroid/app/IActivityManager;->setAlwaysFinish(Z)V
+HSPLandroid/app/IActivityManager;->setDebugApp(Ljava/lang/String;ZZ)V
+HSPLandroid/app/IActivityManager;->setDisablePreviewScreenshots(Landroid/os/IBinder;Z)V
+HSPLandroid/app/IActivityManager;->setDumpHeapDebugLimit(Ljava/lang/String;IJLjava/lang/String;)V
+HSPLandroid/app/IActivityManager;->setFocusedStack(I)V
+HSPLandroid/app/IActivityManager;->setFocusedTask(I)V
+HSPLandroid/app/IActivityManager;->setFrontActivityScreenCompatMode(I)V
+HSPLandroid/app/IActivityManager;->setHasTopUi(Z)V
+HSPLandroid/app/IActivityManager;->setImmersive(Landroid/os/IBinder;Z)V
+HSPLandroid/app/IActivityManager;->setLockScreenShown(Z)V
+HSPLandroid/app/IActivityManager;->setPackageAskScreenCompat(Ljava/lang/String;Z)V
+HSPLandroid/app/IActivityManager;->setPackageScreenCompatMode(Ljava/lang/String;I)V
+HSPLandroid/app/IActivityManager;->setPersistentVrThread(I)V
+HSPLandroid/app/IActivityManager;->setPictureInPictureParams(Landroid/os/IBinder;Landroid/app/PictureInPictureParams;)V
+HSPLandroid/app/IActivityManager;->setProcessImportant(Landroid/os/IBinder;IZLjava/lang/String;)V
+HSPLandroid/app/IActivityManager;->setProcessLimit(I)V
+HSPLandroid/app/IActivityManager;->setProcessMemoryTrimLevel(Ljava/lang/String;II)Z
+HSPLandroid/app/IActivityManager;->setRenderThread(I)V
+HSPLandroid/app/IActivityManager;->setRequestedOrientation(Landroid/os/IBinder;I)V
+HSPLandroid/app/IActivityManager;->setServiceForeground(Landroid/content/ComponentName;Landroid/os/IBinder;ILandroid/app/Notification;I)V
+HSPLandroid/app/IActivityManager;->setShowWhenLocked(Landroid/os/IBinder;Z)V
+HSPLandroid/app/IActivityManager;->setTaskDescription(Landroid/os/IBinder;Landroid/app/ActivityManager$TaskDescription;)V
+HSPLandroid/app/IActivityManager;->setTaskResizeable(II)V
+HSPLandroid/app/IActivityManager;->setTurnScreenOn(Landroid/os/IBinder;Z)V
+HSPLandroid/app/IActivityManager;->setUserIsMonkey(Z)V
+HSPLandroid/app/IActivityManager;->setVoiceKeepAwake(Landroid/service/voice/IVoiceInteractionSession;Z)V
+HSPLandroid/app/IActivityManager;->setVrMode(Landroid/os/IBinder;ZLandroid/content/ComponentName;)I
+HSPLandroid/app/IActivityManager;->setVrThread(I)V
+HSPLandroid/app/IActivityManager;->shouldUpRecreateTask(Landroid/os/IBinder;Ljava/lang/String;)Z
+HSPLandroid/app/IActivityManager;->showAssistFromActivity(Landroid/os/IBinder;Landroid/os/Bundle;)Z
+HSPLandroid/app/IActivityManager;->showBootMessage(Ljava/lang/CharSequence;Z)V
+HSPLandroid/app/IActivityManager;->showLockTaskEscapeMessage(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->showWaitingForDebugger(Landroid/app/IApplicationThread;Z)V
+HSPLandroid/app/IActivityManager;->shutdown(I)Z
+HSPLandroid/app/IActivityManager;->signalPersistentProcesses(I)V
+HSPLandroid/app/IActivityManager;->startActivities(Landroid/app/IApplicationThread;Ljava/lang/String;[Landroid/content/Intent;[Ljava/lang/String;Landroid/os/IBinder;Landroid/os/Bundle;I)I
+HSPLandroid/app/IActivityManager;->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
+HSPLandroid/app/IActivityManager;->startActivityAndWait(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)Landroid/app/WaitResult;
+HSPLandroid/app/IActivityManager;->startActivityAsCaller(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;ZI)I
+HSPLandroid/app/IActivityManager;->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
+HSPLandroid/app/IActivityManager;->startActivityFromRecents(ILandroid/os/Bundle;)I
+HSPLandroid/app/IActivityManager;->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
+HSPLandroid/app/IActivityManager;->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
+HSPLandroid/app/IActivityManager;->startAssistantActivity(Ljava/lang/String;IILandroid/content/Intent;Ljava/lang/String;Landroid/os/Bundle;I)I
+HSPLandroid/app/IActivityManager;->startBinderTracking()Z
+HSPLandroid/app/IActivityManager;->startConfirmDeviceCredentialIntent(Landroid/content/Intent;Landroid/os/Bundle;)V
+HSPLandroid/app/IActivityManager;->startInPlaceAnimationOnFrontMostApplication(Landroid/os/Bundle;)V
+HSPLandroid/app/IActivityManager;->startInstrumentation(Landroid/content/ComponentName;Ljava/lang/String;ILandroid/os/Bundle;Landroid/app/IInstrumentationWatcher;Landroid/app/IUiAutomationConnection;ILjava/lang/String;)Z
+HSPLandroid/app/IActivityManager;->startLocalVoiceInteraction(Landroid/os/IBinder;Landroid/os/Bundle;)V
+HSPLandroid/app/IActivityManager;->startLockTaskModeById(I)V
+HSPLandroid/app/IActivityManager;->startLockTaskModeByToken(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->startNextMatchingActivity(Landroid/os/IBinder;Landroid/content/Intent;Landroid/os/Bundle;)Z
+HSPLandroid/app/IActivityManager;->startService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;I)Landroid/content/ComponentName;
+HSPLandroid/app/IActivityManager;->startSystemLockTaskMode(I)V
+HSPLandroid/app/IActivityManager;->startUserInBackground(I)Z
+HSPLandroid/app/IActivityManager;->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
+HSPLandroid/app/IActivityManager;->stopAppSwitches()V
+HSPLandroid/app/IActivityManager;->stopBinderTrackingAndDump(Landroid/os/ParcelFileDescriptor;)Z
+HSPLandroid/app/IActivityManager;->stopLocalVoiceInteraction(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->stopLockTaskMode()V
+HSPLandroid/app/IActivityManager;->stopService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;I)I
+HSPLandroid/app/IActivityManager;->stopServiceToken(Landroid/content/ComponentName;Landroid/os/IBinder;I)Z
+HSPLandroid/app/IActivityManager;->stopSystemLockTaskMode()V
+HSPLandroid/app/IActivityManager;->stopUser(IZLandroid/app/IStopUserCallback;)I
+HSPLandroid/app/IActivityManager;->supportsLocalVoiceInteraction()Z
+HSPLandroid/app/IActivityManager;->suppressResizeConfigChanges(Z)V
+HSPLandroid/app/IActivityManager;->swapDockedAndFullscreenStack()V
+HSPLandroid/app/IActivityManager;->switchUser(I)Z
+HSPLandroid/app/IActivityManager;->takePersistableUriPermission(Landroid/net/Uri;II)V
+HSPLandroid/app/IActivityManager;->unbindBackupAgent(Landroid/content/pm/ApplicationInfo;)V
+HSPLandroid/app/IActivityManager;->unbindFinished(Landroid/os/IBinder;Landroid/content/Intent;Z)V
+HSPLandroid/app/IActivityManager;->unbindService(Landroid/app/IServiceConnection;)Z
+HSPLandroid/app/IActivityManager;->unbroadcastIntent(Landroid/app/IApplicationThread;Landroid/content/Intent;I)V
+HSPLandroid/app/IActivityManager;->unhandledBack()V
+HSPLandroid/app/IActivityManager;->unlockUser(I[B[BLandroid/os/IProgressListener;)Z
+HSPLandroid/app/IActivityManager;->unregisterIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)V
+HSPLandroid/app/IActivityManager;->unregisterProcessObserver(Landroid/app/IProcessObserver;)V
+HSPLandroid/app/IActivityManager;->unregisterReceiver(Landroid/content/IIntentReceiver;)V
+HSPLandroid/app/IActivityManager;->unregisterTaskStackListener(Landroid/app/ITaskStackListener;)V
+HSPLandroid/app/IActivityManager;->unregisterUidObserver(Landroid/app/IUidObserver;)V
+HSPLandroid/app/IActivityManager;->unregisterUserSwitchObserver(Landroid/app/IUserSwitchObserver;)V
+HSPLandroid/app/IActivityManager;->unstableProviderDied(Landroid/os/IBinder;)V
+HSPLandroid/app/IActivityManager;->updateConfiguration(Landroid/content/res/Configuration;)Z
+HSPLandroid/app/IActivityManager;->updateDeviceOwner(Ljava/lang/String;)V
+HSPLandroid/app/IActivityManager;->updateDisplayOverrideConfiguration(Landroid/content/res/Configuration;I)Z
+HSPLandroid/app/IActivityManager;->updateLockTaskPackages(I[Ljava/lang/String;)V
+HSPLandroid/app/IActivityManager;->updatePersistentConfiguration(Landroid/content/res/Configuration;)V
+HSPLandroid/app/IActivityManager;->waitForNetworkStateUpdate(J)V
+HSPLandroid/app/IActivityManager;->willActivityBeVisible(Landroid/os/IBinder;)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;->asInterface(Landroid/os/IBinder;)Landroid/app/IAlarmManager;
+HSPLandroid/app/IAlarmManager;->getNextAlarmClock(I)Landroid/app/AlarmManager$AlarmClockInfo;
+HSPLandroid/app/IAlarmManager;->getNextWakeFromIdleTime()J
+HSPLandroid/app/IAlarmManager;->remove(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
+HSPLandroid/app/IAlarmManager;->set(Ljava/lang/String;IJJJILandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;Landroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;)V
+HSPLandroid/app/IAlarmManager;->setTime(J)Z
+HSPLandroid/app/IAlarmManager;->setTimeZone(Ljava/lang/String;)V
+HSPLandroid/app/IAppTask$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/app/IAppTask$Stub$Proxy;->getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;
+HSPLandroid/app/IAppTask$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IAppTask;
+HSPLandroid/app/IAppTask;->finishAndRemoveTask()V
+HSPLandroid/app/IAppTask;->getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;
+HSPLandroid/app/IAppTask;->moveToFront()V
+HSPLandroid/app/IAppTask;->setExcludeFromRecents(Z)V
+HSPLandroid/app/IAppTask;->startActivity(Landroid/os/IBinder;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/Bundle;)I
+HSPLandroid/app/IApplicationThread$Stub;-><init>()V
+HSPLandroid/app/IApplicationThread$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/app/IApplicationThread$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/app/IApplicationThread;->attachAgent(Ljava/lang/String;)V
+HSPLandroid/app/IApplicationThread;->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;)V
+HSPLandroid/app/IApplicationThread;->clearDnsCache()V
+HSPLandroid/app/IApplicationThread;->dispatchPackageBroadcast(I[Ljava/lang/String;)V
+HSPLandroid/app/IApplicationThread;->dumpActivity(Landroid/os/ParcelFileDescriptor;Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;)V
+HSPLandroid/app/IApplicationThread;->dumpDbInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)V
+HSPLandroid/app/IApplicationThread;->dumpGfxInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)V
+HSPLandroid/app/IApplicationThread;->dumpHeap(ZZZLjava/lang/String;Landroid/os/ParcelFileDescriptor;)V
+HSPLandroid/app/IApplicationThread;->dumpMemInfo(Landroid/os/ParcelFileDescriptor;Landroid/os/Debug$MemoryInfo;ZZZZZ[Ljava/lang/String;)V
+HSPLandroid/app/IApplicationThread;->dumpProvider(Landroid/os/ParcelFileDescriptor;Landroid/os/IBinder;[Ljava/lang/String;)V
+HSPLandroid/app/IApplicationThread;->dumpService(Landroid/os/ParcelFileDescriptor;Landroid/os/IBinder;[Ljava/lang/String;)V
+HSPLandroid/app/IApplicationThread;->handleTrustStorageUpdate()V
+HSPLandroid/app/IApplicationThread;->notifyCleartextNetwork([B)V
+HSPLandroid/app/IApplicationThread;->processInBackground()V
+HSPLandroid/app/IApplicationThread;->profilerControl(ZLandroid/app/ProfilerInfo;I)V
+HSPLandroid/app/IApplicationThread;->requestAssistContextExtras(Landroid/os/IBinder;Landroid/os/IBinder;III)V
+HSPLandroid/app/IApplicationThread;->scheduleActivityConfigurationChanged(Landroid/os/IBinder;Landroid/content/res/Configuration;)V
+HSPLandroid/app/IApplicationThread;->scheduleActivityMovedToDisplay(Landroid/os/IBinder;ILandroid/content/res/Configuration;)V
+HSPLandroid/app/IApplicationThread;->scheduleApplicationInfoChanged(Landroid/content/pm/ApplicationInfo;)V
+HSPLandroid/app/IApplicationThread;->scheduleBindService(Landroid/os/IBinder;Landroid/content/Intent;ZI)V
+HSPLandroid/app/IApplicationThread;->scheduleConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLandroid/app/IApplicationThread;->scheduleCrash(Ljava/lang/String;)V
+HSPLandroid/app/IApplicationThread;->scheduleCreateBackupAgent(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;I)V
+HSPLandroid/app/IApplicationThread;->scheduleCreateService(Landroid/os/IBinder;Landroid/content/pm/ServiceInfo;Landroid/content/res/CompatibilityInfo;I)V
+HSPLandroid/app/IApplicationThread;->scheduleDestroyActivity(Landroid/os/IBinder;ZI)V
+HSPLandroid/app/IApplicationThread;->scheduleDestroyBackupAgent(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;)V
+HSPLandroid/app/IApplicationThread;->scheduleEnterAnimationComplete(Landroid/os/IBinder;)V
+HSPLandroid/app/IApplicationThread;->scheduleExit()V
+HSPLandroid/app/IApplicationThread;->scheduleInstallProvider(Landroid/content/pm/ProviderInfo;)V
+HSPLandroid/app/IApplicationThread;->scheduleLaunchActivity(Landroid/content/Intent;Landroid/os/IBinder;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;ZZLandroid/app/ProfilerInfo;)V
+HSPLandroid/app/IApplicationThread;->scheduleLocalVoiceInteractionStarted(Landroid/os/IBinder;Lcom/android/internal/app/IVoiceInteractor;)V
+HSPLandroid/app/IApplicationThread;->scheduleLowMemory()V
+HSPLandroid/app/IApplicationThread;->scheduleMultiWindowModeChanged(Landroid/os/IBinder;ZLandroid/content/res/Configuration;)V
+HSPLandroid/app/IApplicationThread;->scheduleNewIntent(Ljava/util/List;Landroid/os/IBinder;Z)V
+HSPLandroid/app/IApplicationThread;->scheduleOnNewActivityOptions(Landroid/os/IBinder;Landroid/os/Bundle;)V
+HSPLandroid/app/IApplicationThread;->schedulePauseActivity(Landroid/os/IBinder;ZZIZ)V
+HSPLandroid/app/IApplicationThread;->schedulePictureInPictureModeChanged(Landroid/os/IBinder;ZLandroid/content/res/Configuration;)V
+HSPLandroid/app/IApplicationThread;->scheduleReceiver(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Landroid/content/res/CompatibilityInfo;ILjava/lang/String;Landroid/os/Bundle;ZII)V
+HSPLandroid/app/IApplicationThread;->scheduleRegisteredReceiver(Landroid/content/IIntentReceiver;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZII)V
+HSPLandroid/app/IApplicationThread;->scheduleRelaunchActivity(Landroid/os/IBinder;Ljava/util/List;Ljava/util/List;IZLandroid/content/res/Configuration;Landroid/content/res/Configuration;Z)V
+HSPLandroid/app/IApplicationThread;->scheduleResumeActivity(Landroid/os/IBinder;IZLandroid/os/Bundle;)V
+HSPLandroid/app/IApplicationThread;->scheduleSendResult(Landroid/os/IBinder;Ljava/util/List;)V
+HSPLandroid/app/IApplicationThread;->scheduleServiceArgs(Landroid/os/IBinder;Landroid/content/pm/ParceledListSlice;)V
+HSPLandroid/app/IApplicationThread;->scheduleSleeping(Landroid/os/IBinder;Z)V
+HSPLandroid/app/IApplicationThread;->scheduleStopActivity(Landroid/os/IBinder;ZI)V
+HSPLandroid/app/IApplicationThread;->scheduleStopService(Landroid/os/IBinder;)V
+HSPLandroid/app/IApplicationThread;->scheduleSuicide()V
+HSPLandroid/app/IApplicationThread;->scheduleTranslucentConversionComplete(Landroid/os/IBinder;Z)V
+HSPLandroid/app/IApplicationThread;->scheduleTrimMemory(I)V
+HSPLandroid/app/IApplicationThread;->scheduleUnbindService(Landroid/os/IBinder;Landroid/content/Intent;)V
+HSPLandroid/app/IApplicationThread;->scheduleWindowVisibility(Landroid/os/IBinder;Z)V
+HSPLandroid/app/IApplicationThread;->setCoreSettings(Landroid/os/Bundle;)V
+HSPLandroid/app/IApplicationThread;->setHttpProxy(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;)V
+HSPLandroid/app/IApplicationThread;->setNetworkBlockSeq(J)V
+HSPLandroid/app/IApplicationThread;->setProcessState(I)V
+HSPLandroid/app/IApplicationThread;->setSchedulingGroup(I)V
+HSPLandroid/app/IApplicationThread;->startBinderTracking()V
+HSPLandroid/app/IApplicationThread;->stopBinderTrackingAndDump(Landroid/os/ParcelFileDescriptor;)V
+HSPLandroid/app/IApplicationThread;->unstableProviderDied(Landroid/os/IBinder;)V
+HSPLandroid/app/IApplicationThread;->updatePackageCompatibilityInfo(Ljava/lang/String;Landroid/content/res/CompatibilityInfo;)V
+HSPLandroid/app/IApplicationThread;->updateTimePrefs(I)V
+HSPLandroid/app/IApplicationThread;->updateTimeZone()V
+HSPLandroid/app/IInstantAppResolver$Stub;-><init>()V
+HSPLandroid/app/IInstantAppResolver;->getInstantAppIntentFilterList([ILjava/lang/String;Ljava/lang/String;Landroid/os/IRemoteCallback;)V
+HSPLandroid/app/IInstantAppResolver;->getInstantAppResolveInfoList([ILjava/lang/String;ILandroid/os/IRemoteCallback;)V
+HSPLandroid/app/IInstrumentationWatcher$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/app/IInstrumentationWatcher$Stub$Proxy;->instrumentationStatus(Landroid/content/ComponentName;ILandroid/os/Bundle;)V
+HSPLandroid/app/IInstrumentationWatcher$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IInstrumentationWatcher;
+HSPLandroid/app/IInstrumentationWatcher;->instrumentationFinished(Landroid/content/ComponentName;ILandroid/os/Bundle;)V
+HSPLandroid/app/IInstrumentationWatcher;->instrumentationStatus(Landroid/content/ComponentName;ILandroid/os/Bundle;)V
+HSPLandroid/app/INotificationManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/app/INotificationManager$Stub$Proxy;->areNotificationsEnabled(Ljava/lang/String;)Z
+HSPLandroid/app/INotificationManager$Stub$Proxy;->cancelAllNotifications(Ljava/lang/String;I)V
+HSPLandroid/app/INotificationManager$Stub$Proxy;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;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;->getActiveNotificationsFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/INotificationManager$Stub$Proxy;->getAppActiveNotifications(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/INotificationManager$Stub$Proxy;->getEffectsSuppressor()Landroid/content/ComponentName;
+HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannel(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;
+HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannelGroups(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannels(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/INotificationManager$Stub$Proxy;->getZenMode()I
+HSPLandroid/app/INotificationManager$Stub$Proxy;->getZenModeConfig()Landroid/service/notification/ZenModeConfig;
+HSPLandroid/app/INotificationManager$Stub$Proxy;->registerListener(Landroid/service/notification/INotificationListener;Landroid/content/ComponentName;I)V
+HSPLandroid/app/INotificationManager$Stub$Proxy;->requestBindListener(Landroid/content/ComponentName;)V
+HSPLandroid/app/INotificationManager$Stub$Proxy;->requestUnbindListener(Landroid/service/notification/INotificationListener;)V
+HSPLandroid/app/INotificationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/INotificationManager;
+HSPLandroid/app/INotificationManager;->addAutomaticZenRule(Landroid/app/AutomaticZenRule;)Ljava/lang/String;
+HSPLandroid/app/INotificationManager;->applyAdjustmentFromAssistant(Landroid/service/notification/INotificationListener;Landroid/service/notification/Adjustment;)V
+HSPLandroid/app/INotificationManager;->applyAdjustmentsFromAssistant(Landroid/service/notification/INotificationListener;Ljava/util/List;)V
+HSPLandroid/app/INotificationManager;->applyEnqueuedAdjustmentFromAssistant(Landroid/service/notification/INotificationListener;Landroid/service/notification/Adjustment;)V
+HSPLandroid/app/INotificationManager;->applyRestore([BI)V
+HSPLandroid/app/INotificationManager;->areNotificationsEnabled(Ljava/lang/String;)Z
+HSPLandroid/app/INotificationManager;->areNotificationsEnabledForPackage(Ljava/lang/String;I)Z
+HSPLandroid/app/INotificationManager;->canShowBadge(Ljava/lang/String;I)Z
+HSPLandroid/app/INotificationManager;->cancelAllNotifications(Ljava/lang/String;I)V
+HSPLandroid/app/INotificationManager;->cancelNotificationFromListener(Landroid/service/notification/INotificationListener;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/app/INotificationManager;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;II)V
+HSPLandroid/app/INotificationManager;->cancelNotificationsFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;)V
+HSPLandroid/app/INotificationManager;->cancelToast(Ljava/lang/String;Landroid/app/ITransientNotification;)V
+HSPLandroid/app/INotificationManager;->clearData(Ljava/lang/String;IZ)V
+HSPLandroid/app/INotificationManager;->createNotificationChannelGroups(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
+HSPLandroid/app/INotificationManager;->createNotificationChannels(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
+HSPLandroid/app/INotificationManager;->createNotificationChannelsForPackage(Ljava/lang/String;ILandroid/content/pm/ParceledListSlice;)V
+HSPLandroid/app/INotificationManager;->deleteNotificationChannel(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/INotificationManager;->deleteNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/INotificationManager;->enqueueNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;I)V
+HSPLandroid/app/INotificationManager;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;I)V
+HSPLandroid/app/INotificationManager;->getActiveNotifications(Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification;
+HSPLandroid/app/INotificationManager;->getActiveNotificationsFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/INotificationManager;->getAppActiveNotifications(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/INotificationManager;->getAutomaticZenRule(Ljava/lang/String;)Landroid/app/AutomaticZenRule;
+HSPLandroid/app/INotificationManager;->getBackupPayload(I)[B
+HSPLandroid/app/INotificationManager;->getDeletedChannelCount(Ljava/lang/String;I)I
+HSPLandroid/app/INotificationManager;->getEffectsSuppressor()Landroid/content/ComponentName;
+HSPLandroid/app/INotificationManager;->getEnabledNotificationListenerPackages()Ljava/util/List;
+HSPLandroid/app/INotificationManager;->getEnabledNotificationListeners(I)Ljava/util/List;
+HSPLandroid/app/INotificationManager;->getHintsFromListener(Landroid/service/notification/INotificationListener;)I
+HSPLandroid/app/INotificationManager;->getHistoricalNotifications(Ljava/lang/String;I)[Landroid/service/notification/StatusBarNotification;
+HSPLandroid/app/INotificationManager;->getInterruptionFilterFromListener(Landroid/service/notification/INotificationListener;)I
+HSPLandroid/app/INotificationManager;->getNotificationChannel(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;
+HSPLandroid/app/INotificationManager;->getNotificationChannelForPackage(Ljava/lang/String;ILjava/lang/String;Z)Landroid/app/NotificationChannel;
+HSPLandroid/app/INotificationManager;->getNotificationChannelGroupForPackage(Ljava/lang/String;Ljava/lang/String;I)Landroid/app/NotificationChannelGroup;
+HSPLandroid/app/INotificationManager;->getNotificationChannelGroups(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/INotificationManager;->getNotificationChannelGroupsForPackage(Ljava/lang/String;IZ)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/INotificationManager;->getNotificationChannelGroupsFromPrivilegedListener(Landroid/service/notification/INotificationListener;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/INotificationManager;->getNotificationChannels(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/INotificationManager;->getNotificationChannelsForPackage(Ljava/lang/String;IZ)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/INotificationManager;->getNotificationChannelsFromPrivilegedListener(Landroid/service/notification/INotificationListener;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/INotificationManager;->getNotificationPolicy(Ljava/lang/String;)Landroid/app/NotificationManager$Policy;
+HSPLandroid/app/INotificationManager;->getNumNotificationChannelsForPackage(Ljava/lang/String;IZ)I
+HSPLandroid/app/INotificationManager;->getPackageImportance(Ljava/lang/String;)I
+HSPLandroid/app/INotificationManager;->getRuleInstanceCount(Landroid/content/ComponentName;)I
+HSPLandroid/app/INotificationManager;->getSnoozedNotificationsFromListener(Landroid/service/notification/INotificationListener;I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/INotificationManager;->getZenMode()I
+HSPLandroid/app/INotificationManager;->getZenModeConfig()Landroid/service/notification/ZenModeConfig;
+HSPLandroid/app/INotificationManager;->getZenRules()Ljava/util/List;
+HSPLandroid/app/INotificationManager;->isNotificationAssistantAccessGranted(Landroid/content/ComponentName;)Z
+HSPLandroid/app/INotificationManager;->isNotificationListenerAccessGranted(Landroid/content/ComponentName;)Z
+HSPLandroid/app/INotificationManager;->isNotificationListenerAccessGrantedForUser(Landroid/content/ComponentName;I)Z
+HSPLandroid/app/INotificationManager;->isNotificationPolicyAccessGranted(Ljava/lang/String;)Z
+HSPLandroid/app/INotificationManager;->isNotificationPolicyAccessGrantedForPackage(Ljava/lang/String;)Z
+HSPLandroid/app/INotificationManager;->isSystemConditionProviderEnabled(Ljava/lang/String;)Z
+HSPLandroid/app/INotificationManager;->matchesCallFilter(Landroid/os/Bundle;)Z
+HSPLandroid/app/INotificationManager;->notifyConditions(Ljava/lang/String;Landroid/service/notification/IConditionProvider;[Landroid/service/notification/Condition;)V
+HSPLandroid/app/INotificationManager;->onlyHasDefaultChannel(Ljava/lang/String;I)Z
+HSPLandroid/app/INotificationManager;->registerListener(Landroid/service/notification/INotificationListener;Landroid/content/ComponentName;I)V
+HSPLandroid/app/INotificationManager;->removeAutomaticZenRule(Ljava/lang/String;)Z
+HSPLandroid/app/INotificationManager;->removeAutomaticZenRules(Ljava/lang/String;)Z
+HSPLandroid/app/INotificationManager;->requestBindListener(Landroid/content/ComponentName;)V
+HSPLandroid/app/INotificationManager;->requestBindProvider(Landroid/content/ComponentName;)V
+HSPLandroid/app/INotificationManager;->requestHintsFromListener(Landroid/service/notification/INotificationListener;I)V
+HSPLandroid/app/INotificationManager;->requestInterruptionFilterFromListener(Landroid/service/notification/INotificationListener;I)V
+HSPLandroid/app/INotificationManager;->requestUnbindListener(Landroid/service/notification/INotificationListener;)V
+HSPLandroid/app/INotificationManager;->requestUnbindProvider(Landroid/service/notification/IConditionProvider;)V
+HSPLandroid/app/INotificationManager;->setInterruptionFilter(Ljava/lang/String;I)V
+HSPLandroid/app/INotificationManager;->setNotificationAssistantAccessGranted(Landroid/content/ComponentName;Z)V
+HSPLandroid/app/INotificationManager;->setNotificationAssistantAccessGrantedForUser(Landroid/content/ComponentName;IZ)V
+HSPLandroid/app/INotificationManager;->setNotificationListenerAccessGranted(Landroid/content/ComponentName;Z)V
+HSPLandroid/app/INotificationManager;->setNotificationListenerAccessGrantedForUser(Landroid/content/ComponentName;IZ)V
+HSPLandroid/app/INotificationManager;->setNotificationPolicy(Ljava/lang/String;Landroid/app/NotificationManager$Policy;)V
+HSPLandroid/app/INotificationManager;->setNotificationPolicyAccessGranted(Ljava/lang/String;Z)V
+HSPLandroid/app/INotificationManager;->setNotificationsEnabledForPackage(Ljava/lang/String;IZ)V
+HSPLandroid/app/INotificationManager;->setNotificationsShownFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;)V
+HSPLandroid/app/INotificationManager;->setOnNotificationPostedTrimFromListener(Landroid/service/notification/INotificationListener;I)V
+HSPLandroid/app/INotificationManager;->setShowBadge(Ljava/lang/String;IZ)V
+HSPLandroid/app/INotificationManager;->setZenMode(ILandroid/net/Uri;Ljava/lang/String;)V
+HSPLandroid/app/INotificationManager;->snoozeNotificationUntilContextFromListener(Landroid/service/notification/INotificationListener;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/INotificationManager;->snoozeNotificationUntilFromListener(Landroid/service/notification/INotificationListener;Ljava/lang/String;J)V
+HSPLandroid/app/INotificationManager;->unregisterListener(Landroid/service/notification/INotificationListener;I)V
+HSPLandroid/app/INotificationManager;->unsnoozeNotificationFromAssistant(Landroid/service/notification/INotificationListener;Ljava/lang/String;)V
+HSPLandroid/app/INotificationManager;->updateAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;)Z
+HSPLandroid/app/INotificationManager;->updateNotificationChannelForPackage(Ljava/lang/String;ILandroid/app/NotificationChannel;)V
+HSPLandroid/app/INotificationManager;->updateNotificationChannelFromPrivilegedListener(Landroid/service/notification/INotificationListener;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;)V
+HSPLandroid/app/IProcessObserver$Stub;-><init>()V
+HSPLandroid/app/IProcessObserver$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/app/IProcessObserver;->onForegroundActivitiesChanged(IIZ)V
+HSPLandroid/app/IProcessObserver;->onProcessDied(II)V
+HSPLandroid/app/ISearchManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/app/ISearchManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/ISearchManager;
+HSPLandroid/app/ISearchManager;->getGlobalSearchActivities()Ljava/util/List;
+HSPLandroid/app/ISearchManager;->getGlobalSearchActivity()Landroid/content/ComponentName;
+HSPLandroid/app/ISearchManager;->getSearchableInfo(Landroid/content/ComponentName;)Landroid/app/SearchableInfo;
+HSPLandroid/app/ISearchManager;->getSearchablesInGlobalSearch()Ljava/util/List;
+HSPLandroid/app/ISearchManager;->getWebSearchActivity()Landroid/content/ComponentName;
+HSPLandroid/app/ISearchManager;->launchAssist(Landroid/os/Bundle;)V
+HSPLandroid/app/ISearchManager;->launchLegacyAssist(Ljava/lang/String;ILandroid/os/Bundle;)Z
+HSPLandroid/app/IServiceConnection$Stub;-><init>()V
+HSPLandroid/app/IServiceConnection$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/app/IServiceConnection$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/app/IServiceConnection;->connected(Landroid/content/ComponentName;Landroid/os/IBinder;Z)V
+HSPLandroid/app/ITaskStackListener$Stub;-><init>()V
+HSPLandroid/app/ITaskStackListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/app/ITaskStackListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/app/ITaskStackListener;->onActivityDismissingDockedStack()V
+HSPLandroid/app/ITaskStackListener;->onActivityForcedResizable(Ljava/lang/String;II)V
+HSPLandroid/app/ITaskStackListener;->onActivityLaunchOnSecondaryDisplayFailed()V
+HSPLandroid/app/ITaskStackListener;->onActivityPinned(Ljava/lang/String;I)V
+HSPLandroid/app/ITaskStackListener;->onActivityRequestedOrientationChanged(II)V
+HSPLandroid/app/ITaskStackListener;->onActivityUnpinned()V
+HSPLandroid/app/ITaskStackListener;->onPinnedActivityRestartAttempt(Z)V
+HSPLandroid/app/ITaskStackListener;->onPinnedStackAnimationEnded()V
+HSPLandroid/app/ITaskStackListener;->onPinnedStackAnimationStarted()V
+HSPLandroid/app/ITaskStackListener;->onTaskCreated(ILandroid/content/ComponentName;)V
+HSPLandroid/app/ITaskStackListener;->onTaskDescriptionChanged(ILandroid/app/ActivityManager$TaskDescription;)V
+HSPLandroid/app/ITaskStackListener;->onTaskMovedToFront(I)V
+HSPLandroid/app/ITaskStackListener;->onTaskProfileLocked(II)V
+HSPLandroid/app/ITaskStackListener;->onTaskRemovalStarted(I)V
+HSPLandroid/app/ITaskStackListener;->onTaskRemoved(I)V
+HSPLandroid/app/ITaskStackListener;->onTaskSnapshotChanged(ILandroid/app/ActivityManager$TaskSnapshot;)V
+HSPLandroid/app/ITaskStackListener;->onTaskStackChanged()V
+HSPLandroid/app/ITransientNotification$Stub;-><init>()V
+HSPLandroid/app/ITransientNotification;->hide()V
+HSPLandroid/app/ITransientNotification;->show(Landroid/os/IBinder;)V
+HSPLandroid/app/IUiAutomationConnection$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/app/IUiAutomationConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IUiAutomationConnection;
+HSPLandroid/app/IUiAutomationConnection;->clearWindowAnimationFrameStats()V
+HSPLandroid/app/IUiAutomationConnection;->clearWindowContentFrameStats(I)Z
+HSPLandroid/app/IUiAutomationConnection;->connect(Landroid/accessibilityservice/IAccessibilityServiceClient;I)V
+HSPLandroid/app/IUiAutomationConnection;->disconnect()V
+HSPLandroid/app/IUiAutomationConnection;->executeShellCommand(Ljava/lang/String;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;)V
+HSPLandroid/app/IUiAutomationConnection;->getWindowAnimationFrameStats()Landroid/view/WindowAnimationFrameStats;
+HSPLandroid/app/IUiAutomationConnection;->getWindowContentFrameStats(I)Landroid/view/WindowContentFrameStats;
+HSPLandroid/app/IUiAutomationConnection;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/app/IUiAutomationConnection;->injectInputEvent(Landroid/view/InputEvent;Z)Z
+HSPLandroid/app/IUiAutomationConnection;->revokeRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/app/IUiAutomationConnection;->setRotation(I)Z
+HSPLandroid/app/IUiAutomationConnection;->shutdown()V
+HSPLandroid/app/IUiAutomationConnection;->takeScreenshot(II)Landroid/graphics/Bitmap;
+HSPLandroid/app/IUiModeManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/app/IUiModeManager$Stub$Proxy;->getCurrentModeType()I
+HSPLandroid/app/IUiModeManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IUiModeManager;
+HSPLandroid/app/IUiModeManager;->disableCarMode(I)V
+HSPLandroid/app/IUiModeManager;->enableCarMode(I)V
+HSPLandroid/app/IUiModeManager;->getCurrentModeType()I
+HSPLandroid/app/IUiModeManager;->getNightMode()I
+HSPLandroid/app/IUiModeManager;->isNightModeLocked()Z
+HSPLandroid/app/IUiModeManager;->isUiModeLocked()Z
+HSPLandroid/app/IUiModeManager;->setNightMode(I)V
+HSPLandroid/app/IUserSwitchObserver$Stub;-><init>()V
+HSPLandroid/app/IUserSwitchObserver$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/app/IUserSwitchObserver;->onForegroundProfileSwitch(I)V
+HSPLandroid/app/IUserSwitchObserver;->onLockedBootComplete(I)V
+HSPLandroid/app/IUserSwitchObserver;->onUserSwitchComplete(I)V
+HSPLandroid/app/IWallpaperManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/app/IWallpaperManager$Stub$Proxy;->getHeightHint()I
+HSPLandroid/app/IWallpaperManager$Stub$Proxy;->getWallpaper(Ljava/lang/String;Landroid/app/IWallpaperManagerCallback;ILandroid/os/Bundle;I)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/app/IWallpaperManager$Stub$Proxy;->getWallpaperColors(II)Landroid/app/WallpaperColors;
+HSPLandroid/app/IWallpaperManager$Stub$Proxy;->getWallpaperInfo(I)Landroid/app/WallpaperInfo;
+HSPLandroid/app/IWallpaperManager$Stub$Proxy;->getWidthHint()I
+HSPLandroid/app/IWallpaperManager$Stub$Proxy;->isWallpaperSupported(Ljava/lang/String;)Z
+HSPLandroid/app/IWallpaperManager$Stub$Proxy;->registerWallpaperColorsCallback(Landroid/app/IWallpaperManagerCallback;I)V
+HSPLandroid/app/IWallpaperManager$Stub$Proxy;->setLockWallpaperCallback(Landroid/app/IWallpaperManagerCallback;)Z
+HSPLandroid/app/IWallpaperManager$Stub$Proxy;->unregisterWallpaperColorsCallback(Landroid/app/IWallpaperManagerCallback;I)V
+HSPLandroid/app/IWallpaperManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IWallpaperManager;
+HSPLandroid/app/IWallpaperManager;->clearWallpaper(Ljava/lang/String;II)V
+HSPLandroid/app/IWallpaperManager;->getHeightHint()I
+HSPLandroid/app/IWallpaperManager;->getName()Ljava/lang/String;
+HSPLandroid/app/IWallpaperManager;->getWallpaper(Ljava/lang/String;Landroid/app/IWallpaperManagerCallback;ILandroid/os/Bundle;I)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/app/IWallpaperManager;->getWallpaperColors(II)Landroid/app/WallpaperColors;
+HSPLandroid/app/IWallpaperManager;->getWallpaperIdForUser(II)I
+HSPLandroid/app/IWallpaperManager;->getWallpaperInfo(I)Landroid/app/WallpaperInfo;
+HSPLandroid/app/IWallpaperManager;->getWidthHint()I
+HSPLandroid/app/IWallpaperManager;->hasNamedWallpaper(Ljava/lang/String;)Z
+HSPLandroid/app/IWallpaperManager;->isSetWallpaperAllowed(Ljava/lang/String;)Z
+HSPLandroid/app/IWallpaperManager;->isWallpaperBackupEligible(II)Z
+HSPLandroid/app/IWallpaperManager;->isWallpaperSupported(Ljava/lang/String;)Z
+HSPLandroid/app/IWallpaperManager;->registerWallpaperColorsCallback(Landroid/app/IWallpaperManagerCallback;I)V
+HSPLandroid/app/IWallpaperManager;->setDimensionHints(IILjava/lang/String;)V
+HSPLandroid/app/IWallpaperManager;->setDisplayPadding(Landroid/graphics/Rect;Ljava/lang/String;)V
+HSPLandroid/app/IWallpaperManager;->setLockWallpaperCallback(Landroid/app/IWallpaperManagerCallback;)Z
+HSPLandroid/app/IWallpaperManager;->setWallpaper(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;ZLandroid/os/Bundle;ILandroid/app/IWallpaperManagerCallback;I)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/app/IWallpaperManager;->setWallpaperComponent(Landroid/content/ComponentName;)V
+HSPLandroid/app/IWallpaperManager;->setWallpaperComponentChecked(Landroid/content/ComponentName;Ljava/lang/String;I)V
+HSPLandroid/app/IWallpaperManager;->settingsRestored()V
+HSPLandroid/app/IWallpaperManager;->unregisterWallpaperColorsCallback(Landroid/app/IWallpaperManagerCallback;I)V
+HSPLandroid/app/IWallpaperManagerCallback$Stub;-><init>()V
+HSPLandroid/app/IWallpaperManagerCallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/app/IWallpaperManagerCallback;->onWallpaperChanged()V
+HSPLandroid/app/IWallpaperManagerCallback;->onWallpaperColorsChanged(Landroid/app/WallpaperColors;II)V
+HSPLandroid/app/InstantAppResolverService$1;-><init>(Landroid/app/InstantAppResolverService;)V
+HSPLandroid/app/InstantAppResolverService$ServiceHandler;-><init>(Landroid/app/InstantAppResolverService;Landroid/os/Looper;)V
+HSPLandroid/app/InstantAppResolverService;-><init>()V
+HSPLandroid/app/InstantAppResolverService;->attachBaseContext(Landroid/content/Context;)V
+HSPLandroid/app/InstantAppResolverService;->getLooper()Landroid/os/Looper;
+HSPLandroid/app/InstantAppResolverService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HSPLandroid/app/Instrumentation$EmptyRunnable;-><init>()V
+HSPLandroid/app/Instrumentation$EmptyRunnable;-><init>(Landroid/app/Instrumentation$EmptyRunnable;)V
+HSPLandroid/app/Instrumentation$EmptyRunnable;->run()V
+HSPLandroid/app/Instrumentation$Idler;-><init>(Ljava/lang/Runnable;)V
+HSPLandroid/app/Instrumentation$Idler;->queueIdle()Z
+HSPLandroid/app/Instrumentation$Idler;->waitForIdle()V
+HSPLandroid/app/Instrumentation$InstrumentationThread;-><init>(Landroid/app/Instrumentation;Ljava/lang/String;)V
+HSPLandroid/app/Instrumentation$InstrumentationThread;->run()V
+HSPLandroid/app/Instrumentation$SyncRunnable;-><init>(Ljava/lang/Runnable;)V
+HSPLandroid/app/Instrumentation$SyncRunnable;->run()V
+HSPLandroid/app/Instrumentation$SyncRunnable;->waitForComplete()V
+HSPLandroid/app/Instrumentation;->-get0(Landroid/app/Instrumentation;)Z
+HSPLandroid/app/Instrumentation;-><init>()V
+HSPLandroid/app/Instrumentation;->callActivityOnCreate(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroid/app/Instrumentation;->callActivityOnNewIntent(Landroid/app/Activity;Landroid/content/Intent;)V
+HSPLandroid/app/Instrumentation;->callActivityOnNewIntent(Landroid/app/Activity;Lcom/android/internal/content/ReferrerIntent;)V
+HSPLandroid/app/Instrumentation;->callActivityOnPause(Landroid/app/Activity;)V
+HSPLandroid/app/Instrumentation;->callActivityOnPostCreate(Landroid/app/Activity;Landroid/os/Bundle;)V
+HSPLandroid/app/Instrumentation;->callActivityOnRestoreInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)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
+HSPLandroid/app/Instrumentation;->callActivityOnStop(Landroid/app/Activity;)V
+HSPLandroid/app/Instrumentation;->callActivityOnUserLeaving(Landroid/app/Activity;)V
+HSPLandroid/app/Instrumentation;->callApplicationOnCreate(Landroid/app/Application;)V
+HSPLandroid/app/Instrumentation;->checkStartActivityResult(ILjava/lang/Object;)V
+HSPLandroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/app/Activity;Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/Instrumentation$ActivityResult;
+HSPLandroid/app/Instrumentation;->getComponentName()Landroid/content/ComponentName;
+HSPLandroid/app/Instrumentation;->getContext()Landroid/content/Context;
+HSPLandroid/app/Instrumentation;->getTargetContext()Landroid/content/Context;
+HSPLandroid/app/Instrumentation;->init(Landroid/app/ActivityThread;Landroid/content/Context;Landroid/content/Context;Landroid/content/ComponentName;Landroid/app/IInstrumentationWatcher;Landroid/app/IUiAutomationConnection;)V
+HSPLandroid/app/Instrumentation;->newActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;
+HSPLandroid/app/Instrumentation;->newApplication(Ljava/lang/Class;Landroid/content/Context;)Landroid/app/Application;
+HSPLandroid/app/Instrumentation;->newApplication(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Context;)Landroid/app/Application;
+HSPLandroid/app/Instrumentation;->onCreate(Landroid/os/Bundle;)V
+HSPLandroid/app/Instrumentation;->onStart()V
+HSPLandroid/app/Instrumentation;->postPerformCreate(Landroid/app/Activity;)V
+HSPLandroid/app/Instrumentation;->prePerformCreate(Landroid/app/Activity;)V
+HSPLandroid/app/Instrumentation;->runOnMainSync(Ljava/lang/Runnable;)V
+HSPLandroid/app/Instrumentation;->sendStatus(ILandroid/os/Bundle;)V
+HSPLandroid/app/Instrumentation;->start()V
+HSPLandroid/app/Instrumentation;->validateNotAppThread()V
+HSPLandroid/app/Instrumentation;->waitForIdleSync()V
+HSPLandroid/app/IntentReceiverLeaked;-><init>(Ljava/lang/String;)V
+HSPLandroid/app/IntentService$ServiceHandler;-><init>(Landroid/app/IntentService;Landroid/os/Looper;)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;->onHandleIntent(Landroid/content/Intent;)V
+HSPLandroid/app/IntentService;->onStart(Landroid/content/Intent;I)V
+HSPLandroid/app/IntentService;->onStartCommand(Landroid/content/Intent;II)I
+HSPLandroid/app/JobSchedulerImpl;-><init>(Landroid/app/job/IJobScheduler;)V
+HSPLandroid/app/JobSchedulerImpl;->cancel(I)V
+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/KeyguardManager$KeyguardLock;-><init>(Landroid/app/KeyguardManager;Ljava/lang/String;)V
+HSPLandroid/app/KeyguardManager$KeyguardLock;->disableKeyguard()V
+HSPLandroid/app/KeyguardManager;->-get0(Landroid/app/KeyguardManager;)Landroid/view/IWindowManager;
+HSPLandroid/app/KeyguardManager;-><init>(Landroid/content/Context;)V
+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
+HSPLandroid/app/KeyguardManager;->newKeyguardLock(Ljava/lang/String;)Landroid/app/KeyguardManager$KeyguardLock;
+HSPLandroid/app/ListFragment$1;-><init>(Landroid/app/ListFragment;)V
+HSPLandroid/app/ListFragment$1;->run()V
+HSPLandroid/app/ListFragment$2;-><init>(Landroid/app/ListFragment;)V
+HSPLandroid/app/ListFragment;-><init>()V
+HSPLandroid/app/ListFragment;->ensureList()V
+HSPLandroid/app/ListFragment;->onViewCreated(Landroid/view/View;Landroid/os/Bundle;)V
+HSPLandroid/app/ListFragment;->setListAdapter(Landroid/widget/ListAdapter;)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$-android_app_LoadedApk$ReceiverDispatcher$Args_51583()V
+HSPLandroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher;Z)V
+HSPLandroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
+HSPLandroid/app/LoadedApk$ReceiverDispatcher;-><init>(Landroid/content/BroadcastReceiver;Landroid/content/Context;Landroid/os/Handler;Landroid/app/Instrumentation;Z)V
+HSPLandroid/app/LoadedApk$ReceiverDispatcher;->getIIntentReceiver()Landroid/content/IIntentReceiver;
+HSPLandroid/app/LoadedApk$ReceiverDispatcher;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
+HSPLandroid/app/LoadedApk$ReceiverDispatcher;->validate(Landroid/content/Context;Landroid/os/Handler;)V
+HSPLandroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo;-><init>()V
+HSPLandroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo;-><init>(Landroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo;)V
+HSPLandroid/app/LoadedApk$ServiceDispatcher$DeathMonitor;-><init>(Landroid/app/LoadedApk$ServiceDispatcher;Landroid/content/ComponentName;Landroid/os/IBinder;)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;->connected(Landroid/content/ComponentName;Landroid/os/IBinder;Z)V
+HSPLandroid/app/LoadedApk$ServiceDispatcher;->doConnected(Landroid/content/ComponentName;Landroid/os/IBinder;Z)V
+HSPLandroid/app/LoadedApk$ServiceDispatcher;->doForget()V
+HSPLandroid/app/LoadedApk$ServiceDispatcher;->getFlags()I
+HSPLandroid/app/LoadedApk$ServiceDispatcher;->getIServiceConnection()Landroid/app/IServiceConnection;
+HSPLandroid/app/LoadedApk$ServiceDispatcher;->validate(Landroid/content/Context;Landroid/os/Handler;)V
+HSPLandroid/app/LoadedApk$WarningContextClassLoader;-><init>()V
+HSPLandroid/app/LoadedApk$WarningContextClassLoader;-><init>(Landroid/app/LoadedApk$WarningContextClassLoader;)V
+HSPLandroid/app/LoadedApk;-><init>(Landroid/app/ActivityThread;)V
+HSPLandroid/app/LoadedApk;-><init>(Landroid/app/ActivityThread;Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;ZZZ)V
+HSPLandroid/app/LoadedApk;->adjustNativeLibraryPaths(Landroid/content/pm/ApplicationInfo;)Landroid/content/pm/ApplicationInfo;
+HSPLandroid/app/LoadedApk;->appendApkLibPathIfNeeded(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/util/List;)V
+HSPLandroid/app/LoadedApk;->createOrUpdateClassLoaderLocked(Ljava/util/List;)V
+HSPLandroid/app/LoadedApk;->forgetReceiverDispatcher(Landroid/content/Context;Landroid/content/BroadcastReceiver;)Landroid/content/IIntentReceiver;
+HSPLandroid/app/LoadedApk;->forgetServiceDispatcher(Landroid/content/Context;Landroid/content/ServiceConnection;)Landroid/app/IServiceConnection;
+HSPLandroid/app/LoadedApk;->getAppDir()Ljava/lang/String;
+HSPLandroid/app/LoadedApk;->getApplication()Landroid/app/Application;
+HSPLandroid/app/LoadedApk;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
+HSPLandroid/app/LoadedApk;->getAssets()Landroid/content/res/AssetManager;
+HSPLandroid/app/LoadedApk;->getClassLoader()Ljava/lang/ClassLoader;
+HSPLandroid/app/LoadedApk;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
+HSPLandroid/app/LoadedApk;->getCredentialProtectedDataDirFile()Ljava/io/File;
+HSPLandroid/app/LoadedApk;->getDataDirFile()Ljava/io/File;
+HSPLandroid/app/LoadedApk;->getDeviceProtectedDataDirFile()Ljava/io/File;
+HSPLandroid/app/LoadedApk;->getLibDir()Ljava/lang/String;
+HSPLandroid/app/LoadedApk;->getLibrariesFor(Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/app/LoadedApk;->getOverlayDirs()[Ljava/lang/String;
+HSPLandroid/app/LoadedApk;->getPackageName()Ljava/lang/String;
+HSPLandroid/app/LoadedApk;->getPrimaryProfileFile(Ljava/lang/String;)Ljava/io/File;
+HSPLandroid/app/LoadedApk;->getReceiverDispatcher(Landroid/content/BroadcastReceiver;Landroid/content/Context;Landroid/os/Handler;Landroid/app/Instrumentation;Z)Landroid/content/IIntentReceiver;
+HSPLandroid/app/LoadedApk;->getResDir()Ljava/lang/String;
+HSPLandroid/app/LoadedApk;->getResources()Landroid/content/res/Resources;
+HSPLandroid/app/LoadedApk;->getServiceDispatcher(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;I)Landroid/app/IServiceConnection;
+HSPLandroid/app/LoadedApk;->getSplitAppDirs()[Ljava/lang/String;
+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;->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;->setupJitProfileSupport()V
+HSPLandroid/app/LoaderManager$LoaderCallbacks;->onCreateLoader(ILandroid/os/Bundle;)Landroid/content/Loader;
+HSPLandroid/app/LoaderManager$LoaderCallbacks;->onLoadFinished(Landroid/content/Loader;Ljava/lang/Object;)V
+HSPLandroid/app/LoaderManager$LoaderCallbacks;->onLoaderReset(Landroid/content/Loader;)V
+HSPLandroid/app/LoaderManager;-><init>()V
+HSPLandroid/app/LoaderManager;->destroyLoader(I)V
+HSPLandroid/app/LoaderManager;->dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSPLandroid/app/LoaderManager;->getLoader(I)Landroid/content/Loader;
+HSPLandroid/app/LoaderManager;->initLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;
+HSPLandroid/app/LoaderManager;->restartLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;
+HSPLandroid/app/LoaderManagerImpl$LoaderInfo;-><init>(Landroid/app/LoaderManagerImpl;ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)V
+HSPLandroid/app/LoaderManagerImpl$LoaderInfo;->callOnLoadFinished(Landroid/content/Loader;Ljava/lang/Object;)V
+HSPLandroid/app/LoaderManagerImpl$LoaderInfo;->destroy()V
+HSPLandroid/app/LoaderManagerImpl$LoaderInfo;->onLoadCanceled(Landroid/content/Loader;)V
+HSPLandroid/app/LoaderManagerImpl$LoaderInfo;->onLoadComplete(Landroid/content/Loader;Ljava/lang/Object;)V
+HSPLandroid/app/LoaderManagerImpl$LoaderInfo;->reportStart()V
+HSPLandroid/app/LoaderManagerImpl$LoaderInfo;->start()V
+HSPLandroid/app/LoaderManagerImpl$LoaderInfo;->stop()V
+HSPLandroid/app/LoaderManagerImpl;->-get0(Landroid/app/LoaderManagerImpl;)Landroid/app/FragmentHostCallback;
+HSPLandroid/app/LoaderManagerImpl;-><init>(Ljava/lang/String;Landroid/app/FragmentHostCallback;Z)V
+HSPLandroid/app/LoaderManagerImpl;->createAndInstallLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/app/LoaderManagerImpl$LoaderInfo;
+HSPLandroid/app/LoaderManagerImpl;->createLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/app/LoaderManagerImpl$LoaderInfo;
+HSPLandroid/app/LoaderManagerImpl;->destroyLoader(I)V
+HSPLandroid/app/LoaderManagerImpl;->doReportStart()V
+HSPLandroid/app/LoaderManagerImpl;->doStart()V
+HSPLandroid/app/LoaderManagerImpl;->doStop()V
+HSPLandroid/app/LoaderManagerImpl;->finishRetain()V
+HSPLandroid/app/LoaderManagerImpl;->getLoader(I)Landroid/content/Loader;
+HSPLandroid/app/LoaderManagerImpl;->hasRunningLoaders()Z
+HSPLandroid/app/LoaderManagerImpl;->initLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;
+HSPLandroid/app/LoaderManagerImpl;->installLoader(Landroid/app/LoaderManagerImpl$LoaderInfo;)V
+HSPLandroid/app/LoaderManagerImpl;->restartLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;
+HSPLandroid/app/Notification$1;-><init>()V
+HSPLandroid/app/Notification$Action$1;-><init>()V
+HSPLandroid/app/Notification$Builder;->-get2(Landroid/app/Notification$Builder;)Landroid/app/Notification;
+HSPLandroid/app/Notification$Builder;->-wrap15(Landroid/app/Notification$Builder;Ljava/lang/CharSequence;Z)Ljava/lang/CharSequence;
+HSPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;Landroid/app/Notification;)V
+HSPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;Ljava/lang/String;)V
+HSPLandroid/app/Notification$Builder;->applyStandardTemplate(I)Landroid/widget/RemoteViews;
+HSPLandroid/app/Notification$Builder;->applyStandardTemplate(ILandroid/app/Notification$StandardTemplateParams;)Landroid/widget/RemoteViews;
+HSPLandroid/app/Notification$Builder;->bindExpandButton(Landroid/widget/RemoteViews;)V
+HSPLandroid/app/Notification$Builder;->bindHeaderAppName(Landroid/widget/RemoteViews;Z)V
+HSPLandroid/app/Notification$Builder;->bindHeaderChronometerAndTime(Landroid/widget/RemoteViews;)V
+HSPLandroid/app/Notification$Builder;->bindHeaderText(Landroid/widget/RemoteViews;)V
+HSPLandroid/app/Notification$Builder;->bindLargeIcon(Landroid/widget/RemoteViews;)V
+HSPLandroid/app/Notification$Builder;->bindNotificationHeader(Landroid/widget/RemoteViews;Z)V
+HSPLandroid/app/Notification$Builder;->bindProfileBadge(Landroid/widget/RemoteViews;)V
+HSPLandroid/app/Notification$Builder;->bindSmallIcon(Landroid/widget/RemoteViews;Z)V
+HSPLandroid/app/Notification$Builder;->build()Landroid/app/Notification;
+HSPLandroid/app/Notification$Builder;->buildUnstyled()Landroid/app/Notification;
+HSPLandroid/app/Notification$Builder;->createBigContentView()Landroid/widget/RemoteViews;
+HSPLandroid/app/Notification$Builder;->createContentView()Landroid/widget/RemoteViews;
+HSPLandroid/app/Notification$Builder;->createContentView(Z)Landroid/widget/RemoteViews;
+HSPLandroid/app/Notification$Builder;->createHeadsUpContentView()Landroid/widget/RemoteViews;
+HSPLandroid/app/Notification$Builder;->createHeadsUpContentView(Z)Landroid/widget/RemoteViews;
+HSPLandroid/app/Notification$Builder;->ensureColors()V
+HSPLandroid/app/Notification$Builder;->getAllExtras()Landroid/os/Bundle;
+HSPLandroid/app/Notification$Builder;->getBackgroundColor()I
+HSPLandroid/app/Notification$Builder;->getBaseLayoutResource()I
+HSPLandroid/app/Notification$Builder;->getColorUtil()Lcom/android/internal/util/NotificationColorUtil;
+HSPLandroid/app/Notification$Builder;->getPrimaryHighlightColor()I
+HSPLandroid/app/Notification$Builder;->getProfileBadge()Landroid/graphics/Bitmap;
+HSPLandroid/app/Notification$Builder;->getProfileBadgeDrawable()Landroid/graphics/drawable/Drawable;
+HSPLandroid/app/Notification$Builder;->handleProgressBar(ZLandroid/widget/RemoteViews;Landroid/os/Bundle;)Z
+HSPLandroid/app/Notification$Builder;->hasForegroundColor()Z
+HSPLandroid/app/Notification$Builder;->isColorized()Z
+HSPLandroid/app/Notification$Builder;->isLegacy()Z
+HSPLandroid/app/Notification$Builder;->loadHeaderAppName()Ljava/lang/String;
+HSPLandroid/app/Notification$Builder;->makeHeaderExpanded(Landroid/widget/RemoteViews;)V
+HSPLandroid/app/Notification$Builder;->processLegacyText(Ljava/lang/CharSequence;Z)Ljava/lang/CharSequence;
+HSPLandroid/app/Notification$Builder;->processSmallIconColor(Landroid/graphics/drawable/Icon;Landroid/widget/RemoteViews;Z)V
+HSPLandroid/app/Notification$Builder;->processTextSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/app/Notification$Builder;->resetContentMargins(Landroid/widget/RemoteViews;)V
+HSPLandroid/app/Notification$Builder;->resetNotificationHeader(Landroid/widget/RemoteViews;)V
+HSPLandroid/app/Notification$Builder;->resetStandardTemplate(Landroid/widget/RemoteViews;)V
+HSPLandroid/app/Notification$Builder;->resolveContrastColor()I
+HSPLandroid/app/Notification$Builder;->sanitizeColor()V
+HSPLandroid/app/Notification$Builder;->setAutoCancel(Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setBadgeIconType(I)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setCategory(Ljava/lang/String;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setChannelId(Ljava/lang/String;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setColor(I)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setContent(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setContentInfo(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setContentIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;
+HSPLandroid/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;
+HSPLandroid/app/Notification$Builder;->setDefaults(I)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setDeleteIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setFlag(IZ)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setFullScreenIntent(Landroid/app/PendingIntent;Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setGroup(Ljava/lang/String;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setGroupAlertBehavior(I)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setGroupSummary(Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setLargeIcon(Landroid/graphics/Bitmap;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setLargeIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setLights(III)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setLocalOnly(Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setNumber(I)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setOngoing(Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setOnlyAlertOnce(Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->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;
+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;
+HSPLandroid/app/Notification$Builder;->setSmallIcon(I)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setSmallIcon(II)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setSmallIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setSortKey(Ljava/lang/String;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setSound(Landroid/net/Uri;I)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setSubText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setTextViewColorPrimary(Landroid/widget/RemoteViews;I)V
+HSPLandroid/app/Notification$Builder;->setTextViewColorSecondary(Landroid/widget/RemoteViews;I)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;
+HSPLandroid/app/Notification$Builder;->setUsesChronometer(Z)Landroid/app/Notification$Builder;
+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;
+HSPLandroid/app/Notification$Builder;->showsTimeOrChronometer()Z
+HSPLandroid/app/Notification$Builder;->updateBackgroundColor(Landroid/widget/RemoteViews;)V
+HSPLandroid/app/Notification$Builder;->useExistingRemoteView()Z
+HSPLandroid/app/Notification$BuilderRemoteViews;-><init>(Landroid/content/pm/ApplicationInfo;I)V
+HSPLandroid/app/Notification$StandardTemplateParams;-><init>()V
+HSPLandroid/app/Notification$StandardTemplateParams;-><init>(Landroid/app/Notification$StandardTemplateParams;)V
+HSPLandroid/app/Notification$StandardTemplateParams;->fillTextsFrom(Landroid/app/Notification$Builder;)Landroid/app/Notification$StandardTemplateParams;
+HSPLandroid/app/Notification$StandardTemplateParams;->reset()Landroid/app/Notification$StandardTemplateParams;
+HSPLandroid/app/Notification;->-get1(Landroid/app/Notification;)Landroid/graphics/drawable/Icon;
+HSPLandroid/app/Notification;->-get2(Landroid/app/Notification;)Landroid/graphics/drawable/Icon;
+HSPLandroid/app/Notification;->-set0(Landroid/app/Notification;J)J
+HSPLandroid/app/Notification;->-set1(Landroid/app/Notification;I)I
+HSPLandroid/app/Notification;->-set10(Landroid/app/Notification;J)J
+HSPLandroid/app/Notification;->-set2(Landroid/app/Notification;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/Notification;->-set3(Landroid/app/Notification;I)I
+HSPLandroid/app/Notification;->-set4(Landroid/app/Notification;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/Notification;->-set5(Landroid/app/Notification;Landroid/graphics/drawable/Icon;)Landroid/graphics/drawable/Icon;
+HSPLandroid/app/Notification;->-set7(Landroid/app/Notification;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/Notification;->-set9(Landroid/app/Notification;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/Notification;->-wrap1(Landroid/app/Notification;)Z
+HSPLandroid/app/Notification;-><init>()V
+HSPLandroid/app/Notification;-><init>(Landroid/os/Parcel;)V
+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;->getGroup()Ljava/lang/String;
+HSPLandroid/app/Notification;->getLargeIcon()Landroid/graphics/drawable/Icon;
+HSPLandroid/app/Notification;->getNotificationStyle()Ljava/lang/Class;
+HSPLandroid/app/Notification;->getSmallIcon()Landroid/graphics/drawable/Icon;
+HSPLandroid/app/Notification;->getSortKey()Ljava/lang/String;
+HSPLandroid/app/Notification;->hasLargeIcon()Z
+HSPLandroid/app/Notification;->isColorized()Z
+HSPLandroid/app/Notification;->isColorizedMedia()Z
+HSPLandroid/app/Notification;->lambda$-android_app_Notification_84701(Landroid/os/Parcel;Landroid/app/PendingIntent;Landroid/os/Parcel;I)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
+HSPLandroid/app/Notification;->showsTime()Z
+HSPLandroid/app/Notification;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/Notification;->writeToParcelImpl(Landroid/os/Parcel;I)V
+HSPLandroid/app/NotificationChannel$1;-><init>()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;->enableLights(Z)V
+HSPLandroid/app/NotificationChannel;->enableVibration(Z)V
+HSPLandroid/app/NotificationChannel;->getId()Ljava/lang/String;
+HSPLandroid/app/NotificationChannel;->getTrimmedString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/NotificationChannel;->setGroup(Ljava/lang/String;)V
+HSPLandroid/app/NotificationChannel;->setShowBadge(Z)V
+HSPLandroid/app/NotificationChannel;->setSound(Landroid/net/Uri;Landroid/media/AudioAttributes;)V
+HSPLandroid/app/NotificationChannel;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/NotificationChannelGroup$1;-><init>()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
+HSPLandroid/app/NotificationChannelGroup;->getId()Ljava/lang/String;
+HSPLandroid/app/NotificationChannelGroup;->getTrimmedString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/NotificationChannelGroup;->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
+HSPLandroid/app/NotificationManager;->from(Landroid/content/Context;)Landroid/app/NotificationManager;
+HSPLandroid/app/NotificationManager;->getActiveNotifications()[Landroid/service/notification/StatusBarNotification;
+HSPLandroid/app/NotificationManager;->getCurrentInterruptionFilter()I
+HSPLandroid/app/NotificationManager;->getEffectsSuppressor()Landroid/content/ComponentName;
+HSPLandroid/app/NotificationManager;->getNotificationChannel(Ljava/lang/String;)Landroid/app/NotificationChannel;
+HSPLandroid/app/NotificationManager;->getNotificationChannelGroups()Ljava/util/List;
+HSPLandroid/app/NotificationManager;->getNotificationChannels()Ljava/util/List;
+HSPLandroid/app/NotificationManager;->getService()Landroid/app/INotificationManager;
+HSPLandroid/app/NotificationManager;->getZenMode()I
+HSPLandroid/app/NotificationManager;->getZenModeConfig()Landroid/service/notification/ZenModeConfig;
+HSPLandroid/app/NotificationManager;->zenModeToInterruptionFilter(I)I
+HSPLandroid/app/OnActivityPausedListener;->onPaused(Landroid/app/Activity;)V
+HSPLandroid/app/PendingIntent$1;-><init>()V
+HSPLandroid/app/PendingIntent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/PendingIntent;
+HSPLandroid/app/PendingIntent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/PendingIntent$OnMarshaledListener;->onMarshaled(Landroid/app/PendingIntent;Landroid/os/Parcel;I)V
+HSPLandroid/app/PendingIntent;-><init>(Landroid/content/IIntentSender;)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;->equals(Ljava/lang/Object;)Z
+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;->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;->getService(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
+HSPLandroid/app/PendingIntent;->hashCode()I
+HSPLandroid/app/PendingIntent;->send()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;->setOnMarshaledListener(Landroid/app/PendingIntent$OnMarshaledListener;)V
+HSPLandroid/app/PendingIntent;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/QueuedWork$QueuedWorkHandler;-><init>(Landroid/os/Looper;)V
+HSPLandroid/app/QueuedWork$QueuedWorkHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/app/QueuedWork;->-wrap0()V
+HSPLandroid/app/QueuedWork;->addFinisher(Ljava/lang/Runnable;)V
+HSPLandroid/app/QueuedWork;->getHandler()Landroid/os/Handler;
+HSPLandroid/app/QueuedWork;->hasPendingWork()Z
+HSPLandroid/app/QueuedWork;->processPendingWork()V
+HSPLandroid/app/QueuedWork;->queue(Ljava/lang/Runnable;Z)V
+HSPLandroid/app/QueuedWork;->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;
+HSPLandroid/app/RemoteAction$1;-><init>()V
+HSPLandroid/app/RemoteAction;-><init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V
+HSPLandroid/app/RemoteAction;->setEnabled(Z)V
+HSPLandroid/app/ResourcesManager$1;-><init>()V
+HSPLandroid/app/ResourcesManager$1;->test(Ljava/lang/Object;)Z
+HSPLandroid/app/ResourcesManager$1;->test(Ljava/lang/ref/WeakReference;)Z
+HSPLandroid/app/ResourcesManager$ActivityResources;-><init>()V
+HSPLandroid/app/ResourcesManager$ActivityResources;-><init>(Landroid/app/ResourcesManager$ActivityResources;)V
+HSPLandroid/app/ResourcesManager;-><init>()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;->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;
+HSPLandroid/app/ResourcesManager;->createResourcesImpl(Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;
+HSPLandroid/app/ResourcesManager;->findResourcesImplForKeyLocked(Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;
+HSPLandroid/app/ResourcesManager;->generateConfig(Landroid/content/res/ResourcesKey;Landroid/util/DisplayMetrics;)Landroid/content/res/Configuration;
+HSPLandroid/app/ResourcesManager;->getAdjustedDisplay(ILandroid/content/res/Resources;)Landroid/view/Display;
+HSPLandroid/app/ResourcesManager;->getAdjustedDisplay(ILandroid/view/DisplayAdjustments;)Landroid/view/Display;
+HSPLandroid/app/ResourcesManager;->getConfiguration()Landroid/content/res/Configuration;
+HSPLandroid/app/ResourcesManager;->getDisplayMetrics()Landroid/util/DisplayMetrics;
+HSPLandroid/app/ResourcesManager;->getDisplayMetrics(ILandroid/view/DisplayAdjustments;)Landroid/util/DisplayMetrics;
+HSPLandroid/app/ResourcesManager;->getInstance()Landroid/app/ResourcesManager;
+HSPLandroid/app/ResourcesManager;->getOrCreateActivityResourcesStructLocked(Landroid/os/IBinder;)Landroid/app/ResourcesManager$ActivityResources;
+HSPLandroid/app/ResourcesManager;->getOrCreateResources(Landroid/os/IBinder;Landroid/content/res/ResourcesKey;Ljava/lang/ClassLoader;)Landroid/content/res/Resources;
+HSPLandroid/app/ResourcesManager;->getOrCreateResourcesForActivityLocked(Landroid/os/IBinder;Ljava/lang/ClassLoader;Landroid/content/res/ResourcesImpl;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;
+HSPLandroid/app/ResourcesManager;->getOrCreateResourcesLocked(Ljava/lang/ClassLoader;Landroid/content/res/ResourcesImpl;Landroid/content/res/CompatibilityInfo;)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;)Landroid/content/res/Resources;
+HSPLandroid/app/ResourcesManager;->isSameResourcesOverrideConfig(Landroid/os/IBinder;Landroid/content/res/Configuration;)Z
+HSPLandroid/app/ResourcesManager;->updateResourcesForActivity(Landroid/os/IBinder;Landroid/content/res/Configuration;IZ)V
+HSPLandroid/app/ResultInfo$1;-><init>()V
+HSPLandroid/app/ResultInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ResultInfo;
+HSPLandroid/app/ResultInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/ResultInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/SearchManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
+HSPLandroid/app/SearchManager;->getAssistIntent(Z)Landroid/content/Intent;
+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
+HSPLandroid/app/Service;->getApplication()Landroid/app/Application;
+HSPLandroid/app/Service;->getClassName()Ljava/lang/String;
+HSPLandroid/app/Service;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HSPLandroid/app/Service;->onCreate()V
+HSPLandroid/app/Service;->onDestroy()V
+HSPLandroid/app/Service;->onStart(Landroid/content/Intent;I)V
+HSPLandroid/app/Service;->onStartCommand(Landroid/content/Intent;II)I
+HSPLandroid/app/Service;->onUnbind(Landroid/content/Intent;)Z
+HSPLandroid/app/Service;->startForeground(ILandroid/app/Notification;)V
+HSPLandroid/app/Service;->stopForeground(I)V
+HSPLandroid/app/Service;->stopForeground(Z)V
+HSPLandroid/app/Service;->stopSelf()V
+HSPLandroid/app/Service;->stopSelf(I)V
+HSPLandroid/app/ServiceConnectionLeaked;-><init>(Ljava/lang/String;)V
+HSPLandroid/app/ServiceStartArgs$1;-><init>()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/SharedElementCallback$1;-><init>()V
+HSPLandroid/app/SharedElementCallback;-><init>()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
+HSPLandroid/app/SharedPreferencesImpl$2;->run()V
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl$1;-><init>(Landroid/app/SharedPreferencesImpl$EditorImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;J)V
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl$1;->run()V
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl$2;-><init>(Landroid/app/SharedPreferencesImpl$EditorImpl;Ljava/lang/Runnable;)V
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl$2;->run()V
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl$3;-><init>(Landroid/app/SharedPreferencesImpl$EditorImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;)V
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl$3;->run()V
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->-wrap0(Landroid/app/SharedPreferencesImpl$EditorImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;)V
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;-><init>(Landroid/app/SharedPreferencesImpl;)V
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->apply()V
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->clear()Landroid/content/SharedPreferences$Editor;
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->commit()Z
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->commitToMemory()Landroid/app/SharedPreferencesImpl$MemoryCommitResult;
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->notifyListeners(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;)V
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->putFloat(Ljava/lang/String;F)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->putInt(Ljava/lang/String;I)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->putLong(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->putStringSet(Ljava/lang/String;Ljava/util/Set;)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->remove(Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/app/SharedPreferencesImpl$MemoryCommitResult;-><init>(JLjava/util/List;Ljava/util/Set;Ljava/util/Map;)V
+HSPLandroid/app/SharedPreferencesImpl$MemoryCommitResult;-><init>(JLjava/util/List;Ljava/util/Set;Ljava/util/Map;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;)V
+HSPLandroid/app/SharedPreferencesImpl$MemoryCommitResult;->setDiskWriteResult(ZZ)V
+HSPLandroid/app/SharedPreferencesImpl;->-get0(Landroid/app/SharedPreferencesImpl;)J
+HSPLandroid/app/SharedPreferencesImpl;->-get1(Landroid/app/SharedPreferencesImpl;)I
+HSPLandroid/app/SharedPreferencesImpl;->-get2(Landroid/app/SharedPreferencesImpl;)Ljava/util/WeakHashMap;
+HSPLandroid/app/SharedPreferencesImpl;->-get3(Landroid/app/SharedPreferencesImpl;)Ljava/lang/Object;
+HSPLandroid/app/SharedPreferencesImpl;->-get4(Landroid/app/SharedPreferencesImpl;)Ljava/util/Map;
+HSPLandroid/app/SharedPreferencesImpl;->-get5(Landroid/app/SharedPreferencesImpl;)Ljava/lang/Object;
+HSPLandroid/app/SharedPreferencesImpl;->-set0(Landroid/app/SharedPreferencesImpl;J)J
+HSPLandroid/app/SharedPreferencesImpl;->-set1(Landroid/app/SharedPreferencesImpl;I)I
+HSPLandroid/app/SharedPreferencesImpl;->-set2(Landroid/app/SharedPreferencesImpl;Ljava/util/Map;)Ljava/util/Map;
+HSPLandroid/app/SharedPreferencesImpl;->-wrap0(Landroid/app/SharedPreferencesImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Ljava/lang/Runnable;)V
+HSPLandroid/app/SharedPreferencesImpl;->-wrap1(Landroid/app/SharedPreferencesImpl;)V
+HSPLandroid/app/SharedPreferencesImpl;->-wrap2(Landroid/app/SharedPreferencesImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Z)V
+HSPLandroid/app/SharedPreferencesImpl;-><init>(Ljava/io/File;I)V
+HSPLandroid/app/SharedPreferencesImpl;->awaitLoadedLocked()V
+HSPLandroid/app/SharedPreferencesImpl;->contains(Ljava/lang/String;)Z
+HSPLandroid/app/SharedPreferencesImpl;->createFileOutputStream(Ljava/io/File;)Ljava/io/FileOutputStream;
+HSPLandroid/app/SharedPreferencesImpl;->edit()Landroid/content/SharedPreferences$Editor;
+HSPLandroid/app/SharedPreferencesImpl;->enqueueDiskWrite(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Ljava/lang/Runnable;)V
+HSPLandroid/app/SharedPreferencesImpl;->getAll()Ljava/util/Map;
+HSPLandroid/app/SharedPreferencesImpl;->getBoolean(Ljava/lang/String;Z)Z
+HSPLandroid/app/SharedPreferencesImpl;->getFloat(Ljava/lang/String;F)F
+HSPLandroid/app/SharedPreferencesImpl;->getInt(Ljava/lang/String;I)I
+HSPLandroid/app/SharedPreferencesImpl;->getLong(Ljava/lang/String;J)J
+HSPLandroid/app/SharedPreferencesImpl;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/SharedPreferencesImpl;->getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;
+HSPLandroid/app/SharedPreferencesImpl;->hasFileChangedUnexpectedly()Z
+HSPLandroid/app/SharedPreferencesImpl;->loadFromDisk()V
+HSPLandroid/app/SharedPreferencesImpl;->makeBackupFile(Ljava/io/File;)Ljava/io/File;
+HSPLandroid/app/SharedPreferencesImpl;->registerOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V
+HSPLandroid/app/SharedPreferencesImpl;->startLoadFromDisk()V
+HSPLandroid/app/SharedPreferencesImpl;->startReloadIfChangedUnexpectedly()V
+HSPLandroid/app/SharedPreferencesImpl;->unregisterOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V
+HSPLandroid/app/SharedPreferencesImpl;->writeToFile(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Z)V
+HSPLandroid/app/StatusBarManager;-><init>(Landroid/content/Context;)V
+HSPLandroid/app/StatusBarManager;->disable(I)V
+HSPLandroid/app/StatusBarManager;->getService()Lcom/android/internal/statusbar/IStatusBarService;
+HSPLandroid/app/SynchronousUserSwitchObserver;-><init>()V
+HSPLandroid/app/SynchronousUserSwitchObserver;->onUserSwitching(I)V
+HSPLandroid/app/SystemServiceRegistry$10;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$11;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$11;->createService(Landroid/app/ContextImpl;)Landroid/content/ClipboardManager;
+HSPLandroid/app/SystemServiceRegistry$11;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$12;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$12;->createService(Landroid/content/Context;)Landroid/net/ConnectivityManager;
+HSPLandroid/app/SystemServiceRegistry$12;->createService(Landroid/content/Context;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$13;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$14;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$15;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$15;->createService(Landroid/app/ContextImpl;)Landroid/app/admin/DevicePolicyManager;
+HSPLandroid/app/SystemServiceRegistry$15;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$16;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$16;->createService(Landroid/app/ContextImpl;)Landroid/app/DownloadManager;
+HSPLandroid/app/SystemServiceRegistry$16;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$17;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$17;->createService()Landroid/os/BatteryManager;
+HSPLandroid/app/SystemServiceRegistry$17;->createService()Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$18;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$18;->createService(Landroid/app/ContextImpl;)Landroid/nfc/NfcManager;
+HSPLandroid/app/SystemServiceRegistry$18;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$19;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$1;-><init>()V
+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;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$20;->createService()Landroid/hardware/input/InputManager;
+HSPLandroid/app/SystemServiceRegistry$20;->createService()Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$21;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$21;->createService(Landroid/app/ContextImpl;)Landroid/hardware/display/DisplayManager;
+HSPLandroid/app/SystemServiceRegistry$21;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$22;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$22;->createService()Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/app/SystemServiceRegistry$22;->createService()Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$23;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$24;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$24;->createService(Landroid/app/ContextImpl;)Landroid/app/KeyguardManager;
+HSPLandroid/app/SystemServiceRegistry$24;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$25;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$25;->createService(Landroid/app/ContextImpl;)Landroid/view/LayoutInflater;
+HSPLandroid/app/SystemServiceRegistry$25;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$26;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$26;->createService(Landroid/app/ContextImpl;)Landroid/location/LocationManager;
+HSPLandroid/app/SystemServiceRegistry$26;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$27;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$27;->createService(Landroid/app/ContextImpl;)Landroid/net/NetworkPolicyManager;
+HSPLandroid/app/SystemServiceRegistry$27;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$28;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$28;->createService(Landroid/app/ContextImpl;)Landroid/app/NotificationManager;
+HSPLandroid/app/SystemServiceRegistry$28;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$29;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$2;-><init>()V
+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;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$30;->createService(Landroid/app/ContextImpl;)Landroid/os/PowerManager;
+HSPLandroid/app/SystemServiceRegistry$30;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$31;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$32;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$32;->createService(Landroid/app/ContextImpl;)Landroid/app/SearchManager;
+HSPLandroid/app/SystemServiceRegistry$32;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$33;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$33;->createService(Landroid/app/ContextImpl;)Landroid/hardware/SensorManager;
+HSPLandroid/app/SystemServiceRegistry$33;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$34;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$34;->createService(Landroid/app/ContextImpl;)Landroid/app/StatusBarManager;
+HSPLandroid/app/SystemServiceRegistry$34;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$35;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$35;->createService(Landroid/app/ContextImpl;)Landroid/os/storage/StorageManager;
+HSPLandroid/app/SystemServiceRegistry$35;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$36;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$36;->createService(Landroid/app/ContextImpl;)Landroid/app/usage/StorageStatsManager;
+HSPLandroid/app/SystemServiceRegistry$36;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$37;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$37;->createService(Landroid/app/ContextImpl;)Landroid/telephony/TelephonyManager;
+HSPLandroid/app/SystemServiceRegistry$37;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$38;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$38;->createService(Landroid/app/ContextImpl;)Landroid/telephony/SubscriptionManager;
+HSPLandroid/app/SystemServiceRegistry$38;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$39;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$39;->createService(Landroid/app/ContextImpl;)Landroid/telephony/CarrierConfigManager;
+HSPLandroid/app/SystemServiceRegistry$39;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$3;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$3;->createService(Landroid/app/ContextImpl;)Landroid/accounts/AccountManager;
+HSPLandroid/app/SystemServiceRegistry$3;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$40;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$40;->createService(Landroid/app/ContextImpl;)Landroid/telecom/TelecomManager;
+HSPLandroid/app/SystemServiceRegistry$40;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$41;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$41;->createService(Landroid/app/ContextImpl;)Landroid/telephony/euicc/EuiccManager;
+HSPLandroid/app/SystemServiceRegistry$41;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$42;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$42;->createService(Landroid/app/ContextImpl;)Landroid/app/UiModeManager;
+HSPLandroid/app/SystemServiceRegistry$42;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$43;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$43;->createService(Landroid/app/ContextImpl;)Landroid/hardware/usb/UsbManager;
+HSPLandroid/app/SystemServiceRegistry$43;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$44;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$45;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$45;->createService(Landroid/app/ContextImpl;)Landroid/os/Vibrator;
+HSPLandroid/app/SystemServiceRegistry$45;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$46;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$46;->createService(Landroid/app/ContextImpl;)Landroid/app/WallpaperManager;
+HSPLandroid/app/SystemServiceRegistry$46;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$47;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$48;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$48;->createService(Landroid/app/ContextImpl;)Landroid/net/wifi/WifiManager;
+HSPLandroid/app/SystemServiceRegistry$48;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$49;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$49;->createService()Landroid/net/wifi/p2p/WifiP2pManager;
+HSPLandroid/app/SystemServiceRegistry$49;->createService()Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$4;-><init>()V
+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$50;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$51;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$52;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$53;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$54;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$54;->createService(Landroid/app/ContextImpl;)Landroid/view/WindowManager;
+HSPLandroid/app/SystemServiceRegistry$54;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$55;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$55;->createService(Landroid/app/ContextImpl;)Landroid/os/UserManager;
+HSPLandroid/app/SystemServiceRegistry$55;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$56;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$56;->createService(Landroid/app/ContextImpl;)Landroid/app/AppOpsManager;
+HSPLandroid/app/SystemServiceRegistry$56;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$57;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$57;->createService(Landroid/app/ContextImpl;)Landroid/hardware/camera2/CameraManager;
+HSPLandroid/app/SystemServiceRegistry$57;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$58;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$58;->createService(Landroid/app/ContextImpl;)Landroid/content/pm/LauncherApps;
+HSPLandroid/app/SystemServiceRegistry$58;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$59;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$59;->createService(Landroid/app/ContextImpl;)Landroid/content/RestrictionsManager;
+HSPLandroid/app/SystemServiceRegistry$59;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$5;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$5;->createService(Landroid/app/ContextImpl;)Landroid/app/AlarmManager;
+HSPLandroid/app/SystemServiceRegistry$5;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$60;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$61;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$62;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$63;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$63;->createService(Landroid/app/ContextImpl;)Landroid/media/session/MediaSessionManager;
+HSPLandroid/app/SystemServiceRegistry$63;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$64;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$64;->createService()Landroid/app/trust/TrustManager;
+HSPLandroid/app/SystemServiceRegistry$64;->createService()Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$65;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$65;->createService(Landroid/app/ContextImpl;)Landroid/hardware/fingerprint/FingerprintManager;
+HSPLandroid/app/SystemServiceRegistry$65;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$66;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$67;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$67;->createService(Landroid/app/ContextImpl;)Landroid/net/NetworkScoreManager;
+HSPLandroid/app/SystemServiceRegistry$67;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$68;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$68;->createService(Landroid/app/ContextImpl;)Landroid/app/usage/UsageStatsManager;
+HSPLandroid/app/SystemServiceRegistry$68;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$69;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$6;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$6;->createService(Landroid/app/ContextImpl;)Landroid/media/AudioManager;
+HSPLandroid/app/SystemServiceRegistry$6;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$70;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$70;->createService()Landroid/app/job/JobScheduler;
+HSPLandroid/app/SystemServiceRegistry$70;->createService()Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$71;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$72;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$73;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$73;->createService(Landroid/app/ContextImpl;)Landroid/media/projection/MediaProjectionManager;
+HSPLandroid/app/SystemServiceRegistry$73;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$74;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$74;->createService(Landroid/app/ContextImpl;)Landroid/appwidget/AppWidgetManager;
+HSPLandroid/app/SystemServiceRegistry$74;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$75;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$76;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$77;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$77;->createService(Landroid/app/ContextImpl;)Landroid/os/HardwarePropertiesManager;
+HSPLandroid/app/SystemServiceRegistry$77;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$78;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$79;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$79;->createService(Landroid/app/ContextImpl;)Landroid/content/pm/ShortcutManager;
+HSPLandroid/app/SystemServiceRegistry$79;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$7;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$7;->createService(Landroid/app/ContextImpl;)Landroid/media/MediaRouter;
+HSPLandroid/app/SystemServiceRegistry$7;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$80;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$81;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$82;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$83;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$83;->createService(Landroid/app/ContextImpl;)Landroid/view/autofill/AutofillManager;
+HSPLandroid/app/SystemServiceRegistry$83;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$84;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$85;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$8;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$8;->createService(Landroid/app/ContextImpl;)Landroid/bluetooth/BluetoothManager;
+HSPLandroid/app/SystemServiceRegistry$8;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$9;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$CachedServiceFetcher;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$CachedServiceFetcher;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$StaticApplicationContextServiceFetcher;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$StaticApplicationContextServiceFetcher;->createService(Landroid/content/Context;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$StaticApplicationContextServiceFetcher;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$StaticServiceFetcher;-><init>()V
+HSPLandroid/app/SystemServiceRegistry$StaticServiceFetcher;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry;->-get0()I
+HSPLandroid/app/SystemServiceRegistry;->-set0(I)I
+HSPLandroid/app/SystemServiceRegistry;->createServiceCache()[Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry;->getSystemService(Landroid/app/ContextImpl;Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;
+HSPLandroid/app/SystemServiceRegistry;->registerService(Ljava/lang/String;Ljava/lang/Class;Landroid/app/SystemServiceRegistry$ServiceFetcher;)V
+HSPLandroid/app/TaskStackListener;-><init>()V
+HSPLandroid/app/TaskStackListener;->onTaskCreated(ILandroid/content/ComponentName;)V
+HSPLandroid/app/TaskStackListener;->onTaskDescriptionChanged(ILandroid/app/ActivityManager$TaskDescription;)V
+HSPLandroid/app/UiModeManager;-><init>()V
+HSPLandroid/app/UiModeManager;->getCurrentModeType()I
+HSPLandroid/app/UserSwitchObserver;-><init>()V
+HSPLandroid/app/WallpaperColors$1;-><init>()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;->getPrimaryColor()Landroid/graphics/Color;
+HSPLandroid/app/WallpaperColors;->getSecondaryColor()Landroid/graphics/Color;
+HSPLandroid/app/WallpaperColors;->getTertiaryColor()Landroid/graphics/Color;
+HSPLandroid/app/WallpaperColors;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/WallpaperInfo$1;-><init>()V
+HSPLandroid/app/WallpaperInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/WallpaperInfo;
+HSPLandroid/app/WallpaperInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/WallpaperInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/WallpaperInfo;->getComponent()Landroid/content/ComponentName;
+HSPLandroid/app/WallpaperManager$Globals;->-get0(Landroid/app/WallpaperManager$Globals;)Landroid/app/IWallpaperManager;
+HSPLandroid/app/WallpaperManager$Globals;-><init>(Landroid/os/Looper;)V
+HSPLandroid/app/WallpaperManager$Globals;->addOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;Landroid/os/Handler;I)V
+HSPLandroid/app/WallpaperManager$Globals;->forgetLoadedWallpaper()V
+HSPLandroid/app/WallpaperManager$Globals;->getWallpaperColors(II)Landroid/app/WallpaperColors;
+HSPLandroid/app/WallpaperManager$Globals;->lambda$-android_app_WallpaperManager$Globals_12368(Landroid/app/WallpaperManager$OnColorsChangedListener;Landroid/util/Pair;)Z
+HSPLandroid/app/WallpaperManager$Globals;->removeOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;I)V
+HSPLandroid/app/WallpaperManager$OnColorsChangedListener;->onColorsChanged(Landroid/app/WallpaperColors;I)V
+HSPLandroid/app/WallpaperManager;-><init>(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
+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;
+HSPLandroid/app/WallpaperManager;->getWallpaperFile(II)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/app/WallpaperManager;->getWallpaperInfo()Landroid/app/WallpaperInfo;
+HSPLandroid/app/WallpaperManager;->initGlobals(Landroid/os/Looper;)V
+HSPLandroid/app/WallpaperManager;->isWallpaperSupported()Z
+HSPLandroid/app/WallpaperManager;->removeOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;)V
+HSPLandroid/app/WallpaperManager;->removeOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;I)V
+HSPLandroid/app/WallpaperManager;->setWallpaperOffsetSteps(FF)V
+HSPLandroid/app/WallpaperManager;->setWallpaperOffsets(Landroid/os/IBinder;FF)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
+HSPLandroid/app/admin/DevicePolicyManager;->getActiveAdmins()Ljava/util/List;
+HSPLandroid/app/admin/DevicePolicyManager;->getActiveAdminsAsUser(I)Ljava/util/List;
+HSPLandroid/app/admin/DevicePolicyManager;->getCameraDisabled(Landroid/content/ComponentName;I)Z
+HSPLandroid/app/admin/DevicePolicyManager;->getDeviceOwnerComponentInner(Z)Landroid/content/ComponentName;
+HSPLandroid/app/admin/DevicePolicyManager;->getGuestUserDisabled(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/DevicePolicyManager;->getKeyguardDisabledFeatures(Landroid/content/ComponentName;I)I
+HSPLandroid/app/admin/DevicePolicyManager;->getProfileOwner()Landroid/content/ComponentName;
+HSPLandroid/app/admin/DevicePolicyManager;->getProfileOwnerAsUser(I)Landroid/content/ComponentName;
+HSPLandroid/app/admin/DevicePolicyManager;->getStorageEncryptionStatus()I
+HSPLandroid/app/admin/DevicePolicyManager;->getStorageEncryptionStatus(I)I
+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
+HSPLandroid/app/admin/DevicePolicyManager;->isProfileOwnerApp(Ljava/lang/String;)Z
+HSPLandroid/app/admin/DevicePolicyManager;->myUserId()I
+HSPLandroid/app/admin/DevicePolicyManager;->throwIfParentInstance(Ljava/lang/String;)V
+HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getActiveAdmins(I)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getCameraDisabled(Landroid/content/ComponentName;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getDeviceOwnerComponent(Z)Landroid/content/ComponentName;
+HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getKeyguardDisabledFeatures(Landroid/content/ComponentName;IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getProfileOwner(I)Landroid/content/ComponentName;
+HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->getStorageEncryptionStatus(Ljava/lang/String;I)I
+HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->hasDeviceOwner()Z
+HSPLandroid/app/admin/IDevicePolicyManager$Stub$Proxy;->isLockTaskPermitted(Ljava/lang/String;)Z
+HSPLandroid/app/admin/IDevicePolicyManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/admin/IDevicePolicyManager;
+HSPLandroid/app/admin/IDevicePolicyManager;->addCrossProfileIntentFilter(Landroid/content/ComponentName;Landroid/content/IntentFilter;I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->addCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->addPersistentPreferredActivity(Landroid/content/ComponentName;Landroid/content/IntentFilter;Landroid/content/ComponentName;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->approveCaCert(Ljava/lang/String;IZ)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->bindDeviceAdminServiceAsUser(Landroid/content/ComponentName;Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Landroid/app/IServiceConnection;II)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->checkProvisioningPreCondition(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/app/admin/IDevicePolicyManager;->choosePrivateKeyAlias(ILandroid/net/Uri;Ljava/lang/String;Landroid/os/IBinder;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->clearCrossProfileIntentFilters(Landroid/content/ComponentName;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->clearDeviceOwner(Ljava/lang/String;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->clearPackagePersistentPreferredActivities(Landroid/content/ComponentName;Ljava/lang/String;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->clearProfileOwner(Landroid/content/ComponentName;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->clearResetPasswordToken(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->createAdminSupportIntent(Ljava/lang/String;)Landroid/content/Intent;
+HSPLandroid/app/admin/IDevicePolicyManager;->createAndManageUser(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/PersistableBundle;I)Landroid/os/UserHandle;
+HSPLandroid/app/admin/IDevicePolicyManager;->enableSystemApp(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->enableSystemAppWithIntent(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;)I
+HSPLandroid/app/admin/IDevicePolicyManager;->enforceCanManageCaCerts(Landroid/content/ComponentName;Ljava/lang/String;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->forceRemoveActiveAdmin(Landroid/content/ComponentName;I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->forceUpdateUserSetupComplete()V
+HSPLandroid/app/admin/IDevicePolicyManager;->getAccountTypesWithManagementDisabled()[Ljava/lang/String;
+HSPLandroid/app/admin/IDevicePolicyManager;->getAccountTypesWithManagementDisabledAsUser(I)[Ljava/lang/String;
+HSPLandroid/app/admin/IDevicePolicyManager;->getActiveAdmins(I)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->getAffiliationIds(Landroid/content/ComponentName;)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->getAlwaysOnVpnPackage(Landroid/content/ComponentName;)Ljava/lang/String;
+HSPLandroid/app/admin/IDevicePolicyManager;->getApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;
+HSPLandroid/app/admin/IDevicePolicyManager;->getApplicationRestrictionsManagingPackage(Landroid/content/ComponentName;)Ljava/lang/String;
+HSPLandroid/app/admin/IDevicePolicyManager;->getAutoTimeRequired()Z
+HSPLandroid/app/admin/IDevicePolicyManager;->getBindDeviceAdminTargetUsers(Landroid/content/ComponentName;)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->getBluetoothContactSharingDisabled(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->getBluetoothContactSharingDisabledForUser(I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->getCameraDisabled(Landroid/content/ComponentName;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->getCertInstallerPackage(Landroid/content/ComponentName;)Ljava/lang/String;
+HSPLandroid/app/admin/IDevicePolicyManager;->getCrossProfileCallerIdDisabled(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->getCrossProfileCallerIdDisabledForUser(I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->getCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->getCrossProfileContactsSearchDisabledForUser(I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->getCrossProfileWidgetProviders(Landroid/content/ComponentName;)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->getCurrentFailedPasswordAttempts(IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getDelegatePackages(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->getDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->getDeviceOwnerComponent(Z)Landroid/content/ComponentName;
+HSPLandroid/app/admin/IDevicePolicyManager;->getDeviceOwnerLockScreenInfo()Ljava/lang/CharSequence;
+HSPLandroid/app/admin/IDevicePolicyManager;->getDeviceOwnerName()Ljava/lang/String;
+HSPLandroid/app/admin/IDevicePolicyManager;->getDeviceOwnerOrganizationName()Ljava/lang/CharSequence;
+HSPLandroid/app/admin/IDevicePolicyManager;->getDeviceOwnerUserId()I
+HSPLandroid/app/admin/IDevicePolicyManager;->getDoNotAskCredentialsOnBoot()Z
+HSPLandroid/app/admin/IDevicePolicyManager;->getForceEphemeralUsers(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->getGlobalProxyAdmin(I)Landroid/content/ComponentName;
+HSPLandroid/app/admin/IDevicePolicyManager;->getKeepUninstalledPackages(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->getKeyguardDisabledFeatures(Landroid/content/ComponentName;IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getLastBugReportRequestTime()J
+HSPLandroid/app/admin/IDevicePolicyManager;->getLastNetworkLogRetrievalTime()J
+HSPLandroid/app/admin/IDevicePolicyManager;->getLastSecurityLogRetrievalTime()J
+HSPLandroid/app/admin/IDevicePolicyManager;->getLockTaskPackages(Landroid/content/ComponentName;)[Ljava/lang/String;
+HSPLandroid/app/admin/IDevicePolicyManager;->getLongSupportMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;
+HSPLandroid/app/admin/IDevicePolicyManager;->getLongSupportMessageForUser(Landroid/content/ComponentName;I)Ljava/lang/CharSequence;
+HSPLandroid/app/admin/IDevicePolicyManager;->getMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getMaximumTimeToLock(Landroid/content/ComponentName;IZ)J
+HSPLandroid/app/admin/IDevicePolicyManager;->getMaximumTimeToLockForUserAndProfiles(I)J
+HSPLandroid/app/admin/IDevicePolicyManager;->getOrganizationColor(Landroid/content/ComponentName;)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getOrganizationColorForUser(I)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getOrganizationName(Landroid/content/ComponentName;)Ljava/lang/CharSequence;
+HSPLandroid/app/admin/IDevicePolicyManager;->getOrganizationNameForUser(I)Ljava/lang/CharSequence;
+HSPLandroid/app/admin/IDevicePolicyManager;->getOwnerInstalledCaCerts(Landroid/os/UserHandle;)Landroid/content/pm/StringParceledListSlice;
+HSPLandroid/app/admin/IDevicePolicyManager;->getPasswordExpiration(Landroid/content/ComponentName;IZ)J
+HSPLandroid/app/admin/IDevicePolicyManager;->getPasswordExpirationTimeout(Landroid/content/ComponentName;IZ)J
+HSPLandroid/app/admin/IDevicePolicyManager;->getPasswordHistoryLength(Landroid/content/ComponentName;IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getPasswordMinimumLength(Landroid/content/ComponentName;IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getPasswordMinimumLetters(Landroid/content/ComponentName;IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getPasswordMinimumLowerCase(Landroid/content/ComponentName;IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getPasswordMinimumNonLetter(Landroid/content/ComponentName;IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getPasswordMinimumNumeric(Landroid/content/ComponentName;IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getPasswordMinimumSymbols(Landroid/content/ComponentName;IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getPasswordMinimumUpperCase(Landroid/content/ComponentName;IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getPasswordQuality(Landroid/content/ComponentName;IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getPendingSystemUpdate(Landroid/content/ComponentName;)Landroid/app/admin/SystemUpdateInfo;
+HSPLandroid/app/admin/IDevicePolicyManager;->getPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getPermissionPolicy(Landroid/content/ComponentName;)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getPermittedAccessibilityServices(Landroid/content/ComponentName;)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->getPermittedAccessibilityServicesForUser(I)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->getPermittedCrossProfileNotificationListeners(Landroid/content/ComponentName;)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->getPermittedInputMethods(Landroid/content/ComponentName;)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->getPermittedInputMethodsForCurrentUser()Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->getProfileOwner(I)Landroid/content/ComponentName;
+HSPLandroid/app/admin/IDevicePolicyManager;->getProfileOwnerName(I)Ljava/lang/String;
+HSPLandroid/app/admin/IDevicePolicyManager;->getProfileWithMinimumFailedPasswordsForWipe(IZ)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getRemoveWarning(Landroid/content/ComponentName;Landroid/os/RemoteCallback;I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->getRequiredStrongAuthTimeout(Landroid/content/ComponentName;IZ)J
+HSPLandroid/app/admin/IDevicePolicyManager;->getRestrictionsProvider(I)Landroid/content/ComponentName;
+HSPLandroid/app/admin/IDevicePolicyManager;->getScreenCaptureDisabled(Landroid/content/ComponentName;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->getShortSupportMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;
+HSPLandroid/app/admin/IDevicePolicyManager;->getShortSupportMessageForUser(Landroid/content/ComponentName;I)Ljava/lang/CharSequence;
+HSPLandroid/app/admin/IDevicePolicyManager;->getStorageEncryption(Landroid/content/ComponentName;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->getStorageEncryptionStatus(Ljava/lang/String;I)I
+HSPLandroid/app/admin/IDevicePolicyManager;->getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;
+HSPLandroid/app/admin/IDevicePolicyManager;->getTrustAgentConfiguration(Landroid/content/ComponentName;Landroid/content/ComponentName;IZ)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->getUserProvisioningState()I
+HSPLandroid/app/admin/IDevicePolicyManager;->getUserRestrictions(Landroid/content/ComponentName;)Landroid/os/Bundle;
+HSPLandroid/app/admin/IDevicePolicyManager;->getWifiMacAddress(Landroid/content/ComponentName;)Ljava/lang/String;
+HSPLandroid/app/admin/IDevicePolicyManager;->hasDeviceOwner()Z
+HSPLandroid/app/admin/IDevicePolicyManager;->hasGrantedPolicy(Landroid/content/ComponentName;II)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->hasUserSetupCompleted()Z
+HSPLandroid/app/admin/IDevicePolicyManager;->installCaCert(Landroid/content/ComponentName;Ljava/lang/String;[B)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->installKeyPair(Landroid/content/ComponentName;Ljava/lang/String;[B[B[BLjava/lang/String;Z)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isAccessibilityServicePermittedByAdmin(Landroid/content/ComponentName;Ljava/lang/String;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isActivePasswordSufficient(IZ)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isAdminActive(Landroid/content/ComponentName;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isAffiliatedUser()Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isBackupServiceEnabled(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isCaCertApproved(Ljava/lang/String;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isCallerApplicationRestrictionsManagingPackage(Ljava/lang/String;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isCurrentInputMethodSetByOwner()Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isDeviceProvisioned()Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isDeviceProvisioningConfigApplied()Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isInputMethodPermittedByAdmin(Landroid/content/ComponentName;Ljava/lang/String;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isLockTaskPermitted(Ljava/lang/String;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isManagedProfile(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isMasterVolumeMuted(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isNetworkLoggingEnabled(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isNotificationListenerServicePermitted(Ljava/lang/String;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isPackageSuspended(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isProfileActivePasswordSufficientForParent(I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isProvisioningAllowed(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isRemovingAdmin(Landroid/content/ComponentName;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isResetPasswordTokenActive(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isSecurityLoggingEnabled(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isSeparateProfileChallengeAllowed(I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isSystemOnlyUser(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->isUninstallInQueue(Ljava/lang/String;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->lockNow(IZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->notifyLockTaskModeChanged(ZLjava/lang/String;I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->notifyPendingSystemUpdate(Landroid/app/admin/SystemUpdateInfo;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->packageHasActiveAdmins(Ljava/lang/String;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->reboot(Landroid/content/ComponentName;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->removeActiveAdmin(Landroid/content/ComponentName;I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->removeCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->removeKeyPair(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->removeUser(Landroid/content/ComponentName;Landroid/os/UserHandle;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->reportFailedFingerprintAttempt(I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->reportFailedPasswordAttempt(I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->reportKeyguardDismissed(I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->reportKeyguardSecured(I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->reportPasswordChanged(I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->reportSuccessfulFingerprintAttempt(I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->reportSuccessfulPasswordAttempt(I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->requestBugreport(Landroid/content/ComponentName;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->resetPassword(Ljava/lang/String;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->resetPasswordWithToken(Landroid/content/ComponentName;Ljava/lang/String;[BI)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->retrieveNetworkLogs(Landroid/content/ComponentName;J)Ljava/util/List;
+HSPLandroid/app/admin/IDevicePolicyManager;->retrievePreRebootSecurityLogs(Landroid/content/ComponentName;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/admin/IDevicePolicyManager;->retrieveSecurityLogs(Landroid/content/ComponentName;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/admin/IDevicePolicyManager;->setAccountManagementDisabled(Landroid/content/ComponentName;Ljava/lang/String;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setActiveAdmin(Landroid/content/ComponentName;ZI)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setActivePasswordState(Landroid/app/admin/PasswordMetrics;I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setAffiliationIds(Landroid/content/ComponentName;Ljava/util/List;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setAlwaysOnVpnPackage(Landroid/content/ComponentName;Ljava/lang/String;Z)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->setApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Z)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->setApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setApplicationRestrictionsManagingPackage(Landroid/content/ComponentName;Ljava/lang/String;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->setAutoTimeRequired(Landroid/content/ComponentName;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setBackupServiceEnabled(Landroid/content/ComponentName;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setBluetoothContactSharingDisabled(Landroid/content/ComponentName;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setCameraDisabled(Landroid/content/ComponentName;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setCertInstallerPackage(Landroid/content/ComponentName;Ljava/lang/String;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setCrossProfileCallerIdDisabled(Landroid/content/ComponentName;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setDeviceOwner(Landroid/content/ComponentName;Ljava/lang/String;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->setDeviceOwnerLockScreenInfo(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setDeviceProvisioningConfigApplied()V
+HSPLandroid/app/admin/IDevicePolicyManager;->setForceEphemeralUsers(Landroid/content/ComponentName;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setGlobalProxy(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;
+HSPLandroid/app/admin/IDevicePolicyManager;->setGlobalSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setKeepUninstalledPackages(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setKeyguardDisabled(Landroid/content/ComponentName;Z)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->setKeyguardDisabledFeatures(Landroid/content/ComponentName;IZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setLockTaskPackages(Landroid/content/ComponentName;[Ljava/lang/String;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setLongSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setMasterVolumeMuted(Landroid/content/ComponentName;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;IZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setMaximumTimeToLock(Landroid/content/ComponentName;JZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setNetworkLoggingEnabled(Landroid/content/ComponentName;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setOrganizationColor(Landroid/content/ComponentName;I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setOrganizationColorForUser(II)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setOrganizationName(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setPackagesSuspended(Landroid/content/ComponentName;Ljava/lang/String;[Ljava/lang/String;Z)[Ljava/lang/String;
+HSPLandroid/app/admin/IDevicePolicyManager;->setPasswordExpirationTimeout(Landroid/content/ComponentName;JZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setPasswordHistoryLength(Landroid/content/ComponentName;IZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setPasswordMinimumLength(Landroid/content/ComponentName;IZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setPasswordMinimumLetters(Landroid/content/ComponentName;IZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setPasswordMinimumLowerCase(Landroid/content/ComponentName;IZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setPasswordMinimumNonLetter(Landroid/content/ComponentName;IZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setPasswordMinimumNumeric(Landroid/content/ComponentName;IZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setPasswordMinimumSymbols(Landroid/content/ComponentName;IZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setPasswordMinimumUpperCase(Landroid/content/ComponentName;IZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setPasswordQuality(Landroid/content/ComponentName;IZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->setPermissionPolicy(Landroid/content/ComponentName;Ljava/lang/String;I)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setPermittedAccessibilityServices(Landroid/content/ComponentName;Ljava/util/List;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->setPermittedCrossProfileNotificationListeners(Landroid/content/ComponentName;Ljava/util/List;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->setPermittedInputMethods(Landroid/content/ComponentName;Ljava/util/List;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->setProfileEnabled(Landroid/content/ComponentName;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setProfileName(Landroid/content/ComponentName;Ljava/lang/String;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setProfileOwner(Landroid/content/ComponentName;Ljava/lang/String;I)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->setRecommendedGlobalProxy(Landroid/content/ComponentName;Landroid/net/ProxyInfo;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setRequiredStrongAuthTimeout(Landroid/content/ComponentName;JZ)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setResetPasswordToken(Landroid/content/ComponentName;[B)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->setRestrictionsProvider(Landroid/content/ComponentName;Landroid/content/ComponentName;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setScreenCaptureDisabled(Landroid/content/ComponentName;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setSecureSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setSecurityLoggingEnabled(Landroid/content/ComponentName;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setShortSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setStatusBarDisabled(Landroid/content/ComponentName;Z)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->setStorageEncryption(Landroid/content/ComponentName;Z)I
+HSPLandroid/app/admin/IDevicePolicyManager;->setSystemUpdatePolicy(Landroid/content/ComponentName;Landroid/app/admin/SystemUpdatePolicy;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setTrustAgentConfiguration(Landroid/content/ComponentName;Landroid/content/ComponentName;Landroid/os/PersistableBundle;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setUserIcon(Landroid/content/ComponentName;Landroid/graphics/Bitmap;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setUserProvisioningState(II)V
+HSPLandroid/app/admin/IDevicePolicyManager;->setUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;Z)V
+HSPLandroid/app/admin/IDevicePolicyManager;->startManagedQuickContact(Ljava/lang/String;JZJLandroid/content/Intent;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->switchUser(Landroid/content/ComponentName;Landroid/os/UserHandle;)Z
+HSPLandroid/app/admin/IDevicePolicyManager;->uninstallCaCerts(Landroid/content/ComponentName;Ljava/lang/String;[Ljava/lang/String;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->uninstallPackageWithActiveAdmins(Ljava/lang/String;)V
+HSPLandroid/app/admin/IDevicePolicyManager;->wipeData(I)V
+HSPLandroid/app/assist/AssistStructure$1;-><init>()V
+HSPLandroid/app/assist/AssistStructure$ParcelTransferWriter;-><init>(Landroid/app/assist/AssistStructure;Landroid/os/Parcel;)V
+HSPLandroid/app/assist/AssistStructure$ParcelTransferWriter;->pushViewStackEntry(Landroid/app/assist/AssistStructure$ViewNode;I)V
+HSPLandroid/app/assist/AssistStructure$ParcelTransferWriter;->writeNextEntryToParcel(Landroid/app/assist/AssistStructure;Landroid/os/Parcel;Landroid/os/PooledStringWriter;)Z
+HSPLandroid/app/assist/AssistStructure$ParcelTransferWriter;->writeToParcel(Landroid/app/assist/AssistStructure;Landroid/os/Parcel;)V
+HSPLandroid/app/assist/AssistStructure$ParcelTransferWriter;->writeToParcelInner(Landroid/app/assist/AssistStructure;Landroid/os/Parcel;)Z
+HSPLandroid/app/assist/AssistStructure$ParcelTransferWriter;->writeView(Landroid/app/assist/AssistStructure$ViewNode;Landroid/os/Parcel;Landroid/os/PooledStringWriter;I)V
+HSPLandroid/app/assist/AssistStructure$SendChannel;-><init>(Landroid/app/assist/AssistStructure;)V
+HSPLandroid/app/assist/AssistStructure$SendChannel;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/app/assist/AssistStructure$ViewNode;-><init>()V
+HSPLandroid/app/assist/AssistStructure$ViewNode;->getChildCount()I
+HSPLandroid/app/assist/AssistStructure$ViewNode;->writeSelfToParcel(Landroid/os/Parcel;Landroid/os/PooledStringWriter;Z[F)I
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;-><init>(Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistStructure$ViewNode;Z)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->getChildCount()I
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->getNodeText()Landroid/app/assist/AssistStructure$ViewNodeText;
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->newChild(I)Landroid/view/ViewStructure;
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setAutofillHints([Ljava/lang/String;)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setAutofillId(Landroid/view/autofill/AutofillId;)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setAutofillType(I)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setAutofillValue(Landroid/view/autofill/AutofillValue;)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setChildCount(I)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setClassName(Ljava/lang/String;)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setClickable(Z)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setContentDescription(Ljava/lang/CharSequence;)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setDataIsSensitive(Z)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setDimens(IIIIII)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setEnabled(Z)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setFocusable(Z)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setFocused(Z)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setHint(Ljava/lang/CharSequence;)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setId(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setInputType(I)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setLongClickable(Z)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setOpaque(Z)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setText(Ljava/lang/CharSequence;)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->setVisibility(I)V
+HSPLandroid/app/assist/AssistStructure$ViewNodeText;-><init>()V
+HSPLandroid/app/assist/AssistStructure$ViewNodeText;->isSimple()Z
+HSPLandroid/app/assist/AssistStructure$ViewNodeText;->writeToParcel(Landroid/os/Parcel;ZZ)V
+HSPLandroid/app/assist/AssistStructure$ViewStackEntry;-><init>()V
+HSPLandroid/app/assist/AssistStructure$WindowNode;-><init>(Landroid/app/assist/AssistStructure;Landroid/view/ViewRootImpl;ZI)V
+HSPLandroid/app/assist/AssistStructure$WindowNode;->writeSelfToParcel(Landroid/os/Parcel;Landroid/os/PooledStringWriter;[F)V
+HSPLandroid/app/assist/AssistStructure;->-get0(Landroid/app/assist/AssistStructure;)J
+HSPLandroid/app/assist/AssistStructure;->-get1(Landroid/app/assist/AssistStructure;)J
+HSPLandroid/app/assist/AssistStructure;->-get2(Landroid/app/assist/AssistStructure;)I
+HSPLandroid/app/assist/AssistStructure;-><init>(Landroid/app/Activity;ZI)V
+HSPLandroid/app/assist/AssistStructure;->setAcquisitionEndTime(J)V
+HSPLandroid/app/assist/AssistStructure;->setAcquisitionStartTime(J)V
+HSPLandroid/app/assist/AssistStructure;->waitForReady()Z
+HSPLandroid/app/assist/AssistStructure;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/backup/BackupAgent;->onBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V
+HSPLandroid/app/backup/BackupAgent;->onRestore(Landroid/app/backup/BackupDataInput;ILandroid/os/ParcelFileDescriptor;)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;->getCurrentTransport()Ljava/lang/String;
+HSPLandroid/app/backup/BackupTransport$TransportImpl;-><init>(Landroid/app/backup/BackupTransport;)V
+HSPLandroid/app/backup/BackupTransport$TransportImpl;->name()Ljava/lang/String;
+HSPLandroid/app/backup/BackupTransport$TransportImpl;->transportDirName()Ljava/lang/String;
+HSPLandroid/app/backup/BackupTransport;-><init>()V
+HSPLandroid/app/backup/BackupTransport;->getBinder()Landroid/os/IBinder;
+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;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupManager;
+HSPLandroid/app/backup/IBackupManager;->acknowledgeFullBackupOrRestore(IZLjava/lang/String;Ljava/lang/String;Landroid/app/backup/IFullBackupRestoreObserver;)V
+HSPLandroid/app/backup/IBackupManager;->adbBackup(Landroid/os/ParcelFileDescriptor;ZZZZZZZZ[Ljava/lang/String;)V
+HSPLandroid/app/backup/IBackupManager;->adbRestore(Landroid/os/ParcelFileDescriptor;)V
+HSPLandroid/app/backup/IBackupManager;->agentConnected(Ljava/lang/String;Landroid/os/IBinder;)V
+HSPLandroid/app/backup/IBackupManager;->agentDisconnected(Ljava/lang/String;)V
+HSPLandroid/app/backup/IBackupManager;->backupNow()V
+HSPLandroid/app/backup/IBackupManager;->beginRestoreSession(Ljava/lang/String;Ljava/lang/String;)Landroid/app/backup/IRestoreSession;
+HSPLandroid/app/backup/IBackupManager;->cancelBackups()V
+HSPLandroid/app/backup/IBackupManager;->clearBackupData(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/backup/IBackupManager;->dataChanged(Ljava/lang/String;)V
+HSPLandroid/app/backup/IBackupManager;->fullTransportBackup([Ljava/lang/String;)V
+HSPLandroid/app/backup/IBackupManager;->getAvailableRestoreToken(Ljava/lang/String;)J
+HSPLandroid/app/backup/IBackupManager;->getConfigurationIntent(Ljava/lang/String;)Landroid/content/Intent;
+HSPLandroid/app/backup/IBackupManager;->getCurrentTransport()Ljava/lang/String;
+HSPLandroid/app/backup/IBackupManager;->getDataManagementIntent(Ljava/lang/String;)Landroid/content/Intent;
+HSPLandroid/app/backup/IBackupManager;->getDataManagementLabel(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/backup/IBackupManager;->getDestinationString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/backup/IBackupManager;->getTransportWhitelist()[Ljava/lang/String;
+HSPLandroid/app/backup/IBackupManager;->hasBackupPassword()Z
+HSPLandroid/app/backup/IBackupManager;->initializeTransports([Ljava/lang/String;Landroid/app/backup/IBackupObserver;)V
+HSPLandroid/app/backup/IBackupManager;->isAppEligibleForBackup(Ljava/lang/String;)Z
+HSPLandroid/app/backup/IBackupManager;->isBackupEnabled()Z
+HSPLandroid/app/backup/IBackupManager;->isBackupServiceActive(I)Z
+HSPLandroid/app/backup/IBackupManager;->listAllTransportComponents()[Landroid/content/ComponentName;
+HSPLandroid/app/backup/IBackupManager;->listAllTransports()[Ljava/lang/String;
+HSPLandroid/app/backup/IBackupManager;->opComplete(IJ)V
+HSPLandroid/app/backup/IBackupManager;->requestBackup([Ljava/lang/String;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;I)I
+HSPLandroid/app/backup/IBackupManager;->restoreAtInstall(Ljava/lang/String;I)V
+HSPLandroid/app/backup/IBackupManager;->selectBackupTransport(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/backup/IBackupManager;->selectBackupTransportAsync(Landroid/content/ComponentName;Landroid/app/backup/ISelectBackupTransportCallback;)V
+HSPLandroid/app/backup/IBackupManager;->setAutoRestore(Z)V
+HSPLandroid/app/backup/IBackupManager;->setBackupEnabled(Z)V
+HSPLandroid/app/backup/IBackupManager;->setBackupPassword(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/app/backup/IBackupManager;->setBackupProvisioned(Z)V
+HSPLandroid/app/backup/IBackupManager;->setBackupServiceActive(IZ)V
+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;->jobFinished(IZ)V
+HSPLandroid/app/job/IJobCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobCallback;
+HSPLandroid/app/job/IJobCallback;->acknowledgeStartMessage(IZ)V
+HSPLandroid/app/job/IJobCallback;->acknowledgeStopMessage(IZ)V
+HSPLandroid/app/job/IJobCallback;->completeWork(II)Z
+HSPLandroid/app/job/IJobCallback;->dequeueWork(I)Landroid/app/job/JobWorkItem;
+HSPLandroid/app/job/IJobCallback;->jobFinished(IZ)V
+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;->getAllPendingJobs()Ljava/util/List;
+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;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobScheduler;
+HSPLandroid/app/job/IJobScheduler;->cancel(I)V
+HSPLandroid/app/job/IJobScheduler;->cancelAll()V
+HSPLandroid/app/job/IJobScheduler;->enqueue(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I
+HSPLandroid/app/job/IJobScheduler;->getAllPendingJobs()Ljava/util/List;
+HSPLandroid/app/job/IJobScheduler;->getPendingJob(I)Landroid/app/job/JobInfo;
+HSPLandroid/app/job/IJobScheduler;->schedule(Landroid/app/job/JobInfo;)I
+HSPLandroid/app/job/IJobScheduler;->scheduleAsPackage(Landroid/app/job/JobInfo;Ljava/lang/String;ILjava/lang/String;)I
+HSPLandroid/app/job/IJobService$Stub;-><init>()V
+HSPLandroid/app/job/IJobService$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/app/job/IJobService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/app/job/IJobService;->startJob(Landroid/app/job/JobParameters;)V
+HSPLandroid/app/job/IJobService;->stopJob(Landroid/app/job/JobParameters;)V
+HSPLandroid/app/job/JobInfo$1;-><init>()V
+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;
+HSPLandroid/app/job/JobInfo$Builder;->-get0(Landroid/app/job/JobInfo$Builder;)I
+HSPLandroid/app/job/JobInfo$Builder;->-get1(Landroid/app/job/JobInfo$Builder;)Landroid/content/ClipData;
+HSPLandroid/app/job/JobInfo$Builder;->-get10(Landroid/app/job/JobInfo$Builder;)J
+HSPLandroid/app/job/JobInfo$Builder;->-get11(Landroid/app/job/JobInfo$Builder;)Z
+HSPLandroid/app/job/JobInfo$Builder;->-get12(Landroid/app/job/JobInfo$Builder;)Z
+HSPLandroid/app/job/JobInfo$Builder;->-get13(Landroid/app/job/JobInfo$Builder;)I
+HSPLandroid/app/job/JobInfo$Builder;->-get14(Landroid/app/job/JobInfo$Builder;)Landroid/content/ComponentName;
+HSPLandroid/app/job/JobInfo$Builder;->-get15(Landroid/app/job/JobInfo$Builder;)J
+HSPLandroid/app/job/JobInfo$Builder;->-get16(Landroid/app/job/JobInfo$Builder;)J
+HSPLandroid/app/job/JobInfo$Builder;->-get17(Landroid/app/job/JobInfo$Builder;)I
+HSPLandroid/app/job/JobInfo$Builder;->-get18(Landroid/app/job/JobInfo$Builder;)I
+HSPLandroid/app/job/JobInfo$Builder;->-get19(Landroid/app/job/JobInfo$Builder;)Landroid/os/Bundle;
+HSPLandroid/app/job/JobInfo$Builder;->-get2(Landroid/app/job/JobInfo$Builder;)I
+HSPLandroid/app/job/JobInfo$Builder;->-get20(Landroid/app/job/JobInfo$Builder;)J
+HSPLandroid/app/job/JobInfo$Builder;->-get21(Landroid/app/job/JobInfo$Builder;)J
+HSPLandroid/app/job/JobInfo$Builder;->-get22(Landroid/app/job/JobInfo$Builder;)Ljava/util/ArrayList;
+HSPLandroid/app/job/JobInfo$Builder;->-get3(Landroid/app/job/JobInfo$Builder;)I
+HSPLandroid/app/job/JobInfo$Builder;->-get4(Landroid/app/job/JobInfo$Builder;)Landroid/os/PersistableBundle;
+HSPLandroid/app/job/JobInfo$Builder;->-get5(Landroid/app/job/JobInfo$Builder;)I
+HSPLandroid/app/job/JobInfo$Builder;->-get6(Landroid/app/job/JobInfo$Builder;)J
+HSPLandroid/app/job/JobInfo$Builder;->-get7(Landroid/app/job/JobInfo$Builder;)Z
+HSPLandroid/app/job/JobInfo$Builder;->-get8(Landroid/app/job/JobInfo$Builder;)Z
+HSPLandroid/app/job/JobInfo$Builder;->-get9(Landroid/app/job/JobInfo$Builder;)J
+HSPLandroid/app/job/JobInfo$Builder;-><init>(ILandroid/content/ComponentName;)V
+HSPLandroid/app/job/JobInfo$Builder;->addTriggerContentUri(Landroid/app/job/JobInfo$TriggerContentUri;)Landroid/app/job/JobInfo$Builder;
+HSPLandroid/app/job/JobInfo$Builder;->build()Landroid/app/job/JobInfo;
+HSPLandroid/app/job/JobInfo$Builder;->setExtras(Landroid/os/PersistableBundle;)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;
+HSPLandroid/app/job/JobInfo$Builder;->setRequiredNetworkType(I)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;->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;-><init>()V
+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
+HSPLandroid/app/job/JobInfo$TriggerContentUri;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/job/JobInfo$TriggerContentUri;-><init>(Landroid/os/Parcel;Landroid/app/job/JobInfo$TriggerContentUri;)V
+HSPLandroid/app/job/JobInfo$TriggerContentUri;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/job/JobInfo;->-get1(Landroid/app/job/JobInfo;)J
+HSPLandroid/app/job/JobInfo;->-get2(Landroid/app/job/JobInfo;)J
+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;)V
+HSPLandroid/app/job/JobInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/job/JobInfo;-><init>(Landroid/os/Parcel;Landroid/app/job/JobInfo;)V
+HSPLandroid/app/job/JobInfo;->getFlexMillis()J
+HSPLandroid/app/job/JobInfo;->getId()I
+HSPLandroid/app/job/JobInfo;->getIntervalMillis()J
+HSPLandroid/app/job/JobInfo;->getMinFlexMillis()J
+HSPLandroid/app/job/JobInfo;->getMinPeriodMillis()J
+HSPLandroid/app/job/JobInfo;->getService()Landroid/content/ComponentName;
+HSPLandroid/app/job/JobInfo;->isPeriodic()Z
+HSPLandroid/app/job/JobInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/job/JobParameters$1;-><init>()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;
+HSPLandroid/app/job/JobParameters;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/job/JobParameters;-><init>(Landroid/os/Parcel;Landroid/app/job/JobParameters;)V
+HSPLandroid/app/job/JobParameters;->getCallback()Landroid/app/job/IJobCallback;
+HSPLandroid/app/job/JobParameters;->getExtras()Landroid/os/PersistableBundle;
+HSPLandroid/app/job/JobParameters;->getJobId()I
+HSPLandroid/app/job/JobParameters;->getTransientExtras()Landroid/os/Bundle;
+HSPLandroid/app/job/JobScheduler;-><init>()V
+HSPLandroid/app/job/JobScheduler;->cancel(I)V
+HSPLandroid/app/job/JobScheduler;->cancelAll()V
+HSPLandroid/app/job/JobScheduler;->enqueue(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I
+HSPLandroid/app/job/JobScheduler;->getAllPendingJobs()Ljava/util/List;
+HSPLandroid/app/job/JobScheduler;->getPendingJob(I)Landroid/app/job/JobInfo;
+HSPLandroid/app/job/JobScheduler;->schedule(Landroid/app/job/JobInfo;)I
+HSPLandroid/app/job/JobScheduler;->scheduleAsPackage(Landroid/app/job/JobInfo;Ljava/lang/String;ILjava/lang/String;)I
+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;-><init>()V
+HSPLandroid/app/job/JobService;->jobFinished(Landroid/app/job/JobParameters;Z)V
+HSPLandroid/app/job/JobService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HSPLandroid/app/job/JobService;->onStartJob(Landroid/app/job/JobParameters;)Z
+HSPLandroid/app/job/JobService;->onStopJob(Landroid/app/job/JobParameters;)Z
+HSPLandroid/app/job/JobServiceEngine$JobHandler;-><init>(Landroid/app/job/JobServiceEngine;Landroid/os/Looper;)V
+HSPLandroid/app/job/JobServiceEngine$JobHandler;->ackStartMessage(Landroid/app/job/JobParameters;Z)V
+HSPLandroid/app/job/JobServiceEngine$JobHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/app/job/JobServiceEngine$JobInterface;-><init>(Landroid/app/job/JobServiceEngine;)V
+HSPLandroid/app/job/JobServiceEngine$JobInterface;->startJob(Landroid/app/job/JobParameters;)V
+HSPLandroid/app/job/JobServiceEngine;-><init>(Landroid/app/Service;)V
+HSPLandroid/app/job/JobServiceEngine;->getBinder()Landroid/os/IBinder;
+HSPLandroid/app/job/JobServiceEngine;->jobFinished(Landroid/app/job/JobParameters;Z)V
+HSPLandroid/app/job/JobServiceEngine;->onStartJob(Landroid/app/job/JobParameters;)Z
+HSPLandroid/app/job/JobServiceEngine;->onStopJob(Landroid/app/job/JobParameters;)Z
+HSPLandroid/app/trust/IStrongAuthTracker$Stub;-><init>()V
+HSPLandroid/app/trust/IStrongAuthTracker$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/app/trust/IStrongAuthTracker;->onStrongAuthRequiredChanged(II)V
+HSPLandroid/app/trust/ITrustListener$Stub;-><init>()V
+HSPLandroid/app/trust/ITrustListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/app/trust/ITrustListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/app/trust/ITrustListener;->onTrustChanged(ZII)V
+HSPLandroid/app/trust/ITrustListener;->onTrustManagedChanged(ZI)V
+HSPLandroid/app/trust/ITrustManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/app/trust/ITrustManager$Stub$Proxy;->isDeviceLocked(I)Z
+HSPLandroid/app/trust/ITrustManager$Stub$Proxy;->isDeviceSecure(I)Z
+HSPLandroid/app/trust/ITrustManager$Stub$Proxy;->registerTrustListener(Landroid/app/trust/ITrustListener;)V
+HSPLandroid/app/trust/ITrustManager$Stub$Proxy;->reportKeyguardShowingChanged()V
+HSPLandroid/app/trust/ITrustManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/trust/ITrustManager;
+HSPLandroid/app/trust/ITrustManager;->clearAllFingerprints()V
+HSPLandroid/app/trust/ITrustManager;->isDeviceLocked(I)Z
+HSPLandroid/app/trust/ITrustManager;->isDeviceSecure(I)Z
+HSPLandroid/app/trust/ITrustManager;->isTrustUsuallyManaged(I)Z
+HSPLandroid/app/trust/ITrustManager;->registerTrustListener(Landroid/app/trust/ITrustListener;)V
+HSPLandroid/app/trust/ITrustManager;->reportEnabledTrustAgentsChanged(I)V
+HSPLandroid/app/trust/ITrustManager;->reportKeyguardShowingChanged()V
+HSPLandroid/app/trust/ITrustManager;->reportUnlockAttempt(ZI)V
+HSPLandroid/app/trust/ITrustManager;->reportUnlockLockout(II)V
+HSPLandroid/app/trust/ITrustManager;->setDeviceLockedForUser(IZ)V
+HSPLandroid/app/trust/ITrustManager;->unlockedByFingerprintForUser(I)V
+HSPLandroid/app/trust/ITrustManager;->unregisterTrustListener(Landroid/app/trust/ITrustListener;)V
+HSPLandroid/app/trust/TrustManager$1;-><init>(Landroid/app/trust/TrustManager;Landroid/os/Looper;)V
+HSPLandroid/app/trust/TrustManager$1;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/app/trust/TrustManager$2;-><init>(Landroid/app/trust/TrustManager;Landroid/app/trust/TrustManager$TrustListener;)V
+HSPLandroid/app/trust/TrustManager$2;->onTrustChanged(ZII)V
+HSPLandroid/app/trust/TrustManager$2;->onTrustManagedChanged(ZI)V
+HSPLandroid/app/trust/TrustManager$TrustListener;->onTrustChanged(ZII)V
+HSPLandroid/app/trust/TrustManager$TrustListener;->onTrustManagedChanged(ZI)V
+HSPLandroid/app/trust/TrustManager;->-get0(Landroid/app/trust/TrustManager;)Landroid/os/Handler;
+HSPLandroid/app/trust/TrustManager;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/app/trust/TrustManager;->registerTrustListener(Landroid/app/trust/TrustManager$TrustListener;)V
+HSPLandroid/app/trust/TrustManager;->reportKeyguardShowingChanged()V
+HSPLandroid/app/usage/IStorageStatsManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+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
+HSPLandroid/app/usage/IStorageStatsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/usage/IStorageStatsManager;
+HSPLandroid/app/usage/IStorageStatsManager;->getCacheBytes(Ljava/lang/String;Ljava/lang/String;)J
+HSPLandroid/app/usage/IStorageStatsManager;->getCacheQuotaBytes(Ljava/lang/String;ILjava/lang/String;)J
+HSPLandroid/app/usage/IStorageStatsManager;->getFreeBytes(Ljava/lang/String;Ljava/lang/String;)J
+HSPLandroid/app/usage/IStorageStatsManager;->getTotalBytes(Ljava/lang/String;Ljava/lang/String;)J
+HSPLandroid/app/usage/IStorageStatsManager;->isQuotaSupported(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/app/usage/IStorageStatsManager;->queryExternalStatsForUser(Ljava/lang/String;ILjava/lang/String;)Landroid/app/usage/ExternalStorageStats;
+HSPLandroid/app/usage/IStorageStatsManager;->queryStatsForPackage(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/app/usage/StorageStats;
+HSPLandroid/app/usage/IStorageStatsManager;->queryStatsForUid(Ljava/lang/String;ILjava/lang/String;)Landroid/app/usage/StorageStats;
+HSPLandroid/app/usage/IStorageStatsManager;->queryStatsForUser(Ljava/lang/String;ILjava/lang/String;)Landroid/app/usage/StorageStats;
+HSPLandroid/app/usage/IUsageStatsManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/app/usage/IUsageStatsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/usage/IUsageStatsManager;
+HSPLandroid/app/usage/IUsageStatsManager;->isAppInactive(Ljava/lang/String;I)Z
+HSPLandroid/app/usage/IUsageStatsManager;->onCarrierPrivilegedAppsChanged()V
+HSPLandroid/app/usage/IUsageStatsManager;->queryConfigurationStats(IJJLjava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/usage/IUsageStatsManager;->queryEvents(JJLjava/lang/String;)Landroid/app/usage/UsageEvents;
+HSPLandroid/app/usage/IUsageStatsManager;->queryUsageStats(IJJLjava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/usage/IUsageStatsManager;->reportChooserSelection(Ljava/lang/String;ILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/app/usage/IUsageStatsManager;->setAppInactive(Ljava/lang/String;ZI)V
+HSPLandroid/app/usage/IUsageStatsManager;->whitelistAppTemporarily(Ljava/lang/String;JI)V
+HSPLandroid/app/usage/StorageStats$1;-><init>()V
+HSPLandroid/app/usage/StorageStatsManager;-><init>(Landroid/content/Context;Landroid/app/usage/IStorageStatsManager;)V
+HSPLandroid/app/usage/StorageStatsManager;->getFreeBytes(Ljava/lang/String;)J
+HSPLandroid/app/usage/StorageStatsManager;->getFreeBytes(Ljava/util/UUID;)J
+HSPLandroid/app/usage/StorageStatsManager;->getTotalBytes(Ljava/lang/String;)J
+HSPLandroid/app/usage/StorageStatsManager;->getTotalBytes(Ljava/util/UUID;)J
+HSPLandroid/app/usage/UsageEvents$1;-><init>()V
+HSPLandroid/app/usage/UsageEvents;-><init>()V
+HSPLandroid/app/usage/UsageStatsManager;-><init>(Landroid/content/Context;Landroid/app/usage/IUsageStatsManager;)V
+HSPLandroid/appwidget/AppWidgetHost$Callbacks;-><init>(Landroid/os/Handler;)V
+HSPLandroid/appwidget/AppWidgetHost$UpdateHandler;-><init>(Landroid/appwidget/AppWidgetHost;Landroid/os/Looper;)V
+HSPLandroid/appwidget/AppWidgetHost;-><init>(Landroid/content/Context;I)V
+HSPLandroid/appwidget/AppWidgetHost;-><init>(Landroid/content/Context;ILandroid/widget/RemoteViews$OnClickHandler;Landroid/os/Looper;)V
+HSPLandroid/appwidget/AppWidgetHost;->bindService(Landroid/content/Context;)V
+HSPLandroid/appwidget/AppWidgetHost;->startListening()V
+HSPLandroid/appwidget/AppWidgetHost;->stopListening()V
+HSPLandroid/appwidget/AppWidgetHostView$1;-><init>()V
+HSPLandroid/appwidget/AppWidgetHostView;->getDefaultPaddingForWidget(Landroid/content/Context;Landroid/content/ComponentName;Landroid/graphics/Rect;)Landroid/graphics/Rect;
+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/AppWidgetProvider;-><init>()V
+HSPLandroid/appwidget/AppWidgetProvider;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLandroid/appwidget/AppWidgetProviderInfo$1;-><init>()V
+HSPLandroid/appwidget/AppWidgetProviderInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/appwidget/AppWidgetProviderInfo;
+HSPLandroid/appwidget/AppWidgetProviderInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+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/bluetooth/BluetoothA2dp$1;-><init>(Landroid/bluetooth/BluetoothA2dp;)V
+HSPLandroid/bluetooth/BluetoothA2dp$2;-><init>(Landroid/bluetooth/BluetoothA2dp;)V
+HSPLandroid/bluetooth/BluetoothA2dp;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
+HSPLandroid/bluetooth/BluetoothA2dp;->doBind()Z
+HSPLandroid/bluetooth/BluetoothAdapter$1;-><init>(Landroid/bluetooth/BluetoothAdapter;)V
+HSPLandroid/bluetooth/BluetoothAdapter$1;->onBluetoothServiceUp(Landroid/bluetooth/IBluetooth;)V
+HSPLandroid/bluetooth/BluetoothAdapter;->-get1(Landroid/bluetooth/BluetoothAdapter;)Ljava/util/ArrayList;
+HSPLandroid/bluetooth/BluetoothAdapter;->-get3(Landroid/bluetooth/BluetoothAdapter;)Ljava/util/concurrent/locks/ReentrantReadWriteLock;
+HSPLandroid/bluetooth/BluetoothAdapter;->-set0(Landroid/bluetooth/BluetoothAdapter;Landroid/bluetooth/IBluetooth;)Landroid/bluetooth/IBluetooth;
+HSPLandroid/bluetooth/BluetoothAdapter;-><init>(Landroid/bluetooth/IBluetoothManager;)V
+HSPLandroid/bluetooth/BluetoothAdapter;->getAddress()Ljava/lang/String;
+HSPLandroid/bluetooth/BluetoothAdapter;->getBluetoothManager()Landroid/bluetooth/IBluetoothManager;
+HSPLandroid/bluetooth/BluetoothAdapter;->getBluetoothService(Landroid/bluetooth/IBluetoothManagerCallback;)Landroid/bluetooth/IBluetooth;
+HSPLandroid/bluetooth/BluetoothAdapter;->getBondedDevices()Ljava/util/Set;
+HSPLandroid/bluetooth/BluetoothAdapter;->getDefaultAdapter()Landroid/bluetooth/BluetoothAdapter;
+HSPLandroid/bluetooth/BluetoothAdapter;->getProfileConnectionState(I)I
+HSPLandroid/bluetooth/BluetoothAdapter;->getProfileProxy(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;I)Z
+HSPLandroid/bluetooth/BluetoothAdapter;->getState()I
+HSPLandroid/bluetooth/BluetoothAdapter;->getUuids()[Landroid/os/ParcelUuid;
+HSPLandroid/bluetooth/BluetoothAdapter;->isEnabled()Z
+HSPLandroid/bluetooth/BluetoothAdapter;->listenUsingInsecureL2capOn(I)Landroid/bluetooth/BluetoothServerSocket;
+HSPLandroid/bluetooth/BluetoothAdapter;->listenUsingInsecureRfcommOn(I)Landroid/bluetooth/BluetoothServerSocket;
+HSPLandroid/bluetooth/BluetoothAdapter;->listenUsingL2capOn(I)Landroid/bluetooth/BluetoothServerSocket;
+HSPLandroid/bluetooth/BluetoothAdapter;->listenUsingL2capOn(IZZ)Landroid/bluetooth/BluetoothServerSocket;
+HSPLandroid/bluetooth/BluetoothAdapter;->listenUsingRfcommOn(I)Landroid/bluetooth/BluetoothServerSocket;
+HSPLandroid/bluetooth/BluetoothAdapter;->listenUsingRfcommOn(IZZ)Landroid/bluetooth/BluetoothServerSocket;
+HSPLandroid/bluetooth/BluetoothAdapter;->toDeviceSet([Landroid/bluetooth/BluetoothDevice;)Ljava/util/Set;
+HSPLandroid/bluetooth/BluetoothCodecConfig$1;-><init>()V
+HSPLandroid/bluetooth/BluetoothCodecConfig;-><init>(IIIIIJJJJ)V
+HSPLandroid/bluetooth/BluetoothCodecConfig;->getBitsPerSample()I
+HSPLandroid/bluetooth/BluetoothCodecConfig;->getChannelMode()I
+HSPLandroid/bluetooth/BluetoothCodecConfig;->getCodecPriority()I
+HSPLandroid/bluetooth/BluetoothCodecConfig;->getCodecSpecific1()J
+HSPLandroid/bluetooth/BluetoothCodecConfig;->getCodecSpecific2()J
+HSPLandroid/bluetooth/BluetoothCodecConfig;->getCodecSpecific3()J
+HSPLandroid/bluetooth/BluetoothCodecConfig;->getCodecSpecific4()J
+HSPLandroid/bluetooth/BluetoothCodecConfig;->getCodecType()I
+HSPLandroid/bluetooth/BluetoothCodecConfig;->getSampleRate()I
+HSPLandroid/bluetooth/BluetoothDevice$1;-><init>()V
+HSPLandroid/bluetooth/BluetoothDevice$2;-><init>()V
+HSPLandroid/bluetooth/BluetoothDevice$2;->newArray(I)[Landroid/bluetooth/BluetoothDevice;
+HSPLandroid/bluetooth/BluetoothDevice$2;->newArray(I)[Ljava/lang/Object;
+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
+HSPLandroid/bluetooth/BluetoothHeadset$3;-><init>(Landroid/bluetooth/BluetoothHeadset;Landroid/os/Looper;)V
+HSPLandroid/bluetooth/BluetoothHeadset$3;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/bluetooth/BluetoothHeadset;->-get0(Landroid/bluetooth/BluetoothHeadset;)Landroid/bluetooth/IBluetoothProfileServiceConnection;
+HSPLandroid/bluetooth/BluetoothHeadset;->-get1(Landroid/bluetooth/BluetoothHeadset;)Landroid/os/Handler;
+HSPLandroid/bluetooth/BluetoothHeadset;->-get2(Landroid/bluetooth/BluetoothHeadset;)Landroid/bluetooth/IBluetoothHeadset;
+HSPLandroid/bluetooth/BluetoothHeadset;->-get3(Landroid/bluetooth/BluetoothHeadset;)Landroid/bluetooth/BluetoothProfile$ServiceListener;
+HSPLandroid/bluetooth/BluetoothHeadset;->-set0(Landroid/bluetooth/BluetoothHeadset;Landroid/bluetooth/IBluetoothHeadset;)Landroid/bluetooth/IBluetoothHeadset;
+HSPLandroid/bluetooth/BluetoothHeadset;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
+HSPLandroid/bluetooth/BluetoothHeadset;->doBind()Z
+HSPLandroid/bluetooth/BluetoothHeadset;->isInbandRingingSupported(Landroid/content/Context;)Z
+HSPLandroid/bluetooth/BluetoothInputDevice$1;-><init>(Landroid/bluetooth/BluetoothInputDevice;)V
+HSPLandroid/bluetooth/BluetoothInputDevice$2;-><init>(Landroid/bluetooth/BluetoothInputDevice;)V
+HSPLandroid/bluetooth/BluetoothInputDevice;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
+HSPLandroid/bluetooth/BluetoothInputDevice;->doBind()Z
+HSPLandroid/bluetooth/BluetoothInputStream;-><init>(Landroid/bluetooth/BluetoothSocket;)V
+HSPLandroid/bluetooth/BluetoothManager;-><init>(Landroid/content/Context;)V
+HSPLandroid/bluetooth/BluetoothManager;->getAdapter()Landroid/bluetooth/BluetoothAdapter;
+HSPLandroid/bluetooth/BluetoothMap$1;-><init>(Landroid/bluetooth/BluetoothMap;)V
+HSPLandroid/bluetooth/BluetoothMap$2;-><init>(Landroid/bluetooth/BluetoothMap;)V
+HSPLandroid/bluetooth/BluetoothMap;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
+HSPLandroid/bluetooth/BluetoothMap;->doBind()Z
+HSPLandroid/bluetooth/BluetoothOutputStream;-><init>(Landroid/bluetooth/BluetoothSocket;)V
+HSPLandroid/bluetooth/BluetoothPan$1;-><init>(Landroid/bluetooth/BluetoothPan;)V
+HSPLandroid/bluetooth/BluetoothPan$2;-><init>(Landroid/bluetooth/BluetoothPan;)V
+HSPLandroid/bluetooth/BluetoothPan;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V
+HSPLandroid/bluetooth/BluetoothPan;->doBind()Z
+HSPLandroid/bluetooth/BluetoothPbap$1;-><init>(Landroid/bluetooth/BluetoothPbap;)V
+HSPLandroid/bluetooth/BluetoothPbap$2;-><init>(Landroid/bluetooth/BluetoothPbap;)V
+HSPLandroid/bluetooth/BluetoothPbap$ServiceListener;->onServiceConnected(Landroid/bluetooth/BluetoothPbap;)V
+HSPLandroid/bluetooth/BluetoothPbap$ServiceListener;->onServiceDisconnected()V
+HSPLandroid/bluetooth/BluetoothPbap;-><init>(Landroid/content/Context;Landroid/bluetooth/BluetoothPbap$ServiceListener;)V
+HSPLandroid/bluetooth/BluetoothPbap;->doBind()Z
+HSPLandroid/bluetooth/BluetoothProfile$ServiceListener;->onServiceConnected(ILandroid/bluetooth/BluetoothProfile;)V
+HSPLandroid/bluetooth/BluetoothProfile$ServiceListener;->onServiceDisconnected(I)V
+HSPLandroid/bluetooth/BluetoothProfile;->getConnectedDevices()Ljava/util/List;
+HSPLandroid/bluetooth/BluetoothProfile;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/BluetoothProfile;->getDevicesMatchingConnectionStates([I)Ljava/util/List;
+HSPLandroid/bluetooth/BluetoothServerSocket;-><init>(IZZI)V
+HSPLandroid/bluetooth/BluetoothServerSocket;-><init>(IZZIZZ)V
+HSPLandroid/bluetooth/BluetoothServerSocket;->accept()Landroid/bluetooth/BluetoothSocket;
+HSPLandroid/bluetooth/BluetoothServerSocket;->accept(I)Landroid/bluetooth/BluetoothSocket;
+HSPLandroid/bluetooth/BluetoothServerSocket;->getChannel()I
+HSPLandroid/bluetooth/BluetoothServerSocket;->setChannel(I)V
+HSPLandroid/bluetooth/BluetoothSocket$SocketState;-><init>(Ljava/lang/String;I)V
+HSPLandroid/bluetooth/BluetoothSocket;-><init>(IIZZLandroid/bluetooth/BluetoothDevice;ILandroid/os/ParcelUuid;)V
+HSPLandroid/bluetooth/BluetoothSocket;-><init>(IIZZLandroid/bluetooth/BluetoothDevice;ILandroid/os/ParcelUuid;ZZ)V
+HSPLandroid/bluetooth/BluetoothSocket;->accept(I)Landroid/bluetooth/BluetoothSocket;
+HSPLandroid/bluetooth/BluetoothSocket;->bindListen()I
+HSPLandroid/bluetooth/BluetoothSocket;->getPort()I
+HSPLandroid/bluetooth/BluetoothSocket;->getSecurityFlags()I
+HSPLandroid/bluetooth/BluetoothSocket;->readAll(Ljava/io/InputStream;[B)I
+HSPLandroid/bluetooth/BluetoothSocket;->readInt(Ljava/io/InputStream;)I
+HSPLandroid/bluetooth/BluetoothSocket;->setExcludeSdp(Z)V
+HSPLandroid/bluetooth/BluetoothSocket;->waitSocketSignal(Ljava/io/InputStream;)Ljava/lang/String;
+HSPLandroid/bluetooth/BluetoothUuid;->isUuidPresent([Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;)Z
+HSPLandroid/bluetooth/IBluetooth$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/bluetooth/IBluetooth$Stub$Proxy;->getBondedDevices()[Landroid/bluetooth/BluetoothDevice;
+HSPLandroid/bluetooth/IBluetooth$Stub$Proxy;->getProfileConnectionState(I)I
+HSPLandroid/bluetooth/IBluetooth$Stub$Proxy;->getState()I
+HSPLandroid/bluetooth/IBluetooth$Stub$Proxy;->getUuids()[Landroid/os/ParcelUuid;
+HSPLandroid/bluetooth/IBluetooth$Stub$Proxy;->isEnabled()Z
+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
+HSPLandroid/bluetooth/IBluetooth;->cancelBondProcess(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetooth;->cancelDiscovery()Z
+HSPLandroid/bluetooth/IBluetooth;->connectSocket(Landroid/bluetooth/BluetoothDevice;ILandroid/os/ParcelUuid;II)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/bluetooth/IBluetooth;->createBond(Landroid/bluetooth/BluetoothDevice;I)Z
+HSPLandroid/bluetooth/IBluetooth;->createBondOutOfBand(Landroid/bluetooth/BluetoothDevice;ILandroid/bluetooth/OobData;)Z
+HSPLandroid/bluetooth/IBluetooth;->createSocketChannel(ILjava/lang/String;Landroid/os/ParcelUuid;II)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/bluetooth/IBluetooth;->disable()Z
+HSPLandroid/bluetooth/IBluetooth;->enable()Z
+HSPLandroid/bluetooth/IBluetooth;->enableNoAutoConnect()Z
+HSPLandroid/bluetooth/IBluetooth;->factoryReset()Z
+HSPLandroid/bluetooth/IBluetooth;->fetchRemoteUuids(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetooth;->getAdapterConnectionState()I
+HSPLandroid/bluetooth/IBluetooth;->getAddress()Ljava/lang/String;
+HSPLandroid/bluetooth/IBluetooth;->getBatteryLevel(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetooth;->getBondState(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetooth;->getBondedDevices()[Landroid/bluetooth/BluetoothDevice;
+HSPLandroid/bluetooth/IBluetooth;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetooth;->getDiscoverableTimeout()I
+HSPLandroid/bluetooth/IBluetooth;->getDiscoveryEndMillis()J
+HSPLandroid/bluetooth/IBluetooth;->getLeMaximumAdvertisingDataLength()I
+HSPLandroid/bluetooth/IBluetooth;->getMessageAccessPermission(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetooth;->getName()Ljava/lang/String;
+HSPLandroid/bluetooth/IBluetooth;->getPhonebookAccessPermission(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetooth;->getProfileConnectionState(I)I
+HSPLandroid/bluetooth/IBluetooth;->getRemoteAlias(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;
+HSPLandroid/bluetooth/IBluetooth;->getRemoteClass(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetooth;->getRemoteName(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;
+HSPLandroid/bluetooth/IBluetooth;->getRemoteType(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetooth;->getRemoteUuids(Landroid/bluetooth/BluetoothDevice;)[Landroid/os/ParcelUuid;
+HSPLandroid/bluetooth/IBluetooth;->getScanMode()I
+HSPLandroid/bluetooth/IBluetooth;->getSimAccessPermission(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetooth;->getState()I
+HSPLandroid/bluetooth/IBluetooth;->getSupportedProfiles()J
+HSPLandroid/bluetooth/IBluetooth;->getUuids()[Landroid/os/ParcelUuid;
+HSPLandroid/bluetooth/IBluetooth;->isActivityAndEnergyReportingSupported()Z
+HSPLandroid/bluetooth/IBluetooth;->isBondingInitiatedLocally(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetooth;->isDiscovering()Z
+HSPLandroid/bluetooth/IBluetooth;->isEnabled()Z
+HSPLandroid/bluetooth/IBluetooth;->isLe2MPhySupported()Z
+HSPLandroid/bluetooth/IBluetooth;->isLeCodedPhySupported()Z
+HSPLandroid/bluetooth/IBluetooth;->isLeExtendedAdvertisingSupported()Z
+HSPLandroid/bluetooth/IBluetooth;->isLePeriodicAdvertisingSupported()Z
+HSPLandroid/bluetooth/IBluetooth;->isMultiAdvertisementSupported()Z
+HSPLandroid/bluetooth/IBluetooth;->isOffloadedFilteringSupported()Z
+HSPLandroid/bluetooth/IBluetooth;->isOffloadedScanBatchingSupported()Z
+HSPLandroid/bluetooth/IBluetooth;->onBrEdrDown()V
+HSPLandroid/bluetooth/IBluetooth;->onLeServiceUp()V
+HSPLandroid/bluetooth/IBluetooth;->registerCallback(Landroid/bluetooth/IBluetoothCallback;)V
+HSPLandroid/bluetooth/IBluetooth;->removeBond(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetooth;->reportActivityInfo()Landroid/bluetooth/BluetoothActivityEnergyInfo;
+HSPLandroid/bluetooth/IBluetooth;->requestActivityInfo(Landroid/os/ResultReceiver;)V
+HSPLandroid/bluetooth/IBluetooth;->sdpSearch(Landroid/bluetooth/BluetoothDevice;Landroid/os/ParcelUuid;)Z
+HSPLandroid/bluetooth/IBluetooth;->sendConnectionStateChange(Landroid/bluetooth/BluetoothDevice;III)V
+HSPLandroid/bluetooth/IBluetooth;->setDiscoverableTimeout(I)Z
+HSPLandroid/bluetooth/IBluetooth;->setMessageAccessPermission(Landroid/bluetooth/BluetoothDevice;I)Z
+HSPLandroid/bluetooth/IBluetooth;->setName(Ljava/lang/String;)Z
+HSPLandroid/bluetooth/IBluetooth;->setPairingConfirmation(Landroid/bluetooth/BluetoothDevice;Z)Z
+HSPLandroid/bluetooth/IBluetooth;->setPasskey(Landroid/bluetooth/BluetoothDevice;ZI[B)Z
+HSPLandroid/bluetooth/IBluetooth;->setPhonebookAccessPermission(Landroid/bluetooth/BluetoothDevice;I)Z
+HSPLandroid/bluetooth/IBluetooth;->setPin(Landroid/bluetooth/BluetoothDevice;ZI[B)Z
+HSPLandroid/bluetooth/IBluetooth;->setRemoteAlias(Landroid/bluetooth/BluetoothDevice;Ljava/lang/String;)Z
+HSPLandroid/bluetooth/IBluetooth;->setScanMode(II)Z
+HSPLandroid/bluetooth/IBluetooth;->setSimAccessPermission(Landroid/bluetooth/BluetoothDevice;I)Z
+HSPLandroid/bluetooth/IBluetooth;->startDiscovery()Z
+HSPLandroid/bluetooth/IBluetooth;->unregisterCallback(Landroid/bluetooth/IBluetoothCallback;)V
+HSPLandroid/bluetooth/IBluetoothA2dp$Stub;-><init>()V
+HSPLandroid/bluetooth/IBluetoothA2dp;->adjustAvrcpAbsoluteVolume(I)V
+HSPLandroid/bluetooth/IBluetoothA2dp;->connect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothA2dp;->disableOptionalCodecs()V
+HSPLandroid/bluetooth/IBluetoothA2dp;->disconnect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothA2dp;->enableOptionalCodecs()V
+HSPLandroid/bluetooth/IBluetoothA2dp;->getCodecStatus()Landroid/bluetooth/BluetoothCodecStatus;
+HSPLandroid/bluetooth/IBluetoothA2dp;->getConnectedDevices()Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothA2dp;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothA2dp;->getDevicesMatchingConnectionStates([I)Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothA2dp;->getOptionalCodecsEnabled(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothA2dp;->getPriority(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothA2dp;->isA2dpPlaying(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothA2dp;->isAvrcpAbsoluteVolumeSupported()Z
+HSPLandroid/bluetooth/IBluetoothA2dp;->setAvrcpAbsoluteVolume(I)V
+HSPLandroid/bluetooth/IBluetoothA2dp;->setCodecConfigPreference(Landroid/bluetooth/BluetoothCodecConfig;)V
+HSPLandroid/bluetooth/IBluetoothA2dp;->setOptionalCodecsEnabled(Landroid/bluetooth/BluetoothDevice;I)V
+HSPLandroid/bluetooth/IBluetoothA2dp;->setPriority(Landroid/bluetooth/BluetoothDevice;I)Z
+HSPLandroid/bluetooth/IBluetoothA2dp;->supportsOptionalCodecs(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/bluetooth/IBluetoothCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HSPLandroid/bluetooth/IBluetoothCallback$Stub$Proxy;->onBluetoothStateChange(II)V
+HSPLandroid/bluetooth/IBluetoothCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothCallback;
+HSPLandroid/bluetooth/IBluetoothCallback;->onBluetoothStateChange(II)V
+HSPLandroid/bluetooth/IBluetoothGatt$Stub;-><init>()V
+HSPLandroid/bluetooth/IBluetoothGatt;->addService(ILandroid/bluetooth/BluetoothGattService;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->beginReliableWrite(ILjava/lang/String;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->clearServices(I)V
+HSPLandroid/bluetooth/IBluetoothGatt;->clientConnect(ILjava/lang/String;ZIZI)V
+HSPLandroid/bluetooth/IBluetoothGatt;->clientDisconnect(ILjava/lang/String;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->clientReadPhy(ILjava/lang/String;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->clientSetPreferredPhy(ILjava/lang/String;III)V
+HSPLandroid/bluetooth/IBluetoothGatt;->configureMTU(ILjava/lang/String;I)V
+HSPLandroid/bluetooth/IBluetoothGatt;->connectionParameterUpdate(ILjava/lang/String;I)V
+HSPLandroid/bluetooth/IBluetoothGatt;->disconnectAll()V
+HSPLandroid/bluetooth/IBluetoothGatt;->discoverServiceByUuid(ILjava/lang/String;Landroid/os/ParcelUuid;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->discoverServices(ILjava/lang/String;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->enableAdvertisingSet(IZII)V
+HSPLandroid/bluetooth/IBluetoothGatt;->endReliableWrite(ILjava/lang/String;Z)V
+HSPLandroid/bluetooth/IBluetoothGatt;->flushPendingBatchResults(I)V
+HSPLandroid/bluetooth/IBluetoothGatt;->getDevicesMatchingConnectionStates([I)Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothGatt;->getOwnAddress(I)V
+HSPLandroid/bluetooth/IBluetoothGatt;->numHwTrackFiltersAvailable()I
+HSPLandroid/bluetooth/IBluetoothGatt;->readCharacteristic(ILjava/lang/String;II)V
+HSPLandroid/bluetooth/IBluetoothGatt;->readDescriptor(ILjava/lang/String;II)V
+HSPLandroid/bluetooth/IBluetoothGatt;->readRemoteRssi(ILjava/lang/String;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->readUsingCharacteristicUuid(ILjava/lang/String;Landroid/os/ParcelUuid;III)V
+HSPLandroid/bluetooth/IBluetoothGatt;->refreshDevice(ILjava/lang/String;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->registerClient(Landroid/os/ParcelUuid;Landroid/bluetooth/IBluetoothGattCallback;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->registerForNotification(ILjava/lang/String;IZ)V
+HSPLandroid/bluetooth/IBluetoothGatt;->registerScanner(Landroid/bluetooth/le/IScannerCallback;Landroid/os/WorkSource;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->registerServer(Landroid/os/ParcelUuid;Landroid/bluetooth/IBluetoothGattServerCallback;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->registerSync(Landroid/bluetooth/le/ScanResult;IILandroid/bluetooth/le/IPeriodicAdvertisingCallback;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->removeService(II)V
+HSPLandroid/bluetooth/IBluetoothGatt;->sendNotification(ILjava/lang/String;IZ[B)V
+HSPLandroid/bluetooth/IBluetoothGatt;->sendResponse(ILjava/lang/String;III[B)V
+HSPLandroid/bluetooth/IBluetoothGatt;->serverConnect(ILjava/lang/String;ZI)V
+HSPLandroid/bluetooth/IBluetoothGatt;->serverDisconnect(ILjava/lang/String;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->serverReadPhy(ILjava/lang/String;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->serverSetPreferredPhy(ILjava/lang/String;III)V
+HSPLandroid/bluetooth/IBluetoothGatt;->setAdvertisingData(ILandroid/bluetooth/le/AdvertiseData;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->setAdvertisingParameters(ILandroid/bluetooth/le/AdvertisingSetParameters;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->setPeriodicAdvertisingData(ILandroid/bluetooth/le/AdvertiseData;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->setPeriodicAdvertisingEnable(IZ)V
+HSPLandroid/bluetooth/IBluetoothGatt;->setPeriodicAdvertisingParameters(ILandroid/bluetooth/le/PeriodicAdvertisingParameters;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->setScanResponseData(ILandroid/bluetooth/le/AdvertiseData;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;IILandroid/bluetooth/le/IAdvertisingSetCallback;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->startScan(ILandroid/bluetooth/le/ScanSettings;Ljava/util/List;Ljava/util/List;Ljava/lang/String;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->startScanForIntent(Landroid/app/PendingIntent;Landroid/bluetooth/le/ScanSettings;Ljava/util/List;Ljava/lang/String;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->stopAdvertisingSet(Landroid/bluetooth/le/IAdvertisingSetCallback;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->stopScan(I)V
+HSPLandroid/bluetooth/IBluetoothGatt;->stopScanForIntent(Landroid/app/PendingIntent;Ljava/lang/String;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->unregAll()V
+HSPLandroid/bluetooth/IBluetoothGatt;->unregisterClient(I)V
+HSPLandroid/bluetooth/IBluetoothGatt;->unregisterScanner(I)V
+HSPLandroid/bluetooth/IBluetoothGatt;->unregisterServer(I)V
+HSPLandroid/bluetooth/IBluetoothGatt;->unregisterSync(Landroid/bluetooth/le/IPeriodicAdvertisingCallback;)V
+HSPLandroid/bluetooth/IBluetoothGatt;->writeCharacteristic(ILjava/lang/String;III[B)V
+HSPLandroid/bluetooth/IBluetoothGatt;->writeDescriptor(ILjava/lang/String;II[B)V
+HSPLandroid/bluetooth/IBluetoothHeadset$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/bluetooth/IBluetoothHeadset$Stub;-><init>()V
+HSPLandroid/bluetooth/IBluetoothHeadset$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothHeadset;
+HSPLandroid/bluetooth/IBluetoothHeadset$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->acceptIncomingConnect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->bindResponse(IZ)V
+HSPLandroid/bluetooth/IBluetoothHeadset;->clccResponse(IIIIZLjava/lang/String;I)V
+HSPLandroid/bluetooth/IBluetoothHeadset;->connect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->connectAudio()Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->disableWBS()Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->disconnect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->disconnectAudio()Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->enableWBS()Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->getAudioRouteAllowed()Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->getAudioState(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothHeadset;->getBatteryUsageHint(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothHeadset;->getConnectedDevices()Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothHeadset;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothHeadset;->getDevicesMatchingConnectionStates([I)Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothHeadset;->getPriority(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothHeadset;->isAudioConnected(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->isAudioOn()Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->phoneStateChanged(IIILjava/lang/String;I)V
+HSPLandroid/bluetooth/IBluetoothHeadset;->rejectIncomingConnect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->sendVendorSpecificResultCode(Landroid/bluetooth/BluetoothDevice;Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->setAudioRouteAllowed(Z)V
+HSPLandroid/bluetooth/IBluetoothHeadset;->setForceScoAudio(Z)V
+HSPLandroid/bluetooth/IBluetoothHeadset;->setPriority(Landroid/bluetooth/BluetoothDevice;I)Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->startScoUsingVirtualVoiceCall(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->startVoiceRecognition(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->stopScoUsingVirtualVoiceCall(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothHeadset;->stopVoiceRecognition(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothHeadsetPhone$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/bluetooth/IBluetoothHeadsetPhone$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothHeadsetPhone;
+HSPLandroid/bluetooth/IBluetoothHeadsetPhone;->answerCall()Z
+HSPLandroid/bluetooth/IBluetoothHeadsetPhone;->cdmaSetSecondCallState(Z)V
+HSPLandroid/bluetooth/IBluetoothHeadsetPhone;->cdmaSwapSecondCallState()V
+HSPLandroid/bluetooth/IBluetoothHeadsetPhone;->getNetworkOperator()Ljava/lang/String;
+HSPLandroid/bluetooth/IBluetoothHeadsetPhone;->getSubscriberNumber()Ljava/lang/String;
+HSPLandroid/bluetooth/IBluetoothHeadsetPhone;->hangupCall()Z
+HSPLandroid/bluetooth/IBluetoothHeadsetPhone;->listCurrentCalls()Z
+HSPLandroid/bluetooth/IBluetoothHeadsetPhone;->processChld(I)Z
+HSPLandroid/bluetooth/IBluetoothHeadsetPhone;->queryPhoneState()Z
+HSPLandroid/bluetooth/IBluetoothHeadsetPhone;->sendDtmf(I)Z
+HSPLandroid/bluetooth/IBluetoothHeadsetPhone;->updateBtHandsfreeAfterRadioTechnologyChange()V
+HSPLandroid/bluetooth/IBluetoothHealth$Stub;-><init>()V
+HSPLandroid/bluetooth/IBluetoothHealth;->connectChannelToSink(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;I)Z
+HSPLandroid/bluetooth/IBluetoothHealth;->connectChannelToSource(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z
+HSPLandroid/bluetooth/IBluetoothHealth;->disconnectChannel(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;I)Z
+HSPLandroid/bluetooth/IBluetoothHealth;->getConnectedHealthDevices()Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothHealth;->getHealthDeviceConnectionState(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothHealth;->getHealthDevicesMatchingConnectionStates([I)Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothHealth;->getMainChannelFd(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/bluetooth/IBluetoothHealth;->registerAppConfiguration(Landroid/bluetooth/BluetoothHealthAppConfiguration;Landroid/bluetooth/IBluetoothHealthCallback;)Z
+HSPLandroid/bluetooth/IBluetoothHealth;->unregisterAppConfiguration(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z
+HSPLandroid/bluetooth/IBluetoothInputDevice$Stub;-><init>()V
+HSPLandroid/bluetooth/IBluetoothInputDevice;->connect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothInputDevice;->disconnect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothInputDevice;->getConnectedDevices()Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothInputDevice;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothInputDevice;->getDevicesMatchingConnectionStates([I)Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothInputDevice;->getIdleTime(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothInputDevice;->getPriority(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothInputDevice;->getProtocolMode(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothInputDevice;->getReport(Landroid/bluetooth/BluetoothDevice;BBI)Z
+HSPLandroid/bluetooth/IBluetoothInputDevice;->sendData(Landroid/bluetooth/BluetoothDevice;Ljava/lang/String;)Z
+HSPLandroid/bluetooth/IBluetoothInputDevice;->setIdleTime(Landroid/bluetooth/BluetoothDevice;B)Z
+HSPLandroid/bluetooth/IBluetoothInputDevice;->setPriority(Landroid/bluetooth/BluetoothDevice;I)Z
+HSPLandroid/bluetooth/IBluetoothInputDevice;->setProtocolMode(Landroid/bluetooth/BluetoothDevice;I)Z
+HSPLandroid/bluetooth/IBluetoothInputDevice;->setReport(Landroid/bluetooth/BluetoothDevice;BLjava/lang/String;)Z
+HSPLandroid/bluetooth/IBluetoothInputDevice;->virtualUnplug(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->bindBluetoothProfileService(ILandroid/bluetooth/IBluetoothProfileServiceConnection;)Z
+HSPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->getAddress()Ljava/lang/String;
+HSPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->registerAdapter(Landroid/bluetooth/IBluetoothManagerCallback;)Landroid/bluetooth/IBluetooth;
+HSPLandroid/bluetooth/IBluetoothManager$Stub$Proxy;->registerStateChangeCallback(Landroid/bluetooth/IBluetoothStateChangeCallback;)V
+HSPLandroid/bluetooth/IBluetoothManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothManager;
+HSPLandroid/bluetooth/IBluetoothManager;->bindBluetoothProfileService(ILandroid/bluetooth/IBluetoothProfileServiceConnection;)Z
+HSPLandroid/bluetooth/IBluetoothManager;->disable(Ljava/lang/String;Z)Z
+HSPLandroid/bluetooth/IBluetoothManager;->enable(Ljava/lang/String;)Z
+HSPLandroid/bluetooth/IBluetoothManager;->enableNoAutoConnect(Ljava/lang/String;)Z
+HSPLandroid/bluetooth/IBluetoothManager;->getAddress()Ljava/lang/String;
+HSPLandroid/bluetooth/IBluetoothManager;->getBluetoothGatt()Landroid/bluetooth/IBluetoothGatt;
+HSPLandroid/bluetooth/IBluetoothManager;->getName()Ljava/lang/String;
+HSPLandroid/bluetooth/IBluetoothManager;->getState()I
+HSPLandroid/bluetooth/IBluetoothManager;->isBleAppPresent()Z
+HSPLandroid/bluetooth/IBluetoothManager;->isBleScanAlwaysAvailable()Z
+HSPLandroid/bluetooth/IBluetoothManager;->isEnabled()Z
+HSPLandroid/bluetooth/IBluetoothManager;->registerAdapter(Landroid/bluetooth/IBluetoothManagerCallback;)Landroid/bluetooth/IBluetooth;
+HSPLandroid/bluetooth/IBluetoothManager;->registerStateChangeCallback(Landroid/bluetooth/IBluetoothStateChangeCallback;)V
+HSPLandroid/bluetooth/IBluetoothManager;->unbindBluetoothProfileService(ILandroid/bluetooth/IBluetoothProfileServiceConnection;)V
+HSPLandroid/bluetooth/IBluetoothManager;->unregisterAdapter(Landroid/bluetooth/IBluetoothManagerCallback;)V
+HSPLandroid/bluetooth/IBluetoothManager;->unregisterStateChangeCallback(Landroid/bluetooth/IBluetoothStateChangeCallback;)V
+HSPLandroid/bluetooth/IBluetoothManager;->updateBleAppCount(Landroid/os/IBinder;ZLjava/lang/String;)I
+HSPLandroid/bluetooth/IBluetoothManagerCallback$Stub;-><init>()V
+HSPLandroid/bluetooth/IBluetoothManagerCallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/bluetooth/IBluetoothManagerCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/bluetooth/IBluetoothManagerCallback;->onBluetoothServiceDown()V
+HSPLandroid/bluetooth/IBluetoothManagerCallback;->onBluetoothServiceUp(Landroid/bluetooth/IBluetooth;)V
+HSPLandroid/bluetooth/IBluetoothManagerCallback;->onBrEdrDown()V
+HSPLandroid/bluetooth/IBluetoothMap$Stub;-><init>()V
+HSPLandroid/bluetooth/IBluetoothMap;->connect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothMap;->disconnect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothMap;->getClient()Landroid/bluetooth/BluetoothDevice;
+HSPLandroid/bluetooth/IBluetoothMap;->getConnectedDevices()Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothMap;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothMap;->getDevicesMatchingConnectionStates([I)Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothMap;->getPriority(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothMap;->getState()I
+HSPLandroid/bluetooth/IBluetoothMap;->isConnected(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothMap;->setPriority(Landroid/bluetooth/BluetoothDevice;I)Z
+HSPLandroid/bluetooth/IBluetoothPan$Stub;-><init>()V
+HSPLandroid/bluetooth/IBluetoothPan;->connect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothPan;->disconnect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothPan;->getConnectedDevices()Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothPan;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothPan;->getDevicesMatchingConnectionStates([I)Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothPan;->isTetheringOn()Z
+HSPLandroid/bluetooth/IBluetoothPan;->setBluetoothTethering(Z)V
+HSPLandroid/bluetooth/IBluetoothPbap$Stub;-><init>()V
+HSPLandroid/bluetooth/IBluetoothPbap;->connect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothPbap;->disconnect()V
+HSPLandroid/bluetooth/IBluetoothPbap;->getClient()Landroid/bluetooth/BluetoothDevice;
+HSPLandroid/bluetooth/IBluetoothPbap;->getState()I
+HSPLandroid/bluetooth/IBluetoothPbap;->isConnected(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub;-><init>()V
+HSPLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/bluetooth/IBluetoothProfileServiceConnection$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/bluetooth/IBluetoothProfileServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HSPLandroid/bluetooth/IBluetoothProfileServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
+HSPLandroid/bluetooth/IBluetoothSap$Stub;-><init>()V
+HSPLandroid/bluetooth/IBluetoothSap;->connect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothSap;->disconnect(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothSap;->getClient()Landroid/bluetooth/BluetoothDevice;
+HSPLandroid/bluetooth/IBluetoothSap;->getConnectedDevices()Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothSap;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothSap;->getDevicesMatchingConnectionStates([I)Ljava/util/List;
+HSPLandroid/bluetooth/IBluetoothSap;->getPriority(Landroid/bluetooth/BluetoothDevice;)I
+HSPLandroid/bluetooth/IBluetoothSap;->getState()I
+HSPLandroid/bluetooth/IBluetoothSap;->isConnected(Landroid/bluetooth/BluetoothDevice;)Z
+HSPLandroid/bluetooth/IBluetoothSap;->setPriority(Landroid/bluetooth/BluetoothDevice;I)Z
+HSPLandroid/bluetooth/IBluetoothStateChangeCallback$Stub;-><init>()V
+HSPLandroid/bluetooth/IBluetoothStateChangeCallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/bluetooth/IBluetoothStateChangeCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/bluetooth/IBluetoothStateChangeCallback;->onBluetoothStateChange(Z)V
+HSPLandroid/bluetooth/UidTraffic$1;-><init>()V
+HSPLandroid/content/AbstractThreadedSyncAdapter$ISyncAdapterImpl;-><init>(Landroid/content/AbstractThreadedSyncAdapter;)V
+HSPLandroid/content/AbstractThreadedSyncAdapter$ISyncAdapterImpl;-><init>(Landroid/content/AbstractThreadedSyncAdapter;Landroid/content/AbstractThreadedSyncAdapter$ISyncAdapterImpl;)V
+HSPLandroid/content/AbstractThreadedSyncAdapter$ISyncAdapterImpl;->startSync(Landroid/content/ISyncContext;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;)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$SyncThread;)V
+HSPLandroid/content/AbstractThreadedSyncAdapter$SyncThread;->isCanceled()Z
+HSPLandroid/content/AbstractThreadedSyncAdapter$SyncThread;->run()V
+HSPLandroid/content/AbstractThreadedSyncAdapter;->-get0()Z
+HSPLandroid/content/AbstractThreadedSyncAdapter;->-get2(Landroid/content/AbstractThreadedSyncAdapter;)Z
+HSPLandroid/content/AbstractThreadedSyncAdapter;->-get3(Landroid/content/AbstractThreadedSyncAdapter;)Landroid/content/Context;
+HSPLandroid/content/AbstractThreadedSyncAdapter;->-get4(Landroid/content/AbstractThreadedSyncAdapter;)Ljava/util/concurrent/atomic/AtomicInteger;
+HSPLandroid/content/AbstractThreadedSyncAdapter;->-get5(Landroid/content/AbstractThreadedSyncAdapter;)Ljava/lang/Object;
+HSPLandroid/content/AbstractThreadedSyncAdapter;->-get6(Landroid/content/AbstractThreadedSyncAdapter;)Ljava/util/HashMap;
+HSPLandroid/content/AbstractThreadedSyncAdapter;->-wrap0(Landroid/content/AbstractThreadedSyncAdapter;Landroid/accounts/Account;)Landroid/accounts/Account;
+HSPLandroid/content/AbstractThreadedSyncAdapter;-><init>(Landroid/content/Context;Z)V
+HSPLandroid/content/AbstractThreadedSyncAdapter;-><init>(Landroid/content/Context;ZZ)V
+HSPLandroid/content/AbstractThreadedSyncAdapter;->getSyncAdapterBinder()Landroid/os/IBinder;
+HSPLandroid/content/AbstractThreadedSyncAdapter;->onPerformSync(Landroid/accounts/Account;Landroid/os/Bundle;Ljava/lang/String;Landroid/content/ContentProviderClient;Landroid/content/SyncResult;)V
+HSPLandroid/content/AbstractThreadedSyncAdapter;->toSyncKey(Landroid/accounts/Account;)Landroid/accounts/Account;
+HSPLandroid/content/ActivityNotFoundException;-><init>(Ljava/lang/String;)V
+HSPLandroid/content/AsyncQueryHandler$WorkerArgs;-><init>()V
+HSPLandroid/content/AsyncQueryHandler$WorkerHandler;-><init>(Landroid/content/AsyncQueryHandler;Landroid/os/Looper;)V
+HSPLandroid/content/AsyncQueryHandler$WorkerHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/content/AsyncQueryHandler;-><init>(Landroid/content/ContentResolver;)V
+HSPLandroid/content/AsyncQueryHandler;->cancelOperation(I)V
+HSPLandroid/content/AsyncQueryHandler;->createHandler(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLandroid/content/AsyncQueryHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/content/AsyncQueryHandler;->onQueryComplete(ILjava/lang/Object;Landroid/database/Cursor;)V
+HSPLandroid/content/AsyncQueryHandler;->startQuery(ILjava/lang/Object;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/AsyncTaskLoader$LoadTask;-><init>(Landroid/content/AsyncTaskLoader;)V
+HSPLandroid/content/AsyncTaskLoader$LoadTask;->doInBackground([Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/content/AsyncTaskLoader$LoadTask;->doInBackground([Ljava/lang/Void;)Ljava/lang/Object;
+HSPLandroid/content/AsyncTaskLoader$LoadTask;->onCancelled(Ljava/lang/Object;)V
+HSPLandroid/content/AsyncTaskLoader$LoadTask;->onPostExecute(Ljava/lang/Object;)V
+HSPLandroid/content/AsyncTaskLoader;-><init>(Landroid/content/Context;)V
+HSPLandroid/content/AsyncTaskLoader;-><init>(Landroid/content/Context;Ljava/util/concurrent/Executor;)V
+HSPLandroid/content/AsyncTaskLoader;->cancelLoadInBackground()V
+HSPLandroid/content/AsyncTaskLoader;->dispatchOnCancelled(Landroid/content/AsyncTaskLoader$LoadTask;Ljava/lang/Object;)V
+HSPLandroid/content/AsyncTaskLoader;->dispatchOnLoadComplete(Landroid/content/AsyncTaskLoader$LoadTask;Ljava/lang/Object;)V
+HSPLandroid/content/AsyncTaskLoader;->executePendingTask()V
+HSPLandroid/content/AsyncTaskLoader;->isLoadInBackgroundCanceled()Z
+HSPLandroid/content/AsyncTaskLoader;->loadInBackground()Ljava/lang/Object;
+HSPLandroid/content/AsyncTaskLoader;->onCancelLoad()Z
+HSPLandroid/content/AsyncTaskLoader;->onForceLoad()V
+HSPLandroid/content/AsyncTaskLoader;->onLoadInBackground()Ljava/lang/Object;
+HSPLandroid/content/AsyncTaskLoader;->setUpdateThrottle(J)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;->finish()V
+HSPLandroid/content/BroadcastReceiver$PendingResult;->sendFinished(Landroid/app/IActivityManager;)V
+HSPLandroid/content/BroadcastReceiver$PendingResult;->setExtrasClassLoader(Ljava/lang/ClassLoader;)V
+HSPLandroid/content/BroadcastReceiver;-><init>()V
+HSPLandroid/content/BroadcastReceiver;->getDebugUnregister()Z
+HSPLandroid/content/BroadcastReceiver;->getPendingResult()Landroid/content/BroadcastReceiver$PendingResult;
+HSPLandroid/content/BroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLandroid/content/BroadcastReceiver;->setPendingResult(Landroid/content/BroadcastReceiver$PendingResult;)V
+HSPLandroid/content/ClipboardManager$1;-><init>(Landroid/content/ClipboardManager;)V
+HSPLandroid/content/ClipboardManager$2;-><init>(Landroid/content/ClipboardManager;)V
+HSPLandroid/content/ClipboardManager$OnPrimaryClipChangedListener;->onPrimaryClipChanged()V
+HSPLandroid/content/ClipboardManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
+HSPLandroid/content/ClipboardManager;->addPrimaryClipChangedListener(Landroid/content/ClipboardManager$OnPrimaryClipChangedListener;)V
+HSPLandroid/content/ComponentName$1;-><init>()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;-><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
+HSPLandroid/content/ComponentName;->appendShortString(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/ComponentName;->createRelative(Ljava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;
+HSPLandroid/content/ComponentName;->equals(Ljava/lang/Object;)Z
+HSPLandroid/content/ComponentName;->flattenToShortString()Ljava/lang/String;
+HSPLandroid/content/ComponentName;->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
+HSPLandroid/content/ComponentName;->readFromParcel(Landroid/os/Parcel;)Landroid/content/ComponentName;
+HSPLandroid/content/ComponentName;->toShortString()Ljava/lang/String;
+HSPLandroid/content/ComponentName;->toString()Ljava/lang/String;
+HSPLandroid/content/ComponentName;->unflattenFromString(Ljava/lang/String;)Landroid/content/ComponentName;
+HSPLandroid/content/ComponentName;->writeToParcel(Landroid/content/ComponentName;Landroid/os/Parcel;)V
+HSPLandroid/content/ComponentName;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/ContentProvider$PipeDataWriter;->writeDataToPipe(Landroid/os/ParcelFileDescriptor;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/Object;)V
+HSPLandroid/content/ContentProvider$Transport;-><init>(Landroid/content/ContentProvider;)V
+HSPLandroid/content/ContentProvider$Transport;->applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;
+HSPLandroid/content/ContentProvider$Transport;->call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
+HSPLandroid/content/ContentProvider$Transport;->createCancellationSignal()Landroid/os/ICancellationSignal;
+HSPLandroid/content/ContentProvider$Transport;->delete(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I
+HSPLandroid/content/ContentProvider$Transport;->enforceReadPermission(Ljava/lang/String;Landroid/net/Uri;Landroid/os/IBinder;)I
+HSPLandroid/content/ContentProvider$Transport;->enforceWritePermission(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;Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
+HSPLandroid/content/ContentProvider$Transport;->query(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;Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I
+HSPLandroid/content/ContentProvider;->-wrap0(Landroid/content/ContentProvider;Landroid/net/Uri;)Landroid/net/Uri;
+HSPLandroid/content/ContentProvider;->-wrap1(Landroid/content/ContentProvider;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/content/ContentProvider;->-wrap2(Landroid/content/ContentProvider;Landroid/net/Uri;)V
+HSPLandroid/content/ContentProvider;-><init>()V
+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;->checkPermissionAndAppOp(Ljava/lang/String;Ljava/lang/String;Landroid/os/IBinder;)I
+HSPLandroid/content/ContentProvider;->checkUser(IILandroid/content/Context;)Z
+HSPLandroid/content/ContentProvider;->coerceToLocalContentProvider(Landroid/content/IContentProvider;)Landroid/content/ContentProvider;
+HSPLandroid/content/ContentProvider;->delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I
+HSPLandroid/content/ContentProvider;->enforceReadPermissionInner(Landroid/net/Uri;Ljava/lang/String;Landroid/os/IBinder;)I
+HSPLandroid/content/ContentProvider;->enforceWritePermissionInner(Landroid/net/Uri;Ljava/lang/String;Landroid/os/IBinder;)I
+HSPLandroid/content/ContentProvider;->getAuthorityWithoutUserId(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/content/ContentProvider;->getCallingPackage()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;
+HSPLandroid/content/ContentProvider;->getReadPermission()Ljava/lang/String;
+HSPLandroid/content/ContentProvider;->getType(Landroid/net/Uri;)Ljava/lang/String;
+HSPLandroid/content/ContentProvider;->getUriWithoutUserId(Landroid/net/Uri;)Landroid/net/Uri;
+HSPLandroid/content/ContentProvider;->getUserIdFromAuthority(Ljava/lang/String;I)I
+HSPLandroid/content/ContentProvider;->getUserIdFromUri(Landroid/net/Uri;)I
+HSPLandroid/content/ContentProvider;->getUserIdFromUri(Landroid/net/Uri;I)I
+HSPLandroid/content/ContentProvider;->insert(Landroid/net/Uri;Landroid/content/ContentValues;)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;->onCreate()Z
+HSPLandroid/content/ContentProvider;->onTrimMemory(I)V
+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/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;->setAppOps(II)V
+HSPLandroid/content/ContentProvider;->setAuthorities(Ljava/lang/String;)V
+HSPLandroid/content/ContentProvider;->setCallingPackage(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/content/ContentProvider;->setPathPermissions([Landroid/content/pm/PathPermission;)V
+HSPLandroid/content/ContentProvider;->setReadPermission(Ljava/lang/String;)V
+HSPLandroid/content/ContentProvider;->setWritePermission(Ljava/lang/String;)V
+HSPLandroid/content/ContentProvider;->update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I
+HSPLandroid/content/ContentProvider;->uriHasUserId(Landroid/net/Uri;)Z
+HSPLandroid/content/ContentProvider;->validateIncomingUri(Landroid/net/Uri;)V
+HSPLandroid/content/ContentProviderClient;-><init>(Landroid/content/ContentResolver;Landroid/content/IContentProvider;Z)V
+HSPLandroid/content/ContentProviderClient;->afterRemote()V
+HSPLandroid/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;->close()V
+HSPLandroid/content/ContentProviderClient;->closeInternal()Z
+HSPLandroid/content/ContentProviderClient;->finalize()V
+HSPLandroid/content/ContentProviderClient;->getLocalContentProvider()Landroid/content/ContentProvider;
+HSPLandroid/content/ContentProviderClient;->release()Z
+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;->getProviderName()Ljava/lang/String;
+HSPLandroid/content/ContentProviderNative;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/content/ContentProviderOperation$1;-><init>()V
+HSPLandroid/content/ContentProviderOperation$Builder;->-get0(Landroid/content/ContentProviderOperation$Builder;)Ljava/lang/Integer;
+HSPLandroid/content/ContentProviderOperation$Builder;->-get1(Landroid/content/ContentProviderOperation$Builder;)Ljava/lang/String;
+HSPLandroid/content/ContentProviderOperation$Builder;->-get2(Landroid/content/ContentProviderOperation$Builder;)[Ljava/lang/String;
+HSPLandroid/content/ContentProviderOperation$Builder;->-get3(Landroid/content/ContentProviderOperation$Builder;)Ljava/util/Map;
+HSPLandroid/content/ContentProviderOperation$Builder;->-get4(Landroid/content/ContentProviderOperation$Builder;)I
+HSPLandroid/content/ContentProviderOperation$Builder;->-get5(Landroid/content/ContentProviderOperation$Builder;)Landroid/net/Uri;
+HSPLandroid/content/ContentProviderOperation$Builder;->-get6(Landroid/content/ContentProviderOperation$Builder;)Landroid/content/ContentValues;
+HSPLandroid/content/ContentProviderOperation$Builder;->-get7(Landroid/content/ContentProviderOperation$Builder;)Landroid/content/ContentValues;
+HSPLandroid/content/ContentProviderOperation$Builder;->-get8(Landroid/content/ContentProviderOperation$Builder;)Z
+HSPLandroid/content/ContentProviderOperation$Builder;-><init>(ILandroid/net/Uri;)V
+HSPLandroid/content/ContentProviderOperation$Builder;-><init>(ILandroid/net/Uri;Landroid/content/ContentProviderOperation$Builder;)V
+HSPLandroid/content/ContentProviderOperation$Builder;->build()Landroid/content/ContentProviderOperation;
+HSPLandroid/content/ContentProviderOperation$Builder;->withValues(Landroid/content/ContentValues;)Landroid/content/ContentProviderOperation$Builder;
+HSPLandroid/content/ContentProviderOperation;-><init>(Landroid/content/ContentProviderOperation$Builder;)V
+HSPLandroid/content/ContentProviderOperation;-><init>(Landroid/content/ContentProviderOperation$Builder;Landroid/content/ContentProviderOperation;)V
+HSPLandroid/content/ContentProviderOperation;->apply(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;->newDelete(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;
+HSPLandroid/content/ContentProviderOperation;->newInsert(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;
+HSPLandroid/content/ContentProviderOperation;->resolveSelectionArgsBackReferences([Landroid/content/ContentProviderResult;I)[Ljava/lang/String;
+HSPLandroid/content/ContentProviderOperation;->resolveValueBackReferences([Landroid/content/ContentProviderResult;I)Landroid/content/ContentValues;
+HSPLandroid/content/ContentProviderProxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/content/ContentProviderProxy;->asBinder()Landroid/os/IBinder;
+HSPLandroid/content/ContentProviderProxy;->call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
+HSPLandroid/content/ContentProviderProxy;->createCancellationSignal()Landroid/os/ICancellationSignal;
+HSPLandroid/content/ContentProviderProxy;->openTypedAssetFile(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;Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/database/Cursor;
+HSPLandroid/content/ContentProviderResult$1;-><init>()V
+HSPLandroid/content/ContentProviderResult;-><init>(I)V
+HSPLandroid/content/ContentProviderResult;-><init>(Landroid/net/Uri;)V
+HSPLandroid/content/ContentQueryMap;-><init>(Landroid/database/Cursor;Ljava/lang/String;ZLandroid/os/Handler;)V
+HSPLandroid/content/ContentQueryMap;->getRows()Ljava/util/Map;
+HSPLandroid/content/ContentQueryMap;->readCursorIntoCache(Landroid/database/Cursor;)V
+HSPLandroid/content/ContentQueryMap;->requery()V
+HSPLandroid/content/ContentQueryMap;->setKeepUpdated(Z)V
+HSPLandroid/content/ContentResolver$1;-><init>(Landroid/content/SyncStatusObserver;)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$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;->acquireContentProviderClient(Landroid/net/Uri;)Landroid/content/ContentProviderClient;
+HSPLandroid/content/ContentResolver;->acquireContentProviderClient(Ljava/lang/String;)Landroid/content/ContentProviderClient;
+HSPLandroid/content/ContentResolver;->acquireExistingProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;
+HSPLandroid/content/ContentResolver;->acquireProvider(Landroid/content/Context;Ljava/lang/String;)Landroid/content/IContentProvider;
+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;
+HSPLandroid/content/ContentResolver;->acquireUnstableProvider(Landroid/content/Context;Ljava/lang/String;)Landroid/content/IContentProvider;
+HSPLandroid/content/ContentResolver;->acquireUnstableProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;
+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;->call(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)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;Ljava/lang/String;[Ljava/lang/String;)I
+HSPLandroid/content/ContentResolver;->getContentService()Landroid/content/IContentService;
+HSPLandroid/content/ContentResolver;->getIsSyncable(Landroid/accounts/Account;Ljava/lang/String;)I
+HSPLandroid/content/ContentResolver;->getMasterSyncAutomatically()Z
+HSPLandroid/content/ContentResolver;->getPackageName()Ljava/lang/String;
+HSPLandroid/content/ContentResolver;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType;
+HSPLandroid/content/ContentResolver;->getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z
+HSPLandroid/content/ContentResolver;->getType(Landroid/net/Uri;)Ljava/lang/String;
+HSPLandroid/content/ContentResolver;->insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
+HSPLandroid/content/ContentResolver;->isSyncActive(Landroid/accounts/Account;Ljava/lang/String;)Z
+HSPLandroid/content/ContentResolver;->isSyncPending(Landroid/accounts/Account;Ljava/lang/String;)Z
+HSPLandroid/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;Z)V
+HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;ZI)V
+HSPLandroid/content/ContentResolver;->openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;
+HSPLandroid/content/ContentResolver;->openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;
+HSPLandroid/content/ContentResolver;->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;->releaseProvider(Landroid/content/IContentProvider;)Z
+HSPLandroid/content/ContentResolver;->releaseUnstableProvider(Landroid/content/IContentProvider;)Z
+HSPLandroid/content/ContentResolver;->requestSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)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;->setSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;Z)V
+HSPLandroid/content/ContentResolver;->setSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;ZI)V
+HSPLandroid/content/ContentResolver;->unregisterContentObserver(Landroid/database/ContentObserver;)V
+HSPLandroid/content/ContentResolver;->unstableProviderDied(Landroid/content/IContentProvider;)V
+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/ContentUris;->appendId(Landroid/net/Uri$Builder;J)Landroid/net/Uri$Builder;
+HSPLandroid/content/ContentUris;->withAppendedId(Landroid/net/Uri;J)Landroid/net/Uri;
+HSPLandroid/content/ContentValues$1;-><init>()V
+HSPLandroid/content/ContentValues;-><init>()V
+HSPLandroid/content/ContentValues;-><init>(I)V
+HSPLandroid/content/ContentValues;->clear()V
+HSPLandroid/content/ContentValues;->containsKey(Ljava/lang/String;)Z
+HSPLandroid/content/ContentValues;->get(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/content/ContentValues;->getAsBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
+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;->isEmpty()Z
+HSPLandroid/content/ContentValues;->keySet()Ljava/util/Set;
+HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Boolean;)V
+HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/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;->size()I
+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;
+HSPLandroid/content/Context;->getNextAutofillId()I
+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;
+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
+HSPLandroid/content/ContextWrapper;-><init>(Landroid/content/Context;)V
+HSPLandroid/content/ContextWrapper;->attachBaseContext(Landroid/content/Context;)V
+HSPLandroid/content/ContextWrapper;->bindService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z
+HSPLandroid/content/ContextWrapper;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z
+HSPLandroid/content/ContextWrapper;->canLoadUnsafeResources()Z
+HSPLandroid/content/ContextWrapper;->checkCallingOrSelfPermission(Ljava/lang/String;)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;->createApplicationContext(Landroid/content/pm/ApplicationInfo;I)Landroid/content/Context;
+HSPLandroid/content/ContextWrapper;->createConfigurationContext(Landroid/content/res/Configuration;)Landroid/content/Context;
+HSPLandroid/content/ContextWrapper;->createDeviceProtectedStorageContext()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
+HSPLandroid/content/ContextWrapper;->enforceCallingOrSelfPermission(Ljava/lang/String;Ljava/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;
+HSPLandroid/content/ContextWrapper;->getBaseContext()Landroid/content/Context;
+HSPLandroid/content/ContextWrapper;->getBasePackageName()Ljava/lang/String;
+HSPLandroid/content/ContextWrapper;->getCacheDir()Ljava/io/File;
+HSPLandroid/content/ContextWrapper;->getClassLoader()Ljava/lang/ClassLoader;
+HSPLandroid/content/ContextWrapper;->getContentResolver()Landroid/content/ContentResolver;
+HSPLandroid/content/ContextWrapper;->getDatabasePath(Ljava/lang/String;)Ljava/io/File;
+HSPLandroid/content/ContextWrapper;->getDir(Ljava/lang/String;I)Ljava/io/File;
+HSPLandroid/content/ContextWrapper;->getDisplay()Landroid/view/Display;
+HSPLandroid/content/ContextWrapper;->getExternalCacheDir()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;->getFileStreamPath(Ljava/lang/String;)Ljava/io/File;
+HSPLandroid/content/ContextWrapper;->getFilesDir()Ljava/io/File;
+HSPLandroid/content/ContextWrapper;->getMainLooper()Landroid/os/Looper;
+HSPLandroid/content/ContextWrapper;->getNextAutofillId()I
+HSPLandroid/content/ContextWrapper;->getNoBackupFilesDir()Ljava/io/File;
+HSPLandroid/content/ContextWrapper;->getOpPackageName()Ljava/lang/String;
+HSPLandroid/content/ContextWrapper;->getPackageManager()Landroid/content/pm/PackageManager;
+HSPLandroid/content/ContextWrapper;->getPackageName()Ljava/lang/String;
+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;
+HSPLandroid/content/ContextWrapper;->getThemeResId()I
+HSPLandroid/content/ContextWrapper;->getUserId()I
+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;
+HSPLandroid/content/ContextWrapper;->openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;)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;->sendBroadcast(Landroid/content/Intent;)V
+HSPLandroid/content/ContextWrapper;->sendBroadcast(Landroid/content/Intent;Ljava/lang/String;)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;->sendStickyBroadcast(Landroid/content/Intent;)V
+HSPLandroid/content/ContextWrapper;->sendStickyBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
+HSPLandroid/content/ContextWrapper;->setTheme(I)V
+HSPLandroid/content/ContextWrapper;->startActivity(Landroid/content/Intent;)V
+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
+HSPLandroid/content/CursorLoader;-><init>(Landroid/content/Context;)V
+HSPLandroid/content/CursorLoader;-><init>(Landroid/content/Context;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/CursorLoader;->cancelLoadInBackground()V
+HSPLandroid/content/CursorLoader;->deliverResult(Landroid/database/Cursor;)V
+HSPLandroid/content/CursorLoader;->deliverResult(Ljava/lang/Object;)V
+HSPLandroid/content/CursorLoader;->getSortOrder()Ljava/lang/String;
+HSPLandroid/content/CursorLoader;->getUri()Landroid/net/Uri;
+HSPLandroid/content/CursorLoader;->loadInBackground()Landroid/database/Cursor;
+HSPLandroid/content/CursorLoader;->loadInBackground()Ljava/lang/Object;
+HSPLandroid/content/CursorLoader;->onCanceled(Landroid/database/Cursor;)V
+HSPLandroid/content/CursorLoader;->onCanceled(Ljava/lang/Object;)V
+HSPLandroid/content/CursorLoader;->onReset()V
+HSPLandroid/content/CursorLoader;->onStartLoading()V
+HSPLandroid/content/CursorLoader;->onStopLoading()V
+HSPLandroid/content/CursorLoader;->setProjection([Ljava/lang/String;)V
+HSPLandroid/content/CursorLoader;->setSortOrder(Ljava/lang/String;)V
+HSPLandroid/content/CursorLoader;->setUri(Landroid/net/Uri;)V
+HSPLandroid/content/DialogInterface$OnCancelListener;->onCancel(Landroid/content/DialogInterface;)V
+HSPLandroid/content/DialogInterface$OnClickListener;->onClick(Landroid/content/DialogInterface;I)V
+HSPLandroid/content/DialogInterface$OnDismissListener;->onDismiss(Landroid/content/DialogInterface;)V
+HSPLandroid/content/DialogInterface$OnShowListener;->onShow(Landroid/content/DialogInterface;)V
+HSPLandroid/content/DialogInterface;->cancel()V
+HSPLandroid/content/DialogInterface;->dismiss()V
+HSPLandroid/content/IClipboard$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/content/IClipboard$Stub$Proxy;->addPrimaryClipChangedListener(Landroid/content/IOnPrimaryClipChangedListener;Ljava/lang/String;)V
+HSPLandroid/content/IClipboard$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IClipboard;
+HSPLandroid/content/IClipboard;->addPrimaryClipChangedListener(Landroid/content/IOnPrimaryClipChangedListener;Ljava/lang/String;)V
+HSPLandroid/content/IClipboard;->getPrimaryClip(Ljava/lang/String;)Landroid/content/ClipData;
+HSPLandroid/content/IClipboard;->getPrimaryClipDescription(Ljava/lang/String;)Landroid/content/ClipDescription;
+HSPLandroid/content/IClipboard;->hasClipboardText(Ljava/lang/String;)Z
+HSPLandroid/content/IClipboard;->hasPrimaryClip(Ljava/lang/String;)Z
+HSPLandroid/content/IClipboard;->removePrimaryClipChangedListener(Landroid/content/IOnPrimaryClipChangedListener;)V
+HSPLandroid/content/IClipboard;->setPrimaryClip(Landroid/content/ClipData;Ljava/lang/String;)V
+HSPLandroid/content/IContentProvider;->applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;
+HSPLandroid/content/IContentProvider;->bulkInsert(Ljava/lang/String;Landroid/net/Uri;[Landroid/content/ContentValues;)I
+HSPLandroid/content/IContentProvider;->call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
+HSPLandroid/content/IContentProvider;->canonicalize(Ljava/lang/String;Landroid/net/Uri;)Landroid/net/Uri;
+HSPLandroid/content/IContentProvider;->createCancellationSignal()Landroid/os/ICancellationSignal;
+HSPLandroid/content/IContentProvider;->delete(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I
+HSPLandroid/content/IContentProvider;->getStreamTypes(Landroid/net/Uri;Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/content/IContentProvider;->getType(Landroid/net/Uri;)Ljava/lang/String;
+HSPLandroid/content/IContentProvider;->insert(Ljava/lang/String;Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
+HSPLandroid/content/IContentProvider;->openAssetFile(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/ICancellationSignal;)Landroid/content/res/AssetFileDescriptor;
+HSPLandroid/content/IContentProvider;->openFile(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/ICancellationSignal;Landroid/os/IBinder;)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/content/IContentProvider;->openTypedAssetFile(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/content/res/AssetFileDescriptor;
+HSPLandroid/content/IContentProvider;->query(Ljava/lang/String;Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/database/Cursor;
+HSPLandroid/content/IContentProvider;->refresh(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Z
+HSPLandroid/content/IContentProvider;->uncanonicalize(Ljava/lang/String;Landroid/net/Uri;)Landroid/net/Uri;
+HSPLandroid/content/IContentProvider;->update(Ljava/lang/String;Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I
+HSPLandroid/content/IContentService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/content/IContentService$Stub$Proxy;->addStatusChangeListener(ILandroid/content/ISyncStatusObserver;)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;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType;
+HSPLandroid/content/IContentService$Stub$Proxy;->getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z
+HSPLandroid/content/IContentService$Stub$Proxy;->isSyncActive(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Z
+HSPLandroid/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;ZIII)V
+HSPLandroid/content/IContentService$Stub$Proxy;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/IContentObserver;II)V
+HSPLandroid/content/IContentService$Stub$Proxy;->setSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;ZI)V
+HSPLandroid/content/IContentService$Stub$Proxy;->syncAsUser(Landroid/content/SyncRequest;I)V
+HSPLandroid/content/IContentService$Stub$Proxy;->unregisterContentObserver(Landroid/database/IContentObserver;)V
+HSPLandroid/content/IContentService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IContentService;
+HSPLandroid/content/IContentService;->addPeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V
+HSPLandroid/content/IContentService;->addStatusChangeListener(ILandroid/content/ISyncStatusObserver;)V
+HSPLandroid/content/IContentService;->cancelRequest(Landroid/content/SyncRequest;)V
+HSPLandroid/content/IContentService;->cancelSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)V
+HSPLandroid/content/IContentService;->cancelSyncAsUser(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;I)V
+HSPLandroid/content/IContentService;->getCache(Ljava/lang/String;Landroid/net/Uri;I)Landroid/os/Bundle;
+HSPLandroid/content/IContentService;->getCurrentSyncs()Ljava/util/List;
+HSPLandroid/content/IContentService;->getCurrentSyncsAsUser(I)Ljava/util/List;
+HSPLandroid/content/IContentService;->getIsSyncable(Landroid/accounts/Account;Ljava/lang/String;)I
+HSPLandroid/content/IContentService;->getIsSyncableAsUser(Landroid/accounts/Account;Ljava/lang/String;I)I
+HSPLandroid/content/IContentService;->getMasterSyncAutomatically()Z
+HSPLandroid/content/IContentService;->getMasterSyncAutomaticallyAsUser(I)Z
+HSPLandroid/content/IContentService;->getPeriodicSyncs(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Ljava/util/List;
+HSPLandroid/content/IContentService;->getSyncAdapterPackagesForAuthorityAsUser(Ljava/lang/String;I)[Ljava/lang/String;
+HSPLandroid/content/IContentService;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType;
+HSPLandroid/content/IContentService;->getSyncAdapterTypesAsUser(I)[Landroid/content/SyncAdapterType;
+HSPLandroid/content/IContentService;->getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z
+HSPLandroid/content/IContentService;->getSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;I)Z
+HSPLandroid/content/IContentService;->getSyncStatus(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Landroid/content/SyncStatusInfo;
+HSPLandroid/content/IContentService;->getSyncStatusAsUser(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;I)Landroid/content/SyncStatusInfo;
+HSPLandroid/content/IContentService;->isSyncActive(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Z
+HSPLandroid/content/IContentService;->isSyncPending(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Z
+HSPLandroid/content/IContentService;->isSyncPendingAsUser(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;I)Z
+HSPLandroid/content/IContentService;->notifyChange(Landroid/net/Uri;Landroid/database/IContentObserver;ZIII)V
+HSPLandroid/content/IContentService;->putCache(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;I)V
+HSPLandroid/content/IContentService;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/IContentObserver;II)V
+HSPLandroid/content/IContentService;->removePeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
+HSPLandroid/content/IContentService;->removeStatusChangeListener(Landroid/content/ISyncStatusObserver;)V
+HSPLandroid/content/IContentService;->requestSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
+HSPLandroid/content/IContentService;->setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V
+HSPLandroid/content/IContentService;->setMasterSyncAutomatically(Z)V
+HSPLandroid/content/IContentService;->setMasterSyncAutomaticallyAsUser(ZI)V
+HSPLandroid/content/IContentService;->setSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;Z)V
+HSPLandroid/content/IContentService;->setSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;ZI)V
+HSPLandroid/content/IContentService;->sync(Landroid/content/SyncRequest;)V
+HSPLandroid/content/IContentService;->syncAsUser(Landroid/content/SyncRequest;I)V
+HSPLandroid/content/IContentService;->unregisterContentObserver(Landroid/database/IContentObserver;)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;
+HSPLandroid/content/IIntentReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
+HSPLandroid/content/IIntentSender$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/content/IIntentSender$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HSPLandroid/content/IIntentSender$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IIntentSender;
+HSPLandroid/content/IIntentSender;->send(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)V
+HSPLandroid/content/IOnPrimaryClipChangedListener$Stub;-><init>()V
+HSPLandroid/content/IOnPrimaryClipChangedListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/content/IOnPrimaryClipChangedListener;->dispatchPrimaryClipChanged()V
+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;->asInterface(Landroid/os/IBinder;)Landroid/content/IRestrictionsManager;
+HSPLandroid/content/IRestrictionsManager;->createLocalApprovalIntent()Landroid/content/Intent;
+HSPLandroid/content/IRestrictionsManager;->getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;
+HSPLandroid/content/IRestrictionsManager;->hasRestrictionsProvider()Z
+HSPLandroid/content/IRestrictionsManager;->notifyPermissionResponse(Ljava/lang/String;Landroid/os/PersistableBundle;)V
+HSPLandroid/content/IRestrictionsManager;->requestPermission(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;)V
+HSPLandroid/content/ISyncAdapter$Stub;-><init>()V
+HSPLandroid/content/ISyncAdapter$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/content/ISyncAdapter$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/content/ISyncAdapter;->cancelSync(Landroid/content/ISyncContext;)V
+HSPLandroid/content/ISyncAdapter;->startSync(Landroid/content/ISyncContext;Ljava/lang/String;Landroid/accounts/Account;Landroid/os/Bundle;)V
+HSPLandroid/content/ISyncContext$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/content/ISyncContext$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncContext;
+HSPLandroid/content/ISyncContext;->onFinished(Landroid/content/SyncResult;)V
+HSPLandroid/content/ISyncContext;->sendHeartbeat()V
+HSPLandroid/content/ISyncStatusObserver$Stub;-><init>()V
+HSPLandroid/content/ISyncStatusObserver$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/content/ISyncStatusObserver;->onStatusChanged(I)V
+HSPLandroid/content/Intent$1;-><init>()V
+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$FilterComparison;-><init>(Landroid/content/Intent;)V
+HSPLandroid/content/Intent$FilterComparison;->equals(Ljava/lang/Object;)Z
+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
+HSPLandroid/content/Intent;-><init>(Landroid/content/Intent;I)V
+HSPLandroid/content/Intent;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/Intent;-><init>(Ljava/lang/String;)V
+HSPLandroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;)V
+HSPLandroid/content/Intent;->addCategory(Ljava/lang/String;)Landroid/content/Intent;
+HSPLandroid/content/Intent;->addFlags(I)Landroid/content/Intent;
+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;
+HSPLandroid/content/Intent;->getCategories()Ljava/util/Set;
+HSPLandroid/content/Intent;->getCharSequenceExtra(Ljava/lang/String;)Ljava/lang/CharSequence;
+HSPLandroid/content/Intent;->getClipData()Landroid/content/ClipData;
+HSPLandroid/content/Intent;->getComponent()Landroid/content/ComponentName;
+HSPLandroid/content/Intent;->getData()Landroid/net/Uri;
+HSPLandroid/content/Intent;->getDataString()Ljava/lang/String;
+HSPLandroid/content/Intent;->getExtras()Landroid/os/Bundle;
+HSPLandroid/content/Intent;->getFlags()I
+HSPLandroid/content/Intent;->getIntExtra(Ljava/lang/String;I)I
+HSPLandroid/content/Intent;->getLongExtra(Ljava/lang/String;J)J
+HSPLandroid/content/Intent;->getPackage()Ljava/lang/String;
+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;
+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;
+HSPLandroid/content/Intent;->hasCategory(Ljava/lang/String;)Z
+HSPLandroid/content/Intent;->hasExtra(Ljava/lang/String;)Z
+HSPLandroid/content/Intent;->isExcludingStopped()Z
+HSPLandroid/content/Intent;->migrateExtraStreamToClipData()Z
+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
+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/lang/String;)Landroid/content/Intent;
+HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;Z)Landroid/content/Intent;
+HSPLandroid/content/Intent;->putExtras(Landroid/os/Bundle;)Landroid/content/Intent;
+HSPLandroid/content/Intent;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/content/Intent;->removeCategory(Ljava/lang/String;)V
+HSPLandroid/content/Intent;->removeExtra(Ljava/lang/String;)V
+HSPLandroid/content/Intent;->replaceExtras(Landroid/os/Bundle;)Landroid/content/Intent;
+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;
+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;
+HSPLandroid/content/Intent;->setClassName(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;
+HSPLandroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;
+HSPLandroid/content/Intent;->setComponent(Landroid/content/ComponentName;)Landroid/content/Intent;
+HSPLandroid/content/Intent;->setData(Landroid/net/Uri;)Landroid/content/Intent;
+HSPLandroid/content/Intent;->setDataAndType(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;
+HSPLandroid/content/Intent;->setDefusable(Z)V
+HSPLandroid/content/Intent;->setExtrasClassLoader(Ljava/lang/ClassLoader;)V
+HSPLandroid/content/Intent;->setFlags(I)Landroid/content/Intent;
+HSPLandroid/content/Intent;->setPackage(Ljava/lang/String;)Landroid/content/Intent;
+HSPLandroid/content/Intent;->setType(Ljava/lang/String;)Landroid/content/Intent;
+HSPLandroid/content/Intent;->toShortString(Ljava/lang/StringBuilder;ZZZZ)V
+HSPLandroid/content/Intent;->toString()Ljava/lang/String;
+HSPLandroid/content/Intent;->toUri(I)Ljava/lang/String;
+HSPLandroid/content/Intent;->toUriFragment(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/content/Intent;->toUriInner(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/content/Intent;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/IntentFilter$1;-><init>()V
+HSPLandroid/content/IntentFilter$AuthorityEntry;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/IntentFilter$AuthorityEntry;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/IntentFilter$AuthorityEntry;->writeToParcel(Landroid/os/Parcel;)V
+HSPLandroid/content/IntentFilter;-><init>()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
+HSPLandroid/content/IntentFilter;->addDataAuthority(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/IntentFilter;->addDataScheme(Ljava/lang/String;)V
+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
+HSPLandroid/content/IntentFilter;->getAction(I)Ljava/lang/String;
+HSPLandroid/content/IntentFilter;->getAutoVerify()Z
+HSPLandroid/content/IntentFilter;->getCategory(I)Ljava/lang/String;
+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;->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
+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;->setPriority(I)V
+HSPLandroid/content/IntentFilter;->setVisibilityToInstantApp(I)V
+HSPLandroid/content/IntentFilter;->typesIterator()Ljava/util/Iterator;
+HSPLandroid/content/IntentFilter;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/Loader$ForceLoadContentObserver;-><init>(Landroid/content/Loader;)V
+HSPLandroid/content/Loader$ForceLoadContentObserver;->onChange(Z)V
+HSPLandroid/content/Loader$OnLoadCanceledListener;->onLoadCanceled(Landroid/content/Loader;)V
+HSPLandroid/content/Loader$OnLoadCompleteListener;->onLoadComplete(Landroid/content/Loader;Ljava/lang/Object;)V
+HSPLandroid/content/Loader;-><init>(Landroid/content/Context;)V
+HSPLandroid/content/Loader;->abandon()V
+HSPLandroid/content/Loader;->cancelLoad()Z
+HSPLandroid/content/Loader;->commitContentChanged()V
+HSPLandroid/content/Loader;->deliverCancellation()V
+HSPLandroid/content/Loader;->deliverResult(Ljava/lang/Object;)V
+HSPLandroid/content/Loader;->forceLoad()V
+HSPLandroid/content/Loader;->getContext()Landroid/content/Context;
+HSPLandroid/content/Loader;->getId()I
+HSPLandroid/content/Loader;->isAbandoned()Z
+HSPLandroid/content/Loader;->isReset()Z
+HSPLandroid/content/Loader;->isStarted()Z
+HSPLandroid/content/Loader;->onAbandon()V
+HSPLandroid/content/Loader;->onContentChanged()V
+HSPLandroid/content/Loader;->onForceLoad()V
+HSPLandroid/content/Loader;->onReset()V
+HSPLandroid/content/Loader;->onStartLoading()V
+HSPLandroid/content/Loader;->onStopLoading()V
+HSPLandroid/content/Loader;->registerListener(ILandroid/content/Loader$OnLoadCompleteListener;)V
+HSPLandroid/content/Loader;->registerOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V
+HSPLandroid/content/Loader;->reset()V
+HSPLandroid/content/Loader;->rollbackContentChanged()V
+HSPLandroid/content/Loader;->startLoading()V
+HSPLandroid/content/Loader;->stopLoading()V
+HSPLandroid/content/Loader;->takeContentChanged()Z
+HSPLandroid/content/Loader;->unregisterListener(Landroid/content/Loader$OnLoadCompleteListener;)V
+HSPLandroid/content/Loader;->unregisterOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V
+HSPLandroid/content/RestrictionEntry$1;-><init>()V
+HSPLandroid/content/RestrictionEntry;-><init>(ILjava/lang/String;)V
+HSPLandroid/content/RestrictionEntry;->setDescription(Ljava/lang/String;)V
+HSPLandroid/content/RestrictionEntry;->setIntValue(I)V
+HSPLandroid/content/RestrictionEntry;->setSelectedState(Z)V
+HSPLandroid/content/RestrictionEntry;->setSelectedString(Ljava/lang/String;)V
+HSPLandroid/content/RestrictionEntry;->setTitle(Ljava/lang/String;)V
+HSPLandroid/content/RestrictionsManager;-><init>(Landroid/content/Context;Landroid/content/IRestrictionsManager;)V
+HSPLandroid/content/RestrictionsManager;->getApplicationRestrictions()Landroid/os/Bundle;
+HSPLandroid/content/RestrictionsManager;->getManifestRestrictions(Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/content/RestrictionsManager;->loadManifestRestrictions(Ljava/lang/String;Landroid/content/res/XmlResourceParser;)Ljava/util/List;
+HSPLandroid/content/RestrictionsManager;->loadRestriction(Landroid/content/Context;Landroid/content/res/TypedArray;Landroid/content/res/XmlResourceParser;)Landroid/content/RestrictionEntry;
+HSPLandroid/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
+HSPLandroid/content/ServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HSPLandroid/content/ServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
+HSPLandroid/content/SharedPreferences$Editor;->apply()V
+HSPLandroid/content/SharedPreferences$Editor;->clear()Landroid/content/SharedPreferences$Editor;
+HSPLandroid/content/SharedPreferences$Editor;->commit()Z
+HSPLandroid/content/SharedPreferences$Editor;->putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/content/SharedPreferences$Editor;->putFloat(Ljava/lang/String;F)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/content/SharedPreferences$Editor;->putInt(Ljava/lang/String;I)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/content/SharedPreferences$Editor;->putLong(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/content/SharedPreferences$Editor;->putStringSet(Ljava/lang/String;Ljava/util/Set;)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/content/SharedPreferences$Editor;->remove(Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
+HSPLandroid/content/SharedPreferences$OnSharedPreferenceChangeListener;->onSharedPreferenceChanged(Landroid/content/SharedPreferences;Ljava/lang/String;)V
+HSPLandroid/content/SharedPreferences;->contains(Ljava/lang/String;)Z
+HSPLandroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;
+HSPLandroid/content/SharedPreferences;->getAll()Ljava/util/Map;
+HSPLandroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
+HSPLandroid/content/SharedPreferences;->getFloat(Ljava/lang/String;F)F
+HSPLandroid/content/SharedPreferences;->getInt(Ljava/lang/String;I)I
+HSPLandroid/content/SharedPreferences;->getLong(Ljava/lang/String;J)J
+HSPLandroid/content/SharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/content/SharedPreferences;->getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;
+HSPLandroid/content/SharedPreferences;->registerOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V
+HSPLandroid/content/SharedPreferences;->unregisterOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V
+HSPLandroid/content/SyncAdapterType$1;-><init>()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;ZZZZLjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/SyncContext;-><init>(Landroid/content/ISyncContext;)V
+HSPLandroid/content/SyncRequest$1;-><init>()V
+HSPLandroid/content/SyncRequest$Builder;->-get0(Landroid/content/SyncRequest$Builder;)Landroid/accounts/Account;
+HSPLandroid/content/SyncRequest$Builder;->-get1(Landroid/content/SyncRequest$Builder;)Ljava/lang/String;
+HSPLandroid/content/SyncRequest$Builder;->-get2(Landroid/content/SyncRequest$Builder;)Landroid/os/Bundle;
+HSPLandroid/content/SyncRequest$Builder;->-get3(Landroid/content/SyncRequest$Builder;)Z
+HSPLandroid/content/SyncRequest$Builder;->-get4(Landroid/content/SyncRequest$Builder;)Z
+HSPLandroid/content/SyncRequest$Builder;->-get5(Landroid/content/SyncRequest$Builder;)Landroid/os/Bundle;
+HSPLandroid/content/SyncRequest$Builder;->-get6(Landroid/content/SyncRequest$Builder;)J
+HSPLandroid/content/SyncRequest$Builder;->-get7(Landroid/content/SyncRequest$Builder;)J
+HSPLandroid/content/SyncRequest$Builder;->-get8(Landroid/content/SyncRequest$Builder;)I
+HSPLandroid/content/SyncRequest$Builder;->-get9(Landroid/content/SyncRequest$Builder;)I
+HSPLandroid/content/SyncRequest$Builder;-><init>()V
+HSPLandroid/content/SyncRequest$Builder;->build()Landroid/content/SyncRequest;
+HSPLandroid/content/SyncRequest$Builder;->setExtras(Landroid/os/Bundle;)Landroid/content/SyncRequest$Builder;
+HSPLandroid/content/SyncRequest$Builder;->setSyncAdapter(Landroid/accounts/Account;Ljava/lang/String;)Landroid/content/SyncRequest$Builder;
+HSPLandroid/content/SyncRequest$Builder;->setupInterval(JJ)V
+HSPLandroid/content/SyncRequest$Builder;->syncOnce()Landroid/content/SyncRequest$Builder;
+HSPLandroid/content/SyncRequest;-><init>(Landroid/content/SyncRequest$Builder;)V
+HSPLandroid/content/SyncRequest;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/SyncResult$1;-><init>()V
+HSPLandroid/content/SyncResult;-><init>()V
+HSPLandroid/content/SyncResult;-><init>(Z)V
+HSPLandroid/content/SyncStats$1;-><init>()V
+HSPLandroid/content/SyncStats;-><init>()V
+HSPLandroid/content/SyncStatusObserver;->onStatusChanged(I)V
+HSPLandroid/content/UndoManager;-><init>()V
+HSPLandroid/content/UndoManager;->forgetRedos([Landroid/content/UndoOwner;I)I
+HSPLandroid/content/UndoManager;->forgetUndos([Landroid/content/UndoOwner;I)I
+HSPLandroid/content/UndoManager;->getOwner(Ljava/lang/String;Ljava/lang/Object;)Landroid/content/UndoOwner;
+HSPLandroid/content/UndoManager;->restoreInstanceState(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V
+HSPLandroid/content/UndoManager;->saveInstanceState(Landroid/os/Parcel;)V
+HSPLandroid/content/UndoOwner;-><init>(Ljava/lang/String;Landroid/content/UndoManager;)V
+HSPLandroid/content/UriMatcher;-><init>()V
+HSPLandroid/content/UriMatcher;-><init>(I)V
+HSPLandroid/content/UriMatcher;->addURI(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/content/UriMatcher;->match(Landroid/net/Uri;)I
+HSPLandroid/content/om/IOverlayManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/content/om/IOverlayManager$Stub$Proxy;->getOverlayInfo(Ljava/lang/String;I)Landroid/content/om/OverlayInfo;
+HSPLandroid/content/om/IOverlayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/om/IOverlayManager;
+HSPLandroid/content/om/IOverlayManager;->getAllOverlays(I)Ljava/util/Map;
+HSPLandroid/content/om/IOverlayManager;->getOverlayInfo(Ljava/lang/String;I)Landroid/content/om/OverlayInfo;
+HSPLandroid/content/om/IOverlayManager;->getOverlayInfosForTarget(Ljava/lang/String;I)Ljava/util/List;
+HSPLandroid/content/om/IOverlayManager;->setEnabled(Ljava/lang/String;ZI)Z
+HSPLandroid/content/om/IOverlayManager;->setEnabledExclusive(Ljava/lang/String;ZI)Z
+HSPLandroid/content/om/IOverlayManager;->setHighestPriority(Ljava/lang/String;I)Z
+HSPLandroid/content/om/IOverlayManager;->setLowestPriority(Ljava/lang/String;I)Z
+HSPLandroid/content/om/IOverlayManager;->setPriority(Ljava/lang/String;Ljava/lang/String;I)Z
+HSPLandroid/content/om/OverlayInfo$1;-><init>()V
+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;->ensureValidState()V
+HSPLandroid/content/om/OverlayInfo;->isEnabled()Z
+HSPLandroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ActivityInfo;
+HSPLandroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/ActivityInfo$1;->newArray(I)[Landroid/content/pm/ActivityInfo;
+HSPLandroid/content/pm/ActivityInfo$1;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/content/pm/ActivityInfo$WindowLayout;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/ActivityInfo;-><init>()V
+HSPLandroid/content/pm/ActivityInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/ActivityInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ActivityInfo;)V
+HSPLandroid/content/pm/ActivityInfo;->activityInfoConfigNativeToJava(I)I
+HSPLandroid/content/pm/ActivityInfo;->getThemeResource()I
+HSPLandroid/content/pm/ActivityInfo;->isFixedOrientation()Z
+HSPLandroid/content/pm/ActivityInfo;->isFixedOrientationLandscape()Z
+HSPLandroid/content/pm/ActivityInfo;->isFixedOrientationLandscape(I)Z
+HSPLandroid/content/pm/ActivityInfo;->isFixedOrientationPortrait()Z
+HSPLandroid/content/pm/ActivityInfo;->isFixedOrientationPortrait(I)Z
+HSPLandroid/content/pm/ActivityInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/ApplicationInfo$1;-><init>()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
+HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ApplicationInfo;)V
+HSPLandroid/content/pm/ApplicationInfo;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
+HSPLandroid/content/pm/ApplicationInfo;->getCodePath()Ljava/lang/String;
+HSPLandroid/content/pm/ApplicationInfo;->getResourcePath()Ljava/lang/String;
+HSPLandroid/content/pm/ApplicationInfo;->hasRtlSupport()Z
+HSPLandroid/content/pm/ApplicationInfo;->initForUser(I)V
+HSPLandroid/content/pm/ApplicationInfo;->isDirectBootAware()Z
+HSPLandroid/content/pm/ApplicationInfo;->isExternalAsec()Z
+HSPLandroid/content/pm/ApplicationInfo;->isForwardLocked()Z
+HSPLandroid/content/pm/ApplicationInfo;->isInstantApp()Z
+HSPLandroid/content/pm/ApplicationInfo;->isPrivilegedApp()Z
+HSPLandroid/content/pm/ApplicationInfo;->isStaticSharedLibrary()Z
+HSPLandroid/content/pm/ApplicationInfo;->isSystemApp()Z
+HSPLandroid/content/pm/ApplicationInfo;->isUpdatedSystemApp()Z
+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;->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;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/BaseParceledListSlice;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V
+HSPLandroid/content/pm/BaseParceledListSlice;-><init>(Ljava/util/List;)V
+HSPLandroid/content/pm/BaseParceledListSlice;->getList()Ljava/util/List;
+HSPLandroid/content/pm/BaseParceledListSlice;->readCreator(Landroid/os/Parcelable$Creator;Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;
+HSPLandroid/content/pm/BaseParceledListSlice;->readParcelableCreator(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator;
+HSPLandroid/content/pm/BaseParceledListSlice;->verifySameType(Ljava/lang/Class;Ljava/lang/Class;)V
+HSPLandroid/content/pm/BaseParceledListSlice;->writeElement(Ljava/lang/Object;Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/BaseParceledListSlice;->writeParcelableCreator(Ljava/lang/Object;Landroid/os/Parcel;)V
+HSPLandroid/content/pm/BaseParceledListSlice;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/ComponentInfo;-><init>()V
+HSPLandroid/content/pm/ComponentInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/ComponentInfo;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
+HSPLandroid/content/pm/ComponentInfo;->getIconResource()I
+HSPLandroid/content/pm/ComponentInfo;->getLogoResource()I
+HSPLandroid/content/pm/ComponentInfo;->loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
+HSPLandroid/content/pm/ComponentInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/ConfigurationInfo$1;-><init>()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>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/ConfigurationInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ConfigurationInfo;)V
+HSPLandroid/content/pm/FallbackCategoryProvider;->getFallbackCategory(Ljava/lang/String;)I
+HSPLandroid/content/pm/FeatureGroupInfo$1;-><init>()V
+HSPLandroid/content/pm/FeatureInfo$1;-><init>()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
+HSPLandroid/content/pm/FeatureInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/FeatureInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/FeatureInfo;)V
+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;->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;
+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;->resolveActivity(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Landroid/content/pm/ActivityInfo;
+HSPLandroid/content/pm/ILauncherApps$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/ILauncherApps;
+HSPLandroid/content/pm/ILauncherApps;->addOnAppsChangedListener(Ljava/lang/String;Landroid/content/pm/IOnAppsChangedListener;)V
+HSPLandroid/content/pm/ILauncherApps;->getApplicationInfo(Ljava/lang/String;Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ApplicationInfo;
+HSPLandroid/content/pm/ILauncherApps;->getLauncherActivities(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/ILauncherApps;->getShortcutConfigActivities(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/ILauncherApps;->getShortcutConfigActivityIntent(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Landroid/content/IntentSender;
+HSPLandroid/content/pm/ILauncherApps;->getShortcutIconFd(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/content/pm/ILauncherApps;->getShortcutIconResId(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)I
+HSPLandroid/content/pm/ILauncherApps;->getShortcuts(Ljava/lang/String;JLjava/lang/String;Ljava/util/List;Landroid/content/ComponentName;ILandroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/ILauncherApps;->hasShortcutHostPermission(Ljava/lang/String;)Z
+HSPLandroid/content/pm/ILauncherApps;->isActivityEnabled(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Z
+HSPLandroid/content/pm/ILauncherApps;->isPackageEnabled(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Z
+HSPLandroid/content/pm/ILauncherApps;->pinShortcuts(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;)V
+HSPLandroid/content/pm/ILauncherApps;->removeOnAppsChangedListener(Landroid/content/pm/IOnAppsChangedListener;)V
+HSPLandroid/content/pm/ILauncherApps;->resolveActivity(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Landroid/content/pm/ActivityInfo;
+HSPLandroid/content/pm/ILauncherApps;->showAppDetailsAsUser(Ljava/lang/String;Landroid/content/ComponentName;Landroid/graphics/Rect;Landroid/os/Bundle;Landroid/os/UserHandle;)V
+HSPLandroid/content/pm/ILauncherApps;->startActivityAsUser(Ljava/lang/String;Landroid/content/ComponentName;Landroid/graphics/Rect;Landroid/os/Bundle;Landroid/os/UserHandle;)V
+HSPLandroid/content/pm/ILauncherApps;->startShortcut(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;Landroid/os/Bundle;I)Z
+HSPLandroid/content/pm/IOnAppsChangedListener$Stub;-><init>()V
+HSPLandroid/content/pm/IOnAppsChangedListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/content/pm/IOnAppsChangedListener;->onPackageAdded(Landroid/os/UserHandle;Ljava/lang/String;)V
+HSPLandroid/content/pm/IOnAppsChangedListener;->onPackageChanged(Landroid/os/UserHandle;Ljava/lang/String;)V
+HSPLandroid/content/pm/IOnAppsChangedListener;->onPackageRemoved(Landroid/os/UserHandle;Ljava/lang/String;)V
+HSPLandroid/content/pm/IOnAppsChangedListener;->onPackagesAvailable(Landroid/os/UserHandle;[Ljava/lang/String;Z)V
+HSPLandroid/content/pm/IOnAppsChangedListener;->onPackagesSuspended(Landroid/os/UserHandle;[Ljava/lang/String;)V
+HSPLandroid/content/pm/IOnAppsChangedListener;->onPackagesUnavailable(Landroid/os/UserHandle;[Ljava/lang/String;Z)V
+HSPLandroid/content/pm/IOnAppsChangedListener;->onPackagesUnsuspended(Landroid/os/UserHandle;[Ljava/lang/String;)V
+HSPLandroid/content/pm/IOnAppsChangedListener;->onShortcutChanged(Landroid/os/UserHandle;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
+HSPLandroid/content/pm/IOnPermissionsChangeListener$Stub;-><init>()V
+HSPLandroid/content/pm/IOnPermissionsChangeListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/content/pm/IOnPermissionsChangeListener;->onPermissionsChanged(I)V
+HSPLandroid/content/pm/IPackageInstaller$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/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;
+HSPLandroid/content/pm/IPackageInstaller$Stub$Proxy;->registerCallback(Landroid/content/pm/IPackageInstallerCallback;I)V
+HSPLandroid/content/pm/IPackageInstaller$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageInstaller;
+HSPLandroid/content/pm/IPackageInstaller;->abandonSession(I)V
+HSPLandroid/content/pm/IPackageInstaller;->createSession(Landroid/content/pm/PackageInstaller$SessionParams;Ljava/lang/String;I)I
+HSPLandroid/content/pm/IPackageInstaller;->getAllSessions(I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageInstaller;->getMySessions(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageInstaller;->getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;
+HSPLandroid/content/pm/IPackageInstaller;->openSession(I)Landroid/content/pm/IPackageInstallerSession;
+HSPLandroid/content/pm/IPackageInstaller;->registerCallback(Landroid/content/pm/IPackageInstallerCallback;I)V
+HSPLandroid/content/pm/IPackageInstaller;->setPermissionsResult(IZ)V
+HSPLandroid/content/pm/IPackageInstaller;->uninstall(Landroid/content/pm/VersionedPackage;Ljava/lang/String;ILandroid/content/IntentSender;I)V
+HSPLandroid/content/pm/IPackageInstaller;->unregisterCallback(Landroid/content/pm/IPackageInstallerCallback;)V
+HSPLandroid/content/pm/IPackageInstaller;->updateSessionAppIcon(ILandroid/graphics/Bitmap;)V
+HSPLandroid/content/pm/IPackageInstaller;->updateSessionAppLabel(ILjava/lang/String;)V
+HSPLandroid/content/pm/IPackageInstallerCallback$Stub;-><init>()V
+HSPLandroid/content/pm/IPackageInstallerCallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/content/pm/IPackageInstallerCallback;->onSessionActiveChanged(IZ)V
+HSPLandroid/content/pm/IPackageInstallerCallback;->onSessionBadgingChanged(I)V
+HSPLandroid/content/pm/IPackageInstallerCallback;->onSessionCreated(I)V
+HSPLandroid/content/pm/IPackageInstallerCallback;->onSessionFinished(IZ)V
+HSPLandroid/content/pm/IPackageInstallerCallback;->onSessionProgressChanged(IF)V
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->addOnPermissionsChangeListener(Landroid/content/pm/IOnPermissionsChangeListener;)V
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I
+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;
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getComponentEnabledSetting(Landroid/content/ComponentName;I)I
+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;->getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo;
+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;
+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;
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getSystemAvailableFeatures()Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getSystemSharedLibraryNames()[Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->grantDefaultPermissionsToEnabledImsServices([Ljava/lang/String;I)V
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->hasSystemFeature(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isOnlyCoreApps()Z
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isPermissionRevokedByPolicy(Ljava/lang/String;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;->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;->registerMoveCallback(Landroid/content/pm/IPackageMoveObserver;)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;
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->setComponentEnabledSetting(Landroid/content/ComponentName;III)V
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->shouldShowRequestPermissionRationale(Ljava/lang/String;Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager$Stub;-><init>()V
+HSPLandroid/content/pm/IPackageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageManager;
+HSPLandroid/content/pm/IPackageManager;->activitySupportsIntent(Landroid/content/ComponentName;Landroid/content/Intent;Ljava/lang/String;)Z
+HSPLandroid/content/pm/IPackageManager;->addCrossProfileIntentFilter(Landroid/content/IntentFilter;Ljava/lang/String;III)V
+HSPLandroid/content/pm/IPackageManager;->addOnPermissionsChangeListener(Landroid/content/pm/IOnPermissionsChangeListener;)V
+HSPLandroid/content/pm/IPackageManager;->addPermission(Landroid/content/pm/PermissionInfo;)Z
+HSPLandroid/content/pm/IPackageManager;->addPermissionAsync(Landroid/content/pm/PermissionInfo;)Z
+HSPLandroid/content/pm/IPackageManager;->addPersistentPreferredActivity(Landroid/content/IntentFilter;Landroid/content/ComponentName;I)V
+HSPLandroid/content/pm/IPackageManager;->addPreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V
+HSPLandroid/content/pm/IPackageManager;->canForwardTo(Landroid/content/Intent;Ljava/lang/String;II)Z
+HSPLandroid/content/pm/IPackageManager;->canRequestPackageInstalls(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager;->canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->checkPackageStartable(Ljava/lang/String;I)V
+HSPLandroid/content/pm/IPackageManager;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I
+HSPLandroid/content/pm/IPackageManager;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/content/pm/IPackageManager;->checkUidPermission(Ljava/lang/String;I)I
+HSPLandroid/content/pm/IPackageManager;->checkUidSignatures(II)I
+HSPLandroid/content/pm/IPackageManager;->clearApplicationProfileData(Ljava/lang/String;)V
+HSPLandroid/content/pm/IPackageManager;->clearApplicationUserData(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;I)V
+HSPLandroid/content/pm/IPackageManager;->clearCrossProfileIntentFilters(ILjava/lang/String;)V
+HSPLandroid/content/pm/IPackageManager;->clearPackagePersistentPreferredActivities(Ljava/lang/String;I)V
+HSPLandroid/content/pm/IPackageManager;->clearPackagePreferredActivities(Ljava/lang/String;)V
+HSPLandroid/content/pm/IPackageManager;->currentToCanonicalPackageNames([Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->deleteApplicationCacheFiles(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)V
+HSPLandroid/content/pm/IPackageManager;->deleteApplicationCacheFilesAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageDataObserver;)V
+HSPLandroid/content/pm/IPackageManager;->deletePackageAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageDeleteObserver;II)V
+HSPLandroid/content/pm/IPackageManager;->deletePackageVersioned(Landroid/content/pm/VersionedPackage;Landroid/content/pm/IPackageDeleteObserver2;II)V
+HSPLandroid/content/pm/IPackageManager;->deletePreloadsFileCache()V
+HSPLandroid/content/pm/IPackageManager;->dumpProfiles(Ljava/lang/String;)V
+HSPLandroid/content/pm/IPackageManager;->enterSafeMode()V
+HSPLandroid/content/pm/IPackageManager;->extendVerificationTimeout(IIJ)V
+HSPLandroid/content/pm/IPackageManager;->findPersistentPreferredActivity(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;
+HSPLandroid/content/pm/IPackageManager;->finishPackageInstall(IZ)V
+HSPLandroid/content/pm/IPackageManager;->flushPackageRestrictionsAsUser(I)V
+HSPLandroid/content/pm/IPackageManager;->forceDexOpt(Ljava/lang/String;)V
+HSPLandroid/content/pm/IPackageManager;->freeStorage(Ljava/lang/String;JILandroid/content/IntentSender;)V
+HSPLandroid/content/pm/IPackageManager;->freeStorageAndNotify(Ljava/lang/String;JILandroid/content/pm/IPackageDataObserver;)V
+HSPLandroid/content/pm/IPackageManager;->getActivityInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo;
+HSPLandroid/content/pm/IPackageManager;->getAllIntentFilters(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->getAllPackages()Ljava/util/List;
+HSPLandroid/content/pm/IPackageManager;->getAllPermissionGroups(I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->getAppOpPermissionPackages(Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->getApplicationEnabledSetting(Ljava/lang/String;I)I
+HSPLandroid/content/pm/IPackageManager;->getApplicationHiddenSettingAsUser(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager;->getApplicationInfo(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo;
+HSPLandroid/content/pm/IPackageManager;->getBlockUninstallForUser(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager;->getChangedPackages(II)Landroid/content/pm/ChangedPackages;
+HSPLandroid/content/pm/IPackageManager;->getComponentEnabledSetting(Landroid/content/ComponentName;I)I
+HSPLandroid/content/pm/IPackageManager;->getDefaultAppsBackup(I)[B
+HSPLandroid/content/pm/IPackageManager;->getDefaultBrowserPackageName(I)Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->getFlagsForUid(I)I
+HSPLandroid/content/pm/IPackageManager;->getHomeActivities(Ljava/util/List;)Landroid/content/ComponentName;
+HSPLandroid/content/pm/IPackageManager;->getInstallLocation()I
+HSPLandroid/content/pm/IPackageManager;->getInstallReason(Ljava/lang/String;I)I
+HSPLandroid/content/pm/IPackageManager;->getInstalledApplications(II)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->getInstalledPackages(II)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->getInstantAppAndroidId(Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->getInstantAppCookie(Ljava/lang/String;I)[B
+HSPLandroid/content/pm/IPackageManager;->getInstantAppIcon(Ljava/lang/String;I)Landroid/graphics/Bitmap;
+HSPLandroid/content/pm/IPackageManager;->getInstantAppInstallerComponent()Landroid/content/ComponentName;
+HSPLandroid/content/pm/IPackageManager;->getInstantAppResolverComponent()Landroid/content/ComponentName;
+HSPLandroid/content/pm/IPackageManager;->getInstantAppResolverSettingsComponent()Landroid/content/ComponentName;
+HSPLandroid/content/pm/IPackageManager;->getInstantApps(I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo;
+HSPLandroid/content/pm/IPackageManager;->getIntentFilterVerificationBackup(I)[B
+HSPLandroid/content/pm/IPackageManager;->getIntentFilterVerifications(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->getIntentVerificationStatus(Ljava/lang/String;I)I
+HSPLandroid/content/pm/IPackageManager;->getKeySetByAlias(Ljava/lang/String;Ljava/lang/String;)Landroid/content/pm/KeySet;
+HSPLandroid/content/pm/IPackageManager;->getLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;I)Landroid/content/pm/ResolveInfo;
+HSPLandroid/content/pm/IPackageManager;->getMoveStatus(I)I
+HSPLandroid/content/pm/IPackageManager;->getNameForUid(I)Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->getNamesForUids([I)[Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->getPackageGids(Ljava/lang/String;II)[I
+HSPLandroid/content/pm/IPackageManager;->getPackageInfo(Ljava/lang/String;II)Landroid/content/pm/PackageInfo;
+HSPLandroid/content/pm/IPackageManager;->getPackageInfoVersioned(Landroid/content/pm/VersionedPackage;II)Landroid/content/pm/PackageInfo;
+HSPLandroid/content/pm/IPackageManager;->getPackageInstaller()Landroid/content/pm/IPackageInstaller;
+HSPLandroid/content/pm/IPackageManager;->getPackageSizeInfo(Ljava/lang/String;ILandroid/content/pm/IPackageStatsObserver;)V
+HSPLandroid/content/pm/IPackageManager;->getPackageUid(Ljava/lang/String;II)I
+HSPLandroid/content/pm/IPackageManager;->getPackagesForUid(I)[Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->getPackagesHoldingPermissions([Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->getPermissionControllerPackageName()Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;I)I
+HSPLandroid/content/pm/IPackageManager;->getPermissionGrantBackup(I)[B
+HSPLandroid/content/pm/IPackageManager;->getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo;
+HSPLandroid/content/pm/IPackageManager;->getPermissionInfo(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;
+HSPLandroid/content/pm/IPackageManager;->getPersistentApplications(I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->getPreferredActivities(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I
+HSPLandroid/content/pm/IPackageManager;->getPreferredActivityBackup(I)[B
+HSPLandroid/content/pm/IPackageManager;->getPreviousCodePaths(Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/content/pm/IPackageManager;->getPrivateFlagsForUid(I)I
+HSPLandroid/content/pm/IPackageManager;->getProviderInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ProviderInfo;
+HSPLandroid/content/pm/IPackageManager;->getReceiverInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo;
+HSPLandroid/content/pm/IPackageManager;->getServiceInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ServiceInfo;
+HSPLandroid/content/pm/IPackageManager;->getServicesSystemSharedLibraryPackageName()Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->getSharedLibraries(Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->getSharedSystemSharedLibraryPackageName()Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->getSigningKeySet(Ljava/lang/String;)Landroid/content/pm/KeySet;
+HSPLandroid/content/pm/IPackageManager;->getSystemAvailableFeatures()Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->getSystemSharedLibraryNames()[Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->getUidForSharedUser(Ljava/lang/String;)I
+HSPLandroid/content/pm/IPackageManager;->getVerifierDeviceIdentity()Landroid/content/pm/VerifierDeviceIdentity;
+HSPLandroid/content/pm/IPackageManager;->grantDefaultPermissionsToEnabledCarrierApps([Ljava/lang/String;I)V
+HSPLandroid/content/pm/IPackageManager;->grantDefaultPermissionsToEnabledImsServices([Ljava/lang/String;I)V
+HSPLandroid/content/pm/IPackageManager;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/content/pm/IPackageManager;->hasSystemFeature(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager;->hasSystemUidErrors()Z
+HSPLandroid/content/pm/IPackageManager;->installExistingPackageAsUser(Ljava/lang/String;III)I
+HSPLandroid/content/pm/IPackageManager;->installPackageAsUser(Ljava/lang/String;Landroid/content/pm/IPackageInstallObserver2;ILjava/lang/String;I)V
+HSPLandroid/content/pm/IPackageManager;->isFirstBoot()Z
+HSPLandroid/content/pm/IPackageManager;->isInstantApp(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager;->isOnlyCoreApps()Z
+HSPLandroid/content/pm/IPackageManager;->isPackageAvailable(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager;->isPackageDeviceAdminOnAnyUser(Ljava/lang/String;)Z
+HSPLandroid/content/pm/IPackageManager;->isPackageSignedByKeySet(Ljava/lang/String;Landroid/content/pm/KeySet;)Z
+HSPLandroid/content/pm/IPackageManager;->isPackageSignedByKeySetExactly(Ljava/lang/String;Landroid/content/pm/KeySet;)Z
+HSPLandroid/content/pm/IPackageManager;->isPackageSuspendedForUser(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager;->isPermissionEnforced(Ljava/lang/String;)Z
+HSPLandroid/content/pm/IPackageManager;->isPermissionRevokedByPolicy(Ljava/lang/String;Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager;->isProtectedBroadcast(Ljava/lang/String;)Z
+HSPLandroid/content/pm/IPackageManager;->isSafeMode()Z
+HSPLandroid/content/pm/IPackageManager;->isStorageLow()Z
+HSPLandroid/content/pm/IPackageManager;->isUidPrivileged(I)Z
+HSPLandroid/content/pm/IPackageManager;->isUpgrade()Z
+HSPLandroid/content/pm/IPackageManager;->logAppProcessStartIfNeeded(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/content/pm/IPackageManager;->movePackage(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/content/pm/IPackageManager;->movePrimaryStorage(Ljava/lang/String;)I
+HSPLandroid/content/pm/IPackageManager;->nextPackageToClean(Landroid/content/pm/PackageCleanItem;)Landroid/content/pm/PackageCleanItem;
+HSPLandroid/content/pm/IPackageManager;->notifyDexLoad(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/lang/String;)V
+HSPLandroid/content/pm/IPackageManager;->notifyPackageUse(Ljava/lang/String;I)V
+HSPLandroid/content/pm/IPackageManager;->performDexOptMode(Ljava/lang/String;ZLjava/lang/String;ZZLjava/lang/String;)Z
+HSPLandroid/content/pm/IPackageManager;->performDexOptSecondary(Ljava/lang/String;Ljava/lang/String;Z)Z
+HSPLandroid/content/pm/IPackageManager;->performFstrimIfNeeded()V
+HSPLandroid/content/pm/IPackageManager;->queryContentProviders(Ljava/lang/String;IILjava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->queryInstrumentation(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->queryIntentActivityOptions(Landroid/content/ComponentName;[Landroid/content/Intent;[Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->queryIntentContentProviders(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->queryIntentReceivers(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->queryIntentServices(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->queryPermissionsByGroup(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager;->querySyncProviders(Ljava/util/List;Ljava/util/List;)V
+HSPLandroid/content/pm/IPackageManager;->reconcileSecondaryDexFiles(Ljava/lang/String;)V
+HSPLandroid/content/pm/IPackageManager;->registerDexModule(Ljava/lang/String;Ljava/lang/String;ZLandroid/content/pm/IDexModuleRegisterCallback;)V
+HSPLandroid/content/pm/IPackageManager;->registerMoveCallback(Landroid/content/pm/IPackageMoveObserver;)V
+HSPLandroid/content/pm/IPackageManager;->removeOnPermissionsChangeListener(Landroid/content/pm/IOnPermissionsChangeListener;)V
+HSPLandroid/content/pm/IPackageManager;->removePermission(Ljava/lang/String;)V
+HSPLandroid/content/pm/IPackageManager;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V
+HSPLandroid/content/pm/IPackageManager;->resetApplicationPreferences(I)V
+HSPLandroid/content/pm/IPackageManager;->resetRuntimePermissions()V
+HSPLandroid/content/pm/IPackageManager;->resolveContentProvider(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
+HSPLandroid/content/pm/IPackageManager;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo;
+HSPLandroid/content/pm/IPackageManager;->resolveService(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo;
+HSPLandroid/content/pm/IPackageManager;->restoreDefaultApps([BI)V
+HSPLandroid/content/pm/IPackageManager;->restoreIntentFilterVerification([BI)V
+HSPLandroid/content/pm/IPackageManager;->restorePermissionGrants([BI)V
+HSPLandroid/content/pm/IPackageManager;->restorePreferredActivities([BI)V
+HSPLandroid/content/pm/IPackageManager;->revokeRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/content/pm/IPackageManager;->runBackgroundDexoptJob()Z
+HSPLandroid/content/pm/IPackageManager;->setApplicationCategoryHint(Ljava/lang/String;ILjava/lang/String;)V
+HSPLandroid/content/pm/IPackageManager;->setApplicationEnabledSetting(Ljava/lang/String;IIILjava/lang/String;)V
+HSPLandroid/content/pm/IPackageManager;->setApplicationHiddenSettingAsUser(Ljava/lang/String;ZI)Z
+HSPLandroid/content/pm/IPackageManager;->setBlockUninstallForUser(Ljava/lang/String;ZI)Z
+HSPLandroid/content/pm/IPackageManager;->setComponentEnabledSetting(Landroid/content/ComponentName;III)V
+HSPLandroid/content/pm/IPackageManager;->setDefaultBrowserPackageName(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager;->setHomeActivity(Landroid/content/ComponentName;I)V
+HSPLandroid/content/pm/IPackageManager;->setInstallLocation(I)Z
+HSPLandroid/content/pm/IPackageManager;->setInstallerPackageName(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/pm/IPackageManager;->setInstantAppCookie(Ljava/lang/String;[BI)Z
+HSPLandroid/content/pm/IPackageManager;->setLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;ILandroid/content/IntentFilter;ILandroid/content/ComponentName;)V
+HSPLandroid/content/pm/IPackageManager;->setPackageStoppedState(Ljava/lang/String;ZI)V
+HSPLandroid/content/pm/IPackageManager;->setPackagesSuspendedAsUser([Ljava/lang/String;ZI)[Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager;->setPermissionEnforced(Ljava/lang/String;Z)V
+HSPLandroid/content/pm/IPackageManager;->setRequiredForSystemUser(Ljava/lang/String;Z)Z
+HSPLandroid/content/pm/IPackageManager;->setUpdateAvailable(Ljava/lang/String;Z)V
+HSPLandroid/content/pm/IPackageManager;->shouldShowRequestPermissionRationale(Ljava/lang/String;Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager;->systemReady()V
+HSPLandroid/content/pm/IPackageManager;->unregisterMoveCallback(Landroid/content/pm/IPackageMoveObserver;)V
+HSPLandroid/content/pm/IPackageManager;->updateExternalMediaStatus(ZZ)V
+HSPLandroid/content/pm/IPackageManager;->updateIntentVerificationStatus(Ljava/lang/String;II)Z
+HSPLandroid/content/pm/IPackageManager;->updatePackagesIfNeeded()V
+HSPLandroid/content/pm/IPackageManager;->updatePermissionFlags(Ljava/lang/String;Ljava/lang/String;III)V
+HSPLandroid/content/pm/IPackageManager;->updatePermissionFlagsForAllApps(III)V
+HSPLandroid/content/pm/IPackageManager;->verifyIntentFilter(IILjava/util/List;)V
+HSPLandroid/content/pm/IPackageManager;->verifyPendingInstall(II)V
+HSPLandroid/content/pm/IPackageMoveObserver$Stub;-><init>()V
+HSPLandroid/content/pm/IPackageMoveObserver$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/content/pm/IPackageMoveObserver;->onCreated(ILandroid/os/Bundle;)V
+HSPLandroid/content/pm/IPackageMoveObserver;->onStatusChanged(IIJ)V
+HSPLandroid/content/pm/IShortcutService$Stub$Proxy;-><init>(Landroid/os/IBinder;)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;
+HSPLandroid/content/pm/IShortcutService$Stub$Proxy;->getManifestShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/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;->isRequestPinItemSupported(II)Z
+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;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IShortcutService;
+HSPLandroid/content/pm/IShortcutService;->addDynamicShortcuts(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;I)Z
+HSPLandroid/content/pm/IShortcutService;->applyRestore([BI)V
+HSPLandroid/content/pm/IShortcutService;->createShortcutResultIntent(Ljava/lang/String;Landroid/content/pm/ShortcutInfo;I)Landroid/content/Intent;
+HSPLandroid/content/pm/IShortcutService;->disableShortcuts(Ljava/lang/String;Ljava/util/List;Ljava/lang/CharSequence;II)V
+HSPLandroid/content/pm/IShortcutService;->enableShortcuts(Ljava/lang/String;Ljava/util/List;I)V
+HSPLandroid/content/pm/IShortcutService;->getBackupPayload(I)[B
+HSPLandroid/content/pm/IShortcutService;->getDynamicShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IShortcutService;->getIconMaxDimensions(Ljava/lang/String;I)I
+HSPLandroid/content/pm/IShortcutService;->getManifestShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IShortcutService;->getMaxShortcutCountPerActivity(Ljava/lang/String;I)I
+HSPLandroid/content/pm/IShortcutService;->getPinnedShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IShortcutService;->getRateLimitResetTime(Ljava/lang/String;I)J
+HSPLandroid/content/pm/IShortcutService;->getRemainingCallCount(Ljava/lang/String;I)I
+HSPLandroid/content/pm/IShortcutService;->isRequestPinItemSupported(II)Z
+HSPLandroid/content/pm/IShortcutService;->onApplicationActive(Ljava/lang/String;I)V
+HSPLandroid/content/pm/IShortcutService;->removeAllDynamicShortcuts(Ljava/lang/String;I)V
+HSPLandroid/content/pm/IShortcutService;->removeDynamicShortcuts(Ljava/lang/String;Ljava/util/List;I)V
+HSPLandroid/content/pm/IShortcutService;->reportShortcutUsed(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/content/pm/IShortcutService;->requestPinShortcut(Ljava/lang/String;Landroid/content/pm/ShortcutInfo;Landroid/content/IntentSender;I)Z
+HSPLandroid/content/pm/IShortcutService;->resetThrottling()V
+HSPLandroid/content/pm/IShortcutService;->setDynamicShortcuts(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;I)Z
+HSPLandroid/content/pm/IShortcutService;->updateShortcuts(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;I)Z
+HSPLandroid/content/pm/InstrumentationInfo$1;-><init>()V
+HSPLandroid/content/pm/InstrumentationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/InstrumentationInfo;
+HSPLandroid/content/pm/InstrumentationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/InstrumentationInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/InstrumentationInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/InstrumentationInfo;)V
+HSPLandroid/content/pm/InstrumentationInfo;->copyTo(Landroid/content/pm/ApplicationInfo;)V
+HSPLandroid/content/pm/IntentFilterVerificationInfo$1;-><init>()V
+HSPLandroid/content/pm/IntentFilterVerificationInfo;-><init>(Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLandroid/content/pm/IntentFilterVerificationInfo;->getIntFromXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
+HSPLandroid/content/pm/IntentFilterVerificationInfo;->getPackageName()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;
+HSPLandroid/content/pm/LauncherActivityInfo;->getLabel()Ljava/lang/CharSequence;
+HSPLandroid/content/pm/LauncherActivityInfo;->getUser()Landroid/os/UserHandle;
+HSPLandroid/content/pm/LauncherApps$1;-><init>(Landroid/content/pm/LauncherApps;)V
+HSPLandroid/content/pm/LauncherApps$Callback;-><init>()V
+HSPLandroid/content/pm/LauncherApps$Callback;->onPackageAdded(Ljava/lang/String;Landroid/os/UserHandle;)V
+HSPLandroid/content/pm/LauncherApps$Callback;->onPackageChanged(Ljava/lang/String;Landroid/os/UserHandle;)V
+HSPLandroid/content/pm/LauncherApps$Callback;->onPackageRemoved(Ljava/lang/String;Landroid/os/UserHandle;)V
+HSPLandroid/content/pm/LauncherApps$Callback;->onPackagesAvailable([Ljava/lang/String;Landroid/os/UserHandle;Z)V
+HSPLandroid/content/pm/LauncherApps$Callback;->onPackagesUnavailable([Ljava/lang/String;Landroid/os/UserHandle;Z)V
+HSPLandroid/content/pm/LauncherApps$CallbackMessageHandler;->-get0(Landroid/content/pm/LauncherApps$CallbackMessageHandler;)Landroid/content/pm/LauncherApps$Callback;
+HSPLandroid/content/pm/LauncherApps$CallbackMessageHandler;-><init>(Landroid/os/Looper;Landroid/content/pm/LauncherApps$Callback;)V
+HSPLandroid/content/pm/LauncherApps$ShortcutQuery;-><init>()V
+HSPLandroid/content/pm/LauncherApps$ShortcutQuery;->setQueryFlags(I)Landroid/content/pm/LauncherApps$ShortcutQuery;
+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;->addCallbackLocked(Landroid/content/pm/LauncherApps$Callback;Landroid/os/Handler;)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;->getShortcutConfigActivityList(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;
+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;->logErrorForInvalidProfileAccess(Landroid/os/UserHandle;)V
+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;->removeCallbackLocked(Landroid/content/pm/LauncherApps$Callback;)V
+HSPLandroid/content/pm/LauncherApps;->resolveActivity(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/pm/LauncherActivityInfo;
+HSPLandroid/content/pm/PackageInfo$1;-><init>()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;)V
+HSPLandroid/content/pm/PackageInfo;->propagateApplicationInfo(Landroid/content/pm/ApplicationInfo;[Landroid/content/pm/ComponentInfo;)V
+HSPLandroid/content/pm/PackageInstaller$SessionCallback;-><init>()V
+HSPLandroid/content/pm/PackageInstaller$SessionCallback;->onActiveChanged(IZ)V
+HSPLandroid/content/pm/PackageInstaller$SessionCallback;->onBadgingChanged(I)V
+HSPLandroid/content/pm/PackageInstaller$SessionCallback;->onCreated(I)V
+HSPLandroid/content/pm/PackageInstaller$SessionCallback;->onFinished(IZ)V
+HSPLandroid/content/pm/PackageInstaller$SessionCallback;->onProgressChanged(IF)V
+HSPLandroid/content/pm/PackageInstaller$SessionCallbackDelegate;-><init>(Landroid/content/pm/PackageInstaller$SessionCallback;Landroid/os/Looper;)V
+HSPLandroid/content/pm/PackageInstaller;-><init>(Landroid/content/pm/IPackageInstaller;Ljava/lang/String;I)V
+HSPLandroid/content/pm/PackageInstaller;->getAllSessions()Ljava/util/List;
+HSPLandroid/content/pm/PackageInstaller;->getMySessions()Ljava/util/List;
+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
+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;->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$MoveCallback;-><init>()V
+HSPLandroid/content/pm/PackageManager$MoveCallback;->onStatusChanged(IIJ)V
+HSPLandroid/content/pm/PackageManager$NameNotFoundException;-><init>(Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageManager$OnPermissionsChangedListener;->onPermissionsChanged(I)V
+HSPLandroid/content/pm/PackageManager;-><init>()V
+HSPLandroid/content/pm/PackageManager;->addCrossProfileIntentFilter(Landroid/content/IntentFilter;III)V
+HSPLandroid/content/pm/PackageManager;->addOnPermissionsChangeListener(Landroid/content/pm/PackageManager$OnPermissionsChangedListener;)V
+HSPLandroid/content/pm/PackageManager;->addPackageToPreferred(Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageManager;->addPermission(Landroid/content/pm/PermissionInfo;)Z
+HSPLandroid/content/pm/PackageManager;->addPermissionAsync(Landroid/content/pm/PermissionInfo;)Z
+HSPLandroid/content/pm/PackageManager;->addPreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;)V
+HSPLandroid/content/pm/PackageManager;->canRequestPackageInstalls()Z
+HSPLandroid/content/pm/PackageManager;->canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/content/pm/PackageManager;->checkPermission(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/content/pm/PackageManager;->checkSignatures(II)I
+HSPLandroid/content/pm/PackageManager;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/content/pm/PackageManager;->clearApplicationUserData(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)V
+HSPLandroid/content/pm/PackageManager;->clearCrossProfileIntentFilters(I)V
+HSPLandroid/content/pm/PackageManager;->clearInstantAppCookie()V
+HSPLandroid/content/pm/PackageManager;->clearPackagePreferredActivities(Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageManager;->currentToCanonicalPackageNames([Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/content/pm/PackageManager;->deleteApplicationCacheFiles(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)V
+HSPLandroid/content/pm/PackageManager;->deleteApplicationCacheFilesAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageDataObserver;)V
+HSPLandroid/content/pm/PackageManager;->deletePackage(Ljava/lang/String;Landroid/content/pm/IPackageDeleteObserver;I)V
+HSPLandroid/content/pm/PackageManager;->deletePackageAsUser(Ljava/lang/String;Landroid/content/pm/IPackageDeleteObserver;II)V
+HSPLandroid/content/pm/PackageManager;->extendVerificationTimeout(IIJ)V
+HSPLandroid/content/pm/PackageManager;->flushPackageRestrictionsAsUser(I)V
+HSPLandroid/content/pm/PackageManager;->freeStorage(Ljava/lang/String;JLandroid/content/IntentSender;)V
+HSPLandroid/content/pm/PackageManager;->freeStorageAndNotify(Ljava/lang/String;JLandroid/content/pm/IPackageDataObserver;)V
+HSPLandroid/content/pm/PackageManager;->getActivityBanner(Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getActivityBanner(Landroid/content/Intent;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getActivityIcon(Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getActivityIcon(Landroid/content/Intent;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getActivityInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
+HSPLandroid/content/pm/PackageManager;->getActivityLogo(Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getActivityLogo(Landroid/content/Intent;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getAllIntentFilters(Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getAllPermissionGroups(I)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getApplicationBanner(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getApplicationBanner(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getApplicationEnabledSetting(Ljava/lang/String;)I
+HSPLandroid/content/pm/PackageManager;->getApplicationHiddenSettingAsUser(Ljava/lang/String;Landroid/os/UserHandle;)Z
+HSPLandroid/content/pm/PackageManager;->getApplicationIcon(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getApplicationIcon(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
+HSPLandroid/content/pm/PackageManager;->getApplicationInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo;
+HSPLandroid/content/pm/PackageManager;->getApplicationLabel(Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;
+HSPLandroid/content/pm/PackageManager;->getApplicationLogo(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getApplicationLogo(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getChangedPackages(I)Landroid/content/pm/ChangedPackages;
+HSPLandroid/content/pm/PackageManager;->getComponentEnabledSetting(Landroid/content/ComponentName;)I
+HSPLandroid/content/pm/PackageManager;->getDefaultActivityIcon()Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getDefaultBrowserPackageNameAsUser(I)Ljava/lang/String;
+HSPLandroid/content/pm/PackageManager;->getDrawable(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getHomeActivities(Ljava/util/List;)Landroid/content/ComponentName;
+HSPLandroid/content/pm/PackageManager;->getInstallReason(Ljava/lang/String;Landroid/os/UserHandle;)I
+HSPLandroid/content/pm/PackageManager;->getInstalledApplications(I)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getInstalledApplicationsAsUser(II)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getInstalledPackages(I)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getInstalledPackagesAsUser(II)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/content/pm/PackageManager;->getInstantAppAndroidId(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/lang/String;
+HSPLandroid/content/pm/PackageManager;->getInstantAppCookie()[B
+HSPLandroid/content/pm/PackageManager;->getInstantAppCookieMaxBytes()I
+HSPLandroid/content/pm/PackageManager;->getInstantAppCookieMaxSize()I
+HSPLandroid/content/pm/PackageManager;->getInstantAppIcon(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getInstantAppInstallerComponent()Landroid/content/ComponentName;
+HSPLandroid/content/pm/PackageManager;->getInstantAppResolverSettingsComponent()Landroid/content/ComponentName;
+HSPLandroid/content/pm/PackageManager;->getInstantApps()Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo;
+HSPLandroid/content/pm/PackageManager;->getIntentFilterVerifications(Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getIntentVerificationStatusAsUser(Ljava/lang/String;I)I
+HSPLandroid/content/pm/PackageManager;->getKeySetByAlias(Ljava/lang/String;Ljava/lang/String;)Landroid/content/pm/KeySet;
+HSPLandroid/content/pm/PackageManager;->getLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;
+HSPLandroid/content/pm/PackageManager;->getLeanbackLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;
+HSPLandroid/content/pm/PackageManager;->getMoveStatus(I)I
+HSPLandroid/content/pm/PackageManager;->getNameForUid(I)Ljava/lang/String;
+HSPLandroid/content/pm/PackageManager;->getNamesForUids([I)[Ljava/lang/String;
+HSPLandroid/content/pm/PackageManager;->getPackageCandidateVolumes(Landroid/content/pm/ApplicationInfo;)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getPackageCurrentVolume(Landroid/content/pm/ApplicationInfo;)Landroid/os/storage/VolumeInfo;
+HSPLandroid/content/pm/PackageManager;->getPackageGids(Ljava/lang/String;)[I
+HSPLandroid/content/pm/PackageManager;->getPackageGids(Ljava/lang/String;I)[I
+HSPLandroid/content/pm/PackageManager;->getPackageInfo(Landroid/content/pm/VersionedPackage;I)Landroid/content/pm/PackageInfo;
+HSPLandroid/content/pm/PackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
+HSPLandroid/content/pm/PackageManager;->getPackageInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/PackageInfo;
+HSPLandroid/content/pm/PackageManager;->getPackageInstaller()Landroid/content/pm/PackageInstaller;
+HSPLandroid/content/pm/PackageManager;->getPackageSizeInfoAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageStatsObserver;)V
+HSPLandroid/content/pm/PackageManager;->getPackageUid(Ljava/lang/String;I)I
+HSPLandroid/content/pm/PackageManager;->getPackageUidAsUser(Ljava/lang/String;I)I
+HSPLandroid/content/pm/PackageManager;->getPackageUidAsUser(Ljava/lang/String;II)I
+HSPLandroid/content/pm/PackageManager;->getPackagesForUid(I)[Ljava/lang/String;
+HSPLandroid/content/pm/PackageManager;->getPackagesHoldingPermissions([Ljava/lang/String;I)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getPermissionControllerPackageName()Ljava/lang/String;
+HSPLandroid/content/pm/PackageManager;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)I
+HSPLandroid/content/pm/PackageManager;->getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo;
+HSPLandroid/content/pm/PackageManager;->getPermissionInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;
+HSPLandroid/content/pm/PackageManager;->getPreferredActivities(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I
+HSPLandroid/content/pm/PackageManager;->getPreferredPackages(I)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getPrimaryStorageCandidateVolumes()Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getPrimaryStorageCurrentVolume()Landroid/os/storage/VolumeInfo;
+HSPLandroid/content/pm/PackageManager;->getProviderInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ProviderInfo;
+HSPLandroid/content/pm/PackageManager;->getReceiverInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
+HSPLandroid/content/pm/PackageManager;->getResourcesForActivity(Landroid/content/ComponentName;)Landroid/content/res/Resources;
+HSPLandroid/content/pm/PackageManager;->getResourcesForApplication(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/Resources;
+HSPLandroid/content/pm/PackageManager;->getResourcesForApplication(Ljava/lang/String;)Landroid/content/res/Resources;
+HSPLandroid/content/pm/PackageManager;->getResourcesForApplicationAsUser(Ljava/lang/String;I)Landroid/content/res/Resources;
+HSPLandroid/content/pm/PackageManager;->getServiceInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;
+HSPLandroid/content/pm/PackageManager;->getServicesSystemSharedLibraryPackageName()Ljava/lang/String;
+HSPLandroid/content/pm/PackageManager;->getSharedLibraries(I)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getSharedLibrariesAsUser(II)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->getSharedSystemSharedLibraryPackageName()Ljava/lang/String;
+HSPLandroid/content/pm/PackageManager;->getSigningKeySet(Ljava/lang/String;)Landroid/content/pm/KeySet;
+HSPLandroid/content/pm/PackageManager;->getSystemAvailableFeatures()[Landroid/content/pm/FeatureInfo;
+HSPLandroid/content/pm/PackageManager;->getSystemSharedLibraryNames()[Ljava/lang/String;
+HSPLandroid/content/pm/PackageManager;->getText(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;
+HSPLandroid/content/pm/PackageManager;->getUidForSharedUser(Ljava/lang/String;)I
+HSPLandroid/content/pm/PackageManager;->getUserBadgeForDensity(Landroid/os/UserHandle;I)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getUserBadgeForDensityNoBackground(Landroid/os/UserHandle;I)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getUserBadgedDrawableForDensity(Landroid/graphics/drawable/Drawable;Landroid/os/UserHandle;Landroid/graphics/Rect;I)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getUserBadgedIcon(Landroid/graphics/drawable/Drawable;Landroid/os/UserHandle;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->getUserBadgedLabel(Ljava/lang/CharSequence;Landroid/os/UserHandle;)Ljava/lang/CharSequence;
+HSPLandroid/content/pm/PackageManager;->getVerifierDeviceIdentity()Landroid/content/pm/VerifierDeviceIdentity;
+HSPLandroid/content/pm/PackageManager;->getXml(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/content/res/XmlResourceParser;
+HSPLandroid/content/pm/PackageManager;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)V
+HSPLandroid/content/pm/PackageManager;->hasSystemFeature(Ljava/lang/String;)Z
+HSPLandroid/content/pm/PackageManager;->hasSystemFeature(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/PackageManager;->installExistingPackage(Ljava/lang/String;)I
+HSPLandroid/content/pm/PackageManager;->installExistingPackage(Ljava/lang/String;I)I
+HSPLandroid/content/pm/PackageManager;->installExistingPackageAsUser(Ljava/lang/String;I)I
+HSPLandroid/content/pm/PackageManager;->installPackage(Landroid/net/Uri;Landroid/app/PackageInstallObserver;ILjava/lang/String;)V
+HSPLandroid/content/pm/PackageManager;->installPackage(Landroid/net/Uri;Landroid/content/pm/IPackageInstallObserver;ILjava/lang/String;)V
+HSPLandroid/content/pm/PackageManager;->isInstantApp()Z
+HSPLandroid/content/pm/PackageManager;->isInstantApp(Ljava/lang/String;)Z
+HSPLandroid/content/pm/PackageManager;->isPackageAvailable(Ljava/lang/String;)Z
+HSPLandroid/content/pm/PackageManager;->isPackageSuspendedForUser(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/PackageManager;->isPermissionReviewModeEnabled()Z
+HSPLandroid/content/pm/PackageManager;->isPermissionRevokedByPolicy(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/content/pm/PackageManager;->isSafeMode()Z
+HSPLandroid/content/pm/PackageManager;->isSignedBy(Ljava/lang/String;Landroid/content/pm/KeySet;)Z
+HSPLandroid/content/pm/PackageManager;->isSignedByExactly(Ljava/lang/String;Landroid/content/pm/KeySet;)Z
+HSPLandroid/content/pm/PackageManager;->isUpgrade()Z
+HSPLandroid/content/pm/PackageManager;->loadItemIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->loadUnbadgedItemIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/pm/PackageManager;->movePackage(Ljava/lang/String;Landroid/os/storage/VolumeInfo;)I
+HSPLandroid/content/pm/PackageManager;->movePrimaryStorage(Landroid/os/storage/VolumeInfo;)I
+HSPLandroid/content/pm/PackageManager;->queryBroadcastReceivers(Landroid/content/Intent;I)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->queryBroadcastReceiversAsUser(Landroid/content/Intent;II)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->queryContentProviders(Ljava/lang/String;II)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->queryInstrumentation(Ljava/lang/String;I)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->queryIntentActivities(Landroid/content/Intent;I)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->queryIntentActivitiesAsUser(Landroid/content/Intent;II)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->queryIntentActivityOptions(Landroid/content/ComponentName;[Landroid/content/Intent;Landroid/content/Intent;I)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->queryIntentContentProviders(Landroid/content/Intent;I)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->queryIntentContentProvidersAsUser(Landroid/content/Intent;II)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->queryIntentServices(Landroid/content/Intent;I)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->queryIntentServicesAsUser(Landroid/content/Intent;II)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->queryPermissionsByGroup(Ljava/lang/String;I)Ljava/util/List;
+HSPLandroid/content/pm/PackageManager;->registerDexModule(Ljava/lang/String;Landroid/content/pm/PackageManager$DexModuleRegisterCallback;)V
+HSPLandroid/content/pm/PackageManager;->registerMoveCallback(Landroid/content/pm/PackageManager$MoveCallback;Landroid/os/Handler;)V
+HSPLandroid/content/pm/PackageManager;->removeOnPermissionsChangeListener(Landroid/content/pm/PackageManager$OnPermissionsChangedListener;)V
+HSPLandroid/content/pm/PackageManager;->removePackageFromPreferred(Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageManager;->removePermission(Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageManager;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;)V
+HSPLandroid/content/pm/PackageManager;->resolveActivity(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;
+HSPLandroid/content/pm/PackageManager;->resolveActivityAsUser(Landroid/content/Intent;II)Landroid/content/pm/ResolveInfo;
+HSPLandroid/content/pm/PackageManager;->resolveContentProvider(Ljava/lang/String;I)Landroid/content/pm/ProviderInfo;
+HSPLandroid/content/pm/PackageManager;->resolveContentProviderAsUser(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
+HSPLandroid/content/pm/PackageManager;->resolveService(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;
+HSPLandroid/content/pm/PackageManager;->revokeRuntimePermission(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)V
+HSPLandroid/content/pm/PackageManager;->setApplicationCategoryHint(Ljava/lang/String;I)V
+HSPLandroid/content/pm/PackageManager;->setApplicationEnabledSetting(Ljava/lang/String;II)V
+HSPLandroid/content/pm/PackageManager;->setApplicationHiddenSettingAsUser(Ljava/lang/String;ZLandroid/os/UserHandle;)Z
+HSPLandroid/content/pm/PackageManager;->setComponentEnabledSetting(Landroid/content/ComponentName;II)V
+HSPLandroid/content/pm/PackageManager;->setDefaultBrowserPackageNameAsUser(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/PackageManager;->setInstallerPackageName(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageManager;->setInstantAppCookie([B)Z
+HSPLandroid/content/pm/PackageManager;->setPackagesSuspendedAsUser([Ljava/lang/String;ZI)[Ljava/lang/String;
+HSPLandroid/content/pm/PackageManager;->setUpdateAvailable(Ljava/lang/String;Z)V
+HSPLandroid/content/pm/PackageManager;->shouldShowRequestPermissionRationale(Ljava/lang/String;)Z
+HSPLandroid/content/pm/PackageManager;->unregisterMoveCallback(Landroid/content/pm/PackageManager$MoveCallback;)V
+HSPLandroid/content/pm/PackageManager;->updateInstantAppCookie([B)V
+HSPLandroid/content/pm/PackageManager;->updateIntentVerificationStatusAsUser(Ljava/lang/String;II)Z
+HSPLandroid/content/pm/PackageManager;->updatePermissionFlags(Ljava/lang/String;Ljava/lang/String;IILandroid/os/UserHandle;)V
+HSPLandroid/content/pm/PackageManager;->verifyIntentFilter(IILjava/util/List;)V
+HSPLandroid/content/pm/PackageManager;->verifyPendingInstall(II)V
+HSPLandroid/content/pm/PackageParser$Activity$1;-><init>()V
+HSPLandroid/content/pm/PackageParser$Activity$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageParser$Activity;
+HSPLandroid/content/pm/PackageParser$Activity$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/PackageParser$Activity;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PackageParser$Activity;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageParser$Activity;)V
+HSPLandroid/content/pm/PackageParser$ActivityIntentInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PackageParser$Callback;->getOverlayApks(Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/content/pm/PackageParser$Callback;->getOverlayPaths(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/content/pm/PackageParser$Callback;->hasFeature(Ljava/lang/String;)Z
+HSPLandroid/content/pm/PackageParser$Component;-><init>(Landroid/content/pm/PackageParser$Package;)V
+HSPLandroid/content/pm/PackageParser$Component;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PackageParser$Component;->createIntentsList(Landroid/os/Parcel;)Ljava/util/ArrayList;
+HSPLandroid/content/pm/PackageParser$Component;->getComponentName()Landroid/content/ComponentName;
+HSPLandroid/content/pm/PackageParser$Instrumentation$1;-><init>()V
+HSPLandroid/content/pm/PackageParser$Instrumentation$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageParser$Instrumentation;
+HSPLandroid/content/pm/PackageParser$Instrumentation$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/PackageParser$Instrumentation;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PackageParser$Instrumentation;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageParser$Instrumentation;)V
+HSPLandroid/content/pm/PackageParser$IntentInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PackageParser$NewPermissionInfo;-><init>(Ljava/lang/String;II)V
+HSPLandroid/content/pm/PackageParser$Package$1;-><init>()V
+HSPLandroid/content/pm/PackageParser$Package;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PackageParser$Package;->fixupOwner(Ljava/util/List;)V
+HSPLandroid/content/pm/PackageParser$Package;->getChildPackageNames()Ljava/util/List;
+HSPLandroid/content/pm/PackageParser$Package;->internStringArrayList(Ljava/util/List;)V
+HSPLandroid/content/pm/PackageParser$Package;->isPrivilegedApp()Z
+HSPLandroid/content/pm/PackageParser$Package;->isSystemApp()Z
+HSPLandroid/content/pm/PackageParser$Package;->isUpdatedSystemApp()Z
+HSPLandroid/content/pm/PackageParser$Package;->readKeySetMapping(Landroid/os/Parcel;)Landroid/util/ArrayMap;
+HSPLandroid/content/pm/PackageParser$Package;->setApplicationInfoBaseCodePath(Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageParser$Package;->setApplicationInfoBaseResourcePath(Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageParser$Package;->setApplicationInfoCodePath(Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageParser$Package;->setApplicationInfoResourcePath(Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageParser$Package;->setApplicationInfoSplitCodePaths([Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageParser$Package;->setApplicationInfoSplitResourcePaths([Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageParser$Package;->setApplicationVolumeUuid(Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageParser$PackageParserException;-><init>(ILjava/lang/String;)V
+HSPLandroid/content/pm/PackageParser$Permission$1;-><init>()V
+HSPLandroid/content/pm/PackageParser$Permission$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageParser$Permission;
+HSPLandroid/content/pm/PackageParser$Permission$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/PackageParser$Permission;-><init>(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PermissionInfo;)V
+HSPLandroid/content/pm/PackageParser$Permission;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PackageParser$Permission;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageParser$Permission;)V
+HSPLandroid/content/pm/PackageParser$PermissionGroup$1;-><init>()V
+HSPLandroid/content/pm/PackageParser$PermissionGroup$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageParser$PermissionGroup;
+HSPLandroid/content/pm/PackageParser$PermissionGroup$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/PackageParser$PermissionGroup;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PackageParser$PermissionGroup;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageParser$PermissionGroup;)V
+HSPLandroid/content/pm/PackageParser$Provider$1;-><init>()V
+HSPLandroid/content/pm/PackageParser$Provider$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageParser$Provider;
+HSPLandroid/content/pm/PackageParser$Provider$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/PackageParser$Provider;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PackageParser$Provider;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageParser$Provider;)V
+HSPLandroid/content/pm/PackageParser$ProviderIntentInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PackageParser$Service$1;-><init>()V
+HSPLandroid/content/pm/PackageParser$Service$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageParser$Service;
+HSPLandroid/content/pm/PackageParser$Service$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/PackageParser$Service;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PackageParser$Service;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageParser$Service;)V
+HSPLandroid/content/pm/PackageParser$ServiceIntentInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PackageParser$SplitNameComparator;-><init>()V
+HSPLandroid/content/pm/PackageParser$SplitNameComparator;-><init>(Landroid/content/pm/PackageParser$SplitNameComparator;)V
+HSPLandroid/content/pm/PackageParser$SplitPermissionInfo;-><init>(Ljava/lang/String;[Ljava/lang/String;I)V
+HSPLandroid/content/pm/PackageParser;-><init>()V
+HSPLandroid/content/pm/PackageParser;->checkUseInstalledOrHidden(ILandroid/content/pm/PackageUserState;Landroid/content/pm/ApplicationInfo;)Z
+HSPLandroid/content/pm/PackageParser;->closeQuietly(Landroid/util/jar/StrictJarFile;)V
+HSPLandroid/content/pm/PackageParser;->collectCertificates(Landroid/content/pm/PackageParser$Package;I)V
+HSPLandroid/content/pm/PackageParser;->collectCertificates(Landroid/content/pm/PackageParser$Package;Ljava/io/File;I)V
+HSPLandroid/content/pm/PackageParser;->collectCertificatesInternal(Landroid/content/pm/PackageParser$Package;I)V
+HSPLandroid/content/pm/PackageParser;->convertToSignatures([[Ljava/security/cert/Certificate;)[Landroid/content/pm/Signature;
+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/PackageParser$Package;
+HSPLandroid/content/pm/PackageParser;->fromCacheEntryStatic([B)Landroid/content/pm/PackageParser$Package;
+HSPLandroid/content/pm/PackageParser;->generateActivityInfo(Landroid/content/pm/PackageParser$Activity;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ActivityInfo;
+HSPLandroid/content/pm/PackageParser;->getCacheKey(Ljava/io/File;I)Ljava/lang/String;
+HSPLandroid/content/pm/PackageParser;->getCachedResult(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package;
+HSPLandroid/content/pm/PackageParser;->isApkFile(Ljava/io/File;)Z
+HSPLandroid/content/pm/PackageParser;->isApkPath(Ljava/lang/String;)Z
+HSPLandroid/content/pm/PackageParser;->isCacheUpToDate(Ljava/io/File;Ljava/io/File;)Z
+HSPLandroid/content/pm/PackageParser;->parseClusterPackage(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package;
+HSPLandroid/content/pm/PackageParser;->parseClusterPackageLite(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;->parsePublicKey(Ljava/lang/String;)Ljava/security/PublicKey;
+HSPLandroid/content/pm/PackageParser;->setCacheDir(Ljava/io/File;)V
+HSPLandroid/content/pm/PackageParser;->setCallback(Landroid/content/pm/PackageParser$Callback;)V
+HSPLandroid/content/pm/PackageParser;->setDisplayMetrics(Landroid/util/DisplayMetrics;)V
+HSPLandroid/content/pm/PackageParser;->setOnlyCoreApps(Z)V
+HSPLandroid/content/pm/PackageParser;->setSeparateProcesses([Ljava/lang/String;)V
+HSPLandroid/content/pm/PackageParser;->updateApplicationInfo(Landroid/content/pm/ApplicationInfo;ILandroid/content/pm/PackageUserState;)V
+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/PackageUserState;-><init>()V
+HSPLandroid/content/pm/PackageUserState;->equals(Ljava/lang/Object;)Z
+HSPLandroid/content/pm/PackageUserState;->isAvailable(I)Z
+HSPLandroid/content/pm/PackageUserState;->isEnabled(Landroid/content/pm/ComponentInfo;I)Z
+HSPLandroid/content/pm/PackageUserState;->isMatch(Landroid/content/pm/ComponentInfo;I)Z
+HSPLandroid/content/pm/ParceledListSlice$1;-><init>()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;
+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;)V
+HSPLandroid/content/pm/ParceledListSlice;-><init>(Ljava/util/List;)V
+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;->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
+HSPLandroid/content/pm/ParceledListSlice;->writeParcelableCreator(Ljava/lang/Object;Landroid/os/Parcel;)V
+HSPLandroid/content/pm/ParceledListSlice;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/PathPermission$1;-><init>()V
+HSPLandroid/content/pm/PathPermission$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PathPermission;
+HSPLandroid/content/pm/PathPermission$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+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;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/PermissionGroupInfo$1;-><init>()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;
+HSPLandroid/content/pm/PermissionGroupInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PermissionGroupInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/PermissionGroupInfo;)V
+HSPLandroid/content/pm/PermissionInfo$1;-><init>()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;-><init>()V
+HSPLandroid/content/pm/PermissionInfo;-><init>(Landroid/content/pm/PermissionInfo;)V
+HSPLandroid/content/pm/PermissionInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/PermissionInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/PermissionInfo;)V
+HSPLandroid/content/pm/PermissionInfo;->fixProtectionLevel(I)I
+HSPLandroid/content/pm/ProviderInfo$1;-><init>()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>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/ProviderInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ProviderInfo;)V
+HSPLandroid/content/pm/ProviderInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/ResolveInfo$1;-><init>()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
+HSPLandroid/content/pm/ResolveInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/ResolveInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ResolveInfo;)V
+HSPLandroid/content/pm/ResolveInfo;->getComponentInfo()Landroid/content/pm/ComponentInfo;
+HSPLandroid/content/pm/SELinuxUtil;->assignSeinfoUser(Landroid/content/pm/PackageUserState;)Ljava/lang/String;
+HSPLandroid/content/pm/ServiceInfo$1;-><init>()V
+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>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/ServiceInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ServiceInfo;)V
+HSPLandroid/content/pm/SharedLibraryInfo$1;-><init>()V
+HSPLandroid/content/pm/SharedLibraryInfo;-><init>(Ljava/lang/String;IILandroid/content/pm/VersionedPackage;Ljava/util/List;)V
+HSPLandroid/content/pm/ShortcutInfo$1;-><init>()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;->-get0(Landroid/content/pm/ShortcutInfo$Builder;)Landroid/content/ComponentName;
+HSPLandroid/content/pm/ShortcutInfo$Builder;->-get1(Landroid/content/pm/ShortcutInfo$Builder;)Ljava/util/Set;
+HSPLandroid/content/pm/ShortcutInfo$Builder;->-get10(Landroid/content/pm/ShortcutInfo$Builder;)Ljava/lang/CharSequence;
+HSPLandroid/content/pm/ShortcutInfo$Builder;->-get11(Landroid/content/pm/ShortcutInfo$Builder;)I
+HSPLandroid/content/pm/ShortcutInfo$Builder;->-get12(Landroid/content/pm/ShortcutInfo$Builder;)Ljava/lang/CharSequence;
+HSPLandroid/content/pm/ShortcutInfo$Builder;->-get13(Landroid/content/pm/ShortcutInfo$Builder;)I
+HSPLandroid/content/pm/ShortcutInfo$Builder;->-get2(Landroid/content/pm/ShortcutInfo$Builder;)Landroid/content/Context;
+HSPLandroid/content/pm/ShortcutInfo$Builder;->-get3(Landroid/content/pm/ShortcutInfo$Builder;)Ljava/lang/CharSequence;
+HSPLandroid/content/pm/ShortcutInfo$Builder;->-get4(Landroid/content/pm/ShortcutInfo$Builder;)I
+HSPLandroid/content/pm/ShortcutInfo$Builder;->-get5(Landroid/content/pm/ShortcutInfo$Builder;)Landroid/os/PersistableBundle;
+HSPLandroid/content/pm/ShortcutInfo$Builder;->-get6(Landroid/content/pm/ShortcutInfo$Builder;)Landroid/graphics/drawable/Icon;
+HSPLandroid/content/pm/ShortcutInfo$Builder;->-get7(Landroid/content/pm/ShortcutInfo$Builder;)Ljava/lang/String;
+HSPLandroid/content/pm/ShortcutInfo$Builder;->-get8(Landroid/content/pm/ShortcutInfo$Builder;)[Landroid/content/Intent;
+HSPLandroid/content/pm/ShortcutInfo$Builder;->-get9(Landroid/content/pm/ShortcutInfo$Builder;)I
+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;->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;->setShortLabel(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;
+HSPLandroid/content/pm/ShortcutInfo;->-wrap0([Landroid/content/Intent;)[Landroid/content/Intent;
+HSPLandroid/content/pm/ShortcutInfo;-><init>(Landroid/content/pm/ShortcutInfo$Builder;)V
+HSPLandroid/content/pm/ShortcutInfo;-><init>(Landroid/content/pm/ShortcutInfo$Builder;Landroid/content/pm/ShortcutInfo;)V
+HSPLandroid/content/pm/ShortcutInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/ShortcutInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ShortcutInfo;)V
+HSPLandroid/content/pm/ShortcutInfo;->cloneCategories(Ljava/util/Set;)Landroid/util/ArraySet;
+HSPLandroid/content/pm/ShortcutInfo;->cloneIntents([Landroid/content/Intent;)[Landroid/content/Intent;
+HSPLandroid/content/pm/ShortcutInfo;->fixUpIntentExtras()V
+HSPLandroid/content/pm/ShortcutInfo;->getActivity()Landroid/content/ComponentName;
+HSPLandroid/content/pm/ShortcutInfo;->getId()Ljava/lang/String;
+HSPLandroid/content/pm/ShortcutInfo;->getUserHandle()Landroid/os/UserHandle;
+HSPLandroid/content/pm/ShortcutInfo;->hasFlags(I)Z
+HSPLandroid/content/pm/ShortcutInfo;->hasKeyFieldsOnly()Z
+HSPLandroid/content/pm/ShortcutInfo;->isDeclaredInManifest()Z
+HSPLandroid/content/pm/ShortcutInfo;->isDynamic()Z
+HSPLandroid/content/pm/ShortcutInfo;->isEnabled()Z
+HSPLandroid/content/pm/ShortcutInfo;->updateTimestamp()V
+HSPLandroid/content/pm/ShortcutInfo;->validateIcon(Landroid/graphics/drawable/Icon;)Landroid/graphics/drawable/Icon;
+HSPLandroid/content/pm/ShortcutInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/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;
+HSPLandroid/content/pm/ShortcutManager;->getManifestShortcuts()Ljava/util/List;
+HSPLandroid/content/pm/ShortcutManager;->getMaxShortcutCountPerActivity()I
+HSPLandroid/content/pm/ShortcutManager;->getPinnedShortcuts()Ljava/util/List;
+HSPLandroid/content/pm/ShortcutManager;->injectMyUserId()I
+HSPLandroid/content/pm/ShortcutManager;->isRequestPinShortcutSupported()Z
+HSPLandroid/content/pm/ShortcutManager;->setDynamicShortcuts(Ljava/util/List;)Z
+HSPLandroid/content/pm/ShortcutManager;->updateShortcuts(Ljava/util/List;)Z
+HSPLandroid/content/pm/Signature$1;-><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;
+HSPLandroid/content/pm/Signature;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/Signature;-><init>(Landroid/os/Parcel;Landroid/content/pm/Signature;)V
+HSPLandroid/content/pm/Signature;-><init>(Ljava/lang/String;)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;->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;
+HSPLandroid/content/pm/UserInfo$1;-><init>()V
+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;I)V
+HSPLandroid/content/pm/UserInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/UserInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/UserInfo;)V
+HSPLandroid/content/pm/UserInfo;->getUserHandle()Landroid/os/UserHandle;
+HSPLandroid/content/pm/UserInfo;->isAdmin()Z
+HSPLandroid/content/pm/UserInfo;->isEnabled()Z
+HSPLandroid/content/pm/UserInfo;->isEphemeral()Z
+HSPLandroid/content/pm/UserInfo;->isGuest()Z
+HSPLandroid/content/pm/UserInfo;->isManagedProfile()Z
+HSPLandroid/content/pm/UserInfo;->isRestricted()Z
+HSPLandroid/content/pm/UserInfo;->supportsSwitchTo()Z
+HSPLandroid/content/pm/UserInfo;->supportsSwitchToByUser()Z
+HSPLandroid/content/pm/VersionedPackage$1;-><init>()V
+HSPLandroid/content/pm/VersionedPackage;-><init>(Ljava/lang/String;I)V
+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
+HSPLandroid/content/res/AssetFileDescriptor;-><init>(Landroid/os/ParcelFileDescriptor;JJ)V
+HSPLandroid/content/res/AssetFileDescriptor;-><init>(Landroid/os/ParcelFileDescriptor;JJLandroid/os/Bundle;)V
+HSPLandroid/content/res/AssetFileDescriptor;->close()V
+HSPLandroid/content/res/AssetFileDescriptor;->getDeclaredLength()J
+HSPLandroid/content/res/AssetFileDescriptor;->getFileDescriptor()Ljava/io/FileDescriptor;
+HSPLandroid/content/res/AssetFileDescriptor;->getLength()J
+HSPLandroid/content/res/AssetFileDescriptor;->getParcelFileDescriptor()Landroid/os/ParcelFileDescriptor;
+HSPLandroid/content/res/AssetFileDescriptor;->getStartOffset()J
+HSPLandroid/content/res/AssetManager$AssetInputStream;-><init>(Landroid/content/res/AssetManager;J)V
+HSPLandroid/content/res/AssetManager$AssetInputStream;-><init>(Landroid/content/res/AssetManager;JLandroid/content/res/AssetManager$AssetInputStream;)V
+HSPLandroid/content/res/AssetManager$AssetInputStream;->available()I
+HSPLandroid/content/res/AssetManager$AssetInputStream;->close()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;->-wrap0(Landroid/content/res/AssetManager;J)I
+HSPLandroid/content/res/AssetManager;->-wrap1(Landroid/content/res/AssetManager;J[BII)I
+HSPLandroid/content/res/AssetManager;->-wrap2(Landroid/content/res/AssetManager;J)J
+HSPLandroid/content/res/AssetManager;->-wrap3(Landroid/content/res/AssetManager;J)J
+HSPLandroid/content/res/AssetManager;->-wrap4(Landroid/content/res/AssetManager;JJI)J
+HSPLandroid/content/res/AssetManager;->-wrap5(Landroid/content/res/AssetManager;J)V
+HSPLandroid/content/res/AssetManager;->-wrap6(Landroid/content/res/AssetManager;J)V
+HSPLandroid/content/res/AssetManager;-><init>()V
+HSPLandroid/content/res/AssetManager;->addAssetPath(Ljava/lang/String;)I
+HSPLandroid/content/res/AssetManager;->addAssetPathAsSharedLibrary(Ljava/lang/String;)I
+HSPLandroid/content/res/AssetManager;->addAssetPathInternal(Ljava/lang/String;Z)I
+HSPLandroid/content/res/AssetManager;->addOverlayPath(Ljava/lang/String;)I
+HSPLandroid/content/res/AssetManager;->createTheme()J
+HSPLandroid/content/res/AssetManager;->decRefsLocked(J)V
+HSPLandroid/content/res/AssetManager;->ensureStringBlocks()[Landroid/content/res/StringBlock;
+HSPLandroid/content/res/AssetManager;->ensureSystemAssets()V
+HSPLandroid/content/res/AssetManager;->finalize()V
+HSPLandroid/content/res/AssetManager;->getPooledStringForCookie(II)Ljava/lang/CharSequence;
+HSPLandroid/content/res/AssetManager;->getResourceBagText(II)Ljava/lang/CharSequence;
+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;->getResourceValue(IILandroid/util/TypedValue;Z)Z
+HSPLandroid/content/res/AssetManager;->getThemeValue(JILandroid/util/TypedValue;Z)Z
+HSPLandroid/content/res/AssetManager;->incRefsLocked(J)V
+HSPLandroid/content/res/AssetManager;->makeStringBlocks([Landroid/content/res/StringBlock;)V
+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;->releaseTheme(J)V
+HSPLandroid/content/res/AssetManager;->xmlBlockGone(I)V
+HSPLandroid/content/res/ColorStateList$ColorStateListFactory;-><init>(Landroid/content/res/ColorStateList;)V
+HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance()Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance()Ljava/lang/Object;
+HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;
+HSPLandroid/content/res/ColorStateList;-><init>()V
+HSPLandroid/content/res/ColorStateList;-><init>(Landroid/content/res/ColorStateList;)V
+HSPLandroid/content/res/ColorStateList;-><init>([[I[I)V
+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;
+HSPLandroid/content/res/ColorStateList;->getChangingConfigurations()I
+HSPLandroid/content/res/ColorStateList;->getColorForState([II)I
+HSPLandroid/content/res/ColorStateList;->getConstantState()Landroid/content/res/ConstantState;
+HSPLandroid/content/res/ColorStateList;->getDefaultColor()I
+HSPLandroid/content/res/ColorStateList;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/content/res/ColorStateList;->isStateful()Z
+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
+HSPLandroid/content/res/ColorStateList;->valueOf(I)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/ColorStateList;->withAlpha(I)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/CompatibilityInfo$2;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/CompatibilityInfo;
+HSPLandroid/content/res/CompatibilityInfo$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/res/CompatibilityInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/res/CompatibilityInfo;-><init>(Landroid/os/Parcel;Landroid/content/res/CompatibilityInfo;)V
+HSPLandroid/content/res/CompatibilityInfo;->applyToConfiguration(ILandroid/content/res/Configuration;)V
+HSPLandroid/content/res/CompatibilityInfo;->applyToDisplayMetrics(Landroid/util/DisplayMetrics;)V
+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
+HSPLandroid/content/res/CompatibilityInfo;->supportsScreen()Z
+HSPLandroid/content/res/ComplexColor;-><init>()V
+HSPLandroid/content/res/ComplexColor;->getChangingConfigurations()I
+HSPLandroid/content/res/ComplexColor;->setBaseChangingConfigurations(I)V
+HSPLandroid/content/res/Configuration$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/Configuration;
+HSPLandroid/content/res/Configuration$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/res/Configuration;-><init>()V
+HSPLandroid/content/res/Configuration;-><init>(Landroid/content/res/Configuration;)V
+HSPLandroid/content/res/Configuration;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/res/Configuration;-><init>(Landroid/os/Parcel;Landroid/content/res/Configuration;)V
+HSPLandroid/content/res/Configuration;->compareTo(Landroid/content/res/Configuration;)I
+HSPLandroid/content/res/Configuration;->diff(Landroid/content/res/Configuration;)I
+HSPLandroid/content/res/Configuration;->diff(Landroid/content/res/Configuration;ZZ)I
+HSPLandroid/content/res/Configuration;->diffPublicOnly(Landroid/content/res/Configuration;)I
+HSPLandroid/content/res/Configuration;->equals(Landroid/content/res/Configuration;)Z
+HSPLandroid/content/res/Configuration;->equals(Ljava/lang/Object;)Z
+HSPLandroid/content/res/Configuration;->fixUpLocaleList()V
+HSPLandroid/content/res/Configuration;->generateDelta(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)Landroid/content/res/Configuration;
+HSPLandroid/content/res/Configuration;->getLayoutDirection()I
+HSPLandroid/content/res/Configuration;->getLocales()Landroid/os/LocaleList;
+HSPLandroid/content/res/Configuration;->getScreenLayoutNoDirection(I)I
+HSPLandroid/content/res/Configuration;->hashCode()I
+HSPLandroid/content/res/Configuration;->isLayoutSizeAtLeast(I)Z
+HSPLandroid/content/res/Configuration;->isOtherSeqNewer(Landroid/content/res/Configuration;)Z
+HSPLandroid/content/res/Configuration;->isScreenRound()Z
+HSPLandroid/content/res/Configuration;->isScreenWideColorGamut()Z
+HSPLandroid/content/res/Configuration;->needNewResources(II)Z
+HSPLandroid/content/res/Configuration;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/content/res/Configuration;->setAppBounds(IIII)V
+HSPLandroid/content/res/Configuration;->setAppBounds(Landroid/graphics/Rect;)V
+HSPLandroid/content/res/Configuration;->setLayoutDirection(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;->unset()V
+HSPLandroid/content/res/Configuration;->updateFrom(Landroid/content/res/Configuration;)I
+HSPLandroid/content/res/Configuration;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/res/ConfigurationBoundResourceCache;-><init>()V
+HSPLandroid/content/res/ConfigurationBoundResourceCache;->get(JLandroid/content/res/Resources$Theme;)Ljava/lang/Object;
+HSPLandroid/content/res/ConfigurationBoundResourceCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;
+HSPLandroid/content/res/ConfigurationBoundResourceCache;->onConfigurationChange(I)V
+HSPLandroid/content/res/ConfigurationBoundResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;)V
+HSPLandroid/content/res/ConfigurationBoundResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;Z)V
+HSPLandroid/content/res/ConstantState;-><init>()V
+HSPLandroid/content/res/ConstantState;->getChangingConfigurations()I
+HSPLandroid/content/res/ConstantState;->newInstance()Ljava/lang/Object;
+HSPLandroid/content/res/ConstantState;->newInstance(Landroid/content/res/Resources;)Ljava/lang/Object;
+HSPLandroid/content/res/ConstantState;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;
+HSPLandroid/content/res/DrawableCache;-><init>()V
+HSPLandroid/content/res/DrawableCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/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$Theme;)V
+HSPLandroid/content/res/Resources$Theme;->applyStyle(IZ)V
+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;->resolveAttribute(ILandroid/util/TypedValue;Z)Z
+HSPLandroid/content/res/Resources$Theme;->resolveAttributes([I[I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/Resources$Theme;->setImpl(Landroid/content/res/ResourcesImpl$ThemeImpl;)V
+HSPLandroid/content/res/Resources$Theme;->setTo(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/content/res/Resources$ThemeKey;-><init>()V
+HSPLandroid/content/res/Resources$ThemeKey;->append(IZ)V
+HSPLandroid/content/res/Resources$ThemeKey;->clone()Landroid/content/res/Resources$ThemeKey;
+HSPLandroid/content/res/Resources$ThemeKey;->equals(Ljava/lang/Object;)Z
+HSPLandroid/content/res/Resources$ThemeKey;->hashCode()I
+HSPLandroid/content/res/Resources$ThemeKey;->setTo(Landroid/content/res/Resources$ThemeKey;)V
+HSPLandroid/content/res/Resources;-><init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;)V
+HSPLandroid/content/res/Resources;-><init>(Ljava/lang/ClassLoader;)V
+HSPLandroid/content/res/Resources;->getAnimation(I)Landroid/content/res/XmlResourceParser;
+HSPLandroid/content/res/Resources;->getAnimatorCache()Landroid/content/res/ConfigurationBoundResourceCache;
+HSPLandroid/content/res/Resources;->getAssets()Landroid/content/res/AssetManager;
+HSPLandroid/content/res/Resources;->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
+HSPLandroid/content/res/Resources;->getColorStateList(I)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/Resources;->getColorStateList(ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/Resources;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
+HSPLandroid/content/res/Resources;->getConfiguration()Landroid/content/res/Configuration;
+HSPLandroid/content/res/Resources;->getDimension(I)F
+HSPLandroid/content/res/Resources;->getDimensionPixelOffset(I)I
+HSPLandroid/content/res/Resources;->getDimensionPixelSize(I)I
+HSPLandroid/content/res/Resources;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
+HSPLandroid/content/res/Resources;->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
+HSPLandroid/content/res/Resources;->getImpl()Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getIntArray(I)[I
+HSPLandroid/content/res/Resources;->getInteger(I)I
+HSPLandroid/content/res/Resources;->getLayout(I)Landroid/content/res/XmlResourceParser;
+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;
+HSPLandroid/content/res/Resources;->getResourceName(I)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getResourcePackageName(I)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getResourceTypeName(I)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getSizeConfigurations()[Landroid/content/res/Configuration;
+HSPLandroid/content/res/Resources;->getStateListAnimatorCache()Landroid/content/res/ConfigurationBoundResourceCache;
+HSPLandroid/content/res/Resources;->getString(I)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getString(I[Ljava/lang/Object;)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getStringArray(I)[Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getSystem()Landroid/content/res/Resources;
+HSPLandroid/content/res/Resources;->getText(I)Ljava/lang/CharSequence;
+HSPLandroid/content/res/Resources;->getTextArray(I)[Ljava/lang/CharSequence;
+HSPLandroid/content/res/Resources;->getValue(ILandroid/util/TypedValue;Z)V
+HSPLandroid/content/res/Resources;->getValueForDensity(IILandroid/util/TypedValue;Z)V
+HSPLandroid/content/res/Resources;->getXml(I)Landroid/content/res/XmlResourceParser;
+HSPLandroid/content/res/Resources;->loadColorStateList(Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/Resources;->loadComplexColor(Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ComplexColor;
+HSPLandroid/content/res/Resources;->loadDrawable(Landroid/util/TypedValue;IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/Resources;->loadXmlResourceParser(ILjava/lang/String;)Landroid/content/res/XmlResourceParser;
+HSPLandroid/content/res/Resources;->newTheme()Landroid/content/res/Resources$Theme;
+HSPLandroid/content/res/Resources;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/Resources;->obtainAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/Resources;->obtainTempTypedValue()Landroid/util/TypedValue;
+HSPLandroid/content/res/Resources;->obtainTypedArray(I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/Resources;->openRawResource(I)Ljava/io/InputStream;
+HSPLandroid/content/res/Resources;->openRawResource(ILandroid/util/TypedValue;)Ljava/io/InputStream;
+HSPLandroid/content/res/Resources;->openRawResourceFd(I)Landroid/content/res/AssetFileDescriptor;
+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;->setImpl(Landroid/content/res/ResourcesImpl;)V
+HSPLandroid/content/res/Resources;->updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;)V
+HSPLandroid/content/res/Resources;->updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;)V
+HSPLandroid/content/res/Resources;->updateSystemConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;)V
+HSPLandroid/content/res/ResourcesImpl$ThemeImpl;-><init>(Landroid/content/res/ResourcesImpl;)V
+HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->applyStyle(IZ)V
+HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->finalize()V
+HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->getKey()Landroid/content/res/Resources$ThemeKey;
+HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->obtainStyledAttributes(Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->resolveAttribute(ILandroid/util/TypedValue;Z)Z
+HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->resolveAttributes(Landroid/content/res/Resources$Theme;[I[I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->setTo(Landroid/content/res/ResourcesImpl$ThemeImpl;)V
+HSPLandroid/content/res/ResourcesImpl;-><init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;Landroid/view/DisplayAdjustments;)V
+HSPLandroid/content/res/ResourcesImpl;->adjustLanguageTag(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/content/res/ResourcesImpl;->attrForQuantityCode(Ljava/lang/String;)I
+HSPLandroid/content/res/ResourcesImpl;->cacheDrawable(Landroid/util/TypedValue;ZLandroid/content/res/DrawableCache;Landroid/content/res/Resources$Theme;ZJLandroid/graphics/drawable/Drawable;)V
+HSPLandroid/content/res/ResourcesImpl;->calcConfigChanges(Landroid/content/res/Configuration;)I
+HSPLandroid/content/res/ResourcesImpl;->flushLayoutCache()V
+HSPLandroid/content/res/ResourcesImpl;->getAnimatorCache()Landroid/content/res/ConfigurationBoundResourceCache;
+HSPLandroid/content/res/ResourcesImpl;->getAssets()Landroid/content/res/AssetManager;
+HSPLandroid/content/res/ResourcesImpl;->getColorStateListFromInt(Landroid/util/TypedValue;J)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/ResourcesImpl;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
+HSPLandroid/content/res/ResourcesImpl;->getConfiguration()Landroid/content/res/Configuration;
+HSPLandroid/content/res/ResourcesImpl;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
+HSPLandroid/content/res/ResourcesImpl;->getDisplayMetrics()Landroid/util/DisplayMetrics;
+HSPLandroid/content/res/ResourcesImpl;->getIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/content/res/ResourcesImpl;->getPluralRule()Landroid/icu/text/PluralRules;
+HSPLandroid/content/res/ResourcesImpl;->getQuantityText(II)Ljava/lang/CharSequence;
+HSPLandroid/content/res/ResourcesImpl;->getResourceEntryName(I)Ljava/lang/String;
+HSPLandroid/content/res/ResourcesImpl;->getResourceName(I)Ljava/lang/String;
+HSPLandroid/content/res/ResourcesImpl;->getResourcePackageName(I)Ljava/lang/String;
+HSPLandroid/content/res/ResourcesImpl;->getResourceTypeName(I)Ljava/lang/String;
+HSPLandroid/content/res/ResourcesImpl;->getSizeConfigurations()[Landroid/content/res/Configuration;
+HSPLandroid/content/res/ResourcesImpl;->getStateListAnimatorCache()Landroid/content/res/ConfigurationBoundResourceCache;
+HSPLandroid/content/res/ResourcesImpl;->getValue(ILandroid/util/TypedValue;Z)V
+HSPLandroid/content/res/ResourcesImpl;->getValueForDensity(IILandroid/util/TypedValue;Z)V
+HSPLandroid/content/res/ResourcesImpl;->loadColorStateList(Landroid/content/res/Resources;Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/ResourcesImpl;->loadComplexColor(Landroid/content/res/Resources;Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ComplexColor;
+HSPLandroid/content/res/ResourcesImpl;->loadComplexColorForCookie(Landroid/content/res/Resources;Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ComplexColor;
+HSPLandroid/content/res/ResourcesImpl;->loadComplexColorFromName(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/TypedValue;I)Landroid/content/res/ComplexColor;
+HSPLandroid/content/res/ResourcesImpl;->loadDrawable(Landroid/content/res/Resources;Landroid/util/TypedValue;IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/ResourcesImpl;->loadDrawableForCookie(Landroid/content/res/Resources;Landroid/util/TypedValue;IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/ResourcesImpl;->loadFont(Landroid/content/res/Resources;Landroid/util/TypedValue;I)Landroid/graphics/Typeface;
+HSPLandroid/content/res/ResourcesImpl;->loadXmlResourceParser(Ljava/lang/String;IILjava/lang/String;)Landroid/content/res/XmlResourceParser;
+HSPLandroid/content/res/ResourcesImpl;->newThemeImpl()Landroid/content/res/ResourcesImpl$ThemeImpl;
+HSPLandroid/content/res/ResourcesImpl;->openRawResource(ILandroid/util/TypedValue;)Ljava/io/InputStream;
+HSPLandroid/content/res/ResourcesImpl;->openRawResourceFd(ILandroid/util/TypedValue;)Landroid/content/res/AssetFileDescriptor;
+HSPLandroid/content/res/ResourcesImpl;->updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;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;)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;-><init>(JZ)V
+HSPLandroid/content/res/StringBlock;->finalize()V
+HSPLandroid/content/res/StringBlock;->get(I)Ljava/lang/CharSequence;
+HSPLandroid/content/res/ThemedResourceCache;-><init>()V
+HSPLandroid/content/res/ThemedResourceCache;->get(JLandroid/content/res/Resources$Theme;)Ljava/lang/Object;
+HSPLandroid/content/res/ThemedResourceCache;->getThemedLocked(Landroid/content/res/Resources$Theme;Z)Landroid/util/LongSparseArray;
+HSPLandroid/content/res/ThemedResourceCache;->getUnthemedLocked(Z)Landroid/util/LongSparseArray;
+HSPLandroid/content/res/ThemedResourceCache;->onConfigurationChange(I)V
+HSPLandroid/content/res/ThemedResourceCache;->prune(I)Z
+HSPLandroid/content/res/ThemedResourceCache;->pruneEntriesLocked(Landroid/util/LongSparseArray;I)Z
+HSPLandroid/content/res/ThemedResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;)V
+HSPLandroid/content/res/ThemedResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;Z)V
+HSPLandroid/content/res/TypedArray;-><init>(Landroid/content/res/Resources;)V
+HSPLandroid/content/res/TypedArray;->extractThemeAttrs()[I
+HSPLandroid/content/res/TypedArray;->extractThemeAttrs([I)[I
+HSPLandroid/content/res/TypedArray;->getBoolean(IZ)Z
+HSPLandroid/content/res/TypedArray;->getChangingConfigurations()I
+HSPLandroid/content/res/TypedArray;->getColor(II)I
+HSPLandroid/content/res/TypedArray;->getColorStateList(I)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/TypedArray;->getComplexColor(I)Landroid/content/res/ComplexColor;
+HSPLandroid/content/res/TypedArray;->getDimension(IF)F
+HSPLandroid/content/res/TypedArray;->getDimensionPixelOffset(II)I
+HSPLandroid/content/res/TypedArray;->getDimensionPixelSize(II)I
+HSPLandroid/content/res/TypedArray;->getDrawable(I)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/TypedArray;->getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/TypedArray;->getFloat(IF)F
+HSPLandroid/content/res/TypedArray;->getFont(I)Landroid/graphics/Typeface;
+HSPLandroid/content/res/TypedArray;->getFraction(IIIF)F
+HSPLandroid/content/res/TypedArray;->getIndex(I)I
+HSPLandroid/content/res/TypedArray;->getIndexCount()I
+HSPLandroid/content/res/TypedArray;->getInt(II)I
+HSPLandroid/content/res/TypedArray;->getInteger(II)I
+HSPLandroid/content/res/TypedArray;->getLayoutDimension(II)I
+HSPLandroid/content/res/TypedArray;->getLayoutDimension(ILjava/lang/String;)I
+HSPLandroid/content/res/TypedArray;->getPositionDescription()Ljava/lang/String;
+HSPLandroid/content/res/TypedArray;->getResourceId(II)I
+HSPLandroid/content/res/TypedArray;->getResources()Landroid/content/res/Resources;
+HSPLandroid/content/res/TypedArray;->getString(I)Ljava/lang/String;
+HSPLandroid/content/res/TypedArray;->getText(I)Ljava/lang/CharSequence;
+HSPLandroid/content/res/TypedArray;->getTextArray(I)[Ljava/lang/CharSequence;
+HSPLandroid/content/res/TypedArray;->getThemeAttributeId(II)I
+HSPLandroid/content/res/TypedArray;->getType(I)I
+HSPLandroid/content/res/TypedArray;->getValue(ILandroid/util/TypedValue;)Z
+HSPLandroid/content/res/TypedArray;->getValueAt(ILandroid/util/TypedValue;)Z
+HSPLandroid/content/res/TypedArray;->hasValue(I)Z
+HSPLandroid/content/res/TypedArray;->hasValueOrEmpty(I)Z
+HSPLandroid/content/res/TypedArray;->length()I
+HSPLandroid/content/res/TypedArray;->loadStringValueAt(I)Ljava/lang/CharSequence;
+HSPLandroid/content/res/TypedArray;->obtain(Landroid/content/res/Resources;I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/TypedArray;->peekValue(I)Landroid/util/TypedValue;
+HSPLandroid/content/res/TypedArray;->recycle()V
+HSPLandroid/content/res/TypedArray;->resize(I)V
+HSPLandroid/content/res/XmlBlock$Parser;-><init>(Landroid/content/res/XmlBlock;JLandroid/content/res/XmlBlock;)V
+HSPLandroid/content/res/XmlBlock$Parser;->close()V
+HSPLandroid/content/res/XmlBlock$Parser;->finalize()V
+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
+HSPLandroid/content/res/XmlBlock$Parser;->getAttributeName(I)Ljava/lang/String;
+HSPLandroid/content/res/XmlBlock$Parser;->getAttributeNameResource(I)I
+HSPLandroid/content/res/XmlBlock$Parser;->getAttributeResourceValue(II)I
+HSPLandroid/content/res/XmlBlock$Parser;->getAttributeResourceValue(Ljava/lang/String;Ljava/lang/String;I)I
+HSPLandroid/content/res/XmlBlock$Parser;->getAttributeValue(I)Ljava/lang/String;
+HSPLandroid/content/res/XmlBlock$Parser;->getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/content/res/XmlBlock$Parser;->getDepth()I
+HSPLandroid/content/res/XmlBlock$Parser;->getEventType()I
+HSPLandroid/content/res/XmlBlock$Parser;->getLineNumber()I
+HSPLandroid/content/res/XmlBlock$Parser;->getName()Ljava/lang/String;
+HSPLandroid/content/res/XmlBlock$Parser;->getPooledString(I)Ljava/lang/CharSequence;
+HSPLandroid/content/res/XmlBlock$Parser;->getPositionDescription()Ljava/lang/String;
+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;->nextText()Ljava/lang/String;
+HSPLandroid/content/res/XmlBlock$Parser;->require(ILjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/res/XmlBlock;->-get0(Landroid/content/res/XmlBlock;)I
+HSPLandroid/content/res/XmlBlock;->-set0(Landroid/content/res/XmlBlock;I)I
+HSPLandroid/content/res/XmlBlock;->-wrap0(J)I
+HSPLandroid/content/res/XmlBlock;->-wrap1(JI)I
+HSPLandroid/content/res/XmlBlock;->-wrap10(J)I
+HSPLandroid/content/res/XmlBlock;->-wrap13(J)I
+HSPLandroid/content/res/XmlBlock;->-wrap14(Landroid/content/res/XmlBlock;)V
+HSPLandroid/content/res/XmlBlock;->-wrap15(J)V
+HSPLandroid/content/res/XmlBlock;->-wrap2(JI)I
+HSPLandroid/content/res/XmlBlock;->-wrap3(JLjava/lang/String;Ljava/lang/String;)I
+HSPLandroid/content/res/XmlBlock;->-wrap4(JI)I
+HSPLandroid/content/res/XmlBlock;->-wrap6(JI)I
+HSPLandroid/content/res/XmlBlock;->-wrap7(JI)I
+HSPLandroid/content/res/XmlBlock;-><init>(Landroid/content/res/AssetManager;J)V
+HSPLandroid/content/res/XmlBlock;->close()V
+HSPLandroid/content/res/XmlBlock;->decOpenCountLocked()V
+HSPLandroid/content/res/XmlBlock;->finalize()V
+HSPLandroid/content/res/XmlBlock;->newParser()Landroid/content/res/XmlResourceParser;
+HSPLandroid/content/res/XmlResourceParser;->close()V
+HSPLandroid/database/AbstractCursor$SelfContentObserver;-><init>(Landroid/database/AbstractCursor;)V
+HSPLandroid/database/AbstractCursor$SelfContentObserver;->onChange(Z)V
+HSPLandroid/database/AbstractCursor;-><init>()V
+HSPLandroid/database/AbstractCursor;->checkPosition()V
+HSPLandroid/database/AbstractCursor;->close()V
+HSPLandroid/database/AbstractCursor;->fillWindow(ILandroid/database/CursorWindow;)V
+HSPLandroid/database/AbstractCursor;->finalize()V
+HSPLandroid/database/AbstractCursor;->getColumnCount()I
+HSPLandroid/database/AbstractCursor;->getColumnIndex(Ljava/lang/String;)I
+HSPLandroid/database/AbstractCursor;->getColumnIndexOrThrow(Ljava/lang/String;)I
+HSPLandroid/database/AbstractCursor;->getColumnNames()[Ljava/lang/String;
+HSPLandroid/database/AbstractCursor;->getCount()I
+HSPLandroid/database/AbstractCursor;->getDouble(I)D
+HSPLandroid/database/AbstractCursor;->getFloat(I)F
+HSPLandroid/database/AbstractCursor;->getInt(I)I
+HSPLandroid/database/AbstractCursor;->getLong(I)J
+HSPLandroid/database/AbstractCursor;->getPosition()I
+HSPLandroid/database/AbstractCursor;->getShort(I)S
+HSPLandroid/database/AbstractCursor;->getString(I)Ljava/lang/String;
+HSPLandroid/database/AbstractCursor;->getWantsAllOnMoveCalls()Z
+HSPLandroid/database/AbstractCursor;->getWindow()Landroid/database/CursorWindow;
+HSPLandroid/database/AbstractCursor;->isAfterLast()Z
+HSPLandroid/database/AbstractCursor;->isClosed()Z
+HSPLandroid/database/AbstractCursor;->isLast()Z
+HSPLandroid/database/AbstractCursor;->isNull(I)Z
+HSPLandroid/database/AbstractCursor;->moveToFirst()Z
+HSPLandroid/database/AbstractCursor;->moveToNext()Z
+HSPLandroid/database/AbstractCursor;->moveToPosition(I)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
+HSPLandroid/database/AbstractCursor;->registerDataSetObserver(Landroid/database/DataSetObserver;)V
+HSPLandroid/database/AbstractCursor;->requery()Z
+HSPLandroid/database/AbstractCursor;->setNotificationUri(Landroid/content/ContentResolver;Landroid/net/Uri;)V
+HSPLandroid/database/AbstractCursor;->setNotificationUri(Landroid/content/ContentResolver;Landroid/net/Uri;I)V
+HSPLandroid/database/AbstractCursor;->unregisterContentObserver(Landroid/database/ContentObserver;)V
+HSPLandroid/database/AbstractCursor;->unregisterDataSetObserver(Landroid/database/DataSetObserver;)V
+HSPLandroid/database/AbstractWindowedCursor;-><init>()V
+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;->getString(I)Ljava/lang/String;
+HSPLandroid/database/AbstractWindowedCursor;->getWindow()Landroid/database/CursorWindow;
+HSPLandroid/database/AbstractWindowedCursor;->isNull(I)Z
+HSPLandroid/database/AbstractWindowedCursor;->onDeactivateOrClose()V
+HSPLandroid/database/AbstractWindowedCursor;->setWindow(Landroid/database/CursorWindow;)V
+HSPLandroid/database/BulkCursorDescriptor$1;-><init>()V
+HSPLandroid/database/BulkCursorDescriptor$1;->createFromParcel(Landroid/os/Parcel;)Landroid/database/BulkCursorDescriptor;
+HSPLandroid/database/BulkCursorDescriptor$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/database/BulkCursorDescriptor;-><init>()V
+HSPLandroid/database/BulkCursorDescriptor;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/database/BulkCursorDescriptor;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/database/BulkCursorNative;-><init>()V
+HSPLandroid/database/BulkCursorNative;->asBinder()Landroid/os/IBinder;
+HSPLandroid/database/BulkCursorNative;->asInterface(Landroid/os/IBinder;)Landroid/database/IBulkCursor;
+HSPLandroid/database/BulkCursorNative;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/database/BulkCursorProxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/database/BulkCursorProxy;->asBinder()Landroid/os/IBinder;
+HSPLandroid/database/BulkCursorProxy;->close()V
+HSPLandroid/database/BulkCursorProxy;->getExtras()Landroid/os/Bundle;
+HSPLandroid/database/BulkCursorProxy;->getWindow(I)Landroid/database/CursorWindow;
+HSPLandroid/database/BulkCursorToCursorAdaptor;-><init>()V
+HSPLandroid/database/BulkCursorToCursorAdaptor;->close()V
+HSPLandroid/database/BulkCursorToCursorAdaptor;->getColumnNames()[Ljava/lang/String;
+HSPLandroid/database/BulkCursorToCursorAdaptor;->getCount()I
+HSPLandroid/database/BulkCursorToCursorAdaptor;->getExtras()Landroid/os/Bundle;
+HSPLandroid/database/BulkCursorToCursorAdaptor;->getObserver()Landroid/database/IContentObserver;
+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
+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;->-wrap0(Landroid/database/ContentObserver;ZLandroid/net/Uri;I)V
+HSPLandroid/database/ContentObserver;-><init>(Landroid/os/Handler;)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;
+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/CrossProcessCursor;->fillWindow(ILandroid/database/CursorWindow;)V
+HSPLandroid/database/CrossProcessCursor;->getWindow()Landroid/database/CursorWindow;
+HSPLandroid/database/CrossProcessCursor;->onMove(II)Z
+HSPLandroid/database/CrossProcessCursorWrapper;-><init>(Landroid/database/Cursor;)V
+HSPLandroid/database/Cursor;->close()V
+HSPLandroid/database/Cursor;->copyStringToBuffer(ILandroid/database/CharArrayBuffer;)V
+HSPLandroid/database/Cursor;->deactivate()V
+HSPLandroid/database/Cursor;->getBlob(I)[B
+HSPLandroid/database/Cursor;->getColumnCount()I
+HSPLandroid/database/Cursor;->getColumnIndex(Ljava/lang/String;)I
+HSPLandroid/database/Cursor;->getColumnIndexOrThrow(Ljava/lang/String;)I
+HSPLandroid/database/Cursor;->getColumnName(I)Ljava/lang/String;
+HSPLandroid/database/Cursor;->getColumnNames()[Ljava/lang/String;
+HSPLandroid/database/Cursor;->getCount()I
+HSPLandroid/database/Cursor;->getDouble(I)D
+HSPLandroid/database/Cursor;->getExtras()Landroid/os/Bundle;
+HSPLandroid/database/Cursor;->getFloat(I)F
+HSPLandroid/database/Cursor;->getInt(I)I
+HSPLandroid/database/Cursor;->getLong(I)J
+HSPLandroid/database/Cursor;->getNotificationUri()Landroid/net/Uri;
+HSPLandroid/database/Cursor;->getPosition()I
+HSPLandroid/database/Cursor;->getShort(I)S
+HSPLandroid/database/Cursor;->getString(I)Ljava/lang/String;
+HSPLandroid/database/Cursor;->getType(I)I
+HSPLandroid/database/Cursor;->getWantsAllOnMoveCalls()Z
+HSPLandroid/database/Cursor;->isAfterLast()Z
+HSPLandroid/database/Cursor;->isBeforeFirst()Z
+HSPLandroid/database/Cursor;->isClosed()Z
+HSPLandroid/database/Cursor;->isFirst()Z
+HSPLandroid/database/Cursor;->isLast()Z
+HSPLandroid/database/Cursor;->isNull(I)Z
+HSPLandroid/database/Cursor;->move(I)Z
+HSPLandroid/database/Cursor;->moveToFirst()Z
+HSPLandroid/database/Cursor;->moveToLast()Z
+HSPLandroid/database/Cursor;->moveToNext()Z
+HSPLandroid/database/Cursor;->moveToPosition(I)Z
+HSPLandroid/database/Cursor;->moveToPrevious()Z
+HSPLandroid/database/Cursor;->registerContentObserver(Landroid/database/ContentObserver;)V
+HSPLandroid/database/Cursor;->registerDataSetObserver(Landroid/database/DataSetObserver;)V
+HSPLandroid/database/Cursor;->requery()Z
+HSPLandroid/database/Cursor;->respond(Landroid/os/Bundle;)Landroid/os/Bundle;
+HSPLandroid/database/Cursor;->setExtras(Landroid/os/Bundle;)V
+HSPLandroid/database/Cursor;->setNotificationUri(Landroid/content/ContentResolver;Landroid/net/Uri;)V
+HSPLandroid/database/Cursor;->unregisterContentObserver(Landroid/database/ContentObserver;)V
+HSPLandroid/database/Cursor;->unregisterDataSetObserver(Landroid/database/DataSetObserver;)V
+HSPLandroid/database/CursorToBulkCursorAdaptor$ContentObserverProxy;-><init>(Landroid/database/IContentObserver;Landroid/os/IBinder$DeathRecipient;)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
+HSPLandroid/database/CursorToBulkCursorAdaptor;->close()V
+HSPLandroid/database/CursorToBulkCursorAdaptor;->closeFilledWindowLocked()V
+HSPLandroid/database/CursorToBulkCursorAdaptor;->createAndRegisterObserverProxyLocked(Landroid/database/IContentObserver;)V
+HSPLandroid/database/CursorToBulkCursorAdaptor;->disposeLocked()V
+HSPLandroid/database/CursorToBulkCursorAdaptor;->getBulkCursorDescriptor()Landroid/database/BulkCursorDescriptor;
+HSPLandroid/database/CursorToBulkCursorAdaptor;->getWindow(I)Landroid/database/CursorWindow;
+HSPLandroid/database/CursorToBulkCursorAdaptor;->throwIfCursorIsClosed()V
+HSPLandroid/database/CursorToBulkCursorAdaptor;->unregisterObserverProxyLocked()V
+HSPLandroid/database/CursorWindow$1;-><init>()V
+HSPLandroid/database/CursorWindow$1;->createFromParcel(Landroid/os/Parcel;)Landroid/database/CursorWindow;
+HSPLandroid/database/CursorWindow$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/database/CursorWindow$1;->newArray(I)[Landroid/database/CursorWindow;
+HSPLandroid/database/CursorWindow$1;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/database/CursorWindow;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/database/CursorWindow;-><init>(Landroid/os/Parcel;Landroid/database/CursorWindow;)V
+HSPLandroid/database/CursorWindow;-><init>(Ljava/lang/String;)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;->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;->getStartPosition()I
+HSPLandroid/database/CursorWindow;->getString(II)Ljava/lang/String;
+HSPLandroid/database/CursorWindow;->getType(II)I
+HSPLandroid/database/CursorWindow;->newFromParcel(Landroid/os/Parcel;)Landroid/database/CursorWindow;
+HSPLandroid/database/CursorWindow;->onAllReferencesReleased()V
+HSPLandroid/database/CursorWindow;->putBlob([BII)Z
+HSPLandroid/database/CursorWindow;->putLong(JII)Z
+HSPLandroid/database/CursorWindow;->putNull(II)Z
+HSPLandroid/database/CursorWindow;->putString(Ljava/lang/String;II)Z
+HSPLandroid/database/CursorWindow;->recordClosingOfWindow(J)V
+HSPLandroid/database/CursorWindow;->recordNewWindow(IJ)V
+HSPLandroid/database/CursorWindow;->setNumColumns(I)Z
+HSPLandroid/database/CursorWindow;->setStartPosition(I)V
+HSPLandroid/database/CursorWindow;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/database/CursorWrapper;-><init>(Landroid/database/Cursor;)V
+HSPLandroid/database/CursorWrapper;->close()V
+HSPLandroid/database/CursorWrapper;->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
+HSPLandroid/database/CursorWrapper;->getColumnNames()[Ljava/lang/String;
+HSPLandroid/database/CursorWrapper;->getCount()I
+HSPLandroid/database/CursorWrapper;->getExtras()Landroid/os/Bundle;
+HSPLandroid/database/CursorWrapper;->getInt(I)I
+HSPLandroid/database/CursorWrapper;->getLong(I)J
+HSPLandroid/database/CursorWrapper;->getPosition()I
+HSPLandroid/database/CursorWrapper;->getString(I)Ljava/lang/String;
+HSPLandroid/database/CursorWrapper;->getWrappedCursor()Landroid/database/Cursor;
+HSPLandroid/database/CursorWrapper;->isAfterLast()Z
+HSPLandroid/database/CursorWrapper;->isClosed()Z
+HSPLandroid/database/CursorWrapper;->isNull(I)Z
+HSPLandroid/database/CursorWrapper;->moveToFirst()Z
+HSPLandroid/database/CursorWrapper;->moveToNext()Z
+HSPLandroid/database/CursorWrapper;->moveToPosition(I)Z
+HSPLandroid/database/CursorWrapper;->registerContentObserver(Landroid/database/ContentObserver;)V
+HSPLandroid/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/CursorWrapper;->unregisterDataSetObserver(Landroid/database/DataSetObserver;)V
+HSPLandroid/database/DataSetObservable;-><init>()V
+HSPLandroid/database/DataSetObservable;->notifyChanged()V
+HSPLandroid/database/DataSetObservable;->notifyInvalidated()V
+HSPLandroid/database/DataSetObserver;-><init>()V
+HSPLandroid/database/DatabaseErrorHandler;->onCorruption(Landroid/database/sqlite/SQLiteDatabase;)V
+HSPLandroid/database/DatabaseUtils$InsertHelper;-><init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;)V
+HSPLandroid/database/DatabaseUtils;->cursorFillWindow(Landroid/database/Cursor;ILandroid/database/CursorWindow;)V
+HSPLandroid/database/DatabaseUtils;->cursorPickFillWindowStartPosition(II)I
+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
+HSPLandroid/database/DatabaseUtils;->longForQuery(Landroid/database/sqlite/SQLiteStatement;[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;->readExceptionWithFileNotFoundExceptionFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/database/DefaultDatabaseErrorHandler;-><init>()V
+HSPLandroid/database/IBulkCursor;->close()V
+HSPLandroid/database/IBulkCursor;->deactivate()V
+HSPLandroid/database/IBulkCursor;->getExtras()Landroid/os/Bundle;
+HSPLandroid/database/IBulkCursor;->getWindow(I)Landroid/database/CursorWindow;
+HSPLandroid/database/IBulkCursor;->onMove(I)V
+HSPLandroid/database/IBulkCursor;->requery(Landroid/database/IContentObserver;)I
+HSPLandroid/database/IBulkCursor;->respond(Landroid/os/Bundle;)Landroid/os/Bundle;
+HSPLandroid/database/IContentObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/database/IContentObserver$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HSPLandroid/database/IContentObserver$Stub;-><init>()V
+HSPLandroid/database/IContentObserver$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/database/IContentObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/database/IContentObserver;
+HSPLandroid/database/IContentObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/database/IContentObserver;->onChange(ZLandroid/net/Uri;I)V
+HSPLandroid/database/MatrixCursor$RowBuilder;-><init>(Landroid/database/MatrixCursor;I)V
+HSPLandroid/database/MatrixCursor$RowBuilder;->add(Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;
+HSPLandroid/database/MatrixCursor;->-get0(Landroid/database/MatrixCursor;)I
+HSPLandroid/database/MatrixCursor;->-get2(Landroid/database/MatrixCursor;)[Ljava/lang/Object;
+HSPLandroid/database/MatrixCursor;-><init>([Ljava/lang/String;)V
+HSPLandroid/database/MatrixCursor;-><init>([Ljava/lang/String;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;->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;
+HSPLandroid/database/MergeCursor$1;-><init>(Landroid/database/MergeCursor;)V
+HSPLandroid/database/MergeCursor$1;->onInvalidated()V
+HSPLandroid/database/MergeCursor;-><init>([Landroid/database/Cursor;)V
+HSPLandroid/database/MergeCursor;->close()V
+HSPLandroid/database/MergeCursor;->getColumnNames()[Ljava/lang/String;
+HSPLandroid/database/MergeCursor;->getCount()I
+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>(Ljava/lang/String;)V
+HSPLandroid/database/sqlite/-$Lambda$gPaS7kMbZ8xtrrEx06GlwJ2iDWE;->$m$0()Ljava/lang/Object;
+HSPLandroid/database/sqlite/-$Lambda$gPaS7kMbZ8xtrrEx06GlwJ2iDWE;-><init>(Ljava/lang/Object;)V
+HSPLandroid/database/sqlite/-$Lambda$gPaS7kMbZ8xtrrEx06GlwJ2iDWE;->get()Ljava/lang/Object;
+HSPLandroid/database/sqlite/DatabaseObjectNotClosedException;-><init>()V
+HSPLandroid/database/sqlite/SQLiteClosable;-><init>()V
+HSPLandroid/database/sqlite/SQLiteClosable;->acquireReference()V
+HSPLandroid/database/sqlite/SQLiteClosable;->close()V
+HSPLandroid/database/sqlite/SQLiteClosable;->onAllReferencesReleased()V
+HSPLandroid/database/sqlite/SQLiteClosable;->releaseReference()V
+HSPLandroid/database/sqlite/SQLiteConnection$Operation;-><init>()V
+HSPLandroid/database/sqlite/SQLiteConnection$Operation;-><init>(Landroid/database/sqlite/SQLiteConnection$Operation;)V
+HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;-><init>()V
+HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;-><init>(Landroid/database/sqlite/SQLiteConnection$OperationLog;)V
+HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->beginOperation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)I
+HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->endOperation(I)V
+HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLog(I)Z
+HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLogLocked(I)Z
+HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->getOperationLocked(I)Landroid/database/sqlite/SQLiteConnection$Operation;
+HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->newOperationCookieLocked(I)I
+HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatement;-><init>()V
+HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatement;-><init>(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
+HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatementCache;-><init>(Landroid/database/sqlite/SQLiteConnection;I)V
+HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatementCache;->entryRemoved(ZLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatementCache;->entryRemoved(ZLjava/lang/String;Landroid/database/sqlite/SQLiteConnection$PreparedStatement;Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->-get0()[B
+HSPLandroid/database/sqlite/SQLiteConnection;->-wrap1(Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
+HSPLandroid/database/sqlite/SQLiteConnection;-><init>(Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteDatabaseConfiguration;IZ)V
+HSPLandroid/database/sqlite/SQLiteConnection;->acquirePreparedStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteConnection$PreparedStatement;
+HSPLandroid/database/sqlite/SQLiteConnection;->applyBlockGuardPolicy(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->attachCancellationSignal(Landroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->bindArguments(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;[Ljava/lang/Object;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->canonicalizeSyncMode(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteConnection;->close()V
+HSPLandroid/database/sqlite/SQLiteConnection;->collectDbStats(Ljava/util/ArrayList;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->detachCancellationSignal(Landroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->dispose(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
+HSPLandroid/database/sqlite/SQLiteConnection;->executeForLastInsertedRowId(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J
+HSPLandroid/database/sqlite/SQLiteConnection;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J
+HSPLandroid/database/sqlite/SQLiteConnection;->executeForString(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteConnection;->finalize()V
+HSPLandroid/database/sqlite/SQLiteConnection;->finalizePreparedStatement(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->getConnectionId()I
+HSPLandroid/database/sqlite/SQLiteConnection;->getMainDbStatsUnsafe(IJJ)Landroid/database/sqlite/SQLiteDebug$DbStats;
+HSPLandroid/database/sqlite/SQLiteConnection;->isCacheable(I)Z
+HSPLandroid/database/sqlite/SQLiteConnection;->isPreparedStatementInCache(Ljava/lang/String;)Z
+HSPLandroid/database/sqlite/SQLiteConnection;->isPrimaryConnection()Z
+HSPLandroid/database/sqlite/SQLiteConnection;->obtainPreparedStatement(Ljava/lang/String;JIIZ)Landroid/database/sqlite/SQLiteConnection$PreparedStatement;
+HSPLandroid/database/sqlite/SQLiteConnection;->open()V
+HSPLandroid/database/sqlite/SQLiteConnection;->open(Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteDatabaseConfiguration;IZ)Landroid/database/sqlite/SQLiteConnection;
+HSPLandroid/database/sqlite/SQLiteConnection;->prepare(Ljava/lang/String;Landroid/database/sqlite/SQLiteStatementInfo;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->reconfigure(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->recyclePreparedStatement(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->releasePreparedStatement(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->setAutoCheckpointInterval()V
+HSPLandroid/database/sqlite/SQLiteConnection;->setForeignKeyModeFromConfiguration()V
+HSPLandroid/database/sqlite/SQLiteConnection;->setJournalMode(Ljava/lang/String;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->setJournalSizeLimit()V
+HSPLandroid/database/sqlite/SQLiteConnection;->setLocaleFromConfiguration()V
+HSPLandroid/database/sqlite/SQLiteConnection;->setOnlyAllowReadOnlyOperations(Z)V
+HSPLandroid/database/sqlite/SQLiteConnection;->setPageSize()V
+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
+HSPLandroid/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;-><init>(Ljava/lang/String;I)V
+HSPLandroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;-><init>()V
+HSPLandroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;-><init>(Landroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;)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
+HSPLandroid/database/sqlite/SQLiteConnectionPool;-><init>(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->acquireConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)Landroid/database/sqlite/SQLiteConnection;
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->close()V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->closeAvailableConnectionsAndLogExceptionsLocked()V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->closeAvailableNonPrimaryConnectionsAndLogExceptionsLocked()V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->closeConnectionAndLogExceptionsLocked(Landroid/database/sqlite/SQLiteConnection;)V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->closeExcessConnectionsAndLogExceptionsLocked()V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->collectDbStats(Ljava/util/ArrayList;)V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->disableIdleConnectionHandler()V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->dispose(Z)V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->finalize()V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->finishAcquireConnectionLocked(Landroid/database/sqlite/SQLiteConnection;I)V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->getPriority(I)I
+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;
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->open()V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->open(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)Landroid/database/sqlite/SQLiteConnectionPool;
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->openConnectionLocked(Landroid/database/sqlite/SQLiteDatabaseConfiguration;Z)Landroid/database/sqlite/SQLiteConnection;
+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
+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
+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/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
+HSPLandroid/database/sqlite/SQLiteCursor;->finalize()V
+HSPLandroid/database/sqlite/SQLiteCursor;->getColumnIndex(Ljava/lang/String;)I
+HSPLandroid/database/sqlite/SQLiteCursor;->getColumnNames()[Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteCursor;->getCount()I
+HSPLandroid/database/sqlite/SQLiteCursor;->getDatabase()Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteCursor;->onMove(II)Z
+HSPLandroid/database/sqlite/SQLiteCursor;->requery()Z
+HSPLandroid/database/sqlite/SQLiteCursor;->setWindow(Landroid/database/CursorWindow;)V
+HSPLandroid/database/sqlite/SQLiteCursorDriver;->cursorClosed()V
+HSPLandroid/database/sqlite/SQLiteCursorDriver;->cursorDeactivated()V
+HSPLandroid/database/sqlite/SQLiteCursorDriver;->cursorRequeried(Landroid/database/Cursor;)V
+HSPLandroid/database/sqlite/SQLiteCursorDriver;->query(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;[Ljava/lang/String;)Landroid/database/Cursor;
+HSPLandroid/database/sqlite/SQLiteCursorDriver;->setBindArguments([Ljava/lang/String;)V
+HSPLandroid/database/sqlite/SQLiteDatabase$1;-><init>(Ljava/lang/String;)V
+HSPLandroid/database/sqlite/SQLiteDatabase$1;->accept(Ljava/io/File;)Z
+HSPLandroid/database/sqlite/SQLiteDatabase$CursorFactory;->newCursor(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor;
+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
+HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;->setCursorFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;
+HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;->setErrorHandler(Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;
+HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;->setWriteAheadLoggingEnabled(Z)V
+HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;->-get0(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase$CursorFactory;
+HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;->-get1(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/DatabaseErrorHandler;
+HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;->-get2(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)J
+HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;->-get3(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)I
+HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;->-get4(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)I
+HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;->-get5(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)I
+HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;-><init>(ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;IIJ)V
+HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;-><init>(ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;IIJLandroid/database/sqlite/SQLiteDatabase$OpenParams;)V
+HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;->toBuilder()Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;
+HSPLandroid/database/sqlite/SQLiteDatabase;->-android_database_sqlite_SQLiteDatabase-mthref-0()Landroid/database/sqlite/SQLiteSession;
+HSPLandroid/database/sqlite/SQLiteDatabase;-><init>(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;IIJ)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;->beginTransactionWithListenerNonExclusive(Landroid/database/sqlite/SQLiteTransactionListener;)V
+HSPLandroid/database/sqlite/SQLiteDatabase;->collectDbStats(Ljava/util/ArrayList;)V
+HSPLandroid/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteStatement;
+HSPLandroid/database/sqlite/SQLiteDatabase;->createInMemory(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteDatabase;->createSession()Landroid/database/sqlite/SQLiteSession;
+HSPLandroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I
+HSPLandroid/database/sqlite/SQLiteDatabase;->deleteDatabase(Ljava/io/File;)Z
+HSPLandroid/database/sqlite/SQLiteDatabase;->disableWriteAheadLogging()V
+HSPLandroid/database/sqlite/SQLiteDatabase;->dispose(Z)V
+HSPLandroid/database/sqlite/SQLiteDatabase;->endTransaction()V
+HSPLandroid/database/sqlite/SQLiteDatabase;->execSQL(Ljava/lang/String;)V
+HSPLandroid/database/sqlite/SQLiteDatabase;->execSQL(Ljava/lang/String;[Ljava/lang/Object;)V
+HSPLandroid/database/sqlite/SQLiteDatabase;->executeSql(Ljava/lang/String;[Ljava/lang/Object;)I
+HSPLandroid/database/sqlite/SQLiteDatabase;->finalize()V
+HSPLandroid/database/sqlite/SQLiteDatabase;->findEditTable(Ljava/lang/String;)Ljava/lang/String;
+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
+HSPLandroid/database/sqlite/SQLiteDatabase;->inTransaction()Z
+HSPLandroid/database/sqlite/SQLiteDatabase;->insert(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;->isDbLockedByCurrentThread()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;->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;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;->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;->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;->replace(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J
+HSPLandroid/database/sqlite/SQLiteDatabase;->setMaxSqlCacheSize(I)V
+HSPLandroid/database/sqlite/SQLiteDatabase;->setTransactionSuccessful()V
+HSPLandroid/database/sqlite/SQLiteDatabase;->setVersion(I)V
+HSPLandroid/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V
+HSPLandroid/database/sqlite/SQLiteDatabase;->update(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I
+HSPLandroid/database/sqlite/SQLiteDatabase;->updateWithOnConflict(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;I)I
+HSPLandroid/database/sqlite/SQLiteDatabase;->validateSql(Ljava/lang/String;Landroid/os/CancellationSignal;)V
+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;->stripPathForLogs(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->updateParametersFrom(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)V
+HSPLandroid/database/sqlite/SQLiteDebug$DbStats;-><init>(Ljava/lang/String;JJIIII)V
+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;->cursorRequeried(Landroid/database/Cursor;)V
+HSPLandroid/database/sqlite/SQLiteDirectCursorDriver;->query(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;[Ljava/lang/String;)Landroid/database/Cursor;
+HSPLandroid/database/sqlite/SQLiteException;-><init>(Ljava/lang/String;)V
+HSPLandroid/database/sqlite/SQLiteGlobal;->getDefaultJournalMode()Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteGlobal;->getDefaultPageSize()I
+HSPLandroid/database/sqlite/SQLiteGlobal;->getDefaultSyncMode()Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteGlobal;->getIdleConnectionTimeout()I
+HSPLandroid/database/sqlite/SQLiteGlobal;->getJournalSizeLimit()I
+HSPLandroid/database/sqlite/SQLiteGlobal;->getWALAutoCheckpoint()I
+HSPLandroid/database/sqlite/SQLiteGlobal;->getWALConnectionPoolSize()I
+HSPLandroid/database/sqlite/SQLiteGlobal;->getWALSyncMode()Ljava/lang/String;
+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
+HSPLandroid/database/sqlite/SQLiteOpenHelper;->close()V
+HSPLandroid/database/sqlite/SQLiteOpenHelper;->getDatabaseLocked(Z)Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteOpenHelper;->getReadableDatabase()Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteOpenHelper;->getWritableDatabase()Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteOpenHelper;->onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V
+HSPLandroid/database/sqlite/SQLiteOpenHelper;->onCreate(Landroid/database/sqlite/SQLiteDatabase;)V
+HSPLandroid/database/sqlite/SQLiteOpenHelper;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V
+HSPLandroid/database/sqlite/SQLiteOpenHelper;->onUpgrade(Landroid/database/sqlite/SQLiteDatabase;II)V
+HSPLandroid/database/sqlite/SQLiteOpenHelper;->setFilePermissionsForDb(Ljava/lang/String;)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;->bindLong(IJ)V
+HSPLandroid/database/sqlite/SQLiteProgram;->bindString(ILjava/lang/String;)V
+HSPLandroid/database/sqlite/SQLiteProgram;->clearBindings()V
+HSPLandroid/database/sqlite/SQLiteProgram;->getBindArgs()[Ljava/lang/Object;
+HSPLandroid/database/sqlite/SQLiteProgram;->getColumnNames()[Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteProgram;->getConnectionFlags()I
+HSPLandroid/database/sqlite/SQLiteProgram;->getDatabase()Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteProgram;->getSession()Landroid/database/sqlite/SQLiteSession;
+HSPLandroid/database/sqlite/SQLiteProgram;->getSql()Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteProgram;->onAllReferencesReleased()V
+HSPLandroid/database/sqlite/SQLiteQuery;-><init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Landroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteQuery;->fillWindow(Landroid/database/CursorWindow;IIZ)I
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;-><init>()V
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;->appendClause(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;->appendColumns(Ljava/lang/StringBuilder;[Ljava/lang/String;)V
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;->appendWhere(Ljava/lang/CharSequence;)V
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;->buildQuery([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;->buildQueryString(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;->computeProjection([Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;->getTables()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;->setProjectionMap(Ljava/util/Map;)V
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;->setStrict(Z)V
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;->setTables(Ljava/lang/String;)V
+HSPLandroid/database/sqlite/SQLiteSession$Transaction;-><init>()V
+HSPLandroid/database/sqlite/SQLiteSession$Transaction;-><init>(Landroid/database/sqlite/SQLiteSession$Transaction;)V
+HSPLandroid/database/sqlite/SQLiteSession;-><init>(Landroid/database/sqlite/SQLiteConnectionPool;)V
+HSPLandroid/database/sqlite/SQLiteSession;->acquireConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteSession;->beginTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteSession;->beginTransactionUnchecked(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteSession;->endTransaction(Landroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteSession;->endTransactionUnchecked(Landroid/os/CancellationSignal;Z)V
+HSPLandroid/database/sqlite/SQLiteSession;->execute(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteSession;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)I
+HSPLandroid/database/sqlite/SQLiteSession;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Landroid/database/CursorWindow;IIZILandroid/os/CancellationSignal;)I
+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;->executeSpecial(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)Z
+HSPLandroid/database/sqlite/SQLiteSession;->hasConnection()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
+HSPLandroid/database/sqlite/SQLiteSession;->throwIfNoTransaction()V
+HSPLandroid/database/sqlite/SQLiteSession;->throwIfTransactionMarkedSuccessful()V
+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/SQLiteStatementInfo;-><init>()V
+HSPLandroid/database/sqlite/SQLiteTransactionListener;->onBegin()V
+HSPLandroid/database/sqlite/SQLiteTransactionListener;->onCommit()V
+HSPLandroid/database/sqlite/SQLiteTransactionListener;->onRollback()V
+HSPLandroid/ddm/DdmHandleAppName;-><init>()V
+HSPLandroid/ddm/DdmHandleAppName;->getAppName()Ljava/lang/String;
+HSPLandroid/ddm/DdmHandleAppName;->sendAPNM(Ljava/lang/String;I)V
+HSPLandroid/ddm/DdmHandleAppName;->setAppName(Ljava/lang/String;I)V
+HSPLandroid/ddm/DdmHandleExit;->connected()V
+HSPLandroid/ddm/DdmHandleExit;->disconnected()V
+HSPLandroid/ddm/DdmHandleHeap;->connected()V
+HSPLandroid/ddm/DdmHandleHeap;->disconnected()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;->disconnected()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/DdmHandleNativeHeap;->disconnected()V
+HSPLandroid/ddm/DdmHandleProfiling;->connected()V
+HSPLandroid/ddm/DdmHandleProfiling;->disconnected()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/DdmHandleThread;->disconnected()V
+HSPLandroid/ddm/DdmHandleViewDebug;->connected()V
+HSPLandroid/ddm/DdmHandleViewDebug;->disconnected()V
+HSPLandroid/graphics/-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$1;->$m$2(D)D
+HSPLandroid/graphics/-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$1;->$m$4(D)D
+HSPLandroid/graphics/-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$1;-><init>(BLjava/lang/Object;)V
+HSPLandroid/graphics/-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$1;->applyAsDouble(D)D
+HSPLandroid/graphics/BaseCanvas;-><init>()V
+HSPLandroid/graphics/BaseCanvas;->drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Matrix;Landroid/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
+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;->drawLine(FFFFLandroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseCanvas;->drawOval(FFFFLandroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseCanvas;->drawOval(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseCanvas;->drawPath(Landroid/graphics/Path;Landroid/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/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
+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;-><init>(Ljava/lang/String;II)V
+HSPLandroid/graphics/Bitmap$Config;->nativeToConfig(I)Landroid/graphics/Bitmap$Config;
+HSPLandroid/graphics/Bitmap$Config;->values()[Landroid/graphics/Bitmap$Config;
+HSPLandroid/graphics/Bitmap;->-getandroid-graphics-Bitmap$ConfigSwitchesValues()[I
+HSPLandroid/graphics/Bitmap;->-wrap0(Landroid/os/Parcel;)Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;-><init>(JIIIZZ[BLandroid/graphics/NinePatch$InsetStruct;)V
+HSPLandroid/graphics/Bitmap;->checkHardware(Ljava/lang/String;)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
+HSPLandroid/graphics/Bitmap;->copy(Landroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;->copyPixelsToBuffer(Ljava/nio/Buffer;)V
+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;IIIILandroid/graphics/Matrix;Z)Landroid/graphics/Bitmap;
+HSPLandroid/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;
+HSPLandroid/graphics/Bitmap;->createScaledBitmap(Landroid/graphics/Bitmap;IIZ)Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;->eraseColor(I)V
+HSPLandroid/graphics/Bitmap;->extractAlpha(Landroid/graphics/Paint;[I)Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;->getAllocationByteCount()I
+HSPLandroid/graphics/Bitmap;->getByteCount()I
+HSPLandroid/graphics/Bitmap;->getConfig()Landroid/graphics/Bitmap$Config;
+HSPLandroid/graphics/Bitmap;->getDefaultDensity()I
+HSPLandroid/graphics/Bitmap;->getGenerationId()I
+HSPLandroid/graphics/Bitmap;->getHeight()I
+HSPLandroid/graphics/Bitmap;->getNativeInstance()J
+HSPLandroid/graphics/Bitmap;->getNinePatchChunk()[B
+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
+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;->recycle()V
+HSPLandroid/graphics/Bitmap;->reinit(IIZ)V
+HSPLandroid/graphics/Bitmap;->scaleFromDensity(III)I
+HSPLandroid/graphics/Bitmap;->setDensity(I)V
+HSPLandroid/graphics/Bitmap;->setHasAlpha(Z)V
+HSPLandroid/graphics/Bitmap;->setHasMipMap(Z)V
+HSPLandroid/graphics/Bitmap;->setPixels([IIIIIII)V
+HSPLandroid/graphics/Bitmap;->setPremultiplied(Z)V
+HSPLandroid/graphics/Bitmap;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/graphics/BitmapFactory$Options;-><init>()V
+HSPLandroid/graphics/BitmapFactory$Options;->validate(Landroid/graphics/BitmapFactory$Options;)V
+HSPLandroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
+HSPLandroid/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;
+HSPLandroid/graphics/BitmapFactory;->decodeStream(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
+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
+HSPLandroid/graphics/BlurMaskFilter$Blur;-><init>(Ljava/lang/String;II)V
+HSPLandroid/graphics/BlurMaskFilter;-><init>(FLandroid/graphics/BlurMaskFilter$Blur;)V
+HSPLandroid/graphics/Canvas$EdgeType;-><init>(Ljava/lang/String;II)V
+HSPLandroid/graphics/Canvas;->-wrap0()J
+HSPLandroid/graphics/Canvas;-><init>()V
+HSPLandroid/graphics/Canvas;-><init>(J)V
+HSPLandroid/graphics/Canvas;-><init>(Landroid/graphics/Bitmap;)V
+HSPLandroid/graphics/Canvas;->clipRect(FFFF)Z
+HSPLandroid/graphics/Canvas;->clipRect(IIII)Z
+HSPLandroid/graphics/Canvas;->clipRect(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/Canvas;->concat(Landroid/graphics/Matrix;)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
+HSPLandroid/graphics/Canvas;->drawColor(ILandroid/graphics/PorterDuff$Mode;)V
+HSPLandroid/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
+HSPLandroid/graphics/Canvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V
+HSPLandroid/graphics/Canvas;->drawRect(FFFFLandroid/graphics/Paint;)V
+HSPLandroid/graphics/Canvas;->drawRect(Landroid/graphics/Rect;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/String;FFLandroid/graphics/Paint;)V
+HSPLandroid/graphics/Canvas;->drawText([CIIFFLandroid/graphics/Paint;)V
+HSPLandroid/graphics/Canvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V
+HSPLandroid/graphics/Canvas;->getClipBounds(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/Canvas;->getDensity()I
+HSPLandroid/graphics/Canvas;->getHeight()I
+HSPLandroid/graphics/Canvas;->getMatrix()Landroid/graphics/Matrix;
+HSPLandroid/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;->isHardwareAccelerated()Z
+HSPLandroid/graphics/Canvas;->isRecordingFor(Ljava/lang/Object;)Z
+HSPLandroid/graphics/Canvas;->quickReject(FFFFLandroid/graphics/Canvas$EdgeType;)Z
+HSPLandroid/graphics/Canvas;->restore()V
+HSPLandroid/graphics/Canvas;->restoreToCount(I)V
+HSPLandroid/graphics/Canvas;->rotate(F)V
+HSPLandroid/graphics/Canvas;->rotate(FFF)V
+HSPLandroid/graphics/Canvas;->save()I
+HSPLandroid/graphics/Canvas;->save(I)I
+HSPLandroid/graphics/Canvas;->scale(FF)V
+HSPLandroid/graphics/Canvas;->scale(FFFF)V
+HSPLandroid/graphics/Canvas;->setBitmap(Landroid/graphics/Bitmap;)V
+HSPLandroid/graphics/Canvas;->setDrawFilter(Landroid/graphics/DrawFilter;)V
+HSPLandroid/graphics/Canvas;->setHighContrastText(Z)V
+HSPLandroid/graphics/Canvas;->translate(FF)V
+HSPLandroid/graphics/Color;-><init>(FFFFLandroid/graphics/ColorSpace;)V
+HSPLandroid/graphics/Color;->HSVToColor(I[F)I
+HSPLandroid/graphics/Color;->HSVToColor([F)I
+HSPLandroid/graphics/Color;->RGBToHSV(III[F)V
+HSPLandroid/graphics/Color;->alpha(I)I
+HSPLandroid/graphics/Color;->argb(IIII)I
+HSPLandroid/graphics/Color;->blue(I)I
+HSPLandroid/graphics/Color;->colorToHSV(I[F)V
+HSPLandroid/graphics/Color;->green(I)I
+HSPLandroid/graphics/Color;->luminance(I)F
+HSPLandroid/graphics/Color;->parseColor(Ljava/lang/String;)I
+HSPLandroid/graphics/Color;->red(I)I
+HSPLandroid/graphics/Color;->rgb(III)I
+HSPLandroid/graphics/Color;->toArgb()I
+HSPLandroid/graphics/Color;->valueOf(I)Landroid/graphics/Color;
+HSPLandroid/graphics/ColorFilter;->-wrap0()J
+HSPLandroid/graphics/ColorFilter;-><init>()V
+HSPLandroid/graphics/ColorFilter;->discardNativeInstance()V
+HSPLandroid/graphics/ColorFilter;->getNativeInstance()J
+HSPLandroid/graphics/ColorMatrix;-><init>()V
+HSPLandroid/graphics/ColorMatrix;->reset()V
+HSPLandroid/graphics/ColorMatrix;->set([F)V
+HSPLandroid/graphics/ColorMatrixColorFilter;-><init>([F)V
+HSPLandroid/graphics/ColorMatrixColorFilter;->setColorMatrixArray([F)V
+HSPLandroid/graphics/ColorSpace$Adaptation;-><init>(Ljava/lang/String;I[F)V
+HSPLandroid/graphics/ColorSpace$Rgb$TransferParameters;-><init>(DDDDDDD)V
+HSPLandroid/graphics/ColorSpace$Rgb;->-android_graphics_ColorSpace$Rgb-mthref-0(D)D
+HSPLandroid/graphics/ColorSpace$Rgb;->-get3(Landroid/graphics/ColorSpace$Rgb;)Landroid/graphics/ColorSpace$Rgb$TransferParameters;
+HSPLandroid/graphics/ColorSpace$Rgb;->-get4(Landroid/graphics/ColorSpace$Rgb;)[F
+HSPLandroid/graphics/ColorSpace$Rgb;->-get5(Landroid/graphics/ColorSpace$Rgb;)[F
+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$Rgb;)V
+HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)V
+HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[F[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;I)V
+HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[F[FLjava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;FFI)V
+HSPLandroid/graphics/ColorSpace$Rgb;->area([F)F
+HSPLandroid/graphics/ColorSpace$Rgb;->clamp(D)D
+HSPLandroid/graphics/ColorSpace$Rgb;->computePrimaries([F)[F
+HSPLandroid/graphics/ColorSpace$Rgb;->computeWhitePoint([F)[F
+HSPLandroid/graphics/ColorSpace$Rgb;->computeXYZMatrix([F[F)[F
+HSPLandroid/graphics/ColorSpace$Rgb;->getEotf()Ljava/util/function/DoubleUnaryOperator;
+HSPLandroid/graphics/ColorSpace$Rgb;->getWhitePoint()[F
+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([FFF)Z
+HSPLandroid/graphics/ColorSpace$Rgb;->lambda$-android_graphics_ColorSpace$Rgb_107152(Landroid/graphics/ColorSpace$Rgb$TransferParameters;D)D
+HSPLandroid/graphics/ColorSpace$Rgb;->xyPrimaries([F)[F
+HSPLandroid/graphics/ColorSpace$Rgb;->xyWhitePoint([F)[F
+HSPLandroid/graphics/ColorSpace;->-get1()[F
+HSPLandroid/graphics/ColorSpace;->-get2()[F
+HSPLandroid/graphics/ColorSpace;->-wrap0([F[F)Z
+HSPLandroid/graphics/ColorSpace;->-wrap4(DDDDDD)D
+HSPLandroid/graphics/ColorSpace;->-wrap6([F)[F
+HSPLandroid/graphics/ColorSpace;->-wrap8([F[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;)V
+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;
+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(Landroid/graphics/ColorSpace$Named;)Landroid/graphics/ColorSpace;
+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
+HSPLandroid/graphics/ColorSpace;->response(DDDDDD)D
+HSPLandroid/graphics/ColorSpace;->xyYToXyz([F)[F
+HSPLandroid/graphics/ComposeShader;-><init>(Landroid/graphics/Shader;Landroid/graphics/Shader;I)V
+HSPLandroid/graphics/ComposeShader;-><init>(Landroid/graphics/Shader;Landroid/graphics/Shader;Landroid/graphics/PorterDuff$Mode;)V
+HSPLandroid/graphics/ComposeShader;->createNativeInstance(J)J
+HSPLandroid/graphics/ComposeShader;->verifyNativeInstance()V
+HSPLandroid/graphics/DrawFilter;-><init>()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;->freeze()Z
+HSPLandroid/graphics/ImageFormat;->getBitsPerPixel(I)I
+HSPLandroid/graphics/ImageFormat;->isPublicFormat(I)Z
+HSPLandroid/graphics/Insets;-><init>(IIII)V
+HSPLandroid/graphics/Insets;->of(IIII)Landroid/graphics/Insets;
+HSPLandroid/graphics/Insets;->of(Landroid/graphics/Rect;)Landroid/graphics/Insets;
+HSPLandroid/graphics/Interpolator$Result;-><init>(Ljava/lang/String;I)V
+HSPLandroid/graphics/Interpolator;-><init>(II)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;
+HSPLandroid/graphics/LinearGradient;-><init>(FFFFIILandroid/graphics/Shader$TileMode;)V
+HSPLandroid/graphics/LinearGradient;-><init>(FFFF[I[FLandroid/graphics/Shader$TileMode;)V
+HSPLandroid/graphics/LinearGradient;->createNativeInstance(J)J
+HSPLandroid/graphics/MaskFilter;-><init>()V
+HSPLandroid/graphics/Matrix$ScaleToFit;-><init>(Ljava/lang/String;II)V
+HSPLandroid/graphics/Matrix;-><init>()V
+HSPLandroid/graphics/Matrix;-><init>(Landroid/graphics/Matrix;)V
+HSPLandroid/graphics/Matrix;->checkPointArrays([FI[FII)V
+HSPLandroid/graphics/Matrix;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/Matrix;->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
+HSPLandroid/graphics/Matrix;->postRotate(FFF)Z
+HSPLandroid/graphics/Matrix;->postScale(FF)Z
+HSPLandroid/graphics/Matrix;->postTranslate(FF)Z
+HSPLandroid/graphics/Matrix;->preConcat(Landroid/graphics/Matrix;)Z
+HSPLandroid/graphics/Matrix;->preRotate(FFF)Z
+HSPLandroid/graphics/Matrix;->preScale(FF)Z
+HSPLandroid/graphics/Matrix;->preTranslate(FF)Z
+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
+HSPLandroid/graphics/Matrix;->setScale(FF)V
+HSPLandroid/graphics/Matrix;->setScale(FFFF)V
+HSPLandroid/graphics/Matrix;->setTranslate(FF)V
+HSPLandroid/graphics/NinePatch$InsetStruct;-><init>(IIIIIIIIFIF)V
+HSPLandroid/graphics/NinePatch$InsetStruct;->scaleInsets(IIIIF)Landroid/graphics/Rect;
+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
+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
+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
+HSPLandroid/graphics/Outline;->setRoundRect(IIIIF)V
+HSPLandroid/graphics/Outline;->setRoundRect(Landroid/graphics/Rect;F)V
+HSPLandroid/graphics/Paint$Align;->values()[Landroid/graphics/Paint$Align;
+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;->descent()F
+HSPLandroid/graphics/Paint;->getAlpha()I
+HSPLandroid/graphics/Paint;->getColor()I
+HSPLandroid/graphics/Paint;->getColorFilter()Landroid/graphics/ColorFilter;
+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;->getHinting()I
+HSPLandroid/graphics/Paint;->getHyphenEdit()I
+HSPLandroid/graphics/Paint;->getLetterSpacing()F
+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;->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;->getTextPath(Ljava/lang/String;IIFFLandroid/graphics/Path;)V
+HSPLandroid/graphics/Paint;->getTextRunAdvances([CIIIIZ[FI)F
+HSPLandroid/graphics/Paint;->getTextScaleX()F
+HSPLandroid/graphics/Paint;->getTextSize()F
+HSPLandroid/graphics/Paint;->getTextSkewX()F
+HSPLandroid/graphics/Paint;->getTextWidths(Ljava/lang/String;II[F)I
+HSPLandroid/graphics/Paint;->getTextWidths(Ljava/lang/String;[F)I
+HSPLandroid/graphics/Paint;->getTypeface()Landroid/graphics/Typeface;
+HSPLandroid/graphics/Paint;->getWordSpacing()F
+HSPLandroid/graphics/Paint;->getXfermode()Landroid/graphics/Xfermode;
+HSPLandroid/graphics/Paint;->hasEqualAttributes(Landroid/graphics/Paint;)Z
+HSPLandroid/graphics/Paint;->hasGlyph(Ljava/lang/String;)Z
+HSPLandroid/graphics/Paint;->isAntiAlias()Z
+HSPLandroid/graphics/Paint;->isDither()Z
+HSPLandroid/graphics/Paint;->isElegantTextHeight()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;->set(Landroid/graphics/Paint;)V
+HSPLandroid/graphics/Paint;->setAlpha(I)V
+HSPLandroid/graphics/Paint;->setAntiAlias(Z)V
+HSPLandroid/graphics/Paint;->setClassVariablesFrom(Landroid/graphics/Paint;)V
+HSPLandroid/graphics/Paint;->setColor(I)V
+HSPLandroid/graphics/Paint;->setColorFilter(Landroid/graphics/ColorFilter;)Landroid/graphics/ColorFilter;
+HSPLandroid/graphics/Paint;->setCompatibilityScaling(F)V
+HSPLandroid/graphics/Paint;->setDither(Z)V
+HSPLandroid/graphics/Paint;->setFakeBoldText(Z)V
+HSPLandroid/graphics/Paint;->setFilterBitmap(Z)V
+HSPLandroid/graphics/Paint;->setFlags(I)V
+HSPLandroid/graphics/Paint;->setFontFeatureSettings(Ljava/lang/String;)V
+HSPLandroid/graphics/Paint;->setHyphenEdit(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
+HSPLandroid/graphics/Paint;->setStrikeThruText(Z)V
+HSPLandroid/graphics/Paint;->setStrokeCap(Landroid/graphics/Paint$Cap;)V
+HSPLandroid/graphics/Paint;->setStrokeJoin(Landroid/graphics/Paint$Join;)V
+HSPLandroid/graphics/Paint;->setStrokeMiter(F)V
+HSPLandroid/graphics/Paint;->setStrokeWidth(F)V
+HSPLandroid/graphics/Paint;->setStyle(Landroid/graphics/Paint$Style;)V
+HSPLandroid/graphics/Paint;->setTextAlign(Landroid/graphics/Paint$Align;)V
+HSPLandroid/graphics/Paint;->setTextLocales(Landroid/os/LocaleList;)V
+HSPLandroid/graphics/Paint;->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;->setWordSpacing(F)V
+HSPLandroid/graphics/Paint;->setXfermode(Landroid/graphics/Xfermode;)Landroid/graphics/Xfermode;
+HSPLandroid/graphics/Paint;->syncTextLocalesWithMinikin()V
+HSPLandroid/graphics/PaintFlagsDrawFilter;-><init>(II)V
+HSPLandroid/graphics/Path$Direction;-><init>(Ljava/lang/String;II)V
+HSPLandroid/graphics/Path;-><init>()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
+HSPLandroid/graphics/Path;->close()V
+HSPLandroid/graphics/Path;->computeBounds(Landroid/graphics/RectF;Z)V
+HSPLandroid/graphics/Path;->cubicTo(FFFFFF)V
+HSPLandroid/graphics/Path;->finalize()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
+HSPLandroid/graphics/Path;->mutateNI()J
+HSPLandroid/graphics/Path;->rLineTo(FF)V
+HSPLandroid/graphics/Path;->readOnlyNI()J
+HSPLandroid/graphics/Path;->reset()V
+HSPLandroid/graphics/Path;->rewind()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;Landroid/graphics/Path;)V
+HSPLandroid/graphics/Picture$RecordingCanvas;-><init>(Landroid/graphics/Picture;J)V
+HSPLandroid/graphics/Picture;-><init>()V
+HSPLandroid/graphics/Picture;-><init>(J)V
+HSPLandroid/graphics/Picture;->beginRecording(II)Landroid/graphics/Canvas;
+HSPLandroid/graphics/Picture;->endRecording()V
+HSPLandroid/graphics/PixelFormat;-><init>()V
+HSPLandroid/graphics/PixelFormat;->formatHasAlpha(I)Z
+HSPLandroid/graphics/PixelFormat;->getPixelFormatInfo(ILandroid/graphics/PixelFormat;)V
+HSPLandroid/graphics/Point;-><init>()V
+HSPLandroid/graphics/Point;-><init>(II)V
+HSPLandroid/graphics/Point;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/Point;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/graphics/Point;->set(II)V
+HSPLandroid/graphics/PointF;-><init>()V
+HSPLandroid/graphics/PointF;-><init>(FF)V
+HSPLandroid/graphics/PointF;->length(FF)F
+HSPLandroid/graphics/PointF;->set(FF)V
+HSPLandroid/graphics/PointF;->set(Landroid/graphics/PointF;)V
+HSPLandroid/graphics/PorterDuff;->intToMode(I)Landroid/graphics/PorterDuff$Mode;
+HSPLandroid/graphics/PorterDuff;->modeToInt(Landroid/graphics/PorterDuff$Mode;)I
+HSPLandroid/graphics/PorterDuffColorFilter;-><init>(ILandroid/graphics/PorterDuff$Mode;)V
+HSPLandroid/graphics/PorterDuffColorFilter;->createNativeInstance()J
+HSPLandroid/graphics/PorterDuffColorFilter;->getColor()I
+HSPLandroid/graphics/PorterDuffColorFilter;->getMode()Landroid/graphics/PorterDuff$Mode;
+HSPLandroid/graphics/PorterDuffColorFilter;->setColor(I)V
+HSPLandroid/graphics/PorterDuffColorFilter;->setMode(Landroid/graphics/PorterDuff$Mode;)V
+HSPLandroid/graphics/PorterDuffXfermode;-><init>(Landroid/graphics/PorterDuff$Mode;)V
+HSPLandroid/graphics/RadialGradient;-><init>(FFFIILandroid/graphics/Shader$TileMode;)V
+HSPLandroid/graphics/RadialGradient;-><init>(FFF[I[FLandroid/graphics/Shader$TileMode;)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;-><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
+HSPLandroid/graphics/Rect;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/Rect;->exactCenterX()F
+HSPLandroid/graphics/Rect;->exactCenterY()F
+HSPLandroid/graphics/Rect;->hashCode()I
+HSPLandroid/graphics/Rect;->height()I
+HSPLandroid/graphics/Rect;->inset(II)V
+HSPLandroid/graphics/Rect;->inset(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/Rect;->intersect(IIII)Z
+HSPLandroid/graphics/Rect;->intersect(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/Rect;->isEmpty()Z
+HSPLandroid/graphics/Rect;->offset(II)V
+HSPLandroid/graphics/Rect;->offsetTo(II)V
+HSPLandroid/graphics/Rect;->readFromParcel(Landroid/os/Parcel;)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;->toString()Ljava/lang/String;
+HSPLandroid/graphics/Rect;->union(IIII)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
+HSPLandroid/graphics/RectF;-><init>(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/RectF;->centerX()F
+HSPLandroid/graphics/RectF;->centerY()F
+HSPLandroid/graphics/RectF;->height()F
+HSPLandroid/graphics/RectF;->inset(FF)V
+HSPLandroid/graphics/RectF;->intersect(FFFF)Z
+HSPLandroid/graphics/RectF;->isEmpty()Z
+HSPLandroid/graphics/RectF;->offset(FF)V
+HSPLandroid/graphics/RectF;->round(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;->toString()Ljava/lang/String;
+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$Op;-><init>(Ljava/lang/String;II)V
+HSPLandroid/graphics/Region;->-wrap0(Landroid/os/Parcel;)J
+HSPLandroid/graphics/Region;-><init>()V
+HSPLandroid/graphics/Region;-><init>(J)V
+HSPLandroid/graphics/Region;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/Region;->finalize()V
+HSPLandroid/graphics/Region;->op(IIIILandroid/graphics/Region$Op;)Z
+HSPLandroid/graphics/Region;->quickReject(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/Region;->recycle()V
+HSPLandroid/graphics/Region;->set(IIII)Z
+HSPLandroid/graphics/Region;->set(Landroid/graphics/Region;)Z
+HSPLandroid/graphics/Region;->setEmpty()V
+HSPLandroid/graphics/Region;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/graphics/Shader$TileMode;-><init>(Ljava/lang/String;II)V
+HSPLandroid/graphics/Shader;->-wrap0()J
+HSPLandroid/graphics/Shader;-><init>()V
+HSPLandroid/graphics/Shader;->discardNativeInstance()V
+HSPLandroid/graphics/Shader;->getNativeInstance()J
+HSPLandroid/graphics/Shader;->setLocalMatrix(Landroid/graphics/Matrix;)V
+HSPLandroid/graphics/Shader;->verifyNativeInstance()V
+HSPLandroid/graphics/SurfaceTexture$1;-><init>(Landroid/graphics/SurfaceTexture;Landroid/os/Looper;Landroid/os/Handler$Callback;ZLandroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V
+HSPLandroid/graphics/SurfaceTexture$1;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/graphics/SurfaceTexture$OnFrameAvailableListener;->onFrameAvailable(Landroid/graphics/SurfaceTexture;)V
+HSPLandroid/graphics/SurfaceTexture;-><init>(Z)V
+HSPLandroid/graphics/SurfaceTexture;->postEventFromNative(Ljava/lang/ref/WeakReference;)V
+HSPLandroid/graphics/SurfaceTexture;->setDefaultBufferSize(II)V
+HSPLandroid/graphics/SurfaceTexture;->setOnFrameAvailableListener(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;Landroid/os/Handler;)V
+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;->build()Landroid/graphics/Typeface;
+HSPLandroid/graphics/Typeface$Builder;->createAssetUid(Landroid/content/res/AssetManager;Ljava/lang/String;I[Landroid/graphics/fonts/FontVariationAxis;II)Ljava/lang/String;
+HSPLandroid/graphics/Typeface;->-get2()Landroid/util/LruCache;
+HSPLandroid/graphics/Typeface;->-wrap0([Landroid/graphics/FontFamily;II)Landroid/graphics/Typeface;
+HSPLandroid/graphics/Typeface;-><init>(J)V
+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;II)Landroid/graphics/Typeface;
+HSPLandroid/graphics/Typeface;->defaultFromStyle(I)Landroid/graphics/Typeface;
+HSPLandroid/graphics/Typeface;->getStyle()I
+HSPLandroid/graphics/Xfermode;-><init>()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
+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
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->canConstantState()Z
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->getOpacity()I
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->invalidateCache()V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->isStateful()Z
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+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;->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;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
+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;->getMaxIntrinsicHeight()I
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getMaxIntrinsicWidth()I
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getOpacity()I
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->inflateLayers(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->invalidateSelf()V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->isStateful()Z
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->jumpToCurrentState()V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->mutate()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->resumeChildInvalidation()V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->setVisible(ZZ)Z
+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
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateMaskBoundsInternal(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/Animatable2$AnimationCallback;-><init>()V
+HSPLandroid/graphics/drawable/Animatable2;->clearAnimationCallbacks()V
+HSPLandroid/graphics/drawable/Animatable2;->registerAnimationCallback(Landroid/graphics/drawable/Animatable2$AnimationCallback;)V
+HSPLandroid/graphics/drawable/Animatable2;->unregisterAnimationCallback(Landroid/graphics/drawable/Animatable2$AnimationCallback;)Z
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;-><init>(Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;Landroid/graphics/drawable/AnimatedStateListDrawable;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->addStateSet([ILandroid/graphics/drawable/Drawable;I)I
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->addTransition(IILandroid/graphics/drawable/Drawable;Z)I
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->generateTransitionKey(II)J
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->getKeyframeIdAt(I)I
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->indexOfKeyframe([I)I
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->indexOfTransition(II)I
+HSPLandroid/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;
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->transitionHasReversibleFlag(II)Z
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedVectorDrawableTransition;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable;ZZ)V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedVectorDrawableTransition;->start()V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedVectorDrawableTransition;->stop()V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$Transition;-><init>()V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$Transition;-><init>(Landroid/graphics/drawable/AnimatedStateListDrawable$Transition;)V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$Transition;->start()V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable$Transition;->stop()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;)V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->clearMutated()V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->cloneConstantState()Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->cloneConstantState()Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->init()V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->isStateful()Z
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->jumpToCurrentState()V
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->mutate()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/AnimatedStateListDrawable;->parseItem(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)I
+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
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$2;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator;-><init>(IFLjava/lang/String;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/animation/Animator;
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;Landroid/graphics/drawable/Drawable$Callback;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->addPendingAnimator(IFLjava/lang/String;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->addTargetAnimator(Ljava/lang/String;Landroid/animation/Animator;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->inflatePendingAnimators(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/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
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->canReverse()Z
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->end()V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->init(Landroid/animation/AnimatorSet;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->isInfinite()Z
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->isRunning()Z
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->isStarted()Z
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->onDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->pause()V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->removeListener(Landroid/animation/Animator$AnimatorListener;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->reset()V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->resume()V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->reverse()V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->setListener(Landroid/animation/Animator$AnimatorListener;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;->start()V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->addPendingAction(I)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->callOnFinished(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->createFloatDataPoints(Landroid/animation/PropertyValuesHolder$PropertyValues$DataSource;J)[F
+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
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->createRTAnimatorForGroup([Landroid/animation/PropertyValuesHolder;Landroid/animation/ObjectAnimator;Landroid/graphics/drawable/VectorDrawable$VGroup;J)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->createRTAnimatorForPath(Landroid/animation/ObjectAnimator;Landroid/graphics/drawable/VectorDrawable$VPath;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;->getFrameCount(J)I
+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;->isStarted()Z
+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/view/DisplayListCanvas;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->setListener(Landroid/animation/Animator$AnimatorListener;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->start()V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->startAnimation()V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->useLastSeenTarget()Z
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->useTarget(Landroid/view/RenderNode;)Z
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->-get0(Landroid/graphics/drawable/AnimatedVectorDrawable;)Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->-wrap0()Z
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->-wrap1()J
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->-wrap11(J[FI)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->-wrap13(JJ)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->-wrap14(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->-wrap15(Landroid/animation/Animator;Ljava/lang/String;Landroid/graphics/drawable/VectorDrawable;Z)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->-wrap2(JIFF)J
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->-wrap3(JIII)J
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->-wrap4(JJJ)J
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->-wrap5(JIFF)J
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->-wrap7(JJJJJII)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->-wrap8(J)V
+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;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->canApplyTheme()Z
+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
+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;->isStateful()Z
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->mutate()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->registerAnimationCallback(Landroid/graphics/drawable/Animatable2$AnimationCallback;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->setAlpha(I)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)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
+HSPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->-get1(Landroid/graphics/drawable/AnimationDrawable$AnimationState;)Z
+HSPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->-set0(Landroid/graphics/drawable/AnimationDrawable$AnimationState;Z)Z
+HSPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->-wrap0(Landroid/graphics/drawable/AnimationDrawable$AnimationState;)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;->addFrame(Landroid/graphics/drawable/Drawable;I)V
+HSPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->growArray(II)V
+HSPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->mutate()V
+HSPLandroid/graphics/drawable/AnimationDrawable$AnimationState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+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;)V
+HSPLandroid/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;
+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
+HSPLandroid/graphics/drawable/AnimationDrawable;->mutate()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/AnimationDrawable;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
+HSPLandroid/graphics/drawable/AnimationDrawable;->setFrame(IZZ)V
+HSPLandroid/graphics/drawable/AnimationDrawable;->setVisible(ZZ)Z
+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
+HSPLandroid/graphics/drawable/BitmapDrawable$BitmapState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/BitmapDrawable$BitmapState;->newDrawable()Landroid/graphics/drawable/Drawable;
+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
+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;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/BitmapDrawable;->clearMutated()V
+HSPLandroid/graphics/drawable/BitmapDrawable;->computeBitmapSize()V
+HSPLandroid/graphics/drawable/BitmapDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->getAlpha()I
+HSPLandroid/graphics/drawable/BitmapDrawable;->getBitmap()Landroid/graphics/Bitmap;
+HSPLandroid/graphics/drawable/BitmapDrawable;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/BitmapDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
+HSPLandroid/graphics/drawable/BitmapDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
+HSPLandroid/graphics/drawable/BitmapDrawable;->getIntrinsicHeight()I
+HSPLandroid/graphics/drawable/BitmapDrawable;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/BitmapDrawable;->getOpacity()I
+HSPLandroid/graphics/drawable/BitmapDrawable;->getOutline(Landroid/graphics/Outline;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->isAutoMirrored()Z
+HSPLandroid/graphics/drawable/BitmapDrawable;->isStateful()Z
+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
+HSPLandroid/graphics/drawable/BitmapDrawable;->setMipMap(Z)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->setTintMode(Landroid/graphics/PorterDuff$Mode;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->setXfermode(Landroid/graphics/Xfermode;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->updateDstRectAndInsetsIfDirty()V
+HSPLandroid/graphics/drawable/BitmapDrawable;->updateLocalState(Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;I)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/ClipDrawable$ClipState;->-set0(Landroid/graphics/drawable/ClipDrawable$ClipState;[I)[I
+HSPLandroid/graphics/drawable/ClipDrawable$ClipState;-><init>(Landroid/graphics/drawable/ClipDrawable$ClipState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/ClipDrawable;-><init>()V
+HSPLandroid/graphics/drawable/ClipDrawable;-><init>(Landroid/graphics/drawable/ClipDrawable$ClipState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/ClipDrawable;-><init>(Landroid/graphics/drawable/Drawable;II)V
+HSPLandroid/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
+HSPLandroid/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
+HSPLandroid/graphics/drawable/ColorDrawable$ColorState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/ColorDrawable$ColorState;->newDrawable()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/ColorDrawable$ColorState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/ColorDrawable;-><init>()V
+HSPLandroid/graphics/drawable/ColorDrawable;-><init>(I)V
+HSPLandroid/graphics/drawable/ColorDrawable;-><init>(Landroid/graphics/drawable/ColorDrawable$ColorState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/ColorDrawable;-><init>(Landroid/graphics/drawable/ColorDrawable$ColorState;Landroid/content/res/Resources;Landroid/graphics/drawable/ColorDrawable;)V
+HSPLandroid/graphics/drawable/ColorDrawable;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/ColorDrawable;->clearMutated()V
+HSPLandroid/graphics/drawable/ColorDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/ColorDrawable;->getAlpha()I
+HSPLandroid/graphics/drawable/ColorDrawable;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/ColorDrawable;->getColor()I
+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
+HSPLandroid/graphics/drawable/ColorDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/ColorDrawable;->isStateful()Z
+HSPLandroid/graphics/drawable/ColorDrawable;->mutate()Landroid/graphics/drawable/Drawable;
+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
+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
+HSPLandroid/graphics/drawable/Drawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/Drawable;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/Drawable;->clearColorFilter()V
+HSPLandroid/graphics/drawable/Drawable;->clearMutated()V
+HSPLandroid/graphics/drawable/Drawable;->copyBounds(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/Drawable;->createFromResourceStream(Landroid/content/res/Resources;Landroid/util/TypedValue;Ljava/io/InputStream;Ljava/lang/String;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/Drawable;->createFromXmlForDensity(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/Drawable;->createFromXmlInner(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/Drawable;->createFromXmlInnerForDensity(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/Drawable;->drawableFromBitmap(Landroid/content/res/Resources;Landroid/graphics/Bitmap;[BLandroid/graphics/Rect;Landroid/graphics/Rect;Ljava/lang/String;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/Drawable;->getBounds()Landroid/graphics/Rect;
+HSPLandroid/graphics/drawable/Drawable;->getCallback()Landroid/graphics/drawable/Drawable$Callback;
+HSPLandroid/graphics/drawable/Drawable;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/Drawable;->getColorFilter()Landroid/graphics/ColorFilter;
+HSPLandroid/graphics/drawable/Drawable;->getCurrent()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/Drawable;->getDirtyBounds()Landroid/graphics/Rect;
+HSPLandroid/graphics/drawable/Drawable;->getIntrinsicHeight()I
+HSPLandroid/graphics/drawable/Drawable;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/Drawable;->getLayoutDirection()I
+HSPLandroid/graphics/drawable/Drawable;->getLevel()I
+HSPLandroid/graphics/drawable/Drawable;->getMinimumHeight()I
+HSPLandroid/graphics/drawable/Drawable;->getMinimumWidth()I
+HSPLandroid/graphics/drawable/Drawable;->getOutline(Landroid/graphics/Outline;)V
+HSPLandroid/graphics/drawable/Drawable;->getPadding(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/drawable/Drawable;->getState()[I
+HSPLandroid/graphics/drawable/Drawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/Drawable;->inflateWithAttributes(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/TypedArray;I)V
+HSPLandroid/graphics/drawable/Drawable;->invalidateSelf()V
+HSPLandroid/graphics/drawable/Drawable;->isProjected()Z
+HSPLandroid/graphics/drawable/Drawable;->isStateful()Z
+HSPLandroid/graphics/drawable/Drawable;->isVisible()Z
+HSPLandroid/graphics/drawable/Drawable;->jumpToCurrentState()V
+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
+HSPLandroid/graphics/drawable/Drawable;->onLevelChange(I)Z
+HSPLandroid/graphics/drawable/Drawable;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/Drawable;->parseTintMode(ILandroid/graphics/PorterDuff$Mode;)Landroid/graphics/PorterDuff$Mode;
+HSPLandroid/graphics/drawable/Drawable;->resolveDensity(Landroid/content/res/Resources;I)I
+HSPLandroid/graphics/drawable/Drawable;->resolveOpacity(II)I
+HSPLandroid/graphics/drawable/Drawable;->scaleFromDensity(FII)F
+HSPLandroid/graphics/drawable/Drawable;->scaleFromDensity(IIIZ)I
+HSPLandroid/graphics/drawable/Drawable;->scheduleSelf(Ljava/lang/Runnable;J)V
+HSPLandroid/graphics/drawable/Drawable;->setAutoMirrored(Z)V
+HSPLandroid/graphics/drawable/Drawable;->setBounds(IIII)V
+HSPLandroid/graphics/drawable/Drawable;->setBounds(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/Drawable;->setCallback(Landroid/graphics/drawable/Drawable$Callback;)V
+HSPLandroid/graphics/drawable/Drawable;->setChangingConfigurations(I)V
+HSPLandroid/graphics/drawable/Drawable;->setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V
+HSPLandroid/graphics/drawable/Drawable;->setDither(Z)V
+HSPLandroid/graphics/drawable/Drawable;->setHotspot(FF)V
+HSPLandroid/graphics/drawable/Drawable;->setLayoutDirection(I)Z
+HSPLandroid/graphics/drawable/Drawable;->setLevel(I)Z
+HSPLandroid/graphics/drawable/Drawable;->setSrcDensityOverride(I)V
+HSPLandroid/graphics/drawable/Drawable;->setState([I)Z
+HSPLandroid/graphics/drawable/Drawable;->setTint(I)V
+HSPLandroid/graphics/drawable/Drawable;->setTintList(Landroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/Drawable;->setTintMode(Landroid/graphics/PorterDuff$Mode;)V
+HSPLandroid/graphics/drawable/Drawable;->setVisible(ZZ)Z
+HSPLandroid/graphics/drawable/Drawable;->setXfermode(Landroid/graphics/Xfermode;)V
+HSPLandroid/graphics/drawable/Drawable;->unscheduleSelf(Ljava/lang/Runnable;)V
+HSPLandroid/graphics/drawable/Drawable;->updateTintFilter(Landroid/graphics/PorterDuffColorFilter;Landroid/content/res/ColorStateList;Landroid/graphics/PorterDuff$Mode;)Landroid/graphics/PorterDuffColorFilter;
+HSPLandroid/graphics/drawable/DrawableContainer$1;-><init>(Landroid/graphics/drawable/DrawableContainer;)V
+HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;-><init>()V
+HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;-><init>(Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;)V
+HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->unwrap()Landroid/graphics/drawable/Drawable$Callback;
+HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->wrap(Landroid/graphics/drawable/Drawable$Callback;)Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->-wrap0(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;-><init>(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/DrawableContainer;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->addChild(Landroid/graphics/drawable/Drawable;)I
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->canConstantState()Z
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->clearMutated()V
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->computeConstantSize()V
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->createAllFutures()V
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getCapacity()I
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChild(I)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChildCount()I
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChildren()[Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getConstantHeight()I
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getConstantPadding()Landroid/graphics/Rect;
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getConstantWidth()I
+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
+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
+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
+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;
+HSPLandroid/graphics/drawable/DrawableContainer;->getCurrentIndex()I
+HSPLandroid/graphics/drawable/DrawableContainer;->getIntrinsicHeight()I
+HSPLandroid/graphics/drawable/DrawableContainer;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/DrawableContainer;->getMinimumHeight()I
+HSPLandroid/graphics/drawable/DrawableContainer;->getMinimumWidth()I
+HSPLandroid/graphics/drawable/DrawableContainer;->getOpacity()I
+HSPLandroid/graphics/drawable/DrawableContainer;->getOpticalInsets()Landroid/graphics/Insets;
+HSPLandroid/graphics/drawable/DrawableContainer;->getOutline(Landroid/graphics/Outline;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->getPadding(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/drawable/DrawableContainer;->initializeDrawableForDisplay(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->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
+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
+HSPLandroid/graphics/drawable/DrawableContainer;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->setDither(Z)V
+HSPLandroid/graphics/drawable/DrawableContainer;->setTintList(Landroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->setTintMode(Landroid/graphics/PorterDuff$Mode;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->setVisible(ZZ)Z
+HSPLandroid/graphics/drawable/DrawableContainer;->updateDensity(Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/DrawableInflater;-><init>(Landroid/content/res/Resources;Ljava/lang/ClassLoader;)V
+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;->-get0(Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;)[I
+HSPLandroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;->-set0(Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;[I)[I
+HSPLandroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;-><init>(Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;->canConstantState()Z
+HSPLandroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;->getChangingConfigurations()I
+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
+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
+HSPLandroid/graphics/drawable/DrawableWrapper;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/DrawableWrapper;->getPadding(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/drawable/DrawableWrapper;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->inflateChildDrawable(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->isStateful()Z
+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
+HSPLandroid/graphics/drawable/DrawableWrapper;->onLevelChange(I)Z
+HSPLandroid/graphics/drawable/DrawableWrapper;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/DrawableWrapper;->setAlpha(I)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->setColorFilter(Landroid/graphics/ColorFilter;)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->setDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->setTintList(Landroid/content/res/ColorStateList;)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
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->-wrap0(Landroid/graphics/drawable/GradientDrawable$GradientState;)V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;-><init>(Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;-><init>(Landroid/graphics/drawable/GradientDrawable$Orientation;[I)V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->applyDensityScaling(II)V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->computeOpacity()V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->newDrawable()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->setCornerRadii([F)V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->setCornerRadius(F)V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->setDensity(I)V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->setGradientColors([I)V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->setShape(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$Orientation;->values()[Landroid/graphics/drawable/GradientDrawable$Orientation;
+HSPLandroid/graphics/drawable/GradientDrawable;->-getandroid-graphics-drawable-GradientDrawable$OrientationSwitchesValues()[I
+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;)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;->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;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
+HSPLandroid/graphics/drawable/GradientDrawable;->getFloatOrFraction(Landroid/content/res/TypedArray;IF)F
+HSPLandroid/graphics/drawable/GradientDrawable;->getIntrinsicHeight()I
+HSPLandroid/graphics/drawable/GradientDrawable;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/GradientDrawable;->getOpacity()I
+HSPLandroid/graphics/drawable/GradientDrawable;->getOutline(Landroid/graphics/Outline;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->getPadding(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/drawable/GradientDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->isOpaque(I)Z
+HSPLandroid/graphics/drawable/GradientDrawable;->isOpaqueForState()Z
+HSPLandroid/graphics/drawable/GradientDrawable;->isStateful()Z
+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;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/GradientDrawable;->setAlpha(I)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
+HSPLandroid/graphics/drawable/GradientDrawable;->setColors([I)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;->setOrientation(Landroid/graphics/drawable/GradientDrawable$Orientation;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->setShape(I)V
+HSPLandroid/graphics/drawable/GradientDrawable;->setStroke(II)V
+HSPLandroid/graphics/drawable/GradientDrawable;->setStroke(IIFF)V
+HSPLandroid/graphics/drawable/GradientDrawable;->setStroke(ILandroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->setStroke(ILandroid/content/res/ColorStateList;FF)V
+HSPLandroid/graphics/drawable/GradientDrawable;->setStrokeInternal(IIFF)V
+HSPLandroid/graphics/drawable/GradientDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->setTintMode(Landroid/graphics/PorterDuff$Mode;)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
+HSPLandroid/graphics/drawable/GradientDrawable;->updateGradientDrawableSize(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->updateGradientDrawableSolid(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->updateGradientDrawableStroke(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->updateLocalState(Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/Icon$1;-><init>()V
+HSPLandroid/graphics/drawable/Icon$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/drawable/Icon;
+HSPLandroid/graphics/drawable/Icon$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/graphics/drawable/Icon;-><init>(I)V
+HSPLandroid/graphics/drawable/Icon;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/graphics/drawable/Icon;-><init>(Landroid/os/Parcel;Landroid/graphics/drawable/Icon;)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;
+HSPLandroid/graphics/drawable/Icon;->getResources()Landroid/content/res/Resources;
+HSPLandroid/graphics/drawable/Icon;->getType()I
+HSPLandroid/graphics/drawable/Icon;->hasTint()Z
+HSPLandroid/graphics/drawable/Icon;->loadDrawable(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/Icon;->loadDrawableAsUser(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/Icon;->loadDrawableInner(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/Icon;->setBitmap(Landroid/graphics/Bitmap;)V
+HSPLandroid/graphics/drawable/Icon;->setTint(I)Landroid/graphics/drawable/Icon;
+HSPLandroid/graphics/drawable/Icon;->setTintList(Landroid/content/res/ColorStateList;)Landroid/graphics/drawable/Icon;
+HSPLandroid/graphics/drawable/Icon;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->-get0(Landroid/graphics/drawable/InsetDrawable$InsetState;)[I
+HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->-set0(Landroid/graphics/drawable/InsetDrawable$InsetState;[I)[I
+HSPLandroid/graphics/drawable/InsetDrawable$InsetState;-><init>(Landroid/graphics/drawable/InsetDrawable$InsetState;Landroid/content/res/Resources;)V
+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;)V
+HSPLandroid/graphics/drawable/InsetDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/InsetDrawable;->getInset(Landroid/content/res/TypedArray;ILandroid/graphics/drawable/InsetDrawable$InsetValue;)Landroid/graphics/drawable/InsetDrawable$InsetValue;
+HSPLandroid/graphics/drawable/InsetDrawable;->getInsets(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/InsetDrawable;->getIntrinsicHeight()I
+HSPLandroid/graphics/drawable/InsetDrawable;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/InsetDrawable;->getOpacity()I
+HSPLandroid/graphics/drawable/InsetDrawable;->getOutline(Landroid/graphics/Outline;)V
+HSPLandroid/graphics/drawable/InsetDrawable;->getPadding(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/drawable/InsetDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/InsetDrawable;->mutateConstantState()Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;
+HSPLandroid/graphics/drawable/InsetDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/InsetDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/InsetDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;-><init>(I)V
+HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;-><init>(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;Landroid/graphics/drawable/LayerDrawable;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->setDensity(I)V
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->-get0(Landroid/graphics/drawable/LayerDrawable$LayerState;)Z
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->-get1(Landroid/graphics/drawable/LayerDrawable$LayerState;)I
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->-get2(Landroid/graphics/drawable/LayerDrawable$LayerState;)[I
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->-set0(Landroid/graphics/drawable/LayerDrawable$LayerState;Z)Z
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->-set1(Landroid/graphics/drawable/LayerDrawable$LayerState;I)I
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->-set2(Landroid/graphics/drawable/LayerDrawable$LayerState;[I)[I
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;-><init>(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/graphics/drawable/LayerDrawable;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->applyDensityScaling(II)V
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->canConstantState()Z
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->getOpacity()I
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->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
+HSPLandroid/graphics/drawable/LayerDrawable;-><init>()V
+HSPLandroid/graphics/drawable/LayerDrawable;-><init>(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/LayerDrawable;-><init>([Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/LayerDrawable;-><init>([Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/LayerDrawable$LayerState;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->addLayer(Landroid/graphics/drawable/Drawable;[IIIIII)Landroid/graphics/drawable/LayerDrawable$ChildDrawable;
+HSPLandroid/graphics/drawable/LayerDrawable;->addLayer(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;)I
+HSPLandroid/graphics/drawable/LayerDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/LayerDrawable;->clearMutated()V
+HSPLandroid/graphics/drawable/LayerDrawable;->computeNestedPadding(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->computeStackedPadding(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->createConstantState(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/LayerDrawable$LayerState;
+HSPLandroid/graphics/drawable/LayerDrawable;->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;
+HSPLandroid/graphics/drawable/LayerDrawable;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/LayerDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
+HSPLandroid/graphics/drawable/LayerDrawable;->getDrawable(I)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/LayerDrawable;->getIntrinsicHeight()I
+HSPLandroid/graphics/drawable/LayerDrawable;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/LayerDrawable;->getNumberOfLayers()I
+HSPLandroid/graphics/drawable/LayerDrawable;->getOpacity()I
+HSPLandroid/graphics/drawable/LayerDrawable;->getOutline(Landroid/graphics/Outline;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->getPadding(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/drawable/LayerDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->inflateLayers(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->isAutoMirrored()Z
+HSPLandroid/graphics/drawable/LayerDrawable;->isProjected()Z
+HSPLandroid/graphics/drawable/LayerDrawable;->isStateful()Z
+HSPLandroid/graphics/drawable/LayerDrawable;->jumpToCurrentState()V
+HSPLandroid/graphics/drawable/LayerDrawable;->mutate()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/LayerDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/LayerDrawable;->refreshChildPadding(ILandroid/graphics/drawable/LayerDrawable$ChildDrawable;)Z
+HSPLandroid/graphics/drawable/LayerDrawable;->refreshPadding()V
+HSPLandroid/graphics/drawable/LayerDrawable;->resolveGravity(IIIII)I
+HSPLandroid/graphics/drawable/LayerDrawable;->resumeChildInvalidation()V
+HSPLandroid/graphics/drawable/LayerDrawable;->setAutoMirrored(Z)V
+HSPLandroid/graphics/drawable/LayerDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->setDither(Z)V
+HSPLandroid/graphics/drawable/LayerDrawable;->setDrawable(ILandroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->setPaddingMode(I)V
+HSPLandroid/graphics/drawable/LayerDrawable;->setVisible(ZZ)Z
+HSPLandroid/graphics/drawable/LayerDrawable;->suspendChildInvalidation()V
+HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerBounds(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerBoundsInternal(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerFromTypedArray(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable$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
+HSPLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;->newDrawable()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/NinePatchDrawable$NinePatchState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+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;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/NinePatchDrawable;->clearMutated()V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->computeBitmapSize()V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getIntrinsicHeight()I
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getOpacity()I
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getOpticalInsets()Landroid/graphics/Insets;
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getOutline(Landroid/graphics/Outline;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getPadding(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getPaint()Landroid/graphics/Paint;
+HSPLandroid/graphics/drawable/NinePatchDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->isAutoMirrored()Z
+HSPLandroid/graphics/drawable/NinePatchDrawable;->isStateful()Z
+HSPLandroid/graphics/drawable/NinePatchDrawable;->mutate()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/NinePatchDrawable;->needsMirroring()Z
+HSPLandroid/graphics/drawable/NinePatchDrawable;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/NinePatchDrawable;->setAlpha(I)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->setAutoMirrored(Z)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->setDither(Z)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->setTintMode(Landroid/graphics/PorterDuff$Mode;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->updateLocalState(Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/PaintDrawable;-><init>(I)V
+HSPLandroid/graphics/drawable/RippleBackground$1;-><init>(Ljava/lang/String;)V
+HSPLandroid/graphics/drawable/RippleBackground$1;->get(Landroid/graphics/drawable/RippleBackground;)Ljava/lang/Float;
+HSPLandroid/graphics/drawable/RippleBackground$1;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/graphics/drawable/RippleBackground$1;->setValue(Landroid/graphics/drawable/RippleBackground;F)V
+HSPLandroid/graphics/drawable/RippleBackground$1;->setValue(Ljava/lang/Object;F)V
+HSPLandroid/graphics/drawable/RippleBackground$BackgroundProperty;-><init>(Ljava/lang/String;)V
+HSPLandroid/graphics/drawable/RippleBackground;->-get0(Landroid/graphics/drawable/RippleBackground;)F
+HSPLandroid/graphics/drawable/RippleBackground;->-set0(Landroid/graphics/drawable/RippleBackground;F)F
+HSPLandroid/graphics/drawable/RippleBackground;-><init>(Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/Rect;ZZ)V
+HSPLandroid/graphics/drawable/RippleBackground;->createSoftwareEnter(Z)Landroid/animation/Animator;
+HSPLandroid/graphics/drawable/RippleBackground;->createSoftwareExit()Landroid/animation/Animator;
+HSPLandroid/graphics/drawable/RippleBackground;->isVisible()Z
+HSPLandroid/graphics/drawable/RippleComponent;-><init>(Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/Rect;Z)V
+HSPLandroid/graphics/drawable/RippleComponent;->cancel()V
+HSPLandroid/graphics/drawable/RippleComponent;->cancelSoftwareAnimations()V
+HSPLandroid/graphics/drawable/RippleComponent;->createHardwareExit(Landroid/graphics/Paint;)Landroid/graphics/drawable/RippleComponent$RenderNodeAnimatorSet;
+HSPLandroid/graphics/drawable/RippleComponent;->createSoftwareEnter(Z)Landroid/animation/Animator;
+HSPLandroid/graphics/drawable/RippleComponent;->createSoftwareExit()Landroid/animation/Animator;
+HSPLandroid/graphics/drawable/RippleComponent;->draw(Landroid/graphics/Canvas;Landroid/graphics/Paint;)Z
+HSPLandroid/graphics/drawable/RippleComponent;->drawHardware(Landroid/view/DisplayListCanvas;)Z
+HSPLandroid/graphics/drawable/RippleComponent;->drawSoftware(Landroid/graphics/Canvas;Landroid/graphics/Paint;)Z
+HSPLandroid/graphics/drawable/RippleComponent;->end()V
+HSPLandroid/graphics/drawable/RippleComponent;->endHardwareAnimations()V
+HSPLandroid/graphics/drawable/RippleComponent;->endSoftwareAnimations()V
+HSPLandroid/graphics/drawable/RippleComponent;->enter(Z)V
+HSPLandroid/graphics/drawable/RippleComponent;->exit()V
+HSPLandroid/graphics/drawable/RippleComponent;->getTargetRadius(Landroid/graphics/Rect;)F
+HSPLandroid/graphics/drawable/RippleComponent;->invalidateSelf()V
+HSPLandroid/graphics/drawable/RippleComponent;->isHardwareAnimating()Z
+HSPLandroid/graphics/drawable/RippleComponent;->jumpValuesToExit()V
+HSPLandroid/graphics/drawable/RippleComponent;->onTargetRadiusChanged(F)V
+HSPLandroid/graphics/drawable/RippleComponent;->setup(FI)V
+HSPLandroid/graphics/drawable/RippleComponent;->startPendingAnimation(Landroid/view/DisplayListCanvas;Landroid/graphics/Paint;)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
+HSPLandroid/graphics/drawable/RippleDrawable$RippleState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/RippleDrawable$RippleState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/RippleDrawable$RippleState;->onDensityChanged(II)V
+HSPLandroid/graphics/drawable/RippleDrawable;-><init>()V
+HSPLandroid/graphics/drawable/RippleDrawable;-><init>(Landroid/content/res/ColorStateList;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/RippleDrawable;-><init>(Landroid/graphics/drawable/RippleDrawable$RippleState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/RippleDrawable;-><init>(Landroid/graphics/drawable/RippleDrawable$RippleState;Landroid/content/res/Resources;Landroid/graphics/drawable/RippleDrawable;)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
+HSPLandroid/graphics/drawable/RippleDrawable;->getOpacity()I
+HSPLandroid/graphics/drawable/RippleDrawable;->getOutline(Landroid/graphics/Outline;)V
+HSPLandroid/graphics/drawable/RippleDrawable;->getRipplePaint()Landroid/graphics/Paint;
+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(ZZ)V
+HSPLandroid/graphics/drawable/RippleDrawable;->setColor(Landroid/content/res/ColorStateList;)V
+HSPLandroid/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
+HSPLandroid/graphics/drawable/RippleDrawable;->setRippleActive(Z)V
+HSPLandroid/graphics/drawable/RippleDrawable;->setVisible(ZZ)Z
+HSPLandroid/graphics/drawable/RippleDrawable;->tryBackgroundEnter(Z)V
+HSPLandroid/graphics/drawable/RippleDrawable;->tryBackgroundExit()V
+HSPLandroid/graphics/drawable/RippleDrawable;->tryRippleEnter()V
+HSPLandroid/graphics/drawable/RippleDrawable;->updateLocalState()V
+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$2;-><init>(Ljava/lang/String;)V
+HSPLandroid/graphics/drawable/RippleForeground$3;-><init>(Ljava/lang/String;)V
+HSPLandroid/graphics/drawable/RippleForeground$4;-><init>(Ljava/lang/String;)V
+HSPLandroid/graphics/drawable/RippleForeground$LogDecelerateInterpolator;-><init>(FFF)V
+HSPLandroid/graphics/drawable/RippleForeground$LogDecelerateInterpolator;->computeLog(F)F
+HSPLandroid/graphics/drawable/RippleForeground;-><init>(Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/Rect;FFZZ)V
+HSPLandroid/graphics/drawable/RippleForeground;->clampStartingPosition()V
+HSPLandroid/graphics/drawable/RippleForeground;->createSoftwareEnter(Z)Landroid/animation/Animator;
+HSPLandroid/graphics/drawable/RippleForeground;->drawSoftware(Landroid/graphics/Canvas;Landroid/graphics/Paint;)Z
+HSPLandroid/graphics/drawable/RippleForeground;->getCurrentRadius()F
+HSPLandroid/graphics/drawable/RippleForeground;->onTargetRadiusChanged(F)V
+HSPLandroid/graphics/drawable/RotateDrawable$RotateState;->-set0(Landroid/graphics/drawable/RotateDrawable$RotateState;[I)[I
+HSPLandroid/graphics/drawable/RotateDrawable$RotateState;-><init>(Landroid/graphics/drawable/RotateDrawable$RotateState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/RotateDrawable$RotateState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/RotateDrawable;-><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;)V
+HSPLandroid/graphics/drawable/RotateDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/RotateDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/RotateDrawable;->mutateConstantState()Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;
+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;->-get0(Landroid/graphics/drawable/ScaleDrawable$ScaleState;)[I
+HSPLandroid/graphics/drawable/ScaleDrawable$ScaleState;-><init>(Landroid/graphics/drawable/ScaleDrawable$ScaleState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/ScaleDrawable$ScaleState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+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;)V
+HSPLandroid/graphics/drawable/ScaleDrawable;->applyTheme(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;->updateLocalState()V
+HSPLandroid/graphics/drawable/ShapeDrawable$ShapeState;-><init>()V
+HSPLandroid/graphics/drawable/ShapeDrawable$ShapeState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/ShapeDrawable;-><init>()V
+HSPLandroid/graphics/drawable/ShapeDrawable;-><init>(Landroid/graphics/drawable/ShapeDrawable$ShapeState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/ShapeDrawable;-><init>(Landroid/graphics/drawable/shapes/Shape;)V
+HSPLandroid/graphics/drawable/ShapeDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/ShapeDrawable;->getAlpha()I
+HSPLandroid/graphics/drawable/ShapeDrawable;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/ShapeDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
+HSPLandroid/graphics/drawable/ShapeDrawable;->getIntrinsicHeight()I
+HSPLandroid/graphics/drawable/ShapeDrawable;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/ShapeDrawable;->getOpacity()I
+HSPLandroid/graphics/drawable/ShapeDrawable;->getOutline(Landroid/graphics/Outline;)V
+HSPLandroid/graphics/drawable/ShapeDrawable;->getPadding(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/drawable/ShapeDrawable;->getPaint()Landroid/graphics/Paint;
+HSPLandroid/graphics/drawable/ShapeDrawable;->isStateful()Z
+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;->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
+HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->indexOfStateSet([I)I
+HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->mutate()V
+HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/StateListDrawable;-><init>()V
+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;)V
+HSPLandroid/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;
+HSPLandroid/graphics/drawable/StateListDrawable;->cloneConstantState()Landroid/graphics/drawable/StateListDrawable$StateListState;
+HSPLandroid/graphics/drawable/StateListDrawable;->extractStateSet(Landroid/util/AttributeSet;)[I
+HSPLandroid/graphics/drawable/StateListDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/StateListDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/StateListDrawable;->isStateful()Z
+HSPLandroid/graphics/drawable/StateListDrawable;->mutate()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/StateListDrawable;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/StateListDrawable;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
+HSPLandroid/graphics/drawable/StateListDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/TransitionDrawable$TransitionState;-><init>(Landroid/graphics/drawable/TransitionDrawable$TransitionState;Landroid/graphics/drawable/TransitionDrawable;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/TransitionDrawable$TransitionState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/TransitionDrawable$TransitionState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/TransitionDrawable;-><init>()V
+HSPLandroid/graphics/drawable/TransitionDrawable;-><init>(Landroid/graphics/drawable/TransitionDrawable$TransitionState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/TransitionDrawable;-><init>(Landroid/graphics/drawable/TransitionDrawable$TransitionState;Landroid/content/res/Resources;Landroid/graphics/drawable/TransitionDrawable;)V
+HSPLandroid/graphics/drawable/TransitionDrawable;->createConstantState(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/LayerDrawable$LayerState;
+HSPLandroid/graphics/drawable/TransitionDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VClipPath;-><init>()V
+HSPLandroid/graphics/drawable/VectorDrawable$VClipPath;-><init>(Landroid/graphics/drawable/VectorDrawable$VClipPath;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VClipPath;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/VectorDrawable$VClipPath;->getNativePtr()J
+HSPLandroid/graphics/drawable/VectorDrawable$VClipPath;->getNativeSize()I
+HSPLandroid/graphics/drawable/VectorDrawable$VClipPath;->inflate(Landroid/content/res/Resources;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VClipPath;->isStateful()Z
+HSPLandroid/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
+HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->canComplexColorApplyTheme(Landroid/content/res/ComplexColor;)Z
+HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->getFillColor()I
+HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->getNativePtr()J
+HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->getNativeSize()I
+HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->getProperty(Ljava/lang/String;)Landroid/util/Property;
+HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->getPropertyIndex(Ljava/lang/String;)I
+HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->inflate(Landroid/content/res/Resources;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->isStateful()Z
+HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->-get7(Landroid/graphics/drawable/VectorDrawable$VGroup;)I
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->-get8(Landroid/graphics/drawable/VectorDrawable$VGroup;)J
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;-><init>()V
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;-><init>(Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/util/ArrayMap;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->addChild(Landroid/graphics/drawable/VectorDrawable$VObject;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getGroupName()Ljava/lang/String;
+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
+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
+HSPLandroid/graphics/drawable/VectorDrawable$VObject;->isTreeValid()Z
+HSPLandroid/graphics/drawable/VectorDrawable$VObject;->setTree(Lcom/android/internal/util/VirtualRefBasePtr;)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;
+HSPLandroid/graphics/drawable/VectorDrawable$VPath;->getProperty(Ljava/lang/String;)Landroid/util/Property;
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->-wrap0(Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VGroup;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;-><init>(Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->applyDensityScaling(II)V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->canReuseCache()Z
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->createNativeTree(Landroid/graphics/drawable/VectorDrawable$VGroup;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->createNativeTreeFromCopy(Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VGroup;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->finalize()V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getAlpha()F
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getNativeRenderer()J
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->isStateful()Z
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->newDrawable()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->onTreeConstructionFinished()V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setAlpha(F)Z
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setDensity(I)Z
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setViewportSize(FF)V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->updateCacheStates()V
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap0(J[BI)Z
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap1(J[FI)Z
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap17(J)I
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap19()J
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap2(JF)Z
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap20(J)J
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap21()J
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap22(J)J
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap23()J
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap24(J)J
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap25(JJ)J
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap26(J)J
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap27(JJ)V
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap30(JLjava/lang/String;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap32(JLjava/lang/String;I)V
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap35(JFF)V
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap47(JJ)V
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap48(JFIFIFFFFFIII)V
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap49(JJ)V
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap50(JFFFFFFF)V
+HSPLandroid/graphics/drawable/VectorDrawable;->-wrap6(J)F
+HSPLandroid/graphics/drawable/VectorDrawable;-><init>()V
+HSPLandroid/graphics/drawable/VectorDrawable;-><init>(Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/VectorDrawable;-><init>(Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/content/res/Resources;Landroid/graphics/drawable/VectorDrawable;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->canApplyTheme()Z
+HSPLandroid/graphics/drawable/VectorDrawable;->clearMutated()V
+HSPLandroid/graphics/drawable/VectorDrawable;->computeVectorSize()V
+HSPLandroid/graphics/drawable/VectorDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->getAlpha()I
+HSPLandroid/graphics/drawable/VectorDrawable;->getChangingConfigurations()I
+HSPLandroid/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;->getPixelSize()F
+HSPLandroid/graphics/drawable/VectorDrawable;->getTargetByName(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/graphics/drawable/VectorDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->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;->setTintList(Landroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->setTintMode(Landroid/graphics/PorterDuff$Mode;)V
+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
+HSPLandroid/graphics/drawable/shapes/RectShape;-><init>()V
+HSPLandroid/graphics/drawable/shapes/RectShape;->onResize(FF)V
+HSPLandroid/graphics/drawable/shapes/RectShape;->rect()Landroid/graphics/RectF;
+HSPLandroid/graphics/drawable/shapes/RoundRectShape;-><init>([FLandroid/graphics/RectF;[F)V
+HSPLandroid/graphics/drawable/shapes/RoundRectShape;->draw(Landroid/graphics/Canvas;Landroid/graphics/Paint;)V
+HSPLandroid/graphics/drawable/shapes/RoundRectShape;->getOutline(Landroid/graphics/Outline;)V
+HSPLandroid/graphics/drawable/shapes/RoundRectShape;->onResize(FF)V
+HSPLandroid/graphics/drawable/shapes/Shape;-><init>()V
+HSPLandroid/graphics/drawable/shapes/Shape;->resize(FF)V
+HSPLandroid/hardware/Camera$CameraInfo;-><init>()V
+HSPLandroid/hardware/Camera$ErrorCallback;->onError(ILandroid/hardware/Camera;)V
+HSPLandroid/hardware/Camera;->getCameraInfo(ILandroid/hardware/Camera$CameraInfo;)V
+HSPLandroid/hardware/CameraStatus$1;-><init>()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;
+HSPLandroid/hardware/CameraStatus;-><init>()V
+HSPLandroid/hardware/CameraStatus;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/hardware/GeomagneticField$LegendreTable;-><init>(IF)V
+HSPLandroid/hardware/GeomagneticField;-><init>(FFFJ)V
+HSPLandroid/hardware/GeomagneticField;->computeGeocentricCoordinates(FFF)V
+HSPLandroid/hardware/GeomagneticField;->computeSchmidtQuasiNormFactors(I)[[F
+HSPLandroid/hardware/GeomagneticField;->getDeclination()F
+HSPLandroid/hardware/GeomagneticField;->getFieldStrength()F
+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;->connectDevice(Landroid/hardware/camera2/ICameraDeviceCallbacks;Ljava/lang/String;Ljava/lang/String;I)Landroid/hardware/camera2/ICameraDeviceUser;
+HSPLandroid/hardware/ICameraService$Stub$Proxy;->getCameraCharacteristics(Ljava/lang/String;)Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/ICameraService$Stub$Proxy;->supportsCameraApi(Ljava/lang/String;I)Z
+HSPLandroid/hardware/ICameraService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/ICameraService;
+HSPLandroid/hardware/ICameraService;->addListener(Landroid/hardware/ICameraServiceListener;)[Landroid/hardware/CameraStatus;
+HSPLandroid/hardware/ICameraService;->connect(Landroid/hardware/ICameraClient;ILjava/lang/String;II)Landroid/hardware/ICamera;
+HSPLandroid/hardware/ICameraService;->connectDevice(Landroid/hardware/camera2/ICameraDeviceCallbacks;Ljava/lang/String;Ljava/lang/String;I)Landroid/hardware/camera2/ICameraDeviceUser;
+HSPLandroid/hardware/ICameraService;->connectLegacy(Landroid/hardware/ICameraClient;IILjava/lang/String;I)Landroid/hardware/ICamera;
+HSPLandroid/hardware/ICameraService;->getCameraCharacteristics(Ljava/lang/String;)Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/ICameraService;->getCameraInfo(I)Landroid/hardware/CameraInfo;
+HSPLandroid/hardware/ICameraService;->getCameraVendorTagCache()Landroid/hardware/camera2/params/VendorTagDescriptorCache;
+HSPLandroid/hardware/ICameraService;->getCameraVendorTagDescriptor()Landroid/hardware/camera2/params/VendorTagDescriptor;
+HSPLandroid/hardware/ICameraService;->getLegacyParameters(I)Ljava/lang/String;
+HSPLandroid/hardware/ICameraService;->getNumberOfCameras(I)I
+HSPLandroid/hardware/ICameraService;->notifySystemEvent(I[I)V
+HSPLandroid/hardware/ICameraService;->removeListener(Landroid/hardware/ICameraServiceListener;)V
+HSPLandroid/hardware/ICameraService;->setTorchMode(Ljava/lang/String;ZLandroid/os/IBinder;)V
+HSPLandroid/hardware/ICameraService;->supportsCameraApi(Ljava/lang/String;I)Z
+HSPLandroid/hardware/ICameraServiceListener$Stub;-><init>()V
+HSPLandroid/hardware/ICameraServiceListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/hardware/ICameraServiceListener;->onStatusChanged(ILjava/lang/String;)V
+HSPLandroid/hardware/ICameraServiceListener;->onTorchStatusChanged(ILjava/lang/String;)V
+HSPLandroid/hardware/IConsumerIrService;->getCarrierFrequencies()[I
+HSPLandroid/hardware/IConsumerIrService;->hasIrEmitter()Z
+HSPLandroid/hardware/IConsumerIrService;->transmit(Ljava/lang/String;I[I)V
+HSPLandroid/hardware/ISerialManager;->getSerialPorts()[Ljava/lang/String;
+HSPLandroid/hardware/ISerialManager;->openSerialPort(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/hardware/Sensor;-><init>()V
+HSPLandroid/hardware/Sensor;->getHandle()I
+HSPLandroid/hardware/Sensor;->getMaxLengthValuesArray(Landroid/hardware/Sensor;I)I
+HSPLandroid/hardware/Sensor;->getName()Ljava/lang/String;
+HSPLandroid/hardware/Sensor;->getPower()F
+HSPLandroid/hardware/Sensor;->getReportingMode()I
+HSPLandroid/hardware/Sensor;->getStringType()Ljava/lang/String;
+HSPLandroid/hardware/Sensor;->getType()I
+HSPLandroid/hardware/Sensor;->getVendor()Ljava/lang/String;
+HSPLandroid/hardware/Sensor;->getVersion()I
+HSPLandroid/hardware/Sensor;->isWakeUpSensor()Z
+HSPLandroid/hardware/Sensor;->setType(I)Z
+HSPLandroid/hardware/Sensor;->setUuid(JJ)V
+HSPLandroid/hardware/SensorEvent;-><init>(I)V
+HSPLandroid/hardware/SensorEventListener;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
+HSPLandroid/hardware/SensorEventListener;->onSensorChanged(Landroid/hardware/SensorEvent;)V
+HSPLandroid/hardware/SensorManager;-><init>()V
+HSPLandroid/hardware/SensorManager;->cancelTriggerSensorImpl(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;Z)Z
+HSPLandroid/hardware/SensorManager;->configureDirectChannelImpl(Landroid/hardware/SensorDirectChannel;Landroid/hardware/Sensor;I)I
+HSPLandroid/hardware/SensorManager;->createDirectChannelImpl(Landroid/os/MemoryFile;Landroid/hardware/HardwareBuffer;)Landroid/hardware/SensorDirectChannel;
+HSPLandroid/hardware/SensorManager;->destroyDirectChannelImpl(Landroid/hardware/SensorDirectChannel;)V
+HSPLandroid/hardware/SensorManager;->flushImpl(Landroid/hardware/SensorEventListener;)Z
+HSPLandroid/hardware/SensorManager;->getAltitude(FF)F
+HSPLandroid/hardware/SensorManager;->getDefaultSensor(I)Landroid/hardware/Sensor;
+HSPLandroid/hardware/SensorManager;->getDelay(I)I
+HSPLandroid/hardware/SensorManager;->getFullDynamicSensorList()Ljava/util/List;
+HSPLandroid/hardware/SensorManager;->getFullSensorList()Ljava/util/List;
+HSPLandroid/hardware/SensorManager;->getOrientation([F[F)[F
+HSPLandroid/hardware/SensorManager;->getQuaternionFromVector([F[F)V
+HSPLandroid/hardware/SensorManager;->getRotationMatrix([F[F[F[F)Z
+HSPLandroid/hardware/SensorManager;->getRotationMatrixFromVector([F[F)V
+HSPLandroid/hardware/SensorManager;->getSensorList(I)Ljava/util/List;
+HSPLandroid/hardware/SensorManager;->initDataInjectionImpl(Z)Z
+HSPLandroid/hardware/SensorManager;->injectSensorDataImpl(Landroid/hardware/Sensor;[FIJ)Z
+HSPLandroid/hardware/SensorManager;->registerDynamicSensorCallbackImpl(Landroid/hardware/SensorManager$DynamicSensorCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/SensorManager;->registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;I)Z
+HSPLandroid/hardware/SensorManager;->registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;II)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
+HSPLandroid/hardware/SensorManager;->registerListenerImpl(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;ILandroid/os/Handler;II)Z
+HSPLandroid/hardware/SensorManager;->remapCoordinateSystem([FII[F)Z
+HSPLandroid/hardware/SensorManager;->remapCoordinateSystemImpl([FII[F)Z
+HSPLandroid/hardware/SensorManager;->requestTriggerSensorImpl(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z
+HSPLandroid/hardware/SensorManager;->setOperationParameterImpl(Landroid/hardware/SensorAdditionalInfo;)Z
+HSPLandroid/hardware/SensorManager;->unregisterDynamicSensorCallbackImpl(Landroid/hardware/SensorManager$DynamicSensorCallback;)V
+HSPLandroid/hardware/SensorManager;->unregisterListener(Landroid/hardware/SensorEventListener;)V
+HSPLandroid/hardware/SensorManager;->unregisterListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;)V
+HSPLandroid/hardware/SensorManager;->unregisterListenerImpl(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
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->addSensorEvent(Landroid/hardware/Sensor;)V
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->disableSensor(Landroid/hardware/Sensor;)I
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->dispatchFlushCompleteEvent(I)V
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->dispatchSensorEvent(I[FIJ)V
+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
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->hasSensors()Z
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->removeAllSensors()Z
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->removeSensor(Landroid/hardware/Sensor;Z)Z
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->removeSensorEvent(Landroid/hardware/Sensor;)V
+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
+HSPLandroid/hardware/SystemSensorManager$SensorEventQueue;->dispatchSensorEvent(I[FIJ)V
+HSPLandroid/hardware/SystemSensorManager$SensorEventQueue;->removeSensorEvent(Landroid/hardware/Sensor;)V
+HSPLandroid/hardware/SystemSensorManager;->-get0(Landroid/hardware/SystemSensorManager;)Landroid/content/Context;
+HSPLandroid/hardware/SystemSensorManager;->-get1(Landroid/hardware/SystemSensorManager;)Ljava/util/HashMap;
+HSPLandroid/hardware/SystemSensorManager;->-get2(Landroid/hardware/SystemSensorManager;)J
+HSPLandroid/hardware/SystemSensorManager;->-get3(Landroid/hardware/SystemSensorManager;)I
+HSPLandroid/hardware/SystemSensorManager;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
+HSPLandroid/hardware/SystemSensorManager;->getFullSensorList()Ljava/util/List;
+HSPLandroid/hardware/SystemSensorManager;->registerListenerImpl(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;ILandroid/os/Handler;II)Z
+HSPLandroid/hardware/SystemSensorManager;->unregisterListenerImpl(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;)V
+HSPLandroid/hardware/camera2/CameraCaptureSession$CaptureCallback;-><init>()V
+HSPLandroid/hardware/camera2/CameraCaptureSession$StateCallback;-><init>()V
+HSPLandroid/hardware/camera2/CameraCaptureSession$StateCallback;->onCaptureQueueEmpty(Landroid/hardware/camera2/CameraCaptureSession;)V
+HSPLandroid/hardware/camera2/CameraCaptureSession;-><init>()V
+HSPLandroid/hardware/camera2/CameraCaptureSession;->abortCaptures()V
+HSPLandroid/hardware/camera2/CameraCaptureSession;->capture(Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I
+HSPLandroid/hardware/camera2/CameraCaptureSession;->captureBurst(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I
+HSPLandroid/hardware/camera2/CameraCaptureSession;->close()V
+HSPLandroid/hardware/camera2/CameraCaptureSession;->finalizeOutputConfigurations(Ljava/util/List;)V
+HSPLandroid/hardware/camera2/CameraCaptureSession;->getDevice()Landroid/hardware/camera2/CameraDevice;
+HSPLandroid/hardware/camera2/CameraCaptureSession;->getInputSurface()Landroid/view/Surface;
+HSPLandroid/hardware/camera2/CameraCaptureSession;->isReprocessable()Z
+HSPLandroid/hardware/camera2/CameraCaptureSession;->prepare(ILandroid/view/Surface;)V
+HSPLandroid/hardware/camera2/CameraCaptureSession;->prepare(Landroid/view/Surface;)V
+HSPLandroid/hardware/camera2/CameraCaptureSession;->setRepeatingBurst(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I
+HSPLandroid/hardware/camera2/CameraCaptureSession;->setRepeatingRequest(Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I
+HSPLandroid/hardware/camera2/CameraCaptureSession;->stopRepeating()V
+HSPLandroid/hardware/camera2/CameraCaptureSession;->tearDown(Landroid/view/Surface;)V
+HSPLandroid/hardware/camera2/CameraCharacteristics$Key;->getNativeKey()Landroid/hardware/camera2/impl/CameraMetadataNative$Key;
+HSPLandroid/hardware/camera2/CameraCharacteristics$Key;->hashCode()I
+HSPLandroid/hardware/camera2/CameraCharacteristics;-><init>(Landroid/hardware/camera2/impl/CameraMetadataNative;)V
+HSPLandroid/hardware/camera2/CameraCharacteristics;->get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/CameraDevice$StateCallback;-><init>()V
+HSPLandroid/hardware/camera2/CameraDevice;-><init>()V
+HSPLandroid/hardware/camera2/CameraDevice;->close()V
+HSPLandroid/hardware/camera2/CameraDevice;->createCaptureRequest(I)Landroid/hardware/camera2/CaptureRequest$Builder;
+HSPLandroid/hardware/camera2/CameraDevice;->createCaptureSession(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/CameraDevice;->createCaptureSessionByOutputConfigurations(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/CameraDevice;->createConstrainedHighSpeedCaptureSession(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/CameraDevice;->createCustomCaptureSession(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;ILandroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/CameraDevice;->createReprocessCaptureRequest(Landroid/hardware/camera2/TotalCaptureResult;)Landroid/hardware/camera2/CaptureRequest$Builder;
+HSPLandroid/hardware/camera2/CameraDevice;->createReprocessableCaptureSession(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/CameraDevice;->createReprocessableCaptureSessionByConfigurations(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/CameraDevice;->getId()Ljava/lang/String;
+HSPLandroid/hardware/camera2/CameraManager$AvailabilityCallback;-><init>()V
+HSPLandroid/hardware/camera2/CameraManager$AvailabilityCallback;->onCameraUnavailable(Ljava/lang/String;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$1;-><init>(Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Ljava/lang/String;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$1;->run()V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$2;-><init>(Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Ljava/lang/String;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$2;->run()V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$3;-><init>(Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;Landroid/hardware/camera2/CameraManager$TorchCallback;Ljava/lang/String;I)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$3;->run()V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;-><init>()V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->asBinder()Landroid/os/IBinder;
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->connectCameraServiceLocked()V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->get()Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->getCameraIdList()[Ljava/lang/String;
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->getCameraService()Landroid/hardware/ICameraService;
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->isAvailable(I)Z
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onStatusChanged(ILjava/lang/String;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onStatusChangedLocked(ILjava/lang/String;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onTorchStatusChanged(ILjava/lang/String;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onTorchStatusChangedLocked(ILjava/lang/String;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->postSingleTorchUpdate(Landroid/hardware/camera2/CameraManager$TorchCallback;Landroid/os/Handler;Ljava/lang/String;I)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->postSingleUpdate(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Landroid/os/Handler;Ljava/lang/String;I)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->registerAvailabilityCallback(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->registerTorchCallback(Landroid/hardware/camera2/CameraManager$TorchCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->unregisterAvailabilityCallback(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->updateCallbackLocked(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->updateTorchCallbackLocked(Landroid/hardware/camera2/CameraManager$TorchCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->validStatus(I)Z
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->validTorchStatus(I)Z
+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;->openCamera(Ljava/lang/String;Landroid/hardware/camera2/CameraDevice$StateCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/CameraManager;->openCameraDeviceUserAsync(Ljava/lang/String;Landroid/hardware/camera2/CameraDevice$StateCallback;Landroid/os/Handler;I)Landroid/hardware/camera2/CameraDevice;
+HSPLandroid/hardware/camera2/CameraManager;->openCameraForUid(Ljava/lang/String;Landroid/hardware/camera2/CameraDevice$StateCallback;Landroid/os/Handler;I)V
+HSPLandroid/hardware/camera2/CameraManager;->registerAvailabilityCallback(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/CameraManager;->registerTorchCallback(Landroid/hardware/camera2/CameraManager$TorchCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/CameraManager;->supportsCamera2ApiLocked(Ljava/lang/String;)Z
+HSPLandroid/hardware/camera2/CameraManager;->supportsCameraApiLocked(Ljava/lang/String;I)Z
+HSPLandroid/hardware/camera2/CameraManager;->unregisterAvailabilityCallback(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;)V
+HSPLandroid/hardware/camera2/CameraMetadata;-><init>()V
+HSPLandroid/hardware/camera2/CameraMetadata;->setNativeInstance(Landroid/hardware/camera2/impl/CameraMetadataNative;)V
+HSPLandroid/hardware/camera2/CaptureRequest$Builder;-><init>(Landroid/hardware/camera2/impl/CameraMetadataNative;ZI)V
+HSPLandroid/hardware/camera2/CaptureRequest$Builder;->addTarget(Landroid/view/Surface;)V
+HSPLandroid/hardware/camera2/CaptureRequest$Builder;->build()Landroid/hardware/camera2/CaptureRequest;
+HSPLandroid/hardware/camera2/CaptureRequest$Builder;->set(Landroid/hardware/camera2/CaptureRequest$Key;Ljava/lang/Object;)V
+HSPLandroid/hardware/camera2/CaptureRequest$Builder;->setTag(Ljava/lang/Object;)V
+HSPLandroid/hardware/camera2/CaptureRequest$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;)V
+HSPLandroid/hardware/camera2/CaptureRequest$Key;->equals(Ljava/lang/Object;)Z
+HSPLandroid/hardware/camera2/CaptureRequest$Key;->getName()Ljava/lang/String;
+HSPLandroid/hardware/camera2/CaptureRequest$Key;->getNativeKey()Landroid/hardware/camera2/impl/CameraMetadataNative$Key;
+HSPLandroid/hardware/camera2/CaptureRequest$Key;->hashCode()I
+HSPLandroid/hardware/camera2/CaptureRequest;->-get0(Landroid/hardware/camera2/CaptureRequest;)Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/camera2/CaptureRequest;->-get1(Landroid/hardware/camera2/CaptureRequest;)Ljava/util/HashSet;
+HSPLandroid/hardware/camera2/CaptureRequest;->-set1(Landroid/hardware/camera2/CaptureRequest;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/CaptureRequest;-><init>(Landroid/hardware/camera2/CaptureRequest;)V
+HSPLandroid/hardware/camera2/CaptureRequest;-><init>(Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureRequest;)V
+HSPLandroid/hardware/camera2/CaptureRequest;-><init>(Landroid/hardware/camera2/impl/CameraMetadataNative;ZI)V
+HSPLandroid/hardware/camera2/CaptureRequest;-><init>(Landroid/hardware/camera2/impl/CameraMetadataNative;ZILandroid/hardware/camera2/CaptureRequest;)V
+HSPLandroid/hardware/camera2/CaptureRequest;->get(Landroid/hardware/camera2/CaptureRequest$Key;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/CaptureRequest;->getTag()Ljava/lang/Object;
+HSPLandroid/hardware/camera2/CaptureRequest;->getTargets()Ljava/util/Collection;
+HSPLandroid/hardware/camera2/CaptureRequest;->isPartOfCRequestList()Z
+HSPLandroid/hardware/camera2/CaptureRequest;->isReprocess()Z
+HSPLandroid/hardware/camera2/CaptureRequest;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/hardware/camera2/CaptureResult$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;)V
+HSPLandroid/hardware/camera2/CaptureResult$Key;->getNativeKey()Landroid/hardware/camera2/impl/CameraMetadataNative$Key;
+HSPLandroid/hardware/camera2/CaptureResult$Key;->hashCode()I
+HSPLandroid/hardware/camera2/CaptureResult;-><init>(Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/impl/CaptureResultExtras;)V
+HSPLandroid/hardware/camera2/CaptureResult;->get(Landroid/hardware/camera2/CaptureResult$Key;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/CaptureResult;->getFrameNumber()J
+HSPLandroid/hardware/camera2/CaptureResult;->getRequest()Landroid/hardware/camera2/CaptureRequest;
+HSPLandroid/hardware/camera2/ICameraDeviceCallbacks$Stub;-><init>()V
+HSPLandroid/hardware/camera2/ICameraDeviceCallbacks$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/hardware/camera2/ICameraDeviceCallbacks;->onCaptureStarted(Landroid/hardware/camera2/impl/CaptureResultExtras;J)V
+HSPLandroid/hardware/camera2/ICameraDeviceCallbacks;->onDeviceError(ILandroid/hardware/camera2/impl/CaptureResultExtras;)V
+HSPLandroid/hardware/camera2/ICameraDeviceCallbacks;->onDeviceIdle()V
+HSPLandroid/hardware/camera2/ICameraDeviceCallbacks;->onPrepared(I)V
+HSPLandroid/hardware/camera2/ICameraDeviceCallbacks;->onRepeatingRequestError(J)V
+HSPLandroid/hardware/camera2/ICameraDeviceCallbacks;->onRequestQueueEmpty()V
+HSPLandroid/hardware/camera2/ICameraDeviceCallbacks;->onResultReceived(Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CaptureResultExtras;)V
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;->beginConfigure()V
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;->cancelRequest(I)J
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;->createDefaultRequest(I)Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;->createInputStream(III)I
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;->createStream(Landroid/hardware/camera2/params/OutputConfiguration;)I
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;->deleteStream(I)V
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;->endConfigure(I)V
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;->finalizeOutputConfigurations(ILandroid/hardware/camera2/params/OutputConfiguration;)V
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;->getInputSurface()Landroid/view/Surface;
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;->submitRequestList([Landroid/hardware/camera2/CaptureRequest;Z)Landroid/hardware/camera2/utils/SubmitInfo;
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub$Proxy;->waitUntilIdle()V
+HSPLandroid/hardware/camera2/ICameraDeviceUser$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/camera2/ICameraDeviceUser;
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->beginConfigure()V
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->cancelRequest(I)J
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->createDefaultRequest(I)Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->createInputStream(III)I
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->createStream(Landroid/hardware/camera2/params/OutputConfiguration;)I
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->deleteStream(I)V
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->disconnect()V
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->endConfigure(I)V
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->finalizeOutputConfigurations(ILandroid/hardware/camera2/params/OutputConfiguration;)V
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->flush()J
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->getCameraInfo()Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->getInputSurface()Landroid/view/Surface;
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->prepare(I)V
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->prepare2(II)V
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->submitRequest(Landroid/hardware/camera2/CaptureRequest;Z)Landroid/hardware/camera2/utils/SubmitInfo;
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->submitRequestList([Landroid/hardware/camera2/CaptureRequest;Z)Landroid/hardware/camera2/utils/SubmitInfo;
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->tearDown(I)V
+HSPLandroid/hardware/camera2/ICameraDeviceUser;->waitUntilIdle()V
+HSPLandroid/hardware/camera2/TotalCaptureResult;-><init>(Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/impl/CaptureResultExtras;Ljava/util/List;I)V
+HSPLandroid/hardware/camera2/dispatch/ArgumentReplacingDispatcher;-><init>(Landroid/hardware/camera2/dispatch/Dispatchable;ILjava/lang/Object;)V
+HSPLandroid/hardware/camera2/dispatch/ArgumentReplacingDispatcher;->arrayCopy([Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLandroid/hardware/camera2/dispatch/ArgumentReplacingDispatcher;->dispatch(Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/dispatch/BroadcastDispatcher;-><init>([Landroid/hardware/camera2/dispatch/Dispatchable;)V
+HSPLandroid/hardware/camera2/dispatch/BroadcastDispatcher;->dispatch(Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/dispatch/DuckTypingDispatcher;-><init>(Landroid/hardware/camera2/dispatch/Dispatchable;Ljava/lang/Class;)V
+HSPLandroid/hardware/camera2/dispatch/DuckTypingDispatcher;->dispatch(Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/dispatch/HandlerDispatcher$1;-><init>(Landroid/hardware/camera2/dispatch/HandlerDispatcher;Ljava/lang/reflect/Method;[Ljava/lang/Object;)V
+HSPLandroid/hardware/camera2/dispatch/HandlerDispatcher$1;->run()V
+HSPLandroid/hardware/camera2/dispatch/HandlerDispatcher;->-get0(Landroid/hardware/camera2/dispatch/HandlerDispatcher;)Landroid/hardware/camera2/dispatch/Dispatchable;
+HSPLandroid/hardware/camera2/dispatch/HandlerDispatcher;-><init>(Landroid/hardware/camera2/dispatch/Dispatchable;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/dispatch/HandlerDispatcher;->dispatch(Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/dispatch/InvokeDispatcher;-><init>(Ljava/lang/Object;)V
+HSPLandroid/hardware/camera2/dispatch/InvokeDispatcher;->dispatch(Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/dispatch/MethodNameInvoker;-><init>(Landroid/hardware/camera2/dispatch/Dispatchable;Ljava/lang/Class;)V
+HSPLandroid/hardware/camera2/dispatch/MethodNameInvoker;->invoke(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/impl/CallbackProxies$DeviceCaptureCallbackProxy;-><init>(Landroid/hardware/camera2/dispatch/Dispatchable;)V
+HSPLandroid/hardware/camera2/impl/CallbackProxies$DeviceCaptureCallbackProxy;->onCaptureCompleted(Landroid/hardware/camera2/CameraDevice;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/TotalCaptureResult;)V
+HSPLandroid/hardware/camera2/impl/CallbackProxies$DeviceCaptureCallbackProxy;->onCaptureProgressed(Landroid/hardware/camera2/CameraDevice;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureResult;)V
+HSPLandroid/hardware/camera2/impl/CallbackProxies$DeviceCaptureCallbackProxy;->onCaptureSequenceCompleted(Landroid/hardware/camera2/CameraDevice;IJ)V
+HSPLandroid/hardware/camera2/impl/CallbackProxies$DeviceCaptureCallbackProxy;->onCaptureStarted(Landroid/hardware/camera2/CameraDevice;Landroid/hardware/camera2/CaptureRequest;JJ)V
+HSPLandroid/hardware/camera2/impl/CallbackProxies$SessionStateCallbackProxy;-><init>(Landroid/hardware/camera2/dispatch/Dispatchable;)V
+HSPLandroid/hardware/camera2/impl/CallbackProxies$SessionStateCallbackProxy;->onActive(Landroid/hardware/camera2/CameraCaptureSession;)V
+HSPLandroid/hardware/camera2/impl/CallbackProxies$SessionStateCallbackProxy;->onCaptureQueueEmpty(Landroid/hardware/camera2/CameraCaptureSession;)V
+HSPLandroid/hardware/camera2/impl/CallbackProxies$SessionStateCallbackProxy;->onClosed(Landroid/hardware/camera2/CameraCaptureSession;)V
+HSPLandroid/hardware/camera2/impl/CallbackProxies$SessionStateCallbackProxy;->onConfigured(Landroid/hardware/camera2/CameraCaptureSession;)V
+HSPLandroid/hardware/camera2/impl/CallbackProxies$SessionStateCallbackProxy;->onReady(Landroid/hardware/camera2/CameraCaptureSession;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionCore;->getDeviceStateCallback()Landroid/hardware/camera2/impl/CameraDeviceImpl$StateCallbackKK;
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionCore;->isAborting()Z
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionCore;->replaceSessionClose()V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$1;-><init>(Landroid/hardware/camera2/impl/CameraCaptureSessionImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$1;->onCaptureCompleted(Landroid/hardware/camera2/CameraDevice;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/TotalCaptureResult;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$1;->onCaptureProgressed(Landroid/hardware/camera2/CameraDevice;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureResult;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$1;->onCaptureSequenceCompleted(Landroid/hardware/camera2/CameraDevice;IJ)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$1;->onCaptureStarted(Landroid/hardware/camera2/CameraDevice;Landroid/hardware/camera2/CaptureRequest;JJ)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$2;-><init>(Landroid/hardware/camera2/impl/CameraCaptureSessionImpl;Landroid/hardware/camera2/CameraCaptureSession;Ljava/lang/Object;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$2;->onActive(Landroid/hardware/camera2/CameraDevice;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$2;->onBusy(Landroid/hardware/camera2/CameraDevice;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$2;->onIdle(Landroid/hardware/camera2/CameraDevice;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$2;->onRequestQueueEmpty()V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$AbortDrainListener;-><init>(Landroid/hardware/camera2/impl/CameraCaptureSessionImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$AbortDrainListener;-><init>(Landroid/hardware/camera2/impl/CameraCaptureSessionImpl;Landroid/hardware/camera2/impl/CameraCaptureSessionImpl$AbortDrainListener;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$IdleDrainListener;-><init>(Landroid/hardware/camera2/impl/CameraCaptureSessionImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$IdleDrainListener;-><init>(Landroid/hardware/camera2/impl/CameraCaptureSessionImpl;Landroid/hardware/camera2/impl/CameraCaptureSessionImpl$IdleDrainListener;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$SequenceDrainListener;-><init>(Landroid/hardware/camera2/impl/CameraCaptureSessionImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$SequenceDrainListener;-><init>(Landroid/hardware/camera2/impl/CameraCaptureSessionImpl;Landroid/hardware/camera2/impl/CameraCaptureSessionImpl$SequenceDrainListener;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl$SequenceDrainListener;->onDrained()V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->-get1(Landroid/hardware/camera2/impl/CameraCaptureSessionImpl;)Z
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->-get4(Landroid/hardware/camera2/impl/CameraCaptureSessionImpl;)Landroid/hardware/camera2/utils/TaskSingleDrainer;
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->-get5(Landroid/hardware/camera2/impl/CameraCaptureSessionImpl;)Z
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->-get6(Landroid/hardware/camera2/impl/CameraCaptureSessionImpl;)Landroid/hardware/camera2/CameraCaptureSession$StateCallback;
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->-wrap0(Landroid/hardware/camera2/impl/CameraCaptureSessionImpl;I)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;-><init>(ILandroid/view/Surface;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;Landroid/hardware/camera2/impl/CameraDeviceImpl;Landroid/os/Handler;Z)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->addPendingSequence(I)I
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->captureBurst(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->checkNotClosed()V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->close()V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->createCaptureCallbackProxy(Landroid/os/Handler;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;)Landroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallback;
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->createUserStateCallbackProxy(Landroid/os/Handler;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;)Landroid/hardware/camera2/CameraCaptureSession$StateCallback;
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->finalizeOutputConfigurations(Ljava/util/List;)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->finishPendingSequence(I)V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->getDevice()Landroid/hardware/camera2/CameraDevice;
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->getDeviceStateCallback()Landroid/hardware/camera2/impl/CameraDeviceImpl$StateCallbackKK;
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->getInputSurface()Landroid/view/Surface;
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->replaceSessionClose()V
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->setRepeatingBurst(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I
+HSPLandroid/hardware/camera2/impl/CameraCaptureSessionImpl;->stopRepeating()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$10;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl;ILandroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallbackHolder;Landroid/hardware/camera2/impl/CameraDeviceImpl$RequestLastFrameNumbersHolder;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$10;->run()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$1;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$1;->run()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$2;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$2;->run()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$3;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$3;->run()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$4;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$4;->run()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$5;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$6;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$6;->run()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$7;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks$2;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks;Landroid/hardware/camera2/impl/CaptureResultExtras;Landroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallbackHolder;JJ)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks$2;->run()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks$3;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks;Landroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallbackHolder;Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CaptureResultExtras;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureResult;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks$3;->run()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks$4;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks;Landroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallbackHolder;Landroid/hardware/camera2/impl/CameraMetadataNative;JILandroid/util/Range;Landroid/hardware/camera2/impl/CaptureResultExtras;Ljava/util/List;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/TotalCaptureResult;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks$4;->run()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks;->asBinder()Landroid/os/IBinder;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks;->onCaptureStarted(Landroid/hardware/camera2/impl/CaptureResultExtras;J)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks;->onDeviceIdle()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks;->onRequestQueueEmpty()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks;->onResultReceived(Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CaptureResultExtras;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallbackHolder;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallback;Ljava/util/List;Landroid/os/Handler;ZI)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallbackHolder;->getCallback()Landroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallback;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallbackHolder;->getHandler()Landroid/os/Handler;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallbackHolder;->getRequest(I)Landroid/hardware/camera2/CaptureRequest;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallbackHolder;->getSessionId()I
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallbackHolder;->hasBatchedOutputs()Z
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$FrameNumberTracker;-><init>(Landroid/hardware/camera2/impl/CameraDeviceImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$FrameNumberTracker;->getCompletedFrameNumber()J
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$FrameNumberTracker;->getCompletedReprocessFrameNumber()J
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$FrameNumberTracker;->popPartialResults(J)Ljava/util/List;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$FrameNumberTracker;->update()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$FrameNumberTracker;->updateCompletedFrameNumber(J)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$FrameNumberTracker;->updateTracker(JLandroid/hardware/camera2/CaptureResult;ZZ)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$FrameNumberTracker;->updateTracker(JZZ)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$RequestLastFrameNumbersHolder;-><init>(IJ)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$RequestLastFrameNumbersHolder;-><init>(Ljava/util/List;Landroid/hardware/camera2/utils/SubmitInfo;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$RequestLastFrameNumbersHolder;->getLastFrameNumber()J
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$RequestLastFrameNumbersHolder;->getLastRegularFrameNumber()J
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$RequestLastFrameNumbersHolder;->getLastReprocessFrameNumber()J
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$RequestLastFrameNumbersHolder;->getRequestId()I
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$StateCallbackKK;-><init>()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-get10(Landroid/hardware/camera2/impl/CameraDeviceImpl;)Landroid/hardware/camera2/impl/ICameraDeviceUserWrapper;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-get12(Landroid/hardware/camera2/impl/CameraDeviceImpl;)Landroid/hardware/camera2/impl/CameraDeviceImpl$StateCallbackKK;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-get13(Landroid/hardware/camera2/impl/CameraDeviceImpl;)I
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-get2(Landroid/hardware/camera2/impl/CameraDeviceImpl;)Ljava/lang/Runnable;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-get3(Landroid/hardware/camera2/impl/CameraDeviceImpl;)Landroid/util/SparseArray;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-get6(Landroid/hardware/camera2/impl/CameraDeviceImpl;)Landroid/hardware/camera2/CameraDevice$StateCallback;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-get7(Landroid/hardware/camera2/impl/CameraDeviceImpl;)Landroid/os/Handler;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-get8(Landroid/hardware/camera2/impl/CameraDeviceImpl;)Landroid/hardware/camera2/impl/CameraDeviceImpl$FrameNumberTracker;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-get9(Landroid/hardware/camera2/impl/CameraDeviceImpl;)Z
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-set0(Landroid/hardware/camera2/impl/CameraDeviceImpl;Z)Z
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-wrap0(Landroid/hardware/camera2/impl/CameraDeviceImpl;)Landroid/hardware/camera2/CameraCharacteristics;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-wrap1(Landroid/hardware/camera2/impl/CameraDeviceImpl;)Z
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->-wrap2(Landroid/hardware/camera2/impl/CameraDeviceImpl;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;-><init>(Ljava/lang/String;Landroid/hardware/camera2/CameraDevice$StateCallback;Landroid/os/Handler;Landroid/hardware/camera2/CameraCharacteristics;I)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->captureBurst(Ljava/util/List;Landroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallback;Landroid/os/Handler;)I
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->checkAndFireSequenceComplete()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->checkEarlyTriggerSequenceComplete(IJ)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->checkHandler(Landroid/os/Handler;)Landroid/os/Handler;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->checkHandler(Landroid/os/Handler;Ljava/lang/Object;)Landroid/os/Handler;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->checkIfCameraClosedOrInError()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->checkInputConfiguration(Landroid/hardware/camera2/params/InputConfiguration;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->configureStreamsChecked(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;I)Z
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->createCaptureRequest(I)Landroid/hardware/camera2/CaptureRequest$Builder;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->createCaptureSessionInternal(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;I)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->createReprocessableCaptureSessionByConfigurations(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->finalizeOutputConfigs(Ljava/util/List;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->getCallbacks()Landroid/hardware/camera2/impl/CameraDeviceImpl$CameraDeviceCallbacks;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->getCharacteristics()Landroid/hardware/camera2/CameraCharacteristics;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->getId()Ljava/lang/String;
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->isClosed()Z
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->overrideEnableZsl(Landroid/hardware/camera2/impl/CameraMetadataNative;Z)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->setRemoteDevice(Landroid/hardware/camera2/ICameraDeviceUser;)V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->setRepeatingBurst(Ljava/util/List;Landroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallback;Landroid/os/Handler;)I
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->stopRepeating()V
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->submitCaptureRequest(Ljava/util/List;Landroid/hardware/camera2/impl/CameraDeviceImpl$CaptureCallback;Landroid/os/Handler;Z)I
+HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->waitUntilIdle()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$3;->getValue(Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative$4;->getValue(Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative$5;->getValue(Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative$8;->getValue(Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;)V
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative$Key;->equals(Ljava/lang/Object;)Z
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative$Key;->getName()Ljava/lang/String;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative$Key;->getTypeReference()Landroid/hardware/camera2/utils/TypeReference;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative$Key;->hashCode()I
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->-wrap0(Landroid/hardware/camera2/impl/CameraMetadataNative;)[Landroid/graphics/Rect;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->-wrap1(Landroid/hardware/camera2/impl/CameraMetadataNative;)[Landroid/hardware/camera2/params/Face;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->-wrap13(Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Integer;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->-wrap3(Landroid/hardware/camera2/impl/CameraMetadataNative;)Landroid/hardware/camera2/params/StreamConfigurationMap;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;-><init>()V
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;-><init>(Landroid/hardware/camera2/impl/CameraMetadataNative;)V
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->areValuesAllNull([Ljava/lang/Object;)Z
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->close()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/CaptureRequest$Key;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->get(Landroid/hardware/camera2/CaptureResult$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/CameraCharacteristics$Key;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->getBase(Landroid/hardware/camera2/CaptureResult$Key;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->getBase(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->getFaceRectangles()[Landroid/graphics/Rect;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->getFaces()[Landroid/hardware/camera2/params/Face;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->getMarshalerForKey(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->getMaxRegions(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Integer;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->getStreamConfigurationMap()Landroid/hardware/camera2/params/StreamConfigurationMap;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->isEmpty()Z
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->move(Landroid/hardware/camera2/impl/CameraMetadataNative;)Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->readValues(I)[B
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->set(Landroid/hardware/camera2/CameraCharacteristics$Key;Ljava/lang/Object;)V
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->set(Landroid/hardware/camera2/CaptureRequest$Key;Ljava/lang/Object;)V
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->set(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;Ljava/lang/Object;)V
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setBase(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;Ljava/lang/Object;)V
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setupGlobalVendorTagDescriptor()V
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->swap(Landroid/hardware/camera2/impl/CameraMetadataNative;)V
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->writeValues(I[B)V
+HSPLandroid/hardware/camera2/impl/CaptureResultExtras$1;-><init>()V
+HSPLandroid/hardware/camera2/impl/CaptureResultExtras$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/camera2/impl/CaptureResultExtras;
+HSPLandroid/hardware/camera2/impl/CaptureResultExtras$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/impl/CaptureResultExtras;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/hardware/camera2/impl/CaptureResultExtras;-><init>(Landroid/os/Parcel;Landroid/hardware/camera2/impl/CaptureResultExtras;)V
+HSPLandroid/hardware/camera2/impl/CaptureResultExtras;->getFrameNumber()J
+HSPLandroid/hardware/camera2/impl/CaptureResultExtras;->getPartialResultCount()I
+HSPLandroid/hardware/camera2/impl/CaptureResultExtras;->getRequestId()I
+HSPLandroid/hardware/camera2/impl/CaptureResultExtras;->getSubsequenceId()I
+HSPLandroid/hardware/camera2/impl/CaptureResultExtras;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;-><init>(Landroid/hardware/camera2/ICameraDeviceUser;)V
+HSPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;->beginConfigure()V
+HSPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;->cancelRequest(I)J
+HSPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;->createDefaultRequest(I)Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;->createInputStream(III)I
+HSPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;->createStream(Landroid/hardware/camera2/params/OutputConfiguration;)I
+HSPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;->deleteStream(I)V
+HSPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;->endConfigure(I)V
+HSPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;->finalizeOutputConfigurations(ILandroid/hardware/camera2/params/OutputConfiguration;)V
+HSPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;->getInputSurface()Landroid/view/Surface;
+HSPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;->submitRequestList([Landroid/hardware/camera2/CaptureRequest;Z)Landroid/hardware/camera2/utils/SubmitInfo;
+HSPLandroid/hardware/camera2/impl/ICameraDeviceUserWrapper;->waitUntilIdle()V
+HSPLandroid/hardware/camera2/legacy/LegacyCameraDevice;->detectSurfaceDataspace(Landroid/view/Surface;)I
+HSPLandroid/hardware/camera2/legacy/LegacyCameraDevice;->detectSurfaceType(Landroid/view/Surface;)I
+HSPLandroid/hardware/camera2/legacy/LegacyCameraDevice;->getSurfaceSize(Landroid/view/Surface;)Landroid/util/Size;
+HSPLandroid/hardware/camera2/legacy/LegacyExceptionUtils;->throwOnError(I)I
+HSPLandroid/hardware/camera2/marshal/MarshalHelpers;->checkNativeType(I)I
+HSPLandroid/hardware/camera2/marshal/MarshalHelpers;->checkNativeTypeEquals(II)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;-><init>(Landroid/hardware/camera2/utils/TypeReference;I)V
+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/Marshaler;->calculateMarshalSize(Ljava/lang/Object;)I
+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;->calculateMarshalSize(Ljava/lang/Object;)I
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableArray$MarshalerArray;->marshal(Ljava/lang/Object;Ljava/nio/ByteBuffer;)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableArray$MarshalerArray;->marshalArrayElement(Landroid/hardware/camera2/marshal/Marshaler;Ljava/nio/ByteBuffer;Ljava/lang/Object;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/MarshalQueryableBlackLevelPattern$MarshalerBlackLevelPattern;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableBlackLevelPattern;Landroid/hardware/camera2/utils/TypeReference;I)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableBlackLevelPattern$MarshalerBlackLevelPattern;->unmarshal(Ljava/nio/ByteBuffer;)Landroid/hardware/camera2/params/BlackLevelPattern;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableBlackLevelPattern$MarshalerBlackLevelPattern;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableBlackLevelPattern;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableBlackLevelPattern;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableBoolean$MarshalerBoolean;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableBoolean;Landroid/hardware/camera2/utils/TypeReference;I)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableBoolean$MarshalerBoolean;->getNativeSize()I
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableBoolean$MarshalerBoolean;->marshal(Ljava/lang/Boolean;Ljava/nio/ByteBuffer;)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableBoolean$MarshalerBoolean;->marshal(Ljava/lang/Object;Ljava/nio/ByteBuffer;)V
+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/MarshalQueryableColorSpaceTransform$MarshalerColorSpaceTransform;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableColorSpaceTransform;Landroid/hardware/camera2/utils/TypeReference;I)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableColorSpaceTransform$MarshalerColorSpaceTransform;->unmarshal(Ljava/nio/ByteBuffer;)Landroid/hardware/camera2/params/ColorSpaceTransform;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableColorSpaceTransform$MarshalerColorSpaceTransform;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableColorSpaceTransform;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableColorSpaceTransform;->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/MarshalQueryableHighSpeedVideoConfiguration$MarshalerHighSpeedVideoConfiguration;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableHighSpeedVideoConfiguration;Landroid/hardware/camera2/utils/TypeReference;I)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableHighSpeedVideoConfiguration$MarshalerHighSpeedVideoConfiguration;->getNativeSize()I
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableHighSpeedVideoConfiguration$MarshalerHighSpeedVideoConfiguration;->unmarshal(Ljava/nio/ByteBuffer;)Landroid/hardware/camera2/params/HighSpeedVideoConfiguration;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableHighSpeedVideoConfiguration$MarshalerHighSpeedVideoConfiguration;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableHighSpeedVideoConfiguration;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableHighSpeedVideoConfiguration;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableMeteringRectangle$MarshalerMeteringRectangle;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableMeteringRectangle;Landroid/hardware/camera2/utils/TypeReference;I)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableMeteringRectangle$MarshalerMeteringRectangle;->getNativeSize()I
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableMeteringRectangle$MarshalerMeteringRectangle;->marshal(Landroid/hardware/camera2/params/MeteringRectangle;Ljava/nio/ByteBuffer;)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableMeteringRectangle$MarshalerMeteringRectangle;->marshal(Ljava/lang/Object;Ljava/nio/ByteBuffer;)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableMeteringRectangle$MarshalerMeteringRectangle;->unmarshal(Ljava/nio/ByteBuffer;)Landroid/hardware/camera2/params/MeteringRectangle;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableMeteringRectangle$MarshalerMeteringRectangle;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableMeteringRectangle;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableMeteringRectangle;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger$MarshalerNativeByteToInteger;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger;Landroid/hardware/camera2/utils/TypeReference;I)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger$MarshalerNativeByteToInteger;->getNativeSize()I
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger$MarshalerNativeByteToInteger;->marshal(Ljava/lang/Integer;Ljava/nio/ByteBuffer;)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger$MarshalerNativeByteToInteger;->marshal(Ljava/lang/Object;Ljava/nio/ByteBuffer;)V
+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/MarshalQueryablePair$MarshalerPair;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryablePair;Landroid/hardware/camera2/utils/TypeReference;I)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePair$MarshalerPair;->unmarshal(Ljava/nio/ByteBuffer;)Landroid/util/Pair;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePair$MarshalerPair;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePair;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePair;->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;->calculateMarshalSize(Ljava/lang/Object;)I
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->getNativeSize()I
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->marshal(Ljava/lang/Object;Ljava/nio/ByteBuffer;)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->marshalPrimitive(BLjava/nio/ByteBuffer;)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->marshalPrimitive(ILjava/nio/ByteBuffer;)V
+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/MarshalQueryableRange$MarshalerRange;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableRange;Landroid/hardware/camera2/utils/TypeReference;I)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRange$MarshalerRange;->unmarshal(Ljava/nio/ByteBuffer;)Landroid/util/Range;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRange$MarshalerRange;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRange;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRange;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRect$MarshalerRect;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableRect;Landroid/hardware/camera2/utils/TypeReference;I)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRect$MarshalerRect;->getNativeSize()I
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRect$MarshalerRect;->marshal(Landroid/graphics/Rect;Ljava/nio/ByteBuffer;)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRect$MarshalerRect;->marshal(Ljava/lang/Object;Ljava/nio/ByteBuffer;)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRect$MarshalerRect;->unmarshal(Ljava/nio/ByteBuffer;)Landroid/graphics/Rect;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRect$MarshalerRect;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRect;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRect;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableReprocessFormatsMap$MarshalerReprocessFormatsMap;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableReprocessFormatsMap;Landroid/hardware/camera2/utils/TypeReference;I)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableReprocessFormatsMap$MarshalerReprocessFormatsMap;->unmarshal(Ljava/nio/ByteBuffer;)Landroid/hardware/camera2/params/ReprocessFormatsMap;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableReprocessFormatsMap$MarshalerReprocessFormatsMap;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableReprocessFormatsMap;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableReprocessFormatsMap;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRggbChannelVector$MarshalerRggbChannelVector;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableRggbChannelVector;Landroid/hardware/camera2/utils/TypeReference;I)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRggbChannelVector$MarshalerRggbChannelVector;->unmarshal(Ljava/nio/ByteBuffer;)Landroid/hardware/camera2/params/RggbChannelVector;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRggbChannelVector$MarshalerRggbChannelVector;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRggbChannelVector;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRggbChannelVector;->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;->getNativeSize()I
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableSize$MarshalerSize;->marshal(Landroid/util/Size;Ljava/nio/ByteBuffer;)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableSize$MarshalerSize;->marshal(Ljava/lang/Object;Ljava/nio/ByteBuffer;)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/marshal/impl/MarshalQueryableSizeF;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfiguration$MarshalerStreamConfiguration;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfiguration;Landroid/hardware/camera2/utils/TypeReference;I)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfiguration$MarshalerStreamConfiguration;->getNativeSize()I
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfiguration$MarshalerStreamConfiguration;->unmarshal(Ljava/nio/ByteBuffer;)Landroid/hardware/camera2/params/StreamConfiguration;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfiguration$MarshalerStreamConfiguration;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfiguration;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfiguration;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfigurationDuration$MarshalerStreamConfigurationDuration;-><init>(Landroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfigurationDuration;Landroid/hardware/camera2/utils/TypeReference;I)V
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfigurationDuration$MarshalerStreamConfigurationDuration;->getNativeSize()I
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfigurationDuration$MarshalerStreamConfigurationDuration;->unmarshal(Ljava/nio/ByteBuffer;)Landroid/hardware/camera2/params/StreamConfigurationDuration;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfigurationDuration$MarshalerStreamConfigurationDuration;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfigurationDuration;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfigurationDuration;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableString;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
+HSPLandroid/hardware/camera2/params/BlackLevelPattern;-><init>([I)V
+HSPLandroid/hardware/camera2/params/BlackLevelPattern;->getOffsetForIndex(II)I
+HSPLandroid/hardware/camera2/params/ColorSpaceTransform;-><init>([I)V
+HSPLandroid/hardware/camera2/params/ColorSpaceTransform;->copyElements([Landroid/util/Rational;I)V
+HSPLandroid/hardware/camera2/params/HighSpeedVideoConfiguration;-><init>(IIIII)V
+HSPLandroid/hardware/camera2/params/HighSpeedVideoConfiguration;->getFpsRange()Landroid/util/Range;
+HSPLandroid/hardware/camera2/params/HighSpeedVideoConfiguration;->getSize()Landroid/util/Size;
+HSPLandroid/hardware/camera2/params/InputConfiguration;-><init>(III)V
+HSPLandroid/hardware/camera2/params/InputConfiguration;->equals(Ljava/lang/Object;)Z
+HSPLandroid/hardware/camera2/params/InputConfiguration;->getFormat()I
+HSPLandroid/hardware/camera2/params/InputConfiguration;->getHeight()I
+HSPLandroid/hardware/camera2/params/InputConfiguration;->getWidth()I
+HSPLandroid/hardware/camera2/params/MeteringRectangle;-><init>(IIIII)V
+HSPLandroid/hardware/camera2/params/MeteringRectangle;->getHeight()I
+HSPLandroid/hardware/camera2/params/MeteringRectangle;->getMeteringWeight()I
+HSPLandroid/hardware/camera2/params/MeteringRectangle;->getRect()Landroid/graphics/Rect;
+HSPLandroid/hardware/camera2/params/MeteringRectangle;->getWidth()I
+HSPLandroid/hardware/camera2/params/MeteringRectangle;->getX()I
+HSPLandroid/hardware/camera2/params/MeteringRectangle;->getY()I
+HSPLandroid/hardware/camera2/params/OutputConfiguration$1;-><init>()V
+HSPLandroid/hardware/camera2/params/OutputConfiguration;-><init>(ILandroid/view/Surface;)V
+HSPLandroid/hardware/camera2/params/OutputConfiguration;-><init>(ILandroid/view/Surface;I)V
+HSPLandroid/hardware/camera2/params/OutputConfiguration;-><init>(Landroid/hardware/camera2/params/OutputConfiguration;)V
+HSPLandroid/hardware/camera2/params/OutputConfiguration;-><init>(Landroid/util/Size;Ljava/lang/Class;)V
+HSPLandroid/hardware/camera2/params/OutputConfiguration;->addSurface(Landroid/view/Surface;)V
+HSPLandroid/hardware/camera2/params/OutputConfiguration;->equals(Ljava/lang/Object;)Z
+HSPLandroid/hardware/camera2/params/OutputConfiguration;->getSurface()Landroid/view/Surface;
+HSPLandroid/hardware/camera2/params/OutputConfiguration;->getSurfaces()Ljava/util/List;
+HSPLandroid/hardware/camera2/params/OutputConfiguration;->hashCode()I
+HSPLandroid/hardware/camera2/params/OutputConfiguration;->isDeferredConfiguration()Z
+HSPLandroid/hardware/camera2/params/OutputConfiguration;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/hardware/camera2/params/ReprocessFormatsMap;-><init>([I)V
+HSPLandroid/hardware/camera2/params/RggbChannelVector;-><init>(FFFF)V
+HSPLandroid/hardware/camera2/params/StreamConfiguration;-><init>(IIIZ)V
+HSPLandroid/hardware/camera2/params/StreamConfiguration;->getFormat()I
+HSPLandroid/hardware/camera2/params/StreamConfiguration;->getSize()Landroid/util/Size;
+HSPLandroid/hardware/camera2/params/StreamConfiguration;->isOutput()Z
+HSPLandroid/hardware/camera2/params/StreamConfigurationDuration;-><init>(IIIJ)V
+HSPLandroid/hardware/camera2/params/StreamConfigurationDuration;->getDuration()J
+HSPLandroid/hardware/camera2/params/StreamConfigurationDuration;->getFormat()I
+HSPLandroid/hardware/camera2/params/StreamConfigurationDuration;->getHeight()I
+HSPLandroid/hardware/camera2/params/StreamConfigurationDuration;->getWidth()I
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;-><init>([Landroid/hardware/camera2/params/StreamConfiguration;[Landroid/hardware/camera2/params/StreamConfigurationDuration;[Landroid/hardware/camera2/params/StreamConfigurationDuration;[Landroid/hardware/camera2/params/StreamConfiguration;[Landroid/hardware/camera2/params/StreamConfigurationDuration;[Landroid/hardware/camera2/params/StreamConfigurationDuration;[Landroid/hardware/camera2/params/HighSpeedVideoConfiguration;Landroid/hardware/camera2/params/ReprocessFormatsMap;Z)V
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->checkArgumentFormat(I)I
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->checkArgumentFormatInternal(I)I
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->checkArgumentFormatSupported(IZ)I
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getDurations(II)[Landroid/hardware/camera2/params/StreamConfigurationDuration;
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getFormatsMap(Z)Landroid/util/SparseIntArray;
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getHighSpeedVideoFpsRangesFor(Landroid/util/Size;)[Landroid/util/Range;
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getHighSpeedVideoSizes()[Landroid/util/Size;
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getInputFormats()[I
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getInputSizes(I)[Landroid/util/Size;
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getInternalFormatDuration(IILandroid/util/Size;I)J
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getInternalFormatSizes(IIZZ)[Landroid/util/Size;
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getOutputMinFrameDuration(ILandroid/util/Size;)J
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getOutputSizes(I)[Landroid/util/Size;
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getOutputSizes(Ljava/lang/Class;)[Landroid/util/Size;
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getPublicFormatCount(Z)I
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getPublicFormatSizes(IZZ)[Landroid/util/Size;
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->getPublicFormats(Z)[I
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->imageFormatToDataspace(I)I
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->imageFormatToInternal(I)I
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->imageFormatToPublic(I)I
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->isOutputSupportedFor(Ljava/lang/Class;)Z
+HSPLandroid/hardware/camera2/params/StreamConfigurationMap;->isSupportedInternalConfiguration(IILandroid/util/Size;)Z
+HSPLandroid/hardware/camera2/params/TonemapCurve;-><init>([F[F[F)V
+HSPLandroid/hardware/camera2/params/TonemapCurve;->checkArgumentArrayLengthDivisibleBy([FILjava/lang/String;)V
+HSPLandroid/hardware/camera2/params/TonemapCurve;->checkArgumentArrayLengthNoLessThan([FILjava/lang/String;)V
+HSPLandroid/hardware/camera2/utils/HashCodeHelpers;->hashCode([I)I
+HSPLandroid/hardware/camera2/utils/HashCodeHelpers;->hashCodeGeneric([Ljava/lang/Object;)I
+HSPLandroid/hardware/camera2/utils/SubmitInfo$1;-><init>()V
+HSPLandroid/hardware/camera2/utils/SubmitInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/camera2/utils/SubmitInfo;
+HSPLandroid/hardware/camera2/utils/SubmitInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/utils/SubmitInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/hardware/camera2/utils/SubmitInfo;-><init>(Landroid/os/Parcel;Landroid/hardware/camera2/utils/SubmitInfo;)V
+HSPLandroid/hardware/camera2/utils/SubmitInfo;->getLastFrameNumber()J
+HSPLandroid/hardware/camera2/utils/SubmitInfo;->getRequestId()I
+HSPLandroid/hardware/camera2/utils/SubmitInfo;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/hardware/camera2/utils/SurfaceUtils;->getSurfaceDataspace(Landroid/view/Surface;)I
+HSPLandroid/hardware/camera2/utils/SurfaceUtils;->getSurfaceFormat(Landroid/view/Surface;)I
+HSPLandroid/hardware/camera2/utils/SurfaceUtils;->getSurfaceSize(Landroid/view/Surface;)Landroid/util/Size;
+HSPLandroid/hardware/camera2/utils/TaskDrainer$1;-><init>(Landroid/hardware/camera2/utils/TaskDrainer;)V
+HSPLandroid/hardware/camera2/utils/TaskDrainer$1;->run()V
+HSPLandroid/hardware/camera2/utils/TaskDrainer;->-get0(Landroid/hardware/camera2/utils/TaskDrainer;)Landroid/hardware/camera2/utils/TaskDrainer$DrainListener;
+HSPLandroid/hardware/camera2/utils/TaskDrainer;-><init>(Landroid/os/Handler;Landroid/hardware/camera2/utils/TaskDrainer$DrainListener;Ljava/lang/String;)V
+HSPLandroid/hardware/camera2/utils/TaskDrainer;->beginDrain()V
+HSPLandroid/hardware/camera2/utils/TaskDrainer;->checkIfDrainFinished()V
+HSPLandroid/hardware/camera2/utils/TaskDrainer;->postDrained()V
+HSPLandroid/hardware/camera2/utils/TaskDrainer;->taskFinished(Ljava/lang/Object;)V
+HSPLandroid/hardware/camera2/utils/TaskDrainer;->taskStarted(Ljava/lang/Object;)V
+HSPLandroid/hardware/camera2/utils/TaskSingleDrainer;-><init>(Landroid/os/Handler;Landroid/hardware/camera2/utils/TaskDrainer$DrainListener;Ljava/lang/String;)V
+HSPLandroid/hardware/camera2/utils/TaskSingleDrainer;->taskFinished()V
+HSPLandroid/hardware/camera2/utils/TaskSingleDrainer;->taskStarted()V
+HSPLandroid/hardware/camera2/utils/TypeReference$SpecializedBaseTypeReference;-><init>(Ljava/lang/reflect/Type;)V
+HSPLandroid/hardware/camera2/utils/TypeReference$SpecializedTypeReference;-><init>(Ljava/lang/Class;)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;)V
+HSPLandroid/hardware/camera2/utils/TypeReference;->containsTypeVariable(Ljava/lang/reflect/Type;)Z
+HSPLandroid/hardware/camera2/utils/TypeReference;->createSpecializedTypeReference(Ljava/lang/Class;)Landroid/hardware/camera2/utils/TypeReference;
+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/display/DisplayManager$DisplayListener;->onDisplayAdded(I)V
+HSPLandroid/hardware/display/DisplayManager$DisplayListener;->onDisplayChanged(I)V
+HSPLandroid/hardware/display/DisplayManager$DisplayListener;->onDisplayRemoved(I)V
+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
+HSPLandroid/hardware/display/DisplayManager;->getDisplay(I)Landroid/view/Display;
+HSPLandroid/hardware/display/DisplayManager;->getDisplays()[Landroid/view/Display;
+HSPLandroid/hardware/display/DisplayManager;->getDisplays(Ljava/lang/String;)[Landroid/view/Display;
+HSPLandroid/hardware/display/DisplayManager;->getOrCreateDisplayLocked(IZ)Landroid/view/Display;
+HSPLandroid/hardware/display/DisplayManager;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus;
+HSPLandroid/hardware/display/DisplayManager;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;)V
+HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;-><init>(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;)V
+HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;-><init>(Landroid/hardware/display/DisplayManagerGlobal;)V
+HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;-><init>(Landroid/hardware/display/DisplayManagerGlobal;Landroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;)V
+HSPLandroid/hardware/display/DisplayManagerGlobal;-><init>(Landroid/hardware/display/IDisplayManager;)V
+HSPLandroid/hardware/display/DisplayManagerGlobal;->findDisplayListenerLocked(Landroid/hardware/display/DisplayManager$DisplayListener;)I
+HSPLandroid/hardware/display/DisplayManagerGlobal;->getCompatibleDisplay(ILandroid/content/res/Resources;)Landroid/view/Display;
+HSPLandroid/hardware/display/DisplayManagerGlobal;->getCompatibleDisplay(ILandroid/view/DisplayAdjustments;)Landroid/view/Display;
+HSPLandroid/hardware/display/DisplayManagerGlobal;->getDisplayIds()[I
+HSPLandroid/hardware/display/DisplayManagerGlobal;->getDisplayInfo(I)Landroid/view/DisplayInfo;
+HSPLandroid/hardware/display/DisplayManagerGlobal;->getInstance()Landroid/hardware/display/DisplayManagerGlobal;
+HSPLandroid/hardware/display/DisplayManagerGlobal;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus;
+HSPLandroid/hardware/display/DisplayManagerGlobal;->registerCallbackIfNeededLocked()V
+HSPLandroid/hardware/display/DisplayManagerGlobal;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;)V
+HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;->acquireSuspendBlocker()V
+HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;->onDisplayStateChange(I)V
+HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;->onProximityNegative()V
+HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;->onProximityPositive()V
+HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;->onStateChanged()V
+HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;->releaseSuspendBlocker()V
+HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;-><init>()V
+HSPLandroid/hardware/display/DisplayManagerInternal;-><init>()V
+HSPLandroid/hardware/display/DisplayManagerInternal;->getDisplayInfo(I)Landroid/view/DisplayInfo;
+HSPLandroid/hardware/display/DisplayManagerInternal;->getNonOverrideDisplayInfo(ILandroid/view/DisplayInfo;)V
+HSPLandroid/hardware/display/DisplayManagerInternal;->initPowerManagement(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;Landroid/os/Handler;Landroid/hardware/SensorManager;)V
+HSPLandroid/hardware/display/DisplayManagerInternal;->isProximitySensorAvailable()Z
+HSPLandroid/hardware/display/DisplayManagerInternal;->isUidPresentOnDisplay(II)Z
+HSPLandroid/hardware/display/DisplayManagerInternal;->performTraversalInTransactionFromWindowManager()V
+HSPLandroid/hardware/display/DisplayManagerInternal;->registerDisplayTransactionListener(Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;)V
+HSPLandroid/hardware/display/DisplayManagerInternal;->requestPowerState(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Z)Z
+HSPLandroid/hardware/display/DisplayManagerInternal;->setDisplayAccessUIDs(Landroid/util/SparseArray;)V
+HSPLandroid/hardware/display/DisplayManagerInternal;->setDisplayInfoOverrideFromWindowManager(ILandroid/view/DisplayInfo;)V
+HSPLandroid/hardware/display/DisplayManagerInternal;->setDisplayOffsets(III)V
+HSPLandroid/hardware/display/DisplayManagerInternal;->setDisplayProperties(IZFIZ)V
+HSPLandroid/hardware/display/DisplayManagerInternal;->unregisterDisplayTransactionListener(Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;)V
+HSPLandroid/hardware/display/DisplayViewport;-><init>()V
+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;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus;
+HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->registerCallback(Landroid/hardware/display/IDisplayManagerCallback;)V
+HSPLandroid/hardware/display/IDisplayManager$Stub;-><init>()V
+HSPLandroid/hardware/display/IDisplayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/display/IDisplayManager;
+HSPLandroid/hardware/display/IDisplayManager;->connectWifiDisplay(Ljava/lang/String;)V
+HSPLandroid/hardware/display/IDisplayManager;->createVirtualDisplay(Landroid/hardware/display/IVirtualDisplayCallback;Landroid/media/projection/IMediaProjection;Ljava/lang/String;Ljava/lang/String;IIILandroid/view/Surface;ILjava/lang/String;)I
+HSPLandroid/hardware/display/IDisplayManager;->disconnectWifiDisplay()V
+HSPLandroid/hardware/display/IDisplayManager;->forgetWifiDisplay(Ljava/lang/String;)V
+HSPLandroid/hardware/display/IDisplayManager;->getDisplayIds()[I
+HSPLandroid/hardware/display/IDisplayManager;->getDisplayInfo(I)Landroid/view/DisplayInfo;
+HSPLandroid/hardware/display/IDisplayManager;->getStableDisplaySize()Landroid/graphics/Point;
+HSPLandroid/hardware/display/IDisplayManager;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus;
+HSPLandroid/hardware/display/IDisplayManager;->pauseWifiDisplay()V
+HSPLandroid/hardware/display/IDisplayManager;->registerCallback(Landroid/hardware/display/IDisplayManagerCallback;)V
+HSPLandroid/hardware/display/IDisplayManager;->releaseVirtualDisplay(Landroid/hardware/display/IVirtualDisplayCallback;)V
+HSPLandroid/hardware/display/IDisplayManager;->renameWifiDisplay(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hardware/display/IDisplayManager;->requestColorMode(II)V
+HSPLandroid/hardware/display/IDisplayManager;->resizeVirtualDisplay(Landroid/hardware/display/IVirtualDisplayCallback;III)V
+HSPLandroid/hardware/display/IDisplayManager;->resumeWifiDisplay()V
+HSPLandroid/hardware/display/IDisplayManager;->setVirtualDisplaySurface(Landroid/hardware/display/IVirtualDisplayCallback;Landroid/view/Surface;)V
+HSPLandroid/hardware/display/IDisplayManager;->startWifiDisplayScan()V
+HSPLandroid/hardware/display/IDisplayManager;->stopWifiDisplayScan()V
+HSPLandroid/hardware/display/IDisplayManagerCallback$Stub;-><init>()V
+HSPLandroid/hardware/display/IDisplayManagerCallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/hardware/display/IDisplayManagerCallback;->onDisplayEvent(II)V
+HSPLandroid/hardware/display/WifiDisplay$1;-><init>()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;-><init>()V
+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>(ZILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hardware/display/WifiDisplayStatus$1;-><init>()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>(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
+HSPLandroid/hardware/fingerprint/Fingerprint$1;-><init>()V
+HSPLandroid/hardware/fingerprint/FingerprintManager$1;-><init>(Landroid/hardware/fingerprint/FingerprintManager;)V
+HSPLandroid/hardware/fingerprint/FingerprintManager$2;-><init>(Landroid/hardware/fingerprint/FingerprintManager;Landroid/os/PowerManager;Landroid/hardware/fingerprint/FingerprintManager$LockoutResetCallback;)V
+HSPLandroid/hardware/fingerprint/FingerprintManager$AuthenticationCallback;-><init>()V
+HSPLandroid/hardware/fingerprint/FingerprintManager$LockoutResetCallback;-><init>()V
+HSPLandroid/hardware/fingerprint/FingerprintManager$MyHandler;-><init>(Landroid/hardware/fingerprint/FingerprintManager;Landroid/content/Context;)V
+HSPLandroid/hardware/fingerprint/FingerprintManager$MyHandler;-><init>(Landroid/hardware/fingerprint/FingerprintManager;Landroid/content/Context;Landroid/hardware/fingerprint/FingerprintManager$MyHandler;)V
+HSPLandroid/hardware/fingerprint/FingerprintManager;-><init>(Landroid/content/Context;Landroid/hardware/fingerprint/IFingerprintService;)V
+HSPLandroid/hardware/fingerprint/FingerprintManager;->addLockoutResetCallback(Landroid/hardware/fingerprint/FingerprintManager$LockoutResetCallback;)V
+HSPLandroid/hardware/fingerprint/FingerprintManager;->getEnrolledFingerprints(I)Ljava/util/List;
+HSPLandroid/hardware/fingerprint/FingerprintManager;->isHardwareDetected()Z
+HSPLandroid/hardware/fingerprint/IFingerprintService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/hardware/fingerprint/IFingerprintService$Stub$Proxy;->addLockoutResetCallback(Landroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback;)V
+HSPLandroid/hardware/fingerprint/IFingerprintService$Stub$Proxy;->getEnrolledFingerprints(ILjava/lang/String;)Ljava/util/List;
+HSPLandroid/hardware/fingerprint/IFingerprintService$Stub$Proxy;->isHardwareDetected(JLjava/lang/String;)Z
+HSPLandroid/hardware/fingerprint/IFingerprintService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/fingerprint/IFingerprintService;
+HSPLandroid/hardware/fingerprint/IFingerprintService;->addClientActiveCallback(Landroid/hardware/fingerprint/IFingerprintClientActiveCallback;)V
+HSPLandroid/hardware/fingerprint/IFingerprintService;->addLockoutResetCallback(Landroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback;)V
+HSPLandroid/hardware/fingerprint/IFingerprintService;->authenticate(Landroid/os/IBinder;JILandroid/hardware/fingerprint/IFingerprintServiceReceiver;ILjava/lang/String;)V
+HSPLandroid/hardware/fingerprint/IFingerprintService;->cancelAuthentication(Landroid/os/IBinder;Ljava/lang/String;)V
+HSPLandroid/hardware/fingerprint/IFingerprintService;->cancelEnrollment(Landroid/os/IBinder;)V
+HSPLandroid/hardware/fingerprint/IFingerprintService;->enroll(Landroid/os/IBinder;[BILandroid/hardware/fingerprint/IFingerprintServiceReceiver;ILjava/lang/String;)V
+HSPLandroid/hardware/fingerprint/IFingerprintService;->enumerate(Landroid/os/IBinder;ILandroid/hardware/fingerprint/IFingerprintServiceReceiver;)V
+HSPLandroid/hardware/fingerprint/IFingerprintService;->getAuthenticatorId(Ljava/lang/String;)J
+HSPLandroid/hardware/fingerprint/IFingerprintService;->getEnrolledFingerprints(ILjava/lang/String;)Ljava/util/List;
+HSPLandroid/hardware/fingerprint/IFingerprintService;->hasEnrolledFingerprints(ILjava/lang/String;)Z
+HSPLandroid/hardware/fingerprint/IFingerprintService;->isClientActive()Z
+HSPLandroid/hardware/fingerprint/IFingerprintService;->isHardwareDetected(JLjava/lang/String;)Z
+HSPLandroid/hardware/fingerprint/IFingerprintService;->postEnroll(Landroid/os/IBinder;)I
+HSPLandroid/hardware/fingerprint/IFingerprintService;->preEnroll(Landroid/os/IBinder;)J
+HSPLandroid/hardware/fingerprint/IFingerprintService;->remove(Landroid/os/IBinder;IIILandroid/hardware/fingerprint/IFingerprintServiceReceiver;)V
+HSPLandroid/hardware/fingerprint/IFingerprintService;->removeClientActiveCallback(Landroid/hardware/fingerprint/IFingerprintClientActiveCallback;)V
+HSPLandroid/hardware/fingerprint/IFingerprintService;->rename(IILjava/lang/String;)V
+HSPLandroid/hardware/fingerprint/IFingerprintService;->resetTimeout([B)V
+HSPLandroid/hardware/fingerprint/IFingerprintService;->setActiveUser(I)V
+HSPLandroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback$Stub;-><init>()V
+HSPLandroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback;->onLockoutReset(JLandroid/os/IRemoteCallback;)V
+HSPLandroid/hardware/fingerprint/IFingerprintServiceReceiver$Stub;-><init>()V
+HSPLandroid/hardware/fingerprint/IFingerprintServiceReceiver;->onAcquired(JII)V
+HSPLandroid/hardware/fingerprint/IFingerprintServiceReceiver;->onAuthenticationFailed(J)V
+HSPLandroid/hardware/fingerprint/IFingerprintServiceReceiver;->onAuthenticationSucceeded(JLandroid/hardware/fingerprint/Fingerprint;I)V
+HSPLandroid/hardware/fingerprint/IFingerprintServiceReceiver;->onEnrollResult(JIII)V
+HSPLandroid/hardware/fingerprint/IFingerprintServiceReceiver;->onEnumerated(JIII)V
+HSPLandroid/hardware/fingerprint/IFingerprintServiceReceiver;->onError(JII)V
+HSPLandroid/hardware/fingerprint/IFingerprintServiceReceiver;->onRemoved(JIII)V
+HSPLandroid/hardware/input/IInputDevicesChangedListener$Stub;-><init>()V
+HSPLandroid/hardware/input/IInputDevicesChangedListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/hardware/input/IInputDevicesChangedListener;->onInputDevicesChanged([I)V
+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
+HSPLandroid/hardware/input/IInputManager$Stub$Proxy;->registerInputDevicesChangedListener(Landroid/hardware/input/IInputDevicesChangedListener;)V
+HSPLandroid/hardware/input/IInputManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/input/IInputManager;
+HSPLandroid/hardware/input/IInputManager;->addKeyboardLayoutForInputDevice(Landroid/hardware/input/InputDeviceIdentifier;Ljava/lang/String;)V
+HSPLandroid/hardware/input/IInputManager;->cancelVibrate(ILandroid/os/IBinder;)V
+HSPLandroid/hardware/input/IInputManager;->createInputForwarder(I)Landroid/app/IInputForwarder;
+HSPLandroid/hardware/input/IInputManager;->disableInputDevice(I)V
+HSPLandroid/hardware/input/IInputManager;->enableInputDevice(I)V
+HSPLandroid/hardware/input/IInputManager;->getCurrentKeyboardLayoutForInputDevice(Landroid/hardware/input/InputDeviceIdentifier;)Ljava/lang/String;
+HSPLandroid/hardware/input/IInputManager;->getEnabledKeyboardLayoutsForInputDevice(Landroid/hardware/input/InputDeviceIdentifier;)[Ljava/lang/String;
+HSPLandroid/hardware/input/IInputManager;->getInputDevice(I)Landroid/view/InputDevice;
+HSPLandroid/hardware/input/IInputManager;->getInputDeviceIds()[I
+HSPLandroid/hardware/input/IInputManager;->getKeyboardLayout(Ljava/lang/String;)Landroid/hardware/input/KeyboardLayout;
+HSPLandroid/hardware/input/IInputManager;->getKeyboardLayoutForInputDevice(Landroid/hardware/input/InputDeviceIdentifier;Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)Landroid/hardware/input/KeyboardLayout;
+HSPLandroid/hardware/input/IInputManager;->getKeyboardLayouts()[Landroid/hardware/input/KeyboardLayout;
+HSPLandroid/hardware/input/IInputManager;->getKeyboardLayoutsForInputDevice(Landroid/hardware/input/InputDeviceIdentifier;)[Landroid/hardware/input/KeyboardLayout;
+HSPLandroid/hardware/input/IInputManager;->getTouchCalibrationForInputDevice(Ljava/lang/String;I)Landroid/hardware/input/TouchCalibration;
+HSPLandroid/hardware/input/IInputManager;->hasKeys(II[I[Z)Z
+HSPLandroid/hardware/input/IInputManager;->injectInputEvent(Landroid/view/InputEvent;I)Z
+HSPLandroid/hardware/input/IInputManager;->isInTabletMode()I
+HSPLandroid/hardware/input/IInputManager;->isInputDeviceEnabled(I)Z
+HSPLandroid/hardware/input/IInputManager;->registerInputDevicesChangedListener(Landroid/hardware/input/IInputDevicesChangedListener;)V
+HSPLandroid/hardware/input/IInputManager;->registerTabletModeChangedListener(Landroid/hardware/input/ITabletModeChangedListener;)V
+HSPLandroid/hardware/input/IInputManager;->removeKeyboardLayoutForInputDevice(Landroid/hardware/input/InputDeviceIdentifier;Ljava/lang/String;)V
+HSPLandroid/hardware/input/IInputManager;->requestPointerCapture(Landroid/os/IBinder;Z)V
+HSPLandroid/hardware/input/IInputManager;->setCurrentKeyboardLayoutForInputDevice(Landroid/hardware/input/InputDeviceIdentifier;Ljava/lang/String;)V
+HSPLandroid/hardware/input/IInputManager;->setCustomPointerIcon(Landroid/view/PointerIcon;)V
+HSPLandroid/hardware/input/IInputManager;->setKeyboardLayoutForInputDevice(Landroid/hardware/input/InputDeviceIdentifier;Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;Ljava/lang/String;)V
+HSPLandroid/hardware/input/IInputManager;->setPointerIconType(I)V
+HSPLandroid/hardware/input/IInputManager;->setTouchCalibrationForInputDevice(Ljava/lang/String;ILandroid/hardware/input/TouchCalibration;)V
+HSPLandroid/hardware/input/IInputManager;->tryPointerSpeed(I)V
+HSPLandroid/hardware/input/IInputManager;->vibrate(I[JILandroid/os/IBinder;)V
+HSPLandroid/hardware/input/InputDeviceIdentifier$1;-><init>()V
+HSPLandroid/hardware/input/InputDeviceIdentifier;-><init>(Ljava/lang/String;II)V
+HSPLandroid/hardware/input/InputManager$InputDeviceListener;->onInputDeviceAdded(I)V
+HSPLandroid/hardware/input/InputManager$InputDeviceListener;->onInputDeviceChanged(I)V
+HSPLandroid/hardware/input/InputManager$InputDeviceListener;->onInputDeviceRemoved(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$InputDevicesChangedListener;)V
+HSPLandroid/hardware/input/InputManager$OnTabletModeChangedListener;->onTabletModeChanged(JZ)V
+HSPLandroid/hardware/input/InputManager;-><init>(Landroid/hardware/input/IInputManager;)V
+HSPLandroid/hardware/input/InputManager;->deviceHasKeys(I[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;
+HSPLandroid/hardware/input/InputManager;->populateInputDevicesLocked()V
+HSPLandroid/hardware/input/InputManager;->registerInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;Landroid/os/Handler;)V
+HSPLandroid/hardware/input/TouchCalibration$1;-><init>()V
+HSPLandroid/hardware/input/TouchCalibration;-><init>()V
+HSPLandroid/hardware/input/TouchCalibration;-><init>(FFFFFF)V
+HSPLandroid/hardware/location/IActivityRecognitionHardware$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IActivityRecognitionHardware;
+HSPLandroid/hardware/location/IActivityRecognitionHardware;->disableActivityEvent(Ljava/lang/String;I)Z
+HSPLandroid/hardware/location/IActivityRecognitionHardware;->enableActivityEvent(Ljava/lang/String;IJ)Z
+HSPLandroid/hardware/location/IActivityRecognitionHardware;->flush()Z
+HSPLandroid/hardware/location/IActivityRecognitionHardware;->getSupportedActivities()[Ljava/lang/String;
+HSPLandroid/hardware/location/IActivityRecognitionHardware;->isActivitySupported(Ljava/lang/String;)Z
+HSPLandroid/hardware/location/IActivityRecognitionHardware;->registerSink(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z
+HSPLandroid/hardware/location/IActivityRecognitionHardware;->unregisterSink(Landroid/hardware/location/IActivityRecognitionHardwareSink;)Z
+HSPLandroid/hardware/location/IActivityRecognitionHardwareClient$Stub;-><init>()V
+HSPLandroid/hardware/location/IActivityRecognitionHardwareClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/hardware/location/IActivityRecognitionHardwareClient;->onAvailabilityChanged(ZLandroid/hardware/location/IActivityRecognitionHardware;)V
+HSPLandroid/hardware/location/IContextHubService;->findNanoAppOnHub(ILandroid/hardware/location/NanoAppFilter;)[I
+HSPLandroid/hardware/location/IContextHubService;->getContextHubHandles()[I
+HSPLandroid/hardware/location/IContextHubService;->getContextHubInfo(I)Landroid/hardware/location/ContextHubInfo;
+HSPLandroid/hardware/location/IContextHubService;->getNanoAppInstanceInfo(I)Landroid/hardware/location/NanoAppInstanceInfo;
+HSPLandroid/hardware/location/IContextHubService;->loadNanoApp(ILandroid/hardware/location/NanoApp;)I
+HSPLandroid/hardware/location/IContextHubService;->registerCallback(Landroid/hardware/location/IContextHubCallback;)I
+HSPLandroid/hardware/location/IContextHubService;->sendMessage(IILandroid/hardware/location/ContextHubMessage;)I
+HSPLandroid/hardware/location/IContextHubService;->unloadNanoApp(I)I
+HSPLandroid/hardware/radio/ITuner;->cancel()V
+HSPLandroid/hardware/radio/ITuner;->cancelAnnouncement()V
+HSPLandroid/hardware/radio/ITuner;->close()V
+HSPLandroid/hardware/radio/ITuner;->getConfiguration()Landroid/hardware/radio/RadioManager$BandConfig;
+HSPLandroid/hardware/radio/ITuner;->getImage(I)Landroid/graphics/Bitmap;
+HSPLandroid/hardware/radio/ITuner;->getProgramInformation()Landroid/hardware/radio/RadioManager$ProgramInfo;
+HSPLandroid/hardware/radio/ITuner;->getProgramList(Ljava/util/Map;)Ljava/util/List;
+HSPLandroid/hardware/radio/ITuner;->isAnalogForced()Z
+HSPLandroid/hardware/radio/ITuner;->isAntennaConnected()Z
+HSPLandroid/hardware/radio/ITuner;->isClosed()Z
+HSPLandroid/hardware/radio/ITuner;->isMuted()Z
+HSPLandroid/hardware/radio/ITuner;->scan(ZZ)V
+HSPLandroid/hardware/radio/ITuner;->setAnalogForced(Z)V
+HSPLandroid/hardware/radio/ITuner;->setConfiguration(Landroid/hardware/radio/RadioManager$BandConfig;)V
+HSPLandroid/hardware/radio/ITuner;->setMuted(Z)V
+HSPLandroid/hardware/radio/ITuner;->startBackgroundScan()Z
+HSPLandroid/hardware/radio/ITuner;->step(ZZ)V
+HSPLandroid/hardware/radio/ITuner;->tune(Landroid/hardware/radio/ProgramSelector;)V
+HSPLandroid/hardware/radio/ITunerCallback;->onAntennaState(Z)V
+HSPLandroid/hardware/radio/ITunerCallback;->onBackgroundScanAvailabilityChange(Z)V
+HSPLandroid/hardware/radio/ITunerCallback;->onBackgroundScanComplete()V
+HSPLandroid/hardware/radio/ITunerCallback;->onConfigurationChanged(Landroid/hardware/radio/RadioManager$BandConfig;)V
+HSPLandroid/hardware/radio/ITunerCallback;->onCurrentProgramInfoChanged(Landroid/hardware/radio/RadioManager$ProgramInfo;)V
+HSPLandroid/hardware/radio/ITunerCallback;->onEmergencyAnnouncement(Z)V
+HSPLandroid/hardware/radio/ITunerCallback;->onError(I)V
+HSPLandroid/hardware/radio/ITunerCallback;->onProgramListChanged()V
+HSPLandroid/hardware/radio/ITunerCallback;->onTrafficAnnouncement(Z)V
+HSPLandroid/hardware/radio/ProgramSelector$1;-><init>()V
+HSPLandroid/hardware/radio/ProgramSelector$Identifier$1;-><init>()V
+HSPLandroid/hardware/radio/RadioManager$AmBandConfig$1;-><init>()V
+HSPLandroid/hardware/radio/RadioManager$AmBandDescriptor$1;-><init>()V
+HSPLandroid/hardware/radio/RadioManager$BandConfig$1;-><init>()V
+HSPLandroid/hardware/radio/RadioManager$BandDescriptor$1;-><init>()V
+HSPLandroid/hardware/radio/RadioManager$FmBandConfig$1;-><init>()V
+HSPLandroid/hardware/radio/RadioManager$FmBandDescriptor$1;-><init>()V
+HSPLandroid/hardware/radio/RadioManager$ModuleProperties$1;-><init>()V
+HSPLandroid/hardware/radio/RadioManager$ProgramInfo$1;-><init>()V
+HSPLandroid/hardware/radio/RadioMetadata$1;-><init>()V
+HSPLandroid/hardware/radio/V1_0/Call;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
+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/CardStatus;->readFromParcel(Landroid/os/HwParcel;)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/CellIdentity;-><init>()V
+HSPLandroid/hardware/radio/V1_0/CellIdentity;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/radio/V1_0/CellIdentity;->toString()Ljava/lang/String;
+HSPLandroid/hardware/radio/V1_0/CellInfoType;->toString(I)Ljava/lang/String;
+HSPLandroid/hardware/radio/V1_0/DataRegStateResult;-><init>()V
+HSPLandroid/hardware/radio/V1_0/DataRegStateResult;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/radio/V1_0/DataRegStateResult;->readFromParcel(Landroid/os/HwParcel;)V
+HSPLandroid/hardware/radio/V1_0/DataRegStateResult;->toString()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/IRadio$Proxy;-><init>(Landroid/os/IHwBinder;)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getBasebandVersion(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getCdmaSubscriptionSource(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getCurrentCalls(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getDataRegistrationState(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getDeviceIdentity(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getHardwareConfig(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getIccCardStatus(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getImsRegistrationState(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getNetworkSelectionMode(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getOperator(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getRadioCapability(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getSignalStrength(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getVoiceRadioTechnology(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->getVoiceRegistrationState(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->responseAcknowledgement()V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->sendDeviceState(IIZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->setCdmaSubscriptionSource(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->setCellInfoListRate(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->setIndicationFilter(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->setRadioPower(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->setResponseFunctions(Landroid/hardware/radio/V1_0/IRadioResponse;Landroid/hardware/radio/V1_0/IRadioIndication;)V
+HSPLandroid/hardware/radio/V1_0/IRadio$Proxy;->startLceService(IIZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->acceptCall(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->acknowledgeIncomingGsmSmsWithPdu(IZLjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->acknowledgeLastIncomingCdmaSms(ILandroid/hardware/radio/V1_0/CdmaSmsAck;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->acknowledgeLastIncomingGsmSms(IZI)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/radio/V1_0/IRadio;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/radio/V1_0/IRadio;
+HSPLandroid/hardware/radio/V1_0/IRadio;->cancelPendingUssd(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->changeIccPin2ForApp(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->changeIccPinForApp(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->conference(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->deactivateDataCall(IIZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->deleteSmsOnRuim(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->deleteSmsOnSim(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->dial(ILandroid/hardware/radio/V1_0/Dial;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->exitEmergencyCallbackMode(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->explicitCallTransfer(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getAllowedCarriers(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getAvailableBandModes(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getAvailableNetworks(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getBasebandVersion(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getCDMASubscription(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getCallForwardStatus(ILandroid/hardware/radio/V1_0/CallForwardInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getCallWaiting(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getCdmaBroadcastConfig(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getCdmaRoamingPreference(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getCdmaSubscriptionSource(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getCellInfoList(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getClip(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getClir(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getCurrentCalls(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getDataCallList(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getDataRegistrationState(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HSPLandroid/hardware/radio/V1_0/IRadio;->getDeviceIdentity(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getFacilityLockForApp(ILjava/lang/String;Ljava/lang/String;ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getGsmBroadcastConfig(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getHardwareConfig(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getHashChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/V1_0/IRadio;->getIccCardStatus(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getImsRegistrationState(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getImsiForApp(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getLastCallFailCause(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getModemActivityInfo(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getMute(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getNeighboringCids(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getNetworkSelectionMode(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getOperator(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getPreferredNetworkType(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getPreferredVoicePrivacy(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getRadioCapability(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getService(Ljava/lang/String;)Landroid/hardware/radio/V1_0/IRadio;
+HSPLandroid/hardware/radio/V1_0/IRadio;->getSignalStrength(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getSmscAddress(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getTTYMode(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getVoiceRadioTechnology(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->getVoiceRegistrationState(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->handleStkCallSetupRequestFromSim(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->hangup(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->hangupForegroundResumeBackground(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->hangupWaitingOrBackground(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->iccCloseLogicalChannel(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->iccIOForApp(ILandroid/hardware/radio/V1_0/IccIo;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->iccOpenLogicalChannel(ILjava/lang/String;I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->iccTransmitApduBasicChannel(ILandroid/hardware/radio/V1_0/SimApdu;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->iccTransmitApduLogicalChannel(ILandroid/hardware/radio/V1_0/SimApdu;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/V1_0/IRadio;->interfaceDescriptor()Ljava/lang/String;
+HSPLandroid/hardware/radio/V1_0/IRadio;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HSPLandroid/hardware/radio/V1_0/IRadio;->notifySyspropsChanged()V
+HSPLandroid/hardware/radio/V1_0/IRadio;->nvReadItem(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->nvResetConfig(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->nvWriteCdmaPrl(ILjava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->nvWriteItem(ILandroid/hardware/radio/V1_0/NvWriteItem;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->ping()V
+HSPLandroid/hardware/radio/V1_0/IRadio;->pullLceData(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->rejectCall(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->reportSmsMemoryStatus(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->reportStkServiceIsRunning(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->requestIccSimAuthentication(IILjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->requestIsimAuthentication(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->requestShutdown(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->responseAcknowledgement()V
+HSPLandroid/hardware/radio/V1_0/IRadio;->sendBurstDtmf(ILjava/lang/String;II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->sendCDMAFeatureCode(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->sendCdmaSms(ILandroid/hardware/radio/V1_0/CdmaSmsMessage;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->sendDeviceState(IIZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->sendDtmf(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->sendEnvelope(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->sendEnvelopeWithStatus(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->sendImsSms(ILandroid/hardware/radio/V1_0/ImsSmsMessage;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->sendSMSExpectMore(ILandroid/hardware/radio/V1_0/GsmSmsMessage;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->sendSms(ILandroid/hardware/radio/V1_0/GsmSmsMessage;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->sendTerminalResponseToSim(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->sendUssd(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->separateConnection(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setAllowedCarriers(IZLandroid/hardware/radio/V1_0/CarrierRestrictions;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setBandMode(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setBarringPassword(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setCallForward(ILandroid/hardware/radio/V1_0/CallForwardInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setCallWaiting(IZI)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setCdmaBroadcastActivation(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setCdmaBroadcastConfig(ILjava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setCdmaRoamingPreference(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setCdmaSubscriptionSource(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setCellInfoListRate(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setClir(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setDataAllowed(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setDataProfile(ILjava/util/ArrayList;Z)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setFacilityLockForApp(ILjava/lang/String;ZLjava/lang/String;ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setGsmBroadcastActivation(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setGsmBroadcastConfig(ILjava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setHALInstrumentation()V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setIndicationFilter(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setInitialAttachApn(ILandroid/hardware/radio/V1_0/DataProfileInfo;ZZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setLocationUpdates(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setMute(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setNetworkSelectionModeAutomatic(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setNetworkSelectionModeManual(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setPreferredNetworkType(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setPreferredVoicePrivacy(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setRadioCapability(ILandroid/hardware/radio/V1_0/RadioCapability;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setRadioPower(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setResponseFunctions(Landroid/hardware/radio/V1_0/IRadioResponse;Landroid/hardware/radio/V1_0/IRadioIndication;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setSimCardPower(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setSmscAddress(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setSuppServiceNotifications(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setTTYMode(II)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setUiccSubscription(ILandroid/hardware/radio/V1_0/SelectUiccSub;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->setupDataCall(IILandroid/hardware/radio/V1_0/DataProfileInfo;ZZZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->startDtmf(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->startLceService(IIZ)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->stopDtmf(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->stopLceService(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->supplyIccPin2ForApp(ILjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->supplyIccPinForApp(ILjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->supplyIccPuk2ForApp(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->supplyIccPukForApp(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->supplyNetworkDepersonalization(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->switchWaitingOrHoldingAndActive(I)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HSPLandroid/hardware/radio/V1_0/IRadio;->writeSmsToRuim(ILandroid/hardware/radio/V1_0/CdmaSmsWriteArgs;)V
+HSPLandroid/hardware/radio/V1_0/IRadio;->writeSmsToSim(ILandroid/hardware/radio/V1_0/SmsWriteArgs;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->callRing(IZLandroid/hardware/radio/V1_0/CdmaSignalInfoRecord;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->callStateChanged(I)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->cdmaCallWaiting(ILandroid/hardware/radio/V1_0/CdmaCallWaiting;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->cdmaInfoRec(ILandroid/hardware/radio/V1_0/CdmaInformationRecords;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->cdmaNewSms(ILandroid/hardware/radio/V1_0/CdmaSmsMessage;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->cdmaOtaProvisionStatus(II)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->cdmaPrlChanged(II)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->cdmaRuimSmsStorageFull(I)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->cdmaSubscriptionSourceChanged(II)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->cellInfoList(ILjava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->currentSignalStrength(ILandroid/hardware/radio/V1_0/SignalStrength;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->dataCallListChanged(ILjava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->enterEmergencyCallbackMode(I)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->exitEmergencyCallbackMode(I)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->getHashChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->hardwareConfigChanged(ILjava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->imsNetworkStateChanged(I)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->indicateRingbackTone(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->interfaceDescriptor()Ljava/lang/String;
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->lceData(ILandroid/hardware/radio/V1_0/LceDataInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->modemReset(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->networkStateChanged(I)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->newBroadcastSms(ILjava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->newSms(ILjava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->newSmsOnSim(II)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->newSmsStatusReport(ILjava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->nitzTimeReceived(ILjava/lang/String;J)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->notifySyspropsChanged()V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->onSupplementaryServiceIndication(ILandroid/hardware/radio/V1_0/StkCcUnsolSsResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->onUssd(IILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->pcoData(ILandroid/hardware/radio/V1_0/PcoDataInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->ping()V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->radioCapabilityIndication(ILandroid/hardware/radio/V1_0/RadioCapability;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->radioStateChanged(II)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->resendIncallMute(I)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->restrictedStateChanged(II)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->rilConnected(I)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->setHALInstrumentation()V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->simRefresh(ILandroid/hardware/radio/V1_0/SimRefreshResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->simSmsStorageFull(I)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->simStatusChanged(I)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->srvccStateNotify(II)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->stkCallControlAlphaNotify(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->stkCallSetup(IJ)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->stkEventNotify(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->stkProactiveCommand(ILjava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->stkSessionEnd(I)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->subscriptionStatusChanged(IZ)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->suppSvcNotify(ILandroid/hardware/radio/V1_0/SuppSvcNotification;)V
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HSPLandroid/hardware/radio/V1_0/IRadioIndication;->voiceRadioTechChanged(II)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->acceptCallResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->acknowledgeIncomingGsmSmsWithPduResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->acknowledgeLastIncomingCdmaSmsResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->acknowledgeLastIncomingGsmSmsResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->acknowledgeRequest(I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->cancelPendingUssdResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->changeIccPin2ForAppResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->changeIccPinForAppResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->conferenceResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->deactivateDataCallResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->deleteSmsOnRuimResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->deleteSmsOnSimResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->dialResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->exitEmergencyCallbackModeResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->explicitCallTransferResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getAllowedCarriersResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;ZLandroid/hardware/radio/V1_0/CarrierRestrictions;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getAvailableBandModesResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getAvailableNetworksResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getBasebandVersionResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getCDMASubscriptionResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getCallForwardStatusResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getCallWaitingResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;ZI)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getCdmaBroadcastConfigResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getCdmaRoamingPreferenceResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getCdmaSubscriptionSourceResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getCellInfoListResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getClipResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getClirResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;II)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getCurrentCallsResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getDataCallListResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getDataRegistrationStateResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/DataRegStateResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getDeviceIdentityResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getFacilityLockForAppResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getGsmBroadcastConfigResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getHardwareConfigResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getHashChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getIMSIForAppResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getIccCardStatusResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/CardStatus;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getImsRegistrationStateResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;ZI)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getLastCallFailCauseResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/LastCallFailCauseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getModemActivityInfoResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/ActivityStatsInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getMuteResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Z)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getNeighboringCidsResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getNetworkSelectionModeResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Z)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getOperatorResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getPreferredNetworkTypeResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getPreferredVoicePrivacyResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Z)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getRadioCapabilityResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/RadioCapability;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getSignalStrengthResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/SignalStrength;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getSmscAddressResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getTTYModeResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getVoiceRadioTechnologyResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->getVoiceRegistrationStateResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/VoiceRegStateResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->handleStkCallSetupRequestFromSimResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->hangupConnectionResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->hangupForegroundResumeBackgroundResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->hangupWaitingOrBackgroundResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->iccCloseLogicalChannelResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->iccIOForAppResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/IccIoResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->iccOpenLogicalChannelResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;ILjava/util/ArrayList;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->iccTransmitApduBasicChannelResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/IccIoResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->iccTransmitApduLogicalChannelResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/IccIoResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->interfaceDescriptor()Ljava/lang/String;
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->notifySyspropsChanged()V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->nvReadItemResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->nvResetConfigResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->nvWriteCdmaPrlResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->nvWriteItemResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->ping()V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->pullLceDataResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/LceDataInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->rejectCallResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->reportSmsMemoryStatusResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->reportStkServiceIsRunningResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->requestIccSimAuthenticationResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/IccIoResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->requestIsimAuthenticationResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->requestShutdownResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->sendBurstDtmfResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->sendCDMAFeatureCodeResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->sendCdmaSmsResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/SendSmsResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->sendDeviceStateResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->sendDtmfResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->sendEnvelopeResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/String;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->sendEnvelopeWithStatusResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/IccIoResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->sendImsSmsResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/SendSmsResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->sendSMSExpectMoreResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/SendSmsResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->sendSmsResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/SendSmsResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->sendTerminalResponseToSimResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->sendUssdResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->separateConnectionResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setAllowedCarriersResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setBandModeResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setBarringPasswordResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setCallForwardResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setCallWaitingResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setCdmaBroadcastActivationResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setCdmaBroadcastConfigResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setCdmaRoamingPreferenceResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setCdmaSubscriptionSourceResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setCellInfoListRateResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setClirResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setDataAllowedResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setDataProfileResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setFacilityLockForAppResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setGsmBroadcastActivationResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setGsmBroadcastConfigResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setHALInstrumentation()V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setIndicationFilterResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setInitialAttachApnResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setLocationUpdatesResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setMuteResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setNetworkSelectionModeAutomaticResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setNetworkSelectionModeManualResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setPreferredNetworkTypeResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setPreferredVoicePrivacyResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setRadioCapabilityResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/RadioCapability;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setRadioPowerResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setSimCardPowerResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setSmscAddressResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setSuppServiceNotificationsResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setTTYModeResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setUiccSubscriptionResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->setupDataCallResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/SetupDataCallResult;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->startDtmfResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->startLceServiceResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/LceStatusInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->stopDtmfResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->stopLceServiceResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/LceStatusInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->supplyIccPin2ForAppResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->supplyIccPinForAppResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->supplyIccPuk2ForAppResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->supplyIccPukForAppResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->supplyNetworkDepersonalizationResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->switchWaitingOrHoldingAndActiveResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->writeSmsToRuimResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/IRadioResponse;->writeSmsToSimResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLandroid/hardware/radio/V1_0/LceStatusInfo;-><init>()V
+HSPLandroid/hardware/radio/V1_0/LceStatusInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/radio/V1_0/LceStatusInfo;->readFromParcel(Landroid/os/HwParcel;)V
+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/SignalStrength;-><init>()V
+HSPLandroid/hardware/radio/V1_0/SignalStrength;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/radio/V1_0/SignalStrength;->readFromParcel(Landroid/os/HwParcel;)V
+HSPLandroid/hardware/radio/V1_0/TdScdmaSignalStrength;-><init>()V
+HSPLandroid/hardware/radio/V1_0/TdScdmaSignalStrength;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/radio/V1_0/VoiceRegStateResult;-><init>()V
+HSPLandroid/hardware/radio/V1_0/VoiceRegStateResult;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/radio/V1_0/VoiceRegStateResult;->readFromParcel(Landroid/os/HwParcel;)V
+HSPLandroid/hardware/radio/V1_0/VoiceRegStateResult;->toString()Ljava/lang/String;
+HSPLandroid/hardware/radio/V1_1/IRadioIndication$Stub;-><init>()V
+HSPLandroid/hardware/radio/V1_1/IRadioIndication$Stub;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/radio/V1_1/IRadioIndication$Stub;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/V1_1/IRadioIndication$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
+HSPLandroid/hardware/radio/V1_1/IRadioIndication;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/radio/V1_1/IRadioIndication;->carrierInfoForImsiEncryption(I)V
+HSPLandroid/hardware/radio/V1_1/IRadioIndication;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HSPLandroid/hardware/radio/V1_1/IRadioIndication;->getHashChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/V1_1/IRadioIndication;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/V1_1/IRadioIndication;->interfaceDescriptor()Ljava/lang/String;
+HSPLandroid/hardware/radio/V1_1/IRadioIndication;->keepaliveStatus(ILandroid/hardware/radio/V1_1/KeepaliveStatus;)V
+HSPLandroid/hardware/radio/V1_1/IRadioIndication;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HSPLandroid/hardware/radio/V1_1/IRadioIndication;->networkScanResult(ILandroid/hardware/radio/V1_1/NetworkScanResult;)V
+HSPLandroid/hardware/radio/V1_1/IRadioIndication;->notifySyspropsChanged()V
+HSPLandroid/hardware/radio/V1_1/IRadioIndication;->ping()V
+HSPLandroid/hardware/radio/V1_1/IRadioIndication;->setHALInstrumentation()V
+HSPLandroid/hardware/radio/V1_1/IRadioIndication;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HSPLandroid/hardware/radio/V1_1/IRadioResponse$Stub;-><init>()V
+HSPLandroid/hardware/radio/V1_1/IRadioResponse$Stub;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/radio/V1_1/IRadioResponse$Stub;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/V1_1/IRadioResponse$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->getHashChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->interfaceDescriptor()Ljava/lang/String;
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->notifySyspropsChanged()V
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->ping()V
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->setCarrierInfoForImsiEncryptionResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->setHALInstrumentation()V
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->setSimCardPowerResponse_1_1(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->startKeepaliveResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_1/KeepaliveStatus;)V
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->startNetworkScanResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->stopKeepaliveResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->stopNetworkScanResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLandroid/hardware/radio/V1_1/IRadioResponse;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook$Proxy;-><init>(Landroid/os/IHwBinder;)V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook$Proxy;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook$Proxy;->setResponseFunctions(Landroid/hardware/radio/deprecated/V1_0/IOemHookResponse;Landroid/hardware/radio/deprecated/V1_0/IOemHookIndication;)V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/radio/deprecated/V1_0/IOemHook;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->getHashChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->getService(Ljava/lang/String;)Landroid/hardware/radio/deprecated/V1_0/IOemHook;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->interfaceDescriptor()Ljava/lang/String;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->notifySyspropsChanged()V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->ping()V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->sendRequestRaw(ILjava/util/ArrayList;)V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->sendRequestStrings(ILjava/util/ArrayList;)V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->setHALInstrumentation()V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->setResponseFunctions(Landroid/hardware/radio/deprecated/V1_0/IOemHookResponse;Landroid/hardware/radio/deprecated/V1_0/IOemHookIndication;)V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHook;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication$Stub;-><init>()V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication$Stub;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication;->getHashChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication;->interfaceDescriptor()Ljava/lang/String;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication;->notifySyspropsChanged()V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication;->oemHookRaw(ILjava/util/ArrayList;)V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication;->ping()V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication;->setHALInstrumentation()V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookIndication;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse$Stub;-><init>()V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse$Stub;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse;->getHashChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse;->interfaceDescriptor()Ljava/lang/String;
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse;->notifySyspropsChanged()V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse;->ping()V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse;->sendRequestRawResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse;->sendRequestStringsResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse;->setHALInstrumentation()V
+HSPLandroid/hardware/radio/deprecated/V1_0/IOemHookResponse;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HSPLandroid/hardware/soundtrigger/IRecognitionStatusCallback$Stub;-><init>()V
+HSPLandroid/hardware/soundtrigger/IRecognitionStatusCallback;->onError(I)V
+HSPLandroid/hardware/soundtrigger/IRecognitionStatusCallback;->onGenericSoundTriggerDetected(Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent;)V
+HSPLandroid/hardware/soundtrigger/IRecognitionStatusCallback;->onKeyphraseDetected(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;)V
+HSPLandroid/hardware/soundtrigger/IRecognitionStatusCallback;->onRecognitionPaused()V
+HSPLandroid/hardware/soundtrigger/IRecognitionStatusCallback;->onRecognitionResumed()V
+HSPLandroid/hardware/soundtrigger/KeyphraseEnrollmentInfo;-><init>(Landroid/content/pm/PackageManager;)V
+HSPLandroid/hardware/soundtrigger/KeyphraseEnrollmentInfo;->getKeyphraseFromTypedArray(Landroid/content/res/TypedArray;Ljava/lang/String;Ljava/util/List;)Landroid/hardware/soundtrigger/KeyphraseMetadata;
+HSPLandroid/hardware/soundtrigger/KeyphraseEnrollmentInfo;->getKeyphraseMetadata(Ljava/lang/String;Ljava/util/Locale;)Landroid/hardware/soundtrigger/KeyphraseMetadata;
+HSPLandroid/hardware/soundtrigger/KeyphraseEnrollmentInfo;->getKeyphraseMetadataFromApplicationInfo(Landroid/content/pm/PackageManager;Landroid/content/pm/ApplicationInfo;Ljava/util/List;)Landroid/hardware/soundtrigger/KeyphraseMetadata;
+HSPLandroid/hardware/soundtrigger/KeyphraseMetadata;-><init>(ILjava/lang/String;Landroid/util/ArraySet;I)V
+HSPLandroid/hardware/soundtrigger/KeyphraseMetadata;->supportsLocale(Ljava/util/Locale;)Z
+HSPLandroid/hardware/soundtrigger/KeyphraseMetadata;->supportsPhrase(Ljava/lang/String;)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;->-wrap0(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
+HSPLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIIZIZIZ)V
+HSPLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;->fromParcel(Landroid/os/Parcel;)Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
+HSPLandroid/hardware/usb/IUsbManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/hardware/usb/IUsbManager$Stub$Proxy;->getDeviceList(Landroid/os/Bundle;)V
+HSPLandroid/hardware/usb/IUsbManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/usb/IUsbManager;
+HSPLandroid/hardware/usb/IUsbManager;->allowUsbDebugging(ZLjava/lang/String;)V
+HSPLandroid/hardware/usb/IUsbManager;->clearDefaults(Ljava/lang/String;I)V
+HSPLandroid/hardware/usb/IUsbManager;->clearUsbDebuggingKeys()V
+HSPLandroid/hardware/usb/IUsbManager;->denyUsbDebugging()V
+HSPLandroid/hardware/usb/IUsbManager;->getCurrentAccessory()Landroid/hardware/usb/UsbAccessory;
+HSPLandroid/hardware/usb/IUsbManager;->getDeviceList(Landroid/os/Bundle;)V
+HSPLandroid/hardware/usb/IUsbManager;->getPortStatus(Ljava/lang/String;)Landroid/hardware/usb/UsbPortStatus;
+HSPLandroid/hardware/usb/IUsbManager;->getPorts()[Landroid/hardware/usb/UsbPort;
+HSPLandroid/hardware/usb/IUsbManager;->grantAccessoryPermission(Landroid/hardware/usb/UsbAccessory;I)V
+HSPLandroid/hardware/usb/IUsbManager;->grantDevicePermission(Landroid/hardware/usb/UsbDevice;I)V
+HSPLandroid/hardware/usb/IUsbManager;->hasAccessoryPermission(Landroid/hardware/usb/UsbAccessory;)Z
+HSPLandroid/hardware/usb/IUsbManager;->hasDefaults(Ljava/lang/String;I)Z
+HSPLandroid/hardware/usb/IUsbManager;->hasDevicePermission(Landroid/hardware/usb/UsbDevice;)Z
+HSPLandroid/hardware/usb/IUsbManager;->isFunctionEnabled(Ljava/lang/String;)Z
+HSPLandroid/hardware/usb/IUsbManager;->openAccessory(Landroid/hardware/usb/UsbAccessory;)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/hardware/usb/IUsbManager;->openDevice(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/hardware/usb/IUsbManager;->requestAccessoryPermission(Landroid/hardware/usb/UsbAccessory;Ljava/lang/String;Landroid/app/PendingIntent;)V
+HSPLandroid/hardware/usb/IUsbManager;->requestDevicePermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;Landroid/app/PendingIntent;)V
+HSPLandroid/hardware/usb/IUsbManager;->setAccessoryPackage(Landroid/hardware/usb/UsbAccessory;Ljava/lang/String;I)V
+HSPLandroid/hardware/usb/IUsbManager;->setCurrentFunction(Ljava/lang/String;Z)V
+HSPLandroid/hardware/usb/IUsbManager;->setDevicePackage(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;I)V
+HSPLandroid/hardware/usb/IUsbManager;->setPortRoles(Ljava/lang/String;II)V
+HSPLandroid/hardware/usb/IUsbManager;->setUsbDeviceConnectionHandler(Landroid/content/ComponentName;)V
+HSPLandroid/hardware/usb/UsbManager;-><init>(Landroid/content/Context;Landroid/hardware/usb/IUsbManager;)V
+HSPLandroid/hardware/usb/UsbManager;->getDeviceList()Ljava/util/HashMap;
+HSPLandroid/hidl/base/V1_0/IBase;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hidl/base/V1_0/IBase;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HSPLandroid/hidl/base/V1_0/IBase;->getHashChain()Ljava/util/ArrayList;
+HSPLandroid/hidl/base/V1_0/IBase;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hidl/base/V1_0/IBase;->interfaceDescriptor()Ljava/lang/String;
+HSPLandroid/hidl/base/V1_0/IBase;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HSPLandroid/hidl/base/V1_0/IBase;->notifySyspropsChanged()V
+HSPLandroid/hidl/base/V1_0/IBase;->ping()V
+HSPLandroid/hidl/base/V1_0/IBase;->setHALInstrumentation()V
+HSPLandroid/hidl/base/V1_0/IBase;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HSPLandroid/hidl/manager/V1_0/IServiceManager$Proxy;-><init>(Landroid/os/IHwBinder;)V
+HSPLandroid/hidl/manager/V1_0/IServiceManager$Proxy;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hidl/manager/V1_0/IServiceManager$Proxy;->registerForNotifications(Ljava/lang/String;Ljava/lang/String;Landroid/hidl/manager/V1_0/IServiceNotification;)Z
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->add(Ljava/lang/String;Landroid/hidl/base/V1_0/IBase;)Z
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->asInterface(Landroid/os/IHwBinder;)Landroid/hidl/manager/V1_0/IServiceManager;
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->debugDump()Ljava/util/ArrayList;
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->get(Ljava/lang/String;Ljava/lang/String;)Landroid/hidl/base/V1_0/IBase;
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->getHashChain()Ljava/util/ArrayList;
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->getService()Landroid/hidl/manager/V1_0/IServiceManager;
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->getTransport(Ljava/lang/String;Ljava/lang/String;)B
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->interfaceDescriptor()Ljava/lang/String;
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->list()Ljava/util/ArrayList;
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->listByInterface(Ljava/lang/String;)Ljava/util/ArrayList;
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->notifySyspropsChanged()V
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->ping()V
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->registerForNotifications(Ljava/lang/String;Ljava/lang/String;Landroid/hidl/manager/V1_0/IServiceNotification;)Z
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->registerPassthroughClient(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->setHALInstrumentation()V
+HSPLandroid/hidl/manager/V1_0/IServiceManager;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HSPLandroid/hidl/manager/V1_0/IServiceNotification$Stub;-><init>()V
+HSPLandroid/hidl/manager/V1_0/IServiceNotification$Stub;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hidl/manager/V1_0/IServiceNotification$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
+HSPLandroid/hidl/manager/V1_0/IServiceNotification;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/hidl/manager/V1_0/IServiceNotification;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HSPLandroid/hidl/manager/V1_0/IServiceNotification;->getHashChain()Ljava/util/ArrayList;
+HSPLandroid/hidl/manager/V1_0/IServiceNotification;->interfaceChain()Ljava/util/ArrayList;
+HSPLandroid/hidl/manager/V1_0/IServiceNotification;->interfaceDescriptor()Ljava/lang/String;
+HSPLandroid/hidl/manager/V1_0/IServiceNotification;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HSPLandroid/hidl/manager/V1_0/IServiceNotification;->notifySyspropsChanged()V
+HSPLandroid/hidl/manager/V1_0/IServiceNotification;->onRegistration(Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLandroid/hidl/manager/V1_0/IServiceNotification;->ping()V
+HSPLandroid/hidl/manager/V1_0/IServiceNotification;->setHALInstrumentation()V
+HSPLandroid/hidl/manager/V1_0/IServiceNotification;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+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/CacheBase;-><init>()V
+HSPLandroid/icu/impl/CacheBase;->getInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+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;->get()Ljava/lang/Object;
+HSPLandroid/icu/impl/CacheValue;->getInstance(Ljava/lang/Object;)Landroid/icu/impl/CacheValue;
+HSPLandroid/icu/impl/CacheValue;->isNull()Z
+HSPLandroid/icu/impl/CacheValue;->resetIfCleared(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/CalendarUtil$CalendarPreferences;->-get0()Landroid/icu/impl/CalendarUtil$CalendarPreferences;
+HSPLandroid/icu/impl/CalendarUtil$CalendarPreferences;-><init>()V
+HSPLandroid/icu/impl/CalendarUtil$CalendarPreferences;->getCalendarTypeForRegion(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/CalendarUtil$CalendarPreferences;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HSPLandroid/icu/impl/CalendarUtil;->getCalendarType(Landroid/icu/util/ULocale;)Ljava/lang/String;
+HSPLandroid/icu/impl/CaseMapImpl$StringContextIterator;-><init>(Ljava/lang/CharSequence;)V
+HSPLandroid/icu/impl/CaseMapImpl$StringContextIterator;->getCPLength()I
+HSPLandroid/icu/impl/CaseMapImpl$StringContextIterator;->nextCaseMapCP()I
+HSPLandroid/icu/impl/CaseMapImpl;->appendCodePoint(Ljava/lang/Appendable;I)I
+HSPLandroid/icu/impl/CaseMapImpl;->appendResult(ILjava/lang/Appendable;IILandroid/icu/text/Edits;)V
+HSPLandroid/icu/impl/CaseMapImpl;->toUpper(IILjava/lang/CharSequence;Ljava/lang/Appendable;Landroid/icu/text/Edits;)Ljava/lang/Appendable;
+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/ClassLoaderUtil;->getClassLoader(Ljava/lang/Class;)Ljava/lang/ClassLoader;
+HSPLandroid/icu/impl/CurrencyData$CurrencyDisplayInfo;-><init>()V
+HSPLandroid/icu/impl/CurrencyData$CurrencyDisplayInfo;->getFormatInfo(Ljava/lang/String;)Landroid/icu/impl/CurrencyData$CurrencyFormatInfo;
+HSPLandroid/icu/impl/CurrencyData$CurrencyDisplayInfo;->getSpacingInfo()Landroid/icu/impl/CurrencyData$CurrencySpacingInfo;
+HSPLandroid/icu/impl/CurrencyData$CurrencyDisplayInfo;->getUnitPatterns()Ljava/util/Map;
+HSPLandroid/icu/impl/CurrencyData$CurrencyDisplayInfoProvider;->getInstance(Landroid/icu/util/ULocale;Z)Landroid/icu/impl/CurrencyData$CurrencyDisplayInfo;
+HSPLandroid/icu/impl/CurrencyData$CurrencyDisplayInfoProvider;->hasData()Z
+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/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$DataFile;->addBaseNamesInFolder(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V
+HSPLandroid/icu/impl/ICUBinary$DataFile;->getData(Ljava/lang/String;)Ljava/nio/ByteBuffer;
+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;->getData(Ljava/lang/String;)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;->getLongs(Ljava/nio/ByteBuffer;II)[J
+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/ICUCache;->clear()V
+HSPLandroid/icu/impl/ICUCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUCache;->put(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroid/icu/impl/ICUConfig;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$SpacingInfoSink;-><init>(Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;)V
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$SpacingInfoSink;-><init>(Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$SpacingInfoSink;)V
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$SpacingInfoSink;->getSpacingInfo(Z)Landroid/icu/impl/CurrencyData$CurrencySpacingInfo;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$SpacingInfoSink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;-><init>(Landroid/icu/impl/ICUResourceBundle;Z)V
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->getFormatInfo(Ljava/lang/String;)Landroid/icu/impl/CurrencyData$CurrencyFormatInfo;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->getName(Ljava/lang/String;Z)Ljava/lang/String;
+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/ICUCurrencyMetaInfo$Collector;->collect(Ljava/lang/String;Ljava/lang/String;JJIZ)V
+HSPLandroid/icu/impl/ICUCurrencyMetaInfo$Collector;->collects()I
+HSPLandroid/icu/impl/ICUCurrencyMetaInfo$Collector;->getList()Ljava/util/List;
+HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->currencyDigits(Ljava/lang/String;Landroid/icu/util/Currency$CurrencyUsage;)Landroid/icu/text/CurrencyMetaInfo$CurrencyDigits;
+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>()V
+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$LocaleKey;->prefix()Ljava/lang/String;
+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/ICULocaleService;->validateFallbackLocale()Ljava/lang/String;
+HSPLandroid/icu/impl/ICUNotifier;-><init>()V
+HSPLandroid/icu/impl/ICUNotifier;->acceptsListener(Ljava/util/EventListener;)Z
+HSPLandroid/icu/impl/ICUNotifier;->notifyChanged()V
+HSPLandroid/icu/impl/ICUNotifier;->notifyListener(Ljava/util/EventListener;)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;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundle$2;->createInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/impl/ICUResourceBundle$AvailEntry;
+HSPLandroid/icu/impl/ICUResourceBundle$3$1;-><init>(Landroid/icu/impl/ICUResourceBundle$3;Ljava/util/Set;)V
+HSPLandroid/icu/impl/ICUResourceBundle$3;-><init>(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/util/Set;)V
+HSPLandroid/icu/impl/ICUResourceBundle$3;->run()Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundle$3;->run()Ljava/lang/Void;
+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$Loader;)V
+HSPLandroid/icu/impl/ICUResourceBundle$Loader;->load()Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle$WholeBundle;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundleReader;)V
+HSPLandroid/icu/impl/ICUResourceBundle;->-get0()Z
+HSPLandroid/icu/impl/ICUResourceBundle;->-wrap0(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;->-wrap2(Landroid/icu/impl/ICUResourceBundle;)Z
+HSPLandroid/icu/impl/ICUResourceBundle;->-wrap4(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/util/Set;
+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;->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;->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;->getStringArrayOrStringAsArray()[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;->-wrap0(I)Z
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;-><init>(I)V
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->findSimple(I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->get(I)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->makeKey(I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->putIfAbsent(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;->-get0()Landroid/icu/impl/ICUResourceBundleReader;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-get1()[I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-get2(Landroid/icu/impl/ICUResourceBundleReader;)Ljava/nio/CharBuffer;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-get3(Landroid/icu/impl/ICUResourceBundleReader;)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-get4(Landroid/icu/impl/ICUResourceBundleReader;)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-wrap1(Landroid/icu/impl/ICUResourceBundleReader;I)[C
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-wrap11(Landroid/icu/impl/ICUResourceBundleReader;ILandroid/icu/impl/UResource$Key;)V
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-wrap2(Landroid/icu/impl/ICUResourceBundleReader;I)[C
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-wrap3(I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-wrap6(Landroid/icu/impl/ICUResourceBundleReader;Ljava/lang/CharSequence;C)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-wrap7(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-wrap8(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-wrap9(Landroid/icu/impl/ICUResourceBundleReader;I)Ljava/lang/String;
+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;)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;->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$Factory;->create(Landroid/icu/impl/ICUService$Key;Landroid/icu/impl/ICUService;)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUService$Factory;->getDisplayName(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUService$Factory;->updateVisibleIDs(Ljava/util/Map;)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;->clearServiceCache()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;->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/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;->getBaseName()Ljava/lang/String;
+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$ComposeNormalizer2;->spanQuickCheckYes(Ljava/lang/CharSequence;)I
+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;->-get0()Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;
+HSPLandroid/icu/impl/Norm2AllModes$NFKCSingleton;->-get0()Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;
+HSPLandroid/icu/impl/Norm2AllModes$NoopNormalizer2;-><init>()V
+HSPLandroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;->-get0(Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;)Landroid/icu/impl/Norm2AllModes;
+HSPLandroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;->-get1(Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;)Ljava/lang/RuntimeException;
+HSPLandroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;-><init>(Ljava/lang/String;Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;)V
+HSPLandroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;-><init>(Landroid/icu/impl/Normalizer2Impl;)V
+HSPLandroid/icu/impl/Norm2AllModes;-><init>(Landroid/icu/impl/Normalizer2Impl;)V
+HSPLandroid/icu/impl/Norm2AllModes;-><init>(Landroid/icu/impl/Normalizer2Impl;Landroid/icu/impl/Norm2AllModes;)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$IsAcceptable;)V
+HSPLandroid/icu/impl/Normalizer2Impl$IsAcceptable;->isDataVersionAcceptable([B)Z
+HSPLandroid/icu/impl/Normalizer2Impl;-><init>()V
+HSPLandroid/icu/impl/Normalizer2Impl;->addLcccChars(Landroid/icu/text/UnicodeSet;)V
+HSPLandroid/icu/impl/Normalizer2Impl;->composeQuickCheck(Ljava/lang/CharSequence;IIZZ)I
+HSPLandroid/icu/impl/Normalizer2Impl;->decompose(Ljava/lang/CharSequence;IILandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)I
+HSPLandroid/icu/impl/Normalizer2Impl;->enumLcccRange(IIILandroid/icu/text/UnicodeSet;)V
+HSPLandroid/icu/impl/Normalizer2Impl;->getFCD16(I)I
+HSPLandroid/icu/impl/Normalizer2Impl;->getFCD16FromNormData(I)I
+HSPLandroid/icu/impl/Normalizer2Impl;->getNorm16(I)I
+HSPLandroid/icu/impl/Normalizer2Impl;->isAlgorithmicNoNo(I)Z
+HSPLandroid/icu/impl/Normalizer2Impl;->isDecompNoAlgorithmic(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/Normalizer2Impl;->singleLeadMightHaveNonZeroFCD16(I)Z
+HSPLandroid/icu/impl/OlsonTimeZone;-><init>(Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;Ljava/lang/String;)V
+HSPLandroid/icu/impl/OlsonTimeZone;->cloneAsThawed()Landroid/icu/util/TimeZone;
+HSPLandroid/icu/impl/OlsonTimeZone;->construct(Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;)V
+HSPLandroid/icu/impl/OlsonTimeZone;->freeze()Landroid/icu/util/TimeZone;
+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;->loadRule(Landroid/icu/util/UResourceBundle;Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
+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;-><init>()V
+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/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;->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;-><init>(Ljava/lang/String;ILjava/lang/String;)V
+HSPLandroid/icu/impl/StandardPlural;->fromString(Ljava/lang/CharSequence;)Landroid/icu/impl/StandardPlural;
+HSPLandroid/icu/impl/StandardPlural;->indexFromString(Ljava/lang/CharSequence;)I
+HSPLandroid/icu/impl/StandardPlural;->orNullFromString(Ljava/lang/CharSequence;)Landroid/icu/impl/StandardPlural;
+HSPLandroid/icu/impl/StandardPlural;->orOtherFromString(Ljava/lang/CharSequence;)Landroid/icu/impl/StandardPlural;
+HSPLandroid/icu/impl/StandardPlural;->values()[Landroid/icu/impl/StandardPlural;
+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/Trie$DataManipulate;->getFoldingOffset(I)I
+HSPLandroid/icu/impl/Trie$DefaultGetFoldingOffset;-><init>()V
+HSPLandroid/icu/impl/Trie$DefaultGetFoldingOffset;-><init>(Landroid/icu/impl/Trie$DefaultGetFoldingOffset;)V
+HSPLandroid/icu/impl/Trie2$1;-><init>()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$ValueMapper;->map(I)I
+HSPLandroid/icu/impl/Trie2$ValueWidth;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/impl/Trie2$ValueWidth;->values()[Landroid/icu/impl/Trie2$ValueWidth;
+HSPLandroid/icu/impl/Trie2;->-getandroid-icu-impl-Trie2$ValueWidthSwitchesValues()[I
+HSPLandroid/icu/impl/Trie2;-><init>()V
+HSPLandroid/icu/impl/Trie2;->createFromSerialized(Ljava/nio/ByteBuffer;)Landroid/icu/impl/Trie2;
+HSPLandroid/icu/impl/Trie2;->get(I)I
+HSPLandroid/icu/impl/Trie2;->getFromU16SingleLead(C)I
+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;-><init>()V
+HSPLandroid/icu/impl/Trie2_32;->createFromSerialized(Ljava/nio/ByteBuffer;)Landroid/icu/impl/Trie2_32;
+HSPLandroid/icu/impl/Trie2_32;->get(I)I
+HSPLandroid/icu/impl/Trie2_32;->getFromU16SingleLead(C)I
+HSPLandroid/icu/impl/Trie2_32;->getSerializedLength()I
+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;->getInitialValue()I
+HSPLandroid/icu/impl/Trie;->getSurrogateOffset(CC)I
+HSPLandroid/icu/impl/Trie;->getValue(I)I
+HSPLandroid/icu/impl/Trie;->isCharTrie()Z
+HSPLandroid/icu/impl/UBiDiProps$IsAcceptable;-><init>()V
+HSPLandroid/icu/impl/UBiDiProps$IsAcceptable;-><init>(Landroid/icu/impl/UBiDiProps$IsAcceptable;)V
+HSPLandroid/icu/impl/UBiDiProps$IsAcceptable;->isDataVersionAcceptable([B)Z
+HSPLandroid/icu/impl/UBiDiProps;-><init>()V
+HSPLandroid/icu/impl/UBiDiProps;->readData(Ljava/nio/ByteBuffer;)V
+HSPLandroid/icu/impl/UCaseProps$ContextIterator;->next()I
+HSPLandroid/icu/impl/UCaseProps$ContextIterator;->reset(I)V
+HSPLandroid/icu/impl/UCaseProps$IsAcceptable;-><init>()V
+HSPLandroid/icu/impl/UCaseProps$IsAcceptable;-><init>(Landroid/icu/impl/UCaseProps$IsAcceptable;)V
+HSPLandroid/icu/impl/UCaseProps$IsAcceptable;->isDataVersionAcceptable([B)Z
+HSPLandroid/icu/impl/UCaseProps;-><init>()V
+HSPLandroid/icu/impl/UCaseProps;->getCaseLocale(Ljava/lang/String;)I
+HSPLandroid/icu/impl/UCaseProps;->getCaseLocale(Ljava/util/Locale;)I
+HSPLandroid/icu/impl/UCaseProps;->getDelta(I)I
+HSPLandroid/icu/impl/UCaseProps;->getExceptionsOffset(I)I
+HSPLandroid/icu/impl/UCaseProps;->getSlotValue(III)I
+HSPLandroid/icu/impl/UCaseProps;->getTypeFromProps(I)I
+HSPLandroid/icu/impl/UCaseProps;->hasSlot(II)Z
+HSPLandroid/icu/impl/UCaseProps;->propsHasException(I)Z
+HSPLandroid/icu/impl/UCaseProps;->readData(Ljava/nio/ByteBuffer;)V
+HSPLandroid/icu/impl/UCaseProps;->slotOffset(II)B
+HSPLandroid/icu/impl/UCaseProps;->toFullUpper(ILandroid/icu/impl/UCaseProps$ContextIterator;Ljava/lang/Appendable;I)I
+HSPLandroid/icu/impl/UCaseProps;->toUpperOrTitle(ILandroid/icu/impl/UCaseProps$ContextIterator;Ljava/lang/Appendable;IZ)I
+HSPLandroid/icu/impl/UCharacterProperty$10;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$11;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$12;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$13;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;)V
+HSPLandroid/icu/impl/UCharacterProperty$14;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$15;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$16;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;)V
+HSPLandroid/icu/impl/UCharacterProperty$17;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;)V
+HSPLandroid/icu/impl/UCharacterProperty$18;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$19;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;III)V
+HSPLandroid/icu/impl/UCharacterProperty$19;->getValue(I)I
+HSPLandroid/icu/impl/UCharacterProperty$1;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$20;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$21;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$22;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$23;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;)V
+HSPLandroid/icu/impl/UCharacterProperty$2;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$3;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$4;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$5;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$6;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$7;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$8;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$9;-><init>(Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$BiDiIntProperty;-><init>(Landroid/icu/impl/UCharacterProperty;)V
+HSPLandroid/icu/impl/UCharacterProperty$BinaryProperty;-><init>(Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$BinaryProperty;-><init>(Landroid/icu/impl/UCharacterProperty;II)V
+HSPLandroid/icu/impl/UCharacterProperty$CaseBinaryProperty;-><init>(Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$CombiningClassIntProperty;-><init>(Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$IntProperty;-><init>(Landroid/icu/impl/UCharacterProperty;I)V
+HSPLandroid/icu/impl/UCharacterProperty$IntProperty;-><init>(Landroid/icu/impl/UCharacterProperty;III)V
+HSPLandroid/icu/impl/UCharacterProperty$IntProperty;->getSource()I
+HSPLandroid/icu/impl/UCharacterProperty$IsAcceptable;-><init>()V
+HSPLandroid/icu/impl/UCharacterProperty$IsAcceptable;-><init>(Landroid/icu/impl/UCharacterProperty$IsAcceptable;)V
+HSPLandroid/icu/impl/UCharacterProperty$IsAcceptable;->isDataVersionAcceptable([B)Z
+HSPLandroid/icu/impl/UCharacterProperty$NormInertBinaryProperty;-><init>(Landroid/icu/impl/UCharacterProperty;II)V
+HSPLandroid/icu/impl/UCharacterProperty$NormQuickCheckIntProperty;-><init>(Landroid/icu/impl/UCharacterProperty;III)V
+HSPLandroid/icu/impl/UCharacterProperty;-><init>()V
+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;->getEuropeanDigit(I)I
+HSPLandroid/icu/impl/UCharacterProperty;->getIntPropertyValue(II)I
+HSPLandroid/icu/impl/UCharacterProperty;->getMask(I)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;->upropsvec_addPropertyStarts(Landroid/icu/text/UnicodeSet;)V
+HSPLandroid/icu/impl/UPropertyAliases$IsAcceptable;-><init>()V
+HSPLandroid/icu/impl/UPropertyAliases$IsAcceptable;-><init>(Landroid/icu/impl/UPropertyAliases$IsAcceptable;)V
+HSPLandroid/icu/impl/UPropertyAliases$IsAcceptable;->isDataVersionAcceptable([B)Z
+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;->load(Ljava/nio/ByteBuffer;)V
+HSPLandroid/icu/impl/URLHandler$URLVisitor;->visit(Ljava/lang/String;)V
+HSPLandroid/icu/impl/UResource$Array;->getSize()I
+HSPLandroid/icu/impl/UResource$Array;->getValue(ILandroid/icu/impl/UResource$Value;)Z
+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;)Z
+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;->setToEmpty()Landroid/icu/impl/UResource$Key;
+HSPLandroid/icu/impl/UResource$Key;->startsWith(Ljava/lang/CharSequence;)Z
+HSPLandroid/icu/impl/UResource$Key;->toString()Ljava/lang/String;
+HSPLandroid/icu/impl/UResource$Sink;-><init>()V
+HSPLandroid/icu/impl/UResource$Table;->getKeyAndValue(ILandroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)Z
+HSPLandroid/icu/impl/UResource$Table;->getSize()I
+HSPLandroid/icu/impl/UResource$Value;-><init>()V
+HSPLandroid/icu/impl/UResource$Value;->getAliasString()Ljava/lang/String;
+HSPLandroid/icu/impl/UResource$Value;->getArray()Landroid/icu/impl/UResource$Array;
+HSPLandroid/icu/impl/UResource$Value;->getBinary()Ljava/nio/ByteBuffer;
+HSPLandroid/icu/impl/UResource$Value;->getInt()I
+HSPLandroid/icu/impl/UResource$Value;->getIntVector()[I
+HSPLandroid/icu/impl/UResource$Value;->getString()Ljava/lang/String;
+HSPLandroid/icu/impl/UResource$Value;->getStringArray()[Ljava/lang/String;
+HSPLandroid/icu/impl/UResource$Value;->getStringArrayOrStringAsArray()[Ljava/lang/String;
+HSPLandroid/icu/impl/UResource$Value;->getStringOrFirstOfArray()Ljava/lang/String;
+HSPLandroid/icu/impl/UResource$Value;->getTable()Landroid/icu/impl/UResource$Table;
+HSPLandroid/icu/impl/UResource$Value;->getType()I
+HSPLandroid/icu/impl/UResource$Value;->getUInt()I
+HSPLandroid/icu/impl/UResource$Value;->isNoInheritanceMarker()Z
+HSPLandroid/icu/impl/UResource$Value;->toString()Ljava/lang/String;
+HSPLandroid/icu/impl/USerializedSet;-><init>()V
+HSPLandroid/icu/impl/USerializedSet;->countRanges()I
+HSPLandroid/icu/impl/USerializedSet;->getRange(I[I)Z
+HSPLandroid/icu/impl/USerializedSet;->getSet([CI)Z
+HSPLandroid/icu/impl/Utility;->sameObjects(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroid/icu/impl/ZoneMeta$CustomTimeZoneCache;-><init>()V
+HSPLandroid/icu/impl/ZoneMeta$CustomTimeZoneCache;-><init>(Landroid/icu/impl/ZoneMeta$CustomTimeZoneCache;)V
+HSPLandroid/icu/impl/ZoneMeta$SystemTimeZoneCache;-><init>()V
+HSPLandroid/icu/impl/ZoneMeta$SystemTimeZoneCache;-><init>(Landroid/icu/impl/ZoneMeta$SystemTimeZoneCache;)V
+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;->-getandroid-icu-util-TimeZone$SystemTimeZoneTypeSwitchesValues()[I
+HSPLandroid/icu/impl/ZoneMeta;->findCLDRCanonicalID(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/ZoneMeta;->getAvailableIDs(Landroid/icu/util/TimeZone$SystemTimeZoneType;Ljava/lang/String;Ljava/lang/Integer;)Ljava/util/Set;
+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;->getSystemZIDs()Ljava/util/Set;
+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;->ceFromLongPrimaryCE32(I)J
+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/CollationCompare;->compareUpToQuaternary(Landroid/icu/impl/coll/CollationIterator;Landroid/icu/impl/coll/CollationIterator;Landroid/icu/impl/coll/CollationSettings;)I
+HSPLandroid/icu/impl/coll/CollationData;-><init>(Landroid/icu/impl/Normalizer2Impl;)V
+HSPLandroid/icu/impl/coll/CollationData;->getCE32(I)I
+HSPLandroid/icu/impl/coll/CollationData;->getCE32FromContexts(I)I
+HSPLandroid/icu/impl/coll/CollationData;->getLastPrimaryForGroup(I)J
+HSPLandroid/icu/impl/coll/CollationData;->getScriptIndex(I)I
+HSPLandroid/icu/impl/coll/CollationData;->isUnsafeBackward(IZ)Z
+HSPLandroid/icu/impl/coll/CollationDataReader$IsAcceptable;-><init>()V
+HSPLandroid/icu/impl/coll/CollationDataReader$IsAcceptable;-><init>(Landroid/icu/impl/coll/CollationDataReader$IsAcceptable;)V
+HSPLandroid/icu/impl/coll/CollationDataReader$IsAcceptable;->isDataVersionAcceptable([B)Z
+HSPLandroid/icu/impl/coll/CollationDataReader;->read(Landroid/icu/impl/coll/CollationTailoring;Ljava/nio/ByteBuffer;Landroid/icu/impl/coll/CollationTailoring;)V
+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;->get(I)J
+HSPLandroid/icu/impl/coll/CollationIterator$CEBuffer;->getCEs()[J
+HSPLandroid/icu/impl/coll/CollationIterator$CEBuffer;->incLength()V
+HSPLandroid/icu/impl/coll/CollationIterator$CEBuffer;->set(IJ)J
+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;->fetchCEs()I
+HSPLandroid/icu/impl/coll/CollationIterator;->getCEs()[J
+HSPLandroid/icu/impl/coll/CollationIterator;->makeCodePointAndCE32Pair(II)J
+HSPLandroid/icu/impl/coll/CollationIterator;->nextCE()J
+HSPLandroid/icu/impl/coll/CollationIterator;->nextCE32FromContraction(Landroid/icu/impl/coll/CollationData;ILjava/lang/CharSequence;III)I
+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;-><init>()V
+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;->getAlternateHandling()Z
+HSPLandroid/icu/impl/coll/CollationSettings;->getMaxVariable()I
+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;->setStrength(I)V
+HSPLandroid/icu/impl/coll/CollationTailoring;-><init>(Landroid/icu/impl/coll/SharedObject$Reference;)V
+HSPLandroid/icu/impl/coll/CollationTailoring;->ensureOwnedData()V
+HSPLandroid/icu/impl/coll/ContractionsAndExpansions;-><init>(Landroid/icu/text/UnicodeSet;Landroid/icu/text/UnicodeSet;Landroid/icu/impl/coll/ContractionsAndExpansions$CESink;Z)V
+HSPLandroid/icu/impl/coll/ContractionsAndExpansions;->addStrings(IILandroid/icu/text/UnicodeSet;)V
+HSPLandroid/icu/impl/coll/ContractionsAndExpansions;->forCodePoint(Landroid/icu/impl/coll/CollationData;I)V
+HSPLandroid/icu/impl/coll/ContractionsAndExpansions;->handleCE32(III)V
+HSPLandroid/icu/impl/coll/ContractionsAndExpansions;->handleContractions(III)V
+HSPLandroid/icu/impl/coll/FCDUTF16CollationIterator;-><init>(Landroid/icu/impl/coll/CollationData;)V
+HSPLandroid/icu/impl/coll/SharedObject$Reference;-><init>(Landroid/icu/impl/coll/SharedObject;)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;-><init>()V
+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;-><init>(Landroid/icu/impl/coll/CollationData;)V
+HSPLandroid/icu/impl/coll/UTF16CollationIterator;->handleNextCE32()J
+HSPLandroid/icu/impl/coll/UTF16CollationIterator;->nextCodePoint()I
+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;->-get0(Landroid/icu/impl/locale/BaseLocale$Key;)Ljava/lang/String;
+HSPLandroid/icu/impl/locale/BaseLocale$Key;->-get1(Landroid/icu/impl/locale/BaseLocale$Key;)Ljava/lang/String;
+HSPLandroid/icu/impl/locale/BaseLocale$Key;->-get2(Landroid/icu/impl/locale/BaseLocale$Key;)Ljava/lang/String;
+HSPLandroid/icu/impl/locale/BaseLocale$Key;->-get3(Landroid/icu/impl/locale/BaseLocale$Key;)Ljava/lang/String;
+HSPLandroid/icu/impl/locale/BaseLocale$Key;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/icu/impl/locale/BaseLocale$Key;->equals(Ljava/lang/Object;)Z
+HSPLandroid/icu/impl/locale/BaseLocale$Key;->hashCode()I
+HSPLandroid/icu/impl/locale/BaseLocale$Key;->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;)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;->createObject(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/locale/LocaleObjectCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/lang/UCharacter;->digit(I)I
+HSPLandroid/icu/lang/UCharacter;->digit(II)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;->getType(I)I
+HSPLandroid/icu/lang/UCharacter;->getUnicodeVersion()Landroid/icu/util/VersionInfo;
+HSPLandroid/icu/lang/UCharacter;->isLowerCase(I)Z
+HSPLandroid/icu/lang/UScript$ScriptUsage;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/lang/UScript$ScriptUsage;->values()[Landroid/icu/lang/UScript$ScriptUsage;
+HSPLandroid/icu/lang/UScript;->getScript(I)I
+HSPLandroid/icu/math/BigDecimal;-><init>(I)V
+HSPLandroid/icu/math/BigDecimal;-><init>(J)V
+HSPLandroid/icu/math/BigDecimal;->diginit()[B
+HSPLandroid/icu/math/BigDecimal;->doubleValue()D
+HSPLandroid/icu/math/BigDecimal;->layout()[C
+HSPLandroid/icu/math/BigDecimal;->scale()I
+HSPLandroid/icu/math/BigDecimal;->toBigDecimal()Ljava/math/BigDecimal;
+HSPLandroid/icu/math/BigDecimal;->toBigInteger()Ljava/math/BigInteger;
+HSPLandroid/icu/math/BigDecimal;->toString()Ljava/lang/String;
+HSPLandroid/icu/math/BigDecimal;->unscaledValue()Ljava/math/BigInteger;
+HSPLandroid/icu/math/MathContext;-><init>(II)V
+HSPLandroid/icu/math/MathContext;-><init>(IIZI)V
+HSPLandroid/icu/math/MathContext;->isValidRound(I)Z
+HSPLandroid/icu/text/AlphabeticIndex$1;-><init>(Landroid/icu/text/AlphabeticIndex;)V
+HSPLandroid/icu/text/AlphabeticIndex$Bucket$LabelType;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/text/AlphabeticIndex$Bucket;->-set1(Landroid/icu/text/AlphabeticIndex$Bucket;I)I
+HSPLandroid/icu/text/AlphabeticIndex$Bucket;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/icu/text/AlphabeticIndex$Bucket$LabelType;)V
+HSPLandroid/icu/text/AlphabeticIndex$Bucket;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/icu/text/AlphabeticIndex$Bucket$LabelType;Landroid/icu/text/AlphabeticIndex$Bucket;)V
+HSPLandroid/icu/text/AlphabeticIndex$BucketList;-><init>(Ljava/util/ArrayList;Ljava/util/ArrayList;)V
+HSPLandroid/icu/text/AlphabeticIndex$BucketList;-><init>(Ljava/util/ArrayList;Ljava/util/ArrayList;Landroid/icu/text/AlphabeticIndex$BucketList;)V
+HSPLandroid/icu/text/AlphabeticIndex$ImmutableIndex;-><init>(Landroid/icu/text/AlphabeticIndex$BucketList;Landroid/icu/text/Collator;)V
+HSPLandroid/icu/text/AlphabeticIndex$ImmutableIndex;-><init>(Landroid/icu/text/AlphabeticIndex$BucketList;Landroid/icu/text/Collator;Landroid/icu/text/AlphabeticIndex$ImmutableIndex;)V
+HSPLandroid/icu/text/AlphabeticIndex;-><init>(Landroid/icu/util/ULocale;Landroid/icu/text/RuleBasedCollator;)V
+HSPLandroid/icu/text/AlphabeticIndex;-><init>(Ljava/util/Locale;)V
+HSPLandroid/icu/text/AlphabeticIndex;->addChineseIndexCharacters()Z
+HSPLandroid/icu/text/AlphabeticIndex;->addIndexExemplars(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/AlphabeticIndex;->addLabels([Ljava/util/Locale;)Landroid/icu/text/AlphabeticIndex;
+HSPLandroid/icu/text/AlphabeticIndex;->buildImmutableIndex()Landroid/icu/text/AlphabeticIndex$ImmutableIndex;
+HSPLandroid/icu/text/AlphabeticIndex;->createBucketList()Landroid/icu/text/AlphabeticIndex$BucketList;
+HSPLandroid/icu/text/AlphabeticIndex;->fixLabel(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/text/AlphabeticIndex;->getFirstCharactersInScripts()Ljava/util/List;
+HSPLandroid/icu/text/AlphabeticIndex;->getOverflowLabel()Ljava/lang/String;
+HSPLandroid/icu/text/AlphabeticIndex;->getUnderflowLabel()Ljava/lang/String;
+HSPLandroid/icu/text/AlphabeticIndex;->hasMultiplePrimaryWeights(Landroid/icu/text/RuleBasedCollator;JLjava/lang/String;)Z
+HSPLandroid/icu/text/AlphabeticIndex;->initLabels()Ljava/util/List;
+HSPLandroid/icu/text/BreakIterator$BreakIteratorCache;-><init>(Landroid/icu/util/ULocale;Landroid/icu/text/BreakIterator;)V
+HSPLandroid/icu/text/BreakIterator$BreakIteratorServiceShim;-><init>()V
+HSPLandroid/icu/text/BreakIterator$BreakIteratorServiceShim;->createBreakIterator(Landroid/icu/util/ULocale;I)Landroid/icu/text/BreakIterator;
+HSPLandroid/icu/text/BreakIterator$BreakIteratorServiceShim;->getAvailableLocales()[Ljava/util/Locale;
+HSPLandroid/icu/text/BreakIterator$BreakIteratorServiceShim;->getAvailableULocales()[Landroid/icu/util/ULocale;
+HSPLandroid/icu/text/BreakIterator$BreakIteratorServiceShim;->registerInstance(Landroid/icu/text/BreakIterator;Landroid/icu/util/ULocale;I)Ljava/lang/Object;
+HSPLandroid/icu/text/BreakIterator$BreakIteratorServiceShim;->unregister(Ljava/lang/Object;)Z
+HSPLandroid/icu/text/BreakIterator;-><init>()V
+HSPLandroid/icu/text/BreakIterator;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/BreakIterator;->current()I
+HSPLandroid/icu/text/BreakIterator;->first()I
+HSPLandroid/icu/text/BreakIterator;->following(I)I
+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;->getText()Ljava/text/CharacterIterator;
+HSPLandroid/icu/text/BreakIterator;->getWordInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;
+HSPLandroid/icu/text/BreakIterator;->last()I
+HSPLandroid/icu/text/BreakIterator;->next()I
+HSPLandroid/icu/text/BreakIterator;->next(I)I
+HSPLandroid/icu/text/BreakIterator;->previous()I
+HSPLandroid/icu/text/BreakIterator;->setLocale(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/BreakIterator;->setText(Ljava/text/CharacterIterator;)V
+HSPLandroid/icu/text/BreakIteratorFactory$BFService$1RBBreakIteratorFactory;-><init>(Landroid/icu/text/BreakIteratorFactory$BFService;)V
+HSPLandroid/icu/text/BreakIteratorFactory$BFService;-><init>()V
+HSPLandroid/icu/text/BreakIteratorFactory;-><init>()V
+HSPLandroid/icu/text/BreakIteratorFactory;->createBreakInstance(Landroid/icu/util/ULocale;I)Landroid/icu/text/BreakIterator;
+HSPLandroid/icu/text/BreakIteratorFactory;->createBreakIterator(Landroid/icu/util/ULocale;I)Landroid/icu/text/BreakIterator;
+HSPLandroid/icu/text/CaseMap$Upper;->-get0()Landroid/icu/text/CaseMap$Upper;
+HSPLandroid/icu/text/CaseMap$Upper;-><init>(I)V
+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;->-wrap0(Ljava/util/Locale;)I
+HSPLandroid/icu/text/CaseMap;-><init>(I)V
+HSPLandroid/icu/text/CaseMap;-><init>(ILandroid/icu/text/CaseMap;)V
+HSPLandroid/icu/text/CaseMap;->getCaseLocale(Ljava/util/Locale;)I
+HSPLandroid/icu/text/CaseMap;->omitUnchangedText()Landroid/icu/text/CaseMap;
+HSPLandroid/icu/text/CaseMap;->toUpper()Landroid/icu/text/CaseMap$Upper;
+HSPLandroid/icu/text/Collator$ServiceShim;-><init>()V
+HSPLandroid/icu/text/Collator$ServiceShim;->getAvailableLocales()[Ljava/util/Locale;
+HSPLandroid/icu/text/Collator$ServiceShim;->getAvailableULocales()[Landroid/icu/util/ULocale;
+HSPLandroid/icu/text/Collator$ServiceShim;->getDisplayName(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)Ljava/lang/String;
+HSPLandroid/icu/text/Collator$ServiceShim;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/Collator;
+HSPLandroid/icu/text/Collator$ServiceShim;->registerFactory(Landroid/icu/text/Collator$CollatorFactory;)Ljava/lang/Object;
+HSPLandroid/icu/text/Collator$ServiceShim;->registerInstance(Landroid/icu/text/Collator;Landroid/icu/util/ULocale;)Ljava/lang/Object;
+HSPLandroid/icu/text/Collator$ServiceShim;->unregister(Ljava/lang/Object;)Z
+HSPLandroid/icu/text/Collator;-><init>()V
+HSPLandroid/icu/text/Collator;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/Collator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLandroid/icu/text/Collator;->compare(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/icu/text/Collator;->getCollationKey(Ljava/lang/String;)Landroid/icu/text/CollationKey;
+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;->getRawCollationKey(Ljava/lang/String;Landroid/icu/text/RawCollationKey;)Landroid/icu/text/RawCollationKey;
+HSPLandroid/icu/text/Collator;->getShim()Landroid/icu/text/Collator$ServiceShim;
+HSPLandroid/icu/text/Collator;->getUCAVersion()Landroid/icu/util/VersionInfo;
+HSPLandroid/icu/text/Collator;->getVariableTop()I
+HSPLandroid/icu/text/Collator;->getVersion()Landroid/icu/util/VersionInfo;
+HSPLandroid/icu/text/Collator;->setVariableTop(I)V
+HSPLandroid/icu/text/Collator;->setVariableTop(Ljava/lang/String;)I
+HSPLandroid/icu/text/CollatorServiceShim$CService$1CollatorFactory;-><init>(Landroid/icu/text/CollatorServiceShim$CService;)V
+HSPLandroid/icu/text/CollatorServiceShim$CService$1CollatorFactory;->handleCreate(Landroid/icu/util/ULocale;ILandroid/icu/impl/ICUService;)Ljava/lang/Object;
+HSPLandroid/icu/text/CollatorServiceShim$CService;-><init>()V
+HSPLandroid/icu/text/CollatorServiceShim$CService;->validateFallbackLocale()Ljava/lang/String;
+HSPLandroid/icu/text/CollatorServiceShim;->-wrap0(Landroid/icu/util/ULocale;)Landroid/icu/text/Collator;
+HSPLandroid/icu/text/CollatorServiceShim;-><init>()V
+HSPLandroid/icu/text/CollatorServiceShim;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/Collator;
+HSPLandroid/icu/text/CollatorServiceShim;->makeInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/Collator;
+HSPLandroid/icu/text/CurrencyDisplayNames;-><init>()V
+HSPLandroid/icu/text/CurrencyDisplayNames;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/CurrencyDisplayNames;
+HSPLandroid/icu/text/CurrencyDisplayNames;->getName(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/text/CurrencyDisplayNames;->getPluralName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/text/CurrencyDisplayNames;->getSymbol(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/text/CurrencyDisplayNames;->getULocale()Landroid/icu/util/ULocale;
+HSPLandroid/icu/text/CurrencyDisplayNames;->nameMap()Ljava/util/Map;
+HSPLandroid/icu/text/CurrencyDisplayNames;->symbolMap()Ljava/util/Map;
+HSPLandroid/icu/text/CurrencyMetaInfo$CurrencyDigits;-><init>(II)V
+HSPLandroid/icu/text/CurrencyMetaInfo;->getInstance()Landroid/icu/text/CurrencyMetaInfo;
+HSPLandroid/icu/text/DateFormat$BooleanAttribute;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/text/DateFormat$BooleanAttribute;->values()[Landroid/icu/text/DateFormat$BooleanAttribute;
+HSPLandroid/icu/text/DateFormat$Field;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/text/DateFormat;-><init>()V
+HSPLandroid/icu/text/DateFormat;->format(Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DateFormat;->format(Ljava/util/Date;)Ljava/lang/String;
+HSPLandroid/icu/text/DateFormat;->format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DateFormat;->get(IILandroid/icu/util/ULocale;Landroid/icu/util/Calendar;)Landroid/icu/text/DateFormat;
+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;->getInstanceForSkeleton(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
+HSPLandroid/icu/text/DateFormat;->getInstanceForSkeleton(Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateFormat;
+HSPLandroid/icu/text/DateFormat;->getPatternInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
+HSPLandroid/icu/text/DateFormat;->getTimeInstance(ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
+HSPLandroid/icu/text/DateFormat;->parse(Ljava/lang/String;Landroid/icu/util/Calendar;Ljava/text/ParsePosition;)V
+HSPLandroid/icu/text/DateFormat;->setCalendar(Landroid/icu/util/Calendar;)V
+HSPLandroid/icu/text/DateFormat;->setContext(Landroid/icu/text/DisplayContext;)V
+HSPLandroid/icu/text/DateFormatSymbols$1;-><init>()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$AliasType;-><init>(Ljava/lang/String;I)V
+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;-><init>(Ljava/lang/String;I)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;)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/DateTimePatternGenerator$AppendItemFormatsSink;-><init>(Landroid/icu/text/DateTimePatternGenerator;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$AppendItemFormatsSink;-><init>(Landroid/icu/text/DateTimePatternGenerator;Landroid/icu/text/DateTimePatternGenerator$AppendItemFormatsSink;)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$AppendItemNamesSink;)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;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/text/DateTimePatternGenerator$DTPGflags;->values()[Landroid/icu/text/DateTimePatternGenerator$DTPGflags;
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->-get0(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;)Landroid/icu/text/DateTimePatternGenerator$SkeletonFields;
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->-get1(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;)[I
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;-><init>()V
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;-><init>(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;)V
+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;->set(Ljava/lang/String;Landroid/icu/text/DateTimePatternGenerator$FormatParser;Z)Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;
+HSPLandroid/icu/text/DateTimePatternGenerator$DayPeriodAllowedHoursSink;-><init>(Ljava/util/HashMap;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$DayPeriodAllowedHoursSink;-><init>(Ljava/util/HashMap;Landroid/icu/text/DateTimePatternGenerator$DayPeriodAllowedHoursSink;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$DayPeriodAllowedHoursSink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;-><init>()V
+HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;-><init>(Landroid/icu/text/DateTimePatternGenerator$DistanceInfo;)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;->-get0(Landroid/icu/text/DateTimePatternGenerator$FormatParser;)Ljava/util/List;
+HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;-><init>()V
+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$PatternInfo;-><init>()V
+HSPLandroid/icu/text/DateTimePatternGenerator$PatternWithMatcher;-><init>(Ljava/lang/String;Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$PatternWithSkeletonFlag;-><init>(Ljava/lang/String;Z)V
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;-><init>()V
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;-><init>(Landroid/icu/text/DateTimePatternGenerator$SkeletonFields;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->appendFieldTo(ILjava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->appendTo(Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->appendTo(Ljava/lang/StringBuilder;Z)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()Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator$VariableField;->-wrap0(Landroid/icu/text/DateTimePatternGenerator$VariableField;)I
+HSPLandroid/icu/text/DateTimePatternGenerator$VariableField;-><init>(Ljava/lang/String;Z)V
+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;->-get1()[[I
+HSPLandroid/icu/text/DateTimePatternGenerator;->-wrap0(Landroid/icu/text/DateTimePatternGenerator;Ljava/lang/String;)Z
+HSPLandroid/icu/text/DateTimePatternGenerator;->-wrap2(Landroid/icu/impl/UResource$Key;)I
+HSPLandroid/icu/text/DateTimePatternGenerator;->-wrap3(Ljava/lang/String;Z)I
+HSPLandroid/icu/text/DateTimePatternGenerator;->-wrap5(Landroid/icu/text/DateTimePatternGenerator;Ljava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;-><init>()V
+HSPLandroid/icu/text/DateTimePatternGenerator;->addCLDRData(Landroid/icu/text/DateTimePatternGenerator$PatternInfo;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->addCanonicalItems()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;->freeze()Landroid/icu/text/DateTimePatternGenerator;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getAllowedHourFormats(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->getAppendFormatNumber(Landroid/icu/impl/UResource$Key;)I
+HSPLandroid/icu/text/DateTimePatternGenerator;->getAppendItemFormat(I)Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getAppendItemName(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;->getCLDRFieldNumber(Landroid/icu/impl/UResource$Key;)I
+HSPLandroid/icu/text/DateTimePatternGenerator;->getCalendarTypeToUse(Landroid/icu/util/ULocale;)Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getCanonicalIndex(Ljava/lang/String;Z)I
+HSPLandroid/icu/text/DateTimePatternGenerator;->getFilteredPattern(Landroid/icu/text/DateTimePatternGenerator$FormatParser;Ljava/util/BitSet;)Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getFrozenInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/DateTimePatternGenerator;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/DateTimePatternGenerator;
+HSPLandroid/icu/text/DateTimePatternGenerator;->hackTimes(Landroid/icu/text/DateTimePatternGenerator$PatternInfo;Ljava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->initData(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->isAvailableFormatSet(Ljava/lang/String;)Z
+HSPLandroid/icu/text/DateTimePatternGenerator;->isFrozen()Z
+HSPLandroid/icu/text/DateTimePatternGenerator;->setAppendItemFormat(ILjava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->setAppendItemName(ILjava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->setAvailableFormat(Ljava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->setDateTimeFormat(Ljava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->setDateTimeFromCalendar(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->setDecimal(Ljava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator;->setDecimalSymbols(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DecimalFormat$Unit;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormat;-><init>(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;)V
+HSPLandroid/icu/text/DecimalFormat;-><init>(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;I)V
+HSPLandroid/icu/text/DecimalFormat;->_setMaximumFractionDigits(I)V
+HSPLandroid/icu/text/DecimalFormat;->addPadding(Ljava/lang/StringBuffer;Ljava/text/FieldPosition;II)V
+HSPLandroid/icu/text/DecimalFormat;->appendAffix(Ljava/lang/StringBuffer;ZZLjava/text/FieldPosition;Z)I
+HSPLandroid/icu/text/DecimalFormat;->appendAffixPattern(Ljava/lang/StringBuffer;ZZZ)V
+HSPLandroid/icu/text/DecimalFormat;->applyPatternWithoutExpandAffix(Ljava/lang/String;Z)V
+HSPLandroid/icu/text/DecimalFormat;->areSignificantDigitsUsed()Z
+HSPLandroid/icu/text/DecimalFormat;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/DecimalFormat;->compareAffix(Ljava/lang/String;IZZLjava/lang/String;ZI[Landroid/icu/util/Currency;)I
+HSPLandroid/icu/text/DecimalFormat;->compareSimpleAffix(Ljava/lang/String;Ljava/lang/String;I)I
+HSPLandroid/icu/text/DecimalFormat;->create(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/CurrencyPluralInfo;I)V
+HSPLandroid/icu/text/DecimalFormat;->createFromPatternAndSymbols(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;)V
+HSPLandroid/icu/text/DecimalFormat;->equalWithSignCompatibility(II)Z
+HSPLandroid/icu/text/DecimalFormat;->expandAffix(Ljava/lang/String;Ljava/lang/String;Ljava/lang/StringBuffer;)V
+HSPLandroid/icu/text/DecimalFormat;->expandAffixAdjustWidth(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormat;->expandAffixes(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormat;->format(DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DecimalFormat;->format(DLjava/lang/StringBuffer;Ljava/text/FieldPosition;Z)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DecimalFormat;->format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DecimalFormat;->format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;Z)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DecimalFormat;->getDecimalFormatSymbols()Landroid/icu/text/DecimalFormatSymbols;
+HSPLandroid/icu/text/DecimalFormat;->getEquivalentDecimals(Ljava/lang/String;Z)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/DecimalFormat;->getMaximumSignificantDigits()I
+HSPLandroid/icu/text/DecimalFormat;->getMinimumSignificantDigits()I
+HSPLandroid/icu/text/DecimalFormat;->getParseMaxDigits()I
+HSPLandroid/icu/text/DecimalFormat;->isBidiMark(I)Z
+HSPLandroid/icu/text/DecimalFormat;->isDecimalPatternMatchRequired()Z
+HSPLandroid/icu/text/DecimalFormat;->isGroupingPosition(I)Z
+HSPLandroid/icu/text/DecimalFormat;->isNegative(D)Z
+HSPLandroid/icu/text/DecimalFormat;->isParseBigDecimal()Z
+HSPLandroid/icu/text/DecimalFormat;->isScientificNotation()Z
+HSPLandroid/icu/text/DecimalFormat;->matchesDigit(Ljava/lang/String;I[I)I
+HSPLandroid/icu/text/DecimalFormat;->multiply(D)D
+HSPLandroid/icu/text/DecimalFormat;->parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;
+HSPLandroid/icu/text/DecimalFormat;->parse(Ljava/lang/String;Ljava/text/ParsePosition;[Landroid/icu/util/Currency;)Ljava/lang/Object;
+HSPLandroid/icu/text/DecimalFormat;->precision(Z)I
+HSPLandroid/icu/text/DecimalFormat;->resetActualRounding()V
+HSPLandroid/icu/text/DecimalFormat;->round(D)D
+HSPLandroid/icu/text/DecimalFormat;->round(DDDIZ)D
+HSPLandroid/icu/text/DecimalFormat;->setCurrency(Landroid/icu/util/Currency;)V
+HSPLandroid/icu/text/DecimalFormat;->setCurrencyForSymbols()V
+HSPLandroid/icu/text/DecimalFormat;->setDecimalSeparatorAlwaysShown(Z)V
+HSPLandroid/icu/text/DecimalFormat;->setInternalRoundingIncrement(Landroid/icu/math/BigDecimal;)V
+HSPLandroid/icu/text/DecimalFormat;->setMaximumFractionDigits(I)V
+HSPLandroid/icu/text/DecimalFormat;->setMaximumIntegerDigits(I)V
+HSPLandroid/icu/text/DecimalFormat;->setMinimumFractionDigits(I)V
+HSPLandroid/icu/text/DecimalFormat;->setMinimumIntegerDigits(I)V
+HSPLandroid/icu/text/DecimalFormat;->setRoundingDouble(D)V
+HSPLandroid/icu/text/DecimalFormat;->setRoundingIncrement(D)V
+HSPLandroid/icu/text/DecimalFormat;->setRoundingIncrement(Landroid/icu/math/BigDecimal;)V
+HSPLandroid/icu/text/DecimalFormat;->setRoundingMode(I)V
+HSPLandroid/icu/text/DecimalFormat;->setSignificantDigitsUsed(Z)V
+HSPLandroid/icu/text/DecimalFormat;->subformat(DLjava/lang/StringBuffer;Ljava/text/FieldPosition;ZZZ)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DecimalFormat;->subformat(Ljava/lang/StringBuffer;Ljava/text/FieldPosition;ZZZ)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DecimalFormat;->subformatFixed(Ljava/lang/StringBuffer;Ljava/text/FieldPosition;ZZ)V
+HSPLandroid/icu/text/DecimalFormat;->subparse(Ljava/lang/String;Ljava/text/ParsePosition;Landroid/icu/text/DigitList;[Z[Landroid/icu/util/Currency;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZI)Z
+HSPLandroid/icu/text/DecimalFormat;->toPattern()Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormat;->toPattern(Z)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;->-get0()[Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->-wrap0(Landroid/icu/util/ULocale;)Landroid/icu/text/DecimalFormatSymbols$CacheData;
+HSPLandroid/icu/text/DecimalFormatSymbols;-><init>(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;-><init>(Ljava/util/Locale;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getCurrency()Landroid/icu/util/Currency;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getCurrencyPattern()Ljava/lang/String;
+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;->getDigitStrings()[Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->getDigitStringsLocal()[Ljava/lang/String;
+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;->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;)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;->setMonetaryGroupingSeparatorString(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setNaN(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setPatternSeparator(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;->setPlusSignString(Ljava/lang/String;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->setZeroDigit(C)V
+HSPLandroid/icu/text/DigitList;-><init>()V
+HSPLandroid/icu/text/DigitList;->append(I)V
+HSPLandroid/icu/text/DigitList;->ensureCapacity(II)V
+HSPLandroid/icu/text/DigitList;->getDigitValue(I)B
+HSPLandroid/icu/text/DigitList;->isIntegral()Z
+HSPLandroid/icu/text/DigitList;->isZero()Z
+HSPLandroid/icu/text/DigitList;->round(I)V
+HSPLandroid/icu/text/DigitList;->set(DIZ)V
+HSPLandroid/icu/text/DigitList;->set(JI)V
+HSPLandroid/icu/text/DigitList;->set(Ljava/lang/String;I)V
+HSPLandroid/icu/text/DigitList;->shouldRoundUp(I)Z
+HSPLandroid/icu/text/DigitList;->wasRounded()Z
+HSPLandroid/icu/text/DisplayContext$Type;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/text/DisplayContext;-><init>(Ljava/lang/String;ILandroid/icu/text/DisplayContext$Type;I)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;->reset()V
+HSPLandroid/icu/text/Edits;->setLastUnit(I)V
+HSPLandroid/icu/text/IDNA;->convertIDNToASCII(Ljava/lang/String;I)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/LanguageBreakEngine;->findBreaks(Ljava/text/CharacterIterator;IIZILandroid/icu/text/DictionaryBreakEngine$DequeI;)I
+HSPLandroid/icu/text/LanguageBreakEngine;->handles(II)Z
+HSPLandroid/icu/text/ListFormatter$Style;-><init>(Ljava/lang/String;ILjava/lang/String;)V
+HSPLandroid/icu/text/MeasureFormat$FormatWidth;-><init>(Ljava/lang/String;ILandroid/icu/text/ListFormatter$Style;I)V
+HSPLandroid/icu/text/MeasureFormat$FormatWidth;->getCurrencyStyle()I
+HSPLandroid/icu/text/MeasureFormat$FormatWidth;->values()[Landroid/icu/text/MeasureFormat$FormatWidth;
+HSPLandroid/icu/text/MeasureFormat$ImmutableNumberFormat;->-get0(Landroid/icu/text/MeasureFormat$ImmutableNumberFormat;)Landroid/icu/text/NumberFormat;
+HSPLandroid/icu/text/MeasureFormat$ImmutableNumberFormat;-><init>(Landroid/icu/text/NumberFormat;)V
+HSPLandroid/icu/text/MeasureFormat$MeasureFormatData;-><init>()V
+HSPLandroid/icu/text/MeasureFormat$MeasureFormatData;-><init>(Landroid/icu/text/MeasureFormat$MeasureFormatData;)V
+HSPLandroid/icu/text/MeasureFormat$MeasureFormatData;->hasPerFormatter(Landroid/icu/text/MeasureFormat$FormatWidth;)Z
+HSPLandroid/icu/text/MeasureFormat$UnitDataSink;-><init>(Landroid/icu/text/MeasureFormat$MeasureFormatData;)V
+HSPLandroid/icu/text/MeasureFormat$UnitDataSink;->consumeAlias(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HSPLandroid/icu/text/MeasureFormat$UnitDataSink;->consumeCompoundPattern(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HSPLandroid/icu/text/MeasureFormat$UnitDataSink;->consumePattern(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HSPLandroid/icu/text/MeasureFormat$UnitDataSink;->consumeSubtypeTable(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HSPLandroid/icu/text/MeasureFormat$UnitDataSink;->consumeTable(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HSPLandroid/icu/text/MeasureFormat$UnitDataSink;->consumeUnitTypesTable(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
+HSPLandroid/icu/text/MeasureFormat$UnitDataSink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
+HSPLandroid/icu/text/MeasureFormat$UnitDataSink;->setDnamIfAbsent(Landroid/icu/impl/UResource$Value;)V
+HSPLandroid/icu/text/MeasureFormat$UnitDataSink;->setFormatterIfAbsent(ILandroid/icu/impl/UResource$Value;I)V
+HSPLandroid/icu/text/MeasureFormat$UnitDataSink;->widthFromAlias(Landroid/icu/impl/UResource$Value;)Landroid/icu/text/MeasureFormat$FormatWidth;
+HSPLandroid/icu/text/MeasureFormat$UnitDataSink;->widthFromKey(Landroid/icu/impl/UResource$Key;)Landroid/icu/text/MeasureFormat$FormatWidth;
+HSPLandroid/icu/text/MeasureFormat;-><init>(Landroid/icu/util/ULocale;Landroid/icu/text/MeasureFormat$MeasureFormatData;Landroid/icu/text/MeasureFormat$FormatWidth;Landroid/icu/text/MeasureFormat$ImmutableNumberFormat;Landroid/icu/text/PluralRules;Landroid/icu/text/MeasureFormat$NumericFormatters;Landroid/icu/text/MeasureFormat$ImmutableNumberFormat;Landroid/icu/text/MeasureFormat$ImmutableNumberFormat;)V
+HSPLandroid/icu/text/MeasureFormat;->format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/MeasureFormat;->formatMeasure(Landroid/icu/util/Measure;Landroid/icu/text/MeasureFormat$ImmutableNumberFormat;Ljava/lang/StringBuilder;Ljava/text/FieldPosition;)Ljava/lang/StringBuilder;
+HSPLandroid/icu/text/MeasureFormat;->getFormatter(Landroid/icu/util/MeasureUnit;Landroid/icu/text/MeasureFormat$FormatWidth;I)Ljava/lang/String;
+HSPLandroid/icu/text/MeasureFormat;->getFormatterOrNull(Landroid/icu/util/MeasureUnit;Landroid/icu/text/MeasureFormat$FormatWidth;I)Ljava/lang/String;
+HSPLandroid/icu/text/MeasureFormat;->getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/MeasureFormat$FormatWidth;Landroid/icu/text/NumberFormat;)Landroid/icu/text/MeasureFormat;
+HSPLandroid/icu/text/MeasureFormat;->getInstance(Ljava/util/Locale;Landroid/icu/text/MeasureFormat$FormatWidth;Landroid/icu/text/NumberFormat;)Landroid/icu/text/MeasureFormat;
+HSPLandroid/icu/text/MeasureFormat;->getPluralFormatter(Landroid/icu/util/MeasureUnit;Landroid/icu/text/MeasureFormat$FormatWidth;I)Ljava/lang/String;
+HSPLandroid/icu/text/MeasureFormat;->getRegularWidth(Landroid/icu/text/MeasureFormat$FormatWidth;)Landroid/icu/text/MeasureFormat$FormatWidth;
+HSPLandroid/icu/text/MeasureFormat;->loadLocaleData(Landroid/icu/util/ULocale;)Landroid/icu/text/MeasureFormat$MeasureFormatData;
+HSPLandroid/icu/text/Normalizer$FCDMode;-><init>()V
+HSPLandroid/icu/text/Normalizer$FCDMode;-><init>(Landroid/icu/text/Normalizer$FCDMode;)V
+HSPLandroid/icu/text/Normalizer$Mode;-><init>()V
+HSPLandroid/icu/text/Normalizer$ModeImpl;->-get0(Landroid/icu/text/Normalizer$ModeImpl;)Landroid/icu/text/Normalizer2;
+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$ModeImpl;)V
+HSPLandroid/icu/text/Normalizer$NFCMode;-><init>()V
+HSPLandroid/icu/text/Normalizer$NFCMode;-><init>(Landroid/icu/text/Normalizer$NFCMode;)V
+HSPLandroid/icu/text/Normalizer$NFCMode;->getNormalizer2(I)Landroid/icu/text/Normalizer2;
+HSPLandroid/icu/text/Normalizer$NFCModeImpl;->-get0()Landroid/icu/text/Normalizer$ModeImpl;
+HSPLandroid/icu/text/Normalizer$NFDMode;-><init>()V
+HSPLandroid/icu/text/Normalizer$NFDMode;-><init>(Landroid/icu/text/Normalizer$NFDMode;)V
+HSPLandroid/icu/text/Normalizer$NFKCMode;-><init>()V
+HSPLandroid/icu/text/Normalizer$NFKCMode;-><init>(Landroid/icu/text/Normalizer$NFKCMode;)V
+HSPLandroid/icu/text/Normalizer$NFKDMode;-><init>()V
+HSPLandroid/icu/text/Normalizer$NFKDMode;-><init>(Landroid/icu/text/Normalizer$NFKDMode;)V
+HSPLandroid/icu/text/Normalizer$NFKDMode;->getNormalizer2(I)Landroid/icu/text/Normalizer2;
+HSPLandroid/icu/text/Normalizer$NFKDModeImpl;->-get0()Landroid/icu/text/Normalizer$ModeImpl;
+HSPLandroid/icu/text/Normalizer$NONEMode;-><init>()V
+HSPLandroid/icu/text/Normalizer$NONEMode;-><init>(Landroid/icu/text/Normalizer$NONEMode;)V
+HSPLandroid/icu/text/Normalizer$QuickCheckResult;-><init>(I)V
+HSPLandroid/icu/text/Normalizer$QuickCheckResult;-><init>(ILandroid/icu/text/Normalizer$QuickCheckResult;)V
+HSPLandroid/icu/text/Normalizer2;-><init>()V
+HSPLandroid/icu/text/Normalizer2;->getNFCInstance()Landroid/icu/text/Normalizer2;
+HSPLandroid/icu/text/Normalizer2;->getNFKDInstance()Landroid/icu/text/Normalizer2;
+HSPLandroid/icu/text/Normalizer2;->normalize(Ljava/lang/CharSequence;)Ljava/lang/String;
+HSPLandroid/icu/text/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;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/text/NumberFormat$NumberFormatShim;-><init>()V
+HSPLandroid/icu/text/NumberFormat$NumberFormatShim;->createInstance(Landroid/icu/util/ULocale;I)Landroid/icu/text/NumberFormat;
+HSPLandroid/icu/text/NumberFormat$NumberFormatShim;->getAvailableLocales()[Ljava/util/Locale;
+HSPLandroid/icu/text/NumberFormat$NumberFormatShim;->getAvailableULocales()[Landroid/icu/util/ULocale;
+HSPLandroid/icu/text/NumberFormat$NumberFormatShim;->registerFactory(Landroid/icu/text/NumberFormat$NumberFormatFactory;)Ljava/lang/Object;
+HSPLandroid/icu/text/NumberFormat$NumberFormatShim;->unregister(Ljava/lang/Object;)Z
+HSPLandroid/icu/text/NumberFormat;-><init>()V
+HSPLandroid/icu/text/NumberFormat;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/NumberFormat;->createInstance(Landroid/icu/util/ULocale;I)Landroid/icu/text/NumberFormat;
+HSPLandroid/icu/text/NumberFormat;->format(DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/NumberFormat;->format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/NumberFormat;->format(Landroid/icu/math/BigDecimal;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/NumberFormat;->format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/NumberFormat;->format(Ljava/math/BigDecimal;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/NumberFormat;->format(Ljava/math/BigInteger;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/NumberFormat;->getCurrency()Landroid/icu/util/Currency;
+HSPLandroid/icu/text/NumberFormat;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberFormat;
+HSPLandroid/icu/text/NumberFormat;->getInstance(Landroid/icu/util/ULocale;I)Landroid/icu/text/NumberFormat;
+HSPLandroid/icu/text/NumberFormat;->getInstance(Ljava/util/Locale;)Landroid/icu/text/NumberFormat;
+HSPLandroid/icu/text/NumberFormat;->getMaximumFractionDigits()I
+HSPLandroid/icu/text/NumberFormat;->getMaximumIntegerDigits()I
+HSPLandroid/icu/text/NumberFormat;->getMinimumFractionDigits()I
+HSPLandroid/icu/text/NumberFormat;->getMinimumIntegerDigits()I
+HSPLandroid/icu/text/NumberFormat;->getPattern(Landroid/icu/util/ULocale;I)Ljava/lang/String;
+HSPLandroid/icu/text/NumberFormat;->getShim()Landroid/icu/text/NumberFormat$NumberFormatShim;
+HSPLandroid/icu/text/NumberFormat;->isGroupingUsed()Z
+HSPLandroid/icu/text/NumberFormat;->isParseIntegerOnly()Z
+HSPLandroid/icu/text/NumberFormat;->isParseStrict()Z
+HSPLandroid/icu/text/NumberFormat;->parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;
+HSPLandroid/icu/text/NumberFormat;->setCurrency(Landroid/icu/util/Currency;)V
+HSPLandroid/icu/text/NumberFormat;->setGroupingUsed(Z)V
+HSPLandroid/icu/text/NumberFormat;->setMaximumFractionDigits(I)V
+HSPLandroid/icu/text/NumberFormat;->setMaximumIntegerDigits(I)V
+HSPLandroid/icu/text/NumberFormat;->setMinimumFractionDigits(I)V
+HSPLandroid/icu/text/NumberFormat;->setMinimumIntegerDigits(I)V
+HSPLandroid/icu/text/NumberFormat;->setParseIntegerOnly(Z)V
+HSPLandroid/icu/text/NumberFormatServiceShim$NFService$1RBNumberFormatFactory;-><init>(Landroid/icu/text/NumberFormatServiceShim$NFService;)V
+HSPLandroid/icu/text/NumberFormatServiceShim$NFService$1RBNumberFormatFactory;->handleCreate(Landroid/icu/util/ULocale;ILandroid/icu/impl/ICUService;)Ljava/lang/Object;
+HSPLandroid/icu/text/NumberFormatServiceShim$NFService;-><init>()V
+HSPLandroid/icu/text/NumberFormatServiceShim;-><init>()V
+HSPLandroid/icu/text/NumberFormatServiceShim;->createInstance(Landroid/icu/util/ULocale;I)Landroid/icu/text/NumberFormat;
+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;->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/PluralRanges$Matrix;-><init>()V
+HSPLandroid/icu/text/PluralRanges$Matrix;->setIfNew(Landroid/icu/impl/StandardPlural;Landroid/icu/impl/StandardPlural;Landroid/icu/impl/StandardPlural;)V
+HSPLandroid/icu/text/PluralRanges;-><init>()V
+HSPLandroid/icu/text/PluralRanges;->add(Landroid/icu/impl/StandardPlural;Landroid/icu/impl/StandardPlural;Landroid/icu/impl/StandardPlural;)V
+HSPLandroid/icu/text/PluralRanges;->freeze()Landroid/icu/text/PluralRanges;
+HSPLandroid/icu/text/PluralRules$1;-><init>()V
+HSPLandroid/icu/text/PluralRules$1;->isFulfilled(Landroid/icu/text/PluralRules$FixedDecimal;)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$FixedDecimal;)Z
+HSPLandroid/icu/text/PluralRules$BinaryConstraint;-><init>(Landroid/icu/text/PluralRules$Constraint;Landroid/icu/text/PluralRules$Constraint;)V
+HSPLandroid/icu/text/PluralRules$Constraint;->isFulfilled(Landroid/icu/text/PluralRules$FixedDecimal;)Z
+HSPLandroid/icu/text/PluralRules$Constraint;->isLimited(Landroid/icu/text/PluralRules$SampleType;)Z
+HSPLandroid/icu/text/PluralRules$Factory;-><init>()V
+HSPLandroid/icu/text/PluralRules$Factory;->forLocale(Landroid/icu/util/ULocale;Landroid/icu/text/PluralRules$PluralType;)Landroid/icu/text/PluralRules;
+HSPLandroid/icu/text/PluralRules$Factory;->getAvailableULocales()[Landroid/icu/util/ULocale;
+HSPLandroid/icu/text/PluralRules$Factory;->getDefaultFactory()Landroid/icu/impl/PluralRulesLoader;
+HSPLandroid/icu/text/PluralRules$Factory;->getFunctionalEquivalent(Landroid/icu/util/ULocale;[Z)Landroid/icu/util/ULocale;
+HSPLandroid/icu/text/PluralRules$Factory;->hasOverride(Landroid/icu/util/ULocale;)Z
+HSPLandroid/icu/text/PluralRules$FixedDecimal;->-getandroid-icu-text-PluralRules$OperandSwitchesValues()[I
+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;->get(Landroid/icu/text/PluralRules$Operand;)D
+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;->getVisibleDecimalDigitCount()I
+HSPLandroid/icu/text/PluralRules$FixedDecimal;->getVisibleFractionCount(Ljava/lang/String;)I
+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;-><init>(Ljava/lang/String;I)V
+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$PluralType;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/text/PluralRules$RangeConstraint;-><init>(IZLandroid/icu/text/PluralRules$Operand;ZDD[J)V
+HSPLandroid/icu/text/PluralRules$RangeConstraint;->isFulfilled(Landroid/icu/text/PluralRules$FixedDecimal;)Z
+HSPLandroid/icu/text/PluralRules$Rule;->-get1(Landroid/icu/text/PluralRules$Rule;)Landroid/icu/text/PluralRules$FixedDecimalSamples;
+HSPLandroid/icu/text/PluralRules$Rule;-><init>(Ljava/lang/String;Landroid/icu/text/PluralRules$Constraint;Landroid/icu/text/PluralRules$FixedDecimalSamples;Landroid/icu/text/PluralRules$FixedDecimalSamples;)V
+HSPLandroid/icu/text/PluralRules$Rule;->appliesTo(Landroid/icu/text/PluralRules$FixedDecimal;)Z
+HSPLandroid/icu/text/PluralRules$Rule;->getKeyword()Ljava/lang/String;
+HSPLandroid/icu/text/PluralRules$RuleList;->-get0(Landroid/icu/text/PluralRules$RuleList;)Z
+HSPLandroid/icu/text/PluralRules$RuleList;->-set0(Landroid/icu/text/PluralRules$RuleList;Z)Z
+HSPLandroid/icu/text/PluralRules$RuleList;-><init>()V
+HSPLandroid/icu/text/PluralRules$RuleList;-><init>(Landroid/icu/text/PluralRules$RuleList;)V
+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$FixedDecimal;)Ljava/lang/String;
+HSPLandroid/icu/text/PluralRules$RuleList;->selectRule(Landroid/icu/text/PluralRules$FixedDecimal;)Landroid/icu/text/PluralRules$Rule;
+HSPLandroid/icu/text/PluralRules$SampleType;-><init>(Ljava/lang/String;I)V
+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;->forLocale(Landroid/icu/util/ULocale;)Landroid/icu/text/PluralRules;
+HSPLandroid/icu/text/PluralRules;->forLocale(Ljava/util/Locale;)Landroid/icu/text/PluralRules;
+HSPLandroid/icu/text/PluralRules;->isValidKeyword(Ljava/lang/String;)Z
+HSPLandroid/icu/text/PluralRules;->nextToken([Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/text/PluralRules;->parseConstraint(Ljava/lang/String;)Landroid/icu/text/PluralRules$Constraint;
+HSPLandroid/icu/text/PluralRules;->parseDescription(Ljava/lang/String;)Landroid/icu/text/PluralRules;
+HSPLandroid/icu/text/PluralRules;->parseRule(Ljava/lang/String;)Landroid/icu/text/PluralRules$Rule;
+HSPLandroid/icu/text/PluralRules;->parseRuleChain(Ljava/lang/String;)Landroid/icu/text/PluralRules$RuleList;
+HSPLandroid/icu/text/PluralRules;->select(D)Ljava/lang/String;
+HSPLandroid/icu/text/PluralRules;->select(Landroid/icu/text/PluralRules$FixedDecimal;)Ljava/lang/String;
+HSPLandroid/icu/text/QuantityFormatter;->format(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/StringBuilder;Ljava/text/FieldPosition;)Ljava/lang/StringBuilder;
+HSPLandroid/icu/text/QuantityFormatter;->selectPlural(Ljava/lang/Number;Landroid/icu/text/NumberFormat;Landroid/icu/text/PluralRules;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Landroid/icu/impl/StandardPlural;
+HSPLandroid/icu/text/RBBIDataWrapper$IsAcceptable;-><init>()V
+HSPLandroid/icu/text/RBBIDataWrapper$IsAcceptable;-><init>(Landroid/icu/text/RBBIDataWrapper$IsAcceptable;)V
+HSPLandroid/icu/text/RBBIDataWrapper$IsAcceptable;->isDataVersionAcceptable([B)Z
+HSPLandroid/icu/text/RBBIDataWrapper$RBBIDataHeader;-><init>()V
+HSPLandroid/icu/text/RBBIDataWrapper$TrieFoldingFunc;-><init>()V
+HSPLandroid/icu/text/RBBIDataWrapper;-><init>()V
+HSPLandroid/icu/text/RBBIDataWrapper;->get(Ljava/nio/ByteBuffer;)Landroid/icu/text/RBBIDataWrapper;
+HSPLandroid/icu/text/Replaceable;->char32At(I)I
+HSPLandroid/icu/text/Replaceable;->charAt(I)C
+HSPLandroid/icu/text/Replaceable;->copy(III)V
+HSPLandroid/icu/text/Replaceable;->getChars(II[CI)V
+HSPLandroid/icu/text/Replaceable;->hasMetaData()Z
+HSPLandroid/icu/text/Replaceable;->length()I
+HSPLandroid/icu/text/Replaceable;->replace(IILjava/lang/String;)V
+HSPLandroid/icu/text/Replaceable;->replace(II[CII)V
+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$LookAheadResults;-><init>()V
+HSPLandroid/icu/text/RuleBasedBreakIterator;-><init>()V
+HSPLandroid/icu/text/RuleBasedBreakIterator;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/RuleBasedBreakIterator;->getInstanceFromCompiledRules(Ljava/nio/ByteBuffer;)Landroid/icu/text/RuleBasedBreakIterator;
+HSPLandroid/icu/text/RuleBasedBreakIterator;->setBreakType(I)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$CollationBuffer;)V
+HSPLandroid/icu/text/RuleBasedCollator$FCDUTF16NFDIterator;-><init>()V
+HSPLandroid/icu/text/RuleBasedCollator$NFDIterator;-><init>()V
+HSPLandroid/icu/text/RuleBasedCollator$NFDIterator;->nextRawCodePoint()I
+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;->freeze()Landroid/icu/text/Collator;
+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;->internalAddContractions(ILandroid/icu/text/UnicodeSet;)V
+HSPLandroid/icu/text/RuleBasedCollator;->internalGetCEs(Ljava/lang/CharSequence;)[J
+HSPLandroid/icu/text/RuleBasedCollator;->isAlternateHandlingShifted()Z
+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;->-wrap0(CI)Z
+HSPLandroid/icu/text/SimpleDateFormat;-><init>(Ljava/lang/String;Landroid/icu/text/DateFormatSymbols;Landroid/icu/util/Calendar;Landroid/icu/text/NumberFormat;Landroid/icu/util/ULocale;ZLjava/lang/String;)V
+HSPLandroid/icu/text/SimpleDateFormat;-><init>(Ljava/lang/String;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/SimpleDateFormat;->fastZeroPaddingNumber(Ljava/lang/StringBuffer;III)V
+HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Landroid/icu/text/DisplayContext;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Ljava/util/List;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/SimpleDateFormat;->getIndexFromChar(C)I
+HSPLandroid/icu/text/SimpleDateFormat;->getInstance(Landroid/icu/util/Calendar$FormatConfiguration;)Landroid/icu/text/SimpleDateFormat;
+HSPLandroid/icu/text/SimpleDateFormat;->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;->safeAppend([Ljava/lang/String;ILjava/lang/StringBuffer;)V
+HSPLandroid/icu/text/SimpleDateFormat;->safeAppendWithMonthPattern([Ljava/lang/String;ILjava/lang/StringBuffer;Ljava/lang/String;)V
+HSPLandroid/icu/text/SimpleDateFormat;->setContext(Landroid/icu/text/DisplayContext;)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;-><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$NameType;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/text/TimeZoneNames$NameType;->values()[Landroid/icu/text/TimeZoneNames$NameType;
+HSPLandroid/icu/text/UCharacterIterator;-><init>()V
+HSPLandroid/icu/text/UCharacterIterator;->current()I
+HSPLandroid/icu/text/UCharacterIterator;->getIndex()I
+HSPLandroid/icu/text/UCharacterIterator;->getInstance(Ljava/lang/String;)Landroid/icu/text/UCharacterIterator;
+HSPLandroid/icu/text/UCharacterIterator;->getLength()I
+HSPLandroid/icu/text/UCharacterIterator;->getText()Ljava/lang/String;
+HSPLandroid/icu/text/UCharacterIterator;->getText([C)I
+HSPLandroid/icu/text/UCharacterIterator;->getText([CI)I
+HSPLandroid/icu/text/UCharacterIterator;->next()I
+HSPLandroid/icu/text/UCharacterIterator;->previous()I
+HSPLandroid/icu/text/UCharacterIterator;->setIndex(I)V
+HSPLandroid/icu/text/UCharacterIterator;->setToStart()V
+HSPLandroid/icu/text/UFieldPosition;-><init>(Ljava/text/Format$Field;I)V
+HSPLandroid/icu/text/UFieldPosition;->getCountVisibleFractionDigits()I
+HSPLandroid/icu/text/UFieldPosition;->getFractionDigits()J
+HSPLandroid/icu/text/UFieldPosition;->setFractionDigits(IJ)V
+HSPLandroid/icu/text/UFormat;-><init>()V
+HSPLandroid/icu/text/UFormat;->setLocale(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/UForwardCharacterIterator;->next()I
+HSPLandroid/icu/text/UForwardCharacterIterator;->nextCodePoint()I
+HSPLandroid/icu/text/UTF16$StringComparator;-><init>(ZZI)V
+HSPLandroid/icu/text/UTF16$StringComparator;->setCodePointCompare(Z)V
+HSPLandroid/icu/text/UTF16;->_charAt(Ljava/lang/CharSequence;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;->getCharCount(I)I
+HSPLandroid/icu/text/UTF16;->getLeadSurrogate(I)C
+HSPLandroid/icu/text/UTF16;->getTrailSurrogate(I)C
+HSPLandroid/icu/text/UTF16;->hasMoreCodePointsThan(Ljava/lang/String;I)Z
+HSPLandroid/icu/text/UnhandledBreakEngine;-><init>()V
+HSPLandroid/icu/text/UnicodeFilter;-><init>()V
+HSPLandroid/icu/text/UnicodeFilter;->contains(I)Z
+HSPLandroid/icu/text/UnicodeMatcher;->addMatchSetTo(Landroid/icu/text/UnicodeSet;)V
+HSPLandroid/icu/text/UnicodeMatcher;->matches(Landroid/icu/text/Replaceable;[IIZ)I
+HSPLandroid/icu/text/UnicodeMatcher;->matchesIndexValue(I)Z
+HSPLandroid/icu/text/UnicodeMatcher;->toPattern(Z)Ljava/lang/String;
+HSPLandroid/icu/text/UnicodeSet$Filter;->contains(I)Z
+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$UnicodeSetIterator2;-><init>(Landroid/icu/text/UnicodeSet;)V
+HSPLandroid/icu/text/UnicodeSet$UnicodeSetIterator2;->hasNext()Z
+HSPLandroid/icu/text/UnicodeSet$UnicodeSetIterator2;->next()Ljava/lang/Object;
+HSPLandroid/icu/text/UnicodeSet$UnicodeSetIterator2;->next()Ljava/lang/String;
+HSPLandroid/icu/text/UnicodeSet;->-get1(Landroid/icu/text/UnicodeSet;)I
+HSPLandroid/icu/text/UnicodeSet;->-get2(Landroid/icu/text/UnicodeSet;)[I
+HSPLandroid/icu/text/UnicodeSet;-><init>()V
+HSPLandroid/icu/text/UnicodeSet;-><init>(II)V
+HSPLandroid/icu/text/UnicodeSet;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/text/UnicodeSet;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/text/UnicodeSet;-><init>([I)V
+HSPLandroid/icu/text/UnicodeSet;->_appendToPat(Ljava/lang/Appendable;IZ)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;->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;I)Landroid/icu/text/UnicodeSet;
+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;I)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;->complement(II)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;->containsNone(II)Z
+HSPLandroid/icu/text/UnicodeSet;->ensureBufferCapacity(I)V
+HSPLandroid/icu/text/UnicodeSet;->findCodePoint(I)I
+HSPLandroid/icu/text/UnicodeSet;->freeze()Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSet;->getInclusions(I)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;->isEmpty()Z
+HSPLandroid/icu/text/UnicodeSet;->isFrozen()Z
+HSPLandroid/icu/text/UnicodeSet;->iterator()Ljava/util/Iterator;
+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;->xor([III)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/text/UnicodeSetSpanner;-><init>(Landroid/icu/text/UnicodeSet;)V
+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;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/util/BytesTrie$Result;->hasNext()Z
+HSPLandroid/icu/util/BytesTrie$Result;->hasValue()Z
+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/Calendar$CalType;-><init>(Ljava/lang/String;ILjava/lang/String;)V
+HSPLandroid/icu/util/Calendar$CalType;->values()[Landroid/icu/util/Calendar$CalType;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->-set0(Landroid/icu/util/Calendar$FormatConfiguration;Landroid/icu/util/Calendar;)Landroid/icu/util/Calendar;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->-set1(Landroid/icu/util/Calendar$FormatConfiguration;Landroid/icu/text/DateFormatSymbols;)Landroid/icu/text/DateFormatSymbols;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->-set2(Landroid/icu/util/Calendar$FormatConfiguration;Landroid/icu/util/ULocale;)Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->-set3(Landroid/icu/util/Calendar$FormatConfiguration;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;->-set4(Landroid/icu/util/Calendar$FormatConfiguration;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/Calendar$FormatConfiguration;-><init>()V
+HSPLandroid/icu/util/Calendar$FormatConfiguration;-><init>(Landroid/icu/util/Calendar$FormatConfiguration;)V
+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;->-get0(Landroid/icu/util/Calendar$PatternData;)[Ljava/lang/String;
+HSPLandroid/icu/util/Calendar$PatternData;->-get1(Landroid/icu/util/Calendar$PatternData;)[Ljava/lang/String;
+HSPLandroid/icu/util/Calendar$PatternData;->-wrap0(Landroid/icu/util/Calendar;Landroid/icu/util/ULocale;)Landroid/icu/util/Calendar$PatternData;
+HSPLandroid/icu/util/Calendar$PatternData;->-wrap2(Landroid/icu/util/Calendar$PatternData;I)Ljava/lang/String;
+HSPLandroid/icu/util/Calendar$PatternData;-><init>([Ljava/lang/String;[Ljava/lang/String;)V
+HSPLandroid/icu/util/Calendar$PatternData;->getDateTimePattern(I)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$WeekData;-><init>(IIIIII)V
+HSPLandroid/icu/util/Calendar$WeekDataCache;-><init>()V
+HSPLandroid/icu/util/Calendar$WeekDataCache;-><init>(Landroid/icu/util/Calendar$WeekDataCache;)V
+HSPLandroid/icu/util/Calendar$WeekDataCache;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/util/Calendar$WeekDataCache;->createInstance(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/Calendar$WeekData;
+HSPLandroid/icu/util/Calendar;->-get1()Landroid/icu/impl/ICUCache;
+HSPLandroid/icu/util/Calendar;->-getandroid-icu-util-Calendar$CalTypeSwitchesValues()[I
+HSPLandroid/icu/util/Calendar;->-wrap0(Landroid/icu/util/ULocale;Ljava/lang/String;)Landroid/icu/util/Calendar$PatternData;
+HSPLandroid/icu/util/Calendar;->-wrap1(Ljava/lang/String;)Landroid/icu/util/Calendar$WeekData;
+HSPLandroid/icu/util/Calendar;-><init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/util/Calendar;->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/util/Calendar$CalType;
+HSPLandroid/icu/util/Calendar;->getDateTimeFormat(IILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
+HSPLandroid/icu/util/Calendar;->getDateTimePattern(Landroid/icu/util/Calendar;Landroid/icu/util/ULocale;I)Ljava/lang/String;
+HSPLandroid/icu/util/Calendar;->getFieldCount()I
+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;->getTimeInMillis()J
+HSPLandroid/icu/util/Calendar;->getTimeZone()Landroid/icu/util/TimeZone;
+HSPLandroid/icu/util/Calendar;->getWeekDataForRegionInternal(Ljava/lang/String;)Landroid/icu/util/Calendar$WeekData;
+HSPLandroid/icu/util/Calendar;->handleComputeMonthStart(IIZ)I
+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;->handleGetExtendedYear()I
+HSPLandroid/icu/util/Calendar;->handleGetLimit(II)I
+HSPLandroid/icu/util/Calendar;->initInternal()V
+HSPLandroid/icu/util/Calendar;->internalSet(II)V
+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;->setTime(Ljava/util/Date;)V
+HSPLandroid/icu/util/Calendar;->setTimeInMillis(J)V
+HSPLandroid/icu/util/Calendar;->setTimeZone(Landroid/icu/util/TimeZone;)V
+HSPLandroid/icu/util/Calendar;->setWeekData(Landroid/icu/util/Calendar$WeekData;)Landroid/icu/util/Calendar;
+HSPLandroid/icu/util/Calendar;->setWeekData(Ljava/lang/String;)V
+HSPLandroid/icu/util/Calendar;->weekNumber(II)I
+HSPLandroid/icu/util/Calendar;->weekNumber(III)I
+HSPLandroid/icu/util/CharsTrie$Entry;-><init>()V
+HSPLandroid/icu/util/CharsTrie$Entry;-><init>(Landroid/icu/util/CharsTrie$Entry;)V
+HSPLandroid/icu/util/CharsTrie$Iterator;-><init>(Ljava/lang/CharSequence;III)V
+HSPLandroid/icu/util/CharsTrie$Iterator;-><init>(Ljava/lang/CharSequence;IIILandroid/icu/util/CharsTrie$Iterator;)V
+HSPLandroid/icu/util/CharsTrie$Iterator;->branchNext(II)I
+HSPLandroid/icu/util/CharsTrie$Iterator;->hasNext()Z
+HSPLandroid/icu/util/CharsTrie$Iterator;->next()Landroid/icu/util/CharsTrie$Entry;
+HSPLandroid/icu/util/CharsTrie;->-wrap0(Ljava/lang/CharSequence;I)I
+HSPLandroid/icu/util/CharsTrie;->-wrap2(Ljava/lang/CharSequence;II)I
+HSPLandroid/icu/util/CharsTrie;->-wrap3(Ljava/lang/CharSequence;I)I
+HSPLandroid/icu/util/CharsTrie;->-wrap5(II)I
+HSPLandroid/icu/util/CharsTrie;-><init>(Ljava/lang/CharSequence;I)V
+HSPLandroid/icu/util/CharsTrie;->branchNext(III)Landroid/icu/util/BytesTrie$Result;
+HSPLandroid/icu/util/CharsTrie;->first(I)Landroid/icu/util/BytesTrie$Result;
+HSPLandroid/icu/util/CharsTrie;->firstForCodePoint(I)Landroid/icu/util/BytesTrie$Result;
+HSPLandroid/icu/util/CharsTrie;->getValue()I
+HSPLandroid/icu/util/CharsTrie;->iterator()Landroid/icu/util/CharsTrie$Iterator;
+HSPLandroid/icu/util/CharsTrie;->jumpByDelta(Ljava/lang/CharSequence;I)I
+HSPLandroid/icu/util/CharsTrie;->next(I)Landroid/icu/util/BytesTrie$Result;
+HSPLandroid/icu/util/CharsTrie;->nextImpl(II)Landroid/icu/util/BytesTrie$Result;
+HSPLandroid/icu/util/CharsTrie;->readValue(Ljava/lang/CharSequence;II)I
+HSPLandroid/icu/util/CharsTrie;->skipDelta(Ljava/lang/CharSequence;I)I
+HSPLandroid/icu/util/CharsTrie;->skipValue(II)I
+HSPLandroid/icu/util/CharsTrie;->skipValue(Ljava/lang/CharSequence;I)I
+HSPLandroid/icu/util/Currency$CurrencyUsage;-><init>(Ljava/lang/String;I)V
+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;->getDefaultFractionDigits(Landroid/icu/util/Currency$CurrencyUsage;)I
+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;->getRoundingIncrement(Landroid/icu/util/Currency$CurrencyUsage;)D
+HSPLandroid/icu/util/Currency;->getSymbol(Landroid/icu/util/ULocale;)Ljava/lang/String;
+HSPLandroid/icu/util/Currency;->getSymbol(Ljava/util/Locale;)Ljava/lang/String;
+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>()V
+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;->isLeapYear(I)Z
+HSPLandroid/icu/util/InitialTimeZoneRule;-><init>(Ljava/lang/String;II)V
+HSPLandroid/icu/util/LocaleData;-><init>()V
+HSPLandroid/icu/util/LocaleData;->getExemplarSet(II)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/util/LocaleData;->getExemplarSet(Landroid/icu/util/ULocale;II)Landroid/icu/text/UnicodeSet;
+HSPLandroid/icu/util/LocaleData;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/LocaleData;
+HSPLandroid/icu/util/Measure;-><init>(Ljava/lang/Number;Landroid/icu/util/MeasureUnit;)V
+HSPLandroid/icu/util/Measure;->getNumber()Ljava/lang/Number;
+HSPLandroid/icu/util/Measure;->getUnit()Landroid/icu/util/MeasureUnit;
+HSPLandroid/icu/util/MeasureUnit$1;->create(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/MeasureUnit;
+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;->hashCode()I
+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;-><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;->setID(Ljava/lang/String;)V
+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$ConstantZone;-><init>(ILjava/lang/String;)V
+HSPLandroid/icu/util/TimeZone$ConstantZone;-><init>(ILjava/lang/String;Landroid/icu/util/TimeZone$ConstantZone;)V
+HSPLandroid/icu/util/TimeZone$ConstantZone;->freeze()Landroid/icu/util/TimeZone;
+HSPLandroid/icu/util/TimeZone$SystemTimeZoneType;-><init>(Ljava/lang/String;I)V
+HSPLandroid/icu/util/TimeZone$SystemTimeZoneType;->values()[Landroid/icu/util/TimeZone$SystemTimeZoneType;
+HSPLandroid/icu/util/TimeZone;-><init>(Ljava/lang/String;)V
+HSPLandroid/icu/util/TimeZone;->clearCachedDefault()V
+HSPLandroid/icu/util/TimeZone;->cloneAsThawed()Landroid/icu/util/TimeZone;
+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(IIIIII)I
+HSPLandroid/icu/util/TimeZone;->getOffset(JZ[I)V
+HSPLandroid/icu/util/TimeZone;->getRawOffset()I
+HSPLandroid/icu/util/TimeZone;->getTimeZone(Ljava/lang/String;IZ)Landroid/icu/util/TimeZone;
+HSPLandroid/icu/util/TimeZone;->inDaylightTime(Ljava/util/Date;)Z
+HSPLandroid/icu/util/TimeZone;->setID(Ljava/lang/String;)V
+HSPLandroid/icu/util/TimeZone;->setRawOffset(I)V
+HSPLandroid/icu/util/TimeZone;->useDaylightTime()Z
+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;->-getandroid-icu-util-ULocale$CategorySwitchesValues()[I
+HSPLandroid/icu/util/ULocale$JDKLocaleHelper;->getDefault(Landroid/icu/util/ULocale$Category;)Ljava/util/Locale;
+HSPLandroid/icu/util/ULocale$JDKLocaleHelper;->hasLocaleCategories()Z
+HSPLandroid/icu/util/ULocale$JDKLocaleHelper;->toLocale(Landroid/icu/util/ULocale;)Ljava/util/Locale;
+HSPLandroid/icu/util/ULocale$JDKLocaleHelper;->toLocale7(Landroid/icu/util/ULocale;)Ljava/util/Locale;
+HSPLandroid/icu/util/ULocale$JDKLocaleHelper;->toULocale(Ljava/util/Locale;)Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/ULocale$JDKLocaleHelper;->toULocale7(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;)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;->canonicalize(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->createCanonical(Ljava/lang/String;)Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/ULocale;->createLikelySubtagsString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->createTagString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->createTagString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->equals(Ljava/lang/Object;)Z
+HSPLandroid/icu/util/ULocale;->forLocale(Ljava/util/Locale;)Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/ULocale;->getBaseName()Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getBaseName(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getCountry()Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getDefault()Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/ULocale;->getDefault(Landroid/icu/util/ULocale$Category;)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;->initCANONICALIZE_MAP()V
+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;->-getandroid-icu-util-UResourceBundle$RootTypeSwitchesValues()[I
+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;->getBaseName()Ljava/lang/String;
+HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/util/UResourceBundle;->getIterator()Landroid/icu/util/UResourceBundleIterator;
+HSPLandroid/icu/util/UResourceBundle;->getLocaleID()Ljava/lang/String;
+HSPLandroid/icu/util/UResourceBundle;->getParent()Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/util/UResourceBundle;->getRootType(Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/util/UResourceBundle$RootType;
+HSPLandroid/icu/util/UResourceBundle;->getULocale()Landroid/icu/util/ULocale;
+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/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
+HSPLandroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;-><init>(Landroid/inputmethodservice/AbstractInputMethodService;)V
+HSPLandroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;->setEnabled(Z)V
+HSPLandroid/inputmethodservice/AbstractInputMethodService;-><init>()V
+HSPLandroid/inputmethodservice/AbstractInputMethodService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HSPLandroid/inputmethodservice/AbstractInputMethodService;->onCreateInputMethodInterface()Landroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl;
+HSPLandroid/inputmethodservice/AbstractInputMethodService;->onCreateInputMethodSessionInterface()Landroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;
+HSPLandroid/inputmethodservice/IInputMethodSessionWrapper$ImeInputEventReceiver;-><init>(Landroid/inputmethodservice/IInputMethodSessionWrapper;Landroid/view/InputChannel;Landroid/os/Looper;)V
+HSPLandroid/inputmethodservice/IInputMethodSessionWrapper;-><init>(Landroid/content/Context;Landroid/view/inputmethod/InputMethodSession;Landroid/view/InputChannel;)V
+HSPLandroid/inputmethodservice/IInputMethodSessionWrapper;->getInternalInputMethodSession()Landroid/view/inputmethod/InputMethodSession;
+HSPLandroid/inputmethodservice/IInputMethodWrapper$InputMethodSessionCallbackWrapper;-><init>(Landroid/content/Context;Landroid/view/InputChannel;Lcom/android/internal/view/IInputSessionCallback;)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;->attachToken(Landroid/os/IBinder;)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
+HSPLandroid/inputmethodservice/IInputMethodWrapper;->setSessionEnabled(Lcom/android/internal/view/IInputMethodSession;Z)V
+HSPLandroid/inputmethodservice/IInputMethodWrapper;->startInput(Landroid/os/IBinder;Lcom/android/internal/view/IInputContext;ILandroid/view/inputmethod/EditorInfo;Z)V
+HSPLandroid/inputmethodservice/InputMethodService$1;-><init>(Landroid/inputmethodservice/InputMethodService;)V
+HSPLandroid/inputmethodservice/InputMethodService$2;-><init>(Landroid/inputmethodservice/InputMethodService;)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;)V
+HSPLandroid/inputmethodservice/InputMethodService$InputMethodImpl;->startInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V
+HSPLandroid/inputmethodservice/InputMethodService$InputMethodSessionImpl;-><init>(Landroid/inputmethodservice/InputMethodService;)V
+HSPLandroid/inputmethodservice/InputMethodService$Insets;-><init>()V
+HSPLandroid/inputmethodservice/InputMethodService$SettingsObserver;->-wrap0(Landroid/inputmethodservice/InputMethodService$SettingsObserver;)Z
+HSPLandroid/inputmethodservice/InputMethodService$SettingsObserver;-><init>(Landroid/inputmethodservice/InputMethodService;)V
+HSPLandroid/inputmethodservice/InputMethodService$SettingsObserver;->createAndRegister(Landroid/inputmethodservice/InputMethodService;)Landroid/inputmethodservice/InputMethodService$SettingsObserver;
+HSPLandroid/inputmethodservice/InputMethodService$SettingsObserver;->shouldShowImeWithHardKeyboard()Z
+HSPLandroid/inputmethodservice/InputMethodService;->-set0(Landroid/inputmethodservice/InputMethodService;Landroid/os/IBinder;)Landroid/os/IBinder;
+HSPLandroid/inputmethodservice/InputMethodService;-><init>()V
+HSPLandroid/inputmethodservice/InputMethodService;->doFinishInput()V
+HSPLandroid/inputmethodservice/InputMethodService;->doStartInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;Z)V
+HSPLandroid/inputmethodservice/InputMethodService;->getCandidatesHiddenVisibility()I
+HSPLandroid/inputmethodservice/InputMethodService;->initViews()V
+HSPLandroid/inputmethodservice/InputMethodService;->initialize()V
+HSPLandroid/inputmethodservice/InputMethodService;->isExtractViewShown()Z
+HSPLandroid/inputmethodservice/InputMethodService;->onBindInput()V
+HSPLandroid/inputmethodservice/InputMethodService;->onCreate()V
+HSPLandroid/inputmethodservice/InputMethodService;->onCreateInputMethodInterface()Landroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl;
+HSPLandroid/inputmethodservice/InputMethodService;->onCreateInputMethodSessionInterface()Landroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;
+HSPLandroid/inputmethodservice/InputMethodService;->onEvaluateInputViewShown()Z
+HSPLandroid/inputmethodservice/InputMethodService;->onInitializeInterface()V
+HSPLandroid/inputmethodservice/InputMethodService;->onStartInput(Landroid/view/inputmethod/EditorInfo;Z)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
+HSPLandroid/inputmethodservice/SoftInputWindow;->initDockWindow()V
+HSPLandroid/inputmethodservice/SoftInputWindow;->setToken(Landroid/os/IBinder;)V
+HSPLandroid/inputmethodservice/SoftInputWindow;->updateWidthHeight(Landroid/view/WindowManager$LayoutParams;)V
+HSPLandroid/location/BatchedLocationCallbackTransport$CallbackTransport;-><init>(Landroid/location/BatchedLocationCallbackTransport;)V
+HSPLandroid/location/BatchedLocationCallbackTransport$CallbackTransport;-><init>(Landroid/location/BatchedLocationCallbackTransport;Landroid/location/BatchedLocationCallbackTransport$CallbackTransport;)V
+HSPLandroid/location/BatchedLocationCallbackTransport;-><init>(Landroid/content/Context;Landroid/location/ILocationManager;)V
+HSPLandroid/location/Geocoder;-><init>(Landroid/content/Context;)V
+HSPLandroid/location/Geocoder;-><init>(Landroid/content/Context;Ljava/util/Locale;)V
+HSPLandroid/location/Geocoder;->isPresent()Z
+HSPLandroid/location/GeocoderParams$1;-><init>()V
+HSPLandroid/location/GeocoderParams;-><init>(Landroid/content/Context;Ljava/util/Locale;)V
+HSPLandroid/location/GnssMeasurementCallbackTransport$ListenerTransport;-><init>(Landroid/location/GnssMeasurementCallbackTransport;)V
+HSPLandroid/location/GnssMeasurementCallbackTransport$ListenerTransport;-><init>(Landroid/location/GnssMeasurementCallbackTransport;Landroid/location/GnssMeasurementCallbackTransport$ListenerTransport;)V
+HSPLandroid/location/GnssMeasurementCallbackTransport;-><init>(Landroid/content/Context;Landroid/location/ILocationManager;)V
+HSPLandroid/location/GnssNavigationMessageCallbackTransport$ListenerTransport;-><init>(Landroid/location/GnssNavigationMessageCallbackTransport;)V
+HSPLandroid/location/GnssNavigationMessageCallbackTransport$ListenerTransport;-><init>(Landroid/location/GnssNavigationMessageCallbackTransport;Landroid/location/GnssNavigationMessageCallbackTransport$ListenerTransport;)V
+HSPLandroid/location/GnssNavigationMessageCallbackTransport;-><init>(Landroid/content/Context;Landroid/location/ILocationManager;)V
+HSPLandroid/location/GnssStatus$Callback;-><init>()V
+HSPLandroid/location/GnssStatus;-><init>(I[I[F[F[F[F)V
+HSPLandroid/location/GpsSatellite;-><init>(I)V
+HSPLandroid/location/GpsSatellite;->getSnr()F
+HSPLandroid/location/GpsStatus$1;-><init>(Landroid/location/GpsStatus;)V
+HSPLandroid/location/GpsStatus$1;->iterator()Ljava/util/Iterator;
+HSPLandroid/location/GpsStatus$SatelliteIterator;-><init>(Landroid/location/GpsStatus;)V
+HSPLandroid/location/GpsStatus$SatelliteIterator;->hasNext()Z
+HSPLandroid/location/GpsStatus$SatelliteIterator;->next()Landroid/location/GpsSatellite;
+HSPLandroid/location/GpsStatus$SatelliteIterator;->next()Ljava/lang/Object;
+HSPLandroid/location/GpsStatus;->-get0(Landroid/location/GpsStatus;)Landroid/util/SparseArray;
+HSPLandroid/location/GpsStatus;-><init>()V
+HSPLandroid/location/GpsStatus;->clearSatellites()V
+HSPLandroid/location/GpsStatus;->getSatellites()Ljava/lang/Iterable;
+HSPLandroid/location/GpsStatus;->setStatus(I[I[F[F[F)V
+HSPLandroid/location/GpsStatus;->setStatus(Landroid/location/GnssStatus;I)V
+HSPLandroid/location/IBatchedLocationCallback$Stub;-><init>()V
+HSPLandroid/location/IBatchedLocationCallback;->onLocationBatch(Ljava/util/List;)V
+HSPLandroid/location/IGnssMeasurementsListener$Stub;-><init>()V
+HSPLandroid/location/IGnssMeasurementsListener;->onGnssMeasurementsReceived(Landroid/location/GnssMeasurementsEvent;)V
+HSPLandroid/location/IGnssMeasurementsListener;->onStatusChanged(I)V
+HSPLandroid/location/IGnssNavigationMessageListener$Stub;-><init>()V
+HSPLandroid/location/IGnssNavigationMessageListener;->onGnssNavigationMessageReceived(Landroid/location/GnssNavigationMessage;)V
+HSPLandroid/location/IGnssNavigationMessageListener;->onStatusChanged(I)V
+HSPLandroid/location/IGnssStatusListener$Stub;-><init>()V
+HSPLandroid/location/IGnssStatusListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/location/IGnssStatusListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/location/IGnssStatusListener;->onFirstFix(I)V
+HSPLandroid/location/IGnssStatusListener;->onGnssStarted()V
+HSPLandroid/location/IGnssStatusListener;->onGnssStopped()V
+HSPLandroid/location/IGnssStatusListener;->onNmeaReceived(JLjava/lang/String;)V
+HSPLandroid/location/IGnssStatusListener;->onSvStatusChanged(I[I[F[F[F[F)V
+HSPLandroid/location/ILocationListener$Stub;-><init>()V
+HSPLandroid/location/ILocationListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/location/ILocationListener;->onLocationChanged(Landroid/location/Location;)V
+HSPLandroid/location/ILocationListener;->onProviderDisabled(Ljava/lang/String;)V
+HSPLandroid/location/ILocationListener;->onProviderEnabled(Ljava/lang/String;)V
+HSPLandroid/location/ILocationListener;->onStatusChanged(Ljava/lang/String;ILandroid/os/Bundle;)V
+HSPLandroid/location/ILocationManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/location/ILocationManager$Stub$Proxy;->geocoderIsPresent()Z
+HSPLandroid/location/ILocationManager$Stub$Proxy;->getAllProviders()Ljava/util/List;
+HSPLandroid/location/ILocationManager$Stub$Proxy;->getLastLocation(Landroid/location/LocationRequest;Ljava/lang/String;)Landroid/location/Location;
+HSPLandroid/location/ILocationManager$Stub$Proxy;->getProviders(Landroid/location/Criteria;Z)Ljava/util/List;
+HSPLandroid/location/ILocationManager$Stub$Proxy;->isProviderEnabled(Ljava/lang/String;)Z
+HSPLandroid/location/ILocationManager$Stub$Proxy;->registerGnssStatusCallback(Landroid/location/IGnssStatusListener;Ljava/lang/String;)Z
+HSPLandroid/location/ILocationManager$Stub$Proxy;->requestLocationUpdates(Landroid/location/LocationRequest;Landroid/location/ILocationListener;Landroid/app/PendingIntent;Ljava/lang/String;)V
+HSPLandroid/location/ILocationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationManager;
+HSPLandroid/location/ILocationManager;->addGnssBatchingCallback(Landroid/location/IBatchedLocationCallback;Ljava/lang/String;)Z
+HSPLandroid/location/ILocationManager;->addGnssMeasurementsListener(Landroid/location/IGnssMeasurementsListener;Ljava/lang/String;)Z
+HSPLandroid/location/ILocationManager;->addGnssNavigationMessageListener(Landroid/location/IGnssNavigationMessageListener;Ljava/lang/String;)Z
+HSPLandroid/location/ILocationManager;->addTestProvider(Ljava/lang/String;Lcom/android/internal/location/ProviderProperties;Ljava/lang/String;)V
+HSPLandroid/location/ILocationManager;->clearTestProviderEnabled(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/location/ILocationManager;->clearTestProviderLocation(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/location/ILocationManager;->clearTestProviderStatus(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/location/ILocationManager;->flushGnssBatch(Ljava/lang/String;)V
+HSPLandroid/location/ILocationManager;->geocoderIsPresent()Z
+HSPLandroid/location/ILocationManager;->getAllProviders()Ljava/util/List;
+HSPLandroid/location/ILocationManager;->getBackgroundThrottlingWhitelist()[Ljava/lang/String;
+HSPLandroid/location/ILocationManager;->getBestProvider(Landroid/location/Criteria;Z)Ljava/lang/String;
+HSPLandroid/location/ILocationManager;->getFromLocation(DDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String;
+HSPLandroid/location/ILocationManager;->getFromLocationName(Ljava/lang/String;DDDDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String;
+HSPLandroid/location/ILocationManager;->getGnssBatchSize(Ljava/lang/String;)I
+HSPLandroid/location/ILocationManager;->getGnssYearOfHardware()I
+HSPLandroid/location/ILocationManager;->getLastLocation(Landroid/location/LocationRequest;Ljava/lang/String;)Landroid/location/Location;
+HSPLandroid/location/ILocationManager;->getNetworkProviderPackage()Ljava/lang/String;
+HSPLandroid/location/ILocationManager;->getProviderProperties(Ljava/lang/String;)Lcom/android/internal/location/ProviderProperties;
+HSPLandroid/location/ILocationManager;->getProviders(Landroid/location/Criteria;Z)Ljava/util/List;
+HSPLandroid/location/ILocationManager;->isProviderEnabled(Ljava/lang/String;)Z
+HSPLandroid/location/ILocationManager;->locationCallbackFinished(Landroid/location/ILocationListener;)V
+HSPLandroid/location/ILocationManager;->providerMeetsCriteria(Ljava/lang/String;Landroid/location/Criteria;)Z
+HSPLandroid/location/ILocationManager;->registerGnssStatusCallback(Landroid/location/IGnssStatusListener;Ljava/lang/String;)Z
+HSPLandroid/location/ILocationManager;->removeGeofence(Landroid/location/Geofence;Landroid/app/PendingIntent;Ljava/lang/String;)V
+HSPLandroid/location/ILocationManager;->removeGnssBatchingCallback()V
+HSPLandroid/location/ILocationManager;->removeGnssMeasurementsListener(Landroid/location/IGnssMeasurementsListener;)V
+HSPLandroid/location/ILocationManager;->removeGnssNavigationMessageListener(Landroid/location/IGnssNavigationMessageListener;)V
+HSPLandroid/location/ILocationManager;->removeTestProvider(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/location/ILocationManager;->removeUpdates(Landroid/location/ILocationListener;Landroid/app/PendingIntent;Ljava/lang/String;)V
+HSPLandroid/location/ILocationManager;->reportLocation(Landroid/location/Location;Z)V
+HSPLandroid/location/ILocationManager;->reportLocationBatch(Ljava/util/List;)V
+HSPLandroid/location/ILocationManager;->requestGeofence(Landroid/location/LocationRequest;Landroid/location/Geofence;Landroid/app/PendingIntent;Ljava/lang/String;)V
+HSPLandroid/location/ILocationManager;->requestLocationUpdates(Landroid/location/LocationRequest;Landroid/location/ILocationListener;Landroid/app/PendingIntent;Ljava/lang/String;)V
+HSPLandroid/location/ILocationManager;->sendExtraCommand(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Z
+HSPLandroid/location/ILocationManager;->sendNiResponse(II)Z
+HSPLandroid/location/ILocationManager;->setTestProviderEnabled(Ljava/lang/String;ZLjava/lang/String;)V
+HSPLandroid/location/ILocationManager;->setTestProviderLocation(Ljava/lang/String;Landroid/location/Location;Ljava/lang/String;)V
+HSPLandroid/location/ILocationManager;->setTestProviderStatus(Ljava/lang/String;ILandroid/os/Bundle;JLjava/lang/String;)V
+HSPLandroid/location/ILocationManager;->startGnssBatch(JZLjava/lang/String;)Z
+HSPLandroid/location/ILocationManager;->stopGnssBatch()Z
+HSPLandroid/location/ILocationManager;->unregisterGnssStatusCallback(Landroid/location/IGnssStatusListener;)V
+HSPLandroid/location/LocalListenerHelper;-><init>(Landroid/content/Context;Ljava/lang/String;)V
+HSPLandroid/location/Location$1;-><init>()V
+HSPLandroid/location/Location$1;->initialValue()Landroid/location/Location$BearingDistanceCache;
+HSPLandroid/location/Location$1;->initialValue()Ljava/lang/Object;
+HSPLandroid/location/Location$2;-><init>()V
+HSPLandroid/location/Location$2;->createFromParcel(Landroid/os/Parcel;)Landroid/location/Location;
+HSPLandroid/location/Location$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/location/Location$BearingDistanceCache;->-get0(Landroid/location/Location$BearingDistanceCache;)F
+HSPLandroid/location/Location$BearingDistanceCache;->-get3(Landroid/location/Location$BearingDistanceCache;)D
+HSPLandroid/location/Location$BearingDistanceCache;->-set0(Landroid/location/Location$BearingDistanceCache;F)F
+HSPLandroid/location/Location$BearingDistanceCache;->-set1(Landroid/location/Location$BearingDistanceCache;F)F
+HSPLandroid/location/Location$BearingDistanceCache;->-set2(Landroid/location/Location$BearingDistanceCache;F)F
+HSPLandroid/location/Location$BearingDistanceCache;->-set3(Landroid/location/Location$BearingDistanceCache;D)D
+HSPLandroid/location/Location$BearingDistanceCache;->-set4(Landroid/location/Location$BearingDistanceCache;D)D
+HSPLandroid/location/Location$BearingDistanceCache;->-set5(Landroid/location/Location$BearingDistanceCache;D)D
+HSPLandroid/location/Location$BearingDistanceCache;->-set6(Landroid/location/Location$BearingDistanceCache;D)D
+HSPLandroid/location/Location$BearingDistanceCache;-><init>()V
+HSPLandroid/location/Location$BearingDistanceCache;-><init>(Landroid/location/Location$BearingDistanceCache;)V
+HSPLandroid/location/Location;->-set0(Landroid/location/Location;D)D
+HSPLandroid/location/Location;->-set1(Landroid/location/Location;F)F
+HSPLandroid/location/Location;->-set10(Landroid/location/Location;F)F
+HSPLandroid/location/Location;->-set11(Landroid/location/Location;J)J
+HSPLandroid/location/Location;->-set12(Landroid/location/Location;F)F
+HSPLandroid/location/Location;->-set2(Landroid/location/Location;F)F
+HSPLandroid/location/Location;->-set3(Landroid/location/Location;J)J
+HSPLandroid/location/Location;->-set4(Landroid/location/Location;Landroid/os/Bundle;)Landroid/os/Bundle;
+HSPLandroid/location/Location;->-set5(Landroid/location/Location;B)B
+HSPLandroid/location/Location;->-set6(Landroid/location/Location;F)F
+HSPLandroid/location/Location;->-set7(Landroid/location/Location;D)D
+HSPLandroid/location/Location;->-set8(Landroid/location/Location;D)D
+HSPLandroid/location/Location;->-set9(Landroid/location/Location;F)F
+HSPLandroid/location/Location;-><init>(Ljava/lang/String;)V
+HSPLandroid/location/Location;->computeDistanceAndBearing(DDDDLandroid/location/Location$BearingDistanceCache;)V
+HSPLandroid/location/Location;->distanceBetween(DDDD[F)V
+HSPLandroid/location/Location;->distanceTo(Landroid/location/Location;)F
+HSPLandroid/location/Location;->getAccuracy()F
+HSPLandroid/location/Location;->getAltitude()D
+HSPLandroid/location/Location;->getElapsedRealtimeNanos()J
+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;->getTime()J
+HSPLandroid/location/Location;->hasAccuracy()Z
+HSPLandroid/location/Location;->hasAltitude()Z
+HSPLandroid/location/Location;->hasBearing()Z
+HSPLandroid/location/Location;->hasSpeed()Z
+HSPLandroid/location/Location;->setAccuracy(F)V
+HSPLandroid/location/Location;->setAltitude(D)V
+HSPLandroid/location/Location;->setExtras(Landroid/os/Bundle;)V
+HSPLandroid/location/Location;->setLatitude(D)V
+HSPLandroid/location/Location;->setLongitude(D)V
+HSPLandroid/location/Location;->setTime(J)V
+HSPLandroid/location/LocationListener;->onLocationChanged(Landroid/location/Location;)V
+HSPLandroid/location/LocationListener;->onProviderDisabled(Ljava/lang/String;)V
+HSPLandroid/location/LocationListener;->onProviderEnabled(Ljava/lang/String;)V
+HSPLandroid/location/LocationListener;->onStatusChanged(Ljava/lang/String;ILandroid/os/Bundle;)V
+HSPLandroid/location/LocationManager$GnssStatusListenerTransport$1;-><init>(Landroid/location/LocationManager$GnssStatusListenerTransport;)V
+HSPLandroid/location/LocationManager$GnssStatusListenerTransport$1;->onSatelliteStatusChanged(Landroid/location/GnssStatus;)V
+HSPLandroid/location/LocationManager$GnssStatusListenerTransport$1;->onStarted()V
+HSPLandroid/location/LocationManager$GnssStatusListenerTransport$GnssHandler;-><init>(Landroid/location/LocationManager$GnssStatusListenerTransport;Landroid/os/Handler;)V
+HSPLandroid/location/LocationManager$GnssStatusListenerTransport$GnssHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/location/LocationManager$GnssStatusListenerTransport;->-get0(Landroid/location/LocationManager$GnssStatusListenerTransport;)Landroid/location/GnssStatus$Callback;
+HSPLandroid/location/LocationManager$GnssStatusListenerTransport;->-get2(Landroid/location/LocationManager$GnssStatusListenerTransport;)Landroid/location/GpsStatus$Listener;
+HSPLandroid/location/LocationManager$GnssStatusListenerTransport;-><init>(Landroid/location/LocationManager;Landroid/location/GpsStatus$Listener;)V
+HSPLandroid/location/LocationManager$GnssStatusListenerTransport;-><init>(Landroid/location/LocationManager;Landroid/location/GpsStatus$Listener;Landroid/os/Handler;)V
+HSPLandroid/location/LocationManager$GnssStatusListenerTransport;->onGnssStarted()V
+HSPLandroid/location/LocationManager$GnssStatusListenerTransport;->onNmeaReceived(JLjava/lang/String;)V
+HSPLandroid/location/LocationManager$GnssStatusListenerTransport;->onSvStatusChanged(I[I[F[F[F[F)V
+HSPLandroid/location/LocationManager$ListenerTransport$1;-><init>(Landroid/location/LocationManager$ListenerTransport;)V
+HSPLandroid/location/LocationManager$ListenerTransport;-><init>(Landroid/location/LocationManager;Landroid/location/LocationListener;Landroid/os/Looper;)V
+HSPLandroid/location/LocationManager;->-get0(Landroid/location/LocationManager;)Landroid/location/GnssStatus;
+HSPLandroid/location/LocationManager;->-set0(Landroid/location/LocationManager;Landroid/location/GnssStatus;)Landroid/location/GnssStatus;
+HSPLandroid/location/LocationManager;-><init>(Landroid/content/Context;Landroid/location/ILocationManager;)V
+HSPLandroid/location/LocationManager;->addGpsStatusListener(Landroid/location/GpsStatus$Listener;)Z
+HSPLandroid/location/LocationManager;->checkListener(Landroid/location/LocationListener;)V
+HSPLandroid/location/LocationManager;->checkProvider(Ljava/lang/String;)V
+HSPLandroid/location/LocationManager;->getAllProviders()Ljava/util/List;
+HSPLandroid/location/LocationManager;->getGpsStatus(Landroid/location/GpsStatus;)Landroid/location/GpsStatus;
+HSPLandroid/location/LocationManager;->getLastKnownLocation(Ljava/lang/String;)Landroid/location/Location;
+HSPLandroid/location/LocationManager;->getProviders(Z)Ljava/util/List;
+HSPLandroid/location/LocationManager;->isProviderEnabled(Ljava/lang/String;)Z
+HSPLandroid/location/LocationManager;->requestLocationUpdates(Landroid/location/LocationRequest;Landroid/location/LocationListener;Landroid/os/Looper;Landroid/app/PendingIntent;)V
+HSPLandroid/location/LocationManager;->requestLocationUpdates(Ljava/lang/String;JFLandroid/location/LocationListener;)V
+HSPLandroid/location/LocationManager;->wrapListener(Landroid/location/LocationListener;Landroid/os/Looper;)Landroid/location/LocationManager$ListenerTransport;
+HSPLandroid/location/LocationRequest$1;-><init>()V
+HSPLandroid/location/LocationRequest;-><init>()V
+HSPLandroid/location/LocationRequest;->checkDisplacement(F)V
+HSPLandroid/location/LocationRequest;->checkInterval(J)V
+HSPLandroid/location/LocationRequest;->checkProvider(Ljava/lang/String;)V
+HSPLandroid/location/LocationRequest;->checkQuality(I)V
+HSPLandroid/location/LocationRequest;->createFromDeprecatedProvider(Ljava/lang/String;JFZ)Landroid/location/LocationRequest;
+HSPLandroid/location/LocationRequest;->setFastestInterval(J)Landroid/location/LocationRequest;
+HSPLandroid/location/LocationRequest;->setInterval(J)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;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/media/AudioAttributes$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/AudioAttributes;
+HSPLandroid/media/AudioAttributes$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/media/AudioAttributes$Builder;-><init>()V
+HSPLandroid/media/AudioAttributes$Builder;->build()Landroid/media/AudioAttributes;
+HSPLandroid/media/AudioAttributes$Builder;->setContentType(I)Landroid/media/AudioAttributes$Builder;
+HSPLandroid/media/AudioAttributes$Builder;->setFlags(I)Landroid/media/AudioAttributes$Builder;
+HSPLandroid/media/AudioAttributes$Builder;->setInternalLegacyStreamType(I)Landroid/media/AudioAttributes$Builder;
+HSPLandroid/media/AudioAttributes$Builder;->setUsage(I)Landroid/media/AudioAttributes$Builder;
+HSPLandroid/media/AudioAttributes;->-set1(Landroid/media/AudioAttributes;I)I
+HSPLandroid/media/AudioAttributes;->-set2(Landroid/media/AudioAttributes;I)I
+HSPLandroid/media/AudioAttributes;->-set3(Landroid/media/AudioAttributes;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/media/AudioAttributes;->-set4(Landroid/media/AudioAttributes;I)I
+HSPLandroid/media/AudioAttributes;->-set5(Landroid/media/AudioAttributes;Ljava/util/HashSet;)Ljava/util/HashSet;
+HSPLandroid/media/AudioAttributes;->-set6(Landroid/media/AudioAttributes;I)I
+HSPLandroid/media/AudioAttributes;->-wrap0(I)I
+HSPLandroid/media/AudioAttributes;-><init>()V
+HSPLandroid/media/AudioAttributes;-><init>(Landroid/media/AudioAttributes;)V
+HSPLandroid/media/AudioAttributes;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/media/AudioAttributes;-><init>(Landroid/os/Parcel;Landroid/media/AudioAttributes;)V
+HSPLandroid/media/AudioAttributes;->getAllFlags()I
+HSPLandroid/media/AudioAttributes;->getFlags()I
+HSPLandroid/media/AudioAttributes;->getUsage()I
+HSPLandroid/media/AudioAttributes;->getVolumeControlStream()I
+HSPLandroid/media/AudioAttributes;->toVolumeStreamType(ZLandroid/media/AudioAttributes;)I
+HSPLandroid/media/AudioAttributes;->usageForStreamType(I)I
+HSPLandroid/media/AudioAttributes;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/media/AudioFormat$Builder;-><init>()V
+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;
+HSPLandroid/media/AudioManager$1;-><init>(Landroid/media/AudioManager;)V
+HSPLandroid/media/AudioManager$2;-><init>(Landroid/media/AudioManager;)V
+HSPLandroid/media/AudioManager$3;-><init>(Landroid/media/AudioManager;)V
+HSPLandroid/media/AudioManager$OnAudioFocusChangeListener;->onAudioFocusChange(I)V
+HSPLandroid/media/AudioManager$ServiceEventHandlerDelegate$1;-><init>(Landroid/media/AudioManager$ServiceEventHandlerDelegate;Landroid/os/Looper;)V
+HSPLandroid/media/AudioManager$ServiceEventHandlerDelegate;-><init>(Landroid/media/AudioManager;Landroid/os/Handler;)V
+HSPLandroid/media/AudioManager;-><init>(Landroid/content/Context;)V
+HSPLandroid/media/AudioManager;->getContext()Landroid/content/Context;
+HSPLandroid/media/AudioManager;->getDevicesForStream(I)I
+HSPLandroid/media/AudioManager;->getLastAudibleStreamVolume(I)I
+HSPLandroid/media/AudioManager;->getRingerMode()I
+HSPLandroid/media/AudioManager;->getRingerModeInternal()I
+HSPLandroid/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;->getStreamVolume(I)I
+HSPLandroid/media/AudioManager;->isBluetoothA2dpOn()Z
+HSPLandroid/media/AudioManager;->isBluetoothScoOn()Z
+HSPLandroid/media/AudioManager;->isMusicActive()Z
+HSPLandroid/media/AudioManager;->isStreamAffectedByMute(I)Z
+HSPLandroid/media/AudioManager;->isStreamMute(I)Z
+HSPLandroid/media/AudioManager;->isVolumeFixed()Z
+HSPLandroid/media/AudioManager;->isWiredHeadsetOn()Z
+HSPLandroid/media/AudioManager;->playSoundEffect(I)V
+HSPLandroid/media/AudioManager;->querySoundEffectsEnabled(I)Z
+HSPLandroid/media/AudioManager;->setContext(Landroid/content/Context;)V
+HSPLandroid/media/AudioManager;->setParameter(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/media/AudioManager;->setParameters(Ljava/lang/String;)V
+HSPLandroid/media/AudioManager;->setVolumeController(Landroid/media/IVolumeController;)V
+HSPLandroid/media/AudioManager;->setVolumePolicy(Landroid/media/VolumePolicy;)V
+HSPLandroid/media/AudioPortEventHandler;-><init>()V
+HSPLandroid/media/AudioRoutesInfo$1;-><init>()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/os/Parcel;)V
+HSPLandroid/media/AudioSystem$ErrorCallback;->onError(I)V
+HSPLandroid/media/AudioSystem;->getPlatformType(Landroid/content/Context;)I
+HSPLandroid/media/AudioSystem;->isSingleVolume(Landroid/content/Context;)Z
+HSPLandroid/media/AudioSystem;->setErrorCallback(Landroid/media/AudioSystem$ErrorCallback;)V
+HSPLandroid/media/AudioSystem;->streamToString(I)Ljava/lang/String;
+HSPLandroid/media/AudioTrack;->getNativeOutputSampleRate(I)I
+HSPLandroid/media/BufferingParams$1;-><init>()V
+HSPLandroid/media/CamcorderProfile;-><init>(IIIIIIIIIIII)V
+HSPLandroid/media/CamcorderProfile;->get(II)Landroid/media/CamcorderProfile;
+HSPLandroid/media/CamcorderProfile;->hasProfile(II)Z
+HSPLandroid/media/IAudioFocusDispatcher$Stub;-><init>()V
+HSPLandroid/media/IAudioFocusDispatcher;->dispatchAudioFocusChange(ILjava/lang/String;)V
+HSPLandroid/media/IAudioRoutesObserver$Stub;-><init>()V
+HSPLandroid/media/IAudioRoutesObserver$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/media/IAudioRoutesObserver;->dispatchAudioRoutesChanged(Landroid/media/AudioRoutesInfo;)V
+HSPLandroid/media/IAudioService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/media/IAudioService$Stub$Proxy;->getLastAudibleStreamVolume(I)I
+HSPLandroid/media/IAudioService$Stub$Proxy;->getRingerModeExternal()I
+HSPLandroid/media/IAudioService$Stub$Proxy;->getRingerModeInternal()I
+HSPLandroid/media/IAudioService$Stub$Proxy;->getRingtonePlayer()Landroid/media/IRingtonePlayer;
+HSPLandroid/media/IAudioService$Stub$Proxy;->getStreamMaxVolume(I)I
+HSPLandroid/media/IAudioService$Stub$Proxy;->getStreamMinVolume(I)I
+HSPLandroid/media/IAudioService$Stub$Proxy;->getStreamVolume(I)I
+HSPLandroid/media/IAudioService$Stub$Proxy;->isBluetoothScoOn()Z
+HSPLandroid/media/IAudioService$Stub$Proxy;->isCameraSoundForced()Z
+HSPLandroid/media/IAudioService$Stub$Proxy;->isStreamAffectedByMute(I)Z
+HSPLandroid/media/IAudioService$Stub$Proxy;->isStreamMute(I)Z
+HSPLandroid/media/IAudioService$Stub$Proxy;->playSoundEffect(I)V
+HSPLandroid/media/IAudioService$Stub$Proxy;->playerAttributes(ILandroid/media/AudioAttributes;)V
+HSPLandroid/media/IAudioService$Stub$Proxy;->setRingtonePlayer(Landroid/media/IRingtonePlayer;)V
+HSPLandroid/media/IAudioService$Stub$Proxy;->setVolumeController(Landroid/media/IVolumeController;)V
+HSPLandroid/media/IAudioService$Stub$Proxy;->setVolumePolicy(Landroid/media/VolumePolicy;)V
+HSPLandroid/media/IAudioService$Stub$Proxy;->startWatchingRoutes(Landroid/media/IAudioRoutesObserver;)Landroid/media/AudioRoutesInfo;
+HSPLandroid/media/IAudioService$Stub$Proxy;->trackPlayer(Landroid/media/PlayerBase$PlayerIdCard;)I
+HSPLandroid/media/IAudioService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioService;
+HSPLandroid/media/IAudioService;->abandonAudioFocus(Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Landroid/media/AudioAttributes;Ljava/lang/String;)I
+HSPLandroid/media/IAudioService;->adjustStreamVolume(IIILjava/lang/String;)V
+HSPLandroid/media/IAudioService;->adjustSuggestedStreamVolume(IIILjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/media/IAudioService;->avrcpSupportsAbsoluteVolume(Ljava/lang/String;Z)V
+HSPLandroid/media/IAudioService;->disableRingtoneSync(I)V
+HSPLandroid/media/IAudioService;->disableSafeMediaVolume(Ljava/lang/String;)V
+HSPLandroid/media/IAudioService;->dispatchFocusChange(Landroid/media/AudioFocusInfo;ILandroid/media/audiopolicy/IAudioPolicyCallback;)I
+HSPLandroid/media/IAudioService;->forceRemoteSubmixFullVolume(ZLandroid/os/IBinder;)V
+HSPLandroid/media/IAudioService;->forceVolumeControlStream(ILandroid/os/IBinder;)V
+HSPLandroid/media/IAudioService;->getActivePlaybackConfigurations()Ljava/util/List;
+HSPLandroid/media/IAudioService;->getActiveRecordingConfigurations()Ljava/util/List;
+HSPLandroid/media/IAudioService;->getCurrentAudioFocus()I
+HSPLandroid/media/IAudioService;->getFocusRampTimeMs(ILandroid/media/AudioAttributes;)I
+HSPLandroid/media/IAudioService;->getLastAudibleStreamVolume(I)I
+HSPLandroid/media/IAudioService;->getMode()I
+HSPLandroid/media/IAudioService;->getRingerModeExternal()I
+HSPLandroid/media/IAudioService;->getRingerModeInternal()I
+HSPLandroid/media/IAudioService;->getRingtonePlayer()Landroid/media/IRingtonePlayer;
+HSPLandroid/media/IAudioService;->getStreamMaxVolume(I)I
+HSPLandroid/media/IAudioService;->getStreamMinVolume(I)I
+HSPLandroid/media/IAudioService;->getStreamVolume(I)I
+HSPLandroid/media/IAudioService;->getUiSoundsStreamType()I
+HSPLandroid/media/IAudioService;->getVibrateSetting(I)I
+HSPLandroid/media/IAudioService;->handleBluetoothA2dpDeviceConfigChange(Landroid/bluetooth/BluetoothDevice;)V
+HSPLandroid/media/IAudioService;->isBluetoothA2dpOn()Z
+HSPLandroid/media/IAudioService;->isBluetoothScoOn()Z
+HSPLandroid/media/IAudioService;->isCameraSoundForced()Z
+HSPLandroid/media/IAudioService;->isHdmiSystemAudioSupported()Z
+HSPLandroid/media/IAudioService;->isMasterMute()Z
+HSPLandroid/media/IAudioService;->isSpeakerphoneOn()Z
+HSPLandroid/media/IAudioService;->isStreamAffectedByMute(I)Z
+HSPLandroid/media/IAudioService;->isStreamAffectedByRingerMode(I)Z
+HSPLandroid/media/IAudioService;->isStreamMute(I)Z
+HSPLandroid/media/IAudioService;->isValidRingerMode(I)Z
+HSPLandroid/media/IAudioService;->loadSoundEffects()Z
+HSPLandroid/media/IAudioService;->notifyVolumeControllerVisible(Landroid/media/IVolumeController;Z)V
+HSPLandroid/media/IAudioService;->playSoundEffect(I)V
+HSPLandroid/media/IAudioService;->playSoundEffectVolume(IF)V
+HSPLandroid/media/IAudioService;->playerAttributes(ILandroid/media/AudioAttributes;)V
+HSPLandroid/media/IAudioService;->playerEvent(II)V
+HSPLandroid/media/IAudioService;->playerHasOpPlayAudio(IZ)V
+HSPLandroid/media/IAudioService;->registerAudioPolicy(Landroid/media/audiopolicy/AudioPolicyConfig;Landroid/media/audiopolicy/IAudioPolicyCallback;ZZ)Ljava/lang/String;
+HSPLandroid/media/IAudioService;->registerPlaybackCallback(Landroid/media/IPlaybackConfigDispatcher;)V
+HSPLandroid/media/IAudioService;->registerRecordingCallback(Landroid/media/IRecordingConfigDispatcher;)V
+HSPLandroid/media/IAudioService;->releasePlayer(I)V
+HSPLandroid/media/IAudioService;->reloadAudioSettings()V
+HSPLandroid/media/IAudioService;->requestAudioFocus(Landroid/media/AudioAttributes;ILandroid/os/IBinder;Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Ljava/lang/String;ILandroid/media/audiopolicy/IAudioPolicyCallback;I)I
+HSPLandroid/media/IAudioService;->setBluetoothA2dpDeviceConnectionState(Landroid/bluetooth/BluetoothDevice;II)I
+HSPLandroid/media/IAudioService;->setBluetoothA2dpOn(Z)V
+HSPLandroid/media/IAudioService;->setBluetoothScoOn(Z)V
+HSPLandroid/media/IAudioService;->setFocusPropertiesForPolicy(ILandroid/media/audiopolicy/IAudioPolicyCallback;)I
+HSPLandroid/media/IAudioService;->setHdmiSystemAudioSupported(Z)I
+HSPLandroid/media/IAudioService;->setMasterMute(ZILjava/lang/String;I)V
+HSPLandroid/media/IAudioService;->setMicrophoneMute(ZLjava/lang/String;I)V
+HSPLandroid/media/IAudioService;->setMode(ILandroid/os/IBinder;Ljava/lang/String;)V
+HSPLandroid/media/IAudioService;->setRingerModeExternal(ILjava/lang/String;)V
+HSPLandroid/media/IAudioService;->setRingerModeInternal(ILjava/lang/String;)V
+HSPLandroid/media/IAudioService;->setRingtonePlayer(Landroid/media/IRingtonePlayer;)V
+HSPLandroid/media/IAudioService;->setSpeakerphoneOn(Z)V
+HSPLandroid/media/IAudioService;->setStreamVolume(IIILjava/lang/String;)V
+HSPLandroid/media/IAudioService;->setVibrateSetting(II)V
+HSPLandroid/media/IAudioService;->setVolumeController(Landroid/media/IVolumeController;)V
+HSPLandroid/media/IAudioService;->setVolumePolicy(Landroid/media/VolumePolicy;)V
+HSPLandroid/media/IAudioService;->setWiredDeviceConnectionState(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/media/IAudioService;->shouldVibrate(I)Z
+HSPLandroid/media/IAudioService;->startBluetoothSco(Landroid/os/IBinder;I)V
+HSPLandroid/media/IAudioService;->startBluetoothScoVirtualCall(Landroid/os/IBinder;)V
+HSPLandroid/media/IAudioService;->startWatchingRoutes(Landroid/media/IAudioRoutesObserver;)Landroid/media/AudioRoutesInfo;
+HSPLandroid/media/IAudioService;->stopBluetoothSco(Landroid/os/IBinder;)V
+HSPLandroid/media/IAudioService;->trackPlayer(Landroid/media/PlayerBase$PlayerIdCard;)I
+HSPLandroid/media/IAudioService;->unloadSoundEffects()V
+HSPLandroid/media/IAudioService;->unregisterAudioFocusClient(Ljava/lang/String;)V
+HSPLandroid/media/IAudioService;->unregisterAudioPolicyAsync(Landroid/media/audiopolicy/IAudioPolicyCallback;)V
+HSPLandroid/media/IAudioService;->unregisterPlaybackCallback(Landroid/media/IPlaybackConfigDispatcher;)V
+HSPLandroid/media/IAudioService;->unregisterRecordingCallback(Landroid/media/IRecordingConfigDispatcher;)V
+HSPLandroid/media/IMediaHTTPConnection;->connect(Ljava/lang/String;Ljava/lang/String;)Landroid/os/IBinder;
+HSPLandroid/media/IMediaHTTPConnection;->disconnect()V
+HSPLandroid/media/IMediaHTTPConnection;->getMIMEType()Ljava/lang/String;
+HSPLandroid/media/IMediaHTTPConnection;->getSize()J
+HSPLandroid/media/IMediaHTTPConnection;->getUri()Ljava/lang/String;
+HSPLandroid/media/IMediaHTTPConnection;->readAt(JI)I
+HSPLandroid/media/IMediaRouterClient$Stub;-><init>()V
+HSPLandroid/media/IMediaRouterClient$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/media/IMediaRouterClient;->onRestoreRoute()V
+HSPLandroid/media/IMediaRouterClient;->onStateChanged()V
+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;->setDiscoveryRequest(Landroid/media/IMediaRouterClient;IZ)V
+HSPLandroid/media/IMediaRouterService$Stub$Proxy;->setSelectedRoute(Landroid/media/IMediaRouterClient;Ljava/lang/String;Z)V
+HSPLandroid/media/IMediaRouterService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IMediaRouterService;
+HSPLandroid/media/IMediaRouterService;->getState(Landroid/media/IMediaRouterClient;)Landroid/media/MediaRouterClientState;
+HSPLandroid/media/IMediaRouterService;->isPlaybackActive(Landroid/media/IMediaRouterClient;)Z
+HSPLandroid/media/IMediaRouterService;->registerClientAsUser(Landroid/media/IMediaRouterClient;Ljava/lang/String;I)V
+HSPLandroid/media/IMediaRouterService;->requestSetVolume(Landroid/media/IMediaRouterClient;Ljava/lang/String;I)V
+HSPLandroid/media/IMediaRouterService;->requestUpdateVolume(Landroid/media/IMediaRouterClient;Ljava/lang/String;I)V
+HSPLandroid/media/IMediaRouterService;->setDiscoveryRequest(Landroid/media/IMediaRouterClient;IZ)V
+HSPLandroid/media/IMediaRouterService;->setSelectedRoute(Landroid/media/IMediaRouterClient;Ljava/lang/String;Z)V
+HSPLandroid/media/IMediaRouterService;->unregisterClient(Landroid/media/IMediaRouterClient;)V
+HSPLandroid/media/IPlaybackConfigDispatcher$Stub;-><init>()V
+HSPLandroid/media/IPlaybackConfigDispatcher;->dispatchPlaybackConfigChange(Ljava/util/List;)V
+HSPLandroid/media/IPlayer$Stub;-><init>()V
+HSPLandroid/media/IPlayer$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/media/IPlayer;->applyVolumeShaper(Landroid/media/VolumeShaper$Configuration;Landroid/media/VolumeShaper$Operation;)V
+HSPLandroid/media/IPlayer;->pause()V
+HSPLandroid/media/IPlayer;->setPan(F)V
+HSPLandroid/media/IPlayer;->setStartDelayMs(I)V
+HSPLandroid/media/IPlayer;->setVolume(F)V
+HSPLandroid/media/IPlayer;->start()V
+HSPLandroid/media/IPlayer;->stop()V
+HSPLandroid/media/IRecordingConfigDispatcher$Stub;-><init>()V
+HSPLandroid/media/IRecordingConfigDispatcher;->dispatchRecordingConfigChange(Ljava/util/List;)V
+HSPLandroid/media/IRemoteVolumeController$Stub;-><init>()V
+HSPLandroid/media/IRemoteVolumeController$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/media/IRemoteVolumeController;->remoteVolumeChanged(Landroid/media/session/ISessionController;I)V
+HSPLandroid/media/IRemoteVolumeController;->updateRemoteController(Landroid/media/session/ISessionController;)V
+HSPLandroid/media/IRemoteVolumeObserver$Stub;-><init>()V
+HSPLandroid/media/IRemoteVolumeObserver;->dispatchRemoteVolumeUpdate(II)V
+HSPLandroid/media/IRingtonePlayer$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/media/IRingtonePlayer$Stub;-><init>()V
+HSPLandroid/media/IRingtonePlayer$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/media/IRingtonePlayer$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IRingtonePlayer;
+HSPLandroid/media/IRingtonePlayer;->getTitle(Landroid/net/Uri;)Ljava/lang/String;
+HSPLandroid/media/IRingtonePlayer;->isPlaying(Landroid/os/IBinder;)Z
+HSPLandroid/media/IRingtonePlayer;->openRingtone(Landroid/net/Uri;)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/media/IRingtonePlayer;->play(Landroid/os/IBinder;Landroid/net/Uri;Landroid/media/AudioAttributes;FZ)V
+HSPLandroid/media/IRingtonePlayer;->playAsync(Landroid/net/Uri;Landroid/os/UserHandle;ZLandroid/media/AudioAttributes;)V
+HSPLandroid/media/IRingtonePlayer;->setPlaybackProperties(Landroid/os/IBinder;FZ)V
+HSPLandroid/media/IRingtonePlayer;->stop(Landroid/os/IBinder;)V
+HSPLandroid/media/IRingtonePlayer;->stopAsync()V
+HSPLandroid/media/IVolumeController$Stub;-><init>()V
+HSPLandroid/media/IVolumeController$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/media/IVolumeController;->dismiss()V
+HSPLandroid/media/IVolumeController;->displaySafeVolumeWarning(I)V
+HSPLandroid/media/IVolumeController;->masterMuteChanged(I)V
+HSPLandroid/media/IVolumeController;->setA11yMode(I)V
+HSPLandroid/media/IVolumeController;->setLayoutDirection(I)V
+HSPLandroid/media/IVolumeController;->volumeChanged(II)V
+HSPLandroid/media/Image;-><init>()V
+HSPLandroid/media/Image;->throwISEIfImageIsInvalid()V
+HSPLandroid/media/ImageReader$ListenerHandler;-><init>(Landroid/media/ImageReader;Landroid/os/Looper;)V
+HSPLandroid/media/ImageReader$ListenerHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/media/ImageReader$OnImageAvailableListener;->onImageAvailable(Landroid/media/ImageReader;)V
+HSPLandroid/media/ImageReader$SurfaceImage;->-wrap0(Landroid/media/ImageReader$SurfaceImage;)V
+HSPLandroid/media/ImageReader$SurfaceImage;-><init>(Landroid/media/ImageReader;I)V
+HSPLandroid/media/ImageReader$SurfaceImage;->clearSurfacePlanes()V
+HSPLandroid/media/ImageReader$SurfaceImage;->close()V
+HSPLandroid/media/ImageReader$SurfaceImage;->finalize()V
+HSPLandroid/media/ImageReader$SurfaceImage;->getFormat()I
+HSPLandroid/media/ImageReader$SurfaceImage;->getHeight()I
+HSPLandroid/media/ImageReader$SurfaceImage;->getReader()Landroid/media/ImageReader;
+HSPLandroid/media/ImageReader$SurfaceImage;->getTimestamp()J
+HSPLandroid/media/ImageReader$SurfaceImage;->getWidth()I
+HSPLandroid/media/ImageReader;->-get0(Landroid/media/ImageReader;)Ljava/lang/Object;
+HSPLandroid/media/ImageReader;->-get2(Landroid/media/ImageReader;)Z
+HSPLandroid/media/ImageReader;->-get3(Landroid/media/ImageReader;)Landroid/media/ImageReader$OnImageAvailableListener;
+HSPLandroid/media/ImageReader;->-get4(Landroid/media/ImageReader;)Ljava/lang/Object;
+HSPLandroid/media/ImageReader;->-wrap0(Landroid/media/ImageReader;Landroid/media/Image;)V
+HSPLandroid/media/ImageReader;-><init>(IIIIJ)V
+HSPLandroid/media/ImageReader;->acquireNextImage()Landroid/media/Image;
+HSPLandroid/media/ImageReader;->acquireNextSurfaceImage(Landroid/media/ImageReader$SurfaceImage;)I
+HSPLandroid/media/ImageReader;->close()V
+HSPLandroid/media/ImageReader;->getHeight()I
+HSPLandroid/media/ImageReader;->getImageFormat()I
+HSPLandroid/media/ImageReader;->getMaxImages()I
+HSPLandroid/media/ImageReader;->getSurface()Landroid/view/Surface;
+HSPLandroid/media/ImageReader;->getWidth()I
+HSPLandroid/media/ImageReader;->newInstance(IIII)Landroid/media/ImageReader;
+HSPLandroid/media/ImageReader;->postEventFromNative(Ljava/lang/Object;)V
+HSPLandroid/media/ImageReader;->releaseImage(Landroid/media/Image;)V
+HSPLandroid/media/ImageReader;->setOnImageAvailableListener(Landroid/media/ImageReader$OnImageAvailableListener;Landroid/os/Handler;)V
+HSPLandroid/media/ImageUtils;->getEstimatedNativeAllocBytes(IIII)I
+HSPLandroid/media/ImageUtils;->getNumPlanesForFormat(I)I
+HSPLandroid/media/ImageWriter$ListenerHandler;-><init>(Landroid/media/ImageWriter;Landroid/os/Looper;)V
+HSPLandroid/media/ImageWriter$OnImageReleasedListener;->onImageReleased(Landroid/media/ImageWriter;)V
+HSPLandroid/media/ImageWriter;-><init>(Landroid/view/Surface;II)V
+HSPLandroid/media/ImageWriter;->close()V
+HSPLandroid/media/ImageWriter;->getFormat()I
+HSPLandroid/media/ImageWriter;->getMaxImages()I
+HSPLandroid/media/ImageWriter;->newInstance(Landroid/view/Surface;I)Landroid/media/ImageWriter;
+HSPLandroid/media/ImageWriter;->setOnImageReleasedListener(Landroid/media/ImageWriter$OnImageReleasedListener;Landroid/os/Handler;)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;->init(Landroid/media/MediaFormat;Landroid/media/MediaCodecInfo$CodecCapabilities;)V
+HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->initWithPlatformLimits()V
+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
+HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->setDefaultFormat(Landroid/media/MediaFormat;)V
+HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->supports(Ljava/lang/Integer;Ljava/lang/Integer;)Z
+HSPLandroid/media/MediaCodecInfo$CodecCapabilities;-><init>([Landroid/media/MediaCodecInfo$CodecProfileLevel;[IZILandroid/media/MediaFormat;Landroid/media/MediaFormat;)V
+HSPLandroid/media/MediaCodecInfo$CodecCapabilities;-><init>([Landroid/media/MediaCodecInfo$CodecProfileLevel;[IZILjava/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;
+HSPLandroid/media/MediaCodecInfo$CodecCapabilities;->getMimeType()Ljava/lang/String;
+HSPLandroid/media/MediaCodecInfo$CodecCapabilities;->getValidFeatures()[Landroid/media/MediaCodecInfo$Feature;
+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$CodecProfileLevel;-><init>()V
+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;->init(Landroid/media/MediaFormat;Landroid/media/MediaCodecInfo$CodecCapabilities;)V
+HSPLandroid/media/MediaCodecInfo$EncoderCapabilities;->parseFromInfo(Landroid/media/MediaFormat;)V
+HSPLandroid/media/MediaCodecInfo$EncoderCapabilities;->setDefaultFormat(Landroid/media/MediaFormat;)V
+HSPLandroid/media/MediaCodecInfo$Feature;-><init>(Ljava/lang/String;IZ)V
+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
+HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->create(Landroid/media/MediaFormat;Landroid/media/MediaCodecInfo$CodecCapabilities;)Landroid/media/MediaCodecInfo$VideoCapabilities;
+HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->equivalentVP9Level(Landroid/media/MediaFormat;)I
+HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->getMeasuredFrameRates(Ljava/util/Map;)Ljava/util/Map;
+HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->init(Landroid/media/MediaFormat;Landroid/media/MediaCodecInfo$CodecCapabilities;)V
+HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->initWithPlatformLimits()V
+HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->parseFromInfo(Landroid/media/MediaFormat;)V
+HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->parseWidthHeightRanges(Ljava/lang/Object;)Landroid/util/Pair;
+HSPLandroid/media/MediaCodecInfo$VideoCapabilities;->updateLimits()V
+HSPLandroid/media/MediaCodecInfo;->-get0()Landroid/util/Range;
+HSPLandroid/media/MediaCodecInfo;->-get1()Landroid/util/Range;
+HSPLandroid/media/MediaCodecInfo;->-get2()Landroid/util/Range;
+HSPLandroid/media/MediaCodecInfo;->-get3()Landroid/util/Range;
+HSPLandroid/media/MediaCodecInfo;->-get4()Landroid/util/Range;
+HSPLandroid/media/MediaCodecInfo;->-get5()Landroid/util/Range;
+HSPLandroid/media/MediaCodecInfo;->-wrap0(ILjava/lang/String;)I
+HSPLandroid/media/MediaCodecInfo;-><init>(Ljava/lang/String;Z[Landroid/media/MediaCodecInfo$CodecCapabilities;)V
+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;->makeRegular()Landroid/media/MediaCodecInfo;
+HSPLandroid/media/MediaCodecList;-><init>(I)V
+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/MediaDrm$EventHandler;-><init>(Landroid/media/MediaDrm;Landroid/media/MediaDrm;Landroid/os/Looper;)V
+HSPLandroid/media/MediaDrm;-><init>(Ljava/util/UUID;)V
+HSPLandroid/media/MediaDrm;->getByteArrayFromUUID(Ljava/util/UUID;)[B
+HSPLandroid/media/MediaFormat;-><init>()V
+HSPLandroid/media/MediaFormat;-><init>(Ljava/util/Map;)V
+HSPLandroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z
+HSPLandroid/media/MediaFormat;->createSubtitleFormat(Ljava/lang/String;Ljava/lang/String;)Landroid/media/MediaFormat;
+HSPLandroid/media/MediaFormat;->getMap()Ljava/util/Map;
+HSPLandroid/media/MediaFormat;->getString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/media/MediaFormat;->setInteger(Ljava/lang/String;I)V
+HSPLandroid/media/MediaFormat;->setString(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/media/MediaPlayer$1;-><init>(Landroid/media/MediaPlayer;)V
+HSPLandroid/media/MediaPlayer$2;-><init>(Landroid/media/MediaPlayer;)V
+HSPLandroid/media/MediaPlayer$4$1;-><init>(Landroid/media/MediaPlayer$4;)V
+HSPLandroid/media/MediaPlayer$4$1;->getSubtitleLooper()Landroid/os/Looper;
+HSPLandroid/media/MediaPlayer$4$1;->setSubtitleWidget(Landroid/media/SubtitleTrack$RenderingWidget;)V
+HSPLandroid/media/MediaPlayer$4;-><init>(Landroid/media/MediaPlayer;Landroid/os/HandlerThread;)V
+HSPLandroid/media/MediaPlayer$4;->run()V
+HSPLandroid/media/MediaPlayer$EventHandler;-><init>(Landroid/media/MediaPlayer;Landroid/media/MediaPlayer;Landroid/os/Looper;)V
+HSPLandroid/media/MediaPlayer$EventHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/media/MediaPlayer$OnCompletionListener;->onCompletion(Landroid/media/MediaPlayer;)V
+HSPLandroid/media/MediaPlayer$OnErrorListener;->onError(Landroid/media/MediaPlayer;II)Z
+HSPLandroid/media/MediaPlayer$OnSeekCompleteListener;->onSeekComplete(Landroid/media/MediaPlayer;)V
+HSPLandroid/media/MediaPlayer$OnSubtitleDataListener;->onSubtitleData(Landroid/media/MediaPlayer;Landroid/media/SubtitleData;)V
+HSPLandroid/media/MediaPlayer$TimeProvider$EventHandler;-><init>(Landroid/media/MediaPlayer$TimeProvider;Landroid/os/Looper;)V
+HSPLandroid/media/MediaPlayer$TimeProvider;-><init>(Landroid/media/MediaPlayer;)V
+HSPLandroid/media/MediaPlayer$TimeProvider;->getCurrentTimeUs(ZZ)J
+HSPLandroid/media/MediaPlayer$TrackInfo$1;-><init>()V
+HSPLandroid/media/MediaPlayer$TrackInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/MediaPlayer$TrackInfo;
+HSPLandroid/media/MediaPlayer$TrackInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/media/MediaPlayer$TrackInfo$1;->newArray(I)[Landroid/media/MediaPlayer$TrackInfo;
+HSPLandroid/media/MediaPlayer$TrackInfo$1;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/media/MediaPlayer$TrackInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/media/MediaPlayer$TrackInfo;->getTrackType()I
+HSPLandroid/media/MediaPlayer;->-get13(Landroid/media/MediaPlayer;)Landroid/media/MediaPlayer$OnPreparedListener;
+HSPLandroid/media/MediaPlayer;->-get20(Landroid/media/MediaPlayer;)Landroid/media/SubtitleController;
+HSPLandroid/media/MediaPlayer;->-get21(Landroid/media/MediaPlayer;)Landroid/media/MediaPlayer$TimeProvider;
+HSPLandroid/media/MediaPlayer;->-get5(Landroid/media/MediaPlayer;)J
+HSPLandroid/media/MediaPlayer;->-set2(Landroid/media/MediaPlayer;Landroid/media/SubtitleController;)Landroid/media/SubtitleController;
+HSPLandroid/media/MediaPlayer;->-wrap2(Landroid/media/MediaPlayer;)V
+HSPLandroid/media/MediaPlayer;-><init>()V
+HSPLandroid/media/MediaPlayer;->attemptDataSource(Landroid/content/ContentResolver;Landroid/net/Uri;)Z
+HSPLandroid/media/MediaPlayer;->getInbandTrackInfo()[Landroid/media/MediaPlayer$TrackInfo;
+HSPLandroid/media/MediaPlayer;->invoke(Landroid/os/Parcel;Landroid/os/Parcel;)V
+HSPLandroid/media/MediaPlayer;->playerSetVolume(ZFF)V
+HSPLandroid/media/MediaPlayer;->populateInbandTracks()V
+HSPLandroid/media/MediaPlayer;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V
+HSPLandroid/media/MediaPlayer;->prepare()V
+HSPLandroid/media/MediaPlayer;->scanInternalSubtitleTracks()V
+HSPLandroid/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
+HSPLandroid/media/MediaPlayer;->setDataSource(Ljava/io/FileDescriptor;)V
+HSPLandroid/media/MediaPlayer;->setDataSource(Ljava/io/FileDescriptor;JJ)V
+HSPLandroid/media/MediaPlayer;->setSubtitleAnchor()V
+HSPLandroid/media/MediaPlayer;->setVolume(F)V
+HSPLandroid/media/MediaPlayer;->setVolume(FF)V
+HSPLandroid/media/MediaRouter$Callback;-><init>()V
+HSPLandroid/media/MediaRouter$Callback;->onRouteAdded(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V
+HSPLandroid/media/MediaRouter$Callback;->onRouteChanged(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V
+HSPLandroid/media/MediaRouter$Callback;->onRouteGrouped(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;Landroid/media/MediaRouter$RouteGroup;I)V
+HSPLandroid/media/MediaRouter$Callback;->onRouteRemoved(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V
+HSPLandroid/media/MediaRouter$Callback;->onRouteSelected(Landroid/media/MediaRouter;ILandroid/media/MediaRouter$RouteInfo;)V
+HSPLandroid/media/MediaRouter$Callback;->onRouteUngrouped(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;Landroid/media/MediaRouter$RouteGroup;)V
+HSPLandroid/media/MediaRouter$Callback;->onRouteUnselected(Landroid/media/MediaRouter;ILandroid/media/MediaRouter$RouteInfo;)V
+HSPLandroid/media/MediaRouter$Callback;->onRouteVolumeChanged(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V
+HSPLandroid/media/MediaRouter$CallbackInfo;-><init>(Landroid/media/MediaRouter$Callback;IILandroid/media/MediaRouter;)V
+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
+HSPLandroid/media/MediaRouter$RouteCategory;->toString()Ljava/lang/String;
+HSPLandroid/media/MediaRouter$RouteInfo$1;-><init>(Landroid/media/MediaRouter$RouteInfo;)V
+HSPLandroid/media/MediaRouter$RouteInfo;-><init>(Landroid/media/MediaRouter$RouteCategory;)V
+HSPLandroid/media/MediaRouter$RouteInfo;->choosePresentationDisplay()Landroid/view/Display;
+HSPLandroid/media/MediaRouter$RouteInfo;->getCategory()Landroid/media/MediaRouter$RouteCategory;
+HSPLandroid/media/MediaRouter$RouteInfo;->getDescription()Ljava/lang/CharSequence;
+HSPLandroid/media/MediaRouter$RouteInfo;->getDeviceType()I
+HSPLandroid/media/MediaRouter$RouteInfo;->getName()Ljava/lang/CharSequence;
+HSPLandroid/media/MediaRouter$RouteInfo;->getName(Landroid/content/Context;)Ljava/lang/CharSequence;
+HSPLandroid/media/MediaRouter$RouteInfo;->getName(Landroid/content/res/Resources;)Ljava/lang/CharSequence;
+HSPLandroid/media/MediaRouter$RouteInfo;->getPlaybackStream()I
+HSPLandroid/media/MediaRouter$RouteInfo;->getPlaybackType()I
+HSPLandroid/media/MediaRouter$RouteInfo;->getPresentationDisplay()Landroid/view/Display;
+HSPLandroid/media/MediaRouter$RouteInfo;->getStatus()Ljava/lang/CharSequence;
+HSPLandroid/media/MediaRouter$RouteInfo;->getSupportedTypes()I
+HSPLandroid/media/MediaRouter$RouteInfo;->getTag()Ljava/lang/Object;
+HSPLandroid/media/MediaRouter$RouteInfo;->getVolume()I
+HSPLandroid/media/MediaRouter$RouteInfo;->getVolumeHandling()I
+HSPLandroid/media/MediaRouter$RouteInfo;->getVolumeMax()I
+HSPLandroid/media/MediaRouter$RouteInfo;->isConnecting()Z
+HSPLandroid/media/MediaRouter$RouteInfo;->isEnabled()Z
+HSPLandroid/media/MediaRouter$RouteInfo;->isSelected()Z
+HSPLandroid/media/MediaRouter$RouteInfo;->matchesTypes(I)Z
+HSPLandroid/media/MediaRouter$RouteInfo;->resolveStatusCode()Z
+HSPLandroid/media/MediaRouter$RouteInfo;->toString()Ljava/lang/String;
+HSPLandroid/media/MediaRouter$RouteInfo;->updatePresentationDisplay()Z
+HSPLandroid/media/MediaRouter$SimpleCallback;-><init>()V
+HSPLandroid/media/MediaRouter$Static$1;-><init>(Landroid/media/MediaRouter$Static;)V
+HSPLandroid/media/MediaRouter$Static$Client;-><init>(Landroid/media/MediaRouter$Static;)V
+HSPLandroid/media/MediaRouter$Static;-><init>(Landroid/content/Context;)V
+HSPLandroid/media/MediaRouter$Static;->getAllPresentationDisplays()[Landroid/view/Display;
+HSPLandroid/media/MediaRouter$Static;->isPlaybackActive()Z
+HSPLandroid/media/MediaRouter$Static;->publishClientDiscoveryRequest()V
+HSPLandroid/media/MediaRouter$Static;->publishClientSelectedRoute(Z)V
+HSPLandroid/media/MediaRouter$Static;->rebindAsUser(I)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$VolumeCallback;-><init>()V
+HSPLandroid/media/MediaRouter$VolumeCallback;->onVolumeSetRequest(Landroid/media/MediaRouter$RouteInfo;I)V
+HSPLandroid/media/MediaRouter$VolumeCallback;->onVolumeUpdateRequest(Landroid/media/MediaRouter$RouteInfo;I)V
+HSPLandroid/media/MediaRouter$VolumeChangeReceiver;-><init>()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;->addCallback(ILandroid/media/MediaRouter$Callback;I)V
+HSPLandroid/media/MediaRouter;->addRouteStatic(Landroid/media/MediaRouter$RouteInfo;)V
+HSPLandroid/media/MediaRouter;->createRouteCategory(Ljava/lang/CharSequence;Z)Landroid/media/MediaRouter$RouteCategory;
+HSPLandroid/media/MediaRouter;->dispatchRouteAdded(Landroid/media/MediaRouter$RouteInfo;)V
+HSPLandroid/media/MediaRouter;->dispatchRouteSelected(ILandroid/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
+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;->typesToString(I)Ljava/lang/String;
+HSPLandroid/media/MediaRouter;->updateWifiDisplayStatus(Landroid/hardware/display/WifiDisplayStatus;)V
+HSPLandroid/media/MediaTimeProvider;->cancelNotifications(Landroid/media/MediaTimeProvider$OnMediaTimeListener;)V
+HSPLandroid/media/MediaTimeProvider;->getCurrentTimeUs(ZZ)J
+HSPLandroid/media/MediaTimeProvider;->notifyAt(JLandroid/media/MediaTimeProvider$OnMediaTimeListener;)V
+HSPLandroid/media/MediaTimeProvider;->scheduleUpdate(Landroid/media/MediaTimeProvider$OnMediaTimeListener;)V
+HSPLandroid/media/PlayerBase$IAppOpsCallbackWrapper;-><init>(Landroid/media/PlayerBase;)V
+HSPLandroid/media/PlayerBase$IAppOpsCallbackWrapper;->opChanged(IILjava/lang/String;)V
+HSPLandroid/media/PlayerBase$IPlayerWrapper;-><init>(Landroid/media/PlayerBase;)V
+HSPLandroid/media/PlayerBase$PlayerIdCard$1;-><init>()V
+HSPLandroid/media/PlayerBase$PlayerIdCard;-><init>(ILandroid/media/AudioAttributes;Landroid/media/IPlayer;)V
+HSPLandroid/media/PlayerBase$PlayerIdCard;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/media/PlayerBase;->-wrap0(Landroid/media/PlayerBase;)V
+HSPLandroid/media/PlayerBase;-><init>(Landroid/media/AudioAttributes;I)V
+HSPLandroid/media/PlayerBase;->baseRegisterPlayer()V
+HSPLandroid/media/PlayerBase;->baseSetVolume(FF)V
+HSPLandroid/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;
+HSPLandroid/media/PlayerBase;->isRestricted_sync()Z
+HSPLandroid/media/PlayerBase;->playerApplyVolumeShaper(Landroid/media/VolumeShaper$Configuration;Landroid/media/VolumeShaper$Operation;)I
+HSPLandroid/media/PlayerBase;->playerGetVolumeShaperState(I)Landroid/media/VolumeShaper$State;
+HSPLandroid/media/PlayerBase;->playerPause()V
+HSPLandroid/media/PlayerBase;->playerSetAuxEffectSendLevel(ZF)I
+HSPLandroid/media/PlayerBase;->playerSetVolume(ZFF)V
+HSPLandroid/media/PlayerBase;->playerStart()V
+HSPLandroid/media/PlayerBase;->playerStop()V
+HSPLandroid/media/PlayerBase;->updateAppOpsPlayAudio()V
+HSPLandroid/media/PlayerBase;->updateAppOpsPlayAudio_sync()V
+HSPLandroid/media/Ringtone$MyOnCompletionListener;-><init>(Landroid/media/Ringtone;)V
+HSPLandroid/media/Ringtone;-><init>(Landroid/content/Context;Z)V
+HSPLandroid/media/Ringtone;->applyPlaybackProperties_sync()V
+HSPLandroid/media/Ringtone;->destroyLocalPlayer()V
+HSPLandroid/media/Ringtone;->getTitle(Landroid/content/Context;)Ljava/lang/String;
+HSPLandroid/media/Ringtone;->getTitle(Landroid/content/Context;Landroid/net/Uri;ZZ)Ljava/lang/String;
+HSPLandroid/media/Ringtone;->setUri(Landroid/net/Uri;)V
+HSPLandroid/media/RingtoneManager;-><init>(Landroid/content/Context;)V
+HSPLandroid/media/RingtoneManager;-><init>(Landroid/content/Context;Z)V
+HSPLandroid/media/RingtoneManager;->constructBooleanTrueWhereClause(Ljava/util/List;)Ljava/lang/String;
+HSPLandroid/media/RingtoneManager;->getActualDefaultRingtoneUri(Landroid/content/Context;I)Landroid/net/Uri;
+HSPLandroid/media/RingtoneManager;->getCacheForType(II)Landroid/net/Uri;
+HSPLandroid/media/RingtoneManager;->getCursor()Landroid/database/Cursor;
+HSPLandroid/media/RingtoneManager;->getDefaultType(Landroid/net/Uri;)I
+HSPLandroid/media/RingtoneManager;->getDefaultUri(I)Landroid/net/Uri;
+HSPLandroid/media/RingtoneManager;->getInternalRingtones()Landroid/database/Cursor;
+HSPLandroid/media/RingtoneManager;->getMediaRingtones()Landroid/database/Cursor;
+HSPLandroid/media/RingtoneManager;->getMediaRingtones(Landroid/content/Context;)Landroid/database/Cursor;
+HSPLandroid/media/RingtoneManager;->getRingtone(Landroid/content/Context;Landroid/net/Uri;)Landroid/media/Ringtone;
+HSPLandroid/media/RingtoneManager;->getRingtone(Landroid/content/Context;Landroid/net/Uri;I)Landroid/media/Ringtone;
+HSPLandroid/media/RingtoneManager;->getRingtoneUri(I)Landroid/net/Uri;
+HSPLandroid/media/RingtoneManager;->getSettingForType(I)Ljava/lang/String;
+HSPLandroid/media/RingtoneManager;->getUriFromCursor(Landroid/database/Cursor;)Landroid/net/Uri;
+HSPLandroid/media/RingtoneManager;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
+HSPLandroid/media/RingtoneManager;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/content/Context;)Landroid/database/Cursor;
+HSPLandroid/media/RingtoneManager;->setFilterColumnsList(I)V
+HSPLandroid/media/RingtoneManager;->setType(I)V
+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$OnLoadCompleteListener;->onLoadComplete(Landroid/media/SoundPool;II)V
+HSPLandroid/media/SoundPool;->-get0()Z
+HSPLandroid/media/SoundPool;->-get1(Landroid/media/SoundPool;)Ljava/lang/Object;
+HSPLandroid/media/SoundPool;->-get2(Landroid/media/SoundPool;)Landroid/media/SoundPool$OnLoadCompleteListener;
+HSPLandroid/media/SoundPool;-><init>(III)V
+HSPLandroid/media/SoundPool;-><init>(ILandroid/media/AudioAttributes;)V
+HSPLandroid/media/SoundPool;-><init>(ILandroid/media/AudioAttributes;Landroid/media/SoundPool;)V
+HSPLandroid/media/SoundPool;->load(Landroid/content/Context;II)I
+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
+HSPLandroid/media/SubtitleController$1;-><init>(Landroid/media/SubtitleController;)V
+HSPLandroid/media/SubtitleController$1;->handleMessage(Landroid/os/Message;)Z
+HSPLandroid/media/SubtitleController$2;-><init>(Landroid/media/SubtitleController;)V
+HSPLandroid/media/SubtitleController$Anchor;->getSubtitleLooper()Landroid/os/Looper;
+HSPLandroid/media/SubtitleController$Anchor;->setSubtitleWidget(Landroid/media/SubtitleTrack$RenderingWidget;)V
+HSPLandroid/media/SubtitleController$Listener;->onSubtitleTrackSelected(Landroid/media/SubtitleTrack;)V
+HSPLandroid/media/SubtitleController;->-wrap1(Landroid/media/SubtitleController;)V
+HSPLandroid/media/SubtitleController;-><init>(Landroid/content/Context;Landroid/media/MediaTimeProvider;Landroid/media/SubtitleController$Listener;)V
+HSPLandroid/media/SubtitleController;->checkAnchorLooper()V
+HSPLandroid/media/SubtitleController;->doSelectDefaultTrack()V
+HSPLandroid/media/SubtitleController;->getDefaultTrack()Landroid/media/SubtitleTrack;
+HSPLandroid/media/SubtitleController;->getRenderingWidget()Landroid/media/SubtitleTrack$RenderingWidget;
+HSPLandroid/media/SubtitleController;->processOnAnchor(Landroid/os/Message;)V
+HSPLandroid/media/SubtitleController;->selectDefaultTrack()V
+HSPLandroid/media/SubtitleController;->setAnchor(Landroid/media/SubtitleController$Anchor;)V
+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
+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;
+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;
+HSPLandroid/media/Utils;->intersectSortedDistinctRanges([Landroid/util/Range;[Landroid/util/Range;)[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;
+HSPLandroid/media/Utils;->scaleRange(Landroid/util/Range;II)Landroid/util/Range;
+HSPLandroid/media/Utils;->sortDistinctRanges([Landroid/util/Range;)V
+HSPLandroid/media/VolumeAutomation;->createVolumeShaper(Landroid/media/VolumeShaper$Configuration;)Landroid/media/VolumeShaper;
+HSPLandroid/media/VolumePolicy$1;-><init>()V
+HSPLandroid/media/VolumePolicy;-><init>(ZZZI)V
+HSPLandroid/media/VolumePolicy;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/media/projection/IMediaProjectionManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/media/projection/IMediaProjectionManager$Stub$Proxy;->addCallback(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+HSPLandroid/media/projection/IMediaProjectionManager$Stub$Proxy;->getActiveProjectionInfo()Landroid/media/projection/MediaProjectionInfo;
+HSPLandroid/media/projection/IMediaProjectionManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/projection/IMediaProjectionManager;
+HSPLandroid/media/projection/IMediaProjectionManager;->addCallback(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+HSPLandroid/media/projection/IMediaProjectionManager;->createProjection(ILjava/lang/String;IZ)Landroid/media/projection/IMediaProjection;
+HSPLandroid/media/projection/IMediaProjectionManager;->getActiveProjectionInfo()Landroid/media/projection/MediaProjectionInfo;
+HSPLandroid/media/projection/IMediaProjectionManager;->hasProjectionPermission(ILjava/lang/String;)Z
+HSPLandroid/media/projection/IMediaProjectionManager;->isValidMediaProjection(Landroid/media/projection/IMediaProjection;)Z
+HSPLandroid/media/projection/IMediaProjectionManager;->removeCallback(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+HSPLandroid/media/projection/IMediaProjectionManager;->stopActiveProjection()V
+HSPLandroid/media/projection/IMediaProjectionWatcherCallback$Stub;-><init>()V
+HSPLandroid/media/projection/IMediaProjectionWatcherCallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/media/projection/IMediaProjectionWatcherCallback;->onStart(Landroid/media/projection/MediaProjectionInfo;)V
+HSPLandroid/media/projection/IMediaProjectionWatcherCallback;->onStop(Landroid/media/projection/MediaProjectionInfo;)V
+HSPLandroid/media/projection/MediaProjectionManager$Callback;-><init>()V
+HSPLandroid/media/projection/MediaProjectionManager$Callback;->onStart(Landroid/media/projection/MediaProjectionInfo;)V
+HSPLandroid/media/projection/MediaProjectionManager$Callback;->onStop(Landroid/media/projection/MediaProjectionInfo;)V
+HSPLandroid/media/projection/MediaProjectionManager$CallbackDelegate;-><init>(Landroid/media/projection/MediaProjectionManager$Callback;Landroid/os/Handler;)V
+HSPLandroid/media/projection/MediaProjectionManager;-><init>(Landroid/content/Context;)V
+HSPLandroid/media/projection/MediaProjectionManager;->addCallback(Landroid/media/projection/MediaProjectionManager$Callback;Landroid/os/Handler;)V
+HSPLandroid/media/projection/MediaProjectionManager;->getActiveProjectionInfo()Landroid/media/projection/MediaProjectionInfo;
+HSPLandroid/media/session/IActiveSessionsListener$Stub;-><init>()V
+HSPLandroid/media/session/IActiveSessionsListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/media/session/IActiveSessionsListener;->onActiveSessionsChanged(Ljava/util/List;)V
+HSPLandroid/media/session/ICallback$Stub;-><init>()V
+HSPLandroid/media/session/ICallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/media/session/ICallback;->onAddressedPlayerChangedToMediaButtonReceiver(Landroid/content/ComponentName;)V
+HSPLandroid/media/session/ICallback;->onAddressedPlayerChangedToMediaSession(Landroid/media/session/MediaSession$Token;)V
+HSPLandroid/media/session/ICallback;->onMediaKeyEventDispatchedToMediaButtonReceiver(Landroid/view/KeyEvent;Landroid/content/ComponentName;)V
+HSPLandroid/media/session/ICallback;->onMediaKeyEventDispatchedToMediaSession(Landroid/view/KeyEvent;Landroid/media/session/MediaSession$Token;)V
+HSPLandroid/media/session/ISessionManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/media/session/ISessionManager$Stub$Proxy;->addSessionsListener(Landroid/media/session/IActiveSessionsListener;Landroid/content/ComponentName;I)V
+HSPLandroid/media/session/ISessionManager$Stub$Proxy;->getSessions(Landroid/content/ComponentName;I)Ljava/util/List;
+HSPLandroid/media/session/ISessionManager$Stub$Proxy;->setCallback(Landroid/media/session/ICallback;)V
+HSPLandroid/media/session/ISessionManager$Stub$Proxy;->setRemoteVolumeController(Landroid/media/IRemoteVolumeController;)V
+HSPLandroid/media/session/ISessionManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ISessionManager;
+HSPLandroid/media/session/ISessionManager;->addSessionsListener(Landroid/media/session/IActiveSessionsListener;Landroid/content/ComponentName;I)V
+HSPLandroid/media/session/ISessionManager;->createSession(Ljava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;I)Landroid/media/session/ISession;
+HSPLandroid/media/session/ISessionManager;->dispatchAdjustVolume(III)V
+HSPLandroid/media/session/ISessionManager;->dispatchMediaKeyEvent(Landroid/view/KeyEvent;Z)V
+HSPLandroid/media/session/ISessionManager;->dispatchVolumeKeyEvent(Landroid/view/KeyEvent;IZ)V
+HSPLandroid/media/session/ISessionManager;->getSessions(Landroid/content/ComponentName;I)Ljava/util/List;
+HSPLandroid/media/session/ISessionManager;->isGlobalPriorityActive()Z
+HSPLandroid/media/session/ISessionManager;->removeSessionsListener(Landroid/media/session/IActiveSessionsListener;)V
+HSPLandroid/media/session/ISessionManager;->setCallback(Landroid/media/session/ICallback;)V
+HSPLandroid/media/session/ISessionManager;->setOnMediaKeyListener(Landroid/media/session/IOnMediaKeyListener;)V
+HSPLandroid/media/session/ISessionManager;->setOnVolumeKeyLongPressListener(Landroid/media/session/IOnVolumeKeyLongPressListener;)V
+HSPLandroid/media/session/ISessionManager;->setRemoteVolumeController(Landroid/media/IRemoteVolumeController;)V
+HSPLandroid/media/session/MediaController$Callback;-><init>()V
+HSPLandroid/media/session/MediaSession$Callback;-><init>()V
+HSPLandroid/media/session/MediaSessionManager$Callback;-><init>()V
+HSPLandroid/media/session/MediaSessionManager$Callback;->onAddressedPlayerChanged(Landroid/content/ComponentName;)V
+HSPLandroid/media/session/MediaSessionManager$Callback;->onAddressedPlayerChanged(Landroid/media/session/MediaSession$Token;)V
+HSPLandroid/media/session/MediaSessionManager$Callback;->onMediaKeyEventDispatched(Landroid/view/KeyEvent;Landroid/content/ComponentName;)V
+HSPLandroid/media/session/MediaSessionManager$Callback;->onMediaKeyEventDispatched(Landroid/view/KeyEvent;Landroid/media/session/MediaSession$Token;)V
+HSPLandroid/media/session/MediaSessionManager$CallbackImpl;-><init>(Landroid/media/session/MediaSessionManager$Callback;Landroid/os/Handler;)V
+HSPLandroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;->onActiveSessionsChanged(Ljava/util/List;)V
+HSPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper$1;-><init>(Landroid/media/session/MediaSessionManager$SessionsChangedWrapper;)V
+HSPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper;->-get3(Landroid/media/session/MediaSessionManager$SessionsChangedWrapper;)Landroid/media/session/IActiveSessionsListener$Stub;
+HSPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper;-><init>(Landroid/content/Context;Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;Landroid/os/Handler;)V
+HSPLandroid/media/session/MediaSessionManager;-><init>(Landroid/content/Context;)V
+HSPLandroid/media/session/MediaSessionManager;->addOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;Landroid/content/ComponentName;ILandroid/os/Handler;)V
+HSPLandroid/media/session/MediaSessionManager;->addOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;Landroid/content/ComponentName;Landroid/os/Handler;)V
+HSPLandroid/media/session/MediaSessionManager;->getActiveSessions(Landroid/content/ComponentName;)Ljava/util/List;
+HSPLandroid/media/session/MediaSessionManager;->getActiveSessionsForUser(Landroid/content/ComponentName;I)Ljava/util/List;
+HSPLandroid/media/session/MediaSessionManager;->removeOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;)V
+HSPLandroid/media/session/MediaSessionManager;->setCallback(Landroid/media/session/MediaSessionManager$Callback;Landroid/os/Handler;)V
+HSPLandroid/media/session/MediaSessionManager;->setRemoteVolumeController(Landroid/media/IRemoteVolumeController;)V
+HSPLandroid/media/session/PlaybackState$1;-><init>()V
+HSPLandroid/media/session/PlaybackState$Builder;-><init>()V
+HSPLandroid/media/session/PlaybackState$Builder;->build()Landroid/media/session/PlaybackState;
+HSPLandroid/media/session/PlaybackState$Builder;->setState(IJF)Landroid/media/session/PlaybackState$Builder;
+HSPLandroid/media/session/PlaybackState$Builder;->setState(IJFJ)Landroid/media/session/PlaybackState$Builder;
+HSPLandroid/media/session/PlaybackState;-><init>(IJJFJJLjava/util/List;JLjava/lang/CharSequence;Landroid/os/Bundle;)V
+HSPLandroid/media/session/PlaybackState;-><init>(IJJFJJLjava/util/List;JLjava/lang/CharSequence;Landroid/os/Bundle;Landroid/media/session/PlaybackState;)V
+HSPLandroid/media/session/PlaybackState;->getState()I
+HSPLandroid/media/session/PlaybackState;->toString()Ljava/lang/String;
+HSPLandroid/metrics/LogMaker;-><init>(I)V
+HSPLandroid/metrics/LogMaker;->addTaggedData(ILjava/lang/Object;)Landroid/metrics/LogMaker;
+HSPLandroid/metrics/LogMaker;->getType()I
+HSPLandroid/metrics/LogMaker;->isValidValue(Ljava/lang/Object;)Z
+HSPLandroid/metrics/LogMaker;->serialize()[Ljava/lang/Object;
+HSPLandroid/metrics/LogMaker;->setCategory(I)Landroid/metrics/LogMaker;
+HSPLandroid/metrics/LogMaker;->setPackageName(Ljava/lang/String;)Landroid/metrics/LogMaker;
+HSPLandroid/metrics/LogMaker;->setSubtype(I)Landroid/metrics/LogMaker;
+HSPLandroid/metrics/LogMaker;->setType(I)Landroid/metrics/LogMaker;
+HSPLandroid/metrics/MetricsReader$LogReader;-><init>()V
+HSPLandroid/metrics/MetricsReader;-><init>()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;
+HSPLandroid/net/ConnectivityManager$CallbackHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/net/ConnectivityManager$NetworkCallback;->-get0(Landroid/net/ConnectivityManager$NetworkCallback;)Landroid/net/NetworkRequest;
+HSPLandroid/net/ConnectivityManager$NetworkCallback;->-set0(Landroid/net/ConnectivityManager$NetworkCallback;Landroid/net/NetworkRequest;)Landroid/net/NetworkRequest;
+HSPLandroid/net/ConnectivityManager$NetworkCallback;-><init>()V
+HSPLandroid/net/ConnectivityManager$NetworkCallback;->onLinkPropertiesChanged(Landroid/net/Network;Landroid/net/LinkProperties;)V
+HSPLandroid/net/ConnectivityManager$PacketKeepaliveCallback;-><init>()V
+HSPLandroid/net/ConnectivityManager;->-get1()Ljava/util/HashMap;
+HSPLandroid/net/ConnectivityManager;-><init>(Landroid/content/Context;Landroid/net/IConnectivityManager;)V
+HSPLandroid/net/ConnectivityManager;->checkCallbackNotNull(Landroid/net/ConnectivityManager$NetworkCallback;)V
+HSPLandroid/net/ConnectivityManager;->from(Landroid/content/Context;)Landroid/net/ConnectivityManager;
+HSPLandroid/net/ConnectivityManager;->getActiveNetwork()Landroid/net/Network;
+HSPLandroid/net/ConnectivityManager;->getActiveNetworkInfo()Landroid/net/NetworkInfo;
+HSPLandroid/net/ConnectivityManager;->getAllNetworks()[Landroid/net/Network;
+HSPLandroid/net/ConnectivityManager;->getDefaultHandler()Landroid/net/ConnectivityManager$CallbackHandler;
+HSPLandroid/net/ConnectivityManager;->getLinkProperties(Landroid/net/Network;)Landroid/net/LinkProperties;
+HSPLandroid/net/ConnectivityManager;->getMobileDataEnabled()Z
+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;->getNetworkPolicyManager()Landroid/net/INetworkPolicyManager;
+HSPLandroid/net/ConnectivityManager;->getRestrictBackgroundStatus()I
+HSPLandroid/net/ConnectivityManager;->isActiveNetworkMetered()Z
+HSPLandroid/net/ConnectivityManager;->isNetworkSupported(I)Z
+HSPLandroid/net/ConnectivityManager;->isNetworkTypeValid(I)Z
+HSPLandroid/net/ConnectivityManager;->isTetheringSupported()Z
+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;)V
+HSPLandroid/net/ConnectivityManager;->sendRequestForNetwork(Landroid/net/NetworkCapabilities;Landroid/net/ConnectivityManager$NetworkCallback;IIILandroid/net/ConnectivityManager$CallbackHandler;)Landroid/net/NetworkRequest;
+HSPLandroid/net/ConnectivityThread$Singleton;->-get0()Landroid/net/ConnectivityThread;
+HSPLandroid/net/ConnectivityThread;->-wrap0()Landroid/net/ConnectivityThread;
+HSPLandroid/net/ConnectivityThread;-><init>()V
+HSPLandroid/net/ConnectivityThread;->createInstance()Landroid/net/ConnectivityThread;
+HSPLandroid/net/ConnectivityThread;->getInstanceLooper()Landroid/os/Looper;
+HSPLandroid/net/EventLogTags;->writeNtpSuccess(Ljava/lang/String;JJ)V
+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;->getAllNetworks()[Landroid/net/Network;
+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;->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;)V
+HSPLandroid/net/IConnectivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IConnectivityManager;
+HSPLandroid/net/IConnectivityManager;->addVpnAddress(Ljava/lang/String;I)Z
+HSPLandroid/net/IConnectivityManager;->checkMobileProvisioning(I)I
+HSPLandroid/net/IConnectivityManager;->establishVpn(Lcom/android/internal/net/VpnConfig;)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/net/IConnectivityManager;->factoryReset()V
+HSPLandroid/net/IConnectivityManager;->getActiveLinkProperties()Landroid/net/LinkProperties;
+HSPLandroid/net/IConnectivityManager;->getActiveNetwork()Landroid/net/Network;
+HSPLandroid/net/IConnectivityManager;->getActiveNetworkForUid(IZ)Landroid/net/Network;
+HSPLandroid/net/IConnectivityManager;->getActiveNetworkInfo()Landroid/net/NetworkInfo;
+HSPLandroid/net/IConnectivityManager;->getActiveNetworkInfoForUid(IZ)Landroid/net/NetworkInfo;
+HSPLandroid/net/IConnectivityManager;->getActiveNetworkQuotaInfo()Landroid/net/NetworkQuotaInfo;
+HSPLandroid/net/IConnectivityManager;->getAllNetworkInfo()[Landroid/net/NetworkInfo;
+HSPLandroid/net/IConnectivityManager;->getAllNetworkState()[Landroid/net/NetworkState;
+HSPLandroid/net/IConnectivityManager;->getAllNetworks()[Landroid/net/Network;
+HSPLandroid/net/IConnectivityManager;->getAllVpnInfo()[Lcom/android/internal/net/VpnInfo;
+HSPLandroid/net/IConnectivityManager;->getAlwaysOnVpnPackage(I)Ljava/lang/String;
+HSPLandroid/net/IConnectivityManager;->getCaptivePortalServerUrl()Ljava/lang/String;
+HSPLandroid/net/IConnectivityManager;->getDefaultNetworkCapabilitiesForUser(I)[Landroid/net/NetworkCapabilities;
+HSPLandroid/net/IConnectivityManager;->getGlobalProxy()Landroid/net/ProxyInfo;
+HSPLandroid/net/IConnectivityManager;->getLastTetherError(Ljava/lang/String;)I
+HSPLandroid/net/IConnectivityManager;->getLegacyVpnInfo(I)Lcom/android/internal/net/LegacyVpnInfo;
+HSPLandroid/net/IConnectivityManager;->getLinkProperties(Landroid/net/Network;)Landroid/net/LinkProperties;
+HSPLandroid/net/IConnectivityManager;->getLinkPropertiesForType(I)Landroid/net/LinkProperties;
+HSPLandroid/net/IConnectivityManager;->getMobileProvisioningUrl()Ljava/lang/String;
+HSPLandroid/net/IConnectivityManager;->getMultipathPreference(Landroid/net/Network;)I
+HSPLandroid/net/IConnectivityManager;->getNetworkCapabilities(Landroid/net/Network;)Landroid/net/NetworkCapabilities;
+HSPLandroid/net/IConnectivityManager;->getNetworkForType(I)Landroid/net/Network;
+HSPLandroid/net/IConnectivityManager;->getNetworkInfo(I)Landroid/net/NetworkInfo;
+HSPLandroid/net/IConnectivityManager;->getNetworkInfoForUid(Landroid/net/Network;IZ)Landroid/net/NetworkInfo;
+HSPLandroid/net/IConnectivityManager;->getProxyForNetwork(Landroid/net/Network;)Landroid/net/ProxyInfo;
+HSPLandroid/net/IConnectivityManager;->getRestoreDefaultNetworkDelay(I)I
+HSPLandroid/net/IConnectivityManager;->getTetherableBluetoothRegexs()[Ljava/lang/String;
+HSPLandroid/net/IConnectivityManager;->getTetherableIfaces()[Ljava/lang/String;
+HSPLandroid/net/IConnectivityManager;->getTetherableUsbRegexs()[Ljava/lang/String;
+HSPLandroid/net/IConnectivityManager;->getTetherableWifiRegexs()[Ljava/lang/String;
+HSPLandroid/net/IConnectivityManager;->getTetheredDhcpRanges()[Ljava/lang/String;
+HSPLandroid/net/IConnectivityManager;->getTetheredIfaces()[Ljava/lang/String;
+HSPLandroid/net/IConnectivityManager;->getTetheringErroredIfaces()[Ljava/lang/String;
+HSPLandroid/net/IConnectivityManager;->getVpnConfig(I)Lcom/android/internal/net/VpnConfig;
+HSPLandroid/net/IConnectivityManager;->isActiveNetworkMetered()Z
+HSPLandroid/net/IConnectivityManager;->isAlwaysOnVpnPackageSupported(ILjava/lang/String;)Z
+HSPLandroid/net/IConnectivityManager;->isNetworkSupported(I)Z
+HSPLandroid/net/IConnectivityManager;->isTetheringSupported(Ljava/lang/String;)Z
+HSPLandroid/net/IConnectivityManager;->listenForNetwork(Landroid/net/NetworkCapabilities;Landroid/os/Messenger;Landroid/os/IBinder;)Landroid/net/NetworkRequest;
+HSPLandroid/net/IConnectivityManager;->pendingListenForNetwork(Landroid/net/NetworkCapabilities;Landroid/app/PendingIntent;)V
+HSPLandroid/net/IConnectivityManager;->pendingRequestForNetwork(Landroid/net/NetworkCapabilities;Landroid/app/PendingIntent;)Landroid/net/NetworkRequest;
+HSPLandroid/net/IConnectivityManager;->prepareVpn(Ljava/lang/String;Ljava/lang/String;I)Z
+HSPLandroid/net/IConnectivityManager;->registerNetworkAgent(Landroid/os/Messenger;Landroid/net/NetworkInfo;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;ILandroid/net/NetworkMisc;)I
+HSPLandroid/net/IConnectivityManager;->registerNetworkFactory(Landroid/os/Messenger;Ljava/lang/String;)V
+HSPLandroid/net/IConnectivityManager;->releaseNetworkRequest(Landroid/net/NetworkRequest;)V
+HSPLandroid/net/IConnectivityManager;->releasePendingNetworkRequest(Landroid/app/PendingIntent;)V
+HSPLandroid/net/IConnectivityManager;->removeVpnAddress(Ljava/lang/String;I)Z
+HSPLandroid/net/IConnectivityManager;->reportInetCondition(II)V
+HSPLandroid/net/IConnectivityManager;->reportNetworkConnectivity(Landroid/net/Network;Z)V
+HSPLandroid/net/IConnectivityManager;->requestBandwidthUpdate(Landroid/net/Network;)Z
+HSPLandroid/net/IConnectivityManager;->requestNetwork(Landroid/net/NetworkCapabilities;Landroid/os/Messenger;ILandroid/os/IBinder;I)Landroid/net/NetworkRequest;
+HSPLandroid/net/IConnectivityManager;->requestRouteToHostAddress(I[B)Z
+HSPLandroid/net/IConnectivityManager;->setAcceptUnvalidated(Landroid/net/Network;ZZ)V
+HSPLandroid/net/IConnectivityManager;->setAirplaneMode(Z)V
+HSPLandroid/net/IConnectivityManager;->setAlwaysOnVpnPackage(ILjava/lang/String;Z)Z
+HSPLandroid/net/IConnectivityManager;->setAvoidUnvalidated(Landroid/net/Network;)V
+HSPLandroid/net/IConnectivityManager;->setGlobalProxy(Landroid/net/ProxyInfo;)V
+HSPLandroid/net/IConnectivityManager;->setProvisioningNotificationVisible(ZILjava/lang/String;)V
+HSPLandroid/net/IConnectivityManager;->setUnderlyingNetworksForVpn([Landroid/net/Network;)Z
+HSPLandroid/net/IConnectivityManager;->setUsbTethering(ZLjava/lang/String;)I
+HSPLandroid/net/IConnectivityManager;->setVpnPackageAuthorization(Ljava/lang/String;IZ)V
+HSPLandroid/net/IConnectivityManager;->startCaptivePortalApp(Landroid/net/Network;)V
+HSPLandroid/net/IConnectivityManager;->startLegacyVpn(Lcom/android/internal/net/VpnProfile;)V
+HSPLandroid/net/IConnectivityManager;->startNattKeepalive(Landroid/net/Network;ILandroid/os/Messenger;Landroid/os/IBinder;Ljava/lang/String;ILjava/lang/String;)V
+HSPLandroid/net/IConnectivityManager;->startTethering(ILandroid/os/ResultReceiver;ZLjava/lang/String;)V
+HSPLandroid/net/IConnectivityManager;->stopKeepalive(Landroid/net/Network;I)V
+HSPLandroid/net/IConnectivityManager;->stopTethering(ILjava/lang/String;)V
+HSPLandroid/net/IConnectivityManager;->tether(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/net/IConnectivityManager;->unregisterNetworkFactory(Landroid/os/Messenger;)V
+HSPLandroid/net/IConnectivityManager;->untether(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/net/IConnectivityManager;->updateLockdownVpn()Z
+HSPLandroid/net/INetworkPolicyListener$Stub;-><init>()V
+HSPLandroid/net/INetworkPolicyListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/net/INetworkPolicyListener;->onMeteredIfacesChanged([Ljava/lang/String;)V
+HSPLandroid/net/INetworkPolicyListener;->onRestrictBackgroundChanged(Z)V
+HSPLandroid/net/INetworkPolicyListener;->onUidPoliciesChanged(II)V
+HSPLandroid/net/INetworkPolicyListener;->onUidRulesChanged(II)V
+HSPLandroid/net/INetworkPolicyManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/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;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkPolicyManager;
+HSPLandroid/net/INetworkPolicyManager;->addUidPolicy(II)V
+HSPLandroid/net/INetworkPolicyManager;->factoryReset(Ljava/lang/String;)V
+HSPLandroid/net/INetworkPolicyManager;->getNetworkPolicies(Ljava/lang/String;)[Landroid/net/NetworkPolicy;
+HSPLandroid/net/INetworkPolicyManager;->getNetworkQuotaInfo(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo;
+HSPLandroid/net/INetworkPolicyManager;->getRestrictBackground()Z
+HSPLandroid/net/INetworkPolicyManager;->getRestrictBackgroundByCaller()I
+HSPLandroid/net/INetworkPolicyManager;->getSubscriptionPlans(ILjava/lang/String;)[Landroid/telephony/SubscriptionPlan;
+HSPLandroid/net/INetworkPolicyManager;->getUidPolicy(I)I
+HSPLandroid/net/INetworkPolicyManager;->getUidsWithPolicy(I)[I
+HSPLandroid/net/INetworkPolicyManager;->isUidForeground(I)Z
+HSPLandroid/net/INetworkPolicyManager;->isUidNetworkingBlocked(IZ)Z
+HSPLandroid/net/INetworkPolicyManager;->onTetheringChanged(Ljava/lang/String;Z)V
+HSPLandroid/net/INetworkPolicyManager;->registerListener(Landroid/net/INetworkPolicyListener;)V
+HSPLandroid/net/INetworkPolicyManager;->removeUidPolicy(II)V
+HSPLandroid/net/INetworkPolicyManager;->setDeviceIdleMode(Z)V
+HSPLandroid/net/INetworkPolicyManager;->setNetworkPolicies([Landroid/net/NetworkPolicy;)V
+HSPLandroid/net/INetworkPolicyManager;->setRestrictBackground(Z)V
+HSPLandroid/net/INetworkPolicyManager;->setSubscriptionPlans(I[Landroid/telephony/SubscriptionPlan;Ljava/lang/String;)V
+HSPLandroid/net/INetworkPolicyManager;->setUidPolicy(II)V
+HSPLandroid/net/INetworkPolicyManager;->setWifiMeteredOverride(Ljava/lang/String;I)V
+HSPLandroid/net/INetworkPolicyManager;->snoozeLimit(Landroid/net/NetworkTemplate;)V
+HSPLandroid/net/INetworkPolicyManager;->unregisterListener(Landroid/net/INetworkPolicyListener;)V
+HSPLandroid/net/INetworkRecommendationProvider$Stub;-><init>()V
+HSPLandroid/net/INetworkRecommendationProvider;->requestScores([Landroid/net/NetworkKey;)V
+HSPLandroid/net/INetworkScoreCache$Stub;-><init>()V
+HSPLandroid/net/INetworkScoreCache;->clearScores()V
+HSPLandroid/net/INetworkScoreCache;->updateScores(Ljava/util/List;)V
+HSPLandroid/net/INetworkScoreService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/net/INetworkScoreService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkScoreService;
+HSPLandroid/net/INetworkScoreService;->clearScores()Z
+HSPLandroid/net/INetworkScoreService;->disableScoring()V
+HSPLandroid/net/INetworkScoreService;->getActiveScorer()Landroid/net/NetworkScorerAppData;
+HSPLandroid/net/INetworkScoreService;->getActiveScorerPackage()Ljava/lang/String;
+HSPLandroid/net/INetworkScoreService;->getAllValidScorers()Ljava/util/List;
+HSPLandroid/net/INetworkScoreService;->isCallerActiveScorer(I)Z
+HSPLandroid/net/INetworkScoreService;->registerNetworkScoreCache(ILandroid/net/INetworkScoreCache;I)V
+HSPLandroid/net/INetworkScoreService;->requestScores([Landroid/net/NetworkKey;)Z
+HSPLandroid/net/INetworkScoreService;->setActiveScorer(Ljava/lang/String;)Z
+HSPLandroid/net/INetworkScoreService;->unregisterNetworkScoreCache(ILandroid/net/INetworkScoreCache;)V
+HSPLandroid/net/INetworkScoreService;->updateScores([Landroid/net/ScoredNetwork;)Z
+HSPLandroid/net/INetworkStatsService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/net/INetworkStatsService$Stub$Proxy;->getMobileIfaces()[Ljava/lang/String;
+HSPLandroid/net/INetworkStatsService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkStatsService;
+HSPLandroid/net/INetworkStatsService;->advisePersistThreshold(J)V
+HSPLandroid/net/INetworkStatsService;->forceUpdate()V
+HSPLandroid/net/INetworkStatsService;->forceUpdateIfaces()V
+HSPLandroid/net/INetworkStatsService;->getDataLayerSnapshotForUid(I)Landroid/net/NetworkStats;
+HSPLandroid/net/INetworkStatsService;->getMobileIfaces()[Ljava/lang/String;
+HSPLandroid/net/INetworkStatsService;->getNetworkTotalBytes(Landroid/net/NetworkTemplate;JJ)J
+HSPLandroid/net/INetworkStatsService;->incrementOperationCount(III)V
+HSPLandroid/net/INetworkStatsService;->openSession()Landroid/net/INetworkStatsSession;
+HSPLandroid/net/INetworkStatsService;->openSessionForUsageStats(ILjava/lang/String;)Landroid/net/INetworkStatsSession;
+HSPLandroid/net/INetworkStatsService;->registerUsageCallback(Ljava/lang/String;Landroid/net/DataUsageRequest;Landroid/os/Messenger;Landroid/os/IBinder;)Landroid/net/DataUsageRequest;
+HSPLandroid/net/INetworkStatsService;->setUidForeground(IZ)V
+HSPLandroid/net/INetworkStatsService;->unregisterUsageRequest(Landroid/net/DataUsageRequest;)V
+HSPLandroid/net/IpConfiguration$1;-><init>()V
+HSPLandroid/net/IpConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/IpConfiguration;
+HSPLandroid/net/IpConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/net/IpConfiguration$IpAssignment;-><init>(Ljava/lang/String;I)V
+HSPLandroid/net/IpConfiguration$IpAssignment;->valueOf(Ljava/lang/String;)Landroid/net/IpConfiguration$IpAssignment;
+HSPLandroid/net/IpConfiguration$IpAssignment;->values()[Landroid/net/IpConfiguration$IpAssignment;
+HSPLandroid/net/IpConfiguration$ProxySettings;-><init>(Ljava/lang/String;I)V
+HSPLandroid/net/IpConfiguration$ProxySettings;->valueOf(Ljava/lang/String;)Landroid/net/IpConfiguration$ProxySettings;
+HSPLandroid/net/IpConfiguration$ProxySettings;->values()[Landroid/net/IpConfiguration$ProxySettings;
+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$1;-><init>()V
+HSPLandroid/net/IpPrefix$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/IpPrefix;
+HSPLandroid/net/IpPrefix$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+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
+HSPLandroid/net/LinkAddress$1;-><init>()V
+HSPLandroid/net/LinkAddress$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/LinkAddress;
+HSPLandroid/net/LinkAddress$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/net/LinkAddress;-><init>(Ljava/net/InetAddress;III)V
+HSPLandroid/net/LinkAddress;->init(Ljava/net/InetAddress;III)V
+HSPLandroid/net/LinkAddress;->isSameAddressAs(Landroid/net/LinkAddress;)Z
+HSPLandroid/net/LinkProperties$1;-><init>()V
+HSPLandroid/net/LinkProperties$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/LinkProperties;
+HSPLandroid/net/LinkProperties$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/net/LinkProperties;-><init>()V
+HSPLandroid/net/LinkProperties;->addDnsServer(Ljava/net/InetAddress;)Z
+HSPLandroid/net/LinkProperties;->addLinkAddress(Landroid/net/LinkAddress;)Z
+HSPLandroid/net/LinkProperties;->addRoute(Landroid/net/RouteInfo;)Z
+HSPLandroid/net/LinkProperties;->findLinkAddressIndex(Landroid/net/LinkAddress;)I
+HSPLandroid/net/LinkProperties;->getDnsServers()Ljava/util/List;
+HSPLandroid/net/LinkProperties;->routeWithInterface(Landroid/net/RouteInfo;)Landroid/net/RouteInfo;
+HSPLandroid/net/LinkProperties;->setDomains(Ljava/lang/String;)V
+HSPLandroid/net/LinkProperties;->setInterfaceName(Ljava/lang/String;)V
+HSPLandroid/net/LinkProperties;->setMtu(I)V
+HSPLandroid/net/LinkProperties;->setTcpBufferSizes(Ljava/lang/String;)V
+HSPLandroid/net/LocalServerSocket;-><init>(Ljava/lang/String;)V
+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;->createConnectedLocalSocket(Ljava/io/FileDescriptor;)Landroid/net/LocalSocket;
+HSPLandroid/net/LocalSocket;->getInputStream()Ljava/io/InputStream;
+HSPLandroid/net/LocalSocket;->getOutputStream()Ljava/io/OutputStream;
+HSPLandroid/net/LocalSocket;->implCreateIfNeeded()V
+HSPLandroid/net/LocalSocket;->toString()Ljava/lang/String;
+HSPLandroid/net/LocalSocketAddress$Namespace;-><init>(Ljava/lang/String;II)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;->read([BII)I
+HSPLandroid/net/LocalSocketImpl$SocketOutputStream;-><init>(Landroid/net/LocalSocketImpl;)V
+HSPLandroid/net/LocalSocketImpl$SocketOutputStream;->flush()V
+HSPLandroid/net/LocalSocketImpl$SocketOutputStream;->write([B)V
+HSPLandroid/net/LocalSocketImpl$SocketOutputStream;->write([BII)V
+HSPLandroid/net/LocalSocketImpl;->-get0(Landroid/net/LocalSocketImpl;)Ljava/io/FileDescriptor;
+HSPLandroid/net/LocalSocketImpl;->-get1(Landroid/net/LocalSocketImpl;)Ljava/lang/Object;
+HSPLandroid/net/LocalSocketImpl;->-get2(Landroid/net/LocalSocketImpl;)Ljava/lang/Object;
+HSPLandroid/net/LocalSocketImpl;->-wrap1(Landroid/net/LocalSocketImpl;[BIILjava/io/FileDescriptor;)I
+HSPLandroid/net/LocalSocketImpl;->-wrap3(Landroid/net/LocalSocketImpl;[BIILjava/io/FileDescriptor;)V
+HSPLandroid/net/LocalSocketImpl;-><init>()V
+HSPLandroid/net/LocalSocketImpl;-><init>(Ljava/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;
+HSPLandroid/net/LocalSocketImpl;->getOutputStream()Ljava/io/OutputStream;
+HSPLandroid/net/LocalSocketImpl;->listen(I)V
+HSPLandroid/net/LocalSocketImpl;->toString()Ljava/lang/String;
+HSPLandroid/net/MatchAllNetworkSpecifier$1;-><init>()V
+HSPLandroid/net/MatchAllNetworkSpecifier;-><init>()V
+HSPLandroid/net/Network$1;-><init>()V
+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;-><init>(I)V
+HSPLandroid/net/Network;->equals(Ljava/lang/Object;)Z
+HSPLandroid/net/Network;->getNetworkHandle()J
+HSPLandroid/net/Network;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/net/NetworkCapabilities$1;-><init>()V
+HSPLandroid/net/NetworkCapabilities$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/NetworkCapabilities;
+HSPLandroid/net/NetworkCapabilities$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/net/NetworkCapabilities;->-set0(Landroid/net/NetworkCapabilities;I)I
+HSPLandroid/net/NetworkCapabilities;->-set1(Landroid/net/NetworkCapabilities;I)I
+HSPLandroid/net/NetworkCapabilities;->-set2(Landroid/net/NetworkCapabilities;J)J
+HSPLandroid/net/NetworkCapabilities;->-set3(Landroid/net/NetworkCapabilities;Landroid/net/NetworkSpecifier;)Landroid/net/NetworkSpecifier;
+HSPLandroid/net/NetworkCapabilities;->-set4(Landroid/net/NetworkCapabilities;I)I
+HSPLandroid/net/NetworkCapabilities;->-set5(Landroid/net/NetworkCapabilities;J)J
+HSPLandroid/net/NetworkCapabilities;-><init>()V
+HSPLandroid/net/NetworkCapabilities;-><init>(Landroid/net/NetworkCapabilities;)V
+HSPLandroid/net/NetworkCapabilities;->addCapability(I)Landroid/net/NetworkCapabilities;
+HSPLandroid/net/NetworkCapabilities;->addTransportType(I)Landroid/net/NetworkCapabilities;
+HSPLandroid/net/NetworkCapabilities;->capabilityNameOf(I)Ljava/lang/String;
+HSPLandroid/net/NetworkCapabilities;->checkValidTransportType(I)V
+HSPLandroid/net/NetworkCapabilities;->clearAll()V
+HSPLandroid/net/NetworkCapabilities;->equals(Ljava/lang/Object;)Z
+HSPLandroid/net/NetworkCapabilities;->equalsLinkBandwidths(Landroid/net/NetworkCapabilities;)Z
+HSPLandroid/net/NetworkCapabilities;->equalsNetCapabilities(Landroid/net/NetworkCapabilities;)Z
+HSPLandroid/net/NetworkCapabilities;->equalsSignalStrength(Landroid/net/NetworkCapabilities;)Z
+HSPLandroid/net/NetworkCapabilities;->equalsSpecifier(Landroid/net/NetworkCapabilities;)Z
+HSPLandroid/net/NetworkCapabilities;->equalsTransportTypes(Landroid/net/NetworkCapabilities;)Z
+HSPLandroid/net/NetworkCapabilities;->getCapabilities()[I
+HSPLandroid/net/NetworkCapabilities;->getNetworkSpecifier()Landroid/net/NetworkSpecifier;
+HSPLandroid/net/NetworkCapabilities;->getTransportTypes()[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;->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;->satisfiedBySignalStrength(Landroid/net/NetworkCapabilities;)Z
+HSPLandroid/net/NetworkCapabilities;->satisfiedBySpecifier(Landroid/net/NetworkCapabilities;)Z
+HSPLandroid/net/NetworkCapabilities;->satisfiedByTransportTypes(Landroid/net/NetworkCapabilities;)Z
+HSPLandroid/net/NetworkCapabilities;->setLinkDownstreamBandwidthKbps(I)V
+HSPLandroid/net/NetworkCapabilities;->setLinkUpstreamBandwidthKbps(I)V
+HSPLandroid/net/NetworkCapabilities;->setNetworkSpecifier(Landroid/net/NetworkSpecifier;)Landroid/net/NetworkCapabilities;
+HSPLandroid/net/NetworkCapabilities;->toString()Ljava/lang/String;
+HSPLandroid/net/NetworkCapabilities;->transportNameOf(I)Ljava/lang/String;
+HSPLandroid/net/NetworkCapabilities;->transportNamesOf([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;I)V
+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
+HSPLandroid/net/NetworkFactory;->evalRequest(Landroid/net/NetworkFactory$NetworkRequestInfo;)V
+HSPLandroid/net/NetworkFactory;->evalRequests()V
+HSPLandroid/net/NetworkFactory;->handleAddRequest(Landroid/net/NetworkRequest;I)V
+HSPLandroid/net/NetworkFactory;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/net/NetworkFactory;->handleSetFilter(Landroid/net/NetworkCapabilities;)V
+HSPLandroid/net/NetworkFactory;->handleSetScore(I)V
+HSPLandroid/net/NetworkFactory;->log(Ljava/lang/String;)V
+HSPLandroid/net/NetworkFactory;->register()V
+HSPLandroid/net/NetworkFactory;->setCapabilityFilter(Landroid/net/NetworkCapabilities;)V
+HSPLandroid/net/NetworkFactory;->setScoreFilter(I)V
+HSPLandroid/net/NetworkInfo$1;-><init>()V
+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$DetailedState;-><init>(Ljava/lang/String;I)V
+HSPLandroid/net/NetworkInfo$DetailedState;->valueOf(Ljava/lang/String;)Landroid/net/NetworkInfo$DetailedState;
+HSPLandroid/net/NetworkInfo$DetailedState;->values()[Landroid/net/NetworkInfo$DetailedState;
+HSPLandroid/net/NetworkInfo$State;-><init>(Ljava/lang/String;I)V
+HSPLandroid/net/NetworkInfo$State;->valueOf(Ljava/lang/String;)Landroid/net/NetworkInfo$State;
+HSPLandroid/net/NetworkInfo$State;->values()[Landroid/net/NetworkInfo$State;
+HSPLandroid/net/NetworkInfo;->-set0(Landroid/net/NetworkInfo;Landroid/net/NetworkInfo$DetailedState;)Landroid/net/NetworkInfo$DetailedState;
+HSPLandroid/net/NetworkInfo;->-set1(Landroid/net/NetworkInfo;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/net/NetworkInfo;->-set2(Landroid/net/NetworkInfo;Z)Z
+HSPLandroid/net/NetworkInfo;->-set3(Landroid/net/NetworkInfo;Z)Z
+HSPLandroid/net/NetworkInfo;->-set4(Landroid/net/NetworkInfo;Z)Z
+HSPLandroid/net/NetworkInfo;->-set5(Landroid/net/NetworkInfo;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/net/NetworkInfo;->-set6(Landroid/net/NetworkInfo;Landroid/net/NetworkInfo$State;)Landroid/net/NetworkInfo$State;
+HSPLandroid/net/NetworkInfo;-><init>(IILjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/net/NetworkInfo;->getDetailedState()Landroid/net/NetworkInfo$DetailedState;
+HSPLandroid/net/NetworkInfo;->getExtraInfo()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;->isConnected()Z
+HSPLandroid/net/NetworkInfo;->isConnectedOrConnecting()Z
+HSPLandroid/net/NetworkInfo;->isRoaming()Z
+HSPLandroid/net/NetworkInfo;->setDetailedState(Landroid/net/NetworkInfo$DetailedState;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/net/NetworkInfo;->toString()Ljava/lang/String;
+HSPLandroid/net/NetworkPolicyManager;-><init>(Landroid/content/Context;Landroid/net/INetworkPolicyManager;)V
+HSPLandroid/net/NetworkPolicyManager;->from(Landroid/content/Context;)Landroid/net/NetworkPolicyManager;
+HSPLandroid/net/NetworkPolicyManager;->getRestrictBackground()Z
+HSPLandroid/net/NetworkPolicyManager;->registerListener(Landroid/net/INetworkPolicyListener;)V
+HSPLandroid/net/NetworkRecommendationProvider$ServiceWrapper;-><init>(Landroid/net/NetworkRecommendationProvider;Landroid/content/Context;Ljava/util/concurrent/Executor;)V
+HSPLandroid/net/NetworkRecommendationProvider;-><init>(Landroid/content/Context;Ljava/util/concurrent/Executor;)V
+HSPLandroid/net/NetworkRecommendationProvider;->getBinder()Landroid/os/IBinder;
+HSPLandroid/net/NetworkRecommendationProvider;->onRequestScores([Landroid/net/NetworkKey;)V
+HSPLandroid/net/NetworkRequest$1;-><init>()V
+HSPLandroid/net/NetworkRequest$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/NetworkRequest;
+HSPLandroid/net/NetworkRequest$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+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;
+HSPLandroid/net/NetworkRequest$Builder;->build()Landroid/net/NetworkRequest;
+HSPLandroid/net/NetworkRequest$Builder;->clearCapabilities()Landroid/net/NetworkRequest$Builder;
+HSPLandroid/net/NetworkRequest$Builder;->removeCapability(I)Landroid/net/NetworkRequest$Builder;
+HSPLandroid/net/NetworkRequest$Type;-><init>(Ljava/lang/String;I)V
+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
+HSPLandroid/net/NetworkRequest;->equals(Ljava/lang/Object;)Z
+HSPLandroid/net/NetworkRequest;->hashCode()I
+HSPLandroid/net/NetworkRequest;->toString()Ljava/lang/String;
+HSPLandroid/net/NetworkScoreManager;-><init>(Landroid/content/Context;)V
+HSPLandroid/net/NetworkSpecifier;-><init>()V
+HSPLandroid/net/NetworkStats;-><init>(JI)V
+HSPLandroid/net/NetworkUtils;->inetAddressToInt(Ljava/net/Inet4Address;)I
+HSPLandroid/net/NetworkUtils;->maskRawAddress([BI)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/ProxyInfo$1;-><init>()V
+HSPLandroid/net/RouteInfo$1;-><init>()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;I)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
+HSPLandroid/net/RouteInfo;->isHost()Z
+HSPLandroid/net/SSLCertificateSocketFactory$1;-><init>()V
+HSPLandroid/net/SSLCertificateSocketFactory;-><init>(ILandroid/net/SSLSessionCache;Z)V
+HSPLandroid/net/SSLCertificateSocketFactory;->getDefault(ILandroid/net/SSLSessionCache;)Ljavax/net/ssl/SSLSocketFactory;
+HSPLandroid/net/SSLCertificateSocketFactory;->getHttpSocketFactory(ILandroid/net/SSLSessionCache;)Lorg/apache/http/conn/ssl/SSLSocketFactory;
+HSPLandroid/net/SSLSessionCache;-><init>(Landroid/content/Context;)V
+HSPLandroid/net/SntpClient;-><init>()V
+HSPLandroid/net/SntpClient;->checkValidServerReply(BBIJ)V
+HSPLandroid/net/SntpClient;->getNtpTime()J
+HSPLandroid/net/SntpClient;->getNtpTimeReference()J
+HSPLandroid/net/SntpClient;->getRoundTripTime()J
+HSPLandroid/net/SntpClient;->read32([BI)J
+HSPLandroid/net/SntpClient;->readTimeStamp([BI)J
+HSPLandroid/net/SntpClient;->requestTime(Ljava/lang/String;I)Z
+HSPLandroid/net/SntpClient;->requestTime(Ljava/net/InetAddress;II)Z
+HSPLandroid/net/SntpClient;->writeTimeStamp([BIJ)V
+HSPLandroid/net/StringNetworkSpecifier$1;-><init>()V
+HSPLandroid/net/StringNetworkSpecifier;-><init>(Ljava/lang/String;)V
+HSPLandroid/net/TrafficStats;->getAndSetThreadStatsTag(I)I
+HSPLandroid/net/TrafficStats;->getMobileIfaces()[Ljava/lang/String;
+HSPLandroid/net/TrafficStats;->getMobileRxBytes()J
+HSPLandroid/net/TrafficStats;->getMobileTxBytes()J
+HSPLandroid/net/TrafficStats;->getStatsService()Landroid/net/INetworkStatsService;
+HSPLandroid/net/TrafficStats;->getTotalRxBytes()J
+HSPLandroid/net/TrafficStats;->getTotalTxBytes()J
+HSPLandroid/net/TrafficStats;->getUidRxBytes(I)J
+HSPLandroid/net/TrafficStats;->getUidTxBytes(I)J
+HSPLandroid/net/TrafficStats;->setThreadStatsTag(I)V
+HSPLandroid/net/Uri$1;-><init>()V
+HSPLandroid/net/Uri$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/Uri;
+HSPLandroid/net/Uri$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/net/Uri$AbstractHierarchicalUri;-><init>()V
+HSPLandroid/net/Uri$AbstractHierarchicalUri;-><init>(Landroid/net/Uri$AbstractHierarchicalUri;)V
+HSPLandroid/net/Uri$AbstractHierarchicalUri;->getHost()Ljava/lang/String;
+HSPLandroid/net/Uri$AbstractHierarchicalUri;->getLastPathSegment()Ljava/lang/String;
+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;
+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;
+HSPLandroid/net/Uri$AbstractPart;->writeTo(Landroid/os/Parcel;)V
+HSPLandroid/net/Uri$Builder;-><init>()V
+HSPLandroid/net/Uri$Builder;->appendEncodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->appendPath(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->appendQueryParameter(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->authority(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->authority(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->build()Landroid/net/Uri;
+HSPLandroid/net/Uri$Builder;->clearQuery()Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->encodedAuthority(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->encodedFragment(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->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;->hasSchemeOrAuthority()Z
+HSPLandroid/net/Uri$Builder;->path(Landroid/net/Uri$PathPart;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->path(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->query(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->scheme(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$HierarchicalUri;-><init>(Ljava/lang/String;Landroid/net/Uri$Part;Landroid/net/Uri$PathPart;Landroid/net/Uri$Part;Landroid/net/Uri$Part;)V
+HSPLandroid/net/Uri$HierarchicalUri;-><init>(Ljava/lang/String;Landroid/net/Uri$Part;Landroid/net/Uri$PathPart;Landroid/net/Uri$Part;Landroid/net/Uri$Part;Landroid/net/Uri$HierarchicalUri;)V
+HSPLandroid/net/Uri$HierarchicalUri;->appendSspTo(Ljava/lang/StringBuilder;)V
+HSPLandroid/net/Uri$HierarchicalUri;->buildUpon()Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$HierarchicalUri;->getAuthority()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->getEncodedAuthority()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->getEncodedFragment()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->getEncodedQuery()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->getPath()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->getPathSegments()Ljava/util/List;
+HSPLandroid/net/Uri$HierarchicalUri;->getScheme()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->getSchemeSpecificPart()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->getSsp()Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$HierarchicalUri;->isHierarchical()Z
+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$OpaqueUri;)V
+HSPLandroid/net/Uri$OpaqueUri;->getScheme()Ljava/lang/String;
+HSPLandroid/net/Uri$OpaqueUri;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri;
+HSPLandroid/net/Uri$OpaqueUri;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/net/Uri$Part$EmptyPart;-><init>(Ljava/lang/String;)V
+HSPLandroid/net/Uri$Part$EmptyPart;->isEmpty()Z
+HSPLandroid/net/Uri$Part;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/net/Uri$Part;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri$Part;)V
+HSPLandroid/net/Uri$Part;->from(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$Part;->fromDecoded(Ljava/lang/String;)Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$Part;->fromEncoded(Ljava/lang/String;)Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$Part;->getEncoded()Ljava/lang/String;
+HSPLandroid/net/Uri$Part;->isEmpty()Z
+HSPLandroid/net/Uri$Part;->nonNull(Landroid/net/Uri$Part;)Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$Part;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$PathPart;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/net/Uri$PathPart;->appendDecodedSegment(Landroid/net/Uri$PathPart;Ljava/lang/String;)Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$PathPart;->appendEncodedSegment(Landroid/net/Uri$PathPart;Ljava/lang/String;)Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$PathPart;->from(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$PathPart;->fromDecoded(Ljava/lang/String;)Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$PathPart;->fromEncoded(Ljava/lang/String;)Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$PathPart;->getEncoded()Ljava/lang/String;
+HSPLandroid/net/Uri$PathPart;->getPathSegments()Landroid/net/Uri$PathSegments;
+HSPLandroid/net/Uri$PathPart;->makeAbsolute(Landroid/net/Uri$PathPart;)Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$PathPart;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$PathSegments;-><init>([Ljava/lang/String;I)V
+HSPLandroid/net/Uri$PathSegments;->get(I)Ljava/lang/Object;
+HSPLandroid/net/Uri$PathSegments;->get(I)Ljava/lang/String;
+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
+HSPLandroid/net/Uri$StringUri;-><init>(Ljava/lang/String;Landroid/net/Uri$StringUri;)V
+HSPLandroid/net/Uri$StringUri;->buildUpon()Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$StringUri;->findFragmentSeparator()I
+HSPLandroid/net/Uri$StringUri;->findSchemeSeparator()I
+HSPLandroid/net/Uri$StringUri;->getAuthority()Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->getAuthorityPart()Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$StringUri;->getEncodedAuthority()Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->getEncodedFragment()Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->getEncodedQuery()Ljava/lang/String;
+HSPLandroid/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;->getQueryPart()Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$StringUri;->getScheme()Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->getSchemeSpecificPart()Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->getSsp()Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$StringUri;->isHierarchical()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;
+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;->-get1()Ljava/lang/String;
+HSPLandroid/net/Uri;-><init>()V
+HSPLandroid/net/Uri;-><init>(Landroid/net/Uri;)V
+HSPLandroid/net/Uri;->buildUpon()Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri;->checkContentUriWithoutPermission(Ljava/lang/String;I)V
+HSPLandroid/net/Uri;->checkFileUriExposed(Ljava/lang/String;)V
+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;
+HSPLandroid/net/Uri;->equals(Ljava/lang/Object;)Z
+HSPLandroid/net/Uri;->fromParts(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;
+HSPLandroid/net/Uri;->getAuthority()Ljava/lang/String;
+HSPLandroid/net/Uri;->getEncodedAuthority()Ljava/lang/String;
+HSPLandroid/net/Uri;->getEncodedFragment()Ljava/lang/String;
+HSPLandroid/net/Uri;->getEncodedPath()Ljava/lang/String;
+HSPLandroid/net/Uri;->getEncodedQuery()Ljava/lang/String;
+HSPLandroid/net/Uri;->getEncodedSchemeSpecificPart()Ljava/lang/String;
+HSPLandroid/net/Uri;->getEncodedUserInfo()Ljava/lang/String;
+HSPLandroid/net/Uri;->getFragment()Ljava/lang/String;
+HSPLandroid/net/Uri;->getHost()Ljava/lang/String;
+HSPLandroid/net/Uri;->getLastPathSegment()Ljava/lang/String;
+HSPLandroid/net/Uri;->getPath()Ljava/lang/String;
+HSPLandroid/net/Uri;->getPathSegments()Ljava/util/List;
+HSPLandroid/net/Uri;->getPort()I
+HSPLandroid/net/Uri;->getQuery()Ljava/lang/String;
+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;->getScheme()Ljava/lang/String;
+HSPLandroid/net/Uri;->getSchemeSpecificPart()Ljava/lang/String;
+HSPLandroid/net/Uri;->getUserInfo()Ljava/lang/String;
+HSPLandroid/net/Uri;->hashCode()I
+HSPLandroid/net/Uri;->isAllowed(CLjava/lang/String;)Z
+HSPLandroid/net/Uri;->isHierarchical()Z
+HSPLandroid/net/Uri;->isOpaque()Z
+HSPLandroid/net/Uri;->isPathPrefixMatch(Landroid/net/Uri;)Z
+HSPLandroid/net/Uri;->isRelative()Z
+HSPLandroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
+HSPLandroid/net/Uri;->toSafeString()Ljava/lang/String;
+HSPLandroid/net/Uri;->toString()Ljava/lang/String;
+HSPLandroid/net/Uri;->withAppendedPath(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;
+HSPLandroid/net/Uri;->writeToParcel(Landroid/os/Parcel;Landroid/net/Uri;)V
+HSPLandroid/net/WebAddress;-><init>(Ljava/lang/String;)V
+HSPLandroid/net/WebAddress;->toString()Ljava/lang/String;
+HSPLandroid/net/http/AndroidHttpClient$1;-><init>()V
+HSPLandroid/net/http/AndroidHttpClient$2;-><init>(Landroid/net/http/AndroidHttpClient;Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/params/HttpParams;)V
+HSPLandroid/net/http/AndroidHttpClient$LoggingConfiguration;-><init>(Ljava/lang/String;I)V
+HSPLandroid/net/http/AndroidHttpClient$LoggingConfiguration;-><init>(Ljava/lang/String;ILandroid/net/http/AndroidHttpClient$LoggingConfiguration;)V
+HSPLandroid/net/http/AndroidHttpClient;-><init>(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/params/HttpParams;)V
+HSPLandroid/net/http/AndroidHttpClient;->enableCurlLogging(Ljava/lang/String;I)V
+HSPLandroid/net/http/AndroidHttpClient;->getConnectionManager()Lorg/apache/http/conn/ClientConnectionManager;
+HSPLandroid/net/http/AndroidHttpClient;->newInstance(Ljava/lang/String;Landroid/content/Context;)Landroid/net/http/AndroidHttpClient;
+HSPLandroid/net/http/HttpResponseCache;-><init>(Lcom/android/okhttp/AndroidShimResponseCache;)V
+HSPLandroid/net/http/HttpResponseCache;->install(Ljava/io/File;J)Landroid/net/http/HttpResponseCache;
+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;
+HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->acquireWifiLock(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/WorkSource;)Z
+HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getConfiguredNetworks()Landroid/content/pm/ParceledListSlice;
+HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getConnectionInfo(Ljava/lang/String;)Landroid/net/wifi/WifiInfo;
+HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getScanResults(Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getVerboseLoggingLevel()I
+HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getWifiApEnabledState()I
+HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getWifiEnabledState()I
+HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->getWifiServiceMessenger()Landroid/os/Messenger;
+HSPLandroid/net/wifi/IWifiManager$Stub$Proxy;->releaseWifiLock(Landroid/os/IBinder;)Z
+HSPLandroid/net/wifi/IWifiManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiManager;
+HSPLandroid/net/wifi/IWifiManager;->acquireMulticastLock(Landroid/os/IBinder;Ljava/lang/String;)V
+HSPLandroid/net/wifi/IWifiManager;->acquireWifiLock(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/WorkSource;)Z
+HSPLandroid/net/wifi/IWifiManager;->addOrUpdateNetwork(Landroid/net/wifi/WifiConfiguration;)I
+HSPLandroid/net/wifi/IWifiManager;->addOrUpdatePasspointConfiguration(Landroid/net/wifi/hotspot2/PasspointConfiguration;)Z
+HSPLandroid/net/wifi/IWifiManager;->deauthenticateNetwork(JZ)V
+HSPLandroid/net/wifi/IWifiManager;->disableEphemeralNetwork(Ljava/lang/String;)V
+HSPLandroid/net/wifi/IWifiManager;->disableNetwork(I)Z
+HSPLandroid/net/wifi/IWifiManager;->disconnect()V
+HSPLandroid/net/wifi/IWifiManager;->enableAggressiveHandover(I)V
+HSPLandroid/net/wifi/IWifiManager;->enableNetwork(IZ)Z
+HSPLandroid/net/wifi/IWifiManager;->enableTdls(Ljava/lang/String;Z)V
+HSPLandroid/net/wifi/IWifiManager;->enableTdlsWithMacAddress(Ljava/lang/String;Z)V
+HSPLandroid/net/wifi/IWifiManager;->enableVerboseLogging(I)V
+HSPLandroid/net/wifi/IWifiManager;->enableWifiConnectivityManager(Z)V
+HSPLandroid/net/wifi/IWifiManager;->factoryReset()V
+HSPLandroid/net/wifi/IWifiManager;->getAggressiveHandover()I
+HSPLandroid/net/wifi/IWifiManager;->getAllowScansWithTraffic()I
+HSPLandroid/net/wifi/IWifiManager;->getConfiguredNetworks()Landroid/content/pm/ParceledListSlice;
+HSPLandroid/net/wifi/IWifiManager;->getConnectionInfo(Ljava/lang/String;)Landroid/net/wifi/WifiInfo;
+HSPLandroid/net/wifi/IWifiManager;->getConnectionStatistics()Landroid/net/wifi/WifiConnectionStatistics;
+HSPLandroid/net/wifi/IWifiManager;->getCountryCode()Ljava/lang/String;
+HSPLandroid/net/wifi/IWifiManager;->getCurrentNetwork()Landroid/net/Network;
+HSPLandroid/net/wifi/IWifiManager;->getCurrentNetworkWpsNfcConfigurationToken()Ljava/lang/String;
+HSPLandroid/net/wifi/IWifiManager;->getDhcpInfo()Landroid/net/DhcpInfo;
+HSPLandroid/net/wifi/IWifiManager;->getEnableAutoJoinWhenAssociated()Z
+HSPLandroid/net/wifi/IWifiManager;->getMatchingOsuProviders(Landroid/net/wifi/ScanResult;)Ljava/util/List;
+HSPLandroid/net/wifi/IWifiManager;->getMatchingWifiConfig(Landroid/net/wifi/ScanResult;)Landroid/net/wifi/WifiConfiguration;
+HSPLandroid/net/wifi/IWifiManager;->getPasspointConfigurations()Ljava/util/List;
+HSPLandroid/net/wifi/IWifiManager;->getPrivilegedConfiguredNetworks()Landroid/content/pm/ParceledListSlice;
+HSPLandroid/net/wifi/IWifiManager;->getScanResults(Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/net/wifi/IWifiManager;->getSupportedFeatures()I
+HSPLandroid/net/wifi/IWifiManager;->getVerboseLoggingLevel()I
+HSPLandroid/net/wifi/IWifiManager;->getWifiApConfiguration()Landroid/net/wifi/WifiConfiguration;
+HSPLandroid/net/wifi/IWifiManager;->getWifiApEnabledState()I
+HSPLandroid/net/wifi/IWifiManager;->getWifiEnabledState()I
+HSPLandroid/net/wifi/IWifiManager;->getWifiServiceMessenger()Landroid/os/Messenger;
+HSPLandroid/net/wifi/IWifiManager;->initializeMulticastFiltering()V
+HSPLandroid/net/wifi/IWifiManager;->isDualBandSupported()Z
+HSPLandroid/net/wifi/IWifiManager;->isMulticastEnabled()Z
+HSPLandroid/net/wifi/IWifiManager;->isScanAlwaysAvailable()Z
+HSPLandroid/net/wifi/IWifiManager;->matchProviderWithCurrentNetwork(Ljava/lang/String;)I
+HSPLandroid/net/wifi/IWifiManager;->queryPasspointIcon(JLjava/lang/String;)V
+HSPLandroid/net/wifi/IWifiManager;->reassociate()V
+HSPLandroid/net/wifi/IWifiManager;->reconnect()V
+HSPLandroid/net/wifi/IWifiManager;->releaseMulticastLock()V
+HSPLandroid/net/wifi/IWifiManager;->releaseWifiLock(Landroid/os/IBinder;)Z
+HSPLandroid/net/wifi/IWifiManager;->removeNetwork(I)Z
+HSPLandroid/net/wifi/IWifiManager;->removePasspointConfiguration(Ljava/lang/String;)Z
+HSPLandroid/net/wifi/IWifiManager;->reportActivityInfo()Landroid/net/wifi/WifiActivityEnergyInfo;
+HSPLandroid/net/wifi/IWifiManager;->requestActivityInfo(Landroid/os/ResultReceiver;)V
+HSPLandroid/net/wifi/IWifiManager;->restoreBackupData([B)V
+HSPLandroid/net/wifi/IWifiManager;->restoreSupplicantBackupData([B[B)V
+HSPLandroid/net/wifi/IWifiManager;->retrieveBackupData()[B
+HSPLandroid/net/wifi/IWifiManager;->saveConfiguration()Z
+HSPLandroid/net/wifi/IWifiManager;->setAllowScansWithTraffic(I)V
+HSPLandroid/net/wifi/IWifiManager;->setCountryCode(Ljava/lang/String;Z)V
+HSPLandroid/net/wifi/IWifiManager;->setEnableAutoJoinWhenAssociated(Z)Z
+HSPLandroid/net/wifi/IWifiManager;->setWifiApConfiguration(Landroid/net/wifi/WifiConfiguration;)V
+HSPLandroid/net/wifi/IWifiManager;->setWifiApEnabled(Landroid/net/wifi/WifiConfiguration;Z)V
+HSPLandroid/net/wifi/IWifiManager;->setWifiEnabled(Ljava/lang/String;Z)Z
+HSPLandroid/net/wifi/IWifiManager;->startLocalOnlyHotspot(Landroid/os/Messenger;Landroid/os/IBinder;Ljava/lang/String;)I
+HSPLandroid/net/wifi/IWifiManager;->startScan(Landroid/net/wifi/ScanSettings;Landroid/os/WorkSource;Ljava/lang/String;)V
+HSPLandroid/net/wifi/IWifiManager;->startSoftAp(Landroid/net/wifi/WifiConfiguration;)Z
+HSPLandroid/net/wifi/IWifiManager;->startWatchLocalOnlyHotspot(Landroid/os/Messenger;Landroid/os/IBinder;)V
+HSPLandroid/net/wifi/IWifiManager;->stopLocalOnlyHotspot()V
+HSPLandroid/net/wifi/IWifiManager;->stopSoftAp()Z
+HSPLandroid/net/wifi/IWifiManager;->stopWatchLocalOnlyHotspot()V
+HSPLandroid/net/wifi/IWifiManager;->updateInterfaceIpState(Ljava/lang/String;I)V
+HSPLandroid/net/wifi/IWifiManager;->updateWifiLockWorkSource(Landroid/os/IBinder;Landroid/os/WorkSource;)V
+HSPLandroid/net/wifi/ParcelUtil;->readCertificates(Landroid/os/Parcel;)[Ljava/security/cert/X509Certificate;
+HSPLandroid/net/wifi/ParcelUtil;->readPrivateKey(Landroid/os/Parcel;)Ljava/security/PrivateKey;
+HSPLandroid/net/wifi/ScanResult$1;-><init>()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;-><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/SupplicantState$1;-><init>()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;
+HSPLandroid/net/wifi/SupplicantState;-><init>(Ljava/lang/String;I)V
+HSPLandroid/net/wifi/SupplicantState;->valueOf(Ljava/lang/String;)Landroid/net/wifi/SupplicantState;
+HSPLandroid/net/wifi/SupplicantState;->values()[Landroid/net/wifi/SupplicantState;
+HSPLandroid/net/wifi/WifiActivityEnergyInfo$1;-><init>()V
+HSPLandroid/net/wifi/WifiActivityEnergyInfo;-><init>(JIJ[JJJJ)V
+HSPLandroid/net/wifi/WifiConfiguration$1;-><init>()V
+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;
+HSPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;-><init>()V
+HSPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->readFromParcel(Landroid/os/Parcel;)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
+HSPLandroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;->setNotRecommended(Z)V
+HSPLandroid/net/wifi/WifiConfiguration$RecentFailure;-><init>()V
+HSPLandroid/net/wifi/WifiConfiguration$RecentFailure;->setAssociationStatus(I)V
+HSPLandroid/net/wifi/WifiConfiguration;->-get0(Landroid/net/wifi/WifiConfiguration;)Landroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;
+HSPLandroid/net/wifi/WifiConfiguration;->-set0(Landroid/net/wifi/WifiConfiguration;Landroid/net/IpConfiguration;)Landroid/net/IpConfiguration;
+HSPLandroid/net/wifi/WifiConfiguration;->-set1(Landroid/net/wifi/WifiConfiguration;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/net/wifi/WifiConfiguration;->-wrap0(Landroid/os/Parcel;)Ljava/util/BitSet;
+HSPLandroid/net/wifi/WifiConfiguration;-><init>()V
+HSPLandroid/net/wifi/WifiConfiguration;->hasNoInternetAccess()Z
+HSPLandroid/net/wifi/WifiConfiguration;->isNoInternetAccessExpected()Z
+HSPLandroid/net/wifi/WifiConfiguration;->readBitSet(Landroid/os/Parcel;)Ljava/util/BitSet;
+HSPLandroid/net/wifi/WifiEnterpriseConfig$1;-><init>()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;
+HSPLandroid/net/wifi/WifiEnterpriseConfig;->-set0(Landroid/net/wifi/WifiEnterpriseConfig;[Ljava/security/cert/X509Certificate;)[Ljava/security/cert/X509Certificate;
+HSPLandroid/net/wifi/WifiEnterpriseConfig;->-set1(Landroid/net/wifi/WifiEnterpriseConfig;[Ljava/security/cert/X509Certificate;)[Ljava/security/cert/X509Certificate;
+HSPLandroid/net/wifi/WifiEnterpriseConfig;->-set2(Landroid/net/wifi/WifiEnterpriseConfig;Ljava/security/PrivateKey;)Ljava/security/PrivateKey;
+HSPLandroid/net/wifi/WifiEnterpriseConfig;->-set3(Landroid/net/wifi/WifiEnterpriseConfig;I)I
+HSPLandroid/net/wifi/WifiEnterpriseConfig;->-set4(Landroid/net/wifi/WifiEnterpriseConfig;I)I
+HSPLandroid/net/wifi/WifiEnterpriseConfig;-><init>()V
+HSPLandroid/net/wifi/WifiInfo$1;-><init>()V
+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;->-set0(Landroid/net/wifi/WifiInfo;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/net/wifi/WifiInfo;->-set1(Landroid/net/wifi/WifiInfo;Z)Z
+HSPLandroid/net/wifi/WifiInfo;->-set2(Landroid/net/wifi/WifiInfo;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/net/wifi/WifiInfo;->-set3(Landroid/net/wifi/WifiInfo;Z)Z
+HSPLandroid/net/wifi/WifiInfo;->-set4(Landroid/net/wifi/WifiInfo;Landroid/net/wifi/SupplicantState;)Landroid/net/wifi/SupplicantState;
+HSPLandroid/net/wifi/WifiInfo;->-set5(Landroid/net/wifi/WifiInfo;Landroid/net/wifi/WifiSsid;)Landroid/net/wifi/WifiSsid;
+HSPLandroid/net/wifi/WifiInfo;-><init>()V
+HSPLandroid/net/wifi/WifiInfo;->getBSSID()Ljava/lang/String;
+HSPLandroid/net/wifi/WifiInfo;->getIpAddress()I
+HSPLandroid/net/wifi/WifiInfo;->getSSID()Ljava/lang/String;
+HSPLandroid/net/wifi/WifiInfo;->setFrequency(I)V
+HSPLandroid/net/wifi/WifiInfo;->setInetAddress(Ljava/net/InetAddress;)V
+HSPLandroid/net/wifi/WifiInfo;->setLinkSpeed(I)V
+HSPLandroid/net/wifi/WifiInfo;->setNetworkId(I)V
+HSPLandroid/net/wifi/WifiInfo;->setRssi(I)V
+HSPLandroid/net/wifi/WifiManager$ActionListener;->onFailure(I)V
+HSPLandroid/net/wifi/WifiManager$ActionListener;->onSuccess()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$WifiLock;)V
+HSPLandroid/net/wifi/WifiManager$WifiLock;->acquire()V
+HSPLandroid/net/wifi/WifiManager$WifiLock;->finalize()V
+HSPLandroid/net/wifi/WifiManager$WifiLock;->release()V
+HSPLandroid/net/wifi/WifiManager;->-get0(Landroid/net/wifi/WifiManager;)I
+HSPLandroid/net/wifi/WifiManager;->-set0(Landroid/net/wifi/WifiManager;I)I
+HSPLandroid/net/wifi/WifiManager;-><init>(Landroid/content/Context;Landroid/net/wifi/IWifiManager;Landroid/os/Looper;)V
+HSPLandroid/net/wifi/WifiManager;->createWifiLock(ILjava/lang/String;)Landroid/net/wifi/WifiManager$WifiLock;
+HSPLandroid/net/wifi/WifiManager;->getConfiguredNetworks()Ljava/util/List;
+HSPLandroid/net/wifi/WifiManager;->getConnectionInfo()Landroid/net/wifi/WifiInfo;
+HSPLandroid/net/wifi/WifiManager;->getScanResults()Ljava/util/List;
+HSPLandroid/net/wifi/WifiManager;->getVerboseLoggingLevel()I
+HSPLandroid/net/wifi/WifiManager;->getWifiApState()I
+HSPLandroid/net/wifi/WifiManager;->getWifiServiceMessenger()Landroid/os/Messenger;
+HSPLandroid/net/wifi/WifiManager;->getWifiState()I
+HSPLandroid/net/wifi/WifiManager;->isWifiApEnabled()Z
+HSPLandroid/net/wifi/WifiManager;->isWifiEnabled()Z
+HSPLandroid/net/wifi/WifiNetworkScoreCache$CacheListener;-><init>(Landroid/os/Handler;)V
+HSPLandroid/net/wifi/WifiNetworkScoreCache$CacheListener;->networkCacheUpdated(Ljava/util/List;)V
+HSPLandroid/net/wifi/WifiNetworkScoreCache;-><init>(Landroid/content/Context;Landroid/net/wifi/WifiNetworkScoreCache$CacheListener;)V
+HSPLandroid/net/wifi/WifiNetworkScoreCache;-><init>(Landroid/content/Context;Landroid/net/wifi/WifiNetworkScoreCache$CacheListener;I)V
+HSPLandroid/net/wifi/WifiSsid$1;-><init>()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;)V
+HSPLandroid/net/wifi/WifiSsid;->getHexString()Ljava/lang/String;
+HSPLandroid/net/wifi/WifiSsid;->getOctets()[B
+HSPLandroid/net/wifi/WifiSsid;->isArrayAllZeroes([B)Z
+HSPLandroid/net/wifi/WifiSsid;->toString()Ljava/lang/String;
+HSPLandroid/net/wifi/p2p/IWifiP2pManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/net/wifi/p2p/IWifiP2pManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/p2p/IWifiP2pManager;
+HSPLandroid/net/wifi/p2p/IWifiP2pManager;->checkConfigureWifiDisplayPermission()V
+HSPLandroid/net/wifi/p2p/IWifiP2pManager;->close(Landroid/os/IBinder;)V
+HSPLandroid/net/wifi/p2p/IWifiP2pManager;->getMessenger(Landroid/os/IBinder;)Landroid/os/Messenger;
+HSPLandroid/net/wifi/p2p/IWifiP2pManager;->getP2pStateMachineMessenger()Landroid/os/Messenger;
+HSPLandroid/net/wifi/p2p/IWifiP2pManager;->setMiracastMode(I)V
+HSPLandroid/net/wifi/p2p/WifiP2pManager;-><init>(Landroid/net/wifi/p2p/IWifiP2pManager;)V
+HSPLandroid/nfc/IAppCallback$Stub;-><init>()V
+HSPLandroid/nfc/IAppCallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/nfc/IAppCallback;->createBeamShareData(B)Landroid/nfc/BeamShareData;
+HSPLandroid/nfc/IAppCallback;->onNdefPushComplete(B)V
+HSPLandroid/nfc/IAppCallback;->onTagDiscovered(Landroid/nfc/Tag;)V
+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;->setAppCallback(Landroid/nfc/IAppCallback;)V
+HSPLandroid/nfc/INfcAdapter$Stub$Proxy;->verifyNfcPermission()V
+HSPLandroid/nfc/INfcAdapter$Stub;-><init>()V
+HSPLandroid/nfc/INfcAdapter$Stub;->asInterface(Landroid/os/IBinder;)Landroid/nfc/INfcAdapter;
+HSPLandroid/nfc/INfcAdapter;->addNfcUnlockHandler(Landroid/nfc/INfcUnlockHandler;[I)V
+HSPLandroid/nfc/INfcAdapter;->disable(Z)Z
+HSPLandroid/nfc/INfcAdapter;->disableNdefPush()Z
+HSPLandroid/nfc/INfcAdapter;->dispatch(Landroid/nfc/Tag;)V
+HSPLandroid/nfc/INfcAdapter;->enable()Z
+HSPLandroid/nfc/INfcAdapter;->enableNdefPush()Z
+HSPLandroid/nfc/INfcAdapter;->getNfcAdapterExtrasInterface(Ljava/lang/String;)Landroid/nfc/INfcAdapterExtras;
+HSPLandroid/nfc/INfcAdapter;->getNfcCardEmulationInterface()Landroid/nfc/INfcCardEmulation;
+HSPLandroid/nfc/INfcAdapter;->getNfcDtaInterface(Ljava/lang/String;)Landroid/nfc/INfcDta;
+HSPLandroid/nfc/INfcAdapter;->getNfcFCardEmulationInterface()Landroid/nfc/INfcFCardEmulation;
+HSPLandroid/nfc/INfcAdapter;->getNfcTagInterface()Landroid/nfc/INfcTag;
+HSPLandroid/nfc/INfcAdapter;->getState()I
+HSPLandroid/nfc/INfcAdapter;->ignore(IILandroid/nfc/ITagRemovedCallback;)Z
+HSPLandroid/nfc/INfcAdapter;->invokeBeam()V
+HSPLandroid/nfc/INfcAdapter;->invokeBeamInternal(Landroid/nfc/BeamShareData;)V
+HSPLandroid/nfc/INfcAdapter;->isNdefPushEnabled()Z
+HSPLandroid/nfc/INfcAdapter;->pausePolling(I)V
+HSPLandroid/nfc/INfcAdapter;->removeNfcUnlockHandler(Landroid/nfc/INfcUnlockHandler;)V
+HSPLandroid/nfc/INfcAdapter;->resumePolling()V
+HSPLandroid/nfc/INfcAdapter;->setAppCallback(Landroid/nfc/IAppCallback;)V
+HSPLandroid/nfc/INfcAdapter;->setForegroundDispatch(Landroid/app/PendingIntent;[Landroid/content/IntentFilter;Landroid/nfc/TechListParcel;)V
+HSPLandroid/nfc/INfcAdapter;->setP2pModes(II)V
+HSPLandroid/nfc/INfcAdapter;->setReaderMode(Landroid/os/IBinder;Landroid/nfc/IAppCallback;ILandroid/os/Bundle;)V
+HSPLandroid/nfc/INfcAdapter;->verifyNfcPermission()V
+HSPLandroid/nfc/INfcCardEmulation$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/nfc/INfcCardEmulation$Stub;-><init>()V
+HSPLandroid/nfc/INfcCardEmulation$Stub;->asInterface(Landroid/os/IBinder;)Landroid/nfc/INfcCardEmulation;
+HSPLandroid/nfc/INfcCardEmulation;->getAidGroupForService(ILandroid/content/ComponentName;Ljava/lang/String;)Landroid/nfc/cardemulation/AidGroup;
+HSPLandroid/nfc/INfcCardEmulation;->getServices(ILjava/lang/String;)Ljava/util/List;
+HSPLandroid/nfc/INfcCardEmulation;->isDefaultServiceForAid(ILandroid/content/ComponentName;Ljava/lang/String;)Z
+HSPLandroid/nfc/INfcCardEmulation;->isDefaultServiceForCategory(ILandroid/content/ComponentName;Ljava/lang/String;)Z
+HSPLandroid/nfc/INfcCardEmulation;->registerAidGroupForService(ILandroid/content/ComponentName;Landroid/nfc/cardemulation/AidGroup;)Z
+HSPLandroid/nfc/INfcCardEmulation;->removeAidGroupForService(ILandroid/content/ComponentName;Ljava/lang/String;)Z
+HSPLandroid/nfc/INfcCardEmulation;->setDefaultForNextTap(ILandroid/content/ComponentName;)Z
+HSPLandroid/nfc/INfcCardEmulation;->setDefaultServiceForCategory(ILandroid/content/ComponentName;Ljava/lang/String;)Z
+HSPLandroid/nfc/INfcCardEmulation;->setPreferredService(Landroid/content/ComponentName;)Z
+HSPLandroid/nfc/INfcCardEmulation;->supportsAidPrefixRegistration()Z
+HSPLandroid/nfc/INfcCardEmulation;->unsetPreferredService()Z
+HSPLandroid/nfc/INfcFCardEmulation$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/nfc/INfcFCardEmulation$Stub;-><init>()V
+HSPLandroid/nfc/INfcFCardEmulation$Stub;->asInterface(Landroid/os/IBinder;)Landroid/nfc/INfcFCardEmulation;
+HSPLandroid/nfc/INfcFCardEmulation;->disableNfcFForegroundService()Z
+HSPLandroid/nfc/INfcFCardEmulation;->enableNfcFForegroundService(Landroid/content/ComponentName;)Z
+HSPLandroid/nfc/INfcFCardEmulation;->getMaxNumOfRegisterableSystemCodes()I
+HSPLandroid/nfc/INfcFCardEmulation;->getNfcFServices(I)Ljava/util/List;
+HSPLandroid/nfc/INfcFCardEmulation;->getNfcid2ForService(ILandroid/content/ComponentName;)Ljava/lang/String;
+HSPLandroid/nfc/INfcFCardEmulation;->getSystemCodeForService(ILandroid/content/ComponentName;)Ljava/lang/String;
+HSPLandroid/nfc/INfcFCardEmulation;->registerSystemCodeForService(ILandroid/content/ComponentName;Ljava/lang/String;)Z
+HSPLandroid/nfc/INfcFCardEmulation;->removeSystemCodeForService(ILandroid/content/ComponentName;)Z
+HSPLandroid/nfc/INfcFCardEmulation;->setNfcid2ForService(ILandroid/content/ComponentName;Ljava/lang/String;)Z
+HSPLandroid/nfc/INfcTag$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/nfc/INfcTag$Stub;-><init>()V
+HSPLandroid/nfc/INfcTag$Stub;->asInterface(Landroid/os/IBinder;)Landroid/nfc/INfcTag;
+HSPLandroid/nfc/INfcTag;->canMakeReadOnly(I)Z
+HSPLandroid/nfc/INfcTag;->connect(II)I
+HSPLandroid/nfc/INfcTag;->formatNdef(I[B)I
+HSPLandroid/nfc/INfcTag;->getExtendedLengthApdusSupported()Z
+HSPLandroid/nfc/INfcTag;->getMaxTransceiveLength(I)I
+HSPLandroid/nfc/INfcTag;->getTechList(I)[I
+HSPLandroid/nfc/INfcTag;->getTimeout(I)I
+HSPLandroid/nfc/INfcTag;->isNdef(I)Z
+HSPLandroid/nfc/INfcTag;->isPresent(I)Z
+HSPLandroid/nfc/INfcTag;->ndefIsWritable(I)Z
+HSPLandroid/nfc/INfcTag;->ndefMakeReadOnly(I)I
+HSPLandroid/nfc/INfcTag;->ndefRead(I)Landroid/nfc/NdefMessage;
+HSPLandroid/nfc/INfcTag;->ndefWrite(ILandroid/nfc/NdefMessage;)I
+HSPLandroid/nfc/INfcTag;->reconnect(I)I
+HSPLandroid/nfc/INfcTag;->rediscover(I)Landroid/nfc/Tag;
+HSPLandroid/nfc/INfcTag;->resetTimeouts()V
+HSPLandroid/nfc/INfcTag;->setTimeout(II)I
+HSPLandroid/nfc/INfcTag;->transceive(I[BZ)Landroid/nfc/TransceiveResult;
+HSPLandroid/nfc/NfcActivityManager$NfcActivityState;-><init>(Landroid/nfc/NfcActivityManager;Landroid/app/Activity;)V
+HSPLandroid/nfc/NfcActivityManager$NfcApplicationState;-><init>(Landroid/nfc/NfcActivityManager;Landroid/app/Application;)V
+HSPLandroid/nfc/NfcActivityManager$NfcApplicationState;->register()V
+HSPLandroid/nfc/NfcActivityManager;-><init>(Landroid/nfc/NfcAdapter;)V
+HSPLandroid/nfc/NfcActivityManager;->findActivityState(Landroid/app/Activity;)Landroid/nfc/NfcActivityManager$NfcActivityState;
+HSPLandroid/nfc/NfcActivityManager;->findAppState(Landroid/app/Application;)Landroid/nfc/NfcActivityManager$NfcApplicationState;
+HSPLandroid/nfc/NfcActivityManager;->getActivityState(Landroid/app/Activity;)Landroid/nfc/NfcActivityManager$NfcActivityState;
+HSPLandroid/nfc/NfcActivityManager;->onActivityResumed(Landroid/app/Activity;)V
+HSPLandroid/nfc/NfcActivityManager;->onActivityStarted(Landroid/app/Activity;)V
+HSPLandroid/nfc/NfcActivityManager;->registerApplication(Landroid/app/Application;)V
+HSPLandroid/nfc/NfcActivityManager;->requestNfcServiceCallback()V
+HSPLandroid/nfc/NfcActivityManager;->setNdefPushMessageCallback(Landroid/app/Activity;Landroid/nfc/NfcAdapter$CreateNdefMessageCallback;I)V
+HSPLandroid/nfc/NfcActivityManager;->setOnNdefPushCompleteCallback(Landroid/app/Activity;Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback;)V
+HSPLandroid/nfc/NfcActivityManager;->verifyNfcPermission()V
+HSPLandroid/nfc/NfcAdapter$1;-><init>(Landroid/nfc/NfcAdapter;)V
+HSPLandroid/nfc/NfcAdapter$CreateNdefMessageCallback;->createNdefMessage(Landroid/nfc/NfcEvent;)Landroid/nfc/NdefMessage;
+HSPLandroid/nfc/NfcAdapter$OnNdefPushCompleteCallback;->onNdefPushComplete(Landroid/nfc/NfcEvent;)V
+HSPLandroid/nfc/NfcAdapter;-><init>(Landroid/content/Context;)V
+HSPLandroid/nfc/NfcAdapter;->getDefaultAdapter(Landroid/content/Context;)Landroid/nfc/NfcAdapter;
+HSPLandroid/nfc/NfcAdapter;->getNfcAdapter(Landroid/content/Context;)Landroid/nfc/NfcAdapter;
+HSPLandroid/nfc/NfcAdapter;->getSdkVersion()I
+HSPLandroid/nfc/NfcAdapter;->getServiceInterface()Landroid/nfc/INfcAdapter;
+HSPLandroid/nfc/NfcAdapter;->hasNfcFeature()Z
+HSPLandroid/nfc/NfcAdapter;->hasNfcHceFeature()Z
+HSPLandroid/nfc/NfcAdapter;->setNdefPushMessageCallback(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback;Landroid/app/Activity;[Landroid/app/Activity;)V
+HSPLandroid/nfc/NfcAdapter;->setOnNdefPushCompleteCallback(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback;Landroid/app/Activity;[Landroid/app/Activity;)V
+HSPLandroid/nfc/NfcManager;-><init>(Landroid/content/Context;)V
+HSPLandroid/nfc/NfcManager;->getDefaultAdapter()Landroid/nfc/NfcAdapter;
+HSPLandroid/nfc/cardemulation/AidGroup$1;-><init>()V
+HSPLandroid/nfc/cardemulation/AidGroup;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/nfc/cardemulation/ApduServiceInfo$1;-><init>()V
+HSPLandroid/nfc/cardemulation/ApduServiceInfo;-><init>(Landroid/content/pm/PackageManager;Landroid/content/pm/ResolveInfo;Z)V
+HSPLandroid/nfc/cardemulation/ApduServiceInfo;->getAidGroups()Ljava/util/ArrayList;
+HSPLandroid/nfc/cardemulation/ApduServiceInfo;->getAids()Ljava/util/List;
+HSPLandroid/nfc/cardemulation/ApduServiceInfo;->getCategoryForAid(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/nfc/cardemulation/ApduServiceInfo;->getComponent()Landroid/content/ComponentName;
+HSPLandroid/nfc/cardemulation/ApduServiceInfo;->getPrefixAids()Ljava/util/List;
+HSPLandroid/nfc/cardemulation/ApduServiceInfo;->getSubsetAids()Ljava/util/List;
+HSPLandroid/nfc/cardemulation/CardEmulation;->isValidAid(Ljava/lang/String;)Z
+HSPLandroid/opengl/EGLDisplay;-><init>(J)V
+HSPLandroid/opengl/EGLObjectHandle;-><init>(J)V
+HSPLandroid/opengl/GLES20;->glVertexAttribPointer(IIIZILjava/nio/Buffer;)V
+HSPLandroid/opengl/GLSurfaceView$BaseConfigChooser;-><init>(Landroid/opengl/GLSurfaceView;[I)V
+HSPLandroid/opengl/GLSurfaceView$BaseConfigChooser;->chooseConfig(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;)Ljavax/microedition/khronos/egl/EGLConfig;
+HSPLandroid/opengl/GLSurfaceView$BaseConfigChooser;->chooseConfig(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;[Ljavax/microedition/khronos/egl/EGLConfig;)Ljavax/microedition/khronos/egl/EGLConfig;
+HSPLandroid/opengl/GLSurfaceView$BaseConfigChooser;->filterConfigSpec([I)[I
+HSPLandroid/opengl/GLSurfaceView$ComponentSizeChooser;-><init>(Landroid/opengl/GLSurfaceView;IIIIII)V
+HSPLandroid/opengl/GLSurfaceView$ComponentSizeChooser;->chooseConfig(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;[Ljavax/microedition/khronos/egl/EGLConfig;)Ljavax/microedition/khronos/egl/EGLConfig;
+HSPLandroid/opengl/GLSurfaceView$ComponentSizeChooser;->findConfigAttrib(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;II)I
+HSPLandroid/opengl/GLSurfaceView$DefaultWindowSurfaceFactory;-><init>()V
+HSPLandroid/opengl/GLSurfaceView$DefaultWindowSurfaceFactory;-><init>(Landroid/opengl/GLSurfaceView$DefaultWindowSurfaceFactory;)V
+HSPLandroid/opengl/GLSurfaceView$DefaultWindowSurfaceFactory;->createWindowSurface(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;)Ljavax/microedition/khronos/egl/EGLSurface;
+HSPLandroid/opengl/GLSurfaceView$EGLConfigChooser;->chooseConfig(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;)Ljavax/microedition/khronos/egl/EGLConfig;
+HSPLandroid/opengl/GLSurfaceView$EGLContextFactory;->createContext(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;)Ljavax/microedition/khronos/egl/EGLContext;
+HSPLandroid/opengl/GLSurfaceView$EGLContextFactory;->destroyContext(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLContext;)V
+HSPLandroid/opengl/GLSurfaceView$EGLWindowSurfaceFactory;->createWindowSurface(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;)Ljavax/microedition/khronos/egl/EGLSurface;
+HSPLandroid/opengl/GLSurfaceView$EGLWindowSurfaceFactory;->destroySurface(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;)V
+HSPLandroid/opengl/GLSurfaceView$EglHelper;-><init>(Ljava/lang/ref/WeakReference;)V
+HSPLandroid/opengl/GLSurfaceView$EglHelper;->createGL()Ljavax/microedition/khronos/opengles/GL;
+HSPLandroid/opengl/GLSurfaceView$EglHelper;->createSurface()Z
+HSPLandroid/opengl/GLSurfaceView$EglHelper;->destroySurfaceImp()V
+HSPLandroid/opengl/GLSurfaceView$EglHelper;->start()V
+HSPLandroid/opengl/GLSurfaceView$EglHelper;->swap()I
+HSPLandroid/opengl/GLSurfaceView$GLThread;-><init>(Ljava/lang/ref/WeakReference;)V
+HSPLandroid/opengl/GLSurfaceView$GLThread;->ableToDraw()Z
+HSPLandroid/opengl/GLSurfaceView$GLThread;->guardedRun()V
+HSPLandroid/opengl/GLSurfaceView$GLThread;->onWindowResize(II)V
+HSPLandroid/opengl/GLSurfaceView$GLThread;->readyToDraw()Z
+HSPLandroid/opengl/GLSurfaceView$GLThread;->requestRender()V
+HSPLandroid/opengl/GLSurfaceView$GLThread;->run()V
+HSPLandroid/opengl/GLSurfaceView$GLThread;->setRenderMode(I)V
+HSPLandroid/opengl/GLSurfaceView$GLThread;->surfaceCreated()V
+HSPLandroid/opengl/GLSurfaceView$GLThreadManager;-><init>()V
+HSPLandroid/opengl/GLSurfaceView$GLThreadManager;-><init>(Landroid/opengl/GLSurfaceView$GLThreadManager;)V
+HSPLandroid/opengl/GLSurfaceView$Renderer;->onDrawFrame(Ljavax/microedition/khronos/opengles/GL10;)V
+HSPLandroid/opengl/GLSurfaceView$Renderer;->onSurfaceChanged(Ljavax/microedition/khronos/opengles/GL10;II)V
+HSPLandroid/opengl/GLSurfaceView$Renderer;->onSurfaceCreated(Ljavax/microedition/khronos/opengles/GL10;Ljavax/microedition/khronos/egl/EGLConfig;)V
+HSPLandroid/opengl/GLSurfaceView$SimpleEGLConfigChooser;-><init>(Landroid/opengl/GLSurfaceView;Z)V
+HSPLandroid/opengl/GLSurfaceView;->-get0(Landroid/opengl/GLSurfaceView;)I
+HSPLandroid/opengl/GLSurfaceView;->-get1(Landroid/opengl/GLSurfaceView;)Landroid/opengl/GLSurfaceView$EGLConfigChooser;
+HSPLandroid/opengl/GLSurfaceView;->-get2(Landroid/opengl/GLSurfaceView;)I
+HSPLandroid/opengl/GLSurfaceView;->-get3(Landroid/opengl/GLSurfaceView;)Landroid/opengl/GLSurfaceView$EGLContextFactory;
+HSPLandroid/opengl/GLSurfaceView;->-get4(Landroid/opengl/GLSurfaceView;)Landroid/opengl/GLSurfaceView$EGLWindowSurfaceFactory;
+HSPLandroid/opengl/GLSurfaceView;->-get5(Landroid/opengl/GLSurfaceView;)Landroid/opengl/GLSurfaceView$GLWrapper;
+HSPLandroid/opengl/GLSurfaceView;->-get7(Landroid/opengl/GLSurfaceView;)Landroid/opengl/GLSurfaceView$Renderer;
+HSPLandroid/opengl/GLSurfaceView;->-get8()Landroid/opengl/GLSurfaceView$GLThreadManager;
+HSPLandroid/opengl/GLSurfaceView;-><init>(Landroid/content/Context;)V
+HSPLandroid/opengl/GLSurfaceView;->checkRenderThreadState()V
+HSPLandroid/opengl/GLSurfaceView;->init()V
+HSPLandroid/opengl/GLSurfaceView;->requestRender()V
+HSPLandroid/opengl/GLSurfaceView;->setEGLContextClientVersion(I)V
+HSPLandroid/opengl/GLSurfaceView;->setEGLContextFactory(Landroid/opengl/GLSurfaceView$EGLContextFactory;)V
+HSPLandroid/opengl/GLSurfaceView;->setPreserveEGLContextOnPause(Z)V
+HSPLandroid/opengl/GLSurfaceView;->setRenderMode(I)V
+HSPLandroid/opengl/GLSurfaceView;->setRenderer(Landroid/opengl/GLSurfaceView$Renderer;)V
+HSPLandroid/opengl/GLSurfaceView;->surfaceChanged(Landroid/view/SurfaceHolder;III)V
+HSPLandroid/opengl/GLSurfaceView;->surfaceCreated(Landroid/view/SurfaceHolder;)V
+HSPLandroid/opengl/GLSurfaceView;->surfaceRedrawNeeded(Landroid/view/SurfaceHolder;)V
+HSPLandroid/opengl/GLUtils;->texImage2D(IILandroid/graphics/Bitmap;I)V
+HSPLandroid/opengl/Matrix;->invertM([FI[FI)Z
+HSPLandroid/opengl/Matrix;->length(FFF)F
+HSPLandroid/opengl/Matrix;->orthoM([FIFFFFFF)V
+HSPLandroid/opengl/Matrix;->rotateM([FIFFFF)V
+HSPLandroid/opengl/Matrix;->scaleM([FIFFF)V
+HSPLandroid/opengl/Matrix;->setIdentityM([FI)V
+HSPLandroid/opengl/Matrix;->setRotateM([FIFFFF)V
+HSPLandroid/opengl/Matrix;->translateM([FIFFF)V
+HSPLandroid/os/-$Lambda$-dncxFEc2F2bgG2fsIoC6FC6WNE;-><init>(B)V
+HSPLandroid/os/-$Lambda$BcGBlsGjMZMF6Ej78rWJ608MYSM;->$m$0()V
+HSPLandroid/os/-$Lambda$BcGBlsGjMZMF6Ej78rWJ608MYSM;->run()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;-><init>()V
+HSPLandroid/os/AsyncTask$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
+HSPLandroid/os/AsyncTask$2;-><init>(Landroid/os/AsyncTask;)V
+HSPLandroid/os/AsyncTask$2;->call()Ljava/lang/Object;
+HSPLandroid/os/AsyncTask$3;-><init>(Landroid/os/AsyncTask;Ljava/util/concurrent/Callable;)V
+HSPLandroid/os/AsyncTask$3;->done()V
+HSPLandroid/os/AsyncTask$AsyncTaskResult;-><init>(Landroid/os/AsyncTask;[Ljava/lang/Object;)V
+HSPLandroid/os/AsyncTask$InternalHandler;-><init>(Landroid/os/Looper;)V
+HSPLandroid/os/AsyncTask$InternalHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/os/AsyncTask$SerialExecutor$1;-><init>(Landroid/os/AsyncTask$SerialExecutor;Ljava/lang/Runnable;)V
+HSPLandroid/os/AsyncTask$SerialExecutor$1;->run()V
+HSPLandroid/os/AsyncTask$SerialExecutor;-><init>()V
+HSPLandroid/os/AsyncTask$SerialExecutor;-><init>(Landroid/os/AsyncTask$SerialExecutor;)V
+HSPLandroid/os/AsyncTask$SerialExecutor;->execute(Ljava/lang/Runnable;)V
+HSPLandroid/os/AsyncTask$SerialExecutor;->scheduleNext()V
+HSPLandroid/os/AsyncTask$Status;-><init>(Ljava/lang/String;I)V
+HSPLandroid/os/AsyncTask$WorkerRunnable;-><init>()V
+HSPLandroid/os/AsyncTask$WorkerRunnable;-><init>(Landroid/os/AsyncTask$WorkerRunnable;)V
+HSPLandroid/os/AsyncTask;->-get1(Landroid/os/AsyncTask;)Ljava/util/concurrent/atomic/AtomicBoolean;
+HSPLandroid/os/AsyncTask;->-wrap0(Landroid/os/AsyncTask;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/os/AsyncTask;->-wrap1(Landroid/os/AsyncTask;Ljava/lang/Object;)V
+HSPLandroid/os/AsyncTask;->-wrap2(Landroid/os/AsyncTask;Ljava/lang/Object;)V
+HSPLandroid/os/AsyncTask;-><init>()V
+HSPLandroid/os/AsyncTask;-><init>(Landroid/os/Looper;)V
+HSPLandroid/os/AsyncTask;->cancel(Z)Z
+HSPLandroid/os/AsyncTask;->doInBackground([Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/os/AsyncTask;->execute(Ljava/lang/Runnable;)V
+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
+HSPLandroid/os/AsyncTask;->get()Ljava/lang/Object;
+HSPLandroid/os/AsyncTask;->getHandler()Landroid/os/Handler;
+HSPLandroid/os/AsyncTask;->getMainHandler()Landroid/os/Handler;
+HSPLandroid/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
+HSPLandroid/os/BaseBundle;-><init>()V
+HSPLandroid/os/BaseBundle;-><init>(I)V
+HSPLandroid/os/BaseBundle;-><init>(Landroid/os/BaseBundle;)V
+HSPLandroid/os/BaseBundle;-><init>(Landroid/os/Parcel;I)V
+HSPLandroid/os/BaseBundle;-><init>(Ljava/lang/ClassLoader;I)V
+HSPLandroid/os/BaseBundle;-><init>(Z)V
+HSPLandroid/os/BaseBundle;->clear()V
+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;
+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
+HSPLandroid/os/BaseBundle;->getByteArray(Ljava/lang/String;)[B
+HSPLandroid/os/BaseBundle;->getCharSequence(Ljava/lang/String;)Ljava/lang/CharSequence;
+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;->getLong(Ljava/lang/String;)J
+HSPLandroid/os/BaseBundle;->getLong(Ljava/lang/String;J)J
+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;
+HSPLandroid/os/BaseBundle;->getStringArray(Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/os/BaseBundle;->getStringArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
+HSPLandroid/os/BaseBundle;->initializeFromParcelLocked(Landroid/os/Parcel;Z)V
+HSPLandroid/os/BaseBundle;->isEmpty()Z
+HSPLandroid/os/BaseBundle;->isEmptyParcel()Z
+HSPLandroid/os/BaseBundle;->isEmptyParcel(Landroid/os/Parcel;)Z
+HSPLandroid/os/BaseBundle;->isParcelled()Z
+HSPLandroid/os/BaseBundle;->keySet()Ljava/util/Set;
+HSPLandroid/os/BaseBundle;->putAll(Landroid/util/ArrayMap;)V
+HSPLandroid/os/BaseBundle;->putBoolean(Ljava/lang/String;Z)V
+HSPLandroid/os/BaseBundle;->putByteArray(Ljava/lang/String;[B)V
+HSPLandroid/os/BaseBundle;->putCharSequence(Ljava/lang/String;Ljava/lang/CharSequence;)V
+HSPLandroid/os/BaseBundle;->putCharSequenceArray(Ljava/lang/String;[Ljava/lang/CharSequence;)V
+HSPLandroid/os/BaseBundle;->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;->putLong(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;->unparcel()V
+HSPLandroid/os/BaseBundle;->writeToParcelInner(Landroid/os/Parcel;I)V
+HSPLandroid/os/BatteryManager;-><init>(Lcom/android/internal/app/IBatteryStats;Landroid/os/IBatteryPropertiesRegistrar;)V
+HSPLandroid/os/BatteryManager;->getLongProperty(I)J
+HSPLandroid/os/BatteryManager;->isCharging()Z
+HSPLandroid/os/BatteryManager;->queryProperty(I)J
+HSPLandroid/os/BatteryProperty$1;-><init>()V
+HSPLandroid/os/BatteryProperty;-><init>()V
+HSPLandroid/os/BatteryProperty;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/os/BatteryStats$BitDescription;-><init>(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V
+HSPLandroid/os/BatteryStats$BitDescription;-><init>(ILjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/BatteryStats$ControllerActivityCounter;-><init>()V
+HSPLandroid/os/BatteryStats$ControllerActivityCounter;->getIdleTimeCounter()Landroid/os/BatteryStats$LongCounter;
+HSPLandroid/os/BatteryStats$ControllerActivityCounter;->getPowerCounter()Landroid/os/BatteryStats$LongCounter;
+HSPLandroid/os/BatteryStats$ControllerActivityCounter;->getRxTimeCounter()Landroid/os/BatteryStats$LongCounter;
+HSPLandroid/os/BatteryStats$ControllerActivityCounter;->getTxTimeCounters()[Landroid/os/BatteryStats$LongCounter;
+HSPLandroid/os/BatteryStats$Counter;-><init>()V
+HSPLandroid/os/BatteryStats$Counter;->getCountLocked(I)I
+HSPLandroid/os/BatteryStats$Counter;->logState(Landroid/util/Printer;Ljava/lang/String;)V
+HSPLandroid/os/BatteryStats$HistoryEventTracker;-><init>()V
+HSPLandroid/os/BatteryStats$HistoryItem;-><init>()V
+HSPLandroid/os/BatteryStats$HistoryItem;->clear()V
+HSPLandroid/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
+HSPLandroid/os/BatteryStats$HistoryStepDetails;-><init>()V
+HSPLandroid/os/BatteryStats$HistoryStepDetails;->clear()V
+HSPLandroid/os/BatteryStats$HistoryTag;-><init>()V
+HSPLandroid/os/BatteryStats$HistoryTag;->hashCode()I
+HSPLandroid/os/BatteryStats$IntToString;->applyAsString(I)Ljava/lang/String;
+HSPLandroid/os/BatteryStats$LevelStepTracker;-><init>(I)V
+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$LongCounter;-><init>()V
+HSPLandroid/os/BatteryStats$LongCounter;->getCountLocked(I)J
+HSPLandroid/os/BatteryStats$LongCounter;->logState(Landroid/util/Printer;Ljava/lang/String;)V
+HSPLandroid/os/BatteryStats$LongCounterArray;-><init>()V
+HSPLandroid/os/BatteryStats$LongCounterArray;->getCountsLocked(I)[J
+HSPLandroid/os/BatteryStats$LongCounterArray;->logState(Landroid/util/Printer;Ljava/lang/String;)V
+HSPLandroid/os/BatteryStats$PackageChange;-><init>()V
+HSPLandroid/os/BatteryStats$Timer;-><init>()V
+HSPLandroid/os/BatteryStats$Timer;->getCountLocked(I)I
+HSPLandroid/os/BatteryStats$Timer;->getTimeSinceMarkLocked(J)J
+HSPLandroid/os/BatteryStats$Timer;->getTotalTimeLocked(JI)J
+HSPLandroid/os/BatteryStats$Uid$Pkg$Serv;-><init>()V
+HSPLandroid/os/BatteryStats$Uid$Pkg$Serv;->getLaunches(I)I
+HSPLandroid/os/BatteryStats$Uid$Pkg$Serv;->getStartTime(JI)J
+HSPLandroid/os/BatteryStats$Uid$Pkg$Serv;->getStarts(I)I
+HSPLandroid/os/BatteryStats$Uid$Pkg;-><init>()V
+HSPLandroid/os/BatteryStats$Uid$Pkg;->getServiceStats()Landroid/util/ArrayMap;
+HSPLandroid/os/BatteryStats$Uid$Pkg;->getWakeupAlarmStats()Landroid/util/ArrayMap;
+HSPLandroid/os/BatteryStats$Uid$Proc;-><init>()V
+HSPLandroid/os/BatteryStats$Uid$Proc;->countExcessivePowers()I
+HSPLandroid/os/BatteryStats$Uid$Proc;->getExcessivePower(I)Landroid/os/BatteryStats$Uid$Proc$ExcessivePower;
+HSPLandroid/os/BatteryStats$Uid$Proc;->getForegroundTime(I)J
+HSPLandroid/os/BatteryStats$Uid$Proc;->getNumAnrs(I)I
+HSPLandroid/os/BatteryStats$Uid$Proc;->getNumCrashes(I)I
+HSPLandroid/os/BatteryStats$Uid$Proc;->getStarts(I)I
+HSPLandroid/os/BatteryStats$Uid$Proc;->getSystemTime(I)J
+HSPLandroid/os/BatteryStats$Uid$Proc;->getUserTime(I)J
+HSPLandroid/os/BatteryStats$Uid$Proc;->isActive()Z
+HSPLandroid/os/BatteryStats$Uid$Sensor;-><init>()V
+HSPLandroid/os/BatteryStats$Uid$Sensor;->getHandle()I
+HSPLandroid/os/BatteryStats$Uid$Sensor;->getSensorBackgroundTime()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid$Sensor;->getSensorTime()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid$Wakelock;-><init>()V
+HSPLandroid/os/BatteryStats$Uid$Wakelock;->getWakeTime(I)Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;-><init>()V
+HSPLandroid/os/BatteryStats$Uid;->getAggregatedPartialWakelockTimer()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;->getAudioTurnedOnTimer()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;->getBluetoothControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
+HSPLandroid/os/BatteryStats$Uid;->getBluetoothScanBackgroundTimer()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;->getBluetoothScanResultBgCounter()Landroid/os/BatteryStats$Counter;
+HSPLandroid/os/BatteryStats$Uid;->getBluetoothScanResultCounter()Landroid/os/BatteryStats$Counter;
+HSPLandroid/os/BatteryStats$Uid;->getBluetoothScanTimer()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;->getBluetoothUnoptimizedScanBackgroundTimer()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;->getBluetoothUnoptimizedScanTimer()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;->getCameraTurnedOnTimer()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;->getCpuFreqTimes(I)[J
+HSPLandroid/os/BatteryStats$Uid;->getFlashlightTurnedOnTimer()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;->getForegroundActivityTimer()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;->getForegroundServiceTimer()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;->getFullWifiLockTime(JI)J
+HSPLandroid/os/BatteryStats$Uid;->getJobCompletionStats()Landroid/util/ArrayMap;
+HSPLandroid/os/BatteryStats$Uid;->getJobStats()Landroid/util/ArrayMap;
+HSPLandroid/os/BatteryStats$Uid;->getMobileRadioActiveCount(I)I
+HSPLandroid/os/BatteryStats$Uid;->getMobileRadioActiveTime(I)J
+HSPLandroid/os/BatteryStats$Uid;->getMobileRadioApWakeupCount(I)J
+HSPLandroid/os/BatteryStats$Uid;->getModemControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
+HSPLandroid/os/BatteryStats$Uid;->getNetworkActivityBytes(II)J
+HSPLandroid/os/BatteryStats$Uid;->getNetworkActivityPackets(II)J
+HSPLandroid/os/BatteryStats$Uid;->getPackageStats()Landroid/util/ArrayMap;
+HSPLandroid/os/BatteryStats$Uid;->getPidStats()Landroid/util/SparseArray;
+HSPLandroid/os/BatteryStats$Uid;->getProcessStateTime(IJI)J
+HSPLandroid/os/BatteryStats$Uid;->getProcessStateTimer(I)Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;->getProcessStats()Landroid/util/ArrayMap;
+HSPLandroid/os/BatteryStats$Uid;->getScreenOffCpuFreqTimes(I)[J
+HSPLandroid/os/BatteryStats$Uid;->getSensorStats()Landroid/util/SparseArray;
+HSPLandroid/os/BatteryStats$Uid;->getSyncStats()Landroid/util/ArrayMap;
+HSPLandroid/os/BatteryStats$Uid;->getSystemCpuTimeUs(I)J
+HSPLandroid/os/BatteryStats$Uid;->getTimeAtCpuSpeed(III)J
+HSPLandroid/os/BatteryStats$Uid;->getUid()I
+HSPLandroid/os/BatteryStats$Uid;->getUserActivityCount(II)I
+HSPLandroid/os/BatteryStats$Uid;->getUserCpuTimeUs(I)J
+HSPLandroid/os/BatteryStats$Uid;->getVibratorOnTimer()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;->getVideoTurnedOnTimer()Landroid/os/BatteryStats$Timer;
+HSPLandroid/os/BatteryStats$Uid;->getWakelockStats()Landroid/util/ArrayMap;
+HSPLandroid/os/BatteryStats$Uid;->getWifiBatchedScanCount(II)I
+HSPLandroid/os/BatteryStats$Uid;->getWifiBatchedScanTime(IJI)J
+HSPLandroid/os/BatteryStats$Uid;->getWifiControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
+HSPLandroid/os/BatteryStats$Uid;->getWifiMulticastTime(JI)J
+HSPLandroid/os/BatteryStats$Uid;->getWifiRadioApWakeupCount(I)J
+HSPLandroid/os/BatteryStats$Uid;->getWifiRunningTime(JI)J
+HSPLandroid/os/BatteryStats$Uid;->getWifiScanActualTime(J)J
+HSPLandroid/os/BatteryStats$Uid;->getWifiScanBackgroundCount(I)I
+HSPLandroid/os/BatteryStats$Uid;->getWifiScanBackgroundTime(J)J
+HSPLandroid/os/BatteryStats$Uid;->getWifiScanCount(I)I
+HSPLandroid/os/BatteryStats$Uid;->getWifiScanTime(JI)J
+HSPLandroid/os/BatteryStats$Uid;->hasNetworkActivity()Z
+HSPLandroid/os/BatteryStats$Uid;->hasUserActivity()Z
+HSPLandroid/os/BatteryStats$Uid;->noteActivityPausedLocked(J)V
+HSPLandroid/os/BatteryStats$Uid;->noteActivityResumedLocked(J)V
+HSPLandroid/os/BatteryStats$Uid;->noteFullWifiLockAcquiredLocked(J)V
+HSPLandroid/os/BatteryStats$Uid;->noteFullWifiLockReleasedLocked(J)V
+HSPLandroid/os/BatteryStats$Uid;->noteUserActivityLocked(I)V
+HSPLandroid/os/BatteryStats$Uid;->noteWifiBatchedScanStartedLocked(IJ)V
+HSPLandroid/os/BatteryStats$Uid;->noteWifiBatchedScanStoppedLocked(J)V
+HSPLandroid/os/BatteryStats$Uid;->noteWifiMulticastDisabledLocked(J)V
+HSPLandroid/os/BatteryStats$Uid;->noteWifiMulticastEnabledLocked(J)V
+HSPLandroid/os/BatteryStats$Uid;->noteWifiRunningLocked(J)V
+HSPLandroid/os/BatteryStats$Uid;->noteWifiScanStartedLocked(J)V
+HSPLandroid/os/BatteryStats$Uid;->noteWifiScanStoppedLocked(J)V
+HSPLandroid/os/BatteryStats$Uid;->noteWifiStoppedLocked(J)V
+HSPLandroid/os/BatteryStats;-><init>()V
+HSPLandroid/os/BatteryStats;->commitCurrentHistoryBatchLocked()V
+HSPLandroid/os/BatteryStats;->computeBatteryRealtime(JI)J
+HSPLandroid/os/BatteryStats;->computeBatteryScreenOffRealtime(JI)J
+HSPLandroid/os/BatteryStats;->computeBatteryScreenOffUptime(JI)J
+HSPLandroid/os/BatteryStats;->computeBatteryTimeRemaining(J)J
+HSPLandroid/os/BatteryStats;->computeBatteryUptime(JI)J
+HSPLandroid/os/BatteryStats;->computeChargeTimeRemaining(J)J
+HSPLandroid/os/BatteryStats;->computeRealtime(JI)J
+HSPLandroid/os/BatteryStats;->computeUptime(JI)J
+HSPLandroid/os/BatteryStats;->finishIteratingHistoryLocked()V
+HSPLandroid/os/BatteryStats;->finishIteratingOldHistoryLocked()V
+HSPLandroid/os/BatteryStats;->getBatteryRealtime(J)J
+HSPLandroid/os/BatteryStats;->getBatteryUptime(J)J
+HSPLandroid/os/BatteryStats;->getBluetoothControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
+HSPLandroid/os/BatteryStats;->getBluetoothScanTime(JI)J
+HSPLandroid/os/BatteryStats;->getCameraOnTime(JI)J
+HSPLandroid/os/BatteryStats;->getChargeLevelStepTracker()Landroid/os/BatteryStats$LevelStepTracker;
+HSPLandroid/os/BatteryStats;->getCpuFreqs()[J
+HSPLandroid/os/BatteryStats;->getCurrentDailyStartTime()J
+HSPLandroid/os/BatteryStats;->getDailyChargeLevelStepTracker()Landroid/os/BatteryStats$LevelStepTracker;
+HSPLandroid/os/BatteryStats;->getDailyDischargeLevelStepTracker()Landroid/os/BatteryStats$LevelStepTracker;
+HSPLandroid/os/BatteryStats;->getDailyItemLocked(I)Landroid/os/BatteryStats$DailyItem;
+HSPLandroid/os/BatteryStats;->getDailyPackageChanges()Ljava/util/ArrayList;
+HSPLandroid/os/BatteryStats;->getDeviceIdleModeCount(II)I
+HSPLandroid/os/BatteryStats;->getDeviceIdleModeTime(IJI)J
+HSPLandroid/os/BatteryStats;->getDeviceIdlingCount(II)I
+HSPLandroid/os/BatteryStats;->getDeviceIdlingTime(IJI)J
+HSPLandroid/os/BatteryStats;->getDischargeAmount(I)I
+HSPLandroid/os/BatteryStats;->getDischargeAmountScreenOff()I
+HSPLandroid/os/BatteryStats;->getDischargeAmountScreenOffSinceCharge()I
+HSPLandroid/os/BatteryStats;->getDischargeAmountScreenOn()I
+HSPLandroid/os/BatteryStats;->getDischargeAmountScreenOnSinceCharge()I
+HSPLandroid/os/BatteryStats;->getDischargeCoulombCounter()Landroid/os/BatteryStats$LongCounter;
+HSPLandroid/os/BatteryStats;->getDischargeCurrentLevel()I
+HSPLandroid/os/BatteryStats;->getDischargeLevelStepTracker()Landroid/os/BatteryStats$LevelStepTracker;
+HSPLandroid/os/BatteryStats;->getDischargeScreenOffCoulombCounter()Landroid/os/BatteryStats$LongCounter;
+HSPLandroid/os/BatteryStats;->getDischargeStartLevel()I
+HSPLandroid/os/BatteryStats;->getEndPlatformVersion()Ljava/lang/String;
+HSPLandroid/os/BatteryStats;->getEstimatedBatteryCapacity()I
+HSPLandroid/os/BatteryStats;->getFlashlightOnCount(I)J
+HSPLandroid/os/BatteryStats;->getFlashlightOnTime(JI)J
+HSPLandroid/os/BatteryStats;->getGlobalWifiRunningTime(JI)J
+HSPLandroid/os/BatteryStats;->getHighDischargeAmountSinceCharge()I
+HSPLandroid/os/BatteryStats;->getHistoryBaseTime()J
+HSPLandroid/os/BatteryStats;->getHistoryStringPoolBytes()I
+HSPLandroid/os/BatteryStats;->getHistoryStringPoolSize()I
+HSPLandroid/os/BatteryStats;->getHistoryTagPoolString(I)Ljava/lang/String;
+HSPLandroid/os/BatteryStats;->getHistoryTagPoolUid(I)I
+HSPLandroid/os/BatteryStats;->getHistoryTotalSize()I
+HSPLandroid/os/BatteryStats;->getHistoryUsedSize()I
+HSPLandroid/os/BatteryStats;->getInteractiveTime(JI)J
+HSPLandroid/os/BatteryStats;->getIsOnBattery()Z
+HSPLandroid/os/BatteryStats;->getKernelMemoryStats()Landroid/util/LongSparseArray;
+HSPLandroid/os/BatteryStats;->getKernelWakelockStats()Ljava/util/Map;
+HSPLandroid/os/BatteryStats;->getLongestDeviceIdleModeTime(I)J
+HSPLandroid/os/BatteryStats;->getLowDischargeAmountSinceCharge()I
+HSPLandroid/os/BatteryStats;->getMaxLearnedBatteryCapacity()I
+HSPLandroid/os/BatteryStats;->getMinLearnedBatteryCapacity()I
+HSPLandroid/os/BatteryStats;->getMobileRadioActiveAdjustedTime(I)J
+HSPLandroid/os/BatteryStats;->getMobileRadioActiveCount(I)I
+HSPLandroid/os/BatteryStats;->getMobileRadioActiveTime(JI)J
+HSPLandroid/os/BatteryStats;->getMobileRadioActiveUnknownCount(I)I
+HSPLandroid/os/BatteryStats;->getMobileRadioActiveUnknownTime(I)J
+HSPLandroid/os/BatteryStats;->getModemControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
+HSPLandroid/os/BatteryStats;->getNetworkActivityBytes(II)J
+HSPLandroid/os/BatteryStats;->getNetworkActivityPackets(II)J
+HSPLandroid/os/BatteryStats;->getNextHistoryLocked(Landroid/os/BatteryStats$HistoryItem;)Z
+HSPLandroid/os/BatteryStats;->getNextMaxDailyDeadline()J
+HSPLandroid/os/BatteryStats;->getNextMinDailyDeadline()J
+HSPLandroid/os/BatteryStats;->getNextOldHistoryLocked(Landroid/os/BatteryStats$HistoryItem;)Z
+HSPLandroid/os/BatteryStats;->getNumConnectivityChange(I)I
+HSPLandroid/os/BatteryStats;->getParcelVersion()I
+HSPLandroid/os/BatteryStats;->getPhoneDataConnectionCount(II)I
+HSPLandroid/os/BatteryStats;->getPhoneDataConnectionTime(IJI)J
+HSPLandroid/os/BatteryStats;->getPhoneOnCount(I)I
+HSPLandroid/os/BatteryStats;->getPhoneOnTime(JI)J
+HSPLandroid/os/BatteryStats;->getPhoneSignalScanningTime(JI)J
+HSPLandroid/os/BatteryStats;->getPhoneSignalStrengthCount(II)I
+HSPLandroid/os/BatteryStats;->getPhoneSignalStrengthTime(IJI)J
+HSPLandroid/os/BatteryStats;->getPowerSaveModeEnabledCount(I)I
+HSPLandroid/os/BatteryStats;->getPowerSaveModeEnabledTime(JI)J
+HSPLandroid/os/BatteryStats;->getScreenBrightnessTime(IJI)J
+HSPLandroid/os/BatteryStats;->getScreenOnCount(I)I
+HSPLandroid/os/BatteryStats;->getScreenOnTime(JI)J
+HSPLandroid/os/BatteryStats;->getStartClockTime()J
+HSPLandroid/os/BatteryStats;->getStartCount()I
+HSPLandroid/os/BatteryStats;->getStartPlatformVersion()Ljava/lang/String;
+HSPLandroid/os/BatteryStats;->getUidStats()Landroid/util/SparseArray;
+HSPLandroid/os/BatteryStats;->getWakeupReasonStats()Ljava/util/Map;
+HSPLandroid/os/BatteryStats;->getWifiControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
+HSPLandroid/os/BatteryStats;->getWifiOnTime(JI)J
+HSPLandroid/os/BatteryStats;->getWifiSignalStrengthCount(II)I
+HSPLandroid/os/BatteryStats;->getWifiSignalStrengthTime(IJI)J
+HSPLandroid/os/BatteryStats;->getWifiStateCount(II)I
+HSPLandroid/os/BatteryStats;->getWifiStateTime(IJI)J
+HSPLandroid/os/BatteryStats;->getWifiSupplStateCount(II)I
+HSPLandroid/os/BatteryStats;->getWifiSupplStateTime(IJI)J
+HSPLandroid/os/BatteryStats;->hasBluetoothActivityReporting()Z
+HSPLandroid/os/BatteryStats;->hasModemActivityReporting()Z
+HSPLandroid/os/BatteryStats;->hasWifiActivityReporting()Z
+HSPLandroid/os/BatteryStats;->startIteratingHistoryLocked()Z
+HSPLandroid/os/BatteryStats;->startIteratingOldHistoryLocked()Z
+HSPLandroid/os/BatteryStats;->writeToParcelWithoutUids(Landroid/os/Parcel;I)V
+HSPLandroid/os/Binder;-><init>()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
+HSPLandroid/os/Binder;->execTransact(IJJI)Z
+HSPLandroid/os/Binder;->finalize()V
+HSPLandroid/os/Binder;->getCallingUserHandle()Landroid/os/UserHandle;
+HSPLandroid/os/Binder;->getInterfaceDescriptor()Ljava/lang/String;
+HSPLandroid/os/Binder;->isBinderAlive()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;->setWarnOnBlocking(Z)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/BinderProxy;-><init>()V
+HSPLandroid/os/BinderProxy;->finalize()V
+HSPLandroid/os/BinderProxy;->queryLocalInterface(Ljava/lang/String;)Landroid/os/IInterface;
+HSPLandroid/os/BinderProxy;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/os/Build;->ensureFingerprintProperty()V
+HSPLandroid/os/Build;->getSerial()Ljava/lang/String;
+HSPLandroid/os/Bundle$1;-><init>()V
+HSPLandroid/os/Bundle$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/Bundle;
+HSPLandroid/os/Bundle$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/os/Bundle;-><init>()V
+HSPLandroid/os/Bundle;-><init>(I)V
+HSPLandroid/os/Bundle;-><init>(Landroid/os/Bundle;)V
+HSPLandroid/os/Bundle;-><init>(Landroid/os/Parcel;I)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;
+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;
+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;->maybePrefillHasFds()V
+HSPLandroid/os/Bundle;->putAll(Landroid/os/Bundle;)V
+HSPLandroid/os/Bundle;->putBundle(Ljava/lang/String;Landroid/os/Bundle;)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
+HSPLandroid/os/Bundle;->putFloatArray(Ljava/lang/String;[F)V
+HSPLandroid/os/Bundle;->putParcelable(Ljava/lang/String;Landroid/os/Parcelable;)V
+HSPLandroid/os/Bundle;->putParcelableArray(Ljava/lang/String;[Landroid/os/Parcelable;)V
+HSPLandroid/os/Bundle;->putParcelableArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
+HSPLandroid/os/Bundle;->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
+HSPLandroid/os/Bundle;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/os/Bundle;->remove(Ljava/lang/String;)V
+HSPLandroid/os/Bundle;->setAllowFds(Z)Z
+HSPLandroid/os/Bundle;->setClassLoader(Ljava/lang/ClassLoader;)V
+HSPLandroid/os/Bundle;->setDefusable(Landroid/os/Bundle;Z)Landroid/os/Bundle;
+HSPLandroid/os/Bundle;->setDefusable(Z)V
+HSPLandroid/os/Bundle;->toString()Ljava/lang/String;
+HSPLandroid/os/Bundle;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/CancellationSignal$OnCancelListener;->onCancel()V
+HSPLandroid/os/CancellationSignal$Transport;-><init>()V
+HSPLandroid/os/CancellationSignal$Transport;-><init>(Landroid/os/CancellationSignal$Transport;)V
+HSPLandroid/os/CancellationSignal$Transport;->cancel()V
+HSPLandroid/os/CancellationSignal;-><init>()V
+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;->setRemote(Landroid/os/ICancellationSignal;)V
+HSPLandroid/os/CancellationSignal;->throwIfCanceled()V
+HSPLandroid/os/CancellationSignal;->waitForCancelFinishedLocked()V
+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
+HSPLandroid/os/CpuUsageInfo$1;-><init>()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$MemoryInfo;)V
+HSPLandroid/os/Debug$MemoryInfo;->getMemoryStats()Ljava/util/Map;
+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
+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
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryGraphics()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryJavaHeap()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryNativeHeap()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryPrivateOther()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryStack()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummarySystem()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryTotalPss()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryTotalSwap()I
+HSPLandroid/os/Debug$MemoryInfo;->getSummaryTotalSwapPss()I
+HSPLandroid/os/Debug$MemoryInfo;->getTotalPrivateClean()I
+HSPLandroid/os/Debug$MemoryInfo;->getTotalPrivateDirty()I
+HSPLandroid/os/Debug$MemoryInfo;->getTotalPss()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
+HSPLandroid/os/Debug$MemoryInfo;->hasSwappedOutPss()Z
+HSPLandroid/os/Debug$MemoryInfo;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/os/Debug;->countInstancesOfClass(Ljava/lang/Class;)J
+HSPLandroid/os/Debug;->getCaller([Ljava/lang/StackTraceElement;I)Ljava/lang/String;
+HSPLandroid/os/Debug;->getCallers(I)Ljava/lang/String;
+HSPLandroid/os/Debug;->getMethodTracingMode()I
+HSPLandroid/os/Debug;->getVmFeatureList()[Ljava/lang/String;
+HSPLandroid/os/Debug;->isDebuggerConnected()Z
+HSPLandroid/os/Debug;->waitingForDebugger()Z
+HSPLandroid/os/Environment$UserEnvironment;-><init>(I)V
+HSPLandroid/os/Environment$UserEnvironment;->buildExternalStorageAppCacheDirs(Ljava/lang/String;)[Ljava/io/File;
+HSPLandroid/os/Environment$UserEnvironment;->buildExternalStorageAppFilesDirs(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;->buildExternalStorageAppCacheDirs(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;->getDataDirectory()Ljava/io/File;
+HSPLandroid/os/Environment;->getDataDirectory(Ljava/lang/String;)Ljava/io/File;
+HSPLandroid/os/Environment;->getDataProfilesDeDirectory(I)Ljava/io/File;
+HSPLandroid/os/Environment;->getDataProfilesDePackageDirectory(ILjava/lang/String;)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;->getDirectory(Ljava/lang/String;Ljava/lang/String;)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;->getOdmDirectory()Ljava/io/File;
+HSPLandroid/os/Environment;->getOemDirectory()Ljava/io/File;
+HSPLandroid/os/Environment;->getRootDirectory()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
+HSPLandroid/os/Environment;->isStorageDisabled()Z
+HSPLandroid/os/Environment;->setUserRequired(Z)V
+HSPLandroid/os/Environment;->throwIfUserRequired()V
+HSPLandroid/os/FactoryTest;->getMode()I
+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/lang/String;ILandroid/os/FileObserver;)I
+HSPLandroid/os/FileObserver$ObserverThread;->stopWatching(I)V
+HSPLandroid/os/FileObserver;-><init>(Ljava/lang/String;)V
+HSPLandroid/os/FileObserver;-><init>(Ljava/lang/String;I)V
+HSPLandroid/os/FileObserver;->finalize()V
+HSPLandroid/os/FileObserver;->onEvent(ILjava/lang/String;)V
+HSPLandroid/os/FileObserver;->startWatching()V
+HSPLandroid/os/FileObserver;->stopWatching()V
+HSPLandroid/os/FileUtils;->bytesToFile(Ljava/lang/String;[B)V
+HSPLandroid/os/FileUtils;->contains(Ljava/io/File;Ljava/io/File;)Z
+HSPLandroid/os/FileUtils;->contains(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/os/FileUtils;->createDir(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
+HSPLandroid/os/FileUtils;->getUid(Ljava/lang/String;)I
+HSPLandroid/os/FileUtils;->listFilesOrEmpty(Ljava/io/File;)[Ljava/io/File;
+HSPLandroid/os/FileUtils;->listFilesOrEmpty(Ljava/io/File;Ljava/io/FilenameFilter;)[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;
+HSPLandroid/os/FileUtils;->setPermissions(Ljava/io/File;III)I
+HSPLandroid/os/FileUtils;->setPermissions(Ljava/lang/String;III)I
+HSPLandroid/os/FileUtils;->sync(Ljava/io/FileOutputStream;)Z
+HSPLandroid/os/GraphicsEnvironment;->chooseDriver(Landroid/content/Context;)V
+HSPLandroid/os/GraphicsEnvironment;->earlyInitEGL()V
+HSPLandroid/os/GraphicsEnvironment;->lambda$-android_os_GraphicsEnvironment_4205()V
+HSPLandroid/os/Handler$Callback;->handleMessage(Landroid/os/Message;)Z
+HSPLandroid/os/Handler$MessengerImpl;-><init>(Landroid/os/Handler;)V
+HSPLandroid/os/Handler$MessengerImpl;-><init>(Landroid/os/Handler;Landroid/os/Handler$MessengerImpl;)V
+HSPLandroid/os/Handler$MessengerImpl;->send(Landroid/os/Message;)V
+HSPLandroid/os/Handler;-><init>()V
+HSPLandroid/os/Handler;-><init>(Landroid/os/Handler$Callback;)V
+HSPLandroid/os/Handler;-><init>(Landroid/os/Handler$Callback;Z)V
+HSPLandroid/os/Handler;-><init>(Landroid/os/Looper;)V
+HSPLandroid/os/Handler;-><init>(Landroid/os/Looper;Landroid/os/Handler$Callback;)V
+HSPLandroid/os/Handler;-><init>(Landroid/os/Looper;Landroid/os/Handler$Callback;Z)V
+HSPLandroid/os/Handler;-><init>(Z)V
+HSPLandroid/os/Handler;->dispatchMessage(Landroid/os/Message;)V
+HSPLandroid/os/Handler;->enqueueMessage(Landroid/os/MessageQueue;Landroid/os/Message;J)Z
+HSPLandroid/os/Handler;->getIMessenger()Landroid/os/IMessenger;
+HSPLandroid/os/Handler;->getLooper()Landroid/os/Looper;
+HSPLandroid/os/Handler;->getMain()Landroid/os/Handler;
+HSPLandroid/os/Handler;->getPostMessage(Ljava/lang/Runnable;)Landroid/os/Message;
+HSPLandroid/os/Handler;->getPostMessage(Ljava/lang/Runnable;Ljava/lang/Object;)Landroid/os/Message;
+HSPLandroid/os/Handler;->handleCallback(Landroid/os/Message;)V
+HSPLandroid/os/Handler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/os/Handler;->hasMessages(I)Z
+HSPLandroid/os/Handler;->hasMessages(ILjava/lang/Object;)Z
+HSPLandroid/os/Handler;->obtainMessage()Landroid/os/Message;
+HSPLandroid/os/Handler;->obtainMessage(I)Landroid/os/Message;
+HSPLandroid/os/Handler;->obtainMessage(III)Landroid/os/Message;
+HSPLandroid/os/Handler;->obtainMessage(IIILjava/lang/Object;)Landroid/os/Message;
+HSPLandroid/os/Handler;->obtainMessage(ILjava/lang/Object;)Landroid/os/Message;
+HSPLandroid/os/Handler;->post(Ljava/lang/Runnable;)Z
+HSPLandroid/os/Handler;->postAtFrontOfQueue(Ljava/lang/Runnable;)Z
+HSPLandroid/os/Handler;->postAtTime(Ljava/lang/Runnable;J)Z
+HSPLandroid/os/Handler;->postAtTime(Ljava/lang/Runnable;Ljava/lang/Object;J)Z
+HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;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;->sendEmptyMessage(I)Z
+HSPLandroid/os/Handler;->sendEmptyMessageDelayed(IJ)Z
+HSPLandroid/os/Handler;->sendMessage(Landroid/os/Message;)Z
+HSPLandroid/os/Handler;->sendMessageAtFrontOfQueue(Landroid/os/Message;)Z
+HSPLandroid/os/Handler;->sendMessageAtTime(Landroid/os/Message;J)Z
+HSPLandroid/os/Handler;->sendMessageDelayed(Landroid/os/Message;J)Z
+HSPLandroid/os/Handler;->toString()Ljava/lang/String;
+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;->getThreadId()I
+HSPLandroid/os/HandlerThread;->onLooperPrepared()V
+HSPLandroid/os/HandlerThread;->quit()Z
+HSPLandroid/os/HandlerThread;->run()V
+HSPLandroid/os/HardwarePropertiesManager;-><init>(Landroid/content/Context;Landroid/os/IHardwarePropertiesManager;)V
+HSPLandroid/os/HardwarePropertiesManager;->getDeviceTemperatures(II)[F
+HSPLandroid/os/HwBinder;-><init>()V
+HSPLandroid/os/HwBinder;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
+HSPLandroid/os/HwBlob;-><init>(I)V
+HSPLandroid/os/HwBlob;->wrapArray([B)[Ljava/lang/Byte;
+HSPLandroid/os/HwParcel;-><init>()V
+HSPLandroid/os/HwParcel;-><init>(Z)V
+HSPLandroid/os/HwParcel;->readInt8Vector()Ljava/util/ArrayList;
+HSPLandroid/os/HwParcel;->readStringVector()Ljava/util/ArrayList;
+HSPLandroid/os/HwParcel;->writeStringVector(Ljava/util/ArrayList;)V
+HSPLandroid/os/HwRemoteBinder;-><init>()V
+HSPLandroid/os/HwRemoteBinder;->queryLocalInterface(Ljava/lang/String;)Landroid/os/IHwInterface;
+HSPLandroid/os/IBatteryPropertiesRegistrar$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/os/IBatteryPropertiesRegistrar$Stub$Proxy;->getProperty(ILandroid/os/BatteryProperty;)I
+HSPLandroid/os/IBatteryPropertiesRegistrar$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IBatteryPropertiesRegistrar;
+HSPLandroid/os/IBatteryPropertiesRegistrar;->getProperty(ILandroid/os/BatteryProperty;)I
+HSPLandroid/os/IBatteryPropertiesRegistrar;->registerListener(Landroid/os/IBatteryPropertiesListener;)V
+HSPLandroid/os/IBatteryPropertiesRegistrar;->scheduleUpdate()V
+HSPLandroid/os/IBatteryPropertiesRegistrar;->unregisterListener(Landroid/os/IBatteryPropertiesListener;)V
+HSPLandroid/os/IBinder$DeathRecipient;->binderDied()V
+HSPLandroid/os/ICancellationSignal$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/os/ICancellationSignal$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HSPLandroid/os/ICancellationSignal$Stub;-><init>()V
+HSPLandroid/os/ICancellationSignal$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/ICancellationSignal;
+HSPLandroid/os/ICancellationSignal;->cancel()V
+HSPLandroid/os/IDeviceIdentifiersPolicyService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/os/IDeviceIdentifiersPolicyService$Stub$Proxy;->getSerial()Ljava/lang/String;
+HSPLandroid/os/IDeviceIdentifiersPolicyService$Stub;-><init>()V
+HSPLandroid/os/IDeviceIdentifiersPolicyService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IDeviceIdentifiersPolicyService;
+HSPLandroid/os/IDeviceIdentifiersPolicyService;->getSerial()Ljava/lang/String;
+HSPLandroid/os/IDeviceIdleController$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/os/IDeviceIdleController$Stub$Proxy;->isPowerSaveWhitelistApp(Ljava/lang/String;)Z
+HSPLandroid/os/IDeviceIdleController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IDeviceIdleController;
+HSPLandroid/os/IDeviceIdleController;->addPowerSaveTempWhitelistApp(Ljava/lang/String;JILjava/lang/String;)V
+HSPLandroid/os/IDeviceIdleController;->addPowerSaveTempWhitelistAppForMms(Ljava/lang/String;ILjava/lang/String;)J
+HSPLandroid/os/IDeviceIdleController;->addPowerSaveTempWhitelistAppForSms(Ljava/lang/String;ILjava/lang/String;)J
+HSPLandroid/os/IDeviceIdleController;->addPowerSaveWhitelistApp(Ljava/lang/String;)V
+HSPLandroid/os/IDeviceIdleController;->exitIdle(Ljava/lang/String;)V
+HSPLandroid/os/IDeviceIdleController;->getAppIdTempWhitelist()[I
+HSPLandroid/os/IDeviceIdleController;->getAppIdUserWhitelist()[I
+HSPLandroid/os/IDeviceIdleController;->getAppIdWhitelist()[I
+HSPLandroid/os/IDeviceIdleController;->getAppIdWhitelistExceptIdle()[I
+HSPLandroid/os/IDeviceIdleController;->getFullPowerWhitelist()[Ljava/lang/String;
+HSPLandroid/os/IDeviceIdleController;->getFullPowerWhitelistExceptIdle()[Ljava/lang/String;
+HSPLandroid/os/IDeviceIdleController;->getSystemPowerWhitelist()[Ljava/lang/String;
+HSPLandroid/os/IDeviceIdleController;->getSystemPowerWhitelistExceptIdle()[Ljava/lang/String;
+HSPLandroid/os/IDeviceIdleController;->getUserPowerWhitelist()[Ljava/lang/String;
+HSPLandroid/os/IDeviceIdleController;->isPowerSaveWhitelistApp(Ljava/lang/String;)Z
+HSPLandroid/os/IDeviceIdleController;->isPowerSaveWhitelistExceptIdleApp(Ljava/lang/String;)Z
+HSPLandroid/os/IDeviceIdleController;->registerMaintenanceActivityListener(Landroid/os/IMaintenanceActivityListener;)Z
+HSPLandroid/os/IDeviceIdleController;->removePowerSaveWhitelistApp(Ljava/lang/String;)V
+HSPLandroid/os/IDeviceIdleController;->unregisterMaintenanceActivityListener(Landroid/os/IMaintenanceActivityListener;)V
+HSPLandroid/os/IHardwarePropertiesManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/os/IHardwarePropertiesManager$Stub$Proxy;->getDeviceTemperatures(Ljava/lang/String;II)[F
+HSPLandroid/os/IHardwarePropertiesManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IHardwarePropertiesManager;
+HSPLandroid/os/IHardwarePropertiesManager;->getCpuUsages(Ljava/lang/String;)[Landroid/os/CpuUsageInfo;
+HSPLandroid/os/IHardwarePropertiesManager;->getDeviceTemperatures(Ljava/lang/String;II)[F
+HSPLandroid/os/IHardwarePropertiesManager;->getFanSpeeds(Ljava/lang/String;)[F
+HSPLandroid/os/IHwBinder$DeathRecipient;->serviceDied(J)V
+HSPLandroid/os/IHwBinder;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HSPLandroid/os/IHwBinder;->queryLocalInterface(Ljava/lang/String;)Landroid/os/IHwInterface;
+HSPLandroid/os/IHwBinder;->transact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
+HSPLandroid/os/IHwBinder;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HSPLandroid/os/IHwInterface;->asBinder()Landroid/os/IHwBinder;
+HSPLandroid/os/IInstalld$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/os/IInstalld$Stub$Proxy;->createAppData(Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;I)J
+HSPLandroid/os/IInstalld$Stub$Proxy;->fixupAppData(Ljava/lang/String;I)V
+HSPLandroid/os/IInstalld$Stub$Proxy;->invalidateMounts()V
+HSPLandroid/os/IInstalld$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IInstalld;
+HSPLandroid/os/IInstalld;->clearAppData(Ljava/lang/String;Ljava/lang/String;IIJ)V
+HSPLandroid/os/IInstalld;->clearAppProfiles(Ljava/lang/String;)V
+HSPLandroid/os/IInstalld;->copySystemProfile(Ljava/lang/String;ILjava/lang/String;)Z
+HSPLandroid/os/IInstalld;->createAppData(Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;I)J
+HSPLandroid/os/IInstalld;->createOatDir(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/IInstalld;->createUserData(Ljava/lang/String;III)V
+HSPLandroid/os/IInstalld;->deleteOdex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/IInstalld;->destroyAppData(Ljava/lang/String;Ljava/lang/String;IIJ)V
+HSPLandroid/os/IInstalld;->destroyAppProfiles(Ljava/lang/String;)V
+HSPLandroid/os/IInstalld;->destroyUserData(Ljava/lang/String;II)V
+HSPLandroid/os/IInstalld;->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;Z)V
+HSPLandroid/os/IInstalld;->dumpProfiles(ILjava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/os/IInstalld;->fixupAppData(Ljava/lang/String;I)V
+HSPLandroid/os/IInstalld;->freeCache(Ljava/lang/String;JJI)V
+HSPLandroid/os/IInstalld;->getAppSize(Ljava/lang/String;[Ljava/lang/String;III[J[Ljava/lang/String;)[J
+HSPLandroid/os/IInstalld;->getExternalSize(Ljava/lang/String;II[I)[J
+HSPLandroid/os/IInstalld;->getUserSize(Ljava/lang/String;II[I)[J
+HSPLandroid/os/IInstalld;->idmap(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/os/IInstalld;->invalidateMounts()V
+HSPLandroid/os/IInstalld;->isQuotaSupported(Ljava/lang/String;)Z
+HSPLandroid/os/IInstalld;->linkFile(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/IInstalld;->linkNativeLibraryDirectory(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/os/IInstalld;->markBootComplete(Ljava/lang/String;)V
+HSPLandroid/os/IInstalld;->mergeProfiles(ILjava/lang/String;)Z
+HSPLandroid/os/IInstalld;->migrateAppData(Ljava/lang/String;Ljava/lang/String;II)V
+HSPLandroid/os/IInstalld;->moveAb(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/IInstalld;->moveCompleteApp(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;I)V
+HSPLandroid/os/IInstalld;->reconcileSecondaryDexFile(Ljava/lang/String;Ljava/lang/String;I[Ljava/lang/String;Ljava/lang/String;I)Z
+HSPLandroid/os/IInstalld;->removeIdmap(Ljava/lang/String;)V
+HSPLandroid/os/IInstalld;->restoreconAppData(Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;)V
+HSPLandroid/os/IInstalld;->rmPackageDir(Ljava/lang/String;)V
+HSPLandroid/os/IInstalld;->rmdex(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/IInstalld;->setAppQuota(Ljava/lang/String;IIJ)V
+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
+HSPLandroid/os/IMessenger$Stub;-><init>()V
+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
+HSPLandroid/os/IMessenger;->send(Landroid/os/Message;)V
+HSPLandroid/os/INetworkManagementService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/os/INetworkManagementService$Stub$Proxy;->isBandwidthControlEnabled()Z
+HSPLandroid/os/INetworkManagementService$Stub$Proxy;->setUidCleartextNetworkPolicy(II)V
+HSPLandroid/os/INetworkManagementService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/INetworkManagementService;
+HSPLandroid/os/INetworkManagementService;->addIdleTimer(Ljava/lang/String;II)V
+HSPLandroid/os/INetworkManagementService;->addInterfaceToLocalNetwork(Ljava/lang/String;Ljava/util/List;)V
+HSPLandroid/os/INetworkManagementService;->addInterfaceToNetwork(Ljava/lang/String;I)V
+HSPLandroid/os/INetworkManagementService;->addLegacyRouteForNetId(ILandroid/net/RouteInfo;I)V
+HSPLandroid/os/INetworkManagementService;->addRoute(ILandroid/net/RouteInfo;)V
+HSPLandroid/os/INetworkManagementService;->addVpnUidRanges(I[Landroid/net/UidRange;)V
+HSPLandroid/os/INetworkManagementService;->allowProtect(I)V
+HSPLandroid/os/INetworkManagementService;->attachPppd(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->clearDefaultNetId()V
+HSPLandroid/os/INetworkManagementService;->clearInterfaceAddresses(Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->clearPermission([I)V
+HSPLandroid/os/INetworkManagementService;->createPhysicalNetwork(ILjava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->createVirtualNetwork(IZZ)V
+HSPLandroid/os/INetworkManagementService;->denyProtect(I)V
+HSPLandroid/os/INetworkManagementService;->detachPppd(Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->disableIpv6(Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->disableNat(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->enableIpv6(Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->enableNat(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->getDnsForwarders()[Ljava/lang/String;
+HSPLandroid/os/INetworkManagementService;->getInterfaceConfig(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;
+HSPLandroid/os/INetworkManagementService;->getIpForwardingEnabled()Z
+HSPLandroid/os/INetworkManagementService;->getNetdService()Landroid/net/INetd;
+HSPLandroid/os/INetworkManagementService;->getNetworkStatsDetail()Landroid/net/NetworkStats;
+HSPLandroid/os/INetworkManagementService;->getNetworkStatsSummaryDev()Landroid/net/NetworkStats;
+HSPLandroid/os/INetworkManagementService;->getNetworkStatsSummaryXt()Landroid/net/NetworkStats;
+HSPLandroid/os/INetworkManagementService;->getNetworkStatsTethering(I)Landroid/net/NetworkStats;
+HSPLandroid/os/INetworkManagementService;->getNetworkStatsUidDetail(I)Landroid/net/NetworkStats;
+HSPLandroid/os/INetworkManagementService;->isBandwidthControlEnabled()Z
+HSPLandroid/os/INetworkManagementService;->isClatdStarted(Ljava/lang/String;)Z
+HSPLandroid/os/INetworkManagementService;->isFirewallEnabled()Z
+HSPLandroid/os/INetworkManagementService;->isNetworkActive()Z
+HSPLandroid/os/INetworkManagementService;->isNetworkRestricted(I)Z
+HSPLandroid/os/INetworkManagementService;->isTetheringStarted()Z
+HSPLandroid/os/INetworkManagementService;->listInterfaces()[Ljava/lang/String;
+HSPLandroid/os/INetworkManagementService;->listTetheredInterfaces()[Ljava/lang/String;
+HSPLandroid/os/INetworkManagementService;->listTtys()[Ljava/lang/String;
+HSPLandroid/os/INetworkManagementService;->registerNetworkActivityListener(Landroid/os/INetworkActivityListener;)V
+HSPLandroid/os/INetworkManagementService;->registerObserver(Landroid/net/INetworkManagementEventObserver;)V
+HSPLandroid/os/INetworkManagementService;->registerTetheringStatsProvider(Landroid/net/ITetheringStatsProvider;Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->removeIdleTimer(Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->removeInterfaceAlert(Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->removeInterfaceFromLocalNetwork(Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->removeInterfaceFromNetwork(Ljava/lang/String;I)V
+HSPLandroid/os/INetworkManagementService;->removeInterfaceQuota(Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->removeNetwork(I)V
+HSPLandroid/os/INetworkManagementService;->removeRoute(ILandroid/net/RouteInfo;)V
+HSPLandroid/os/INetworkManagementService;->removeRoutesFromLocalNetwork(Ljava/util/List;)I
+HSPLandroid/os/INetworkManagementService;->removeVpnUidRanges(I[Landroid/net/UidRange;)V
+HSPLandroid/os/INetworkManagementService;->setAllowOnlyVpnForUids(Z[Landroid/net/UidRange;)V
+HSPLandroid/os/INetworkManagementService;->setDataSaverModeEnabled(Z)Z
+HSPLandroid/os/INetworkManagementService;->setDefaultNetId(I)V
+HSPLandroid/os/INetworkManagementService;->setDnsConfigurationForNetwork(I[Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->setDnsForwarders(Landroid/net/Network;[Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->setFirewallChainEnabled(IZ)V
+HSPLandroid/os/INetworkManagementService;->setFirewallEnabled(Z)V
+HSPLandroid/os/INetworkManagementService;->setFirewallInterfaceRule(Ljava/lang/String;Z)V
+HSPLandroid/os/INetworkManagementService;->setFirewallUidRule(III)V
+HSPLandroid/os/INetworkManagementService;->setFirewallUidRules(I[I[I)V
+HSPLandroid/os/INetworkManagementService;->setGlobalAlert(J)V
+HSPLandroid/os/INetworkManagementService;->setIPv6AddrGenMode(Ljava/lang/String;I)V
+HSPLandroid/os/INetworkManagementService;->setInterfaceAlert(Ljava/lang/String;J)V
+HSPLandroid/os/INetworkManagementService;->setInterfaceConfig(Ljava/lang/String;Landroid/net/InterfaceConfiguration;)V
+HSPLandroid/os/INetworkManagementService;->setInterfaceDown(Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->setInterfaceIpv6NdOffload(Ljava/lang/String;Z)V
+HSPLandroid/os/INetworkManagementService;->setInterfaceIpv6PrivacyExtensions(Ljava/lang/String;Z)V
+HSPLandroid/os/INetworkManagementService;->setInterfaceQuota(Ljava/lang/String;J)V
+HSPLandroid/os/INetworkManagementService;->setInterfaceUp(Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->setIpForwardingEnabled(Z)V
+HSPLandroid/os/INetworkManagementService;->setMtu(Ljava/lang/String;I)V
+HSPLandroid/os/INetworkManagementService;->setNetworkPermission(ILjava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->setPermission(Ljava/lang/String;[I)V
+HSPLandroid/os/INetworkManagementService;->setUidCleartextNetworkPolicy(II)V
+HSPLandroid/os/INetworkManagementService;->setUidMeteredNetworkBlacklist(IZ)V
+HSPLandroid/os/INetworkManagementService;->setUidMeteredNetworkWhitelist(IZ)V
+HSPLandroid/os/INetworkManagementService;->shutdown()V
+HSPLandroid/os/INetworkManagementService;->startClatd(Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->startInterfaceForwarding(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->startTethering([Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->stopClatd(Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->stopInterfaceForwarding(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->stopTethering()V
+HSPLandroid/os/INetworkManagementService;->tetherInterface(Ljava/lang/String;)V
+HSPLandroid/os/INetworkManagementService;->tetherLimitReached(Landroid/net/ITetheringStatsProvider;)V
+HSPLandroid/os/INetworkManagementService;->unregisterNetworkActivityListener(Landroid/os/INetworkActivityListener;)V
+HSPLandroid/os/INetworkManagementService;->unregisterObserver(Landroid/net/INetworkManagementEventObserver;)V
+HSPLandroid/os/INetworkManagementService;->unregisterTetheringStatsProvider(Landroid/net/ITetheringStatsProvider;)V
+HSPLandroid/os/INetworkManagementService;->untetherInterface(Ljava/lang/String;)V
+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
+HSPLandroid/os/IPowerManager$Stub$Proxy;->getLastShutdownReason()I
+HSPLandroid/os/IPowerManager$Stub$Proxy;->isDeviceIdleMode()Z
+HSPLandroid/os/IPowerManager$Stub$Proxy;->isInteractive()Z
+HSPLandroid/os/IPowerManager$Stub$Proxy;->isPowerSaveMode()Z
+HSPLandroid/os/IPowerManager$Stub$Proxy;->releaseWakeLock(Landroid/os/IBinder;I)V
+HSPLandroid/os/IPowerManager$Stub$Proxy;->updateWakeLockWorkSource(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;)V
+HSPLandroid/os/IPowerManager$Stub$Proxy;->userActivity(JII)V
+HSPLandroid/os/IPowerManager$Stub;-><init>()V
+HSPLandroid/os/IPowerManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IPowerManager;
+HSPLandroid/os/IPowerManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/os/IPowerManager;->acquireWakeLock(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;)V
+HSPLandroid/os/IPowerManager;->acquireWakeLockWithUid(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/os/IPowerManager;->boostScreenBrightness(J)V
+HSPLandroid/os/IPowerManager;->crash(Ljava/lang/String;)V
+HSPLandroid/os/IPowerManager;->getLastShutdownReason()I
+HSPLandroid/os/IPowerManager;->getPowerSaveState(I)Landroid/os/PowerSaveState;
+HSPLandroid/os/IPowerManager;->goToSleep(JII)V
+HSPLandroid/os/IPowerManager;->isDeviceIdleMode()Z
+HSPLandroid/os/IPowerManager;->isInteractive()Z
+HSPLandroid/os/IPowerManager;->isLightDeviceIdleMode()Z
+HSPLandroid/os/IPowerManager;->isPowerSaveMode()Z
+HSPLandroid/os/IPowerManager;->isScreenBrightnessBoosted()Z
+HSPLandroid/os/IPowerManager;->isWakeLockLevelSupported(I)Z
+HSPLandroid/os/IPowerManager;->nap(J)V
+HSPLandroid/os/IPowerManager;->powerHint(II)V
+HSPLandroid/os/IPowerManager;->reboot(ZLjava/lang/String;Z)V
+HSPLandroid/os/IPowerManager;->rebootSafeMode(ZZ)V
+HSPLandroid/os/IPowerManager;->releaseWakeLock(Landroid/os/IBinder;I)V
+HSPLandroid/os/IPowerManager;->setAttentionLight(ZI)V
+HSPLandroid/os/IPowerManager;->setPowerSaveMode(Z)Z
+HSPLandroid/os/IPowerManager;->setStayOnSetting(I)V
+HSPLandroid/os/IPowerManager;->setTemporaryScreenAutoBrightnessAdjustmentSettingOverride(F)V
+HSPLandroid/os/IPowerManager;->setTemporaryScreenBrightnessSettingOverride(I)V
+HSPLandroid/os/IPowerManager;->shutdown(ZLjava/lang/String;Z)V
+HSPLandroid/os/IPowerManager;->updateWakeLockUids(Landroid/os/IBinder;[I)V
+HSPLandroid/os/IPowerManager;->updateWakeLockWorkSource(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;)V
+HSPLandroid/os/IPowerManager;->userActivity(JII)V
+HSPLandroid/os/IPowerManager;->wakeUp(JLjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/IRecoverySystem$Stub;-><init>()V
+HSPLandroid/os/IRecoverySystem;->clearBcb()Z
+HSPLandroid/os/IRecoverySystem;->rebootRecoveryWithCommand(Ljava/lang/String;)V
+HSPLandroid/os/IRecoverySystem;->setupBcb(Ljava/lang/String;)Z
+HSPLandroid/os/IRecoverySystem;->uncrypt(Ljava/lang/String;Landroid/os/IRecoverySystemProgressListener;)Z
+HSPLandroid/os/IServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;Z)V
+HSPLandroid/os/IServiceManager;->checkService(Ljava/lang/String;)Landroid/os/IBinder;
+HSPLandroid/os/IServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder;
+HSPLandroid/os/IServiceManager;->listServices()[Ljava/lang/String;
+HSPLandroid/os/IServiceManager;->setPermissionController(Landroid/os/IPermissionController;)V
+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;->getUserAccount(I)Ljava/lang/String;
+HSPLandroid/os/IUserManager$Stub$Proxy;->getUserIcon(I)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/os/IUserManager$Stub$Proxy;->getUserInfo(I)Landroid/content/pm/UserInfo;
+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;->getUsers(Z)Ljava/util/List;
+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;->isQuietModeEnabled(I)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;
+HSPLandroid/os/IUserManager;->canAddMoreManagedProfiles(IZ)Z
+HSPLandroid/os/IUserManager;->canHaveRestrictedProfile(I)Z
+HSPLandroid/os/IUserManager;->clearSeedAccountData()V
+HSPLandroid/os/IUserManager;->createProfileForUser(Ljava/lang/String;II[Ljava/lang/String;)Landroid/content/pm/UserInfo;
+HSPLandroid/os/IUserManager;->createProfileForUserEvenWhenDisallowed(Ljava/lang/String;II[Ljava/lang/String;)Landroid/content/pm/UserInfo;
+HSPLandroid/os/IUserManager;->createRestrictedProfile(Ljava/lang/String;I)Landroid/content/pm/UserInfo;
+HSPLandroid/os/IUserManager;->createUser(Ljava/lang/String;I)Landroid/content/pm/UserInfo;
+HSPLandroid/os/IUserManager;->evictCredentialEncryptionKey(I)V
+HSPLandroid/os/IUserManager;->getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;
+HSPLandroid/os/IUserManager;->getApplicationRestrictionsForUser(Ljava/lang/String;I)Landroid/os/Bundle;
+HSPLandroid/os/IUserManager;->getCredentialOwnerProfile(I)I
+HSPLandroid/os/IUserManager;->getDefaultGuestRestrictions()Landroid/os/Bundle;
+HSPLandroid/os/IUserManager;->getManagedProfileBadge(I)I
+HSPLandroid/os/IUserManager;->getPrimaryUser()Landroid/content/pm/UserInfo;
+HSPLandroid/os/IUserManager;->getProfileIds(IZ)[I
+HSPLandroid/os/IUserManager;->getProfileParent(I)Landroid/content/pm/UserInfo;
+HSPLandroid/os/IUserManager;->getProfiles(IZ)Ljava/util/List;
+HSPLandroid/os/IUserManager;->getSeedAccountName()Ljava/lang/String;
+HSPLandroid/os/IUserManager;->getSeedAccountOptions()Landroid/os/PersistableBundle;
+HSPLandroid/os/IUserManager;->getSeedAccountType()Ljava/lang/String;
+HSPLandroid/os/IUserManager;->getUserAccount(I)Ljava/lang/String;
+HSPLandroid/os/IUserManager;->getUserCreationTime(I)J
+HSPLandroid/os/IUserManager;->getUserHandle(I)I
+HSPLandroid/os/IUserManager;->getUserIcon(I)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/os/IUserManager;->getUserInfo(I)Landroid/content/pm/UserInfo;
+HSPLandroid/os/IUserManager;->getUserRestrictionSource(Ljava/lang/String;I)I
+HSPLandroid/os/IUserManager;->getUserRestrictionSources(Ljava/lang/String;I)Ljava/util/List;
+HSPLandroid/os/IUserManager;->getUserRestrictions(I)Landroid/os/Bundle;
+HSPLandroid/os/IUserManager;->getUserSerialNumber(I)I
+HSPLandroid/os/IUserManager;->getUsers(Z)Ljava/util/List;
+HSPLandroid/os/IUserManager;->hasBaseUserRestriction(Ljava/lang/String;I)Z
+HSPLandroid/os/IUserManager;->hasUserRestriction(Ljava/lang/String;I)Z
+HSPLandroid/os/IUserManager;->isDemoUser(I)Z
+HSPLandroid/os/IUserManager;->isManagedProfile(I)Z
+HSPLandroid/os/IUserManager;->isQuietModeEnabled(I)Z
+HSPLandroid/os/IUserManager;->isRestricted()Z
+HSPLandroid/os/IUserManager;->isSameProfileGroup(II)Z
+HSPLandroid/os/IUserManager;->isUserNameSet(I)Z
+HSPLandroid/os/IUserManager;->isUserRunning(I)Z
+HSPLandroid/os/IUserManager;->isUserUnlocked(I)Z
+HSPLandroid/os/IUserManager;->isUserUnlockingOrUnlocked(I)Z
+HSPLandroid/os/IUserManager;->markGuestForDeletion(I)Z
+HSPLandroid/os/IUserManager;->removeUser(I)Z
+HSPLandroid/os/IUserManager;->removeUserEvenWhenDisallowed(I)Z
+HSPLandroid/os/IUserManager;->setApplicationRestrictions(Ljava/lang/String;Landroid/os/Bundle;I)V
+HSPLandroid/os/IUserManager;->setDefaultGuestRestrictions(Landroid/os/Bundle;)V
+HSPLandroid/os/IUserManager;->setQuietModeEnabled(IZ)V
+HSPLandroid/os/IUserManager;->setSeedAccountData(ILjava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;Z)V
+HSPLandroid/os/IUserManager;->setUserAccount(ILjava/lang/String;)V
+HSPLandroid/os/IUserManager;->setUserEnabled(I)V
+HSPLandroid/os/IUserManager;->setUserIcon(ILandroid/graphics/Bitmap;)V
+HSPLandroid/os/IUserManager;->setUserName(ILjava/lang/String;)V
+HSPLandroid/os/IUserManager;->setUserRestriction(Ljava/lang/String;ZI)V
+HSPLandroid/os/IUserManager;->someUserHasSeedAccount(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/os/IUserManager;->trySetQuietModeDisabled(ILandroid/content/IntentSender;)Z
+HSPLandroid/os/IVibratorService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/os/IVibratorService$Stub$Proxy;->hasVibrator()Z
+HSPLandroid/os/IVibratorService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IVibratorService;
+HSPLandroid/os/IVibratorService;->cancelVibrate(Landroid/os/IBinder;)V
+HSPLandroid/os/IVibratorService;->hasAmplitudeControl()Z
+HSPLandroid/os/IVibratorService;->hasVibrator()Z
+HSPLandroid/os/IVibratorService;->vibrate(ILjava/lang/String;Landroid/os/VibrationEffect;ILandroid/os/IBinder;)V
+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;)V
+HSPLandroid/os/LocaleList;->equals(Ljava/lang/Object;)Z
+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;->hashCode()I
+HSPLandroid/os/LocaleList;->isEmpty()Z
+HSPLandroid/os/LocaleList;->setDefault(Landroid/os/LocaleList;)V
+HSPLandroid/os/LocaleList;->setDefault(Landroid/os/LocaleList;I)V
+HSPLandroid/os/LocaleList;->size()I
+HSPLandroid/os/LocaleList;->toLanguageTags()Ljava/lang/String;
+HSPLandroid/os/LocaleList;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/Looper;-><init>(Z)V
+HSPLandroid/os/Looper;->getMainLooper()Landroid/os/Looper;
+HSPLandroid/os/Looper;->getQueue()Landroid/os/MessageQueue;
+HSPLandroid/os/Looper;->getThread()Ljava/lang/Thread;
+HSPLandroid/os/Looper;->isCurrentThread()Z
+HSPLandroid/os/Looper;->loop()V
+HSPLandroid/os/Looper;->myLooper()Landroid/os/Looper;
+HSPLandroid/os/Looper;->myQueue()Landroid/os/MessageQueue;
+HSPLandroid/os/Looper;->prepare()V
+HSPLandroid/os/Looper;->prepare(Z)V
+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;->setSlowDispatchThresholdMs(J)V
+HSPLandroid/os/Looper;->setTraceTag(J)V
+HSPLandroid/os/MemoryFile;->getSize(Ljava/io/FileDescriptor;)I
+HSPLandroid/os/Message$1;-><init>()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;->-wrap0(Landroid/os/Message;Landroid/os/Parcel;)V
+HSPLandroid/os/Message;-><init>()V
+HSPLandroid/os/Message;->getCallback()Ljava/lang/Runnable;
+HSPLandroid/os/Message;->getData()Landroid/os/Bundle;
+HSPLandroid/os/Message;->getTarget()Landroid/os/Handler;
+HSPLandroid/os/Message;->isAsynchronous()Z
+HSPLandroid/os/Message;->isInUse()Z
+HSPLandroid/os/Message;->markInUse()V
+HSPLandroid/os/Message;->obtain()Landroid/os/Message;
+HSPLandroid/os/Message;->obtain(Landroid/os/Handler;)Landroid/os/Message;
+HSPLandroid/os/Message;->obtain(Landroid/os/Handler;I)Landroid/os/Message;
+HSPLandroid/os/Message;->obtain(Landroid/os/Handler;III)Landroid/os/Message;
+HSPLandroid/os/Message;->obtain(Landroid/os/Handler;IIILjava/lang/Object;)Landroid/os/Message;
+HSPLandroid/os/Message;->obtain(Landroid/os/Handler;ILjava/lang/Object;)Landroid/os/Message;
+HSPLandroid/os/Message;->obtain(Landroid/os/Handler;Ljava/lang/Runnable;)Landroid/os/Message;
+HSPLandroid/os/Message;->obtain(Landroid/os/Message;)Landroid/os/Message;
+HSPLandroid/os/Message;->peekData()Landroid/os/Bundle;
+HSPLandroid/os/Message;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/os/Message;->recycle()V
+HSPLandroid/os/Message;->recycleUnchecked()V
+HSPLandroid/os/Message;->sendToTarget()V
+HSPLandroid/os/Message;->setAsynchronous(Z)V
+HSPLandroid/os/Message;->setData(Landroid/os/Bundle;)V
+HSPLandroid/os/Message;->toString()Ljava/lang/String;
+HSPLandroid/os/Message;->toString(J)Ljava/lang/String;
+HSPLandroid/os/Message;->updateCheckRecycle(I)V
+HSPLandroid/os/Message;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/MessageQueue;-><init>(Z)V
+HSPLandroid/os/MessageQueue;->addIdleHandler(Landroid/os/MessageQueue$IdleHandler;)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;ILjava/lang/Object;)Z
+HSPLandroid/os/MessageQueue;->next()Landroid/os/Message;
+HSPLandroid/os/MessageQueue;->postSyncBarrier()I
+HSPLandroid/os/MessageQueue;->postSyncBarrier(J)I
+HSPLandroid/os/MessageQueue;->quit(Z)V
+HSPLandroid/os/MessageQueue;->removeAllFutureMessagesLocked()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;->removeSyncBarrier(I)V
+HSPLandroid/os/Messenger$1;-><init>()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;->getBinder()Landroid/os/IBinder;
+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
+HSPLandroid/os/OperationCanceledException;-><init>()V
+HSPLandroid/os/OperationCanceledException;-><init>(Ljava/lang/String;)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;->-get0(Landroid/os/Parcel;)J
+HSPLandroid/os/Parcel;-><init>(J)V
+HSPLandroid/os/Parcel;->adoptClassCookies(Landroid/os/Parcel;)V
+HSPLandroid/os/Parcel;->appendFrom(Landroid/os/Parcel;II)V
+HSPLandroid/os/Parcel;->createBinderArrayList()Ljava/util/ArrayList;
+HSPLandroid/os/Parcel;->createByteArray()[B
+HSPLandroid/os/Parcel;->createFloatArray()[F
+HSPLandroid/os/Parcel;->createIntArray()[I
+HSPLandroid/os/Parcel;->createLongArray()[J
+HSPLandroid/os/Parcel;->createStringArray()[Ljava/lang/String;
+HSPLandroid/os/Parcel;->createStringArrayList()Ljava/util/ArrayList;
+HSPLandroid/os/Parcel;->createTypedArray(Landroid/os/Parcelable$Creator;)[Ljava/lang/Object;
+HSPLandroid/os/Parcel;->createTypedArrayList(Landroid/os/Parcelable$Creator;)Ljava/util/ArrayList;
+HSPLandroid/os/Parcel;->dataAvail()I
+HSPLandroid/os/Parcel;->dataPosition()I
+HSPLandroid/os/Parcel;->dataSize()I
+HSPLandroid/os/Parcel;->destroy()V
+HSPLandroid/os/Parcel;->enforceInterface(Ljava/lang/String;)V
+HSPLandroid/os/Parcel;->finalize()V
+HSPLandroid/os/Parcel;->freeBuffer()V
+HSPLandroid/os/Parcel;->getClassCookie(Ljava/lang/Class;)Ljava/lang/Object;
+HSPLandroid/os/Parcel;->hasFileDescriptors()Z
+HSPLandroid/os/Parcel;->hasReadWriteHelper()Z
+HSPLandroid/os/Parcel;->init(J)V
+HSPLandroid/os/Parcel;->marshall()[B
+HSPLandroid/os/Parcel;->obtain()Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->obtain(J)Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->pushAllowFds(Z)Z
+HSPLandroid/os/Parcel;->readArrayList(Ljava/lang/ClassLoader;)Ljava/util/ArrayList;
+HSPLandroid/os/Parcel;->readArrayMapInternal(Landroid/util/ArrayMap;ILjava/lang/ClassLoader;)V
+HSPLandroid/os/Parcel;->readArraySet(Ljava/lang/ClassLoader;)Landroid/util/ArraySet;
+HSPLandroid/os/Parcel;->readBinderList(Ljava/util/List;)V
+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;
+HSPLandroid/os/Parcel;->readDouble()D
+HSPLandroid/os/Parcel;->readException()V
+HSPLandroid/os/Parcel;->readException(ILjava/lang/String;)V
+HSPLandroid/os/Parcel;->readExceptionCode()I
+HSPLandroid/os/Parcel;->readFloat()F
+HSPLandroid/os/Parcel;->readHashMap(Ljava/lang/ClassLoader;)Ljava/util/HashMap;
+HSPLandroid/os/Parcel;->readInt()I
+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
+HSPLandroid/os/Parcel;->readMapInternal(Ljava/util/Map;ILjava/lang/ClassLoader;)V
+HSPLandroid/os/Parcel;->readParcelable(Ljava/lang/ClassLoader;)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;
+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;->readSparseArrayInternal(Landroid/util/SparseArray;ILjava/lang/ClassLoader;)V
+HSPLandroid/os/Parcel;->readSparseBooleanArray()Landroid/util/SparseBooleanArray;
+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
+HSPLandroid/os/Parcel;->readTypedList(Ljava/util/List;Landroid/os/Parcelable$Creator;)V
+HSPLandroid/os/Parcel;->readTypedObject(Landroid/os/Parcelable$Creator;)Ljava/lang/Object;
+HSPLandroid/os/Parcel;->readValue(Ljava/lang/ClassLoader;)Ljava/lang/Object;
+HSPLandroid/os/Parcel;->recycle()V
+HSPLandroid/os/Parcel;->restoreAllowFds(Z)V
+HSPLandroid/os/Parcel;->setClassCookie(Ljava/lang/Class;Ljava/lang/Object;)V
+HSPLandroid/os/Parcel;->setDataCapacity(I)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;->unmarshall([BII)V
+HSPLandroid/os/Parcel;->updateNativeSize(J)V
+HSPLandroid/os/Parcel;->writeArrayMapInternal(Landroid/util/ArrayMap;)V
+HSPLandroid/os/Parcel;->writeArraySet(Landroid/util/ArraySet;)V
+HSPLandroid/os/Parcel;->writeBoolean(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
+HSPLandroid/os/Parcel;->writeCharSequenceArray([Ljava/lang/CharSequence;)V
+HSPLandroid/os/Parcel;->writeFileDescriptor(Ljava/io/FileDescriptor;)V
+HSPLandroid/os/Parcel;->writeFloat(F)V
+HSPLandroid/os/Parcel;->writeInt(I)V
+HSPLandroid/os/Parcel;->writeIntArray([I)V
+HSPLandroid/os/Parcel;->writeInterfaceToken(Ljava/lang/String;)V
+HSPLandroid/os/Parcel;->writeList(Ljava/util/List;)V
+HSPLandroid/os/Parcel;->writeLong(J)V
+HSPLandroid/os/Parcel;->writeLongArray([J)V
+HSPLandroid/os/Parcel;->writeMap(Ljava/util/Map;)V
+HSPLandroid/os/Parcel;->writeMapInternal(Ljava/util/Map;)V
+HSPLandroid/os/Parcel;->writeNoException()V
+HSPLandroid/os/Parcel;->writeParcelable(Landroid/os/Parcelable;I)V
+HSPLandroid/os/Parcel;->writeParcelableArray([Landroid/os/Parcelable;I)V
+HSPLandroid/os/Parcel;->writeParcelableCreator(Landroid/os/Parcelable;)V
+HSPLandroid/os/Parcel;->writeParcelableList(Ljava/util/List;I)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
+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;->writeTypedArray([Landroid/os/Parcelable;I)V
+HSPLandroid/os/Parcel;->writeTypedList(Ljava/util/List;)V
+HSPLandroid/os/Parcel;->writeValue(Ljava/lang/Object;)V
+HSPLandroid/os/ParcelFileDescriptor$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/os/ParcelFileDescriptor$1;->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([BII)I
+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;->adoptFd(I)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/os/ParcelFileDescriptor;->close()V
+HSPLandroid/os/ParcelFileDescriptor;->closeWithStatus(ILjava/lang/String;)V
+HSPLandroid/os/ParcelFileDescriptor;->detachFd()I
+HSPLandroid/os/ParcelFileDescriptor;->finalize()V
+HSPLandroid/os/ParcelFileDescriptor;->fromFd(I)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/os/ParcelFileDescriptor;->getFd()I
+HSPLandroid/os/ParcelFileDescriptor;->getFileDescriptor()Ljava/io/FileDescriptor;
+HSPLandroid/os/ParcelFileDescriptor;->open(Ljava/io/File;I)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/os/ParcelFileDescriptor;->openInternal(Ljava/io/File;I)Ljava/io/FileDescriptor;
+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;-><init>()V
+HSPLandroid/os/ParcelUuid$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/ParcelUuid;
+HSPLandroid/os/ParcelUuid$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/os/ParcelUuid$1;->newArray(I)[Landroid/os/ParcelUuid;
+HSPLandroid/os/ParcelUuid$1;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/os/ParcelUuid;-><init>(Ljava/util/UUID;)V
+HSPLandroid/os/ParcelUuid;->equals(Ljava/lang/Object;)Z
+HSPLandroid/os/ParcelUuid;->fromString(Ljava/lang/String;)Landroid/os/ParcelUuid;
+HSPLandroid/os/ParcelUuid;->getUuid()Ljava/util/UUID;
+HSPLandroid/os/ParcelUuid;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/Parcelable$ClassLoaderCreator;->createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;
+HSPLandroid/os/Parcelable;->describeContents()I
+HSPLandroid/os/Parcelable;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/ParcelableException$1;-><init>()V
+HSPLandroid/os/ParcelableParcel$1;-><init>()V
+HSPLandroid/os/ParcelableParcel$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/ParcelableParcel;
+HSPLandroid/os/ParcelableParcel$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/os/ParcelableParcel;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V
+HSPLandroid/os/ParcelableParcel;-><init>(Ljava/lang/ClassLoader;)V
+HSPLandroid/os/ParcelableParcel;->getClassLoader()Ljava/lang/ClassLoader;
+HSPLandroid/os/ParcelableParcel;->getParcel()Landroid/os/Parcel;
+HSPLandroid/os/ParcelableParcel;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/PatternMatcher$1;-><init>()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
+HSPLandroid/os/PatternMatcher;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/PersistableBundle$1;-><init>()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;-><init>()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
+HSPLandroid/os/PersistableBundle;->deepCopy()Landroid/os/PersistableBundle;
+HSPLandroid/os/PersistableBundle;->isValidType(Ljava/lang/Object;)Z
+HSPLandroid/os/PersistableBundle;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/PooledStringWriter;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/os/PooledStringWriter;->finish()V
+HSPLandroid/os/PooledStringWriter;->writeString(Ljava/lang/String;)V
+HSPLandroid/os/PowerManager$WakeLock$1;-><init>(Landroid/os/PowerManager$WakeLock;)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
+HSPLandroid/os/PowerManager$WakeLock;->finalize()V
+HSPLandroid/os/PowerManager$WakeLock;->isHeld()Z
+HSPLandroid/os/PowerManager$WakeLock;->release()V
+HSPLandroid/os/PowerManager$WakeLock;->release(I)V
+HSPLandroid/os/PowerManager$WakeLock;->setReferenceCounted(Z)V
+HSPLandroid/os/PowerManager$WakeLock;->setWorkSource(Landroid/os/WorkSource;)V
+HSPLandroid/os/PowerManager;-><init>(Landroid/content/Context;Landroid/os/IPowerManager;Landroid/os/Handler;)V
+HSPLandroid/os/PowerManager;->getDefaultScreenBrightnessSetting()I
+HSPLandroid/os/PowerManager;->getLastShutdownReason()I
+HSPLandroid/os/PowerManager;->isDeviceIdleMode()Z
+HSPLandroid/os/PowerManager;->isIgnoringBatteryOptimizations(Ljava/lang/String;)Z
+HSPLandroid/os/PowerManager;->isInteractive()Z
+HSPLandroid/os/PowerManager;->isPowerSaveMode()Z
+HSPLandroid/os/PowerManager;->isScreenOn()Z
+HSPLandroid/os/PowerManager;->newWakeLock(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;
+HSPLandroid/os/PowerManager;->userActivity(JII)V
+HSPLandroid/os/PowerManager;->userActivity(JZ)V
+HSPLandroid/os/PowerManager;->validateWakeLockParameters(ILjava/lang/String;)V
+HSPLandroid/os/PowerManagerInternal;-><init>()V
+HSPLandroid/os/PowerManagerInternal;->finishUidChanges()V
+HSPLandroid/os/PowerManagerInternal;->getLowPowerState(I)Landroid/os/PowerSaveState;
+HSPLandroid/os/PowerManagerInternal;->powerHint(II)V
+HSPLandroid/os/PowerManagerInternal;->registerLowPowerModeObserver(Landroid/os/PowerManagerInternal$LowPowerModeListener;)V
+HSPLandroid/os/PowerManagerInternal;->setDeviceIdleMode(Z)Z
+HSPLandroid/os/PowerManagerInternal;->setDeviceIdleTempWhitelist([I)V
+HSPLandroid/os/PowerManagerInternal;->setDeviceIdleWhitelist([I)V
+HSPLandroid/os/PowerManagerInternal;->setDozeOverrideFromDreamManager(II)V
+HSPLandroid/os/PowerManagerInternal;->setLightDeviceIdleMode(Z)Z
+HSPLandroid/os/PowerManagerInternal;->setMaximumScreenOffTimeoutFromDeviceAdmin(I)V
+HSPLandroid/os/PowerManagerInternal;->setScreenBrightnessOverrideFromWindowManager(I)V
+HSPLandroid/os/PowerManagerInternal;->setUserActivityTimeoutOverrideFromWindowManager(J)V
+HSPLandroid/os/PowerManagerInternal;->setUserInactiveOverrideFromWindowManager()V
+HSPLandroid/os/PowerManagerInternal;->startUidChanges()V
+HSPLandroid/os/PowerManagerInternal;->uidActive(I)V
+HSPLandroid/os/PowerManagerInternal;->uidGone(I)V
+HSPLandroid/os/PowerManagerInternal;->uidIdle(I)V
+HSPLandroid/os/PowerManagerInternal;->updateUidProcState(II)V
+HSPLandroid/os/PowerSaveState$1;-><init>()V
+HSPLandroid/os/PowerSaveState$Builder;->-get0(Landroid/os/PowerSaveState$Builder;)Z
+HSPLandroid/os/PowerSaveState$Builder;->-get1(Landroid/os/PowerSaveState$Builder;)F
+HSPLandroid/os/PowerSaveState$Builder;->-get2(Landroid/os/PowerSaveState$Builder;)Z
+HSPLandroid/os/PowerSaveState$Builder;->-get3(Landroid/os/PowerSaveState$Builder;)I
+HSPLandroid/os/PowerSaveState$Builder;-><init>()V
+HSPLandroid/os/PowerSaveState$Builder;->build()Landroid/os/PowerSaveState;
+HSPLandroid/os/PowerSaveState$Builder;->setBatterySaverEnabled(Z)Landroid/os/PowerSaveState$Builder;
+HSPLandroid/os/PowerSaveState$Builder;->setGlobalBatterySaverEnabled(Z)Landroid/os/PowerSaveState$Builder;
+HSPLandroid/os/PowerSaveState;-><init>(Landroid/os/PowerSaveState$Builder;)V
+HSPLandroid/os/Process;->getStartElapsedRealtime()J
+HSPLandroid/os/Process;->is64Bit()Z
+HSPLandroid/os/Process;->isIsolated()Z
+HSPLandroid/os/Process;->isIsolated(I)Z
+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/Registrant;-><init>(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLandroid/os/Registrant;->clear()V
+HSPLandroid/os/Registrant;->getHandler()Landroid/os/Handler;
+HSPLandroid/os/Registrant;->internalNotifyRegistrant(Ljava/lang/Object;Ljava/lang/Throwable;)V
+HSPLandroid/os/Registrant;->notifyRegistrant()V
+HSPLandroid/os/Registrant;->notifyRegistrant(Landroid/os/AsyncResult;)V
+HSPLandroid/os/RegistrantList;-><init>()V
+HSPLandroid/os/RegistrantList;->add(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLandroid/os/RegistrantList;->add(Landroid/os/Registrant;)V
+HSPLandroid/os/RegistrantList;->addUnique(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLandroid/os/RegistrantList;->internalNotifyRegistrants(Ljava/lang/Object;Ljava/lang/Throwable;)V
+HSPLandroid/os/RegistrantList;->notifyRegistrants()V
+HSPLandroid/os/RegistrantList;->notifyRegistrants(Landroid/os/AsyncResult;)V
+HSPLandroid/os/RegistrantList;->notifyResult(Ljava/lang/Object;)V
+HSPLandroid/os/RegistrantList;->remove(Landroid/os/Handler;)V
+HSPLandroid/os/RegistrantList;->removeCleared()V
+HSPLandroid/os/RemoteCallbackList$Callback;-><init>(Landroid/os/RemoteCallbackList;Landroid/os/IInterface;Ljava/lang/Object;)V
+HSPLandroid/os/RemoteCallbackList;-><init>()V
+HSPLandroid/os/RemoteCallbackList;->beginBroadcast()I
+HSPLandroid/os/RemoteCallbackList;->finishBroadcast()V
+HSPLandroid/os/RemoteCallbackList;->getBroadcastItem(I)Landroid/os/IInterface;
+HSPLandroid/os/RemoteCallbackList;->logExcessiveCallbacks()V
+HSPLandroid/os/RemoteCallbackList;->register(Landroid/os/IInterface;)Z
+HSPLandroid/os/RemoteCallbackList;->register(Landroid/os/IInterface;Ljava/lang/Object;)Z
+HSPLandroid/os/RemoteException;-><init>(Ljava/lang/String;)V
+HSPLandroid/os/ResultReceiver$1;-><init>()V
+HSPLandroid/os/ResultReceiver;-><init>(Landroid/os/Handler;)V
+HSPLandroid/os/ResultReceiver;->onReceiveResult(ILandroid/os/Bundle;)V
+HSPLandroid/os/ResultReceiver;->send(ILandroid/os/Bundle;)V
+HSPLandroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;)V
+HSPLandroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;Z)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;
+HSPLandroid/os/ServiceManager;->initServiceCache(Ljava/util/Map;)V
+HSPLandroid/os/ServiceManagerNative;->asInterface(Landroid/os/IBinder;)Landroid/os/IServiceManager;
+HSPLandroid/os/ServiceManagerProxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/os/ServiceManagerProxy;->addService(Ljava/lang/String;Landroid/os/IBinder;Z)V
+HSPLandroid/os/ServiceManagerProxy;->checkService(Ljava/lang/String;)Landroid/os/IBinder;
+HSPLandroid/os/ServiceManagerProxy;->getService(Ljava/lang/String;)Landroid/os/IBinder;
+HSPLandroid/os/StatFs;-><init>(Ljava/lang/String;)V
+HSPLandroid/os/StatFs;->doStat(Ljava/lang/String;)Landroid/system/StructStatVfs;
+HSPLandroid/os/StatFs;->getAvailableBlocksLong()J
+HSPLandroid/os/StatFs;->getBlockSize()I
+HSPLandroid/os/StatFs;->getBlockSizeLong()J
+HSPLandroid/os/StrictMode$1;->initialValue()Ljava/lang/Object;
+HSPLandroid/os/StrictMode$1;->initialValue()Ljava/util/ArrayList;
+HSPLandroid/os/StrictMode$2;->initialValue()Ljava/lang/Object;
+HSPLandroid/os/StrictMode$2;->initialValue()Ljava/util/ArrayList;
+HSPLandroid/os/StrictMode$3;->initialValue()Landroid/os/Handler;
+HSPLandroid/os/StrictMode$3;->initialValue()Ljava/lang/Object;
+HSPLandroid/os/StrictMode$4;->initialValue()Landroid/os/StrictMode$AndroidBlockGuardPolicy;
+HSPLandroid/os/StrictMode$4;->initialValue()Ljava/lang/Object;
+HSPLandroid/os/StrictMode$7;->initialValue()Landroid/os/StrictMode$ThreadSpanState;
+HSPLandroid/os/StrictMode$7;->initialValue()Ljava/lang/Object;
+HSPLandroid/os/StrictMode$9;-><init>(Ljava/lang/String;ILandroid/os/StrictMode$ViolationInfo;)V
+HSPLandroid/os/StrictMode$9;->run()V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy$1;-><init>(Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/view/IWindowManager;Ljava/util/ArrayList;)V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy$1;->run()V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;-><init>(I)V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->getPolicyMask()I
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->handleViolation(Landroid/os/StrictMode$ViolationInfo;)V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->handleViolationWithTimingAttempt(Landroid/os/StrictMode$ViolationInfo;)V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onCustomSlowCall(Ljava/lang/String;)V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onReadFromDisk()V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onWriteToDisk()V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->setPolicyMask(I)V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->startHandlingViolationException(Ldalvik/system/BlockGuard$BlockGuardPolicyException;)V
+HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;-><init>()V
+HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;-><init>(Landroid/os/StrictMode$AndroidCloseGuardReporter;)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$LogStackTrace;-><init>()V
+HSPLandroid/os/StrictMode$LogStackTrace;-><init>(Landroid/os/StrictMode$LogStackTrace;)V
+HSPLandroid/os/StrictMode$StrictModeDiskReadViolation;-><init>(I)V
+HSPLandroid/os/StrictMode$StrictModeDiskWriteViolation;-><init>(I)V
+HSPLandroid/os/StrictMode$StrictModeViolation;-><init>(IILjava/lang/String;)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;
+HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->detectAll()Landroid/os/StrictMode$ThreadPolicy$Builder;
+HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->detectCustomSlowCalls()Landroid/os/StrictMode$ThreadPolicy$Builder;
+HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->detectDiskReads()Landroid/os/StrictMode$ThreadPolicy$Builder;
+HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->detectDiskWrites()Landroid/os/StrictMode$ThreadPolicy$Builder;
+HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->detectNetwork()Landroid/os/StrictMode$ThreadPolicy$Builder;
+HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->detectResourceMismatches()Landroid/os/StrictMode$ThreadPolicy$Builder;
+HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->detectUnbufferedIo()Landroid/os/StrictMode$ThreadPolicy$Builder;
+HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->disable(I)Landroid/os/StrictMode$ThreadPolicy$Builder;
+HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->enable(I)Landroid/os/StrictMode$ThreadPolicy$Builder;
+HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->penaltyDeath()Landroid/os/StrictMode$ThreadPolicy$Builder;
+HSPLandroid/os/StrictMode$ThreadPolicy$Builder;->penaltyLog()Landroid/os/StrictMode$ThreadPolicy$Builder;
+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;-><init>(I)V
+HSPLandroid/os/StrictMode$ThreadPolicy;-><init>(ILandroid/os/StrictMode$ThreadPolicy;)V
+HSPLandroid/os/StrictMode$ThreadSpanState;-><init>()V
+HSPLandroid/os/StrictMode$ThreadSpanState;-><init>(Landroid/os/StrictMode$ThreadSpanState;)V
+HSPLandroid/os/StrictMode$ViolationInfo$1;-><init>()V
+HSPLandroid/os/StrictMode$ViolationInfo;-><init>(Landroid/os/Parcel;Z)V
+HSPLandroid/os/StrictMode$ViolationInfo;-><init>(Ljava/lang/String;Ljava/lang/Throwable;I)V
+HSPLandroid/os/StrictMode$ViolationInfo;-><init>(Ljava/lang/Throwable;I)V
+HSPLandroid/os/StrictMode$ViolationInfo;->hashCode()I
+HSPLandroid/os/StrictMode$ViolationInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/StrictMode$VmPolicy$Builder;->-wrap0(Landroid/os/StrictMode$VmPolicy$Builder;I)Landroid/os/StrictMode$VmPolicy$Builder;
+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;
+HSPLandroid/os/StrictMode$VmPolicy$Builder;->detectContentUriWithoutPermission()Landroid/os/StrictMode$VmPolicy$Builder;
+HSPLandroid/os/StrictMode$VmPolicy$Builder;->detectFileUriExposure()Landroid/os/StrictMode$VmPolicy$Builder;
+HSPLandroid/os/StrictMode$VmPolicy$Builder;->detectLeakedClosableObjects()Landroid/os/StrictMode$VmPolicy$Builder;
+HSPLandroid/os/StrictMode$VmPolicy$Builder;->detectLeakedRegistrationObjects()Landroid/os/StrictMode$VmPolicy$Builder;
+HSPLandroid/os/StrictMode$VmPolicy$Builder;->detectLeakedSqlLiteObjects()Landroid/os/StrictMode$VmPolicy$Builder;
+HSPLandroid/os/StrictMode$VmPolicy$Builder;->detectUntaggedSockets()Landroid/os/StrictMode$VmPolicy$Builder;
+HSPLandroid/os/StrictMode$VmPolicy$Builder;->disable(I)Landroid/os/StrictMode$VmPolicy$Builder;
+HSPLandroid/os/StrictMode$VmPolicy$Builder;->enable(I)Landroid/os/StrictMode$VmPolicy$Builder;
+HSPLandroid/os/StrictMode$VmPolicy$Builder;->penaltyDropBox()Landroid/os/StrictMode$VmPolicy$Builder;
+HSPLandroid/os/StrictMode$VmPolicy;-><init>(ILjava/util/HashMap;)V
+HSPLandroid/os/StrictMode$VmPolicy;-><init>(ILjava/util/HashMap;Landroid/os/StrictMode$VmPolicy;)V
+HSPLandroid/os/StrictMode;->-get0()Ljava/util/HashMap;
+HSPLandroid/os/StrictMode;->-get1()Z
+HSPLandroid/os/StrictMode;->-get2()Ljava/lang/ThreadLocal;
+HSPLandroid/os/StrictMode;->-get3()Ljava/util/concurrent/atomic/AtomicInteger;
+HSPLandroid/os/StrictMode;->-get6()Ljava/lang/ThreadLocal;
+HSPLandroid/os/StrictMode;->-get8()Ljava/lang/ThreadLocal;
+HSPLandroid/os/StrictMode;->-get9()Ljava/lang/ThreadLocal;
+HSPLandroid/os/StrictMode;->-wrap0()Z
+HSPLandroid/os/StrictMode;->-wrap1(Ljava/lang/String;)I
+HSPLandroid/os/StrictMode;->-wrap4(I)V
+HSPLandroid/os/StrictMode;->allowThreadDiskReads()Landroid/os/StrictMode$ThreadPolicy;
+HSPLandroid/os/StrictMode;->allowThreadDiskWrites()Landroid/os/StrictMode$ThreadPolicy;
+HSPLandroid/os/StrictMode;->clearGatheredViolations()V
+HSPLandroid/os/StrictMode;->conditionallyEnableDebugLogging()Z
+HSPLandroid/os/StrictMode;->dropboxViolationAsync(ILandroid/os/StrictMode$ViolationInfo;)V
+HSPLandroid/os/StrictMode;->enableDeathOnFileUriExposure()V
+HSPLandroid/os/StrictMode;->enableDeathOnNetwork()V
+HSPLandroid/os/StrictMode;->getThreadPolicy()Landroid/os/StrictMode$ThreadPolicy;
+HSPLandroid/os/StrictMode;->getThreadPolicyMask()I
+HSPLandroid/os/StrictMode;->getVmPolicy()Landroid/os/StrictMode$VmPolicy;
+HSPLandroid/os/StrictMode;->hasGatheredViolations()Z
+HSPLandroid/os/StrictMode;->incrementExpectedActivityCount(Ljava/lang/Class;)V
+HSPLandroid/os/StrictMode;->noteSlowCall(Ljava/lang/String;)V
+HSPLandroid/os/StrictMode;->onBinderStrictModePolicyChange(I)V
+HSPLandroid/os/StrictMode;->onVmPolicyViolation(Ljava/lang/String;Ljava/lang/Throwable;)V
+HSPLandroid/os/StrictMode;->onVmPolicyViolation(Ljava/lang/String;Ljava/lang/Throwable;Z)V
+HSPLandroid/os/StrictMode;->parseViolationFromMessage(Ljava/lang/String;)I
+HSPLandroid/os/StrictMode;->readAndHandleBinderCallViolations(Landroid/os/Parcel;)V
+HSPLandroid/os/StrictMode;->setBlockGuardPolicy(I)V
+HSPLandroid/os/StrictMode;->setCloseGuardEnabled(Z)V
+HSPLandroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V
+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
+HSPLandroid/os/StrictMode;->vmContentUriWithoutPermissionEnabled()Z
+HSPLandroid/os/StrictMode;->vmFileUriExposureEnabled()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;->sleep(J)V
+HSPLandroid/os/SystemProperties;->addChangeCallback(Ljava/lang/Runnable;)V
+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
+HSPLandroid/os/SystemProperties;->getInt(Ljava/lang/String;I)I
+HSPLandroid/os/SystemProperties;->set(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/SystemVibrator;-><init>(Landroid/content/Context;)V
+HSPLandroid/os/SystemVibrator;->hasVibrator()Z
+HSPLandroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V
+HSPLandroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V
+HSPLandroid/os/Trace;->beginSection(Ljava/lang/String;)V
+HSPLandroid/os/Trace;->cacheEnabledTags()J
+HSPLandroid/os/Trace;->endSection()V
+HSPLandroid/os/Trace;->isTagEnabled(J)Z
+HSPLandroid/os/Trace;->setAppTracingAllowed(Z)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
+HSPLandroid/os/UpdateLock;-><init>(Ljava/lang/String;)V
+HSPLandroid/os/UserHandle$1;-><init>()V
+HSPLandroid/os/UserHandle$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;
+HSPLandroid/os/UserHandle$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/os/UserHandle;-><init>(I)V
+HSPLandroid/os/UserHandle;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/os/UserHandle;->equals(Ljava/lang/Object;)Z
+HSPLandroid/os/UserHandle;->getAppId(I)I
+HSPLandroid/os/UserHandle;->getCacheAppGid(I)I
+HSPLandroid/os/UserHandle;->getCallingUserId()I
+HSPLandroid/os/UserHandle;->getIdentifier()I
+HSPLandroid/os/UserHandle;->getUid(II)I
+HSPLandroid/os/UserHandle;->getUserId(I)I
+HSPLandroid/os/UserHandle;->hashCode()I
+HSPLandroid/os/UserHandle;->isOwner()Z
+HSPLandroid/os/UserHandle;->isSameApp(II)Z
+HSPLandroid/os/UserHandle;->myUserId()I
+HSPLandroid/os/UserHandle;->of(I)Landroid/os/UserHandle;
+HSPLandroid/os/UserHandle;->readFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;
+HSPLandroid/os/UserHandle;->toString()Ljava/lang/String;
+HSPLandroid/os/UserHandle;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/UserManager$EnforcingUser$1;-><init>()V
+HSPLandroid/os/UserManager;-><init>(Landroid/content/Context;Landroid/os/IUserManager;)V
+HSPLandroid/os/UserManager;->canAddMoreUsers()Z
+HSPLandroid/os/UserManager;->canSwitchUsers()Z
+HSPLandroid/os/UserManager;->get(Landroid/content/Context;)Landroid/os/UserManager;
+HSPLandroid/os/UserManager;->getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;
+HSPLandroid/os/UserManager;->getEnabledProfiles(I)Ljava/util/List;
+HSPLandroid/os/UserManager;->getMaxSupportedUsers()I
+HSPLandroid/os/UserManager;->getProfileIds(IZ)[I
+HSPLandroid/os/UserManager;->getProfileIdsWithDisabled(I)[I
+HSPLandroid/os/UserManager;->getProfileParent(I)Landroid/content/pm/UserInfo;
+HSPLandroid/os/UserManager;->getProfiles(I)Ljava/util/List;
+HSPLandroid/os/UserManager;->getSerialNumberForUser(Landroid/os/UserHandle;)J
+HSPLandroid/os/UserManager;->getUserAccount(I)Ljava/lang/String;
+HSPLandroid/os/UserManager;->getUserHandle()I
+HSPLandroid/os/UserManager;->getUserIcon(I)Landroid/graphics/Bitmap;
+HSPLandroid/os/UserManager;->getUserInfo(I)Landroid/content/pm/UserInfo;
+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;->getUsers()Ljava/util/List;
+HSPLandroid/os/UserManager;->getUsers(Z)Ljava/util/List;
+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;->isAdminUser()Z
+HSPLandroid/os/UserManager;->isDemoUser()Z
+HSPLandroid/os/UserManager;->isDeviceInDemoMode(Landroid/content/Context;)Z
+HSPLandroid/os/UserManager;->isGuestUser()Z
+HSPLandroid/os/UserManager;->isManagedProfile()Z
+HSPLandroid/os/UserManager;->isManagedProfile(I)Z
+HSPLandroid/os/UserManager;->isQuietModeEnabled(Landroid/os/UserHandle;)Z
+HSPLandroid/os/UserManager;->isSplitSystemUser()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
+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
+HSPLandroid/os/UserManager;->supportsMultipleUsers()Z
+HSPLandroid/os/UserManagerInternal;-><init>()V
+HSPLandroid/os/UserManagerInternal;->addUserRestrictionsListener(Landroid/os/UserManagerInternal$UserRestrictionsListener;)V
+HSPLandroid/os/UserManagerInternal;->createUserEvenWhenDisallowed(Ljava/lang/String;I)Landroid/content/pm/UserInfo;
+HSPLandroid/os/UserManagerInternal;->getBaseUserRestrictions(I)Landroid/os/Bundle;
+HSPLandroid/os/UserManagerInternal;->getUserIds()[I
+HSPLandroid/os/UserManagerInternal;->getUserRestriction(ILjava/lang/String;)Z
+HSPLandroid/os/UserManagerInternal;->isUserRunning(I)Z
+HSPLandroid/os/UserManagerInternal;->isUserUnlocked(I)Z
+HSPLandroid/os/UserManagerInternal;->isUserUnlockingOrUnlocked(I)Z
+HSPLandroid/os/UserManagerInternal;->onEphemeralUserStop(I)V
+HSPLandroid/os/UserManagerInternal;->removeAllUsers()V
+HSPLandroid/os/UserManagerInternal;->removeUserEvenWhenDisallowed(I)Z
+HSPLandroid/os/UserManagerInternal;->removeUserRestrictionsListener(Landroid/os/UserManagerInternal$UserRestrictionsListener;)V
+HSPLandroid/os/UserManagerInternal;->removeUserState(I)V
+HSPLandroid/os/UserManagerInternal;->setBaseUserRestrictionsByDpmsForMigration(ILandroid/os/Bundle;)V
+HSPLandroid/os/UserManagerInternal;->setDeviceManaged(Z)V
+HSPLandroid/os/UserManagerInternal;->setDevicePolicyUserRestrictions(ILandroid/os/Bundle;ZI)V
+HSPLandroid/os/UserManagerInternal;->setForceEphemeralUsers(Z)V
+HSPLandroid/os/UserManagerInternal;->setUserIcon(ILandroid/graphics/Bitmap;)V
+HSPLandroid/os/UserManagerInternal;->setUserManaged(IZ)V
+HSPLandroid/os/UserManagerInternal;->setUserState(II)V
+HSPLandroid/os/Vibrator;-><init>(Landroid/content/Context;)V
+HSPLandroid/os/Vibrator;->cancel()V
+HSPLandroid/os/Vibrator;->hasAmplitudeControl()Z
+HSPLandroid/os/Vibrator;->hasVibrator()Z
+HSPLandroid/os/Vibrator;->vibrate(ILjava/lang/String;Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;)V
+HSPLandroid/os/WorkSource$1;-><init>()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/WorkSource;)V
+HSPLandroid/os/WorkSource;->add(ILjava/lang/String;)Z
+HSPLandroid/os/WorkSource;->add(Landroid/os/WorkSource;)Z
+HSPLandroid/os/WorkSource;->compare(Landroid/os/WorkSource;II)I
+HSPLandroid/os/WorkSource;->diff(Landroid/os/WorkSource;)Z
+HSPLandroid/os/WorkSource;->get(I)I
+HSPLandroid/os/WorkSource;->getName(I)Ljava/lang/String;
+HSPLandroid/os/WorkSource;->insert(IILjava/lang/String;)V
+HSPLandroid/os/WorkSource;->remove(Landroid/os/WorkSource;)Z
+HSPLandroid/os/WorkSource;->removeUidsAndNames(Landroid/os/WorkSource;)Z
+HSPLandroid/os/WorkSource;->set(Landroid/os/WorkSource;)V
+HSPLandroid/os/WorkSource;->size()I
+HSPLandroid/os/WorkSource;->updateLocked(Landroid/os/WorkSource;ZZ)Z
+HSPLandroid/os/WorkSource;->updateUidsAndNamesLocked(Landroid/os/WorkSource;ZZ)Z
+HSPLandroid/os/WorkSource;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/ZygoteProcess$ZygoteState;-><init>(Landroid/net/LocalSocket;Ljava/io/DataInputStream;Ljava/io/BufferedWriter;Ljava/util/List;)V
+HSPLandroid/os/ZygoteProcess$ZygoteState;->close()V
+HSPLandroid/os/ZygoteProcess$ZygoteState;->connect(Ljava/lang/String;)Landroid/os/ZygoteProcess$ZygoteState;
+HSPLandroid/os/ZygoteProcess;->-wrap0(Ljava/io/BufferedWriter;Ljava/io/DataInputStream;)Ljava/lang/String;
+HSPLandroid/os/ZygoteProcess;->getAbiList(Ljava/io/BufferedWriter;Ljava/io/DataInputStream;)Ljava/lang/String;
+HSPLandroid/os/ZygoteProcess;->waitForConnectionToZygote(Ljava/lang/String;)V
+HSPLandroid/os/storage/DiskInfo$1;-><init>()V
+HSPLandroid/os/storage/DiskInfo$1;->newArray(I)[Landroid/os/storage/DiskInfo;
+HSPLandroid/os/storage/DiskInfo$1;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/os/storage/IObbActionListener$Stub;-><init>()V
+HSPLandroid/os/storage/IObbActionListener;->onObbResult(Ljava/lang/String;II)V
+HSPLandroid/os/storage/IStorageEventListener$Stub;-><init>()V
+HSPLandroid/os/storage/IStorageEventListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/os/storage/IStorageEventListener;->onDiskDestroyed(Landroid/os/storage/DiskInfo;)V
+HSPLandroid/os/storage/IStorageEventListener;->onDiskScanned(Landroid/os/storage/DiskInfo;I)V
+HSPLandroid/os/storage/IStorageEventListener;->onStorageStateChanged(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/storage/IStorageEventListener;->onUsbMassStorageConnectionChanged(Z)V
+HSPLandroid/os/storage/IStorageEventListener;->onVolumeForgotten(Ljava/lang/String;)V
+HSPLandroid/os/storage/IStorageEventListener;->onVolumeRecordChanged(Landroid/os/storage/VolumeRecord;)V
+HSPLandroid/os/storage/IStorageEventListener;->onVolumeStateChanged(Landroid/os/storage/VolumeInfo;II)V
+HSPLandroid/os/storage/IStorageManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/os/storage/IStorageManager$Stub$Proxy;->getAllocatableBytes(Ljava/lang/String;ILjava/lang/String;)J
+HSPLandroid/os/storage/IStorageManager$Stub$Proxy;->getDisks()[Landroid/os/storage/DiskInfo;
+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;->registerListener(Landroid/os/storage/IStorageEventListener;)V
+HSPLandroid/os/storage/IStorageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/storage/IStorageManager;
+HSPLandroid/os/storage/IStorageManager;->addUserKeyAuth(II[B[B)V
+HSPLandroid/os/storage/IStorageManager;->allocateBytes(Ljava/lang/String;JILjava/lang/String;)V
+HSPLandroid/os/storage/IStorageManager;->benchmark(Ljava/lang/String;)J
+HSPLandroid/os/storage/IStorageManager;->changeEncryptionPassword(ILjava/lang/String;)I
+HSPLandroid/os/storage/IStorageManager;->clearPassword()V
+HSPLandroid/os/storage/IStorageManager;->createSecureContainer(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;IZ)I
+HSPLandroid/os/storage/IStorageManager;->createUserKey(IIZ)V
+HSPLandroid/os/storage/IStorageManager;->decryptStorage(Ljava/lang/String;)I
+HSPLandroid/os/storage/IStorageManager;->destroySecureContainer(Ljava/lang/String;Z)I
+HSPLandroid/os/storage/IStorageManager;->destroyUserKey(I)V
+HSPLandroid/os/storage/IStorageManager;->destroyUserStorage(Ljava/lang/String;II)V
+HSPLandroid/os/storage/IStorageManager;->encryptStorage(ILjava/lang/String;)I
+HSPLandroid/os/storage/IStorageManager;->finalizeSecureContainer(Ljava/lang/String;)I
+HSPLandroid/os/storage/IStorageManager;->finishMediaUpdate()V
+HSPLandroid/os/storage/IStorageManager;->fixPermissionsSecureContainer(Ljava/lang/String;ILjava/lang/String;)I
+HSPLandroid/os/storage/IStorageManager;->fixateNewestUserKeyAuth(I)V
+HSPLandroid/os/storage/IStorageManager;->forgetAllVolumes()V
+HSPLandroid/os/storage/IStorageManager;->forgetVolume(Ljava/lang/String;)V
+HSPLandroid/os/storage/IStorageManager;->format(Ljava/lang/String;)V
+HSPLandroid/os/storage/IStorageManager;->formatVolume(Ljava/lang/String;)I
+HSPLandroid/os/storage/IStorageManager;->fstrim(I)V
+HSPLandroid/os/storage/IStorageManager;->getAllocatableBytes(Ljava/lang/String;ILjava/lang/String;)J
+HSPLandroid/os/storage/IStorageManager;->getCacheQuotaBytes(Ljava/lang/String;I)J
+HSPLandroid/os/storage/IStorageManager;->getCacheSizeBytes(Ljava/lang/String;I)J
+HSPLandroid/os/storage/IStorageManager;->getDisks()[Landroid/os/storage/DiskInfo;
+HSPLandroid/os/storage/IStorageManager;->getEncryptionState()I
+HSPLandroid/os/storage/IStorageManager;->getField(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/os/storage/IStorageManager;->getMountedObbPath(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/os/storage/IStorageManager;->getPassword()Ljava/lang/String;
+HSPLandroid/os/storage/IStorageManager;->getPasswordType()I
+HSPLandroid/os/storage/IStorageManager;->getPrimaryStorageUuid()Ljava/lang/String;
+HSPLandroid/os/storage/IStorageManager;->getSecureContainerFilesystemPath(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/os/storage/IStorageManager;->getSecureContainerList()[Ljava/lang/String;
+HSPLandroid/os/storage/IStorageManager;->getSecureContainerPath(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/os/storage/IStorageManager;->getStorageUsers(Ljava/lang/String;)[I
+HSPLandroid/os/storage/IStorageManager;->getVolumeList(ILjava/lang/String;I)[Landroid/os/storage/StorageVolume;
+HSPLandroid/os/storage/IStorageManager;->getVolumeRecords(I)[Landroid/os/storage/VolumeRecord;
+HSPLandroid/os/storage/IStorageManager;->getVolumeState(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/os/storage/IStorageManager;->getVolumes(I)[Landroid/os/storage/VolumeInfo;
+HSPLandroid/os/storage/IStorageManager;->isConvertibleToFBE()Z
+HSPLandroid/os/storage/IStorageManager;->isExternalStorageEmulated()Z
+HSPLandroid/os/storage/IStorageManager;->isObbMounted(Ljava/lang/String;)Z
+HSPLandroid/os/storage/IStorageManager;->isSecureContainerMounted(Ljava/lang/String;)Z
+HSPLandroid/os/storage/IStorageManager;->isUsbMassStorageConnected()Z
+HSPLandroid/os/storage/IStorageManager;->isUsbMassStorageEnabled()Z
+HSPLandroid/os/storage/IStorageManager;->isUserKeyUnlocked(I)Z
+HSPLandroid/os/storage/IStorageManager;->lastMaintenance()J
+HSPLandroid/os/storage/IStorageManager;->lockUserKey(I)V
+HSPLandroid/os/storage/IStorageManager;->mkdirs(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/os/storage/IStorageManager;->mount(Ljava/lang/String;)V
+HSPLandroid/os/storage/IStorageManager;->mountObb(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/storage/IObbActionListener;I)V
+HSPLandroid/os/storage/IStorageManager;->mountProxyFileDescriptorBridge()Lcom/android/internal/os/AppFuseMount;
+HSPLandroid/os/storage/IStorageManager;->mountSecureContainer(Ljava/lang/String;Ljava/lang/String;IZ)I
+HSPLandroid/os/storage/IStorageManager;->mountVolume(Ljava/lang/String;)I
+HSPLandroid/os/storage/IStorageManager;->openProxyFileDescriptor(III)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/os/storage/IStorageManager;->partitionMixed(Ljava/lang/String;I)V
+HSPLandroid/os/storage/IStorageManager;->partitionPrivate(Ljava/lang/String;)V
+HSPLandroid/os/storage/IStorageManager;->partitionPublic(Ljava/lang/String;)V
+HSPLandroid/os/storage/IStorageManager;->prepareUserStorage(Ljava/lang/String;III)V
+HSPLandroid/os/storage/IStorageManager;->registerListener(Landroid/os/storage/IStorageEventListener;)V
+HSPLandroid/os/storage/IStorageManager;->renameSecureContainer(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/os/storage/IStorageManager;->resizeSecureContainer(Ljava/lang/String;ILjava/lang/String;)I
+HSPLandroid/os/storage/IStorageManager;->runMaintenance()V
+HSPLandroid/os/storage/IStorageManager;->secdiscard(Ljava/lang/String;)V
+HSPLandroid/os/storage/IStorageManager;->setDebugFlags(II)V
+HSPLandroid/os/storage/IStorageManager;->setField(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/storage/IStorageManager;->setPrimaryStorageUuid(Ljava/lang/String;Landroid/content/pm/IPackageMoveObserver;)V
+HSPLandroid/os/storage/IStorageManager;->setUsbMassStorageEnabled(Z)V
+HSPLandroid/os/storage/IStorageManager;->setVolumeNickname(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/os/storage/IStorageManager;->setVolumeUserFlags(Ljava/lang/String;II)V
+HSPLandroid/os/storage/IStorageManager;->shutdown(Landroid/os/storage/IStorageShutdownObserver;)V
+HSPLandroid/os/storage/IStorageManager;->unlockUserKey(II[B[B)V
+HSPLandroid/os/storage/IStorageManager;->unmount(Ljava/lang/String;)V
+HSPLandroid/os/storage/IStorageManager;->unmountObb(Ljava/lang/String;ZLandroid/os/storage/IObbActionListener;I)V
+HSPLandroid/os/storage/IStorageManager;->unmountSecureContainer(Ljava/lang/String;Z)I
+HSPLandroid/os/storage/IStorageManager;->unmountVolume(Ljava/lang/String;ZZ)V
+HSPLandroid/os/storage/IStorageManager;->unregisterListener(Landroid/os/storage/IStorageEventListener;)V
+HSPLandroid/os/storage/IStorageManager;->verifyEncryptionPassword(Ljava/lang/String;)I
+HSPLandroid/os/storage/IStorageManager;->waitForAsecScan()V
+HSPLandroid/os/storage/StorageEventListener;-><init>()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$ObbActionListener;)V
+HSPLandroid/os/storage/StorageManager$StorageEventListenerDelegate;-><init>(Landroid/os/storage/StorageEventListener;Landroid/os/Looper;)V
+HSPLandroid/os/storage/StorageManager;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
+HSPLandroid/os/storage/StorageManager;->convert(Ljava/lang/String;)Ljava/util/UUID;
+HSPLandroid/os/storage/StorageManager;->convert(Ljava/util/UUID;)Ljava/lang/String;
+HSPLandroid/os/storage/StorageManager;->getAllocatableBytes(Ljava/util/UUID;)J
+HSPLandroid/os/storage/StorageManager;->getAllocatableBytes(Ljava/util/UUID;I)J
+HSPLandroid/os/storage/StorageManager;->getDisks()Ljava/util/List;
+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;->getUuidForPath(Ljava/io/File;)Ljava/util/UUID;
+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;->inCryptKeeperBounce()Z
+HSPLandroid/os/storage/StorageManager;->isEncrypted()Z
+HSPLandroid/os/storage/StorageManager;->isFileEncryptedNativeOnly()Z
+HSPLandroid/os/storage/StorageManager;->isFileEncryptedNativeOrEmulated()Z
+HSPLandroid/os/storage/StorageManager;->registerListener(Landroid/os/storage/StorageEventListener;)V
+HSPLandroid/os/storage/StorageVolume$1;-><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
+HSPLandroid/os/storage/StorageVolume;-><init>(Landroid/os/Parcel;Landroid/os/storage/StorageVolume;)V
+HSPLandroid/os/storage/StorageVolume;->getPathFile()Ljava/io/File;
+HSPLandroid/os/storage/StorageVolume;->getState()Ljava/lang/String;
+HSPLandroid/os/storage/StorageVolume;->isEmulated()Z
+HSPLandroid/os/storage/VolumeInfo$1;-><init>()V
+HSPLandroid/os/storage/VolumeInfo$2;-><init>()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;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+HSPLandroid/os/storage/VolumeInfo;->getDiskId()Ljava/lang/String;
+HSPLandroid/os/storage/VolumeInfo;->getFsUuid()Ljava/lang/String;
+HSPLandroid/os/storage/VolumeInfo;->getType()I
+HSPLandroid/os/storage/VolumeInfo;->isMountedReadable()Z
+HSPLandroid/os/storage/VolumeInfo;->toString()Ljava/lang/String;
+HSPLandroid/os/storage/VolumeRecord$1;-><init>()V
+HSPLandroid/os/storage/VolumeRecord$1;->newArray(I)[Landroid/os/storage/VolumeRecord;
+HSPLandroid/os/storage/VolumeRecord$1;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/preference/Preference$OnPreferenceChangeListener;->onPreferenceChange(Landroid/preference/Preference;Ljava/lang/Object;)Z
+HSPLandroid/preference/PreferenceFragment$OnPreferenceStartFragmentCallback;->onPreferenceStartFragment(Landroid/preference/PreferenceFragment;Landroid/preference/Preference;)Z
+HSPLandroid/preference/PreferenceManager$OnPreferenceTreeClickListener;->onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z
+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/provider/-$Lambda$a7Jyr6j_Mb70hHJ2ssL1AAhKh4c;-><init>()V
+HSPLandroid/provider/-$Lambda$asz6VwQ86PPY-v8JLMb7rx-pSqg;-><init>(BLjava/lang/Object;)V
+HSPLandroid/provider/BlockedNumberContract;->canCurrentUserBlockNumbers(Landroid/content/Context;)Z
+HSPLandroid/provider/CalendarContract$CalendarAlerts;->rescheduleMissedAlarms(Landroid/content/ContentResolver;Landroid/content/Context;Landroid/app/AlarmManager;)V
+HSPLandroid/provider/ContactsContract$CommonDataKinds$Email;->getTypeLabelResource(I)I
+HSPLandroid/provider/ContactsContract$CommonDataKinds$Event;->getTypeResource(Ljava/lang/Integer;)I
+HSPLandroid/provider/ContactsContract$CommonDataKinds$Im;->getProtocolLabelResource(I)I
+HSPLandroid/provider/ContactsContract$CommonDataKinds$Phone;->getTypeLabelResource(I)I
+HSPLandroid/provider/ContactsContract$CommonDataKinds$Relation;->getTypeLabelResource(I)I
+HSPLandroid/provider/ContactsContract$CommonDataKinds$StructuredPostal;->getTypeLabelResource(I)I
+HSPLandroid/provider/ContactsContract$Contacts;->isEnterpriseContactId(J)Z
+HSPLandroid/provider/FontsContract$1;-><init>()V
+HSPLandroid/provider/FontsContract;->setApplicationContextForResources(Landroid/content/Context;)V
+HSPLandroid/provider/MediaStore$Audio$Media;->getContentUri(Ljava/lang/String;)Landroid/net/Uri;
+HSPLandroid/provider/MediaStore$Files;->getContentUri(Ljava/lang/String;)Landroid/net/Uri;
+HSPLandroid/provider/MediaStore$Images$Media;->getContentUri(Ljava/lang/String;)Landroid/net/Uri;
+HSPLandroid/provider/MediaStore$Video$Media;->getContentUri(Ljava/lang/String;)Landroid/net/Uri;
+HSPLandroid/provider/SearchIndexableData;-><init>()V
+HSPLandroid/provider/SearchIndexableResource;-><init>(IILjava/lang/String;I)V
+HSPLandroid/provider/SearchIndexablesProvider;-><init>()V
+HSPLandroid/provider/SearchIndexablesProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V
+HSPLandroid/provider/SearchIndexablesProvider;->queryNonIndexableKeys([Ljava/lang/String;)Landroid/database/Cursor;
+HSPLandroid/provider/SearchIndexablesProvider;->queryRawData([Ljava/lang/String;)Landroid/database/Cursor;
+HSPLandroid/provider/SearchIndexablesProvider;->queryXmlResources([Ljava/lang/String;)Landroid/database/Cursor;
+HSPLandroid/provider/SearchRecentSuggestions;-><init>(Landroid/content/Context;Ljava/lang/String;I)V
+HSPLandroid/provider/Settings$ContentProviderHolder;-><init>(Landroid/net/Uri;)V
+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;->isGenerationChanged()Z
+HSPLandroid/provider/Settings$GenerationTracker;->readCurrentGeneration()I
+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)J
+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;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
+HSPLandroid/provider/Settings$Global;->putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/provider/Settings$Global;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZI)Z
+HSPLandroid/provider/Settings$NameValueCache;-><init>(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Landroid/provider/Settings$ContentProviderHolder;)V
+HSPLandroid/provider/Settings$NameValueCache;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/provider/Settings$NameValueCache;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZI)Z
+HSPLandroid/provider/Settings$NameValueTable;->getUriFor(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;
+HSPLandroid/provider/Settings$Secure;->getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F
+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;->getLocationModeForUser(Landroid/content/ContentResolver;I)I
+HSPLandroid/provider/Settings$Secure;->getLong(Landroid/content/ContentResolver;Ljava/lang/String;)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;->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;->isLocationProviderEnabledForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
+HSPLandroid/provider/Settings$SettingNotFoundException;-><init>(Ljava/lang/String;)V
+HSPLandroid/provider/Settings$System$1;-><init>()V
+HSPLandroid/provider/Settings$System$2;-><init>()V
+HSPLandroid/provider/Settings$System$3;-><init>()V
+HSPLandroid/provider/Settings$System$4;-><init>()V
+HSPLandroid/provider/Settings$System$5;-><init>()V
+HSPLandroid/provider/Settings$System$6;-><init>()V
+HSPLandroid/provider/Settings$System$7;-><init>()V
+HSPLandroid/provider/Settings$System$8;-><init>()V
+HSPLandroid/provider/Settings$System$9;-><init>()V
+HSPLandroid/provider/Settings$System$DiscreteValueValidator;-><init>([Ljava/lang/String;)V
+HSPLandroid/provider/Settings$System$InclusiveFloatRangeValidator;-><init>(FF)V
+HSPLandroid/provider/Settings$System$InclusiveIntegerRangeValidator;-><init>(II)V
+HSPLandroid/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;->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;->-get0()Ljava/lang/Object;
+HSPLandroid/provider/Settings;->isInSystemServer()Z
+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;->getDefaultSmsPackage(Landroid/content/Context;)Ljava/lang/String;
+HSPLandroid/renderscript/RenderScriptCacheDir;->setupDiskCache(Ljava/io/File;)V
+HSPLandroid/security/IKeystoreService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/security/IKeystoreService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/security/IKeystoreService;
+HSPLandroid/security/IKeystoreService;->abort(Landroid/os/IBinder;)I
+HSPLandroid/security/IKeystoreService;->addAuthToken([B)I
+HSPLandroid/security/IKeystoreService;->addRngEntropy([B)I
+HSPLandroid/security/IKeystoreService;->attestDeviceIds(Landroid/security/keymaster/KeymasterArguments;Landroid/security/keymaster/KeymasterCertificateChain;)I
+HSPLandroid/security/IKeystoreService;->attestKey(Ljava/lang/String;Landroid/security/keymaster/KeymasterArguments;Landroid/security/keymaster/KeymasterCertificateChain;)I
+HSPLandroid/security/IKeystoreService;->begin(Landroid/os/IBinder;Ljava/lang/String;IZLandroid/security/keymaster/KeymasterArguments;[BI)Landroid/security/keymaster/OperationResult;
+HSPLandroid/security/IKeystoreService;->clear_uid(J)I
+HSPLandroid/security/IKeystoreService;->del(Ljava/lang/String;I)I
+HSPLandroid/security/IKeystoreService;->duplicate(Ljava/lang/String;ILjava/lang/String;I)I
+HSPLandroid/security/IKeystoreService;->exist(Ljava/lang/String;I)I
+HSPLandroid/security/IKeystoreService;->exportKey(Ljava/lang/String;ILandroid/security/keymaster/KeymasterBlob;Landroid/security/keymaster/KeymasterBlob;I)Landroid/security/keymaster/ExportResult;
+HSPLandroid/security/IKeystoreService;->finish(Landroid/os/IBinder;Landroid/security/keymaster/KeymasterArguments;[B[B)Landroid/security/keymaster/OperationResult;
+HSPLandroid/security/IKeystoreService;->generate(Ljava/lang/String;IIIILandroid/security/KeystoreArguments;)I
+HSPLandroid/security/IKeystoreService;->generateKey(Ljava/lang/String;Landroid/security/keymaster/KeymasterArguments;[BIILandroid/security/keymaster/KeyCharacteristics;)I
+HSPLandroid/security/IKeystoreService;->get(Ljava/lang/String;I)[B
+HSPLandroid/security/IKeystoreService;->getKeyCharacteristics(Ljava/lang/String;Landroid/security/keymaster/KeymasterBlob;Landroid/security/keymaster/KeymasterBlob;ILandroid/security/keymaster/KeyCharacteristics;)I
+HSPLandroid/security/IKeystoreService;->getState(I)I
+HSPLandroid/security/IKeystoreService;->get_pubkey(Ljava/lang/String;)[B
+HSPLandroid/security/IKeystoreService;->getmtime(Ljava/lang/String;I)J
+HSPLandroid/security/IKeystoreService;->grant(Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/security/IKeystoreService;->importKey(Ljava/lang/String;Landroid/security/keymaster/KeymasterArguments;I[BIILandroid/security/keymaster/KeyCharacteristics;)I
+HSPLandroid/security/IKeystoreService;->import_key(Ljava/lang/String;[BII)I
+HSPLandroid/security/IKeystoreService;->insert(Ljava/lang/String;[BII)I
+HSPLandroid/security/IKeystoreService;->isEmpty(I)I
+HSPLandroid/security/IKeystoreService;->isOperationAuthorized(Landroid/os/IBinder;)Z
+HSPLandroid/security/IKeystoreService;->is_hardware_backed(Ljava/lang/String;)I
+HSPLandroid/security/IKeystoreService;->list(Ljava/lang/String;I)[Ljava/lang/String;
+HSPLandroid/security/IKeystoreService;->lock(I)I
+HSPLandroid/security/IKeystoreService;->onDeviceOffBody()I
+HSPLandroid/security/IKeystoreService;->onUserAdded(II)I
+HSPLandroid/security/IKeystoreService;->onUserPasswordChanged(ILjava/lang/String;)I
+HSPLandroid/security/IKeystoreService;->onUserRemoved(I)I
+HSPLandroid/security/IKeystoreService;->reset()I
+HSPLandroid/security/IKeystoreService;->sign(Ljava/lang/String;[B)[B
+HSPLandroid/security/IKeystoreService;->ungrant(Ljava/lang/String;I)I
+HSPLandroid/security/IKeystoreService;->unlock(ILjava/lang/String;)I
+HSPLandroid/security/IKeystoreService;->update(Landroid/os/IBinder;Landroid/security/keymaster/KeymasterArguments;[B)Landroid/security/keymaster/OperationResult;
+HSPLandroid/security/IKeystoreService;->verify(Ljava/lang/String;[B[B)I
+HSPLandroid/security/KeyChain$1;-><init>(Ljava/util/concurrent/BlockingQueue;)V
+HSPLandroid/security/KeyChain;->bindAsUser(Landroid/content/Context;Landroid/os/UserHandle;)Landroid/security/KeyChain$KeyChainConnection;
+HSPLandroid/security/KeyChain;->ensureNotOnMainThread(Landroid/content/Context;)V
+HSPLandroid/security/KeyStore;-><init>(Landroid/security/IKeystoreService;)V
+HSPLandroid/security/KeyStore;->getApplicationContext()Landroid/content/Context;
+HSPLandroid/security/KeyStore;->getInstance()Landroid/security/KeyStore;
+HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;-><init>()V
+HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->addAlgorithmSpecificParametersToBegin(Landroid/security/keymaster/KeymasterArguments;)V
+HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->engineGetParameters()Ljava/security/AlgorithmParameters;
+HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->engineInit(ILjava/security/Key;Ljava/security/SecureRandom;)V
+HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->getAdditionalEntropyAmountForBegin()I
+HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->getAdditionalEntropyAmountForFinish()I
+HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->init(ILjava/security/Key;Ljava/security/SecureRandom;)V
+HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->initAlgorithmSpecificParameters()V
+HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->initAlgorithmSpecificParameters(Ljava/security/AlgorithmParameters;)V
+HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->initAlgorithmSpecificParameters(Ljava/security/spec/AlgorithmParameterSpec;)V
+HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->initKey(ILjava/security/Key;)V
+HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->loadAlgorithmSpecificParametersFromBeginResult(Landroid/security/keymaster/KeymasterArguments;)V
+HSPLandroid/security/keystore/AndroidKeyStoreCipherSpiBase;->resetAll()V
+HSPLandroid/security/keystore/AndroidKeyStoreKeyFactorySpi;-><init>()V
+HSPLandroid/security/keystore/AndroidKeyStoreKeyFactorySpi;->engineGeneratePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
+HSPLandroid/security/keystore/AndroidKeyStoreRSACipherSpi$PKCS1Padding;-><init>()V
+HSPLandroid/security/keystore/AndroidKeyStoreRSACipherSpi;-><init>(I)V
+HSPLandroid/security/keystore/AndroidKeyStoreRSACipherSpi;->initKey(ILjava/security/Key;)V
+HSPLandroid/security/keystore/AndroidKeyStoreRSACipherSpi;->resetAll()V
+HSPLandroid/security/keystore/KeyStoreCryptoOperation;->getOperationHandle()J
+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;->setDefaultInstance(Landroid/security/net/config/ApplicationConfig;)V
+HSPLandroid/security/net/config/CertificateSource;->findAllByIssuerAndSignature(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
+HSPLandroid/security/net/config/CertificateSource;->findByIssuerAndSignature(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate;
+HSPLandroid/security/net/config/CertificateSource;->findBySubjectAndPublicKey(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509Certificate;
+HSPLandroid/security/net/config/CertificateSource;->getCertificates()Ljava/util/Set;
+HSPLandroid/security/net/config/CertificateSource;->handleTrustStorageUpdate()V
+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/CertificatesEntryRef;->overridesPins()Z
+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/ConfigSource;->getDefaultConfig()Landroid/security/net/config/NetworkSecurityConfig;
+HSPLandroid/security/net/config/ConfigSource;->getPerDomainConfigs()Ljava/util/Set;
+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
+HSPLandroid/security/net/config/DirectoryCertificateSource;-><init>(Ljava/io/File;)V
+HSPLandroid/security/net/config/DirectoryCertificateSource;->findAllByIssuerAndSignature(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
+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;->isCertMarkedAsRemoved(Ljava/lang/String;)Z
+HSPLandroid/security/net/config/DirectoryCertificateSource;->readCertificate(Ljava/lang/String;)Ljava/security/cert/X509Certificate;
+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>(ZII)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;
+HSPLandroid/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
+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;
+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;)V
+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(II)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/NetworkSecurityConfigProvider;-><init>()V
+HSPLandroid/security/net/config/NetworkSecurityConfigProvider;->install(Landroid/content/Context;)V
+HSPLandroid/security/net/config/NetworkSecurityTrustManager;-><init>(Landroid/security/net/config/NetworkSecurityConfig;)V
+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/PinSet;-><init>(Ljava/util/Set;J)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;->-get0()Landroid/security/net/config/SystemCertificateSource;
+HSPLandroid/security/net/config/SystemCertificateSource;-><init>()V
+HSPLandroid/security/net/config/SystemCertificateSource;-><init>(Landroid/security/net/config/SystemCertificateSource;)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;
+HSPLandroid/security/net/config/SystemCertificateSource;->getInstance()Landroid/security/net/config/SystemCertificateSource;
+HSPLandroid/security/net/config/SystemCertificateSource;->isCertMarkedAsRemoved(Ljava/lang/String;)Z
+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;->-get0()Landroid/security/net/config/UserCertificateSource;
+HSPLandroid/security/net/config/UserCertificateSource;-><init>()V
+HSPLandroid/security/net/config/UserCertificateSource;-><init>(Landroid/security/net/config/UserCertificateSource;)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/UserCertificateSource;->getInstance()Landroid/security/net/config/UserCertificateSource;
+HSPLandroid/security/net/config/XmlConfigSource;-><init>(Landroid/content/Context;IZII)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;
+HSPLandroid/security/net/config/XmlConfigSource;->parseCertificatesEntry(Landroid/content/res/XmlResourceParser;Z)Landroid/security/net/config/CertificatesEntryRef;
+HSPLandroid/security/net/config/XmlConfigSource;->parseConfigEntry(Landroid/content/res/XmlResourceParser;Ljava/util/Set;Landroid/security/net/config/NetworkSecurityConfig$Builder;I)Ljava/util/List;
+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;
+HSPLandroid/service/dreams/IDreamManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/service/dreams/IDreamManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/dreams/IDreamManager;
+HSPLandroid/service/dreams/IDreamManager;->awaken()V
+HSPLandroid/service/dreams/IDreamManager;->dream()V
+HSPLandroid/service/dreams/IDreamManager;->finishSelf(Landroid/os/IBinder;Z)V
+HSPLandroid/service/dreams/IDreamManager;->getDefaultDreamComponent()Landroid/content/ComponentName;
+HSPLandroid/service/dreams/IDreamManager;->getDreamComponents()[Landroid/content/ComponentName;
+HSPLandroid/service/dreams/IDreamManager;->isDreaming()Z
+HSPLandroid/service/dreams/IDreamManager;->setDreamComponents([Landroid/content/ComponentName;)V
+HSPLandroid/service/dreams/IDreamManager;->startDozing(Landroid/os/IBinder;II)V
+HSPLandroid/service/dreams/IDreamManager;->stopDozing(Landroid/os/IBinder;)V
+HSPLandroid/service/dreams/IDreamManager;->testDream(Landroid/content/ComponentName;)V
+HSPLandroid/service/notification/Condition$1;-><init>()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;
+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;->isValidId(Landroid/net/Uri;Ljava/lang/String;)Z
+HSPLandroid/service/notification/Condition;->isValidState(I)Z
+HSPLandroid/service/notification/Condition;->newId(Landroid/content/Context;)Landroid/net/Uri$Builder;
+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$H;)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$Provider;)V
+HSPLandroid/service/notification/ConditionProviderService$Provider;->onConnected()V
+HSPLandroid/service/notification/ConditionProviderService;->-get1(Landroid/service/notification/ConditionProviderService;)Landroid/service/notification/ConditionProviderService$H;
+HSPLandroid/service/notification/ConditionProviderService;->-wrap0(Landroid/service/notification/ConditionProviderService;)Z
+HSPLandroid/service/notification/ConditionProviderService;-><init>()V
+HSPLandroid/service/notification/ConditionProviderService;->isBound()Z
+HSPLandroid/service/notification/ConditionProviderService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HSPLandroid/service/notification/ConditionProviderService;->onConnected()V
+HSPLandroid/service/notification/ConditionProviderService;->onSubscribe(Landroid/net/Uri;)V
+HSPLandroid/service/notification/ConditionProviderService;->onUnsubscribe(Landroid/net/Uri;)V
+HSPLandroid/service/notification/IConditionListener$Stub;-><init>()V
+HSPLandroid/service/notification/IConditionListener;->onConditionsReceived([Landroid/service/notification/Condition;)V
+HSPLandroid/service/notification/IConditionProvider$Stub;-><init>()V
+HSPLandroid/service/notification/IConditionProvider$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/service/notification/IConditionProvider;->onConnected()V
+HSPLandroid/service/notification/IConditionProvider;->onSubscribe(Landroid/net/Uri;)V
+HSPLandroid/service/notification/IConditionProvider;->onUnsubscribe(Landroid/net/Uri;)V
+HSPLandroid/service/notification/INotificationListener$Stub;-><init>()V
+HSPLandroid/service/notification/INotificationListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/service/notification/INotificationListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/service/notification/INotificationListener;->onInterruptionFilterChanged(I)V
+HSPLandroid/service/notification/INotificationListener;->onListenerConnected(Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLandroid/service/notification/INotificationListener;->onListenerHintsChanged(I)V
+HSPLandroid/service/notification/INotificationListener;->onNotificationChannelGroupModification(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V
+HSPLandroid/service/notification/INotificationListener;->onNotificationChannelModification(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
+HSPLandroid/service/notification/INotificationListener;->onNotificationEnqueued(Landroid/service/notification/IStatusBarNotificationHolder;)V
+HSPLandroid/service/notification/INotificationListener;->onNotificationPosted(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLandroid/service/notification/INotificationListener;->onNotificationRankingUpdate(Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLandroid/service/notification/INotificationListener;->onNotificationRemoved(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;I)V
+HSPLandroid/service/notification/INotificationListener;->onNotificationSnoozedUntilContext(Landroid/service/notification/IStatusBarNotificationHolder;Ljava/lang/String;)V
+HSPLandroid/service/notification/NotificationListenerService$MyHandler;-><init>(Landroid/service/notification/NotificationListenerService;Landroid/os/Looper;)V
+HSPLandroid/service/notification/NotificationListenerService$MyHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;-><init>(Landroid/service/notification/NotificationListenerService;)V
+HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onListenerConnected(Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLandroid/service/notification/NotificationListenerService$Ranking;->-wrap0(Landroid/service/notification/NotificationListenerService$Ranking;Ljava/lang/String;IZIIILjava/lang/CharSequence;Ljava/lang/String;Landroid/app/NotificationChannel;Ljava/util/ArrayList;Ljava/util/ArrayList;Z)V
+HSPLandroid/service/notification/NotificationListenerService$Ranking;-><init>()V
+HSPLandroid/service/notification/NotificationListenerService$Ranking;->canShowBadge()Z
+HSPLandroid/service/notification/NotificationListenerService$Ranking;->populate(Ljava/lang/String;IZIIILjava/lang/CharSequence;Ljava/lang/String;Landroid/app/NotificationChannel;Ljava/util/ArrayList;Ljava/util/ArrayList;Z)V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap$1;-><init>()V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;-><init>(Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;-><init>(Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationListenerService$RankingMap;)V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->buildChannelsLocked()V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->buildImportanceExplanationLocked()V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->buildImportanceLocked()V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->buildInterceptedSetLocked()V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->buildOverrideGroupKeys()V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->buildOverridePeopleLocked()V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->buildRanksLocked()V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->buildShowBadgeLocked()V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->buildSnoozeCriteriaLocked()V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->buildSuppressedVisualEffectsLocked()V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->buildVisibilityOverridesLocked()V
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getChannel(Ljava/lang/String;)Landroid/app/NotificationChannel;
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getImportance(Ljava/lang/String;)I
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getImportanceExplanation(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getOverrideGroupKey(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getOverridePeople(Ljava/lang/String;)Ljava/util/ArrayList;
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getRank(Ljava/lang/String;)I
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getRanking(Ljava/lang/String;Landroid/service/notification/NotificationListenerService$Ranking;)Z
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getShowBadge(Ljava/lang/String;)Z
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getSnoozeCriteria(Ljava/lang/String;)Ljava/util/ArrayList;
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getSuppressedVisualEffects(Ljava/lang/String;)I
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getVisibilityOverride(Ljava/lang/String;)I
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;->isIntercepted(Ljava/lang/String;)Z
+HSPLandroid/service/notification/NotificationListenerService;->-get1(Landroid/service/notification/NotificationListenerService;)Z
+HSPLandroid/service/notification/NotificationListenerService;->-get2(Landroid/service/notification/NotificationListenerService;)Landroid/os/Handler;
+HSPLandroid/service/notification/NotificationListenerService;->-get3(Landroid/service/notification/NotificationListenerService;)Ljava/lang/Object;
+HSPLandroid/service/notification/NotificationListenerService;->-set0(Landroid/service/notification/NotificationListenerService;Z)Z
+HSPLandroid/service/notification/NotificationListenerService;-><init>()V
+HSPLandroid/service/notification/NotificationListenerService;->applyUpdateLocked(Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLandroid/service/notification/NotificationListenerService;->attachBaseContext(Landroid/content/Context;)V
+HSPLandroid/service/notification/NotificationListenerService;->cleanUpNotificationList(Landroid/content/pm/ParceledListSlice;)[Landroid/service/notification/StatusBarNotification;
+HSPLandroid/service/notification/NotificationListenerService;->createLegacyIconExtras(Landroid/app/Notification;)V
+HSPLandroid/service/notification/NotificationListenerService;->getActiveNotifications()[Landroid/service/notification/StatusBarNotification;
+HSPLandroid/service/notification/NotificationListenerService;->getActiveNotifications([Ljava/lang/String;I)[Landroid/service/notification/StatusBarNotification;
+HSPLandroid/service/notification/NotificationListenerService;->getContext()Landroid/content/Context;
+HSPLandroid/service/notification/NotificationListenerService;->getCurrentRanking()Landroid/service/notification/NotificationListenerService$RankingMap;
+HSPLandroid/service/notification/NotificationListenerService;->getNotificationInterface()Landroid/app/INotificationManager;
+HSPLandroid/service/notification/NotificationListenerService;->isBound()Z
+HSPLandroid/service/notification/NotificationListenerService;->maybePopulateRemoteViews(Landroid/app/Notification;)V
+HSPLandroid/service/notification/NotificationListenerService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HSPLandroid/service/notification/NotificationListenerService;->onDestroy()V
+HSPLandroid/service/notification/NotificationListenerService;->onListenerConnected()V
+HSPLandroid/service/notification/NotificationListenerService;->onListenerDisconnected()V
+HSPLandroid/service/notification/NotificationListenerService;->registerAsSystemService(Landroid/content/Context;Landroid/content/ComponentName;I)V
+HSPLandroid/service/notification/NotificationListenerService;->requestRebind(Landroid/content/ComponentName;)V
+HSPLandroid/service/notification/NotificationListenerService;->requestUnbind()V
+HSPLandroid/service/notification/NotificationRankingUpdate$1;-><init>()V
+HSPLandroid/service/notification/NotificationRankingUpdate$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/NotificationRankingUpdate;
+HSPLandroid/service/notification/NotificationRankingUpdate$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/service/notification/NotificationRankingUpdate;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/service/notification/NotificationRankingUpdate;->getChannels()Landroid/os/Bundle;
+HSPLandroid/service/notification/NotificationRankingUpdate;->getImportance()[I
+HSPLandroid/service/notification/NotificationRankingUpdate;->getImportanceExplanation()Landroid/os/Bundle;
+HSPLandroid/service/notification/NotificationRankingUpdate;->getInterceptedKeys()[Ljava/lang/String;
+HSPLandroid/service/notification/NotificationRankingUpdate;->getOrderedKeys()[Ljava/lang/String;
+HSPLandroid/service/notification/NotificationRankingUpdate;->getOverrideGroupKeys()Landroid/os/Bundle;
+HSPLandroid/service/notification/NotificationRankingUpdate;->getOverridePeople()Landroid/os/Bundle;
+HSPLandroid/service/notification/NotificationRankingUpdate;->getShowBadge()Landroid/os/Bundle;
+HSPLandroid/service/notification/NotificationRankingUpdate;->getSnoozeCriteria()Landroid/os/Bundle;
+HSPLandroid/service/notification/NotificationRankingUpdate;->getSuppressedVisualEffects()Landroid/os/Bundle;
+HSPLandroid/service/notification/NotificationRankingUpdate;->getVisibilityOverrides()Landroid/os/Bundle;
+HSPLandroid/service/notification/StatusBarNotification$1;-><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;->getKey()Ljava/lang/String;
+HSPLandroid/service/notification/StatusBarNotification;->getNotification()Landroid/app/Notification;
+HSPLandroid/service/notification/StatusBarNotification;->groupKey()Ljava/lang/String;
+HSPLandroid/service/notification/StatusBarNotification;->key()Ljava/lang/String;
+HSPLandroid/service/notification/ZenModeConfig$1;-><init>()V
+HSPLandroid/service/notification/ZenModeConfig$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/ZenModeConfig;
+HSPLandroid/service/notification/ZenModeConfig$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/service/notification/ZenModeConfig$ZenRule$1;-><init>()V
+HSPLandroid/service/notification/ZenModeConfig$ZenRule$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/ZenModeConfig$ZenRule;
+HSPLandroid/service/notification/ZenModeConfig$ZenRule$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/service/notification/ZenModeConfig$ZenRule;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/service/notification/ZenModeConfig$ZenRule;->isAutomaticActive()Z
+HSPLandroid/service/notification/ZenModeConfig;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/service/notification/ZenModeConfig;->generateMinuteBuckets()[I
+HSPLandroid/service/notification/ZenModeConfig;->getConditionLine(Landroid/content/Context;Landroid/service/notification/ZenModeConfig;IZZ)Ljava/lang/String;
+HSPLandroid/service/notification/ZenModeConfig;->getConditionSummary(Landroid/content/Context;Landroid/service/notification/ZenModeConfig;IZ)Ljava/lang/String;
+HSPLandroid/service/notification/ZenModeConfig;->getFormattedTime(Landroid/content/Context;JZI)Ljava/lang/CharSequence;
+HSPLandroid/service/notification/ZenModeConfig;->isToday(J)Z
+HSPLandroid/service/notification/ZenModeConfig;->toCountdownConditionId(JZ)Landroid/net/Uri;
+HSPLandroid/service/notification/ZenModeConfig;->toTimeCondition(Landroid/content/Context;II)Landroid/service/notification/Condition;
+HSPLandroid/service/notification/ZenModeConfig;->toTimeCondition(Landroid/content/Context;IIZ)Landroid/service/notification/Condition;
+HSPLandroid/service/notification/ZenModeConfig;->toTimeCondition(Landroid/content/Context;JIIZ)Landroid/service/notification/Condition;
+HSPLandroid/service/notification/ZenModeConfig;->tryParseCountdownConditionId(Landroid/net/Uri;)J
+HSPLandroid/service/quicksettings/IQSService$Stub;-><init>()V
+HSPLandroid/service/quicksettings/IQSService;->getTile(Landroid/os/IBinder;)Landroid/service/quicksettings/Tile;
+HSPLandroid/service/quicksettings/IQSService;->isLocked()Z
+HSPLandroid/service/quicksettings/IQSService;->isSecure()Z
+HSPLandroid/service/quicksettings/IQSService;->onDialogHidden(Landroid/os/IBinder;)V
+HSPLandroid/service/quicksettings/IQSService;->onShowDialog(Landroid/os/IBinder;)V
+HSPLandroid/service/quicksettings/IQSService;->onStartActivity(Landroid/os/IBinder;)V
+HSPLandroid/service/quicksettings/IQSService;->onStartSuccessful(Landroid/os/IBinder;)V
+HSPLandroid/service/quicksettings/IQSService;->startUnlockAndRun(Landroid/os/IBinder;)V
+HSPLandroid/service/quicksettings/IQSService;->updateQsTile(Landroid/service/quicksettings/Tile;Landroid/os/IBinder;)V
+HSPLandroid/service/quicksettings/IQSService;->updateStatusIcon(Landroid/os/IBinder;Landroid/graphics/drawable/Icon;Ljava/lang/String;)V
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$Callback;-><init>()V
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$Callback;->onAvailabilityChanged(I)V
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$Callback;->onDetected(Landroid/service/voice/AlwaysOnHotwordDetector$EventPayload;)V
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$Callback;->onError()V
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$Callback;->onRecognitionPaused()V
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$Callback;->onRecognitionResumed()V
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$MyHandler;-><init>(Landroid/service/voice/AlwaysOnHotwordDetector;)V
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$MyHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$RefreshAvailabiltyTask;-><init>(Landroid/service/voice/AlwaysOnHotwordDetector;)V
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$RefreshAvailabiltyTask;->doInBackground([Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$RefreshAvailabiltyTask;->doInBackground([Ljava/lang/Void;)Ljava/lang/Void;
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$RefreshAvailabiltyTask;->internalGetInitialAvailability()I
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$RefreshAvailabiltyTask;->internalGetIsEnrolled(ILjava/util/Locale;)Z
+HSPLandroid/service/voice/AlwaysOnHotwordDetector$SoundTriggerListener;-><init>(Landroid/os/Handler;)V
+HSPLandroid/service/voice/AlwaysOnHotwordDetector;->-get0(Landroid/service/voice/AlwaysOnHotwordDetector;)I
+HSPLandroid/service/voice/AlwaysOnHotwordDetector;->-get1(Landroid/service/voice/AlwaysOnHotwordDetector;)Landroid/service/voice/AlwaysOnHotwordDetector$Callback;
+HSPLandroid/service/voice/AlwaysOnHotwordDetector;->-get2(Landroid/service/voice/AlwaysOnHotwordDetector;)Landroid/hardware/soundtrigger/KeyphraseMetadata;
+HSPLandroid/service/voice/AlwaysOnHotwordDetector;->-get3(Landroid/service/voice/AlwaysOnHotwordDetector;)Ljava/util/Locale;
+HSPLandroid/service/voice/AlwaysOnHotwordDetector;->-get4(Landroid/service/voice/AlwaysOnHotwordDetector;)Ljava/lang/Object;
+HSPLandroid/service/voice/AlwaysOnHotwordDetector;->-get5(Landroid/service/voice/AlwaysOnHotwordDetector;)Lcom/android/internal/app/IVoiceInteractionManagerService;
+HSPLandroid/service/voice/AlwaysOnHotwordDetector;->-get6(Landroid/service/voice/AlwaysOnHotwordDetector;)Landroid/service/voice/IVoiceInteractionService;
+HSPLandroid/service/voice/AlwaysOnHotwordDetector;->-set0(Landroid/service/voice/AlwaysOnHotwordDetector;I)I
+HSPLandroid/service/voice/AlwaysOnHotwordDetector;->-wrap0(Landroid/service/voice/AlwaysOnHotwordDetector;)V
+HSPLandroid/service/voice/AlwaysOnHotwordDetector;-><init>(Ljava/lang/String;Ljava/util/Locale;Landroid/service/voice/AlwaysOnHotwordDetector$Callback;Landroid/hardware/soundtrigger/KeyphraseEnrollmentInfo;Landroid/service/voice/IVoiceInteractionService;Lcom/android/internal/app/IVoiceInteractionManagerService;)V
+HSPLandroid/service/voice/AlwaysOnHotwordDetector;->getSupportedRecognitionModes()I
+HSPLandroid/service/voice/AlwaysOnHotwordDetector;->getSupportedRecognitionModesLocked()I
+HSPLandroid/service/voice/AlwaysOnHotwordDetector;->notifyStateChangedLocked()V
+HSPLandroid/service/voice/IVoiceInteractionService$Stub;-><init>()V
+HSPLandroid/service/voice/IVoiceInteractionService$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/service/voice/IVoiceInteractionService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/service/voice/IVoiceInteractionService;->launchVoiceAssistFromKeyguard()V
+HSPLandroid/service/voice/IVoiceInteractionService;->ready()V
+HSPLandroid/service/voice/IVoiceInteractionService;->shutdown()V
+HSPLandroid/service/voice/IVoiceInteractionService;->soundModelsChanged()V
+HSPLandroid/service/voice/VoiceInteractionService$1;-><init>(Landroid/service/voice/VoiceInteractionService;)V
+HSPLandroid/service/voice/VoiceInteractionService$1;->ready()V
+HSPLandroid/service/voice/VoiceInteractionService$MyHandler;-><init>(Landroid/service/voice/VoiceInteractionService;)V
+HSPLandroid/service/voice/VoiceInteractionService$MyHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/service/voice/VoiceInteractionService;-><init>()V
+HSPLandroid/service/voice/VoiceInteractionService;->createAlwaysOnHotwordDetector(Ljava/lang/String;Ljava/util/Locale;Landroid/service/voice/AlwaysOnHotwordDetector$Callback;)Landroid/service/voice/AlwaysOnHotwordDetector;
+HSPLandroid/service/voice/VoiceInteractionService;->isActiveService(Landroid/content/Context;Landroid/content/ComponentName;)Z
+HSPLandroid/service/voice/VoiceInteractionService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HSPLandroid/service/voice/VoiceInteractionService;->onCreate()V
+HSPLandroid/service/voice/VoiceInteractionService;->onReady()V
+HSPLandroid/service/voice/VoiceInteractionService;->safelyShutdownHotwordDetector()V
+HSPLandroid/service/vr/IPersistentVrStateCallbacks$Stub;-><init>()V
+HSPLandroid/service/vr/IVrManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/service/vr/IVrManager$Stub$Proxy;->getVrModeState()Z
+HSPLandroid/service/vr/IVrManager$Stub$Proxy;->registerListener(Landroid/service/vr/IVrStateCallbacks;)V
+HSPLandroid/service/vr/IVrManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/vr/IVrManager;
+HSPLandroid/service/vr/IVrManager;->getPersistentVrModeEnabled()Z
+HSPLandroid/service/vr/IVrManager;->getVr2dDisplayId()I
+HSPLandroid/service/vr/IVrManager;->getVrModeState()Z
+HSPLandroid/service/vr/IVrManager;->registerListener(Landroid/service/vr/IVrStateCallbacks;)V
+HSPLandroid/service/vr/IVrManager;->registerPersistentVrStateListener(Landroid/service/vr/IPersistentVrStateCallbacks;)V
+HSPLandroid/service/vr/IVrManager;->setPersistentVrModeEnabled(Z)V
+HSPLandroid/service/vr/IVrManager;->setVr2dDisplayProperties(Landroid/app/Vr2dDisplayProperties;)V
+HSPLandroid/service/vr/IVrManager;->unregisterListener(Landroid/service/vr/IVrStateCallbacks;)V
+HSPLandroid/service/vr/IVrManager;->unregisterPersistentVrStateListener(Landroid/service/vr/IPersistentVrStateCallbacks;)V
+HSPLandroid/service/vr/IVrStateCallbacks$Stub;-><init>()V
+HSPLandroid/service/vr/IVrStateCallbacks$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/service/vr/IVrStateCallbacks;->onVrStateChanged(Z)V
+HSPLandroid/service/wallpaper/-$Lambda$htiXs5zQinBXs3seMVLgh3fgmis$1;-><init>(Ljava/lang/Object;)V
+HSPLandroid/service/wallpaper/-$Lambda$htiXs5zQinBXs3seMVLgh3fgmis;-><init>()V
+HSPLandroid/service/wallpaper/IWallpaperConnection$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/service/wallpaper/IWallpaperConnection$Stub$Proxy;->attachEngine(Landroid/service/wallpaper/IWallpaperEngine;)V
+HSPLandroid/service/wallpaper/IWallpaperConnection$Stub$Proxy;->engineShown(Landroid/service/wallpaper/IWallpaperEngine;)V
+HSPLandroid/service/wallpaper/IWallpaperConnection$Stub$Proxy;->onWallpaperColorsChanged(Landroid/app/WallpaperColors;)V
+HSPLandroid/service/wallpaper/IWallpaperConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/wallpaper/IWallpaperConnection;
+HSPLandroid/service/wallpaper/IWallpaperConnection;->attachEngine(Landroid/service/wallpaper/IWallpaperEngine;)V
+HSPLandroid/service/wallpaper/IWallpaperConnection;->engineShown(Landroid/service/wallpaper/IWallpaperEngine;)V
+HSPLandroid/service/wallpaper/IWallpaperConnection;->onWallpaperColorsChanged(Landroid/app/WallpaperColors;)V
+HSPLandroid/service/wallpaper/IWallpaperConnection;->setWallpaper(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/service/wallpaper/IWallpaperEngine$Stub;-><init>()V
+HSPLandroid/service/wallpaper/IWallpaperEngine$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/service/wallpaper/IWallpaperEngine$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/service/wallpaper/IWallpaperEngine;->destroy()V
+HSPLandroid/service/wallpaper/IWallpaperEngine;->dispatchPointer(Landroid/view/MotionEvent;)V
+HSPLandroid/service/wallpaper/IWallpaperEngine;->dispatchWallpaperCommand(Ljava/lang/String;IIILandroid/os/Bundle;)V
+HSPLandroid/service/wallpaper/IWallpaperEngine;->requestWallpaperColors()V
+HSPLandroid/service/wallpaper/IWallpaperEngine;->setDesiredSize(II)V
+HSPLandroid/service/wallpaper/IWallpaperEngine;->setDisplayPadding(Landroid/graphics/Rect;)V
+HSPLandroid/service/wallpaper/IWallpaperEngine;->setVisibility(Z)V
+HSPLandroid/service/wallpaper/IWallpaperService$Stub;-><init>()V
+HSPLandroid/service/wallpaper/IWallpaperService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/service/wallpaper/IWallpaperService;->attach(Landroid/service/wallpaper/IWallpaperConnection;Landroid/os/IBinder;IZIILandroid/graphics/Rect;)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine$1;-><init>(Landroid/service/wallpaper/WallpaperService$Engine;)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine$2;-><init>(Landroid/service/wallpaper/WallpaperService$Engine;)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine$2;->dispatchWallpaperOffsets(FFFFZ)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine$3;-><init>(Landroid/service/wallpaper/WallpaperService$Engine;)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine$WallpaperInputEventReceiver;-><init>(Landroid/service/wallpaper/WallpaperService$Engine;Landroid/view/InputChannel;Landroid/os/Looper;)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine;-><init>(Landroid/service/wallpaper/WallpaperService;)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine;-><init>(Landroid/service/wallpaper/WallpaperService;Ljava/util/function/Supplier;Landroid/os/Handler;)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine;->attach(Landroid/service/wallpaper/WallpaperService$IWallpaperEngineWrapper;)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine;->doOffsetsChanged(Z)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine;->getSurfaceHolder()Landroid/view/SurfaceHolder;
+HSPLandroid/service/wallpaper/WallpaperService$Engine;->isPreview()Z
+HSPLandroid/service/wallpaper/WallpaperService$Engine;->onApplyWindowInsets(Landroid/view/WindowInsets;)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine;->onCreate(Landroid/view/SurfaceHolder;)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine;->onSurfaceChanged(Landroid/view/SurfaceHolder;III)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine;->onSurfaceCreated(Landroid/view/SurfaceHolder;)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine;->setOffsetNotificationsEnabled(Z)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine;->setTouchEventsEnabled(Z)V
+HSPLandroid/service/wallpaper/WallpaperService$Engine;->updateSurface(ZZZ)V
+HSPLandroid/service/wallpaper/WallpaperService$IWallpaperEngineWrapper;->-get0(Landroid/service/wallpaper/WallpaperService$IWallpaperEngineWrapper;)Lcom/android/internal/os/HandlerCaller;
+HSPLandroid/service/wallpaper/WallpaperService$IWallpaperEngineWrapper;-><init>(Landroid/service/wallpaper/WallpaperService;Landroid/service/wallpaper/WallpaperService;Landroid/service/wallpaper/IWallpaperConnection;Landroid/os/IBinder;IZIILandroid/graphics/Rect;)V
+HSPLandroid/service/wallpaper/WallpaperService$IWallpaperEngineWrapper;->executeMessage(Landroid/os/Message;)V
+HSPLandroid/service/wallpaper/WallpaperService$IWallpaperEngineWrapper;->reportShown()V
+HSPLandroid/service/wallpaper/WallpaperService$IWallpaperEngineWrapper;->requestWallpaperColors()V
+HSPLandroid/service/wallpaper/WallpaperService$IWallpaperServiceWrapper;-><init>(Landroid/service/wallpaper/WallpaperService;Landroid/service/wallpaper/WallpaperService;)V
+HSPLandroid/service/wallpaper/WallpaperService$IWallpaperServiceWrapper;->attach(Landroid/service/wallpaper/IWallpaperConnection;Landroid/os/IBinder;IZIILandroid/graphics/Rect;)V
+HSPLandroid/service/wallpaper/WallpaperService;->-get0(Landroid/service/wallpaper/WallpaperService;)Ljava/util/ArrayList;
+HSPLandroid/service/wallpaper/WallpaperService;-><init>()V
+HSPLandroid/service/wallpaper/WallpaperService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HSPLandroid/service/wallpaper/WallpaperService;->onCreate()V
+HSPLandroid/service/wallpaper/WallpaperService;->onCreateEngine()Landroid/service/wallpaper/WallpaperService$Engine;
+HSPLandroid/speech/SpeechRecognizer;->isRecognitionAvailable(Landroid/content/Context;)Z
+HSPLandroid/speech/tts/AudioPlaybackHandler$MessageLoop;-><init>(Landroid/speech/tts/AudioPlaybackHandler;)V
+HSPLandroid/speech/tts/AudioPlaybackHandler$MessageLoop;-><init>(Landroid/speech/tts/AudioPlaybackHandler;Landroid/speech/tts/AudioPlaybackHandler$MessageLoop;)V
+HSPLandroid/speech/tts/AudioPlaybackHandler$MessageLoop;->run()V
+HSPLandroid/speech/tts/AudioPlaybackHandler;->-get0(Landroid/speech/tts/AudioPlaybackHandler;)Ljava/util/concurrent/LinkedBlockingQueue;
+HSPLandroid/speech/tts/AudioPlaybackHandler;-><init>()V
+HSPLandroid/speech/tts/AudioPlaybackHandler;->start()V
+HSPLandroid/speech/tts/ITextToSpeechCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/speech/tts/ITextToSpeechCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HSPLandroid/speech/tts/ITextToSpeechCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/speech/tts/ITextToSpeechCallback;
+HSPLandroid/speech/tts/ITextToSpeechCallback;->onAudioAvailable(Ljava/lang/String;[B)V
+HSPLandroid/speech/tts/ITextToSpeechCallback;->onBeginSynthesis(Ljava/lang/String;III)V
+HSPLandroid/speech/tts/ITextToSpeechCallback;->onError(Ljava/lang/String;I)V
+HSPLandroid/speech/tts/ITextToSpeechCallback;->onRangeStart(Ljava/lang/String;III)V
+HSPLandroid/speech/tts/ITextToSpeechCallback;->onStart(Ljava/lang/String;)V
+HSPLandroid/speech/tts/ITextToSpeechCallback;->onStop(Ljava/lang/String;Z)V
+HSPLandroid/speech/tts/ITextToSpeechCallback;->onSuccess(Ljava/lang/String;)V
+HSPLandroid/speech/tts/ITextToSpeechService$Stub;-><init>()V
+HSPLandroid/speech/tts/ITextToSpeechService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/speech/tts/ITextToSpeechService;->getClientDefaultLanguage()[Ljava/lang/String;
+HSPLandroid/speech/tts/ITextToSpeechService;->getDefaultVoiceNameFor(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/speech/tts/ITextToSpeechService;->getFeaturesForLanguage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/speech/tts/ITextToSpeechService;->getLanguage()[Ljava/lang/String;
+HSPLandroid/speech/tts/ITextToSpeechService;->getVoices()Ljava/util/List;
+HSPLandroid/speech/tts/ITextToSpeechService;->isLanguageAvailable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/speech/tts/ITextToSpeechService;->isSpeaking()Z
+HSPLandroid/speech/tts/ITextToSpeechService;->loadLanguage(Landroid/os/IBinder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/speech/tts/ITextToSpeechService;->loadVoice(Landroid/os/IBinder;Ljava/lang/String;)I
+HSPLandroid/speech/tts/ITextToSpeechService;->playAudio(Landroid/os/IBinder;Landroid/net/Uri;ILandroid/os/Bundle;Ljava/lang/String;)I
+HSPLandroid/speech/tts/ITextToSpeechService;->playSilence(Landroid/os/IBinder;JILjava/lang/String;)I
+HSPLandroid/speech/tts/ITextToSpeechService;->setCallback(Landroid/os/IBinder;Landroid/speech/tts/ITextToSpeechCallback;)V
+HSPLandroid/speech/tts/ITextToSpeechService;->speak(Landroid/os/IBinder;Ljava/lang/CharSequence;ILandroid/os/Bundle;Ljava/lang/String;)I
+HSPLandroid/speech/tts/ITextToSpeechService;->stop(Landroid/os/IBinder;)I
+HSPLandroid/speech/tts/ITextToSpeechService;->synthesizeToFileDescriptor(Landroid/os/IBinder;Ljava/lang/CharSequence;Landroid/os/ParcelFileDescriptor;Landroid/os/Bundle;Ljava/lang/String;)I
+HSPLandroid/speech/tts/TextToSpeechService$1;-><init>(Landroid/speech/tts/TextToSpeechService;)V
+HSPLandroid/speech/tts/TextToSpeechService$1;->checkNonNull([Ljava/lang/Object;)Z
+HSPLandroid/speech/tts/TextToSpeechService$1;->getClientDefaultLanguage()[Ljava/lang/String;
+HSPLandroid/speech/tts/TextToSpeechService$1;->getDefaultVoiceNameFor(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/speech/tts/TextToSpeechService$1;->setCallback(Landroid/os/IBinder;Landroid/speech/tts/ITextToSpeechCallback;)V
+HSPLandroid/speech/tts/TextToSpeechService$CallbackMap;-><init>(Landroid/speech/tts/TextToSpeechService;)V
+HSPLandroid/speech/tts/TextToSpeechService$CallbackMap;-><init>(Landroid/speech/tts/TextToSpeechService;Landroid/speech/tts/TextToSpeechService$CallbackMap;)V
+HSPLandroid/speech/tts/TextToSpeechService$CallbackMap;->setCallback(Landroid/os/IBinder;Landroid/speech/tts/ITextToSpeechCallback;)V
+HSPLandroid/speech/tts/TextToSpeechService$SynthHandler;-><init>(Landroid/speech/tts/TextToSpeechService;Landroid/os/Looper;)V
+HSPLandroid/speech/tts/TextToSpeechService$SynthThread;-><init>(Landroid/speech/tts/TextToSpeechService;)V
+HSPLandroid/speech/tts/TextToSpeechService$SynthThread;->onLooperPrepared()V
+HSPLandroid/speech/tts/TextToSpeechService$SynthThread;->queueIdle()Z
+HSPLandroid/speech/tts/TextToSpeechService;->-get1(Landroid/speech/tts/TextToSpeechService;)Landroid/speech/tts/TextToSpeechService$CallbackMap;
+HSPLandroid/speech/tts/TextToSpeechService;->-wrap2(Landroid/speech/tts/TextToSpeechService;)[Ljava/lang/String;
+HSPLandroid/speech/tts/TextToSpeechService;-><init>()V
+HSPLandroid/speech/tts/TextToSpeechService;->getSettingsLocale()[Ljava/lang/String;
+HSPLandroid/speech/tts/TextToSpeechService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HSPLandroid/speech/tts/TextToSpeechService;->onCreate()V
+HSPLandroid/speech/tts/TextToSpeechService;->onGetLanguage()[Ljava/lang/String;
+HSPLandroid/speech/tts/TextToSpeechService;->onIsLanguageAvailable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/speech/tts/TextToSpeechService;->onLoadLanguage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/speech/tts/TextToSpeechService;->onStop()V
+HSPLandroid/speech/tts/TextToSpeechService;->onSynthesizeText(Landroid/speech/tts/SynthesisRequest;Landroid/speech/tts/SynthesisCallback;)V
+HSPLandroid/speech/tts/TtsEngines;-><init>(Landroid/content/Context;)V
+HSPLandroid/speech/tts/TtsEngines;->getLocalePrefForEngine(Ljava/lang/String;)Ljava/util/Locale;
+HSPLandroid/speech/tts/TtsEngines;->getLocalePrefForEngine(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale;
+HSPLandroid/speech/tts/TtsEngines;->parseEnginePrefFromList(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/speech/tts/TtsEngines;->toOldLocaleStringFormat(Ljava/util/Locale;)[Ljava/lang/String;
+HSPLandroid/system/ErrnoException;-><init>(Ljava/lang/String;I)V
+HSPLandroid/system/GaiException;-><init>(Ljava/lang/String;I)V
+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
+HSPLandroid/system/Os;->dup(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;
+HSPLandroid/system/Os;->getenv(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/system/Os;->getpid()I
+HSPLandroid/system/Os;->getrlimit(I)Landroid/system/StructRlimit;
+HSPLandroid/system/Os;->gettid()I
+HSPLandroid/system/Os;->getuid()I
+HSPLandroid/system/Os;->ioctlInt(Ljava/io/FileDescriptor;ILandroid/util/MutableInt;)I
+HSPLandroid/system/Os;->listen(Ljava/io/FileDescriptor;I)V
+HSPLandroid/system/Os;->mkdir(Ljava/lang/String;I)V
+HSPLandroid/system/Os;->open(Ljava/lang/String;II)Ljava/io/FileDescriptor;
+HSPLandroid/system/Os;->poll([Landroid/system/StructPollfd;I)I
+HSPLandroid/system/Os;->prctl(IJJJJ)I
+HSPLandroid/system/Os;->setenv(Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLandroid/system/Os;->socket(III)Ljava/io/FileDescriptor;
+HSPLandroid/system/Os;->stat(Ljava/lang/String;)Landroid/system/StructStat;
+HSPLandroid/system/Os;->statvfs(Ljava/lang/String;)Landroid/system/StructStatVfs;
+HSPLandroid/system/Os;->sysconf(I)J
+HSPLandroid/system/Os;->umask(I)I
+HSPLandroid/system/OsConstants;->S_ISDIR(I)Z
+HSPLandroid/system/StructAddrinfo;-><init>()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/telecom/Log$1;-><init>()V
+HSPLandroid/telecom/Log$1;->doInBackground([Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/telecom/Log$1;->doInBackground([Ljava/lang/Void;)Ljava/lang/Void;
+HSPLandroid/telecom/Log;->-set0(Ljava/security/MessageDigest;)Ljava/security/MessageDigest;
+HSPLandroid/telecom/Log;->buildMessage(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
+HSPLandroid/telecom/Log;->d(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)V
+HSPLandroid/telecom/Log;->encodeHex([B)Ljava/lang/String;
+HSPLandroid/telecom/Log;->getPrefixFromObject(Ljava/lang/Object;)Ljava/lang/String;
+HSPLandroid/telecom/Log;->getSessionId()Ljava/lang/String;
+HSPLandroid/telecom/Log;->i(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)V
+HSPLandroid/telecom/Log;->initMd5Sum()V
+HSPLandroid/telecom/Log;->isLoggable(I)Z
+HSPLandroid/telecom/Log;->pii(Ljava/lang/Object;)Ljava/lang/String;
+HSPLandroid/telecom/Log;->secureHash([B)Ljava/lang/String;
+HSPLandroid/telecom/Log;->v(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)V
+HSPLandroid/telecom/PhoneAccount$1;-><init>()V
+HSPLandroid/telecom/PhoneAccount$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telecom/PhoneAccount;
+HSPLandroid/telecom/PhoneAccount$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+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;
+HSPLandroid/telecom/PhoneAccount$Builder;->setShortDescription(Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;
+HSPLandroid/telecom/PhoneAccount$Builder;->setSubscriptionAddress(Landroid/net/Uri;)Landroid/telecom/PhoneAccount$Builder;
+HSPLandroid/telecom/PhoneAccount$Builder;->setSupportedUriSchemes(Ljava/util/List;)Landroid/telecom/PhoneAccount$Builder;
+HSPLandroid/telecom/PhoneAccount;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telecom/PhoneAccount;-><init>(Landroid/os/Parcel;Landroid/telecom/PhoneAccount;)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;)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;
+HSPLandroid/telecom/PhoneAccount;->getAccountHandle()Landroid/telecom/PhoneAccountHandle;
+HSPLandroid/telecom/PhoneAccount;->getExtras()Landroid/os/Bundle;
+HSPLandroid/telecom/PhoneAccount;->hasAudioRoutes(I)Z
+HSPLandroid/telecom/PhoneAccount;->hasCapabilities(I)Z
+HSPLandroid/telecom/PhoneAccount;->toString()Ljava/lang/String;
+HSPLandroid/telecom/PhoneAccount;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/telecom/PhoneAccountHandle$1;-><init>()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
+HSPLandroid/telecom/PhoneAccountHandle;-><init>(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/UserHandle;)V
+HSPLandroid/telecom/PhoneAccountHandle;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telecom/PhoneAccountHandle;-><init>(Landroid/os/Parcel;Landroid/telecom/PhoneAccountHandle;)V
+HSPLandroid/telecom/PhoneAccountHandle;->checkParameters(Landroid/content/ComponentName;Landroid/os/UserHandle;)V
+HSPLandroid/telecom/PhoneAccountHandle;->equals(Ljava/lang/Object;)Z
+HSPLandroid/telecom/PhoneAccountHandle;->getComponentName()Landroid/content/ComponentName;
+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;->from(Landroid/content/Context;)Landroid/telecom/TelecomManager;
+HSPLandroid/telecom/TelecomManager;->getCallCapablePhoneAccounts()Ljava/util/List;
+HSPLandroid/telecom/TelecomManager;->getCallCapablePhoneAccounts(Z)Ljava/util/List;
+HSPLandroid/telecom/TelecomManager;->getCurrentTtyMode()I
+HSPLandroid/telecom/TelecomManager;->getDefaultDialerPackage()Ljava/lang/String;
+HSPLandroid/telecom/TelecomManager;->getDefaultOutgoingPhoneAccount(Ljava/lang/String;)Landroid/telecom/PhoneAccountHandle;
+HSPLandroid/telecom/TelecomManager;->getPhoneAccount(Landroid/telecom/PhoneAccountHandle;)Landroid/telecom/PhoneAccount;
+HSPLandroid/telecom/TelecomManager;->getSimCallManager()Landroid/telecom/PhoneAccountHandle;
+HSPLandroid/telecom/TelecomManager;->getTelecomService()Lcom/android/internal/telecom/ITelecomService;
+HSPLandroid/telecom/TelecomManager;->getUserSelectedOutgoingPhoneAccount()Landroid/telecom/PhoneAccountHandle;
+HSPLandroid/telecom/TelecomManager;->isInCall()Z
+HSPLandroid/telecom/TelecomManager;->isServiceConnected()Z
+HSPLandroid/telecom/TelecomManager;->registerPhoneAccount(Landroid/telecom/PhoneAccount;)V
+HSPLandroid/telephony/CarrierConfigManager;-><init>()V
+HSPLandroid/telephony/CarrierConfigManager;->getConfig()Landroid/os/PersistableBundle;
+HSPLandroid/telephony/CarrierConfigManager;->getConfigForSubId(I)Landroid/os/PersistableBundle;
+HSPLandroid/telephony/CarrierConfigManager;->getDefaultConfig()Landroid/os/PersistableBundle;
+HSPLandroid/telephony/CarrierConfigManager;->getICarrierConfigLoader()Lcom/android/internal/telephony/ICarrierConfigLoader;
+HSPLandroid/telephony/CarrierConfigManager;->updateConfigForPhoneId(ILjava/lang/String;)V
+HSPLandroid/telephony/CellLocation;-><init>()V
+HSPLandroid/telephony/CellLocation;->fillInNotifierBundle(Landroid/os/Bundle;)V
+HSPLandroid/telephony/CellLocation;->isEmpty()Z
+HSPLandroid/telephony/CellLocation;->setStateInvalid()V
+HSPLandroid/telephony/ClientRequestStats$1;-><init>()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
+HSPLandroid/telephony/ClientRequestStats;->updateRequestHistograms(II)V
+HSPLandroid/telephony/PhoneNumberFormattingTextWatcher;-><init>(Ljava/lang/String;)V
+HSPLandroid/telephony/PhoneStateListener$1;-><init>(Landroid/telephony/PhoneStateListener;Landroid/os/Looper;)V
+HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub;-><init>(Landroid/telephony/PhoneStateListener;)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/Rlog;->d(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/telephony/Rlog;->e(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/telephony/Rlog;->i(Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/telephony/Rlog;->isLoggable(Ljava/lang/String;I)Z
+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;-><init>()V
+HSPLandroid/telephony/ServiceState;-><init>()V
+HSPLandroid/telephony/ServiceState;->equals(Ljava/lang/Object;)Z
+HSPLandroid/telephony/ServiceState;->equalsHandlesNulls(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroid/telephony/ServiceState;->getCdmaDefaultRoamingIndicator()I
+HSPLandroid/telephony/ServiceState;->getCdmaEriIconIndex()I
+HSPLandroid/telephony/ServiceState;->getCdmaEriIconMode()I
+HSPLandroid/telephony/ServiceState;->getCdmaRoamingIndicator()I
+HSPLandroid/telephony/ServiceState;->getCssIndicator()I
+HSPLandroid/telephony/ServiceState;->getDataOperatorAlphaLong()Ljava/lang/String;
+HSPLandroid/telephony/ServiceState;->getDataOperatorAlphaShort()Ljava/lang/String;
+HSPLandroid/telephony/ServiceState;->getDataOperatorNumeric()Ljava/lang/String;
+HSPLandroid/telephony/ServiceState;->getDataRegState()I
+HSPLandroid/telephony/ServiceState;->getDataRoaming()Z
+HSPLandroid/telephony/ServiceState;->getDataRoamingFromRegistration()Z
+HSPLandroid/telephony/ServiceState;->getDataRoamingType()I
+HSPLandroid/telephony/ServiceState;->getIsManualSelection()Z
+HSPLandroid/telephony/ServiceState;->getLteEarfcnRsrpBoost()I
+HSPLandroid/telephony/ServiceState;->getNetworkId()I
+HSPLandroid/telephony/ServiceState;->getOperatorAlpha()Ljava/lang/String;
+HSPLandroid/telephony/ServiceState;->getOperatorNumeric()Ljava/lang/String;
+HSPLandroid/telephony/ServiceState;->getRilDataRadioTechnology()I
+HSPLandroid/telephony/ServiceState;->getRilVoiceRadioTechnology()I
+HSPLandroid/telephony/ServiceState;->getRoaming()Z
+HSPLandroid/telephony/ServiceState;->getRoamingLogString(I)Ljava/lang/String;
+HSPLandroid/telephony/ServiceState;->getState()I
+HSPLandroid/telephony/ServiceState;->getSystemId()I
+HSPLandroid/telephony/ServiceState;->getVoiceOperatorAlphaLong()Ljava/lang/String;
+HSPLandroid/telephony/ServiceState;->getVoiceOperatorAlphaShort()Ljava/lang/String;
+HSPLandroid/telephony/ServiceState;->getVoiceOperatorNumeric()Ljava/lang/String;
+HSPLandroid/telephony/ServiceState;->getVoiceRegState()I
+HSPLandroid/telephony/ServiceState;->getVoiceRoaming()Z
+HSPLandroid/telephony/ServiceState;->getVoiceRoamingType()I
+HSPLandroid/telephony/ServiceState;->isCdma(I)Z
+HSPLandroid/telephony/ServiceState;->isEmergencyOnly()Z
+HSPLandroid/telephony/ServiceState;->isGsm(I)Z
+HSPLandroid/telephony/ServiceState;->isLte(I)Z
+HSPLandroid/telephony/ServiceState;->isUsingCarrierAggregation()Z
+HSPLandroid/telephony/ServiceState;->mergeServiceStates(Landroid/telephony/ServiceState;Landroid/telephony/ServiceState;)Landroid/telephony/ServiceState;
+HSPLandroid/telephony/ServiceState;->newFromBundle(Landroid/os/Bundle;)Landroid/telephony/ServiceState;
+HSPLandroid/telephony/ServiceState;->rilRadioTechnologyToString(I)Ljava/lang/String;
+HSPLandroid/telephony/ServiceState;->rilServiceStateToString(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;->setCssIndicator(I)V
+HSPLandroid/telephony/ServiceState;->setDataOperatorName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/telephony/ServiceState;->setDataRegState(I)V
+HSPLandroid/telephony/ServiceState;->setDataRoaming(Z)V
+HSPLandroid/telephony/ServiceState;->setDataRoamingFromRegistration(Z)V
+HSPLandroid/telephony/ServiceState;->setEmergencyOnly(Z)V
+HSPLandroid/telephony/ServiceState;->setFromNotifierBundle(Landroid/os/Bundle;)V
+HSPLandroid/telephony/ServiceState;->setIsManualSelection(Z)V
+HSPLandroid/telephony/ServiceState;->setIsUsingCarrierAggregation(Z)V
+HSPLandroid/telephony/ServiceState;->setLteEarfcnRsrpBoost(I)V
+HSPLandroid/telephony/ServiceState;->setNullState(I)V
+HSPLandroid/telephony/ServiceState;->setOperatorName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/telephony/ServiceState;->setRilDataRadioTechnology(I)V
+HSPLandroid/telephony/ServiceState;->setRilVoiceRadioTechnology(I)V
+HSPLandroid/telephony/ServiceState;->setStateOff()V
+HSPLandroid/telephony/ServiceState;->setStateOutOfService()V
+HSPLandroid/telephony/ServiceState;->setSystemAndNetworkId(II)V
+HSPLandroid/telephony/ServiceState;->setVoiceOperatorName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/telephony/ServiceState;->setVoiceRegState(I)V
+HSPLandroid/telephony/ServiceState;->setVoiceRoaming(Z)V
+HSPLandroid/telephony/ServiceState;->toString()Ljava/lang/String;
+HSPLandroid/telephony/ServiceState;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/telephony/SignalStrength$1;-><init>()V
+HSPLandroid/telephony/SignalStrength;-><init>()V
+HSPLandroid/telephony/SignalStrength;-><init>(IIIIIIIIIIIIIZ)V
+HSPLandroid/telephony/SignalStrength;-><init>(Z)V
+HSPLandroid/telephony/SignalStrength;->equals(Ljava/lang/Object;)Z
+HSPLandroid/telephony/SignalStrength;->initialize(IIIIIIIIIIIIIZ)V
+HSPLandroid/telephony/SignalStrength;->setGsm(Z)V
+HSPLandroid/telephony/SignalStrength;->setLteRsrpBoost(I)V
+HSPLandroid/telephony/SignalStrength;->toString()Ljava/lang/String;
+HSPLandroid/telephony/SignalStrength;->validateInput()V
+HSPLandroid/telephony/SignalStrength;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/telephony/SmsManager;-><init>(I)V
+HSPLandroid/telephony/SmsManager;->getDefaultSmsSubscriptionId()I
+HSPLandroid/telephony/SubscriptionInfo$1;-><init>()V
+HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$1;-><init>(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V
+HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$1;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$2;-><init>(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V
+HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$2;->onSubscriptionsChanged()V
+HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;->-get0(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)Landroid/os/Handler;
+HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;-><init>()V
+HSPLandroid/telephony/SubscriptionManager;-><init>(Landroid/content/Context;)V
+HSPLandroid/telephony/SubscriptionManager;->addOnSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V
+HSPLandroid/telephony/SubscriptionManager;->from(Landroid/content/Context;)Landroid/telephony/SubscriptionManager;
+HSPLandroid/telephony/SubscriptionManager;->getActiveSubscriptionIdList()[I
+HSPLandroid/telephony/SubscriptionManager;->getActiveSubscriptionInfo(I)Landroid/telephony/SubscriptionInfo;
+HSPLandroid/telephony/SubscriptionManager;->getActiveSubscriptionInfoCount()I
+HSPLandroid/telephony/SubscriptionManager;->getActiveSubscriptionInfoForSimSlotIndex(I)Landroid/telephony/SubscriptionInfo;
+HSPLandroid/telephony/SubscriptionManager;->getActiveSubscriptionInfoList()Ljava/util/List;
+HSPLandroid/telephony/SubscriptionManager;->getDefaultDataPhoneId()I
+HSPLandroid/telephony/SubscriptionManager;->getDefaultDataSubscriptionId()I
+HSPLandroid/telephony/SubscriptionManager;->getDefaultSmsSubscriptionId()I
+HSPLandroid/telephony/SubscriptionManager;->getDefaultSubscriptionId()I
+HSPLandroid/telephony/SubscriptionManager;->getDefaultVoicePhoneId()I
+HSPLandroid/telephony/SubscriptionManager;->getDefaultVoiceSubscriptionId()I
+HSPLandroid/telephony/SubscriptionManager;->getPhoneId(I)I
+HSPLandroid/telephony/SubscriptionManager;->getSimStateForSlotIndex(I)I
+HSPLandroid/telephony/SubscriptionManager;->getSlotIndex(I)I
+HSPLandroid/telephony/SubscriptionManager;->getSubId(I)[I
+HSPLandroid/telephony/SubscriptionManager;->isUsableSubIdValue(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;->setDefaultDataSubId(I)V
+HSPLandroid/telephony/TelephonyHistogram$1;-><init>()V
+HSPLandroid/telephony/TelephonyHistogram;-><init>(III)V
+HSPLandroid/telephony/TelephonyHistogram;->addTimeTaken(I)V
+HSPLandroid/telephony/TelephonyHistogram;->addToBucketCounter([I[II)V
+HSPLandroid/telephony/TelephonyHistogram;->calculateBucketEndPoints([I)V
+HSPLandroid/telephony/TelephonyManager$MultiSimVariants;-><init>(Ljava/lang/String;I)V
+HSPLandroid/telephony/TelephonyManager$MultiSimVariants;->values()[Landroid/telephony/TelephonyManager$MultiSimVariants;
+HSPLandroid/telephony/TelephonyManager;->-getandroid-telephony-TelephonyManager$MultiSimVariantsSwitchesValues()[I
+HSPLandroid/telephony/TelephonyManager;-><init>()V
+HSPLandroid/telephony/TelephonyManager;-><init>(Landroid/content/Context;)V
+HSPLandroid/telephony/TelephonyManager;-><init>(Landroid/content/Context;I)V
+HSPLandroid/telephony/TelephonyManager;->checkCarrierPrivilegesForPackage(Ljava/lang/String;)I
+HSPLandroid/telephony/TelephonyManager;->checkCarrierPrivilegesForPackageAnyPhone(Ljava/lang/String;)I
+HSPLandroid/telephony/TelephonyManager;->from(Landroid/content/Context;)Landroid/telephony/TelephonyManager;
+HSPLandroid/telephony/TelephonyManager;->getCallState()I
+HSPLandroid/telephony/TelephonyManager;->getCarrierPackageNamesForIntentAndPhone(Landroid/content/Intent;I)Ljava/util/List;
+HSPLandroid/telephony/TelephonyManager;->getCurrentPhoneType()I
+HSPLandroid/telephony/TelephonyManager;->getCurrentPhoneType(I)I
+HSPLandroid/telephony/TelephonyManager;->getCurrentPhoneTypeForSlot(I)I
+HSPLandroid/telephony/TelephonyManager;->getDataNetworkType(I)I
+HSPLandroid/telephony/TelephonyManager;->getDefault()Landroid/telephony/TelephonyManager;
+HSPLandroid/telephony/TelephonyManager;->getDeviceId()Ljava/lang/String;
+HSPLandroid/telephony/TelephonyManager;->getDeviceId(I)Ljava/lang/String;
+HSPLandroid/telephony/TelephonyManager;->getITelephony()Lcom/android/internal/telephony/ITelephony;
+HSPLandroid/telephony/TelephonyManager;->getImsServiceControllerAndListen(IILcom/android/ims/internal/IImsServiceFeatureListener;)Lcom/android/ims/internal/IImsServiceController;
+HSPLandroid/telephony/TelephonyManager;->getLine1Number()Ljava/lang/String;
+HSPLandroid/telephony/TelephonyManager;->getLine1Number(I)Ljava/lang/String;
+HSPLandroid/telephony/TelephonyManager;->getLteOnCdmaModeStatic()I
+HSPLandroid/telephony/TelephonyManager;->getMergedSubscriberIds()[Ljava/lang/String;
+HSPLandroid/telephony/TelephonyManager;->getMultiSimConfiguration()Landroid/telephony/TelephonyManager$MultiSimVariants;
+HSPLandroid/telephony/TelephonyManager;->getNetworkCountryIso()Ljava/lang/String;
+HSPLandroid/telephony/TelephonyManager;->getNetworkCountryIso(I)Ljava/lang/String;
+HSPLandroid/telephony/TelephonyManager;->getNetworkCountryIsoForPhone(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;->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;->getPhoneId(I)I
+HSPLandroid/telephony/TelephonyManager;->getPhoneType()I
+HSPLandroid/telephony/TelephonyManager;->getPhoneType(I)I
+HSPLandroid/telephony/TelephonyManager;->getProcCmdLine()Ljava/lang/String;
+HSPLandroid/telephony/TelephonyManager;->getSimCount()I
+HSPLandroid/telephony/TelephonyManager;->getSimCountryIso()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;->getSimOperatorName(I)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;
+HSPLandroid/telephony/TelephonyManager;->getSimState()I
+HSPLandroid/telephony/TelephonyManager;->getSimState(I)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;
+HSPLandroid/telephony/TelephonyManager;->getTelecomService()Lcom/android/internal/telecom/ITelecomService;
+HSPLandroid/telephony/TelephonyManager;->getTelephonyProperty(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/telephony/TelephonyManager;->getVisualVoicemailPackageName()Ljava/lang/String;
+HSPLandroid/telephony/TelephonyManager;->isMultiSimEnabled()Z
+HSPLandroid/telephony/TelephonyManager;->isSmsCapable()Z
+HSPLandroid/telephony/TelephonyManager;->isVoiceCapable()Z
+HSPLandroid/telephony/TelephonyManager;->listen(Landroid/telephony/PhoneStateListener;I)V
+HSPLandroid/telephony/TelephonyManager;->requestModemActivityInfo(Landroid/os/ResultReceiver;)V
+HSPLandroid/telephony/TelephonyManager;->setBasebandVersionForPhone(ILjava/lang/String;)V
+HSPLandroid/telephony/TelephonyManager;->setNetworkCountryIsoForPhone(ILjava/lang/String;)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;->setSimCountryIsoForPhone(ILjava/lang/String;)V
+HSPLandroid/telephony/TelephonyManager;->setSimOperatorNameForPhone(ILjava/lang/String;)V
+HSPLandroid/telephony/TelephonyManager;->setSimOperatorNumericForPhone(ILjava/lang/String;)V
+HSPLandroid/telephony/TelephonyManager;->setSimStateForPhone(ILjava/lang/String;)V
+HSPLandroid/telephony/TelephonyManager;->setTelephonyProperty(ILjava/lang/String;Ljava/lang/String;)V
+HSPLandroid/telephony/euicc/EuiccManager;-><init>(Landroid/content/Context;)V
+HSPLandroid/telephony/euicc/EuiccManager;->isEnabled()Z
+HSPLandroid/telephony/gsm/GsmCellLocation;-><init>()V
+HSPLandroid/telephony/gsm/GsmCellLocation;->equals(Ljava/lang/Object;)Z
+HSPLandroid/telephony/gsm/GsmCellLocation;->equalsHandlesNulls(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLandroid/telephony/gsm/GsmCellLocation;->setLacAndCid(II)V
+HSPLandroid/telephony/gsm/GsmCellLocation;->setPsc(I)V
+HSPLandroid/telephony/gsm/GsmCellLocation;->setStateInvalid()V
+HSPLandroid/telephony/ims/ImsService$1;-><init>(Landroid/telephony/ims/ImsService;)V
+HSPLandroid/telephony/ims/ImsService$1;->addRegistrationListener(IILcom/android/ims/internal/IImsRegistrationListener;)V
+HSPLandroid/telephony/ims/ImsService$1;->createImsFeature(IILcom/android/ims/internal/IImsFeatureStatusCallback;)V
+HSPLandroid/telephony/ims/ImsService$1;->getEcbmInterface(II)Lcom/android/ims/internal/IImsEcbm;
+HSPLandroid/telephony/ims/ImsService$1;->getFeatureStatus(II)I
+HSPLandroid/telephony/ims/ImsService$1;->getMultiEndpointInterface(II)Lcom/android/ims/internal/IImsMultiEndpoint;
+HSPLandroid/telephony/ims/ImsService$1;->setUiTTYMode(IIILandroid/os/Message;)V
+HSPLandroid/telephony/ims/ImsService$1;->startSession(IILandroid/app/PendingIntent;Lcom/android/ims/internal/IImsRegistrationListener;)I
+HSPLandroid/telephony/ims/ImsService;->-get0(Landroid/telephony/ims/ImsService;)Landroid/util/SparseArray;
+HSPLandroid/telephony/ims/ImsService;->-wrap0(Landroid/telephony/ims/ImsService;II)Landroid/telephony/ims/feature/MMTelFeature;
+HSPLandroid/telephony/ims/ImsService;->-wrap1(Landroid/telephony/ims/ImsService;Ljava/lang/String;)V
+HSPLandroid/telephony/ims/ImsService;->-wrap2(Landroid/telephony/ims/ImsService;IILcom/android/ims/internal/IImsFeatureStatusCallback;)V
+HSPLandroid/telephony/ims/ImsService;-><init>()V
+HSPLandroid/telephony/ims/ImsService;->enforceReadPhoneStatePermission(Ljava/lang/String;)V
+HSPLandroid/telephony/ims/ImsService;->getImsFeatureFromType(Landroid/util/SparseArray;I)Landroid/telephony/ims/feature/ImsFeature;
+HSPLandroid/telephony/ims/ImsService;->getImsFeatureMap(I)Landroid/util/SparseArray;
+HSPLandroid/telephony/ims/ImsService;->makeImsFeature(II)Landroid/telephony/ims/feature/ImsFeature;
+HSPLandroid/telephony/ims/ImsService;->onCreateImsFeatureInternal(IILcom/android/ims/internal/IImsFeatureStatusCallback;)V
+HSPLandroid/telephony/ims/ImsService;->resolveImsFeature(Landroid/util/SparseArray;ILjava/lang/Class;)Landroid/telephony/ims/feature/ImsFeature;
+HSPLandroid/telephony/ims/ImsService;->resolveMMTelFeature(II)Landroid/telephony/ims/feature/MMTelFeature;
+HSPLandroid/telephony/ims/ImsServiceProxy$1;-><init>(Landroid/telephony/ims/ImsServiceProxy;)V
+HSPLandroid/telephony/ims/ImsServiceProxy$INotifyStatusChanged;->notifyStatusChanged()V
+HSPLandroid/telephony/ims/ImsServiceProxy;-><init>(II)V
+HSPLandroid/telephony/ims/ImsServiceProxy;->addRegistrationListener(Lcom/android/ims/internal/IImsRegistrationListener;)V
+HSPLandroid/telephony/ims/ImsServiceProxy;->checkServiceIsReady()V
+HSPLandroid/telephony/ims/ImsServiceProxy;->getConfigInterface()Lcom/android/ims/internal/IImsConfig;
+HSPLandroid/telephony/ims/ImsServiceProxy;->getEcbmInterface()Lcom/android/ims/internal/IImsEcbm;
+HSPLandroid/telephony/ims/ImsServiceProxy;->getFeatureStatus()I
+HSPLandroid/telephony/ims/ImsServiceProxy;->getListener()Lcom/android/ims/internal/IImsServiceFeatureListener;
+HSPLandroid/telephony/ims/ImsServiceProxy;->getMultiEndpointInterface()Lcom/android/ims/internal/IImsMultiEndpoint;
+HSPLandroid/telephony/ims/ImsServiceProxy;->getServiceInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/IImsServiceController;
+HSPLandroid/telephony/ims/ImsServiceProxy;->isBinderAlive()Z
+HSPLandroid/telephony/ims/ImsServiceProxy;->isBinderReady()Z
+HSPLandroid/telephony/ims/ImsServiceProxy;->retrieveFeatureStatus()Ljava/lang/Integer;
+HSPLandroid/telephony/ims/ImsServiceProxy;->setBinder(Landroid/os/IBinder;)V
+HSPLandroid/telephony/ims/ImsServiceProxy;->setStatusCallback(Landroid/telephony/ims/ImsServiceProxy$INotifyStatusChanged;)V
+HSPLandroid/telephony/ims/ImsServiceProxy;->setUiTTYMode(ILandroid/os/Message;)V
+HSPLandroid/telephony/ims/ImsServiceProxy;->startSession(Landroid/app/PendingIntent;Lcom/android/ims/internal/IImsRegistrationListener;)I
+HSPLandroid/telephony/ims/ImsServiceProxyCompat;-><init>(ILandroid/os/IBinder;)V
+HSPLandroid/telephony/ims/feature/ImsFeature;-><init>()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;->notifyFeatureState(I)V
+HSPLandroid/telephony/ims/feature/ImsFeature;->sendImsServiceIntent(I)V
+HSPLandroid/telephony/ims/feature/ImsFeature;->setContext(Landroid/content/Context;)V
+HSPLandroid/telephony/ims/feature/ImsFeature;->setFeatureState(I)V
+HSPLandroid/telephony/ims/feature/ImsFeature;->setSlotId(I)V
+HSPLandroid/telephony/ims/feature/MMTelFeature;-><init>()V
+HSPLandroid/telephony/ims/stub/ImsConfigImplBase;-><init>()V
+HSPLandroid/telephony/ims/stub/ImsEcbmImplBase;-><init>()V
+HSPLandroid/telephony/ims/stub/ImsMultiEndpointImplBase;-><init>()V
+HSPLandroid/telephony/ims/stub/ImsUtImplBase;-><init>()V
+HSPLandroid/telephony/ims/stub/ImsUtListenerImplBase;-><init>()V
+HSPLandroid/test/InstrumentationTestCase;-><init>()V
+HSPLandroid/test/InstrumentationTestCase;->injectInstrumentation(Landroid/app/Instrumentation;)V
+HSPLandroid/test/InstrumentationTestCase;->runMethod(Ljava/lang/reflect/Method;IZ)V
+HSPLandroid/test/InstrumentationTestCase;->runTest()V
+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;-><init>(ZILandroid/text/TextDirectionHeuristic;)V
+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(Z)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;Landroid/text/TextDirectionHeuristic;Z)Ljava/lang/CharSequence;
+HSPLandroid/text/BidiFormatter;->unicodeWrap(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/text/BidiFormatter;->unicodeWrap(Ljava/lang/String;Landroid/text/TextDirectionHeuristic;Z)Ljava/lang/String;
+HSPLandroid/text/BoringLayout$Metrics;->-wrap0(Landroid/text/BoringLayout$Metrics;)V
+HSPLandroid/text/BoringLayout$Metrics;-><init>()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
+HSPLandroid/text/BoringLayout;->ellipsized(II)V
+HSPLandroid/text/BoringLayout;->getEllipsizedWidth()I
+HSPLandroid/text/BoringLayout;->getHeight()I
+HSPLandroid/text/BoringLayout;->getLineContainsTab(I)Z
+HSPLandroid/text/BoringLayout;->getLineCount()I
+HSPLandroid/text/BoringLayout;->getLineDescent(I)I
+HSPLandroid/text/BoringLayout;->getLineDirections(I)Landroid/text/Layout$Directions;
+HSPLandroid/text/BoringLayout;->getLineMax(I)F
+HSPLandroid/text/BoringLayout;->getLineStart(I)I
+HSPLandroid/text/BoringLayout;->getLineTop(I)I
+HSPLandroid/text/BoringLayout;->getLineWidth(I)F
+HSPLandroid/text/BoringLayout;->getParagraphDirection(I)I
+HSPLandroid/text/BoringLayout;->hasAnyInterestingChars(Ljava/lang/CharSequence;I)Z
+HSPLandroid/text/BoringLayout;->init(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/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;
+HSPLandroid/text/BoringLayout;->make(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;
+HSPLandroid/text/BoringLayout;->make(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
+HSPLandroid/text/BoringLayout;->replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;
+HSPLandroid/text/BoringLayout;->replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
+HSPLandroid/text/ClipboardManager;-><init>()V
+HSPLandroid/text/ClipboardManager;->getText()Ljava/lang/CharSequence;
+HSPLandroid/text/ClipboardManager;->hasText()Z
+HSPLandroid/text/ClipboardManager;->setText(Ljava/lang/CharSequence;)V
+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
+HSPLandroid/text/DynamicLayout;-><init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FFZIIILandroid/text/TextUtils$TruncateAt;I)V
+HSPLandroid/text/DynamicLayout;->addBlockAtOffset(I)V
+HSPLandroid/text/DynamicLayout;->contentMayProtrudeFromLineTopOrBottom(Ljava/lang/CharSequence;II)Z
+HSPLandroid/text/DynamicLayout;->createBlocks()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;->getEllipsizedWidth()I
+HSPLandroid/text/DynamicLayout;->getHyphen(I)I
+HSPLandroid/text/DynamicLayout;->getIndexFirstChangedBlock()I
+HSPLandroid/text/DynamicLayout;->getLineContainsTab(I)Z
+HSPLandroid/text/DynamicLayout;->getLineCount()I
+HSPLandroid/text/DynamicLayout;->getLineDescent(I)I
+HSPLandroid/text/DynamicLayout;->getLineDirections(I)Landroid/text/Layout$Directions;
+HSPLandroid/text/DynamicLayout;->getLineStart(I)I
+HSPLandroid/text/DynamicLayout;->getLineTop(I)I
+HSPLandroid/text/DynamicLayout;->getNumberOfBlocks()I
+HSPLandroid/text/DynamicLayout;->getParagraphDirection(I)I
+HSPLandroid/text/DynamicLayout;->reflow(Ljava/lang/CharSequence;III)V
+HSPLandroid/text/DynamicLayout;->setIndexFirstChangedBlock(I)V
+HSPLandroid/text/DynamicLayout;->updateAlwaysNeedsToBeRedrawn(I)V
+HSPLandroid/text/DynamicLayout;->updateBlocks(III)V
+HSPLandroid/text/Editable$Factory;-><init>()V
+HSPLandroid/text/Editable$Factory;->getInstance()Landroid/text/Editable$Factory;
+HSPLandroid/text/Editable$Factory;->newEditable(Ljava/lang/CharSequence;)Landroid/text/Editable;
+HSPLandroid/text/Editable;->append(C)Landroid/text/Editable;
+HSPLandroid/text/Editable;->append(Ljava/lang/CharSequence;)Landroid/text/Editable;
+HSPLandroid/text/Editable;->append(Ljava/lang/CharSequence;II)Landroid/text/Editable;
+HSPLandroid/text/Editable;->clear()V
+HSPLandroid/text/Editable;->clearSpans()V
+HSPLandroid/text/Editable;->delete(II)Landroid/text/Editable;
+HSPLandroid/text/Editable;->getFilters()[Landroid/text/InputFilter;
+HSPLandroid/text/Editable;->insert(ILjava/lang/CharSequence;)Landroid/text/Editable;
+HSPLandroid/text/Editable;->insert(ILjava/lang/CharSequence;II)Landroid/text/Editable;
+HSPLandroid/text/Editable;->replace(IILjava/lang/CharSequence;)Landroid/text/Editable;
+HSPLandroid/text/Editable;->replace(IILjava/lang/CharSequence;II)Landroid/text/Editable;
+HSPLandroid/text/Editable;->setFilters([Landroid/text/InputFilter;)V
+HSPLandroid/text/GetChars;->getChars(II[CI)V
+HSPLandroid/text/GraphicsOperations;->drawText(Landroid/graphics/BaseCanvas;IIFFLandroid/graphics/Paint;)V
+HSPLandroid/text/GraphicsOperations;->drawTextRun(Landroid/graphics/BaseCanvas;IIIIFFZLandroid/graphics/Paint;)V
+HSPLandroid/text/GraphicsOperations;->getTextRunAdvances(IIIIZ[FILandroid/graphics/Paint;)F
+HSPLandroid/text/GraphicsOperations;->getTextRunCursor(IIIIILandroid/graphics/Paint;)I
+HSPLandroid/text/GraphicsOperations;->getTextWidths(II[FLandroid/graphics/Paint;)I
+HSPLandroid/text/GraphicsOperations;->measureText(IILandroid/graphics/Paint;)F
+HSPLandroid/text/Hyphenator;->get(Ljava/util/Locale;)Landroid/text/Hyphenator;
+HSPLandroid/text/Hyphenator;->getNativePtr()J
+HSPLandroid/text/InputFilter;->filter(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Ljava/lang/CharSequence;
+HSPLandroid/text/Layout$Alignment;-><init>(Ljava/lang/String;I)V
+HSPLandroid/text/Layout$Alignment;->values()[Landroid/text/Layout$Alignment;
+HSPLandroid/text/Layout$Ellipsizer;-><init>(Ljava/lang/CharSequence;)V
+HSPLandroid/text/Layout$Ellipsizer;->length()I
+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;->-getandroid-text-Layout$AlignmentSwitchesValues()[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
+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;->getBottomPadding()I
+HSPLandroid/text/Layout;->getCursorPath(ILandroid/graphics/Path;Ljava/lang/CharSequence;)V
+HSPLandroid/text/Layout;->getDesiredWidth(Ljava/lang/CharSequence;IILandroid/text/TextPaint;)F
+HSPLandroid/text/Layout;->getDesiredWidth(Ljava/lang/CharSequence;IILandroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)F
+HSPLandroid/text/Layout;->getDesiredWidth(Ljava/lang/CharSequence;Landroid/text/TextPaint;)F
+HSPLandroid/text/Layout;->getEllipsisCount(I)I
+HSPLandroid/text/Layout;->getEllipsisStart(I)I
+HSPLandroid/text/Layout;->getHeight()I
+HSPLandroid/text/Layout;->getHeight(Z)I
+HSPLandroid/text/Layout;->getHorizontal(IZIZ)F
+HSPLandroid/text/Layout;->getHorizontal(IZZ)F
+HSPLandroid/text/Layout;->getHyphen(I)I
+HSPLandroid/text/Layout;->getIndentAdjust(ILandroid/text/Layout$Alignment;)I
+HSPLandroid/text/Layout;->getLineBaseline(I)I
+HSPLandroid/text/Layout;->getLineBottom(I)I
+HSPLandroid/text/Layout;->getLineContainsTab(I)Z
+HSPLandroid/text/Layout;->getLineCount()I
+HSPLandroid/text/Layout;->getLineDescent(I)I
+HSPLandroid/text/Layout;->getLineDirections(I)Landroid/text/Layout$Directions;
+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
+HSPLandroid/text/Layout;->getLineForVertical(I)I
+HSPLandroid/text/Layout;->getLineLeft(I)F
+HSPLandroid/text/Layout;->getLineMax(I)F
+HSPLandroid/text/Layout;->getLineRangeForDraw(Landroid/graphics/Canvas;)J
+HSPLandroid/text/Layout;->getLineRight(I)F
+HSPLandroid/text/Layout;->getLineStart(I)I
+HSPLandroid/text/Layout;->getLineStartPos(III)I
+HSPLandroid/text/Layout;->getLineTop(I)I
+HSPLandroid/text/Layout;->getLineVisibleEnd(I)I
+HSPLandroid/text/Layout;->getLineVisibleEnd(III)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;->getParagraphDirection(I)I
+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;
+HSPLandroid/text/Layout;->getPrimaryHorizontal(IZ)F
+HSPLandroid/text/Layout;->getSpacingAdd()F
+HSPLandroid/text/Layout;->getSpacingMultiplier()F
+HSPLandroid/text/Layout;->getText()Ljava/lang/CharSequence;
+HSPLandroid/text/Layout;->getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic;
+HSPLandroid/text/Layout;->getTopPadding()I
+HSPLandroid/text/Layout;->getWidth()I
+HSPLandroid/text/Layout;->increaseWidthTo(I)V
+HSPLandroid/text/Layout;->isJustificationRequired(I)Z
+HSPLandroid/text/Layout;->isLevelBoundary(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
+HSPLandroid/text/Layout;->shouldClampCursor(I)Z
+HSPLandroid/text/MeasuredText;-><init>()V
+HSPLandroid/text/MeasuredText;->addStyleRun(Landroid/text/TextPaint;ILandroid/graphics/Paint$FontMetricsInt;)F
+HSPLandroid/text/MeasuredText;->addStyleRun(Landroid/text/TextPaint;[Landroid/text/style/MetricAffectingSpan;ILandroid/graphics/Paint$FontMetricsInt;)F
+HSPLandroid/text/MeasuredText;->breakText(IZF)I
+HSPLandroid/text/MeasuredText;->finish()V
+HSPLandroid/text/MeasuredText;->obtain()Landroid/text/MeasuredText;
+HSPLandroid/text/MeasuredText;->recycle(Landroid/text/MeasuredText;)Landroid/text/MeasuredText;
+HSPLandroid/text/MeasuredText;->setPara(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;Landroid/text/StaticLayout$Builder;)V
+HSPLandroid/text/NoCopySpan$Concrete;-><init>()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
+HSPLandroid/text/PackedIntVector;->growBuffer()V
+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
+HSPLandroid/text/PackedObjectVector;->insertAt(I[Ljava/lang/Object;)V
+HSPLandroid/text/PackedObjectVector;->moveRowGapTo(I)V
+HSPLandroid/text/PackedObjectVector;->setValue(IILjava/lang/Object;)V
+HSPLandroid/text/PackedObjectVector;->size()I
+HSPLandroid/text/Selection$END;-><init>()V
+HSPLandroid/text/Selection$END;-><init>(Landroid/text/Selection$END;)V
+HSPLandroid/text/Selection$START;-><init>()V
+HSPLandroid/text/Selection$START;-><init>(Landroid/text/Selection$START;)V
+HSPLandroid/text/Selection;->getSelectionEnd(Ljava/lang/CharSequence;)I
+HSPLandroid/text/Selection;->getSelectionStart(Ljava/lang/CharSequence;)I
+HSPLandroid/text/Selection;->setSelection(Landroid/text/Spannable;I)V
+HSPLandroid/text/Selection;->setSelection(Landroid/text/Spannable;II)V
+HSPLandroid/text/SpanSet;-><init>(Ljava/lang/Class;)V
+HSPLandroid/text/SpanSet;->getNextTransition(II)I
+HSPLandroid/text/SpanSet;->hasSpansIntersecting(II)Z
+HSPLandroid/text/SpanSet;->init(Landroid/text/Spanned;II)V
+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/Spannable;->removeSpan(Ljava/lang/Object;)V
+HSPLandroid/text/Spannable;->setSpan(Ljava/lang/Object;III)V
+HSPLandroid/text/SpannableString;-><init>(Ljava/lang/CharSequence;)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;->setSpan(Ljava/lang/Object;III)V
+HSPLandroid/text/SpannableString;->valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;
+HSPLandroid/text/SpannableStringBuilder;-><init>()V
+HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;)V
+HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;II)V
+HSPLandroid/text/SpannableStringBuilder;->append(Ljava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->calcMax(I)I
+HSPLandroid/text/SpannableStringBuilder;->change(IILjava/lang/CharSequence;II)V
+HSPLandroid/text/SpannableStringBuilder;->charAt(I)C
+HSPLandroid/text/SpannableStringBuilder;->checkRange(Ljava/lang/String;II)V
+HSPLandroid/text/SpannableStringBuilder;->checkSortBuffer([II)[I
+HSPLandroid/text/SpannableStringBuilder;->compareSpans(II[I[I)I
+HSPLandroid/text/SpannableStringBuilder;->countSpans(IILjava/lang/Class;I)I
+HSPLandroid/text/SpannableStringBuilder;->getChars(II[CI)V
+HSPLandroid/text/SpannableStringBuilder;->getSpanEnd(Ljava/lang/Object;)I
+HSPLandroid/text/SpannableStringBuilder;->getSpanFlags(Ljava/lang/Object;)I
+HSPLandroid/text/SpannableStringBuilder;->getSpanStart(Ljava/lang/Object;)I
+HSPLandroid/text/SpannableStringBuilder;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/SpannableStringBuilder;->getSpans(IILjava/lang/Class;Z)[Ljava/lang/Object;
+HSPLandroid/text/SpannableStringBuilder;->getSpansRec(IILjava/lang/Class;I[Ljava/lang/Object;[I[IIZ)I
+HSPLandroid/text/SpannableStringBuilder;->hasNonExclusiveExclusiveSpanAt(Ljava/lang/CharSequence;I)Z
+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;->moveGapTo(I)V
+HSPLandroid/text/SpannableStringBuilder;->nextSpanTransition(IILjava/lang/Class;)I
+HSPLandroid/text/SpannableStringBuilder;->nextSpanTransitionRec(IILjava/lang/Class;I)I
+HSPLandroid/text/SpannableStringBuilder;->obtain(I)[I
+HSPLandroid/text/SpannableStringBuilder;->recycle([I)V
+HSPLandroid/text/SpannableStringBuilder;->removeSpan(I)V
+HSPLandroid/text/SpannableStringBuilder;->removeSpan(Ljava/lang/Object;)V
+HSPLandroid/text/SpannableStringBuilder;->removeSpansForChange(IIZI)Z
+HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;
+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
+HSPLandroid/text/SpannableStringBuilder;->setSpan(Ljava/lang/Object;III)V
+HSPLandroid/text/SpannableStringBuilder;->setSpan(ZLjava/lang/Object;IIIZ)V
+HSPLandroid/text/SpannableStringBuilder;->siftDown(I[Ljava/lang/Object;I[I[I)V
+HSPLandroid/text/SpannableStringBuilder;->sort([Ljava/lang/Object;[I[I)V
+HSPLandroid/text/SpannableStringBuilder;->subSequence(II)Ljava/lang/CharSequence;
+HSPLandroid/text/SpannableStringBuilder;->toString()Ljava/lang/String;
+HSPLandroid/text/SpannableStringBuilder;->treeRoot()I
+HSPLandroid/text/SpannableStringBuilder;->updatedIntervalBound(IIIIZZ)I
+HSPLandroid/text/SpannableStringInternal;-><init>(Ljava/lang/CharSequence;II)V
+HSPLandroid/text/SpannableStringInternal;->charAt(I)C
+HSPLandroid/text/SpannableStringInternal;->checkRange(Ljava/lang/String;II)V
+HSPLandroid/text/SpannableStringInternal;->copySpans(Landroid/text/SpannableStringInternal;II)V
+HSPLandroid/text/SpannableStringInternal;->copySpans(Landroid/text/Spanned;II)V
+HSPLandroid/text/SpannableStringInternal;->getChars(II[CI)V
+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;->length()I
+HSPLandroid/text/SpannableStringInternal;->nextSpanTransition(IILjava/lang/Class;)I
+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/Spanned;->getSpanEnd(Ljava/lang/Object;)I
+HSPLandroid/text/Spanned;->getSpanFlags(Ljava/lang/Object;)I
+HSPLandroid/text/Spanned;->getSpanStart(Ljava/lang/Object;)I
+HSPLandroid/text/Spanned;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/Spanned;->nextSpanTransition(IILjava/lang/Class;)I
+HSPLandroid/text/SpannedString;-><init>(Ljava/lang/CharSequence;)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
+HSPLandroid/text/StaticLayout$Builder;->-wrap1(Landroid/text/StaticLayout$Builder;Landroid/os/LocaleList;)V
+HSPLandroid/text/StaticLayout$Builder;-><init>()V
+HSPLandroid/text/StaticLayout$Builder;->addReplacementRun(IIF)V
+HSPLandroid/text/StaticLayout$Builder;->addStyleRun(Landroid/text/TextPaint;IIZ)F
+HSPLandroid/text/StaticLayout$Builder;->build()Landroid/text/StaticLayout;
+HSPLandroid/text/StaticLayout$Builder;->finish()V
+HSPLandroid/text/StaticLayout$Builder;->getHyphenators(Landroid/os/LocaleList;)[J
+HSPLandroid/text/StaticLayout$Builder;->obtain(Ljava/lang/CharSequence;IILandroid/text/TextPaint;I)Landroid/text/StaticLayout$Builder;
+HSPLandroid/text/StaticLayout$Builder;->recycle(Landroid/text/StaticLayout$Builder;)V
+HSPLandroid/text/StaticLayout$Builder;->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;->setLocales(Landroid/os/LocaleList;)V
+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;->setWidth(I)Landroid/text/StaticLayout$Builder;
+HSPLandroid/text/StaticLayout$LineBreaks;-><init>()V
+HSPLandroid/text/StaticLayout;->-wrap0(JJJIIZ)F
+HSPLandroid/text/StaticLayout;->-wrap1()J
+HSPLandroid/text/StaticLayout;->-wrap3(JIIF)V
+HSPLandroid/text/StaticLayout;->-wrap4(J)V
+HSPLandroid/text/StaticLayout;->-wrap7(JLjava/lang/String;[J)V
+HSPLandroid/text/StaticLayout;-><init>(Landroid/text/StaticLayout$Builder;)V
+HSPLandroid/text/StaticLayout;-><init>(Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout;)V
+HSPLandroid/text/StaticLayout;-><init>(Ljava/lang/CharSequence;)V
+HSPLandroid/text/StaticLayout;->calculateEllipsis(II[FIFLandroid/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
+HSPLandroid/text/StaticLayout;->getEllipsisStart(I)I
+HSPLandroid/text/StaticLayout;->getEllipsizedWidth()I
+HSPLandroid/text/StaticLayout;->getHeight(Z)I
+HSPLandroid/text/StaticLayout;->getHyphen(I)I
+HSPLandroid/text/StaticLayout;->getIndentAdjust(ILandroid/text/Layout$Alignment;)I
+HSPLandroid/text/StaticLayout;->getLineContainsTab(I)Z
+HSPLandroid/text/StaticLayout;->getLineCount()I
+HSPLandroid/text/StaticLayout;->getLineDescent(I)I
+HSPLandroid/text/StaticLayout;->getLineDirections(I)Landroid/text/Layout$Directions;
+HSPLandroid/text/StaticLayout;->getLineForVertical(I)I
+HSPLandroid/text/StaticLayout;->getLineStart(I)I
+HSPLandroid/text/StaticLayout;->getLineTop(I)I
+HSPLandroid/text/StaticLayout;->getParagraphDirection(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;IZ[BIZIZZ[C[FILandroid/text/TextUtils$TruncateAt;FFLandroid/text/TextPaint;Z)I
+HSPLandroid/text/TextDirectionHeuristic;->isRtl(Ljava/lang/CharSequence;II)Z
+HSPLandroid/text/TextDirectionHeuristic;->isRtl([CII)Z
+HSPLandroid/text/TextDirectionHeuristics$AnyStrong;-><init>(Z)V
+HSPLandroid/text/TextDirectionHeuristics$FirstStrong;-><init>()V
+HSPLandroid/text/TextDirectionHeuristics$FirstStrong;->checkRtl(Ljava/lang/CharSequence;II)I
+HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;-><init>(Landroid/text/TextDirectionHeuristics$TextDirectionAlgorithm;)V
+HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->doCheck(Ljava/lang/CharSequence;II)Z
+HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->isRtl(Ljava/lang/CharSequence;II)Z
+HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;-><init>(Landroid/text/TextDirectionHeuristics$TextDirectionAlgorithm;Z)V
+HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;-><init>(Landroid/text/TextDirectionHeuristics$TextDirectionAlgorithm;ZLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;)V
+HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;->defaultIsRtl()Z
+HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;-><init>()V
+HSPLandroid/text/TextDirectionHeuristics;->-wrap0(I)I
+HSPLandroid/text/TextDirectionHeuristics;->isRtlCodePoint(I)I
+HSPLandroid/text/TextLine$DecorationInfo;-><init>()V
+HSPLandroid/text/TextLine$DecorationInfo;-><init>(Landroid/text/TextLine$DecorationInfo;)V
+HSPLandroid/text/TextLine$DecorationInfo;->hasDecoration()Z
+HSPLandroid/text/TextLine;-><init>()V
+HSPLandroid/text/TextLine;->adjustHyphenEdit(III)I
+HSPLandroid/text/TextLine;->draw(Landroid/graphics/Canvas;FIII)V
+HSPLandroid/text/TextLine;->drawRun(Landroid/graphics/Canvas;IIZFIIIZ)F
+HSPLandroid/text/TextLine;->drawTextRun(Landroid/graphics/Canvas;Landroid/text/TextPaint;IIIIZFI)V
+HSPLandroid/text/TextLine;->expandMetricsFromPaint(Landroid/graphics/Paint$FontMetricsInt;Landroid/text/TextPaint;)V
+HSPLandroid/text/TextLine;->extractDecorationInfo(Landroid/text/TextPaint;Landroid/text/TextLine$DecorationInfo;)V
+HSPLandroid/text/TextLine;->getRunAdvance(Landroid/text/TextPaint;IIIIZI)F
+HSPLandroid/text/TextLine;->handleReplacement(Landroid/text/style/ReplacementSpan;Landroid/text/TextPaint;IIZLandroid/graphics/Canvas;FIIILandroid/graphics/Paint$FontMetricsInt;Z)F
+HSPLandroid/text/TextLine;->handleRun(IIIZLandroid/graphics/Canvas;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
+HSPLandroid/text/TextLine;->measureRun(IIIZLandroid/graphics/Paint$FontMetricsInt;)F
+HSPLandroid/text/TextLine;->metrics(Landroid/graphics/Paint$FontMetricsInt;)F
+HSPLandroid/text/TextLine;->obtain()Landroid/text/TextLine;
+HSPLandroid/text/TextLine;->recycle(Landroid/text/TextLine;)Landroid/text/TextLine;
+HSPLandroid/text/TextLine;->set(Landroid/text/TextPaint;Ljava/lang/CharSequence;IIILandroid/text/Layout$Directions;ZLandroid/text/Layout$TabStops;)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;->hasEqualAttributes(Landroid/text/TextPaint;)Z
+HSPLandroid/text/TextPaint;->set(Landroid/text/TextPaint;)V
+HSPLandroid/text/TextPaint;->setUnderlineText(IF)V
+HSPLandroid/text/TextUtils$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/CharSequence;
+HSPLandroid/text/TextUtils$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/text/TextUtils$EllipsizeCallback;->ellipsized(II)V
+HSPLandroid/text/TextUtils$SimpleStringSplitter;-><init>(C)V
+HSPLandroid/text/TextUtils$SimpleStringSplitter;->next()Ljava/lang/String;
+HSPLandroid/text/TextUtils$SimpleStringSplitter;->setString(Ljava/lang/String;)V
+HSPLandroid/text/TextUtils$StringSplitter;->setString(Ljava/lang/String;)V
+HSPLandroid/text/TextUtils$TruncateAt;-><init>(Ljava/lang/String;I)V
+HSPLandroid/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;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;->equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z
+HSPLandroid/text/TextUtils;->expandTemplate(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/text/TextUtils;->getChars(Ljava/lang/CharSequence;II[CI)V
+HSPLandroid/text/TextUtils;->getLayoutDirectionFromLocale(Ljava/util/Locale;)I
+HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;C)I
+HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;CI)I
+HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;CII)I
+HSPLandroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)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;->obtain(I)[C
+HSPLandroid/text/TextUtils;->packRangeInLong(II)J
+HSPLandroid/text/TextUtils;->recycle([C)V
+HSPLandroid/text/TextUtils;->removeEmptySpans([Ljava/lang/Object;Landroid/text/Spanned;Ljava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/TextUtils;->setPara(Landroid/text/MeasuredText;Landroid/text/TextPaint;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;)F
+HSPLandroid/text/TextUtils;->split(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/text/TextUtils;->split(Ljava/lang/String;Ljava/util/regex/Pattern;)[Ljava/lang/String;
+HSPLandroid/text/TextUtils;->stringOrSpannedString(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/text/TextUtils;->toUpperCase(Ljava/util/Locale;Ljava/lang/CharSequence;Z)Ljava/lang/CharSequence;
+HSPLandroid/text/TextUtils;->trimNoCopySpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/text/TextUtils;->unpackRangeEndFromLong(J)I
+HSPLandroid/text/TextUtils;->unpackRangeStartFromLong(J)I
+HSPLandroid/text/TextUtils;->writeToParcel(Ljava/lang/CharSequence;Landroid/os/Parcel;I)V
+HSPLandroid/text/TextWatcher;->afterTextChanged(Landroid/text/Editable;)V
+HSPLandroid/text/TextWatcher;->beforeTextChanged(Ljava/lang/CharSequence;III)V
+HSPLandroid/text/TextWatcher;->onTextChanged(Ljava/lang/CharSequence;III)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;
+HSPLandroid/text/format/DateFormat;->getMonthString(Llibcore/icu/LocaleData;III)Ljava/lang/String;
+HSPLandroid/text/format/DateFormat;->getTimeFormat(Landroid/content/Context;)Ljava/text/DateFormat;
+HSPLandroid/text/format/DateFormat;->getTimeFormatString(Landroid/content/Context;)Ljava/lang/String;
+HSPLandroid/text/format/DateFormat;->getTimeFormatString(Landroid/content/Context;I)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;->hasSeconds(Ljava/lang/CharSequence;)Z
+HSPLandroid/text/format/DateFormat;->is24HourFormat(Landroid/content/Context;)Z
+HSPLandroid/text/format/DateFormat;->is24HourFormat(Landroid/content/Context;I)Z
+HSPLandroid/text/format/DateFormat;->zeroPad(II)Ljava/lang/String;
+HSPLandroid/text/format/DateUtils;->formatElapsedTime(J)Ljava/lang/String;
+HSPLandroid/text/format/DateUtils;->formatElapsedTime(Ljava/lang/StringBuilder;J)Ljava/lang/String;
+HSPLandroid/text/format/DateUtils;->initFormatStrings()V
+HSPLandroid/text/format/DateUtils;->initFormatStringsLocked()V
+HSPLandroid/text/format/Formatter$RoundedBytesResult;-><init>(FLandroid/icu/util/MeasureUnit;IJ)V
+HSPLandroid/text/format/Formatter$RoundedBytesResult;->roundBytes(JI)Landroid/text/format/Formatter$RoundedBytesResult;
+HSPLandroid/text/format/Formatter;->bidiWrap(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/text/format/Formatter;->formatFileSize(Landroid/content/Context;J)Ljava/lang/String;
+HSPLandroid/text/format/Formatter;->formatFileSize(Landroid/content/Context;JI)Ljava/lang/String;
+HSPLandroid/text/format/Formatter;->formatMeasureShort(Ljava/util/Locale;Landroid/icu/text/NumberFormat;FLandroid/icu/util/MeasureUnit;)Ljava/lang/String;
+HSPLandroid/text/format/Formatter;->formatRoundedBytesResult(Landroid/content/Context;Landroid/text/format/Formatter$RoundedBytesResult;)Ljava/lang/String;
+HSPLandroid/text/format/Formatter;->getNumberFormatter(Ljava/util/Locale;I)Landroid/icu/text/NumberFormat;
+HSPLandroid/text/format/Formatter;->localeFromContext(Landroid/content/Context;)Ljava/util/Locale;
+HSPLandroid/text/format/Time$TimeCalculator;-><init>(Ljava/lang/String;)V
+HSPLandroid/text/format/Time$TimeCalculator;->copyFieldsFromTime(Landroid/text/format/Time;)V
+HSPLandroid/text/format/Time$TimeCalculator;->copyFieldsToTime(Landroid/text/format/Time;)V
+HSPLandroid/text/format/Time$TimeCalculator;->format(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/text/format/Time$TimeCalculator;->lookupZoneInfo(Ljava/lang/String;)Llibcore/util/ZoneInfo;
+HSPLandroid/text/format/Time$TimeCalculator;->setTimeInMillis(J)V
+HSPLandroid/text/format/Time$TimeCalculator;->updateZoneInfoFromTimeZone()V
+HSPLandroid/text/format/Time;-><init>()V
+HSPLandroid/text/format/Time;-><init>(Ljava/lang/String;)V
+HSPLandroid/text/format/Time;->format(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/text/format/Time;->getCurrentTimezone()Ljava/lang/String;
+HSPLandroid/text/format/Time;->getJulianDay(JJ)I
+HSPLandroid/text/format/Time;->initialize(Ljava/lang/String;)V
+HSPLandroid/text/format/Time;->set(J)V
+HSPLandroid/text/format/Time;->setToNow()V
+HSPLandroid/text/format/TimeFormatter;-><init>()V
+HSPLandroid/text/format/TimeFormatter;->format(Ljava/lang/String;Llibcore/util/ZoneInfo$WallTime;Llibcore/util/ZoneInfo;)Ljava/lang/String;
+HSPLandroid/text/format/TimeFormatter;->formatInternal(Ljava/lang/String;Llibcore/util/ZoneInfo$WallTime;Llibcore/util/ZoneInfo;)V
+HSPLandroid/text/format/TimeFormatter;->getFormat(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/text/format/TimeFormatter;->handleToken(Ljava/nio/CharBuffer;Llibcore/util/ZoneInfo$WallTime;Llibcore/util/ZoneInfo;)Z
+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
+HSPLandroid/text/method/ArrowKeyMovementMethod;->onTakeFocus(Landroid/widget/TextView;Landroid/text/Spannable;I)V
+HSPLandroid/text/method/BaseKeyListener;-><init>()V
+HSPLandroid/text/method/BaseMovementMethod;-><init>()V
+HSPLandroid/text/method/DialerKeyListener;-><init>()V
+HSPLandroid/text/method/DialerKeyListener;->getInputType()I
+HSPLandroid/text/method/KeyListener;->clearMetaKeyState(Landroid/view/View;Landroid/text/Editable;I)V
+HSPLandroid/text/method/KeyListener;->getInputType()I
+HSPLandroid/text/method/KeyListener;->onKeyDown(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z
+HSPLandroid/text/method/KeyListener;->onKeyOther(Landroid/view/View;Landroid/text/Editable;Landroid/view/KeyEvent;)Z
+HSPLandroid/text/method/KeyListener;->onKeyUp(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z
+HSPLandroid/text/method/LinkMovementMethod;-><init>()V
+HSPLandroid/text/method/LinkMovementMethod;->getInstance()Landroid/text/method/MovementMethod;
+HSPLandroid/text/method/MetaKeyKeyListener;-><init>()V
+HSPLandroid/text/method/MetaKeyKeyListener;->getActive(Ljava/lang/CharSequence;Ljava/lang/Object;II)I
+HSPLandroid/text/method/MetaKeyKeyListener;->getMetaState(Ljava/lang/CharSequence;I)I
+HSPLandroid/text/method/MetaKeyKeyListener;->isMetaTracker(Ljava/lang/CharSequence;Ljava/lang/Object;)Z
+HSPLandroid/text/method/MetaKeyKeyListener;->resetMetaState(Landroid/text/Spannable;)V
+HSPLandroid/text/method/MovementMethod;->onGenericMotionEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z
+HSPLandroid/text/method/MovementMethod;->onKeyDown(Landroid/widget/TextView;Landroid/text/Spannable;ILandroid/view/KeyEvent;)Z
+HSPLandroid/text/method/MovementMethod;->onKeyOther(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/KeyEvent;)Z
+HSPLandroid/text/method/MovementMethod;->onKeyUp(Landroid/widget/TextView;Landroid/text/Spannable;ILandroid/view/KeyEvent;)Z
+HSPLandroid/text/method/MovementMethod;->onTrackballEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z
+HSPLandroid/text/method/NumberKeyListener;-><init>()V
+HSPLandroid/text/method/NumberKeyListener;->getAcceptedChars()[C
+HSPLandroid/text/method/ReplacementTransformationMethod$ReplacementCharSequence;-><init>(Ljava/lang/CharSequence;[C[C)V
+HSPLandroid/text/method/ReplacementTransformationMethod$ReplacementCharSequence;->charAt(I)C
+HSPLandroid/text/method/ReplacementTransformationMethod$ReplacementCharSequence;->getChars(II[CI)V
+HSPLandroid/text/method/ReplacementTransformationMethod$ReplacementCharSequence;->length()I
+HSPLandroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;-><init>(Landroid/text/Spanned;[C[C)V
+HSPLandroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;->getSpanEnd(Ljava/lang/Object;)I
+HSPLandroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;->getSpanFlags(Ljava/lang/Object;)I
+HSPLandroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;->getSpanStart(Ljava/lang/Object;)I
+HSPLandroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;->nextSpanTransition(IILjava/lang/Class;)I
+HSPLandroid/text/method/ReplacementTransformationMethod;-><init>()V
+HSPLandroid/text/method/ReplacementTransformationMethod;->getOriginal()[C
+HSPLandroid/text/method/ReplacementTransformationMethod;->getReplacement()[C
+HSPLandroid/text/method/ReplacementTransformationMethod;->getTransformation(Ljava/lang/CharSequence;Landroid/view/View;)Ljava/lang/CharSequence;
+HSPLandroid/text/method/ReplacementTransformationMethod;->onFocusChanged(Landroid/view/View;Ljava/lang/CharSequence;ZILandroid/graphics/Rect;)V
+HSPLandroid/text/method/ScrollingMovementMethod;-><init>()V
+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$Capitalize;-><init>(Ljava/lang/String;I)V
+HSPLandroid/text/method/TextKeyListener$Capitalize;->values()[Landroid/text/method/TextKeyListener$Capitalize;
+HSPLandroid/text/method/TextKeyListener;-><init>(Landroid/text/method/TextKeyListener$Capitalize;Z)V
+HSPLandroid/text/method/TextKeyListener;->getInstance()Landroid/text/method/TextKeyListener;
+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
+HSPLandroid/text/method/TextKeyListener;->onSpanRemoved(Landroid/text/Spannable;Ljava/lang/Object;II)V
+HSPLandroid/text/method/TransformationMethod2;->setLengthChangesAllowed(Z)V
+HSPLandroid/text/style/BackgroundColorSpan;-><init>(I)V
+HSPLandroid/text/style/CharacterStyle;-><init>()V
+HSPLandroid/text/style/CharacterStyle;->updateDrawState(Landroid/text/TextPaint;)V
+HSPLandroid/text/style/DynamicDrawableSpan;-><init>(I)V
+HSPLandroid/text/style/DynamicDrawableSpan;->getCachedDrawable()Landroid/graphics/drawable/Drawable;
+HSPLandroid/text/style/DynamicDrawableSpan;->getDrawable()Landroid/graphics/drawable/Drawable;
+HSPLandroid/text/style/DynamicDrawableSpan;->getSize(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Paint$FontMetricsInt;)I
+HSPLandroid/text/style/ForegroundColorSpan;-><init>(I)V
+HSPLandroid/text/style/ForegroundColorSpan;->updateDrawState(Landroid/text/TextPaint;)V
+HSPLandroid/text/style/MetricAffectingSpan;-><init>()V
+HSPLandroid/text/style/MetricAffectingSpan;->updateMeasureState(Landroid/text/TextPaint;)V
+HSPLandroid/text/style/RelativeSizeSpan;-><init>(F)V
+HSPLandroid/text/style/RelativeSizeSpan;->updateDrawState(Landroid/text/TextPaint;)V
+HSPLandroid/text/style/ReplacementSpan;-><init>()V
+HSPLandroid/text/style/ReplacementSpan;->draw(Landroid/graphics/Canvas;Ljava/lang/CharSequence;IIFIIILandroid/graphics/Paint;)V
+HSPLandroid/text/style/ReplacementSpan;->getSize(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Paint$FontMetricsInt;)I
+HSPLandroid/text/style/StyleSpan;-><init>(I)V
+HSPLandroid/text/style/StyleSpan;->apply(Landroid/graphics/Paint;I)V
+HSPLandroid/text/style/StyleSpan;->updateDrawState(Landroid/text/TextPaint;)V
+HSPLandroid/text/style/TtsSpan$Builder;-><init>(Ljava/lang/String;)V
+HSPLandroid/text/style/TtsSpan$Builder;->build()Landroid/text/style/TtsSpan;
+HSPLandroid/text/style/TtsSpan$Builder;->setStringArgument(Ljava/lang/String;Ljava/lang/String;)Landroid/text/style/TtsSpan$Builder;
+HSPLandroid/text/style/TtsSpan$SemioticClassBuilder;-><init>(Ljava/lang/String;)V
+HSPLandroid/text/style/TtsSpan$VerbatimBuilder;-><init>()V
+HSPLandroid/text/style/TtsSpan$VerbatimBuilder;-><init>(Ljava/lang/String;)V
+HSPLandroid/text/style/TtsSpan$VerbatimBuilder;->setVerbatim(Ljava/lang/String;)Landroid/text/style/TtsSpan$VerbatimBuilder;
+HSPLandroid/text/style/TtsSpan;-><init>(Ljava/lang/String;Landroid/os/PersistableBundle;)V
+HSPLandroid/text/style/TypefaceSpan;-><init>(Ljava/lang/String;)V
+HSPLandroid/text/style/TypefaceSpan;->apply(Landroid/graphics/Paint;Ljava/lang/String;)V
+HSPLandroid/text/style/TypefaceSpan;->updateDrawState(Landroid/text/TextPaint;)V
+HSPLandroid/transition/AutoTransition;-><init>()V
+HSPLandroid/transition/AutoTransition;->init()V
+HSPLandroid/transition/ChangeBounds$1;-><init>(Ljava/lang/Class;Ljava/lang/String;)V
+HSPLandroid/transition/ChangeBounds$2;-><init>(Ljava/lang/Class;Ljava/lang/String;)V
+HSPLandroid/transition/ChangeBounds$3;-><init>(Ljava/lang/Class;Ljava/lang/String;)V
+HSPLandroid/transition/ChangeBounds$4;-><init>(Ljava/lang/Class;Ljava/lang/String;)V
+HSPLandroid/transition/ChangeBounds$5;-><init>(Ljava/lang/Class;Ljava/lang/String;)V
+HSPLandroid/transition/ChangeBounds$6;-><init>(Ljava/lang/Class;Ljava/lang/String;)V
+HSPLandroid/transition/ChangeBounds;-><init>()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$1;-><init>()V
+HSPLandroid/transition/ChangeImageTransform$2;-><init>(Ljava/lang/Class;Ljava/lang/String;)V
+HSPLandroid/transition/ChangeImageTransform;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/transition/ChangeTransform$1;-><init>(Ljava/lang/Class;Ljava/lang/String;)V
+HSPLandroid/transition/ChangeTransform$2;-><init>(Ljava/lang/Class;Ljava/lang/String;)V
+HSPLandroid/transition/ChangeTransform;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/transition/Fade;-><init>(I)V
+HSPLandroid/transition/Fade;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/transition/PathMotion;-><init>()V
+HSPLandroid/transition/PathMotion;->getPath(FFFF)Landroid/graphics/Path;
+HSPLandroid/transition/Scene;-><init>(Landroid/view/ViewGroup;Landroid/view/View;)V
+HSPLandroid/transition/Scene;->enter()V
+HSPLandroid/transition/Scene;->getSceneRoot()Landroid/view/ViewGroup;
+HSPLandroid/transition/Scene;->setCurrentScene(Landroid/view/View;Landroid/transition/Scene;)V
+HSPLandroid/transition/Transition$1;-><init>()V
+HSPLandroid/transition/Transition$TransitionListener;->onTransitionCancel(Landroid/transition/Transition;)V
+HSPLandroid/transition/Transition$TransitionListener;->onTransitionEnd(Landroid/transition/Transition;)V
+HSPLandroid/transition/Transition$TransitionListener;->onTransitionPause(Landroid/transition/Transition;)V
+HSPLandroid/transition/Transition$TransitionListener;->onTransitionResume(Landroid/transition/Transition;)V
+HSPLandroid/transition/Transition$TransitionListener;->onTransitionStart(Landroid/transition/Transition;)V
+HSPLandroid/transition/Transition;-><init>()V
+HSPLandroid/transition/Transition;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/transition/Transition;->addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;
+HSPLandroid/transition/Transition;->addTarget(Landroid/view/View;)Landroid/transition/Transition;
+HSPLandroid/transition/Transition;->captureEndValues(Landroid/transition/TransitionValues;)V
+HSPLandroid/transition/Transition;->captureStartValues(Landroid/transition/TransitionValues;)V
+HSPLandroid/transition/Transition;->setDuration(J)Landroid/transition/Transition;
+HSPLandroid/transition/Transition;->setInterpolator(Landroid/animation/TimeInterpolator;)Landroid/transition/Transition;
+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;
+HSPLandroid/transition/TransitionInflater;->from(Landroid/content/Context;)Landroid/transition/TransitionInflater;
+HSPLandroid/transition/TransitionInflater;->inflateTransition(I)Landroid/transition/Transition;
+HSPLandroid/transition/TransitionManager;-><init>()V
+HSPLandroid/transition/TransitionManager;->beginDelayedTransition(Landroid/view/ViewGroup;)V
+HSPLandroid/transition/TransitionManager;->beginDelayedTransition(Landroid/view/ViewGroup;Landroid/transition/Transition;)V
+HSPLandroid/transition/TransitionManager;->endTransitions(Landroid/view/ViewGroup;)V
+HSPLandroid/transition/TransitionManager;->getRunningTransitions()Landroid/util/ArrayMap;
+HSPLandroid/transition/TransitionSet;-><init>()V
+HSPLandroid/transition/TransitionSet;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/transition/TransitionSet;->addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/TransitionSet;
+HSPLandroid/transition/TransitionSet;->addTarget(Landroid/view/View;)Landroid/transition/TransitionSet;
+HSPLandroid/transition/TransitionSet;->addTransition(Landroid/transition/Transition;)Landroid/transition/TransitionSet;
+HSPLandroid/transition/TransitionSet;->getTransitionCount()I
+HSPLandroid/transition/TransitionSet;->setDuration(J)Landroid/transition/TransitionSet;
+HSPLandroid/transition/TransitionSet;->setInterpolator(Landroid/animation/TimeInterpolator;)Landroid/transition/TransitionSet;
+HSPLandroid/transition/TransitionSet;->setOrdering(I)Landroid/transition/TransitionSet;
+HSPLandroid/transition/TransitionValuesMaps;-><init>()V
+HSPLandroid/transition/Visibility;-><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>(Ljava/lang/String;)V
+HSPLandroid/util/AndroidRuntimeException;-><init>(Ljava/lang/String;)V
+HSPLandroid/util/ArrayMap$1;-><init>(Landroid/util/ArrayMap;)V
+HSPLandroid/util/ArrayMap$1;->colGetEntry(II)Ljava/lang/Object;
+HSPLandroid/util/ArrayMap$1;->colGetSize()I
+HSPLandroid/util/ArrayMap;-><init>()V
+HSPLandroid/util/ArrayMap;-><init>(I)V
+HSPLandroid/util/ArrayMap;-><init>(IZ)V
+HSPLandroid/util/ArrayMap;-><init>(Landroid/util/ArrayMap;)V
+HSPLandroid/util/ArrayMap;->allocArrays(I)V
+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;->containsKey(Ljava/lang/Object;)Z
+HSPLandroid/util/ArrayMap;->ensureCapacity(I)V
+HSPLandroid/util/ArrayMap;->entrySet()Ljava/util/Set;
+HSPLandroid/util/ArrayMap;->erase()V
+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;->indexOf(Ljava/lang/Object;I)I
+HSPLandroid/util/ArrayMap;->indexOfKey(Ljava/lang/Object;)I
+HSPLandroid/util/ArrayMap;->indexOfNull()I
+HSPLandroid/util/ArrayMap;->isEmpty()Z
+HSPLandroid/util/ArrayMap;->keyAt(I)Ljava/lang/Object;
+HSPLandroid/util/ArrayMap;->keySet()Ljava/util/Set;
+HSPLandroid/util/ArrayMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/util/ArrayMap;->putAll(Landroid/util/ArrayMap;)V
+HSPLandroid/util/ArrayMap;->putAll(Ljava/util/Map;)V
+HSPLandroid/util/ArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/util/ArrayMap;->removeAt(I)Ljava/lang/Object;
+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;-><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;->add(Ljava/lang/Object;)Z
+HSPLandroid/util/ArraySet;->addAll(Landroid/util/ArraySet;)V
+HSPLandroid/util/ArraySet;->addAll(Ljava/util/Collection;)Z
+HSPLandroid/util/ArraySet;->allocArrays(I)V
+HSPLandroid/util/ArraySet;->append(Ljava/lang/Object;)V
+HSPLandroid/util/ArraySet;->clear()V
+HSPLandroid/util/ArraySet;->contains(Ljava/lang/Object;)Z
+HSPLandroid/util/ArraySet;->ensureCapacity(I)V
+HSPLandroid/util/ArraySet;->equals(Ljava/lang/Object;)Z
+HSPLandroid/util/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V
+HSPLandroid/util/ArraySet;->getCollection()Landroid/util/MapCollections;
+HSPLandroid/util/ArraySet;->indexOf(Ljava/lang/Object;)I
+HSPLandroid/util/ArraySet;->indexOf(Ljava/lang/Object;I)I
+HSPLandroid/util/ArraySet;->indexOfNull()I
+HSPLandroid/util/ArraySet;->isEmpty()Z
+HSPLandroid/util/ArraySet;->iterator()Ljava/util/Iterator;
+HSPLandroid/util/ArraySet;->remove(Ljava/lang/Object;)Z
+HSPLandroid/util/ArraySet;->removeAt(I)Ljava/lang/Object;
+HSPLandroid/util/ArraySet;->retainAll(Ljava/util/Collection;)Z
+HSPLandroid/util/ArraySet;->size()I
+HSPLandroid/util/ArraySet;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLandroid/util/ArraySet;->valueAt(I)Ljava/lang/Object;
+HSPLandroid/util/AtomicFile;-><init>(Ljava/io/File;)V
+HSPLandroid/util/AtomicFile;->getBaseFile()Ljava/io/File;
+HSPLandroid/util/AtomicFile;->openRead()Ljava/io/FileInputStream;
+HSPLandroid/util/AttributeSet;->getAttributeBooleanValue(IZ)Z
+HSPLandroid/util/AttributeSet;->getAttributeBooleanValue(Ljava/lang/String;Ljava/lang/String;Z)Z
+HSPLandroid/util/AttributeSet;->getAttributeCount()I
+HSPLandroid/util/AttributeSet;->getAttributeFloatValue(IF)F
+HSPLandroid/util/AttributeSet;->getAttributeFloatValue(Ljava/lang/String;Ljava/lang/String;F)F
+HSPLandroid/util/AttributeSet;->getAttributeIntValue(II)I
+HSPLandroid/util/AttributeSet;->getAttributeIntValue(Ljava/lang/String;Ljava/lang/String;I)I
+HSPLandroid/util/AttributeSet;->getAttributeListValue(I[Ljava/lang/String;I)I
+HSPLandroid/util/AttributeSet;->getAttributeListValue(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;I)I
+HSPLandroid/util/AttributeSet;->getAttributeName(I)Ljava/lang/String;
+HSPLandroid/util/AttributeSet;->getAttributeNameResource(I)I
+HSPLandroid/util/AttributeSet;->getAttributeResourceValue(II)I
+HSPLandroid/util/AttributeSet;->getAttributeResourceValue(Ljava/lang/String;Ljava/lang/String;I)I
+HSPLandroid/util/AttributeSet;->getAttributeUnsignedIntValue(II)I
+HSPLandroid/util/AttributeSet;->getAttributeUnsignedIntValue(Ljava/lang/String;Ljava/lang/String;I)I
+HSPLandroid/util/AttributeSet;->getAttributeValue(I)Ljava/lang/String;
+HSPLandroid/util/AttributeSet;->getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/util/AttributeSet;->getClassAttribute()Ljava/lang/String;
+HSPLandroid/util/AttributeSet;->getIdAttribute()Ljava/lang/String;
+HSPLandroid/util/AttributeSet;->getIdAttributeResourceValue(I)I
+HSPLandroid/util/AttributeSet;->getPositionDescription()Ljava/lang/String;
+HSPLandroid/util/AttributeSet;->getStyleAttribute()I
+HSPLandroid/util/Base64$Coder;-><init>()V
+HSPLandroid/util/Base64$Coder;->maxOutputSize(I)I
+HSPLandroid/util/Base64$Coder;->process([BIIZ)Z
+HSPLandroid/util/Base64$Decoder;-><init>(I[B)V
+HSPLandroid/util/Base64$Decoder;->process([BIIZ)Z
+HSPLandroid/util/Base64$Encoder;-><init>(I[B)V
+HSPLandroid/util/Base64$Encoder;->process([BIIZ)Z
+HSPLandroid/util/Base64;->decode(Ljava/lang/String;I)[B
+HSPLandroid/util/Base64;->decode([BI)[B
+HSPLandroid/util/Base64;->decode([BIII)[B
+HSPLandroid/util/Base64;->encode([BI)[B
+HSPLandroid/util/Base64;->encode([BIII)[B
+HSPLandroid/util/Base64;->encodeToString([BI)Ljava/lang/String;
+HSPLandroid/util/ContainerHelpers;->binarySearch([III)I
+HSPLandroid/util/ContainerHelpers;->binarySearch([JIJ)I
+HSPLandroid/util/DebugUtils;->buildShortClassTag(Ljava/lang/Object;Ljava/lang/StringBuilder;)V
+HSPLandroid/util/DebugUtils;->flagsToString(Ljava/lang/Class;Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/util/DebugUtils;->valueToString(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/FastImmutableArraySet$FastIterator;-><init>([Ljava/lang/Object;)V
+HSPLandroid/util/FastImmutableArraySet$FastIterator;->hasNext()Z
+HSPLandroid/util/FastImmutableArraySet$FastIterator;->next()Ljava/lang/Object;
+HSPLandroid/util/FastImmutableArraySet;-><init>([Ljava/lang/Object;)V
+HSPLandroid/util/FastImmutableArraySet;->iterator()Ljava/util/Iterator;
+HSPLandroid/util/FloatProperty;-><init>(Ljava/lang/String;)V
+HSPLandroid/util/IconDrawableFactory;-><init>(Landroid/content/Context;Z)V
+HSPLandroid/util/IconDrawableFactory;->newInstance(Landroid/content/Context;)Landroid/util/IconDrawableFactory;
+HSPLandroid/util/IntArray;-><init>()V
+HSPLandroid/util/IntArray;-><init>(I)V
+HSPLandroid/util/IntArray;->add(I)V
+HSPLandroid/util/IntArray;->add(II)V
+HSPLandroid/util/IntArray;->binarySearch(I)I
+HSPLandroid/util/IntArray;->checkBounds(I)V
+HSPLandroid/util/IntArray;->clear()V
+HSPLandroid/util/IntArray;->ensureCapacity(I)V
+HSPLandroid/util/IntArray;->get(I)I
+HSPLandroid/util/IntArray;->size()I
+HSPLandroid/util/IntProperty;-><init>(Ljava/lang/String;)V
+HSPLandroid/util/JsonReader;->-getandroid-util-JsonScopeSwitchesValues()[I
+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;->endObject()V
+HSPLandroid/util/JsonReader;->expect(Landroid/util/JsonToken;)V
+HSPLandroid/util/JsonReader;->fillBuffer(I)Z
+HSPLandroid/util/JsonReader;->hasNext()Z
+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;->nextName()Ljava/lang/String;
+HSPLandroid/util/JsonReader;->nextNonWhitespace()I
+HSPLandroid/util/JsonReader;->nextString()Ljava/lang/String;
+HSPLandroid/util/JsonReader;->nextString(C)Ljava/lang/String;
+HSPLandroid/util/JsonReader;->nextValue()Landroid/util/JsonToken;
+HSPLandroid/util/JsonReader;->objectValue()Landroid/util/JsonToken;
+HSPLandroid/util/JsonReader;->peek()Landroid/util/JsonToken;
+HSPLandroid/util/JsonReader;->peekStack()Landroid/util/JsonScope;
+HSPLandroid/util/JsonReader;->pop()Landroid/util/JsonScope;
+HSPLandroid/util/JsonReader;->push(Landroid/util/JsonScope;)V
+HSPLandroid/util/JsonReader;->readEscapeCharacter()C
+HSPLandroid/util/JsonReader;->readLiteral()Landroid/util/JsonToken;
+HSPLandroid/util/JsonReader;->replaceTop(Landroid/util/JsonScope;)V
+HSPLandroid/util/JsonScope;-><init>(Ljava/lang/String;I)V
+HSPLandroid/util/JsonScope;->values()[Landroid/util/JsonScope;
+HSPLandroid/util/JsonToken;-><init>(Ljava/lang/String;I)V
+HSPLandroid/util/KeyValueListParser;-><init>(C)V
+HSPLandroid/util/LauncherIcons;-><init>(Landroid/content/Context;)V
+HSPLandroid/util/LocalLog;-><init>(I)V
+HSPLandroid/util/LocalLog;->append(Ljava/lang/String;)V
+HSPLandroid/util/LocalLog;->log(Ljava/lang/String;)V
+HSPLandroid/util/Log$ImmediateLogWriter;-><init>(IILjava/lang/String;)V
+HSPLandroid/util/Log$ImmediateLogWriter;->flush()V
+HSPLandroid/util/Log$ImmediateLogWriter;->getWritten()I
+HSPLandroid/util/Log$ImmediateLogWriter;->write([CII)V
+HSPLandroid/util/Log$TerribleFailureHandler;->onTerribleFailure(Ljava/lang/String;Landroid/util/Log$TerribleFailure;Z)V
+HSPLandroid/util/Log;->-wrap0()I
+HSPLandroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)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;->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
+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
+HSPLandroid/util/LongArray;->checkBounds(I)V
+HSPLandroid/util/LongArray;->clear()V
+HSPLandroid/util/LongArray;->ensureCapacity(I)V
+HSPLandroid/util/LongArray;->get(I)J
+HSPLandroid/util/LongArray;->size()I
+HSPLandroid/util/LongSparseArray;-><init>()V
+HSPLandroid/util/LongSparseArray;-><init>(I)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;->put(JLjava/lang/Object;)V
+HSPLandroid/util/LongSparseArray;->size()I
+HSPLandroid/util/LongSparseArray;->valueAt(I)Ljava/lang/Object;
+HSPLandroid/util/LongSparseLongArray;-><init>()V
+HSPLandroid/util/LongSparseLongArray;-><init>(I)V
+HSPLandroid/util/LongSparseLongArray;->append(JJ)V
+HSPLandroid/util/LongSparseLongArray;->clear()V
+HSPLandroid/util/LongSparseLongArray;->clone()Landroid/util/LongSparseLongArray;
+HSPLandroid/util/LongSparseLongArray;->get(JJ)J
+HSPLandroid/util/LongSparseLongArray;->indexOfKey(J)I
+HSPLandroid/util/LongSparseLongArray;->put(JJ)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;->evictAll()V
+HSPLandroid/util/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/util/LruCache;->hitCount()I
+HSPLandroid/util/LruCache;->missCount()I
+HSPLandroid/util/LruCache;->put(Ljava/lang/Object;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;->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$EntrySet;-><init>(Landroid/util/MapCollections;)V
+HSPLandroid/util/MapCollections$EntrySet;->iterator()Ljava/util/Iterator;
+HSPLandroid/util/MapCollections$KeySet;-><init>(Landroid/util/MapCollections;)V
+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$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;->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;-><init>()V
+HSPLandroid/util/MapCollections;->colClear()V
+HSPLandroid/util/MapCollections;->colGetEntry(II)Ljava/lang/Object;
+HSPLandroid/util/MapCollections;->colGetMap()Ljava/util/Map;
+HSPLandroid/util/MapCollections;->colGetSize()I
+HSPLandroid/util/MapCollections;->colIndexOfKey(Ljava/lang/Object;)I
+HSPLandroid/util/MapCollections;->colIndexOfValue(Ljava/lang/Object;)I
+HSPLandroid/util/MapCollections;->colPut(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroid/util/MapCollections;->colRemoveAt(I)V
+HSPLandroid/util/MapCollections;->colSetValue(ILjava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/util/MapCollections;->getEntrySet()Ljava/util/Set;
+HSPLandroid/util/MapCollections;->getKeySet()Ljava/util/Set;
+HSPLandroid/util/MapCollections;->getValues()Ljava/util/Collection;
+HSPLandroid/util/MapCollections;->toArrayHelper(I)[Ljava/lang/Object;
+HSPLandroid/util/MathUtils;->addOrThrow(II)I
+HSPLandroid/util/MathUtils;->constrain(FFF)F
+HSPLandroid/util/MathUtils;->constrain(III)I
+HSPLandroid/util/MathUtils;->lerp(FFF)F
+HSPLandroid/util/MathUtils;->map(FFFFF)F
+HSPLandroid/util/MemoryIntArray$1;-><init>()V
+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>(Landroid/os/Parcel;)V
+HSPLandroid/util/MemoryIntArray;-><init>(Landroid/os/Parcel;Landroid/util/MemoryIntArray;)V
+HSPLandroid/util/MemoryIntArray;->enforceNotClosed()V
+HSPLandroid/util/MemoryIntArray;->enforceValidIndex(I)V
+HSPLandroid/util/MemoryIntArray;->get(I)I
+HSPLandroid/util/MemoryIntArray;->isClosed()Z
+HSPLandroid/util/MemoryIntArray;->size()I
+HSPLandroid/util/MergedConfiguration$1;-><init>()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
+HSPLandroid/util/MergedConfiguration;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/util/MergedConfiguration;-><init>(Landroid/os/Parcel;Landroid/util/MergedConfiguration;)V
+HSPLandroid/util/MergedConfiguration;->equals(Ljava/lang/Object;)Z
+HSPLandroid/util/MergedConfiguration;->getGlobalConfiguration()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
+HSPLandroid/util/MergedConfiguration;->updateMergedConfig()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
+HSPLandroid/util/NtpTrustedTime;->forceRefresh()Z
+HSPLandroid/util/NtpTrustedTime;->getCachedNtpTime()J
+HSPLandroid/util/NtpTrustedTime;->getCachedNtpTimeReference()J
+HSPLandroid/util/NtpTrustedTime;->getInstance(Landroid/content/Context;)Landroid/util/NtpTrustedTime;
+HSPLandroid/util/NtpTrustedTime;->hasCache()Z
+HSPLandroid/util/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroid/util/Pair;->create(Ljava/lang/Object;Ljava/lang/Object;)Landroid/util/Pair;
+HSPLandroid/util/Pair;->equals(Ljava/lang/Object;)Z
+HSPLandroid/util/Pair;->hashCode()I
+HSPLandroid/util/Pair;->toString()Ljava/lang/String;
+HSPLandroid/util/PathParser$PathData;-><init>()V
+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
+HSPLandroid/util/PathParser$PathData;->getNativePtr()J
+HSPLandroid/util/PathParser;->-wrap0()J
+HSPLandroid/util/PathParser;->-wrap1(Ljava/lang/String;I)J
+HSPLandroid/util/PathParser;->-wrap2(J)J
+HSPLandroid/util/PathParser;->-wrap3(J)V
+HSPLandroid/util/PathParser;->canMorph(Landroid/util/PathParser$PathData;Landroid/util/PathParser$PathData;)Z
+HSPLandroid/util/PathParser;->createPathFromPathData(Ljava/lang/String;)Landroid/graphics/Path;
+HSPLandroid/util/PathParser;->interpolatePathData(Landroid/util/PathParser$PathData;Landroid/util/PathParser$PathData;Landroid/util/PathParser$PathData;F)Z
+HSPLandroid/util/Pools$SimplePool;-><init>(I)V
+HSPLandroid/util/Pools$SimplePool;->acquire()Ljava/lang/Object;
+HSPLandroid/util/Pools$SimplePool;->isInPool(Ljava/lang/Object;)Z
+HSPLandroid/util/Pools$SimplePool;->release(Ljava/lang/Object;)Z
+HSPLandroid/util/Pools$SynchronizedPool;-><init>(I)V
+HSPLandroid/util/Pools$SynchronizedPool;->acquire()Ljava/lang/Object;
+HSPLandroid/util/Pools$SynchronizedPool;->release(Ljava/lang/Object;)Z
+HSPLandroid/util/Printer;->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
+HSPLandroid/util/Range;->clamp(Ljava/lang/Comparable;)Ljava/lang/Comparable;
+HSPLandroid/util/Range;->contains(Ljava/lang/Comparable;)Z
+HSPLandroid/util/Range;->create(Ljava/lang/Comparable;Ljava/lang/Comparable;)Landroid/util/Range;
+HSPLandroid/util/Range;->equals(Ljava/lang/Object;)Z
+HSPLandroid/util/Range;->getLower()Ljava/lang/Comparable;
+HSPLandroid/util/Range;->getUpper()Ljava/lang/Comparable;
+HSPLandroid/util/Range;->hashCode()I
+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
+HSPLandroid/util/Rational;->equals(Landroid/util/Rational;)Z
+HSPLandroid/util/Rational;->floatValue()F
+HSPLandroid/util/Rational;->gcd(II)I
+HSPLandroid/util/Rational;->getDenominator()I
+HSPLandroid/util/Rational;->getNumerator()I
+HSPLandroid/util/Rational;->isNaN()Z
+HSPLandroid/util/Rational;->isNegInf()Z
+HSPLandroid/util/Rational;->isPosInf()Z
+HSPLandroid/util/Singleton;-><init>()V
+HSPLandroid/util/Singleton;->get()Ljava/lang/Object;
+HSPLandroid/util/Size;-><init>(II)V
+HSPLandroid/util/Size;->equals(Ljava/lang/Object;)Z
+HSPLandroid/util/Size;->getHeight()I
+HSPLandroid/util/Size;->getWidth()I
+HSPLandroid/util/Size;->hashCode()I
+HSPLandroid/util/Size;->parseSize(Ljava/lang/String;)Landroid/util/Size;
+HSPLandroid/util/Size;->toString()Ljava/lang/String;
+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;->i(Ljava/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/SparseArray;-><init>()V
+HSPLandroid/util/SparseArray;-><init>(I)V
+HSPLandroid/util/SparseArray;->append(ILjava/lang/Object;)V
+HSPLandroid/util/SparseArray;->clear()V
+HSPLandroid/util/SparseArray;->clone()Landroid/util/SparseArray;
+HSPLandroid/util/SparseArray;->delete(I)V
+HSPLandroid/util/SparseArray;->gc()V
+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;->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;->setValueAt(ILjava/lang/Object;)V
+HSPLandroid/util/SparseArray;->size()I
+HSPLandroid/util/SparseArray;->valueAt(I)Ljava/lang/Object;
+HSPLandroid/util/SparseBooleanArray;-><init>()V
+HSPLandroid/util/SparseBooleanArray;-><init>(I)V
+HSPLandroid/util/SparseBooleanArray;->append(IZ)V
+HSPLandroid/util/SparseBooleanArray;->clear()V
+HSPLandroid/util/SparseBooleanArray;->get(I)Z
+HSPLandroid/util/SparseBooleanArray;->get(IZ)Z
+HSPLandroid/util/SparseBooleanArray;->indexOfKey(I)I
+HSPLandroid/util/SparseBooleanArray;->indexOfValue(Z)I
+HSPLandroid/util/SparseBooleanArray;->keyAt(I)I
+HSPLandroid/util/SparseBooleanArray;->put(IZ)V
+HSPLandroid/util/SparseBooleanArray;->size()I
+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;
+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;->keyAt(I)I
+HSPLandroid/util/SparseIntArray;->put(II)V
+HSPLandroid/util/SparseIntArray;->removeAt(I)V
+HSPLandroid/util/SparseIntArray;->size()I
+HSPLandroid/util/SparseIntArray;->valueAt(I)I
+HSPLandroid/util/SparseLongArray;-><init>()V
+HSPLandroid/util/SparseLongArray;-><init>(I)V
+HSPLandroid/util/SparseLongArray;->get(I)J
+HSPLandroid/util/SparseLongArray;->get(IJ)J
+HSPLandroid/util/SparseLongArray;->put(IJ)V
+HSPLandroid/util/SparseLongArray;->size()I
+HSPLandroid/util/StateSet;->get(I)[I
+HSPLandroid/util/StateSet;->stateSetMatches([I[I)Z
+HSPLandroid/util/StateSet;->trimStateSet([II)[I
+HSPLandroid/util/TimeUtils;->formatDuration(JLjava/lang/StringBuilder;)V
+HSPLandroid/util/TimeUtils;->formatDurationLocked(JI)I
+HSPLandroid/util/TimeUtils;->getTimeZoneDatabaseVersion()Ljava/lang/String;
+HSPLandroid/util/TimeUtils;->printFieldLocked([CICIZI)I
+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;->logDuration(Ljava/lang/String;J)V
+HSPLandroid/util/TimingsTraceLog;->traceBegin(Ljava/lang/String;)V
+HSPLandroid/util/TimingsTraceLog;->traceEnd()V
+HSPLandroid/util/TrustedTime;->currentTimeMillis()J
+HSPLandroid/util/TrustedTime;->forceRefresh()Z
+HSPLandroid/util/TrustedTime;->getCacheAge()J
+HSPLandroid/util/TrustedTime;->getCacheCertainty()J
+HSPLandroid/util/TrustedTime;->hasCache()Z
+HSPLandroid/util/TypedValue;-><init>()V
+HSPLandroid/util/TypedValue;->applyDimension(IFLandroid/util/DisplayMetrics;)F
+HSPLandroid/util/TypedValue;->coerceToString()Ljava/lang/CharSequence;
+HSPLandroid/util/TypedValue;->coerceToString(II)Ljava/lang/String;
+HSPLandroid/util/TypedValue;->complexToDimension(ILandroid/util/DisplayMetrics;)F
+HSPLandroid/util/TypedValue;->complexToDimensionPixelOffset(ILandroid/util/DisplayMetrics;)I
+HSPLandroid/util/TypedValue;->complexToDimensionPixelSize(ILandroid/util/DisplayMetrics;)I
+HSPLandroid/util/TypedValue;->complexToFloat(I)F
+HSPLandroid/util/TypedValue;->complexToFraction(IFF)F
+HSPLandroid/util/TypedValue;->getDimension(Landroid/util/DisplayMetrics;)F
+HSPLandroid/util/TypedValue;->getFloat()F
+HSPLandroid/util/TypedValue;->getFraction(FF)F
+HSPLandroid/util/Xml;->asAttributeSet(Lorg/xmlpull/v1/XmlPullParser;)Landroid/util/AttributeSet;
+HSPLandroid/util/Xml;->newPullParser()Lorg/xmlpull/v1/XmlPullParser;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$ByteBufferDataSource;-><init>(Ljava/nio/ByteBuffer;)V
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$ByteBufferDataSource;->feedIntoMessageDigests([Ljava/security/MessageDigest;JI)V
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$ByteBufferDataSource;->size()J
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$MemoryMappedFileDataSource;-><init>(Ljava/io/FileDescriptor;JJ)V
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$MemoryMappedFileDataSource;->feedIntoMessageDigests([Ljava/security/MessageDigest;JI)V
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$MemoryMappedFileDataSource;->size()J
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;->-get0(Landroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;)J
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;->-get1(Landroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;)J
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;->-get2(Landroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;)Ljava/nio/ByteBuffer;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;->-get3(Landroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;)J
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;->-get4(Landroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;)Ljava/nio/ByteBuffer;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;-><init>(Ljava/nio/ByteBuffer;JJJLjava/nio/ByteBuffer;)V
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;-><init>(Ljava/nio/ByteBuffer;JJJLjava/nio/ByteBuffer;Landroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;)V
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$VerbatimX509Certificate;-><init>(Ljava/security/cert/X509Certificate;[B)V
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$VerbatimX509Certificate;->getEncoded()[B
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$WrappedX509Certificate;-><init>(Ljava/security/cert/X509Certificate;)V
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier$WrappedX509Certificate;->getPublicKey()Ljava/security/PublicKey;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->checkByteOrderLittleEndian(Ljava/nio/ByteBuffer;)V
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->computeContentDigests([I[Landroid/util/apk/ApkSignatureSchemeV2Verifier$DataSource;)[[B
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->findApkSignatureSchemeV2Block(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->findApkSigningBlock(Ljava/io/RandomAccessFile;J)Landroid/util/Pair;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->findSignature(Ljava/io/RandomAccessFile;)Landroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->getByteBuffer(Ljava/nio/ByteBuffer;I)Ljava/nio/ByteBuffer;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->getCentralDirOffset(Ljava/nio/ByteBuffer;J)J
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->getChunkCount(J)J
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->getContentDigestAlgorithmJcaDigestAlgorithm(I)Ljava/lang/String;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->getContentDigestAlgorithmOutputSizeBytes(I)I
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->getEocd(Ljava/io/RandomAccessFile;)Landroid/util/Pair;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->getLengthPrefixedSlice(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->getSignatureAlgorithmContentDigestAlgorithm(I)I
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->getSignatureAlgorithmJcaKeyAlgorithm(I)Ljava/lang/String;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->getSignatureAlgorithmJcaSignatureAlgorithm(I)Landroid/util/Pair;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->isSupportedSignatureAlgorithm(I)Z
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->readLengthPrefixedByteArray(Ljava/nio/ByteBuffer;)[B
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->setUnsignedInt32LittleEndian(I[BI)V
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->sliceFromTo(Ljava/nio/ByteBuffer;II)Ljava/nio/ByteBuffer;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->verify(Ljava/io/FileDescriptor;Landroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;)[[Ljava/security/cert/X509Certificate;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->verify(Ljava/io/RandomAccessFile;)[[Ljava/security/cert/X509Certificate;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->verify(Ljava/lang/String;)[[Ljava/security/cert/X509Certificate;
+HSPLandroid/util/apk/ApkSignatureSchemeV2Verifier;->verifyIntegrity(Ljava/util/Map;Ljava/io/FileDescriptor;JJJLjava/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/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;-><init>(Ljava/lang/String;Ljava/io/FileDescriptor;ZZ)V
+HSPLandroid/util/jar/StrictJarFile;-><init>(Ljava/lang/String;ZZ)V
+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/view/-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$1;->$m$0(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLandroid/view/-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$1;->$m$1(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLandroid/view/-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$1;-><init>(BLjava/lang/Object;)V
+HSPLandroid/view/-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLandroid/view/-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk;-><init>(B)V
+HSPLandroid/view/-$Lambda$XmA8Y30pNAdQP9ujRlGx1qfDHH8;->$m$0()V
+HSPLandroid/view/-$Lambda$XmA8Y30pNAdQP9ujRlGx1qfDHH8;->$m$1()V
+HSPLandroid/view/-$Lambda$XmA8Y30pNAdQP9ujRlGx1qfDHH8;-><init>(BLjava/lang/Object;)V
+HSPLandroid/view/-$Lambda$XmA8Y30pNAdQP9ujRlGx1qfDHH8;->run()V
+HSPLandroid/view/AbsSavedState$1;-><init>()V
+HSPLandroid/view/AbsSavedState$2;-><init>()V
+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;-><init>()V
+HSPLandroid/view/AbsSavedState;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V
+HSPLandroid/view/AbsSavedState;-><init>(Landroid/os/Parcelable;)V
+HSPLandroid/view/AbsSavedState;-><init>(Landroid/view/AbsSavedState;)V
+HSPLandroid/view/AbsSavedState;->getSuperState()Landroid/os/Parcelable;
+HSPLandroid/view/AbsSavedState;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/AccessibilityInteractionController$AccessibilityNodePrefetcher;-><init>(Landroid/view/AccessibilityInteractionController;)V
+HSPLandroid/view/AccessibilityInteractionController$AccessibilityNodePrefetcher;-><init>(Landroid/view/AccessibilityInteractionController;Landroid/view/AccessibilityInteractionController$AccessibilityNodePrefetcher;)V
+HSPLandroid/view/AccessibilityInteractionController$AccessibilityNodePrefetcher;->prefetchAccessibilityNodeInfos(Landroid/view/View;IILjava/util/List;Landroid/os/Bundle;)V
+HSPLandroid/view/AccessibilityInteractionController$AccessibilityNodePrefetcher;->prefetchDescendantsOfRealNode(Landroid/view/View;Ljava/util/List;)V
+HSPLandroid/view/AccessibilityInteractionController$PrivateHandler;-><init>(Landroid/view/AccessibilityInteractionController;Landroid/os/Looper;)V
+HSPLandroid/view/AccessibilityInteractionController$PrivateHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/view/AccessibilityInteractionController;->-wrap0(Landroid/view/AccessibilityInteractionController;Landroid/view/View;)Z
+HSPLandroid/view/AccessibilityInteractionController;->-wrap1(Landroid/view/AccessibilityInteractionController;Landroid/os/Message;)V
+HSPLandroid/view/AccessibilityInteractionController;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/AccessibilityInteractionController;->adjustIsVisibleToUserIfNeeded(Landroid/view/accessibility/AccessibilityNodeInfo;Landroid/graphics/Region;)V
+HSPLandroid/view/AccessibilityInteractionController;->adjustIsVisibleToUserIfNeeded(Ljava/util/List;Landroid/graphics/Region;)V
+HSPLandroid/view/AccessibilityInteractionController;->applyAppScaleAndMagnificationSpecIfNeeded(Ljava/util/List;Landroid/view/MagnificationSpec;)V
+HSPLandroid/view/AccessibilityInteractionController;->findAccessibilityNodeInfoByAccessibilityIdClientThread(JLandroid/graphics/Region;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIJLandroid/view/MagnificationSpec;Landroid/os/Bundle;)V
+HSPLandroid/view/AccessibilityInteractionController;->findAccessibilityNodeInfoByAccessibilityIdUiThread(Landroid/os/Message;)V
+HSPLandroid/view/AccessibilityInteractionController;->holdOffMessageIfNeeded(Landroid/os/Message;IJ)Z
+HSPLandroid/view/AccessibilityInteractionController;->isShown(Landroid/view/View;)Z
+HSPLandroid/view/AccessibilityInteractionController;->recycleMagnificationSpecAndRegionIfNeeded(Landroid/view/MagnificationSpec;Landroid/graphics/Region;)V
+HSPLandroid/view/AccessibilityInteractionController;->scheduleMessage(Landroid/os/Message;IJZ)V
+HSPLandroid/view/AccessibilityInteractionController;->shouldApplyAppScaleAndMagnificationSpec(FLandroid/view/MagnificationSpec;)Z
+HSPLandroid/view/AccessibilityInteractionController;->updateInfosForViewportAndReturnFindNodeResult(Ljava/util/List;Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;ILandroid/view/MagnificationSpec;Landroid/graphics/Region;)V
+HSPLandroid/view/ActionMode$Callback2;-><init>()V
+HSPLandroid/view/ActionMode$Callback;->onActionItemClicked(Landroid/view/ActionMode;Landroid/view/MenuItem;)Z
+HSPLandroid/view/ActionMode$Callback;->onCreateActionMode(Landroid/view/ActionMode;Landroid/view/Menu;)Z
+HSPLandroid/view/ActionMode$Callback;->onDestroyActionMode(Landroid/view/ActionMode;)V
+HSPLandroid/view/ActionMode$Callback;->onPrepareActionMode(Landroid/view/ActionMode;Landroid/view/Menu;)Z
+HSPLandroid/view/ActionMode;-><init>()V
+HSPLandroid/view/ActionMode;->finish()V
+HSPLandroid/view/ActionMode;->getCustomView()Landroid/view/View;
+HSPLandroid/view/ActionMode;->getMenu()Landroid/view/Menu;
+HSPLandroid/view/ActionMode;->getMenuInflater()Landroid/view/MenuInflater;
+HSPLandroid/view/ActionMode;->getSubtitle()Ljava/lang/CharSequence;
+HSPLandroid/view/ActionMode;->getTitle()Ljava/lang/CharSequence;
+HSPLandroid/view/ActionMode;->invalidate()V
+HSPLandroid/view/ActionMode;->setCustomView(Landroid/view/View;)V
+HSPLandroid/view/ActionMode;->setSubtitle(I)V
+HSPLandroid/view/ActionMode;->setSubtitle(Ljava/lang/CharSequence;)V
+HSPLandroid/view/ActionMode;->setTitle(I)V
+HSPLandroid/view/ActionMode;->setTitle(Ljava/lang/CharSequence;)V
+HSPLandroid/view/ActionProvider$SubUiVisibilityListener;->onSubUiVisibilityChanged(Z)V
+HSPLandroid/view/BatchedInputEventReceiver$BatchedInputRunnable;-><init>(Landroid/view/BatchedInputEventReceiver;)V
+HSPLandroid/view/BatchedInputEventReceiver$BatchedInputRunnable;-><init>(Landroid/view/BatchedInputEventReceiver;Landroid/view/BatchedInputEventReceiver$BatchedInputRunnable;)V
+HSPLandroid/view/BatchedInputEventReceiver;-><init>(Landroid/view/InputChannel;Landroid/os/Looper;Landroid/view/Choreographer;)V
+HSPLandroid/view/Choreographer$1;-><init>()V
+HSPLandroid/view/Choreographer$1;->initialValue()Landroid/view/Choreographer;
+HSPLandroid/view/Choreographer$1;->initialValue()Ljava/lang/Object;
+HSPLandroid/view/Choreographer$2;-><init>()V
+HSPLandroid/view/Choreographer$2;->initialValue()Landroid/view/Choreographer;
+HSPLandroid/view/Choreographer$2;->initialValue()Ljava/lang/Object;
+HSPLandroid/view/Choreographer$3;-><init>()V
+HSPLandroid/view/Choreographer$CallbackQueue;-><init>(Landroid/view/Choreographer;)V
+HSPLandroid/view/Choreographer$CallbackQueue;-><init>(Landroid/view/Choreographer;Landroid/view/Choreographer$CallbackQueue;)V
+HSPLandroid/view/Choreographer$CallbackQueue;->addCallbackLocked(JLjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroid/view/Choreographer$CallbackQueue;->extractDueCallbacksLocked(J)Landroid/view/Choreographer$CallbackRecord;
+HSPLandroid/view/Choreographer$CallbackQueue;->removeCallbacksLocked(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroid/view/Choreographer$CallbackRecord;-><init>()V
+HSPLandroid/view/Choreographer$CallbackRecord;-><init>(Landroid/view/Choreographer$CallbackRecord;)V
+HSPLandroid/view/Choreographer$CallbackRecord;->run(J)V
+HSPLandroid/view/Choreographer$FrameCallback;->doFrame(J)V
+HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;-><init>(Landroid/view/Choreographer;Landroid/os/Looper;I)V
+HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;->onVsync(JII)V
+HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;->run()V
+HSPLandroid/view/Choreographer$FrameHandler;-><init>(Landroid/view/Choreographer;Landroid/os/Looper;)V
+HSPLandroid/view/Choreographer;->-get0()Ljava/lang/Object;
+HSPLandroid/view/Choreographer;->-get1(Landroid/view/Choreographer;)Landroid/view/Choreographer$FrameHandler;
+HSPLandroid/view/Choreographer;->-wrap0(Landroid/view/Choreographer;JLjava/lang/Object;Ljava/lang/Object;)Landroid/view/Choreographer$CallbackRecord;
+HSPLandroid/view/Choreographer;->-wrap1(Landroid/view/Choreographer;Landroid/view/Choreographer$CallbackRecord;)V
+HSPLandroid/view/Choreographer;-><init>(Landroid/os/Looper;I)V
+HSPLandroid/view/Choreographer;-><init>(Landroid/os/Looper;ILandroid/view/Choreographer;)V
+HSPLandroid/view/Choreographer;->doCallbacks(IJ)V
+HSPLandroid/view/Choreographer;->doFrame(JI)V
+HSPLandroid/view/Choreographer;->getFrameIntervalNanos()J
+HSPLandroid/view/Choreographer;->getFrameTime()J
+HSPLandroid/view/Choreographer;->getFrameTimeNanos()J
+HSPLandroid/view/Choreographer;->getInstance()Landroid/view/Choreographer;
+HSPLandroid/view/Choreographer;->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;
+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
+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;->scheduleFrameLocked(J)V
+HSPLandroid/view/Choreographer;->scheduleVsyncLocked()V
+HSPLandroid/view/ContextThemeWrapper;-><init>()V
+HSPLandroid/view/ContextThemeWrapper;-><init>(Landroid/content/Context;I)V
+HSPLandroid/view/ContextThemeWrapper;-><init>(Landroid/content/Context;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/view/ContextThemeWrapper;->applyOverrideConfiguration(Landroid/content/res/Configuration;)V
+HSPLandroid/view/ContextThemeWrapper;->attachBaseContext(Landroid/content/Context;)V
+HSPLandroid/view/ContextThemeWrapper;->getAssets()Landroid/content/res/AssetManager;
+HSPLandroid/view/ContextThemeWrapper;->getResources()Landroid/content/res/Resources;
+HSPLandroid/view/ContextThemeWrapper;->getResourcesInternal()Landroid/content/res/Resources;
+HSPLandroid/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme;
+HSPLandroid/view/ContextThemeWrapper;->initializeTheme()V
+HSPLandroid/view/ContextThemeWrapper;->onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)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$HdrCapabilities;)V
+HSPLandroid/view/Display$HdrCapabilities;-><init>([IFFF)V
+HSPLandroid/view/Display$HdrCapabilities;->hashCode()I
+HSPLandroid/view/Display$HdrCapabilities;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/view/Display$Mode$1;-><init>()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
+HSPLandroid/view/Display$Mode;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/Display$Mode;-><init>(Landroid/os/Parcel;Landroid/view/Display$Mode;)V
+HSPLandroid/view/Display$Mode;->equals(Ljava/lang/Object;)Z
+HSPLandroid/view/Display$Mode;->getModeId()I
+HSPLandroid/view/Display$Mode;->getPhysicalHeight()I
+HSPLandroid/view/Display$Mode;->getPhysicalWidth()I
+HSPLandroid/view/Display$Mode;->getRefreshRate()F
+HSPLandroid/view/Display$Mode;->toString()Ljava/lang/String;
+HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/content/res/Resources;)V
+HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;)V
+HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;Landroid/content/res/Resources;)V
+HSPLandroid/view/Display;->getAppVsyncOffsetNanos()J
+HSPLandroid/view/Display;->getCurrentSizeRange(Landroid/graphics/Point;Landroid/graphics/Point;)V
+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;->getHeight()I
+HSPLandroid/view/Display;->getMetrics(Landroid/util/DisplayMetrics;)V
+HSPLandroid/view/Display;->getPresentationDeadlineNanos()J
+HSPLandroid/view/Display;->getRealMetrics(Landroid/util/DisplayMetrics;)V
+HSPLandroid/view/Display;->getRealSize(Landroid/graphics/Point;)V
+HSPLandroid/view/Display;->getRefreshRate()F
+HSPLandroid/view/Display;->getRotation()I
+HSPLandroid/view/Display;->getSize(Landroid/graphics/Point;)V
+HSPLandroid/view/Display;->getState()I
+HSPLandroid/view/Display;->getType()I
+HSPLandroid/view/Display;->getWidth()I
+HSPLandroid/view/Display;->hasAccess(III)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;->typeToString(I)Ljava/lang/String;
+HSPLandroid/view/Display;->updateCachedAppSizeIfNeededLocked()V
+HSPLandroid/view/Display;->updateDisplayInfoLocked()V
+HSPLandroid/view/DisplayAdjustments;-><init>()V
+HSPLandroid/view/DisplayAdjustments;-><init>(Landroid/content/res/Configuration;)V
+HSPLandroid/view/DisplayAdjustments;-><init>(Landroid/view/DisplayAdjustments;)V
+HSPLandroid/view/DisplayAdjustments;->equals(Ljava/lang/Object;)Z
+HSPLandroid/view/DisplayAdjustments;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
+HSPLandroid/view/DisplayAdjustments;->getConfiguration()Landroid/content/res/Configuration;
+HSPLandroid/view/DisplayAdjustments;->hashCode()I
+HSPLandroid/view/DisplayAdjustments;->setCompatibilityInfo(Landroid/content/res/CompatibilityInfo;)V
+HSPLandroid/view/DisplayEventReceiver;-><init>(Landroid/os/Looper;I)V
+HSPLandroid/view/DisplayEventReceiver;->dispatchVsync(JII)V
+HSPLandroid/view/DisplayEventReceiver;->scheduleVsync()V
+HSPLandroid/view/DisplayInfo$1;-><init>()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;)V
+HSPLandroid/view/DisplayInfo;->copyFrom(Landroid/view/DisplayInfo;)V
+HSPLandroid/view/DisplayInfo;->equals(Landroid/view/DisplayInfo;)Z
+HSPLandroid/view/DisplayInfo;->findMode(I)Landroid/view/Display$Mode;
+HSPLandroid/view/DisplayInfo;->getAppMetrics(Landroid/util/DisplayMetrics;Landroid/view/DisplayAdjustments;)V
+HSPLandroid/view/DisplayInfo;->getLogicalMetrics(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;)V
+HSPLandroid/view/DisplayInfo;->getMetricsWithSize(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;II)V
+HSPLandroid/view/DisplayInfo;->getMode()Landroid/view/Display$Mode;
+HSPLandroid/view/DisplayInfo;->hasAccess(I)Z
+HSPLandroid/view/DisplayInfo;->isWideColorGamut()Z
+HSPLandroid/view/DisplayInfo;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/view/DisplayListCanvas;-><init>(Landroid/view/RenderNode;II)V
+HSPLandroid/view/DisplayListCanvas;->drawHardwareLayer(Landroid/view/HardwareLayer;)V
+HSPLandroid/view/DisplayListCanvas;->drawRenderNode(Landroid/view/RenderNode;)V
+HSPLandroid/view/DisplayListCanvas;->finishRecording()J
+HSPLandroid/view/DisplayListCanvas;->getHeight()I
+HSPLandroid/view/DisplayListCanvas;->getWidth()I
+HSPLandroid/view/DisplayListCanvas;->insertInorderBarrier()V
+HSPLandroid/view/DisplayListCanvas;->insertReorderBarrier()V
+HSPLandroid/view/DisplayListCanvas;->isHardwareAccelerated()Z
+HSPLandroid/view/DisplayListCanvas;->isRecordingFor(Ljava/lang/Object;)Z
+HSPLandroid/view/DisplayListCanvas;->obtain(Landroid/view/RenderNode;II)Landroid/view/DisplayListCanvas;
+HSPLandroid/view/DisplayListCanvas;->recycle()V
+HSPLandroid/view/DisplayListCanvas;->throwIfCannotDraw(Landroid/graphics/Bitmap;)V
+HSPLandroid/view/FallbackEventHandler;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroid/view/FallbackEventHandler;->preDispatchKeyEvent(Landroid/view/KeyEvent;)V
+HSPLandroid/view/FallbackEventHandler;->setView(Landroid/view/View;)V
+HSPLandroid/view/FocusFinder$1;-><init>()V
+HSPLandroid/view/FocusFinder$1;->initialValue()Landroid/view/FocusFinder;
+HSPLandroid/view/FocusFinder$1;->initialValue()Ljava/lang/Object;
+HSPLandroid/view/FocusFinder$FocusSorter;-><init>()V
+HSPLandroid/view/FocusFinder$FocusSorter;->lambda$-android_view_FocusFinder$FocusSorter_31347(Landroid/view/View;Landroid/view/View;)I
+HSPLandroid/view/FocusFinder$FocusSorter;->lambda$-android_view_FocusFinder$FocusSorter_31807(Landroid/view/View;Landroid/view/View;)I
+HSPLandroid/view/FocusFinder$FocusSorter;->sort([Landroid/view/View;IILandroid/view/ViewGroup;Z)V
+HSPLandroid/view/FocusFinder$UserSpecifiedFocusComparator$NextFocusGetter;->get(Landroid/view/View;Landroid/view/View;)Landroid/view/View;
+HSPLandroid/view/FocusFinder$UserSpecifiedFocusComparator;-><init>(Landroid/view/FocusFinder$UserSpecifiedFocusComparator$NextFocusGetter;)V
+HSPLandroid/view/FocusFinder;-><init>()V
+HSPLandroid/view/FocusFinder;-><init>(Landroid/view/FocusFinder;)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;->getEffectiveRoot(Landroid/view/ViewGroup;Landroid/view/View;)Landroid/view/ViewGroup;
+HSPLandroid/view/FocusFinder;->getInstance()Landroid/view/FocusFinder;
+HSPLandroid/view/FocusFinder;->sort([Landroid/view/View;IILandroid/view/ViewGroup;Z)V
+HSPLandroid/view/FrameInfo;-><init>()V
+HSPLandroid/view/FrameInfo;->addFlags(J)V
+HSPLandroid/view/FrameInfo;->markAnimationsStart()V
+HSPLandroid/view/FrameInfo;->markDrawStart()V
+HSPLandroid/view/FrameInfo;->markInputHandlingStart()V
+HSPLandroid/view/FrameInfo;->markPerformTraversalsStart()V
+HSPLandroid/view/FrameInfo;->setVsync(JJ)V
+HSPLandroid/view/FrameInfo;->updateInputEventTime(JJ)V
+HSPLandroid/view/GestureDetector$GestureHandler;-><init>(Landroid/view/GestureDetector;)V
+HSPLandroid/view/GestureDetector$GestureHandler;-><init>(Landroid/view/GestureDetector;Landroid/os/Handler;)V
+HSPLandroid/view/GestureDetector$OnContextClickListener;->onContextClick(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/GestureDetector$OnDoubleTapListener;->onDoubleTap(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/GestureDetector$OnDoubleTapListener;->onDoubleTapEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/GestureDetector$OnDoubleTapListener;->onSingleTapConfirmed(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/GestureDetector$OnGestureListener;->onDown(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/GestureDetector$OnGestureListener;->onFling(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
+HSPLandroid/view/GestureDetector$OnGestureListener;->onLongPress(Landroid/view/MotionEvent;)V
+HSPLandroid/view/GestureDetector$OnGestureListener;->onScroll(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
+HSPLandroid/view/GestureDetector$OnGestureListener;->onShowPress(Landroid/view/MotionEvent;)V
+HSPLandroid/view/GestureDetector$OnGestureListener;->onSingleTapUp(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/GestureDetector$SimpleOnGestureListener;-><init>()V
+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
+HSPLandroid/view/GestureDetector;-><init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;Z)V
+HSPLandroid/view/GestureDetector;->init(Landroid/content/Context;)V
+HSPLandroid/view/GestureDetector;->setContextClickListener(Landroid/view/GestureDetector$OnContextClickListener;)V
+HSPLandroid/view/GestureDetector;->setIsLongpressEnabled(Z)V
+HSPLandroid/view/GestureDetector;->setOnDoubleTapListener(Landroid/view/GestureDetector$OnDoubleTapListener;)V
+HSPLandroid/view/Gravity;->apply(IIILandroid/graphics/Rect;IILandroid/graphics/Rect;)V
+HSPLandroid/view/Gravity;->apply(IIILandroid/graphics/Rect;Landroid/graphics/Rect;I)V
+HSPLandroid/view/Gravity;->getAbsoluteGravity(II)I
+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
+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
+HSPLandroid/view/HardwareLayer;-><init>(Landroid/view/ThreadedRenderer;J)V
+HSPLandroid/view/HardwareLayer;->adoptTextureLayer(Landroid/view/ThreadedRenderer;J)Landroid/view/HardwareLayer;
+HSPLandroid/view/HardwareLayer;->getDeferredLayerUpdater()J
+HSPLandroid/view/HardwareLayer;->getLayerHandle()J
+HSPLandroid/view/HardwareLayer;->prepare(IIZ)Z
+HSPLandroid/view/HardwareLayer;->setLayerPaint(Landroid/graphics/Paint;)V
+HSPLandroid/view/HardwareLayer;->setSurfaceTexture(Landroid/graphics/SurfaceTexture;)V
+HSPLandroid/view/HardwareLayer;->updateSurfaceTexture()V
+HSPLandroid/view/IDockedStackListener$Stub;-><init>()V
+HSPLandroid/view/IDockedStackListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/view/IDockedStackListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+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;->asInterface(Landroid/os/IBinder;)Landroid/view/IGraphicsStats;
+HSPLandroid/view/IGraphicsStats;->requestBufferForProcess(Ljava/lang/String;Landroid/view/IGraphicsStatsCallback;)Landroid/os/ParcelFileDescriptor;
+HSPLandroid/view/IGraphicsStatsCallback$Stub;-><init>()V
+HSPLandroid/view/IGraphicsStatsCallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/view/IGraphicsStatsCallback;->onRotateGraphicsStatsBuffer()V
+HSPLandroid/view/IPinnedStackController$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/view/IPinnedStackController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IPinnedStackController;
+HSPLandroid/view/IPinnedStackController;->getDisplayRotation()I
+HSPLandroid/view/IPinnedStackController;->setIsMinimized(Z)V
+HSPLandroid/view/IPinnedStackController;->setMinEdgeSize(I)V
+HSPLandroid/view/IPinnedStackListener$Stub;-><init>()V
+HSPLandroid/view/IPinnedStackListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/view/IPinnedStackListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/view/IPinnedStackListener;->onActionsChanged(Landroid/content/pm/ParceledListSlice;)V
+HSPLandroid/view/IPinnedStackListener;->onImeVisibilityChanged(ZI)V
+HSPLandroid/view/IPinnedStackListener;->onListenerRegistered(Landroid/view/IPinnedStackController;)V
+HSPLandroid/view/IPinnedStackListener;->onMinimizedStateChanged(Z)V
+HSPLandroid/view/IPinnedStackListener;->onMovementBoundsChanged(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZI)V
+HSPLandroid/view/IRotationWatcher$Stub;-><init>()V
+HSPLandroid/view/IRotationWatcher;->onRotationChanged(I)V
+HSPLandroid/view/IWallpaperVisibilityListener$Stub;-><init>()V
+HSPLandroid/view/IWallpaperVisibilityListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/view/IWallpaperVisibilityListener;->onWallpaperVisibilityChanged(ZI)V
+HSPLandroid/view/IWindow$Stub;-><init>()V
+HSPLandroid/view/IWindow$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/view/IWindow$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/view/IWindow;->closeSystemDialogs(Ljava/lang/String;)V
+HSPLandroid/view/IWindow;->dispatchAppVisibility(Z)V
+HSPLandroid/view/IWindow;->dispatchDragEvent(Landroid/view/DragEvent;)V
+HSPLandroid/view/IWindow;->dispatchGetNewSurface()V
+HSPLandroid/view/IWindow;->dispatchPointerCaptureChanged(Z)V
+HSPLandroid/view/IWindow;->dispatchSystemUiVisibilityChanged(IIII)V
+HSPLandroid/view/IWindow;->dispatchWallpaperCommand(Ljava/lang/String;IIILandroid/os/Bundle;Z)V
+HSPLandroid/view/IWindow;->dispatchWallpaperOffsets(FFFFZ)V
+HSPLandroid/view/IWindow;->dispatchWindowShown()V
+HSPLandroid/view/IWindow;->executeCommand(Ljava/lang/String;Ljava/lang/String;Landroid/os/ParcelFileDescriptor;)V
+HSPLandroid/view/IWindow;->moved(II)V
+HSPLandroid/view/IWindow;->requestAppKeyboardShortcuts(Lcom/android/internal/os/IResultReceiver;I)V
+HSPLandroid/view/IWindow;->resized(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZI)V
+HSPLandroid/view/IWindow;->updatePointerIcon(FF)V
+HSPLandroid/view/IWindow;->windowFocusChanged(ZZ)V
+HSPLandroid/view/IWindowManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/view/IWindowManager$Stub$Proxy;->createInputConsumer(Ljava/lang/String;Landroid/view/InputChannel;)V
+HSPLandroid/view/IWindowManager$Stub$Proxy;->destroyInputConsumer(Ljava/lang/String;)Z
+HSPLandroid/view/IWindowManager$Stub$Proxy;->disableKeyguard(Landroid/os/IBinder;Ljava/lang/String;)V
+HSPLandroid/view/IWindowManager$Stub$Proxy;->getCurrentAnimatorScale()F
+HSPLandroid/view/IWindowManager$Stub$Proxy;->getDockedStackSide()I
+HSPLandroid/view/IWindowManager$Stub$Proxy;->getInitialDisplaySize(ILandroid/graphics/Point;)V
+HSPLandroid/view/IWindowManager$Stub$Proxy;->getStableInsets(ILandroid/graphics/Rect;)V
+HSPLandroid/view/IWindowManager$Stub$Proxy;->hasNavigationBar()Z
+HSPLandroid/view/IWindowManager$Stub$Proxy;->inKeyguardRestrictedInputMode()Z
+HSPLandroid/view/IWindowManager$Stub$Proxy;->isKeyguardLocked()Z
+HSPLandroid/view/IWindowManager$Stub$Proxy;->isKeyguardSecure()Z
+HSPLandroid/view/IWindowManager$Stub$Proxy;->openSession(Landroid/view/IWindowSessionCallback;Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;)Landroid/view/IWindowSession;
+HSPLandroid/view/IWindowManager$Stub$Proxy;->registerDockedStackListener(Landroid/view/IDockedStackListener;)V
+HSPLandroid/view/IWindowManager$Stub$Proxy;->registerPinnedStackListener(ILandroid/view/IPinnedStackListener;)V
+HSPLandroid/view/IWindowManager$Stub$Proxy;->registerShortcutKey(JLcom/android/internal/policy/IShortcutService;)V
+HSPLandroid/view/IWindowManager$Stub$Proxy;->registerWallpaperVisibilityListener(Landroid/view/IWallpaperVisibilityListener;I)Z
+HSPLandroid/view/IWindowManager$Stub$Proxy;->setDockedStackDividerTouchRegion(Landroid/graphics/Rect;)V
+HSPLandroid/view/IWindowManager$Stub$Proxy;->statusBarVisibilityChanged(I)V
+HSPLandroid/view/IWindowManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowManager;
+HSPLandroid/view/IWindowManager;->addWindowToken(Landroid/os/IBinder;II)V
+HSPLandroid/view/IWindowManager;->clearForcedDisplayDensityForUser(II)V
+HSPLandroid/view/IWindowManager;->clearForcedDisplaySize(I)V
+HSPLandroid/view/IWindowManager;->clearWindowContentFrameStats(Landroid/os/IBinder;)Z
+HSPLandroid/view/IWindowManager;->closeSystemDialogs(Ljava/lang/String;)V
+HSPLandroid/view/IWindowManager;->createInputConsumer(Ljava/lang/String;Landroid/view/InputChannel;)V
+HSPLandroid/view/IWindowManager;->destroyInputConsumer(Ljava/lang/String;)Z
+HSPLandroid/view/IWindowManager;->disableKeyguard(Landroid/os/IBinder;Ljava/lang/String;)V
+HSPLandroid/view/IWindowManager;->disableSurfaceTrace()V
+HSPLandroid/view/IWindowManager;->dismissKeyguard(Lcom/android/internal/policy/IKeyguardDismissCallback;)V
+HSPLandroid/view/IWindowManager;->enableScreenIfNeeded()V
+HSPLandroid/view/IWindowManager;->enableSurfaceTrace(Landroid/os/ParcelFileDescriptor;)V
+HSPLandroid/view/IWindowManager;->endProlongedAnimations()V
+HSPLandroid/view/IWindowManager;->executeAppTransition()V
+HSPLandroid/view/IWindowManager;->exitKeyguardSecurely(Landroid/view/IOnKeyguardExitResult;)V
+HSPLandroid/view/IWindowManager;->freezeRotation(I)V
+HSPLandroid/view/IWindowManager;->getAnimationScale(I)F
+HSPLandroid/view/IWindowManager;->getAnimationScales()[F
+HSPLandroid/view/IWindowManager;->getBaseDisplayDensity(I)I
+HSPLandroid/view/IWindowManager;->getBaseDisplaySize(ILandroid/graphics/Point;)V
+HSPLandroid/view/IWindowManager;->getCurrentAnimatorScale()F
+HSPLandroid/view/IWindowManager;->getCurrentImeTouchRegion()Landroid/graphics/Region;
+HSPLandroid/view/IWindowManager;->getDefaultDisplayRotation()I
+HSPLandroid/view/IWindowManager;->getDockedStackSide()I
+HSPLandroid/view/IWindowManager;->getInitialDisplayDensity(I)I
+HSPLandroid/view/IWindowManager;->getInitialDisplaySize(ILandroid/graphics/Point;)V
+HSPLandroid/view/IWindowManager;->getPendingAppTransition()I
+HSPLandroid/view/IWindowManager;->getPreferredOptionsPanelGravity()I
+HSPLandroid/view/IWindowManager;->getStableInsets(ILandroid/graphics/Rect;)V
+HSPLandroid/view/IWindowManager;->getWindowContentFrameStats(Landroid/os/IBinder;)Landroid/view/WindowContentFrameStats;
+HSPLandroid/view/IWindowManager;->hasNavigationBar()Z
+HSPLandroid/view/IWindowManager;->inKeyguardRestrictedInputMode()Z
+HSPLandroid/view/IWindowManager;->inputMethodClientHasFocus(Lcom/android/internal/view/IInputMethodClient;)Z
+HSPLandroid/view/IWindowManager;->isKeyguardLocked()Z
+HSPLandroid/view/IWindowManager;->isKeyguardSecure()Z
+HSPLandroid/view/IWindowManager;->isRotationFrozen()Z
+HSPLandroid/view/IWindowManager;->isSafeModeEnabled()Z
+HSPLandroid/view/IWindowManager;->isViewServerRunning()Z
+HSPLandroid/view/IWindowManager;->lockNow(Landroid/os/Bundle;)V
+HSPLandroid/view/IWindowManager;->openSession(Landroid/view/IWindowSessionCallback;Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;)Landroid/view/IWindowSession;
+HSPLandroid/view/IWindowManager;->overridePendingAppTransition(Ljava/lang/String;IILandroid/os/IRemoteCallback;)V
+HSPLandroid/view/IWindowManager;->overridePendingAppTransitionAspectScaledThumb(Landroid/graphics/GraphicBuffer;IIIILandroid/os/IRemoteCallback;Z)V
+HSPLandroid/view/IWindowManager;->overridePendingAppTransitionClipReveal(IIII)V
+HSPLandroid/view/IWindowManager;->overridePendingAppTransitionInPlace(Ljava/lang/String;I)V
+HSPLandroid/view/IWindowManager;->overridePendingAppTransitionMultiThumb([Landroid/view/AppTransitionAnimationSpec;Landroid/os/IRemoteCallback;Landroid/os/IRemoteCallback;Z)V
+HSPLandroid/view/IWindowManager;->overridePendingAppTransitionMultiThumbFuture(Landroid/view/IAppTransitionAnimationSpecsFuture;Landroid/os/IRemoteCallback;Z)V
+HSPLandroid/view/IWindowManager;->overridePendingAppTransitionScaleUp(IIII)V
+HSPLandroid/view/IWindowManager;->overridePendingAppTransitionThumb(Landroid/graphics/GraphicBuffer;IILandroid/os/IRemoteCallback;Z)V
+HSPLandroid/view/IWindowManager;->prepareAppTransition(IZ)V
+HSPLandroid/view/IWindowManager;->reenableKeyguard(Landroid/os/IBinder;)V
+HSPLandroid/view/IWindowManager;->registerDockedStackListener(Landroid/view/IDockedStackListener;)V
+HSPLandroid/view/IWindowManager;->registerPinnedStackListener(ILandroid/view/IPinnedStackListener;)V
+HSPLandroid/view/IWindowManager;->registerShortcutKey(JLcom/android/internal/policy/IShortcutService;)V
+HSPLandroid/view/IWindowManager;->registerWallpaperVisibilityListener(Landroid/view/IWallpaperVisibilityListener;I)Z
+HSPLandroid/view/IWindowManager;->removeRotationWatcher(Landroid/view/IRotationWatcher;)V
+HSPLandroid/view/IWindowManager;->removeWindowToken(Landroid/os/IBinder;I)V
+HSPLandroid/view/IWindowManager;->requestAppKeyboardShortcuts(Lcom/android/internal/os/IResultReceiver;I)V
+HSPLandroid/view/IWindowManager;->requestAssistScreenshot(Lcom/android/internal/app/IAssistScreenshotReceiver;)Z
+HSPLandroid/view/IWindowManager;->screenshotWallpaper()Landroid/graphics/Bitmap;
+HSPLandroid/view/IWindowManager;->setAnimationScale(IF)V
+HSPLandroid/view/IWindowManager;->setAnimationScales([F)V
+HSPLandroid/view/IWindowManager;->setDockedStackDividerTouchRegion(Landroid/graphics/Rect;)V
+HSPLandroid/view/IWindowManager;->setDockedStackResizing(Z)V
+HSPLandroid/view/IWindowManager;->setEventDispatching(Z)V
+HSPLandroid/view/IWindowManager;->setFocusedApp(Landroid/os/IBinder;Z)V
+HSPLandroid/view/IWindowManager;->setForcedDisplayDensityForUser(III)V
+HSPLandroid/view/IWindowManager;->setForcedDisplayScalingMode(II)V
+HSPLandroid/view/IWindowManager;->setForcedDisplaySize(III)V
+HSPLandroid/view/IWindowManager;->setInTouchMode(Z)V
+HSPLandroid/view/IWindowManager;->setNewDisplayOverrideConfiguration(Landroid/content/res/Configuration;I)[I
+HSPLandroid/view/IWindowManager;->setOverscan(IIIII)V
+HSPLandroid/view/IWindowManager;->setPipVisibility(Z)V
+HSPLandroid/view/IWindowManager;->setRecentsVisibility(Z)V
+HSPLandroid/view/IWindowManager;->setResizeDimLayer(ZIF)V
+HSPLandroid/view/IWindowManager;->setScreenCaptureDisabled(IZ)V
+HSPLandroid/view/IWindowManager;->setStrictModeVisualIndicatorPreference(Ljava/lang/String;)V
+HSPLandroid/view/IWindowManager;->setSwitchingUser(Z)V
+HSPLandroid/view/IWindowManager;->showStrictModeViolation(Z)V
+HSPLandroid/view/IWindowManager;->startFreezingScreen(II)V
+HSPLandroid/view/IWindowManager;->startViewServer(I)Z
+HSPLandroid/view/IWindowManager;->statusBarVisibilityChanged(I)V
+HSPLandroid/view/IWindowManager;->stopFreezingScreen()V
+HSPLandroid/view/IWindowManager;->stopViewServer()Z
+HSPLandroid/view/IWindowManager;->thawRotation()V
+HSPLandroid/view/IWindowManager;->unregisterWallpaperVisibilityListener(Landroid/view/IWallpaperVisibilityListener;I)V
+HSPLandroid/view/IWindowManager;->updateOrientationFromAppTokens(Landroid/content/res/Configuration;Landroid/os/IBinder;I)Landroid/content/res/Configuration;
+HSPLandroid/view/IWindowManager;->updateRotation(ZZ)V
+HSPLandroid/view/IWindowManager;->watchRotation(Landroid/view/IRotationWatcher;I)I
+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/InputChannel;)I
+HSPLandroid/view/IWindowSession$Stub$Proxy;->finishDrawing(Landroid/view/IWindow;)V
+HSPLandroid/view/IWindowSession$Stub$Proxy;->getDisplayFrame(Landroid/view/IWindow;Landroid/graphics/Rect;)V
+HSPLandroid/view/IWindowSession$Stub$Proxy;->getInTouchMode()Z
+HSPLandroid/view/IWindowSession$Stub$Proxy;->onRectangleOnScreenRequested(Landroid/os/IBinder;Landroid/graphics/Rect;)V
+HSPLandroid/view/IWindowSession$Stub$Proxy;->relayout(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/util/MergedConfiguration;Landroid/view/Surface;)I
+HSPLandroid/view/IWindowSession$Stub$Proxy;->setInsets(Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
+HSPLandroid/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;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowSession;
+HSPLandroid/view/IWindowSession;->add(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/InputChannel;)I
+HSPLandroid/view/IWindowSession;->addToDisplay(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/InputChannel;)I
+HSPLandroid/view/IWindowSession;->addToDisplayWithoutInputChannel(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IILandroid/graphics/Rect;Landroid/graphics/Rect;)I
+HSPLandroid/view/IWindowSession;->addWithoutInputChannel(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;ILandroid/graphics/Rect;Landroid/graphics/Rect;)I
+HSPLandroid/view/IWindowSession;->cancelDragAndDrop(Landroid/os/IBinder;)V
+HSPLandroid/view/IWindowSession;->dragRecipientEntered(Landroid/view/IWindow;)V
+HSPLandroid/view/IWindowSession;->dragRecipientExited(Landroid/view/IWindow;)V
+HSPLandroid/view/IWindowSession;->finishDrawing(Landroid/view/IWindow;)V
+HSPLandroid/view/IWindowSession;->getDisplayFrame(Landroid/view/IWindow;Landroid/graphics/Rect;)V
+HSPLandroid/view/IWindowSession;->getInTouchMode()Z
+HSPLandroid/view/IWindowSession;->getWindowId(Landroid/os/IBinder;)Landroid/view/IWindowId;
+HSPLandroid/view/IWindowSession;->onRectangleOnScreenRequested(Landroid/os/IBinder;Landroid/graphics/Rect;)V
+HSPLandroid/view/IWindowSession;->outOfMemory(Landroid/view/IWindow;)Z
+HSPLandroid/view/IWindowSession;->performDrag(Landroid/view/IWindow;Landroid/os/IBinder;IFFFFLandroid/content/ClipData;)Z
+HSPLandroid/view/IWindowSession;->performHapticFeedback(Landroid/view/IWindow;IZ)Z
+HSPLandroid/view/IWindowSession;->pokeDrawLock(Landroid/os/IBinder;)V
+HSPLandroid/view/IWindowSession;->prepareDrag(Landroid/view/IWindow;IIILandroid/view/Surface;)Landroid/os/IBinder;
+HSPLandroid/view/IWindowSession;->prepareToReplaceWindows(Landroid/os/IBinder;Z)V
+HSPLandroid/view/IWindowSession;->relayout(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/util/MergedConfiguration;Landroid/view/Surface;)I
+HSPLandroid/view/IWindowSession;->remove(Landroid/view/IWindow;)V
+HSPLandroid/view/IWindowSession;->reportDropResult(Landroid/view/IWindow;Z)V
+HSPLandroid/view/IWindowSession;->sendWallpaperCommand(Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;Z)Landroid/os/Bundle;
+HSPLandroid/view/IWindowSession;->setInTouchMode(Z)V
+HSPLandroid/view/IWindowSession;->setInsets(Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
+HSPLandroid/view/IWindowSession;->setTransparentRegion(Landroid/view/IWindow;Landroid/graphics/Region;)V
+HSPLandroid/view/IWindowSession;->setWallpaperDisplayOffset(Landroid/os/IBinder;II)V
+HSPLandroid/view/IWindowSession;->setWallpaperPosition(Landroid/os/IBinder;FFFF)V
+HSPLandroid/view/IWindowSession;->startMovingTask(Landroid/view/IWindow;FF)Z
+HSPLandroid/view/IWindowSession;->updatePointerIcon(Landroid/view/IWindow;)V
+HSPLandroid/view/IWindowSession;->wallpaperCommandComplete(Landroid/os/IBinder;Landroid/os/Bundle;)V
+HSPLandroid/view/IWindowSession;->wallpaperOffsetsComplete(Landroid/os/IBinder;)V
+HSPLandroid/view/IWindowSessionCallback$Stub;-><init>()V
+HSPLandroid/view/IWindowSessionCallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/view/IWindowSessionCallback;->onAnimatorScaleChanged(F)V
+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
+HSPLandroid/view/InputChannel;->readFromParcel(Landroid/os/Parcel;)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$MotionRange;)V
+HSPLandroid/view/InputDevice$MotionRange;->getAxis()I
+HSPLandroid/view/InputDevice$MotionRange;->getSource()I
+HSPLandroid/view/InputDevice;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/InputDevice;-><init>(Landroid/os/Parcel;Landroid/view/InputDevice;)V
+HSPLandroid/view/InputDevice;->addMotionRange(IIFFFFF)V
+HSPLandroid/view/InputDevice;->getDevice(I)Landroid/view/InputDevice;
+HSPLandroid/view/InputDevice;->getDeviceIds()[I
+HSPLandroid/view/InputDevice;->getKeyCharacterMap()Landroid/view/KeyCharacterMap;
+HSPLandroid/view/InputDevice;->getMotionRanges()Ljava/util/List;
+HSPLandroid/view/InputDevice;->getSources()I
+HSPLandroid/view/InputDevice;->hasKeys([I)[Z
+HSPLandroid/view/InputEvent;-><init>()V
+HSPLandroid/view/InputEvent;->getSequenceNumber()I
+HSPLandroid/view/InputEvent;->isFromSource(I)Z
+HSPLandroid/view/InputEvent;->prepareForReuse()V
+HSPLandroid/view/InputEvent;->recycle()V
+HSPLandroid/view/InputEvent;->recycleIfNeededAfterDispatch()V
+HSPLandroid/view/InputEventConsistencyVerifier;->isInstrumentationEnabled()Z
+HSPLandroid/view/InputEventReceiver;-><init>(Landroid/view/InputChannel;Landroid/os/Looper;)V
+HSPLandroid/view/InputEventReceiver;->consumeBatchedInputEvents(J)Z
+HSPLandroid/view/InputEventReceiver;->dispatchBatchedInputEventPending()V
+HSPLandroid/view/InputEventReceiver;->dispatchInputEvent(ILandroid/view/InputEvent;I)V
+HSPLandroid/view/InputEventReceiver;->finishInputEvent(Landroid/view/InputEvent;Z)V
+HSPLandroid/view/InputQueue$Callback;->onInputQueueCreated(Landroid/view/InputQueue;)V
+HSPLandroid/view/InputQueue$Callback;->onInputQueueDestroyed(Landroid/view/InputQueue;)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>(Landroid/os/Parcel;)V
+HSPLandroid/view/KeyCharacterMap;-><init>(Landroid/os/Parcel;Landroid/view/KeyCharacterMap;)V
+HSPLandroid/view/KeyCharacterMap;->get(II)I
+HSPLandroid/view/KeyCharacterMap;->getKeyboardType()I
+HSPLandroid/view/KeyCharacterMap;->load(I)Landroid/view/KeyCharacterMap;
+HSPLandroid/view/KeyEvent$DispatcherState;-><init>()V
+HSPLandroid/view/KeyEvent$DispatcherState;->reset()V
+HSPLandroid/view/KeyEvent$DispatcherState;->reset(Ljava/lang/Object;)V
+HSPLandroid/view/KeyEvent;->getMaxKeyCode()I
+HSPLandroid/view/KeyEvent;->normalizeMetaState(I)I
+HSPLandroid/view/LayoutInflater$Factory2;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
+HSPLandroid/view/LayoutInflater$Factory;->onCreateView(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
+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$Filter;->onLoadClass(Ljava/lang/Class;)Z
+HSPLandroid/view/LayoutInflater;-><init>(Landroid/content/Context;)V
+HSPLandroid/view/LayoutInflater;-><init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V
+HSPLandroid/view/LayoutInflater;->cloneInContext(Landroid/content/Context;)Landroid/view/LayoutInflater;
+HSPLandroid/view/LayoutInflater;->consumeChildElements(Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLandroid/view/LayoutInflater;->createView(Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
+HSPLandroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
+HSPLandroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;Z)Landroid/view/View;
+HSPLandroid/view/LayoutInflater;->from(Landroid/content/Context;)Landroid/view/LayoutInflater;
+HSPLandroid/view/LayoutInflater;->getContext()Landroid/content/Context;
+HSPLandroid/view/LayoutInflater;->getFactory()Landroid/view/LayoutInflater$Factory;
+HSPLandroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;)Landroid/view/View;
+HSPLandroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
+HSPLandroid/view/LayoutInflater;->inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;Z)Landroid/view/View;
+HSPLandroid/view/LayoutInflater;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
+HSPLandroid/view/LayoutInflater;->onCreateView(Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
+HSPLandroid/view/LayoutInflater;->parseInclude(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/Context;Landroid/view/View;Landroid/util/AttributeSet;)V
+HSPLandroid/view/LayoutInflater;->rInflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;Landroid/content/Context;Landroid/util/AttributeSet;Z)V
+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;->verifyClassLoader(Ljava/lang/reflect/Constructor;)Z
+HSPLandroid/view/Menu;->add(I)Landroid/view/MenuItem;
+HSPLandroid/view/Menu;->add(IIII)Landroid/view/MenuItem;
+HSPLandroid/view/Menu;->add(IIILjava/lang/CharSequence;)Landroid/view/MenuItem;
+HSPLandroid/view/Menu;->add(Ljava/lang/CharSequence;)Landroid/view/MenuItem;
+HSPLandroid/view/Menu;->addIntentOptions(IIILandroid/content/ComponentName;[Landroid/content/Intent;Landroid/content/Intent;I[Landroid/view/MenuItem;)I
+HSPLandroid/view/Menu;->addSubMenu(I)Landroid/view/SubMenu;
+HSPLandroid/view/Menu;->addSubMenu(IIII)Landroid/view/SubMenu;
+HSPLandroid/view/Menu;->addSubMenu(IIILjava/lang/CharSequence;)Landroid/view/SubMenu;
+HSPLandroid/view/Menu;->addSubMenu(Ljava/lang/CharSequence;)Landroid/view/SubMenu;
+HSPLandroid/view/Menu;->clear()V
+HSPLandroid/view/Menu;->close()V
+HSPLandroid/view/Menu;->findItem(I)Landroid/view/MenuItem;
+HSPLandroid/view/Menu;->getItem(I)Landroid/view/MenuItem;
+HSPLandroid/view/Menu;->hasVisibleItems()Z
+HSPLandroid/view/Menu;->isShortcutKey(ILandroid/view/KeyEvent;)Z
+HSPLandroid/view/Menu;->performIdentifierAction(II)Z
+HSPLandroid/view/Menu;->performShortcut(ILandroid/view/KeyEvent;I)Z
+HSPLandroid/view/Menu;->removeGroup(I)V
+HSPLandroid/view/Menu;->removeItem(I)V
+HSPLandroid/view/Menu;->setGroupCheckable(IZZ)V
+HSPLandroid/view/Menu;->setGroupEnabled(IZ)V
+HSPLandroid/view/Menu;->setGroupVisible(IZ)V
+HSPLandroid/view/Menu;->setQwertyMode(Z)V
+HSPLandroid/view/Menu;->size()I
+HSPLandroid/view/MenuInflater$MenuState;->-get0(Landroid/view/MenuInflater$MenuState;)Landroid/view/ActionProvider;
+HSPLandroid/view/MenuInflater$MenuState;-><init>(Landroid/view/MenuInflater;Landroid/view/Menu;)V
+HSPLandroid/view/MenuInflater$MenuState;->addItem()Landroid/view/MenuItem;
+HSPLandroid/view/MenuInflater$MenuState;->addSubMenuItem()Landroid/view/SubMenu;
+HSPLandroid/view/MenuInflater$MenuState;->getShortcut(Ljava/lang/String;)C
+HSPLandroid/view/MenuInflater$MenuState;->hasAddedItem()Z
+HSPLandroid/view/MenuInflater$MenuState;->readGroup(Landroid/util/AttributeSet;)V
+HSPLandroid/view/MenuInflater$MenuState;->readItem(Landroid/util/AttributeSet;)V
+HSPLandroid/view/MenuInflater$MenuState;->resetGroup()V
+HSPLandroid/view/MenuInflater$MenuState;->setItem(Landroid/view/MenuItem;)V
+HSPLandroid/view/MenuInflater;->-get4(Landroid/view/MenuInflater;)Landroid/content/Context;
+HSPLandroid/view/MenuInflater;-><init>(Landroid/content/Context;)V
+HSPLandroid/view/MenuInflater;-><init>(Landroid/content/Context;Ljava/lang/Object;)V
+HSPLandroid/view/MenuInflater;->inflate(ILandroid/view/Menu;)V
+HSPLandroid/view/MenuInflater;->parseMenu(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/view/Menu;)V
+HSPLandroid/view/MenuInflater;->registerMenu(Landroid/view/MenuItem;Landroid/util/AttributeSet;)V
+HSPLandroid/view/MenuInflater;->registerMenu(Landroid/view/SubMenu;Landroid/util/AttributeSet;)V
+HSPLandroid/view/MenuItem$OnActionExpandListener;->onMenuItemActionCollapse(Landroid/view/MenuItem;)Z
+HSPLandroid/view/MenuItem$OnActionExpandListener;->onMenuItemActionExpand(Landroid/view/MenuItem;)Z
+HSPLandroid/view/MenuItem$OnMenuItemClickListener;->onMenuItemClick(Landroid/view/MenuItem;)Z
+HSPLandroid/view/MenuItem;->collapseActionView()Z
+HSPLandroid/view/MenuItem;->expandActionView()Z
+HSPLandroid/view/MenuItem;->getActionProvider()Landroid/view/ActionProvider;
+HSPLandroid/view/MenuItem;->getActionView()Landroid/view/View;
+HSPLandroid/view/MenuItem;->getAlphabeticShortcut()C
+HSPLandroid/view/MenuItem;->getGroupId()I
+HSPLandroid/view/MenuItem;->getIcon()Landroid/graphics/drawable/Drawable;
+HSPLandroid/view/MenuItem;->getIntent()Landroid/content/Intent;
+HSPLandroid/view/MenuItem;->getItemId()I
+HSPLandroid/view/MenuItem;->getMenuInfo()Landroid/view/ContextMenu$ContextMenuInfo;
+HSPLandroid/view/MenuItem;->getNumericShortcut()C
+HSPLandroid/view/MenuItem;->getOrder()I
+HSPLandroid/view/MenuItem;->getSubMenu()Landroid/view/SubMenu;
+HSPLandroid/view/MenuItem;->getTitle()Ljava/lang/CharSequence;
+HSPLandroid/view/MenuItem;->getTitleCondensed()Ljava/lang/CharSequence;
+HSPLandroid/view/MenuItem;->hasSubMenu()Z
+HSPLandroid/view/MenuItem;->isActionViewExpanded()Z
+HSPLandroid/view/MenuItem;->isCheckable()Z
+HSPLandroid/view/MenuItem;->isChecked()Z
+HSPLandroid/view/MenuItem;->isEnabled()Z
+HSPLandroid/view/MenuItem;->isVisible()Z
+HSPLandroid/view/MenuItem;->setActionProvider(Landroid/view/ActionProvider;)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setActionView(I)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setActionView(Landroid/view/View;)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setAlphabeticShortcut(C)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setCheckable(Z)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setChecked(Z)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setEnabled(Z)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setIcon(I)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setIntent(Landroid/content/Intent;)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setNumericShortcut(C)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setOnActionExpandListener(Landroid/view/MenuItem$OnActionExpandListener;)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setOnMenuItemClickListener(Landroid/view/MenuItem$OnMenuItemClickListener;)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setShortcut(CC)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setShowAsAction(I)V
+HSPLandroid/view/MenuItem;->setShowAsActionFlags(I)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setTitle(I)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setTitle(Ljava/lang/CharSequence;)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setTitleCondensed(Ljava/lang/CharSequence;)Landroid/view/MenuItem;
+HSPLandroid/view/MenuItem;->setVisible(Z)Landroid/view/MenuItem;
+HSPLandroid/view/MotionEvent;-><init>()V
+HSPLandroid/view/MotionEvent;->getAction()I
+HSPLandroid/view/MotionEvent;->getActionIndex()I
+HSPLandroid/view/MotionEvent;->getActionMasked()I
+HSPLandroid/view/MotionEvent;->getDownTime()J
+HSPLandroid/view/MotionEvent;->getEventTimeNano()J
+HSPLandroid/view/MotionEvent;->getFlags()I
+HSPLandroid/view/MotionEvent;->getHistoricalEventTimeNano(I)J
+HSPLandroid/view/MotionEvent;->getHistorySize()I
+HSPLandroid/view/MotionEvent;->getPointerCount()I
+HSPLandroid/view/MotionEvent;->getPointerId(I)I
+HSPLandroid/view/MotionEvent;->getPointerIdBits()I
+HSPLandroid/view/MotionEvent;->getRawX()F
+HSPLandroid/view/MotionEvent;->getRawY()F
+HSPLandroid/view/MotionEvent;->getSource()I
+HSPLandroid/view/MotionEvent;->getX()F
+HSPLandroid/view/MotionEvent;->getX(I)F
+HSPLandroid/view/MotionEvent;->getY()F
+HSPLandroid/view/MotionEvent;->getY(I)F
+HSPLandroid/view/MotionEvent;->isTargetAccessibilityFocus()Z
+HSPLandroid/view/MotionEvent;->isTouchEvent()Z
+HSPLandroid/view/MotionEvent;->obtain()Landroid/view/MotionEvent;
+HSPLandroid/view/MotionEvent;->offsetLocation(FF)V
+HSPLandroid/view/MotionEvent;->recycle()V
+HSPLandroid/view/MotionEvent;->setAction(I)V
+HSPLandroid/view/MotionEvent;->setTargetAccessibilityFocus(Z)V
+HSPLandroid/view/OrientationEventListener$SensorEventListenerImpl;-><init>(Landroid/view/OrientationEventListener;)V
+HSPLandroid/view/OrientationEventListener$SensorEventListenerImpl;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
+HSPLandroid/view/OrientationEventListener$SensorEventListenerImpl;->onSensorChanged(Landroid/hardware/SensorEvent;)V
+HSPLandroid/view/OrientationEventListener;->-get0(Landroid/view/OrientationEventListener;)Landroid/view/OrientationListener;
+HSPLandroid/view/OrientationEventListener;->-get1(Landroid/view/OrientationEventListener;)I
+HSPLandroid/view/OrientationEventListener;-><init>(Landroid/content/Context;)V
+HSPLandroid/view/OrientationEventListener;-><init>(Landroid/content/Context;I)V
+HSPLandroid/view/OrientationEventListener;->enable()V
+HSPLandroid/view/OrientationEventListener;->onOrientationChanged(I)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/RecordingCanvas;-><init>(J)V
+HSPLandroid/view/RecordingCanvas;->drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawCircle(FFFLandroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawColor(ILandroid/graphics/PorterDuff$Mode;)V
+HSPLandroid/view/RecordingCanvas;->drawOval(FFFFLandroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawOval(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/Rect;Landroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawRect(FFFFLandroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawRect(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawRoundRect(FFFFFFLandroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V
+HSPLandroid/view/RecordingCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V
+HSPLandroid/view/RenderNode;->-wrap0()J
+HSPLandroid/view/RenderNode;-><init>(J)V
+HSPLandroid/view/RenderNode;-><init>(Ljava/lang/String;Landroid/view/View;)V
+HSPLandroid/view/RenderNode;->adopt(J)Landroid/view/RenderNode;
+HSPLandroid/view/RenderNode;->create(Ljava/lang/String;Landroid/view/View;)Landroid/view/RenderNode;
+HSPLandroid/view/RenderNode;->discardDisplayList()V
+HSPLandroid/view/RenderNode;->end(Landroid/view/DisplayListCanvas;)V
+HSPLandroid/view/RenderNode;->getClipToOutline()Z
+HSPLandroid/view/RenderNode;->getElevation()F
+HSPLandroid/view/RenderNode;->getMatrix(Landroid/graphics/Matrix;)V
+HSPLandroid/view/RenderNode;->getNativeDisplayList()J
+HSPLandroid/view/RenderNode;->getPivotX()F
+HSPLandroid/view/RenderNode;->getPivotY()F
+HSPLandroid/view/RenderNode;->getRotation()F
+HSPLandroid/view/RenderNode;->getRotationX()F
+HSPLandroid/view/RenderNode;->getRotationY()F
+HSPLandroid/view/RenderNode;->getScaleX()F
+HSPLandroid/view/RenderNode;->getScaleY()F
+HSPLandroid/view/RenderNode;->getTranslationX()F
+HSPLandroid/view/RenderNode;->getTranslationY()F
+HSPLandroid/view/RenderNode;->getTranslationZ()F
+HSPLandroid/view/RenderNode;->hasIdentityMatrix()Z
+HSPLandroid/view/RenderNode;->isAttached()Z
+HSPLandroid/view/RenderNode;->isPivotExplicitlySet()Z
+HSPLandroid/view/RenderNode;->isValid()Z
+HSPLandroid/view/RenderNode;->offsetTopAndBottom(I)Z
+HSPLandroid/view/RenderNode;->registerVectorDrawableAnimator(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;)V
+HSPLandroid/view/RenderNode;->requestPositionUpdates(Landroid/view/SurfaceView;)V
+HSPLandroid/view/RenderNode;->setAlpha(F)Z
+HSPLandroid/view/RenderNode;->setAnimationMatrix(Landroid/graphics/Matrix;)Z
+HSPLandroid/view/RenderNode;->setClipToBounds(Z)Z
+HSPLandroid/view/RenderNode;->setClipToOutline(Z)Z
+HSPLandroid/view/RenderNode;->setElevation(F)Z
+HSPLandroid/view/RenderNode;->setHasOverlappingRendering(Z)Z
+HSPLandroid/view/RenderNode;->setLayerPaint(Landroid/graphics/Paint;)Z
+HSPLandroid/view/RenderNode;->setLayerType(I)Z
+HSPLandroid/view/RenderNode;->setLeftTopRightBottom(IIII)Z
+HSPLandroid/view/RenderNode;->setOutline(Landroid/graphics/Outline;)Z
+HSPLandroid/view/RenderNode;->setPivotX(F)Z
+HSPLandroid/view/RenderNode;->setPivotY(F)Z
+HSPLandroid/view/RenderNode;->setProjectBackwards(Z)Z
+HSPLandroid/view/RenderNode;->setProjectionReceiver(Z)Z
+HSPLandroid/view/RenderNode;->setRotation(F)Z
+HSPLandroid/view/RenderNode;->setScaleX(F)Z
+HSPLandroid/view/RenderNode;->setScaleY(F)Z
+HSPLandroid/view/RenderNode;->setTranslationX(F)Z
+HSPLandroid/view/RenderNode;->setTranslationY(F)Z
+HSPLandroid/view/RenderNode;->setTranslationZ(F)Z
+HSPLandroid/view/RenderNode;->start(II)Landroid/view/DisplayListCanvas;
+HSPLandroid/view/RenderNodeAnimator;->isNativeInterpolator(Landroid/animation/TimeInterpolator;)Z
+HSPLandroid/view/RenderNodeAnimatorSetHelper;->createNativeInterpolator(Landroid/animation/TimeInterpolator;J)J
+HSPLandroid/view/RenderNodeAnimatorSetHelper;->getTarget(Landroid/view/DisplayListCanvas;)Landroid/view/RenderNode;
+HSPLandroid/view/ScaleGestureDetector$1;-><init>(Landroid/view/ScaleGestureDetector;)V
+HSPLandroid/view/ScaleGestureDetector$SimpleOnScaleGestureListener;-><init>()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
+HSPLandroid/view/ScaleGestureDetector;->setQuickScaleEnabled(Z)V
+HSPLandroid/view/ScaleGestureDetector;->setStylusScaleEnabled(Z)V
+HSPLandroid/view/SubMenu;->clearHeader()V
+HSPLandroid/view/SubMenu;->getItem()Landroid/view/MenuItem;
+HSPLandroid/view/SubMenu;->setHeaderIcon(I)Landroid/view/SubMenu;
+HSPLandroid/view/SubMenu;->setHeaderIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/SubMenu;
+HSPLandroid/view/SubMenu;->setHeaderTitle(I)Landroid/view/SubMenu;
+HSPLandroid/view/SubMenu;->setHeaderTitle(Ljava/lang/CharSequence;)Landroid/view/SubMenu;
+HSPLandroid/view/SubMenu;->setHeaderView(Landroid/view/View;)Landroid/view/SubMenu;
+HSPLandroid/view/SubMenu;->setIcon(I)Landroid/view/SubMenu;
+HSPLandroid/view/SubMenu;->setIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/SubMenu;
+HSPLandroid/view/Surface$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/Surface;
+HSPLandroid/view/Surface$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/view/Surface$CompatibleCanvas;-><init>(Landroid/view/Surface;)V
+HSPLandroid/view/Surface$CompatibleCanvas;-><init>(Landroid/view/Surface;Landroid/view/Surface$CompatibleCanvas;)V
+HSPLandroid/view/Surface;-><init>()V
+HSPLandroid/view/Surface;-><init>(J)V
+HSPLandroid/view/Surface;->allocateBuffers()V
+HSPLandroid/view/Surface;->checkNotReleasedLocked()V
+HSPLandroid/view/Surface;->copyFrom(Landroid/view/SurfaceControl;)V
+HSPLandroid/view/Surface;->forceScopedDisconnect()V
+HSPLandroid/view/Surface;->getGenerationId()I
+HSPLandroid/view/Surface;->isValid()Z
+HSPLandroid/view/Surface;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/view/Surface;->release()V
+HSPLandroid/view/Surface;->setNativeObjectLocked(J)V
+HSPLandroid/view/Surface;->toString()Ljava/lang/String;
+HSPLandroid/view/Surface;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/SurfaceControl$PhysicalDisplayInfo;-><init>()V
+HSPLandroid/view/SurfaceControl;-><init>(Landroid/view/SurfaceSession;Ljava/lang/String;IIII)V
+HSPLandroid/view/SurfaceControl;-><init>(Landroid/view/SurfaceSession;Ljava/lang/String;IIIILandroid/view/SurfaceControl;II)V
+HSPLandroid/view/SurfaceControl;->checkNotReleased()V
+HSPLandroid/view/SurfaceControl;->closeTransaction()V
+HSPLandroid/view/SurfaceControl;->deferTransactionUntil(Landroid/view/Surface;J)V
+HSPLandroid/view/SurfaceControl;->destroy()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;->getBuiltInDisplay(I)Landroid/os/IBinder;
+HSPLandroid/view/SurfaceControl;->getDisplayColorModes(Landroid/os/IBinder;)[I
+HSPLandroid/view/SurfaceControl;->getDisplayConfigs(Landroid/os/IBinder;)[Landroid/view/SurfaceControl$PhysicalDisplayInfo;
+HSPLandroid/view/SurfaceControl;->getHdrCapabilities(Landroid/os/IBinder;)Landroid/view/Display$HdrCapabilities;
+HSPLandroid/view/SurfaceControl;->hide()V
+HSPLandroid/view/SurfaceControl;->openTransaction()V
+HSPLandroid/view/SurfaceControl;->setDisplayPowerMode(Landroid/os/IBinder;I)V
+HSPLandroid/view/SurfaceControl;->setLayer(I)V
+HSPLandroid/view/SurfaceControl;->setMatrix(FFFF)V
+HSPLandroid/view/SurfaceControl;->setPosition(FF)V
+HSPLandroid/view/SurfaceControl;->setSize(II)V
+HSPLandroid/view/SurfaceControl;->show()V
+HSPLandroid/view/SurfaceHolder$Callback2;->surfaceRedrawNeeded(Landroid/view/SurfaceHolder;)V
+HSPLandroid/view/SurfaceHolder$Callback2;->surfaceRedrawNeededAsync(Landroid/view/SurfaceHolder;Ljava/lang/Runnable;)V
+HSPLandroid/view/SurfaceHolder$Callback;->surfaceChanged(Landroid/view/SurfaceHolder;III)V
+HSPLandroid/view/SurfaceHolder$Callback;->surfaceCreated(Landroid/view/SurfaceHolder;)V
+HSPLandroid/view/SurfaceHolder$Callback;->surfaceDestroyed(Landroid/view/SurfaceHolder;)V
+HSPLandroid/view/SurfaceHolder;->addCallback(Landroid/view/SurfaceHolder$Callback;)V
+HSPLandroid/view/SurfaceHolder;->getSurface()Landroid/view/Surface;
+HSPLandroid/view/SurfaceHolder;->getSurfaceFrame()Landroid/graphics/Rect;
+HSPLandroid/view/SurfaceHolder;->isCreating()Z
+HSPLandroid/view/SurfaceHolder;->lockCanvas()Landroid/graphics/Canvas;
+HSPLandroid/view/SurfaceHolder;->lockCanvas(Landroid/graphics/Rect;)Landroid/graphics/Canvas;
+HSPLandroid/view/SurfaceHolder;->removeCallback(Landroid/view/SurfaceHolder$Callback;)V
+HSPLandroid/view/SurfaceHolder;->setFixedSize(II)V
+HSPLandroid/view/SurfaceHolder;->setFormat(I)V
+HSPLandroid/view/SurfaceHolder;->setKeepScreenOn(Z)V
+HSPLandroid/view/SurfaceHolder;->setSizeFromLayout()V
+HSPLandroid/view/SurfaceHolder;->setType(I)V
+HSPLandroid/view/SurfaceHolder;->unlockCanvasAndPost(Landroid/graphics/Canvas;)V
+HSPLandroid/view/SurfaceSession;-><init>(Landroid/view/Surface;)V
+HSPLandroid/view/SurfaceView$1;-><init>(Landroid/view/SurfaceView;)V
+HSPLandroid/view/SurfaceView$1;->onScrollChanged()V
+HSPLandroid/view/SurfaceView$2;-><init>(Landroid/view/SurfaceView;)V
+HSPLandroid/view/SurfaceView$2;->onPreDraw()Z
+HSPLandroid/view/SurfaceView$3;-><init>(Landroid/view/SurfaceView;)V
+HSPLandroid/view/SurfaceView$3;->addCallback(Landroid/view/SurfaceHolder$Callback;)V
+HSPLandroid/view/SurfaceView$3;->getSurface()Landroid/view/Surface;
+HSPLandroid/view/SurfaceView$3;->getSurfaceFrame()Landroid/graphics/Rect;
+HSPLandroid/view/SurfaceView$3;->removeCallback(Landroid/view/SurfaceHolder$Callback;)V
+HSPLandroid/view/SurfaceView$3;->setFixedSize(II)V
+HSPLandroid/view/SurfaceView$3;->setFormat(I)V
+HSPLandroid/view/SurfaceView$SurfaceControlWithBackground;-><init>(Landroid/view/SurfaceView;Landroid/view/SurfaceSession;Ljava/lang/String;IIII)V
+HSPLandroid/view/SurfaceView$SurfaceControlWithBackground;->deferTransactionUntil(Landroid/view/Surface;J)V
+HSPLandroid/view/SurfaceView$SurfaceControlWithBackground;->destroy()V
+HSPLandroid/view/SurfaceView$SurfaceControlWithBackground;->hide()V
+HSPLandroid/view/SurfaceView$SurfaceControlWithBackground;->setLayer(I)V
+HSPLandroid/view/SurfaceView$SurfaceControlWithBackground;->setMatrix(FFFF)V
+HSPLandroid/view/SurfaceView$SurfaceControlWithBackground;->setPosition(FF)V
+HSPLandroid/view/SurfaceView$SurfaceControlWithBackground;->setSize(II)V
+HSPLandroid/view/SurfaceView$SurfaceControlWithBackground;->show()V
+HSPLandroid/view/SurfaceView$SurfaceControlWithBackground;->updateBackgroundVisibility()V
+HSPLandroid/view/SurfaceView;->-android_view_SurfaceView-mthref-0()V
+HSPLandroid/view/SurfaceView;-><init>(Landroid/content/Context;)V
+HSPLandroid/view/SurfaceView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/view/SurfaceView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/view/SurfaceView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/view/SurfaceView;->dispatchDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/view/SurfaceView;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/view/SurfaceView;->gatherTransparentRegion(Landroid/graphics/Region;)Z
+HSPLandroid/view/SurfaceView;->getHolder()Landroid/view/SurfaceHolder;
+HSPLandroid/view/SurfaceView;->getParentSurfaceInsets()Landroid/graphics/Rect;
+HSPLandroid/view/SurfaceView;->getSurfaceCallbacks()[Landroid/view/SurfaceHolder$Callback;
+HSPLandroid/view/SurfaceView;->isAboveParent()Z
+HSPLandroid/view/SurfaceView;->lambda$-android_view_SurfaceView_32105()V
+HSPLandroid/view/SurfaceView;->notifyDrawFinished()V
+HSPLandroid/view/SurfaceView;->onAttachedToWindow()V
+HSPLandroid/view/SurfaceView;->onDetachedFromWindow()V
+HSPLandroid/view/SurfaceView;->onDrawFinished()V
+HSPLandroid/view/SurfaceView;->onMeasure(II)V
+HSPLandroid/view/SurfaceView;->onWindowVisibilityChanged(I)V
+HSPLandroid/view/SurfaceView;->performDrawFinished()V
+HSPLandroid/view/SurfaceView;->runOnUiThread(Ljava/lang/Runnable;)V
+HSPLandroid/view/SurfaceView;->setFrame(IIII)Z
+HSPLandroid/view/SurfaceView;->setParentSpaceRectangle(Landroid/graphics/Rect;J)V
+HSPLandroid/view/SurfaceView;->setVisibility(I)V
+HSPLandroid/view/SurfaceView;->setZOrderMediaOverlay(Z)V
+HSPLandroid/view/SurfaceView;->surfacePositionLost_uiRtSync(J)V
+HSPLandroid/view/SurfaceView;->updateOpaqueFlag()V
+HSPLandroid/view/SurfaceView;->updateRequestedVisibility()V
+HSPLandroid/view/SurfaceView;->updateSurface()V
+HSPLandroid/view/SurfaceView;->updateSurfacePosition_renderWorker(JIIII)V
+HSPLandroid/view/TextureView$1;-><init>(Landroid/view/TextureView;)V
+HSPLandroid/view/TextureView$1;->onFrameAvailable(Landroid/graphics/SurfaceTexture;)V
+HSPLandroid/view/TextureView$SurfaceTextureListener;->onSurfaceTextureAvailable(Landroid/graphics/SurfaceTexture;II)V
+HSPLandroid/view/TextureView$SurfaceTextureListener;->onSurfaceTextureDestroyed(Landroid/graphics/SurfaceTexture;)Z
+HSPLandroid/view/TextureView$SurfaceTextureListener;->onSurfaceTextureSizeChanged(Landroid/graphics/SurfaceTexture;II)V
+HSPLandroid/view/TextureView$SurfaceTextureListener;->onSurfaceTextureUpdated(Landroid/graphics/SurfaceTexture;)V
+HSPLandroid/view/TextureView;->-wrap0(Landroid/view/TextureView;)V
+HSPLandroid/view/TextureView;-><init>(Landroid/content/Context;)V
+HSPLandroid/view/TextureView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/view/TextureView;->applyTransformMatrix()V
+HSPLandroid/view/TextureView;->applyUpdate()V
+HSPLandroid/view/TextureView;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/view/TextureView;->getHardwareLayer()Landroid/view/HardwareLayer;
+HSPLandroid/view/TextureView;->getLayerType()I
+HSPLandroid/view/TextureView;->getSurfaceTexture()Landroid/graphics/SurfaceTexture;
+HSPLandroid/view/TextureView;->isOpaque()Z
+HSPLandroid/view/TextureView;->onAttachedToWindow()V
+HSPLandroid/view/TextureView;->onSizeChanged(IIII)V
+HSPLandroid/view/TextureView;->onVisibilityChanged(Landroid/view/View;I)V
+HSPLandroid/view/TextureView;->setOpaque(Z)V
+HSPLandroid/view/TextureView;->setSurfaceTextureListener(Landroid/view/TextureView$SurfaceTextureListener;)V
+HSPLandroid/view/TextureView;->updateLayer()V
+HSPLandroid/view/TextureView;->updateLayerAndInvalidate()V
+HSPLandroid/view/ThreadedRenderer$DrawCallbacks;->onPostDraw(Landroid/view/DisplayListCanvas;)V
+HSPLandroid/view/ThreadedRenderer$DrawCallbacks;->onPreDraw(Landroid/view/DisplayListCanvas;)V
+HSPLandroid/view/ThreadedRenderer$ProcessInitializer$1;-><init>(Landroid/view/ThreadedRenderer$ProcessInitializer;)V
+HSPLandroid/view/ThreadedRenderer$ProcessInitializer;-><init>()V
+HSPLandroid/view/ThreadedRenderer$ProcessInitializer;->init(Landroid/content/Context;J)V
+HSPLandroid/view/ThreadedRenderer$ProcessInitializer;->initGraphicsStats()V
+HSPLandroid/view/ThreadedRenderer$ProcessInitializer;->initSched(J)V
+HSPLandroid/view/ThreadedRenderer$ProcessInitializer;->requestBuffer()V
+HSPLandroid/view/ThreadedRenderer;->-wrap0(J)I
+HSPLandroid/view/ThreadedRenderer;->-wrap2(I)V
+HSPLandroid/view/ThreadedRenderer;-><init>(Landroid/content/Context;ZLjava/lang/String;)V
+HSPLandroid/view/ThreadedRenderer;->buildLayer(Landroid/view/RenderNode;)V
+HSPLandroid/view/ThreadedRenderer;->create(Landroid/content/Context;ZLjava/lang/String;)Landroid/view/ThreadedRenderer;
+HSPLandroid/view/ThreadedRenderer;->createTextureLayer()Landroid/view/HardwareLayer;
+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;->fence()V
+HSPLandroid/view/ThreadedRenderer;->getHeight()I
+HSPLandroid/view/ThreadedRenderer;->getWidth()I
+HSPLandroid/view/ThreadedRenderer;->initialize(Landroid/view/Surface;)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
+HSPLandroid/view/ThreadedRenderer;->isRequested()Z
+HSPLandroid/view/ThreadedRenderer;->loadSystemProperties()Z
+HSPLandroid/view/ThreadedRenderer;->notifyFramePending()V
+HSPLandroid/view/ThreadedRenderer;->overrideProperty(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/view/ThreadedRenderer;->pauseSurface(Landroid/view/Surface;)Z
+HSPLandroid/view/ThreadedRenderer;->pushLayerUpdate(Landroid/view/HardwareLayer;)V
+HSPLandroid/view/ThreadedRenderer;->registerVectorDrawableAnimator(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;)V
+HSPLandroid/view/ThreadedRenderer;->setEnabled(Z)V
+HSPLandroid/view/ThreadedRenderer;->setLightCenter(Landroid/view/View$AttachInfo;)V
+HSPLandroid/view/ThreadedRenderer;->setOpaque(Z)V
+HSPLandroid/view/ThreadedRenderer;->setStopped(Z)V
+HSPLandroid/view/ThreadedRenderer;->setWideGamut(Z)V
+HSPLandroid/view/ThreadedRenderer;->setup(IILandroid/view/View$AttachInfo;Landroid/graphics/Rect;)V
+HSPLandroid/view/ThreadedRenderer;->setupDiskCache(Ljava/io/File;)V
+HSPLandroid/view/ThreadedRenderer;->trimMemory(I)V
+HSPLandroid/view/ThreadedRenderer;->updateEnabledState(Landroid/view/Surface;)V
+HSPLandroid/view/ThreadedRenderer;->updateRootDisplayList(Landroid/view/View;Landroid/view/ThreadedRenderer$DrawCallbacks;)V
+HSPLandroid/view/ThreadedRenderer;->updateViewTreeDisplayList(Landroid/view/View;)V
+HSPLandroid/view/TouchDelegate;-><init>(Landroid/graphics/Rect;Landroid/view/View;)V
+HSPLandroid/view/VelocityTracker;-><init>(Ljava/lang/String;)V
+HSPLandroid/view/VelocityTracker;->obtain()Landroid/view/VelocityTracker;
+HSPLandroid/view/View$1;->get(Landroid/view/View;)Ljava/lang/Float;
+HSPLandroid/view/View$1;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/view/View$1;->setValue(Landroid/view/View;F)V
+HSPLandroid/view/View$1;->setValue(Ljava/lang/Object;F)V
+HSPLandroid/view/View$2;->get(Landroid/view/View;)Ljava/lang/Float;
+HSPLandroid/view/View$2;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/view/View$2;->setValue(Landroid/view/View;F)V
+HSPLandroid/view/View$2;->setValue(Ljava/lang/Object;F)V
+HSPLandroid/view/View$3;->get(Landroid/view/View;)Ljava/lang/Float;
+HSPLandroid/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
+HSPLandroid/view/View$4;->get(Landroid/view/View;)Ljava/lang/Float;
+HSPLandroid/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
+HSPLandroid/view/View$AccessibilityDelegate;-><init>()V
+HSPLandroid/view/View$AccessibilityDelegate;->createAccessibilityNodeInfo(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeInfo;
+HSPLandroid/view/View$AccessibilityDelegate;->dispatchPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroid/view/View$AccessibilityDelegate;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider;
+HSPLandroid/view/View$AccessibilityDelegate;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroid/view/View$AccessibilityDelegate;->onInitializeAccessibilityNodeInfo(Landroid/view/View;Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HSPLandroid/view/View$AccessibilityDelegate;->onPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroid/view/View$AccessibilityDelegate;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroid/view/View$AccessibilityDelegate;->sendAccessibilityEvent(Landroid/view/View;I)V
+HSPLandroid/view/View$AccessibilityDelegate;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroid/view/View$AttachInfo$Callbacks;->performHapticFeedback(IZ)Z
+HSPLandroid/view/View$AttachInfo$Callbacks;->playSoundEffect(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$1;-><init>()V
+HSPLandroid/view/View$BaseSavedState$1;->createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Landroid/view/View$BaseSavedState;
+HSPLandroid/view/View$BaseSavedState$1;->createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;
+HSPLandroid/view/View$BaseSavedState;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/View$BaseSavedState;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V
+HSPLandroid/view/View$BaseSavedState;-><init>(Landroid/os/Parcelable;)V
+HSPLandroid/view/View$BaseSavedState;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/View$CheckForTap;-><init>(Landroid/view/View;)V
+HSPLandroid/view/View$CheckForTap;-><init>(Landroid/view/View;Landroid/view/View$CheckForTap;)V
+HSPLandroid/view/View$DeclaredOnClickListener;-><init>(Landroid/view/View;Ljava/lang/String;)V
+HSPLandroid/view/View$ForegroundInfo;->-get1(Landroid/view/View$ForegroundInfo;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/view/View$ForegroundInfo;->-get2(Landroid/view/View$ForegroundInfo;)I
+HSPLandroid/view/View$ForegroundInfo;->-get3(Landroid/view/View$ForegroundInfo;)Z
+HSPLandroid/view/View$ForegroundInfo;->-get6(Landroid/view/View$ForegroundInfo;)Landroid/view/View$TintInfo;
+HSPLandroid/view/View$ForegroundInfo;->-set0(Landroid/view/View$ForegroundInfo;Z)Z
+HSPLandroid/view/View$ForegroundInfo;->-set1(Landroid/view/View$ForegroundInfo;Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/view/View$ForegroundInfo;->-set2(Landroid/view/View$ForegroundInfo;I)I
+HSPLandroid/view/View$ForegroundInfo;->-set3(Landroid/view/View$ForegroundInfo;Z)Z
+HSPLandroid/view/View$ForegroundInfo;-><init>()V
+HSPLandroid/view/View$ForegroundInfo;-><init>(Landroid/view/View$ForegroundInfo;)V
+HSPLandroid/view/View$ListenerInfo;->-get0(Landroid/view/View$ListenerInfo;)Ljava/util/concurrent/CopyOnWriteArrayList;
+HSPLandroid/view/View$ListenerInfo;->-get1(Landroid/view/View$ListenerInfo;)Landroid/view/View$OnDragListener;
+HSPLandroid/view/View$ListenerInfo;->-get2(Landroid/view/View$ListenerInfo;)Landroid/view/View$OnGenericMotionListener;
+HSPLandroid/view/View$ListenerInfo;->-get3(Landroid/view/View$ListenerInfo;)Landroid/view/View$OnHoverListener;
+HSPLandroid/view/View$ListenerInfo;->-get4(Landroid/view/View$ListenerInfo;)Landroid/view/View$OnKeyListener;
+HSPLandroid/view/View$ListenerInfo;->-get5(Landroid/view/View$ListenerInfo;)Ljava/util/ArrayList;
+HSPLandroid/view/View$ListenerInfo;->-get6(Landroid/view/View$ListenerInfo;)Landroid/view/View$OnSystemUiVisibilityChangeListener;
+HSPLandroid/view/View$ListenerInfo;->-get7(Landroid/view/View$ListenerInfo;)Landroid/view/View$OnTouchListener;
+HSPLandroid/view/View$ListenerInfo;->-set0(Landroid/view/View$ListenerInfo;Ljava/util/concurrent/CopyOnWriteArrayList;)Ljava/util/concurrent/CopyOnWriteArrayList;
+HSPLandroid/view/View$ListenerInfo;->-set1(Landroid/view/View$ListenerInfo;Landroid/view/View$OnDragListener;)Landroid/view/View$OnDragListener;
+HSPLandroid/view/View$ListenerInfo;->-set2(Landroid/view/View$ListenerInfo;Landroid/view/View$OnGenericMotionListener;)Landroid/view/View$OnGenericMotionListener;
+HSPLandroid/view/View$ListenerInfo;->-set3(Landroid/view/View$ListenerInfo;Landroid/view/View$OnHoverListener;)Landroid/view/View$OnHoverListener;
+HSPLandroid/view/View$ListenerInfo;->-set4(Landroid/view/View$ListenerInfo;Landroid/view/View$OnKeyListener;)Landroid/view/View$OnKeyListener;
+HSPLandroid/view/View$ListenerInfo;->-set5(Landroid/view/View$ListenerInfo;Ljava/util/ArrayList;)Ljava/util/ArrayList;
+HSPLandroid/view/View$ListenerInfo;->-set6(Landroid/view/View$ListenerInfo;Landroid/view/View$OnSystemUiVisibilityChangeListener;)Landroid/view/View$OnSystemUiVisibilityChangeListener;
+HSPLandroid/view/View$ListenerInfo;->-set7(Landroid/view/View$ListenerInfo;Landroid/view/View$OnTouchListener;)Landroid/view/View$OnTouchListener;
+HSPLandroid/view/View$ListenerInfo;-><init>()V
+HSPLandroid/view/View$MatchLabelForPredicate;->-set0(Landroid/view/View$MatchLabelForPredicate;I)I
+HSPLandroid/view/View$MatchLabelForPredicate;-><init>()V
+HSPLandroid/view/View$MatchLabelForPredicate;-><init>(Landroid/view/View$MatchLabelForPredicate;)V
+HSPLandroid/view/View$MatchLabelForPredicate;->test(Landroid/view/View;)Z
+HSPLandroid/view/View$MatchLabelForPredicate;->test(Ljava/lang/Object;)Z
+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$OnApplyWindowInsetsListener;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
+HSPLandroid/view/View$OnAttachStateChangeListener;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroid/view/View$OnAttachStateChangeListener;->onViewDetachedFromWindow(Landroid/view/View;)V
+HSPLandroid/view/View$OnClickListener;->onClick(Landroid/view/View;)V
+HSPLandroid/view/View$OnCreateContextMenuListener;->onCreateContextMenu(Landroid/view/ContextMenu;Landroid/view/View;Landroid/view/ContextMenu$ContextMenuInfo;)V
+HSPLandroid/view/View$OnDragListener;->onDrag(Landroid/view/View;Landroid/view/DragEvent;)Z
+HSPLandroid/view/View$OnFocusChangeListener;->onFocusChange(Landroid/view/View;Z)V
+HSPLandroid/view/View$OnGenericMotionListener;->onGenericMotion(Landroid/view/View;Landroid/view/MotionEvent;)Z
+HSPLandroid/view/View$OnHoverListener;->onHover(Landroid/view/View;Landroid/view/MotionEvent;)Z
+HSPLandroid/view/View$OnKeyListener;->onKey(Landroid/view/View;ILandroid/view/KeyEvent;)Z
+HSPLandroid/view/View$OnLayoutChangeListener;->onLayoutChange(Landroid/view/View;IIIIIIII)V
+HSPLandroid/view/View$OnLongClickListener;->onLongClick(Landroid/view/View;)Z
+HSPLandroid/view/View$OnScrollChangeListener;->onScrollChange(Landroid/view/View;IIII)V
+HSPLandroid/view/View$OnSystemUiVisibilityChangeListener;->onSystemUiVisibilityChange(I)V
+HSPLandroid/view/View$OnTouchListener;->onTouch(Landroid/view/View;Landroid/view/MotionEvent;)Z
+HSPLandroid/view/View$PerformClick;-><init>(Landroid/view/View;)V
+HSPLandroid/view/View$PerformClick;-><init>(Landroid/view/View;Landroid/view/View$PerformClick;)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$SendViewScrolledAccessibilityEvent;-><init>(Landroid/view/View;)V
+HSPLandroid/view/View$SendViewScrolledAccessibilityEvent;-><init>(Landroid/view/View;Landroid/view/View$SendViewScrolledAccessibilityEvent;)V
+HSPLandroid/view/View$SendViewScrolledAccessibilityEvent;->run()V
+HSPLandroid/view/View$TintInfo;-><init>()V
+HSPLandroid/view/View$TooltipInfo;-><init>()V
+HSPLandroid/view/View$TooltipInfo;-><init>(Landroid/view/View$TooltipInfo;)V
+HSPLandroid/view/View$TransformationInfo;->-get1(Landroid/view/View$TransformationInfo;)Landroid/graphics/Matrix;
+HSPLandroid/view/View$TransformationInfo;-><init>()V
+HSPLandroid/view/View$UnsetPressedState;-><init>(Landroid/view/View;)V
+HSPLandroid/view/View$UnsetPressedState;-><init>(Landroid/view/View;Landroid/view/View$UnsetPressedState;)V
+HSPLandroid/view/View;->-get0(Landroid/view/View;)I
+HSPLandroid/view/View;->-get1()Z
+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
+HSPLandroid/view/View;->addFocusables(Ljava/util/ArrayList;I)V
+HSPLandroid/view/View;->addFocusables(Ljava/util/ArrayList;II)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;
+HSPLandroid/view/View;->announceForAccessibility(Ljava/lang/CharSequence;)V
+HSPLandroid/view/View;->applyBackgroundTint()V
+HSPLandroid/view/View;->applyForegroundTint()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
+HSPLandroid/view/View;->awakenScrollBars(IZ)Z
+HSPLandroid/view/View;->bringToFront()V
+HSPLandroid/view/View;->buildDrawingCache(Z)V
+HSPLandroid/view/View;->buildDrawingCacheImpl(Z)V
+HSPLandroid/view/View;->buildLayer()V
+HSPLandroid/view/View;->canHaveDisplayList()Z
+HSPLandroid/view/View;->canResolveLayoutDirection()Z
+HSPLandroid/view/View;->canResolveTextDirection()Z
+HSPLandroid/view/View;->canScrollHorizontally(I)Z
+HSPLandroid/view/View;->canScrollVertically(I)Z
+HSPLandroid/view/View;->cancelLongPress()V
+HSPLandroid/view/View;->cancelPendingInputEvents()V
+HSPLandroid/view/View;->checkInputConnectionProxy(Landroid/view/View;)Z
+HSPLandroid/view/View;->cleanupDraw()V
+HSPLandroid/view/View;->clearAccessibilityFocus()V
+HSPLandroid/view/View;->clearAccessibilityFocusNoCallbacks(I)V
+HSPLandroid/view/View;->clearAnimation()V
+HSPLandroid/view/View;->clearFocus()V
+HSPLandroid/view/View;->clearFocusInternal(Landroid/view/View;ZZ)V
+HSPLandroid/view/View;->combineMeasuredStates(II)I
+HSPLandroid/view/View;->combineVisibility(II)I
+HSPLandroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
+HSPLandroid/view/View;->computeOpaqueFlags()V
+HSPLandroid/view/View;->computeScroll()V
+HSPLandroid/view/View;->createAccessibilityNodeInfo()Landroid/view/accessibility/AccessibilityNodeInfo;
+HSPLandroid/view/View;->createAccessibilityNodeInfoInternal()Landroid/view/accessibility/AccessibilityNodeInfo;
+HSPLandroid/view/View;->damageInParent()V
+HSPLandroid/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
+HSPLandroid/view/View;->dispatchDetachedFromWindow()V
+HSPLandroid/view/View;->dispatchDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/view/View;->dispatchDrawableHotspotChanged(FF)V
+HSPLandroid/view/View;->dispatchFinishTemporaryDetach()V
+HSPLandroid/view/View;->dispatchGetDisplayList()V
+HSPLandroid/view/View;->dispatchPointerEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/View;->dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroid/view/View;->dispatchPopulateAccessibilityEventInternal(Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroid/view/View;->dispatchProvideAutofillStructure(Landroid/view/ViewStructure;I)V
+HSPLandroid/view/View;->dispatchProvideStructureForAssistOrAutofill(Landroid/view/ViewStructure;ZI)V
+HSPLandroid/view/View;->dispatchRestoreInstanceState(Landroid/util/SparseArray;)V
+HSPLandroid/view/View;->dispatchSaveInstanceState(Landroid/util/SparseArray;)V
+HSPLandroid/view/View;->dispatchSetActivated(Z)V
+HSPLandroid/view/View;->dispatchSetPressed(Z)V
+HSPLandroid/view/View;->dispatchSetSelected(Z)V
+HSPLandroid/view/View;->dispatchStartTemporaryDetach()V
+HSPLandroid/view/View;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/View;->dispatchVisibilityAggregated(Z)Z
+HSPLandroid/view/View;->dispatchVisibilityChanged(Landroid/view/View;I)V
+HSPLandroid/view/View;->dispatchWindowFocusChanged(Z)V
+HSPLandroid/view/View;->dispatchWindowSystemUiVisiblityChanged(I)V
+HSPLandroid/view/View;->dispatchWindowVisibilityChanged(I)V
+HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;Landroid/view/ViewGroup;J)Z
+HSPLandroid/view/View;->drawAutofilledHighlight(Landroid/graphics/Canvas;)V
+HSPLandroid/view/View;->drawBackground(Landroid/graphics/Canvas;)V
+HSPLandroid/view/View;->drawDefaultFocusHighlight(Landroid/graphics/Canvas;)V
+HSPLandroid/view/View;->drawableHotspotChanged(FF)V
+HSPLandroid/view/View;->drawableStateChanged()V
+HSPLandroid/view/View;->ensureTransformationInfo()V
+HSPLandroid/view/View;->findAccessibilityFocusHost(Z)Landroid/view/View;
+HSPLandroid/view/View;->findFocus()Landroid/view/View;
+HSPLandroid/view/View;->findKeyboardNavigationCluster()Landroid/view/View;
+HSPLandroid/view/View;->findLabelForView(Landroid/view/View;I)Landroid/view/View;
+HSPLandroid/view/View;->findViewById(I)Landroid/view/View;
+HSPLandroid/view/View;->findViewByPredicate(Ljava/util/function/Predicate;)Landroid/view/View;
+HSPLandroid/view/View;->findViewByPredicateInsideOut(Landroid/view/View;Ljava/util/function/Predicate;)Landroid/view/View;
+HSPLandroid/view/View;->findViewByPredicateTraversal(Ljava/util/function/Predicate;Landroid/view/View;)Landroid/view/View;
+HSPLandroid/view/View;->findViewTraversal(I)Landroid/view/View;
+HSPLandroid/view/View;->findViewWithTag(Ljava/lang/Object;)Landroid/view/View;
+HSPLandroid/view/View;->findViewWithTagTraversal(Ljava/lang/Object;)Landroid/view/View;
+HSPLandroid/view/View;->findViewsWithText(Ljava/util/ArrayList;Ljava/lang/CharSequence;I)V
+HSPLandroid/view/View;->fitSystemWindows(Landroid/graphics/Rect;)Z
+HSPLandroid/view/View;->fitSystemWindowsInt(Landroid/graphics/Rect;)Z
+HSPLandroid/view/View;->forceHasOverlappingRendering(Z)V
+HSPLandroid/view/View;->forceLayout()V
+HSPLandroid/view/View;->gatherTransparentRegion(Landroid/graphics/Region;)Z
+HSPLandroid/view/View;->generateViewId()I
+HSPLandroid/view/View;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HSPLandroid/view/View;->getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate;
+HSPLandroid/view/View;->getAccessibilityLiveRegion()I
+HSPLandroid/view/View;->getAccessibilityNodeProvider()Landroid/view/accessibility/AccessibilityNodeProvider;
+HSPLandroid/view/View;->getAccessibilitySelectionEnd()I
+HSPLandroid/view/View;->getAccessibilitySelectionStart()I
+HSPLandroid/view/View;->getAccessibilityViewId()I
+HSPLandroid/view/View;->getAccessibilityWindowId()I
+HSPLandroid/view/View;->getAlpha()F
+HSPLandroid/view/View;->getAnimation()Landroid/view/animation/Animation;
+HSPLandroid/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
+HSPLandroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;)V
+HSPLandroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;Z)V
+HSPLandroid/view/View;->getClipToOutline()Z
+HSPLandroid/view/View;->getContentDescription()Ljava/lang/CharSequence;
+HSPLandroid/view/View;->getContext()Landroid/content/Context;
+HSPLandroid/view/View;->getDefaultFocusHighlightDrawable()Landroid/graphics/drawable/Drawable;
+HSPLandroid/view/View;->getDefaultFocusHighlightEnabled()Z
+HSPLandroid/view/View;->getDefaultSize(II)I
+HSPLandroid/view/View;->getDisplay()Landroid/view/Display;
+HSPLandroid/view/View;->getDrawableRenderNode(Landroid/graphics/drawable/Drawable;Landroid/view/RenderNode;)Landroid/view/RenderNode;
+HSPLandroid/view/View;->getDrawableState()[I
+HSPLandroid/view/View;->getDrawingCache(Z)Landroid/graphics/Bitmap;
+HSPLandroid/view/View;->getDrawingRect(Landroid/graphics/Rect;)V
+HSPLandroid/view/View;->getDrawingTime()J
+HSPLandroid/view/View;->getElevation()F
+HSPLandroid/view/View;->getFinalAlpha()F
+HSPLandroid/view/View;->getFitsSystemWindows()Z
+HSPLandroid/view/View;->getFocusable()I
+HSPLandroid/view/View;->getFocusableAttribute(Landroid/content/res/TypedArray;)I
+HSPLandroid/view/View;->getForeground()Landroid/graphics/drawable/Drawable;
+HSPLandroid/view/View;->getForegroundGravity()I
+HSPLandroid/view/View;->getGlobalVisibleRect(Landroid/graphics/Rect;Landroid/graphics/Point;)Z
+HSPLandroid/view/View;->getHandler()Landroid/os/Handler;
+HSPLandroid/view/View;->getHasOverlappingRendering()Z
+HSPLandroid/view/View;->getHeight()I
+HSPLandroid/view/View;->getHitRect(Landroid/graphics/Rect;)V
+HSPLandroid/view/View;->getHorizontalFadingEdgeLength()I
+HSPLandroid/view/View;->getHorizontalScrollBarBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLandroid/view/View;->getHorizontalScrollbarHeight()I
+HSPLandroid/view/View;->getId()I
+HSPLandroid/view/View;->getImportantForAccessibility()I
+HSPLandroid/view/View;->getImportantForAutofill()I
+HSPLandroid/view/View;->getIterableTextForAccessibility()Ljava/lang/CharSequence;
+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;->getLocationInSurface([I)V
+HSPLandroid/view/View;->getLocationInWindow([I)V
+HSPLandroid/view/View;->getLocationOnScreen([I)V
+HSPLandroid/view/View;->getMatrix()Landroid/graphics/Matrix;
+HSPLandroid/view/View;->getMeasuredHeight()I
+HSPLandroid/view/View;->getMeasuredHeightAndState()I
+HSPLandroid/view/View;->getMeasuredState()I
+HSPLandroid/view/View;->getMeasuredWidth()I
+HSPLandroid/view/View;->getMeasuredWidthAndState()I
+HSPLandroid/view/View;->getMinimumHeight()I
+HSPLandroid/view/View;->getMinimumWidth()I
+HSPLandroid/view/View;->getOutsets(Landroid/graphics/Rect;)V
+HSPLandroid/view/View;->getOverScrollMode()I
+HSPLandroid/view/View;->getPaddingBottom()I
+HSPLandroid/view/View;->getPaddingEnd()I
+HSPLandroid/view/View;->getPaddingLeft()I
+HSPLandroid/view/View;->getPaddingRight()I
+HSPLandroid/view/View;->getPaddingStart()I
+HSPLandroid/view/View;->getPaddingTop()I
+HSPLandroid/view/View;->getParent()Landroid/view/ViewParent;
+HSPLandroid/view/View;->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;->getRevealOnFocusHint()Z
+HSPLandroid/view/View;->getRight()I
+HSPLandroid/view/View;->getRootView()Landroid/view/View;
+HSPLandroid/view/View;->getRotation()F
+HSPLandroid/view/View;->getRotationX()F
+HSPLandroid/view/View;->getRotationY()F
+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
+HSPLandroid/view/View;->getStraightVerticalScrollBarBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLandroid/view/View;->getSuggestedMinimumHeight()I
+HSPLandroid/view/View;->getSuggestedMinimumWidth()I
+HSPLandroid/view/View;->getSystemUiVisibility()I
+HSPLandroid/view/View;->getTag()Ljava/lang/Object;
+HSPLandroid/view/View;->getTag(I)Ljava/lang/Object;
+HSPLandroid/view/View;->getTextAlignment()I
+HSPLandroid/view/View;->getTextDirection()I
+HSPLandroid/view/View;->getTop()I
+HSPLandroid/view/View;->getTransitionAlpha()F
+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;->getVerticalScrollbarPosition()I
+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;->getWindowSystemUiVisibility()I
+HSPLandroid/view/View;->getWindowToken()Landroid/os/IBinder;
+HSPLandroid/view/View;->getWindowVisibility()I
+HSPLandroid/view/View;->getWindowVisibleDisplayFrame(Landroid/graphics/Rect;)V
+HSPLandroid/view/View;->getX()F
+HSPLandroid/view/View;->getY()F
+HSPLandroid/view/View;->getZ()F
+HSPLandroid/view/View;->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;->hasFocus()Z
+HSPLandroid/view/View;->hasFocusable()Z
+HSPLandroid/view/View;->hasFocusable(ZZ)Z
+HSPLandroid/view/View;->hasIdentityMatrix()Z
+HSPLandroid/view/View;->hasListenersForAccessibility()Z
+HSPLandroid/view/View;->hasOnClickListeners()Z
+HSPLandroid/view/View;->hasOverlappingRendering()Z
+HSPLandroid/view/View;->hasRtlSupport()Z
+HSPLandroid/view/View;->hasTransientState()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;
+HSPLandroid/view/View;->initScrollCache()V
+HSPLandroid/view/View;->initialAwakenScrollBars()Z
+HSPLandroid/view/View;->initializeScrollbarsInternal(Landroid/content/res/TypedArray;)V
+HSPLandroid/view/View;->internalSetPadding(IIII)V
+HSPLandroid/view/View;->invalidate()V
+HSPLandroid/view/View;->invalidate(IIII)V
+HSPLandroid/view/View;->invalidate(Landroid/graphics/Rect;)V
+HSPLandroid/view/View;->invalidate(Z)V
+HSPLandroid/view/View;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/View;->invalidateInternal(IIIIZZ)V
+HSPLandroid/view/View;->invalidateOutline()V
+HSPLandroid/view/View;->invalidateParentCaches()V
+HSPLandroid/view/View;->invalidateParentIfNeeded()V
+HSPLandroid/view/View;->invalidateParentIfNeededAndWasQuickRejected()V
+HSPLandroid/view/View;->invalidateViewProperty(ZZ)V
+HSPLandroid/view/View;->isAccessibilityFocused()Z
+HSPLandroid/view/View;->isAccessibilityFocusedViewOrHost()Z
+HSPLandroid/view/View;->isActionableForAccessibility()Z
+HSPLandroid/view/View;->isActivated()Z
+HSPLandroid/view/View;->isAttachedToWindow()Z
+HSPLandroid/view/View;->isAutofillable()Z
+HSPLandroid/view/View;->isAutofilled()Z
+HSPLandroid/view/View;->isClickable()Z
+HSPLandroid/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
+HSPLandroid/view/View;->isFocusedByDefault()Z
+HSPLandroid/view/View;->isForegroundInsidePadding()Z
+HSPLandroid/view/View;->isHardwareAccelerated()Z
+HSPLandroid/view/View;->isHorizontalFadingEdgeEnabled()Z
+HSPLandroid/view/View;->isHorizontalScrollBarEnabled()Z
+HSPLandroid/view/View;->isImportantForAccessibility()Z
+HSPLandroid/view/View;->isImportantForAutofill()Z
+HSPLandroid/view/View;->isInEditMode()Z
+HSPLandroid/view/View;->isInScrollingContainer()Z
+HSPLandroid/view/View;->isInTouchMode()Z
+HSPLandroid/view/View;->isKeyboardNavigationCluster()Z
+HSPLandroid/view/View;->isLaidOut()Z
+HSPLandroid/view/View;->isLayoutDirectionInherited()Z
+HSPLandroid/view/View;->isLayoutDirectionResolved()Z
+HSPLandroid/view/View;->isLayoutModeOptical(Ljava/lang/Object;)Z
+HSPLandroid/view/View;->isLayoutRequested()Z
+HSPLandroid/view/View;->isLayoutRtl()Z
+HSPLandroid/view/View;->isLongClickable()Z
+HSPLandroid/view/View;->isOpaque()Z
+HSPLandroid/view/View;->isPaddingRelative()Z
+HSPLandroid/view/View;->isPaddingResolved()Z
+HSPLandroid/view/View;->isPressed()Z
+HSPLandroid/view/View;->isProjectionReceiver()Z
+HSPLandroid/view/View;->isRootNamespace()Z
+HSPLandroid/view/View;->isRtlCompatibilityMode()Z
+HSPLandroid/view/View;->isSelected()Z
+HSPLandroid/view/View;->isShown()Z
+HSPLandroid/view/View;->isSoundEffectsEnabled()Z
+HSPLandroid/view/View;->isTemporarilyDetached()Z
+HSPLandroid/view/View;->isTextAlignmentInherited()Z
+HSPLandroid/view/View;->isTextAlignmentResolved()Z
+HSPLandroid/view/View;->isTextDirectionInherited()Z
+HSPLandroid/view/View;->isTextDirectionResolved()Z
+HSPLandroid/view/View;->isVerticalScrollBarEnabled()Z
+HSPLandroid/view/View;->isVerticalScrollBarHidden()Z
+HSPLandroid/view/View;->isViewIdGenerated(I)Z
+HSPLandroid/view/View;->isVisibleToUser()Z
+HSPLandroid/view/View;->isVisibleToUser(Landroid/graphics/Rect;)Z
+HSPLandroid/view/View;->jumpDrawablesToCurrentState()V
+HSPLandroid/view/View;->layout(IIII)V
+HSPLandroid/view/View;->makeOptionalFitsSystemWindows()V
+HSPLandroid/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
+HSPLandroid/view/View;->needRtlPropertiesResolution()Z
+HSPLandroid/view/View;->notifyEnterOrExitForAutoFillIfNeeded(Z)V
+HSPLandroid/view/View;->notifySubtreeAccessibilityStateChangedIfNeeded()V
+HSPLandroid/view/View;->notifyViewAccessibilityStateChangedIfNeeded(I)V
+HSPLandroid/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;->onApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
+HSPLandroid/view/View;->onAttachedToWindow()V
+HSPLandroid/view/View;->onCancelPendingInputEvents()V
+HSPLandroid/view/View;->onCheckIsTextEditor()Z
+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
+HSPLandroid/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
+HSPLandroid/view/View;->onInitializeAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroid/view/View;->onInitializeAccessibilityEventInternal(Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroid/view/View;->onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HSPLandroid/view/View;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HSPLandroid/view/View;->onLayout(ZIIII)V
+HSPLandroid/view/View;->onMeasure(II)V
+HSPLandroid/view/View;->onPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroid/view/View;->onPopulateAccessibilityEventInternal(Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroid/view/View;->onProvideAutofillStructure(Landroid/view/ViewStructure;I)V
+HSPLandroid/view/View;->onProvideAutofillVirtualStructure(Landroid/view/ViewStructure;I)V
+HSPLandroid/view/View;->onProvideStructureForAssistOrAutofill(Landroid/view/ViewStructure;ZI)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;
+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
+HSPLandroid/view/View;->performButtonActionOnTouchDown(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/View;->performClick()Z
+HSPLandroid/view/View;->performCollectViewAttributes(Landroid/view/View$AttachInfo;I)V
+HSPLandroid/view/View;->playSoundEffect(I)V
+HSPLandroid/view/View;->pointInView(FF)Z
+HSPLandroid/view/View;->pointInView(FFF)Z
+HSPLandroid/view/View;->populateAccessibilityNodeInfoDrawingOrderInParent(Landroid/view/accessibility/AccessibilityNodeInfo;)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;->postSendViewScrolledAccessibilityEventCallback()V
+HSPLandroid/view/View;->rebuildOutline()V
+HSPLandroid/view/View;->recomputePadding()V
+HSPLandroid/view/View;->refreshDrawableState()V
+HSPLandroid/view/View;->registerPendingFrameMetricsObservers()V
+HSPLandroid/view/View;->removeCallbacks(Ljava/lang/Runnable;)Z
+HSPLandroid/view/View;->removeLongPressCallback()V
+HSPLandroid/view/View;->removeOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V
+HSPLandroid/view/View;->removeOnLayoutChangeListener(Landroid/view/View$OnLayoutChangeListener;)V
+HSPLandroid/view/View;->removePerformClickCallback()V
+HSPLandroid/view/View;->removeSendViewScrolledAccessibilityEventCallback()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
+HSPLandroid/view/View;->requestFocus(I)Z
+HSPLandroid/view/View;->requestFocus(ILandroid/graphics/Rect;)Z
+HSPLandroid/view/View;->requestFocusNoSearch(ILandroid/graphics/Rect;)Z
+HSPLandroid/view/View;->requestLayout()V
+HSPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;)Z
+HSPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;Z)Z
+HSPLandroid/view/View;->resetDisplayList()V
+HSPLandroid/view/View;->resetPaddingToInitialValues()V
+HSPLandroid/view/View;->resetPressedState()V
+HSPLandroid/view/View;->resetResolvedDrawables()V
+HSPLandroid/view/View;->resetResolvedDrawablesInternal()V
+HSPLandroid/view/View;->resetResolvedLayoutDirection()V
+HSPLandroid/view/View;->resetResolvedPadding()V
+HSPLandroid/view/View;->resetResolvedPaddingInternal()V
+HSPLandroid/view/View;->resetResolvedTextAlignment()V
+HSPLandroid/view/View;->resetResolvedTextDirection()V
+HSPLandroid/view/View;->resetRtlProperties()V
+HSPLandroid/view/View;->resetSubtreeAccessibilityStateChanged()V
+HSPLandroid/view/View;->resolveDrawables()V
+HSPLandroid/view/View;->resolveLayoutDirection()Z
+HSPLandroid/view/View;->resolveLayoutParams()V
+HSPLandroid/view/View;->resolvePadding()V
+HSPLandroid/view/View;->resolveRtlPropertiesIfNeeded()Z
+HSPLandroid/view/View;->resolveSize(II)I
+HSPLandroid/view/View;->resolveSizeAndState(III)I
+HSPLandroid/view/View;->resolveTextAlignment()Z
+HSPLandroid/view/View;->resolveTextDirection()Z
+HSPLandroid/view/View;->restoreDefaultFocus()Z
+HSPLandroid/view/View;->restoreHierarchyState(Landroid/util/SparseArray;)V
+HSPLandroid/view/View;->rootViewRequestFocus()Z
+HSPLandroid/view/View;->saveHierarchyState(Landroid/util/SparseArray;)V
+HSPLandroid/view/View;->scrollTo(II)V
+HSPLandroid/view/View;->sendAccessibilityEvent(I)V
+HSPLandroid/view/View;->sendAccessibilityEventInternal(I)V
+HSPLandroid/view/View;->sendAccessibilityEventUnchecked(Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroid/view/View;->sendAccessibilityEventUncheckedInternal(Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroid/view/View;->setAccessibilityDelegate(Landroid/view/View$AccessibilityDelegate;)V
+HSPLandroid/view/View;->setAccessibilityLiveRegion(I)V
+HSPLandroid/view/View;->setAccessibilityTraversalAfter(I)V
+HSPLandroid/view/View;->setActivated(Z)V
+HSPLandroid/view/View;->setAlpha(F)V
+HSPLandroid/view/View;->setAlphaNoInvalidation(F)Z
+HSPLandroid/view/View;->setAnimation(Landroid/view/animation/Animation;)V
+HSPLandroid/view/View;->setAssistBlocked(Z)V
+HSPLandroid/view/View;->setAutofilled(Z)V
+HSPLandroid/view/View;->setBackground(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/View;->setBackgroundBounds()V
+HSPLandroid/view/View;->setBackgroundColor(I)V
+HSPLandroid/view/View;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/View;->setBackgroundRenderNodeProperties(Landroid/view/RenderNode;)V
+HSPLandroid/view/View;->setBackgroundResource(I)V
+HSPLandroid/view/View;->setBackgroundTintList(Landroid/content/res/ColorStateList;)V
+HSPLandroid/view/View;->setBackgroundTintMode(Landroid/graphics/PorterDuff$Mode;)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;->setDefaultFocusHighlight(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/View;->setDefaultFocusHighlightEnabled(Z)V
+HSPLandroid/view/View;->setDisplayListProperties(Landroid/view/RenderNode;)V
+HSPLandroid/view/View;->setDrawingCacheBackgroundColor(I)V
+HSPLandroid/view/View;->setDuplicateParentStateEnabled(Z)V
+HSPLandroid/view/View;->setElevation(F)V
+HSPLandroid/view/View;->setEnabled(Z)V
+HSPLandroid/view/View;->setFitsSystemWindows(Z)V
+HSPLandroid/view/View;->setFlags(II)V
+HSPLandroid/view/View;->setFocusable(I)V
+HSPLandroid/view/View;->setFocusable(Z)V
+HSPLandroid/view/View;->setFocusableInTouchMode(Z)V
+HSPLandroid/view/View;->setForeground(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/View;->setForegroundGravity(I)V
+HSPLandroid/view/View;->setFrame(IIII)Z
+HSPLandroid/view/View;->setHapticFeedbackEnabled(Z)V
+HSPLandroid/view/View;->setHasTransientState(Z)V
+HSPLandroid/view/View;->setHorizontalFadingEdgeEnabled(Z)V
+HSPLandroid/view/View;->setHorizontalScrollBarEnabled(Z)V
+HSPLandroid/view/View;->setId(I)V
+HSPLandroid/view/View;->setImportantForAccessibility(I)V
+HSPLandroid/view/View;->setImportantForAutofill(I)V
+HSPLandroid/view/View;->setIsRootNamespace(Z)V
+HSPLandroid/view/View;->setKeepScreenOn(Z)V
+HSPLandroid/view/View;->setKeyboardNavigationCluster(Z)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;->setLongClickable(Z)V
+HSPLandroid/view/View;->setMeasuredDimension(II)V
+HSPLandroid/view/View;->setMeasuredDimensionRaw(II)V
+HSPLandroid/view/View;->setMinimumHeight(I)V
+HSPLandroid/view/View;->setMinimumWidth(I)V
+HSPLandroid/view/View;->setNestedScrollingEnabled(Z)V
+HSPLandroid/view/View;->setNextFocusDownId(I)V
+HSPLandroid/view/View;->setNextFocusForwardId(I)V
+HSPLandroid/view/View;->setNextFocusLeftId(I)V
+HSPLandroid/view/View;->setNextFocusRightId(I)V
+HSPLandroid/view/View;->setNextFocusUpId(I)V
+HSPLandroid/view/View;->setOnApplyWindowInsetsListener(Landroid/view/View$OnApplyWindowInsetsListener;)V
+HSPLandroid/view/View;->setOnClickListener(Landroid/view/View$OnClickListener;)V
+HSPLandroid/view/View;->setOnCreateContextMenuListener(Landroid/view/View$OnCreateContextMenuListener;)V
+HSPLandroid/view/View;->setOnDragListener(Landroid/view/View$OnDragListener;)V
+HSPLandroid/view/View;->setOnFocusChangeListener(Landroid/view/View$OnFocusChangeListener;)V
+HSPLandroid/view/View;->setOnGenericMotionListener(Landroid/view/View$OnGenericMotionListener;)V
+HSPLandroid/view/View;->setOnHoverListener(Landroid/view/View$OnHoverListener;)V
+HSPLandroid/view/View;->setOnKeyListener(Landroid/view/View$OnKeyListener;)V
+HSPLandroid/view/View;->setOnLongClickListener(Landroid/view/View$OnLongClickListener;)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
+HSPLandroid/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;->setPressed(ZFF)V
+HSPLandroid/view/View;->setRotation(F)V
+HSPLandroid/view/View;->setRotationX(F)V
+HSPLandroid/view/View;->setRotationY(F)V
+HSPLandroid/view/View;->setSaveEnabled(Z)V
+HSPLandroid/view/View;->setSaveFromParentEnabled(Z)V
+HSPLandroid/view/View;->setScaleX(F)V
+HSPLandroid/view/View;->setScaleY(F)V
+HSPLandroid/view/View;->setScrollBarStyle(I)V
+HSPLandroid/view/View;->setScrollContainer(Z)V
+HSPLandroid/view/View;->setSelected(Z)V
+HSPLandroid/view/View;->setSoundEffectsEnabled(Z)V
+HSPLandroid/view/View;->setStateListAnimator(Landroid/animation/StateListAnimator;)V
+HSPLandroid/view/View;->setSystemUiVisibility(I)V
+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;->setTouchDelegate(Landroid/view/TouchDelegate;)V
+HSPLandroid/view/View;->setTransitionAlpha(F)V
+HSPLandroid/view/View;->setTransitionName(Ljava/lang/String;)V
+HSPLandroid/view/View;->setTranslationX(F)V
+HSPLandroid/view/View;->setTranslationY(F)V
+HSPLandroid/view/View;->setTranslationZ(F)V
+HSPLandroid/view/View;->setVerticalScrollBarEnabled(Z)V
+HSPLandroid/view/View;->setVerticalScrollbarPosition(I)V
+HSPLandroid/view/View;->setVisibility(I)V
+HSPLandroid/view/View;->setWillNotCacheDrawing(Z)V
+HSPLandroid/view/View;->setWillNotDraw(Z)V
+HSPLandroid/view/View;->setX(F)V
+HSPLandroid/view/View;->setY(F)V
+HSPLandroid/view/View;->shouldDrawRoundScrollbar()Z
+HSPLandroid/view/View;->sizeChange(IIII)V
+HSPLandroid/view/View;->skipInvalidate()Z
+HSPLandroid/view/View;->startAnimation(Landroid/view/animation/Animation;)V
+HSPLandroid/view/View;->stopNestedScroll()V
+HSPLandroid/view/View;->switchDefaultFocusHighlight()V
+HSPLandroid/view/View;->toString()Ljava/lang/String;
+HSPLandroid/view/View;->transformFromViewToWindowSpace([I)V
+HSPLandroid/view/View;->unFocus(Landroid/view/View;)V
+HSPLandroid/view/View;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/View;->updateDisplayListIfDirty()Landroid/view/RenderNode;
+HSPLandroid/view/View;->updateFocusedInCluster(Landroid/view/View;I)V
+HSPLandroid/view/View;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
+HSPLandroid/view/View;->willNotDraw()Z
+HSPLandroid/view/ViewConfiguration;-><init>(Landroid/content/Context;)V
+HSPLandroid/view/ViewConfiguration;->get(Landroid/content/Context;)Landroid/view/ViewConfiguration;
+HSPLandroid/view/ViewConfiguration;->getDoubleTapMinTime()I
+HSPLandroid/view/ViewConfiguration;->getDoubleTapTimeout()I
+HSPLandroid/view/ViewConfiguration;->getLongPressTimeout()I
+HSPLandroid/view/ViewConfiguration;->getMinimumFlingVelocity()I
+HSPLandroid/view/ViewConfiguration;->getPressedStateDuration()I
+HSPLandroid/view/ViewConfiguration;->getScaledDoubleTapSlop()I
+HSPLandroid/view/ViewConfiguration;->getScaledDoubleTapTouchSlop()I
+HSPLandroid/view/ViewConfiguration;->getScaledEdgeSlop()I
+HSPLandroid/view/ViewConfiguration;->getScaledFadingEdgeLength()I
+HSPLandroid/view/ViewConfiguration;->getScaledHorizontalScrollFactor()F
+HSPLandroid/view/ViewConfiguration;->getScaledMaximumDrawingCacheSize()I
+HSPLandroid/view/ViewConfiguration;->getScaledMaximumFlingVelocity()I
+HSPLandroid/view/ViewConfiguration;->getScaledMinScrollbarTouchTarget()I
+HSPLandroid/view/ViewConfiguration;->getScaledMinimumFlingVelocity()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
+HSPLandroid/view/ViewConfiguration;->getScrollBarFadeDuration()I
+HSPLandroid/view/ViewConfiguration;->getScrollDefaultDelay()I
+HSPLandroid/view/ViewConfiguration;->getScrollFriction()F
+HSPLandroid/view/ViewConfiguration;->getSendRecurringAccessibilityEventsInterval()J
+HSPLandroid/view/ViewConfiguration;->getTapTimeout()I
+HSPLandroid/view/ViewConfiguration;->isFadingMarqueeEnabled()Z
+HSPLandroid/view/ViewDebug$HierarchyHandler;->dumpViewHierarchyWithProperties(Ljava/io/BufferedWriter;I)V
+HSPLandroid/view/ViewDebug$HierarchyHandler;->findHierarchyView(Ljava/lang/String;I)Landroid/view/View;
+HSPLandroid/view/ViewDebug;->getViewInstanceCount()J
+HSPLandroid/view/ViewDebug;->getViewRootImplCount()J
+HSPLandroid/view/ViewGroup$1;-><init>()V
+HSPLandroid/view/ViewGroup$2;-><init>(Landroid/view/ViewGroup;)V
+HSPLandroid/view/ViewGroup$3;-><init>(Landroid/view/ViewGroup;)V
+HSPLandroid/view/ViewGroup$3;->run()V
+HSPLandroid/view/ViewGroup$4;-><init>(Landroid/view/ViewGroup;)V
+HSPLandroid/view/ViewGroup$4;->run()V
+HSPLandroid/view/ViewGroup$ChildListForAccessibility;-><init>()V
+HSPLandroid/view/ViewGroup$ChildListForAccessibility;->clear()V
+HSPLandroid/view/ViewGroup$ChildListForAccessibility;->getChildAt(I)Landroid/view/View;
+HSPLandroid/view/ViewGroup$ChildListForAccessibility;->getChildCount()I
+HSPLandroid/view/ViewGroup$ChildListForAccessibility;->init(Landroid/view/ViewGroup;Z)V
+HSPLandroid/view/ViewGroup$ChildListForAccessibility;->obtain(Landroid/view/ViewGroup;Z)Landroid/view/ViewGroup$ChildListForAccessibility;
+HSPLandroid/view/ViewGroup$ChildListForAccessibility;->recycle()V
+HSPLandroid/view/ViewGroup$ChildListForAccessibility;->sort(Ljava/util/ArrayList;)V
+HSPLandroid/view/ViewGroup$ChildListForAutoFill;-><init>()V
+HSPLandroid/view/ViewGroup$ChildListForAutoFill;->obtain()Landroid/view/ViewGroup$ChildListForAutoFill;
+HSPLandroid/view/ViewGroup$ChildListForAutoFill;->recycle()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
+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
+HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(Landroid/view/ViewGroup$MarginLayoutParams;)V
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->doResolveMargins()V
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->getLayoutDirection()I
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->getMarginEnd()I
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->getMarginStart()I
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->isMarginRelative()Z
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->resolveLayoutDirection(I)V
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->setLayoutDirection(I)V
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMarginEnd(I)V
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMarginStart(I)V
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMargins(IIII)V
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMarginsRelative(IIII)V
+HSPLandroid/view/ViewGroup$OnHierarchyChangeListener;->onChildViewAdded(Landroid/view/View;Landroid/view/View;)V
+HSPLandroid/view/ViewGroup$OnHierarchyChangeListener;->onChildViewRemoved(Landroid/view/View;Landroid/view/View;)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$ViewLocationHolder;-><init>()V
+HSPLandroid/view/ViewGroup$ViewLocationHolder;->clear()V
+HSPLandroid/view/ViewGroup$ViewLocationHolder;->compareTo(Landroid/view/ViewGroup$ViewLocationHolder;)I
+HSPLandroid/view/ViewGroup$ViewLocationHolder;->compareTo(Ljava/lang/Object;)I
+HSPLandroid/view/ViewGroup$ViewLocationHolder;->init(Landroid/view/ViewGroup;Landroid/view/View;)V
+HSPLandroid/view/ViewGroup$ViewLocationHolder;->obtain(Landroid/view/ViewGroup;Landroid/view/View;)Landroid/view/ViewGroup$ViewLocationHolder;
+HSPLandroid/view/ViewGroup$ViewLocationHolder;->recycle()V
+HSPLandroid/view/ViewGroup$ViewLocationHolder;->setComparisonStrategy(I)V
+HSPLandroid/view/ViewGroup;->-get0(Landroid/view/ViewGroup;)Landroid/view/animation/Animation$AnimationListener;
+HSPLandroid/view/ViewGroup;->-get1(Landroid/view/ViewGroup;)Landroid/view/animation/LayoutAnimationController;
+HSPLandroid/view/ViewGroup;->-wrap1(Landroid/view/ViewGroup;)V
+HSPLandroid/view/ViewGroup;-><init>(Landroid/content/Context;)V
+HSPLandroid/view/ViewGroup;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/view/ViewGroup;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/view/ViewGroup;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/view/ViewGroup;->addChildrenForAccessibility(Ljava/util/ArrayList;)V
+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;
+HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;I)V
+HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;II)V
+HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/ViewGroup;->addViewInLayout(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)Z
+HSPLandroid/view/ViewGroup;->addViewInLayout(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;Z)Z
+HSPLandroid/view/ViewGroup;->addViewInner(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;Z)V
+HSPLandroid/view/ViewGroup;->attachLayoutAnimationParameters(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;II)V
+HSPLandroid/view/ViewGroup;->attachViewToParent(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/ViewGroup;->bindLayoutAnimation(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->bringChildToFront(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->buildOrderedChildList()Ljava/util/ArrayList;
+HSPLandroid/view/ViewGroup;->buildTouchDispatchChildList()Ljava/util/ArrayList;
+HSPLandroid/view/ViewGroup;->canAnimate()Z
+HSPLandroid/view/ViewGroup;->canViewReceivePointerEvents(Landroid/view/View;)Z
+HSPLandroid/view/ViewGroup;->cancelAndClearTouchTargets(Landroid/view/MotionEvent;)V
+HSPLandroid/view/ViewGroup;->cancelHoverTarget(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->cancelTouchTarget(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
+HSPLandroid/view/ViewGroup;->childDrawableStateChanged(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->childHasTransientStateChanged(Landroid/view/View;Z)V
+HSPLandroid/view/ViewGroup;->cleanupLayoutState(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->clearCachedLayoutMode()V
+HSPLandroid/view/ViewGroup;->clearChildFocus(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->clearDisappearingChildren()V
+HSPLandroid/view/ViewGroup;->clearFocus()V
+HSPLandroid/view/ViewGroup;->clearFocusedInCluster()V
+HSPLandroid/view/ViewGroup;->clearTouchTargets()V
+HSPLandroid/view/ViewGroup;->destroyHardwareResources()V
+HSPLandroid/view/ViewGroup;->detachAllViewsFromParent()V
+HSPLandroid/view/ViewGroup;->detachViewFromParent(I)V
+HSPLandroid/view/ViewGroup;->dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
+HSPLandroid/view/ViewGroup;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V
+HSPLandroid/view/ViewGroup;->dispatchCancelPendingInputEvents()V
+HSPLandroid/view/ViewGroup;->dispatchCollectViewAttributes(Landroid/view/View$AttachInfo;I)V
+HSPLandroid/view/ViewGroup;->dispatchDetachedFromWindow()V
+HSPLandroid/view/ViewGroup;->dispatchDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/view/ViewGroup;->dispatchFinishTemporaryDetach()V
+HSPLandroid/view/ViewGroup;->dispatchFreezeSelfOnly(Landroid/util/SparseArray;)V
+HSPLandroid/view/ViewGroup;->dispatchGetDisplayList()V
+HSPLandroid/view/ViewGroup;->dispatchPopulateAccessibilityEventInternal(Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroid/view/ViewGroup;->dispatchProvideAutofillStructure(Landroid/view/ViewStructure;I)V
+HSPLandroid/view/ViewGroup;->dispatchRestoreInstanceState(Landroid/util/SparseArray;)V
+HSPLandroid/view/ViewGroup;->dispatchSaveInstanceState(Landroid/util/SparseArray;)V
+HSPLandroid/view/ViewGroup;->dispatchSetActivated(Z)V
+HSPLandroid/view/ViewGroup;->dispatchSetPressed(Z)V
+HSPLandroid/view/ViewGroup;->dispatchSetSelected(Z)V
+HSPLandroid/view/ViewGroup;->dispatchStartTemporaryDetach()V
+HSPLandroid/view/ViewGroup;->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
+HSPLandroid/view/ViewGroup;->dispatchViewAdded(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->dispatchViewRemoved(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->dispatchVisibilityAggregated(Z)Z
+HSPLandroid/view/ViewGroup;->dispatchVisibilityChanged(Landroid/view/View;I)V
+HSPLandroid/view/ViewGroup;->dispatchWindowFocusChanged(Z)V
+HSPLandroid/view/ViewGroup;->dispatchWindowSystemUiVisiblityChanged(I)V
+HSPLandroid/view/ViewGroup;->dispatchWindowVisibilityChanged(I)V
+HSPLandroid/view/ViewGroup;->drawChild(Landroid/graphics/Canvas;Landroid/view/View;J)Z
+HSPLandroid/view/ViewGroup;->drawableStateChanged()V
+HSPLandroid/view/ViewGroup;->endViewTransition(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->exitHoverTargets()V
+HSPLandroid/view/ViewGroup;->exitTooltipHoverTargets()V
+HSPLandroid/view/ViewGroup;->findFocus()Landroid/view/View;
+HSPLandroid/view/ViewGroup;->findViewByPredicateTraversal(Ljava/util/function/Predicate;Landroid/view/View;)Landroid/view/View;
+HSPLandroid/view/ViewGroup;->findViewTraversal(I)Landroid/view/View;
+HSPLandroid/view/ViewGroup;->findViewWithTagTraversal(Ljava/lang/Object;)Landroid/view/View;
+HSPLandroid/view/ViewGroup;->findViewsWithText(Ljava/util/ArrayList;Ljava/lang/CharSequence;I)V
+HSPLandroid/view/ViewGroup;->finishAnimatingView(Landroid/view/View;Landroid/view/animation/Animation;)V
+HSPLandroid/view/ViewGroup;->focusableViewAvailable(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->gatherTransparentRegion(Landroid/graphics/Region;)Z
+HSPLandroid/view/ViewGroup;->generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;
+HSPLandroid/view/ViewGroup;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
+HSPLandroid/view/ViewGroup;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HSPLandroid/view/ViewGroup;->getAndVerifyPreorderedIndex(IIZ)I
+HSPLandroid/view/ViewGroup;->getAndVerifyPreorderedView(Ljava/util/ArrayList;[Landroid/view/View;I)Landroid/view/View;
+HSPLandroid/view/ViewGroup;->getChildAt(I)Landroid/view/View;
+HSPLandroid/view/ViewGroup;->getChildCount()I
+HSPLandroid/view/ViewGroup;->getChildMeasureSpec(III)I
+HSPLandroid/view/ViewGroup;->getChildTransformation()Landroid/view/animation/Transformation;
+HSPLandroid/view/ViewGroup;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z
+HSPLandroid/view/ViewGroup;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;Z)Z
+HSPLandroid/view/ViewGroup;->getChildrenForAutofill(I)Landroid/view/ViewGroup$ChildListForAutoFill;
+HSPLandroid/view/ViewGroup;->getClipChildren()Z
+HSPLandroid/view/ViewGroup;->getClipToPadding()Z
+HSPLandroid/view/ViewGroup;->getDescendantFocusability()I
+HSPLandroid/view/ViewGroup;->getFocusedChild()Landroid/view/View;
+HSPLandroid/view/ViewGroup;->getLayoutAnimationListener()Landroid/view/animation/Animation$AnimationListener;
+HSPLandroid/view/ViewGroup;->getLayoutMode()I
+HSPLandroid/view/ViewGroup;->getLayoutTransition()Landroid/animation/LayoutTransition;
+HSPLandroid/view/ViewGroup;->getOverlay()Landroid/view/ViewGroupOverlay;
+HSPLandroid/view/ViewGroup;->getTempPoint()[F
+HSPLandroid/view/ViewGroup;->getTouchTarget(Landroid/view/View;)Landroid/view/ViewGroup$TouchTarget;
+HSPLandroid/view/ViewGroup;->getTouchscreenBlocksFocus()Z
+HSPLandroid/view/ViewGroup;->handleFocusGainInternal(ILandroid/graphics/Rect;)V
+HSPLandroid/view/ViewGroup;->hasBooleanFlag(I)Z
+HSPLandroid/view/ViewGroup;->hasChildWithZ()Z
+HSPLandroid/view/ViewGroup;->hasDefaultFocus()Z
+HSPLandroid/view/ViewGroup;->hasFocus()Z
+HSPLandroid/view/ViewGroup;->hasFocusable(ZZ)Z
+HSPLandroid/view/ViewGroup;->hasFocusableChild(Z)Z
+HSPLandroid/view/ViewGroup;->hasTransientState()Z
+HSPLandroid/view/ViewGroup;->indexOfChild(Landroid/view/View;)I
+HSPLandroid/view/ViewGroup;->initFromAttributes(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/view/ViewGroup;->initViewGroup()V
+HSPLandroid/view/ViewGroup;->internalSetPadding(IIII)V
+HSPLandroid/view/ViewGroup;->invalidateChild(Landroid/view/View;Landroid/graphics/Rect;)V
+HSPLandroid/view/ViewGroup;->isChildrenDrawingOrderEnabled()Z
+HSPLandroid/view/ViewGroup;->isLayoutModeOptical()Z
+HSPLandroid/view/ViewGroup;->isTransformedTouchPointInView(FFLandroid/view/View;Landroid/graphics/PointF;)Z
+HSPLandroid/view/ViewGroup;->isViewTransitioning(Landroid/view/View;)Z
+HSPLandroid/view/ViewGroup;->jumpDrawablesToCurrentState()V
+HSPLandroid/view/ViewGroup;->layout(IIII)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;->notifyAnimationListener()V
+HSPLandroid/view/ViewGroup;->notifySubtreeAccessibilityStateChanged(Landroid/view/View;Landroid/view/View;I)V
+HSPLandroid/view/ViewGroup;->notifySubtreeAccessibilityStateChangedIfNeeded()V
+HSPLandroid/view/ViewGroup;->offsetChildrenTopAndBottom(I)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;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HSPLandroid/view/ViewGroup;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/ViewGroup;->onLayout(ZIIII)V
+HSPLandroid/view/ViewGroup;->onRequestFocusInDescendants(ILandroid/graphics/Rect;)Z
+HSPLandroid/view/ViewGroup;->onRequestSendAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroid/view/ViewGroup;->onRequestSendAccessibilityEventInternal(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroid/view/ViewGroup;->onSetLayoutParams(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/ViewGroup;->onViewAdded(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->onViewRemoved(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->populateChildrenForAutofill(Ljava/util/ArrayList;I)V
+HSPLandroid/view/ViewGroup;->recreateChildDisplayList(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->removeAllViews()V
+HSPLandroid/view/ViewGroup;->removeAllViewsInLayout()V
+HSPLandroid/view/ViewGroup;->removeFromArray(I)V
+HSPLandroid/view/ViewGroup;->removePointersFromTouchTargets(I)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
+HSPLandroid/view/ViewGroup;->requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z
+HSPLandroid/view/ViewGroup;->requestFocus(ILandroid/graphics/Rect;)Z
+HSPLandroid/view/ViewGroup;->requestSendAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroid/view/ViewGroup;->requestTransparentRegion(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->resetCancelNextUpFlag(Landroid/view/View;)Z
+HSPLandroid/view/ViewGroup;->resetResolvedDrawables()V
+HSPLandroid/view/ViewGroup;->resetResolvedLayoutDirection()V
+HSPLandroid/view/ViewGroup;->resetResolvedPadding()V
+HSPLandroid/view/ViewGroup;->resetResolvedTextAlignment()V
+HSPLandroid/view/ViewGroup;->resetResolvedTextDirection()V
+HSPLandroid/view/ViewGroup;->resetSubtreeAccessibilityStateChanged()V
+HSPLandroid/view/ViewGroup;->resetTouchState()V
+HSPLandroid/view/ViewGroup;->resolveDrawables()V
+HSPLandroid/view/ViewGroup;->resolveLayoutDirection()Z
+HSPLandroid/view/ViewGroup;->resolveLayoutParams()V
+HSPLandroid/view/ViewGroup;->resolvePadding()V
+HSPLandroid/view/ViewGroup;->resolveRtlPropertiesIfNeeded()Z
+HSPLandroid/view/ViewGroup;->resolveTextAlignment()Z
+HSPLandroid/view/ViewGroup;->resolveTextDirection()Z
+HSPLandroid/view/ViewGroup;->restoreDefaultFocus()Z
+HSPLandroid/view/ViewGroup;->setAlwaysDrawnWithCacheEnabled(Z)V
+HSPLandroid/view/ViewGroup;->setBooleanFlag(IZ)V
+HSPLandroid/view/ViewGroup;->setChildrenDrawingCacheEnabled(Z)V
+HSPLandroid/view/ViewGroup;->setChildrenDrawingOrderEnabled(Z)V
+HSPLandroid/view/ViewGroup;->setClipChildren(Z)V
+HSPLandroid/view/ViewGroup;->setClipToPadding(Z)V
+HSPLandroid/view/ViewGroup;->setDescendantFocusability(I)V
+HSPLandroid/view/ViewGroup;->setLayoutAnimation(Landroid/view/animation/LayoutAnimationController;)V
+HSPLandroid/view/ViewGroup;->setLayoutAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V
+HSPLandroid/view/ViewGroup;->setLayoutMode(IZ)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
+HSPLandroid/view/ViewGroup;->transformPointToViewLocal([FLandroid/view/View;)V
+HSPLandroid/view/ViewGroup;->unFocus(Landroid/view/View;)V
+HSPLandroid/view/ViewGroupOverlay;-><init>(Landroid/content/Context;Landroid/view/View;)V
+HSPLandroid/view/ViewGroupOverlay;->add(Landroid/view/View;)V
+HSPLandroid/view/ViewManager;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/ViewManager;->removeView(Landroid/view/View;)V
+HSPLandroid/view/ViewManager;->updateViewLayout(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/ViewOutlineProvider$1;-><init>()V
+HSPLandroid/view/ViewOutlineProvider$1;->getOutline(Landroid/view/View;Landroid/graphics/Outline;)V
+HSPLandroid/view/ViewOutlineProvider$2;-><init>()V
+HSPLandroid/view/ViewOutlineProvider$2;->getOutline(Landroid/view/View;Landroid/graphics/Outline;)V
+HSPLandroid/view/ViewOutlineProvider$3;-><init>()V
+HSPLandroid/view/ViewOutlineProvider;-><init>()V
+HSPLandroid/view/ViewOverlay$OverlayViewGroup;-><init>(Landroid/content/Context;Landroid/view/View;)V
+HSPLandroid/view/ViewOverlay$OverlayViewGroup;->add(Landroid/view/View;)V
+HSPLandroid/view/ViewOverlay$OverlayViewGroup;->dispatchDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/view/ViewOverlay$OverlayViewGroup;->invalidate(Z)V
+HSPLandroid/view/ViewOverlay$OverlayViewGroup;->isEmpty()Z
+HSPLandroid/view/ViewOverlay$OverlayViewGroup;->onDescendantInvalidated(Landroid/view/View;Landroid/view/View;)V
+HSPLandroid/view/ViewOverlay;-><init>(Landroid/content/Context;Landroid/view/View;)V
+HSPLandroid/view/ViewOverlay;->getOverlayView()Landroid/view/ViewGroup;
+HSPLandroid/view/ViewOverlay;->isEmpty()Z
+HSPLandroid/view/ViewParent;->bringChildToFront(Landroid/view/View;)V
+HSPLandroid/view/ViewParent;->canResolveLayoutDirection()Z
+HSPLandroid/view/ViewParent;->canResolveTextAlignment()Z
+HSPLandroid/view/ViewParent;->canResolveTextDirection()Z
+HSPLandroid/view/ViewParent;->childDrawableStateChanged(Landroid/view/View;)V
+HSPLandroid/view/ViewParent;->childHasTransientStateChanged(Landroid/view/View;Z)V
+HSPLandroid/view/ViewParent;->clearChildFocus(Landroid/view/View;)V
+HSPLandroid/view/ViewParent;->createContextMenu(Landroid/view/ContextMenu;)V
+HSPLandroid/view/ViewParent;->focusSearch(Landroid/view/View;I)Landroid/view/View;
+HSPLandroid/view/ViewParent;->focusableViewAvailable(Landroid/view/View;)V
+HSPLandroid/view/ViewParent;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z
+HSPLandroid/view/ViewParent;->getLayoutDirection()I
+HSPLandroid/view/ViewParent;->getParent()Landroid/view/ViewParent;
+HSPLandroid/view/ViewParent;->getParentForAccessibility()Landroid/view/ViewParent;
+HSPLandroid/view/ViewParent;->getTextAlignment()I
+HSPLandroid/view/ViewParent;->getTextDirection()I
+HSPLandroid/view/ViewParent;->invalidateChild(Landroid/view/View;Landroid/graphics/Rect;)V
+HSPLandroid/view/ViewParent;->invalidateChildInParent([ILandroid/graphics/Rect;)Landroid/view/ViewParent;
+HSPLandroid/view/ViewParent;->isLayoutDirectionResolved()Z
+HSPLandroid/view/ViewParent;->isLayoutRequested()Z
+HSPLandroid/view/ViewParent;->isTextAlignmentResolved()Z
+HSPLandroid/view/ViewParent;->isTextDirectionResolved()Z
+HSPLandroid/view/ViewParent;->keyboardNavigationClusterSearch(Landroid/view/View;I)Landroid/view/View;
+HSPLandroid/view/ViewParent;->notifySubtreeAccessibilityStateChanged(Landroid/view/View;Landroid/view/View;I)V
+HSPLandroid/view/ViewParent;->onNestedFling(Landroid/view/View;FFZ)Z
+HSPLandroid/view/ViewParent;->onNestedPreFling(Landroid/view/View;FF)Z
+HSPLandroid/view/ViewParent;->onNestedPrePerformAccessibilityAction(Landroid/view/View;ILandroid/os/Bundle;)Z
+HSPLandroid/view/ViewParent;->onNestedPreScroll(Landroid/view/View;II[I)V
+HSPLandroid/view/ViewParent;->onNestedScroll(Landroid/view/View;IIII)V
+HSPLandroid/view/ViewParent;->onNestedScrollAccepted(Landroid/view/View;Landroid/view/View;I)V
+HSPLandroid/view/ViewParent;->onStartNestedScroll(Landroid/view/View;Landroid/view/View;I)Z
+HSPLandroid/view/ViewParent;->onStopNestedScroll(Landroid/view/View;)V
+HSPLandroid/view/ViewParent;->recomputeViewAttributes(Landroid/view/View;)V
+HSPLandroid/view/ViewParent;->requestChildFocus(Landroid/view/View;Landroid/view/View;)V
+HSPLandroid/view/ViewParent;->requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z
+HSPLandroid/view/ViewParent;->requestDisallowInterceptTouchEvent(Z)V
+HSPLandroid/view/ViewParent;->requestFitSystemWindows()V
+HSPLandroid/view/ViewParent;->requestLayout()V
+HSPLandroid/view/ViewParent;->requestSendAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroid/view/ViewParent;->requestTransparentRegion(Landroid/view/View;)V
+HSPLandroid/view/ViewParent;->showContextMenuForChild(Landroid/view/View;)Z
+HSPLandroid/view/ViewParent;->showContextMenuForChild(Landroid/view/View;FF)Z
+HSPLandroid/view/ViewParent;->startActionModeForChild(Landroid/view/View;Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;
+HSPLandroid/view/ViewParent;->startActionModeForChild(Landroid/view/View;Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
+HSPLandroid/view/ViewPropertyAnimator$1;-><init>(Landroid/view/ViewPropertyAnimator;)V
+HSPLandroid/view/ViewPropertyAnimator$1;->run()V
+HSPLandroid/view/ViewPropertyAnimator$2;-><init>(Landroid/view/ViewPropertyAnimator;)V
+HSPLandroid/view/ViewPropertyAnimator$2;->run()V
+HSPLandroid/view/ViewPropertyAnimator$3;-><init>(Landroid/view/ViewPropertyAnimator;I)V
+HSPLandroid/view/ViewPropertyAnimator$3;->run()V
+HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;-><init>(Landroid/view/ViewPropertyAnimator;)V
+HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;-><init>(Landroid/view/ViewPropertyAnimator;Landroid/view/ViewPropertyAnimator$AnimatorEventListener;)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$NameValuesHolder;-><init>(IFF)V
+HSPLandroid/view/ViewPropertyAnimator$PropertyBundle;-><init>(ILjava/util/ArrayList;)V
+HSPLandroid/view/ViewPropertyAnimator;->-get0(Landroid/view/ViewPropertyAnimator;)Ljava/util/HashMap;
+HSPLandroid/view/ViewPropertyAnimator;->-get1(Landroid/view/ViewPropertyAnimator;)Ljava/util/HashMap;
+HSPLandroid/view/ViewPropertyAnimator;->-get2(Landroid/view/ViewPropertyAnimator;)Ljava/util/HashMap;
+HSPLandroid/view/ViewPropertyAnimator;->-get3(Landroid/view/ViewPropertyAnimator;)Ljava/util/HashMap;
+HSPLandroid/view/ViewPropertyAnimator;->-get4(Landroid/view/ViewPropertyAnimator;)Ljava/util/HashMap;
+HSPLandroid/view/ViewPropertyAnimator;->-get5(Landroid/view/ViewPropertyAnimator;)Landroid/animation/Animator$AnimatorListener;
+HSPLandroid/view/ViewPropertyAnimator;->-get6(Landroid/view/ViewPropertyAnimator;)Landroid/animation/ValueAnimator$AnimatorUpdateListener;
+HSPLandroid/view/ViewPropertyAnimator;->-wrap0(Landroid/view/ViewPropertyAnimator;IF)V
+HSPLandroid/view/ViewPropertyAnimator;->-wrap1(Landroid/view/ViewPropertyAnimator;)V
+HSPLandroid/view/ViewPropertyAnimator;-><init>(Landroid/view/View;)V
+HSPLandroid/view/ViewPropertyAnimator;->alpha(F)Landroid/view/ViewPropertyAnimator;
+HSPLandroid/view/ViewPropertyAnimator;->animateProperty(IF)V
+HSPLandroid/view/ViewPropertyAnimator;->animatePropertyBy(IFF)V
+HSPLandroid/view/ViewPropertyAnimator;->cancel()V
+HSPLandroid/view/ViewPropertyAnimator;->getValue(I)F
+HSPLandroid/view/ViewPropertyAnimator;->scaleX(F)Landroid/view/ViewPropertyAnimator;
+HSPLandroid/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;
+HSPLandroid/view/ViewPropertyAnimator;->setStartDelay(J)Landroid/view/ViewPropertyAnimator;
+HSPLandroid/view/ViewPropertyAnimator;->setValue(IF)V
+HSPLandroid/view/ViewPropertyAnimator;->start()V
+HSPLandroid/view/ViewPropertyAnimator;->startAnimation()V
+HSPLandroid/view/ViewPropertyAnimator;->translationX(F)Landroid/view/ViewPropertyAnimator;
+HSPLandroid/view/ViewPropertyAnimator;->translationY(F)Landroid/view/ViewPropertyAnimator;
+HSPLandroid/view/ViewPropertyAnimator;->withEndAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;
+HSPLandroid/view/ViewPropertyAnimator;->withLayer()Landroid/view/ViewPropertyAnimator;
+HSPLandroid/view/ViewPropertyAnimator;->withStartAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;
+HSPLandroid/view/ViewRootImpl$1;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$4;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$4;->run()V
+HSPLandroid/view/ViewRootImpl$AccessibilityInteractionConnection;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$AccessibilityInteractionConnection;->findAccessibilityNodeInfoByAccessibilityId(JLandroid/graphics/Region;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIJLandroid/view/MagnificationSpec;Landroid/os/Bundle;)V
+HSPLandroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;->ensureConnection()V
+HSPLandroid/view/ViewRootImpl$ActivityConfigCallback;->onConfigurationChanged(Landroid/content/res/Configuration;I)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
+HSPLandroid/view/ViewRootImpl$AsyncInputStage;->forward(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl$ConfigChangedCallback;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputImmediatelyRunnable;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputRunnable;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputRunnable;->run()V
+HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
+HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processPointerEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$HighContrastTextManager;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$ImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
+HSPLandroid/view/ViewRootImpl$InputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
+HSPLandroid/view/ViewRootImpl$InputStage;->apply(Landroid/view/ViewRootImpl$QueuedInputEvent;I)V
+HSPLandroid/view/ViewRootImpl$InputStage;->deliver(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl$InputStage;->finish(Landroid/view/ViewRootImpl$QueuedInputEvent;Z)V
+HSPLandroid/view/ViewRootImpl$InputStage;->forward(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl$InputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl$InputStage;->shouldDropInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)Z
+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
+HSPLandroid/view/ViewRootImpl$NativePostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
+HSPLandroid/view/ViewRootImpl$NativePostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$NativePreImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
+HSPLandroid/view/ViewRootImpl$QueuedInputEvent;-><init>()V
+HSPLandroid/view/ViewRootImpl$QueuedInputEvent;-><init>(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl$QueuedInputEvent;->shouldSendToSynthesizer()Z
+HSPLandroid/view/ViewRootImpl$QueuedInputEvent;->shouldSkipIme()Z
+HSPLandroid/view/ViewRootImpl$SendWindowContentChangedAccessibilityEvent;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$SendWindowContentChangedAccessibilityEvent;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$SendWindowContentChangedAccessibilityEvent;)V
+HSPLandroid/view/ViewRootImpl$SendWindowContentChangedAccessibilityEvent;->removeCallbacksAndRun()V
+HSPLandroid/view/ViewRootImpl$SendWindowContentChangedAccessibilityEvent;->run()V
+HSPLandroid/view/ViewRootImpl$SendWindowContentChangedAccessibilityEvent;->runOrPost(Landroid/view/View;I)V
+HSPLandroid/view/ViewRootImpl$SyntheticInputStage;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl$SyntheticJoystickHandler;-><init>(Landroid/view/ViewRootImpl;)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$TrackballAxis;-><init>()V
+HSPLandroid/view/ViewRootImpl$TraversalRunnable;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$TraversalRunnable;->run()V
+HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
+HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->maybeUpdatePointerIcon(Landroid/view/MotionEvent;)V
+HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->processPointerEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$ViewPreImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
+HSPLandroid/view/ViewRootImpl$ViewRootHandler;-><init>(Landroid/view/ViewRootImpl;)V
+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
+HSPLandroid/view/ViewRootImpl$W;->closeSystemDialogs(Ljava/lang/String;)V
+HSPLandroid/view/ViewRootImpl$W;->dispatchAppVisibility(Z)V
+HSPLandroid/view/ViewRootImpl$W;->resized(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZI)V
+HSPLandroid/view/ViewRootImpl$W;->windowFocusChanged(ZZ)V
+HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;-><init>(Landroid/view/ViewRootImpl;Landroid/view/InputChannel;Landroid/os/Looper;)V
+HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onBatchedInputEventPending()V
+HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;I)V
+HSPLandroid/view/ViewRootImpl$WindowStoppedCallback;->windowStopped(Z)V
+HSPLandroid/view/ViewRootImpl;->-get1(Landroid/view/ViewRootImpl;)Landroid/util/MergedConfiguration;
+HSPLandroid/view/ViewRootImpl;->-set1(Landroid/view/ViewRootImpl;Z)Z
+HSPLandroid/view/ViewRootImpl;->-wrap0(Landroid/view/ViewRootImpl;Landroid/view/View;Landroid/view/View;)Landroid/view/View;
+HSPLandroid/view/ViewRootImpl;->-wrap11(Landroid/view/ViewRootImpl;Landroid/view/MotionEvent;)V
+HSPLandroid/view/ViewRootImpl;->-wrap13(Landroid/view/ViewRootImpl;Z)V
+HSPLandroid/view/ViewRootImpl;->-wrap14(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl;->-wrap2(Landroid/view/ViewRootImpl;Z)Z
+HSPLandroid/view/ViewRootImpl;->-wrap3(Landroid/view/ViewRootImpl;)Z
+HSPLandroid/view/ViewRootImpl;->-wrap5(Landroid/view/ViewRootImpl;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZI)V
+HSPLandroid/view/ViewRootImpl;->-wrap6(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl;-><init>(Landroid/content/Context;Landroid/view/Display;)V
+HSPLandroid/view/ViewRootImpl;->addConfigCallback(Landroid/view/ViewRootImpl$ConfigChangedCallback;)V
+HSPLandroid/view/ViewRootImpl;->addFirstDrawHandler(Ljava/lang/Runnable;)V
+HSPLandroid/view/ViewRootImpl;->addWindowCallbacks(Landroid/view/WindowCallbacks;)V
+HSPLandroid/view/ViewRootImpl;->addWindowStoppedCallback(Landroid/view/ViewRootImpl$WindowStoppedCallback;)V
+HSPLandroid/view/ViewRootImpl;->adjustInputEventForCompatibility(Landroid/view/InputEvent;)V
+HSPLandroid/view/ViewRootImpl;->applyKeepScreenOnFlag(Landroid/view/WindowManager$LayoutParams;)V
+HSPLandroid/view/ViewRootImpl;->canResolveTextDirection()Z
+HSPLandroid/view/ViewRootImpl;->cancelInvalidate(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->changeCanvasOpacity(Z)V
+HSPLandroid/view/ViewRootImpl;->checkThread()V
+HSPLandroid/view/ViewRootImpl;->childDrawableStateChanged(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->childHasTransientStateChanged(Landroid/view/View;Z)V
+HSPLandroid/view/ViewRootImpl;->clearChildFocus(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->collectViewAttributes()Z
+HSPLandroid/view/ViewRootImpl;->deliverInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl;->destroyHardwareResources()V
+HSPLandroid/view/ViewRootImpl;->dipToPx(I)I
+HSPLandroid/view/ViewRootImpl;->dispatchAppVisibility(Z)V
+HSPLandroid/view/ViewRootImpl;->dispatchApplyInsets(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->dispatchCheckFocus()V
+HSPLandroid/view/ViewRootImpl;->dispatchCloseSystemDialogs(Ljava/lang/String;)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;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZI)V
+HSPLandroid/view/ViewRootImpl;->doConsumeBatchedInput(J)V
+HSPLandroid/view/ViewRootImpl;->doProcessInputEvents()V
+HSPLandroid/view/ViewRootImpl;->doTraversal()V
+HSPLandroid/view/ViewRootImpl;->draw(Z)V
+HSPLandroid/view/ViewRootImpl;->drawAccessibilityFocusedDrawableIfNeeded(Landroid/graphics/Canvas;)V
+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
+HSPLandroid/view/ViewRootImpl;->ensureTouchMode(Z)Z
+HSPLandroid/view/ViewRootImpl;->ensureTouchModeLocally(Z)Z
+HSPLandroid/view/ViewRootImpl;->enterTouchMode()Z
+HSPLandroid/view/ViewRootImpl;->finishInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl;->focusableViewAvailable(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->getAccessibilityFocusedHost()Landroid/view/View;
+HSPLandroid/view/ViewRootImpl;->getAccessibilityFocusedRect(Landroid/graphics/Rect;)Z
+HSPLandroid/view/ViewRootImpl;->getAccessibilityInteractionController()Landroid/view/AccessibilityInteractionController;
+HSPLandroid/view/ViewRootImpl;->getAudioManager()Landroid/media/AudioManager;
+HSPLandroid/view/ViewRootImpl;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z
+HSPLandroid/view/ViewRootImpl;->getCommonPredecessor(Landroid/view/View;Landroid/view/View;)Landroid/view/View;
+HSPLandroid/view/ViewRootImpl;->getDisplayId()I
+HSPLandroid/view/ViewRootImpl;->getHostVisibility()I
+HSPLandroid/view/ViewRootImpl;->getImpliedSystemUiVisibility(Landroid/view/WindowManager$LayoutParams;)I
+HSPLandroid/view/ViewRootImpl;->getRootMeasureSpec(II)I
+HSPLandroid/view/ViewRootImpl;->getRunQueue()Landroid/view/HandlerActionQueue;
+HSPLandroid/view/ViewRootImpl;->getTextDirection()I
+HSPLandroid/view/ViewRootImpl;->getTitle()Ljava/lang/CharSequence;
+HSPLandroid/view/ViewRootImpl;->getValidLayoutRequesters(Ljava/util/ArrayList;Z)Ljava/util/ArrayList;
+HSPLandroid/view/ViewRootImpl;->getView()Landroid/view/View;
+HSPLandroid/view/ViewRootImpl;->getWindowFlags()I
+HSPLandroid/view/ViewRootImpl;->getWindowInsets(Z)Landroid/view/WindowInsets;
+HSPLandroid/view/ViewRootImpl;->handleAppVisibility(Z)V
+HSPLandroid/view/ViewRootImpl;->handleWindowContentChangedEvent(Landroid/view/accessibility/AccessibilityEvent;)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;->isInLayout()Z
+HSPLandroid/view/ViewRootImpl;->isInLocalFocusMode()Z
+HSPLandroid/view/ViewRootImpl;->isInTouchMode()Z
+HSPLandroid/view/ViewRootImpl;->isLayoutRequested()Z
+HSPLandroid/view/ViewRootImpl;->isTextDirectionResolved()Z
+HSPLandroid/view/ViewRootImpl;->isViewDescendantOf(Landroid/view/View;Landroid/view/View;)Z
+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
+HSPLandroid/view/ViewRootImpl;->notifyRendererOfFramePending()V
+HSPLandroid/view/ViewRootImpl;->notifySubtreeAccessibilityStateChanged(Landroid/view/View;Landroid/view/View;I)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/view/DisplayListCanvas;)V
+HSPLandroid/view/ViewRootImpl;->onPreDraw(Landroid/view/DisplayListCanvas;)V
+HSPLandroid/view/ViewRootImpl;->onWindowTitleChanged()V
+HSPLandroid/view/ViewRootImpl;->pendingDrawFinished()V
+HSPLandroid/view/ViewRootImpl;->performConfigurationChange(Landroid/util/MergedConfiguration;ZI)V
+HSPLandroid/view/ViewRootImpl;->performDraw()V
+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;->postSendWindowContentChangedCallback(Landroid/view/View;I)V
+HSPLandroid/view/ViewRootImpl;->profileRendering(Z)V
+HSPLandroid/view/ViewRootImpl;->recomputeViewAttributes(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->recycleQueuedInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl;->registerVectorDrawableAnimator(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;)V
+HSPLandroid/view/ViewRootImpl;->relayoutWindow(Landroid/view/WindowManager$LayoutParams;IZ)I
+HSPLandroid/view/ViewRootImpl;->removeWindowStoppedCallback(Landroid/view/ViewRootImpl$WindowStoppedCallback;)V
+HSPLandroid/view/ViewRootImpl;->reportDrawFinished()V
+HSPLandroid/view/ViewRootImpl;->reportNextDraw()V
+HSPLandroid/view/ViewRootImpl;->requestChildFocus(Landroid/view/View;Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z
+HSPLandroid/view/ViewRootImpl;->requestFitSystemWindows()V
+HSPLandroid/view/ViewRootImpl;->requestLayout()V
+HSPLandroid/view/ViewRootImpl;->requestLayoutDuringLayout(Landroid/view/View;)Z
+HSPLandroid/view/ViewRootImpl;->requestSendAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroid/view/ViewRootImpl;->requestTransparentRegion(Landroid/view/View;)V
+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
+HSPLandroid/view/ViewRootImpl;->setActivityConfigCallback(Landroid/view/ViewRootImpl$ActivityConfigCallback;)V
+HSPLandroid/view/ViewRootImpl;->setLayoutParams(Landroid/view/WindowManager$LayoutParams;Z)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;->updateConfiguration(I)V
+HSPLandroid/view/ViewRootImpl;->updateContentDrawBounds()Z
+HSPLandroid/view/ViewRootImpl;->windowFocusChanged(ZZ)V
+HSPLandroid/view/ViewStructure;-><init>()V
+HSPLandroid/view/ViewStructure;->addChildCount(I)I
+HSPLandroid/view/ViewStructure;->asyncCommit()V
+HSPLandroid/view/ViewStructure;->asyncNewChild(I)Landroid/view/ViewStructure;
+HSPLandroid/view/ViewStructure;->getAutofillId()Landroid/view/autofill/AutofillId;
+HSPLandroid/view/ViewStructure;->getChildCount()I
+HSPLandroid/view/ViewStructure;->getExtras()Landroid/os/Bundle;
+HSPLandroid/view/ViewStructure;->getHint()Ljava/lang/CharSequence;
+HSPLandroid/view/ViewStructure;->getTempRect()Landroid/graphics/Rect;
+HSPLandroid/view/ViewStructure;->getText()Ljava/lang/CharSequence;
+HSPLandroid/view/ViewStructure;->getTextSelectionEnd()I
+HSPLandroid/view/ViewStructure;->getTextSelectionStart()I
+HSPLandroid/view/ViewStructure;->hasExtras()Z
+HSPLandroid/view/ViewStructure;->newChild(I)Landroid/view/ViewStructure;
+HSPLandroid/view/ViewStructure;->newHtmlInfoBuilder(Ljava/lang/String;)Landroid/view/ViewStructure$HtmlInfo$Builder;
+HSPLandroid/view/ViewStructure;->setAccessibilityFocused(Z)V
+HSPLandroid/view/ViewStructure;->setActivated(Z)V
+HSPLandroid/view/ViewStructure;->setAlpha(F)V
+HSPLandroid/view/ViewStructure;->setAssistBlocked(Z)V
+HSPLandroid/view/ViewStructure;->setAutofillHints([Ljava/lang/String;)V
+HSPLandroid/view/ViewStructure;->setAutofillId(Landroid/view/autofill/AutofillId;)V
+HSPLandroid/view/ViewStructure;->setAutofillId(Landroid/view/autofill/AutofillId;I)V
+HSPLandroid/view/ViewStructure;->setAutofillOptions([Ljava/lang/CharSequence;)V
+HSPLandroid/view/ViewStructure;->setAutofillType(I)V
+HSPLandroid/view/ViewStructure;->setAutofillValue(Landroid/view/autofill/AutofillValue;)V
+HSPLandroid/view/ViewStructure;->setCheckable(Z)V
+HSPLandroid/view/ViewStructure;->setChecked(Z)V
+HSPLandroid/view/ViewStructure;->setChildCount(I)V
+HSPLandroid/view/ViewStructure;->setClassName(Ljava/lang/String;)V
+HSPLandroid/view/ViewStructure;->setClickable(Z)V
+HSPLandroid/view/ViewStructure;->setContentDescription(Ljava/lang/CharSequence;)V
+HSPLandroid/view/ViewStructure;->setContextClickable(Z)V
+HSPLandroid/view/ViewStructure;->setDataIsSensitive(Z)V
+HSPLandroid/view/ViewStructure;->setDimens(IIIIII)V
+HSPLandroid/view/ViewStructure;->setElevation(F)V
+HSPLandroid/view/ViewStructure;->setEnabled(Z)V
+HSPLandroid/view/ViewStructure;->setFocusable(Z)V
+HSPLandroid/view/ViewStructure;->setFocused(Z)V
+HSPLandroid/view/ViewStructure;->setHint(Ljava/lang/CharSequence;)V
+HSPLandroid/view/ViewStructure;->setHtmlInfo(Landroid/view/ViewStructure$HtmlInfo;)V
+HSPLandroid/view/ViewStructure;->setId(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/view/ViewStructure;->setInputType(I)V
+HSPLandroid/view/ViewStructure;->setLocaleList(Landroid/os/LocaleList;)V
+HSPLandroid/view/ViewStructure;->setLongClickable(Z)V
+HSPLandroid/view/ViewStructure;->setOpaque(Z)V
+HSPLandroid/view/ViewStructure;->setSelected(Z)V
+HSPLandroid/view/ViewStructure;->setText(Ljava/lang/CharSequence;)V
+HSPLandroid/view/ViewStructure;->setText(Ljava/lang/CharSequence;II)V
+HSPLandroid/view/ViewStructure;->setTextLines([I[I)V
+HSPLandroid/view/ViewStructure;->setTextStyle(FIII)V
+HSPLandroid/view/ViewStructure;->setTransformation(Landroid/graphics/Matrix;)V
+HSPLandroid/view/ViewStructure;->setVisibility(I)V
+HSPLandroid/view/ViewStructure;->setWebDomain(Ljava/lang/String;)V
+HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/view/ViewStub;->inflate()Landroid/view/View;
+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;->setLayoutResource(I)V
+HSPLandroid/view/ViewStub;->setOnInflateListener(Landroid/view/ViewStub$OnInflateListener;)V
+HSPLandroid/view/ViewStub;->setVisibility(I)V
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->-get0(Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;)Ljava/util/ArrayList;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->-set0(Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;Ljava/util/ArrayList;)Ljava/util/ArrayList;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->-set1(Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;I)I
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;-><init>()V
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->get(I)Ljava/lang/Object;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->size()I
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;-><init>()V
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->add(Ljava/lang/Object;)V
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->addAll(Landroid/view/ViewTreeObserver$CopyOnWriteArray;)V
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->end()V
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->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
+HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->equals(Ljava/lang/Object;)Z
+HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->isEmpty()Z
+HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->reset()V
+HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->set(Landroid/view/ViewTreeObserver$InternalInsetsInfo;)V
+HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->setTouchableInsets(I)V
+HSPLandroid/view/ViewTreeObserver$OnComputeInternalInsetsListener;->onComputeInternalInsets(Landroid/view/ViewTreeObserver$InternalInsetsInfo;)V
+HSPLandroid/view/ViewTreeObserver$OnDrawListener;->onDraw()V
+HSPLandroid/view/ViewTreeObserver$OnGlobalFocusChangeListener;->onGlobalFocusChanged(Landroid/view/View;Landroid/view/View;)V
+HSPLandroid/view/ViewTreeObserver$OnGlobalLayoutListener;->onGlobalLayout()V
+HSPLandroid/view/ViewTreeObserver$OnPreDrawListener;->onPreDraw()Z
+HSPLandroid/view/ViewTreeObserver$OnScrollChangedListener;->onScrollChanged()V
+HSPLandroid/view/ViewTreeObserver$OnTouchModeChangeListener;->onTouchModeChanged(Z)V
+HSPLandroid/view/ViewTreeObserver;-><init>(Landroid/content/Context;)V
+HSPLandroid/view/ViewTreeObserver;->addOnComputeInternalInsetsListener(Landroid/view/ViewTreeObserver$OnComputeInternalInsetsListener;)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
+HSPLandroid/view/ViewTreeObserver;->addOnTouchModeChangeListener(Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;)V
+HSPLandroid/view/ViewTreeObserver;->checkIsAlive()V
+HSPLandroid/view/ViewTreeObserver;->dispatchOnComputeInternalInsets(Landroid/view/ViewTreeObserver$InternalInsetsInfo;)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;->dispatchOnTouchModeChanged(Z)V
+HSPLandroid/view/ViewTreeObserver;->dispatchOnWindowAttachedChange(Z)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;->removeOnComputeInternalInsetsListener(Landroid/view/ViewTreeObserver$OnComputeInternalInsetsListener;)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$Callback;->dispatchGenericMotionEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/Window$Callback;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroid/view/Window$Callback;->dispatchKeyShortcutEvent(Landroid/view/KeyEvent;)Z
+HSPLandroid/view/Window$Callback;->dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroid/view/Window$Callback;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/Window$Callback;->dispatchTrackballEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/Window$Callback;->onActionModeFinished(Landroid/view/ActionMode;)V
+HSPLandroid/view/Window$Callback;->onActionModeStarted(Landroid/view/ActionMode;)V
+HSPLandroid/view/Window$Callback;->onAttachedToWindow()V
+HSPLandroid/view/Window$Callback;->onContentChanged()V
+HSPLandroid/view/Window$Callback;->onCreatePanelMenu(ILandroid/view/Menu;)Z
+HSPLandroid/view/Window$Callback;->onCreatePanelView(I)Landroid/view/View;
+HSPLandroid/view/Window$Callback;->onDetachedFromWindow()V
+HSPLandroid/view/Window$Callback;->onMenuItemSelected(ILandroid/view/MenuItem;)Z
+HSPLandroid/view/Window$Callback;->onMenuOpened(ILandroid/view/Menu;)Z
+HSPLandroid/view/Window$Callback;->onPanelClosed(ILandroid/view/Menu;)V
+HSPLandroid/view/Window$Callback;->onPreparePanel(ILandroid/view/View;Landroid/view/Menu;)Z
+HSPLandroid/view/Window$Callback;->onSearchRequested()Z
+HSPLandroid/view/Window$Callback;->onSearchRequested(Landroid/view/SearchEvent;)Z
+HSPLandroid/view/Window$Callback;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V
+HSPLandroid/view/Window$Callback;->onWindowStartingActionMode(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;
+HSPLandroid/view/Window$Callback;->onWindowStartingActionMode(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
+HSPLandroid/view/Window$OnWindowDismissedCallback;->onWindowDismissed(ZZ)V
+HSPLandroid/view/Window$OnWindowSwipeDismissedCallback;->onWindowSwipeDismissed()V
+HSPLandroid/view/Window$WindowControllerCallback;->enterPictureInPictureModeIfPossible()V
+HSPLandroid/view/Window$WindowControllerCallback;->exitFreeformMode()V
+HSPLandroid/view/Window$WindowControllerCallback;->getWindowStackId()I
+HSPLandroid/view/Window$WindowControllerCallback;->isTaskRoot()Z
+HSPLandroid/view/Window;-><init>(Landroid/content/Context;)V
+HSPLandroid/view/Window;->addContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/Window;->addFlags(I)V
+HSPLandroid/view/Window;->adjustLayoutParamsForSubWindow(Landroid/view/WindowManager$LayoutParams;)V
+HSPLandroid/view/Window;->alwaysReadCloseOnTouchAttr()V
+HSPLandroid/view/Window;->clearContentView()V
+HSPLandroid/view/Window;->clearFlags(I)V
+HSPLandroid/view/Window;->closeAllPanels()V
+HSPLandroid/view/Window;->closePanel(I)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;
+HSPLandroid/view/Window;->getContainer()Landroid/view/Window;
+HSPLandroid/view/Window;->getContext()Landroid/content/Context;
+HSPLandroid/view/Window;->getCurrentFocus()Landroid/view/View;
+HSPLandroid/view/Window;->getDecorView()Landroid/view/View;
+HSPLandroid/view/Window;->getDefaultFeatures(Landroid/content/Context;)I
+HSPLandroid/view/Window;->getFeatures()I
+HSPLandroid/view/Window;->getForcedWindowFlags()I
+HSPLandroid/view/Window;->getLayoutInflater()Landroid/view/LayoutInflater;
+HSPLandroid/view/Window;->getLocalFeatures()I
+HSPLandroid/view/Window;->getNavigationBarColor()I
+HSPLandroid/view/Window;->getStatusBarColor()I
+HSPLandroid/view/Window;->getVolumeControlStream()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
+HSPLandroid/view/Window;->hasSoftInputMode()Z
+HSPLandroid/view/Window;->haveDimAmount()Z
+HSPLandroid/view/Window;->invalidatePanelMenu(I)V
+HSPLandroid/view/Window;->isActive()Z
+HSPLandroid/view/Window;->isDestroyed()Z
+HSPLandroid/view/Window;->isFloating()Z
+HSPLandroid/view/Window;->isShortcutKey(ILandroid/view/KeyEvent;)Z
+HSPLandroid/view/Window;->makeActive()V
+HSPLandroid/view/Window;->onActive()V
+HSPLandroid/view/Window;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLandroid/view/Window;->onMultiWindowModeChanged()V
+HSPLandroid/view/Window;->onPictureInPictureModeChanged(Z)V
+HSPLandroid/view/Window;->openPanel(ILandroid/view/KeyEvent;)V
+HSPLandroid/view/Window;->peekDecorView()Landroid/view/View;
+HSPLandroid/view/Window;->performContextMenuIdentifierAction(II)Z
+HSPLandroid/view/Window;->performPanelIdentifierAction(III)Z
+HSPLandroid/view/Window;->performPanelShortcut(IILandroid/view/KeyEvent;I)Z
+HSPLandroid/view/Window;->reportActivityRelaunched()V
+HSPLandroid/view/Window;->requestFeature(I)Z
+HSPLandroid/view/Window;->restoreHierarchyState(Landroid/os/Bundle;)V
+HSPLandroid/view/Window;->saveHierarchyState()Landroid/os/Bundle;
+HSPLandroid/view/Window;->setAttributes(Landroid/view/WindowManager$LayoutParams;)V
+HSPLandroid/view/Window;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/Window;->setBackgroundDrawableResource(I)V
+HSPLandroid/view/Window;->setCallback(Landroid/view/Window$Callback;)V
+HSPLandroid/view/Window;->setChildDrawable(ILandroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/Window;->setChildInt(II)V
+HSPLandroid/view/Window;->setCloseOnSwipeEnabled(Z)V
+HSPLandroid/view/Window;->setCloseOnTouchOutside(Z)V
+HSPLandroid/view/Window;->setCloseOnTouchOutsideIfNotSet(Z)V
+HSPLandroid/view/Window;->setColorMode(I)V
+HSPLandroid/view/Window;->setContentView(I)V
+HSPLandroid/view/Window;->setContentView(Landroid/view/View;)V
+HSPLandroid/view/Window;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/Window;->setDecorCaptionShade(I)V
+HSPLandroid/view/Window;->setDefaultWindowFormat(I)V
+HSPLandroid/view/Window;->setFeatureDrawable(ILandroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/Window;->setFeatureDrawableAlpha(II)V
+HSPLandroid/view/Window;->setFeatureDrawableResource(II)V
+HSPLandroid/view/Window;->setFeatureDrawableUri(ILandroid/net/Uri;)V
+HSPLandroid/view/Window;->setFeatureInt(II)V
+HSPLandroid/view/Window;->setFlags(II)V
+HSPLandroid/view/Window;->setGravity(I)V
+HSPLandroid/view/Window;->setLayout(II)V
+HSPLandroid/view/Window;->setNavigationBarColor(I)V
+HSPLandroid/view/Window;->setNeedsMenuKey(I)V
+HSPLandroid/view/Window;->setOnWindowDismissedCallback(Landroid/view/Window$OnWindowDismissedCallback;)V
+HSPLandroid/view/Window;->setOnWindowSwipeDismissedCallback(Landroid/view/Window$OnWindowSwipeDismissedCallback;)V
+HSPLandroid/view/Window;->setResizingCaptionDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/Window;->setSoftInputMode(I)V
+HSPLandroid/view/Window;->setStatusBarColor(I)V
+HSPLandroid/view/Window;->setTitle(Ljava/lang/CharSequence;)V
+HSPLandroid/view/Window;->setTitleColor(I)V
+HSPLandroid/view/Window;->setVolumeControlStream(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;->superDispatchGenericMotionEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/Window;->superDispatchKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroid/view/Window;->superDispatchKeyShortcutEvent(Landroid/view/KeyEvent;)Z
+HSPLandroid/view/Window;->superDispatchTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/Window;->superDispatchTrackballEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/Window;->takeInputQueue(Landroid/view/InputQueue$Callback;)V
+HSPLandroid/view/Window;->takeKeyEvents(Z)V
+HSPLandroid/view/Window;->takeSurface(Landroid/view/SurfaceHolder$Callback2;)V
+HSPLandroid/view/Window;->togglePanel(ILandroid/view/KeyEvent;)V
+HSPLandroid/view/WindowCallbackWrapper;-><init>(Landroid/view/Window$Callback;)V
+HSPLandroid/view/WindowCallbackWrapper;->onAttachedToWindow()V
+HSPLandroid/view/WindowCallbackWrapper;->onCreatePanelMenu(ILandroid/view/Menu;)Z
+HSPLandroid/view/WindowCallbackWrapper;->onPreparePanel(ILandroid/view/View;Landroid/view/Menu;)Z
+HSPLandroid/view/WindowCallbackWrapper;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V
+HSPLandroid/view/WindowCallbackWrapper;->onWindowFocusChanged(Z)V
+HSPLandroid/view/WindowCallbacks;->onContentDrawn(IIII)Z
+HSPLandroid/view/WindowCallbacks;->onPostDraw(Landroid/view/DisplayListCanvas;)V
+HSPLandroid/view/WindowCallbacks;->onRequestDraw(Z)V
+HSPLandroid/view/WindowCallbacks;->onWindowDragResizeEnd()V
+HSPLandroid/view/WindowCallbacks;->onWindowDragResizeStart(Landroid/graphics/Rect;ZLandroid/graphics/Rect;Landroid/graphics/Rect;I)V
+HSPLandroid/view/WindowCallbacks;->onWindowSizeIsChanging(Landroid/graphics/Rect;ZLandroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLandroid/view/WindowInsets;-><init>(Landroid/graphics/Rect;)V
+HSPLandroid/view/WindowInsets;-><init>(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZZ)V
+HSPLandroid/view/WindowInsets;-><init>(Landroid/view/WindowInsets;)V
+HSPLandroid/view/WindowInsets;->consumeStableInsets()Landroid/view/WindowInsets;
+HSPLandroid/view/WindowInsets;->consumeSystemWindowInsets()Landroid/view/WindowInsets;
+HSPLandroid/view/WindowInsets;->getStableInsetBottom()I
+HSPLandroid/view/WindowInsets;->getStableInsetLeft()I
+HSPLandroid/view/WindowInsets;->getStableInsetRight()I
+HSPLandroid/view/WindowInsets;->getStableInsetTop()I
+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/Rect;
+HSPLandroid/view/WindowInsets;->isConsumed()Z
+HSPLandroid/view/WindowInsets;->replaceSystemWindowInsets(IIII)Landroid/view/WindowInsets;
+HSPLandroid/view/WindowInsets;->shouldAlwaysConsumeNavBar()Z
+HSPLandroid/view/WindowLeaked;-><init>(Ljava/lang/String;)V
+HSPLandroid/view/WindowManager$LayoutParams$1;-><init>()V
+HSPLandroid/view/WindowManager$LayoutParams$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/WindowManager$LayoutParams;
+HSPLandroid/view/WindowManager$LayoutParams$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/view/WindowManager$LayoutParams;-><init>()V
+HSPLandroid/view/WindowManager$LayoutParams;-><init>(IIIII)V
+HSPLandroid/view/WindowManager$LayoutParams;-><init>(IIIIIII)V
+HSPLandroid/view/WindowManager$LayoutParams;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/WindowManager$LayoutParams;->copyFrom(Landroid/view/WindowManager$LayoutParams;)I
+HSPLandroid/view/WindowManager$LayoutParams;->getTitle()Ljava/lang/CharSequence;
+HSPLandroid/view/WindowManager$LayoutParams;->mayUseInputMethod(I)Z
+HSPLandroid/view/WindowManager$LayoutParams;->setColorMode(I)V
+HSPLandroid/view/WindowManager$LayoutParams;->setSurfaceInsets(Landroid/view/View;ZZ)V
+HSPLandroid/view/WindowManager$LayoutParams;->setTitle(Ljava/lang/CharSequence;)V
+HSPLandroid/view/WindowManager$LayoutParams;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/WindowManager;->getCurrentImeTouchRegion()Landroid/graphics/Region;
+HSPLandroid/view/WindowManager;->getDefaultDisplay()Landroid/view/Display;
+HSPLandroid/view/WindowManager;->removeViewImmediate(Landroid/view/View;)V
+HSPLandroid/view/WindowManager;->requestAppKeyboardShortcuts(Landroid/view/WindowManager$KeyboardShortcutsReceiver;I)V
+HSPLandroid/view/WindowManagerGlobal$1;-><init>()V
+HSPLandroid/view/WindowManagerGlobal$2;-><init>(Landroid/view/WindowManagerGlobal;)V
+HSPLandroid/view/WindowManagerGlobal;-><init>()V
+HSPLandroid/view/WindowManagerGlobal;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;Landroid/view/Display;Landroid/view/Window;)V
+HSPLandroid/view/WindowManagerGlobal;->changeCanvasOpacity(Landroid/os/IBinder;Z)V
+HSPLandroid/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;
+HSPLandroid/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;->setStoppedState(Landroid/os/IBinder;Z)V
+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;
+HSPLandroid/view/WindowManagerImpl;->updateViewLayout(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/accessibility/AccessibilityEvent$1;-><init>()V
+HSPLandroid/view/accessibility/AccessibilityEvent;-><init>()V
+HSPLandroid/view/accessibility/AccessibilityEvent;->clear()V
+HSPLandroid/view/accessibility/AccessibilityEvent;->getEventType()I
+HSPLandroid/view/accessibility/AccessibilityEvent;->getRecordCount()I
+HSPLandroid/view/accessibility/AccessibilityEvent;->obtain()Landroid/view/accessibility/AccessibilityEvent;
+HSPLandroid/view/accessibility/AccessibilityEvent;->obtain(I)Landroid/view/accessibility/AccessibilityEvent;
+HSPLandroid/view/accessibility/AccessibilityEvent;->recycle()V
+HSPLandroid/view/accessibility/AccessibilityEvent;->setContentChangeTypes(I)V
+HSPLandroid/view/accessibility/AccessibilityEvent;->setEventTime(J)V
+HSPLandroid/view/accessibility/AccessibilityEvent;->setEventType(I)V
+HSPLandroid/view/accessibility/AccessibilityEvent;->setPackageName(Ljava/lang/CharSequence;)V
+HSPLandroid/view/accessibility/AccessibilityEvent;->writeAccessibilityRecordToParcel(Landroid/view/accessibility/AccessibilityRecord;Landroid/os/Parcel;I)V
+HSPLandroid/view/accessibility/AccessibilityEvent;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/accessibility/AccessibilityEventSource;->sendAccessibilityEvent(I)V
+HSPLandroid/view/accessibility/AccessibilityEventSource;->sendAccessibilityEventUnchecked(Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroid/view/accessibility/AccessibilityManager$1;-><init>(Landroid/view/accessibility/AccessibilityManager;)V
+HSPLandroid/view/accessibility/AccessibilityManager$1;->setRelevantEventTypes(I)V
+HSPLandroid/view/accessibility/AccessibilityManager$1;->setState(I)V
+HSPLandroid/view/accessibility/AccessibilityManager$AccessibilityServicesStateChangeListener;->onAccessibilityServicesStateChanged(Landroid/view/accessibility/AccessibilityManager;)V
+HSPLandroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;->onAccessibilityStateChanged(Z)V
+HSPLandroid/view/accessibility/AccessibilityManager$HighTextContrastChangeListener;->onHighTextContrastStateChanged(Z)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$MyCallback;)V
+HSPLandroid/view/accessibility/AccessibilityManager$MyCallback;->handleMessage(Landroid/os/Message;)Z
+HSPLandroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;->onTouchExplorationStateChanged(Z)V
+HSPLandroid/view/accessibility/AccessibilityManager;->-get0(Landroid/view/accessibility/AccessibilityManager;)Ljava/lang/Object;
+HSPLandroid/view/accessibility/AccessibilityManager;->-wrap0(Landroid/view/accessibility/AccessibilityManager;I)V
+HSPLandroid/view/accessibility/AccessibilityManager;-><init>(Landroid/content/Context;Landroid/view/accessibility/IAccessibilityManager;I)V
+HSPLandroid/view/accessibility/AccessibilityManager;->addAccessibilityInteractionConnection(Landroid/view/IWindow;Landroid/view/accessibility/IAccessibilityInteractionConnection;)I
+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;->getInstance(Landroid/content/Context;)Landroid/view/accessibility/AccessibilityManager;
+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
+HSPLandroid/view/accessibility/AccessibilityManager;->notifyAccessibilityStateChanged()V
+HSPLandroid/view/accessibility/AccessibilityManager;->sendAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroid/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/AccessibilityNodeInfo$1;-><init>()V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;-><init>(I)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;-><init>(ILjava/lang/CharSequence;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->equals(Ljava/lang/Object;)Z
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->getLabel()Ljava/lang/CharSequence;
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->hashCode()I
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;-><init>(IIZI)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;->clear()V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;->getColumnCount()I
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;->getRowCount()I
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;->getSelectionMode()I
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;->isHierarchical()Z
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;->obtain(IIZI)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;->recycle()V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;-><init>(IIIIZZ)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;->clear()V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;->getColumnIndex()I
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;->getColumnSpan()I
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;->getRowIndex()I
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;->getRowSpan()I
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;->isHeading()Z
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;->isSelected()Z
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;->obtain(IIIIZZ)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;->recycle()V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;-><init>()V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->addAction(I)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->addAction(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->addActionUnchecked(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->addChildInternal(Landroid/view/View;IZ)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->addChildUnchecked(Landroid/view/View;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->addStandardActions(I)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->clear()V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->enforceNotSealed()V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->getAccessibilityViewId(J)I
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->getActionSingletonBySerializationFlag(I)Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->getBoundsInScreen(Landroid/graphics/Rect;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->getVirtualDescendantId(J)I
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->init(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->isDefaultStandardAction(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)Z
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->isSealed()Z
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->makeNodeId(II)J
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->obtain()Landroid/view/accessibility/AccessibilityNodeInfo;
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->obtain(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeInfo;
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->recycle()V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->removeAction(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)Z
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setAccessibilityFocused(Z)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setAvailableExtraData(Ljava/util/List;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setBooleanProperty(IZ)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setBoundsInParent(Landroid/graphics/Rect;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setBoundsInScreen(Landroid/graphics/Rect;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setClassName(Ljava/lang/CharSequence;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setClickable(Z)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setCollectionInfo(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setCollectionItemInfo(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setContentDescription(Ljava/lang/CharSequence;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setContextClickable(Z)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setDrawingOrder(I)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setEnabled(Z)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setFocusable(Z)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setFocused(Z)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setHintText(Ljava/lang/CharSequence;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setImportantForAccessibility(Z)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setLiveRegion(I)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setLongClickable(Z)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setMovementGranularities(I)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setMultiLine(Z)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setPackageName(Ljava/lang/CharSequence;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setParent(Landroid/view/View;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setParent(Landroid/view/View;I)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setPassword(Z)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setSelected(Z)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setShowingHintText(Z)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setSource(Landroid/view/View;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setSource(Landroid/view/View;I)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setText(Ljava/lang/CharSequence;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setTextSelection(II)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setViewIdResourceName(Ljava/lang/String;)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->setVisibleToUser(Z)V
+HSPLandroid/view/accessibility/AccessibilityNodeInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/accessibility/AccessibilityRecord;-><init>()V
+HSPLandroid/view/accessibility/AccessibilityRecord;->clear()V
+HSPLandroid/view/accessibility/AccessibilityRecord;->enforceNotSealed()V
+HSPLandroid/view/accessibility/AccessibilityRecord;->getText()Ljava/util/List;
+HSPLandroid/view/accessibility/AccessibilityRecord;->isSealed()Z
+HSPLandroid/view/accessibility/AccessibilityRecord;->setBooleanProperty(IZ)V
+HSPLandroid/view/accessibility/AccessibilityRecord;->setClassName(Ljava/lang/CharSequence;)V
+HSPLandroid/view/accessibility/AccessibilityRecord;->setContentDescription(Ljava/lang/CharSequence;)V
+HSPLandroid/view/accessibility/AccessibilityRecord;->setCurrentItemIndex(I)V
+HSPLandroid/view/accessibility/AccessibilityRecord;->setEnabled(Z)V
+HSPLandroid/view/accessibility/AccessibilityRecord;->setFullScreen(Z)V
+HSPLandroid/view/accessibility/AccessibilityRecord;->setItemCount(I)V
+HSPLandroid/view/accessibility/AccessibilityRecord;->setPassword(Z)V
+HSPLandroid/view/accessibility/AccessibilityRecord;->setScrollable(Z)V
+HSPLandroid/view/accessibility/AccessibilityRecord;->setSource(Landroid/view/View;)V
+HSPLandroid/view/accessibility/AccessibilityRecord;->setSource(Landroid/view/View;I)V
+HSPLandroid/view/accessibility/CaptioningManager$1;-><init>(Landroid/view/accessibility/CaptioningManager;)V
+HSPLandroid/view/accessibility/CaptioningManager$CaptionStyle;-><init>(IIIIILjava/lang/String;)V
+HSPLandroid/view/accessibility/CaptioningManager$CaptionStyle;->getTypeface()Landroid/graphics/Typeface;
+HSPLandroid/view/accessibility/CaptioningManager$CaptionStyle;->hasBackgroundColor()Z
+HSPLandroid/view/accessibility/CaptioningManager$CaptionStyle;->hasColor(I)Z
+HSPLandroid/view/accessibility/CaptioningManager$CaptionStyle;->hasEdgeColor()Z
+HSPLandroid/view/accessibility/CaptioningManager$CaptionStyle;->hasEdgeType()Z
+HSPLandroid/view/accessibility/CaptioningManager$CaptionStyle;->hasForegroundColor()Z
+HSPLandroid/view/accessibility/CaptioningManager$CaptionStyle;->hasWindowColor()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;
+HSPLandroid/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;->isEnabled()Z
+HSPLandroid/view/accessibility/CaptioningManager;->registerObserver(Ljava/lang/String;)V
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnection$Stub;-><init>()V
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnection$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnection$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnection;->findAccessibilityNodeInfoByAccessibilityId(JLandroid/graphics/Region;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIJLandroid/view/MagnificationSpec;Landroid/os/Bundle;)V
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnection;->findAccessibilityNodeInfosByText(JLjava/lang/String;Landroid/graphics/Region;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIJLandroid/view/MagnificationSpec;)V
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnection;->findAccessibilityNodeInfosByViewId(JLjava/lang/String;Landroid/graphics/Region;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIJLandroid/view/MagnificationSpec;)V
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnection;->findFocus(JILandroid/graphics/Region;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIJLandroid/view/MagnificationSpec;)V
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnection;->focusSearch(JILandroid/graphics/Region;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIJLandroid/view/MagnificationSpec;)V
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnection;->performAccessibilityAction(JILandroid/os/Bundle;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIJ)V
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnectionCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnectionCallback$Stub$Proxy;->setFindAccessibilityNodeInfosResult(Ljava/util/List;I)V
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnectionCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;->setFindAccessibilityNodeInfoResult(Landroid/view/accessibility/AccessibilityNodeInfo;I)V
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;->setFindAccessibilityNodeInfosResult(Ljava/util/List;I)V
+HSPLandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;->setPerformAccessibilityActionResult(ZI)V
+HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->addAccessibilityInteractionConnection(Landroid/view/IWindow;Landroid/view/accessibility/IAccessibilityInteractionConnection;I)I
+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;->sendAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;I)V
+HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->setPictureInPictureActionReplacingConnection(Landroid/view/accessibility/IAccessibilityInteractionConnection;)V
+HSPLandroid/view/accessibility/IAccessibilityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/accessibility/IAccessibilityManager;
+HSPLandroid/view/accessibility/IAccessibilityManager;->addAccessibilityInteractionConnection(Landroid/view/IWindow;Landroid/view/accessibility/IAccessibilityInteractionConnection;I)I
+HSPLandroid/view/accessibility/IAccessibilityManager;->addClient(Landroid/view/accessibility/IAccessibilityManagerClient;I)J
+HSPLandroid/view/accessibility/IAccessibilityManager;->getEnabledAccessibilityServiceList(II)Ljava/util/List;
+HSPLandroid/view/accessibility/IAccessibilityManager;->getInstalledAccessibilityServiceList(I)Ljava/util/List;
+HSPLandroid/view/accessibility/IAccessibilityManager;->getWindowToken(II)Landroid/os/IBinder;
+HSPLandroid/view/accessibility/IAccessibilityManager;->interrupt(I)V
+HSPLandroid/view/accessibility/IAccessibilityManager;->notifyAccessibilityButtonClicked()V
+HSPLandroid/view/accessibility/IAccessibilityManager;->notifyAccessibilityButtonVisibilityChanged(Z)V
+HSPLandroid/view/accessibility/IAccessibilityManager;->performAccessibilityShortcut()V
+HSPLandroid/view/accessibility/IAccessibilityManager;->registerUiTestAutomationService(Landroid/os/IBinder;Landroid/accessibilityservice/IAccessibilityServiceClient;Landroid/accessibilityservice/AccessibilityServiceInfo;I)V
+HSPLandroid/view/accessibility/IAccessibilityManager;->removeAccessibilityInteractionConnection(Landroid/view/IWindow;)V
+HSPLandroid/view/accessibility/IAccessibilityManager;->sendAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;I)V
+HSPLandroid/view/accessibility/IAccessibilityManager;->sendFingerprintGesture(I)Z
+HSPLandroid/view/accessibility/IAccessibilityManager;->setPictureInPictureActionReplacingConnection(Landroid/view/accessibility/IAccessibilityInteractionConnection;)V
+HSPLandroid/view/accessibility/IAccessibilityManager;->temporaryEnableAccessibilityStateUntilKeyguardRemoved(Landroid/content/ComponentName;Z)V
+HSPLandroid/view/accessibility/IAccessibilityManager;->unregisterUiTestAutomationService(Landroid/accessibilityservice/IAccessibilityServiceClient;)V
+HSPLandroid/view/accessibility/IAccessibilityManagerClient$Stub;-><init>()V
+HSPLandroid/view/accessibility/IAccessibilityManagerClient$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/view/accessibility/IAccessibilityManagerClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/view/accessibility/IAccessibilityManagerClient;->notifyServicesStateChanged()V
+HSPLandroid/view/accessibility/IAccessibilityManagerClient;->setRelevantEventTypes(I)V
+HSPLandroid/view/accessibility/IAccessibilityManagerClient;->setState(I)V
+HSPLandroid/view/animation/AccelerateDecelerateInterpolator;-><init>()V
+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/AlphaAnimation;-><init>(FF)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
+HSPLandroid/view/animation/Animation$1;-><init>(Landroid/view/animation/Animation;)V
+HSPLandroid/view/animation/Animation$1;->run()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$3;->run()V
+HSPLandroid/view/animation/Animation$AnimationListener;->onAnimationEnd(Landroid/view/animation/Animation;)V
+HSPLandroid/view/animation/Animation$AnimationListener;->onAnimationRepeat(Landroid/view/animation/Animation;)V
+HSPLandroid/view/animation/Animation$AnimationListener;->onAnimationStart(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
+HSPLandroid/view/animation/Animation;->cancel()V
+HSPLandroid/view/animation/Animation;->clone()Landroid/view/animation/Animation;
+HSPLandroid/view/animation/Animation;->detach()V
+HSPLandroid/view/animation/Animation;->ensureInterpolator()V
+HSPLandroid/view/animation/Animation;->finalize()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
+HSPLandroid/view/animation/Animation;->getInvalidateRegion(IIIILandroid/graphics/RectF;Landroid/view/animation/Transformation;)V
+HSPLandroid/view/animation/Animation;->getScaleFactor()F
+HSPLandroid/view/animation/Animation;->getStartOffset()J
+HSPLandroid/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
+HSPLandroid/view/animation/Animation;->hasAlpha()Z
+HSPLandroid/view/animation/Animation;->hasEnded()Z
+HSPLandroid/view/animation/Animation;->hasStarted()Z
+HSPLandroid/view/animation/Animation;->initialize(IIII)V
+HSPLandroid/view/animation/Animation;->initializeInvalidateRegion(IIII)V
+HSPLandroid/view/animation/Animation;->isCanceled()Z
+HSPLandroid/view/animation/Animation;->isFillEnabled()Z
+HSPLandroid/view/animation/Animation;->isInitialized()Z
+HSPLandroid/view/animation/Animation;->reset()V
+HSPLandroid/view/animation/Animation;->resolveSize(IFII)F
+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
+HSPLandroid/view/animation/Animation;->setDuration(J)V
+HSPLandroid/view/animation/Animation;->setFillAfter(Z)V
+HSPLandroid/view/animation/Animation;->setFillBefore(Z)V
+HSPLandroid/view/animation/Animation;->setFillEnabled(Z)V
+HSPLandroid/view/animation/Animation;->setInterpolator(Landroid/content/Context;I)V
+HSPLandroid/view/animation/Animation;->setInterpolator(Landroid/view/animation/Interpolator;)V
+HSPLandroid/view/animation/Animation;->setListenerHandler(Landroid/os/Handler;)V
+HSPLandroid/view/animation/Animation;->setRepeatCount(I)V
+HSPLandroid/view/animation/Animation;->setRepeatMode(I)V
+HSPLandroid/view/animation/Animation;->setStartOffset(J)V
+HSPLandroid/view/animation/Animation;->setStartTime(J)V
+HSPLandroid/view/animation/Animation;->setZAdjustment(I)V
+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;->addAnimation(Landroid/view/animation/Animation;)V
+HSPLandroid/view/animation/AnimationSet;->clone()Landroid/view/animation/Animation;
+HSPLandroid/view/animation/AnimationSet;->clone()Landroid/view/animation/AnimationSet;
+HSPLandroid/view/animation/AnimationSet;->getAnimations()Ljava/util/List;
+HSPLandroid/view/animation/AnimationSet;->getDuration()J
+HSPLandroid/view/animation/AnimationSet;->getStartTime()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
+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;-><init>()V
+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
+HSPLandroid/view/animation/AnimationUtils$AnimationState;-><init>(Landroid/view/animation/AnimationUtils$AnimationState;)V
+HSPLandroid/view/animation/AnimationUtils;->createAnimationFromXml(Landroid/content/Context;Lorg/xmlpull/v1/XmlPullParser;)Landroid/view/animation/Animation;
+HSPLandroid/view/animation/AnimationUtils;->createAnimationFromXml(Landroid/content/Context;Lorg/xmlpull/v1/XmlPullParser;Landroid/view/animation/AnimationSet;Landroid/util/AttributeSet;)Landroid/view/animation/Animation;
+HSPLandroid/view/animation/AnimationUtils;->createInterpolatorFromXml(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Lorg/xmlpull/v1/XmlPullParser;)Landroid/view/animation/Interpolator;
+HSPLandroid/view/animation/AnimationUtils;->createLayoutAnimationFromXml(Landroid/content/Context;Lorg/xmlpull/v1/XmlPullParser;)Landroid/view/animation/LayoutAnimationController;
+HSPLandroid/view/animation/AnimationUtils;->createLayoutAnimationFromXml(Landroid/content/Context;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/view/animation/LayoutAnimationController;
+HSPLandroid/view/animation/AnimationUtils;->currentAnimationTimeMillis()J
+HSPLandroid/view/animation/AnimationUtils;->loadAnimation(Landroid/content/Context;I)Landroid/view/animation/Animation;
+HSPLandroid/view/animation/AnimationUtils;->loadInterpolator(Landroid/content/Context;I)Landroid/view/animation/Interpolator;
+HSPLandroid/view/animation/AnimationUtils;->loadInterpolator(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;I)Landroid/view/animation/Interpolator;
+HSPLandroid/view/animation/AnimationUtils;->loadLayoutAnimation(Landroid/content/Context;I)Landroid/view/animation/LayoutAnimationController;
+HSPLandroid/view/animation/AnimationUtils;->lockAnimationClock(J)V
+HSPLandroid/view/animation/AnimationUtils;->unlockAnimationClock()V
+HSPLandroid/view/animation/BaseInterpolator;-><init>()V
+HSPLandroid/view/animation/BaseInterpolator;->getChangingConfiguration()I
+HSPLandroid/view/animation/BaseInterpolator;->setChangingConfiguration(I)V
+HSPLandroid/view/animation/CycleInterpolator;-><init>(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;)V
+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
+HSPLandroid/view/animation/DecelerateInterpolator;->getInterpolation(F)F
+HSPLandroid/view/animation/LayoutAnimationController$AnimationParameters;-><init>()V
+HSPLandroid/view/animation/LayoutAnimationController;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/view/animation/LayoutAnimationController;-><init>(Landroid/view/animation/Animation;)V
+HSPLandroid/view/animation/LayoutAnimationController;-><init>(Landroid/view/animation/Animation;F)V
+HSPLandroid/view/animation/LayoutAnimationController;->getAnimation()Landroid/view/animation/Animation;
+HSPLandroid/view/animation/LayoutAnimationController;->getAnimationForView(Landroid/view/View;)Landroid/view/animation/Animation;
+HSPLandroid/view/animation/LayoutAnimationController;->getDelayForView(Landroid/view/View;)J
+HSPLandroid/view/animation/LayoutAnimationController;->getOrder()I
+HSPLandroid/view/animation/LayoutAnimationController;->getTransformedIndex(Landroid/view/animation/LayoutAnimationController$AnimationParameters;)I
+HSPLandroid/view/animation/LayoutAnimationController;->isDone()Z
+HSPLandroid/view/animation/LayoutAnimationController;->setAnimation(Landroid/content/Context;I)V
+HSPLandroid/view/animation/LayoutAnimationController;->setAnimation(Landroid/view/animation/Animation;)V
+HSPLandroid/view/animation/LayoutAnimationController;->setDelay(F)V
+HSPLandroid/view/animation/LayoutAnimationController;->start()V
+HSPLandroid/view/animation/LayoutAnimationController;->willOverlap()Z
+HSPLandroid/view/animation/LinearInterpolator;-><init>()V
+HSPLandroid/view/animation/LinearInterpolator;->createNativeInterpolator()J
+HSPLandroid/view/animation/LinearInterpolator;->getInterpolation(F)F
+HSPLandroid/view/animation/OvershootInterpolator;-><init>()V
+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
+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
+HSPLandroid/view/animation/Transformation;->getMatrix()Landroid/graphics/Matrix;
+HSPLandroid/view/animation/Transformation;->getTransformationType()I
+HSPLandroid/view/animation/Transformation;->set(Landroid/view/animation/Transformation;)V
+HSPLandroid/view/animation/Transformation;->setAlpha(F)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
+HSPLandroid/view/autofill/AutofillId$1;-><init>()V
+HSPLandroid/view/autofill/AutofillId;-><init>(I)V
+HSPLandroid/view/autofill/AutofillId;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/autofill/AutofillManager$AutofillClient;->autofillCallbackAuthenticate(ILandroid/content/IntentSender;Landroid/content/Intent;)V
+HSPLandroid/view/autofill/AutofillManager$AutofillClient;->autofillCallbackRequestHideFillUi()Z
+HSPLandroid/view/autofill/AutofillManager$AutofillClient;->autofillCallbackRequestShowFillUi(Landroid/view/View;IILandroid/graphics/Rect;Landroid/view/autofill/IAutofillWindowPresenter;)Z
+HSPLandroid/view/autofill/AutofillManager$AutofillClient;->autofillCallbackResetableStateAvailable()V
+HSPLandroid/view/autofill/AutofillManager$AutofillClient;->findViewByAutofillIdTraversal(I)Landroid/view/View;
+HSPLandroid/view/autofill/AutofillManager$AutofillClient;->findViewsByAutofillIdTraversal([I)[Landroid/view/View;
+HSPLandroid/view/autofill/AutofillManager$AutofillClient;->getViewVisibility([I)[Z
+HSPLandroid/view/autofill/AutofillManager$AutofillClient;->isVisibleForAutofill()Z
+HSPLandroid/view/autofill/AutofillManager$AutofillClient;->runOnUiThread(Ljava/lang/Runnable;)V
+HSPLandroid/view/autofill/AutofillManager$AutofillManagerClient;-><init>(Landroid/view/autofill/AutofillManager;)V
+HSPLandroid/view/autofill/AutofillManager;-><init>(Landroid/content/Context;Landroid/view/autofill/IAutoFillManager;)V
+HSPLandroid/view/autofill/AutofillManager;->ensureServiceClientAddedIfNeededLocked()V
+HSPLandroid/view/autofill/AutofillManager;->getAutofillId(Landroid/view/View;)Landroid/view/autofill/AutofillId;
+HSPLandroid/view/autofill/AutofillManager;->getClientLocked()Landroid/view/autofill/AutofillManager$AutofillClient;
+HSPLandroid/view/autofill/AutofillManager;->hasAutofillFeature()Z
+HSPLandroid/view/autofill/AutofillManager;->isActiveLocked()Z
+HSPLandroid/view/autofill/AutofillManager;->notifyValueChanged(Landroid/view/View;)V
+HSPLandroid/view/autofill/AutofillManager;->notifyViewEntered(Landroid/view/View;)V
+HSPLandroid/view/autofill/AutofillManager;->notifyViewEntered(Landroid/view/View;I)V
+HSPLandroid/view/autofill/AutofillManager;->notifyViewExited(Landroid/view/View;)V
+HSPLandroid/view/autofill/AutofillManager;->notifyViewVisibilityChanged(Landroid/view/View;Z)V
+HSPLandroid/view/autofill/AutofillManager;->notifyViewVisibilityChangedInternal(Landroid/view/View;IZZ)V
+HSPLandroid/view/autofill/AutofillManager;->startSessionLocked(Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;I)V
+HSPLandroid/view/autofill/AutofillValue$1;-><init>()V
+HSPLandroid/view/autofill/AutofillValue;-><init>(ILjava/lang/Object;)V
+HSPLandroid/view/autofill/AutofillValue;->forText(Ljava/lang/CharSequence;)Landroid/view/autofill/AutofillValue;
+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$Proxy;->addClient(Landroid/view/autofill/IAutoFillManagerClient;I)I
+HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->startSession(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;IZILjava/lang/String;)I
+HSPLandroid/view/autofill/IAutoFillManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/autofill/IAutoFillManager;
+HSPLandroid/view/autofill/IAutoFillManager;->addClient(Landroid/view/autofill/IAutoFillManagerClient;I)I
+HSPLandroid/view/autofill/IAutoFillManager;->cancelSession(II)V
+HSPLandroid/view/autofill/IAutoFillManager;->disableOwnedAutofillServices(I)V
+HSPLandroid/view/autofill/IAutoFillManager;->finishSession(II)V
+HSPLandroid/view/autofill/IAutoFillManager;->getFillEventHistory()Landroid/service/autofill/FillEventHistory;
+HSPLandroid/view/autofill/IAutoFillManager;->isServiceEnabled(ILjava/lang/String;)Z
+HSPLandroid/view/autofill/IAutoFillManager;->isServiceSupported(I)Z
+HSPLandroid/view/autofill/IAutoFillManager;->onPendingSaveUi(ILandroid/os/IBinder;)V
+HSPLandroid/view/autofill/IAutoFillManager;->restoreSession(ILandroid/os/IBinder;Landroid/os/IBinder;)Z
+HSPLandroid/view/autofill/IAutoFillManager;->setAuthenticationResult(Landroid/os/Bundle;III)V
+HSPLandroid/view/autofill/IAutoFillManager;->setHasCallback(IIZ)V
+HSPLandroid/view/autofill/IAutoFillManager;->startSession(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;IZILjava/lang/String;)I
+HSPLandroid/view/autofill/IAutoFillManager;->updateOrRestartSession(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;IZILjava/lang/String;II)I
+HSPLandroid/view/autofill/IAutoFillManager;->updateSession(ILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;III)V
+HSPLandroid/view/autofill/IAutoFillManagerClient$Stub;-><init>()V
+HSPLandroid/view/autofill/IAutoFillManagerClient$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/view/autofill/IAutoFillManagerClient;->authenticate(IILandroid/content/IntentSender;Landroid/content/Intent;)V
+HSPLandroid/view/autofill/IAutoFillManagerClient;->autofill(ILjava/util/List;Ljava/util/List;)V
+HSPLandroid/view/autofill/IAutoFillManagerClient;->notifyNoFillUi(ILandroid/view/autofill/AutofillId;)V
+HSPLandroid/view/autofill/IAutoFillManagerClient;->requestHideFillUi(ILandroid/view/autofill/AutofillId;)V
+HSPLandroid/view/autofill/IAutoFillManagerClient;->requestShowFillUi(ILandroid/view/autofill/AutofillId;IILandroid/graphics/Rect;Landroid/view/autofill/IAutofillWindowPresenter;)V
+HSPLandroid/view/autofill/IAutoFillManagerClient;->setSaveUiState(IZ)V
+HSPLandroid/view/autofill/IAutoFillManagerClient;->setState(ZZZ)V
+HSPLandroid/view/autofill/IAutoFillManagerClient;->setTrackedViews(I[Landroid/view/autofill/AutofillId;Z[Landroid/view/autofill/AutofillId;)V
+HSPLandroid/view/autofill/IAutoFillManagerClient;->startIntentSender(Landroid/content/IntentSender;Landroid/content/Intent;)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;
+HSPLandroid/view/inputmethod/BaseInputConnection;->removeComposingSpans(Landroid/text/Spannable;)V
+HSPLandroid/view/inputmethod/BaseInputConnection;->sendCurrentText()V
+HSPLandroid/view/inputmethod/ComposingText;-><init>()V
+HSPLandroid/view/inputmethod/CursorAnchorInfo$Builder;-><init>()V
+HSPLandroid/view/inputmethod/EditorInfo$1;-><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;-><init>()V
+HSPLandroid/view/inputmethod/EditorInfo;->makeCompatible(I)V
+HSPLandroid/view/inputmethod/EditorInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/inputmethod/ExtractedTextRequest$1;-><init>()V
+HSPLandroid/view/inputmethod/ExtractedTextRequest;-><init>()V
+HSPLandroid/view/inputmethod/InputBinding$1;-><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;
+HSPLandroid/view/inputmethod/InputBinding;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/inputmethod/InputBinding;-><init>(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/InputBinding;)V
+HSPLandroid/view/inputmethod/InputBinding;->getConnection()Landroid/view/inputmethod/InputConnection;
+HSPLandroid/view/inputmethod/InputBinding;->getConnectionToken()Landroid/os/IBinder;
+HSPLandroid/view/inputmethod/InputBinding;->getPid()I
+HSPLandroid/view/inputmethod/InputBinding;->getUid()I
+HSPLandroid/view/inputmethod/InputConnection;->beginBatchEdit()Z
+HSPLandroid/view/inputmethod/InputConnection;->clearMetaKeyStates(I)Z
+HSPLandroid/view/inputmethod/InputConnection;->closeConnection()V
+HSPLandroid/view/inputmethod/InputConnection;->commitCompletion(Landroid/view/inputmethod/CompletionInfo;)Z
+HSPLandroid/view/inputmethod/InputConnection;->commitContent(Landroid/view/inputmethod/InputContentInfo;ILandroid/os/Bundle;)Z
+HSPLandroid/view/inputmethod/InputConnection;->commitCorrection(Landroid/view/inputmethod/CorrectionInfo;)Z
+HSPLandroid/view/inputmethod/InputConnection;->commitText(Ljava/lang/CharSequence;I)Z
+HSPLandroid/view/inputmethod/InputConnection;->deleteSurroundingText(II)Z
+HSPLandroid/view/inputmethod/InputConnection;->deleteSurroundingTextInCodePoints(II)Z
+HSPLandroid/view/inputmethod/InputConnection;->endBatchEdit()Z
+HSPLandroid/view/inputmethod/InputConnection;->finishComposingText()Z
+HSPLandroid/view/inputmethod/InputConnection;->getCursorCapsMode(I)I
+HSPLandroid/view/inputmethod/InputConnection;->getExtractedText(Landroid/view/inputmethod/ExtractedTextRequest;I)Landroid/view/inputmethod/ExtractedText;
+HSPLandroid/view/inputmethod/InputConnection;->getHandler()Landroid/os/Handler;
+HSPLandroid/view/inputmethod/InputConnection;->getSelectedText(I)Ljava/lang/CharSequence;
+HSPLandroid/view/inputmethod/InputConnection;->getTextAfterCursor(II)Ljava/lang/CharSequence;
+HSPLandroid/view/inputmethod/InputConnection;->getTextBeforeCursor(II)Ljava/lang/CharSequence;
+HSPLandroid/view/inputmethod/InputConnection;->performContextMenuAction(I)Z
+HSPLandroid/view/inputmethod/InputConnection;->performEditorAction(I)Z
+HSPLandroid/view/inputmethod/InputConnection;->performPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)Z
+HSPLandroid/view/inputmethod/InputConnection;->reportFullscreenMode(Z)Z
+HSPLandroid/view/inputmethod/InputConnection;->requestCursorUpdates(I)Z
+HSPLandroid/view/inputmethod/InputConnection;->sendKeyEvent(Landroid/view/KeyEvent;)Z
+HSPLandroid/view/inputmethod/InputConnection;->setComposingRegion(II)Z
+HSPLandroid/view/inputmethod/InputConnection;->setComposingText(Ljava/lang/CharSequence;I)Z
+HSPLandroid/view/inputmethod/InputConnection;->setSelection(II)Z
+HSPLandroid/view/inputmethod/InputMethod$SessionCallback;->sessionCreated(Landroid/view/inputmethod/InputMethodSession;)V
+HSPLandroid/view/inputmethod/InputMethod;->attachToken(Landroid/os/IBinder;)V
+HSPLandroid/view/inputmethod/InputMethod;->bindInput(Landroid/view/inputmethod/InputBinding;)V
+HSPLandroid/view/inputmethod/InputMethod;->changeInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)V
+HSPLandroid/view/inputmethod/InputMethod;->createSession(Landroid/view/inputmethod/InputMethod$SessionCallback;)V
+HSPLandroid/view/inputmethod/InputMethod;->dispatchStartInputWithToken(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;ZLandroid/os/IBinder;)V
+HSPLandroid/view/inputmethod/InputMethod;->hideSoftInput(ILandroid/os/ResultReceiver;)V
+HSPLandroid/view/inputmethod/InputMethod;->restartInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V
+HSPLandroid/view/inputmethod/InputMethod;->revokeSession(Landroid/view/inputmethod/InputMethodSession;)V
+HSPLandroid/view/inputmethod/InputMethod;->setSessionEnabled(Landroid/view/inputmethod/InputMethodSession;Z)V
+HSPLandroid/view/inputmethod/InputMethod;->showSoftInput(ILandroid/os/ResultReceiver;)V
+HSPLandroid/view/inputmethod/InputMethod;->startInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V
+HSPLandroid/view/inputmethod/InputMethod;->unbindInput()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
+HSPLandroid/view/inputmethod/InputMethodManager$ControlledInputConnectionWrapper;-><init>(Landroid/os/Looper;Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/InputMethodManager;)V
+HSPLandroid/view/inputmethod/InputMethodManager$FinishedInputEventCallback;->onFinishedInputEvent(Ljava/lang/Object;Z)V
+HSPLandroid/view/inputmethod/InputMethodManager$H;-><init>(Landroid/view/inputmethod/InputMethodManager;Landroid/os/Looper;)V
+HSPLandroid/view/inputmethod/InputMethodManager$H;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->-set1(Landroid/view/inputmethod/InputMethodManager;I)I
+HSPLandroid/view/inputmethod/InputMethodManager;->-wrap0(Landroid/view/inputmethod/InputMethodManager;Z)Z
+HSPLandroid/view/inputmethod/InputMethodManager;-><init>(Landroid/os/Looper;)V
+HSPLandroid/view/inputmethod/InputMethodManager;-><init>(Lcom/android/internal/view/IInputMethodManager;Landroid/os/Looper;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->checkFocus()V
+HSPLandroid/view/inputmethod/InputMethodManager;->checkFocusNoStartInput(Z)Z
+HSPLandroid/view/inputmethod/InputMethodManager;->clearBindingLocked()V
+HSPLandroid/view/inputmethod/InputMethodManager;->clearConnectionLocked()V
+HSPLandroid/view/inputmethod/InputMethodManager;->displayCompletions(Landroid/view/View;[Landroid/view/inputmethod/CompletionInfo;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->focusIn(Landroid/view/View;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->focusInLocked(Landroid/view/View;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->focusOut(Landroid/view/View;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->getClient()Lcom/android/internal/view/IInputMethodClient;
+HSPLandroid/view/inputmethod/InputMethodManager;->getCurrentInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;
+HSPLandroid/view/inputmethod/InputMethodManager;->getInputContext()Lcom/android/internal/view/IInputContext;
+HSPLandroid/view/inputmethod/InputMethodManager;->getInputMethodWindowVisibleHeight()I
+HSPLandroid/view/inputmethod/InputMethodManager;->getInstance()Landroid/view/inputmethod/InputMethodManager;
+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
+HSPLandroid/view/inputmethod/InputMethodManager;->isFullscreenMode()Z
+HSPLandroid/view/inputmethod/InputMethodManager;->onPostWindowFocus(Landroid/view/View;Landroid/view/View;IZI)V
+HSPLandroid/view/inputmethod/InputMethodManager;->onPreWindowFocus(Landroid/view/View;Z)V
+HSPLandroid/view/inputmethod/InputMethodManager;->onViewDetachedFromWindow(Landroid/view/View;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->peekInstance()Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/view/inputmethod/InputMethodManager;->reportFullscreenMode(Landroid/os/IBinder;Z)V
+HSPLandroid/view/inputmethod/InputMethodManager;->restartInput(Landroid/view/View;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->scheduleCheckFocusLocked(Landroid/view/View;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->setInputChannelLocked(Landroid/view/InputChannel;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->startInputInner(ILandroid/os/IBinder;III)Z
+HSPLandroid/view/inputmethod/InputMethodSession$EventCallback;->finishedEvent(IZ)V
+HSPLandroid/view/inputmethod/InputMethodSession;->appPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V
+HSPLandroid/view/inputmethod/InputMethodSession;->dispatchGenericMotionEvent(ILandroid/view/MotionEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V
+HSPLandroid/view/inputmethod/InputMethodSession;->dispatchKeyEvent(ILandroid/view/KeyEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V
+HSPLandroid/view/inputmethod/InputMethodSession;->dispatchTrackballEvent(ILandroid/view/MotionEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V
+HSPLandroid/view/inputmethod/InputMethodSession;->displayCompletions([Landroid/view/inputmethod/CompletionInfo;)V
+HSPLandroid/view/inputmethod/InputMethodSession;->finishInput()V
+HSPLandroid/view/inputmethod/InputMethodSession;->toggleSoftInput(II)V
+HSPLandroid/view/inputmethod/InputMethodSession;->updateCursor(Landroid/graphics/Rect;)V
+HSPLandroid/view/inputmethod/InputMethodSession;->updateCursorAnchorInfo(Landroid/view/inputmethod/CursorAnchorInfo;)V
+HSPLandroid/view/inputmethod/InputMethodSession;->updateExtractedText(ILandroid/view/inputmethod/ExtractedText;)V
+HSPLandroid/view/inputmethod/InputMethodSession;->updateSelection(IIIIII)V
+HSPLandroid/view/inputmethod/InputMethodSession;->viewClicked(Z)V
+HSPLandroid/view/inputmethod/InputMethodSubtype$1;-><init>()V
+HSPLandroid/view/inputmethod/InputMethodSubtype$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/inputmethod/InputMethodSubtype;
+HSPLandroid/view/inputmethod/InputMethodSubtype$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/view/inputmethod/InputMethodSubtype;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/inputmethod/InputMethodSubtype;->containsExtraValueKey(Ljava/lang/String;)Z
+HSPLandroid/view/inputmethod/InputMethodSubtype;->getExtraValueHashMap()Ljava/util/HashMap;
+HSPLandroid/view/inputmethod/InputMethodSubtype;->getExtraValueOf(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/view/inputmethod/InputMethodSubtype;->getLocale()Ljava/lang/String;
+HSPLandroid/webkit/CookieManager;-><init>()V
+HSPLandroid/webkit/CookieManager;->acceptCookie()Z
+HSPLandroid/webkit/CookieManager;->acceptThirdPartyCookies(Landroid/webkit/WebView;)Z
+HSPLandroid/webkit/CookieManager;->allowFileSchemeCookiesImpl()Z
+HSPLandroid/webkit/CookieManager;->flush()V
+HSPLandroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/webkit/CookieManager;->getCookie(Ljava/lang/String;Z)Ljava/lang/String;
+HSPLandroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager;
+HSPLandroid/webkit/CookieManager;->hasCookies()Z
+HSPLandroid/webkit/CookieManager;->hasCookies(Z)Z
+HSPLandroid/webkit/CookieManager;->removeAllCookie()V
+HSPLandroid/webkit/CookieManager;->removeAllCookies(Landroid/webkit/ValueCallback;)V
+HSPLandroid/webkit/CookieManager;->removeExpiredCookie()V
+HSPLandroid/webkit/CookieManager;->removeSessionCookie()V
+HSPLandroid/webkit/CookieManager;->removeSessionCookies(Landroid/webkit/ValueCallback;)V
+HSPLandroid/webkit/CookieManager;->setAcceptCookie(Z)V
+HSPLandroid/webkit/CookieManager;->setAcceptFileSchemeCookiesImpl(Z)V
+HSPLandroid/webkit/CookieManager;->setAcceptThirdPartyCookies(Landroid/webkit/WebView;Z)V
+HSPLandroid/webkit/CookieManager;->setCookie(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/webkit/CookieManager;->setCookie(Ljava/lang/String;Ljava/lang/String;Landroid/webkit/ValueCallback;)V
+HSPLandroid/webkit/CookieSyncManager;-><init>()V
+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
+HSPLandroid/webkit/IWebViewUpdateService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/webkit/IWebViewUpdateService$Stub$Proxy;->isMultiProcessEnabled()Z
+HSPLandroid/webkit/IWebViewUpdateService$Stub$Proxy;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;
+HSPLandroid/webkit/IWebViewUpdateService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/webkit/IWebViewUpdateService;
+HSPLandroid/webkit/IWebViewUpdateService;->changeProviderAndSetting(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/webkit/IWebViewUpdateService;->enableFallbackLogic(Z)V
+HSPLandroid/webkit/IWebViewUpdateService;->enableMultiProcess(Z)V
+HSPLandroid/webkit/IWebViewUpdateService;->getAllWebViewPackages()[Landroid/webkit/WebViewProviderInfo;
+HSPLandroid/webkit/IWebViewUpdateService;->getCurrentWebViewPackage()Landroid/content/pm/PackageInfo;
+HSPLandroid/webkit/IWebViewUpdateService;->getCurrentWebViewPackageName()Ljava/lang/String;
+HSPLandroid/webkit/IWebViewUpdateService;->getValidWebViewPackages()[Landroid/webkit/WebViewProviderInfo;
+HSPLandroid/webkit/IWebViewUpdateService;->isFallbackPackage(Ljava/lang/String;)Z
+HSPLandroid/webkit/IWebViewUpdateService;->isMultiProcessEnabled()Z
+HSPLandroid/webkit/IWebViewUpdateService;->notifyRelroCreationCompleted()V
+HSPLandroid/webkit/IWebViewUpdateService;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;
+HSPLandroid/webkit/MimeTypeMap;-><init>()V
+HSPLandroid/webkit/MimeTypeMap;->getFileExtensionFromUrl(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/webkit/URLUtil;->isAboutUrl(Ljava/lang/String;)Z
+HSPLandroid/webkit/URLUtil;->isAssetUrl(Ljava/lang/String;)Z
+HSPLandroid/webkit/URLUtil;->isContentUrl(Ljava/lang/String;)Z
+HSPLandroid/webkit/URLUtil;->isFileUrl(Ljava/lang/String;)Z
+HSPLandroid/webkit/URLUtil;->isHttpUrl(Ljava/lang/String;)Z
+HSPLandroid/webkit/URLUtil;->isHttpsUrl(Ljava/lang/String;)Z
+HSPLandroid/webkit/URLUtil;->isJavaScriptUrl(Ljava/lang/String;)Z
+HSPLandroid/webkit/URLUtil;->isResourceUrl(Ljava/lang/String;)Z
+HSPLandroid/webkit/URLUtil;->isValidUrl(Ljava/lang/String;)Z
+HSPLandroid/webkit/WebSyncManager;-><init>(Landroid/content/Context;Ljava/lang/String;)V
+HSPLandroid/webkit/WebSyncManager;->syncFromRamToFlash()V
+HSPLandroid/webkit/WebViewDelegate;-><init>()V
+HSPLandroid/webkit/WebViewDelegate;->getApplication()Landroid/app/Application;
+HSPLandroid/webkit/WebViewDelegate;->isMultiProcessEnabled()Z
+HSPLandroid/webkit/WebViewFactory;->fixupStubApplicationInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/pm/PackageManager;)V
+HSPLandroid/webkit/WebViewFactory;->getLoadedPackageInfo()Landroid/content/pm/PackageInfo;
+HSPLandroid/webkit/WebViewFactory;->getProvider()Landroid/webkit/WebViewFactoryProvider;
+HSPLandroid/webkit/WebViewFactory;->getProviderClass()Ljava/lang/Class;
+HSPLandroid/webkit/WebViewFactory;->getUpdateService()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;->loadWebViewNativeLibraryFromPackage(Ljava/lang/String;Ljava/lang/ClassLoader;)I
+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/WebViewFactoryProvider;->getCookieManager()Landroid/webkit/CookieManager;
+HSPLandroid/webkit/WebViewFactoryProvider;->getGeolocationPermissions()Landroid/webkit/GeolocationPermissions;
+HSPLandroid/webkit/WebViewFactoryProvider;->getServiceWorkerController()Landroid/webkit/ServiceWorkerController;
+HSPLandroid/webkit/WebViewFactoryProvider;->getStatics()Landroid/webkit/WebViewFactoryProvider$Statics;
+HSPLandroid/webkit/WebViewFactoryProvider;->getTokenBindingService()Landroid/webkit/TokenBindingService;
+HSPLandroid/webkit/WebViewFactoryProvider;->getWebIconDatabase()Landroid/webkit/WebIconDatabase;
+HSPLandroid/webkit/WebViewFactoryProvider;->getWebStorage()Landroid/webkit/WebStorage;
+HSPLandroid/webkit/WebViewFactoryProvider;->getWebViewDatabase(Landroid/content/Context;)Landroid/webkit/WebViewDatabase;
+HSPLandroid/webkit/WebViewLibraryLoader;->loadNativeLibrary(Ljava/lang/ClassLoader;Landroid/content/pm/PackageInfo;)I
+HSPLandroid/webkit/WebViewProviderResponse$1;-><init>()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/os/Parcel;)V
+HSPLandroid/webkit/WebViewProviderResponse;-><init>(Landroid/os/Parcel;Landroid/webkit/WebViewProviderResponse;)V
+HSPLandroid/widget/-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4$1;-><init>(BLjava/lang/Object;)V
+HSPLandroid/widget/-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4;-><init>(BLjava/lang/Object;)V
+HSPLandroid/widget/AbsListView$AdapterDataSetObserver;-><init>(Landroid/widget/AbsListView;)V
+HSPLandroid/widget/AbsListView$AdapterDataSetObserver;->onChanged()V
+HSPLandroid/widget/AbsListView$LayoutParams;-><init>(III)V
+HSPLandroid/widget/AbsListView$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/AbsListView$ListItemAccessibilityDelegate;-><init>(Landroid/widget/AbsListView;)V
+HSPLandroid/widget/AbsListView$OnScrollListener;->onScroll(Landroid/widget/AbsListView;III)V
+HSPLandroid/widget/AbsListView$OnScrollListener;->onScrollStateChanged(Landroid/widget/AbsListView;I)V
+HSPLandroid/widget/AbsListView$RecycleBin;-><init>(Landroid/widget/AbsListView;)V
+HSPLandroid/widget/AbsListView$RecycleBin;->addScrapView(Landroid/view/View;I)V
+HSPLandroid/widget/AbsListView$RecycleBin;->clear()V
+HSPLandroid/widget/AbsListView$RecycleBin;->clearScrapForRebind(Landroid/view/View;)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
+HSPLandroid/widget/AbsListView$RecycleBin;->pruneScrapViews()V
+HSPLandroid/widget/AbsListView$RecycleBin;->removeSkippedScrap()V
+HSPLandroid/widget/AbsListView$RecycleBin;->retrieveFromScrap(Ljava/util/ArrayList;I)Landroid/view/View;
+HSPLandroid/widget/AbsListView$RecycleBin;->scrapActiveViews()V
+HSPLandroid/widget/AbsListView$RecycleBin;->setCacheColorHint(I)V
+HSPLandroid/widget/AbsListView$RecycleBin;->setViewTypeCount(I)V
+HSPLandroid/widget/AbsListView$RecycleBin;->shouldRecycleViewType(I)Z
+HSPLandroid/widget/AbsListView$RecyclerListener;->onMovedToScrapHeap(Landroid/view/View;)V
+HSPLandroid/widget/AbsListView$SavedState$1;-><init>()V
+HSPLandroid/widget/AbsListView$SavedState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/widget/AbsListView$SavedState;
+HSPLandroid/widget/AbsListView$SavedState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/widget/AbsListView$SavedState;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/widget/AbsListView$SavedState;-><init>(Landroid/os/Parcel;Landroid/widget/AbsListView$SavedState;)V
+HSPLandroid/widget/AbsListView;->-get5(Landroid/widget/AbsListView;)Landroid/widget/FastScroller;
+HSPLandroid/widget/AbsListView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/AbsListView;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
+HSPLandroid/widget/AbsListView;->clearChoices()V
+HSPLandroid/widget/AbsListView;->computeVerticalScrollExtent()I
+HSPLandroid/widget/AbsListView;->computeVerticalScrollOffset()I
+HSPLandroid/widget/AbsListView;->computeVerticalScrollRange()I
+HSPLandroid/widget/AbsListView;->dismissPopup()V
+HSPLandroid/widget/AbsListView;->dispatchDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/AbsListView;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/AbsListView;->drawSelector(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/AbsListView;->drawableStateChanged()V
+HSPLandroid/widget/AbsListView;->fillGap(Z)V
+HSPLandroid/widget/AbsListView;->findMotionRow(I)I
+HSPLandroid/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;->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
+HSPLandroid/widget/AbsListView;->isOwnerThread()Z
+HSPLandroid/widget/AbsListView;->isTextFilterEnabled()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;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
+HSPLandroid/widget/AbsListView;->onFocusChanged(ZILandroid/graphics/Rect;)V
+HSPLandroid/widget/AbsListView;->onLayout(ZIIII)V
+HSPLandroid/widget/AbsListView;->onMeasure(II)V
+HSPLandroid/widget/AbsListView;->onRestoreInstanceState(Landroid/os/Parcelable;)V
+HSPLandroid/widget/AbsListView;->onRtlPropertiesChanged(I)V
+HSPLandroid/widget/AbsListView;->onSizeChanged(IIII)V
+HSPLandroid/widget/AbsListView;->onTouchModeChanged(Z)V
+HSPLandroid/widget/AbsListView;->onWindowFocusChanged(Z)V
+HSPLandroid/widget/AbsListView;->requestLayout()V
+HSPLandroid/widget/AbsListView;->requestLayoutIfNecessary()V
+HSPLandroid/widget/AbsListView;->resetList()V
+HSPLandroid/widget/AbsListView;->sendAccessibilityEventInternal(I)V
+HSPLandroid/widget/AbsListView;->setAdapter(Landroid/widget/ListAdapter;)V
+HSPLandroid/widget/AbsListView;->setCacheColorHint(I)V
+HSPLandroid/widget/AbsListView;->setChoiceMode(I)V
+HSPLandroid/widget/AbsListView;->setFastScrollAlwaysVisible(Z)V
+HSPLandroid/widget/AbsListView;->setFastScrollEnabled(Z)V
+HSPLandroid/widget/AbsListView;->setFastScrollStyle(I)V
+HSPLandroid/widget/AbsListView;->setFastScrollerEnabledUiThread(Z)V
+HSPLandroid/widget/AbsListView;->setFilterText(Ljava/lang/String;)V
+HSPLandroid/widget/AbsListView;->setFrame(IIII)Z
+HSPLandroid/widget/AbsListView;->setItemViewLayoutParams(Landroid/view/View;I)V
+HSPLandroid/widget/AbsListView;->setOnScrollListener(Landroid/widget/AbsListView$OnScrollListener;)V
+HSPLandroid/widget/AbsListView;->setOverScrollMode(I)V
+HSPLandroid/widget/AbsListView;->setScrollBarStyle(I)V
+HSPLandroid/widget/AbsListView;->setScrollingCacheEnabled(Z)V
+HSPLandroid/widget/AbsListView;->setSelectionFromTop(II)V
+HSPLandroid/widget/AbsListView;->setSelectionInt(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;->setVerticalScrollbarPosition(I)V
+HSPLandroid/widget/AbsListView;->setVisibleRangeHint(II)V
+HSPLandroid/widget/AbsListView;->shouldShowSelector()Z
+HSPLandroid/widget/AbsListView;->touchModeDrawsInPressedState()Z
+HSPLandroid/widget/AbsListView;->updateScrollIndicators()V
+HSPLandroid/widget/AbsListView;->updateSelectorState()V
+HSPLandroid/widget/AbsListView;->useDefaultSelector()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
+HSPLandroid/widget/AbsSeekBar;->drawableStateChanged()V
+HSPLandroid/widget/AbsSeekBar;->getScale()F
+HSPLandroid/widget/AbsSeekBar;->getThumbOffset()I
+HSPLandroid/widget/AbsSeekBar;->jumpDrawablesToCurrentState()V
+HSPLandroid/widget/AbsSeekBar;->onMeasure(II)V
+HSPLandroid/widget/AbsSeekBar;->onResolveDrawables(I)V
+HSPLandroid/widget/AbsSeekBar;->onRtlPropertiesChanged(I)V
+HSPLandroid/widget/AbsSeekBar;->onVisualProgressChanged(IF)V
+HSPLandroid/widget/AbsSeekBar;->setKeyProgressIncrement(I)V
+HSPLandroid/widget/AbsSeekBar;->setMax(I)V
+HSPLandroid/widget/AbsSeekBar;->setMin(I)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
+HSPLandroid/widget/AbsSeekBar;->setThumbTintList(Landroid/content/res/ColorStateList;)V
+HSPLandroid/widget/AbsSeekBar;->setTickMark(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/AbsSeekBar;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
+HSPLandroid/widget/ActionMenuPresenter$1;-><init>(Landroid/widget/ActionMenuPresenter;)V
+HSPLandroid/widget/ActionMenuPresenter$2;-><init>(Landroid/widget/ActionMenuPresenter;)V
+HSPLandroid/widget/ActionMenuPresenter$ActionMenuPopupCallback;-><init>(Landroid/widget/ActionMenuPresenter;)V
+HSPLandroid/widget/ActionMenuPresenter$ActionMenuPopupCallback;-><init>(Landroid/widget/ActionMenuPresenter;Landroid/widget/ActionMenuPresenter$ActionMenuPopupCallback;)V
+HSPLandroid/widget/ActionMenuPresenter$OverflowMenuButton$1;-><init>(Landroid/widget/ActionMenuPresenter$OverflowMenuButton;Landroid/view/View;)V
+HSPLandroid/widget/ActionMenuPresenter$OverflowMenuButton;-><init>(Landroid/widget/ActionMenuPresenter;Landroid/content/Context;)V
+HSPLandroid/widget/ActionMenuPresenter$OverflowMenuButton;->setFrame(IIII)Z
+HSPLandroid/widget/ActionMenuPresenter$PopupPresenterCallback;-><init>(Landroid/widget/ActionMenuPresenter;)V
+HSPLandroid/widget/ActionMenuPresenter$PopupPresenterCallback;-><init>(Landroid/widget/ActionMenuPresenter;Landroid/widget/ActionMenuPresenter$PopupPresenterCallback;)V
+HSPLandroid/widget/ActionMenuPresenter;-><init>(Landroid/content/Context;)V
+HSPLandroid/widget/ActionMenuPresenter;->bindItemView(Lcom/android/internal/view/menu/MenuItemImpl;Lcom/android/internal/view/menu/MenuView$ItemView;)V
+HSPLandroid/widget/ActionMenuPresenter;->flagActionItems()Z
+HSPLandroid/widget/ActionMenuPresenter;->getItemView(Lcom/android/internal/view/menu/MenuItemImpl;Landroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;
+HSPLandroid/widget/ActionMenuPresenter;->initForMenu(Landroid/content/Context;Lcom/android/internal/view/menu/MenuBuilder;)V
+HSPLandroid/widget/ActionMenuPresenter;->setExpandedActionViewsExclusive(Z)V
+HSPLandroid/widget/ActionMenuPresenter;->setMenuView(Landroid/widget/ActionMenuView;)V
+HSPLandroid/widget/ActionMenuPresenter;->setReserveOverflow(Z)V
+HSPLandroid/widget/ActionMenuPresenter;->shouldIncludeItem(ILcom/android/internal/view/menu/MenuItemImpl;)Z
+HSPLandroid/widget/ActionMenuPresenter;->updateMenuView(Z)V
+HSPLandroid/widget/ActionMenuView$ActionMenuChildView;->needsDividerAfter()Z
+HSPLandroid/widget/ActionMenuView$ActionMenuChildView;->needsDividerBefore()Z
+HSPLandroid/widget/ActionMenuView$LayoutParams;-><init>(II)V
+HSPLandroid/widget/ActionMenuView$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/ActionMenuView$MenuBuilderCallback;-><init>(Landroid/widget/ActionMenuView;)V
+HSPLandroid/widget/ActionMenuView$MenuBuilderCallback;-><init>(Landroid/widget/ActionMenuView;Landroid/widget/ActionMenuView$MenuBuilderCallback;)V
+HSPLandroid/widget/ActionMenuView$OnMenuItemClickListener;->onMenuItemClick(Landroid/view/MenuItem;)Z
+HSPLandroid/widget/ActionMenuView;-><init>(Landroid/content/Context;)V
+HSPLandroid/widget/ActionMenuView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/ActionMenuView;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
+HSPLandroid/widget/ActionMenuView;->generateDefaultLayoutParams()Landroid/widget/ActionMenuView$LayoutParams;
+HSPLandroid/widget/ActionMenuView;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
+HSPLandroid/widget/ActionMenuView;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/ActionMenuView$LayoutParams;
+HSPLandroid/widget/ActionMenuView;->generateOverflowButtonLayoutParams()Landroid/widget/ActionMenuView$LayoutParams;
+HSPLandroid/widget/ActionMenuView;->getMenu()Landroid/view/Menu;
+HSPLandroid/widget/ActionMenuView;->hasDividerBeforeChildAt(I)Z
+HSPLandroid/widget/ActionMenuView;->initialize(Lcom/android/internal/view/menu/MenuBuilder;)V
+HSPLandroid/widget/ActionMenuView;->onLayout(ZIIII)V
+HSPLandroid/widget/ActionMenuView;->onMeasure(II)V
+HSPLandroid/widget/ActionMenuView;->peekMenu()Lcom/android/internal/view/menu/MenuBuilder;
+HSPLandroid/widget/ActionMenuView;->setExpandedActionViewsExclusive(Z)V
+HSPLandroid/widget/ActionMenuView;->setMenuCallbacks(Lcom/android/internal/view/menu/MenuPresenter$Callback;Lcom/android/internal/view/menu/MenuBuilder$Callback;)V
+HSPLandroid/widget/ActionMenuView;->setOnMenuItemClickListener(Landroid/widget/ActionMenuView$OnMenuItemClickListener;)V
+HSPLandroid/widget/ActionMenuView;->setOverflowReserved(Z)V
+HSPLandroid/widget/ActionMenuView;->setPopupTheme(I)V
+HSPLandroid/widget/ActionMenuView;->setPresenter(Landroid/widget/ActionMenuPresenter;)V
+HSPLandroid/widget/Adapter;->getCount()I
+HSPLandroid/widget/Adapter;->getItem(I)Ljava/lang/Object;
+HSPLandroid/widget/Adapter;->getItemId(I)J
+HSPLandroid/widget/Adapter;->getItemViewType(I)I
+HSPLandroid/widget/Adapter;->getView(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;
+HSPLandroid/widget/Adapter;->getViewTypeCount()I
+HSPLandroid/widget/Adapter;->hasStableIds()Z
+HSPLandroid/widget/Adapter;->isEmpty()Z
+HSPLandroid/widget/Adapter;->registerDataSetObserver(Landroid/database/DataSetObserver;)V
+HSPLandroid/widget/Adapter;->unregisterDataSetObserver(Landroid/database/DataSetObserver;)V
+HSPLandroid/widget/AdapterView$AdapterDataSetObserver;-><init>(Landroid/widget/AdapterView;)V
+HSPLandroid/widget/AdapterView$AdapterDataSetObserver;->onChanged()V
+HSPLandroid/widget/AdapterView$OnItemClickListener;->onItemClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)V
+HSPLandroid/widget/AdapterView$OnItemSelectedListener;->onItemSelected(Landroid/widget/AdapterView;Landroid/view/View;IJ)V
+HSPLandroid/widget/AdapterView$OnItemSelectedListener;->onNothingSelected(Landroid/widget/AdapterView;)V
+HSPLandroid/widget/AdapterView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/AdapterView;->canAnimate()Z
+HSPLandroid/widget/AdapterView;->checkFocus()V
+HSPLandroid/widget/AdapterView;->checkSelectionChanged()V
+HSPLandroid/widget/AdapterView;->dispatchRestoreInstanceState(Landroid/util/SparseArray;)V
+HSPLandroid/widget/AdapterView;->getAdapter()Landroid/widget/Adapter;
+HSPLandroid/widget/AdapterView;->getCount()I
+HSPLandroid/widget/AdapterView;->getFirstVisiblePosition()I
+HSPLandroid/widget/AdapterView;->getItemIdAtPosition(I)J
+HSPLandroid/widget/AdapterView;->getLastVisiblePosition()I
+HSPLandroid/widget/AdapterView;->getSelectedView()Landroid/view/View;
+HSPLandroid/widget/AdapterView;->onLayout(ZIIII)V
+HSPLandroid/widget/AdapterView;->rememberSyncState()V
+HSPLandroid/widget/AdapterView;->setAdapter(Landroid/widget/Adapter;)V
+HSPLandroid/widget/AdapterView;->setEmptyView(Landroid/view/View;)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;->setOnItemLongClickListener(Landroid/widget/AdapterView$OnItemLongClickListener;)V
+HSPLandroid/widget/AdapterView;->setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)V
+HSPLandroid/widget/AdapterView;->setSelectedPositionInt(I)V
+HSPLandroid/widget/AdapterView;->setSelection(I)V
+HSPLandroid/widget/AdapterView;->updateEmptyStatus(Z)V
+HSPLandroid/widget/AutoCompleteTextView$DropDownItemClickListener;-><init>(Landroid/widget/AutoCompleteTextView;)V
+HSPLandroid/widget/AutoCompleteTextView$DropDownItemClickListener;-><init>(Landroid/widget/AutoCompleteTextView;Landroid/widget/AutoCompleteTextView$DropDownItemClickListener;)V
+HSPLandroid/widget/AutoCompleteTextView$MyWatcher;-><init>(Landroid/widget/AutoCompleteTextView;)V
+HSPLandroid/widget/AutoCompleteTextView$MyWatcher;-><init>(Landroid/widget/AutoCompleteTextView;Landroid/widget/AutoCompleteTextView$MyWatcher;)V
+HSPLandroid/widget/AutoCompleteTextView$MyWatcher;->afterTextChanged(Landroid/text/Editable;)V
+HSPLandroid/widget/AutoCompleteTextView$MyWatcher;->beforeTextChanged(Ljava/lang/CharSequence;III)V
+HSPLandroid/widget/AutoCompleteTextView$MyWatcher;->onTextChanged(Ljava/lang/CharSequence;III)V
+HSPLandroid/widget/AutoCompleteTextView$PassThroughClickListener;->-set0(Landroid/widget/AutoCompleteTextView$PassThroughClickListener;Landroid/view/View$OnClickListener;)Landroid/view/View$OnClickListener;
+HSPLandroid/widget/AutoCompleteTextView$PassThroughClickListener;-><init>(Landroid/widget/AutoCompleteTextView;)V
+HSPLandroid/widget/AutoCompleteTextView$PassThroughClickListener;-><init>(Landroid/widget/AutoCompleteTextView;Landroid/widget/AutoCompleteTextView$PassThroughClickListener;)V
+HSPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;IILandroid/content/res/Resources$Theme;)V
+HSPLandroid/widget/AutoCompleteTextView;->dismissDropDown()V
+HSPLandroid/widget/AutoCompleteTextView;->doAfterTextChanged()V
+HSPLandroid/widget/AutoCompleteTextView;->doBeforeTextChanged()V
+HSPLandroid/widget/AutoCompleteTextView;->enoughToFilter()Z
+HSPLandroid/widget/AutoCompleteTextView;->getDropDownAnchor()I
+HSPLandroid/widget/AutoCompleteTextView;->getThreshold()I
+HSPLandroid/widget/AutoCompleteTextView;->isPopupShowing()Z
+HSPLandroid/widget/AutoCompleteTextView;->setCompletionHint(Ljava/lang/CharSequence;)V
+HSPLandroid/widget/AutoCompleteTextView;->setDropDownBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/AutoCompleteTextView;->setOnClickListener(Landroid/view/View$OnClickListener;)V
+HSPLandroid/widget/AutoCompleteTextView;->setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V
+HSPLandroid/widget/AutoCompleteTextView;->setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)V
+HSPLandroid/widget/BaseAdapter;-><init>()V
+HSPLandroid/widget/BaseAdapter;->areAllItemsEnabled()Z
+HSPLandroid/widget/BaseAdapter;->getViewTypeCount()I
+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/Button;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/Button;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/Button;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/Button;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HSPLandroid/widget/CheckBox;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+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/Checkable;->isChecked()Z
+HSPLandroid/widget/Checkable;->setChecked(Z)V
+HSPLandroid/widget/Checkable;->toggle()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;->updatePadding()V
+HSPLandroid/widget/CheckedTextView;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
+HSPLandroid/widget/CompoundButton$OnCheckedChangeListener;->onCheckedChanged(Landroid/widget/CompoundButton;Z)V
+HSPLandroid/widget/CompoundButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/CompoundButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/CompoundButton;->applyButtonTint()V
+HSPLandroid/widget/CompoundButton;->drawableStateChanged()V
+HSPLandroid/widget/CompoundButton;->getAutofillType()I
+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
+HSPLandroid/widget/CompoundButton;->setButtonDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/CompoundButton;->setChecked(Z)V
+HSPLandroid/widget/CompoundButton;->setOnCheckedChangeListener(Landroid/widget/CompoundButton$OnCheckedChangeListener;)V
+HSPLandroid/widget/CompoundButton;->setOnCheckedChangeWidgetListener(Landroid/widget/CompoundButton$OnCheckedChangeListener;)V
+HSPLandroid/widget/CompoundButton;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
+HSPLandroid/widget/DateTimeView$ReceiverInfo$1;-><init>(Landroid/widget/DateTimeView$ReceiverInfo;)V
+HSPLandroid/widget/DateTimeView$ReceiverInfo$2;-><init>(Landroid/widget/DateTimeView$ReceiverInfo;Landroid/os/Handler;)V
+HSPLandroid/widget/DateTimeView$ReceiverInfo;-><init>()V
+HSPLandroid/widget/DateTimeView$ReceiverInfo;-><init>(Landroid/widget/DateTimeView$ReceiverInfo;)V
+HSPLandroid/widget/DateTimeView$ReceiverInfo;->setHandler(Landroid/os/Handler;)V
+HSPLandroid/widget/DateTimeView;->setReceiverHandler(Landroid/os/Handler;)V
+HSPLandroid/widget/EdgeEffect;-><init>(Landroid/content/Context;)V
+HSPLandroid/widget/EdgeEffect;->finish()V
+HSPLandroid/widget/EdgeEffect;->isFinished()Z
+HSPLandroid/widget/EditText;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/EditText;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+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
+HSPLandroid/widget/EditText;->setSelection(I)V
+HSPLandroid/widget/EditText;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;)V
+HSPLandroid/widget/EditText;->supportsAutoSizeText()Z
+HSPLandroid/widget/Editor$1;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$2;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$Blink;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$Blink;-><init>(Landroid/widget/Editor;Landroid/widget/Editor$Blink;)V
+HSPLandroid/widget/Editor$Blink;->run()V
+HSPLandroid/widget/Editor$Blink;->uncancel()V
+HSPLandroid/widget/Editor$CursorAnchorInfoNotifier;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$CursorAnchorInfoNotifier;-><init>(Landroid/widget/Editor;Landroid/widget/Editor$CursorAnchorInfoNotifier;)V
+HSPLandroid/widget/Editor$CursorAnchorInfoNotifier;->updatePosition(IIZZ)V
+HSPLandroid/widget/Editor$CursorController;->hide()V
+HSPLandroid/widget/Editor$CursorController;->isActive()Z
+HSPLandroid/widget/Editor$CursorController;->isCursorBeingModified()Z
+HSPLandroid/widget/Editor$CursorController;->onDetached()V
+HSPLandroid/widget/Editor$CursorController;->show()V
+HSPLandroid/widget/Editor$InputContentType;-><init>()V
+HSPLandroid/widget/Editor$InsertionPointCursorController;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$InsertionPointCursorController;-><init>(Landroid/widget/Editor;Landroid/widget/Editor$InsertionPointCursorController;)V
+HSPLandroid/widget/Editor$InsertionPointCursorController;->hide()V
+HSPLandroid/widget/Editor$InsertionPointCursorController;->isActive()Z
+HSPLandroid/widget/Editor$InsertionPointCursorController;->isCursorBeingModified()Z
+HSPLandroid/widget/Editor$InsertionPointCursorController;->onDetached()V
+HSPLandroid/widget/Editor$PositionListener;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$PositionListener;-><init>(Landroid/widget/Editor;Landroid/widget/Editor$PositionListener;)V
+HSPLandroid/widget/Editor$PositionListener;->addSubscriber(Landroid/widget/Editor$TextViewPositionListener;Z)V
+HSPLandroid/widget/Editor$PositionListener;->onPreDraw()Z
+HSPLandroid/widget/Editor$PositionListener;->onScrollChanged()V
+HSPLandroid/widget/Editor$PositionListener;->updatePosition()V
+HSPLandroid/widget/Editor$ProcessTextIntentActionsHandler;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$ProcessTextIntentActionsHandler;-><init>(Landroid/widget/Editor;Landroid/widget/Editor$ProcessTextIntentActionsHandler;)V
+HSPLandroid/widget/Editor$SelectionModifierCursorController;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$SelectionModifierCursorController;->invalidateHandles()V
+HSPLandroid/widget/Editor$SelectionModifierCursorController;->isCursorBeingModified()Z
+HSPLandroid/widget/Editor$SelectionModifierCursorController;->isDragAcceleratorActive()Z
+HSPLandroid/widget/Editor$SelectionModifierCursorController;->isSelectionStartDragged()Z
+HSPLandroid/widget/Editor$SelectionModifierCursorController;->onDetached()V
+HSPLandroid/widget/Editor$SelectionModifierCursorController;->resetDragAcceleratorState()V
+HSPLandroid/widget/Editor$SelectionModifierCursorController;->resetTouchOffsets()V
+HSPLandroid/widget/Editor$SpanController;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$SpanController;-><init>(Landroid/widget/Editor;Landroid/widget/Editor$SpanController;)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$SuggestionHelper$SuggestionSpanComparator;)V
+HSPLandroid/widget/Editor$SuggestionHelper;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$SuggestionHelper;-><init>(Landroid/widget/Editor;Landroid/widget/Editor$SuggestionHelper;)V
+HSPLandroid/widget/Editor$TextRenderNode;-><init>(Ljava/lang/String;)V
+HSPLandroid/widget/Editor$TextRenderNode;->needsRecord()Z
+HSPLandroid/widget/Editor$TextViewPositionListener;->updatePosition(IIZZ)V
+HSPLandroid/widget/Editor$UndoInputFilter;-><init>(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor$UndoInputFilter;->restoreInstanceState(Landroid/os/Parcel;)V
+HSPLandroid/widget/Editor$UndoInputFilter;->saveInstanceState(Landroid/os/Parcel;)V
+HSPLandroid/widget/Editor;->-get13(Landroid/widget/Editor;)Landroid/widget/TextView;
+HSPLandroid/widget/Editor;->-wrap12(Landroid/widget/Editor;)Z
+HSPLandroid/widget/Editor;->-wrap22(Landroid/widget/Editor;)V
+HSPLandroid/widget/Editor;-><init>(Landroid/widget/TextView;)V
+HSPLandroid/widget/Editor;->addSpanWatchers(Landroid/text/Spannable;)V
+HSPLandroid/widget/Editor;->adjustInputType(ZZZZ)V
+HSPLandroid/widget/Editor;->clampHorizontalPosition(Landroid/graphics/drawable/Drawable;F)I
+HSPLandroid/widget/Editor;->createInputContentTypeIfNeeded()V
+HSPLandroid/widget/Editor;->drawCursor(Landroid/graphics/Canvas;I)V
+HSPLandroid/widget/Editor;->drawHardwareAccelerated(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
+HSPLandroid/widget/Editor;->drawHardwareAcceleratedInner(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I[I[IIII)I
+HSPLandroid/widget/Editor;->ensureEndedBatchEdit()V
+HSPLandroid/widget/Editor;->extractedTextModeWillBeStarted()Z
+HSPLandroid/widget/Editor;->forgetUndoRedo()V
+HSPLandroid/widget/Editor;->getAvailableDisplayListIndex([III)I
+HSPLandroid/widget/Editor;->getInsertionController()Landroid/widget/Editor$InsertionPointCursorController;
+HSPLandroid/widget/Editor;->getLastTapPosition()I
+HSPLandroid/widget/Editor;->getPositionListener()Landroid/widget/Editor$PositionListener;
+HSPLandroid/widget/Editor;->getSelectionController()Landroid/widget/Editor$SelectionModifierCursorController;
+HSPLandroid/widget/Editor;->getTextActionMode()Landroid/view/ActionMode;
+HSPLandroid/widget/Editor;->hideCursorAndSpanControllers()V
+HSPLandroid/widget/Editor;->hideCursorControllers()V
+HSPLandroid/widget/Editor;->hideInsertionPointCursorController()V
+HSPLandroid/widget/Editor;->hideSpanControllers()V
+HSPLandroid/widget/Editor;->invalidateHandlesAndActionMode()V
+HSPLandroid/widget/Editor;->invalidateTextDisplayList()V
+HSPLandroid/widget/Editor;->invalidateTextDisplayList(Landroid/text/Layout;II)V
+HSPLandroid/widget/Editor;->isCursorVisible()Z
+HSPLandroid/widget/Editor;->makeBlink()V
+HSPLandroid/widget/Editor;->onAttachedToWindow()V
+HSPLandroid/widget/Editor;->onDraw(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
+HSPLandroid/widget/Editor;->onFocusChanged(ZI)V
+HSPLandroid/widget/Editor;->onScrollChanged()V
+HSPLandroid/widget/Editor;->onWindowFocusChanged(Z)V
+HSPLandroid/widget/Editor;->prepareCursorControllers()V
+HSPLandroid/widget/Editor;->refreshTextActionMode()V
+HSPLandroid/widget/Editor;->restoreInstanceState(Landroid/os/ParcelableParcel;)V
+HSPLandroid/widget/Editor;->resumeBlink()V
+HSPLandroid/widget/Editor;->saveInstanceState()Landroid/os/ParcelableParcel;
+HSPLandroid/widget/Editor;->sendOnTextChanged(II)V
+HSPLandroid/widget/Editor;->sendUpdateSelection()V
+HSPLandroid/widget/Editor;->setFrame()V
+HSPLandroid/widget/Editor;->shouldBlink()Z
+HSPLandroid/widget/Editor;->stopTextActionMode()V
+HSPLandroid/widget/Editor;->stopTextActionModeWithPreservingSelection()V
+HSPLandroid/widget/Editor;->updateCursorPosition(IIIF)V
+HSPLandroid/widget/Editor;->updateCursorsPositions()V
+HSPLandroid/widget/Editor;->updateSpellCheckSpans(IIZ)V
+HSPLandroid/widget/FastScroller$1;-><init>(Landroid/widget/FastScroller;)V
+HSPLandroid/widget/FastScroller$2;-><init>(Landroid/widget/FastScroller;)V
+HSPLandroid/widget/FastScroller$3;-><init>(Ljava/lang/String;)V
+HSPLandroid/widget/FastScroller$4;-><init>(Ljava/lang/String;)V
+HSPLandroid/widget/FastScroller$5;-><init>(Ljava/lang/String;)V
+HSPLandroid/widget/FastScroller$6;-><init>(Ljava/lang/String;)V
+HSPLandroid/widget/FastScroller;-><init>(Landroid/widget/AbsListView;I)V
+HSPLandroid/widget/FastScroller;->applyLayout(Landroid/view/View;Landroid/graphics/Rect;)V
+HSPLandroid/widget/FastScroller;->createPreviewTextView(Landroid/content/Context;)Landroid/widget/TextView;
+HSPLandroid/widget/FastScroller;->getSectionsFromIndexer()V
+HSPLandroid/widget/FastScroller;->groupAnimatorOfFloat(Landroid/util/Property;F[Landroid/view/View;)Landroid/animation/Animator;
+HSPLandroid/widget/FastScroller;->isEnabled()Z
+HSPLandroid/widget/FastScroller;->layoutThumb()V
+HSPLandroid/widget/FastScroller;->layoutTrack()V
+HSPLandroid/widget/FastScroller;->measurePreview(Landroid/view/View;Landroid/graphics/Rect;)V
+HSPLandroid/widget/FastScroller;->measureViewToSide(Landroid/view/View;Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLandroid/widget/FastScroller;->onItemCountChanged(II)V
+HSPLandroid/widget/FastScroller;->onScroll(III)V
+HSPLandroid/widget/FastScroller;->onSectionsChanged()V
+HSPLandroid/widget/FastScroller;->onStateDependencyChanged(Z)V
+HSPLandroid/widget/FastScroller;->postAutoHide()V
+HSPLandroid/widget/FastScroller;->refreshDrawablePressedState()V
+HSPLandroid/widget/FastScroller;->setEnabled(Z)V
+HSPLandroid/widget/FastScroller;->setScrollBarStyle(I)V
+HSPLandroid/widget/FastScroller;->setScrollbarPosition(I)V
+HSPLandroid/widget/FastScroller;->setState(I)V
+HSPLandroid/widget/FastScroller;->setStyle(I)V
+HSPLandroid/widget/FastScroller;->stop()V
+HSPLandroid/widget/FastScroller;->transitionToHidden()V
+HSPLandroid/widget/FastScroller;->updateAppearance()V
+HSPLandroid/widget/FastScroller;->updateContainerRect()V
+HSPLandroid/widget/FastScroller;->updateLayout()V
+HSPLandroid/widget/FastScroller;->updateLongList(II)V
+HSPLandroid/widget/FastScroller;->updateOffsetAndRange()V
+HSPLandroid/widget/Filter$FilterListener;->onFilterComplete(I)V
+HSPLandroid/widget/Filter$FilterResults;-><init>()V
+HSPLandroid/widget/Filter$RequestArguments;-><init>()V
+HSPLandroid/widget/Filter$RequestArguments;-><init>(Landroid/widget/Filter$RequestArguments;)V
+HSPLandroid/widget/Filter$RequestHandler;-><init>(Landroid/widget/Filter;Landroid/os/Looper;)V
+HSPLandroid/widget/Filter$RequestHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/widget/Filter$ResultsHandler;-><init>(Landroid/widget/Filter;)V
+HSPLandroid/widget/Filter$ResultsHandler;-><init>(Landroid/widget/Filter;Landroid/widget/Filter$ResultsHandler;)V
+HSPLandroid/widget/Filter$ResultsHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/widget/Filter;->-get0(Landroid/widget/Filter;)Ljava/lang/Object;
+HSPLandroid/widget/Filter;->-get1(Landroid/widget/Filter;)Landroid/os/Handler;
+HSPLandroid/widget/Filter;->-get2(Landroid/widget/Filter;)Landroid/os/Handler;
+HSPLandroid/widget/Filter;->-set0(Landroid/widget/Filter;Landroid/os/Handler;)Landroid/os/Handler;
+HSPLandroid/widget/Filter;-><init>()V
+HSPLandroid/widget/Filter;->filter(Ljava/lang/CharSequence;)V
+HSPLandroid/widget/Filter;->filter(Ljava/lang/CharSequence;Landroid/widget/Filter$FilterListener;)V
+HSPLandroid/widget/Filterable;->getFilter()Landroid/widget/Filter;
+HSPLandroid/widget/ForwardingListener;-><init>(Landroid/view/View;)V
+HSPLandroid/widget/ForwardingListener;->getPopup()Lcom/android/internal/view/menu/ShowableListMenu;
+HSPLandroid/widget/ForwardingListener;->onViewAttachedToWindow(Landroid/view/View;)V
+HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(II)V
+HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(III)V
+HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(Landroid/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
+HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/FrameLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
+HSPLandroid/widget/FrameLayout;->generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;
+HSPLandroid/widget/FrameLayout;->generateDefaultLayoutParams()Landroid/widget/FrameLayout$LayoutParams;
+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;
+HSPLandroid/widget/FrameLayout;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HSPLandroid/widget/FrameLayout;->getPaddingBottomWithForeground()I
+HSPLandroid/widget/FrameLayout;->getPaddingLeftWithForeground()I
+HSPLandroid/widget/FrameLayout;->getPaddingRightWithForeground()I
+HSPLandroid/widget/FrameLayout;->getPaddingTopWithForeground()I
+HSPLandroid/widget/FrameLayout;->layoutChildren(IIIIZ)V
+HSPLandroid/widget/FrameLayout;->onLayout(ZIIII)V
+HSPLandroid/widget/FrameLayout;->onMeasure(II)V
+HSPLandroid/widget/FrameLayout;->setForegroundGravity(I)V
+HSPLandroid/widget/GridLayout$1;-><init>()V
+HSPLandroid/widget/GridLayout$2;-><init>()V
+HSPLandroid/widget/GridLayout$3;-><init>()V
+HSPLandroid/widget/GridLayout$4;-><init>()V
+HSPLandroid/widget/GridLayout$5;-><init>()V
+HSPLandroid/widget/GridLayout$6;-><init>()V
+HSPLandroid/widget/GridLayout$7;-><init>()V
+HSPLandroid/widget/GridLayout$8;-><init>(Landroid/widget/GridLayout$Alignment;Landroid/widget/GridLayout$Alignment;)V
+HSPLandroid/widget/GridLayout$Alignment;-><init>()V
+HSPLandroid/widget/GridLayout$Axis;-><init>(Landroid/widget/GridLayout;Z)V
+HSPLandroid/widget/GridLayout$Axis;-><init>(Landroid/widget/GridLayout;ZLandroid/widget/GridLayout$Axis;)V
+HSPLandroid/widget/GridLayout$Axis;->invalidateStructure()V
+HSPLandroid/widget/GridLayout$Axis;->invalidateValues()V
+HSPLandroid/widget/GridLayout$Axis;->setCount(I)V
+HSPLandroid/widget/GridLayout$Axis;->setOrderPreserved(Z)V
+HSPLandroid/widget/GridLayout$Interval;-><init>(II)V
+HSPLandroid/widget/GridLayout$Interval;->size()I
+HSPLandroid/widget/GridLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/GridLayout$LayoutParams;->init(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/GridLayout$LayoutParams;->reInitSuper(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/GridLayout$LayoutParams;->setBaseAttributes(Landroid/content/res/TypedArray;II)V
+HSPLandroid/widget/GridLayout$MutableInt;-><init>(I)V
+HSPLandroid/widget/GridLayout$Spec;-><init>(ZIILandroid/widget/GridLayout$Alignment;F)V
+HSPLandroid/widget/GridLayout$Spec;-><init>(ZIILandroid/widget/GridLayout$Alignment;FLandroid/widget/GridLayout$Spec;)V
+HSPLandroid/widget/GridLayout$Spec;-><init>(ZLandroid/widget/GridLayout$Interval;Landroid/widget/GridLayout$Alignment;F)V
+HSPLandroid/widget/GridLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/GridLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/GridLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
+HSPLandroid/widget/GridLayout;->checkLayoutParams(Landroid/widget/GridLayout$LayoutParams;Z)V
+HSPLandroid/widget/GridLayout;->createSwitchingAlignment(Landroid/widget/GridLayout$Alignment;Landroid/widget/GridLayout$Alignment;)Landroid/widget/GridLayout$Alignment;
+HSPLandroid/widget/GridLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
+HSPLandroid/widget/GridLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/GridLayout$LayoutParams;
+HSPLandroid/widget/GridLayout;->getAlignment(IZ)Landroid/widget/GridLayout$Alignment;
+HSPLandroid/widget/GridLayout;->invalidateStructure()V
+HSPLandroid/widget/GridLayout;->invalidateValues()V
+HSPLandroid/widget/GridLayout;->onViewAdded(Landroid/view/View;)V
+HSPLandroid/widget/GridLayout;->requestLayout()V
+HSPLandroid/widget/GridLayout;->setAlignmentMode(I)V
+HSPLandroid/widget/GridLayout;->setColumnCount(I)V
+HSPLandroid/widget/GridLayout;->setColumnOrderPreserved(Z)V
+HSPLandroid/widget/GridLayout;->setOrientation(I)V
+HSPLandroid/widget/GridLayout;->setRowCount(I)V
+HSPLandroid/widget/GridLayout;->setRowOrderPreserved(Z)V
+HSPLandroid/widget/GridLayout;->setUseDefaultMargins(Z)V
+HSPLandroid/widget/GridLayout;->spec(I)Landroid/widget/GridLayout$Spec;
+HSPLandroid/widget/GridLayout;->spec(II)Landroid/widget/GridLayout$Spec;
+HSPLandroid/widget/GridLayout;->spec(IILandroid/widget/GridLayout$Alignment;)Landroid/widget/GridLayout$Spec;
+HSPLandroid/widget/GridLayout;->spec(IILandroid/widget/GridLayout$Alignment;F)Landroid/widget/GridLayout$Spec;
+HSPLandroid/widget/GridView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/GridView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/GridView;->determineColumns(I)Z
+HSPLandroid/widget/GridView;->getAdapter()Landroid/widget/Adapter;
+HSPLandroid/widget/GridView;->getAdapter()Landroid/widget/ListAdapter;
+HSPLandroid/widget/GridView;->layoutChildren()V
+HSPLandroid/widget/GridView;->lookForSelectablePosition(IZ)I
+HSPLandroid/widget/GridView;->onMeasure(II)V
+HSPLandroid/widget/GridView;->setAdapter(Landroid/widget/ListAdapter;)V
+HSPLandroid/widget/GridView;->setHorizontalSpacing(I)V
+HSPLandroid/widget/GridView;->setNumColumns(I)V
+HSPLandroid/widget/GridView;->setStretchMode(I)V
+HSPLandroid/widget/GridView;->setVerticalSpacing(I)V
+HSPLandroid/widget/HeaderViewListAdapter;-><init>(Ljava/util/ArrayList;Ljava/util/ArrayList;Landroid/widget/ListAdapter;)V
+HSPLandroid/widget/HeaderViewListAdapter;->areAllItemsEnabled()Z
+HSPLandroid/widget/HeaderViewListAdapter;->areAllListInfosSelectable(Ljava/util/ArrayList;)Z
+HSPLandroid/widget/HeaderViewListAdapter;->getCount()I
+HSPLandroid/widget/HeaderViewListAdapter;->getFootersCount()I
+HSPLandroid/widget/HeaderViewListAdapter;->getHeadersCount()I
+HSPLandroid/widget/HeaderViewListAdapter;->getItemId(I)J
+HSPLandroid/widget/HeaderViewListAdapter;->getItemViewType(I)I
+HSPLandroid/widget/HeaderViewListAdapter;->getView(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;
+HSPLandroid/widget/HeaderViewListAdapter;->getViewTypeCount()I
+HSPLandroid/widget/HeaderViewListAdapter;->getWrappedAdapter()Landroid/widget/ListAdapter;
+HSPLandroid/widget/HeaderViewListAdapter;->hasStableIds()Z
+HSPLandroid/widget/HeaderViewListAdapter;->isEnabled(I)Z
+HSPLandroid/widget/HeaderViewListAdapter;->registerDataSetObserver(Landroid/database/DataSetObserver;)V
+HSPLandroid/widget/HorizontalScrollView$SavedState$1;-><init>()V
+HSPLandroid/widget/HorizontalScrollView$SavedState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/widget/HorizontalScrollView$SavedState;
+HSPLandroid/widget/HorizontalScrollView$SavedState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/widget/HorizontalScrollView$SavedState;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/widget/HorizontalScrollView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/HorizontalScrollView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/HorizontalScrollView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/HorizontalScrollView;->addView(Landroid/view/View;)V
+HSPLandroid/widget/HorizontalScrollView;->addView(Landroid/view/View;I)V
+HSPLandroid/widget/HorizontalScrollView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/widget/HorizontalScrollView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/widget/HorizontalScrollView;->clamp(III)I
+HSPLandroid/widget/HorizontalScrollView;->computeScroll()V
+HSPLandroid/widget/HorizontalScrollView;->computeScrollDeltaToGetChildRectOnScreen(Landroid/graphics/Rect;)I
+HSPLandroid/widget/HorizontalScrollView;->doScrollX(I)V
+HSPLandroid/widget/HorizontalScrollView;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/HorizontalScrollView;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HSPLandroid/widget/HorizontalScrollView;->initScrollView()V
+HSPLandroid/widget/HorizontalScrollView;->isViewDescendantOf(Landroid/view/View;Landroid/view/View;)Z
+HSPLandroid/widget/HorizontalScrollView;->isWithinDeltaOfScreen(Landroid/view/View;I)Z
+HSPLandroid/widget/HorizontalScrollView;->measureChildWithMargins(Landroid/view/View;IIII)V
+HSPLandroid/widget/HorizontalScrollView;->onLayout(ZIIII)V
+HSPLandroid/widget/HorizontalScrollView;->onMeasure(II)V
+HSPLandroid/widget/HorizontalScrollView;->onRequestFocusInDescendants(ILandroid/graphics/Rect;)Z
+HSPLandroid/widget/HorizontalScrollView;->onRestoreInstanceState(Landroid/os/Parcelable;)V
+HSPLandroid/widget/HorizontalScrollView;->onSizeChanged(IIII)V
+HSPLandroid/widget/HorizontalScrollView;->requestChildFocus(Landroid/view/View;Landroid/view/View;)V
+HSPLandroid/widget/HorizontalScrollView;->requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z
+HSPLandroid/widget/HorizontalScrollView;->requestLayout()V
+HSPLandroid/widget/HorizontalScrollView;->scrollTo(II)V
+HSPLandroid/widget/HorizontalScrollView;->scrollToChild(Landroid/view/View;)V
+HSPLandroid/widget/HorizontalScrollView;->scrollToChildRect(Landroid/graphics/Rect;Z)Z
+HSPLandroid/widget/HorizontalScrollView;->setFillViewport(Z)V
+HSPLandroid/widget/HorizontalScrollView;->setOverScrollMode(I)V
+HSPLandroid/widget/ImageButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/ImageButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/ImageButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/ImageButton;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HSPLandroid/widget/ImageButton;->onSetAlpha(I)Z
+HSPLandroid/widget/ImageView$ScaleType;-><init>(Ljava/lang/String;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
+HSPLandroid/widget/ImageView;->applyColorMod()V
+HSPLandroid/widget/ImageView;->applyImageTint()V
+HSPLandroid/widget/ImageView;->configureBounds()V
+HSPLandroid/widget/ImageView;->drawableHotspotChanged(FF)V
+HSPLandroid/widget/ImageView;->drawableStateChanged()V
+HSPLandroid/widget/ImageView;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HSPLandroid/widget/ImageView;->getBaseline()I
+HSPLandroid/widget/ImageView;->getDrawable()Landroid/graphics/drawable/Drawable;
+HSPLandroid/widget/ImageView;->hasOverlappingRendering()Z
+HSPLandroid/widget/ImageView;->initImageView()V
+HSPLandroid/widget/ImageView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ImageView;->isDefaultFocusHighlightNeeded(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)Z
+HSPLandroid/widget/ImageView;->isFilledByImage()Z
+HSPLandroid/widget/ImageView;->isOpaque()Z
+HSPLandroid/widget/ImageView;->jumpDrawablesToCurrentState()V
+HSPLandroid/widget/ImageView;->onAttachedToWindow()V
+HSPLandroid/widget/ImageView;->onCreateDrawableState(I)[I
+HSPLandroid/widget/ImageView;->onDetachedFromWindow()V
+HSPLandroid/widget/ImageView;->onDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/ImageView;->onMeasure(II)V
+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
+HSPLandroid/widget/ImageView;->setColorFilter(I)V
+HSPLandroid/widget/ImageView;->setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V
+HSPLandroid/widget/ImageView;->setColorFilter(Landroid/graphics/ColorFilter;)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
+HSPLandroid/widget/ImageView;->setImageLevel(I)V
+HSPLandroid/widget/ImageView;->setImageMatrix(Landroid/graphics/Matrix;)V
+HSPLandroid/widget/ImageView;->setImageResource(I)V
+HSPLandroid/widget/ImageView;->setImageTintList(Landroid/content/res/ColorStateList;)V
+HSPLandroid/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
+HSPLandroid/widget/ImageView;->setSelected(Z)V
+HSPLandroid/widget/ImageView;->setVisibility(I)V
+HSPLandroid/widget/ImageView;->updateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ImageView;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
+HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(II)V
+HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(IIF)V
+HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$MarginLayoutParams;)V
+HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/widget/LinearLayout$LayoutParams;)V
+HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;)V
+HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+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
+HSPLandroid/widget/LinearLayout;->generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;
+HSPLandroid/widget/LinearLayout;->generateDefaultLayoutParams()Landroid/widget/LinearLayout$LayoutParams;
+HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
+HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/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;
+HSPLandroid/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
+HSPLandroid/widget/LinearLayout;->getNextLocationOffset(Landroid/view/View;)I
+HSPLandroid/widget/LinearLayout;->getOrientation()I
+HSPLandroid/widget/LinearLayout;->getVirtualChildAt(I)Landroid/view/View;
+HSPLandroid/widget/LinearLayout;->getVirtualChildCount()I
+HSPLandroid/widget/LinearLayout;->hasDividerBeforeChildAt(I)Z
+HSPLandroid/widget/LinearLayout;->layoutHorizontal(IIII)V
+HSPLandroid/widget/LinearLayout;->layoutVertical(IIII)V
+HSPLandroid/widget/LinearLayout;->measureChildBeforeLayout(Landroid/view/View;IIIII)V
+HSPLandroid/widget/LinearLayout;->measureHorizontal(II)V
+HSPLandroid/widget/LinearLayout;->measureVertical(II)V
+HSPLandroid/widget/LinearLayout;->onDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/LinearLayout;->onLayout(ZIIII)V
+HSPLandroid/widget/LinearLayout;->onMeasure(II)V
+HSPLandroid/widget/LinearLayout;->onRtlPropertiesChanged(I)V
+HSPLandroid/widget/LinearLayout;->setBaselineAligned(Z)V
+HSPLandroid/widget/LinearLayout;->setChildFrame(Landroid/view/View;IIII)V
+HSPLandroid/widget/LinearLayout;->setDividerDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/LinearLayout;->setGravity(I)V
+HSPLandroid/widget/LinearLayout;->setOrientation(I)V
+HSPLandroid/widget/ListAdapter;->areAllItemsEnabled()Z
+HSPLandroid/widget/ListAdapter;->isEnabled(I)Z
+HSPLandroid/widget/ListPopupWindow$ListSelectorHider;-><init>(Landroid/widget/ListPopupWindow;)V
+HSPLandroid/widget/ListPopupWindow$ListSelectorHider;-><init>(Landroid/widget/ListPopupWindow;Landroid/widget/ListPopupWindow$ListSelectorHider;)V
+HSPLandroid/widget/ListPopupWindow$PopupScrollListener;-><init>(Landroid/widget/ListPopupWindow;)V
+HSPLandroid/widget/ListPopupWindow$PopupScrollListener;-><init>(Landroid/widget/ListPopupWindow;Landroid/widget/ListPopupWindow$PopupScrollListener;)V
+HSPLandroid/widget/ListPopupWindow$PopupTouchInterceptor;-><init>(Landroid/widget/ListPopupWindow;)V
+HSPLandroid/widget/ListPopupWindow$PopupTouchInterceptor;-><init>(Landroid/widget/ListPopupWindow;Landroid/widget/ListPopupWindow$PopupTouchInterceptor;)V
+HSPLandroid/widget/ListPopupWindow$ResizePopupRunnable;-><init>(Landroid/widget/ListPopupWindow;)V
+HSPLandroid/widget/ListPopupWindow$ResizePopupRunnable;-><init>(Landroid/widget/ListPopupWindow;Landroid/widget/ListPopupWindow$ResizePopupRunnable;)V
+HSPLandroid/widget/ListPopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/ListPopupWindow;->dismiss()V
+HSPLandroid/widget/ListPopupWindow;->isDropDownAlwaysVisible()Z
+HSPLandroid/widget/ListPopupWindow;->isShowing()Z
+HSPLandroid/widget/ListPopupWindow;->removePromptView()V
+HSPLandroid/widget/ListPopupWindow;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ListPopupWindow;->setHeight(I)V
+HSPLandroid/widget/ListPopupWindow;->setListSelector(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ListPopupWindow;->setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V
+HSPLandroid/widget/ListPopupWindow;->setPromptPosition(I)V
+HSPLandroid/widget/ListPopupWindow;->setPromptView(Landroid/view/View;)V
+HSPLandroid/widget/ListPopupWindow;->setSoftInputMode(I)V
+HSPLandroid/widget/ListPopupWindow;->setWidth(I)V
+HSPLandroid/widget/ListView$ArrowScrollFocusResult;-><init>()V
+HSPLandroid/widget/ListView$ArrowScrollFocusResult;-><init>(Landroid/widget/ListView$ArrowScrollFocusResult;)V
+HSPLandroid/widget/ListView$FixedViewInfo;-><init>(Landroid/widget/ListView;)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;->addHeaderView(Landroid/view/View;)V
+HSPLandroid/widget/ListView;->addHeaderView(Landroid/view/View;Ljava/lang/Object;Z)V
+HSPLandroid/widget/ListView;->adjustViewsUpOrDown()V
+HSPLandroid/widget/ListView;->canAnimate()Z
+HSPLandroid/widget/ListView;->clearRecycledState(Ljava/util/ArrayList;)V
+HSPLandroid/widget/ListView;->correctTooHigh(I)V
+HSPLandroid/widget/ListView;->dispatchDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/ListView;->drawChild(Landroid/graphics/Canvas;Landroid/view/View;J)Z
+HSPLandroid/widget/ListView;->fillDown(II)Landroid/view/View;
+HSPLandroid/widget/ListView;->fillFromTop(I)Landroid/view/View;
+HSPLandroid/widget/ListView;->fillSpecific(II)Landroid/view/View;
+HSPLandroid/widget/ListView;->fillUp(II)Landroid/view/View;
+HSPLandroid/widget/ListView;->findViewByPredicateInHeadersOrFooters(Ljava/util/ArrayList;Ljava/util/function/Predicate;Landroid/view/View;)Landroid/view/View;
+HSPLandroid/widget/ListView;->findViewByPredicateTraversal(Ljava/util/function/Predicate;Landroid/view/View;)Landroid/view/View;
+HSPLandroid/widget/ListView;->findViewInHeadersOrFooters(Ljava/util/ArrayList;I)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;->getHeaderViewsCount()I
+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;->onFocusChanged(ZILandroid/graphics/Rect;)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;->setDivider(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ListView;->setItemsCanFocus(Z)V
+HSPLandroid/widget/ListView;->setSelection(I)V
+HSPLandroid/widget/ListView;->setupChild(Landroid/view/View;IIZIZZ)V
+HSPLandroid/widget/ListView;->wrapHeaderListAdapterInternal()V
+HSPLandroid/widget/ListView;->wrapHeaderListAdapterInternal(Ljava/util/ArrayList;Ljava/util/ArrayList;Landroid/widget/ListAdapter;)Landroid/widget/HeaderViewListAdapter;
+HSPLandroid/widget/OverScroller$SplineOverScroller;->-get4(Landroid/widget/OverScroller$SplineOverScroller;)Z
+HSPLandroid/widget/OverScroller$SplineOverScroller;-><init>(Landroid/content/Context;)V
+HSPLandroid/widget/OverScroller$SplineOverScroller;->finish()V
+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
+HSPLandroid/widget/OverScroller;->isFinished()Z
+HSPLandroid/widget/PopupMenu$1;-><init>(Landroid/widget/PopupMenu;)V
+HSPLandroid/widget/PopupMenu$2;-><init>(Landroid/widget/PopupMenu;)V
+HSPLandroid/widget/PopupMenu$3;-><init>(Landroid/widget/PopupMenu;Landroid/view/View;)V
+HSPLandroid/widget/PopupMenu;-><init>(Landroid/content/Context;Landroid/view/View;I)V
+HSPLandroid/widget/PopupMenu;-><init>(Landroid/content/Context;Landroid/view/View;III)V
+HSPLandroid/widget/PopupMenu;->getDragToOpenListener()Landroid/view/View$OnTouchListener;
+HSPLandroid/widget/PopupMenu;->getMenu()Landroid/view/Menu;
+HSPLandroid/widget/PopupMenu;->getMenuInflater()Landroid/view/MenuInflater;
+HSPLandroid/widget/PopupMenu;->inflate(I)V
+HSPLandroid/widget/PopupMenu;->setOnMenuItemClickListener(Landroid/widget/PopupMenu$OnMenuItemClickListener;)V
+HSPLandroid/widget/PopupWindow$1;-><init>(Landroid/widget/PopupWindow;)V
+HSPLandroid/widget/PopupWindow$2;-><init>(Landroid/widget/PopupWindow;)V
+HSPLandroid/widget/PopupWindow$OnDismissListener;->onDismiss()V
+HSPLandroid/widget/PopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/PopupWindow;->dismiss()V
+HSPLandroid/widget/PopupWindow;->getTransition(I)Landroid/transition/Transition;
+HSPLandroid/widget/PopupWindow;->isShowing()Z
+HSPLandroid/widget/PopupWindow;->setAttachedInDecor(Z)V
+HSPLandroid/widget/PopupWindow;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/PopupWindow;->setContentView(Landroid/view/View;)V
+HSPLandroid/widget/PopupWindow;->setEnterTransition(Landroid/transition/Transition;)V
+HSPLandroid/widget/PopupWindow;->setExitTransition(Landroid/transition/Transition;)V
+HSPLandroid/widget/PopupWindow;->setInputMethodMode(I)V
+HSPLandroid/widget/PopupWindow;->setSoftInputMode(I)V
+HSPLandroid/widget/ProgressBar$1;-><init>(Landroid/widget/ProgressBar;Ljava/lang/String;)V
+HSPLandroid/widget/ProgressBar$1;->get(Landroid/widget/ProgressBar;)Ljava/lang/Float;
+HSPLandroid/widget/ProgressBar$1;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/widget/ProgressBar$1;->setValue(Landroid/widget/ProgressBar;F)V
+HSPLandroid/widget/ProgressBar$1;->setValue(Ljava/lang/Object;F)V
+HSPLandroid/widget/ProgressBar$ProgressTintInfo;-><init>()V
+HSPLandroid/widget/ProgressBar$ProgressTintInfo;-><init>(Landroid/widget/ProgressBar$ProgressTintInfo;)V
+HSPLandroid/widget/ProgressBar$SavedState$1;-><init>()V
+HSPLandroid/widget/ProgressBar$SavedState;-><init>(Landroid/os/Parcelable;)V
+HSPLandroid/widget/ProgressBar$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/widget/ProgressBar;->-get1(Landroid/widget/ProgressBar;)F
+HSPLandroid/widget/ProgressBar;->-set1(Landroid/widget/ProgressBar;F)F
+HSPLandroid/widget/ProgressBar;->-wrap1(Landroid/widget/ProgressBar;IF)V
+HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/ProgressBar;->applyIndeterminateTint()V
+HSPLandroid/widget/ProgressBar;->applyPrimaryProgressTint()V
+HSPLandroid/widget/ProgressBar;->applyProgressTints()V
+HSPLandroid/widget/ProgressBar;->doRefreshProgress(IIZZZ)V
+HSPLandroid/widget/ProgressBar;->drawTrack(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/ProgressBar;->drawableStateChanged()V
+HSPLandroid/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;->getMax()I
+HSPLandroid/widget/ProgressBar;->getMin()I
+HSPLandroid/widget/ProgressBar;->getProgress()I
+HSPLandroid/widget/ProgressBar;->getProgressDrawable()Landroid/graphics/drawable/Drawable;
+HSPLandroid/widget/ProgressBar;->getTintTarget(IZ)Landroid/graphics/drawable/Drawable;
+HSPLandroid/widget/ProgressBar;->initProgressBar()V
+HSPLandroid/widget/ProgressBar;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ProgressBar;->isIndeterminate()Z
+HSPLandroid/widget/ProgressBar;->jumpDrawablesToCurrentState()V
+HSPLandroid/widget/ProgressBar;->needsTileify(Landroid/graphics/drawable/Drawable;)Z
+HSPLandroid/widget/ProgressBar;->onAttachedToWindow()V
+HSPLandroid/widget/ProgressBar;->onDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/ProgressBar;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HSPLandroid/widget/ProgressBar;->onMeasure(II)V
+HSPLandroid/widget/ProgressBar;->onProgressRefresh(FZI)V
+HSPLandroid/widget/ProgressBar;->onResolveDrawables(I)V
+HSPLandroid/widget/ProgressBar;->onSaveInstanceState()Landroid/os/Parcelable;
+HSPLandroid/widget/ProgressBar;->onSizeChanged(IIII)V
+HSPLandroid/widget/ProgressBar;->onVisibilityAggregated(Z)V
+HSPLandroid/widget/ProgressBar;->onVisualProgressChanged(IF)V
+HSPLandroid/widget/ProgressBar;->postInvalidate()V
+HSPLandroid/widget/ProgressBar;->refreshProgress(IIZZ)V
+HSPLandroid/widget/ProgressBar;->setIndeterminate(Z)V
+HSPLandroid/widget/ProgressBar;->setIndeterminateDrawable(Landroid/graphics/drawable/Drawable;)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
+HSPLandroid/widget/ProgressBar;->setProgress(IZ)V
+HSPLandroid/widget/ProgressBar;->setProgressDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ProgressBar;->setProgressInternal(IZZ)Z
+HSPLandroid/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
+HSPLandroid/widget/ProgressBar;->stopAnimation()V
+HSPLandroid/widget/ProgressBar;->swapCurrentDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ProgressBar;->updateDrawableBounds(II)V
+HSPLandroid/widget/ProgressBar;->updateDrawableState()V
+HSPLandroid/widget/ProgressBar;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
+HSPLandroid/widget/RadioButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/RadioButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/RadioButton;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/RadioGroup$CheckedStateTracker;-><init>(Landroid/widget/RadioGroup;)V
+HSPLandroid/widget/RadioGroup$CheckedStateTracker;-><init>(Landroid/widget/RadioGroup;Landroid/widget/RadioGroup$CheckedStateTracker;)V
+HSPLandroid/widget/RadioGroup$PassThroughHierarchyChangeListener;-><init>(Landroid/widget/RadioGroup;)V
+HSPLandroid/widget/RadioGroup$PassThroughHierarchyChangeListener;-><init>(Landroid/widget/RadioGroup;Landroid/widget/RadioGroup$PassThroughHierarchyChangeListener;)V
+HSPLandroid/widget/RadioGroup$PassThroughHierarchyChangeListener;->onChildViewAdded(Landroid/view/View;Landroid/view/View;)V
+HSPLandroid/widget/RadioGroup;->-get1(Landroid/widget/RadioGroup;)Landroid/widget/CompoundButton$OnCheckedChangeListener;
+HSPLandroid/widget/RadioGroup;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/RadioGroup;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/widget/RadioGroup;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
+HSPLandroid/widget/RadioGroup;->init()V
+HSPLandroid/widget/RadioGroup;->onFinishInflate()V
+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;->-get0(Landroid/widget/RelativeLayout$DependencyGraph;)Landroid/util/SparseArray;
+HSPLandroid/widget/RelativeLayout$DependencyGraph;-><init>()V
+HSPLandroid/widget/RelativeLayout$DependencyGraph;-><init>(Landroid/widget/RelativeLayout$DependencyGraph;)V
+HSPLandroid/widget/RelativeLayout$DependencyGraph;->add(Landroid/view/View;)V
+HSPLandroid/widget/RelativeLayout$DependencyGraph;->clear()V
+HSPLandroid/widget/RelativeLayout$DependencyGraph;->findRoots([I)Ljava/util/ArrayDeque;
+HSPLandroid/widget/RelativeLayout$DependencyGraph;->getSortedViews([Landroid/view/View;[I)V
+HSPLandroid/widget/RelativeLayout$LayoutParams;->-get0(Landroid/widget/RelativeLayout$LayoutParams;)I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->-get1(Landroid/widget/RelativeLayout$LayoutParams;)I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->-get2(Landroid/widget/RelativeLayout$LayoutParams;)I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->-get3(Landroid/widget/RelativeLayout$LayoutParams;)[I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->-get4(Landroid/widget/RelativeLayout$LayoutParams;)I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->-set0(Landroid/widget/RelativeLayout$LayoutParams;I)I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->-set1(Landroid/widget/RelativeLayout$LayoutParams;I)I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->-set2(Landroid/widget/RelativeLayout$LayoutParams;I)I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->-set3(Landroid/widget/RelativeLayout$LayoutParams;I)I
+HSPLandroid/widget/RelativeLayout$LayoutParams;-><init>(II)V
+HSPLandroid/widget/RelativeLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/RelativeLayout$LayoutParams;->addRule(I)V
+HSPLandroid/widget/RelativeLayout$LayoutParams;->addRule(II)V
+HSPLandroid/widget/RelativeLayout$LayoutParams;->getRules()[I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->getRules(I)[I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->hasRelativeRules()Z
+HSPLandroid/widget/RelativeLayout$LayoutParams;->isRelativeRule(I)Z
+HSPLandroid/widget/RelativeLayout$LayoutParams;->resolveLayoutDirection(I)V
+HSPLandroid/widget/RelativeLayout$LayoutParams;->resolveRules(I)V
+HSPLandroid/widget/RelativeLayout$LayoutParams;->shouldResolveLayoutDirection(I)Z
+HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;)V
+HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/RelativeLayout;->applyHorizontalSizeRules(Landroid/widget/RelativeLayout$LayoutParams;I[I)V
+HSPLandroid/widget/RelativeLayout;->applyVerticalSizeRules(Landroid/widget/RelativeLayout$LayoutParams;II)V
+HSPLandroid/widget/RelativeLayout;->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;->generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;
+HSPLandroid/widget/RelativeLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
+HSPLandroid/widget/RelativeLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/RelativeLayout$LayoutParams;
+HSPLandroid/widget/RelativeLayout;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HSPLandroid/widget/RelativeLayout;->getBaseline()I
+HSPLandroid/widget/RelativeLayout;->getChildMeasureSpec(IIIIIIII)I
+HSPLandroid/widget/RelativeLayout;->getRelatedView([II)Landroid/view/View;
+HSPLandroid/widget/RelativeLayout;->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
+HSPLandroid/widget/RelativeLayout;->onLayout(ZIIII)V
+HSPLandroid/widget/RelativeLayout;->onMeasure(II)V
+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
+HSPLandroid/widget/RelativeLayout;->sortChildren()V
+HSPLandroid/widget/RemoteViews$1;-><init>()V
+HSPLandroid/widget/RemoteViews$2;-><init>()V
+HSPLandroid/widget/RemoteViews$3;-><init>()V
+HSPLandroid/widget/RemoteViews$Action;-><init>()V
+HSPLandroid/widget/RemoteViews$Action;-><init>(Landroid/widget/RemoteViews$Action;)V
+HSPLandroid/widget/RemoteViews$Action;->hasSameAppInfo(Landroid/content/pm/ApplicationInfo;)Z
+HSPLandroid/widget/RemoteViews$Action;->updateMemoryUsageEstimate(Landroid/widget/RemoteViews$MemoryUsageCounter;)V
+HSPLandroid/widget/RemoteViews$BitmapCache;-><init>()V
+HSPLandroid/widget/RemoteViews$BitmapCache;->addBitmapMemory(Landroid/widget/RemoteViews$MemoryUsageCounter;)V
+HSPLandroid/widget/RemoteViews$BitmapCache;->writeBitmapsToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/widget/RemoteViews$LayoutParamAction;-><init>(III)V
+HSPLandroid/widget/RemoteViews$LayoutParamAction;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/widget/RemoteViews$MemoryUsageCounter;-><init>(Landroid/widget/RemoteViews;)V
+HSPLandroid/widget/RemoteViews$MemoryUsageCounter;-><init>(Landroid/widget/RemoteViews;Landroid/widget/RemoteViews$MemoryUsageCounter;)V
+HSPLandroid/widget/RemoteViews$MemoryUsageCounter;->clear()V
+HSPLandroid/widget/RemoteViews$MutablePair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroid/widget/RemoteViews$OnClickHandler;-><init>()V
+HSPLandroid/widget/RemoteViews$ReflectionAction;-><init>(Landroid/widget/RemoteViews;ILjava/lang/String;ILjava/lang/Object;)V
+HSPLandroid/widget/RemoteViews$ReflectionAction;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/widget/RemoteViews$RuntimeAction;-><init>()V
+HSPLandroid/widget/RemoteViews$RuntimeAction;-><init>(Landroid/widget/RemoteViews$RuntimeAction;)V
+HSPLandroid/widget/RemoteViews$SetDrawableParameters;-><init>(Landroid/widget/RemoteViews;IZIILandroid/graphics/PorterDuff$Mode;I)V
+HSPLandroid/widget/RemoteViews$SetDrawableParameters;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/widget/RemoteViews;-><init>(Landroid/content/pm/ApplicationInfo;I)V
+HSPLandroid/widget/RemoteViews;->addAction(Landroid/widget/RemoteViews$Action;)V
+HSPLandroid/widget/RemoteViews;->getSequenceNumber()I
+HSPLandroid/widget/RemoteViews;->hasLandscapeAndPortraitLayouts()Z
+HSPLandroid/widget/RemoteViews;->recalculateMemoryUsage()V
+HSPLandroid/widget/RemoteViews;->setBoolean(ILjava/lang/String;Z)V
+HSPLandroid/widget/RemoteViews;->setCharSequence(ILjava/lang/String;Ljava/lang/CharSequence;)V
+HSPLandroid/widget/RemoteViews;->setDrawableParameters(IZIILandroid/graphics/PorterDuff$Mode;I)V
+HSPLandroid/widget/RemoteViews;->setIcon(ILjava/lang/String;Landroid/graphics/drawable/Icon;)V
+HSPLandroid/widget/RemoteViews;->setImageViewIcon(ILandroid/graphics/drawable/Icon;)V
+HSPLandroid/widget/RemoteViews;->setInt(ILjava/lang/String;I)V
+HSPLandroid/widget/RemoteViews;->setLong(ILjava/lang/String;J)V
+HSPLandroid/widget/RemoteViews;->setTextColor(II)V
+HSPLandroid/widget/RemoteViews;->setTextViewText(ILjava/lang/CharSequence;)V
+HSPLandroid/widget/RemoteViews;->setViewLayoutMarginEndDimen(II)V
+HSPLandroid/widget/RemoteViews;->setViewLayoutWidth(II)V
+HSPLandroid/widget/RemoteViews;->setViewVisibility(II)V
+HSPLandroid/widget/RemoteViews;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/widget/RemoteViewsAdapter$RemoteAdapterConnectionCallback;->deferNotifyDataSetChanged()V
+HSPLandroid/widget/RemoteViewsAdapter$RemoteAdapterConnectionCallback;->onRemoteAdapterConnected()Z
+HSPLandroid/widget/RemoteViewsAdapter$RemoteAdapterConnectionCallback;->onRemoteAdapterDisconnected()V
+HSPLandroid/widget/RemoteViewsAdapter$RemoteAdapterConnectionCallback;->setRemoteViewsAdapter(Landroid/content/Intent;Z)V
+HSPLandroid/widget/RtlSpacingHelper;-><init>()V
+HSPLandroid/widget/RtlSpacingHelper;->getEnd()I
+HSPLandroid/widget/RtlSpacingHelper;->getStart()I
+HSPLandroid/widget/RtlSpacingHelper;->setAbsolute(II)V
+HSPLandroid/widget/RtlSpacingHelper;->setDirection(Z)V
+HSPLandroid/widget/RtlSpacingHelper;->setRelative(II)V
+HSPLandroid/widget/ScrollBarDrawable;-><init>()V
+HSPLandroid/widget/ScrollBarDrawable;->draw(Landroid/graphics/Canvas;)V
+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
+HSPLandroid/widget/ScrollBarDrawable;->mutate()Landroid/widget/ScrollBarDrawable;
+HSPLandroid/widget/ScrollBarDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
+HSPLandroid/widget/ScrollBarDrawable;->onStateChange([I)Z
+HSPLandroid/widget/ScrollBarDrawable;->propagateCurrentState(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ScrollBarDrawable;->setAlpha(I)V
+HSPLandroid/widget/ScrollBarDrawable;->setHorizontalThumbDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ScrollBarDrawable;->setHorizontalTrackDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ScrollBarDrawable;->setParameters(IIIZ)V
+HSPLandroid/widget/ScrollBarDrawable;->setVerticalThumbDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ScrollBarDrawable;->setVerticalTrackDrawable(Landroid/graphics/drawable/Drawable;)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
+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;->initScrollView()V
+HSPLandroid/widget/ScrollView;->measureChildWithMargins(Landroid/view/View;IIII)V
+HSPLandroid/widget/ScrollView;->onLayout(ZIIII)V
+HSPLandroid/widget/ScrollView;->onMeasure(II)V
+HSPLandroid/widget/ScrollView;->onSizeChanged(IIII)V
+HSPLandroid/widget/ScrollView;->requestLayout()V
+HSPLandroid/widget/ScrollView;->scrollTo(II)V
+HSPLandroid/widget/ScrollView;->setFillViewport(Z)V
+HSPLandroid/widget/ScrollView;->setOverScrollMode(I)V
+HSPLandroid/widget/Scroller$ViscousFluidInterpolator;-><init>()V
+HSPLandroid/widget/Scroller$ViscousFluidInterpolator;->viscousFluid(F)F
+HSPLandroid/widget/Scroller;-><init>(Landroid/content/Context;)V
+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
+HSPLandroid/widget/Scroller;->abortAnimation()V
+HSPLandroid/widget/Scroller;->computeDeceleration(F)F
+HSPLandroid/widget/Scroller;->computeScrollOffset()Z
+HSPLandroid/widget/Scroller;->getCurrX()I
+HSPLandroid/widget/Scroller;->getCurrY()I
+HSPLandroid/widget/Scroller;->isFinished()Z
+HSPLandroid/widget/Scroller;->startScroll(IIIII)V
+HSPLandroid/widget/SearchView$OnCloseListener;->onClose()Z
+HSPLandroid/widget/SectionIndexer;->getPositionForSection(I)I
+HSPLandroid/widget/SectionIndexer;->getSectionForPosition(I)I
+HSPLandroid/widget/SectionIndexer;->getSections()[Ljava/lang/Object;
+HSPLandroid/widget/SeekBar$OnSeekBarChangeListener;->onProgressChanged(Landroid/widget/SeekBar;IZ)V
+HSPLandroid/widget/SeekBar$OnSeekBarChangeListener;->onStartTrackingTouch(Landroid/widget/SeekBar;)V
+HSPLandroid/widget/SeekBar$OnSeekBarChangeListener;->onStopTrackingTouch(Landroid/widget/SeekBar;)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;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/SeekBar;->onProgressRefresh(FZI)V
+HSPLandroid/widget/SeekBar;->setOnSeekBarChangeListener(Landroid/widget/SeekBar$OnSeekBarChangeListener;)V
+HSPLandroid/widget/Space;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)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;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/Space;->getDefaultSize2(II)I
+HSPLandroid/widget/Space;->onMeasure(II)V
+HSPLandroid/widget/SpinnerAdapter;->getDropDownView(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;
+HSPLandroid/widget/Switch$1;-><init>(Ljava/lang/String;)V
+HSPLandroid/widget/Switch;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/Switch;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/Switch;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/Switch;->cancelPositionAnimator()V
+HSPLandroid/widget/Switch;->drawableStateChanged()V
+HSPLandroid/widget/Switch;->onCreateDrawableState(I)[I
+HSPLandroid/widget/Switch;->setChecked(Z)V
+HSPLandroid/widget/Switch;->setSwitchTextAppearance(Landroid/content/Context;I)V
+HSPLandroid/widget/Switch;->setSwitchTypeface(Landroid/graphics/Typeface;)V
+HSPLandroid/widget/Switch;->setSwitchTypeface(Landroid/graphics/Typeface;I)V
+HSPLandroid/widget/Switch;->setSwitchTypefaceByIndex(II)V
+HSPLandroid/widget/Switch;->setThumbPosition(F)V
+HSPLandroid/widget/Switch;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
+HSPLandroid/widget/TextClock$1;-><init>(Landroid/widget/TextClock;)V
+HSPLandroid/widget/TextClock$2;-><init>(Landroid/widget/TextClock;)V
+HSPLandroid/widget/TextClock$FormatChangeObserver;-><init>(Landroid/widget/TextClock;Landroid/os/Handler;)V
+HSPLandroid/widget/TextClock;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/TextClock;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/TextClock;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/TextClock;->abc(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/widget/TextClock;->chooseFormat()V
+HSPLandroid/widget/TextClock;->createTime(Ljava/lang/String;)V
+HSPLandroid/widget/TextClock;->init()V
+HSPLandroid/widget/TextClock;->is24HourModeEnabled()Z
+HSPLandroid/widget/TextClock;->onAttachedToWindow()V
+HSPLandroid/widget/TextClock;->onTimeChanged()V
+HSPLandroid/widget/TextClock;->onVisibilityAggregated(Z)V
+HSPLandroid/widget/TextClock;->registerObserver()V
+HSPLandroid/widget/TextClock;->registerReceiver()V
+HSPLandroid/widget/TextClock;->setFormat12Hour(Ljava/lang/CharSequence;)V
+HSPLandroid/widget/TextClock;->setFormat24Hour(Ljava/lang/CharSequence;)V
+HSPLandroid/widget/TextClock;->setShowCurrentUserTime(Z)V
+HSPLandroid/widget/TextClock;->unregisterObserver()V
+HSPLandroid/widget/TextView$BufferType;-><init>(Ljava/lang/String;I)V
+HSPLandroid/widget/TextView$ChangeWatcher;-><init>(Landroid/widget/TextView;)V
+HSPLandroid/widget/TextView$ChangeWatcher;-><init>(Landroid/widget/TextView;Landroid/widget/TextView$ChangeWatcher;)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
+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
+HSPLandroid/widget/TextView$OnEditorActionListener;->onEditorAction(Landroid/widget/TextView;ILandroid/view/KeyEvent;)Z
+HSPLandroid/widget/TextView$SavedState$1;-><init>()V
+HSPLandroid/widget/TextView$SavedState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/widget/TextView$SavedState;
+HSPLandroid/widget/TextView$SavedState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/widget/TextView$SavedState;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/widget/TextView$SavedState;-><init>(Landroid/os/Parcel;Landroid/widget/TextView$SavedState;)V
+HSPLandroid/widget/TextView$SavedState;-><init>(Landroid/os/Parcelable;)V
+HSPLandroid/widget/TextView$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/widget/TextView;->-getandroid-text-Layout$AlignmentSwitchesValues()[I
+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
+HSPLandroid/widget/TextView;->addTextChangedListener(Landroid/text/TextWatcher;)V
+HSPLandroid/widget/TextView;->applyCompoundDrawableTint()V
+HSPLandroid/widget/TextView;->applySingleLine(ZZZ)V
+HSPLandroid/widget/TextView;->assumeLayout()V
+HSPLandroid/widget/TextView;->autoSizeText()V
+HSPLandroid/widget/TextView;->bringPointIntoView(I)Z
+HSPLandroid/widget/TextView;->bringTextIntoView()Z
+HSPLandroid/widget/TextView;->cancelLongPress()V
+HSPLandroid/widget/TextView;->checkForRelayout()V
+HSPLandroid/widget/TextView;->checkForResize()V
+HSPLandroid/widget/TextView;->cleanupAutoSizePresetSizes([I)[I
+HSPLandroid/widget/TextView;->compressText(F)Z
+HSPLandroid/widget/TextView;->computeScroll()V
+HSPLandroid/widget/TextView;->convertFromViewportToContentCoordinates(Landroid/graphics/Rect;)V
+HSPLandroid/widget/TextView;->createEditorIfNeeded()V
+HSPLandroid/widget/TextView;->desired(Landroid/text/Layout;)I
+HSPLandroid/widget/TextView;->drawableStateChanged()V
+HSPLandroid/widget/TextView;->findViewsWithText(Ljava/util/ArrayList;Ljava/lang/CharSequence;I)V
+HSPLandroid/widget/TextView;->fixFocusableAndClickableSettings()V
+HSPLandroid/widget/TextView;->getAccessibilityClassName()Ljava/lang/CharSequence;
+HSPLandroid/widget/TextView;->getAccessibilitySelectionEnd()I
+HSPLandroid/widget/TextView;->getAccessibilitySelectionStart()I
+HSPLandroid/widget/TextView;->getAutofillType()I
+HSPLandroid/widget/TextView;->getAutofillValue()Landroid/view/autofill/AutofillValue;
+HSPLandroid/widget/TextView;->getBaseline()I
+HSPLandroid/widget/TextView;->getBaselineOffset()I
+HSPLandroid/widget/TextView;->getBoxHeight(Landroid/text/Layout;)I
+HSPLandroid/widget/TextView;->getCompoundDrawablesRelative()[Landroid/graphics/drawable/Drawable;
+HSPLandroid/widget/TextView;->getCompoundPaddingBottom()I
+HSPLandroid/widget/TextView;->getCompoundPaddingLeft()I
+HSPLandroid/widget/TextView;->getCompoundPaddingRight()I
+HSPLandroid/widget/TextView;->getCompoundPaddingTop()I
+HSPLandroid/widget/TextView;->getCurrentTextColor()I
+HSPLandroid/widget/TextView;->getDefaultEditable()Z
+HSPLandroid/widget/TextView;->getDefaultMovementMethod()Landroid/text/method/MovementMethod;
+HSPLandroid/widget/TextView;->getDesiredHeight()I
+HSPLandroid/widget/TextView;->getDesiredHeight(Landroid/text/Layout;Z)I
+HSPLandroid/widget/TextView;->getEditableText()Landroid/text/Editable;
+HSPLandroid/widget/TextView;->getEllipsize()Landroid/text/TextUtils$TruncateAt;
+HSPLandroid/widget/TextView;->getError()Ljava/lang/CharSequence;
+HSPLandroid/widget/TextView;->getExtendedPaddingBottom()I
+HSPLandroid/widget/TextView;->getExtendedPaddingTop()I
+HSPLandroid/widget/TextView;->getFilters()[Landroid/text/InputFilter;
+HSPLandroid/widget/TextView;->getFreezesText()Z
+HSPLandroid/widget/TextView;->getGravity()I
+HSPLandroid/widget/TextView;->getHighlightColor()I
+HSPLandroid/widget/TextView;->getHint()Ljava/lang/CharSequence;
+HSPLandroid/widget/TextView;->getHorizontalOffsetForDrawables()I
+HSPLandroid/widget/TextView;->getHorizontallyScrolling()Z
+HSPLandroid/widget/TextView;->getInputType()I
+HSPLandroid/widget/TextView;->getInterestingRect(Landroid/graphics/Rect;I)V
+HSPLandroid/widget/TextView;->getIterableTextForAccessibility()Ljava/lang/CharSequence;
+HSPLandroid/widget/TextView;->getKeyListener()Landroid/text/method/KeyListener;
+HSPLandroid/widget/TextView;->getLayout()Landroid/text/Layout;
+HSPLandroid/widget/TextView;->getLayoutAlignment()Landroid/text/Layout$Alignment;
+HSPLandroid/widget/TextView;->getLineAtCoordinateUnclamped(F)I
+HSPLandroid/widget/TextView;->getLineCount()I
+HSPLandroid/widget/TextView;->getLineHeight()I
+HSPLandroid/widget/TextView;->getMaxLines()I
+HSPLandroid/widget/TextView;->getMovementMethod()Landroid/text/method/MovementMethod;
+HSPLandroid/widget/TextView;->getPaint()Landroid/text/TextPaint;
+HSPLandroid/widget/TextView;->getSelectionEnd()I
+HSPLandroid/widget/TextView;->getSelectionStart()I
+HSPLandroid/widget/TextView;->getText()Ljava/lang/CharSequence;
+HSPLandroid/widget/TextView;->getTextColors()Landroid/content/res/ColorStateList;
+HSPLandroid/widget/TextView;->getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic;
+HSPLandroid/widget/TextView;->getTextForAccessibility()Ljava/lang/CharSequence;
+HSPLandroid/widget/TextView;->getTextLocale()Ljava/util/Locale;
+HSPLandroid/widget/TextView;->getTextSize()F
+HSPLandroid/widget/TextView;->getTotalPaddingTop()I
+HSPLandroid/widget/TextView;->getTransformationMethod()Landroid/text/method/TransformationMethod;
+HSPLandroid/widget/TextView;->getUpdatedHighlightPath()Landroid/graphics/Path;
+HSPLandroid/widget/TextView;->getVerticalOffset(Z)I
+HSPLandroid/widget/TextView;->hasOverlappingRendering()Z
+HSPLandroid/widget/TextView;->hasPasswordTransformationMethod()Z
+HSPLandroid/widget/TextView;->hasSelection()Z
+HSPLandroid/widget/TextView;->hideErrorIfUnchanged()V
+HSPLandroid/widget/TextView;->invalidateCursor(III)V
+HSPLandroid/widget/TextView;->invalidateCursorPath()V
+HSPLandroid/widget/TextView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/TextView;->invalidateRegion(IIZ)V
+HSPLandroid/widget/TextView;->isAutoSizeEnabled()Z
+HSPLandroid/widget/TextView;->isAutofillable()Z
+HSPLandroid/widget/TextView;->isInExtractedMode()Z
+HSPLandroid/widget/TextView;->isMarqueeFadeEnabled()Z
+HSPLandroid/widget/TextView;->isMultilineInputType(I)Z
+HSPLandroid/widget/TextView;->isPasswordInputType(I)Z
+HSPLandroid/widget/TextView;->isShowingHint()Z
+HSPLandroid/widget/TextView;->isSingleLine()Z
+HSPLandroid/widget/TextView;->isSuggestionsEnabled()Z
+HSPLandroid/widget/TextView;->isTextEditable()Z
+HSPLandroid/widget/TextView;->isTextSelectable()Z
+HSPLandroid/widget/TextView;->isVisiblePasswordInputType(I)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;->notifyAutoFillManagerAfterTextChangedIfNeeded()V
+HSPLandroid/widget/TextView;->nullLayouts()V
+HSPLandroid/widget/TextView;->onAttachedToWindow()V
+HSPLandroid/widget/TextView;->onCheckIsTextEditor()Z
+HSPLandroid/widget/TextView;->onCreateDrawableState(I)[I
+HSPLandroid/widget/TextView;->onDetachedFromWindowInternal()V
+HSPLandroid/widget/TextView;->onDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/TextView;->onFocusChanged(ZILandroid/graphics/Rect;)V
+HSPLandroid/widget/TextView;->onInitializeAccessibilityEventInternal(Landroid/view/accessibility/AccessibilityEvent;)V
+HSPLandroid/widget/TextView;->onInitializeAccessibilityNodeInfoInternal(Landroid/view/accessibility/AccessibilityNodeInfo;)V
+HSPLandroid/widget/TextView;->onLayout(ZIIII)V
+HSPLandroid/widget/TextView;->onMeasure(II)V
+HSPLandroid/widget/TextView;->onPreDraw()Z
+HSPLandroid/widget/TextView;->onProvideAutoStructureForAssistOrAutofill(Landroid/view/ViewStructure;Z)V
+HSPLandroid/widget/TextView;->onProvideAutofillStructure(Landroid/view/ViewStructure;I)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;
+HSPLandroid/widget/TextView;->onScrollChanged(IIII)V
+HSPLandroid/widget/TextView;->onSelectionChanged(II)V
+HSPLandroid/widget/TextView;->onTextChanged(Ljava/lang/CharSequence;III)V
+HSPLandroid/widget/TextView;->onVisibilityChanged(Landroid/view/View;I)V
+HSPLandroid/widget/TextView;->onWindowFocusChanged(Z)V
+HSPLandroid/widget/TextView;->prepareDrawableForDisplay(Landroid/graphics/drawable/Drawable;)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;
+HSPLandroid/widget/TextView;->removeTextChangedListener(Landroid/text/TextWatcher;)V
+HSPLandroid/widget/TextView;->resetResolvedDrawables()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;->setCompoundDrawablePadding(I)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(IIII)V
+HSPLandroid/widget/TextView;->setCompoundDrawablesWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/TextView;->setCursorVisible(Z)V
+HSPLandroid/widget/TextView;->setCustomInsertionActionModeCallback(Landroid/view/ActionMode$Callback;)V
+HSPLandroid/widget/TextView;->setCustomSelectionActionModeCallback(Landroid/view/ActionMode$Callback;)V
+HSPLandroid/widget/TextView;->setElegantTextHeight(Z)V
+HSPLandroid/widget/TextView;->setEllipsize(Landroid/text/TextUtils$TruncateAt;)V
+HSPLandroid/widget/TextView;->setEnabled(Z)V
+HSPLandroid/widget/TextView;->setFilters(Landroid/text/Editable;[Landroid/text/InputFilter;)V
+HSPLandroid/widget/TextView;->setFilters([Landroid/text/InputFilter;)V
+HSPLandroid/widget/TextView;->setFontFeatureSettings(Ljava/lang/String;)V
+HSPLandroid/widget/TextView;->setFrame(IIII)Z
+HSPLandroid/widget/TextView;->setGravity(I)V
+HSPLandroid/widget/TextView;->setHighlightColor(I)V
+HSPLandroid/widget/TextView;->setHint(I)V
+HSPLandroid/widget/TextView;->setHint(Ljava/lang/CharSequence;)V
+HSPLandroid/widget/TextView;->setHintTextColor(I)V
+HSPLandroid/widget/TextView;->setHintTextColor(Landroid/content/res/ColorStateList;)V
+HSPLandroid/widget/TextView;->setHorizontallyScrolling(Z)V
+HSPLandroid/widget/TextView;->setImeOptions(I)V
+HSPLandroid/widget/TextView;->setIncludeFontPadding(Z)V
+HSPLandroid/widget/TextView;->setInputType(I)V
+HSPLandroid/widget/TextView;->setInputType(IZ)V
+HSPLandroid/widget/TextView;->setInputTypeFromEditor()V
+HSPLandroid/widget/TextView;->setInputTypeSingleLine(Z)V
+HSPLandroid/widget/TextView;->setKeyListener(Landroid/text/method/KeyListener;)V
+HSPLandroid/widget/TextView;->setKeyListenerOnly(Landroid/text/method/KeyListener;)V
+HSPLandroid/widget/TextView;->setLetterSpacing(F)V
+HSPLandroid/widget/TextView;->setLines(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;->setMinWidth(I)V
+HSPLandroid/widget/TextView;->setMovementMethod(Landroid/text/method/MovementMethod;)V
+HSPLandroid/widget/TextView;->setOnEditorActionListener(Landroid/widget/TextView$OnEditorActionListener;)V
+HSPLandroid/widget/TextView;->setPadding(IIII)V
+HSPLandroid/widget/TextView;->setPaddingRelative(IIII)V
+HSPLandroid/widget/TextView;->setPrivateImeOptions(Ljava/lang/String;)V
+HSPLandroid/widget/TextView;->setRawInputType(I)V
+HSPLandroid/widget/TextView;->setRawTextSize(FZ)V
+HSPLandroid/widget/TextView;->setRelativeDrawablesIfNeeded(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/TextView;->setSelectAllOnFocus(Z)V
+HSPLandroid/widget/TextView;->setSelected(Z)V
+HSPLandroid/widget/TextView;->setShadowLayer(FFFI)V
+HSPLandroid/widget/TextView;->setShowSoftInputOnFocus(Z)V
+HSPLandroid/widget/TextView;->setSingleLine()V
+HSPLandroid/widget/TextView;->setSingleLine(Z)V
+HSPLandroid/widget/TextView;->setText(I)V
+HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
+HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;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;->setTextColor(I)V
+HSPLandroid/widget/TextView;->setTextColor(Landroid/content/res/ColorStateList;)V
+HSPLandroid/widget/TextView;->setTextIsSelectable(Z)V
+HSPLandroid/widget/TextView;->setTextSize(IF)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;II)V
+HSPLandroid/widget/TextView;->setupAutoSizeText()Z
+HSPLandroid/widget/TextView;->spanChange(Landroid/text/Spanned;Ljava/lang/Object;IIII)V
+HSPLandroid/widget/TextView;->startMarquee()V
+HSPLandroid/widget/TextView;->startStopMarquee(Z)V
+HSPLandroid/widget/TextView;->stopMarquee()V
+HSPLandroid/widget/TextView;->stopTextActionMode()V
+HSPLandroid/widget/TextView;->supportsAutoSizeText()Z
+HSPLandroid/widget/TextView;->textCanBeSelected()Z
+HSPLandroid/widget/TextView;->unregisterForPreDraw()V
+HSPLandroid/widget/TextView;->updateTextColors()V
+HSPLandroid/widget/TextView;->validateAndSetAutoSizeTextTypeUniformConfiguration(FFF)V
+HSPLandroid/widget/TextView;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
+HSPLandroid/widget/TextView;->viewportToContentHorizontalOffset()I
+HSPLandroid/widget/TextView;->viewportToContentVerticalOffset()I
+HSPLandroid/widget/ThemedSpinnerAdapter;->getDropDownViewTheme()Landroid/content/res/Resources$Theme;
+HSPLandroid/widget/ThemedSpinnerAdapter;->setDropDownViewTheme(Landroid/content/res/Resources$Theme;)V
+HSPLandroid/widget/Toast$TN$1;-><init>(Landroid/widget/Toast$TN;Landroid/os/Looper;Landroid/os/Handler$Callback;)V
+HSPLandroid/widget/Toast$TN;-><init>(Ljava/lang/String;Landroid/os/Looper;)V
+HSPLandroid/widget/Toast;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
+HSPLandroid/widget/Toast;->makeText(Landroid/content/Context;Landroid/os/Looper;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
+HSPLandroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
+HSPLandroid/widget/Toolbar$1;-><init>(Landroid/widget/Toolbar;)V
+HSPLandroid/widget/Toolbar$2;-><init>(Landroid/widget/Toolbar;)V
+HSPLandroid/widget/Toolbar$ExpandedActionViewMenuPresenter;-><init>(Landroid/widget/Toolbar;)V
+HSPLandroid/widget/Toolbar$ExpandedActionViewMenuPresenter;-><init>(Landroid/widget/Toolbar;Landroid/widget/Toolbar$ExpandedActionViewMenuPresenter;)V
+HSPLandroid/widget/Toolbar$ExpandedActionViewMenuPresenter;->flagActionItems()Z
+HSPLandroid/widget/Toolbar$ExpandedActionViewMenuPresenter;->initForMenu(Landroid/content/Context;Lcom/android/internal/view/menu/MenuBuilder;)V
+HSPLandroid/widget/Toolbar$ExpandedActionViewMenuPresenter;->updateMenuView(Z)V
+HSPLandroid/widget/Toolbar$LayoutParams;-><init>(II)V
+HSPLandroid/widget/Toolbar$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/Toolbar$OnMenuItemClickListener;->onMenuItemClick(Landroid/view/MenuItem;)Z
+HSPLandroid/widget/Toolbar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/Toolbar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroid/widget/Toolbar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/Toolbar;->addCustomViewsWithGravity(Ljava/util/List;I)V
+HSPLandroid/widget/Toolbar;->addSystemView(Landroid/view/View;Z)V
+HSPLandroid/widget/Toolbar;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
+HSPLandroid/widget/Toolbar;->ensureContentInsets()V
+HSPLandroid/widget/Toolbar;->ensureLogoView()V
+HSPLandroid/widget/Toolbar;->ensureMenu()V
+HSPLandroid/widget/Toolbar;->ensureMenuView()V
+HSPLandroid/widget/Toolbar;->ensureNavButtonView()V
+HSPLandroid/widget/Toolbar;->generateDefaultLayoutParams()Landroid/widget/Toolbar$LayoutParams;
+HSPLandroid/widget/Toolbar;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
+HSPLandroid/widget/Toolbar;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/Toolbar$LayoutParams;
+HSPLandroid/widget/Toolbar;->getChildHorizontalGravity(I)I
+HSPLandroid/widget/Toolbar;->getChildTop(Landroid/view/View;I)I
+HSPLandroid/widget/Toolbar;->getChildVerticalGravity(I)I
+HSPLandroid/widget/Toolbar;->getContentInsetEnd()I
+HSPLandroid/widget/Toolbar;->getContentInsetStart()I
+HSPLandroid/widget/Toolbar;->getCurrentContentInsetEnd()I
+HSPLandroid/widget/Toolbar;->getCurrentContentInsetLeft()I
+HSPLandroid/widget/Toolbar;->getCurrentContentInsetRight()I
+HSPLandroid/widget/Toolbar;->getCurrentContentInsetStart()I
+HSPLandroid/widget/Toolbar;->getHorizontalMargins(Landroid/view/View;)I
+HSPLandroid/widget/Toolbar;->getMenu()Landroid/view/Menu;
+HSPLandroid/widget/Toolbar;->getNavigationContentDescription()Ljava/lang/CharSequence;
+HSPLandroid/widget/Toolbar;->getNavigationIcon()Landroid/graphics/drawable/Drawable;
+HSPLandroid/widget/Toolbar;->getNavigationView()Landroid/view/View;
+HSPLandroid/widget/Toolbar;->getSubtitle()Ljava/lang/CharSequence;
+HSPLandroid/widget/Toolbar;->getTitle()Ljava/lang/CharSequence;
+HSPLandroid/widget/Toolbar;->getVerticalMargins(Landroid/view/View;)I
+HSPLandroid/widget/Toolbar;->getViewListMeasuredWidth(Ljava/util/List;[I)I
+HSPLandroid/widget/Toolbar;->getWrapper()Lcom/android/internal/widget/DecorToolbar;
+HSPLandroid/widget/Toolbar;->isChildOrHidden(Landroid/view/View;)Z
+HSPLandroid/widget/Toolbar;->layoutChildLeft(Landroid/view/View;I[II)I
+HSPLandroid/widget/Toolbar;->layoutChildRight(Landroid/view/View;I[II)I
+HSPLandroid/widget/Toolbar;->measureChildCollapseMargins(Landroid/view/View;IIII[I)I
+HSPLandroid/widget/Toolbar;->measureChildConstrained(Landroid/view/View;IIIII)V
+HSPLandroid/widget/Toolbar;->onAttachedToWindow()V
+HSPLandroid/widget/Toolbar;->onLayout(ZIIII)V
+HSPLandroid/widget/Toolbar;->onMeasure(II)V
+HSPLandroid/widget/Toolbar;->onRtlPropertiesChanged(I)V
+HSPLandroid/widget/Toolbar;->setCollapsible(Z)V
+HSPLandroid/widget/Toolbar;->setContentInsetsRelative(II)V
+HSPLandroid/widget/Toolbar;->setLogo(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/Toolbar;->setMenu(Lcom/android/internal/view/menu/MenuBuilder;Landroid/widget/ActionMenuPresenter;)V
+HSPLandroid/widget/Toolbar;->setMenuCallbacks(Lcom/android/internal/view/menu/MenuPresenter$Callback;Lcom/android/internal/view/menu/MenuBuilder$Callback;)V
+HSPLandroid/widget/Toolbar;->setNavigationContentDescription(I)V
+HSPLandroid/widget/Toolbar;->setNavigationContentDescription(Ljava/lang/CharSequence;)V
+HSPLandroid/widget/Toolbar;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/Toolbar;->setNavigationOnClickListener(Landroid/view/View$OnClickListener;)V
+HSPLandroid/widget/Toolbar;->setOnMenuItemClickListener(Landroid/widget/Toolbar$OnMenuItemClickListener;)V
+HSPLandroid/widget/Toolbar;->setPopupTheme(I)V
+HSPLandroid/widget/Toolbar;->setSubtitle(Ljava/lang/CharSequence;)V
+HSPLandroid/widget/Toolbar;->setSubtitleTextAppearance(Landroid/content/Context;I)V
+HSPLandroid/widget/Toolbar;->setTitle(Ljava/lang/CharSequence;)V
+HSPLandroid/widget/Toolbar;->setTitleTextAppearance(Landroid/content/Context;I)V
+HSPLandroid/widget/Toolbar;->shouldCollapse()Z
+HSPLandroid/widget/Toolbar;->shouldLayout(Landroid/view/View;)Z
+HSPLandroid/widget/WrapperListAdapter;->getWrappedAdapter()Landroid/widget/ListAdapter;
+HSPLcom/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet;->getCountryCodeSet()Ljava/util/Set;
+HSPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;-><init>(Ljava/lang/String;)V
+HSPLcom/android/i18n/phonenumbers/AsYouTypeFormatter;->getMetadataForRegion(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
+HSPLcom/android/i18n/phonenumbers/CountryCodeToRegionCodeMap;->getCountryCodeToRegionCodeMap()Ljava/util/Map;
+HSPLcom/android/i18n/phonenumbers/MetadataLoader;->loadMetadata(Ljava/lang/String;)Ljava/io/InputStream;
+HSPLcom/android/i18n/phonenumbers/MetadataManager$1;-><init>()V
+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/MetadataSource;->getMetadataForNonGeographicalRegion(I)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
+HSPLcom/android/i18n/phonenumbers/MetadataSource;->getMetadataForRegion(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
+HSPLcom/android/i18n/phonenumbers/MultiFileMetadataSourceImpl;-><init>(Lcom/android/i18n/phonenumbers/MetadataLoader;)V
+HSPLcom/android/i18n/phonenumbers/MultiFileMetadataSourceImpl;-><init>(Ljava/lang/String;Lcom/android/i18n/phonenumbers/MetadataLoader;)V
+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;->createExtnPattern(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->createInstance(Lcom/android/i18n/phonenumbers/MetadataLoader;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->createInstance(Lcom/android/i18n/phonenumbers/MetadataSource;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getAsYouTypeFormatter(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/AsYouTypeFormatter;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getCountryCodeForRegion(Ljava/lang/String;)I
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getCountryCodeForValidRegion(Ljava/lang/String;)I
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getInstance()Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getMetadataForRegion(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForCountryCode(I)Ljava/lang/String;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isValidRegionCode(Ljava/lang/String;)Z
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->setInstance(Lcom/android/i18n/phonenumbers/PhoneNumberUtil;)V
+HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;-><init>()V
+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
+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;
+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;
+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;->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;-><init>()V
+HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadataCollection;->getMetadataList()Ljava/util/List;
+HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadataCollection;->readExternal(Ljava/io/ObjectInput;)V
+HSPLcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;-><init>()V
+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/RegexCache$LRUCache$1;-><init>(Lcom/android/i18n/phonenumbers/RegexCache$LRUCache;IFZ)V
+HSPLcom/android/i18n/phonenumbers/RegexCache$LRUCache;-><init>(I)V
+HSPLcom/android/i18n/phonenumbers/RegexCache;-><init>(I)V
+HSPLcom/android/i18n/phonenumbers/ShortNumbersRegionCodeSet;->getRegionCodeSet()Ljava/util/Set;
+HSPLcom/android/ims/-$Lambda$AvFHcs3Z6Dq6dkOugMW9Kc7Qzng$1;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/ims/-$Lambda$AvFHcs3Z6Dq6dkOugMW9Kc7Qzng$2;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/ims/-$Lambda$AvFHcs3Z6Dq6dkOugMW9Kc7Qzng$3;->$m$1(Ljava/lang/Object;)V
+HSPLcom/android/ims/-$Lambda$AvFHcs3Z6Dq6dkOugMW9Kc7Qzng$3;-><init>(BLjava/lang/Object;)V
+HSPLcom/android/ims/-$Lambda$AvFHcs3Z6Dq6dkOugMW9Kc7Qzng$3;->accept(Ljava/lang/Object;)V
+HSPLcom/android/ims/ImsCall$Listener;-><init>()V
+HSPLcom/android/ims/ImsConfig;-><init>(Lcom/android/ims/internal/IImsConfig;Landroid/content/Context;)V
+HSPLcom/android/ims/ImsConfig;->setProvisionedValue(II)I
+HSPLcom/android/ims/ImsConfigListener$Stub;-><init>()V
+HSPLcom/android/ims/ImsConfigListener;->onGetFeatureResponse(IIII)V
+HSPLcom/android/ims/ImsConfigListener;->onGetVideoQuality(II)V
+HSPLcom/android/ims/ImsConfigListener;->onSetFeatureResponse(IIII)V
+HSPLcom/android/ims/ImsConfigListener;->onSetVideoQuality(I)V
+HSPLcom/android/ims/ImsConnectionStateListener;-><init>()V
+HSPLcom/android/ims/ImsEcbm$ImsEcbmListenerProxy;-><init>(Lcom/android/ims/ImsEcbm;Lcom/android/ims/ImsEcbmStateListener;)V
+HSPLcom/android/ims/ImsEcbm;-><init>(Lcom/android/ims/internal/IImsEcbm;)V
+HSPLcom/android/ims/ImsEcbm;->setEcbmStateListener(Lcom/android/ims/ImsEcbmStateListener;)V
+HSPLcom/android/ims/ImsEcbmStateListener;-><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/ImsExternalCallStateListener;-><init>()V
+HSPLcom/android/ims/ImsManager$ImsRegistrationListenerBase;-><init>(Lcom/android/ims/ImsManager;)V
+HSPLcom/android/ims/ImsManager$ImsRegistrationListenerBase;-><init>(Lcom/android/ims/ImsManager;Lcom/android/ims/ImsManager$ImsRegistrationListenerBase;)V
+HSPLcom/android/ims/ImsManager$ImsRegistrationListenerBase;->registrationDisconnected(Lcom/android/ims/ImsReasonInfo;)V
+HSPLcom/android/ims/ImsManager$ImsRegistrationListenerBase;->registrationFeatureCapabilityChanged(I[I[I)V
+HSPLcom/android/ims/ImsManager$ImsRegistrationListenerProxy;-><init>(Lcom/android/ims/ImsManager;)V
+HSPLcom/android/ims/ImsManager$ImsRegistrationListenerProxy;-><init>(Lcom/android/ims/ImsManager;Lcom/android/ims/ImsManager$ImsRegistrationListenerProxy;)V
+HSPLcom/android/ims/ImsManager$ImsRegistrationListenerProxy;->lambda$-com_android_ims_ImsManager$ImsRegistrationListenerProxy_96187(Lcom/android/ims/ImsReasonInfo;Lcom/android/ims/ImsConnectionStateListener;)V
+HSPLcom/android/ims/ImsManager$ImsRegistrationListenerProxy;->registrationDisconnected(Lcom/android/ims/ImsReasonInfo;)V
+HSPLcom/android/ims/ImsManager$ImsServiceDeathRecipient;-><init>(Lcom/android/ims/ImsManager;)V
+HSPLcom/android/ims/ImsManager$ImsServiceDeathRecipient;-><init>(Lcom/android/ims/ImsManager;Lcom/android/ims/ImsManager$ImsServiceDeathRecipient;)V
+HSPLcom/android/ims/ImsManager;->-get1(Lcom/android/ims/ImsManager;)Ljava/util/Set;
+HSPLcom/android/ims/ImsManager;->-wrap3(Lcom/android/ims/ImsManager;Lcom/android/ims/ImsReasonInfo;)V
+HSPLcom/android/ims/ImsManager;->-wrap4(Ljava/lang/String;)V
+HSPLcom/android/ims/ImsManager;-><init>(Landroid/content/Context;I)V
+HSPLcom/android/ims/ImsManager;->addNotifyStatusChangedCallbackIfAvailable(Landroid/telephony/ims/ImsServiceProxy$INotifyStatusChanged;)V
+HSPLcom/android/ims/ImsManager;->addRegistrationListener(Lcom/android/ims/ImsConnectionStateListener;)V
+HSPLcom/android/ims/ImsManager;->addToRecentDisconnectReasons(Lcom/android/ims/ImsReasonInfo;)V
+HSPLcom/android/ims/ImsManager;->checkAndThrowExceptionIfServiceUnavailable()V
+HSPLcom/android/ims/ImsManager;->connectIfServiceIsAvailable()V
+HSPLcom/android/ims/ImsManager;->createImsService()V
+HSPLcom/android/ims/ImsManager;->getBooleanCarrierConfig(Landroid/content/Context;Ljava/lang/String;)Z
+HSPLcom/android/ims/ImsManager;->getConfigInterface()Lcom/android/ims/ImsConfig;
+HSPLcom/android/ims/ImsManager;->getEcbmInterface(I)Lcom/android/ims/ImsEcbm;
+HSPLcom/android/ims/ImsManager;->getImsServiceStatus()I
+HSPLcom/android/ims/ImsManager;->getInstance(Landroid/content/Context;I)Lcom/android/ims/ImsManager;
+HSPLcom/android/ims/ImsManager;->getMultiEndpointInterface(I)Lcom/android/ims/ImsMultiEndpoint;
+HSPLcom/android/ims/ImsManager;->getServiceProxy()Landroid/telephony/ims/ImsServiceProxy;
+HSPLcom/android/ims/ImsManager;->isDynamicBinding()Z
+HSPLcom/android/ims/ImsManager;->isServiceAvailable()Z
+HSPLcom/android/ims/ImsManager;->isVtEnabledByPlatform(Landroid/content/Context;)Z
+HSPLcom/android/ims/ImsManager;->isVtEnabledByUser(Landroid/content/Context;)Z
+HSPLcom/android/ims/ImsManager;->isWfcEnabledByUser(Landroid/content/Context;)Z
+HSPLcom/android/ims/ImsManager;->log(Ljava/lang/String;)V
+HSPLcom/android/ims/ImsManager;->open(ILandroid/app/PendingIntent;Lcom/android/ims/ImsConnectionStateListener;)I
+HSPLcom/android/ims/ImsManager;->setDataEnabled(Z)V
+HSPLcom/android/ims/ImsManager;->setImsConfigListener(Lcom/android/ims/ImsConfigListener;)V
+HSPLcom/android/ims/ImsManager;->setUiTTYMode(Landroid/content/Context;ILandroid/os/Message;)V
+HSPLcom/android/ims/ImsMultiEndpoint$ImsExternalCallStateListenerProxy;-><init>(Lcom/android/ims/ImsMultiEndpoint;Lcom/android/ims/ImsExternalCallStateListener;)V
+HSPLcom/android/ims/ImsMultiEndpoint;-><init>(Lcom/android/ims/internal/IImsMultiEndpoint;)V
+HSPLcom/android/ims/ImsMultiEndpoint;->setExternalCallStateListener(Lcom/android/ims/ImsExternalCallStateListener;)V
+HSPLcom/android/ims/ImsReasonInfo$1;-><init>()V
+HSPLcom/android/ims/ImsReasonInfo;-><init>(IILjava/lang/String;)V
+HSPLcom/android/ims/ImsReasonInfo;->getCode()I
+HSPLcom/android/ims/ImsReasonInfo;->getExtraCode()I
+HSPLcom/android/ims/ImsReasonInfo;->getExtraMessage()Ljava/lang/String;
+HSPLcom/android/ims/ImsReasonInfo;->toString()Ljava/lang/String;
+HSPLcom/android/ims/ImsReasonInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLcom/android/ims/internal/IImsConfig$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/ims/internal/IImsConfig$Stub$Proxy;->setProvisionedValue(II)I
+HSPLcom/android/ims/internal/IImsConfig$Stub;-><init>()V
+HSPLcom/android/ims/internal/IImsConfig$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/IImsConfig;
+HSPLcom/android/ims/internal/IImsConfig;->getFeatureValue(IILcom/android/ims/ImsConfigListener;)V
+HSPLcom/android/ims/internal/IImsConfig;->getProvisionedStringValue(I)Ljava/lang/String;
+HSPLcom/android/ims/internal/IImsConfig;->getProvisionedValue(I)I
+HSPLcom/android/ims/internal/IImsConfig;->getVideoQuality(Lcom/android/ims/ImsConfigListener;)V
+HSPLcom/android/ims/internal/IImsConfig;->getVolteProvisioned()Z
+HSPLcom/android/ims/internal/IImsConfig;->setFeatureValue(IIILcom/android/ims/ImsConfigListener;)V
+HSPLcom/android/ims/internal/IImsConfig;->setProvisionedStringValue(ILjava/lang/String;)I
+HSPLcom/android/ims/internal/IImsConfig;->setProvisionedValue(II)I
+HSPLcom/android/ims/internal/IImsConfig;->setVideoQuality(ILcom/android/ims/ImsConfigListener;)V
+HSPLcom/android/ims/internal/IImsEcbm$Stub;-><init>()V
+HSPLcom/android/ims/internal/IImsEcbmListener$Stub;-><init>()V
+HSPLcom/android/ims/internal/IImsEcbmListener;->enteredECBM()V
+HSPLcom/android/ims/internal/IImsEcbmListener;->exitedECBM()V
+HSPLcom/android/ims/internal/IImsExternalCallStateListener$Stub;-><init>()V
+HSPLcom/android/ims/internal/IImsExternalCallStateListener;->onImsExternalCallStateUpdate(Ljava/util/List;)V
+HSPLcom/android/ims/internal/IImsFeatureStatusCallback$Stub;-><init>()V
+HSPLcom/android/ims/internal/IImsFeatureStatusCallback;->notifyImsFeatureStatus(I)V
+HSPLcom/android/ims/internal/IImsMultiEndpoint$Stub;-><init>()V
+HSPLcom/android/ims/internal/IImsRegistrationListener$Stub;-><init>()V
+HSPLcom/android/ims/internal/IImsRegistrationListener;->registrationAssociatedUriChanged([Landroid/net/Uri;)V
+HSPLcom/android/ims/internal/IImsRegistrationListener;->registrationChangeFailed(ILcom/android/ims/ImsReasonInfo;)V
+HSPLcom/android/ims/internal/IImsRegistrationListener;->registrationConnected()V
+HSPLcom/android/ims/internal/IImsRegistrationListener;->registrationConnectedWithRadioTech(I)V
+HSPLcom/android/ims/internal/IImsRegistrationListener;->registrationDisconnected(Lcom/android/ims/ImsReasonInfo;)V
+HSPLcom/android/ims/internal/IImsRegistrationListener;->registrationFeatureCapabilityChanged(I[I[I)V
+HSPLcom/android/ims/internal/IImsRegistrationListener;->registrationProgressing()V
+HSPLcom/android/ims/internal/IImsRegistrationListener;->registrationProgressingWithRadioTech(I)V
+HSPLcom/android/ims/internal/IImsRegistrationListener;->registrationResumed()V
+HSPLcom/android/ims/internal/IImsRegistrationListener;->registrationServiceCapabilityChanged(II)V
+HSPLcom/android/ims/internal/IImsRegistrationListener;->registrationSuspended()V
+HSPLcom/android/ims/internal/IImsRegistrationListener;->voiceMessageCountUpdate(I)V
+HSPLcom/android/ims/internal/IImsServiceController$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/ims/internal/IImsServiceController$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/ims/internal/IImsServiceController$Stub$Proxy;->getConfigInterface(II)Lcom/android/ims/internal/IImsConfig;
+HSPLcom/android/ims/internal/IImsServiceController$Stub$Proxy;->getFeatureStatus(II)I
+HSPLcom/android/ims/internal/IImsServiceController$Stub;-><init>()V
+HSPLcom/android/ims/internal/IImsServiceController$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/ims/internal/IImsServiceController$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/IImsServiceController;
+HSPLcom/android/ims/internal/IImsServiceController;->addRegistrationListener(IILcom/android/ims/internal/IImsRegistrationListener;)V
+HSPLcom/android/ims/internal/IImsServiceController;->createCallProfile(IIIII)Lcom/android/ims/ImsCallProfile;
+HSPLcom/android/ims/internal/IImsServiceController;->createCallSession(IIILcom/android/ims/ImsCallProfile;Lcom/android/ims/internal/IImsCallSessionListener;)Lcom/android/ims/internal/IImsCallSession;
+HSPLcom/android/ims/internal/IImsServiceController;->createImsFeature(IILcom/android/ims/internal/IImsFeatureStatusCallback;)V
+HSPLcom/android/ims/internal/IImsServiceController;->endSession(III)V
+HSPLcom/android/ims/internal/IImsServiceController;->getConfigInterface(II)Lcom/android/ims/internal/IImsConfig;
+HSPLcom/android/ims/internal/IImsServiceController;->getEcbmInterface(II)Lcom/android/ims/internal/IImsEcbm;
+HSPLcom/android/ims/internal/IImsServiceController;->getFeatureStatus(II)I
+HSPLcom/android/ims/internal/IImsServiceController;->getMultiEndpointInterface(II)Lcom/android/ims/internal/IImsMultiEndpoint;
+HSPLcom/android/ims/internal/IImsServiceController;->getPendingCallSession(IIILjava/lang/String;)Lcom/android/ims/internal/IImsCallSession;
+HSPLcom/android/ims/internal/IImsServiceController;->getUtInterface(II)Lcom/android/ims/internal/IImsUt;
+HSPLcom/android/ims/internal/IImsServiceController;->isConnected(IIII)Z
+HSPLcom/android/ims/internal/IImsServiceController;->isOpened(II)Z
+HSPLcom/android/ims/internal/IImsServiceController;->removeImsFeature(IILcom/android/ims/internal/IImsFeatureStatusCallback;)V
+HSPLcom/android/ims/internal/IImsServiceController;->removeRegistrationListener(IILcom/android/ims/internal/IImsRegistrationListener;)V
+HSPLcom/android/ims/internal/IImsServiceController;->setUiTTYMode(IIILandroid/os/Message;)V
+HSPLcom/android/ims/internal/IImsServiceController;->startSession(IILandroid/app/PendingIntent;Lcom/android/ims/internal/IImsRegistrationListener;)I
+HSPLcom/android/ims/internal/IImsServiceController;->turnOffIms(II)V
+HSPLcom/android/ims/internal/IImsServiceController;->turnOnIms(II)V
+HSPLcom/android/ims/internal/IImsServiceFeatureListener$Stub;-><init>()V
+HSPLcom/android/ims/internal/IImsServiceFeatureListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/ims/internal/IImsServiceFeatureListener;->imsFeatureCreated(II)V
+HSPLcom/android/ims/internal/IImsServiceFeatureListener;->imsFeatureRemoved(II)V
+HSPLcom/android/ims/internal/IImsServiceFeatureListener;->imsStatusChanged(III)V
+HSPLcom/android/ims/internal/IImsUt$Stub;-><init>()V
+HSPLcom/android/ims/internal/IImsUtListener$Stub;-><init>()V
+HSPLcom/android/ims/internal/uce/common/UceLong$1;-><init>()V
+HSPLcom/android/ims/internal/uce/common/UceLong;-><init>()V
+HSPLcom/android/ims/internal/uce/presence/IPresenceListener$Stub;-><init>()V
+HSPLcom/android/ims/internal/uce/presence/IPresenceListener;->capInfoReceived(Ljava/lang/String;[Lcom/android/ims/internal/uce/presence/PresTupleInfo;)V
+HSPLcom/android/ims/internal/uce/presence/IPresenceListener;->cmdStatus(Lcom/android/ims/internal/uce/presence/PresCmdStatus;)V
+HSPLcom/android/ims/internal/uce/presence/IPresenceListener;->getVersionCb(Ljava/lang/String;)V
+HSPLcom/android/ims/internal/uce/presence/IPresenceListener;->listCapInfoReceived(Lcom/android/ims/internal/uce/presence/PresRlmiInfo;[Lcom/android/ims/internal/uce/presence/PresResInfo;)V
+HSPLcom/android/ims/internal/uce/presence/IPresenceListener;->publishTriggering(Lcom/android/ims/internal/uce/presence/PresPublishTriggerType;)V
+HSPLcom/android/ims/internal/uce/presence/IPresenceListener;->serviceAvailable(Lcom/android/ims/internal/uce/common/StatusCode;)V
+HSPLcom/android/ims/internal/uce/presence/IPresenceListener;->serviceUnAvailable(Lcom/android/ims/internal/uce/common/StatusCode;)V
+HSPLcom/android/ims/internal/uce/presence/IPresenceListener;->sipResponseReceived(Lcom/android/ims/internal/uce/presence/PresSipResponse;)V
+HSPLcom/android/ims/internal/uce/presence/IPresenceListener;->unpublishMessageSent()V
+HSPLcom/android/ims/internal/uce/uceservice/IUceService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/uce/uceservice/IUceService;
+HSPLcom/android/ims/internal/uce/uceservice/ImsUceManager$UceServiceDeathRecipient;-><init>(Lcom/android/ims/internal/uce/uceservice/ImsUceManager;)V
+HSPLcom/android/ims/internal/uce/uceservice/ImsUceManager$UceServiceDeathRecipient;-><init>(Lcom/android/ims/internal/uce/uceservice/ImsUceManager;Lcom/android/ims/internal/uce/uceservice/ImsUceManager$UceServiceDeathRecipient;)V
+HSPLcom/android/ims/internal/uce/uceservice/ImsUceManager;-><init>(Landroid/content/Context;I)V
+HSPLcom/android/ims/internal/uce/uceservice/ImsUceManager;->createUceService(Z)V
+HSPLcom/android/ims/internal/uce/uceservice/ImsUceManager;->getInstance(Landroid/content/Context;I)Lcom/android/ims/internal/uce/uceservice/ImsUceManager;
+HSPLcom/android/ims/internal/uce/uceservice/ImsUceManager;->getUceServiceInstance()Lcom/android/ims/internal/uce/uceservice/IUceService;
+HSPLcom/android/ims/internal/uce/uceservice/ImsUceManager;->getUceServiceName(I)Ljava/lang/String;
+HSPLcom/android/internal/app/AlertController$1;-><init>(Lcom/android/internal/app/AlertController;)V
+HSPLcom/android/internal/app/AlertController$AlertParams;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/app/AlertController$AlertParams;->apply(Lcom/android/internal/app/AlertController;)V
+HSPLcom/android/internal/app/AlertController$ButtonHandler;-><init>(Landroid/content/DialogInterface;)V
+HSPLcom/android/internal/app/AlertController;-><init>(Landroid/content/Context;Landroid/content/DialogInterface;Landroid/view/Window;)V
+HSPLcom/android/internal/app/AlertController;->create(Landroid/content/Context;Landroid/content/DialogInterface;Landroid/view/Window;)Lcom/android/internal/app/AlertController;
+HSPLcom/android/internal/app/AlertController;->setButton(ILjava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;Landroid/os/Message;)V
+HSPLcom/android/internal/app/AlertController;->setMessage(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/app/AlertController;->setTitle(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/app/AssistUtils;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/app/AssistUtils;->activeServiceSupportsAssistGesture()Z
+HSPLcom/android/internal/app/AssistUtils;->activeServiceSupportsLaunchFromKeyguard()Z
+HSPLcom/android/internal/app/AssistUtils;->getAssistComponentForUser(I)Landroid/content/ComponentName;
+HSPLcom/android/internal/app/AssistUtils;->registerVoiceInteractionSessionListener(Lcom/android/internal/app/IVoiceInteractionSessionListener;)V
+HSPLcom/android/internal/app/IAppOpsCallback$Stub;-><init>()V
+HSPLcom/android/internal/app/IAppOpsCallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/internal/app/IAppOpsCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/internal/app/IAppOpsCallback;->opChanged(IILjava/lang/String;)V
+HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkAudioOperation(IIILjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkOperation(IILjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkPackage(ILjava/lang/String;)I
+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;->noteOperation(IILjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->noteProxyOperation(ILjava/lang/String;ILjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->startOperation(Landroid/os/IBinder;IILjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->startWatchingMode(ILjava/lang/String;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;
+HSPLcom/android/internal/app/IAppOpsService;->checkAudioOperation(IIILjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService;->checkOperation(IILjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService;->checkPackage(ILjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;)V
+HSPLcom/android/internal/app/IAppOpsService;->getOpsForPackage(ILjava/lang/String;[I)Ljava/util/List;
+HSPLcom/android/internal/app/IAppOpsService;->getPackagesForOps([I)Ljava/util/List;
+HSPLcom/android/internal/app/IAppOpsService;->getToken(Landroid/os/IBinder;)Landroid/os/IBinder;
+HSPLcom/android/internal/app/IAppOpsService;->getUidOps(I[I)Ljava/util/List;
+HSPLcom/android/internal/app/IAppOpsService;->isOperationActive(IILjava/lang/String;)Z
+HSPLcom/android/internal/app/IAppOpsService;->noteOperation(IILjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService;->noteProxyOperation(ILjava/lang/String;ILjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService;->permissionToOpCode(Ljava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService;->removeUser(I)V
+HSPLcom/android/internal/app/IAppOpsService;->resetAllModes(ILjava/lang/String;)V
+HSPLcom/android/internal/app/IAppOpsService;->setAudioRestriction(IIII[Ljava/lang/String;)V
+HSPLcom/android/internal/app/IAppOpsService;->setMode(IILjava/lang/String;I)V
+HSPLcom/android/internal/app/IAppOpsService;->setUidMode(III)V
+HSPLcom/android/internal/app/IAppOpsService;->setUserRestriction(IZLandroid/os/IBinder;I[Ljava/lang/String;)V
+HSPLcom/android/internal/app/IAppOpsService;->setUserRestrictions(Landroid/os/Bundle;Landroid/os/IBinder;I)V
+HSPLcom/android/internal/app/IAppOpsService;->startOperation(Landroid/os/IBinder;IILjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService;->startWatchingMode(ILjava/lang/String;Lcom/android/internal/app/IAppOpsCallback;)V
+HSPLcom/android/internal/app/IAppOpsService;->stopWatchingMode(Lcom/android/internal/app/IAppOpsCallback;)V
+HSPLcom/android/internal/app/IBatteryStats$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->getStatistics()[B
+HSPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->getStatisticsStream()Landroid/os/ParcelFileDescriptor;
+HSPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->isCharging()Z
+HSPLcom/android/internal/app/IBatteryStats$Stub$Proxy;->noteResetBleScan()V
+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;
+HSPLcom/android/internal/app/IBatteryStats;->computeBatteryTimeRemaining()J
+HSPLcom/android/internal/app/IBatteryStats;->computeChargeTimeRemaining()J
+HSPLcom/android/internal/app/IBatteryStats;->getAwakeTimeBattery()J
+HSPLcom/android/internal/app/IBatteryStats;->getAwakeTimePlugged()J
+HSPLcom/android/internal/app/IBatteryStats;->getStatistics()[B
+HSPLcom/android/internal/app/IBatteryStats;->getStatisticsStream()Landroid/os/ParcelFileDescriptor;
+HSPLcom/android/internal/app/IBatteryStats;->isCharging()Z
+HSPLcom/android/internal/app/IBatteryStats;->noteBleScanResults(Landroid/os/WorkSource;I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteBleScanStarted(Landroid/os/WorkSource;Z)V
+HSPLcom/android/internal/app/IBatteryStats;->noteBleScanStopped(Landroid/os/WorkSource;Z)V
+HSPLcom/android/internal/app/IBatteryStats;->noteBluetoothControllerActivity(Landroid/bluetooth/BluetoothActivityEnergyInfo;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteChangeWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;ILandroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZ)V
+HSPLcom/android/internal/app/IBatteryStats;->noteConnectivityChanged(ILjava/lang/String;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteDeviceIdleMode(ILjava/lang/String;I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteEvent(ILjava/lang/String;I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteFlashlightOff(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteFlashlightOn(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteFullWifiLockAcquired(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteFullWifiLockAcquiredFromSource(Landroid/os/WorkSource;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteFullWifiLockReleased(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteFullWifiLockReleasedFromSource(Landroid/os/WorkSource;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteInteractive(Z)V
+HSPLcom/android/internal/app/IBatteryStats;->noteJobFinish(Ljava/lang/String;II)V
+HSPLcom/android/internal/app/IBatteryStats;->noteJobStart(Ljava/lang/String;I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteLongPartialWakelockFinish(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteLongPartialWakelockStart(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteMobileRadioPowerState(IJI)V
+HSPLcom/android/internal/app/IBatteryStats;->noteModemControllerActivity(Landroid/telephony/ModemActivityInfo;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteNetworkInterfaceType(Ljava/lang/String;I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteNetworkStatsEnabled()V
+HSPLcom/android/internal/app/IBatteryStats;->notePhoneDataConnectionState(IZ)V
+HSPLcom/android/internal/app/IBatteryStats;->notePhoneOff()V
+HSPLcom/android/internal/app/IBatteryStats;->notePhoneOn()V
+HSPLcom/android/internal/app/IBatteryStats;->notePhoneSignalStrength(Landroid/telephony/SignalStrength;)V
+HSPLcom/android/internal/app/IBatteryStats;->notePhoneState(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteResetAudio()V
+HSPLcom/android/internal/app/IBatteryStats;->noteResetBleScan()V
+HSPLcom/android/internal/app/IBatteryStats;->noteResetCamera()V
+HSPLcom/android/internal/app/IBatteryStats;->noteResetFlashlight()V
+HSPLcom/android/internal/app/IBatteryStats;->noteResetVideo()V
+HSPLcom/android/internal/app/IBatteryStats;->noteScreenBrightness(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteScreenState(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStartAudio(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStartCamera(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStartGps(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStartSensor(II)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStartVideo(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStartWakelock(IILjava/lang/String;Ljava/lang/String;IZ)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStartWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZ)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStopAudio(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStopCamera(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStopGps(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStopSensor(II)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStopVideo(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStopWakelock(IILjava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteStopWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteSyncFinish(Ljava/lang/String;I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteSyncStart(Ljava/lang/String;I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteUserActivity(II)V
+HSPLcom/android/internal/app/IBatteryStats;->noteVibratorOff(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteVibratorOn(IJ)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWakeUp(Ljava/lang/String;I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiBatchedScanStartedFromSource(Landroid/os/WorkSource;I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiBatchedScanStoppedFromSource(Landroid/os/WorkSource;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiControllerActivity(Landroid/net/wifi/WifiActivityEnergyInfo;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiMulticastDisabled(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiMulticastDisabledFromSource(Landroid/os/WorkSource;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiMulticastEnabled(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiMulticastEnabledFromSource(Landroid/os/WorkSource;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiOff()V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiOn()V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiRadioPowerState(IJI)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiRssiChanged(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiRunning(Landroid/os/WorkSource;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiRunningChanged(Landroid/os/WorkSource;Landroid/os/WorkSource;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiScanStarted(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiScanStartedFromSource(Landroid/os/WorkSource;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiScanStopped(I)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiScanStoppedFromSource(Landroid/os/WorkSource;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiState(ILjava/lang/String;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiStopped(Landroid/os/WorkSource;)V
+HSPLcom/android/internal/app/IBatteryStats;->noteWifiSupplicantStateChanged(IZ)V
+HSPLcom/android/internal/app/IBatteryStats;->setBatteryState(IIIIIIII)V
+HSPLcom/android/internal/app/IBatteryStats;->takeUidSnapshot(I)Landroid/os/health/HealthStatsParceler;
+HSPLcom/android/internal/app/IBatteryStats;->takeUidSnapshots([I)[Landroid/os/health/HealthStatsParceler;
+HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->activeServiceSupportsAssist()Z
+HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->activeServiceSupportsLaunchFromKeyguard()Z
+HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->getDspModuleProperties(Landroid/service/voice/IVoiceInteractionService;)Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
+HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->isEnrolledForKeyphrase(Landroid/service/voice/IVoiceInteractionService;ILjava/lang/String;)Z
+HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->registerVoiceInteractionSessionListener(Lcom/android/internal/app/IVoiceInteractionSessionListener;)V
+HSPLcom/android/internal/app/IVoiceInteractionManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractionManagerService;
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->activeServiceSupportsAssist()Z
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->activeServiceSupportsLaunchFromKeyguard()Z
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->closeSystemDialogs(Landroid/os/IBinder;)V
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->deleteKeyphraseSoundModel(ILjava/lang/String;)I
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->deliverNewSession(Landroid/os/IBinder;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;)Z
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->finish(Landroid/os/IBinder;)V
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->getActiveServiceComponentName()Landroid/content/ComponentName;
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->getDisabledShowContext()I
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->getDspModuleProperties(Landroid/service/voice/IVoiceInteractionService;)Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->getKeyphraseSoundModel(ILjava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->getUserDisabledShowContext()I
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->hideCurrentSession()V
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->hideSessionFromSession(Landroid/os/IBinder;)Z
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->isEnrolledForKeyphrase(Landroid/service/voice/IVoiceInteractionService;ILjava/lang/String;)Z
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->isSessionRunning()Z
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->launchVoiceAssistFromKeyguard()V
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->onLockscreenShown()V
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->registerVoiceInteractionSessionListener(Lcom/android/internal/app/IVoiceInteractionSessionListener;)V
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->setDisabledShowContext(I)V
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->setKeepAwake(Landroid/os/IBinder;Z)V
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->showSession(Landroid/service/voice/IVoiceInteractionService;Landroid/os/Bundle;I)V
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->showSessionForActiveService(Landroid/os/Bundle;ILcom/android/internal/app/IVoiceInteractionSessionShowCallback;Landroid/os/IBinder;)Z
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->showSessionFromSession(Landroid/os/IBinder;Landroid/os/Bundle;I)Z
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->startAssistantActivity(Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;)I
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->startRecognition(Landroid/service/voice/IVoiceInteractionService;ILjava/lang/String;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->startVoiceActivity(Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;)I
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->stopRecognition(Landroid/service/voice/IVoiceInteractionService;ILandroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
+HSPLcom/android/internal/app/IVoiceInteractionManagerService;->updateKeyphraseSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;)I
+HSPLcom/android/internal/app/IVoiceInteractionSessionListener$Stub;-><init>()V
+HSPLcom/android/internal/app/IVoiceInteractionSessionListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/internal/app/IVoiceInteractionSessionListener;->onVoiceSessionHidden()V
+HSPLcom/android/internal/app/IVoiceInteractionSessionListener;->onVoiceSessionShown()V
+HSPLcom/android/internal/app/IVoiceInteractionSessionShowCallback$Stub;-><init>()V
+HSPLcom/android/internal/app/IVoiceInteractionSessionShowCallback;->onFailed()V
+HSPLcom/android/internal/app/IVoiceInteractionSessionShowCallback;->onShown()V
+HSPLcom/android/internal/app/IVoiceInteractor$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractor;
+HSPLcom/android/internal/app/NightDisplayController$1;-><init>(Lcom/android/internal/app/NightDisplayController;Landroid/os/Handler;)V
+HSPLcom/android/internal/app/NightDisplayController;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/app/NightDisplayController;-><init>(Landroid/content/Context;I)V
+HSPLcom/android/internal/app/NightDisplayController;->isActivated()Z
+HSPLcom/android/internal/app/NightDisplayController;->isAvailable(Landroid/content/Context;)Z
+HSPLcom/android/internal/app/NightDisplayController;->setListener(Lcom/android/internal/app/NightDisplayController$Callback;)V
+HSPLcom/android/internal/app/ProcessMap;-><init>()V
+HSPLcom/android/internal/app/ProcessMap;->getMap()Landroid/util/ArrayMap;
+HSPLcom/android/internal/app/ToolbarActionBar$1;-><init>(Lcom/android/internal/app/ToolbarActionBar;)V
+HSPLcom/android/internal/app/ToolbarActionBar$1;->run()V
+HSPLcom/android/internal/app/ToolbarActionBar$2;-><init>(Lcom/android/internal/app/ToolbarActionBar;)V
+HSPLcom/android/internal/app/ToolbarActionBar$ActionMenuPresenterCallback;-><init>(Lcom/android/internal/app/ToolbarActionBar;)V
+HSPLcom/android/internal/app/ToolbarActionBar$ActionMenuPresenterCallback;-><init>(Lcom/android/internal/app/ToolbarActionBar;Lcom/android/internal/app/ToolbarActionBar$ActionMenuPresenterCallback;)V
+HSPLcom/android/internal/app/ToolbarActionBar$MenuBuilderCallback;-><init>(Lcom/android/internal/app/ToolbarActionBar;)V
+HSPLcom/android/internal/app/ToolbarActionBar$MenuBuilderCallback;-><init>(Lcom/android/internal/app/ToolbarActionBar;Lcom/android/internal/app/ToolbarActionBar$MenuBuilderCallback;)V
+HSPLcom/android/internal/app/ToolbarActionBar$ToolbarCallbackWrapper;-><init>(Lcom/android/internal/app/ToolbarActionBar;Landroid/view/Window$Callback;)V
+HSPLcom/android/internal/app/ToolbarActionBar$ToolbarCallbackWrapper;->onPreparePanel(ILandroid/view/View;Landroid/view/Menu;)Z
+HSPLcom/android/internal/app/ToolbarActionBar;->-get0(Lcom/android/internal/app/ToolbarActionBar;)Lcom/android/internal/widget/DecorToolbar;
+HSPLcom/android/internal/app/ToolbarActionBar;->-get1(Lcom/android/internal/app/ToolbarActionBar;)Z
+HSPLcom/android/internal/app/ToolbarActionBar;->-set0(Lcom/android/internal/app/ToolbarActionBar;Z)Z
+HSPLcom/android/internal/app/ToolbarActionBar;-><init>(Landroid/widget/Toolbar;Ljava/lang/CharSequence;Landroid/view/Window$Callback;)V
+HSPLcom/android/internal/app/ToolbarActionBar;->getThemedContext()Landroid/content/Context;
+HSPLcom/android/internal/app/ToolbarActionBar;->getWrappedWindowCallback()Landroid/view/Window$Callback;
+HSPLcom/android/internal/app/ToolbarActionBar;->invalidateOptionsMenu()Z
+HSPLcom/android/internal/app/ToolbarActionBar;->onDestroy()V
+HSPLcom/android/internal/app/ToolbarActionBar;->populateOptionsMenu()V
+HSPLcom/android/internal/app/ToolbarActionBar;->setDisplayHomeAsUpEnabled(Z)V
+HSPLcom/android/internal/app/ToolbarActionBar;->setDisplayOptions(I)V
+HSPLcom/android/internal/app/ToolbarActionBar;->setDisplayOptions(II)V
+HSPLcom/android/internal/app/ToolbarActionBar;->setHomeButtonEnabled(Z)V
+HSPLcom/android/internal/app/ToolbarActionBar;->setShowHideAnimationEnabled(Z)V
+HSPLcom/android/internal/app/ToolbarActionBar;->setWindowTitle(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/app/WindowDecorActionBar$1;-><init>(Lcom/android/internal/app/WindowDecorActionBar;)V
+HSPLcom/android/internal/app/WindowDecorActionBar$1;->onAnimationEnd(Landroid/animation/Animator;)V
+HSPLcom/android/internal/app/WindowDecorActionBar$2;-><init>(Lcom/android/internal/app/WindowDecorActionBar;)V
+HSPLcom/android/internal/app/WindowDecorActionBar$3;-><init>(Lcom/android/internal/app/WindowDecorActionBar;)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->-get0(Lcom/android/internal/app/WindowDecorActionBar;)Lcom/android/internal/widget/ActionBarContainer;
+HSPLcom/android/internal/app/WindowDecorActionBar;->-get1(Lcom/android/internal/app/WindowDecorActionBar;)Z
+HSPLcom/android/internal/app/WindowDecorActionBar;->-get10(Lcom/android/internal/app/WindowDecorActionBar;)Lcom/android/internal/widget/ActionBarContainer;
+HSPLcom/android/internal/app/WindowDecorActionBar;->-get2(Lcom/android/internal/app/WindowDecorActionBar;)Landroid/view/View;
+HSPLcom/android/internal/app/WindowDecorActionBar;->-get9(Lcom/android/internal/app/WindowDecorActionBar;)Lcom/android/internal/widget/ActionBarOverlayLayout;
+HSPLcom/android/internal/app/WindowDecorActionBar;->-set0(Lcom/android/internal/app/WindowDecorActionBar;Landroid/animation/Animator;)Landroid/animation/Animator;
+HSPLcom/android/internal/app/WindowDecorActionBar;-><init>(Landroid/app/Activity;)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->checkShowingFlags(ZZZ)Z
+HSPLcom/android/internal/app/WindowDecorActionBar;->completeDeferredDestroyActionMode()V
+HSPLcom/android/internal/app/WindowDecorActionBar;->doHide(Z)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->enableContentAnimations(Z)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->getDecorToolbar(Landroid/view/View;)Lcom/android/internal/widget/DecorToolbar;
+HSPLcom/android/internal/app/WindowDecorActionBar;->getNavigationMode()I
+HSPLcom/android/internal/app/WindowDecorActionBar;->getThemedContext()Landroid/content/Context;
+HSPLcom/android/internal/app/WindowDecorActionBar;->hide()V
+HSPLcom/android/internal/app/WindowDecorActionBar;->hideForSystem()V
+HSPLcom/android/internal/app/WindowDecorActionBar;->init(Landroid/view/View;)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->onWindowVisibilityChanged(I)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->setDefaultDisplayHomeAsUpEnabled(Z)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->setDisplayHomeAsUpEnabled(Z)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->setDisplayOptions(II)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->setDisplayShowHomeEnabled(Z)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->setElevation(F)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->setHasEmbeddedTabs(Z)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->setHomeButtonEnabled(Z)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->setShowHideAnimationEnabled(Z)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->setWindowTitle(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/app/WindowDecorActionBar;->showForSystem()V
+HSPLcom/android/internal/app/WindowDecorActionBar;->updateVisibility(Z)V
+HSPLcom/android/internal/app/procstats/IProcessStats$Stub;-><init>()V
+HSPLcom/android/internal/app/procstats/IProcessStats;->getCurrentMemoryState()I
+HSPLcom/android/internal/app/procstats/IProcessStats;->getCurrentStats(Ljava/util/List;)[B
+HSPLcom/android/internal/app/procstats/IProcessStats;->getStatsOverTime(J)Landroid/os/ParcelFileDescriptor;
+HSPLcom/android/internal/app/procstats/ProcessStats$1;-><init>()V
+HSPLcom/android/internal/app/procstats/ProcessStats;-><init>(Z)V
+HSPLcom/android/internal/app/procstats/ProcessStats;->buildTimePeriodStartClockStr()V
+HSPLcom/android/internal/app/procstats/ProcessStats;->evaluateSystemProperties(Z)Z
+HSPLcom/android/internal/app/procstats/ProcessStats;->reset()V
+HSPLcom/android/internal/app/procstats/ProcessStats;->resetCommon()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/SparseMappingTable$Table;-><init>(Lcom/android/internal/app/procstats/SparseMappingTable;)V
+HSPLcom/android/internal/app/procstats/SparseMappingTable$Table;->resetTable()V
+HSPLcom/android/internal/app/procstats/SparseMappingTable;->-get2(Lcom/android/internal/app/procstats/SparseMappingTable;)I
+HSPLcom/android/internal/app/procstats/SparseMappingTable;-><init>()V
+HSPLcom/android/internal/app/procstats/SparseMappingTable;->reset()V
+HSPLcom/android/internal/app/procstats/SysMemUsageTable;-><init>(Lcom/android/internal/app/procstats/SparseMappingTable;)V
+HSPLcom/android/internal/appwidget/IAppWidgetHost$Stub;-><init>()V
+HSPLcom/android/internal/appwidget/IAppWidgetHost$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/internal/appwidget/IAppWidgetHost;->providerChanged(ILandroid/appwidget/AppWidgetProviderInfo;)V
+HSPLcom/android/internal/appwidget/IAppWidgetHost;->providersChanged()V
+HSPLcom/android/internal/appwidget/IAppWidgetHost;->updateAppWidget(ILandroid/widget/RemoteViews;)V
+HSPLcom/android/internal/appwidget/IAppWidgetHost;->viewDataChanged(II)V
+HSPLcom/android/internal/appwidget/IAppWidgetService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+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;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/appwidget/IAppWidgetService;
+HSPLcom/android/internal/appwidget/IAppWidgetService;->allocateAppWidgetId(Ljava/lang/String;I)I
+HSPLcom/android/internal/appwidget/IAppWidgetService;->bindAppWidgetId(Ljava/lang/String;IILandroid/content/ComponentName;Landroid/os/Bundle;)Z
+HSPLcom/android/internal/appwidget/IAppWidgetService;->bindRemoteViewsService(Ljava/lang/String;ILandroid/content/Intent;Landroid/os/IBinder;)V
+HSPLcom/android/internal/appwidget/IAppWidgetService;->createAppWidgetConfigIntentSender(Ljava/lang/String;II)Landroid/content/IntentSender;
+HSPLcom/android/internal/appwidget/IAppWidgetService;->deleteAllHosts()V
+HSPLcom/android/internal/appwidget/IAppWidgetService;->deleteAppWidgetId(Ljava/lang/String;I)V
+HSPLcom/android/internal/appwidget/IAppWidgetService;->deleteHost(Ljava/lang/String;I)V
+HSPLcom/android/internal/appwidget/IAppWidgetService;->getAppWidgetIds(Landroid/content/ComponentName;)[I
+HSPLcom/android/internal/appwidget/IAppWidgetService;->getAppWidgetIdsForHost(Ljava/lang/String;I)[I
+HSPLcom/android/internal/appwidget/IAppWidgetService;->getAppWidgetInfo(Ljava/lang/String;I)Landroid/appwidget/AppWidgetProviderInfo;
+HSPLcom/android/internal/appwidget/IAppWidgetService;->getAppWidgetOptions(Ljava/lang/String;I)Landroid/os/Bundle;
+HSPLcom/android/internal/appwidget/IAppWidgetService;->getAppWidgetViews(Ljava/lang/String;I)Landroid/widget/RemoteViews;
+HSPLcom/android/internal/appwidget/IAppWidgetService;->getInstalledProvidersForProfile(IILjava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HSPLcom/android/internal/appwidget/IAppWidgetService;->hasBindAppWidgetPermission(Ljava/lang/String;I)Z
+HSPLcom/android/internal/appwidget/IAppWidgetService;->isBoundWidgetPackage(Ljava/lang/String;I)Z
+HSPLcom/android/internal/appwidget/IAppWidgetService;->isRequestPinAppWidgetSupported()Z
+HSPLcom/android/internal/appwidget/IAppWidgetService;->notifyAppWidgetViewDataChanged(Ljava/lang/String;[II)V
+HSPLcom/android/internal/appwidget/IAppWidgetService;->partiallyUpdateAppWidgetIds(Ljava/lang/String;[ILandroid/widget/RemoteViews;)V
+HSPLcom/android/internal/appwidget/IAppWidgetService;->requestPinAppWidget(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/Bundle;Landroid/content/IntentSender;)Z
+HSPLcom/android/internal/appwidget/IAppWidgetService;->setBindAppWidgetPermission(Ljava/lang/String;IZ)V
+HSPLcom/android/internal/appwidget/IAppWidgetService;->startListening(Lcom/android/internal/appwidget/IAppWidgetHost;Ljava/lang/String;I[I)Landroid/content/pm/ParceledListSlice;
+HSPLcom/android/internal/appwidget/IAppWidgetService;->stopListening(Ljava/lang/String;I)V
+HSPLcom/android/internal/appwidget/IAppWidgetService;->unbindRemoteViewsService(Ljava/lang/String;ILandroid/content/Intent;)V
+HSPLcom/android/internal/appwidget/IAppWidgetService;->updateAppWidgetIds(Ljava/lang/String;[ILandroid/widget/RemoteViews;)V
+HSPLcom/android/internal/appwidget/IAppWidgetService;->updateAppWidgetOptions(Ljava/lang/String;ILandroid/os/Bundle;)V
+HSPLcom/android/internal/appwidget/IAppWidgetService;->updateAppWidgetProvider(Landroid/content/ComponentName;Landroid/widget/RemoteViews;)V
+HSPLcom/android/internal/backup/IBackupTransport$Stub;-><init>()V
+HSPLcom/android/internal/backup/IBackupTransport$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/internal/backup/IBackupTransport$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/internal/backup/IBackupTransport;->abortFullRestore()I
+HSPLcom/android/internal/backup/IBackupTransport;->cancelFullBackup()V
+HSPLcom/android/internal/backup/IBackupTransport;->checkFullBackupSize(J)I
+HSPLcom/android/internal/backup/IBackupTransport;->clearBackupData(Landroid/content/pm/PackageInfo;)I
+HSPLcom/android/internal/backup/IBackupTransport;->configurationIntent()Landroid/content/Intent;
+HSPLcom/android/internal/backup/IBackupTransport;->currentDestinationString()Ljava/lang/String;
+HSPLcom/android/internal/backup/IBackupTransport;->dataManagementIntent()Landroid/content/Intent;
+HSPLcom/android/internal/backup/IBackupTransport;->dataManagementLabel()Ljava/lang/String;
+HSPLcom/android/internal/backup/IBackupTransport;->finishBackup()I
+HSPLcom/android/internal/backup/IBackupTransport;->finishRestore()V
+HSPLcom/android/internal/backup/IBackupTransport;->getAvailableRestoreSets()[Landroid/app/backup/RestoreSet;
+HSPLcom/android/internal/backup/IBackupTransport;->getBackupQuota(Ljava/lang/String;Z)J
+HSPLcom/android/internal/backup/IBackupTransport;->getCurrentRestoreSet()J
+HSPLcom/android/internal/backup/IBackupTransport;->getNextFullRestoreDataChunk(Landroid/os/ParcelFileDescriptor;)I
+HSPLcom/android/internal/backup/IBackupTransport;->getRestoreData(Landroid/os/ParcelFileDescriptor;)I
+HSPLcom/android/internal/backup/IBackupTransport;->initializeDevice()I
+HSPLcom/android/internal/backup/IBackupTransport;->isAppEligibleForBackup(Landroid/content/pm/PackageInfo;Z)Z
+HSPLcom/android/internal/backup/IBackupTransport;->name()Ljava/lang/String;
+HSPLcom/android/internal/backup/IBackupTransport;->nextRestorePackage()Landroid/app/backup/RestoreDescription;
+HSPLcom/android/internal/backup/IBackupTransport;->performBackup(Landroid/content/pm/PackageInfo;Landroid/os/ParcelFileDescriptor;I)I
+HSPLcom/android/internal/backup/IBackupTransport;->performFullBackup(Landroid/content/pm/PackageInfo;Landroid/os/ParcelFileDescriptor;I)I
+HSPLcom/android/internal/backup/IBackupTransport;->requestBackupTime()J
+HSPLcom/android/internal/backup/IBackupTransport;->requestFullBackupTime()J
+HSPLcom/android/internal/backup/IBackupTransport;->sendBackupData(I)I
+HSPLcom/android/internal/backup/IBackupTransport;->startRestore(J[Landroid/content/pm/PackageInfo;)I
+HSPLcom/android/internal/backup/IBackupTransport;->transportDirName()Ljava/lang/String;
+HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;-><init>()V
+HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->getMainColor()I
+HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->getSecondaryColor()I
+HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->set(Lcom/android/internal/colorextraction/ColorExtractor$GradientColors;)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/ColorExtractor;-><init>(Landroid/content/Context;Lcom/android/internal/colorextraction/types/ExtractionType;)V
+HSPLcom/android/internal/colorextraction/ColorExtractor;->addOnColorsChangedListener(Lcom/android/internal/colorextraction/ColorExtractor$OnColorsChangedListener;)V
+HSPLcom/android/internal/colorextraction/ColorExtractor;->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/ColorExtractor;->getColors(II)Lcom/android/internal/colorextraction/ColorExtractor$GradientColors;
+HSPLcom/android/internal/colorextraction/ColorExtractor;->getWallpaperColors(I)Landroid/app/WallpaperColors;
+HSPLcom/android/internal/colorextraction/drawable/-$Lambda$D0plBYSeplKHUImgLxjOl14-7Rw;->$m$0(Landroid/animation/ValueAnimator;)V
+HSPLcom/android/internal/colorextraction/drawable/-$Lambda$D0plBYSeplKHUImgLxjOl14-7Rw;-><init>(IIIILjava/lang/Object;)V
+HSPLcom/android/internal/colorextraction/drawable/-$Lambda$D0plBYSeplKHUImgLxjOl14-7Rw;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
+HSPLcom/android/internal/colorextraction/drawable/GradientDrawable$1;-><init>(Lcom/android/internal/colorextraction/drawable/GradientDrawable;)V
+HSPLcom/android/internal/colorextraction/drawable/GradientDrawable$Splat;-><init>(FFFF)V
+HSPLcom/android/internal/colorextraction/drawable/GradientDrawable;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/colorextraction/drawable/GradientDrawable;->buildPaints()V
+HSPLcom/android/internal/colorextraction/drawable/GradientDrawable;->lambda$-com_android_internal_colorextraction_drawable_GradientDrawable_3291(IIIILandroid/animation/ValueAnimator;)V
+HSPLcom/android/internal/colorextraction/drawable/GradientDrawable;->setAlpha(I)V
+HSPLcom/android/internal/colorextraction/drawable/GradientDrawable;->setColors(IIZ)V
+HSPLcom/android/internal/colorextraction/drawable/GradientDrawable;->setScreenSize(II)V
+HSPLcom/android/internal/colorextraction/drawable/GradientDrawable;->setXfermode(Landroid/graphics/Xfermode;)V
+HSPLcom/android/internal/colorextraction/types/ExtractionType;->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$ColorRange;-><init>(Landroid/util/Range;Landroid/util/Range;Landroid/util/Range;)V
+HSPLcom/android/internal/colorextraction/types/Tonal$ConfigParser;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/colorextraction/types/Tonal$ConfigParser;->getBlacklistedColors()Ljava/util/ArrayList;
+HSPLcom/android/internal/colorextraction/types/Tonal$ConfigParser;->getTonalPalettes()Ljava/util/ArrayList;
+HSPLcom/android/internal/colorextraction/types/Tonal$ConfigParser;->parseBlacklist(Lorg/xmlpull/v1/XmlPullParser;)V
+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$ConfigParser;->readRange(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/internal/colorextraction/types/Tonal$ColorRange;
+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;->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/content/PackageMonitor;-><init>()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/UserHandle;ZLandroid/os/Handler;)V
+HSPLcom/android/internal/content/ReferrerIntent$1;-><init>()V
+HSPLcom/android/internal/content/ReferrerIntent$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/content/ReferrerIntent;
+HSPLcom/android/internal/content/ReferrerIntent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLcom/android/internal/content/ReferrerIntent;-><init>(Landroid/os/Parcel;)V
+HSPLcom/android/internal/database/SortCursor$1;-><init>(Lcom/android/internal/database/SortCursor;)V
+HSPLcom/android/internal/database/SortCursor$1;->onInvalidated()V
+HSPLcom/android/internal/database/SortCursor;->-set0(Lcom/android/internal/database/SortCursor;I)I
+HSPLcom/android/internal/database/SortCursor;-><init>([Landroid/database/Cursor;Ljava/lang/String;)V
+HSPLcom/android/internal/database/SortCursor;->close()V
+HSPLcom/android/internal/database/SortCursor;->getCount()I
+HSPLcom/android/internal/database/SortCursor;->getLong(I)J
+HSPLcom/android/internal/database/SortCursor;->getString(I)Ljava/lang/String;
+HSPLcom/android/internal/database/SortCursor;->onMove(II)Z
+HSPLcom/android/internal/graphics/-$Lambda$03T1rR3H6Pfo2RsQKEXM1or54G4$1;->$m$0(III)D
+HSPLcom/android/internal/graphics/-$Lambda$03T1rR3H6Pfo2RsQKEXM1or54G4$1;-><init>(I)V
+HSPLcom/android/internal/graphics/-$Lambda$03T1rR3H6Pfo2RsQKEXM1or54G4$1;->calculateContrast(III)D
+HSPLcom/android/internal/graphics/ColorUtils$ContrastCalculator;->calculateContrast(III)D
+HSPLcom/android/internal/graphics/ColorUtils;->HSLToColor([F)I
+HSPLcom/android/internal/graphics/ColorUtils;->RGBToHSL(III[F)V
+HSPLcom/android/internal/graphics/ColorUtils;->RGBToXYZ(III[D)V
+HSPLcom/android/internal/graphics/ColorUtils;->binaryAlphaSearch(IIFLcom/android/internal/graphics/ColorUtils$ContrastCalculator;)I
+HSPLcom/android/internal/graphics/ColorUtils;->blendARGB(IIF)I
+HSPLcom/android/internal/graphics/ColorUtils;->calculateContrast(II)D
+HSPLcom/android/internal/graphics/ColorUtils;->calculateLuminance(I)D
+HSPLcom/android/internal/graphics/ColorUtils;->calculateMinimumBackgroundAlpha(IIF)I
+HSPLcom/android/internal/graphics/ColorUtils;->colorToHSL(I[F)V
+HSPLcom/android/internal/graphics/ColorUtils;->colorToXYZ(I[D)V
+HSPLcom/android/internal/graphics/ColorUtils;->constrain(FFF)F
+HSPLcom/android/internal/graphics/ColorUtils;->constrain(III)I
+HSPLcom/android/internal/graphics/ColorUtils;->getTempDouble3Array()[D
+HSPLcom/android/internal/graphics/ColorUtils;->lambda$-com_android_internal_graphics_ColorUtils_5280(IIII)D
+HSPLcom/android/internal/graphics/ColorUtils;->setAlphaComponent(II)I
+HSPLcom/android/internal/graphics/SfVsyncFrameCallbackProvider;-><init>()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;->canApplyTheme()Z
+HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;->getCurrentDrawableIndexBasedOnScale()I
+HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;->mutate()V
+HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable;-><init>(Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;Landroid/content/res/Resources;)V
+HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable;-><init>(Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;Landroid/content/res/Resources;Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable;)V
+HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
+HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable;->clearMutated()V
+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
+HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable;->start()V
+HSPLcom/android/internal/graphics/drawable/AnimationScaleListDrawable;->stop()V
+HSPLcom/android/internal/hardware/AmbientDisplayConfiguration;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/logging/AndroidConfig;-><init>()V
+HSPLcom/android/internal/logging/AndroidHandler$1;-><init>()V
+HSPLcom/android/internal/logging/AndroidHandler$1;->format(Ljava/util/logging/LogRecord;)Ljava/lang/String;
+HSPLcom/android/internal/logging/AndroidHandler;-><init>()V
+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;->writeSysuiAction(ILjava/lang/String;)V
+HSPLcom/android/internal/logging/EventLogTags;->writeSysuiMultiAction([Ljava/lang/Object;)V
+HSPLcom/android/internal/logging/MetricsLogger;-><init>()V
+HSPLcom/android/internal/logging/MetricsLogger;->action(II)V
+HSPLcom/android/internal/logging/MetricsLogger;->action(ILjava/lang/String;)V
+HSPLcom/android/internal/logging/MetricsLogger;->action(Landroid/content/Context;II)V
+HSPLcom/android/internal/logging/MetricsLogger;->action(Landroid/content/Context;ILjava/lang/String;)V
+HSPLcom/android/internal/logging/MetricsLogger;->action(Landroid/metrics/LogMaker;)V
+HSPLcom/android/internal/logging/MetricsLogger;->getLogger()Lcom/android/internal/logging/MetricsLogger;
+HSPLcom/android/internal/logging/MetricsLogger;->saveLog([Ljava/lang/Object;)V
+HSPLcom/android/internal/logging/MetricsLogger;->write(Landroid/metrics/LogMaker;)V
+HSPLcom/android/internal/net/NetworkStatsFactory;-><init>()V
+HSPLcom/android/internal/net/NetworkStatsFactory;-><init>(Ljava/io/File;)V
+HSPLcom/android/internal/os/AndroidPrintStream;-><init>(ILjava/lang/String;)V
+HSPLcom/android/internal/os/AndroidPrintStream;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/os/AtomicFile;-><init>(Ljava/io/File;)V
+HSPLcom/android/internal/os/AtomicFile;->getBaseFile()Ljava/io/File;
+HSPLcom/android/internal/os/AtomicFile;->openRead()Ljava/io/FileInputStream;
+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;->getHandler()Landroid/os/Handler;
+HSPLcom/android/internal/os/BatteryStatsHelper;-><init>(Landroid/content/Context;Z)V
+HSPLcom/android/internal/os/BatteryStatsHelper;-><init>(Landroid/content/Context;ZZ)V
+HSPLcom/android/internal/os/BatteryStatsHelper;->checkWifiOnly(Landroid/content/Context;)Z
+HSPLcom/android/internal/os/BatteryStatsHelper;->create(Landroid/os/Bundle;)V
+HSPLcom/android/internal/os/BatteryStatsHelper;->getStats()Landroid/os/BatteryStats;
+HSPLcom/android/internal/os/BatteryStatsHelper;->getStats(Lcom/android/internal/app/IBatteryStats;)Lcom/android/internal/os/BatteryStatsImpl;
+HSPLcom/android/internal/os/BatteryStatsHelper;->load()V
+HSPLcom/android/internal/os/BatteryStatsHelper;->readFully(Ljava/io/FileInputStream;)[B
+HSPLcom/android/internal/os/BatteryStatsHelper;->readFully(Ljava/io/FileInputStream;I)[B
+HSPLcom/android/internal/os/BatteryStatsImpl$1;-><init>()V
+HSPLcom/android/internal/os/BatteryStatsImpl$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/os/BatteryStatsImpl;
+HSPLcom/android/internal/os/BatteryStatsImpl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLcom/android/internal/os/BatteryStatsImpl$6;-><init>(Lcom/android/internal/os/BatteryStatsImpl;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$6;->run()V
+HSPLcom/android/internal/os/BatteryStatsImpl$BatteryCallback;->batteryNeedsCpuUpdate()V
+HSPLcom/android/internal/os/BatteryStatsImpl$BatteryCallback;->batteryPowerChanged(Z)V
+HSPLcom/android/internal/os/BatteryStatsImpl$BatteryCallback;->batterySendBroadcast(Landroid/content/Intent;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Clocks;->elapsedRealtime()J
+HSPLcom/android/internal/os/BatteryStatsImpl$Clocks;->uptimeMillis()J
+HSPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;I)V
+HSPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;ILandroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->readSummaryFromParcel(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;->writeSummaryToParcel(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Counter;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Counter;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Counter;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Counter;->writeSummaryFromParcelLocked(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;-><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;Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$DualTimer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V
+HSPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;-><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$DurationTimer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Lcom/android/internal/os/BatteryStatsImpl$Uid;ILjava/util/ArrayList;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)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;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$DurationTimer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V
+HSPLcom/android/internal/os/BatteryStatsImpl$ExternalStatsSync;->scheduleCpuSyncDueToRemovedUid(I)Ljava/util/concurrent/Future;
+HSPLcom/android/internal/os/BatteryStatsImpl$ExternalStatsSync;->scheduleSync(Ljava/lang/String;I)Ljava/util/concurrent/Future;
+HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->reset(Z)V
+HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;->writeSummaryFromParcelLocked(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;-><init>(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->copyArray([J[J)[J
+HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->readFromParcel(Landroid/os/Parcel;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;
+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;->writeSummaryToParcelLocked(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;->writeSummaryToParcelLocked(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$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;->clear()V
+HSPLcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;->getMap()Landroid/util/ArrayMap;
+HSPLcom/android/internal/os/BatteryStatsImpl$PlatformIdleStateCallback;->getPlatformLowPowerStats()Ljava/lang/String;
+HSPLcom/android/internal/os/BatteryStatsImpl$PlatformIdleStateCallback;->getSubsystemLowPowerStats()Ljava/lang/String;
+HSPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)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;->setUpdateVersion(I)V
+HSPLcom/android/internal/os/BatteryStatsImpl$SamplingTimer;->update(JI)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;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Lcom/android/internal/os/BatteryStatsImpl$Uid;ILjava/util/ArrayList;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->computeCurrentCountLocked()I
+HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->computeRunTimeLocked(J)J
+HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;->setTimeout(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>()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;->readFromParcel(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->readSummaryFromParcel(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$TimeBase;->writeSummaryToParcel(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;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;ILcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Timer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Timer;->writeSummaryFromParcelLocked(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$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;-><init>(Lcom/android/internal/os/BatteryStatsImpl;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->getStartTimeToNowLocked(J)J
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;->readFromParcelLocked(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;-><init>(Lcom/android/internal/os/BatteryStatsImpl;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;->newServiceStatsLocked()Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;->readFromParcelLocked(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;->readExcessivePowerFromParcelLocked(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->readFromParcelLocked(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Proc;->writeExcessivePowerToParcelLocked(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
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;->readFromParcelLocked(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;->readTimersFromParcel(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)Lcom/android/internal/os/BatteryStatsImpl$DualTimer;
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl$Uid;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;->readDualTimerFromParcel(ILjava/util/ArrayList;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)Lcom/android/internal/os/BatteryStatsImpl$DualTimer;
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;->readFromParcelLocked(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;->readStopwatchTimerFromParcel(ILjava/util/ArrayList;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->-get0(Lcom/android/internal/os/BatteryStatsImpl$Uid;)Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->-get1(Lcom/android/internal/os/BatteryStatsImpl$Uid;)Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->-set0(Lcom/android/internal/os/BatteryStatsImpl$Uid;Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;)Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->-set1(Lcom/android/internal/os/BatteryStatsImpl$Uid;Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;)Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid;-><init>(Lcom/android/internal/os/BatteryStatsImpl;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;->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;->getPackageStatsLocked(Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->getProcessStatsLocked(Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;
+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;
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->getWakelockTimerLocked(Lcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;I)Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->initUserActivityLocked()V
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->makeProcessState(ILandroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->readFromParcelLocked(Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Lcom/android/internal/os/BatteryStatsImpl$TimeBase;Landroid/os/Parcel;)V
+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
+HSPLcom/android/internal/os/BatteryStatsImpl$Uid;->writeJobCompletionsToParcelLocked(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;->-wrap1(Lcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;)V
+HSPLcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;-><init>()V
+HSPLcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;->getUserIds()[I
+HSPLcom/android/internal/os/BatteryStatsImpl$UserInfoProvider;->refreshUserIds()V
+HSPLcom/android/internal/os/BatteryStatsImpl;->-get4(Lcom/android/internal/os/BatteryStatsImpl;)Lcom/android/internal/os/PowerProfile;
+HSPLcom/android/internal/os/BatteryStatsImpl;-><init>(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;-><init>(Lcom/android/internal/os/BatteryStatsImpl$Clocks;Landroid/os/Parcel;)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$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$UserInfoProvider;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->addHistoryBufferLocked(JJBLandroid/os/BatteryStats$HistoryItem;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->addHistoryBufferLocked(JJLandroid/os/BatteryStats$HistoryItem;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->addHistoryEventLocked(JJILjava/lang/String;I)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->addHistoryRecordInnerLocked(JJLandroid/os/BatteryStats$HistoryItem;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->addHistoryRecordLocked(JJ)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->clearHistoryLocked()V
+HSPLcom/android/internal/os/BatteryStatsImpl;->commitPendingDataToDisk()V
+HSPLcom/android/internal/os/BatteryStatsImpl;->computeChargeTimeRemaining(J)J
+HSPLcom/android/internal/os/BatteryStatsImpl;->computeRealtime(JI)J
+HSPLcom/android/internal/os/BatteryStatsImpl;->computeUptime(JI)J
+HSPLcom/android/internal/os/BatteryStatsImpl;->ensureStartClockTime(J)Z
+HSPLcom/android/internal/os/BatteryStatsImpl;->getDischargeAmountScreenOffSinceCharge()I
+HSPLcom/android/internal/os/BatteryStatsImpl;->getDischargeAmountScreenOnSinceCharge()I
+HSPLcom/android/internal/os/BatteryStatsImpl;->getHighDischargeAmountSinceCharge()I
+HSPLcom/android/internal/os/BatteryStatsImpl;->getIsOnBattery()Z
+HSPLcom/android/internal/os/BatteryStatsImpl;->getKernelWakelockTimerLocked(Ljava/lang/String;)Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;
+HSPLcom/android/internal/os/BatteryStatsImpl;->getLowDischargeAmountSinceCharge()I
+HSPLcom/android/internal/os/BatteryStatsImpl;->getNextHistoryLocked(Landroid/os/BatteryStats$HistoryItem;)Z
+HSPLcom/android/internal/os/BatteryStatsImpl;->getStartClockTime()J
+HSPLcom/android/internal/os/BatteryStatsImpl;->init(Lcom/android/internal/os/BatteryStatsImpl$Clocks;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->initDischarge()V
+HSPLcom/android/internal/os/BatteryStatsImpl;->initTimes(JJ)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->notePowerSaveModeLocked(Z)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->pullPendingStateUpdatesLocked()V
+HSPLcom/android/internal/os/BatteryStatsImpl;->readBatteryLevelInt(ILandroid/os/BatteryStats$HistoryItem;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->readDailyStatsLocked()V
+HSPLcom/android/internal/os/BatteryStatsImpl;->readFromParcel(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->readFromParcelLocked(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->readHistory(Landroid/os/Parcel;Z)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->readHistoryDelta(Landroid/os/Parcel;Landroid/os/BatteryStats$HistoryItem;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->readHistoryTag(ILandroid/os/BatteryStats$HistoryTag;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->readKernelUidCpuFreqTimesLocked()V
+HSPLcom/android/internal/os/BatteryStatsImpl;->readLocked()V
+HSPLcom/android/internal/os/BatteryStatsImpl;->readOldHistory(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->readSummaryFromParcel(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->recordDailyStatsIfNeededLocked(Z)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->setCallback(Lcom/android/internal/os/BatteryStatsImpl$BatteryCallback;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->setExternalStatsSyncLocked(Lcom/android/internal/os/BatteryStatsImpl$ExternalStatsSync;)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;->startIteratingHistoryLocked()Z
+HSPLcom/android/internal/os/BatteryStatsImpl;->startRecordingHistory(JJZ)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->updateCpuTimeLocked(Z)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->updateDailyDeadlineLocked()V
+HSPLcom/android/internal/os/BatteryStatsImpl;->updateKernelMemoryBandwidthLocked()V
+HSPLcom/android/internal/os/BatteryStatsImpl;->updateKernelWakelocksLocked()V
+HSPLcom/android/internal/os/BatteryStatsImpl;->writeAsyncLocked()V
+HSPLcom/android/internal/os/BatteryStatsImpl;->writeHistory(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;->writeLocked(Z)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->writeOldHistory(Landroid/os/Parcel;)V
+HSPLcom/android/internal/os/BatteryStatsImpl;->writeSummaryToParcel(Landroid/os/Parcel;Z)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
+HSPLcom/android/internal/os/ClassLoaderFactory;->createClassLoader(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/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/lang/ClassLoader;
+HSPLcom/android/internal/os/ClassLoaderFactory;->isPathClassLoaderName(Ljava/lang/String;)Z
+HSPLcom/android/internal/os/HandlerCaller$Callback;->executeMessage(Landroid/os/Message;)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
+HSPLcom/android/internal/os/HandlerCaller;->getHandler()Landroid/os/Handler;
+HSPLcom/android/internal/os/HandlerCaller;->obtainMessage(I)Landroid/os/Message;
+HSPLcom/android/internal/os/HandlerCaller;->obtainMessageIIOOO(IIILjava/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;->obtainMessageO(ILjava/lang/Object;)Landroid/os/Message;
+HSPLcom/android/internal/os/HandlerCaller;->obtainMessageOO(ILjava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
+HSPLcom/android/internal/os/HandlerCaller;->sendMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/os/KernelCpuSpeedReader;-><init>(II)V
+HSPLcom/android/internal/os/KernelCpuSpeedReader;->readDelta()[J
+HSPLcom/android/internal/os/KernelMemoryBandwidthStats;-><init>()V
+HSPLcom/android/internal/os/KernelMemoryBandwidthStats;->getBandwidthEntries()Landroid/util/LongSparseLongArray;
+HSPLcom/android/internal/os/KernelMemoryBandwidthStats;->parseStats(Ljava/io/BufferedReader;)V
+HSPLcom/android/internal/os/KernelMemoryBandwidthStats;->updateStats()V
+HSPLcom/android/internal/os/KernelUidCpuFreqTimeReader;-><init>()V
+HSPLcom/android/internal/os/KernelUidCpuFreqTimeReader;->readCpuFreqs(Ljava/lang/String;Lcom/android/internal/os/KernelUidCpuFreqTimeReader$Callback;)V
+HSPLcom/android/internal/os/KernelUidCpuFreqTimeReader;->readDelta(Lcom/android/internal/os/KernelUidCpuFreqTimeReader$Callback;)V
+HSPLcom/android/internal/os/KernelUidCpuFreqTimeReader;->readDelta(Ljava/io/BufferedReader;Lcom/android/internal/os/KernelUidCpuFreqTimeReader$Callback;)V
+HSPLcom/android/internal/os/KernelUidCpuFreqTimeReader;->readTimesForUid(ILjava/lang/String;Lcom/android/internal/os/KernelUidCpuFreqTimeReader$Callback;)V
+HSPLcom/android/internal/os/KernelUidCpuTimeReader;-><init>()V
+HSPLcom/android/internal/os/KernelUidCpuTimeReader;->readDelta(Lcom/android/internal/os/KernelUidCpuTimeReader$Callback;)V
+HSPLcom/android/internal/os/KernelWakelockReader;-><init>()V
+HSPLcom/android/internal/os/KernelWakelockReader;->parseProcWakelocks([BIZLcom/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/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(Z)V
+HSPLcom/android/internal/os/LoggingPrintStream;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/os/LoggingPrintStream;->println(Ljava/lang/Object;)V
+HSPLcom/android/internal/os/PowerProfile$CpuClusterKey;->-get0(Lcom/android/internal/os/PowerProfile$CpuClusterKey;)I
+HSPLcom/android/internal/os/PowerProfile$CpuClusterKey;->-get2(Lcom/android/internal/os/PowerProfile$CpuClusterKey;)Ljava/lang/String;
+HSPLcom/android/internal/os/PowerProfile$CpuClusterKey;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/internal/os/PowerProfile$CpuClusterKey;-><init>(Ljava/lang/String;Ljava/lang/String;ILcom/android/internal/os/PowerProfile$CpuClusterKey;)V
+HSPLcom/android/internal/os/PowerProfile;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/os/PowerProfile;->getAveragePower(Ljava/lang/String;)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
+HSPLcom/android/internal/os/PowerProfile;->getNumSpeedStepsInCpuCluster(I)I
+HSPLcom/android/internal/os/PowerProfile;->initCpuClusters()V
+HSPLcom/android/internal/os/PowerProfile;->readPowerValuesFromXml(Landroid/content/Context;)V
+HSPLcom/android/internal/os/ProcessCpuTracker$1;-><init>()V
+HSPLcom/android/internal/os/ProcessCpuTracker$Stats;-><init>(IIZ)V
+HSPLcom/android/internal/os/ProcessCpuTracker;-><init>(Z)V
+HSPLcom/android/internal/os/ProcessCpuTracker;->collectStats(Ljava/lang/String;IZ[ILjava/util/ArrayList;)[I
+HSPLcom/android/internal/os/ProcessCpuTracker;->getName(Lcom/android/internal/os/ProcessCpuTracker$Stats;Ljava/lang/String;)V
+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
+HSPLcom/android/internal/os/ProcessCpuTracker;->readFile(Ljava/lang/String;C)Ljava/lang/String;
+HSPLcom/android/internal/os/ProcessCpuTracker;->update()V
+HSPLcom/android/internal/os/RuntimeInit$1;-><init>()V
+HSPLcom/android/internal/os/RuntimeInit$1;->getId()Ljava/lang/String;
+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>()V
+HSPLcom/android/internal/os/RuntimeInit$KillApplicationHandler;-><init>(Lcom/android/internal/os/RuntimeInit$KillApplicationHandler;)V
+HSPLcom/android/internal/os/RuntimeInit$LoggingHandler;-><init>()V
+HSPLcom/android/internal/os/RuntimeInit$LoggingHandler;-><init>(Lcom/android/internal/os/RuntimeInit$LoggingHandler;)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;->applicationInit(I[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;->redirectLogStreams()V
+HSPLcom/android/internal/os/RuntimeInit;->setApplicationObject(Landroid/os/IBinder;)V
+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;
+HSPLcom/android/internal/os/SomeArgs;->recycle()V
+HSPLcom/android/internal/os/Zygote;->forkAndSpecialize(II[II[[IILjava/lang/String;Ljava/lang/String;[I[ILjava/lang/String;Ljava/lang/String;)I
+HSPLcom/android/internal/os/Zygote;->forkSystemServer(II[II[[IJJ)I
+HSPLcom/android/internal/os/ZygoteConnection;->closeSocket()V
+HSPLcom/android/internal/os/ZygoteConnection;->handleChildProc(Lcom/android/internal/os/ZygoteConnection$Arguments;[Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;)Ljava/lang/Runnable;
+HSPLcom/android/internal/os/ZygoteConnection;->processOneCommand(Lcom/android/internal/os/ZygoteServer;)Ljava/lang/Runnable;
+HSPLcom/android/internal/os/ZygoteInit;->createPathClassLoader(Ljava/lang/String;I)Ljava/lang/ClassLoader;
+HSPLcom/android/internal/os/ZygoteInit;->encodeSystemServerClassPath(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+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;->handleSystemServerProcess(Lcom/android/internal/os/ZygoteConnection$Arguments;)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;->performSystemServerDexOpt(Ljava/lang/String;)V
+HSPLcom/android/internal/os/ZygoteInit;->waitForSecondaryZygote(Ljava/lang/String;)V
+HSPLcom/android/internal/os/ZygoteInit;->zygoteInit(I[Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Runnable;
+HSPLcom/android/internal/os/ZygoteServer;->closeServerSocket()V
+HSPLcom/android/internal/os/ZygoteServer;->setForkChild()V
+HSPLcom/android/internal/policy/DecorContext;-><init>(Landroid/content/Context;Landroid/content/res/Resources;)V
+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
+HSPLcom/android/internal/policy/DecorView$1;-><init>()V
+HSPLcom/android/internal/policy/DecorView$ColorViewAttributes;-><init>(IIIIILjava/lang/String;II)V
+HSPLcom/android/internal/policy/DecorView$ColorViewAttributes;-><init>(IIIIILjava/lang/String;IILcom/android/internal/policy/DecorView$ColorViewAttributes;)V
+HSPLcom/android/internal/policy/DecorView$ColorViewAttributes;->isPresent(IIZ)Z
+HSPLcom/android/internal/policy/DecorView$ColorViewAttributes;->isVisible(ZIIZ)Z
+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;->calculateStatusBarColor()I
+HSPLcom/android/internal/policy/DecorView;->calculateStatusBarColor(III)I
+HSPLcom/android/internal/policy/DecorView;->createDecorCaptionView(Landroid/view/LayoutInflater;)Lcom/android/internal/widget/DecorCaptionView;
+HSPLcom/android/internal/policy/DecorView;->dispatchPopulateAccessibilityEventInternal(Landroid/view/accessibility/AccessibilityEvent;)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;->drawResizingShadowIfNeeded(Landroid/view/DisplayListCanvas;)V
+HSPLcom/android/internal/policy/DecorView;->drawableChanged()V
+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
+HSPLcom/android/internal/policy/DecorView;->gatherTransparentRegion(Landroid/graphics/Region;)Z
+HSPLcom/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;->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;->getResizingBackgroundDrawable(Landroid/content/Context;IIZ)Landroid/graphics/drawable/Drawable;
+HSPLcom/android/internal/policy/DecorView;->getStackId()I
+HSPLcom/android/internal/policy/DecorView;->getTitleSuffix(Landroid/view/WindowManager$LayoutParams;)Ljava/lang/String;
+HSPLcom/android/internal/policy/DecorView;->initResizingPaints()V
+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
+HSPLcom/android/internal/policy/DecorView;->onCloseSystemDialogs(Ljava/lang/String;)V
+HSPLcom/android/internal/policy/DecorView;->onContentDrawn(IIII)Z
+HSPLcom/android/internal/policy/DecorView;->onDraw(Landroid/graphics/Canvas;)V
+HSPLcom/android/internal/policy/DecorView;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLcom/android/internal/policy/DecorView;->onLayout(ZIIII)V
+HSPLcom/android/internal/policy/DecorView;->onMeasure(II)V
+HSPLcom/android/internal/policy/DecorView;->onPostDraw(Landroid/view/DisplayListCanvas;)V
+HSPLcom/android/internal/policy/DecorView;->onResourcesLoaded(Landroid/view/LayoutInflater;I)V
+HSPLcom/android/internal/policy/DecorView;->onRootViewScrollYChanged(I)V
+HSPLcom/android/internal/policy/DecorView;->onWindowFocusChanged(Z)V
+HSPLcom/android/internal/policy/DecorView;->onWindowSystemUiVisibilityChanged(I)V
+HSPLcom/android/internal/policy/DecorView;->sendAccessibilityEvent(I)V
+HSPLcom/android/internal/policy/DecorView;->setBackgroundFallback(I)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
+HSPLcom/android/internal/policy/DecorView;->superDispatchTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLcom/android/internal/policy/DecorView;->updateAvailableWidth()V
+HSPLcom/android/internal/policy/DecorView;->updateColorViewInt(Lcom/android/internal/policy/DecorView$ColorViewState;IIIZZIZZ)V
+HSPLcom/android/internal/policy/DecorView;->updateColorViewTranslations()V
+HSPLcom/android/internal/policy/DecorView;->updateColorViews(Landroid/view/WindowInsets;Z)Landroid/view/WindowInsets;
+HSPLcom/android/internal/policy/DecorView;->updateElevation()V
+HSPLcom/android/internal/policy/DecorView;->updateLogTag(Landroid/view/WindowManager$LayoutParams;)V
+HSPLcom/android/internal/policy/DecorView;->updateNavigationGuard(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
+HSPLcom/android/internal/policy/DecorView;->updateNavigationGuardColor()V
+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
+HSPLcom/android/internal/policy/DividerSnapAlgorithm;-><init>(Landroid/content/res/Resources;IIIZLandroid/graphics/Rect;Z)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;->calculateNonDismissingSnapTarget(I)Lcom/android/internal/policy/DividerSnapAlgorithm$SnapTarget;
+HSPLcom/android/internal/policy/DividerSnapAlgorithm;->calculateTargets(Z)V
+HSPLcom/android/internal/policy/DividerSnapAlgorithm;->maybeAddTarget(II)V
+HSPLcom/android/internal/policy/DividerSnapAlgorithm;->snap(IZ)Lcom/android/internal/policy/DividerSnapAlgorithm$SnapTarget;
+HSPLcom/android/internal/policy/DockedDividerUtils;->calculateMiddlePosition(ZLandroid/graphics/Rect;III)I
+HSPLcom/android/internal/policy/IKeyguardDrawnCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/policy/IKeyguardDrawnCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IKeyguardDrawnCallback;
+HSPLcom/android/internal/policy/IKeyguardDrawnCallback;->onDrawn()V
+HSPLcom/android/internal/policy/IKeyguardService$Stub;-><init>()V
+HSPLcom/android/internal/policy/IKeyguardService$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/internal/policy/IKeyguardService;->addStateMonitorCallback(Lcom/android/internal/policy/IKeyguardStateCallback;)V
+HSPLcom/android/internal/policy/IKeyguardService;->dismiss(Lcom/android/internal/policy/IKeyguardDismissCallback;)V
+HSPLcom/android/internal/policy/IKeyguardService;->doKeyguardTimeout(Landroid/os/Bundle;)V
+HSPLcom/android/internal/policy/IKeyguardService;->onBootCompleted()V
+HSPLcom/android/internal/policy/IKeyguardService;->onDreamingStarted()V
+HSPLcom/android/internal/policy/IKeyguardService;->onDreamingStopped()V
+HSPLcom/android/internal/policy/IKeyguardService;->onFinishedGoingToSleep(IZ)V
+HSPLcom/android/internal/policy/IKeyguardService;->onFinishedWakingUp()V
+HSPLcom/android/internal/policy/IKeyguardService;->onScreenTurnedOff()V
+HSPLcom/android/internal/policy/IKeyguardService;->onScreenTurnedOn()V
+HSPLcom/android/internal/policy/IKeyguardService;->onScreenTurningOff()V
+HSPLcom/android/internal/policy/IKeyguardService;->onScreenTurningOn(Lcom/android/internal/policy/IKeyguardDrawnCallback;)V
+HSPLcom/android/internal/policy/IKeyguardService;->onShortPowerPressedGoHome()V
+HSPLcom/android/internal/policy/IKeyguardService;->onStartedGoingToSleep(I)V
+HSPLcom/android/internal/policy/IKeyguardService;->onStartedWakingUp()V
+HSPLcom/android/internal/policy/IKeyguardService;->onSystemReady()V
+HSPLcom/android/internal/policy/IKeyguardService;->setCurrentUser(I)V
+HSPLcom/android/internal/policy/IKeyguardService;->setKeyguardEnabled(Z)V
+HSPLcom/android/internal/policy/IKeyguardService;->setOccluded(ZZ)V
+HSPLcom/android/internal/policy/IKeyguardService;->setSwitchingUser(Z)V
+HSPLcom/android/internal/policy/IKeyguardService;->startKeyguardExitAnimation(JJ)V
+HSPLcom/android/internal/policy/IKeyguardService;->verifyUnlock(Lcom/android/internal/policy/IKeyguardExitCallback;)V
+HSPLcom/android/internal/policy/IKeyguardStateCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/policy/IKeyguardStateCallback$Stub$Proxy;->onHasLockscreenWallpaperChanged(Z)V
+HSPLcom/android/internal/policy/IKeyguardStateCallback$Stub$Proxy;->onInputRestrictedStateChanged(Z)V
+HSPLcom/android/internal/policy/IKeyguardStateCallback$Stub$Proxy;->onShowingStateChanged(Z)V
+HSPLcom/android/internal/policy/IKeyguardStateCallback$Stub$Proxy;->onSimSecureStateChanged(Z)V
+HSPLcom/android/internal/policy/IKeyguardStateCallback$Stub$Proxy;->onTrustedChanged(Z)V
+HSPLcom/android/internal/policy/IKeyguardStateCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IKeyguardStateCallback;
+HSPLcom/android/internal/policy/IKeyguardStateCallback;->onHasLockscreenWallpaperChanged(Z)V
+HSPLcom/android/internal/policy/IKeyguardStateCallback;->onInputRestrictedStateChanged(Z)V
+HSPLcom/android/internal/policy/IKeyguardStateCallback;->onShowingStateChanged(Z)V
+HSPLcom/android/internal/policy/IKeyguardStateCallback;->onSimSecureStateChanged(Z)V
+HSPLcom/android/internal/policy/IKeyguardStateCallback;->onTrustedChanged(Z)V
+HSPLcom/android/internal/policy/IShortcutService$Stub;-><init>()V
+HSPLcom/android/internal/policy/IShortcutService$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/internal/policy/IShortcutService;->notifyShortcutKeyPressed(J)V
+HSPLcom/android/internal/policy/PhoneFallbackEventHandler;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/policy/PhoneFallbackEventHandler;->setView(Landroid/view/View;)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;
+HSPLcom/android/internal/policy/PhoneWindow$1;-><init>(Lcom/android/internal/policy/PhoneWindow;)V
+HSPLcom/android/internal/policy/PhoneWindow$1;->run()V
+HSPLcom/android/internal/policy/PhoneWindow$ActionMenuPresenterCallback;-><init>(Lcom/android/internal/policy/PhoneWindow;)V
+HSPLcom/android/internal/policy/PhoneWindow$ActionMenuPresenterCallback;-><init>(Lcom/android/internal/policy/PhoneWindow;Lcom/android/internal/policy/PhoneWindow$ActionMenuPresenterCallback;)V
+HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState;-><init>(I)V
+HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState;->applyFrozenState()V
+HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState;->setMenu(Lcom/android/internal/view/menu/MenuBuilder;)V
+HSPLcom/android/internal/policy/PhoneWindow$PhoneWindowMenuCallback;-><init>(Lcom/android/internal/policy/PhoneWindow;)V
+HSPLcom/android/internal/policy/PhoneWindow$RotationWatcher$1;-><init>(Lcom/android/internal/policy/PhoneWindow$RotationWatcher;)V
+HSPLcom/android/internal/policy/PhoneWindow$RotationWatcher;-><init>()V
+HSPLcom/android/internal/policy/PhoneWindow;->-get0(Lcom/android/internal/policy/PhoneWindow;)I
+HSPLcom/android/internal/policy/PhoneWindow;->-set0(Lcom/android/internal/policy/PhoneWindow;I)I
+HSPLcom/android/internal/policy/PhoneWindow;->-set1(Lcom/android/internal/policy/PhoneWindow;Z)Z
+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;->alwaysReadCloseOnTouchAttr()V
+HSPLcom/android/internal/policy/PhoneWindow;->closeAllPanels()V
+HSPLcom/android/internal/policy/PhoneWindow;->closeContextMenu()V
+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;->getDecorView()Landroid/view/View;
+HSPLcom/android/internal/policy/PhoneWindow;->getLayoutInflater()Landroid/view/LayoutInflater;
+HSPLcom/android/internal/policy/PhoneWindow;->getNavigationBarColor()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;->getTransition(Landroid/transition/Transition;Landroid/transition/Transition;I)Landroid/transition/Transition;
+HSPLcom/android/internal/policy/PhoneWindow;->getVolumeControlStream()I
+HSPLcom/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;->onActive()V
+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;
+HSPLcom/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;->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;->setCloseOnSwipeEnabled(Z)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
+HSPLcom/android/internal/policy/PhoneWindow;->setDefaultIcon(I)V
+HSPLcom/android/internal/policy/PhoneWindow;->setDefaultLogo(I)V
+HSPLcom/android/internal/policy/PhoneWindow;->setDefaultWindowFormat(I)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
+HSPLcom/android/internal/policy/PhoneWindow;->setVolumeControlStream(I)V
+HSPLcom/android/internal/policy/PhoneWindow;->superDispatchTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLcom/android/internal/policy/PhoneWindow;->transitionTo(Landroid/transition/Scene;)V
+HSPLcom/android/internal/policy/PipSnapAlgorithm;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/policy/PipSnapAlgorithm;->calculateSnapTargets()V
+HSPLcom/android/internal/policy/PipSnapAlgorithm;->onConfigurationChanged()V
+HSPLcom/android/internal/statusbar/IStatusBar$Stub;-><init>()V
+HSPLcom/android/internal/statusbar/IStatusBar$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/internal/statusbar/IStatusBar$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/internal/statusbar/IStatusBar;->addQsTile(Landroid/content/ComponentName;)V
+HSPLcom/android/internal/statusbar/IStatusBar;->animateCollapsePanels()V
+HSPLcom/android/internal/statusbar/IStatusBar;->animateExpandNotificationsPanel()V
+HSPLcom/android/internal/statusbar/IStatusBar;->animateExpandSettingsPanel(Ljava/lang/String;)V
+HSPLcom/android/internal/statusbar/IStatusBar;->appTransitionCancelled()V
+HSPLcom/android/internal/statusbar/IStatusBar;->appTransitionFinished()V
+HSPLcom/android/internal/statusbar/IStatusBar;->appTransitionPending()V
+HSPLcom/android/internal/statusbar/IStatusBar;->appTransitionStarting(JJ)V
+HSPLcom/android/internal/statusbar/IStatusBar;->cancelPreloadRecentApps()V
+HSPLcom/android/internal/statusbar/IStatusBar;->clickQsTile(Landroid/content/ComponentName;)V
+HSPLcom/android/internal/statusbar/IStatusBar;->disable(II)V
+HSPLcom/android/internal/statusbar/IStatusBar;->dismissKeyboardShortcutsMenu()V
+HSPLcom/android/internal/statusbar/IStatusBar;->handleSystemKey(I)V
+HSPLcom/android/internal/statusbar/IStatusBar;->hideRecentApps(ZZ)V
+HSPLcom/android/internal/statusbar/IStatusBar;->onCameraLaunchGestureDetected(I)V
+HSPLcom/android/internal/statusbar/IStatusBar;->preloadRecentApps()V
+HSPLcom/android/internal/statusbar/IStatusBar;->remQsTile(Landroid/content/ComponentName;)V
+HSPLcom/android/internal/statusbar/IStatusBar;->removeIcon(Ljava/lang/String;)V
+HSPLcom/android/internal/statusbar/IStatusBar;->setIcon(Ljava/lang/String;Lcom/android/internal/statusbar/StatusBarIcon;)V
+HSPLcom/android/internal/statusbar/IStatusBar;->setImeWindowStatus(Landroid/os/IBinder;IIZ)V
+HSPLcom/android/internal/statusbar/IStatusBar;->setSystemUiVisibility(IIIILandroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLcom/android/internal/statusbar/IStatusBar;->setTopAppHidesStatusBar(Z)V
+HSPLcom/android/internal/statusbar/IStatusBar;->setWindowState(II)V
+HSPLcom/android/internal/statusbar/IStatusBar;->showAssistDisclosure()V
+HSPLcom/android/internal/statusbar/IStatusBar;->showGlobalActionsMenu()V
+HSPLcom/android/internal/statusbar/IStatusBar;->showPictureInPictureMenu()V
+HSPLcom/android/internal/statusbar/IStatusBar;->showRecentApps(ZZ)V
+HSPLcom/android/internal/statusbar/IStatusBar;->showScreenPinningRequest(I)V
+HSPLcom/android/internal/statusbar/IStatusBar;->showShutdownUi(ZLjava/lang/String;)V
+HSPLcom/android/internal/statusbar/IStatusBar;->startAssist(Landroid/os/Bundle;)V
+HSPLcom/android/internal/statusbar/IStatusBar;->toggleKeyboardShortcutsMenu(I)V
+HSPLcom/android/internal/statusbar/IStatusBar;->togglePanel()V
+HSPLcom/android/internal/statusbar/IStatusBar;->toggleRecentApps()V
+HSPLcom/android/internal/statusbar/IStatusBar;->toggleSplitScreen()V
+HSPLcom/android/internal/statusbar/IStatusBar;->topAppWindowChanged(Z)V
+HSPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->disable(ILandroid/os/IBinder;Ljava/lang/String;)V
+HSPLcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->registerStatusBar(Lcom/android/internal/statusbar/IStatusBar;Ljava/util/List;Ljava/util/List;[ILjava/util/List;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLcom/android/internal/statusbar/IStatusBarService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/statusbar/IStatusBarService;
+HSPLcom/android/internal/statusbar/IStatusBarService;->addTile(Landroid/content/ComponentName;)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->clearNotificationEffects()V
+HSPLcom/android/internal/statusbar/IStatusBarService;->clickTile(Landroid/content/ComponentName;)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->collapsePanels()V
+HSPLcom/android/internal/statusbar/IStatusBarService;->disable(ILandroid/os/IBinder;Ljava/lang/String;)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->disable2(ILandroid/os/IBinder;Ljava/lang/String;)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->disable2ForUser(ILandroid/os/IBinder;Ljava/lang/String;I)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->disableForUser(ILandroid/os/IBinder;Ljava/lang/String;I)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->expandNotificationsPanel()V
+HSPLcom/android/internal/statusbar/IStatusBarService;->expandSettingsPanel(Ljava/lang/String;)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->handleSystemKey(I)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->onClearAllNotifications(I)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->onGlobalActionsHidden()V
+HSPLcom/android/internal/statusbar/IStatusBarService;->onGlobalActionsShown()V
+HSPLcom/android/internal/statusbar/IStatusBarService;->onNotificationActionClick(Ljava/lang/String;I)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->onNotificationClear(Ljava/lang/String;Ljava/lang/String;II)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->onNotificationClick(Ljava/lang/String;)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->onNotificationError(Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;I)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->onNotificationExpansionChanged(Ljava/lang/String;ZZ)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->onNotificationVisibilityChanged([Lcom/android/internal/statusbar/NotificationVisibility;[Lcom/android/internal/statusbar/NotificationVisibility;)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->onPanelHidden()V
+HSPLcom/android/internal/statusbar/IStatusBarService;->onPanelRevealed(ZI)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->reboot(Z)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->registerStatusBar(Lcom/android/internal/statusbar/IStatusBar;Ljava/util/List;Ljava/util/List;[ILjava/util/List;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->remTile(Landroid/content/ComponentName;)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->removeIcon(Ljava/lang/String;)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->setIcon(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->setIconVisibility(Ljava/lang/String;Z)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->setImeWindowStatus(Landroid/os/IBinder;IIZ)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->setSystemUiVisibility(IILjava/lang/String;)V
+HSPLcom/android/internal/statusbar/IStatusBarService;->shutdown()V
+HSPLcom/android/internal/statusbar/IStatusBarService;->togglePanel()V
+HSPLcom/android/internal/statusbar/StatusBarIcon$1;-><init>()V
+HSPLcom/android/internal/statusbar/StatusBarIcon;-><init>(Landroid/os/UserHandle;Ljava/lang/String;Landroid/graphics/drawable/Icon;IILjava/lang/CharSequence;)V
+HSPLcom/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
+HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCurrentTtyMode(Ljava/lang/String;)I
+HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getDefaultDialerPackage()Ljava/lang/String;
+HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getDefaultOutgoingPhoneAccount(Ljava/lang/String;Ljava/lang/String;)Landroid/telecom/PhoneAccountHandle;
+HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getPhoneAccount(Landroid/telecom/PhoneAccountHandle;)Landroid/telecom/PhoneAccount;
+HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getSimCallManager()Landroid/telecom/PhoneAccountHandle;
+HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getUserSelectedOutgoingPhoneAccount()Landroid/telecom/PhoneAccountHandle;
+HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->isInCall(Ljava/lang/String;)Z
+HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->registerPhoneAccount(Landroid/telecom/PhoneAccount;)V
+HSPLcom/android/internal/telecom/ITelecomService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telecom/ITelecomService;
+HSPLcom/android/internal/telecom/ITelecomService;->acceptRingingCall(Ljava/lang/String;)V
+HSPLcom/android/internal/telecom/ITelecomService;->acceptRingingCallWithVideoState(Ljava/lang/String;I)V
+HSPLcom/android/internal/telecom/ITelecomService;->addNewIncomingCall(Landroid/telecom/PhoneAccountHandle;Landroid/os/Bundle;)V
+HSPLcom/android/internal/telecom/ITelecomService;->addNewUnknownCall(Landroid/telecom/PhoneAccountHandle;Landroid/os/Bundle;)V
+HSPLcom/android/internal/telecom/ITelecomService;->cancelMissedCallsNotification(Ljava/lang/String;)V
+HSPLcom/android/internal/telecom/ITelecomService;->clearAccounts(Ljava/lang/String;)V
+HSPLcom/android/internal/telecom/ITelecomService;->createManageBlockedNumbersIntent()Landroid/content/Intent;
+HSPLcom/android/internal/telecom/ITelecomService;->dumpCallAnalytics()Landroid/telecom/TelecomAnalytics;
+HSPLcom/android/internal/telecom/ITelecomService;->enablePhoneAccount(Landroid/telecom/PhoneAccountHandle;Z)Z
+HSPLcom/android/internal/telecom/ITelecomService;->endCall()Z
+HSPLcom/android/internal/telecom/ITelecomService;->getAdnUriForPhoneAccount(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;)Landroid/net/Uri;
+HSPLcom/android/internal/telecom/ITelecomService;->getAllPhoneAccountHandles()Ljava/util/List;
+HSPLcom/android/internal/telecom/ITelecomService;->getAllPhoneAccounts()Ljava/util/List;
+HSPLcom/android/internal/telecom/ITelecomService;->getAllPhoneAccountsCount()I
+HSPLcom/android/internal/telecom/ITelecomService;->getCallCapablePhoneAccounts(ZLjava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telecom/ITelecomService;->getCallState()I
+HSPLcom/android/internal/telecom/ITelecomService;->getCurrentTtyMode(Ljava/lang/String;)I
+HSPLcom/android/internal/telecom/ITelecomService;->getDefaultDialerPackage()Ljava/lang/String;
+HSPLcom/android/internal/telecom/ITelecomService;->getDefaultOutgoingPhoneAccount(Ljava/lang/String;Ljava/lang/String;)Landroid/telecom/PhoneAccountHandle;
+HSPLcom/android/internal/telecom/ITelecomService;->getDefaultPhoneApp()Landroid/content/ComponentName;
+HSPLcom/android/internal/telecom/ITelecomService;->getLine1Number(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telecom/ITelecomService;->getPhoneAccount(Landroid/telecom/PhoneAccountHandle;)Landroid/telecom/PhoneAccount;
+HSPLcom/android/internal/telecom/ITelecomService;->getPhoneAccountsForPackage(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telecom/ITelecomService;->getPhoneAccountsSupportingScheme(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telecom/ITelecomService;->getSelfManagedPhoneAccounts(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telecom/ITelecomService;->getSimCallManager()Landroid/telecom/PhoneAccountHandle;
+HSPLcom/android/internal/telecom/ITelecomService;->getSimCallManagerForUser(I)Landroid/telecom/PhoneAccountHandle;
+HSPLcom/android/internal/telecom/ITelecomService;->getSystemDialerPackage()Ljava/lang/String;
+HSPLcom/android/internal/telecom/ITelecomService;->getUserSelectedOutgoingPhoneAccount()Landroid/telecom/PhoneAccountHandle;
+HSPLcom/android/internal/telecom/ITelecomService;->getVoiceMailNumber(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telecom/ITelecomService;->handlePinMmi(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/internal/telecom/ITelecomService;->handlePinMmiForPhoneAccount(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/internal/telecom/ITelecomService;->isInCall(Ljava/lang/String;)Z
+HSPLcom/android/internal/telecom/ITelecomService;->isInManagedCall(Ljava/lang/String;)Z
+HSPLcom/android/internal/telecom/ITelecomService;->isIncomingCallPermitted(Landroid/telecom/PhoneAccountHandle;)Z
+HSPLcom/android/internal/telecom/ITelecomService;->isOutgoingCallPermitted(Landroid/telecom/PhoneAccountHandle;)Z
+HSPLcom/android/internal/telecom/ITelecomService;->isRinging(Ljava/lang/String;)Z
+HSPLcom/android/internal/telecom/ITelecomService;->isTtySupported(Ljava/lang/String;)Z
+HSPLcom/android/internal/telecom/ITelecomService;->isVoiceMailNumber(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/internal/telecom/ITelecomService;->placeCall(Landroid/net/Uri;Landroid/os/Bundle;Ljava/lang/String;)V
+HSPLcom/android/internal/telecom/ITelecomService;->registerPhoneAccount(Landroid/telecom/PhoneAccount;)V
+HSPLcom/android/internal/telecom/ITelecomService;->setDefaultDialer(Ljava/lang/String;)Z
+HSPLcom/android/internal/telecom/ITelecomService;->setUserSelectedOutgoingPhoneAccount(Landroid/telecom/PhoneAccountHandle;)V
+HSPLcom/android/internal/telecom/ITelecomService;->showInCallScreen(ZLjava/lang/String;)V
+HSPLcom/android/internal/telecom/ITelecomService;->silenceRinger(Ljava/lang/String;)V
+HSPLcom/android/internal/telecom/ITelecomService;->unregisterPhoneAccount(Landroid/telecom/PhoneAccountHandle;)V
+HSPLcom/android/internal/telecom/ITelecomService;->waitOnHandlers()V
+HSPLcom/android/internal/telephony/-$Lambda$jU5bqwYuQ4STkTfvA_3aFP2OGVg;-><init>()V
+HSPLcom/android/internal/telephony/AppSmsManager;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/BaseCommands;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/BaseCommands;->getRadioState()Lcom/android/internal/telephony/CommandsInterface$RadioState;
+HSPLcom/android/internal/telephony/BaseCommands;->registerForAvailable(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForCallStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForCdmaOtaProvision(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForCdmaSubscriptionChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForCellInfoList(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForDataCallListChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForDisplayInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForExitEmergencyCallbackMode(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForHardwareConfigChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForIccRefresh(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForIccStatusChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForImsNetworkStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForInCallVoicePrivacyOff(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForInCallVoicePrivacyOn(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForModemReset(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForNetworkStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForNotAvailable(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForOffOrNotAvailable(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForOn(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForPcoData(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForRadioCapabilityChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForRadioStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForResendIncallMute(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForRilConnected(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForRingbackTone(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForSignalInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForSrvccStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForSubscriptionStatusChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->registerForVoiceRadioTechChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setEmergencyCallbackMode(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setOnCallRing(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setOnIccSmsFull(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setOnNITZTime(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setOnNewCdmaSms(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setOnNewGsmBroadcastSms(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setOnNewGsmSms(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setOnRestrictedStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setOnSignalStrengthUpdate(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setOnSmsStatus(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setOnSs(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setOnSuppServiceNotification(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setOnUSSD(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setOnUnsolOemHookRaw(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/BaseCommands;->setRadioState(Lcom/android/internal/telephony/CommandsInterface$RadioState;)V
+HSPLcom/android/internal/telephony/BaseCommands;->unregisterForCallWaitingInfo(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/BaseCommands;->unregisterForCdmaOtaProvision(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/BaseCommands;->unregisterForCdmaPrlChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/Call$SrvccState;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/Call$State;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/Call$State;->isAlive()Z
+HSPLcom/android/internal/telephony/Call$State;->isRinging()Z
+HSPLcom/android/internal/telephony/Call;-><init>()V
+HSPLcom/android/internal/telephony/Call;->getState()Lcom/android/internal/telephony/Call$State;
+HSPLcom/android/internal/telephony/Call;->isIdle()Z
+HSPLcom/android/internal/telephony/Call;->isRinging()Z
+HSPLcom/android/internal/telephony/CallManager$CallManagerHandler;-><init>(Lcom/android/internal/telephony/CallManager;)V
+HSPLcom/android/internal/telephony/CallManager$CallManagerHandler;-><init>(Lcom/android/internal/telephony/CallManager;Lcom/android/internal/telephony/CallManager$CallManagerHandler;)V
+HSPLcom/android/internal/telephony/CallManager$CallManagerHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/CallManager;-><init>()V
+HSPLcom/android/internal/telephony/CallManager;->getInstance()Lcom/android/internal/telephony/CallManager;
+HSPLcom/android/internal/telephony/CallManager;->registerForDisconnect(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CallManager;->registerForDisplayInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CallManager;->registerForInCallVoicePrivacyOff(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CallManager;->registerForInCallVoicePrivacyOn(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CallManager;->registerForMmiComplete(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CallManager;->registerForPhoneStates(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/CallManager;->registerForPreciseCallStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CallManager;->registerForSignalInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CallManager;->registerForSuppServiceFailed(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CallManager;->registerForTtyModeReceived(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CallManager;->registerPhone(Lcom/android/internal/telephony/Phone;)Z
+HSPLcom/android/internal/telephony/CallTracker;-><init>()V
+HSPLcom/android/internal/telephony/CallTracker;->checkNoOperationsPending()Z
+HSPLcom/android/internal/telephony/CallTracker;->handleRadioAvailable()V
+HSPLcom/android/internal/telephony/CallTracker;->pollCallsWhenSafe()V
+HSPLcom/android/internal/telephony/CallerInfoAsyncQuery$OnQueryCompleteListener;->onQueryComplete(ILjava/lang/Object;Lcom/android/internal/telephony/CallerInfo;)V
+HSPLcom/android/internal/telephony/CarrierActionAgent$1;-><init>(Lcom/android/internal/telephony/CarrierActionAgent;)V
+HSPLcom/android/internal/telephony/CarrierActionAgent$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/internal/telephony/CarrierActionAgent;-><init>(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/CarrierActionAgent;->carrierActionReportDefaultNetworkStatus(Z)V
+HSPLcom/android/internal/telephony/CarrierActionAgent;->carrierActionReset()V
+HSPLcom/android/internal/telephony/CarrierActionAgent;->carrierActionSetMeteredApnsEnabled(Z)V
+HSPLcom/android/internal/telephony/CarrierActionAgent;->carrierActionSetRadioEnabled(Z)V
+HSPLcom/android/internal/telephony/CarrierActionAgent;->getCarrierActionEnabled(I)Ljava/lang/Boolean;
+HSPLcom/android/internal/telephony/CarrierActionAgent;->getRegistrantsFromAction(I)Landroid/os/RegistrantList;
+HSPLcom/android/internal/telephony/CarrierActionAgent;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/CarrierActionAgent;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/CarrierActionAgent;->loge(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/CarrierActionAgent;->registerForCarrierAction(ILandroid/os/Handler;ILjava/lang/Object;Z)V
+HSPLcom/android/internal/telephony/CarrierAppUtils;->disableCarrierAppsUntilPrivileged(Ljava/lang/String;Landroid/content/pm/IPackageManager;Landroid/telephony/TelephonyManager;Landroid/content/ContentResolver;I)V
+HSPLcom/android/internal/telephony/CarrierAppUtils;->disableCarrierAppsUntilPrivileged(Ljava/lang/String;Landroid/content/pm/IPackageManager;Landroid/telephony/TelephonyManager;Landroid/content/ContentResolver;I[Ljava/lang/String;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;I[Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telephony/CarrierAppUtils;->getDefaultCarrierAssociatedAppsHelper(Landroid/content/pm/IPackageManager;ILandroid/util/ArrayMap;)Ljava/util/Map;
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper$1;-><init>(Lcom/android/internal/telephony/CarrierServiceBindHelper;)V
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper$2;-><init>(Lcom/android/internal/telephony/CarrierServiceBindHelper;)V
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper$2;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper$AppBinding;-><init>(Lcom/android/internal/telephony/CarrierServiceBindHelper;I)V
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper$AppBinding;->getPhoneId()I
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper$AppBinding;->rebind()V
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper$AppBinding;->unbind(Z)V
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper$CarrierServicePackageMonitor;-><init>(Lcom/android/internal/telephony/CarrierServiceBindHelper;)V
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper$CarrierServicePackageMonitor;-><init>(Lcom/android/internal/telephony/CarrierServiceBindHelper;Lcom/android/internal/telephony/CarrierServiceBindHelper$CarrierServicePackageMonitor;)V
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper;->-get1(Lcom/android/internal/telephony/CarrierServiceBindHelper;)Landroid/content/Context;
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper;->-wrap0(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/CarrierServiceBindHelper;->updateForPhoneId(ILjava/lang/String;)V
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker$1;-><init>(Lcom/android/internal/telephony/CarrierServiceStateTracker;)V
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker$EmergencyNetworkNotification;-><init>(Lcom/android/internal/telephony/CarrierServiceStateTracker;I)V
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker$EmergencyNetworkNotification;->getTypeId()I
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker$EmergencyNetworkNotification;->sendMessage()Z
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker$PrefNetworkNotification;-><init>(Lcom/android/internal/telephony/CarrierServiceStateTracker;I)V
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker$PrefNetworkNotification;->getTypeId()I
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker$PrefNetworkNotification;->sendMessage()Z
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->-get2(Lcom/android/internal/telephony/CarrierServiceStateTracker;)Lcom/android/internal/telephony/ServiceStateTracker;
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->-wrap0(Lcom/android/internal/telephony/CarrierServiceStateTracker;)Z
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->-wrap1(Lcom/android/internal/telephony/CarrierServiceStateTracker;)Z
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->-wrap2(Lcom/android/internal/telephony/CarrierServiceStateTracker;)Z
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->-wrap3(Lcom/android/internal/telephony/CarrierServiceStateTracker;)Z
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;-><init>(Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/ServiceStateTracker;)V
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->cancelNotification(I)V
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->evaluateSendingMessage(Lcom/android/internal/telephony/CarrierServiceStateTracker$NotificationType;)Z
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->getNotificationManager(Landroid/content/Context;)Landroid/app/NotificationManager;
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->handleConfigChanges()V
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->isGlobalMode()Z
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->isPhoneRegisteredForWifiCalling()Z
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->isPhoneStillRegistered()Z
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->isPhoneVoiceRegistered()Z
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->isRadioOffOrAirplaneMode()Z
+HSPLcom/android/internal/telephony/CarrierServiceStateTracker;->registerNotificationTypes()V
+HSPLcom/android/internal/telephony/CarrierSignalAgent$1;-><init>(Lcom/android/internal/telephony/CarrierSignalAgent;)V
+HSPLcom/android/internal/telephony/CarrierSignalAgent;-><init>(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/CarrierSignalAgent;->loadCarrierConfig()V
+HSPLcom/android/internal/telephony/CarrierSignalAgent;->notifyCarrierSignalReceivers(Landroid/content/Intent;)V
+HSPLcom/android/internal/telephony/CellBroadcastHandler;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/CellBroadcastHandler;-><init>(Ljava/lang/String;Landroid/content/Context;Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/CellBroadcastHandler;->makeCellBroadcastHandler(Landroid/content/Context;Lcom/android/internal/telephony/Phone;)Lcom/android/internal/telephony/CellBroadcastHandler;
+HSPLcom/android/internal/telephony/ClientWakelockAccountant;-><init>(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/ClientWakelockAccountant;->changeConcurrentRequests(IJ)V
+HSPLcom/android/internal/telephony/ClientWakelockAccountant;->completeRequest(Lcom/android/internal/telephony/RilWakelockInfo;J)V
+HSPLcom/android/internal/telephony/ClientWakelockAccountant;->getPendingRequestCount()I
+HSPLcom/android/internal/telephony/ClientWakelockAccountant;->removePendingWakelock(II)Lcom/android/internal/telephony/RilWakelockInfo;
+HSPLcom/android/internal/telephony/ClientWakelockAccountant;->startAttributingWakelock(IIIJ)V
+HSPLcom/android/internal/telephony/ClientWakelockAccountant;->stopAttributingWakelock(IIJ)V
+HSPLcom/android/internal/telephony/ClientWakelockTracker;-><init>()V
+HSPLcom/android/internal/telephony/ClientWakelockTracker;->getClientWakelockAccountant(Ljava/lang/String;)Lcom/android/internal/telephony/ClientWakelockAccountant;
+HSPLcom/android/internal/telephony/ClientWakelockTracker;->isClientActive(Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ClientWakelockTracker;->startTracking(Ljava/lang/String;III)V
+HSPLcom/android/internal/telephony/ClientWakelockTracker;->stopTracking(Ljava/lang/String;III)V
+HSPLcom/android/internal/telephony/ClientWakelockTracker;->updateConcurrentRequests(IJ)V
+HSPLcom/android/internal/telephony/CommandException$Error;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/CommandException;-><init>(Lcom/android/internal/telephony/CommandException$Error;)V
+HSPLcom/android/internal/telephony/CommandException;->fromRilErrno(I)Lcom/android/internal/telephony/CommandException;
+HSPLcom/android/internal/telephony/CommandsInterface$RadioState;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/CommandsInterface$RadioState;->isAvailable()Z
+HSPLcom/android/internal/telephony/CommandsInterface$RadioState;->isOn()Z
+HSPLcom/android/internal/telephony/CommandsInterface$RadioState;->values()[Lcom/android/internal/telephony/CommandsInterface$RadioState;
+HSPLcom/android/internal/telephony/CommandsInterface;->getLteOnCdmaMode()I
+HSPLcom/android/internal/telephony/CommandsInterface;->getRadioState()Lcom/android/internal/telephony/CommandsInterface$RadioState;
+HSPLcom/android/internal/telephony/CommandsInterface;->getRilVersion()I
+HSPLcom/android/internal/telephony/CommandsInterface;->registerFoT53ClirlInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForAvailable(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForCallStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForCallWaitingInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForCarrierInfoForImsiEncryption(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForCdmaOtaProvision(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForCdmaPrlChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForCdmaSubscriptionChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForCellInfoList(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForDataCallListChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForDisplayInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForExitEmergencyCallbackMode(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForHardwareConfigChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForIccRefresh(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForIccStatusChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForImsNetworkStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForInCallVoicePrivacyOff(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForInCallVoicePrivacyOn(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForLceInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForLineControlInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForModemReset(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForNetworkScanResult(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForNetworkStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForNotAvailable(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForNumberInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForOffOrNotAvailable(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForOn(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForPcoData(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForRadioCapabilityChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForRadioStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForRedirectedNumberInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForResendIncallMute(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForRilConnected(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForRingbackTone(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForSignalInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForSrvccStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForSubscriptionStatusChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForT53AudioControlInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->registerForVoiceRadioTechChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setEmergencyCallbackMode(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnCallRing(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnCatCallSetUp(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnCatCcAlphaNotify(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnCatEvent(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnCatProactiveCmd(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnCatSessionEnd(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnIccRefresh(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnIccSmsFull(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnNewCdmaSms(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnNewGsmBroadcastSms(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnNewGsmSms(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnRestrictedStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnSignalStrengthUpdate(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnSmsOnSim(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnSmsStatus(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnSs(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnSuppServiceNotification(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnUSSD(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->setOnUnsolOemHookRaw(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnCallRing(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnCatCallSetUp(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnCatCcAlphaNotify(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnCatEvent(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnCatProactiveCmd(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnCatSessionEnd(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnIccSmsFull(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnNITZTime(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnNewCdmaSms(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnNewGsmBroadcastSms(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnNewGsmSms(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnRestrictedStateChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnSignalStrengthUpdate(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnSmsOnSim(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnSmsStatus(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnSs(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnSuppServiceNotification(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnUSSD(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unSetOnUnsolOemHookRaw(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForAvailable(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForCallStateChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForCallWaitingInfo(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForCarrierInfoForImsiEncryption(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForCdmaOtaProvision(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForCdmaPrlChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForCdmaSubscriptionChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForCellInfoList(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForDataCallListChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForDisplayInfo(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForExitEmergencyCallbackMode(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForHardwareConfigChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForIccRefresh(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForIccStatusChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForImsNetworkStateChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForInCallVoicePrivacyOff(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForInCallVoicePrivacyOn(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForLceInfo(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForLineControlInfo(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForModemReset(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForNetworkScanResult(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForNetworkStateChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForNotAvailable(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForNumberInfo(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForOffOrNotAvailable(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForOn(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForPcoData(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForRadioCapabilityChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForRadioStateChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForRedirectedNumberInfo(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForResendIncallMute(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForRilConnected(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForRingbackTone(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForSignalInfo(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForSrvccStateChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForSubscriptionStatusChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForT53AudioControlInfo(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForT53ClirInfo(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unregisterForVoiceRadioTechChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/CommandsInterface;->unsetOnIccRefresh(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/Connection;->cancelPostDial()V
+HSPLcom/android/internal/telephony/Connection;->getCall()Lcom/android/internal/telephony/Call;
+HSPLcom/android/internal/telephony/Connection;->getDisconnectTime()J
+HSPLcom/android/internal/telephony/Connection;->getHoldDurationMillis()J
+HSPLcom/android/internal/telephony/Connection;->getNumberPresentation()I
+HSPLcom/android/internal/telephony/Connection;->getPreciseDisconnectCause()I
+HSPLcom/android/internal/telephony/Connection;->getUUSInfo()Lcom/android/internal/telephony/UUSInfo;
+HSPLcom/android/internal/telephony/Connection;->getVendorDisconnectCause()Ljava/lang/String;
+HSPLcom/android/internal/telephony/Connection;->hangup()V
+HSPLcom/android/internal/telephony/Connection;->isMultiparty()Z
+HSPLcom/android/internal/telephony/Connection;->proceedAfterWaitChar()V
+HSPLcom/android/internal/telephony/Connection;->proceedAfterWildChar(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/Connection;->separate()V
+HSPLcom/android/internal/telephony/DctConstants$Activity;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/DctConstants$State;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/DctConstants$State;->values()[Lcom/android/internal/telephony/DctConstants$State;
+HSPLcom/android/internal/telephony/DebugService;-><init>()V
+HSPLcom/android/internal/telephony/DebugService;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/DefaultPhoneNotifier;->-getcom-android-internal-telephony-PhoneInternalInterface$DataActivityStateSwitchesValues()[I
+HSPLcom/android/internal/telephony/DefaultPhoneNotifier;-><init>()V
+HSPLcom/android/internal/telephony/DefaultPhoneNotifier;->convertDataActivityState(Lcom/android/internal/telephony/PhoneInternalInterface$DataActivityState;)I
+HSPLcom/android/internal/telephony/DefaultPhoneNotifier;->doNotifyDataConnection(Lcom/android/internal/telephony/Phone;Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/PhoneConstants$DataState;)V
+HSPLcom/android/internal/telephony/DefaultPhoneNotifier;->notifyDataActivationStateChanged(Lcom/android/internal/telephony/Phone;I)V
+HSPLcom/android/internal/telephony/DefaultPhoneNotifier;->notifyDataActivity(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/DefaultPhoneNotifier;->notifyDataConnection(Lcom/android/internal/telephony/Phone;Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/PhoneConstants$DataState;)V
+HSPLcom/android/internal/telephony/DefaultPhoneNotifier;->notifyMessageWaitingChanged(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/DefaultPhoneNotifier;->notifyOemHookRawEventForSubscriber(I[B)V
+HSPLcom/android/internal/telephony/DefaultPhoneNotifier;->notifyOtaspChanged(Lcom/android/internal/telephony/Phone;I)V
+HSPLcom/android/internal/telephony/DefaultPhoneNotifier;->notifyServiceState(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/DefaultPhoneNotifier;->notifySignalStrength(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/DefaultPhoneNotifier;->notifyVoiceActivationStateChanged(Lcom/android/internal/telephony/Phone;I)V
+HSPLcom/android/internal/telephony/DeviceStateMonitor$1;-><init>(Lcom/android/internal/telephony/DeviceStateMonitor;)V
+HSPLcom/android/internal/telephony/DeviceStateMonitor$2;-><init>(Lcom/android/internal/telephony/DeviceStateMonitor;)V
+HSPLcom/android/internal/telephony/DeviceStateMonitor$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/internal/telephony/DeviceStateMonitor;->-wrap2(Lcom/android/internal/telephony/DeviceStateMonitor;Ljava/lang/String;Z)V
+HSPLcom/android/internal/telephony/DeviceStateMonitor;-><init>(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/DeviceStateMonitor;->deviceTypeToString(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/DeviceStateMonitor;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/DeviceStateMonitor;->isDeviceCharging()Z
+HSPLcom/android/internal/telephony/DeviceStateMonitor;->isPowerSaveModeOn()Z
+HSPLcom/android/internal/telephony/DeviceStateMonitor;->isScreenOn()Z
+HSPLcom/android/internal/telephony/DeviceStateMonitor;->log(Ljava/lang/String;Z)V
+HSPLcom/android/internal/telephony/DeviceStateMonitor;->onRilConnected()V
+HSPLcom/android/internal/telephony/DeviceStateMonitor;->sendDeviceState(IZ)V
+HSPLcom/android/internal/telephony/DeviceStateMonitor;->setUnsolResponseFilter(IZ)V
+HSPLcom/android/internal/telephony/DeviceStateMonitor;->updateDeviceState(IZ)V
+HSPLcom/android/internal/telephony/ExponentialBackoff;-><init>(JJILandroid/os/Handler;Ljava/lang/Runnable;)V
+HSPLcom/android/internal/telephony/GsmCdmaCall;-><init>(Lcom/android/internal/telephony/GsmCdmaCallTracker;)V
+HSPLcom/android/internal/telephony/GsmCdmaCallTracker$1;-><init>(Lcom/android/internal/telephony/GsmCdmaCallTracker;)V
+HSPLcom/android/internal/telephony/GsmCdmaCallTracker;-><init>(Lcom/android/internal/telephony/GsmCdmaPhone;)V
+HSPLcom/android/internal/telephony/GsmCdmaCallTracker;->getState()Lcom/android/internal/telephony/PhoneConstants$State;
+HSPLcom/android/internal/telephony/GsmCdmaCallTracker;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/GsmCdmaCallTracker;->handlePollCalls(Landroid/os/AsyncResult;)V
+HSPLcom/android/internal/telephony/GsmCdmaCallTracker;->isPhoneTypeGsm()Z
+HSPLcom/android/internal/telephony/GsmCdmaCallTracker;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/GsmCdmaCallTracker;->registerForCallWaiting(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/GsmCdmaCallTracker;->registerForVoiceCallEnded(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/GsmCdmaCallTracker;->registerForVoiceCallStarted(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/GsmCdmaCallTracker;->unregisterForCallWaiting(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/GsmCdmaCallTracker;->updatePhoneState()V
+HSPLcom/android/internal/telephony/GsmCdmaCallTracker;->updatePhoneType(Z)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone$1;-><init>(Lcom/android/internal/telephony/GsmCdmaPhone;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone$2;-><init>(Lcom/android/internal/telephony/GsmCdmaPhone;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->-getcom-android-internal-telephony-DctConstants$StateSwitchesValues()[I
+HSPLcom/android/internal/telephony/GsmCdmaPhone;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;Lcom/android/internal/telephony/PhoneNotifier;IILcom/android/internal/telephony/TelephonyComponentFactory;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;Lcom/android/internal/telephony/PhoneNotifier;ZIILcom/android/internal/telephony/TelephonyComponentFactory;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getBackgroundCall()Lcom/android/internal/telephony/Call;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getBackgroundCall()Lcom/android/internal/telephony/GsmCdmaCall;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getCallTracker()Lcom/android/internal/telephony/CallTracker;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getDataActivityState()Lcom/android/internal/telephony/PhoneInternalInterface$DataActivityState;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getDataConnectionState(Ljava/lang/String;)Lcom/android/internal/telephony/PhoneConstants$DataState;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getForegroundCall()Lcom/android/internal/telephony/Call;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getForegroundCall()Lcom/android/internal/telephony/GsmCdmaCall;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getIccCard()Lcom/android/internal/telephony/IccCard;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getLine1Number()Ljava/lang/String;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getOperatorNumeric()Ljava/lang/String;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getPhoneType()I
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getRingingCall()Lcom/android/internal/telephony/Call;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getServiceState()Landroid/telephony/ServiceState;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getServiceStateTracker()Lcom/android/internal/telephony/ServiceStateTracker;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getSubscriberId()Ljava/lang/String;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->getUiccCardApplication()Lcom/android/internal/telephony/uicc/UiccCardApplication;
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->handleRadioAvailable()V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->handleRadioOffOrNotAvailable()V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->handleRadioOn()V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->initOnce(Lcom/android/internal/telephony/CommandsInterface;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->initRatSpecific(I)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->isInEmergencyCall()Z
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->isPhoneTypeCdma()Z
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->isPhoneTypeCdmaLte()Z
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->isPhoneTypeGsm()Z
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->logd(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->notifyServiceStateChanged(Landroid/telephony/ServiceState;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->onUpdateIccAvailability()V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->phoneObjectUpdater(I)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->registerForCallWaiting(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->registerForCdmaOtaStatusChange(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->registerForEcmTimerReset(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->registerForSubscriptionInfoReady(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->setSystemProperty(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->setTTYMode(ILandroid/os/Message;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->setUiTTYMode(ILandroid/os/Message;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->unregisterForCallWaiting(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->unregisterForEriFileLoaded(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->unregisterForSimRecordsLoaded(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->updateCurrentCarrierInProvider()Z
+HSPLcom/android/internal/telephony/GsmCdmaPhone;->updateVoiceMail()V
+HSPLcom/android/internal/telephony/HardwareConfig;-><init>(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/HardwareConfig;->assignModem(Ljava/lang/String;IIIIII)V
+HSPLcom/android/internal/telephony/HardwareConfig;->assignSim(Ljava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/internal/telephony/HardwareConfig;->toString()Ljava/lang/String;
+HSPLcom/android/internal/telephony/ICarrierConfigLoader$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/telephony/ICarrierConfigLoader$Stub$Proxy;->getConfigForSubId(I)Landroid/os/PersistableBundle;
+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;->getConfigForSubId(I)Landroid/os/PersistableBundle;
+HSPLcom/android/internal/telephony/ICarrierConfigLoader;->getDefaultCarrierServicePackageName()Ljava/lang/String;
+HSPLcom/android/internal/telephony/ICarrierConfigLoader;->notifyConfigChangedForSubId(I)V
+HSPLcom/android/internal/telephony/ICarrierConfigLoader;->updateConfigForPhoneId(ILjava/lang/String;)V
+HSPLcom/android/internal/telephony/IIccPhoneBook$Stub;-><init>()V
+HSPLcom/android/internal/telephony/IIccPhoneBook;->getAdnRecordsInEf(I)Ljava/util/List;
+HSPLcom/android/internal/telephony/IIccPhoneBook;->getAdnRecordsInEfForSubscriber(II)Ljava/util/List;
+HSPLcom/android/internal/telephony/IIccPhoneBook;->getAdnRecordsSize(I)[I
+HSPLcom/android/internal/telephony/IIccPhoneBook;->getAdnRecordsSizeForSubscriber(II)[I
+HSPLcom/android/internal/telephony/IIccPhoneBook;->updateAdnRecordsInEfByIndex(ILjava/lang/String;Ljava/lang/String;ILjava/lang/String;)Z
+HSPLcom/android/internal/telephony/IIccPhoneBook;->updateAdnRecordsInEfByIndexForSubscriber(IILjava/lang/String;Ljava/lang/String;ILjava/lang/String;)Z
+HSPLcom/android/internal/telephony/IIccPhoneBook;->updateAdnRecordsInEfBySearch(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/IIccPhoneBook;->updateAdnRecordsInEfBySearchForSubscriber(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub;-><init>()V
+HSPLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/internal/telephony/IOnSubscriptionsChangedListener;->onSubscriptionsChanged()V
+HSPLcom/android/internal/telephony/IPhoneStateListener$Stub;-><init>()V
+HSPLcom/android/internal/telephony/IPhoneStateListener$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onCallForwardingIndicatorChanged(Z)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onCallStateChanged(ILjava/lang/String;)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onCarrierNetworkChange(Z)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onCellInfoChanged(Ljava/util/List;)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onCellLocationChanged(Landroid/os/Bundle;)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onDataActivationStateChanged(I)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onDataActivity(I)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onDataConnectionRealTimeInfoChanged(Landroid/telephony/DataConnectionRealTimeInfo;)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onDataConnectionStateChanged(II)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onMessageWaitingIndicatorChanged(Z)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onOemHookRawEvent([B)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onOtaspChanged(I)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onPreciseCallStateChanged(Landroid/telephony/PreciseCallState;)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onPreciseDataConnectionStateChanged(Landroid/telephony/PreciseDataConnectionState;)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onServiceStateChanged(Landroid/telephony/ServiceState;)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onSignalStrengthChanged(I)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onSignalStrengthsChanged(Landroid/telephony/SignalStrength;)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onVoLteServiceStateChanged(Landroid/telephony/VoLteServiceState;)V
+HSPLcom/android/internal/telephony/IPhoneStateListener;->onVoiceActivationStateChanged(I)V
+HSPLcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getDeviceIdForPhone(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getLine1NumberForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getSubscriberIdForSubscriber(ILjava/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;->getCarrierInfoForImsiEncryption(IILjava/lang/String;)Landroid/telephony/ImsiEncryptionInfo;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getCompleteVoiceMailNumber()Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getCompleteVoiceMailNumberForSubscriber(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getDeviceId(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getDeviceIdForPhone(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getDeviceSvn(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getDeviceSvnUsingSubId(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getGroupIdLevel1(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getGroupIdLevel1ForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getIccSerialNumber(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getIccSerialNumberForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getIccSimChallengeResponse(IIILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getImeiForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getIsimChallengeResponse(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getIsimDomain()Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getIsimImpi()Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getIsimImpu()[Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getIsimIst()Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getIsimPcscf()[Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getLine1AlphaTag(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getLine1AlphaTagForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getLine1Number(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getLine1NumberForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getMsisdn(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getMsisdnForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getNaiForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getSubscriberId(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getSubscriberIdForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getVoiceMailAlphaTag(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getVoiceMailAlphaTagForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getVoiceMailNumber(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->getVoiceMailNumberForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IPhoneSubInfo;->setCarrierInfoForImsiEncryption(ILjava/lang/String;Landroid/telephony/ImsiEncryptionInfo;)V
+HSPLcom/android/internal/telephony/ISms$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+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;
+HSPLcom/android/internal/telephony/ISms;->copyMessageToIccEfForSubscriber(ILjava/lang/String;I[B[B)Z
+HSPLcom/android/internal/telephony/ISms;->createAppSpecificSmsToken(ILjava/lang/String;Landroid/app/PendingIntent;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ISms;->disableCellBroadcastForSubscriber(III)Z
+HSPLcom/android/internal/telephony/ISms;->disableCellBroadcastRangeForSubscriber(IIII)Z
+HSPLcom/android/internal/telephony/ISms;->enableCellBroadcastForSubscriber(III)Z
+HSPLcom/android/internal/telephony/ISms;->enableCellBroadcastRangeForSubscriber(IIII)Z
+HSPLcom/android/internal/telephony/ISms;->getAllMessagesFromIccEfForSubscriber(ILjava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telephony/ISms;->getImsSmsFormatForSubscriber(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ISms;->getPreferredSmsSubscription()I
+HSPLcom/android/internal/telephony/ISms;->getPremiumSmsPermission(Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/ISms;->getPremiumSmsPermissionForSubscriber(ILjava/lang/String;)I
+HSPLcom/android/internal/telephony/ISms;->injectSmsPduForSubscriber(I[BLjava/lang/String;Landroid/app/PendingIntent;)V
+HSPLcom/android/internal/telephony/ISms;->isImsSmsSupportedForSubscriber(I)Z
+HSPLcom/android/internal/telephony/ISms;->isSMSPromptEnabled()Z
+HSPLcom/android/internal/telephony/ISms;->isSmsSimPickActivityNeeded(I)Z
+HSPLcom/android/internal/telephony/ISms;->sendDataForSubscriber(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V
+HSPLcom/android/internal/telephony/ISms;->sendDataForSubscriberWithSelfPermissions(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V
+HSPLcom/android/internal/telephony/ISms;->sendMultipartTextForSubscriber(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;Z)V
+HSPLcom/android/internal/telephony/ISms;->sendStoredMultipartText(ILjava/lang/String;Landroid/net/Uri;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
+HSPLcom/android/internal/telephony/ISms;->sendStoredText(ILjava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V
+HSPLcom/android/internal/telephony/ISms;->sendTextForSubscriber(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;Z)V
+HSPLcom/android/internal/telephony/ISms;->sendTextForSubscriberWithSelfPermissions(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;Z)V
+HSPLcom/android/internal/telephony/ISms;->setPremiumSmsPermission(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/ISms;->setPremiumSmsPermissionForSubscriber(ILjava/lang/String;I)V
+HSPLcom/android/internal/telephony/ISms;->updateMessageOnIccEfForSubscriber(ILjava/lang/String;II[B)Z
+HSPLcom/android/internal/telephony/ISub$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getActiveSubInfoCount(Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getActiveSubscriptionInfoList(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;->getSimStateForSlotIndex(I)I
+HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getSlotIndex(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/ISub;->addSubInfoRecord(Ljava/lang/String;I)I
+HSPLcom/android/internal/telephony/ISub;->clearDefaultsForInactiveSubIds()V
+HSPLcom/android/internal/telephony/ISub;->clearSubInfo()I
+HSPLcom/android/internal/telephony/ISub;->getAccessibleSubscriptionInfoList(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telephony/ISub;->getActiveSubIdList()[I
+HSPLcom/android/internal/telephony/ISub;->getActiveSubInfoCount(Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/ISub;->getActiveSubInfoCountMax()I
+HSPLcom/android/internal/telephony/ISub;->getActiveSubscriptionInfo(ILjava/lang/String;)Landroid/telephony/SubscriptionInfo;
+HSPLcom/android/internal/telephony/ISub;->getActiveSubscriptionInfoForIccId(Ljava/lang/String;Ljava/lang/String;)Landroid/telephony/SubscriptionInfo;
+HSPLcom/android/internal/telephony/ISub;->getActiveSubscriptionInfoForSimSlotIndex(ILjava/lang/String;)Landroid/telephony/SubscriptionInfo;
+HSPLcom/android/internal/telephony/ISub;->getActiveSubscriptionInfoList(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telephony/ISub;->getAllSubInfoCount(Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/ISub;->getAllSubInfoList(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telephony/ISub;->getAvailableSubscriptionInfoList(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telephony/ISub;->getDefaultDataSubId()I
+HSPLcom/android/internal/telephony/ISub;->getDefaultSmsSubId()I
+HSPLcom/android/internal/telephony/ISub;->getDefaultSubId()I
+HSPLcom/android/internal/telephony/ISub;->getDefaultVoiceSubId()I
+HSPLcom/android/internal/telephony/ISub;->getPhoneId(I)I
+HSPLcom/android/internal/telephony/ISub;->getSimStateForSlotIndex(I)I
+HSPLcom/android/internal/telephony/ISub;->getSlotIndex(I)I
+HSPLcom/android/internal/telephony/ISub;->getSubId(I)[I
+HSPLcom/android/internal/telephony/ISub;->getSubscriptionProperty(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ISub;->isActiveSubId(I)Z
+HSPLcom/android/internal/telephony/ISub;->requestEmbeddedSubscriptionInfoListRefresh()V
+HSPLcom/android/internal/telephony/ISub;->setDataRoaming(II)I
+HSPLcom/android/internal/telephony/ISub;->setDefaultDataSubId(I)V
+HSPLcom/android/internal/telephony/ISub;->setDefaultSmsSubId(I)V
+HSPLcom/android/internal/telephony/ISub;->setDefaultVoiceSubId(I)V
+HSPLcom/android/internal/telephony/ISub;->setDisplayName(Ljava/lang/String;I)I
+HSPLcom/android/internal/telephony/ISub;->setDisplayNameUsingSrc(Ljava/lang/String;IJ)I
+HSPLcom/android/internal/telephony/ISub;->setDisplayNumber(Ljava/lang/String;I)I
+HSPLcom/android/internal/telephony/ISub;->setIconTint(II)I
+HSPLcom/android/internal/telephony/ISub;->setSubscriptionProperty(ILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->checkCarrierPrivilegesForPackage(Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getActivePhoneTypeForSlot(I)I
+HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getDeviceId(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getImsServiceControllerAndListen(IILcom/android/ims/internal/IImsServiceFeatureListener;)Lcom/android/ims/internal/IImsServiceController;
+HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getLine1NumberForDisplay(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getNetworkCountryIsoForPhone(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getVisualVoicemailPackageName(Ljava/lang/String;I)Ljava/lang/String;
+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;->answerRingingCall()V
+HSPLcom/android/internal/telephony/ITelephony;->answerRingingCallForSubscriber(I)V
+HSPLcom/android/internal/telephony/ITelephony;->call(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/ITelephony;->canChangeDtmfToneLength()Z
+HSPLcom/android/internal/telephony/ITelephony;->carrierActionReportDefaultNetworkStatus(IZ)V
+HSPLcom/android/internal/telephony/ITelephony;->carrierActionSetMeteredApnsEnabled(IZ)V
+HSPLcom/android/internal/telephony/ITelephony;->carrierActionSetRadioEnabled(IZ)V
+HSPLcom/android/internal/telephony/ITelephony;->checkCarrierPrivilegesForPackage(Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->checkCarrierPrivilegesForPackageAnyPhone(Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->dial(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/ITelephony;->disableDataConnectivity()Z
+HSPLcom/android/internal/telephony/ITelephony;->disableLocationUpdates()V
+HSPLcom/android/internal/telephony/ITelephony;->disableLocationUpdatesForSubscriber(I)V
+HSPLcom/android/internal/telephony/ITelephony;->disableVisualVoicemailSmsFilter(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/ITelephony;->enableDataConnectivity()Z
+HSPLcom/android/internal/telephony/ITelephony;->enableLocationUpdates()V
+HSPLcom/android/internal/telephony/ITelephony;->enableLocationUpdatesForSubscriber(I)V
+HSPLcom/android/internal/telephony/ITelephony;->enableVideoCalling(Z)V
+HSPLcom/android/internal/telephony/ITelephony;->enableVisualVoicemailSmsFilter(Ljava/lang/String;ILandroid/telephony/VisualVoicemailSmsFilterSettings;)V
+HSPLcom/android/internal/telephony/ITelephony;->endCall()Z
+HSPLcom/android/internal/telephony/ITelephony;->endCallForSubscriber(I)Z
+HSPLcom/android/internal/telephony/ITelephony;->factoryReset(I)V
+HSPLcom/android/internal/telephony/ITelephony;->getActivePhoneType()I
+HSPLcom/android/internal/telephony/ITelephony;->getActivePhoneTypeForSlot(I)I
+HSPLcom/android/internal/telephony/ITelephony;->getActiveVisualVoicemailSmsFilterSettings(I)Landroid/telephony/VisualVoicemailSmsFilterSettings;
+HSPLcom/android/internal/telephony/ITelephony;->getAidForAppType(II)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getAllCellInfo(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telephony/ITelephony;->getAllowedCarriers(I)Ljava/util/List;
+HSPLcom/android/internal/telephony/ITelephony;->getCalculatedPreferredNetworkType(Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getCallState()I
+HSPLcom/android/internal/telephony/ITelephony;->getCallStateForSlot(I)I
+HSPLcom/android/internal/telephony/ITelephony;->getCarrierPackageNamesForIntentAndPhone(Landroid/content/Intent;I)Ljava/util/List;
+HSPLcom/android/internal/telephony/ITelephony;->getCarrierPrivilegeStatus(I)I
+HSPLcom/android/internal/telephony/ITelephony;->getCdmaEriIconIndex(Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getCdmaEriIconIndexForSubscriber(ILjava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getCdmaEriIconMode(Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getCdmaEriIconModeForSubscriber(ILjava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getCdmaEriText(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getCdmaEriTextForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getCdmaMdn(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getCdmaMin(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getCdmaPrlVersion(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getCellLocation(Ljava/lang/String;)Landroid/os/Bundle;
+HSPLcom/android/internal/telephony/ITelephony;->getCellNetworkScanResults(I)Lcom/android/internal/telephony/CellNetworkScanResult;
+HSPLcom/android/internal/telephony/ITelephony;->getClientRequestStats(Ljava/lang/String;I)Ljava/util/List;
+HSPLcom/android/internal/telephony/ITelephony;->getDataActivationState(ILjava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getDataActivity()I
+HSPLcom/android/internal/telephony/ITelephony;->getDataEnabled(I)Z
+HSPLcom/android/internal/telephony/ITelephony;->getDataNetworkType(Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getDataNetworkTypeForSubscriber(ILjava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getDataState()I
+HSPLcom/android/internal/telephony/ITelephony;->getDefaultSim()I
+HSPLcom/android/internal/telephony/ITelephony;->getDeviceId(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getDeviceSoftwareVersionForSlot(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getEmergencyCallbackMode(I)Z
+HSPLcom/android/internal/telephony/ITelephony;->getEsn(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getForbiddenPlmns(II)[Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getImeiForSlot(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getImsServiceControllerAndListen(IILcom/android/ims/internal/IImsServiceFeatureListener;)Lcom/android/ims/internal/IImsServiceController;
+HSPLcom/android/internal/telephony/ITelephony;->getLine1AlphaTagForDisplay(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getLine1NumberForDisplay(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getLocaleFromDefaultSim()Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getLteOnCdmaMode(Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getLteOnCdmaModeForSubscriber(ILjava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getMeidForSlot(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getMergedSubscriberIds(Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getNeighboringCellInfo(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telephony/ITelephony;->getNetworkCountryIsoForPhone(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getNetworkType()I
+HSPLcom/android/internal/telephony/ITelephony;->getNetworkTypeForSubscriber(ILjava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getPackagesWithCarrierPrivileges()Ljava/util/List;
+HSPLcom/android/internal/telephony/ITelephony;->getPcscfAddress(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getPreferredNetworkType(I)I
+HSPLcom/android/internal/telephony/ITelephony;->getRadioAccessFamily(ILjava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getServiceStateForSubscriber(ILjava/lang/String;)Landroid/telephony/ServiceState;
+HSPLcom/android/internal/telephony/ITelephony;->getSignalStrength(I)Landroid/telephony/SignalStrength;
+HSPLcom/android/internal/telephony/ITelephony;->getSubIdForPhoneAccount(Landroid/telecom/PhoneAccount;)I
+HSPLcom/android/internal/telephony/ITelephony;->getTelephonyHistograms()Ljava/util/List;
+HSPLcom/android/internal/telephony/ITelephony;->getTetherApnRequired()I
+HSPLcom/android/internal/telephony/ITelephony;->getVisualVoicemailPackageName(Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->getVisualVoicemailSettings(Ljava/lang/String;I)Landroid/os/Bundle;
+HSPLcom/android/internal/telephony/ITelephony;->getVisualVoicemailSmsFilterSettings(Ljava/lang/String;I)Landroid/telephony/VisualVoicemailSmsFilterSettings;
+HSPLcom/android/internal/telephony/ITelephony;->getVoiceActivationState(ILjava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getVoiceMessageCount()I
+HSPLcom/android/internal/telephony/ITelephony;->getVoiceMessageCountForSubscriber(I)I
+HSPLcom/android/internal/telephony/ITelephony;->getVoiceNetworkTypeForSubscriber(ILjava/lang/String;)I
+HSPLcom/android/internal/telephony/ITelephony;->getVoicemailRingtoneUri(Landroid/telecom/PhoneAccountHandle;)Landroid/net/Uri;
+HSPLcom/android/internal/telephony/ITelephony;->getVtDataUsage(IZ)Landroid/net/NetworkStats;
+HSPLcom/android/internal/telephony/ITelephony;->handlePinMmi(Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->handlePinMmiForSubscriber(ILjava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->handleUssdRequest(ILjava/lang/String;Landroid/os/ResultReceiver;)V
+HSPLcom/android/internal/telephony/ITelephony;->hasIccCard()Z
+HSPLcom/android/internal/telephony/ITelephony;->hasIccCardUsingSlotIndex(I)Z
+HSPLcom/android/internal/telephony/ITelephony;->iccCloseLogicalChannel(II)Z
+HSPLcom/android/internal/telephony/ITelephony;->iccExchangeSimIO(IIIIIILjava/lang/String;)[B
+HSPLcom/android/internal/telephony/ITelephony;->iccOpenLogicalChannel(ILjava/lang/String;Ljava/lang/String;I)Landroid/telephony/IccOpenLogicalChannelResponse;
+HSPLcom/android/internal/telephony/ITelephony;->iccTransmitApduBasicChannel(IIIIIILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->iccTransmitApduLogicalChannel(IIIIIIILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->invokeOemRilRequestRaw([B[B)I
+HSPLcom/android/internal/telephony/ITelephony;->isConcurrentVoiceAndDataAllowed(I)Z
+HSPLcom/android/internal/telephony/ITelephony;->isDataConnectivityPossible(I)Z
+HSPLcom/android/internal/telephony/ITelephony;->isHearingAidCompatibilitySupported()Z
+HSPLcom/android/internal/telephony/ITelephony;->isIdle(Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->isIdleForSubscriber(ILjava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->isImsRegistered()Z
+HSPLcom/android/internal/telephony/ITelephony;->isOffhook(Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->isOffhookForSubscriber(ILjava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->isRadioOn(Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->isRadioOnForSubscriber(ILjava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->isRinging(Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->isRingingForSubscriber(ILjava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->isTtyModeSupported()Z
+HSPLcom/android/internal/telephony/ITelephony;->isVideoCallingEnabled(Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->isVideoTelephonyAvailable()Z
+HSPLcom/android/internal/telephony/ITelephony;->isVoicemailVibrationEnabled(Landroid/telecom/PhoneAccountHandle;)Z
+HSPLcom/android/internal/telephony/ITelephony;->isVolteAvailable()Z
+HSPLcom/android/internal/telephony/ITelephony;->isWifiCallingAvailable()Z
+HSPLcom/android/internal/telephony/ITelephony;->isWorldPhone()Z
+HSPLcom/android/internal/telephony/ITelephony;->needMobileRadioShutdown()Z
+HSPLcom/android/internal/telephony/ITelephony;->needsOtaServiceProvisioning()Z
+HSPLcom/android/internal/telephony/ITelephony;->nvReadItem(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->nvResetConfig(I)Z
+HSPLcom/android/internal/telephony/ITelephony;->nvWriteCdmaPrl([B)Z
+HSPLcom/android/internal/telephony/ITelephony;->nvWriteItem(ILjava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->requestModemActivityInfo(Landroid/os/ResultReceiver;)V
+HSPLcom/android/internal/telephony/ITelephony;->requestNetworkScan(ILandroid/telephony/NetworkScanRequest;Landroid/os/Messenger;Landroid/os/IBinder;)I
+HSPLcom/android/internal/telephony/ITelephony;->sendDialerSpecialCode(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/ITelephony;->sendEnvelopeWithStatus(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/ITelephony;->sendVisualVoicemailSmsForSubscriber(Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;Landroid/app/PendingIntent;)V
+HSPLcom/android/internal/telephony/ITelephony;->setAllowedCarriers(ILjava/util/List;)I
+HSPLcom/android/internal/telephony/ITelephony;->setCellInfoListRate(I)V
+HSPLcom/android/internal/telephony/ITelephony;->setDataActivationState(II)V
+HSPLcom/android/internal/telephony/ITelephony;->setDataEnabled(IZ)V
+HSPLcom/android/internal/telephony/ITelephony;->setImsRegistrationState(Z)V
+HSPLcom/android/internal/telephony/ITelephony;->setLine1NumberForDisplayForSubscriber(ILjava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->setNetworkSelectionModeAutomatic(I)V
+HSPLcom/android/internal/telephony/ITelephony;->setNetworkSelectionModeManual(ILcom/android/internal/telephony/OperatorInfo;Z)Z
+HSPLcom/android/internal/telephony/ITelephony;->setOperatorBrandOverride(ILjava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->setPolicyDataEnabled(ZI)V
+HSPLcom/android/internal/telephony/ITelephony;->setPreferredNetworkType(II)Z
+HSPLcom/android/internal/telephony/ITelephony;->setRadio(Z)Z
+HSPLcom/android/internal/telephony/ITelephony;->setRadioCapability([Landroid/telephony/RadioAccessFamily;)V
+HSPLcom/android/internal/telephony/ITelephony;->setRadioForSubscriber(IZ)Z
+HSPLcom/android/internal/telephony/ITelephony;->setRadioPower(Z)Z
+HSPLcom/android/internal/telephony/ITelephony;->setRoamingOverride(ILjava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Z
+HSPLcom/android/internal/telephony/ITelephony;->setSimPowerStateForSlot(II)V
+HSPLcom/android/internal/telephony/ITelephony;->setVoiceActivationState(II)V
+HSPLcom/android/internal/telephony/ITelephony;->setVoiceMailNumber(ILjava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->setVoicemailRingtoneUri(Ljava/lang/String;Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;)V
+HSPLcom/android/internal/telephony/ITelephony;->setVoicemailVibrationEnabled(Ljava/lang/String;Landroid/telecom/PhoneAccountHandle;Z)V
+HSPLcom/android/internal/telephony/ITelephony;->shutdownMobileRadios()V
+HSPLcom/android/internal/telephony/ITelephony;->silenceRinger()V
+HSPLcom/android/internal/telephony/ITelephony;->stopNetworkScan(II)V
+HSPLcom/android/internal/telephony/ITelephony;->supplyPin(Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->supplyPinForSubscriber(ILjava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->supplyPinReportResult(Ljava/lang/String;)[I
+HSPLcom/android/internal/telephony/ITelephony;->supplyPinReportResultForSubscriber(ILjava/lang/String;)[I
+HSPLcom/android/internal/telephony/ITelephony;->supplyPuk(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->supplyPukForSubscriber(ILjava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ITelephony;->supplyPukReportResult(Ljava/lang/String;Ljava/lang/String;)[I
+HSPLcom/android/internal/telephony/ITelephony;->supplyPukReportResultForSubscriber(ILjava/lang/String;Ljava/lang/String;)[I
+HSPLcom/android/internal/telephony/ITelephony;->toggleRadioOnOff()V
+HSPLcom/android/internal/telephony/ITelephony;->toggleRadioOnOffForSubscriber(I)V
+HSPLcom/android/internal/telephony/ITelephony;->updateServiceLocation()V
+HSPLcom/android/internal/telephony/ITelephony;->updateServiceLocationForSubscriber(I)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->addOnSubscriptionsChangedListener(Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->listenForSubscriber(ILjava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;IZ)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyDataActivityForSubscriber(II)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyDataConnectionForSubscriber(IIZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;IZ)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyMessageWaitingChangedForPhoneId(IIZ)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyOemHookRawEventForSubscriber(I[B)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;->notifyOtaspChanged(I)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;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ITelephonyRegistry;
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->addOnSubscriptionsChangedListener(Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->listen(Ljava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;IZ)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->listenForSubscriber(ILjava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;IZ)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyCallForwardingChanged(Z)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyCallForwardingChangedForSubscriber(IZ)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyCallState(ILjava/lang/String;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyCallStateForPhoneId(IIILjava/lang/String;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyCarrierNetworkChange(Z)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyCellInfo(Ljava/util/List;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyCellInfoForSubscriber(ILjava/util/List;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyCellLocation(Landroid/os/Bundle;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyCellLocationForSubscriber(ILandroid/os/Bundle;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyDataActivity(I)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyDataActivityForSubscriber(II)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyDataConnection(IZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;IZ)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyDataConnectionFailed(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyDataConnectionFailedForSubscriber(ILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyDataConnectionForSubscriber(IIZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;IZ)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyDisconnectCause(II)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyMessageWaitingChangedForPhoneId(IIZ)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyOemHookRawEventForSubscriber(I[B)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyOtaspChanged(I)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyPreciseCallState(III)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyPreciseDataConnectionFailed(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyServiceStateForPhoneId(IILandroid/telephony/ServiceState;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifySignalStrengthForPhoneId(IILandroid/telephony/SignalStrength;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifySimActivationStateChangedForPhoneId(IIII)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifySubscriptionInfoChanged()V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->notifyVoLteServiceStateChanged(Landroid/telephony/VoLteServiceState;)V
+HSPLcom/android/internal/telephony/ITelephonyRegistry;->removeOnSubscriptionsChangedListener(Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
+HSPLcom/android/internal/telephony/IccCard;->changeIccFdnPassword(Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/IccCard;->changeIccLockPassword(Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/IccCard;->getIccFdnAvailable()Z
+HSPLcom/android/internal/telephony/IccCard;->getIccFdnEnabled()Z
+HSPLcom/android/internal/telephony/IccCard;->getIccFileHandler()Lcom/android/internal/telephony/uicc/IccFileHandler;
+HSPLcom/android/internal/telephony/IccCard;->getIccLockEnabled()Z
+HSPLcom/android/internal/telephony/IccCard;->getIccPin2Blocked()Z
+HSPLcom/android/internal/telephony/IccCard;->getIccPuk2Blocked()Z
+HSPLcom/android/internal/telephony/IccCard;->getIccRecords()Lcom/android/internal/telephony/uicc/IccRecords;
+HSPLcom/android/internal/telephony/IccCard;->getServiceProviderName()Ljava/lang/String;
+HSPLcom/android/internal/telephony/IccCard;->getState()Lcom/android/internal/telephony/IccCardConstants$State;
+HSPLcom/android/internal/telephony/IccCard;->hasIccCard()Z
+HSPLcom/android/internal/telephony/IccCard;->isApplicationOnIcc(Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;)Z
+HSPLcom/android/internal/telephony/IccCard;->registerForAbsent(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/IccCard;->registerForLocked(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/IccCard;->registerForNetworkLocked(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/IccCard;->setIccFdnEnabled(ZLjava/lang/String;Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/IccCard;->setIccLockEnabled(ZLjava/lang/String;Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/IccCard;->supplyNetworkDepersonalization(Ljava/lang/String;Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/IccCard;->supplyPin(Ljava/lang/String;Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/IccCard;->supplyPin2(Ljava/lang/String;Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/IccCard;->supplyPuk(Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/IccCard;->supplyPuk2(Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/IccCard;->unregisterForAbsent(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/IccCard;->unregisterForLocked(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/IccCard;->unregisterForNetworkLocked(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/IccCardConstants$State;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/IccCardConstants$State;->values()[Lcom/android/internal/telephony/IccCardConstants$State;
+HSPLcom/android/internal/telephony/IccPhoneBookInterfaceManager$1;-><init>(Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;)V
+HSPLcom/android/internal/telephony/IccPhoneBookInterfaceManager;-><init>(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/IccPhoneBookInterfaceManager;->updateIccRecords(Lcom/android/internal/telephony/uicc/IccRecords;)V
+HSPLcom/android/internal/telephony/IccProvider;-><init>()V
+HSPLcom/android/internal/telephony/IccProvider;->getType(Landroid/net/Uri;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/IccProvider;->onCreate()Z
+HSPLcom/android/internal/telephony/IccSmsInterfaceManager$1;-><init>(Lcom/android/internal/telephony/IccSmsInterfaceManager;)V
+HSPLcom/android/internal/telephony/IccSmsInterfaceManager$CdmaBroadcastRangeManager;-><init>(Lcom/android/internal/telephony/IccSmsInterfaceManager;)V
+HSPLcom/android/internal/telephony/IccSmsInterfaceManager$CellBroadcastRangeManager;-><init>(Lcom/android/internal/telephony/IccSmsInterfaceManager;)V
+HSPLcom/android/internal/telephony/IccSmsInterfaceManager;-><init>(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/ImsSMSDispatcher;-><init>(Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/SmsStorageMonitor;Lcom/android/internal/telephony/SmsUsageMonitor;)V
+HSPLcom/android/internal/telephony/ImsSMSDispatcher;->getFormat()Ljava/lang/String;
+HSPLcom/android/internal/telephony/ImsSMSDispatcher;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/ImsSMSDispatcher;->setImsSmsFormat(I)V
+HSPLcom/android/internal/telephony/ImsSMSDispatcher;->updateImsInfo(Landroid/os/AsyncResult;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler$1;-><init>()V
+HSPLcom/android/internal/telephony/InboundSmsHandler$DefaultState;-><init>(Lcom/android/internal/telephony/InboundSmsHandler;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler$DefaultState;-><init>(Lcom/android/internal/telephony/InboundSmsHandler;Lcom/android/internal/telephony/InboundSmsHandler$DefaultState;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler$DeliveringState;-><init>(Lcom/android/internal/telephony/InboundSmsHandler;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler$DeliveringState;-><init>(Lcom/android/internal/telephony/InboundSmsHandler;Lcom/android/internal/telephony/InboundSmsHandler$DeliveringState;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler$IdleState;-><init>(Lcom/android/internal/telephony/InboundSmsHandler;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler$IdleState;-><init>(Lcom/android/internal/telephony/InboundSmsHandler;Lcom/android/internal/telephony/InboundSmsHandler$IdleState;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler$IdleState;->enter()V
+HSPLcom/android/internal/telephony/InboundSmsHandler$IdleState;->processMessage(Landroid/os/Message;)Z
+HSPLcom/android/internal/telephony/InboundSmsHandler$NewMessageNotificationActionReceiver;-><init>()V
+HSPLcom/android/internal/telephony/InboundSmsHandler$NewMessageNotificationActionReceiver;-><init>(Lcom/android/internal/telephony/InboundSmsHandler$NewMessageNotificationActionReceiver;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler$StartupState;-><init>(Lcom/android/internal/telephony/InboundSmsHandler;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler$StartupState;-><init>(Lcom/android/internal/telephony/InboundSmsHandler;Lcom/android/internal/telephony/InboundSmsHandler$StartupState;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler$StartupState;->enter()V
+HSPLcom/android/internal/telephony/InboundSmsHandler$StartupState;->processMessage(Landroid/os/Message;)Z
+HSPLcom/android/internal/telephony/InboundSmsHandler$WaitingState;-><init>(Lcom/android/internal/telephony/InboundSmsHandler;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler$WaitingState;-><init>(Lcom/android/internal/telephony/InboundSmsHandler;Lcom/android/internal/telephony/InboundSmsHandler$WaitingState;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler;->-get2(Lcom/android/internal/telephony/InboundSmsHandler;)Lcom/android/internal/telephony/InboundSmsHandler$IdleState;
+HSPLcom/android/internal/telephony/InboundSmsHandler;->-get4(Lcom/android/internal/telephony/InboundSmsHandler;)Landroid/os/PowerManager$WakeLock;
+HSPLcom/android/internal/telephony/InboundSmsHandler;->-wrap9(Lcom/android/internal/telephony/InboundSmsHandler;I)V
+HSPLcom/android/internal/telephony/InboundSmsHandler;-><init>(Ljava/lang/String;Landroid/content/Context;Lcom/android/internal/telephony/SmsStorageMonitor;Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/CellBroadcastHandler;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler;->getWakeLockTimeout()I
+HSPLcom/android/internal/telephony/InboundSmsHandler;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler;->registerNewMessageNotificationActionHandler(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/InboundSmsHandler;->setWakeLockTimeout(I)V
+HSPLcom/android/internal/telephony/IntRangeManager;-><init>()V
+HSPLcom/android/internal/telephony/IntentBroadcaster$1;-><init>(Lcom/android/internal/telephony/IntentBroadcaster;)V
+HSPLcom/android/internal/telephony/IntentBroadcaster;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/IntentBroadcaster;->broadcastStickyIntent(Landroid/content/Intent;I)V
+HSPLcom/android/internal/telephony/IntentBroadcaster;->getInstance()Lcom/android/internal/telephony/IntentBroadcaster;
+HSPLcom/android/internal/telephony/IntentBroadcaster;->getInstance(Landroid/content/Context;)Lcom/android/internal/telephony/IntentBroadcaster;
+HSPLcom/android/internal/telephony/IntentBroadcaster;->logd(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/NetworkScanRequestTracker$1;-><init>(Lcom/android/internal/telephony/NetworkScanRequestTracker;)V
+HSPLcom/android/internal/telephony/NetworkScanRequestTracker$NetworkScanRequestScheduler;-><init>(Lcom/android/internal/telephony/NetworkScanRequestTracker;)V
+HSPLcom/android/internal/telephony/NetworkScanRequestTracker$NetworkScanRequestScheduler;-><init>(Lcom/android/internal/telephony/NetworkScanRequestTracker;Lcom/android/internal/telephony/NetworkScanRequestTracker$NetworkScanRequestScheduler;)V
+HSPLcom/android/internal/telephony/NetworkScanRequestTracker;-><init>()V
+HSPLcom/android/internal/telephony/OemHookIndication;-><init>(Lcom/android/internal/telephony/RIL;)V
+HSPLcom/android/internal/telephony/OemHookIndication;->oemHookRaw(ILjava/util/ArrayList;)V
+HSPLcom/android/internal/telephony/OemHookResponse;-><init>(Lcom/android/internal/telephony/RIL;)V
+HSPLcom/android/internal/telephony/Phone$1;-><init>(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/Phone;-><init>(Ljava/lang/String;Lcom/android/internal/telephony/PhoneNotifier;Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;Z)V
+HSPLcom/android/internal/telephony/Phone;-><init>(Ljava/lang/String;Lcom/android/internal/telephony/PhoneNotifier;Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;ZILcom/android/internal/telephony/TelephonyComponentFactory;)V
+HSPLcom/android/internal/telephony/Phone;->checkCorrectThread(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/Phone;->getActionAttached()Ljava/lang/String;
+HSPLcom/android/internal/telephony/Phone;->getActionDetached()Ljava/lang/String;
+HSPLcom/android/internal/telephony/Phone;->getActiveApnHost(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/Phone;->getCarrierActionAgent()Lcom/android/internal/telephony/CarrierActionAgent;
+HSPLcom/android/internal/telephony/Phone;->getCarrierSignalAgent()Lcom/android/internal/telephony/CarrierSignalAgent;
+HSPLcom/android/internal/telephony/Phone;->getContext()Landroid/content/Context;
+HSPLcom/android/internal/telephony/Phone;->getHandler()Landroid/os/Handler;
+HSPLcom/android/internal/telephony/Phone;->getIccRecords()Lcom/android/internal/telephony/uicc/IccRecords;
+HSPLcom/android/internal/telephony/Phone;->getImsPhone()Lcom/android/internal/telephony/Phone;
+HSPLcom/android/internal/telephony/Phone;->getLocaleFromCarrierProperties(Landroid/content/Context;)Ljava/util/Locale;
+HSPLcom/android/internal/telephony/Phone;->getMessageWaitingIndicator()Z
+HSPLcom/android/internal/telephony/Phone;->getPhoneId()I
+HSPLcom/android/internal/telephony/Phone;->getPhoneName()Ljava/lang/String;
+HSPLcom/android/internal/telephony/Phone;->getSignalStrength()Landroid/telephony/SignalStrength;
+HSPLcom/android/internal/telephony/Phone;->getSimulatedRadioControl()Lcom/android/internal/telephony/test/SimulatedRadioControl;
+HSPLcom/android/internal/telephony/Phone;->getSubId()I
+HSPLcom/android/internal/telephony/Phone;->getUnitTestMode()Z
+HSPLcom/android/internal/telephony/Phone;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/Phone;->isDataAllowed()Z
+HSPLcom/android/internal/telephony/Phone;->isInEcm()Z
+HSPLcom/android/internal/telephony/Phone;->isShuttingDown()Z
+HSPLcom/android/internal/telephony/Phone;->isVideoEnabled()Z
+HSPLcom/android/internal/telephony/Phone;->isWifiCallingEnabled()Z
+HSPLcom/android/internal/telephony/Phone;->notifyDataActivationStateChanged(I)V
+HSPLcom/android/internal/telephony/Phone;->notifyDataActivity()V
+HSPLcom/android/internal/telephony/Phone;->notifyDataConnection(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/Phone;->notifyDataConnection(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/PhoneConstants$DataState;)V
+HSPLcom/android/internal/telephony/Phone;->notifyForVideoCapabilityChanged(Z)V
+HSPLcom/android/internal/telephony/Phone;->notifyMessageWaitingIndicator()V
+HSPLcom/android/internal/telephony/Phone;->notifyOtaspChanged(I)V
+HSPLcom/android/internal/telephony/Phone;->notifyServiceStateChangedP(Landroid/telephony/ServiceState;)V
+HSPLcom/android/internal/telephony/Phone;->notifySignalStrength()V
+HSPLcom/android/internal/telephony/Phone;->notifyVoiceActivationStateChanged(I)V
+HSPLcom/android/internal/telephony/Phone;->radioCapabilityUpdated(Lcom/android/internal/telephony/RadioCapability;)V
+HSPLcom/android/internal/telephony/Phone;->registerForCallWaiting(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForCdmaOtaStatusChange(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForDataEnabledChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForDisconnect(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForDisplayInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForEcmTimerReset(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForEmergencyCallToggle(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForInCallVoicePrivacyOff(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForInCallVoicePrivacyOn(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForIncomingRing(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForMmiComplete(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForMmiInitiate(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForNewRingingConnection(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForOnHoldTone(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForPreciseCallStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForRadioCapabilityChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForResendIncallMute(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForRingbackTone(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForServiceStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForSignalInfo(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForSubscriptionInfoReady(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForSuppServiceFailed(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForTtyModeReceived(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForUnknownConnection(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->registerForVideoCapabilityChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->setOnPostDialCharacter(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/Phone;->setPreferredNetworkTypeIfSimLoaded()V
+HSPLcom/android/internal/telephony/Phone;->setTTYMode(ILandroid/os/Message;)V
+HSPLcom/android/internal/telephony/Phone;->setUnitTestMode(Z)V
+HSPLcom/android/internal/telephony/Phone;->setVoiceMessageCount(I)V
+HSPLcom/android/internal/telephony/Phone;->startLceAfterRadioIsAvailable()V
+HSPLcom/android/internal/telephony/Phone;->startMonitoringImsService()V
+HSPLcom/android/internal/telephony/Phone;->unregisterForNewRingingConnection(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/Phone;->unregisterForUnknownConnection(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/Phone;->unregisterForVideoCapabilityChanged(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/Phone;->updateDataConnectionTracker()V
+HSPLcom/android/internal/telephony/Phone;->updateImsPhone()V
+HSPLcom/android/internal/telephony/PhoneConstantConversions;->-getcom-android-internal-telephony-PhoneConstants$DataStateSwitchesValues()[I
+HSPLcom/android/internal/telephony/PhoneConstantConversions;->convertDataState(Lcom/android/internal/telephony/PhoneConstants$DataState;)I
+HSPLcom/android/internal/telephony/PhoneConstants$DataState;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/PhoneConstants$DataState;->values()[Lcom/android/internal/telephony/PhoneConstants$DataState;
+HSPLcom/android/internal/telephony/PhoneConstants$State;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/PhoneFactory;->getDefaultPhone()Lcom/android/internal/telephony/Phone;
+HSPLcom/android/internal/telephony/PhoneFactory;->getImsResolver()Lcom/android/internal/telephony/ims/ImsResolver;
+HSPLcom/android/internal/telephony/PhoneFactory;->getPhone(I)Lcom/android/internal/telephony/Phone;
+HSPLcom/android/internal/telephony/PhoneFactory;->getPhones()[Lcom/android/internal/telephony/Phone;
+HSPLcom/android/internal/telephony/PhoneFactory;->makeDefaultPhone(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/PhoneFactory;->makeDefaultPhones(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/PhoneFactory;->makeImsPhone(Lcom/android/internal/telephony/PhoneNotifier;Lcom/android/internal/telephony/Phone;)Lcom/android/internal/telephony/Phone;
+HSPLcom/android/internal/telephony/PhoneInternalInterface$DataActivityState;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/PhoneInternalInterface$DataActivityState;->values()[Lcom/android/internal/telephony/PhoneInternalInterface$DataActivityState;
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyCallForwardingChanged(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyCellInfo(Lcom/android/internal/telephony/Phone;Ljava/util/List;)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyCellLocation(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyDataActivationStateChanged(Lcom/android/internal/telephony/Phone;I)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyDataActivity(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyDataConnection(Lcom/android/internal/telephony/Phone;Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/PhoneConstants$DataState;)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyDataConnectionFailed(Lcom/android/internal/telephony/Phone;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyDisconnectCause(II)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyMessageWaitingChanged(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyOemHookRawEventForSubscriber(I[B)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyOtaspChanged(Lcom/android/internal/telephony/Phone;I)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyPhoneState(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyPreciseCallState(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyPreciseDataConnectionFailed(Lcom/android/internal/telephony/Phone;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyServiceState(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifySignalStrength(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyVoLteServiceStateChanged(Lcom/android/internal/telephony/Phone;Landroid/telephony/VoLteServiceState;)V
+HSPLcom/android/internal/telephony/PhoneNotifier;->notifyVoiceActivationStateChanged(Lcom/android/internal/telephony/Phone;I)V
+HSPLcom/android/internal/telephony/PhoneSubInfoController;-><init>(Landroid/content/Context;[Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/PhoneSubInfoController;->checkReadPhoneNumber(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/PhoneSubInfoController;->getLine1NumberForSubscriber(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/PhoneSubInfoController;->getPhone(I)Lcom/android/internal/telephony/Phone;
+HSPLcom/android/internal/telephony/PhoneSwitcher$1;-><init>(Lcom/android/internal/telephony/PhoneSwitcher;)V
+HSPLcom/android/internal/telephony/PhoneSwitcher$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/internal/telephony/PhoneSwitcher$2;-><init>(Lcom/android/internal/telephony/PhoneSwitcher;)V
+HSPLcom/android/internal/telephony/PhoneSwitcher$2;->onSubscriptionsChanged()V
+HSPLcom/android/internal/telephony/PhoneSwitcher$PhoneState;-><init>()V
+HSPLcom/android/internal/telephony/PhoneSwitcher$PhoneState;-><init>(Lcom/android/internal/telephony/PhoneSwitcher$PhoneState;)V
+HSPLcom/android/internal/telephony/PhoneSwitcher$PhoneSwitcherNetworkRequestListener;-><init>(Landroid/os/Looper;Landroid/content/Context;Landroid/net/NetworkCapabilities;Lcom/android/internal/telephony/PhoneSwitcher;)V
+HSPLcom/android/internal/telephony/PhoneSwitcher$PhoneSwitcherNetworkRequestListener;->needNetworkFor(Landroid/net/NetworkRequest;I)V
+HSPLcom/android/internal/telephony/PhoneSwitcher;-><init>(IILandroid/content/Context;Lcom/android/internal/telephony/SubscriptionController;Landroid/os/Looper;Lcom/android/internal/telephony/ITelephonyRegistry;[Lcom/android/internal/telephony/CommandsInterface;[Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/PhoneSwitcher;->deactivate(I)V
+HSPLcom/android/internal/telephony/PhoneSwitcher;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/PhoneSwitcher;->isEmergency()Z
+HSPLcom/android/internal/telephony/PhoneSwitcher;->isPhoneActive(I)Z
+HSPLcom/android/internal/telephony/PhoneSwitcher;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/PhoneSwitcher;->onEvaluate(ZLjava/lang/String;)V
+HSPLcom/android/internal/telephony/PhoneSwitcher;->onRequestNetwork(Landroid/net/NetworkRequest;)V
+HSPLcom/android/internal/telephony/PhoneSwitcher;->phoneIdForRequest(Landroid/net/NetworkRequest;)I
+HSPLcom/android/internal/telephony/PhoneSwitcher;->registerForActivePhoneSwitch(ILandroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/PhoneSwitcher;->validatePhoneId(I)V
+HSPLcom/android/internal/telephony/ProxyController$1;-><init>(Lcom/android/internal/telephony/ProxyController;)V
+HSPLcom/android/internal/telephony/ProxyController;-><init>(Landroid/content/Context;[Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/uicc/UiccController;[Lcom/android/internal/telephony/CommandsInterface;Lcom/android/internal/telephony/PhoneSwitcher;)V
+HSPLcom/android/internal/telephony/ProxyController;->clearTransaction()V
+HSPLcom/android/internal/telephony/ProxyController;->getInstance()Lcom/android/internal/telephony/ProxyController;
+HSPLcom/android/internal/telephony/ProxyController;->getInstance(Landroid/content/Context;[Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/uicc/UiccController;[Lcom/android/internal/telephony/CommandsInterface;Lcom/android/internal/telephony/PhoneSwitcher;)Lcom/android/internal/telephony/ProxyController;
+HSPLcom/android/internal/telephony/ProxyController;->logd(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/RIL$RadioProxyDeathRecipient;-><init>(Lcom/android/internal/telephony/RIL;)V
+HSPLcom/android/internal/telephony/RIL$RilHandler;-><init>(Lcom/android/internal/telephony/RIL;)V
+HSPLcom/android/internal/telephony/RIL$RilHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->-wrap2(Lcom/android/internal/telephony/RIL;I)Z
+HSPLcom/android/internal/telephony/RIL;-><init>(Landroid/content/Context;IILjava/lang/Integer;)V
+HSPLcom/android/internal/telephony/RIL;->acquireWakeLock(Lcom/android/internal/telephony/RILRequest;I)V
+HSPLcom/android/internal/telephony/RIL;->addRequest(Lcom/android/internal/telephony/RILRequest;)V
+HSPLcom/android/internal/telephony/RIL;->addToRilHistogram(Lcom/android/internal/telephony/RILRequest;)V
+HSPLcom/android/internal/telephony/RIL;->arrayListToPrimitiveArray(Ljava/util/ArrayList;)[B
+HSPLcom/android/internal/telephony/RIL;->clearWakeLock(I)Z
+HSPLcom/android/internal/telephony/RIL;->convertHalHwConfigList(Ljava/util/ArrayList;Lcom/android/internal/telephony/RIL;)Ljava/util/ArrayList;
+HSPLcom/android/internal/telephony/RIL;->convertHalRadioCapability(Landroid/hardware/radio/V1_0/RadioCapability;Lcom/android/internal/telephony/RIL;)Lcom/android/internal/telephony/RadioCapability;
+HSPLcom/android/internal/telephony/RIL;->convertHalSignalStrength(Landroid/hardware/radio/V1_0/SignalStrength;)Landroid/telephony/SignalStrength;
+HSPLcom/android/internal/telephony/RIL;->decrementWakeLock(Lcom/android/internal/telephony/RILRequest;)V
+HSPLcom/android/internal/telephony/RIL;->findAndRemoveRequestFromList(I)Lcom/android/internal/telephony/RILRequest;
+HSPLcom/android/internal/telephony/RIL;->getBasebandVersion(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getCdmaSubscriptionSource(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getCurrentCalls(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getDataRegistrationState(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getDeafultWorkSourceIfInvalid(Landroid/os/WorkSource;)Landroid/os/WorkSource;
+HSPLcom/android/internal/telephony/RIL;->getDeviceIdentity(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getHardwareConfig(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getIccCardStatus(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getImsRegistrationState(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getNetworkSelectionMode(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getOemHookProxy(Landroid/os/Message;)Landroid/hardware/radio/deprecated/V1_0/IOemHook;
+HSPLcom/android/internal/telephony/RIL;->getOperator(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getRadioCapability(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getRadioProxy(Landroid/os/Message;)Landroid/hardware/radio/V1_0/IRadio;
+HSPLcom/android/internal/telephony/RIL;->getSignalStrength(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getVoiceRadioTechnology(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getVoiceRegistrationState(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->getWorkSourceClientId(Landroid/os/WorkSource;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/RIL;->notifyRegistrantsRilConnectionChanged(I)V
+HSPLcom/android/internal/telephony/RIL;->obtainRequest(ILandroid/os/Message;Landroid/os/WorkSource;)Lcom/android/internal/telephony/RILRequest;
+HSPLcom/android/internal/telephony/RIL;->processIndication(I)V
+HSPLcom/android/internal/telephony/RIL;->processResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)Lcom/android/internal/telephony/RILRequest;
+HSPLcom/android/internal/telephony/RIL;->processResponseDone(Lcom/android/internal/telephony/RILRequest;Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/Object;)V
+HSPLcom/android/internal/telephony/RIL;->requestToString(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/RIL;->responseToString(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/RIL;->retToString(ILjava/lang/Object;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/RIL;->riljLog(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/RIL;->riljLogv(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/RIL;->sendAck()V
+HSPLcom/android/internal/telephony/RIL;->sendDeviceState(IZLandroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->setCdmaSubscriptionSource(ILandroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->setCellInfoListRate()V
+HSPLcom/android/internal/telephony/RIL;->setCellInfoListRate(ILandroid/os/Message;Landroid/os/WorkSource;)V
+HSPLcom/android/internal/telephony/RIL;->setOnNITZTime(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/RIL;->setPhoneType(I)V
+HSPLcom/android/internal/telephony/RIL;->setRadioPower(ZLandroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->setUnsolResponseFilter(ILandroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->startLceService(IZLandroid/os/Message;)V
+HSPLcom/android/internal/telephony/RIL;->unsljLog(I)V
+HSPLcom/android/internal/telephony/RIL;->unsljLogMore(ILjava/lang/String;)V
+HSPLcom/android/internal/telephony/RIL;->unsljLogvRet(ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/RILRequest;-><init>()V
+HSPLcom/android/internal/telephony/RILRequest;->obtain(ILandroid/os/Message;)Lcom/android/internal/telephony/RILRequest;
+HSPLcom/android/internal/telephony/RILRequest;->obtain(ILandroid/os/Message;Landroid/os/WorkSource;)Lcom/android/internal/telephony/RILRequest;
+HSPLcom/android/internal/telephony/RILRequest;->onError(ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/RILRequest;->release()V
+HSPLcom/android/internal/telephony/RILRequest;->serialString()Ljava/lang/String;
+HSPLcom/android/internal/telephony/RadioCapability;-><init>(IIIILjava/lang/String;I)V
+HSPLcom/android/internal/telephony/RadioCapability;->getLogicalModemUuid()Ljava/lang/String;
+HSPLcom/android/internal/telephony/RadioCapability;->getPhase()I
+HSPLcom/android/internal/telephony/RadioCapability;->getRadioAccessFamily()I
+HSPLcom/android/internal/telephony/RadioCapability;->getSession()I
+HSPLcom/android/internal/telephony/RadioCapability;->getStatus()I
+HSPLcom/android/internal/telephony/RadioCapability;->getVersion()I
+HSPLcom/android/internal/telephony/RadioCapability;->toString()Ljava/lang/String;
+HSPLcom/android/internal/telephony/RadioIndication;-><init>(Lcom/android/internal/telephony/RIL;)V
+HSPLcom/android/internal/telephony/RadioIndication;->currentSignalStrength(ILandroid/hardware/radio/V1_0/SignalStrength;)V
+HSPLcom/android/internal/telephony/RadioIndication;->getRadioStateFromInt(I)Lcom/android/internal/telephony/CommandsInterface$RadioState;
+HSPLcom/android/internal/telephony/RadioIndication;->networkStateChanged(I)V
+HSPLcom/android/internal/telephony/RadioIndication;->radioStateChanged(II)V
+HSPLcom/android/internal/telephony/RadioIndication;->rilConnected(I)V
+HSPLcom/android/internal/telephony/RadioResponse;-><init>(Lcom/android/internal/telephony/RIL;)V
+HSPLcom/android/internal/telephony/RadioResponse;->getBasebandVersionResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/RadioResponse;->getCdmaSubscriptionSourceResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLcom/android/internal/telephony/RadioResponse;->getCurrentCallsResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLcom/android/internal/telephony/RadioResponse;->getDataRegistrationStateResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/DataRegStateResult;)V
+HSPLcom/android/internal/telephony/RadioResponse;->getDeviceIdentityResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/RadioResponse;->getHardwareConfigResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLcom/android/internal/telephony/RadioResponse;->getIccCardStatusResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/CardStatus;)V
+HSPLcom/android/internal/telephony/RadioResponse;->getImsRegistrationStateResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;ZI)V
+HSPLcom/android/internal/telephony/RadioResponse;->getNetworkSelectionModeResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Z)V
+HSPLcom/android/internal/telephony/RadioResponse;->getOperatorResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/RadioResponse;->getRadioCapabilityResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/RadioCapability;)V
+HSPLcom/android/internal/telephony/RadioResponse;->getSignalStrengthResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/SignalStrength;)V
+HSPLcom/android/internal/telephony/RadioResponse;->getVoiceRadioTechnologyResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;I)V
+HSPLcom/android/internal/telephony/RadioResponse;->getVoiceRegistrationStateResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/VoiceRegStateResult;)V
+HSPLcom/android/internal/telephony/RadioResponse;->responseCurrentCalls(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLcom/android/internal/telephony/RadioResponse;->responseHardwareConfig(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLcom/android/internal/telephony/RadioResponse;->responseIccCardStatus(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/CardStatus;)V
+HSPLcom/android/internal/telephony/RadioResponse;->responseIntArrayList(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLcom/android/internal/telephony/RadioResponse;->responseInts(Landroid/hardware/radio/V1_0/RadioResponseInfo;[I)V
+HSPLcom/android/internal/telephony/RadioResponse;->responseLceStatus(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/LceStatusInfo;)V
+HSPLcom/android/internal/telephony/RadioResponse;->responseSignalStrength(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/SignalStrength;)V
+HSPLcom/android/internal/telephony/RadioResponse;->responseString(Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/RadioResponse;->responseStringArrayList(Lcom/android/internal/telephony/RIL;Landroid/hardware/radio/V1_0/RadioResponseInfo;Ljava/util/ArrayList;)V
+HSPLcom/android/internal/telephony/RadioResponse;->responseStrings(Landroid/hardware/radio/V1_0/RadioResponseInfo;[Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/RadioResponse;->responseVoid(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLcom/android/internal/telephony/RadioResponse;->sendDeviceStateResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLcom/android/internal/telephony/RadioResponse;->sendMessageResponse(Landroid/os/Message;Ljava/lang/Object;)V
+HSPLcom/android/internal/telephony/RadioResponse;->setCdmaSubscriptionSourceResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLcom/android/internal/telephony/RadioResponse;->setCellInfoListRateResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLcom/android/internal/telephony/RadioResponse;->setIndicationFilterResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLcom/android/internal/telephony/RadioResponse;->setRadioPowerResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;)V
+HSPLcom/android/internal/telephony/RadioResponse;->startLceServiceResponse(Landroid/hardware/radio/V1_0/RadioResponseInfo;Landroid/hardware/radio/V1_0/LceStatusInfo;)V
+HSPLcom/android/internal/telephony/RatRatcheter$1;-><init>(Lcom/android/internal/telephony/RatRatcheter;)V
+HSPLcom/android/internal/telephony/RatRatcheter;-><init>(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/RatRatcheter;->ratchetRat(II)I
+HSPLcom/android/internal/telephony/RatRatcheter;->ratchetRat(Landroid/telephony/ServiceState;Landroid/telephony/ServiceState;)V
+HSPLcom/android/internal/telephony/RatRatcheter;->resetRatFamilyMap()V
+HSPLcom/android/internal/telephony/RestrictedState;-><init>()V
+HSPLcom/android/internal/telephony/RestrictedState;->isPsRestricted()Z
+HSPLcom/android/internal/telephony/RestrictedState;->setCsEmergencyRestricted(Z)V
+HSPLcom/android/internal/telephony/RestrictedState;->setCsNormalRestricted(Z)V
+HSPLcom/android/internal/telephony/RestrictedState;->setPsRestricted(Z)V
+HSPLcom/android/internal/telephony/RetryManager;-><init>(Lcom/android/internal/telephony/Phone;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/RetryManager;->getWaitingApns()Ljava/util/ArrayList;
+HSPLcom/android/internal/telephony/RilWakelockInfo;-><init>(IIIJ)V
+HSPLcom/android/internal/telephony/RilWakelockInfo;->getRilRequestSent()I
+HSPLcom/android/internal/telephony/RilWakelockInfo;->getTokenNumber()I
+HSPLcom/android/internal/telephony/RilWakelockInfo;->getWakelockTimeAttributedToClient()J
+HSPLcom/android/internal/telephony/RilWakelockInfo;->setResponseTime(J)V
+HSPLcom/android/internal/telephony/RilWakelockInfo;->updateConcurrentRequests(IJ)V
+HSPLcom/android/internal/telephony/RilWakelockInfo;->updateTime(J)V
+HSPLcom/android/internal/telephony/RilWakelockInfo;->validateConcurrentRequests(I)I
+HSPLcom/android/internal/telephony/SMSDispatcher$SettingsObserver;-><init>(Landroid/os/Handler;Ljava/util/concurrent/atomic/AtomicInteger;Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/SMSDispatcher$SettingsObserver;->onChange(Z)V
+HSPLcom/android/internal/telephony/SMSDispatcher;-><init>(Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/SmsUsageMonitor;Lcom/android/internal/telephony/ImsSMSDispatcher;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker$1;-><init>(Lcom/android/internal/telephony/ServiceStateTracker;Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker$2;-><init>(Lcom/android/internal/telephony/ServiceStateTracker;Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker$3;-><init>(Lcom/android/internal/telephony/ServiceStateTracker;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker$SstSubscriptionsChangedListener;-><init>(Lcom/android/internal/telephony/ServiceStateTracker;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker$SstSubscriptionsChangedListener;-><init>(Lcom/android/internal/telephony/ServiceStateTracker;Lcom/android/internal/telephony/ServiceStateTracker$SstSubscriptionsChangedListener;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker$SstSubscriptionsChangedListener;->onSubscriptionsChanged()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->-get4(Lcom/android/internal/telephony/ServiceStateTracker;)Lcom/android/internal/telephony/GsmCdmaPhone;
+HSPLcom/android/internal/telephony/ServiceStateTracker;->-getcom-android-internal-telephony-CommandsInterface$RadioStateSwitchesValues()[I
+HSPLcom/android/internal/telephony/ServiceStateTracker;-><init>(Lcom/android/internal/telephony/GsmCdmaPhone;Lcom/android/internal/telephony/CommandsInterface;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->alwaysOnHomeNetwork(Landroid/os/BaseBundle;)Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->cancelPollState()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->getCombinedRegState()I
+HSPLcom/android/internal/telephony/ServiceStateTracker;->getCurrentDataConnectionState()I
+HSPLcom/android/internal/telephony/ServiceStateTracker;->getDesiredPowerState()Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->getLteEarfcn(Landroid/hardware/radio/V1_0/DataRegStateResult;)I
+HSPLcom/android/internal/telephony/ServiceStateTracker;->getPhoneId()I
+HSPLcom/android/internal/telephony/ServiceStateTracker;->getPowerStateFromCarrier()Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->getRegStateFromHalRegState(I)I
+HSPLcom/android/internal/telephony/ServiceStateTracker;->getSignalStrength()Landroid/telephony/SignalStrength;
+HSPLcom/android/internal/telephony/ServiceStateTracker;->getUiccCardApplication()Lcom/android/internal/telephony/uicc/UiccCardApplication;
+HSPLcom/android/internal/telephony/ServiceStateTracker;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->handlePollStateResult(ILandroid/os/AsyncResult;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->handlePollStateResultMessage(ILandroid/os/AsyncResult;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->isDeviceShuttingDown()Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->isGprsConsistent(II)Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->isInNetwork(Landroid/os/BaseBundle;Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->isInvalidOperatorNumeric(Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->isMinInfoReady()Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->isNonRoamingInGsmNetwork(Landroid/os/BaseBundle;Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->isRadioOn()Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->isRoamingInGsmNetwork(Landroid/os/BaseBundle;Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->logPhoneTypeChange()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->modemTriggeredPollState()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->notifyDataRegStateRilRadioTechnologyChanged()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->notifySignalStrength()Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->onSignalStrengthResult(Landroid/os/AsyncResult;)Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->onUpdateIccAvailability()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->pollState(Z)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->pollStateDone()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->processCellLocationInfo(Landroid/telephony/CellLocation;Landroid/hardware/radio/V1_0/VoiceRegStateResult;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->queueNextSignalStrengthPoll()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->regCodeIsRoaming(I)Z
+HSPLcom/android/internal/telephony/ServiceStateTracker;->regCodeToServiceState(I)I
+HSPLcom/android/internal/telephony/ServiceStateTracker;->registerForDataConnectionAttached(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->registerForDataConnectionDetached(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->registerForDataRegStateOrRatChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->registerForDataRoamingOff(Landroid/os/Handler;ILjava/lang/Object;Z)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->registerForDataRoamingOn(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->registerForNetworkAttached(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->registerForNetworkDetached(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->registerForPsRestrictedDisabled(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->registerForPsRestrictedEnabled(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->registerForSubscriptionInfoReady(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->resetServiceStateInIwlanMode()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->setPowerStateToDesired()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->setRoamingType(Landroid/telephony/ServiceState;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->setSignalStrengthDefaultValues()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->unregisterForDataRoamingOff(Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->updateCarrierMccMncConfiguration(Ljava/lang/String;Ljava/lang/String;Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->updateOperatorNameFromEri()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->updatePhoneType()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->updateRoamingState()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->updateServiceStateLteEarfcnBoost(Landroid/telephony/ServiceState;I)V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->updateSpnDisplay()V
+HSPLcom/android/internal/telephony/ServiceStateTracker;->useDataRegStateForDataOnlyDevices()V
+HSPLcom/android/internal/telephony/SettingsObserver;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/SettingsObserver;->observe(Landroid/net/Uri;I)V
+HSPLcom/android/internal/telephony/SettingsObserver;->unobserve()V
+HSPLcom/android/internal/telephony/SimActivationTracker$1;-><init>(Lcom/android/internal/telephony/SimActivationTracker;)V
+HSPLcom/android/internal/telephony/SimActivationTracker$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/internal/telephony/SimActivationTracker;->-get0()Z
+HSPLcom/android/internal/telephony/SimActivationTracker;->-wrap0(Lcom/android/internal/telephony/SimActivationTracker;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/SimActivationTracker;-><init>(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/SimActivationTracker;->isValidActivationState(I)Z
+HSPLcom/android/internal/telephony/SimActivationTracker;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/SimActivationTracker;->setDataActivationState(I)V
+HSPLcom/android/internal/telephony/SimActivationTracker;->setVoiceActivationState(I)V
+HSPLcom/android/internal/telephony/SimActivationTracker;->toString(I)Ljava/lang/String;
+HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->-get6(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->-get7(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;)I
+HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->-set0(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->-set1(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->-set2(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->-set3(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->-set4(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->-set5(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->-set6(Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->isComplete()Z
+HSPLcom/android/internal/telephony/SmsApplication$SmsPackageMonitor;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/SmsApplication;->getApplication(Landroid/content/Context;ZI)Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;
+HSPLcom/android/internal/telephony/SmsApplication;->getApplicationCollectionInternal(Landroid/content/Context;I)Ljava/util/Collection;
+HSPLcom/android/internal/telephony/SmsApplication;->getApplicationForPackage(Ljava/util/Collection;Ljava/lang/String;)Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;
+HSPLcom/android/internal/telephony/SmsApplication;->getDefaultSmsApplication(Landroid/content/Context;Z)Landroid/content/ComponentName;
+HSPLcom/android/internal/telephony/SmsApplication;->getIncomingUserId(Landroid/content/Context;)I
+HSPLcom/android/internal/telephony/SmsApplication;->initSmsPackageMonitor(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/SmsBroadcastUndelivered$1;-><init>(Lcom/android/internal/telephony/SmsBroadcastUndelivered;)V
+HSPLcom/android/internal/telephony/SmsBroadcastUndelivered;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/gsm/GsmInboundSmsHandler;Lcom/android/internal/telephony/cdma/CdmaInboundSmsHandler;)V
+HSPLcom/android/internal/telephony/SmsBroadcastUndelivered;->initialize(Landroid/content/Context;Lcom/android/internal/telephony/gsm/GsmInboundSmsHandler;Lcom/android/internal/telephony/cdma/CdmaInboundSmsHandler;)V
+HSPLcom/android/internal/telephony/SmsStorageMonitor$1;-><init>(Lcom/android/internal/telephony/SmsStorageMonitor;)V
+HSPLcom/android/internal/telephony/SmsStorageMonitor;-><init>(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/SmsStorageMonitor;->createWakelock()V
+HSPLcom/android/internal/telephony/SmsStorageMonitor;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/SmsUsageMonitor$SettingsObserver;-><init>(Landroid/os/Handler;Landroid/content/Context;Ljava/util/concurrent/atomic/AtomicBoolean;)V
+HSPLcom/android/internal/telephony/SmsUsageMonitor$SettingsObserver;->onChange(Z)V
+HSPLcom/android/internal/telephony/SmsUsageMonitor$SettingsObserverHandler;-><init>(Landroid/content/Context;Ljava/util/concurrent/atomic/AtomicBoolean;)V
+HSPLcom/android/internal/telephony/SmsUsageMonitor;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/SmsUsageMonitor;->loadPremiumSmsPolicyDb()V
+HSPLcom/android/internal/telephony/SubscriptionController$ScLocalLog;-><init>(I)V
+HSPLcom/android/internal/telephony/SubscriptionController$ScLocalLog;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/SubscriptionController;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/SubscriptionController;->broadcastDefaultDataSubIdChanged(I)V
+HSPLcom/android/internal/telephony/SubscriptionController;->broadcastSimInfoContentChanged()V
+HSPLcom/android/internal/telephony/SubscriptionController;->canReadPhoneState(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/internal/telephony/SubscriptionController;->enforceModifyPhoneState(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/SubscriptionController;->getActiveSubIdList()[I
+HSPLcom/android/internal/telephony/SubscriptionController;->getActiveSubInfoCountMax()I
+HSPLcom/android/internal/telephony/SubscriptionController;->getActiveSubscriptionInfoList(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telephony/SubscriptionController;->getDefaultDataSubId()I
+HSPLcom/android/internal/telephony/SubscriptionController;->getDefaultSmsSubId()I
+HSPLcom/android/internal/telephony/SubscriptionController;->getDefaultSubId()I
+HSPLcom/android/internal/telephony/SubscriptionController;->getDefaultVoiceSubId()I
+HSPLcom/android/internal/telephony/SubscriptionController;->getDummySubIds(I)[I
+HSPLcom/android/internal/telephony/SubscriptionController;->getInstance()Lcom/android/internal/telephony/SubscriptionController;
+HSPLcom/android/internal/telephony/SubscriptionController;->getPhoneId(I)I
+HSPLcom/android/internal/telephony/SubscriptionController;->getSimStateForSlotIndex(I)I
+HSPLcom/android/internal/telephony/SubscriptionController;->getSlotIndex(I)I
+HSPLcom/android/internal/telephony/SubscriptionController;->getSubId(I)[I
+HSPLcom/android/internal/telephony/SubscriptionController;->getSubIdUsingPhoneId(I)I
+HSPLcom/android/internal/telephony/SubscriptionController;->getSubInfoUsingSlotIndexWithCheck(IZLjava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telephony/SubscriptionController;->init(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/SubscriptionController;->init(Landroid/content/Context;[Lcom/android/internal/telephony/CommandsInterface;)Lcom/android/internal/telephony/SubscriptionController;
+HSPLcom/android/internal/telephony/SubscriptionController;->isActiveSubId(I)Z
+HSPLcom/android/internal/telephony/SubscriptionController;->isSubInfoReady()Z
+HSPLcom/android/internal/telephony/SubscriptionController;->logd(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/SubscriptionController;->logdl(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/SubscriptionController;->notifySubscriptionInfoChanged()V
+HSPLcom/android/internal/telephony/SubscriptionController;->setDefaultDataSubId(I)V
+HSPLcom/android/internal/telephony/SubscriptionController;->setPlmnSpn(IZLjava/lang/String;ZLjava/lang/String;)Z
+HSPLcom/android/internal/telephony/SubscriptionController;->updateAllDataConnectionTrackers()V
+HSPLcom/android/internal/telephony/SubscriptionController;->updatePhonesAvailability([Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/SubscriptionInfoUpdater$1;-><init>(Lcom/android/internal/telephony/SubscriptionInfoUpdater;)V
+HSPLcom/android/internal/telephony/SubscriptionInfoUpdater$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/internal/telephony/SubscriptionInfoUpdater$2;-><init>(Lcom/android/internal/telephony/SubscriptionInfoUpdater;)V
+HSPLcom/android/internal/telephony/SubscriptionInfoUpdater;->-wrap0(Lcom/android/internal/telephony/SubscriptionInfoUpdater;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/SubscriptionInfoUpdater;-><init>(Landroid/os/Looper;Landroid/content/Context;[Lcom/android/internal/telephony/Phone;[Lcom/android/internal/telephony/CommandsInterface;)V
+HSPLcom/android/internal/telephony/SubscriptionInfoUpdater;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/SubscriptionInfoUpdater;->handleSimAbsent(I)V
+HSPLcom/android/internal/telephony/SubscriptionInfoUpdater;->initializeCarrierApps()V
+HSPLcom/android/internal/telephony/SubscriptionInfoUpdater;->isAllIccIdQueryDone()Z
+HSPLcom/android/internal/telephony/SubscriptionInfoUpdater;->logd(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/SubscriptionInfoUpdater;->updateCarrierServices(ILjava/lang/String;)V
+HSPLcom/android/internal/telephony/SubscriptionInfoUpdater;->updateEmbeddedSubscriptions()Z
+HSPLcom/android/internal/telephony/SubscriptionInfoUpdater;->updateSubscriptionInfoByIccId()V
+HSPLcom/android/internal/telephony/SubscriptionMonitor$1;-><init>(Lcom/android/internal/telephony/SubscriptionMonitor;)V
+HSPLcom/android/internal/telephony/SubscriptionMonitor$1;->onSubscriptionsChanged()V
+HSPLcom/android/internal/telephony/SubscriptionMonitor$2;-><init>(Lcom/android/internal/telephony/SubscriptionMonitor;)V
+HSPLcom/android/internal/telephony/SubscriptionMonitor$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/internal/telephony/SubscriptionMonitor;->-get2(Lcom/android/internal/telephony/SubscriptionMonitor;)I
+HSPLcom/android/internal/telephony/SubscriptionMonitor;->-get3(Lcom/android/internal/telephony/SubscriptionMonitor;)Ljava/lang/Object;
+HSPLcom/android/internal/telephony/SubscriptionMonitor;->-get4(Lcom/android/internal/telephony/SubscriptionMonitor;)[I
+HSPLcom/android/internal/telephony/SubscriptionMonitor;->-get5(Lcom/android/internal/telephony/SubscriptionMonitor;)Lcom/android/internal/telephony/SubscriptionController;
+HSPLcom/android/internal/telephony/SubscriptionMonitor;->-set0(Lcom/android/internal/telephony/SubscriptionMonitor;I)I
+HSPLcom/android/internal/telephony/SubscriptionMonitor;-><init>(Lcom/android/internal/telephony/ITelephonyRegistry;Landroid/content/Context;Lcom/android/internal/telephony/SubscriptionController;I)V
+HSPLcom/android/internal/telephony/SubscriptionMonitor;->invalidPhoneId(I)Z
+HSPLcom/android/internal/telephony/SubscriptionMonitor;->registerForDefaultDataSubscriptionChanged(ILandroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/SubscriptionMonitor;->registerForSubscriptionChanged(ILandroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/TelephonyCapabilities;->supportsNetworkSelection(Lcom/android/internal/telephony/Phone;)Z
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;-><init>()V
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->getCdmaSubscriptionSourceManagerInstance(Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;Landroid/os/Handler;ILjava/lang/Object;)Lcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->getIDeviceIdleController()Landroid/os/IDeviceIdleController;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->getInstance()Lcom/android/internal/telephony/TelephonyComponentFactory;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeAppSmsManager(Landroid/content/Context;)Lcom/android/internal/telephony/AppSmsManager;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeCarrierActionAgent(Lcom/android/internal/telephony/Phone;)Lcom/android/internal/telephony/CarrierActionAgent;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeCarrierSignalAgent(Lcom/android/internal/telephony/Phone;)Lcom/android/internal/telephony/CarrierSignalAgent;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeDcTracker(Lcom/android/internal/telephony/Phone;)Lcom/android/internal/telephony/dataconnection/DcTracker;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeDeviceStateMonitor(Lcom/android/internal/telephony/Phone;)Lcom/android/internal/telephony/DeviceStateMonitor;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeEriManager(Lcom/android/internal/telephony/Phone;Landroid/content/Context;I)Lcom/android/internal/telephony/cdma/EriManager;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeGsmCdmaCallTracker(Lcom/android/internal/telephony/GsmCdmaPhone;)Lcom/android/internal/telephony/GsmCdmaCallTracker;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeIccCardProxy(Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;I)Lcom/android/internal/telephony/uicc/IccCardProxy;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeIccPhoneBookInterfaceManager(Lcom/android/internal/telephony/Phone;)Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeIccSmsInterfaceManager(Lcom/android/internal/telephony/Phone;)Lcom/android/internal/telephony/IccSmsInterfaceManager;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeImsExternalCallTracker(Lcom/android/internal/telephony/imsphone/ImsPhone;)Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeImsPhoneCallTracker(Lcom/android/internal/telephony/imsphone/ImsPhone;)Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeServiceStateTracker(Lcom/android/internal/telephony/GsmCdmaPhone;Lcom/android/internal/telephony/CommandsInterface;)Lcom/android/internal/telephony/ServiceStateTracker;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeSimActivationTracker(Lcom/android/internal/telephony/Phone;)Lcom/android/internal/telephony/SimActivationTracker;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeSmsStorageMonitor(Lcom/android/internal/telephony/Phone;)Lcom/android/internal/telephony/SmsStorageMonitor;
+HSPLcom/android/internal/telephony/TelephonyComponentFactory;->makeSmsUsageMonitor(Landroid/content/Context;)Lcom/android/internal/telephony/SmsUsageMonitor;
+HSPLcom/android/internal/telephony/TelephonyDevController;-><init>()V
+HSPLcom/android/internal/telephony/TelephonyDevController;->create()Lcom/android/internal/telephony/TelephonyDevController;
+HSPLcom/android/internal/telephony/TelephonyDevController;->getInstance()Lcom/android/internal/telephony/TelephonyDevController;
+HSPLcom/android/internal/telephony/TelephonyDevController;->initFromResource()V
+HSPLcom/android/internal/telephony/TelephonyDevController;->logd(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/TelephonyDevController;->registerRIL(Lcom/android/internal/telephony/CommandsInterface;)V
+HSPLcom/android/internal/telephony/TelephonyDevController;->updateOrInsert(Lcom/android/internal/telephony/HardwareConfig;Ljava/util/ArrayList;)V
+HSPLcom/android/internal/telephony/TelephonyTester$1;-><init>(Lcom/android/internal/telephony/TelephonyTester;)V
+HSPLcom/android/internal/telephony/TelephonyTester;-><init>(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/TelephonyTester;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/UiccPhoneBookController;-><init>([Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/UiccSmsController;-><init>()V
+HSPLcom/android/internal/telephony/WakeLockStateMachine$1;-><init>(Lcom/android/internal/telephony/WakeLockStateMachine;)V
+HSPLcom/android/internal/telephony/WakeLockStateMachine$DefaultState;-><init>(Lcom/android/internal/telephony/WakeLockStateMachine;)V
+HSPLcom/android/internal/telephony/WakeLockStateMachine$IdleState;-><init>(Lcom/android/internal/telephony/WakeLockStateMachine;)V
+HSPLcom/android/internal/telephony/WakeLockStateMachine$IdleState;->enter()V
+HSPLcom/android/internal/telephony/WakeLockStateMachine$IdleState;->processMessage(Landroid/os/Message;)Z
+HSPLcom/android/internal/telephony/WakeLockStateMachine$WaitingState;-><init>(Lcom/android/internal/telephony/WakeLockStateMachine;)V
+HSPLcom/android/internal/telephony/WakeLockStateMachine;->-get2(Lcom/android/internal/telephony/WakeLockStateMachine;)Landroid/os/PowerManager$WakeLock;
+HSPLcom/android/internal/telephony/WakeLockStateMachine;-><init>(Ljava/lang/String;Landroid/content/Context;Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/WakeLockStateMachine;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/WapPushOverSms$1;-><init>(Lcom/android/internal/telephony/WapPushOverSms;)V
+HSPLcom/android/internal/telephony/WapPushOverSms;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/cdma/CdmaInboundSmsHandler;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/SmsStorageMonitor;Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/cdma/CdmaSMSDispatcher;)V
+HSPLcom/android/internal/telephony/cdma/CdmaInboundSmsHandler;->makeInboundSmsHandler(Landroid/content/Context;Lcom/android/internal/telephony/SmsStorageMonitor;Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/cdma/CdmaSMSDispatcher;)Lcom/android/internal/telephony/cdma/CdmaInboundSmsHandler;
+HSPLcom/android/internal/telephony/cdma/CdmaSMSDispatcher;-><init>(Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/SmsUsageMonitor;Lcom/android/internal/telephony/ImsSMSDispatcher;)V
+HSPLcom/android/internal/telephony/cdma/CdmaSMSDispatcher;->getFormat()Ljava/lang/String;
+HSPLcom/android/internal/telephony/cdma/CdmaServiceCategoryProgramHandler$1;-><init>(Lcom/android/internal/telephony/cdma/CdmaServiceCategoryProgramHandler;)V
+HSPLcom/android/internal/telephony/cdma/CdmaServiceCategoryProgramHandler;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;)V
+HSPLcom/android/internal/telephony/cdma/CdmaServiceCategoryProgramHandler;->makeScpHandler(Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;)Lcom/android/internal/telephony/cdma/CdmaServiceCategoryProgramHandler;
+HSPLcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;)V
+HSPLcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;->getDefault(Landroid/content/Context;)I
+HSPLcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;->getInstance(Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;Landroid/os/Handler;ILjava/lang/Object;)Lcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;
+HSPLcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;->handleGetCdmaSubscriptionSource(Landroid/os/AsyncResult;)V
+HSPLcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;->registerForCdmaSubscriptionSourceChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/cdma/EriManager$EriFile;-><init>(Lcom/android/internal/telephony/cdma/EriManager;)V
+HSPLcom/android/internal/telephony/cdma/EriManager;-><init>(Lcom/android/internal/telephony/Phone;Landroid/content/Context;I)V
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;-><init>(Lcom/android/internal/telephony/Phone;Ljava/lang/String;Ljava/lang/String;Landroid/net/NetworkConfig;Lcom/android/internal/telephony/dataconnection/DcTracker;)V
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->apnIdForApnName(Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->apnIdForType(I)I
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->getApnSetting()Lcom/android/internal/telephony/dataconnection/ApnSetting;
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->getApnType()Ljava/lang/String;
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->getDcAc()Lcom/android/internal/telephony/dataconnection/DcAsyncChannel;
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->getReason()Ljava/lang/String;
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->getState()Lcom/android/internal/telephony/DctConstants$State;
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->isConnectable()Z
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->isDisconnected()Z
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->isEnabled()Z
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->isReady()Z
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->requestLog(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->setDataConnectionAc(Lcom/android/internal/telephony/dataconnection/DcAsyncChannel;)V
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->setReason(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->setState(Lcom/android/internal/telephony/DctConstants$State;)V
+HSPLcom/android/internal/telephony/dataconnection/ApnContext;->toString()Ljava/lang/String;
+HSPLcom/android/internal/telephony/dataconnection/DataConnectionReasons$DataAllowedReasonType;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/dataconnection/DataConnectionReasons$DataDisallowedReasonType;-><init>(Ljava/lang/String;IZ)V
+HSPLcom/android/internal/telephony/dataconnection/DataConnectionReasons$DataDisallowedReasonType;->isHardReason()Z
+HSPLcom/android/internal/telephony/dataconnection/DataConnectionReasons;-><init>()V
+HSPLcom/android/internal/telephony/dataconnection/DataConnectionReasons;->add(Lcom/android/internal/telephony/dataconnection/DataConnectionReasons$DataDisallowedReasonType;)V
+HSPLcom/android/internal/telephony/dataconnection/DataConnectionReasons;->containsHardDisallowedReasons()Z
+HSPLcom/android/internal/telephony/dataconnection/DataEnabledSettings;-><init>()V
+HSPLcom/android/internal/telephony/dataconnection/DataEnabledSettings;->isDataEnabled()Z
+HSPLcom/android/internal/telephony/dataconnection/DataEnabledSettings;->isInternalDataEnabled()Z
+HSPLcom/android/internal/telephony/dataconnection/DataEnabledSettings;->notifyDataEnabledChanged(ZI)V
+HSPLcom/android/internal/telephony/dataconnection/DataEnabledSettings;->registerForDataEnabledChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/dataconnection/DataEnabledSettings;->setUserDataEnabled(Z)V
+HSPLcom/android/internal/telephony/dataconnection/DcController$1;-><init>(Lcom/android/internal/telephony/dataconnection/DcController;Landroid/os/Looper;)V
+HSPLcom/android/internal/telephony/dataconnection/DcController$DccDefaultState;-><init>(Lcom/android/internal/telephony/dataconnection/DcController;)V
+HSPLcom/android/internal/telephony/dataconnection/DcController$DccDefaultState;-><init>(Lcom/android/internal/telephony/dataconnection/DcController;Lcom/android/internal/telephony/dataconnection/DcController$DccDefaultState;)V
+HSPLcom/android/internal/telephony/dataconnection/DcController$DccDefaultState;->enter()V
+HSPLcom/android/internal/telephony/dataconnection/DcController$DccDefaultState;->processMessage(Landroid/os/Message;)Z
+HSPLcom/android/internal/telephony/dataconnection/DcController;->-get3(Lcom/android/internal/telephony/dataconnection/DcController;)Lcom/android/internal/telephony/Phone;
+HSPLcom/android/internal/telephony/dataconnection/DcController;->-set0(Lcom/android/internal/telephony/dataconnection/DcController;Lcom/android/internal/telephony/dataconnection/DcTesterDeactivateAll;)Lcom/android/internal/telephony/dataconnection/DcTesterDeactivateAll;
+HSPLcom/android/internal/telephony/dataconnection/DcController;-><init>(Ljava/lang/String;Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/dataconnection/DcTracker;Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/dataconnection/DcController;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/dataconnection/DcController;->makeDcc(Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/dataconnection/DcTracker;Landroid/os/Handler;)Lcom/android/internal/telephony/dataconnection/DcController;
+HSPLcom/android/internal/telephony/dataconnection/DcFailBringUp;-><init>()V
+HSPLcom/android/internal/telephony/dataconnection/DcFailCause;-><init>(Ljava/lang/String;II)V
+HSPLcom/android/internal/telephony/dataconnection/DcFailCause;->getErrorCode()I
+HSPLcom/android/internal/telephony/dataconnection/DcFailCause;->values()[Lcom/android/internal/telephony/dataconnection/DcFailCause;
+HSPLcom/android/internal/telephony/dataconnection/DcRequest;-><init>(Landroid/net/NetworkRequest;Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/dataconnection/DcRequest;->apnIdForNetworkRequest(Landroid/net/NetworkRequest;)I
+HSPLcom/android/internal/telephony/dataconnection/DcRequest;->compareTo(Lcom/android/internal/telephony/dataconnection/DcRequest;)I
+HSPLcom/android/internal/telephony/dataconnection/DcRequest;->compareTo(Ljava/lang/Object;)I
+HSPLcom/android/internal/telephony/dataconnection/DcRequest;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/internal/telephony/dataconnection/DcRequest;->initApnPriorities(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/dataconnection/DcRequest;->priorityForApnId(I)I
+HSPLcom/android/internal/telephony/dataconnection/DcTesterDeactivateAll$1;-><init>(Lcom/android/internal/telephony/dataconnection/DcTesterDeactivateAll;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTesterDeactivateAll;-><init>(Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/dataconnection/DcController;Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTesterDeactivateAll;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTesterFailBringUpAll$1;-><init>(Lcom/android/internal/telephony/dataconnection/DcTesterFailBringUpAll;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTesterFailBringUpAll;-><init>(Lcom/android/internal/telephony/Phone;Landroid/os/Handler;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTesterFailBringUpAll;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker$1;-><init>(Lcom/android/internal/telephony/dataconnection/DcTracker;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker$1;->compare(Lcom/android/internal/telephony/dataconnection/ApnContext;Lcom/android/internal/telephony/dataconnection/ApnContext;)I
+HSPLcom/android/internal/telephony/dataconnection/DcTracker$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLcom/android/internal/telephony/dataconnection/DcTracker$2;-><init>(Lcom/android/internal/telephony/dataconnection/DcTracker;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker$3;-><init>(Lcom/android/internal/telephony/dataconnection/DcTracker;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker$4;-><init>(Lcom/android/internal/telephony/dataconnection/DcTracker;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker$4;->onSubscriptionsChanged()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker$ApnChangeObserver;-><init>(Lcom/android/internal/telephony/dataconnection/DcTracker;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker$RetryFailures;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker$TxRxSum;-><init>(JJ)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->-get0(Lcom/android/internal/telephony/dataconnection/DcTracker;)Landroid/os/Handler;
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->-get3(Lcom/android/internal/telephony/dataconnection/DcTracker;)Z
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->-get6(Lcom/android/internal/telephony/dataconnection/DcTracker;)Lcom/android/internal/telephony/Phone;
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->-set1(Lcom/android/internal/telephony/dataconnection/DcTracker;Z)Z
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->-wrap0(Lcom/android/internal/telephony/dataconnection/DcTracker;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;-><init>(Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->addApnContext(Ljava/lang/String;Landroid/net/NetworkConfig;)Lcom/android/internal/telephony/dataconnection/ApnContext;
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->addEmergencyApnSetting()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->cleanUpAllConnections(ZLjava/lang/String;)Z
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->cleanUpConnection(ZLcom/android/internal/telephony/dataconnection/ApnContext;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->getActiveApnString(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->getDataEnabled()Z
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->getDataRoamingEnabled()Z
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->getDefaultDataRoamingEnabled()Z
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->getOverallState()Lcom/android/internal/telephony/DctConstants$State;
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->getState(Ljava/lang/String;)Lcom/android/internal/telephony/DctConstants$State;
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->getUiccRecords(I)Lcom/android/internal/telephony/uicc/IccRecords;
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->initApnContexts()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->initEmergencyApnSetting()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->isDataAllowed(Lcom/android/internal/telephony/dataconnection/ApnContext;Lcom/android/internal/telephony/dataconnection/DataConnectionReasons;)Z
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->isDataAllowed(Lcom/android/internal/telephony/dataconnection/DataConnectionReasons;)Z
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->isEmergency()Z
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->notifyDataConnection(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->notifyOffApnsOfAvailability(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->onDataConnectionDetached()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->onDataRoamingOff()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->onRadioAvailable()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->onRadioOffOrNotAvailable()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->onUpdateIcc()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->registerForAllEvents()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->registerForDataEnabledChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->registerServiceStateTrackerEvents()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->registerSettingsObserver()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->setDataProfilesAsNeeded()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->setInitialAttachApn()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->setupDataOnConnectableApns(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->setupDataOnConnectableApns(Ljava/lang/String;Lcom/android/internal/telephony/dataconnection/DcTracker$RetryFailures;)V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->stopDataStallAlarm()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->stopNetStatPoll()V
+HSPLcom/android/internal/telephony/dataconnection/DcTracker;->update()V
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory$InternalHandler;-><init>(Lcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;Landroid/os/Looper;)V
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory$InternalHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->-wrap0(Lcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;)V
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->-wrap1(Lcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;)V
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->-wrap2(Lcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->-wrap4(Lcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;)V
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;-><init>(Lcom/android/internal/telephony/PhoneSwitcher;Lcom/android/internal/telephony/SubscriptionController;Lcom/android/internal/telephony/SubscriptionMonitor;Landroid/os/Looper;Landroid/content/Context;ILcom/android/internal/telephony/dataconnection/DcTracker;)V
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->makeNetworkFilter(I)Landroid/net/NetworkCapabilities;
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->makeNetworkFilter(Lcom/android/internal/telephony/SubscriptionController;I)Landroid/net/NetworkCapabilities;
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->needNetworkFor(Landroid/net/NetworkRequest;I)V
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->onActivePhoneSwitch()V
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->onDefaultChange()V
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->onNeedNetworkFor(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/dataconnection/TelephonyNetworkFactory;->onSubIdChange()V
+HSPLcom/android/internal/telephony/euicc/IEuiccController$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/euicc/IEuiccController;
+HSPLcom/android/internal/telephony/gsm/GsmCellBroadcastHandler;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/gsm/GsmCellBroadcastHandler;->makeGsmCellBroadcastHandler(Landroid/content/Context;Lcom/android/internal/telephony/Phone;)Lcom/android/internal/telephony/gsm/GsmCellBroadcastHandler;
+HSPLcom/android/internal/telephony/gsm/GsmInboundSmsHandler;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/SmsStorageMonitor;Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/gsm/GsmInboundSmsHandler;->makeInboundSmsHandler(Landroid/content/Context;Lcom/android/internal/telephony/SmsStorageMonitor;Lcom/android/internal/telephony/Phone;)Lcom/android/internal/telephony/gsm/GsmInboundSmsHandler;
+HSPLcom/android/internal/telephony/gsm/GsmSMSDispatcher;-><init>(Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/SmsUsageMonitor;Lcom/android/internal/telephony/ImsSMSDispatcher;Lcom/android/internal/telephony/gsm/GsmInboundSmsHandler;)V
+HSPLcom/android/internal/telephony/gsm/GsmSMSDispatcher;->getFormat()Ljava/lang/String;
+HSPLcom/android/internal/telephony/gsm/GsmSMSDispatcher;->getUiccCardApplication()Lcom/android/internal/telephony/uicc/UiccCardApplication;
+HSPLcom/android/internal/telephony/gsm/GsmSMSDispatcher;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/gsm/GsmSMSDispatcher;->onUpdateIccAvailability()V
+HSPLcom/android/internal/telephony/gsm/UsimDataDownloadHandler;-><init>(Lcom/android/internal/telephony/CommandsInterface;)V
+HSPLcom/android/internal/telephony/ims/-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg$1;->$m$0(Landroid/os/Message;)Z
+HSPLcom/android/internal/telephony/ims/-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg$1;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/internal/telephony/ims/-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg$1;->handleMessage(Landroid/os/Message;)Z
+HSPLcom/android/internal/telephony/ims/-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg$2;->$m$0(Landroid/content/Context;Landroid/content/ComponentName;)Lcom/android/internal/telephony/ims/ImsServiceController;
+HSPLcom/android/internal/telephony/ims/-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg$2;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/internal/telephony/ims/-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg$2;->get(Landroid/content/Context;Landroid/content/ComponentName;)Lcom/android/internal/telephony/ims/ImsServiceController;
+HSPLcom/android/internal/telephony/ims/-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg$3;->$m$1(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/internal/telephony/ims/-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg$3;-><init>(BI)V
+HSPLcom/android/internal/telephony/ims/-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg$3;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/internal/telephony/ims/-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg;->$m$0()Ljava/lang/Object;
+HSPLcom/android/internal/telephony/ims/-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg;-><init>()V
+HSPLcom/android/internal/telephony/ims/-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg;->get()Ljava/lang/Object;
+HSPLcom/android/internal/telephony/ims/-$Lambda$Dp0MKpTfGctn5WSf-VZIVicYMbM;-><init>(B)V
+HSPLcom/android/internal/telephony/ims/-$Lambda$QWnMjc1b65aK4eEOKtjIsxJ2Sp4;-><init>(BLjava/lang/Object;)V
+HSPLcom/android/internal/telephony/ims/ImsResolver$1;-><init>(Lcom/android/internal/telephony/ims/ImsResolver;)V
+HSPLcom/android/internal/telephony/ims/ImsResolver$2;-><init>(Lcom/android/internal/telephony/ims/ImsResolver;)V
+HSPLcom/android/internal/telephony/ims/ImsResolver$3;-><init>(Lcom/android/internal/telephony/ims/ImsResolver;)V
+HSPLcom/android/internal/telephony/ims/ImsResolver$3;->getSlotIndex(I)I
+HSPLcom/android/internal/telephony/ims/ImsResolver$3;->getSubId(I)I
+HSPLcom/android/internal/telephony/ims/ImsResolver$ImsServiceControllerFactory;->get(Landroid/content/Context;Landroid/content/ComponentName;)Lcom/android/internal/telephony/ims/ImsServiceController;
+HSPLcom/android/internal/telephony/ims/ImsResolver$ImsServiceInfo;-><init>()V
+HSPLcom/android/internal/telephony/ims/ImsResolver$ImsServiceInfo;->hashCode()I
+HSPLcom/android/internal/telephony/ims/ImsResolver$SubscriptionManagerProxy;->getSlotIndex(I)I
+HSPLcom/android/internal/telephony/ims/ImsResolver$SubscriptionManagerProxy;->getSubId(I)I
+HSPLcom/android/internal/telephony/ims/ImsResolver;->-com_android_internal_telephony_ims_ImsResolver-mthref-0()Landroid/util/SparseArray;
+HSPLcom/android/internal/telephony/ims/ImsResolver;-><init>(Landroid/content/Context;Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/ims/ImsResolver;->bindNewImsService(Lcom/android/internal/telephony/ims/ImsResolver$ImsServiceInfo;)V
+HSPLcom/android/internal/telephony/ims/ImsResolver;->calculateFeaturesToCreate(Lcom/android/internal/telephony/ims/ImsResolver$ImsServiceInfo;)Ljava/util/HashSet;
+HSPLcom/android/internal/telephony/ims/ImsResolver;->getImsServiceControllerAndListen(IILcom/android/ims/internal/IImsServiceFeatureListener;)Lcom/android/ims/internal/IImsServiceController;
+HSPLcom/android/internal/telephony/ims/ImsResolver;->getImsServiceInfo(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/internal/telephony/ims/ImsResolver;->getImsServiceInfoFromCache(Ljava/lang/String;)Lcom/android/internal/telephony/ims/ImsResolver$ImsServiceInfo;
+HSPLcom/android/internal/telephony/ims/ImsResolver;->getInfoByComponentName(Ljava/util/Set;Landroid/content/ComponentName;)Ljava/util/Optional;
+HSPLcom/android/internal/telephony/ims/ImsResolver;->getSlotForActiveCarrierService(Lcom/android/internal/telephony/ims/ImsResolver$ImsServiceInfo;)I
+HSPLcom/android/internal/telephony/ims/ImsResolver;->imsServiceFeatureCreated(IILcom/android/internal/telephony/ims/ImsServiceController;)V
+HSPLcom/android/internal/telephony/ims/ImsResolver;->isActiveCarrierService(Lcom/android/internal/telephony/ims/ImsResolver$ImsServiceInfo;)Z
+HSPLcom/android/internal/telephony/ims/ImsResolver;->isDeviceService(Lcom/android/internal/telephony/ims/ImsResolver$ImsServiceInfo;)Z
+HSPLcom/android/internal/telephony/ims/ImsResolver;->lambda$-com_android_internal_telephony_ims_ImsResolver_24395(ILjava/lang/Integer;)Landroid/util/Pair;
+HSPLcom/android/internal/telephony/ims/ImsResolver;->lambda$-com_android_internal_telephony_ims_ImsResolver_7707(Landroid/content/Context;Landroid/content/ComponentName;)Lcom/android/internal/telephony/ims/ImsServiceController;
+HSPLcom/android/internal/telephony/ims/ImsResolver;->lambda$-com_android_internal_telephony_ims_ImsResolver_8323(Landroid/os/Message;)Z
+HSPLcom/android/internal/telephony/ims/ImsResolver;->maybeAddedImsService(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/ims/ImsResolver;->maybeRebindService(I)V
+HSPLcom/android/internal/telephony/ims/ImsResolver;->populateCacheAndStartBind()V
+HSPLcom/android/internal/telephony/ims/ImsResolver;->putImsController(IILcom/android/internal/telephony/ims/ImsServiceController;)V
+HSPLcom/android/internal/telephony/ims/ImsResolver;->updateBoundCarrierServices(I)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController$1;-><init>(Lcom/android/internal/telephony/ims/ImsServiceController;)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController$ImsDeathRecipient;-><init>(Lcom/android/internal/telephony/ims/ImsServiceController;Landroid/content/ComponentName;)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController$ImsFeatureStatusCallback$1;-><init>(Lcom/android/internal/telephony/ims/ImsServiceController$ImsFeatureStatusCallback;)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController$ImsFeatureStatusCallback$1;->notifyImsFeatureStatus(I)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController$ImsFeatureStatusCallback;->-get0(Lcom/android/internal/telephony/ims/ImsServiceController$ImsFeatureStatusCallback;)I
+HSPLcom/android/internal/telephony/ims/ImsServiceController$ImsFeatureStatusCallback;->-get1(Lcom/android/internal/telephony/ims/ImsServiceController$ImsFeatureStatusCallback;)I
+HSPLcom/android/internal/telephony/ims/ImsServiceController$ImsFeatureStatusCallback;-><init>(Lcom/android/internal/telephony/ims/ImsServiceController;II)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController$ImsFeatureStatusCallback;->getCallback()Lcom/android/ims/internal/IImsFeatureStatusCallback;
+HSPLcom/android/internal/telephony/ims/ImsServiceController$ImsServiceConnection;-><init>(Lcom/android/internal/telephony/ims/ImsServiceController;)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController$ImsServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController$ImsServiceControllerCallbacks;->imsServiceFeatureCreated(IILcom/android/internal/telephony/ims/ImsServiceController;)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController$ImsServiceControllerCallbacks;->imsServiceFeatureRemoved(IILcom/android/internal/telephony/ims/ImsServiceController;)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController$RebindRetry;->getRetryTimeout()J
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->-get1(Lcom/android/internal/telephony/ims/ImsServiceController;)Lcom/android/internal/telephony/ims/ImsServiceController$ImsDeathRecipient;
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->-get2(Lcom/android/internal/telephony/ims/ImsServiceController;)Ljava/util/HashSet;
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->-get5(Lcom/android/internal/telephony/ims/ImsServiceController;)Ljava/lang/Object;
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->-set0(Lcom/android/internal/telephony/ims/ImsServiceController;Lcom/android/ims/internal/IImsServiceController;)Lcom/android/ims/internal/IImsServiceController;
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->-set1(Lcom/android/internal/telephony/ims/ImsServiceController;Lcom/android/internal/telephony/ims/ImsServiceController$ImsDeathRecipient;)Lcom/android/internal/telephony/ims/ImsServiceController$ImsDeathRecipient;
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->-set2(Lcom/android/internal/telephony/ims/ImsServiceController;Landroid/os/IBinder;)Landroid/os/IBinder;
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->-set3(Lcom/android/internal/telephony/ims/ImsServiceController;Z)Z
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->-set4(Lcom/android/internal/telephony/ims/ImsServiceController;Z)Z
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->-wrap0(Lcom/android/internal/telephony/ims/ImsServiceController;Landroid/util/Pair;)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->-wrap2(Lcom/android/internal/telephony/ims/ImsServiceController;)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->-wrap4(Lcom/android/internal/telephony/ims/ImsServiceController;III)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController;-><init>(Landroid/content/Context;Landroid/content/ComponentName;Lcom/android/internal/telephony/ims/ImsServiceController$ImsServiceControllerCallbacks;)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->addImsServiceFeature(Landroid/util/Pair;)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->addImsServiceFeatureListener(Lcom/android/ims/internal/IImsServiceFeatureListener;)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->bind(Ljava/util/HashSet;)Z
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->getComponentName()Landroid/content/ComponentName;
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->getImsServiceController()Lcom/android/ims/internal/IImsServiceController;
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->grantPermissionsToService()V
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->sendImsFeatureCreatedCallback(II)V
+HSPLcom/android/internal/telephony/ims/ImsServiceController;->sendImsFeatureStatusChanged(III)V
+HSPLcom/android/internal/telephony/imsphone/-$Lambda$tILLuSJl16qfDJK1ikBVGFm2D5w$1;->$m$0()V
+HSPLcom/android/internal/telephony/imsphone/-$Lambda$tILLuSJl16qfDJK1ikBVGFm2D5w$1;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/internal/telephony/imsphone/-$Lambda$tILLuSJl16qfDJK1ikBVGFm2D5w$1;->notifyStatusChanged()V
+HSPLcom/android/internal/telephony/imsphone/-$Lambda$tILLuSJl16qfDJK1ikBVGFm2D5w$2;->$m$0()I
+HSPLcom/android/internal/telephony/imsphone/-$Lambda$tILLuSJl16qfDJK1ikBVGFm2D5w$2;-><init>(Ljava/lang/Object;)V
+HSPLcom/android/internal/telephony/imsphone/-$Lambda$tILLuSJl16qfDJK1ikBVGFm2D5w$2;->get()I
+HSPLcom/android/internal/telephony/imsphone/-$Lambda$tILLuSJl16qfDJK1ikBVGFm2D5w;-><init>()V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker$1;-><init>(Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker;)V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker$1;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker$2;-><init>(Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker;)V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker$ExternalCallStateListener;-><init>(Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker;)V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker$ExternalConnectionListener;-><init>(Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker;)V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker$ImsCallNotify;->notifyPreciseCallStateChanged()V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker$ImsCallNotify;->notifyUnknownConnection(Lcom/android/internal/telephony/Connection;)V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker;->-wrap0(Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker;Landroid/os/AsyncResult;)V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker;-><init>(Lcom/android/internal/telephony/imsphone/ImsPhone;)V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker;->getExternalCallStateListener()Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker$ExternalCallStateListener;
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker;->handleVideoCapabilitiesChanged(Landroid/os/AsyncResult;)V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker;->refreshCallPullState()V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker;->registerForNotifications()V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalCallTracker;->setCallPuller(Lcom/android/internal/telephony/imsphone/ImsPullCall;)V
+HSPLcom/android/internal/telephony/imsphone/ImsExternalConnection$Listener;->onPullExternalCall(Lcom/android/internal/telephony/imsphone/ImsExternalConnection;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone$1;-><init>(Lcom/android/internal/telephony/imsphone/ImsPhone;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone$2;-><init>(Lcom/android/internal/telephony/imsphone/ImsPhone;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone$3;-><init>(Lcom/android/internal/telephony/imsphone/ImsPhone;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/PhoneNotifier;Lcom/android/internal/telephony/Phone;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/PhoneNotifier;Lcom/android/internal/telephony/Phone;Z)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->getBackgroundCall()Lcom/android/internal/telephony/Call;
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->getBackgroundCall()Lcom/android/internal/telephony/imsphone/ImsPhoneCall;
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->getDefaultPhone()Lcom/android/internal/telephony/Phone;
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->getExternalCallTracker()Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker;
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->getForegroundCall()Lcom/android/internal/telephony/Call;
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->getForegroundCall()Lcom/android/internal/telephony/imsphone/ImsPhoneCall;
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->getImsEcbmStateListener()Lcom/android/ims/ImsEcbmStateListener;
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->getPhoneId()I
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->getPhoneType()I
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->getRingingCall()Lcom/android/internal/telephony/Call;
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->getRingingCall()Lcom/android/internal/telephony/imsphone/ImsPhoneCall;
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->getServiceState()Landroid/telephony/ServiceState;
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->getSubId()I
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->isInEcm()Z
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->isVideoEnabled()Z
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->isWifiCallingEnabled()Z
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->processDisconnectReason(Lcom/android/ims/ImsReasonInfo;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->registerForOnHoldTone(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->registerForRingbackTone(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->registerForSilentRedial(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->registerForTtyModeReceived(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->sendErrorResponse(Landroid/os/Message;Ljava/lang/Throwable;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->setImsRegistered(Z)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->setServiceState(I)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->setTTYMode(ILandroid/os/Message;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->setUiTTYMode(ILandroid/os/Message;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhone;->updateDataServiceState()V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneBase;-><init>(Ljava/lang/String;Landroid/content/Context;Lcom/android/internal/telephony/PhoneNotifier;Z)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneBase;->getPhoneType()I
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneBase;->registerForOnHoldTone(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneBase;->registerForRingbackTone(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneBase;->registerForTtyModeReceived(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCall;-><init>(Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$1;-><init>(Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$2;-><init>(Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$3;-><init>(Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$4;-><init>(Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$4;->onImsDisconnected(Lcom/android/ims/ImsReasonInfo;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$5;-><init>(Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$IRetryTimeout;->get()I
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$PhoneStateListener;->onPhoneStateChanged(Lcom/android/internal/telephony/PhoneConstants$State;Lcom/android/internal/telephony/PhoneConstants$State;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$SharedPreferenceProxy;->getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences;
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->-get9(Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;)Lcom/android/internal/telephony/metrics/TelephonyMetrics;
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->-wrap12(Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;-><init>(Lcom/android/internal/telephony/imsphone/ImsPhone;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->cacheCarrierConfiguration(I)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->createIncomingCallPendingIntent()Landroid/app/PendingIntent;
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->getEcbmInterface()Lcom/android/ims/ImsEcbm;
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->getImsManagerIsNullException()Lcom/android/ims/ImsException;
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->getImsService()V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->getMultiEndpointInterface()Lcom/android/ims/ImsMultiEndpoint;
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->getPackageUid(Landroid/content/Context;Ljava/lang/String;)I
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->isVideoCallEnabled()Z
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->isVowifiEnabled()Z
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->lambda$-com_android_internal_telephony_imsphone_ImsPhoneCallTracker_31974()V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->lambda$-com_android_internal_telephony_imsphone_ImsPhoneCallTracker_33046()I
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->loge(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->onDataEnabledChanged(ZI)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->registerPhoneStateListener(Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$PhoneStateListener;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->resetImsCapabilities()V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->retryGetImsService()V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->setTtyMode(I)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->setUiTTYMode(ILandroid/os/Message;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->startListeningForCalls()V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCommandInterface;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneCommandInterface;->setTTYMode(ILandroid/os/Message;)V
+HSPLcom/android/internal/telephony/imsphone/ImsPhoneFactory;->makePhone(Landroid/content/Context;Lcom/android/internal/telephony/PhoneNotifier;Lcom/android/internal/telephony/Phone;)Lcom/android/internal/telephony/imsphone/ImsPhone;
+HSPLcom/android/internal/telephony/imsphone/ImsPullCall;->pullExternalCall(Ljava/lang/String;II)V
+HSPLcom/android/internal/telephony/metrics/CallSessionEventBuilder;-><init>(I)V
+HSPLcom/android/internal/telephony/metrics/CallSessionEventBuilder;->setImsConnectionState(Lcom/android/internal/telephony/nano/TelephonyProto$ImsConnectionState;)Lcom/android/internal/telephony/metrics/CallSessionEventBuilder;
+HSPLcom/android/internal/telephony/metrics/CallSessionEventBuilder;->setServiceState(Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState;)Lcom/android/internal/telephony/metrics/CallSessionEventBuilder;
+HSPLcom/android/internal/telephony/metrics/SmsSessionEventBuilder;-><init>(I)V
+HSPLcom/android/internal/telephony/metrics/SmsSessionEventBuilder;->setImsConnectionState(Lcom/android/internal/telephony/nano/TelephonyProto$ImsConnectionState;)Lcom/android/internal/telephony/metrics/SmsSessionEventBuilder;
+HSPLcom/android/internal/telephony/metrics/SmsSessionEventBuilder;->setServiceState(Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState;)Lcom/android/internal/telephony/metrics/SmsSessionEventBuilder;
+HSPLcom/android/internal/telephony/metrics/TelephonyEventBuilder;-><init>(I)V
+HSPLcom/android/internal/telephony/metrics/TelephonyEventBuilder;-><init>(JI)V
+HSPLcom/android/internal/telephony/metrics/TelephonyEventBuilder;->build()Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyEvent;
+HSPLcom/android/internal/telephony/metrics/TelephonyEventBuilder;->setImsConnectionState(Lcom/android/internal/telephony/nano/TelephonyProto$ImsConnectionState;)Lcom/android/internal/telephony/metrics/TelephonyEventBuilder;
+HSPLcom/android/internal/telephony/metrics/TelephonyEventBuilder;->setServiceState(Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState;)Lcom/android/internal/telephony/metrics/TelephonyEventBuilder;
+HSPLcom/android/internal/telephony/metrics/TelephonyMetrics;-><init>()V
+HSPLcom/android/internal/telephony/metrics/TelephonyMetrics;->addTelephonyEvent(Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyEvent;)V
+HSPLcom/android/internal/telephony/metrics/TelephonyMetrics;->annotateInProgressCallSession(JILcom/android/internal/telephony/metrics/CallSessionEventBuilder;)V
+HSPLcom/android/internal/telephony/metrics/TelephonyMetrics;->annotateInProgressSmsSession(JILcom/android/internal/telephony/metrics/SmsSessionEventBuilder;)V
+HSPLcom/android/internal/telephony/metrics/TelephonyMetrics;->getInstance()Lcom/android/internal/telephony/metrics/TelephonyMetrics;
+HSPLcom/android/internal/telephony/metrics/TelephonyMetrics;->reset()V
+HSPLcom/android/internal/telephony/metrics/TelephonyMetrics;->toServiceStateProto(Landroid/telephony/ServiceState;)Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState;
+HSPLcom/android/internal/telephony/metrics/TelephonyMetrics;->writeOnImsConnectionState(IILcom/android/ims/ImsReasonInfo;)V
+HSPLcom/android/internal/telephony/metrics/TelephonyMetrics;->writeOnRilSolicitedResponse(IIIILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/metrics/TelephonyMetrics;->writeServiceStateChanged(ILandroid/telephony/ServiceState;)V
+HSPLcom/android/internal/telephony/nano/TelephonyProto$ImsConnectionState;-><init>()V
+HSPLcom/android/internal/telephony/nano/TelephonyProto$ImsConnectionState;->clear()Lcom/android/internal/telephony/nano/TelephonyProto$ImsConnectionState;
+HSPLcom/android/internal/telephony/nano/TelephonyProto$ImsReasonInfo;-><init>()V
+HSPLcom/android/internal/telephony/nano/TelephonyProto$ImsReasonInfo;->clear()Lcom/android/internal/telephony/nano/TelephonyProto$ImsReasonInfo;
+HSPLcom/android/internal/telephony/nano/TelephonyProto$RilDataCall;->emptyArray()[Lcom/android/internal/telephony/nano/TelephonyProto$RilDataCall;
+HSPLcom/android/internal/telephony/nano/TelephonyProto$SmsSession$Event;-><init>()V
+HSPLcom/android/internal/telephony/nano/TelephonyProto$SmsSession$Event;->clear()Lcom/android/internal/telephony/nano/TelephonyProto$SmsSession$Event;
+HSPLcom/android/internal/telephony/nano/TelephonyProto$TelephonyCallSession$Event$RilCall;->emptyArray()[Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyCallSession$Event$RilCall;
+HSPLcom/android/internal/telephony/nano/TelephonyProto$TelephonyCallSession$Event;-><init>()V
+HSPLcom/android/internal/telephony/nano/TelephonyProto$TelephonyCallSession$Event;->clear()Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyCallSession$Event;
+HSPLcom/android/internal/telephony/nano/TelephonyProto$TelephonyEvent;-><init>()V
+HSPLcom/android/internal/telephony/nano/TelephonyProto$TelephonyEvent;->clear()Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyEvent;
+HSPLcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState$TelephonyOperator;-><init>()V
+HSPLcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState$TelephonyOperator;->clear()Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState$TelephonyOperator;
+HSPLcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState;-><init>()V
+HSPLcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState;->clear()Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState;
+HSPLcom/android/internal/telephony/protobuf/nano/ExtendableMessageNano;-><init>()V
+HSPLcom/android/internal/telephony/protobuf/nano/MessageNano;-><init>()V
+HSPLcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->-getcom-android-internal-telephony-IccCardConstants$StateSwitchesValues()[I
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;I)V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->broadcastIccStateChangedIntent(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->getIccStateIntentString(Lcom/android/internal/telephony/IccCardConstants$State;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->getIccStateReason(Lcom/android/internal/telephony/IccCardConstants$State;)Ljava/lang/String;
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->getState()Lcom/android/internal/telephony/IccCardConstants$State;
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->registerForNetworkLocked(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->registerUiccCardEvents()V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->resetProperties()V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->setExternalState(Lcom/android/internal/telephony/IccCardConstants$State;)V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->setExternalState(Lcom/android/internal/telephony/IccCardConstants$State;Z)V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->setVoiceRadioTech(I)V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->unregisterUiccCardEvents()V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->updateExternalState()V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->updateIccAvailability()V
+HSPLcom/android/internal/telephony/uicc/IccCardProxy;->updateQuietMode()V
+HSPLcom/android/internal/telephony/uicc/IccCardStatus$CardState;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/uicc/IccCardStatus$PinState;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/internal/telephony/uicc/IccCardStatus;-><init>()V
+HSPLcom/android/internal/telephony/uicc/IccCardStatus;->setCardState(I)V
+HSPLcom/android/internal/telephony/uicc/IccCardStatus;->setUniversalPinState(I)V
+HSPLcom/android/internal/telephony/uicc/IccCardStatus;->toString()Ljava/lang/String;
+HSPLcom/android/internal/telephony/uicc/IccUtils;->bytesToHexString([B)Ljava/lang/String;
+HSPLcom/android/internal/telephony/uicc/UiccCard$1;-><init>(Lcom/android/internal/telephony/uicc/UiccCard;)V
+HSPLcom/android/internal/telephony/uicc/UiccCard;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;Lcom/android/internal/telephony/uicc/IccCardStatus;I)V
+HSPLcom/android/internal/telephony/uicc/UiccCard;->checkIndexLocked(ILcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;)I
+HSPLcom/android/internal/telephony/uicc/UiccCard;->createAndUpdateCatServiceLocked()V
+HSPLcom/android/internal/telephony/uicc/UiccCard;->getApplication(I)Lcom/android/internal/telephony/uicc/UiccCardApplication;
+HSPLcom/android/internal/telephony/uicc/UiccCard;->getCardState()Lcom/android/internal/telephony/uicc/IccCardStatus$CardState;
+HSPLcom/android/internal/telephony/uicc/UiccCard;->getCarrierPackageNamesForIntent(Landroid/content/pm/PackageManager;Landroid/content/Intent;)Ljava/util/List;
+HSPLcom/android/internal/telephony/uicc/UiccCard;->getCarrierPrivilegeRules()Lcom/android/internal/telephony/uicc/UiccCarrierPrivilegeRules;
+HSPLcom/android/internal/telephony/uicc/UiccCard;->getIccId()Ljava/lang/String;
+HSPLcom/android/internal/telephony/uicc/UiccCard;->getOperatorBrandOverride()Ljava/lang/String;
+HSPLcom/android/internal/telephony/uicc/UiccCard;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/uicc/UiccCard;->registerForAbsent(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/uicc/UiccCard;->sanitizeApplicationIndexesLocked()V
+HSPLcom/android/internal/telephony/uicc/UiccCard;->update(Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;Lcom/android/internal/telephony/uicc/IccCardStatus;)V
+HSPLcom/android/internal/telephony/uicc/UiccController;-><init>(Landroid/content/Context;[Lcom/android/internal/telephony/CommandsInterface;)V
+HSPLcom/android/internal/telephony/uicc/UiccController;->getCiIndex(Landroid/os/Message;)Ljava/lang/Integer;
+HSPLcom/android/internal/telephony/uicc/UiccController;->getIccRecords(II)Lcom/android/internal/telephony/uicc/IccRecords;
+HSPLcom/android/internal/telephony/uicc/UiccController;->getInstance()Lcom/android/internal/telephony/uicc/UiccController;
+HSPLcom/android/internal/telephony/uicc/UiccController;->getUiccCard(I)Lcom/android/internal/telephony/uicc/UiccCard;
+HSPLcom/android/internal/telephony/uicc/UiccController;->getUiccCardApplication(II)Lcom/android/internal/telephony/uicc/UiccCardApplication;
+HSPLcom/android/internal/telephony/uicc/UiccController;->getUiccCards()[Lcom/android/internal/telephony/uicc/UiccCard;
+HSPLcom/android/internal/telephony/uicc/UiccController;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/uicc/UiccController;->isValidCardIndex(I)Z
+HSPLcom/android/internal/telephony/uicc/UiccController;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/telephony/uicc/UiccController;->make(Landroid/content/Context;[Lcom/android/internal/telephony/CommandsInterface;)Lcom/android/internal/telephony/uicc/UiccController;
+HSPLcom/android/internal/telephony/uicc/UiccController;->onGetIccCardStatusDone(Landroid/os/AsyncResult;Ljava/lang/Integer;)V
+HSPLcom/android/internal/telephony/uicc/UiccController;->registerForIccChanged(Landroid/os/Handler;ILjava/lang/Object;)V
+HSPLcom/android/internal/telephony/uicc/UiccStateChangedLauncher;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/uicc/UiccController;)V
+HSPLcom/android/internal/telephony/uicc/UiccStateChangedLauncher;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/telephony/uicc/UiccStateChangedLauncher;->notifyStateChanged()V
+HSPLcom/android/internal/telephony/util/NotificationChannelController$1;-><init>(Lcom/android/internal/telephony/util/NotificationChannelController;)V
+HSPLcom/android/internal/telephony/util/NotificationChannelController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/internal/telephony/util/NotificationChannelController;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/util/NotificationChannelController;->createAll(Landroid/content/Context;)V
+HSPLcom/android/internal/telephony/util/NotificationChannelController;->getChannel(Ljava/lang/String;Landroid/content/Context;)Landroid/app/NotificationChannel;
+HSPLcom/android/internal/util/ArrayUtils;->appendInt([II)[I
+HSPLcom/android/internal/util/ArrayUtils;->appendInt([IIZ)[I
+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;->emptyArray(Ljava/lang/Class;)[Ljava/lang/Object;
+HSPLcom/android/internal/util/ArrayUtils;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLcom/android/internal/util/ArrayUtils;->isEmpty(Ljava/util/Collection;)Z
+HSPLcom/android/internal/util/ArrayUtils;->isEmpty([I)Z
+HSPLcom/android/internal/util/ArrayUtils;->isEmpty([Ljava/lang/Object;)Z
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedArray(Ljava/lang/Class;I)[Ljava/lang/Object;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedBooleanArray(I)[Z
+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;->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;-><init>()V
+HSPLcom/android/internal/util/AsyncChannel;->connect(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Messenger;)V
+HSPLcom/android/internal/util/AsyncChannel;->connected(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Messenger;)V
+HSPLcom/android/internal/util/AsyncChannel;->linkToDeathMonitor()Z
+HSPLcom/android/internal/util/AsyncChannel;->replyHalfConnected(I)V
+HSPLcom/android/internal/util/BitUtils;->bitAt(I)J
+HSPLcom/android/internal/util/BitUtils;->isBitSet(JI)Z
+HSPLcom/android/internal/util/BitUtils;->unpackBits(J)[I
+HSPLcom/android/internal/util/ConcurrentUtils$1$1;-><init>(Lcom/android/internal/util/ConcurrentUtils$1;Ljava/lang/String;ILjava/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/ExponentiallyBucketedHistogram;-><init>(I)V
+HSPLcom/android/internal/util/ExponentiallyBucketedHistogram;->add(I)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$DummyWriter;)V
+HSPLcom/android/internal/util/FastPrintWriter;-><init>(Ljava/io/OutputStream;)V
+HSPLcom/android/internal/util/FastPrintWriter;-><init>(Ljava/io/OutputStream;ZI)V
+HSPLcom/android/internal/util/FastPrintWriter;-><init>(Ljava/io/Writer;ZI)V
+HSPLcom/android/internal/util/FastPrintWriter;->appendLocked(Ljava/lang/String;II)V
+HSPLcom/android/internal/util/FastPrintWriter;->flush()V
+HSPLcom/android/internal/util/FastPrintWriter;->flushBytesLocked()V
+HSPLcom/android/internal/util/FastPrintWriter;->flushLocked()V
+HSPLcom/android/internal/util/FastPrintWriter;->initDefaultEncoder()V
+HSPLcom/android/internal/util/FastPrintWriter;->print(Ljava/lang/String;)V
+HSPLcom/android/internal/util/FastPrintWriter;->println()V
+HSPLcom/android/internal/util/FastPrintWriter;->write(Ljava/lang/String;)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;
+HSPLcom/android/internal/util/FastXmlSerializer;->escapeAndAppendString(Ljava/lang/String;)V
+HSPLcom/android/internal/util/FastXmlSerializer;->flush()V
+HSPLcom/android/internal/util/FastXmlSerializer;->flushBytes()V
+HSPLcom/android/internal/util/FastXmlSerializer;->setFeature(Ljava/lang/String;Z)V
+HSPLcom/android/internal/util/FastXmlSerializer;->setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V
+HSPLcom/android/internal/util/FastXmlSerializer;->startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V
+HSPLcom/android/internal/util/FastXmlSerializer;->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/GrowingArrayUtils;->append([III)[I
+HSPLcom/android/internal/util/GrowingArrayUtils;->append([JIJ)[J
+HSPLcom/android/internal/util/GrowingArrayUtils;->append([Ljava/lang/Object;ILjava/lang/Object;)[Ljava/lang/Object;
+HSPLcom/android/internal/util/GrowingArrayUtils;->append([ZIZ)[Z
+HSPLcom/android/internal/util/GrowingArrayUtils;->growSize(I)I
+HSPLcom/android/internal/util/GrowingArrayUtils;->insert([IIII)[I
+HSPLcom/android/internal/util/GrowingArrayUtils;->insert([JIIJ)[J
+HSPLcom/android/internal/util/GrowingArrayUtils;->insert([Ljava/lang/Object;IILjava/lang/Object;)[Ljava/lang/Object;
+HSPLcom/android/internal/util/GrowingArrayUtils;->insert([ZIIZ)[Z
+HSPLcom/android/internal/util/IState;->getName()Ljava/lang/String;
+HSPLcom/android/internal/util/ImageUtils;-><init>()V
+HSPLcom/android/internal/util/ImageUtils;->ensureBufferSize(I)V
+HSPLcom/android/internal/util/ImageUtils;->isGrayscale(I)Z
+HSPLcom/android/internal/util/ImageUtils;->isGrayscale(Landroid/graphics/Bitmap;)Z
+HSPLcom/android/internal/util/IndentingPrintWriter;-><init>(Ljava/io/Writer;Ljava/lang/String;I)V
+HSPLcom/android/internal/util/IndentingPrintWriter;->decreaseIndent()V
+HSPLcom/android/internal/util/IndentingPrintWriter;->increaseIndent()V
+HSPLcom/android/internal/util/IndentingPrintWriter;->maybeWriteIndent()V
+HSPLcom/android/internal/util/IndentingPrintWriter;->printPair(Ljava/lang/String;Ljava/lang/Object;)V
+HSPLcom/android/internal/util/IndentingPrintWriter;->println()V
+HSPLcom/android/internal/util/IndentingPrintWriter;->write(I)V
+HSPLcom/android/internal/util/IndentingPrintWriter;->write(Ljava/lang/String;II)V
+HSPLcom/android/internal/util/IndentingPrintWriter;->write([CII)V
+HSPLcom/android/internal/util/IntPair;->first(J)I
+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/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
+HSPLcom/android/internal/util/LineBreakBufferedWriter;->write(Ljava/lang/String;II)V
+HSPLcom/android/internal/util/LineBreakBufferedWriter;->writeBuffer(I)V
+HSPLcom/android/internal/util/MemInfoReader;-><init>()V
+HSPLcom/android/internal/util/MemInfoReader;->getTotalSize()J
+HSPLcom/android/internal/util/MemInfoReader;->readMemInfo()V
+HSPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->compositeAlpha(II)I
+HSPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->compositeColors(II)I
+HSPLcom/android/internal/util/NotificationColorUtil$ColorUtilsFromCompat;->compositeComponent(IIIII)I
+HSPLcom/android/internal/util/NotificationColorUtil;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/util/NotificationColorUtil;->compositeColors(II)I
+HSPLcom/android/internal/util/NotificationColorUtil;->getInstance(Landroid/content/Context;)Lcom/android/internal/util/NotificationColorUtil;
+HSPLcom/android/internal/util/NotificationColorUtil;->invertCharSequenceColors(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLcom/android/internal/util/NotificationColorUtil;->isGrayscaleIcon(Landroid/content/Context;I)Z
+HSPLcom/android/internal/util/NotificationColorUtil;->isGrayscaleIcon(Landroid/content/Context;Landroid/graphics/drawable/Icon;)Z
+HSPLcom/android/internal/util/NotificationColorUtil;->isGrayscaleIcon(Landroid/graphics/Bitmap;)Z
+HSPLcom/android/internal/util/NotificationColorUtil;->isGrayscaleIcon(Landroid/graphics/drawable/Drawable;)Z
+HSPLcom/android/internal/util/NotificationColorUtil;->resolveActionBarColor(Landroid/content/Context;I)I
+HSPLcom/android/internal/util/NotificationColorUtil;->resolvePrimaryColor(Landroid/content/Context;I)I
+HSPLcom/android/internal/util/NotificationColorUtil;->resolveSecondaryColor(Landroid/content/Context;I)I
+HSPLcom/android/internal/util/NotificationColorUtil;->shouldUseDark(I)Z
+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
+HSPLcom/android/internal/util/Preconditions;->checkArgument(Z)V
+HSPLcom/android/internal/util/Preconditions;->checkArgument(ZLjava/lang/Object;)V
+HSPLcom/android/internal/util/Preconditions;->checkArgumentFinite(FLjava/lang/String;)F
+HSPLcom/android/internal/util/Preconditions;->checkArgumentInRange(IIILjava/lang/String;)I
+HSPLcom/android/internal/util/Preconditions;->checkArgumentNonnegative(ILjava/lang/String;)I
+HSPLcom/android/internal/util/Preconditions;->checkArgumentNonnegative(JLjava/lang/String;)J
+HSPLcom/android/internal/util/Preconditions;->checkArgumentPositive(ILjava/lang/String;)I
+HSPLcom/android/internal/util/Preconditions;->checkArrayElementsInRange([FFFLjava/lang/String;)[F
+HSPLcom/android/internal/util/Preconditions;->checkArrayElementsNotNull([Ljava/lang/Object;Ljava/lang/String;)[Ljava/lang/Object;
+HSPLcom/android/internal/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/internal/util/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/internal/util/Preconditions;->checkState(Z)V
+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/State;-><init>()V
+HSPLcom/android/internal/util/State;->enter()V
+HSPLcom/android/internal/util/State;->exit()V
+HSPLcom/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
+HSPLcom/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$LogRecords;)V
+HSPLcom/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
+HSPLcom/android/internal/util/StateMachine$LogRecords;->logOnlyTransitions()Z
+HSPLcom/android/internal/util/StateMachine$LogRecords;->setSize(I)V
+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$SmHandler$HaltingState;)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$SmHandler$QuittingState;)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$SmHandler$StateInfo;)V
+HSPLcom/android/internal/util/StateMachine$SmHandler;->-get4(Lcom/android/internal/util/StateMachine$SmHandler;)Lcom/android/internal/util/StateMachine$LogRecords;
+HSPLcom/android/internal/util/StateMachine$SmHandler;->-wrap0(Lcom/android/internal/util/StateMachine$SmHandler;)Landroid/os/Message;
+HSPLcom/android/internal/util/StateMachine$SmHandler;->-wrap11(Lcom/android/internal/util/StateMachine$SmHandler;Lcom/android/internal/util/State;)V
+HSPLcom/android/internal/util/StateMachine$SmHandler;->-wrap12(Lcom/android/internal/util/StateMachine$SmHandler;Lcom/android/internal/util/IState;)V
+HSPLcom/android/internal/util/StateMachine$SmHandler;->-wrap3(Lcom/android/internal/util/StateMachine$SmHandler;)Lcom/android/internal/util/IState;
+HSPLcom/android/internal/util/StateMachine$SmHandler;->-wrap4(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;->-wrap5(Lcom/android/internal/util/StateMachine$SmHandler;)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$SmHandler;)V
+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
+HSPLcom/android/internal/util/StateMachine$SmHandler;->getCurrentMessage()Landroid/os/Message;
+HSPLcom/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
+HSPLcom/android/internal/util/StateMachine$SmHandler;->invokeExitMethods(Lcom/android/internal/util/StateMachine$SmHandler$StateInfo;)V
+HSPLcom/android/internal/util/StateMachine$SmHandler;->isQuit(Landroid/os/Message;)Z
+HSPLcom/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
+HSPLcom/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
+HSPLcom/android/internal/util/StateMachine$SmHandler;->setupTempStateStackWithStatesToEnter(Lcom/android/internal/util/State;)Lcom/android/internal/util/StateMachine$SmHandler$StateInfo;
+HSPLcom/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
+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
+HSPLcom/android/internal/util/StateMachine;->getCurrentMessage()Landroid/os/Message;
+HSPLcom/android/internal/util/StateMachine;->getCurrentState()Lcom/android/internal/util/IState;
+HSPLcom/android/internal/util/StateMachine;->getHandler()Landroid/os/Handler;
+HSPLcom/android/internal/util/StateMachine;->getLogRecString(Landroid/os/Message;)Ljava/lang/String;
+HSPLcom/android/internal/util/StateMachine;->getName()Ljava/lang/String;
+HSPLcom/android/internal/util/StateMachine;->initStateMachine(Ljava/lang/String;Landroid/os/Looper;)V
+HSPLcom/android/internal/util/StateMachine;->log(Ljava/lang/String;)V
+HSPLcom/android/internal/util/StateMachine;->obtainMessage(I)Landroid/os/Message;
+HSPLcom/android/internal/util/StateMachine;->obtainMessage(ILjava/lang/Object;)Landroid/os/Message;
+HSPLcom/android/internal/util/StateMachine;->onPostHandleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/util/StateMachine;->onPreHandleMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/util/StateMachine;->recordLogRec(Landroid/os/Message;)Z
+HSPLcom/android/internal/util/StateMachine;->removeMessages(I)V
+HSPLcom/android/internal/util/StateMachine;->sendMessage(I)V
+HSPLcom/android/internal/util/StateMachine;->sendMessage(ILjava/lang/Object;)V
+HSPLcom/android/internal/util/StateMachine;->sendMessage(Landroid/os/Message;)V
+HSPLcom/android/internal/util/StateMachine;->sendMessageDelayed(IJ)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
+HSPLcom/android/internal/util/StateMachine;->transitionTo(Lcom/android/internal/util/IState;)V
+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$WriteMapCallback;->writeUnknownObject(Ljava/lang/Object;Ljava/lang/String;Lorg/xmlpull/v1/XmlSerializer;)V
+HSPLcom/android/internal/util/XmlUtils;->beginDocument(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)V
+HSPLcom/android/internal/util/XmlUtils;->nextElement(Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLcom/android/internal/util/XmlUtils;->nextElementWithin(Lorg/xmlpull/v1/XmlPullParser;I)Z
+HSPLcom/android/internal/util/XmlUtils;->readBooleanAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Z)Z
+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)J
+HSPLcom/android/internal/util/XmlUtils;->readMapXml(Ljava/io/InputStream;)Ljava/util/HashMap;
+HSPLcom/android/internal/util/XmlUtils;->readStringAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/internal/util/XmlUtils;->readThisMapXml(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;
+HSPLcom/android/internal/util/XmlUtils;->readThisValueXml(Lorg/xmlpull/v1/XmlPullParser;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;Z)Ljava/lang/Object;
+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;->writeIntAttribute(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;I)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
+HSPLcom/android/internal/util/XmlUtils;->writeStringAttribute(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/lang/CharSequence;)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
+HSPLcom/android/internal/view/ActionBarPolicy;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/view/ActionBarPolicy;->enableHomeButtonByDefault()Z
+HSPLcom/android/internal/view/ActionBarPolicy;->get(Landroid/content/Context;)Lcom/android/internal/view/ActionBarPolicy;
+HSPLcom/android/internal/view/ActionBarPolicy;->getEmbeddedMenuWidthLimit()I
+HSPLcom/android/internal/view/ActionBarPolicy;->getMaxActionButtons()I
+HSPLcom/android/internal/view/ActionBarPolicy;->hasEmbeddedTabs()Z
+HSPLcom/android/internal/view/ActionBarPolicy;->showsOverflowMenuButton()Z
+HSPLcom/android/internal/view/BaseIWindow;-><init>()V
+HSPLcom/android/internal/view/BaseIWindow;->setSession(Landroid/view/IWindowSession;)V
+HSPLcom/android/internal/view/BaseSurfaceHolder;-><init>()V
+HSPLcom/android/internal/view/BaseSurfaceHolder;->addCallback(Landroid/view/SurfaceHolder$Callback;)V
+HSPLcom/android/internal/view/BaseSurfaceHolder;->getCallbacks()[Landroid/view/SurfaceHolder$Callback;
+HSPLcom/android/internal/view/BaseSurfaceHolder;->getRequestedFormat()I
+HSPLcom/android/internal/view/BaseSurfaceHolder;->getRequestedHeight()I
+HSPLcom/android/internal/view/BaseSurfaceHolder;->getRequestedType()I
+HSPLcom/android/internal/view/BaseSurfaceHolder;->getRequestedWidth()I
+HSPLcom/android/internal/view/BaseSurfaceHolder;->getSurface()Landroid/view/Surface;
+HSPLcom/android/internal/view/BaseSurfaceHolder;->onAllowLockCanvas()Z
+HSPLcom/android/internal/view/BaseSurfaceHolder;->onRelayoutContainer()V
+HSPLcom/android/internal/view/BaseSurfaceHolder;->onUpdateSurface()V
+HSPLcom/android/internal/view/BaseSurfaceHolder;->setSizeFromLayout()V
+HSPLcom/android/internal/view/BaseSurfaceHolder;->setSurfaceFrameSize(II)V
+HSPLcom/android/internal/view/BaseSurfaceHolder;->ungetCallbacks()V
+HSPLcom/android/internal/view/IInputConnectionWrapper$MyHandler;-><init>(Lcom/android/internal/view/IInputConnectionWrapper;Landroid/os/Looper;)V
+HSPLcom/android/internal/view/IInputConnectionWrapper$MyHandler;->handleMessage(Landroid/os/Message;)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
+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;
+HSPLcom/android/internal/view/IInputConnectionWrapper;->isActive()Z
+HSPLcom/android/internal/view/IInputConnectionWrapper;->isFinished()Z
+HSPLcom/android/internal/view/IInputConnectionWrapper;->obtainMessage(I)Landroid/os/Message;
+HSPLcom/android/internal/view/IInputConnectionWrapper;->onUserAction()V
+HSPLcom/android/internal/view/IInputContext$Stub$Proxy;-><init>(Landroid/os/IBinder;)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;
+HSPLcom/android/internal/view/IInputContext$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/internal/view/IInputContext;->beginBatchEdit()V
+HSPLcom/android/internal/view/IInputContext;->clearMetaKeyStates(I)V
+HSPLcom/android/internal/view/IInputContext;->commitCompletion(Landroid/view/inputmethod/CompletionInfo;)V
+HSPLcom/android/internal/view/IInputContext;->commitContent(Landroid/view/inputmethod/InputContentInfo;ILandroid/os/Bundle;ILcom/android/internal/view/IInputContextCallback;)V
+HSPLcom/android/internal/view/IInputContext;->commitCorrection(Landroid/view/inputmethod/CorrectionInfo;)V
+HSPLcom/android/internal/view/IInputContext;->commitText(Ljava/lang/CharSequence;I)V
+HSPLcom/android/internal/view/IInputContext;->deleteSurroundingText(II)V
+HSPLcom/android/internal/view/IInputContext;->deleteSurroundingTextInCodePoints(II)V
+HSPLcom/android/internal/view/IInputContext;->endBatchEdit()V
+HSPLcom/android/internal/view/IInputContext;->finishComposingText()V
+HSPLcom/android/internal/view/IInputContext;->getCursorCapsMode(IILcom/android/internal/view/IInputContextCallback;)V
+HSPLcom/android/internal/view/IInputContext;->getExtractedText(Landroid/view/inputmethod/ExtractedTextRequest;IILcom/android/internal/view/IInputContextCallback;)V
+HSPLcom/android/internal/view/IInputContext;->getSelectedText(IILcom/android/internal/view/IInputContextCallback;)V
+HSPLcom/android/internal/view/IInputContext;->getTextAfterCursor(IIILcom/android/internal/view/IInputContextCallback;)V
+HSPLcom/android/internal/view/IInputContext;->getTextBeforeCursor(IIILcom/android/internal/view/IInputContextCallback;)V
+HSPLcom/android/internal/view/IInputContext;->performContextMenuAction(I)V
+HSPLcom/android/internal/view/IInputContext;->performEditorAction(I)V
+HSPLcom/android/internal/view/IInputContext;->performPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V
+HSPLcom/android/internal/view/IInputContext;->requestUpdateCursorAnchorInfo(IILcom/android/internal/view/IInputContextCallback;)V
+HSPLcom/android/internal/view/IInputContext;->sendKeyEvent(Landroid/view/KeyEvent;)V
+HSPLcom/android/internal/view/IInputContext;->setComposingRegion(II)V
+HSPLcom/android/internal/view/IInputContext;->setComposingText(Ljava/lang/CharSequence;I)V
+HSPLcom/android/internal/view/IInputContext;->setSelection(II)V
+HSPLcom/android/internal/view/IInputMethod$Stub;-><init>()V
+HSPLcom/android/internal/view/IInputMethod$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/internal/view/IInputMethod;->attachToken(Landroid/os/IBinder;)V
+HSPLcom/android/internal/view/IInputMethod;->bindInput(Landroid/view/inputmethod/InputBinding;)V
+HSPLcom/android/internal/view/IInputMethod;->changeInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)V
+HSPLcom/android/internal/view/IInputMethod;->createSession(Landroid/view/InputChannel;Lcom/android/internal/view/IInputSessionCallback;)V
+HSPLcom/android/internal/view/IInputMethod;->hideSoftInput(ILandroid/os/ResultReceiver;)V
+HSPLcom/android/internal/view/IInputMethod;->revokeSession(Lcom/android/internal/view/IInputMethodSession;)V
+HSPLcom/android/internal/view/IInputMethod;->setSessionEnabled(Lcom/android/internal/view/IInputMethodSession;Z)V
+HSPLcom/android/internal/view/IInputMethod;->showSoftInput(ILandroid/os/ResultReceiver;)V
+HSPLcom/android/internal/view/IInputMethod;->startInput(Landroid/os/IBinder;Lcom/android/internal/view/IInputContext;ILandroid/view/inputmethod/EditorInfo;Z)V
+HSPLcom/android/internal/view/IInputMethod;->unbindInput()V
+HSPLcom/android/internal/view/IInputMethodClient$Stub;-><init>()V
+HSPLcom/android/internal/view/IInputMethodClient$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/internal/view/IInputMethodClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/internal/view/IInputMethodClient;->onBindMethod(Lcom/android/internal/view/InputBindResult;)V
+HSPLcom/android/internal/view/IInputMethodClient;->onUnbindMethod(II)V
+HSPLcom/android/internal/view/IInputMethodClient;->reportFullscreenMode(Z)V
+HSPLcom/android/internal/view/IInputMethodClient;->setActive(ZZ)V
+HSPLcom/android/internal/view/IInputMethodClient;->setUserActionNotificationSequenceNumber(I)V
+HSPLcom/android/internal/view/IInputMethodClient;->setUsingInputMethod(Z)V
+HSPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->getCurrentInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;
+HSPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->getInputMethodWindowVisibleHeight()I
+HSPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->hideSoftInput(Lcom/android/internal/view/IInputMethodClient;ILandroid/os/ResultReceiver;)Z
+HSPLcom/android/internal/view/IInputMethodManager$Stub$Proxy;->reportFullscreenMode(Landroid/os/IBinder;Z)V
+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;I)Lcom/android/internal/view/InputBindResult;
+HSPLcom/android/internal/view/IInputMethodManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodManager;
+HSPLcom/android/internal/view/IInputMethodManager;->addClient(Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;II)V
+HSPLcom/android/internal/view/IInputMethodManager;->clearLastInputMethodWindowForTransition(Landroid/os/IBinder;)V
+HSPLcom/android/internal/view/IInputMethodManager;->createInputContentUriToken(Landroid/os/IBinder;Landroid/net/Uri;Ljava/lang/String;)Lcom/android/internal/inputmethod/IInputContentUriToken;
+HSPLcom/android/internal/view/IInputMethodManager;->finishInput(Lcom/android/internal/view/IInputMethodClient;)V
+HSPLcom/android/internal/view/IInputMethodManager;->getCurrentInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;
+HSPLcom/android/internal/view/IInputMethodManager;->getEnabledInputMethodList()Ljava/util/List;
+HSPLcom/android/internal/view/IInputMethodManager;->getEnabledInputMethodSubtypeList(Ljava/lang/String;Z)Ljava/util/List;
+HSPLcom/android/internal/view/IInputMethodManager;->getInputMethodList()Ljava/util/List;
+HSPLcom/android/internal/view/IInputMethodManager;->getInputMethodWindowVisibleHeight()I
+HSPLcom/android/internal/view/IInputMethodManager;->getLastInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;
+HSPLcom/android/internal/view/IInputMethodManager;->getShortcutInputMethodsAndSubtypes()Ljava/util/List;
+HSPLcom/android/internal/view/IInputMethodManager;->hideMySoftInput(Landroid/os/IBinder;I)V
+HSPLcom/android/internal/view/IInputMethodManager;->hideSoftInput(Lcom/android/internal/view/IInputMethodClient;ILandroid/os/ResultReceiver;)Z
+HSPLcom/android/internal/view/IInputMethodManager;->notifySuggestionPicked(Landroid/text/style/SuggestionSpan;Ljava/lang/String;I)Z
+HSPLcom/android/internal/view/IInputMethodManager;->notifyUserAction(I)V
+HSPLcom/android/internal/view/IInputMethodManager;->registerSuggestionSpansForNotification([Landroid/text/style/SuggestionSpan;)V
+HSPLcom/android/internal/view/IInputMethodManager;->removeClient(Lcom/android/internal/view/IInputMethodClient;)V
+HSPLcom/android/internal/view/IInputMethodManager;->reportFullscreenMode(Landroid/os/IBinder;Z)V
+HSPLcom/android/internal/view/IInputMethodManager;->setAdditionalInputMethodSubtypes(Ljava/lang/String;[Landroid/view/inputmethod/InputMethodSubtype;)V
+HSPLcom/android/internal/view/IInputMethodManager;->setCurrentInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)Z
+HSPLcom/android/internal/view/IInputMethodManager;->setImeWindowStatus(Landroid/os/IBinder;Landroid/os/IBinder;II)V
+HSPLcom/android/internal/view/IInputMethodManager;->setInputMethod(Landroid/os/IBinder;Ljava/lang/String;)V
+HSPLcom/android/internal/view/IInputMethodManager;->setInputMethodAndSubtype(Landroid/os/IBinder;Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V
+HSPLcom/android/internal/view/IInputMethodManager;->setInputMethodEnabled(Ljava/lang/String;Z)Z
+HSPLcom/android/internal/view/IInputMethodManager;->shouldOfferSwitchingToNextInputMethod(Landroid/os/IBinder;)Z
+HSPLcom/android/internal/view/IInputMethodManager;->showInputMethodAndSubtypeEnablerFromClient(Lcom/android/internal/view/IInputMethodClient;Ljava/lang/String;)V
+HSPLcom/android/internal/view/IInputMethodManager;->showInputMethodPickerFromClient(Lcom/android/internal/view/IInputMethodClient;I)V
+HSPLcom/android/internal/view/IInputMethodManager;->showMySoftInput(Landroid/os/IBinder;I)V
+HSPLcom/android/internal/view/IInputMethodManager;->showSoftInput(Lcom/android/internal/view/IInputMethodClient;ILandroid/os/ResultReceiver;)Z
+HSPLcom/android/internal/view/IInputMethodManager;->startInputOrWindowGainedFocus(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;I)Lcom/android/internal/view/InputBindResult;
+HSPLcom/android/internal/view/IInputMethodManager;->switchToLastInputMethod(Landroid/os/IBinder;)Z
+HSPLcom/android/internal/view/IInputMethodManager;->switchToNextInputMethod(Landroid/os/IBinder;Z)Z
+HSPLcom/android/internal/view/IInputMethodManager;->updateStatusIcon(Landroid/os/IBinder;Ljava/lang/String;I)V
+HSPLcom/android/internal/view/IInputMethodSession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/view/IInputMethodSession$Stub;-><init>()V
+HSPLcom/android/internal/view/IInputMethodSession$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/internal/view/IInputMethodSession$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodSession;
+HSPLcom/android/internal/view/IInputMethodSession;->appPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V
+HSPLcom/android/internal/view/IInputMethodSession;->displayCompletions([Landroid/view/inputmethod/CompletionInfo;)V
+HSPLcom/android/internal/view/IInputMethodSession;->finishInput()V
+HSPLcom/android/internal/view/IInputMethodSession;->finishSession()V
+HSPLcom/android/internal/view/IInputMethodSession;->toggleSoftInput(II)V
+HSPLcom/android/internal/view/IInputMethodSession;->updateCursor(Landroid/graphics/Rect;)V
+HSPLcom/android/internal/view/IInputMethodSession;->updateCursorAnchorInfo(Landroid/view/inputmethod/CursorAnchorInfo;)V
+HSPLcom/android/internal/view/IInputMethodSession;->updateExtractedText(ILandroid/view/inputmethod/ExtractedText;)V
+HSPLcom/android/internal/view/IInputMethodSession;->updateSelection(IIIIII)V
+HSPLcom/android/internal/view/IInputMethodSession;->viewClicked(Z)V
+HSPLcom/android/internal/view/IInputSessionCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/view/IInputSessionCallback$Stub$Proxy;->sessionCreated(Lcom/android/internal/view/IInputMethodSession;)V
+HSPLcom/android/internal/view/IInputSessionCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputSessionCallback;
+HSPLcom/android/internal/view/IInputSessionCallback;->sessionCreated(Lcom/android/internal/view/IInputMethodSession;)V
+HSPLcom/android/internal/view/InputBindResult$1;-><init>()V
+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;
+HSPLcom/android/internal/view/InputBindResult;-><init>(Landroid/os/Parcel;)V
+HSPLcom/android/internal/view/InputConnectionWrapper;-><init>(Ljava/lang/ref/WeakReference;Lcom/android/internal/view/IInputContext;I)V
+HSPLcom/android/internal/view/RootViewSurfaceTaker;->onRootViewScrollYChanged(I)V
+HSPLcom/android/internal/view/RootViewSurfaceTaker;->setSurfaceFormat(I)V
+HSPLcom/android/internal/view/RootViewSurfaceTaker;->setSurfaceKeepScreenOn(Z)V
+HSPLcom/android/internal/view/RootViewSurfaceTaker;->setSurfaceType(I)V
+HSPLcom/android/internal/view/RootViewSurfaceTaker;->willYouTakeTheInputQueue()Landroid/view/InputQueue$Callback;
+HSPLcom/android/internal/view/RootViewSurfaceTaker;->willYouTakeTheSurface()Landroid/view/SurfaceHolder$Callback2;
+HSPLcom/android/internal/view/RotationPolicy$RotationPolicyListener$1;-><init>(Lcom/android/internal/view/RotationPolicy$RotationPolicyListener;Landroid/os/Handler;)V
+HSPLcom/android/internal/view/RotationPolicy$RotationPolicyListener;-><init>()V
+HSPLcom/android/internal/view/RotationPolicy$RotationPolicyListener;->onChange()V
+HSPLcom/android/internal/view/RotationPolicy;->areAllRotationsAllowed(Landroid/content/Context;)Z
+HSPLcom/android/internal/view/RotationPolicy;->getRotationLockOrientation(Landroid/content/Context;)I
+HSPLcom/android/internal/view/RotationPolicy;->isRotationLockToggleVisible(Landroid/content/Context;)Z
+HSPLcom/android/internal/view/RotationPolicy;->isRotationLocked(Landroid/content/Context;)Z
+HSPLcom/android/internal/view/RotationPolicy;->isRotationSupported(Landroid/content/Context;)Z
+HSPLcom/android/internal/view/RotationPolicy;->registerRotationPolicyListener(Landroid/content/Context;Lcom/android/internal/view/RotationPolicy$RotationPolicyListener;I)V
+HSPLcom/android/internal/view/SurfaceCallbackHelper$1;-><init>(Lcom/android/internal/view/SurfaceCallbackHelper;)V
+HSPLcom/android/internal/view/SurfaceCallbackHelper$1;->run()V
+HSPLcom/android/internal/view/SurfaceCallbackHelper;-><init>(Ljava/lang/Runnable;)V
+HSPLcom/android/internal/view/SurfaceCallbackHelper;->dispatchSurfaceRedrawNeededAsync(Landroid/view/SurfaceHolder;[Landroid/view/SurfaceHolder$Callback;)V
+HSPLcom/android/internal/view/SurfaceFlingerVsyncChoreographer;-><init>(Landroid/os/Handler;Landroid/view/Display;Landroid/view/Choreographer;)V
+HSPLcom/android/internal/view/SurfaceFlingerVsyncChoreographer;->calculateAppSurfaceFlingerVsyncOffsetMs(Landroid/view/Display;)J
+HSPLcom/android/internal/view/animation/NativeInterpolatorFactory;->createNativeInterpolator()J
+HSPLcom/android/internal/view/menu/ActionMenuItem;-><init>(Landroid/content/Context;IIIILjava/lang/CharSequence;)V
+HSPLcom/android/internal/view/menu/ActionMenuItemView$PopupCallback;-><init>()V
+HSPLcom/android/internal/view/menu/ActionMenuItemView$PopupCallback;->getPopup()Lcom/android/internal/view/menu/ShowableListMenu;
+HSPLcom/android/internal/view/menu/ActionMenuItemView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLcom/android/internal/view/menu/ActionMenuItemView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLcom/android/internal/view/menu/ActionMenuItemView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLcom/android/internal/view/menu/ActionMenuItemView;->hasText()Z
+HSPLcom/android/internal/view/menu/ActionMenuItemView;->initialize(Lcom/android/internal/view/menu/MenuItemImpl;I)V
+HSPLcom/android/internal/view/menu/ActionMenuItemView;->onMeasure(II)V
+HSPLcom/android/internal/view/menu/ActionMenuItemView;->prefersCondensedTitle()Z
+HSPLcom/android/internal/view/menu/ActionMenuItemView;->setIcon(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/view/menu/ActionMenuItemView;->setItemInvoker(Lcom/android/internal/view/menu/MenuBuilder$ItemInvoker;)V
+HSPLcom/android/internal/view/menu/ActionMenuItemView;->setPopupCallback(Lcom/android/internal/view/menu/ActionMenuItemView$PopupCallback;)V
+HSPLcom/android/internal/view/menu/ActionMenuItemView;->setTitle(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/view/menu/ActionMenuItemView;->shouldAllowTextWithIcon()Z
+HSPLcom/android/internal/view/menu/ActionMenuItemView;->updateTextButtonVisibility()V
+HSPLcom/android/internal/view/menu/BaseMenuPresenter;-><init>(Landroid/content/Context;II)V
+HSPLcom/android/internal/view/menu/BaseMenuPresenter;->addItemView(Landroid/view/View;I)V
+HSPLcom/android/internal/view/menu/BaseMenuPresenter;->bindItemView(Lcom/android/internal/view/menu/MenuItemImpl;Lcom/android/internal/view/menu/MenuView$ItemView;)V
+HSPLcom/android/internal/view/menu/BaseMenuPresenter;->createItemView(Landroid/view/ViewGroup;)Lcom/android/internal/view/menu/MenuView$ItemView;
+HSPLcom/android/internal/view/menu/BaseMenuPresenter;->getItemView(Lcom/android/internal/view/menu/MenuItemImpl;Landroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;
+HSPLcom/android/internal/view/menu/BaseMenuPresenter;->initForMenu(Landroid/content/Context;Lcom/android/internal/view/menu/MenuBuilder;)V
+HSPLcom/android/internal/view/menu/BaseMenuPresenter;->setCallback(Lcom/android/internal/view/menu/MenuPresenter$Callback;)V
+HSPLcom/android/internal/view/menu/BaseMenuPresenter;->setId(I)V
+HSPLcom/android/internal/view/menu/BaseMenuPresenter;->updateMenuView(Z)V
+HSPLcom/android/internal/view/menu/MenuBuilder$ItemInvoker;->invokeItem(Lcom/android/internal/view/menu/MenuItemImpl;)Z
+HSPLcom/android/internal/view/menu/MenuBuilder;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/view/menu/MenuBuilder;->add(IIILjava/lang/CharSequence;)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuBuilder;->add(Ljava/lang/CharSequence;)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuBuilder;->addInternal(IIILjava/lang/CharSequence;)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuBuilder;->addMenuPresenter(Lcom/android/internal/view/menu/MenuPresenter;Landroid/content/Context;)V
+HSPLcom/android/internal/view/menu/MenuBuilder;->clear()V
+HSPLcom/android/internal/view/menu/MenuBuilder;->createNewMenuItem(IIIILjava/lang/CharSequence;I)Lcom/android/internal/view/menu/MenuItemImpl;
+HSPLcom/android/internal/view/menu/MenuBuilder;->dispatchPresenterUpdate(Z)V
+HSPLcom/android/internal/view/menu/MenuBuilder;->findInsertIndex(Ljava/util/ArrayList;I)I
+HSPLcom/android/internal/view/menu/MenuBuilder;->findItem(I)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuBuilder;->flagActionItems()V
+HSPLcom/android/internal/view/menu/MenuBuilder;->getActionItems()Ljava/util/ArrayList;
+HSPLcom/android/internal/view/menu/MenuBuilder;->getContext()Landroid/content/Context;
+HSPLcom/android/internal/view/menu/MenuBuilder;->getNonActionItems()Ljava/util/ArrayList;
+HSPLcom/android/internal/view/menu/MenuBuilder;->getOrdering(I)I
+HSPLcom/android/internal/view/menu/MenuBuilder;->getVisibleItems()Ljava/util/ArrayList;
+HSPLcom/android/internal/view/menu/MenuBuilder;->hasVisibleItems()Z
+HSPLcom/android/internal/view/menu/MenuBuilder;->onItemActionRequestChanged(Lcom/android/internal/view/menu/MenuItemImpl;)V
+HSPLcom/android/internal/view/menu/MenuBuilder;->onItemVisibleChanged(Lcom/android/internal/view/menu/MenuItemImpl;)V
+HSPLcom/android/internal/view/menu/MenuBuilder;->onItemsChanged(Z)V
+HSPLcom/android/internal/view/menu/MenuBuilder;->saveActionViewStates(Landroid/os/Bundle;)V
+HSPLcom/android/internal/view/menu/MenuBuilder;->setCallback(Lcom/android/internal/view/menu/MenuBuilder$Callback;)V
+HSPLcom/android/internal/view/menu/MenuBuilder;->setQwertyMode(Z)V
+HSPLcom/android/internal/view/menu/MenuBuilder;->setShortcutsVisibleInner(Z)V
+HSPLcom/android/internal/view/menu/MenuBuilder;->size()I
+HSPLcom/android/internal/view/menu/MenuBuilder;->startDispatchingItemsChanged()V
+HSPLcom/android/internal/view/menu/MenuBuilder;->stopDispatchingItemsChanged()V
+HSPLcom/android/internal/view/menu/MenuHelper;->dismiss()V
+HSPLcom/android/internal/view/menu/MenuHelper;->setPresenterCallback(Lcom/android/internal/view/menu/MenuPresenter$Callback;)V
+HSPLcom/android/internal/view/menu/MenuItemImpl;-><init>(Lcom/android/internal/view/menu/MenuBuilder;IIIILjava/lang/CharSequence;I)V
+HSPLcom/android/internal/view/menu/MenuItemImpl;->getActionProvider()Landroid/view/ActionProvider;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->getActionView()Landroid/view/View;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->getContentDescription()Ljava/lang/CharSequence;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->getGroupId()I
+HSPLcom/android/internal/view/menu/MenuItemImpl;->getIcon()Landroid/graphics/drawable/Drawable;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->getItemId()I
+HSPLcom/android/internal/view/menu/MenuItemImpl;->getOrdering()I
+HSPLcom/android/internal/view/menu/MenuItemImpl;->getTitle()Ljava/lang/CharSequence;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->getTitleCondensed()Ljava/lang/CharSequence;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->getTitleForItemView(Lcom/android/internal/view/menu/MenuView$ItemView;)Ljava/lang/CharSequence;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->getTooltipText()Ljava/lang/CharSequence;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->hasSubMenu()Z
+HSPLcom/android/internal/view/menu/MenuItemImpl;->isActionButton()Z
+HSPLcom/android/internal/view/menu/MenuItemImpl;->isActionViewExpanded()Z
+HSPLcom/android/internal/view/menu/MenuItemImpl;->isEnabled()Z
+HSPLcom/android/internal/view/menu/MenuItemImpl;->isVisible()Z
+HSPLcom/android/internal/view/menu/MenuItemImpl;->requestsActionButton()Z
+HSPLcom/android/internal/view/menu/MenuItemImpl;->requiresActionButton()Z
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setAlphabeticShortcut(CI)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setCheckable(Z)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setChecked(Z)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setCheckedInt(Z)V
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setContentDescription(Ljava/lang/CharSequence;)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setEnabled(Z)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setIcon(I)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setIntent(Landroid/content/Intent;)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setIsActionButton(Z)V
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setNumericShortcut(CI)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setShowAsAction(I)V
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setTitleCondensed(Ljava/lang/CharSequence;)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setTooltipText(Ljava/lang/CharSequence;)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setVisible(Z)Landroid/view/MenuItem;
+HSPLcom/android/internal/view/menu/MenuItemImpl;->setVisibleInt(Z)Z
+HSPLcom/android/internal/view/menu/MenuPopupHelper$1;-><init>(Lcom/android/internal/view/menu/MenuPopupHelper;)V
+HSPLcom/android/internal/view/menu/MenuPopupHelper;-><init>(Landroid/content/Context;Lcom/android/internal/view/menu/MenuBuilder;Landroid/view/View;ZII)V
+HSPLcom/android/internal/view/menu/MenuPopupHelper;->setGravity(I)V
+HSPLcom/android/internal/view/menu/MenuPopupHelper;->setOnDismissListener(Landroid/widget/PopupWindow$OnDismissListener;)V
+HSPLcom/android/internal/view/menu/MenuPresenter$Callback;->onCloseMenu(Lcom/android/internal/view/menu/MenuBuilder;Z)V
+HSPLcom/android/internal/view/menu/MenuPresenter$Callback;->onOpenSubMenu(Lcom/android/internal/view/menu/MenuBuilder;)Z
+HSPLcom/android/internal/view/menu/MenuPresenter;->onRestoreInstanceState(Landroid/os/Parcelable;)V
+HSPLcom/android/internal/view/menu/MenuPresenter;->onSaveInstanceState()Landroid/os/Parcelable;
+HSPLcom/android/internal/view/menu/MenuView$ItemView;->getItemData()Lcom/android/internal/view/menu/MenuItemImpl;
+HSPLcom/android/internal/view/menu/MenuView$ItemView;->initialize(Lcom/android/internal/view/menu/MenuItemImpl;I)V
+HSPLcom/android/internal/view/menu/MenuView$ItemView;->prefersCondensedTitle()Z
+HSPLcom/android/internal/view/menu/MenuView$ItemView;->setCheckable(Z)V
+HSPLcom/android/internal/view/menu/MenuView$ItemView;->setChecked(Z)V
+HSPLcom/android/internal/view/menu/MenuView$ItemView;->setEnabled(Z)V
+HSPLcom/android/internal/view/menu/MenuView$ItemView;->setIcon(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/view/menu/MenuView$ItemView;->setShortcut(ZC)V
+HSPLcom/android/internal/view/menu/MenuView$ItemView;->setTitle(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/view/menu/MenuView$ItemView;->showsIcon()Z
+HSPLcom/android/internal/view/menu/MenuView;->getWindowAnimations()I
+HSPLcom/android/internal/view/menu/MenuView;->initialize(Lcom/android/internal/view/menu/MenuBuilder;)V
+HSPLcom/android/internal/view/menu/ShowableListMenu;->dismiss()V
+HSPLcom/android/internal/view/menu/ShowableListMenu;->getListView()Landroid/widget/ListView;
+HSPLcom/android/internal/view/menu/ShowableListMenu;->isShowing()Z
+HSPLcom/android/internal/view/menu/ShowableListMenu;->show()V
+HSPLcom/android/internal/widget/AbsActionBarView$VisibilityAnimListener;-><init>(Lcom/android/internal/widget/AbsActionBarView;)V
+HSPLcom/android/internal/widget/AbsActionBarView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable;-><init>(Lcom/android/internal/widget/ActionBarContainer;)V
+HSPLcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable;-><init>(Lcom/android/internal/widget/ActionBarContainer;Lcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable;)V
+HSPLcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable;->getOpacity()I
+HSPLcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable;->getOutline(Landroid/graphics/Outline;)V
+HSPLcom/android/internal/widget/ActionBarContainer;->-get0(Lcom/android/internal/widget/ActionBarContainer;)Landroid/view/View;
+HSPLcom/android/internal/widget/ActionBarContainer;->-get1(Lcom/android/internal/widget/ActionBarContainer;)Landroid/graphics/drawable/Drawable;
+HSPLcom/android/internal/widget/ActionBarContainer;->-get2(Lcom/android/internal/widget/ActionBarContainer;)Z
+HSPLcom/android/internal/widget/ActionBarContainer;->-get3(Lcom/android/internal/widget/ActionBarContainer;)Z
+HSPLcom/android/internal/widget/ActionBarContainer;->-get5(Lcom/android/internal/widget/ActionBarContainer;)Landroid/graphics/drawable/Drawable;
+HSPLcom/android/internal/widget/ActionBarContainer;->-wrap0(Landroid/view/View;)Z
+HSPLcom/android/internal/widget/ActionBarContainer;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLcom/android/internal/widget/ActionBarContainer;->drawableStateChanged()V
+HSPLcom/android/internal/widget/ActionBarContainer;->isCollapsed(Landroid/view/View;)Z
+HSPLcom/android/internal/widget/ActionBarContainer;->jumpDrawablesToCurrentState()V
+HSPLcom/android/internal/widget/ActionBarContainer;->onFinishInflate()V
+HSPLcom/android/internal/widget/ActionBarContainer;->onLayout(ZIIII)V
+HSPLcom/android/internal/widget/ActionBarContainer;->onMeasure(II)V
+HSPLcom/android/internal/widget/ActionBarContainer;->onResolveDrawables(I)V
+HSPLcom/android/internal/widget/ActionBarContainer;->setPrimaryBackground(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/widget/ActionBarContainer;->setTabContainer(Lcom/android/internal/widget/ScrollingTabContainerView;)V
+HSPLcom/android/internal/widget/ActionBarContainer;->setTransitioning(Z)V
+HSPLcom/android/internal/widget/ActionBarContainer;->setVisibility(I)V
+HSPLcom/android/internal/widget/ActionBarContainer;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
+HSPLcom/android/internal/widget/ActionBarContextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLcom/android/internal/widget/ActionBarContextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLcom/android/internal/widget/ActionBarContextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout$1;-><init>(Lcom/android/internal/widget/ActionBarOverlayLayout;)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout$2;-><init>(Lcom/android/internal/widget/ActionBarOverlayLayout;)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout$3;-><init>(Lcom/android/internal/widget/ActionBarOverlayLayout;)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout$4;-><init>(Lcom/android/internal/widget/ActionBarOverlayLayout;)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout$5;-><init>(Ljava/lang/String;)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback;->enableContentAnimations(Z)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback;->hideForSystem()V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback;->onContentScrollStarted()V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback;->onContentScrollStopped()V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback;->onWindowVisibilityChanged(I)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback;->showForSystem()V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->applyInsets(Landroid/view/View;Landroid/graphics/Rect;ZZZZ)Z
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Lcom/android/internal/widget/ActionBarOverlayLayout$LayoutParams;
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->getDecorToolbar(Landroid/view/View;)Lcom/android/internal/widget/DecorToolbar;
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->getTitle()Ljava/lang/CharSequence;
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->hasIcon()Z
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->hasLogo()Z
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->init(Landroid/content/Context;)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->initFeature(I)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->onApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->onLayout(ZIIII)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->onMeasure(II)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->onWindowSystemUiVisibilityChanged(I)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->onWindowVisibilityChanged(I)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->pullChildren()V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->setActionBarVisibilityCallback(Lcom/android/internal/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback;)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->setHasNonEmbeddedTabs(Z)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->setIcon(I)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->setIcon(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->setLogo(I)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->setMenu(Landroid/view/Menu;Lcom/android/internal/view/menu/MenuPresenter$Callback;)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->setMenuPrepared()V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->setOverlayMode(Z)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->setUiOptions(I)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->setWindowCallback(Landroid/view/Window$Callback;)V
+HSPLcom/android/internal/widget/ActionBarOverlayLayout;->setWindowTitle(Ljava/lang/CharSequence;)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;)V
+HSPLcom/android/internal/widget/BackgroundFallback;->hasFallback()Z
+HSPLcom/android/internal/widget/BackgroundFallback;->setDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/widget/DecorContentParent;->canShowOverflowMenu()Z
+HSPLcom/android/internal/widget/DecorContentParent;->dismissPopups()V
+HSPLcom/android/internal/widget/DecorContentParent;->getTitle()Ljava/lang/CharSequence;
+HSPLcom/android/internal/widget/DecorContentParent;->hasIcon()Z
+HSPLcom/android/internal/widget/DecorContentParent;->hasLogo()Z
+HSPLcom/android/internal/widget/DecorContentParent;->hideOverflowMenu()Z
+HSPLcom/android/internal/widget/DecorContentParent;->initFeature(I)V
+HSPLcom/android/internal/widget/DecorContentParent;->isOverflowMenuShowPending()Z
+HSPLcom/android/internal/widget/DecorContentParent;->isOverflowMenuShowing()Z
+HSPLcom/android/internal/widget/DecorContentParent;->restoreToolbarHierarchyState(Landroid/util/SparseArray;)V
+HSPLcom/android/internal/widget/DecorContentParent;->saveToolbarHierarchyState(Landroid/util/SparseArray;)V
+HSPLcom/android/internal/widget/DecorContentParent;->setIcon(I)V
+HSPLcom/android/internal/widget/DecorContentParent;->setIcon(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/widget/DecorContentParent;->setLogo(I)V
+HSPLcom/android/internal/widget/DecorContentParent;->setMenu(Landroid/view/Menu;Lcom/android/internal/view/menu/MenuPresenter$Callback;)V
+HSPLcom/android/internal/widget/DecorContentParent;->setMenuPrepared()V
+HSPLcom/android/internal/widget/DecorContentParent;->setUiOptions(I)V
+HSPLcom/android/internal/widget/DecorContentParent;->setWindowCallback(Landroid/view/Window$Callback;)V
+HSPLcom/android/internal/widget/DecorContentParent;->setWindowTitle(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/widget/DecorContentParent;->showOverflowMenu()Z
+HSPLcom/android/internal/widget/DecorToolbar;->animateToVisibility(I)V
+HSPLcom/android/internal/widget/DecorToolbar;->canShowOverflowMenu()Z
+HSPLcom/android/internal/widget/DecorToolbar;->canSplit()Z
+HSPLcom/android/internal/widget/DecorToolbar;->collapseActionView()V
+HSPLcom/android/internal/widget/DecorToolbar;->dismissPopupMenus()V
+HSPLcom/android/internal/widget/DecorToolbar;->getContext()Landroid/content/Context;
+HSPLcom/android/internal/widget/DecorToolbar;->getCustomView()Landroid/view/View;
+HSPLcom/android/internal/widget/DecorToolbar;->getDisplayOptions()I
+HSPLcom/android/internal/widget/DecorToolbar;->getDropdownItemCount()I
+HSPLcom/android/internal/widget/DecorToolbar;->getDropdownSelectedPosition()I
+HSPLcom/android/internal/widget/DecorToolbar;->getHeight()I
+HSPLcom/android/internal/widget/DecorToolbar;->getMenu()Landroid/view/Menu;
+HSPLcom/android/internal/widget/DecorToolbar;->getNavigationMode()I
+HSPLcom/android/internal/widget/DecorToolbar;->getSubtitle()Ljava/lang/CharSequence;
+HSPLcom/android/internal/widget/DecorToolbar;->getTitle()Ljava/lang/CharSequence;
+HSPLcom/android/internal/widget/DecorToolbar;->getViewGroup()Landroid/view/ViewGroup;
+HSPLcom/android/internal/widget/DecorToolbar;->getVisibility()I
+HSPLcom/android/internal/widget/DecorToolbar;->hasEmbeddedTabs()Z
+HSPLcom/android/internal/widget/DecorToolbar;->hasExpandedActionView()Z
+HSPLcom/android/internal/widget/DecorToolbar;->hasIcon()Z
+HSPLcom/android/internal/widget/DecorToolbar;->hasLogo()Z
+HSPLcom/android/internal/widget/DecorToolbar;->hideOverflowMenu()Z
+HSPLcom/android/internal/widget/DecorToolbar;->initIndeterminateProgress()V
+HSPLcom/android/internal/widget/DecorToolbar;->initProgress()V
+HSPLcom/android/internal/widget/DecorToolbar;->isOverflowMenuShowPending()Z
+HSPLcom/android/internal/widget/DecorToolbar;->isOverflowMenuShowing()Z
+HSPLcom/android/internal/widget/DecorToolbar;->isSplit()Z
+HSPLcom/android/internal/widget/DecorToolbar;->isTitleTruncated()Z
+HSPLcom/android/internal/widget/DecorToolbar;->restoreHierarchyState(Landroid/util/SparseArray;)V
+HSPLcom/android/internal/widget/DecorToolbar;->saveHierarchyState(Landroid/util/SparseArray;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setCollapsible(Z)V
+HSPLcom/android/internal/widget/DecorToolbar;->setCustomView(Landroid/view/View;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setDefaultNavigationContentDescription(I)V
+HSPLcom/android/internal/widget/DecorToolbar;->setDefaultNavigationIcon(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setDisplayOptions(I)V
+HSPLcom/android/internal/widget/DecorToolbar;->setDropdownParams(Landroid/widget/SpinnerAdapter;Landroid/widget/AdapterView$OnItemSelectedListener;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setDropdownSelectedPosition(I)V
+HSPLcom/android/internal/widget/DecorToolbar;->setEmbeddedTabView(Lcom/android/internal/widget/ScrollingTabContainerView;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setHomeButtonEnabled(Z)V
+HSPLcom/android/internal/widget/DecorToolbar;->setIcon(I)V
+HSPLcom/android/internal/widget/DecorToolbar;->setIcon(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setLogo(I)V
+HSPLcom/android/internal/widget/DecorToolbar;->setLogo(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setMenu(Landroid/view/Menu;Lcom/android/internal/view/menu/MenuPresenter$Callback;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setMenuCallbacks(Lcom/android/internal/view/menu/MenuPresenter$Callback;Lcom/android/internal/view/menu/MenuBuilder$Callback;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setMenuPrepared()V
+HSPLcom/android/internal/widget/DecorToolbar;->setNavigationContentDescription(I)V
+HSPLcom/android/internal/widget/DecorToolbar;->setNavigationContentDescription(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setNavigationIcon(I)V
+HSPLcom/android/internal/widget/DecorToolbar;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setNavigationMode(I)V
+HSPLcom/android/internal/widget/DecorToolbar;->setSplitToolbar(Z)V
+HSPLcom/android/internal/widget/DecorToolbar;->setSplitView(Landroid/view/ViewGroup;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setSplitWhenNarrow(Z)V
+HSPLcom/android/internal/widget/DecorToolbar;->setSubtitle(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setTitle(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setVisibility(I)V
+HSPLcom/android/internal/widget/DecorToolbar;->setWindowCallback(Landroid/view/Window$Callback;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setWindowTitle(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/widget/DecorToolbar;->setupAnimatorToVisibility(IJ)Landroid/animation/Animator;
+HSPLcom/android/internal/widget/DecorToolbar;->showOverflowMenu()Z
+HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->checkVoldPassword(I)Z
+HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getBoolean(Ljava/lang/String;ZI)Z
+HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getLong(Ljava/lang/String;JI)J
+HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getString(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->registerStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
+HSPLcom/android/internal/widget/ILockSettings$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/ILockSettings;
+HSPLcom/android/internal/widget/ILockSettings;->addEscrowToken([BI)J
+HSPLcom/android/internal/widget/ILockSettings;->checkCredential(Ljava/lang/String;IILcom/android/internal/widget/ICheckCredentialProgressCallback;)Lcom/android/internal/widget/VerifyCredentialResponse;
+HSPLcom/android/internal/widget/ILockSettings;->checkVoldPassword(I)Z
+HSPLcom/android/internal/widget/ILockSettings;->getBoolean(Ljava/lang/String;ZI)Z
+HSPLcom/android/internal/widget/ILockSettings;->getLong(Ljava/lang/String;JI)J
+HSPLcom/android/internal/widget/ILockSettings;->getSeparateProfileChallengeEnabled(I)Z
+HSPLcom/android/internal/widget/ILockSettings;->getString(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/internal/widget/ILockSettings;->getStrongAuthForUser(I)I
+HSPLcom/android/internal/widget/ILockSettings;->havePassword(I)Z
+HSPLcom/android/internal/widget/ILockSettings;->havePattern(I)Z
+HSPLcom/android/internal/widget/ILockSettings;->isEscrowTokenActive(JI)Z
+HSPLcom/android/internal/widget/ILockSettings;->registerStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
+HSPLcom/android/internal/widget/ILockSettings;->removeEscrowToken(JI)Z
+HSPLcom/android/internal/widget/ILockSettings;->requireStrongAuth(II)V
+HSPLcom/android/internal/widget/ILockSettings;->resetKeyStore(I)V
+HSPLcom/android/internal/widget/ILockSettings;->setBoolean(Ljava/lang/String;ZI)V
+HSPLcom/android/internal/widget/ILockSettings;->setLockCredential(Ljava/lang/String;ILjava/lang/String;II)V
+HSPLcom/android/internal/widget/ILockSettings;->setLockCredentialWithToken(Ljava/lang/String;IJ[BII)Z
+HSPLcom/android/internal/widget/ILockSettings;->setLong(Ljava/lang/String;JI)V
+HSPLcom/android/internal/widget/ILockSettings;->setSeparateProfileChallengeEnabled(IZLjava/lang/String;)V
+HSPLcom/android/internal/widget/ILockSettings;->setString(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/internal/widget/ILockSettings;->systemReady()V
+HSPLcom/android/internal/widget/ILockSettings;->unlockUserWithToken(J[BI)V
+HSPLcom/android/internal/widget/ILockSettings;->unregisterStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
+HSPLcom/android/internal/widget/ILockSettings;->userPresent(I)V
+HSPLcom/android/internal/widget/ILockSettings;->verifyCredential(Ljava/lang/String;IJI)Lcom/android/internal/widget/VerifyCredentialResponse;
+HSPLcom/android/internal/widget/ILockSettings;->verifyTiedProfileChallenge(Ljava/lang/String;IJI)Lcom/android/internal/widget/VerifyCredentialResponse;
+HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$1;-><init>(Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;)V
+HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$H;-><init>(Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;Landroid/os/Looper;)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
+HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->getDefaultFlags(Landroid/content/Context;)I
+HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->getStrongAuthForUser(I)I
+HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->isFingerprintAllowedForUser(I)Z
+HSPLcom/android/internal/widget/LockPatternUtils;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/widget/LockPatternUtils;->checkVoldPassword(I)Z
+HSPLcom/android/internal/widget/LockPatternUtils;->getBoolean(Ljava/lang/String;ZI)Z
+HSPLcom/android/internal/widget/LockPatternUtils;->getDeviceOwnerInfo()Ljava/lang/String;
+HSPLcom/android/internal/widget/LockPatternUtils;->getKeyguardStoredPasswordQuality(I)I
+HSPLcom/android/internal/widget/LockPatternUtils;->getLockSettings()Lcom/android/internal/widget/ILockSettings;
+HSPLcom/android/internal/widget/LockPatternUtils;->getLong(Ljava/lang/String;JI)J
+HSPLcom/android/internal/widget/LockPatternUtils;->getString(Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/internal/widget/LockPatternUtils;->getUserManager()Landroid/os/UserManager;
+HSPLcom/android/internal/widget/LockPatternUtils;->isDeviceOwnerInfoEnabled()Z
+HSPLcom/android/internal/widget/LockPatternUtils;->isLockPasswordEnabled(II)Z
+HSPLcom/android/internal/widget/LockPatternUtils;->isLockPatternEnabled(II)Z
+HSPLcom/android/internal/widget/LockPatternUtils;->isLockScreenDisabled(I)Z
+HSPLcom/android/internal/widget/LockPatternUtils;->isOwnerInfoEnabled(I)Z
+HSPLcom/android/internal/widget/LockPatternUtils;->isSecure(I)Z
+HSPLcom/android/internal/widget/LockPatternUtils;->registerStrongAuthTracker(Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;)V
+HSPLcom/android/internal/widget/ScrollBarUtils;->getThumbLength(IIII)I
+HSPLcom/android/internal/widget/ScrollBarUtils;->getThumbOffset(IIIII)I
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper$1;-><init>(Lcom/android/internal/widget/ToolbarWidgetWrapper;)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->-get1(Lcom/android/internal/widget/ToolbarWidgetWrapper;)Ljava/lang/CharSequence;
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->-get2(Lcom/android/internal/widget/ToolbarWidgetWrapper;)Landroid/widget/Toolbar;
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;-><init>(Landroid/widget/Toolbar;Z)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;-><init>(Landroid/widget/Toolbar;ZI)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->detectDisplayOptions()I
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->getContext()Landroid/content/Context;
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->getDisplayOptions()I
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->getMenu()Landroid/view/Menu;
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->getNavigationMode()I
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->getTitle()Ljava/lang/CharSequence;
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->getViewGroup()Landroid/view/ViewGroup;
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->hasIcon()Z
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->hasLogo()Z
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->isSplit()Z
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setCollapsible(Z)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setDefaultNavigationContentDescription(I)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setDisplayOptions(I)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setEmbeddedTabView(Lcom/android/internal/widget/ScrollingTabContainerView;)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setHomeButtonEnabled(Z)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setIcon(I)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setIcon(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setLogo(I)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setLogo(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setMenu(Landroid/view/Menu;Lcom/android/internal/view/menu/MenuPresenter$Callback;)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setMenuCallbacks(Lcom/android/internal/view/menu/MenuPresenter$Callback;Lcom/android/internal/view/menu/MenuBuilder$Callback;)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setMenuPrepared()V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setNavigationContentDescription(I)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setNavigationContentDescription(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setTitleInt(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setWindowCallback(Landroid/view/Window$Callback;)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->setWindowTitle(Ljava/lang/CharSequence;)V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->updateHomeAccessibility()V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->updateNavigationIcon()V
+HSPLcom/android/internal/widget/ToolbarWidgetWrapper;->updateToolbarLogo()V
+HSPLcom/android/okhttp/Address;-><init>(Ljava/lang/String;ILcom/android/okhttp/Dns;Ljavax/net/SocketFactory;Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/HostnameVerifier;Lcom/android/okhttp/CertificatePinner;Lcom/android/okhttp/Authenticator;Ljava/net/Proxy;Ljava/util/List;Ljava/util/List;Ljava/net/ProxySelector;)V
+HSPLcom/android/okhttp/Address;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/okhttp/Address;->getCertificatePinner()Lcom/android/okhttp/CertificatePinner;
+HSPLcom/android/okhttp/Address;->getConnectionSpecs()Ljava/util/List;
+HSPLcom/android/okhttp/Address;->getDns()Lcom/android/okhttp/Dns;
+HSPLcom/android/okhttp/Address;->getHostnameVerifier()Ljavax/net/ssl/HostnameVerifier;
+HSPLcom/android/okhttp/Address;->getProtocols()Ljava/util/List;
+HSPLcom/android/okhttp/Address;->getProxy()Ljava/net/Proxy;
+HSPLcom/android/okhttp/Address;->getProxySelector()Ljava/net/ProxySelector;
+HSPLcom/android/okhttp/Address;->getSocketFactory()Ljavax/net/SocketFactory;
+HSPLcom/android/okhttp/Address;->getSslSocketFactory()Ljavax/net/ssl/SSLSocketFactory;
+HSPLcom/android/okhttp/Address;->getUriHost()Ljava/lang/String;
+HSPLcom/android/okhttp/Address;->getUriPort()I
+HSPLcom/android/okhttp/Address;->hashCode()I
+HSPLcom/android/okhttp/Address;->url()Lcom/android/okhttp/HttpUrl;
+HSPLcom/android/okhttp/AndroidShimResponseCache;-><init>(Lcom/android/okhttp/Cache;)V
+HSPLcom/android/okhttp/AndroidShimResponseCache;->create(Ljava/io/File;J)Lcom/android/okhttp/AndroidShimResponseCache;
+HSPLcom/android/okhttp/Authenticator;->authenticate(Ljava/net/Proxy;Lcom/android/okhttp/Response;)Lcom/android/okhttp/Request;
+HSPLcom/android/okhttp/Authenticator;->authenticateProxy(Ljava/net/Proxy;Lcom/android/okhttp/Response;)Lcom/android/okhttp/Request;
+HSPLcom/android/okhttp/Cache$1;-><init>(Lcom/android/okhttp/Cache;)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
+HSPLcom/android/okhttp/CacheControl$Builder;-><init>()V
+HSPLcom/android/okhttp/CacheControl$Builder;->build()Lcom/android/okhttp/CacheControl;
+HSPLcom/android/okhttp/CacheControl$Builder;->maxStale(ILjava/util/concurrent/TimeUnit;)Lcom/android/okhttp/CacheControl$Builder;
+HSPLcom/android/okhttp/CacheControl$Builder;->noCache()Lcom/android/okhttp/CacheControl$Builder;
+HSPLcom/android/okhttp/CacheControl$Builder;->onlyIfCached()Lcom/android/okhttp/CacheControl$Builder;
+HSPLcom/android/okhttp/CacheControl;-><init>(Lcom/android/okhttp/CacheControl$Builder;)V
+HSPLcom/android/okhttp/CacheControl;-><init>(Lcom/android/okhttp/CacheControl$Builder;Lcom/android/okhttp/CacheControl;)V
+HSPLcom/android/okhttp/CacheControl;-><init>(ZZIIZZZIIZZLjava/lang/String;)V
+HSPLcom/android/okhttp/CacheControl;->onlyIfCached()Z
+HSPLcom/android/okhttp/CacheControl;->parse(Lcom/android/okhttp/Headers;)Lcom/android/okhttp/CacheControl;
+HSPLcom/android/okhttp/CertificatePinner$Builder;->-get0(Lcom/android/okhttp/CertificatePinner$Builder;)Ljava/util/Map;
+HSPLcom/android/okhttp/CertificatePinner$Builder;-><init>()V
+HSPLcom/android/okhttp/CertificatePinner$Builder;->build()Lcom/android/okhttp/CertificatePinner;
+HSPLcom/android/okhttp/CertificatePinner;-><init>(Lcom/android/okhttp/CertificatePinner$Builder;)V
+HSPLcom/android/okhttp/CertificatePinner;-><init>(Lcom/android/okhttp/CertificatePinner$Builder;Lcom/android/okhttp/CertificatePinner;)V
+HSPLcom/android/okhttp/CipherSuite;-><init>(Ljava/lang/String;ILjava/lang/String;IIII)V
+HSPLcom/android/okhttp/ConfigAwareConnectionPool$1;-><init>(Lcom/android/okhttp/ConfigAwareConnectionPool;)V
+HSPLcom/android/okhttp/ConfigAwareConnectionPool;-><init>()V
+HSPLcom/android/okhttp/ConfigAwareConnectionPool;->get()Lcom/android/okhttp/ConnectionPool;
+HSPLcom/android/okhttp/ConfigAwareConnectionPool;->getInstance()Lcom/android/okhttp/ConfigAwareConnectionPool;
+HSPLcom/android/okhttp/Connection;->getHandshake()Lcom/android/okhttp/Handshake;
+HSPLcom/android/okhttp/Connection;->getProtocol()Lcom/android/okhttp/Protocol;
+HSPLcom/android/okhttp/Connection;->getRoute()Lcom/android/okhttp/Route;
+HSPLcom/android/okhttp/Connection;->getSocket()Ljava/net/Socket;
+HSPLcom/android/okhttp/ConnectionPool$1;-><init>(Lcom/android/okhttp/ConnectionPool;)V
+HSPLcom/android/okhttp/ConnectionPool$1;->run()V
+HSPLcom/android/okhttp/ConnectionPool;-><init>(IJ)V
+HSPLcom/android/okhttp/ConnectionPool;-><init>(IJLjava/util/concurrent/TimeUnit;)V
+HSPLcom/android/okhttp/ConnectionPool;->cleanup(J)J
+HSPLcom/android/okhttp/ConnectionPool;->connectionBecameIdle(Lcom/android/okhttp/internal/io/RealConnection;)Z
+HSPLcom/android/okhttp/ConnectionPool;->get(Lcom/android/okhttp/Address;Lcom/android/okhttp/internal/http/StreamAllocation;)Lcom/android/okhttp/internal/io/RealConnection;
+HSPLcom/android/okhttp/ConnectionPool;->pruneAndGetAllocationCount(Lcom/android/okhttp/internal/io/RealConnection;J)I
+HSPLcom/android/okhttp/ConnectionPool;->put(Lcom/android/okhttp/internal/io/RealConnection;)V
+HSPLcom/android/okhttp/ConnectionSpec$Builder;->-get0(Lcom/android/okhttp/ConnectionSpec$Builder;)[Ljava/lang/String;
+HSPLcom/android/okhttp/ConnectionSpec$Builder;->-get1(Lcom/android/okhttp/ConnectionSpec$Builder;)Z
+HSPLcom/android/okhttp/ConnectionSpec$Builder;->-get2(Lcom/android/okhttp/ConnectionSpec$Builder;)Z
+HSPLcom/android/okhttp/ConnectionSpec$Builder;->-get3(Lcom/android/okhttp/ConnectionSpec$Builder;)[Ljava/lang/String;
+HSPLcom/android/okhttp/ConnectionSpec$Builder;-><init>(Lcom/android/okhttp/ConnectionSpec;)V
+HSPLcom/android/okhttp/ConnectionSpec$Builder;-><init>(Z)V
+HSPLcom/android/okhttp/ConnectionSpec$Builder;->allEnabledCipherSuites()Lcom/android/okhttp/ConnectionSpec$Builder;
+HSPLcom/android/okhttp/ConnectionSpec$Builder;->allEnabledTlsVersions()Lcom/android/okhttp/ConnectionSpec$Builder;
+HSPLcom/android/okhttp/ConnectionSpec$Builder;->build()Lcom/android/okhttp/ConnectionSpec;
+HSPLcom/android/okhttp/ConnectionSpec$Builder;->cipherSuites([Lcom/android/okhttp/CipherSuite;)Lcom/android/okhttp/ConnectionSpec$Builder;
+HSPLcom/android/okhttp/ConnectionSpec$Builder;->cipherSuites([Ljava/lang/String;)Lcom/android/okhttp/ConnectionSpec$Builder;
+HSPLcom/android/okhttp/ConnectionSpec$Builder;->supportsTlsExtensions(Z)Lcom/android/okhttp/ConnectionSpec$Builder;
+HSPLcom/android/okhttp/ConnectionSpec$Builder;->tlsVersions([Lcom/android/okhttp/TlsVersion;)Lcom/android/okhttp/ConnectionSpec$Builder;
+HSPLcom/android/okhttp/ConnectionSpec$Builder;->tlsVersions([Ljava/lang/String;)Lcom/android/okhttp/ConnectionSpec$Builder;
+HSPLcom/android/okhttp/ConnectionSpec;->-get0(Lcom/android/okhttp/ConnectionSpec;)[Ljava/lang/String;
+HSPLcom/android/okhttp/ConnectionSpec;->-get1(Lcom/android/okhttp/ConnectionSpec;)Z
+HSPLcom/android/okhttp/ConnectionSpec;->-get2(Lcom/android/okhttp/ConnectionSpec;)Z
+HSPLcom/android/okhttp/ConnectionSpec;->-get3(Lcom/android/okhttp/ConnectionSpec;)[Ljava/lang/String;
+HSPLcom/android/okhttp/ConnectionSpec;-><init>(Lcom/android/okhttp/ConnectionSpec$Builder;)V
+HSPLcom/android/okhttp/ConnectionSpec;-><init>(Lcom/android/okhttp/ConnectionSpec$Builder;Lcom/android/okhttp/ConnectionSpec;)V
+HSPLcom/android/okhttp/ConnectionSpec;->apply(Ljavax/net/ssl/SSLSocket;Z)V
+HSPLcom/android/okhttp/ConnectionSpec;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/okhttp/ConnectionSpec;->hashCode()I
+HSPLcom/android/okhttp/ConnectionSpec;->isCompatible(Ljavax/net/ssl/SSLSocket;)Z
+HSPLcom/android/okhttp/ConnectionSpec;->supportedSpec(Ljavax/net/ssl/SSLSocket;Z)Lcom/android/okhttp/ConnectionSpec;
+HSPLcom/android/okhttp/ConnectionSpec;->supportsTlsExtensions()Z
+HSPLcom/android/okhttp/Dispatcher;-><init>()V
+HSPLcom/android/okhttp/Dns$1;-><init>()V
+HSPLcom/android/okhttp/Dns$1;->lookup(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/okhttp/Dns;->lookup(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/okhttp/Handshake;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
+HSPLcom/android/okhttp/Handshake;->get(Ljavax/net/ssl/SSLSession;)Lcom/android/okhttp/Handshake;
+HSPLcom/android/okhttp/Headers$Builder;->-get0(Lcom/android/okhttp/Headers$Builder;)Ljava/util/List;
+HSPLcom/android/okhttp/Headers$Builder;-><init>()V
+HSPLcom/android/okhttp/Headers$Builder;->add(Ljava/lang/String;Ljava/lang/String;)Lcom/android/okhttp/Headers$Builder;
+HSPLcom/android/okhttp/Headers$Builder;->addLenient(Ljava/lang/String;)Lcom/android/okhttp/Headers$Builder;
+HSPLcom/android/okhttp/Headers$Builder;->addLenient(Ljava/lang/String;Ljava/lang/String;)Lcom/android/okhttp/Headers$Builder;
+HSPLcom/android/okhttp/Headers$Builder;->build()Lcom/android/okhttp/Headers;
+HSPLcom/android/okhttp/Headers$Builder;->checkNameAndValue(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/okhttp/Headers$Builder;->removeAll(Ljava/lang/String;)Lcom/android/okhttp/Headers$Builder;
+HSPLcom/android/okhttp/Headers$Builder;->set(Ljava/lang/String;Ljava/lang/String;)Lcom/android/okhttp/Headers$Builder;
+HSPLcom/android/okhttp/Headers;-><init>(Lcom/android/okhttp/Headers$Builder;)V
+HSPLcom/android/okhttp/Headers;-><init>(Lcom/android/okhttp/Headers$Builder;Lcom/android/okhttp/Headers;)V
+HSPLcom/android/okhttp/Headers;->get(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/okhttp/Headers;->get([Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/okhttp/Headers;->name(I)Ljava/lang/String;
+HSPLcom/android/okhttp/Headers;->newBuilder()Lcom/android/okhttp/Headers$Builder;
+HSPLcom/android/okhttp/Headers;->size()I
+HSPLcom/android/okhttp/Headers;->value(I)Ljava/lang/String;
+HSPLcom/android/okhttp/HttpHandler$CleartextURLFilter;-><init>()V
+HSPLcom/android/okhttp/HttpHandler$CleartextURLFilter;-><init>(Lcom/android/okhttp/HttpHandler$CleartextURLFilter;)V
+HSPLcom/android/okhttp/HttpHandler;-><init>()V
+HSPLcom/android/okhttp/HttpHandler;->createHttpOkUrlFactory(Ljava/net/Proxy;)Lcom/android/okhttp/OkUrlFactory;
+HSPLcom/android/okhttp/HttpHandler;->openConnection(Ljava/net/URL;)Ljava/net/URLConnection;
+HSPLcom/android/okhttp/HttpUrl$Builder$ParseResult;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/okhttp/HttpUrl$Builder$ParseResult;->values()[Lcom/android/okhttp/HttpUrl$Builder$ParseResult;
+HSPLcom/android/okhttp/HttpUrl$Builder;-><init>()V
+HSPLcom/android/okhttp/HttpUrl$Builder;->build()Lcom/android/okhttp/HttpUrl;
+HSPLcom/android/okhttp/HttpUrl$Builder;->canonicalizeHost(Ljava/lang/String;II)Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl$Builder;->containsInvalidHostnameAsciiCodes(Ljava/lang/String;)Z
+HSPLcom/android/okhttp/HttpUrl$Builder;->domainToAscii(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl$Builder;->effectivePort()I
+HSPLcom/android/okhttp/HttpUrl$Builder;->encodedQuery(Ljava/lang/String;)Lcom/android/okhttp/HttpUrl$Builder;
+HSPLcom/android/okhttp/HttpUrl$Builder;->host(Ljava/lang/String;)Lcom/android/okhttp/HttpUrl$Builder;
+HSPLcom/android/okhttp/HttpUrl$Builder;->isDot(Ljava/lang/String;)Z
+HSPLcom/android/okhttp/HttpUrl$Builder;->isDotDot(Ljava/lang/String;)Z
+HSPLcom/android/okhttp/HttpUrl$Builder;->parse(Lcom/android/okhttp/HttpUrl;Ljava/lang/String;)Lcom/android/okhttp/HttpUrl$Builder$ParseResult;
+HSPLcom/android/okhttp/HttpUrl$Builder;->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
+HSPLcom/android/okhttp/HttpUrl$Builder;->reencodeForUri()Lcom/android/okhttp/HttpUrl$Builder;
+HSPLcom/android/okhttp/HttpUrl$Builder;->resolvePath(Ljava/lang/String;II)V
+HSPLcom/android/okhttp/HttpUrl$Builder;->scheme(Ljava/lang/String;)Lcom/android/okhttp/HttpUrl$Builder;
+HSPLcom/android/okhttp/HttpUrl$Builder;->schemeDelimiterOffset(Ljava/lang/String;II)I
+HSPLcom/android/okhttp/HttpUrl$Builder;->skipLeadingAsciiWhitespace(Ljava/lang/String;II)I
+HSPLcom/android/okhttp/HttpUrl$Builder;->skipTrailingAsciiWhitespace(Ljava/lang/String;II)I
+HSPLcom/android/okhttp/HttpUrl$Builder;->slashCount(Ljava/lang/String;II)I
+HSPLcom/android/okhttp/HttpUrl$Builder;->toString()Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->-getcom-android-okhttp-HttpUrl$Builder$ParseResultSwitchesValues()[I
+HSPLcom/android/okhttp/HttpUrl;->-wrap0(Ljava/lang/String;IILjava/lang/String;)I
+HSPLcom/android/okhttp/HttpUrl;-><init>(Lcom/android/okhttp/HttpUrl$Builder;)V
+HSPLcom/android/okhttp/HttpUrl;-><init>(Lcom/android/okhttp/HttpUrl$Builder;Lcom/android/okhttp/HttpUrl;)V
+HSPLcom/android/okhttp/HttpUrl;->canonicalize(Ljava/lang/String;IILjava/lang/String;ZZZZ)Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->canonicalize(Ljava/lang/String;Ljava/lang/String;ZZZZ)Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->decodeHexDigit(C)I
+HSPLcom/android/okhttp/HttpUrl;->defaultPort(Ljava/lang/String;)I
+HSPLcom/android/okhttp/HttpUrl;->delimiterOffset(Ljava/lang/String;IILjava/lang/String;)I
+HSPLcom/android/okhttp/HttpUrl;->encodedFragment()Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->encodedPassword()Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->encodedPath()Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->encodedPathSegments()Ljava/util/List;
+HSPLcom/android/okhttp/HttpUrl;->encodedQuery()Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->encodedUsername()Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/okhttp/HttpUrl;->getChecked(Ljava/lang/String;)Lcom/android/okhttp/HttpUrl;
+HSPLcom/android/okhttp/HttpUrl;->hashCode()I
+HSPLcom/android/okhttp/HttpUrl;->host()Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->isHttps()Z
+HSPLcom/android/okhttp/HttpUrl;->namesAndValuesToQueryString(Ljava/lang/StringBuilder;Ljava/util/List;)V
+HSPLcom/android/okhttp/HttpUrl;->newBuilder()Lcom/android/okhttp/HttpUrl$Builder;
+HSPLcom/android/okhttp/HttpUrl;->pathSegmentsToString(Ljava/lang/StringBuilder;Ljava/util/List;)V
+HSPLcom/android/okhttp/HttpUrl;->percentDecode(Lcom/android/okhttp/okio/Buffer;Ljava/lang/String;IIZ)V
+HSPLcom/android/okhttp/HttpUrl;->percentDecode(Ljava/lang/String;IIZ)Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->percentDecode(Ljava/lang/String;Z)Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->percentDecode(Ljava/util/List;Z)Ljava/util/List;
+HSPLcom/android/okhttp/HttpUrl;->port()I
+HSPLcom/android/okhttp/HttpUrl;->queryStringToNamesAndValues(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/okhttp/HttpUrl;->scheme()Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->uri()Ljava/net/URI;
+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/OkCacheContainer;->getCache()Lcom/android/okhttp/Cache;
+HSPLcom/android/okhttp/OkHttpClient$1;-><init>()V
+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
+HSPLcom/android/okhttp/OkHttpClient$1;->connectionBecameIdle(Lcom/android/okhttp/ConnectionPool;Lcom/android/okhttp/internal/io/RealConnection;)Z
+HSPLcom/android/okhttp/OkHttpClient$1;->get(Lcom/android/okhttp/ConnectionPool;Lcom/android/okhttp/Address;Lcom/android/okhttp/internal/http/StreamAllocation;)Lcom/android/okhttp/internal/io/RealConnection;
+HSPLcom/android/okhttp/OkHttpClient$1;->getHttpUrlChecked(Ljava/lang/String;)Lcom/android/okhttp/HttpUrl;
+HSPLcom/android/okhttp/OkHttpClient$1;->internalCache(Lcom/android/okhttp/OkHttpClient;)Lcom/android/okhttp/internal/InternalCache;
+HSPLcom/android/okhttp/OkHttpClient$1;->put(Lcom/android/okhttp/ConnectionPool;Lcom/android/okhttp/internal/io/RealConnection;)V
+HSPLcom/android/okhttp/OkHttpClient$1;->routeDatabase(Lcom/android/okhttp/ConnectionPool;)Lcom/android/okhttp/internal/RouteDatabase;
+HSPLcom/android/okhttp/OkHttpClient;-><init>()V
+HSPLcom/android/okhttp/OkHttpClient;-><init>(Lcom/android/okhttp/OkHttpClient;)V
+HSPLcom/android/okhttp/OkHttpClient;->copyWithDefaults()Lcom/android/okhttp/OkHttpClient;
+HSPLcom/android/okhttp/OkHttpClient;->getAuthenticator()Lcom/android/okhttp/Authenticator;
+HSPLcom/android/okhttp/OkHttpClient;->getCertificatePinner()Lcom/android/okhttp/CertificatePinner;
+HSPLcom/android/okhttp/OkHttpClient;->getConnectTimeout()I
+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;->getDns()Lcom/android/okhttp/Dns;
+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;
+HSPLcom/android/okhttp/OkHttpClient;->getProxySelector()Ljava/net/ProxySelector;
+HSPLcom/android/okhttp/OkHttpClient;->getReadTimeout()I
+HSPLcom/android/okhttp/OkHttpClient;->getRetryOnConnectionFailure()Z
+HSPLcom/android/okhttp/OkHttpClient;->getSocketFactory()Ljavax/net/SocketFactory;
+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;
+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;->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;->setSslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;)Lcom/android/okhttp/OkHttpClient;
+HSPLcom/android/okhttp/OkHttpClient;->setWriteTimeout(JLjava/util/concurrent/TimeUnit;)V
+HSPLcom/android/okhttp/OkUrlFactory;-><init>(Lcom/android/okhttp/OkHttpClient;)V
+HSPLcom/android/okhttp/OkUrlFactory;->client()Lcom/android/okhttp/OkHttpClient;
+HSPLcom/android/okhttp/OkUrlFactory;->open(Ljava/net/URL;)Ljava/net/HttpURLConnection;
+HSPLcom/android/okhttp/OkUrlFactory;->open(Ljava/net/URL;Ljava/net/Proxy;)Ljava/net/HttpURLConnection;
+HSPLcom/android/okhttp/OkUrlFactory;->setUrlFilter(Lcom/android/okhttp/internal/URLFilter;)V
+HSPLcom/android/okhttp/Protocol;-><init>(Ljava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/okhttp/Protocol;->get(Ljava/lang/String;)Lcom/android/okhttp/Protocol;
+HSPLcom/android/okhttp/Protocol;->toString()Ljava/lang/String;
+HSPLcom/android/okhttp/Request$Builder;->-get0(Lcom/android/okhttp/Request$Builder;)Lcom/android/okhttp/RequestBody;
+HSPLcom/android/okhttp/Request$Builder;->-get1(Lcom/android/okhttp/Request$Builder;)Lcom/android/okhttp/Headers$Builder;
+HSPLcom/android/okhttp/Request$Builder;->-get2(Lcom/android/okhttp/Request$Builder;)Ljava/lang/String;
+HSPLcom/android/okhttp/Request$Builder;->-get3(Lcom/android/okhttp/Request$Builder;)Ljava/lang/Object;
+HSPLcom/android/okhttp/Request$Builder;->-get4(Lcom/android/okhttp/Request$Builder;)Lcom/android/okhttp/HttpUrl;
+HSPLcom/android/okhttp/Request$Builder;-><init>()V
+HSPLcom/android/okhttp/Request$Builder;-><init>(Lcom/android/okhttp/Request;)V
+HSPLcom/android/okhttp/Request$Builder;-><init>(Lcom/android/okhttp/Request;Lcom/android/okhttp/Request$Builder;)V
+HSPLcom/android/okhttp/Request$Builder;->addHeader(Ljava/lang/String;Ljava/lang/String;)Lcom/android/okhttp/Request$Builder;
+HSPLcom/android/okhttp/Request$Builder;->build()Lcom/android/okhttp/Request;
+HSPLcom/android/okhttp/Request$Builder;->header(Ljava/lang/String;Ljava/lang/String;)Lcom/android/okhttp/Request$Builder;
+HSPLcom/android/okhttp/Request$Builder;->method(Ljava/lang/String;Lcom/android/okhttp/RequestBody;)Lcom/android/okhttp/Request$Builder;
+HSPLcom/android/okhttp/Request$Builder;->url(Lcom/android/okhttp/HttpUrl;)Lcom/android/okhttp/Request$Builder;
+HSPLcom/android/okhttp/Request;->-get0(Lcom/android/okhttp/Request;)Lcom/android/okhttp/RequestBody;
+HSPLcom/android/okhttp/Request;->-get1(Lcom/android/okhttp/Request;)Lcom/android/okhttp/Headers;
+HSPLcom/android/okhttp/Request;->-get2(Lcom/android/okhttp/Request;)Ljava/lang/String;
+HSPLcom/android/okhttp/Request;->-get3(Lcom/android/okhttp/Request;)Ljava/lang/Object;
+HSPLcom/android/okhttp/Request;->-get4(Lcom/android/okhttp/Request;)Lcom/android/okhttp/HttpUrl;
+HSPLcom/android/okhttp/Request;-><init>(Lcom/android/okhttp/Request$Builder;)V
+HSPLcom/android/okhttp/Request;-><init>(Lcom/android/okhttp/Request$Builder;Lcom/android/okhttp/Request;)V
+HSPLcom/android/okhttp/Request;->cacheControl()Lcom/android/okhttp/CacheControl;
+HSPLcom/android/okhttp/Request;->header(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/okhttp/Request;->headers()Lcom/android/okhttp/Headers;
+HSPLcom/android/okhttp/Request;->httpUrl()Lcom/android/okhttp/HttpUrl;
+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/RequestBody$2;-><init>(Lcom/android/okhttp/MediaType;I[BI)V
+HSPLcom/android/okhttp/RequestBody;-><init>()V
+HSPLcom/android/okhttp/RequestBody;->contentType()Lcom/android/okhttp/MediaType;
+HSPLcom/android/okhttp/RequestBody;->create(Lcom/android/okhttp/MediaType;[B)Lcom/android/okhttp/RequestBody;
+HSPLcom/android/okhttp/RequestBody;->create(Lcom/android/okhttp/MediaType;[BII)Lcom/android/okhttp/RequestBody;
+HSPLcom/android/okhttp/RequestBody;->writeTo(Lcom/android/okhttp/okio/BufferedSink;)V
+HSPLcom/android/okhttp/Response$Builder;->-get0(Lcom/android/okhttp/Response$Builder;)Lcom/android/okhttp/ResponseBody;
+HSPLcom/android/okhttp/Response$Builder;->-get1(Lcom/android/okhttp/Response$Builder;)Lcom/android/okhttp/Response;
+HSPLcom/android/okhttp/Response$Builder;->-get2(Lcom/android/okhttp/Response$Builder;)I
+HSPLcom/android/okhttp/Response$Builder;->-get3(Lcom/android/okhttp/Response$Builder;)Lcom/android/okhttp/Handshake;
+HSPLcom/android/okhttp/Response$Builder;->-get4(Lcom/android/okhttp/Response$Builder;)Lcom/android/okhttp/Headers$Builder;
+HSPLcom/android/okhttp/Response$Builder;->-get5(Lcom/android/okhttp/Response$Builder;)Ljava/lang/String;
+HSPLcom/android/okhttp/Response$Builder;->-get6(Lcom/android/okhttp/Response$Builder;)Lcom/android/okhttp/Response;
+HSPLcom/android/okhttp/Response$Builder;->-get7(Lcom/android/okhttp/Response$Builder;)Lcom/android/okhttp/Response;
+HSPLcom/android/okhttp/Response$Builder;->-get8(Lcom/android/okhttp/Response$Builder;)Lcom/android/okhttp/Protocol;
+HSPLcom/android/okhttp/Response$Builder;->-get9(Lcom/android/okhttp/Response$Builder;)Lcom/android/okhttp/Request;
+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$Builder;)V
+HSPLcom/android/okhttp/Response$Builder;->body(Lcom/android/okhttp/ResponseBody;)Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/Response$Builder;->build()Lcom/android/okhttp/Response;
+HSPLcom/android/okhttp/Response$Builder;->cacheResponse(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/Response$Builder;->checkSupportResponse(Ljava/lang/String;Lcom/android/okhttp/Response;)V
+HSPLcom/android/okhttp/Response$Builder;->code(I)Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/Response$Builder;->handshake(Lcom/android/okhttp/Handshake;)Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/Response$Builder;->header(Ljava/lang/String;Ljava/lang/String;)Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/Response$Builder;->headers(Lcom/android/okhttp/Headers;)Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/Response$Builder;->message(Ljava/lang/String;)Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/Response$Builder;->networkResponse(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/Response$Builder;->priorResponse(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/Response$Builder;->protocol(Lcom/android/okhttp/Protocol;)Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/Response$Builder;->request(Lcom/android/okhttp/Request;)Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/Response;->-get0(Lcom/android/okhttp/Response;)Lcom/android/okhttp/ResponseBody;
+HSPLcom/android/okhttp/Response;->-get1(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Response;
+HSPLcom/android/okhttp/Response;->-get2(Lcom/android/okhttp/Response;)I
+HSPLcom/android/okhttp/Response;->-get3(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Handshake;
+HSPLcom/android/okhttp/Response;->-get4(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Headers;
+HSPLcom/android/okhttp/Response;->-get5(Lcom/android/okhttp/Response;)Ljava/lang/String;
+HSPLcom/android/okhttp/Response;->-get6(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Response;
+HSPLcom/android/okhttp/Response;->-get7(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Response;
+HSPLcom/android/okhttp/Response;->-get8(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Protocol;
+HSPLcom/android/okhttp/Response;->-get9(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Request;
+HSPLcom/android/okhttp/Response;-><init>(Lcom/android/okhttp/Response$Builder;)V
+HSPLcom/android/okhttp/Response;-><init>(Lcom/android/okhttp/Response$Builder;Lcom/android/okhttp/Response;)V
+HSPLcom/android/okhttp/Response;->body()Lcom/android/okhttp/ResponseBody;
+HSPLcom/android/okhttp/Response;->cacheResponse()Lcom/android/okhttp/Response;
+HSPLcom/android/okhttp/Response;->code()I
+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;->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
+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;
+HSPLcom/android/okhttp/Route;->hashCode()I
+HSPLcom/android/okhttp/Route;->requiresTunnel()Z
+HSPLcom/android/okhttp/TlsVersion;-><init>(Ljava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/okhttp/internal/ConnectionSpecSelector;-><init>(Ljava/util/List;)V
+HSPLcom/android/okhttp/internal/ConnectionSpecSelector;->configureSecureSocket(Ljavax/net/ssl/SSLSocket;)Lcom/android/okhttp/ConnectionSpec;
+HSPLcom/android/okhttp/internal/ConnectionSpecSelector;->isFallbackPossible(Ljavax/net/ssl/SSLSocket;)Z
+HSPLcom/android/okhttp/internal/DiskLruCache$1;-><init>(Lcom/android/okhttp/internal/DiskLruCache;)V
+HSPLcom/android/okhttp/internal/DiskLruCache$2;-><init>()V
+HSPLcom/android/okhttp/internal/DiskLruCache;-><init>(Lcom/android/okhttp/internal/io/FileSystem;Ljava/io/File;IIJLjava/util/concurrent/Executor;)V
+HSPLcom/android/okhttp/internal/DiskLruCache;->create(Lcom/android/okhttp/internal/io/FileSystem;Ljava/io/File;IIJ)Lcom/android/okhttp/internal/DiskLruCache;
+HSPLcom/android/okhttp/internal/Internal;-><init>()V
+HSPLcom/android/okhttp/internal/Internal;->addLenient(Lcom/android/okhttp/Headers$Builder;Ljava/lang/String;)V
+HSPLcom/android/okhttp/internal/Internal;->addLenient(Lcom/android/okhttp/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/okhttp/internal/Internal;->apply(Lcom/android/okhttp/ConnectionSpec;Ljavax/net/ssl/SSLSocket;Z)V
+HSPLcom/android/okhttp/internal/Internal;->callEngineGetStreamAllocation(Lcom/android/okhttp/Call;)Lcom/android/okhttp/internal/http/StreamAllocation;
+HSPLcom/android/okhttp/internal/Internal;->callEnqueue(Lcom/android/okhttp/Call;Lcom/android/okhttp/Callback;Z)V
+HSPLcom/android/okhttp/internal/Internal;->connectionBecameIdle(Lcom/android/okhttp/ConnectionPool;Lcom/android/okhttp/internal/io/RealConnection;)Z
+HSPLcom/android/okhttp/internal/Internal;->get(Lcom/android/okhttp/ConnectionPool;Lcom/android/okhttp/Address;Lcom/android/okhttp/internal/http/StreamAllocation;)Lcom/android/okhttp/internal/io/RealConnection;
+HSPLcom/android/okhttp/internal/Internal;->getHttpUrlChecked(Ljava/lang/String;)Lcom/android/okhttp/HttpUrl;
+HSPLcom/android/okhttp/internal/Internal;->internalCache(Lcom/android/okhttp/OkHttpClient;)Lcom/android/okhttp/internal/InternalCache;
+HSPLcom/android/okhttp/internal/Internal;->put(Lcom/android/okhttp/ConnectionPool;Lcom/android/okhttp/internal/io/RealConnection;)V
+HSPLcom/android/okhttp/internal/Internal;->routeDatabase(Lcom/android/okhttp/ConnectionPool;)Lcom/android/okhttp/internal/RouteDatabase;
+HSPLcom/android/okhttp/internal/Internal;->setCache(Lcom/android/okhttp/OkHttpClient;Lcom/android/okhttp/internal/InternalCache;)V
+HSPLcom/android/okhttp/internal/InternalCache;->get(Lcom/android/okhttp/Request;)Lcom/android/okhttp/Response;
+HSPLcom/android/okhttp/internal/InternalCache;->put(Lcom/android/okhttp/Response;)Lcom/android/okhttp/internal/http/CacheRequest;
+HSPLcom/android/okhttp/internal/InternalCache;->remove(Lcom/android/okhttp/Request;)V
+HSPLcom/android/okhttp/internal/InternalCache;->trackConditionalCacheHit()V
+HSPLcom/android/okhttp/internal/InternalCache;->trackResponse(Lcom/android/okhttp/internal/http/CacheStrategy;)V
+HSPLcom/android/okhttp/internal/InternalCache;->update(Lcom/android/okhttp/Response;Lcom/android/okhttp/Response;)V
+HSPLcom/android/okhttp/internal/OptionalMethod;-><init>(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)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;
+HSPLcom/android/okhttp/internal/OptionalMethod;->invokeOptional(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/okhttp/internal/OptionalMethod;->invokeOptionalWithoutCheckedException(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
+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;-><init>()V
+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;->getPrefix()Ljava/lang/String;
+HSPLcom/android/okhttp/internal/Platform;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String;
+HSPLcom/android/okhttp/internal/RouteDatabase;-><init>()V
+HSPLcom/android/okhttp/internal/RouteDatabase;->connected(Lcom/android/okhttp/Route;)V
+HSPLcom/android/okhttp/internal/RouteDatabase;->shouldPostpone(Lcom/android/okhttp/Route;)Z
+HSPLcom/android/okhttp/internal/URLFilter;->checkURLPermitted(Ljava/net/URL;)V
+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
+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;
+HSPLcom/android/okhttp/internal/Util;->immutableMap(Ljava/util/Map;)Ljava/util/Map;
+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;
+HSPLcom/android/okhttp/internal/http/AuthenticatorAdapter;-><init>()V
+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;)V
+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$AbstractSource;)V
+HSPLcom/android/okhttp/internal/http/Http1xStream$AbstractSource;->endOfInput()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$ChunkedSink;)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;->read(Lcom/android/okhttp/okio/Buffer;J)J
+HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;->readChunkSize()V
+HSPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSource;-><init>(Lcom/android/okhttp/internal/http/Http1xStream;J)V
+HSPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSource;->read(Lcom/android/okhttp/okio/Buffer;J)J
+HSPLcom/android/okhttp/internal/http/Http1xStream;->-get0(Lcom/android/okhttp/internal/http/Http1xStream;)Lcom/android/okhttp/okio/BufferedSink;
+HSPLcom/android/okhttp/internal/http/Http1xStream;->-get1(Lcom/android/okhttp/internal/http/Http1xStream;)Lcom/android/okhttp/okio/BufferedSource;
+HSPLcom/android/okhttp/internal/http/Http1xStream;->-get2(Lcom/android/okhttp/internal/http/Http1xStream;)I
+HSPLcom/android/okhttp/internal/http/Http1xStream;->-get3(Lcom/android/okhttp/internal/http/Http1xStream;)Lcom/android/okhttp/internal/http/StreamAllocation;
+HSPLcom/android/okhttp/internal/http/Http1xStream;->-set0(Lcom/android/okhttp/internal/http/Http1xStream;I)I
+HSPLcom/android/okhttp/internal/http/Http1xStream;->-wrap0(Lcom/android/okhttp/internal/http/Http1xStream;Lcom/android/okhttp/okio/ForwardingTimeout;)V
+HSPLcom/android/okhttp/internal/http/Http1xStream;-><init>(Lcom/android/okhttp/internal/http/StreamAllocation;Lcom/android/okhttp/okio/BufferedSource;Lcom/android/okhttp/okio/BufferedSink;)V
+HSPLcom/android/okhttp/internal/http/Http1xStream;->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;->newFixedLengthSource(J)Lcom/android/okhttp/okio/Source;
+HSPLcom/android/okhttp/internal/http/Http1xStream;->openResponseBody(Lcom/android/okhttp/Response;)Lcom/android/okhttp/ResponseBody;
+HSPLcom/android/okhttp/internal/http/Http1xStream;->readHeaders()Lcom/android/okhttp/Headers;
+HSPLcom/android/okhttp/internal/http/Http1xStream;->readResponse()Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/internal/http/Http1xStream;->readResponseHeaders()Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/internal/http/Http1xStream;->setHttpEngine(Lcom/android/okhttp/internal/http/HttpEngine;)V
+HSPLcom/android/okhttp/internal/http/Http1xStream;->writeRequest(Lcom/android/okhttp/Headers;Ljava/lang/String;)V
+HSPLcom/android/okhttp/internal/http/Http1xStream;->writeRequestBody(Lcom/android/okhttp/internal/http/RetryableSink;)V
+HSPLcom/android/okhttp/internal/http/Http1xStream;->writeRequestHeaders(Lcom/android/okhttp/Request;)V
+HSPLcom/android/okhttp/internal/http/HttpEngine$1;-><init>()V
+HSPLcom/android/okhttp/internal/http/HttpEngine;-><init>(Lcom/android/okhttp/OkHttpClient;Lcom/android/okhttp/Request;ZZZLcom/android/okhttp/internal/http/StreamAllocation;Lcom/android/okhttp/internal/http/RetryableSink;Lcom/android/okhttp/Response;)V
+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
+HSPLcom/android/okhttp/internal/http/HttpEngine;->connect()Lcom/android/okhttp/internal/http/HttpStream;
+HSPLcom/android/okhttp/internal/http/HttpEngine;->createAddress(Lcom/android/okhttp/OkHttpClient;Lcom/android/okhttp/Request;)Lcom/android/okhttp/Address;
+HSPLcom/android/okhttp/internal/http/HttpEngine;->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;->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
+HSPLcom/android/okhttp/internal/http/HttpEngine;->hasResponse()Z
+HSPLcom/android/okhttp/internal/http/HttpEngine;->maybeCache()V
+HSPLcom/android/okhttp/internal/http/HttpEngine;->networkRequest(Lcom/android/okhttp/Request;)Lcom/android/okhttp/Request;
+HSPLcom/android/okhttp/internal/http/HttpEngine;->permitsRequestBody(Lcom/android/okhttp/Request;)Z
+HSPLcom/android/okhttp/internal/http/HttpEngine;->readNetworkResponse()Lcom/android/okhttp/Response;
+HSPLcom/android/okhttp/internal/http/HttpEngine;->readResponse()V
+HSPLcom/android/okhttp/internal/http/HttpEngine;->receiveHeaders(Lcom/android/okhttp/Headers;)V
+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
+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/HttpStream;->cancel()V
+HSPLcom/android/okhttp/internal/http/HttpStream;->createRequestBody(Lcom/android/okhttp/Request;J)Lcom/android/okhttp/okio/Sink;
+HSPLcom/android/okhttp/internal/http/HttpStream;->finishRequest()V
+HSPLcom/android/okhttp/internal/http/HttpStream;->openResponseBody(Lcom/android/okhttp/Response;)Lcom/android/okhttp/ResponseBody;
+HSPLcom/android/okhttp/internal/http/HttpStream;->readResponseHeaders()Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/internal/http/HttpStream;->setHttpEngine(Lcom/android/okhttp/internal/http/HttpEngine;)V
+HSPLcom/android/okhttp/internal/http/HttpStream;->writeRequestBody(Lcom/android/okhttp/internal/http/RetryableSink;)V
+HSPLcom/android/okhttp/internal/http/HttpStream;->writeRequestHeaders(Lcom/android/okhttp/Request;)V
+HSPLcom/android/okhttp/internal/http/OkHeaders$1;-><init>()V
+HSPLcom/android/okhttp/internal/http/OkHeaders;->contentLength(Lcom/android/okhttp/Headers;)J
+HSPLcom/android/okhttp/internal/http/OkHeaders;->contentLength(Lcom/android/okhttp/Request;)J
+HSPLcom/android/okhttp/internal/http/OkHeaders;->contentLength(Lcom/android/okhttp/Response;)J
+HSPLcom/android/okhttp/internal/http/OkHeaders;->stringToLong(Ljava/lang/String;)J
+HSPLcom/android/okhttp/internal/http/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;
+HSPLcom/android/okhttp/internal/http/RequestLine;->includeAuthorityInRequestLine(Lcom/android/okhttp/Request;Ljava/net/Proxy$Type;)Z
+HSPLcom/android/okhttp/internal/http/RequestLine;->requestPath(Lcom/android/okhttp/HttpUrl;)Ljava/lang/String;
+HSPLcom/android/okhttp/internal/http/RetryableSink;-><init>()V
+HSPLcom/android/okhttp/internal/http/RetryableSink;-><init>(I)V
+HSPLcom/android/okhttp/internal/http/RetryableSink;->close()V
+HSPLcom/android/okhttp/internal/http/RetryableSink;->contentLength()J
+HSPLcom/android/okhttp/internal/http/RetryableSink;->flush()V
+HSPLcom/android/okhttp/internal/http/RetryableSink;->write(Lcom/android/okhttp/okio/Buffer;J)V
+HSPLcom/android/okhttp/internal/http/RetryableSink;->writeToSocket(Lcom/android/okhttp/okio/Sink;)V
+HSPLcom/android/okhttp/internal/http/RouteSelector;-><init>(Lcom/android/okhttp/Address;Lcom/android/okhttp/internal/RouteDatabase;)V
+HSPLcom/android/okhttp/internal/http/RouteSelector;->hasNextInetSocketAddress()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;
+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
+HSPLcom/android/okhttp/internal/http/StatusLine;-><init>(Lcom/android/okhttp/Protocol;ILjava/lang/String;)V
+HSPLcom/android/okhttp/internal/http/StatusLine;->parse(Ljava/lang/String;)Lcom/android/okhttp/internal/http/StatusLine;
+HSPLcom/android/okhttp/internal/http/StreamAllocation;-><init>(Lcom/android/okhttp/ConnectionPool;Lcom/android/okhttp/Address;)V
+HSPLcom/android/okhttp/internal/http/StreamAllocation;->acquire(Lcom/android/okhttp/internal/io/RealConnection;)V
+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;->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;
+HSPLcom/android/okhttp/internal/http/StreamAllocation;->newStream(IIIZZ)Lcom/android/okhttp/internal/http/HttpStream;
+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
+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;->disconnect()V
+HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getContentType()Ljava/lang/String;
+HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getHeaderField(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getInputStream()Ljava/io/InputStream;
+HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getOutputStream()Ljava/io/OutputStream;
+HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->getResponseCode()I
+HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->handshake()Lcom/android/okhttp/Handshake;
+HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setChunkedStreamingMode(I)V
+HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setConnectTimeout(I)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;->setInstanceFollowRedirects(Z)V
+HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setReadTimeout(I)V
+HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;->setUseCaches(Z)V
+HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;-><init>(Ljava/net/URL;Lcom/android/okhttp/OkHttpClient;)V
+HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;-><init>(Ljava/net/URL;Lcom/android/okhttp/OkHttpClient;Lcom/android/okhttp/internal/URLFilter;)V
+HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->addRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->connect()V
+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;->getHeaderField(Ljava/lang/String;)Ljava/lang/String;
+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;->getResponse()Lcom/android/okhttp/internal/http/HttpEngine;
+HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getResponseCode()I
+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;->setInstanceFollowRedirects(Z)V
+HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->setReadTimeout(I)V
+HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;-><init>(Lcom/android/okhttp/internal/huc/HttpURLConnectionImpl;)V
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;-><init>(Ljava/net/URL;Lcom/android/okhttp/OkHttpClient;Lcom/android/okhttp/internal/URLFilter;)V
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->addRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->disconnect()V
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getContentType()Ljava/lang/String;
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getHeaderField(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getInputStream()Ljava/io/InputStream;
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getOutputStream()Ljava/io/OutputStream;
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->getResponseCode()I
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setChunkedStreamingMode(I)V
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setConnectTimeout(I)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;->setInstanceFollowRedirects(Z)V
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setReadTimeout(I)V
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;->setUseCaches(Z)V
+HSPLcom/android/okhttp/internal/io/FileSystem$1;-><init>()V
+HSPLcom/android/okhttp/internal/io/FileSystem;->appendingSink(Ljava/io/File;)Lcom/android/okhttp/okio/Sink;
+HSPLcom/android/okhttp/internal/io/FileSystem;->delete(Ljava/io/File;)V
+HSPLcom/android/okhttp/internal/io/FileSystem;->deleteContents(Ljava/io/File;)V
+HSPLcom/android/okhttp/internal/io/FileSystem;->exists(Ljava/io/File;)Z
+HSPLcom/android/okhttp/internal/io/FileSystem;->rename(Ljava/io/File;Ljava/io/File;)V
+HSPLcom/android/okhttp/internal/io/FileSystem;->sink(Ljava/io/File;)Lcom/android/okhttp/okio/Sink;
+HSPLcom/android/okhttp/internal/io/FileSystem;->size(Ljava/io/File;)J
+HSPLcom/android/okhttp/internal/io/FileSystem;->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;->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
+HSPLcom/android/okhttp/internal/io/RealConnection;->getHandshake()Lcom/android/okhttp/Handshake;
+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;-><init>()V
+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
+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
+HSPLcom/android/okhttp/okio/AsyncTimeout$Watchdog;->run()V
+HSPLcom/android/okhttp/okio/AsyncTimeout;->-wrap0()Lcom/android/okhttp/okio/AsyncTimeout;
+HSPLcom/android/okhttp/okio/AsyncTimeout;-><init>()V
+HSPLcom/android/okhttp/okio/AsyncTimeout;->awaitTimeout()Lcom/android/okhttp/okio/AsyncTimeout;
+HSPLcom/android/okhttp/okio/AsyncTimeout;->cancelScheduledTimeout(Lcom/android/okhttp/okio/AsyncTimeout;)Z
+HSPLcom/android/okhttp/okio/AsyncTimeout;->enter()V
+HSPLcom/android/okhttp/okio/AsyncTimeout;->exit()Z
+HSPLcom/android/okhttp/okio/AsyncTimeout;->exit(Ljava/io/IOException;)Ljava/io/IOException;
+HSPLcom/android/okhttp/okio/AsyncTimeout;->exit(Z)V
+HSPLcom/android/okhttp/okio/AsyncTimeout;->remainingNanos(J)J
+HSPLcom/android/okhttp/okio/AsyncTimeout;->scheduleTimeout(Lcom/android/okhttp/okio/AsyncTimeout;JZ)V
+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;->completeSegmentByteCount()J
+HSPLcom/android/okhttp/okio/Buffer;->copyTo(Lcom/android/okhttp/okio/Buffer;JJ)Lcom/android/okhttp/okio/Buffer;
+HSPLcom/android/okhttp/okio/Buffer;->exhausted()Z
+HSPLcom/android/okhttp/okio/Buffer;->getByte(J)B
+HSPLcom/android/okhttp/okio/Buffer;->indexOf(BJ)J
+HSPLcom/android/okhttp/okio/Buffer;->read(Lcom/android/okhttp/okio/Buffer;J)J
+HSPLcom/android/okhttp/okio/Buffer;->read([BII)I
+HSPLcom/android/okhttp/okio/Buffer;->readByteArray()[B
+HSPLcom/android/okhttp/okio/Buffer;->readByteArray(J)[B
+HSPLcom/android/okhttp/okio/Buffer;->readFully([B)V
+HSPLcom/android/okhttp/okio/Buffer;->readHexadecimalUnsignedLong()J
+HSPLcom/android/okhttp/okio/Buffer;->readString(JLjava/nio/charset/Charset;)Ljava/lang/String;
+HSPLcom/android/okhttp/okio/Buffer;->readUtf8()Ljava/lang/String;
+HSPLcom/android/okhttp/okio/Buffer;->readUtf8(J)Ljava/lang/String;
+HSPLcom/android/okhttp/okio/Buffer;->readUtf8Line(J)Ljava/lang/String;
+HSPLcom/android/okhttp/okio/Buffer;->size()J
+HSPLcom/android/okhttp/okio/Buffer;->skip(J)V
+HSPLcom/android/okhttp/okio/Buffer;->writableSegment(I)Lcom/android/okhttp/okio/Segment;
+HSPLcom/android/okhttp/okio/Buffer;->write(Lcom/android/okhttp/okio/Buffer;J)V
+HSPLcom/android/okhttp/okio/Buffer;->write([BII)Lcom/android/okhttp/okio/Buffer;
+HSPLcom/android/okhttp/okio/Buffer;->writeByte(I)Lcom/android/okhttp/okio/Buffer;
+HSPLcom/android/okhttp/okio/Buffer;->writeHexadecimalUnsignedLong(J)Lcom/android/okhttp/okio/Buffer;
+HSPLcom/android/okhttp/okio/Buffer;->writeUtf8(Ljava/lang/String;)Lcom/android/okhttp/okio/Buffer;
+HSPLcom/android/okhttp/okio/Buffer;->writeUtf8(Ljava/lang/String;II)Lcom/android/okhttp/okio/Buffer;
+HSPLcom/android/okhttp/okio/Buffer;->writeUtf8CodePoint(I)Lcom/android/okhttp/okio/Buffer;
+HSPLcom/android/okhttp/okio/ForwardingTimeout;-><init>(Lcom/android/okhttp/okio/Timeout;)V
+HSPLcom/android/okhttp/okio/ForwardingTimeout;->delegate()Lcom/android/okhttp/okio/Timeout;
+HSPLcom/android/okhttp/okio/ForwardingTimeout;->setDelegate(Lcom/android/okhttp/okio/Timeout;)Lcom/android/okhttp/okio/ForwardingTimeout;
+HSPLcom/android/okhttp/okio/Okio$1;-><init>(Lcom/android/okhttp/okio/Timeout;Ljava/io/OutputStream;)V
+HSPLcom/android/okhttp/okio/Okio$1;->flush()V
+HSPLcom/android/okhttp/okio/Okio$1;->write(Lcom/android/okhttp/okio/Buffer;J)V
+HSPLcom/android/okhttp/okio/Okio$2;-><init>(Lcom/android/okhttp/okio/Timeout;Ljava/io/InputStream;)V
+HSPLcom/android/okhttp/okio/Okio$2;->read(Lcom/android/okhttp/okio/Buffer;J)J
+HSPLcom/android/okhttp/okio/Okio$3;-><init>(Ljava/net/Socket;)V
+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;
+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;
+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;->flush()V
+HSPLcom/android/okhttp/okio/RealBufferedSink$1;->write([BII)V
+HSPLcom/android/okhttp/okio/RealBufferedSink;->-get0(Lcom/android/okhttp/okio/RealBufferedSink;)Z
+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;->buffer()Lcom/android/okhttp/okio/Buffer;
+HSPLcom/android/okhttp/okio/RealBufferedSink;->close()V
+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
+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;->read([BII)I
+HSPLcom/android/okhttp/okio/RealBufferedSource;->-get0(Lcom/android/okhttp/okio/RealBufferedSource;)Z
+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;->exhausted()Z
+HSPLcom/android/okhttp/okio/RealBufferedSource;->indexOf(B)J
+HSPLcom/android/okhttp/okio/RealBufferedSource;->indexOf(BJ)J
+HSPLcom/android/okhttp/okio/RealBufferedSource;->inputStream()Ljava/io/InputStream;
+HSPLcom/android/okhttp/okio/RealBufferedSource;->read(Lcom/android/okhttp/okio/Buffer;J)J
+HSPLcom/android/okhttp/okio/RealBufferedSource;->readHexadecimalUnsignedLong()J
+HSPLcom/android/okhttp/okio/RealBufferedSource;->readUtf8LineStrict()Ljava/lang/String;
+HSPLcom/android/okhttp/okio/RealBufferedSource;->request(J)Z
+HSPLcom/android/okhttp/okio/RealBufferedSource;->require(J)V
+HSPLcom/android/okhttp/okio/RealBufferedSource;->timeout()Lcom/android/okhttp/okio/Timeout;
+HSPLcom/android/okhttp/okio/Segment;-><init>()V
+HSPLcom/android/okhttp/okio/Segment;-><init>(Lcom/android/okhttp/okio/Segment;)V
+HSPLcom/android/okhttp/okio/Segment;-><init>([BII)V
+HSPLcom/android/okhttp/okio/Segment;->compact()V
+HSPLcom/android/okhttp/okio/Segment;->pop()Lcom/android/okhttp/okio/Segment;
+HSPLcom/android/okhttp/okio/Segment;->push(Lcom/android/okhttp/okio/Segment;)Lcom/android/okhttp/okio/Segment;
+HSPLcom/android/okhttp/okio/Segment;->split(I)Lcom/android/okhttp/okio/Segment;
+HSPLcom/android/okhttp/okio/Segment;->writeTo(Lcom/android/okhttp/okio/Segment;I)V
+HSPLcom/android/okhttp/okio/SegmentPool;->recycle(Lcom/android/okhttp/okio/Segment;)V
+HSPLcom/android/okhttp/okio/SegmentPool;->take()Lcom/android/okhttp/okio/Segment;
+HSPLcom/android/okhttp/okio/Sink;->close()V
+HSPLcom/android/okhttp/okio/Sink;->flush()V
+HSPLcom/android/okhttp/okio/Sink;->timeout()Lcom/android/okhttp/okio/Timeout;
+HSPLcom/android/okhttp/okio/Sink;->write(Lcom/android/okhttp/okio/Buffer;J)V
+HSPLcom/android/okhttp/okio/Source;->close()V
+HSPLcom/android/okhttp/okio/Source;->read(Lcom/android/okhttp/okio/Buffer;J)J
+HSPLcom/android/okhttp/okio/Timeout$1;-><init>()V
+HSPLcom/android/okhttp/okio/Timeout;-><init>()V
+HSPLcom/android/okhttp/okio/Timeout;->clearDeadline()Lcom/android/okhttp/okio/Timeout;
+HSPLcom/android/okhttp/okio/Timeout;->clearTimeout()Lcom/android/okhttp/okio/Timeout;
+HSPLcom/android/okhttp/okio/Timeout;->hasDeadline()Z
+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/org/bouncycastle/asn1/ASN1BitString;-><init>([BI)V
+HSPLcom/android/org/bouncycastle/asn1/ASN1BitString;->derForm([BI)[B
+HSPLcom/android/org/bouncycastle/asn1/ASN1BitString;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)V
+HSPLcom/android/org/bouncycastle/asn1/ASN1BitString;->fromInputStream(ILjava/io/InputStream;)Lcom/android/org/bouncycastle/asn1/ASN1BitString;
+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/ASN1Encodable;->toASN1Primitive()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;
+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>([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/ASN1Null;-><init>()V
+HSPLcom/android/org/bouncycastle/asn1/ASN1Null;->asn1Equals(Lcom/android/org/bouncycastle/asn1/ASN1Primitive;)Z
+HSPLcom/android/org/bouncycastle/asn1/ASN1Null;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)V
+HSPLcom/android/org/bouncycastle/asn1/ASN1Object;-><init>()V
+HSPLcom/android/org/bouncycastle/asn1/ASN1Object;->getEncoded(Ljava/lang/String;)[B
+HSPLcom/android/org/bouncycastle/asn1/ASN1Object;->toASN1Primitive()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
+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
+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
+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
+HSPLcom/android/org/bouncycastle/asn1/ASN1OutputStream;->writeTag(II)V
+HSPLcom/android/org/bouncycastle/asn1/ASN1Primitive;-><init>()V
+HSPLcom/android/org/bouncycastle/asn1/ASN1Primitive;->asn1Equals(Lcom/android/org/bouncycastle/asn1/ASN1Primitive;)Z
+HSPLcom/android/org/bouncycastle/asn1/ASN1Primitive;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)V
+HSPLcom/android/org/bouncycastle/asn1/ASN1Primitive;->encodedLength()I
+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;->isConstructed()Z
+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;->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;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)V
+HSPLcom/android/org/bouncycastle/asn1/ASN1Set;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/ASN1Set;
+HSPLcom/android/org/bouncycastle/asn1/ASN1Set;->getObjects()Ljava/util/Enumeration;
+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/ASN1String;->getString()Ljava/lang/String;
+HSPLcom/android/org/bouncycastle/asn1/ASN1TaggedObject;-><init>(ZILcom/android/org/bouncycastle/asn1/ASN1Encodable;)V
+HSPLcom/android/org/bouncycastle/asn1/ASN1TaggedObject;->encode(Lcom/android/org/bouncycastle/asn1/ASN1OutputStream;)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/ASN1TaggedObjectParser;->getObjectParser(IZ)Lcom/android/org/bouncycastle/asn1/ASN1Encodable;
+HSPLcom/android/org/bouncycastle/asn1/ASN1TaggedObjectParser;->getTagNo()I
+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/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;-><init>()V
+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/DERSequence;-><init>()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;-><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/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/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/InMemoryRepresentable;->getLoadedObject()Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
+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/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/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/X500NameStyle;->areEqual(Lcom/android/org/bouncycastle/asn1/x500/X500Name;Lcom/android/org/bouncycastle/asn1/x500/X500Name;)Z
+HSPLcom/android/org/bouncycastle/asn1/x500/X500NameStyle;->attrNameToOID(Ljava/lang/String;)Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;
+HSPLcom/android/org/bouncycastle/asn1/x500/X500NameStyle;->calculateHashCode(Lcom/android/org/bouncycastle/asn1/x500/X500Name;)I
+HSPLcom/android/org/bouncycastle/asn1/x500/X500NameStyle;->fromString(Ljava/lang/String;)[Lcom/android/org/bouncycastle/asn1/x500/RDN;
+HSPLcom/android/org/bouncycastle/asn1/x500/X500NameStyle;->oidToAttrNames(Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;)[Ljava/lang/String;
+HSPLcom/android/org/bouncycastle/asn1/x500/X500NameStyle;->oidToDisplayName(Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;)Ljava/lang/String;
+HSPLcom/android/org/bouncycastle/asn1/x500/X500NameStyle;->stringToValue(Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;)Lcom/android/org/bouncycastle/asn1/ASN1Encodable;
+HSPLcom/android/org/bouncycastle/asn1/x500/X500NameStyle;->toString(Lcom/android/org/bouncycastle/asn1/x500/X500Name;)Ljava/lang/String;
+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;-><init>()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/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;->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/SubjectPublicKeyInfo;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1Sequence;)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;
+HSPLcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;->parsePublicKey()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/Time;-><init>(Lcom/android/org/bouncycastle/asn1/ASN1Primitive;)V
+HSPLcom/android/org/bouncycastle/asn1/x509/Time;->getInstance(Ljava/lang/Object;)Lcom/android/org/bouncycastle/asn1/x509/Time;
+HSPLcom/android/org/bouncycastle/crypto/CryptoException;-><init>(Ljava/lang/String;)V
+HSPLcom/android/org/bouncycastle/crypto/CryptoException;->getCause()Ljava/lang/Throwable;
+HSPLcom/android/org/bouncycastle/crypto/Digest;->doFinal([BI)I
+HSPLcom/android/org/bouncycastle/crypto/Digest;->getAlgorithmName()Ljava/lang/String;
+HSPLcom/android/org/bouncycastle/crypto/Digest;->getDigestSize()I
+HSPLcom/android/org/bouncycastle/crypto/Digest;->reset()V
+HSPLcom/android/org/bouncycastle/crypto/Digest;->update(B)V
+HSPLcom/android/org/bouncycastle/crypto/Digest;->update([BII)V
+HSPLcom/android/org/bouncycastle/crypto/ExtendedDigest;->getByteLength()I
+HSPLcom/android/org/bouncycastle/crypto/InvalidCipherTextException;-><init>(Ljava/lang/String;)V
+HSPLcom/android/org/bouncycastle/crypto/Mac;->doFinal([BI)I
+HSPLcom/android/org/bouncycastle/crypto/Mac;->getAlgorithmName()Ljava/lang/String;
+HSPLcom/android/org/bouncycastle/crypto/Mac;->getMacSize()I
+HSPLcom/android/org/bouncycastle/crypto/Mac;->init(Lcom/android/org/bouncycastle/crypto/CipherParameters;)V
+HSPLcom/android/org/bouncycastle/crypto/Mac;->reset()V
+HSPLcom/android/org/bouncycastle/crypto/Mac;->update(B)V
+HSPLcom/android/org/bouncycastle/crypto/Mac;->update([BII)V
+HSPLcom/android/org/bouncycastle/crypto/PBEParametersGenerator;-><init>()V
+HSPLcom/android/org/bouncycastle/crypto/PBEParametersGenerator;->PKCS12PasswordToBytes([C)[B
+HSPLcom/android/org/bouncycastle/crypto/PBEParametersGenerator;->generateDerivedMacParameters(I)Lcom/android/org/bouncycastle/crypto/CipherParameters;
+HSPLcom/android/org/bouncycastle/crypto/PBEParametersGenerator;->generateDerivedParameters(I)Lcom/android/org/bouncycastle/crypto/CipherParameters;
+HSPLcom/android/org/bouncycastle/crypto/PBEParametersGenerator;->generateDerivedParameters(II)Lcom/android/org/bouncycastle/crypto/CipherParameters;
+HSPLcom/android/org/bouncycastle/crypto/PBEParametersGenerator;->init([B[BI)V
+HSPLcom/android/org/bouncycastle/crypto/digests/EncodableDigest;->getEncodedState()[B
+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;->processBlock()V
+HSPLcom/android/org/bouncycastle/crypto/digests/GeneralDigest;->processLength(J)V
+HSPLcom/android/org/bouncycastle/crypto/digests/GeneralDigest;->processWord([BI)V
+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/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/encodings/PKCS1Encoding$1;-><init>(Lcom/android/org/bouncycastle/crypto/encodings/PKCS1Encoding;)V
+HSPLcom/android/org/bouncycastle/crypto/encodings/PKCS1Encoding$1;->run()Ljava/lang/Object;
+HSPLcom/android/org/bouncycastle/crypto/encodings/PKCS1Encoding$2;-><init>(Lcom/android/org/bouncycastle/crypto/encodings/PKCS1Encoding;)V
+HSPLcom/android/org/bouncycastle/crypto/encodings/PKCS1Encoding$2;->run()Ljava/lang/Object;
+HSPLcom/android/org/bouncycastle/crypto/encodings/PKCS1Encoding;-><init>(Lcom/android/org/bouncycastle/crypto/AsymmetricBlockCipher;)V
+HSPLcom/android/org/bouncycastle/crypto/encodings/PKCS1Encoding;->decodeBlock([BII)[B
+HSPLcom/android/org/bouncycastle/crypto/encodings/PKCS1Encoding;->getInputBlockSize()I
+HSPLcom/android/org/bouncycastle/crypto/encodings/PKCS1Encoding;->getOutputBlockSize()I
+HSPLcom/android/org/bouncycastle/crypto/encodings/PKCS1Encoding;->init(ZLcom/android/org/bouncycastle/crypto/CipherParameters;)V
+HSPLcom/android/org/bouncycastle/crypto/encodings/PKCS1Encoding;->processBlock([BII)[B
+HSPLcom/android/org/bouncycastle/crypto/encodings/PKCS1Encoding;->useStrict()Z
+HSPLcom/android/org/bouncycastle/crypto/engines/RSABlindedEngine;-><init>()V
+HSPLcom/android/org/bouncycastle/crypto/engines/RSABlindedEngine;->getInputBlockSize()I
+HSPLcom/android/org/bouncycastle/crypto/engines/RSABlindedEngine;->getOutputBlockSize()I
+HSPLcom/android/org/bouncycastle/crypto/engines/RSABlindedEngine;->init(ZLcom/android/org/bouncycastle/crypto/CipherParameters;)V
+HSPLcom/android/org/bouncycastle/crypto/engines/RSABlindedEngine;->processBlock([BII)[B
+HSPLcom/android/org/bouncycastle/crypto/engines/RSACoreEngine;-><init>()V
+HSPLcom/android/org/bouncycastle/crypto/engines/RSACoreEngine;->convertInput([BII)Ljava/math/BigInteger;
+HSPLcom/android/org/bouncycastle/crypto/engines/RSACoreEngine;->convertOutput(Ljava/math/BigInteger;)[B
+HSPLcom/android/org/bouncycastle/crypto/engines/RSACoreEngine;->getInputBlockSize()I
+HSPLcom/android/org/bouncycastle/crypto/engines/RSACoreEngine;->getOutputBlockSize()I
+HSPLcom/android/org/bouncycastle/crypto/engines/RSACoreEngine;->init(ZLcom/android/org/bouncycastle/crypto/CipherParameters;)V
+HSPLcom/android/org/bouncycastle/crypto/engines/RSACoreEngine;->processBlock(Ljava/math/BigInteger;)Ljava/math/BigInteger;
+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/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;-><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/params/AsymmetricKeyParameter;-><init>(Z)V
+HSPLcom/android/org/bouncycastle/crypto/params/AsymmetricKeyParameter;->isPrivate()Z
+HSPLcom/android/org/bouncycastle/crypto/params/DSAKeyParameters;-><init>(ZLcom/android/org/bouncycastle/crypto/params/DSAParameters;)V
+HSPLcom/android/org/bouncycastle/crypto/params/DSAParameters;-><init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
+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
+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>([BII)V
+HSPLcom/android/org/bouncycastle/crypto/params/KeyParameter;->getKey()[B
+HSPLcom/android/org/bouncycastle/crypto/params/ParametersWithRandom;-><init>(Lcom/android/org/bouncycastle/crypto/CipherParameters;Ljava/security/SecureRandom;)V
+HSPLcom/android/org/bouncycastle/crypto/params/ParametersWithRandom;->getParameters()Lcom/android/org/bouncycastle/crypto/CipherParameters;
+HSPLcom/android/org/bouncycastle/crypto/params/ParametersWithRandom;->getRandom()Ljava/security/SecureRandom;
+HSPLcom/android/org/bouncycastle/crypto/params/RSAKeyParameters;-><init>(ZLjava/math/BigInteger;Ljava/math/BigInteger;)V
+HSPLcom/android/org/bouncycastle/crypto/params/RSAKeyParameters;->getExponent()Ljava/math/BigInteger;
+HSPLcom/android/org/bouncycastle/crypto/params/RSAKeyParameters;->getModulus()Ljava/math/BigInteger;
+HSPLcom/android/org/bouncycastle/crypto/params/RSAKeyParameters;->validate(Ljava/math/BigInteger;)Ljava/math/BigInteger;
+HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;-><init>(Lcom/android/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo;)V
+HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;->equals(Ljava/lang/Object;)Z
+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
+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;->engineDoFinal([BII)[B
+HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->engineInit(ILjava/security/Key;Ljava/security/SecureRandom;)V
+HSPLcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi;->engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)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;->getOutput()[B
+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;
+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;->generatePublicKeyParameter(Ljava/security/interfaces/RSAPublicKey;)Lcom/android/org/bouncycastle/crypto/params/RSAKeyParameters;
+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/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;-><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/config/ConfigurableProvider;->addAlgorithm(Ljava/lang/String;Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;)V
+HSPLcom/android/org/bouncycastle/jcajce/provider/config/ConfigurableProvider;->addAlgorithm(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/org/bouncycastle/jcajce/provider/config/ConfigurableProvider;->addAttributes(Ljava/lang/String;Ljava/util/Map;)V
+HSPLcom/android/org/bouncycastle/jcajce/provider/config/ConfigurableProvider;->addKeyInfoConverter(Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;Lcom/android/org/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;)V
+HSPLcom/android/org/bouncycastle/jcajce/provider/config/ConfigurableProvider;->hasAlgorithm(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/org/bouncycastle/jcajce/provider/config/ConfigurableProvider;->setParameter(Ljava/lang/String;Ljava/lang/Object;)V
+HSPLcom/android/org/bouncycastle/jcajce/provider/config/ProviderConfiguration;->getAcceptableNamedCurves()Ljava/util/Set;
+HSPLcom/android/org/bouncycastle/jcajce/provider/config/ProviderConfiguration;->getAdditionalECParameters()Ljava/util/Map;
+HSPLcom/android/org/bouncycastle/jcajce/provider/config/ProviderConfiguration;->getDHDefaultParameters(I)Ljavax/crypto/spec/DHParameterSpec;
+HSPLcom/android/org/bouncycastle/jcajce/provider/config/ProviderConfiguration;->getEcImplicitlyCa()Lcom/android/org/bouncycastle/jce/spec/ECParameterSpec;
+HSPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$Std;-><init>()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;[Ljava/security/cert/Certificate;)V
+HSPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry;->getCertificateChain()[Ljava/security/cert/Certificate;
+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
+HSPLcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;->loadStore(Ljava/io/InputStream;)V
+HSPLcom/android/org/bouncycastle/jcajce/provider/util/BadBlockException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+HSPLcom/android/org/bouncycastle/jcajce/provider/util/BadBlockException;->getCause()Ljava/lang/Throwable;
+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/JcaJceHelper;->createAlgorithmParameterGenerator(Ljava/lang/String;)Ljava/security/AlgorithmParameterGenerator;
+HSPLcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;->createAlgorithmParameters(Ljava/lang/String;)Ljava/security/AlgorithmParameters;
+HSPLcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;->createCertificateFactory(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
+HSPLcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;->createCipher(Ljava/lang/String;)Ljavax/crypto/Cipher;
+HSPLcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;->createDigest(Ljava/lang/String;)Ljava/security/MessageDigest;
+HSPLcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;->createKeyAgreement(Ljava/lang/String;)Ljavax/crypto/KeyAgreement;
+HSPLcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;->createKeyFactory(Ljava/lang/String;)Ljava/security/KeyFactory;
+HSPLcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;->createKeyGenerator(Ljava/lang/String;)Ljavax/crypto/KeyGenerator;
+HSPLcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;->createKeyPairGenerator(Ljava/lang/String;)Ljava/security/KeyPairGenerator;
+HSPLcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;->createMac(Ljava/lang/String;)Ljavax/crypto/Mac;
+HSPLcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;->createSecretKeyFactory(Ljava/lang/String;)Ljavax/crypto/SecretKeyFactory;
+HSPLcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;->createSecureRandom(Ljava/lang/String;)Ljava/security/SecureRandom;
+HSPLcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;->createSignature(Ljava/lang/String;)Ljava/security/Signature;
+HSPLcom/android/org/bouncycastle/jcajce/util/ProviderJcaJceHelper;-><init>(Ljava/security/Provider;)V
+HSPLcom/android/org/bouncycastle/jcajce/util/ProviderJcaJceHelper;->createCertificateFactory(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
+HSPLcom/android/org/bouncycastle/jce/interfaces/BCKeyStore;->setRandom(Ljava/security/SecureRandom;)V
+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/Encodable;->getEncoded()[B
+HSPLcom/android/org/bouncycastle/util/Integers;->valueOf(I)Ljava/lang/Integer;
+HSPLcom/android/org/bouncycastle/util/Memoable;->copy()Lcom/android/org/bouncycastle/util/Memoable;
+HSPLcom/android/org/bouncycastle/util/Memoable;->reset(Lcom/android/org/bouncycastle/util/Memoable;)V
+HSPLcom/android/org/bouncycastle/util/Pack;->intToBigEndian(I[BI)V
+HSPLcom/android/org/bouncycastle/util/Strings;->toUpperCase(Ljava/lang/String;)Ljava/lang/String;
+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/conscrypt/AbstractConscryptSocket$1;-><init>(Lcom/android/org/conscrypt/AbstractConscryptSocket;)V
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;-><init>(Ljava/net/Socket;Ljava/lang/String;IZ)V
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;->checkOpen()V
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;->close()V
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;->getActiveSession()Ljavax/net/ssl/SSLSession;
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;->getHostname()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;->getHostnameOrIP()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;->getPort()I
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;->getSoTimeout()I
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;->isClosed()Z
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;->isConnected()Z
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;->isDelegating()Z
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;->notifyHandshakeCompletedListeners()V
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;->setHostname(Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/AbstractConscryptSocket;->setSoTimeout(I)V
+HSPLcom/android/org/conscrypt/AbstractSessionContext$1;-><init>(Lcom/android/org/conscrypt/AbstractSessionContext;)V
+HSPLcom/android/org/conscrypt/AbstractSessionContext$1;->removeEldestEntry(Ljava/util/Map$Entry;)Z
+HSPLcom/android/org/conscrypt/AbstractSessionContext;->-get0(Lcom/android/org/conscrypt/AbstractSessionContext;)I
+HSPLcom/android/org/conscrypt/AbstractSessionContext;-><init>(I)V
+HSPLcom/android/org/conscrypt/AbstractSessionContext;->cacheSession(Lcom/android/org/conscrypt/SslSessionWrapper;)V
+HSPLcom/android/org/conscrypt/AbstractSessionContext;->getSessionTimeout()I
+HSPLcom/android/org/conscrypt/ActiveSession;-><init>(Lcom/android/org/conscrypt/SslWrapper;Lcom/android/org/conscrypt/AbstractSessionContext;)V
+HSPLcom/android/org/conscrypt/ActiveSession;->checkPeerCertificatesPresent()V
+HSPLcom/android/org/conscrypt/ActiveSession;->configurePeer(Ljava/lang/String;I[Lcom/android/org/conscrypt/OpenSSLX509Certificate;)V
+HSPLcom/android/org/conscrypt/ActiveSession;->getCipherSuite()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/ActiveSession;->getLocalCertificates()[Ljava/security/cert/Certificate;
+HSPLcom/android/org/conscrypt/ActiveSession;->getPeerCertificates()[Ljava/security/cert/X509Certificate;
+HSPLcom/android/org/conscrypt/ActiveSession;->getPeerHost()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/ActiveSession;->getPeerPort()I
+HSPLcom/android/org/conscrypt/ActiveSession;->getPeerSignedCertificateTimestamp()[B
+HSPLcom/android/org/conscrypt/ActiveSession;->getSessionContext()Ljavax/net/ssl/SSLSessionContext;
+HSPLcom/android/org/conscrypt/ActiveSession;->getStatusResponses()Ljava/util/List;
+HSPLcom/android/org/conscrypt/ActiveSession;->isValid()Z
+HSPLcom/android/org/conscrypt/ActiveSession;->onPeerCertificatesReceived(Ljava/lang/String;I[Lcom/android/org/conscrypt/OpenSSLX509Certificate;)V
+HSPLcom/android/org/conscrypt/ActiveSession;->onSessionEstablished(Ljava/lang/String;I)V
+HSPLcom/android/org/conscrypt/AddressUtils;->isValidSniHostname(Ljava/lang/String;)Z
+HSPLcom/android/org/conscrypt/ArrayUtils;->checkOffsetAndCount(III)V
+HSPLcom/android/org/conscrypt/ByteArray;-><init>([B)V
+HSPLcom/android/org/conscrypt/ByteArray;->hashCode()I
+HSPLcom/android/org/conscrypt/CertBlacklist;-><init>(Ljava/util/Set;Ljava/util/Set;)V
+HSPLcom/android/org/conscrypt/CertBlacklist;->closeQuietly(Ljava/io/Closeable;)V
+HSPLcom/android/org/conscrypt/CertBlacklist;->getDefault()Lcom/android/org/conscrypt/CertBlacklist;
+HSPLcom/android/org/conscrypt/CertBlacklist;->isHex(Ljava/lang/String;)Z
+HSPLcom/android/org/conscrypt/CertBlacklist;->isPubkeyHash(Ljava/lang/String;)Z
+HSPLcom/android/org/conscrypt/CertBlacklist;->isPublicKeyBlackListed(Ljava/security/PublicKey;)Z
+HSPLcom/android/org/conscrypt/CertBlacklist;->readBlacklist(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/CertBlacklist;->readFileAsBytes(Ljava/lang/String;)Ljava/io/ByteArrayOutputStream;
+HSPLcom/android/org/conscrypt/CertBlacklist;->readFileAsString(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/CertBlacklist;->readPublicKeyBlackList(Ljava/lang/String;)Ljava/util/Set;
+HSPLcom/android/org/conscrypt/CertBlacklist;->readSerialBlackList(Ljava/lang/String;)Ljava/util/Set;
+HSPLcom/android/org/conscrypt/CertBlacklist;->toHex([B)[B
+HSPLcom/android/org/conscrypt/CertificatePriorityComparator;-><init>()V
+HSPLcom/android/org/conscrypt/ChainStrengthAnalyzer;->check(Ljava/util/List;)V
+HSPLcom/android/org/conscrypt/ChainStrengthAnalyzer;->checkCert(Ljava/security/cert/X509Certificate;)V
+HSPLcom/android/org/conscrypt/ChainStrengthAnalyzer;->checkKeyLength(Ljava/security/cert/X509Certificate;)V
+HSPLcom/android/org/conscrypt/ChainStrengthAnalyzer;->checkSignatureAlgorithm(Ljava/security/cert/X509Certificate;)V
+HSPLcom/android/org/conscrypt/ClientSessionContext$HostAndPort;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/org/conscrypt/ClientSessionContext$HostAndPort;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/org/conscrypt/ClientSessionContext$HostAndPort;->hashCode()I
+HSPLcom/android/org/conscrypt/ClientSessionContext;-><init>()V
+HSPLcom/android/org/conscrypt/ClientSessionContext;->getCachedSession(Ljava/lang/String;ILcom/android/org/conscrypt/SSLParametersImpl;)Lcom/android/org/conscrypt/SslSessionWrapper;
+HSPLcom/android/org/conscrypt/ClientSessionContext;->getSession(Ljava/lang/String;I)Lcom/android/org/conscrypt/SslSessionWrapper;
+HSPLcom/android/org/conscrypt/ClientSessionContext;->onBeforeAddSession(Lcom/android/org/conscrypt/SslSessionWrapper;)V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket$SSLInputStream;-><init>(Lcom/android/org/conscrypt/ConscryptFileDescriptorSocket;)V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket$SSLInputStream;->awaitPendingOps()V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket$SSLInputStream;->read([BII)I
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket$SSLOutputStream;-><init>(Lcom/android/org/conscrypt/ConscryptFileDescriptorSocket;)V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket$SSLOutputStream;->awaitPendingOps()V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket$SSLOutputStream;->write([BII)V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->-get0(Lcom/android/org/conscrypt/ConscryptFileDescriptorSocket;)Lcom/android/org/conscrypt/SslWrapper;
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->-get1(Lcom/android/org/conscrypt/ConscryptFileDescriptorSocket;)I
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->-get2(Lcom/android/org/conscrypt/ConscryptFileDescriptorSocket;)Ljava/lang/Object;
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->-get3(Lcom/android/org/conscrypt/ConscryptFileDescriptorSocket;)I
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;-><init>(Ljava/net/Socket;Ljava/lang/String;IZLcom/android/org/conscrypt/SSLParametersImpl;)V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->clientSessionContext()Lcom/android/org/conscrypt/ClientSessionContext;
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->close()V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->closeUnderlyingSocket()V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->free()V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->getAlpnSelectedProtocol()[B
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->getEnabledCipherSuites()[Ljava/lang/String;
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->getEnabledProtocols()[Ljava/lang/String;
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->getHandshakeSession()Ljavax/net/ssl/SSLSession;
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->getInputStream()Ljava/io/InputStream;
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->getNeedClientAuth()Z
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->getOutputStream()Ljava/io/OutputStream;
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->getSSLParameters()Ljavax/net/ssl/SSLParameters;
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->getSession()Ljavax/net/ssl/SSLSession;
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->getSoWriteTimeout()I
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->getUseClientMode()Z
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->getWantClientAuth()Z
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->newSsl(Lcom/android/org/conscrypt/SSLParametersImpl;Lcom/android/org/conscrypt/ConscryptFileDescriptorSocket;)Lcom/android/org/conscrypt/SslWrapper;
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->onNewSessionEstablished(J)V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->onSSLStateChange(II)V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->sessionContext()Lcom/android/org/conscrypt/AbstractSessionContext;
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->setAlpnProtocols([B)V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->setEnabledCipherSuites([Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->setEnabledProtocols([Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->setHostname(Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->setUseSessionTickets(Z)V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->shutdownAndFreeSslNative()V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->startHandshake()V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->verifyCertificateChain([JLjava/lang/String;)V
+HSPLcom/android/org/conscrypt/ConscryptFileDescriptorSocket;->waitForHandshake()V
+HSPLcom/android/org/conscrypt/DefaultSSLContextImpl;-><init>()V
+HSPLcom/android/org/conscrypt/DefaultSSLContextImpl;->getKeyManagers()[Ljavax/net/ssl/KeyManager;
+HSPLcom/android/org/conscrypt/DefaultSSLContextImpl;->getTrustManagers()[Ljavax/net/ssl/TrustManager;
+HSPLcom/android/org/conscrypt/DelegatingExtendedSSLSession;-><init>(Lcom/android/org/conscrypt/ActiveSession;)V
+HSPLcom/android/org/conscrypt/DelegatingExtendedSSLSession;->getCipherSuite()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/DelegatingExtendedSSLSession;->getLocalCertificates()[Ljava/security/cert/Certificate;
+HSPLcom/android/org/conscrypt/DelegatingExtendedSSLSession;->getPeerCertificates()[Ljava/security/cert/Certificate;
+HSPLcom/android/org/conscrypt/FileClientSessionCache$Impl;-><init>(Ljava/io/File;)V
+HSPLcom/android/org/conscrypt/FileClientSessionCache$Impl;->newAccessOrder()Ljava/util/Map;
+HSPLcom/android/org/conscrypt/FileClientSessionCache;->usingDirectory(Ljava/io/File;)Lcom/android/org/conscrypt/SSLClientSessionCache;
+HSPLcom/android/org/conscrypt/Hex;->intToHexString(II)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/InternalUtil;->logKeyToPublicKey([B)Ljava/security/PublicKey;
+HSPLcom/android/org/conscrypt/KeyGeneratorImpl$HmacSHA1;-><init>()V
+HSPLcom/android/org/conscrypt/KeyGeneratorImpl;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/org/conscrypt/KeyGeneratorImpl;-><init>(Ljava/lang/String;ILcom/android/org/conscrypt/KeyGeneratorImpl;)V
+HSPLcom/android/org/conscrypt/KeyGeneratorImpl;->doKeyGeneration(I)[B
+HSPLcom/android/org/conscrypt/KeyGeneratorImpl;->engineGenerateKey()Ljavax/crypto/SecretKey;
+HSPLcom/android/org/conscrypt/KeyManagerFactoryImpl;-><init>()V
+HSPLcom/android/org/conscrypt/KeyManagerFactoryImpl;->engineGetKeyManagers()[Ljavax/net/ssl/KeyManager;
+HSPLcom/android/org/conscrypt/KeyManagerFactoryImpl;->engineInit(Ljava/security/KeyStore;[C)V
+HSPLcom/android/org/conscrypt/KeyManagerImpl;-><init>(Ljava/security/KeyStore;[C)V
+HSPLcom/android/org/conscrypt/NativeCrypto$SSLHandshakeCallbacks;->clientCertificateRequested([B[[B)V
+HSPLcom/android/org/conscrypt/NativeCrypto$SSLHandshakeCallbacks;->clientPSKKeyRequested(Ljava/lang/String;[B[B)I
+HSPLcom/android/org/conscrypt/NativeCrypto$SSLHandshakeCallbacks;->onNewSessionEstablished(J)V
+HSPLcom/android/org/conscrypt/NativeCrypto$SSLHandshakeCallbacks;->onSSLStateChange(II)V
+HSPLcom/android/org/conscrypt/NativeCrypto$SSLHandshakeCallbacks;->serverPSKKeyRequested(Ljava/lang/String;Ljava/lang/String;[B)I
+HSPLcom/android/org/conscrypt/NativeCrypto$SSLHandshakeCallbacks;->serverSessionRequested([B)J
+HSPLcom/android/org/conscrypt/NativeCrypto$SSLHandshakeCallbacks;->verifyCertificateChain([JLjava/lang/String;)V
+HSPLcom/android/org/conscrypt/NativeCrypto;->X509_NAME_hash(Ljavax/security/auth/x500/X500Principal;Ljava/lang/String;)I
+HSPLcom/android/org/conscrypt/NativeCrypto;->X509_NAME_hash_old(Ljavax/security/auth/x500/X500Principal;)I
+HSPLcom/android/org/conscrypt/NativeCrypto;->checkEnabledCipherSuites([Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/org/conscrypt/NativeCrypto;->checkEnabledProtocols([Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/org/conscrypt/NativeCrypto;->cipherSuiteFromJava(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/NativeCrypto;->cipherSuiteToJava(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/NativeCrypto;->setEnabledCipherSuites(J[Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/NativeCrypto;->setEnabledProtocols(J[Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/NativeCryptoJni;->init()V
+HSPLcom/android/org/conscrypt/NativeRef$EC_GROUP;-><init>(J)V
+HSPLcom/android/org/conscrypt/NativeRef$EC_GROUP;->doFree(J)V
+HSPLcom/android/org/conscrypt/NativeRef$EC_POINT;-><init>(J)V
+HSPLcom/android/org/conscrypt/NativeRef$EC_POINT;->doFree(J)V
+HSPLcom/android/org/conscrypt/NativeRef$EVP_CIPHER_CTX;-><init>(J)V
+HSPLcom/android/org/conscrypt/NativeRef$EVP_CIPHER_CTX;->doFree(J)V
+HSPLcom/android/org/conscrypt/NativeRef$EVP_MD_CTX;-><init>(J)V
+HSPLcom/android/org/conscrypt/NativeRef$EVP_MD_CTX;->doFree(J)V
+HSPLcom/android/org/conscrypt/NativeRef$EVP_PKEY;-><init>(J)V
+HSPLcom/android/org/conscrypt/NativeRef$EVP_PKEY;->doFree(J)V
+HSPLcom/android/org/conscrypt/NativeRef$HMAC_CTX;-><init>(J)V
+HSPLcom/android/org/conscrypt/NativeRef$HMAC_CTX;->doFree(J)V
+HSPLcom/android/org/conscrypt/NativeRef$SSL_SESSION;-><init>(J)V
+HSPLcom/android/org/conscrypt/NativeRef;-><init>(J)V
+HSPLcom/android/org/conscrypt/NativeRef;->doFree(J)V
+HSPLcom/android/org/conscrypt/NativeRef;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/org/conscrypt/NativeRef;->finalize()V
+HSPLcom/android/org/conscrypt/OpenSSLBIOInputStream;-><init>(Ljava/io/InputStream;Z)V
+HSPLcom/android/org/conscrypt/OpenSSLBIOInputStream;->getBioContext()J
+HSPLcom/android/org/conscrypt/OpenSSLBIOInputStream;->gets([B)I
+HSPLcom/android/org/conscrypt/OpenSSLBIOInputStream;->release()V
+HSPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER$AES$CBC$PKCS5Padding;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER$AES$CBC;-><init>(Lcom/android/org/conscrypt/OpenSSLCipher$Padding;)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER$AES;-><init>(Lcom/android/org/conscrypt/OpenSSLCipher$Mode;Lcom/android/org/conscrypt/OpenSSLCipher$Padding;)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER$AES;->checkSupportedKeySize(I)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER$AES_BASE;-><init>(Lcom/android/org/conscrypt/OpenSSLCipher$Mode;Lcom/android/org/conscrypt/OpenSSLCipher$Padding;)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER$AES_BASE;->getCipherBlockSize()I
+HSPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER$AES_BASE;->getCipherName(ILcom/android/org/conscrypt/OpenSSLCipher$Mode;)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER;-><init>(Lcom/android/org/conscrypt/OpenSSLCipher$Mode;Lcom/android/org/conscrypt/OpenSSLCipher$Padding;)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER;->engineInitInternal([BLjava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER;->getCipherName(ILcom/android/org/conscrypt/OpenSSLCipher$Mode;)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/OpenSSLCipher$Mode;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher$Padding;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher;-><init>(Lcom/android/org/conscrypt/OpenSSLCipher$Mode;Lcom/android/org/conscrypt/OpenSSLCipher$Padding;)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->checkAndSetEncodedKey(ILjava/security/Key;)[B
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->checkSupportedKeySize(I)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->checkSupportedMode(Lcom/android/org/conscrypt/OpenSSLCipher$Mode;)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->checkSupportedPadding(Lcom/android/org/conscrypt/OpenSSLCipher$Padding;)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->doFinalInternal([BII)I
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->engineInitInternal([BLjava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->getBaseCipherName()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->getCipherBlockSize()I
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->getOutputSizeForFinal(I)I
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->getOutputSizeForUpdate(I)I
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->getPadding()Lcom/android/org/conscrypt/OpenSSLCipher$Padding;
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->isEncrypting()Z
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->supportsVariableSizeKey()Z
+HSPLcom/android/org/conscrypt/OpenSSLCipher;->updateInternal([BII[BII)I
+HSPLcom/android/org/conscrypt/OpenSSLCipherRSA$DirectRSA;-><init>(I)V
+HSPLcom/android/org/conscrypt/OpenSSLCipherRSA$DirectRSA;->doCryptoOperation([B[B)I
+HSPLcom/android/org/conscrypt/OpenSSLCipherRSA$PKCS1;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLCipherRSA;-><init>(I)V
+HSPLcom/android/org/conscrypt/OpenSSLCipherRSA;->doCryptoInit(Ljava/security/spec/AlgorithmParameterSpec;)V
+HSPLcom/android/org/conscrypt/OpenSSLCipherRSA;->doCryptoOperation([B[B)I
+HSPLcom/android/org/conscrypt/OpenSSLCipherRSA;->engineDoFinal([BII)[B
+HSPLcom/android/org/conscrypt/OpenSSLCipherRSA;->engineInit(ILjava/security/Key;Ljava/security/SecureRandom;)V
+HSPLcom/android/org/conscrypt/OpenSSLCipherRSA;->engineInitInternal(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
+HSPLcom/android/org/conscrypt/OpenSSLCipherRSA;->engineUpdate([BII)[B
+HSPLcom/android/org/conscrypt/OpenSSLContextImpl$TLSv12;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLContextImpl;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLContextImpl;-><init>([Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/OpenSSLContextImpl;->engineGetSocketFactory()Ljavax/net/ssl/SSLSocketFactory;
+HSPLcom/android/org/conscrypt/OpenSSLContextImpl;->engineInit([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V
+HSPLcom/android/org/conscrypt/OpenSSLECGroupContext;-><init>(Lcom/android/org/conscrypt/NativeRef$EC_GROUP;)V
+HSPLcom/android/org/conscrypt/OpenSSLECGroupContext;->getECParameterSpec()Ljava/security/spec/ECParameterSpec;
+HSPLcom/android/org/conscrypt/OpenSSLECGroupContext;->getNativeRef()Lcom/android/org/conscrypt/NativeRef$EC_GROUP;
+HSPLcom/android/org/conscrypt/OpenSSLECKeyFactory;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLECKeyFactory;->engineGeneratePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
+HSPLcom/android/org/conscrypt/OpenSSLECPointContext;-><init>(Lcom/android/org/conscrypt/OpenSSLECGroupContext;Lcom/android/org/conscrypt/NativeRef$EC_POINT;)V
+HSPLcom/android/org/conscrypt/OpenSSLECPointContext;->getECPoint()Ljava/security/spec/ECPoint;
+HSPLcom/android/org/conscrypt/OpenSSLECPublicKey;-><init>(Lcom/android/org/conscrypt/OpenSSLKey;)V
+HSPLcom/android/org/conscrypt/OpenSSLECPublicKey;->getAlgorithm()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/OpenSSLECPublicKey;->getEncoded()[B
+HSPLcom/android/org/conscrypt/OpenSSLECPublicKey;->getParams()Ljava/security/spec/ECParameterSpec;
+HSPLcom/android/org/conscrypt/OpenSSLKey;-><init>(J)V
+HSPLcom/android/org/conscrypt/OpenSSLKey;-><init>(JZ)V
+HSPLcom/android/org/conscrypt/OpenSSLKey;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/org/conscrypt/OpenSSLKey;->fromPublicKey(Ljava/security/PublicKey;)Lcom/android/org/conscrypt/OpenSSLKey;
+HSPLcom/android/org/conscrypt/OpenSSLKey;->getNativeRef()Lcom/android/org/conscrypt/NativeRef$EVP_PKEY;
+HSPLcom/android/org/conscrypt/OpenSSLKey;->getPublicKey()Ljava/security/PublicKey;
+HSPLcom/android/org/conscrypt/OpenSSLKey;->getPublicKey(Ljava/security/spec/X509EncodedKeySpec;I)Ljava/security/PublicKey;
+HSPLcom/android/org/conscrypt/OpenSSLKeyHolder;->getOpenSSLKey()Lcom/android/org/conscrypt/OpenSSLKey;
+HSPLcom/android/org/conscrypt/OpenSSLMac$HmacSHA1;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLMac;-><init>(JI)V
+HSPLcom/android/org/conscrypt/OpenSSLMac;-><init>(JILcom/android/org/conscrypt/OpenSSLMac;)V
+HSPLcom/android/org/conscrypt/OpenSSLMac;->engineDoFinal()[B
+HSPLcom/android/org/conscrypt/OpenSSLMac;->engineInit(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
+HSPLcom/android/org/conscrypt/OpenSSLMac;->engineReset()V
+HSPLcom/android/org/conscrypt/OpenSSLMac;->engineUpdate([BII)V
+HSPLcom/android/org/conscrypt/OpenSSLMac;->resetContext()V
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK$MD5;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA1;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA256;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK;-><init>(JI)V
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK;-><init>(JILcom/android/org/conscrypt/NativeRef$EVP_MD_CTX;Z)V
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK;-><init>(JILcom/android/org/conscrypt/OpenSSLMessageDigestJDK;)V
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK;->clone()Ljava/lang/Object;
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK;->engineDigest()[B
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK;->engineGetDigestLength()I
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK;->engineReset()V
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK;->engineUpdate(B)V
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK;->engineUpdate(Ljava/nio/ByteBuffer;)V
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK;->engineUpdate([BII)V
+HSPLcom/android/org/conscrypt/OpenSSLMessageDigestJDK;->ensureDigestInitializedInContext()V
+HSPLcom/android/org/conscrypt/OpenSSLProvider;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLProvider;-><init>(Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/OpenSSLProvider;->putECDHKeyAgreementImplClass(Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/OpenSSLProvider;->putImplClassWithKeyConstraints(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/OpenSSLProvider;->putMacImplClass(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/OpenSSLProvider;->putRAWRSASignatureImplClass(Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/OpenSSLProvider;->putRSACipherImplClass(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/OpenSSLProvider;->putSignatureImplClass(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/OpenSSLProvider;->putSymmetricCipherImplClass(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/OpenSSLRSAKeyFactory;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLRSAKeyFactory;->engineGeneratePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
+HSPLcom/android/org/conscrypt/OpenSSLRSAPublicKey;-><init>(Lcom/android/org/conscrypt/OpenSSLKey;)V
+HSPLcom/android/org/conscrypt/OpenSSLRSAPublicKey;->ensureReadParams()V
+HSPLcom/android/org/conscrypt/OpenSSLRSAPublicKey;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/org/conscrypt/OpenSSLRSAPublicKey;->getAlgorithm()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/OpenSSLRSAPublicKey;->getEncoded()[B
+HSPLcom/android/org/conscrypt/OpenSSLRSAPublicKey;->getFormat()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/OpenSSLRSAPublicKey;->getModulus()Ljava/math/BigInteger;
+HSPLcom/android/org/conscrypt/OpenSSLRSAPublicKey;->getOpenSSLKey()Lcom/android/org/conscrypt/OpenSSLKey;
+HSPLcom/android/org/conscrypt/OpenSSLRSAPublicKey;->getPublicExponent()Ljava/math/BigInteger;
+HSPLcom/android/org/conscrypt/OpenSSLRSAPublicKey;->hashCode()I
+HSPLcom/android/org/conscrypt/OpenSSLRSAPublicKey;->toString()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/OpenSSLRandom;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLRandom;->engineNextBytes([B)V
+HSPLcom/android/org/conscrypt/OpenSSLRandom;->engineSetSeed([B)V
+HSPLcom/android/org/conscrypt/OpenSSLSignature$EngineType;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/org/conscrypt/OpenSSLSignature$EngineType;->values()[Lcom/android/org/conscrypt/OpenSSLSignature$EngineType;
+HSPLcom/android/org/conscrypt/OpenSSLSignature$RSAPKCS1Padding;-><init>(J)V
+HSPLcom/android/org/conscrypt/OpenSSLSignature$RSAPKCS1Padding;->configureEVP_PKEY_CTX(J)V
+HSPLcom/android/org/conscrypt/OpenSSLSignature$SHA1RSA;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLSignature$SHA256RSA;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLSignature;->-getcom-android-org-conscrypt-OpenSSLSignature$EngineTypeSwitchesValues()[I
+HSPLcom/android/org/conscrypt/OpenSSLSignature;-><init>(JLcom/android/org/conscrypt/OpenSSLSignature$EngineType;)V
+HSPLcom/android/org/conscrypt/OpenSSLSignature;-><init>(JLcom/android/org/conscrypt/OpenSSLSignature$EngineType;Lcom/android/org/conscrypt/OpenSSLSignature;)V
+HSPLcom/android/org/conscrypt/OpenSSLSignature;->checkEngineType(Lcom/android/org/conscrypt/OpenSSLKey;)V
+HSPLcom/android/org/conscrypt/OpenSSLSignature;->engineInitVerify(Ljava/security/PublicKey;)V
+HSPLcom/android/org/conscrypt/OpenSSLSignature;->engineUpdate(Ljava/nio/ByteBuffer;)V
+HSPLcom/android/org/conscrypt/OpenSSLSignature;->engineUpdate([BII)V
+HSPLcom/android/org/conscrypt/OpenSSLSignature;->engineVerify([B)Z
+HSPLcom/android/org/conscrypt/OpenSSLSignature;->initInternal(Lcom/android/org/conscrypt/OpenSSLKey;Z)V
+HSPLcom/android/org/conscrypt/OpenSSLSignature;->resetContext()V
+HSPLcom/android/org/conscrypt/OpenSSLSocketFactoryImpl;-><init>(Lcom/android/org/conscrypt/SSLParametersImpl;)V
+HSPLcom/android/org/conscrypt/OpenSSLSocketFactoryImpl;->createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;
+HSPLcom/android/org/conscrypt/OpenSSLSocketFactoryImpl;->hasFileDescriptor(Ljava/net/Socket;)Z
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;-><init>(Ljava/net/Socket;Ljava/lang/String;IZ)V
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->close()V
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->getAlpnSelectedProtocol()[B
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->getChannelId()[B
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->getHandshakeSession()Ljavax/net/ssl/SSLSession;
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->getHostname()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->getHostnameOrIP()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->isClosed()Z
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->isConnected()Z
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B)V
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->setChannelIdEnabled(Z)V
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->setChannelIdPrivateKey(Ljava/security/PrivateKey;)V
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->setHostname(Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/OpenSSLSocketImpl;->setUseSessionTickets(Z)V
+HSPLcom/android/org/conscrypt/OpenSSLX509CertPath$Encoding;->-get0(Lcom/android/org/conscrypt/OpenSSLX509CertPath$Encoding;)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/OpenSSLX509CertPath$Encoding;-><init>(Ljava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/org/conscrypt/OpenSSLX509CertPath;-><init>(Ljava/util/List;)V
+HSPLcom/android/org/conscrypt/OpenSSLX509CertPath;->getCertificates()Ljava/util/List;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;-><init>(J)V
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->alternativeNameArrayToList([[Ljava/lang/Object;)Ljava/util/Collection;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->checkValidity()V
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->checkValidity(Ljava/util/Date;)V
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->createCertChain([J)[Lcom/android/org/conscrypt/OpenSSLX509Certificate;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->finalize()V
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->fromPkcs7DerInputStream(Ljava/io/InputStream;)Ljava/util/List;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->fromX509DerInputStream(Ljava/io/InputStream;)Lcom/android/org/conscrypt/OpenSSLX509Certificate;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->fromX509PemInputStream(Ljava/io/InputStream;)Lcom/android/org/conscrypt/OpenSSLX509Certificate;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getBasicConstraints()I
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getCriticalExtensionOIDs()Ljava/util/Set;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getEncoded()[B
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getExtendedKeyUsage()Ljava/util/List;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getExtensionValue(Ljava/lang/String;)[B
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getIssuerDN()Ljava/security/Principal;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getIssuerX500Principal()Ljavax/security/auth/x500/X500Principal;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getKeyUsage()[Z
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getNotAfter()Ljava/util/Date;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getNotBefore()Ljava/util/Date;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getPublicKey()Ljava/security/PublicKey;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getSerialNumber()Ljava/math/BigInteger;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getSigAlgName()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getSigAlgOID()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getSubjectAlternativeNames()Ljava/util/Collection;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getSubjectDN()Ljava/security/Principal;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getSubjectX500Principal()Ljavax/security/auth/x500/X500Principal;
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getTBSCertificate()[B
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->getVersion()I
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->hasUnsupportedCriticalExtension()Z
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->hashCode()I
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->verify(Ljava/security/PublicKey;)V
+HSPLcom/android/org/conscrypt/OpenSSLX509Certificate;->verifyOpenSSL(Lcom/android/org/conscrypt/OpenSSLKey;)V
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory$1;-><init>(Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory;)V
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory$1;->fromPkcs7DerInputStream(Ljava/io/InputStream;)Ljava/util/List;
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory$1;->fromX509DerInputStream(Ljava/io/InputStream;)Lcom/android/org/conscrypt/OpenSSLX509Certificate;
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory$1;->fromX509DerInputStream(Ljava/io/InputStream;)Ljava/lang/Object;
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory$1;->fromX509PemInputStream(Ljava/io/InputStream;)Lcom/android/org/conscrypt/OpenSSLX509Certificate;
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory$1;->fromX509PemInputStream(Ljava/io/InputStream;)Ljava/lang/Object;
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory$2;-><init>(Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory;)V
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory$Parser;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory$Parser;-><init>(Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory$Parser;)V
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory$Parser;->generateItem(Ljava/io/InputStream;)Ljava/lang/Object;
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory;->-get0()[B
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory;-><init>()V
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory;->engineGenerateCertPath(Ljava/util/List;)Ljava/security/cert/CertPath;
+HSPLcom/android/org/conscrypt/OpenSSLX509CertificateFactory;->engineGenerateCertificate(Ljava/io/InputStream;)Ljava/security/cert/Certificate;
+HSPLcom/android/org/conscrypt/PeerInfoProvider$1;-><init>()V
+HSPLcom/android/org/conscrypt/PeerInfoProvider;-><init>()V
+HSPLcom/android/org/conscrypt/Platform;->blockGuardOnNetwork()V
+HSPLcom/android/org/conscrypt/Platform;->checkServerTrusted(Ljavax/net/ssl/X509TrustManager;[Ljava/security/cert/X509Certificate;Ljava/lang/String;Lcom/android/org/conscrypt/AbstractConscryptSocket;)V
+HSPLcom/android/org/conscrypt/Platform;->closeGuardClose(Ljava/lang/Object;)V
+HSPLcom/android/org/conscrypt/Platform;->closeGuardGet()Ldalvik/system/CloseGuard;
+HSPLcom/android/org/conscrypt/Platform;->closeGuardOpen(Ljava/lang/Object;Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/Platform;->getFileDescriptor(Ljava/net/Socket;)Ljava/io/FileDescriptor;
+HSPLcom/android/org/conscrypt/Platform;->getSSLParameters(Ljavax/net/ssl/SSLParameters;Lcom/android/org/conscrypt/SSLParametersImpl;Lcom/android/org/conscrypt/AbstractConscryptSocket;)V
+HSPLcom/android/org/conscrypt/Platform;->isCTVerificationRequired(Ljava/lang/String;)Z
+HSPLcom/android/org/conscrypt/Platform;->isLiteralIpAddress(Ljava/lang/String;)Z
+HSPLcom/android/org/conscrypt/Platform;->oidToAlgorithmName(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/Platform;->ping()V
+HSPLcom/android/org/conscrypt/Platform;->setCurveName(Ljava/security/spec/ECParameterSpec;Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/Platform;->setup()V
+HSPLcom/android/org/conscrypt/Platform;->wrapSSLSession(Lcom/android/org/conscrypt/ActiveSession;)Ljavax/net/ssl/SSLSession;
+HSPLcom/android/org/conscrypt/Platform;->wrapSocketFactoryIfNeeded(Lcom/android/org/conscrypt/OpenSSLSocketFactoryImpl;)Ljavax/net/ssl/SSLSocketFactory;
+HSPLcom/android/org/conscrypt/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
+HSPLcom/android/org/conscrypt/SSLClientSessionCache;->getSessionData(Ljava/lang/String;I)[B
+HSPLcom/android/org/conscrypt/SSLClientSessionCache;->putSessionData(Ljavax/net/ssl/SSLSession;[B)V
+HSPLcom/android/org/conscrypt/SSLParametersImpl$AliasChooser;->chooseClientAlias(Ljavax/net/ssl/X509KeyManager;[Ljavax/security/auth/x500/X500Principal;[Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SSLParametersImpl$AliasChooser;->chooseServerAlias(Ljavax/net/ssl/X509KeyManager;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SSLParametersImpl$PSKCallbacks;->chooseClientPSKIdentity(Lcom/android/org/conscrypt/PSKKeyManager;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SSLParametersImpl$PSKCallbacks;->chooseServerPSKIdentityHint(Lcom/android/org/conscrypt/PSKKeyManager;)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SSLParametersImpl$PSKCallbacks;->getPSKKey(Lcom/android/org/conscrypt/PSKKeyManager;Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/SecretKey;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;-><init>([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;Lcom/android/org/conscrypt/ClientSessionContext;Lcom/android/org/conscrypt/ServerSessionContext;[Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->clone()Ljava/lang/Object;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->concat([[Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->createDefaultX509KeyManager()Ljavax/net/ssl/X509KeyManager;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->createDefaultX509TrustManager()Ljavax/net/ssl/X509TrustManager;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->filterFromProtocols([Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->findFirstX509KeyManager([Ljavax/net/ssl/KeyManager;)Ljavax/net/ssl/X509KeyManager;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->findFirstX509TrustManager([Ljavax/net/ssl/TrustManager;)Ljavax/net/ssl/X509TrustManager;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getClientSessionContext()Lcom/android/org/conscrypt/ClientSessionContext;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getDefaultCipherSuites(ZZ)[Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getDefaultX509KeyManager()Ljavax/net/ssl/X509KeyManager;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getDefaultX509TrustManager()Ljavax/net/ssl/X509TrustManager;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getEnableSessionCreation()Z
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getEnabledCipherSuites()[Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getEnabledProtocols()[Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getEndpointIdentificationAlgorithm()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getNeedClientAuth()Z
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getPSKKeyManager()Lcom/android/org/conscrypt/PSKKeyManager;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getSessionContext()Lcom/android/org/conscrypt/AbstractSessionContext;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getUseCipherSuitesOrder()Z
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getUseClientMode()Z
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getUseSni()Z
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getWantClientAuth()Z
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->getX509TrustManager()Ljavax/net/ssl/X509TrustManager;
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->isCTVerificationEnabled(Ljava/lang/String;)Z
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->setAlpnProtocols([B)V
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->setEnabledCipherSuites([Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->setEnabledProtocols([Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->setUseSessionTickets(Z)V
+HSPLcom/android/org/conscrypt/SSLParametersImpl;->setUseSni(Z)V
+HSPLcom/android/org/conscrypt/ServerSessionContext;-><init>()V
+HSPLcom/android/org/conscrypt/SslSessionWrapper$Impl;-><init>(Lcom/android/org/conscrypt/AbstractSessionContext;Lcom/android/org/conscrypt/NativeRef$SSL_SESSION;Ljava/lang/String;I[Ljava/security/cert/X509Certificate;[B[B)V
+HSPLcom/android/org/conscrypt/SslSessionWrapper$Impl;-><init>(Lcom/android/org/conscrypt/AbstractSessionContext;Lcom/android/org/conscrypt/NativeRef$SSL_SESSION;Ljava/lang/String;I[Ljava/security/cert/X509Certificate;[B[BLcom/android/org/conscrypt/SslSessionWrapper$Impl;)V
+HSPLcom/android/org/conscrypt/SslSessionWrapper$Impl;->getCipherSuite()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SslSessionWrapper$Impl;->getCreationTime()J
+HSPLcom/android/org/conscrypt/SslSessionWrapper$Impl;->getId()[B
+HSPLcom/android/org/conscrypt/SslSessionWrapper$Impl;->getPeerHost()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SslSessionWrapper$Impl;->getPeerPort()I
+HSPLcom/android/org/conscrypt/SslSessionWrapper$Impl;->getProtocol()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SslSessionWrapper$Impl;->isValid()Z
+HSPLcom/android/org/conscrypt/SslSessionWrapper$Impl;->offerToResume(Lcom/android/org/conscrypt/SslWrapper;)V
+HSPLcom/android/org/conscrypt/SslSessionWrapper;-><init>()V
+HSPLcom/android/org/conscrypt/SslSessionWrapper;->getCipherSuite()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SslSessionWrapper;->getId()[B
+HSPLcom/android/org/conscrypt/SslSessionWrapper;->getOcspResponse(Lcom/android/org/conscrypt/ActiveSession;)[B
+HSPLcom/android/org/conscrypt/SslSessionWrapper;->getPeerHost()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SslSessionWrapper;->getPeerOcspStapledResponse()[B
+HSPLcom/android/org/conscrypt/SslSessionWrapper;->getPeerPort()I
+HSPLcom/android/org/conscrypt/SslSessionWrapper;->getPeerSignedCertificateTimestamp()[B
+HSPLcom/android/org/conscrypt/SslSessionWrapper;->getProtocol()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SslSessionWrapper;->isValid()Z
+HSPLcom/android/org/conscrypt/SslSessionWrapper;->newInstance(Lcom/android/org/conscrypt/NativeRef$SSL_SESSION;Lcom/android/org/conscrypt/ActiveSession;)Lcom/android/org/conscrypt/SslSessionWrapper;
+HSPLcom/android/org/conscrypt/SslSessionWrapper;->offerToResume(Lcom/android/org/conscrypt/SslWrapper;)V
+HSPLcom/android/org/conscrypt/SslSessionWrapper;->toBytes()[B
+HSPLcom/android/org/conscrypt/SslSessionWrapper;->toSSLSession()Ljavax/net/ssl/SSLSession;
+HSPLcom/android/org/conscrypt/SslWrapper;-><init>(JLcom/android/org/conscrypt/SSLParametersImpl;Lcom/android/org/conscrypt/NativeCrypto$SSLHandshakeCallbacks;Lcom/android/org/conscrypt/SSLParametersImpl$AliasChooser;Lcom/android/org/conscrypt/SSLParametersImpl$PSKCallbacks;)V
+HSPLcom/android/org/conscrypt/SslWrapper;->close()V
+HSPLcom/android/org/conscrypt/SslWrapper;->doHandshake(Ljava/io/FileDescriptor;I)V
+HSPLcom/android/org/conscrypt/SslWrapper;->enablePSKKeyManagerIfRequested()V
+HSPLcom/android/org/conscrypt/SslWrapper;->getAlpnSelectedProtocol()[B
+HSPLcom/android/org/conscrypt/SslWrapper;->getCipherSuite()Ljava/lang/String;
+HSPLcom/android/org/conscrypt/SslWrapper;->getLocalCertificates()[Lcom/android/org/conscrypt/OpenSSLX509Certificate;
+HSPLcom/android/org/conscrypt/SslWrapper;->getPeerCertificateOcspData()[B
+HSPLcom/android/org/conscrypt/SslWrapper;->getPeerCertificates()[Lcom/android/org/conscrypt/OpenSSLX509Certificate;
+HSPLcom/android/org/conscrypt/SslWrapper;->getPeerTlsSctData()[B
+HSPLcom/android/org/conscrypt/SslWrapper;->getTime()J
+HSPLcom/android/org/conscrypt/SslWrapper;->getTimeout()J
+HSPLcom/android/org/conscrypt/SslWrapper;->initialize(Ljava/lang/String;Lcom/android/org/conscrypt/OpenSSLKey;)V
+HSPLcom/android/org/conscrypt/SslWrapper;->interrupt()V
+HSPLcom/android/org/conscrypt/SslWrapper;->isClient()Z
+HSPLcom/android/org/conscrypt/SslWrapper;->isClosed()Z
+HSPLcom/android/org/conscrypt/SslWrapper;->newInstance(Lcom/android/org/conscrypt/SSLParametersImpl;Lcom/android/org/conscrypt/NativeCrypto$SSLHandshakeCallbacks;Lcom/android/org/conscrypt/SSLParametersImpl$AliasChooser;Lcom/android/org/conscrypt/SSLParametersImpl$PSKCallbacks;)Lcom/android/org/conscrypt/SslWrapper;
+HSPLcom/android/org/conscrypt/SslWrapper;->offerToResumeSession(J)V
+HSPLcom/android/org/conscrypt/SslWrapper;->read(Ljava/io/FileDescriptor;[BIII)I
+HSPLcom/android/org/conscrypt/SslWrapper;->setCertificateValidation(J)V
+HSPLcom/android/org/conscrypt/SslWrapper;->setTlsChannelId(Lcom/android/org/conscrypt/OpenSSLKey;)V
+HSPLcom/android/org/conscrypt/SslWrapper;->shutdown(Ljava/io/FileDescriptor;)V
+HSPLcom/android/org/conscrypt/SslWrapper;->write(Ljava/io/FileDescriptor;[BIII)V
+HSPLcom/android/org/conscrypt/TrustManagerImpl$ExtendedKeyUsagePKIXCertPathChecker;-><init>(ZLjava/security/cert/X509Certificate;)V
+HSPLcom/android/org/conscrypt/TrustManagerImpl$ExtendedKeyUsagePKIXCertPathChecker;-><init>(ZLjava/security/cert/X509Certificate;Lcom/android/org/conscrypt/TrustManagerImpl$ExtendedKeyUsagePKIXCertPathChecker;)V
+HSPLcom/android/org/conscrypt/TrustManagerImpl$ExtendedKeyUsagePKIXCertPathChecker;->check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V
+HSPLcom/android/org/conscrypt/TrustManagerImpl$ExtendedKeyUsagePKIXCertPathChecker;->init(Z)V
+HSPLcom/android/org/conscrypt/TrustManagerImpl$TrustAnchorComparator;-><init>()V
+HSPLcom/android/org/conscrypt/TrustManagerImpl$TrustAnchorComparator;-><init>(Lcom/android/org/conscrypt/TrustManagerImpl$TrustAnchorComparator;)V
+HSPLcom/android/org/conscrypt/TrustManagerImpl;-><init>(Ljava/security/KeyStore;Lcom/android/org/conscrypt/CertPinManager;Lcom/android/org/conscrypt/TrustedCertificateStore;)V
+HSPLcom/android/org/conscrypt/TrustManagerImpl;-><init>(Ljava/security/KeyStore;Lcom/android/org/conscrypt/CertPinManager;Lcom/android/org/conscrypt/TrustedCertificateStore;Lcom/android/org/conscrypt/CertBlacklist;)V
+HSPLcom/android/org/conscrypt/TrustManagerImpl;-><init>(Ljava/security/KeyStore;Lcom/android/org/conscrypt/CertPinManager;Lcom/android/org/conscrypt/TrustedCertificateStore;Lcom/android/org/conscrypt/CertBlacklist;Lcom/android/org/conscrypt/ct/CTLogStore;Lcom/android/org/conscrypt/ct/CTVerifier;Lcom/android/org/conscrypt/ct/CTPolicy;)V
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->acceptedIssuers(Ljava/security/KeyStore;)[Ljava/security/cert/X509Certificate;
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->checkBlacklist(Ljava/security/cert/X509Certificate;)V
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->checkTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljavax/net/ssl/SSLSession;Ljavax/net/ssl/SSLParameters;Z)Ljava/util/List;
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->checkTrusted([Ljava/security/cert/X509Certificate;[B[BLjava/lang/String;Ljava/lang/String;Z)Ljava/util/List;
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->checkTrustedRecursive([Ljava/security/cert/X509Certificate;[B[BLjava/lang/String;ZLjava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/Set;)Ljava/util/List;
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->findAllTrustAnchorsByIssuerAndSignature(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->findTrustAnchorBySubjectAndPublicKey(Ljava/security/cert/X509Certificate;)Ljava/security/cert/TrustAnchor;
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->getHandshakeSessionOrThrow(Ljavax/net/ssl/SSLSocket;)Ljavax/net/ssl/SSLSession;
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->getOcspDataFromSession(Ljavax/net/ssl/SSLSession;)[B
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->getTlsSctDataFromSession(Ljavax/net/ssl/SSLSession;)[B
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->getTrustedChainForServer([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)Ljava/util/List;
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->setOcspResponses(Ljava/security/cert/PKIXParameters;Ljava/security/cert/X509Certificate;[B)V
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->sortPotentialAnchors(Ljava/util/Set;)Ljava/util/Collection;
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->trustAnchors([Ljava/security/cert/X509Certificate;)Ljava/util/Set;
+HSPLcom/android/org/conscrypt/TrustManagerImpl;->verifyChain(Ljava/util/List;Ljava/util/List;Ljava/lang/String;Z[B[B)Ljava/util/List;
+HSPLcom/android/org/conscrypt/TrustedCertificateIndex;-><init>()V
+HSPLcom/android/org/conscrypt/TrustedCertificateIndex;-><init>(Ljava/util/Set;)V
+HSPLcom/android/org/conscrypt/TrustedCertificateIndex;->findAllByIssuerAndSignature(Ljava/security/cert/X509Certificate;)Ljava/util/Set;
+HSPLcom/android/org/conscrypt/TrustedCertificateIndex;->findBySubjectAndPublicKey(Ljava/security/cert/X509Certificate;)Ljava/security/cert/TrustAnchor;
+HSPLcom/android/org/conscrypt/TrustedCertificateIndex;->index(Ljava/security/cert/TrustAnchor;)V
+HSPLcom/android/org/conscrypt/TrustedCertificateIndex;->index(Ljava/security/cert/X509Certificate;)Ljava/security/cert/TrustAnchor;
+HSPLcom/android/org/conscrypt/TrustedCertificateIndex;->index(Ljava/util/Set;)V
+HSPLcom/android/org/conscrypt/TrustedCertificateKeyStoreSpi;-><init>()V
+HSPLcom/android/org/conscrypt/TrustedCertificateKeyStoreSpi;->engineGetCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;
+HSPLcom/android/org/conscrypt/TrustedCertificateKeyStoreSpi;->engineLoad(Ljava/io/InputStream;[C)V
+HSPLcom/android/org/conscrypt/TrustedCertificateStore$1;-><init>(Lcom/android/org/conscrypt/TrustedCertificateStore;Ljava/security/cert/X509Certificate;)V
+HSPLcom/android/org/conscrypt/TrustedCertificateStore$CertSelector;->match(Ljava/security/cert/X509Certificate;)Z
+HSPLcom/android/org/conscrypt/TrustedCertificateStore$PreloadHolder;->-get0()Ljava/io/File;
+HSPLcom/android/org/conscrypt/TrustedCertificateStore$PreloadHolder;->-get1()Ljava/io/File;
+HSPLcom/android/org/conscrypt/TrustedCertificateStore$PreloadHolder;->-get2()Ljava/io/File;
+HSPLcom/android/org/conscrypt/TrustedCertificateStore$PreloadHolder;->-set0(Ljava/io/File;)Ljava/io/File;
+HSPLcom/android/org/conscrypt/TrustedCertificateStore$PreloadHolder;->-set1(Ljava/io/File;)Ljava/io/File;
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;-><init>()V
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;-><init>(Ljava/io/File;Ljava/io/File;Ljava/io/File;)V
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;->file(Ljava/io/File;Ljava/lang/String;I)Ljava/io/File;
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;->fileForAlias(Ljava/lang/String;)Ljava/io/File;
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;->findCert(Ljava/io/File;Ljavax/security/auth/x500/X500Principal;Lcom/android/org/conscrypt/TrustedCertificateStore$CertSelector;Ljava/lang/Class;)Ljava/lang/Object;
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;->getCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;->getCertificate(Ljava/lang/String;Z)Ljava/security/cert/Certificate;
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;->getCertificateFile(Ljava/io/File;Ljava/security/cert/X509Certificate;)Ljava/io/File;
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;->hash(Ljavax/security/auth/x500/X500Principal;)Ljava/lang/String;
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;->isDeletedSystemCertificate(Ljava/security/cert/X509Certificate;)Z
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;->isSystem(Ljava/lang/String;)Z
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;->isTombstone(Ljava/io/File;)Z
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;->isUser(Ljava/lang/String;)Z
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;->readCertificate(Ljava/io/File;)Ljava/security/cert/X509Certificate;
+HSPLcom/android/org/conscrypt/TrustedCertificateStore;->setDefaultUserDirectory(Ljava/io/File;)V
+HSPLcom/android/org/conscrypt/ct/CTLogInfo;-><init>(Ljava/security/PublicKey;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/org/conscrypt/ct/CTLogStore;->getKnownLog([B)Lcom/android/org/conscrypt/ct/CTLogInfo;
+HSPLcom/android/org/conscrypt/ct/CTLogStoreImpl;-><init>()V
+HSPLcom/android/org/conscrypt/ct/CTLogStoreImpl;-><init>(Ljava/io/File;Ljava/io/File;[Lcom/android/org/conscrypt/ct/CTLogInfo;)V
+HSPLcom/android/org/conscrypt/ct/CTLogStoreImpl;->createDefaultFallbackLogs()[Lcom/android/org/conscrypt/ct/CTLogInfo;
+HSPLcom/android/org/conscrypt/ct/CTLogStoreImpl;->getDefaultFallbackLogs()[Lcom/android/org/conscrypt/ct/CTLogInfo;
+HSPLcom/android/org/conscrypt/ct/CTPolicy;->doesResultConformToPolicy(Lcom/android/org/conscrypt/ct/CTVerificationResult;Ljava/lang/String;[Ljava/security/cert/X509Certificate;)Z
+HSPLcom/android/org/conscrypt/ct/CTPolicyImpl;-><init>(Lcom/android/org/conscrypt/ct/CTLogStore;I)V
+HSPLcom/android/org/conscrypt/ct/CTVerifier;-><init>(Lcom/android/org/conscrypt/ct/CTLogStore;)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;-><init>()V
+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
+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;-><init>()V
+HSPLcom/android/server/SystemConfig;->addFeature(Ljava/lang/String;I)V
+HSPLcom/android/server/SystemConfig;->getAvailableFeatures()Landroid/util/ArrayMap;
+HSPLcom/android/server/SystemConfig;->getDisabledUntilUsedPreinstalledCarrierAssociatedApps()Landroid/util/ArrayMap;
+HSPLcom/android/server/SystemConfig;->getGlobalGids()[I
+HSPLcom/android/server/SystemConfig;->getInstance()Lcom/android/server/SystemConfig;
+HSPLcom/android/server/SystemConfig;->getPermissions()Landroid/util/ArrayMap;
+HSPLcom/android/server/SystemConfig;->getPrivAppDenyPermissions(Ljava/lang/String;)Landroid/util/ArraySet;
+HSPLcom/android/server/SystemConfig;->getPrivAppPermissions(Ljava/lang/String;)Landroid/util/ArraySet;
+HSPLcom/android/server/SystemConfig;->getSharedLibraries()Landroid/util/ArrayMap;
+HSPLcom/android/server/SystemConfig;->getSystemPermissions()Landroid/util/SparseArray;
+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;)V
+HSPLcom/google/android/collect/Lists;->newArrayList()Ljava/util/ArrayList;
+HSPLcom/google/android/collect/Maps;->newHashMap()Ljava/util/HashMap;
+HSPLcom/google/android/collect/Sets;->newArraySet([Ljava/lang/Object;)Landroid/util/ArraySet;
+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;-><init>(J)V
+HSPLcom/google/android/gles_jni/EGLContextImpl;->equals(Ljava/lang/Object;)Z
+HSPLcom/google/android/gles_jni/EGLContextImpl;->getGL()Ljavax/microedition/khronos/opengles/GL;
+HSPLcom/google/android/gles_jni/EGLDisplayImpl;-><init>(J)V
+HSPLcom/google/android/gles_jni/EGLDisplayImpl;->equals(Ljava/lang/Object;)Z
+HSPLcom/google/android/gles_jni/EGLImpl;-><init>()V
+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;->eglCreateWindowSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;[I)Ljavax/microedition/khronos/egl/EGLSurface;
+HSPLcom/google/android/gles_jni/EGLImpl;->eglGetCurrentContext()Ljavax/microedition/khronos/egl/EGLContext;
+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/GLImpl;-><init>()V
+HSPLcom/google/android/gles_jni/GLImpl;->glGetString(I)Ljava/lang/String;
+HSPLcom/google/vr/platform/DeviceInfo;->getVrBoot()Z
+HSPLdalvik/system/BaseDexClassLoader;-><init>(Ljava/lang/String;Ljava/io/File;Ljava/lang/String;Ljava/lang/ClassLoader;)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;->getLdLibraryPath()Ljava/lang/String;
+HSPLdalvik/system/BaseDexClassLoader;->getPackage(Ljava/lang/String;)Ljava/lang/Package;
+HSPLdalvik/system/BaseDexClassLoader;->reportClassLoaderChain()V
+HSPLdalvik/system/BaseDexClassLoader;->setReporter(Ldalvik/system/BaseDexClassLoader$Reporter;)V
+HSPLdalvik/system/BaseDexClassLoader;->toString()Ljava/lang/String;
+HSPLdalvik/system/BlockGuard$1;->getPolicyMask()I
+HSPLdalvik/system/BlockGuard$1;->onNetwork()V
+HSPLdalvik/system/BlockGuard$1;->onReadFromDisk()V
+HSPLdalvik/system/BlockGuard$1;->onUnbufferedIO()V
+HSPLdalvik/system/BlockGuard$1;->onWriteToDisk()V
+HSPLdalvik/system/BlockGuard$2;->initialValue()Ldalvik/system/BlockGuard$Policy;
+HSPLdalvik/system/BlockGuard$2;->initialValue()Ljava/lang/Object;
+HSPLdalvik/system/BlockGuard$BlockGuardPolicyException;-><init>(IILjava/lang/String;)V
+HSPLdalvik/system/BlockGuard$BlockGuardPolicyException;->getMessage()Ljava/lang/String;
+HSPLdalvik/system/BlockGuard$BlockGuardPolicyException;->getPolicy()I
+HSPLdalvik/system/BlockGuard;->getThreadPolicy()Ldalvik/system/BlockGuard$Policy;
+HSPLdalvik/system/BlockGuard;->setThreadPolicy(Ldalvik/system/BlockGuard$Policy;)V
+HSPLdalvik/system/CloseGuard$DefaultTracker;->close(Ljava/lang/Throwable;)V
+HSPLdalvik/system/CloseGuard$DefaultTracker;->open(Ljava/lang/Throwable;)V
+HSPLdalvik/system/CloseGuard$Reporter;->report(Ljava/lang/String;Ljava/lang/Throwable;)V
+HSPLdalvik/system/CloseGuard$Tracker;->close(Ljava/lang/Throwable;)V
+HSPLdalvik/system/CloseGuard$Tracker;->open(Ljava/lang/Throwable;)V
+HSPLdalvik/system/CloseGuard;-><init>()V
+HSPLdalvik/system/CloseGuard;->close()V
+HSPLdalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard;
+HSPLdalvik/system/CloseGuard;->getReporter()Ldalvik/system/CloseGuard$Reporter;
+HSPLdalvik/system/CloseGuard;->open(Ljava/lang/String;)V
+HSPLdalvik/system/CloseGuard;->setEnabled(Z)V
+HSPLdalvik/system/CloseGuard;->setReporter(Ldalvik/system/CloseGuard$Reporter;)V
+HSPLdalvik/system/CloseGuard;->warnIfOpen()V
+HSPLdalvik/system/DalvikLogHandler;->publish(Ljava/util/logging/Logger;Ljava/lang/String;Ljava/util/logging/Level;Ljava/lang/String;)V
+HSPLdalvik/system/DalvikLogging;->loggerNameToTag(Ljava/lang/String;)Ljava/lang/String;
+HSPLdalvik/system/DexClassLoader;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V
+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;->defineClass(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/Object;Ldalvik/system/DexFile;Ljava/util/List;)Ljava/lang/Class;
+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/DexPathList$Element;->-wrap0(Ldalvik/system/DexPathList$Element;)Ljava/lang/String;
+HSPLdalvik/system/DexPathList$Element;-><init>(Ldalvik/system/DexFile;Ljava/io/File;)V
+HSPLdalvik/system/DexPathList$Element;->findClass(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/util/List;)Ljava/lang/Class;
+HSPLdalvik/system/DexPathList$Element;->findResource(Ljava/lang/String;)Ljava/net/URL;
+HSPLdalvik/system/DexPathList$Element;->getDexPath()Ljava/lang/String;
+HSPLdalvik/system/DexPathList$Element;->maybeInit()V
+HSPLdalvik/system/DexPathList$Element;->toString()Ljava/lang/String;
+HSPLdalvik/system/DexPathList$NativeLibraryElement;-><init>(Ljava/io/File;)V
+HSPLdalvik/system/DexPathList$NativeLibraryElement;-><init>(Ljava/io/File;Ljava/lang/String;)V
+HSPLdalvik/system/DexPathList$NativeLibraryElement;->findNativeLibrary(Ljava/lang/String;)Ljava/lang/String;
+HSPLdalvik/system/DexPathList$NativeLibraryElement;->maybeInit()V
+HSPLdalvik/system/DexPathList;-><init>(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)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;->getDexPaths()Ljava/util/List;
+HSPLdalvik/system/DexPathList;->getNativeLibraryDirectories()Ljava/util/List;
+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;)[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/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/SocketTagger$1;-><init>()V
+HSPLdalvik/system/SocketTagger;-><init>()V
+HSPLdalvik/system/SocketTagger;->get()Ldalvik/system/SocketTagger;
+HSPLdalvik/system/SocketTagger;->set(Ldalvik/system/SocketTagger;)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;->is64BitAbi(Ljava/lang/String;)Z
+HSPLdalvik/system/VMRuntime;->is64BitInstructionSet(Ljava/lang/String;)Z
+HSPLdalvik/system/VMRuntime;->setTargetHeapUtilization(F)F
+HSPLdalvik/system/VMRuntime;->setTargetSdkVersion(I)V
+HSPLdalvik/system/VMStack;->getStackClass1()Ljava/lang/Class;
+HSPLdalvik/system/ZygoteHooks;->postForkChild(IZLjava/lang/String;)V
+HSPLdalvik/system/ZygoteHooks;->postForkCommon()V
+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;->putFloat([BIF)V
+HSPLjava/io/Bits;->putInt([BII)V
+HSPLjava/io/Bits;->putLong([BIJ)V
+HSPLjava/io/Bits;->putShort([BIS)V
+HSPLjava/io/BufferedInputStream;-><init>(Ljava/io/InputStream;)V
+HSPLjava/io/BufferedInputStream;-><init>(Ljava/io/InputStream;I)V
+HSPLjava/io/BufferedInputStream;->available()I
+HSPLjava/io/BufferedInputStream;->close()V
+HSPLjava/io/BufferedInputStream;->fill()V
+HSPLjava/io/BufferedInputStream;->getBufIfOpen()[B
+HSPLjava/io/BufferedInputStream;->getInIfOpen()Ljava/io/InputStream;
+HSPLjava/io/BufferedInputStream;->mark(I)V
+HSPLjava/io/BufferedInputStream;->markSupported()Z
+HSPLjava/io/BufferedInputStream;->read()I
+HSPLjava/io/BufferedInputStream;->read([BII)I
+HSPLjava/io/BufferedInputStream;->read1([BII)I
+HSPLjava/io/BufferedOutputStream;-><init>(Ljava/io/OutputStream;)V
+HSPLjava/io/BufferedOutputStream;-><init>(Ljava/io/OutputStream;I)V
+HSPLjava/io/BufferedOutputStream;->flush()V
+HSPLjava/io/BufferedOutputStream;->flushBuffer()V
+HSPLjava/io/BufferedOutputStream;->write(I)V
+HSPLjava/io/BufferedOutputStream;->write([BII)V
+HSPLjava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
+HSPLjava/io/BufferedReader;-><init>(Ljava/io/Reader;I)V
+HSPLjava/io/BufferedReader;->close()V
+HSPLjava/io/BufferedReader;->ensureOpen()V
+HSPLjava/io/BufferedReader;->fill()V
+HSPLjava/io/BufferedReader;->readLine()Ljava/lang/String;
+HSPLjava/io/BufferedReader;->readLine(Z)Ljava/lang/String;
+HSPLjava/io/BufferedWriter;-><init>(Ljava/io/Writer;)V
+HSPLjava/io/BufferedWriter;-><init>(Ljava/io/Writer;I)V
+HSPLjava/io/BufferedWriter;->ensureOpen()V
+HSPLjava/io/BufferedWriter;->flush()V
+HSPLjava/io/BufferedWriter;->flushBuffer()V
+HSPLjava/io/BufferedWriter;->min(II)I
+HSPLjava/io/BufferedWriter;->newLine()V
+HSPLjava/io/BufferedWriter;->write(Ljava/lang/String;II)V
+HSPLjava/io/ByteArrayInputStream;-><init>([B)V
+HSPLjava/io/ByteArrayInputStream;-><init>([BII)V
+HSPLjava/io/ByteArrayInputStream;->available()I
+HSPLjava/io/ByteArrayInputStream;->close()V
+HSPLjava/io/ByteArrayInputStream;->mark(I)V
+HSPLjava/io/ByteArrayInputStream;->markSupported()Z
+HSPLjava/io/ByteArrayInputStream;->read()I
+HSPLjava/io/ByteArrayInputStream;->read([BII)I
+HSPLjava/io/ByteArrayInputStream;->reset()V
+HSPLjava/io/ByteArrayInputStream;->skip(J)J
+HSPLjava/io/ByteArrayOutputStream;-><init>()V
+HSPLjava/io/ByteArrayOutputStream;-><init>(I)V
+HSPLjava/io/ByteArrayOutputStream;->close()V
+HSPLjava/io/ByteArrayOutputStream;->ensureCapacity(I)V
+HSPLjava/io/ByteArrayOutputStream;->grow(I)V
+HSPLjava/io/ByteArrayOutputStream;->reset()V
+HSPLjava/io/ByteArrayOutputStream;->size()I
+HSPLjava/io/ByteArrayOutputStream;->toByteArray()[B
+HSPLjava/io/ByteArrayOutputStream;->toString(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/io/ByteArrayOutputStream;->write(I)V
+HSPLjava/io/ByteArrayOutputStream;->write([BII)V
+HSPLjava/io/ByteArrayOutputStream;->writeTo(Ljava/io/OutputStream;)V
+HSPLjava/io/CharArrayWriter;-><init>()V
+HSPLjava/io/CharArrayWriter;-><init>(I)V
+HSPLjava/io/CharArrayWriter;->toString()Ljava/lang/String;
+HSPLjava/io/CharArrayWriter;->write(I)V
+HSPLjava/io/CharArrayWriter;->write([CII)V
+HSPLjava/io/DataInputStream;-><init>(Ljava/io/InputStream;)V
+HSPLjava/io/DataInputStream;->read([BII)I
+HSPLjava/io/DataInputStream;->readBoolean()Z
+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;->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/DataOutputStream;-><init>(Ljava/io/OutputStream;)V
+HSPLjava/io/DataOutputStream;->flush()V
+HSPLjava/io/DataOutputStream;->incCount(I)V
+HSPLjava/io/DataOutputStream;->size()I
+HSPLjava/io/DataOutputStream;->write([BII)V
+HSPLjava/io/DataOutputStream;->writeFloat(F)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/EOFException;-><init>()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
+HSPLjava/io/File;-><init>(Ljava/lang/String;)V
+HSPLjava/io/File;-><init>(Ljava/lang/String;I)V
+HSPLjava/io/File;-><init>(Ljava/lang/String;Ljava/io/File;)V
+HSPLjava/io/File;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/io/File;-><init>(Ljava/net/URI;)V
+HSPLjava/io/File;->canRead()Z
+HSPLjava/io/File;->canWrite()Z
+HSPLjava/io/File;->compareTo(Ljava/io/File;)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;->equals(Ljava/lang/Object;)Z
+HSPLjava/io/File;->exists()Z
+HSPLjava/io/File;->getAbsoluteFile()Ljava/io/File;
+HSPLjava/io/File;->getAbsolutePath()Ljava/lang/String;
+HSPLjava/io/File;->getCanonicalFile()Ljava/io/File;
+HSPLjava/io/File;->getCanonicalPath()Ljava/lang/String;
+HSPLjava/io/File;->getFreeSpace()J
+HSPLjava/io/File;->getName()Ljava/lang/String;
+HSPLjava/io/File;->getParent()Ljava/lang/String;
+HSPLjava/io/File;->getParentFile()Ljava/io/File;
+HSPLjava/io/File;->getPath()Ljava/lang/String;
+HSPLjava/io/File;->getPrefixLength()I
+HSPLjava/io/File;->getTotalSpace()J
+HSPLjava/io/File;->getUsableSpace()J
+HSPLjava/io/File;->hashCode()I
+HSPLjava/io/File;->isAbsolute()Z
+HSPLjava/io/File;->isDirectory()Z
+HSPLjava/io/File;->isFile()Z
+HSPLjava/io/File;->isInvalid()Z
+HSPLjava/io/File;->lastModified()J
+HSPLjava/io/File;->length()J
+HSPLjava/io/File;->list()[Ljava/lang/String;
+HSPLjava/io/File;->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
+HSPLjava/io/File;->setReadable(ZZ)Z
+HSPLjava/io/File;->setWritable(ZZ)Z
+HSPLjava/io/File;->slashify(Ljava/lang/String;Z)Ljava/lang/String;
+HSPLjava/io/File;->toString()Ljava/lang/String;
+HSPLjava/io/File;->toURI()Ljava/net/URI;
+HSPLjava/io/FileDescriptor$1;->set(Ljava/io/FileDescriptor;I)V
+HSPLjava/io/FileDescriptor;->-set0(Ljava/io/FileDescriptor;I)I
+HSPLjava/io/FileDescriptor;-><init>()V
+HSPLjava/io/FileDescriptor;->getInt$()I
+HSPLjava/io/FileDescriptor;->isSocket$()Z
+HSPLjava/io/FileDescriptor;->setInt$(I)V
+HSPLjava/io/FileDescriptor;->valid()Z
+HSPLjava/io/FileFilter;->accept(Ljava/io/File;)Z
+HSPLjava/io/FileInputStream;-><init>(Ljava/io/File;)V
+HSPLjava/io/FileInputStream;-><init>(Ljava/io/FileDescriptor;)V
+HSPLjava/io/FileInputStream;-><init>(Ljava/io/FileDescriptor;Z)V
+HSPLjava/io/FileInputStream;-><init>(Ljava/lang/String;)V
+HSPLjava/io/FileInputStream;->available()I
+HSPLjava/io/FileInputStream;->close()V
+HSPLjava/io/FileInputStream;->finalize()V
+HSPLjava/io/FileInputStream;->getChannel()Ljava/nio/channels/FileChannel;
+HSPLjava/io/FileInputStream;->open(Ljava/lang/String;)V
+HSPLjava/io/FileInputStream;->read()I
+HSPLjava/io/FileInputStream;->read([B)I
+HSPLjava/io/FileInputStream;->read([BII)I
+HSPLjava/io/FileInputStream;->skip(J)J
+HSPLjava/io/FileNotFoundException;-><init>(Ljava/lang/String;)V
+HSPLjava/io/FileNotFoundException;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/io/FileOutputStream;-><init>(Ljava/io/File;)V
+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;->getFD()Ljava/io/FileDescriptor;
+HSPLjava/io/FileOutputStream;->open(Ljava/lang/String;Z)V
+HSPLjava/io/FileOutputStream;->write(I)V
+HSPLjava/io/FileOutputStream;->write([B)V
+HSPLjava/io/FileOutputStream;->write([BII)V
+HSPLjava/io/FileReader;-><init>(Ljava/io/File;)V
+HSPLjava/io/FileReader;-><init>(Ljava/lang/String;)V
+HSPLjava/io/FileSystem;->canonicalize(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/io/FileSystem;->checkAccess(Ljava/io/File;I)Z
+HSPLjava/io/FileSystem;->compare(Ljava/io/File;Ljava/io/File;)I
+HSPLjava/io/FileSystem;->createDirectory(Ljava/io/File;)Z
+HSPLjava/io/FileSystem;->createFileExclusively(Ljava/lang/String;)Z
+HSPLjava/io/FileSystem;->delete(Ljava/io/File;)Z
+HSPLjava/io/FileSystem;->fromURIPath(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/io/FileSystem;->getBooleanAttributes(Ljava/io/File;)I
+HSPLjava/io/FileSystem;->getDefaultParent()Ljava/lang/String;
+HSPLjava/io/FileSystem;->getLastModifiedTime(Ljava/io/File;)J
+HSPLjava/io/FileSystem;->getLength(Ljava/io/File;)J
+HSPLjava/io/FileSystem;->getPathSeparator()C
+HSPLjava/io/FileSystem;->getSeparator()C
+HSPLjava/io/FileSystem;->getSpace(Ljava/io/File;I)J
+HSPLjava/io/FileSystem;->hashCode(Ljava/io/File;)I
+HSPLjava/io/FileSystem;->isAbsolute(Ljava/io/File;)Z
+HSPLjava/io/FileSystem;->list(Ljava/io/File;)[Ljava/lang/String;
+HSPLjava/io/FileSystem;->listRoots()[Ljava/io/File;
+HSPLjava/io/FileSystem;->normalize(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/io/FileSystem;->prefixLength(Ljava/lang/String;)I
+HSPLjava/io/FileSystem;->rename(Ljava/io/File;Ljava/io/File;)Z
+HSPLjava/io/FileSystem;->resolve(Ljava/io/File;)Ljava/lang/String;
+HSPLjava/io/FileSystem;->resolve(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/io/FileSystem;->setLastModifiedTime(Ljava/io/File;J)Z
+HSPLjava/io/FileSystem;->setPermission(Ljava/io/File;IZZ)Z
+HSPLjava/io/FileSystem;->setReadOnly(Ljava/io/File;)Z
+HSPLjava/io/FileWriter;-><init>(Ljava/io/File;Z)V
+HSPLjava/io/FileWriter;-><init>(Ljava/lang/String;)V
+HSPLjava/io/FilenameFilter;->accept(Ljava/io/File;Ljava/lang/String;)Z
+HSPLjava/io/FilterInputStream;-><init>(Ljava/io/InputStream;)V
+HSPLjava/io/FilterInputStream;->available()I
+HSPLjava/io/FilterInputStream;->close()V
+HSPLjava/io/FilterInputStream;->read()I
+HSPLjava/io/FilterInputStream;->read([B)I
+HSPLjava/io/FilterInputStream;->read([BII)I
+HSPLjava/io/FilterOutputStream;-><init>(Ljava/io/OutputStream;)V
+HSPLjava/io/FilterOutputStream;->close()V
+HSPLjava/io/FilterOutputStream;->write([B)V
+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/InputStream;-><init>()V
+HSPLjava/io/InputStream;->read([B)I
+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;->close()V
+HSPLjava/io/InputStreamReader;->read([CII)I
+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
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->currentBlockRemaining()I
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->getBlockDataMode()Z
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->peek()I
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->peekByte()B
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->read()I
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->read([BII)I
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->read([BIIZ)I
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readBlockHeader(Z)I
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readBoolean()Z
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readByte()B
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readFully([BIIZ)V
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readInt()I
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readLong()J
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readShort()S
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readUTF()Ljava/lang/String;
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readUTFBody(J)Ljava/lang/String;
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readUTFChar(Ljava/lang/StringBuilder;J)I
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readUTFSpan(Ljava/lang/StringBuilder;J)J
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readUnsignedShort()I
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->refill()V
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->setBlockDataMode(Z)Z
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->skipBlockData()V
+HSPLjava/io/ObjectInputStream$HandleTable$HandleList;-><init>()V
+HSPLjava/io/ObjectInputStream$HandleTable$HandleList;->add(I)V
+HSPLjava/io/ObjectInputStream$HandleTable;-><init>(I)V
+HSPLjava/io/ObjectInputStream$HandleTable;->assign(Ljava/lang/Object;)I
+HSPLjava/io/ObjectInputStream$HandleTable;->clear()V
+HSPLjava/io/ObjectInputStream$HandleTable;->finish(I)V
+HSPLjava/io/ObjectInputStream$HandleTable;->grow()V
+HSPLjava/io/ObjectInputStream$HandleTable;->lookupException(I)Ljava/lang/ClassNotFoundException;
+HSPLjava/io/ObjectInputStream$HandleTable;->lookupObject(I)Ljava/lang/Object;
+HSPLjava/io/ObjectInputStream$HandleTable;->markDependency(II)V
+HSPLjava/io/ObjectInputStream$HandleTable;->setObject(ILjava/lang/Object;)V
+HSPLjava/io/ObjectInputStream$HandleTable;->size()I
+HSPLjava/io/ObjectInputStream$PeekInputStream;-><init>(Ljava/io/InputStream;)V
+HSPLjava/io/ObjectInputStream$PeekInputStream;->close()V
+HSPLjava/io/ObjectInputStream$PeekInputStream;->peek()I
+HSPLjava/io/ObjectInputStream$PeekInputStream;->read()I
+HSPLjava/io/ObjectInputStream$PeekInputStream;->read([BII)I
+HSPLjava/io/ObjectInputStream$PeekInputStream;->readFully([BII)V
+HSPLjava/io/ObjectInputStream$ValidationList;-><init>()V
+HSPLjava/io/ObjectInputStream$ValidationList;->clear()V
+HSPLjava/io/ObjectInputStream$ValidationList;->doCallbacks()V
+HSPLjava/io/ObjectInputStream;->-get1(Ljava/io/ObjectInputStream;)Z
+HSPLjava/io/ObjectInputStream;-><init>(Ljava/io/InputStream;)V
+HSPLjava/io/ObjectInputStream;->checkResolve(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/io/ObjectInputStream;->clear()V
+HSPLjava/io/ObjectInputStream;->close()V
+HSPLjava/io/ObjectInputStream;->defaultReadFields(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V
+HSPLjava/io/ObjectInputStream;->defaultReadObject()V
+HSPLjava/io/ObjectInputStream;->isCustomSubclass()Z
+HSPLjava/io/ObjectInputStream;->latestUserDefinedLoader()Ljava/lang/ClassLoader;
+HSPLjava/io/ObjectInputStream;->readArray(Z)Ljava/lang/Object;
+HSPLjava/io/ObjectInputStream;->readBoolean()Z
+HSPLjava/io/ObjectInputStream;->readByte()B
+HSPLjava/io/ObjectInputStream;->readClassDesc(Z)Ljava/io/ObjectStreamClass;
+HSPLjava/io/ObjectInputStream;->readClassDescriptor()Ljava/io/ObjectStreamClass;
+HSPLjava/io/ObjectInputStream;->readHandle(Z)Ljava/lang/Object;
+HSPLjava/io/ObjectInputStream;->readInt()I
+HSPLjava/io/ObjectInputStream;->readLong()J
+HSPLjava/io/ObjectInputStream;->readNonProxyDesc(Z)Ljava/io/ObjectStreamClass;
+HSPLjava/io/ObjectInputStream;->readNull()Ljava/lang/Object;
+HSPLjava/io/ObjectInputStream;->readObject()Ljava/lang/Object;
+HSPLjava/io/ObjectInputStream;->readObject0(Z)Ljava/lang/Object;
+HSPLjava/io/ObjectInputStream;->readOrdinaryObject(Z)Ljava/lang/Object;
+HSPLjava/io/ObjectInputStream;->readSerialData(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V
+HSPLjava/io/ObjectInputStream;->readShort()S
+HSPLjava/io/ObjectInputStream;->readStreamHeader()V
+HSPLjava/io/ObjectInputStream;->readString(Z)Ljava/lang/String;
+HSPLjava/io/ObjectInputStream;->readTypeString()Ljava/lang/String;
+HSPLjava/io/ObjectInputStream;->readUTF()Ljava/lang/String;
+HSPLjava/io/ObjectInputStream;->resolveClass(Ljava/io/ObjectStreamClass;)Ljava/lang/Class;
+HSPLjava/io/ObjectInputStream;->skipCustomData()V
+HSPLjava/io/ObjectInputStream;->verifySubclass()V
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;-><init>(Ljava/io/OutputStream;)V
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->close()V
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->drain()V
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->flush()V
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->getUTFLength(Ljava/lang/String;)J
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->setBlockDataMode(Z)Z
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->warnIfClosed()V
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->write(I)V
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->write([BIIZ)V
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeBlockHeader(I)V
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeByte(I)V
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeBytes(Ljava/lang/String;)V
+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$HandleTable;-><init>(IF)V
+HSPLjava/io/ObjectOutputStream$HandleTable;->assign(Ljava/lang/Object;)I
+HSPLjava/io/ObjectOutputStream$HandleTable;->clear()V
+HSPLjava/io/ObjectOutputStream$HandleTable;->growEntries()V
+HSPLjava/io/ObjectOutputStream$HandleTable;->hash(Ljava/lang/Object;)I
+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;->lookup(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/io/ObjectOutputStream;->-wrap1([FI[BII)V
+HSPLjava/io/ObjectOutputStream;-><init>(Ljava/io/OutputStream;)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
+HSPLjava/io/ObjectOutputStream;->defaultWriteObject()V
+HSPLjava/io/ObjectOutputStream;->flush()V
+HSPLjava/io/ObjectOutputStream;->isCustomSubclass()Z
+HSPLjava/io/ObjectOutputStream;->verifySubclass()V
+HSPLjava/io/ObjectOutputStream;->writeArray(Ljava/lang/Object;Ljava/io/ObjectStreamClass;Z)V
+HSPLjava/io/ObjectOutputStream;->writeByte(I)V
+HSPLjava/io/ObjectOutputStream;->writeClassDesc(Ljava/io/ObjectStreamClass;Z)V
+HSPLjava/io/ObjectOutputStream;->writeClassDescriptor(Ljava/io/ObjectStreamClass;)V
+HSPLjava/io/ObjectOutputStream;->writeHandle(I)V
+HSPLjava/io/ObjectOutputStream;->writeInt(I)V
+HSPLjava/io/ObjectOutputStream;->writeLong(J)V
+HSPLjava/io/ObjectOutputStream;->writeNonProxyDesc(Ljava/io/ObjectStreamClass;Z)V
+HSPLjava/io/ObjectOutputStream;->writeNull()V
+HSPLjava/io/ObjectOutputStream;->writeObject(Ljava/lang/Object;)V
+HSPLjava/io/ObjectOutputStream;->writeObject0(Ljava/lang/Object;Z)V
+HSPLjava/io/ObjectOutputStream;->writeOrdinaryObject(Ljava/lang/Object;Ljava/io/ObjectStreamClass;Z)V
+HSPLjava/io/ObjectOutputStream;->writeSerialData(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V
+HSPLjava/io/ObjectOutputStream;->writeShort(I)V
+HSPLjava/io/ObjectOutputStream;->writeStreamHeader()V
+HSPLjava/io/ObjectOutputStream;->writeString(Ljava/lang/String;Z)V
+HSPLjava/io/ObjectOutputStream;->writeTypeString(Ljava/lang/String;)V
+HSPLjava/io/ObjectOutputStream;->writeUTF(Ljava/lang/String;)V
+HSPLjava/io/ObjectStreamClass$1;-><init>(Ljava/io/ObjectStreamClass;)V
+HSPLjava/io/ObjectStreamClass$1;->run()Ljava/lang/Long;
+HSPLjava/io/ObjectStreamClass$1;->run()Ljava/lang/Object;
+HSPLjava/io/ObjectStreamClass$2;-><init>(Ljava/io/ObjectStreamClass;Ljava/lang/Class;)V
+HSPLjava/io/ObjectStreamClass$2;->run()Ljava/lang/Object;
+HSPLjava/io/ObjectStreamClass$2;->run()Ljava/lang/Void;
+HSPLjava/io/ObjectStreamClass$3;-><init>()V
+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$Caches;->-get0()Ljava/lang/ref/ReferenceQueue;
+HSPLjava/io/ObjectStreamClass$Caches;->-get1()Ljava/lang/ref/ReferenceQueue;
+HSPLjava/io/ObjectStreamClass$ClassDataSlot;-><init>(Ljava/io/ObjectStreamClass;Z)V
+HSPLjava/io/ObjectStreamClass$EntryFuture;-><init>()V
+HSPLjava/io/ObjectStreamClass$EntryFuture;-><init>(Ljava/io/ObjectStreamClass$EntryFuture;)V
+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
+HSPLjava/io/ObjectStreamClass$FieldReflector;->getFields()[Ljava/io/ObjectStreamField;
+HSPLjava/io/ObjectStreamClass$FieldReflector;->getObjFieldValues(Ljava/lang/Object;[Ljava/lang/Object;)V
+HSPLjava/io/ObjectStreamClass$FieldReflector;->getPrimFieldValues(Ljava/lang/Object;[B)V
+HSPLjava/io/ObjectStreamClass$FieldReflector;->setObjFieldValues(Ljava/lang/Object;[Ljava/lang/Object;)V
+HSPLjava/io/ObjectStreamClass$FieldReflector;->setPrimFieldValues(Ljava/lang/Object;[B)V
+HSPLjava/io/ObjectStreamClass$FieldReflectorKey;-><init>(Ljava/lang/Class;[Ljava/io/ObjectStreamField;Ljava/lang/ref/ReferenceQueue;)V
+HSPLjava/io/ObjectStreamClass$FieldReflectorKey;->equals(Ljava/lang/Object;)Z
+HSPLjava/io/ObjectStreamClass$FieldReflectorKey;->hashCode()I
+HSPLjava/io/ObjectStreamClass$MemberSignature;-><init>(Ljava/lang/reflect/Constructor;)V
+HSPLjava/io/ObjectStreamClass$MemberSignature;-><init>(Ljava/lang/reflect/Field;)V
+HSPLjava/io/ObjectStreamClass$MemberSignature;-><init>(Ljava/lang/reflect/Method;)V
+HSPLjava/io/ObjectStreamClass$WeakClassKey;-><init>(Ljava/lang/Class;Ljava/lang/ref/ReferenceQueue;)V
+HSPLjava/io/ObjectStreamClass$WeakClassKey;->equals(Ljava/lang/Object;)Z
+HSPLjava/io/ObjectStreamClass$WeakClassKey;->hashCode()I
+HSPLjava/io/ObjectStreamClass;->-get0(Ljava/io/ObjectStreamClass;)Ljava/lang/Class;
+HSPLjava/io/ObjectStreamClass;->-get1(Ljava/io/ObjectStreamClass;)Z
+HSPLjava/io/ObjectStreamClass;->-get2(Ljava/io/ObjectStreamClass;)Z
+HSPLjava/io/ObjectStreamClass;->-get3(Ljava/io/ObjectStreamClass;)Ljava/lang/reflect/Method;
+HSPLjava/io/ObjectStreamClass;->-set0(Ljava/io/ObjectStreamClass;Ljava/lang/reflect/Constructor;)Ljava/lang/reflect/Constructor;
+HSPLjava/io/ObjectStreamClass;->-set10(Ljava/io/ObjectStreamClass;Ljava/lang/reflect/Method;)Ljava/lang/reflect/Method;
+HSPLjava/io/ObjectStreamClass;->-set2(Ljava/io/ObjectStreamClass;[Ljava/io/ObjectStreamField;)[Ljava/io/ObjectStreamField;
+HSPLjava/io/ObjectStreamClass;->-set3(Ljava/io/ObjectStreamClass;Z)Z
+HSPLjava/io/ObjectStreamClass;->-set4(Ljava/io/ObjectStreamClass;Ljava/lang/reflect/Method;)Ljava/lang/reflect/Method;
+HSPLjava/io/ObjectStreamClass;->-set5(Ljava/io/ObjectStreamClass;Ljava/lang/reflect/Method;)Ljava/lang/reflect/Method;
+HSPLjava/io/ObjectStreamClass;->-set6(Ljava/io/ObjectStreamClass;Ljava/lang/reflect/Method;)Ljava/lang/reflect/Method;
+HSPLjava/io/ObjectStreamClass;->-set8(Ljava/io/ObjectStreamClass;Ljava/lang/Long;)Ljava/lang/Long;
+HSPLjava/io/ObjectStreamClass;->-set9(Ljava/io/ObjectStreamClass;Ljava/lang/reflect/Method;)Ljava/lang/reflect/Method;
+HSPLjava/io/ObjectStreamClass;->-wrap0(Ljava/lang/Class;)[Ljava/io/ObjectStreamField;
+HSPLjava/io/ObjectStreamClass;->-wrap1(Ljava/lang/Class;)Ljava/lang/Long;
+HSPLjava/io/ObjectStreamClass;->-wrap2(Ljava/lang/Class;)Ljava/lang/String;
+HSPLjava/io/ObjectStreamClass;->-wrap3([Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/String;
+HSPLjava/io/ObjectStreamClass;->-wrap5(Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
+HSPLjava/io/ObjectStreamClass;->-wrap6(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Method;
+HSPLjava/io/ObjectStreamClass;->-wrap7(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Method;
+HSPLjava/io/ObjectStreamClass;->-wrap8(Ljava/lang/Class;)J
+HSPLjava/io/ObjectStreamClass;->-wrap9(Ljava/io/ObjectStreamClass;)V
+HSPLjava/io/ObjectStreamClass;-><init>()V
+HSPLjava/io/ObjectStreamClass;-><init>(Ljava/lang/Class;)V
+HSPLjava/io/ObjectStreamClass;->checkDefaultSerialize()V
+HSPLjava/io/ObjectStreamClass;->checkDeserialize()V
+HSPLjava/io/ObjectStreamClass;->checkSerialize()V
+HSPLjava/io/ObjectStreamClass;->classNamesEqual(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLjava/io/ObjectStreamClass;->computeDefaultSUID(Ljava/lang/Class;)J
+HSPLjava/io/ObjectStreamClass;->computeFieldOffsets()V
+HSPLjava/io/ObjectStreamClass;->forClass()Ljava/lang/Class;
+HSPLjava/io/ObjectStreamClass;->getClassDataLayout()[Ljava/io/ObjectStreamClass$ClassDataSlot;
+HSPLjava/io/ObjectStreamClass;->getClassDataLayout0()[Ljava/io/ObjectStreamClass$ClassDataSlot;
+HSPLjava/io/ObjectStreamClass;->getClassSignature(Ljava/lang/Class;)Ljava/lang/String;
+HSPLjava/io/ObjectStreamClass;->getDeclaredSUID(Ljava/lang/Class;)Ljava/lang/Long;
+HSPLjava/io/ObjectStreamClass;->getDeclaredSerialFields(Ljava/lang/Class;)[Ljava/io/ObjectStreamField;
+HSPLjava/io/ObjectStreamClass;->getDefaultSerialFields(Ljava/lang/Class;)[Ljava/io/ObjectStreamField;
+HSPLjava/io/ObjectStreamClass;->getFields(Z)[Ljava/io/ObjectStreamField;
+HSPLjava/io/ObjectStreamClass;->getInheritableMethod(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Method;
+HSPLjava/io/ObjectStreamClass;->getMethodSignature([Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/String;
+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;->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;
+HSPLjava/io/ObjectStreamClass;->getReflector([Ljava/io/ObjectStreamField;Ljava/io/ObjectStreamClass;)Ljava/io/ObjectStreamClass$FieldReflector;
+HSPLjava/io/ObjectStreamClass;->getResolveException()Ljava/lang/ClassNotFoundException;
+HSPLjava/io/ObjectStreamClass;->getSerialFields(Ljava/lang/Class;)[Ljava/io/ObjectStreamField;
+HSPLjava/io/ObjectStreamClass;->getSerialVersionUID()J
+HSPLjava/io/ObjectStreamClass;->getSerializableConstructor(Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
+HSPLjava/io/ObjectStreamClass;->getSuperDesc()Ljava/io/ObjectStreamClass;
+HSPLjava/io/ObjectStreamClass;->getVariantFor(Ljava/lang/Class;)Ljava/io/ObjectStreamClass;
+HSPLjava/io/ObjectStreamClass;->hasReadObjectMethod()Z
+HSPLjava/io/ObjectStreamClass;->hasReadResolveMethod()Z
+HSPLjava/io/ObjectStreamClass;->hasWriteObjectData()Z
+HSPLjava/io/ObjectStreamClass;->hasWriteObjectMethod()Z
+HSPLjava/io/ObjectStreamClass;->hasWriteReplaceMethod()Z
+HSPLjava/io/ObjectStreamClass;->initNonProxy(Ljava/io/ObjectStreamClass;Ljava/lang/Class;Ljava/lang/ClassNotFoundException;Ljava/io/ObjectStreamClass;)V
+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;->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;->processQueue(Ljava/lang/ref/ReferenceQueue;Ljava/util/concurrent/ConcurrentMap;)V
+HSPLjava/io/ObjectStreamClass;->readNonProxy(Ljava/io/ObjectInputStream;)V
+HSPLjava/io/ObjectStreamClass;->setObjFieldValues(Ljava/lang/Object;[Ljava/lang/Object;)V
+HSPLjava/io/ObjectStreamClass;->setPrimFieldValues(Ljava/lang/Object;[B)V
+HSPLjava/io/ObjectStreamClass;->writeNonProxy(Ljava/io/ObjectOutputStream;)V
+HSPLjava/io/ObjectStreamField;-><init>(Ljava/lang/String;Ljava/lang/Class;)V
+HSPLjava/io/ObjectStreamField;-><init>(Ljava/lang/String;Ljava/lang/Class;Z)V
+HSPLjava/io/ObjectStreamField;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLjava/io/ObjectStreamField;-><init>(Ljava/lang/reflect/Field;ZZ)V
+HSPLjava/io/ObjectStreamField;->compareTo(Ljava/lang/Object;)I
+HSPLjava/io/ObjectStreamField;->getClassSignature(Ljava/lang/Class;)Ljava/lang/String;
+HSPLjava/io/ObjectStreamField;->getField()Ljava/lang/reflect/Field;
+HSPLjava/io/ObjectStreamField;->getName()Ljava/lang/String;
+HSPLjava/io/ObjectStreamField;->getOffset()I
+HSPLjava/io/ObjectStreamField;->getSignature()Ljava/lang/String;
+HSPLjava/io/ObjectStreamField;->getTypeCode()C
+HSPLjava/io/ObjectStreamField;->getTypeString()Ljava/lang/String;
+HSPLjava/io/ObjectStreamField;->isPrimitive()Z
+HSPLjava/io/ObjectStreamField;->isUnshared()Z
+HSPLjava/io/ObjectStreamField;->setOffset(I)V
+HSPLjava/io/OutputStream;-><init>()V
+HSPLjava/io/OutputStream;->flush()V
+HSPLjava/io/OutputStream;->write([B)V
+HSPLjava/io/OutputStreamWriter;-><init>(Ljava/io/OutputStream;)V
+HSPLjava/io/OutputStreamWriter;-><init>(Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V
+HSPLjava/io/OutputStreamWriter;->close()V
+HSPLjava/io/OutputStreamWriter;->flush()V
+HSPLjava/io/OutputStreamWriter;->flushBuffer()V
+HSPLjava/io/OutputStreamWriter;->write([CII)V
+HSPLjava/io/PrintStream;-><init>(Ljava/io/OutputStream;)V
+HSPLjava/io/PrintStream;-><init>(Ljava/io/OutputStream;Z)V
+HSPLjava/io/PrintStream;-><init>(ZLjava/io/OutputStream;)V
+HSPLjava/io/PrintStream;->append(Ljava/lang/CharSequence;)Ljava/io/PrintStream;
+HSPLjava/io/PrintStream;->append(Ljava/lang/CharSequence;)Ljava/lang/Appendable;
+HSPLjava/io/PrintStream;->close()V
+HSPLjava/io/PrintStream;->ensureOpen()V
+HSPLjava/io/PrintStream;->flush()V
+HSPLjava/io/PrintStream;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
+HSPLjava/io/PrintStream;->getTextOut()Ljava/io/BufferedWriter;
+HSPLjava/io/PrintStream;->print(Ljava/lang/String;)V
+HSPLjava/io/PrintStream;->printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
+HSPLjava/io/PrintStream;->requireNonNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
+HSPLjava/io/PrintStream;->write(Ljava/lang/String;)V
+HSPLjava/io/PrintStream;->write([BII)V
+HSPLjava/io/PrintWriter;-><init>(Ljava/io/Writer;)V
+HSPLjava/io/PrintWriter;-><init>(Ljava/io/Writer;Z)V
+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;
+HSPLjava/io/PrintWriter;->close()V
+HSPLjava/io/PrintWriter;->ensureOpen()V
+HSPLjava/io/PrintWriter;->flush()V
+HSPLjava/io/PrintWriter;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;
+HSPLjava/io/PrintWriter;->newLine()V
+HSPLjava/io/PrintWriter;->print(C)V
+HSPLjava/io/PrintWriter;->print(Ljava/lang/String;)V
+HSPLjava/io/PrintWriter;->printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;
+HSPLjava/io/PrintWriter;->println()V
+HSPLjava/io/PrintWriter;->println(Ljava/lang/Object;)V
+HSPLjava/io/PrintWriter;->println(Ljava/lang/String;)V
+HSPLjava/io/PrintWriter;->write(I)V
+HSPLjava/io/PrintWriter;->write(Ljava/lang/String;)V
+HSPLjava/io/PrintWriter;->write(Ljava/lang/String;II)V
+HSPLjava/io/PrintWriter;->write([CII)V
+HSPLjava/io/PushbackInputStream;-><init>(Ljava/io/InputStream;I)V
+HSPLjava/io/PushbackInputStream;->ensureOpen()V
+HSPLjava/io/PushbackInputStream;->read()I
+HSPLjava/io/PushbackInputStream;->read([BII)I
+HSPLjava/io/PushbackInputStream;->unread([BII)V
+HSPLjava/io/RandomAccessFile;-><init>(Ljava/io/File;Ljava/lang/String;)V
+HSPLjava/io/RandomAccessFile;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/io/RandomAccessFile;->close()V
+HSPLjava/io/RandomAccessFile;->finalize()V
+HSPLjava/io/RandomAccessFile;->getChannel()Ljava/nio/channels/FileChannel;
+HSPLjava/io/RandomAccessFile;->getFD()Ljava/io/FileDescriptor;
+HSPLjava/io/RandomAccessFile;->length()J
+HSPLjava/io/RandomAccessFile;->read()I
+HSPLjava/io/RandomAccessFile;->read([B)I
+HSPLjava/io/RandomAccessFile;->read([BII)I
+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;->seek(J)V
+HSPLjava/io/Reader;-><init>()V
+HSPLjava/io/Reader;-><init>(Ljava/lang/Object;)V
+HSPLjava/io/Reader;->read(Ljava/nio/CharBuffer;)I
+HSPLjava/io/SequenceInputStream;-><init>(Ljava/io/InputStream;Ljava/io/InputStream;)V
+HSPLjava/io/SequenceInputStream;->nextStream()V
+HSPLjava/io/SequenceInputStream;->read()I
+HSPLjava/io/SerialCallbackContext;-><init>(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V
+HSPLjava/io/SerialCallbackContext;->checkAndSetUsed()V
+HSPLjava/io/SerialCallbackContext;->getDesc()Ljava/io/ObjectStreamClass;
+HSPLjava/io/SerialCallbackContext;->getObj()Ljava/lang/Object;
+HSPLjava/io/SerialCallbackContext;->setUsed()V
+HSPLjava/io/StringReader;-><init>(Ljava/lang/String;)V
+HSPLjava/io/StringReader;->close()V
+HSPLjava/io/StringReader;->ensureOpen()V
+HSPLjava/io/StringReader;->read([CII)I
+HSPLjava/io/StringWriter;-><init>()V
+HSPLjava/io/StringWriter;->append(Ljava/lang/CharSequence;)Ljava/io/StringWriter;
+HSPLjava/io/StringWriter;->flush()V
+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
+HSPLjava/io/UnixFileSystem;->hashCode(Ljava/io/File;)I
+HSPLjava/io/UnixFileSystem;->isAbsolute(Ljava/io/File;)Z
+HSPLjava/io/UnixFileSystem;->list(Ljava/io/File;)[Ljava/lang/String;
+HSPLjava/io/UnixFileSystem;->normalize(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/io/UnixFileSystem;->prefixLength(Ljava/lang/String;)I
+HSPLjava/io/UnixFileSystem;->rename(Ljava/io/File;Ljava/io/File;)Z
+HSPLjava/io/UnixFileSystem;->resolve(Ljava/io/File;)Ljava/lang/String;
+HSPLjava/io/UnixFileSystem;->resolve(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/io/UnixFileSystem;->setLastModifiedTime(Ljava/io/File;J)Z
+HSPLjava/io/UnixFileSystem;->setPermission(Ljava/io/File;IZZ)Z
+HSPLjava/io/Writer;-><init>()V
+HSPLjava/io/Writer;-><init>(Ljava/lang/Object;)V
+HSPLjava/io/Writer;->write(Ljava/lang/String;)V
+HSPLjava/lang/AbstractStringBuilder;-><init>(I)V
+HSPLjava/lang/AbstractStringBuilder;->append(C)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->append(D)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->append(F)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->append(I)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->append(J)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/AbstractStringBuilder;)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/CharSequence;)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder;
+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;
+HSPLjava/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;->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;->indexOf(Ljava/lang/String;I)I
+HSPLjava/lang/AbstractStringBuilder;->insert(IC)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
+HSPLjava/lang/AbstractStringBuilder;->newCapacity(I)I
+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;->substring(I)Ljava/lang/String;
+HSPLjava/lang/AbstractStringBuilder;->substring(II)Ljava/lang/String;
+HSPLjava/lang/AssertionError;-><init>(Ljava/lang/Object;)V
+HSPLjava/lang/AssertionError;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/Boolean;-><init>(Z)V
+HSPLjava/lang/Boolean;->booleanValue()Z
+HSPLjava/lang/Boolean;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/Boolean;->getBoolean(Ljava/lang/String;)Z
+HSPLjava/lang/Boolean;->hashCode()I
+HSPLjava/lang/Boolean;->hashCode(Z)I
+HSPLjava/lang/Boolean;->parseBoolean(Ljava/lang/String;)Z
+HSPLjava/lang/Boolean;->toString()Ljava/lang/String;
+HSPLjava/lang/Boolean;->toString(Z)Ljava/lang/String;
+HSPLjava/lang/Boolean;->valueOf(Ljava/lang/String;)Ljava/lang/Boolean;
+HSPLjava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
+HSPLjava/lang/BootClassLoader;->findClass(Ljava/lang/String;)Ljava/lang/Class;
+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;->hashCode()I
+HSPLjava/lang/Byte;->hashCode(B)I
+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;-><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;->codePointCount(Ljava/lang/CharSequence;II)I
+HSPLjava/lang/Character;->digit(CI)I
+HSPLjava/lang/Character;->digit(II)I
+HSPLjava/lang/Character;->forDigit(II)C
+HSPLjava/lang/Character;->getDirectionality(C)B
+HSPLjava/lang/Character;->getDirectionality(I)B
+HSPLjava/lang/Character;->getNumericValue(C)I
+HSPLjava/lang/Character;->getNumericValue(I)I
+HSPLjava/lang/Character;->getType(I)I
+HSPLjava/lang/Character;->hashCode()I
+HSPLjava/lang/Character;->hashCode(C)I
+HSPLjava/lang/Character;->isBmpCodePoint(I)Z
+HSPLjava/lang/Character;->isDigit(C)Z
+HSPLjava/lang/Character;->isDigit(I)Z
+HSPLjava/lang/Character;->isHighSurrogate(C)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
+HSPLjava/lang/Character;->isUpperCase(C)Z
+HSPLjava/lang/Character;->isUpperCase(I)Z
+HSPLjava/lang/Character;->isWhitespace(C)Z
+HSPLjava/lang/Character;->isWhitespace(I)Z
+HSPLjava/lang/Character;->offsetByCodePoints(Ljava/lang/CharSequence;II)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;->toUpperCase(C)C
+HSPLjava/lang/Character;->toUpperCase(I)I
+HSPLjava/lang/Character;->valueOf(C)Ljava/lang/Character;
+HSPLjava/lang/Class;->asSubclass(Ljava/lang/Class;)Ljava/lang/Class;
+HSPLjava/lang/Class;->cast(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/lang/Class;->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;->getAnnotation(Ljava/lang/Class;)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;
+HSPLjava/lang/Class;->getConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
+HSPLjava/lang/Class;->getConstructor0([Ljava/lang/Class;I)Ljava/lang/reflect/Constructor;
+HSPLjava/lang/Class;->getDeclaredConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
+HSPLjava/lang/Class;->getDeclaredConstructors()[Ljava/lang/reflect/Constructor;
+HSPLjava/lang/Class;->getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
+HSPLjava/lang/Class;->getDeclaredMethods()[Ljava/lang/reflect/Method;
+HSPLjava/lang/Class;->getEnclosingConstructor()Ljava/lang/reflect/Constructor;
+HSPLjava/lang/Class;->getEnclosingMethod()Ljava/lang/reflect/Method;
+HSPLjava/lang/Class;->getEnumConstantsShared()[Ljava/lang/Object;
+HSPLjava/lang/Class;->getField(Ljava/lang/String;)Ljava/lang/reflect/Field;
+HSPLjava/lang/Class;->getFields()[Ljava/lang/reflect/Field;
+HSPLjava/lang/Class;->getGenericSuperclass()Ljava/lang/reflect/Type;
+HSPLjava/lang/Class;->getInterfaces()[Ljava/lang/Class;
+HSPLjava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
+HSPLjava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;Z)Ljava/lang/reflect/Method;
+HSPLjava/lang/Class;->getMethods()[Ljava/lang/reflect/Method;
+HSPLjava/lang/Class;->getModifiers()I
+HSPLjava/lang/Class;->getName()Ljava/lang/String;
+HSPLjava/lang/Class;->getPackage()Ljava/lang/Package;
+HSPLjava/lang/Class;->getPackageName$()Ljava/lang/String;
+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
+HSPLjava/lang/Class;->getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;
+HSPLjava/lang/Class;->getSignatureAttribute()Ljava/lang/String;
+HSPLjava/lang/Class;->getSimpleName()Ljava/lang/String;
+HSPLjava/lang/Class;->getSuperclass()Ljava/lang/Class;
+HSPLjava/lang/Class;->getTypeParameters()[Ljava/lang/reflect/TypeVariable;
+HSPLjava/lang/Class;->isAnnotation()Z
+HSPLjava/lang/Class;->isAnnotationPresent(Ljava/lang/Class;)Z
+HSPLjava/lang/Class;->isArray()Z
+HSPLjava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z
+HSPLjava/lang/Class;->isEnum()Z
+HSPLjava/lang/Class;->isInstance(Ljava/lang/Object;)Z
+HSPLjava/lang/Class;->isInterface()Z
+HSPLjava/lang/Class;->isLocalClass()Z
+HSPLjava/lang/Class;->isLocalOrAnonymousClass()Z
+HSPLjava/lang/Class;->isMemberClass()Z
+HSPLjava/lang/Class;->isPrimitive()Z
+HSPLjava/lang/Class;->resolveName(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/lang/Class;->toString()Ljava/lang/String;
+HSPLjava/lang/ClassLoader;-><init>()V
+HSPLjava/lang/ClassLoader;-><init>(Ljava/lang/ClassLoader;)V
+HSPLjava/lang/ClassLoader;-><init>(Ljava/lang/Void;Ljava/lang/ClassLoader;)V
+HSPLjava/lang/ClassLoader;->checkCreateClassLoader()Ljava/lang/Void;
+HSPLjava/lang/ClassLoader;->definePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;)Ljava/lang/Package;
+HSPLjava/lang/ClassLoader;->findLoadedClass(Ljava/lang/String;)Ljava/lang/Class;
+HSPLjava/lang/ClassLoader;->getPackage(Ljava/lang/String;)Ljava/lang/Package;
+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;->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;
+HSPLjava/lang/Daemons$Daemon;->isRunning()Z
+HSPLjava/lang/Daemons$Daemon;->run()V
+HSPLjava/lang/Daemons$Daemon;->startInternal()V
+HSPLjava/lang/Daemons$Daemon;->startPostZygoteFork()V
+HSPLjava/lang/Daemons$FinalizerDaemon;->-get0()Ljava/lang/Daemons$FinalizerDaemon;
+HSPLjava/lang/Daemons$FinalizerDaemon;->-get2(Ljava/lang/Daemons$FinalizerDaemon;)Ljava/util/concurrent/atomic/AtomicInteger;
+HSPLjava/lang/Daemons$FinalizerDaemon;->doFinalize(Ljava/lang/ref/FinalizerReference;)V
+HSPLjava/lang/Daemons$FinalizerDaemon;->runInternal()V
+HSPLjava/lang/Daemons$FinalizerWatchdogDaemon;->-get0()Ljava/lang/Daemons$FinalizerWatchdogDaemon;
+HSPLjava/lang/Daemons$FinalizerWatchdogDaemon;->-wrap0(Ljava/lang/Daemons$FinalizerWatchdogDaemon;)V
+HSPLjava/lang/Daemons$FinalizerWatchdogDaemon;->-wrap1(Ljava/lang/Daemons$FinalizerWatchdogDaemon;)V
+HSPLjava/lang/Daemons$FinalizerWatchdogDaemon;->goToSleep()V
+HSPLjava/lang/Daemons$FinalizerWatchdogDaemon;->runInternal()V
+HSPLjava/lang/Daemons$FinalizerWatchdogDaemon;->sleepFor(J)Z
+HSPLjava/lang/Daemons$FinalizerWatchdogDaemon;->sleepUntilNeeded()Z
+HSPLjava/lang/Daemons$FinalizerWatchdogDaemon;->waitForFinalization()Ljava/lang/Object;
+HSPLjava/lang/Daemons$FinalizerWatchdogDaemon;->wakeUp()V
+HSPLjava/lang/Daemons$HeapTaskDaemon;->-get0()Ljava/lang/Daemons$HeapTaskDaemon;
+HSPLjava/lang/Daemons$HeapTaskDaemon;->runInternal()V
+HSPLjava/lang/Daemons$ReferenceQueueDaemon;->-get0()Ljava/lang/Daemons$ReferenceQueueDaemon;
+HSPLjava/lang/Daemons$ReferenceQueueDaemon;->runInternal()V
+HSPLjava/lang/Daemons;->startPostZygoteFork()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;->floatValue()F
+HSPLjava/lang/Double;->isInfinite(D)Z
+HSPLjava/lang/Double;->isNaN(D)Z
+HSPLjava/lang/Double;->parseDouble(Ljava/lang/String;)D
+HSPLjava/lang/Double;->toString()Ljava/lang/String;
+HSPLjava/lang/Double;->toString(D)Ljava/lang/String;
+HSPLjava/lang/Double;->valueOf(D)Ljava/lang/Double;
+HSPLjava/lang/Double;->valueOf(Ljava/lang/String;)Ljava/lang/Double;
+HSPLjava/lang/Enum$1;->create(Ljava/lang/Class;)[Ljava/lang/Object;
+HSPLjava/lang/Enum$1;->create(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/lang/Enum;-><init>(Ljava/lang/String;I)V
+HSPLjava/lang/Enum;->compareTo(Ljava/lang/Enum;)I
+HSPLjava/lang/Enum;->compareTo(Ljava/lang/Object;)I
+HSPLjava/lang/Enum;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/Enum;->getDeclaringClass()Ljava/lang/Class;
+HSPLjava/lang/Enum;->getSharedConstants(Ljava/lang/Class;)[Ljava/lang/Enum;
+HSPLjava/lang/Enum;->hashCode()I
+HSPLjava/lang/Enum;->name()Ljava/lang/String;
+HSPLjava/lang/Enum;->ordinal()I
+HSPLjava/lang/Enum;->toString()Ljava/lang/String;
+HSPLjava/lang/Enum;->valueOf(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
+HSPLjava/lang/Error;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/Exception;-><init>()V
+HSPLjava/lang/Exception;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/Exception;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)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
+HSPLjava/lang/Float;->doubleValue()D
+HSPLjava/lang/Float;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/Float;->floatToIntBits(F)I
+HSPLjava/lang/Float;->floatValue()F
+HSPLjava/lang/Float;->hashCode()I
+HSPLjava/lang/Float;->hashCode(F)I
+HSPLjava/lang/Float;->isInfinite(F)Z
+HSPLjava/lang/Float;->isNaN(F)Z
+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;
+HSPLjava/lang/Float;->valueOf(Ljava/lang/String;)Ljava/lang/Float;
+HSPLjava/lang/IllegalAccessException;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/IllegalStateException;-><init>()V
+HSPLjava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/IncompatibleClassChangeError;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/InheritableThreadLocal;->createMap(Ljava/lang/Thread;Ljava/lang/Object;)V
+HSPLjava/lang/InheritableThreadLocal;->getMap(Ljava/lang/Thread;)Ljava/lang/ThreadLocal$ThreadLocalMap;
+HSPLjava/lang/Integer;-><init>(I)V
+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;->formatUnsignedInt(II[CII)I
+HSPLjava/lang/Integer;->getChars(II[C)V
+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
+HSPLjava/lang/Integer;->hashCode(I)I
+HSPLjava/lang/Integer;->intValue()I
+HSPLjava/lang/Integer;->longValue()J
+HSPLjava/lang/Integer;->parseInt(Ljava/lang/String;)I
+HSPLjava/lang/Integer;->parseInt(Ljava/lang/String;I)I
+HSPLjava/lang/Integer;->stringSize(I)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;
+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
+HSPLjava/lang/Iterable;->forEach(Ljava/util/function/Consumer;)V
+HSPLjava/lang/Iterable;->iterator()Ljava/util/Iterator;
+HSPLjava/lang/LinkageError;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/Long;-><init>(J)V
+HSPLjava/lang/Long;->compareTo(Ljava/lang/Long;)I
+HSPLjava/lang/Long;->compareTo(Ljava/lang/Object;)I
+HSPLjava/lang/Long;->compareUnsigned(JJ)I
+HSPLjava/lang/Long;->decode(Ljava/lang/String;)Ljava/lang/Long;
+HSPLjava/lang/Long;->doubleValue()D
+HSPLjava/lang/Long;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/Long;->formatUnsignedLong(JI[CII)I
+HSPLjava/lang/Long;->getChars(JI[C)V
+HSPLjava/lang/Long;->hashCode()I
+HSPLjava/lang/Long;->hashCode(J)I
+HSPLjava/lang/Long;->intValue()I
+HSPLjava/lang/Long;->longValue()J
+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;->stringSize(J)I
+HSPLjava/lang/Long;->toHexString(J)Ljava/lang/String;
+HSPLjava/lang/Long;->toString()Ljava/lang/String;
+HSPLjava/lang/Long;->toString(J)Ljava/lang/String;
+HSPLjava/lang/Long;->toString(JI)Ljava/lang/String;
+HSPLjava/lang/Long;->toUnsignedString0(JI)Ljava/lang/String;
+HSPLjava/lang/Long;->valueOf(J)Ljava/lang/Long;
+HSPLjava/lang/Long;->valueOf(Ljava/lang/String;)Ljava/lang/Long;
+HSPLjava/lang/Long;->valueOf(Ljava/lang/String;I)Ljava/lang/Long;
+HSPLjava/lang/Math;->abs(D)D
+HSPLjava/lang/Math;->abs(F)F
+HSPLjava/lang/Math;->addExact(JJ)J
+HSPLjava/lang/Math;->floorDiv(JJ)J
+HSPLjava/lang/Math;->floorMod(JJ)J
+HSPLjava/lang/Math;->getExponent(D)I
+HSPLjava/lang/Math;->getExponent(F)I
+HSPLjava/lang/Math;->max(DD)D
+HSPLjava/lang/Math;->max(FF)F
+HSPLjava/lang/Math;->max(II)I
+HSPLjava/lang/Math;->max(JJ)J
+HSPLjava/lang/Math;->min(DD)D
+HSPLjava/lang/Math;->min(FF)F
+HSPLjava/lang/Math;->min(II)I
+HSPLjava/lang/Math;->min(JJ)J
+HSPLjava/lang/Math;->powerOfTwoF(I)F
+HSPLjava/lang/Math;->random()D
+HSPLjava/lang/Math;->randomLongInternal()J
+HSPLjava/lang/Math;->round(D)J
+HSPLjava/lang/Math;->round(F)I
+HSPLjava/lang/Math;->setRandomSeedInternal(J)V
+HSPLjava/lang/Math;->toDegrees(D)D
+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
+HSPLjava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/Number;-><init>()V
+HSPLjava/lang/NumberFormatException;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/NumberFormatException;->forInputString(Ljava/lang/String;)Ljava/lang/NumberFormatException;
+HSPLjava/lang/Object;-><init>()V
+HSPLjava/lang/Object;->clone()Ljava/lang/Object;
+HSPLjava/lang/Object;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/Object;->finalize()V
+HSPLjava/lang/Object;->getClass()Ljava/lang/Class;
+HSPLjava/lang/Object;->hashCode()I
+HSPLjava/lang/Object;->identityHashCode(Ljava/lang/Object;)I
+HSPLjava/lang/Object;->toString()Ljava/lang/String;
+HSPLjava/lang/Object;->wait(J)V
+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/ReflectiveOperationException;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/ReflectiveOperationException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+HSPLjava/lang/Runtime;->addShutdownHook(Ljava/lang/Thread;)V
+HSPLjava/lang/Runtime;->availableProcessors()I
+HSPLjava/lang/Runtime;->doLoad(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/String;
+HSPLjava/lang/Runtime;->getLibPaths()[Ljava/lang/String;
+HSPLjava/lang/Runtime;->getRuntime()Ljava/lang/Runtime;
+HSPLjava/lang/Runtime;->load0(Ljava/lang/Class;Ljava/lang/String;)V
+HSPLjava/lang/Runtime;->loadLibrary0(Ljava/lang/ClassLoader;Ljava/lang/String;)V
+HSPLjava/lang/RuntimeException;-><init>()V
+HSPLjava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
+HSPLjava/lang/RuntimePermission;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/SecurityException;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/StackTraceElement;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/StackTraceElement;->getClassName()Ljava/lang/String;
+HSPLjava/lang/StackTraceElement;->getFileName()Ljava/lang/String;
+HSPLjava/lang/StackTraceElement;->getLineNumber()I
+HSPLjava/lang/StackTraceElement;->getMethodName()Ljava/lang/String;
+HSPLjava/lang/StackTraceElement;->isNativeMethod()Z
+HSPLjava/lang/StackTraceElement;->toString()Ljava/lang/String;
+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
+HSPLjava/lang/String;->codePointCount(II)I
+HSPLjava/lang/String;->compareTo(Ljava/lang/Object;)I
+HSPLjava/lang/String;->compareToIgnoreCase(Ljava/lang/String;)I
+HSPLjava/lang/String;->contains(Ljava/lang/CharSequence;)Z
+HSPLjava/lang/String;->contentEquals(Ljava/lang/CharSequence;)Z
+HSPLjava/lang/String;->endsWith(Ljava/lang/String;)Z
+HSPLjava/lang/String;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z
+HSPLjava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
+HSPLjava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
+HSPLjava/lang/String;->getBytes()[B
+HSPLjava/lang/String;->getBytes(Ljava/lang/String;)[B
+HSPLjava/lang/String;->getBytes(Ljava/nio/charset/Charset;)[B
+HSPLjava/lang/String;->getChars(II[CI)V
+HSPLjava/lang/String;->getChars([CI)V
+HSPLjava/lang/String;->hashCode()I
+HSPLjava/lang/String;->indexOf(Ljava/lang/String;)I
+HSPLjava/lang/String;->indexOf(Ljava/lang/String;I)I
+HSPLjava/lang/String;->indexOf(Ljava/lang/String;Ljava/lang/String;I)I
+HSPLjava/lang/String;->indexOf([CII[CIII)I
+HSPLjava/lang/String;->isEmpty()Z
+HSPLjava/lang/String;->join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;
+HSPLjava/lang/String;->lastIndexOf(I)I
+HSPLjava/lang/String;->lastIndexOf(II)I
+HSPLjava/lang/String;->lastIndexOf(Ljava/lang/String;)I
+HSPLjava/lang/String;->lastIndexOf(Ljava/lang/String;I)I
+HSPLjava/lang/String;->lastIndexOf(Ljava/lang/String;Ljava/lang/String;I)I
+HSPLjava/lang/String;->lastIndexOf([CII[CIII)I
+HSPLjava/lang/String;->length()I
+HSPLjava/lang/String;->matches(Ljava/lang/String;)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;
+HSPLjava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+HSPLjava/lang/String;->replaceAll(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/lang/String;->replaceFirst(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
+HSPLjava/lang/String;->split(Ljava/lang/String;I)[Ljava/lang/String;
+HSPLjava/lang/String;->startsWith(Ljava/lang/String;)Z
+HSPLjava/lang/String;->startsWith(Ljava/lang/String;I)Z
+HSPLjava/lang/String;->subSequence(II)Ljava/lang/CharSequence;
+HSPLjava/lang/String;->substring(I)Ljava/lang/String;
+HSPLjava/lang/String;->substring(II)Ljava/lang/String;
+HSPLjava/lang/String;->toLowerCase()Ljava/lang/String;
+HSPLjava/lang/String;->toLowerCase(Ljava/util/Locale;)Ljava/lang/String;
+HSPLjava/lang/String;->toString()Ljava/lang/String;
+HSPLjava/lang/String;->toUpperCase()Ljava/lang/String;
+HSPLjava/lang/String;->toUpperCase(Ljava/util/Locale;)Ljava/lang/String;
+HSPLjava/lang/String;->trim()Ljava/lang/String;
+HSPLjava/lang/String;->valueOf(C)Ljava/lang/String;
+HSPLjava/lang/String;->valueOf(D)Ljava/lang/String;
+HSPLjava/lang/String;->valueOf(F)Ljava/lang/String;
+HSPLjava/lang/String;->valueOf(I)Ljava/lang/String;
+HSPLjava/lang/String;->valueOf(J)Ljava/lang/String;
+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
+HSPLjava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
+HSPLjava/lang/StringBuffer;->append(I)Ljava/lang/StringBuffer;
+HSPLjava/lang/StringBuffer;->append(J)Ljava/lang/StringBuffer;
+HSPLjava/lang/StringBuffer;->append(Ljava/lang/AbstractStringBuilder;)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/StringBuffer;->append(Ljava/lang/AbstractStringBuilder;)Ljava/lang/StringBuffer;
+HSPLjava/lang/StringBuffer;->append(Ljava/lang/CharSequence;)Ljava/lang/StringBuffer;
+HSPLjava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
+HSPLjava/lang/StringBuffer;->append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;
+HSPLjava/lang/StringBuffer;->append([CII)Ljava/lang/StringBuffer;
+HSPLjava/lang/StringBuffer;->charAt(I)C
+HSPLjava/lang/StringBuffer;->codePointAt(I)I
+HSPLjava/lang/StringBuffer;->getChars(II[CI)V
+HSPLjava/lang/StringBuffer;->length()I
+HSPLjava/lang/StringBuffer;->setLength(I)V
+HSPLjava/lang/StringBuffer;->toString()Ljava/lang/String;
+HSPLjava/lang/StringBuilder;-><init>()V
+HSPLjava/lang/StringBuilder;-><init>(I)V
+HSPLjava/lang/StringBuilder;-><init>(Ljava/lang/CharSequence;)V
+HSPLjava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/StringBuilder;->append(C)Ljava/lang/Appendable;
+HSPLjava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->append(D)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->append(F)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->append(Ljava/lang/CharSequence;)Ljava/lang/Appendable;
+HSPLjava/lang/StringBuilder;->append(Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->append(Ljava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/StringBuilder;->append(Ljava/lang/CharSequence;II)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->append(Z)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->append([C)Ljava/lang/StringBuilder;
+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;->delete(II)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->deleteCharAt(I)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->ensureCapacity(I)V
+HSPLjava/lang/StringBuilder;->getChars(II[CI)V
+HSPLjava/lang/StringBuilder;->indexOf(Ljava/lang/String;I)I
+HSPLjava/lang/StringBuilder;->insert(IC)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->insert(ILjava/lang/String;)Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->lastIndexOf(Ljava/lang/String;I)I
+HSPLjava/lang/StringBuilder;->length()I
+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;->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([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;
+HSPLjava/lang/StringFactory;->newStringFromBytes([BLjava/lang/String;)Ljava/lang/String;
+HSPLjava/lang/StringFactory;->newStringFromBytes([BLjava/nio/charset/Charset;)Ljava/lang/String;
+HSPLjava/lang/StringFactory;->newStringFromChars([C)Ljava/lang/String;
+HSPLjava/lang/StringFactory;->newStringFromChars([CII)Ljava/lang/String;
+HSPLjava/lang/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
+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;->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
+HSPLjava/lang/Thread;->getContextClassLoader()Ljava/lang/ClassLoader;
+HSPLjava/lang/Thread;->getDefaultUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;
+HSPLjava/lang/Thread;->getId()J
+HSPLjava/lang/Thread;->getName()Ljava/lang/String;
+HSPLjava/lang/Thread;->getPriority()I
+HSPLjava/lang/Thread;->getStackTrace()[Ljava/lang/StackTraceElement;
+HSPLjava/lang/Thread;->getState()Ljava/lang/Thread$State;
+HSPLjava/lang/Thread;->getThreadGroup()Ljava/lang/ThreadGroup;
+HSPLjava/lang/Thread;->getUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;
+HSPLjava/lang/Thread;->holdsLock(Ljava/lang/Object;)Z
+HSPLjava/lang/Thread;->init(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;J)V
+HSPLjava/lang/Thread;->init2(Ljava/lang/Thread;)V
+HSPLjava/lang/Thread;->interrupt()V
+HSPLjava/lang/Thread;->isAlive()Z
+HSPLjava/lang/Thread;->isDaemon()Z
+HSPLjava/lang/Thread;->join()V
+HSPLjava/lang/Thread;->join(J)V
+HSPLjava/lang/Thread;->nextThreadID()J
+HSPLjava/lang/Thread;->nextThreadNum()I
+HSPLjava/lang/Thread;->parkFor$(J)V
+HSPLjava/lang/Thread;->run()V
+HSPLjava/lang/Thread;->setContextClassLoader(Ljava/lang/ClassLoader;)V
+HSPLjava/lang/Thread;->setDaemon(Z)V
+HSPLjava/lang/Thread;->setDefaultUncaughtExceptionHandler(Ljava/lang/Thread$UncaughtExceptionHandler;)V
+HSPLjava/lang/Thread;->setName(Ljava/lang/String;)V
+HSPLjava/lang/Thread;->setPriority(I)V
+HSPLjava/lang/Thread;->setUncaughtExceptionHandler(Ljava/lang/Thread$UncaughtExceptionHandler;)V
+HSPLjava/lang/Thread;->setUncaughtExceptionPreHandler(Ljava/lang/Thread$UncaughtExceptionHandler;)V
+HSPLjava/lang/Thread;->sleep(J)V
+HSPLjava/lang/Thread;->sleep(JI)V
+HSPLjava/lang/Thread;->start()V
+HSPLjava/lang/Thread;->unpark$()V
+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;
+HSPLjava/lang/ThreadGroup;->getMaxPriority()I
+HSPLjava/lang/ThreadGroup;->remove(Ljava/lang/Thread;)V
+HSPLjava/lang/ThreadGroup;->threadTerminated(Ljava/lang/Thread;)V
+HSPLjava/lang/ThreadLocal$SuppliedThreadLocal;-><init>(Ljava/util/function/Supplier;)V
+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;->-wrap0(Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->-wrap1(Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal;)V
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->-wrap2(Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal;Ljava/lang/Object;)V
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;-><init>(Ljava/lang/ThreadLocal;Ljava/lang/Object;)V
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->cleanSomeSlots(II)Z
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->expungeStaleEntries()V
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->expungeStaleEntry(I)I
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->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
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->rehash()V
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->remove(Ljava/lang/ThreadLocal;)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;->-get0(Ljava/lang/ThreadLocal;)I
+HSPLjava/lang/ThreadLocal;-><init>()V
+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;
+HSPLjava/lang/ThreadLocal;->initialValue()Ljava/lang/Object;
+HSPLjava/lang/ThreadLocal;->nextHashCode()I
+HSPLjava/lang/ThreadLocal;->remove()V
+HSPLjava/lang/ThreadLocal;->set(Ljava/lang/Object;)V
+HSPLjava/lang/ThreadLocal;->setInitialValue()Ljava/lang/Object;
+HSPLjava/lang/ThreadLocal;->withInitial(Ljava/util/function/Supplier;)Ljava/lang/ThreadLocal;
+HSPLjava/lang/Throwable$PrintStreamOrWriter;-><init>()V
+HSPLjava/lang/Throwable$PrintStreamOrWriter;-><init>(Ljava/lang/Throwable$PrintStreamOrWriter;)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
+HSPLjava/lang/Throwable;-><init>()V
+HSPLjava/lang/Throwable;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/Throwable;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+HSPLjava/lang/Throwable;-><init>(Ljava/lang/Throwable;)V
+HSPLjava/lang/Throwable;->fillInStackTrace()Ljava/lang/Throwable;
+HSPLjava/lang/Throwable;->getCause()Ljava/lang/Throwable;
+HSPLjava/lang/Throwable;->getLocalizedMessage()Ljava/lang/String;
+HSPLjava/lang/Throwable;->getMessage()Ljava/lang/String;
+HSPLjava/lang/Throwable;->getOurStackTrace()[Ljava/lang/StackTraceElement;
+HSPLjava/lang/Throwable;->getStackTrace()[Ljava/lang/StackTraceElement;
+HSPLjava/lang/Throwable;->getSuppressed()[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
+HSPLjava/lang/Throwable;->setStackTrace([Ljava/lang/StackTraceElement;)V
+HSPLjava/lang/Throwable;->toString()Ljava/lang/String;
+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;
+HSPLjava/lang/ref/FinalizerReference;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
+HSPLjava/lang/ref/FinalizerReference;->add(Ljava/lang/Object;)V
+HSPLjava/lang/ref/FinalizerReference;->clear()V
+HSPLjava/lang/ref/FinalizerReference;->get()Ljava/lang/Object;
+HSPLjava/lang/ref/FinalizerReference;->remove(Ljava/lang/ref/FinalizerReference;)V
+HSPLjava/lang/ref/PhantomReference;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
+HSPLjava/lang/ref/Reference;-><init>(Ljava/lang/Object;)V
+HSPLjava/lang/ref/Reference;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
+HSPLjava/lang/ref/Reference;->clear()V
+HSPLjava/lang/ref/Reference;->get()Ljava/lang/Object;
+HSPLjava/lang/ref/Reference;->isEnqueued()Z
+HSPLjava/lang/ref/ReferenceQueue;-><init>()V
+HSPLjava/lang/ref/ReferenceQueue;->add(Ljava/lang/ref/Reference;)V
+HSPLjava/lang/ref/ReferenceQueue;->enqueueLocked(Ljava/lang/ref/Reference;)Z
+HSPLjava/lang/ref/ReferenceQueue;->enqueuePending(Ljava/lang/ref/Reference;)V
+HSPLjava/lang/ref/ReferenceQueue;->poll()Ljava/lang/ref/Reference;
+HSPLjava/lang/ref/ReferenceQueue;->reallyPollLocked()Ljava/lang/ref/Reference;
+HSPLjava/lang/ref/ReferenceQueue;->remove()Ljava/lang/ref/Reference;
+HSPLjava/lang/ref/ReferenceQueue;->remove(J)Ljava/lang/ref/Reference;
+HSPLjava/lang/ref/SoftReference;-><init>(Ljava/lang/Object;)V
+HSPLjava/lang/ref/SoftReference;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
+HSPLjava/lang/ref/SoftReference;->get()Ljava/lang/Object;
+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;->isAccessible()Z
+HSPLjava/lang/reflect/AccessibleObject;->setAccessible(Z)V
+HSPLjava/lang/reflect/AccessibleObject;->setAccessible0(Ljava/lang/reflect/AccessibleObject;Z)V
+HSPLjava/lang/reflect/Array;->get(Ljava/lang/Object;I)Ljava/lang/Object;
+HSPLjava/lang/reflect/Array;->getLength(Ljava/lang/Object;)I
+HSPLjava/lang/reflect/Array;->newArray(Ljava/lang/Class;I)Ljava/lang/Object;
+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;->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
+HSPLjava/lang/reflect/Constructor;->getName()Ljava/lang/String;
+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;-><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;
+HSPLjava/lang/reflect/Executable;->getDeclaredAnnotations()[Ljava/lang/annotation/Annotation;
+HSPLjava/lang/reflect/Executable;->getDeclaringClassInternal()Ljava/lang/Class;
+HSPLjava/lang/reflect/Executable;->getModifiersInternal()I
+HSPLjava/lang/reflect/Executable;->isAnnotationPresent(Ljava/lang/Class;)Z
+HSPLjava/lang/reflect/Executable;->isSynthetic()Z
+HSPLjava/lang/reflect/Field;->getModifiers()I
+HSPLjava/lang/reflect/Field;->getName()Ljava/lang/String;
+HSPLjava/lang/reflect/Field;->getOffset()I
+HSPLjava/lang/reflect/Field;->getType()Ljava/lang/Class;
+HSPLjava/lang/reflect/Field;->isAnnotationPresent(Ljava/lang/Class;)Z
+HSPLjava/lang/reflect/Field;->isSynthetic()Z
+HSPLjava/lang/reflect/GenericArrayType;->getGenericComponentType()Ljava/lang/reflect/Type;
+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;->getModifiers()I
+HSPLjava/lang/reflect/Method;->getName()Ljava/lang/String;
+HSPLjava/lang/reflect/Method;->getParameterTypes()[Ljava/lang/Class;
+HSPLjava/lang/reflect/Method;->getReturnType()Ljava/lang/Class;
+HSPLjava/lang/reflect/Method;->isSynthetic()Z
+HSPLjava/lang/reflect/Modifier;->isFinal(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;->isVolatile(I)Z
+HSPLjava/lang/reflect/Proxy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLjava/lang/reflect/Proxy$1;->compare(Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)I
+HSPLjava/lang/reflect/Proxy$Key1;-><init>(Ljava/lang/Class;)V
+HSPLjava/lang/reflect/Proxy$Key1;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/reflect/Proxy$Key1;->hashCode()I
+HSPLjava/lang/reflect/Proxy$Key2;-><init>(Ljava/lang/Class;Ljava/lang/Class;)V
+HSPLjava/lang/reflect/Proxy$Key2;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/reflect/Proxy$Key2;->hashCode()I
+HSPLjava/lang/reflect/Proxy$KeyFactory;->apply(Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Object;
+HSPLjava/lang/reflect/Proxy$KeyFactory;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/lang/reflect/Proxy$ProxyClassFactory;->apply(Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class;
+HSPLjava/lang/reflect/Proxy$ProxyClassFactory;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/lang/reflect/Proxy;->-get0()Ljava/util/Comparator;
+HSPLjava/lang/reflect/Proxy;->-wrap0(Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/ClassLoader;[Ljava/lang/reflect/Method;[[Ljava/lang/Class;)Ljava/lang/Class;
+HSPLjava/lang/reflect/Proxy;->-wrap1(Ljava/util/List;)Ljava/util/List;
+HSPLjava/lang/reflect/Proxy;->-wrap2([Ljava/lang/Class;)Ljava/util/List;
+HSPLjava/lang/reflect/Proxy;->-wrap3(Ljava/util/List;)V
+HSPLjava/lang/reflect/Proxy;->deduplicateAndGetExceptions(Ljava/util/List;)Ljava/util/List;
+HSPLjava/lang/reflect/Proxy;->getInvocationHandler(Ljava/lang/Object;)Ljava/lang/reflect/InvocationHandler;
+HSPLjava/lang/reflect/Proxy;->getMethods([Ljava/lang/Class;)Ljava/util/List;
+HSPLjava/lang/reflect/Proxy;->getMethodsRecursive([Ljava/lang/Class;Ljava/util/List;)V
+HSPLjava/lang/reflect/Proxy;->getProxyClass0(Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class;
+HSPLjava/lang/reflect/Proxy;->intersectExceptions([Ljava/lang/Class;[Ljava/lang/Class;)[Ljava/lang/Class;
+HSPLjava/lang/reflect/Proxy;->invoke(Ljava/lang/reflect/Proxy;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/lang/reflect/Proxy;->isProxyClass(Ljava/lang/Class;)Z
+HSPLjava/lang/reflect/Proxy;->newProxyInstance(Ljava/lang/ClassLoader;[Ljava/lang/Class;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object;
+HSPLjava/lang/reflect/Proxy;->validateReturnTypes(Ljava/util/List;)V
+HSPLjava/lang/reflect/WeakCache$CacheKey;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
+HSPLjava/lang/reflect/WeakCache$CacheKey;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/reflect/WeakCache$CacheKey;->hashCode()I
+HSPLjava/lang/reflect/WeakCache$CacheKey;->valueOf(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)Ljava/lang/Object;
+HSPLjava/lang/reflect/WeakCache$CacheValue;-><init>(Ljava/lang/Object;)V
+HSPLjava/lang/reflect/WeakCache$CacheValue;->hashCode()I
+HSPLjava/lang/reflect/WeakCache$Factory;-><init>(Ljava/lang/reflect/WeakCache;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentMap;)V
+HSPLjava/lang/reflect/WeakCache$Factory;->get()Ljava/lang/Object;
+HSPLjava/lang/reflect/WeakCache$LookupValue;-><init>(Ljava/lang/Object;)V
+HSPLjava/lang/reflect/WeakCache$LookupValue;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/reflect/WeakCache$LookupValue;->hashCode()I
+HSPLjava/lang/reflect/WeakCache;->-get0(Ljava/lang/reflect/WeakCache;)Ljava/util/concurrent/ConcurrentMap;
+HSPLjava/lang/reflect/WeakCache;->-get1(Ljava/lang/reflect/WeakCache;)Ljava/util/function/BiFunction;
+HSPLjava/lang/reflect/WeakCache;->containsValue(Ljava/lang/Object;)Z
+HSPLjava/lang/reflect/WeakCache;->expungeStaleEntries()V
+HSPLjava/lang/reflect/WeakCache;->get(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/math/BigDecimal;-><init>(I)V
+HSPLjava/math/BigDecimal;-><init>(II)V
+HSPLjava/math/BigDecimal;-><init>(Ljava/math/BigInteger;I)V
+HSPLjava/math/BigDecimal;->bitLength(I)I
+HSPLjava/math/BigDecimal;->bitLength(J)I
+HSPLjava/math/BigDecimal;->setUnscaledValue(Ljava/math/BigInteger;)V
+HSPLjava/math/BigInt;-><init>()V
+HSPLjava/math/BigInt;->addition(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;->gcd(Ljava/math/BigInt;Ljava/math/BigInt;)Ljava/math/BigInt;
+HSPLjava/math/BigInt;->getNativeBIGNUM()J
+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;
+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;->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
+HSPLjava/math/BigInteger;-><init>(IJ)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
+HSPLjava/math/BigInteger;-><init>(Ljava/math/BigInt;)V
+HSPLjava/math/BigInteger;-><init>([B)V
+HSPLjava/math/BigInteger;->abs()Ljava/math/BigInteger;
+HSPLjava/math/BigInteger;->add(Ljava/math/BigInteger;)Ljava/math/BigInteger;
+HSPLjava/math/BigInteger;->bitLength()I
+HSPLjava/math/BigInteger;->compareTo(Ljava/math/BigInteger;)I
+HSPLjava/math/BigInteger;->divide(Ljava/math/BigInteger;)Ljava/math/BigInteger;
+HSPLjava/math/BigInteger;->doubleValue()D
+HSPLjava/math/BigInteger;->equals(Ljava/lang/Object;)Z
+HSPLjava/math/BigInteger;->gcd(Ljava/math/BigInteger;)Ljava/math/BigInteger;
+HSPLjava/math/BigInteger;->getBigInt()Ljava/math/BigInt;
+HSPLjava/math/BigInteger;->getFirstNonzeroDigit()I
+HSPLjava/math/BigInteger;->hashCode()I
+HSPLjava/math/BigInteger;->intValue()I
+HSPLjava/math/BigInteger;->longValue()J
+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;->prepareJavaRepresentation()V
+HSPLjava/math/BigInteger;->setBigInt(Ljava/math/BigInt;)V
+HSPLjava/math/BigInteger;->setJavaRepresentation(II[I)V
+HSPLjava/math/BigInteger;->shiftLeft(I)Ljava/math/BigInteger;
+HSPLjava/math/BigInteger;->shiftRight(I)Ljava/math/BigInteger;
+HSPLjava/math/BigInteger;->signum()I
+HSPLjava/math/BigInteger;->subtract(Ljava/math/BigInteger;)Ljava/math/BigInteger;
+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;
+HSPLjava/math/BitLevel;->nonZeroDroppedBits(I[I)Z
+HSPLjava/math/Conversion;->bigInteger2Double(Ljava/math/BigInteger;)D
+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/NativeBN;->size()J
+HSPLjava/math/RoundingMode;-><init>(Ljava/lang/String;II)V
+HSPLjava/math/RoundingMode;->values()[Ljava/math/RoundingMode;
+HSPLjava/net/AbstractPlainDatagramSocketImpl;-><init>()V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->bind(ILjava/net/InetAddress;)V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->bind0(ILjava/net/InetAddress;)V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->close()V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->connect0(Ljava/net/InetAddress;I)V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->create()V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->datagramSocketClose()V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->datagramSocketCreate()V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->disconnect0(I)V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->finalize()V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->getTTL()B
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->getTimeToLive()I
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->isClosed()Z
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->join(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->leave(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->peek(Ljava/net/InetAddress;)I
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->peekData(Ljava/net/DatagramPacket;)I
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->receive(Ljava/net/DatagramPacket;)V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->receive0(Ljava/net/DatagramPacket;)V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->send(Ljava/net/DatagramPacket;)V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->setOption(ILjava/lang/Object;)V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->setTTL(B)V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->setTimeToLive(I)V
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->socketGetOption(I)Ljava/lang/Object;
+HSPLjava/net/AbstractPlainDatagramSocketImpl;->socketSetOption(ILjava/lang/Object;)V
+HSPLjava/net/AbstractPlainSocketImpl;-><init>()V
+HSPLjava/net/AbstractPlainSocketImpl;->accept(Ljava/net/SocketImpl;)V
+HSPLjava/net/AbstractPlainSocketImpl;->acquireFD()Ljava/io/FileDescriptor;
+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
+HSPLjava/net/AbstractPlainSocketImpl;->create(Z)V
+HSPLjava/net/AbstractPlainSocketImpl;->doConnect(Ljava/net/InetAddress;II)V
+HSPLjava/net/AbstractPlainSocketImpl;->getInputStream()Ljava/io/InputStream;
+HSPLjava/net/AbstractPlainSocketImpl;->getOption(I)Ljava/lang/Object;
+HSPLjava/net/AbstractPlainSocketImpl;->getOutputStream()Ljava/io/OutputStream;
+HSPLjava/net/AbstractPlainSocketImpl;->isClosedOrPending()Z
+HSPLjava/net/AbstractPlainSocketImpl;->listen(I)V
+HSPLjava/net/AbstractPlainSocketImpl;->releaseFD()V
+HSPLjava/net/AbstractPlainSocketImpl;->setOption(ILjava/lang/Object;)V
+HSPLjava/net/AbstractPlainSocketImpl;->socketAccept(Ljava/net/SocketImpl;)V
+HSPLjava/net/AbstractPlainSocketImpl;->socketAvailable()I
+HSPLjava/net/AbstractPlainSocketImpl;->socketBind(Ljava/net/InetAddress;I)V
+HSPLjava/net/AbstractPlainSocketImpl;->socketClose()V
+HSPLjava/net/AbstractPlainSocketImpl;->socketClose0(Z)V
+HSPLjava/net/AbstractPlainSocketImpl;->socketConnect(Ljava/net/InetAddress;II)V
+HSPLjava/net/AbstractPlainSocketImpl;->socketCreate(Z)V
+HSPLjava/net/AbstractPlainSocketImpl;->socketGetOption(I)Ljava/lang/Object;
+HSPLjava/net/AbstractPlainSocketImpl;->socketListen(I)V
+HSPLjava/net/AbstractPlainSocketImpl;->socketPreClose()V
+HSPLjava/net/AbstractPlainSocketImpl;->socketSendUrgentData(I)V
+HSPLjava/net/AbstractPlainSocketImpl;->socketSetOption(ILjava/lang/Object;)V
+HSPLjava/net/AbstractPlainSocketImpl;->socketShutdown(I)V
+HSPLjava/net/AddressCache$AddressCacheEntry;-><init>(Ljava/lang/Object;)V
+HSPLjava/net/AddressCache$AddressCacheKey;-><init>(Ljava/lang/String;I)V
+HSPLjava/net/AddressCache$AddressCacheKey;->equals(Ljava/lang/Object;)Z
+HSPLjava/net/AddressCache$AddressCacheKey;->hashCode()I
+HSPLjava/net/AddressCache;->clear()V
+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/CookieHandler;->getDefault()Ljava/net/CookieHandler;
+HSPLjava/net/DatagramPacket;-><init>([BI)V
+HSPLjava/net/DatagramPacket;-><init>([BII)V
+HSPLjava/net/DatagramPacket;-><init>([BIILjava/net/InetAddress;I)V
+HSPLjava/net/DatagramPacket;-><init>([BILjava/net/InetAddress;I)V
+HSPLjava/net/DatagramPacket;->getAddress()Ljava/net/InetAddress;
+HSPLjava/net/DatagramPacket;->getData()[B
+HSPLjava/net/DatagramPacket;->getLength()I
+HSPLjava/net/DatagramPacket;->getOffset()I
+HSPLjava/net/DatagramPacket;->getPort()I
+HSPLjava/net/DatagramPacket;->setAddress(Ljava/net/InetAddress;)V
+HSPLjava/net/DatagramPacket;->setData([BII)V
+HSPLjava/net/DatagramPacket;->setPort(I)V
+HSPLjava/net/DatagramPacket;->setReceivedLength(I)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;->createImpl()V
+HSPLjava/net/DatagramSocket;->getImpl()Ljava/net/DatagramSocketImpl;
+HSPLjava/net/DatagramSocket;->isBound()Z
+HSPLjava/net/DatagramSocket;->isClosed()Z
+HSPLjava/net/DatagramSocket;->receive(Ljava/net/DatagramPacket;)V
+HSPLjava/net/DatagramSocket;->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;->bind(ILjava/net/InetAddress;)V
+HSPLjava/net/DatagramSocketImpl;->close()V
+HSPLjava/net/DatagramSocketImpl;->create()V
+HSPLjava/net/DatagramSocketImpl;->join(Ljava/net/InetAddress;)V
+HSPLjava/net/DatagramSocketImpl;->joinGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V
+HSPLjava/net/DatagramSocketImpl;->leave(Ljava/net/InetAddress;)V
+HSPLjava/net/DatagramSocketImpl;->leaveGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V
+HSPLjava/net/DatagramSocketImpl;->receive(Ljava/net/DatagramPacket;)V
+HSPLjava/net/DatagramSocketImpl;->setDatagramSocket(Ljava/net/DatagramSocket;)V
+HSPLjava/net/DefaultDatagramSocketImplFactory;->createDatagramSocketImpl(Z)Ljava/net/DatagramSocketImpl;
+HSPLjava/net/DefaultInterface;->getDefault()Ljava/net/NetworkInterface;
+HSPLjava/net/HttpURLConnection;-><init>(Ljava/net/URL;)V
+HSPLjava/net/HttpURLConnection;->getFollowRedirects()Z
+HSPLjava/net/HttpURLConnection;->setChunkedStreamingMode(I)V
+HSPLjava/net/IDN;->toASCII(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/net/IDN;->toASCII(Ljava/lang/String;I)Ljava/lang/String;
+HSPLjava/net/Inet4Address;-><init>(Ljava/lang/String;[B)V
+HSPLjava/net/Inet4Address;->equals(Ljava/lang/Object;)Z
+HSPLjava/net/Inet4Address;->getAddress()[B
+HSPLjava/net/Inet4Address;->getHostAddress()Ljava/lang/String;
+HSPLjava/net/Inet4Address;->hashCode()I
+HSPLjava/net/Inet4Address;->isAnyLocalAddress()Z
+HSPLjava/net/Inet4Address;->isMulticastAddress()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$Inet6AddressHolder;)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
+HSPLjava/net/Inet6Address$Inet6AddressHolder;->isLinkLocalAddress()Z
+HSPLjava/net/Inet6Address$Inet6AddressHolder;->isMulticastAddress()Z
+HSPLjava/net/Inet6Address$Inet6AddressHolder;->setAddr([B)V
+HSPLjava/net/Inet6Address;-><init>(Ljava/lang/String;[BI)V
+HSPLjava/net/Inet6Address;->equals(Ljava/lang/Object;)Z
+HSPLjava/net/Inet6Address;->getAddress()[B
+HSPLjava/net/Inet6Address;->getHostAddress()Ljava/lang/String;
+HSPLjava/net/Inet6Address;->getScopeId()I
+HSPLjava/net/Inet6Address;->hashCode()I
+HSPLjava/net/Inet6Address;->isAnyLocalAddress()Z
+HSPLjava/net/Inet6Address;->isLinkLocalAddress()Z
+HSPLjava/net/Inet6Address;->isMulticastAddress()Z
+HSPLjava/net/Inet6AddressImpl;->clearAddressCache()V
+HSPLjava/net/Inet6AddressImpl;->lookupAllHostAddr(Ljava/lang/String;I)[Ljava/net/InetAddress;
+HSPLjava/net/Inet6AddressImpl;->lookupHostByName(Ljava/lang/String;I)[Ljava/net/InetAddress;
+HSPLjava/net/InetAddress$InetAddressHolder;-><init>()V
+HSPLjava/net/InetAddress$InetAddressHolder;->getAddress()I
+HSPLjava/net/InetAddress$InetAddressHolder;->getHostName()Ljava/lang/String;
+HSPLjava/net/InetAddress$InetAddressHolder;->init(Ljava/lang/String;I)V
+HSPLjava/net/InetAddress;-><init>()V
+HSPLjava/net/InetAddress;->clearDnsCache()V
+HSPLjava/net/InetAddress;->disallowDeprecatedFormats(Ljava/lang/String;Ljava/net/InetAddress;)Ljava/net/InetAddress;
+HSPLjava/net/InetAddress;->getAllByName(Ljava/lang/String;)[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;
+HSPLjava/net/InetAddress;->holder()Ljava/net/InetAddress$InetAddressHolder;
+HSPLjava/net/InetAddress;->isNumeric(Ljava/lang/String;)Z
+HSPLjava/net/InetAddress;->parseNumericAddressNoThrow(Ljava/lang/String;)Ljava/net/InetAddress;
+HSPLjava/net/InetAddress;->toString()Ljava/lang/String;
+HSPLjava/net/InetAddressImpl;->anyLocalAddress()Ljava/net/InetAddress;
+HSPLjava/net/InetAddressImpl;->clearAddressCache()V
+HSPLjava/net/InetAddressImpl;->getHostByAddr([B)Ljava/lang/String;
+HSPLjava/net/InetAddressImpl;->isReachable(Ljava/net/InetAddress;ILjava/net/NetworkInterface;I)Z
+HSPLjava/net/InetAddressImpl;->lookupAllHostAddr(Ljava/lang/String;I)[Ljava/net/InetAddress;
+HSPLjava/net/InetAddressImpl;->loopbackAddresses()[Ljava/net/InetAddress;
+HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->-wrap0(Ljava/net/InetSocketAddress$InetSocketAddressHolder;)Z
+HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->-wrap1(Ljava/net/InetSocketAddress$InetSocketAddressHolder;)I
+HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->-wrap4(Ljava/net/InetSocketAddress$InetSocketAddressHolder;)Ljava/net/InetAddress;
+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$InetSocketAddressHolder;)V
+HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->getAddress()Ljava/net/InetAddress;
+HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->getPort()I
+HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->hashCode()I
+HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->isUnresolved()Z
+HSPLjava/net/InetSocketAddress;-><init>()V
+HSPLjava/net/InetSocketAddress;-><init>(I)V
+HSPLjava/net/InetSocketAddress;-><init>(Ljava/lang/String;I)V
+HSPLjava/net/InetSocketAddress;-><init>(Ljava/net/InetAddress;I)V
+HSPLjava/net/InetSocketAddress;->checkHost(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/net/InetSocketAddress;->checkPort(I)I
+HSPLjava/net/InetSocketAddress;->getAddress()Ljava/net/InetAddress;
+HSPLjava/net/InetSocketAddress;->getPort()I
+HSPLjava/net/InetSocketAddress;->hashCode()I
+HSPLjava/net/InetSocketAddress;->isUnresolved()Z
+HSPLjava/net/InterfaceAddress;-><init>(Ljava/net/InetAddress;Ljava/net/Inet4Address;Ljava/net/InetAddress;)V
+HSPLjava/net/InterfaceAddress;->countPrefixLength(Ljava/net/InetAddress;)S
+HSPLjava/net/JarURLConnection;-><init>(Ljava/net/URL;)V
+HSPLjava/net/JarURLConnection;->getEntryName()Ljava/lang/String;
+HSPLjava/net/JarURLConnection;->getJarFile()Ljava/util/jar/JarFile;
+HSPLjava/net/JarURLConnection;->parseSpecs(Ljava/net/URL;)V
+HSPLjava/net/MulticastSocket;-><init>()V
+HSPLjava/net/MulticastSocket;-><init>(Ljava/net/SocketAddress;)V
+HSPLjava/net/MulticastSocket;->setNetworkInterface(Ljava/net/NetworkInterface;)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;->-get0(Ljava/net/NetworkInterface;)[Ljava/net/InetAddress;
+HSPLjava/net/NetworkInterface;-><init>(Ljava/lang/String;I[Ljava/net/InetAddress;)V
+HSPLjava/net/NetworkInterface;->getAll()[Ljava/net/NetworkInterface;
+HSPLjava/net/NetworkInterface;->getFlags()I
+HSPLjava/net/NetworkInterface;->getIndex()I
+HSPLjava/net/NetworkInterface;->getInetAddresses()Ljava/util/Enumeration;
+HSPLjava/net/NetworkInterface;->getName()Ljava/lang/String;
+HSPLjava/net/NetworkInterface;->getNetworkInterfaces()Ljava/util/Enumeration;
+HSPLjava/net/NetworkInterface;->isLoopback()Z
+HSPLjava/net/NetworkInterface;->isPointToPoint()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;->datagramSocketClose()V
+HSPLjava/net/PlainDatagramSocketImpl;->datagramSocketCreate()V
+HSPLjava/net/PlainDatagramSocketImpl;->doRecv(Ljava/net/DatagramPacket;I)V
+HSPLjava/net/PlainDatagramSocketImpl;->receive0(Ljava/net/DatagramPacket;)V
+HSPLjava/net/PlainDatagramSocketImpl;->send(Ljava/net/DatagramPacket;)V
+HSPLjava/net/PlainDatagramSocketImpl;->socketSetOption(ILjava/lang/Object;)V
+HSPLjava/net/PlainDatagramSocketImpl;->socketSetOption0(ILjava/lang/Object;)V
+HSPLjava/net/PlainSocketImpl;-><init>()V
+HSPLjava/net/PlainSocketImpl;-><init>(Ljava/io/FileDescriptor;)V
+HSPLjava/net/PlainSocketImpl;->getMarkerFD()Ljava/io/FileDescriptor;
+HSPLjava/net/PlainSocketImpl;->socketAccept(Ljava/net/SocketImpl;)V
+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;->socketListen(I)V
+HSPLjava/net/PlainSocketImpl;->socketSetOption(ILjava/lang/Object;)V
+HSPLjava/net/PlainSocketImpl;->socketSetOption0(ILjava/lang/Object;)V
+HSPLjava/net/Proxy$Type;-><init>(Ljava/lang/String;I)V
+HSPLjava/net/Proxy;-><init>()V
+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;-><init>()V
+HSPLjava/net/ProxySelector;->connectFailed(Ljava/net/URI;Ljava/net/SocketAddress;Ljava/io/IOException;)V
+HSPLjava/net/ProxySelector;->getDefault()Ljava/net/ProxySelector;
+HSPLjava/net/ProxySelector;->select(Ljava/net/URI;)Ljava/util/List;
+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/Socket$2;-><init>(Ljava/net/Socket;)V
+HSPLjava/net/Socket$2;->run()Ljava/io/InputStream;
+HSPLjava/net/Socket$2;->run()Ljava/lang/Object;
+HSPLjava/net/Socket$3;-><init>(Ljava/net/Socket;)V
+HSPLjava/net/Socket$3;->run()Ljava/io/OutputStream;
+HSPLjava/net/Socket$3;->run()Ljava/lang/Object;
+HSPLjava/net/Socket;-><init>()V
+HSPLjava/net/Socket;-><init>(Ljava/net/SocketImpl;)V
+HSPLjava/net/Socket;->checkAddress(Ljava/net/InetAddress;Ljava/lang/String;)V
+HSPLjava/net/Socket;->close()V
+HSPLjava/net/Socket;->connect(Ljava/net/SocketAddress;I)V
+HSPLjava/net/Socket;->createImpl(Z)V
+HSPLjava/net/Socket;->getFileDescriptor$()Ljava/io/FileDescriptor;
+HSPLjava/net/Socket;->getImpl()Ljava/net/SocketImpl;
+HSPLjava/net/Socket;->getInputStream()Ljava/io/InputStream;
+HSPLjava/net/Socket;->getOutputStream()Ljava/io/OutputStream;
+HSPLjava/net/Socket;->getPort()I
+HSPLjava/net/Socket;->getSoTimeout()I
+HSPLjava/net/Socket;->isBound()Z
+HSPLjava/net/Socket;->isClosed()Z
+HSPLjava/net/Socket;->isConnected()Z
+HSPLjava/net/Socket;->isInputShutdown()Z
+HSPLjava/net/Socket;->isOutputShutdown()Z
+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/SocketAddress;-><init>()V
+HSPLjava/net/SocketImpl;-><init>()V
+HSPLjava/net/SocketImpl;->accept(Ljava/net/SocketImpl;)V
+HSPLjava/net/SocketImpl;->available()I
+HSPLjava/net/SocketImpl;->bind(Ljava/net/InetAddress;I)V
+HSPLjava/net/SocketImpl;->connect(Ljava/lang/String;I)V
+HSPLjava/net/SocketImpl;->connect(Ljava/net/InetAddress;I)V
+HSPLjava/net/SocketImpl;->create(Z)V
+HSPLjava/net/SocketImpl;->getFileDescriptor()Ljava/io/FileDescriptor;
+HSPLjava/net/SocketImpl;->getInputStream()Ljava/io/InputStream;
+HSPLjava/net/SocketImpl;->getOutputStream()Ljava/io/OutputStream;
+HSPLjava/net/SocketImpl;->getPort()I
+HSPLjava/net/SocketImpl;->getSocket()Ljava/net/Socket;
+HSPLjava/net/SocketImpl;->listen(I)V
+HSPLjava/net/SocketImpl;->sendUrgentData(I)V
+HSPLjava/net/SocketImpl;->setServerSocket(Ljava/net/ServerSocket;)V
+HSPLjava/net/SocketImpl;->setSocket(Ljava/net/Socket;)V
+HSPLjava/net/SocketInputStream;-><init>(Ljava/net/AbstractPlainSocketImpl;)V
+HSPLjava/net/SocketOptions;->getOption(I)Ljava/lang/Object;
+HSPLjava/net/SocketOptions;->setOption(ILjava/lang/Object;)V
+HSPLjava/net/SocketOutputStream;-><init>(Ljava/net/AbstractPlainSocketImpl;)V
+HSPLjava/net/SocketTimeoutException;-><init>(Ljava/lang/String;)V
+HSPLjava/net/SocksSocketImpl;-><init>()V
+HSPLjava/net/SocksSocketImpl;->close()V
+HSPLjava/net/SocksSocketImpl;->connect(Ljava/net/SocketAddress;I)V
+HSPLjava/net/SocksSocketImpl;->getPort()I
+HSPLjava/net/SocksSocketImpl;->remainingMillis(J)I
+HSPLjava/net/URI$Parser;-><init>(Ljava/net/URI;Ljava/lang/String;)V
+HSPLjava/net/URI$Parser;->at(IIC)Z
+HSPLjava/net/URI$Parser;->charAt(I)C
+HSPLjava/net/URI$Parser;->checkChar(IJJLjava/lang/String;)V
+HSPLjava/net/URI$Parser;->checkChars(IIJJLjava/lang/String;)V
+HSPLjava/net/URI$Parser;->parse(Z)V
+HSPLjava/net/URI$Parser;->parseAuthority(II)I
+HSPLjava/net/URI$Parser;->parseHierarchical(II)I
+HSPLjava/net/URI$Parser;->parseHostname(II)I
+HSPLjava/net/URI$Parser;->parseIPv4Address(II)I
+HSPLjava/net/URI$Parser;->parseServer(II)I
+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;->scanIPv4Address(IIZ)I
+HSPLjava/net/URI$Parser;->substring(II)Ljava/lang/String;
+HSPLjava/net/URI;->-get0()J
+HSPLjava/net/URI;->-get1()J
+HSPLjava/net/URI;->-get10()J
+HSPLjava/net/URI;->-get11()J
+HSPLjava/net/URI;->-get13()J
+HSPLjava/net/URI;->-get14()J
+HSPLjava/net/URI;->-get15()J
+HSPLjava/net/URI;->-get16()J
+HSPLjava/net/URI;->-get18()J
+HSPLjava/net/URI;->-get19()J
+HSPLjava/net/URI;->-get2()J
+HSPLjava/net/URI;->-get20()J
+HSPLjava/net/URI;->-get22()J
+HSPLjava/net/URI;->-get23()J
+HSPLjava/net/URI;->-get24()J
+HSPLjava/net/URI;->-get3()J
+HSPLjava/net/URI;->-get5()J
+HSPLjava/net/URI;->-get6()J
+HSPLjava/net/URI;->-get7()J
+HSPLjava/net/URI;->-get9()J
+HSPLjava/net/URI;->-set0(Ljava/net/URI;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/net/URI;->-set1(Ljava/net/URI;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/net/URI;->-set2(Ljava/net/URI;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/net/URI;->-set3(Ljava/net/URI;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/net/URI;->-set5(Ljava/net/URI;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/net/URI;->-set6(Ljava/net/URI;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/net/URI;->-set7(Ljava/net/URI;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/net/URI;->-set8(Ljava/net/URI;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/net/URI;->-wrap0(CJJ)Z
+HSPLjava/net/URI;-><init>(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;->appendAuthority(Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+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;->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;->getAuthority()Ljava/lang/String;
+HSPLjava/net/URI;->getFragment()Ljava/lang/String;
+HSPLjava/net/URI;->getHost()Ljava/lang/String;
+HSPLjava/net/URI;->getPath()Ljava/lang/String;
+HSPLjava/net/URI;->getQuery()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;->hash(ILjava/lang/String;)I
+HSPLjava/net/URI;->hashCode()I
+HSPLjava/net/URI;->hashIgnoringCase(ILjava/lang/String;)I
+HSPLjava/net/URI;->isAbsolute()Z
+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;->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;
+HSPLjava/net/URL;-><init>(Ljava/lang/String;)V
+HSPLjava/net/URL;-><init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/net/URLStreamHandler;)V
+HSPLjava/net/URL;-><init>(Ljava/net/URL;Ljava/lang/String;)V
+HSPLjava/net/URL;-><init>(Ljava/net/URL;Ljava/lang/String;Ljava/net/URLStreamHandler;)V
+HSPLjava/net/URL;->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;
+HSPLjava/net/URL;->getPort()I
+HSPLjava/net/URL;->getProtocol()Ljava/lang/String;
+HSPLjava/net/URL;->getQuery()Ljava/lang/String;
+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;->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;->toExternalForm()Ljava/lang/String;
+HSPLjava/net/URL;->toString()Ljava/lang/String;
+HSPLjava/net/URLConnection;-><init>(Ljava/net/URL;)V
+HSPLjava/net/URLConnection;->connect()V
+HSPLjava/net/URLConnection;->getContentType()Ljava/lang/String;
+HSPLjava/net/URLConnection;->getURL()Ljava/net/URL;
+HSPLjava/net/URLConnection;->getUseCaches()Z
+HSPLjava/net/URLConnection;->setDoInput(Z)V
+HSPLjava/net/URLConnection;->setDoOutput(Z)V
+HSPLjava/net/URLConnection;->setUseCaches(Z)V
+HSPLjava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/net/URLStreamHandler;-><init>()V
+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;
+HSPLjava/net/URLStreamHandlerFactory;->createURLStreamHandler(Ljava/lang/String;)Ljava/net/URLStreamHandler;
+HSPLjava/nio/Bits;->byteOrder()Ljava/nio/ByteOrder;
+HSPLjava/nio/Bits;->char0(C)B
+HSPLjava/nio/Bits;->char1(C)B
+HSPLjava/nio/Bits;->getFloat(Ljava/nio/ByteBuffer;IZ)F
+HSPLjava/nio/Bits;->getFloatL(Ljava/nio/ByteBuffer;I)F
+HSPLjava/nio/Bits;->getInt(Ljava/nio/ByteBuffer;IZ)I
+HSPLjava/nio/Bits;->getIntB(Ljava/nio/ByteBuffer;I)I
+HSPLjava/nio/Bits;->getIntL(Ljava/nio/ByteBuffer;I)I
+HSPLjava/nio/Bits;->getLong(Ljava/nio/ByteBuffer;IZ)J
+HSPLjava/nio/Bits;->getLongB(Ljava/nio/ByteBuffer;I)J
+HSPLjava/nio/Bits;->getLongL(Ljava/nio/ByteBuffer;I)J
+HSPLjava/nio/Bits;->getShort(Ljava/nio/ByteBuffer;IZ)S
+HSPLjava/nio/Bits;->getShortB(Ljava/nio/ByteBuffer;I)S
+HSPLjava/nio/Bits;->getShortL(Ljava/nio/ByteBuffer;I)S
+HSPLjava/nio/Bits;->int0(I)B
+HSPLjava/nio/Bits;->int1(I)B
+HSPLjava/nio/Bits;->int2(I)B
+HSPLjava/nio/Bits;->int3(I)B
+HSPLjava/nio/Bits;->long0(J)B
+HSPLjava/nio/Bits;->long1(J)B
+HSPLjava/nio/Bits;->long2(J)B
+HSPLjava/nio/Bits;->long3(J)B
+HSPLjava/nio/Bits;->long4(J)B
+HSPLjava/nio/Bits;->long5(J)B
+HSPLjava/nio/Bits;->long6(J)B
+HSPLjava/nio/Bits;->long7(J)B
+HSPLjava/nio/Bits;->makeInt(BBBB)I
+HSPLjava/nio/Bits;->makeLong(BBBBBBBB)J
+HSPLjava/nio/Bits;->makeShort(BB)S
+HSPLjava/nio/Bits;->pageCount(J)I
+HSPLjava/nio/Bits;->pageSize()I
+HSPLjava/nio/Bits;->putChar(Ljava/nio/ByteBuffer;ICZ)V
+HSPLjava/nio/Bits;->putCharB(Ljava/nio/ByteBuffer;IC)V
+HSPLjava/nio/Bits;->putCharL(Ljava/nio/ByteBuffer;IC)V
+HSPLjava/nio/Bits;->putInt(Ljava/nio/ByteBuffer;IIZ)V
+HSPLjava/nio/Bits;->putIntB(Ljava/nio/ByteBuffer;II)V
+HSPLjava/nio/Bits;->putIntL(Ljava/nio/ByteBuffer;II)V
+HSPLjava/nio/Bits;->putLong(Ljava/nio/ByteBuffer;IJZ)V
+HSPLjava/nio/Bits;->putLongB(Ljava/nio/ByteBuffer;IJ)V
+HSPLjava/nio/Bits;->putLongL(Ljava/nio/ByteBuffer;IJ)V
+HSPLjava/nio/Bits;->unsafe()Lsun/misc/Unsafe;
+HSPLjava/nio/Buffer;-><init>(IIIII)V
+HSPLjava/nio/Buffer;->capacity()I
+HSPLjava/nio/Buffer;->checkBounds(III)V
+HSPLjava/nio/Buffer;->checkIndex(I)I
+HSPLjava/nio/Buffer;->checkIndex(II)I
+HSPLjava/nio/Buffer;->clear()Ljava/nio/Buffer;
+HSPLjava/nio/Buffer;->discardMark()V
+HSPLjava/nio/Buffer;->flip()Ljava/nio/Buffer;
+HSPLjava/nio/Buffer;->hasRemaining()Z
+HSPLjava/nio/Buffer;->limit()I
+HSPLjava/nio/Buffer;->limit(I)Ljava/nio/Buffer;
+HSPLjava/nio/Buffer;->mark()Ljava/nio/Buffer;
+HSPLjava/nio/Buffer;->markValue()I
+HSPLjava/nio/Buffer;->nextGetIndex()I
+HSPLjava/nio/Buffer;->nextGetIndex(I)I
+HSPLjava/nio/Buffer;->nextPutIndex()I
+HSPLjava/nio/Buffer;->nextPutIndex(I)I
+HSPLjava/nio/Buffer;->position()I
+HSPLjava/nio/Buffer;->position(I)Ljava/nio/Buffer;
+HSPLjava/nio/Buffer;->remaining()I
+HSPLjava/nio/Buffer;->reset()Ljava/nio/Buffer;
+HSPLjava/nio/Buffer;->rewind()Ljava/nio/Buffer;
+HSPLjava/nio/ByteBuffer;-><init>(IIII)V
+HSPLjava/nio/ByteBuffer;-><init>(IIII[BI)V
+HSPLjava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer;
+HSPLjava/nio/ByteBuffer;->allocateDirect(I)Ljava/nio/ByteBuffer;
+HSPLjava/nio/ByteBuffer;->array()Ljava/lang/Object;
+HSPLjava/nio/ByteBuffer;->array()[B
+HSPLjava/nio/ByteBuffer;->arrayOffset()I
+HSPLjava/nio/ByteBuffer;->get([B)Ljava/nio/ByteBuffer;
+HSPLjava/nio/ByteBuffer;->hasArray()Z
+HSPLjava/nio/ByteBuffer;->isAccessible()Z
+HSPLjava/nio/ByteBuffer;->order()Ljava/nio/ByteOrder;
+HSPLjava/nio/ByteBuffer;->order(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
+HSPLjava/nio/ByteBuffer;->put(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
+HSPLjava/nio/ByteBuffer;->put([B)Ljava/nio/ByteBuffer;
+HSPLjava/nio/ByteBuffer;->wrap([B)Ljava/nio/ByteBuffer;
+HSPLjava/nio/ByteBuffer;->wrap([BII)Ljava/nio/ByteBuffer;
+HSPLjava/nio/ByteBufferAsCharBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V
+HSPLjava/nio/ByteBufferAsCharBuffer;->duplicate()Ljava/nio/CharBuffer;
+HSPLjava/nio/ByteBufferAsCharBuffer;->get()C
+HSPLjava/nio/ByteBufferAsCharBuffer;->get(I)C
+HSPLjava/nio/ByteBufferAsCharBuffer;->get([CII)Ljava/nio/CharBuffer;
+HSPLjava/nio/ByteBufferAsCharBuffer;->isDirect()Z
+HSPLjava/nio/ByteBufferAsCharBuffer;->ix(I)I
+HSPLjava/nio/ByteBufferAsCharBuffer;->subSequence(II)Ljava/lang/CharSequence;
+HSPLjava/nio/ByteBufferAsCharBuffer;->subSequence(II)Ljava/nio/CharBuffer;
+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([FII)Ljava/nio/FloatBuffer;
+HSPLjava/nio/ByteBufferAsIntBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V
+HSPLjava/nio/ByteBufferAsIntBuffer;->get([III)Ljava/nio/IntBuffer;
+HSPLjava/nio/ByteBufferAsIntBuffer;->ix(I)I
+HSPLjava/nio/ByteBufferAsLongBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V
+HSPLjava/nio/ByteBufferAsLongBuffer;->get([JII)Ljava/nio/LongBuffer;
+HSPLjava/nio/ByteBufferAsLongBuffer;->ix(I)I
+HSPLjava/nio/ByteBufferAsShortBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V
+HSPLjava/nio/ByteBufferAsShortBuffer;->get([SII)Ljava/nio/ShortBuffer;
+HSPLjava/nio/ByteBufferAsShortBuffer;->ix(I)I
+HSPLjava/nio/ByteBufferAsShortBuffer;->put(IS)Ljava/nio/ShortBuffer;
+HSPLjava/nio/ByteBufferAsShortBuffer;->put(S)Ljava/nio/ShortBuffer;
+HSPLjava/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
+HSPLjava/nio/CharBuffer;->allocate(I)Ljava/nio/CharBuffer;
+HSPLjava/nio/CharBuffer;->array()[C
+HSPLjava/nio/CharBuffer;->arrayOffset()I
+HSPLjava/nio/CharBuffer;->charAt(I)C
+HSPLjava/nio/CharBuffer;->get([C)Ljava/nio/CharBuffer;
+HSPLjava/nio/CharBuffer;->hasArray()Z
+HSPLjava/nio/CharBuffer;->length()I
+HSPLjava/nio/CharBuffer;->toString()Ljava/lang/String;
+HSPLjava/nio/CharBuffer;->wrap(Ljava/lang/CharSequence;)Ljava/nio/CharBuffer;
+HSPLjava/nio/CharBuffer;->wrap(Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer;
+HSPLjava/nio/CharBuffer;->wrap([C)Ljava/nio/CharBuffer;
+HSPLjava/nio/CharBuffer;->wrap([CII)Ljava/nio/CharBuffer;
+HSPLjava/nio/DirectByteBuffer$MemoryRef;-><init>(I)V
+HSPLjava/nio/DirectByteBuffer$MemoryRef;-><init>(JLjava/lang/Object;)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>(Ljava/nio/DirectByteBuffer$MemoryRef;IIIIIZ)V
+HSPLjava/nio/DirectByteBuffer;->asCharBuffer()Ljava/nio/CharBuffer;
+HSPLjava/nio/DirectByteBuffer;->asFloatBuffer()Ljava/nio/FloatBuffer;
+HSPLjava/nio/DirectByteBuffer;->asIntBuffer()Ljava/nio/IntBuffer;
+HSPLjava/nio/DirectByteBuffer;->asLongBuffer()Ljava/nio/LongBuffer;
+HSPLjava/nio/DirectByteBuffer;->asShortBuffer()Ljava/nio/ShortBuffer;
+HSPLjava/nio/DirectByteBuffer;->duplicate()Ljava/nio/ByteBuffer;
+HSPLjava/nio/DirectByteBuffer;->get()B
+HSPLjava/nio/DirectByteBuffer;->get(I)B
+HSPLjava/nio/DirectByteBuffer;->get(J)B
+HSPLjava/nio/DirectByteBuffer;->get([BII)Ljava/nio/ByteBuffer;
+HSPLjava/nio/DirectByteBuffer;->getChar()C
+HSPLjava/nio/DirectByteBuffer;->getChar(I)C
+HSPLjava/nio/DirectByteBuffer;->getCharUnchecked(I)C
+HSPLjava/nio/DirectByteBuffer;->getInt()I
+HSPLjava/nio/DirectByteBuffer;->getInt(I)I
+HSPLjava/nio/DirectByteBuffer;->getInt(J)I
+HSPLjava/nio/DirectByteBuffer;->getUnchecked(I[CII)V
+HSPLjava/nio/DirectByteBuffer;->getUnchecked(I[III)V
+HSPLjava/nio/DirectByteBuffer;->getUnchecked(I[JII)V
+HSPLjava/nio/DirectByteBuffer;->getUnchecked(I[SII)V
+HSPLjava/nio/DirectByteBuffer;->isDirect()Z
+HSPLjava/nio/DirectByteBuffer;->ix(I)J
+HSPLjava/nio/DirectByteBuffer;->put(B)Ljava/nio/ByteBuffer;
+HSPLjava/nio/DirectByteBuffer;->put(JB)Ljava/nio/ByteBuffer;
+HSPLjava/nio/DirectByteBuffer;->putFloat(F)Ljava/nio/ByteBuffer;
+HSPLjava/nio/DirectByteBuffer;->putFloat(JF)Ljava/nio/ByteBuffer;
+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;->putShort(JS)Ljava/nio/ByteBuffer;
+HSPLjava/nio/DirectByteBuffer;->putShort(S)Ljava/nio/ByteBuffer;
+HSPLjava/nio/DirectByteBuffer;->putShortUnchecked(IS)V
+HSPLjava/nio/DirectByteBuffer;->putUnchecked(I[FII)V
+HSPLjava/nio/DirectByteBuffer;->putUnchecked(I[SII)V
+HSPLjava/nio/DirectByteBuffer;->slice()Ljava/nio/ByteBuffer;
+HSPLjava/nio/FloatBuffer;-><init>(IIII)V
+HSPLjava/nio/FloatBuffer;-><init>(IIII[FI)V
+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
+HSPLjava/nio/HeapByteBuffer;-><init>([BIIIIIZ)V
+HSPLjava/nio/HeapByteBuffer;-><init>([BIIZ)V
+HSPLjava/nio/HeapByteBuffer;->_get(I)B
+HSPLjava/nio/HeapByteBuffer;->_put(IB)V
+HSPLjava/nio/HeapByteBuffer;->asIntBuffer()Ljava/nio/IntBuffer;
+HSPLjava/nio/HeapByteBuffer;->compact()Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->duplicate()Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->get()B
+HSPLjava/nio/HeapByteBuffer;->get([BII)Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->getFloat()F
+HSPLjava/nio/HeapByteBuffer;->getFloat(I)F
+HSPLjava/nio/HeapByteBuffer;->getInt()I
+HSPLjava/nio/HeapByteBuffer;->getInt(I)I
+HSPLjava/nio/HeapByteBuffer;->getLong()J
+HSPLjava/nio/HeapByteBuffer;->getLong(I)J
+HSPLjava/nio/HeapByteBuffer;->getShort(I)S
+HSPLjava/nio/HeapByteBuffer;->getUnchecked(I[III)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([BII)Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->putChar(C)Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->putInt(I)Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->putInt(II)Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->putLong(IJ)Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->putLong(J)Ljava/nio/ByteBuffer;
+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(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/IntBuffer;-><init>(IIII)V
+HSPLjava/nio/IntBuffer;-><init>(IIII[II)V
+HSPLjava/nio/IntBuffer;->get([I)Ljava/nio/IntBuffer;
+HSPLjava/nio/LongBuffer;-><init>(IIII)V
+HSPLjava/nio/LongBuffer;-><init>(IIII[JI)V
+HSPLjava/nio/LongBuffer;->get([J)Ljava/nio/LongBuffer;
+HSPLjava/nio/MappedByteBuffer;-><init>(IIIILjava/io/FileDescriptor;)V
+HSPLjava/nio/MappedByteBuffer;-><init>(IIII[BI)V
+HSPLjava/nio/MappedByteBuffer;->checkMapped()V
+HSPLjava/nio/MappedByteBuffer;->load()Ljava/nio/MappedByteBuffer;
+HSPLjava/nio/MappedByteBuffer;->mappingAddress(J)J
+HSPLjava/nio/MappedByteBuffer;->mappingLength(J)J
+HSPLjava/nio/MappedByteBuffer;->mappingOffset()J
+HSPLjava/nio/NIOAccess;->getBaseArray(Ljava/nio/Buffer;)Ljava/lang/Object;
+HSPLjava/nio/NIOAccess;->getBaseArrayOffset(Ljava/nio/Buffer;)I
+HSPLjava/nio/NIOAccess;->getBasePointer(Ljava/nio/Buffer;)J
+HSPLjava/nio/ShortBuffer;-><init>(IIII)V
+HSPLjava/nio/ShortBuffer;-><init>(IIII[SI)V
+HSPLjava/nio/ShortBuffer;->get([S)Ljava/nio/ShortBuffer;
+HSPLjava/nio/ShortBuffer;->put([S)Ljava/nio/ShortBuffer;
+HSPLjava/nio/StringCharBuffer;-><init>(Ljava/lang/CharSequence;II)V
+HSPLjava/nio/StringCharBuffer;->get(I)C
+HSPLjava/nio/channels/Channel;->close()V
+HSPLjava/nio/channels/Channel;->isOpen()Z
+HSPLjava/nio/channels/DatagramChannel;->bind(Ljava/net/SocketAddress;)Ljava/nio/channels/DatagramChannel;
+HSPLjava/nio/channels/DatagramChannel;->connect(Ljava/net/SocketAddress;)Ljava/nio/channels/DatagramChannel;
+HSPLjava/nio/channels/DatagramChannel;->disconnect()Ljava/nio/channels/DatagramChannel;
+HSPLjava/nio/channels/DatagramChannel;->getLocalAddress()Ljava/net/SocketAddress;
+HSPLjava/nio/channels/DatagramChannel;->getRemoteAddress()Ljava/net/SocketAddress;
+HSPLjava/nio/channels/DatagramChannel;->isConnected()Z
+HSPLjava/nio/channels/DatagramChannel;->read(Ljava/nio/ByteBuffer;)I
+HSPLjava/nio/channels/DatagramChannel;->read([Ljava/nio/ByteBuffer;II)J
+HSPLjava/nio/channels/DatagramChannel;->receive(Ljava/nio/ByteBuffer;)Ljava/net/SocketAddress;
+HSPLjava/nio/channels/DatagramChannel;->send(Ljava/nio/ByteBuffer;Ljava/net/SocketAddress;)I
+HSPLjava/nio/channels/DatagramChannel;->setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/DatagramChannel;
+HSPLjava/nio/channels/DatagramChannel;->socket()Ljava/net/DatagramSocket;
+HSPLjava/nio/channels/DatagramChannel;->write(Ljava/nio/ByteBuffer;)I
+HSPLjava/nio/channels/DatagramChannel;->write([Ljava/nio/ByteBuffer;II)J
+HSPLjava/nio/channels/FileChannel;-><init>()V
+HSPLjava/nio/channels/FileChannel;->force(Z)V
+HSPLjava/nio/channels/FileChannel;->lock(JJZ)Ljava/nio/channels/FileLock;
+HSPLjava/nio/channels/FileChannel;->map(Ljava/nio/channels/FileChannel$MapMode;JJ)Ljava/nio/MappedByteBuffer;
+HSPLjava/nio/channels/FileChannel;->open(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/FileChannel;
+HSPLjava/nio/channels/FileChannel;->open(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/FileChannel;
+HSPLjava/nio/channels/FileChannel;->position()J
+HSPLjava/nio/channels/FileChannel;->position(J)Ljava/nio/channels/FileChannel;
+HSPLjava/nio/channels/FileChannel;->read(Ljava/nio/ByteBuffer;)I
+HSPLjava/nio/channels/FileChannel;->read(Ljava/nio/ByteBuffer;J)I
+HSPLjava/nio/channels/FileChannel;->read([Ljava/nio/ByteBuffer;II)J
+HSPLjava/nio/channels/FileChannel;->size()J
+HSPLjava/nio/channels/FileChannel;->transferFrom(Ljava/nio/channels/ReadableByteChannel;JJ)J
+HSPLjava/nio/channels/FileChannel;->transferTo(JJLjava/nio/channels/WritableByteChannel;)J
+HSPLjava/nio/channels/FileChannel;->truncate(J)Ljava/nio/channels/FileChannel;
+HSPLjava/nio/channels/FileChannel;->tryLock()Ljava/nio/channels/FileLock;
+HSPLjava/nio/channels/FileChannel;->tryLock(JJZ)Ljava/nio/channels/FileLock;
+HSPLjava/nio/channels/FileChannel;->write(Ljava/nio/ByteBuffer;)I
+HSPLjava/nio/channels/FileChannel;->write(Ljava/nio/ByteBuffer;J)I
+HSPLjava/nio/channels/FileChannel;->write([Ljava/nio/ByteBuffer;II)J
+HSPLjava/nio/channels/FileLock;-><init>(Ljava/nio/channels/FileChannel;JJZ)V
+HSPLjava/nio/channels/FileLock;->acquiredBy()Ljava/nio/channels/Channel;
+HSPLjava/nio/channels/FileLock;->isValid()Z
+HSPLjava/nio/channels/FileLock;->position()J
+HSPLjava/nio/channels/FileLock;->release()V
+HSPLjava/nio/channels/FileLock;->size()J
+HSPLjava/nio/channels/InterruptibleChannel;->close()V
+HSPLjava/nio/channels/MulticastChannel;->close()V
+HSPLjava/nio/channels/MulticastChannel;->join(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)Ljava/nio/channels/MembershipKey;
+HSPLjava/nio/channels/MulticastChannel;->join(Ljava/net/InetAddress;Ljava/net/NetworkInterface;Ljava/net/InetAddress;)Ljava/nio/channels/MembershipKey;
+HSPLjava/nio/channels/NetworkChannel;->getOption(Ljava/net/SocketOption;)Ljava/lang/Object;
+HSPLjava/nio/channels/NetworkChannel;->supportedOptions()Ljava/util/Set;
+HSPLjava/nio/channels/SeekableByteChannel;->position()J
+HSPLjava/nio/channels/SeekableByteChannel;->position(J)Ljava/nio/channels/SeekableByteChannel;
+HSPLjava/nio/channels/SeekableByteChannel;->read(Ljava/nio/ByteBuffer;)I
+HSPLjava/nio/channels/SeekableByteChannel;->size()J
+HSPLjava/nio/channels/SeekableByteChannel;->truncate(J)Ljava/nio/channels/SeekableByteChannel;
+HSPLjava/nio/channels/SeekableByteChannel;->write(Ljava/nio/ByteBuffer;)I
+HSPLjava/nio/channels/SelectableChannel;->blockingLock()Ljava/lang/Object;
+HSPLjava/nio/channels/SelectableChannel;->configureBlocking(Z)Ljava/nio/channels/SelectableChannel;
+HSPLjava/nio/channels/SelectableChannel;->isBlocking()Z
+HSPLjava/nio/channels/SelectableChannel;->isRegistered()Z
+HSPLjava/nio/channels/SelectableChannel;->keyFor(Ljava/nio/channels/Selector;)Ljava/nio/channels/SelectionKey;
+HSPLjava/nio/channels/SelectableChannel;->provider()Ljava/nio/channels/spi/SelectorProvider;
+HSPLjava/nio/channels/SelectableChannel;->register(Ljava/nio/channels/Selector;ILjava/lang/Object;)Ljava/nio/channels/SelectionKey;
+HSPLjava/nio/channels/ServerSocketChannel;->accept()Ljava/nio/channels/SocketChannel;
+HSPLjava/nio/channels/ServerSocketChannel;->bind(Ljava/net/SocketAddress;I)Ljava/nio/channels/ServerSocketChannel;
+HSPLjava/nio/channels/ServerSocketChannel;->getLocalAddress()Ljava/net/SocketAddress;
+HSPLjava/nio/channels/ServerSocketChannel;->setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/ServerSocketChannel;
+HSPLjava/nio/channels/ServerSocketChannel;->socket()Ljava/net/ServerSocket;
+HSPLjava/nio/channels/SocketChannel;->bind(Ljava/net/SocketAddress;)Ljava/nio/channels/SocketChannel;
+HSPLjava/nio/channels/SocketChannel;->connect(Ljava/net/SocketAddress;)Z
+HSPLjava/nio/channels/SocketChannel;->finishConnect()Z
+HSPLjava/nio/channels/SocketChannel;->getLocalAddress()Ljava/net/SocketAddress;
+HSPLjava/nio/channels/SocketChannel;->getRemoteAddress()Ljava/net/SocketAddress;
+HSPLjava/nio/channels/SocketChannel;->isConnected()Z
+HSPLjava/nio/channels/SocketChannel;->isConnectionPending()Z
+HSPLjava/nio/channels/SocketChannel;->read(Ljava/nio/ByteBuffer;)I
+HSPLjava/nio/channels/SocketChannel;->read([Ljava/nio/ByteBuffer;II)J
+HSPLjava/nio/channels/SocketChannel;->setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/SocketChannel;
+HSPLjava/nio/channels/SocketChannel;->shutdownInput()Ljava/nio/channels/SocketChannel;
+HSPLjava/nio/channels/SocketChannel;->shutdownOutput()Ljava/nio/channels/SocketChannel;
+HSPLjava/nio/channels/SocketChannel;->socket()Ljava/net/Socket;
+HSPLjava/nio/channels/SocketChannel;->write(Ljava/nio/ByteBuffer;)I
+HSPLjava/nio/channels/SocketChannel;->write([Ljava/nio/ByteBuffer;II)J
+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/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
+HSPLjava/nio/charset/Charset;->defaultCharset()Ljava/nio/charset/Charset;
+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;
+HSPLjava/nio/charset/Charset;->isSupported(Ljava/lang/String;)Z
+HSPLjava/nio/charset/Charset;->lookup(Ljava/lang/String;)Ljava/nio/charset/Charset;
+HSPLjava/nio/charset/Charset;->lookup2(Ljava/lang/String;)Ljava/nio/charset/Charset;
+HSPLjava/nio/charset/Charset;->name()Ljava/lang/String;
+HSPLjava/nio/charset/CharsetDecoder;-><init>(Ljava/nio/charset/Charset;FF)V
+HSPLjava/nio/charset/CharsetDecoder;-><init>(Ljava/nio/charset/Charset;FFLjava/lang/String;)V
+HSPLjava/nio/charset/CharsetDecoder;->averageCharsPerByte()F
+HSPLjava/nio/charset/CharsetDecoder;->charset()Ljava/nio/charset/Charset;
+HSPLjava/nio/charset/CharsetDecoder;->decode(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;
+HSPLjava/nio/charset/CharsetDecoder;->decode(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetDecoder;->decodeLoop(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetDecoder;->flush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetDecoder;->malformedInputAction()Ljava/nio/charset/CodingErrorAction;
+HSPLjava/nio/charset/CharsetDecoder;->maxCharsPerByte()F
+HSPLjava/nio/charset/CharsetDecoder;->onMalformedInput(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder;
+HSPLjava/nio/charset/CharsetDecoder;->onUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder;
+HSPLjava/nio/charset/CharsetDecoder;->replaceWith(Ljava/lang/String;)Ljava/nio/charset/CharsetDecoder;
+HSPLjava/nio/charset/CharsetDecoder;->replacement()Ljava/lang/String;
+HSPLjava/nio/charset/CharsetDecoder;->reset()Ljava/nio/charset/CharsetDecoder;
+HSPLjava/nio/charset/CharsetDecoder;->unmappableCharacterAction()Ljava/nio/charset/CodingErrorAction;
+HSPLjava/nio/charset/CharsetDecoderICU;-><init>(Ljava/nio/charset/Charset;FJ)V
+HSPLjava/nio/charset/CharsetDecoderICU;->decodeLoop(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetDecoderICU;->getArray(Ljava/nio/ByteBuffer;)I
+HSPLjava/nio/charset/CharsetDecoderICU;->getArray(Ljava/nio/CharBuffer;)I
+HSPLjava/nio/charset/CharsetDecoderICU;->implFlush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetDecoderICU;->implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V
+HSPLjava/nio/charset/CharsetDecoderICU;->implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V
+HSPLjava/nio/charset/CharsetDecoderICU;->implReplaceWith(Ljava/lang/String;)V
+HSPLjava/nio/charset/CharsetDecoderICU;->implReset()V
+HSPLjava/nio/charset/CharsetDecoderICU;->newInstance(Ljava/nio/charset/Charset;Ljava/lang/String;)Ljava/nio/charset/CharsetDecoderICU;
+HSPLjava/nio/charset/CharsetDecoderICU;->setPosition(Ljava/nio/ByteBuffer;)V
+HSPLjava/nio/charset/CharsetDecoderICU;->setPosition(Ljava/nio/CharBuffer;)V
+HSPLjava/nio/charset/CharsetDecoderICU;->updateCallback()V
+HSPLjava/nio/charset/CharsetEncoder;-><init>(Ljava/nio/charset/Charset;FF[BZ)V
+HSPLjava/nio/charset/CharsetEncoder;->averageBytesPerChar()F
+HSPLjava/nio/charset/CharsetEncoder;->charset()Ljava/nio/charset/Charset;
+HSPLjava/nio/charset/CharsetEncoder;->encode(Ljava/nio/CharBuffer;)Ljava/nio/ByteBuffer;
+HSPLjava/nio/charset/CharsetEncoder;->encode(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;Z)Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetEncoder;->encodeLoop(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetEncoder;->flush(Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetEncoder;->malformedInputAction()Ljava/nio/charset/CodingErrorAction;
+HSPLjava/nio/charset/CharsetEncoder;->maxBytesPerChar()F
+HSPLjava/nio/charset/CharsetEncoder;->onMalformedInput(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetEncoder;
+HSPLjava/nio/charset/CharsetEncoder;->onUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetEncoder;
+HSPLjava/nio/charset/CharsetEncoder;->replacement()[B
+HSPLjava/nio/charset/CharsetEncoder;->reset()Ljava/nio/charset/CharsetEncoder;
+HSPLjava/nio/charset/CharsetEncoder;->unmappableCharacterAction()Ljava/nio/charset/CodingErrorAction;
+HSPLjava/nio/charset/CharsetEncoderICU;-><init>(Ljava/nio/charset/Charset;FF[BJ)V
+HSPLjava/nio/charset/CharsetEncoderICU;->encodeLoop(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetEncoderICU;->getArray(Ljava/nio/ByteBuffer;)I
+HSPLjava/nio/charset/CharsetEncoderICU;->getArray(Ljava/nio/CharBuffer;)I
+HSPLjava/nio/charset/CharsetEncoderICU;->implFlush(Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetEncoderICU;->implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V
+HSPLjava/nio/charset/CharsetEncoderICU;->implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V
+HSPLjava/nio/charset/CharsetEncoderICU;->implReset()V
+HSPLjava/nio/charset/CharsetEncoderICU;->makeReplacement(Ljava/lang/String;J)[B
+HSPLjava/nio/charset/CharsetEncoderICU;->newInstance(Ljava/nio/charset/Charset;Ljava/lang/String;)Ljava/nio/charset/CharsetEncoderICU;
+HSPLjava/nio/charset/CharsetEncoderICU;->setPosition(Ljava/nio/ByteBuffer;)V
+HSPLjava/nio/charset/CharsetEncoderICU;->setPosition(Ljava/nio/CharBuffer;)V
+HSPLjava/nio/charset/CharsetEncoderICU;->updateCallback()V
+HSPLjava/nio/charset/CharsetICU;-><init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
+HSPLjava/nio/charset/CharsetICU;->newDecoder()Ljava/nio/charset/CharsetDecoder;
+HSPLjava/nio/charset/CharsetICU;->newEncoder()Ljava/nio/charset/CharsetEncoder;
+HSPLjava/nio/charset/CoderResult;->isError()Z
+HSPLjava/nio/charset/CoderResult;->isOverflow()Z
+HSPLjava/nio/charset/CoderResult;->isUnderflow()Z
+HSPLjava/nio/file/AccessMode;-><init>(Ljava/lang/String;I)V
+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/FileSystem;-><init>()V
+HSPLjava/nio/file/FileSystem;->close()V
+HSPLjava/nio/file/FileSystem;->getFileStores()Ljava/lang/Iterable;
+HSPLjava/nio/file/FileSystem;->getPath(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;
+HSPLjava/nio/file/FileSystem;->getPathMatcher(Ljava/lang/String;)Ljava/nio/file/PathMatcher;
+HSPLjava/nio/file/FileSystem;->getRootDirectories()Ljava/lang/Iterable;
+HSPLjava/nio/file/FileSystem;->getSeparator()Ljava/lang/String;
+HSPLjava/nio/file/FileSystem;->getUserPrincipalLookupService()Ljava/nio/file/attribute/UserPrincipalLookupService;
+HSPLjava/nio/file/FileSystem;->isOpen()Z
+HSPLjava/nio/file/FileSystem;->isReadOnly()Z
+HSPLjava/nio/file/FileSystem;->newWatchService()Ljava/nio/file/WatchService;
+HSPLjava/nio/file/FileSystem;->provider()Ljava/nio/file/spi/FileSystemProvider;
+HSPLjava/nio/file/FileSystem;->supportedFileAttributeViews()Ljava/util/Set;
+HSPLjava/nio/file/FileSystemException;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/nio/file/FileSystems$DefaultFileSystemHolder$1;-><init>()V
+HSPLjava/nio/file/FileSystems$DefaultFileSystemHolder$1;->run()Ljava/lang/Object;
+HSPLjava/nio/file/FileSystems$DefaultFileSystemHolder$1;->run()Ljava/nio/file/spi/FileSystemProvider;
+HSPLjava/nio/file/FileSystems$DefaultFileSystemHolder;->-wrap0()Ljava/nio/file/spi/FileSystemProvider;
+HSPLjava/nio/file/FileSystems$DefaultFileSystemHolder;->defaultFileSystem()Ljava/nio/file/FileSystem;
+HSPLjava/nio/file/FileSystems$DefaultFileSystemHolder;->getDefaultProvider()Ljava/nio/file/spi/FileSystemProvider;
+HSPLjava/nio/file/FileSystems;->getDefault()Ljava/nio/file/FileSystem;
+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
+HSPLjava/nio/file/Files;->provider(Ljava/nio/file/Path;)Ljava/nio/file/spi/FileSystemProvider;
+HSPLjava/nio/file/Files;->readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;
+HSPLjava/nio/file/LinkOption;-><init>(Ljava/lang/String;I)V
+HSPLjava/nio/file/Path;->compareTo(Ljava/nio/file/Path;)I
+HSPLjava/nio/file/Path;->endsWith(Ljava/lang/String;)Z
+HSPLjava/nio/file/Path;->endsWith(Ljava/nio/file/Path;)Z
+HSPLjava/nio/file/Path;->equals(Ljava/lang/Object;)Z
+HSPLjava/nio/file/Path;->getFileName()Ljava/nio/file/Path;
+HSPLjava/nio/file/Path;->getFileSystem()Ljava/nio/file/FileSystem;
+HSPLjava/nio/file/Path;->getName(I)Ljava/nio/file/Path;
+HSPLjava/nio/file/Path;->getNameCount()I
+HSPLjava/nio/file/Path;->getParent()Ljava/nio/file/Path;
+HSPLjava/nio/file/Path;->getRoot()Ljava/nio/file/Path;
+HSPLjava/nio/file/Path;->hashCode()I
+HSPLjava/nio/file/Path;->isAbsolute()Z
+HSPLjava/nio/file/Path;->iterator()Ljava/util/Iterator;
+HSPLjava/nio/file/Path;->normalize()Ljava/nio/file/Path;
+HSPLjava/nio/file/Path;->register(Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;)Ljava/nio/file/WatchKey;
+HSPLjava/nio/file/Path;->register(Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;[Ljava/nio/file/WatchEvent$Modifier;)Ljava/nio/file/WatchKey;
+HSPLjava/nio/file/Path;->relativize(Ljava/nio/file/Path;)Ljava/nio/file/Path;
+HSPLjava/nio/file/Path;->resolve(Ljava/lang/String;)Ljava/nio/file/Path;
+HSPLjava/nio/file/Path;->resolve(Ljava/nio/file/Path;)Ljava/nio/file/Path;
+HSPLjava/nio/file/Path;->resolveSibling(Ljava/lang/String;)Ljava/nio/file/Path;
+HSPLjava/nio/file/Path;->resolveSibling(Ljava/nio/file/Path;)Ljava/nio/file/Path;
+HSPLjava/nio/file/Path;->startsWith(Ljava/lang/String;)Z
+HSPLjava/nio/file/Path;->startsWith(Ljava/nio/file/Path;)Z
+HSPLjava/nio/file/Path;->subpath(II)Ljava/nio/file/Path;
+HSPLjava/nio/file/Path;->toAbsolutePath()Ljava/nio/file/Path;
+HSPLjava/nio/file/Path;->toFile()Ljava/io/File;
+HSPLjava/nio/file/Path;->toRealPath([Ljava/nio/file/LinkOption;)Ljava/nio/file/Path;
+HSPLjava/nio/file/Path;->toString()Ljava/lang/String;
+HSPLjava/nio/file/Path;->toUri()Ljava/net/URI;
+HSPLjava/nio/file/Paths;->get(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;
+HSPLjava/nio/file/StandardOpenOption;-><init>(Ljava/lang/String;I)V
+HSPLjava/nio/file/StandardOpenOption;->values()[Ljava/nio/file/StandardOpenOption;
+HSPLjava/nio/file/Watchable;->register(Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;)Ljava/nio/file/WatchKey;
+HSPLjava/nio/file/Watchable;->register(Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;[Ljava/nio/file/WatchEvent$Modifier;)Ljava/nio/file/WatchKey;
+HSPLjava/nio/file/attribute/AttributeView;->name()Ljava/lang/String;
+HSPLjava/nio/file/attribute/BasicFileAttributeView;->name()Ljava/lang/String;
+HSPLjava/nio/file/attribute/BasicFileAttributeView;->readAttributes()Ljava/nio/file/attribute/BasicFileAttributes;
+HSPLjava/nio/file/attribute/BasicFileAttributeView;->setTimes(Ljava/nio/file/attribute/FileTime;Ljava/nio/file/attribute/FileTime;Ljava/nio/file/attribute/FileTime;)V
+HSPLjava/nio/file/attribute/PosixFileAttributes;->group()Ljava/nio/file/attribute/GroupPrincipal;
+HSPLjava/nio/file/attribute/PosixFileAttributes;->owner()Ljava/nio/file/attribute/UserPrincipal;
+HSPLjava/nio/file/attribute/PosixFileAttributes;->permissions()Ljava/util/Set;
+HSPLjava/nio/file/spi/FileSystemProvider;-><init>()V
+HSPLjava/nio/file/spi/FileSystemProvider;-><init>(Ljava/lang/Void;)V
+HSPLjava/nio/file/spi/FileSystemProvider;->checkAccess(Ljava/nio/file/Path;[Ljava/nio/file/AccessMode;)V
+HSPLjava/nio/file/spi/FileSystemProvider;->checkPermission()Ljava/lang/Void;
+HSPLjava/nio/file/spi/FileSystemProvider;->copy(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)V
+HSPLjava/nio/file/spi/FileSystemProvider;->createDirectory(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)V
+HSPLjava/nio/file/spi/FileSystemProvider;->delete(Ljava/nio/file/Path;)V
+HSPLjava/nio/file/spi/FileSystemProvider;->getFileStore(Ljava/nio/file/Path;)Ljava/nio/file/FileStore;
+HSPLjava/nio/file/spi/FileSystemProvider;->getFileSystem(Ljava/net/URI;)Ljava/nio/file/FileSystem;
+HSPLjava/nio/file/spi/FileSystemProvider;->getPath(Ljava/net/URI;)Ljava/nio/file/Path;
+HSPLjava/nio/file/spi/FileSystemProvider;->getScheme()Ljava/lang/String;
+HSPLjava/nio/file/spi/FileSystemProvider;->isHidden(Ljava/nio/file/Path;)Z
+HSPLjava/nio/file/spi/FileSystemProvider;->isSameFile(Ljava/nio/file/Path;Ljava/nio/file/Path;)Z
+HSPLjava/nio/file/spi/FileSystemProvider;->move(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)V
+HSPLjava/nio/file/spi/FileSystemProvider;->newByteChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;
+HSPLjava/nio/file/spi/FileSystemProvider;->newDirectoryStream(Ljava/nio/file/Path;Ljava/nio/file/DirectoryStream$Filter;)Ljava/nio/file/DirectoryStream;
+HSPLjava/nio/file/spi/FileSystemProvider;->newFileSystem(Ljava/net/URI;Ljava/util/Map;)Ljava/nio/file/FileSystem;
+HSPLjava/nio/file/spi/FileSystemProvider;->readAttributes(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/LinkOption;)Ljava/util/Map;
+HSPLjava/nio/file/spi/FileSystemProvider;->setAttribute(Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/Object;[Ljava/nio/file/LinkOption;)V
+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;
+HSPLjava/security/AccessController;->getContext()Ljava/security/AccessControlContext;
+HSPLjava/security/AlgorithmConstraints;->permits(Ljava/util/Set;Ljava/lang/String;Ljava/security/AlgorithmParameters;)Z
+HSPLjava/security/AlgorithmConstraints;->permits(Ljava/util/Set;Ljava/lang/String;Ljava/security/Key;Ljava/security/AlgorithmParameters;)Z
+HSPLjava/security/AlgorithmConstraints;->permits(Ljava/util/Set;Ljava/security/Key;)Z
+HSPLjava/security/AlgorithmParameters;->getInstance(Ljava/lang/String;)Ljava/security/AlgorithmParameters;
+HSPLjava/security/BasicPermission;-><init>(Ljava/lang/String;)V
+HSPLjava/security/BasicPermission;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/security/CodeSigner;-><init>(Ljava/security/cert/CertPath;Ljava/security/Timestamp;)V
+HSPLjava/security/CodeSigner;->getSignerCertPath()Ljava/security/cert/CertPath;
+HSPLjava/security/CryptoPrimitive;-><init>(Ljava/lang/String;I)V
+HSPLjava/security/CryptoPrimitive;->values()[Ljava/security/CryptoPrimitive;
+HSPLjava/security/GeneralSecurityException;-><init>(Ljava/lang/String;)V
+HSPLjava/security/InvalidKeyException;-><init>(Ljava/lang/String;)V
+HSPLjava/security/Key;->getAlgorithm()Ljava/lang/String;
+HSPLjava/security/Key;->getEncoded()[B
+HSPLjava/security/Key;->getFormat()Ljava/lang/String;
+HSPLjava/security/KeyException;-><init>(Ljava/lang/String;)V
+HSPLjava/security/KeyFactory;-><init>(Ljava/lang/String;)V
+HSPLjava/security/KeyFactory;->generatePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
+HSPLjava/security/KeyFactory;->getInstance(Ljava/lang/String;)Ljava/security/KeyFactory;
+HSPLjava/security/KeyFactory;->nextSpi(Ljava/security/KeyFactorySpi;)Ljava/security/KeyFactorySpi;
+HSPLjava/security/KeyFactorySpi;-><init>()V
+HSPLjava/security/KeyStore$1;-><init>()V
+HSPLjava/security/KeyStore$1;->run()Ljava/lang/Object;
+HSPLjava/security/KeyStore$1;->run()Ljava/lang/String;
+HSPLjava/security/KeyStore;-><init>(Ljava/security/KeyStoreSpi;Ljava/security/Provider;Ljava/lang/String;)V
+HSPLjava/security/KeyStore;->aliases()Ljava/util/Enumeration;
+HSPLjava/security/KeyStore;->getCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;
+HSPLjava/security/KeyStore;->getDefaultType()Ljava/lang/String;
+HSPLjava/security/KeyStore;->getInstance(Ljava/lang/String;)Ljava/security/KeyStore;
+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
+HSPLjava/security/KeyStoreSpi;-><init>()V
+HSPLjava/security/KeyStoreSpi;->engineAliases()Ljava/util/Enumeration;
+HSPLjava/security/KeyStoreSpi;->engineContainsAlias(Ljava/lang/String;)Z
+HSPLjava/security/KeyStoreSpi;->engineDeleteEntry(Ljava/lang/String;)V
+HSPLjava/security/KeyStoreSpi;->engineGetCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;
+HSPLjava/security/KeyStoreSpi;->engineGetCertificateAlias(Ljava/security/cert/Certificate;)Ljava/lang/String;
+HSPLjava/security/KeyStoreSpi;->engineGetCertificateChain(Ljava/lang/String;)[Ljava/security/cert/Certificate;
+HSPLjava/security/KeyStoreSpi;->engineGetCreationDate(Ljava/lang/String;)Ljava/util/Date;
+HSPLjava/security/KeyStoreSpi;->engineGetKey(Ljava/lang/String;[C)Ljava/security/Key;
+HSPLjava/security/KeyStoreSpi;->engineIsCertificateEntry(Ljava/lang/String;)Z
+HSPLjava/security/KeyStoreSpi;->engineIsKeyEntry(Ljava/lang/String;)Z
+HSPLjava/security/KeyStoreSpi;->engineLoad(Ljava/io/InputStream;[C)V
+HSPLjava/security/KeyStoreSpi;->engineLoad(Ljava/security/KeyStore$LoadStoreParameter;)V
+HSPLjava/security/KeyStoreSpi;->engineSetCertificateEntry(Ljava/lang/String;Ljava/security/cert/Certificate;)V
+HSPLjava/security/KeyStoreSpi;->engineSetKeyEntry(Ljava/lang/String;Ljava/security/Key;[C[Ljava/security/cert/Certificate;)V
+HSPLjava/security/KeyStoreSpi;->engineSetKeyEntry(Ljava/lang/String;[B[Ljava/security/cert/Certificate;)V
+HSPLjava/security/KeyStoreSpi;->engineSize()I
+HSPLjava/security/KeyStoreSpi;->engineStore(Ljava/io/OutputStream;[C)V
+HSPLjava/security/MessageDigest$Delegate;-><init>(Ljava/security/MessageDigestSpi;Ljava/lang/String;)V
+HSPLjava/security/MessageDigest$Delegate;->clone()Ljava/lang/Object;
+HSPLjava/security/MessageDigest$Delegate;->engineDigest()[B
+HSPLjava/security/MessageDigest$Delegate;->engineDigest([BII)I
+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;->-get0(Ljava/security/MessageDigest;)Ljava/lang/String;
+HSPLjava/security/MessageDigest;->-get1(Ljava/security/MessageDigest;)Ljava/security/Provider;
+HSPLjava/security/MessageDigest;->-get2(Ljava/security/MessageDigest;)I
+HSPLjava/security/MessageDigest;->-set0(Ljava/security/MessageDigest;Ljava/security/Provider;)Ljava/security/Provider;
+HSPLjava/security/MessageDigest;->-set1(Ljava/security/MessageDigest;I)I
+HSPLjava/security/MessageDigest;-><init>(Ljava/lang/String;)V
+HSPLjava/security/MessageDigest;->digest()[B
+HSPLjava/security/MessageDigest;->digest([B)[B
+HSPLjava/security/MessageDigest;->digest([BII)I
+HSPLjava/security/MessageDigest;->getDigestLength()I
+HSPLjava/security/MessageDigest;->getInstance(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/Permission;-><init>(Ljava/lang/String;)V
+HSPLjava/security/PrivilegedExceptionAction;->run()Ljava/lang/Object;
+HSPLjava/security/Provider$Service;->-set0(Ljava/security/Provider$Service;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/security/Provider$Service;->-set1(Ljava/security/Provider$Service;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/security/Provider$Service;->-set2(Ljava/security/Provider$Service;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/security/Provider$Service;->-wrap0(Ljava/security/Provider$Service;)Z
+HSPLjava/security/Provider$Service;->-wrap2(Ljava/security/Provider$Service;Ljava/lang/String;)V
+HSPLjava/security/Provider$Service;-><init>(Ljava/security/Provider;)V
+HSPLjava/security/Provider$Service;-><init>(Ljava/security/Provider;Ljava/security/Provider$Service;)V
+HSPLjava/security/Provider$Service;->addAlias(Ljava/lang/String;)V
+HSPLjava/security/Provider$Service;->addAttribute(Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/security/Provider$Service;->getAlgorithm()Ljava/lang/String;
+HSPLjava/security/Provider$Service;->getAttribute(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/security/Provider$Service;->getClassName()Ljava/lang/String;
+HSPLjava/security/Provider$Service;->getImplClass()Ljava/lang/Class;
+HSPLjava/security/Provider$Service;->getKeyClass(Ljava/lang/String;)Ljava/lang/Class;
+HSPLjava/security/Provider$Service;->getProvider()Ljava/security/Provider;
+HSPLjava/security/Provider$Service;->getType()Ljava/lang/String;
+HSPLjava/security/Provider$Service;->hasKeyAttributes()Z
+HSPLjava/security/Provider$Service;->isValid()Z
+HSPLjava/security/Provider$Service;->newInstance(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/security/Provider$Service;->supportsKeyClass(Ljava/security/Key;)Z
+HSPLjava/security/Provider$Service;->supportsKeyFormat(Ljava/security/Key;)Z
+HSPLjava/security/Provider$Service;->supportsParameter(Ljava/lang/Object;)Z
+HSPLjava/security/Provider$ServiceKey;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLjava/security/Provider$ServiceKey;-><init>(Ljava/lang/String;Ljava/lang/String;ZLjava/security/Provider$ServiceKey;)V
+HSPLjava/security/Provider$ServiceKey;->equals(Ljava/lang/Object;)Z
+HSPLjava/security/Provider$ServiceKey;->hashCode()I
+HSPLjava/security/Provider$ServiceKey;->matches(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLjava/security/Provider$UString;-><init>(Ljava/lang/String;)V
+HSPLjava/security/Provider$UString;->equals(Ljava/lang/Object;)Z
+HSPLjava/security/Provider$UString;->hashCode()I
+HSPLjava/security/Provider;->-get0()Ljava/util/Map;
+HSPLjava/security/Provider;-><init>(Ljava/lang/String;DLjava/lang/String;)V
+HSPLjava/security/Provider;->check(Ljava/lang/String;)V
+HSPLjava/security/Provider;->checkInitialized()V
+HSPLjava/security/Provider;->checkLegacy(Ljava/lang/Object;)Z
+HSPLjava/security/Provider;->ensureLegacyParsed()V
+HSPLjava/security/Provider;->getEngineName(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/security/Provider;->getName()Ljava/lang/String;
+HSPLjava/security/Provider;->getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;
+HSPLjava/security/Provider;->getServices()Ljava/util/Set;
+HSPLjava/security/Provider;->getTypeAndAlgorithm(Ljava/lang/String;)[Ljava/lang/String;
+HSPLjava/security/Provider;->implPut(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/security/Provider;->parseLegacyPut(Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/security/Provider;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/security/Provider;->putId()V
+HSPLjava/security/Provider;->removeInvalidServices(Ljava/util/Map;)V
+HSPLjava/security/SecureRandom;-><init>()V
+HSPLjava/security/SecureRandom;-><init>(Ljava/security/SecureRandomSpi;Ljava/security/Provider;Ljava/lang/String;)V
+HSPLjava/security/SecureRandom;->getDefaultPRNG(Z[B)V
+HSPLjava/security/SecureRandom;->getInstance(Ljava/lang/String;)Ljava/security/SecureRandom;
+HSPLjava/security/SecureRandom;->getPrngAlgorithm()Ljava/lang/String;
+HSPLjava/security/SecureRandom;->getProvider()Ljava/security/Provider;
+HSPLjava/security/SecureRandom;->getSecureRandomSpi()Ljava/security/SecureRandomSpi;
+HSPLjava/security/SecureRandom;->next(I)I
+HSPLjava/security/SecureRandom;->nextBytes([B)V
+HSPLjava/security/SecureRandom;->setSeed(J)V
+HSPLjava/security/SecureRandom;->setSeed([B)V
+HSPLjava/security/SecureRandomSpi;-><init>()V
+HSPLjava/security/SecureRandomSpi;->engineGenerateSeed(I)[B
+HSPLjava/security/SecureRandomSpi;->engineNextBytes([B)V
+HSPLjava/security/SecureRandomSpi;->engineSetSeed([B)V
+HSPLjava/security/Security;->getImpl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/Object;
+HSPLjava/security/Security;->getImpl(Ljava/lang/String;Ljava/lang/String;Ljava/security/Provider;)[Ljava/lang/Object;
+HSPLjava/security/Security;->getProperty(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/security/Security;->getProvider(Ljava/lang/String;)Ljava/security/Provider;
+HSPLjava/security/Security;->getProviders()[Ljava/security/Provider;
+HSPLjava/security/Security;->getSpiClass(Ljava/lang/String;)Ljava/lang/Class;
+HSPLjava/security/Security;->getVersion()I
+HSPLjava/security/Security;->increaseVersion()V
+HSPLjava/security/Security;->insertProviderAt(Ljava/security/Provider;I)I
+HSPLjava/security/Security;->invalidateSMCache(Ljava/lang/String;)V
+HSPLjava/security/Security;->setProperty(Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/security/Signature$Delegate;-><init>(Ljava/lang/String;)V
+HSPLjava/security/Signature$Delegate;->chooseFirstProvider()V
+HSPLjava/security/Signature$Delegate;->chooseProvider(ILjava/security/Key;Ljava/security/SecureRandom;)V
+HSPLjava/security/Signature$Delegate;->engineInitVerify(Ljava/security/PublicKey;)V
+HSPLjava/security/Signature$Delegate;->engineUpdate(Ljava/nio/ByteBuffer;)V
+HSPLjava/security/Signature$Delegate;->engineUpdate([BII)V
+HSPLjava/security/Signature$Delegate;->engineVerify([B)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;->-get0(Ljava/security/Signature;)Ljava/lang/String;
+HSPLjava/security/Signature;->-wrap0(Ljava/security/Provider$Service;)Z
+HSPLjava/security/Signature;-><init>(Ljava/lang/String;)V
+HSPLjava/security/Signature;->getInstance(Ljava/lang/String;)Ljava/security/Signature;
+HSPLjava/security/Signature;->initVerify(Ljava/security/PublicKey;)V
+HSPLjava/security/Signature;->isSpi(Ljava/security/Provider$Service;)Z
+HSPLjava/security/Signature;->update(Ljava/nio/ByteBuffer;)V
+HSPLjava/security/Signature;->update([BII)V
+HSPLjava/security/Signature;->verify([B)Z
+HSPLjava/security/SignatureSpi;-><init>()V
+HSPLjava/security/SignatureSpi;->engineUpdate(Ljava/nio/ByteBuffer;)V
+HSPLjava/security/cert/CertPath;-><init>(Ljava/lang/String;)V
+HSPLjava/security/cert/CertPath;->getCertificates()Ljava/util/List;
+HSPLjava/security/cert/CertPath;->getEncoded()[B
+HSPLjava/security/cert/CertPath;->getEncoded(Ljava/lang/String;)[B
+HSPLjava/security/cert/CertPath;->getEncodings()Ljava/util/Iterator;
+HSPLjava/security/cert/CertPath;->getType()Ljava/lang/String;
+HSPLjava/security/cert/CertPathChecker;->check(Ljava/security/cert/Certificate;)V
+HSPLjava/security/cert/CertPathHelperImpl;-><init>()V
+HSPLjava/security/cert/CertPathHelperImpl;->initialize()V
+HSPLjava/security/cert/CertPathParameters;->clone()Ljava/lang/Object;
+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;->validate(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathValidatorResult;
+HSPLjava/security/cert/CertPathValidatorResult;->clone()Ljava/lang/Object;
+HSPLjava/security/cert/CertPathValidatorSpi;-><init>()V
+HSPLjava/security/cert/CertPathValidatorSpi;->engineValidate(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathValidatorResult;
+HSPLjava/security/cert/Certificate;-><init>(Ljava/lang/String;)V
+HSPLjava/security/cert/Certificate;->getEncoded()[B
+HSPLjava/security/cert/Certificate;->getPublicKey()Ljava/security/PublicKey;
+HSPLjava/security/cert/Certificate;->hashCode()I
+HSPLjava/security/cert/Certificate;->toString()Ljava/lang/String;
+HSPLjava/security/cert/Certificate;->verify(Ljava/security/PublicKey;)V
+HSPLjava/security/cert/Certificate;->verify(Ljava/security/PublicKey;Ljava/lang/String;)V
+HSPLjava/security/cert/CertificateFactory;-><init>(Ljava/security/cert/CertificateFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V
+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;->getInstance(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
+HSPLjava/security/cert/CertificateFactory;->getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/cert/CertificateFactory;
+HSPLjava/security/cert/CertificateFactorySpi;-><init>()V
+HSPLjava/security/cert/CertificateFactorySpi;->engineGenerateCRL(Ljava/io/InputStream;)Ljava/security/cert/CRL;
+HSPLjava/security/cert/CertificateFactorySpi;->engineGenerateCRLs(Ljava/io/InputStream;)Ljava/util/Collection;
+HSPLjava/security/cert/CertificateFactorySpi;->engineGenerateCertificate(Ljava/io/InputStream;)Ljava/security/cert/Certificate;
+HSPLjava/security/cert/CertificateFactorySpi;->engineGenerateCertificates(Ljava/io/InputStream;)Ljava/util/Collection;
+HSPLjava/security/cert/Extension;->getId()Ljava/lang/String;
+HSPLjava/security/cert/Extension;->getValue()[B
+HSPLjava/security/cert/Extension;->isCritical()Z
+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
+HSPLjava/security/cert/PKIXParameters;-><init>(Ljava/util/Set;)V
+HSPLjava/security/cert/PKIXParameters;->addCertPathChecker(Ljava/security/cert/PKIXCertPathChecker;)V
+HSPLjava/security/cert/PKIXParameters;->getCertPathCheckers()Ljava/util/List;
+HSPLjava/security/cert/PKIXParameters;->getDate()Ljava/util/Date;
+HSPLjava/security/cert/PKIXParameters;->getInitialPolicies()Ljava/util/Set;
+HSPLjava/security/cert/PKIXParameters;->getPolicyQualifiersRejected()Z
+HSPLjava/security/cert/PKIXParameters;->getSigProvider()Ljava/lang/String;
+HSPLjava/security/cert/PKIXParameters;->getTargetCertConstraints()Ljava/security/cert/CertSelector;
+HSPLjava/security/cert/PKIXParameters;->getTrustAnchors()Ljava/util/Set;
+HSPLjava/security/cert/PKIXParameters;->isAnyPolicyInhibited()Z
+HSPLjava/security/cert/PKIXParameters;->isExplicitPolicyRequired()Z
+HSPLjava/security/cert/PKIXParameters;->isPolicyMappingInhibited()Z
+HSPLjava/security/cert/PKIXParameters;->isRevocationEnabled()Z
+HSPLjava/security/cert/PKIXParameters;->setRevocationEnabled(Z)V
+HSPLjava/security/cert/PKIXParameters;->setTrustAnchors(Ljava/util/Set;)V
+HSPLjava/security/cert/PolicyNode;->getChildren()Ljava/util/Iterator;
+HSPLjava/security/cert/PolicyNode;->getDepth()I
+HSPLjava/security/cert/PolicyNode;->getExpectedPolicies()Ljava/util/Set;
+HSPLjava/security/cert/PolicyNode;->getParent()Ljava/security/cert/PolicyNode;
+HSPLjava/security/cert/PolicyNode;->getPolicyQualifiers()Ljava/util/Set;
+HSPLjava/security/cert/PolicyNode;->getValidPolicy()Ljava/lang/String;
+HSPLjava/security/cert/PolicyNode;->isCritical()Z
+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
+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
+HSPLjava/security/cert/X509CertSelector;->matchExtendedKeyUsage(Ljava/security/cert/X509Certificate;)Z
+HSPLjava/security/cert/X509CertSelector;->matchKeyUsage(Ljava/security/cert/X509Certificate;)Z
+HSPLjava/security/cert/X509CertSelector;->matchNameConstraints(Ljava/security/cert/X509Certificate;)Z
+HSPLjava/security/cert/X509CertSelector;->matchPathToNames(Ljava/security/cert/X509Certificate;)Z
+HSPLjava/security/cert/X509CertSelector;->matchPolicy(Ljava/security/cert/X509Certificate;)Z
+HSPLjava/security/cert/X509CertSelector;->matchPrivateKeyValid(Ljava/security/cert/X509Certificate;)Z
+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
+HSPLjava/security/cert/X509CertSelector;->setSubject(Ljavax/security/auth/x500/X500Principal;)V
+HSPLjava/security/cert/X509Certificate;-><init>()V
+HSPLjava/security/cert/X509Certificate;->checkValidity()V
+HSPLjava/security/cert/X509Certificate;->checkValidity(Ljava/util/Date;)V
+HSPLjava/security/cert/X509Certificate;->getBasicConstraints()I
+HSPLjava/security/cert/X509Certificate;->getIssuerDN()Ljava/security/Principal;
+HSPLjava/security/cert/X509Certificate;->getIssuerUniqueID()[Z
+HSPLjava/security/cert/X509Certificate;->getKeyUsage()[Z
+HSPLjava/security/cert/X509Certificate;->getNotAfter()Ljava/util/Date;
+HSPLjava/security/cert/X509Certificate;->getNotBefore()Ljava/util/Date;
+HSPLjava/security/cert/X509Certificate;->getSerialNumber()Ljava/math/BigInteger;
+HSPLjava/security/cert/X509Certificate;->getSigAlgName()Ljava/lang/String;
+HSPLjava/security/cert/X509Certificate;->getSigAlgOID()Ljava/lang/String;
+HSPLjava/security/cert/X509Certificate;->getSigAlgParams()[B
+HSPLjava/security/cert/X509Certificate;->getSignature()[B
+HSPLjava/security/cert/X509Certificate;->getSubjectDN()Ljava/security/Principal;
+HSPLjava/security/cert/X509Certificate;->getSubjectUniqueID()[Z
+HSPLjava/security/cert/X509Certificate;->getTBSCertificate()[B
+HSPLjava/security/cert/X509Certificate;->getVersion()I
+HSPLjava/security/cert/X509Extension;->getCriticalExtensionOIDs()Ljava/util/Set;
+HSPLjava/security/cert/X509Extension;->getExtensionValue(Ljava/lang/String;)[B
+HSPLjava/security/cert/X509Extension;->getNonCriticalExtensionOIDs()Ljava/util/Set;
+HSPLjava/security/cert/X509Extension;->hasUnsupportedCriticalExtension()Z
+HSPLjava/security/interfaces/DSAKey;->getParams()Ljava/security/interfaces/DSAParams;
+HSPLjava/security/interfaces/DSAParams;->getG()Ljava/math/BigInteger;
+HSPLjava/security/interfaces/DSAParams;->getP()Ljava/math/BigInteger;
+HSPLjava/security/interfaces/DSAParams;->getQ()Ljava/math/BigInteger;
+HSPLjava/security/interfaces/DSAPublicKey;->getY()Ljava/math/BigInteger;
+HSPLjava/security/interfaces/ECKey;->getParams()Ljava/security/spec/ECParameterSpec;
+HSPLjava/security/interfaces/ECPublicKey;->getW()Ljava/security/spec/ECPoint;
+HSPLjava/security/interfaces/RSAKey;->getModulus()Ljava/math/BigInteger;
+HSPLjava/security/interfaces/RSAPrivateKey;->getPrivateExponent()Ljava/math/BigInteger;
+HSPLjava/security/interfaces/RSAPublicKey;->getPublicExponent()Ljava/math/BigInteger;
+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/ECField;->getFieldSize()I
+HSPLjava/security/spec/ECFieldFp;-><init>(Ljava/math/BigInteger;)V
+HSPLjava/security/spec/ECFieldFp;->getFieldSize()I
+HSPLjava/security/spec/ECFieldFp;->getP()Ljava/math/BigInteger;
+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;->getOrder()Ljava/math/BigInteger;
+HSPLjava/security/spec/ECParameterSpec;->setCurveName(Ljava/lang/String;)V
+HSPLjava/security/spec/ECPoint;-><init>()V
+HSPLjava/security/spec/ECPoint;-><init>(Ljava/math/BigInteger;Ljava/math/BigInteger;)V
+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;->getField()Ljava/security/spec/ECField;
+HSPLjava/security/spec/EncodedKeySpec;-><init>([B)V
+HSPLjava/security/spec/EncodedKeySpec;->getEncoded()[B
+HSPLjava/security/spec/EncodedKeySpec;->getFormat()Ljava/lang/String;
+HSPLjava/security/spec/InvalidKeySpecException;-><init>(Ljava/lang/String;)V
+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/BreakIterator;-><init>()V
+HSPLjava/text/BreakIterator;->current()I
+HSPLjava/text/BreakIterator;->first()I
+HSPLjava/text/BreakIterator;->following(I)I
+HSPLjava/text/BreakIterator;->getText()Ljava/text/CharacterIterator;
+HSPLjava/text/BreakIterator;->getWordInstance()Ljava/text/BreakIterator;
+HSPLjava/text/BreakIterator;->getWordInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;
+HSPLjava/text/BreakIterator;->last()I
+HSPLjava/text/BreakIterator;->next()I
+HSPLjava/text/BreakIterator;->next(I)I
+HSPLjava/text/BreakIterator;->previous()I
+HSPLjava/text/BreakIterator;->setText(Ljava/text/CharacterIterator;)V
+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;
+HSPLjava/text/CharacterIterator;->clone()Ljava/lang/Object;
+HSPLjava/text/CharacterIterator;->current()C
+HSPLjava/text/CharacterIterator;->first()C
+HSPLjava/text/CharacterIterator;->getBeginIndex()I
+HSPLjava/text/CharacterIterator;->getEndIndex()I
+HSPLjava/text/CharacterIterator;->getIndex()I
+HSPLjava/text/CharacterIterator;->last()C
+HSPLjava/text/CharacterIterator;->next()C
+HSPLjava/text/CharacterIterator;->previous()C
+HSPLjava/text/CharacterIterator;->setIndex(I)C
+HSPLjava/text/Collator;-><init>(Landroid/icu/text/Collator;)V
+HSPLjava/text/Collator;->compare(Ljava/lang/String;Ljava/lang/String;)I
+HSPLjava/text/Collator;->getCollationKey(Ljava/lang/String;)Ljava/text/CollationKey;
+HSPLjava/text/Collator;->getInstance()Ljava/text/Collator;
+HSPLjava/text/Collator;->getInstance(Ljava/util/Locale;)Ljava/text/Collator;
+HSPLjava/text/Collator;->hashCode()I
+HSPLjava/text/Collator;->setStrength(I)V
+HSPLjava/text/DateFormat$Field;-><init>(Ljava/lang/String;I)V
+HSPLjava/text/DateFormat;-><init>()V
+HSPLjava/text/DateFormat;->format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLjava/text/DateFormat;->format(Ljava/util/Date;)Ljava/lang/String;
+HSPLjava/text/DateFormat;->format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+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;->getTimeInstance(I)Ljava/text/DateFormat;
+HSPLjava/text/DateFormat;->getTimeInstance(ILjava/util/Locale;)Ljava/text/DateFormat;
+HSPLjava/text/DateFormat;->getTimeZone()Ljava/util/TimeZone;
+HSPLjava/text/DateFormat;->parse(Ljava/lang/String;)Ljava/util/Date;
+HSPLjava/text/DateFormat;->parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/util/Date;
+HSPLjava/text/DateFormat;->set24HourTimePref(Ljava/lang/Boolean;)V
+HSPLjava/text/DateFormat;->setTimeZone(Ljava/util/TimeZone;)V
+HSPLjava/text/DateFormatSymbols;-><init>()V
+HSPLjava/text/DateFormatSymbols;-><init>(Ljava/util/Locale;)V
+HSPLjava/text/DateFormatSymbols;->copyMembers(Ljava/text/DateFormatSymbols;Ljava/text/DateFormatSymbols;)V
+HSPLjava/text/DateFormatSymbols;->getAmPmStrings()[Ljava/lang/String;
+HSPLjava/text/DateFormatSymbols;->getCachedInstance(Ljava/util/Locale;)Ljava/text/DateFormatSymbols;
+HSPLjava/text/DateFormatSymbols;->getInstanceRef(Ljava/util/Locale;)Ljava/text/DateFormatSymbols;
+HSPLjava/text/DateFormatSymbols;->getLocalPatternChars()Ljava/lang/String;
+HSPLjava/text/DateFormatSymbols;->getMonths()[Ljava/lang/String;
+HSPLjava/text/DateFormatSymbols;->getShortMonths()[Ljava/lang/String;
+HSPLjava/text/DateFormatSymbols;->getShortStandAloneMonths()[Ljava/lang/String;
+HSPLjava/text/DateFormatSymbols;->getShortWeekdays()[Ljava/lang/String;
+HSPLjava/text/DateFormatSymbols;->getWeekdays()[Ljava/lang/String;
+HSPLjava/text/DateFormatSymbols;->initializeData(Ljava/util/Locale;)V
+HSPLjava/text/DateFormatSymbols;->initializeSupplementaryData(Llibcore/icu/LocaleData;)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;
+HSPLjava/text/DecimalFormat;->getDecimalFormatSymbols()Ljava/text/DecimalFormatSymbols;
+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;->init(Ljava/lang/String;)V
+HSPLjava/text/DecimalFormat;->isParseBigDecimal()Z
+HSPLjava/text/DecimalFormat;->isParseIntegerOnly()Z
+HSPLjava/text/DecimalFormat;->parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;
+HSPLjava/text/DecimalFormat;->setDecimalSeparatorAlwaysShown(Z)V
+HSPLjava/text/DecimalFormat;->setGroupingUsed(Z)V
+HSPLjava/text/DecimalFormat;->setMaximumFractionDigits(I)V
+HSPLjava/text/DecimalFormat;->setMaximumIntegerDigits(I)V
+HSPLjava/text/DecimalFormat;->setMinimumFractionDigits(I)V
+HSPLjava/text/DecimalFormat;->setMinimumIntegerDigits(I)V
+HSPLjava/text/DecimalFormat;->setParseIntegerOnly(Z)V
+HSPLjava/text/DecimalFormat;->toPattern()Ljava/lang/String;
+HSPLjava/text/DecimalFormat;->updateFieldsFromIcu()V
+HSPLjava/text/DecimalFormatSymbols;-><init>(Ljava/util/Locale;)V
+HSPLjava/text/DecimalFormatSymbols;->clone()Ljava/lang/Object;
+HSPLjava/text/DecimalFormatSymbols;->fromIcuInstance(Landroid/icu/text/DecimalFormatSymbols;)Ljava/text/DecimalFormatSymbols;
+HSPLjava/text/DecimalFormatSymbols;->getDecimalSeparator()C
+HSPLjava/text/DecimalFormatSymbols;->getGroupingSeparator()C
+HSPLjava/text/DecimalFormatSymbols;->getIcuDecimalFormatSymbols()Landroid/icu/text/DecimalFormatSymbols;
+HSPLjava/text/DecimalFormatSymbols;->getInstance()Ljava/text/DecimalFormatSymbols;
+HSPLjava/text/DecimalFormatSymbols;->getInstance(Ljava/util/Locale;)Ljava/text/DecimalFormatSymbols;
+HSPLjava/text/DecimalFormatSymbols;->getZeroDigit()C
+HSPLjava/text/DecimalFormatSymbols;->initialize(Ljava/util/Locale;)V
+HSPLjava/text/DecimalFormatSymbols;->maybeStripMarkers(Ljava/lang/String;C)C
+HSPLjava/text/DecimalFormatSymbols;->setCurrency(Ljava/util/Currency;)V
+HSPLjava/text/DecimalFormatSymbols;->setCurrencySymbol(Ljava/lang/String;)V
+HSPLjava/text/DecimalFormatSymbols;->setDecimalSeparator(C)V
+HSPLjava/text/DecimalFormatSymbols;->setDigit(C)V
+HSPLjava/text/DecimalFormatSymbols;->setExponentSeparator(Ljava/lang/String;)V
+HSPLjava/text/DecimalFormatSymbols;->setGroupingSeparator(C)V
+HSPLjava/text/DecimalFormatSymbols;->setInfinity(Ljava/lang/String;)V
+HSPLjava/text/DecimalFormatSymbols;->setInternationalCurrencySymbol(Ljava/lang/String;)V
+HSPLjava/text/DecimalFormatSymbols;->setMinusSign(C)V
+HSPLjava/text/DecimalFormatSymbols;->setMonetaryDecimalSeparator(C)V
+HSPLjava/text/DecimalFormatSymbols;->setNaN(Ljava/lang/String;)V
+HSPLjava/text/DecimalFormatSymbols;->setPatternSeparator(C)V
+HSPLjava/text/DecimalFormatSymbols;->setPerMill(C)V
+HSPLjava/text/DecimalFormatSymbols;->setPercent(C)V
+HSPLjava/text/DecimalFormatSymbols;->setZeroDigit(C)V
+HSPLjava/text/DontCareFieldPosition$1;-><init>(Ljava/text/DontCareFieldPosition;)V
+HSPLjava/text/DontCareFieldPosition$1;->formatted(ILjava/text/Format$Field;Ljava/lang/Object;IILjava/lang/StringBuffer;)V
+HSPLjava/text/DontCareFieldPosition;-><init>()V
+HSPLjava/text/DontCareFieldPosition;->getFieldDelegate()Ljava/text/Format$FieldDelegate;
+HSPLjava/text/FieldPosition$Delegate;-><init>(Ljava/text/FieldPosition;)V
+HSPLjava/text/FieldPosition$Delegate;-><init>(Ljava/text/FieldPosition;Ljava/text/FieldPosition$Delegate;)V
+HSPLjava/text/FieldPosition$Delegate;->formatted(ILjava/text/Format$Field;Ljava/lang/Object;IILjava/lang/StringBuffer;)V
+HSPLjava/text/FieldPosition;->-wrap1(Ljava/text/FieldPosition;Ljava/text/Format$Field;I)Z
+HSPLjava/text/FieldPosition;-><init>(I)V
+HSPLjava/text/FieldPosition;-><init>(Ljava/text/Format$Field;I)V
+HSPLjava/text/FieldPosition;->getBeginIndex()I
+HSPLjava/text/FieldPosition;->getEndIndex()I
+HSPLjava/text/FieldPosition;->getField()I
+HSPLjava/text/FieldPosition;->getFieldAttribute()Ljava/text/Format$Field;
+HSPLjava/text/FieldPosition;->getFieldDelegate()Ljava/text/Format$FieldDelegate;
+HSPLjava/text/FieldPosition;->matchesField(Ljava/text/Format$Field;I)Z
+HSPLjava/text/FieldPosition;->setBeginIndex(I)V
+HSPLjava/text/FieldPosition;->setEndIndex(I)V
+HSPLjava/text/Format$Field;-><init>(Ljava/lang/String;)V
+HSPLjava/text/Format$FieldDelegate;->formatted(ILjava/text/Format$Field;Ljava/lang/Object;IILjava/lang/StringBuffer;)V
+HSPLjava/text/Format$FieldDelegate;->formatted(Ljava/text/Format$Field;Ljava/lang/Object;IILjava/lang/StringBuffer;)V
+HSPLjava/text/Format;-><init>()V
+HSPLjava/text/Format;->clone()Ljava/lang/Object;
+HSPLjava/text/Format;->format(Ljava/lang/Object;)Ljava/lang/String;
+HSPLjava/text/Format;->format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLjava/text/Format;->parseObject(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Object;
+HSPLjava/text/IcuIteratorWrapper;-><init>(Landroid/icu/text/BreakIterator;)V
+HSPLjava/text/MessageFormat$Field;-><init>(Ljava/lang/String;)V
+HSPLjava/text/MessageFormat;-><init>(Ljava/lang/String;)V
+HSPLjava/text/MessageFormat;->applyPattern(Ljava/lang/String;)V
+HSPLjava/text/MessageFormat;->format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLjava/text/MessageFormat;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
+HSPLjava/text/MessageFormat;->makeFormat(II[Ljava/lang/StringBuilder;)V
+HSPLjava/text/MessageFormat;->subformat([Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Ljava/util/List;)Ljava/lang/StringBuffer;
+HSPLjava/text/Normalizer$Form;->-get0(Ljava/text/Normalizer$Form;)Landroid/icu/text/Normalizer$Mode;
+HSPLjava/text/Normalizer$Form;-><init>(Ljava/lang/String;ILandroid/icu/text/Normalizer$Mode;)V
+HSPLjava/text/Normalizer;->normalize(Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Ljava/lang/String;
+HSPLjava/text/NumberFormat;-><init>()V
+HSPLjava/text/NumberFormat;->clone()Ljava/lang/Object;
+HSPLjava/text/NumberFormat;->format(D)Ljava/lang/String;
+HSPLjava/text/NumberFormat;->format(DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLjava/text/NumberFormat;->format(J)Ljava/lang/String;
+HSPLjava/text/NumberFormat;->format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+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;->getPercentInstance()Ljava/text/NumberFormat;
+HSPLjava/text/NumberFormat;->parse(Ljava/lang/String;Ljava/text/ParsePosition;)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;->getIndex()I
+HSPLjava/text/ParsePosition;->setIndex(I)V
+HSPLjava/text/RuleBasedCollator;-><init>(Landroid/icu/text/RuleBasedCollator;)V
+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;->checkNegativeNumberExpression()V
+HSPLjava/text/SimpleDateFormat;->compile(Ljava/lang/String;)[C
+HSPLjava/text/SimpleDateFormat;->encode(IILjava/lang/StringBuilder;)V
+HSPLjava/text/SimpleDateFormat;->format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLjava/text/SimpleDateFormat;->format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/Format$FieldDelegate;)Ljava/lang/StringBuffer;
+HSPLjava/text/SimpleDateFormat;->formatMonth(IIILjava/lang/StringBuffer;ZZ)Ljava/lang/String;
+HSPLjava/text/SimpleDateFormat;->formatWeekday(IIZZ)Ljava/lang/String;
+HSPLjava/text/SimpleDateFormat;->getCalendarName()Ljava/lang/String;
+HSPLjava/text/SimpleDateFormat;->initialize(Ljava/util/Locale;)V
+HSPLjava/text/SimpleDateFormat;->initializeCalendar(Ljava/util/Locale;)V
+HSPLjava/text/SimpleDateFormat;->initializeDefaultCentury()V
+HSPLjava/text/SimpleDateFormat;->isGregorianCalendar()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;->toLocalizedPattern()Ljava/lang/String;
+HSPLjava/text/SimpleDateFormat;->toPattern()Ljava/lang/String;
+HSPLjava/text/SimpleDateFormat;->translatePattern(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)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/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;->getZone()Ljava/time/ZoneId;
+HSPLjava/time/Clock;->instant()Ljava/time/Instant;
+HSPLjava/time/Clock;->systemDefaultZone()Ljava/time/Clock;
+HSPLjava/time/Clock;->withZone(Ljava/time/ZoneId;)Ljava/time/Clock;
+HSPLjava/time/DayOfWeek;-><init>(Ljava/lang/String;I)V
+HSPLjava/time/DayOfWeek;->getValue()I
+HSPLjava/time/DayOfWeek;->of(I)Ljava/time/DayOfWeek;
+HSPLjava/time/DayOfWeek;->plus(J)Ljava/time/DayOfWeek;
+HSPLjava/time/DayOfWeek;->values()[Ljava/time/DayOfWeek;
+HSPLjava/time/Duration;-><init>(JI)V
+HSPLjava/time/Duration;->create(JI)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;
+HSPLjava/time/Instant;-><init>(JI)V
+HSPLjava/time/Instant;->create(JI)Ljava/time/Instant;
+HSPLjava/time/Instant;->getEpochSecond()J
+HSPLjava/time/Instant;->getNano()I
+HSPLjava/time/Instant;->ofEpochMilli(J)Ljava/time/Instant;
+HSPLjava/time/Instant;->ofEpochSecond(JJ)Ljava/time/Instant;
+HSPLjava/time/LocalDate;->-getjava-time-temporal-ChronoFieldSwitchesValues()[I
+HSPLjava/time/LocalDate;->-getjava-time-temporal-ChronoUnitSwitchesValues()[I
+HSPLjava/time/LocalDate;-><init>(III)V
+HSPLjava/time/LocalDate;->create(III)Ljava/time/LocalDate;
+HSPLjava/time/LocalDate;->get(Ljava/time/temporal/TemporalField;)I
+HSPLjava/time/LocalDate;->get0(Ljava/time/temporal/TemporalField;)I
+HSPLjava/time/LocalDate;->getDayOfWeek()Ljava/time/DayOfWeek;
+HSPLjava/time/LocalDate;->getYear()I
+HSPLjava/time/LocalDate;->isLeapYear()Z
+HSPLjava/time/LocalDate;->of(III)Ljava/time/LocalDate;
+HSPLjava/time/LocalDate;->of(ILjava/time/Month;I)Ljava/time/LocalDate;
+HSPLjava/time/LocalDate;->ofEpochDay(J)Ljava/time/LocalDate;
+HSPLjava/time/LocalDate;->plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDate;
+HSPLjava/time/LocalDate;->plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;
+HSPLjava/time/LocalDate;->plusDays(J)Ljava/time/LocalDate;
+HSPLjava/time/LocalDate;->toEpochDay()J
+HSPLjava/time/LocalDate;->toString()Ljava/lang/String;
+HSPLjava/time/LocalDate;->with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/LocalDate;
+HSPLjava/time/LocalDateTime;-><init>(Ljava/time/LocalDate;Ljava/time/LocalTime;)V
+HSPLjava/time/LocalDateTime;->now()Ljava/time/LocalDateTime;
+HSPLjava/time/LocalDateTime;->now(Ljava/time/Clock;)Ljava/time/LocalDateTime;
+HSPLjava/time/LocalDateTime;->of(Ljava/time/LocalDate;Ljava/time/LocalTime;)Ljava/time/LocalDateTime;
+HSPLjava/time/LocalDateTime;->ofEpochSecond(JILjava/time/ZoneOffset;)Ljava/time/LocalDateTime;
+HSPLjava/time/LocalDateTime;->plusSeconds(J)Ljava/time/LocalDateTime;
+HSPLjava/time/LocalDateTime;->plusWithOverflow(Ljava/time/LocalDate;JJJJI)Ljava/time/LocalDateTime;
+HSPLjava/time/LocalDateTime;->toLocalDate()Ljava/time/LocalDate;
+HSPLjava/time/LocalDateTime;->toLocalDate()Ljava/time/chrono/ChronoLocalDate;
+HSPLjava/time/LocalDateTime;->toLocalTime()Ljava/time/LocalTime;
+HSPLjava/time/LocalDateTime;->toString()Ljava/lang/String;
+HSPLjava/time/LocalDateTime;->with(Ljava/time/LocalDate;Ljava/time/LocalTime;)Ljava/time/LocalDateTime;
+HSPLjava/time/LocalTime;-><init>(IIII)V
+HSPLjava/time/LocalTime;->create(IIII)Ljava/time/LocalTime;
+HSPLjava/time/LocalTime;->ofNanoOfDay(J)Ljava/time/LocalTime;
+HSPLjava/time/LocalTime;->ofSecondOfDay(J)Ljava/time/LocalTime;
+HSPLjava/time/LocalTime;->toNanoOfDay()J
+HSPLjava/time/LocalTime;->toSecondOfDay()I
+HSPLjava/time/LocalTime;->toString()Ljava/lang/String;
+HSPLjava/time/Month;-><init>(Ljava/lang/String;I)V
+HSPLjava/time/Month;->getValue()I
+HSPLjava/time/Month;->plus(J)Ljava/time/Month;
+HSPLjava/time/Month;->values()[Ljava/time/Month;
+HSPLjava/time/ZoneId;-><init>()V
+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/ZoneOffset;-><init>(I)V
+HSPLjava/time/ZoneOffset;->buildId(I)Ljava/lang/String;
+HSPLjava/time/ZoneOffset;->getId()Ljava/lang/String;
+HSPLjava/time/ZoneOffset;->getTotalSeconds()I
+HSPLjava/time/ZoneOffset;->ofTotalSeconds(I)Ljava/time/ZoneOffset;
+HSPLjava/time/ZoneRegion;-><init>(Ljava/lang/String;Ljava/time/zone/ZoneRules;)V
+HSPLjava/time/ZoneRegion;->checkName(Ljava/lang/String;)V
+HSPLjava/time/ZoneRegion;->getRules()Ljava/time/zone/ZoneRules;
+HSPLjava/time/ZoneRegion;->ofId(Ljava/lang/String;Z)Ljava/time/ZoneRegion;
+HSPLjava/time/chrono/-$Lambda$2u9I1kadVYC2Q_h8lznNWkqzo1s;-><init>(B)V
+HSPLjava/time/chrono/AbstractChronology;-><init>()V
+HSPLjava/time/chrono/ChronoLocalDate;->equals(Ljava/lang/Object;)Z
+HSPLjava/time/chrono/ChronoLocalDate;->getChronology()Ljava/time/chrono/Chronology;
+HSPLjava/time/chrono/ChronoLocalDate;->hashCode()I
+HSPLjava/time/chrono/ChronoLocalDate;->lengthOfMonth()I
+HSPLjava/time/chrono/ChronoLocalDate;->toString()Ljava/lang/String;
+HSPLjava/time/chrono/ChronoLocalDate;->until(Ljava/time/chrono/ChronoLocalDate;)Ljava/time/chrono/ChronoPeriod;
+HSPLjava/time/chrono/ChronoLocalDate;->until(Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalUnit;)J
+HSPLjava/time/chrono/ChronoLocalDateTime;->atZone(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;
+HSPLjava/time/chrono/ChronoLocalDateTime;->equals(Ljava/lang/Object;)Z
+HSPLjava/time/chrono/ChronoLocalDateTime;->hashCode()I
+HSPLjava/time/chrono/ChronoLocalDateTime;->isSupported(Ljava/time/temporal/TemporalField;)Z
+HSPLjava/time/chrono/ChronoLocalDateTime;->plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoLocalDateTime;
+HSPLjava/time/chrono/ChronoLocalDateTime;->toEpochSecond(Ljava/time/ZoneOffset;)J
+HSPLjava/time/chrono/ChronoLocalDateTime;->toLocalDate()Ljava/time/chrono/ChronoLocalDate;
+HSPLjava/time/chrono/ChronoLocalDateTime;->toLocalTime()Ljava/time/LocalTime;
+HSPLjava/time/chrono/ChronoLocalDateTime;->toString()Ljava/lang/String;
+HSPLjava/time/chrono/ChronoLocalDateTime;->with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ChronoLocalDateTime;
+HSPLjava/time/chrono/Chronology;->compareTo(Ljava/time/chrono/Chronology;)I
+HSPLjava/time/chrono/Chronology;->date(III)Ljava/time/chrono/ChronoLocalDate;
+HSPLjava/time/chrono/Chronology;->date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoLocalDate;
+HSPLjava/time/chrono/Chronology;->dateEpochDay(J)Ljava/time/chrono/ChronoLocalDate;
+HSPLjava/time/chrono/Chronology;->dateYearDay(II)Ljava/time/chrono/ChronoLocalDate;
+HSPLjava/time/chrono/Chronology;->equals(Ljava/lang/Object;)Z
+HSPLjava/time/chrono/Chronology;->eraOf(I)Ljava/time/chrono/Era;
+HSPLjava/time/chrono/Chronology;->eras()Ljava/util/List;
+HSPLjava/time/chrono/Chronology;->getCalendarType()Ljava/lang/String;
+HSPLjava/time/chrono/Chronology;->getId()Ljava/lang/String;
+HSPLjava/time/chrono/Chronology;->hashCode()I
+HSPLjava/time/chrono/Chronology;->isLeapYear(J)Z
+HSPLjava/time/chrono/Chronology;->prolepticYear(Ljava/time/chrono/Era;I)I
+HSPLjava/time/chrono/Chronology;->range(Ljava/time/temporal/ChronoField;)Ljava/time/temporal/ValueRange;
+HSPLjava/time/chrono/Chronology;->resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/ChronoLocalDate;
+HSPLjava/time/chrono/Chronology;->toString()Ljava/lang/String;
+HSPLjava/time/chrono/IsoChronology;-><init>()V
+HSPLjava/time/chrono/IsoChronology;->isLeapYear(J)Z
+HSPLjava/time/temporal/-$Lambda$OLNcPvjff81GnHHsYVRY4mMpF30$2;->$m$1(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;
+HSPLjava/time/temporal/-$Lambda$OLNcPvjff81GnHHsYVRY4mMpF30$2;-><init>(BI)V
+HSPLjava/time/temporal/-$Lambda$OLNcPvjff81GnHHsYVRY4mMpF30$2;->adjustInto(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;
+HSPLjava/time/temporal/ChronoField;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/time/temporal/TemporalUnit;Ljava/time/temporal/TemporalUnit;Ljava/time/temporal/ValueRange;)V
+HSPLjava/time/temporal/ChronoField;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/time/temporal/TemporalUnit;Ljava/time/temporal/TemporalUnit;Ljava/time/temporal/ValueRange;Ljava/lang/String;)V
+HSPLjava/time/temporal/ChronoField;->checkValidIntValue(J)I
+HSPLjava/time/temporal/ChronoField;->checkValidValue(J)J
+HSPLjava/time/temporal/ChronoField;->range()Ljava/time/temporal/ValueRange;
+HSPLjava/time/temporal/ChronoField;->values()[Ljava/time/temporal/ChronoField;
+HSPLjava/time/temporal/ChronoUnit;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/time/Duration;)V
+HSPLjava/time/temporal/ChronoUnit;->values()[Ljava/time/temporal/ChronoUnit;
+HSPLjava/time/temporal/TemporalAdjusters;->lambda$-java_time_temporal_TemporalAdjusters_18421(ILjava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;
+HSPLjava/time/temporal/TemporalAdjusters;->nextOrSame(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;
+HSPLjava/time/temporal/TemporalAmount;->addTo(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;
+HSPLjava/time/temporal/TemporalAmount;->get(Ljava/time/temporal/TemporalUnit;)J
+HSPLjava/time/temporal/TemporalAmount;->getUnits()Ljava/util/List;
+HSPLjava/time/temporal/TemporalAmount;->subtractFrom(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;
+HSPLjava/time/temporal/TemporalField;->adjustInto(Ljava/time/temporal/Temporal;J)Ljava/time/temporal/Temporal;
+HSPLjava/time/temporal/TemporalField;->getBaseUnit()Ljava/time/temporal/TemporalUnit;
+HSPLjava/time/temporal/TemporalField;->getFrom(Ljava/time/temporal/TemporalAccessor;)J
+HSPLjava/time/temporal/TemporalField;->getRangeUnit()Ljava/time/temporal/TemporalUnit;
+HSPLjava/time/temporal/TemporalField;->isDateBased()Z
+HSPLjava/time/temporal/TemporalField;->isSupportedBy(Ljava/time/temporal/TemporalAccessor;)Z
+HSPLjava/time/temporal/TemporalField;->isTimeBased()Z
+HSPLjava/time/temporal/TemporalField;->range()Ljava/time/temporal/ValueRange;
+HSPLjava/time/temporal/TemporalField;->rangeRefinedBy(Ljava/time/temporal/TemporalAccessor;)Ljava/time/temporal/ValueRange;
+HSPLjava/time/temporal/TemporalField;->toString()Ljava/lang/String;
+HSPLjava/time/temporal/TemporalUnit;->addTo(Ljava/time/temporal/Temporal;J)Ljava/time/temporal/Temporal;
+HSPLjava/time/temporal/TemporalUnit;->between(Ljava/time/temporal/Temporal;Ljava/time/temporal/Temporal;)J
+HSPLjava/time/temporal/TemporalUnit;->getDuration()Ljava/time/Duration;
+HSPLjava/time/temporal/TemporalUnit;->isDateBased()Z
+HSPLjava/time/temporal/TemporalUnit;->isDurationEstimated()Z
+HSPLjava/time/temporal/TemporalUnit;->isTimeBased()Z
+HSPLjava/time/temporal/TemporalUnit;->toString()Ljava/lang/String;
+HSPLjava/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
+HSPLjava/time/temporal/ValueRange;->isIntValue()Z
+HSPLjava/time/temporal/ValueRange;->isValidIntValue(J)Z
+HSPLjava/time/temporal/ValueRange;->isValidValue(J)Z
+HSPLjava/time/temporal/ValueRange;->of(JJ)Ljava/time/temporal/ValueRange;
+HSPLjava/time/temporal/ValueRange;->of(JJJ)Ljava/time/temporal/ValueRange;
+HSPLjava/time/temporal/ValueRange;->of(JJJJ)Ljava/time/temporal/ValueRange;
+HSPLjava/time/zone/IcuZoneRulesProvider$ZoneRulesCache;-><init>(I)V
+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;-><init>()V
+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;->provideZoneIds()Ljava/util/Set;
+HSPLjava/time/zone/IcuZoneRulesProvider;->toZoneOffsetTransitionRule(Landroid/icu/util/AnnualTimeZoneRule;I)Ljava/time/zone/ZoneOffsetTransitionRule;
+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
+HSPLjava/time/zone/ZoneOffsetTransition;->getOffsetAfter()Ljava/time/ZoneOffset;
+HSPLjava/time/zone/ZoneOffsetTransition;->getOffsetBefore()Ljava/time/ZoneOffset;
+HSPLjava/time/zone/ZoneOffsetTransition;->isGap()Z
+HSPLjava/time/zone/ZoneOffsetTransition;->toEpochSecond()J
+HSPLjava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;->-getjava-time-zone-ZoneOffsetTransitionRule$TimeDefinitionSwitchesValues()[I
+HSPLjava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;-><init>(Ljava/lang/String;I)V
+HSPLjava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;->createDateTime(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)Ljava/time/LocalDateTime;
+HSPLjava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;->values()[Ljava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;
+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;
+HSPLjava/time/zone/ZoneRules;->of(Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ljava/time/zone/ZoneRules;
+HSPLjava/time/zone/ZoneRulesProvider;-><init>()V
+HSPLjava/time/zone/ZoneRulesProvider;->getProvider(Ljava/lang/String;)Ljava/time/zone/ZoneRulesProvider;
+HSPLjava/time/zone/ZoneRulesProvider;->getRules(Ljava/lang/String;Z)Ljava/time/zone/ZoneRules;
+HSPLjava/time/zone/ZoneRulesProvider;->provideRules(Ljava/lang/String;Z)Ljava/time/zone/ZoneRules;
+HSPLjava/time/zone/ZoneRulesProvider;->provideVersions(Ljava/lang/String;)Ljava/util/NavigableMap;
+HSPLjava/time/zone/ZoneRulesProvider;->provideZoneIds()Ljava/util/Set;
+HSPLjava/time/zone/ZoneRulesProvider;->registerProvider(Ljava/time/zone/ZoneRulesProvider;)V
+HSPLjava/time/zone/ZoneRulesProvider;->registerProvider0(Ljava/time/zone/ZoneRulesProvider;)V
+HSPLjava/util/-$Lambda$Hazqao1eYCE_pmZR5Jlrc2GvLhk;->$m$2(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLjava/util/-$Lambda$Hazqao1eYCE_pmZR5Jlrc2GvLhk;-><init>(BLjava/lang/Object;)V
+HSPLjava/util/-$Lambda$Hazqao1eYCE_pmZR5Jlrc2GvLhk;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLjava/util/AbstractCollection;-><init>()V
+HSPLjava/util/AbstractCollection;->addAll(Ljava/util/Collection;)Z
+HSPLjava/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
+HSPLjava/util/AbstractCollection;->removeAll(Ljava/util/Collection;)Z
+HSPLjava/util/AbstractCollection;->retainAll(Ljava/util/Collection;)Z
+HSPLjava/util/AbstractCollection;->toArray()[Ljava/lang/Object;
+HSPLjava/util/AbstractCollection;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLjava/util/AbstractCollection;->toString()Ljava/lang/String;
+HSPLjava/util/AbstractList$Itr;-><init>(Ljava/util/AbstractList;)V
+HSPLjava/util/AbstractList$Itr;-><init>(Ljava/util/AbstractList;Ljava/util/AbstractList$Itr;)V
+HSPLjava/util/AbstractList$Itr;->checkForComodification()V
+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;-><init>()V
+HSPLjava/util/AbstractList;->add(Ljava/lang/Object;)Z
+HSPLjava/util/AbstractList;->equals(Ljava/lang/Object;)Z
+HSPLjava/util/AbstractList;->hashCode()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/AbstractMap$SimpleEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLjava/util/AbstractMap$SimpleEntry;->getValue()Ljava/lang/Object;
+HSPLjava/util/AbstractMap$SimpleImmutableEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLjava/util/AbstractMap$SimpleImmutableEntry;-><init>(Ljava/util/Map$Entry;)V
+HSPLjava/util/AbstractMap$SimpleImmutableEntry;->getKey()Ljava/lang/Object;
+HSPLjava/util/AbstractMap$SimpleImmutableEntry;->getValue()Ljava/lang/Object;
+HSPLjava/util/AbstractMap;-><init>()V
+HSPLjava/util/AbstractMap;->clear()V
+HSPLjava/util/AbstractMap;->clone()Ljava/lang/Object;
+HSPLjava/util/AbstractMap;->equals(Ljava/lang/Object;)Z
+HSPLjava/util/AbstractMap;->hashCode()I
+HSPLjava/util/AbstractMap;->isEmpty()Z
+HSPLjava/util/AbstractMap;->toString()Ljava/lang/String;
+HSPLjava/util/AbstractQueue;-><init>()V
+HSPLjava/util/AbstractQueue;->add(Ljava/lang/Object;)Z
+HSPLjava/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;
+HSPLjava/util/AbstractSequentialList;->listIterator(I)Ljava/util/ListIterator;
+HSPLjava/util/AbstractSet;-><init>()V
+HSPLjava/util/AbstractSet;->equals(Ljava/lang/Object;)Z
+HSPLjava/util/AbstractSet;->hashCode()I
+HSPLjava/util/AbstractSet;->removeAll(Ljava/util/Collection;)Z
+HSPLjava/util/ArrayDeque$DeqIterator;-><init>(Ljava/util/ArrayDeque;)V
+HSPLjava/util/ArrayDeque$DeqIterator;-><init>(Ljava/util/ArrayDeque;Ljava/util/ArrayDeque$DeqIterator;)V
+HSPLjava/util/ArrayDeque$DeqIterator;->hasNext()Z
+HSPLjava/util/ArrayDeque$DeqIterator;->next()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque$DeqIterator;->remove()V
+HSPLjava/util/ArrayDeque;-><init>()V
+HSPLjava/util/ArrayDeque;-><init>(I)V
+HSPLjava/util/ArrayDeque;-><init>(Ljava/util/Collection;)V
+HSPLjava/util/ArrayDeque;->add(Ljava/lang/Object;)Z
+HSPLjava/util/ArrayDeque;->addFirst(Ljava/lang/Object;)V
+HSPLjava/util/ArrayDeque;->addLast(Ljava/lang/Object;)V
+HSPLjava/util/ArrayDeque;->allocateElements(I)V
+HSPLjava/util/ArrayDeque;->checkInvariants()V
+HSPLjava/util/ArrayDeque;->clear()V
+HSPLjava/util/ArrayDeque;->delete(I)Z
+HSPLjava/util/ArrayDeque;->doubleCapacity()V
+HSPLjava/util/ArrayDeque;->getFirst()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque;->isEmpty()Z
+HSPLjava/util/ArrayDeque;->iterator()Ljava/util/Iterator;
+HSPLjava/util/ArrayDeque;->offer(Ljava/lang/Object;)Z
+HSPLjava/util/ArrayDeque;->offerLast(Ljava/lang/Object;)Z
+HSPLjava/util/ArrayDeque;->peek()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque;->peekFirst()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque;->peekLast()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque;->poll()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque;->pollFirst()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque;->pollLast()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque;->pop()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque;->push(Ljava/lang/Object;)V
+HSPLjava/util/ArrayDeque;->remove()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque;->remove(Ljava/lang/Object;)Z
+HSPLjava/util/ArrayDeque;->removeFirst()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque;->removeFirstOccurrence(Ljava/lang/Object;)Z
+HSPLjava/util/ArrayDeque;->removeLast()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque;->size()I
+HSPLjava/util/ArrayDeque;->toArray()[Ljava/lang/Object;
+HSPLjava/util/ArrayList$Itr;-><init>(Ljava/util/ArrayList;)V
+HSPLjava/util/ArrayList$Itr;-><init>(Ljava/util/ArrayList;Ljava/util/ArrayList$Itr;)V
+HSPLjava/util/ArrayList$Itr;->hasNext()Z
+HSPLjava/util/ArrayList$Itr;->next()Ljava/lang/Object;
+HSPLjava/util/ArrayList$Itr;->remove()V
+HSPLjava/util/ArrayList$ListItr;-><init>(Ljava/util/ArrayList;I)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;
+HSPLjava/util/ArrayList$SubList;-><init>(Ljava/util/ArrayList;Ljava/util/AbstractList;III)V
+HSPLjava/util/ArrayList$SubList;->get(I)Ljava/lang/Object;
+HSPLjava/util/ArrayList$SubList;->iterator()Ljava/util/Iterator;
+HSPLjava/util/ArrayList$SubList;->listIterator(I)Ljava/util/ListIterator;
+HSPLjava/util/ArrayList$SubList;->size()I
+HSPLjava/util/ArrayList;->-get0(Ljava/util/ArrayList;)I
+HSPLjava/util/ArrayList;-><init>()V
+HSPLjava/util/ArrayList;-><init>(I)V
+HSPLjava/util/ArrayList;-><init>(Ljava/util/Collection;)V
+HSPLjava/util/ArrayList;->add(ILjava/lang/Object;)V
+HSPLjava/util/ArrayList;->add(Ljava/lang/Object;)Z
+HSPLjava/util/ArrayList;->addAll(Ljava/util/Collection;)Z
+HSPLjava/util/ArrayList;->batchRemove(Ljava/util/Collection;Z)Z
+HSPLjava/util/ArrayList;->clear()V
+HSPLjava/util/ArrayList;->clone()Ljava/lang/Object;
+HSPLjava/util/ArrayList;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/ArrayList;->ensureCapacity(I)V
+HSPLjava/util/ArrayList;->ensureCapacityInternal(I)V
+HSPLjava/util/ArrayList;->ensureExplicitCapacity(I)V
+HSPLjava/util/ArrayList;->fastRemove(I)V
+HSPLjava/util/ArrayList;->forEach(Ljava/util/function/Consumer;)V
+HSPLjava/util/ArrayList;->get(I)Ljava/lang/Object;
+HSPLjava/util/ArrayList;->grow(I)V
+HSPLjava/util/ArrayList;->indexOf(Ljava/lang/Object;)I
+HSPLjava/util/ArrayList;->isEmpty()Z
+HSPLjava/util/ArrayList;->iterator()Ljava/util/Iterator;
+HSPLjava/util/ArrayList;->listIterator()Ljava/util/ListIterator;
+HSPLjava/util/ArrayList;->listIterator(I)Ljava/util/ListIterator;
+HSPLjava/util/ArrayList;->remove(I)Ljava/lang/Object;
+HSPLjava/util/ArrayList;->remove(Ljava/lang/Object;)Z
+HSPLjava/util/ArrayList;->removeAll(Ljava/util/Collection;)Z
+HSPLjava/util/ArrayList;->removeIf(Ljava/util/function/Predicate;)Z
+HSPLjava/util/ArrayList;->set(ILjava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/ArrayList;->size()I
+HSPLjava/util/ArrayList;->sort(Ljava/util/Comparator;)V
+HSPLjava/util/ArrayList;->subList(II)Ljava/util/List;
+HSPLjava/util/ArrayList;->subListRangeCheck(III)V
+HSPLjava/util/ArrayList;->toArray()[Ljava/lang/Object;
+HSPLjava/util/ArrayList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLjava/util/ArrayList;->trimToSize()V
+HSPLjava/util/Arrays$ArrayList;-><init>([Ljava/lang/Object;)V
+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;->size()I
+HSPLjava/util/Arrays$ArrayList;->toArray()[Ljava/lang/Object;
+HSPLjava/util/Arrays;->asList([Ljava/lang/Object;)Ljava/util/List;
+HSPLjava/util/Arrays;->binarySearch([II)I
+HSPLjava/util/Arrays;->binarySearch([IIII)I
+HSPLjava/util/Arrays;->binarySearch([JJ)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([IIII)I
+HSPLjava/util/Arrays;->binarySearch0([JIIJ)I
+HSPLjava/util/Arrays;->binarySearch0([Ljava/lang/Object;IILjava/lang/Object;)I
+HSPLjava/util/Arrays;->binarySearch0([Ljava/lang/Object;IILjava/lang/Object;Ljava/util/Comparator;)I
+HSPLjava/util/Arrays;->checkOffsetAndCount(III)V
+HSPLjava/util/Arrays;->copyOf([BI)[B
+HSPLjava/util/Arrays;->copyOf([CI)[C
+HSPLjava/util/Arrays;->copyOf([FI)[F
+HSPLjava/util/Arrays;->copyOf([II)[I
+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;
+HSPLjava/util/Arrays;->copyOfRange([BII)[B
+HSPLjava/util/Arrays;->copyOfRange([CII)[C
+HSPLjava/util/Arrays;->copyOfRange([III)[I
+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([Ljava/lang/Object;[Ljava/lang/Object;)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
+HSPLjava/util/Arrays;->fill([II)V
+HSPLjava/util/Arrays;->fill([IIII)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([ZZ)V
+HSPLjava/util/Arrays;->hashCode([B)I
+HSPLjava/util/Arrays;->hashCode([F)I
+HSPLjava/util/Arrays;->hashCode([I)I
+HSPLjava/util/Arrays;->hashCode([Ljava/lang/Object;)I
+HSPLjava/util/Arrays;->rangeCheck(III)V
+HSPLjava/util/Arrays;->sort([I)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;->toString([I)Ljava/lang/String;
+HSPLjava/util/Arrays;->toString([Ljava/lang/Object;)Ljava/lang/String;
+HSPLjava/util/Base64$Decoder;-><init>(ZZ)V
+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;->-get0()[C
+HSPLjava/util/Base64$Encoder;->-get1()[C
+HSPLjava/util/Base64$Encoder;-><init>(Z[BIZ)V
+HSPLjava/util/Base64;->getMimeDecoder()Ljava/util/Base64$Decoder;
+HSPLjava/util/BitSet;-><init>()V
+HSPLjava/util/BitSet;-><init>(I)V
+HSPLjava/util/BitSet;->cardinality()I
+HSPLjava/util/BitSet;->checkInvariants()V
+HSPLjava/util/BitSet;->checkRange(II)V
+HSPLjava/util/BitSet;->clear(I)V
+HSPLjava/util/BitSet;->ensureCapacity(I)V
+HSPLjava/util/BitSet;->equals(Ljava/lang/Object;)Z
+HSPLjava/util/BitSet;->expandTo(I)V
+HSPLjava/util/BitSet;->get(I)Z
+HSPLjava/util/BitSet;->initWords(I)V
+HSPLjava/util/BitSet;->intersects(Ljava/util/BitSet;)Z
+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
+HSPLjava/util/BitSet;->set(IZ)V
+HSPLjava/util/BitSet;->toString()Ljava/lang/String;
+HSPLjava/util/BitSet;->wordIndex(I)I
+HSPLjava/util/BitSet;->xor(Ljava/util/BitSet;)V
+HSPLjava/util/Calendar;-><init>()V
+HSPLjava/util/Calendar;-><init>(Ljava/util/TimeZone;Ljava/util/Locale;)V
+HSPLjava/util/Calendar;->add(II)V
+HSPLjava/util/Calendar;->after(Ljava/lang/Object;)Z
+HSPLjava/util/Calendar;->aggregateStamp(II)I
+HSPLjava/util/Calendar;->before(Ljava/lang/Object;)Z
+HSPLjava/util/Calendar;->clear()V
+HSPLjava/util/Calendar;->clone()Ljava/lang/Object;
+HSPLjava/util/Calendar;->compareTo(J)I
+HSPLjava/util/Calendar;->compareTo(Ljava/util/Calendar;)I
+HSPLjava/util/Calendar;->complete()V
+HSPLjava/util/Calendar;->computeFields()V
+HSPLjava/util/Calendar;->computeTime()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;->getGreatestMinimum(I)I
+HSPLjava/util/Calendar;->getInstance()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;
+HSPLjava/util/Calendar;->getLeastMaximum(I)I
+HSPLjava/util/Calendar;->getMaximum(I)I
+HSPLjava/util/Calendar;->getMillisOf(Ljava/util/Calendar;)J
+HSPLjava/util/Calendar;->getMinimalDaysInFirstWeek()I
+HSPLjava/util/Calendar;->getMinimum(I)I
+HSPLjava/util/Calendar;->getSetStateFields()I
+HSPLjava/util/Calendar;->getTime()Ljava/util/Date;
+HSPLjava/util/Calendar;->getTimeInMillis()J
+HSPLjava/util/Calendar;->getTimeZone()Ljava/util/TimeZone;
+HSPLjava/util/Calendar;->getZone()Ljava/util/TimeZone;
+HSPLjava/util/Calendar;->internalGet(I)I
+HSPLjava/util/Calendar;->internalSet(II)V
+HSPLjava/util/Calendar;->isFieldSet(II)Z
+HSPLjava/util/Calendar;->isLenient()Z
+HSPLjava/util/Calendar;->isPartiallyNormalized()Z
+HSPLjava/util/Calendar;->isSet(I)Z
+HSPLjava/util/Calendar;->roll(IZ)V
+HSPLjava/util/Calendar;->selectFields()I
+HSPLjava/util/Calendar;->set(II)V
+HSPLjava/util/Calendar;->set(III)V
+HSPLjava/util/Calendar;->set(IIIIII)V
+HSPLjava/util/Calendar;->setFieldsComputed(I)V
+HSPLjava/util/Calendar;->setFieldsNormalized(I)V
+HSPLjava/util/Calendar;->setLenient(Z)V
+HSPLjava/util/Calendar;->setTime(Ljava/util/Date;)V
+HSPLjava/util/Calendar;->setTimeInMillis(J)V
+HSPLjava/util/Calendar;->setTimeZone(Ljava/util/TimeZone;)V
+HSPLjava/util/Calendar;->setWeekCountData(Ljava/util/Locale;)V
+HSPLjava/util/Calendar;->setZoneShared(Z)V
+HSPLjava/util/Calendar;->updateTime()V
+HSPLjava/util/Collection;->stream()Ljava/util/stream/Stream;
+HSPLjava/util/Collections$1;-><init>(Ljava/lang/Object;)V
+HSPLjava/util/Collections$1;->hasNext()Z
+HSPLjava/util/Collections$1;->next()Ljava/lang/Object;
+HSPLjava/util/Collections$3;-><init>(Ljava/util/Collection;)V
+HSPLjava/util/Collections$3;->hasMoreElements()Z
+HSPLjava/util/Collections$3;->nextElement()Ljava/lang/Object;
+HSPLjava/util/Collections$CopiesList;-><init>(ILjava/lang/Object;)V
+HSPLjava/util/Collections$CopiesList;->toArray()[Ljava/lang/Object;
+HSPLjava/util/Collections$EmptyEnumeration;->hasMoreElements()Z
+HSPLjava/util/Collections$EmptyIterator;->hasNext()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;
+HSPLjava/util/Collections$EmptyList;->readResolve()Ljava/lang/Object;
+HSPLjava/util/Collections$EmptyList;->size()I
+HSPLjava/util/Collections$EmptyList;->toArray()[Ljava/lang/Object;
+HSPLjava/util/Collections$EmptyMap;->entrySet()Ljava/util/Set;
+HSPLjava/util/Collections$EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/Collections$EmptyMap;->isEmpty()Z
+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
+HSPLjava/util/Collections$EmptySet;->toArray()[Ljava/lang/Object;
+HSPLjava/util/Collections$EmptySet;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLjava/util/Collections$ReverseComparator;->compare(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
+HSPLjava/util/Collections$ReverseComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLjava/util/Collections$SetFromMap;-><init>(Ljava/util/Map;)V
+HSPLjava/util/Collections$SetFromMap;->add(Ljava/lang/Object;)Z
+HSPLjava/util/Collections$SetFromMap;->clear()V
+HSPLjava/util/Collections$SetFromMap;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/Collections$SetFromMap;->isEmpty()Z
+HSPLjava/util/Collections$SetFromMap;->iterator()Ljava/util/Iterator;
+HSPLjava/util/Collections$SetFromMap;->remove(Ljava/lang/Object;)Z
+HSPLjava/util/Collections$SetFromMap;->size()I
+HSPLjava/util/Collections$SetFromMap;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLjava/util/Collections$SingletonList;-><init>(Ljava/lang/Object;)V
+HSPLjava/util/Collections$SingletonList;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/Collections$SingletonList;->get(I)Ljava/lang/Object;
+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;->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$SingletonSet;-><init>(Ljava/lang/Object;)V
+HSPLjava/util/Collections$SingletonSet;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/Collections$SingletonSet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/Collections$SingletonSet;->size()I
+HSPLjava/util/Collections$SynchronizedCollection;-><init>(Ljava/util/Collection;)V
+HSPLjava/util/Collections$SynchronizedCollection;-><init>(Ljava/util/Collection;Ljava/lang/Object;)V
+HSPLjava/util/Collections$SynchronizedCollection;->add(Ljava/lang/Object;)Z
+HSPLjava/util/Collections$SynchronizedCollection;->clear()V
+HSPLjava/util/Collections$SynchronizedCollection;->iterator()Ljava/util/Iterator;
+HSPLjava/util/Collections$SynchronizedCollection;->remove(Ljava/lang/Object;)Z
+HSPLjava/util/Collections$SynchronizedCollection;->size()I
+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$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;->get(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;->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
+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;
+HSPLjava/util/Collections$UnmodifiableCollection;-><init>(Ljava/util/Collection;)V
+HSPLjava/util/Collections$UnmodifiableCollection;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/Collections$UnmodifiableCollection;->containsAll(Ljava/util/Collection;)Z
+HSPLjava/util/Collections$UnmodifiableCollection;->isEmpty()Z
+HSPLjava/util/Collections$UnmodifiableCollection;->iterator()Ljava/util/Iterator;
+HSPLjava/util/Collections$UnmodifiableCollection;->size()I
+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;-><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;->listIterator()Ljava/util/ListIterator;
+HSPLjava/util/Collections$UnmodifiableList;->listIterator(I)Ljava/util/ListIterator;
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;-><init>(Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;)V
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;->hasNext()Z
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;->next()Ljava/lang/Object;
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;->next()Ljava/util/Map$Entry;
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;-><init>(Ljava/util/Map$Entry;)V
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;->getKey()Ljava/lang/Object;
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;->getValue()Ljava/lang/Object;
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;-><init>(Ljava/util/Set;)V
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/Collections$UnmodifiableMap;-><init>(Ljava/util/Map;)V
+HSPLjava/util/Collections$UnmodifiableMap;->containsKey(Ljava/lang/Object;)Z
+HSPLjava/util/Collections$UnmodifiableMap;->entrySet()Ljava/util/Set;
+HSPLjava/util/Collections$UnmodifiableMap;->equals(Ljava/lang/Object;)Z
+HSPLjava/util/Collections$UnmodifiableMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/Collections$UnmodifiableMap;->hashCode()I
+HSPLjava/util/Collections$UnmodifiableMap;->isEmpty()Z
+HSPLjava/util/Collections$UnmodifiableMap;->keySet()Ljava/util/Set;
+HSPLjava/util/Collections$UnmodifiableMap;->size()I
+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;->addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z
+HSPLjava/util/Collections;->binarySearch(Ljava/util/List;Ljava/lang/Object;)I
+HSPLjava/util/Collections;->binarySearch(Ljava/util/List;Ljava/lang/Object;Ljava/util/Comparator;)I
+HSPLjava/util/Collections;->emptyEnumeration()Ljava/util/Enumeration;
+HSPLjava/util/Collections;->emptyIterator()Ljava/util/Iterator;
+HSPLjava/util/Collections;->emptyList()Ljava/util/List;
+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;->max(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;->singleton(Ljava/lang/Object;)Ljava/util/Set;
+HSPLjava/util/Collections;->singletonIterator(Ljava/lang/Object;)Ljava/util/Iterator;
+HSPLjava/util/Collections;->singletonList(Ljava/lang/Object;)Ljava/util/List;
+HSPLjava/util/Collections;->singletonMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;
+HSPLjava/util/Collections;->sort(Ljava/util/List;)V
+HSPLjava/util/Collections;->sort(Ljava/util/List;Ljava/util/Comparator;)V
+HSPLjava/util/Collections;->swap(Ljava/util/List;II)V
+HSPLjava/util/Collections;->synchronizedList(Ljava/util/List;)Ljava/util/List;
+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;->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;
+HSPLjava/util/Collections;->unmodifiableSet(Ljava/util/Set;)Ljava/util/Set;
+HSPLjava/util/ComparableTimSort;-><init>([Ljava/lang/Object;[Ljava/lang/Object;II)V
+HSPLjava/util/ComparableTimSort;->binarySort([Ljava/lang/Object;III)V
+HSPLjava/util/ComparableTimSort;->countRunAndMakeAscending([Ljava/lang/Object;II)I
+HSPLjava/util/ComparableTimSort;->ensureCapacity(I)[Ljava/lang/Object;
+HSPLjava/util/ComparableTimSort;->gallopLeft(Ljava/lang/Comparable;[Ljava/lang/Object;III)I
+HSPLjava/util/ComparableTimSort;->gallopRight(Ljava/lang/Comparable;[Ljava/lang/Object;III)I
+HSPLjava/util/ComparableTimSort;->mergeAt(I)V
+HSPLjava/util/ComparableTimSort;->mergeCollapse()V
+HSPLjava/util/ComparableTimSort;->mergeForceCollapse()V
+HSPLjava/util/ComparableTimSort;->mergeHi(IIII)V
+HSPLjava/util/ComparableTimSort;->mergeLo(IIII)V
+HSPLjava/util/ComparableTimSort;->minRunLength(I)I
+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
+HSPLjava/util/Comparator;->comparingInt(Ljava/util/function/ToIntFunction;)Ljava/util/Comparator;
+HSPLjava/util/Comparator;->lambda$-java_util_Comparator_21565(Ljava/util/function/ToIntFunction;Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLjava/util/Currency;-><init>(Landroid/icu/util/Currency;)V
+HSPLjava/util/Currency;->getCurrencyCode()Ljava/lang/String;
+HSPLjava/util/Currency;->getInstance(Ljava/lang/String;)Ljava/util/Currency;
+HSPLjava/util/Currency;->getInstance(Ljava/util/Locale;)Ljava/util/Currency;
+HSPLjava/util/Currency;->getSymbol(Ljava/util/Locale;)Ljava/lang/String;
+HSPLjava/util/Date;-><init>()V
+HSPLjava/util/Date;-><init>(J)V
+HSPLjava/util/Date;->before(Ljava/util/Date;)Z
+HSPLjava/util/Date;->compareTo(Ljava/util/Date;)I
+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;->setTime(J)V
+HSPLjava/util/Dictionary;-><init>()V
+HSPLjava/util/DualPivotQuicksort;->sort([IIIZ)V
+HSPLjava/util/DualPivotQuicksort;->sort([III[III)V
+HSPLjava/util/DualPivotQuicksort;->sort([JIIZ)V
+HSPLjava/util/DualPivotQuicksort;->sort([JII[JII)V
+HSPLjava/util/EnumMap$1;-><init>()V
+HSPLjava/util/EnumMap$EntryIterator$Entry;-><init>(Ljava/util/EnumMap$EntryIterator;I)V
+HSPLjava/util/EnumMap$EntryIterator$Entry;-><init>(Ljava/util/EnumMap$EntryIterator;ILjava/util/EnumMap$EntryIterator$Entry;)V
+HSPLjava/util/EnumMap$EntryIterator$Entry;->checkIndexForEntryUse()V
+HSPLjava/util/EnumMap$EntryIterator$Entry;->getKey()Ljava/lang/Enum;
+HSPLjava/util/EnumMap$EntryIterator$Entry;->getKey()Ljava/lang/Object;
+HSPLjava/util/EnumMap$EntryIterator$Entry;->getValue()Ljava/lang/Object;
+HSPLjava/util/EnumMap$EntryIterator;-><init>(Ljava/util/EnumMap;)V
+HSPLjava/util/EnumMap$EntryIterator;-><init>(Ljava/util/EnumMap;Ljava/util/EnumMap$EntryIterator;)V
+HSPLjava/util/EnumMap$EntryIterator;->next()Ljava/lang/Object;
+HSPLjava/util/EnumMap$EntryIterator;->next()Ljava/util/Map$Entry;
+HSPLjava/util/EnumMap$EntrySet;-><init>(Ljava/util/EnumMap;)V
+HSPLjava/util/EnumMap$EntrySet;-><init>(Ljava/util/EnumMap;Ljava/util/EnumMap$EntrySet;)V
+HSPLjava/util/EnumMap$EntrySet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/EnumMap$EnumMapIterator;-><init>(Ljava/util/EnumMap;)V
+HSPLjava/util/EnumMap$EnumMapIterator;-><init>(Ljava/util/EnumMap;Ljava/util/EnumMap$EnumMapIterator;)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$KeyIterator;)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$KeySet;)V
+HSPLjava/util/EnumMap$KeySet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/EnumMap$KeySet;->size()I
+HSPLjava/util/EnumMap$ValueIterator;-><init>(Ljava/util/EnumMap;)V
+HSPLjava/util/EnumMap$ValueIterator;-><init>(Ljava/util/EnumMap;Ljava/util/EnumMap$ValueIterator;)V
+HSPLjava/util/EnumMap$ValueIterator;->next()Ljava/lang/Object;
+HSPLjava/util/EnumMap$Values;-><init>(Ljava/util/EnumMap;)V
+HSPLjava/util/EnumMap$Values;-><init>(Ljava/util/EnumMap;Ljava/util/EnumMap$Values;)V
+HSPLjava/util/EnumMap$Values;->iterator()Ljava/util/Iterator;
+HSPLjava/util/EnumMap;->-get0(Ljava/util/EnumMap;)[Ljava/lang/Enum;
+HSPLjava/util/EnumMap;->-get1(Ljava/util/EnumMap;)I
+HSPLjava/util/EnumMap;->-get2(Ljava/util/EnumMap;)[Ljava/lang/Object;
+HSPLjava/util/EnumMap;->-wrap4(Ljava/util/EnumMap;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/EnumMap;-><init>(Ljava/lang/Class;)V
+HSPLjava/util/EnumMap;-><init>(Ljava/util/Map;)V
+HSPLjava/util/EnumMap;->clear()V
+HSPLjava/util/EnumMap;->containsKey(Ljava/lang/Object;)Z
+HSPLjava/util/EnumMap;->entrySet()Ljava/util/Set;
+HSPLjava/util/EnumMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/EnumMap;->getKeyUniverse(Ljava/lang/Class;)[Ljava/lang/Enum;
+HSPLjava/util/EnumMap;->isValidKey(Ljava/lang/Object;)Z
+HSPLjava/util/EnumMap;->keySet()Ljava/util/Set;
+HSPLjava/util/EnumMap;->maskNull(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/EnumMap;->put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/EnumMap;->put(Ljava/lang/Object;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;
+HSPLjava/util/EnumMap;->values()Ljava/util/Collection;
+HSPLjava/util/EnumSet;-><init>(Ljava/lang/Class;[Ljava/lang/Enum;)V
+HSPLjava/util/EnumSet;->addAll()V
+HSPLjava/util/EnumSet;->addRange(Ljava/lang/Enum;Ljava/lang/Enum;)V
+HSPLjava/util/EnumSet;->allOf(Ljava/lang/Class;)Ljava/util/EnumSet;
+HSPLjava/util/EnumSet;->clone()Ljava/util/EnumSet;
+HSPLjava/util/EnumSet;->complement()V
+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;
+HSPLjava/util/EnumSet;->noneOf(Ljava/lang/Class;)Ljava/util/EnumSet;
+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;
+HSPLjava/util/EnumSet;->of(Ljava/lang/Enum;[Ljava/lang/Enum;)Ljava/util/EnumSet;
+HSPLjava/util/EnumSet;->range(Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;
+HSPLjava/util/EnumSet;->typeCheck(Ljava/lang/Enum;)V
+HSPLjava/util/Formatter$Conversion;->isCharacter(C)Z
+HSPLjava/util/Formatter$Conversion;->isFloat(C)Z
+HSPLjava/util/Formatter$Conversion;->isGeneral(C)Z
+HSPLjava/util/Formatter$Conversion;->isInteger(C)Z
+HSPLjava/util/Formatter$Conversion;->isText(C)Z
+HSPLjava/util/Formatter$Conversion;->isValid(C)Z
+HSPLjava/util/Formatter$DateTime;->isValid(C)Z
+HSPLjava/util/Formatter$FixedString;-><init>(Ljava/util/Formatter;Ljava/lang/String;)V
+HSPLjava/util/Formatter$FixedString;->index()I
+HSPLjava/util/Formatter$FixedString;->print(Ljava/lang/Object;Ljava/util/Locale;)V
+HSPLjava/util/Formatter$Flags;->-wrap0(Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;)Ljava/util/Formatter$Flags;
+HSPLjava/util/Formatter$Flags;-><init>(I)V
+HSPLjava/util/Formatter$Flags;->add(Ljava/util/Formatter$Flags;)Ljava/util/Formatter$Flags;
+HSPLjava/util/Formatter$Flags;->contains(Ljava/util/Formatter$Flags;)Z
+HSPLjava/util/Formatter$Flags;->parse(C)Ljava/util/Formatter$Flags;
+HSPLjava/util/Formatter$Flags;->parse(Ljava/lang/String;)Ljava/util/Formatter$Flags;
+HSPLjava/util/Formatter$Flags;->valueOf()I
+HSPLjava/util/Formatter$FormatSpecifier;-><init>(Ljava/util/Formatter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/util/Formatter$FormatSpecifier;->addZeros([CI)[C
+HSPLjava/util/Formatter$FormatSpecifier;->adjustWidth(ILjava/util/Formatter$Flags;Z)I
+HSPLjava/util/Formatter$FormatSpecifier;->checkBadFlags([Ljava/util/Formatter$Flags;)V
+HSPLjava/util/Formatter$FormatSpecifier;->checkDateTime()V
+HSPLjava/util/Formatter$FormatSpecifier;->checkFloat()V
+HSPLjava/util/Formatter$FormatSpecifier;->checkGeneral()V
+HSPLjava/util/Formatter$FormatSpecifier;->checkInteger()V
+HSPLjava/util/Formatter$FormatSpecifier;->checkNumeric()V
+HSPLjava/util/Formatter$FormatSpecifier;->checkText()V
+HSPLjava/util/Formatter$FormatSpecifier;->conversion(Ljava/lang/String;)C
+HSPLjava/util/Formatter$FormatSpecifier;->flags(Ljava/lang/String;)Ljava/util/Formatter$Flags;
+HSPLjava/util/Formatter$FormatSpecifier;->getZero(Ljava/util/Locale;)C
+HSPLjava/util/Formatter$FormatSpecifier;->index()I
+HSPLjava/util/Formatter$FormatSpecifier;->index(Ljava/lang/String;)I
+HSPLjava/util/Formatter$FormatSpecifier;->justify(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/util/Formatter$FormatSpecifier;->leadingSign(Ljava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;
+HSPLjava/util/Formatter$FormatSpecifier;->localizedMagnitude(Ljava/lang/StringBuilder;JLjava/util/Formatter$Flags;ILjava/util/Locale;)Ljava/lang/StringBuilder;
+HSPLjava/util/Formatter$FormatSpecifier;->localizedMagnitude(Ljava/lang/StringBuilder;[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
+HSPLjava/util/Formatter$FormatSpecifier;->print(DLjava/util/Locale;)V
+HSPLjava/util/Formatter$FormatSpecifier;->print(FLjava/util/Locale;)V
+HSPLjava/util/Formatter$FormatSpecifier;->print(ILjava/util/Locale;)V
+HSPLjava/util/Formatter$FormatSpecifier;->print(JLjava/util/Locale;)V
+HSPLjava/util/Formatter$FormatSpecifier;->print(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
+HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/StringBuilder;Ljava/util/Calendar;CLjava/util/Locale;)Ljava/lang/Appendable;
+HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/math/BigInteger;Ljava/util/Locale;)V
+HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/util/Calendar;CLjava/util/Locale;)V
+HSPLjava/util/Formatter$FormatSpecifier;->printBoolean(Ljava/lang/Object;)V
+HSPLjava/util/Formatter$FormatSpecifier;->printDateTime(Ljava/lang/Object;Ljava/util/Locale;)V
+HSPLjava/util/Formatter$FormatSpecifier;->printFloat(Ljava/lang/Object;Ljava/util/Locale;)V
+HSPLjava/util/Formatter$FormatSpecifier;->printInteger(Ljava/lang/Object;Ljava/util/Locale;)V
+HSPLjava/util/Formatter$FormatSpecifier;->printString(Ljava/lang/Object;Ljava/util/Locale;)V
+HSPLjava/util/Formatter$FormatSpecifier;->trailingSign(Ljava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;
+HSPLjava/util/Formatter$FormatSpecifier;->width(Ljava/lang/String;)I
+HSPLjava/util/Formatter$FormatSpecifierParser;-><init>(Ljava/util/Formatter;Ljava/lang/String;I)V
+HSPLjava/util/Formatter$FormatSpecifierParser;->advance()C
+HSPLjava/util/Formatter$FormatSpecifierParser;->back(I)V
+HSPLjava/util/Formatter$FormatSpecifierParser;->getEndIdx()I
+HSPLjava/util/Formatter$FormatSpecifierParser;->getFormatSpecifier()Ljava/util/Formatter$FormatSpecifier;
+HSPLjava/util/Formatter$FormatSpecifierParser;->isEnd()Z
+HSPLjava/util/Formatter$FormatSpecifierParser;->nextInt()Ljava/lang/String;
+HSPLjava/util/Formatter$FormatSpecifierParser;->nextIsInt()Z
+HSPLjava/util/Formatter$FormatSpecifierParser;->peek()C
+HSPLjava/util/Formatter;->-get0(Ljava/util/Formatter;)Ljava/lang/Appendable;
+HSPLjava/util/Formatter;->-get3(Ljava/util/Formatter;)C
+HSPLjava/util/Formatter;-><init>()V
+HSPLjava/util/Formatter;-><init>(Ljava/lang/Appendable;)V
+HSPLjava/util/Formatter;-><init>(Ljava/lang/Appendable;Ljava/util/Locale;)V
+HSPLjava/util/Formatter;-><init>(Ljava/util/Locale;)V
+HSPLjava/util/Formatter;-><init>(Ljava/util/Locale;Ljava/lang/Appendable;)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;
+HSPLjava/util/Formatter;->getZero(Ljava/util/Locale;)C
+HSPLjava/util/Formatter;->locale()Ljava/util/Locale;
+HSPLjava/util/Formatter;->nonNullAppendable(Ljava/lang/Appendable;)Ljava/lang/Appendable;
+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>(III)V
+HSPLjava/util/GregorianCalendar;-><init>(IIIIII)V
+HSPLjava/util/GregorianCalendar;-><init>(IIIIIII)V
+HSPLjava/util/GregorianCalendar;-><init>(Ljava/util/TimeZone;Ljava/util/Locale;)V
+HSPLjava/util/GregorianCalendar;->add(II)V
+HSPLjava/util/GregorianCalendar;->adjustDstOffsetForInvalidWallClock(JLjava/util/TimeZone;I)I
+HSPLjava/util/GregorianCalendar;->adjustForZoneAndDaylightSavingsTime(IJLjava/util/TimeZone;)J
+HSPLjava/util/GregorianCalendar;->clone()Ljava/lang/Object;
+HSPLjava/util/GregorianCalendar;->computeFields()V
+HSPLjava/util/GregorianCalendar;->computeFields(II)I
+HSPLjava/util/GregorianCalendar;->computeTime()V
+HSPLjava/util/GregorianCalendar;->getCurrentFixedDate()J
+HSPLjava/util/GregorianCalendar;->getFixedDate(Lsun/util/calendar/BaseCalendar;II)J
+HSPLjava/util/GregorianCalendar;->getTimeZone()Ljava/util/TimeZone;
+HSPLjava/util/GregorianCalendar;->getWeekNumber(JJ)I
+HSPLjava/util/GregorianCalendar;->internalGetEra()I
+HSPLjava/util/GregorianCalendar;->isLeapYear(I)Z
+HSPLjava/util/GregorianCalendar;->monthLength(I)I
+HSPLjava/util/GregorianCalendar;->monthLength(II)I
+HSPLjava/util/GregorianCalendar;->pinDayOfMonth()V
+HSPLjava/util/GregorianCalendar;->setTimeZone(Ljava/util/TimeZone;)V
+HSPLjava/util/HashMap$EntryIterator;-><init>(Ljava/util/HashMap;)V
+HSPLjava/util/HashMap$EntryIterator;->next()Ljava/lang/Object;
+HSPLjava/util/HashMap$EntryIterator;->next()Ljava/util/Map$Entry;
+HSPLjava/util/HashMap$EntrySet;-><init>(Ljava/util/HashMap;)V
+HSPLjava/util/HashMap$EntrySet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/HashMap$EntrySet;->size()I
+HSPLjava/util/HashMap$HashIterator;-><init>(Ljava/util/HashMap;)V
+HSPLjava/util/HashMap$HashIterator;->hasNext()Z
+HSPLjava/util/HashMap$HashIterator;->nextNode()Ljava/util/HashMap$Node;
+HSPLjava/util/HashMap$HashIterator;->remove()V
+HSPLjava/util/HashMap$HashMapSpliterator;-><init>(Ljava/util/HashMap;IIII)V
+HSPLjava/util/HashMap$HashMapSpliterator;->estimateSize()J
+HSPLjava/util/HashMap$HashMapSpliterator;->getFence()I
+HSPLjava/util/HashMap$KeyIterator;-><init>(Ljava/util/HashMap;)V
+HSPLjava/util/HashMap$KeyIterator;->next()Ljava/lang/Object;
+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;
+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$Node;-><init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)V
+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;
+HSPLjava/util/HashMap$ValueIterator;-><init>(Ljava/util/HashMap;)V
+HSPLjava/util/HashMap$ValueIterator;->next()Ljava/lang/Object;
+HSPLjava/util/HashMap$Values;-><init>(Ljava/util/HashMap;)V
+HSPLjava/util/HashMap$Values;->iterator()Ljava/util/Iterator;
+HSPLjava/util/HashMap$Values;->size()I
+HSPLjava/util/HashMap;-><init>()V
+HSPLjava/util/HashMap;-><init>(I)V
+HSPLjava/util/HashMap;-><init>(IF)V
+HSPLjava/util/HashMap;-><init>(Ljava/util/Map;)V
+HSPLjava/util/HashMap;->afterNodeAccess(Ljava/util/HashMap$Node;)V
+HSPLjava/util/HashMap;->afterNodeInsertion(Z)V
+HSPLjava/util/HashMap;->afterNodeRemoval(Ljava/util/HashMap$Node;)V
+HSPLjava/util/HashMap;->capacity()I
+HSPLjava/util/HashMap;->clear()V
+HSPLjava/util/HashMap;->clone()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;
+HSPLjava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/HashMap;->getNode(ILjava/lang/Object;)Ljava/util/HashMap$Node;
+HSPLjava/util/HashMap;->hash(Ljava/lang/Object;)I
+HSPLjava/util/HashMap;->internalWriteEntries(Ljava/io/ObjectOutputStream;)V
+HSPLjava/util/HashMap;->isEmpty()Z
+HSPLjava/util/HashMap;->keySet()Ljava/util/Set;
+HSPLjava/util/HashMap;->newNode(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node;
+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;
+HSPLjava/util/HashMap;->putMapEntries(Ljava/util/Map;Z)V
+HSPLjava/util/HashMap;->putVal(ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object;
+HSPLjava/util/HashMap;->readObject(Ljava/io/ObjectInputStream;)V
+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;
+HSPLjava/util/HashMap;->resize()[Ljava/util/HashMap$Node;
+HSPLjava/util/HashMap;->size()I
+HSPLjava/util/HashMap;->tableSizeFor(I)I
+HSPLjava/util/HashMap;->treeifyBin([Ljava/util/HashMap$Node;I)V
+HSPLjava/util/HashMap;->values()Ljava/util/Collection;
+HSPLjava/util/HashMap;->writeObject(Ljava/io/ObjectOutputStream;)V
+HSPLjava/util/HashSet;-><init>()V
+HSPLjava/util/HashSet;-><init>(I)V
+HSPLjava/util/HashSet;-><init>(IFZ)V
+HSPLjava/util/HashSet;-><init>(Ljava/util/Collection;)V
+HSPLjava/util/HashSet;->add(Ljava/lang/Object;)Z
+HSPLjava/util/HashSet;->clear()V
+HSPLjava/util/HashSet;->clone()Ljava/lang/Object;
+HSPLjava/util/HashSet;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/HashSet;->isEmpty()Z
+HSPLjava/util/HashSet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/HashSet;->remove(Ljava/lang/Object;)Z
+HSPLjava/util/HashSet;->size()I
+HSPLjava/util/HashSet;->spliterator()Ljava/util/Spliterator;
+HSPLjava/util/Hashtable$EntrySet;-><init>(Ljava/util/Hashtable;)V
+HSPLjava/util/Hashtable$EntrySet;-><init>(Ljava/util/Hashtable;Ljava/util/Hashtable$EntrySet;)V
+HSPLjava/util/Hashtable$EntrySet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/Hashtable$Enumerator;-><init>(Ljava/util/Hashtable;IZ)V
+HSPLjava/util/Hashtable$Enumerator;->hasMoreElements()Z
+HSPLjava/util/Hashtable$Enumerator;->hasNext()Z
+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;->-get1(Ljava/util/Hashtable;)I
+HSPLjava/util/Hashtable;->-get2(Ljava/util/Hashtable;)[Ljava/util/Hashtable$HashtableEntry;
+HSPLjava/util/Hashtable;->-wrap0(Ljava/util/Hashtable;I)Ljava/util/Iterator;
+HSPLjava/util/Hashtable;-><init>()V
+HSPLjava/util/Hashtable;-><init>(I)V
+HSPLjava/util/Hashtable;-><init>(IF)V
+HSPLjava/util/Hashtable;->addEntry(ILjava/lang/Object;Ljava/lang/Object;I)V
+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
+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
+HSPLjava/util/Hashtable;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/Hashtable;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLjava/util/IdentityHashMap$EntrySet;-><init>(Ljava/util/IdentityHashMap;)V
+HSPLjava/util/IdentityHashMap$EntrySet;-><init>(Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap$EntrySet;)V
+HSPLjava/util/IdentityHashMap$EntrySet;->size()I
+HSPLjava/util/IdentityHashMap$EntrySet;->toArray()[Ljava/lang/Object;
+HSPLjava/util/IdentityHashMap$EntrySet;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLjava/util/IdentityHashMap$IdentityHashMapIterator;-><init>(Ljava/util/IdentityHashMap;)V
+HSPLjava/util/IdentityHashMap$IdentityHashMapIterator;-><init>(Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap$IdentityHashMapIterator;)V
+HSPLjava/util/IdentityHashMap$IdentityHashMapIterator;->hasNext()Z
+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$KeyIterator;)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$KeySet;)V
+HSPLjava/util/IdentityHashMap$KeySet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/IdentityHashMap$KeySet;->removeAll(Ljava/util/Collection;)Z
+HSPLjava/util/IdentityHashMap;-><init>()V
+HSPLjava/util/IdentityHashMap;-><init>(I)V
+HSPLjava/util/IdentityHashMap;->capacity(I)I
+HSPLjava/util/IdentityHashMap;->closeDeletion(I)V
+HSPLjava/util/IdentityHashMap;->containsKey(Ljava/lang/Object;)Z
+HSPLjava/util/IdentityHashMap;->entrySet()Ljava/util/Set;
+HSPLjava/util/IdentityHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/IdentityHashMap;->hash(Ljava/lang/Object;I)I
+HSPLjava/util/IdentityHashMap;->init(I)V
+HSPLjava/util/IdentityHashMap;->isEmpty()Z
+HSPLjava/util/IdentityHashMap;->keySet()Ljava/util/Set;
+HSPLjava/util/IdentityHashMap;->maskNull(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/IdentityHashMap;->nextKeyIndex(II)I
+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;->size()I
+HSPLjava/util/IdentityHashMap;->unmaskNull(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/Iterator;->forEachRemaining(Ljava/util/function/Consumer;)V
+HSPLjava/util/Iterator;->hasNext()Z
+HSPLjava/util/Iterator;->next()Ljava/lang/Object;
+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;->-get0(Ljava/util/JumboEnumSet;)[J
+HSPLjava/util/JumboEnumSet;-><init>(Ljava/lang/Class;[Ljava/lang/Enum;)V
+HSPLjava/util/JumboEnumSet;->add(Ljava/lang/Enum;)Z
+HSPLjava/util/JumboEnumSet;->add(Ljava/lang/Object;)Z
+HSPLjava/util/JumboEnumSet;->addAll()V
+HSPLjava/util/JumboEnumSet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/JumboEnumSet;->size()I
+HSPLjava/util/LinkedHashMap$LinkedEntryIterator;-><init>(Ljava/util/LinkedHashMap;)V
+HSPLjava/util/LinkedHashMap$LinkedEntryIterator;->next()Ljava/lang/Object;
+HSPLjava/util/LinkedHashMap$LinkedEntryIterator;->next()Ljava/util/Map$Entry;
+HSPLjava/util/LinkedHashMap$LinkedEntrySet;-><init>(Ljava/util/LinkedHashMap;)V
+HSPLjava/util/LinkedHashMap$LinkedEntrySet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/LinkedHashMap$LinkedEntrySet;->size()I
+HSPLjava/util/LinkedHashMap$LinkedEntrySet;->spliterator()Ljava/util/Spliterator;
+HSPLjava/util/LinkedHashMap$LinkedHashIterator;-><init>(Ljava/util/LinkedHashMap;)V
+HSPLjava/util/LinkedHashMap$LinkedHashIterator;->hasNext()Z
+HSPLjava/util/LinkedHashMap$LinkedHashIterator;->nextNode()Ljava/util/LinkedHashMap$LinkedHashMapEntry;
+HSPLjava/util/LinkedHashMap$LinkedHashMapEntry;-><init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)V
+HSPLjava/util/LinkedHashMap$LinkedKeyIterator;-><init>(Ljava/util/LinkedHashMap;)V
+HSPLjava/util/LinkedHashMap$LinkedKeyIterator;->next()Ljava/lang/Object;
+HSPLjava/util/LinkedHashMap$LinkedKeySet;-><init>(Ljava/util/LinkedHashMap;)V
+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
+HSPLjava/util/LinkedHashMap$LinkedValues;->iterator()Ljava/util/Iterator;
+HSPLjava/util/LinkedHashMap$LinkedValues;->size()I
+HSPLjava/util/LinkedHashMap;-><init>()V
+HSPLjava/util/LinkedHashMap;-><init>(I)V
+HSPLjava/util/LinkedHashMap;-><init>(IF)V
+HSPLjava/util/LinkedHashMap;-><init>(IFZ)V
+HSPLjava/util/LinkedHashMap;-><init>(Ljava/util/Map;)V
+HSPLjava/util/LinkedHashMap;->afterNodeAccess(Ljava/util/HashMap$Node;)V
+HSPLjava/util/LinkedHashMap;->afterNodeInsertion(Z)V
+HSPLjava/util/LinkedHashMap;->afterNodeRemoval(Ljava/util/HashMap$Node;)V
+HSPLjava/util/LinkedHashMap;->clear()V
+HSPLjava/util/LinkedHashMap;->eldest()Ljava/util/Map$Entry;
+HSPLjava/util/LinkedHashMap;->entrySet()Ljava/util/Set;
+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;
+HSPLjava/util/LinkedHashMap;->removeEldestEntry(Ljava/util/Map$Entry;)Z
+HSPLjava/util/LinkedHashMap;->values()Ljava/util/Collection;
+HSPLjava/util/LinkedHashSet;-><init>()V
+HSPLjava/util/LinkedHashSet;-><init>(I)V
+HSPLjava/util/LinkedHashSet;-><init>(Ljava/util/Collection;)V
+HSPLjava/util/LinkedList$ListItr;-><init>(Ljava/util/LinkedList;I)V
+HSPLjava/util/LinkedList$ListItr;->checkForComodification()V
+HSPLjava/util/LinkedList$ListItr;->hasNext()Z
+HSPLjava/util/LinkedList$ListItr;->next()Ljava/lang/Object;
+HSPLjava/util/LinkedList$ListItr;->set(Ljava/lang/Object;)V
+HSPLjava/util/LinkedList$Node;-><init>(Ljava/util/LinkedList$Node;Ljava/lang/Object;Ljava/util/LinkedList$Node;)V
+HSPLjava/util/LinkedList;-><init>()V
+HSPLjava/util/LinkedList;-><init>(Ljava/util/Collection;)V
+HSPLjava/util/LinkedList;->add(ILjava/lang/Object;)V
+HSPLjava/util/LinkedList;->add(Ljava/lang/Object;)Z
+HSPLjava/util/LinkedList;->addAll(ILjava/util/Collection;)Z
+HSPLjava/util/LinkedList;->addAll(Ljava/util/Collection;)Z
+HSPLjava/util/LinkedList;->addFirst(Ljava/lang/Object;)V
+HSPLjava/util/LinkedList;->addLast(Ljava/lang/Object;)V
+HSPLjava/util/LinkedList;->checkElementIndex(I)V
+HSPLjava/util/LinkedList;->checkPositionIndex(I)V
+HSPLjava/util/LinkedList;->clear()V
+HSPLjava/util/LinkedList;->clone()Ljava/lang/Object;
+HSPLjava/util/LinkedList;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/LinkedList;->get(I)Ljava/lang/Object;
+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
+HSPLjava/util/LinkedList;->offerLast(Ljava/lang/Object;)Z
+HSPLjava/util/LinkedList;->peek()Ljava/lang/Object;
+HSPLjava/util/LinkedList;->peekFirst()Ljava/lang/Object;
+HSPLjava/util/LinkedList;->peekLast()Ljava/lang/Object;
+HSPLjava/util/LinkedList;->poll()Ljava/lang/Object;
+HSPLjava/util/LinkedList;->pollFirst()Ljava/lang/Object;
+HSPLjava/util/LinkedList;->pop()Ljava/lang/Object;
+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;->size()I
+HSPLjava/util/LinkedList;->superClone()Ljava/util/LinkedList;
+HSPLjava/util/LinkedList;->toArray()[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/List;->get(I)Ljava/lang/Object;
+HSPLjava/util/List;->sort(Ljava/util/Comparator;)V
+HSPLjava/util/ListIterator;->hasPrevious()Z
+HSPLjava/util/ListIterator;->nextIndex()I
+HSPLjava/util/ListIterator;->previous()Ljava/lang/Object;
+HSPLjava/util/ListIterator;->previousIndex()I
+HSPLjava/util/Locale$Cache;->createObject(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/Locale$Cache;->createObject(Ljava/util/Locale$LocaleKey;)Ljava/util/Locale;
+HSPLjava/util/Locale$LocaleKey;->-get0(Ljava/util/Locale$LocaleKey;)Lsun/util/locale/BaseLocale;
+HSPLjava/util/Locale$LocaleKey;->-get1(Ljava/util/Locale$LocaleKey;)Lsun/util/locale/LocaleExtensions;
+HSPLjava/util/Locale$LocaleKey;-><init>(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)V
+HSPLjava/util/Locale$LocaleKey;-><init>(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;Ljava/util/Locale$LocaleKey;)V
+HSPLjava/util/Locale$LocaleKey;->equals(Ljava/lang/Object;)Z
+HSPLjava/util/Locale$LocaleKey;->hashCode()I
+HSPLjava/util/Locale;->-getjava-util-Locale$CategorySwitchesValues()[I
+HSPLjava/util/Locale;-><init>(Ljava/lang/String;)V
+HSPLjava/util/Locale;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+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;)V
+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;->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;
+HSPLjava/util/Locale;->getExtensionKeys()Ljava/util/Set;
+HSPLjava/util/Locale;->getISO3Country()Ljava/lang/String;
+HSPLjava/util/Locale;->getISO3Language()Ljava/lang/String;
+HSPLjava/util/Locale;->getISOCountries()[Ljava/lang/String;
+HSPLjava/util/Locale;->getISOLanguages()[Ljava/lang/String;
+HSPLjava/util/Locale;->getInstance(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)Ljava/util/Locale;
+HSPLjava/util/Locale;->getLanguage()Ljava/lang/String;
+HSPLjava/util/Locale;->getScript()Ljava/lang/String;
+HSPLjava/util/Locale;->getVariant()Ljava/lang/String;
+HSPLjava/util/Locale;->hasExtensions()Z
+HSPLjava/util/Locale;->hashCode()I
+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;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/Map;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/Map;->size()I
+HSPLjava/util/MissingResourceException;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/util/NavigableMap;->descendingMap()Ljava/util/NavigableMap;
+HSPLjava/util/NavigableMap;->headMap(Ljava/lang/Object;Z)Ljava/util/NavigableMap;
+HSPLjava/util/NavigableMap;->subMap(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/NavigableMap;
+HSPLjava/util/NavigableMap;->tailMap(Ljava/lang/Object;Z)Ljava/util/NavigableMap;
+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;->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;)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>()V
+HSPLjava/util/Optional;->empty()Ljava/util/Optional;
+HSPLjava/util/Optional;->isPresent()Z
+HSPLjava/util/PriorityQueue$Itr;-><init>(Ljava/util/PriorityQueue;)V
+HSPLjava/util/PriorityQueue$Itr;-><init>(Ljava/util/PriorityQueue;Ljava/util/PriorityQueue$Itr;)V
+HSPLjava/util/PriorityQueue$Itr;->hasNext()Z
+HSPLjava/util/PriorityQueue$Itr;->next()Ljava/lang/Object;
+HSPLjava/util/PriorityQueue$Itr;->remove()V
+HSPLjava/util/PriorityQueue;-><init>()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
+HSPLjava/util/PriorityQueue;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/PriorityQueue;->grow(I)V
+HSPLjava/util/PriorityQueue;->indexOf(Ljava/lang/Object;)I
+HSPLjava/util/PriorityQueue;->initElementsFromCollection(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;
+HSPLjava/util/PriorityQueue;->poll()Ljava/lang/Object;
+HSPLjava/util/PriorityQueue;->remove(Ljava/lang/Object;)Z
+HSPLjava/util/PriorityQueue;->removeAt(I)Ljava/lang/Object;
+HSPLjava/util/PriorityQueue;->siftDown(ILjava/lang/Object;)V
+HSPLjava/util/PriorityQueue;->siftDownComparable(ILjava/lang/Object;)V
+HSPLjava/util/PriorityQueue;->siftDownUsingComparator(ILjava/lang/Object;)V
+HSPLjava/util/PriorityQueue;->siftUp(ILjava/lang/Object;)V
+HSPLjava/util/PriorityQueue;->siftUpComparable(ILjava/lang/Object;)V
+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;->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;->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;
+HSPLjava/util/Random;-><init>()V
+HSPLjava/util/Random;-><init>(J)V
+HSPLjava/util/Random;->initialScramble(J)J
+HSPLjava/util/Random;->next(I)I
+HSPLjava/util/Random;->nextBytes([B)V
+HSPLjava/util/Random;->nextDouble()D
+HSPLjava/util/Random;->nextFloat()F
+HSPLjava/util/Random;->nextGaussian()D
+HSPLjava/util/Random;->nextInt()I
+HSPLjava/util/Random;->nextInt(I)I
+HSPLjava/util/Random;->nextLong()J
+HSPLjava/util/Random;->seedUniquifier()J
+HSPLjava/util/Random;->setSeed(J)V
+HSPLjava/util/RegularEnumSet$EnumSetIterator;-><init>(Ljava/util/RegularEnumSet;)V
+HSPLjava/util/RegularEnumSet$EnumSetIterator;->hasNext()Z
+HSPLjava/util/RegularEnumSet$EnumSetIterator;->next()Ljava/lang/Enum;
+HSPLjava/util/RegularEnumSet$EnumSetIterator;->next()Ljava/lang/Object;
+HSPLjava/util/RegularEnumSet;->-get0(Ljava/util/RegularEnumSet;)J
+HSPLjava/util/RegularEnumSet;-><init>(Ljava/lang/Class;[Ljava/lang/Enum;)V
+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
+HSPLjava/util/RegularEnumSet;->addRange(Ljava/lang/Enum;Ljava/lang/Enum;)V
+HSPLjava/util/RegularEnumSet;->clear()V
+HSPLjava/util/RegularEnumSet;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/RegularEnumSet;->containsAll(Ljava/util/Collection;)Z
+HSPLjava/util/RegularEnumSet;->equals(Ljava/lang/Object;)Z
+HSPLjava/util/RegularEnumSet;->isEmpty()Z
+HSPLjava/util/RegularEnumSet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/RegularEnumSet;->remove(Ljava/lang/Object;)Z
+HSPLjava/util/RegularEnumSet;->size()I
+HSPLjava/util/ResourceBundle;-><init>()V
+HSPLjava/util/ResourceBundle;->getObject(Ljava/lang/String;)Ljava/lang/Object;
+HSPLjava/util/ResourceBundle;->getString(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/util/ResourceBundle;->getStringArray(Ljava/lang/String;)[Ljava/lang/String;
+HSPLjava/util/Set;->spliterator()Ljava/util/Spliterator;
+HSPLjava/util/SimpleTimeZone;-><init>(ILjava/lang/String;)V
+HSPLjava/util/SimpleTimeZone;->clone()Ljava/lang/Object;
+HSPLjava/util/SimpleTimeZone;->getOffset(J)I
+HSPLjava/util/SimpleTimeZone;->getOffsets(J[I)I
+HSPLjava/util/SimpleTimeZone;->getRawOffset()I
+HSPLjava/util/SimpleTimeZone;->hasSameRules(Ljava/util/TimeZone;)Z
+HSPLjava/util/SortedMap;->comparator()Ljava/util/Comparator;
+HSPLjava/util/SortedMap;->firstKey()Ljava/lang/Object;
+HSPLjava/util/SortedMap;->headMap(Ljava/lang/Object;)Ljava/util/SortedMap;
+HSPLjava/util/SortedMap;->lastKey()Ljava/lang/Object;
+HSPLjava/util/SortedMap;->subMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/SortedMap;
+HSPLjava/util/SortedMap;->tailMap(Ljava/lang/Object;)Ljava/util/SortedMap;
+HSPLjava/util/Spliterator;->getExactSizeIfKnown()J
+HSPLjava/util/Spliterator;->tryAdvance(Ljava/util/function/Consumer;)Z
+HSPLjava/util/Spliterator;->trySplit()Ljava/util/Spliterator;
+HSPLjava/util/Spliterators$IteratorSpliterator;-><init>(Ljava/util/Collection;I)V
+HSPLjava/util/Spliterators$IteratorSpliterator;->characteristics()I
+HSPLjava/util/Spliterators$IteratorSpliterator;->estimateSize()J
+HSPLjava/util/Spliterators$IteratorSpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
+HSPLjava/util/Spliterators$IteratorSpliterator;->tryAdvance(Ljava/util/function/Consumer;)Z
+HSPLjava/util/Spliterators;->spliterator(Ljava/util/Collection;I)Ljava/util/Spliterator;
+HSPLjava/util/Stack;-><init>()V
+HSPLjava/util/Stack;->empty()Z
+HSPLjava/util/Stack;->peek()Ljava/lang/Object;
+HSPLjava/util/Stack;->pop()Ljava/lang/Object;
+HSPLjava/util/Stack;->push(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/StringJoiner;-><init>(Ljava/lang/CharSequence;)V
+HSPLjava/util/StringJoiner;-><init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V
+HSPLjava/util/StringJoiner;->add(Ljava/lang/CharSequence;)Ljava/util/StringJoiner;
+HSPLjava/util/StringJoiner;->prepareBuilder()Ljava/lang/StringBuilder;
+HSPLjava/util/StringJoiner;->toString()Ljava/lang/String;
+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;->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/TaskQueue;-><init>()V
+HSPLjava/util/TaskQueue;->add(Ljava/util/TimerTask;)V
+HSPLjava/util/TaskQueue;->clear()V
+HSPLjava/util/TaskQueue;->fixDown(I)V
+HSPLjava/util/TaskQueue;->fixUp(I)V
+HSPLjava/util/TaskQueue;->getMin()Ljava/util/TimerTask;
+HSPLjava/util/TaskQueue;->isEmpty()Z
+HSPLjava/util/TaskQueue;->removeMin()V
+HSPLjava/util/TaskQueue;->rescheduleMin(J)V
+HSPLjava/util/TimSort;-><init>([Ljava/lang/Object;Ljava/util/Comparator;[Ljava/lang/Object;II)V
+HSPLjava/util/TimSort;->binarySort([Ljava/lang/Object;IIILjava/util/Comparator;)V
+HSPLjava/util/TimSort;->countRunAndMakeAscending([Ljava/lang/Object;IILjava/util/Comparator;)I
+HSPLjava/util/TimSort;->ensureCapacity(I)[Ljava/lang/Object;
+HSPLjava/util/TimSort;->gallopLeft(Ljava/lang/Object;[Ljava/lang/Object;IIILjava/util/Comparator;)I
+HSPLjava/util/TimSort;->gallopRight(Ljava/lang/Object;[Ljava/lang/Object;IIILjava/util/Comparator;)I
+HSPLjava/util/TimSort;->mergeAt(I)V
+HSPLjava/util/TimSort;->mergeCollapse()V
+HSPLjava/util/TimSort;->mergeForceCollapse()V
+HSPLjava/util/TimSort;->mergeHi(IIII)V
+HSPLjava/util/TimSort;->mergeLo(IIII)V
+HSPLjava/util/TimSort;->minRunLength(I)I
+HSPLjava/util/TimSort;->pushRun(II)V
+HSPLjava/util/TimSort;->reverseRange([Ljava/lang/Object;II)V
+HSPLjava/util/TimSort;->sort([Ljava/lang/Object;IILjava/util/Comparator;[Ljava/lang/Object;II)V
+HSPLjava/util/TimeZone;-><init>()V
+HSPLjava/util/TimeZone;->clone()Ljava/lang/Object;
+HSPLjava/util/TimeZone;->getAvailableIDs()[Ljava/lang/String;
+HSPLjava/util/TimeZone;->getDefault()Ljava/util/TimeZone;
+HSPLjava/util/TimeZone;->getDefaultRef()Ljava/util/TimeZone;
+HSPLjava/util/TimeZone;->getID()Ljava/lang/String;
+HSPLjava/util/TimeZone;->getOffset(IIIIII)I
+HSPLjava/util/TimeZone;->getRawOffset()I
+HSPLjava/util/TimeZone;->getTimeZone(Ljava/lang/String;)Ljava/util/TimeZone;
+HSPLjava/util/TimeZone;->inDaylightTime(Ljava/util/Date;)Z
+HSPLjava/util/TimeZone;->setDefault(Ljava/util/TimeZone;)V
+HSPLjava/util/TimeZone;->setID(Ljava/lang/String;)V
+HSPLjava/util/TimeZone;->setRawOffset(I)V
+HSPLjava/util/TimeZone;->toZoneId()Ljava/time/ZoneId;
+HSPLjava/util/TimeZone;->useDaylightTime()Z
+HSPLjava/util/Timer$1;-><init>(Ljava/util/Timer;)V
+HSPLjava/util/Timer$1;->finalize()V
+HSPLjava/util/Timer;->-get0(Ljava/util/Timer;)Ljava/util/TaskQueue;
+HSPLjava/util/Timer;->-get1(Ljava/util/Timer;)Ljava/util/TimerThread;
+HSPLjava/util/Timer;-><init>()V
+HSPLjava/util/Timer;-><init>(Ljava/lang/String;)V
+HSPLjava/util/Timer;->sched(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/TimerTask;->run()V
+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
+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
+HSPLjava/util/TreeMap$AscendingSubMap;->entrySet()Ljava/util/Set;
+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$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
+HSPLjava/util/TreeMap$KeySet;->comparator()Ljava/util/Comparator;
+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$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;
+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;
+HSPLjava/util/TreeMap$NavigableSubMap;->absLowest()Ljava/util/TreeMap$TreeMapEntry;
+HSPLjava/util/TreeMap$NavigableSubMap;->descendingKeyIterator()Ljava/util/Iterator;
+HSPLjava/util/TreeMap$NavigableSubMap;->keyIterator()Ljava/util/Iterator;
+HSPLjava/util/TreeMap$NavigableSubMap;->keySpliterator()Ljava/util/Spliterator;
+HSPLjava/util/TreeMap$NavigableSubMap;->subCeiling(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
+HSPLjava/util/TreeMap$NavigableSubMap;->subFloor(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
+HSPLjava/util/TreeMap$NavigableSubMap;->subHigher(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
+HSPLjava/util/TreeMap$NavigableSubMap;->subHighest()Ljava/util/TreeMap$TreeMapEntry;
+HSPLjava/util/TreeMap$NavigableSubMap;->subLower(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
+HSPLjava/util/TreeMap$NavigableSubMap;->subLowest()Ljava/util/TreeMap$TreeMapEntry;
+HSPLjava/util/TreeMap$NavigableSubMap;->tooHigh(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;
+HSPLjava/util/TreeMap$TreeMapEntry;->setValue(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/TreeMap$ValueIterator;-><init>(Ljava/util/TreeMap;Ljava/util/TreeMap$TreeMapEntry;)V
+HSPLjava/util/TreeMap$ValueIterator;->next()Ljava/lang/Object;
+HSPLjava/util/TreeMap$Values;-><init>(Ljava/util/TreeMap;)V
+HSPLjava/util/TreeMap$Values;->iterator()Ljava/util/Iterator;
+HSPLjava/util/TreeMap$Values;->size()I
+HSPLjava/util/TreeMap;->-get0()Ljava/lang/Object;
+HSPLjava/util/TreeMap;->-get2(Ljava/util/TreeMap;)I
+HSPLjava/util/TreeMap;->-wrap0(Ljava/util/TreeMap;Ljava/util/TreeMap$TreeMapEntry;)V
+HSPLjava/util/TreeMap;-><init>()V
+HSPLjava/util/TreeMap;-><init>(Ljava/util/Comparator;)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;->ceilingKey(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/TreeMap;->clear()V
+HSPLjava/util/TreeMap;->clone()Ljava/lang/Object;
+HSPLjava/util/TreeMap;->colorOf(Ljava/util/TreeMap$TreeMapEntry;)Z
+HSPLjava/util/TreeMap;->comparator()Ljava/util/Comparator;
+HSPLjava/util/TreeMap;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLjava/util/TreeMap;->computeRedLevel(I)I
+HSPLjava/util/TreeMap;->containsKey(Ljava/lang/Object;)Z
+HSPLjava/util/TreeMap;->deleteEntry(Ljava/util/TreeMap$TreeMapEntry;)V
+HSPLjava/util/TreeMap;->entrySet()Ljava/util/Set;
+HSPLjava/util/TreeMap;->exportEntry(Ljava/util/TreeMap$TreeMapEntry;)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;->floorEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;
+HSPLjava/util/TreeMap;->floorKey(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/TreeMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/TreeMap;->getCeilingEntry(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
+HSPLjava/util/TreeMap;->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;->getLowerEntry(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
+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;
+HSPLjava/util/TreeMap;->leftOf(Ljava/util/TreeMap$TreeMapEntry;)Ljava/util/TreeMap$TreeMapEntry;
+HSPLjava/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;
+HSPLjava/util/TreeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/TreeMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/TreeMap;->rightOf(Ljava/util/TreeMap$TreeMapEntry;)Ljava/util/TreeMap$TreeMapEntry;
+HSPLjava/util/TreeMap;->rotateLeft(Ljava/util/TreeMap$TreeMapEntry;)V
+HSPLjava/util/TreeMap;->rotateRight(Ljava/util/TreeMap$TreeMapEntry;)V
+HSPLjava/util/TreeMap;->setColor(Ljava/util/TreeMap$TreeMapEntry;Z)V
+HSPLjava/util/TreeMap;->size()I
+HSPLjava/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;
+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
+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;->contains(Ljava/lang/Object;)Z
+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;->pollFirst()Ljava/lang/Object;
+HSPLjava/util/TreeSet;->remove(Ljava/lang/Object;)Z
+HSPLjava/util/TreeSet;->size()I
+HSPLjava/util/UUID;-><init>(JJ)V
+HSPLjava/util/UUID;-><init>([B)V
+HSPLjava/util/UUID;->digits(JI)Ljava/lang/String;
+HSPLjava/util/UUID;->equals(Ljava/lang/Object;)Z
+HSPLjava/util/UUID;->fromString(Ljava/lang/String;)Ljava/util/UUID;
+HSPLjava/util/UUID;->getLeastSignificantBits()J
+HSPLjava/util/UUID;->getMostSignificantBits()J
+HSPLjava/util/UUID;->hashCode()I
+HSPLjava/util/UUID;->randomUUID()Ljava/util/UUID;
+HSPLjava/util/UUID;->toString()Ljava/lang/String;
+HSPLjava/util/Vector$1;-><init>(Ljava/util/Vector;)V
+HSPLjava/util/Vector$1;->hasMoreElements()Z
+HSPLjava/util/Vector$1;->nextElement()Ljava/lang/Object;
+HSPLjava/util/Vector$Itr;-><init>(Ljava/util/Vector;)V
+HSPLjava/util/Vector$Itr;-><init>(Ljava/util/Vector;Ljava/util/Vector$Itr;)V
+HSPLjava/util/Vector$Itr;->checkForComodification()V
+HSPLjava/util/Vector$Itr;->hasNext()Z
+HSPLjava/util/Vector$Itr;->next()Ljava/lang/Object;
+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
+HSPLjava/util/Vector;->copyInto([Ljava/lang/Object;)V
+HSPLjava/util/Vector;->elementAt(I)Ljava/lang/Object;
+HSPLjava/util/Vector;->elementData(I)Ljava/lang/Object;
+HSPLjava/util/Vector;->elements()Ljava/util/Enumeration;
+HSPLjava/util/Vector;->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
+HSPLjava/util/Vector;->isEmpty()Z
+HSPLjava/util/Vector;->iterator()Ljava/util/Iterator;
+HSPLjava/util/Vector;->removeAllElements()V
+HSPLjava/util/Vector;->removeElement(Ljava/lang/Object;)Z
+HSPLjava/util/Vector;->removeElementAt(I)V
+HSPLjava/util/Vector;->size()I
+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$HashIterator;-><init>(Ljava/util/WeakHashMap;)V
+HSPLjava/util/WeakHashMap$HashIterator;->hasNext()Z
+HSPLjava/util/WeakHashMap$HashIterator;->nextEntry()Ljava/util/WeakHashMap$Entry;
+HSPLjava/util/WeakHashMap$KeyIterator;-><init>(Ljava/util/WeakHashMap;)V
+HSPLjava/util/WeakHashMap$KeyIterator;-><init>(Ljava/util/WeakHashMap;Ljava/util/WeakHashMap$KeyIterator;)V
+HSPLjava/util/WeakHashMap$KeyIterator;->next()Ljava/lang/Object;
+HSPLjava/util/WeakHashMap$KeySet;-><init>(Ljava/util/WeakHashMap;)V
+HSPLjava/util/WeakHashMap$KeySet;-><init>(Ljava/util/WeakHashMap;Ljava/util/WeakHashMap$KeySet;)V
+HSPLjava/util/WeakHashMap$KeySet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/WeakHashMap$KeySet;->size()I
+HSPLjava/util/WeakHashMap;-><init>()V
+HSPLjava/util/WeakHashMap;-><init>(I)V
+HSPLjava/util/WeakHashMap;-><init>(IF)V
+HSPLjava/util/WeakHashMap;->clear()V
+HSPLjava/util/WeakHashMap;->containsKey(Ljava/lang/Object;)Z
+HSPLjava/util/WeakHashMap;->eq(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLjava/util/WeakHashMap;->expungeStaleEntries()V
+HSPLjava/util/WeakHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/WeakHashMap;->getEntry(Ljava/lang/Object;)Ljava/util/WeakHashMap$Entry;
+HSPLjava/util/WeakHashMap;->getTable()[Ljava/util/WeakHashMap$Entry;
+HSPLjava/util/WeakHashMap;->hash(Ljava/lang/Object;)I
+HSPLjava/util/WeakHashMap;->indexFor(II)I
+HSPLjava/util/WeakHashMap;->isEmpty()Z
+HSPLjava/util/WeakHashMap;->keySet()Ljava/util/Set;
+HSPLjava/util/WeakHashMap;->maskNull(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/WeakHashMap;->newTable(I)[Ljava/util/WeakHashMap$Entry;
+HSPLjava/util/WeakHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/WeakHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/WeakHashMap;->resize(I)V
+HSPLjava/util/WeakHashMap;->size()I
+HSPLjava/util/WeakHashMap;->transfer([Ljava/util/WeakHashMap$Entry;[Ljava/util/WeakHashMap$Entry;)V
+HSPLjava/util/WeakHashMap;->unmaskNull(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/concurrent/AbstractExecutorService;-><init>()V
+HSPLjava/util/concurrent/AbstractExecutorService;->cancelAll(Ljava/util/ArrayList;I)V
+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/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;->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;->offer(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/ArrayBlockingQueue;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HSPLjava/util/concurrent/ArrayBlockingQueue;->put(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/ArrayBlockingQueue;->size()I
+HSPLjava/util/concurrent/ArrayBlockingQueue;->take()Ljava/lang/Object;
+HSPLjava/util/concurrent/BlockingDeque;->add(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/BlockingDeque;->addFirst(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/BlockingDeque;->addLast(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/BlockingDeque;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/BlockingDeque;->element()Ljava/lang/Object;
+HSPLjava/util/concurrent/BlockingDeque;->iterator()Ljava/util/Iterator;
+HSPLjava/util/concurrent/BlockingDeque;->offer(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/BlockingDeque;->offer(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z
+HSPLjava/util/concurrent/BlockingDeque;->offerFirst(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/BlockingDeque;->offerFirst(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z
+HSPLjava/util/concurrent/BlockingDeque;->offerLast(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/BlockingDeque;->offerLast(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z
+HSPLjava/util/concurrent/BlockingDeque;->peek()Ljava/lang/Object;
+HSPLjava/util/concurrent/BlockingDeque;->poll()Ljava/lang/Object;
+HSPLjava/util/concurrent/BlockingDeque;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HSPLjava/util/concurrent/BlockingDeque;->pollFirst(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HSPLjava/util/concurrent/BlockingDeque;->pollLast(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HSPLjava/util/concurrent/BlockingDeque;->push(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/BlockingDeque;->put(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/BlockingDeque;->putFirst(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/BlockingDeque;->putLast(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/BlockingDeque;->remove()Ljava/lang/Object;
+HSPLjava/util/concurrent/BlockingDeque;->remove(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/BlockingDeque;->removeFirstOccurrence(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/BlockingDeque;->removeLastOccurrence(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/BlockingDeque;->size()I
+HSPLjava/util/concurrent/BlockingDeque;->take()Ljava/lang/Object;
+HSPLjava/util/concurrent/BlockingDeque;->takeFirst()Ljava/lang/Object;
+HSPLjava/util/concurrent/BlockingDeque;->takeLast()Ljava/lang/Object;
+HSPLjava/util/concurrent/BlockingQueue;->add(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/BlockingQueue;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/BlockingQueue;->drainTo(Ljava/util/Collection;)I
+HSPLjava/util/concurrent/BlockingQueue;->drainTo(Ljava/util/Collection;I)I
+HSPLjava/util/concurrent/BlockingQueue;->offer(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/BlockingQueue;->offer(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z
+HSPLjava/util/concurrent/BlockingQueue;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HSPLjava/util/concurrent/BlockingQueue;->put(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/BlockingQueue;->remainingCapacity()I
+HSPLjava/util/concurrent/BlockingQueue;->remove(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/BlockingQueue;->take()Ljava/lang/Object;
+HSPLjava/util/concurrent/Callable;->call()Ljava/lang/Object;
+HSPLjava/util/concurrent/CancellationException;-><init>()V
+HSPLjava/util/concurrent/CompletableFuture$AltResult;-><init>(Ljava/lang/Throwable;)V
+HSPLjava/util/concurrent/CompletableFuture;-><init>()V
+HSPLjava/util/concurrent/CompletableFuture;->complete(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/CompletableFuture;->completeValue(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/CompletableFuture;->get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HSPLjava/util/concurrent/CompletableFuture;->postComplete()V
+HSPLjava/util/concurrent/CompletableFuture;->reportGet(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/concurrent/CompletionStage;->acceptEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->applyToEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->exceptionally(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->handle(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->handleAsync(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->handleAsync(Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->runAfterBoth(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->runAfterEither(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenAccept(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenAcceptAsync(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenAcceptAsync(Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenAcceptBoth(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenApply(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenApplyAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenApplyAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenCombine(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenCompose(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenComposeAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenComposeAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenRun(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenRunAsync(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->thenRunAsync(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->toCompletableFuture()Ljava/util/concurrent/CompletableFuture;
+HSPLjava/util/concurrent/CompletionStage;->whenComplete(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->whenCompleteAsync(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;
+HSPLjava/util/concurrent/CompletionStage;->whenCompleteAsync(Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)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$CollectionView;-><init>(Ljava/util/concurrent/ConcurrentHashMap;)V
+HSPLjava/util/concurrent/ConcurrentHashMap$CollectionView;->size()I
+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;
+HSPLjava/util/concurrent/ConcurrentHashMap$ForwardingNode;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;)V
+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;->iterator()Ljava/util/Iterator;
+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$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;
+HSPLjava/util/concurrent/ConcurrentHashMap$ValuesView;-><init>(Ljava/util/concurrent/ConcurrentHashMap;)V
+HSPLjava/util/concurrent/ConcurrentHashMap$ValuesView;->iterator()Ljava/util/Iterator;
+HSPLjava/util/concurrent/ConcurrentHashMap;-><init>()V
+HSPLjava/util/concurrent/ConcurrentHashMap;-><init>(I)V
+HSPLjava/util/concurrent/ConcurrentHashMap;-><init>(IFI)V
+HSPLjava/util/concurrent/ConcurrentHashMap;->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;->containsKey(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/ConcurrentHashMap;->containsValue(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/ConcurrentHashMap;->entrySet()Ljava/util/Set;
+HSPLjava/util/concurrent/ConcurrentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+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;->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
+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
+HSPLjava/util/concurrent/ConcurrentHashMap;->setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
+HSPLjava/util/concurrent/ConcurrentHashMap;->size()I
+HSPLjava/util/concurrent/ConcurrentHashMap;->spread(I)I
+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
+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;
+HSPLjava/util/concurrent/ConcurrentLinkedDeque$Node;-><init>()V
+HSPLjava/util/concurrent/ConcurrentLinkedDeque$Node;-><init>(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/ConcurrentLinkedDeque$Node;->casNext(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)Z
+HSPLjava/util/concurrent/ConcurrentLinkedDeque$Node;->lazySetPrev(Ljava/util/concurrent/ConcurrentLinkedDeque$Node;)V
+HSPLjava/util/concurrent/ConcurrentLinkedDeque;-><init>()V
+HSPLjava/util/concurrent/ConcurrentLinkedDeque;->addLast(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/ConcurrentLinkedDeque;->first()Ljava/util/concurrent/ConcurrentLinkedDeque$Node;
+HSPLjava/util/concurrent/ConcurrentLinkedDeque;->linkLast(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/ConcurrentLinkedDeque;->size()I
+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$Itr;->remove()V
+HSPLjava/util/concurrent/ConcurrentLinkedQueue$Node;-><init>()V
+HSPLjava/util/concurrent/ConcurrentLinkedQueue$Node;-><init>(Ljava/util/concurrent/ConcurrentLinkedQueue$Node;)V
+HSPLjava/util/concurrent/ConcurrentLinkedQueue;-><init>()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;->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;->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;->updateHead(Ljava/util/concurrent/ConcurrentLinkedQueue$Node;Ljava/util/concurrent/ConcurrentLinkedQueue$Node;)V
+HSPLjava/util/concurrent/ConcurrentNavigableMap;->descendingKeySet()Ljava/util/NavigableSet;
+HSPLjava/util/concurrent/ConcurrentNavigableMap;->descendingMap()Ljava/util/concurrent/ConcurrentNavigableMap;
+HSPLjava/util/concurrent/ConcurrentNavigableMap;->headMap(Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentNavigableMap;
+HSPLjava/util/concurrent/ConcurrentNavigableMap;->headMap(Ljava/lang/Object;Z)Ljava/util/concurrent/ConcurrentNavigableMap;
+HSPLjava/util/concurrent/ConcurrentNavigableMap;->keySet()Ljava/util/NavigableSet;
+HSPLjava/util/concurrent/ConcurrentNavigableMap;->navigableKeySet()Ljava/util/NavigableSet;
+HSPLjava/util/concurrent/ConcurrentNavigableMap;->subMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentNavigableMap;
+HSPLjava/util/concurrent/ConcurrentNavigableMap;->subMap(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/concurrent/ConcurrentNavigableMap;
+HSPLjava/util/concurrent/ConcurrentNavigableMap;->tailMap(Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentNavigableMap;
+HSPLjava/util/concurrent/ConcurrentNavigableMap;->tailMap(Ljava/lang/Object;Z)Ljava/util/concurrent/ConcurrentNavigableMap;
+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$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;->casNext(Ljava/util/concurrent/ConcurrentSkipListMap$Node;Ljava/util/concurrent/ConcurrentSkipListMap$Node;)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>(Ljava/util/Comparator;)V
+HSPLjava/util/concurrent/ConcurrentSkipListMap;->casHead(Ljava/util/concurrent/ConcurrentSkipListMap$HeadIndex;Ljava/util/concurrent/ConcurrentSkipListMap$HeadIndex;)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;->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;->values()Ljava/util/Collection;
+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;
+HSPLjava/util/concurrent/CopyOnWriteArrayList;-><init>()V
+HSPLjava/util/concurrent/CopyOnWriteArrayList;-><init>(Ljava/util/Collection;)V
+HSPLjava/util/concurrent/CopyOnWriteArrayList;-><init>([Ljava/lang/Object;)V
+HSPLjava/util/concurrent/CopyOnWriteArrayList;->add(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/CopyOnWriteArrayList;->addAll(Ljava/util/Collection;)Z
+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
+HSPLjava/util/concurrent/CopyOnWriteArrayList;->equals(Ljava/lang/Object;)Z
+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;
+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;->setArray([Ljava/lang/Object;)V
+HSPLjava/util/concurrent/CopyOnWriteArrayList;->size()I
+HSPLjava/util/concurrent/CopyOnWriteArrayList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLjava/util/concurrent/CopyOnWriteArraySet;-><init>()V
+HSPLjava/util/concurrent/CopyOnWriteArraySet;->add(Ljava/lang/Object;)Z
+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/CountDownLatch$Sync;-><init>(I)V
+HSPLjava/util/concurrent/CountDownLatch$Sync;->getCount()I
+HSPLjava/util/concurrent/CountDownLatch$Sync;->tryAcquireShared(I)I
+HSPLjava/util/concurrent/CountDownLatch$Sync;->tryReleaseShared(I)Z
+HSPLjava/util/concurrent/CountDownLatch;-><init>(I)V
+HSPLjava/util/concurrent/CountDownLatch;->await()V
+HSPLjava/util/concurrent/CountDownLatch;->await(JLjava/util/concurrent/TimeUnit;)Z
+HSPLjava/util/concurrent/CountDownLatch;->countDown()V
+HSPLjava/util/concurrent/CountDownLatch;->getCount()J
+HSPLjava/util/concurrent/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/Delayed;->getDelay(Ljava/util/concurrent/TimeUnit;)J
+HSPLjava/util/concurrent/ExecutionException;-><init>(Ljava/lang/Throwable;)V
+HSPLjava/util/concurrent/ExecutorService;->awaitTermination(JLjava/util/concurrent/TimeUnit;)Z
+HSPLjava/util/concurrent/ExecutorService;->isTerminated()Z
+HSPLjava/util/concurrent/ExecutorService;->shutdownNow()Ljava/util/List;
+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
+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;->submit(Ljava/lang/Runnable;)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;->scheduleAtFixedRate(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/lang/Object;)Ljava/util/concurrent/Callable;
+HSPLjava/util/concurrent/Executors;->defaultThreadFactory()Ljava/util/concurrent/ThreadFactory;
+HSPLjava/util/concurrent/Executors;->newCachedThreadPool()Ljava/util/concurrent/ExecutorService;
+HSPLjava/util/concurrent/Executors;->newCachedThreadPool(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ExecutorService;
+HSPLjava/util/concurrent/Executors;->newFixedThreadPool(I)Ljava/util/concurrent/ExecutorService;
+HSPLjava/util/concurrent/Executors;->newFixedThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ExecutorService;
+HSPLjava/util/concurrent/Executors;->newScheduledThreadPool(I)Ljava/util/concurrent/ScheduledExecutorService;
+HSPLjava/util/concurrent/Executors;->newScheduledThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;
+HSPLjava/util/concurrent/Executors;->newSingleThreadExecutor()Ljava/util/concurrent/ExecutorService;
+HSPLjava/util/concurrent/Executors;->newSingleThreadExecutor(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ExecutorService;
+HSPLjava/util/concurrent/Executors;->newSingleThreadScheduledExecutor()Ljava/util/concurrent/ScheduledExecutorService;
+HSPLjava/util/concurrent/Executors;->newSingleThreadScheduledExecutor(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;
+HSPLjava/util/concurrent/ForkJoinPool$1;-><init>()V
+HSPLjava/util/concurrent/ForkJoinPool$1;->run()Ljava/lang/Object;
+HSPLjava/util/concurrent/ForkJoinPool$1;->run()Ljava/util/concurrent/ForkJoinPool;
+HSPLjava/util/concurrent/ForkJoinPool$DefaultForkJoinWorkerThreadFactory;-><init>()V
+HSPLjava/util/concurrent/ForkJoinPool$DefaultForkJoinWorkerThreadFactory;-><init>(Ljava/util/concurrent/ForkJoinPool$DefaultForkJoinWorkerThreadFactory;)V
+HSPLjava/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory;->newThread(Ljava/util/concurrent/ForkJoinPool;)Ljava/util/concurrent/ForkJoinWorkerThread;
+HSPLjava/util/concurrent/ForkJoinPool;-><init>(ILjava/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory;Ljava/lang/Thread$UncaughtExceptionHandler;ILjava/lang/String;)V
+HSPLjava/util/concurrent/ForkJoinPool;->commonPool()Ljava/util/concurrent/ForkJoinPool;
+HSPLjava/util/concurrent/ForkJoinPool;->getCommonPoolParallelism()I
+HSPLjava/util/concurrent/ForkJoinPool;->makeCommonPool()Ljava/util/concurrent/ForkJoinPool;
+HSPLjava/util/concurrent/Future;->cancel(Z)Z
+HSPLjava/util/concurrent/Future;->get()Ljava/lang/Object;
+HSPLjava/util/concurrent/Future;->isCancelled()Z
+HSPLjava/util/concurrent/Future;->isDone()Z
+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
+HSPLjava/util/concurrent/FutureTask;->awaitDone(ZJ)I
+HSPLjava/util/concurrent/FutureTask;->cancel(Z)Z
+HSPLjava/util/concurrent/FutureTask;->done()V
+HSPLjava/util/concurrent/FutureTask;->finishCompletion()V
+HSPLjava/util/concurrent/FutureTask;->get()Ljava/lang/Object;
+HSPLjava/util/concurrent/FutureTask;->get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HSPLjava/util/concurrent/FutureTask;->handlePossibleCancellationInterrupt(I)V
+HSPLjava/util/concurrent/FutureTask;->isCancelled()Z
+HSPLjava/util/concurrent/FutureTask;->isDone()Z
+HSPLjava/util/concurrent/FutureTask;->removeWaiter(Ljava/util/concurrent/FutureTask$WaitNode;)V
+HSPLjava/util/concurrent/FutureTask;->report(I)Ljava/lang/Object;
+HSPLjava/util/concurrent/FutureTask;->run()V
+HSPLjava/util/concurrent/FutureTask;->runAndReset()Z
+HSPLjava/util/concurrent/FutureTask;->set(Ljava/lang/Object;)V
+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;->linkLast(Ljava/util/concurrent/LinkedBlockingDeque$Node;)Z
+HSPLjava/util/concurrent/LinkedBlockingDeque;->offer(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/LinkedBlockingDeque;->offerLast(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/LinkedBlockingDeque;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HSPLjava/util/concurrent/LinkedBlockingDeque;->pollFirst(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HSPLjava/util/concurrent/LinkedBlockingDeque;->size()I
+HSPLjava/util/concurrent/LinkedBlockingDeque;->take()Ljava/lang/Object;
+HSPLjava/util/concurrent/LinkedBlockingDeque;->takeFirst()Ljava/lang/Object;
+HSPLjava/util/concurrent/LinkedBlockingDeque;->unlinkFirst()Ljava/lang/Object;
+HSPLjava/util/concurrent/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;->offer(Ljava/lang/Object;)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;->signalNotEmpty()V
+HSPLjava/util/concurrent/LinkedBlockingQueue;->size()I
+HSPLjava/util/concurrent/LinkedBlockingQueue;->take()Ljava/lang/Object;
+HSPLjava/util/concurrent/LinkedBlockingQueue;->toArray()[Ljava/lang/Object;
+HSPLjava/util/concurrent/PriorityBlockingQueue;-><init>()V
+HSPLjava/util/concurrent/PriorityBlockingQueue;-><init>(ILjava/util/Comparator;)V
+HSPLjava/util/concurrent/PriorityBlockingQueue;->add(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/PriorityBlockingQueue;->dequeue()Ljava/lang/Object;
+HSPLjava/util/concurrent/PriorityBlockingQueue;->offer(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/PriorityBlockingQueue;->put(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/PriorityBlockingQueue;->siftDownComparable(ILjava/lang/Object;[Ljava/lang/Object;I)V
+HSPLjava/util/concurrent/PriorityBlockingQueue;->siftUpComparable(ILjava/lang/Object;[Ljava/lang/Object;)V
+HSPLjava/util/concurrent/PriorityBlockingQueue;->take()Ljava/lang/Object;
+HSPLjava/util/concurrent/RejectedExecutionHandler;->rejectedExecution(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V
+HSPLjava/util/concurrent/RunnableFuture;->run()V
+HSPLjava/util/concurrent/RunnableScheduledFuture;->isPeriodic()Z
+HSPLjava/util/concurrent/ScheduledExecutorService;->schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
+HSPLjava/util/concurrent/ScheduledExecutorService;->schedule(Ljava/util/concurrent/Callable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
+HSPLjava/util/concurrent/ScheduledExecutorService;->scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
+HSPLjava/util/concurrent/ScheduledExecutorService;->scheduleWithFixedDelay(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;-><init>()V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->add(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->add(Ljava/lang/Runnable;)Z
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->drainTo(Ljava/util/Collection;)I
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->finishPoll(Ljava/util/concurrent/RunnableScheduledFuture;)Ljava/util/concurrent/RunnableScheduledFuture;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->isEmpty()Z
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->offer(Ljava/lang/Runnable;)Z
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->peekExpired()Ljava/util/concurrent/RunnableScheduledFuture;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/RunnableScheduledFuture;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->setIndex(Ljava/util/concurrent/RunnableScheduledFuture;I)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->siftDown(ILjava/util/concurrent/RunnableScheduledFuture;)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->siftUp(ILjava/util/concurrent/RunnableScheduledFuture;)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->size()I
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->take()Ljava/lang/Object;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->take()Ljava/util/concurrent/RunnableScheduledFuture;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->toArray()[Ljava/lang/Object;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;-><init>(Ljava/util/concurrent/ScheduledThreadPoolExecutor;Ljava/lang/Runnable;Ljava/lang/Object;JJ)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;-><init>(Ljava/util/concurrent/ScheduledThreadPoolExecutor;Ljava/lang/Runnable;Ljava/lang/Object;JJJ)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;-><init>(Ljava/util/concurrent/ScheduledThreadPoolExecutor;Ljava/util/concurrent/Callable;JJ)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->cancel(Z)Z
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->compareTo(Ljava/lang/Object;)I
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->compareTo(Ljava/util/concurrent/Delayed;)I
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->getDelay(Ljava/util/concurrent/TimeUnit;)J
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->isPeriodic()Z
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->run()V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->setNextRunTime()V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;-><init>(I)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;-><init>(ILjava/util/concurrent/ThreadFactory;)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;-><init>(ILjava/util/concurrent/ThreadFactory;Ljava/util/concurrent/RejectedExecutionHandler;)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->canRunInCurrentRunState(Z)Z
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->decorateTask(Ljava/lang/Runnable;Ljava/util/concurrent/RunnableScheduledFuture;)Ljava/util/concurrent/RunnableScheduledFuture;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->decorateTask(Ljava/util/concurrent/Callable;Ljava/util/concurrent/RunnableScheduledFuture;)Ljava/util/concurrent/RunnableScheduledFuture;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->delayedExecute(Ljava/util/concurrent/RunnableScheduledFuture;)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->getContinueExistingPeriodicTasksAfterShutdownPolicy()Z
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->getExecuteExistingDelayedTasksAfterShutdownPolicy()Z
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->onShutdown()V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->reExecutePeriodic(Ljava/util/concurrent/RunnableScheduledFuture;)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->schedule(Ljava/util/concurrent/Callable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->setRemoveOnCancelPolicy(Z)V
+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$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;->tryAcquire()Z
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack$SNode;-><init>(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack$SNode;->isCancelled()Z
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack$SNode;->tryCancel()V
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack$SNode;->tryMatch(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;)Z
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack;-><init>()V
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->awaitFulfill(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;ZJ)Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->casHead(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;)Z
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->clean(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;)V
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->isFulfilling(I)Z
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->shouldSpin(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;)Z
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->snode(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;Ljava/lang/Object;Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;I)Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->transfer(Ljava/lang/Object;ZJ)Ljava/lang/Object;
+HSPLjava/util/concurrent/SynchronousQueue$Transferer;-><init>()V
+HSPLjava/util/concurrent/SynchronousQueue$Transferer;->transfer(Ljava/lang/Object;ZJ)Ljava/lang/Object;
+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;->take()Ljava/lang/Object;
+HSPLjava/util/concurrent/ThreadFactory;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
+HSPLjava/util/concurrent/ThreadLocalRandom$1;-><init>()V
+HSPLjava/util/concurrent/ThreadLocalRandom$1;->run()Ljava/lang/Boolean;
+HSPLjava/util/concurrent/ThreadLocalRandom$1;->run()Ljava/lang/Object;
+HSPLjava/util/concurrent/ThreadLocalRandom;-><init>()V
+HSPLjava/util/concurrent/ThreadLocalRandom;->current()Ljava/util/concurrent/ThreadLocalRandom;
+HSPLjava/util/concurrent/ThreadLocalRandom;->localInit()V
+HSPLjava/util/concurrent/ThreadLocalRandom;->mix32(J)I
+HSPLjava/util/concurrent/ThreadLocalRandom;->mix64(J)J
+HSPLjava/util/concurrent/ThreadLocalRandom;->nextInt()I
+HSPLjava/util/concurrent/ThreadLocalRandom;->nextSecondarySeed()I
+HSPLjava/util/concurrent/ThreadLocalRandom;->nextSeed()J
+HSPLjava/util/concurrent/ThreadLocalRandom;->setSeed(J)V
+HSPLjava/util/concurrent/ThreadPoolExecutor$AbortPolicy;-><init>()V
+HSPLjava/util/concurrent/ThreadPoolExecutor$DiscardOldestPolicy;-><init>()V
+HSPLjava/util/concurrent/ThreadPoolExecutor$DiscardPolicy;-><init>()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;->lock()V
+HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->run()V
+HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->tryAcquire(I)Z
+HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->tryLock()Z
+HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->tryRelease(I)Z
+HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->unlock()V
+HSPLjava/util/concurrent/ThreadPoolExecutor;-><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
+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
+HSPLjava/util/concurrent/ThreadPoolExecutor;->compareAndIncrementWorkerCount(I)Z
+HSPLjava/util/concurrent/ThreadPoolExecutor;->ctlOf(II)I
+HSPLjava/util/concurrent/ThreadPoolExecutor;->decrementWorkerCount()V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->drainQueue()Ljava/util/List;
+HSPLjava/util/concurrent/ThreadPoolExecutor;->ensurePrestart()V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->finalize()V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->getMaximumPoolSize()I
+HSPLjava/util/concurrent/ThreadPoolExecutor;->getQueue()Ljava/util/concurrent/BlockingQueue;
+HSPLjava/util/concurrent/ThreadPoolExecutor;->getTask()Ljava/lang/Runnable;
+HSPLjava/util/concurrent/ThreadPoolExecutor;->getThreadFactory()Ljava/util/concurrent/ThreadFactory;
+HSPLjava/util/concurrent/ThreadPoolExecutor;->interruptIdleWorkers()V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->interruptIdleWorkers(Z)V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->interruptWorkers()V
+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;->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;->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;->setKeepAliveTime(JLjava/util/concurrent/TimeUnit;)V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->setMaximumPoolSize(I)V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->setRejectedExecutionHandler(Ljava/util/concurrent/RejectedExecutionHandler;)V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->setThreadFactory(Ljava/util/concurrent/ThreadFactory;)V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->shutdown()V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->shutdownNow()Ljava/util/List;
+HSPLjava/util/concurrent/ThreadPoolExecutor;->terminated()V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->tryTerminate()V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->workerCountOf(I)I
+HSPLjava/util/concurrent/TimeUnit$1;-><init>(Ljava/lang/String;I)V
+HSPLjava/util/concurrent/TimeUnit$1;->convert(JLjava/util/concurrent/TimeUnit;)J
+HSPLjava/util/concurrent/TimeUnit$1;->toMicros(J)J
+HSPLjava/util/concurrent/TimeUnit$1;->toMillis(J)J
+HSPLjava/util/concurrent/TimeUnit$1;->toNanos(J)J
+HSPLjava/util/concurrent/TimeUnit$2;-><init>(Ljava/lang/String;I)V
+HSPLjava/util/concurrent/TimeUnit$2;->convert(JLjava/util/concurrent/TimeUnit;)J
+HSPLjava/util/concurrent/TimeUnit$2;->toMicros(J)J
+HSPLjava/util/concurrent/TimeUnit$3;-><init>(Ljava/lang/String;I)V
+HSPLjava/util/concurrent/TimeUnit$3;->convert(JLjava/util/concurrent/TimeUnit;)J
+HSPLjava/util/concurrent/TimeUnit$3;->toDays(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;-><init>(Ljava/lang/String;I)V
+HSPLjava/util/concurrent/TimeUnit$4;->toMicros(J)J
+HSPLjava/util/concurrent/TimeUnit$4;->toMillis(J)J
+HSPLjava/util/concurrent/TimeUnit$4;->toNanos(J)J
+HSPLjava/util/concurrent/TimeUnit$4;->toSeconds(J)J
+HSPLjava/util/concurrent/TimeUnit$5;-><init>(Ljava/lang/String;I)V
+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;-><init>(Ljava/lang/String;I)V
+HSPLjava/util/concurrent/TimeUnit$6;->toMillis(J)J
+HSPLjava/util/concurrent/TimeUnit$6;->toMinutes(J)J
+HSPLjava/util/concurrent/TimeUnit$6;->toSeconds(J)J
+HSPLjava/util/concurrent/TimeUnit$7;-><init>(Ljava/lang/String;I)V
+HSPLjava/util/concurrent/TimeUnit$7;->toHours(J)J
+HSPLjava/util/concurrent/TimeUnit$7;->toMillis(J)J
+HSPLjava/util/concurrent/TimeUnit$7;->toSeconds(J)J
+HSPLjava/util/concurrent/TimeUnit;-><init>(Ljava/lang/String;I)V
+HSPLjava/util/concurrent/TimeUnit;-><init>(Ljava/lang/String;ILjava/util/concurrent/TimeUnit;)V
+HSPLjava/util/concurrent/TimeUnit;->x(JJJ)J
+HSPLjava/util/concurrent/TimeoutException;-><init>()V
+HSPLjava/util/concurrent/atomic/AtomicBoolean;-><init>()V
+HSPLjava/util/concurrent/atomic/AtomicBoolean;-><init>(Z)V
+HSPLjava/util/concurrent/atomic/AtomicBoolean;->compareAndSet(ZZ)Z
+HSPLjava/util/concurrent/atomic/AtomicBoolean;->get()Z
+HSPLjava/util/concurrent/atomic/AtomicBoolean;->getAndSet(Z)Z
+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
+HSPLjava/util/concurrent/atomic/AtomicInteger;->compareAndSet(II)Z
+HSPLjava/util/concurrent/atomic/AtomicInteger;->decrementAndGet()I
+HSPLjava/util/concurrent/atomic/AtomicInteger;->get()I
+HSPLjava/util/concurrent/atomic/AtomicInteger;->getAndAdd(I)I
+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;->incrementAndGet()I
+HSPLjava/util/concurrent/atomic/AtomicInteger;->lazySet(I)V
+HSPLjava/util/concurrent/atomic/AtomicInteger;->set(I)V
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl$1;-><init>(Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;Ljava/lang/Class;Ljava/lang/String;)V
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl$1;->run()Ljava/lang/Object;
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl$1;->run()Ljava/lang/reflect/Field;
+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;->decrementAndGet(Ljava/lang/Object;)I
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->getAndAdd(Ljava/lang/Object;I)I
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater;-><init>()V
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater;->compareAndSet(Ljava/lang/Object;II)Z
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater;->get(Ljava/lang/Object;)I
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater;->lazySet(Ljava/lang/Object;I)V
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater;->set(Ljava/lang/Object;I)V
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater;->weakCompareAndSet(Ljava/lang/Object;II)Z
+HSPLjava/util/concurrent/atomic/AtomicLong;-><init>()V
+HSPLjava/util/concurrent/atomic/AtomicLong;-><init>(J)V
+HSPLjava/util/concurrent/atomic/AtomicLong;->addAndGet(J)J
+HSPLjava/util/concurrent/atomic/AtomicLong;->compareAndSet(JJ)Z
+HSPLjava/util/concurrent/atomic/AtomicLong;->get()J
+HSPLjava/util/concurrent/atomic/AtomicLong;->getAndAdd(J)J
+HSPLjava/util/concurrent/atomic/AtomicLong;->getAndIncrement()J
+HSPLjava/util/concurrent/atomic/AtomicLong;->incrementAndGet()J
+HSPLjava/util/concurrent/atomic/AtomicLong;->set(J)V
+HSPLjava/util/concurrent/atomic/AtomicReference;-><init>()V
+HSPLjava/util/concurrent/atomic/AtomicReference;-><init>(Ljava/lang/Object;)V
+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;
+HSPLjava/util/concurrent/atomic/AtomicReference;->set(Ljava/lang/Object;)V
+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;->get(I)Ljava/lang/Object;
+HSPLjava/util/concurrent/atomic/AtomicReferenceArray;->getRaw(J)Ljava/lang/Object;
+HSPLjava/util/concurrent/atomic/AtomicReferenceArray;->length()I
+HSPLjava/util/concurrent/atomic/AtomicReferenceArray;->set(ILjava/lang/Object;)V
+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;->valueCheck(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/atomic/AtomicReferenceFieldUpdater;-><init>()V
+HSPLjava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->lazySet(Ljava/lang/Object;Ljava/lang/Object;)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/AtomicReferenceFieldUpdater;->set(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLjava/util/concurrent/atomic/AtomicReferenceFieldUpdater;->weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
+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
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;-><init>(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->addConditionWaiter()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->await()V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->awaitNanos(J)J
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->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
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->unlinkCancelledWaiters()V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;-><init>()V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;-><init>(I)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;-><init>(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;->compareAndSetWaitStatus(II)Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;->isShared()Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;->predecessor()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;-><init>()V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquire(I)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireInterruptibly(I)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireQueued(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;I)Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireShared(I)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireSharedInterruptibly(I)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->addWaiter(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->apparentlyFirstQueuedIsExclusive()Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->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;->doAcquireShared(I)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doAcquireSharedInterruptibly(I)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doAcquireSharedNanos(IJ)Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doReleaseShared()V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->enq(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->findNodeFromTail(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->fullyRelease(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)I
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->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
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->selfInterrupt()V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->setHead(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->setHeadAndPropagate(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;I)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->setState(I)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->shouldParkAfterFailedAcquire(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->transferAfterCancelledWait(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->transferForSignal(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->tryAcquireSharedNanos(IJ)Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->unparkSuccessor(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
+HSPLjava/util/concurrent/locks/Condition;->await()V
+HSPLjava/util/concurrent/locks/Condition;->await(JLjava/util/concurrent/TimeUnit;)Z
+HSPLjava/util/concurrent/locks/Condition;->awaitNanos(J)J
+HSPLjava/util/concurrent/locks/Condition;->awaitUninterruptibly()V
+HSPLjava/util/concurrent/locks/Condition;->awaitUntil(Ljava/util/Date;)Z
+HSPLjava/util/concurrent/locks/Condition;->signal()V
+HSPLjava/util/concurrent/locks/Condition;->signalAll()V
+HSPLjava/util/concurrent/locks/LockSupport;->park(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/locks/LockSupport;->parkNanos(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/ReadWriteLock;->readLock()Ljava/util/concurrent/locks/Lock;
+HSPLjava/util/concurrent/locks/ReadWriteLock;->writeLock()Ljava/util/concurrent/locks/Lock;
+HSPLjava/util/concurrent/locks/ReentrantLock$FairSync;-><init>()V
+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;->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;->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;->unlock()V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;-><init>()V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;->readerShouldBlock()Z
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;-><init>()V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;->readerShouldBlock()Z
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;->writerShouldBlock()Z
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;-><init>(Ljava/util/concurrent/locks/ReentrantReadWriteLock;)V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;->lock()V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;->unlock()V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync$HoldCounter;-><init>()V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;-><init>()V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;->initialValue()Ljava/lang/Object;
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;->initialValue()Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync$HoldCounter;
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;-><init>()V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->exclusiveCount(I)I
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->isHeldExclusively()Z
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->readerShouldBlock()Z
+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
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryRelease(I)Z
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryReleaseShared(I)Z
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->writerShouldBlock()Z
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;-><init>(Ljava/util/concurrent/locks/ReentrantReadWriteLock;)V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;->lock()V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;->unlock()V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;-><init>()V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;-><init>(Z)V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;->getThreadId(Ljava/lang/Thread;)J
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;->readLock()Ljava/util/concurrent/locks/Lock;
+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;
+HSPLjava/util/function/-$Lambda$VGDeaUHZQIZywZW2ttlyhwk3Cmk$1;->$m$0(D)D
+HSPLjava/util/function/-$Lambda$VGDeaUHZQIZywZW2ttlyhwk3Cmk$1;-><init>(BLjava/lang/Object;Ljava/lang/Object;)V
+HSPLjava/util/function/-$Lambda$VGDeaUHZQIZywZW2ttlyhwk3Cmk$1;->applyAsDouble(D)D
+HSPLjava/util/function/Consumer;->accept(Ljava/lang/Object;)V
+HSPLjava/util/function/DoubleUnaryOperator;->andThen(Ljava/util/function/DoubleUnaryOperator;)Ljava/util/function/DoubleUnaryOperator;
+HSPLjava/util/function/DoubleUnaryOperator;->lambda$-java_util_function_DoubleUnaryOperator_3397(Ljava/util/function/DoubleUnaryOperator;D)D
+HSPLjava/util/function/Supplier;->get()Ljava/lang/Object;
+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
+HSPLjava/util/jar/Attributes$Name;->isAlpha(C)Z
+HSPLjava/util/jar/Attributes$Name;->isDigit(C)Z
+HSPLjava/util/jar/Attributes$Name;->isValid(C)Z
+HSPLjava/util/jar/Attributes$Name;->isValid(Ljava/lang/String;)Z
+HSPLjava/util/jar/Attributes$Name;->toString()Ljava/lang/String;
+HSPLjava/util/jar/Attributes;-><init>()V
+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/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;
+HSPLjava/util/jar/Attributes;->read(Ljava/util/jar/Manifest$FastInputStream;[B)V
+HSPLjava/util/jar/Attributes;->size()I
+HSPLjava/util/jar/JarEntry;-><init>(Ljava/util/zip/ZipEntry;)V
+HSPLjava/util/jar/JarFile$JarEntryIterator;-><init>(Ljava/util/jar/JarFile;)V
+HSPLjava/util/jar/JarFile$JarEntryIterator;-><init>(Ljava/util/jar/JarFile;Ljava/util/jar/JarFile$JarEntryIterator;)V
+HSPLjava/util/jar/JarFile$JarEntryIterator;->hasMoreElements()Z
+HSPLjava/util/jar/JarFile$JarEntryIterator;->hasNext()Z
+HSPLjava/util/jar/JarFile$JarEntryIterator;->next()Ljava/util/jar/JarEntry;
+HSPLjava/util/jar/JarFile$JarEntryIterator;->nextElement()Ljava/lang/Object;
+HSPLjava/util/jar/JarFile$JarEntryIterator;->nextElement()Ljava/util/jar/JarEntry;
+HSPLjava/util/jar/JarFile$JarFileEntry;-><init>(Ljava/util/jar/JarFile;Ljava/util/zip/ZipEntry;)V
+HSPLjava/util/jar/JarFile$JarFileEntry;->getCertificates()[Ljava/security/cert/Certificate;
+HSPLjava/util/jar/JarFile;->-wrap0(Ljava/util/jar/JarFile;)V
+HSPLjava/util/jar/JarFile;->-wrap1(Ljava/util/jar/JarFile;)Ljava/util/Enumeration;
+HSPLjava/util/jar/JarFile;-><init>(Ljava/io/File;Z)V
+HSPLjava/util/jar/JarFile;-><init>(Ljava/io/File;ZI)V
+HSPLjava/util/jar/JarFile;-><init>(Ljava/lang/String;)V
+HSPLjava/util/jar/JarFile;->entries()Ljava/util/Enumeration;
+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;
+HSPLjava/util/jar/JarFile;->getJarEntry(Ljava/lang/String;)Ljava/util/jar/JarEntry;
+HSPLjava/util/jar/JarFile;->getManEntry()Ljava/util/jar/JarEntry;
+HSPLjava/util/jar/JarFile;->getManifest()Ljava/util/jar/Manifest;
+HSPLjava/util/jar/JarFile;->getManifestFromReference()Ljava/util/jar/Manifest;
+HSPLjava/util/jar/JarFile;->initializeVerifier()V
+HSPLjava/util/jar/JarFile;->maybeInstantiateVerifier()V
+HSPLjava/util/jar/JarVerifier$1;-><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([BII)I
+HSPLjava/util/jar/JarVerifier;-><init>([B)V
+HSPLjava/util/jar/JarVerifier;->beginEntry(Ljava/util/jar/JarEntry;Lsun/security/util/ManifestEntryVerifier;)V
+HSPLjava/util/jar/JarVerifier;->doneWithMeta()V
+HSPLjava/util/jar/JarVerifier;->mapSignersToCertArray([Ljava/security/CodeSigner;)[Ljava/security/cert/Certificate;
+HSPLjava/util/jar/JarVerifier;->nothingToVerify()Z
+HSPLjava/util/jar/JarVerifier;->processEntry(Lsun/security/util/ManifestEntryVerifier;)V
+HSPLjava/util/jar/JarVerifier;->update(I[BIILsun/security/util/ManifestEntryVerifier;)V
+HSPLjava/util/jar/Manifest$FastInputStream;-><init>(Ljava/io/InputStream;)V
+HSPLjava/util/jar/Manifest$FastInputStream;-><init>(Ljava/io/InputStream;I)V
+HSPLjava/util/jar/Manifest$FastInputStream;->fill()V
+HSPLjava/util/jar/Manifest$FastInputStream;->peek()B
+HSPLjava/util/jar/Manifest$FastInputStream;->readLine([B)I
+HSPLjava/util/jar/Manifest$FastInputStream;->readLine([BII)I
+HSPLjava/util/jar/Manifest;-><init>()V
+HSPLjava/util/jar/Manifest;-><init>(Ljava/io/InputStream;)V
+HSPLjava/util/jar/Manifest;->getAttributes(Ljava/lang/String;)Ljava/util/jar/Attributes;
+HSPLjava/util/jar/Manifest;->getEntries()Ljava/util/Map;
+HSPLjava/util/jar/Manifest;->getMainAttributes()Ljava/util/jar/Attributes;
+HSPLjava/util/jar/Manifest;->parseName([BI)Ljava/lang/String;
+HSPLjava/util/jar/Manifest;->read(Ljava/io/InputStream;)V
+HSPLjava/util/jar/Manifest;->toLower(I)I
+HSPLjava/util/logging/ErrorManager;-><init>()V
+HSPLjava/util/logging/FileHandler$InitializationErrorManager;-><init>()V
+HSPLjava/util/logging/FileHandler$InitializationErrorManager;-><init>(Ljava/util/logging/FileHandler$InitializationErrorManager;)V
+HSPLjava/util/logging/FileHandler$MeteredStream;-><init>(Ljava/util/logging/FileHandler;Ljava/io/OutputStream;I)V
+HSPLjava/util/logging/FileHandler;-><init>(Ljava/lang/String;IIZ)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/Formatter;-><init>()V
+HSPLjava/util/logging/Formatter;->format(Ljava/util/logging/LogRecord;)Ljava/lang/String;
+HSPLjava/util/logging/Handler;-><init>()V
+HSPLjava/util/logging/Handler;->checkPermission()V
+HSPLjava/util/logging/Handler;->close()V
+HSPLjava/util/logging/Handler;->flush()V
+HSPLjava/util/logging/Handler;->getEncoding()Ljava/lang/String;
+HSPLjava/util/logging/Handler;->getFormatter()Ljava/util/logging/Formatter;
+HSPLjava/util/logging/Handler;->publish(Ljava/util/logging/LogRecord;)V
+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;->-get0(Ljava/util/logging/Level;)Ljava/lang/String;
+HSPLjava/util/logging/Level;->-get2(Ljava/util/logging/Level;)I
+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;->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/LogManager$1;-><init>()V
+HSPLjava/util/logging/LogManager$1;->run()Ljava/lang/Object;
+HSPLjava/util/logging/LogManager$1;->run()Ljava/util/logging/LogManager;
+HSPLjava/util/logging/LogManager$2;-><init>(Ljava/util/logging/LogManager;Ljava/util/logging/LogManager;)V
+HSPLjava/util/logging/LogManager$2;->run()Ljava/lang/Object;
+HSPLjava/util/logging/LogManager$3;-><init>(Ljava/util/logging/LogManager;)V
+HSPLjava/util/logging/LogManager$3;->run()Ljava/lang/Object;
+HSPLjava/util/logging/LogManager$3;->run()Ljava/lang/Void;
+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$Cleaner;-><init>(Ljava/util/logging/LogManager;)V
+HSPLjava/util/logging/LogManager$Cleaner;-><init>(Ljava/util/logging/LogManager;Ljava/util/logging/LogManager$Cleaner;)V
+HSPLjava/util/logging/LogManager$LogNode;-><init>(Ljava/util/logging/LogManager$LogNode;Ljava/util/logging/LogManager$LoggerContext;)V
+HSPLjava/util/logging/LogManager$LogNode;->walkAndSetParent(Ljava/util/logging/Logger;)V
+HSPLjava/util/logging/LogManager$LoggerContext$1;-><init>(Ljava/util/logging/LogManager$LoggerContext;Ljava/util/logging/Logger;Ljava/util/logging/LogManager;Ljava/lang/String;)V
+HSPLjava/util/logging/LogManager$LoggerContext$1;->run()Ljava/lang/Object;
+HSPLjava/util/logging/LogManager$LoggerContext$1;->run()Ljava/lang/Void;
+HSPLjava/util/logging/LogManager$LoggerContext;-><init>(Ljava/util/logging/LogManager;)V
+HSPLjava/util/logging/LogManager$LoggerContext;-><init>(Ljava/util/logging/LogManager;Ljava/util/logging/LogManager$LoggerContext;)V
+HSPLjava/util/logging/LogManager$LoggerContext;->addLocalLogger(Ljava/util/logging/Logger;Ljava/util/logging/LogManager;)Z
+HSPLjava/util/logging/LogManager$LoggerContext;->addLocalLogger(Ljava/util/logging/Logger;Z)Z
+HSPLjava/util/logging/LogManager$LoggerContext;->addLocalLogger(Ljava/util/logging/Logger;ZLjava/util/logging/LogManager;)Z
+HSPLjava/util/logging/LogManager$LoggerContext;->ensureAllDefaultLoggers(Ljava/util/logging/Logger;)V
+HSPLjava/util/logging/LogManager$LoggerContext;->ensureDefaultLogger(Ljava/util/logging/Logger;)V
+HSPLjava/util/logging/LogManager$LoggerContext;->ensureInitialized()V
+HSPLjava/util/logging/LogManager$LoggerContext;->findLogger(Ljava/lang/String;)Ljava/util/logging/Logger;
+HSPLjava/util/logging/LogManager$LoggerContext;->getGlobalLogger()Ljava/util/logging/Logger;
+HSPLjava/util/logging/LogManager$LoggerContext;->getLoggerNames()Ljava/util/Enumeration;
+HSPLjava/util/logging/LogManager$LoggerContext;->getNode(Ljava/lang/String;)Ljava/util/logging/LogManager$LogNode;
+HSPLjava/util/logging/LogManager$LoggerContext;->getOwner()Ljava/util/logging/LogManager;
+HSPLjava/util/logging/LogManager$LoggerContext;->getRootLogger()Ljava/util/logging/Logger;
+HSPLjava/util/logging/LogManager$LoggerContext;->processParentHandlers(Ljava/util/logging/Logger;Ljava/lang/String;)V
+HSPLjava/util/logging/LogManager$LoggerContext;->removeLoggerRef(Ljava/lang/String;Ljava/util/logging/LogManager$LoggerWeakRef;)V
+HSPLjava/util/logging/LogManager$LoggerContext;->requiresDefaultLoggers()Z
+HSPLjava/util/logging/LogManager$LoggerWeakRef;-><init>(Ljava/util/logging/LogManager;Ljava/util/logging/Logger;)V
+HSPLjava/util/logging/LogManager$LoggerWeakRef;->dispose()V
+HSPLjava/util/logging/LogManager$LoggerWeakRef;->setNode(Ljava/util/logging/LogManager$LogNode;)V
+HSPLjava/util/logging/LogManager$LoggerWeakRef;->setParentRef(Ljava/lang/ref/WeakReference;)V
+HSPLjava/util/logging/LogManager$RootLogger;-><init>(Ljava/util/logging/LogManager;)V
+HSPLjava/util/logging/LogManager$RootLogger;-><init>(Ljava/util/logging/LogManager;Ljava/util/logging/LogManager$RootLogger;)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;-><init>(Ljava/util/logging/LogManager;)V
+HSPLjava/util/logging/LogManager;->-get3(Ljava/util/logging/LogManager;)Ljava/lang/ref/ReferenceQueue;
+HSPLjava/util/logging/LogManager;->-get4()Ljava/util/logging/LogManager;
+HSPLjava/util/logging/LogManager;->-get5(Ljava/util/logging/LogManager;)Ljava/util/logging/Logger;
+HSPLjava/util/logging/LogManager;->-set2(Ljava/util/logging/LogManager;Ljava/util/logging/Logger;)Ljava/util/logging/Logger;
+HSPLjava/util/logging/LogManager;->-wrap1(Ljava/util/logging/LogManager;Ljava/lang/String;)[Ljava/lang/String;
+HSPLjava/util/logging/LogManager;->-wrap2(Ljava/util/logging/Logger;Ljava/util/logging/Level;)V
+HSPLjava/util/logging/LogManager;->-wrap3(Ljava/util/logging/Logger;Ljava/util/logging/Logger;)V
+HSPLjava/util/logging/LogManager;->-wrap4(Ljava/util/logging/LogManager;)V
+HSPLjava/util/logging/LogManager;->-wrap5(Ljava/util/logging/LogManager;)V
+HSPLjava/util/logging/LogManager;-><init>()V
+HSPLjava/util/logging/LogManager;-><init>(Ljava/lang/Void;)V
+HSPLjava/util/logging/LogManager;->addLogger(Ljava/util/logging/Logger;)Z
+HSPLjava/util/logging/LogManager;->checkPermission()V
+HSPLjava/util/logging/LogManager;->checkSubclassPermissions()Ljava/lang/Void;
+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;->doSetLevel(Ljava/util/logging/Logger;Ljava/util/logging/Level;)V
+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
+HSPLjava/util/logging/LogManager;->loadLoggerHandlers(Ljava/util/logging/Logger;Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/util/logging/LogManager;->parseClassNames(Ljava/lang/String;)[Ljava/lang/String;
+HSPLjava/util/logging/LogManager;->readConfiguration()V
+HSPLjava/util/logging/LogManager;->readConfiguration(Ljava/io/InputStream;)V
+HSPLjava/util/logging/LogManager;->readPrimordialConfiguration()V
+HSPLjava/util/logging/LogManager;->reset()V
+HSPLjava/util/logging/LogManager;->resetLogger(Ljava/util/logging/Logger;)V
+HSPLjava/util/logging/LogManager;->setLevelsOnExistingLoggers()V
+HSPLjava/util/logging/LogRecord;-><init>(Ljava/util/logging/Level;Ljava/lang/String;)V
+HSPLjava/util/logging/LogRecord;->defaultThreadID()I
+HSPLjava/util/logging/LogRecord;->getLevel()Ljava/util/logging/Level;
+HSPLjava/util/logging/LogRecord;->getLoggerName()Ljava/lang/String;
+HSPLjava/util/logging/LogRecord;->getMessage()Ljava/lang/String;
+HSPLjava/util/logging/LogRecord;->getThrown()Ljava/lang/Throwable;
+HSPLjava/util/logging/LogRecord;->setLoggerName(Ljava/lang/String;)V
+HSPLjava/util/logging/LogRecord;->setSourceClassName(Ljava/lang/String;)V
+HSPLjava/util/logging/LogRecord;->setSourceMethodName(Ljava/lang/String;)V
+HSPLjava/util/logging/Logger$LoggerBundle;-><init>(Ljava/lang/String;Ljava/util/ResourceBundle;)V
+HSPLjava/util/logging/Logger$LoggerBundle;-><init>(Ljava/lang/String;Ljava/util/ResourceBundle;Ljava/util/logging/Logger$LoggerBundle;)V
+HSPLjava/util/logging/Logger$LoggerBundle;->isSystemBundle()Z
+HSPLjava/util/logging/Logger;-><init>(Ljava/lang/String;)V
+HSPLjava/util/logging/Logger;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;Ljava/util/logging/LogManager;Z)V
+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
+HSPLjava/util/logging/Logger;->demandLogger(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;)Ljava/util/logging/Logger;
+HSPLjava/util/logging/Logger;->doLog(Ljava/util/logging/LogRecord;)V
+HSPLjava/util/logging/Logger;->doSetParent(Ljava/util/logging/Logger;)V
+HSPLjava/util/logging/Logger;->findResourceBundle(Ljava/lang/String;Z)Ljava/util/ResourceBundle;
+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;->getResourceBundle()Ljava/util/ResourceBundle;
+HSPLjava/util/logging/Logger;->getResourceBundleName()Ljava/lang/String;
+HSPLjava/util/logging/Logger;->getUseParentHandlers()Z
+HSPLjava/util/logging/Logger;->isLevelInitialized()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/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;->removeChildLogger(Ljava/util/logging/LogManager$LoggerWeakRef;)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/LoggingPermission;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/util/logging/LoggingProxyImpl;-><init>()V
+HSPLjava/util/logging/LoggingProxyImpl;->getProperty(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/util/logging/SimpleFormatter;-><init>()V
+HSPLjava/util/logging/StreamHandler;-><init>()V
+HSPLjava/util/logging/StreamHandler;->configure()V
+HSPLjava/util/logging/StreamHandler;->flushAndClose()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/prefs/AbstractPreferences;->childSpi(Ljava/lang/String;)Ljava/util/prefs/AbstractPreferences;
+HSPLjava/util/prefs/AbstractPreferences;->childrenNamesSpi()[Ljava/lang/String;
+HSPLjava/util/prefs/AbstractPreferences;->flushSpi()V
+HSPLjava/util/prefs/AbstractPreferences;->getSpi(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/util/prefs/AbstractPreferences;->keysSpi()[Ljava/lang/String;
+HSPLjava/util/prefs/AbstractPreferences;->putSpi(Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/util/prefs/AbstractPreferences;->removeNodeSpi()V
+HSPLjava/util/prefs/AbstractPreferences;->removeSpi(Ljava/lang/String;)V
+HSPLjava/util/prefs/AbstractPreferences;->syncSpi()V
+HSPLjava/util/prefs/Preferences;->absolutePath()Ljava/lang/String;
+HSPLjava/util/prefs/Preferences;->addNodeChangeListener(Ljava/util/prefs/NodeChangeListener;)V
+HSPLjava/util/prefs/Preferences;->addPreferenceChangeListener(Ljava/util/prefs/PreferenceChangeListener;)V
+HSPLjava/util/prefs/Preferences;->childrenNames()[Ljava/lang/String;
+HSPLjava/util/prefs/Preferences;->clear()V
+HSPLjava/util/prefs/Preferences;->exportNode(Ljava/io/OutputStream;)V
+HSPLjava/util/prefs/Preferences;->exportSubtree(Ljava/io/OutputStream;)V
+HSPLjava/util/prefs/Preferences;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/util/prefs/Preferences;->getBoolean(Ljava/lang/String;Z)Z
+HSPLjava/util/prefs/Preferences;->getByteArray(Ljava/lang/String;[B)[B
+HSPLjava/util/prefs/Preferences;->getDouble(Ljava/lang/String;D)D
+HSPLjava/util/prefs/Preferences;->getFloat(Ljava/lang/String;F)F
+HSPLjava/util/prefs/Preferences;->getInt(Ljava/lang/String;I)I
+HSPLjava/util/prefs/Preferences;->getLong(Ljava/lang/String;J)J
+HSPLjava/util/prefs/Preferences;->keys()[Ljava/lang/String;
+HSPLjava/util/prefs/Preferences;->name()Ljava/lang/String;
+HSPLjava/util/prefs/Preferences;->node(Ljava/lang/String;)Ljava/util/prefs/Preferences;
+HSPLjava/util/prefs/Preferences;->nodeExists(Ljava/lang/String;)Z
+HSPLjava/util/prefs/Preferences;->parent()Ljava/util/prefs/Preferences;
+HSPLjava/util/prefs/Preferences;->put(Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/util/prefs/Preferences;->putBoolean(Ljava/lang/String;Z)V
+HSPLjava/util/prefs/Preferences;->putByteArray(Ljava/lang/String;[B)V
+HSPLjava/util/prefs/Preferences;->putDouble(Ljava/lang/String;D)V
+HSPLjava/util/prefs/Preferences;->putFloat(Ljava/lang/String;F)V
+HSPLjava/util/prefs/Preferences;->putInt(Ljava/lang/String;I)V
+HSPLjava/util/prefs/Preferences;->putLong(Ljava/lang/String;J)V
+HSPLjava/util/prefs/Preferences;->remove(Ljava/lang/String;)V
+HSPLjava/util/prefs/Preferences;->removeNodeChangeListener(Ljava/util/prefs/NodeChangeListener;)V
+HSPLjava/util/prefs/Preferences;->removePreferenceChangeListener(Ljava/util/prefs/PreferenceChangeListener;)V
+HSPLjava/util/prefs/Preferences;->toString()Ljava/lang/String;
+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;
+HSPLjava/util/regex/Matcher;->appendTail(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;
+HSPLjava/util/regex/Matcher;->end()I
+HSPLjava/util/regex/Matcher;->end(I)I
+HSPLjava/util/regex/Matcher;->ensureMatch()V
+HSPLjava/util/regex/Matcher;->find()Z
+HSPLjava/util/regex/Matcher;->group(I)Ljava/lang/String;
+HSPLjava/util/regex/Matcher;->groupCount()I
+HSPLjava/util/regex/Matcher;->lookingAt()Z
+HSPLjava/util/regex/Matcher;->matches()Z
+HSPLjava/util/regex/Matcher;->replaceAll(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/util/regex/Matcher;->replaceFirst(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/util/regex/Matcher;->reset()Ljava/util/regex/Matcher;
+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;->usePattern(Ljava/util/regex/Pattern;)Ljava/util/regex/Matcher;
+HSPLjava/util/regex/Pattern;-><init>(Ljava/lang/String;I)V
+HSPLjava/util/regex/Pattern;->compile()V
+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;
+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;->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/stream/-$Lambda$PVrT5KMXWM352lNCiKPCMdt2xL8;->$m$15()Ljava/lang/Object;
+HSPLjava/util/stream/-$Lambda$PVrT5KMXWM352lNCiKPCMdt2xL8;->$m$26()Ljava/lang/Object;
+HSPLjava/util/stream/-$Lambda$PVrT5KMXWM352lNCiKPCMdt2xL8;-><init>(B)V
+HSPLjava/util/stream/-$Lambda$PVrT5KMXWM352lNCiKPCMdt2xL8;->get()Ljava/lang/Object;
+HSPLjava/util/stream/-$Lambda$RbwyEXxBvlOKovrx1LFomyWq0zc;-><init>(B)V
+HSPLjava/util/stream/-$Lambda$Y1nWb7oHyESmWtTUR-RlHqf5IfU;->$m$4(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLjava/util/stream/-$Lambda$Y1nWb7oHyESmWtTUR-RlHqf5IfU;-><init>(B)V
+HSPLjava/util/stream/-$Lambda$Y1nWb7oHyESmWtTUR-RlHqf5IfU;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLjava/util/stream/-$Lambda$ioGbka_-VkWTFjRjTt8T4zzsxgk;-><init>(B)V
+HSPLjava/util/stream/-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0;-><init>(B)V
+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;->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/stream/TerminalOp;)Ljava/lang/Object;
+HSPLjava/util/stream/AbstractPipeline;->evaluateToNode(Ljava/util/stream/PipelineHelper;Ljava/util/Spliterator;ZLjava/util/function/IntFunction;)Ljava/util/stream/Node;
+HSPLjava/util/stream/AbstractPipeline;->forEachWithCancel(Ljava/util/Spliterator;Ljava/util/stream/Sink;)V
+HSPLjava/util/stream/AbstractPipeline;->getOutputShape()Ljava/util/stream/StreamShape;
+HSPLjava/util/stream/AbstractPipeline;->getStreamAndOpFlags()I
+HSPLjava/util/stream/AbstractPipeline;->isParallel()Z
+HSPLjava/util/stream/AbstractPipeline;->lazySpliterator(Ljava/util/function/Supplier;)Ljava/util/Spliterator;
+HSPLjava/util/stream/AbstractPipeline;->makeNodeBuilder(JLjava/util/function/IntFunction;)Ljava/util/stream/Node$Builder;
+HSPLjava/util/stream/AbstractPipeline;->sourceSpliterator(I)Ljava/util/Spliterator;
+HSPLjava/util/stream/AbstractPipeline;->wrap(Ljava/util/stream/PipelineHelper;Ljava/util/function/Supplier;Z)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/BaseStream;->iterator()Ljava/util/Iterator;
+HSPLjava/util/stream/BaseStream;->unordered()Ljava/util/stream/BaseStream;
+HSPLjava/util/stream/Collector$Characteristics;-><init>(Ljava/lang/String;I)V
+HSPLjava/util/stream/Collector$Characteristics;->values()[Ljava/util/stream/Collector$Characteristics;
+HSPLjava/util/stream/Collector;->accumulator()Ljava/util/function/BiConsumer;
+HSPLjava/util/stream/Collector;->characteristics()Ljava/util/Set;
+HSPLjava/util/stream/Collector;->combiner()Ljava/util/function/BinaryOperator;
+HSPLjava/util/stream/Collector;->finisher()Ljava/util/function/Function;
+HSPLjava/util/stream/Collector;->supplier()Ljava/util/function/Supplier;
+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;
+HSPLjava/util/stream/Collectors$CollectorImpl;->characteristics()Ljava/util/Set;
+HSPLjava/util/stream/Collectors$CollectorImpl;->combiner()Ljava/util/function/BinaryOperator;
+HSPLjava/util/stream/Collectors$CollectorImpl;->supplier()Ljava/util/function/Supplier;
+HSPLjava/util/stream/Collectors;->-java_util_stream_Collectors-mthref-1()Ljava/util/List;
+HSPLjava/util/stream/Collectors;->-java_util_stream_Collectors-mthref-2(Ljava/util/List;Ljava/lang/Object;)V
+HSPLjava/util/stream/Collectors;->-wrap0()Ljava/util/function/Function;
+HSPLjava/util/stream/Collectors;->castingIdentity()Ljava/util/function/Function;
+HSPLjava/util/stream/Collectors;->toList()Ljava/util/stream/Collector;
+HSPLjava/util/stream/FindOps$FindOp;-><init>(ZLjava/util/stream/StreamShape;Ljava/lang/Object;Ljava/util/function/Predicate;Ljava/util/function/Supplier;)V
+HSPLjava/util/stream/FindOps$FindOp;->evaluateSequential(Ljava/util/stream/PipelineHelper;Ljava/util/Spliterator;)Ljava/lang/Object;
+HSPLjava/util/stream/FindOps$FindOp;->getOpFlags()I
+HSPLjava/util/stream/FindOps$FindSink$OfRef;-><init>()V
+HSPLjava/util/stream/FindOps$FindSink$OfRef;->get()Ljava/lang/Object;
+HSPLjava/util/stream/FindOps$FindSink$OfRef;->get()Ljava/util/Optional;
+HSPLjava/util/stream/FindOps$FindSink;-><init>()V
+HSPLjava/util/stream/FindOps$FindSink;->cancellationRequested()Z
+HSPLjava/util/stream/FindOps;->-java_util_stream_FindOps-mthref-1()Ljava/util/stream/TerminalSink;
+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;-><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/PipelineHelper;-><init>()V
+HSPLjava/util/stream/PipelineHelper;->copyInto(Ljava/util/stream/Sink;Ljava/util/Spliterator;)V
+HSPLjava/util/stream/PipelineHelper;->copyIntoWithCancel(Ljava/util/stream/Sink;Ljava/util/Spliterator;)V
+HSPLjava/util/stream/PipelineHelper;->evaluate(Ljava/util/Spliterator;ZLjava/util/function/IntFunction;)Ljava/util/stream/Node;
+HSPLjava/util/stream/PipelineHelper;->exactOutputSizeIfKnown(Ljava/util/Spliterator;)J
+HSPLjava/util/stream/PipelineHelper;->getSourceShape()Ljava/util/stream/StreamShape;
+HSPLjava/util/stream/PipelineHelper;->getStreamAndOpFlags()I
+HSPLjava/util/stream/PipelineHelper;->wrapAndCopyInto(Ljava/util/stream/Sink;Ljava/util/Spliterator;)Ljava/util/stream/Sink;
+HSPLjava/util/stream/PipelineHelper;->wrapSink(Ljava/util/stream/Sink;)Ljava/util/stream/Sink;
+HSPLjava/util/stream/PipelineHelper;->wrapSpliterator(Ljava/util/Spliterator;)Ljava/util/Spliterator;
+HSPLjava/util/stream/ReduceOps$3;-><init>(Ljava/util/stream/StreamShape;Ljava/util/stream/Collector;Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BinaryOperator;)V
+HSPLjava/util/stream/ReduceOps$3;->getOpFlags()I
+HSPLjava/util/stream/ReduceOps$3;->makeSink()Ljava/util/stream/ReduceOps$3ReducingSink;
+HSPLjava/util/stream/ReduceOps$3;->makeSink()Ljava/util/stream/ReduceOps$AccumulatingSink;
+HSPLjava/util/stream/ReduceOps$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$AccumulatingSink;->combine(Ljava/util/stream/ReduceOps$AccumulatingSink;)V
+HSPLjava/util/stream/ReduceOps$Box;-><init>()V
+HSPLjava/util/stream/ReduceOps$Box;->get()Ljava/lang/Object;
+HSPLjava/util/stream/ReduceOps$ReduceOp;-><init>(Ljava/util/stream/StreamShape;)V
+HSPLjava/util/stream/ReduceOps$ReduceOp;->evaluateSequential(Ljava/util/stream/PipelineHelper;Ljava/util/Spliterator;)Ljava/lang/Object;
+HSPLjava/util/stream/ReduceOps$ReduceOp;->makeSink()Ljava/util/stream/ReduceOps$AccumulatingSink;
+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;Ljava/util/function/Predicate;)V
+HSPLjava/util/stream/ReferencePipeline$2$1;->begin(J)V
+HSPLjava/util/stream/ReferencePipeline$2;-><init>(Ljava/util/stream/ReferencePipeline;Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;ILjava/util/function/Predicate;)V
+HSPLjava/util/stream/ReferencePipeline$2;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
+HSPLjava/util/stream/ReferencePipeline$3$1;-><init>(Ljava/util/stream/ReferencePipeline$3;Ljava/util/stream/Sink;Ljava/util/function/Function;)V
+HSPLjava/util/stream/ReferencePipeline$3$1;->accept(Ljava/lang/Object;)V
+HSPLjava/util/stream/ReferencePipeline$3;-><init>(Ljava/util/stream/ReferencePipeline;Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;ILjava/util/function/Function;)V
+HSPLjava/util/stream/ReferencePipeline$3;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
+HSPLjava/util/stream/ReferencePipeline$Head;-><init>(Ljava/util/Spliterator;IZ)V
+HSPLjava/util/stream/ReferencePipeline$StatefulOp;-><init>(Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;I)V
+HSPLjava/util/stream/ReferencePipeline$StatefulOp;->opIsStateful()Z
+HSPLjava/util/stream/ReferencePipeline$StatelessOp;-><init>(Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;I)V
+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;->collect(Ljava/util/stream/Collector;)Ljava/lang/Object;
+HSPLjava/util/stream/ReferencePipeline;->filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
+HSPLjava/util/stream/ReferencePipeline;->findFirst()Ljava/util/Optional;
+HSPLjava/util/stream/ReferencePipeline;->forEach(Ljava/util/function/Consumer;)V
+HSPLjava/util/stream/ReferencePipeline;->forEachWithCancel(Ljava/util/Spliterator;Ljava/util/stream/Sink;)V
+HSPLjava/util/stream/ReferencePipeline;->limit(J)Ljava/util/stream/Stream;
+HSPLjava/util/stream/ReferencePipeline;->map(Ljava/util/function/Function;)Ljava/util/stream/Stream;
+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;JJ)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;->-wrap2(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;
+HSPLjava/util/stream/Stream;->generate(Ljava/util/function/Supplier;)Ljava/util/stream/Stream;
+HSPLjava/util/stream/StreamOpFlag$MaskBuilder;-><init>(Ljava/util/Map;)V
+HSPLjava/util/stream/StreamOpFlag$MaskBuilder;->build()Ljava/util/Map;
+HSPLjava/util/stream/StreamOpFlag$MaskBuilder;->clear(Ljava/util/stream/StreamOpFlag$Type;)Ljava/util/stream/StreamOpFlag$MaskBuilder;
+HSPLjava/util/stream/StreamOpFlag$MaskBuilder;->mask(Ljava/util/stream/StreamOpFlag$Type;Ljava/lang/Integer;)Ljava/util/stream/StreamOpFlag$MaskBuilder;
+HSPLjava/util/stream/StreamOpFlag$MaskBuilder;->set(Ljava/util/stream/StreamOpFlag$Type;)Ljava/util/stream/StreamOpFlag$MaskBuilder;
+HSPLjava/util/stream/StreamOpFlag$MaskBuilder;->setAndClear(Ljava/util/stream/StreamOpFlag$Type;)Ljava/util/stream/StreamOpFlag$MaskBuilder;
+HSPLjava/util/stream/StreamOpFlag$Type;-><init>(Ljava/lang/String;I)V
+HSPLjava/util/stream/StreamOpFlag$Type;->values()[Ljava/util/stream/StreamOpFlag$Type;
+HSPLjava/util/stream/StreamOpFlag;-><init>(Ljava/lang/String;IILjava/util/stream/StreamOpFlag$MaskBuilder;)V
+HSPLjava/util/stream/StreamOpFlag;->combineOpFlags(II)I
+HSPLjava/util/stream/StreamOpFlag;->createFlagMask()I
+HSPLjava/util/stream/StreamOpFlag;->createMask(Ljava/util/stream/StreamOpFlag$Type;)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;->set(Ljava/util/stream/StreamOpFlag$Type;)Ljava/util/stream/StreamOpFlag$MaskBuilder;
+HSPLjava/util/stream/StreamOpFlag;->values()[Ljava/util/stream/StreamOpFlag;
+HSPLjava/util/stream/StreamShape;-><init>(Ljava/lang/String;I)V
+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;->stream(Ljava/util/Spliterator;Z)Ljava/util/stream/Stream;
+HSPLjava/util/stream/TerminalOp;->evaluateSequential(Ljava/util/stream/PipelineHelper;Ljava/util/Spliterator;)Ljava/lang/Object;
+HSPLjava/util/zip/Adler32;-><init>()V
+HSPLjava/util/zip/Adler32;->getValue()J
+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>(IZ)V
+HSPLjava/util/zip/Deflater;->deflate([BII)I
+HSPLjava/util/zip/Deflater;->deflate([BIII)I
+HSPLjava/util/zip/Deflater;->end()V
+HSPLjava/util/zip/Deflater;->ensureOpen()V
+HSPLjava/util/zip/Deflater;->finalize()V
+HSPLjava/util/zip/Deflater;->finish()V
+HSPLjava/util/zip/Deflater;->finished()Z
+HSPLjava/util/zip/Deflater;->getBytesRead()J
+HSPLjava/util/zip/Deflater;->getTotalIn()I
+HSPLjava/util/zip/Deflater;->needsInput()Z
+HSPLjava/util/zip/Deflater;->setInput([BII)V
+HSPLjava/util/zip/DeflaterOutputStream;-><init>(Ljava/io/OutputStream;Ljava/util/zip/Deflater;IZ)V
+HSPLjava/util/zip/DeflaterOutputStream;->close()V
+HSPLjava/util/zip/DeflaterOutputStream;->deflate()V
+HSPLjava/util/zip/DeflaterOutputStream;->write([BII)V
+HSPLjava/util/zip/GZIPInputStream$1;-><init>(Ljava/util/zip/GZIPInputStream;Ljava/io/InputStream;)V
+HSPLjava/util/zip/GZIPInputStream;-><init>(Ljava/io/InputStream;)V
+HSPLjava/util/zip/GZIPInputStream;-><init>(Ljava/io/InputStream;I)V
+HSPLjava/util/zip/GZIPInputStream;->close()V
+HSPLjava/util/zip/GZIPInputStream;->ensureOpen()V
+HSPLjava/util/zip/GZIPInputStream;->read([BII)I
+HSPLjava/util/zip/GZIPInputStream;->readHeader(Ljava/io/InputStream;)I
+HSPLjava/util/zip/GZIPInputStream;->readTrailer()Z
+HSPLjava/util/zip/GZIPInputStream;->readUByte(Ljava/io/InputStream;)I
+HSPLjava/util/zip/GZIPInputStream;->readUInt(Ljava/io/InputStream;)J
+HSPLjava/util/zip/GZIPInputStream;->readUShort(Ljava/io/InputStream;)I
+HSPLjava/util/zip/GZIPInputStream;->skipBytes(Ljava/io/InputStream;I)V
+HSPLjava/util/zip/GZIPOutputStream;-><init>(Ljava/io/OutputStream;)V
+HSPLjava/util/zip/GZIPOutputStream;-><init>(Ljava/io/OutputStream;IZ)V
+HSPLjava/util/zip/GZIPOutputStream;->finish()V
+HSPLjava/util/zip/GZIPOutputStream;->write([BII)V
+HSPLjava/util/zip/GZIPOutputStream;->writeHeader()V
+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;->getBytesWritten()J
+HSPLjava/util/zip/Inflater;->getRemaining()I
+HSPLjava/util/zip/Inflater;->inflate([B)I
+HSPLjava/util/zip/Inflater;->inflate([BII)I
+HSPLjava/util/zip/Inflater;->needsDictionary()Z
+HSPLjava/util/zip/Inflater;->needsInput()Z
+HSPLjava/util/zip/Inflater;->setInput([BII)V
+HSPLjava/util/zip/InflaterInputStream;-><init>(Ljava/io/InputStream;Ljava/util/zip/Inflater;I)V
+HSPLjava/util/zip/InflaterInputStream;->close()V
+HSPLjava/util/zip/InflaterInputStream;->ensureOpen()V
+HSPLjava/util/zip/InflaterInputStream;->fill()V
+HSPLjava/util/zip/InflaterInputStream;->read()I
+HSPLjava/util/zip/InflaterInputStream;->read([BII)I
+HSPLjava/util/zip/ZStreamRef;-><init>(J)V
+HSPLjava/util/zip/ZStreamRef;->address()J
+HSPLjava/util/zip/ZStreamRef;->clear()V
+HSPLjava/util/zip/ZipCoder;-><init>(Ljava/nio/charset/Charset;)V
+HSPLjava/util/zip/ZipCoder;->decoder()Ljava/nio/charset/CharsetDecoder;
+HSPLjava/util/zip/ZipCoder;->encoder()Ljava/nio/charset/CharsetEncoder;
+HSPLjava/util/zip/ZipCoder;->get(Ljava/nio/charset/Charset;)Ljava/util/zip/ZipCoder;
+HSPLjava/util/zip/ZipCoder;->getBytes(Ljava/lang/String;)[B
+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;Ljava/lang/String;JJJII[BJ)V
+HSPLjava/util/zip/ZipEntry;-><init>(Ljava/util/zip/ZipEntry;)V
+HSPLjava/util/zip/ZipEntry;->getCrc()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
+HSPLjava/util/zip/ZipFile$ZipEntryIterator;-><init>(Ljava/util/zip/ZipFile;)V
+HSPLjava/util/zip/ZipFile$ZipEntryIterator;->hasMoreElements()Z
+HSPLjava/util/zip/ZipFile$ZipEntryIterator;->hasNext()Z
+HSPLjava/util/zip/ZipFile$ZipEntryIterator;->next()Ljava/util/zip/ZipEntry;
+HSPLjava/util/zip/ZipFile$ZipEntryIterator;->nextElement()Ljava/lang/Object;
+HSPLjava/util/zip/ZipFile$ZipEntryIterator;->nextElement()Ljava/util/zip/ZipEntry;
+HSPLjava/util/zip/ZipFile$ZipFileInflaterInputStream;-><init>(Ljava/util/zip/ZipFile;Ljava/util/zip/ZipFile$ZipFileInputStream;Ljava/util/zip/Inflater;I)V
+HSPLjava/util/zip/ZipFile$ZipFileInflaterInputStream;->available()I
+HSPLjava/util/zip/ZipFile$ZipFileInflaterInputStream;->close()V
+HSPLjava/util/zip/ZipFile$ZipFileInflaterInputStream;->fill()V
+HSPLjava/util/zip/ZipFile$ZipFileInflaterInputStream;->finalize()V
+HSPLjava/util/zip/ZipFile$ZipFileInputStream;-><init>(Ljava/util/zip/ZipFile;J)V
+HSPLjava/util/zip/ZipFile$ZipFileInputStream;->available()I
+HSPLjava/util/zip/ZipFile$ZipFileInputStream;->close()V
+HSPLjava/util/zip/ZipFile$ZipFileInputStream;->finalize()V
+HSPLjava/util/zip/ZipFile$ZipFileInputStream;->read([BII)I
+HSPLjava/util/zip/ZipFile$ZipFileInputStream;->size()J
+HSPLjava/util/zip/ZipFile;->-get1(Ljava/util/zip/ZipFile;)J
+HSPLjava/util/zip/ZipFile;->-get3(Ljava/util/zip/ZipFile;)Ljava/util/Map;
+HSPLjava/util/zip/ZipFile;->-get4(Ljava/util/zip/ZipFile;)I
+HSPLjava/util/zip/ZipFile;->-wrap0(JJJ[BII)I
+HSPLjava/util/zip/ZipFile;->-wrap2(Ljava/util/zip/ZipFile;Ljava/lang/String;J)Ljava/util/zip/ZipEntry;
+HSPLjava/util/zip/ZipFile;->-wrap3(J)J
+HSPLjava/util/zip/ZipFile;->-wrap4(J)J
+HSPLjava/util/zip/ZipFile;->-wrap5(JI)J
+HSPLjava/util/zip/ZipFile;->-wrap6(Ljava/util/zip/ZipFile;)V
+HSPLjava/util/zip/ZipFile;->-wrap7(Ljava/util/zip/ZipFile;)V
+HSPLjava/util/zip/ZipFile;->-wrap8(JJ)V
+HSPLjava/util/zip/ZipFile;->-wrap9(Ljava/util/zip/ZipFile;Ljava/util/zip/Inflater;)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
+HSPLjava/util/zip/ZipFile;->close()V
+HSPLjava/util/zip/ZipFile;->ensureOpen()V
+HSPLjava/util/zip/ZipFile;->ensureOpenOrZipException()V
+HSPLjava/util/zip/ZipFile;->entries()Ljava/util/Enumeration;
+HSPLjava/util/zip/ZipFile;->finalize()V
+HSPLjava/util/zip/ZipFile;->getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;
+HSPLjava/util/zip/ZipFile;->getInflater()Ljava/util/zip/Inflater;
+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/ZipFile;->size()I
+HSPLjava/util/zip/ZipUtils;->get16([BI)I
+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$InitType;-><init>(Ljava/lang/String;I)V
+HSPLjavax/crypto/Cipher$InitType;->values()[Ljavax/crypto/Cipher$InitType;
+HSPLjavax/crypto/Cipher$NeedToSet;-><init>(Ljava/lang/String;I)V
+HSPLjavax/crypto/Cipher$SpiAndProviderUpdater;-><init>(Ljavax/crypto/Cipher;Ljava/security/Provider;Ljavax/crypto/CipherSpi;)V
+HSPLjavax/crypto/Cipher$SpiAndProviderUpdater;->setCipherSpiImplAndProvider(Ljavax/crypto/CipherSpi;Ljava/security/Provider;)V
+HSPLjavax/crypto/Cipher$SpiAndProviderUpdater;->updateAndGetSpiAndProvider(Ljavax/crypto/Cipher$InitParams;Ljavax/crypto/CipherSpi;Ljava/security/Provider;)Ljavax/crypto/Cipher$CipherSpiAndProvider;
+HSPLjavax/crypto/Cipher$Transform;->-get0(Ljavax/crypto/Cipher$Transform;)Ljava/lang/String;
+HSPLjavax/crypto/Cipher$Transform;->-get1(Ljavax/crypto/Cipher$Transform;)Ljavax/crypto/Cipher$NeedToSet;
+HSPLjavax/crypto/Cipher$Transform;-><init>(Ljava/lang/String;Ljavax/crypto/Cipher$NeedToSet;)V
+HSPLjavax/crypto/Cipher;->-get0(Ljavax/crypto/Cipher;)[Ljava/lang/String;
+HSPLjavax/crypto/Cipher;->-getjavax-crypto-Cipher$InitTypeSwitchesValues()[I
+HSPLjavax/crypto/Cipher;->-set0(Ljavax/crypto/Cipher;Ljava/security/Provider;)Ljava/security/Provider;
+HSPLjavax/crypto/Cipher;->-set1(Ljavax/crypto/Cipher;Ljavax/crypto/CipherSpi;)Ljavax/crypto/CipherSpi;
+HSPLjavax/crypto/Cipher;-><init>(Ljavax/crypto/CipherSpi;Ljava/security/Provider;Ljava/lang/String;[Ljava/lang/String;)V
+HSPLjavax/crypto/Cipher;->checkCipherState()V
+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([B)[B
+HSPLjavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
+HSPLjavax/crypto/Cipher;->getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/Cipher;
+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
+HSPLjavax/crypto/Cipher;->init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
+HSPLjavax/crypto/Cipher;->matchAttribute(Ljava/security/Provider$Service;Ljava/lang/String;Ljava/lang/String;)Z
+HSPLjavax/crypto/Cipher;->tokenizeTransformation(Ljava/lang/String;)[Ljava/lang/String;
+HSPLjavax/crypto/Cipher;->tryCombinations(Ljavax/crypto/Cipher$InitParams;Ljava/security/Provider;[Ljava/lang/String;)Ljavax/crypto/Cipher$CipherSpiAndProvider;
+HSPLjavax/crypto/Cipher;->tryTransformWithProvider(Ljavax/crypto/Cipher$InitParams;[Ljava/lang/String;Ljavax/crypto/Cipher$NeedToSet;Ljava/security/Provider$Service;)Ljavax/crypto/Cipher$CipherSpiAndProvider;
+HSPLjavax/crypto/Cipher;->updateProviderIfNeeded()V
+HSPLjavax/crypto/CipherSpi;-><init>()V
+HSPLjavax/crypto/CipherSpi;->engineDoFinal([BII)[B
+HSPLjavax/crypto/CipherSpi;->engineDoFinal([BII[BI)I
+HSPLjavax/crypto/CipherSpi;->engineGetBlockSize()I
+HSPLjavax/crypto/CipherSpi;->engineGetIV()[B
+HSPLjavax/crypto/CipherSpi;->engineGetOutputSize(I)I
+HSPLjavax/crypto/CipherSpi;->engineGetParameters()Ljava/security/AlgorithmParameters;
+HSPLjavax/crypto/CipherSpi;->engineInit(ILjava/security/Key;Ljava/security/AlgorithmParameters;Ljava/security/SecureRandom;)V
+HSPLjavax/crypto/CipherSpi;->engineInit(ILjava/security/Key;Ljava/security/SecureRandom;)V
+HSPLjavax/crypto/CipherSpi;->engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
+HSPLjavax/crypto/CipherSpi;->engineSetMode(Ljava/lang/String;)V
+HSPLjavax/crypto/CipherSpi;->engineSetPadding(Ljava/lang/String;)V
+HSPLjavax/crypto/CipherSpi;->engineUpdate([BII)[B
+HSPLjavax/crypto/CipherSpi;->engineUpdate([BII[BI)I
+HSPLjavax/crypto/JceSecurity;->canUseProvider(Ljava/security/Provider;)Z
+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;
+HSPLjavax/crypto/KeyGenerator;->nextSpi(Ljavax/crypto/KeyGeneratorSpi;Z)Ljavax/crypto/KeyGeneratorSpi;
+HSPLjavax/crypto/KeyGeneratorSpi;-><init>()V
+HSPLjavax/crypto/KeyGeneratorSpi;->engineGenerateKey()Ljavax/crypto/SecretKey;
+HSPLjavax/crypto/KeyGeneratorSpi;->engineInit(ILjava/security/SecureRandom;)V
+HSPLjavax/crypto/KeyGeneratorSpi;->engineInit(Ljava/security/SecureRandom;)V
+HSPLjavax/crypto/KeyGeneratorSpi;->engineInit(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
+HSPLjavax/crypto/Mac;-><init>(Ljava/lang/String;)V
+HSPLjavax/crypto/Mac;->chooseFirstProvider()V
+HSPLjavax/crypto/Mac;->chooseProvider(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
+HSPLjavax/crypto/Mac;->doFinal()[B
+HSPLjavax/crypto/Mac;->doFinal([B)[B
+HSPLjavax/crypto/Mac;->getInstance(Ljava/lang/String;)Ljavax/crypto/Mac;
+HSPLjavax/crypto/Mac;->init(Ljava/security/Key;)V
+HSPLjavax/crypto/Mac;->update([B)V
+HSPLjavax/crypto/MacSpi;-><init>()V
+HSPLjavax/crypto/MacSpi;->engineDoFinal()[B
+HSPLjavax/crypto/MacSpi;->engineGetMacLength()I
+HSPLjavax/crypto/MacSpi;->engineInit(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
+HSPLjavax/crypto/MacSpi;->engineReset()V
+HSPLjavax/crypto/MacSpi;->engineUpdate(B)V
+HSPLjavax/crypto/MacSpi;->engineUpdate([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/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/EGL10;->eglChooseConfig(Ljavax/microedition/khronos/egl/EGLDisplay;[I[Ljavax/microedition/khronos/egl/EGLConfig;I[I)Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglCopyBuffers(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;Ljava/lang/Object;)Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglCreateContext(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljavax/microedition/khronos/egl/EGLContext;[I)Ljavax/microedition/khronos/egl/EGLContext;
+HSPLjavax/microedition/khronos/egl/EGL10;->eglCreatePbufferSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;[I)Ljavax/microedition/khronos/egl/EGLSurface;
+HSPLjavax/microedition/khronos/egl/EGL10;->eglCreatePixmapSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;[I)Ljavax/microedition/khronos/egl/EGLSurface;
+HSPLjavax/microedition/khronos/egl/EGL10;->eglCreateWindowSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;[I)Ljavax/microedition/khronos/egl/EGLSurface;
+HSPLjavax/microedition/khronos/egl/EGL10;->eglDestroyContext(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLContext;)Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglDestroySurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;)Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglGetConfigAttrib(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;I[I)Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglGetConfigs(Ljavax/microedition/khronos/egl/EGLDisplay;[Ljavax/microedition/khronos/egl/EGLConfig;I[I)Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglGetCurrentContext()Ljavax/microedition/khronos/egl/EGLContext;
+HSPLjavax/microedition/khronos/egl/EGL10;->eglGetCurrentDisplay()Ljavax/microedition/khronos/egl/EGLDisplay;
+HSPLjavax/microedition/khronos/egl/EGL10;->eglGetCurrentSurface(I)Ljavax/microedition/khronos/egl/EGLSurface;
+HSPLjavax/microedition/khronos/egl/EGL10;->eglGetDisplay(Ljava/lang/Object;)Ljavax/microedition/khronos/egl/EGLDisplay;
+HSPLjavax/microedition/khronos/egl/EGL10;->eglGetError()I
+HSPLjavax/microedition/khronos/egl/EGL10;->eglInitialize(Ljavax/microedition/khronos/egl/EGLDisplay;[I)Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglMakeCurrent(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;Ljavax/microedition/khronos/egl/EGLSurface;Ljavax/microedition/khronos/egl/EGLContext;)Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglQueryContext(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLContext;I[I)Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglQueryString(Ljavax/microedition/khronos/egl/EGLDisplay;I)Ljava/lang/String;
+HSPLjavax/microedition/khronos/egl/EGL10;->eglQuerySurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;I[I)Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglReleaseThread()Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglSwapBuffers(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;)Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglTerminate(Ljavax/microedition/khronos/egl/EGLDisplay;)Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglWaitGL()Z
+HSPLjavax/microedition/khronos/egl/EGL10;->eglWaitNative(ILjava/lang/Object;)Z
+HSPLjavax/microedition/khronos/egl/EGLConfig;-><init>()V
+HSPLjavax/microedition/khronos/egl/EGLContext;-><init>()V
+HSPLjavax/microedition/khronos/egl/EGLContext;->getEGL()Ljavax/microedition/khronos/egl/EGL;
+HSPLjavax/microedition/khronos/egl/EGLContext;->getGL()Ljavax/microedition/khronos/opengles/GL;
+HSPLjavax/microedition/khronos/egl/EGLDisplay;-><init>()V
+HSPLjavax/microedition/khronos/egl/EGLSurface;-><init>()V
+HSPLjavax/microedition/khronos/opengles/GL10;->glActiveTexture(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glAlphaFunc(IF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glAlphaFuncx(II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glBindTexture(II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glBlendFunc(II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glClear(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glClearColor(FFFF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glClearColorx(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glClearDepthf(F)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glClearDepthx(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glClearStencil(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glClientActiveTexture(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glColor4f(FFFF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glColor4x(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glColorMask(ZZZZ)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glColorPointer(IIILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glCompressedTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glCopyTexImage2D(IIIIIIII)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glCopyTexSubImage2D(IIIIIIII)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glCullFace(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glDeleteTextures(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glDeleteTextures(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glDepthFunc(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glDepthMask(Z)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glDepthRangef(FF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glDepthRangex(II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glDisable(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glDisableClientState(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glDrawArrays(III)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glDrawElements(IIILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glEnable(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glEnableClientState(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glFinish()V
+HSPLjavax/microedition/khronos/opengles/GL10;->glFlush()V
+HSPLjavax/microedition/khronos/opengles/GL10;->glFogf(IF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glFogfv(ILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glFogfv(I[FI)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glFogx(II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glFogxv(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glFogxv(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glFrontFace(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glFrustumf(FFFFFF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glFrustumx(IIIIII)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glGenTextures(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glGenTextures(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glGetError()I
+HSPLjavax/microedition/khronos/opengles/GL10;->glGetIntegerv(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glGetIntegerv(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glGetString(I)Ljava/lang/String;
+HSPLjavax/microedition/khronos/opengles/GL10;->glHint(II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLightModelf(IF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLightModelfv(ILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLightModelfv(I[FI)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLightModelx(II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLightModelxv(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLightModelxv(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLightf(IIF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLightfv(IILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLightfv(II[FI)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLightx(III)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLightxv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLightxv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLineWidth(F)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLineWidthx(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLoadIdentity()V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLoadMatrixf(Ljava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLoadMatrixf([FI)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLoadMatrixx(Ljava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLoadMatrixx([II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glLogicOp(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glMaterialf(IIF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glMaterialfv(IILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glMaterialfv(II[FI)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glMaterialx(III)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glMaterialxv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glMaterialxv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glMatrixMode(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glMultMatrixf(Ljava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glMultMatrixf([FI)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glMultMatrixx(Ljava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glMultMatrixx([II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glMultiTexCoord4f(IFFFF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glMultiTexCoord4x(IIIII)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glNormal3f(FFF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glNormal3x(III)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glNormalPointer(IILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glOrthof(FFFFFF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glOrthox(IIIIII)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glPixelStorei(II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glPointSize(F)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glPointSizex(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glPolygonOffset(FF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glPolygonOffsetx(II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glPopMatrix()V
+HSPLjavax/microedition/khronos/opengles/GL10;->glPushMatrix()V
+HSPLjavax/microedition/khronos/opengles/GL10;->glReadPixels(IIIIIILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glRotatef(FFFF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glRotatex(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glSampleCoverage(FZ)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glSampleCoveragex(IZ)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glScalef(FFF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glScalex(III)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glScissor(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glShadeModel(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glStencilFunc(III)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glStencilMask(I)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glStencilOp(III)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glTexCoordPointer(IIILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glTexEnvf(IIF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glTexEnvfv(IILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glTexEnvfv(II[FI)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glTexEnvx(III)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glTexEnvxv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glTexEnvxv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glTexImage2D(IIIIIIIILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glTexParameterf(IIF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glTexParameterx(III)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glTranslatef(FFF)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glTranslatex(III)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glVertexPointer(IIILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL10;->glViewport(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL10Ext;->glQueryMatrixxOES(Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)I
+HSPLjavax/microedition/khronos/opengles/GL10Ext;->glQueryMatrixxOES([II[II)I
+HSPLjavax/microedition/khronos/opengles/GL11;->glBindBuffer(II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glBufferData(IILjava/nio/Buffer;I)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glBufferSubData(IIILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glClipPlanef(ILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glClipPlanef(I[FI)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glClipPlanex(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glClipPlanex(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glColor4ub(BBBB)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glColorPointer(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glDeleteBuffers(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glDeleteBuffers(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glDrawElements(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGenBuffers(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGenBuffers(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetBooleanv(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetBooleanv(I[ZI)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetBufferParameteriv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetBufferParameteriv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetClipPlanef(ILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetClipPlanef(I[FI)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetClipPlanex(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetClipPlanex(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetFixedv(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetFixedv(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetFloatv(ILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetFloatv(I[FI)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetLightfv(IILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetLightfv(II[FI)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetLightxv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetLightxv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetMaterialfv(IILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetMaterialfv(II[FI)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetMaterialxv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetMaterialxv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetPointerv(I[Ljava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetTexEnviv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetTexEnviv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetTexEnvxv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetTexEnvxv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetTexParameterfv(IILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetTexParameterfv(II[FI)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetTexParameteriv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetTexParameteriv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetTexParameterxv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glGetTexParameterxv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glIsBuffer(I)Z
+HSPLjavax/microedition/khronos/opengles/GL11;->glIsEnabled(I)Z
+HSPLjavax/microedition/khronos/opengles/GL11;->glIsTexture(I)Z
+HSPLjavax/microedition/khronos/opengles/GL11;->glNormalPointer(III)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glPointParameterf(IF)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glPointParameterfv(ILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glPointParameterfv(I[FI)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glPointParameterx(II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glPointParameterxv(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glPointParameterxv(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glPointSizePointerOES(IILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glTexCoordPointer(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glTexEnvi(III)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glTexEnviv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glTexEnviv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glTexParameterfv(IILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glTexParameterfv(II[FI)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glTexParameteri(III)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glTexParameteriv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glTexParameteriv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glTexParameterxv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glTexParameterxv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11;->glVertexPointer(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glCurrentPaletteMatrixOES(I)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glDrawTexfOES(FFFFF)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glDrawTexfvOES(Ljava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glDrawTexfvOES([FI)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glDrawTexiOES(IIIII)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glDrawTexivOES(Ljava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glDrawTexivOES([II)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glDrawTexsOES(SSSSS)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glDrawTexsvOES(Ljava/nio/ShortBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glDrawTexsvOES([SI)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glDrawTexxOES(IIIII)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glDrawTexxvOES(Ljava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glDrawTexxvOES([II)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glEnable(I)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glEnableClientState(I)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glLoadPaletteFromModelViewMatrixOES()V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glMatrixIndexPointerOES(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glMatrixIndexPointerOES(IIILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glTexParameterfv(II[FI)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glWeightPointerOES(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL11Ext;->glWeightPointerOES(IIILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glBindFramebufferOES(II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glBindRenderbufferOES(II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glBindTexture(II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glBlendEquation(I)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glBlendEquationSeparate(II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glBlendFuncSeparate(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glCheckFramebufferStatusOES(I)I
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glCopyTexImage2D(IIIIIIII)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glDeleteFramebuffersOES(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glDeleteFramebuffersOES(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glDeleteRenderbuffersOES(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glDeleteRenderbuffersOES(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glEnable(I)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glFramebufferRenderbufferOES(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glFramebufferTexture2DOES(IIIII)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGenFramebuffersOES(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGenFramebuffersOES(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGenRenderbuffersOES(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGenRenderbuffersOES(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGenerateMipmapOES(I)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGetFramebufferAttachmentParameterivOES(IIILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGetFramebufferAttachmentParameterivOES(III[II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGetIntegerv(ILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGetIntegerv(I[II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGetRenderbufferParameterivOES(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGetRenderbufferParameterivOES(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGetTexGenfv(IILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGetTexGenfv(II[FI)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGetTexGeniv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGetTexGeniv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGetTexGenxv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glGetTexGenxv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glIsFramebufferOES(I)Z
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glIsRenderbufferOES(I)Z
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glRenderbufferStorageOES(IIII)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glStencilOp(III)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexEnvf(IIF)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexEnvfv(IILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexEnvfv(II[FI)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexEnvx(III)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexEnvxv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexEnvxv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexGenf(IIF)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexGenfv(IILjava/nio/FloatBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexGenfv(II[FI)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexGeni(III)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexGeniv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexGeniv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexGenx(III)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexGenxv(IILjava/nio/IntBuffer;)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexGenxv(II[II)V
+HSPLjavax/microedition/khronos/opengles/GL11ExtensionPack;->glTexParameterf(IIF)V
+HSPLjavax/net/DefaultSocketFactory;-><init>()V
+HSPLjavax/net/DefaultSocketFactory;->createSocket()Ljava/net/Socket;
+HSPLjavax/net/ServerSocketFactory;-><init>()V
+HSPLjavax/net/ServerSocketFactory;->createServerSocket(I)Ljava/net/ServerSocket;
+HSPLjavax/net/ServerSocketFactory;->createServerSocket(II)Ljava/net/ServerSocket;
+HSPLjavax/net/ServerSocketFactory;->createServerSocket(IILjava/net/InetAddress;)Ljava/net/ServerSocket;
+HSPLjavax/net/SocketFactory;-><init>()V
+HSPLjavax/net/SocketFactory;->createSocket(Ljava/lang/String;I)Ljava/net/Socket;
+HSPLjavax/net/SocketFactory;->createSocket(Ljava/lang/String;ILjava/net/InetAddress;I)Ljava/net/Socket;
+HSPLjavax/net/SocketFactory;->createSocket(Ljava/net/InetAddress;I)Ljava/net/Socket;
+HSPLjavax/net/SocketFactory;->createSocket(Ljava/net/InetAddress;ILjava/net/InetAddress;I)Ljava/net/Socket;
+HSPLjavax/net/SocketFactory;->getDefault()Ljavax/net/SocketFactory;
+HSPLjavax/net/ssl/ExtendedSSLSession;-><init>()V
+HSPLjavax/net/ssl/ExtendedSSLSession;->getLocalSupportedSignatureAlgorithms()[Ljava/lang/String;
+HSPLjavax/net/ssl/ExtendedSSLSession;->getPeerSupportedSignatureAlgorithms()[Ljava/lang/String;
+HSPLjavax/net/ssl/HostnameVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z
+HSPLjavax/net/ssl/HttpsURLConnection;-><init>(Ljava/net/URL;)V
+HSPLjavax/net/ssl/HttpsURLConnection;->getDefaultHostnameVerifier()Ljavax/net/ssl/HostnameVerifier;
+HSPLjavax/net/ssl/HttpsURLConnection;->getDefaultSSLSocketFactory()Ljavax/net/ssl/SSLSocketFactory;
+HSPLjavax/net/ssl/HttpsURLConnection;->setDefaultHostnameVerifier(Ljavax/net/ssl/HostnameVerifier;)V
+HSPLjavax/net/ssl/HttpsURLConnection;->setDefaultSSLSocketFactory(Ljavax/net/ssl/SSLSocketFactory;)V
+HSPLjavax/net/ssl/KeyManagerFactory$1;-><init>()V
+HSPLjavax/net/ssl/KeyManagerFactory$1;->run()Ljava/lang/Object;
+HSPLjavax/net/ssl/KeyManagerFactory$1;->run()Ljava/lang/String;
+HSPLjavax/net/ssl/KeyManagerFactory;-><init>(Ljavax/net/ssl/KeyManagerFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V
+HSPLjavax/net/ssl/KeyManagerFactory;->getDefaultAlgorithm()Ljava/lang/String;
+HSPLjavax/net/ssl/KeyManagerFactory;->getInstance(Ljava/lang/String;)Ljavax/net/ssl/KeyManagerFactory;
+HSPLjavax/net/ssl/KeyManagerFactory;->getKeyManagers()[Ljavax/net/ssl/KeyManager;
+HSPLjavax/net/ssl/KeyManagerFactory;->init(Ljava/security/KeyStore;[C)V
+HSPLjavax/net/ssl/KeyManagerFactorySpi;-><init>()V
+HSPLjavax/net/ssl/KeyManagerFactorySpi;->engineGetKeyManagers()[Ljavax/net/ssl/KeyManager;
+HSPLjavax/net/ssl/KeyManagerFactorySpi;->engineInit(Ljava/security/KeyStore;[C)V
+HSPLjavax/net/ssl/KeyManagerFactorySpi;->engineInit(Ljavax/net/ssl/ManagerFactoryParameters;)V
+HSPLjavax/net/ssl/SNIHostName;-><init>(Ljava/lang/String;)V
+HSPLjavax/net/ssl/SNIHostName;->checkHostName()V
+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
+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;->getServerSocketFactory()Ljavax/net/ssl/SSLServerSocketFactory;
+HSPLjavax/net/ssl/SSLContext;->getSocketFactory()Ljavax/net/ssl/SSLSocketFactory;
+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;->engineCreateSSLEngine()Ljavax/net/ssl/SSLEngine;
+HSPLjavax/net/ssl/SSLContextSpi;->engineCreateSSLEngine(Ljava/lang/String;I)Ljavax/net/ssl/SSLEngine;
+HSPLjavax/net/ssl/SSLContextSpi;->engineGetClientSessionContext()Ljavax/net/ssl/SSLSessionContext;
+HSPLjavax/net/ssl/SSLContextSpi;->engineGetServerSessionContext()Ljavax/net/ssl/SSLSessionContext;
+HSPLjavax/net/ssl/SSLContextSpi;->engineGetServerSocketFactory()Ljavax/net/ssl/SSLServerSocketFactory;
+HSPLjavax/net/ssl/SSLContextSpi;->engineGetSocketFactory()Ljavax/net/ssl/SSLSocketFactory;
+HSPLjavax/net/ssl/SSLContextSpi;->engineInit([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V
+HSPLjavax/net/ssl/SSLParameters;-><init>()V
+HSPLjavax/net/ssl/SSLParameters;->clone([Ljava/lang/String;)[Ljava/lang/String;
+HSPLjavax/net/ssl/SSLParameters;->getEndpointIdentificationAlgorithm()Ljava/lang/String;
+HSPLjavax/net/ssl/SSLParameters;->setCipherSuites([Ljava/lang/String;)V
+HSPLjavax/net/ssl/SSLParameters;->setEndpointIdentificationAlgorithm(Ljava/lang/String;)V
+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
+HSPLjavax/net/ssl/SSLServerSocketFactory;-><init>()V
+HSPLjavax/net/ssl/SSLServerSocketFactory;->getDefaultCipherSuites()[Ljava/lang/String;
+HSPLjavax/net/ssl/SSLServerSocketFactory;->getSupportedCipherSuites()[Ljava/lang/String;
+HSPLjavax/net/ssl/SSLSession;->getApplicationBufferSize()I
+HSPLjavax/net/ssl/SSLSession;->getCipherSuite()Ljava/lang/String;
+HSPLjavax/net/ssl/SSLSession;->getCreationTime()J
+HSPLjavax/net/ssl/SSLSession;->getId()[B
+HSPLjavax/net/ssl/SSLSession;->getLastAccessedTime()J
+HSPLjavax/net/ssl/SSLSession;->getLocalCertificates()[Ljava/security/cert/Certificate;
+HSPLjavax/net/ssl/SSLSession;->getLocalPrincipal()Ljava/security/Principal;
+HSPLjavax/net/ssl/SSLSession;->getPacketBufferSize()I
+HSPLjavax/net/ssl/SSLSession;->getPeerCertificateChain()[Ljavax/security/cert/X509Certificate;
+HSPLjavax/net/ssl/SSLSession;->getPeerCertificates()[Ljava/security/cert/Certificate;
+HSPLjavax/net/ssl/SSLSession;->getPeerHost()Ljava/lang/String;
+HSPLjavax/net/ssl/SSLSession;->getPeerPort()I
+HSPLjavax/net/ssl/SSLSession;->getPeerPrincipal()Ljava/security/Principal;
+HSPLjavax/net/ssl/SSLSession;->getProtocol()Ljava/lang/String;
+HSPLjavax/net/ssl/SSLSession;->getSessionContext()Ljavax/net/ssl/SSLSessionContext;
+HSPLjavax/net/ssl/SSLSession;->getValue(Ljava/lang/String;)Ljava/lang/Object;
+HSPLjavax/net/ssl/SSLSession;->getValueNames()[Ljava/lang/String;
+HSPLjavax/net/ssl/SSLSession;->invalidate()V
+HSPLjavax/net/ssl/SSLSession;->isValid()Z
+HSPLjavax/net/ssl/SSLSession;->putValue(Ljava/lang/String;Ljava/lang/Object;)V
+HSPLjavax/net/ssl/SSLSession;->removeValue(Ljava/lang/String;)V
+HSPLjavax/net/ssl/SSLSessionContext;->getIds()Ljava/util/Enumeration;
+HSPLjavax/net/ssl/SSLSessionContext;->getSession([B)Ljavax/net/ssl/SSLSession;
+HSPLjavax/net/ssl/SSLSessionContext;->getSessionCacheSize()I
+HSPLjavax/net/ssl/SSLSessionContext;->getSessionTimeout()I
+HSPLjavax/net/ssl/SSLSessionContext;->setSessionCacheSize(I)V
+HSPLjavax/net/ssl/SSLSessionContext;->setSessionTimeout(I)V
+HSPLjavax/net/ssl/SSLSocket;-><init>()V
+HSPLjavax/net/ssl/SSLSocket;->addHandshakeCompletedListener(Ljavax/net/ssl/HandshakeCompletedListener;)V
+HSPLjavax/net/ssl/SSLSocket;->getEnableSessionCreation()Z
+HSPLjavax/net/ssl/SSLSocket;->getEnabledCipherSuites()[Ljava/lang/String;
+HSPLjavax/net/ssl/SSLSocket;->getEnabledProtocols()[Ljava/lang/String;
+HSPLjavax/net/ssl/SSLSocket;->getNeedClientAuth()Z
+HSPLjavax/net/ssl/SSLSocket;->getSSLParameters()Ljavax/net/ssl/SSLParameters;
+HSPLjavax/net/ssl/SSLSocket;->getSession()Ljavax/net/ssl/SSLSession;
+HSPLjavax/net/ssl/SSLSocket;->getSupportedCipherSuites()[Ljava/lang/String;
+HSPLjavax/net/ssl/SSLSocket;->getSupportedProtocols()[Ljava/lang/String;
+HSPLjavax/net/ssl/SSLSocket;->getUseClientMode()Z
+HSPLjavax/net/ssl/SSLSocket;->getWantClientAuth()Z
+HSPLjavax/net/ssl/SSLSocket;->removeHandshakeCompletedListener(Ljavax/net/ssl/HandshakeCompletedListener;)V
+HSPLjavax/net/ssl/SSLSocket;->setEnableSessionCreation(Z)V
+HSPLjavax/net/ssl/SSLSocket;->setEnabledCipherSuites([Ljava/lang/String;)V
+HSPLjavax/net/ssl/SSLSocket;->setEnabledProtocols([Ljava/lang/String;)V
+HSPLjavax/net/ssl/SSLSocket;->setNeedClientAuth(Z)V
+HSPLjavax/net/ssl/SSLSocket;->setUseClientMode(Z)V
+HSPLjavax/net/ssl/SSLSocket;->setWantClientAuth(Z)V
+HSPLjavax/net/ssl/SSLSocket;->startHandshake()V
+HSPLjavax/net/ssl/SSLSocketFactory$1;-><init>(Ljava/lang/String;)V
+HSPLjavax/net/ssl/SSLSocketFactory$1;->run()Ljava/lang/Object;
+HSPLjavax/net/ssl/SSLSocketFactory$1;->run()Ljava/lang/String;
+HSPLjavax/net/ssl/SSLSocketFactory;-><init>()V
+HSPLjavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;
+HSPLjavax/net/ssl/SSLSocketFactory;->getDefault()Ljavax/net/SocketFactory;
+HSPLjavax/net/ssl/SSLSocketFactory;->getDefaultCipherSuites()[Ljava/lang/String;
+HSPLjavax/net/ssl/SSLSocketFactory;->getSecurityProperty(Ljava/lang/String;)Ljava/lang/String;
+HSPLjavax/net/ssl/SSLSocketFactory;->getSupportedCipherSuites()[Ljava/lang/String;
+HSPLjavax/net/ssl/SSLSocketFactory;->log(Ljava/lang/String;)V
+HSPLjavax/net/ssl/TrustManagerFactory$1;-><init>()V
+HSPLjavax/net/ssl/TrustManagerFactory$1;->run()Ljava/lang/Object;
+HSPLjavax/net/ssl/TrustManagerFactory$1;->run()Ljava/lang/String;
+HSPLjavax/net/ssl/TrustManagerFactory;-><init>(Ljavax/net/ssl/TrustManagerFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V
+HSPLjavax/net/ssl/TrustManagerFactory;->getDefaultAlgorithm()Ljava/lang/String;
+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
+HSPLjavax/net/ssl/TrustManagerFactorySpi;-><init>()V
+HSPLjavax/net/ssl/TrustManagerFactorySpi;->engineGetTrustManagers()[Ljavax/net/ssl/TrustManager;
+HSPLjavax/net/ssl/TrustManagerFactorySpi;->engineInit(Ljava/security/KeyStore;)V
+HSPLjavax/net/ssl/TrustManagerFactorySpi;->engineInit(Ljavax/net/ssl/ManagerFactoryParameters;)V
+HSPLjavax/net/ssl/X509ExtendedKeyManager;-><init>()V
+HSPLjavax/net/ssl/X509ExtendedTrustManager;-><init>()V
+HSPLjavax/net/ssl/X509ExtendedTrustManager;->checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)V
+HSPLjavax/net/ssl/X509ExtendedTrustManager;->checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)V
+HSPLjavax/net/ssl/X509ExtendedTrustManager;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)V
+HSPLjavax/net/ssl/X509ExtendedTrustManager;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)V
+HSPLjavax/net/ssl/X509KeyManager;->chooseClientAlias([Ljava/lang/String;[Ljava/security/Principal;Ljava/net/Socket;)Ljava/lang/String;
+HSPLjavax/net/ssl/X509KeyManager;->chooseServerAlias(Ljava/lang/String;[Ljava/security/Principal;Ljava/net/Socket;)Ljava/lang/String;
+HSPLjavax/net/ssl/X509KeyManager;->getCertificateChain(Ljava/lang/String;)[Ljava/security/cert/X509Certificate;
+HSPLjavax/net/ssl/X509KeyManager;->getClientAliases(Ljava/lang/String;[Ljava/security/Principal;)[Ljava/lang/String;
+HSPLjavax/net/ssl/X509KeyManager;->getPrivateKey(Ljava/lang/String;)Ljava/security/PrivateKey;
+HSPLjavax/net/ssl/X509KeyManager;->getServerAliases(Ljava/lang/String;[Ljava/security/Principal;)[Ljava/lang/String;
+HSPLjavax/net/ssl/X509TrustManager;->checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V
+HSPLjavax/net/ssl/X509TrustManager;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V
+HSPLjavax/net/ssl/X509TrustManager;->getAcceptedIssuers()[Ljava/security/cert/X509Certificate;
+HSPLjavax/security/auth/x500/X500Principal;-><init>(Lsun/security/x509/X500Name;)V
+HSPLjavax/security/auth/x500/X500Principal;-><init>([B)V
+HSPLjavax/security/auth/x500/X500Principal;->equals(Ljava/lang/Object;)Z
+HSPLjavax/security/auth/x500/X500Principal;->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/SAXParser;-><init>()V
+HSPLjavax/xml/parsers/SAXParser;->getParser()Lorg/xml/sax/Parser;
+HSPLjavax/xml/parsers/SAXParser;->getProperty(Ljava/lang/String;)Ljava/lang/Object;
+HSPLjavax/xml/parsers/SAXParser;->getXMLReader()Lorg/xml/sax/XMLReader;
+HSPLjavax/xml/parsers/SAXParser;->isNamespaceAware()Z
+HSPLjavax/xml/parsers/SAXParser;->isValidating()Z
+HSPLjavax/xml/parsers/SAXParser;->setProperty(Ljava/lang/String;Ljava/lang/Object;)V
+HSPLjavax/xml/parsers/SAXParserFactory;-><init>()V
+HSPLjavax/xml/parsers/SAXParserFactory;->getFeature(Ljava/lang/String;)Z
+HSPLjavax/xml/parsers/SAXParserFactory;->newInstance()Ljavax/xml/parsers/SAXParserFactory;
+HSPLjavax/xml/parsers/SAXParserFactory;->newSAXParser()Ljavax/xml/parsers/SAXParser;
+HSPLjavax/xml/parsers/SAXParserFactory;->setFeature(Ljava/lang/String;Z)V
+HSPLjunit/framework/Assert;-><init>()V
+HSPLjunit/framework/Assert;->assertNotNull(Ljava/lang/Object;)V
+HSPLjunit/framework/Assert;->assertNotNull(Ljava/lang/String;Ljava/lang/Object;)V
+HSPLjunit/framework/Assert;->assertTrue(Ljava/lang/String;Z)V
+HSPLjunit/framework/Protectable;->protect()V
+HSPLjunit/framework/TestCase;-><init>()V
+HSPLjunit/framework/TestCase;->countTestCases()I
+HSPLjunit/framework/TestCase;->getName()Ljava/lang/String;
+HSPLjunit/framework/TestCase;->run(Ljunit/framework/TestResult;)V
+HSPLjunit/framework/TestCase;->runBare()V
+HSPLjunit/framework/TestCase;->setName(Ljava/lang/String;)V
+HSPLjunit/framework/TestCase;->setUp()V
+HSPLjunit/framework/TestListener;->addError(Ljunit/framework/Test;Ljava/lang/Throwable;)V
+HSPLjunit/framework/TestListener;->addFailure(Ljunit/framework/Test;Ljunit/framework/AssertionFailedError;)V
+HSPLjunit/framework/TestListener;->endTest(Ljunit/framework/Test;)V
+HSPLjunit/framework/TestListener;->startTest(Ljunit/framework/Test;)V
+HSPLjunit/framework/TestResult$1;-><init>(Ljunit/framework/TestResult;Ljunit/framework/TestCase;)V
+HSPLjunit/framework/TestResult$1;->protect()V
+HSPLjunit/framework/TestResult;-><init>()V
+HSPLjunit/framework/TestResult;->addListener(Ljunit/framework/TestListener;)V
+HSPLjunit/framework/TestResult;->cloneListeners()Ljava/util/List;
+HSPLjunit/framework/TestResult;->run(Ljunit/framework/TestCase;)V
+HSPLjunit/framework/TestResult;->shouldStop()Z
+HSPLjunit/framework/TestResult;->startTest(Ljunit/framework/Test;)V
+HSPLjunit/framework/TestSuite;-><init>()V
+HSPLjunit/framework/TestSuite;-><init>(Ljava/lang/Class;)V
+HSPLjunit/framework/TestSuite;-><init>(Ljava/lang/String;)V
+HSPLjunit/framework/TestSuite;->addTest(Ljunit/framework/Test;)V
+HSPLjunit/framework/TestSuite;->addTestMethod(Ljava/lang/reflect/Method;Ljava/util/List;Ljava/lang/Class;)V
+HSPLjunit/framework/TestSuite;->addTestsFromTestCase(Ljava/lang/Class;)V
+HSPLjunit/framework/TestSuite;->createTest(Ljava/lang/Class;Ljava/lang/String;)Ljunit/framework/Test;
+HSPLjunit/framework/TestSuite;->getName()Ljava/lang/String;
+HSPLjunit/framework/TestSuite;->getTestConstructor(Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
+HSPLjunit/framework/TestSuite;->isPublicTestMethod(Ljava/lang/reflect/Method;)Z
+HSPLjunit/framework/TestSuite;->isTestMethod(Ljava/lang/reflect/Method;)Z
+HSPLjunit/framework/TestSuite;->run(Ljunit/framework/TestResult;)V
+HSPLjunit/framework/TestSuite;->runTest(Ljunit/framework/Test;Ljunit/framework/TestResult;)V
+HSPLjunit/framework/TestSuite;->setName(Ljava/lang/String;)V
+HSPLjunit/framework/TestSuite;->testAt(I)Ljunit/framework/Test;
+HSPLjunit/framework/TestSuite;->testCount()I
+HSPLlibcore/icu/ICU;->U_FAILURE(I)Z
+HSPLlibcore/icu/ICU;->getBestDateTimePattern(Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String;
+HSPLlibcore/icu/ICU;->getISOCountries()[Ljava/lang/String;
+HSPLlibcore/icu/ICU;->getISOLanguages()[Ljava/lang/String;
+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;->mapInvalidAndNullLocales(Ljava/util/Locale;)Ljava/util/Locale;
+HSPLlibcore/icu/NativeConverter;->registerConverter(Ljava/lang/Object;J)V
+HSPLlibcore/icu/NativeConverter;->setCallbackDecode(JLjava/nio/charset/CharsetDecoder;)V
+HSPLlibcore/icu/NativeConverter;->setCallbackEncode(JLjava/nio/charset/CharsetEncoder;)V
+HSPLlibcore/icu/NativeConverter;->translateCodingErrorAction(Ljava/nio/charset/CodingErrorAction;)I
+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;->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
+HSPLlibcore/io/BlockGuardOs;->fstat(Ljava/io/FileDescriptor;)Landroid/system/StructStat;
+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;->lseek(Ljava/io/FileDescriptor;JI)J
+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;->read(Ljava/io/FileDescriptor;[BII)I
+HSPLlibcore/io/BlockGuardOs;->realpath(Ljava/lang/String;)Ljava/lang/String;
+HSPLlibcore/io/BlockGuardOs;->recvfrom(Ljava/io/FileDescriptor;[BIIILjava/net/InetSocketAddress;)I
+HSPLlibcore/io/BlockGuardOs;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/InetAddress;I)I
+HSPLlibcore/io/BlockGuardOs;->socket(III)Ljava/io/FileDescriptor;
+HSPLlibcore/io/BlockGuardOs;->socketpair(IIILjava/io/FileDescriptor;Ljava/io/FileDescriptor;)V
+HSPLlibcore/io/BlockGuardOs;->stat(Ljava/lang/String;)Landroid/system/StructStat;
+HSPLlibcore/io/BlockGuardOs;->statvfs(Ljava/lang/String;)Landroid/system/StructStatVfs;
+HSPLlibcore/io/BlockGuardOs;->tagSocket(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;
+HSPLlibcore/io/BlockGuardOs;->untagSocket(Ljava/io/FileDescriptor;)V
+HSPLlibcore/io/BlockGuardOs;->write(Ljava/io/FileDescriptor;[BII)I
+HSPLlibcore/io/BufferIterator;-><init>()V
+HSPLlibcore/io/BufferIterator;->pos()I
+HSPLlibcore/io/BufferIterator;->readByte()B
+HSPLlibcore/io/BufferIterator;->readByteArray([BII)V
+HSPLlibcore/io/BufferIterator;->readInt()I
+HSPLlibcore/io/BufferIterator;->readIntArray([III)V
+HSPLlibcore/io/BufferIterator;->readShort()S
+HSPLlibcore/io/BufferIterator;->seek(I)V
+HSPLlibcore/io/BufferIterator;->skip(I)V
+HSPLlibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection$1;-><init>(Llibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection;Ljava/io/InputStream;)V
+HSPLlibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection$1;->close()V
+HSPLlibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection;->-get0(Llibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection;)Ljava/util/jar/JarFile;
+HSPLlibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection;-><init>(Llibcore/io/ClassPathURLStreamHandler;Ljava/net/URL;)V
+HSPLlibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection;->connect()V
+HSPLlibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection;->getInputStream()Ljava/io/InputStream;
+HSPLlibcore/io/ClassPathURLStreamHandler;->-get0(Llibcore/io/ClassPathURLStreamHandler;)Ljava/util/jar/JarFile;
+HSPLlibcore/io/ClassPathURLStreamHandler;-><init>(Ljava/lang/String;)V
+HSPLlibcore/io/ClassPathURLStreamHandler;->findEntryWithDirectoryFallback(Ljava/util/jar/JarFile;Ljava/lang/String;)Ljava/util/zip/ZipEntry;
+HSPLlibcore/io/ClassPathURLStreamHandler;->getEntryUrlOrNull(Ljava/lang/String;)Ljava/net/URL;
+HSPLlibcore/io/ClassPathURLStreamHandler;->isEntryStored(Ljava/lang/String;)Z
+HSPLlibcore/io/ClassPathURLStreamHandler;->openConnection(Ljava/net/URL;)Ljava/net/URLConnection;
+HSPLlibcore/io/DropBox$DefaultReporter;-><init>()V
+HSPLlibcore/io/DropBox$DefaultReporter;-><init>(Llibcore/io/DropBox$DefaultReporter;)V
+HSPLlibcore/io/DropBox;->setReporter(Llibcore/io/DropBox$Reporter;)V
+HSPLlibcore/io/EventLogger$DefaultReporter;-><init>()V
+HSPLlibcore/io/EventLogger$DefaultReporter;-><init>(Llibcore/io/EventLogger$DefaultReporter;)V
+HSPLlibcore/io/EventLogger;->setReporter(Llibcore/io/EventLogger$Reporter;)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;->dup(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;
+HSPLlibcore/io/ForwardingOs;->dup2(Ljava/io/FileDescriptor;I)Ljava/io/FileDescriptor;
+HSPLlibcore/io/ForwardingOs;->fcntlInt(Ljava/io/FileDescriptor;II)I
+HSPLlibcore/io/ForwardingOs;->fcntlVoid(Ljava/io/FileDescriptor;I)I
+HSPLlibcore/io/ForwardingOs;->getenv(Ljava/lang/String;)Ljava/lang/String;
+HSPLlibcore/io/ForwardingOs;->getifaddrs()[Landroid/system/StructIfaddrs;
+HSPLlibcore/io/ForwardingOs;->getnameinfo(Ljava/net/InetAddress;I)Ljava/lang/String;
+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;->if_nametoindex(Ljava/lang/String;)I
+HSPLlibcore/io/ForwardingOs;->inet_pton(ILjava/lang/String;)Ljava/net/InetAddress;
+HSPLlibcore/io/ForwardingOs;->ioctlInt(Ljava/io/FileDescriptor;ILandroid/util/MutableInt;)I
+HSPLlibcore/io/ForwardingOs;->listen(Ljava/io/FileDescriptor;I)V
+HSPLlibcore/io/ForwardingOs;->mmap(JJIILjava/io/FileDescriptor;J)J
+HSPLlibcore/io/ForwardingOs;->munmap(JJ)V
+HSPLlibcore/io/ForwardingOs;->prctl(IJJJJ)I
+HSPLlibcore/io/ForwardingOs;->setenv(Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLlibcore/io/ForwardingOs;->setsockoptInt(Ljava/io/FileDescriptor;III)V
+HSPLlibcore/io/ForwardingOs;->setsockoptIpMreqn(Ljava/io/FileDescriptor;III)V
+HSPLlibcore/io/ForwardingOs;->shutdown(Ljava/io/FileDescriptor;I)V
+HSPLlibcore/io/ForwardingOs;->sysconf(I)J
+HSPLlibcore/io/ForwardingOs;->umask(I)I
+HSPLlibcore/io/IoBridge;->bind(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
+HSPLlibcore/io/IoBridge;->booleanToInt(Z)I
+HSPLlibcore/io/IoBridge;->closeAndSignalBlockedThreads(Ljava/io/FileDescriptor;)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;->getLocalInetSocketAddress(Ljava/io/FileDescriptor;)Ljava/net/InetSocketAddress;
+HSPLlibcore/io/IoBridge;->isConnected(Ljava/io/FileDescriptor;Ljava/net/InetAddress;III)Z
+HSPLlibcore/io/IoBridge;->open(Ljava/lang/String;I)Ljava/io/FileDescriptor;
+HSPLlibcore/io/IoBridge;->poll(Ljava/io/FileDescriptor;II)V
+HSPLlibcore/io/IoBridge;->postRecvfrom(ZLjava/net/DatagramPacket;Ljava/net/InetSocketAddress;I)I
+HSPLlibcore/io/IoBridge;->read(Ljava/io/FileDescriptor;[BII)I
+HSPLlibcore/io/IoBridge;->recvfrom(ZLjava/io/FileDescriptor;[BIIILjava/net/DatagramPacket;Z)I
+HSPLlibcore/io/IoBridge;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/InetAddress;I)I
+HSPLlibcore/io/IoBridge;->setSocketOption(Ljava/io/FileDescriptor;ILjava/lang/Object;)V
+HSPLlibcore/io/IoBridge;->setSocketOptionErrno(Ljava/io/FileDescriptor;ILjava/lang/Object;)V
+HSPLlibcore/io/IoBridge;->socket(III)Ljava/io/FileDescriptor;
+HSPLlibcore/io/IoBridge;->write(Ljava/io/FileDescriptor;[BII)V
+HSPLlibcore/io/IoTracker;-><init>()V
+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
+HSPLlibcore/io/IoUtils;->canOpenReadOnly(Ljava/lang/String;)Z
+HSPLlibcore/io/IoUtils;->close(Ljava/io/FileDescriptor;)V
+HSPLlibcore/io/IoUtils;->closeQuietly(Ljava/io/FileDescriptor;)V
+HSPLlibcore/io/IoUtils;->closeQuietly(Ljava/lang/AutoCloseable;)V
+HSPLlibcore/io/IoUtils;->readFileAsByteArray(Ljava/lang/String;)[B
+HSPLlibcore/io/IoUtils;->setBlocking(Ljava/io/FileDescriptor;Z)V
+HSPLlibcore/io/Linux;->read(Ljava/io/FileDescriptor;[BII)I
+HSPLlibcore/io/Linux;->recvfrom(Ljava/io/FileDescriptor;[BIIILjava/net/InetSocketAddress;)I
+HSPLlibcore/io/Linux;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/InetAddress;I)I
+HSPLlibcore/io/Linux;->umask(I)I
+HSPLlibcore/io/Linux;->write(Ljava/io/FileDescriptor;[BII)I
+HSPLlibcore/io/Memory;->peekInt(JZ)I
+HSPLlibcore/io/Memory;->peekInt([BILjava/nio/ByteOrder;)I
+HSPLlibcore/io/Memory;->peekShort(JZ)S
+HSPLlibcore/io/Memory;->peekShort([BILjava/nio/ByteOrder;)S
+HSPLlibcore/io/Memory;->pokeInt(JIZ)V
+HSPLlibcore/io/Memory;->pokeShort(JSZ)V
+HSPLlibcore/io/MemoryMappedFile;-><init>(JJ)V
+HSPLlibcore/io/MemoryMappedFile;->bigEndianIterator()Llibcore/io/BufferIterator;
+HSPLlibcore/io/MemoryMappedFile;->checkNotClosed()V
+HSPLlibcore/io/MemoryMappedFile;->mmapRO(Ljava/lang/String;)Llibcore/io/MemoryMappedFile;
+HSPLlibcore/io/MemoryMappedFile;->size()I
+HSPLlibcore/io/NioBufferIterator;-><init>(Llibcore/io/MemoryMappedFile;JIZ)V
+HSPLlibcore/io/NioBufferIterator;->checkDstBounds(III)V
+HSPLlibcore/io/NioBufferIterator;->checkReadBounds(III)V
+HSPLlibcore/io/NioBufferIterator;->readByte()B
+HSPLlibcore/io/NioBufferIterator;->readByteArray([BII)V
+HSPLlibcore/io/NioBufferIterator;->readInt()I
+HSPLlibcore/io/NioBufferIterator;->readIntArray([III)V
+HSPLlibcore/io/NioBufferIterator;->seek(I)V
+HSPLlibcore/io/NioBufferIterator;->skip(I)V
+HSPLlibcore/net/NetworkSecurityPolicy$DefaultNetworkSecurityPolicy;-><init>()V
+HSPLlibcore/net/NetworkSecurityPolicy;-><init>()V
+HSPLlibcore/net/NetworkSecurityPolicy;->getInstance()Llibcore/net/NetworkSecurityPolicy;
+HSPLlibcore/net/NetworkSecurityPolicy;->setInstance(Llibcore/net/NetworkSecurityPolicy;)V
+HSPLlibcore/net/UriCodec;->appendDecoded(Ljava/lang/StringBuilder;Ljava/lang/String;ZLjava/nio/charset/Charset;Z)V
+HSPLlibcore/net/UriCodec;->decode(Ljava/lang/String;ZLjava/nio/charset/Charset;Z)Ljava/lang/String;
+HSPLlibcore/net/UriCodec;->flushDecodingByteAccumulator(Ljava/lang/StringBuilder;Ljava/nio/charset/CharsetDecoder;Ljava/nio/ByteBuffer;Z)V
+HSPLlibcore/net/UriCodec;->getNextCharacter(Ljava/lang/String;IILjava/lang/String;)C
+HSPLlibcore/net/UriCodec;->hexCharToValue(C)I
+HSPLlibcore/net/event/NetworkEventDispatcher;-><init>()V
+HSPLlibcore/net/event/NetworkEventDispatcher;->addListener(Llibcore/net/event/NetworkEventListener;)V
+HSPLlibcore/net/event/NetworkEventDispatcher;->getInstance()Llibcore/net/event/NetworkEventDispatcher;
+HSPLlibcore/net/event/NetworkEventDispatcher;->onNetworkConfigurationChanged()V
+HSPLlibcore/net/event/NetworkEventListener;-><init>()V
+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;->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/GenericSignatureParser;-><init>(Ljava/lang/ClassLoader;)V
+HSPLlibcore/reflect/GenericSignatureParser;->expect(C)V
+HSPLlibcore/reflect/GenericSignatureParser;->isStopSymbol(C)Z
+HSPLlibcore/reflect/GenericSignatureParser;->parseClassSignature()V
+HSPLlibcore/reflect/GenericSignatureParser;->parseClassTypeSignature()Ljava/lang/reflect/Type;
+HSPLlibcore/reflect/GenericSignatureParser;->parseFieldTypeSignature()Ljava/lang/reflect/Type;
+HSPLlibcore/reflect/GenericSignatureParser;->parseForClass(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;)V
+HSPLlibcore/reflect/GenericSignatureParser;->parseFormalTypeParameter()Llibcore/reflect/TypeVariableImpl;
+HSPLlibcore/reflect/GenericSignatureParser;->parseOptFormalTypeParameters()V
+HSPLlibcore/reflect/GenericSignatureParser;->parseOptTypeArguments()Llibcore/reflect/ListOfTypes;
+HSPLlibcore/reflect/GenericSignatureParser;->parseTypeArgument()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;->add(Ljava/lang/reflect/Type;)V
+HSPLlibcore/reflect/ListOfTypes;->getResolvedTypes()[Ljava/lang/reflect/Type;
+HSPLlibcore/reflect/ListOfTypes;->resolveTypes(Ljava/util/List;)[Ljava/lang/reflect/Type;
+HSPLlibcore/reflect/ListOfVariables;-><init>()V
+HSPLlibcore/reflect/ListOfVariables;->add(Ljava/lang/reflect/TypeVariable;)V
+HSPLlibcore/reflect/ListOfVariables;->getArray()[Ljava/lang/reflect/TypeVariable;
+HSPLlibcore/reflect/ParameterizedTypeImpl;-><init>(Llibcore/reflect/ParameterizedTypeImpl;Ljava/lang/String;Llibcore/reflect/ListOfTypes;Ljava/lang/ClassLoader;)V
+HSPLlibcore/reflect/ParameterizedTypeImpl;->equals(Ljava/lang/Object;)Z
+HSPLlibcore/reflect/ParameterizedTypeImpl;->getActualTypeArguments()[Ljava/lang/reflect/Type;
+HSPLlibcore/reflect/ParameterizedTypeImpl;->getOwnerType()Ljava/lang/reflect/Type;
+HSPLlibcore/reflect/ParameterizedTypeImpl;->getRawType()Ljava/lang/Class;
+HSPLlibcore/reflect/ParameterizedTypeImpl;->getRawType()Ljava/lang/reflect/Type;
+HSPLlibcore/reflect/ParameterizedTypeImpl;->getResolvedType()Ljava/lang/reflect/Type;
+HSPLlibcore/reflect/TypeVariableImpl;-><init>(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;)V
+HSPLlibcore/reflect/TypeVariableImpl;-><init>(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;Llibcore/reflect/ListOfTypes;)V
+HSPLlibcore/reflect/TypeVariableImpl;->getName()Ljava/lang/String;
+HSPLlibcore/reflect/Types;->getType(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
+HSPLlibcore/util/BasicLruCache;-><init>(I)V
+HSPLlibcore/util/BasicLruCache;->create(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLlibcore/util/BasicLruCache;->entryEvicted(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLlibcore/util/BasicLruCache;->evictAll()V
+HSPLlibcore/util/BasicLruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLlibcore/util/BasicLruCache;->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
+HSPLlibcore/util/NativeAllocationRegistry$CleanerRunner;-><init>(Lsun/misc/Cleaner;)V
+HSPLlibcore/util/NativeAllocationRegistry$CleanerRunner;->run()V
+HSPLlibcore/util/NativeAllocationRegistry$CleanerThunk;-><init>(Llibcore/util/NativeAllocationRegistry;J)V
+HSPLlibcore/util/NativeAllocationRegistry$CleanerThunk;->run()V
+HSPLlibcore/util/NativeAllocationRegistry;->-get0(Llibcore/util/NativeAllocationRegistry;)J
+HSPLlibcore/util/NativeAllocationRegistry;->-get1(Llibcore/util/NativeAllocationRegistry;)J
+HSPLlibcore/util/NativeAllocationRegistry;->-wrap0(J)V
+HSPLlibcore/util/NativeAllocationRegistry;-><init>(Ljava/lang/ClassLoader;JJ)V
+HSPLlibcore/util/NativeAllocationRegistry;->registerNativeAllocation(J)V
+HSPLlibcore/util/NativeAllocationRegistry;->registerNativeAllocation(Ljava/lang/Object;J)Ljava/lang/Runnable;
+HSPLlibcore/util/NativeAllocationRegistry;->registerNativeFree(J)V
+HSPLlibcore/util/Objects;->equal(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLlibcore/util/TimeZoneDataFiles;->getDataTimeZoneFile(Ljava/lang/String;)Ljava/lang/String;
+HSPLlibcore/util/TimeZoneDataFiles;->getSystemTimeZoneFile(Ljava/lang/String;)Ljava/lang/String;
+HSPLlibcore/util/TimeZoneDataFiles;->getTimeZoneFilePaths(Ljava/lang/String;)[Ljava/lang/String;
+HSPLlibcore/util/ZoneInfo$WallTime;-><init>()V
+HSPLlibcore/util/ZoneInfo$WallTime;->copyFieldsFromCalendar()V
+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;->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;->-get0(Llibcore/util/ZoneInfo;)[B
+HSPLlibcore/util/ZoneInfo;->-get1(Llibcore/util/ZoneInfo;)[I
+HSPLlibcore/util/ZoneInfo;->-get2(Llibcore/util/ZoneInfo;)I
+HSPLlibcore/util/ZoneInfo;->-get3(Llibcore/util/ZoneInfo;)[J
+HSPLlibcore/util/ZoneInfo;->-wrap0(JI)I
+HSPLlibcore/util/ZoneInfo;-><init>(Ljava/lang/String;[J[B[I[BJ)V
+HSPLlibcore/util/ZoneInfo;->checkedAdd(JI)I
+HSPLlibcore/util/ZoneInfo;->clone()Ljava/lang/Object;
+HSPLlibcore/util/ZoneInfo;->findOffsetIndexForTimeInMilliseconds(J)I
+HSPLlibcore/util/ZoneInfo;->findOffsetIndexForTimeInSeconds(J)I
+HSPLlibcore/util/ZoneInfo;->findTransitionIndex(J)I
+HSPLlibcore/util/ZoneInfo;->getOffset(J)I
+HSPLlibcore/util/ZoneInfo;->getOffsetsByUtcTime(J[I)I
+HSPLlibcore/util/ZoneInfo;->getRawOffset()I
+HSPLlibcore/util/ZoneInfo;->hasSameRules(Ljava/util/TimeZone;)Z
+HSPLlibcore/util/ZoneInfo;->inDaylightTime(Ljava/util/Date;)Z
+HSPLlibcore/util/ZoneInfo;->readTimeZone(Ljava/lang/String;Llibcore/io/BufferIterator;J)Llibcore/util/ZoneInfo;
+HSPLlibcore/util/ZoneInfo;->roundDownMillisToSeconds(J)J
+HSPLlibcore/util/ZoneInfo;->roundUpMillisToSeconds(J)J
+HSPLlibcore/util/ZoneInfoDB$TzData$1;-><init>(Llibcore/util/ZoneInfoDB$TzData;I)V
+HSPLlibcore/util/ZoneInfoDB$TzData$1;->create(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLlibcore/util/ZoneInfoDB$TzData$1;->create(Ljava/lang/String;)Llibcore/util/ZoneInfo;
+HSPLlibcore/util/ZoneInfoDB$TzData;-><init>()V
+HSPLlibcore/util/ZoneInfoDB$TzData;->checkNotClosed()V
+HSPLlibcore/util/ZoneInfoDB$TzData;->close()V
+HSPLlibcore/util/ZoneInfoDB$TzData;->finalize()V
+HSPLlibcore/util/ZoneInfoDB$TzData;->getAvailableIDs()[Ljava/lang/String;
+HSPLlibcore/util/ZoneInfoDB$TzData;->getBufferIterator(Ljava/lang/String;)Llibcore/io/BufferIterator;
+HSPLlibcore/util/ZoneInfoDB$TzData;->getVersion()Ljava/lang/String;
+HSPLlibcore/util/ZoneInfoDB$TzData;->loadData(Ljava/lang/String;)Z
+HSPLlibcore/util/ZoneInfoDB$TzData;->loadTzDataWithFallback([Ljava/lang/String;)Llibcore/util/ZoneInfoDB$TzData;
+HSPLlibcore/util/ZoneInfoDB$TzData;->makeTimeZone(Ljava/lang/String;)Llibcore/util/ZoneInfo;
+HSPLlibcore/util/ZoneInfoDB$TzData;->makeTimeZoneUncached(Ljava/lang/String;)Llibcore/util/ZoneInfo;
+HSPLlibcore/util/ZoneInfoDB$TzData;->readHeader()V
+HSPLlibcore/util/ZoneInfoDB$TzData;->readIndex(Llibcore/io/BufferIterator;II)V
+HSPLlibcore/util/ZoneInfoDB$TzData;->readZoneTab(Llibcore/io/BufferIterator;II)V
+HSPLlibcore/util/ZoneInfoDB$TzData;->validateOffset(II)V
+HSPLlibcore/util/ZoneInfoDB;->getInstance()Llibcore/util/ZoneInfoDB$TzData;
+HSPLorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;)V
+HSPLorg/apache/commons/logging/Log;->debug(Ljava/lang/Object;Ljava/lang/Throwable;)V
+HSPLorg/apache/commons/logging/Log;->error(Ljava/lang/Object;)V
+HSPLorg/apache/commons/logging/Log;->error(Ljava/lang/Object;Ljava/lang/Throwable;)V
+HSPLorg/apache/commons/logging/Log;->fatal(Ljava/lang/Object;)V
+HSPLorg/apache/commons/logging/Log;->fatal(Ljava/lang/Object;Ljava/lang/Throwable;)V
+HSPLorg/apache/commons/logging/Log;->info(Ljava/lang/Object;)V
+HSPLorg/apache/commons/logging/Log;->info(Ljava/lang/Object;Ljava/lang/Throwable;)V
+HSPLorg/apache/commons/logging/Log;->isDebugEnabled()Z
+HSPLorg/apache/commons/logging/Log;->isErrorEnabled()Z
+HSPLorg/apache/commons/logging/Log;->isFatalEnabled()Z
+HSPLorg/apache/commons/logging/Log;->isInfoEnabled()Z
+HSPLorg/apache/commons/logging/Log;->isTraceEnabled()Z
+HSPLorg/apache/commons/logging/Log;->isWarnEnabled()Z
+HSPLorg/apache/commons/logging/Log;->trace(Ljava/lang/Object;)V
+HSPLorg/apache/commons/logging/Log;->trace(Ljava/lang/Object;Ljava/lang/Throwable;)V
+HSPLorg/apache/commons/logging/Log;->warn(Ljava/lang/Object;)V
+HSPLorg/apache/commons/logging/Log;->warn(Ljava/lang/Object;Ljava/lang/Throwable;)V
+HSPLorg/apache/commons/logging/LogFactory;->createFactoryStore()Ljava/util/Hashtable;
+HSPLorg/apache/commons/logging/LogFactory;->getClassLoader(Ljava/lang/Class;)Ljava/lang/ClassLoader;
+HSPLorg/apache/commons/logging/LogFactory;->getLog(Ljava/lang/Class;)Lorg/apache/commons/logging/Log;
+HSPLorg/apache/commons/logging/LogFactory;->getLog(Ljava/lang/String;)Lorg/apache/commons/logging/Log;
+HSPLorg/apache/commons/logging/LogFactory;->initDiagnostics()V
+HSPLorg/apache/commons/logging/LogFactory;->isDiagnosticsEnabled()Z
+HSPLorg/apache/commons/logging/LogFactory;->logClassLoaderEnvironment(Ljava/lang/Class;)V
+HSPLorg/apache/commons/logging/impl/Jdk14Logger;-><init>(Ljava/lang/String;)V
+HSPLorg/apache/commons/logging/impl/Jdk14Logger;->getLogger()Ljava/util/logging/Logger;
+HSPLorg/apache/commons/logging/impl/WeakHashtable;-><init>()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;-><init>()V
+HSPLorg/apache/harmony/dalvik/ddmc/ChunkHandler;->putString(Ljava/nio/ByteBuffer;Ljava/lang/String;)V
+HSPLorg/apache/harmony/dalvik/ddmc/ChunkHandler;->type(Ljava/lang/String;)I
+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/luni/internal/util/TimezoneGetter;-><init>()V
+HSPLorg/apache/harmony/luni/internal/util/TimezoneGetter;->getId()Ljava/lang/String;
+HSPLorg/apache/harmony/luni/internal/util/TimezoneGetter;->getInstance()Lorg/apache/harmony/luni/internal/util/TimezoneGetter;
+HSPLorg/apache/harmony/luni/internal/util/TimezoneGetter;->setInstance(Lorg/apache/harmony/luni/internal/util/TimezoneGetter;)V
+HSPLorg/apache/harmony/xml/ExpatAttributes;-><init>()V
+HSPLorg/apache/harmony/xml/ExpatAttributes;->getLength()I
+HSPLorg/apache/harmony/xml/ExpatAttributes;->getLocalName(I)Ljava/lang/String;
+HSPLorg/apache/harmony/xml/ExpatAttributes;->getParserPointer()J
+HSPLorg/apache/harmony/xml/ExpatAttributes;->getPointer()J
+HSPLorg/apache/harmony/xml/ExpatAttributes;->getQName(I)Ljava/lang/String;
+HSPLorg/apache/harmony/xml/ExpatAttributes;->getValue(I)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$CurrentAttributes;)V
+HSPLorg/apache/harmony/xml/ExpatParser$CurrentAttributes;->getLength()I
+HSPLorg/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$ExpatLocator;)V
+HSPLorg/apache/harmony/xml/ExpatParser;->-get0(Lorg/apache/harmony/xml/ExpatParser;)I
+HSPLorg/apache/harmony/xml/ExpatParser;->-get1(Lorg/apache/harmony/xml/ExpatParser;)J
+HSPLorg/apache/harmony/xml/ExpatParser;->-get2(Lorg/apache/harmony/xml/ExpatParser;)Z
+HSPLorg/apache/harmony/xml/ExpatParser;->-get3(Lorg/apache/harmony/xml/ExpatParser;)J
+HSPLorg/apache/harmony/xml/ExpatParser;-><init>(Ljava/lang/String;Lorg/apache/harmony/xml/ExpatReader;ZLjava/lang/String;Ljava/lang/String;)V
+HSPLorg/apache/harmony/xml/ExpatParser;->comment([CI)V
+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/ExpatReader;->setFeature(Ljava/lang/String;Z)V
+HSPLorg/apache/harmony/xml/ExpatReader;->setProperty(Ljava/lang/String;Ljava/lang/Object;)V
+HSPLorg/apache/harmony/xml/parsers/SAXParserFactoryImpl;-><init>()V
+HSPLorg/apache/harmony/xml/parsers/SAXParserFactoryImpl;->getFeature(Ljava/lang/String;)Z
+HSPLorg/apache/harmony/xml/parsers/SAXParserFactoryImpl;->isValidating()Z
+HSPLorg/apache/harmony/xml/parsers/SAXParserFactoryImpl;->newSAXParser()Ljavax/xml/parsers/SAXParser;
+HSPLorg/apache/harmony/xml/parsers/SAXParserFactoryImpl;->setFeature(Ljava/lang/String;Z)V
+HSPLorg/apache/harmony/xml/parsers/SAXParserFactoryImpl;->setNamespaceAware(Z)V
+HSPLorg/apache/harmony/xml/parsers/SAXParserImpl;-><init>(Ljava/util/Map;)V
+HSPLorg/apache/harmony/xml/parsers/SAXParserImpl;->getXMLReader()Lorg/xml/sax/XMLReader;
+HSPLorg/apache/harmony/xml/parsers/SAXParserImpl;->resetInternal()V
+HSPLorg/apache/http/ConnectionReuseStrategy;->keepAlive(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z
+HSPLorg/apache/http/Header;->getElements()[Lorg/apache/http/HeaderElement;
+HSPLorg/apache/http/Header;->getName()Ljava/lang/String;
+HSPLorg/apache/http/Header;->getValue()Ljava/lang/String;
+HSPLorg/apache/http/HttpEntity;->consumeContent()V
+HSPLorg/apache/http/HttpEntity;->getContent()Ljava/io/InputStream;
+HSPLorg/apache/http/HttpEntity;->getContentEncoding()Lorg/apache/http/Header;
+HSPLorg/apache/http/HttpEntity;->getContentLength()J
+HSPLorg/apache/http/HttpEntity;->getContentType()Lorg/apache/http/Header;
+HSPLorg/apache/http/HttpEntity;->isChunked()Z
+HSPLorg/apache/http/HttpEntity;->isRepeatable()Z
+HSPLorg/apache/http/HttpEntity;->isStreaming()Z
+HSPLorg/apache/http/HttpEntity;->writeTo(Ljava/io/OutputStream;)V
+HSPLorg/apache/http/HttpMessage;->addHeader(Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/apache/http/HttpMessage;->addHeader(Lorg/apache/http/Header;)V
+HSPLorg/apache/http/HttpMessage;->containsHeader(Ljava/lang/String;)Z
+HSPLorg/apache/http/HttpMessage;->getAllHeaders()[Lorg/apache/http/Header;
+HSPLorg/apache/http/HttpMessage;->getFirstHeader(Ljava/lang/String;)Lorg/apache/http/Header;
+HSPLorg/apache/http/HttpMessage;->getHeaders(Ljava/lang/String;)[Lorg/apache/http/Header;
+HSPLorg/apache/http/HttpMessage;->getLastHeader(Ljava/lang/String;)Lorg/apache/http/Header;
+HSPLorg/apache/http/HttpMessage;->getParams()Lorg/apache/http/params/HttpParams;
+HSPLorg/apache/http/HttpMessage;->getProtocolVersion()Lorg/apache/http/ProtocolVersion;
+HSPLorg/apache/http/HttpMessage;->headerIterator()Lorg/apache/http/HeaderIterator;
+HSPLorg/apache/http/HttpMessage;->headerIterator(Ljava/lang/String;)Lorg/apache/http/HeaderIterator;
+HSPLorg/apache/http/HttpMessage;->removeHeader(Lorg/apache/http/Header;)V
+HSPLorg/apache/http/HttpMessage;->removeHeaders(Ljava/lang/String;)V
+HSPLorg/apache/http/HttpMessage;->setHeader(Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/apache/http/HttpMessage;->setHeader(Lorg/apache/http/Header;)V
+HSPLorg/apache/http/HttpMessage;->setHeaders([Lorg/apache/http/Header;)V
+HSPLorg/apache/http/HttpMessage;->setParams(Lorg/apache/http/params/HttpParams;)V
+HSPLorg/apache/http/HttpRequestInterceptor;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V
+HSPLorg/apache/http/HttpResponse;->getEntity()Lorg/apache/http/HttpEntity;
+HSPLorg/apache/http/HttpResponse;->getLocale()Ljava/util/Locale;
+HSPLorg/apache/http/HttpResponse;->getStatusLine()Lorg/apache/http/StatusLine;
+HSPLorg/apache/http/HttpResponse;->setEntity(Lorg/apache/http/HttpEntity;)V
+HSPLorg/apache/http/HttpResponse;->setLocale(Ljava/util/Locale;)V
+HSPLorg/apache/http/HttpResponse;->setReasonPhrase(Ljava/lang/String;)V
+HSPLorg/apache/http/HttpResponse;->setStatusCode(I)V
+HSPLorg/apache/http/HttpResponse;->setStatusLine(Lorg/apache/http/ProtocolVersion;I)V
+HSPLorg/apache/http/HttpResponse;->setStatusLine(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)V
+HSPLorg/apache/http/HttpResponse;->setStatusLine(Lorg/apache/http/StatusLine;)V
+HSPLorg/apache/http/HttpResponseFactory;->newHttpResponse(Lorg/apache/http/ProtocolVersion;ILorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;
+HSPLorg/apache/http/HttpResponseFactory;->newHttpResponse(Lorg/apache/http/StatusLine;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;
+HSPLorg/apache/http/HttpResponseInterceptor;->process(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V
+HSPLorg/apache/http/ProtocolVersion;-><init>(Ljava/lang/String;II)V
+HSPLorg/apache/http/ReasonPhraseCatalog;->getReason(ILjava/util/Locale;)Ljava/lang/String;
+HSPLorg/apache/http/StatusLine;->getProtocolVersion()Lorg/apache/http/ProtocolVersion;
+HSPLorg/apache/http/StatusLine;->getReasonPhrase()Ljava/lang/String;
+HSPLorg/apache/http/StatusLine;->getStatusCode()I
+HSPLorg/apache/http/client/CookieStore;->addCookie(Lorg/apache/http/cookie/Cookie;)V
+HSPLorg/apache/http/client/CookieStore;->clear()V
+HSPLorg/apache/http/client/CookieStore;->clearExpired(Ljava/util/Date;)Z
+HSPLorg/apache/http/client/CookieStore;->getCookies()Ljava/util/List;
+HSPLorg/apache/http/client/HttpClient;->execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;)Lorg/apache/http/HttpResponse;
+HSPLorg/apache/http/client/HttpClient;->execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler;)Ljava/lang/Object;
+HSPLorg/apache/http/client/HttpClient;->execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler;Lorg/apache/http/protocol/HttpContext;)Ljava/lang/Object;
+HSPLorg/apache/http/client/HttpClient;->execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;
+HSPLorg/apache/http/client/HttpClient;->execute(Lorg/apache/http/client/methods/HttpUriRequest;)Lorg/apache/http/HttpResponse;
+HSPLorg/apache/http/client/HttpClient;->execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler;)Ljava/lang/Object;
+HSPLorg/apache/http/client/HttpClient;->execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler;Lorg/apache/http/protocol/HttpContext;)Ljava/lang/Object;
+HSPLorg/apache/http/client/HttpClient;->execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;
+HSPLorg/apache/http/client/HttpClient;->getConnectionManager()Lorg/apache/http/conn/ClientConnectionManager;
+HSPLorg/apache/http/client/HttpClient;->getParams()Lorg/apache/http/params/HttpParams;
+HSPLorg/apache/http/client/params/HttpClientParams;->setRedirecting(Lorg/apache/http/params/HttpParams;Z)V
+HSPLorg/apache/http/conn/ClientConnectionManager;->closeExpiredConnections()V
+HSPLorg/apache/http/conn/ClientConnectionManager;->closeIdleConnections(JLjava/util/concurrent/TimeUnit;)V
+HSPLorg/apache/http/conn/ClientConnectionManager;->getSchemeRegistry()Lorg/apache/http/conn/scheme/SchemeRegistry;
+HSPLorg/apache/http/conn/ClientConnectionManager;->releaseConnection(Lorg/apache/http/conn/ManagedClientConnection;JLjava/util/concurrent/TimeUnit;)V
+HSPLorg/apache/http/conn/ClientConnectionManager;->requestConnection(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/conn/ClientConnectionRequest;
+HSPLorg/apache/http/conn/ClientConnectionManager;->shutdown()V
+HSPLorg/apache/http/conn/ClientConnectionOperator;->createConnection()Lorg/apache/http/conn/OperatedClientConnection;
+HSPLorg/apache/http/conn/ClientConnectionOperator;->openConnection(Lorg/apache/http/conn/OperatedClientConnection;Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V
+HSPLorg/apache/http/conn/ClientConnectionOperator;->updateSecureConnection(Lorg/apache/http/conn/OperatedClientConnection;Lorg/apache/http/HttpHost;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V
+HSPLorg/apache/http/conn/params/ConnManagerParamBean;-><init>(Lorg/apache/http/params/HttpParams;)V
+HSPLorg/apache/http/conn/params/ConnManagerParamBean;->setConnectionsPerRoute(Lorg/apache/http/conn/params/ConnPerRouteBean;)V
+HSPLorg/apache/http/conn/params/ConnManagerParamBean;->setMaxTotalConnections(I)V
+HSPLorg/apache/http/conn/params/ConnManagerParams$1;-><init>()V
+HSPLorg/apache/http/conn/params/ConnManagerParams;->getMaxConnectionsPerRoute(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/conn/params/ConnPerRoute;
+HSPLorg/apache/http/conn/params/ConnManagerParams;->getMaxTotalConnections(Lorg/apache/http/params/HttpParams;)I
+HSPLorg/apache/http/conn/params/ConnPerRoute;->getMaxForRoute(Lorg/apache/http/conn/routing/HttpRoute;)I
+HSPLorg/apache/http/conn/params/ConnPerRouteBean;-><init>(I)V
+HSPLorg/apache/http/conn/params/ConnPerRouteBean;->setDefaultMaxPerRoute(I)V
+HSPLorg/apache/http/conn/routing/RouteInfo;->getHopCount()I
+HSPLorg/apache/http/conn/routing/RouteInfo;->getHopTarget(I)Lorg/apache/http/HttpHost;
+HSPLorg/apache/http/conn/routing/RouteInfo;->getLayerType()Lorg/apache/http/conn/routing/RouteInfo$LayerType;
+HSPLorg/apache/http/conn/routing/RouteInfo;->getLocalAddress()Ljava/net/InetAddress;
+HSPLorg/apache/http/conn/routing/RouteInfo;->getProxyHost()Lorg/apache/http/HttpHost;
+HSPLorg/apache/http/conn/routing/RouteInfo;->getTargetHost()Lorg/apache/http/HttpHost;
+HSPLorg/apache/http/conn/routing/RouteInfo;->getTunnelType()Lorg/apache/http/conn/routing/RouteInfo$TunnelType;
+HSPLorg/apache/http/conn/routing/RouteInfo;->isLayered()Z
+HSPLorg/apache/http/conn/routing/RouteInfo;->isSecure()Z
+HSPLorg/apache/http/conn/routing/RouteInfo;->isTunnelled()Z
+HSPLorg/apache/http/conn/scheme/PlainSocketFactory;-><init>()V
+HSPLorg/apache/http/conn/scheme/PlainSocketFactory;-><init>(Lorg/apache/http/conn/scheme/HostNameResolver;)V
+HSPLorg/apache/http/conn/scheme/PlainSocketFactory;->getSocketFactory()Lorg/apache/http/conn/scheme/PlainSocketFactory;
+HSPLorg/apache/http/conn/scheme/Scheme;-><init>(Ljava/lang/String;Lorg/apache/http/conn/scheme/SocketFactory;I)V
+HSPLorg/apache/http/conn/scheme/Scheme;->getDefaultPort()I
+HSPLorg/apache/http/conn/scheme/Scheme;->getName()Ljava/lang/String;
+HSPLorg/apache/http/conn/scheme/Scheme;->getSocketFactory()Lorg/apache/http/conn/scheme/SocketFactory;
+HSPLorg/apache/http/conn/scheme/SchemeRegistry;-><init>()V
+HSPLorg/apache/http/conn/scheme/SchemeRegistry;->getSchemeNames()Ljava/util/List;
+HSPLorg/apache/http/conn/scheme/SchemeRegistry;->register(Lorg/apache/http/conn/scheme/Scheme;)Lorg/apache/http/conn/scheme/Scheme;
+HSPLorg/apache/http/conn/scheme/SchemeRegistry;->unregister(Ljava/lang/String;)Lorg/apache/http/conn/scheme/Scheme;
+HSPLorg/apache/http/conn/ssl/AbstractVerifier;-><init>()V
+HSPLorg/apache/http/conn/ssl/AllowAllHostnameVerifier;-><init>()V
+HSPLorg/apache/http/conn/ssl/BrowserCompatHostnameVerifier;-><init>()V
+HSPLorg/apache/http/conn/ssl/SSLSocketFactory;-><init>(Ljavax/net/ssl/SSLSocketFactory;)V
+HSPLorg/apache/http/conn/ssl/StrictHostnameVerifier;-><init>()V
+HSPLorg/apache/http/conn/ssl/X509HostnameVerifier;->verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)V
+HSPLorg/apache/http/conn/ssl/X509HostnameVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z
+HSPLorg/apache/http/conn/ssl/X509HostnameVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSocket;)V
+HSPLorg/apache/http/cookie/CookieIdentityComparator;-><init>()V
+HSPLorg/apache/http/entity/AbstractHttpEntity;-><init>()V
+HSPLorg/apache/http/entity/AbstractHttpEntity;->setContentEncoding(Ljava/lang/String;)V
+HSPLorg/apache/http/entity/AbstractHttpEntity;->setContentEncoding(Lorg/apache/http/Header;)V
+HSPLorg/apache/http/entity/AbstractHttpEntity;->setContentType(Ljava/lang/String;)V
+HSPLorg/apache/http/entity/AbstractHttpEntity;->setContentType(Lorg/apache/http/Header;)V
+HSPLorg/apache/http/entity/BasicHttpEntity;-><init>()V
+HSPLorg/apache/http/entity/BasicHttpEntity;->consumeContent()V
+HSPLorg/apache/http/entity/BasicHttpEntity;->getContent()Ljava/io/InputStream;
+HSPLorg/apache/http/entity/BasicHttpEntity;->getContentLength()J
+HSPLorg/apache/http/entity/BasicHttpEntity;->setContent(Ljava/io/InputStream;)V
+HSPLorg/apache/http/entity/BasicHttpEntity;->setContentLength(J)V
+HSPLorg/apache/http/impl/DefaultConnectionReuseStrategy;-><init>()V
+HSPLorg/apache/http/impl/DefaultHttpResponseFactory;-><init>()V
+HSPLorg/apache/http/impl/DefaultHttpResponseFactory;-><init>(Lorg/apache/http/ReasonPhraseCatalog;)V
+HSPLorg/apache/http/impl/EnglishReasonPhraseCatalog;-><init>()V
+HSPLorg/apache/http/impl/EnglishReasonPhraseCatalog;->setReason(ILjava/lang/String;)V
+HSPLorg/apache/http/impl/client/AbstractHttpClient;-><init>(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/params/HttpParams;)V
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createAuthSchemeRegistry()Lorg/apache/http/auth/AuthSchemeRegistry;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createClientConnectionManager()Lorg/apache/http/conn/ClientConnectionManager;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createConnectionKeepAliveStrategy()Lorg/apache/http/conn/ConnectionKeepAliveStrategy;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createConnectionReuseStrategy()Lorg/apache/http/ConnectionReuseStrategy;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createCookieSpecRegistry()Lorg/apache/http/cookie/CookieSpecRegistry;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createCookieStore()Lorg/apache/http/client/CookieStore;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createCredentialsProvider()Lorg/apache/http/client/CredentialsProvider;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createHttpParams()Lorg/apache/http/params/HttpParams;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createHttpRequestRetryHandler()Lorg/apache/http/client/HttpRequestRetryHandler;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createHttpRoutePlanner()Lorg/apache/http/conn/routing/HttpRoutePlanner;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createProxyAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createRedirectHandler()Lorg/apache/http/client/RedirectHandler;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createRequestExecutor()Lorg/apache/http/protocol/HttpRequestExecutor;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createTargetAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->createUserTokenHandler()Lorg/apache/http/client/UserTokenHandler;
+HSPLorg/apache/http/impl/client/AbstractHttpClient;->getConnectionManager()Lorg/apache/http/conn/ClientConnectionManager;
+HSPLorg/apache/http/impl/client/BasicCookieStore;-><init>()V
+HSPLorg/apache/http/impl/client/DefaultHttpClient;-><init>(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/params/HttpParams;)V
+HSPLorg/apache/http/impl/conn/DefaultClientConnectionOperator;-><init>(Lorg/apache/http/conn/scheme/SchemeRegistry;)V
+HSPLorg/apache/http/impl/conn/IdleConnectionHandler;-><init>()V
+HSPLorg/apache/http/impl/conn/tsccm/AbstractConnPool;-><init>()V
+HSPLorg/apache/http/impl/conn/tsccm/AbstractConnPool;->deleteClosedConnections()V
+HSPLorg/apache/http/impl/conn/tsccm/AbstractConnPool;->enableConnectionGC()V
+HSPLorg/apache/http/impl/conn/tsccm/AbstractConnPool;->freeEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;ZJLjava/util/concurrent/TimeUnit;)V
+HSPLorg/apache/http/impl/conn/tsccm/AbstractConnPool;->handleLostEntry(Lorg/apache/http/conn/routing/HttpRoute;)V
+HSPLorg/apache/http/impl/conn/tsccm/AbstractConnPool;->requestPoolEntry(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/PoolEntryRequest;
+HSPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;-><init>(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/params/HttpParams;)V
+HSPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->createFreeConnQueue()Ljava/util/Queue;
+HSPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->createRouteToPoolMap()Ljava/util/Map;
+HSPLorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;->createWaitingThreadQueue()Ljava/util/Queue;
+HSPLorg/apache/http/impl/conn/tsccm/RefQueueHandler;->handleReference(Ljava/lang/ref/Reference;)V
+HSPLorg/apache/http/impl/conn/tsccm/RefQueueWorker;-><init>(Ljava/lang/ref/ReferenceQueue;Lorg/apache/http/impl/conn/tsccm/RefQueueHandler;)V
+HSPLorg/apache/http/impl/conn/tsccm/RefQueueWorker;->run()V
+HSPLorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;-><init>(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/scheme/SchemeRegistry;)V
+HSPLorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;->createConnectionOperator(Lorg/apache/http/conn/scheme/SchemeRegistry;)Lorg/apache/http/conn/ClientConnectionOperator;
+HSPLorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;->createConnectionPool(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/impl/conn/tsccm/AbstractConnPool;
+HSPLorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;->getSchemeRegistry()Lorg/apache/http/conn/scheme/SchemeRegistry;
+HSPLorg/apache/http/impl/cookie/DateUtils$DateFormatHolder$1;-><init>()V
+HSPLorg/apache/http/impl/cookie/DateUtils$DateFormatHolder$1;->initialValue()Ljava/lang/Object;
+HSPLorg/apache/http/impl/cookie/DateUtils$DateFormatHolder$1;->initialValue()Ljava/lang/ref/SoftReference;
+HSPLorg/apache/http/impl/cookie/DateUtils$DateFormatHolder;->formatFor(Ljava/lang/String;)Ljava/text/SimpleDateFormat;
+HSPLorg/apache/http/impl/cookie/DateUtils;->parseDate(Ljava/lang/String;)Ljava/util/Date;
+HSPLorg/apache/http/impl/cookie/DateUtils;->parseDate(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Date;)Ljava/util/Date;
+HSPLorg/apache/http/message/AbstractHttpMessage;-><init>()V
+HSPLorg/apache/http/message/AbstractHttpMessage;-><init>(Lorg/apache/http/params/HttpParams;)V
+HSPLorg/apache/http/message/AbstractHttpMessage;->addHeader(Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/apache/http/message/AbstractHttpMessage;->getAllHeaders()[Lorg/apache/http/Header;
+HSPLorg/apache/http/message/BasicHeader;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/apache/http/message/BasicHeader;->getName()Ljava/lang/String;
+HSPLorg/apache/http/message/BasicHeader;->getValue()Ljava/lang/String;
+HSPLorg/apache/http/message/BasicHttpResponse;-><init>(Lorg/apache/http/StatusLine;)V
+HSPLorg/apache/http/message/BasicHttpResponse;-><init>(Lorg/apache/http/StatusLine;Lorg/apache/http/ReasonPhraseCatalog;Ljava/util/Locale;)V
+HSPLorg/apache/http/message/BasicHttpResponse;->getEntity()Lorg/apache/http/HttpEntity;
+HSPLorg/apache/http/message/BasicHttpResponse;->getStatusLine()Lorg/apache/http/StatusLine;
+HSPLorg/apache/http/message/BasicHttpResponse;->setEntity(Lorg/apache/http/HttpEntity;)V
+HSPLorg/apache/http/message/BasicStatusLine;-><init>(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)V
+HSPLorg/apache/http/message/BasicStatusLine;->getStatusCode()I
+HSPLorg/apache/http/message/HeaderGroup;-><init>()V
+HSPLorg/apache/http/message/HeaderGroup;->addHeader(Lorg/apache/http/Header;)V
+HSPLorg/apache/http/message/HeaderGroup;->getAllHeaders()[Lorg/apache/http/Header;
+HSPLorg/apache/http/params/AbstractHttpParams;-><init>()V
+HSPLorg/apache/http/params/AbstractHttpParams;->getIntParameter(Ljava/lang/String;I)I
+HSPLorg/apache/http/params/AbstractHttpParams;->setBooleanParameter(Ljava/lang/String;Z)Lorg/apache/http/params/HttpParams;
+HSPLorg/apache/http/params/AbstractHttpParams;->setIntParameter(Ljava/lang/String;I)Lorg/apache/http/params/HttpParams;
+HSPLorg/apache/http/params/BasicHttpParams;-><init>()V
+HSPLorg/apache/http/params/BasicHttpParams;->getParameter(Ljava/lang/String;)Ljava/lang/Object;
+HSPLorg/apache/http/params/BasicHttpParams;->setParameter(Ljava/lang/String;Ljava/lang/Object;)Lorg/apache/http/params/HttpParams;
+HSPLorg/apache/http/params/HttpAbstractParamBean;-><init>(Lorg/apache/http/params/HttpParams;)V
+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/apache/http/params/HttpParams;->copy()Lorg/apache/http/params/HttpParams;
+HSPLorg/apache/http/params/HttpParams;->getBooleanParameter(Ljava/lang/String;Z)Z
+HSPLorg/apache/http/params/HttpParams;->getDoubleParameter(Ljava/lang/String;D)D
+HSPLorg/apache/http/params/HttpParams;->getIntParameter(Ljava/lang/String;I)I
+HSPLorg/apache/http/params/HttpParams;->getLongParameter(Ljava/lang/String;J)J
+HSPLorg/apache/http/params/HttpParams;->getParameter(Ljava/lang/String;)Ljava/lang/Object;
+HSPLorg/apache/http/params/HttpParams;->isParameterFalse(Ljava/lang/String;)Z
+HSPLorg/apache/http/params/HttpParams;->isParameterTrue(Ljava/lang/String;)Z
+HSPLorg/apache/http/params/HttpParams;->removeParameter(Ljava/lang/String;)Z
+HSPLorg/apache/http/params/HttpParams;->setBooleanParameter(Ljava/lang/String;Z)Lorg/apache/http/params/HttpParams;
+HSPLorg/apache/http/params/HttpParams;->setDoubleParameter(Ljava/lang/String;D)Lorg/apache/http/params/HttpParams;
+HSPLorg/apache/http/params/HttpParams;->setIntParameter(Ljava/lang/String;I)Lorg/apache/http/params/HttpParams;
+HSPLorg/apache/http/params/HttpParams;->setLongParameter(Ljava/lang/String;J)Lorg/apache/http/params/HttpParams;
+HSPLorg/apache/http/params/HttpParams;->setParameter(Ljava/lang/String;Ljava/lang/Object;)Lorg/apache/http/params/HttpParams;
+HSPLorg/apache/http/params/HttpProtocolParams;->setUserAgent(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V
+HSPLorg/apache/http/protocol/BasicHttpProcessor;-><init>()V
+HSPLorg/apache/http/protocol/BasicHttpProcessor;->addInterceptor(Lorg/apache/http/HttpRequestInterceptor;)V
+HSPLorg/apache/http/protocol/BasicHttpProcessor;->addInterceptor(Lorg/apache/http/HttpResponseInterceptor;)V
+HSPLorg/apache/http/protocol/BasicHttpProcessor;->addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;)V
+HSPLorg/apache/http/protocol/BasicHttpProcessor;->addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;)V
+HSPLorg/apache/http/protocol/HttpRequestHandler;->handle(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V
+HSPLorg/apache/http/protocol/HttpRequestHandlerRegistry;-><init>()V
+HSPLorg/apache/http/protocol/HttpRequestHandlerRegistry;->register(Ljava/lang/String;Lorg/apache/http/protocol/HttpRequestHandler;)V
+HSPLorg/apache/http/protocol/HttpRequestHandlerResolver;->lookup(Ljava/lang/String;)Lorg/apache/http/protocol/HttpRequestHandler;
+HSPLorg/apache/http/protocol/HttpRequestInterceptorList;->addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;)V
+HSPLorg/apache/http/protocol/HttpRequestInterceptorList;->addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;I)V
+HSPLorg/apache/http/protocol/HttpRequestInterceptorList;->clearRequestInterceptors()V
+HSPLorg/apache/http/protocol/HttpRequestInterceptorList;->getRequestInterceptor(I)Lorg/apache/http/HttpRequestInterceptor;
+HSPLorg/apache/http/protocol/HttpRequestInterceptorList;->getRequestInterceptorCount()I
+HSPLorg/apache/http/protocol/HttpRequestInterceptorList;->removeRequestInterceptorByClass(Ljava/lang/Class;)V
+HSPLorg/apache/http/protocol/HttpRequestInterceptorList;->setInterceptors(Ljava/util/List;)V
+HSPLorg/apache/http/protocol/HttpResponseInterceptorList;->addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;)V
+HSPLorg/apache/http/protocol/HttpResponseInterceptorList;->addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;I)V
+HSPLorg/apache/http/protocol/HttpResponseInterceptorList;->clearResponseInterceptors()V
+HSPLorg/apache/http/protocol/HttpResponseInterceptorList;->getResponseInterceptor(I)Lorg/apache/http/HttpResponseInterceptor;
+HSPLorg/apache/http/protocol/HttpResponseInterceptorList;->getResponseInterceptorCount()I
+HSPLorg/apache/http/protocol/HttpResponseInterceptorList;->removeResponseInterceptorByClass(Ljava/lang/Class;)V
+HSPLorg/apache/http/protocol/HttpResponseInterceptorList;->setInterceptors(Ljava/util/List;)V
+HSPLorg/apache/http/protocol/HttpService;-><init>(Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/HttpResponseFactory;)V
+HSPLorg/apache/http/protocol/HttpService;->setConnReuseStrategy(Lorg/apache/http/ConnectionReuseStrategy;)V
+HSPLorg/apache/http/protocol/HttpService;->setHandlerResolver(Lorg/apache/http/protocol/HttpRequestHandlerResolver;)V
+HSPLorg/apache/http/protocol/HttpService;->setHttpProcessor(Lorg/apache/http/protocol/HttpProcessor;)V
+HSPLorg/apache/http/protocol/HttpService;->setParams(Lorg/apache/http/params/HttpParams;)V
+HSPLorg/apache/http/protocol/HttpService;->setResponseFactory(Lorg/apache/http/HttpResponseFactory;)V
+HSPLorg/apache/http/protocol/ResponseConnControl;-><init>()V
+HSPLorg/apache/http/protocol/ResponseContent;-><init>()V
+HSPLorg/apache/http/protocol/UriPatternMatcher;-><init>()V
+HSPLorg/apache/http/protocol/UriPatternMatcher;->register(Ljava/lang/String;Ljava/lang/Object;)V
+HSPLorg/json/JSON;->checkDouble(D)D
+HSPLorg/json/JSON;->toBoolean(Ljava/lang/Object;)Ljava/lang/Boolean;
+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/String;)V
+HSPLorg/json/JSONArray;-><init>(Lorg/json/JSONTokener;)V
+HSPLorg/json/JSONArray;->get(I)Ljava/lang/Object;
+HSPLorg/json/JSONArray;->getJSONObject(I)Lorg/json/JSONObject;
+HSPLorg/json/JSONArray;->getString(I)Ljava/lang/String;
+HSPLorg/json/JSONArray;->length()I
+HSPLorg/json/JSONArray;->put(Ljava/lang/Object;)Lorg/json/JSONArray;
+HSPLorg/json/JSONArray;->toString()Ljava/lang/String;
+HSPLorg/json/JSONArray;->writeTo(Lorg/json/JSONStringer;)V
+HSPLorg/json/JSONException;-><init>(Ljava/lang/String;)V
+HSPLorg/json/JSONObject$1;-><init>()V
+HSPLorg/json/JSONObject;-><init>()V
+HSPLorg/json/JSONObject;-><init>(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;->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;
+HSPLorg/json/JSONObject;->getLong(Ljava/lang/String;)J
+HSPLorg/json/JSONObject;->getString(Ljava/lang/String;)Ljava/lang/String;
+HSPLorg/json/JSONObject;->has(Ljava/lang/String;)Z
+HSPLorg/json/JSONObject;->keys()Ljava/util/Iterator;
+HSPLorg/json/JSONObject;->length()I
+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)Z
+HSPLorg/json/JSONObject;->optInt(Ljava/lang/String;)I
+HSPLorg/json/JSONObject;->optInt(Ljava/lang/String;I)I
+HSPLorg/json/JSONObject;->optJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;
+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;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;
+HSPLorg/json/JSONObject;->toString()Ljava/lang/String;
+HSPLorg/json/JSONObject;->writeTo(Lorg/json/JSONStringer;)V
+HSPLorg/json/JSONStringer$Scope;-><init>(Ljava/lang/String;I)V
+HSPLorg/json/JSONStringer;-><init>()V
+HSPLorg/json/JSONStringer;->array()Lorg/json/JSONStringer;
+HSPLorg/json/JSONStringer;->beforeKey()V
+HSPLorg/json/JSONStringer;->beforeValue()V
+HSPLorg/json/JSONStringer;->close(Lorg/json/JSONStringer$Scope;Lorg/json/JSONStringer$Scope;Ljava/lang/String;)Lorg/json/JSONStringer;
+HSPLorg/json/JSONStringer;->endArray()Lorg/json/JSONStringer;
+HSPLorg/json/JSONStringer;->endObject()Lorg/json/JSONStringer;
+HSPLorg/json/JSONStringer;->key(Ljava/lang/String;)Lorg/json/JSONStringer;
+HSPLorg/json/JSONStringer;->newline()V
+HSPLorg/json/JSONStringer;->object()Lorg/json/JSONStringer;
+HSPLorg/json/JSONStringer;->open(Lorg/json/JSONStringer$Scope;Ljava/lang/String;)Lorg/json/JSONStringer;
+HSPLorg/json/JSONStringer;->peek()Lorg/json/JSONStringer$Scope;
+HSPLorg/json/JSONStringer;->replaceTop(Lorg/json/JSONStringer$Scope;)V
+HSPLorg/json/JSONStringer;->string(Ljava/lang/String;)V
+HSPLorg/json/JSONStringer;->toString()Ljava/lang/String;
+HSPLorg/json/JSONStringer;->value(Ljava/lang/Object;)Lorg/json/JSONStringer;
+HSPLorg/json/JSONTokener;-><init>(Ljava/lang/String;)V
+HSPLorg/json/JSONTokener;->nextCleanInternal()I
+HSPLorg/json/JSONTokener;->nextString(C)Ljava/lang/String;
+HSPLorg/json/JSONTokener;->nextToInternal(Ljava/lang/String;)Ljava/lang/String;
+HSPLorg/json/JSONTokener;->nextValue()Ljava/lang/Object;
+HSPLorg/json/JSONTokener;->readArray()Lorg/json/JSONArray;
+HSPLorg/json/JSONTokener;->readEscapeCharacter()C
+HSPLorg/json/JSONTokener;->readLiteral()Ljava/lang/Object;
+HSPLorg/json/JSONTokener;->readObject()Lorg/json/JSONObject;
+HSPLorg/json/JSONTokener;->skipToEndOfLine()V
+HSPLorg/kxml2/io/KXmlParser;-><init>()V
+HSPLorg/kxml2/io/KXmlParser;->adjustNsp()Z
+HSPLorg/kxml2/io/KXmlParser;->ensureCapacity([Ljava/lang/String;I)[Ljava/lang/String;
+HSPLorg/kxml2/io/KXmlParser;->fillBuffer(I)Z
+HSPLorg/kxml2/io/KXmlParser;->getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLorg/kxml2/io/KXmlParser;->getDepth()I
+HSPLorg/kxml2/io/KXmlParser;->getEventType()I
+HSPLorg/kxml2/io/KXmlParser;->getName()Ljava/lang/String;
+HSPLorg/kxml2/io/KXmlParser;->getNamespace(Ljava/lang/String;)Ljava/lang/String;
+HSPLorg/kxml2/io/KXmlParser;->getNamespaceCount(I)I
+HSPLorg/kxml2/io/KXmlParser;->getText()Ljava/lang/String;
+HSPLorg/kxml2/io/KXmlParser;->next()I
+HSPLorg/kxml2/io/KXmlParser;->next(Z)I
+HSPLorg/kxml2/io/KXmlParser;->nextTag()I
+HSPLorg/kxml2/io/KXmlParser;->nextText()Ljava/lang/String;
+HSPLorg/kxml2/io/KXmlParser;->parseStartTag(ZZ)V
+HSPLorg/kxml2/io/KXmlParser;->peekCharacter()I
+HSPLorg/kxml2/io/KXmlParser;->peekType(Z)I
+HSPLorg/kxml2/io/KXmlParser;->read(C)V
+HSPLorg/kxml2/io/KXmlParser;->read([C)V
+HSPLorg/kxml2/io/KXmlParser;->readComment(Z)Ljava/lang/String;
+HSPLorg/kxml2/io/KXmlParser;->readEndTag()V
+HSPLorg/kxml2/io/KXmlParser;->readEntity(Ljava/lang/StringBuilder;ZZLorg/kxml2/io/KXmlParser$ValueContext;)V
+HSPLorg/kxml2/io/KXmlParser;->readName()Ljava/lang/String;
+HSPLorg/kxml2/io/KXmlParser;->readUntil([CZ)Ljava/lang/String;
+HSPLorg/kxml2/io/KXmlParser;->readValue(CZZLorg/kxml2/io/KXmlParser$ValueContext;)Ljava/lang/String;
+HSPLorg/kxml2/io/KXmlParser;->readXmlDeclaration()V
+HSPLorg/kxml2/io/KXmlParser;->require(ILjava/lang/String;Ljava/lang/String;)V
+HSPLorg/kxml2/io/KXmlParser;->setFeature(Ljava/lang/String;Z)V
+HSPLorg/kxml2/io/KXmlParser;->setInput(Ljava/io/InputStream;Ljava/lang/String;)V
+HSPLorg/kxml2/io/KXmlParser;->setInput(Ljava/io/Reader;)V
+HSPLorg/kxml2/io/KXmlParser;->skip()V
+HSPLorg/xml/sax/Attributes;->getIndex(Ljava/lang/String;)I
+HSPLorg/xml/sax/Attributes;->getIndex(Ljava/lang/String;Ljava/lang/String;)I
+HSPLorg/xml/sax/Attributes;->getLength()I
+HSPLorg/xml/sax/Attributes;->getLocalName(I)Ljava/lang/String;
+HSPLorg/xml/sax/Attributes;->getQName(I)Ljava/lang/String;
+HSPLorg/xml/sax/Attributes;->getType(I)Ljava/lang/String;
+HSPLorg/xml/sax/Attributes;->getType(Ljava/lang/String;)Ljava/lang/String;
+HSPLorg/xml/sax/Attributes;->getType(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLorg/xml/sax/Attributes;->getURI(I)Ljava/lang/String;
+HSPLorg/xml/sax/Attributes;->getValue(I)Ljava/lang/String;
+HSPLorg/xml/sax/Attributes;->getValue(Ljava/lang/String;)Ljava/lang/String;
+HSPLorg/xml/sax/Attributes;->getValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLorg/xml/sax/ContentHandler;->endPrefixMapping(Ljava/lang/String;)V
+HSPLorg/xml/sax/ContentHandler;->ignorableWhitespace([CII)V
+HSPLorg/xml/sax/ContentHandler;->processingInstruction(Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/xml/sax/ContentHandler;->setDocumentLocator(Lorg/xml/sax/Locator;)V
+HSPLorg/xml/sax/ContentHandler;->skippedEntity(Ljava/lang/String;)V
+HSPLorg/xml/sax/ContentHandler;->startPrefixMapping(Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/xml/sax/DTDHandler;->notationDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/xml/sax/DTDHandler;->unparsedEntityDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/xml/sax/ErrorHandler;->error(Lorg/xml/sax/SAXParseException;)V
+HSPLorg/xml/sax/ErrorHandler;->fatalError(Lorg/xml/sax/SAXParseException;)V
+HSPLorg/xml/sax/ErrorHandler;->warning(Lorg/xml/sax/SAXParseException;)V
+HSPLorg/xml/sax/InputSource;-><init>(Ljava/io/InputStream;)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/Locator;->getColumnNumber()I
+HSPLorg/xml/sax/Locator;->getLineNumber()I
+HSPLorg/xml/sax/Locator;->getPublicId()Ljava/lang/String;
+HSPLorg/xml/sax/Locator;->getSystemId()Ljava/lang/String;
+HSPLorg/xml/sax/XMLReader;->getContentHandler()Lorg/xml/sax/ContentHandler;
+HSPLorg/xml/sax/XMLReader;->getDTDHandler()Lorg/xml/sax/DTDHandler;
+HSPLorg/xml/sax/XMLReader;->getEntityResolver()Lorg/xml/sax/EntityResolver;
+HSPLorg/xml/sax/XMLReader;->getErrorHandler()Lorg/xml/sax/ErrorHandler;
+HSPLorg/xml/sax/XMLReader;->getFeature(Ljava/lang/String;)Z
+HSPLorg/xml/sax/XMLReader;->getProperty(Ljava/lang/String;)Ljava/lang/Object;
+HSPLorg/xml/sax/XMLReader;->parse(Ljava/lang/String;)V
+HSPLorg/xml/sax/XMLReader;->parse(Lorg/xml/sax/InputSource;)V
+HSPLorg/xml/sax/XMLReader;->setContentHandler(Lorg/xml/sax/ContentHandler;)V
+HSPLorg/xml/sax/XMLReader;->setDTDHandler(Lorg/xml/sax/DTDHandler;)V
+HSPLorg/xml/sax/XMLReader;->setEntityResolver(Lorg/xml/sax/EntityResolver;)V
+HSPLorg/xml/sax/XMLReader;->setErrorHandler(Lorg/xml/sax/ErrorHandler;)V
+HSPLorg/xml/sax/XMLReader;->setFeature(Ljava/lang/String;Z)V
+HSPLorg/xml/sax/XMLReader;->setProperty(Ljava/lang/String;Ljava/lang/Object;)V
+HSPLorg/xml/sax/ext/DeclHandler;->attributeDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/xml/sax/ext/DeclHandler;->elementDecl(Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/xml/sax/ext/DeclHandler;->externalEntityDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/xml/sax/ext/DeclHandler;->internalEntityDecl(Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/xml/sax/ext/DefaultHandler2;-><init>()V
+HSPLorg/xml/sax/ext/EntityResolver2;->getExternalSubset(Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;
+HSPLorg/xml/sax/ext/EntityResolver2;->resolveEntity(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;
+HSPLorg/xml/sax/ext/LexicalHandler;->endCDATA()V
+HSPLorg/xml/sax/ext/LexicalHandler;->endDTD()V
+HSPLorg/xml/sax/ext/LexicalHandler;->endEntity(Ljava/lang/String;)V
+HSPLorg/xml/sax/ext/LexicalHandler;->startCDATA()V
+HSPLorg/xml/sax/ext/LexicalHandler;->startDTD(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/xml/sax/ext/LexicalHandler;->startEntity(Ljava/lang/String;)V
+HSPLorg/xml/sax/helpers/DefaultHandler;-><init>()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/XmlSerializer;->attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HSPLorg/xmlpull/v1/XmlSerializer;->cdsect(Ljava/lang/String;)V
+HSPLorg/xmlpull/v1/XmlSerializer;->comment(Ljava/lang/String;)V
+HSPLorg/xmlpull/v1/XmlSerializer;->docdecl(Ljava/lang/String;)V
+HSPLorg/xmlpull/v1/XmlSerializer;->endDocument()V
+HSPLorg/xmlpull/v1/XmlSerializer;->endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HSPLorg/xmlpull/v1/XmlSerializer;->entityRef(Ljava/lang/String;)V
+HSPLorg/xmlpull/v1/XmlSerializer;->flush()V
+HSPLorg/xmlpull/v1/XmlSerializer;->getDepth()I
+HSPLorg/xmlpull/v1/XmlSerializer;->getFeature(Ljava/lang/String;)Z
+HSPLorg/xmlpull/v1/XmlSerializer;->getName()Ljava/lang/String;
+HSPLorg/xmlpull/v1/XmlSerializer;->getNamespace()Ljava/lang/String;
+HSPLorg/xmlpull/v1/XmlSerializer;->getPrefix(Ljava/lang/String;Z)Ljava/lang/String;
+HSPLorg/xmlpull/v1/XmlSerializer;->getProperty(Ljava/lang/String;)Ljava/lang/Object;
+HSPLorg/xmlpull/v1/XmlSerializer;->ignorableWhitespace(Ljava/lang/String;)V
+HSPLorg/xmlpull/v1/XmlSerializer;->processingInstruction(Ljava/lang/String;)V
+HSPLorg/xmlpull/v1/XmlSerializer;->setFeature(Ljava/lang/String;Z)V
+HSPLorg/xmlpull/v1/XmlSerializer;->setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V
+HSPLorg/xmlpull/v1/XmlSerializer;->setOutput(Ljava/io/Writer;)V
+HSPLorg/xmlpull/v1/XmlSerializer;->setPrefix(Ljava/lang/String;Ljava/lang/String;)V
+HSPLorg/xmlpull/v1/XmlSerializer;->setProperty(Ljava/lang/String;Ljava/lang/Object;)V
+HSPLorg/xmlpull/v1/XmlSerializer;->startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V
+HSPLorg/xmlpull/v1/XmlSerializer;->startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HSPLorg/xmlpull/v1/XmlSerializer;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HSPLorg/xmlpull/v1/XmlSerializer;->text([CII)Lorg/xmlpull/v1/XmlSerializer;
+HSPLsun/misc/ASCIICaseInsensitiveComparator;-><init>()V
+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
+HSPLsun/misc/ASCIICaseInsensitiveComparator;->lowerCaseHashCode(Ljava/lang/String;)I
+HSPLsun/misc/ASCIICaseInsensitiveComparator;->toLower(I)I
+HSPLsun/misc/Cleaner;-><init>(Ljava/lang/Object;Ljava/lang/Runnable;)V
+HSPLsun/misc/Cleaner;->add(Lsun/misc/Cleaner;)Lsun/misc/Cleaner;
+HSPLsun/misc/Cleaner;->clean()V
+HSPLsun/misc/Cleaner;->create(Ljava/lang/Object;Ljava/lang/Runnable;)Lsun/misc/Cleaner;
+HSPLsun/misc/Cleaner;->remove(Lsun/misc/Cleaner;)Z
+HSPLsun/misc/FDBigInteger;-><init>(J[CII)V
+HSPLsun/misc/FDBigInteger;-><init>([II)V
+HSPLsun/misc/FDBigInteger;->big5pow(I)Lsun/misc/FDBigInteger;
+HSPLsun/misc/FDBigInteger;->cmp(Lsun/misc/FDBigInteger;)I
+HSPLsun/misc/FDBigInteger;->cmpPow52(II)I
+HSPLsun/misc/FDBigInteger;->leftInplaceSub(Lsun/misc/FDBigInteger;)Lsun/misc/FDBigInteger;
+HSPLsun/misc/FDBigInteger;->leftShift(I)Lsun/misc/FDBigInteger;
+HSPLsun/misc/FDBigInteger;->leftShift([II[IIII)V
+HSPLsun/misc/FDBigInteger;->makeImmutable()V
+HSPLsun/misc/FDBigInteger;->mult([III[I)V
+HSPLsun/misc/FDBigInteger;->multAddMe(II)V
+HSPLsun/misc/FDBigInteger;->multByPow52(II)Lsun/misc/FDBigInteger;
+HSPLsun/misc/FDBigInteger;->rightInplaceSub(Lsun/misc/FDBigInteger;)Lsun/misc/FDBigInteger;
+HSPLsun/misc/FDBigInteger;->trimLeadingZeros()V
+HSPLsun/misc/FDBigInteger;->valueOfMulPow52(JII)Lsun/misc/FDBigInteger;
+HSPLsun/misc/FloatingDecimal$1;->initialValue()Ljava/lang/Object;
+HSPLsun/misc/FloatingDecimal$1;->initialValue()Lsun/misc/FloatingDecimal$BinaryToASCIIBuffer;
+HSPLsun/misc/FloatingDecimal$ASCIIToBinaryBuffer;-><init>(ZI[CI)V
+HSPLsun/misc/FloatingDecimal$ASCIIToBinaryBuffer;->doubleValue()D
+HSPLsun/misc/FloatingDecimal$ASCIIToBinaryBuffer;->floatValue()F
+HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->-wrap0(Lsun/misc/FloatingDecimal$BinaryToASCIIBuffer;IJIZ)V
+HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->-wrap1(Lsun/misc/FloatingDecimal$BinaryToASCIIBuffer;Z)V
+HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;-><init>()V
+HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->appendTo(Ljava/lang/Appendable;)V
+HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->developLongDigits(IJI)V
+HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->dtoa(IJIZ)V
+HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->estimateDecExp(JI)I
+HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->getChars([C)I
+HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->getDecimalExponent()I
+HSPLsun/misc/FloatingDecimal$BinaryToASCIIBuffer;->getDigits([C)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;
+HSPLsun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer;->doubleValue()D
+HSPLsun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer;->floatValue()F
+HSPLsun/misc/FloatingDecimal;->appendTo(DLjava/lang/Appendable;)V
+HSPLsun/misc/FloatingDecimal;->appendTo(FLjava/lang/Appendable;)V
+HSPLsun/misc/FloatingDecimal;->getBinaryToASCIIBuffer()Lsun/misc/FloatingDecimal$BinaryToASCIIBuffer;
+HSPLsun/misc/FloatingDecimal;->getBinaryToASCIIConverter(D)Lsun/misc/FloatingDecimal$BinaryToASCIIConverter;
+HSPLsun/misc/FloatingDecimal;->getBinaryToASCIIConverter(DZ)Lsun/misc/FloatingDecimal$BinaryToASCIIConverter;
+HSPLsun/misc/FloatingDecimal;->getBinaryToASCIIConverter(F)Lsun/misc/FloatingDecimal$BinaryToASCIIConverter;
+HSPLsun/misc/FloatingDecimal;->parseDouble(Ljava/lang/String;)D
+HSPLsun/misc/FloatingDecimal;->parseFloat(Ljava/lang/String;)F
+HSPLsun/misc/FloatingDecimal;->readJavaFormatString(Ljava/lang/String;)Lsun/misc/FloatingDecimal$ASCIIToBinaryConverter;
+HSPLsun/misc/FloatingDecimal;->toJavaFormatString(D)Ljava/lang/String;
+HSPLsun/misc/FloatingDecimal;->toJavaFormatString(F)Ljava/lang/String;
+HSPLsun/misc/FormattedFloatingDecimal$1;-><init>()V
+HSPLsun/misc/FormattedFloatingDecimal$1;->initialValue()Ljava/lang/Object;
+HSPLsun/misc/FormattedFloatingDecimal$Form;-><init>(Ljava/lang/String;I)V
+HSPLsun/misc/FormattedFloatingDecimal$Form;->values()[Lsun/misc/FormattedFloatingDecimal$Form;
+HSPLsun/misc/FormattedFloatingDecimal;->-getsun-misc-FormattedFloatingDecimal$FormSwitchesValues()[I
+HSPLsun/misc/FormattedFloatingDecimal;-><init>(ILsun/misc/FormattedFloatingDecimal$Form;Lsun/misc/FloatingDecimal$BinaryToASCIIConverter;)V
+HSPLsun/misc/FormattedFloatingDecimal;->applyPrecision(I[CII)I
+HSPLsun/misc/FormattedFloatingDecimal;->create(ZI)[C
+HSPLsun/misc/FormattedFloatingDecimal;->fillDecimal(I[CIIZ)V
+HSPLsun/misc/FormattedFloatingDecimal;->getBuffer()[C
+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
+HSPLsun/misc/JavaIOFileDescriptorAccess;->get(Ljava/io/FileDescriptor;)I
+HSPLsun/misc/JavaIOFileDescriptorAccess;->getHandle(Ljava/io/FileDescriptor;)J
+HSPLsun/misc/JavaIOFileDescriptorAccess;->set(Ljava/io/FileDescriptor;I)V
+HSPLsun/misc/JavaIOFileDescriptorAccess;->setHandle(Ljava/io/FileDescriptor;J)V
+HSPLsun/misc/SharedSecrets;->getJavaIOFileDescriptorAccess()Lsun/misc/JavaIOFileDescriptorAccess;
+HSPLsun/misc/Unsafe;->arrayBaseOffset(Ljava/lang/Class;)I
+HSPLsun/misc/Unsafe;->arrayIndexScale(Ljava/lang/Class;)I
+HSPLsun/misc/Unsafe;->getAndAddInt(Ljava/lang/Object;JI)I
+HSPLsun/misc/Unsafe;->getAndAddLong(Ljava/lang/Object;JJ)J
+HSPLsun/misc/Unsafe;->getAndSetInt(Ljava/lang/Object;JI)I
+HSPLsun/misc/Unsafe;->getAndSetObject(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;
+HSPLsun/misc/Unsafe;->getUnsafe()Lsun/misc/Unsafe;
+HSPLsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J
+HSPLsun/misc/Unsafe;->park(ZJ)V
+HSPLsun/misc/Unsafe;->unpark(Ljava/lang/Object;)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$1;-><init>()V
+HSPLsun/net/NetProperties$1;->run()Ljava/lang/Object;
+HSPLsun/net/NetProperties$1;->run()Ljava/lang/Void;
+HSPLsun/net/NetProperties;->-wrap0()V
+HSPLsun/net/NetProperties;->get(Ljava/lang/String;)Ljava/lang/String;
+HSPLsun/net/NetProperties;->loadDefaultProperties()V
+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;
+HSPLsun/net/spi/DefaultProxySelector$NonProxyInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/regex/Pattern;Ljava/lang/String;)V
+HSPLsun/net/spi/DefaultProxySelector;-><init>()V
+HSPLsun/net/spi/DefaultProxySelector;->select(Ljava/net/URI;)Ljava/util/List;
+HSPLsun/net/spi/nameservice/NameService;->getHostByAddr([B)Ljava/lang/String;
+HSPLsun/net/spi/nameservice/NameService;->lookupAllHostAddr(Ljava/lang/String;I)[Ljava/net/InetAddress;
+HSPLsun/net/util/IPAddressUtil;->convertFromIPv4MappedAddress([B)[B
+HSPLsun/net/util/IPAddressUtil;->isIPv4MappedAddress([B)Z
+HSPLsun/net/www/ParseUtil;->decode(Ljava/lang/String;)Ljava/lang/String;
+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/FileChannelImpl$Unmapper;-><init>(JJILjava/io/FileDescriptor;)V
+HSPLsun/nio/ch/FileChannelImpl$Unmapper;-><init>(JJILjava/io/FileDescriptor;Lsun/nio/ch/FileChannelImpl$Unmapper;)V
+HSPLsun/nio/ch/FileChannelImpl;-><init>(Ljava/io/FileDescriptor;Ljava/lang/String;ZZZLjava/lang/Object;)V
+HSPLsun/nio/ch/FileChannelImpl;->ensureOpen()V
+HSPLsun/nio/ch/FileChannelImpl;->fileLockTable()Lsun/nio/ch/FileLockTable;
+HSPLsun/nio/ch/FileChannelImpl;->finalize()V
+HSPLsun/nio/ch/FileChannelImpl;->implCloseChannel()V
+HSPLsun/nio/ch/FileChannelImpl;->isSharedFileLockTable()Z
+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;
+HSPLsun/nio/ch/FileChannelImpl;->open(Ljava/io/FileDescriptor;Ljava/lang/String;ZZZLjava/lang/Object;)Ljava/nio/channels/FileChannel;
+HSPLsun/nio/ch/FileChannelImpl;->position()J
+HSPLsun/nio/ch/FileChannelImpl;->release(Lsun/nio/ch/FileLockImpl;)V
+HSPLsun/nio/ch/FileChannelImpl;->size()J
+HSPLsun/nio/ch/FileChannelImpl;->tryLock(JJZ)Ljava/nio/channels/FileLock;
+HSPLsun/nio/ch/FileDispatcher;-><init>()V
+HSPLsun/nio/ch/FileDispatcher;->canTransferToDirectly(Ljava/nio/channels/SelectableChannel;)Z
+HSPLsun/nio/ch/FileDispatcher;->duplicateForMapping(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;
+HSPLsun/nio/ch/FileDispatcher;->force(Ljava/io/FileDescriptor;Z)I
+HSPLsun/nio/ch/FileDispatcher;->lock(Ljava/io/FileDescriptor;ZJJZ)I
+HSPLsun/nio/ch/FileDispatcher;->release(Ljava/io/FileDescriptor;JJ)V
+HSPLsun/nio/ch/FileDispatcher;->size(Ljava/io/FileDescriptor;)J
+HSPLsun/nio/ch/FileDispatcher;->transferToDirectlyNeedsPositionLock()Z
+HSPLsun/nio/ch/FileDispatcher;->truncate(Ljava/io/FileDescriptor;J)I
+HSPLsun/nio/ch/FileDispatcherImpl;-><init>(Z)V
+HSPLsun/nio/ch/FileDispatcherImpl;->duplicateForMapping(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;
+HSPLsun/nio/ch/FileDispatcherImpl;->lock(Ljava/io/FileDescriptor;ZJJZ)I
+HSPLsun/nio/ch/FileDispatcherImpl;->release(Ljava/io/FileDescriptor;JJ)V
+HSPLsun/nio/ch/FileDispatcherImpl;->size(Ljava/io/FileDescriptor;)J
+HSPLsun/nio/ch/FileKey;-><init>()V
+HSPLsun/nio/ch/FileKey;->create(Ljava/io/FileDescriptor;)Lsun/nio/ch/FileKey;
+HSPLsun/nio/ch/FileKey;->hashCode()I
+HSPLsun/nio/ch/FileLockImpl;-><init>(Ljava/nio/channels/FileChannel;JJZ)V
+HSPLsun/nio/ch/FileLockImpl;->release()V
+HSPLsun/nio/ch/FileLockTable;-><init>()V
+HSPLsun/nio/ch/FileLockTable;->add(Ljava/nio/channels/FileLock;)V
+HSPLsun/nio/ch/FileLockTable;->newSharedFileLockTable(Ljava/nio/channels/Channel;Ljava/io/FileDescriptor;)Lsun/nio/ch/FileLockTable;
+HSPLsun/nio/ch/FileLockTable;->remove(Ljava/nio/channels/FileLock;)V
+HSPLsun/nio/ch/FileLockTable;->removeAll()Ljava/util/List;
+HSPLsun/nio/ch/FileLockTable;->replace(Ljava/nio/channels/FileLock;Ljava/nio/channels/FileLock;)V
+HSPLsun/nio/ch/IOStatus;->checkAll(J)Z
+HSPLsun/nio/ch/IOStatus;->normalize(J)J
+HSPLsun/nio/ch/NativeDispatcher;-><init>()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/SharedFileLockTable$FileLockReference;-><init>(Ljava/nio/channels/FileLock;Ljava/lang/ref/ReferenceQueue;Lsun/nio/ch/FileKey;)V
+HSPLsun/nio/ch/SharedFileLockTable;-><init>(Ljava/nio/channels/Channel;Ljava/io/FileDescriptor;)V
+HSPLsun/nio/ch/SharedFileLockTable;->add(Ljava/nio/channels/FileLock;)V
+HSPLsun/nio/ch/SharedFileLockTable;->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/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;->implClose()V
+HSPLsun/nio/cs/StreamDecoder;->implRead([CII)I
+HSPLsun/nio/cs/StreamDecoder;->inReady()Z
+HSPLsun/nio/cs/StreamDecoder;->read([CII)I
+HSPLsun/nio/cs/StreamDecoder;->readBytes()I
+HSPLsun/nio/cs/StreamEncoder;-><init>(Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)V
+HSPLsun/nio/cs/StreamEncoder;-><init>(Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/CharsetEncoder;)V
+HSPLsun/nio/cs/StreamEncoder;->close()V
+HSPLsun/nio/cs/StreamEncoder;->ensureOpen()V
+HSPLsun/nio/cs/StreamEncoder;->flush()V
+HSPLsun/nio/cs/StreamEncoder;->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;
+HSPLsun/nio/cs/StreamEncoder;->implClose()V
+HSPLsun/nio/cs/StreamEncoder;->implFlush()V
+HSPLsun/nio/cs/StreamEncoder;->implFlushBuffer()V
+HSPLsun/nio/cs/StreamEncoder;->implWrite([CII)V
+HSPLsun/nio/cs/StreamEncoder;->isOpen()Z
+HSPLsun/nio/cs/StreamEncoder;->write([CII)V
+HSPLsun/nio/cs/StreamEncoder;->writeBytes()V
+HSPLsun/nio/cs/ThreadLocalCoders$1;-><init>(I)V
+HSPLsun/nio/cs/ThreadLocalCoders$2;-><init>(I)V
+HSPLsun/nio/cs/ThreadLocalCoders$2;->create(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLsun/nio/cs/ThreadLocalCoders$Cache;-><init>(I)V
+HSPLsun/nio/cs/ThreadLocalCoders$Cache;->forName(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLsun/nio/cs/ThreadLocalCoders$Cache;->moveToFront([Ljava/lang/Object;I)V
+HSPLsun/nio/cs/ThreadLocalCoders;->encoderFor(Ljava/lang/Object;)Ljava/nio/charset/CharsetEncoder;
+HSPLsun/nio/fs/AbstractBasicFileAttributeView;-><init>()V
+HSPLsun/nio/fs/AbstractFileSystemProvider;-><init>()V
+HSPLsun/nio/fs/AbstractFileSystemProvider;->implDelete(Ljava/nio/file/Path;Z)Z
+HSPLsun/nio/fs/AbstractPath;-><init>()V
+HSPLsun/nio/fs/DefaultFileSystemProvider;->create()Ljava/nio/file/spi/FileSystemProvider;
+HSPLsun/nio/fs/DefaultFileSystemProvider;->createProvider(Ljava/lang/String;)Ljava/nio/file/spi/FileSystemProvider;
+HSPLsun/nio/fs/DynamicFileAttributeView;->readAttributes([Ljava/lang/String;)Ljava/util/Map;
+HSPLsun/nio/fs/DynamicFileAttributeView;->setAttribute(Ljava/lang/String;Ljava/lang/Object;)V
+HSPLsun/nio/fs/LinuxFileSystem;-><init>(Lsun/nio/fs/UnixFileSystemProvider;Ljava/lang/String;)V
+HSPLsun/nio/fs/LinuxFileSystemProvider;-><init>()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;->newFileSystem(Ljava/lang/String;)Lsun/nio/fs/LinuxFileSystem;
+HSPLsun/nio/fs/LinuxFileSystemProvider;->newFileSystem(Ljava/lang/String;)Lsun/nio/fs/UnixFileSystem;
+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;-><init>(I)V
+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;
+HSPLsun/nio/fs/NativeBuffers;->copyCStringToNativeBuffer([BLsun/nio/fs/NativeBuffer;)V
+HSPLsun/nio/fs/NativeBuffers;->getNativeBufferFromCache(I)Lsun/nio/fs/NativeBuffer;
+HSPLsun/nio/fs/NativeBuffers;->releaseNativeBuffer(Lsun/nio/fs/NativeBuffer;)V
+HSPLsun/nio/fs/UnixChannelFactory$Flags;->-getjava-nio-file-StandardOpenOptionSwitchesValues()[I
+HSPLsun/nio/fs/UnixChannelFactory$Flags;-><init>()V
+HSPLsun/nio/fs/UnixChannelFactory$Flags;->toFlags(Ljava/util/Set;)Lsun/nio/fs/UnixChannelFactory$Flags;
+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/UnixConstants;->get_S_IAMB()I
+HSPLsun/nio/fs/UnixException;-><init>(I)V
+HSPLsun/nio/fs/UnixException;->errno()I
+HSPLsun/nio/fs/UnixException;->rethrowAsIOException(Lsun/nio/fs/UnixPath;)V
+HSPLsun/nio/fs/UnixException;->rethrowAsIOException(Lsun/nio/fs/UnixPath;Lsun/nio/fs/UnixPath;)V
+HSPLsun/nio/fs/UnixException;->translateToIOException(Ljava/lang/String;Ljava/lang/String;)Ljava/io/IOException;
+HSPLsun/nio/fs/UnixFileAttributeViews$Basic;-><init>(Lsun/nio/fs/UnixPath;Z)V
+HSPLsun/nio/fs/UnixFileAttributeViews$Basic;->readAttributes()Ljava/nio/file/attribute/BasicFileAttributes;
+HSPLsun/nio/fs/UnixFileAttributeViews;->createBasicView(Lsun/nio/fs/UnixPath;Z)Lsun/nio/fs/UnixFileAttributeViews$Basic;
+HSPLsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;-><init>(Lsun/nio/fs/UnixFileAttributes;)V
+HSPLsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;->isRegularFile()Z
+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;
+HSPLsun/nio/fs/UnixFileAttributes;->get(Lsun/nio/fs/UnixPath;Z)Lsun/nio/fs/UnixFileAttributes;
+HSPLsun/nio/fs/UnixFileAttributes;->isRegularFile()Z
+HSPLsun/nio/fs/UnixFileModeAttribute;->toUnixMode(I[Ljava/nio/file/attribute/FileAttribute;)I
+HSPLsun/nio/fs/UnixFileSystem;-><init>(Lsun/nio/fs/UnixFileSystemProvider;Ljava/lang/String;)V
+HSPLsun/nio/fs/UnixFileSystem;->getFileStore(Lsun/nio/fs/UnixMountEntry;)Ljava/nio/file/FileStore;
+HSPLsun/nio/fs/UnixFileSystem;->getMountEntries()Ljava/lang/Iterable;
+HSPLsun/nio/fs/UnixFileSystem;->getPath(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;
+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;->-getjava-nio-file-AccessModeSwitchesValues()[I
+HSPLsun/nio/fs/UnixFileSystemProvider;-><init>()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;
+HSPLsun/nio/fs/UnixFileSystemProvider;->checkUri(Ljava/net/URI;)V
+HSPLsun/nio/fs/UnixFileSystemProvider;->getFileAttributeView(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileAttributeView;
+HSPLsun/nio/fs/UnixFileSystemProvider;->getFileStore(Lsun/nio/fs/UnixPath;)Ljava/nio/file/FileStore;
+HSPLsun/nio/fs/UnixFileSystemProvider;->getFileSystem(Ljava/net/URI;)Ljava/nio/file/FileSystem;
+HSPLsun/nio/fs/UnixFileSystemProvider;->getScheme()Ljava/lang/String;
+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;->newFileSystem(Ljava/lang/String;)Lsun/nio/fs/UnixFileSystem;
+HSPLsun/nio/fs/UnixFileSystemProvider;->readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;
+HSPLsun/nio/fs/UnixNativeDispatcher;->access(Lsun/nio/fs/UnixPath;I)V
+HSPLsun/nio/fs/UnixNativeDispatcher;->copyToNativeBuffer(Lsun/nio/fs/UnixPath;)Lsun/nio/fs/NativeBuffer;
+HSPLsun/nio/fs/UnixNativeDispatcher;->lstat(Lsun/nio/fs/UnixPath;Lsun/nio/fs/UnixFileAttributes;)V
+HSPLsun/nio/fs/UnixNativeDispatcher;->open(Lsun/nio/fs/UnixPath;II)I
+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
+HSPLsun/nio/fs/UnixPath;->getFileSystem()Ljava/nio/file/FileSystem;
+HSPLsun/nio/fs/UnixPath;->getFileSystem()Lsun/nio/fs/UnixFileSystem;
+HSPLsun/nio/fs/UnixPath;->getParent()Ljava/nio/file/Path;
+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;->toString()Ljava/lang/String;
+HSPLsun/nio/fs/UnixPath;->toUnixPath(Ljava/nio/file/Path;)Lsun/nio/fs/UnixPath;
+HSPLsun/nio/fs/Util;->followLinks([Ljava/nio/file/LinkOption;)Z
+HSPLsun/nio/fs/Util;->jnuEncoding()Ljava/nio/charset/Charset;
+HSPLsun/nio/fs/Util;->newSet([Ljava/lang/Object;)Ljava/util/Set;
+HSPLsun/nio/fs/Util;->toBytes(Ljava/lang/String;)[B
+HSPLsun/nio/fs/Util;->toString([B)Ljava/lang/String;
+HSPLsun/security/action/GetBooleanAction;-><init>(Ljava/lang/String;)V
+HSPLsun/security/action/GetBooleanAction;->run()Ljava/lang/Boolean;
+HSPLsun/security/action/GetBooleanAction;->run()Ljava/lang/Object;
+HSPLsun/security/action/GetPropertyAction;-><init>(Ljava/lang/String;)V
+HSPLsun/security/action/GetPropertyAction;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLsun/security/action/GetPropertyAction;->run()Ljava/lang/Object;
+HSPLsun/security/action/GetPropertyAction;->run()Ljava/lang/String;
+HSPLsun/security/jca/GetInstance$Instance;-><init>(Ljava/security/Provider;Ljava/lang/Object;)V
+HSPLsun/security/jca/GetInstance$Instance;-><init>(Ljava/security/Provider;Ljava/lang/Object;Lsun/security/jca/GetInstance$Instance;)V
+HSPLsun/security/jca/GetInstance$Instance;->toArray()[Ljava/lang/Object;
+HSPLsun/security/jca/GetInstance;->checkSuperClass(Ljava/security/Provider$Service;Ljava/lang/Class;Ljava/lang/Class;)V
+HSPLsun/security/jca/GetInstance;->getInstance(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;)Lsun/security/jca/GetInstance$Instance;
+HSPLsun/security/jca/GetInstance;->getInstance(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/security/Provider;)Lsun/security/jca/GetInstance$Instance;
+HSPLsun/security/jca/GetInstance;->getInstance(Ljava/security/Provider$Service;Ljava/lang/Class;)Lsun/security/jca/GetInstance$Instance;
+HSPLsun/security/jca/GetInstance;->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/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
+HSPLsun/security/jca/ProviderConfig;->equals(Ljava/lang/Object;)Z
+HSPLsun/security/jca/ProviderConfig;->expand(Ljava/lang/String;)Ljava/lang/String;
+HSPLsun/security/jca/ProviderConfig;->getProvider()Ljava/security/Provider;
+HSPLsun/security/jca/ProviderList$2;-><init>(Lsun/security/jca/ProviderList;)V
+HSPLsun/security/jca/ProviderList$2;->get(I)Ljava/lang/Object;
+HSPLsun/security/jca/ProviderList$2;->get(I)Ljava/security/Provider;
+HSPLsun/security/jca/ProviderList$2;->size()I
+HSPLsun/security/jca/ProviderList$ServiceList$1;-><init>(Lsun/security/jca/ProviderList$ServiceList;)V
+HSPLsun/security/jca/ProviderList$ServiceList$1;->hasNext()Z
+HSPLsun/security/jca/ProviderList$ServiceList$1;->next()Ljava/lang/Object;
+HSPLsun/security/jca/ProviderList$ServiceList$1;->next()Ljava/security/Provider$Service;
+HSPLsun/security/jca/ProviderList$ServiceList;->-wrap0(Lsun/security/jca/ProviderList$ServiceList;I)Ljava/security/Provider$Service;
+HSPLsun/security/jca/ProviderList$ServiceList;-><init>(Lsun/security/jca/ProviderList;Ljava/lang/String;Ljava/lang/String;)V
+HSPLsun/security/jca/ProviderList$ServiceList;->addService(Ljava/security/Provider$Service;)V
+HSPLsun/security/jca/ProviderList$ServiceList;->iterator()Ljava/util/Iterator;
+HSPLsun/security/jca/ProviderList$ServiceList;->tryGet(I)Ljava/security/Provider$Service;
+HSPLsun/security/jca/ProviderList;->-get0(Lsun/security/jca/ProviderList;)[Lsun/security/jca/ProviderConfig;
+HSPLsun/security/jca/ProviderList;-><init>([Lsun/security/jca/ProviderConfig;Z)V
+HSPLsun/security/jca/ProviderList;->getIndex(Ljava/lang/String;)I
+HSPLsun/security/jca/ProviderList;->getJarList([Ljava/lang/String;)Lsun/security/jca/ProviderList;
+HSPLsun/security/jca/ProviderList;->getProvider(I)Ljava/security/Provider;
+HSPLsun/security/jca/ProviderList;->getProvider(Ljava/lang/String;)Ljava/security/Provider;
+HSPLsun/security/jca/ProviderList;->getProviderConfig(Ljava/lang/String;)Lsun/security/jca/ProviderConfig;
+HSPLsun/security/jca/ProviderList;->getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;
+HSPLsun/security/jca/ProviderList;->getServices(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
+HSPLsun/security/jca/ProviderList;->insertAt(Lsun/security/jca/ProviderList;Ljava/security/Provider;I)Lsun/security/jca/ProviderList;
+HSPLsun/security/jca/ProviderList;->loadAll()I
+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;->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;->getSunProvider()Ljava/security/Provider;
+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/jca/ServiceId;-><init>(Ljava/lang/String;Ljava/lang/String;)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
+HSPLsun/security/pkcs/PKCS7$WrappedX509Certificate;->getPublicKey()Ljava/security/PublicKey;
+HSPLsun/security/pkcs/PKCS7$WrappedX509Certificate;->getSerialNumber()Ljava/math/BigInteger;
+HSPLsun/security/pkcs/PKCS7$WrappedX509Certificate;->getSubjectDN()Ljava/security/Principal;
+HSPLsun/security/pkcs/PKCS7$WrappedX509Certificate;->getTBSCertificate()[B
+HSPLsun/security/pkcs/PKCS7$WrappedX509Certificate;->hasUnsupportedCriticalExtension()Z
+HSPLsun/security/pkcs/PKCS7;-><init>([B)V
+HSPLsun/security/pkcs/PKCS7;->getCertificate(Ljava/math/BigInteger;Lsun/security/x509/X500Name;)Ljava/security/cert/X509Certificate;
+HSPLsun/security/pkcs/PKCS7;->getCertificates()[Ljava/security/cert/X509Certificate;
+HSPLsun/security/pkcs/PKCS7;->getContentInfo()Lsun/security/pkcs/ContentInfo;
+HSPLsun/security/pkcs/PKCS7;->parse(Lsun/security/util/DerInputStream;)V
+HSPLsun/security/pkcs/PKCS7;->parse(Lsun/security/util/DerInputStream;Z)V
+HSPLsun/security/pkcs/PKCS7;->parseSignedData(Lsun/security/util/DerValue;)V
+HSPLsun/security/pkcs/PKCS7;->populateCertIssuerNames()V
+HSPLsun/security/pkcs/PKCS7;->verify(Lsun/security/pkcs/SignerInfo;[B)Lsun/security/pkcs/SignerInfo;
+HSPLsun/security/pkcs/PKCS7;->verify([B)[Lsun/security/pkcs/SignerInfo;
+HSPLsun/security/pkcs/SignerInfo;-><init>(Lsun/security/util/DerInputStream;)V
+HSPLsun/security/pkcs/SignerInfo;-><init>(Lsun/security/util/DerInputStream;Z)V
+HSPLsun/security/pkcs/SignerInfo;->getCertificate(Lsun/security/pkcs/PKCS7;)Ljava/security/cert/X509Certificate;
+HSPLsun/security/pkcs/SignerInfo;->getCertificateChain(Lsun/security/pkcs/PKCS7;)Ljava/util/ArrayList;
+HSPLsun/security/pkcs/SignerInfo;->getDigestAlgorithmId()Lsun/security/x509/AlgorithmId;
+HSPLsun/security/pkcs/SignerInfo;->getDigestEncryptionAlgorithmId()Lsun/security/x509/AlgorithmId;
+HSPLsun/security/pkcs/SignerInfo;->getTimestamp()Ljava/security/Timestamp;
+HSPLsun/security/pkcs/SignerInfo;->getTsToken()Lsun/security/pkcs/PKCS7;
+HSPLsun/security/pkcs/SignerInfo;->verify(Lsun/security/pkcs/PKCS7;Ljava/io/InputStream;)Lsun/security/pkcs/SignerInfo;
+HSPLsun/security/pkcs/SignerInfo;->verify(Lsun/security/pkcs/PKCS7;[B)Lsun/security/pkcs/SignerInfo;
+HSPLsun/security/provider/X509Factory;->addToCache(Lsun/security/util/Cache;[BLjava/lang/Object;)V
+HSPLsun/security/provider/X509Factory;->getFromCache(Lsun/security/util/Cache;[B)Ljava/lang/Object;
+HSPLsun/security/provider/X509Factory;->intern(Ljava/security/cert/X509Certificate;)Lsun/security/x509/X509CertImpl;
+HSPLsun/security/provider/certpath/AdaptableX509CertSelector;-><init>()V
+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
+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/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
+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;
+HSPLsun/security/provider/certpath/BasicChecker;->init(Z)V
+HSPLsun/security/provider/certpath/BasicChecker;->updateState(Ljava/security/cert/X509Certificate;)V
+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
+HSPLsun/security/provider/certpath/CertPathHelper;-><init>()V
+HSPLsun/security/provider/certpath/CertPathHelper;->implSetDateAndTime(Ljava/security/cert/X509CRLSelector;Ljava/util/Date;J)V
+HSPLsun/security/provider/certpath/CertPathHelper;->implSetPathToNames(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
+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/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;->certificates()Ljava/util/List;
+HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->date()Ljava/util/Date;
+HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->explicitPolicyRequired()Z
+HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->initialPolicies()Ljava/util/Set;
+HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->policyMappingInhibited()Z
+HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->policyQualifiersRejected()Z
+HSPLsun/security/provider/certpath/PKIX$ValidatorParams;->revocationEnabled()Z
+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;
+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;->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;
+HSPLsun/security/provider/certpath/PKIXMasterCertPathValidator;->validate(Ljava/security/cert/CertPath;Ljava/util/List;Ljava/util/List;)V
+HSPLsun/security/provider/certpath/PolicyChecker;-><init>(Ljava/util/Set;IZZZZLsun/security/provider/certpath/PolicyNodeImpl;)V
+HSPLsun/security/provider/certpath/PolicyChecker;->check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V
+HSPLsun/security/provider/certpath/PolicyChecker;->checkPolicy(Ljava/security/cert/X509Certificate;)V
+HSPLsun/security/provider/certpath/PolicyChecker;->getPolicyTree()Ljava/security/cert/PolicyNode;
+HSPLsun/security/provider/certpath/PolicyChecker;->init(Z)V
+HSPLsun/security/provider/certpath/PolicyChecker;->mergeExplicitPolicy(ILsun/security/x509/X509CertImpl;Z)I
+HSPLsun/security/provider/certpath/PolicyChecker;->mergeInhibitAnyPolicy(ILsun/security/x509/X509CertImpl;)I
+HSPLsun/security/provider/certpath/PolicyChecker;->mergePolicyMapping(ILsun/security/x509/X509CertImpl;)I
+HSPLsun/security/provider/certpath/PolicyChecker;->processParents(IZZLsun/security/provider/certpath/PolicyNodeImpl;Ljava/lang/String;Ljava/util/Set;Z)Z
+HSPLsun/security/provider/certpath/PolicyChecker;->processPolicies(ILjava/util/Set;IIIZLsun/security/provider/certpath/PolicyNodeImpl;Lsun/security/x509/X509CertImpl;Z)Lsun/security/provider/certpath/PolicyNodeImpl;
+HSPLsun/security/provider/certpath/PolicyChecker;->processPolicyMappings(Lsun/security/x509/X509CertImpl;IILsun/security/provider/certpath/PolicyNodeImpl;ZLjava/util/Set;)Lsun/security/provider/certpath/PolicyNodeImpl;
+HSPLsun/security/provider/certpath/PolicyNodeImpl;-><init>(Lsun/security/provider/certpath/PolicyNodeImpl;Ljava/lang/String;Ljava/util/Set;ZLjava/util/Set;Z)V
+HSPLsun/security/provider/certpath/PolicyNodeImpl;-><init>(Lsun/security/provider/certpath/PolicyNodeImpl;Lsun/security/provider/certpath/PolicyNodeImpl;)V
+HSPLsun/security/provider/certpath/PolicyNodeImpl;->addChild(Lsun/security/provider/certpath/PolicyNodeImpl;)V
+HSPLsun/security/provider/certpath/PolicyNodeImpl;->copyTree()Lsun/security/provider/certpath/PolicyNodeImpl;
+HSPLsun/security/provider/certpath/PolicyNodeImpl;->copyTree(Lsun/security/provider/certpath/PolicyNodeImpl;)Lsun/security/provider/certpath/PolicyNodeImpl;
+HSPLsun/security/provider/certpath/PolicyNodeImpl;->getChildren()Ljava/util/Iterator;
+HSPLsun/security/provider/certpath/PolicyNodeImpl;->getDepth()I
+HSPLsun/security/provider/certpath/PolicyNodeImpl;->getPolicyNodesExpected(ILjava/lang/String;Z)Ljava/util/Set;
+HSPLsun/security/provider/certpath/PolicyNodeImpl;->getPolicyNodesExpectedHelper(ILjava/lang/String;Z)Ljava/util/Set;
+HSPLsun/security/provider/certpath/PolicyNodeImpl;->getValidPolicy()Ljava/lang/String;
+HSPLsun/security/provider/certpath/PolicyNodeImpl;->prune(I)V
+HSPLsun/security/provider/certpath/PolicyNodeImpl;->setImmutable()V
+HSPLsun/security/util/AbstractAlgorithmConstraints$1;-><init>(Ljava/lang/String;)V
+HSPLsun/security/util/AbstractAlgorithmConstraints$1;->run()Ljava/lang/Object;
+HSPLsun/security/util/AbstractAlgorithmConstraints$1;->run()Ljava/lang/String;
+HSPLsun/security/util/AbstractAlgorithmConstraints;-><init>(Lsun/security/util/AlgorithmDecomposer;)V
+HSPLsun/security/util/AbstractAlgorithmConstraints;->checkAlgorithm([Ljava/lang/String;Ljava/lang/String;Lsun/security/util/AlgorithmDecomposer;)Z
+HSPLsun/security/util/AbstractAlgorithmConstraints;->getAlgorithms(Ljava/lang/String;)[Ljava/lang/String;
+HSPLsun/security/util/AlgorithmDecomposer;-><init>()V
+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/AlgorithmDecomposer;->hashName(Ljava/lang/String;)Ljava/lang/String;
+HSPLsun/security/util/BitArray;-><init>(I[B)V
+HSPLsun/security/util/BitArray;->get(I)Z
+HSPLsun/security/util/BitArray;->length()I
+HSPLsun/security/util/BitArray;->position(I)I
+HSPLsun/security/util/BitArray;->subscript(I)I
+HSPLsun/security/util/BitArray;->toBooleanArray()[Z
+HSPLsun/security/util/BitArray;->toByteArray()[B
+HSPLsun/security/util/ByteArrayLexOrder;-><init>()V
+HSPLsun/security/util/ByteArrayTagOrder;-><init>()V
+HSPLsun/security/util/Cache$EqualByteArray;-><init>([B)V
+HSPLsun/security/util/Cache$EqualByteArray;->equals(Ljava/lang/Object;)Z
+HSPLsun/security/util/Cache$EqualByteArray;->hashCode()I
+HSPLsun/security/util/Cache;-><init>()V
+HSPLsun/security/util/Cache;->accept(Lsun/security/util/Cache$CacheVisitor;)V
+HSPLsun/security/util/Cache;->clear()V
+HSPLsun/security/util/Cache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLsun/security/util/Cache;->newSoftMemoryCache(I)Lsun/security/util/Cache;
+HSPLsun/security/util/Cache;->put(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLsun/security/util/Cache;->remove(Ljava/lang/Object;)V
+HSPLsun/security/util/Cache;->setCapacity(I)V
+HSPLsun/security/util/Cache;->setTimeout(I)V
+HSPLsun/security/util/Cache;->size()I
+HSPLsun/security/util/CertConstraintParameters;-><init>(Ljava/security/cert/X509Certificate;Z)V
+HSPLsun/security/util/CertConstraintParameters;->getCertificate()Ljava/security/cert/X509Certificate;
+HSPLsun/security/util/Debug;->getInstance(Ljava/lang/String;)Lsun/security/util/Debug;
+HSPLsun/security/util/Debug;->getInstance(Ljava/lang/String;Ljava/lang/String;)Lsun/security/util/Debug;
+HSPLsun/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
+HSPLsun/security/util/DerInputBuffer;-><init>([BII)V
+HSPLsun/security/util/DerInputBuffer;->dup()Lsun/security/util/DerInputBuffer;
+HSPLsun/security/util/DerInputBuffer;->getBigInteger(IZ)Ljava/math/BigInteger;
+HSPLsun/security/util/DerInputBuffer;->getBitString()[B
+HSPLsun/security/util/DerInputBuffer;->getBitString(I)[B
+HSPLsun/security/util/DerInputBuffer;->getInteger(I)I
+HSPLsun/security/util/DerInputBuffer;->getPos()I
+HSPLsun/security/util/DerInputBuffer;->getSlice(II)[B
+HSPLsun/security/util/DerInputBuffer;->getTime(IZ)Ljava/util/Date;
+HSPLsun/security/util/DerInputBuffer;->getUTCTime(I)Ljava/util/Date;
+HSPLsun/security/util/DerInputBuffer;->getUnalignedBitString()Lsun/security/util/BitArray;
+HSPLsun/security/util/DerInputBuffer;->peek()I
+HSPLsun/security/util/DerInputBuffer;->toByteArray()[B
+HSPLsun/security/util/DerInputBuffer;->truncate(I)V
+HSPLsun/security/util/DerInputStream;-><init>(Lsun/security/util/DerInputBuffer;)V
+HSPLsun/security/util/DerInputStream;-><init>([B)V
+HSPLsun/security/util/DerInputStream;->available()I
+HSPLsun/security/util/DerInputStream;->getBigInteger()Ljava/math/BigInteger;
+HSPLsun/security/util/DerInputStream;->getByte()I
+HSPLsun/security/util/DerInputStream;->getBytes([B)V
+HSPLsun/security/util/DerInputStream;->getDerValue()Lsun/security/util/DerValue;
+HSPLsun/security/util/DerInputStream;->getLength()I
+HSPLsun/security/util/DerInputStream;->getLength(ILjava/io/InputStream;)I
+HSPLsun/security/util/DerInputStream;->getLength(Ljava/io/InputStream;)I
+HSPLsun/security/util/DerInputStream;->getOID()Lsun/security/util/ObjectIdentifier;
+HSPLsun/security/util/DerInputStream;->getOctetString()[B
+HSPLsun/security/util/DerInputStream;->getSequence(I)[Lsun/security/util/DerValue;
+HSPLsun/security/util/DerInputStream;->getSequence(IZ)[Lsun/security/util/DerValue;
+HSPLsun/security/util/DerInputStream;->getSet(I)[Lsun/security/util/DerValue;
+HSPLsun/security/util/DerInputStream;->getSet(IZ)[Lsun/security/util/DerValue;
+HSPLsun/security/util/DerInputStream;->getSet(IZZ)[Lsun/security/util/DerValue;
+HSPLsun/security/util/DerInputStream;->getUTCTime()Ljava/util/Date;
+HSPLsun/security/util/DerInputStream;->getUnalignedBitString()Lsun/security/util/BitArray;
+HSPLsun/security/util/DerInputStream;->init([BIIZ)V
+HSPLsun/security/util/DerInputStream;->mark(I)V
+HSPLsun/security/util/DerInputStream;->peekByte()I
+HSPLsun/security/util/DerInputStream;->readVector(I)[Lsun/security/util/DerValue;
+HSPLsun/security/util/DerInputStream;->readVector(IZ)[Lsun/security/util/DerValue;
+HSPLsun/security/util/DerInputStream;->reset()V
+HSPLsun/security/util/DerInputStream;->subStream(IZ)Lsun/security/util/DerInputStream;
+HSPLsun/security/util/DerInputStream;->toByteArray()[B
+HSPLsun/security/util/DerOutputStream;-><init>()V
+HSPLsun/security/util/DerOutputStream;->putDerValue(Lsun/security/util/DerValue;)V
+HSPLsun/security/util/DerOutputStream;->putLength(I)V
+HSPLsun/security/util/DerOutputStream;->putNull()V
+HSPLsun/security/util/DerOutputStream;->putOID(Lsun/security/util/ObjectIdentifier;)V
+HSPLsun/security/util/DerOutputStream;->putOctetString([B)V
+HSPLsun/security/util/DerOutputStream;->putOrderedSet(B[Lsun/security/util/DerEncoder;Ljava/util/Comparator;)V
+HSPLsun/security/util/DerOutputStream;->putOrderedSetOf(B[Lsun/security/util/DerEncoder;)V
+HSPLsun/security/util/DerOutputStream;->putUnalignedBitString(Lsun/security/util/BitArray;)V
+HSPLsun/security/util/DerOutputStream;->write(BLsun/security/util/DerOutputStream;)V
+HSPLsun/security/util/DerOutputStream;->write(B[B)V
+HSPLsun/security/util/DerValue;-><init>(B[B)V
+HSPLsun/security/util/DerValue;-><init>(Ljava/io/InputStream;)V
+HSPLsun/security/util/DerValue;-><init>(Lsun/security/util/DerInputBuffer;Z)V
+HSPLsun/security/util/DerValue;-><init>([B)V
+HSPLsun/security/util/DerValue;->encode(Lsun/security/util/DerOutputStream;)V
+HSPLsun/security/util/DerValue;->getBigInteger()Ljava/math/BigInteger;
+HSPLsun/security/util/DerValue;->getBitString()[B
+HSPLsun/security/util/DerValue;->getBoolean()Z
+HSPLsun/security/util/DerValue;->getData()Lsun/security/util/DerInputStream;
+HSPLsun/security/util/DerValue;->getDataBytes()[B
+HSPLsun/security/util/DerValue;->getIA5String()Ljava/lang/String;
+HSPLsun/security/util/DerValue;->getInteger()I
+HSPLsun/security/util/DerValue;->getOID()Lsun/security/util/ObjectIdentifier;
+HSPLsun/security/util/DerValue;->getOctetString()[B
+HSPLsun/security/util/DerValue;->getOriginalEncodedForm()[B
+HSPLsun/security/util/DerValue;->getTag()B
+HSPLsun/security/util/DerValue;->getUnalignedBitString()Lsun/security/util/BitArray;
+HSPLsun/security/util/DerValue;->init(ZLjava/io/InputStream;)Lsun/security/util/DerInputStream;
+HSPLsun/security/util/DerValue;->isConstructed()Z
+HSPLsun/security/util/DerValue;->isContextSpecific()Z
+HSPLsun/security/util/DerValue;->isContextSpecific(B)Z
+HSPLsun/security/util/DerValue;->isPrintableStringChar(C)Z
+HSPLsun/security/util/DerValue;->length()I
+HSPLsun/security/util/DerValue;->resetTag(B)V
+HSPLsun/security/util/DerValue;->toByteArray()[B
+HSPLsun/security/util/DerValue;->toDerInputStream()Lsun/security/util/DerInputStream;
+HSPLsun/security/util/DisabledAlgorithmConstraints$Constraint$Operator;-><init>(Ljava/lang/String;I)V
+HSPLsun/security/util/DisabledAlgorithmConstraints$Constraint$Operator;->of(Ljava/lang/String;)Lsun/security/util/DisabledAlgorithmConstraints$Constraint$Operator;
+HSPLsun/security/util/DisabledAlgorithmConstraints$Constraint$Operator;->values()[Lsun/security/util/DisabledAlgorithmConstraints$Constraint$Operator;
+HSPLsun/security/util/DisabledAlgorithmConstraints$Constraint;-><init>()V
+HSPLsun/security/util/DisabledAlgorithmConstraints$Constraint;-><init>(Lsun/security/util/DisabledAlgorithmConstraints$Constraint;)V
+HSPLsun/security/util/DisabledAlgorithmConstraints$Constraint;->permits(Lsun/security/util/CertConstraintParameters;)V
+HSPLsun/security/util/DisabledAlgorithmConstraints$Constraints;-><init>([Ljava/lang/String;)V
+HSPLsun/security/util/DisabledAlgorithmConstraints$Constraints;->getConstraints(Ljava/lang/String;)Ljava/util/Set;
+HSPLsun/security/util/DisabledAlgorithmConstraints$Constraints;->permits(Ljava/security/Key;)Z
+HSPLsun/security/util/DisabledAlgorithmConstraints$Constraints;->permits(Lsun/security/util/CertConstraintParameters;)V
+HSPLsun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint;->-getsun-security-util-DisabledAlgorithmConstraints$Constraint$OperatorSwitchesValues()[I
+HSPLsun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint;-><init>(Ljava/lang/String;Lsun/security/util/DisabledAlgorithmConstraints$Constraint$Operator;I)V
+HSPLsun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint;->permits(Ljava/security/Key;)Z
+HSPLsun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint;->permits(Lsun/security/util/CertConstraintParameters;)V
+HSPLsun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint;->permitsImpl(Ljava/security/Key;)Z
+HSPLsun/security/util/DisabledAlgorithmConstraints;->-get0()Lsun/security/util/Debug;
+HSPLsun/security/util/DisabledAlgorithmConstraints;-><init>(Ljava/lang/String;)V
+HSPLsun/security/util/DisabledAlgorithmConstraints;-><init>(Ljava/lang/String;Lsun/security/util/AlgorithmDecomposer;)V
+HSPLsun/security/util/DisabledAlgorithmConstraints;->checkConstraints(Ljava/util/Set;Ljava/lang/String;Ljava/security/Key;Ljava/security/AlgorithmParameters;)Z
+HSPLsun/security/util/DisabledAlgorithmConstraints;->checkConstraints(Ljava/util/Set;Lsun/security/util/CertConstraintParameters;)V
+HSPLsun/security/util/DisabledAlgorithmConstraints;->checkProperty(Ljava/lang/String;)Z
+HSPLsun/security/util/DisabledAlgorithmConstraints;->permits(Ljava/util/Set;Ljava/lang/String;Ljava/security/AlgorithmParameters;)Z
+HSPLsun/security/util/DisabledAlgorithmConstraints;->permits(Ljava/util/Set;Ljava/lang/String;Ljava/security/Key;Ljava/security/AlgorithmParameters;)Z
+HSPLsun/security/util/DisabledAlgorithmConstraints;->permits(Ljava/util/Set;Ljava/security/Key;)Z
+HSPLsun/security/util/DisabledAlgorithmConstraints;->permits(Ljava/util/Set;Lsun/security/util/CertConstraintParameters;)V
+HSPLsun/security/util/KeyUtil;->getKeySize(Ljava/security/Key;)I
+HSPLsun/security/util/ManifestDigester$Entry;-><init>(III[B)V
+HSPLsun/security/util/ManifestDigester$Position;-><init>()V
+HSPLsun/security/util/ManifestDigester;-><init>([B)V
+HSPLsun/security/util/ManifestDigester;->findSection(ILsun/security/util/ManifestDigester$Position;)Z
+HSPLsun/security/util/ManifestDigester;->isNameAttr([BI)Z
+HSPLsun/security/util/ManifestDigester;->manifestDigest(Ljava/security/MessageDigest;)[B
+HSPLsun/security/util/ManifestEntryVerifier$SunProviderHolder;->-get0()Ljava/security/Provider;
+HSPLsun/security/util/ManifestEntryVerifier;-><init>(Ljava/util/jar/Manifest;)V
+HSPLsun/security/util/ManifestEntryVerifier;->getEntry()Ljava/util/jar/JarEntry;
+HSPLsun/security/util/ManifestEntryVerifier;->setEntry(Ljava/lang/String;Ljava/util/jar/JarEntry;)V
+HSPLsun/security/util/ManifestEntryVerifier;->update([BII)V
+HSPLsun/security/util/ManifestEntryVerifier;->verify(Ljava/util/Hashtable;Ljava/util/Hashtable;)[Ljava/security/CodeSigner;
+HSPLsun/security/util/MemoryCache$CacheEntry;->getKey()Ljava/lang/Object;
+HSPLsun/security/util/MemoryCache$CacheEntry;->getValue()Ljava/lang/Object;
+HSPLsun/security/util/MemoryCache$CacheEntry;->invalidate()V
+HSPLsun/security/util/MemoryCache$CacheEntry;->isValid(J)Z
+HSPLsun/security/util/MemoryCache$SoftCacheEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;JLjava/lang/ref/ReferenceQueue;)V
+HSPLsun/security/util/MemoryCache$SoftCacheEntry;->getValue()Ljava/lang/Object;
+HSPLsun/security/util/MemoryCache$SoftCacheEntry;->isValid(J)Z
+HSPLsun/security/util/MemoryCache;-><init>(ZI)V
+HSPLsun/security/util/MemoryCache;-><init>(ZII)V
+HSPLsun/security/util/MemoryCache;->emptyQueue()V
+HSPLsun/security/util/MemoryCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLsun/security/util/MemoryCache;->newEntry(Ljava/lang/Object;Ljava/lang/Object;JLjava/lang/ref/ReferenceQueue;)Lsun/security/util/MemoryCache$CacheEntry;
+HSPLsun/security/util/MemoryCache;->put(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLsun/security/util/ObjectIdentifier;-><init>(Ljava/lang/String;)V
+HSPLsun/security/util/ObjectIdentifier;-><init>(Lsun/security/util/DerInputBuffer;)V
+HSPLsun/security/util/ObjectIdentifier;-><init>(Lsun/security/util/DerInputStream;)V
+HSPLsun/security/util/ObjectIdentifier;-><init>([I)V
+HSPLsun/security/util/ObjectIdentifier;->check([B)V
+HSPLsun/security/util/ObjectIdentifier;->checkCount(I)V
+HSPLsun/security/util/ObjectIdentifier;->checkFirstComponent(I)V
+HSPLsun/security/util/ObjectIdentifier;->checkOtherComponent(II)V
+HSPLsun/security/util/ObjectIdentifier;->checkSecondComponent(II)V
+HSPLsun/security/util/ObjectIdentifier;->encode(Lsun/security/util/DerOutputStream;)V
+HSPLsun/security/util/ObjectIdentifier;->equals(Ljava/lang/Object;)Z
+HSPLsun/security/util/ObjectIdentifier;->hashCode()I
+HSPLsun/security/util/ObjectIdentifier;->init([II)V
+HSPLsun/security/util/ObjectIdentifier;->newInternal([I)Lsun/security/util/ObjectIdentifier;
+HSPLsun/security/util/ObjectIdentifier;->pack([BIIII)[B
+HSPLsun/security/util/ObjectIdentifier;->pack7Oid(I[BI)I
+HSPLsun/security/util/ObjectIdentifier;->pack7Oid([BII[BI)I
+HSPLsun/security/util/ObjectIdentifier;->toString()Ljava/lang/String;
+HSPLsun/security/util/SignatureFileVerifier;-><init>(Ljava/util/ArrayList;Lsun/security/util/ManifestDigester;Ljava/lang/String;[B)V
+HSPLsun/security/util/SignatureFileVerifier;->getDigest(Ljava/lang/String;)Ljava/security/MessageDigest;
+HSPLsun/security/util/SignatureFileVerifier;->getSigners([Lsun/security/pkcs/SignerInfo;Lsun/security/pkcs/PKCS7;)[Ljava/security/CodeSigner;
+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;->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
+HSPLsun/security/util/SignatureFileVerifier;->setSignatureFile([B)V
+HSPLsun/security/util/SignatureFileVerifier;->updateSigners([Ljava/security/CodeSigner;Ljava/util/Hashtable;Ljava/lang/String;)V
+HSPLsun/security/util/SignatureFileVerifier;->verifyManifestHash(Ljava/util/jar/Manifest;Lsun/security/util/ManifestDigester;Ljava/util/List;)Z
+HSPLsun/security/x509/AVA;-><init>(Lsun/security/util/DerValue;)V
+HSPLsun/security/x509/AVA;->derEncode(Ljava/io/OutputStream;)V
+HSPLsun/security/x509/AVA;->isDerString(Lsun/security/util/DerValue;Z)Z
+HSPLsun/security/x509/AVA;->toKeyword(ILjava/util/Map;)Ljava/lang/String;
+HSPLsun/security/x509/AVA;->toRFC2253CanonicalString()Ljava/lang/String;
+HSPLsun/security/x509/AVA;->toRFC2253String(Ljava/util/Map;)Ljava/lang/String;
+HSPLsun/security/x509/AVAKeyword;-><init>(Ljava/lang/String;Lsun/security/util/ObjectIdentifier;ZZ)V
+HSPLsun/security/x509/AVAKeyword;->getKeyword(Lsun/security/util/ObjectIdentifier;ILjava/util/Map;)Ljava/lang/String;
+HSPLsun/security/x509/AVAKeyword;->isCompliant(I)Z
+HSPLsun/security/x509/AccessDescription;-><init>(Lsun/security/util/DerValue;)V
+HSPLsun/security/x509/AlgorithmId;-><init>(Lsun/security/util/ObjectIdentifier;)V
+HSPLsun/security/x509/AlgorithmId;-><init>(Lsun/security/util/ObjectIdentifier;Lsun/security/util/DerValue;)V
+HSPLsun/security/x509/AlgorithmId;->algOID(Ljava/lang/String;)Lsun/security/util/ObjectIdentifier;
+HSPLsun/security/x509/AlgorithmId;->decodeParams()V
+HSPLsun/security/x509/AlgorithmId;->derEncode(Ljava/io/OutputStream;)V
+HSPLsun/security/x509/AlgorithmId;->encode(Lsun/security/util/DerOutputStream;)V
+HSPLsun/security/x509/AlgorithmId;->equals(Lsun/security/x509/AlgorithmId;)Z
+HSPLsun/security/x509/AlgorithmId;->get(Ljava/lang/String;)Lsun/security/x509/AlgorithmId;
+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;->makeSigAlg(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLsun/security/x509/AlgorithmId;->oid([I)Lsun/security/util/ObjectIdentifier;
+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;
+HSPLsun/security/x509/AuthorityKeyIdentifierExtension;-><init>(Ljava/lang/Boolean;Ljava/lang/Object;)V
+HSPLsun/security/x509/AuthorityKeyIdentifierExtension;->get(Ljava/lang/String;)Ljava/lang/Object;
+HSPLsun/security/x509/AuthorityKeyIdentifierExtension;->getEncodedKeyIdentifier()[B
+HSPLsun/security/x509/AuthorityKeyIdentifierExtension;->getName()Ljava/lang/String;
+HSPLsun/security/x509/BasicConstraintsExtension;-><init>(Ljava/lang/Boolean;Ljava/lang/Object;)V
+HSPLsun/security/x509/BasicConstraintsExtension;->getName()Ljava/lang/String;
+HSPLsun/security/x509/CRLDistributionPointsExtension;-><init>(Ljava/lang/Boolean;Ljava/lang/Object;)V
+HSPLsun/security/x509/CRLDistributionPointsExtension;-><init>(Lsun/security/util/ObjectIdentifier;Ljava/lang/Boolean;Ljava/lang/Object;Ljava/lang/String;)V
+HSPLsun/security/x509/CRLDistributionPointsExtension;->getName()Ljava/lang/String;
+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
+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
+HSPLsun/security/x509/CertificateExtensions;->parseExtension(Lsun/security/x509/Extension;)V
+HSPLsun/security/x509/CertificatePoliciesExtension;-><init>(Ljava/lang/Boolean;Ljava/lang/Object;)V
+HSPLsun/security/x509/CertificatePoliciesExtension;->get(Ljava/lang/String;)Ljava/util/List;
+HSPLsun/security/x509/CertificatePoliciesExtension;->getName()Ljava/lang/String;
+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/CertificateValidity;-><init>(Lsun/security/util/DerInputStream;)V
+HSPLsun/security/x509/CertificateValidity;->construct(Lsun/security/util/DerValue;)V
+HSPLsun/security/x509/CertificateVersion;-><init>()V
+HSPLsun/security/x509/CertificateVersion;-><init>(Lsun/security/util/DerValue;)V
+HSPLsun/security/x509/CertificateVersion;->compare(I)I
+HSPLsun/security/x509/CertificateVersion;->construct(Lsun/security/util/DerValue;)V
+HSPLsun/security/x509/CertificateX509Key;-><init>(Lsun/security/util/DerInputStream;)V
+HSPLsun/security/x509/DNSName;-><init>(Ljava/lang/String;)V
+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
+HSPLsun/security/x509/ExtendedKeyUsageExtension;->getName()Ljava/lang/String;
+HSPLsun/security/x509/Extension;-><init>()V
+HSPLsun/security/x509/Extension;-><init>(Lsun/security/util/DerValue;)V
+HSPLsun/security/x509/Extension;->getExtensionId()Lsun/security/util/ObjectIdentifier;
+HSPLsun/security/x509/Extension;->getExtensionValue()[B
+HSPLsun/security/x509/Extension;->isCritical()Z
+HSPLsun/security/x509/GeneralName;-><init>(Lsun/security/util/DerValue;)V
+HSPLsun/security/x509/GeneralName;-><init>(Lsun/security/util/DerValue;Z)V
+HSPLsun/security/x509/GeneralNameInterface;->constrains(Lsun/security/x509/GeneralNameInterface;)I
+HSPLsun/security/x509/GeneralNameInterface;->encode(Lsun/security/util/DerOutputStream;)V
+HSPLsun/security/x509/GeneralNameInterface;->getType()I
+HSPLsun/security/x509/GeneralNameInterface;->subtreeDepth()I
+HSPLsun/security/x509/GeneralNames;-><init>()V
+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;->encode(Lsun/security/util/DerOutputStream;)V
+HSPLsun/security/x509/KeyUsageExtension;-><init>(Ljava/lang/Boolean;Ljava/lang/Object;)V
+HSPLsun/security/x509/KeyUsageExtension;->getName()Ljava/lang/String;
+HSPLsun/security/x509/OIDMap$OIDInfo;-><init>(Ljava/lang/String;Lsun/security/util/ObjectIdentifier;Ljava/lang/Class;)V
+HSPLsun/security/x509/OIDMap$OIDInfo;->getClazz()Ljava/lang/Class;
+HSPLsun/security/x509/OIDMap;->addInternal(Ljava/lang/String;Lsun/security/util/ObjectIdentifier;Ljava/lang/Class;)V
+HSPLsun/security/x509/OIDMap;->getClass(Lsun/security/util/ObjectIdentifier;)Ljava/lang/Class;
+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;
+HSPLsun/security/x509/RDN;-><init>(Lsun/security/util/DerValue;)V
+HSPLsun/security/x509/RDN;->encode(Lsun/security/util/DerOutputStream;)V
+HSPLsun/security/x509/RDN;->toRFC2253String(Ljava/util/Map;)Ljava/lang/String;
+HSPLsun/security/x509/RDN;->toRFC2253String(Z)Ljava/lang/String;
+HSPLsun/security/x509/RDN;->toRFC2253StringInternal(ZLjava/util/Map;)Ljava/lang/String;
+HSPLsun/security/x509/SerialNumber;-><init>(Lsun/security/util/DerValue;)V
+HSPLsun/security/x509/SerialNumber;->construct(Lsun/security/util/DerValue;)V
+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;->getName()Ljava/lang/String;
+HSPLsun/security/x509/URIName;-><init>(Ljava/lang/String;)V
+HSPLsun/security/x509/URIName;-><init>(Lsun/security/util/DerValue;)V
+HSPLsun/security/x509/X500Name$1;-><init>()V
+HSPLsun/security/x509/X500Name$1;->run()Ljava/lang/Object;
+HSPLsun/security/x509/X500Name$1;->run()[Ljava/lang/Object;
+HSPLsun/security/x509/X500Name;-><init>(Lsun/security/util/DerInputStream;)V
+HSPLsun/security/x509/X500Name;-><init>(Lsun/security/util/DerValue;)V
+HSPLsun/security/x509/X500Name;-><init>([B)V
+HSPLsun/security/x509/X500Name;->asX500Name(Ljavax/security/auth/x500/X500Principal;)Lsun/security/x509/X500Name;
+HSPLsun/security/x509/X500Name;->asX500Principal()Ljavax/security/auth/x500/X500Principal;
+HSPLsun/security/x509/X500Name;->equals(Ljava/lang/Object;)Z
+HSPLsun/security/x509/X500Name;->generateRFC2253DN(Ljava/util/Map;)Ljava/lang/String;
+HSPLsun/security/x509/X500Name;->getEncoded()[B
+HSPLsun/security/x509/X500Name;->getEncodedInternal()[B
+HSPLsun/security/x509/X500Name;->getRFC2253CanonicalName()Ljava/lang/String;
+HSPLsun/security/x509/X500Name;->getRFC2253Name()Ljava/lang/String;
+HSPLsun/security/x509/X500Name;->getRFC2253Name(Ljava/util/Map;)Ljava/lang/String;
+HSPLsun/security/x509/X500Name;->hashCode()I
+HSPLsun/security/x509/X500Name;->intern(Lsun/security/util/ObjectIdentifier;)Lsun/security/util/ObjectIdentifier;
+HSPLsun/security/x509/X500Name;->isEmpty()Z
+HSPLsun/security/x509/X500Name;->parseDER(Lsun/security/util/DerInputStream;)V
+HSPLsun/security/x509/X509AttributeName;-><init>(Ljava/lang/String;)V
+HSPLsun/security/x509/X509AttributeName;->getPrefix()Ljava/lang/String;
+HSPLsun/security/x509/X509AttributeName;->getSuffix()Ljava/lang/String;
+HSPLsun/security/x509/X509CertImpl;-><init>([B)V
+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
+HSPLsun/security/x509/X509CertImpl;->getExtension(Lsun/security/util/ObjectIdentifier;)Lsun/security/x509/Extension;
+HSPLsun/security/x509/X509CertImpl;->getIssuerX500Principal()Ljavax/security/auth/x500/X500Principal;
+HSPLsun/security/x509/X509CertImpl;->getNameConstraintsExtension()Lsun/security/x509/NameConstraintsExtension;
+HSPLsun/security/x509/X509CertImpl;->getPolicyConstraintsExtension()Lsun/security/x509/PolicyConstraintsExtension;
+HSPLsun/security/x509/X509CertImpl;->getPolicyMappingsExtension()Lsun/security/x509/PolicyMappingsExtension;
+HSPLsun/security/x509/X509CertImpl;->getSigAlgName()Ljava/lang/String;
+HSPLsun/security/x509/X509CertImpl;->getSubjectX500Principal()Ljavax/security/auth/x500/X500Principal;
+HSPLsun/security/x509/X509CertImpl;->isSelfIssued(Ljava/security/cert/X509Certificate;)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;
+HSPLsun/security/x509/X509CertInfo;-><init>(Lsun/security/util/DerValue;)V
+HSPLsun/security/x509/X509CertInfo;-><init>([B)V
+HSPLsun/security/x509/X509CertInfo;->attributeMap(Ljava/lang/String;)I
+HSPLsun/security/x509/X509CertInfo;->get(Ljava/lang/String;)Ljava/lang/Object;
+HSPLsun/security/x509/X509CertInfo;->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
+HSPLsun/security/x509/X509Key;->buildX509Key(Lsun/security/x509/AlgorithmId;Lsun/security/util/BitArray;)Ljava/security/PublicKey;
+HSPLsun/security/x509/X509Key;->encode(Lsun/security/util/DerOutputStream;Lsun/security/x509/AlgorithmId;Lsun/security/util/BitArray;)V
+HSPLsun/security/x509/X509Key;->parse(Lsun/security/util/DerValue;)Ljava/security/PublicKey;
+HSPLsun/util/calendar/AbstractCalendar;-><init>()V
+HSPLsun/util/calendar/AbstractCalendar;->getCalendarDate(JLsun/util/calendar/CalendarDate;)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/AbstractCalendar;->getDayOfWeekDateOnOrBefore(JI)J
+HSPLsun/util/calendar/AbstractCalendar;->getFixedDate(Lsun/util/calendar/CalendarDate;)J
+HSPLsun/util/calendar/AbstractCalendar;->getTime(Lsun/util/calendar/CalendarDate;)J
+HSPLsun/util/calendar/AbstractCalendar;->getTimeOfDay(Lsun/util/calendar/CalendarDate;)J
+HSPLsun/util/calendar/AbstractCalendar;->getTimeOfDayValue(Lsun/util/calendar/CalendarDate;)J
+HSPLsun/util/calendar/AbstractCalendar;->isLeapYear(Lsun/util/calendar/CalendarDate;)Z
+HSPLsun/util/calendar/AbstractCalendar;->setTimeOfDay(Lsun/util/calendar/CalendarDate;I)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/BaseCalendar$Date;-><init>(Ljava/util/TimeZone;)V
+HSPLsun/util/calendar/BaseCalendar$Date;->getCachedJan1()J
+HSPLsun/util/calendar/BaseCalendar$Date;->getCachedYear()I
+HSPLsun/util/calendar/BaseCalendar$Date;->getNormalizedYear()I
+HSPLsun/util/calendar/BaseCalendar$Date;->hit(I)Z
+HSPLsun/util/calendar/BaseCalendar$Date;->hit(J)Z
+HSPLsun/util/calendar/BaseCalendar$Date;->setCache(IJI)V
+HSPLsun/util/calendar/BaseCalendar$Date;->setNormalizedYear(I)V
+HSPLsun/util/calendar/BaseCalendar;-><init>()V
+HSPLsun/util/calendar/BaseCalendar;->getCalendarDateFromFixedDate(Lsun/util/calendar/CalendarDate;J)V
+HSPLsun/util/calendar/BaseCalendar;->getDayOfWeekFromFixedDate(J)I
+HSPLsun/util/calendar/BaseCalendar;->getDayOfYear(III)J
+HSPLsun/util/calendar/BaseCalendar;->getFixedDate(IIILsun/util/calendar/BaseCalendar$Date;)J
+HSPLsun/util/calendar/BaseCalendar;->getFixedDate(Lsun/util/calendar/CalendarDate;)J
+HSPLsun/util/calendar/BaseCalendar;->getGregorianYearFromFixedDate(J)I
+HSPLsun/util/calendar/BaseCalendar;->isLeapYear(I)Z
+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
+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
+HSPLsun/util/calendar/CalendarDate;->getMillis()I
+HSPLsun/util/calendar/CalendarDate;->getMinutes()I
+HSPLsun/util/calendar/CalendarDate;->getMonth()I
+HSPLsun/util/calendar/CalendarDate;->getSeconds()I
+HSPLsun/util/calendar/CalendarDate;->getTimeOfDay()J
+HSPLsun/util/calendar/CalendarDate;->getYear()I
+HSPLsun/util/calendar/CalendarDate;->getZone()Ljava/util/TimeZone;
+HSPLsun/util/calendar/CalendarDate;->isLeapYear()Z
+HSPLsun/util/calendar/CalendarDate;->isNormalized()Z
+HSPLsun/util/calendar/CalendarDate;->setDate(III)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/CalendarDate;->setDayOfMonth(I)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/CalendarDate;->setDayOfWeek(I)V
+HSPLsun/util/calendar/CalendarDate;->setDaylightSaving(I)V
+HSPLsun/util/calendar/CalendarDate;->setHours(I)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/CalendarDate;->setLeapYear(Z)V
+HSPLsun/util/calendar/CalendarDate;->setMillis(I)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/CalendarDate;->setMinutes(I)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/CalendarDate;->setMonth(I)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/CalendarDate;->setNormalized(Z)V
+HSPLsun/util/calendar/CalendarDate;->setSeconds(I)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/CalendarDate;->setTimeOfDay(IIII)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/CalendarDate;->setTimeOfDay(J)V
+HSPLsun/util/calendar/CalendarDate;->setYear(I)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/CalendarDate;->setZone(Ljava/util/TimeZone;)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/CalendarDate;->setZoneOffset(I)V
+HSPLsun/util/calendar/CalendarSystem;-><init>()V
+HSPLsun/util/calendar/CalendarSystem;->getEra(Ljava/lang/String;)Lsun/util/calendar/Era;
+HSPLsun/util/calendar/CalendarSystem;->getEras()[Lsun/util/calendar/Era;
+HSPLsun/util/calendar/CalendarSystem;->getGregorianCalendar()Lsun/util/calendar/Gregorian;
+HSPLsun/util/calendar/CalendarSystem;->getMonthLength(Lsun/util/calendar/CalendarDate;)I
+HSPLsun/util/calendar/CalendarSystem;->getNthDayOfWeek(IILsun/util/calendar/CalendarDate;)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/CalendarSystem;->getTime(Lsun/util/calendar/CalendarDate;)J
+HSPLsun/util/calendar/CalendarSystem;->getWeekLength()I
+HSPLsun/util/calendar/CalendarSystem;->getYearLength(Lsun/util/calendar/CalendarDate;)I
+HSPLsun/util/calendar/CalendarSystem;->getYearLengthInMonths(Lsun/util/calendar/CalendarDate;)I
+HSPLsun/util/calendar/CalendarSystem;->setEra(Lsun/util/calendar/CalendarDate;Ljava/lang/String;)V
+HSPLsun/util/calendar/CalendarSystem;->setTimeOfDay(Lsun/util/calendar/CalendarDate;I)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/CalendarUtils;->isGregorianLeapYear(I)Z
+HSPLsun/util/calendar/Gregorian$Date;-><init>(Ljava/util/TimeZone;)V
+HSPLsun/util/calendar/Gregorian$Date;->getNormalizedYear()I
+HSPLsun/util/calendar/Gregorian$Date;->setNormalizedYear(I)V
+HSPLsun/util/calendar/Gregorian;-><init>()V
+HSPLsun/util/calendar/Gregorian;->getCalendarDate(JLjava/util/TimeZone;)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/Gregorian;->getCalendarDate(JLjava/util/TimeZone;)Lsun/util/calendar/Gregorian$Date;
+HSPLsun/util/calendar/Gregorian;->getCalendarDate(JLsun/util/calendar/CalendarDate;)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/Gregorian;->getCalendarDate(JLsun/util/calendar/CalendarDate;)Lsun/util/calendar/Gregorian$Date;
+HSPLsun/util/calendar/Gregorian;->newCalendarDate(Ljava/util/TimeZone;)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/Gregorian;->newCalendarDate(Ljava/util/TimeZone;)Lsun/util/calendar/Gregorian$Date;
+HSPLsun/util/locale/BaseLocale$Cache;->createObject(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLsun/util/locale/BaseLocale$Cache;->createObject(Lsun/util/locale/BaseLocale$Key;)Lsun/util/locale/BaseLocale;
+HSPLsun/util/locale/BaseLocale$Cache;->normalizeKey(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLsun/util/locale/BaseLocale$Cache;->normalizeKey(Lsun/util/locale/BaseLocale$Key;)Lsun/util/locale/BaseLocale$Key;
+HSPLsun/util/locale/BaseLocale$Key;->-get0(Lsun/util/locale/BaseLocale$Key;)Ljava/lang/ref/SoftReference;
+HSPLsun/util/locale/BaseLocale$Key;->-get1(Lsun/util/locale/BaseLocale$Key;)Ljava/lang/ref/SoftReference;
+HSPLsun/util/locale/BaseLocale$Key;->-get2(Lsun/util/locale/BaseLocale$Key;)Ljava/lang/ref/SoftReference;
+HSPLsun/util/locale/BaseLocale$Key;->-get3(Lsun/util/locale/BaseLocale$Key;)Ljava/lang/ref/SoftReference;
+HSPLsun/util/locale/BaseLocale$Key;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLsun/util/locale/BaseLocale$Key;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLsun/util/locale/BaseLocale$Key;->equals(Ljava/lang/Object;)Z
+HSPLsun/util/locale/BaseLocale$Key;->hashCode()I
+HSPLsun/util/locale/BaseLocale$Key;->normalize(Lsun/util/locale/BaseLocale$Key;)Lsun/util/locale/BaseLocale$Key;
+HSPLsun/util/locale/BaseLocale;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLsun/util/locale/BaseLocale;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lsun/util/locale/BaseLocale;)V
+HSPLsun/util/locale/BaseLocale;->equals(Ljava/lang/Object;)Z
+HSPLsun/util/locale/BaseLocale;->getInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lsun/util/locale/BaseLocale;
+HSPLsun/util/locale/BaseLocale;->getLanguage()Ljava/lang/String;
+HSPLsun/util/locale/BaseLocale;->getRegion()Ljava/lang/String;
+HSPLsun/util/locale/BaseLocale;->getScript()Ljava/lang/String;
+HSPLsun/util/locale/BaseLocale;->getVariant()Ljava/lang/String;
+HSPLsun/util/locale/BaseLocale;->hashCode()I
+HSPLsun/util/locale/InternalLocaleBuilder;-><init>()V
+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;->setLanguageTag(Lsun/util/locale/LanguageTag;)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;->getExtensions()Ljava/util/List;
+HSPLsun/util/locale/LanguageTag;->getExtlangs()Ljava/util/List;
+HSPLsun/util/locale/LanguageTag;->getLanguage()Ljava/lang/String;
+HSPLsun/util/locale/LanguageTag;->getPrivateuse()Ljava/lang/String;
+HSPLsun/util/locale/LanguageTag;->getRegion()Ljava/lang/String;
+HSPLsun/util/locale/LanguageTag;->getScript()Ljava/lang/String;
+HSPLsun/util/locale/LanguageTag;->getVariants()Ljava/util/List;
+HSPLsun/util/locale/LanguageTag;->isExtlang(Ljava/lang/String;)Z
+HSPLsun/util/locale/LanguageTag;->isLanguage(Ljava/lang/String;)Z
+HSPLsun/util/locale/LanguageTag;->isRegion(Ljava/lang/String;)Z
+HSPLsun/util/locale/LanguageTag;->isScript(Ljava/lang/String;)Z
+HSPLsun/util/locale/LanguageTag;->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
+HSPLsun/util/locale/LanguageTag;->parseLanguage(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
+HSPLsun/util/locale/LanguageTag;->parseLocale(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)Lsun/util/locale/LanguageTag;
+HSPLsun/util/locale/LanguageTag;->parsePrivateuse(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
+HSPLsun/util/locale/LanguageTag;->parseRegion(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
+HSPLsun/util/locale/LanguageTag;->parseScript(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
+HSPLsun/util/locale/LanguageTag;->parseVariants(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
+HSPLsun/util/locale/LocaleObjectCache$CacheEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)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;->isAlphaString(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
+HSPLsun/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;->toUpper(C)C
+HSPLsun/util/locale/LocaleUtils;->toUpperString(Ljava/lang/String;)Ljava/lang/String;
+HSPLsun/util/locale/ParseStatus;-><init>()V
+HSPLsun/util/locale/ParseStatus;->isError()Z
+HSPLsun/util/locale/ParseStatus;->reset()V
+HSPLsun/util/locale/StringTokenIterator;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLsun/util/locale/StringTokenIterator;->current()Ljava/lang/String;
+HSPLsun/util/locale/StringTokenIterator;->currentEnd()I
+HSPLsun/util/locale/StringTokenIterator;->hasNext()Z
+HSPLsun/util/locale/StringTokenIterator;->isDone()Z
+HSPLsun/util/locale/StringTokenIterator;->next()Ljava/lang/String;
+HSPLsun/util/locale/StringTokenIterator;->nextDelimiter(I)I
+HSPLsun/util/locale/StringTokenIterator;->setStart(I)Lsun/util/locale/StringTokenIterator;
+HSPLsun/util/logging/LoggingProxy;->getLevel(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLsun/util/logging/LoggingProxy;->getLevelName(Ljava/lang/Object;)Ljava/lang/String;
+HSPLsun/util/logging/LoggingProxy;->getLevelValue(Ljava/lang/Object;)I
+HSPLsun/util/logging/LoggingProxy;->getLogger(Ljava/lang/String;)Ljava/lang/Object;
+HSPLsun/util/logging/LoggingProxy;->getLoggerLevel(Ljava/lang/String;)Ljava/lang/String;
+HSPLsun/util/logging/LoggingProxy;->getLoggerNames()Ljava/util/List;
+HSPLsun/util/logging/LoggingProxy;->getParentLoggerName(Ljava/lang/String;)Ljava/lang/String;
+HSPLsun/util/logging/LoggingProxy;->getProperty(Ljava/lang/String;)Ljava/lang/String;
+HSPLsun/util/logging/LoggingProxy;->isLoggable(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLsun/util/logging/LoggingProxy;->log(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;)V
+HSPLsun/util/logging/LoggingProxy;->log(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Throwable;)V
+HSPLsun/util/logging/LoggingProxy;->log(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)V
+HSPLsun/util/logging/LoggingProxy;->parseLevel(Ljava/lang/String;)Ljava/lang/Object;
+HSPLsun/util/logging/LoggingProxy;->setLevel(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLsun/util/logging/LoggingProxy;->setLoggerLevel(Ljava/lang/String;Ljava/lang/String;)V
+HSPLsun/util/logging/LoggingSupport$1;-><init>()V
+HSPLsun/util/logging/LoggingSupport$1;->run()Ljava/lang/Object;
+HSPLsun/util/logging/LoggingSupport$1;->run()Lsun/util/logging/LoggingProxy;
+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;->getSimpleFormat()Ljava/lang/String;
+HSPLsun/util/logging/LoggingSupport;->getSimpleFormat(Z)Ljava/lang/String;
+HSPLsun/util/logging/LoggingSupport;->isAvailable()Z
+HSPLsun/util/logging/PlatformLogger$1;-><init>()V
+HSPLsun/util/logging/PlatformLogger$1;->run()Ljava/lang/Boolean;
+HSPLsun/util/logging/PlatformLogger$1;->run()Ljava/lang/Object;
+HSPLsun/util/logging/PlatformLogger$Level;-><init>(Ljava/lang/String;I)V
+HSPLsun/util/logging/PlatformLogger;->redirectPlatformLoggers()V
+Landroid/R$styleable;
+Landroid/accessibilityservice/AccessibilityServiceInfo$1;
+Landroid/accounts/Account$1;
+Landroid/accounts/Account;
+Landroid/accounts/AccountManager$11;
+Landroid/accounts/AccountManager$1;
+Landroid/accounts/AccountManager$AmsTask$1;
+Landroid/accounts/AccountManager$AmsTask$Response;
+Landroid/accounts/AccountManager$AmsTask;
+Landroid/accounts/AccountManager$BaseFutureTask$1;
+Landroid/accounts/AccountManager$BaseFutureTask$Response;
+Landroid/accounts/AccountManager$BaseFutureTask;
+Landroid/accounts/AccountManager$Future2Task;
+Landroid/accounts/AccountManager;
+Landroid/accounts/AccountManagerFuture;
+Landroid/accounts/AccountsException;
+Landroid/accounts/AuthenticatorException;
+Landroid/accounts/IAccountManager$Stub$Proxy;
+Landroid/accounts/IAccountManager$Stub;
+Landroid/accounts/IAccountManager;
+Landroid/accounts/IAccountManagerResponse$Stub;
+Landroid/accounts/IAccountManagerResponse;
+Landroid/accounts/OnAccountsUpdateListener;
+Landroid/accounts/OperationCanceledException;
+Landroid/animation/AnimationHandler$1;
+Landroid/animation/AnimationHandler$AnimationFrameCallback;
+Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;
+Landroid/animation/AnimationHandler$MyFrameCallbackProvider;
+Landroid/animation/AnimationHandler;
+Landroid/animation/Animator$AnimatorConstantState;
+Landroid/animation/Animator$AnimatorListener;
+Landroid/animation/Animator$AnimatorPauseListener;
+Landroid/animation/Animator;
+Landroid/animation/AnimatorInflater$PathDataEvaluator;
+Landroid/animation/AnimatorInflater;
+Landroid/animation/AnimatorListenerAdapter;
+Landroid/animation/AnimatorSet$1;
+Landroid/animation/AnimatorSet$2;
+Landroid/animation/AnimatorSet$3;
+Landroid/animation/AnimatorSet$AnimationEvent;
+Landroid/animation/AnimatorSet$Builder;
+Landroid/animation/AnimatorSet$Node;
+Landroid/animation/AnimatorSet$SeekState;
+Landroid/animation/AnimatorSet;
+Landroid/animation/FloatEvaluator;
+Landroid/animation/FloatKeyframeSet;
+Landroid/animation/IntEvaluator;
+Landroid/animation/IntKeyframeSet;
+Landroid/animation/Keyframe$FloatKeyframe;
+Landroid/animation/Keyframe$IntKeyframe;
+Landroid/animation/Keyframe$ObjectKeyframe;
+Landroid/animation/Keyframe;
+Landroid/animation/KeyframeSet;
+Landroid/animation/Keyframes$FloatKeyframes;
+Landroid/animation/Keyframes$IntKeyframes;
+Landroid/animation/Keyframes;
+Landroid/animation/LayoutTransition$TransitionListener;
+Landroid/animation/ObjectAnimator;
+Landroid/animation/PathKeyframes$1;
+Landroid/animation/PathKeyframes$2;
+Landroid/animation/PathKeyframes$FloatKeyframesBase;
+Landroid/animation/PathKeyframes$IntKeyframesBase;
+Landroid/animation/PathKeyframes$SimpleKeyframes;
+Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;
+Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;
+Landroid/animation/PropertyValuesHolder$PropertyValues;
+Landroid/animation/PropertyValuesHolder;
+Landroid/animation/RectEvaluator;
+Landroid/animation/StateListAnimator$1;
+Landroid/animation/StateListAnimator$StateListAnimatorConstantState;
+Landroid/animation/StateListAnimator$Tuple;
+Landroid/animation/StateListAnimator;
+Landroid/animation/TimeAnimator$TimeListener;
+Landroid/animation/TimeAnimator;
+Landroid/animation/TimeInterpolator;
+Landroid/animation/TypeEvaluator;
+Landroid/animation/ValueAnimator$AnimatorUpdateListener;
+Landroid/animation/ValueAnimator;
+Landroid/app/-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU$1;
+Landroid/app/-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU;
+Landroid/app/-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ;
+Landroid/app/-$Lambda$c44uHH2WE4sJvw5tZZB6gRzEaHI;
+Landroid/app/-$Lambda$vZ1qb742P9hE4drBY-TrOZB_qKo;
+Landroid/app/ActionBar$LayoutParams;
+Landroid/app/ActionBar;
+Landroid/app/Activity$HostCallbacks;
+Landroid/app/Activity;
+Landroid/app/ActivityManager$1;
+Landroid/app/ActivityManager$AppTask;
+Landroid/app/ActivityManager$MemoryInfo$1;
+Landroid/app/ActivityManager$RecentTaskInfo$1;
+Landroid/app/ActivityManager$RunningAppProcessInfo$1;
+Landroid/app/ActivityManager$RunningAppProcessInfo;
+Landroid/app/ActivityManager$RunningTaskInfo$1;
+Landroid/app/ActivityManager$StackId;
+Landroid/app/ActivityManager$TaskDescription$1;
+Landroid/app/ActivityManager$TaskDescription;
+Landroid/app/ActivityManager;
+Landroid/app/ActivityOptions;
+Landroid/app/ActivityThread$1;
+Landroid/app/ActivityThread$2;
+Landroid/app/ActivityThread$ActivityClientRecord;
+Landroid/app/ActivityThread$ActivityConfigChangeData;
+Landroid/app/ActivityThread$AppBindData;
+Landroid/app/ActivityThread$ApplicationThread;
+Landroid/app/ActivityThread$BindServiceData;
+Landroid/app/ActivityThread$ContextCleanupInfo;
+Landroid/app/ActivityThread$CreateServiceData;
+Landroid/app/ActivityThread$DropBoxReporter;
+Landroid/app/ActivityThread$EventLoggingReporter;
+Landroid/app/ActivityThread$GcIdler;
+Landroid/app/ActivityThread$H;
+Landroid/app/ActivityThread$Idler;
+Landroid/app/ActivityThread$NewIntentData;
+Landroid/app/ActivityThread$Profiler;
+Landroid/app/ActivityThread$ProviderClientRecord;
+Landroid/app/ActivityThread$ProviderKey;
+Landroid/app/ActivityThread$ProviderRefCount;
+Landroid/app/ActivityThread$ReceiverData;
+Landroid/app/ActivityThread$RequestAssistContextExtras;
+Landroid/app/ActivityThread$ServiceArgsData;
+Landroid/app/ActivityThread$StopInfo;
+Landroid/app/ActivityThread;
+Landroid/app/ActivityTransitionState;
+Landroid/app/AlarmManager$ListenerWrapper;
+Landroid/app/AlarmManager;
+Landroid/app/AlertDialog$Builder;
+Landroid/app/AlertDialog;
+Landroid/app/AppGlobals;
+Landroid/app/AppOpsManager$OnOpChangedListener;
+Landroid/app/AppOpsManager;
+Landroid/app/Application$ActivityLifecycleCallbacks;
+Landroid/app/Application;
+Landroid/app/ApplicationErrorReport$CrashInfo;
+Landroid/app/ApplicationLoaders;
+Landroid/app/ApplicationPackageManager$ResourceName;
+Landroid/app/ApplicationPackageManager;
+Landroid/app/BackStackRecord$Op;
+Landroid/app/BackStackRecord;
+Landroid/app/ContentProviderHolder$1;
+Landroid/app/ContentProviderHolder;
+Landroid/app/ContextImpl$1;
+Landroid/app/ContextImpl$ApplicationContentResolver;
+Landroid/app/ContextImpl;
+Landroid/app/DexLoadReporter;
+Landroid/app/Dialog$ListenersHandler;
+Landroid/app/Dialog;
+Landroid/app/DialogFragment;
+Landroid/app/DownloadManager;
+Landroid/app/Fragment$1;
+Landroid/app/Fragment$AnimationInfo;
+Landroid/app/Fragment;
+Landroid/app/FragmentContainer;
+Landroid/app/FragmentController;
+Landroid/app/FragmentHostCallback;
+Landroid/app/FragmentManager$BackStackEntry;
+Landroid/app/FragmentManager;
+Landroid/app/FragmentManagerImpl$1;
+Landroid/app/FragmentManagerImpl$OpGenerator;
+Landroid/app/FragmentManagerImpl;
+Landroid/app/FragmentManagerState$1;
+Landroid/app/FragmentState$1;
+Landroid/app/FragmentTransaction;
+Landroid/app/FragmentTransition$FragmentContainerTransition;
+Landroid/app/IActivityManager$Stub$Proxy;
+Landroid/app/IActivityManager$Stub;
+Landroid/app/IActivityManager;
+Landroid/app/IAlarmListener$Stub;
+Landroid/app/IAlarmListener;
+Landroid/app/IAlarmManager$Stub$Proxy;
+Landroid/app/IAlarmManager$Stub;
+Landroid/app/IAlarmManager;
+Landroid/app/IAppTask$Stub$Proxy;
+Landroid/app/IAppTask$Stub;
+Landroid/app/IAppTask;
+Landroid/app/IApplicationThread$Stub;
+Landroid/app/IApplicationThread;
+Landroid/app/IInstrumentationWatcher$Stub;
+Landroid/app/IInstrumentationWatcher;
+Landroid/app/INotificationManager$Stub$Proxy;
+Landroid/app/INotificationManager$Stub;
+Landroid/app/INotificationManager;
+Landroid/app/IServiceConnection$Stub;
+Landroid/app/IServiceConnection;
+Landroid/app/IUiAutomationConnection$Stub;
+Landroid/app/IUiAutomationConnection;
+Landroid/app/IUiModeManager$Stub$Proxy;
+Landroid/app/IUiModeManager$Stub;
+Landroid/app/IUiModeManager;
+Landroid/app/IUserSwitchObserver$Stub;
+Landroid/app/IUserSwitchObserver;
+Landroid/app/IWallpaperManager$Stub$Proxy;
+Landroid/app/IWallpaperManager$Stub;
+Landroid/app/IWallpaperManager;
+Landroid/app/IWallpaperManagerCallback$Stub;
+Landroid/app/IWallpaperManagerCallback;
+Landroid/app/Instrumentation;
+Landroid/app/IntentReceiverLeaked;
+Landroid/app/IntentService$ServiceHandler;
+Landroid/app/IntentService;
+Landroid/app/JobSchedulerImpl;
+Landroid/app/KeyguardManager;
+Landroid/app/LoadedApk$ReceiverDispatcher$Args;
+Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;
+Landroid/app/LoadedApk$ReceiverDispatcher;
+Landroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo;
+Landroid/app/LoadedApk$ServiceDispatcher$DeathMonitor;
+Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;
+Landroid/app/LoadedApk$ServiceDispatcher$RunConnection;
+Landroid/app/LoadedApk$ServiceDispatcher;
+Landroid/app/LoadedApk$WarningContextClassLoader;
+Landroid/app/LoadedApk;
+Landroid/app/LoaderManager$LoaderCallbacks;
+Landroid/app/LoaderManager;
+Landroid/app/LoaderManagerImpl$LoaderInfo;
+Landroid/app/LoaderManagerImpl;
+Landroid/app/NativeActivity;
+Landroid/app/Notification$1;
+Landroid/app/Notification$Action$1;
+Landroid/app/Notification$BuilderRemoteViews;
+Landroid/app/Notification$StandardTemplateParams;
+Landroid/app/Notification;
+Landroid/app/NotificationChannel$1;
+Landroid/app/NotificationChannel;
+Landroid/app/NotificationChannelGroup$1;
+Landroid/app/NotificationManager;
+Landroid/app/OnActivityPausedListener;
+Landroid/app/PendingIntent$1;
+Landroid/app/PendingIntent$CanceledException;
+Landroid/app/PendingIntent$OnMarshaledListener;
+Landroid/app/PendingIntent;
+Landroid/app/QueuedWork$QueuedWorkHandler;
+Landroid/app/QueuedWork;
+Landroid/app/ReceiverRestrictedContext;
+Landroid/app/RemoteInput$1;
+Landroid/app/ResourcesManager$1;
+Landroid/app/ResourcesManager$ActivityResources;
+Landroid/app/ResourcesManager;
+Landroid/app/ResultInfo$1;
+Landroid/app/ResultInfo;
+Landroid/app/SearchManager;
+Landroid/app/Service;
+Landroid/app/ServiceConnectionLeaked;
+Landroid/app/ServiceStartArgs$1;
+Landroid/app/ServiceStartArgs;
+Landroid/app/SharedElementCallback$1;
+Landroid/app/SharedElementCallback;
+Landroid/app/SharedPreferencesImpl$1;
+Landroid/app/SharedPreferencesImpl$2;
+Landroid/app/SharedPreferencesImpl$EditorImpl$1;
+Landroid/app/SharedPreferencesImpl$EditorImpl$2;
+Landroid/app/SharedPreferencesImpl$EditorImpl$3;
+Landroid/app/SharedPreferencesImpl$EditorImpl;
+Landroid/app/SharedPreferencesImpl$MemoryCommitResult;
+Landroid/app/SharedPreferencesImpl;
+Landroid/app/StatusBarManager;
+Landroid/app/SystemServiceRegistry$10;
+Landroid/app/SystemServiceRegistry$11;
+Landroid/app/SystemServiceRegistry$12;
+Landroid/app/SystemServiceRegistry$13;
+Landroid/app/SystemServiceRegistry$14;
+Landroid/app/SystemServiceRegistry$15;
+Landroid/app/SystemServiceRegistry$16;
+Landroid/app/SystemServiceRegistry$17;
+Landroid/app/SystemServiceRegistry$18;
+Landroid/app/SystemServiceRegistry$19;
+Landroid/app/SystemServiceRegistry$1;
+Landroid/app/SystemServiceRegistry$20;
+Landroid/app/SystemServiceRegistry$21;
+Landroid/app/SystemServiceRegistry$22;
+Landroid/app/SystemServiceRegistry$23;
+Landroid/app/SystemServiceRegistry$24;
+Landroid/app/SystemServiceRegistry$25;
+Landroid/app/SystemServiceRegistry$26;
+Landroid/app/SystemServiceRegistry$27;
+Landroid/app/SystemServiceRegistry$28;
+Landroid/app/SystemServiceRegistry$29;
+Landroid/app/SystemServiceRegistry$2;
+Landroid/app/SystemServiceRegistry$30;
+Landroid/app/SystemServiceRegistry$31;
+Landroid/app/SystemServiceRegistry$32;
+Landroid/app/SystemServiceRegistry$33;
+Landroid/app/SystemServiceRegistry$34;
+Landroid/app/SystemServiceRegistry$35;
+Landroid/app/SystemServiceRegistry$36;
+Landroid/app/SystemServiceRegistry$37;
+Landroid/app/SystemServiceRegistry$38;
+Landroid/app/SystemServiceRegistry$39;
+Landroid/app/SystemServiceRegistry$3;
+Landroid/app/SystemServiceRegistry$40;
+Landroid/app/SystemServiceRegistry$41;
+Landroid/app/SystemServiceRegistry$42;
+Landroid/app/SystemServiceRegistry$43;
+Landroid/app/SystemServiceRegistry$44;
+Landroid/app/SystemServiceRegistry$45;
+Landroid/app/SystemServiceRegistry$46;
+Landroid/app/SystemServiceRegistry$47;
+Landroid/app/SystemServiceRegistry$48;
+Landroid/app/SystemServiceRegistry$49;
+Landroid/app/SystemServiceRegistry$4;
+Landroid/app/SystemServiceRegistry$50;
+Landroid/app/SystemServiceRegistry$51;
+Landroid/app/SystemServiceRegistry$52;
+Landroid/app/SystemServiceRegistry$53;
+Landroid/app/SystemServiceRegistry$54;
+Landroid/app/SystemServiceRegistry$55;
+Landroid/app/SystemServiceRegistry$56;
+Landroid/app/SystemServiceRegistry$57;
+Landroid/app/SystemServiceRegistry$58;
+Landroid/app/SystemServiceRegistry$59;
+Landroid/app/SystemServiceRegistry$5;
+Landroid/app/SystemServiceRegistry$60;
+Landroid/app/SystemServiceRegistry$61;
+Landroid/app/SystemServiceRegistry$62;
+Landroid/app/SystemServiceRegistry$63;
+Landroid/app/SystemServiceRegistry$64;
+Landroid/app/SystemServiceRegistry$65;
+Landroid/app/SystemServiceRegistry$66;
+Landroid/app/SystemServiceRegistry$67;
+Landroid/app/SystemServiceRegistry$68;
+Landroid/app/SystemServiceRegistry$69;
+Landroid/app/SystemServiceRegistry$6;
+Landroid/app/SystemServiceRegistry$70;
+Landroid/app/SystemServiceRegistry$71;
+Landroid/app/SystemServiceRegistry$72;
+Landroid/app/SystemServiceRegistry$73;
+Landroid/app/SystemServiceRegistry$74;
+Landroid/app/SystemServiceRegistry$75;
+Landroid/app/SystemServiceRegistry$76;
+Landroid/app/SystemServiceRegistry$77;
+Landroid/app/SystemServiceRegistry$78;
+Landroid/app/SystemServiceRegistry$79;
+Landroid/app/SystemServiceRegistry$7;
+Landroid/app/SystemServiceRegistry$80;
+Landroid/app/SystemServiceRegistry$81;
+Landroid/app/SystemServiceRegistry$82;
+Landroid/app/SystemServiceRegistry$83;
+Landroid/app/SystemServiceRegistry$84;
+Landroid/app/SystemServiceRegistry$85;
+Landroid/app/SystemServiceRegistry$8;
+Landroid/app/SystemServiceRegistry$9;
+Landroid/app/SystemServiceRegistry$CachedServiceFetcher;
+Landroid/app/SystemServiceRegistry$ServiceFetcher;
+Landroid/app/SystemServiceRegistry$StaticApplicationContextServiceFetcher;
+Landroid/app/SystemServiceRegistry$StaticServiceFetcher;
+Landroid/app/SystemServiceRegistry;
+Landroid/app/UiModeManager;
+Landroid/app/UserSwitchObserver;
+Landroid/app/VrManager;
+Landroid/app/WallpaperColors$1;
+Landroid/app/WallpaperInfo$1;
+Landroid/app/WallpaperManager$Globals;
+Landroid/app/WallpaperManager;
+Landroid/app/admin/DevicePolicyManager;
+Landroid/app/admin/IDevicePolicyManager$Stub$Proxy;
+Landroid/app/admin/IDevicePolicyManager$Stub;
+Landroid/app/admin/IDevicePolicyManager;
+Landroid/app/admin/SecurityLog$SecurityEvent$1;
+Landroid/app/admin/SecurityLog$SecurityEvent;
+Landroid/app/admin/SecurityLog;
+Landroid/app/assist/AssistStructure$1;
+Landroid/app/assist/AssistStructure$ParcelTransferWriter;
+Landroid/app/assist/AssistStructure$SendChannel;
+Landroid/app/assist/AssistStructure$ViewNode;
+Landroid/app/assist/AssistStructure$ViewNodeBuilder;
+Landroid/app/assist/AssistStructure$ViewNodeText;
+Landroid/app/assist/AssistStructure$ViewStackEntry;
+Landroid/app/assist/AssistStructure$WindowNode;
+Landroid/app/backup/BackupAgent;
+Landroid/app/backup/BackupAgentHelper;
+Landroid/app/backup/BackupDataInput$EntityHeader;
+Landroid/app/backup/BackupDataInput;
+Landroid/app/backup/BackupDataOutput;
+Landroid/app/backup/BackupHelperDispatcher$Header;
+Landroid/app/backup/BackupHelperDispatcher;
+Landroid/app/backup/BackupManager;
+Landroid/app/backup/FileBackupHelperBase;
+Landroid/app/backup/FullBackup;
+Landroid/app/backup/FullBackupDataOutput;
+Landroid/app/backup/IBackupManager$Stub$Proxy;
+Landroid/app/backup/IBackupManager$Stub;
+Landroid/app/backup/IBackupManager;
+Landroid/app/job/IJobCallback$Stub$Proxy;
+Landroid/app/job/IJobCallback$Stub;
+Landroid/app/job/IJobCallback;
+Landroid/app/job/IJobScheduler$Stub$Proxy;
+Landroid/app/job/IJobScheduler$Stub;
+Landroid/app/job/IJobScheduler;
+Landroid/app/job/IJobService$Stub;
+Landroid/app/job/IJobService;
+Landroid/app/job/JobInfo$1;
+Landroid/app/job/JobInfo$Builder;
+Landroid/app/job/JobInfo$TriggerContentUri$1;
+Landroid/app/job/JobInfo;
+Landroid/app/job/JobParameters$1;
+Landroid/app/job/JobParameters;
+Landroid/app/job/JobScheduler;
+Landroid/app/job/JobService$1;
+Landroid/app/job/JobService;
+Landroid/app/job/JobServiceEngine$JobHandler;
+Landroid/app/job/JobServiceEngine$JobInterface;
+Landroid/app/job/JobServiceEngine;
+Landroid/app/timezone/RulesManager;
+Landroid/app/trust/ITrustManager$Stub$Proxy;
+Landroid/app/trust/ITrustManager$Stub;
+Landroid/app/trust/ITrustManager;
+Landroid/app/trust/TrustManager;
+Landroid/app/usage/IStorageStatsManager$Stub;
+Landroid/app/usage/IStorageStatsManager;
+Landroid/app/usage/NetworkStatsManager;
+Landroid/app/usage/StorageStatsManager;
+Landroid/app/usage/UsageStatsManager;
+Landroid/appwidget/AppWidgetManager;
+Landroid/appwidget/AppWidgetProvider;
+Landroid/bluetooth/BluetoothA2dp$1;
+Landroid/bluetooth/BluetoothA2dp$2;
+Landroid/bluetooth/BluetoothA2dp;
+Landroid/bluetooth/BluetoothAdapter$1;
+Landroid/bluetooth/BluetoothDevice$1;
+Landroid/bluetooth/BluetoothDevice$2;
+Landroid/bluetooth/BluetoothHeadset$1;
+Landroid/bluetooth/BluetoothHeadset$2;
+Landroid/bluetooth/BluetoothHeadset$3;
+Landroid/bluetooth/BluetoothHeadset;
+Landroid/bluetooth/BluetoothManager;
+Landroid/bluetooth/BluetoothProfile$ServiceListener;
+Landroid/bluetooth/BluetoothProfile;
+Landroid/bluetooth/IBluetooth$Stub$Proxy;
+Landroid/bluetooth/IBluetooth$Stub;
+Landroid/bluetooth/IBluetooth;
+Landroid/bluetooth/IBluetoothA2dp$Stub$Proxy;
+Landroid/bluetooth/IBluetoothA2dp$Stub;
+Landroid/bluetooth/IBluetoothA2dp;
+Landroid/bluetooth/IBluetoothGatt$Stub;
+Landroid/bluetooth/IBluetoothGatt;
+Landroid/bluetooth/IBluetoothHeadset$Stub$Proxy;
+Landroid/bluetooth/IBluetoothHeadset$Stub;
+Landroid/bluetooth/IBluetoothHeadset;
+Landroid/bluetooth/IBluetoothManager$Stub$Proxy;
+Landroid/bluetooth/IBluetoothManager$Stub;
+Landroid/bluetooth/IBluetoothManager;
+Landroid/bluetooth/IBluetoothManagerCallback$Stub;
+Landroid/bluetooth/IBluetoothManagerCallback;
+Landroid/bluetooth/IBluetoothProfileServiceConnection$Stub;
+Landroid/bluetooth/IBluetoothProfileServiceConnection;
+Landroid/bluetooth/IBluetoothStateChangeCallback$Stub;
+Landroid/bluetooth/IBluetoothStateChangeCallback;
+Landroid/companion/CompanionDeviceManager;
+Landroid/content/AbstractThreadedSyncAdapter$ISyncAdapterImpl;
+Landroid/content/ActivityNotFoundException;
+Landroid/content/AsyncQueryHandler$WorkerArgs;
+Landroid/content/AsyncQueryHandler$WorkerHandler;
+Landroid/content/AsyncTaskLoader$LoadTask;
+Landroid/content/AsyncTaskLoader;
+Landroid/content/BroadcastReceiver$PendingResult$1;
+Landroid/content/BroadcastReceiver$PendingResult;
+Landroid/content/BroadcastReceiver;
+Landroid/content/ClipboardManager$1;
+Landroid/content/ClipboardManager$2;
+Landroid/content/ClipboardManager;
+Landroid/content/ComponentCallbacks2;
+Landroid/content/ComponentCallbacks;
+Landroid/content/ComponentName$1;
+Landroid/content/ComponentName;
+Landroid/content/ContentProvider$PipeDataWriter;
+Landroid/content/ContentProvider$Transport;
+Landroid/content/ContentProvider;
+Landroid/content/ContentProviderClient;
+Landroid/content/ContentProviderNative;
+Landroid/content/ContentProviderProxy;
+Landroid/content/ContentResolver$1;
+Landroid/content/ContentResolver$CursorWrapperInner;
+Landroid/content/ContentResolver$ParcelFileDescriptorInner;
+Landroid/content/ContentResolver;
+Landroid/content/ContentUris;
+Landroid/content/ContentValues$1;
+Landroid/content/ContentValues;
+Landroid/content/Context;
+Landroid/content/ContextWrapper;
+Landroid/content/CursorLoader;
+Landroid/content/DialogInterface$OnCancelListener;
+Landroid/content/DialogInterface$OnClickListener;
+Landroid/content/DialogInterface$OnDismissListener;
+Landroid/content/DialogInterface;
+Landroid/content/IClipboard$Stub$Proxy;
+Landroid/content/IClipboard$Stub;
+Landroid/content/IClipboard;
+Landroid/content/IContentProvider;
+Landroid/content/IContentService$Stub$Proxy;
+Landroid/content/IContentService$Stub;
+Landroid/content/IContentService;
+Landroid/content/IIntentReceiver$Stub;
+Landroid/content/IIntentReceiver;
+Landroid/content/IIntentSender$Stub$Proxy;
+Landroid/content/IIntentSender$Stub;
+Landroid/content/IIntentSender;
+Landroid/content/IOnPrimaryClipChangedListener$Stub;
+Landroid/content/IOnPrimaryClipChangedListener;
+Landroid/content/IRestrictionsManager$Stub;
+Landroid/content/IRestrictionsManager;
+Landroid/content/ISyncAdapter$Stub;
+Landroid/content/ISyncAdapter;
+Landroid/content/ISyncContext$Stub;
+Landroid/content/ISyncContext;
+Landroid/content/ISyncStatusObserver$Stub;
+Landroid/content/ISyncStatusObserver;
+Landroid/content/Intent$1;
+Landroid/content/Intent;
+Landroid/content/IntentFilter$1;
+Landroid/content/IntentFilter$MalformedMimeTypeException;
+Landroid/content/IntentFilter;
+Landroid/content/IntentSender$SendIntentException;
+Landroid/content/IntentSender;
+Landroid/content/Loader$ForceLoadContentObserver;
+Landroid/content/Loader$OnLoadCanceledListener;
+Landroid/content/Loader$OnLoadCompleteListener;
+Landroid/content/Loader;
+Landroid/content/OperationApplicationException;
+Landroid/content/RestrictionsManager;
+Landroid/content/ServiceConnection;
+Landroid/content/SharedPreferences$Editor;
+Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;
+Landroid/content/SharedPreferences;
+Landroid/content/SyncRequest$1;
+Landroid/content/SyncResult$1;
+Landroid/content/SyncStats$1;
+Landroid/content/SyncStatusObserver;
+Landroid/content/UndoManager;
+Landroid/content/UndoOwner;
+Landroid/content/UriMatcher;
+Landroid/content/pm/ActivityInfo$1;
+Landroid/content/pm/ActivityInfo$WindowLayout;
+Landroid/content/pm/ActivityInfo;
+Landroid/content/pm/ApplicationInfo$1;
+Landroid/content/pm/ApplicationInfo;
+Landroid/content/pm/BaseParceledListSlice;
+Landroid/content/pm/ComponentInfo;
+Landroid/content/pm/ConfigurationInfo$1;
+Landroid/content/pm/ConfigurationInfo;
+Landroid/content/pm/FeatureGroupInfo$1;
+Landroid/content/pm/FeatureGroupInfo;
+Landroid/content/pm/FeatureInfo$1;
+Landroid/content/pm/FeatureInfo;
+Landroid/content/pm/IPackageInstaller$Stub$Proxy;
+Landroid/content/pm/IPackageInstaller$Stub;
+Landroid/content/pm/IPackageInstaller;
+Landroid/content/pm/IPackageManager$Stub$Proxy;
+Landroid/content/pm/IPackageManager$Stub;
+Landroid/content/pm/IPackageManager;
+Landroid/content/pm/IShortcutService$Stub$Proxy;
+Landroid/content/pm/IShortcutService$Stub;
+Landroid/content/pm/IShortcutService;
+Landroid/content/pm/InstrumentationInfo$1;
+Landroid/content/pm/InstrumentationInfo;
+Landroid/content/pm/LauncherApps;
+Landroid/content/pm/PackageInfo$1;
+Landroid/content/pm/PackageInfo;
+Landroid/content/pm/PackageItemInfo;
+Landroid/content/pm/PackageManager$NameNotFoundException;
+Landroid/content/pm/PackageManager;
+Landroid/content/pm/PackageParser$PackageParserException;
+Landroid/content/pm/ParceledListSlice$1;
+Landroid/content/pm/ParceledListSlice;
+Landroid/content/pm/PathPermission$1;
+Landroid/content/pm/PathPermission;
+Landroid/content/pm/PermissionInfo$1;
+Landroid/content/pm/PermissionInfo;
+Landroid/content/pm/ProviderInfo$1;
+Landroid/content/pm/ProviderInfo;
+Landroid/content/pm/ResolveInfo$1;
+Landroid/content/pm/ResolveInfo;
+Landroid/content/pm/ServiceInfo$1;
+Landroid/content/pm/ServiceInfo;
+Landroid/content/pm/ShortcutInfo$1;
+Landroid/content/pm/ShortcutManager;
+Landroid/content/pm/Signature$1;
+Landroid/content/pm/Signature;
+Landroid/content/pm/UserInfo$1;
+Landroid/content/res/AssetFileDescriptor$1;
+Landroid/content/res/AssetFileDescriptor;
+Landroid/content/res/AssetManager$AssetInputStream;
+Landroid/content/res/AssetManager;
+Landroid/content/res/ColorStateList$1;
+Landroid/content/res/ColorStateList$ColorStateListFactory;
+Landroid/content/res/ColorStateList;
+Landroid/content/res/CompatResources;
+Landroid/content/res/CompatibilityInfo$1;
+Landroid/content/res/CompatibilityInfo$2;
+Landroid/content/res/CompatibilityInfo;
+Landroid/content/res/ComplexColor;
+Landroid/content/res/Configuration$1;
+Landroid/content/res/Configuration;
+Landroid/content/res/ConfigurationBoundResourceCache;
+Landroid/content/res/ConstantState;
+Landroid/content/res/DrawableCache;
+Landroid/content/res/GradientColor;
+Landroid/content/res/ObbInfo$1;
+Landroid/content/res/ObbInfo;
+Landroid/content/res/ObbScanner;
+Landroid/content/res/ResourceId;
+Landroid/content/res/Resources$NotFoundException;
+Landroid/content/res/Resources$Theme;
+Landroid/content/res/Resources$ThemeKey;
+Landroid/content/res/Resources;
+Landroid/content/res/ResourcesImpl$ThemeImpl;
+Landroid/content/res/ResourcesImpl;
+Landroid/content/res/ResourcesKey;
+Landroid/content/res/StringBlock;
+Landroid/content/res/ThemedResourceCache;
+Landroid/content/res/TypedArray;
+Landroid/content/res/XmlBlock$Parser;
+Landroid/content/res/XmlBlock;
+Landroid/content/res/XmlResourceParser;
+Landroid/database/AbstractCursor$SelfContentObserver;
+Landroid/database/AbstractCursor;
+Landroid/database/AbstractWindowedCursor;
+Landroid/database/BulkCursorDescriptor$1;
+Landroid/database/BulkCursorDescriptor;
+Landroid/database/BulkCursorNative;
+Landroid/database/BulkCursorProxy;
+Landroid/database/BulkCursorToCursorAdaptor;
+Landroid/database/CharArrayBuffer;
+Landroid/database/ContentObservable;
+Landroid/database/ContentObserver$NotificationRunnable;
+Landroid/database/ContentObserver$Transport;
+Landroid/database/ContentObserver;
+Landroid/database/CrossProcessCursor;
+Landroid/database/CrossProcessCursorWrapper;
+Landroid/database/Cursor;
+Landroid/database/CursorToBulkCursorAdaptor$ContentObserverProxy;
+Landroid/database/CursorToBulkCursorAdaptor;
+Landroid/database/CursorWindow$1;
+Landroid/database/CursorWindow;
+Landroid/database/CursorWrapper;
+Landroid/database/DataSetObservable;
+Landroid/database/DataSetObserver;
+Landroid/database/DatabaseErrorHandler;
+Landroid/database/DatabaseUtils;
+Landroid/database/DefaultDatabaseErrorHandler;
+Landroid/database/IBulkCursor;
+Landroid/database/IContentObserver$Stub$Proxy;
+Landroid/database/IContentObserver$Stub;
+Landroid/database/IContentObserver;
+Landroid/database/MatrixCursor;
+Landroid/database/MergeCursor$1;
+Landroid/database/MergeCursor;
+Landroid/database/Observable;
+Landroid/database/SQLException;
+Landroid/database/sqlite/-$Lambda$gPaS7kMbZ8xtrrEx06GlwJ2iDWE;
+Landroid/database/sqlite/DatabaseObjectNotClosedException;
+Landroid/database/sqlite/SQLiteClosable;
+Landroid/database/sqlite/SQLiteConnection$Operation;
+Landroid/database/sqlite/SQLiteConnection$OperationLog;
+Landroid/database/sqlite/SQLiteConnection$PreparedStatement;
+Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;
+Landroid/database/sqlite/SQLiteConnection;
+Landroid/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;
+Landroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;
+Landroid/database/sqlite/SQLiteConnectionPool$IdleConnectionHandler;
+Landroid/database/sqlite/SQLiteConnectionPool;
+Landroid/database/sqlite/SQLiteCursor;
+Landroid/database/sqlite/SQLiteCursorDriver;
+Landroid/database/sqlite/SQLiteCustomFunction;
+Landroid/database/sqlite/SQLiteDatabase$CursorFactory;
+Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;
+Landroid/database/sqlite/SQLiteDatabase$OpenParams;
+Landroid/database/sqlite/SQLiteDatabase;
+Landroid/database/sqlite/SQLiteDatabaseConfiguration;
+Landroid/database/sqlite/SQLiteDatabaseCorruptException;
+Landroid/database/sqlite/SQLiteDatabaseLockedException;
+Landroid/database/sqlite/SQLiteDebug$PagerStats;
+Landroid/database/sqlite/SQLiteDebug;
+Landroid/database/sqlite/SQLiteDirectCursorDriver;
+Landroid/database/sqlite/SQLiteDoneException;
+Landroid/database/sqlite/SQLiteException;
+Landroid/database/sqlite/SQLiteFullException;
+Landroid/database/sqlite/SQLiteGlobal;
+Landroid/database/sqlite/SQLiteOpenHelper;
+Landroid/database/sqlite/SQLiteProgram;
+Landroid/database/sqlite/SQLiteQuery;
+Landroid/database/sqlite/SQLiteQueryBuilder;
+Landroid/database/sqlite/SQLiteSession$Transaction;
+Landroid/database/sqlite/SQLiteSession;
+Landroid/database/sqlite/SQLiteStatement;
+Landroid/database/sqlite/SQLiteStatementInfo;
+Landroid/database/sqlite/SQLiteTransactionListener;
+Landroid/ddm/DdmHandleAppName;
+Landroid/ddm/DdmHandleExit;
+Landroid/ddm/DdmHandleHeap;
+Landroid/ddm/DdmHandleHello;
+Landroid/ddm/DdmHandleNativeHeap;
+Landroid/ddm/DdmHandleProfiling;
+Landroid/ddm/DdmHandleThread;
+Landroid/ddm/DdmHandleViewDebug;
+Landroid/ddm/DdmRegister;
+Landroid/graphics/-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$1;
+Landroid/graphics/-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$2;
+Landroid/graphics/-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8;
+Landroid/graphics/BaseCanvas;
+Landroid/graphics/Bitmap$1;
+Landroid/graphics/Bitmap$Config;
+Landroid/graphics/Bitmap;
+Landroid/graphics/BitmapFactory$Options;
+Landroid/graphics/BitmapFactory;
+Landroid/graphics/BitmapRegionDecoder;
+Landroid/graphics/BitmapShader;
+Landroid/graphics/BlurMaskFilter;
+Landroid/graphics/Camera;
+Landroid/graphics/Canvas$EdgeType;
+Landroid/graphics/Canvas$NoImagePreloadHolder;
+Landroid/graphics/Canvas;
+Landroid/graphics/CanvasProperty;
+Landroid/graphics/Color;
+Landroid/graphics/ColorFilter$NoImagePreloadHolder;
+Landroid/graphics/ColorFilter;
+Landroid/graphics/ColorMatrix;
+Landroid/graphics/ColorMatrixColorFilter;
+Landroid/graphics/ColorSpace$Lab;
+Landroid/graphics/ColorSpace$Model;
+Landroid/graphics/ColorSpace$Named;
+Landroid/graphics/ColorSpace$Rgb$TransferParameters;
+Landroid/graphics/ColorSpace$Rgb;
+Landroid/graphics/ColorSpace$Xyz;
+Landroid/graphics/ColorSpace;
+Landroid/graphics/ComposePathEffect;
+Landroid/graphics/ComposeShader;
+Landroid/graphics/CornerPathEffect;
+Landroid/graphics/DashPathEffect;
+Landroid/graphics/DiscretePathEffect;
+Landroid/graphics/DrawFilter;
+Landroid/graphics/EmbossMaskFilter;
+Landroid/graphics/FontFamily;
+Landroid/graphics/FontListParser;
+Landroid/graphics/GraphicBuffer$1;
+Landroid/graphics/GraphicBuffer;
+Landroid/graphics/Insets;
+Landroid/graphics/Interpolator;
+Landroid/graphics/LightingColorFilter;
+Landroid/graphics/LinearGradient;
+Landroid/graphics/MaskFilter;
+Landroid/graphics/Matrix$1;
+Landroid/graphics/Matrix$NoImagePreloadHolder;
+Landroid/graphics/Matrix$ScaleToFit;
+Landroid/graphics/Matrix;
+Landroid/graphics/Movie;
+Landroid/graphics/NinePatch$InsetStruct;
+Landroid/graphics/NinePatch;
+Landroid/graphics/Outline;
+Landroid/graphics/Paint$Align;
+Landroid/graphics/Paint$Cap;
+Landroid/graphics/Paint$FontMetrics;
+Landroid/graphics/Paint$FontMetricsInt;
+Landroid/graphics/Paint$Join;
+Landroid/graphics/Paint$NoImagePreloadHolder;
+Landroid/graphics/Paint$Style;
+Landroid/graphics/Paint;
+Landroid/graphics/PaintFlagsDrawFilter;
+Landroid/graphics/Path$FillType;
+Landroid/graphics/Path;
+Landroid/graphics/PathDashPathEffect;
+Landroid/graphics/PathEffect;
+Landroid/graphics/PathMeasure;
+Landroid/graphics/Picture;
+Landroid/graphics/PixelFormat;
+Landroid/graphics/Point$1;
+Landroid/graphics/Point;
+Landroid/graphics/PointF$1;
+Landroid/graphics/PointF;
+Landroid/graphics/PorterDuff$Mode;
+Landroid/graphics/PorterDuff;
+Landroid/graphics/PorterDuffColorFilter;
+Landroid/graphics/PorterDuffXfermode;
+Landroid/graphics/RadialGradient;
+Landroid/graphics/Rect$1;
+Landroid/graphics/Rect;
+Landroid/graphics/RectF$1;
+Landroid/graphics/RectF;
+Landroid/graphics/Region$1;
+Landroid/graphics/Region$Op;
+Landroid/graphics/Region;
+Landroid/graphics/RegionIterator;
+Landroid/graphics/Shader$TileMode;
+Landroid/graphics/Shader;
+Landroid/graphics/SumPathEffect;
+Landroid/graphics/SurfaceTexture$1;
+Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;
+Landroid/graphics/SurfaceTexture;
+Landroid/graphics/SweepGradient;
+Landroid/graphics/TableMaskFilter;
+Landroid/graphics/TemporaryBuffer;
+Landroid/graphics/Typeface;
+Landroid/graphics/Xfermode;
+Landroid/graphics/YuvImage;
+Landroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;
+Landroid/graphics/drawable/AdaptiveIconDrawable$LayerState;
+Landroid/graphics/drawable/Animatable2;
+Landroid/graphics/drawable/Animatable;
+Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;
+Landroid/graphics/drawable/AnimatedStateListDrawable$Transition;
+Landroid/graphics/drawable/AnimatedStateListDrawable;
+Landroid/graphics/drawable/AnimatedVectorDrawable$1;
+Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator;
+Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;
+Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;
+Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;
+Landroid/graphics/drawable/AnimatedVectorDrawable;
+Landroid/graphics/drawable/AnimationDrawable$AnimationState;
+Landroid/graphics/drawable/AnimationDrawable;
+Landroid/graphics/drawable/BitmapDrawable$BitmapState;
+Landroid/graphics/drawable/BitmapDrawable;
+Landroid/graphics/drawable/ClipDrawable$ClipState;
+Landroid/graphics/drawable/ClipDrawable;
+Landroid/graphics/drawable/ColorDrawable$ColorState;
+Landroid/graphics/drawable/ColorDrawable;
+Landroid/graphics/drawable/Drawable$Callback;
+Landroid/graphics/drawable/Drawable$ConstantState;
+Landroid/graphics/drawable/Drawable;
+Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;
+Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;
+Landroid/graphics/drawable/DrawableContainer;
+Landroid/graphics/drawable/DrawableInflater;
+Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;
+Landroid/graphics/drawable/DrawableWrapper;
+Landroid/graphics/drawable/GradientDrawable$GradientState;
+Landroid/graphics/drawable/GradientDrawable$Orientation;
+Landroid/graphics/drawable/GradientDrawable;
+Landroid/graphics/drawable/Icon$1;
+Landroid/graphics/drawable/Icon;
+Landroid/graphics/drawable/InsetDrawable$InsetState;
+Landroid/graphics/drawable/InsetDrawable$InsetValue;
+Landroid/graphics/drawable/InsetDrawable;
+Landroid/graphics/drawable/LayerDrawable$ChildDrawable;
+Landroid/graphics/drawable/LayerDrawable$LayerState;
+Landroid/graphics/drawable/LayerDrawable;
+Landroid/graphics/drawable/NinePatchDrawable$NinePatchState;
+Landroid/graphics/drawable/NinePatchDrawable;
+Landroid/graphics/drawable/RippleBackground$1;
+Landroid/graphics/drawable/RippleBackground$BackgroundProperty;
+Landroid/graphics/drawable/RippleBackground;
+Landroid/graphics/drawable/RippleComponent$RenderNodeAnimatorSet;
+Landroid/graphics/drawable/RippleComponent;
+Landroid/graphics/drawable/RippleDrawable$RippleState;
+Landroid/graphics/drawable/RippleDrawable;
+Landroid/graphics/drawable/RippleForeground$1;
+Landroid/graphics/drawable/RippleForeground$2;
+Landroid/graphics/drawable/RippleForeground$3;
+Landroid/graphics/drawable/RippleForeground$4;
+Landroid/graphics/drawable/RippleForeground$LogDecelerateInterpolator;
+Landroid/graphics/drawable/RotateDrawable$RotateState;
+Landroid/graphics/drawable/RotateDrawable;
+Landroid/graphics/drawable/ScaleDrawable$ScaleState;
+Landroid/graphics/drawable/ScaleDrawable;
+Landroid/graphics/drawable/ShapeDrawable$ShapeState;
+Landroid/graphics/drawable/ShapeDrawable;
+Landroid/graphics/drawable/StateListDrawable$StateListState;
+Landroid/graphics/drawable/StateListDrawable;
+Landroid/graphics/drawable/TransitionDrawable$TransitionState;
+Landroid/graphics/drawable/TransitionDrawable;
+Landroid/graphics/drawable/VectorDrawable$VClipPath;
+Landroid/graphics/drawable/VectorDrawable$VFullPath$10;
+Landroid/graphics/drawable/VectorDrawable$VFullPath$1;
+Landroid/graphics/drawable/VectorDrawable$VFullPath$2;
+Landroid/graphics/drawable/VectorDrawable$VFullPath$3;
+Landroid/graphics/drawable/VectorDrawable$VFullPath$4;
+Landroid/graphics/drawable/VectorDrawable$VFullPath$5;
+Landroid/graphics/drawable/VectorDrawable$VFullPath$6;
+Landroid/graphics/drawable/VectorDrawable$VFullPath$7;
+Landroid/graphics/drawable/VectorDrawable$VFullPath$8;
+Landroid/graphics/drawable/VectorDrawable$VFullPath$9;
+Landroid/graphics/drawable/VectorDrawable$VFullPath;
+Landroid/graphics/drawable/VectorDrawable$VGroup$1;
+Landroid/graphics/drawable/VectorDrawable$VGroup$2;
+Landroid/graphics/drawable/VectorDrawable$VGroup$3;
+Landroid/graphics/drawable/VectorDrawable$VGroup$4;
+Landroid/graphics/drawable/VectorDrawable$VGroup$5;
+Landroid/graphics/drawable/VectorDrawable$VGroup$6;
+Landroid/graphics/drawable/VectorDrawable$VGroup$7;
+Landroid/graphics/drawable/VectorDrawable$VGroup$8;
+Landroid/graphics/drawable/VectorDrawable$VGroup$9;
+Landroid/graphics/drawable/VectorDrawable$VGroup;
+Landroid/graphics/drawable/VectorDrawable$VObject;
+Landroid/graphics/drawable/VectorDrawable$VPath$1;
+Landroid/graphics/drawable/VectorDrawable$VPath;
+Landroid/graphics/drawable/VectorDrawable$VectorDrawableState$1;
+Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;
+Landroid/graphics/drawable/VectorDrawable;
+Landroid/graphics/drawable/shapes/OvalShape;
+Landroid/graphics/drawable/shapes/RectShape;
+Landroid/graphics/drawable/shapes/RoundRectShape;
+Landroid/graphics/drawable/shapes/Shape;
+Landroid/graphics/fonts/FontVariationAxis;
+Landroid/graphics/pdf/PdfDocument;
+Landroid/graphics/pdf/PdfEditor;
+Landroid/graphics/pdf/PdfRenderer;
+Landroid/hardware/Camera$CameraInfo;
+Landroid/hardware/Camera$Face;
+Landroid/hardware/Camera;
+Landroid/hardware/CameraStatus$1;
+Landroid/hardware/ConsumerIrManager;
+Landroid/hardware/HardwareBuffer$1;
+Landroid/hardware/HardwareBuffer;
+Landroid/hardware/ICameraService$Stub$Proxy;
+Landroid/hardware/ICameraService$Stub;
+Landroid/hardware/ICameraService;
+Landroid/hardware/ICameraServiceListener$Stub;
+Landroid/hardware/ICameraServiceListener;
+Landroid/hardware/SensorEvent;
+Landroid/hardware/SensorEventListener;
+Landroid/hardware/SensorManager;
+Landroid/hardware/SerialManager;
+Landroid/hardware/SerialPort;
+Landroid/hardware/SystemSensorManager$BaseEventQueue;
+Landroid/hardware/SystemSensorManager$SensorEventQueue;
+Landroid/hardware/SystemSensorManager;
+Landroid/hardware/TriggerEventListener;
+Landroid/hardware/camera2/CameraAccessException;
+Landroid/hardware/camera2/CameraCharacteristics$1;
+Landroid/hardware/camera2/CameraCharacteristics$2;
+Landroid/hardware/camera2/CameraCharacteristics$3;
+Landroid/hardware/camera2/CameraCharacteristics$4;
+Landroid/hardware/camera2/CameraCharacteristics$5;
+Landroid/hardware/camera2/CameraCharacteristics$Key;
+Landroid/hardware/camera2/CameraCharacteristics;
+Landroid/hardware/camera2/CameraManager;
+Landroid/hardware/camera2/CameraMetadata;
+Landroid/hardware/camera2/CaptureRequest$1;
+Landroid/hardware/camera2/CaptureRequest$2;
+Landroid/hardware/camera2/CaptureRequest$Key;
+Landroid/hardware/camera2/CaptureRequest;
+Landroid/hardware/camera2/CaptureResult$1;
+Landroid/hardware/camera2/CaptureResult$2;
+Landroid/hardware/camera2/CaptureResult$3;
+Landroid/hardware/camera2/CaptureResult$Key;
+Landroid/hardware/camera2/CaptureResult;
+Landroid/hardware/camera2/DngCreator;
+Landroid/hardware/camera2/impl/CameraMetadataNative$10;
+Landroid/hardware/camera2/impl/CameraMetadataNative$11;
+Landroid/hardware/camera2/impl/CameraMetadataNative$12;
+Landroid/hardware/camera2/impl/CameraMetadataNative$13;
+Landroid/hardware/camera2/impl/CameraMetadataNative$14;
+Landroid/hardware/camera2/impl/CameraMetadataNative$15;
+Landroid/hardware/camera2/impl/CameraMetadataNative$16;
+Landroid/hardware/camera2/impl/CameraMetadataNative$17;
+Landroid/hardware/camera2/impl/CameraMetadataNative$18;
+Landroid/hardware/camera2/impl/CameraMetadataNative$19;
+Landroid/hardware/camera2/impl/CameraMetadataNative$1;
+Landroid/hardware/camera2/impl/CameraMetadataNative$2;
+Landroid/hardware/camera2/impl/CameraMetadataNative$3;
+Landroid/hardware/camera2/impl/CameraMetadataNative$4;
+Landroid/hardware/camera2/impl/CameraMetadataNative$5;
+Landroid/hardware/camera2/impl/CameraMetadataNative$6;
+Landroid/hardware/camera2/impl/CameraMetadataNative$7;
+Landroid/hardware/camera2/impl/CameraMetadataNative$8;
+Landroid/hardware/camera2/impl/CameraMetadataNative$9;
+Landroid/hardware/camera2/impl/CameraMetadataNative$Key;
+Landroid/hardware/camera2/impl/CameraMetadataNative;
+Landroid/hardware/camera2/impl/GetCommand;
+Landroid/hardware/camera2/impl/SetCommand;
+Landroid/hardware/camera2/legacy/LegacyCameraDevice;
+Landroid/hardware/camera2/legacy/PerfMeasurement;
+Landroid/hardware/camera2/marshal/MarshalQueryable;
+Landroid/hardware/camera2/marshal/MarshalRegistry;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableArray;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableBlackLevelPattern;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableBoolean;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableColorSpaceTransform;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableEnum;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableHighSpeedVideoConfiguration;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableMeteringRectangle;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryablePair;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableParcelable;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableRange;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableRect;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableReprocessFormatsMap;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableRggbChannelVector;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableSize;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableSizeF;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfiguration;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableStreamConfigurationDuration;
+Landroid/hardware/camera2/marshal/impl/MarshalQueryableString;
+Landroid/hardware/camera2/params/BlackLevelPattern;
+Landroid/hardware/camera2/params/ColorSpaceTransform;
+Landroid/hardware/camera2/params/Face;
+Landroid/hardware/camera2/params/HighSpeedVideoConfiguration;
+Landroid/hardware/camera2/params/LensShadingMap;
+Landroid/hardware/camera2/params/MeteringRectangle;
+Landroid/hardware/camera2/params/ReprocessFormatsMap;
+Landroid/hardware/camera2/params/RggbChannelVector;
+Landroid/hardware/camera2/params/StreamConfiguration;
+Landroid/hardware/camera2/params/StreamConfigurationDuration;
+Landroid/hardware/camera2/params/StreamConfigurationMap;
+Landroid/hardware/camera2/params/TonemapCurve;
+Landroid/hardware/camera2/utils/TypeReference$SpecializedTypeReference;
+Landroid/hardware/camera2/utils/TypeReference;
+Landroid/hardware/display/DisplayManager$DisplayListener;
+Landroid/hardware/display/DisplayManager;
+Landroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;
+Landroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;
+Landroid/hardware/display/DisplayManagerGlobal;
+Landroid/hardware/display/IDisplayManager$Stub$Proxy;
+Landroid/hardware/display/IDisplayManager$Stub;
+Landroid/hardware/display/IDisplayManager;
+Landroid/hardware/display/IDisplayManagerCallback$Stub;
+Landroid/hardware/display/IDisplayManagerCallback;
+Landroid/hardware/display/WifiDisplay$1;
+Landroid/hardware/display/WifiDisplaySessionInfo$1;
+Landroid/hardware/display/WifiDisplayStatus$1;
+Landroid/hardware/fingerprint/FingerprintManager$1;
+Landroid/hardware/fingerprint/FingerprintManager$MyHandler;
+Landroid/hardware/fingerprint/FingerprintManager;
+Landroid/hardware/fingerprint/IFingerprintService$Stub;
+Landroid/hardware/fingerprint/IFingerprintService;
+Landroid/hardware/fingerprint/IFingerprintServiceReceiver$Stub;
+Landroid/hardware/fingerprint/IFingerprintServiceReceiver;
+Landroid/hardware/hdmi/HdmiControlManager;
+Landroid/hardware/input/IInputDevicesChangedListener$Stub;
+Landroid/hardware/input/IInputDevicesChangedListener;
+Landroid/hardware/input/IInputManager$Stub$Proxy;
+Landroid/hardware/input/IInputManager$Stub;
+Landroid/hardware/input/IInputManager;
+Landroid/hardware/input/InputDeviceIdentifier$1;
+Landroid/hardware/input/InputDeviceIdentifier;
+Landroid/hardware/input/InputManager$InputDeviceListener;
+Landroid/hardware/input/InputManager$InputDeviceListenerDelegate;
+Landroid/hardware/input/InputManager$InputDevicesChangedListener;
+Landroid/hardware/input/InputManager;
+Landroid/hardware/location/ActivityRecognitionHardware;
+Landroid/hardware/location/ContextHubManager;
+Landroid/hardware/location/IActivityRecognitionHardware$Stub;
+Landroid/hardware/location/IActivityRecognitionHardware;
+Landroid/hardware/radio/RadioManager;
+Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel$1;
+Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;
+Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent$1;
+Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent;
+Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;
+Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase$1;
+Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;
+Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent$1;
+Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;
+Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra$1;
+Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;
+Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel$1;
+Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;
+Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties$1;
+Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
+Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig$1;
+Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;
+Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent$1;
+Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;
+Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;
+Landroid/hardware/soundtrigger/SoundTrigger$SoundModelEvent$1;
+Landroid/hardware/soundtrigger/SoundTrigger$SoundModelEvent;
+Landroid/hardware/soundtrigger/SoundTrigger;
+Landroid/hardware/soundtrigger/SoundTriggerModule;
+Landroid/hardware/usb/UsbDevice;
+Landroid/hardware/usb/UsbDeviceConnection;
+Landroid/hardware/usb/UsbManager;
+Landroid/hardware/usb/UsbRequest;
+Landroid/hidl/base/V1_0/IBase;
+Landroid/icu/impl/BMPSet;
+Landroid/icu/impl/CacheBase;
+Landroid/icu/impl/CacheValue$NullValue;
+Landroid/icu/impl/CacheValue$SoftValue;
+Landroid/icu/impl/CacheValue$Strength;
+Landroid/icu/impl/CacheValue;
+Landroid/icu/impl/CalendarUtil;
+Landroid/icu/impl/CaseMapImpl$StringContextIterator;
+Landroid/icu/impl/CaseMapImpl;
+Landroid/icu/impl/CharTrie;
+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$ICUCurrencyDisplayInfo$SpacingInfoSink;
+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$LocaleKey;
+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$2;
+Landroid/icu/impl/ICUResourceBundle$3$1;
+Landroid/icu/impl/ICUResourceBundle$3;
+Landroid/icu/impl/ICUResourceBundle$4;
+Landroid/icu/impl/ICUResourceBundle$AvailEntry;
+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$ResourceBinary;
+Landroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;
+Landroid/icu/impl/ICUResourceBundleImpl$ResourceInt;
+Landroid/icu/impl/ICUResourceBundleImpl$ResourceIntVector;
+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$CacheEntry;
+Landroid/icu/impl/ICUService$Factory;
+Landroid/icu/impl/ICUService$Key;
+Landroid/icu/impl/ICUService;
+Landroid/icu/impl/LocaleIDParser;
+Landroid/icu/impl/LocaleIDs;
+Landroid/icu/impl/Norm2AllModes$1;
+Landroid/icu/impl/Norm2AllModes$ComposeNormalizer2;
+Landroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;
+Landroid/icu/impl/Norm2AllModes$FCDNormalizer2;
+Landroid/icu/impl/Norm2AllModes$NFKCSingleton;
+Landroid/icu/impl/Norm2AllModes$NoopNormalizer2;
+Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;
+Landroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;
+Landroid/icu/impl/Norm2AllModes;
+Landroid/icu/impl/Normalizer2Impl$1;
+Landroid/icu/impl/Normalizer2Impl$IsAcceptable;
+Landroid/icu/impl/Normalizer2Impl;
+Landroid/icu/impl/Pair;
+Landroid/icu/impl/PatternProps;
+Landroid/icu/impl/ReplaceableUCharacterIterator;
+Landroid/icu/impl/RuleCharacterIterator;
+Landroid/icu/impl/SimpleCache;
+Landroid/icu/impl/SoftCache;
+Landroid/icu/impl/TextTrieMap$Node;
+Landroid/icu/impl/TextTrieMap;
+Landroid/icu/impl/TimeZoneNamesFactoryImpl;
+Landroid/icu/impl/TimeZoneNamesImpl$MZ2TZsCache;
+Landroid/icu/impl/TimeZoneNamesImpl$MZMapEntry;
+Landroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;
+Landroid/icu/impl/Trie$DataManipulate;
+Landroid/icu/impl/Trie$DefaultGetFoldingOffset;
+Landroid/icu/impl/Trie2$1;
+Landroid/icu/impl/Trie2$Range;
+Landroid/icu/impl/Trie2$Trie2Iterator;
+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/Trie2_32;
+Landroid/icu/impl/Trie;
+Landroid/icu/impl/UBiDiProps$IsAcceptable;
+Landroid/icu/impl/UCaseProps$ContextIterator;
+Landroid/icu/impl/UCaseProps$IsAcceptable;
+Landroid/icu/impl/UCaseProps;
+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$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/UPropertyAliases$IsAcceptable;
+Landroid/icu/impl/URLHandler$URLVisitor;
+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/USerializedSet;
+Landroid/icu/impl/Utility;
+Landroid/icu/impl/ZoneMeta$SystemTimeZoneCache;
+Landroid/icu/impl/coll/CollationDataReader$IsAcceptable;
+Landroid/icu/impl/coll/SharedObject$Reference;
+Landroid/icu/impl/coll/SharedObject;
+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/lang/UCharacter;
+Landroid/icu/lang/UCharacterEnums$ECharacterCategory;
+Landroid/icu/lang/UCharacterEnums$ECharacterDirection;
+Landroid/icu/math/MathContext;
+Landroid/icu/text/BreakIterator$BreakIteratorCache;
+Landroid/icu/text/BreakIterator$BreakIteratorServiceShim;
+Landroid/icu/text/BreakIteratorFactory$BFService$1RBBreakIteratorFactory;
+Landroid/icu/text/BreakIteratorFactory$BFService;
+Landroid/icu/text/CaseMap$Upper;
+Landroid/icu/text/CaseMap;
+Landroid/icu/text/Collator$ServiceShim;
+Landroid/icu/text/CollatorServiceShim$CService$1CollatorFactory;
+Landroid/icu/text/CollatorServiceShim$CService;
+Landroid/icu/text/CurrencyDisplayNames;
+Landroid/icu/text/CurrencyMetaInfo$CurrencyDigits;
+Landroid/icu/text/CurrencyMetaInfo$CurrencyFilter;
+Landroid/icu/text/CurrencyMetaInfo;
+Landroid/icu/text/DateFormatSymbols$1;
+Landroid/icu/text/DateTimePatternGenerator$AppendItemNamesSink;
+Landroid/icu/text/DateTimePatternGenerator$AvailableFormatsSink;
+Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;
+Landroid/icu/text/DateTimePatternGenerator$DayPeriodAllowedHoursSink;
+Landroid/icu/text/DateTimePatternGenerator$DistanceInfo;
+Landroid/icu/text/DateTimePatternGenerator$PatternInfo;
+Landroid/icu/text/DateTimePatternGenerator$PatternWithMatcher;
+Landroid/icu/text/DateTimePatternGenerator$PatternWithSkeletonFlag;
+Landroid/icu/text/DateTimePatternGenerator$VariableField;
+Landroid/icu/text/DecimalFormat$Unit;
+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/DigitList;
+Landroid/icu/text/DisplayContext$Type;
+Landroid/icu/text/DisplayContext;
+Landroid/icu/text/Edits;
+Landroid/icu/text/IDNA;
+Landroid/icu/text/LanguageBreakEngine;
+Landroid/icu/text/Normalizer$FCDMode;
+Landroid/icu/text/Normalizer$Mode;
+Landroid/icu/text/Normalizer$ModeImpl;
+Landroid/icu/text/Normalizer$NFCMode;
+Landroid/icu/text/Normalizer$NFDMode;
+Landroid/icu/text/Normalizer$NFKCMode;
+Landroid/icu/text/Normalizer$NFKDMode;
+Landroid/icu/text/Normalizer$NFKDModeImpl;
+Landroid/icu/text/Normalizer$NONEMode;
+Landroid/icu/text/Normalizer$QuickCheckResult;
+Landroid/icu/text/Normalizer2;
+Landroid/icu/text/Normalizer;
+Landroid/icu/text/NumberFormat$Field;
+Landroid/icu/text/NumberFormat$NumberFormatShim;
+Landroid/icu/text/NumberFormat;
+Landroid/icu/text/NumberFormatServiceShim$NFService$1RBNumberFormatFactory;
+Landroid/icu/text/NumberFormatServiceShim$NFService;
+Landroid/icu/text/NumberingSystem$1;
+Landroid/icu/text/NumberingSystem$2;
+Landroid/icu/text/NumberingSystem$LocaleLookupData;
+Landroid/icu/text/NumberingSystem;
+Landroid/icu/text/PluralRanges$Matrix;
+Landroid/icu/text/PluralRanges;
+Landroid/icu/text/PluralRules$1;
+Landroid/icu/text/PluralRules$AndConstraint;
+Landroid/icu/text/PluralRules$BinaryConstraint;
+Landroid/icu/text/PluralRules$Constraint;
+Landroid/icu/text/PluralRules$Factory;
+Landroid/icu/text/PluralRules$FixedDecimal;
+Landroid/icu/text/PluralRules$FixedDecimalRange;
+Landroid/icu/text/PluralRules$FixedDecimalSamples;
+Landroid/icu/text/PluralRules$RangeConstraint;
+Landroid/icu/text/PluralRules$Rule;
+Landroid/icu/text/PluralRules$RuleList;
+Landroid/icu/text/RBBIDataWrapper$IsAcceptable;
+Landroid/icu/text/RBBIDataWrapper$RBBIDataHeader;
+Landroid/icu/text/RBBIDataWrapper$TrieFoldingFunc;
+Landroid/icu/text/Replaceable;
+Landroid/icu/text/ReplaceableString;
+Landroid/icu/text/SimpleDateFormat$PatternItem;
+Landroid/icu/text/TimeZoneNames$Cache;
+Landroid/icu/text/TimeZoneNames$Factory;
+Landroid/icu/text/TimeZoneNames$NameType;
+Landroid/icu/text/UCharacterIterator;
+Landroid/icu/text/UFieldPosition;
+Landroid/icu/text/UFormat;
+Landroid/icu/text/UForwardCharacterIterator;
+Landroid/icu/text/UTF16;
+Landroid/icu/text/UnhandledBreakEngine;
+Landroid/icu/text/UnicodeFilter;
+Landroid/icu/text/UnicodeMatcher;
+Landroid/icu/text/UnicodeSet$GeneralCategoryMaskFilter;
+Landroid/icu/text/UnicodeSet$IntPropertyFilter;
+Landroid/icu/text/UnicodeSet;
+Landroid/icu/util/BasicTimeZone;
+Landroid/icu/util/Calendar$FormatConfiguration;
+Landroid/icu/util/Calendar$PatternData;
+Landroid/icu/util/Calendar$WeekData;
+Landroid/icu/util/Calendar$WeekDataCache;
+Landroid/icu/util/Currency$1;
+Landroid/icu/util/Currency$CurrencyUsage;
+Landroid/icu/util/Currency$EquivalenceRelation;
+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$Factory;
+Landroid/icu/util/MeasureUnit;
+Landroid/icu/util/Output;
+Landroid/icu/util/TimeUnit;
+Landroid/icu/util/TimeZone$ConstantZone;
+Landroid/icu/util/TimeZone;
+Landroid/icu/util/ULocale$1;
+Landroid/icu/util/ULocale$2;
+Landroid/icu/util/ULocale$Category;
+Landroid/icu/util/ULocale$JDKLocaleHelper;
+Landroid/icu/util/ULocale$Type;
+Landroid/icu/util/ULocale;
+Landroid/icu/util/UResourceBundle$RootType;
+Landroid/icu/util/UResourceBundle;
+Landroid/icu/util/UResourceBundleIterator;
+Landroid/icu/util/UResourceTypeMismatchException;
+Landroid/icu/util/VersionInfo;
+Landroid/location/BatchedLocationCallbackTransport$CallbackTransport;
+Landroid/location/BatchedLocationCallbackTransport;
+Landroid/location/Country$1;
+Landroid/location/CountryDetector;
+Landroid/location/GeocoderParams$1;
+Landroid/location/GnssMeasurementCallbackTransport$ListenerTransport;
+Landroid/location/GnssMeasurementCallbackTransport;
+Landroid/location/GnssNavigationMessageCallbackTransport$ListenerTransport;
+Landroid/location/GnssNavigationMessageCallbackTransport;
+Landroid/location/IBatchedLocationCallback$Stub;
+Landroid/location/IBatchedLocationCallback;
+Landroid/location/ICountryDetector$Stub;
+Landroid/location/ICountryDetector;
+Landroid/location/IGnssMeasurementsListener$Stub;
+Landroid/location/IGnssMeasurementsListener;
+Landroid/location/IGnssNavigationMessageListener$Stub;
+Landroid/location/IGnssNavigationMessageListener;
+Landroid/location/IGnssStatusListener$Stub;
+Landroid/location/IGnssStatusListener;
+Landroid/location/ILocationListener$Stub;
+Landroid/location/ILocationListener;
+Landroid/location/ILocationManager$Stub$Proxy;
+Landroid/location/ILocationManager$Stub;
+Landroid/location/ILocationManager;
+Landroid/location/LocalListenerHelper;
+Landroid/location/Location$1;
+Landroid/location/Location$2;
+Landroid/location/Location$BearingDistanceCache;
+Landroid/location/Location;
+Landroid/location/LocationManager$ListenerTransport;
+Landroid/location/LocationManager;
+Landroid/location/LocationRequest$1;
+Landroid/media/AudioAttributes$1;
+Landroid/media/AudioAttributes$Builder;
+Landroid/media/AudioAttributes;
+Landroid/media/AudioDevicePort;
+Landroid/media/AudioDevicePortConfig;
+Landroid/media/AudioFocusRequest$Builder;
+Landroid/media/AudioFormat$1;
+Landroid/media/AudioFormat$Builder;
+Landroid/media/AudioFormat;
+Landroid/media/AudioGain;
+Landroid/media/AudioGainConfig;
+Landroid/media/AudioHandle;
+Landroid/media/AudioManager$1;
+Landroid/media/AudioManager$2;
+Landroid/media/AudioManager$3;
+Landroid/media/AudioManager$FocusRequestInfo;
+Landroid/media/AudioManager$OnAudioFocusChangeListener;
+Landroid/media/AudioManager$ServiceEventHandlerDelegate$1;
+Landroid/media/AudioManager$ServiceEventHandlerDelegate;
+Landroid/media/AudioManager;
+Landroid/media/AudioMixPort;
+Landroid/media/AudioMixPortConfig;
+Landroid/media/AudioPatch;
+Landroid/media/AudioPort;
+Landroid/media/AudioPortConfig;
+Landroid/media/AudioPortEventHandler;
+Landroid/media/AudioRecord;
+Landroid/media/AudioRoutesInfo$1;
+Landroid/media/AudioRouting;
+Landroid/media/AudioSystem;
+Landroid/media/AudioTimestamp;
+Landroid/media/AudioTrack;
+Landroid/media/BufferingParams$1;
+Landroid/media/IAudioFocusDispatcher$Stub;
+Landroid/media/IAudioFocusDispatcher;
+Landroid/media/IAudioRoutesObserver$Stub;
+Landroid/media/IAudioRoutesObserver;
+Landroid/media/IAudioService$Stub$Proxy;
+Landroid/media/IAudioService$Stub;
+Landroid/media/IAudioService;
+Landroid/media/IMediaHTTPConnection$Stub;
+Landroid/media/IMediaHTTPConnection;
+Landroid/media/IMediaRouterClient$Stub;
+Landroid/media/IMediaRouterClient;
+Landroid/media/IMediaRouterService$Stub$Proxy;
+Landroid/media/IMediaRouterService$Stub;
+Landroid/media/IMediaRouterService;
+Landroid/media/IPlaybackConfigDispatcher$Stub;
+Landroid/media/IPlaybackConfigDispatcher;
+Landroid/media/IPlayer$Stub;
+Landroid/media/IPlayer;
+Landroid/media/IRecordingConfigDispatcher$Stub;
+Landroid/media/IRecordingConfigDispatcher;
+Landroid/media/IRemoteVolumeObserver$Stub;
+Landroid/media/IRemoteVolumeObserver;
+Landroid/media/IRingtonePlayer$Stub$Proxy;
+Landroid/media/IRingtonePlayer$Stub;
+Landroid/media/IRingtonePlayer;
+Landroid/media/Image;
+Landroid/media/JetPlayer;
+Landroid/media/MediaCodec$BufferInfo;
+Landroid/media/MediaCodec$BufferMap;
+Landroid/media/MediaCodec$CryptoInfo$Pattern;
+Landroid/media/MediaCodec$CryptoInfo;
+Landroid/media/MediaCodec$EventHandler;
+Landroid/media/MediaCodecInfo$AudioCapabilities;
+Landroid/media/MediaCodecInfo$CodecProfileLevel;
+Landroid/media/MediaCodecInfo$Feature;
+Landroid/media/MediaCodecInfo$VideoCapabilities;
+Landroid/media/MediaFormat;
+Landroid/media/MediaMetadata$1;
+Landroid/media/MediaMetadata$Builder;
+Landroid/media/MediaPlayer$1;
+Landroid/media/MediaPlayer$2;
+Landroid/media/MediaPlayer$EventHandler;
+Landroid/media/MediaPlayer$OnCompletionListener;
+Landroid/media/MediaPlayer$OnSeekCompleteListener;
+Landroid/media/MediaPlayer$OnSubtitleDataListener;
+Landroid/media/MediaPlayer$TimeProvider$EventHandler;
+Landroid/media/MediaPlayer$TimeProvider;
+Landroid/media/MediaRouter$Callback;
+Landroid/media/MediaRouter$CallbackInfo;
+Landroid/media/MediaRouter$RouteCategory;
+Landroid/media/MediaRouter$RouteInfo$1;
+Landroid/media/MediaRouter$RouteInfo;
+Landroid/media/MediaRouter$Static$1$1;
+Landroid/media/MediaRouter$Static$1;
+Landroid/media/MediaRouter$Static$Client;
+Landroid/media/MediaRouter$Static;
+Landroid/media/MediaRouter$VolumeCallback;
+Landroid/media/MediaRouter$VolumeChangeReceiver;
+Landroid/media/MediaRouter$WifiDisplayStatusChangedReceiver;
+Landroid/media/MediaRouter;
+Landroid/media/MediaTimeProvider;
+Landroid/media/PlaybackParams$1;
+Landroid/media/PlaybackParams;
+Landroid/media/PlayerBase$IAppOpsCallbackWrapper;
+Landroid/media/PlayerBase$IPlayerWrapper;
+Landroid/media/PlayerBase$PlayerIdCard$1;
+Landroid/media/PlayerBase;
+Landroid/media/RemoteDisplay;
+Landroid/media/Ringtone$MyOnCompletionListener;
+Landroid/media/SubtitleController$Listener;
+Landroid/media/ToneGenerator;
+Landroid/media/Utils$1;
+Landroid/media/Utils$2;
+Landroid/media/Utils;
+Landroid/media/VolumeAutomation;
+Landroid/media/VolumeShaper$Configuration$1;
+Landroid/media/VolumeShaper$Configuration$Builder;
+Landroid/media/VolumeShaper$Configuration;
+Landroid/media/VolumeShaper$Operation$1;
+Landroid/media/VolumeShaper$Operation$Builder;
+Landroid/media/VolumeShaper$Operation;
+Landroid/media/VolumeShaper$State$1;
+Landroid/media/VolumeShaper$State;
+Landroid/media/audiopolicy/AudioMix;
+Landroid/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion;
+Landroid/media/audiopolicy/AudioMixingRule;
+Landroid/media/midi/MidiManager;
+Landroid/media/projection/MediaProjectionManager;
+Landroid/media/session/IActiveSessionsListener$Stub;
+Landroid/media/session/IActiveSessionsListener;
+Landroid/media/session/ISession$Stub;
+Landroid/media/session/ISession;
+Landroid/media/session/ISessionCallback$Stub;
+Landroid/media/session/ISessionCallback;
+Landroid/media/session/ISessionController$Stub$Proxy;
+Landroid/media/session/ISessionController$Stub;
+Landroid/media/session/ISessionController;
+Landroid/media/session/ISessionControllerCallback$Stub;
+Landroid/media/session/ISessionControllerCallback;
+Landroid/media/session/ISessionManager$Stub$Proxy;
+Landroid/media/session/ISessionManager$Stub;
+Landroid/media/session/ISessionManager;
+Landroid/media/session/MediaController$CallbackStub;
+Landroid/media/session/MediaController$TransportControls;
+Landroid/media/session/MediaController;
+Landroid/media/session/MediaSession$Callback;
+Landroid/media/session/MediaSession$CallbackMessageHandler;
+Landroid/media/session/MediaSession$CallbackStub;
+Landroid/media/session/MediaSession$Token$1;
+Landroid/media/session/MediaSession;
+Landroid/media/session/MediaSessionManager;
+Landroid/media/session/PlaybackState$1;
+Landroid/media/session/PlaybackState$Builder;
+Landroid/media/session/PlaybackState$CustomAction$1;
+Landroid/media/soundtrigger/SoundTriggerManager;
+Landroid/media/tv/TvInputManager;
+Landroid/metrics/LogMaker;
+Landroid/mtp/MtpDeviceInfo;
+Landroid/mtp/MtpEvent;
+Landroid/mtp/MtpObjectInfo;
+Landroid/mtp/MtpPropertyList;
+Landroid/mtp/MtpStorage;
+Landroid/mtp/MtpStorageInfo;
+Landroid/net/ConnectivityManager$CallbackHandler;
+Landroid/net/ConnectivityManager$NetworkCallback;
+Landroid/net/ConnectivityManager;
+Landroid/net/ConnectivityThread$Singleton;
+Landroid/net/ConnectivityThread;
+Landroid/net/Credentials;
+Landroid/net/EthernetManager;
+Landroid/net/IConnectivityManager$Stub$Proxy;
+Landroid/net/IConnectivityManager$Stub;
+Landroid/net/IConnectivityManager;
+Landroid/net/INetworkPolicyManager$Stub$Proxy;
+Landroid/net/INetworkPolicyManager$Stub;
+Landroid/net/INetworkPolicyManager;
+Landroid/net/INetworkScoreService$Stub;
+Landroid/net/INetworkScoreService;
+Landroid/net/INetworkStatsService$Stub$Proxy;
+Landroid/net/INetworkStatsService$Stub;
+Landroid/net/INetworkStatsService;
+Landroid/net/IpPrefix$1;
+Landroid/net/IpPrefix;
+Landroid/net/IpSecManager;
+Landroid/net/LinkAddress$1;
+Landroid/net/LinkAddress;
+Landroid/net/LinkProperties$1;
+Landroid/net/LinkProperties;
+Landroid/net/LocalServerSocket;
+Landroid/net/LocalSocket;
+Landroid/net/LocalSocketAddress;
+Landroid/net/LocalSocketImpl$SocketInputStream;
+Landroid/net/LocalSocketImpl$SocketOutputStream;
+Landroid/net/LocalSocketImpl;
+Landroid/net/Network$1;
+Landroid/net/Network;
+Landroid/net/NetworkCapabilities$1;
+Landroid/net/NetworkCapabilities;
+Landroid/net/NetworkFactory;
+Landroid/net/NetworkInfo$1;
+Landroid/net/NetworkInfo$DetailedState;
+Landroid/net/NetworkInfo$State;
+Landroid/net/NetworkInfo;
+Landroid/net/NetworkPolicyManager;
+Landroid/net/NetworkRequest$1;
+Landroid/net/NetworkRequest$Builder;
+Landroid/net/NetworkRequest$Type;
+Landroid/net/NetworkRequest;
+Landroid/net/NetworkScoreManager;
+Landroid/net/NetworkSpecifier;
+Landroid/net/NetworkStats$1;
+Landroid/net/NetworkStats;
+Landroid/net/NetworkUtils;
+Landroid/net/Proxy;
+Landroid/net/ProxyInfo$1;
+Landroid/net/RouteInfo$1;
+Landroid/net/RouteInfo;
+Landroid/net/SSLCertificateSocketFactory$1;
+Landroid/net/SSLSessionCache;
+Landroid/net/TrafficStats;
+Landroid/net/Uri$1;
+Landroid/net/Uri$AbstractHierarchicalUri;
+Landroid/net/Uri$AbstractPart;
+Landroid/net/Uri$Builder;
+Landroid/net/Uri$HierarchicalUri;
+Landroid/net/Uri$OpaqueUri;
+Landroid/net/Uri$Part$EmptyPart;
+Landroid/net/Uri$Part;
+Landroid/net/Uri$PathPart;
+Landroid/net/Uri$PathSegments;
+Landroid/net/Uri$PathSegmentsBuilder;
+Landroid/net/Uri$StringUri;
+Landroid/net/Uri;
+Landroid/net/http/AndroidHttpClient$1;
+Landroid/net/http/X509TrustManagerExtensions;
+Landroid/net/lowpan/LowpanManager;
+Landroid/net/nsd/NsdManager;
+Landroid/net/wifi/IWifiManager$Stub$Proxy;
+Landroid/net/wifi/IWifiManager$Stub;
+Landroid/net/wifi/IWifiManager;
+Landroid/net/wifi/RttManager;
+Landroid/net/wifi/ScanResult$1;
+Landroid/net/wifi/ScanResult$InformationElement;
+Landroid/net/wifi/SupplicantState$1;
+Landroid/net/wifi/SupplicantState;
+Landroid/net/wifi/WifiInfo$1;
+Landroid/net/wifi/WifiInfo;
+Landroid/net/wifi/WifiManager$WifiLock;
+Landroid/net/wifi/WifiManager;
+Landroid/net/wifi/WifiScanner;
+Landroid/net/wifi/WifiSsid$1;
+Landroid/net/wifi/WifiSsid;
+Landroid/net/wifi/aware/WifiAwareManager;
+Landroid/net/wifi/p2p/WifiP2pManager;
+Landroid/nfc/IAppCallback$Stub;
+Landroid/nfc/IAppCallback;
+Landroid/nfc/INfcAdapter$Stub$Proxy;
+Landroid/nfc/INfcAdapter$Stub;
+Landroid/nfc/INfcAdapter;
+Landroid/nfc/INfcCardEmulation$Stub$Proxy;
+Landroid/nfc/INfcCardEmulation$Stub;
+Landroid/nfc/INfcCardEmulation;
+Landroid/nfc/INfcFCardEmulation$Stub$Proxy;
+Landroid/nfc/INfcFCardEmulation$Stub;
+Landroid/nfc/INfcFCardEmulation;
+Landroid/nfc/INfcTag$Stub$Proxy;
+Landroid/nfc/INfcTag$Stub;
+Landroid/nfc/INfcTag;
+Landroid/nfc/NfcActivityManager$NfcActivityState;
+Landroid/nfc/NfcActivityManager$NfcApplicationState;
+Landroid/nfc/NfcAdapter$1;
+Landroid/nfc/NfcAdapter$CreateNdefMessageCallback;
+Landroid/nfc/NfcManager;
+Landroid/opengl/EGL14;
+Landroid/opengl/EGLConfig;
+Landroid/opengl/EGLContext;
+Landroid/opengl/EGLDisplay;
+Landroid/opengl/EGLExt;
+Landroid/opengl/EGLObjectHandle;
+Landroid/opengl/EGLSurface;
+Landroid/opengl/ETC1;
+Landroid/opengl/GLES10;
+Landroid/opengl/GLES10Ext;
+Landroid/opengl/GLES11;
+Landroid/opengl/GLES11Ext;
+Landroid/opengl/GLES20;
+Landroid/opengl/GLES30;
+Landroid/opengl/GLES31;
+Landroid/opengl/GLES31Ext;
+Landroid/opengl/GLES32;
+Landroid/opengl/GLUtils;
+Landroid/opengl/Matrix;
+Landroid/opengl/Visibility;
+Landroid/os/-$Lambda$BcGBlsGjMZMF6Ej78rWJ608MYSM;
+Landroid/os/AsyncResult;
+Landroid/os/AsyncTask$1;
+Landroid/os/AsyncTask$2;
+Landroid/os/AsyncTask$3;
+Landroid/os/AsyncTask$AsyncTaskResult;
+Landroid/os/AsyncTask$InternalHandler;
+Landroid/os/AsyncTask$SerialExecutor$1;
+Landroid/os/AsyncTask$SerialExecutor;
+Landroid/os/AsyncTask$Status;
+Landroid/os/AsyncTask$WorkerRunnable;
+Landroid/os/AsyncTask;
+Landroid/os/BadParcelableException;
+Landroid/os/BaseBundle$NoImagePreloadHolder;
+Landroid/os/BaseBundle;
+Landroid/os/BatteryManager;
+Landroid/os/BatteryStats$BitDescription;
+Landroid/os/BatteryStats$ControllerActivityCounter;
+Landroid/os/BatteryStats$Counter;
+Landroid/os/BatteryStats$HistoryEventTracker;
+Landroid/os/BatteryStats$HistoryItem;
+Landroid/os/BatteryStats$HistoryStepDetails;
+Landroid/os/BatteryStats$HistoryTag;
+Landroid/os/BatteryStats$IntToString;
+Landroid/os/BatteryStats$LevelStepTracker;
+Landroid/os/BatteryStats$LongCounter;
+Landroid/os/BatteryStats$LongCounterArray;
+Landroid/os/BatteryStats$Timer;
+Landroid/os/BatteryStats$Uid$Pkg$Serv;
+Landroid/os/BatteryStats$Uid$Pkg;
+Landroid/os/BatteryStats$Uid$Proc;
+Landroid/os/BatteryStats$Uid$Sensor;
+Landroid/os/BatteryStats$Uid$Wakelock;
+Landroid/os/Binder;
+Landroid/os/BinderProxy;
+Landroid/os/Build$VERSION;
+Landroid/os/Build;
+Landroid/os/Bundle$1;
+Landroid/os/Bundle;
+Landroid/os/CancellationSignal$OnCancelListener;
+Landroid/os/CancellationSignal$Transport;
+Landroid/os/CancellationSignal;
+Landroid/os/ConditionVariable;
+Landroid/os/DeadObjectException;
+Landroid/os/DeadSystemException;
+Landroid/os/Debug$MemoryInfo$1;
+Landroid/os/Debug$MemoryInfo;
+Landroid/os/Debug;
+Landroid/os/DropBoxManager;
+Landroid/os/Environment$UserEnvironment;
+Landroid/os/Environment;
+Landroid/os/FactoryTest;
+Landroid/os/FileObserver$ObserverThread;
+Landroid/os/FileUtils;
+Landroid/os/GraphicsEnvironment;
+Landroid/os/Handler$Callback;
+Landroid/os/Handler$MessengerImpl;
+Landroid/os/Handler;
+Landroid/os/HandlerThread;
+Landroid/os/HardwarePropertiesManager;
+Landroid/os/HwBinder;
+Landroid/os/HwBlob;
+Landroid/os/HwParcel;
+Landroid/os/HwRemoteBinder;
+Landroid/os/IBatteryPropertiesRegistrar$Stub$Proxy;
+Landroid/os/IBatteryPropertiesRegistrar$Stub;
+Landroid/os/IBatteryPropertiesRegistrar;
+Landroid/os/IBinder$DeathRecipient;
+Landroid/os/IBinder;
+Landroid/os/ICancellationSignal$Stub$Proxy;
+Landroid/os/ICancellationSignal$Stub;
+Landroid/os/ICancellationSignal;
+Landroid/os/IDeviceIdleController$Stub;
+Landroid/os/IDeviceIdleController;
+Landroid/os/IHardwarePropertiesManager$Stub;
+Landroid/os/IHardwarePropertiesManager;
+Landroid/os/IHwBinder$DeathRecipient;
+Landroid/os/IHwBinder;
+Landroid/os/IHwInterface;
+Landroid/os/IInterface;
+Landroid/os/IMessenger$Stub$Proxy;
+Landroid/os/IMessenger$Stub;
+Landroid/os/IMessenger;
+Landroid/os/INetworkManagementService$Stub$Proxy;
+Landroid/os/INetworkManagementService$Stub;
+Landroid/os/INetworkManagementService;
+Landroid/os/IPowerManager$Stub$Proxy;
+Landroid/os/IPowerManager$Stub;
+Landroid/os/IPowerManager;
+Landroid/os/IServiceManager;
+Landroid/os/IUserManager$Stub$Proxy;
+Landroid/os/IUserManager$Stub;
+Landroid/os/IUserManager;
+Landroid/os/IVibratorService$Stub$Proxy;
+Landroid/os/IVibratorService$Stub;
+Landroid/os/IVibratorService;
+Landroid/os/IncidentManager;
+Landroid/os/LocaleList$1;
+Landroid/os/LocaleList;
+Landroid/os/Looper;
+Landroid/os/MemoryFile;
+Landroid/os/Message$1;
+Landroid/os/Message;
+Landroid/os/MessageQueue$IdleHandler;
+Landroid/os/MessageQueue;
+Landroid/os/Messenger$1;
+Landroid/os/Messenger;
+Landroid/os/OperationCanceledException;
+Landroid/os/Parcel$1;
+Landroid/os/Parcel$2;
+Landroid/os/Parcel$ReadWriteHelper;
+Landroid/os/Parcel;
+Landroid/os/ParcelFileDescriptor$1;
+Landroid/os/ParcelFileDescriptor$AutoCloseInputStream;
+Landroid/os/ParcelFileDescriptor;
+Landroid/os/ParcelUuid$1;
+Landroid/os/Parcelable$ClassLoaderCreator;
+Landroid/os/Parcelable$Creator;
+Landroid/os/Parcelable;
+Landroid/os/ParcelableException;
+Landroid/os/ParcelableParcel$1;
+Landroid/os/PatternMatcher$1;
+Landroid/os/PatternMatcher;
+Landroid/os/PersistableBundle$1;
+Landroid/os/PersistableBundle;
+Landroid/os/PooledStringWriter;
+Landroid/os/PowerManager$WakeLock$1;
+Landroid/os/PowerManager$WakeLock;
+Landroid/os/PowerManager;
+Landroid/os/Process;
+Landroid/os/RecoverySystem;
+Landroid/os/Registrant;
+Landroid/os/RemoteCallbackList$Callback;
+Landroid/os/RemoteCallbackList;
+Landroid/os/RemoteException;
+Landroid/os/ResultReceiver$1;
+Landroid/os/ResultReceiver;
+Landroid/os/SELinux;
+Landroid/os/Seccomp;
+Landroid/os/ServiceManager$ServiceNotFoundException;
+Landroid/os/ServiceManager;
+Landroid/os/ServiceManagerNative;
+Landroid/os/ServiceManagerProxy;
+Landroid/os/ServiceSpecificException;
+Landroid/os/SharedMemory;
+Landroid/os/ShellCallback;
+Landroid/os/StatFs;
+Landroid/os/StrictMode$1;
+Landroid/os/StrictMode$2;
+Landroid/os/StrictMode$3;
+Landroid/os/StrictMode$4;
+Landroid/os/StrictMode$5;
+Landroid/os/StrictMode$6;
+Landroid/os/StrictMode$7;
+Landroid/os/StrictMode$8;
+Landroid/os/StrictMode$9;
+Landroid/os/StrictMode$AndroidBlockGuardPolicy$1;
+Landroid/os/StrictMode$AndroidBlockGuardPolicy;
+Landroid/os/StrictMode$AndroidCloseGuardReporter;
+Landroid/os/StrictMode$InstanceCountViolation;
+Landroid/os/StrictMode$InstanceTracker;
+Landroid/os/StrictMode$LogStackTrace;
+Landroid/os/StrictMode$Span;
+Landroid/os/StrictMode$StrictModeDiskReadViolation;
+Landroid/os/StrictMode$StrictModeDiskWriteViolation;
+Landroid/os/StrictMode$StrictModeViolation;
+Landroid/os/StrictMode$ThreadPolicy$Builder;
+Landroid/os/StrictMode$ThreadPolicy;
+Landroid/os/StrictMode$ThreadSpanState;
+Landroid/os/StrictMode$ViolationInfo$1;
+Landroid/os/StrictMode$ViolationInfo;
+Landroid/os/StrictMode$VmPolicy$Builder;
+Landroid/os/StrictMode$VmPolicy;
+Landroid/os/StrictMode;
+Landroid/os/SystemClock;
+Landroid/os/SystemProperties;
+Landroid/os/SystemVibrator;
+Landroid/os/Trace;
+Landroid/os/UEventObserver;
+Landroid/os/UserHandle$1;
+Landroid/os/UserHandle;
+Landroid/os/UserManager;
+Landroid/os/Vibrator;
+Landroid/os/VintfObject;
+Landroid/os/VintfRuntimeInfo;
+Landroid/os/WorkSource$1;
+Landroid/os/ZygoteProcess;
+Landroid/os/ZygoteStartFailedEx;
+Landroid/os/health/SystemHealthManager;
+Landroid/os/storage/IObbActionListener$Stub;
+Landroid/os/storage/IObbActionListener;
+Landroid/os/storage/IStorageManager$Stub$Proxy;
+Landroid/os/storage/IStorageManager$Stub;
+Landroid/os/storage/IStorageManager;
+Landroid/os/storage/StorageManager$ObbActionListener;
+Landroid/os/storage/StorageManager;
+Landroid/os/storage/StorageVolume$1;
+Landroid/os/storage/StorageVolume;
+Landroid/os/storage/VolumeInfo$1;
+Landroid/os/storage/VolumeInfo$2;
+Landroid/preference/PreferenceManager$OnPreferenceTreeClickListener;
+Landroid/preference/PreferenceManager;
+Landroid/print/PrintManager;
+Landroid/provider/-$Lambda$a7Jyr6j_Mb70hHJ2ssL1AAhKh4c;
+Landroid/provider/-$Lambda$asz6VwQ86PPY-v8JLMb7rx-pSqg;
+Landroid/provider/BaseColumns;
+Landroid/provider/ContactsContract$CommonDataKinds$BaseTypes;
+Landroid/provider/ContactsContract$CommonDataKinds$CommonColumns;
+Landroid/provider/ContactsContract$ContactCounts;
+Landroid/provider/ContactsContract$ContactNameColumns;
+Landroid/provider/ContactsContract$ContactOptionsColumns;
+Landroid/provider/ContactsContract$ContactStatusColumns;
+Landroid/provider/ContactsContract$ContactsColumns;
+Landroid/provider/ContactsContract$DataColumns;
+Landroid/provider/ContactsContract$DataColumnsWithJoins;
+Landroid/provider/ContactsContract$DataUsageStatColumns;
+Landroid/provider/ContactsContract$RawContactsColumns;
+Landroid/provider/ContactsContract$StatusColumns;
+Landroid/provider/FontsContract$1;
+Landroid/provider/FontsContract;
+Landroid/provider/MediaStore$MediaColumns;
+Landroid/provider/Settings$ContentProviderHolder;
+Landroid/provider/Settings$GenerationTracker;
+Landroid/provider/Settings$Global;
+Landroid/provider/Settings$NameValueCache;
+Landroid/provider/Settings$NameValueTable;
+Landroid/provider/Settings$Secure;
+Landroid/provider/Settings$SettingNotFoundException;
+Landroid/provider/Settings$System$1;
+Landroid/provider/Settings$System$2;
+Landroid/provider/Settings$System$3;
+Landroid/provider/Settings$System$4;
+Landroid/provider/Settings$System$5;
+Landroid/provider/Settings$System$6;
+Landroid/provider/Settings$System$7;
+Landroid/provider/Settings$System$8;
+Landroid/provider/Settings$System$9;
+Landroid/provider/Settings$System$DiscreteValueValidator;
+Landroid/provider/Settings$System$InclusiveFloatRangeValidator;
+Landroid/provider/Settings$System$InclusiveIntegerRangeValidator;
+Landroid/provider/Settings$System$Validator;
+Landroid/provider/Settings$System;
+Landroid/provider/Settings;
+Landroid/renderscript/RenderScriptCacheDir;
+Landroid/security/IKeystoreService$Stub$Proxy;
+Landroid/security/IKeystoreService$Stub;
+Landroid/security/IKeystoreService;
+Landroid/security/KeyStore;
+Landroid/security/keystore/AndroidKeyStoreBCWorkaroundProvider;
+Landroid/security/keystore/AndroidKeyStoreProvider;
+Landroid/security/net/config/ApplicationConfig;
+Landroid/security/net/config/CertificateSource;
+Landroid/security/net/config/CertificatesEntryRef;
+Landroid/security/net/config/ConfigNetworkSecurityPolicy;
+Landroid/security/net/config/ConfigSource;
+Landroid/security/net/config/DirectoryCertificateSource$1;
+Landroid/security/net/config/DirectoryCertificateSource$3;
+Landroid/security/net/config/DirectoryCertificateSource$CertSelector;
+Landroid/security/net/config/DirectoryCertificateSource;
+Landroid/security/net/config/KeyStoreCertificateSource;
+Landroid/security/net/config/KeyStoreConfigSource;
+Landroid/security/net/config/ManifestConfigSource$DefaultConfigSource;
+Landroid/security/net/config/ManifestConfigSource;
+Landroid/security/net/config/NetworkSecurityConfig$1;
+Landroid/security/net/config/NetworkSecurityConfig$Builder;
+Landroid/security/net/config/NetworkSecurityConfig;
+Landroid/security/net/config/NetworkSecurityConfigProvider;
+Landroid/security/net/config/NetworkSecurityTrustManager;
+Landroid/security/net/config/PinSet;
+Landroid/security/net/config/RootTrustManager;
+Landroid/security/net/config/RootTrustManagerFactorySpi;
+Landroid/security/net/config/SystemCertificateSource$NoPreloadHolder;
+Landroid/security/net/config/SystemCertificateSource;
+Landroid/security/net/config/TrustedCertificateStoreAdapter;
+Landroid/security/net/config/UserCertificateSource;
+Landroid/security/net/config/XmlConfigSource$ParserException;
+Landroid/security/net/config/XmlConfigSource;
+Landroid/service/notification/Condition$1;
+Landroid/service/notification/INotificationListener$Stub;
+Landroid/service/notification/INotificationListener;
+Landroid/service/notification/IStatusBarNotificationHolder$Stub;
+Landroid/service/notification/IStatusBarNotificationHolder;
+Landroid/service/notification/NotificationListenerService$MyHandler;
+Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;
+Landroid/service/notification/NotificationListenerService$RankingMap$1;
+Landroid/service/notification/NotificationListenerService;
+Landroid/service/notification/NotificationRankingUpdate$1;
+Landroid/service/notification/StatusBarNotification$1;
+Landroid/service/notification/ZenModeConfig$ZenRule$1;
+Landroid/service/oemlock/OemLockManager;
+Landroid/service/persistentdata/PersistentDataBlockManager;
+Landroid/service/vr/IVrManager$Stub;
+Landroid/service/vr/IVrManager;
+Landroid/service/vr/IVrStateCallbacks$Stub;
+Landroid/service/vr/IVrStateCallbacks;
+Landroid/system/ErrnoException;
+Landroid/system/GaiException;
+Landroid/system/NetlinkSocketAddress;
+Landroid/system/Os;
+Landroid/system/OsConstants;
+Landroid/system/PacketSocketAddress;
+Landroid/system/StructAddrinfo;
+Landroid/system/StructFlock;
+Landroid/system/StructGroupReq;
+Landroid/system/StructGroupSourceReq;
+Landroid/system/StructIfaddrs;
+Landroid/system/StructLinger;
+Landroid/system/StructPasswd;
+Landroid/system/StructPollfd;
+Landroid/system/StructStat;
+Landroid/system/StructStatVfs;
+Landroid/system/StructTimespec;
+Landroid/system/StructTimeval;
+Landroid/system/StructUcred;
+Landroid/system/StructUtsname;
+Landroid/system/UnixSocketAddress;
+Landroid/telecom/DisconnectCause$1;
+Landroid/telecom/Log$1;
+Landroid/telecom/PhoneAccount$1;
+Landroid/telecom/PhoneAccountHandle$1;
+Landroid/telecom/TelecomManager;
+Landroid/telephony/CarrierConfigManager;
+Landroid/telephony/CellIdentityLte$1;
+Landroid/telephony/CellInfo$1;
+Landroid/telephony/CellInfoLte$1;
+Landroid/telephony/CellSignalStrengthLte$1;
+Landroid/telephony/PhoneStateListener$1;
+Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;
+Landroid/telephony/PhoneStateListener;
+Landroid/telephony/Rlog;
+Landroid/telephony/ServiceState$1;
+Landroid/telephony/SignalStrength$1;
+Landroid/telephony/SubscriptionInfo$1;
+Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$1;
+Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$2;
+Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;
+Landroid/telephony/SubscriptionManager;
+Landroid/telephony/TelephonyManager;
+Landroid/telephony/euicc/EuiccManager;
+Landroid/text/AndroidBidi;
+Landroid/text/AndroidCharacter;
+Landroid/text/Annotation;
+Landroid/text/BoringLayout$Metrics;
+Landroid/text/BoringLayout;
+Landroid/text/ClipboardManager;
+Landroid/text/DynamicLayout$ChangeWatcher;
+Landroid/text/DynamicLayout;
+Landroid/text/Editable$Factory;
+Landroid/text/Editable;
+Landroid/text/FontConfig$Alias;
+Landroid/text/FontConfig$Family;
+Landroid/text/FontConfig$Font;
+Landroid/text/FontConfig;
+Landroid/text/GetChars;
+Landroid/text/GraphicsOperations;
+Landroid/text/Html;
+Landroid/text/HtmlToSpannedConverter$Href;
+Landroid/text/Hyphenator$HyphenationData;
+Landroid/text/Hyphenator;
+Landroid/text/InputFilter;
+Landroid/text/InputType;
+Landroid/text/Layout$Alignment;
+Landroid/text/Layout$Directions;
+Landroid/text/Layout$Ellipsizer;
+Landroid/text/Layout$SpannedEllipsizer;
+Landroid/text/Layout;
+Landroid/text/MeasuredText;
+Landroid/text/NoCopySpan$Concrete;
+Landroid/text/NoCopySpan;
+Landroid/text/PackedIntVector;
+Landroid/text/PackedObjectVector;
+Landroid/text/ParcelableSpan;
+Landroid/text/Selection$END;
+Landroid/text/Selection$START;
+Landroid/text/Selection;
+Landroid/text/SpanSet;
+Landroid/text/SpanWatcher;
+Landroid/text/Spannable$Factory;
+Landroid/text/Spannable;
+Landroid/text/SpannableString;
+Landroid/text/SpannableStringBuilder;
+Landroid/text/SpannableStringInternal;
+Landroid/text/Spanned;
+Landroid/text/SpannedString;
+Landroid/text/StaticLayout$Builder;
+Landroid/text/StaticLayout$LineBreaks;
+Landroid/text/StaticLayout;
+Landroid/text/TextDirectionHeuristic;
+Landroid/text/TextDirectionHeuristics$AnyStrong;
+Landroid/text/TextDirectionHeuristics$FirstStrong;
+Landroid/text/TextDirectionHeuristics$TextDirectionAlgorithm;
+Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;
+Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;
+Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;
+Landroid/text/TextDirectionHeuristics;
+Landroid/text/TextLine$DecorationInfo;
+Landroid/text/TextLine;
+Landroid/text/TextPaint;
+Landroid/text/TextUtils$1;
+Landroid/text/TextUtils$EllipsizeCallback;
+Landroid/text/TextUtils$SimpleStringSplitter;
+Landroid/text/TextUtils$StringSplitter;
+Landroid/text/TextUtils$TruncateAt;
+Landroid/text/TextUtils;
+Landroid/text/TextWatcher;
+Landroid/text/format/Time$TimeCalculator;
+Landroid/text/method/AllCapsTransformationMethod;
+Landroid/text/method/ArrowKeyMovementMethod;
+Landroid/text/method/BaseKeyListener;
+Landroid/text/method/BaseMovementMethod;
+Landroid/text/method/KeyListener;
+Landroid/text/method/MetaKeyKeyListener;
+Landroid/text/method/MovementMethod;
+Landroid/text/method/PasswordTransformationMethod;
+Landroid/text/method/ReplacementTransformationMethod$ReplacementCharSequence;
+Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;
+Landroid/text/method/ReplacementTransformationMethod;
+Landroid/text/method/SingleLineTransformationMethod;
+Landroid/text/method/TextKeyListener$Capitalize;
+Landroid/text/method/TextKeyListener;
+Landroid/text/method/TransformationMethod2;
+Landroid/text/method/TransformationMethod;
+Landroid/text/style/AlignmentSpan;
+Landroid/text/style/CharacterStyle;
+Landroid/text/style/EasyEditSpan;
+Landroid/text/style/ForegroundColorSpan;
+Landroid/text/style/LeadingMarginSpan;
+Landroid/text/style/LineBackgroundSpan;
+Landroid/text/style/LineHeightSpan;
+Landroid/text/style/MetricAffectingSpan;
+Landroid/text/style/ParagraphStyle;
+Landroid/text/style/ReplacementSpan;
+Landroid/text/style/SpellCheckSpan;
+Landroid/text/style/StyleSpan;
+Landroid/text/style/SuggestionSpan;
+Landroid/text/style/TabStopSpan;
+Landroid/text/style/TextAppearanceSpan;
+Landroid/text/style/URLSpan;
+Landroid/text/style/UnderlineSpan;
+Landroid/text/style/UpdateAppearance;
+Landroid/text/style/UpdateLayout;
+Landroid/text/style/WrapTogetherSpan;
+Landroid/transition/AutoTransition;
+Landroid/transition/ChangeBounds$1;
+Landroid/transition/ChangeBounds$2;
+Landroid/transition/ChangeBounds$3;
+Landroid/transition/ChangeBounds$4;
+Landroid/transition/ChangeBounds$5;
+Landroid/transition/ChangeBounds$6;
+Landroid/transition/ChangeBounds;
+Landroid/transition/ChangeClipBounds;
+Landroid/transition/ChangeImageTransform$1;
+Landroid/transition/ChangeImageTransform$2;
+Landroid/transition/ChangeImageTransform;
+Landroid/transition/ChangeTransform$1;
+Landroid/transition/ChangeTransform$2;
+Landroid/transition/ChangeTransform;
+Landroid/transition/Fade;
+Landroid/transition/PathMotion;
+Landroid/transition/Scene;
+Landroid/transition/Transition$1;
+Landroid/transition/Transition;
+Landroid/transition/TransitionInflater;
+Landroid/transition/TransitionManager;
+Landroid/transition/TransitionSet;
+Landroid/transition/TransitionValuesMaps;
+Landroid/transition/Visibility;
+Landroid/util/AndroidException;
+Landroid/util/AndroidRuntimeException;
+Landroid/util/ArrayMap$1;
+Landroid/util/ArrayMap;
+Landroid/util/ArraySet$1;
+Landroid/util/ArraySet;
+Landroid/util/AtomicFile;
+Landroid/util/AttributeSet;
+Landroid/util/Base64$Coder;
+Landroid/util/Base64$Decoder;
+Landroid/util/Base64$Encoder;
+Landroid/util/Base64;
+Landroid/util/ContainerHelpers;
+Landroid/util/DebugUtils;
+Landroid/util/DisplayMetrics;
+Landroid/util/EventLog$Event;
+Landroid/util/EventLog;
+Landroid/util/FloatProperty;
+Landroid/util/IntArray;
+Landroid/util/IntProperty;
+Landroid/util/Log$1;
+Landroid/util/Log$ImmediateLogWriter;
+Landroid/util/Log$TerribleFailureHandler;
+Landroid/util/Log;
+Landroid/util/LogPrinter;
+Landroid/util/LongArray;
+Landroid/util/LongSparseArray;
+Landroid/util/LongSparseLongArray;
+Landroid/util/LruCache;
+Landroid/util/MapCollections$ArrayIterator;
+Landroid/util/MapCollections$EntrySet;
+Landroid/util/MapCollections$KeySet;
+Landroid/util/MapCollections$MapIterator;
+Landroid/util/MapCollections$ValuesCollection;
+Landroid/util/MapCollections;
+Landroid/util/MathUtils;
+Landroid/util/MemoryIntArray$1;
+Landroid/util/MemoryIntArray;
+Landroid/util/MergedConfiguration$1;
+Landroid/util/MergedConfiguration;
+Landroid/util/MutableInt;
+Landroid/util/MutableLong;
+Landroid/util/Pair;
+Landroid/util/PathParser$PathData;
+Landroid/util/PathParser;
+Landroid/util/Pools$Pool;
+Landroid/util/Pools$SimplePool;
+Landroid/util/Pools$SynchronizedPool;
+Landroid/util/Printer;
+Landroid/util/Property;
+Landroid/util/Range;
+Landroid/util/Rational;
+Landroid/util/Singleton;
+Landroid/util/Size;
+Landroid/util/SizeF;
+Landroid/util/Slog;
+Landroid/util/SparseArray;
+Landroid/util/SparseBooleanArray;
+Landroid/util/SparseIntArray;
+Landroid/util/SparseLongArray;
+Landroid/util/StateSet;
+Landroid/util/SuperNotCalledException;
+Landroid/util/TimingLogger;
+Landroid/util/TimingsTraceLog;
+Landroid/util/TypedValue;
+Landroid/util/Xml;
+Landroid/util/jar/StrictJarFile;
+Landroid/view/-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$1;
+Landroid/view/-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk;
+Landroid/view/-$Lambda$XmA8Y30pNAdQP9ujRlGx1qfDHH8;
+Landroid/view/AbsSavedState$1;
+Landroid/view/AbsSavedState$2;
+Landroid/view/AbsSavedState;
+Landroid/view/AccessibilityInteractionController$AccessibilityNodePrefetcher;
+Landroid/view/AccessibilityInteractionController$PrivateHandler;
+Landroid/view/AccessibilityInteractionController;
+Landroid/view/ActionMode$Callback;
+Landroid/view/ActionMode;
+Landroid/view/ActionProvider$SubUiVisibilityListener;
+Landroid/view/ActionProvider;
+Landroid/view/Choreographer$1;
+Landroid/view/Choreographer$2;
+Landroid/view/Choreographer$3;
+Landroid/view/Choreographer$CallbackQueue;
+Landroid/view/Choreographer$CallbackRecord;
+Landroid/view/Choreographer$FrameCallback;
+Landroid/view/Choreographer$FrameDisplayEventReceiver;
+Landroid/view/Choreographer$FrameHandler;
+Landroid/view/Choreographer;
+Landroid/view/ContextMenu$ContextMenuInfo;
+Landroid/view/ContextMenu;
+Landroid/view/ContextThemeWrapper;
+Landroid/view/Display$HdrCapabilities$1;
+Landroid/view/Display$HdrCapabilities;
+Landroid/view/Display$Mode$1;
+Landroid/view/Display$Mode;
+Landroid/view/Display;
+Landroid/view/DisplayAdjustments;
+Landroid/view/DisplayEventReceiver;
+Landroid/view/DisplayInfo$1;
+Landroid/view/DisplayInfo;
+Landroid/view/DisplayListCanvas;
+Landroid/view/FallbackEventHandler;
+Landroid/view/FocusFinder$1;
+Landroid/view/FocusFinder$FocusSorter;
+Landroid/view/FocusFinder$UserSpecifiedFocusComparator$NextFocusGetter;
+Landroid/view/FocusFinder$UserSpecifiedFocusComparator;
+Landroid/view/FocusFinder;
+Landroid/view/FrameInfo;
+Landroid/view/FrameMetrics;
+Landroid/view/FrameMetricsObserver;
+Landroid/view/FrameStats;
+Landroid/view/GestureDetector$GestureHandler;
+Landroid/view/GestureDetector$OnContextClickListener;
+Landroid/view/GestureDetector$OnDoubleTapListener;
+Landroid/view/GestureDetector$OnGestureListener;
+Landroid/view/GestureDetector$SimpleOnGestureListener;
+Landroid/view/GestureDetector;
+Landroid/view/Gravity;
+Landroid/view/HandlerActionQueue$HandlerAction;
+Landroid/view/HandlerActionQueue;
+Landroid/view/HardwareLayer;
+Landroid/view/IGraphicsStats$Stub$Proxy;
+Landroid/view/IGraphicsStats$Stub;
+Landroid/view/IGraphicsStats;
+Landroid/view/IGraphicsStatsCallback$Stub;
+Landroid/view/IGraphicsStatsCallback;
+Landroid/view/IRotationWatcher$Stub;
+Landroid/view/IRotationWatcher;
+Landroid/view/IWindow$Stub;
+Landroid/view/IWindow;
+Landroid/view/IWindowManager$Stub$Proxy;
+Landroid/view/IWindowManager$Stub;
+Landroid/view/IWindowManager;
+Landroid/view/IWindowSession$Stub$Proxy;
+Landroid/view/IWindowSession$Stub;
+Landroid/view/IWindowSession;
+Landroid/view/IWindowSessionCallback$Stub;
+Landroid/view/IWindowSessionCallback;
+Landroid/view/InflateException;
+Landroid/view/InputChannel$1;
+Landroid/view/InputChannel;
+Landroid/view/InputDevice$1;
+Landroid/view/InputDevice$MotionRange;
+Landroid/view/InputDevice;
+Landroid/view/InputEvent$1;
+Landroid/view/InputEvent;
+Landroid/view/InputEventConsistencyVerifier;
+Landroid/view/InputEventReceiver;
+Landroid/view/InputEventSender;
+Landroid/view/InputQueue$Callback;
+Landroid/view/InputQueue$FinishedInputEventCallback;
+Landroid/view/InputQueue;
+Landroid/view/KeyCharacterMap$1;
+Landroid/view/KeyCharacterMap$FallbackAction;
+Landroid/view/KeyCharacterMap;
+Landroid/view/KeyEvent$1;
+Landroid/view/KeyEvent$Callback;
+Landroid/view/KeyEvent$DispatcherState;
+Landroid/view/KeyEvent;
+Landroid/view/LayoutInflater$Factory2;
+Landroid/view/LayoutInflater$Factory;
+Landroid/view/LayoutInflater$FactoryMerger;
+Landroid/view/LayoutInflater$Filter;
+Landroid/view/LayoutInflater;
+Landroid/view/Menu;
+Landroid/view/MenuInflater$MenuState;
+Landroid/view/MenuInflater;
+Landroid/view/MenuItem$OnActionExpandListener;
+Landroid/view/MenuItem$OnMenuItemClickListener;
+Landroid/view/MenuItem;
+Landroid/view/MotionEvent$1;
+Landroid/view/MotionEvent$PointerCoords;
+Landroid/view/MotionEvent$PointerProperties;
+Landroid/view/MotionEvent;
+Landroid/view/OrientationEventListener$SensorEventListenerImpl;
+Landroid/view/OrientationEventListener;
+Landroid/view/PointerIcon$1;
+Landroid/view/PointerIcon;
+Landroid/view/RecordingCanvas;
+Landroid/view/RenderNode$NoImagePreloadHolder;
+Landroid/view/RenderNode;
+Landroid/view/RenderNodeAnimator$1;
+Landroid/view/RenderNodeAnimator;
+Landroid/view/RenderNodeAnimatorSetHelper;
+Landroid/view/ScaleGestureDetector$1;
+Landroid/view/ScaleGestureDetector$OnScaleGestureListener;
+Landroid/view/ScaleGestureDetector$SimpleOnScaleGestureListener;
+Landroid/view/ScaleGestureDetector;
+Landroid/view/SearchEvent;
+Landroid/view/SubMenu;
+Landroid/view/Surface$1;
+Landroid/view/Surface$CompatibleCanvas;
+Landroid/view/Surface$OutOfResourcesException;
+Landroid/view/Surface;
+Landroid/view/SurfaceControl$PhysicalDisplayInfo;
+Landroid/view/SurfaceControl;
+Landroid/view/SurfaceHolder$Callback2;
+Landroid/view/SurfaceHolder$Callback;
+Landroid/view/SurfaceHolder;
+Landroid/view/SurfaceSession;
+Landroid/view/SurfaceView$1;
+Landroid/view/SurfaceView$2;
+Landroid/view/SurfaceView$3;
+Landroid/view/SurfaceView$SurfaceControlWithBackground;
+Landroid/view/SurfaceView;
+Landroid/view/TextureView$1;
+Landroid/view/TextureView$SurfaceTextureListener;
+Landroid/view/TextureView;
+Landroid/view/ThreadedRenderer$DrawCallbacks;
+Landroid/view/ThreadedRenderer$ProcessInitializer$1;
+Landroid/view/ThreadedRenderer$ProcessInitializer;
+Landroid/view/ThreadedRenderer;
+Landroid/view/TouchDelegate;
+Landroid/view/VelocityTracker$Estimator;
+Landroid/view/VelocityTracker;
+Landroid/view/View$10;
+Landroid/view/View$11;
+Landroid/view/View$12;
+Landroid/view/View$1;
+Landroid/view/View$2;
+Landroid/view/View$3;
+Landroid/view/View$4;
+Landroid/view/View$5;
+Landroid/view/View$6;
+Landroid/view/View$7;
+Landroid/view/View$8;
+Landroid/view/View$9;
+Landroid/view/View$AccessibilityDelegate;
+Landroid/view/View$AttachInfo$Callbacks;
+Landroid/view/View$AttachInfo;
+Landroid/view/View$BaseSavedState$1;
+Landroid/view/View$BaseSavedState;
+Landroid/view/View$CheckForTap;
+Landroid/view/View$ForegroundInfo;
+Landroid/view/View$ListenerInfo;
+Landroid/view/View$MatchLabelForPredicate;
+Landroid/view/View$MeasureSpec;
+Landroid/view/View$OnApplyWindowInsetsListener;
+Landroid/view/View$OnAttachStateChangeListener;
+Landroid/view/View$OnClickListener;
+Landroid/view/View$OnCreateContextMenuListener;
+Landroid/view/View$OnDragListener;
+Landroid/view/View$OnFocusChangeListener;
+Landroid/view/View$OnHoverListener;
+Landroid/view/View$OnKeyListener;
+Landroid/view/View$OnLayoutChangeListener;
+Landroid/view/View$OnLongClickListener;
+Landroid/view/View$OnSystemUiVisibilityChangeListener;
+Landroid/view/View$OnTouchListener;
+Landroid/view/View$PerformClick;
+Landroid/view/View$ScrollabilityCache;
+Landroid/view/View$SendViewScrolledAccessibilityEvent;
+Landroid/view/View$TooltipInfo;
+Landroid/view/View$TransformationInfo;
+Landroid/view/View$UnsetPressedState;
+Landroid/view/View$VisibilityChangeForAutofillHandler;
+Landroid/view/View;
+Landroid/view/ViewConfiguration;
+Landroid/view/ViewDebug$HierarchyHandler;
+Landroid/view/ViewGroup$1;
+Landroid/view/ViewGroup$2;
+Landroid/view/ViewGroup$LayoutParams;
+Landroid/view/ViewGroup$MarginLayoutParams;
+Landroid/view/ViewGroup$OnHierarchyChangeListener;
+Landroid/view/ViewGroup$TouchTarget;
+Landroid/view/ViewGroup;
+Landroid/view/ViewGroupOverlay;
+Landroid/view/ViewManager;
+Landroid/view/ViewOutlineProvider$1;
+Landroid/view/ViewOutlineProvider$2;
+Landroid/view/ViewOutlineProvider$3;
+Landroid/view/ViewOutlineProvider;
+Landroid/view/ViewOverlay$OverlayViewGroup;
+Landroid/view/ViewOverlay;
+Landroid/view/ViewParent;
+Landroid/view/ViewPropertyAnimator$1;
+Landroid/view/ViewPropertyAnimator$AnimatorEventListener;
+Landroid/view/ViewPropertyAnimator$NameValuesHolder;
+Landroid/view/ViewPropertyAnimator$PropertyBundle;
+Landroid/view/ViewPropertyAnimator;
+Landroid/view/ViewRootImpl$1;
+Landroid/view/ViewRootImpl$4;
+Landroid/view/ViewRootImpl$AccessibilityInteractionConnection;
+Landroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;
+Landroid/view/ViewRootImpl$ActivityConfigCallback;
+Landroid/view/ViewRootImpl$AsyncInputStage;
+Landroid/view/ViewRootImpl$ConfigChangedCallback;
+Landroid/view/ViewRootImpl$ConsumeBatchedInputImmediatelyRunnable;
+Landroid/view/ViewRootImpl$ConsumeBatchedInputRunnable;
+Landroid/view/ViewRootImpl$EarlyPostImeInputStage;
+Landroid/view/ViewRootImpl$HighContrastTextManager;
+Landroid/view/ViewRootImpl$ImeInputStage;
+Landroid/view/ViewRootImpl$InputStage;
+Landroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;
+Landroid/view/ViewRootImpl$NativePostImeInputStage;
+Landroid/view/ViewRootImpl$NativePreImeInputStage;
+Landroid/view/ViewRootImpl$QueuedInputEvent;
+Landroid/view/ViewRootImpl$SendWindowContentChangedAccessibilityEvent;
+Landroid/view/ViewRootImpl$SyntheticInputStage;
+Landroid/view/ViewRootImpl$SyntheticJoystickHandler;
+Landroid/view/ViewRootImpl$SyntheticKeyboardHandler;
+Landroid/view/ViewRootImpl$SyntheticTouchNavigationHandler$1;
+Landroid/view/ViewRootImpl$SyntheticTouchNavigationHandler;
+Landroid/view/ViewRootImpl$SyntheticTrackballHandler;
+Landroid/view/ViewRootImpl$SystemUiVisibilityInfo;
+Landroid/view/ViewRootImpl$TrackballAxis;
+Landroid/view/ViewRootImpl$TraversalRunnable;
+Landroid/view/ViewRootImpl$ViewPostImeInputStage;
+Landroid/view/ViewRootImpl$ViewPreImeInputStage;
+Landroid/view/ViewRootImpl$ViewRootHandler;
+Landroid/view/ViewRootImpl$W;
+Landroid/view/ViewRootImpl$WindowInputEventReceiver;
+Landroid/view/ViewRootImpl$WindowStoppedCallback;
+Landroid/view/ViewRootImpl;
+Landroid/view/ViewStructure;
+Landroid/view/ViewStub;
+Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;
+Landroid/view/ViewTreeObserver$CopyOnWriteArray;
+Landroid/view/ViewTreeObserver$InternalInsetsInfo;
+Landroid/view/ViewTreeObserver$OnGlobalFocusChangeListener;
+Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;
+Landroid/view/ViewTreeObserver$OnPreDrawListener;
+Landroid/view/ViewTreeObserver$OnScrollChangedListener;
+Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;
+Landroid/view/ViewTreeObserver;
+Landroid/view/Window$Callback;
+Landroid/view/Window$OnWindowDismissedCallback;
+Landroid/view/Window$OnWindowSwipeDismissedCallback;
+Landroid/view/Window$WindowControllerCallback;
+Landroid/view/Window;
+Landroid/view/WindowAnimationFrameStats$1;
+Landroid/view/WindowAnimationFrameStats;
+Landroid/view/WindowCallbacks;
+Landroid/view/WindowContentFrameStats$1;
+Landroid/view/WindowContentFrameStats;
+Landroid/view/WindowInsets;
+Landroid/view/WindowLeaked;
+Landroid/view/WindowManager$BadTokenException;
+Landroid/view/WindowManager$LayoutParams$1;
+Landroid/view/WindowManager$LayoutParams;
+Landroid/view/WindowManager;
+Landroid/view/WindowManagerGlobal$1;
+Landroid/view/WindowManagerGlobal$2;
+Landroid/view/WindowManagerGlobal;
+Landroid/view/WindowManagerImpl;
+Landroid/view/accessibility/-$Lambda$T3m_l9_RA18vCOcakSWp1lZCy5g$1;
+Landroid/view/accessibility/AccessibilityEvent$1;
+Landroid/view/accessibility/AccessibilityEvent;
+Landroid/view/accessibility/AccessibilityEventSource;
+Landroid/view/accessibility/AccessibilityManager$1;
+Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;
+Landroid/view/accessibility/AccessibilityManager$HighTextContrastChangeListener;
+Landroid/view/accessibility/AccessibilityManager$MyCallback;
+Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;
+Landroid/view/accessibility/AccessibilityManager;
+Landroid/view/accessibility/AccessibilityNodeInfo$1;
+Landroid/view/accessibility/AccessibilityNodeInfo;
+Landroid/view/accessibility/AccessibilityNodeProvider;
+Landroid/view/accessibility/AccessibilityRecord;
+Landroid/view/accessibility/CaptioningManager$1;
+Landroid/view/accessibility/CaptioningManager$CaptioningChangeListener;
+Landroid/view/accessibility/CaptioningManager$MyContentObserver;
+Landroid/view/accessibility/CaptioningManager;
+Landroid/view/accessibility/IAccessibilityInteractionConnection$Stub;
+Landroid/view/accessibility/IAccessibilityInteractionConnection;
+Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback$Stub$Proxy;
+Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback$Stub;
+Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;
+Landroid/view/accessibility/IAccessibilityManager$Stub$Proxy;
+Landroid/view/accessibility/IAccessibilityManager$Stub;
+Landroid/view/accessibility/IAccessibilityManager;
+Landroid/view/accessibility/IAccessibilityManagerClient$Stub;
+Landroid/view/accessibility/IAccessibilityManagerClient;
+Landroid/view/animation/AccelerateDecelerateInterpolator;
+Landroid/view/animation/AccelerateInterpolator;
+Landroid/view/animation/AlphaAnimation;
+Landroid/view/animation/Animation$1;
+Landroid/view/animation/Animation$2;
+Landroid/view/animation/Animation$3;
+Landroid/view/animation/Animation$AnimationListener;
+Landroid/view/animation/Animation$Description;
+Landroid/view/animation/Animation;
+Landroid/view/animation/AnimationSet;
+Landroid/view/animation/AnimationUtils$1;
+Landroid/view/animation/AnimationUtils$AnimationState;
+Landroid/view/animation/AnimationUtils;
+Landroid/view/animation/BaseInterpolator;
+Landroid/view/animation/DecelerateInterpolator;
+Landroid/view/animation/Interpolator;
+Landroid/view/animation/LayoutAnimationController;
+Landroid/view/animation/LinearInterpolator;
+Landroid/view/animation/OvershootInterpolator;
+Landroid/view/animation/PathInterpolator;
+Landroid/view/animation/Transformation;
+Landroid/view/animation/TranslateAnimation;
+Landroid/view/autofill/AutofillId$1;
+Landroid/view/autofill/AutofillManager$AutofillClient;
+Landroid/view/autofill/AutofillManager$AutofillManagerClient;
+Landroid/view/autofill/AutofillManager;
+Landroid/view/autofill/AutofillValue$1;
+Landroid/view/autofill/IAutoFillManager$Stub$Proxy;
+Landroid/view/autofill/IAutoFillManager$Stub;
+Landroid/view/autofill/IAutoFillManager;
+Landroid/view/autofill/IAutoFillManagerClient$Stub;
+Landroid/view/autofill/IAutoFillManagerClient;
+Landroid/view/autofill/IAutofillWindowPresenter;
+Landroid/view/inputmethod/BaseInputConnection;
+Landroid/view/inputmethod/ComposingText;
+Landroid/view/inputmethod/CursorAnchorInfo$Builder;
+Landroid/view/inputmethod/EditorInfo$1;
+Landroid/view/inputmethod/EditorInfo;
+Landroid/view/inputmethod/ExtractedText$1;
+Landroid/view/inputmethod/InputConnection;
+Landroid/view/inputmethod/InputMethodInfo$1;
+Landroid/view/inputmethod/InputMethodManager$1;
+Landroid/view/inputmethod/InputMethodManager$ControlledInputConnectionWrapper;
+Landroid/view/inputmethod/InputMethodManager$FinishedInputEventCallback;
+Landroid/view/inputmethod/InputMethodManager$H;
+Landroid/view/inputmethod/InputMethodManager$ImeInputEventSender;
+Landroid/view/inputmethod/InputMethodManager$PendingEvent;
+Landroid/view/inputmethod/InputMethodManager;
+Landroid/view/inputmethod/InputMethodSubtype$1;
+Landroid/view/inputmethod/InputMethodSubtypeArray;
+Landroid/view/textclassifier/TextClassificationManager;
+Landroid/view/textservice/TextServicesManager;
+Landroid/webkit/IWebViewUpdateService$Stub$Proxy;
+Landroid/webkit/IWebViewUpdateService$Stub;
+Landroid/webkit/IWebViewUpdateService;
+Landroid/webkit/WebSyncManager;
+Landroid/webkit/WebViewFactory$MissingWebViewPackageException;
+Landroid/webkit/WebViewFactory;
+Landroid/webkit/WebViewLibraryLoader;
+Landroid/webkit/WebViewProviderResponse$1;
+Landroid/widget/-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4$1;
+Landroid/widget/-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4;
+Landroid/widget/AbsListView$AdapterDataSetObserver;
+Landroid/widget/AbsListView$LayoutParams;
+Landroid/widget/AbsListView$OnScrollListener;
+Landroid/widget/AbsListView$RecycleBin;
+Landroid/widget/AbsListView$SavedState$1;
+Landroid/widget/AbsListView;
+Landroid/widget/AbsSeekBar;
+Landroid/widget/AbsoluteLayout;
+Landroid/widget/ActionMenuPresenter$1;
+Landroid/widget/ActionMenuPresenter$2;
+Landroid/widget/ActionMenuPresenter$OverflowMenuButton$1;
+Landroid/widget/ActionMenuPresenter$OverflowMenuButton;
+Landroid/widget/ActionMenuPresenter$PopupPresenterCallback;
+Landroid/widget/ActionMenuPresenter;
+Landroid/widget/ActionMenuView$ActionMenuChildView;
+Landroid/widget/ActionMenuView$LayoutParams;
+Landroid/widget/ActionMenuView$MenuBuilderCallback;
+Landroid/widget/ActionMenuView$OnMenuItemClickListener;
+Landroid/widget/ActionMenuView;
+Landroid/widget/Adapter;
+Landroid/widget/AdapterView$AdapterDataSetObserver;
+Landroid/widget/AdapterView$OnItemClickListener;
+Landroid/widget/AdapterView$OnItemSelectedListener;
+Landroid/widget/AdapterView;
+Landroid/widget/ArrayAdapter;
+Landroid/widget/AutoCompleteTextView$DropDownItemClickListener;
+Landroid/widget/AutoCompleteTextView$MyWatcher;
+Landroid/widget/AutoCompleteTextView$PassThroughClickListener;
+Landroid/widget/AutoCompleteTextView;
+Landroid/widget/BaseAdapter;
+Landroid/widget/Button;
+Landroid/widget/CheckBox;
+Landroid/widget/Checkable;
+Landroid/widget/CompoundButton$OnCheckedChangeListener;
+Landroid/widget/EdgeEffect;
+Landroid/widget/EditText;
+Landroid/widget/Editor$1;
+Landroid/widget/Editor$2;
+Landroid/widget/Editor$Blink;
+Landroid/widget/Editor$CursorAnchorInfoNotifier;
+Landroid/widget/Editor$CursorController;
+Landroid/widget/Editor$InputContentType;
+Landroid/widget/Editor$InputMethodState;
+Landroid/widget/Editor$InsertionPointCursorController;
+Landroid/widget/Editor$PositionListener;
+Landroid/widget/Editor$ProcessTextIntentActionsHandler;
+Landroid/widget/Editor$SelectionModifierCursorController;
+Landroid/widget/Editor$SpanController;
+Landroid/widget/Editor$SuggestionHelper$SuggestionSpanComparator;
+Landroid/widget/Editor$SuggestionHelper;
+Landroid/widget/Editor$TextRenderNode;
+Landroid/widget/Editor$TextViewPositionListener;
+Landroid/widget/Editor$UndoInputFilter;
+Landroid/widget/Editor;
+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/Filter$FilterListener;
+Landroid/widget/Filterable;
+Landroid/widget/ForwardingListener;
+Landroid/widget/FrameLayout$LayoutParams;
+Landroid/widget/FrameLayout;
+Landroid/widget/GridLayout$1;
+Landroid/widget/GridLayout$2;
+Landroid/widget/GridLayout$3;
+Landroid/widget/GridLayout$4;
+Landroid/widget/GridLayout$5;
+Landroid/widget/GridLayout$6$1;
+Landroid/widget/GridLayout$6;
+Landroid/widget/GridLayout$7;
+Landroid/widget/GridLayout$8;
+Landroid/widget/GridLayout$Alignment;
+Landroid/widget/GridLayout$Arc;
+Landroid/widget/GridLayout$Assoc;
+Landroid/widget/GridLayout$Bounds;
+Landroid/widget/GridLayout$Interval;
+Landroid/widget/GridLayout$MutableInt;
+Landroid/widget/GridLayout$PackedMap;
+Landroid/widget/HorizontalScrollView$SavedState$1;
+Landroid/widget/HorizontalScrollView;
+Landroid/widget/ImageButton;
+Landroid/widget/ImageView$ScaleType;
+Landroid/widget/ImageView;
+Landroid/widget/LinearLayout$LayoutParams;
+Landroid/widget/LinearLayout;
+Landroid/widget/ListAdapter;
+Landroid/widget/ListPopupWindow$ListSelectorHider;
+Landroid/widget/ListPopupWindow$PopupScrollListener;
+Landroid/widget/ListPopupWindow$PopupTouchInterceptor;
+Landroid/widget/ListPopupWindow$ResizePopupRunnable;
+Landroid/widget/ListPopupWindow;
+Landroid/widget/ListView$ArrowScrollFocusResult;
+Landroid/widget/ListView$FixedViewInfo;
+Landroid/widget/ListView;
+Landroid/widget/OverScroller$SplineOverScroller;
+Landroid/widget/OverScroller;
+Landroid/widget/PopupWindow$1;
+Landroid/widget/PopupWindow$2;
+Landroid/widget/PopupWindow$OnDismissListener;
+Landroid/widget/ProgressBar$1;
+Landroid/widget/ProgressBar$AccessibilityEventSender;
+Landroid/widget/ProgressBar$SavedState$1;
+Landroid/widget/ProgressBar;
+Landroid/widget/RelativeLayout$DependencyGraph$Node;
+Landroid/widget/RelativeLayout$DependencyGraph;
+Landroid/widget/RelativeLayout$LayoutParams;
+Landroid/widget/RelativeLayout$TopToBottomLeftToRightComparator;
+Landroid/widget/RelativeLayout;
+Landroid/widget/RemoteViews$1;
+Landroid/widget/RemoteViews$2;
+Landroid/widget/RemoteViews$3;
+Landroid/widget/RemoteViews$Action;
+Landroid/widget/RemoteViews$BitmapCache;
+Landroid/widget/RemoteViews$LayoutParamAction;
+Landroid/widget/RemoteViews$MemoryUsageCounter;
+Landroid/widget/RemoteViews$MutablePair;
+Landroid/widget/RemoteViews$OnClickHandler;
+Landroid/widget/RemoteViews$ReflectionAction;
+Landroid/widget/RemoteViews$RemoteView;
+Landroid/widget/RemoteViews$RuntimeAction;
+Landroid/widget/RemoteViews$SetDrawableParameters;
+Landroid/widget/RemoteViewsAdapter$RemoteAdapterConnectionCallback;
+Landroid/widget/RtlSpacingHelper;
+Landroid/widget/ScrollBarDrawable;
+Landroid/widget/ScrollView;
+Landroid/widget/Scroller$ViscousFluidInterpolator;
+Landroid/widget/Scroller;
+Landroid/widget/SectionIndexer;
+Landroid/widget/SeekBar$OnSeekBarChangeListener;
+Landroid/widget/SeekBar;
+Landroid/widget/Space;
+Landroid/widget/SpinnerAdapter;
+Landroid/widget/Switch$1;
+Landroid/widget/TextView$BufferType;
+Landroid/widget/TextView$ChangeWatcher;
+Landroid/widget/TextView$CharWrapper;
+Landroid/widget/TextView$Drawables;
+Landroid/widget/TextView$OnEditorActionListener;
+Landroid/widget/TextView$SavedState$1;
+Landroid/widget/TextView;
+Landroid/widget/ThemedSpinnerAdapter;
+Landroid/widget/Toolbar$1;
+Landroid/widget/Toolbar$2;
+Landroid/widget/Toolbar$ExpandedActionViewMenuPresenter;
+Landroid/widget/Toolbar$LayoutParams;
+Landroid/widget/Toolbar$OnMenuItemClickListener;
+Landroid/widget/Toolbar$SavedState$1;
+Landroid/widget/Toolbar;
+Landroid/widget/ViewAnimator;
+Landroid/widget/WrapperListAdapter;
+Lcom/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet;
+Lcom/android/i18n/phonenumbers/CountryCodeToRegionCodeMap;
+Lcom/android/i18n/phonenumbers/MetadataLoader;
+Lcom/android/i18n/phonenumbers/MetadataManager$1;
+Lcom/android/i18n/phonenumbers/MetadataSource;
+Lcom/android/i18n/phonenumbers/MultiFileMetadataSourceImpl;
+Lcom/android/i18n/phonenumbers/RegexCache$LRUCache$1;
+Lcom/android/i18n/phonenumbers/RegexCache$LRUCache;
+Lcom/android/i18n/phonenumbers/RegexCache;
+Lcom/android/i18n/phonenumbers/ShortNumbersRegionCodeSet;
+Lcom/android/ims/ImsException;
+Lcom/android/internal/R$styleable;
+Lcom/android/internal/app/AlertController$AlertParams;
+Lcom/android/internal/app/IAppOpsCallback$Stub;
+Lcom/android/internal/app/IAppOpsCallback;
+Lcom/android/internal/app/IAppOpsService$Stub$Proxy;
+Lcom/android/internal/app/IAppOpsService$Stub;
+Lcom/android/internal/app/IAppOpsService;
+Lcom/android/internal/app/IBatteryStats$Stub$Proxy;
+Lcom/android/internal/app/IBatteryStats$Stub;
+Lcom/android/internal/app/IBatteryStats;
+Lcom/android/internal/app/IVoiceInteractionManagerService$Stub;
+Lcom/android/internal/app/IVoiceInteractionManagerService;
+Lcom/android/internal/app/IVoiceInteractor$Stub;
+Lcom/android/internal/app/IVoiceInteractor;
+Lcom/android/internal/app/NightDisplayController$1;
+Lcom/android/internal/app/NightDisplayController;
+Lcom/android/internal/appwidget/IAppWidgetService$Stub$Proxy;
+Lcom/android/internal/appwidget/IAppWidgetService$Stub;
+Lcom/android/internal/appwidget/IAppWidgetService;
+Lcom/android/internal/content/NativeLibraryHelper;
+Lcom/android/internal/content/ReferrerIntent$1;
+Lcom/android/internal/content/ReferrerIntent;
+Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;
+Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable;
+Lcom/android/internal/logging/AndroidConfig;
+Lcom/android/internal/logging/AndroidHandler$1;
+Lcom/android/internal/logging/AndroidHandler;
+Lcom/android/internal/logging/EventLogTags;
+Lcom/android/internal/logging/MetricsLogger;
+Lcom/android/internal/net/NetworkStatsFactory;
+Lcom/android/internal/os/AndroidPrintStream;
+Lcom/android/internal/os/BatteryStatsImpl$1;
+Lcom/android/internal/os/BatteryStatsImpl$Clocks;
+Lcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;
+Lcom/android/internal/os/BatteryStatsImpl$Counter;
+Lcom/android/internal/os/BatteryStatsImpl$DualTimer;
+Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;
+Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
+Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounterArray;
+Lcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;
+Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;
+Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
+Lcom/android/internal/os/BatteryStatsImpl$SystemClocks;
+Lcom/android/internal/os/BatteryStatsImpl$TimeBase;
+Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;
+Lcom/android/internal/os/BatteryStatsImpl$Timer;
+Lcom/android/internal/os/BatteryStatsImpl$Uid$1;
+Lcom/android/internal/os/BatteryStatsImpl$Uid$2;
+Lcom/android/internal/os/BatteryStatsImpl$Uid$3;
+Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
+Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;
+Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;
+Lcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;
+Lcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;
+Lcom/android/internal/os/BatteryStatsImpl$Uid;
+Lcom/android/internal/os/BinderInternal$GcWatcher;
+Lcom/android/internal/os/BinderInternal;
+Lcom/android/internal/os/ClassLoaderFactory;
+Lcom/android/internal/os/FuseAppLoop$1;
+Lcom/android/internal/os/FuseAppLoop;
+Lcom/android/internal/os/FuseUnavailableMountException;
+Lcom/android/internal/os/HandlerCaller$Callback;
+Lcom/android/internal/os/HandlerCaller$MyHandler;
+Lcom/android/internal/os/HandlerCaller;
+Lcom/android/internal/os/IResultReceiver$Stub$Proxy;
+Lcom/android/internal/os/IResultReceiver$Stub;
+Lcom/android/internal/os/IResultReceiver;
+Lcom/android/internal/os/KernelMemoryBandwidthStats;
+Lcom/android/internal/os/KernelUidCpuFreqTimeReader;
+Lcom/android/internal/os/KernelUidCpuTimeReader;
+Lcom/android/internal/os/KernelWakelockStats;
+Lcom/android/internal/os/LoggingPrintStream$1;
+Lcom/android/internal/os/LoggingPrintStream;
+Lcom/android/internal/os/PowerProfile$CpuClusterKey;
+Lcom/android/internal/os/RoSystemProperties;
+Lcom/android/internal/os/RuntimeInit$1;
+Lcom/android/internal/os/RuntimeInit$Arguments;
+Lcom/android/internal/os/RuntimeInit$KillApplicationHandler;
+Lcom/android/internal/os/RuntimeInit$LoggingHandler;
+Lcom/android/internal/os/RuntimeInit$MethodAndArgsCaller;
+Lcom/android/internal/os/RuntimeInit;
+Lcom/android/internal/os/SomeArgs;
+Lcom/android/internal/os/Zygote;
+Lcom/android/internal/os/ZygoteConnection$Arguments;
+Lcom/android/internal/os/ZygoteConnection;
+Lcom/android/internal/os/ZygoteInit;
+Lcom/android/internal/os/ZygoteServer;
+Lcom/android/internal/policy/DecorContext;
+Lcom/android/internal/policy/DecorView$1;
+Lcom/android/internal/policy/DecorView$ColorViewAttributes;
+Lcom/android/internal/policy/DecorView$ColorViewState;
+Lcom/android/internal/policy/DecorView;
+Lcom/android/internal/policy/PhoneFallbackEventHandler;
+Lcom/android/internal/policy/PhoneLayoutInflater;
+Lcom/android/internal/policy/PhoneWindow$1;
+Lcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState$1;
+Lcom/android/internal/policy/PhoneWindow$PanelFeatureState;
+Lcom/android/internal/policy/PhoneWindow$PhoneWindowMenuCallback;
+Lcom/android/internal/policy/PhoneWindow$RotationWatcher$1;
+Lcom/android/internal/policy/PhoneWindow$RotationWatcher;
+Lcom/android/internal/policy/PhoneWindow;
+Lcom/android/internal/telecom/ITelecomService$Stub$Proxy;
+Lcom/android/internal/telecom/ITelecomService$Stub;
+Lcom/android/internal/telecom/ITelecomService;
+Lcom/android/internal/telephony/ICarrierConfigLoader$Stub$Proxy;
+Lcom/android/internal/telephony/ICarrierConfigLoader$Stub;
+Lcom/android/internal/telephony/ICarrierConfigLoader;
+Lcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub;
+Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;
+Lcom/android/internal/telephony/IPhoneStateListener$Stub;
+Lcom/android/internal/telephony/IPhoneStateListener;
+Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;
+Lcom/android/internal/telephony/IPhoneSubInfo$Stub;
+Lcom/android/internal/telephony/IPhoneSubInfo;
+Lcom/android/internal/telephony/ISms$Stub;
+Lcom/android/internal/telephony/ISms;
+Lcom/android/internal/telephony/ISub$Stub$Proxy;
+Lcom/android/internal/telephony/ISub$Stub;
+Lcom/android/internal/telephony/ISub;
+Lcom/android/internal/telephony/ITelephony$Stub$Proxy;
+Lcom/android/internal/telephony/ITelephony$Stub;
+Lcom/android/internal/telephony/ITelephony;
+Lcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;
+Lcom/android/internal/telephony/ITelephonyRegistry$Stub;
+Lcom/android/internal/telephony/ITelephonyRegistry;
+Lcom/android/internal/telephony/PhoneConstants$State;
+Lcom/android/internal/util/ArrayUtils;
+Lcom/android/internal/util/BitUtils;
+Lcom/android/internal/util/ExponentiallyBucketedHistogram;
+Lcom/android/internal/util/FastMath;
+Lcom/android/internal/util/FastPrintWriter$DummyWriter;
+Lcom/android/internal/util/FastPrintWriter;
+Lcom/android/internal/util/FastXmlSerializer;
+Lcom/android/internal/util/GrowingArrayUtils;
+Lcom/android/internal/util/IntPair;
+Lcom/android/internal/util/LineBreakBufferedWriter;
+Lcom/android/internal/util/Preconditions;
+Lcom/android/internal/util/State;
+Lcom/android/internal/util/StateMachine$LogRec;
+Lcom/android/internal/util/StateMachine$LogRecords;
+Lcom/android/internal/util/StateMachine$SmHandler$HaltingState;
+Lcom/android/internal/util/StateMachine$SmHandler$QuittingState;
+Lcom/android/internal/util/StateMachine$SmHandler$StateInfo;
+Lcom/android/internal/util/StateMachine;
+Lcom/android/internal/util/VirtualRefBasePtr;
+Lcom/android/internal/util/XmlUtils$WriteMapCallback;
+Lcom/android/internal/util/XmlUtils;
+Lcom/android/internal/view/ActionBarPolicy;
+Lcom/android/internal/view/IInputConnectionWrapper$MyHandler;
+Lcom/android/internal/view/IInputConnectionWrapper;
+Lcom/android/internal/view/IInputContext$Stub;
+Lcom/android/internal/view/IInputContext;
+Lcom/android/internal/view/IInputContextCallback$Stub;
+Lcom/android/internal/view/IInputContextCallback;
+Lcom/android/internal/view/IInputMethodClient$Stub;
+Lcom/android/internal/view/IInputMethodClient;
+Lcom/android/internal/view/IInputMethodManager$Stub$Proxy;
+Lcom/android/internal/view/IInputMethodManager$Stub;
+Lcom/android/internal/view/IInputMethodManager;
+Lcom/android/internal/view/IInputMethodSession$Stub$Proxy;
+Lcom/android/internal/view/IInputMethodSession$Stub;
+Lcom/android/internal/view/IInputMethodSession;
+Lcom/android/internal/view/InputBindResult$1;
+Lcom/android/internal/view/InputBindResult;
+Lcom/android/internal/view/RootViewSurfaceTaker;
+Lcom/android/internal/view/SurfaceCallbackHelper$1;
+Lcom/android/internal/view/SurfaceCallbackHelper;
+Lcom/android/internal/view/animation/FallbackLUTInterpolator;
+Lcom/android/internal/view/animation/HasNativeInterpolator;
+Lcom/android/internal/view/animation/NativeInterpolatorFactory;
+Lcom/android/internal/view/animation/NativeInterpolatorFactoryHelper;
+Lcom/android/internal/view/menu/ActionMenuItem;
+Lcom/android/internal/view/menu/BaseMenuPresenter;
+Lcom/android/internal/view/menu/MenuBuilder$Callback;
+Lcom/android/internal/view/menu/MenuBuilder$ItemInvoker;
+Lcom/android/internal/view/menu/MenuPresenter$Callback;
+Lcom/android/internal/view/menu/MenuPresenter;
+Lcom/android/internal/view/menu/MenuView;
+Lcom/android/internal/view/menu/ShowableListMenu;
+Lcom/android/internal/widget/AbsActionBarView$VisibilityAnimListener;
+Lcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable;
+Lcom/android/internal/widget/ActionBarContainer;
+Lcom/android/internal/widget/ActionBarContextView;
+Lcom/android/internal/widget/ActionBarOverlayLayout$1;
+Lcom/android/internal/widget/ActionBarOverlayLayout$2;
+Lcom/android/internal/widget/ActionBarOverlayLayout$3;
+Lcom/android/internal/widget/ActionBarOverlayLayout$4;
+Lcom/android/internal/widget/ActionBarOverlayLayout$5;
+Lcom/android/internal/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback;
+Lcom/android/internal/widget/ActionBarOverlayLayout$LayoutParams;
+Lcom/android/internal/widget/BackgroundFallback;
+Lcom/android/internal/widget/DecorContentParent;
+Lcom/android/internal/widget/DecorToolbar;
+Lcom/android/internal/widget/EditableInputConnection;
+Lcom/android/internal/widget/LockPatternUtils;
+Lcom/android/internal/widget/ScrollBarUtils;
+Lcom/android/internal/widget/ToolbarWidgetWrapper$1;
+Lcom/android/internal/widget/ToolbarWidgetWrapper;
+Lcom/android/okhttp/Address;
+Lcom/android/okhttp/Authenticator;
+Lcom/android/okhttp/CacheControl$Builder;
+Lcom/android/okhttp/CertificatePinner$Builder;
+Lcom/android/okhttp/CipherSuite;
+Lcom/android/okhttp/ConfigAwareConnectionPool$1;
+Lcom/android/okhttp/ConfigAwareConnectionPool;
+Lcom/android/okhttp/Connection;
+Lcom/android/okhttp/ConnectionPool$1;
+Lcom/android/okhttp/ConnectionSpec$Builder;
+Lcom/android/okhttp/ConnectionSpec;
+Lcom/android/okhttp/Dispatcher;
+Lcom/android/okhttp/Dns$1;
+Lcom/android/okhttp/Handshake;
+Lcom/android/okhttp/Headers$Builder;
+Lcom/android/okhttp/Headers;
+Lcom/android/okhttp/HttpHandler$CleartextURLFilter;
+Lcom/android/okhttp/HttpHandler;
+Lcom/android/okhttp/HttpUrl$Builder;
+Lcom/android/okhttp/HttpsHandler;
+Lcom/android/okhttp/OkHttpClient$1;
+Lcom/android/okhttp/OkUrlFactory;
+Lcom/android/okhttp/Protocol;
+Lcom/android/okhttp/Request$Builder;
+Lcom/android/okhttp/Request;
+Lcom/android/okhttp/RequestBody$2;
+Lcom/android/okhttp/RequestBody;
+Lcom/android/okhttp/Response$Builder;
+Lcom/android/okhttp/Response;
+Lcom/android/okhttp/ResponseBody;
+Lcom/android/okhttp/Route;
+Lcom/android/okhttp/TlsVersion;
+Lcom/android/okhttp/internal/ConnectionSpecSelector;
+Lcom/android/okhttp/internal/OptionalMethod;
+Lcom/android/okhttp/internal/RouteDatabase;
+Lcom/android/okhttp/internal/URLFilter;
+Lcom/android/okhttp/internal/Util$1;
+Lcom/android/okhttp/internal/http/CacheStrategy$Factory;
+Lcom/android/okhttp/internal/http/CacheStrategy;
+Lcom/android/okhttp/internal/http/Http1xStream$AbstractSource;
+Lcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;
+Lcom/android/okhttp/internal/http/Http1xStream$FixedLengthSource;
+Lcom/android/okhttp/internal/http/Http1xStream;
+Lcom/android/okhttp/internal/http/HttpEngine$1;
+Lcom/android/okhttp/internal/http/HttpMethod;
+Lcom/android/okhttp/internal/http/HttpStream;
+Lcom/android/okhttp/internal/http/OkHeaders$1;
+Lcom/android/okhttp/internal/http/RealResponseBody;
+Lcom/android/okhttp/internal/http/RequestException;
+Lcom/android/okhttp/internal/http/RequestLine;
+Lcom/android/okhttp/internal/http/RetryableSink;
+Lcom/android/okhttp/internal/http/RouteSelector;
+Lcom/android/okhttp/internal/http/StatusLine;
+Lcom/android/okhttp/internal/http/StreamAllocation;
+Lcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;
+Lcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;
+Lcom/android/okhttp/internal/tls/OkHostnameVerifier;
+Lcom/android/okhttp/okio/AsyncTimeout$1;
+Lcom/android/okhttp/okio/AsyncTimeout$2;
+Lcom/android/okhttp/okio/AsyncTimeout$Watchdog;
+Lcom/android/okhttp/okio/BufferedSink;
+Lcom/android/okhttp/okio/BufferedSource;
+Lcom/android/okhttp/okio/ForwardingTimeout;
+Lcom/android/okhttp/okio/GzipSource;
+Lcom/android/okhttp/okio/InflaterSource;
+Lcom/android/okhttp/okio/Okio$1;
+Lcom/android/okhttp/okio/Okio$2;
+Lcom/android/okhttp/okio/Okio$3;
+Lcom/android/okhttp/okio/RealBufferedSink$1;
+Lcom/android/okhttp/okio/RealBufferedSink;
+Lcom/android/okhttp/okio/RealBufferedSource$1;
+Lcom/android/okhttp/okio/RealBufferedSource;
+Lcom/android/okhttp/okio/Segment;
+Lcom/android/okhttp/okio/Sink;
+Lcom/android/okhttp/okio/Source;
+Lcom/android/okhttp/okio/Timeout$1;
+Lcom/android/org/bouncycastle/asn1/ASN1Encodable;
+Lcom/android/org/bouncycastle/asn1/ASN1Object;
+Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle;
+Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;
+Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
+Lcom/android/org/bouncycastle/asn1/OIDTokenizer;
+Lcom/android/org/bouncycastle/asn1/bc/BCObjectIdentifiers;
+Lcom/android/org/bouncycastle/asn1/iana/IANAObjectIdentifiers;
+Lcom/android/org/bouncycastle/asn1/misc/MiscObjectIdentifiers;
+Lcom/android/org/bouncycastle/asn1/nist/NISTObjectIdentifiers;
+Lcom/android/org/bouncycastle/asn1/oiw/OIWObjectIdentifiers;
+Lcom/android/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers;
+Lcom/android/org/bouncycastle/asn1/x509/X509ObjectIdentifiers;
+Lcom/android/org/bouncycastle/asn1/x9/X9ObjectIdentifiers;
+Lcom/android/org/bouncycastle/crypto/CipherParameters;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/DH$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/DH;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/DSA$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/EC$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/EC;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/RSA;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/X509$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyFactorySpi;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/KeyFactorySpi;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$EC;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyFactorySpi;
+Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi;
+Lcom/android/org/bouncycastle/jcajce/provider/config/ConfigurableProvider;
+Lcom/android/org/bouncycastle/jcajce/provider/config/ProviderConfiguration;
+Lcom/android/org/bouncycastle/jcajce/provider/config/ProviderConfigurationPermission;
+Lcom/android/org/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider;
+Lcom/android/org/bouncycastle/jcajce/provider/digest/MD5$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/digest/MD5;
+Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA1$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA1;
+Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA224$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA224;
+Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA256$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA256;
+Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA384$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA384;
+Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA512$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA512;
+Lcom/android/org/bouncycastle/jcajce/provider/keystore/BC$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/keystore/PKCS12$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$Std;
+Lcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/AES$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/AES;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/ARC4$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/ARC4;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/Blowfish$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/Blowfish;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/DES$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/DES;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/DESede$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/DESede;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/PBEPKCS12;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/PBES2AlgorithmParameters$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/PBES2AlgorithmParameters;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/RC2$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/RC2;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/Twofish$Mappings;
+Lcom/android/org/bouncycastle/jcajce/provider/symmetric/Twofish;
+Lcom/android/org/bouncycastle/jcajce/provider/util/AlgorithmProvider;
+Lcom/android/org/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;
+Lcom/android/org/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;
+Lcom/android/org/bouncycastle/jcajce/util/BCJcaJceHelper;
+Lcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;
+Lcom/android/org/bouncycastle/jcajce/util/ProviderJcaJceHelper;
+Lcom/android/org/bouncycastle/jce/interfaces/BCKeyStore;
+Lcom/android/org/bouncycastle/jce/provider/BouncyCastleProvider$1;
+Lcom/android/org/bouncycastle/jce/provider/BouncyCastleProvider;
+Lcom/android/org/bouncycastle/jce/provider/BouncyCastleProviderConfiguration;
+Lcom/android/org/bouncycastle/util/Arrays;
+Lcom/android/org/bouncycastle/util/Encodable;
+Lcom/android/org/bouncycastle/util/Strings$1;
+Lcom/android/org/bouncycastle/util/Strings;
+Lcom/android/org/conscrypt/AbstractConscryptSocket$1;
+Lcom/android/org/conscrypt/AbstractConscryptSocket;
+Lcom/android/org/conscrypt/AbstractSessionContext$1;
+Lcom/android/org/conscrypt/AbstractSessionContext;
+Lcom/android/org/conscrypt/ActiveSession;
+Lcom/android/org/conscrypt/ArrayUtils;
+Lcom/android/org/conscrypt/ByteArray;
+Lcom/android/org/conscrypt/CertBlacklist;
+Lcom/android/org/conscrypt/CertificatePriorityComparator;
+Lcom/android/org/conscrypt/ChainStrengthAnalyzer;
+Lcom/android/org/conscrypt/ClientSessionContext$HostAndPort;
+Lcom/android/org/conscrypt/ClientSessionContext;
+Lcom/android/org/conscrypt/Conscrypt;
+Lcom/android/org/conscrypt/ConscryptFileDescriptorSocket$SSLInputStream;
+Lcom/android/org/conscrypt/ConscryptFileDescriptorSocket$SSLOutputStream;
+Lcom/android/org/conscrypt/ConscryptFileDescriptorSocket;
+Lcom/android/org/conscrypt/CryptoUpcalls;
+Lcom/android/org/conscrypt/EvpMdRef$SHA1;
+Lcom/android/org/conscrypt/FileClientSessionCache$Impl;
+Lcom/android/org/conscrypt/Hex;
+Lcom/android/org/conscrypt/InternalUtil;
+Lcom/android/org/conscrypt/JSSEProvider;
+Lcom/android/org/conscrypt/KeyManagerFactoryImpl;
+Lcom/android/org/conscrypt/KeyManagerImpl;
+Lcom/android/org/conscrypt/NativeCrypto$SSLHandshakeCallbacks;
+Lcom/android/org/conscrypt/NativeCrypto;
+Lcom/android/org/conscrypt/NativeCryptoJni;
+Lcom/android/org/conscrypt/NativeRef$EC_GROUP;
+Lcom/android/org/conscrypt/NativeRef$EC_POINT;
+Lcom/android/org/conscrypt/NativeRef$EVP_CIPHER_CTX;
+Lcom/android/org/conscrypt/NativeRef$EVP_MD_CTX;
+Lcom/android/org/conscrypt/NativeRef$EVP_PKEY;
+Lcom/android/org/conscrypt/NativeRef$SSL_SESSION;
+Lcom/android/org/conscrypt/NativeRef;
+Lcom/android/org/conscrypt/OpenSSLBIOInputStream;
+Lcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER$AES$CBC$PKCS5Padding;
+Lcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER$AES$CBC;
+Lcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER$AES;
+Lcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER$AES_BASE;
+Lcom/android/org/conscrypt/OpenSSLCipher$EVP_CIPHER;
+Lcom/android/org/conscrypt/OpenSSLCipher;
+Lcom/android/org/conscrypt/OpenSSLContextImpl$TLSv12;
+Lcom/android/org/conscrypt/OpenSSLECGroupContext;
+Lcom/android/org/conscrypt/OpenSSLECKeyFactory;
+Lcom/android/org/conscrypt/OpenSSLECPointContext;
+Lcom/android/org/conscrypt/OpenSSLECPublicKey;
+Lcom/android/org/conscrypt/OpenSSLKey;
+Lcom/android/org/conscrypt/OpenSSLKeyHolder;
+Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$MD5;
+Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA1;
+Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA256;
+Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK;
+Lcom/android/org/conscrypt/OpenSSLProvider;
+Lcom/android/org/conscrypt/OpenSSLRSAKeyFactory;
+Lcom/android/org/conscrypt/OpenSSLRSAPublicKey;
+Lcom/android/org/conscrypt/OpenSSLRandom;
+Lcom/android/org/conscrypt/OpenSSLSignature$RSAPKCS1Padding;
+Lcom/android/org/conscrypt/OpenSSLSignature;
+Lcom/android/org/conscrypt/OpenSSLSocketImpl;
+Lcom/android/org/conscrypt/OpenSSLX509CertPath$Encoding;
+Lcom/android/org/conscrypt/OpenSSLX509CertPath;
+Lcom/android/org/conscrypt/OpenSSLX509Certificate;
+Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory$1;
+Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory$2;
+Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory$Parser;
+Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory$ParsingException;
+Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory;
+Lcom/android/org/conscrypt/PeerInfoProvider$1;
+Lcom/android/org/conscrypt/Platform$NoPreloadHolder;
+Lcom/android/org/conscrypt/Platform;
+Lcom/android/org/conscrypt/Preconditions;
+Lcom/android/org/conscrypt/SSLClientSessionCache;
+Lcom/android/org/conscrypt/SSLParametersImpl$AliasChooser;
+Lcom/android/org/conscrypt/SSLParametersImpl$PSKCallbacks;
+Lcom/android/org/conscrypt/ServerSessionContext;
+Lcom/android/org/conscrypt/SslSessionWrapper$Impl$1;
+Lcom/android/org/conscrypt/SslSessionWrapper$Impl;
+Lcom/android/org/conscrypt/SslSessionWrapper;
+Lcom/android/org/conscrypt/SslWrapper;
+Lcom/android/org/conscrypt/TrustManagerFactoryImpl;
+Lcom/android/org/conscrypt/TrustManagerImpl$ExtendedKeyUsagePKIXCertPathChecker;
+Lcom/android/org/conscrypt/TrustManagerImpl$TrustAnchorComparator;
+Lcom/android/org/conscrypt/TrustManagerImpl;
+Lcom/android/org/conscrypt/TrustedCertificateIndex;
+Lcom/android/org/conscrypt/TrustedCertificateKeyStoreSpi;
+Lcom/android/org/conscrypt/TrustedCertificateStore$1;
+Lcom/android/org/conscrypt/TrustedCertificateStore$CertSelector;
+Lcom/android/org/conscrypt/TrustedCertificateStore$PreloadHolder;
+Lcom/android/org/conscrypt/TrustedCertificateStore;
+Lcom/android/org/conscrypt/ct/CTLogInfo;
+Lcom/android/org/conscrypt/ct/CTLogStore;
+Lcom/android/org/conscrypt/ct/CTLogStoreImpl$InvalidLogFileException;
+Lcom/android/org/conscrypt/ct/CTLogStoreImpl;
+Lcom/android/org/conscrypt/ct/CTPolicy;
+Lcom/android/org/conscrypt/ct/CTPolicyImpl;
+Lcom/android/org/conscrypt/ct/CTVerifier;
+Lcom/android/org/conscrypt/ct/SerializationException;
+Lcom/android/server/NetworkManagementSocketTagger$1;
+Lcom/android/server/NetworkManagementSocketTagger$SocketTags;
+Lcom/android/server/NetworkManagementSocketTagger;
+Lcom/google/android/collect/Lists;
+Lcom/google/android/collect/Maps;
+Lcom/google/android/collect/Sets;
+Lcom/google/android/gles_jni/EGLConfigImpl;
+Lcom/google/android/gles_jni/EGLContextImpl;
+Lcom/google/android/gles_jni/EGLDisplayImpl;
+Lcom/google/android/gles_jni/EGLImpl;
+Lcom/google/android/gles_jni/EGLSurfaceImpl;
+Lcom/google/android/gles_jni/GLImpl;
+Ldalvik/annotation/optimization/CriticalNative;
+Ldalvik/annotation/optimization/FastNative;
+Ldalvik/system/-$Lambda$xxvwQBVHC44UYbpcpA8j0sUqLOo;
+Ldalvik/system/BaseDexClassLoader$Reporter;
+Ldalvik/system/BaseDexClassLoader;
+Ldalvik/system/BlockGuard$1;
+Ldalvik/system/BlockGuard$2;
+Ldalvik/system/BlockGuard$BlockGuardPolicyException;
+Ldalvik/system/BlockGuard$Policy;
+Ldalvik/system/BlockGuard;
+Ldalvik/system/ClassExt;
+Ldalvik/system/CloseGuard$DefaultReporter;
+Ldalvik/system/CloseGuard$DefaultTracker;
+Ldalvik/system/CloseGuard$Reporter;
+Ldalvik/system/CloseGuard$Tracker;
+Ldalvik/system/CloseGuard;
+Ldalvik/system/DalvikLogHandler;
+Ldalvik/system/DalvikLogging;
+Ldalvik/system/DelegateLastClassLoader;
+Ldalvik/system/DexClassLoader;
+Ldalvik/system/DexFile$DFEnum;
+Ldalvik/system/DexFile;
+Ldalvik/system/DexPathList$Element;
+Ldalvik/system/DexPathList$NativeLibraryElement;
+Ldalvik/system/DexPathList;
+Ldalvik/system/EmulatedStackFrame$Range;
+Ldalvik/system/EmulatedStackFrame;
+Ldalvik/system/PathClassLoader;
+Ldalvik/system/SocketTagger$1;
+Ldalvik/system/SocketTagger;
+Ldalvik/system/VMDebug;
+Ldalvik/system/VMRuntime;
+Ldalvik/system/VMStack;
+Ldalvik/system/ZygoteHooks;
+Ljava/io/Bits;
+Ljava/io/BufferedInputStream;
+Ljava/io/BufferedOutputStream;
+Ljava/io/BufferedReader;
+Ljava/io/ByteArrayInputStream;
+Ljava/io/ByteArrayOutputStream;
+Ljava/io/CharArrayWriter;
+Ljava/io/Closeable;
+Ljava/io/Console;
+Ljava/io/DataInput;
+Ljava/io/DataInputStream;
+Ljava/io/DataOutput;
+Ljava/io/DataOutputStream;
+Ljava/io/DefaultFileSystem;
+Ljava/io/EOFException;
+Ljava/io/ExpiringCache$1;
+Ljava/io/ExpiringCache;
+Ljava/io/Externalizable;
+Ljava/io/File$PathStatus;
+Ljava/io/File$TempDirectory;
+Ljava/io/File;
+Ljava/io/FileDescriptor$1;
+Ljava/io/FileDescriptor;
+Ljava/io/FileFilter;
+Ljava/io/FileInputStream$UseManualSkipException;
+Ljava/io/FileInputStream;
+Ljava/io/FileNotFoundException;
+Ljava/io/FileOutputStream;
+Ljava/io/FileReader;
+Ljava/io/FileSystem;
+Ljava/io/FileWriter;
+Ljava/io/FilenameFilter;
+Ljava/io/FilterInputStream;
+Ljava/io/FilterOutputStream;
+Ljava/io/FilterReader;
+Ljava/io/Flushable;
+Ljava/io/IOException;
+Ljava/io/InputStream;
+Ljava/io/InputStreamReader;
+Ljava/io/InterruptedIOException;
+Ljava/io/InvalidClassException;
+Ljava/io/InvalidObjectException;
+Ljava/io/ObjectInput;
+Ljava/io/ObjectInputStream$BlockDataInputStream;
+Ljava/io/ObjectInputStream$HandleTable$HandleList;
+Ljava/io/ObjectInputStream$HandleTable;
+Ljava/io/ObjectInputStream$PeekInputStream;
+Ljava/io/ObjectInputStream$ValidationList;
+Ljava/io/ObjectInputStream;
+Ljava/io/ObjectOutput;
+Ljava/io/ObjectOutputStream$BlockDataOutputStream;
+Ljava/io/ObjectOutputStream$HandleTable;
+Ljava/io/ObjectOutputStream$PutField;
+Ljava/io/ObjectOutputStream$ReplaceTable;
+Ljava/io/ObjectOutputStream;
+Ljava/io/ObjectStreamClass$1;
+Ljava/io/ObjectStreamClass$2;
+Ljava/io/ObjectStreamClass$3;
+Ljava/io/ObjectStreamClass$4;
+Ljava/io/ObjectStreamClass$5;
+Ljava/io/ObjectStreamClass$ClassDataSlot;
+Ljava/io/ObjectStreamClass$ExceptionInfo;
+Ljava/io/ObjectStreamClass$FieldReflectorKey;
+Ljava/io/ObjectStreamClass$MemberSignature;
+Ljava/io/ObjectStreamClass$WeakClassKey;
+Ljava/io/ObjectStreamClass;
+Ljava/io/ObjectStreamConstants;
+Ljava/io/ObjectStreamException;
+Ljava/io/ObjectStreamField;
+Ljava/io/OutputStream;
+Ljava/io/OutputStreamWriter;
+Ljava/io/PrintStream;
+Ljava/io/PrintWriter;
+Ljava/io/PushbackInputStream;
+Ljava/io/PushbackReader;
+Ljava/io/RandomAccessFile;
+Ljava/io/Reader;
+Ljava/io/SequenceInputStream;
+Ljava/io/SerialCallbackContext;
+Ljava/io/Serializable;
+Ljava/io/SerializablePermission;
+Ljava/io/StreamCorruptedException;
+Ljava/io/StringReader;
+Ljava/io/StringWriter;
+Ljava/io/UnixFileSystem;
+Ljava/io/UnsupportedEncodingException;
+Ljava/io/Writer;
+Ljava/lang/-$Lambda$S9HjrJh0nDg7IyU6wZdPArnZWRQ;
+Ljava/lang/AbstractMethodError;
+Ljava/lang/AbstractStringBuilder;
+Ljava/lang/AndroidHardcodedSystemProperties;
+Ljava/lang/Appendable;
+Ljava/lang/ArithmeticException;
+Ljava/lang/ArrayIndexOutOfBoundsException;
+Ljava/lang/ArrayStoreException;
+Ljava/lang/AssertionError;
+Ljava/lang/AutoCloseable;
+Ljava/lang/Boolean;
+Ljava/lang/BootClassLoader;
+Ljava/lang/Byte$ByteCache;
+Ljava/lang/Byte;
+Ljava/lang/CaseMapper$1;
+Ljava/lang/CaseMapper;
+Ljava/lang/CharSequence$1CharIterator;
+Ljava/lang/CharSequence$1CodePointIterator;
+Ljava/lang/CharSequence;
+Ljava/lang/Character$CharacterCache;
+Ljava/lang/Character$Subset;
+Ljava/lang/Character$UnicodeBlock;
+Ljava/lang/Character;
+Ljava/lang/Class$Caches;
+Ljava/lang/Class;
+Ljava/lang/ClassCastException;
+Ljava/lang/ClassLoader$SystemClassLoader;
+Ljava/lang/ClassLoader;
+Ljava/lang/ClassNotFoundException;
+Ljava/lang/CloneNotSupportedException;
+Ljava/lang/Cloneable;
+Ljava/lang/Comparable;
+Ljava/lang/Daemons$Daemon;
+Ljava/lang/Daemons$FinalizerDaemon;
+Ljava/lang/Daemons$FinalizerWatchdogDaemon;
+Ljava/lang/Daemons$HeapTaskDaemon;
+Ljava/lang/Daemons$ReferenceQueueDaemon;
+Ljava/lang/Daemons;
+Ljava/lang/DexCache;
+Ljava/lang/Double;
+Ljava/lang/Enum$1;
+Ljava/lang/Enum;
+Ljava/lang/EnumConstantNotPresentException;
+Ljava/lang/Error;
+Ljava/lang/Exception;
+Ljava/lang/Float;
+Ljava/lang/IllegalAccessError;
+Ljava/lang/IllegalAccessException;
+Ljava/lang/IllegalArgumentException;
+Ljava/lang/IllegalStateException;
+Ljava/lang/IllegalThreadStateException;
+Ljava/lang/IncompatibleClassChangeError;
+Ljava/lang/IndexOutOfBoundsException;
+Ljava/lang/InheritableThreadLocal;
+Ljava/lang/InstantiationException;
+Ljava/lang/Integer$IntegerCache;
+Ljava/lang/Integer;
+Ljava/lang/InternalError;
+Ljava/lang/InterruptedException;
+Ljava/lang/Iterable;
+Ljava/lang/LinkageError;
+Ljava/lang/Long$LongCache;
+Ljava/lang/Long;
+Ljava/lang/Math$RandomNumberGeneratorHolder;
+Ljava/lang/Math;
+Ljava/lang/NoClassDefFoundError;
+Ljava/lang/NoSuchFieldError;
+Ljava/lang/NoSuchFieldException;
+Ljava/lang/NoSuchMethodError;
+Ljava/lang/NoSuchMethodException;
+Ljava/lang/NullPointerException;
+Ljava/lang/Number;
+Ljava/lang/NumberFormatException;
+Ljava/lang/Object;
+Ljava/lang/OutOfMemoryError;
+Ljava/lang/Package;
+Ljava/lang/Process;
+Ljava/lang/ProcessBuilder;
+Ljava/lang/ProcessEnvironment;
+Ljava/lang/Readable;
+Ljava/lang/ReflectiveOperationException;
+Ljava/lang/Runnable;
+Ljava/lang/Runtime;
+Ljava/lang/RuntimeException;
+Ljava/lang/RuntimePermission;
+Ljava/lang/SecurityException;
+Ljava/lang/Short$ShortCache;
+Ljava/lang/Short;
+Ljava/lang/StackOverflowError;
+Ljava/lang/StackTraceElement;
+Ljava/lang/StrictMath;
+Ljava/lang/String$CaseInsensitiveComparator;
+Ljava/lang/String;
+Ljava/lang/StringBuffer;
+Ljava/lang/StringBuilder;
+Ljava/lang/StringFactory;
+Ljava/lang/StringIndexOutOfBoundsException;
+Ljava/lang/System$PropertiesWithNonOverrideableDefaults;
+Ljava/lang/System;
+Ljava/lang/Thread$1;
+Ljava/lang/Thread$Caches;
+Ljava/lang/Thread$State;
+Ljava/lang/Thread$UncaughtExceptionHandler;
+Ljava/lang/Thread$WeakClassKey;
+Ljava/lang/Thread;
+Ljava/lang/ThreadDeath;
+Ljava/lang/ThreadGroup;
+Ljava/lang/ThreadLocal$SuppliedThreadLocal;
+Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
+Ljava/lang/ThreadLocal$ThreadLocalMap;
+Ljava/lang/ThreadLocal;
+Ljava/lang/Throwable$PrintStreamOrWriter;
+Ljava/lang/Throwable$SentinelHolder;
+Ljava/lang/Throwable$WrappedPrintStream;
+Ljava/lang/Throwable$WrappedPrintWriter;
+Ljava/lang/Throwable;
+Ljava/lang/TypeNotPresentException;
+Ljava/lang/UNIXProcess;
+Ljava/lang/UnsatisfiedLinkError;
+Ljava/lang/UnsupportedOperationException;
+Ljava/lang/VMClassLoader;
+Ljava/lang/VirtualMachineError;
+Ljava/lang/Void;
+Ljava/lang/annotation/Annotation;
+Ljava/lang/annotation/AnnotationTypeMismatchException;
+Ljava/lang/annotation/IncompleteAnnotationException;
+Ljava/lang/annotation/Inherited;
+Ljava/lang/annotation/Retention;
+Ljava/lang/invoke/CallSite;
+Ljava/lang/invoke/ConstantCallSite;
+Ljava/lang/invoke/MethodHandle;
+Ljava/lang/invoke/MethodHandleImpl$HandleInfo;
+Ljava/lang/invoke/MethodHandleImpl;
+Ljava/lang/invoke/MethodHandleInfo;
+Ljava/lang/invoke/MethodHandleStatics;
+Ljava/lang/invoke/MethodHandles$Lookup;
+Ljava/lang/invoke/MethodHandles;
+Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry;
+Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet;
+Ljava/lang/invoke/MethodType;
+Ljava/lang/invoke/MethodTypeForm;
+Ljava/lang/invoke/Transformers$AlwaysThrow;
+Ljava/lang/invoke/Transformers$BindTo;
+Ljava/lang/invoke/Transformers$CatchException;
+Ljava/lang/invoke/Transformers$CollectArguments;
+Ljava/lang/invoke/Transformers$Collector;
+Ljava/lang/invoke/Transformers$Constant;
+Ljava/lang/invoke/Transformers$Construct;
+Ljava/lang/invoke/Transformers$DropArguments;
+Ljava/lang/invoke/Transformers$ExplicitCastArguments;
+Ljava/lang/invoke/Transformers$FilterArguments;
+Ljava/lang/invoke/Transformers$FilterReturnValue;
+Ljava/lang/invoke/Transformers$FoldArguments;
+Ljava/lang/invoke/Transformers$GuardWithTest;
+Ljava/lang/invoke/Transformers$InsertArguments;
+Ljava/lang/invoke/Transformers$Invoker;
+Ljava/lang/invoke/Transformers$PermuteArguments;
+Ljava/lang/invoke/Transformers$ReferenceArrayElementGetter;
+Ljava/lang/invoke/Transformers$ReferenceArrayElementSetter;
+Ljava/lang/invoke/Transformers$ReferenceIdentity;
+Ljava/lang/invoke/Transformers$Spreader;
+Ljava/lang/invoke/Transformers$Transformer;
+Ljava/lang/invoke/Transformers$VarargsCollector;
+Ljava/lang/invoke/WrongMethodTypeException;
+Ljava/lang/ref/FinalizerReference$Sentinel;
+Ljava/lang/ref/FinalizerReference;
+Ljava/lang/ref/PhantomReference;
+Ljava/lang/ref/Reference;
+Ljava/lang/ref/ReferenceQueue;
+Ljava/lang/ref/SoftReference;
+Ljava/lang/ref/WeakReference;
+Ljava/lang/reflect/AccessibleObject;
+Ljava/lang/reflect/AnnotatedElement;
+Ljava/lang/reflect/Array;
+Ljava/lang/reflect/Constructor;
+Ljava/lang/reflect/Executable$GenericInfo;
+Ljava/lang/reflect/Executable;
+Ljava/lang/reflect/Field;
+Ljava/lang/reflect/GenericArrayType;
+Ljava/lang/reflect/GenericDeclaration;
+Ljava/lang/reflect/InvocationHandler;
+Ljava/lang/reflect/InvocationTargetException;
+Ljava/lang/reflect/MalformedParametersException;
+Ljava/lang/reflect/Member;
+Ljava/lang/reflect/Method$1;
+Ljava/lang/reflect/Method;
+Ljava/lang/reflect/Modifier;
+Ljava/lang/reflect/Parameter;
+Ljava/lang/reflect/ParameterizedType;
+Ljava/lang/reflect/Proxy$1;
+Ljava/lang/reflect/Proxy$Key1;
+Ljava/lang/reflect/Proxy$Key2;
+Ljava/lang/reflect/Proxy$KeyFactory;
+Ljava/lang/reflect/Proxy$KeyX;
+Ljava/lang/reflect/Proxy$ProxyClassFactory;
+Ljava/lang/reflect/Proxy;
+Ljava/lang/reflect/Type;
+Ljava/lang/reflect/TypeVariable;
+Ljava/lang/reflect/UndeclaredThrowableException;
+Ljava/lang/reflect/WeakCache$CacheKey;
+Ljava/lang/reflect/WeakCache$CacheValue;
+Ljava/lang/reflect/WeakCache$Factory;
+Ljava/lang/reflect/WeakCache$LookupValue;
+Ljava/lang/reflect/WeakCache$Value;
+Ljava/lang/reflect/WeakCache;
+Ljava/lang/reflect/WildcardType;
+Ljava/math/BigInt;
+Ljava/math/BigInteger;
+Ljava/math/NativeBN;
+Ljava/math/RoundingMode;
+Ljava/net/AbstractPlainSocketImpl;
+Ljava/net/AddressCache$AddressCacheEntry;
+Ljava/net/AddressCache$AddressCacheKey;
+Ljava/net/AddressCache;
+Ljava/net/ConnectException;
+Ljava/net/DatagramPacket;
+Ljava/net/DatagramSocket$1;
+Ljava/net/DatagramSocketImpl;
+Ljava/net/DefaultInterface;
+Ljava/net/HttpURLConnection;
+Ljava/net/IDN;
+Ljava/net/Inet4Address;
+Ljava/net/Inet6Address$Inet6AddressHolder;
+Ljava/net/Inet6Address;
+Ljava/net/Inet6AddressImpl;
+Ljava/net/InetAddress$1;
+Ljava/net/InetAddress$InetAddressHolder;
+Ljava/net/InetAddress;
+Ljava/net/InetAddressImpl;
+Ljava/net/InetSocketAddress$InetSocketAddressHolder;
+Ljava/net/InetSocketAddress;
+Ljava/net/InterfaceAddress;
+Ljava/net/JarURLConnection;
+Ljava/net/MalformedURLException;
+Ljava/net/MulticastSocket;
+Ljava/net/NetworkInterface;
+Ljava/net/Parts;
+Ljava/net/PlainDatagramSocketImpl;
+Ljava/net/PlainSocketImpl;
+Ljava/net/ProxySelector;
+Ljava/net/Socket$2;
+Ljava/net/Socket$3;
+Ljava/net/Socket;
+Ljava/net/SocketAddress;
+Ljava/net/SocketException;
+Ljava/net/SocketImpl;
+Ljava/net/SocketInputStream;
+Ljava/net/SocketOptions;
+Ljava/net/SocketOutputStream;
+Ljava/net/SocketTimeoutException;
+Ljava/net/SocksConsts;
+Ljava/net/URI$Parser;
+Ljava/net/URI;
+Ljava/net/URISyntaxException;
+Ljava/net/URL;
+Ljava/net/URLConnection;
+Ljava/net/URLStreamHandler;
+Ljava/net/URLStreamHandlerFactory;
+Ljava/net/UnknownHostException;
+Ljava/nio/Bits;
+Ljava/nio/Buffer;
+Ljava/nio/BufferOverflowException;
+Ljava/nio/BufferUnderflowException;
+Ljava/nio/ByteBuffer;
+Ljava/nio/ByteBufferAsCharBuffer;
+Ljava/nio/ByteBufferAsDoubleBuffer;
+Ljava/nio/ByteBufferAsFloatBuffer;
+Ljava/nio/ByteBufferAsIntBuffer;
+Ljava/nio/ByteBufferAsLongBuffer;
+Ljava/nio/ByteBufferAsShortBuffer;
+Ljava/nio/ByteOrder;
+Ljava/nio/CharBuffer;
+Ljava/nio/DirectByteBuffer$MemoryRef;
+Ljava/nio/DirectByteBuffer;
+Ljava/nio/DoubleBuffer;
+Ljava/nio/FloatBuffer;
+Ljava/nio/HeapByteBuffer;
+Ljava/nio/HeapCharBuffer;
+Ljava/nio/IntBuffer;
+Ljava/nio/InvalidMarkException;
+Ljava/nio/LongBuffer;
+Ljava/nio/MappedByteBuffer;
+Ljava/nio/NIOAccess;
+Ljava/nio/NioUtils;
+Ljava/nio/ReadOnlyBufferException;
+Ljava/nio/ShortBuffer;
+Ljava/nio/StringCharBuffer;
+Ljava/nio/channels/AsynchronousCloseException;
+Ljava/nio/channels/ByteChannel;
+Ljava/nio/channels/Channel;
+Ljava/nio/channels/Channels;
+Ljava/nio/channels/ClosedByInterruptException;
+Ljava/nio/channels/ClosedChannelException;
+Ljava/nio/channels/DatagramChannel;
+Ljava/nio/channels/FileChannel$MapMode;
+Ljava/nio/channels/FileChannel;
+Ljava/nio/channels/FileLock;
+Ljava/nio/channels/GatheringByteChannel;
+Ljava/nio/channels/InterruptibleChannel;
+Ljava/nio/channels/MulticastChannel;
+Ljava/nio/channels/NetworkChannel;
+Ljava/nio/channels/OverlappingFileLockException;
+Ljava/nio/channels/ReadableByteChannel;
+Ljava/nio/channels/ScatteringByteChannel;
+Ljava/nio/channels/SeekableByteChannel;
+Ljava/nio/channels/SelectableChannel;
+Ljava/nio/channels/ServerSocketChannel;
+Ljava/nio/channels/SocketChannel;
+Ljava/nio/channels/WritableByteChannel;
+Ljava/nio/channels/spi/AbstractInterruptibleChannel$1;
+Ljava/nio/channels/spi/AbstractInterruptibleChannel;
+Ljava/nio/channels/spi/AbstractSelectableChannel;
+Ljava/nio/charset/CharacterCodingException;
+Ljava/nio/charset/Charset;
+Ljava/nio/charset/CharsetDecoder;
+Ljava/nio/charset/CharsetDecoderICU;
+Ljava/nio/charset/CharsetEncoder;
+Ljava/nio/charset/CharsetEncoderICU;
+Ljava/nio/charset/CharsetICU;
+Ljava/nio/charset/CoderResult$1;
+Ljava/nio/charset/CoderResult$2;
+Ljava/nio/charset/CoderResult$Cache;
+Ljava/nio/charset/CoderResult;
+Ljava/nio/charset/CodingErrorAction;
+Ljava/nio/charset/IllegalCharsetNameException;
+Ljava/nio/charset/StandardCharsets;
+Ljava/nio/charset/UnsupportedCharsetException;
+Ljava/nio/file/FileSystem;
+Ljava/nio/file/FileSystems$DefaultFileSystemHolder$1;
+Ljava/nio/file/FileSystems;
+Ljava/nio/file/Path;
+Ljava/nio/file/Watchable;
+Ljava/nio/file/attribute/BasicFileAttributes;
+Ljava/nio/file/attribute/FileAttribute;
+Ljava/nio/file/attribute/PosixFileAttributes;
+Ljava/security/AccessControlContext;
+Ljava/security/AccessControlException;
+Ljava/security/AccessController;
+Ljava/security/AlgorithmConstraints;
+Ljava/security/AlgorithmParameters;
+Ljava/security/AlgorithmParametersSpi;
+Ljava/security/BasicPermission;
+Ljava/security/CryptoPrimitive;
+Ljava/security/GeneralSecurityException;
+Ljava/security/Guard;
+Ljava/security/InvalidAlgorithmParameterException;
+Ljava/security/InvalidKeyException;
+Ljava/security/Key;
+Ljava/security/KeyException;
+Ljava/security/KeyFactory;
+Ljava/security/KeyFactorySpi;
+Ljava/security/KeyManagementException;
+Ljava/security/KeyPair;
+Ljava/security/KeyStore$1;
+Ljava/security/KeyStore;
+Ljava/security/KeyStoreException;
+Ljava/security/KeyStoreSpi;
+Ljava/security/MessageDigest$Delegate;
+Ljava/security/MessageDigest;
+Ljava/security/MessageDigestSpi;
+Ljava/security/NoSuchAlgorithmException;
+Ljava/security/NoSuchProviderException;
+Ljava/security/Permission;
+Ljava/security/PermissionCollection;
+Ljava/security/Permissions;
+Ljava/security/Principal;
+Ljava/security/PrivateKey;
+Ljava/security/PrivilegedAction;
+Ljava/security/PrivilegedActionException;
+Ljava/security/PrivilegedExceptionAction;
+Ljava/security/ProtectionDomain;
+Ljava/security/Provider$EngineDescription;
+Ljava/security/Provider$Service;
+Ljava/security/Provider$ServiceKey;
+Ljava/security/Provider$UString;
+Ljava/security/Provider;
+Ljava/security/PublicKey;
+Ljava/security/SecureRandom;
+Ljava/security/SecureRandomSpi;
+Ljava/security/Security;
+Ljava/security/SignatureException;
+Ljava/security/SignatureSpi;
+Ljava/security/UnrecoverableEntryException;
+Ljava/security/UnrecoverableKeyException;
+Ljava/security/cert/CRL;
+Ljava/security/cert/CRLException;
+Ljava/security/cert/CertPath;
+Ljava/security/cert/CertPathChecker;
+Ljava/security/cert/CertPathHelperImpl;
+Ljava/security/cert/CertPathParameters;
+Ljava/security/cert/CertPathValidator;
+Ljava/security/cert/CertPathValidatorException;
+Ljava/security/cert/CertPathValidatorResult;
+Ljava/security/cert/CertPathValidatorSpi;
+Ljava/security/cert/CertSelector;
+Ljava/security/cert/Certificate;
+Ljava/security/cert/CertificateEncodingException;
+Ljava/security/cert/CertificateException;
+Ljava/security/cert/CertificateExpiredException;
+Ljava/security/cert/CertificateFactory;
+Ljava/security/cert/CertificateFactorySpi;
+Ljava/security/cert/CertificateNotYetValidException;
+Ljava/security/cert/CertificateParsingException;
+Ljava/security/cert/Extension;
+Ljava/security/cert/PKIXCertPathChecker;
+Ljava/security/cert/PKIXCertPathValidatorResult;
+Ljava/security/cert/PKIXParameters;
+Ljava/security/cert/PKIXRevocationChecker;
+Ljava/security/cert/PolicyNode;
+Ljava/security/cert/PolicyQualifierInfo;
+Ljava/security/cert/TrustAnchor;
+Ljava/security/cert/X509CertSelector;
+Ljava/security/cert/X509Certificate;
+Ljava/security/cert/X509Extension;
+Ljava/security/interfaces/DSAKey;
+Ljava/security/interfaces/DSAPublicKey;
+Ljava/security/interfaces/ECKey;
+Ljava/security/interfaces/ECPublicKey;
+Ljava/security/interfaces/RSAKey;
+Ljava/security/interfaces/RSAPrivateKey;
+Ljava/security/interfaces/RSAPublicKey;
+Ljava/security/spec/AlgorithmParameterSpec;
+Ljava/security/spec/ECField;
+Ljava/security/spec/ECFieldFp;
+Ljava/security/spec/ECParameterSpec;
+Ljava/security/spec/ECPoint;
+Ljava/security/spec/ECPublicKeySpec;
+Ljava/security/spec/EllipticCurve;
+Ljava/security/spec/EncodedKeySpec;
+Ljava/security/spec/InvalidKeySpecException;
+Ljava/security/spec/InvalidParameterSpecException;
+Ljava/security/spec/KeySpec;
+Ljava/security/spec/PKCS8EncodedKeySpec;
+Ljava/security/spec/RSAPublicKeySpec;
+Ljava/security/spec/X509EncodedKeySpec;
+Ljava/text/AttributedCharacterIterator$Attribute;
+Ljava/text/CalendarBuilder;
+Ljava/text/CharacterIterator;
+Ljava/text/Collator;
+Ljava/text/DateFormat$Field;
+Ljava/text/DateFormat;
+Ljava/text/DateFormatSymbols;
+Ljava/text/DecimalFormat;
+Ljava/text/DecimalFormatSymbols;
+Ljava/text/DontCareFieldPosition$1;
+Ljava/text/DontCareFieldPosition;
+Ljava/text/FieldPosition$Delegate;
+Ljava/text/FieldPosition;
+Ljava/text/Format$Field;
+Ljava/text/Format$FieldDelegate;
+Ljava/text/Format;
+Ljava/text/Normalizer$Form;
+Ljava/text/Normalizer;
+Ljava/text/NumberFormat;
+Ljava/text/ParseException;
+Ljava/text/ParsePosition;
+Ljava/text/RuleBasedCollator;
+Ljava/text/SimpleDateFormat;
+Ljava/text/StringCharacterIterator;
+Ljava/time/DateTimeException;
+Ljava/util/-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo;
+Ljava/util/-$Lambda$Hazqao1eYCE_pmZR5Jlrc2GvLhk;
+Ljava/util/-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw;
+Ljava/util/AbstractCollection;
+Ljava/util/AbstractList$Itr;
+Ljava/util/AbstractList$ListItr;
+Ljava/util/AbstractList;
+Ljava/util/AbstractMap$1;
+Ljava/util/AbstractMap$2;
+Ljava/util/AbstractMap$SimpleImmutableEntry;
+Ljava/util/AbstractMap;
+Ljava/util/AbstractQueue;
+Ljava/util/AbstractSequentialList;
+Ljava/util/AbstractSet;
+Ljava/util/ArrayDeque$DeqIterator;
+Ljava/util/ArrayDeque;
+Ljava/util/ArrayList$ArrayListSpliterator;
+Ljava/util/ArrayList$Itr;
+Ljava/util/ArrayList$ListItr;
+Ljava/util/ArrayList$SubList$1;
+Ljava/util/ArrayList$SubList;
+Ljava/util/ArrayList;
+Ljava/util/ArrayPrefixHelpers$CumulateTask;
+Ljava/util/ArrayPrefixHelpers$DoubleCumulateTask;
+Ljava/util/ArrayPrefixHelpers$IntCumulateTask;
+Ljava/util/ArrayPrefixHelpers$LongCumulateTask;
+Ljava/util/Arrays$ArrayList;
+Ljava/util/Arrays$NaturalOrder;
+Ljava/util/Arrays;
+Ljava/util/ArraysParallelSortHelpers$FJByte$Sorter;
+Ljava/util/ArraysParallelSortHelpers$FJChar$Sorter;
+Ljava/util/ArraysParallelSortHelpers$FJDouble$Sorter;
+Ljava/util/ArraysParallelSortHelpers$FJFloat$Sorter;
+Ljava/util/ArraysParallelSortHelpers$FJInt$Sorter;
+Ljava/util/ArraysParallelSortHelpers$FJLong$Sorter;
+Ljava/util/ArraysParallelSortHelpers$FJObject$Sorter;
+Ljava/util/ArraysParallelSortHelpers$FJShort$Sorter;
+Ljava/util/BitSet;
+Ljava/util/Calendar;
+Ljava/util/Collection;
+Ljava/util/Collections$1;
+Ljava/util/Collections$2;
+Ljava/util/Collections$3;
+Ljava/util/Collections$AsLIFOQueue;
+Ljava/util/Collections$CheckedCollection;
+Ljava/util/Collections$CheckedList;
+Ljava/util/Collections$CheckedMap;
+Ljava/util/Collections$CheckedNavigableMap;
+Ljava/util/Collections$CheckedNavigableSet;
+Ljava/util/Collections$CheckedQueue;
+Ljava/util/Collections$CheckedRandomAccessList;
+Ljava/util/Collections$CheckedSet;
+Ljava/util/Collections$CheckedSortedMap;
+Ljava/util/Collections$CheckedSortedSet;
+Ljava/util/Collections$CopiesList;
+Ljava/util/Collections$EmptyEnumeration;
+Ljava/util/Collections$EmptyIterator;
+Ljava/util/Collections$EmptyList;
+Ljava/util/Collections$EmptyListIterator;
+Ljava/util/Collections$EmptyMap;
+Ljava/util/Collections$EmptySet;
+Ljava/util/Collections$ReverseComparator2;
+Ljava/util/Collections$ReverseComparator;
+Ljava/util/Collections$SetFromMap;
+Ljava/util/Collections$SingletonList;
+Ljava/util/Collections$SingletonMap;
+Ljava/util/Collections$SingletonSet;
+Ljava/util/Collections$SynchronizedCollection;
+Ljava/util/Collections$SynchronizedList;
+Ljava/util/Collections$SynchronizedMap;
+Ljava/util/Collections$SynchronizedNavigableMap;
+Ljava/util/Collections$SynchronizedNavigableSet;
+Ljava/util/Collections$SynchronizedRandomAccessList;
+Ljava/util/Collections$SynchronizedSet;
+Ljava/util/Collections$SynchronizedSortedMap;
+Ljava/util/Collections$SynchronizedSortedSet;
+Ljava/util/Collections$UnmodifiableCollection$1;
+Ljava/util/Collections$UnmodifiableCollection;
+Ljava/util/Collections$UnmodifiableList$1;
+Ljava/util/Collections$UnmodifiableList;
+Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;
+Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;
+Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;
+Ljava/util/Collections$UnmodifiableMap;
+Ljava/util/Collections$UnmodifiableNavigableMap$EmptyNavigableMap;
+Ljava/util/Collections$UnmodifiableNavigableMap;
+Ljava/util/Collections$UnmodifiableNavigableSet$EmptyNavigableSet;
+Ljava/util/Collections$UnmodifiableNavigableSet;
+Ljava/util/Collections$UnmodifiableRandomAccessList;
+Ljava/util/Collections$UnmodifiableSet;
+Ljava/util/Collections$UnmodifiableSortedMap;
+Ljava/util/Collections$UnmodifiableSortedSet;
+Ljava/util/Collections;
+Ljava/util/ComparableTimSort;
+Ljava/util/Comparator;
+Ljava/util/Comparators$NaturalOrderComparator;
+Ljava/util/Comparators$NullComparator;
+Ljava/util/ConcurrentModificationException;
+Ljava/util/Currency;
+Ljava/util/Date;
+Ljava/util/Deque;
+Ljava/util/Dictionary;
+Ljava/util/DualPivotQuicksort;
+Ljava/util/EnumMap$1;
+Ljava/util/EnumMap$EnumMapIterator;
+Ljava/util/EnumMap$KeyIterator;
+Ljava/util/EnumMap$KeySet;
+Ljava/util/EnumMap;
+Ljava/util/EnumSet;
+Ljava/util/Enumeration;
+Ljava/util/EventListener;
+Ljava/util/Formattable;
+Ljava/util/Formatter$Conversion;
+Ljava/util/Formatter$FixedString;
+Ljava/util/Formatter$Flags;
+Ljava/util/Formatter$FormatSpecifier;
+Ljava/util/Formatter$FormatSpecifierParser;
+Ljava/util/Formatter$FormatString;
+Ljava/util/Formatter;
+Ljava/util/GregorianCalendar;
+Ljava/util/HashMap$EntryIterator;
+Ljava/util/HashMap$EntrySet;
+Ljava/util/HashMap$HashIterator;
+Ljava/util/HashMap$KeyIterator;
+Ljava/util/HashMap$KeySet;
+Ljava/util/HashMap$Node;
+Ljava/util/HashMap$TreeNode;
+Ljava/util/HashMap$ValueIterator;
+Ljava/util/HashMap$Values;
+Ljava/util/HashMap;
+Ljava/util/HashSet;
+Ljava/util/Hashtable$Enumerator;
+Ljava/util/Hashtable$HashtableEntry;
+Ljava/util/Hashtable;
+Ljava/util/IdentityHashMap$KeySet;
+Ljava/util/IdentityHashMap;
+Ljava/util/IllegalFormatException;
+Ljava/util/IllformedLocaleException;
+Ljava/util/Iterator;
+Ljava/util/LinkedHashMap$LinkedEntryIterator;
+Ljava/util/LinkedHashMap$LinkedEntrySet;
+Ljava/util/LinkedHashMap$LinkedHashIterator;
+Ljava/util/LinkedHashMap$LinkedHashMapEntry;
+Ljava/util/LinkedHashMap$LinkedKeyIterator;
+Ljava/util/LinkedHashMap$LinkedKeySet;
+Ljava/util/LinkedHashMap$LinkedValueIterator;
+Ljava/util/LinkedHashMap$LinkedValues;
+Ljava/util/LinkedHashMap;
+Ljava/util/LinkedHashSet;
+Ljava/util/LinkedList$ListItr;
+Ljava/util/LinkedList$Node;
+Ljava/util/LinkedList;
+Ljava/util/List;
+Ljava/util/ListIterator;
+Ljava/util/Locale$Builder;
+Ljava/util/Locale$Cache;
+Ljava/util/Locale$Category;
+Ljava/util/Locale$FilteringMode;
+Ljava/util/Locale$LanguageRange;
+Ljava/util/Locale$LocaleKey;
+Ljava/util/Locale$NoImagePreloadHolder;
+Ljava/util/Locale;
+Ljava/util/Map$Entry;
+Ljava/util/Map;
+Ljava/util/MissingResourceException;
+Ljava/util/NavigableMap;
+Ljava/util/NavigableSet;
+Ljava/util/NoSuchElementException;
+Ljava/util/Objects;
+Ljava/util/Observable;
+Ljava/util/Observer;
+Ljava/util/PrimitiveIterator$OfInt;
+Ljava/util/PrimitiveIterator;
+Ljava/util/PriorityQueue$Itr;
+Ljava/util/PriorityQueue;
+Ljava/util/Properties$LineReader;
+Ljava/util/Properties;
+Ljava/util/Queue;
+Ljava/util/Random;
+Ljava/util/RandomAccess;
+Ljava/util/RandomAccessSubList;
+Ljava/util/RegularEnumSet$EnumSetIterator;
+Ljava/util/RegularEnumSet;
+Ljava/util/ResourceBundle$1;
+Ljava/util/ResourceBundle;
+Ljava/util/Set;
+Ljava/util/SimpleTimeZone;
+Ljava/util/SortedMap;
+Ljava/util/SortedSet;
+Ljava/util/Spliterator$OfDouble;
+Ljava/util/Spliterator$OfInt;
+Ljava/util/Spliterator$OfLong;
+Ljava/util/Spliterator$OfPrimitive;
+Ljava/util/Spliterator;
+Ljava/util/Spliterators$EmptySpliterator$OfDouble;
+Ljava/util/Spliterators$EmptySpliterator$OfInt;
+Ljava/util/Spliterators$EmptySpliterator$OfLong;
+Ljava/util/Spliterators$EmptySpliterator$OfRef;
+Ljava/util/Spliterators$EmptySpliterator;
+Ljava/util/Spliterators$IteratorSpliterator;
+Ljava/util/Spliterators;
+Ljava/util/Stack;
+Ljava/util/StringJoiner;
+Ljava/util/StringTokenizer;
+Ljava/util/SubList;
+Ljava/util/TimSort;
+Ljava/util/TimeZone;
+Ljava/util/Timer$1;
+Ljava/util/TimerTask;
+Ljava/util/TimerThread;
+Ljava/util/TreeMap$AscendingSubMap$AscendingEntrySetView;
+Ljava/util/TreeMap$AscendingSubMap;
+Ljava/util/TreeMap$EntryIterator;
+Ljava/util/TreeMap$EntrySet;
+Ljava/util/TreeMap$KeyIterator;
+Ljava/util/TreeMap$KeySet;
+Ljava/util/TreeMap$NavigableSubMap$EntrySetView;
+Ljava/util/TreeMap$NavigableSubMap$SubMapEntryIterator;
+Ljava/util/TreeMap$NavigableSubMap$SubMapIterator;
+Ljava/util/TreeMap$NavigableSubMap;
+Ljava/util/TreeMap$PrivateEntryIterator;
+Ljava/util/TreeMap$TreeMapEntry;
+Ljava/util/TreeMap$ValueIterator;
+Ljava/util/TreeMap$Values;
+Ljava/util/TreeMap;
+Ljava/util/TreeSet;
+Ljava/util/UUID$Holder;
+Ljava/util/UUID;
+Ljava/util/Vector$1;
+Ljava/util/Vector$Itr;
+Ljava/util/Vector;
+Ljava/util/WeakHashMap$Entry;
+Ljava/util/WeakHashMap$EntrySet;
+Ljava/util/WeakHashMap$HashIterator;
+Ljava/util/WeakHashMap$KeyIterator;
+Ljava/util/WeakHashMap$KeySet;
+Ljava/util/WeakHashMap$ValueIterator;
+Ljava/util/WeakHashMap$Values;
+Ljava/util/WeakHashMap;
+Ljava/util/concurrent/-$Lambda$xR9BLpu6SifNikvFgr4lEiECBsk;
+Ljava/util/concurrent/AbstractExecutorService;
+Ljava/util/concurrent/ArrayBlockingQueue;
+Ljava/util/concurrent/BlockingDeque;
+Ljava/util/concurrent/BlockingQueue;
+Ljava/util/concurrent/Callable;
+Ljava/util/concurrent/CancellationException;
+Ljava/util/concurrent/ConcurrentHashMap$BaseIterator;
+Ljava/util/concurrent/ConcurrentHashMap$BulkTask;
+Ljava/util/concurrent/ConcurrentHashMap$CollectionView;
+Ljava/util/concurrent/ConcurrentHashMap$CounterCell;
+Ljava/util/concurrent/ConcurrentHashMap$EntryIterator;
+Ljava/util/concurrent/ConcurrentHashMap$EntrySetView;
+Ljava/util/concurrent/ConcurrentHashMap$ForEachEntryTask;
+Ljava/util/concurrent/ConcurrentHashMap$ForEachKeyTask;
+Ljava/util/concurrent/ConcurrentHashMap$ForEachMappingTask;
+Ljava/util/concurrent/ConcurrentHashMap$ForEachTransformedEntryTask;
+Ljava/util/concurrent/ConcurrentHashMap$ForEachTransformedKeyTask;
+Ljava/util/concurrent/ConcurrentHashMap$ForEachTransformedMappingTask;
+Ljava/util/concurrent/ConcurrentHashMap$ForEachTransformedValueTask;
+Ljava/util/concurrent/ConcurrentHashMap$ForEachValueTask;
+Ljava/util/concurrent/ConcurrentHashMap$ForwardingNode;
+Ljava/util/concurrent/ConcurrentHashMap$KeyIterator;
+Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
+Ljava/util/concurrent/ConcurrentHashMap$MapEntry;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesToDoubleTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesToIntTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesToLongTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysToDoubleTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysToIntTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysToLongTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsToDoubleTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsToIntTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsToLongTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesToDoubleTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesToIntTask;
+Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesToLongTask;
+Ljava/util/concurrent/ConcurrentHashMap$Node;
+Ljava/util/concurrent/ConcurrentHashMap$ReduceEntriesTask;
+Ljava/util/concurrent/ConcurrentHashMap$ReduceKeysTask;
+Ljava/util/concurrent/ConcurrentHashMap$ReduceValuesTask;
+Ljava/util/concurrent/ConcurrentHashMap$ReservationNode;
+Ljava/util/concurrent/ConcurrentHashMap$SearchEntriesTask;
+Ljava/util/concurrent/ConcurrentHashMap$SearchKeysTask;
+Ljava/util/concurrent/ConcurrentHashMap$SearchMappingsTask;
+Ljava/util/concurrent/ConcurrentHashMap$SearchValuesTask;
+Ljava/util/concurrent/ConcurrentHashMap$Segment;
+Ljava/util/concurrent/ConcurrentHashMap$Traverser;
+Ljava/util/concurrent/ConcurrentHashMap$TreeBin;
+Ljava/util/concurrent/ConcurrentHashMap$TreeNode;
+Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;
+Ljava/util/concurrent/ConcurrentHashMap$ValuesView;
+Ljava/util/concurrent/ConcurrentHashMap;
+Ljava/util/concurrent/ConcurrentLinkedQueue$Node;
+Ljava/util/concurrent/ConcurrentLinkedQueue;
+Ljava/util/concurrent/ConcurrentMap;
+Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
+Ljava/util/concurrent/CopyOnWriteArrayList;
+Ljava/util/concurrent/CopyOnWriteArraySet;
+Ljava/util/concurrent/CountDownLatch$Sync;
+Ljava/util/concurrent/CountDownLatch;
+Ljava/util/concurrent/CountedCompleter;
+Ljava/util/concurrent/Delayed;
+Ljava/util/concurrent/ExecutionException;
+Ljava/util/concurrent/Executor;
+Ljava/util/concurrent/ExecutorService;
+Ljava/util/concurrent/Executors$DefaultThreadFactory;
+Ljava/util/concurrent/Executors$DelegatedExecutorService;
+Ljava/util/concurrent/Executors$DelegatedScheduledExecutorService;
+Ljava/util/concurrent/Executors$FinalizableDelegatedExecutorService;
+Ljava/util/concurrent/Executors$RunnableAdapter;
+Ljava/util/concurrent/Executors;
+Ljava/util/concurrent/ForkJoinPool;
+Ljava/util/concurrent/ForkJoinTask$ExceptionNode;
+Ljava/util/concurrent/ForkJoinTask;
+Ljava/util/concurrent/Future;
+Ljava/util/concurrent/FutureTask$WaitNode;
+Ljava/util/concurrent/FutureTask;
+Ljava/util/concurrent/LinkedBlockingDeque$Node;
+Ljava/util/concurrent/LinkedBlockingDeque;
+Ljava/util/concurrent/LinkedBlockingQueue$Node;
+Ljava/util/concurrent/LinkedBlockingQueue;
+Ljava/util/concurrent/RejectedExecutionException;
+Ljava/util/concurrent/RejectedExecutionHandler;
+Ljava/util/concurrent/RunnableFuture;
+Ljava/util/concurrent/RunnableScheduledFuture;
+Ljava/util/concurrent/ScheduledExecutorService;
+Ljava/util/concurrent/ScheduledFuture;
+Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;
+Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;
+Ljava/util/concurrent/ScheduledThreadPoolExecutor;
+Ljava/util/concurrent/Semaphore$NonfairSync;
+Ljava/util/concurrent/Semaphore$Sync;
+Ljava/util/concurrent/Semaphore;
+Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;
+Ljava/util/concurrent/SynchronousQueue$TransferStack;
+Ljava/util/concurrent/SynchronousQueue$Transferer;
+Ljava/util/concurrent/SynchronousQueue;
+Ljava/util/concurrent/ThreadFactory;
+Ljava/util/concurrent/ThreadLocalRandom$1;
+Ljava/util/concurrent/ThreadLocalRandom;
+Ljava/util/concurrent/ThreadPoolExecutor$AbortPolicy;
+Ljava/util/concurrent/ThreadPoolExecutor$Worker;
+Ljava/util/concurrent/ThreadPoolExecutor;
+Ljava/util/concurrent/TimeUnit$1;
+Ljava/util/concurrent/TimeUnit$2;
+Ljava/util/concurrent/TimeUnit$3;
+Ljava/util/concurrent/TimeUnit$4;
+Ljava/util/concurrent/TimeUnit$5;
+Ljava/util/concurrent/TimeUnit$6;
+Ljava/util/concurrent/TimeUnit$7;
+Ljava/util/concurrent/TimeUnit;
+Ljava/util/concurrent/TimeoutException;
+Ljava/util/concurrent/atomic/AtomicBoolean;
+Ljava/util/concurrent/atomic/AtomicInteger;
+Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl$1;
+Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;
+Ljava/util/concurrent/atomic/AtomicLong;
+Ljava/util/concurrent/atomic/AtomicReference;
+Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl;
+Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
+Ljava/util/concurrent/locks/AbstractOwnableSynchronizer;
+Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
+Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
+Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
+Ljava/util/concurrent/locks/Condition;
+Ljava/util/concurrent/locks/Lock;
+Ljava/util/concurrent/locks/LockSupport;
+Ljava/util/concurrent/locks/ReadWriteLock;
+Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
+Ljava/util/concurrent/locks/ReentrantLock$Sync;
+Ljava/util/concurrent/locks/ReentrantLock;
+Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
+Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;
+Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync$HoldCounter;
+Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;
+Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;
+Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
+Ljava/util/concurrent/locks/ReentrantReadWriteLock;
+Ljava/util/function/-$Lambda$1MZdIZ-DL_fjy9l0o8IMJk57T2g;
+Ljava/util/function/-$Lambda$VGDeaUHZQIZywZW2ttlyhwk3Cmk$1;
+Ljava/util/function/-$Lambda$VGDeaUHZQIZywZW2ttlyhwk3Cmk;
+Ljava/util/function/BiConsumer;
+Ljava/util/function/BiFunction;
+Ljava/util/function/BinaryOperator;
+Ljava/util/function/Consumer;
+Ljava/util/function/DoubleBinaryOperator;
+Ljava/util/function/DoubleUnaryOperator;
+Ljava/util/function/Function;
+Ljava/util/function/IntBinaryOperator;
+Ljava/util/function/IntConsumer;
+Ljava/util/function/IntFunction;
+Ljava/util/function/IntToDoubleFunction;
+Ljava/util/function/IntToLongFunction;
+Ljava/util/function/IntUnaryOperator;
+Ljava/util/function/LongBinaryOperator;
+Ljava/util/function/LongUnaryOperator;
+Ljava/util/function/Predicate;
+Ljava/util/function/Supplier;
+Ljava/util/function/ToDoubleBiFunction;
+Ljava/util/function/ToDoubleFunction;
+Ljava/util/function/ToIntBiFunction;
+Ljava/util/function/ToIntFunction;
+Ljava/util/function/ToLongBiFunction;
+Ljava/util/function/ToLongFunction;
+Ljava/util/function/UnaryOperator;
+Ljava/util/jar/JarEntry;
+Ljava/util/jar/JarFile$JarEntryIterator;
+Ljava/util/jar/JarFile$JarFileEntry;
+Ljava/util/jar/JarFile;
+Ljava/util/logging/ErrorManager;
+Ljava/util/logging/Formatter;
+Ljava/util/logging/Handler;
+Ljava/util/logging/Level$KnownLevel;
+Ljava/util/logging/Level;
+Ljava/util/logging/LogManager$1;
+Ljava/util/logging/LogManager$2;
+Ljava/util/logging/LogManager$3;
+Ljava/util/logging/LogManager$5;
+Ljava/util/logging/LogManager$Cleaner;
+Ljava/util/logging/LogManager$LogNode;
+Ljava/util/logging/LogManager$LoggerContext$1;
+Ljava/util/logging/LogManager$LoggerContext;
+Ljava/util/logging/LogManager$LoggerWeakRef;
+Ljava/util/logging/LogManager$RootLogger;
+Ljava/util/logging/LogManager$SystemLoggerContext;
+Ljava/util/logging/LogManager;
+Ljava/util/logging/Logger$LoggerBundle;
+Ljava/util/logging/Logger;
+Ljava/util/logging/LoggingPermission;
+Ljava/util/logging/LoggingProxyImpl;
+Ljava/util/prefs/AbstractPreferences;
+Ljava/util/prefs/FileSystemPreferences;
+Ljava/util/prefs/Preferences;
+Ljava/util/regex/MatchResult;
+Ljava/util/regex/Matcher;
+Ljava/util/regex/Pattern;
+Ljava/util/regex/PatternSyntaxException;
+Ljava/util/stream/BaseStream;
+Ljava/util/stream/DoubleStream;
+Ljava/util/stream/IntStream;
+Ljava/util/stream/LongStream;
+Ljava/util/stream/PipelineHelper;
+Ljava/util/stream/ReferencePipeline$2$1;
+Ljava/util/stream/ReferencePipeline$2;
+Ljava/util/stream/ReferencePipeline$Head;
+Ljava/util/stream/ReferencePipeline;
+Ljava/util/stream/Sink$ChainedReference;
+Ljava/util/stream/Sink;
+Ljava/util/stream/Stream;
+Ljava/util/stream/StreamOpFlag$MaskBuilder;
+Ljava/util/stream/StreamSupport;
+Ljava/util/stream/TerminalOp;
+Ljava/util/zip/Adler32;
+Ljava/util/zip/CRC32;
+Ljava/util/zip/CheckedInputStream;
+Ljava/util/zip/Checksum;
+Ljava/util/zip/DataFormatException;
+Ljava/util/zip/Deflater;
+Ljava/util/zip/DeflaterOutputStream;
+Ljava/util/zip/GZIPInputStream$1;
+Ljava/util/zip/GZIPInputStream;
+Ljava/util/zip/GZIPOutputStream;
+Ljava/util/zip/Inflater;
+Ljava/util/zip/InflaterInputStream;
+Ljava/util/zip/ZStreamRef;
+Ljava/util/zip/ZipCoder;
+Ljava/util/zip/ZipConstants;
+Ljava/util/zip/ZipEntry;
+Ljava/util/zip/ZipFile$ZipEntryIterator;
+Ljava/util/zip/ZipFile$ZipFileInflaterInputStream;
+Ljava/util/zip/ZipFile$ZipFileInputStream;
+Ljava/util/zip/ZipFile;
+Ljava/util/zip/ZipUtils;
+Ljavax/crypto/BadPaddingException;
+Ljavax/crypto/Cipher$CipherSpiAndProvider;
+Ljavax/crypto/Cipher$InitParams;
+Ljavax/crypto/Cipher$SpiAndProviderUpdater;
+Ljavax/crypto/Cipher$Transform;
+Ljavax/crypto/Cipher;
+Ljavax/crypto/CipherSpi;
+Ljavax/crypto/IllegalBlockSizeException;
+Ljavax/crypto/MacSpi;
+Ljavax/crypto/NoSuchPaddingException;
+Ljavax/crypto/NullCipher;
+Ljavax/crypto/SecretKey;
+Ljavax/crypto/ShortBufferException;
+Ljavax/crypto/spec/GCMParameterSpec;
+Ljavax/crypto/spec/IvParameterSpec;
+Ljavax/crypto/spec/SecretKeySpec;
+Ljavax/microedition/khronos/egl/EGL10;
+Ljavax/microedition/khronos/egl/EGL;
+Ljavax/microedition/khronos/egl/EGLConfig;
+Ljavax/microedition/khronos/egl/EGLDisplay;
+Ljavax/microedition/khronos/egl/EGLSurface;
+Ljavax/microedition/khronos/opengles/GL10;
+Ljavax/microedition/khronos/opengles/GL10Ext;
+Ljavax/microedition/khronos/opengles/GL11;
+Ljavax/microedition/khronos/opengles/GL11Ext;
+Ljavax/microedition/khronos/opengles/GL11ExtensionPack;
+Ljavax/microedition/khronos/opengles/GL;
+Ljavax/net/DefaultSocketFactory;
+Ljavax/net/SocketFactory;
+Ljavax/net/ssl/ExtendedSSLSession;
+Ljavax/net/ssl/HandshakeCompletedListener;
+Ljavax/net/ssl/HostnameVerifier;
+Ljavax/net/ssl/HttpsURLConnection;
+Ljavax/net/ssl/KeyManager;
+Ljavax/net/ssl/KeyManagerFactory$1;
+Ljavax/net/ssl/KeyManagerFactory;
+Ljavax/net/ssl/KeyManagerFactorySpi;
+Ljavax/net/ssl/SNIHostName;
+Ljavax/net/ssl/SSLContext;
+Ljavax/net/ssl/SSLContextSpi;
+Ljavax/net/ssl/SSLEngine;
+Ljavax/net/ssl/SSLException;
+Ljavax/net/ssl/SSLParameters;
+Ljavax/net/ssl/SSLPeerUnverifiedException;
+Ljavax/net/ssl/SSLProtocolException;
+Ljavax/net/ssl/SSLSession;
+Ljavax/net/ssl/SSLSessionContext;
+Ljavax/net/ssl/SSLSocket;
+Ljavax/net/ssl/SSLSocketFactory$1;
+Ljavax/net/ssl/SSLSocketFactory;
+Ljavax/net/ssl/TrustManager;
+Ljavax/net/ssl/TrustManagerFactory$1;
+Ljavax/net/ssl/TrustManagerFactory;
+Ljavax/net/ssl/TrustManagerFactorySpi;
+Ljavax/net/ssl/X509ExtendedKeyManager;
+Ljavax/net/ssl/X509ExtendedTrustManager;
+Ljavax/net/ssl/X509KeyManager;
+Ljavax/net/ssl/X509TrustManager;
+Ljavax/security/auth/Destroyable;
+Ljavax/security/auth/callback/UnsupportedCallbackException;
+Ljavax/security/auth/x500/X500Principal;
+Ljavax/security/cert/CertificateException;
+Ljavax/xml/parsers/ParserConfigurationException;
+Ljavax/xml/parsers/SAXParser;
+Ljavax/xml/parsers/SAXParserFactory;
+Llibcore/icu/DateUtilsBridge;
+Llibcore/icu/ICU;
+Llibcore/icu/LocaleData;
+Llibcore/icu/NativeConverter;
+Llibcore/icu/TimeZoneNames;
+Llibcore/internal/StringPool;
+Llibcore/io/AsynchronousCloseMonitor;
+Llibcore/io/BlockGuardOs;
+Llibcore/io/BufferIterator;
+Llibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection$1;
+Llibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection;
+Llibcore/io/ClassPathURLStreamHandler;
+Llibcore/io/DropBox$DefaultReporter;
+Llibcore/io/DropBox$Reporter;
+Llibcore/io/DropBox;
+Llibcore/io/EventLogger$DefaultReporter;
+Llibcore/io/EventLogger$Reporter;
+Llibcore/io/EventLogger;
+Llibcore/io/ForwardingOs;
+Llibcore/io/IoBridge;
+Llibcore/io/IoTracker$Mode;
+Llibcore/io/IoTracker;
+Llibcore/io/IoUtils;
+Llibcore/io/Libcore;
+Llibcore/io/Linux;
+Llibcore/io/Memory;
+Llibcore/io/MemoryMappedFile;
+Llibcore/io/NioBufferIterator;
+Llibcore/io/Os;
+Llibcore/net/NetworkSecurityPolicy$DefaultNetworkSecurityPolicy;
+Llibcore/net/NetworkSecurityPolicy;
+Llibcore/net/UriCodec;
+Llibcore/net/event/NetworkEventDispatcher;
+Llibcore/net/event/NetworkEventListener;
+Llibcore/reflect/AnnotatedElements;
+Llibcore/reflect/AnnotationFactory;
+Llibcore/reflect/AnnotationMember$DefaultValues;
+Llibcore/reflect/AnnotationMember;
+Llibcore/reflect/GenericArrayTypeImpl;
+Llibcore/reflect/GenericSignatureParser;
+Llibcore/reflect/ListOfTypes;
+Llibcore/reflect/ListOfVariables;
+Llibcore/reflect/ParameterizedTypeImpl;
+Llibcore/reflect/Types;
+Llibcore/util/BasicLruCache;
+Llibcore/util/CharsetUtils;
+Llibcore/util/CollectionUtils;
+Llibcore/util/EmptyArray;
+Llibcore/util/NativeAllocationRegistry$CleanerRunner;
+Llibcore/util/NativeAllocationRegistry$CleanerThunk;
+Llibcore/util/NativeAllocationRegistry;
+Llibcore/util/Objects;
+Llibcore/util/TimeZoneDataFiles;
+Llibcore/util/ZoneInfo$CheckedArithmeticException;
+Llibcore/util/ZoneInfo$WallTime;
+Llibcore/util/ZoneInfo;
+Llibcore/util/ZoneInfoDB$TzData$1;
+Llibcore/util/ZoneInfoDB$TzData;
+Llibcore/util/ZoneInfoDB;
+Lorg/apache/commons/logging/Log;
+Lorg/apache/commons/logging/impl/WeakHashtable;
+Lorg/apache/harmony/dalvik/NativeTestTarget;
+Lorg/apache/harmony/dalvik/ddmc/Chunk;
+Lorg/apache/harmony/dalvik/ddmc/ChunkHandler;
+Lorg/apache/harmony/dalvik/ddmc/DdmServer;
+Lorg/apache/harmony/dalvik/ddmc/DdmVmInternal;
+Lorg/apache/harmony/luni/internal/util/TimezoneGetter;
+Lorg/apache/harmony/xml/ExpatAttributes;
+Lorg/apache/harmony/xml/ExpatParser$CurrentAttributes;
+Lorg/apache/harmony/xml/ExpatParser$ExpatLocator;
+Lorg/apache/harmony/xml/ExpatParser;
+Lorg/apache/harmony/xml/ExpatReader;
+Lorg/apache/harmony/xml/parsers/SAXParserFactoryImpl;
+Lorg/apache/harmony/xml/parsers/SAXParserImpl;
+Lorg/apache/http/ConnectionReuseStrategy;
+Lorg/apache/http/HeaderElement;
+Lorg/apache/http/HttpEntity;
+Lorg/apache/http/HttpException;
+Lorg/apache/http/HttpHost;
+Lorg/apache/http/HttpMessage;
+Lorg/apache/http/HttpRequest;
+Lorg/apache/http/HttpRequestInterceptor;
+Lorg/apache/http/HttpResponse;
+Lorg/apache/http/HttpResponseFactory;
+Lorg/apache/http/NameValuePair;
+Lorg/apache/http/ProtocolException;
+Lorg/apache/http/ProtocolVersion;
+Lorg/apache/http/ReasonPhraseCatalog;
+Lorg/apache/http/StatusLine;
+Lorg/apache/http/client/HttpClient;
+Lorg/apache/http/client/ResponseHandler;
+Lorg/apache/http/client/methods/AbortableHttpRequest;
+Lorg/apache/http/client/methods/HttpRequestBase;
+Lorg/apache/http/client/methods/HttpUriRequest;
+Lorg/apache/http/client/params/HttpClientParams;
+Lorg/apache/http/conn/ClientConnectionManager;
+Lorg/apache/http/conn/ClientConnectionOperator;
+Lorg/apache/http/conn/ConnectTimeoutException;
+Lorg/apache/http/conn/params/ConnManagerPNames;
+Lorg/apache/http/conn/params/ConnManagerParams$1;
+Lorg/apache/http/conn/params/ConnPerRoute;
+Lorg/apache/http/conn/scheme/LayeredSocketFactory;
+Lorg/apache/http/conn/scheme/Scheme;
+Lorg/apache/http/conn/scheme/SchemeRegistry;
+Lorg/apache/http/conn/scheme/SocketFactory;
+Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier;
+Lorg/apache/http/conn/ssl/BrowserCompatHostnameVerifier;
+Lorg/apache/http/conn/ssl/StrictHostnameVerifier;
+Lorg/apache/http/conn/ssl/X509HostnameVerifier;
+Lorg/apache/http/entity/AbstractHttpEntity;
+Lorg/apache/http/entity/BasicHttpEntity;
+Lorg/apache/http/impl/DefaultConnectionReuseStrategy;
+Lorg/apache/http/impl/DefaultHttpResponseFactory;
+Lorg/apache/http/impl/client/AbstractHttpClient;
+Lorg/apache/http/impl/client/DefaultHttpClient;
+Lorg/apache/http/impl/conn/IdleConnectionHandler;
+Lorg/apache/http/impl/conn/tsccm/AbstractConnPool;
+Lorg/apache/http/impl/conn/tsccm/ConnPoolByRoute;
+Lorg/apache/http/impl/conn/tsccm/RefQueueHandler;
+Lorg/apache/http/impl/conn/tsccm/RefQueueWorker;
+Lorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;
+Lorg/apache/http/impl/cookie/DateParseException;
+Lorg/apache/http/impl/cookie/DateUtils$DateFormatHolder$1;
+Lorg/apache/http/message/AbstractHttpMessage;
+Lorg/apache/http/message/BasicHeader;
+Lorg/apache/http/message/BasicHeaderElement;
+Lorg/apache/http/message/BasicHttpResponse;
+Lorg/apache/http/message/BasicNameValuePair;
+Lorg/apache/http/message/BasicStatusLine;
+Lorg/apache/http/message/HeaderGroup;
+Lorg/apache/http/message/HeaderValueParser;
+Lorg/apache/http/message/ParserCursor;
+Lorg/apache/http/params/AbstractHttpParams;
+Lorg/apache/http/params/BasicHttpParams;
+Lorg/apache/http/params/CoreConnectionPNames;
+Lorg/apache/http/params/CoreProtocolPNames;
+Lorg/apache/http/params/HttpConnectionParams;
+Lorg/apache/http/params/HttpParams;
+Lorg/apache/http/params/HttpProtocolParams;
+Lorg/apache/http/protocol/BasicHttpProcessor;
+Lorg/apache/http/protocol/HTTP;
+Lorg/apache/http/protocol/HttpContext;
+Lorg/apache/http/protocol/HttpRequestInterceptorList;
+Lorg/apache/http/protocol/HttpResponseInterceptorList;
+Lorg/apache/http/util/CharArrayBuffer;
+Lorg/ccil/cowan/tagsoup/AttributesImpl;
+Lorg/ccil/cowan/tagsoup/AutoDetector;
+Lorg/ccil/cowan/tagsoup/Element;
+Lorg/ccil/cowan/tagsoup/ElementType;
+Lorg/ccil/cowan/tagsoup/HTMLSchema;
+Lorg/ccil/cowan/tagsoup/Parser$1;
+Lorg/ccil/cowan/tagsoup/ScanHandler;
+Lorg/ccil/cowan/tagsoup/Scanner;
+Lorg/ccil/cowan/tagsoup/Schema;
+Lorg/json/JSON;
+Lorg/json/JSONArray;
+Lorg/json/JSONException;
+Lorg/json/JSONObject$1;
+Lorg/json/JSONObject;
+Lorg/json/JSONStringer;
+Lorg/json/JSONTokener;
+Lorg/kxml2/io/KXmlParser$ValueContext;
+Lorg/kxml2/io/KXmlParser;
+Lorg/xml/sax/Attributes;
+Lorg/xml/sax/DTDHandler;
+Lorg/xml/sax/EntityResolver;
+Lorg/xml/sax/ErrorHandler;
+Lorg/xml/sax/InputSource;
+Lorg/xml/sax/Locator;
+Lorg/xml/sax/SAXException;
+Lorg/xml/sax/XMLReader;
+Lorg/xml/sax/ext/LexicalHandler;
+Lorg/xml/sax/helpers/DefaultHandler;
+Lorg/xmlpull/v1/XmlPullParser;
+Lorg/xmlpull/v1/XmlPullParserException;
+Lorg/xmlpull/v1/XmlSerializer;
+Lsun/invoke/util/BytecodeDescriptor;
+Lsun/invoke/util/VerifyAccess;
+Lsun/invoke/util/Wrapper$Format;
+Lsun/invoke/util/Wrapper;
+Lsun/misc/Cleaner;
+Lsun/misc/CompoundEnumeration;
+Lsun/misc/FDBigInteger;
+Lsun/misc/FloatingDecimal$1;
+Lsun/misc/FloatingDecimal$ASCIIToBinaryBuffer;
+Lsun/misc/FloatingDecimal$ASCIIToBinaryConverter;
+Lsun/misc/FloatingDecimal$BinaryToASCIIBuffer;
+Lsun/misc/FloatingDecimal$BinaryToASCIIConverter;
+Lsun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer;
+Lsun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer;
+Lsun/misc/FloatingDecimal;
+Lsun/misc/FormattedFloatingDecimal$1;
+Lsun/misc/IOUtils;
+Lsun/misc/JavaIOFileDescriptorAccess;
+Lsun/misc/SharedSecrets;
+Lsun/misc/Unsafe;
+Lsun/misc/VM;
+Lsun/misc/Version;
+Lsun/net/ConnectionResetException;
+Lsun/net/NetHooks;
+Lsun/net/NetProperties$1;
+Lsun/net/spi/DefaultProxySelector$1;
+Lsun/net/spi/DefaultProxySelector;
+Lsun/net/spi/nameservice/NameService;
+Lsun/net/util/IPAddressUtil;
+Lsun/net/www/ParseUtil;
+Lsun/net/www/protocol/file/Handler;
+Lsun/net/www/protocol/jar/Handler;
+Lsun/nio/ch/DatagramChannelImpl;
+Lsun/nio/ch/DatagramDispatcher;
+Lsun/nio/ch/DirectBuffer;
+Lsun/nio/ch/FileChannelImpl$Unmapper;
+Lsun/nio/ch/FileChannelImpl;
+Lsun/nio/ch/FileDispatcher;
+Lsun/nio/ch/FileDispatcherImpl;
+Lsun/nio/ch/FileKey;
+Lsun/nio/ch/FileLockTable;
+Lsun/nio/ch/IOStatus;
+Lsun/nio/ch/IOUtil;
+Lsun/nio/ch/Interruptible;
+Lsun/nio/ch/NativeDispatcher;
+Lsun/nio/ch/NativeThread;
+Lsun/nio/ch/NativeThreadSet;
+Lsun/nio/ch/Net;
+Lsun/nio/ch/SelChImpl;
+Lsun/nio/ch/ServerSocketChannelImpl;
+Lsun/nio/ch/SharedFileLockTable$FileLockReference;
+Lsun/nio/ch/SocketChannelImpl;
+Lsun/nio/ch/Util$1;
+Lsun/nio/cs/ArrayEncoder;
+Lsun/nio/cs/StreamDecoder;
+Lsun/nio/cs/StreamEncoder;
+Lsun/nio/fs/AbstractFileSystemProvider;
+Lsun/nio/fs/AbstractPath;
+Lsun/nio/fs/DefaultFileSystemProvider;
+Lsun/nio/fs/LinuxFileSystem;
+Lsun/nio/fs/LinuxFileSystemProvider;
+Lsun/nio/fs/NativeBuffer$Deallocator;
+Lsun/nio/fs/UnixChannelFactory$Flags;
+Lsun/nio/fs/UnixFileSystem;
+Lsun/nio/fs/UnixFileSystemProvider;
+Lsun/security/action/GetBooleanAction;
+Lsun/security/action/GetPropertyAction;
+Lsun/security/jca/GetInstance$Instance;
+Lsun/security/jca/GetInstance;
+Lsun/security/jca/ProviderConfig$2;
+Lsun/security/jca/ProviderConfig;
+Lsun/security/jca/ProviderList$1;
+Lsun/security/jca/ProviderList$2;
+Lsun/security/jca/ProviderList$3;
+Lsun/security/jca/ProviderList$ServiceList$1;
+Lsun/security/jca/ProviderList$ServiceList;
+Lsun/security/jca/ProviderList;
+Lsun/security/jca/Providers;
+Lsun/security/jca/ServiceId;
+Lsun/security/provider/CertPathProvider;
+Lsun/security/provider/X509Factory;
+Lsun/security/provider/certpath/AdaptableX509CertSelector;
+Lsun/security/provider/certpath/AlgorithmChecker;
+Lsun/security/provider/certpath/BasicChecker;
+Lsun/security/provider/certpath/CertPathHelper;
+Lsun/security/provider/certpath/ConstraintsChecker;
+Lsun/security/provider/certpath/KeyChecker;
+Lsun/security/provider/certpath/PKIX$ValidatorParams;
+Lsun/security/provider/certpath/PKIX;
+Lsun/security/provider/certpath/PKIXCertPathValidator;
+Lsun/security/provider/certpath/PKIXMasterCertPathValidator;
+Lsun/security/provider/certpath/PolicyChecker;
+Lsun/security/provider/certpath/PolicyNodeImpl;
+Lsun/security/util/AbstractAlgorithmConstraints$1;
+Lsun/security/util/AbstractAlgorithmConstraints;
+Lsun/security/util/AlgorithmDecomposer;
+Lsun/security/util/BitArray;
+Lsun/security/util/ByteArrayLexOrder;
+Lsun/security/util/ByteArrayTagOrder;
+Lsun/security/util/Cache$EqualByteArray;
+Lsun/security/util/Cache;
+Lsun/security/util/CertConstraintParameters;
+Lsun/security/util/Debug;
+Lsun/security/util/DerEncoder;
+Lsun/security/util/DerIndefLenConverter;
+Lsun/security/util/DerInputBuffer;
+Lsun/security/util/DerInputStream;
+Lsun/security/util/DerOutputStream;
+Lsun/security/util/DerValue;
+Lsun/security/util/DisabledAlgorithmConstraints$Constraint$Operator;
+Lsun/security/util/DisabledAlgorithmConstraints$Constraint;
+Lsun/security/util/DisabledAlgorithmConstraints$Constraints;
+Lsun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint;
+Lsun/security/util/DisabledAlgorithmConstraints;
+Lsun/security/util/KeyUtil;
+Lsun/security/util/Length;
+Lsun/security/util/MemoryCache$CacheEntry;
+Lsun/security/util/MemoryCache$SoftCacheEntry;
+Lsun/security/util/MemoryCache;
+Lsun/security/util/ObjectIdentifier;
+Lsun/security/x509/AVA;
+Lsun/security/x509/AVAKeyword;
+Lsun/security/x509/AccessDescription;
+Lsun/security/x509/AlgorithmId;
+Lsun/security/x509/AuthorityInfoAccessExtension;
+Lsun/security/x509/AuthorityKeyIdentifierExtension;
+Lsun/security/x509/BasicConstraintsExtension;
+Lsun/security/x509/CRLDistributionPointsExtension;
+Lsun/security/x509/CRLNumberExtension;
+Lsun/security/x509/CertAttrSet;
+Lsun/security/x509/CertificateAlgorithmId;
+Lsun/security/x509/CertificateExtensions;
+Lsun/security/x509/CertificateIssuerExtension;
+Lsun/security/x509/CertificatePoliciesExtension;
+Lsun/security/x509/CertificatePolicyId;
+Lsun/security/x509/CertificateSerialNumber;
+Lsun/security/x509/CertificateValidity;
+Lsun/security/x509/CertificateVersion;
+Lsun/security/x509/CertificateX509Key;
+Lsun/security/x509/DNSName;
+Lsun/security/x509/DeltaCRLIndicatorExtension;
+Lsun/security/x509/DistributionPoint;
+Lsun/security/x509/ExtendedKeyUsageExtension;
+Lsun/security/x509/Extension;
+Lsun/security/x509/FreshestCRLExtension;
+Lsun/security/x509/GeneralName;
+Lsun/security/x509/GeneralNameInterface;
+Lsun/security/x509/GeneralNames;
+Lsun/security/x509/IssuerAlternativeNameExtension;
+Lsun/security/x509/IssuingDistributionPointExtension;
+Lsun/security/x509/KeyIdentifier;
+Lsun/security/x509/KeyUsageExtension;
+Lsun/security/x509/NameConstraintsExtension;
+Lsun/security/x509/OCSPNoCheckExtension;
+Lsun/security/x509/OIDMap$OIDInfo;
+Lsun/security/x509/OIDMap;
+Lsun/security/x509/PolicyConstraintsExtension;
+Lsun/security/x509/PolicyInformation;
+Lsun/security/x509/PolicyMappingsExtension;
+Lsun/security/x509/PrivateKeyUsageExtension;
+Lsun/security/x509/RDN;
+Lsun/security/x509/SerialNumber;
+Lsun/security/x509/SubjectAlternativeNameExtension;
+Lsun/security/x509/SubjectInfoAccessExtension;
+Lsun/security/x509/SubjectKeyIdentifierExtension;
+Lsun/security/x509/URIName;
+Lsun/security/x509/X500Name$1;
+Lsun/security/x509/X500Name;
+Lsun/security/x509/X509AttributeName;
+Lsun/security/x509/X509CertImpl;
+Lsun/security/x509/X509CertInfo;
+Lsun/security/x509/X509Key;
+Lsun/util/calendar/AbstractCalendar;
+Lsun/util/calendar/BaseCalendar$Date;
+Lsun/util/calendar/BaseCalendar;
+Lsun/util/calendar/CalendarDate;
+Lsun/util/calendar/CalendarSystem;
+Lsun/util/calendar/CalendarUtils;
+Lsun/util/calendar/Gregorian$Date;
+Lsun/util/calendar/Gregorian;
+Lsun/util/calendar/JulianCalendar;
+Lsun/util/calendar/LocalGregorianCalendar;
+Lsun/util/locale/BaseLocale$Cache;
+Lsun/util/locale/BaseLocale$Key;
+Lsun/util/locale/BaseLocale;
+Lsun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar;
+Lsun/util/locale/InternalLocaleBuilder;
+Lsun/util/locale/LanguageTag;
+Lsun/util/locale/LocaleObjectCache$CacheEntry;
+Lsun/util/locale/LocaleObjectCache;
+Lsun/util/locale/LocaleSyntaxException;
+Lsun/util/locale/LocaleUtils;
+Lsun/util/locale/ParseStatus;
+Lsun/util/locale/StringTokenIterator;
+Lsun/util/logging/LoggingProxy;
+Lsun/util/logging/LoggingSupport$1;
+Lsun/util/logging/LoggingSupport;
+Lsun/util/logging/PlatformLogger$1;
+Lsun/util/logging/PlatformLogger$Level;
+Lsun/util/logging/PlatformLogger;
diff --git a/config/compiled-classes-phone b/config/compiled-classes-phone
new file mode 100644
index 0000000..7d8a7b5
--- /dev/null
+++ b/config/compiled-classes-phone
@@ -0,0 +1,8664 @@
+#
+# 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.
+#
+#
+#
+# Compiled-classes filter file for phones.
+#
+# Using a compiled-classes file filters non-mentioned classes from being compiled into
+# the boot.oat file(s), reducing the size of the boot image. This is a tradeoff, as classes
+# that have not been compiled must be run with the interpreter or through JIT.
+#
+# This file has been derived for mainline phone (and tablet) usage in concern with the
+# preloaded-classes file, but is not used by default. To use this file, add a copy statement
+# to your device.mk, e.g.,
+#
+#   PRODUCT_COPY_FILES += \
+#     frameworks/base/config/compiled-classes-phone:system/etc/compiled-classes
+#
+android.R$styleable
+android.accessibilityservice.AccessibilityServiceInfo
+android.accessibilityservice.AccessibilityServiceInfo$1
+android.accessibilityservice.IAccessibilityServiceClient
+android.accessibilityservice.IAccessibilityServiceConnection
+android.accessibilityservice.IAccessibilityServiceConnection$Stub
+android.accounts.AbstractAccountAuthenticator
+android.accounts.AbstractAccountAuthenticator$Transport
+android.accounts.Account
+android.accounts.Account$1
+android.accounts.AccountAndUser
+android.accounts.AccountAuthenticatorResponse
+android.accounts.AccountAuthenticatorResponse$1
+android.accounts.AccountManager
+android.accounts.AccountManager$1
+android.accounts.AccountManager$11
+android.accounts.AccountManager$19
+android.accounts.AccountManager$3
+android.accounts.AccountManager$4
+android.accounts.AccountManager$AmsTask
+android.accounts.AccountManager$AmsTask$1
+android.accounts.AccountManager$AmsTask$Response
+android.accounts.AccountManager$BaseFutureTask
+android.accounts.AccountManager$BaseFutureTask$1
+android.accounts.AccountManager$BaseFutureTask$Response
+android.accounts.AccountManager$Future2Task
+android.accounts.AccountManager$Future2Task$1
+android.accounts.AccountManagerCallback
+android.accounts.AccountManagerFuture
+android.accounts.AccountManagerInternal
+android.accounts.AccountManagerInternal$OnAppPermissionChangeListener
+android.accounts.AccountsException
+android.accounts.AuthenticatorDescription
+android.accounts.AuthenticatorDescription$1
+android.accounts.AuthenticatorException
+android.accounts.IAccountAuthenticator
+android.accounts.IAccountAuthenticator$Stub
+android.accounts.IAccountAuthenticator$Stub$Proxy
+android.accounts.IAccountAuthenticatorResponse
+android.accounts.IAccountAuthenticatorResponse$Stub
+android.accounts.IAccountAuthenticatorResponse$Stub$Proxy
+android.accounts.IAccountManager
+android.accounts.IAccountManager$Stub
+android.accounts.IAccountManager$Stub$Proxy
+android.accounts.IAccountManagerResponse
+android.accounts.IAccountManagerResponse$Stub
+android.accounts.IAccountManagerResponse$Stub$Proxy
+android.accounts.OnAccountsUpdateListener
+android.accounts.OperationCanceledException
+android.animation.AnimationHandler
+android.animation.AnimationHandler$1
+android.animation.AnimationHandler$AnimationFrameCallback
+android.animation.AnimationHandler$AnimationFrameCallbackProvider
+android.animation.AnimationHandler$MyFrameCallbackProvider
+android.animation.Animator
+android.animation.Animator$AnimatorConstantState
+android.animation.Animator$AnimatorListener
+android.animation.Animator$AnimatorPauseListener
+android.animation.AnimatorInflater
+android.animation.AnimatorInflater$PathDataEvaluator
+android.animation.AnimatorListenerAdapter
+android.animation.AnimatorSet
+android.animation.AnimatorSet$1
+android.animation.AnimatorSet$2
+android.animation.AnimatorSet$3
+android.animation.AnimatorSet$AnimationEvent
+android.animation.AnimatorSet$Builder
+android.animation.AnimatorSet$Node
+android.animation.AnimatorSet$SeekState
+android.animation.ArgbEvaluator
+android.animation.FloatArrayEvaluator
+android.animation.FloatEvaluator
+android.animation.FloatKeyframeSet
+android.animation.IntEvaluator
+android.animation.IntKeyframeSet
+android.animation.Keyframe
+android.animation.Keyframe$FloatKeyframe
+android.animation.Keyframe$IntKeyframe
+android.animation.Keyframe$ObjectKeyframe
+android.animation.KeyframeSet
+android.animation.Keyframes
+android.animation.Keyframes$FloatKeyframes
+android.animation.Keyframes$IntKeyframes
+android.animation.LayoutTransition
+android.animation.LayoutTransition$1
+android.animation.LayoutTransition$2
+android.animation.LayoutTransition$3
+android.animation.LayoutTransition$4
+android.animation.LayoutTransition$5
+android.animation.LayoutTransition$CleanupCallback
+android.animation.LayoutTransition$TransitionListener
+android.animation.ObjectAnimator
+android.animation.PathKeyframes
+android.animation.PathKeyframes$1
+android.animation.PathKeyframes$2
+android.animation.PathKeyframes$FloatKeyframesBase
+android.animation.PathKeyframes$IntKeyframesBase
+android.animation.PathKeyframes$SimpleKeyframes
+android.animation.PropertyValuesHolder
+android.animation.PropertyValuesHolder$1
+android.animation.PropertyValuesHolder$FloatPropertyValuesHolder
+android.animation.PropertyValuesHolder$IntPropertyValuesHolder
+android.animation.PropertyValuesHolder$PropertyValues
+android.animation.PropertyValuesHolder$PropertyValues$DataSource
+android.animation.RectEvaluator
+android.animation.RevealAnimator
+android.animation.StateListAnimator
+android.animation.StateListAnimator$1
+android.animation.StateListAnimator$StateListAnimatorConstantState
+android.animation.StateListAnimator$Tuple
+android.animation.TimeAnimator
+android.animation.TimeAnimator$TimeListener
+android.animation.TimeInterpolator
+android.animation.TypeEvaluator
+android.animation.ValueAnimator
+android.animation.ValueAnimator$AnimatorUpdateListener
+android.app.-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU
+android.app.-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU$1
+android.app.-$Lambda$CsyQO--8YdRe5wlajUCi-L98enA$1
+android.app.-$Lambda$CsyQO--8YdRe5wlajUCi-L98enA$2
+android.app.-$Lambda$CsyQO--8YdRe5wlajUCi-L98enA$3
+android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk
+android.app.-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ
+android.app.-$Lambda$c44uHH2WE4sJvw5tZZB6gRzEaHI
+android.app.-$Lambda$c44uHH2WE4sJvw5tZZB6gRzEaHI$1
+android.app.-$Lambda$vZ1qb742P9hE4drBY-TrOZB_qKo
+android.app.-$Lambda$w9bG0NLfK6B6UpQKzQS6S1ayAh0
+android.app.-$Lambda$w9bG0NLfK6B6UpQKzQS6S1ayAh0$1
+android.app.ActionBar
+android.app.ActionBar$LayoutParams
+android.app.Activity
+android.app.Activity$HostCallbacks
+android.app.ActivityManager
+android.app.ActivityManager$1
+android.app.ActivityManager$AppTask
+android.app.ActivityManager$MemoryInfo
+android.app.ActivityManager$MemoryInfo$1
+android.app.ActivityManager$OnUidImportanceListener
+android.app.ActivityManager$ProcessErrorStateInfo
+android.app.ActivityManager$RecentTaskInfo
+android.app.ActivityManager$RecentTaskInfo$1
+android.app.ActivityManager$RunningAppProcessInfo
+android.app.ActivityManager$RunningAppProcessInfo$1
+android.app.ActivityManager$RunningServiceInfo
+android.app.ActivityManager$RunningServiceInfo$1
+android.app.ActivityManager$RunningTaskInfo
+android.app.ActivityManager$RunningTaskInfo$1
+android.app.ActivityManager$StackId
+android.app.ActivityManager$StackInfo
+android.app.ActivityManager$StackInfo$1
+android.app.ActivityManager$TaskDescription
+android.app.ActivityManager$TaskDescription$1
+android.app.ActivityManager$TaskSnapshot
+android.app.ActivityManager$TaskSnapshot$1
+android.app.ActivityManager$TaskThumbnail
+android.app.ActivityManager$TaskThumbnailInfo
+android.app.ActivityManager$TaskThumbnailInfo$1
+android.app.ActivityManager$UidObserver
+android.app.ActivityManagerInternal
+android.app.ActivityManagerInternal$SleepToken
+android.app.ActivityOptions
+android.app.ActivityOptions$1
+android.app.ActivityOptions$1$1
+android.app.ActivityOptions$OnAnimationFinishedListener
+android.app.ActivityOptions$OnAnimationStartedListener
+android.app.ActivityThread
+android.app.ActivityThread$1
+android.app.ActivityThread$2
+android.app.ActivityThread$ActivityClientRecord
+android.app.ActivityThread$ActivityConfigChangeData
+android.app.ActivityThread$AppBindData
+android.app.ActivityThread$ApplicationThread
+android.app.ActivityThread$BindServiceData
+android.app.ActivityThread$ContextCleanupInfo
+android.app.ActivityThread$CreateServiceData
+android.app.ActivityThread$DropBoxReporter
+android.app.ActivityThread$EventLoggingReporter
+android.app.ActivityThread$GcIdler
+android.app.ActivityThread$H
+android.app.ActivityThread$Idler
+android.app.ActivityThread$NewIntentData
+android.app.ActivityThread$Profiler
+android.app.ActivityThread$ProviderClientRecord
+android.app.ActivityThread$ProviderKey
+android.app.ActivityThread$ProviderRefCount
+android.app.ActivityThread$ReceiverData
+android.app.ActivityThread$RequestAssistContextExtras
+android.app.ActivityThread$ResultData
+android.app.ActivityThread$ServiceArgsData
+android.app.ActivityThread$StopInfo
+android.app.ActivityTransitionCoordinator
+android.app.ActivityTransitionCoordinator$ContinueTransitionListener
+android.app.ActivityTransitionCoordinator$FixedEpicenterCallback
+android.app.ActivityTransitionCoordinator$GhostViewListeners
+android.app.ActivityTransitionCoordinator$SharedElementOriginalState
+android.app.ActivityTransitionState
+android.app.AlarmManager$AlarmClockInfo
+android.app.AlarmManager$ListenerWrapper
+android.app.AlarmManager$OnAlarmListener
+android.app.AlertDialog
+android.app.AlertDialog$Builder
+android.app.AppGlobals
+android.app.AppOpsManager
+android.app.AppOpsManager$1
+android.app.AppOpsManager$OnOpChangedInternalListener
+android.app.AppOpsManager$OnOpChangedListener
+android.app.AppOpsManager$OpEntry
+android.app.AppOpsManager$OpEntry$1
+android.app.AppOpsManager$PackageOps
+android.app.AppOpsManager$PackageOps$1
+android.app.Application
+android.app.Application$ActivityLifecycleCallbacks
+android.app.ApplicationErrorReport
+android.app.ApplicationErrorReport$AnrInfo
+android.app.ApplicationErrorReport$CrashInfo
+android.app.ApplicationErrorReport$ParcelableCrashInfo
+android.app.ApplicationErrorReport$ParcelableCrashInfo$1
+android.app.ApplicationLoaders
+android.app.ApplicationPackageManager
+android.app.ApplicationPackageManager$MoveCallbackDelegate
+android.app.ApplicationPackageManager$OnPermissionsChangeListenerDelegate
+android.app.ApplicationPackageManager$ResourceName
+android.app.AutomaticZenRule
+android.app.BackStackRecord
+android.app.BackStackRecord$Op
+android.app.BroadcastOptions
+android.app.ContentProviderHolder
+android.app.ContentProviderHolder$1
+android.app.ContextImpl
+android.app.ContextImpl$1
+android.app.ContextImpl$ApplicationContentResolver
+android.app.DatePickerDialog$OnDateSetListener
+android.app.DexLoadReporter
+android.app.Dialog
+android.app.Dialog$ListenersHandler
+android.app.DialogFragment
+android.app.DownloadManager
+android.app.DownloadManager$CursorTranslator
+android.app.DownloadManager$Query
+android.app.EnterTransitionCoordinator
+android.app.EnterTransitionCoordinator$1
+android.app.EnterTransitionCoordinator$2
+android.app.EnterTransitionCoordinator$3
+android.app.EnterTransitionCoordinator$4
+android.app.EnterTransitionCoordinator$5
+android.app.EnterTransitionCoordinator$6
+android.app.ExitTransitionCoordinator
+android.app.ExitTransitionCoordinator$10
+android.app.ExitTransitionCoordinator$3
+android.app.ExitTransitionCoordinator$9
+android.app.Fragment
+android.app.Fragment$1
+android.app.Fragment$AnimationInfo
+android.app.FragmentContainer
+android.app.FragmentController
+android.app.FragmentHostCallback
+android.app.FragmentManager
+android.app.FragmentManager$BackStackEntry
+android.app.FragmentManager$FragmentLifecycleCallbacks
+android.app.FragmentManager$OnBackStackChangedListener
+android.app.FragmentManagerImpl
+android.app.FragmentManagerImpl$1
+android.app.FragmentManagerImpl$AnimateOnHWLayerIfNeededListener
+android.app.FragmentManagerImpl$OpGenerator
+android.app.FragmentManagerState
+android.app.FragmentManagerState$1
+android.app.FragmentState
+android.app.FragmentState$1
+android.app.FragmentTransaction
+android.app.FragmentTransition
+android.app.FragmentTransition$FragmentContainerTransition
+android.app.IActivityContainer
+android.app.IActivityContainer$Stub
+android.app.IActivityContainerCallback
+android.app.IActivityController
+android.app.IActivityManager
+android.app.IActivityManager$Stub
+android.app.IActivityManager$Stub$Proxy
+android.app.IAlarmCompleteListener
+android.app.IAlarmCompleteListener$Stub
+android.app.IAlarmCompleteListener$Stub$Proxy
+android.app.IAlarmListener
+android.app.IAlarmListener$Stub
+android.app.IAlarmListener$Stub$Proxy
+android.app.IAlarmManager
+android.app.IAlarmManager$Stub
+android.app.IAlarmManager$Stub$Proxy
+android.app.IAppTask
+android.app.IAppTask$Stub
+android.app.IAppTask$Stub$Proxy
+android.app.IApplicationThread
+android.app.IApplicationThread$Stub
+android.app.IApplicationThread$Stub$Proxy
+android.app.IInstantAppResolver
+android.app.IInstantAppResolver$Stub
+android.app.IInstantAppResolver$Stub$Proxy
+android.app.IInstrumentationWatcher
+android.app.IInstrumentationWatcher$Stub
+android.app.INotificationManager
+android.app.INotificationManager$Stub
+android.app.INotificationManager$Stub$Proxy
+android.app.IProcessObserver
+android.app.IProcessObserver$Stub
+android.app.IProcessObserver$Stub$Proxy
+android.app.ISearchManager
+android.app.ISearchManager$Stub
+android.app.ISearchManager$Stub$Proxy
+android.app.IServiceConnection
+android.app.IServiceConnection$Stub
+android.app.IServiceConnection$Stub$Proxy
+android.app.IStopUserCallback
+android.app.ITaskStackListener
+android.app.ITaskStackListener$Stub
+android.app.ITaskStackListener$Stub$Proxy
+android.app.ITransientNotification
+android.app.ITransientNotification$Stub
+android.app.ITransientNotification$Stub$Proxy
+android.app.IUiAutomationConnection
+android.app.IUiAutomationConnection$Stub
+android.app.IUiModeManager
+android.app.IUiModeManager$Stub
+android.app.IUiModeManager$Stub$Proxy
+android.app.IUidObserver
+android.app.IUidObserver$Stub
+android.app.IUidObserver$Stub$Proxy
+android.app.IUserSwitchObserver
+android.app.IUserSwitchObserver$Stub
+android.app.IUserSwitchObserver$Stub$Proxy
+android.app.IWallpaperManager
+android.app.IWallpaperManager$Stub
+android.app.IWallpaperManager$Stub$Proxy
+android.app.IWallpaperManagerCallback
+android.app.IWallpaperManagerCallback$Stub
+android.app.IWallpaperManagerCallback$Stub$Proxy
+android.app.InstantAppResolverService
+android.app.InstantAppResolverService$1
+android.app.InstantAppResolverService$InstantAppResolutionCallback
+android.app.InstantAppResolverService$ServiceHandler
+android.app.Instrumentation
+android.app.IntentReceiverLeaked
+android.app.IntentService
+android.app.IntentService$ServiceHandler
+android.app.JobSchedulerImpl
+android.app.KeyguardManager
+android.app.KeyguardManager$1
+android.app.KeyguardManager$KeyguardDismissCallback
+android.app.ListActivity
+android.app.ListFragment
+android.app.ListFragment$1
+android.app.ListFragment$2
+android.app.LoadedApk
+android.app.LoadedApk$ReceiverDispatcher
+android.app.LoadedApk$ReceiverDispatcher$Args
+android.app.LoadedApk$ReceiverDispatcher$InnerReceiver
+android.app.LoadedApk$ServiceDispatcher
+android.app.LoadedApk$ServiceDispatcher$ConnectionInfo
+android.app.LoadedApk$ServiceDispatcher$DeathMonitor
+android.app.LoadedApk$ServiceDispatcher$InnerConnection
+android.app.LoadedApk$ServiceDispatcher$RunConnection
+android.app.LoadedApk$WarningContextClassLoader
+android.app.LoaderManager
+android.app.LoaderManager$LoaderCallbacks
+android.app.LoaderManagerImpl
+android.app.LoaderManagerImpl$LoaderInfo
+android.app.NativeActivity
+android.app.Notification
+android.app.Notification$1
+android.app.Notification$Action
+android.app.Notification$Action$1
+android.app.Notification$Action$Builder
+android.app.Notification$BigPictureStyle
+android.app.Notification$BigTextStyle
+android.app.Notification$Builder
+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
+android.app.Notification$StandardTemplateParams
+android.app.Notification$Style
+android.app.Notification$TvExtender
+android.app.Notification$WearableExtender
+android.app.NotificationChannel
+android.app.NotificationChannel$1
+android.app.NotificationChannelGroup
+android.app.NotificationChannelGroup$1
+android.app.NotificationManager
+android.app.NotificationManager$Policy
+android.app.NotificationManager$Policy$1
+android.app.OnActivityPausedListener
+android.app.PackageInstallObserver
+android.app.PackageInstallObserver$1
+android.app.PendingIntent
+android.app.PendingIntent$1
+android.app.PendingIntent$CanceledException
+android.app.PendingIntent$FinishedDispatcher
+android.app.PendingIntent$OnFinished
+android.app.PendingIntent$OnMarshaledListener
+android.app.PictureInPictureParams
+android.app.PictureInPictureParams$1
+android.app.PictureInPictureParams$Builder
+android.app.ProfilerInfo
+android.app.ProgressDialog
+android.app.QueuedWork
+android.app.QueuedWork$QueuedWorkHandler
+android.app.ReceiverRestrictedContext
+android.app.RemoteAction
+android.app.RemoteAction$1
+android.app.RemoteInput
+android.app.RemoteInput$1
+android.app.ResourcesManager
+android.app.ResourcesManager$1
+android.app.ResourcesManager$ActivityResources
+android.app.ResultInfo
+android.app.ResultInfo$1
+android.app.SearchableInfo
+android.app.SearchableInfo$1
+android.app.Service
+android.app.ServiceConnectionLeaked
+android.app.ServiceStartArgs
+android.app.ServiceStartArgs$1
+android.app.SharedElementCallback
+android.app.SharedElementCallback$1
+android.app.SharedElementCallback$OnSharedElementsReadyListener
+android.app.SharedPreferencesImpl
+android.app.SharedPreferencesImpl$1
+android.app.SharedPreferencesImpl$2
+android.app.SharedPreferencesImpl$EditorImpl
+android.app.SharedPreferencesImpl$EditorImpl$1
+android.app.SharedPreferencesImpl$EditorImpl$2
+android.app.SharedPreferencesImpl$EditorImpl$3
+android.app.SharedPreferencesImpl$MemoryCommitResult
+android.app.StatusBarManager
+android.app.SynchronousUserSwitchObserver
+android.app.SystemServiceRegistry
+android.app.SystemServiceRegistry$1
+android.app.SystemServiceRegistry$10
+android.app.SystemServiceRegistry$11
+android.app.SystemServiceRegistry$12
+android.app.SystemServiceRegistry$13
+android.app.SystemServiceRegistry$14
+android.app.SystemServiceRegistry$15
+android.app.SystemServiceRegistry$16
+android.app.SystemServiceRegistry$17
+android.app.SystemServiceRegistry$18
+android.app.SystemServiceRegistry$19
+android.app.SystemServiceRegistry$2
+android.app.SystemServiceRegistry$20
+android.app.SystemServiceRegistry$21
+android.app.SystemServiceRegistry$22
+android.app.SystemServiceRegistry$23
+android.app.SystemServiceRegistry$24
+android.app.SystemServiceRegistry$25
+android.app.SystemServiceRegistry$26
+android.app.SystemServiceRegistry$27
+android.app.SystemServiceRegistry$28
+android.app.SystemServiceRegistry$29
+android.app.SystemServiceRegistry$3
+android.app.SystemServiceRegistry$30
+android.app.SystemServiceRegistry$31
+android.app.SystemServiceRegistry$32
+android.app.SystemServiceRegistry$33
+android.app.SystemServiceRegistry$34
+android.app.SystemServiceRegistry$35
+android.app.SystemServiceRegistry$36
+android.app.SystemServiceRegistry$37
+android.app.SystemServiceRegistry$38
+android.app.SystemServiceRegistry$39
+android.app.SystemServiceRegistry$4
+android.app.SystemServiceRegistry$40
+android.app.SystemServiceRegistry$41
+android.app.SystemServiceRegistry$42
+android.app.SystemServiceRegistry$43
+android.app.SystemServiceRegistry$44
+android.app.SystemServiceRegistry$45
+android.app.SystemServiceRegistry$46
+android.app.SystemServiceRegistry$47
+android.app.SystemServiceRegistry$48
+android.app.SystemServiceRegistry$49
+android.app.SystemServiceRegistry$5
+android.app.SystemServiceRegistry$50
+android.app.SystemServiceRegistry$51
+android.app.SystemServiceRegistry$52
+android.app.SystemServiceRegistry$53
+android.app.SystemServiceRegistry$54
+android.app.SystemServiceRegistry$55
+android.app.SystemServiceRegistry$56
+android.app.SystemServiceRegistry$57
+android.app.SystemServiceRegistry$58
+android.app.SystemServiceRegistry$59
+android.app.SystemServiceRegistry$6
+android.app.SystemServiceRegistry$60
+android.app.SystemServiceRegistry$61
+android.app.SystemServiceRegistry$62
+android.app.SystemServiceRegistry$63
+android.app.SystemServiceRegistry$64
+android.app.SystemServiceRegistry$65
+android.app.SystemServiceRegistry$66
+android.app.SystemServiceRegistry$67
+android.app.SystemServiceRegistry$68
+android.app.SystemServiceRegistry$69
+android.app.SystemServiceRegistry$7
+android.app.SystemServiceRegistry$70
+android.app.SystemServiceRegistry$71
+android.app.SystemServiceRegistry$72
+android.app.SystemServiceRegistry$73
+android.app.SystemServiceRegistry$74
+android.app.SystemServiceRegistry$75
+android.app.SystemServiceRegistry$76
+android.app.SystemServiceRegistry$77
+android.app.SystemServiceRegistry$78
+android.app.SystemServiceRegistry$79
+android.app.SystemServiceRegistry$8
+android.app.SystemServiceRegistry$80
+android.app.SystemServiceRegistry$81
+android.app.SystemServiceRegistry$82
+android.app.SystemServiceRegistry$83
+android.app.SystemServiceRegistry$84
+android.app.SystemServiceRegistry$85
+android.app.SystemServiceRegistry$9
+android.app.SystemServiceRegistry$CachedServiceFetcher
+android.app.SystemServiceRegistry$ServiceFetcher
+android.app.SystemServiceRegistry$StaticApplicationContextServiceFetcher
+android.app.SystemServiceRegistry$StaticServiceFetcher
+android.app.TaskStackListener
+android.app.TimePickerDialog$OnTimeSetListener
+android.app.UiModeManager
+android.app.UserSwitchObserver
+android.app.Vr2dDisplayProperties
+android.app.VrManager
+android.app.WaitResult
+android.app.WallpaperColors
+android.app.WallpaperColors$1
+android.app.WallpaperInfo
+android.app.WallpaperInfo$1
+android.app.WallpaperManager
+android.app.WallpaperManager$Globals
+android.app.admin.DeviceAdminInfo
+android.app.admin.DeviceAdminInfo$1
+android.app.admin.DeviceAdminInfo$PolicyInfo
+android.app.admin.DevicePolicyManager
+android.app.admin.DevicePolicyManagerInternal
+android.app.admin.DevicePolicyManagerInternal$OnCrossProfileWidgetProvidersChangeListener
+android.app.admin.IDevicePolicyManager
+android.app.admin.IDevicePolicyManager$Stub
+android.app.admin.IDevicePolicyManager$Stub$Proxy
+android.app.admin.PasswordMetrics
+android.app.admin.PasswordMetrics$1
+android.app.admin.SecurityLog
+android.app.admin.SecurityLog$SecurityEvent
+android.app.admin.SecurityLog$SecurityEvent$1
+android.app.admin.SystemUpdateInfo
+android.app.admin.SystemUpdateInfo$1
+android.app.admin.SystemUpdatePolicy
+android.app.admin.SystemUpdatePolicy$1
+android.app.assist.AssistContent
+android.app.assist.AssistStructure
+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
+android.app.assist.AssistStructure$ViewNode
+android.app.assist.AssistStructure$ViewNodeBuilder
+android.app.assist.AssistStructure$ViewNodeText
+android.app.assist.AssistStructure$ViewStackEntry
+android.app.assist.AssistStructure$WindowNode
+android.app.backup.BackupAgent
+android.app.backup.BackupAgentHelper
+android.app.backup.BackupDataInput
+android.app.backup.BackupDataInput$EntityHeader
+android.app.backup.BackupDataOutput
+android.app.backup.BackupHelper
+android.app.backup.BackupHelperDispatcher
+android.app.backup.BackupHelperDispatcher$Header
+android.app.backup.BackupManager
+android.app.backup.BackupTransport
+android.app.backup.BackupTransport$TransportImpl
+android.app.backup.FileBackupHelperBase
+android.app.backup.FullBackup
+android.app.backup.FullBackupDataOutput
+android.app.backup.IBackupManager
+android.app.backup.IBackupManager$Stub
+android.app.backup.IBackupManager$Stub$Proxy
+android.app.backup.IBackupManagerMonitor
+android.app.backup.IBackupObserver
+android.app.backup.IFullBackupRestoreObserver
+android.app.backup.IRestoreSession
+android.app.backup.ISelectBackupTransportCallback
+android.app.backup.RestoreDescription
+android.app.backup.RestoreSet
+android.app.job.IJobCallback
+android.app.job.IJobCallback$Stub
+android.app.job.IJobCallback$Stub$Proxy
+android.app.job.IJobScheduler
+android.app.job.IJobScheduler$Stub
+android.app.job.IJobScheduler$Stub$Proxy
+android.app.job.IJobService
+android.app.job.IJobService$Stub
+android.app.job.IJobService$Stub$Proxy
+android.app.job.JobInfo
+android.app.job.JobInfo$1
+android.app.job.JobInfo$Builder
+android.app.job.JobInfo$TriggerContentUri
+android.app.job.JobInfo$TriggerContentUri$1
+android.app.job.JobParameters
+android.app.job.JobParameters$1
+android.app.job.JobScheduler
+android.app.job.JobService
+android.app.job.JobService$1
+android.app.job.JobServiceEngine
+android.app.job.JobServiceEngine$JobHandler
+android.app.job.JobServiceEngine$JobInterface
+android.app.job.JobWorkItem
+android.app.job.JobWorkItem$1
+android.app.timezone.RulesManager
+android.app.trust.IStrongAuthTracker
+android.app.trust.IStrongAuthTracker$Stub
+android.app.trust.IStrongAuthTracker$Stub$Proxy
+android.app.trust.ITrustListener
+android.app.trust.ITrustListener$Stub
+android.app.trust.ITrustListener$Stub$Proxy
+android.app.trust.ITrustManager
+android.app.trust.ITrustManager$Stub
+android.app.trust.ITrustManager$Stub$Proxy
+android.app.trust.TrustManager
+android.app.trust.TrustManager$1
+android.app.trust.TrustManager$2
+android.app.trust.TrustManager$TrustListener
+android.app.usage.CacheQuotaHint
+android.app.usage.CacheQuotaHint$1
+android.app.usage.CacheQuotaHint$Builder
+android.app.usage.ConfigurationStats
+android.app.usage.ConfigurationStats$1
+android.app.usage.ExternalStorageStats
+android.app.usage.ICacheQuotaService
+android.app.usage.ICacheQuotaService$Stub
+android.app.usage.ICacheQuotaService$Stub$Proxy
+android.app.usage.IStorageStatsManager
+android.app.usage.IStorageStatsManager$Stub
+android.app.usage.IUsageStatsManager
+android.app.usage.IUsageStatsManager$Stub
+android.app.usage.IUsageStatsManager$Stub$Proxy
+android.app.usage.NetworkStatsManager
+android.app.usage.StorageStats
+android.app.usage.StorageStatsManager
+android.app.usage.TimeSparseArray
+android.app.usage.UsageEvents
+android.app.usage.UsageEvents$1
+android.app.usage.UsageEvents$Event
+android.app.usage.UsageStats
+android.app.usage.UsageStats$1
+android.app.usage.UsageStatsManager
+android.app.usage.UsageStatsManagerInternal
+android.app.usage.UsageStatsManagerInternal$AppIdleStateChangeListener
+android.appwidget.AppWidgetHost
+android.appwidget.AppWidgetHost$Callbacks
+android.appwidget.AppWidgetHost$UpdateHandler
+android.appwidget.AppWidgetHostView
+android.appwidget.AppWidgetHostView$1
+android.appwidget.AppWidgetHostView$ParcelableSparseArray
+android.appwidget.AppWidgetHostView$ParcelableSparseArray$1
+android.appwidget.AppWidgetManager
+android.appwidget.AppWidgetProvider
+android.appwidget.AppWidgetProviderInfo
+android.appwidget.AppWidgetProviderInfo$1
+android.appwidget.PendingHostUpdate
+android.appwidget.PendingHostUpdate$1
+android.bluetooth.BluetoothA2dp
+android.bluetooth.BluetoothA2dp$1
+android.bluetooth.BluetoothA2dp$2
+android.bluetooth.BluetoothActivityEnergyInfo
+android.bluetooth.BluetoothAdapter
+android.bluetooth.BluetoothAdapter$1
+android.bluetooth.BluetoothAdapter$BluetoothStateChangeCallback
+android.bluetooth.BluetoothCodecConfig
+android.bluetooth.BluetoothCodecConfig$1
+android.bluetooth.BluetoothCodecStatus
+android.bluetooth.BluetoothDevice
+android.bluetooth.BluetoothDevice$1
+android.bluetooth.BluetoothDevice$2
+android.bluetooth.BluetoothGatt
+android.bluetooth.BluetoothGattCallback
+android.bluetooth.BluetoothGattCharacteristic
+android.bluetooth.BluetoothGattDescriptor
+android.bluetooth.BluetoothGattService
+android.bluetooth.BluetoothHeadset
+android.bluetooth.BluetoothHeadset$1
+android.bluetooth.BluetoothHeadset$2
+android.bluetooth.BluetoothHeadset$3
+android.bluetooth.BluetoothHealthAppConfiguration
+android.bluetooth.BluetoothInputDevice
+android.bluetooth.BluetoothInputDevice$1
+android.bluetooth.BluetoothInputDevice$2
+android.bluetooth.BluetoothInputStream
+android.bluetooth.BluetoothManager
+android.bluetooth.BluetoothMap
+android.bluetooth.BluetoothMap$1
+android.bluetooth.BluetoothMap$2
+android.bluetooth.BluetoothOutputStream
+android.bluetooth.BluetoothPan
+android.bluetooth.BluetoothPan$1
+android.bluetooth.BluetoothPan$2
+android.bluetooth.BluetoothPbap
+android.bluetooth.BluetoothPbap$1
+android.bluetooth.BluetoothPbap$2
+android.bluetooth.BluetoothPbap$ServiceListener
+android.bluetooth.BluetoothProfile
+android.bluetooth.BluetoothProfile$ServiceListener
+android.bluetooth.BluetoothServerSocket
+android.bluetooth.BluetoothSocket
+android.bluetooth.BluetoothSocket$SocketState
+android.bluetooth.BluetoothUuid
+android.bluetooth.IBluetooth
+android.bluetooth.IBluetooth$Stub
+android.bluetooth.IBluetooth$Stub$Proxy
+android.bluetooth.IBluetoothA2dp
+android.bluetooth.IBluetoothA2dp$Stub
+android.bluetooth.IBluetoothA2dp$Stub$Proxy
+android.bluetooth.IBluetoothCallback
+android.bluetooth.IBluetoothCallback$Stub
+android.bluetooth.IBluetoothCallback$Stub$Proxy
+android.bluetooth.IBluetoothGatt
+android.bluetooth.IBluetoothGatt$Stub
+android.bluetooth.IBluetoothGatt$Stub$Proxy
+android.bluetooth.IBluetoothGattCallback
+android.bluetooth.IBluetoothGattServerCallback
+android.bluetooth.IBluetoothHeadset
+android.bluetooth.IBluetoothHeadset$Stub
+android.bluetooth.IBluetoothHeadset$Stub$Proxy
+android.bluetooth.IBluetoothHeadsetPhone
+android.bluetooth.IBluetoothHeadsetPhone$Stub
+android.bluetooth.IBluetoothHeadsetPhone$Stub$Proxy
+android.bluetooth.IBluetoothHealth
+android.bluetooth.IBluetoothHealth$Stub
+android.bluetooth.IBluetoothHealthCallback
+android.bluetooth.IBluetoothInputDevice
+android.bluetooth.IBluetoothInputDevice$Stub
+android.bluetooth.IBluetoothInputDevice$Stub$Proxy
+android.bluetooth.IBluetoothManager
+android.bluetooth.IBluetoothManager$Stub
+android.bluetooth.IBluetoothManager$Stub$Proxy
+android.bluetooth.IBluetoothManagerCallback
+android.bluetooth.IBluetoothManagerCallback$Stub
+android.bluetooth.IBluetoothManagerCallback$Stub$Proxy
+android.bluetooth.IBluetoothMap
+android.bluetooth.IBluetoothMap$Stub
+android.bluetooth.IBluetoothMap$Stub$Proxy
+android.bluetooth.IBluetoothPan
+android.bluetooth.IBluetoothPan$Stub
+android.bluetooth.IBluetoothPan$Stub$Proxy
+android.bluetooth.IBluetoothPbap
+android.bluetooth.IBluetoothPbap$Stub
+android.bluetooth.IBluetoothPbap$Stub$Proxy
+android.bluetooth.IBluetoothProfileServiceConnection
+android.bluetooth.IBluetoothProfileServiceConnection$Stub
+android.bluetooth.IBluetoothProfileServiceConnection$Stub$Proxy
+android.bluetooth.IBluetoothSap
+android.bluetooth.IBluetoothSap$Stub
+android.bluetooth.IBluetoothStateChangeCallback
+android.bluetooth.IBluetoothStateChangeCallback$Stub
+android.bluetooth.IBluetoothStateChangeCallback$Stub$Proxy
+android.bluetooth.OobData
+android.bluetooth.UidTraffic
+android.bluetooth.UidTraffic$1
+android.bluetooth.le.AdvertiseData
+android.bluetooth.le.AdvertisingSetParameters
+android.bluetooth.le.BluetoothLeAdvertiser
+android.bluetooth.le.BluetoothLeScanner
+android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper
+android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper$1
+android.bluetooth.le.BluetoothLeUtils
+android.bluetooth.le.IAdvertisingSetCallback
+android.bluetooth.le.IPeriodicAdvertisingCallback
+android.bluetooth.le.IScannerCallback
+android.bluetooth.le.IScannerCallback$Stub
+android.bluetooth.le.IScannerCallback$Stub$Proxy
+android.bluetooth.le.PeriodicAdvertisingParameters
+android.bluetooth.le.ScanCallback
+android.bluetooth.le.ScanFilter
+android.bluetooth.le.ScanFilter$1
+android.bluetooth.le.ScanFilter$Builder
+android.bluetooth.le.ScanRecord
+android.bluetooth.le.ScanResult
+android.bluetooth.le.ScanResult$1
+android.bluetooth.le.ScanSettings
+android.bluetooth.le.ScanSettings$1
+android.bluetooth.le.ScanSettings$Builder
+android.companion.AssociationRequest
+android.companion.CompanionDeviceManager
+android.companion.ICompanionDeviceManager
+android.companion.ICompanionDeviceManager$Stub
+android.companion.IFindDeviceCallback
+android.content.AbstractThreadedSyncAdapter
+android.content.AbstractThreadedSyncAdapter$ISyncAdapterImpl
+android.content.AbstractThreadedSyncAdapter$SyncThread
+android.content.ActivityNotFoundException
+android.content.AsyncQueryHandler
+android.content.AsyncQueryHandler$WorkerArgs
+android.content.AsyncQueryHandler$WorkerHandler
+android.content.AsyncTaskLoader
+android.content.AsyncTaskLoader$LoadTask
+android.content.BroadcastReceiver
+android.content.BroadcastReceiver$PendingResult
+android.content.BroadcastReceiver$PendingResult$1
+android.content.ClipData
+android.content.ClipData$1
+android.content.ClipData$Item
+android.content.ClipDescription
+android.content.ClipDescription$1
+android.content.ClipboardManager
+android.content.ClipboardManager$1
+android.content.ClipboardManager$2
+android.content.ClipboardManager$OnPrimaryClipChangedListener
+android.content.ComponentCallbacks
+android.content.ComponentCallbacks2
+android.content.ComponentName
+android.content.ComponentName$1
+android.content.ContentProvider
+android.content.ContentProvider$PipeDataWriter
+android.content.ContentProvider$Transport
+android.content.ContentProviderClient
+android.content.ContentProviderClient$CursorWrapperInner
+android.content.ContentProviderNative
+android.content.ContentProviderOperation
+android.content.ContentProviderOperation$1
+android.content.ContentProviderOperation$Builder
+android.content.ContentProviderProxy
+android.content.ContentProviderResult
+android.content.ContentProviderResult$1
+android.content.ContentQueryMap
+android.content.ContentResolver
+android.content.ContentResolver$1
+android.content.ContentResolver$CursorWrapperInner
+android.content.ContentResolver$ParcelFileDescriptorInner
+android.content.ContentUris
+android.content.ContentValues
+android.content.ContentValues$1
+android.content.Context
+android.content.ContextWrapper
+android.content.CursorLoader
+android.content.DialogInterface
+android.content.DialogInterface$OnCancelListener
+android.content.DialogInterface$OnClickListener
+android.content.DialogInterface$OnDismissListener
+android.content.DialogInterface$OnKeyListener
+android.content.DialogInterface$OnMultiChoiceClickListener
+android.content.DialogInterface$OnShowListener
+android.content.IClipboard
+android.content.IClipboard$Stub
+android.content.IClipboard$Stub$Proxy
+android.content.IContentProvider
+android.content.IContentService
+android.content.IContentService$Stub
+android.content.IContentService$Stub$Proxy
+android.content.IIntentReceiver
+android.content.IIntentReceiver$Stub
+android.content.IIntentReceiver$Stub$Proxy
+android.content.IIntentSender
+android.content.IIntentSender$Stub
+android.content.IIntentSender$Stub$Proxy
+android.content.IOnPrimaryClipChangedListener
+android.content.IOnPrimaryClipChangedListener$Stub
+android.content.IRestrictionsManager
+android.content.IRestrictionsManager$Stub
+android.content.IRestrictionsManager$Stub$Proxy
+android.content.ISyncAdapter
+android.content.ISyncAdapter$Stub
+android.content.ISyncAdapter$Stub$Proxy
+android.content.ISyncContext
+android.content.ISyncContext$Stub
+android.content.ISyncContext$Stub$Proxy
+android.content.ISyncStatusObserver
+android.content.ISyncStatusObserver$Stub
+android.content.ISyncStatusObserver$Stub$Proxy
+android.content.Intent
+android.content.Intent$1
+android.content.Intent$FilterComparison
+android.content.Intent$ShortcutIconResource
+android.content.Intent$ShortcutIconResource$1
+android.content.IntentFilter
+android.content.IntentFilter$1
+android.content.IntentFilter$AuthorityEntry
+android.content.IntentFilter$MalformedMimeTypeException
+android.content.IntentSender
+android.content.IntentSender$1
+android.content.IntentSender$SendIntentException
+android.content.Loader
+android.content.Loader$ForceLoadContentObserver
+android.content.Loader$OnLoadCanceledListener
+android.content.Loader$OnLoadCompleteListener
+android.content.OperationApplicationException
+android.content.PeriodicSync
+android.content.PeriodicSync$1
+android.content.ReceiverCallNotAllowedException
+android.content.RestrictionEntry
+android.content.RestrictionEntry$1
+android.content.RestrictionsManager
+android.content.SearchRecentSuggestionsProvider
+android.content.SearchRecentSuggestionsProvider$DatabaseHelper
+android.content.ServiceConnection
+android.content.SharedPreferences
+android.content.SharedPreferences$Editor
+android.content.SharedPreferences$OnSharedPreferenceChangeListener
+android.content.SyncAdapterType
+android.content.SyncAdapterType$1
+android.content.SyncAdaptersCache
+android.content.SyncAdaptersCache$MySerializer
+android.content.SyncContext
+android.content.SyncInfo
+android.content.SyncInfo$1
+android.content.SyncRequest
+android.content.SyncRequest$1
+android.content.SyncRequest$Builder
+android.content.SyncResult
+android.content.SyncResult$1
+android.content.SyncStats
+android.content.SyncStats$1
+android.content.SyncStatusInfo
+android.content.SyncStatusInfo$1
+android.content.SyncStatusObserver
+android.content.UndoManager
+android.content.UndoManager$UndoState
+android.content.UndoOperation
+android.content.UndoOwner
+android.content.UriMatcher
+android.content.om.IOverlayManager
+android.content.om.IOverlayManager$Stub
+android.content.om.OverlayInfo
+android.content.pm.ActivityInfo
+android.content.pm.ActivityInfo$1
+android.content.pm.ActivityInfo$WindowLayout
+android.content.pm.ApplicationInfo
+android.content.pm.ApplicationInfo$1
+android.content.pm.AuxiliaryResolveInfo
+android.content.pm.BaseParceledListSlice
+android.content.pm.BaseParceledListSlice$1
+android.content.pm.ChangedPackages
+android.content.pm.ComponentInfo
+android.content.pm.ConfigurationInfo
+android.content.pm.ConfigurationInfo$1
+android.content.pm.FallbackCategoryProvider
+android.content.pm.FeatureGroupInfo
+android.content.pm.FeatureGroupInfo$1
+android.content.pm.FeatureInfo
+android.content.pm.FeatureInfo$1
+android.content.pm.ILauncherApps
+android.content.pm.ILauncherApps$Stub
+android.content.pm.ILauncherApps$Stub$Proxy
+android.content.pm.IOnAppsChangedListener
+android.content.pm.IOnAppsChangedListener$Stub
+android.content.pm.IOnAppsChangedListener$Stub$Proxy
+android.content.pm.IOnPermissionsChangeListener
+android.content.pm.IOnPermissionsChangeListener$Stub
+android.content.pm.IOnPermissionsChangeListener$Stub$Proxy
+android.content.pm.IOtaDexopt
+android.content.pm.IOtaDexopt$Stub
+android.content.pm.IPackageDataObserver
+android.content.pm.IPackageDataObserver$Stub
+android.content.pm.IPackageDataObserver$Stub$Proxy
+android.content.pm.IPackageDeleteObserver
+android.content.pm.IPackageDeleteObserver2
+android.content.pm.IPackageInstallObserver
+android.content.pm.IPackageInstallObserver2
+android.content.pm.IPackageInstallObserver2$Stub
+android.content.pm.IPackageInstaller
+android.content.pm.IPackageInstaller$Stub
+android.content.pm.IPackageInstaller$Stub$Proxy
+android.content.pm.IPackageInstallerCallback
+android.content.pm.IPackageInstallerCallback$Stub
+android.content.pm.IPackageInstallerCallback$Stub$Proxy
+android.content.pm.IPackageInstallerSession
+android.content.pm.IPackageInstallerSession$Stub
+android.content.pm.IPackageInstallerSession$Stub$Proxy
+android.content.pm.IPackageManager
+android.content.pm.IPackageManager$Stub
+android.content.pm.IPackageManager$Stub$Proxy
+android.content.pm.IPackageMoveObserver
+android.content.pm.IPackageMoveObserver$Stub
+android.content.pm.IPackageMoveObserver$Stub$Proxy
+android.content.pm.IPackageStatsObserver
+android.content.pm.IPackageStatsObserver$Stub
+android.content.pm.IShortcutService
+android.content.pm.IShortcutService$Stub
+android.content.pm.IShortcutService$Stub$Proxy
+android.content.pm.InstantAppRequest
+android.content.pm.InstantAppResolveInfo$InstantAppDigest
+android.content.pm.InstantAppResolveInfo$InstantAppDigest$1
+android.content.pm.InstrumentationInfo
+android.content.pm.InstrumentationInfo$1
+android.content.pm.IntentFilterVerificationInfo
+android.content.pm.IntentFilterVerificationInfo$1
+android.content.pm.KeySet
+android.content.pm.LauncherActivityInfo
+android.content.pm.LauncherApps
+android.content.pm.LauncherApps$1
+android.content.pm.LauncherApps$Callback
+android.content.pm.LauncherApps$CallbackMessageHandler
+android.content.pm.LauncherApps$CallbackMessageHandler$CallbackInfo
+android.content.pm.LauncherApps$ShortcutQuery
+android.content.pm.PackageCleanItem
+android.content.pm.PackageInfo
+android.content.pm.PackageInfo$1
+android.content.pm.PackageInfoLite
+android.content.pm.PackageInfoLite$1
+android.content.pm.PackageInstaller
+android.content.pm.PackageInstaller$Session
+android.content.pm.PackageInstaller$SessionCallback
+android.content.pm.PackageInstaller$SessionCallbackDelegate
+android.content.pm.PackageInstaller$SessionInfo
+android.content.pm.PackageInstaller$SessionInfo$1
+android.content.pm.PackageInstaller$SessionParams
+android.content.pm.PackageInstaller$SessionParams$1
+android.content.pm.PackageItemInfo
+android.content.pm.PackageManager
+android.content.pm.PackageManager$MoveCallback
+android.content.pm.PackageManager$NameNotFoundException
+android.content.pm.PackageManager$OnPermissionsChangedListener
+android.content.pm.PackageManagerInternal
+android.content.pm.PackageManagerInternal$ExternalSourcesPolicy
+android.content.pm.PackageManagerInternal$PackagesProvider
+android.content.pm.PackageManagerInternal$SyncAdapterPackagesProvider
+android.content.pm.PackageParser
+android.content.pm.PackageParser$Activity
+android.content.pm.PackageParser$Activity$1
+android.content.pm.PackageParser$ActivityIntentInfo
+android.content.pm.PackageParser$ApkLite
+android.content.pm.PackageParser$Callback
+android.content.pm.PackageParser$CallbackImpl
+android.content.pm.PackageParser$Component
+android.content.pm.PackageParser$IntentInfo
+android.content.pm.PackageParser$NewPermissionInfo
+android.content.pm.PackageParser$Package
+android.content.pm.PackageParser$Package$1
+android.content.pm.PackageParser$PackageLite
+android.content.pm.PackageParser$PackageParserException
+android.content.pm.PackageParser$ParseComponentArgs
+android.content.pm.PackageParser$ParsePackageItemArgs
+android.content.pm.PackageParser$Permission
+android.content.pm.PackageParser$Permission$1
+android.content.pm.PackageParser$PermissionGroup
+android.content.pm.PackageParser$PermissionGroup$1
+android.content.pm.PackageParser$Provider
+android.content.pm.PackageParser$Provider$1
+android.content.pm.PackageParser$ProviderIntentInfo
+android.content.pm.PackageParser$Service
+android.content.pm.PackageParser$Service$1
+android.content.pm.PackageParser$ServiceIntentInfo
+android.content.pm.PackageParser$SplitNameComparator
+android.content.pm.PackageParser$SplitPermissionInfo
+android.content.pm.PackageStats
+android.content.pm.PackageUserState
+android.content.pm.ParceledListSlice
+android.content.pm.ParceledListSlice$1
+android.content.pm.PathPermission
+android.content.pm.PathPermission$1
+android.content.pm.PermissionGroupInfo
+android.content.pm.PermissionGroupInfo$1
+android.content.pm.PermissionInfo
+android.content.pm.PermissionInfo$1
+android.content.pm.ProviderInfo
+android.content.pm.ProviderInfo$1
+android.content.pm.RegisteredServicesCache
+android.content.pm.RegisteredServicesCache$1
+android.content.pm.RegisteredServicesCache$2
+android.content.pm.RegisteredServicesCache$3
+android.content.pm.RegisteredServicesCache$ServiceInfo
+android.content.pm.RegisteredServicesCache$UserServices
+android.content.pm.RegisteredServicesCacheListener
+android.content.pm.ResolveInfo
+android.content.pm.ResolveInfo$1
+android.content.pm.SELinuxUtil
+android.content.pm.ServiceInfo
+android.content.pm.ServiceInfo$1
+android.content.pm.SharedLibraryInfo
+android.content.pm.SharedLibraryInfo$1
+android.content.pm.ShortcutInfo
+android.content.pm.ShortcutInfo$1
+android.content.pm.ShortcutInfo$Builder
+android.content.pm.ShortcutManager
+android.content.pm.ShortcutServiceInternal
+android.content.pm.ShortcutServiceInternal$ShortcutChangeListener
+android.content.pm.Signature
+android.content.pm.Signature$1
+android.content.pm.StringParceledListSlice
+android.content.pm.StringParceledListSlice$1
+android.content.pm.UserInfo
+android.content.pm.UserInfo$1
+android.content.pm.VerifierDeviceIdentity
+android.content.pm.VerifierInfo
+android.content.pm.VersionedPackage
+android.content.pm.VersionedPackage$1
+android.content.pm.XmlSerializerAndParser
+android.content.pm.split.DefaultSplitAssetLoader
+android.content.pm.split.SplitAssetLoader
+android.content.pm.split.SplitDependencyLoader$IllegalDependencyException
+android.content.res.AssetFileDescriptor
+android.content.res.AssetFileDescriptor$1
+android.content.res.AssetFileDescriptor$AutoCloseInputStream
+android.content.res.AssetManager
+android.content.res.AssetManager$AssetInputStream
+android.content.res.ColorStateList
+android.content.res.ColorStateList$1
+android.content.res.ColorStateList$ColorStateListFactory
+android.content.res.CompatResources
+android.content.res.CompatibilityInfo
+android.content.res.CompatibilityInfo$1
+android.content.res.CompatibilityInfo$2
+android.content.res.ComplexColor
+android.content.res.Configuration
+android.content.res.Configuration$1
+android.content.res.ConfigurationBoundResourceCache
+android.content.res.ConstantState
+android.content.res.DrawableCache
+android.content.res.GradientColor
+android.content.res.ObbInfo
+android.content.res.ObbInfo$1
+android.content.res.ObbScanner
+android.content.res.ResourceId
+android.content.res.Resources
+android.content.res.Resources$NotFoundException
+android.content.res.Resources$Theme
+android.content.res.Resources$ThemeKey
+android.content.res.ResourcesImpl
+android.content.res.ResourcesImpl$ThemeImpl
+android.content.res.ResourcesKey
+android.content.res.StringBlock
+android.content.res.StringBlock$StyleIDs
+android.content.res.ThemedResourceCache
+android.content.res.TypedArray
+android.content.res.XmlBlock
+android.content.res.XmlBlock$Parser
+android.content.res.XmlResourceParser
+android.database.AbstractCursor
+android.database.AbstractCursor$SelfContentObserver
+android.database.AbstractWindowedCursor
+android.database.BulkCursorDescriptor
+android.database.BulkCursorDescriptor$1
+android.database.BulkCursorNative
+android.database.BulkCursorProxy
+android.database.BulkCursorToCursorAdaptor
+android.database.CharArrayBuffer
+android.database.ContentObservable
+android.database.ContentObserver
+android.database.ContentObserver$NotificationRunnable
+android.database.ContentObserver$Transport
+android.database.CrossProcessCursor
+android.database.CrossProcessCursorWrapper
+android.database.Cursor
+android.database.CursorIndexOutOfBoundsException
+android.database.CursorToBulkCursorAdaptor
+android.database.CursorToBulkCursorAdaptor$ContentObserverProxy
+android.database.CursorWindow
+android.database.CursorWindow$1
+android.database.CursorWrapper
+android.database.DataSetObservable
+android.database.DataSetObserver
+android.database.DatabaseErrorHandler
+android.database.DatabaseUtils
+android.database.DatabaseUtils$InsertHelper
+android.database.DefaultDatabaseErrorHandler
+android.database.IBulkCursor
+android.database.IContentObserver
+android.database.IContentObserver$Stub
+android.database.IContentObserver$Stub$Proxy
+android.database.MatrixCursor
+android.database.MatrixCursor$RowBuilder
+android.database.MergeCursor
+android.database.MergeCursor$1
+android.database.Observable
+android.database.SQLException
+android.database.StaleDataException
+android.database.sqlite.-$Lambda$gPaS7kMbZ8xtrrEx06GlwJ2iDWE
+android.database.sqlite.DatabaseObjectNotClosedException
+android.database.sqlite.SQLiteAbortException
+android.database.sqlite.SQLiteCantOpenDatabaseException
+android.database.sqlite.SQLiteClosable
+android.database.sqlite.SQLiteConnection
+android.database.sqlite.SQLiteConnection$Operation
+android.database.sqlite.SQLiteConnection$OperationLog
+android.database.sqlite.SQLiteConnection$PreparedStatement
+android.database.sqlite.SQLiteConnection$PreparedStatementCache
+android.database.sqlite.SQLiteConnectionPool
+android.database.sqlite.SQLiteConnectionPool$AcquiredConnectionStatus
+android.database.sqlite.SQLiteConnectionPool$ConnectionWaiter
+android.database.sqlite.SQLiteConnectionPool$IdleConnectionHandler
+android.database.sqlite.SQLiteConstraintException
+android.database.sqlite.SQLiteCursor
+android.database.sqlite.SQLiteCursorDriver
+android.database.sqlite.SQLiteCustomFunction
+android.database.sqlite.SQLiteDatabase
+android.database.sqlite.SQLiteDatabase$1
+android.database.sqlite.SQLiteDatabase$2
+android.database.sqlite.SQLiteDatabase$CursorFactory
+android.database.sqlite.SQLiteDatabase$CustomFunction
+android.database.sqlite.SQLiteDatabase$OpenParams
+android.database.sqlite.SQLiteDatabase$OpenParams$Builder
+android.database.sqlite.SQLiteDatabaseConfiguration
+android.database.sqlite.SQLiteDatabaseCorruptException
+android.database.sqlite.SQLiteDatabaseLockedException
+android.database.sqlite.SQLiteDebug
+android.database.sqlite.SQLiteDebug$PagerStats
+android.database.sqlite.SQLiteDirectCursorDriver
+android.database.sqlite.SQLiteDiskIOException
+android.database.sqlite.SQLiteDoneException
+android.database.sqlite.SQLiteException
+android.database.sqlite.SQLiteFullException
+android.database.sqlite.SQLiteGlobal
+android.database.sqlite.SQLiteOpenHelper
+android.database.sqlite.SQLiteProgram
+android.database.sqlite.SQLiteQuery
+android.database.sqlite.SQLiteQueryBuilder
+android.database.sqlite.SQLiteReadOnlyDatabaseException
+android.database.sqlite.SQLiteSession
+android.database.sqlite.SQLiteSession$Transaction
+android.database.sqlite.SQLiteStatement
+android.database.sqlite.SQLiteStatementInfo
+android.database.sqlite.SQLiteTransactionListener
+android.database.sqlite.SqliteWrapper
+android.ddm.DdmHandleAppName
+android.ddm.DdmHandleExit
+android.ddm.DdmHandleHeap
+android.ddm.DdmHandleHello
+android.ddm.DdmHandleNativeHeap
+android.ddm.DdmHandleProfiling
+android.ddm.DdmHandleThread
+android.ddm.DdmHandleViewDebug
+android.ddm.DdmRegister
+android.drm.DrmManagerClient$OnErrorListener
+android.drm.DrmManagerClient$OnEventListener
+android.drm.DrmManagerClient$OnInfoListener
+android.drm.DrmOutputStream
+android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8
+android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$1
+android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$2
+android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$4
+android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$6
+android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$7
+android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$8
+android.graphics.BaseCanvas
+android.graphics.Bitmap
+android.graphics.Bitmap$1
+android.graphics.Bitmap$CompressFormat
+android.graphics.Bitmap$Config
+android.graphics.BitmapFactory
+android.graphics.BitmapFactory$Options
+android.graphics.BitmapRegionDecoder
+android.graphics.BitmapShader
+android.graphics.BlurMaskFilter
+android.graphics.BlurMaskFilter$Blur
+android.graphics.Camera
+android.graphics.Canvas
+android.graphics.Canvas$EdgeType
+android.graphics.Canvas$NoImagePreloadHolder
+android.graphics.CanvasProperty
+android.graphics.Color
+android.graphics.ColorFilter
+android.graphics.ColorFilter$NoImagePreloadHolder
+android.graphics.ColorMatrix
+android.graphics.ColorMatrixColorFilter
+android.graphics.ColorSpace
+android.graphics.ColorSpace$Adaptation
+android.graphics.ColorSpace$Lab
+android.graphics.ColorSpace$Model
+android.graphics.ColorSpace$Named
+android.graphics.ColorSpace$Rgb
+android.graphics.ColorSpace$Rgb$TransferParameters
+android.graphics.ColorSpace$Xyz
+android.graphics.ComposePathEffect
+android.graphics.ComposeShader
+android.graphics.CornerPathEffect
+android.graphics.DashPathEffect
+android.graphics.DiscretePathEffect
+android.graphics.DrawFilter
+android.graphics.EmbossMaskFilter
+android.graphics.FontFamily
+android.graphics.FontListParser
+android.graphics.GraphicBuffer
+android.graphics.GraphicBuffer$1
+android.graphics.ImageFormat
+android.graphics.Insets
+android.graphics.Interpolator
+android.graphics.Interpolator$Result
+android.graphics.LeakyTypefaceStorage
+android.graphics.LightingColorFilter
+android.graphics.LinearGradient
+android.graphics.MaskFilter
+android.graphics.Matrix
+android.graphics.Matrix$1
+android.graphics.Matrix$NoImagePreloadHolder
+android.graphics.Matrix$ScaleToFit
+android.graphics.Movie
+android.graphics.NinePatch
+android.graphics.NinePatch$InsetStruct
+android.graphics.Outline
+android.graphics.Paint
+android.graphics.Paint$Align
+android.graphics.Paint$Cap
+android.graphics.Paint$FontMetrics
+android.graphics.Paint$FontMetricsInt
+android.graphics.Paint$Join
+android.graphics.Paint$NoImagePreloadHolder
+android.graphics.Paint$Style
+android.graphics.PaintFlagsDrawFilter
+android.graphics.Path
+android.graphics.Path$Direction
+android.graphics.Path$FillType
+android.graphics.Path$Op
+android.graphics.PathDashPathEffect
+android.graphics.PathEffect
+android.graphics.PathMeasure
+android.graphics.Picture
+android.graphics.Picture$RecordingCanvas
+android.graphics.PixelFormat
+android.graphics.Point
+android.graphics.Point$1
+android.graphics.PointF
+android.graphics.PointF$1
+android.graphics.PorterDuff
+android.graphics.PorterDuff$Mode
+android.graphics.PorterDuffColorFilter
+android.graphics.PorterDuffXfermode
+android.graphics.RadialGradient
+android.graphics.Rect
+android.graphics.Rect$1
+android.graphics.Rect$UnflattenHelper
+android.graphics.RectF
+android.graphics.RectF$1
+android.graphics.Region
+android.graphics.Region$1
+android.graphics.Region$Op
+android.graphics.RegionIterator
+android.graphics.Shader
+android.graphics.Shader$NoImagePreloadHolder
+android.graphics.Shader$TileMode
+android.graphics.SumPathEffect
+android.graphics.SurfaceTexture
+android.graphics.SurfaceTexture$1
+android.graphics.SurfaceTexture$OnFrameAvailableListener
+android.graphics.SweepGradient
+android.graphics.TableMaskFilter
+android.graphics.TemporaryBuffer
+android.graphics.Typeface
+android.graphics.Typeface$Builder
+android.graphics.Xfermode
+android.graphics.YuvImage
+android.graphics.drawable.AdaptiveIconDrawable
+android.graphics.drawable.AdaptiveIconDrawable$ChildDrawable
+android.graphics.drawable.AdaptiveIconDrawable$LayerState
+android.graphics.drawable.Animatable
+android.graphics.drawable.Animatable2
+android.graphics.drawable.Animatable2$AnimationCallback
+android.graphics.drawable.AnimatedStateListDrawable
+android.graphics.drawable.AnimatedStateListDrawable$AnimatedStateListState
+android.graphics.drawable.AnimatedStateListDrawable$AnimatedVectorDrawableTransition
+android.graphics.drawable.AnimatedStateListDrawable$AnimationDrawableTransition
+android.graphics.drawable.AnimatedStateListDrawable$FrameInterpolator
+android.graphics.drawable.AnimatedStateListDrawable$Transition
+android.graphics.drawable.AnimatedVectorDrawable
+android.graphics.drawable.AnimatedVectorDrawable$1
+android.graphics.drawable.AnimatedVectorDrawable$2
+android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState
+android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator
+android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimator
+android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimatorRT
+android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimatorUI
+android.graphics.drawable.AnimationDrawable
+android.graphics.drawable.AnimationDrawable$AnimationState
+android.graphics.drawable.BitmapDrawable
+android.graphics.drawable.BitmapDrawable$BitmapState
+android.graphics.drawable.ClipDrawable
+android.graphics.drawable.ClipDrawable$ClipState
+android.graphics.drawable.ColorDrawable
+android.graphics.drawable.ColorDrawable$ColorState
+android.graphics.drawable.Drawable
+android.graphics.drawable.Drawable$Callback
+android.graphics.drawable.Drawable$ConstantState
+android.graphics.drawable.DrawableContainer
+android.graphics.drawable.DrawableContainer$1
+android.graphics.drawable.DrawableContainer$BlockInvalidateCallback
+android.graphics.drawable.DrawableContainer$DrawableContainerState
+android.graphics.drawable.DrawableInflater
+android.graphics.drawable.DrawableWrapper
+android.graphics.drawable.DrawableWrapper$DrawableWrapperState
+android.graphics.drawable.GradientDrawable
+android.graphics.drawable.GradientDrawable$GradientState
+android.graphics.drawable.GradientDrawable$Orientation
+android.graphics.drawable.Icon
+android.graphics.drawable.Icon$1
+android.graphics.drawable.InsetDrawable
+android.graphics.drawable.InsetDrawable$InsetState
+android.graphics.drawable.InsetDrawable$InsetValue
+android.graphics.drawable.LayerDrawable
+android.graphics.drawable.LayerDrawable$ChildDrawable
+android.graphics.drawable.LayerDrawable$LayerState
+android.graphics.drawable.NinePatchDrawable
+android.graphics.drawable.NinePatchDrawable$NinePatchState
+android.graphics.drawable.PaintDrawable
+android.graphics.drawable.PictureDrawable
+android.graphics.drawable.RippleBackground
+android.graphics.drawable.RippleBackground$1
+android.graphics.drawable.RippleBackground$BackgroundProperty
+android.graphics.drawable.RippleComponent
+android.graphics.drawable.RippleComponent$RenderNodeAnimatorSet
+android.graphics.drawable.RippleDrawable
+android.graphics.drawable.RippleDrawable$RippleState
+android.graphics.drawable.RippleForeground
+android.graphics.drawable.RippleForeground$1
+android.graphics.drawable.RippleForeground$2
+android.graphics.drawable.RippleForeground$3
+android.graphics.drawable.RippleForeground$4
+android.graphics.drawable.RippleForeground$LogDecelerateInterpolator
+android.graphics.drawable.RotateDrawable
+android.graphics.drawable.RotateDrawable$RotateState
+android.graphics.drawable.ScaleDrawable
+android.graphics.drawable.ScaleDrawable$ScaleState
+android.graphics.drawable.ShapeDrawable
+android.graphics.drawable.ShapeDrawable$ShaderFactory
+android.graphics.drawable.ShapeDrawable$ShapeState
+android.graphics.drawable.StateListDrawable
+android.graphics.drawable.StateListDrawable$StateListState
+android.graphics.drawable.TransitionDrawable
+android.graphics.drawable.TransitionDrawable$TransitionState
+android.graphics.drawable.VectorDrawable
+android.graphics.drawable.VectorDrawable$VClipPath
+android.graphics.drawable.VectorDrawable$VFullPath
+android.graphics.drawable.VectorDrawable$VFullPath$1
+android.graphics.drawable.VectorDrawable$VFullPath$10
+android.graphics.drawable.VectorDrawable$VFullPath$2
+android.graphics.drawable.VectorDrawable$VFullPath$3
+android.graphics.drawable.VectorDrawable$VFullPath$4
+android.graphics.drawable.VectorDrawable$VFullPath$5
+android.graphics.drawable.VectorDrawable$VFullPath$6
+android.graphics.drawable.VectorDrawable$VFullPath$7
+android.graphics.drawable.VectorDrawable$VFullPath$8
+android.graphics.drawable.VectorDrawable$VFullPath$9
+android.graphics.drawable.VectorDrawable$VGroup
+android.graphics.drawable.VectorDrawable$VGroup$1
+android.graphics.drawable.VectorDrawable$VGroup$2
+android.graphics.drawable.VectorDrawable$VGroup$3
+android.graphics.drawable.VectorDrawable$VGroup$4
+android.graphics.drawable.VectorDrawable$VGroup$5
+android.graphics.drawable.VectorDrawable$VGroup$6
+android.graphics.drawable.VectorDrawable$VGroup$7
+android.graphics.drawable.VectorDrawable$VGroup$8
+android.graphics.drawable.VectorDrawable$VGroup$9
+android.graphics.drawable.VectorDrawable$VObject
+android.graphics.drawable.VectorDrawable$VPath
+android.graphics.drawable.VectorDrawable$VPath$1
+android.graphics.drawable.VectorDrawable$VectorDrawableState
+android.graphics.drawable.VectorDrawable$VectorDrawableState$1
+android.graphics.drawable.shapes.OvalShape
+android.graphics.drawable.shapes.RectShape
+android.graphics.drawable.shapes.RoundRectShape
+android.graphics.drawable.shapes.Shape
+android.graphics.fonts.FontVariationAxis
+android.graphics.pdf.PdfDocument
+android.graphics.pdf.PdfEditor
+android.graphics.pdf.PdfRenderer
+android.hardware.Camera
+android.hardware.Camera$CameraInfo
+android.hardware.Camera$ErrorCallback
+android.hardware.Camera$Face
+android.hardware.CameraStatus
+android.hardware.CameraStatus$1
+android.hardware.ConsumerIrManager
+android.hardware.GeomagneticField
+android.hardware.GeomagneticField$LegendreTable
+android.hardware.HardwareBuffer
+android.hardware.HardwareBuffer$1
+android.hardware.ICameraService
+android.hardware.ICameraService$Stub
+android.hardware.ICameraService$Stub$Proxy
+android.hardware.ICameraServiceListener
+android.hardware.ICameraServiceListener$Stub
+android.hardware.ICameraServiceProxy
+android.hardware.ICameraServiceProxy$Stub
+android.hardware.IConsumerIrService
+android.hardware.IConsumerIrService$Stub
+android.hardware.ISerialManager
+android.hardware.ISerialManager$Stub
+android.hardware.Sensor
+android.hardware.SensorAdditionalInfo
+android.hardware.SensorEvent
+android.hardware.SensorEventListener
+android.hardware.SensorManager
+android.hardware.SerialManager
+android.hardware.SerialPort
+android.hardware.SystemSensorManager
+android.hardware.SystemSensorManager$BaseEventQueue
+android.hardware.SystemSensorManager$SensorEventQueue
+android.hardware.SystemSensorManager$TriggerEventQueue
+android.hardware.TriggerEvent
+android.hardware.TriggerEventListener
+android.hardware.camera2.CameraAccessException
+android.hardware.camera2.CameraCaptureSession
+android.hardware.camera2.CameraCaptureSession$CaptureCallback
+android.hardware.camera2.CameraCaptureSession$StateCallback
+android.hardware.camera2.CameraCharacteristics
+android.hardware.camera2.CameraCharacteristics$1
+android.hardware.camera2.CameraCharacteristics$2
+android.hardware.camera2.CameraCharacteristics$3
+android.hardware.camera2.CameraCharacteristics$4
+android.hardware.camera2.CameraCharacteristics$5
+android.hardware.camera2.CameraCharacteristics$Key
+android.hardware.camera2.CameraDevice
+android.hardware.camera2.CameraDevice$StateCallback
+android.hardware.camera2.CameraManager
+android.hardware.camera2.CameraManager$AvailabilityCallback
+android.hardware.camera2.CameraManager$CameraManagerGlobal
+android.hardware.camera2.CameraManager$CameraManagerGlobal$1
+android.hardware.camera2.CameraManager$CameraManagerGlobal$2
+android.hardware.camera2.CameraManager$CameraManagerGlobal$3
+android.hardware.camera2.CameraManager$CameraManagerGlobal$4
+android.hardware.camera2.CameraManager$TorchCallback
+android.hardware.camera2.CameraMetadata
+android.hardware.camera2.CaptureFailure
+android.hardware.camera2.CaptureRequest
+android.hardware.camera2.CaptureRequest$1
+android.hardware.camera2.CaptureRequest$2
+android.hardware.camera2.CaptureRequest$Builder
+android.hardware.camera2.CaptureRequest$Key
+android.hardware.camera2.CaptureResult
+android.hardware.camera2.CaptureResult$1
+android.hardware.camera2.CaptureResult$2
+android.hardware.camera2.CaptureResult$3
+android.hardware.camera2.CaptureResult$Key
+android.hardware.camera2.DngCreator
+android.hardware.camera2.ICameraDeviceCallbacks
+android.hardware.camera2.ICameraDeviceCallbacks$Stub
+android.hardware.camera2.ICameraDeviceUser
+android.hardware.camera2.ICameraDeviceUser$Stub
+android.hardware.camera2.ICameraDeviceUser$Stub$Proxy
+android.hardware.camera2.TotalCaptureResult
+android.hardware.camera2.dispatch.ArgumentReplacingDispatcher
+android.hardware.camera2.dispatch.BroadcastDispatcher
+android.hardware.camera2.dispatch.Dispatchable
+android.hardware.camera2.dispatch.DuckTypingDispatcher
+android.hardware.camera2.dispatch.HandlerDispatcher
+android.hardware.camera2.dispatch.HandlerDispatcher$1
+android.hardware.camera2.dispatch.InvokeDispatcher
+android.hardware.camera2.dispatch.MethodNameInvoker
+android.hardware.camera2.impl.CallbackProxies$DeviceCaptureCallbackProxy
+android.hardware.camera2.impl.CallbackProxies$SessionStateCallbackProxy
+android.hardware.camera2.impl.CameraCaptureSessionCore
+android.hardware.camera2.impl.CameraCaptureSessionImpl
+android.hardware.camera2.impl.CameraCaptureSessionImpl$1
+android.hardware.camera2.impl.CameraCaptureSessionImpl$2
+android.hardware.camera2.impl.CameraCaptureSessionImpl$AbortDrainListener
+android.hardware.camera2.impl.CameraCaptureSessionImpl$IdleDrainListener
+android.hardware.camera2.impl.CameraCaptureSessionImpl$SequenceDrainListener
+android.hardware.camera2.impl.CameraDeviceImpl
+android.hardware.camera2.impl.CameraDeviceImpl$1
+android.hardware.camera2.impl.CameraDeviceImpl$10
+android.hardware.camera2.impl.CameraDeviceImpl$2
+android.hardware.camera2.impl.CameraDeviceImpl$3
+android.hardware.camera2.impl.CameraDeviceImpl$4
+android.hardware.camera2.impl.CameraDeviceImpl$5
+android.hardware.camera2.impl.CameraDeviceImpl$6
+android.hardware.camera2.impl.CameraDeviceImpl$7
+android.hardware.camera2.impl.CameraDeviceImpl$9
+android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks
+android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks$2
+android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks$3
+android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks$4
+android.hardware.camera2.impl.CameraDeviceImpl$CaptureCallback
+android.hardware.camera2.impl.CameraDeviceImpl$CaptureCallbackHolder
+android.hardware.camera2.impl.CameraDeviceImpl$FrameNumberTracker
+android.hardware.camera2.impl.CameraDeviceImpl$RequestLastFrameNumbersHolder
+android.hardware.camera2.impl.CameraDeviceImpl$StateCallbackKK
+android.hardware.camera2.impl.CameraMetadataNative
+android.hardware.camera2.impl.CameraMetadataNative$1
+android.hardware.camera2.impl.CameraMetadataNative$10
+android.hardware.camera2.impl.CameraMetadataNative$11
+android.hardware.camera2.impl.CameraMetadataNative$12
+android.hardware.camera2.impl.CameraMetadataNative$13
+android.hardware.camera2.impl.CameraMetadataNative$14
+android.hardware.camera2.impl.CameraMetadataNative$15
+android.hardware.camera2.impl.CameraMetadataNative$16
+android.hardware.camera2.impl.CameraMetadataNative$17
+android.hardware.camera2.impl.CameraMetadataNative$18
+android.hardware.camera2.impl.CameraMetadataNative$19
+android.hardware.camera2.impl.CameraMetadataNative$2
+android.hardware.camera2.impl.CameraMetadataNative$3
+android.hardware.camera2.impl.CameraMetadataNative$4
+android.hardware.camera2.impl.CameraMetadataNative$5
+android.hardware.camera2.impl.CameraMetadataNative$6
+android.hardware.camera2.impl.CameraMetadataNative$7
+android.hardware.camera2.impl.CameraMetadataNative$8
+android.hardware.camera2.impl.CameraMetadataNative$9
+android.hardware.camera2.impl.CameraMetadataNative$Key
+android.hardware.camera2.impl.CaptureResultExtras
+android.hardware.camera2.impl.CaptureResultExtras$1
+android.hardware.camera2.impl.GetCommand
+android.hardware.camera2.impl.ICameraDeviceUserWrapper
+android.hardware.camera2.impl.SetCommand
+android.hardware.camera2.legacy.LegacyCameraDevice
+android.hardware.camera2.legacy.LegacyExceptionUtils
+android.hardware.camera2.legacy.LegacyExceptionUtils$BufferQueueAbandonedException
+android.hardware.camera2.legacy.PerfMeasurement
+android.hardware.camera2.marshal.MarshalHelpers
+android.hardware.camera2.marshal.MarshalQueryable
+android.hardware.camera2.marshal.MarshalRegistry
+android.hardware.camera2.marshal.MarshalRegistry$MarshalToken
+android.hardware.camera2.marshal.Marshaler
+android.hardware.camera2.marshal.impl.MarshalQueryableArray
+android.hardware.camera2.marshal.impl.MarshalQueryableArray$MarshalerArray
+android.hardware.camera2.marshal.impl.MarshalQueryableBlackLevelPattern
+android.hardware.camera2.marshal.impl.MarshalQueryableBlackLevelPattern$MarshalerBlackLevelPattern
+android.hardware.camera2.marshal.impl.MarshalQueryableBoolean
+android.hardware.camera2.marshal.impl.MarshalQueryableBoolean$MarshalerBoolean
+android.hardware.camera2.marshal.impl.MarshalQueryableColorSpaceTransform
+android.hardware.camera2.marshal.impl.MarshalQueryableColorSpaceTransform$MarshalerColorSpaceTransform
+android.hardware.camera2.marshal.impl.MarshalQueryableEnum
+android.hardware.camera2.marshal.impl.MarshalQueryableHighSpeedVideoConfiguration
+android.hardware.camera2.marshal.impl.MarshalQueryableHighSpeedVideoConfiguration$MarshalerHighSpeedVideoConfiguration
+android.hardware.camera2.marshal.impl.MarshalQueryableMeteringRectangle
+android.hardware.camera2.marshal.impl.MarshalQueryableMeteringRectangle$MarshalerMeteringRectangle
+android.hardware.camera2.marshal.impl.MarshalQueryableNativeByteToInteger
+android.hardware.camera2.marshal.impl.MarshalQueryableNativeByteToInteger$MarshalerNativeByteToInteger
+android.hardware.camera2.marshal.impl.MarshalQueryablePair
+android.hardware.camera2.marshal.impl.MarshalQueryablePair$MarshalerPair
+android.hardware.camera2.marshal.impl.MarshalQueryableParcelable
+android.hardware.camera2.marshal.impl.MarshalQueryablePrimitive
+android.hardware.camera2.marshal.impl.MarshalQueryablePrimitive$MarshalerPrimitive
+android.hardware.camera2.marshal.impl.MarshalQueryableRange
+android.hardware.camera2.marshal.impl.MarshalQueryableRange$MarshalerRange
+android.hardware.camera2.marshal.impl.MarshalQueryableRect
+android.hardware.camera2.marshal.impl.MarshalQueryableRect$MarshalerRect
+android.hardware.camera2.marshal.impl.MarshalQueryableReprocessFormatsMap
+android.hardware.camera2.marshal.impl.MarshalQueryableReprocessFormatsMap$MarshalerReprocessFormatsMap
+android.hardware.camera2.marshal.impl.MarshalQueryableRggbChannelVector
+android.hardware.camera2.marshal.impl.MarshalQueryableRggbChannelVector$MarshalerRggbChannelVector
+android.hardware.camera2.marshal.impl.MarshalQueryableSize
+android.hardware.camera2.marshal.impl.MarshalQueryableSize$MarshalerSize
+android.hardware.camera2.marshal.impl.MarshalQueryableSizeF
+android.hardware.camera2.marshal.impl.MarshalQueryableStreamConfiguration
+android.hardware.camera2.marshal.impl.MarshalQueryableStreamConfiguration$MarshalerStreamConfiguration
+android.hardware.camera2.marshal.impl.MarshalQueryableStreamConfigurationDuration
+android.hardware.camera2.marshal.impl.MarshalQueryableStreamConfigurationDuration$MarshalerStreamConfigurationDuration
+android.hardware.camera2.marshal.impl.MarshalQueryableString
+android.hardware.camera2.params.BlackLevelPattern
+android.hardware.camera2.params.ColorSpaceTransform
+android.hardware.camera2.params.Face
+android.hardware.camera2.params.HighSpeedVideoConfiguration
+android.hardware.camera2.params.InputConfiguration
+android.hardware.camera2.params.LensShadingMap
+android.hardware.camera2.params.MeteringRectangle
+android.hardware.camera2.params.OutputConfiguration
+android.hardware.camera2.params.OutputConfiguration$1
+android.hardware.camera2.params.ReprocessFormatsMap
+android.hardware.camera2.params.RggbChannelVector
+android.hardware.camera2.params.StreamConfiguration
+android.hardware.camera2.params.StreamConfigurationDuration
+android.hardware.camera2.params.StreamConfigurationMap
+android.hardware.camera2.params.TonemapCurve
+android.hardware.camera2.utils.HashCodeHelpers
+android.hardware.camera2.utils.SubmitInfo
+android.hardware.camera2.utils.SubmitInfo$1
+android.hardware.camera2.utils.SurfaceUtils
+android.hardware.camera2.utils.TaskDrainer
+android.hardware.camera2.utils.TaskDrainer$1
+android.hardware.camera2.utils.TaskDrainer$DrainListener
+android.hardware.camera2.utils.TaskSingleDrainer
+android.hardware.camera2.utils.TypeReference
+android.hardware.camera2.utils.TypeReference$SpecializedBaseTypeReference
+android.hardware.camera2.utils.TypeReference$SpecializedTypeReference
+android.hardware.display.DisplayManager
+android.hardware.display.DisplayManager$DisplayListener
+android.hardware.display.DisplayManagerGlobal
+android.hardware.display.DisplayManagerGlobal$DisplayListenerDelegate
+android.hardware.display.DisplayManagerGlobal$DisplayManagerCallback
+android.hardware.display.DisplayManagerInternal
+android.hardware.display.DisplayManagerInternal$DisplayPowerCallbacks
+android.hardware.display.DisplayManagerInternal$DisplayPowerRequest
+android.hardware.display.DisplayManagerInternal$DisplayTransactionListener
+android.hardware.display.DisplayViewport
+android.hardware.display.IDisplayManager
+android.hardware.display.IDisplayManager$Stub
+android.hardware.display.IDisplayManager$Stub$Proxy
+android.hardware.display.IDisplayManagerCallback
+android.hardware.display.IDisplayManagerCallback$Stub
+android.hardware.display.IDisplayManagerCallback$Stub$Proxy
+android.hardware.display.IVirtualDisplayCallback
+android.hardware.display.WifiDisplay
+android.hardware.display.WifiDisplay$1
+android.hardware.display.WifiDisplaySessionInfo
+android.hardware.display.WifiDisplaySessionInfo$1
+android.hardware.display.WifiDisplayStatus
+android.hardware.display.WifiDisplayStatus$1
+android.hardware.fingerprint.Fingerprint
+android.hardware.fingerprint.Fingerprint$1
+android.hardware.fingerprint.FingerprintManager
+android.hardware.fingerprint.FingerprintManager$1
+android.hardware.fingerprint.FingerprintManager$2
+android.hardware.fingerprint.FingerprintManager$AuthenticationCallback
+android.hardware.fingerprint.FingerprintManager$AuthenticationResult
+android.hardware.fingerprint.FingerprintManager$LockoutResetCallback
+android.hardware.fingerprint.FingerprintManager$MyHandler
+android.hardware.fingerprint.IFingerprintClientActiveCallback
+android.hardware.fingerprint.IFingerprintService
+android.hardware.fingerprint.IFingerprintService$Stub
+android.hardware.fingerprint.IFingerprintService$Stub$Proxy
+android.hardware.fingerprint.IFingerprintServiceLockoutResetCallback
+android.hardware.fingerprint.IFingerprintServiceLockoutResetCallback$Stub
+android.hardware.fingerprint.IFingerprintServiceLockoutResetCallback$Stub$Proxy
+android.hardware.fingerprint.IFingerprintServiceReceiver
+android.hardware.fingerprint.IFingerprintServiceReceiver$Stub
+android.hardware.hdmi.HdmiControlManager
+android.hardware.hdmi.HdmiPlaybackClient$DisplayStatusCallback
+android.hardware.input.IInputDevicesChangedListener
+android.hardware.input.IInputDevicesChangedListener$Stub
+android.hardware.input.IInputDevicesChangedListener$Stub$Proxy
+android.hardware.input.IInputManager
+android.hardware.input.IInputManager$Stub
+android.hardware.input.IInputManager$Stub$Proxy
+android.hardware.input.ITabletModeChangedListener
+android.hardware.input.InputDeviceIdentifier
+android.hardware.input.InputDeviceIdentifier$1
+android.hardware.input.InputManager
+android.hardware.input.InputManager$InputDeviceListener
+android.hardware.input.InputManager$InputDeviceListenerDelegate
+android.hardware.input.InputManager$InputDevicesChangedListener
+android.hardware.input.InputManager$OnTabletModeChangedListener
+android.hardware.input.InputManagerInternal
+android.hardware.input.KeyboardLayout
+android.hardware.input.KeyboardLayout$1
+android.hardware.input.TouchCalibration
+android.hardware.input.TouchCalibration$1
+android.hardware.location.ActivityRecognitionHardware
+android.hardware.location.ContextHubInfo
+android.hardware.location.ContextHubInfo$1
+android.hardware.location.ContextHubManager
+android.hardware.location.ContextHubManager$1
+android.hardware.location.ContextHubManager$Callback
+android.hardware.location.ContextHubManager$ICallback
+android.hardware.location.ContextHubMessage
+android.hardware.location.ContextHubMessage$1
+android.hardware.location.GeofenceHardware
+android.hardware.location.GeofenceHardware$GeofenceHardwareMonitorCallbackWrapper
+android.hardware.location.GeofenceHardwareCallback
+android.hardware.location.GeofenceHardwareImpl
+android.hardware.location.GeofenceHardwareImpl$1
+android.hardware.location.GeofenceHardwareImpl$2
+android.hardware.location.GeofenceHardwareImpl$3
+android.hardware.location.GeofenceHardwareImpl$Reaper
+android.hardware.location.GeofenceHardwareMonitorCallback
+android.hardware.location.GeofenceHardwareService
+android.hardware.location.GeofenceHardwareService$1
+android.hardware.location.IActivityRecognitionHardware
+android.hardware.location.IActivityRecognitionHardware$Stub
+android.hardware.location.IActivityRecognitionHardwareClient
+android.hardware.location.IActivityRecognitionHardwareClient$Stub
+android.hardware.location.IActivityRecognitionHardwareClient$Stub$Proxy
+android.hardware.location.IActivityRecognitionHardwareWatcher
+android.hardware.location.IContextHubCallback
+android.hardware.location.IContextHubCallback$Stub
+android.hardware.location.IContextHubCallback$Stub$Proxy
+android.hardware.location.IContextHubService
+android.hardware.location.IContextHubService$Stub
+android.hardware.location.IContextHubService$Stub$Proxy
+android.hardware.location.IFusedLocationHardware
+android.hardware.location.IGeofenceHardware
+android.hardware.location.IGeofenceHardware$Stub
+android.hardware.location.IGeofenceHardware$Stub$Proxy
+android.hardware.location.IGeofenceHardwareMonitorCallback
+android.hardware.location.IGeofenceHardwareMonitorCallback$Stub
+android.hardware.location.IGeofenceHardwareMonitorCallback$Stub$Proxy
+android.hardware.location.MemoryRegion
+android.hardware.location.MemoryRegion$1
+android.hardware.location.NanoApp
+android.hardware.location.NanoAppFilter
+android.hardware.location.NanoAppFilter$1
+android.hardware.location.NanoAppInstanceInfo
+android.hardware.location.NanoAppInstanceInfo$1
+android.hardware.radio.RadioManager
+android.hardware.radio.RadioManager$AmBandConfig
+android.hardware.radio.RadioManager$AmBandConfig$1
+android.hardware.radio.RadioManager$AmBandDescriptor
+android.hardware.radio.RadioManager$AmBandDescriptor$1
+android.hardware.radio.RadioManager$BandConfig
+android.hardware.radio.RadioManager$BandConfig$1
+android.hardware.radio.RadioManager$BandDescriptor
+android.hardware.radio.RadioManager$BandDescriptor$1
+android.hardware.radio.RadioManager$FmBandConfig
+android.hardware.radio.RadioManager$FmBandConfig$1
+android.hardware.radio.RadioManager$FmBandDescriptor
+android.hardware.radio.RadioManager$FmBandDescriptor$1
+android.hardware.radio.RadioManager$ModuleProperties
+android.hardware.radio.RadioManager$ModuleProperties$1
+android.hardware.radio.RadioManager$ProgramInfo
+android.hardware.radio.RadioManager$ProgramInfo$1
+android.hardware.radio.RadioMetadata
+android.hardware.radio.RadioMetadata$1
+android.hardware.radio.RadioModule
+android.hardware.radio.RadioTuner
+android.hardware.radio.V1_0.Call
+android.hardware.radio.V1_0.CardStatus
+android.hardware.radio.V1_0.CdmaSignalStrength
+android.hardware.radio.V1_0.CellIdentity
+android.hardware.radio.V1_0.CellIdentityCdma
+android.hardware.radio.V1_0.CellIdentityGsm
+android.hardware.radio.V1_0.CellIdentityLte
+android.hardware.radio.V1_0.CellIdentityTdscdma
+android.hardware.radio.V1_0.CellIdentityWcdma
+android.hardware.radio.V1_0.CellInfo
+android.hardware.radio.V1_0.CellInfoCdma
+android.hardware.radio.V1_0.CellInfoGsm
+android.hardware.radio.V1_0.CellInfoLte
+android.hardware.radio.V1_0.CellInfoTdscdma
+android.hardware.radio.V1_0.CellInfoType
+android.hardware.radio.V1_0.CellInfoWcdma
+android.hardware.radio.V1_0.DataRegStateResult
+android.hardware.radio.V1_0.EvdoSignalStrength
+android.hardware.radio.V1_0.GsmSignalStrength
+android.hardware.radio.V1_0.HardwareConfig
+android.hardware.radio.V1_0.IRadio
+android.hardware.radio.V1_0.IRadio$Proxy
+android.hardware.radio.V1_0.IRadioIndication
+android.hardware.radio.V1_0.IRadioIndication$Stub
+android.hardware.radio.V1_0.IRadioResponse
+android.hardware.radio.V1_0.IRadioResponse$Stub
+android.hardware.radio.V1_0.LceStatusInfo
+android.hardware.radio.V1_0.LteSignalStrength
+android.hardware.radio.V1_0.RadioCapability
+android.hardware.radio.V1_0.RadioResponseInfo
+android.hardware.radio.V1_0.RegState
+android.hardware.radio.V1_0.SignalStrength
+android.hardware.radio.V1_0.TdScdmaSignalStrength
+android.hardware.radio.V1_0.VoiceRegStateResult
+android.hardware.radio.V1_0.WcdmaSignalStrength
+android.hardware.radio.deprecated.V1_0.IOemHook
+android.hardware.radio.deprecated.V1_0.IOemHook$Proxy
+android.hardware.radio.deprecated.V1_0.IOemHookIndication
+android.hardware.radio.deprecated.V1_0.IOemHookIndication$Stub
+android.hardware.radio.deprecated.V1_0.IOemHookResponse
+android.hardware.radio.deprecated.V1_0.IOemHookResponse$Stub
+android.hardware.soundtrigger.IRecognitionStatusCallback
+android.hardware.soundtrigger.IRecognitionStatusCallback$Stub
+android.hardware.soundtrigger.KeyphraseEnrollmentInfo
+android.hardware.soundtrigger.KeyphraseMetadata
+android.hardware.soundtrigger.SoundTrigger
+android.hardware.soundtrigger.SoundTrigger$ConfidenceLevel
+android.hardware.soundtrigger.SoundTrigger$ConfidenceLevel$1
+android.hardware.soundtrigger.SoundTrigger$GenericRecognitionEvent
+android.hardware.soundtrigger.SoundTrigger$GenericRecognitionEvent$1
+android.hardware.soundtrigger.SoundTrigger$GenericSoundModel
+android.hardware.soundtrigger.SoundTrigger$GenericSoundModel$1
+android.hardware.soundtrigger.SoundTrigger$Keyphrase
+android.hardware.soundtrigger.SoundTrigger$Keyphrase$1
+android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionEvent
+android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionEvent$1
+android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionExtra
+android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionExtra$1
+android.hardware.soundtrigger.SoundTrigger$KeyphraseSoundModel
+android.hardware.soundtrigger.SoundTrigger$KeyphraseSoundModel$1
+android.hardware.soundtrigger.SoundTrigger$ModuleProperties
+android.hardware.soundtrigger.SoundTrigger$ModuleProperties$1
+android.hardware.soundtrigger.SoundTrigger$RecognitionConfig
+android.hardware.soundtrigger.SoundTrigger$RecognitionConfig$1
+android.hardware.soundtrigger.SoundTrigger$RecognitionEvent
+android.hardware.soundtrigger.SoundTrigger$RecognitionEvent$1
+android.hardware.soundtrigger.SoundTrigger$SoundModel
+android.hardware.soundtrigger.SoundTrigger$SoundModelEvent
+android.hardware.soundtrigger.SoundTrigger$SoundModelEvent$1
+android.hardware.soundtrigger.SoundTrigger$StatusListener
+android.hardware.soundtrigger.SoundTriggerModule
+android.hardware.usb.IUsbManager
+android.hardware.usb.IUsbManager$Stub
+android.hardware.usb.IUsbManager$Stub$Proxy
+android.hardware.usb.UsbAccessory
+android.hardware.usb.UsbDevice
+android.hardware.usb.UsbDevice$1
+android.hardware.usb.UsbDeviceConnection
+android.hardware.usb.UsbManager
+android.hardware.usb.UsbPort
+android.hardware.usb.UsbPort$1
+android.hardware.usb.UsbPortStatus
+android.hardware.usb.UsbPortStatus$1
+android.hardware.usb.UsbRequest
+android.hidl.base.V1_0.DebugInfo
+android.hidl.base.V1_0.IBase
+android.hidl.manager.V1_0.IServiceManager
+android.hidl.manager.V1_0.IServiceManager$Proxy
+android.hidl.manager.V1_0.IServiceNotification
+android.hidl.manager.V1_0.IServiceNotification$Stub
+android.icu.impl.BMPSet
+android.icu.impl.CacheBase
+android.icu.impl.CacheValue
+android.icu.impl.CacheValue$NullValue
+android.icu.impl.CacheValue$SoftValue
+android.icu.impl.CacheValue$Strength
+android.icu.impl.CalendarUtil
+android.icu.impl.CalendarUtil$CalendarPreferences
+android.icu.impl.CaseMapImpl
+android.icu.impl.CaseMapImpl$GreekUpper
+android.icu.impl.CaseMapImpl$StringContextIterator
+android.icu.impl.CharTrie
+android.icu.impl.CharacterIteration
+android.icu.impl.ClassLoaderUtil
+android.icu.impl.CurrencyData
+android.icu.impl.CurrencyData$CurrencyDisplayInfo
+android.icu.impl.CurrencyData$CurrencyDisplayInfoProvider
+android.icu.impl.CurrencyData$CurrencySpacingInfo
+android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingPattern
+android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingType
+android.icu.impl.DateNumberFormat
+android.icu.impl.DontCareFieldPosition
+android.icu.impl.Grego
+android.icu.impl.ICUBinary
+android.icu.impl.ICUBinary$Authenticate
+android.icu.impl.ICUBinary$DatPackageReader
+android.icu.impl.ICUBinary$DatPackageReader$IsAcceptable
+android.icu.impl.ICUBinary$DataFile
+android.icu.impl.ICUBinary$PackageDataFile
+android.icu.impl.ICUCache
+android.icu.impl.ICUConfig
+android.icu.impl.ICUCurrencyDisplayInfoProvider
+android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo
+android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$SpacingInfoSink
+android.icu.impl.ICUCurrencyMetaInfo
+android.icu.impl.ICUCurrencyMetaInfo$Collector
+android.icu.impl.ICUCurrencyMetaInfo$CurrencyCollector
+android.icu.impl.ICUCurrencyMetaInfo$UniqueList
+android.icu.impl.ICUData
+android.icu.impl.ICUDebug
+android.icu.impl.ICULangDataTables
+android.icu.impl.ICULocaleService
+android.icu.impl.ICULocaleService$ICUResourceBundleFactory
+android.icu.impl.ICULocaleService$LocaleKey
+android.icu.impl.ICULocaleService$LocaleKeyFactory
+android.icu.impl.ICUNotifier
+android.icu.impl.ICURWLock
+android.icu.impl.ICURegionDataTables
+android.icu.impl.ICUResourceBundle
+android.icu.impl.ICUResourceBundle$1
+android.icu.impl.ICUResourceBundle$2
+android.icu.impl.ICUResourceBundle$3
+android.icu.impl.ICUResourceBundle$3$1
+android.icu.impl.ICUResourceBundle$4
+android.icu.impl.ICUResourceBundle$AvailEntry
+android.icu.impl.ICUResourceBundle$Loader
+android.icu.impl.ICUResourceBundle$OpenType
+android.icu.impl.ICUResourceBundle$WholeBundle
+android.icu.impl.ICUResourceBundleImpl
+android.icu.impl.ICUResourceBundleImpl$ResourceArray
+android.icu.impl.ICUResourceBundleImpl$ResourceBinary
+android.icu.impl.ICUResourceBundleImpl$ResourceContainer
+android.icu.impl.ICUResourceBundleImpl$ResourceInt
+android.icu.impl.ICUResourceBundleImpl$ResourceIntVector
+android.icu.impl.ICUResourceBundleImpl$ResourceString
+android.icu.impl.ICUResourceBundleImpl$ResourceTable
+android.icu.impl.ICUResourceBundleReader
+android.icu.impl.ICUResourceBundleReader$Array
+android.icu.impl.ICUResourceBundleReader$Array16
+android.icu.impl.ICUResourceBundleReader$Array32
+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
+android.icu.impl.ICUResourceBundleReader$ResourceCache$Level
+android.icu.impl.ICUResourceBundleReader$Table
+android.icu.impl.ICUResourceBundleReader$Table16
+android.icu.impl.ICUResourceBundleReader$Table1632
+android.icu.impl.ICUResourceTableAccess
+android.icu.impl.ICUService
+android.icu.impl.ICUService$CacheEntry
+android.icu.impl.ICUService$Factory
+android.icu.impl.ICUService$Key
+android.icu.impl.IDNA2003
+android.icu.impl.JavaTimeZone
+android.icu.impl.LocaleDisplayNamesImpl
+android.icu.impl.LocaleDisplayNamesImpl$Cache
+android.icu.impl.LocaleDisplayNamesImpl$CapitalizationContextUsage
+android.icu.impl.LocaleDisplayNamesImpl$DataTable
+android.icu.impl.LocaleDisplayNamesImpl$DataTables
+android.icu.impl.LocaleDisplayNamesImpl$ICUDataTable
+android.icu.impl.LocaleDisplayNamesImpl$ICUDataTables
+android.icu.impl.LocaleDisplayNamesImpl$LangDataTables
+android.icu.impl.LocaleDisplayNamesImpl$RegionDataTables
+android.icu.impl.LocaleIDParser
+android.icu.impl.LocaleIDs
+android.icu.impl.Norm2AllModes
+android.icu.impl.Norm2AllModes$1
+android.icu.impl.Norm2AllModes$ComposeNormalizer2
+android.icu.impl.Norm2AllModes$DecomposeNormalizer2
+android.icu.impl.Norm2AllModes$FCDNormalizer2
+android.icu.impl.Norm2AllModes$NFCSingleton
+android.icu.impl.Norm2AllModes$NFKCSingleton
+android.icu.impl.Norm2AllModes$NoopNormalizer2
+android.icu.impl.Norm2AllModes$Norm2AllModesSingleton
+android.icu.impl.Norm2AllModes$Normalizer2WithImpl
+android.icu.impl.Normalizer2Impl
+android.icu.impl.Normalizer2Impl$1
+android.icu.impl.Normalizer2Impl$IsAcceptable
+android.icu.impl.Normalizer2Impl$ReorderingBuffer
+android.icu.impl.OlsonTimeZone
+android.icu.impl.Pair
+android.icu.impl.PatternProps
+android.icu.impl.PatternTokenizer
+android.icu.impl.PluralRulesLoader
+android.icu.impl.ReplaceableUCharacterIterator
+android.icu.impl.RuleCharacterIterator
+android.icu.impl.SimpleCache
+android.icu.impl.SimpleFormatterImpl
+android.icu.impl.SoftCache
+android.icu.impl.StandardPlural
+android.icu.impl.StringPrepDataReader
+android.icu.impl.TextTrieMap
+android.icu.impl.TextTrieMap$Node
+android.icu.impl.TimeZoneNamesFactoryImpl
+android.icu.impl.TimeZoneNamesImpl
+android.icu.impl.TimeZoneNamesImpl$MZ2TZsCache
+android.icu.impl.TimeZoneNamesImpl$MZMapEntry
+android.icu.impl.TimeZoneNamesImpl$TZ2MZsCache
+android.icu.impl.TimeZoneNamesImpl$ZNames
+android.icu.impl.TimeZoneNamesImpl$ZNames$NameTypeIndex
+android.icu.impl.TimeZoneNamesImpl$ZNamesLoader
+android.icu.impl.Trie
+android.icu.impl.Trie$DataManipulate
+android.icu.impl.Trie$DefaultGetFoldingOffset
+android.icu.impl.Trie2
+android.icu.impl.Trie2$1
+android.icu.impl.Trie2$Range
+android.icu.impl.Trie2$Trie2Iterator
+android.icu.impl.Trie2$UTrie2Header
+android.icu.impl.Trie2$ValueMapper
+android.icu.impl.Trie2$ValueWidth
+android.icu.impl.Trie2_16
+android.icu.impl.Trie2_32
+android.icu.impl.UBiDiProps
+android.icu.impl.UBiDiProps$IsAcceptable
+android.icu.impl.UCaseProps
+android.icu.impl.UCaseProps$ContextIterator
+android.icu.impl.UCaseProps$IsAcceptable
+android.icu.impl.UCharacterProperty
+android.icu.impl.UCharacterProperty$1
+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$2
+android.icu.impl.UCharacterProperty$20
+android.icu.impl.UCharacterProperty$21
+android.icu.impl.UCharacterProperty$22
+android.icu.impl.UCharacterProperty$23
+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.UPropertyAliases
+android.icu.impl.UPropertyAliases$IsAcceptable
+android.icu.impl.URLHandler$URLVisitor
+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.USerializedSet
+android.icu.impl.Utility
+android.icu.impl.ZoneMeta
+android.icu.impl.ZoneMeta$CustomTimeZoneCache
+android.icu.impl.ZoneMeta$SystemTimeZoneCache
+android.icu.impl.coll.Collation
+android.icu.impl.coll.CollationCompare
+android.icu.impl.coll.CollationData
+android.icu.impl.coll.CollationDataReader
+android.icu.impl.coll.CollationDataReader$IsAcceptable
+android.icu.impl.coll.CollationFCD
+android.icu.impl.coll.CollationFastLatin
+android.icu.impl.coll.CollationIterator
+android.icu.impl.coll.CollationIterator$CEBuffer
+android.icu.impl.coll.CollationKeys
+android.icu.impl.coll.CollationKeys$LevelCallback
+android.icu.impl.coll.CollationKeys$SortKeyByteSink
+android.icu.impl.coll.CollationLoader
+android.icu.impl.coll.CollationRoot
+android.icu.impl.coll.CollationSettings
+android.icu.impl.coll.CollationTailoring
+android.icu.impl.coll.ContractionsAndExpansions
+android.icu.impl.coll.FCDUTF16CollationIterator
+android.icu.impl.coll.SharedObject
+android.icu.impl.coll.SharedObject$Reference
+android.icu.impl.coll.UTF16CollationIterator
+android.icu.impl.locale.AsciiUtil
+android.icu.impl.locale.BaseLocale
+android.icu.impl.locale.BaseLocale$Cache
+android.icu.impl.locale.BaseLocale$Key
+android.icu.impl.locale.LocaleObjectCache
+android.icu.impl.locale.LocaleObjectCache$CacheEntry
+android.icu.impl.locale.LocaleSyntaxException
+android.icu.lang.UCharacter
+android.icu.lang.UCharacterEnums$ECharacterCategory
+android.icu.lang.UCharacterEnums$ECharacterDirection
+android.icu.lang.UScript
+android.icu.lang.UScript$ScriptUsage
+android.icu.math.BigDecimal
+android.icu.math.MathContext
+android.icu.text.AlphabeticIndex
+android.icu.text.AlphabeticIndex$1
+android.icu.text.AlphabeticIndex$Bucket
+android.icu.text.AlphabeticIndex$Bucket$LabelType
+android.icu.text.AlphabeticIndex$BucketList
+android.icu.text.AlphabeticIndex$ImmutableIndex
+android.icu.text.Bidi
+android.icu.text.Bidi$ImpTabPair
+android.icu.text.BreakIterator
+android.icu.text.BreakIterator$BreakIteratorCache
+android.icu.text.BreakIterator$BreakIteratorServiceShim
+android.icu.text.BreakIteratorFactory
+android.icu.text.BreakIteratorFactory$BFService
+android.icu.text.BreakIteratorFactory$BFService$1RBBreakIteratorFactory
+android.icu.text.CaseMap
+android.icu.text.CaseMap$Upper
+android.icu.text.CollationKey
+android.icu.text.Collator
+android.icu.text.Collator$ServiceShim
+android.icu.text.CollatorServiceShim
+android.icu.text.CollatorServiceShim$CService
+android.icu.text.CollatorServiceShim$CService$1CollatorFactory
+android.icu.text.CurrencyDisplayNames
+android.icu.text.CurrencyMetaInfo
+android.icu.text.CurrencyMetaInfo$CurrencyDigits
+android.icu.text.CurrencyMetaInfo$CurrencyFilter
+android.icu.text.CurrencyPluralInfo
+android.icu.text.DateFormat
+android.icu.text.DateFormat$BooleanAttribute
+android.icu.text.DateFormat$Field
+android.icu.text.DateFormatSymbols
+android.icu.text.DateFormatSymbols$1
+android.icu.text.DateFormatSymbols$CalendarDataSink
+android.icu.text.DateFormatSymbols$CalendarDataSink$AliasType
+android.icu.text.DateFormatSymbols$CapitalizationContextUsage
+android.icu.text.DateIntervalFormat
+android.icu.text.DateIntervalFormat$BestMatchInfo
+android.icu.text.DateIntervalFormat$SkeletonAndItsBestMatch
+android.icu.text.DateIntervalInfo
+android.icu.text.DateIntervalInfo$DateIntervalSink
+android.icu.text.DateIntervalInfo$PatternInfo
+android.icu.text.DateTimePatternGenerator
+android.icu.text.DateTimePatternGenerator$AppendItemFormatsSink
+android.icu.text.DateTimePatternGenerator$AppendItemNamesSink
+android.icu.text.DateTimePatternGenerator$AvailableFormatsSink
+android.icu.text.DateTimePatternGenerator$DTPGflags
+android.icu.text.DateTimePatternGenerator$DateTimeMatcher
+android.icu.text.DateTimePatternGenerator$DayPeriodAllowedHoursSink
+android.icu.text.DateTimePatternGenerator$DistanceInfo
+android.icu.text.DateTimePatternGenerator$FormatParser
+android.icu.text.DateTimePatternGenerator$PatternInfo
+android.icu.text.DateTimePatternGenerator$PatternWithMatcher
+android.icu.text.DateTimePatternGenerator$PatternWithSkeletonFlag
+android.icu.text.DateTimePatternGenerator$SkeletonFields
+android.icu.text.DateTimePatternGenerator$VariableField
+android.icu.text.DecimalFormat
+android.icu.text.DecimalFormat$Unit
+android.icu.text.DecimalFormatSymbols
+android.icu.text.DecimalFormatSymbols$1
+android.icu.text.DecimalFormatSymbols$CacheData
+android.icu.text.DecimalFormatSymbols$DecFmtDataSink
+android.icu.text.DigitList
+android.icu.text.DisplayContext
+android.icu.text.DisplayContext$Type
+android.icu.text.Edits
+android.icu.text.IDNA
+android.icu.text.LanguageBreakEngine
+android.icu.text.ListFormatter$Style
+android.icu.text.LocaleDisplayNames
+android.icu.text.LocaleDisplayNames$DialectHandling
+android.icu.text.MeasureFormat
+android.icu.text.MeasureFormat$FormatWidth
+android.icu.text.MeasureFormat$ImmutableNumberFormat
+android.icu.text.MeasureFormat$MeasureFormatData
+android.icu.text.MeasureFormat$UnitDataSink
+android.icu.text.Normalizer
+android.icu.text.Normalizer$FCDMode
+android.icu.text.Normalizer$Mode
+android.icu.text.Normalizer$ModeImpl
+android.icu.text.Normalizer$NFCMode
+android.icu.text.Normalizer$NFCModeImpl
+android.icu.text.Normalizer$NFDMode
+android.icu.text.Normalizer$NFKCMode
+android.icu.text.Normalizer$NFKDMode
+android.icu.text.Normalizer$NFKDModeImpl
+android.icu.text.Normalizer$NONEMode
+android.icu.text.Normalizer$QuickCheckResult
+android.icu.text.Normalizer2
+android.icu.text.NumberFormat
+android.icu.text.NumberFormat$Field
+android.icu.text.NumberFormat$NumberFormatShim
+android.icu.text.NumberFormatServiceShim
+android.icu.text.NumberFormatServiceShim$NFService
+android.icu.text.NumberFormatServiceShim$NFService$1RBNumberFormatFactory
+android.icu.text.NumberingSystem
+android.icu.text.NumberingSystem$1
+android.icu.text.NumberingSystem$2
+android.icu.text.NumberingSystem$LocaleLookupData
+android.icu.text.PluralRanges
+android.icu.text.PluralRanges$Matrix
+android.icu.text.PluralRules
+android.icu.text.PluralRules$1
+android.icu.text.PluralRules$AndConstraint
+android.icu.text.PluralRules$BinaryConstraint
+android.icu.text.PluralRules$Constraint
+android.icu.text.PluralRules$Factory
+android.icu.text.PluralRules$FixedDecimal
+android.icu.text.PluralRules$FixedDecimalRange
+android.icu.text.PluralRules$FixedDecimalSamples
+android.icu.text.PluralRules$Operand
+android.icu.text.PluralRules$PluralType
+android.icu.text.PluralRules$RangeConstraint
+android.icu.text.PluralRules$Rule
+android.icu.text.PluralRules$RuleList
+android.icu.text.PluralRules$SampleType
+android.icu.text.PluralRules$SimpleTokenizer
+android.icu.text.QuantityFormatter
+android.icu.text.RBBIDataWrapper
+android.icu.text.RBBIDataWrapper$IsAcceptable
+android.icu.text.RBBIDataWrapper$RBBIDataHeader
+android.icu.text.RBBIDataWrapper$TrieFoldingFunc
+android.icu.text.RawCollationKey
+android.icu.text.RelativeDateTimeFormatter
+android.icu.text.RelativeDateTimeFormatter$AbsoluteUnit
+android.icu.text.RelativeDateTimeFormatter$Cache
+android.icu.text.RelativeDateTimeFormatter$Cache$1
+android.icu.text.RelativeDateTimeFormatter$Direction
+android.icu.text.RelativeDateTimeFormatter$Loader
+android.icu.text.RelativeDateTimeFormatter$RelDateTimeDataSink
+android.icu.text.RelativeDateTimeFormatter$RelDateTimeDataSink$DateTimeUnit
+android.icu.text.RelativeDateTimeFormatter$RelativeDateTimeFormatterData
+android.icu.text.RelativeDateTimeFormatter$RelativeUnit
+android.icu.text.RelativeDateTimeFormatter$Style
+android.icu.text.Replaceable
+android.icu.text.ReplaceableString
+android.icu.text.RuleBasedBreakIterator
+android.icu.text.RuleBasedBreakIterator$LookAheadResults
+android.icu.text.RuleBasedCollator
+android.icu.text.RuleBasedCollator$CollationBuffer
+android.icu.text.RuleBasedCollator$CollationKeyByteSink
+android.icu.text.RuleBasedCollator$FCDUTF16NFDIterator
+android.icu.text.RuleBasedCollator$NFDIterator
+android.icu.text.RuleBasedCollator$UTF16NFDIterator
+android.icu.text.SimpleDateFormat
+android.icu.text.SimpleDateFormat$PatternItem
+android.icu.text.StringPrep
+android.icu.text.StringPrepParseException
+android.icu.text.TimeZoneNames
+android.icu.text.TimeZoneNames$Cache
+android.icu.text.TimeZoneNames$Factory
+android.icu.text.TimeZoneNames$NameType
+android.icu.text.UCharacterIterator
+android.icu.text.UFieldPosition
+android.icu.text.UFormat
+android.icu.text.UForwardCharacterIterator
+android.icu.text.UTF16
+android.icu.text.UTF16$StringComparator
+android.icu.text.UnhandledBreakEngine
+android.icu.text.UnicodeFilter
+android.icu.text.UnicodeMatcher
+android.icu.text.UnicodeSet
+android.icu.text.UnicodeSet$Filter
+android.icu.text.UnicodeSet$GeneralCategoryMaskFilter
+android.icu.text.UnicodeSet$IntPropertyFilter
+android.icu.text.UnicodeSet$UnicodeSetIterator2
+android.icu.text.UnicodeSetSpanner
+android.icu.util.BasicTimeZone
+android.icu.util.ByteArrayWrapper
+android.icu.util.BytesTrie
+android.icu.util.BytesTrie$Result
+android.icu.util.Calendar
+android.icu.util.Calendar$CalType
+android.icu.util.Calendar$FormatConfiguration
+android.icu.util.Calendar$PatternData
+android.icu.util.Calendar$WeekData
+android.icu.util.Calendar$WeekDataCache
+android.icu.util.CharsTrie
+android.icu.util.CharsTrie$Entry
+android.icu.util.CharsTrie$Iterator
+android.icu.util.Currency
+android.icu.util.Currency$1
+android.icu.util.Currency$CurrencyUsage
+android.icu.util.Currency$EquivalenceRelation
+android.icu.util.CurrencyAmount
+android.icu.util.Freezable
+android.icu.util.GregorianCalendar
+android.icu.util.ICUException
+android.icu.util.ICUUncheckedIOException
+android.icu.util.LocaleData
+android.icu.util.Measure
+android.icu.util.MeasureUnit
+android.icu.util.MeasureUnit$1
+android.icu.util.MeasureUnit$2
+android.icu.util.MeasureUnit$3
+android.icu.util.MeasureUnit$Factory
+android.icu.util.Output
+android.icu.util.SimpleTimeZone
+android.icu.util.TimeUnit
+android.icu.util.TimeZone
+android.icu.util.TimeZone$ConstantZone
+android.icu.util.ULocale
+android.icu.util.ULocale$1
+android.icu.util.ULocale$2
+android.icu.util.ULocale$Category
+android.icu.util.ULocale$JDKLocaleHelper
+android.icu.util.ULocale$Type
+android.icu.util.UResourceBundle
+android.icu.util.UResourceBundle$RootType
+android.icu.util.UResourceBundleIterator
+android.icu.util.UResourceTypeMismatchException
+android.icu.util.VersionInfo
+android.inputmethodservice.AbstractInputMethodService
+android.inputmethodservice.AbstractInputMethodService$AbstractInputMethodImpl
+android.inputmethodservice.AbstractInputMethodService$AbstractInputMethodSessionImpl
+android.inputmethodservice.IInputMethodSessionWrapper
+android.inputmethodservice.IInputMethodSessionWrapper$ImeInputEventReceiver
+android.inputmethodservice.IInputMethodWrapper
+android.inputmethodservice.IInputMethodWrapper$InputMethodSessionCallbackWrapper
+android.inputmethodservice.InputMethodService
+android.inputmethodservice.InputMethodService$1
+android.inputmethodservice.InputMethodService$2
+android.inputmethodservice.InputMethodService$InputMethodImpl
+android.inputmethodservice.InputMethodService$InputMethodSessionImpl
+android.inputmethodservice.InputMethodService$Insets
+android.inputmethodservice.InputMethodService$SettingsObserver
+android.inputmethodservice.SoftInputWindow
+android.location.Address
+android.location.Address$1
+android.location.BatchedLocationCallbackTransport
+android.location.BatchedLocationCallbackTransport$CallbackTransport
+android.location.Country
+android.location.Country$1
+android.location.CountryDetector
+android.location.CountryDetector$ListenerTransport
+android.location.CountryDetector$ListenerTransport$1
+android.location.CountryListener
+android.location.Criteria
+android.location.Criteria$1
+android.location.Geocoder
+android.location.GeocoderParams
+android.location.GeocoderParams$1
+android.location.Geofence
+android.location.GnssMeasurementCallbackTransport
+android.location.GnssMeasurementCallbackTransport$ListenerTransport
+android.location.GnssNavigationMessageCallbackTransport
+android.location.GnssNavigationMessageCallbackTransport$ListenerTransport
+android.location.GnssStatus
+android.location.GnssStatus$Callback
+android.location.GpsSatellite
+android.location.GpsStatus
+android.location.GpsStatus$1
+android.location.GpsStatus$Listener
+android.location.GpsStatus$SatelliteIterator
+android.location.IBatchedLocationCallback
+android.location.IBatchedLocationCallback$Stub
+android.location.ICountryDetector
+android.location.ICountryDetector$Stub
+android.location.ICountryDetector$Stub$Proxy
+android.location.ICountryListener
+android.location.ICountryListener$Stub
+android.location.ICountryListener$Stub$Proxy
+android.location.IFusedProvider
+android.location.IFusedProvider$Stub
+android.location.IGeocodeProvider
+android.location.IGeocodeProvider$Stub
+android.location.IGeocodeProvider$Stub$Proxy
+android.location.IGeofenceProvider
+android.location.IGeofenceProvider$Stub
+android.location.IGeofenceProvider$Stub$Proxy
+android.location.IGnssMeasurementsListener
+android.location.IGnssMeasurementsListener$Stub
+android.location.IGnssNavigationMessageListener
+android.location.IGnssNavigationMessageListener$Stub
+android.location.IGnssStatusListener
+android.location.IGnssStatusListener$Stub
+android.location.IGnssStatusListener$Stub$Proxy
+android.location.IGnssStatusProvider
+android.location.IGnssStatusProvider$Stub
+android.location.IGpsGeofenceHardware
+android.location.IGpsGeofenceHardware$Stub
+android.location.ILocationListener
+android.location.ILocationListener$Stub
+android.location.ILocationListener$Stub$Proxy
+android.location.ILocationManager
+android.location.ILocationManager$Stub
+android.location.ILocationManager$Stub$Proxy
+android.location.INetInitiatedListener
+android.location.INetInitiatedListener$Stub
+android.location.LocalListenerHelper
+android.location.Location
+android.location.Location$1
+android.location.Location$2
+android.location.Location$BearingDistanceCache
+android.location.LocationListener
+android.location.LocationManager
+android.location.LocationManager$GnssStatusListenerTransport
+android.location.LocationManager$GnssStatusListenerTransport$1
+android.location.LocationManager$GnssStatusListenerTransport$GnssHandler
+android.location.LocationManager$ListenerTransport
+android.location.LocationManager$ListenerTransport$1
+android.location.LocationManager$ListenerTransport$2
+android.location.LocationProvider
+android.location.LocationRequest
+android.location.LocationRequest$1
+android.media.AudioAttributes
+android.media.AudioAttributes$1
+android.media.AudioAttributes$Builder
+android.media.AudioDeviceCallback
+android.media.AudioDeviceInfo
+android.media.AudioDevicePort
+android.media.AudioDevicePortConfig
+android.media.AudioFocusInfo
+android.media.AudioFocusInfo$1
+android.media.AudioFocusRequest
+android.media.AudioFocusRequest$Builder
+android.media.AudioFormat
+android.media.AudioFormat$1
+android.media.AudioFormat$Builder
+android.media.AudioGain
+android.media.AudioGainConfig
+android.media.AudioHandle
+android.media.AudioManager
+android.media.AudioManager$1
+android.media.AudioManager$2
+android.media.AudioManager$3
+android.media.AudioManager$FocusRequestInfo
+android.media.AudioManager$NativeEventHandlerDelegate
+android.media.AudioManager$NativeEventHandlerDelegate$1
+android.media.AudioManager$OnAmPortUpdateListener
+android.media.AudioManager$OnAudioFocusChangeListener
+android.media.AudioManager$OnAudioPortUpdateListener
+android.media.AudioManager$ServiceEventHandlerDelegate
+android.media.AudioManager$ServiceEventHandlerDelegate$1
+android.media.AudioManagerInternal
+android.media.AudioManagerInternal$RingerModeDelegate
+android.media.AudioMixPort
+android.media.AudioMixPortConfig
+android.media.AudioPatch
+android.media.AudioPlaybackConfiguration
+android.media.AudioPlaybackConfiguration$1
+android.media.AudioPlaybackConfiguration$IPlayerShell
+android.media.AudioPlaybackConfiguration$PlayerDeathMonitor
+android.media.AudioPort
+android.media.AudioPortConfig
+android.media.AudioPortEventHandler
+android.media.AudioPortEventHandler$1
+android.media.AudioRecord
+android.media.AudioRoutesInfo
+android.media.AudioRoutesInfo$1
+android.media.AudioRouting
+android.media.AudioSystem
+android.media.AudioSystem$AudioRecordingCallback
+android.media.AudioSystem$DynamicPolicyCallback
+android.media.AudioSystem$ErrorCallback
+android.media.AudioTimestamp
+android.media.AudioTrack
+android.media.BufferingParams
+android.media.BufferingParams$1
+android.media.CamcorderProfile
+android.media.CameraProfile
+android.media.DecoderCapabilities
+android.media.DeniedByServerException
+android.media.EncoderCapabilities
+android.media.ExifInterface
+android.media.ExifInterface$ByteOrderedDataInputStream
+android.media.ExifInterface$ExifAttribute
+android.media.ExifInterface$ExifTag
+android.media.IAudioFocusDispatcher
+android.media.IAudioFocusDispatcher$Stub
+android.media.IAudioFocusDispatcher$Stub$Proxy
+android.media.IAudioRoutesObserver
+android.media.IAudioRoutesObserver$Stub
+android.media.IAudioRoutesObserver$Stub$Proxy
+android.media.IAudioService
+android.media.IAudioService$Stub
+android.media.IAudioService$Stub$Proxy
+android.media.IMediaHTTPConnection
+android.media.IMediaHTTPConnection$Stub
+android.media.IMediaHTTPService
+android.media.IMediaHTTPService$Stub
+android.media.IMediaResourceMonitor
+android.media.IMediaResourceMonitor$Stub
+android.media.IMediaRouterClient
+android.media.IMediaRouterClient$Stub
+android.media.IMediaRouterClient$Stub$Proxy
+android.media.IMediaRouterService
+android.media.IMediaRouterService$Stub
+android.media.IMediaRouterService$Stub$Proxy
+android.media.IPlaybackConfigDispatcher
+android.media.IPlaybackConfigDispatcher$Stub
+android.media.IPlayer
+android.media.IPlayer$Stub
+android.media.IPlayer$Stub$Proxy
+android.media.IRecordingConfigDispatcher
+android.media.IRecordingConfigDispatcher$Stub
+android.media.IRemoteVolumeController
+android.media.IRemoteVolumeController$Stub
+android.media.IRemoteVolumeController$Stub$Proxy
+android.media.IRemoteVolumeObserver
+android.media.IRemoteVolumeObserver$Stub
+android.media.IRingtonePlayer
+android.media.IRingtonePlayer$Stub
+android.media.IRingtonePlayer$Stub$Proxy
+android.media.IVolumeController
+android.media.IVolumeController$Stub
+android.media.IVolumeController$Stub$Proxy
+android.media.Image
+android.media.Image$Plane
+android.media.ImageReader
+android.media.ImageReader$ListenerHandler
+android.media.ImageReader$OnImageAvailableListener
+android.media.ImageReader$SurfaceImage
+android.media.ImageReader$SurfaceImage$SurfacePlane
+android.media.ImageUtils
+android.media.ImageWriter
+android.media.ImageWriter$ListenerHandler
+android.media.ImageWriter$OnImageReleasedListener
+android.media.ImageWriter$WriterSurfaceImage
+android.media.ImageWriter$WriterSurfaceImage$SurfacePlane
+android.media.JetPlayer
+android.media.MediaCodec
+android.media.MediaCodec$BufferInfo
+android.media.MediaCodec$BufferMap
+android.media.MediaCodec$BufferMap$CodecBuffer
+android.media.MediaCodec$CodecException
+android.media.MediaCodec$CryptoException
+android.media.MediaCodec$CryptoInfo
+android.media.MediaCodec$CryptoInfo$Pattern
+android.media.MediaCodec$EventHandler
+android.media.MediaCodec$PersistentSurface
+android.media.MediaCodecInfo
+android.media.MediaCodecInfo$AudioCapabilities
+android.media.MediaCodecInfo$CodecCapabilities
+android.media.MediaCodecInfo$CodecProfileLevel
+android.media.MediaCodecInfo$EncoderCapabilities
+android.media.MediaCodecInfo$Feature
+android.media.MediaCodecInfo$VideoCapabilities
+android.media.MediaCodecList
+android.media.MediaCrypto
+android.media.MediaCryptoException
+android.media.MediaDescrambler
+android.media.MediaDescription
+android.media.MediaDescription$1
+android.media.MediaDescription$Builder
+android.media.MediaDrm
+android.media.MediaDrm$Certificate
+android.media.MediaDrm$EventHandler
+android.media.MediaDrm$KeyRequest
+android.media.MediaDrm$MediaDrmStateException
+android.media.MediaDrm$OnEventListener
+android.media.MediaDrm$ProvisionRequest
+android.media.MediaDrmException
+android.media.MediaExtractor
+android.media.MediaFile
+android.media.MediaFile$MediaFileType
+android.media.MediaFormat
+android.media.MediaHTTPConnection
+android.media.MediaHTTPService
+android.media.MediaMetadata
+android.media.MediaMetadata$1
+android.media.MediaMetadata$Builder
+android.media.MediaMetadataRetriever
+android.media.MediaMuxer
+android.media.MediaPlayer
+android.media.MediaPlayer$1
+android.media.MediaPlayer$2
+android.media.MediaPlayer$4
+android.media.MediaPlayer$4$1
+android.media.MediaPlayer$EventHandler
+android.media.MediaPlayer$OnCompletionListener
+android.media.MediaPlayer$OnErrorListener
+android.media.MediaPlayer$OnInfoListener
+android.media.MediaPlayer$OnPreparedListener
+android.media.MediaPlayer$OnSeekCompleteListener
+android.media.MediaPlayer$OnSubtitleDataListener
+android.media.MediaPlayer$TimeProvider
+android.media.MediaPlayer$TimeProvider$EventHandler
+android.media.MediaPlayer$TrackInfo
+android.media.MediaPlayer$TrackInfo$1
+android.media.MediaRecorder
+android.media.MediaRecorder$EventHandler
+android.media.MediaRecorder$OnErrorListener
+android.media.MediaRouter
+android.media.MediaRouter$Callback
+android.media.MediaRouter$CallbackInfo
+android.media.MediaRouter$RouteCategory
+android.media.MediaRouter$RouteGroup
+android.media.MediaRouter$RouteInfo
+android.media.MediaRouter$RouteInfo$1
+android.media.MediaRouter$SimpleCallback
+android.media.MediaRouter$Static
+android.media.MediaRouter$Static$1
+android.media.MediaRouter$Static$1$1
+android.media.MediaRouter$Static$Client
+android.media.MediaRouter$Static$Client$1
+android.media.MediaRouter$VolumeCallback
+android.media.MediaRouter$VolumeChangeReceiver
+android.media.MediaRouter$WifiDisplayStatusChangedReceiver
+android.media.MediaRouterClientState
+android.media.MediaRouterClientState$1
+android.media.MediaRouterClientState$RouteInfo
+android.media.MediaRouterClientState$RouteInfo$1
+android.media.MediaScanner
+android.media.MediaScannerConnection
+android.media.MediaScannerConnection$OnScanCompletedListener
+android.media.MediaSync
+android.media.MediaTimeProvider
+android.media.MediaTimeProvider$OnMediaTimeListener
+android.media.MiniThumbFile
+android.media.NotProvisionedException
+android.media.PlaybackParams
+android.media.PlaybackParams$1
+android.media.PlayerBase
+android.media.PlayerBase$IAppOpsCallbackWrapper
+android.media.PlayerBase$IPlayerWrapper
+android.media.PlayerBase$PlayerIdCard
+android.media.PlayerBase$PlayerIdCard$1
+android.media.PlayerProxy
+android.media.Rating
+android.media.Rating$1
+android.media.RemoteDisplay
+android.media.ResampleInputStream
+android.media.Ringtone$MyOnCompletionListener
+android.media.SoundPool
+android.media.SoundPool$Builder
+android.media.SoundPool$EventHandler
+android.media.SoundPool$OnLoadCompleteListener
+android.media.SubtitleController
+android.media.SubtitleController$1
+android.media.SubtitleController$2
+android.media.SubtitleController$Anchor
+android.media.SubtitleController$Listener
+android.media.SubtitleTrack
+android.media.SyncParams
+android.media.ThumbnailUtils
+android.media.ThumbnailUtils$SizedThumbnailBitmap
+android.media.ToneGenerator
+android.media.UnsupportedSchemeException
+android.media.Utils
+android.media.Utils$1
+android.media.Utils$2
+android.media.VolumeAutomation
+android.media.VolumePolicy
+android.media.VolumePolicy$1
+android.media.VolumeShaper
+android.media.VolumeShaper$Configuration
+android.media.VolumeShaper$Configuration$1
+android.media.VolumeShaper$Configuration$Builder
+android.media.VolumeShaper$Operation
+android.media.VolumeShaper$Operation$1
+android.media.VolumeShaper$Operation$Builder
+android.media.VolumeShaper$State
+android.media.VolumeShaper$State$1
+android.media.audiofx.AudioEffect
+android.media.audiofx.AudioEffect$Descriptor
+android.media.audiofx.LoudnessEnhancer
+android.media.audiofx.Virtualizer
+android.media.audiofx.Visualizer
+android.media.audiopolicy.AudioMix
+android.media.audiopolicy.AudioMixingRule
+android.media.audiopolicy.AudioMixingRule$AudioMixMatchCriterion
+android.media.audiopolicy.AudioPolicyConfig
+android.media.audiopolicy.IAudioPolicyCallback
+android.media.audiopolicy.IAudioPolicyCallback$Stub
+android.media.browse.MediaBrowser
+android.media.browse.MediaBrowser$1
+android.media.browse.MediaBrowser$2
+android.media.browse.MediaBrowser$6
+android.media.browse.MediaBrowser$ConnectionCallback
+android.media.browse.MediaBrowser$MediaServiceConnection
+android.media.browse.MediaBrowser$MediaServiceConnection$1
+android.media.browse.MediaBrowser$ServiceCallbacks
+android.media.midi.IMidiDeviceListener
+android.media.midi.IMidiDeviceOpenCallback
+android.media.midi.IMidiDeviceServer
+android.media.midi.IMidiManager
+android.media.midi.IMidiManager$Stub
+android.media.midi.MidiDeviceInfo
+android.media.midi.MidiDeviceStatus
+android.media.midi.MidiManager
+android.media.projection.IMediaProjection
+android.media.projection.IMediaProjectionManager
+android.media.projection.IMediaProjectionManager$Stub
+android.media.projection.IMediaProjectionManager$Stub$Proxy
+android.media.projection.IMediaProjectionWatcherCallback
+android.media.projection.IMediaProjectionWatcherCallback$Stub
+android.media.projection.IMediaProjectionWatcherCallback$Stub$Proxy
+android.media.projection.MediaProjectionInfo
+android.media.projection.MediaProjectionManager
+android.media.projection.MediaProjectionManager$Callback
+android.media.projection.MediaProjectionManager$CallbackDelegate
+android.media.session.IActiveSessionsListener
+android.media.session.IActiveSessionsListener$Stub
+android.media.session.IActiveSessionsListener$Stub$Proxy
+android.media.session.ICallback
+android.media.session.ICallback$Stub
+android.media.session.ICallback$Stub$Proxy
+android.media.session.IOnMediaKeyListener
+android.media.session.IOnVolumeKeyLongPressListener
+android.media.session.ISession
+android.media.session.ISession$Stub
+android.media.session.ISession$Stub$Proxy
+android.media.session.ISessionCallback
+android.media.session.ISessionCallback$Stub
+android.media.session.ISessionCallback$Stub$Proxy
+android.media.session.ISessionController
+android.media.session.ISessionController$Stub
+android.media.session.ISessionController$Stub$Proxy
+android.media.session.ISessionControllerCallback
+android.media.session.ISessionControllerCallback$Stub
+android.media.session.ISessionControllerCallback$Stub$Proxy
+android.media.session.ISessionManager
+android.media.session.ISessionManager$Stub
+android.media.session.ISessionManager$Stub$Proxy
+android.media.session.MediaController
+android.media.session.MediaController$Callback
+android.media.session.MediaController$CallbackStub
+android.media.session.MediaController$MessageHandler
+android.media.session.MediaController$PlaybackInfo
+android.media.session.MediaController$TransportControls
+android.media.session.MediaSession
+android.media.session.MediaSession$Callback
+android.media.session.MediaSession$CallbackMessageHandler
+android.media.session.MediaSession$CallbackStub
+android.media.session.MediaSession$QueueItem
+android.media.session.MediaSession$QueueItem$1
+android.media.session.MediaSession$Token
+android.media.session.MediaSession$Token$1
+android.media.session.MediaSessionManager
+android.media.session.MediaSessionManager$Callback
+android.media.session.MediaSessionManager$CallbackImpl
+android.media.session.MediaSessionManager$CallbackImpl$3
+android.media.session.MediaSessionManager$CallbackImpl$4
+android.media.session.MediaSessionManager$OnActiveSessionsChangedListener
+android.media.session.MediaSessionManager$SessionsChangedWrapper
+android.media.session.MediaSessionManager$SessionsChangedWrapper$1
+android.media.session.MediaSessionManager$SessionsChangedWrapper$1$1
+android.media.session.ParcelableVolumeInfo
+android.media.session.ParcelableVolumeInfo$1
+android.media.session.PlaybackState
+android.media.session.PlaybackState$1
+android.media.session.PlaybackState$Builder
+android.media.session.PlaybackState$CustomAction
+android.media.session.PlaybackState$CustomAction$1
+android.media.session.PlaybackState$CustomAction$Builder
+android.media.soundtrigger.SoundTriggerManager
+android.media.tv.TvInputHardwareInfo$Builder
+android.media.tv.TvInputManager
+android.media.tv.TvStreamConfig
+android.media.tv.TvStreamConfig$Builder
+android.metrics.LogMaker
+android.mtp.MtpDatabase
+android.mtp.MtpDevice
+android.mtp.MtpDeviceInfo
+android.mtp.MtpEvent
+android.mtp.MtpObjectInfo
+android.mtp.MtpPropertyGroup
+android.mtp.MtpPropertyList
+android.mtp.MtpServer
+android.mtp.MtpStorage
+android.mtp.MtpStorageInfo
+android.net.ConnectivityManager
+android.net.ConnectivityManager$CallbackHandler
+android.net.ConnectivityManager$NetworkCallback
+android.net.ConnectivityManager$OnNetworkActiveListener
+android.net.ConnectivityManager$PacketKeepaliveCallback
+android.net.ConnectivityMetricsEvent
+android.net.ConnectivityMetricsEvent$1
+android.net.ConnectivityThread
+android.net.ConnectivityThread$Singleton
+android.net.Credentials
+android.net.DataUsageRequest
+android.net.DhcpInfo
+android.net.DhcpInfo$1
+android.net.DhcpResults
+android.net.DhcpResults$1
+android.net.EthernetManager
+android.net.EthernetManager$1
+android.net.EthernetManager$2
+android.net.EventLogTags
+android.net.IConnectivityManager
+android.net.IConnectivityManager$Stub
+android.net.IConnectivityManager$Stub$Proxy
+android.net.IEthernetManager
+android.net.IEthernetManager$Stub
+android.net.IEthernetServiceListener
+android.net.IEthernetServiceListener$Stub
+android.net.IIpConnectivityMetrics
+android.net.IIpConnectivityMetrics$Stub
+android.net.IIpSecService
+android.net.IIpSecService$Stub
+android.net.INetd
+android.net.INetd$Stub
+android.net.INetd$Stub$Proxy
+android.net.INetdEventCallback
+android.net.INetworkManagementEventObserver
+android.net.INetworkManagementEventObserver$Stub
+android.net.INetworkPolicyListener
+android.net.INetworkPolicyListener$Stub
+android.net.INetworkPolicyListener$Stub$Proxy
+android.net.INetworkPolicyManager
+android.net.INetworkPolicyManager$Stub
+android.net.INetworkPolicyManager$Stub$Proxy
+android.net.INetworkRecommendationProvider
+android.net.INetworkRecommendationProvider$Stub
+android.net.INetworkRecommendationProvider$Stub$Proxy
+android.net.INetworkScoreCache
+android.net.INetworkScoreCache$Stub
+android.net.INetworkScoreCache$Stub$Proxy
+android.net.INetworkScoreService
+android.net.INetworkScoreService$Stub
+android.net.INetworkScoreService$Stub$Proxy
+android.net.INetworkStatsService
+android.net.INetworkStatsService$Stub
+android.net.INetworkStatsService$Stub$Proxy
+android.net.INetworkStatsSession
+android.net.InterfaceConfiguration
+android.net.InterfaceConfiguration$1
+android.net.IpConfiguration
+android.net.IpConfiguration$1
+android.net.IpConfiguration$IpAssignment
+android.net.IpConfiguration$ProxySettings
+android.net.IpPrefix
+android.net.IpPrefix$1
+android.net.IpSecConfig
+android.net.IpSecManager
+android.net.IpSecManager$SpiUnavailableException
+android.net.LinkAddress
+android.net.LinkAddress$1
+android.net.LinkProperties
+android.net.LinkProperties$1
+android.net.LinkProperties$CompareResult
+android.net.LinkProperties$ProvisioningChange
+android.net.LocalServerSocket
+android.net.LocalSocket
+android.net.LocalSocketAddress
+android.net.LocalSocketAddress$Namespace
+android.net.LocalSocketImpl
+android.net.LocalSocketImpl$SocketInputStream
+android.net.LocalSocketImpl$SocketOutputStream
+android.net.MatchAllNetworkSpecifier
+android.net.MatchAllNetworkSpecifier$1
+android.net.Network
+android.net.Network$1
+android.net.Network$2
+android.net.Network$NetworkBoundSocketFactory
+android.net.NetworkAgent
+android.net.NetworkCapabilities
+android.net.NetworkCapabilities$1
+android.net.NetworkConfig
+android.net.NetworkFactory
+android.net.NetworkFactory$NetworkRequestInfo
+android.net.NetworkIdentity
+android.net.NetworkInfo
+android.net.NetworkInfo$1
+android.net.NetworkInfo$DetailedState
+android.net.NetworkInfo$State
+android.net.NetworkKey
+android.net.NetworkKey$1
+android.net.NetworkMisc
+android.net.NetworkMisc$1
+android.net.NetworkPolicy
+android.net.NetworkPolicy$1
+android.net.NetworkPolicyManager
+android.net.NetworkQuotaInfo
+android.net.NetworkRecommendationProvider
+android.net.NetworkRecommendationProvider$ServiceWrapper
+android.net.NetworkRecommendationProvider$ServiceWrapper$1
+android.net.NetworkRequest
+android.net.NetworkRequest$1
+android.net.NetworkRequest$Builder
+android.net.NetworkRequest$Type
+android.net.NetworkScoreManager
+android.net.NetworkScorerAppData
+android.net.NetworkScorerAppData$1
+android.net.NetworkSpecifier
+android.net.NetworkState
+android.net.NetworkState$1
+android.net.NetworkStats
+android.net.NetworkStats$1
+android.net.NetworkStats$Entry
+android.net.NetworkStats$NonMonotonicObserver
+android.net.NetworkStatsHistory
+android.net.NetworkStatsHistory$1
+android.net.NetworkStatsHistory$DataStreamUtils
+android.net.NetworkStatsHistory$Entry
+android.net.NetworkTemplate
+android.net.NetworkTemplate$1
+android.net.NetworkUtils
+android.net.ParseException
+android.net.Proxy
+android.net.ProxyInfo
+android.net.ProxyInfo$1
+android.net.RouteInfo
+android.net.RouteInfo$1
+android.net.RssiCurve
+android.net.RssiCurve$1
+android.net.SSLCertificateSocketFactory
+android.net.SSLCertificateSocketFactory$1
+android.net.SSLSessionCache
+android.net.ScoredNetwork
+android.net.ScoredNetwork$1
+android.net.SntpClient
+android.net.StaticIpConfiguration
+android.net.StaticIpConfiguration$1
+android.net.StringNetworkSpecifier
+android.net.StringNetworkSpecifier$1
+android.net.TrafficStats
+android.net.UidRange
+android.net.Uri
+android.net.Uri$1
+android.net.Uri$AbstractHierarchicalUri
+android.net.Uri$AbstractPart
+android.net.Uri$Builder
+android.net.Uri$HierarchicalUri
+android.net.Uri$OpaqueUri
+android.net.Uri$Part
+android.net.Uri$Part$EmptyPart
+android.net.Uri$PathPart
+android.net.Uri$PathSegments
+android.net.Uri$PathSegmentsBuilder
+android.net.Uri$StringUri
+android.net.WebAddress
+android.net.WifiKey
+android.net.WifiKey$1
+android.net.http.AndroidHttpClient
+android.net.http.AndroidHttpClient$1
+android.net.http.AndroidHttpClient$2
+android.net.http.AndroidHttpClient$CurlLogger
+android.net.http.AndroidHttpClient$LoggingConfiguration
+android.net.http.HttpResponseCache
+android.net.http.SslCertificate
+android.net.http.X509TrustManagerExtensions
+android.net.lowpan.LowpanManager
+android.net.metrics.ApfProgramEvent
+android.net.metrics.ApfProgramEvent$1
+android.net.metrics.ApfStats
+android.net.metrics.ApfStats$1
+android.net.metrics.ConnectStats
+android.net.metrics.DefaultNetworkEvent
+android.net.metrics.DefaultNetworkEvent$1
+android.net.metrics.DhcpClientEvent
+android.net.metrics.DhcpClientEvent$1
+android.net.metrics.DnsEvent
+android.net.metrics.IpConnectivityLog
+android.net.metrics.IpManagerEvent
+android.net.metrics.IpManagerEvent$1
+android.net.metrics.NetworkEvent
+android.net.metrics.NetworkEvent$1
+android.net.metrics.RaEvent
+android.net.metrics.RaEvent$1
+android.net.metrics.RaEvent$Builder
+android.net.metrics.ValidationProbeEvent
+android.net.metrics.ValidationProbeEvent$1
+android.net.metrics.ValidationProbeEvent$Decoder
+android.net.nsd.INsdManager
+android.net.nsd.INsdManager$Stub
+android.net.nsd.NsdManager
+android.net.sip.ISipService
+android.net.sip.ISipService$Stub
+android.net.sip.SipManager
+android.net.wifi.IRttManager
+android.net.wifi.IRttManager$Stub
+android.net.wifi.IWifiManager
+android.net.wifi.IWifiManager$Stub
+android.net.wifi.IWifiManager$Stub$Proxy
+android.net.wifi.IWifiScanner
+android.net.wifi.IWifiScanner$Stub
+android.net.wifi.IWifiScanner$Stub$Proxy
+android.net.wifi.ParcelUtil
+android.net.wifi.RttManager
+android.net.wifi.RttManager$RttCapabilities
+android.net.wifi.RttManager$RttListener
+android.net.wifi.RttManager$RttResult
+android.net.wifi.ScanResult
+android.net.wifi.ScanResult$1
+android.net.wifi.ScanResult$InformationElement
+android.net.wifi.ScanSettings
+android.net.wifi.SupplicantState
+android.net.wifi.SupplicantState$1
+android.net.wifi.WifiActivityEnergyInfo
+android.net.wifi.WifiActivityEnergyInfo$1
+android.net.wifi.WifiConfiguration
+android.net.wifi.WifiConfiguration$1
+android.net.wifi.WifiConfiguration$KeyMgmt
+android.net.wifi.WifiConfiguration$NetworkSelectionStatus
+android.net.wifi.WifiConfiguration$Visibility
+android.net.wifi.WifiConnectionStatistics
+android.net.wifi.WifiConnectionStatistics$1
+android.net.wifi.WifiEnterpriseConfig
+android.net.wifi.WifiEnterpriseConfig$1
+android.net.wifi.WifiInfo
+android.net.wifi.WifiInfo$1
+android.net.wifi.WifiLinkLayerStats
+android.net.wifi.WifiLinkLayerStats$1
+android.net.wifi.WifiManager
+android.net.wifi.WifiManager$ActionListener
+android.net.wifi.WifiManager$MulticastLock
+android.net.wifi.WifiManager$WifiLock
+android.net.wifi.WifiNetworkScoreCache
+android.net.wifi.WifiNetworkScoreCache$CacheListener
+android.net.wifi.WifiNetworkScoreCache$CacheListener$1
+android.net.wifi.WifiScanner
+android.net.wifi.WifiScanner$ActionListener
+android.net.wifi.WifiScanner$ChannelSpec
+android.net.wifi.WifiScanner$ParcelableScanData
+android.net.wifi.WifiScanner$ParcelableScanData$1
+android.net.wifi.WifiScanner$ParcelableScanResults
+android.net.wifi.WifiScanner$ParcelableScanResults$1
+android.net.wifi.WifiScanner$PnoScanListener
+android.net.wifi.WifiScanner$ScanData
+android.net.wifi.WifiScanner$ScanData$1
+android.net.wifi.WifiScanner$ScanListener
+android.net.wifi.WifiScanner$ScanSettings
+android.net.wifi.WifiScanner$ScanSettings$1
+android.net.wifi.WifiScanner$ScanSettings$HiddenNetwork
+android.net.wifi.WifiScanner$ServiceHandler
+android.net.wifi.WifiSsid
+android.net.wifi.WifiSsid$1
+android.net.wifi.WpsInfo
+android.net.wifi.WpsInfo$1
+android.net.wifi.aware.WifiAwareManager
+android.net.wifi.hotspot2.PasspointConfiguration
+android.net.wifi.p2p.IWifiP2pManager
+android.net.wifi.p2p.IWifiP2pManager$Stub
+android.net.wifi.p2p.WifiP2pConfig
+android.net.wifi.p2p.WifiP2pConfig$1
+android.net.wifi.p2p.WifiP2pDevice
+android.net.wifi.p2p.WifiP2pDevice$1
+android.net.wifi.p2p.WifiP2pDeviceList
+android.net.wifi.p2p.WifiP2pDeviceList$1
+android.net.wifi.p2p.WifiP2pGroup
+android.net.wifi.p2p.WifiP2pGroup$1
+android.net.wifi.p2p.WifiP2pGroupList
+android.net.wifi.p2p.WifiP2pGroupList$1
+android.net.wifi.p2p.WifiP2pGroupList$2
+android.net.wifi.p2p.WifiP2pGroupList$GroupDeleteListener
+android.net.wifi.p2p.WifiP2pInfo
+android.net.wifi.p2p.WifiP2pInfo$1
+android.net.wifi.p2p.WifiP2pManager
+android.net.wifi.p2p.WifiP2pWfdInfo
+android.net.wifi.p2p.WifiP2pWfdInfo$1
+android.nfc.BeamShareData
+android.nfc.FormatException
+android.nfc.IAppCallback
+android.nfc.IAppCallback$Stub
+android.nfc.IAppCallback$Stub$Proxy
+android.nfc.INfcAdapter
+android.nfc.INfcAdapter$Stub
+android.nfc.INfcAdapter$Stub$Proxy
+android.nfc.INfcAdapterExtras
+android.nfc.INfcCardEmulation
+android.nfc.INfcCardEmulation$Stub
+android.nfc.INfcCardEmulation$Stub$Proxy
+android.nfc.INfcFCardEmulation
+android.nfc.INfcFCardEmulation$Stub
+android.nfc.INfcFCardEmulation$Stub$Proxy
+android.nfc.INfcTag
+android.nfc.INfcTag$Stub
+android.nfc.INfcTag$Stub$Proxy
+android.nfc.INfcUnlockHandler
+android.nfc.ITagRemovedCallback
+android.nfc.NdefMessage
+android.nfc.NfcActivityManager
+android.nfc.NfcActivityManager$NfcActivityState
+android.nfc.NfcActivityManager$NfcApplicationState
+android.nfc.NfcAdapter
+android.nfc.NfcAdapter$1
+android.nfc.NfcAdapter$CreateBeamUrisCallback
+android.nfc.NfcAdapter$CreateNdefMessageCallback
+android.nfc.NfcAdapter$OnNdefPushCompleteCallback
+android.nfc.NfcEvent
+android.nfc.NfcManager
+android.nfc.Tag
+android.nfc.TechListParcel
+android.nfc.TransceiveResult
+android.nfc.cardemulation.AidGroup
+android.nfc.cardemulation.AidGroup$1
+android.nfc.cardemulation.ApduServiceInfo
+android.nfc.cardemulation.ApduServiceInfo$1
+android.nfc.cardemulation.CardEmulation
+android.nfc.cardemulation.HostApduService
+android.nfc.cardemulation.HostApduService$MsgHandler
+android.opengl.EGL14
+android.opengl.EGLConfig
+android.opengl.EGLContext
+android.opengl.EGLDisplay
+android.opengl.EGLExt
+android.opengl.EGLObjectHandle
+android.opengl.EGLSurface
+android.opengl.ETC1
+android.opengl.GLES10
+android.opengl.GLES10Ext
+android.opengl.GLES11
+android.opengl.GLES11Ext
+android.opengl.GLES20
+android.opengl.GLES30
+android.opengl.GLES31
+android.opengl.GLES31Ext
+android.opengl.GLES32
+android.opengl.GLUtils
+android.opengl.Matrix
+android.opengl.Visibility
+android.os.-$Lambda$-dncxFEc2F2bgG2fsIoC6FC6WNE
+android.os.-$Lambda$-dncxFEc2F2bgG2fsIoC6FC6WNE$1
+android.os.-$Lambda$6x30vPJhBKUfNY8tswxuZo3DCe0
+android.os.-$Lambda$BcGBlsGjMZMF6Ej78rWJ608MYSM
+android.os.AsyncResult
+android.os.AsyncTask
+android.os.AsyncTask$1
+android.os.AsyncTask$2
+android.os.AsyncTask$3
+android.os.AsyncTask$AsyncTaskResult
+android.os.AsyncTask$InternalHandler
+android.os.AsyncTask$SerialExecutor
+android.os.AsyncTask$SerialExecutor$1
+android.os.AsyncTask$Status
+android.os.AsyncTask$WorkerRunnable
+android.os.BadParcelableException
+android.os.BaseBundle
+android.os.BaseBundle$NoImagePreloadHolder
+android.os.BatteryManager
+android.os.BatteryManagerInternal
+android.os.BatteryProperties
+android.os.BatteryProperties$1
+android.os.BatteryStats
+android.os.BatteryStats$BitDescription
+android.os.BatteryStats$ControllerActivityCounter
+android.os.BatteryStats$Counter
+android.os.BatteryStats$DailyItem
+android.os.BatteryStats$HistoryEventTracker
+android.os.BatteryStats$HistoryItem
+android.os.BatteryStats$HistoryStepDetails
+android.os.BatteryStats$HistoryTag
+android.os.BatteryStats$IntToString
+android.os.BatteryStats$LevelStepTracker
+android.os.BatteryStats$LongCounter
+android.os.BatteryStats$LongCounterArray
+android.os.BatteryStats$PackageChange
+android.os.BatteryStats$Timer
+android.os.BatteryStats$Uid
+android.os.BatteryStats$Uid$Pid
+android.os.BatteryStats$Uid$Pkg
+android.os.BatteryStats$Uid$Pkg$Serv
+android.os.BatteryStats$Uid$Proc
+android.os.BatteryStats$Uid$Sensor
+android.os.BatteryStats$Uid$Wakelock
+android.os.Binder
+android.os.BinderProxy
+android.os.Build
+android.os.Build$VERSION
+android.os.Bundle
+android.os.Bundle$1
+android.os.CancellationSignal
+android.os.CancellationSignal$OnCancelListener
+android.os.CancellationSignal$Transport
+android.os.CommonTimeConfig$OnServerDiedListener
+android.os.ConditionVariable
+android.os.CountDownTimer
+android.os.CpuUsageInfo
+android.os.CpuUsageInfo$1
+android.os.DeadObjectException
+android.os.DeadSystemException
+android.os.Debug
+android.os.Debug$MemoryInfo
+android.os.Debug$MemoryInfo$1
+android.os.DropBoxManager
+android.os.DropBoxManager$Entry
+android.os.DropBoxManager$Entry$1
+android.os.Environment
+android.os.Environment$UserEnvironment
+android.os.FactoryTest
+android.os.FileBridge
+android.os.FileBridge$FileBridgeOutputStream
+android.os.FileObserver$ObserverThread
+android.os.FileUtils
+android.os.GraphicsEnvironment
+android.os.Handler
+android.os.Handler$BlockingRunnable
+android.os.Handler$Callback
+android.os.Handler$MessengerImpl
+android.os.HandlerThread
+android.os.HardwarePropertiesManager
+android.os.HwBinder
+android.os.HwBlob
+android.os.HwParcel
+android.os.HwRemoteBinder
+android.os.IBatteryPropertiesListener
+android.os.IBatteryPropertiesListener$Stub
+android.os.IBatteryPropertiesRegistrar
+android.os.IBatteryPropertiesRegistrar$Stub
+android.os.IBatteryPropertiesRegistrar$Stub$Proxy
+android.os.IBinder
+android.os.IBinder$DeathRecipient
+android.os.ICancellationSignal
+android.os.ICancellationSignal$Stub
+android.os.ICancellationSignal$Stub$Proxy
+android.os.IDeviceIdentifiersPolicyService
+android.os.IDeviceIdentifiersPolicyService$Stub
+android.os.IDeviceIdleController
+android.os.IDeviceIdleController$Stub
+android.os.IDeviceIdleController$Stub$Proxy
+android.os.IHardwarePropertiesManager
+android.os.IHardwarePropertiesManager$Stub
+android.os.IHardwarePropertiesManager$Stub$Proxy
+android.os.IHwBinder
+android.os.IHwBinder$DeathRecipient
+android.os.IHwInterface
+android.os.IIncidentManager
+android.os.IIncidentManager$Stub
+android.os.IInstalld
+android.os.IInstalld$Stub
+android.os.IInstalld$Stub$Proxy
+android.os.IInterface
+android.os.IMaintenanceActivityListener
+android.os.IMessenger
+android.os.IMessenger$Stub
+android.os.IMessenger$Stub$Proxy
+android.os.INetworkActivityListener
+android.os.INetworkManagementService
+android.os.INetworkManagementService$Stub
+android.os.INetworkManagementService$Stub$Proxy
+android.os.IPermissionController
+android.os.IPermissionController$Stub
+android.os.IPowerManager
+android.os.IPowerManager$Stub
+android.os.IPowerManager$Stub$Proxy
+android.os.IProcessInfoService
+android.os.IProcessInfoService$Stub
+android.os.IProgressListener
+android.os.IRecoverySystem
+android.os.IRecoverySystem$Stub
+android.os.IRecoverySystemProgressListener
+android.os.IRemoteCallback
+android.os.IRemoteCallback$Stub
+android.os.IRemoteCallback$Stub$Proxy
+android.os.ISchedulingPolicyService
+android.os.ISchedulingPolicyService$Stub
+android.os.IServiceManager
+android.os.IUpdateLock
+android.os.IUpdateLock$Stub
+android.os.IUserManager
+android.os.IUserManager$Stub
+android.os.IUserManager$Stub$Proxy
+android.os.IVibratorService
+android.os.IVibratorService$Stub
+android.os.IVibratorService$Stub$Proxy
+android.os.IncidentManager
+android.os.LocaleList
+android.os.LocaleList$1
+android.os.Looper
+android.os.MemoryFile
+android.os.Message
+android.os.Message$1
+android.os.MessageQueue
+android.os.MessageQueue$FileDescriptorRecord
+android.os.MessageQueue$IdleHandler
+android.os.MessageQueue$OnFileDescriptorEventListener
+android.os.Messenger
+android.os.Messenger$1
+android.os.OperationCanceledException
+android.os.Parcel
+android.os.Parcel$1
+android.os.Parcel$2
+android.os.Parcel$ReadWriteHelper
+android.os.ParcelFileDescriptor
+android.os.ParcelFileDescriptor$1
+android.os.ParcelFileDescriptor$2
+android.os.ParcelFileDescriptor$AutoCloseInputStream
+android.os.ParcelFileDescriptor$AutoCloseOutputStream
+android.os.ParcelFileDescriptor$OnCloseListener
+android.os.ParcelFileDescriptor$Status
+android.os.ParcelFormatException
+android.os.ParcelUuid
+android.os.ParcelUuid$1
+android.os.Parcelable
+android.os.Parcelable$ClassLoaderCreator
+android.os.Parcelable$Creator
+android.os.ParcelableException
+android.os.ParcelableException$1
+android.os.ParcelableParcel
+android.os.ParcelableParcel$1
+android.os.PatternMatcher
+android.os.PatternMatcher$1
+android.os.PersistableBundle
+android.os.PersistableBundle$1
+android.os.PersistableBundle$MyReadMapCallback
+android.os.PooledStringReader
+android.os.PooledStringWriter
+android.os.PowerManager
+android.os.PowerManager$WakeLock
+android.os.PowerManager$WakeLock$1
+android.os.PowerManagerInternal
+android.os.PowerManagerInternal$LowPowerModeListener
+android.os.PowerSaveState
+android.os.PowerSaveState$1
+android.os.PowerSaveState$Builder
+android.os.Process
+android.os.Process$ProcessStartResult
+android.os.RecoverySystem
+android.os.RecoverySystem$ProgressListener
+android.os.Registrant
+android.os.RegistrantList
+android.os.RemoteCallback
+android.os.RemoteCallback$1
+android.os.RemoteCallback$2
+android.os.RemoteCallback$OnResultListener
+android.os.RemoteCallbackList
+android.os.RemoteCallbackList$Callback
+android.os.RemoteException
+android.os.ResultReceiver
+android.os.ResultReceiver$1
+android.os.ResultReceiver$MyResultReceiver
+android.os.ResultReceiver$MyRunnable
+android.os.SELinux
+android.os.Seccomp
+android.os.ServiceManager
+android.os.ServiceManager$ServiceNotFoundException
+android.os.ServiceManagerNative
+android.os.ServiceManagerProxy
+android.os.ServiceSpecificException
+android.os.SharedMemory
+android.os.SharedMemory$1
+android.os.ShellCallback
+android.os.ShellCallback$1
+android.os.StatFs
+android.os.StrictMode
+android.os.StrictMode$1
+android.os.StrictMode$2
+android.os.StrictMode$3
+android.os.StrictMode$4
+android.os.StrictMode$5
+android.os.StrictMode$6
+android.os.StrictMode$7
+android.os.StrictMode$8
+android.os.StrictMode$9
+android.os.StrictMode$AndroidBlockGuardPolicy
+android.os.StrictMode$AndroidBlockGuardPolicy$1
+android.os.StrictMode$AndroidCloseGuardReporter
+android.os.StrictMode$InstanceCountViolation
+android.os.StrictMode$InstanceTracker
+android.os.StrictMode$LogStackTrace
+android.os.StrictMode$Span
+android.os.StrictMode$StrictModeCustomViolation
+android.os.StrictMode$StrictModeDiskReadViolation
+android.os.StrictMode$StrictModeDiskWriteViolation
+android.os.StrictMode$StrictModeViolation
+android.os.StrictMode$ThreadPolicy
+android.os.StrictMode$ThreadPolicy$Builder
+android.os.StrictMode$ThreadSpanState
+android.os.StrictMode$ViolationInfo
+android.os.StrictMode$ViolationInfo$1
+android.os.StrictMode$VmPolicy
+android.os.StrictMode$VmPolicy$Builder
+android.os.SynchronousResultReceiver
+android.os.SynchronousResultReceiver$Result
+android.os.SystemClock
+android.os.SystemProperties
+android.os.SystemService
+android.os.SystemService$1
+android.os.SystemService$State
+android.os.SystemVibrator
+android.os.TokenWatcher
+android.os.TokenWatcher$1
+android.os.Trace
+android.os.Trace$1
+android.os.TransactionTooLargeException
+android.os.UEventObserver
+android.os.UEventObserver$UEvent
+android.os.UEventObserver$UEventThread
+android.os.UpdateLock
+android.os.UserHandle
+android.os.UserHandle$1
+android.os.UserManager
+android.os.UserManager$EnforcingUser
+android.os.UserManager$EnforcingUser$1
+android.os.UserManagerInternal
+android.os.UserManagerInternal$UserRestrictionsListener
+android.os.VibrationEffect
+android.os.VibrationEffect$1
+android.os.VibrationEffect$OneShot
+android.os.VibrationEffect$Prebaked
+android.os.VibrationEffect$Prebaked$1
+android.os.VibrationEffect$Waveform
+android.os.VibrationEffect$Waveform$1
+android.os.Vibrator
+android.os.VintfObject
+android.os.VintfRuntimeInfo
+android.os.WorkSource
+android.os.WorkSource$1
+android.os.ZygoteProcess
+android.os.ZygoteProcess$ZygoteState
+android.os.ZygoteStartFailedEx
+android.os.health.HealthStatsParceler
+android.os.health.SystemHealthManager
+android.os.storage.DiskInfo
+android.os.storage.DiskInfo$1
+android.os.storage.IObbActionListener
+android.os.storage.IObbActionListener$Stub
+android.os.storage.IStorageEventListener
+android.os.storage.IStorageEventListener$Stub
+android.os.storage.IStorageEventListener$Stub$Proxy
+android.os.storage.IStorageManager
+android.os.storage.IStorageManager$Stub
+android.os.storage.IStorageManager$Stub$Proxy
+android.os.storage.IStorageShutdownObserver
+android.os.storage.StorageEventListener
+android.os.storage.StorageManager
+android.os.storage.StorageManager$ObbActionListener
+android.os.storage.StorageManager$StorageEventListenerDelegate
+android.os.storage.StorageManagerInternal
+android.os.storage.StorageManagerInternal$ExternalStorageMountPolicy
+android.os.storage.StorageVolume
+android.os.storage.StorageVolume$1
+android.os.storage.VolumeInfo
+android.os.storage.VolumeInfo$1
+android.os.storage.VolumeInfo$2
+android.os.storage.VolumeRecord
+android.os.storage.VolumeRecord$1
+android.preference.GenericInflater$Parent
+android.preference.Preference
+android.preference.Preference$BaseSavedState
+android.preference.Preference$BaseSavedState$1
+android.preference.Preference$OnPreferenceChangeListener
+android.preference.PreferenceActivity
+android.preference.PreferenceFragment
+android.preference.PreferenceFragment$OnPreferenceStartFragmentCallback
+android.preference.PreferenceGroup
+android.preference.PreferenceManager
+android.preference.PreferenceManager$OnPreferenceTreeClickListener
+android.preference.PreferenceScreen
+android.print.IPrintDocumentAdapter
+android.print.IPrintJobStateChangeListener
+android.print.IPrintManager
+android.print.IPrintManager$Stub
+android.print.IPrintServicesChangeListener
+android.print.IPrintSpooler
+android.print.IPrintSpooler$Stub
+android.print.IPrintSpooler$Stub$Proxy
+android.print.IPrintSpoolerCallbacks
+android.print.IPrintSpoolerCallbacks$Stub
+android.print.IPrintSpoolerClient
+android.print.IPrintSpoolerClient$Stub
+android.print.IPrinterDiscoveryObserver
+android.print.PageRange
+android.print.PrintAttributes
+android.print.PrintDocumentAdapter
+android.print.PrintDocumentAdapter$LayoutResultCallback
+android.print.PrintDocumentAdapter$WriteResultCallback
+android.print.PrintJobId
+android.print.PrintJobInfo
+android.print.PrintManager
+android.print.PrinterId
+android.printservice.IPrintServiceClient
+android.printservice.IPrintServiceClient$Stub
+android.printservice.PrintServiceInfo
+android.printservice.PrintServiceInfo$1
+android.printservice.recommendation.IRecommendationsChangeListener
+android.provider.-$Lambda$87WmhkvObehVg0OMBzwa_MTVV8g
+android.provider.-$Lambda$a7Jyr6j_Mb70hHJ2ssL1AAhKh4c
+android.provider.-$Lambda$asz6VwQ86PPY-v8JLMb7rx-pSqg
+android.provider.BaseColumns
+android.provider.BlockedNumberContract
+android.provider.BlockedNumberContract$BlockedNumbers
+android.provider.CalendarContract
+android.provider.CalendarContract$Attendees
+android.provider.CalendarContract$AttendeesColumns
+android.provider.CalendarContract$CalendarAlerts
+android.provider.CalendarContract$CalendarAlertsColumns
+android.provider.CalendarContract$CalendarCache
+android.provider.CalendarContract$CalendarCacheColumns
+android.provider.CalendarContract$CalendarColumns
+android.provider.CalendarContract$CalendarSyncColumns
+android.provider.CalendarContract$Calendars
+android.provider.CalendarContract$Colors
+android.provider.CalendarContract$ColorsColumns
+android.provider.CalendarContract$Events
+android.provider.CalendarContract$EventsColumns
+android.provider.CalendarContract$ExtendedProperties
+android.provider.CalendarContract$ExtendedPropertiesColumns
+android.provider.CalendarContract$Instances
+android.provider.CalendarContract$Reminders
+android.provider.CalendarContract$RemindersColumns
+android.provider.CalendarContract$SyncColumns
+android.provider.CallLog
+android.provider.CallLog$Calls
+android.provider.ContactsContract
+android.provider.ContactsContract$BaseSyncColumns
+android.provider.ContactsContract$CommonDataKinds$BaseTypes
+android.provider.ContactsContract$CommonDataKinds$Callable
+android.provider.ContactsContract$CommonDataKinds$CommonColumns
+android.provider.ContactsContract$CommonDataKinds$Email
+android.provider.ContactsContract$CommonDataKinds$Event
+android.provider.ContactsContract$CommonDataKinds$Im
+android.provider.ContactsContract$CommonDataKinds$Phone
+android.provider.ContactsContract$CommonDataKinds$Relation
+android.provider.ContactsContract$CommonDataKinds$StructuredPostal
+android.provider.ContactsContract$ContactCounts
+android.provider.ContactsContract$ContactNameColumns
+android.provider.ContactsContract$ContactOptionsColumns
+android.provider.ContactsContract$ContactStatusColumns
+android.provider.ContactsContract$Contacts
+android.provider.ContactsContract$ContactsColumns
+android.provider.ContactsContract$Data
+android.provider.ContactsContract$DataColumns
+android.provider.ContactsContract$DataColumnsWithJoins
+android.provider.ContactsContract$DataUsageFeedback
+android.provider.ContactsContract$DataUsageStatColumns
+android.provider.ContactsContract$DeletedContacts
+android.provider.ContactsContract$DeletedContactsColumns
+android.provider.ContactsContract$Directory
+android.provider.ContactsContract$DisplayPhoto
+android.provider.ContactsContract$Groups
+android.provider.ContactsContract$GroupsColumns
+android.provider.ContactsContract$MetadataSync
+android.provider.ContactsContract$MetadataSyncColumns
+android.provider.ContactsContract$PhoneLookup
+android.provider.ContactsContract$PhoneLookupColumns
+android.provider.ContactsContract$Profile
+android.provider.ContactsContract$ProviderStatus
+android.provider.ContactsContract$RawContacts
+android.provider.ContactsContract$RawContactsColumns
+android.provider.ContactsContract$RawContactsEntity
+android.provider.ContactsContract$StatusColumns
+android.provider.ContactsContract$SyncColumns
+android.provider.DocumentsContract
+android.provider.DocumentsContract$Path
+android.provider.DocumentsProvider
+android.provider.Downloads
+android.provider.Downloads$Impl
+android.provider.FontsContract
+android.provider.FontsContract$1
+android.provider.MediaStore$Audio
+android.provider.MediaStore$Audio$AlbumColumns
+android.provider.MediaStore$Audio$Albums
+android.provider.MediaStore$Audio$AudioColumns
+android.provider.MediaStore$Audio$Media
+android.provider.MediaStore$Audio$Playlists
+android.provider.MediaStore$Audio$PlaylistsColumns
+android.provider.MediaStore$Files
+android.provider.MediaStore$Images$ImageColumns
+android.provider.MediaStore$Images$Media
+android.provider.MediaStore$Images$Thumbnails
+android.provider.MediaStore$MediaColumns
+android.provider.MediaStore$Video$Media
+android.provider.MediaStore$Video$VideoColumns
+android.provider.OpenableColumns
+android.provider.SearchIndexableData
+android.provider.SearchIndexableResource
+android.provider.SearchIndexablesProvider
+android.provider.SearchRecentSuggestions
+android.provider.Settings
+android.provider.Settings$ContentProviderHolder
+android.provider.Settings$GenerationTracker
+android.provider.Settings$Global
+android.provider.Settings$NameValueCache
+android.provider.Settings$NameValueTable
+android.provider.Settings$Secure
+android.provider.Settings$SettingNotFoundException
+android.provider.Settings$System
+android.provider.Settings$System$1
+android.provider.Settings$System$2
+android.provider.Settings$System$3
+android.provider.Settings$System$4
+android.provider.Settings$System$5
+android.provider.Settings$System$6
+android.provider.Settings$System$7
+android.provider.Settings$System$8
+android.provider.Settings$System$9
+android.provider.Settings$System$DiscreteValueValidator
+android.provider.Settings$System$InclusiveFloatRangeValidator
+android.provider.Settings$System$InclusiveIntegerRangeValidator
+android.provider.Settings$System$Validator
+android.provider.SyncStateContract$Columns
+android.provider.Telephony$BaseMmsColumns
+android.provider.Telephony$Carriers
+android.provider.Telephony$Mms
+android.provider.Telephony$MmsSms
+android.provider.Telephony$ServiceStateTable
+android.provider.Telephony$Sms
+android.provider.Telephony$TextBasedSmsColumns
+android.provider.Telephony$Threads
+android.provider.Telephony$ThreadsColumns
+android.provider.UserDictionary$Words
+android.provider.VoicemailContract$Status
+android.provider.VoicemailContract$Voicemails
+android.renderscript.Allocation
+android.renderscript.BaseObj
+android.renderscript.Matrix4f
+android.renderscript.RenderScriptCacheDir
+android.security.GateKeeper
+android.security.IKeyChainService
+android.security.IKeyChainService$Stub
+android.security.IKeyChainService$Stub$Proxy
+android.security.IKeystoreService
+android.security.IKeystoreService$Stub
+android.security.IKeystoreService$Stub$Proxy
+android.security.KeyChain
+android.security.KeyChain$1
+android.security.KeyChain$KeyChainConnection
+android.security.KeyStore
+android.security.NetworkSecurityPolicy
+android.security.keymaster.IKeyAttestationApplicationIdProvider
+android.security.keymaster.IKeyAttestationApplicationIdProvider$Stub
+android.security.keymaster.KeyAttestationApplicationId
+android.security.keymaster.KeymasterArguments
+android.security.keymaster.KeymasterArguments$1
+android.security.keystore.AndroidKeyStoreBCWorkaroundProvider
+android.security.keystore.AndroidKeyStoreKeyGeneratorSpi
+android.security.keystore.AndroidKeyStoreKeyGeneratorSpi$AES
+android.security.keystore.AndroidKeyStoreProvider
+android.security.keystore.AndroidKeyStoreSpi
+android.security.keystore.ArrayUtils
+android.security.keystore.KeyGenParameterSpec
+android.security.keystore.KeyGenParameterSpec$Builder
+android.security.keystore.KeyInfo
+android.security.keystore.KeyPermanentlyInvalidatedException
+android.security.keystore.KeyProperties
+android.security.keystore.KeyProperties$BlockMode
+android.security.keystore.KeyProperties$EncryptionPadding
+android.security.keystore.KeyProperties$Purpose
+android.security.keystore.KeymasterUtils
+android.security.keystore.UserNotAuthenticatedException
+android.security.keystore.Utils
+android.security.net.config.ApplicationConfig
+android.security.net.config.CertificateSource
+android.security.net.config.CertificatesEntryRef
+android.security.net.config.ConfigNetworkSecurityPolicy
+android.security.net.config.ConfigSource
+android.security.net.config.DirectoryCertificateSource
+android.security.net.config.DirectoryCertificateSource$1
+android.security.net.config.DirectoryCertificateSource$3
+android.security.net.config.DirectoryCertificateSource$CertSelector
+android.security.net.config.KeyStoreCertificateSource
+android.security.net.config.KeyStoreConfigSource
+android.security.net.config.ManifestConfigSource
+android.security.net.config.ManifestConfigSource$DefaultConfigSource
+android.security.net.config.NetworkSecurityConfig
+android.security.net.config.NetworkSecurityConfig$1
+android.security.net.config.NetworkSecurityConfig$Builder
+android.security.net.config.NetworkSecurityConfigProvider
+android.security.net.config.NetworkSecurityTrustManager
+android.security.net.config.PinSet
+android.security.net.config.RootTrustManager
+android.security.net.config.RootTrustManagerFactorySpi
+android.security.net.config.SystemCertificateSource
+android.security.net.config.TrustedCertificateStoreAdapter
+android.security.net.config.UserCertificateSource
+android.security.net.config.XmlConfigSource
+android.security.net.config.XmlConfigSource$ParserException
+android.service.autofill.-$Lambda$svbjmB3NFhHnuZrn67G14PFSJlY
+android.service.autofill.AutofillService
+android.service.autofill.AutofillService$1
+android.service.autofill.AutofillServiceInfo
+android.service.autofill.FillCallback
+android.service.autofill.FillContext
+android.service.autofill.FillContext$1
+android.service.autofill.FillEventHistory
+android.service.autofill.FillRequest
+android.service.autofill.FillRequest$1
+android.service.autofill.FillResponse
+android.service.autofill.IAutoFillService
+android.service.autofill.IAutoFillService$Stub
+android.service.autofill.IAutoFillService$Stub$Proxy
+android.service.autofill.IFillCallback
+android.service.autofill.IFillCallback$Stub
+android.service.autofill.IFillCallback$Stub$Proxy
+android.service.autofill.SaveCallback
+android.service.autofill.SaveRequest
+android.service.carrier.CarrierIdentifier
+android.service.carrier.CarrierIdentifier$1
+android.service.carrier.ICarrierService
+android.service.carrier.ICarrierService$Stub
+android.service.carrier.ICarrierService$Stub$Proxy
+android.service.dreams.DreamManagerInternal
+android.service.dreams.IDreamManager
+android.service.dreams.IDreamManager$Stub
+android.service.dreams.IDreamManager$Stub$Proxy
+android.service.gatekeeper.IGateKeeperService
+android.service.gatekeeper.IGateKeeperService$Stub
+android.service.gatekeeper.IGateKeeperService$Stub$Proxy
+android.service.media.IMediaBrowserService
+android.service.media.IMediaBrowserService$Stub
+android.service.media.IMediaBrowserService$Stub$Proxy
+android.service.media.IMediaBrowserServiceCallbacks
+android.service.media.IMediaBrowserServiceCallbacks$Stub
+android.service.notification.Adjustment
+android.service.notification.Condition
+android.service.notification.Condition$1
+android.service.notification.ConditionProviderService
+android.service.notification.ConditionProviderService$H
+android.service.notification.ConditionProviderService$Provider
+android.service.notification.IConditionListener
+android.service.notification.IConditionListener$Stub
+android.service.notification.IConditionProvider
+android.service.notification.IConditionProvider$Stub
+android.service.notification.INotificationListener
+android.service.notification.INotificationListener$Stub
+android.service.notification.INotificationListener$Stub$Proxy
+android.service.notification.IStatusBarNotificationHolder
+android.service.notification.IStatusBarNotificationHolder$Stub
+android.service.notification.IStatusBarNotificationHolder$Stub$Proxy
+android.service.notification.NotificationListenerService
+android.service.notification.NotificationListenerService$MyHandler
+android.service.notification.NotificationListenerService$NotificationListenerWrapper
+android.service.notification.NotificationListenerService$Ranking
+android.service.notification.NotificationListenerService$RankingMap
+android.service.notification.NotificationListenerService$RankingMap$1
+android.service.notification.NotificationRankingUpdate
+android.service.notification.NotificationRankingUpdate$1
+android.service.notification.StatusBarNotification
+android.service.notification.StatusBarNotification$1
+android.service.notification.ZenModeConfig
+android.service.notification.ZenModeConfig$1
+android.service.notification.ZenModeConfig$Diff
+android.service.notification.ZenModeConfig$EventInfo
+android.service.notification.ZenModeConfig$ScheduleInfo
+android.service.notification.ZenModeConfig$ZenRule
+android.service.notification.ZenModeConfig$ZenRule$1
+android.service.oemlock.IOemLockService
+android.service.oemlock.IOemLockService$Stub
+android.service.oemlock.OemLockManager
+android.service.persistentdata.IPersistentDataBlockService
+android.service.persistentdata.IPersistentDataBlockService$Stub
+android.service.persistentdata.IPersistentDataBlockService$Stub$Proxy
+android.service.persistentdata.PersistentDataBlockManager
+android.service.quicksettings.IQSService
+android.service.quicksettings.IQSService$Stub
+android.service.quicksettings.Tile
+android.service.textservice.SpellCheckerService
+android.service.textservice.SpellCheckerService$InternalISpellCheckerSession
+android.service.textservice.SpellCheckerService$Session
+android.service.textservice.SpellCheckerService$SpellCheckerServiceBinder
+android.service.voice.AlwaysOnHotwordDetector
+android.service.voice.AlwaysOnHotwordDetector$Callback
+android.service.voice.AlwaysOnHotwordDetector$EventPayload
+android.service.voice.AlwaysOnHotwordDetector$MyHandler
+android.service.voice.AlwaysOnHotwordDetector$RefreshAvailabiltyTask
+android.service.voice.AlwaysOnHotwordDetector$SoundTriggerListener
+android.service.voice.IVoiceInteractionService
+android.service.voice.IVoiceInteractionService$Stub
+android.service.voice.IVoiceInteractionService$Stub$Proxy
+android.service.voice.IVoiceInteractionSession
+android.service.voice.VoiceInteractionManagerInternal
+android.service.voice.VoiceInteractionService
+android.service.voice.VoiceInteractionService$1
+android.service.voice.VoiceInteractionService$MyHandler
+android.service.voice.VoiceInteractionServiceInfo
+android.service.vr.IPersistentVrStateCallbacks
+android.service.vr.IPersistentVrStateCallbacks$Stub
+android.service.vr.IVrManager
+android.service.vr.IVrManager$Stub
+android.service.vr.IVrManager$Stub$Proxy
+android.service.vr.IVrStateCallbacks
+android.service.vr.IVrStateCallbacks$Stub
+android.service.vr.IVrStateCallbacks$Stub$Proxy
+android.service.wallpaper.IWallpaperConnection
+android.service.wallpaper.IWallpaperConnection$Stub
+android.service.wallpaper.IWallpaperConnection$Stub$Proxy
+android.service.wallpaper.IWallpaperEngine
+android.service.wallpaper.IWallpaperEngine$Stub
+android.service.wallpaper.IWallpaperEngine$Stub$Proxy
+android.service.wallpaper.IWallpaperService
+android.service.wallpaper.IWallpaperService$Stub
+android.service.wallpaper.IWallpaperService$Stub$Proxy
+android.service.wallpaper.WallpaperService
+android.service.wallpaper.WallpaperService$Engine
+android.service.wallpaper.WallpaperService$Engine$1
+android.service.wallpaper.WallpaperService$Engine$2
+android.service.wallpaper.WallpaperService$Engine$3
+android.service.wallpaper.WallpaperService$Engine$WallpaperInputEventReceiver
+android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper
+android.service.wallpaper.WallpaperService$IWallpaperServiceWrapper
+android.service.wallpaper.WallpaperService$WallpaperCommand
+android.speech.SpeechRecognizer
+android.speech.tts.AbstractEventLogger
+android.speech.tts.AbstractSynthesisCallback
+android.speech.tts.AudioPlaybackHandler
+android.speech.tts.AudioPlaybackHandler$MessageLoop
+android.speech.tts.EventLogger
+android.speech.tts.FileSynthesisCallback
+android.speech.tts.ITextToSpeechCallback
+android.speech.tts.ITextToSpeechCallback$Stub
+android.speech.tts.ITextToSpeechCallback$Stub$Proxy
+android.speech.tts.ITextToSpeechService
+android.speech.tts.ITextToSpeechService$Stub
+android.speech.tts.ITextToSpeechService$Stub$Proxy
+android.speech.tts.SynthesisCallback
+android.speech.tts.SynthesisRequest
+android.speech.tts.TextToSpeech
+android.speech.tts.TextToSpeech$10
+android.speech.tts.TextToSpeech$16
+android.speech.tts.TextToSpeech$17
+android.speech.tts.TextToSpeech$7
+android.speech.tts.TextToSpeech$Action
+android.speech.tts.TextToSpeech$Connection
+android.speech.tts.TextToSpeech$Connection$1
+android.speech.tts.TextToSpeech$Connection$SetupConnectionAsyncTask
+android.speech.tts.TextToSpeech$EngineInfo
+android.speech.tts.TextToSpeech$OnInitListener
+android.speech.tts.TextToSpeechService
+android.speech.tts.TextToSpeechService$1
+android.speech.tts.TextToSpeechService$CallbackMap
+android.speech.tts.TextToSpeechService$SpeechItem
+android.speech.tts.TextToSpeechService$SynthHandler
+android.speech.tts.TextToSpeechService$SynthHandler$1
+android.speech.tts.TextToSpeechService$SynthHandler$2
+android.speech.tts.TextToSpeechService$SynthThread
+android.speech.tts.TextToSpeechService$SynthesisSpeechItem
+android.speech.tts.TextToSpeechService$SynthesisToFileOutputStreamSpeechItem
+android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher
+android.speech.tts.TextToSpeechService$UtteranceSpeechItem
+android.speech.tts.TextToSpeechService$UtteranceSpeechItemWithParams
+android.speech.tts.TtsEngines
+android.speech.tts.TtsEngines$EngineInfoComparator
+android.speech.tts.UtteranceProgressListener
+android.system.ErrnoException
+android.system.GaiException
+android.system.NetlinkSocketAddress
+android.system.Os
+android.system.OsConstants
+android.system.PacketSocketAddress
+android.system.StructAddrinfo
+android.system.StructFlock
+android.system.StructGroupReq
+android.system.StructGroupSourceReq
+android.system.StructIcmpHdr
+android.system.StructIfaddrs
+android.system.StructLinger
+android.system.StructPasswd
+android.system.StructPollfd
+android.system.StructStat
+android.system.StructStatVfs
+android.system.StructTimespec
+android.system.StructTimeval
+android.system.StructUcred
+android.system.StructUtsname
+android.system.UnixSocketAddress
+android.telecom.-$Lambda$afyb_ODGzn3xMew6fjs8ANSIdVo
+android.telecom.CallAudioState
+android.telecom.CallAudioState$1
+android.telecom.Conference
+android.telecom.Conference$Listener
+android.telecom.Conferenceable
+android.telecom.Connection
+android.telecom.Connection$1
+android.telecom.Connection$2
+android.telecom.Connection$FailureSignalingConnection
+android.telecom.Connection$Listener
+android.telecom.ConnectionRequest
+android.telecom.ConnectionRequest$1
+android.telecom.ConnectionRequest$Builder
+android.telecom.ConnectionService
+android.telecom.ConnectionService$1
+android.telecom.ConnectionService$2
+android.telecom.ConnectionService$2$1
+android.telecom.ConnectionService$3
+android.telecom.ConnectionService$4
+android.telecom.ConnectionService$5
+android.telecom.ConnectionService$5$1
+android.telecom.ConnectionServiceAdapter
+android.telecom.DefaultDialerManager
+android.telecom.DisconnectCause
+android.telecom.DisconnectCause$1
+android.telecom.Log
+android.telecom.Log$1
+android.telecom.Logging.-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24
+android.telecom.Logging.-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24$1
+android.telecom.Logging.-$Lambda$OwO3BlCgqcOx28O1BaOAPVPor24$2
+android.telecom.Logging.EventManager
+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.Runnable
+android.telecom.Logging.Runnable$1
+android.telecom.Logging.Session
+android.telecom.Logging.Session$Info
+android.telecom.Logging.Session$Info$1
+android.telecom.Logging.SessionManager
+android.telecom.Logging.SessionManager$ICurrentThreadId
+android.telecom.Logging.SessionManager$ISessionCleanupTimeoutMs
+android.telecom.Logging.SessionManager$ISessionIdQueryHandler
+android.telecom.Logging.SessionManager$ISessionListener
+android.telecom.ParcelableCall
+android.telecom.ParcelableCall$1
+android.telecom.ParcelableConference
+android.telecom.ParcelableConnection
+android.telecom.ParcelableConnection$1
+android.telecom.PhoneAccount
+android.telecom.PhoneAccount$1
+android.telecom.PhoneAccount$Builder
+android.telecom.PhoneAccountHandle
+android.telecom.PhoneAccountHandle$1
+android.telecom.RemoteConnectionManager
+android.telecom.StatusHints
+android.telecom.TelecomAnalytics
+android.telecom.TelecomManager
+android.telecom.VideoProfile
+android.telecom.VideoProfile$1
+android.telephony.CarrierConfigManager
+android.telephony.CellIdentityLte
+android.telephony.CellIdentityLte$1
+android.telephony.CellIdentityWcdma
+android.telephony.CellIdentityWcdma$1
+android.telephony.CellInfo
+android.telephony.CellInfo$1
+android.telephony.CellInfoCdma
+android.telephony.CellInfoGsm
+android.telephony.CellInfoLte
+android.telephony.CellInfoLte$1
+android.telephony.CellInfoWcdma
+android.telephony.CellInfoWcdma$1
+android.telephony.CellLocation
+android.telephony.CellSignalStrength
+android.telephony.CellSignalStrengthLte
+android.telephony.CellSignalStrengthLte$1
+android.telephony.CellSignalStrengthWcdma
+android.telephony.CellSignalStrengthWcdma$1
+android.telephony.ClientRequestStats
+android.telephony.ClientRequestStats$1
+android.telephony.DisconnectCause
+android.telephony.IccOpenLogicalChannelResponse
+android.telephony.ModemActivityInfo
+android.telephony.PhoneNumberFormattingTextWatcher
+android.telephony.PhoneNumberUtils
+android.telephony.PhoneStateListener
+android.telephony.PhoneStateListener$1
+android.telephony.PhoneStateListener$IPhoneStateListenerStub
+android.telephony.PreciseCallState
+android.telephony.PreciseCallState$1
+android.telephony.PreciseDataConnectionState
+android.telephony.PreciseDataConnectionState$1
+android.telephony.RadioAccessFamily
+android.telephony.Rlog
+android.telephony.ServiceState
+android.telephony.ServiceState$1
+android.telephony.SignalStrength
+android.telephony.SignalStrength$1
+android.telephony.SmsManager
+android.telephony.SmsMessage
+android.telephony.SubscriptionInfo
+android.telephony.SubscriptionInfo$1
+android.telephony.SubscriptionManager
+android.telephony.SubscriptionManager$OnSubscriptionsChangedListener
+android.telephony.SubscriptionManager$OnSubscriptionsChangedListener$1
+android.telephony.SubscriptionManager$OnSubscriptionsChangedListener$2
+android.telephony.TelephonyHistogram
+android.telephony.TelephonyHistogram$1
+android.telephony.TelephonyManager
+android.telephony.TelephonyManager$MultiSimVariants
+android.telephony.VisualVoicemailSmsFilterSettings
+android.telephony.VoLteServiceState
+android.telephony.VoLteServiceState$1
+android.telephony.euicc.EuiccManager
+android.telephony.gsm.GsmCellLocation
+android.telephony.ims.ImsServiceProxy$INotifyStatusChanged
+android.telephony.ims.ImsServiceProxyCompat
+android.telephony.ims.feature.IMMTelFeature
+android.telephony.ims.stub.ImsConfigImplBase
+android.telephony.ims.stub.ImsEcbmImplBase
+android.telephony.ims.stub.ImsUtImplBase
+android.telephony.ims.stub.ImsUtListenerImplBase
+android.text.AndroidBidi
+android.text.AndroidCharacter
+android.text.Annotation
+android.text.BidiFormatter
+android.text.BidiFormatter$DirectionalityEstimator
+android.text.BoringLayout
+android.text.BoringLayout$Metrics
+android.text.CharSequenceCharacterIterator
+android.text.ClipboardManager
+android.text.DynamicLayout
+android.text.DynamicLayout$ChangeWatcher
+android.text.Editable
+android.text.Editable$Factory
+android.text.FontConfig
+android.text.FontConfig$Alias
+android.text.FontConfig$Family
+android.text.FontConfig$Font
+android.text.GetChars
+android.text.GraphicsOperations
+android.text.Html
+android.text.Html$HtmlParser
+android.text.Html$TagHandler
+android.text.HtmlToSpannedConverter
+android.text.HtmlToSpannedConverter$Bold
+android.text.HtmlToSpannedConverter$Href
+android.text.Hyphenator
+android.text.Hyphenator$HyphenationData
+android.text.InputFilter
+android.text.InputFilter$LengthFilter
+android.text.InputType
+android.text.Layout
+android.text.Layout$Alignment
+android.text.Layout$Directions
+android.text.Layout$Ellipsizer
+android.text.Layout$SpannedEllipsizer
+android.text.MeasuredText
+android.text.NoCopySpan
+android.text.NoCopySpan$Concrete
+android.text.PackedIntVector
+android.text.PackedObjectVector
+android.text.ParcelableSpan
+android.text.Selection
+android.text.Selection$END
+android.text.Selection$PositionIterator
+android.text.Selection$START
+android.text.SpanSet
+android.text.SpanWatcher
+android.text.Spannable
+android.text.Spannable$Factory
+android.text.SpannableString
+android.text.SpannableStringBuilder
+android.text.SpannableStringInternal
+android.text.Spanned
+android.text.SpannedString
+android.text.StaticLayout
+android.text.StaticLayout$Builder
+android.text.StaticLayout$LineBreaks
+android.text.TextDirectionHeuristic
+android.text.TextDirectionHeuristics
+android.text.TextDirectionHeuristics$AnyStrong
+android.text.TextDirectionHeuristics$FirstStrong
+android.text.TextDirectionHeuristics$TextDirectionAlgorithm
+android.text.TextDirectionHeuristics$TextDirectionHeuristicImpl
+android.text.TextDirectionHeuristics$TextDirectionHeuristicInternal
+android.text.TextDirectionHeuristics$TextDirectionHeuristicLocale
+android.text.TextLine
+android.text.TextLine$DecorationInfo
+android.text.TextPaint
+android.text.TextUtils
+android.text.TextUtils$1
+android.text.TextUtils$EllipsizeCallback
+android.text.TextUtils$SimpleStringSplitter
+android.text.TextUtils$StringSplitter
+android.text.TextUtils$TruncateAt
+android.text.TextWatcher
+android.text.format.DateFormat
+android.text.format.DateUtils
+android.text.format.Formatter
+android.text.format.Formatter$BytesResult
+android.text.format.Time
+android.text.format.Time$TimeCalculator
+android.text.format.TimeFormatter
+android.text.method.AllCapsTransformationMethod
+android.text.method.ArrowKeyMovementMethod
+android.text.method.BaseKeyListener
+android.text.method.BaseMovementMethod
+android.text.method.DialerKeyListener
+android.text.method.KeyListener
+android.text.method.LinkMovementMethod
+android.text.method.MetaKeyKeyListener
+android.text.method.MovementMethod
+android.text.method.NumberKeyListener
+android.text.method.PasswordTransformationMethod
+android.text.method.QwertyKeyListener
+android.text.method.QwertyKeyListener$Replaced
+android.text.method.ReplacementTransformationMethod
+android.text.method.ReplacementTransformationMethod$ReplacementCharSequence
+android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence
+android.text.method.ScrollingMovementMethod
+android.text.method.SingleLineTransformationMethod
+android.text.method.TextKeyListener
+android.text.method.TextKeyListener$Capitalize
+android.text.method.TextKeyListener$SettingsObserver
+android.text.method.Touch
+android.text.method.Touch$DragState
+android.text.method.TransformationMethod
+android.text.method.TransformationMethod2
+android.text.method.WordIterator
+android.text.style.AlignmentSpan
+android.text.style.BackgroundColorSpan
+android.text.style.CharacterStyle
+android.text.style.CharacterStyle$Passthrough
+android.text.style.ClickableSpan
+android.text.style.DynamicDrawableSpan
+android.text.style.EasyEditSpan
+android.text.style.ForegroundColorSpan
+android.text.style.ImageSpan
+android.text.style.LeadingMarginSpan
+android.text.style.LeadingMarginSpan$LeadingMarginSpan2
+android.text.style.LeadingMarginSpan$Standard
+android.text.style.LineBackgroundSpan
+android.text.style.LineHeightSpan
+android.text.style.LineHeightSpan$WithDensity
+android.text.style.MetricAffectingSpan
+android.text.style.MetricAffectingSpan$Passthrough
+android.text.style.ParagraphStyle
+android.text.style.RelativeSizeSpan
+android.text.style.ReplacementSpan
+android.text.style.SpellCheckSpan
+android.text.style.StrikethroughSpan
+android.text.style.StyleSpan
+android.text.style.SuggestionSpan
+android.text.style.SuggestionSpan$1
+android.text.style.TabStopSpan
+android.text.style.TextAppearanceSpan
+android.text.style.TtsSpan
+android.text.style.TtsSpan$Builder
+android.text.style.TtsSpan$SemioticClassBuilder
+android.text.style.TtsSpan$TelephoneBuilder
+android.text.style.TtsSpan$VerbatimBuilder
+android.text.style.TypefaceSpan
+android.text.style.URLSpan
+android.text.style.UnderlineSpan
+android.text.style.UpdateAppearance
+android.text.style.UpdateLayout
+android.text.style.WrapTogetherSpan
+android.text.util.Linkify
+android.text.util.Linkify$1
+android.text.util.Linkify$2
+android.text.util.Linkify$3
+android.text.util.Linkify$4
+android.text.util.Linkify$MatchFilter
+android.text.util.Linkify$TransformFilter
+android.text.util.Rfc822Token
+android.text.util.Rfc822Tokenizer
+android.transition.ArcMotion
+android.transition.AutoTransition
+android.transition.ChangeBounds
+android.transition.ChangeBounds$1
+android.transition.ChangeBounds$2
+android.transition.ChangeBounds$3
+android.transition.ChangeBounds$4
+android.transition.ChangeBounds$5
+android.transition.ChangeBounds$6
+android.transition.ChangeBounds$9
+android.transition.ChangeClipBounds
+android.transition.ChangeImageTransform
+android.transition.ChangeImageTransform$1
+android.transition.ChangeImageTransform$2
+android.transition.ChangeTransform
+android.transition.ChangeTransform$1
+android.transition.ChangeTransform$2
+android.transition.ChangeTransform$3
+android.transition.ChangeTransform$GhostListener
+android.transition.ChangeTransform$PathAnimatorMatrix
+android.transition.ChangeTransform$Transforms
+android.transition.CircularPropagation
+android.transition.Explode
+android.transition.Fade
+android.transition.Fade$1
+android.transition.Fade$FadeAnimatorListener
+android.transition.PathMotion
+android.transition.Scene
+android.transition.SidePropagation
+android.transition.Slide
+android.transition.Slide$1
+android.transition.Slide$2
+android.transition.Slide$3
+android.transition.Slide$4
+android.transition.Slide$5
+android.transition.Slide$6
+android.transition.Slide$CalculateSlide
+android.transition.Slide$CalculateSlideHorizontal
+android.transition.Slide$CalculateSlideVertical
+android.transition.Transition
+android.transition.Transition$1
+android.transition.Transition$2
+android.transition.Transition$3
+android.transition.Transition$AnimationInfo
+android.transition.Transition$ArrayListManager
+android.transition.Transition$EpicenterCallback
+android.transition.Transition$TransitionListener
+android.transition.TransitionInflater
+android.transition.TransitionListenerAdapter
+android.transition.TransitionManager
+android.transition.TransitionManager$MultiListener
+android.transition.TransitionManager$MultiListener$1
+android.transition.TransitionPropagation
+android.transition.TransitionSet
+android.transition.TransitionSet$TransitionSetListener
+android.transition.TransitionUtils
+android.transition.TransitionValues
+android.transition.TransitionValuesMaps
+android.transition.Visibility
+android.transition.Visibility$1
+android.transition.Visibility$VisibilityInfo
+android.transition.VisibilityPropagation
+android.util.AndroidException
+android.util.AndroidRuntimeException
+android.util.ArrayMap
+android.util.ArrayMap$1
+android.util.ArraySet
+android.util.ArraySet$1
+android.util.AtomicFile
+android.util.AttributeSet
+android.util.Base64
+android.util.Base64$Coder
+android.util.Base64$Decoder
+android.util.Base64$Encoder
+android.util.ByteStringUtils
+android.util.ContainerHelpers
+android.util.DebugUtils
+android.util.DisplayMetrics
+android.util.EventLog
+android.util.EventLog$Event
+android.util.FastImmutableArraySet
+android.util.FastImmutableArraySet$FastIterator
+android.util.FloatProperty
+android.util.IconDrawableFactory
+android.util.IntArray
+android.util.IntProperty
+android.util.JsonReader
+android.util.JsonScope
+android.util.JsonToken
+android.util.JsonWriter
+android.util.KeyValueListParser
+android.util.LauncherIcons
+android.util.LauncherIcons$ShadowDrawable
+android.util.LauncherIcons$ShadowDrawable$MyConstantState
+android.util.LocalLog
+android.util.LocalLog$ReadOnlyLocalLog
+android.util.Log
+android.util.Log$1
+android.util.Log$ImmediateLogWriter
+android.util.Log$PreloadHolder
+android.util.Log$TerribleFailure
+android.util.Log$TerribleFailureHandler
+android.util.LogPrinter
+android.util.LongArray
+android.util.LongSparseArray
+android.util.LongSparseLongArray
+android.util.LruCache
+android.util.MapCollections
+android.util.MapCollections$ArrayIterator
+android.util.MapCollections$EntrySet
+android.util.MapCollections$KeySet
+android.util.MapCollections$MapIterator
+android.util.MapCollections$ValuesCollection
+android.util.MathUtils
+android.util.MemoryIntArray
+android.util.MemoryIntArray$1
+android.util.MergedConfiguration
+android.util.MergedConfiguration$1
+android.util.MutableBoolean
+android.util.MutableInt
+android.util.MutableLong
+android.util.NtpTrustedTime
+android.util.Pair
+android.util.PathParser
+android.util.PathParser$PathData
+android.util.Patterns
+android.util.Pools$Pool
+android.util.Pools$SimplePool
+android.util.Pools$SynchronizedPool
+android.util.Printer
+android.util.Property
+android.util.Range
+android.util.Rational
+android.util.ReflectiveProperty
+android.util.Singleton
+android.util.Size
+android.util.SizeF
+android.util.Slog
+android.util.SparseArray
+android.util.SparseBooleanArray
+android.util.SparseIntArray
+android.util.SparseLongArray
+android.util.Spline
+android.util.Spline$MonotoneCubicSpline
+android.util.StateSet
+android.util.SuperNotCalledException
+android.util.TimeFormatException
+android.util.TimeUtils
+android.util.TimedRemoteCaller
+android.util.TimingLogger
+android.util.TimingsTraceLog
+android.util.TrustedTime
+android.util.TypedValue
+android.util.Xml
+android.util.Xml$XmlSerializerFactory
+android.util.XmlPullAttributes
+android.util.apk.ApkSignatureSchemeV2Verifier
+android.util.apk.ApkSignatureSchemeV2Verifier$SignatureNotFoundException
+android.util.apk.ZipUtils
+android.util.jar.StrictJarFile
+android.util.jar.StrictJarFile$EntryIterator
+android.util.jar.StrictJarFile$FDStream
+android.util.jar.StrictJarFile$JarFileInputStream
+android.util.jar.StrictJarFile$ZipInflaterInputStream
+android.util.jar.StrictJarManifest
+android.util.jar.StrictJarManifest$Chunk
+android.util.jar.StrictJarManifestReader
+android.util.jar.StrictJarVerifier
+android.util.jar.StrictJarVerifier$VerifierEntry
+android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk
+android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$1
+android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$2
+android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$3
+android.view.-$Lambda$P6MTGFSudLpwrqb6oVD8FdorW1c
+android.view.-$Lambda$XmA8Y30pNAdQP9ujRlGx1qfDHH8
+android.view.-$Lambda$iU_USrtPm1XIm5H9QYQvXfBGDE4
+android.view.-$Lambda$iU_USrtPm1XIm5H9QYQvXfBGDE4$1
+android.view.AbsSavedState
+android.view.AbsSavedState$1
+android.view.AbsSavedState$2
+android.view.AccessibilityInteractionController
+android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher
+android.view.AccessibilityInteractionController$PrivateHandler
+android.view.ActionMode
+android.view.ActionMode$Callback
+android.view.ActionMode$Callback2
+android.view.ActionProvider
+android.view.ActionProvider$SubUiVisibilityListener
+android.view.AppTransitionAnimationSpec
+android.view.AppTransitionAnimationSpec$1
+android.view.Choreographer
+android.view.Choreographer$1
+android.view.Choreographer$2
+android.view.Choreographer$3
+android.view.Choreographer$CallbackQueue
+android.view.Choreographer$CallbackRecord
+android.view.Choreographer$FrameCallback
+android.view.Choreographer$FrameDisplayEventReceiver
+android.view.Choreographer$FrameHandler
+android.view.ContextMenu
+android.view.ContextMenu$ContextMenuInfo
+android.view.ContextThemeWrapper
+android.view.Display
+android.view.Display$HdrCapabilities
+android.view.Display$HdrCapabilities$1
+android.view.Display$Mode
+android.view.Display$Mode$1
+android.view.DisplayAdjustments
+android.view.DisplayEventReceiver
+android.view.DisplayInfo
+android.view.DisplayInfo$1
+android.view.DisplayListCanvas
+android.view.DragEvent
+android.view.FallbackEventHandler
+android.view.FocusFinder
+android.view.FocusFinder$1
+android.view.FocusFinder$FocusSorter
+android.view.FocusFinder$UserSpecifiedFocusComparator
+android.view.FocusFinder$UserSpecifiedFocusComparator$NextFocusGetter
+android.view.FrameInfo
+android.view.FrameMetrics
+android.view.FrameMetricsObserver
+android.view.FrameStats
+android.view.GestureDetector
+android.view.GestureDetector$GestureHandler
+android.view.GestureDetector$OnContextClickListener
+android.view.GestureDetector$OnDoubleTapListener
+android.view.GestureDetector$OnGestureListener
+android.view.GestureDetector$SimpleOnGestureListener
+android.view.GhostView
+android.view.Gravity
+android.view.HandlerActionQueue
+android.view.HandlerActionQueue$HandlerAction
+android.view.HardwareLayer
+android.view.IAppTransitionAnimationSpecsFuture
+android.view.IAppTransitionAnimationSpecsFuture$Stub
+android.view.IAppTransitionAnimationSpecsFuture$Stub$Proxy
+android.view.IApplicationToken
+android.view.IApplicationToken$Stub
+android.view.IDockedStackListener
+android.view.IDockedStackListener$Stub
+android.view.IDockedStackListener$Stub$Proxy
+android.view.IGraphicsStats
+android.view.IGraphicsStats$Stub
+android.view.IGraphicsStats$Stub$Proxy
+android.view.IGraphicsStatsCallback
+android.view.IGraphicsStatsCallback$Stub
+android.view.IGraphicsStatsCallback$Stub$Proxy
+android.view.IInputFilter
+android.view.IOnKeyguardExitResult
+android.view.IPinnedStackController
+android.view.IPinnedStackController$Stub
+android.view.IPinnedStackController$Stub$Proxy
+android.view.IPinnedStackListener
+android.view.IPinnedStackListener$Stub
+android.view.IPinnedStackListener$Stub$Proxy
+android.view.IRotationWatcher
+android.view.IRotationWatcher$Stub
+android.view.IRotationWatcher$Stub$Proxy
+android.view.IWindow
+android.view.IWindow$Stub
+android.view.IWindow$Stub$Proxy
+android.view.IWindowFocusObserver
+android.view.IWindowId
+android.view.IWindowId$Stub
+android.view.IWindowId$Stub$Proxy
+android.view.IWindowManager
+android.view.IWindowManager$Stub
+android.view.IWindowManager$Stub$Proxy
+android.view.IWindowSession
+android.view.IWindowSession$Stub
+android.view.IWindowSession$Stub$Proxy
+android.view.IWindowSessionCallback
+android.view.IWindowSessionCallback$Stub
+android.view.IWindowSessionCallback$Stub$Proxy
+android.view.InflateException
+android.view.InputChannel
+android.view.InputChannel$1
+android.view.InputDevice
+android.view.InputDevice$1
+android.view.InputDevice$MotionRange
+android.view.InputEvent
+android.view.InputEvent$1
+android.view.InputEventConsistencyVerifier
+android.view.InputEventReceiver
+android.view.InputEventReceiver$Factory
+android.view.InputEventSender
+android.view.InputQueue
+android.view.InputQueue$Callback
+android.view.InputQueue$FinishedInputEventCallback
+android.view.KeyCharacterMap
+android.view.KeyCharacterMap$1
+android.view.KeyCharacterMap$FallbackAction
+android.view.KeyEvent
+android.view.KeyEvent$1
+android.view.KeyEvent$Callback
+android.view.KeyEvent$DispatcherState
+android.view.KeyboardShortcutGroup
+android.view.KeyboardShortcutGroup$1
+android.view.KeyboardShortcutInfo
+android.view.KeyboardShortcutInfo$1
+android.view.LayoutInflater
+android.view.LayoutInflater$Factory
+android.view.LayoutInflater$Factory2
+android.view.LayoutInflater$FactoryMerger
+android.view.LayoutInflater$Filter
+android.view.MagnificationSpec
+android.view.Menu
+android.view.MenuInflater
+android.view.MenuInflater$MenuState
+android.view.MenuItem
+android.view.MenuItem$OnActionExpandListener
+android.view.MenuItem$OnMenuItemClickListener
+android.view.MotionEvent
+android.view.MotionEvent$1
+android.view.MotionEvent$PointerCoords
+android.view.MotionEvent$PointerProperties
+android.view.NotificationHeaderView
+android.view.NotificationHeaderView$1
+android.view.NotificationHeaderView$HeaderTouchListener
+android.view.OrientationEventListener
+android.view.OrientationEventListener$SensorEventListenerImpl
+android.view.PointerIcon
+android.view.PointerIcon$1
+android.view.RecordingCanvas
+android.view.RemotableViewMethod
+android.view.RenderNode
+android.view.RenderNode$NoImagePreloadHolder
+android.view.RenderNodeAnimator
+android.view.RenderNodeAnimator$1
+android.view.RenderNodeAnimatorSetHelper
+android.view.ScaleGestureDetector
+android.view.ScaleGestureDetector$1
+android.view.ScaleGestureDetector$OnScaleGestureListener
+android.view.ScaleGestureDetector$SimpleOnScaleGestureListener
+android.view.SearchEvent
+android.view.SubMenu
+android.view.Surface
+android.view.Surface$1
+android.view.Surface$CompatibleCanvas
+android.view.Surface$OutOfResourcesException
+android.view.SurfaceControl
+android.view.SurfaceControl$PhysicalDisplayInfo
+android.view.SurfaceHolder
+android.view.SurfaceHolder$Callback
+android.view.SurfaceHolder$Callback2
+android.view.SurfaceSession
+android.view.SurfaceView
+android.view.SurfaceView$1
+android.view.SurfaceView$2
+android.view.SurfaceView$3
+android.view.SurfaceView$4
+android.view.SurfaceView$SurfaceControlWithBackground
+android.view.TextureView
+android.view.TextureView$1
+android.view.TextureView$SurfaceTextureListener
+android.view.ThreadedRenderer
+android.view.ThreadedRenderer$DrawCallbacks
+android.view.ThreadedRenderer$ProcessInitializer
+android.view.ThreadedRenderer$ProcessInitializer$1
+android.view.TouchDelegate
+android.view.VelocityTracker
+android.view.VelocityTracker$Estimator
+android.view.View
+android.view.View$1
+android.view.View$10
+android.view.View$11
+android.view.View$12
+android.view.View$2
+android.view.View$3
+android.view.View$4
+android.view.View$5
+android.view.View$6
+android.view.View$7
+android.view.View$8
+android.view.View$9
+android.view.View$AccessibilityDelegate
+android.view.View$AttachInfo
+android.view.View$AttachInfo$Callbacks
+android.view.View$BaseSavedState
+android.view.View$BaseSavedState$1
+android.view.View$CheckForLongPress
+android.view.View$CheckForTap
+android.view.View$DeclaredOnClickListener
+android.view.View$ForegroundInfo
+android.view.View$ListenerInfo
+android.view.View$MatchIdPredicate
+android.view.View$MatchLabelForPredicate
+android.view.View$MeasureSpec
+android.view.View$OnApplyWindowInsetsListener
+android.view.View$OnAttachStateChangeListener
+android.view.View$OnClickListener
+android.view.View$OnCreateContextMenuListener
+android.view.View$OnDragListener
+android.view.View$OnFocusChangeListener
+android.view.View$OnGenericMotionListener
+android.view.View$OnHoverListener
+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
+android.view.View$ScrollabilityCache
+android.view.View$SendViewScrolledAccessibilityEvent
+android.view.View$TintInfo
+android.view.View$TooltipInfo
+android.view.View$TransformationInfo
+android.view.View$UnsetPressedState
+android.view.View$VisibilityChangeForAutofillHandler
+android.view.ViewAnimationUtils
+android.view.ViewConfiguration
+android.view.ViewDebug$CapturedViewProperty
+android.view.ViewDebug$ExportedProperty
+android.view.ViewDebug$HierarchyHandler
+android.view.ViewGroup
+android.view.ViewGroup$1
+android.view.ViewGroup$2
+android.view.ViewGroup$3
+android.view.ViewGroup$4
+android.view.ViewGroup$ChildListForAutoFill
+android.view.ViewGroup$LayoutParams
+android.view.ViewGroup$MarginLayoutParams
+android.view.ViewGroup$OnHierarchyChangeListener
+android.view.ViewGroup$TouchTarget
+android.view.ViewGroupOverlay
+android.view.ViewManager
+android.view.ViewOutlineProvider
+android.view.ViewOutlineProvider$1
+android.view.ViewOutlineProvider$2
+android.view.ViewOutlineProvider$3
+android.view.ViewOverlay
+android.view.ViewOverlay$OverlayViewGroup
+android.view.ViewParent
+android.view.ViewPropertyAnimator
+android.view.ViewPropertyAnimator$1
+android.view.ViewPropertyAnimator$2
+android.view.ViewPropertyAnimator$3
+android.view.ViewPropertyAnimator$AnimatorEventListener
+android.view.ViewPropertyAnimator$NameValuesHolder
+android.view.ViewPropertyAnimator$PropertyBundle
+android.view.ViewRootImpl
+android.view.ViewRootImpl$1
+android.view.ViewRootImpl$2
+android.view.ViewRootImpl$4
+android.view.ViewRootImpl$AccessibilityInteractionConnection
+android.view.ViewRootImpl$AccessibilityInteractionConnectionManager
+android.view.ViewRootImpl$ActivityConfigCallback
+android.view.ViewRootImpl$AsyncInputStage
+android.view.ViewRootImpl$ConfigChangedCallback
+android.view.ViewRootImpl$ConsumeBatchedInputImmediatelyRunnable
+android.view.ViewRootImpl$ConsumeBatchedInputRunnable
+android.view.ViewRootImpl$EarlyPostImeInputStage
+android.view.ViewRootImpl$HighContrastTextManager
+android.view.ViewRootImpl$ImeInputStage
+android.view.ViewRootImpl$InputStage
+android.view.ViewRootImpl$InvalidateOnAnimationRunnable
+android.view.ViewRootImpl$NativePostImeInputStage
+android.view.ViewRootImpl$NativePreImeInputStage
+android.view.ViewRootImpl$QueuedInputEvent
+android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent
+android.view.ViewRootImpl$SyntheticInputStage
+android.view.ViewRootImpl$SyntheticJoystickHandler
+android.view.ViewRootImpl$SyntheticKeyboardHandler
+android.view.ViewRootImpl$SyntheticTouchNavigationHandler
+android.view.ViewRootImpl$SyntheticTouchNavigationHandler$1
+android.view.ViewRootImpl$SyntheticTrackballHandler
+android.view.ViewRootImpl$SystemUiVisibilityInfo
+android.view.ViewRootImpl$TrackballAxis
+android.view.ViewRootImpl$TraversalRunnable
+android.view.ViewRootImpl$ViewPostImeInputStage
+android.view.ViewRootImpl$ViewPreImeInputStage
+android.view.ViewRootImpl$ViewRootHandler
+android.view.ViewRootImpl$W
+android.view.ViewRootImpl$WindowInputEventReceiver
+android.view.ViewRootImpl$WindowStoppedCallback
+android.view.ViewStructure
+android.view.ViewStructure$HtmlInfo
+android.view.ViewStub
+android.view.ViewStub$OnInflateListener
+android.view.ViewStub$ViewReplaceRunnable
+android.view.ViewTreeObserver
+android.view.ViewTreeObserver$CopyOnWriteArray
+android.view.ViewTreeObserver$CopyOnWriteArray$Access
+android.view.ViewTreeObserver$InternalInsetsInfo
+android.view.ViewTreeObserver$OnComputeInternalInsetsListener
+android.view.ViewTreeObserver$OnDrawListener
+android.view.ViewTreeObserver$OnGlobalFocusChangeListener
+android.view.ViewTreeObserver$OnGlobalLayoutListener
+android.view.ViewTreeObserver$OnPreDrawListener
+android.view.ViewTreeObserver$OnScrollChangedListener
+android.view.ViewTreeObserver$OnTouchModeChangeListener
+android.view.Window
+android.view.Window$Callback
+android.view.Window$OnWindowDismissedCallback
+android.view.Window$OnWindowSwipeDismissedCallback
+android.view.Window$WindowControllerCallback
+android.view.WindowAnimationFrameStats
+android.view.WindowAnimationFrameStats$1
+android.view.WindowCallbackWrapper
+android.view.WindowCallbacks
+android.view.WindowContentFrameStats
+android.view.WindowContentFrameStats$1
+android.view.WindowId
+android.view.WindowId$1
+android.view.WindowInsets
+android.view.WindowLeaked
+android.view.WindowManager
+android.view.WindowManager$BadTokenException
+android.view.WindowManager$InvalidDisplayException
+android.view.WindowManager$KeyboardShortcutsReceiver
+android.view.WindowManager$LayoutParams
+android.view.WindowManager$LayoutParams$1
+android.view.WindowManagerGlobal
+android.view.WindowManagerGlobal$1
+android.view.WindowManagerGlobal$2
+android.view.WindowManagerImpl
+android.view.WindowManagerInternal
+android.view.WindowManagerInternal$AppTransitionListener
+android.view.WindowManagerInternal$MagnificationCallbacks
+android.view.WindowManagerInternal$OnHardKeyboardStatusChangeListener
+android.view.WindowManagerInternal$WindowsForAccessibilityCallback
+android.view.WindowManagerPolicy
+android.view.WindowManagerPolicy$InputConsumer
+android.view.WindowManagerPolicy$OnKeyguardExitResult
+android.view.WindowManagerPolicy$PointerEventListener
+android.view.WindowManagerPolicy$ScreenOffListener
+android.view.WindowManagerPolicy$ScreenOnListener
+android.view.WindowManagerPolicy$StartingSurface
+android.view.WindowManagerPolicy$WindowManagerFuncs
+android.view.WindowManagerPolicy$WindowState
+android.view.accessibility.-$Lambda$T3m_l9_RA18vCOcakSWp1lZCy5g$1
+android.view.accessibility.AccessibilityEvent
+android.view.accessibility.AccessibilityEvent$1
+android.view.accessibility.AccessibilityEventSource
+android.view.accessibility.AccessibilityManager
+android.view.accessibility.AccessibilityManager$1
+android.view.accessibility.AccessibilityManager$AccessibilityServicesStateChangeListener
+android.view.accessibility.AccessibilityManager$AccessibilityStateChangeListener
+android.view.accessibility.AccessibilityManager$HighTextContrastChangeListener
+android.view.accessibility.AccessibilityManager$MyCallback
+android.view.accessibility.AccessibilityManager$TouchExplorationStateChangeListener
+android.view.accessibility.AccessibilityNodeInfo
+android.view.accessibility.AccessibilityNodeInfo$1
+android.view.accessibility.AccessibilityNodeInfo$AccessibilityAction
+android.view.accessibility.AccessibilityNodeProvider
+android.view.accessibility.AccessibilityRecord
+android.view.accessibility.CaptioningManager
+android.view.accessibility.CaptioningManager$1
+android.view.accessibility.CaptioningManager$CaptionStyle
+android.view.accessibility.CaptioningManager$CaptioningChangeListener
+android.view.accessibility.CaptioningManager$MyContentObserver
+android.view.accessibility.IAccessibilityInteractionConnection
+android.view.accessibility.IAccessibilityInteractionConnection$Stub
+android.view.accessibility.IAccessibilityInteractionConnection$Stub$Proxy
+android.view.accessibility.IAccessibilityInteractionConnectionCallback
+android.view.accessibility.IAccessibilityInteractionConnectionCallback$Stub
+android.view.accessibility.IAccessibilityInteractionConnectionCallback$Stub$Proxy
+android.view.accessibility.IAccessibilityManager
+android.view.accessibility.IAccessibilityManager$Stub
+android.view.accessibility.IAccessibilityManager$Stub$Proxy
+android.view.accessibility.IAccessibilityManagerClient
+android.view.accessibility.IAccessibilityManagerClient$Stub
+android.view.accessibility.IAccessibilityManagerClient$Stub$Proxy
+android.view.animation.AccelerateDecelerateInterpolator
+android.view.animation.AccelerateInterpolator
+android.view.animation.AlphaAnimation
+android.view.animation.Animation
+android.view.animation.Animation$1
+android.view.animation.Animation$2
+android.view.animation.Animation$3
+android.view.animation.Animation$AnimationListener
+android.view.animation.Animation$Description
+android.view.animation.Animation$NoImagePreloadHolder
+android.view.animation.AnimationSet
+android.view.animation.AnimationUtils
+android.view.animation.AnimationUtils$1
+android.view.animation.AnimationUtils$AnimationState
+android.view.animation.BaseInterpolator
+android.view.animation.ClipRectAnimation
+android.view.animation.CycleInterpolator
+android.view.animation.DecelerateInterpolator
+android.view.animation.GridLayoutAnimationController$AnimationParameters
+android.view.animation.Interpolator
+android.view.animation.LayoutAnimationController
+android.view.animation.LayoutAnimationController$AnimationParameters
+android.view.animation.LinearInterpolator
+android.view.animation.OvershootInterpolator
+android.view.animation.PathInterpolator
+android.view.animation.ScaleAnimation
+android.view.animation.Transformation
+android.view.animation.TranslateAnimation
+android.view.autofill.AutofillId
+android.view.autofill.AutofillId$1
+android.view.autofill.AutofillManager
+android.view.autofill.AutofillManager$AutofillClient
+android.view.autofill.AutofillManager$AutofillManagerClient
+android.view.autofill.AutofillValue
+android.view.autofill.AutofillValue$1
+android.view.autofill.Helper
+android.view.autofill.IAutoFillManager
+android.view.autofill.IAutoFillManager$Stub
+android.view.autofill.IAutoFillManager$Stub$Proxy
+android.view.autofill.IAutoFillManagerClient
+android.view.autofill.IAutoFillManagerClient$Stub
+android.view.autofill.IAutoFillManagerClient$Stub$Proxy
+android.view.autofill.IAutofillWindowPresenter
+android.view.inputmethod.BaseInputConnection
+android.view.inputmethod.CompletionInfo
+android.view.inputmethod.CompletionInfo$1
+android.view.inputmethod.ComposingText
+android.view.inputmethod.CorrectionInfo
+android.view.inputmethod.CursorAnchorInfo
+android.view.inputmethod.CursorAnchorInfo$Builder
+android.view.inputmethod.EditorInfo
+android.view.inputmethod.EditorInfo$1
+android.view.inputmethod.ExtractedText
+android.view.inputmethod.ExtractedText$1
+android.view.inputmethod.ExtractedTextRequest
+android.view.inputmethod.ExtractedTextRequest$1
+android.view.inputmethod.InputBinding
+android.view.inputmethod.InputBinding$1
+android.view.inputmethod.InputConnection
+android.view.inputmethod.InputConnectionInspector
+android.view.inputmethod.InputConnectionWrapper
+android.view.inputmethod.InputContentInfo
+android.view.inputmethod.InputMethod
+android.view.inputmethod.InputMethod$SessionCallback
+android.view.inputmethod.InputMethodInfo
+android.view.inputmethod.InputMethodInfo$1
+android.view.inputmethod.InputMethodManager
+android.view.inputmethod.InputMethodManager$1
+android.view.inputmethod.InputMethodManager$2
+android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper
+android.view.inputmethod.InputMethodManager$FinishedInputEventCallback
+android.view.inputmethod.InputMethodManager$H
+android.view.inputmethod.InputMethodManager$ImeInputEventSender
+android.view.inputmethod.InputMethodManager$PendingEvent
+android.view.inputmethod.InputMethodManagerInternal
+android.view.inputmethod.InputMethodSession
+android.view.inputmethod.InputMethodSession$EventCallback
+android.view.inputmethod.InputMethodSubtype
+android.view.inputmethod.InputMethodSubtype$1
+android.view.inputmethod.InputMethodSubtype$InputMethodSubtypeBuilder
+android.view.inputmethod.InputMethodSubtypeArray
+android.view.textclassifier.TextClassificationManager
+android.view.textclassifier.TextClassifier
+android.view.textclassifier.TextClassifier$1
+android.view.textclassifier.TextClassifierImpl
+android.view.textclassifier.logging.SmartSelectionEventTracker
+android.view.textservice.SpellCheckerInfo
+android.view.textservice.SpellCheckerInfo$1
+android.view.textservice.SpellCheckerSession
+android.view.textservice.SpellCheckerSession$1
+android.view.textservice.SpellCheckerSession$InternalListener
+android.view.textservice.SpellCheckerSession$SpellCheckerSessionListener
+android.view.textservice.SpellCheckerSession$SpellCheckerSessionListenerImpl
+android.view.textservice.SpellCheckerSession$SpellCheckerSessionListenerImpl$SpellCheckerParams
+android.view.textservice.SpellCheckerSubtype
+android.view.textservice.SpellCheckerSubtype$1
+android.view.textservice.SuggestionsInfo
+android.view.textservice.TextInfo
+android.view.textservice.TextServicesManager
+android.webkit.ConsoleMessage
+android.webkit.ConsoleMessage$MessageLevel
+android.webkit.CookieManager
+android.webkit.CookieSyncManager
+android.webkit.DownloadListener
+android.webkit.GeolocationPermissions
+android.webkit.IWebViewUpdateService
+android.webkit.IWebViewUpdateService$Stub
+android.webkit.IWebViewUpdateService$Stub$Proxy
+android.webkit.JavascriptInterface
+android.webkit.MimeTypeMap
+android.webkit.ServiceWorkerClient
+android.webkit.ServiceWorkerController
+android.webkit.ServiceWorkerWebSettings
+android.webkit.TokenBindingService
+android.webkit.URLUtil
+android.webkit.UserPackage
+android.webkit.ValueCallback
+android.webkit.WebBackForwardList
+android.webkit.WebChromeClient
+android.webkit.WebChromeClient$CustomViewCallback
+android.webkit.WebIconDatabase
+android.webkit.WebMessage
+android.webkit.WebMessagePort
+android.webkit.WebResourceRequest
+android.webkit.WebSettings
+android.webkit.WebSettings$LayoutAlgorithm
+android.webkit.WebSettings$PluginState
+android.webkit.WebSettings$RenderPriority
+android.webkit.WebSettings$ZoomDensity
+android.webkit.WebStorage
+android.webkit.WebSyncManager
+android.webkit.WebView
+android.webkit.WebView$FindListener
+android.webkit.WebView$HitTestResult
+android.webkit.WebView$PictureListener
+android.webkit.WebView$PrivateAccess
+android.webkit.WebView$VisualStateCallback
+android.webkit.WebViewClient
+android.webkit.WebViewDatabase
+android.webkit.WebViewDelegate
+android.webkit.WebViewDelegate$1
+android.webkit.WebViewDelegate$OnTraceEnabledChangeListener
+android.webkit.WebViewFactory
+android.webkit.WebViewFactory$1
+android.webkit.WebViewFactory$MissingWebViewPackageException
+android.webkit.WebViewFactory$RelroFileCreator
+android.webkit.WebViewFactoryProvider
+android.webkit.WebViewFactoryProvider$Statics
+android.webkit.WebViewLibraryLoader
+android.webkit.WebViewProvider
+android.webkit.WebViewProvider$ScrollDelegate
+android.webkit.WebViewProvider$ViewDelegate
+android.webkit.WebViewProviderInfo
+android.webkit.WebViewProviderInfo$1
+android.webkit.WebViewProviderResponse
+android.webkit.WebViewProviderResponse$1
+android.webkit.WebViewZygote
+android.widget.-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4
+android.widget.-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4$1
+android.widget.-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4$2
+android.widget.-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4$3
+android.widget.-$Lambda$tfOQKOmkDz_xLYaBQX_cysn8vbE
+android.widget.AbsListView
+android.widget.AbsListView$3
+android.widget.AbsListView$AdapterDataSetObserver
+android.widget.AbsListView$CheckForTap
+android.widget.AbsListView$FlingRunnable
+android.widget.AbsListView$FlingRunnable$1
+android.widget.AbsListView$LayoutParams
+android.widget.AbsListView$MultiChoiceModeListener
+android.widget.AbsListView$MultiChoiceModeWrapper
+android.widget.AbsListView$OnScrollListener
+android.widget.AbsListView$PerformClick
+android.widget.AbsListView$RecycleBin
+android.widget.AbsListView$RecyclerListener
+android.widget.AbsListView$SavedState
+android.widget.AbsListView$SavedState$1
+android.widget.AbsListView$SelectionBoundsAdjuster
+android.widget.AbsListView$WindowRunnnable
+android.widget.AbsSeekBar
+android.widget.AbsSpinner
+android.widget.AbsSpinner$RecycleBin
+android.widget.AbsoluteLayout
+android.widget.ActionMenuPresenter
+android.widget.ActionMenuPresenter$1
+android.widget.ActionMenuPresenter$2
+android.widget.ActionMenuPresenter$ActionMenuPopupCallback
+android.widget.ActionMenuPresenter$OverflowMenuButton
+android.widget.ActionMenuPresenter$OverflowMenuButton$1
+android.widget.ActionMenuPresenter$PopupPresenterCallback
+android.widget.ActionMenuView
+android.widget.ActionMenuView$ActionMenuChildView
+android.widget.ActionMenuView$ActionMenuPresenterCallback
+android.widget.ActionMenuView$LayoutParams
+android.widget.ActionMenuView$MenuBuilderCallback
+android.widget.ActionMenuView$OnMenuItemClickListener
+android.widget.Adapter
+android.widget.AdapterView
+android.widget.AdapterView$AdapterDataSetObserver
+android.widget.AdapterView$OnItemClickListener
+android.widget.AdapterView$OnItemLongClickListener
+android.widget.AdapterView$OnItemSelectedListener
+android.widget.AdapterView$SelectionNotifier
+android.widget.ArrayAdapter
+android.widget.AutoCompleteTextView
+android.widget.AutoCompleteTextView$DropDownItemClickListener
+android.widget.AutoCompleteTextView$MyWatcher
+android.widget.AutoCompleteTextView$PassThroughClickListener
+android.widget.AutoCompleteTextView$PopupDataSetObserver
+android.widget.AutoCompleteTextView$PopupDataSetObserver$1
+android.widget.AutoCompleteTextView$Validator
+android.widget.BaseAdapter
+android.widget.Button
+android.widget.CheckBox
+android.widget.Checkable
+android.widget.CheckedTextView
+android.widget.Chronometer
+android.widget.Chronometer$1
+android.widget.CompoundButton
+android.widget.CompoundButton$OnCheckedChangeListener
+android.widget.CursorAdapter
+android.widget.CursorFilter$CursorFilterClient
+android.widget.DatePicker
+android.widget.DateTimeView
+android.widget.DateTimeView$ReceiverInfo
+android.widget.DateTimeView$ReceiverInfo$1
+android.widget.DateTimeView$ReceiverInfo$2
+android.widget.DropDownListView
+android.widget.EdgeEffect
+android.widget.EditText
+android.widget.Editor
+android.widget.Editor$1
+android.widget.Editor$2
+android.widget.Editor$Blink
+android.widget.Editor$CursorAnchorInfoNotifier
+android.widget.Editor$CursorController
+android.widget.Editor$EditOperation
+android.widget.Editor$EditOperation$1
+android.widget.Editor$HandleView
+android.widget.Editor$InputContentType
+android.widget.Editor$InputMethodState
+android.widget.Editor$InsertionHandleView
+android.widget.Editor$InsertionHandleView$2
+android.widget.Editor$InsertionPointCursorController
+android.widget.Editor$PositionListener
+android.widget.Editor$ProcessTextIntentActionsHandler
+android.widget.Editor$SelectionModifierCursorController
+android.widget.Editor$SpanController
+android.widget.Editor$SuggestionHelper
+android.widget.Editor$SuggestionHelper$SuggestionSpanComparator
+android.widget.Editor$TextRenderNode
+android.widget.Editor$TextViewPositionListener
+android.widget.Editor$UndoInputFilter
+android.widget.ExpandableListConnector
+android.widget.FastScroller
+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.Filter
+android.widget.Filter$FilterListener
+android.widget.Filter$FilterResults
+android.widget.Filter$RequestArguments
+android.widget.Filter$RequestHandler
+android.widget.Filter$ResultsHandler
+android.widget.Filterable
+android.widget.ForwardingListener
+android.widget.FrameLayout
+android.widget.FrameLayout$LayoutParams
+android.widget.GridLayout
+android.widget.GridLayout$1
+android.widget.GridLayout$2
+android.widget.GridLayout$3
+android.widget.GridLayout$4
+android.widget.GridLayout$5
+android.widget.GridLayout$6
+android.widget.GridLayout$6$1
+android.widget.GridLayout$7
+android.widget.GridLayout$8
+android.widget.GridLayout$Alignment
+android.widget.GridLayout$Arc
+android.widget.GridLayout$Assoc
+android.widget.GridLayout$Axis
+android.widget.GridLayout$Axis$1
+android.widget.GridLayout$Bounds
+android.widget.GridLayout$Interval
+android.widget.GridLayout$LayoutParams
+android.widget.GridLayout$MutableInt
+android.widget.GridLayout$PackedMap
+android.widget.GridLayout$Spec
+android.widget.GridView
+android.widget.HeaderViewListAdapter
+android.widget.HorizontalScrollView
+android.widget.HorizontalScrollView$SavedState
+android.widget.HorizontalScrollView$SavedState$1
+android.widget.ImageButton
+android.widget.ImageView
+android.widget.ImageView$ImageDrawableCallback
+android.widget.ImageView$ScaleType
+android.widget.LinearLayout
+android.widget.LinearLayout$LayoutParams
+android.widget.ListAdapter
+android.widget.ListPopupWindow
+android.widget.ListPopupWindow$2
+android.widget.ListPopupWindow$3
+android.widget.ListPopupWindow$ListSelectorHider
+android.widget.ListPopupWindow$PopupDataSetObserver
+android.widget.ListPopupWindow$PopupScrollListener
+android.widget.ListPopupWindow$PopupTouchInterceptor
+android.widget.ListPopupWindow$ResizePopupRunnable
+android.widget.ListView
+android.widget.ListView$ArrowScrollFocusResult
+android.widget.ListView$FixedViewInfo
+android.widget.MediaController
+android.widget.MediaController$MediaPlayerControl
+android.widget.MultiAutoCompleteTextView
+android.widget.MultiAutoCompleteTextView$Tokenizer
+android.widget.NumberPicker
+android.widget.NumberPicker$Formatter
+android.widget.NumberPicker$OnValueChangeListener
+android.widget.OverScroller
+android.widget.OverScroller$SplineOverScroller
+android.widget.PopupMenu
+android.widget.PopupMenu$1
+android.widget.PopupMenu$2
+android.widget.PopupMenu$3
+android.widget.PopupMenu$OnMenuItemClickListener
+android.widget.PopupWindow
+android.widget.PopupWindow$1
+android.widget.PopupWindow$2
+android.widget.PopupWindow$OnDismissListener
+android.widget.PopupWindow$PopupBackgroundView
+android.widget.PopupWindow$PopupDecorView
+android.widget.PopupWindow$PopupDecorView$1
+android.widget.ProgressBar
+android.widget.ProgressBar$1
+android.widget.ProgressBar$AccessibilityEventSender
+android.widget.ProgressBar$ProgressTintInfo
+android.widget.ProgressBar$RefreshData
+android.widget.ProgressBar$RefreshProgressRunnable
+android.widget.ProgressBar$SavedState
+android.widget.ProgressBar$SavedState$1
+android.widget.QuickContactBadge
+android.widget.QuickContactBadge$QueryHandler
+android.widget.RadioButton
+android.widget.RadioGroup
+android.widget.RadioGroup$CheckedStateTracker
+android.widget.RadioGroup$LayoutParams
+android.widget.RadioGroup$OnCheckedChangeListener
+android.widget.RadioGroup$PassThroughHierarchyChangeListener
+android.widget.RatingBar
+android.widget.RelativeLayout
+android.widget.RelativeLayout$DependencyGraph
+android.widget.RelativeLayout$DependencyGraph$Node
+android.widget.RelativeLayout$LayoutParams
+android.widget.RelativeLayout$TopToBottomLeftToRightComparator
+android.widget.RemoteViews
+android.widget.RemoteViews$1
+android.widget.RemoteViews$2
+android.widget.RemoteViews$3
+android.widget.RemoteViews$Action
+android.widget.RemoteViews$ActionException
+android.widget.RemoteViews$AsyncApplyTask
+android.widget.RemoteViews$BitmapCache
+android.widget.RemoteViews$BitmapReflectionAction
+android.widget.RemoteViews$LayoutParamAction
+android.widget.RemoteViews$MemoryUsageCounter
+android.widget.RemoteViews$MutablePair
+android.widget.RemoteViews$OnClickHandler
+android.widget.RemoteViews$OnViewAppliedListener
+android.widget.RemoteViews$ReflectionAction
+android.widget.RemoteViews$RemoteView
+android.widget.RemoteViews$RemoteViewsContextWrapper
+android.widget.RemoteViews$RunnableAction
+android.widget.RemoteViews$RuntimeAction
+android.widget.RemoteViews$SetDrawableParameters
+android.widget.RemoteViews$SetOnClickPendingIntent
+android.widget.RemoteViews$SetOnClickPendingIntent$1
+android.widget.RemoteViews$ViewGroupAction
+android.widget.RemoteViews$ViewGroupAction$1
+android.widget.RemoteViews$ViewGroupAction$2
+android.widget.RemoteViews$ViewPaddingAction
+android.widget.RemoteViews$ViewTree
+android.widget.RemoteViewsAdapter$RemoteAdapterConnectionCallback
+android.widget.ResourceCursorAdapter
+android.widget.RtlSpacingHelper
+android.widget.ScrollBarDrawable
+android.widget.ScrollView
+android.widget.ScrollView$SavedState
+android.widget.ScrollView$SavedState$1
+android.widget.Scroller
+android.widget.Scroller$ViscousFluidInterpolator
+android.widget.SearchView$OnCloseListener
+android.widget.SectionIndexer
+android.widget.SeekBar
+android.widget.SeekBar$OnSeekBarChangeListener
+android.widget.SelectionActionModeHelper
+android.widget.SelectionActionModeHelper$SelectionMetricsLogger
+android.widget.SelectionActionModeHelper$SelectionTracker
+android.widget.SelectionActionModeHelper$SelectionTracker$LogAbandonRunnable
+android.widget.SelectionActionModeHelper$TextClassificationHelper
+android.widget.SimpleCursorAdapter
+android.widget.Space
+android.widget.SpellChecker
+android.widget.SpellChecker$SpellParser
+android.widget.Spinner
+android.widget.Spinner$1
+android.widget.Spinner$DialogPopup
+android.widget.Spinner$DropDownAdapter
+android.widget.Spinner$DropdownPopup
+android.widget.Spinner$DropdownPopup$1
+android.widget.Spinner$SpinnerPopup
+android.widget.SpinnerAdapter
+android.widget.Switch
+android.widget.Switch$1
+android.widget.TabHost
+android.widget.TabHost$1
+android.widget.TabHost$2
+android.widget.TabHost$ContentStrategy
+android.widget.TabHost$FactoryContentStrategy
+android.widget.TabHost$IndicatorStrategy
+android.widget.TabHost$OnTabChangeListener
+android.widget.TabHost$TabContentFactory
+android.widget.TabHost$TabSpec
+android.widget.TabHost$ViewIndicatorStrategy
+android.widget.TabWidget
+android.widget.TabWidget$OnTabSelectionChanged
+android.widget.TabWidget$TabClickListener
+android.widget.TableLayout
+android.widget.TextClock
+android.widget.TextClock$1
+android.widget.TextClock$2
+android.widget.TextClock$FormatChangeObserver
+android.widget.TextSwitcher
+android.widget.TextView
+android.widget.TextView$2
+android.widget.TextView$3
+android.widget.TextView$BufferType
+android.widget.TextView$ChangeWatcher
+android.widget.TextView$CharWrapper
+android.widget.TextView$Drawables
+android.widget.TextView$Marquee
+android.widget.TextView$Marquee$1
+android.widget.TextView$Marquee$2
+android.widget.TextView$Marquee$3
+android.widget.TextView$OnEditorActionListener
+android.widget.TextView$SavedState
+android.widget.TextView$SavedState$1
+android.widget.ThemedSpinnerAdapter
+android.widget.TimePicker
+android.widget.TimePicker$OnTimeChangedListener
+android.widget.Toast
+android.widget.Toast$TN
+android.widget.Toast$TN$1
+android.widget.ToggleButton
+android.widget.Toolbar
+android.widget.Toolbar$1
+android.widget.Toolbar$2
+android.widget.Toolbar$ExpandedActionViewMenuPresenter
+android.widget.Toolbar$LayoutParams
+android.widget.Toolbar$OnMenuItemClickListener
+android.widget.Toolbar$SavedState$1
+android.widget.VideoView
+android.widget.ViewAnimator
+android.widget.ViewFlipper
+android.widget.ViewFlipper$1
+android.widget.ViewFlipper$2
+android.widget.ViewSwitcher
+android.widget.WrapperListAdapter
+com.android.framework.protobuf.nano.CodedInputByteBufferNano
+com.android.framework.protobuf.nano.CodedOutputByteBufferNano
+com.android.framework.protobuf.nano.InternalNano
+com.android.framework.protobuf.nano.InvalidProtocolBufferNanoException
+com.android.framework.protobuf.nano.MessageNano
+com.android.framework.protobuf.nano.WireFormatNano
+com.android.i18n.phonenumbers.AlternateFormatsCountryCodeSet
+com.android.i18n.phonenumbers.AsYouTypeFormatter
+com.android.i18n.phonenumbers.CountryCodeToRegionCodeMap
+com.android.i18n.phonenumbers.MetadataLoader
+com.android.i18n.phonenumbers.MetadataManager
+com.android.i18n.phonenumbers.MetadataManager$1
+com.android.i18n.phonenumbers.MetadataSource
+com.android.i18n.phonenumbers.MultiFileMetadataSourceImpl
+com.android.i18n.phonenumbers.NumberParseException
+com.android.i18n.phonenumbers.NumberParseException$ErrorType
+com.android.i18n.phonenumbers.PhoneNumberMatcher
+com.android.i18n.phonenumbers.PhoneNumberMatcher$State
+com.android.i18n.phonenumbers.PhoneNumberUtil
+com.android.i18n.phonenumbers.PhoneNumberUtil$1
+com.android.i18n.phonenumbers.PhoneNumberUtil$Leniency
+com.android.i18n.phonenumbers.PhoneNumberUtil$Leniency$1
+com.android.i18n.phonenumbers.PhoneNumberUtil$Leniency$2
+com.android.i18n.phonenumbers.PhoneNumberUtil$Leniency$3
+com.android.i18n.phonenumbers.PhoneNumberUtil$Leniency$4
+com.android.i18n.phonenumbers.PhoneNumberUtil$PhoneNumberFormat
+com.android.i18n.phonenumbers.PhoneNumberUtil$PhoneNumberType
+com.android.i18n.phonenumbers.PhoneNumberUtil$ValidationResult
+com.android.i18n.phonenumbers.Phonemetadata$NumberFormat
+com.android.i18n.phonenumbers.Phonemetadata$PhoneMetadata
+com.android.i18n.phonenumbers.Phonemetadata$PhoneMetadataCollection
+com.android.i18n.phonenumbers.Phonemetadata$PhoneNumberDesc
+com.android.i18n.phonenumbers.Phonenumber$PhoneNumber
+com.android.i18n.phonenumbers.Phonenumber$PhoneNumber$CountryCodeSource
+com.android.i18n.phonenumbers.RegexCache
+com.android.i18n.phonenumbers.RegexCache$LRUCache
+com.android.i18n.phonenumbers.RegexCache$LRUCache$1
+com.android.i18n.phonenumbers.ShortNumbersRegionCodeSet
+com.android.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder
+com.android.i18n.phonenumbers.prefixmapper.MappingFileProvider
+com.android.i18n.phonenumbers.prefixmapper.PrefixFileReader
+com.android.ims.-$Lambda$AvFHcs3Z6Dq6dkOugMW9Kc7Qzng$4
+com.android.ims.ImsCall$Listener
+com.android.ims.ImsCallForwardInfo
+com.android.ims.ImsCallProfile
+com.android.ims.ImsConfig
+com.android.ims.ImsConfigListener
+com.android.ims.ImsConfigListener$Stub
+com.android.ims.ImsConnectionStateListener
+com.android.ims.ImsEcbm
+com.android.ims.ImsEcbm$ImsEcbmListenerProxy
+com.android.ims.ImsEcbmStateListener
+com.android.ims.ImsException
+com.android.ims.ImsExternalCallStateListener
+com.android.ims.ImsManager
+com.android.ims.ImsManager$1
+com.android.ims.ImsManager$ImsRegistrationListenerProxy
+com.android.ims.ImsManager$ImsServiceDeathRecipient
+com.android.ims.ImsReasonInfo
+com.android.ims.ImsReasonInfo$1
+com.android.ims.ImsSsInfo
+com.android.ims.internal.IImsCallSession
+com.android.ims.internal.IImsCallSessionListener
+com.android.ims.internal.IImsConfig
+com.android.ims.internal.IImsConfig$Stub
+com.android.ims.internal.IImsEcbm
+com.android.ims.internal.IImsEcbm$Stub
+com.android.ims.internal.IImsEcbmListener
+com.android.ims.internal.IImsEcbmListener$Stub
+com.android.ims.internal.IImsMultiEndpoint
+com.android.ims.internal.IImsRegistrationListener
+com.android.ims.internal.IImsRegistrationListener$Stub
+com.android.ims.internal.IImsService
+com.android.ims.internal.IImsService$Stub
+com.android.ims.internal.IImsServiceController
+com.android.ims.internal.IImsServiceFeatureListener
+com.android.ims.internal.IImsUt
+com.android.ims.internal.IImsUt$Stub
+com.android.ims.internal.IImsUtListener
+com.android.ims.internal.IImsUtListener$Stub
+com.android.internal.R$styleable
+com.android.internal.alsa.AlsaCardsParser
+com.android.internal.alsa.AlsaCardsParser$AlsaCardRecord
+com.android.internal.alsa.AlsaDevicesParser
+com.android.internal.alsa.LineTokenizer
+com.android.internal.app.AlertController
+com.android.internal.app.AlertController$1
+com.android.internal.app.AlertController$AlertParams
+com.android.internal.app.AlertController$AlertParams$1
+com.android.internal.app.AlertController$AlertParams$4
+com.android.internal.app.AlertController$ButtonHandler
+com.android.internal.app.AlertController$RecycleListView
+com.android.internal.app.AssistUtils
+com.android.internal.app.IAppOpsCallback
+com.android.internal.app.IAppOpsCallback$Stub
+com.android.internal.app.IAppOpsCallback$Stub$Proxy
+com.android.internal.app.IAppOpsService
+com.android.internal.app.IAppOpsService$Stub
+com.android.internal.app.IAppOpsService$Stub$Proxy
+com.android.internal.app.IAssistScreenshotReceiver
+com.android.internal.app.IBatteryStats
+com.android.internal.app.IBatteryStats$Stub
+com.android.internal.app.IBatteryStats$Stub$Proxy
+com.android.internal.app.IMediaContainerService
+com.android.internal.app.IMediaContainerService$Stub
+com.android.internal.app.IMediaContainerService$Stub$Proxy
+com.android.internal.app.ISoundTriggerService
+com.android.internal.app.ISoundTriggerService$Stub
+com.android.internal.app.IVoiceInteractionManagerService
+com.android.internal.app.IVoiceInteractionManagerService$Stub
+com.android.internal.app.IVoiceInteractionManagerService$Stub$Proxy
+com.android.internal.app.IVoiceInteractionSessionListener
+com.android.internal.app.IVoiceInteractionSessionListener$Stub
+com.android.internal.app.IVoiceInteractionSessionListener$Stub$Proxy
+com.android.internal.app.IVoiceInteractionSessionShowCallback
+com.android.internal.app.IVoiceInteractionSessionShowCallback$Stub
+com.android.internal.app.IVoiceInteractor
+com.android.internal.app.IVoiceInteractor$Stub
+com.android.internal.app.NightDisplayController
+com.android.internal.app.NightDisplayController$1
+com.android.internal.app.NightDisplayController$Callback
+com.android.internal.app.ProcessMap
+com.android.internal.app.ResolverActivity
+com.android.internal.app.ToolbarActionBar
+com.android.internal.app.ToolbarActionBar$1
+com.android.internal.app.ToolbarActionBar$2
+com.android.internal.app.ToolbarActionBar$ActionMenuPresenterCallback
+com.android.internal.app.ToolbarActionBar$MenuBuilderCallback
+com.android.internal.app.ToolbarActionBar$ToolbarCallbackWrapper
+com.android.internal.app.WindowDecorActionBar
+com.android.internal.app.WindowDecorActionBar$1
+com.android.internal.app.WindowDecorActionBar$2
+com.android.internal.app.WindowDecorActionBar$3
+com.android.internal.app.WindowDecorActionBar$ActionModeImpl
+com.android.internal.app.procstats.DurationsTable
+com.android.internal.app.procstats.IProcessStats
+com.android.internal.app.procstats.IProcessStats$Stub
+com.android.internal.app.procstats.ProcessState
+com.android.internal.app.procstats.ProcessState$1
+com.android.internal.app.procstats.ProcessStats
+com.android.internal.app.procstats.ProcessStats$1
+com.android.internal.app.procstats.ProcessStats$PackageState
+com.android.internal.app.procstats.ProcessStats$ProcessStateHolder
+com.android.internal.app.procstats.PssTable
+com.android.internal.app.procstats.ServiceState
+com.android.internal.app.procstats.SparseMappingTable
+com.android.internal.app.procstats.SparseMappingTable$Table
+com.android.internal.app.procstats.SysMemUsageTable
+com.android.internal.appwidget.IAppWidgetHost
+com.android.internal.appwidget.IAppWidgetHost$Stub
+com.android.internal.appwidget.IAppWidgetHost$Stub$Proxy
+com.android.internal.appwidget.IAppWidgetService
+com.android.internal.appwidget.IAppWidgetService$Stub
+com.android.internal.appwidget.IAppWidgetService$Stub$Proxy
+com.android.internal.backup.IBackupTransport
+com.android.internal.backup.IBackupTransport$Stub
+com.android.internal.backup.IBackupTransport$Stub$Proxy
+com.android.internal.backup.LocalTransport
+com.android.internal.backup.LocalTransportService
+com.android.internal.content.FileSystemProvider
+com.android.internal.content.NativeLibraryHelper
+com.android.internal.content.NativeLibraryHelper$Handle
+com.android.internal.content.PackageHelper
+com.android.internal.content.PackageHelper$1
+com.android.internal.content.PackageHelper$TestableInterface
+com.android.internal.content.PackageMonitor
+com.android.internal.content.ReferrerIntent
+com.android.internal.content.ReferrerIntent$1
+com.android.internal.graphics.drawable.AnimationScaleListDrawable
+com.android.internal.graphics.drawable.AnimationScaleListDrawable$AnimationScaleListState
+com.android.internal.hardware.AmbientDisplayConfiguration
+com.android.internal.inputmethod.IInputContentUriToken
+com.android.internal.inputmethod.InputMethodSubtypeHandle
+com.android.internal.inputmethod.InputMethodSubtypeSwitchingController
+com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$ControllerImpl
+com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$DynamicRotationList
+com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$ImeSubtypeListItem
+com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList
+com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList$1
+com.android.internal.inputmethod.InputMethodSubtypeSwitchingController$StaticRotationList
+com.android.internal.inputmethod.InputMethodUtils
+com.android.internal.inputmethod.InputMethodUtils$1
+com.android.internal.inputmethod.InputMethodUtils$InputMethodListBuilder
+com.android.internal.inputmethod.InputMethodUtils$InputMethodSettings
+com.android.internal.inputmethod.LocaleUtils
+com.android.internal.inputmethod.LocaleUtils$LocaleExtractor
+com.android.internal.inputmethod.LocaleUtils$ScoreEntry
+com.android.internal.location.GpsNetInitiatedHandler
+com.android.internal.location.GpsNetInitiatedHandler$1
+com.android.internal.location.GpsNetInitiatedHandler$2
+com.android.internal.location.ILocationProvider
+com.android.internal.location.ILocationProvider$Stub
+com.android.internal.location.ILocationProvider$Stub$Proxy
+com.android.internal.location.ProviderProperties
+com.android.internal.location.ProviderProperties$1
+com.android.internal.location.ProviderRequest
+com.android.internal.location.ProviderRequest$1
+com.android.internal.logging.AndroidConfig
+com.android.internal.logging.AndroidHandler
+com.android.internal.logging.AndroidHandler$1
+com.android.internal.logging.EventLogTags
+com.android.internal.logging.MetricsLogger
+com.android.internal.net.LegacyVpnInfo
+com.android.internal.net.NetworkStatsFactory
+com.android.internal.net.VpnConfig
+com.android.internal.net.VpnInfo
+com.android.internal.net.VpnProfile
+com.android.internal.notification.SystemNotificationChannels
+com.android.internal.os.AndroidPrintStream
+com.android.internal.os.AppFuseMount
+com.android.internal.os.AtomicFile
+com.android.internal.os.BackgroundThread
+com.android.internal.os.BatteryStatsHelper
+com.android.internal.os.BatteryStatsImpl
+com.android.internal.os.BatteryStatsImpl$1
+com.android.internal.os.BatteryStatsImpl$6
+com.android.internal.os.BatteryStatsImpl$BatchTimer
+com.android.internal.os.BatteryStatsImpl$BatteryCallback
+com.android.internal.os.BatteryStatsImpl$Clocks
+com.android.internal.os.BatteryStatsImpl$ControllerActivityCounterImpl
+com.android.internal.os.BatteryStatsImpl$Counter
+com.android.internal.os.BatteryStatsImpl$DualTimer
+com.android.internal.os.BatteryStatsImpl$DurationTimer
+com.android.internal.os.BatteryStatsImpl$ExternalStatsSync
+com.android.internal.os.BatteryStatsImpl$LongSamplingCounter
+com.android.internal.os.BatteryStatsImpl$LongSamplingCounterArray
+com.android.internal.os.BatteryStatsImpl$MyHandler
+com.android.internal.os.BatteryStatsImpl$OverflowArrayMap
+com.android.internal.os.BatteryStatsImpl$PlatformIdleStateCallback
+com.android.internal.os.BatteryStatsImpl$SamplingTimer
+com.android.internal.os.BatteryStatsImpl$StopwatchTimer
+com.android.internal.os.BatteryStatsImpl$SystemClocks
+com.android.internal.os.BatteryStatsImpl$TimeBase
+com.android.internal.os.BatteryStatsImpl$TimeBaseObs
+com.android.internal.os.BatteryStatsImpl$Timer
+com.android.internal.os.BatteryStatsImpl$Uid
+com.android.internal.os.BatteryStatsImpl$Uid$1
+com.android.internal.os.BatteryStatsImpl$Uid$2
+com.android.internal.os.BatteryStatsImpl$Uid$3
+com.android.internal.os.BatteryStatsImpl$Uid$Pkg
+com.android.internal.os.BatteryStatsImpl$Uid$Pkg$Serv
+com.android.internal.os.BatteryStatsImpl$Uid$Proc
+com.android.internal.os.BatteryStatsImpl$Uid$Sensor
+com.android.internal.os.BatteryStatsImpl$Uid$Wakelock
+com.android.internal.os.BinderInternal
+com.android.internal.os.BinderInternal$GcWatcher
+com.android.internal.os.ClassLoaderFactory
+com.android.internal.os.FuseAppLoop
+com.android.internal.os.FuseAppLoop$1
+com.android.internal.os.FuseUnavailableMountException
+com.android.internal.os.HandlerCaller
+com.android.internal.os.HandlerCaller$Callback
+com.android.internal.os.HandlerCaller$MyHandler
+com.android.internal.os.IDropBoxManagerService
+com.android.internal.os.IDropBoxManagerService$Stub
+com.android.internal.os.IDropBoxManagerService$Stub$Proxy
+com.android.internal.os.IResultReceiver
+com.android.internal.os.IResultReceiver$Stub
+com.android.internal.os.IResultReceiver$Stub$Proxy
+com.android.internal.os.KernelCpuSpeedReader
+com.android.internal.os.KernelMemoryBandwidthStats
+com.android.internal.os.KernelUidCpuFreqTimeReader
+com.android.internal.os.KernelUidCpuTimeReader
+com.android.internal.os.KernelWakelockReader
+com.android.internal.os.KernelWakelockStats
+com.android.internal.os.KernelWakelockStats$Entry
+com.android.internal.os.LoggingPrintStream
+com.android.internal.os.LoggingPrintStream$1
+com.android.internal.os.PathClassLoaderFactory
+com.android.internal.os.PowerProfile
+com.android.internal.os.PowerProfile$CpuClusterKey
+com.android.internal.os.ProcessCpuTracker
+com.android.internal.os.ProcessCpuTracker$1
+com.android.internal.os.ProcessCpuTracker$FilterStats
+com.android.internal.os.ProcessCpuTracker$Stats
+com.android.internal.os.RoSystemProperties
+com.android.internal.os.RuntimeInit
+com.android.internal.os.RuntimeInit$1
+com.android.internal.os.RuntimeInit$Arguments
+com.android.internal.os.RuntimeInit$KillApplicationHandler
+com.android.internal.os.RuntimeInit$LoggingHandler
+com.android.internal.os.RuntimeInit$MethodAndArgsCaller
+com.android.internal.os.SamplingProfilerIntegration
+com.android.internal.os.SomeArgs
+com.android.internal.os.Zygote
+com.android.internal.os.Zygote$MethodAndArgsCaller
+com.android.internal.os.ZygoteConnection
+com.android.internal.os.ZygoteConnection$Arguments
+com.android.internal.os.ZygoteInit
+com.android.internal.os.ZygoteSecurityException
+com.android.internal.os.ZygoteServer
+com.android.internal.policy.DecorContext
+com.android.internal.policy.DecorView
+com.android.internal.policy.DecorView$1
+com.android.internal.policy.DecorView$ActionModeCallback2Wrapper
+com.android.internal.policy.DecorView$ColorViewAttributes
+com.android.internal.policy.DecorView$ColorViewState
+com.android.internal.policy.DividerSnapAlgorithm
+com.android.internal.policy.DividerSnapAlgorithm$SnapTarget
+com.android.internal.policy.DockedDividerUtils
+com.android.internal.policy.IKeyguardDismissCallback
+com.android.internal.policy.IKeyguardDismissCallback$Stub
+com.android.internal.policy.IKeyguardDrawnCallback
+com.android.internal.policy.IKeyguardDrawnCallback$Stub
+com.android.internal.policy.IKeyguardDrawnCallback$Stub$Proxy
+com.android.internal.policy.IKeyguardExitCallback
+com.android.internal.policy.IKeyguardService
+com.android.internal.policy.IKeyguardService$Stub
+com.android.internal.policy.IKeyguardService$Stub$Proxy
+com.android.internal.policy.IKeyguardStateCallback
+com.android.internal.policy.IKeyguardStateCallback$Stub
+com.android.internal.policy.IKeyguardStateCallback$Stub$Proxy
+com.android.internal.policy.IShortcutService
+com.android.internal.policy.IShortcutService$Stub
+com.android.internal.policy.IShortcutService$Stub$Proxy
+com.android.internal.policy.PhoneFallbackEventHandler
+com.android.internal.policy.PhoneLayoutInflater
+com.android.internal.policy.PhoneWindow
+com.android.internal.policy.PhoneWindow$1
+com.android.internal.policy.PhoneWindow$ActionMenuPresenterCallback
+com.android.internal.policy.PhoneWindow$PanelFeatureState
+com.android.internal.policy.PhoneWindow$PanelFeatureState$SavedState$1
+com.android.internal.policy.PhoneWindow$PhoneWindowMenuCallback
+com.android.internal.policy.PhoneWindow$RotationWatcher
+com.android.internal.policy.PhoneWindow$RotationWatcher$1
+com.android.internal.policy.PipSnapAlgorithm
+com.android.internal.statusbar.IStatusBar
+com.android.internal.statusbar.IStatusBar$Stub
+com.android.internal.statusbar.IStatusBar$Stub$Proxy
+com.android.internal.statusbar.IStatusBarService
+com.android.internal.statusbar.IStatusBarService$Stub
+com.android.internal.statusbar.IStatusBarService$Stub$Proxy
+com.android.internal.statusbar.NotificationVisibility
+com.android.internal.statusbar.NotificationVisibility$1
+com.android.internal.statusbar.StatusBarIcon
+com.android.internal.statusbar.StatusBarIcon$1
+com.android.internal.telecom.IConnectionService
+com.android.internal.telecom.IConnectionService$Stub
+com.android.internal.telecom.IConnectionService$Stub$Proxy
+com.android.internal.telecom.IConnectionServiceAdapter
+com.android.internal.telecom.IConnectionServiceAdapter$Stub
+com.android.internal.telecom.IConnectionServiceAdapter$Stub$Proxy
+com.android.internal.telecom.IInCallAdapter
+com.android.internal.telecom.IInCallAdapter$Stub
+com.android.internal.telecom.IInCallService
+com.android.internal.telecom.IInCallService$Stub
+com.android.internal.telecom.IInCallService$Stub$Proxy
+com.android.internal.telecom.ITelecomService
+com.android.internal.telecom.ITelecomService$Stub
+com.android.internal.telecom.ITelecomService$Stub$Proxy
+com.android.internal.telecom.IVideoProvider
+com.android.internal.telecom.IVideoProvider$Stub
+com.android.internal.telecom.RemoteServiceCallback
+com.android.internal.telecom.RemoteServiceCallback$Stub
+com.android.internal.telecom.RemoteServiceCallback$Stub$Proxy
+com.android.internal.telephony.AppSmsManager
+com.android.internal.telephony.BaseCommands
+com.android.internal.telephony.Call
+com.android.internal.telephony.Call$SrvccState
+com.android.internal.telephony.Call$State
+com.android.internal.telephony.CallManager
+com.android.internal.telephony.CallManager$CallManagerHandler
+com.android.internal.telephony.CallStateException
+com.android.internal.telephony.CallTracker
+com.android.internal.telephony.CallerInfo
+com.android.internal.telephony.CallerInfoAsyncQuery
+com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler
+com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler$CallerInfoWorkerHandler
+com.android.internal.telephony.CallerInfoAsyncQuery$CookieWrapper
+com.android.internal.telephony.CallerInfoAsyncQuery$OnQueryCompleteListener
+com.android.internal.telephony.CarrierActionAgent
+com.android.internal.telephony.CarrierActionAgent$1
+com.android.internal.telephony.CarrierActionAgent$SettingsObserver
+com.android.internal.telephony.CarrierAppUtils
+com.android.internal.telephony.CarrierServiceBindHelper
+com.android.internal.telephony.CarrierServiceBindHelper$1
+com.android.internal.telephony.CarrierServiceBindHelper$2
+com.android.internal.telephony.CarrierServiceBindHelper$AppBinding
+com.android.internal.telephony.CarrierServiceBindHelper$CarrierServicePackageMonitor
+com.android.internal.telephony.CarrierServiceStateTracker
+com.android.internal.telephony.CarrierServiceStateTracker$1
+com.android.internal.telephony.CarrierSignalAgent
+com.android.internal.telephony.CarrierSignalAgent$1
+com.android.internal.telephony.CellBroadcastHandler
+com.android.internal.telephony.CellNetworkScanResult
+com.android.internal.telephony.ClientWakelockAccountant
+com.android.internal.telephony.ClientWakelockTracker
+com.android.internal.telephony.CommandException
+com.android.internal.telephony.CommandException$Error
+com.android.internal.telephony.CommandsInterface
+com.android.internal.telephony.CommandsInterface$RadioState
+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
+com.android.internal.telephony.DeviceStateMonitor
+com.android.internal.telephony.DeviceStateMonitor$1
+com.android.internal.telephony.DeviceStateMonitor$2
+com.android.internal.telephony.EncodeException
+com.android.internal.telephony.GsmAlphabet
+com.android.internal.telephony.GsmAlphabet$TextEncodingDetails
+com.android.internal.telephony.GsmCdmaCall
+com.android.internal.telephony.GsmCdmaCallTracker
+com.android.internal.telephony.GsmCdmaCallTracker$1
+com.android.internal.telephony.GsmCdmaConnection
+com.android.internal.telephony.GsmCdmaPhone
+com.android.internal.telephony.GsmCdmaPhone$1
+com.android.internal.telephony.GsmCdmaPhone$2
+com.android.internal.telephony.HardwareConfig
+com.android.internal.telephony.ICarrierConfigLoader
+com.android.internal.telephony.ICarrierConfigLoader$Stub
+com.android.internal.telephony.ICarrierConfigLoader$Stub$Proxy
+com.android.internal.telephony.IIccPhoneBook
+com.android.internal.telephony.IIccPhoneBook$Stub
+com.android.internal.telephony.IMms
+com.android.internal.telephony.IMms$Stub
+com.android.internal.telephony.IOnSubscriptionsChangedListener
+com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub
+com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub$Proxy
+com.android.internal.telephony.IPhoneStateListener
+com.android.internal.telephony.IPhoneStateListener$Stub
+com.android.internal.telephony.IPhoneStateListener$Stub$Proxy
+com.android.internal.telephony.IPhoneSubInfo
+com.android.internal.telephony.IPhoneSubInfo$Stub
+com.android.internal.telephony.IPhoneSubInfo$Stub$Proxy
+com.android.internal.telephony.ISms
+com.android.internal.telephony.ISms$Stub
+com.android.internal.telephony.ISms$Stub$Proxy
+com.android.internal.telephony.ISub
+com.android.internal.telephony.ISub$Stub
+com.android.internal.telephony.ISub$Stub$Proxy
+com.android.internal.telephony.ITelephony
+com.android.internal.telephony.ITelephony$Stub
+com.android.internal.telephony.ITelephony$Stub$Proxy
+com.android.internal.telephony.ITelephonyRegistry
+com.android.internal.telephony.ITelephonyRegistry$Stub
+com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy
+com.android.internal.telephony.IWapPushManager
+com.android.internal.telephony.IccCard
+com.android.internal.telephony.IccCardConstants$State
+com.android.internal.telephony.IccPhoneBookInterfaceManager
+com.android.internal.telephony.IccPhoneBookInterfaceManager$1
+com.android.internal.telephony.IccProvider
+com.android.internal.telephony.IccSmsInterfaceManager
+com.android.internal.telephony.IccSmsInterfaceManager$1
+com.android.internal.telephony.IccSmsInterfaceManager$CdmaBroadcastRangeManager
+com.android.internal.telephony.IccSmsInterfaceManager$CellBroadcastRangeManager
+com.android.internal.telephony.ImsSMSDispatcher
+com.android.internal.telephony.InboundSmsHandler
+com.android.internal.telephony.InboundSmsHandler$1
+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$StartupState
+com.android.internal.telephony.InboundSmsHandler$WaitingState
+com.android.internal.telephony.IntRangeManager
+com.android.internal.telephony.OemHookIndication
+com.android.internal.telephony.OemHookResponse
+com.android.internal.telephony.OperatorInfo
+com.android.internal.telephony.Phone
+com.android.internal.telephony.Phone$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
+com.android.internal.telephony.PhoneInternalInterface$DataActivityState
+com.android.internal.telephony.PhoneNotifier
+com.android.internal.telephony.PhoneSubInfoController
+com.android.internal.telephony.PhoneSwitcher
+com.android.internal.telephony.PhoneSwitcher$1
+com.android.internal.telephony.PhoneSwitcher$2
+com.android.internal.telephony.PhoneSwitcher$PhoneState
+com.android.internal.telephony.PhoneSwitcher$PhoneSwitcherNetworkRequestListener
+com.android.internal.telephony.ProxyController
+com.android.internal.telephony.ProxyController$1
+com.android.internal.telephony.RIL
+com.android.internal.telephony.RIL$RadioProxyDeathRecipient
+com.android.internal.telephony.RIL$RilHandler
+com.android.internal.telephony.RILConstants
+com.android.internal.telephony.RILRequest
+com.android.internal.telephony.RadioCapability
+com.android.internal.telephony.RadioIndication
+com.android.internal.telephony.RadioResponse
+com.android.internal.telephony.RatRatcheter
+com.android.internal.telephony.RatRatcheter$1
+com.android.internal.telephony.RestrictedState
+com.android.internal.telephony.RetryManager
+com.android.internal.telephony.RilWakelockInfo
+com.android.internal.telephony.SMSDispatcher
+com.android.internal.telephony.SMSDispatcher$SettingsObserver
+com.android.internal.telephony.ServiceStateTracker
+com.android.internal.telephony.ServiceStateTracker$1
+com.android.internal.telephony.ServiceStateTracker$2
+com.android.internal.telephony.ServiceStateTracker$3
+com.android.internal.telephony.ServiceStateTracker$CellInfoResult
+com.android.internal.telephony.ServiceStateTracker$SstSubscriptionsChangedListener
+com.android.internal.telephony.SimActivationTracker
+com.android.internal.telephony.SimActivationTracker$1
+com.android.internal.telephony.SmsApplication
+com.android.internal.telephony.SmsApplication$SmsApplicationData
+com.android.internal.telephony.SmsApplication$SmsPackageMonitor
+com.android.internal.telephony.SmsBroadcastUndelivered
+com.android.internal.telephony.SmsBroadcastUndelivered$1
+com.android.internal.telephony.SmsBroadcastUndelivered$ScanRawTableThread
+com.android.internal.telephony.SmsMessageBase
+com.android.internal.telephony.SmsStorageMonitor
+com.android.internal.telephony.SmsStorageMonitor$1
+com.android.internal.telephony.SmsUsageMonitor
+com.android.internal.telephony.SmsUsageMonitor$SettingsObserver
+com.android.internal.telephony.SmsUsageMonitor$SettingsObserverHandler
+com.android.internal.telephony.SubscriptionController
+com.android.internal.telephony.SubscriptionController$ScLocalLog
+com.android.internal.telephony.SubscriptionInfoUpdater
+com.android.internal.telephony.SubscriptionInfoUpdater$1
+com.android.internal.telephony.SubscriptionInfoUpdater$2
+com.android.internal.telephony.SubscriptionMonitor
+com.android.internal.telephony.SubscriptionMonitor$1
+com.android.internal.telephony.SubscriptionMonitor$2
+com.android.internal.telephony.TelephonyCapabilities
+com.android.internal.telephony.TelephonyComponentFactory
+com.android.internal.telephony.TelephonyDevController
+com.android.internal.telephony.TelephonyTester
+com.android.internal.telephony.TelephonyTester$1
+com.android.internal.telephony.UiccPhoneBookController
+com.android.internal.telephony.UiccSmsController
+com.android.internal.telephony.WakeLockStateMachine
+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.WapPushOverSms
+com.android.internal.telephony.WapPushOverSms$1
+com.android.internal.telephony.WapPushOverSms$BindServiceThread
+com.android.internal.telephony.cat.AppInterface
+com.android.internal.telephony.cat.CatLog
+com.android.internal.telephony.cat.CatService
+com.android.internal.telephony.cdma.CdmaInboundSmsHandler
+com.android.internal.telephony.cdma.CdmaSMSDispatcher
+com.android.internal.telephony.cdma.CdmaServiceCategoryProgramHandler
+com.android.internal.telephony.cdma.CdmaServiceCategoryProgramHandler$1
+com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager
+com.android.internal.telephony.cdma.EriInfo
+com.android.internal.telephony.cdma.EriManager
+com.android.internal.telephony.cdma.EriManager$EriFile
+com.android.internal.telephony.dataconnection.ApnContext
+com.android.internal.telephony.dataconnection.DataConnection
+com.android.internal.telephony.dataconnection.DataEnabledSettings
+com.android.internal.telephony.dataconnection.DcController
+com.android.internal.telephony.dataconnection.DcController$1
+com.android.internal.telephony.dataconnection.DcController$DccDefaultState
+com.android.internal.telephony.dataconnection.DcFailBringUp
+com.android.internal.telephony.dataconnection.DcFailCause
+com.android.internal.telephony.dataconnection.DcRequest
+com.android.internal.telephony.dataconnection.DcTesterDeactivateAll
+com.android.internal.telephony.dataconnection.DcTesterDeactivateAll$1
+com.android.internal.telephony.dataconnection.DcTesterFailBringUpAll
+com.android.internal.telephony.dataconnection.DcTesterFailBringUpAll$1
+com.android.internal.telephony.dataconnection.DcTracker
+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$ApnChangeObserver
+com.android.internal.telephony.dataconnection.DcTracker$DataAllowFailReason
+com.android.internal.telephony.dataconnection.DcTracker$DataAllowFailReasonType
+com.android.internal.telephony.dataconnection.DcTracker$RetryFailures
+com.android.internal.telephony.dataconnection.DcTracker$SettingsObserver
+com.android.internal.telephony.dataconnection.DcTracker$TxRxSum
+com.android.internal.telephony.dataconnection.TelephonyNetworkFactory
+com.android.internal.telephony.dataconnection.TelephonyNetworkFactory$InternalHandler
+com.android.internal.telephony.gsm.GsmCellBroadcastHandler
+com.android.internal.telephony.gsm.GsmInboundSmsHandler
+com.android.internal.telephony.gsm.GsmSMSDispatcher
+com.android.internal.telephony.gsm.SmsMessage
+com.android.internal.telephony.gsm.UsimDataDownloadHandler
+com.android.internal.telephony.ims.-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg
+com.android.internal.telephony.ims.-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg$1
+com.android.internal.telephony.ims.-$Lambda$6hDwuvYxqWrzW_Ex5wc53XnUOpg$2
+com.android.internal.telephony.ims.ImsResolver
+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$ImsServiceControllerFactory
+com.android.internal.telephony.ims.ImsResolver$SubscriptionManagerProxy
+com.android.internal.telephony.ims.ImsServiceController$ImsServiceControllerCallbacks
+com.android.internal.telephony.imsphone.-$Lambda$tILLuSJl16qfDJK1ikBVGFm2D5w
+com.android.internal.telephony.imsphone.-$Lambda$tILLuSJl16qfDJK1ikBVGFm2D5w$1
+com.android.internal.telephony.imsphone.ImsExternalCallTracker
+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.ImsExternalConnection$Listener
+com.android.internal.telephony.imsphone.ImsPhone
+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.ImsPhoneBase
+com.android.internal.telephony.imsphone.ImsPhoneCall
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker
+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$IRetryTimeout
+com.android.internal.telephony.imsphone.ImsPhoneCallTracker$PhoneStateListener
+com.android.internal.telephony.imsphone.ImsPhoneCommandInterface
+com.android.internal.telephony.imsphone.ImsPhoneFactory
+com.android.internal.telephony.imsphone.ImsPullCall
+com.android.internal.telephony.metrics.CallSessionEventBuilder
+com.android.internal.telephony.metrics.InProgressCallSession
+com.android.internal.telephony.metrics.InProgressSmsSession
+com.android.internal.telephony.metrics.SmsSessionEventBuilder
+com.android.internal.telephony.metrics.TelephonyEventBuilder
+com.android.internal.telephony.metrics.TelephonyMetrics
+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$RilDataCall
+com.android.internal.telephony.nano.TelephonyProto$SmsSession$Event
+com.android.internal.telephony.nano.TelephonyProto$TelephonyCallSession$Event
+com.android.internal.telephony.nano.TelephonyProto$TelephonyCallSession$Event$RilCall
+com.android.internal.telephony.nano.TelephonyProto$TelephonyEvent
+com.android.internal.telephony.nano.TelephonyProto$TelephonyServiceState
+com.android.internal.telephony.nano.TelephonyProto$TelephonyServiceState$TelephonyOperator
+com.android.internal.telephony.nano.TelephonyProto$TelephonySettings
+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.WireFormatNano
+com.android.internal.telephony.test.SimulatedRadioControl
+com.android.internal.telephony.uicc.IccCardApplicationStatus
+com.android.internal.telephony.uicc.IccCardApplicationStatus$AppType
+com.android.internal.telephony.uicc.IccCardProxy
+com.android.internal.telephony.uicc.IccCardStatus
+com.android.internal.telephony.uicc.IccCardStatus$CardState
+com.android.internal.telephony.uicc.IccCardStatus$PinState
+com.android.internal.telephony.uicc.IccConstants
+com.android.internal.telephony.uicc.IccRecords
+com.android.internal.telephony.uicc.IccUtils
+com.android.internal.telephony.uicc.UiccCard
+com.android.internal.telephony.uicc.UiccCard$1
+com.android.internal.telephony.uicc.UiccCardApplication
+com.android.internal.telephony.uicc.UiccController
+com.android.internal.telephony.uicc.UiccStateChangedLauncher
+com.android.internal.telephony.util.NotificationChannelController
+com.android.internal.telephony.util.NotificationChannelController$1
+com.android.internal.textservice.ISpellCheckerService
+com.android.internal.textservice.ISpellCheckerService$Stub
+com.android.internal.textservice.ISpellCheckerService$Stub$Proxy
+com.android.internal.textservice.ISpellCheckerServiceCallback
+com.android.internal.textservice.ISpellCheckerServiceCallback$Stub
+com.android.internal.textservice.ISpellCheckerServiceCallback$Stub$Proxy
+com.android.internal.textservice.ISpellCheckerSession
+com.android.internal.textservice.ISpellCheckerSession$Stub
+com.android.internal.textservice.ISpellCheckerSession$Stub$Proxy
+com.android.internal.textservice.ISpellCheckerSessionListener
+com.android.internal.textservice.ISpellCheckerSessionListener$Stub
+com.android.internal.textservice.ISpellCheckerSessionListener$Stub$Proxy
+com.android.internal.textservice.ITextServicesManager
+com.android.internal.textservice.ITextServicesManager$Stub
+com.android.internal.textservice.ITextServicesManager$Stub$Proxy
+com.android.internal.textservice.ITextServicesSessionListener
+com.android.internal.textservice.ITextServicesSessionListener$Stub
+com.android.internal.textservice.ITextServicesSessionListener$Stub$Proxy
+com.android.internal.transition.EpicenterTranslateClipReveal
+com.android.internal.transition.TransitionConstants
+com.android.internal.util.ArrayUtils
+com.android.internal.util.AsyncChannel
+com.android.internal.util.AsyncChannel$AsyncChannelConnection
+com.android.internal.util.AsyncChannel$DeathMonitor
+com.android.internal.util.AsyncChannel$SyncMessenger
+com.android.internal.util.AsyncChannel$SyncMessenger$SyncHandler
+com.android.internal.util.BitUtils
+com.android.internal.util.CollectionUtils
+com.android.internal.util.ConcurrentUtils
+com.android.internal.util.ConcurrentUtils$1
+com.android.internal.util.ConcurrentUtils$1$1
+com.android.internal.util.DumpUtils$Dump
+com.android.internal.util.ExponentiallyBucketedHistogram
+com.android.internal.util.FastMath
+com.android.internal.util.FastPrintWriter
+com.android.internal.util.FastPrintWriter$DummyWriter
+com.android.internal.util.FastXmlSerializer
+com.android.internal.util.FileRotator
+com.android.internal.util.FileRotator$FileInfo
+com.android.internal.util.FileRotator$Reader
+com.android.internal.util.FileRotator$Rewriter
+com.android.internal.util.FileRotator$Writer
+com.android.internal.util.GrowingArrayUtils
+com.android.internal.util.HexDump
+com.android.internal.util.IState
+com.android.internal.util.ImageUtils
+com.android.internal.util.IndentingPrintWriter
+com.android.internal.util.IntPair
+com.android.internal.util.JournaledFile
+com.android.internal.util.LineBreakBufferedWriter
+com.android.internal.util.LocalLog
+com.android.internal.util.MemInfoReader
+com.android.internal.util.MessageUtils
+com.android.internal.util.NotificationColorUtil
+com.android.internal.util.NotificationColorUtil$ColorUtilsFromCompat
+com.android.internal.util.NotificationMessagingUtil
+com.android.internal.util.NotificationMessagingUtil$1
+com.android.internal.util.Preconditions
+com.android.internal.util.ProcFileReader
+com.android.internal.util.ProgressReporter
+com.android.internal.util.RingBufferIndices
+com.android.internal.util.ScreenShapeHelper
+com.android.internal.util.State
+com.android.internal.util.StateMachine
+com.android.internal.util.StateMachine$LogRec
+com.android.internal.util.StateMachine$LogRecords
+com.android.internal.util.StateMachine$SmHandler
+com.android.internal.util.StateMachine$SmHandler$HaltingState
+com.android.internal.util.StateMachine$SmHandler$QuittingState
+com.android.internal.util.StateMachine$SmHandler$StateInfo
+com.android.internal.util.ToBooleanFunction
+com.android.internal.util.TokenBucket
+com.android.internal.util.VirtualRefBasePtr
+com.android.internal.util.WakeupMessage
+com.android.internal.util.XmlUtils
+com.android.internal.util.XmlUtils$ReadMapCallback
+com.android.internal.util.XmlUtils$WriteMapCallback
+com.android.internal.view.ActionBarPolicy
+com.android.internal.view.BaseIWindow
+com.android.internal.view.BaseSurfaceHolder
+com.android.internal.view.IInputConnectionWrapper
+com.android.internal.view.IInputConnectionWrapper$MyHandler
+com.android.internal.view.IInputContext
+com.android.internal.view.IInputContext$Stub
+com.android.internal.view.IInputContext$Stub$Proxy
+com.android.internal.view.IInputContextCallback
+com.android.internal.view.IInputContextCallback$Stub
+com.android.internal.view.IInputContextCallback$Stub$Proxy
+com.android.internal.view.IInputMethod
+com.android.internal.view.IInputMethod$Stub
+com.android.internal.view.IInputMethod$Stub$Proxy
+com.android.internal.view.IInputMethodClient
+com.android.internal.view.IInputMethodClient$Stub
+com.android.internal.view.IInputMethodClient$Stub$Proxy
+com.android.internal.view.IInputMethodManager
+com.android.internal.view.IInputMethodManager$Stub
+com.android.internal.view.IInputMethodManager$Stub$Proxy
+com.android.internal.view.IInputMethodSession
+com.android.internal.view.IInputMethodSession$Stub
+com.android.internal.view.IInputMethodSession$Stub$Proxy
+com.android.internal.view.IInputSessionCallback
+com.android.internal.view.IInputSessionCallback$Stub
+com.android.internal.view.IInputSessionCallback$Stub$Proxy
+com.android.internal.view.InputBindResult
+com.android.internal.view.InputBindResult$1
+com.android.internal.view.InputConnectionWrapper
+com.android.internal.view.InputConnectionWrapper$InputContextCallback
+com.android.internal.view.OneShotPreDrawListener
+com.android.internal.view.RootViewSurfaceTaker
+com.android.internal.view.RotationPolicy
+com.android.internal.view.RotationPolicy$RotationPolicyListener
+com.android.internal.view.RotationPolicy$RotationPolicyListener$1
+com.android.internal.view.SurfaceCallbackHelper
+com.android.internal.view.SurfaceCallbackHelper$1
+com.android.internal.view.SurfaceFlingerVsyncChoreographer
+com.android.internal.view.WindowManagerPolicyThread
+com.android.internal.view.animation.FallbackLUTInterpolator
+com.android.internal.view.animation.HasNativeInterpolator
+com.android.internal.view.animation.NativeInterpolatorFactory
+com.android.internal.view.animation.NativeInterpolatorFactoryHelper
+com.android.internal.view.menu.ActionMenuItem
+com.android.internal.view.menu.ActionMenuItemView
+com.android.internal.view.menu.ActionMenuItemView$PopupCallback
+com.android.internal.view.menu.BaseMenuPresenter
+com.android.internal.view.menu.ContextMenuBuilder
+com.android.internal.view.menu.MenuBuilder
+com.android.internal.view.menu.MenuBuilder$Callback
+com.android.internal.view.menu.MenuBuilder$ItemInvoker
+com.android.internal.view.menu.MenuHelper
+com.android.internal.view.menu.MenuItemImpl
+com.android.internal.view.menu.MenuPopupHelper
+com.android.internal.view.menu.MenuPopupHelper$1
+com.android.internal.view.menu.MenuPresenter
+com.android.internal.view.menu.MenuPresenter$Callback
+com.android.internal.view.menu.MenuView
+com.android.internal.view.menu.MenuView$ItemView
+com.android.internal.view.menu.ShowableListMenu
+com.android.internal.widget.-$Lambda$LaTFiUorkqfcqmu-zMQbCLeO77c
+com.android.internal.widget.AbsActionBarView
+com.android.internal.widget.AbsActionBarView$VisibilityAnimListener
+com.android.internal.widget.ActionBarContainer
+com.android.internal.widget.ActionBarContainer$ActionBarBackgroundDrawable
+com.android.internal.widget.ActionBarContextView
+com.android.internal.widget.ActionBarContextView$1
+com.android.internal.widget.ActionBarOverlayLayout
+com.android.internal.widget.ActionBarOverlayLayout$1
+com.android.internal.widget.ActionBarOverlayLayout$2
+com.android.internal.widget.ActionBarOverlayLayout$3
+com.android.internal.widget.ActionBarOverlayLayout$4
+com.android.internal.widget.ActionBarOverlayLayout$5
+com.android.internal.widget.ActionBarOverlayLayout$ActionBarVisibilityCallback
+com.android.internal.widget.ActionBarOverlayLayout$LayoutParams
+com.android.internal.widget.AlertDialogLayout
+com.android.internal.widget.BackgroundFallback
+com.android.internal.widget.ButtonBarLayout
+com.android.internal.widget.CachingIconView
+com.android.internal.widget.DecorContentParent
+com.android.internal.widget.DecorToolbar
+com.android.internal.widget.DialogTitle
+com.android.internal.widget.EditableInputConnection
+com.android.internal.widget.ICheckCredentialProgressCallback
+com.android.internal.widget.ILockSettings
+com.android.internal.widget.ILockSettings$Stub
+com.android.internal.widget.ILockSettings$Stub$Proxy
+com.android.internal.widget.ImageFloatingTextView
+com.android.internal.widget.LockPatternUtils
+com.android.internal.widget.LockPatternUtils$RequestThrottledException
+com.android.internal.widget.LockPatternUtils$StrongAuthTracker
+com.android.internal.widget.LockPatternUtils$StrongAuthTracker$1
+com.android.internal.widget.LockPatternUtils$StrongAuthTracker$H
+com.android.internal.widget.MediaNotificationView
+com.android.internal.widget.NotificationActionListLayout
+com.android.internal.widget.NotificationExpandButton
+com.android.internal.widget.ScrollBarUtils
+com.android.internal.widget.ToolbarWidgetWrapper
+com.android.internal.widget.ToolbarWidgetWrapper$1
+com.android.internal.widget.ToolbarWidgetWrapper$2
+com.android.internal.widget.VerifyCredentialResponse
+com.android.okhttp.Address
+com.android.okhttp.AndroidInternal
+com.android.okhttp.AndroidShimResponseCache
+com.android.okhttp.Authenticator
+com.android.okhttp.Cache
+com.android.okhttp.Cache$1
+com.android.okhttp.Cache$CacheRequestImpl
+com.android.okhttp.Cache$CacheRequestImpl$1
+com.android.okhttp.Cache$Entry
+com.android.okhttp.CacheControl
+com.android.okhttp.CacheControl$Builder
+com.android.okhttp.CertificatePinner
+com.android.okhttp.CertificatePinner$Builder
+com.android.okhttp.CipherSuite
+com.android.okhttp.ConfigAwareConnectionPool
+com.android.okhttp.ConfigAwareConnectionPool$1
+com.android.okhttp.Connection
+com.android.okhttp.ConnectionPool
+com.android.okhttp.ConnectionPool$1
+com.android.okhttp.ConnectionSpec
+com.android.okhttp.ConnectionSpec$Builder
+com.android.okhttp.Dispatcher
+com.android.okhttp.Dns
+com.android.okhttp.Dns$1
+com.android.okhttp.Handshake
+com.android.okhttp.Headers
+com.android.okhttp.Headers$Builder
+com.android.okhttp.HttpHandler
+com.android.okhttp.HttpHandler$CleartextURLFilter
+com.android.okhttp.HttpUrl
+com.android.okhttp.HttpUrl$Builder
+com.android.okhttp.HttpUrl$Builder$ParseResult
+com.android.okhttp.HttpsHandler
+com.android.okhttp.OkCacheContainer
+com.android.okhttp.OkHttpClient
+com.android.okhttp.OkHttpClient$1
+com.android.okhttp.OkUrlFactory
+com.android.okhttp.Protocol
+com.android.okhttp.Request
+com.android.okhttp.Request$Builder
+com.android.okhttp.RequestBody
+com.android.okhttp.RequestBody$2
+com.android.okhttp.Response
+com.android.okhttp.Response$Builder
+com.android.okhttp.ResponseBody
+com.android.okhttp.Route
+com.android.okhttp.TlsVersion
+com.android.okhttp.internal.ConnectionSpecSelector
+com.android.okhttp.internal.DiskLruCache
+com.android.okhttp.internal.DiskLruCache$1
+com.android.okhttp.internal.DiskLruCache$2
+com.android.okhttp.internal.DiskLruCache$3
+com.android.okhttp.internal.DiskLruCache$Editor
+com.android.okhttp.internal.DiskLruCache$Editor$1
+com.android.okhttp.internal.DiskLruCache$Entry
+com.android.okhttp.internal.FaultHidingSink
+com.android.okhttp.internal.Internal
+com.android.okhttp.internal.InternalCache
+com.android.okhttp.internal.OptionalMethod
+com.android.okhttp.internal.Platform
+com.android.okhttp.internal.RouteDatabase
+com.android.okhttp.internal.URLFilter
+com.android.okhttp.internal.Util
+com.android.okhttp.internal.Util$1
+com.android.okhttp.internal.http.AuthenticatorAdapter
+com.android.okhttp.internal.http.CacheRequest
+com.android.okhttp.internal.http.CacheStrategy
+com.android.okhttp.internal.http.CacheStrategy$Factory
+com.android.okhttp.internal.http.HeaderParser
+com.android.okhttp.internal.http.Http1xStream
+com.android.okhttp.internal.http.Http1xStream$AbstractSource
+com.android.okhttp.internal.http.Http1xStream$ChunkedSink
+com.android.okhttp.internal.http.Http1xStream$ChunkedSource
+com.android.okhttp.internal.http.Http1xStream$FixedLengthSink
+com.android.okhttp.internal.http.Http1xStream$FixedLengthSource
+com.android.okhttp.internal.http.Http1xStream$UnknownLengthSource
+com.android.okhttp.internal.http.HttpEngine
+com.android.okhttp.internal.http.HttpEngine$1
+com.android.okhttp.internal.http.HttpEngine$2
+com.android.okhttp.internal.http.HttpMethod
+com.android.okhttp.internal.http.HttpStream
+com.android.okhttp.internal.http.OkHeaders
+com.android.okhttp.internal.http.OkHeaders$1
+com.android.okhttp.internal.http.RealResponseBody
+com.android.okhttp.internal.http.RequestException
+com.android.okhttp.internal.http.RequestLine
+com.android.okhttp.internal.http.RetryableSink
+com.android.okhttp.internal.http.RouteException
+com.android.okhttp.internal.http.RouteSelector
+com.android.okhttp.internal.http.StatusLine
+com.android.okhttp.internal.http.StreamAllocation
+com.android.okhttp.internal.huc.DelegatingHttpsURLConnection
+com.android.okhttp.internal.huc.HttpURLConnectionImpl
+com.android.okhttp.internal.huc.HttpsURLConnectionImpl
+com.android.okhttp.internal.io.FileSystem
+com.android.okhttp.internal.io.FileSystem$1
+com.android.okhttp.internal.io.RealConnection
+com.android.okhttp.internal.tls.OkHostnameVerifier
+com.android.okhttp.okio.AsyncTimeout
+com.android.okhttp.okio.AsyncTimeout$1
+com.android.okhttp.okio.AsyncTimeout$2
+com.android.okhttp.okio.AsyncTimeout$Watchdog
+com.android.okhttp.okio.Base64
+com.android.okhttp.okio.Buffer
+com.android.okhttp.okio.BufferedSink
+com.android.okhttp.okio.BufferedSource
+com.android.okhttp.okio.ByteString
+com.android.okhttp.okio.ForwardingSink
+com.android.okhttp.okio.ForwardingTimeout
+com.android.okhttp.okio.GzipSource
+com.android.okhttp.okio.InflaterSource
+com.android.okhttp.okio.Okio
+com.android.okhttp.okio.Okio$1
+com.android.okhttp.okio.Okio$2
+com.android.okhttp.okio.Okio$3
+com.android.okhttp.okio.RealBufferedSink
+com.android.okhttp.okio.RealBufferedSink$1
+com.android.okhttp.okio.RealBufferedSource
+com.android.okhttp.okio.RealBufferedSource$1
+com.android.okhttp.okio.Segment
+com.android.okhttp.okio.SegmentPool
+com.android.okhttp.okio.Sink
+com.android.okhttp.okio.Source
+com.android.okhttp.okio.Timeout
+com.android.okhttp.okio.Timeout$1
+com.android.okhttp.okio.Util
+com.android.org.bouncycastle.asn1.ASN1BitString
+com.android.org.bouncycastle.asn1.ASN1Choice
+com.android.org.bouncycastle.asn1.ASN1Encodable
+com.android.org.bouncycastle.asn1.ASN1EncodableVector
+com.android.org.bouncycastle.asn1.ASN1InputStream
+com.android.org.bouncycastle.asn1.ASN1Integer
+com.android.org.bouncycastle.asn1.ASN1Null
+com.android.org.bouncycastle.asn1.ASN1Object
+com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier
+com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier$OidHandle
+com.android.org.bouncycastle.asn1.ASN1OutputStream
+com.android.org.bouncycastle.asn1.ASN1Primitive
+com.android.org.bouncycastle.asn1.ASN1Sequence
+com.android.org.bouncycastle.asn1.ASN1Set
+com.android.org.bouncycastle.asn1.ASN1StreamParser
+com.android.org.bouncycastle.asn1.ASN1String
+com.android.org.bouncycastle.asn1.ASN1TaggedObject
+com.android.org.bouncycastle.asn1.ASN1TaggedObjectParser
+com.android.org.bouncycastle.asn1.ASN1UTCTime
+com.android.org.bouncycastle.asn1.BERTags
+com.android.org.bouncycastle.asn1.DERBitString
+com.android.org.bouncycastle.asn1.DERFactory
+com.android.org.bouncycastle.asn1.DERNull
+com.android.org.bouncycastle.asn1.DEROutputStream
+com.android.org.bouncycastle.asn1.DERPrintableString
+com.android.org.bouncycastle.asn1.DERSequence
+com.android.org.bouncycastle.asn1.DERSet
+com.android.org.bouncycastle.asn1.DERTaggedObject
+com.android.org.bouncycastle.asn1.DLSequence
+com.android.org.bouncycastle.asn1.DLSet
+com.android.org.bouncycastle.asn1.DefiniteLengthInputStream
+com.android.org.bouncycastle.asn1.InMemoryRepresentable
+com.android.org.bouncycastle.asn1.IndefiniteLengthInputStream
+com.android.org.bouncycastle.asn1.LimitedInputStream
+com.android.org.bouncycastle.asn1.OIDTokenizer
+com.android.org.bouncycastle.asn1.StreamUtil
+com.android.org.bouncycastle.asn1.bc.BCObjectIdentifiers
+com.android.org.bouncycastle.asn1.iana.IANAObjectIdentifiers
+com.android.org.bouncycastle.asn1.misc.MiscObjectIdentifiers
+com.android.org.bouncycastle.asn1.nist.NISTObjectIdentifiers
+com.android.org.bouncycastle.asn1.oiw.OIWObjectIdentifiers
+com.android.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers
+com.android.org.bouncycastle.asn1.x500.RDN
+com.android.org.bouncycastle.asn1.x500.X500Name
+com.android.org.bouncycastle.asn1.x500.X500NameStyle
+com.android.org.bouncycastle.asn1.x500.style.AbstractX500NameStyle
+com.android.org.bouncycastle.asn1.x500.style.BCStyle
+com.android.org.bouncycastle.asn1.x509.AlgorithmIdentifier
+com.android.org.bouncycastle.asn1.x509.Certificate
+com.android.org.bouncycastle.asn1.x509.SubjectPublicKeyInfo
+com.android.org.bouncycastle.asn1.x509.TBSCertificate
+com.android.org.bouncycastle.asn1.x509.Time
+com.android.org.bouncycastle.asn1.x509.X509ObjectIdentifiers
+com.android.org.bouncycastle.asn1.x9.X9ObjectIdentifiers
+com.android.org.bouncycastle.crypto.AsymmetricBlockCipher
+com.android.org.bouncycastle.crypto.CipherKeyGenerator
+com.android.org.bouncycastle.crypto.CipherParameters
+com.android.org.bouncycastle.crypto.CryptoException
+com.android.org.bouncycastle.crypto.Digest
+com.android.org.bouncycastle.crypto.ExtendedDigest
+com.android.org.bouncycastle.crypto.InvalidCipherTextException
+com.android.org.bouncycastle.crypto.KeyGenerationParameters
+com.android.org.bouncycastle.crypto.Mac
+com.android.org.bouncycastle.crypto.PBEParametersGenerator
+com.android.org.bouncycastle.crypto.digests.AndroidDigestFactory
+com.android.org.bouncycastle.crypto.digests.AndroidDigestFactoryInterface
+com.android.org.bouncycastle.crypto.digests.AndroidDigestFactoryOpenSSL
+com.android.org.bouncycastle.crypto.digests.EncodableDigest
+com.android.org.bouncycastle.crypto.digests.GeneralDigest
+com.android.org.bouncycastle.crypto.digests.OpenSSLDigest
+com.android.org.bouncycastle.crypto.digests.OpenSSLDigest$SHA1
+com.android.org.bouncycastle.crypto.digests.SHA1Digest
+com.android.org.bouncycastle.crypto.encodings.OAEPEncoding
+com.android.org.bouncycastle.crypto.engines.RSABlindedEngine
+com.android.org.bouncycastle.crypto.engines.RSACoreEngine
+com.android.org.bouncycastle.crypto.generators.PKCS12ParametersGenerator
+com.android.org.bouncycastle.crypto.io.MacInputStream
+com.android.org.bouncycastle.crypto.macs.HMac
+com.android.org.bouncycastle.crypto.params.KeyParameter
+com.android.org.bouncycastle.jcajce.provider.asymmetric.DH
+com.android.org.bouncycastle.jcajce.provider.asymmetric.DH$Mappings
+com.android.org.bouncycastle.jcajce.provider.asymmetric.DSA$Mappings
+com.android.org.bouncycastle.jcajce.provider.asymmetric.EC
+com.android.org.bouncycastle.jcajce.provider.asymmetric.EC$Mappings
+com.android.org.bouncycastle.jcajce.provider.asymmetric.RSA
+com.android.org.bouncycastle.jcajce.provider.asymmetric.RSA$Mappings
+com.android.org.bouncycastle.jcajce.provider.asymmetric.X509$Mappings
+com.android.org.bouncycastle.jcajce.provider.asymmetric.dh.KeyFactorySpi
+com.android.org.bouncycastle.jcajce.provider.asymmetric.dsa.DSAUtil
+com.android.org.bouncycastle.jcajce.provider.asymmetric.dsa.KeyFactorySpi
+com.android.org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi
+com.android.org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi$EC
+com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi
+com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi$NoPadding
+com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi
+com.android.org.bouncycastle.jcajce.provider.asymmetric.util.BaseCipherSpi
+com.android.org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi
+com.android.org.bouncycastle.jcajce.provider.asymmetric.util.PKCS12BagAttributeCarrierImpl
+com.android.org.bouncycastle.jcajce.provider.asymmetric.x509.CertificateFactory
+com.android.org.bouncycastle.jcajce.provider.asymmetric.x509.PEMUtil
+com.android.org.bouncycastle.jcajce.provider.asymmetric.x509.X509CertificateObject
+com.android.org.bouncycastle.jcajce.provider.config.ConfigurableProvider
+com.android.org.bouncycastle.jcajce.provider.config.ProviderConfiguration
+com.android.org.bouncycastle.jcajce.provider.config.ProviderConfigurationPermission
+com.android.org.bouncycastle.jcajce.provider.digest.DigestAlgorithmProvider
+com.android.org.bouncycastle.jcajce.provider.digest.MD5
+com.android.org.bouncycastle.jcajce.provider.digest.MD5$Mappings
+com.android.org.bouncycastle.jcajce.provider.digest.SHA1
+com.android.org.bouncycastle.jcajce.provider.digest.SHA1$KeyGenerator
+com.android.org.bouncycastle.jcajce.provider.digest.SHA1$Mappings
+com.android.org.bouncycastle.jcajce.provider.digest.SHA224
+com.android.org.bouncycastle.jcajce.provider.digest.SHA224$Mappings
+com.android.org.bouncycastle.jcajce.provider.digest.SHA256
+com.android.org.bouncycastle.jcajce.provider.digest.SHA256$Mappings
+com.android.org.bouncycastle.jcajce.provider.digest.SHA384
+com.android.org.bouncycastle.jcajce.provider.digest.SHA384$Mappings
+com.android.org.bouncycastle.jcajce.provider.digest.SHA512
+com.android.org.bouncycastle.jcajce.provider.digest.SHA512$Mappings
+com.android.org.bouncycastle.jcajce.provider.keystore.BC$Mappings
+com.android.org.bouncycastle.jcajce.provider.keystore.PKCS12$Mappings
+com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi
+com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi$Std
+com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi$StoreEntry
+com.android.org.bouncycastle.jcajce.provider.symmetric.AES
+com.android.org.bouncycastle.jcajce.provider.symmetric.AES$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.ARC4
+com.android.org.bouncycastle.jcajce.provider.symmetric.ARC4$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.Blowfish
+com.android.org.bouncycastle.jcajce.provider.symmetric.Blowfish$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.DES
+com.android.org.bouncycastle.jcajce.provider.symmetric.DES$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.DESede
+com.android.org.bouncycastle.jcajce.provider.symmetric.DESede$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2
+com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12
+com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.PBES2AlgorithmParameters
+com.android.org.bouncycastle.jcajce.provider.symmetric.PBES2AlgorithmParameters$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.RC2
+com.android.org.bouncycastle.jcajce.provider.symmetric.RC2$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.SymmetricAlgorithmProvider
+com.android.org.bouncycastle.jcajce.provider.symmetric.Twofish
+com.android.org.bouncycastle.jcajce.provider.symmetric.Twofish$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator
+com.android.org.bouncycastle.jcajce.provider.util.AlgorithmProvider
+com.android.org.bouncycastle.jcajce.provider.util.AsymmetricAlgorithmProvider
+com.android.org.bouncycastle.jcajce.provider.util.AsymmetricKeyInfoConverter
+com.android.org.bouncycastle.jcajce.provider.util.DigestFactory
+com.android.org.bouncycastle.jcajce.util.BCJcaJceHelper
+com.android.org.bouncycastle.jcajce.util.JcaJceHelper
+com.android.org.bouncycastle.jcajce.util.ProviderJcaJceHelper
+com.android.org.bouncycastle.jce.interfaces.BCKeyStore
+com.android.org.bouncycastle.jce.interfaces.PKCS12BagAttributeCarrier
+com.android.org.bouncycastle.jce.provider.BouncyCastleProvider
+com.android.org.bouncycastle.jce.provider.BouncyCastleProvider$1
+com.android.org.bouncycastle.jce.provider.BouncyCastleProviderConfiguration
+com.android.org.bouncycastle.jce.provider.CertStoreCollectionSpi
+com.android.org.bouncycastle.util.Arrays
+com.android.org.bouncycastle.util.Encodable
+com.android.org.bouncycastle.util.Integers
+com.android.org.bouncycastle.util.Iterable
+com.android.org.bouncycastle.util.Memoable
+com.android.org.bouncycastle.util.Pack
+com.android.org.bouncycastle.util.Strings
+com.android.org.bouncycastle.util.Strings$1
+com.android.org.bouncycastle.util.io.Streams
+com.android.org.conscrypt.AbstractConscryptSocket
+com.android.org.conscrypt.AbstractConscryptSocket$1
+com.android.org.conscrypt.AbstractOpenSSLSession
+com.android.org.conscrypt.AbstractSessionContext
+com.android.org.conscrypt.AbstractSessionContext$1
+com.android.org.conscrypt.ActiveSession
+com.android.org.conscrypt.AddressUtils
+com.android.org.conscrypt.ArrayUtils
+com.android.org.conscrypt.ByteArray
+com.android.org.conscrypt.CertBlacklist
+com.android.org.conscrypt.CertificatePriorityComparator
+com.android.org.conscrypt.ChainStrengthAnalyzer
+com.android.org.conscrypt.ClientSessionContext
+com.android.org.conscrypt.ClientSessionContext$HostAndPort
+com.android.org.conscrypt.Conscrypt
+com.android.org.conscrypt.ConscryptFileDescriptorSocket
+com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream
+com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLOutputStream
+com.android.org.conscrypt.CryptoUpcalls
+com.android.org.conscrypt.DefaultSSLContextImpl
+com.android.org.conscrypt.DelegatingExtendedSSLSession
+com.android.org.conscrypt.EvpMdRef$MD5
+com.android.org.conscrypt.EvpMdRef$SHA1
+com.android.org.conscrypt.EvpMdRef$SHA256
+com.android.org.conscrypt.FileClientSessionCache
+com.android.org.conscrypt.FileClientSessionCache$CacheFile
+com.android.org.conscrypt.FileClientSessionCache$Impl
+com.android.org.conscrypt.Hex
+com.android.org.conscrypt.InternalUtil
+com.android.org.conscrypt.JSSEProvider
+com.android.org.conscrypt.KeyManagerFactoryImpl
+com.android.org.conscrypt.KeyManagerImpl
+com.android.org.conscrypt.NativeCrypto
+com.android.org.conscrypt.NativeCrypto$SSLHandshakeCallbacks
+com.android.org.conscrypt.NativeCryptoJni
+com.android.org.conscrypt.NativeRef
+com.android.org.conscrypt.NativeRef$EC_GROUP
+com.android.org.conscrypt.NativeRef$EC_POINT
+com.android.org.conscrypt.NativeRef$EVP_CIPHER_CTX
+com.android.org.conscrypt.NativeRef$EVP_MD_CTX
+com.android.org.conscrypt.NativeRef$EVP_PKEY
+com.android.org.conscrypt.NativeRef$HMAC_CTX
+com.android.org.conscrypt.NativeRef$SSL_SESSION
+com.android.org.conscrypt.OpenSSLBIOInputStream
+com.android.org.conscrypt.OpenSSLCipher
+com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER
+com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER$AES
+com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER$AES$CBC
+com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER$AES$CBC$PKCS5Padding
+com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER$AES_BASE
+com.android.org.conscrypt.OpenSSLCipher$Mode
+com.android.org.conscrypt.OpenSSLCipher$Padding
+com.android.org.conscrypt.OpenSSLContextImpl
+com.android.org.conscrypt.OpenSSLContextImpl$TLSv12
+com.android.org.conscrypt.OpenSSLECGroupContext
+com.android.org.conscrypt.OpenSSLECKeyFactory
+com.android.org.conscrypt.OpenSSLECPointContext
+com.android.org.conscrypt.OpenSSLECPublicKey
+com.android.org.conscrypt.OpenSSLExtendedSessionImpl
+com.android.org.conscrypt.OpenSSLKey
+com.android.org.conscrypt.OpenSSLKeyHolder
+com.android.org.conscrypt.OpenSSLMac
+com.android.org.conscrypt.OpenSSLMac$HmacSHA1
+com.android.org.conscrypt.OpenSSLMac$HmacSHA256
+com.android.org.conscrypt.OpenSSLMessageDigestJDK
+com.android.org.conscrypt.OpenSSLMessageDigestJDK$MD5
+com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA1
+com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA256
+com.android.org.conscrypt.OpenSSLProvider
+com.android.org.conscrypt.OpenSSLRSAKeyFactory
+com.android.org.conscrypt.OpenSSLRSAPublicKey
+com.android.org.conscrypt.OpenSSLRandom
+com.android.org.conscrypt.OpenSSLSessionImpl
+com.android.org.conscrypt.OpenSSLSignature
+com.android.org.conscrypt.OpenSSLSignature$EngineType
+com.android.org.conscrypt.OpenSSLSignature$RSAPKCS1Padding
+com.android.org.conscrypt.OpenSSLSignature$SHA1RSA
+com.android.org.conscrypt.OpenSSLSignature$SHA256RSA
+com.android.org.conscrypt.OpenSSLSocketFactoryImpl
+com.android.org.conscrypt.OpenSSLSocketImpl
+com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream
+com.android.org.conscrypt.OpenSSLSocketImpl$SSLOutputStream
+com.android.org.conscrypt.OpenSSLSocketImplWrapper
+com.android.org.conscrypt.OpenSSLX509CertPath
+com.android.org.conscrypt.OpenSSLX509CertPath$Encoding
+com.android.org.conscrypt.OpenSSLX509Certificate
+com.android.org.conscrypt.OpenSSLX509CertificateFactory
+com.android.org.conscrypt.OpenSSLX509CertificateFactory$1
+com.android.org.conscrypt.OpenSSLX509CertificateFactory$2
+com.android.org.conscrypt.OpenSSLX509CertificateFactory$Parser
+com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException
+com.android.org.conscrypt.PeerInfoProvider
+com.android.org.conscrypt.PeerInfoProvider$1
+com.android.org.conscrypt.Platform
+com.android.org.conscrypt.Preconditions
+com.android.org.conscrypt.SSLClientSessionCache
+com.android.org.conscrypt.SSLParametersImpl
+com.android.org.conscrypt.SSLParametersImpl$AliasChooser
+com.android.org.conscrypt.SSLParametersImpl$PSKCallbacks
+com.android.org.conscrypt.SSLUtils
+com.android.org.conscrypt.SSLUtils$SessionType
+com.android.org.conscrypt.ServerSessionContext
+com.android.org.conscrypt.SslSessionWrapper
+com.android.org.conscrypt.SslSessionWrapper$Impl
+com.android.org.conscrypt.SslSessionWrapper$Impl$1
+com.android.org.conscrypt.SslWrapper
+com.android.org.conscrypt.TrustManagerFactoryImpl
+com.android.org.conscrypt.TrustManagerImpl
+com.android.org.conscrypt.TrustManagerImpl$ExtendedKeyUsagePKIXCertPathChecker
+com.android.org.conscrypt.TrustManagerImpl$TrustAnchorComparator
+com.android.org.conscrypt.TrustedCertificateIndex
+com.android.org.conscrypt.TrustedCertificateKeyStoreSpi
+com.android.org.conscrypt.TrustedCertificateStore
+com.android.org.conscrypt.TrustedCertificateStore$1
+com.android.org.conscrypt.TrustedCertificateStore$2
+com.android.org.conscrypt.TrustedCertificateStore$4
+com.android.org.conscrypt.TrustedCertificateStore$5
+com.android.org.conscrypt.TrustedCertificateStore$CertSelector
+com.android.org.conscrypt.TrustedCertificateStore$PreloadHolder
+com.android.org.conscrypt.ct.CTLogInfo
+com.android.org.conscrypt.ct.CTLogStore
+com.android.org.conscrypt.ct.CTLogStoreImpl
+com.android.org.conscrypt.ct.CTLogStoreImpl$InvalidLogFileException
+com.android.org.conscrypt.ct.CTPolicy
+com.android.org.conscrypt.ct.CTPolicyImpl
+com.android.org.conscrypt.ct.CTVerifier
+com.android.org.conscrypt.ct.KnownLogs
+com.android.org.conscrypt.ct.SerializationException
+com.android.server.AppWidgetBackupBridge
+com.android.server.BootReceiver
+com.android.server.BootReceiver$1
+com.android.server.BootReceiver$2
+com.android.server.LocalServices
+com.android.server.NetworkManagementSocketTagger
+com.android.server.NetworkManagementSocketTagger$1
+com.android.server.NetworkManagementSocketTagger$SocketTags
+com.android.server.SystemConfig
+com.android.server.SystemConfig$PermissionEntry
+com.android.server.WidgetBackupProvider
+com.android.server.backup.AccountSyncSettingsBackupHelper
+com.android.server.net.BaseNetworkObserver
+com.android.server.net.DnsServerEntry
+com.android.server.net.DnsServerRepository
+com.android.server.net.NetlinkTracker
+com.android.server.net.NetlinkTracker$Callback
+com.android.server.sip.SipService
+com.android.server.sip.SipService$ConnectivityReceiver
+com.android.server.sip.SipService$MyExecutor
+com.android.server.sip.SipWakeLock
+com.android.server.sip.SipWakeupTimer
+com.android.server.sip.SipWakeupTimer$MyEventComparator
+com.android.server.wifi.nano.WifiMetricsProto$AlertReasonCount
+com.android.server.wifi.nano.WifiMetricsProto$ConnectionEvent
+com.android.server.wifi.nano.WifiMetricsProto$RouterFingerPrint
+com.android.server.wifi.nano.WifiMetricsProto$RssiPollCount
+com.android.server.wifi.nano.WifiMetricsProto$SoftApDurationBucket
+com.android.server.wifi.nano.WifiMetricsProto$SoftApReturnCodeCount
+com.android.server.wifi.nano.WifiMetricsProto$StaEvent
+com.android.server.wifi.nano.WifiMetricsProto$StaEvent$ConfigInfo
+com.android.server.wifi.nano.WifiMetricsProto$WifiLog
+com.android.server.wifi.nano.WifiMetricsProto$WifiLog$ScanReturnEntry
+com.android.server.wifi.nano.WifiMetricsProto$WifiLog$WifiSystemStateEntry
+com.android.server.wifi.nano.WifiMetricsProto$WifiScoreCount
+com.android.server.wm.nano.WindowManagerProtos$TaskSnapshotProto
+com.google.android.collect.Lists
+com.google.android.collect.Maps
+com.google.android.collect.Sets
+com.google.android.gles_jni.EGLConfigImpl
+com.google.android.gles_jni.EGLContextImpl
+com.google.android.gles_jni.EGLDisplayImpl
+com.google.android.gles_jni.EGLImpl
+com.google.android.gles_jni.EGLSurfaceImpl
+com.google.android.gles_jni.GLImpl
+com.google.android.mms.MmsException
+dalvik.annotation.optimization.CriticalNative
+dalvik.annotation.optimization.FastNative
+dalvik.system.-$Lambda$xxvwQBVHC44UYbpcpA8j0sUqLOo
+dalvik.system.BaseDexClassLoader
+dalvik.system.BaseDexClassLoader$Reporter
+dalvik.system.BlockGuard
+dalvik.system.BlockGuard$1
+dalvik.system.BlockGuard$2
+dalvik.system.BlockGuard$BlockGuardPolicyException
+dalvik.system.BlockGuard$Policy
+dalvik.system.ClassExt
+dalvik.system.CloseGuard
+dalvik.system.CloseGuard$DefaultReporter
+dalvik.system.CloseGuard$DefaultTracker
+dalvik.system.CloseGuard$Reporter
+dalvik.system.CloseGuard$Tracker
+dalvik.system.DalvikLogHandler
+dalvik.system.DalvikLogging
+dalvik.system.DelegateLastClassLoader
+dalvik.system.DexClassLoader
+dalvik.system.DexFile
+dalvik.system.DexFile$DFEnum
+dalvik.system.DexPathList
+dalvik.system.DexPathList$Element
+dalvik.system.DexPathList$NativeLibraryElement
+dalvik.system.EmulatedStackFrame
+dalvik.system.EmulatedStackFrame$Range
+dalvik.system.PathClassLoader
+dalvik.system.SocketTagger
+dalvik.system.SocketTagger$1
+dalvik.system.VMDebug
+dalvik.system.VMRuntime
+dalvik.system.VMStack
+dalvik.system.ZygoteHooks
+java.io.Bits
+java.io.BufferedInputStream
+java.io.BufferedOutputStream
+java.io.BufferedReader
+java.io.BufferedWriter
+java.io.ByteArrayInputStream
+java.io.ByteArrayOutputStream
+java.io.CharArrayWriter
+java.io.Closeable
+java.io.Console
+java.io.DataInput
+java.io.DataInputStream
+java.io.DataOutput
+java.io.DataOutputStream
+java.io.DefaultFileSystem
+java.io.EOFException
+java.io.ExpiringCache
+java.io.ExpiringCache$1
+java.io.ExpiringCache$Entry
+java.io.Externalizable
+java.io.File
+java.io.File$PathStatus
+java.io.File$TempDirectory
+java.io.FileDescriptor
+java.io.FileDescriptor$1
+java.io.FileFilter
+java.io.FileInputStream
+java.io.FileInputStream$UseManualSkipException
+java.io.FileNotFoundException
+java.io.FileOutputStream
+java.io.FileReader
+java.io.FileSystem
+java.io.FileWriter
+java.io.FilenameFilter
+java.io.FilterInputStream
+java.io.FilterOutputStream
+java.io.FilterReader
+java.io.Flushable
+java.io.IOException
+java.io.InputStream
+java.io.InputStreamReader
+java.io.InterruptedIOException
+java.io.InvalidClassException
+java.io.InvalidObjectException
+java.io.ObjectInput
+java.io.ObjectInputStream
+java.io.ObjectInputStream$BlockDataInputStream
+java.io.ObjectInputStream$HandleTable
+java.io.ObjectInputStream$HandleTable$HandleList
+java.io.ObjectInputStream$PeekInputStream
+java.io.ObjectInputStream$ValidationList
+java.io.ObjectOutput
+java.io.ObjectOutputStream
+java.io.ObjectOutputStream$BlockDataOutputStream
+java.io.ObjectOutputStream$HandleTable
+java.io.ObjectOutputStream$PutField
+java.io.ObjectOutputStream$ReplaceTable
+java.io.ObjectStreamClass
+java.io.ObjectStreamClass$1
+java.io.ObjectStreamClass$2
+java.io.ObjectStreamClass$3
+java.io.ObjectStreamClass$4
+java.io.ObjectStreamClass$5
+java.io.ObjectStreamClass$Caches
+java.io.ObjectStreamClass$ClassDataSlot
+java.io.ObjectStreamClass$EntryFuture
+java.io.ObjectStreamClass$ExceptionInfo
+java.io.ObjectStreamClass$FieldReflector
+java.io.ObjectStreamClass$FieldReflectorKey
+java.io.ObjectStreamClass$MemberSignature
+java.io.ObjectStreamClass$WeakClassKey
+java.io.ObjectStreamConstants
+java.io.ObjectStreamException
+java.io.ObjectStreamField
+java.io.OutputStream
+java.io.OutputStreamWriter
+java.io.PrintStream
+java.io.PrintWriter
+java.io.PushbackInputStream
+java.io.PushbackReader
+java.io.RandomAccessFile
+java.io.Reader
+java.io.SequenceInputStream
+java.io.SerialCallbackContext
+java.io.Serializable
+java.io.SerializablePermission
+java.io.StreamCorruptedException
+java.io.StringReader
+java.io.StringWriter
+java.io.UnixFileSystem
+java.io.UnsupportedEncodingException
+java.io.Writer
+java.lang.-$Lambda$S9HjrJh0nDg7IyU6wZdPArnZWRQ
+java.lang.-$Lambda$S9HjrJh0nDg7IyU6wZdPArnZWRQ$1
+java.lang.AbstractMethodError
+java.lang.AbstractStringBuilder
+java.lang.AndroidHardcodedSystemProperties
+java.lang.Appendable
+java.lang.ArithmeticException
+java.lang.ArrayIndexOutOfBoundsException
+java.lang.ArrayStoreException
+java.lang.AssertionError
+java.lang.AutoCloseable
+java.lang.Boolean
+java.lang.BootClassLoader
+java.lang.Byte
+java.lang.Byte$ByteCache
+java.lang.CaseMapper
+java.lang.CaseMapper$1
+java.lang.CharSequence
+java.lang.CharSequence$1CharIterator
+java.lang.CharSequence$1CodePointIterator
+java.lang.Character
+java.lang.Character$CharacterCache
+java.lang.Character$Subset
+java.lang.Character$UnicodeBlock
+java.lang.Class
+java.lang.Class$Caches
+java.lang.ClassCastException
+java.lang.ClassLoader
+java.lang.ClassLoader$SystemClassLoader
+java.lang.ClassNotFoundException
+java.lang.CloneNotSupportedException
+java.lang.Cloneable
+java.lang.Comparable
+java.lang.Daemons
+java.lang.Daemons$Daemon
+java.lang.Daemons$FinalizerDaemon
+java.lang.Daemons$FinalizerWatchdogDaemon
+java.lang.Daemons$HeapTaskDaemon
+java.lang.Daemons$ReferenceQueueDaemon
+java.lang.Deprecated
+java.lang.DexCache
+java.lang.Double
+java.lang.Enum
+java.lang.Enum$1
+java.lang.EnumConstantNotPresentException
+java.lang.Error
+java.lang.Exception
+java.lang.ExceptionInInitializerError
+java.lang.Float
+java.lang.IllegalAccessError
+java.lang.IllegalAccessException
+java.lang.IllegalArgumentException
+java.lang.IllegalMonitorStateException
+java.lang.IllegalStateException
+java.lang.IllegalThreadStateException
+java.lang.IncompatibleClassChangeError
+java.lang.IndexOutOfBoundsException
+java.lang.InheritableThreadLocal
+java.lang.InstantiationError
+java.lang.InstantiationException
+java.lang.Integer
+java.lang.Integer$IntegerCache
+java.lang.InternalError
+java.lang.InterruptedException
+java.lang.Iterable
+java.lang.JavaLangAccess
+java.lang.LinkageError
+java.lang.Long
+java.lang.Long$LongCache
+java.lang.Math
+java.lang.Math$RandomNumberGeneratorHolder
+java.lang.NegativeArraySizeException
+java.lang.NoClassDefFoundError
+java.lang.NoSuchFieldError
+java.lang.NoSuchFieldException
+java.lang.NoSuchMethodError
+java.lang.NoSuchMethodException
+java.lang.NullPointerException
+java.lang.Number
+java.lang.NumberFormatException
+java.lang.Object
+java.lang.OutOfMemoryError
+java.lang.Package
+java.lang.Process
+java.lang.ProcessBuilder
+java.lang.ProcessEnvironment
+java.lang.ProcessEnvironment$ExternalData
+java.lang.ProcessEnvironment$StringEnvironment
+java.lang.ProcessEnvironment$Value
+java.lang.ProcessEnvironment$Variable
+java.lang.Readable
+java.lang.ReflectiveOperationException
+java.lang.Runnable
+java.lang.Runtime
+java.lang.RuntimeException
+java.lang.RuntimePermission
+java.lang.SecurityException
+java.lang.SecurityManager
+java.lang.Short
+java.lang.Short$ShortCache
+java.lang.StackOverflowError
+java.lang.StackTraceElement
+java.lang.StrictMath
+java.lang.String
+java.lang.String$CaseInsensitiveComparator
+java.lang.StringBuffer
+java.lang.StringBuilder
+java.lang.StringFactory
+java.lang.StringIndexOutOfBoundsException
+java.lang.System
+java.lang.System$PropertiesWithNonOverrideableDefaults
+java.lang.Thread
+java.lang.Thread$1
+java.lang.Thread$Caches
+java.lang.Thread$State
+java.lang.Thread$UncaughtExceptionHandler
+java.lang.Thread$WeakClassKey
+java.lang.ThreadDeath
+java.lang.ThreadGroup
+java.lang.ThreadLocal
+java.lang.ThreadLocal$SuppliedThreadLocal
+java.lang.ThreadLocal$ThreadLocalMap
+java.lang.ThreadLocal$ThreadLocalMap$Entry
+java.lang.Throwable
+java.lang.Throwable$PrintStreamOrWriter
+java.lang.Throwable$SentinelHolder
+java.lang.Throwable$WrappedPrintStream
+java.lang.Throwable$WrappedPrintWriter
+java.lang.TypeNotPresentException
+java.lang.UNIXProcess
+java.lang.UNIXProcess$1
+java.lang.UNIXProcess$ProcessReaperThreadFactory
+java.lang.UNIXProcess$ProcessReaperThreadFactory$1
+java.lang.UnsatisfiedLinkError
+java.lang.UnsupportedOperationException
+java.lang.VMClassLoader
+java.lang.VerifyError
+java.lang.VirtualMachineError
+java.lang.Void
+java.lang.annotation.Annotation
+java.lang.annotation.AnnotationTypeMismatchException
+java.lang.annotation.IncompleteAnnotationException
+java.lang.annotation.Inherited
+java.lang.annotation.Retention
+java.lang.annotation.Target
+java.lang.invoke.CallSite
+java.lang.invoke.ConstantCallSite
+java.lang.invoke.MethodHandle
+java.lang.invoke.MethodHandleImpl
+java.lang.invoke.MethodHandleImpl$HandleInfo
+java.lang.invoke.MethodHandleInfo
+java.lang.invoke.MethodHandleStatics
+java.lang.invoke.MethodHandles
+java.lang.invoke.MethodHandles$Lookup
+java.lang.invoke.MethodType
+java.lang.invoke.MethodType$ConcurrentWeakInternSet
+java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry
+java.lang.invoke.MethodTypeForm
+java.lang.invoke.Transformers$AlwaysThrow
+java.lang.invoke.Transformers$BindTo
+java.lang.invoke.Transformers$CatchException
+java.lang.invoke.Transformers$CollectArguments
+java.lang.invoke.Transformers$Collector
+java.lang.invoke.Transformers$Constant
+java.lang.invoke.Transformers$Construct
+java.lang.invoke.Transformers$DropArguments
+java.lang.invoke.Transformers$ExplicitCastArguments
+java.lang.invoke.Transformers$FilterArguments
+java.lang.invoke.Transformers$FilterReturnValue
+java.lang.invoke.Transformers$FoldArguments
+java.lang.invoke.Transformers$GuardWithTest
+java.lang.invoke.Transformers$InsertArguments
+java.lang.invoke.Transformers$Invoker
+java.lang.invoke.Transformers$PermuteArguments
+java.lang.invoke.Transformers$ReferenceArrayElementGetter
+java.lang.invoke.Transformers$ReferenceArrayElementSetter
+java.lang.invoke.Transformers$ReferenceIdentity
+java.lang.invoke.Transformers$Spreader
+java.lang.invoke.Transformers$Transformer
+java.lang.invoke.Transformers$VarargsCollector
+java.lang.invoke.WrongMethodTypeException
+java.lang.ref.FinalizerReference
+java.lang.ref.FinalizerReference$Sentinel
+java.lang.ref.PhantomReference
+java.lang.ref.Reference
+java.lang.ref.ReferenceQueue
+java.lang.ref.SoftReference
+java.lang.ref.WeakReference
+java.lang.reflect.AccessibleObject
+java.lang.reflect.AnnotatedElement
+java.lang.reflect.Array
+java.lang.reflect.Constructor
+java.lang.reflect.Executable
+java.lang.reflect.Executable$GenericInfo
+java.lang.reflect.Field
+java.lang.reflect.GenericArrayType
+java.lang.reflect.GenericDeclaration
+java.lang.reflect.InvocationHandler
+java.lang.reflect.InvocationTargetException
+java.lang.reflect.MalformedParametersException
+java.lang.reflect.Member
+java.lang.reflect.Method
+java.lang.reflect.Method$1
+java.lang.reflect.Modifier
+java.lang.reflect.Parameter
+java.lang.reflect.ParameterizedType
+java.lang.reflect.Proxy
+java.lang.reflect.Proxy$1
+java.lang.reflect.Proxy$Key1
+java.lang.reflect.Proxy$Key2
+java.lang.reflect.Proxy$KeyFactory
+java.lang.reflect.Proxy$KeyX
+java.lang.reflect.Proxy$ProxyClassFactory
+java.lang.reflect.Type
+java.lang.reflect.TypeVariable
+java.lang.reflect.UndeclaredThrowableException
+java.lang.reflect.WeakCache
+java.lang.reflect.WeakCache$CacheKey
+java.lang.reflect.WeakCache$CacheValue
+java.lang.reflect.WeakCache$Factory
+java.lang.reflect.WeakCache$LookupValue
+java.lang.reflect.WeakCache$Value
+java.lang.reflect.WildcardType
+java.math.BigDecimal
+java.math.BigInt
+java.math.BigInteger
+java.math.Conversion
+java.math.Division
+java.math.MathContext
+java.math.Multiplication
+java.math.NativeBN
+java.math.RoundingMode
+java.net.AbstractPlainDatagramSocketImpl
+java.net.AbstractPlainSocketImpl
+java.net.AddressCache
+java.net.AddressCache$AddressCacheEntry
+java.net.AddressCache$AddressCacheKey
+java.net.ConnectException
+java.net.CookieHandler
+java.net.CookieManager
+java.net.CookiePolicy
+java.net.CookiePolicy$1
+java.net.CookiePolicy$2
+java.net.CookiePolicy$3
+java.net.CookieStore
+java.net.DatagramPacket
+java.net.DatagramSocket
+java.net.DatagramSocket$1
+java.net.DatagramSocketImpl
+java.net.DefaultDatagramSocketImplFactory
+java.net.DefaultFileNameMap
+java.net.DefaultInterface
+java.net.FileNameMap
+java.net.HttpURLConnection
+java.net.IDN
+java.net.InMemoryCookieStore
+java.net.Inet4Address
+java.net.Inet6Address
+java.net.Inet6Address$Inet6AddressHolder
+java.net.Inet6AddressImpl
+java.net.InetAddress
+java.net.InetAddress$1
+java.net.InetAddress$InetAddressHolder
+java.net.InetAddressImpl
+java.net.InetSocketAddress
+java.net.InetSocketAddress$InetSocketAddressHolder
+java.net.InterfaceAddress
+java.net.JarURLConnection
+java.net.MalformedURLException
+java.net.MulticastSocket
+java.net.NetworkInterface
+java.net.NetworkInterface$1checkedAddresses
+java.net.NoRouteToHostException
+java.net.Parts
+java.net.PlainDatagramSocketImpl
+java.net.PlainSocketImpl
+java.net.PortUnreachableException
+java.net.ProtocolException
+java.net.ProtocolFamily
+java.net.Proxy
+java.net.Proxy$Type
+java.net.ProxySelector
+java.net.ResponseCache
+java.net.ServerSocket
+java.net.Socket
+java.net.Socket$1
+java.net.Socket$2
+java.net.Socket$3
+java.net.SocketAddress
+java.net.SocketException
+java.net.SocketImpl
+java.net.SocketInputStream
+java.net.SocketOptions
+java.net.SocketOutputStream
+java.net.SocketTimeoutException
+java.net.SocksConsts
+java.net.SocksSocketImpl
+java.net.StandardProtocolFamily
+java.net.URI
+java.net.URI$Parser
+java.net.URISyntaxException
+java.net.URL
+java.net.URLConnection
+java.net.URLDecoder
+java.net.URLEncoder
+java.net.URLStreamHandler
+java.net.URLStreamHandlerFactory
+java.net.UnknownHostException
+java.net.UnknownServiceException
+java.nio.Bits
+java.nio.Buffer
+java.nio.BufferOverflowException
+java.nio.BufferUnderflowException
+java.nio.ByteBuffer
+java.nio.ByteBufferAsCharBuffer
+java.nio.ByteBufferAsDoubleBuffer
+java.nio.ByteBufferAsFloatBuffer
+java.nio.ByteBufferAsIntBuffer
+java.nio.ByteBufferAsLongBuffer
+java.nio.ByteBufferAsShortBuffer
+java.nio.ByteOrder
+java.nio.CharBuffer
+java.nio.DirectByteBuffer
+java.nio.DirectByteBuffer$MemoryRef
+java.nio.DoubleBuffer
+java.nio.FloatBuffer
+java.nio.HeapByteBuffer
+java.nio.HeapCharBuffer
+java.nio.IntBuffer
+java.nio.InvalidMarkException
+java.nio.LongBuffer
+java.nio.MappedByteBuffer
+java.nio.NIOAccess
+java.nio.NioUtils
+java.nio.ReadOnlyBufferException
+java.nio.ShortBuffer
+java.nio.StringCharBuffer
+java.nio.channels.AsynchronousCloseException
+java.nio.channels.ByteChannel
+java.nio.channels.CancelledKeyException
+java.nio.channels.Channel
+java.nio.channels.Channels
+java.nio.channels.Channels$1
+java.nio.channels.ClosedByInterruptException
+java.nio.channels.ClosedChannelException
+java.nio.channels.DatagramChannel
+java.nio.channels.FileChannel
+java.nio.channels.FileChannel$MapMode
+java.nio.channels.FileLock
+java.nio.channels.GatheringByteChannel
+java.nio.channels.InterruptibleChannel
+java.nio.channels.MulticastChannel
+java.nio.channels.NetworkChannel
+java.nio.channels.NonWritableChannelException
+java.nio.channels.OverlappingFileLockException
+java.nio.channels.ReadableByteChannel
+java.nio.channels.ScatteringByteChannel
+java.nio.channels.SeekableByteChannel
+java.nio.channels.SelectableChannel
+java.nio.channels.SelectionKey
+java.nio.channels.Selector
+java.nio.channels.ServerSocketChannel
+java.nio.channels.SocketChannel
+java.nio.channels.WritableByteChannel
+java.nio.channels.spi.AbstractInterruptibleChannel
+java.nio.channels.spi.AbstractInterruptibleChannel$1
+java.nio.channels.spi.AbstractSelectableChannel
+java.nio.channels.spi.AbstractSelectionKey
+java.nio.channels.spi.AbstractSelector
+java.nio.channels.spi.AbstractSelector$1
+java.nio.channels.spi.SelectorProvider
+java.nio.channels.spi.SelectorProvider$1
+java.nio.charset.CharacterCodingException
+java.nio.charset.Charset
+java.nio.charset.CharsetDecoder
+java.nio.charset.CharsetDecoderICU
+java.nio.charset.CharsetEncoder
+java.nio.charset.CharsetEncoderICU
+java.nio.charset.CharsetICU
+java.nio.charset.CoderResult
+java.nio.charset.CoderResult$1
+java.nio.charset.CoderResult$2
+java.nio.charset.CoderResult$Cache
+java.nio.charset.CodingErrorAction
+java.nio.charset.IllegalCharsetNameException
+java.nio.charset.StandardCharsets
+java.nio.charset.UnsupportedCharsetException
+java.nio.file.AccessMode
+java.nio.file.CopyOption
+java.nio.file.FileAlreadyExistsException
+java.nio.file.FileSystem
+java.nio.file.FileSystemException
+java.nio.file.FileSystems
+java.nio.file.FileSystems$DefaultFileSystemHolder
+java.nio.file.FileSystems$DefaultFileSystemHolder$1
+java.nio.file.Files
+java.nio.file.LinkOption
+java.nio.file.NoSuchFileException
+java.nio.file.OpenOption
+java.nio.file.Path
+java.nio.file.Paths
+java.nio.file.StandardOpenOption
+java.nio.file.Watchable
+java.nio.file.attribute.AttributeView
+java.nio.file.attribute.BasicFileAttributeView
+java.nio.file.attribute.BasicFileAttributes
+java.nio.file.attribute.FileAttribute
+java.nio.file.attribute.FileAttributeView
+java.nio.file.attribute.PosixFileAttributes
+java.nio.file.spi.FileSystemProvider
+java.security.AccessControlContext
+java.security.AccessControlException
+java.security.AccessController
+java.security.AlgorithmConstraints
+java.security.AlgorithmParameters
+java.security.AlgorithmParametersSpi
+java.security.BasicPermission
+java.security.CodeSigner
+java.security.CryptoPrimitive
+java.security.DigestException
+java.security.GeneralSecurityException
+java.security.Guard
+java.security.InvalidAlgorithmParameterException
+java.security.InvalidKeyException
+java.security.InvalidParameterException
+java.security.Key
+java.security.KeyException
+java.security.KeyFactory
+java.security.KeyFactorySpi
+java.security.KeyManagementException
+java.security.KeyPair
+java.security.KeyPairGenerator
+java.security.KeyPairGeneratorSpi
+java.security.KeyStore
+java.security.KeyStore$1
+java.security.KeyStoreException
+java.security.KeyStoreSpi
+java.security.MessageDigest
+java.security.MessageDigest$Delegate
+java.security.MessageDigestSpi
+java.security.NoSuchAlgorithmException
+java.security.NoSuchProviderException
+java.security.Permission
+java.security.PermissionCollection
+java.security.Permissions
+java.security.Principal
+java.security.PrivateKey
+java.security.PrivilegedAction
+java.security.PrivilegedActionException
+java.security.PrivilegedExceptionAction
+java.security.ProtectionDomain
+java.security.Provider
+java.security.Provider$EngineDescription
+java.security.Provider$Service
+java.security.Provider$ServiceKey
+java.security.Provider$UString
+java.security.PublicKey
+java.security.SecureRandom
+java.security.SecureRandomSpi
+java.security.Security
+java.security.Signature
+java.security.Signature$Delegate
+java.security.SignatureException
+java.security.SignatureSpi
+java.security.UnrecoverableEntryException
+java.security.UnrecoverableKeyException
+java.security.cert.CRL
+java.security.cert.CRLException
+java.security.cert.CRLReason
+java.security.cert.CertPath
+java.security.cert.CertPathBuilderException
+java.security.cert.CertPathChecker
+java.security.cert.CertPathHelperImpl
+java.security.cert.CertPathParameters
+java.security.cert.CertPathValidator
+java.security.cert.CertPathValidatorException
+java.security.cert.CertPathValidatorResult
+java.security.cert.CertPathValidatorSpi
+java.security.cert.CertSelector
+java.security.cert.CertStore
+java.security.cert.CertStoreException
+java.security.cert.CertStoreParameters
+java.security.cert.CertStoreSpi
+java.security.cert.Certificate
+java.security.cert.CertificateEncodingException
+java.security.cert.CertificateException
+java.security.cert.CertificateExpiredException
+java.security.cert.CertificateFactory
+java.security.cert.CertificateFactorySpi
+java.security.cert.CertificateNotYetValidException
+java.security.cert.CertificateParsingException
+java.security.cert.CollectionCertStoreParameters
+java.security.cert.Extension
+java.security.cert.PKIXCertPathChecker
+java.security.cert.PKIXCertPathValidatorResult
+java.security.cert.PKIXParameters
+java.security.cert.PKIXRevocationChecker
+java.security.cert.PKIXRevocationChecker$Option
+java.security.cert.PolicyNode
+java.security.cert.PolicyQualifierInfo
+java.security.cert.TrustAnchor
+java.security.cert.X509CertSelector
+java.security.cert.X509Certificate
+java.security.cert.X509Extension
+java.security.interfaces.DSAKey
+java.security.interfaces.DSAPublicKey
+java.security.interfaces.ECKey
+java.security.interfaces.ECPrivateKey
+java.security.interfaces.ECPublicKey
+java.security.interfaces.RSAKey
+java.security.interfaces.RSAPrivateKey
+java.security.interfaces.RSAPublicKey
+java.security.spec.AlgorithmParameterSpec
+java.security.spec.ECField
+java.security.spec.ECFieldFp
+java.security.spec.ECGenParameterSpec
+java.security.spec.ECParameterSpec
+java.security.spec.ECPoint
+java.security.spec.ECPrivateKeySpec
+java.security.spec.ECPublicKeySpec
+java.security.spec.EllipticCurve
+java.security.spec.EncodedKeySpec
+java.security.spec.InvalidKeySpecException
+java.security.spec.InvalidParameterSpecException
+java.security.spec.KeySpec
+java.security.spec.MGF1ParameterSpec
+java.security.spec.PKCS8EncodedKeySpec
+java.security.spec.RSAPrivateCrtKeySpec
+java.security.spec.RSAPrivateKeySpec
+java.security.spec.RSAPublicKeySpec
+java.security.spec.X509EncodedKeySpec
+java.sql.Timestamp
+java.text.AttributedCharacterIterator$Attribute
+java.text.Bidi
+java.text.BreakIterator
+java.text.CalendarBuilder
+java.text.CharacterIterator
+java.text.CollationKey
+java.text.Collator
+java.text.DateFormat
+java.text.DateFormat$Field
+java.text.DateFormatSymbols
+java.text.DecimalFormat
+java.text.DecimalFormatSymbols
+java.text.DontCareFieldPosition
+java.text.DontCareFieldPosition$1
+java.text.FieldPosition
+java.text.FieldPosition$Delegate
+java.text.Format
+java.text.Format$Field
+java.text.Format$FieldDelegate
+java.text.IcuIteratorWrapper
+java.text.MessageFormat
+java.text.MessageFormat$Field
+java.text.Normalizer
+java.text.Normalizer$Form
+java.text.NumberFormat
+java.text.ParseException
+java.text.ParsePosition
+java.text.RuleBasedCollator
+java.text.SimpleDateFormat
+java.text.StringCharacterIterator
+java.time.DateTimeException
+java.time.format.DateTimeParseException
+java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo
+java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$1
+java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$2
+java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$3
+java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$4
+java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$5
+java.util.-$Lambda$Hazqao1eYCE_pmZR5Jlrc2GvLhk
+java.util.-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw
+java.util.-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw$1
+java.util.-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw$2
+java.util.-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw$3
+java.util.AbstractCollection
+java.util.AbstractList
+java.util.AbstractList$Itr
+java.util.AbstractList$ListItr
+java.util.AbstractMap
+java.util.AbstractMap$1
+java.util.AbstractMap$2
+java.util.AbstractMap$2$1
+java.util.AbstractMap$SimpleEntry
+java.util.AbstractMap$SimpleImmutableEntry
+java.util.AbstractQueue
+java.util.AbstractSequentialList
+java.util.AbstractSet
+java.util.ArrayDeque
+java.util.ArrayDeque$DeqIterator
+java.util.ArrayDeque$DescendingIterator
+java.util.ArrayList
+java.util.ArrayList$ArrayListSpliterator
+java.util.ArrayList$Itr
+java.util.ArrayList$ListItr
+java.util.ArrayList$SubList
+java.util.ArrayList$SubList$1
+java.util.ArrayPrefixHelpers$CumulateTask
+java.util.ArrayPrefixHelpers$DoubleCumulateTask
+java.util.ArrayPrefixHelpers$IntCumulateTask
+java.util.ArrayPrefixHelpers$LongCumulateTask
+java.util.Arrays
+java.util.Arrays$ArrayList
+java.util.Arrays$NaturalOrder
+java.util.ArraysParallelSortHelpers$FJByte$Sorter
+java.util.ArraysParallelSortHelpers$FJChar$Sorter
+java.util.ArraysParallelSortHelpers$FJDouble$Sorter
+java.util.ArraysParallelSortHelpers$FJFloat$Sorter
+java.util.ArraysParallelSortHelpers$FJInt$Sorter
+java.util.ArraysParallelSortHelpers$FJLong$Sorter
+java.util.ArraysParallelSortHelpers$FJObject$Sorter
+java.util.ArraysParallelSortHelpers$FJShort$Sorter
+java.util.Base64
+java.util.Base64$Decoder
+java.util.Base64$Encoder
+java.util.BitSet
+java.util.Calendar
+java.util.Collection
+java.util.Collections
+java.util.Collections$1
+java.util.Collections$2
+java.util.Collections$3
+java.util.Collections$AsLIFOQueue
+java.util.Collections$CheckedCollection
+java.util.Collections$CheckedList
+java.util.Collections$CheckedMap
+java.util.Collections$CheckedNavigableMap
+java.util.Collections$CheckedNavigableSet
+java.util.Collections$CheckedQueue
+java.util.Collections$CheckedRandomAccessList
+java.util.Collections$CheckedSet
+java.util.Collections$CheckedSortedMap
+java.util.Collections$CheckedSortedSet
+java.util.Collections$CopiesList
+java.util.Collections$EmptyEnumeration
+java.util.Collections$EmptyIterator
+java.util.Collections$EmptyList
+java.util.Collections$EmptyListIterator
+java.util.Collections$EmptyMap
+java.util.Collections$EmptySet
+java.util.Collections$ReverseComparator
+java.util.Collections$ReverseComparator2
+java.util.Collections$SetFromMap
+java.util.Collections$SingletonList
+java.util.Collections$SingletonMap
+java.util.Collections$SingletonSet
+java.util.Collections$SynchronizedCollection
+java.util.Collections$SynchronizedList
+java.util.Collections$SynchronizedMap
+java.util.Collections$SynchronizedNavigableMap
+java.util.Collections$SynchronizedNavigableSet
+java.util.Collections$SynchronizedRandomAccessList
+java.util.Collections$SynchronizedSet
+java.util.Collections$SynchronizedSortedMap
+java.util.Collections$SynchronizedSortedSet
+java.util.Collections$UnmodifiableCollection
+java.util.Collections$UnmodifiableCollection$1
+java.util.Collections$UnmodifiableList
+java.util.Collections$UnmodifiableList$1
+java.util.Collections$UnmodifiableMap
+java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet
+java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$1
+java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry
+java.util.Collections$UnmodifiableNavigableMap
+java.util.Collections$UnmodifiableNavigableMap$EmptyNavigableMap
+java.util.Collections$UnmodifiableNavigableSet
+java.util.Collections$UnmodifiableNavigableSet$EmptyNavigableSet
+java.util.Collections$UnmodifiableRandomAccessList
+java.util.Collections$UnmodifiableSet
+java.util.Collections$UnmodifiableSortedMap
+java.util.Collections$UnmodifiableSortedSet
+java.util.ComparableTimSort
+java.util.Comparator
+java.util.Comparators$NaturalOrderComparator
+java.util.Comparators$NullComparator
+java.util.ConcurrentModificationException
+java.util.Currency
+java.util.Date
+java.util.Deque
+java.util.Dictionary
+java.util.DualPivotQuicksort
+java.util.EmptyStackException
+java.util.EnumMap
+java.util.EnumMap$1
+java.util.EnumMap$EntryIterator
+java.util.EnumMap$EntryIterator$Entry
+java.util.EnumMap$EntrySet
+java.util.EnumMap$EnumMapIterator
+java.util.EnumMap$KeyIterator
+java.util.EnumMap$KeySet
+java.util.EnumMap$ValueIterator
+java.util.EnumMap$Values
+java.util.EnumSet
+java.util.EnumSet$SerializationProxy
+java.util.Enumeration
+java.util.EventListener
+java.util.FormatFlagsConversionMismatchException
+java.util.Formattable
+java.util.Formatter
+java.util.Formatter$Conversion
+java.util.Formatter$DateTime
+java.util.Formatter$FixedString
+java.util.Formatter$Flags
+java.util.Formatter$FormatSpecifier
+java.util.Formatter$FormatSpecifierParser
+java.util.Formatter$FormatString
+java.util.FormatterClosedException
+java.util.GregorianCalendar
+java.util.HashMap
+java.util.HashMap$EntryIterator
+java.util.HashMap$EntrySet
+java.util.HashMap$HashIterator
+java.util.HashMap$KeyIterator
+java.util.HashMap$KeySet
+java.util.HashMap$Node
+java.util.HashMap$TreeNode
+java.util.HashMap$ValueIterator
+java.util.HashMap$Values
+java.util.HashSet
+java.util.Hashtable
+java.util.Hashtable$EntrySet
+java.util.Hashtable$Enumerator
+java.util.Hashtable$HashtableEntry
+java.util.Hashtable$KeySet
+java.util.Hashtable$ValueCollection
+java.util.IdentityHashMap
+java.util.IdentityHashMap$EntryIterator
+java.util.IdentityHashMap$EntryIterator$Entry
+java.util.IdentityHashMap$EntrySet
+java.util.IdentityHashMap$IdentityHashMapIterator
+java.util.IdentityHashMap$KeyIterator
+java.util.IdentityHashMap$KeySet
+java.util.IdentityHashMap$ValueIterator
+java.util.IdentityHashMap$Values
+java.util.IllegalFormatException
+java.util.IllformedLocaleException
+java.util.Iterator
+java.util.JumboEnumSet
+java.util.JumboEnumSet$EnumSetIterator
+java.util.LinkedHashMap
+java.util.LinkedHashMap$LinkedEntryIterator
+java.util.LinkedHashMap$LinkedEntrySet
+java.util.LinkedHashMap$LinkedHashIterator
+java.util.LinkedHashMap$LinkedHashMapEntry
+java.util.LinkedHashMap$LinkedKeyIterator
+java.util.LinkedHashMap$LinkedKeySet
+java.util.LinkedHashMap$LinkedValueIterator
+java.util.LinkedHashMap$LinkedValues
+java.util.LinkedHashSet
+java.util.LinkedList
+java.util.LinkedList$DescendingIterator
+java.util.LinkedList$ListItr
+java.util.LinkedList$Node
+java.util.List
+java.util.ListIterator
+java.util.Locale
+java.util.Locale$Builder
+java.util.Locale$Cache
+java.util.Locale$Category
+java.util.Locale$FilteringMode
+java.util.Locale$LanguageRange
+java.util.Locale$LocaleKey
+java.util.Locale$NoImagePreloadHolder
+java.util.Map
+java.util.Map$Entry
+java.util.MissingFormatArgumentException
+java.util.MissingResourceException
+java.util.NavigableMap
+java.util.NavigableSet
+java.util.NoSuchElementException
+java.util.Objects
+java.util.Observable
+java.util.Observer
+java.util.Optional
+java.util.PrimitiveIterator
+java.util.PrimitiveIterator$OfInt
+java.util.PriorityQueue
+java.util.PriorityQueue$Itr
+java.util.Properties
+java.util.Properties$LineReader
+java.util.PropertyResourceBundle
+java.util.Queue
+java.util.Random
+java.util.RandomAccess
+java.util.RandomAccessSubList
+java.util.RegularEnumSet
+java.util.RegularEnumSet$EnumSetIterator
+java.util.ResourceBundle
+java.util.ResourceBundle$1
+java.util.ResourceBundle$BundleReference
+java.util.ResourceBundle$CacheKey
+java.util.ResourceBundle$CacheKeyReference
+java.util.ResourceBundle$Control
+java.util.ResourceBundle$Control$1
+java.util.ResourceBundle$Control$CandidateListCache
+java.util.ResourceBundle$LoaderReference
+java.util.Scanner
+java.util.Scanner$1
+java.util.ServiceConfigurationError
+java.util.ServiceLoader
+java.util.ServiceLoader$1
+java.util.ServiceLoader$LazyIterator
+java.util.Set
+java.util.SimpleTimeZone
+java.util.SortedMap
+java.util.SortedSet
+java.util.Spliterator
+java.util.Spliterator$OfDouble
+java.util.Spliterator$OfInt
+java.util.Spliterator$OfLong
+java.util.Spliterator$OfPrimitive
+java.util.Spliterators
+java.util.Spliterators$EmptySpliterator
+java.util.Spliterators$EmptySpliterator$OfDouble
+java.util.Spliterators$EmptySpliterator$OfInt
+java.util.Spliterators$EmptySpliterator$OfLong
+java.util.Spliterators$EmptySpliterator$OfRef
+java.util.Spliterators$IntArraySpliterator
+java.util.Spliterators$IteratorSpliterator
+java.util.Stack
+java.util.StringJoiner
+java.util.StringTokenizer
+java.util.SubList
+java.util.SubList$1
+java.util.TaskQueue
+java.util.TimSort
+java.util.TimeZone
+java.util.Timer
+java.util.Timer$1
+java.util.TimerTask
+java.util.TimerThread
+java.util.TreeMap
+java.util.TreeMap$AscendingSubMap
+java.util.TreeMap$AscendingSubMap$AscendingEntrySetView
+java.util.TreeMap$EntryIterator
+java.util.TreeMap$EntrySet
+java.util.TreeMap$KeyIterator
+java.util.TreeMap$KeySet
+java.util.TreeMap$NavigableSubMap
+java.util.TreeMap$NavigableSubMap$EntrySetView
+java.util.TreeMap$NavigableSubMap$SubMapEntryIterator
+java.util.TreeMap$NavigableSubMap$SubMapIterator
+java.util.TreeMap$NavigableSubMap$SubMapKeyIterator
+java.util.TreeMap$PrivateEntryIterator
+java.util.TreeMap$TreeMapEntry
+java.util.TreeMap$ValueIterator
+java.util.TreeMap$Values
+java.util.TreeSet
+java.util.UUID
+java.util.UUID$Holder
+java.util.UnknownFormatConversionException
+java.util.Vector
+java.util.Vector$1
+java.util.Vector$Itr
+java.util.WeakHashMap
+java.util.WeakHashMap$Entry
+java.util.WeakHashMap$EntrySet
+java.util.WeakHashMap$HashIterator
+java.util.WeakHashMap$KeyIterator
+java.util.WeakHashMap$KeySet
+java.util.WeakHashMap$ValueIterator
+java.util.WeakHashMap$Values
+java.util.concurrent.-$Lambda$xR9BLpu6SifNikvFgr4lEiECBsk
+java.util.concurrent.AbstractExecutorService
+java.util.concurrent.ArrayBlockingQueue
+java.util.concurrent.BlockingDeque
+java.util.concurrent.BlockingQueue
+java.util.concurrent.Callable
+java.util.concurrent.CancellationException
+java.util.concurrent.CompletableFuture
+java.util.concurrent.CompletableFuture$AltResult
+java.util.concurrent.CompletableFuture$AsynchronousCompletionTask
+java.util.concurrent.CompletableFuture$Completion
+java.util.concurrent.CompletionStage
+java.util.concurrent.ConcurrentHashMap
+java.util.concurrent.ConcurrentHashMap$BaseIterator
+java.util.concurrent.ConcurrentHashMap$BulkTask
+java.util.concurrent.ConcurrentHashMap$CollectionView
+java.util.concurrent.ConcurrentHashMap$CounterCell
+java.util.concurrent.ConcurrentHashMap$EntryIterator
+java.util.concurrent.ConcurrentHashMap$EntrySetView
+java.util.concurrent.ConcurrentHashMap$ForEachEntryTask
+java.util.concurrent.ConcurrentHashMap$ForEachKeyTask
+java.util.concurrent.ConcurrentHashMap$ForEachMappingTask
+java.util.concurrent.ConcurrentHashMap$ForEachTransformedEntryTask
+java.util.concurrent.ConcurrentHashMap$ForEachTransformedKeyTask
+java.util.concurrent.ConcurrentHashMap$ForEachTransformedMappingTask
+java.util.concurrent.ConcurrentHashMap$ForEachTransformedValueTask
+java.util.concurrent.ConcurrentHashMap$ForEachValueTask
+java.util.concurrent.ConcurrentHashMap$ForwardingNode
+java.util.concurrent.ConcurrentHashMap$KeyIterator
+java.util.concurrent.ConcurrentHashMap$KeySetView
+java.util.concurrent.ConcurrentHashMap$KeySpliterator
+java.util.concurrent.ConcurrentHashMap$MapEntry
+java.util.concurrent.ConcurrentHashMap$MapReduceEntriesTask
+java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToDoubleTask
+java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToIntTask
+java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToLongTask
+java.util.concurrent.ConcurrentHashMap$MapReduceKeysTask
+java.util.concurrent.ConcurrentHashMap$MapReduceKeysToDoubleTask
+java.util.concurrent.ConcurrentHashMap$MapReduceKeysToIntTask
+java.util.concurrent.ConcurrentHashMap$MapReduceKeysToLongTask
+java.util.concurrent.ConcurrentHashMap$MapReduceMappingsTask
+java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToDoubleTask
+java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToIntTask
+java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToLongTask
+java.util.concurrent.ConcurrentHashMap$MapReduceValuesTask
+java.util.concurrent.ConcurrentHashMap$MapReduceValuesToDoubleTask
+java.util.concurrent.ConcurrentHashMap$MapReduceValuesToIntTask
+java.util.concurrent.ConcurrentHashMap$MapReduceValuesToLongTask
+java.util.concurrent.ConcurrentHashMap$Node
+java.util.concurrent.ConcurrentHashMap$ReduceEntriesTask
+java.util.concurrent.ConcurrentHashMap$ReduceKeysTask
+java.util.concurrent.ConcurrentHashMap$ReduceValuesTask
+java.util.concurrent.ConcurrentHashMap$ReservationNode
+java.util.concurrent.ConcurrentHashMap$SearchEntriesTask
+java.util.concurrent.ConcurrentHashMap$SearchKeysTask
+java.util.concurrent.ConcurrentHashMap$SearchMappingsTask
+java.util.concurrent.ConcurrentHashMap$SearchValuesTask
+java.util.concurrent.ConcurrentHashMap$Segment
+java.util.concurrent.ConcurrentHashMap$Traverser
+java.util.concurrent.ConcurrentHashMap$TreeBin
+java.util.concurrent.ConcurrentHashMap$TreeNode
+java.util.concurrent.ConcurrentHashMap$ValueIterator
+java.util.concurrent.ConcurrentHashMap$ValuesView
+java.util.concurrent.ConcurrentLinkedDeque
+java.util.concurrent.ConcurrentLinkedDeque$Node
+java.util.concurrent.ConcurrentLinkedQueue
+java.util.concurrent.ConcurrentLinkedQueue$Itr
+java.util.concurrent.ConcurrentLinkedQueue$Node
+java.util.concurrent.ConcurrentMap
+java.util.concurrent.ConcurrentNavigableMap
+java.util.concurrent.ConcurrentSkipListMap
+java.util.concurrent.ConcurrentSkipListMap$HeadIndex
+java.util.concurrent.ConcurrentSkipListMap$Index
+java.util.concurrent.ConcurrentSkipListMap$Iter
+java.util.concurrent.ConcurrentSkipListMap$Node
+java.util.concurrent.ConcurrentSkipListMap$ValueIterator
+java.util.concurrent.ConcurrentSkipListMap$Values
+java.util.concurrent.CopyOnWriteArrayList
+java.util.concurrent.CopyOnWriteArrayList$COWIterator
+java.util.concurrent.CopyOnWriteArraySet
+java.util.concurrent.CountDownLatch
+java.util.concurrent.CountDownLatch$Sync
+java.util.concurrent.CountedCompleter
+java.util.concurrent.DelayQueue
+java.util.concurrent.Delayed
+java.util.concurrent.ExecutionException
+java.util.concurrent.Executor
+java.util.concurrent.ExecutorService
+java.util.concurrent.Executors
+java.util.concurrent.Executors$DefaultThreadFactory
+java.util.concurrent.Executors$DelegatedExecutorService
+java.util.concurrent.Executors$DelegatedScheduledExecutorService
+java.util.concurrent.Executors$FinalizableDelegatedExecutorService
+java.util.concurrent.Executors$RunnableAdapter
+java.util.concurrent.ForkJoinPool
+java.util.concurrent.ForkJoinPool$1
+java.util.concurrent.ForkJoinPool$DefaultForkJoinWorkerThreadFactory
+java.util.concurrent.ForkJoinPool$ForkJoinWorkerThreadFactory
+java.util.concurrent.ForkJoinTask
+java.util.concurrent.ForkJoinTask$ExceptionNode
+java.util.concurrent.Future
+java.util.concurrent.FutureTask
+java.util.concurrent.FutureTask$WaitNode
+java.util.concurrent.LinkedBlockingDeque
+java.util.concurrent.LinkedBlockingDeque$AbstractItr
+java.util.concurrent.LinkedBlockingDeque$Itr
+java.util.concurrent.LinkedBlockingDeque$Node
+java.util.concurrent.LinkedBlockingQueue
+java.util.concurrent.LinkedBlockingQueue$Itr
+java.util.concurrent.LinkedBlockingQueue$Node
+java.util.concurrent.PriorityBlockingQueue
+java.util.concurrent.RejectedExecutionException
+java.util.concurrent.RejectedExecutionHandler
+java.util.concurrent.RunnableFuture
+java.util.concurrent.RunnableScheduledFuture
+java.util.concurrent.ScheduledExecutorService
+java.util.concurrent.ScheduledFuture
+java.util.concurrent.ScheduledThreadPoolExecutor
+java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
+java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask
+java.util.concurrent.Semaphore
+java.util.concurrent.Semaphore$NonfairSync
+java.util.concurrent.Semaphore$Sync
+java.util.concurrent.SynchronousQueue
+java.util.concurrent.SynchronousQueue$TransferQueue
+java.util.concurrent.SynchronousQueue$TransferStack
+java.util.concurrent.SynchronousQueue$TransferStack$SNode
+java.util.concurrent.SynchronousQueue$Transferer
+java.util.concurrent.ThreadFactory
+java.util.concurrent.ThreadLocalRandom
+java.util.concurrent.ThreadLocalRandom$1
+java.util.concurrent.ThreadPoolExecutor
+java.util.concurrent.ThreadPoolExecutor$AbortPolicy
+java.util.concurrent.ThreadPoolExecutor$DiscardOldestPolicy
+java.util.concurrent.ThreadPoolExecutor$DiscardPolicy
+java.util.concurrent.ThreadPoolExecutor$Worker
+java.util.concurrent.TimeUnit
+java.util.concurrent.TimeUnit$1
+java.util.concurrent.TimeUnit$2
+java.util.concurrent.TimeUnit$3
+java.util.concurrent.TimeUnit$4
+java.util.concurrent.TimeUnit$5
+java.util.concurrent.TimeUnit$6
+java.util.concurrent.TimeUnit$7
+java.util.concurrent.TimeoutException
+java.util.concurrent.atomic.AtomicBoolean
+java.util.concurrent.atomic.AtomicInteger
+java.util.concurrent.atomic.AtomicIntegerArray
+java.util.concurrent.atomic.AtomicIntegerFieldUpdater
+java.util.concurrent.atomic.AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl
+java.util.concurrent.atomic.AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl$1
+java.util.concurrent.atomic.AtomicLong
+java.util.concurrent.atomic.AtomicLongArray
+java.util.concurrent.atomic.AtomicReference
+java.util.concurrent.atomic.AtomicReferenceArray
+java.util.concurrent.atomic.AtomicReferenceFieldUpdater
+java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
+java.util.concurrent.locks.AbstractOwnableSynchronizer
+java.util.concurrent.locks.AbstractQueuedSynchronizer
+java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
+java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
+java.util.concurrent.locks.Condition
+java.util.concurrent.locks.Lock
+java.util.concurrent.locks.LockSupport
+java.util.concurrent.locks.ReadWriteLock
+java.util.concurrent.locks.ReentrantLock
+java.util.concurrent.locks.ReentrantLock$FairSync
+java.util.concurrent.locks.ReentrantLock$NonfairSync
+java.util.concurrent.locks.ReentrantLock$Sync
+java.util.concurrent.locks.ReentrantReadWriteLock
+java.util.concurrent.locks.ReentrantReadWriteLock$FairSync
+java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync
+java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock
+java.util.concurrent.locks.ReentrantReadWriteLock$Sync
+java.util.concurrent.locks.ReentrantReadWriteLock$Sync$HoldCounter
+java.util.concurrent.locks.ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter
+java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock
+java.util.function.-$Lambda$1MZdIZ-DL_fjy9l0o8IMJk57T2g
+java.util.function.-$Lambda$VGDeaUHZQIZywZW2ttlyhwk3Cmk
+java.util.function.-$Lambda$VGDeaUHZQIZywZW2ttlyhwk3Cmk$1
+java.util.function.BiConsumer
+java.util.function.BiFunction
+java.util.function.BinaryOperator
+java.util.function.Consumer
+java.util.function.DoubleBinaryOperator
+java.util.function.DoubleUnaryOperator
+java.util.function.Function
+java.util.function.IntBinaryOperator
+java.util.function.IntConsumer
+java.util.function.IntFunction
+java.util.function.IntToDoubleFunction
+java.util.function.IntToLongFunction
+java.util.function.IntUnaryOperator
+java.util.function.LongBinaryOperator
+java.util.function.LongConsumer
+java.util.function.LongUnaryOperator
+java.util.function.Predicate
+java.util.function.Supplier
+java.util.function.ToDoubleBiFunction
+java.util.function.ToDoubleFunction
+java.util.function.ToIntBiFunction
+java.util.function.ToIntFunction
+java.util.function.ToLongBiFunction
+java.util.function.ToLongFunction
+java.util.function.UnaryOperator
+java.util.jar.Attributes
+java.util.jar.Attributes$Name
+java.util.jar.JarEntry
+java.util.jar.JarFile
+java.util.jar.JarFile$JarEntryIterator
+java.util.jar.JarFile$JarFileEntry
+java.util.jar.JarVerifier
+java.util.jar.JarVerifier$1
+java.util.jar.JarVerifier$VerifierStream
+java.util.jar.Manifest
+java.util.jar.Manifest$FastInputStream
+java.util.logging.ErrorManager
+java.util.logging.FileHandler
+java.util.logging.FileHandler$InitializationErrorManager
+java.util.logging.FileHandler$MeteredStream
+java.util.logging.Filter
+java.util.logging.Formatter
+java.util.logging.Handler
+java.util.logging.Level
+java.util.logging.Level$KnownLevel
+java.util.logging.LogManager
+java.util.logging.LogManager$1
+java.util.logging.LogManager$2
+java.util.logging.LogManager$3
+java.util.logging.LogManager$5
+java.util.logging.LogManager$Cleaner
+java.util.logging.LogManager$LogNode
+java.util.logging.LogManager$LoggerContext
+java.util.logging.LogManager$LoggerContext$1
+java.util.logging.LogManager$LoggerWeakRef
+java.util.logging.LogManager$RootLogger
+java.util.logging.LogManager$SystemLoggerContext
+java.util.logging.LogRecord
+java.util.logging.Logger
+java.util.logging.Logger$1
+java.util.logging.Logger$LoggerBundle
+java.util.logging.LoggingPermission
+java.util.logging.LoggingProxyImpl
+java.util.logging.SimpleFormatter
+java.util.logging.StreamHandler
+java.util.logging.XMLFormatter
+java.util.prefs.AbstractPreferences
+java.util.prefs.BackingStoreException
+java.util.prefs.FileSystemPreferences
+java.util.prefs.FileSystemPreferences$1
+java.util.prefs.FileSystemPreferencesFactory
+java.util.prefs.Preferences
+java.util.prefs.PreferencesFactory
+java.util.regex.MatchResult
+java.util.regex.Matcher
+java.util.regex.Matcher$OffsetBasedMatchResult
+java.util.regex.Pattern
+java.util.regex.PatternSyntaxException
+java.util.stream.-$Lambda$DJvCeprCIGMk0JvfSkTmQUmEYKA$1
+java.util.stream.-$Lambda$QgGTJrv63_zzBbeGjswm_UMqEbo$12
+java.util.stream.-$Lambda$QgGTJrv63_zzBbeGjswm_UMqEbo$5
+java.util.stream.-$Lambda$QgGTJrv63_zzBbeGjswm_UMqEbo$6
+java.util.stream.-$Lambda$RYrQKhHyGc-mMxiERR98xxRAWkA$5
+java.util.stream.-$Lambda$ioGbka_-VkWTFjRjTt8T4zzsxgk$3
+java.util.stream.-$Lambda$ioGbka_-VkWTFjRjTt8T4zzsxgk$7
+java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$21
+java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$22
+java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$26
+java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$4
+java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$5
+java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$51
+java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$54
+java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$67
+java.util.stream.-$Lambda$qTstLJg88fs2C3g6LH-R51vCVP0$83
+java.util.stream.AbstractPipeline
+java.util.stream.AbstractSpinedBuffer
+java.util.stream.BaseStream
+java.util.stream.Collector
+java.util.stream.Collector$Characteristics
+java.util.stream.Collectors
+java.util.stream.Collectors$CollectorImpl
+java.util.stream.DistinctOps
+java.util.stream.DistinctOps$1
+java.util.stream.DistinctOps$1$2
+java.util.stream.DoubleStream
+java.util.stream.FindOps
+java.util.stream.FindOps$FindOp
+java.util.stream.FindOps$FindSink
+java.util.stream.FindOps$FindSink$OfRef
+java.util.stream.ForEachOps
+java.util.stream.ForEachOps$ForEachOp
+java.util.stream.ForEachOps$ForEachOp$OfRef
+java.util.stream.IntPipeline
+java.util.stream.IntPipeline$4
+java.util.stream.IntPipeline$4$1
+java.util.stream.IntPipeline$Head
+java.util.stream.IntPipeline$StatelessOp
+java.util.stream.IntStream
+java.util.stream.LongPipeline
+java.util.stream.LongPipeline$StatelessOp
+java.util.stream.LongStream
+java.util.stream.Node
+java.util.stream.Node$Builder
+java.util.stream.Node$Builder$OfInt
+java.util.stream.Node$OfDouble
+java.util.stream.Node$OfInt
+java.util.stream.Node$OfLong
+java.util.stream.Node$OfPrimitive
+java.util.stream.Nodes
+java.util.stream.Nodes$EmptyNode
+java.util.stream.Nodes$EmptyNode$OfDouble
+java.util.stream.Nodes$EmptyNode$OfInt
+java.util.stream.Nodes$EmptyNode$OfLong
+java.util.stream.Nodes$EmptyNode$OfRef
+java.util.stream.Nodes$IntSpinedNodeBuilder
+java.util.stream.PipelineHelper
+java.util.stream.ReduceOps
+java.util.stream.ReduceOps$3
+java.util.stream.ReduceOps$3ReducingSink
+java.util.stream.ReduceOps$8
+java.util.stream.ReduceOps$8ReducingSink
+java.util.stream.ReduceOps$AccumulatingSink
+java.util.stream.ReduceOps$Box
+java.util.stream.ReduceOps$ReduceOp
+java.util.stream.ReferencePipeline
+java.util.stream.ReferencePipeline$2
+java.util.stream.ReferencePipeline$2$1
+java.util.stream.ReferencePipeline$3
+java.util.stream.ReferencePipeline$3$1
+java.util.stream.ReferencePipeline$4
+java.util.stream.ReferencePipeline$4$1
+java.util.stream.ReferencePipeline$5
+java.util.stream.ReferencePipeline$5$1
+java.util.stream.ReferencePipeline$Head
+java.util.stream.ReferencePipeline$StatefulOp
+java.util.stream.ReferencePipeline$StatelessOp
+java.util.stream.Sink
+java.util.stream.Sink$ChainedInt
+java.util.stream.Sink$ChainedReference
+java.util.stream.Sink$OfInt
+java.util.stream.Sink$OfLong
+java.util.stream.SliceOps
+java.util.stream.SliceOps$1
+java.util.stream.SliceOps$1$1
+java.util.stream.SpinedBuffer$OfInt
+java.util.stream.SpinedBuffer$OfPrimitive
+java.util.stream.Stream
+java.util.stream.StreamOpFlag
+java.util.stream.StreamOpFlag$MaskBuilder
+java.util.stream.StreamOpFlag$Type
+java.util.stream.StreamShape
+java.util.stream.StreamSpliterators$InfiniteSupplyingSpliterator
+java.util.stream.StreamSpliterators$InfiniteSupplyingSpliterator$OfRef
+java.util.stream.StreamSupport
+java.util.stream.TerminalOp
+java.util.stream.TerminalSink
+java.util.zip.Adler32
+java.util.zip.CRC32
+java.util.zip.CheckedInputStream
+java.util.zip.Checksum
+java.util.zip.DataFormatException
+java.util.zip.Deflater
+java.util.zip.DeflaterOutputStream
+java.util.zip.GZIPInputStream
+java.util.zip.GZIPInputStream$1
+java.util.zip.GZIPOutputStream
+java.util.zip.Inflater
+java.util.zip.InflaterInputStream
+java.util.zip.ZStreamRef
+java.util.zip.ZipCoder
+java.util.zip.ZipConstants
+java.util.zip.ZipEntry
+java.util.zip.ZipException
+java.util.zip.ZipFile
+java.util.zip.ZipFile$ZipEntryIterator
+java.util.zip.ZipFile$ZipFileInflaterInputStream
+java.util.zip.ZipFile$ZipFileInputStream
+java.util.zip.ZipInputStream
+java.util.zip.ZipUtils
+javax.crypto.BadPaddingException
+javax.crypto.Cipher
+javax.crypto.Cipher$CipherSpiAndProvider
+javax.crypto.Cipher$InitParams
+javax.crypto.Cipher$InitType
+javax.crypto.Cipher$NeedToSet
+javax.crypto.Cipher$SpiAndProviderUpdater
+javax.crypto.Cipher$Transform
+javax.crypto.CipherSpi
+javax.crypto.IllegalBlockSizeException
+javax.crypto.JarVerifier
+javax.crypto.JceSecurity
+javax.crypto.JceSecurity$1
+javax.crypto.KeyGenerator
+javax.crypto.KeyGeneratorSpi
+javax.crypto.Mac
+javax.crypto.MacSpi
+javax.crypto.NoSuchPaddingException
+javax.crypto.NullCipher
+javax.crypto.SecretKey
+javax.crypto.ShortBufferException
+javax.crypto.spec.GCMParameterSpec
+javax.crypto.spec.IvParameterSpec
+javax.crypto.spec.OAEPParameterSpec
+javax.crypto.spec.PBEParameterSpec
+javax.crypto.spec.PSource
+javax.crypto.spec.PSource$PSpecified
+javax.crypto.spec.SecretKeySpec
+javax.microedition.khronos.egl.EGL
+javax.microedition.khronos.egl.EGL10
+javax.microedition.khronos.egl.EGLConfig
+javax.microedition.khronos.egl.EGLContext
+javax.microedition.khronos.egl.EGLDisplay
+javax.microedition.khronos.egl.EGLSurface
+javax.microedition.khronos.opengles.GL
+javax.microedition.khronos.opengles.GL10
+javax.microedition.khronos.opengles.GL10Ext
+javax.microedition.khronos.opengles.GL11
+javax.microedition.khronos.opengles.GL11Ext
+javax.microedition.khronos.opengles.GL11ExtensionPack
+javax.net.DefaultSocketFactory
+javax.net.ServerSocketFactory
+javax.net.SocketFactory
+javax.net.ssl.ExtendedSSLSession
+javax.net.ssl.HandshakeCompletedListener
+javax.net.ssl.HostnameVerifier
+javax.net.ssl.HttpsURLConnection
+javax.net.ssl.KeyManager
+javax.net.ssl.KeyManagerFactory
+javax.net.ssl.KeyManagerFactory$1
+javax.net.ssl.KeyManagerFactorySpi
+javax.net.ssl.SNIHostName
+javax.net.ssl.SNIServerName
+javax.net.ssl.SSLContext
+javax.net.ssl.SSLContextSpi
+javax.net.ssl.SSLEngine
+javax.net.ssl.SSLException
+javax.net.ssl.SSLParameters
+javax.net.ssl.SSLPeerUnverifiedException
+javax.net.ssl.SSLProtocolException
+javax.net.ssl.SSLServerSocketFactory
+javax.net.ssl.SSLSession
+javax.net.ssl.SSLSessionContext
+javax.net.ssl.SSLSocket
+javax.net.ssl.SSLSocketFactory
+javax.net.ssl.SSLSocketFactory$1
+javax.net.ssl.TrustManager
+javax.net.ssl.TrustManagerFactory
+javax.net.ssl.TrustManagerFactory$1
+javax.net.ssl.TrustManagerFactorySpi
+javax.net.ssl.X509ExtendedKeyManager
+javax.net.ssl.X509ExtendedTrustManager
+javax.net.ssl.X509KeyManager
+javax.net.ssl.X509TrustManager
+javax.security.auth.Destroyable
+javax.security.auth.callback.UnsupportedCallbackException
+javax.security.auth.x500.X500Principal
+javax.security.cert.Certificate
+javax.security.cert.CertificateEncodingException
+javax.security.cert.CertificateException
+javax.security.cert.X509Certificate
+javax.sip.SipException
+javax.xml.parsers.ParserConfigurationException
+javax.xml.parsers.SAXParser
+javax.xml.parsers.SAXParserFactory
+javax.xml.transform.TransformerConfigurationException
+javax.xml.transform.TransformerException
+junit.framework.Assert
+libcore.icu.CollationKeyICU
+libcore.icu.DateIntervalFormat
+libcore.icu.DateUtilsBridge
+libcore.icu.ICU
+libcore.icu.LocaleData
+libcore.icu.NativeConverter
+libcore.icu.RelativeDateTimeFormatter
+libcore.icu.RelativeDateTimeFormatter$FormatterCache
+libcore.icu.TimeZoneNames
+libcore.icu.TimeZoneNames$1
+libcore.icu.TimeZoneNames$ZoneStringsCache
+libcore.internal.StringPool
+libcore.io.AsynchronousCloseMonitor
+libcore.io.BlockGuardOs
+libcore.io.BufferIterator
+libcore.io.ClassPathURLStreamHandler
+libcore.io.ClassPathURLStreamHandler$ClassPathURLConnection
+libcore.io.ClassPathURLStreamHandler$ClassPathURLConnection$1
+libcore.io.DropBox
+libcore.io.DropBox$DefaultReporter
+libcore.io.DropBox$Reporter
+libcore.io.EventLogger
+libcore.io.EventLogger$DefaultReporter
+libcore.io.EventLogger$Reporter
+libcore.io.ForwardingOs
+libcore.io.IoBridge
+libcore.io.IoTracker
+libcore.io.IoTracker$Mode
+libcore.io.IoUtils
+libcore.io.IoUtils$FileReader
+libcore.io.Libcore
+libcore.io.Linux
+libcore.io.Memory
+libcore.io.MemoryMappedFile
+libcore.io.NioBufferIterator
+libcore.io.Os
+libcore.io.Streams
+libcore.math.MathUtils
+libcore.net.MimeUtils
+libcore.net.NetworkSecurityPolicy
+libcore.net.NetworkSecurityPolicy$DefaultNetworkSecurityPolicy
+libcore.net.UriCodec
+libcore.net.event.NetworkEventDispatcher
+libcore.net.event.NetworkEventListener
+libcore.reflect.AnnotatedElements
+libcore.reflect.AnnotationFactory
+libcore.reflect.AnnotationMember
+libcore.reflect.AnnotationMember$DefaultValues
+libcore.reflect.GenericArrayTypeImpl
+libcore.reflect.GenericSignatureParser
+libcore.reflect.ListOfTypes
+libcore.reflect.ListOfVariables
+libcore.reflect.ParameterizedTypeImpl
+libcore.reflect.TypeVariableImpl
+libcore.reflect.Types
+libcore.util.BasicLruCache
+libcore.util.CharsetUtils
+libcore.util.CollectionUtils
+libcore.util.EmptyArray
+libcore.util.HexEncoding
+libcore.util.NativeAllocationRegistry
+libcore.util.NativeAllocationRegistry$CleanerRunner
+libcore.util.NativeAllocationRegistry$CleanerThunk
+libcore.util.Objects
+libcore.util.TimeZoneDataFiles
+libcore.util.ZoneInfo
+libcore.util.ZoneInfo$CheckedArithmeticException
+libcore.util.ZoneInfo$OffsetInterval
+libcore.util.ZoneInfo$WallTime
+libcore.util.ZoneInfoDB
+libcore.util.ZoneInfoDB$TzData
+libcore.util.ZoneInfoDB$TzData$1
+org.apache.commons.logging.Log
+org.apache.commons.logging.LogFactory
+org.apache.commons.logging.impl.Jdk14Logger
+org.apache.commons.logging.impl.WeakHashtable
+org.apache.harmony.dalvik.NativeTestTarget
+org.apache.harmony.dalvik.ddmc.Chunk
+org.apache.harmony.dalvik.ddmc.ChunkHandler
+org.apache.harmony.dalvik.ddmc.DdmServer
+org.apache.harmony.dalvik.ddmc.DdmVmInternal
+org.apache.harmony.luni.internal.util.TimezoneGetter
+org.apache.harmony.xml.ExpatAttributes
+org.apache.harmony.xml.ExpatException
+org.apache.harmony.xml.ExpatParser
+org.apache.harmony.xml.ExpatParser$CurrentAttributes
+org.apache.harmony.xml.ExpatParser$ExpatLocator
+org.apache.harmony.xml.ExpatReader
+org.apache.harmony.xml.parsers.SAXParserFactoryImpl
+org.apache.harmony.xml.parsers.SAXParserImpl
+org.apache.http.ConnectionReuseStrategy
+org.apache.http.FormattedHeader
+org.apache.http.Header
+org.apache.http.HeaderElement
+org.apache.http.HeaderElementIterator
+org.apache.http.HeaderIterator
+org.apache.http.HttpClientConnection
+org.apache.http.HttpConnection
+org.apache.http.HttpConnectionMetrics
+org.apache.http.HttpEntity
+org.apache.http.HttpEntityEnclosingRequest
+org.apache.http.HttpException
+org.apache.http.HttpHost
+org.apache.http.HttpInetConnection
+org.apache.http.HttpMessage
+org.apache.http.HttpRequest
+org.apache.http.HttpRequestFactory
+org.apache.http.HttpRequestInterceptor
+org.apache.http.HttpResponse
+org.apache.http.HttpResponseFactory
+org.apache.http.HttpResponseInterceptor
+org.apache.http.HttpServerConnection
+org.apache.http.HttpVersion
+org.apache.http.NameValuePair
+org.apache.http.ParseException
+org.apache.http.ProtocolException
+org.apache.http.ProtocolVersion
+org.apache.http.ReasonPhraseCatalog
+org.apache.http.RequestLine
+org.apache.http.StatusLine
+org.apache.http.auth.AuthSchemeFactory
+org.apache.http.auth.AuthSchemeRegistry
+org.apache.http.auth.AuthState
+org.apache.http.auth.AuthenticationException
+org.apache.http.client.AuthenticationHandler
+org.apache.http.client.ClientProtocolException
+org.apache.http.client.CookieStore
+org.apache.http.client.CredentialsProvider
+org.apache.http.client.HttpClient
+org.apache.http.client.HttpRequestRetryHandler
+org.apache.http.client.HttpResponseException
+org.apache.http.client.RedirectHandler
+org.apache.http.client.RequestDirector
+org.apache.http.client.ResponseHandler
+org.apache.http.client.UserTokenHandler
+org.apache.http.client.entity.UrlEncodedFormEntity
+org.apache.http.client.methods.AbortableHttpRequest
+org.apache.http.client.methods.HttpEntityEnclosingRequestBase
+org.apache.http.client.methods.HttpGet
+org.apache.http.client.methods.HttpPost
+org.apache.http.client.methods.HttpPut
+org.apache.http.client.methods.HttpRequestBase
+org.apache.http.client.methods.HttpUriRequest
+org.apache.http.client.params.HttpClientParams
+org.apache.http.client.protocol.RequestAddCookies
+org.apache.http.client.protocol.RequestDefaultHeaders
+org.apache.http.client.protocol.RequestProxyAuthentication
+org.apache.http.client.protocol.RequestTargetAuthentication
+org.apache.http.client.protocol.ResponseProcessCookies
+org.apache.http.client.utils.URIUtils
+org.apache.http.client.utils.URLEncodedUtils
+org.apache.http.conn.BasicManagedEntity
+org.apache.http.conn.ClientConnectionManager
+org.apache.http.conn.ClientConnectionOperator
+org.apache.http.conn.ClientConnectionRequest
+org.apache.http.conn.ConnectTimeoutException
+org.apache.http.conn.ConnectionKeepAliveStrategy
+org.apache.http.conn.ConnectionReleaseTrigger
+org.apache.http.conn.EofSensorInputStream
+org.apache.http.conn.EofSensorWatcher
+org.apache.http.conn.ManagedClientConnection
+org.apache.http.conn.OperatedClientConnection
+org.apache.http.conn.params.ConnManagerPNames
+org.apache.http.conn.params.ConnManagerParamBean
+org.apache.http.conn.params.ConnManagerParams
+org.apache.http.conn.params.ConnManagerParams$1
+org.apache.http.conn.params.ConnPerRoute
+org.apache.http.conn.params.ConnPerRouteBean
+org.apache.http.conn.params.ConnRoutePNames
+org.apache.http.conn.params.ConnRouteParams
+org.apache.http.conn.routing.BasicRouteDirector
+org.apache.http.conn.routing.HttpRoute
+org.apache.http.conn.routing.HttpRouteDirector
+org.apache.http.conn.routing.HttpRoutePlanner
+org.apache.http.conn.routing.RouteInfo
+org.apache.http.conn.routing.RouteInfo$LayerType
+org.apache.http.conn.routing.RouteInfo$TunnelType
+org.apache.http.conn.routing.RouteTracker
+org.apache.http.conn.scheme.LayeredSocketFactory
+org.apache.http.conn.scheme.PlainSocketFactory
+org.apache.http.conn.scheme.Scheme
+org.apache.http.conn.scheme.SchemeRegistry
+org.apache.http.conn.scheme.SocketFactory
+org.apache.http.conn.ssl.AbstractVerifier
+org.apache.http.conn.ssl.AllowAllHostnameVerifier
+org.apache.http.conn.ssl.AndroidDistinguishedNameParser
+org.apache.http.conn.ssl.BrowserCompatHostnameVerifier
+org.apache.http.conn.ssl.SSLSocketFactory
+org.apache.http.conn.ssl.StrictHostnameVerifier
+org.apache.http.conn.ssl.X509HostnameVerifier
+org.apache.http.cookie.ClientCookie
+org.apache.http.cookie.Cookie
+org.apache.http.cookie.CookieAttributeHandler
+org.apache.http.cookie.CookieIdentityComparator
+org.apache.http.cookie.CookieOrigin
+org.apache.http.cookie.CookiePathComparator
+org.apache.http.cookie.CookieSpec
+org.apache.http.cookie.CookieSpecFactory
+org.apache.http.cookie.CookieSpecRegistry
+org.apache.http.cookie.MalformedCookieException
+org.apache.http.cookie.SetCookie
+org.apache.http.entity.AbstractHttpEntity
+org.apache.http.entity.BasicHttpEntity
+org.apache.http.entity.ByteArrayEntity
+org.apache.http.entity.ContentLengthStrategy
+org.apache.http.entity.HttpEntityWrapper
+org.apache.http.entity.InputStreamEntity
+org.apache.http.entity.StringEntity
+org.apache.http.impl.AbstractHttpClientConnection
+org.apache.http.impl.AbstractHttpServerConnection
+org.apache.http.impl.DefaultConnectionReuseStrategy
+org.apache.http.impl.DefaultHttpRequestFactory
+org.apache.http.impl.DefaultHttpResponseFactory
+org.apache.http.impl.DefaultHttpServerConnection
+org.apache.http.impl.EnglishReasonPhraseCatalog
+org.apache.http.impl.HttpConnectionMetricsImpl
+org.apache.http.impl.SocketHttpClientConnection
+org.apache.http.impl.SocketHttpServerConnection
+org.apache.http.impl.auth.BasicSchemeFactory
+org.apache.http.impl.auth.DigestSchemeFactory
+org.apache.http.impl.client.AbstractAuthenticationHandler
+org.apache.http.impl.client.AbstractHttpClient
+org.apache.http.impl.client.BasicCookieStore
+org.apache.http.impl.client.BasicCredentialsProvider
+org.apache.http.impl.client.ClientParamsStack
+org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy
+org.apache.http.impl.client.DefaultHttpClient
+org.apache.http.impl.client.DefaultHttpRequestRetryHandler
+org.apache.http.impl.client.DefaultProxyAuthenticationHandler
+org.apache.http.impl.client.DefaultRedirectHandler
+org.apache.http.impl.client.DefaultRequestDirector
+org.apache.http.impl.client.DefaultTargetAuthenticationHandler
+org.apache.http.impl.client.DefaultUserTokenHandler
+org.apache.http.impl.client.EntityEnclosingRequestWrapper
+org.apache.http.impl.client.RequestWrapper
+org.apache.http.impl.client.RoutedRequest
+org.apache.http.impl.client.TunnelRefusedException
+org.apache.http.impl.conn.AbstractClientConnAdapter
+org.apache.http.impl.conn.AbstractPoolEntry
+org.apache.http.impl.conn.AbstractPooledConnAdapter
+org.apache.http.impl.conn.DefaultClientConnection
+org.apache.http.impl.conn.DefaultClientConnectionOperator
+org.apache.http.impl.conn.DefaultResponseParser
+org.apache.http.impl.conn.IdleConnectionHandler
+org.apache.http.impl.conn.IdleConnectionHandler$TimeValues
+org.apache.http.impl.conn.ProxySelectorRoutePlanner
+org.apache.http.impl.conn.tsccm.AbstractConnPool
+org.apache.http.impl.conn.tsccm.BasicPoolEntry
+org.apache.http.impl.conn.tsccm.BasicPoolEntryRef
+org.apache.http.impl.conn.tsccm.BasicPooledConnAdapter
+org.apache.http.impl.conn.tsccm.ConnPoolByRoute
+org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1
+org.apache.http.impl.conn.tsccm.PoolEntryRequest
+org.apache.http.impl.conn.tsccm.RefQueueHandler
+org.apache.http.impl.conn.tsccm.RefQueueWorker
+org.apache.http.impl.conn.tsccm.RouteSpecificPool
+org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager
+org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1
+org.apache.http.impl.conn.tsccm.WaitingThreadAborter
+org.apache.http.impl.cookie.AbstractCookieAttributeHandler
+org.apache.http.impl.cookie.AbstractCookieSpec
+org.apache.http.impl.cookie.BasicClientCookie
+org.apache.http.impl.cookie.BasicCommentHandler
+org.apache.http.impl.cookie.BasicDomainHandler
+org.apache.http.impl.cookie.BasicExpiresHandler
+org.apache.http.impl.cookie.BasicMaxAgeHandler
+org.apache.http.impl.cookie.BasicPathHandler
+org.apache.http.impl.cookie.BasicSecureHandler
+org.apache.http.impl.cookie.BestMatchSpec
+org.apache.http.impl.cookie.BestMatchSpecFactory
+org.apache.http.impl.cookie.BrowserCompatSpec
+org.apache.http.impl.cookie.BrowserCompatSpecFactory
+org.apache.http.impl.cookie.CookieSpecBase
+org.apache.http.impl.cookie.DateParseException
+org.apache.http.impl.cookie.DateUtils
+org.apache.http.impl.cookie.DateUtils$DateFormatHolder
+org.apache.http.impl.cookie.DateUtils$DateFormatHolder$1
+org.apache.http.impl.cookie.NetscapeDomainHandler
+org.apache.http.impl.cookie.NetscapeDraftHeaderParser
+org.apache.http.impl.cookie.NetscapeDraftSpec
+org.apache.http.impl.cookie.NetscapeDraftSpecFactory
+org.apache.http.impl.cookie.RFC2109DomainHandler
+org.apache.http.impl.cookie.RFC2109Spec
+org.apache.http.impl.cookie.RFC2109SpecFactory
+org.apache.http.impl.cookie.RFC2109VersionHandler
+org.apache.http.impl.cookie.RFC2965CommentUrlAttributeHandler
+org.apache.http.impl.cookie.RFC2965DiscardAttributeHandler
+org.apache.http.impl.cookie.RFC2965DomainAttributeHandler
+org.apache.http.impl.cookie.RFC2965PortAttributeHandler
+org.apache.http.impl.cookie.RFC2965Spec
+org.apache.http.impl.cookie.RFC2965SpecFactory
+org.apache.http.impl.cookie.RFC2965VersionAttributeHandler
+org.apache.http.impl.entity.EntityDeserializer
+org.apache.http.impl.entity.EntitySerializer
+org.apache.http.impl.entity.LaxContentLengthStrategy
+org.apache.http.impl.entity.StrictContentLengthStrategy
+org.apache.http.impl.io.AbstractMessageParser
+org.apache.http.impl.io.AbstractMessageWriter
+org.apache.http.impl.io.AbstractSessionInputBuffer
+org.apache.http.impl.io.AbstractSessionOutputBuffer
+org.apache.http.impl.io.ChunkedInputStream
+org.apache.http.impl.io.ContentLengthInputStream
+org.apache.http.impl.io.ContentLengthOutputStream
+org.apache.http.impl.io.HttpRequestParser
+org.apache.http.impl.io.HttpRequestWriter
+org.apache.http.impl.io.HttpResponseWriter
+org.apache.http.impl.io.HttpTransportMetricsImpl
+org.apache.http.impl.io.IdentityOutputStream
+org.apache.http.impl.io.SocketInputBuffer
+org.apache.http.impl.io.SocketOutputBuffer
+org.apache.http.io.HttpMessageParser
+org.apache.http.io.HttpMessageWriter
+org.apache.http.io.HttpTransportMetrics
+org.apache.http.io.SessionInputBuffer
+org.apache.http.io.SessionOutputBuffer
+org.apache.http.message.AbstractHttpMessage
+org.apache.http.message.BasicHeader
+org.apache.http.message.BasicHeaderElement
+org.apache.http.message.BasicHeaderElementIterator
+org.apache.http.message.BasicHeaderValueParser
+org.apache.http.message.BasicHttpRequest
+org.apache.http.message.BasicHttpResponse
+org.apache.http.message.BasicLineFormatter
+org.apache.http.message.BasicLineParser
+org.apache.http.message.BasicListHeaderIterator
+org.apache.http.message.BasicNameValuePair
+org.apache.http.message.BasicRequestLine
+org.apache.http.message.BasicStatusLine
+org.apache.http.message.BufferedHeader
+org.apache.http.message.HeaderGroup
+org.apache.http.message.HeaderValueParser
+org.apache.http.message.LineFormatter
+org.apache.http.message.LineParser
+org.apache.http.message.ParserCursor
+org.apache.http.params.AbstractHttpParams
+org.apache.http.params.BasicHttpParams
+org.apache.http.params.CoreConnectionPNames
+org.apache.http.params.CoreProtocolPNames
+org.apache.http.params.DefaultedHttpParams
+org.apache.http.params.HttpAbstractParamBean
+org.apache.http.params.HttpConnectionParams
+org.apache.http.params.HttpParams
+org.apache.http.params.HttpProtocolParams
+org.apache.http.protocol.BasicHttpContext
+org.apache.http.protocol.BasicHttpProcessor
+org.apache.http.protocol.DefaultedHttpContext
+org.apache.http.protocol.HTTP
+org.apache.http.protocol.HttpContext
+org.apache.http.protocol.HttpProcessor
+org.apache.http.protocol.HttpRequestExecutor
+org.apache.http.protocol.HttpRequestHandler
+org.apache.http.protocol.HttpRequestHandlerRegistry
+org.apache.http.protocol.HttpRequestHandlerResolver
+org.apache.http.protocol.HttpRequestInterceptorList
+org.apache.http.protocol.HttpResponseInterceptorList
+org.apache.http.protocol.HttpService
+org.apache.http.protocol.RequestConnControl
+org.apache.http.protocol.RequestContent
+org.apache.http.protocol.RequestExpectContinue
+org.apache.http.protocol.RequestTargetHost
+org.apache.http.protocol.RequestUserAgent
+org.apache.http.protocol.ResponseConnControl
+org.apache.http.protocol.ResponseContent
+org.apache.http.protocol.UriPatternMatcher
+org.apache.http.util.ByteArrayBuffer
+org.apache.http.util.CharArrayBuffer
+org.apache.http.util.EntityUtils
+org.apache.http.util.LangUtils
+org.ccil.cowan.tagsoup.AttributesImpl
+org.ccil.cowan.tagsoup.AutoDetector
+org.ccil.cowan.tagsoup.Element
+org.ccil.cowan.tagsoup.ElementType
+org.ccil.cowan.tagsoup.HTMLModels
+org.ccil.cowan.tagsoup.HTMLScanner
+org.ccil.cowan.tagsoup.HTMLSchema
+org.ccil.cowan.tagsoup.Parser
+org.ccil.cowan.tagsoup.Parser$1
+org.ccil.cowan.tagsoup.ScanHandler
+org.ccil.cowan.tagsoup.Scanner
+org.ccil.cowan.tagsoup.Schema
+org.json.JSON
+org.json.JSONArray
+org.json.JSONException
+org.json.JSONObject
+org.json.JSONObject$1
+org.json.JSONStringer
+org.json.JSONStringer$Scope
+org.json.JSONTokener
+org.kxml2.io.KXmlParser
+org.kxml2.io.KXmlParser$ValueContext
+org.kxml2.io.KXmlSerializer
+org.xml.sax.Attributes
+org.xml.sax.ContentHandler
+org.xml.sax.DTDHandler
+org.xml.sax.EntityResolver
+org.xml.sax.ErrorHandler
+org.xml.sax.InputSource
+org.xml.sax.Locator
+org.xml.sax.SAXException
+org.xml.sax.SAXNotRecognizedException
+org.xml.sax.SAXNotSupportedException
+org.xml.sax.SAXParseException
+org.xml.sax.XMLReader
+org.xml.sax.ext.DeclHandler
+org.xml.sax.ext.DefaultHandler2
+org.xml.sax.ext.EntityResolver2
+org.xml.sax.ext.LexicalHandler
+org.xml.sax.helpers.AttributesImpl
+org.xml.sax.helpers.DefaultHandler
+org.xmlpull.v1.XmlPullParser
+org.xmlpull.v1.XmlPullParserException
+org.xmlpull.v1.XmlPullParserFactory
+org.xmlpull.v1.XmlSerializer
+sun.invoke.util.BytecodeDescriptor
+sun.invoke.util.VerifyAccess
+sun.invoke.util.Wrapper
+sun.invoke.util.Wrapper$Format
+sun.misc.ASCIICaseInsensitiveComparator
+sun.misc.Cleaner
+sun.misc.CompoundEnumeration
+sun.misc.FDBigInteger
+sun.misc.FloatingDecimal
+sun.misc.FloatingDecimal$1
+sun.misc.FloatingDecimal$ASCIIToBinaryBuffer
+sun.misc.FloatingDecimal$ASCIIToBinaryConverter
+sun.misc.FloatingDecimal$BinaryToASCIIBuffer
+sun.misc.FloatingDecimal$BinaryToASCIIConverter
+sun.misc.FloatingDecimal$ExceptionalBinaryToASCIIBuffer
+sun.misc.FloatingDecimal$PreparedASCIIToBinaryBuffer
+sun.misc.FormattedFloatingDecimal
+sun.misc.FormattedFloatingDecimal$1
+sun.misc.FormattedFloatingDecimal$Form
+sun.misc.IOUtils
+sun.misc.JavaIOFileDescriptorAccess
+sun.misc.LRUCache
+sun.misc.REException
+sun.misc.SharedSecrets
+sun.misc.Unsafe
+sun.misc.VM
+sun.misc.Version
+sun.net.ConnectionResetException
+sun.net.NetHooks
+sun.net.NetProperties
+sun.net.NetProperties$1
+sun.net.ResourceManager
+sun.net.spi.DefaultProxySelector
+sun.net.spi.DefaultProxySelector$1
+sun.net.spi.DefaultProxySelector$NonProxyInfo
+sun.net.spi.nameservice.NameService
+sun.net.util.IPAddressUtil
+sun.net.www.ParseUtil
+sun.net.www.protocol.file.Handler
+sun.net.www.protocol.jar.Handler
+sun.nio.ch.AbstractPollArrayWrapper
+sun.nio.ch.AbstractPollSelectorImpl
+sun.nio.ch.AllocatedNativeObject
+sun.nio.ch.ChannelInputStream
+sun.nio.ch.DatagramChannelImpl
+sun.nio.ch.DatagramDispatcher
+sun.nio.ch.DefaultSelectorProvider
+sun.nio.ch.DirectBuffer
+sun.nio.ch.FileChannelImpl
+sun.nio.ch.FileChannelImpl$Unmapper
+sun.nio.ch.FileDescriptorHolderSocketImpl
+sun.nio.ch.FileDispatcher
+sun.nio.ch.FileDispatcherImpl
+sun.nio.ch.FileKey
+sun.nio.ch.FileLockImpl
+sun.nio.ch.FileLockTable
+sun.nio.ch.IOStatus
+sun.nio.ch.IOUtil
+sun.nio.ch.Interruptible
+sun.nio.ch.NativeDispatcher
+sun.nio.ch.NativeObject
+sun.nio.ch.NativeThread
+sun.nio.ch.NativeThreadSet
+sun.nio.ch.Net
+sun.nio.ch.Net$1
+sun.nio.ch.Net$4
+sun.nio.ch.PollArrayWrapper
+sun.nio.ch.PollSelectorImpl
+sun.nio.ch.PollSelectorProvider
+sun.nio.ch.SelChImpl
+sun.nio.ch.SelectionKeyImpl
+sun.nio.ch.SelectorImpl
+sun.nio.ch.SelectorProviderImpl
+sun.nio.ch.ServerSocketChannelImpl
+sun.nio.ch.SharedFileLockTable
+sun.nio.ch.SharedFileLockTable$FileLockReference
+sun.nio.ch.SocketAdaptor
+sun.nio.ch.SocketAdaptor$1
+sun.nio.ch.SocketAdaptor$2
+sun.nio.ch.SocketAdaptor$SocketInputStream
+sun.nio.ch.SocketChannelImpl
+sun.nio.ch.SocketDispatcher
+sun.nio.ch.Util
+sun.nio.ch.Util$1
+sun.nio.ch.Util$2
+sun.nio.ch.Util$BufferCache
+sun.nio.cs.ArrayDecoder
+sun.nio.cs.ArrayEncoder
+sun.nio.cs.StreamDecoder
+sun.nio.cs.StreamEncoder
+sun.nio.cs.ThreadLocalCoders
+sun.nio.cs.ThreadLocalCoders$1
+sun.nio.cs.ThreadLocalCoders$2
+sun.nio.cs.ThreadLocalCoders$Cache
+sun.nio.fs.AbstractBasicFileAttributeView
+sun.nio.fs.AbstractFileSystemProvider
+sun.nio.fs.AbstractPath
+sun.nio.fs.DefaultFileSystemProvider
+sun.nio.fs.DynamicFileAttributeView
+sun.nio.fs.LinuxFileSystem
+sun.nio.fs.LinuxFileSystemProvider
+sun.nio.fs.NativeBuffer
+sun.nio.fs.NativeBuffer$Deallocator
+sun.nio.fs.NativeBuffers
+sun.nio.fs.UnixChannelFactory
+sun.nio.fs.UnixChannelFactory$Flags
+sun.nio.fs.UnixConstants
+sun.nio.fs.UnixException
+sun.nio.fs.UnixFileAttributeViews
+sun.nio.fs.UnixFileAttributeViews$Basic
+sun.nio.fs.UnixFileAttributes
+sun.nio.fs.UnixFileAttributes$UnixAsBasicFileAttributes
+sun.nio.fs.UnixFileModeAttribute
+sun.nio.fs.UnixFileStoreAttributes
+sun.nio.fs.UnixFileSystem
+sun.nio.fs.UnixFileSystemProvider
+sun.nio.fs.UnixMountEntry
+sun.nio.fs.UnixNativeDispatcher
+sun.nio.fs.UnixPath
+sun.nio.fs.Util
+sun.reflect.misc.ReflectUtil
+sun.security.action.GetBooleanAction
+sun.security.action.GetIntegerAction
+sun.security.action.GetPropertyAction
+sun.security.jca.GetInstance
+sun.security.jca.GetInstance$Instance
+sun.security.jca.JCAUtil
+sun.security.jca.JCAUtil$CachedSecureRandomHolder
+sun.security.jca.ProviderConfig
+sun.security.jca.ProviderConfig$2
+sun.security.jca.ProviderList
+sun.security.jca.ProviderList$1
+sun.security.jca.ProviderList$2
+sun.security.jca.ProviderList$3
+sun.security.jca.ProviderList$ServiceList
+sun.security.jca.ProviderList$ServiceList$1
+sun.security.jca.Providers
+sun.security.jca.ServiceId
+sun.security.pkcs.ContentInfo
+sun.security.pkcs.PKCS7
+sun.security.pkcs.PKCS7$VerbatimX509Certificate
+sun.security.pkcs.PKCS7$WrappedX509Certificate
+sun.security.pkcs.PKCS9Attribute
+sun.security.pkcs.SignerInfo
+sun.security.provider.CertPathProvider
+sun.security.provider.X509Factory
+sun.security.provider.certpath.AdaptableX509CertSelector
+sun.security.provider.certpath.AlgorithmChecker
+sun.security.provider.certpath.BasicChecker
+sun.security.provider.certpath.CertId
+sun.security.provider.certpath.CertPathHelper
+sun.security.provider.certpath.ConstraintsChecker
+sun.security.provider.certpath.KeyChecker
+sun.security.provider.certpath.OCSP$RevocationStatus
+sun.security.provider.certpath.OCSP$RevocationStatus$CertStatus
+sun.security.provider.certpath.OCSPResponse
+sun.security.provider.certpath.OCSPResponse$ResponseStatus
+sun.security.provider.certpath.OCSPResponse$SingleResponse
+sun.security.provider.certpath.PKIX
+sun.security.provider.certpath.PKIX$ValidatorParams
+sun.security.provider.certpath.PKIXCertPathValidator
+sun.security.provider.certpath.PKIXMasterCertPathValidator
+sun.security.provider.certpath.PolicyChecker
+sun.security.provider.certpath.PolicyNodeImpl
+sun.security.provider.certpath.RevocationChecker
+sun.security.provider.certpath.RevocationChecker$1
+sun.security.provider.certpath.RevocationChecker$Mode
+sun.security.provider.certpath.RevocationChecker$RevocationProperties
+sun.security.util.AbstractAlgorithmConstraints
+sun.security.util.AbstractAlgorithmConstraints$1
+sun.security.util.AlgorithmDecomposer
+sun.security.util.BitArray
+sun.security.util.ByteArrayLexOrder
+sun.security.util.ByteArrayTagOrder
+sun.security.util.Cache
+sun.security.util.Cache$EqualByteArray
+sun.security.util.CertConstraintParameters
+sun.security.util.Debug
+sun.security.util.DerEncoder
+sun.security.util.DerIndefLenConverter
+sun.security.util.DerInputBuffer
+sun.security.util.DerInputStream
+sun.security.util.DerOutputStream
+sun.security.util.DerValue
+sun.security.util.DisabledAlgorithmConstraints
+sun.security.util.DisabledAlgorithmConstraints$Constraint
+sun.security.util.DisabledAlgorithmConstraints$Constraint$Operator
+sun.security.util.DisabledAlgorithmConstraints$Constraints
+sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraint
+sun.security.util.KeyUtil
+sun.security.util.Length
+sun.security.util.ManifestDigester
+sun.security.util.ManifestDigester$Entry
+sun.security.util.ManifestDigester$Position
+sun.security.util.ManifestEntryVerifier
+sun.security.util.ManifestEntryVerifier$SunProviderHolder
+sun.security.util.MemoryCache
+sun.security.util.MemoryCache$CacheEntry
+sun.security.util.MemoryCache$SoftCacheEntry
+sun.security.util.ObjectIdentifier
+sun.security.util.SignatureFileVerifier
+sun.security.x509.AVA
+sun.security.x509.AVAKeyword
+sun.security.x509.AccessDescription
+sun.security.x509.AlgorithmId
+sun.security.x509.AuthorityInfoAccessExtension
+sun.security.x509.AuthorityKeyIdentifierExtension
+sun.security.x509.BasicConstraintsExtension
+sun.security.x509.CRLDistributionPointsExtension
+sun.security.x509.CRLNumberExtension
+sun.security.x509.CRLReasonCodeExtension
+sun.security.x509.CertAttrSet
+sun.security.x509.CertificateAlgorithmId
+sun.security.x509.CertificateExtensions
+sun.security.x509.CertificateIssuerExtension
+sun.security.x509.CertificatePoliciesExtension
+sun.security.x509.CertificatePolicyId
+sun.security.x509.CertificateSerialNumber
+sun.security.x509.CertificateValidity
+sun.security.x509.CertificateVersion
+sun.security.x509.CertificateX509Key
+sun.security.x509.DNSName
+sun.security.x509.DeltaCRLIndicatorExtension
+sun.security.x509.DistributionPoint
+sun.security.x509.ExtendedKeyUsageExtension
+sun.security.x509.Extension
+sun.security.x509.FreshestCRLExtension
+sun.security.x509.GeneralName
+sun.security.x509.GeneralNameInterface
+sun.security.x509.GeneralNames
+sun.security.x509.InhibitAnyPolicyExtension
+sun.security.x509.IssuerAlternativeNameExtension
+sun.security.x509.IssuingDistributionPointExtension
+sun.security.x509.KeyIdentifier
+sun.security.x509.KeyUsageExtension
+sun.security.x509.NameConstraintsExtension
+sun.security.x509.NetscapeCertTypeExtension
+sun.security.x509.OCSPNoCheckExtension
+sun.security.x509.OIDMap
+sun.security.x509.OIDMap$OIDInfo
+sun.security.x509.PKIXExtensions
+sun.security.x509.PolicyConstraintsExtension
+sun.security.x509.PolicyInformation
+sun.security.x509.PolicyMappingsExtension
+sun.security.x509.PrivateKeyUsageExtension
+sun.security.x509.RDN
+sun.security.x509.SerialNumber
+sun.security.x509.SubjectAlternativeNameExtension
+sun.security.x509.SubjectInfoAccessExtension
+sun.security.x509.SubjectKeyIdentifierExtension
+sun.security.x509.URIName
+sun.security.x509.X500Name
+sun.security.x509.X500Name$1
+sun.security.x509.X509AttributeName
+sun.security.x509.X509CertImpl
+sun.security.x509.X509CertInfo
+sun.security.x509.X509Key
+sun.util.calendar.AbstractCalendar
+sun.util.calendar.BaseCalendar
+sun.util.calendar.BaseCalendar$Date
+sun.util.calendar.CalendarDate
+sun.util.calendar.CalendarSystem
+sun.util.calendar.CalendarUtils
+sun.util.calendar.Era
+sun.util.calendar.Gregorian
+sun.util.calendar.Gregorian$Date
+sun.util.calendar.ImmutableGregorianDate
+sun.util.calendar.JulianCalendar
+sun.util.calendar.LocalGregorianCalendar
+sun.util.locale.BaseLocale
+sun.util.locale.BaseLocale$Cache
+sun.util.locale.BaseLocale$Key
+sun.util.locale.Extension
+sun.util.locale.InternalLocaleBuilder
+sun.util.locale.InternalLocaleBuilder$CaseInsensitiveChar
+sun.util.locale.LanguageTag
+sun.util.locale.LocaleExtensions
+sun.util.locale.LocaleObjectCache
+sun.util.locale.LocaleObjectCache$CacheEntry
+sun.util.locale.LocaleSyntaxException
+sun.util.locale.LocaleUtils
+sun.util.locale.ParseStatus
+sun.util.locale.StringTokenIterator
+sun.util.locale.UnicodeLocaleExtension
+sun.util.logging.LoggingProxy
+sun.util.logging.LoggingSupport
+sun.util.logging.LoggingSupport$1
+sun.util.logging.LoggingSupport$2
+sun.util.logging.PlatformLogger
+sun.util.logging.PlatformLogger$1
+sun.util.logging.PlatformLogger$JavaLoggerProxy
+sun.util.logging.PlatformLogger$Level
+sun.util.logging.PlatformLogger$LoggerProxy
diff --git a/config/copyright-header b/config/copyright-header
new file mode 100644
index 0000000..93071cd
--- /dev/null
+++ b/config/copyright-header
@@ -0,0 +1,15 @@
+#
+# 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.
+#
diff --git a/config/dirty-image-objects b/config/dirty-image-objects
new file mode 100644
index 0000000..9b4d199
--- /dev/null
+++ b/config/dirty-image-objects
@@ -0,0 +1,176 @@
+#
+# 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.
+#
+#
+#
+# Dirty-image-objects file for boot image.
+#
+# Objects in this file are known dirty at runtime. Current this includes:
+#   - classes with known dirty static fields.
+#
+# The image writer will bin these objects together in the image.
+#
+# This file can be generated using imgdiag with a command such as:
+#   adb shell imgdiag --image-diff-pid=<app pid> --zygote-diff-pid=<zygote pid> \
+#     --boot-image=/system/framework/boot.art --dump-dirty-objects
+# Then, grep for lines containing "Private dirty object" from the output.
+# This particular file was generated by dumping systemserver and systemui.
+#
+java.lang.System
+java.net.Inet4Address
+java.lang.Thread
+java.lang.Throwable
+java.util.Collections
+javax.net.ssl.SSLContext
+java.nio.charset.Charset
+java.security.Provider
+javax.net.ssl.HttpsURLConnection
+javax.net.ssl.SSLSocketFactory
+java.util.TimeZone
+java.util.Locale
+java.util.function.ToIntFunction
+sun.misc.FormattedFloatingDecimal
+java.util.stream.IntStream
+android.icu.util.TimeZone
+libcore.io.DropBox
+org.apache.harmony.luni.internal.util.TimezoneGetter
+dalvik.system.SocketTagger
+dalvik.system.CloseGuard
+java.lang.ref.FinalizerReference
+com.android.org.conscrypt.ct.CTLogStoreImpl
+com.android.org.conscrypt.SSLParametersImpl
+com.android.org.conscrypt.OpenSSLContextImpl
+com.android.org.conscrypt.SSLParametersImpl$AliasChooser
+com.android.org.conscrypt.SSLParametersImpl$PSKCallbacks
+com.android.org.conscrypt.NativeCrypto$SSLHandshakeCallbacks
+com.android.okhttp.OkHttpClient
+com.android.okhttp.okio.SegmentPool
+com.android.okhttp.okio.AsyncTimeout
+com.android.okhttp.HttpUrl
+android.os.StrictMode
+com.android.internal.os.BinderInternal
+android.os.storage.StorageManager
+android.os.Trace
+android.app.ActivityManager
+android.media.MediaRouter
+android.os.Environment
+android.view.ThreadedRenderer
+android.media.AudioManager
+android.app.AlarmManager
+android.telephony.TelephonyManager
+android.bluetooth.BluetoothAdapter
+com.android.internal.os.SomeArgs
+android.os.LocaleList
+android.view.WindowManagerGlobal
+android.media.AudioSystem
+android.ddm.DdmHandleAppName
+android.provider.Settings
+android.view.ViewRootImpl
+android.net.ConnectivityManager
+android.app.ActivityThread
+android.os.BaseBundle
+android.util.ArraySet
+android.view.View
+android.os.ServiceManager
+android.view.ViewTreeObserver
+android.hardware.input.InputManager
+android.os.UEventObserver
+android.app.NotificationManager
+android.hardware.display.DisplayManagerGlobal
+android.os.Binder
+android.app.AppOpsManager
+android.content.ContentResolver
+android.app.backup.BackupManager
+android.util.ArrayMap
+android.os.Looper
+android.graphics.Bitmap
+android.view.textservice.TextServicesManager
+com.android.internal.inputmethod.InputMethodUtils
+android.app.QueuedWork
+android.graphics.TemporaryBuffer
+android.widget.ImageView
+android.database.sqlite.SQLiteGlobal
+android.view.autofill.Helper
+android.text.method.SingleLineTransformationMethod
+com.android.internal.os.RuntimeInit
+android.view.inputmethod.InputMethodManager
+android.hardware.SystemSensorManager
+android.database.CursorWindow
+android.text.TextUtils
+android.media.PlayerBase
+android.app.ResourcesManager
+android.os.Message
+android.view.accessibility.AccessibilityManager
+android.app.Notification
+android.provider.ContactsContract$ContactNameColumns
+android.provider.CalendarContract$EventsColumns
+android.provider.CalendarContract$CalendarColumns
+android.provider.CalendarContract$SyncColumns
+android.provider.ContactsContract$ContactsColumns
+android.content.pm.PackageManager$OnPermissionsChangedListener
+android.net.IpConfiguration$ProxySettings
+android.provider.ContactsContract$ContactOptionsColumns
+android.net.wifi.SupplicantState
+android.provider.ContactsContract$ContactStatusColumns
+android.view.accessibility.AccessibilityManager$TouchExplorationStateChangeListener
+android.provider.CalendarContract$CalendarSyncColumns
+android.bluetooth.BluetoothProfile$ServiceListener
+android.provider.ContactsContract$ContactCounts
+android.net.IpConfiguration$IpAssignment
+android.text.TextWatcher
+android.graphics.Bitmap$CompressFormat
+android.location.LocationListener
+sun.security.jca.Providers
+java.lang.CharSequence
+android.icu.util.ULocale
+dalvik.system.BaseDexClassLoader
+android.icu.text.BreakIterator
+libcore.io.EventLogger
+libcore.net.NetworkSecurityPolicy
+android.icu.text.UnicodeSet
+com.android.org.conscrypt.TrustedCertificateStore$PreloadHolder
+android.app.SearchManager
+android.os.Build
+android.app.ContextImpl
+android.app.WallpaperManager
+android.security.net.config.ApplicationConfig
+android.animation.LayoutTransition
+android.widget.TextView
+com.android.internal.logging.MetricsLogger
+android.renderscript.RenderScriptCacheDir
+android.os.Process
+android.os.Handler
+android.content.Context
+android.graphics.drawable.AdaptiveIconDrawable
+android.provider.FontsContract
+android.text.style.SuggestionSpan
+android.graphics.drawable.VectorDrawable$VGroup
+android.view.ViewStub
+android.text.style.MetricAffectingSpan
+android.content.SharedPreferences$OnSharedPreferenceChangeListener
+android.app.PendingIntent
+android.text.SpanWatcher
+android.widget.FrameLayout
+android.net.NetworkRequest$Type
+android.net.NetworkInfo$State
+android.graphics.drawable.GradientDrawable
+android.text.style.AlignmentSpan
+android.widget.LinearLayout
+android.text.style.CharacterStyle
+android.view.View$OnApplyWindowInsetsListener
+android.view.MenuItem
+android.text.style.ReplacementSpan
+android.graphics.drawable.Icon
+android.widget.Button
diff --git a/config/generate-preloaded-classes.sh b/config/generate-preloaded-classes.sh
new file mode 100755
index 0000000..e36e148
--- /dev/null
+++ b/config/generate-preloaded-classes.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+#
+# 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.
+if [ "$#" -lt 2 ]; then
+  echo "Usage $0 <input classes file> <blacklist file> [extra classes files]"
+  exit 1
+fi
+
+# Write file headers first
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+cat "$DIR/copyright-header"
+echo "# Preloaded-classes filter file for phones.
+#
+# Classes in this file will be allocated into the boot image, and forcibly initialized in
+# the zygote during initialization. This is a trade-off, using virtual address space to share
+# common heap between apps.
+#
+# This file has been derived for mainline phone (and tablet) usage.
+#"
+
+input=$1
+blacklist=$2
+shift 2
+extra_classes_files=("$@")
+
+# Disable locale to enable lexicographical sorting
+LC_ALL=C sort "$input" "${extra_classes_files[@]}" | uniq | grep -f "$blacklist" -v -F -x
diff --git a/config/preloaded-classes b/config/preloaded-classes
new file mode 100644
index 0000000..479cda4
--- /dev/null
+++ b/config/preloaded-classes
@@ -0,0 +1,4739 @@
+#
+# 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.
+#
+# Preloaded-classes filter file for phones.
+#
+# Classes in this file will be allocated into the boot image, and forcibly initialized in
+# the zygote during initialization. This is a trade-off, using virtual address space to share
+# common heap between apps.
+#
+# This file has been derived for mainline phone (and tablet) usage.
+#
+android.R$styleable
+android.accessibilityservice.AccessibilityServiceInfo$1
+android.accounts.Account
+android.accounts.Account$1
+android.accounts.AccountManager
+android.accounts.AccountManager$1
+android.accounts.AccountManager$11
+android.accounts.AccountManager$AmsTask
+android.accounts.AccountManager$AmsTask$1
+android.accounts.AccountManager$AmsTask$Response
+android.accounts.AccountManager$BaseFutureTask
+android.accounts.AccountManager$BaseFutureTask$1
+android.accounts.AccountManager$BaseFutureTask$Response
+android.accounts.AccountManager$Future2Task
+android.accounts.AccountManagerFuture
+android.accounts.AccountsException
+android.accounts.AuthenticatorException
+android.accounts.IAccountManager
+android.accounts.IAccountManager$Stub
+android.accounts.IAccountManager$Stub$Proxy
+android.accounts.IAccountManagerResponse
+android.accounts.IAccountManagerResponse$Stub
+android.accounts.OnAccountsUpdateListener
+android.accounts.OperationCanceledException
+android.animation.AnimationHandler
+android.animation.AnimationHandler$1
+android.animation.AnimationHandler$AnimationFrameCallback
+android.animation.AnimationHandler$AnimationFrameCallbackProvider
+android.animation.AnimationHandler$MyFrameCallbackProvider
+android.animation.Animator
+android.animation.Animator$AnimatorConstantState
+android.animation.Animator$AnimatorListener
+android.animation.Animator$AnimatorPauseListener
+android.animation.AnimatorInflater
+android.animation.AnimatorInflater$PathDataEvaluator
+android.animation.AnimatorListenerAdapter
+android.animation.AnimatorSet
+android.animation.AnimatorSet$1
+android.animation.AnimatorSet$2
+android.animation.AnimatorSet$3
+android.animation.AnimatorSet$AnimationEvent
+android.animation.AnimatorSet$Builder
+android.animation.AnimatorSet$Node
+android.animation.AnimatorSet$SeekState
+android.animation.FloatEvaluator
+android.animation.FloatKeyframeSet
+android.animation.IntEvaluator
+android.animation.IntKeyframeSet
+android.animation.Keyframe
+android.animation.Keyframe$FloatKeyframe
+android.animation.Keyframe$IntKeyframe
+android.animation.Keyframe$ObjectKeyframe
+android.animation.KeyframeSet
+android.animation.Keyframes
+android.animation.Keyframes$FloatKeyframes
+android.animation.Keyframes$IntKeyframes
+android.animation.LayoutTransition$TransitionListener
+android.animation.ObjectAnimator
+android.animation.PathKeyframes$1
+android.animation.PathKeyframes$2
+android.animation.PathKeyframes$FloatKeyframesBase
+android.animation.PathKeyframes$IntKeyframesBase
+android.animation.PathKeyframes$SimpleKeyframes
+android.animation.PropertyValuesHolder
+android.animation.PropertyValuesHolder$FloatPropertyValuesHolder
+android.animation.PropertyValuesHolder$IntPropertyValuesHolder
+android.animation.PropertyValuesHolder$PropertyValues
+android.animation.RectEvaluator
+android.animation.StateListAnimator
+android.animation.StateListAnimator$1
+android.animation.StateListAnimator$StateListAnimatorConstantState
+android.animation.StateListAnimator$Tuple
+android.animation.TimeAnimator
+android.animation.TimeAnimator$TimeListener
+android.animation.TimeInterpolator
+android.animation.TypeEvaluator
+android.animation.ValueAnimator
+android.animation.ValueAnimator$AnimatorUpdateListener
+android.app.-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU
+android.app.-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU$1
+android.app.-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ
+android.app.-$Lambda$c44uHH2WE4sJvw5tZZB6gRzEaHI
+android.app.-$Lambda$vZ1qb742P9hE4drBY-TrOZB_qKo
+android.app.ActionBar
+android.app.ActionBar$LayoutParams
+android.app.Activity
+android.app.Activity$HostCallbacks
+android.app.ActivityManager
+android.app.ActivityManager$1
+android.app.ActivityManager$AppTask
+android.app.ActivityManager$MemoryInfo$1
+android.app.ActivityManager$RecentTaskInfo$1
+android.app.ActivityManager$RunningAppProcessInfo
+android.app.ActivityManager$RunningAppProcessInfo$1
+android.app.ActivityManager$RunningTaskInfo$1
+android.app.ActivityManager$StackId
+android.app.ActivityManager$TaskDescription
+android.app.ActivityManager$TaskDescription$1
+android.app.ActivityOptions
+android.app.ActivityThread
+android.app.ActivityThread$1
+android.app.ActivityThread$2
+android.app.ActivityThread$ActivityClientRecord
+android.app.ActivityThread$ActivityConfigChangeData
+android.app.ActivityThread$AppBindData
+android.app.ActivityThread$ApplicationThread
+android.app.ActivityThread$BindServiceData
+android.app.ActivityThread$ContextCleanupInfo
+android.app.ActivityThread$CreateServiceData
+android.app.ActivityThread$DropBoxReporter
+android.app.ActivityThread$EventLoggingReporter
+android.app.ActivityThread$GcIdler
+android.app.ActivityThread$H
+android.app.ActivityThread$Idler
+android.app.ActivityThread$NewIntentData
+android.app.ActivityThread$Profiler
+android.app.ActivityThread$ProviderClientRecord
+android.app.ActivityThread$ProviderKey
+android.app.ActivityThread$ProviderRefCount
+android.app.ActivityThread$ReceiverData
+android.app.ActivityThread$RequestAssistContextExtras
+android.app.ActivityThread$ServiceArgsData
+android.app.ActivityThread$StopInfo
+android.app.ActivityTransitionState
+android.app.AlarmManager
+android.app.AlarmManager$ListenerWrapper
+android.app.AlertDialog
+android.app.AlertDialog$Builder
+android.app.AppGlobals
+android.app.AppOpsManager
+android.app.AppOpsManager$OnOpChangedListener
+android.app.Application
+android.app.Application$ActivityLifecycleCallbacks
+android.app.ApplicationErrorReport$CrashInfo
+android.app.ApplicationLoaders
+android.app.ApplicationPackageManager
+android.app.ApplicationPackageManager$ResourceName
+android.app.BackStackRecord
+android.app.BackStackRecord$Op
+android.app.ContentProviderHolder
+android.app.ContentProviderHolder$1
+android.app.ContextImpl
+android.app.ContextImpl$1
+android.app.ContextImpl$ApplicationContentResolver
+android.app.DexLoadReporter
+android.app.Dialog
+android.app.Dialog$ListenersHandler
+android.app.DialogFragment
+android.app.DownloadManager
+android.app.Fragment
+android.app.Fragment$1
+android.app.Fragment$AnimationInfo
+android.app.FragmentContainer
+android.app.FragmentController
+android.app.FragmentHostCallback
+android.app.FragmentManager
+android.app.FragmentManager$BackStackEntry
+android.app.FragmentManagerImpl
+android.app.FragmentManagerImpl$1
+android.app.FragmentManagerImpl$OpGenerator
+android.app.FragmentManagerState$1
+android.app.FragmentState$1
+android.app.FragmentTransaction
+android.app.FragmentTransition$FragmentContainerTransition
+android.app.IActivityManager
+android.app.IActivityManager$Stub
+android.app.IActivityManager$Stub$Proxy
+android.app.IAlarmListener
+android.app.IAlarmListener$Stub
+android.app.IAlarmManager
+android.app.IAlarmManager$Stub
+android.app.IAlarmManager$Stub$Proxy
+android.app.IAppTask
+android.app.IAppTask$Stub
+android.app.IAppTask$Stub$Proxy
+android.app.IApplicationThread
+android.app.IApplicationThread$Stub
+android.app.IInstrumentationWatcher
+android.app.IInstrumentationWatcher$Stub
+android.app.INotificationManager
+android.app.INotificationManager$Stub
+android.app.INotificationManager$Stub$Proxy
+android.app.IServiceConnection
+android.app.IServiceConnection$Stub
+android.app.IUiAutomationConnection
+android.app.IUiAutomationConnection$Stub
+android.app.IUiModeManager
+android.app.IUiModeManager$Stub
+android.app.IUiModeManager$Stub$Proxy
+android.app.IUserSwitchObserver
+android.app.IUserSwitchObserver$Stub
+android.app.IWallpaperManager
+android.app.IWallpaperManager$Stub
+android.app.IWallpaperManager$Stub$Proxy
+android.app.IWallpaperManagerCallback
+android.app.IWallpaperManagerCallback$Stub
+android.app.Instrumentation
+android.app.IntentReceiverLeaked
+android.app.IntentService
+android.app.IntentService$ServiceHandler
+android.app.JobSchedulerImpl
+android.app.KeyguardManager
+android.app.LoadedApk
+android.app.LoadedApk$ReceiverDispatcher
+android.app.LoadedApk$ReceiverDispatcher$Args
+android.app.LoadedApk$ReceiverDispatcher$InnerReceiver
+android.app.LoadedApk$ServiceDispatcher
+android.app.LoadedApk$ServiceDispatcher$ConnectionInfo
+android.app.LoadedApk$ServiceDispatcher$DeathMonitor
+android.app.LoadedApk$ServiceDispatcher$InnerConnection
+android.app.LoadedApk$ServiceDispatcher$RunConnection
+android.app.LoadedApk$WarningContextClassLoader
+android.app.LoaderManager
+android.app.LoaderManager$LoaderCallbacks
+android.app.LoaderManagerImpl
+android.app.LoaderManagerImpl$LoaderInfo
+android.app.NativeActivity
+android.app.Notification
+android.app.Notification$1
+android.app.Notification$Action$1
+android.app.Notification$BuilderRemoteViews
+android.app.Notification$StandardTemplateParams
+android.app.NotificationChannel
+android.app.NotificationChannel$1
+android.app.NotificationChannelGroup$1
+android.app.NotificationManager
+android.app.OnActivityPausedListener
+android.app.PendingIntent
+android.app.PendingIntent$1
+android.app.PendingIntent$CanceledException
+android.app.PendingIntent$OnMarshaledListener
+android.app.QueuedWork
+android.app.QueuedWork$QueuedWorkHandler
+android.app.ReceiverRestrictedContext
+android.app.RemoteInput$1
+android.app.ResourcesManager
+android.app.ResourcesManager$1
+android.app.ResourcesManager$ActivityResources
+android.app.ResultInfo
+android.app.ResultInfo$1
+android.app.SearchManager
+android.app.Service
+android.app.ServiceConnectionLeaked
+android.app.ServiceStartArgs
+android.app.ServiceStartArgs$1
+android.app.SharedElementCallback
+android.app.SharedElementCallback$1
+android.app.SharedPreferencesImpl
+android.app.SharedPreferencesImpl$1
+android.app.SharedPreferencesImpl$2
+android.app.SharedPreferencesImpl$EditorImpl
+android.app.SharedPreferencesImpl$EditorImpl$1
+android.app.SharedPreferencesImpl$EditorImpl$2
+android.app.SharedPreferencesImpl$EditorImpl$3
+android.app.SharedPreferencesImpl$MemoryCommitResult
+android.app.StatusBarManager
+android.app.SystemServiceRegistry
+android.app.SystemServiceRegistry$1
+android.app.SystemServiceRegistry$10
+android.app.SystemServiceRegistry$11
+android.app.SystemServiceRegistry$12
+android.app.SystemServiceRegistry$13
+android.app.SystemServiceRegistry$14
+android.app.SystemServiceRegistry$15
+android.app.SystemServiceRegistry$16
+android.app.SystemServiceRegistry$17
+android.app.SystemServiceRegistry$18
+android.app.SystemServiceRegistry$19
+android.app.SystemServiceRegistry$2
+android.app.SystemServiceRegistry$20
+android.app.SystemServiceRegistry$21
+android.app.SystemServiceRegistry$22
+android.app.SystemServiceRegistry$23
+android.app.SystemServiceRegistry$24
+android.app.SystemServiceRegistry$25
+android.app.SystemServiceRegistry$26
+android.app.SystemServiceRegistry$27
+android.app.SystemServiceRegistry$28
+android.app.SystemServiceRegistry$29
+android.app.SystemServiceRegistry$3
+android.app.SystemServiceRegistry$30
+android.app.SystemServiceRegistry$31
+android.app.SystemServiceRegistry$32
+android.app.SystemServiceRegistry$33
+android.app.SystemServiceRegistry$34
+android.app.SystemServiceRegistry$35
+android.app.SystemServiceRegistry$36
+android.app.SystemServiceRegistry$37
+android.app.SystemServiceRegistry$38
+android.app.SystemServiceRegistry$39
+android.app.SystemServiceRegistry$4
+android.app.SystemServiceRegistry$40
+android.app.SystemServiceRegistry$41
+android.app.SystemServiceRegistry$42
+android.app.SystemServiceRegistry$43
+android.app.SystemServiceRegistry$44
+android.app.SystemServiceRegistry$45
+android.app.SystemServiceRegistry$46
+android.app.SystemServiceRegistry$47
+android.app.SystemServiceRegistry$48
+android.app.SystemServiceRegistry$49
+android.app.SystemServiceRegistry$5
+android.app.SystemServiceRegistry$50
+android.app.SystemServiceRegistry$51
+android.app.SystemServiceRegistry$52
+android.app.SystemServiceRegistry$53
+android.app.SystemServiceRegistry$54
+android.app.SystemServiceRegistry$55
+android.app.SystemServiceRegistry$56
+android.app.SystemServiceRegistry$57
+android.app.SystemServiceRegistry$58
+android.app.SystemServiceRegistry$59
+android.app.SystemServiceRegistry$6
+android.app.SystemServiceRegistry$60
+android.app.SystemServiceRegistry$61
+android.app.SystemServiceRegistry$62
+android.app.SystemServiceRegistry$63
+android.app.SystemServiceRegistry$64
+android.app.SystemServiceRegistry$65
+android.app.SystemServiceRegistry$66
+android.app.SystemServiceRegistry$67
+android.app.SystemServiceRegistry$68
+android.app.SystemServiceRegistry$69
+android.app.SystemServiceRegistry$7
+android.app.SystemServiceRegistry$70
+android.app.SystemServiceRegistry$71
+android.app.SystemServiceRegistry$72
+android.app.SystemServiceRegistry$73
+android.app.SystemServiceRegistry$74
+android.app.SystemServiceRegistry$75
+android.app.SystemServiceRegistry$76
+android.app.SystemServiceRegistry$77
+android.app.SystemServiceRegistry$78
+android.app.SystemServiceRegistry$79
+android.app.SystemServiceRegistry$8
+android.app.SystemServiceRegistry$80
+android.app.SystemServiceRegistry$81
+android.app.SystemServiceRegistry$82
+android.app.SystemServiceRegistry$83
+android.app.SystemServiceRegistry$84
+android.app.SystemServiceRegistry$85
+android.app.SystemServiceRegistry$9
+android.app.SystemServiceRegistry$CachedServiceFetcher
+android.app.SystemServiceRegistry$ServiceFetcher
+android.app.SystemServiceRegistry$StaticApplicationContextServiceFetcher
+android.app.SystemServiceRegistry$StaticServiceFetcher
+android.app.UiModeManager
+android.app.UserSwitchObserver
+android.app.VrManager
+android.app.WallpaperColors$1
+android.app.WallpaperInfo$1
+android.app.WallpaperManager
+android.app.WallpaperManager$Globals
+android.app.admin.DevicePolicyManager
+android.app.admin.IDevicePolicyManager
+android.app.admin.IDevicePolicyManager$Stub
+android.app.admin.IDevicePolicyManager$Stub$Proxy
+android.app.admin.SecurityLog
+android.app.admin.SecurityLog$SecurityEvent
+android.app.admin.SecurityLog$SecurityEvent$1
+android.app.assist.AssistStructure$1
+android.app.assist.AssistStructure$ParcelTransferWriter
+android.app.assist.AssistStructure$SendChannel
+android.app.assist.AssistStructure$ViewNode
+android.app.assist.AssistStructure$ViewNodeBuilder
+android.app.assist.AssistStructure$ViewNodeText
+android.app.assist.AssistStructure$ViewStackEntry
+android.app.assist.AssistStructure$WindowNode
+android.app.backup.BackupAgent
+android.app.backup.BackupAgentHelper
+android.app.backup.BackupDataInput
+android.app.backup.BackupDataInput$EntityHeader
+android.app.backup.BackupDataOutput
+android.app.backup.BackupHelperDispatcher
+android.app.backup.BackupHelperDispatcher$Header
+android.app.backup.BackupManager
+android.app.backup.FileBackupHelperBase
+android.app.backup.FullBackup
+android.app.backup.FullBackupDataOutput
+android.app.backup.IBackupManager
+android.app.backup.IBackupManager$Stub
+android.app.backup.IBackupManager$Stub$Proxy
+android.app.job.IJobCallback
+android.app.job.IJobCallback$Stub
+android.app.job.IJobCallback$Stub$Proxy
+android.app.job.IJobScheduler
+android.app.job.IJobScheduler$Stub
+android.app.job.IJobScheduler$Stub$Proxy
+android.app.job.IJobService
+android.app.job.IJobService$Stub
+android.app.job.JobInfo
+android.app.job.JobInfo$1
+android.app.job.JobInfo$Builder
+android.app.job.JobInfo$TriggerContentUri$1
+android.app.job.JobParameters
+android.app.job.JobParameters$1
+android.app.job.JobScheduler
+android.app.job.JobService
+android.app.job.JobService$1
+android.app.job.JobServiceEngine
+android.app.job.JobServiceEngine$JobHandler
+android.app.job.JobServiceEngine$JobInterface
+android.app.timezone.RulesManager
+android.app.trust.ITrustManager
+android.app.trust.ITrustManager$Stub
+android.app.trust.ITrustManager$Stub$Proxy
+android.app.trust.TrustManager
+android.app.usage.IStorageStatsManager
+android.app.usage.IStorageStatsManager$Stub
+android.app.usage.NetworkStatsManager
+android.app.usage.StorageStatsManager
+android.app.usage.UsageStatsManager
+android.appwidget.AppWidgetManager
+android.appwidget.AppWidgetProvider
+android.bluetooth.BluetoothA2dp
+android.bluetooth.BluetoothA2dp$1
+android.bluetooth.BluetoothA2dp$2
+android.bluetooth.BluetoothAdapter$1
+android.bluetooth.BluetoothDevice$1
+android.bluetooth.BluetoothDevice$2
+android.bluetooth.BluetoothHeadset
+android.bluetooth.BluetoothHeadset$1
+android.bluetooth.BluetoothHeadset$2
+android.bluetooth.BluetoothHeadset$3
+android.bluetooth.BluetoothManager
+android.bluetooth.BluetoothProfile
+android.bluetooth.BluetoothProfile$ServiceListener
+android.bluetooth.IBluetooth
+android.bluetooth.IBluetooth$Stub
+android.bluetooth.IBluetooth$Stub$Proxy
+android.bluetooth.IBluetoothA2dp
+android.bluetooth.IBluetoothA2dp$Stub
+android.bluetooth.IBluetoothA2dp$Stub$Proxy
+android.bluetooth.IBluetoothGatt
+android.bluetooth.IBluetoothGatt$Stub
+android.bluetooth.IBluetoothHeadset
+android.bluetooth.IBluetoothHeadset$Stub
+android.bluetooth.IBluetoothHeadset$Stub$Proxy
+android.bluetooth.IBluetoothManager
+android.bluetooth.IBluetoothManager$Stub
+android.bluetooth.IBluetoothManager$Stub$Proxy
+android.bluetooth.IBluetoothManagerCallback
+android.bluetooth.IBluetoothManagerCallback$Stub
+android.bluetooth.IBluetoothProfileServiceConnection
+android.bluetooth.IBluetoothProfileServiceConnection$Stub
+android.bluetooth.IBluetoothStateChangeCallback
+android.bluetooth.IBluetoothStateChangeCallback$Stub
+android.companion.CompanionDeviceManager
+android.content.AbstractThreadedSyncAdapter$ISyncAdapterImpl
+android.content.ActivityNotFoundException
+android.content.AsyncQueryHandler$WorkerArgs
+android.content.AsyncQueryHandler$WorkerHandler
+android.content.AsyncTaskLoader
+android.content.AsyncTaskLoader$LoadTask
+android.content.BroadcastReceiver
+android.content.BroadcastReceiver$PendingResult
+android.content.BroadcastReceiver$PendingResult$1
+android.content.ClipboardManager
+android.content.ClipboardManager$1
+android.content.ClipboardManager$2
+android.content.ComponentCallbacks
+android.content.ComponentCallbacks2
+android.content.ComponentName
+android.content.ComponentName$1
+android.content.ContentProvider
+android.content.ContentProvider$PipeDataWriter
+android.content.ContentProvider$Transport
+android.content.ContentProviderClient
+android.content.ContentProviderNative
+android.content.ContentProviderProxy
+android.content.ContentResolver
+android.content.ContentResolver$1
+android.content.ContentResolver$CursorWrapperInner
+android.content.ContentResolver$ParcelFileDescriptorInner
+android.content.ContentUris
+android.content.ContentValues
+android.content.ContentValues$1
+android.content.Context
+android.content.ContextWrapper
+android.content.CursorLoader
+android.content.DialogInterface
+android.content.DialogInterface$OnCancelListener
+android.content.DialogInterface$OnClickListener
+android.content.DialogInterface$OnDismissListener
+android.content.IClipboard
+android.content.IClipboard$Stub
+android.content.IClipboard$Stub$Proxy
+android.content.IContentProvider
+android.content.IContentService
+android.content.IContentService$Stub
+android.content.IContentService$Stub$Proxy
+android.content.IIntentReceiver
+android.content.IIntentReceiver$Stub
+android.content.IIntentSender
+android.content.IIntentSender$Stub
+android.content.IIntentSender$Stub$Proxy
+android.content.IOnPrimaryClipChangedListener
+android.content.IOnPrimaryClipChangedListener$Stub
+android.content.IRestrictionsManager
+android.content.IRestrictionsManager$Stub
+android.content.ISyncAdapter
+android.content.ISyncAdapter$Stub
+android.content.ISyncContext
+android.content.ISyncContext$Stub
+android.content.ISyncStatusObserver
+android.content.ISyncStatusObserver$Stub
+android.content.Intent
+android.content.Intent$1
+android.content.IntentFilter
+android.content.IntentFilter$1
+android.content.IntentFilter$MalformedMimeTypeException
+android.content.IntentSender
+android.content.IntentSender$SendIntentException
+android.content.Loader
+android.content.Loader$ForceLoadContentObserver
+android.content.Loader$OnLoadCanceledListener
+android.content.Loader$OnLoadCompleteListener
+android.content.OperationApplicationException
+android.content.RestrictionsManager
+android.content.ServiceConnection
+android.content.SharedPreferences
+android.content.SharedPreferences$Editor
+android.content.SharedPreferences$OnSharedPreferenceChangeListener
+android.content.SyncRequest$1
+android.content.SyncResult$1
+android.content.SyncStats$1
+android.content.SyncStatusObserver
+android.content.UndoManager
+android.content.UndoOwner
+android.content.UriMatcher
+android.content.pm.ActivityInfo
+android.content.pm.ActivityInfo$1
+android.content.pm.ActivityInfo$WindowLayout
+android.content.pm.ApplicationInfo
+android.content.pm.ApplicationInfo$1
+android.content.pm.BaseParceledListSlice
+android.content.pm.ComponentInfo
+android.content.pm.ConfigurationInfo
+android.content.pm.ConfigurationInfo$1
+android.content.pm.FeatureGroupInfo
+android.content.pm.FeatureGroupInfo$1
+android.content.pm.FeatureInfo
+android.content.pm.FeatureInfo$1
+android.content.pm.IPackageInstaller
+android.content.pm.IPackageInstaller$Stub
+android.content.pm.IPackageInstaller$Stub$Proxy
+android.content.pm.IPackageManager
+android.content.pm.IPackageManager$Stub
+android.content.pm.IPackageManager$Stub$Proxy
+android.content.pm.IShortcutService
+android.content.pm.IShortcutService$Stub
+android.content.pm.IShortcutService$Stub$Proxy
+android.content.pm.InstrumentationInfo
+android.content.pm.InstrumentationInfo$1
+android.content.pm.LauncherApps
+android.content.pm.PackageInfo
+android.content.pm.PackageInfo$1
+android.content.pm.PackageItemInfo
+android.content.pm.PackageManager
+android.content.pm.PackageManager$NameNotFoundException
+android.content.pm.PackageParser$PackageParserException
+android.content.pm.ParceledListSlice
+android.content.pm.ParceledListSlice$1
+android.content.pm.PathPermission
+android.content.pm.PathPermission$1
+android.content.pm.PermissionInfo
+android.content.pm.PermissionInfo$1
+android.content.pm.ProviderInfo
+android.content.pm.ProviderInfo$1
+android.content.pm.ResolveInfo
+android.content.pm.ResolveInfo$1
+android.content.pm.ServiceInfo
+android.content.pm.ServiceInfo$1
+android.content.pm.ShortcutInfo$1
+android.content.pm.ShortcutManager
+android.content.pm.Signature
+android.content.pm.Signature$1
+android.content.pm.UserInfo$1
+android.content.res.AssetFileDescriptor
+android.content.res.AssetFileDescriptor$1
+android.content.res.AssetManager
+android.content.res.AssetManager$AssetInputStream
+android.content.res.ColorStateList
+android.content.res.ColorStateList$1
+android.content.res.ColorStateList$ColorStateListFactory
+android.content.res.CompatResources
+android.content.res.CompatibilityInfo
+android.content.res.CompatibilityInfo$1
+android.content.res.CompatibilityInfo$2
+android.content.res.ComplexColor
+android.content.res.Configuration
+android.content.res.Configuration$1
+android.content.res.ConfigurationBoundResourceCache
+android.content.res.ConstantState
+android.content.res.DrawableCache
+android.content.res.GradientColor
+android.content.res.ObbInfo
+android.content.res.ObbInfo$1
+android.content.res.ObbScanner
+android.content.res.ResourceId
+android.content.res.Resources
+android.content.res.Resources$NotFoundException
+android.content.res.Resources$Theme
+android.content.res.Resources$ThemeKey
+android.content.res.ResourcesImpl
+android.content.res.ResourcesImpl$ThemeImpl
+android.content.res.ResourcesKey
+android.content.res.StringBlock
+android.content.res.ThemedResourceCache
+android.content.res.TypedArray
+android.content.res.XmlBlock
+android.content.res.XmlBlock$Parser
+android.content.res.XmlResourceParser
+android.database.AbstractCursor
+android.database.AbstractCursor$SelfContentObserver
+android.database.AbstractWindowedCursor
+android.database.BulkCursorDescriptor
+android.database.BulkCursorDescriptor$1
+android.database.BulkCursorNative
+android.database.BulkCursorProxy
+android.database.BulkCursorToCursorAdaptor
+android.database.CharArrayBuffer
+android.database.ContentObservable
+android.database.ContentObserver
+android.database.ContentObserver$NotificationRunnable
+android.database.ContentObserver$Transport
+android.database.CrossProcessCursor
+android.database.CrossProcessCursorWrapper
+android.database.Cursor
+android.database.CursorToBulkCursorAdaptor
+android.database.CursorToBulkCursorAdaptor$ContentObserverProxy
+android.database.CursorWindow
+android.database.CursorWindow$1
+android.database.CursorWrapper
+android.database.DataSetObservable
+android.database.DataSetObserver
+android.database.DatabaseErrorHandler
+android.database.DatabaseUtils
+android.database.DefaultDatabaseErrorHandler
+android.database.IBulkCursor
+android.database.IContentObserver
+android.database.IContentObserver$Stub
+android.database.IContentObserver$Stub$Proxy
+android.database.MatrixCursor
+android.database.MergeCursor
+android.database.MergeCursor$1
+android.database.Observable
+android.database.SQLException
+android.database.sqlite.-$Lambda$gPaS7kMbZ8xtrrEx06GlwJ2iDWE
+android.database.sqlite.DatabaseObjectNotClosedException
+android.database.sqlite.SQLiteClosable
+android.database.sqlite.SQLiteConnection
+android.database.sqlite.SQLiteConnection$Operation
+android.database.sqlite.SQLiteConnection$OperationLog
+android.database.sqlite.SQLiteConnection$PreparedStatement
+android.database.sqlite.SQLiteConnection$PreparedStatementCache
+android.database.sqlite.SQLiteConnectionPool
+android.database.sqlite.SQLiteConnectionPool$AcquiredConnectionStatus
+android.database.sqlite.SQLiteConnectionPool$ConnectionWaiter
+android.database.sqlite.SQLiteConnectionPool$IdleConnectionHandler
+android.database.sqlite.SQLiteCursor
+android.database.sqlite.SQLiteCursorDriver
+android.database.sqlite.SQLiteCustomFunction
+android.database.sqlite.SQLiteDatabase
+android.database.sqlite.SQLiteDatabase$CursorFactory
+android.database.sqlite.SQLiteDatabase$OpenParams
+android.database.sqlite.SQLiteDatabase$OpenParams$Builder
+android.database.sqlite.SQLiteDatabaseConfiguration
+android.database.sqlite.SQLiteDatabaseCorruptException
+android.database.sqlite.SQLiteDatabaseLockedException
+android.database.sqlite.SQLiteDebug
+android.database.sqlite.SQLiteDebug$PagerStats
+android.database.sqlite.SQLiteDirectCursorDriver
+android.database.sqlite.SQLiteDoneException
+android.database.sqlite.SQLiteException
+android.database.sqlite.SQLiteFullException
+android.database.sqlite.SQLiteGlobal
+android.database.sqlite.SQLiteOpenHelper
+android.database.sqlite.SQLiteProgram
+android.database.sqlite.SQLiteQuery
+android.database.sqlite.SQLiteQueryBuilder
+android.database.sqlite.SQLiteSession
+android.database.sqlite.SQLiteSession$Transaction
+android.database.sqlite.SQLiteStatement
+android.database.sqlite.SQLiteStatementInfo
+android.database.sqlite.SQLiteTransactionListener
+android.ddm.DdmHandleAppName
+android.ddm.DdmHandleExit
+android.ddm.DdmHandleHeap
+android.ddm.DdmHandleHello
+android.ddm.DdmHandleNativeHeap
+android.ddm.DdmHandleProfiling
+android.ddm.DdmHandleThread
+android.ddm.DdmHandleViewDebug
+android.ddm.DdmRegister
+android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8
+android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$1
+android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$2
+android.graphics.BaseCanvas
+android.graphics.Bitmap
+android.graphics.Bitmap$1
+android.graphics.Bitmap$Config
+android.graphics.BitmapFactory
+android.graphics.BitmapFactory$Options
+android.graphics.BitmapRegionDecoder
+android.graphics.BitmapShader
+android.graphics.BlurMaskFilter
+android.graphics.Camera
+android.graphics.Canvas
+android.graphics.Canvas$EdgeType
+android.graphics.Canvas$NoImagePreloadHolder
+android.graphics.CanvasProperty
+android.graphics.Color
+android.graphics.ColorFilter
+android.graphics.ColorFilter$NoImagePreloadHolder
+android.graphics.ColorMatrix
+android.graphics.ColorMatrixColorFilter
+android.graphics.ColorSpace
+android.graphics.ColorSpace$Lab
+android.graphics.ColorSpace$Model
+android.graphics.ColorSpace$Named
+android.graphics.ColorSpace$Rgb
+android.graphics.ColorSpace$Rgb$TransferParameters
+android.graphics.ColorSpace$Xyz
+android.graphics.ComposePathEffect
+android.graphics.ComposeShader
+android.graphics.CornerPathEffect
+android.graphics.DashPathEffect
+android.graphics.DiscretePathEffect
+android.graphics.DrawFilter
+android.graphics.EmbossMaskFilter
+android.graphics.FontFamily
+android.graphics.FontListParser
+android.graphics.GraphicBuffer
+android.graphics.GraphicBuffer$1
+android.graphics.Insets
+android.graphics.Interpolator
+android.graphics.LightingColorFilter
+android.graphics.LinearGradient
+android.graphics.MaskFilter
+android.graphics.Matrix
+android.graphics.Matrix$1
+android.graphics.Matrix$NoImagePreloadHolder
+android.graphics.Matrix$ScaleToFit
+android.graphics.Movie
+android.graphics.NinePatch
+android.graphics.NinePatch$InsetStruct
+android.graphics.Outline
+android.graphics.Paint
+android.graphics.Paint$Align
+android.graphics.Paint$Cap
+android.graphics.Paint$FontMetrics
+android.graphics.Paint$FontMetricsInt
+android.graphics.Paint$Join
+android.graphics.Paint$NoImagePreloadHolder
+android.graphics.Paint$Style
+android.graphics.PaintFlagsDrawFilter
+android.graphics.Path
+android.graphics.Path$FillType
+android.graphics.PathDashPathEffect
+android.graphics.PathEffect
+android.graphics.PathMeasure
+android.graphics.Picture
+android.graphics.PixelFormat
+android.graphics.Point
+android.graphics.Point$1
+android.graphics.PointF
+android.graphics.PointF$1
+android.graphics.PorterDuff
+android.graphics.PorterDuff$Mode
+android.graphics.PorterDuffColorFilter
+android.graphics.PorterDuffXfermode
+android.graphics.RadialGradient
+android.graphics.Rect
+android.graphics.Rect$1
+android.graphics.RectF
+android.graphics.RectF$1
+android.graphics.Region
+android.graphics.Region$1
+android.graphics.Region$Op
+android.graphics.RegionIterator
+android.graphics.Shader
+android.graphics.Shader$TileMode
+android.graphics.SumPathEffect
+android.graphics.SurfaceTexture
+android.graphics.SurfaceTexture$1
+android.graphics.SurfaceTexture$OnFrameAvailableListener
+android.graphics.SweepGradient
+android.graphics.TableMaskFilter
+android.graphics.TemporaryBuffer
+android.graphics.Typeface
+android.graphics.Xfermode
+android.graphics.YuvImage
+android.graphics.drawable.AdaptiveIconDrawable$ChildDrawable
+android.graphics.drawable.AdaptiveIconDrawable$LayerState
+android.graphics.drawable.Animatable
+android.graphics.drawable.Animatable2
+android.graphics.drawable.AnimatedStateListDrawable
+android.graphics.drawable.AnimatedStateListDrawable$AnimatedStateListState
+android.graphics.drawable.AnimatedStateListDrawable$Transition
+android.graphics.drawable.AnimatedVectorDrawable
+android.graphics.drawable.AnimatedVectorDrawable$1
+android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState
+android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator
+android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimator
+android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimatorRT
+android.graphics.drawable.AnimationDrawable
+android.graphics.drawable.AnimationDrawable$AnimationState
+android.graphics.drawable.BitmapDrawable
+android.graphics.drawable.BitmapDrawable$BitmapState
+android.graphics.drawable.ClipDrawable
+android.graphics.drawable.ClipDrawable$ClipState
+android.graphics.drawable.ColorDrawable
+android.graphics.drawable.ColorDrawable$ColorState
+android.graphics.drawable.Drawable
+android.graphics.drawable.Drawable$Callback
+android.graphics.drawable.Drawable$ConstantState
+android.graphics.drawable.DrawableContainer
+android.graphics.drawable.DrawableContainer$BlockInvalidateCallback
+android.graphics.drawable.DrawableContainer$DrawableContainerState
+android.graphics.drawable.DrawableInflater
+android.graphics.drawable.DrawableWrapper
+android.graphics.drawable.DrawableWrapper$DrawableWrapperState
+android.graphics.drawable.GradientDrawable
+android.graphics.drawable.GradientDrawable$GradientState
+android.graphics.drawable.GradientDrawable$Orientation
+android.graphics.drawable.Icon
+android.graphics.drawable.Icon$1
+android.graphics.drawable.InsetDrawable
+android.graphics.drawable.InsetDrawable$InsetState
+android.graphics.drawable.InsetDrawable$InsetValue
+android.graphics.drawable.LayerDrawable
+android.graphics.drawable.LayerDrawable$ChildDrawable
+android.graphics.drawable.LayerDrawable$LayerState
+android.graphics.drawable.NinePatchDrawable
+android.graphics.drawable.NinePatchDrawable$NinePatchState
+android.graphics.drawable.RippleBackground
+android.graphics.drawable.RippleBackground$1
+android.graphics.drawable.RippleBackground$BackgroundProperty
+android.graphics.drawable.RippleComponent
+android.graphics.drawable.RippleComponent$RenderNodeAnimatorSet
+android.graphics.drawable.RippleDrawable
+android.graphics.drawable.RippleDrawable$RippleState
+android.graphics.drawable.RippleForeground$1
+android.graphics.drawable.RippleForeground$2
+android.graphics.drawable.RippleForeground$3
+android.graphics.drawable.RippleForeground$4
+android.graphics.drawable.RippleForeground$LogDecelerateInterpolator
+android.graphics.drawable.RotateDrawable
+android.graphics.drawable.RotateDrawable$RotateState
+android.graphics.drawable.ScaleDrawable
+android.graphics.drawable.ScaleDrawable$ScaleState
+android.graphics.drawable.ShapeDrawable
+android.graphics.drawable.ShapeDrawable$ShapeState
+android.graphics.drawable.StateListDrawable
+android.graphics.drawable.StateListDrawable$StateListState
+android.graphics.drawable.TransitionDrawable
+android.graphics.drawable.TransitionDrawable$TransitionState
+android.graphics.drawable.VectorDrawable
+android.graphics.drawable.VectorDrawable$VClipPath
+android.graphics.drawable.VectorDrawable$VFullPath
+android.graphics.drawable.VectorDrawable$VFullPath$1
+android.graphics.drawable.VectorDrawable$VFullPath$10
+android.graphics.drawable.VectorDrawable$VFullPath$2
+android.graphics.drawable.VectorDrawable$VFullPath$3
+android.graphics.drawable.VectorDrawable$VFullPath$4
+android.graphics.drawable.VectorDrawable$VFullPath$5
+android.graphics.drawable.VectorDrawable$VFullPath$6
+android.graphics.drawable.VectorDrawable$VFullPath$7
+android.graphics.drawable.VectorDrawable$VFullPath$8
+android.graphics.drawable.VectorDrawable$VFullPath$9
+android.graphics.drawable.VectorDrawable$VGroup
+android.graphics.drawable.VectorDrawable$VGroup$1
+android.graphics.drawable.VectorDrawable$VGroup$2
+android.graphics.drawable.VectorDrawable$VGroup$3
+android.graphics.drawable.VectorDrawable$VGroup$4
+android.graphics.drawable.VectorDrawable$VGroup$5
+android.graphics.drawable.VectorDrawable$VGroup$6
+android.graphics.drawable.VectorDrawable$VGroup$7
+android.graphics.drawable.VectorDrawable$VGroup$8
+android.graphics.drawable.VectorDrawable$VGroup$9
+android.graphics.drawable.VectorDrawable$VObject
+android.graphics.drawable.VectorDrawable$VPath
+android.graphics.drawable.VectorDrawable$VPath$1
+android.graphics.drawable.VectorDrawable$VectorDrawableState
+android.graphics.drawable.VectorDrawable$VectorDrawableState$1
+android.graphics.drawable.shapes.OvalShape
+android.graphics.drawable.shapes.RectShape
+android.graphics.drawable.shapes.RoundRectShape
+android.graphics.drawable.shapes.Shape
+android.graphics.fonts.FontVariationAxis
+android.graphics.pdf.PdfDocument
+android.graphics.pdf.PdfEditor
+android.graphics.pdf.PdfRenderer
+android.hardware.Camera
+android.hardware.Camera$CameraInfo
+android.hardware.Camera$Face
+android.hardware.CameraStatus$1
+android.hardware.ConsumerIrManager
+android.hardware.HardwareBuffer
+android.hardware.HardwareBuffer$1
+android.hardware.ICameraService
+android.hardware.ICameraService$Stub
+android.hardware.ICameraService$Stub$Proxy
+android.hardware.ICameraServiceListener
+android.hardware.ICameraServiceListener$Stub
+android.hardware.SensorEvent
+android.hardware.SensorEventListener
+android.hardware.SensorManager
+android.hardware.SerialManager
+android.hardware.SerialPort
+android.hardware.SystemSensorManager
+android.hardware.SystemSensorManager$BaseEventQueue
+android.hardware.SystemSensorManager$SensorEventQueue
+android.hardware.TriggerEventListener
+android.hardware.camera2.CameraAccessException
+android.hardware.camera2.CameraCharacteristics
+android.hardware.camera2.CameraCharacteristics$1
+android.hardware.camera2.CameraCharacteristics$2
+android.hardware.camera2.CameraCharacteristics$3
+android.hardware.camera2.CameraCharacteristics$4
+android.hardware.camera2.CameraCharacteristics$5
+android.hardware.camera2.CameraCharacteristics$Key
+android.hardware.camera2.CameraManager
+android.hardware.camera2.CameraMetadata
+android.hardware.camera2.CaptureRequest
+android.hardware.camera2.CaptureRequest$1
+android.hardware.camera2.CaptureRequest$2
+android.hardware.camera2.CaptureRequest$Key
+android.hardware.camera2.CaptureResult
+android.hardware.camera2.CaptureResult$1
+android.hardware.camera2.CaptureResult$2
+android.hardware.camera2.CaptureResult$3
+android.hardware.camera2.CaptureResult$Key
+android.hardware.camera2.DngCreator
+android.hardware.camera2.impl.CameraMetadataNative
+android.hardware.camera2.impl.CameraMetadataNative$1
+android.hardware.camera2.impl.CameraMetadataNative$10
+android.hardware.camera2.impl.CameraMetadataNative$11
+android.hardware.camera2.impl.CameraMetadataNative$12
+android.hardware.camera2.impl.CameraMetadataNative$13
+android.hardware.camera2.impl.CameraMetadataNative$14
+android.hardware.camera2.impl.CameraMetadataNative$15
+android.hardware.camera2.impl.CameraMetadataNative$16
+android.hardware.camera2.impl.CameraMetadataNative$17
+android.hardware.camera2.impl.CameraMetadataNative$18
+android.hardware.camera2.impl.CameraMetadataNative$19
+android.hardware.camera2.impl.CameraMetadataNative$2
+android.hardware.camera2.impl.CameraMetadataNative$3
+android.hardware.camera2.impl.CameraMetadataNative$4
+android.hardware.camera2.impl.CameraMetadataNative$5
+android.hardware.camera2.impl.CameraMetadataNative$6
+android.hardware.camera2.impl.CameraMetadataNative$7
+android.hardware.camera2.impl.CameraMetadataNative$8
+android.hardware.camera2.impl.CameraMetadataNative$9
+android.hardware.camera2.impl.CameraMetadataNative$Key
+android.hardware.camera2.impl.GetCommand
+android.hardware.camera2.impl.SetCommand
+android.hardware.camera2.legacy.LegacyCameraDevice
+android.hardware.camera2.legacy.PerfMeasurement
+android.hardware.camera2.marshal.MarshalQueryable
+android.hardware.camera2.marshal.MarshalRegistry
+android.hardware.camera2.marshal.impl.MarshalQueryableArray
+android.hardware.camera2.marshal.impl.MarshalQueryableBlackLevelPattern
+android.hardware.camera2.marshal.impl.MarshalQueryableBoolean
+android.hardware.camera2.marshal.impl.MarshalQueryableColorSpaceTransform
+android.hardware.camera2.marshal.impl.MarshalQueryableEnum
+android.hardware.camera2.marshal.impl.MarshalQueryableHighSpeedVideoConfiguration
+android.hardware.camera2.marshal.impl.MarshalQueryableMeteringRectangle
+android.hardware.camera2.marshal.impl.MarshalQueryableNativeByteToInteger
+android.hardware.camera2.marshal.impl.MarshalQueryablePair
+android.hardware.camera2.marshal.impl.MarshalQueryableParcelable
+android.hardware.camera2.marshal.impl.MarshalQueryablePrimitive
+android.hardware.camera2.marshal.impl.MarshalQueryableRange
+android.hardware.camera2.marshal.impl.MarshalQueryableRect
+android.hardware.camera2.marshal.impl.MarshalQueryableReprocessFormatsMap
+android.hardware.camera2.marshal.impl.MarshalQueryableRggbChannelVector
+android.hardware.camera2.marshal.impl.MarshalQueryableSize
+android.hardware.camera2.marshal.impl.MarshalQueryableSizeF
+android.hardware.camera2.marshal.impl.MarshalQueryableStreamConfiguration
+android.hardware.camera2.marshal.impl.MarshalQueryableStreamConfigurationDuration
+android.hardware.camera2.marshal.impl.MarshalQueryableString
+android.hardware.camera2.params.BlackLevelPattern
+android.hardware.camera2.params.ColorSpaceTransform
+android.hardware.camera2.params.Face
+android.hardware.camera2.params.HighSpeedVideoConfiguration
+android.hardware.camera2.params.LensShadingMap
+android.hardware.camera2.params.MeteringRectangle
+android.hardware.camera2.params.ReprocessFormatsMap
+android.hardware.camera2.params.RggbChannelVector
+android.hardware.camera2.params.StreamConfiguration
+android.hardware.camera2.params.StreamConfigurationDuration
+android.hardware.camera2.params.StreamConfigurationMap
+android.hardware.camera2.params.TonemapCurve
+android.hardware.camera2.utils.TypeReference
+android.hardware.camera2.utils.TypeReference$SpecializedTypeReference
+android.hardware.display.DisplayManager
+android.hardware.display.DisplayManager$DisplayListener
+android.hardware.display.DisplayManagerGlobal
+android.hardware.display.DisplayManagerGlobal$DisplayListenerDelegate
+android.hardware.display.DisplayManagerGlobal$DisplayManagerCallback
+android.hardware.display.IDisplayManager
+android.hardware.display.IDisplayManager$Stub
+android.hardware.display.IDisplayManager$Stub$Proxy
+android.hardware.display.IDisplayManagerCallback
+android.hardware.display.IDisplayManagerCallback$Stub
+android.hardware.display.WifiDisplay$1
+android.hardware.display.WifiDisplaySessionInfo$1
+android.hardware.display.WifiDisplayStatus$1
+android.hardware.fingerprint.FingerprintManager
+android.hardware.fingerprint.FingerprintManager$1
+android.hardware.fingerprint.FingerprintManager$MyHandler
+android.hardware.fingerprint.IFingerprintService
+android.hardware.fingerprint.IFingerprintService$Stub
+android.hardware.fingerprint.IFingerprintServiceReceiver
+android.hardware.fingerprint.IFingerprintServiceReceiver$Stub
+android.hardware.hdmi.HdmiControlManager
+android.hardware.input.IInputDevicesChangedListener
+android.hardware.input.IInputDevicesChangedListener$Stub
+android.hardware.input.IInputManager
+android.hardware.input.IInputManager$Stub
+android.hardware.input.IInputManager$Stub$Proxy
+android.hardware.input.InputDeviceIdentifier
+android.hardware.input.InputDeviceIdentifier$1
+android.hardware.input.InputManager
+android.hardware.input.InputManager$InputDeviceListener
+android.hardware.input.InputManager$InputDeviceListenerDelegate
+android.hardware.input.InputManager$InputDevicesChangedListener
+android.hardware.location.ActivityRecognitionHardware
+android.hardware.location.ContextHubManager
+android.hardware.location.IActivityRecognitionHardware
+android.hardware.location.IActivityRecognitionHardware$Stub
+android.hardware.radio.RadioManager
+android.hardware.soundtrigger.SoundTrigger
+android.hardware.soundtrigger.SoundTrigger$ConfidenceLevel
+android.hardware.soundtrigger.SoundTrigger$ConfidenceLevel$1
+android.hardware.soundtrigger.SoundTrigger$GenericRecognitionEvent
+android.hardware.soundtrigger.SoundTrigger$GenericRecognitionEvent$1
+android.hardware.soundtrigger.SoundTrigger$GenericSoundModel
+android.hardware.soundtrigger.SoundTrigger$Keyphrase
+android.hardware.soundtrigger.SoundTrigger$Keyphrase$1
+android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionEvent
+android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionEvent$1
+android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionExtra
+android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionExtra$1
+android.hardware.soundtrigger.SoundTrigger$KeyphraseSoundModel
+android.hardware.soundtrigger.SoundTrigger$KeyphraseSoundModel$1
+android.hardware.soundtrigger.SoundTrigger$ModuleProperties
+android.hardware.soundtrigger.SoundTrigger$ModuleProperties$1
+android.hardware.soundtrigger.SoundTrigger$RecognitionConfig
+android.hardware.soundtrigger.SoundTrigger$RecognitionConfig$1
+android.hardware.soundtrigger.SoundTrigger$RecognitionEvent
+android.hardware.soundtrigger.SoundTrigger$RecognitionEvent$1
+android.hardware.soundtrigger.SoundTrigger$SoundModel
+android.hardware.soundtrigger.SoundTrigger$SoundModelEvent
+android.hardware.soundtrigger.SoundTrigger$SoundModelEvent$1
+android.hardware.soundtrigger.SoundTriggerModule
+android.hardware.usb.UsbDevice
+android.hardware.usb.UsbDeviceConnection
+android.hardware.usb.UsbManager
+android.hardware.usb.UsbRequest
+android.hidl.base.V1_0.IBase
+android.icu.impl.BMPSet
+android.icu.impl.CacheBase
+android.icu.impl.CacheValue
+android.icu.impl.CacheValue$NullValue
+android.icu.impl.CacheValue$SoftValue
+android.icu.impl.CacheValue$Strength
+android.icu.impl.CalendarUtil
+android.icu.impl.CaseMapImpl
+android.icu.impl.CaseMapImpl$StringContextIterator
+android.icu.impl.CharTrie
+android.icu.impl.ClassLoaderUtil
+android.icu.impl.CurrencyData
+android.icu.impl.CurrencyData$CurrencyDisplayInfo
+android.icu.impl.CurrencyData$CurrencyDisplayInfoProvider
+android.icu.impl.CurrencyData$CurrencySpacingInfo
+android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingPattern
+android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingType
+android.icu.impl.ICUBinary
+android.icu.impl.ICUBinary$Authenticate
+android.icu.impl.ICUBinary$DatPackageReader
+android.icu.impl.ICUBinary$DatPackageReader$IsAcceptable
+android.icu.impl.ICUBinary$DataFile
+android.icu.impl.ICUBinary$PackageDataFile
+android.icu.impl.ICUCache
+android.icu.impl.ICUConfig
+android.icu.impl.ICUCurrencyDisplayInfoProvider
+android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo
+android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$SpacingInfoSink
+android.icu.impl.ICUCurrencyMetaInfo
+android.icu.impl.ICUCurrencyMetaInfo$Collector
+android.icu.impl.ICUCurrencyMetaInfo$CurrencyCollector
+android.icu.impl.ICUCurrencyMetaInfo$UniqueList
+android.icu.impl.ICUData
+android.icu.impl.ICUDebug
+android.icu.impl.ICULocaleService
+android.icu.impl.ICULocaleService$ICUResourceBundleFactory
+android.icu.impl.ICULocaleService$LocaleKey
+android.icu.impl.ICULocaleService$LocaleKeyFactory
+android.icu.impl.ICUNotifier
+android.icu.impl.ICURWLock
+android.icu.impl.ICUResourceBundle
+android.icu.impl.ICUResourceBundle$1
+android.icu.impl.ICUResourceBundle$2
+android.icu.impl.ICUResourceBundle$3
+android.icu.impl.ICUResourceBundle$3$1
+android.icu.impl.ICUResourceBundle$4
+android.icu.impl.ICUResourceBundle$AvailEntry
+android.icu.impl.ICUResourceBundle$Loader
+android.icu.impl.ICUResourceBundle$OpenType
+android.icu.impl.ICUResourceBundle$WholeBundle
+android.icu.impl.ICUResourceBundleImpl
+android.icu.impl.ICUResourceBundleImpl$ResourceArray
+android.icu.impl.ICUResourceBundleImpl$ResourceBinary
+android.icu.impl.ICUResourceBundleImpl$ResourceContainer
+android.icu.impl.ICUResourceBundleImpl$ResourceInt
+android.icu.impl.ICUResourceBundleImpl$ResourceIntVector
+android.icu.impl.ICUResourceBundleImpl$ResourceString
+android.icu.impl.ICUResourceBundleImpl$ResourceTable
+android.icu.impl.ICUResourceBundleReader
+android.icu.impl.ICUResourceBundleReader$Array
+android.icu.impl.ICUResourceBundleReader$Array16
+android.icu.impl.ICUResourceBundleReader$Array32
+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
+android.icu.impl.ICUResourceBundleReader$ResourceCache$Level
+android.icu.impl.ICUResourceBundleReader$Table
+android.icu.impl.ICUResourceBundleReader$Table16
+android.icu.impl.ICUResourceBundleReader$Table1632
+android.icu.impl.ICUService
+android.icu.impl.ICUService$CacheEntry
+android.icu.impl.ICUService$Factory
+android.icu.impl.ICUService$Key
+android.icu.impl.IDNA2003
+android.icu.impl.LocaleIDParser
+android.icu.impl.LocaleIDs
+android.icu.impl.Norm2AllModes
+android.icu.impl.Norm2AllModes$1
+android.icu.impl.Norm2AllModes$ComposeNormalizer2
+android.icu.impl.Norm2AllModes$DecomposeNormalizer2
+android.icu.impl.Norm2AllModes$FCDNormalizer2
+android.icu.impl.Norm2AllModes$NFKCSingleton
+android.icu.impl.Norm2AllModes$NoopNormalizer2
+android.icu.impl.Norm2AllModes$Norm2AllModesSingleton
+android.icu.impl.Norm2AllModes$Normalizer2WithImpl
+android.icu.impl.Normalizer2Impl
+android.icu.impl.Normalizer2Impl$1
+android.icu.impl.Normalizer2Impl$IsAcceptable
+android.icu.impl.Pair
+android.icu.impl.PatternProps
+android.icu.impl.ReplaceableUCharacterIterator
+android.icu.impl.RuleCharacterIterator
+android.icu.impl.SimpleCache
+android.icu.impl.SoftCache
+android.icu.impl.TextTrieMap
+android.icu.impl.TextTrieMap$Node
+android.icu.impl.TimeZoneNamesFactoryImpl
+android.icu.impl.TimeZoneNamesImpl$MZ2TZsCache
+android.icu.impl.TimeZoneNamesImpl$MZMapEntry
+android.icu.impl.TimeZoneNamesImpl$TZ2MZsCache
+android.icu.impl.Trie
+android.icu.impl.Trie$DataManipulate
+android.icu.impl.Trie$DefaultGetFoldingOffset
+android.icu.impl.Trie2
+android.icu.impl.Trie2$1
+android.icu.impl.Trie2$Range
+android.icu.impl.Trie2$Trie2Iterator
+android.icu.impl.Trie2$UTrie2Header
+android.icu.impl.Trie2$ValueMapper
+android.icu.impl.Trie2$ValueWidth
+android.icu.impl.Trie2_16
+android.icu.impl.Trie2_32
+android.icu.impl.UBiDiProps$IsAcceptable
+android.icu.impl.UCaseProps
+android.icu.impl.UCaseProps$ContextIterator
+android.icu.impl.UCaseProps$IsAcceptable
+android.icu.impl.UCharacterProperty
+android.icu.impl.UCharacterProperty$1
+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$2
+android.icu.impl.UCharacterProperty$20
+android.icu.impl.UCharacterProperty$21
+android.icu.impl.UCharacterProperty$22
+android.icu.impl.UCharacterProperty$23
+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.UPropertyAliases$IsAcceptable
+android.icu.impl.URLHandler$URLVisitor
+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.USerializedSet
+android.icu.impl.Utility
+android.icu.impl.ZoneMeta$SystemTimeZoneCache
+android.icu.impl.coll.CollationDataReader$IsAcceptable
+android.icu.impl.coll.CollationRoot
+android.icu.impl.coll.SharedObject
+android.icu.impl.coll.SharedObject$Reference
+android.icu.impl.locale.AsciiUtil
+android.icu.impl.locale.BaseLocale
+android.icu.impl.locale.BaseLocale$Cache
+android.icu.impl.locale.BaseLocale$Key
+android.icu.impl.locale.LocaleObjectCache
+android.icu.impl.locale.LocaleObjectCache$CacheEntry
+android.icu.impl.locale.LocaleSyntaxException
+android.icu.impl.number.Parse
+android.icu.lang.UCharacter
+android.icu.lang.UCharacterEnums$ECharacterCategory
+android.icu.lang.UCharacterEnums$ECharacterDirection
+android.icu.math.MathContext
+android.icu.text.BreakIterator$BreakIteratorCache
+android.icu.text.BreakIterator$BreakIteratorServiceShim
+android.icu.text.BreakIteratorFactory$BFService
+android.icu.text.BreakIteratorFactory$BFService$1RBBreakIteratorFactory
+android.icu.text.CaseMap
+android.icu.text.CaseMap$Upper
+android.icu.text.Collator$ServiceShim
+android.icu.text.CollatorServiceShim$CService
+android.icu.text.CollatorServiceShim$CService$1CollatorFactory
+android.icu.text.CurrencyDisplayNames
+android.icu.text.CurrencyMetaInfo
+android.icu.text.CurrencyMetaInfo$CurrencyDigits
+android.icu.text.CurrencyMetaInfo$CurrencyFilter
+android.icu.text.DateFormatSymbols$1
+android.icu.text.DateTimePatternGenerator$AppendItemNamesSink
+android.icu.text.DateTimePatternGenerator$AvailableFormatsSink
+android.icu.text.DateTimePatternGenerator$DateTimeMatcher
+android.icu.text.DateTimePatternGenerator$DayPeriodAllowedHoursSink
+android.icu.text.DateTimePatternGenerator$DistanceInfo
+android.icu.text.DateTimePatternGenerator$PatternInfo
+android.icu.text.DateTimePatternGenerator$PatternWithMatcher
+android.icu.text.DateTimePatternGenerator$PatternWithSkeletonFlag
+android.icu.text.DateTimePatternGenerator$VariableField
+android.icu.text.DecimalFormat
+android.icu.text.DecimalFormat$Unit
+android.icu.text.DecimalFormatSymbols
+android.icu.text.DecimalFormatSymbols$1
+android.icu.text.DecimalFormatSymbols$CacheData
+android.icu.text.DecimalFormatSymbols$DecFmtDataSink
+android.icu.text.DigitList
+android.icu.text.DisplayContext
+android.icu.text.DisplayContext$Type
+android.icu.text.Edits
+android.icu.text.IDNA
+android.icu.text.LanguageBreakEngine
+android.icu.text.Normalizer
+android.icu.text.Normalizer$FCDMode
+android.icu.text.Normalizer$Mode
+android.icu.text.Normalizer$ModeImpl
+android.icu.text.Normalizer$NFCMode
+android.icu.text.Normalizer$NFDMode
+android.icu.text.Normalizer$NFKCMode
+android.icu.text.Normalizer$NFKDMode
+android.icu.text.Normalizer$NFKDModeImpl
+android.icu.text.Normalizer$NONEMode
+android.icu.text.Normalizer$QuickCheckResult
+android.icu.text.Normalizer2
+android.icu.text.NumberFormat
+android.icu.text.NumberFormat$Field
+android.icu.text.NumberFormat$NumberFormatShim
+android.icu.text.NumberFormatServiceShim$NFService
+android.icu.text.NumberFormatServiceShim$NFService$1RBNumberFormatFactory
+android.icu.text.NumberingSystem
+android.icu.text.NumberingSystem$1
+android.icu.text.NumberingSystem$2
+android.icu.text.NumberingSystem$LocaleLookupData
+android.icu.text.PluralRanges
+android.icu.text.PluralRanges$Matrix
+android.icu.text.PluralRules$1
+android.icu.text.PluralRules$AndConstraint
+android.icu.text.PluralRules$BinaryConstraint
+android.icu.text.PluralRules$Constraint
+android.icu.text.PluralRules$Factory
+android.icu.text.PluralRules$FixedDecimal
+android.icu.text.PluralRules$FixedDecimalRange
+android.icu.text.PluralRules$FixedDecimalSamples
+android.icu.text.PluralRules$RangeConstraint
+android.icu.text.PluralRules$Rule
+android.icu.text.PluralRules$RuleList
+android.icu.text.RBBIDataWrapper$IsAcceptable
+android.icu.text.RBBIDataWrapper$RBBIDataHeader
+android.icu.text.RBBIDataWrapper$TrieFoldingFunc
+android.icu.text.Replaceable
+android.icu.text.ReplaceableString
+android.icu.text.SimpleDateFormat$PatternItem
+android.icu.text.TimeZoneNames$Cache
+android.icu.text.TimeZoneNames$Factory
+android.icu.text.TimeZoneNames$NameType
+android.icu.text.UCharacterIterator
+android.icu.text.UFieldPosition
+android.icu.text.UFormat
+android.icu.text.UForwardCharacterIterator
+android.icu.text.UTF16
+android.icu.text.UnhandledBreakEngine
+android.icu.text.UnicodeFilter
+android.icu.text.UnicodeMatcher
+android.icu.text.UnicodeSet
+android.icu.text.UnicodeSet$GeneralCategoryMaskFilter
+android.icu.text.UnicodeSet$IntPropertyFilter
+android.icu.util.BasicTimeZone
+android.icu.util.Calendar$FormatConfiguration
+android.icu.util.Calendar$PatternData
+android.icu.util.Calendar$WeekData
+android.icu.util.Calendar$WeekDataCache
+android.icu.util.Currency
+android.icu.util.Currency$1
+android.icu.util.Currency$CurrencyUsage
+android.icu.util.Currency$EquivalenceRelation
+android.icu.util.Freezable
+android.icu.util.MeasureUnit
+android.icu.util.MeasureUnit$1
+android.icu.util.MeasureUnit$2
+android.icu.util.MeasureUnit$3
+android.icu.util.MeasureUnit$Factory
+android.icu.util.Output
+android.icu.util.TimeUnit
+android.icu.util.TimeZone
+android.icu.util.TimeZone$ConstantZone
+android.icu.util.ULocale
+android.icu.util.ULocale$1
+android.icu.util.ULocale$2
+android.icu.util.ULocale$Category
+android.icu.util.ULocale$JDKLocaleHelper
+android.icu.util.ULocale$Type
+android.icu.util.UResourceBundle
+android.icu.util.UResourceBundle$RootType
+android.icu.util.UResourceBundleIterator
+android.icu.util.UResourceTypeMismatchException
+android.icu.util.VersionInfo
+android.location.BatchedLocationCallbackTransport
+android.location.BatchedLocationCallbackTransport$CallbackTransport
+android.location.Country$1
+android.location.CountryDetector
+android.location.GeocoderParams$1
+android.location.GnssMeasurementCallbackTransport
+android.location.GnssMeasurementCallbackTransport$ListenerTransport
+android.location.GnssNavigationMessageCallbackTransport
+android.location.GnssNavigationMessageCallbackTransport$ListenerTransport
+android.location.IBatchedLocationCallback
+android.location.IBatchedLocationCallback$Stub
+android.location.ICountryDetector
+android.location.ICountryDetector$Stub
+android.location.IGnssMeasurementsListener
+android.location.IGnssMeasurementsListener$Stub
+android.location.IGnssNavigationMessageListener
+android.location.IGnssNavigationMessageListener$Stub
+android.location.IGnssStatusListener
+android.location.IGnssStatusListener$Stub
+android.location.ILocationListener
+android.location.ILocationListener$Stub
+android.location.ILocationManager
+android.location.ILocationManager$Stub
+android.location.ILocationManager$Stub$Proxy
+android.location.LocalListenerHelper
+android.location.Location
+android.location.Location$1
+android.location.Location$2
+android.location.Location$BearingDistanceCache
+android.location.LocationManager
+android.location.LocationManager$ListenerTransport
+android.location.LocationRequest$1
+android.media.AudioAttributes
+android.media.AudioAttributes$1
+android.media.AudioAttributes$Builder
+android.media.AudioDevicePort
+android.media.AudioDevicePortConfig
+android.media.AudioFocusRequest$Builder
+android.media.AudioFormat
+android.media.AudioFormat$1
+android.media.AudioFormat$Builder
+android.media.AudioGain
+android.media.AudioGainConfig
+android.media.AudioHandle
+android.media.AudioManager
+android.media.AudioManager$1
+android.media.AudioManager$2
+android.media.AudioManager$3
+android.media.AudioManager$FocusRequestInfo
+android.media.AudioManager$OnAudioFocusChangeListener
+android.media.AudioManager$ServiceEventHandlerDelegate
+android.media.AudioManager$ServiceEventHandlerDelegate$1
+android.media.AudioMixPort
+android.media.AudioMixPortConfig
+android.media.AudioPatch
+android.media.AudioPort
+android.media.AudioPortConfig
+android.media.AudioPortEventHandler
+android.media.AudioRecord
+android.media.AudioRoutesInfo$1
+android.media.AudioRouting
+android.media.AudioSystem
+android.media.AudioTimestamp
+android.media.AudioTrack
+android.media.BufferingParams$1
+android.media.IAudioFocusDispatcher
+android.media.IAudioFocusDispatcher$Stub
+android.media.IAudioRoutesObserver
+android.media.IAudioRoutesObserver$Stub
+android.media.IAudioService
+android.media.IAudioService$Stub
+android.media.IAudioService$Stub$Proxy
+android.media.IMediaHTTPConnection
+android.media.IMediaHTTPConnection$Stub
+android.media.IMediaRouterClient
+android.media.IMediaRouterClient$Stub
+android.media.IMediaRouterService
+android.media.IMediaRouterService$Stub
+android.media.IMediaRouterService$Stub$Proxy
+android.media.IPlaybackConfigDispatcher
+android.media.IPlaybackConfigDispatcher$Stub
+android.media.IPlayer
+android.media.IPlayer$Stub
+android.media.IRecordingConfigDispatcher
+android.media.IRecordingConfigDispatcher$Stub
+android.media.IRemoteVolumeObserver
+android.media.IRemoteVolumeObserver$Stub
+android.media.IRingtonePlayer
+android.media.IRingtonePlayer$Stub
+android.media.IRingtonePlayer$Stub$Proxy
+android.media.Image
+android.media.ImageReader
+android.media.JetPlayer
+android.media.MediaCodec$BufferInfo
+android.media.MediaCodec$BufferMap
+android.media.MediaCodec$CryptoInfo
+android.media.MediaCodec$CryptoInfo$Pattern
+android.media.MediaCodec$EventHandler
+android.media.MediaCodecInfo$AudioCapabilities
+android.media.MediaCodecInfo$CodecProfileLevel
+android.media.MediaCodecInfo$Feature
+android.media.MediaCodecInfo$VideoCapabilities
+android.media.MediaCodecList
+android.media.MediaFormat
+android.media.MediaMetadata$1
+android.media.MediaMetadata$Builder
+android.media.MediaPlayer
+android.media.MediaPlayer$1
+android.media.MediaPlayer$2
+android.media.MediaPlayer$EventHandler
+android.media.MediaPlayer$OnCompletionListener
+android.media.MediaPlayer$OnSeekCompleteListener
+android.media.MediaPlayer$OnSubtitleDataListener
+android.media.MediaPlayer$TimeProvider
+android.media.MediaPlayer$TimeProvider$EventHandler
+android.media.MediaRouter
+android.media.MediaRouter$Callback
+android.media.MediaRouter$CallbackInfo
+android.media.MediaRouter$RouteCategory
+android.media.MediaRouter$RouteInfo
+android.media.MediaRouter$RouteInfo$1
+android.media.MediaRouter$Static
+android.media.MediaRouter$Static$1
+android.media.MediaRouter$Static$1$1
+android.media.MediaRouter$Static$Client
+android.media.MediaRouter$VolumeCallback
+android.media.MediaRouter$VolumeChangeReceiver
+android.media.MediaRouter$WifiDisplayStatusChangedReceiver
+android.media.MediaTimeProvider
+android.media.PlaybackParams
+android.media.PlaybackParams$1
+android.media.PlayerBase
+android.media.PlayerBase$IAppOpsCallbackWrapper
+android.media.PlayerBase$IPlayerWrapper
+android.media.PlayerBase$PlayerIdCard$1
+android.media.RemoteDisplay
+android.media.Ringtone$MyOnCompletionListener
+android.media.SoundPool
+android.media.SubtitleController$Listener
+android.media.ToneGenerator
+android.media.Utils
+android.media.Utils$1
+android.media.Utils$2
+android.media.VolumeAutomation
+android.media.VolumeShaper$Configuration
+android.media.VolumeShaper$Configuration$1
+android.media.VolumeShaper$Configuration$Builder
+android.media.VolumeShaper$Operation
+android.media.VolumeShaper$Operation$1
+android.media.VolumeShaper$Operation$Builder
+android.media.VolumeShaper$State
+android.media.VolumeShaper$State$1
+android.media.audiopolicy.AudioMix
+android.media.audiopolicy.AudioMixingRule
+android.media.audiopolicy.AudioMixingRule$AudioMixMatchCriterion
+android.media.midi.MidiManager
+android.media.projection.MediaProjectionManager
+android.media.session.IActiveSessionsListener
+android.media.session.IActiveSessionsListener$Stub
+android.media.session.ISession
+android.media.session.ISession$Stub
+android.media.session.ISessionCallback
+android.media.session.ISessionCallback$Stub
+android.media.session.ISessionController
+android.media.session.ISessionController$Stub
+android.media.session.ISessionController$Stub$Proxy
+android.media.session.ISessionControllerCallback
+android.media.session.ISessionControllerCallback$Stub
+android.media.session.ISessionManager
+android.media.session.ISessionManager$Stub
+android.media.session.ISessionManager$Stub$Proxy
+android.media.session.MediaController
+android.media.session.MediaController$CallbackStub
+android.media.session.MediaController$TransportControls
+android.media.session.MediaSession
+android.media.session.MediaSession$Callback
+android.media.session.MediaSession$CallbackMessageHandler
+android.media.session.MediaSession$CallbackStub
+android.media.session.MediaSession$Token$1
+android.media.session.MediaSessionManager
+android.media.session.PlaybackState$1
+android.media.session.PlaybackState$Builder
+android.media.session.PlaybackState$CustomAction$1
+android.media.soundtrigger.SoundTriggerManager
+android.media.tv.TvInputManager
+android.metrics.LogMaker
+android.mtp.MtpDeviceInfo
+android.mtp.MtpEvent
+android.mtp.MtpObjectInfo
+android.mtp.MtpPropertyList
+android.mtp.MtpStorage
+android.mtp.MtpStorageInfo
+android.net.ConnectivityManager
+android.net.ConnectivityManager$CallbackHandler
+android.net.ConnectivityManager$NetworkCallback
+android.net.ConnectivityThread
+android.net.Credentials
+android.net.EthernetManager
+android.net.IConnectivityManager
+android.net.IConnectivityManager$Stub
+android.net.IConnectivityManager$Stub$Proxy
+android.net.INetworkPolicyManager
+android.net.INetworkPolicyManager$Stub
+android.net.INetworkPolicyManager$Stub$Proxy
+android.net.INetworkScoreService
+android.net.INetworkScoreService$Stub
+android.net.INetworkStatsService
+android.net.INetworkStatsService$Stub
+android.net.INetworkStatsService$Stub$Proxy
+android.net.IpPrefix
+android.net.IpPrefix$1
+android.net.IpSecManager
+android.net.LinkAddress
+android.net.LinkAddress$1
+android.net.LinkProperties
+android.net.LinkProperties$1
+android.net.LocalServerSocket
+android.net.LocalSocket
+android.net.LocalSocketAddress
+android.net.LocalSocketImpl
+android.net.LocalSocketImpl$SocketInputStream
+android.net.LocalSocketImpl$SocketOutputStream
+android.net.Network
+android.net.Network$1
+android.net.NetworkCapabilities
+android.net.NetworkCapabilities$1
+android.net.NetworkFactory
+android.net.NetworkInfo
+android.net.NetworkInfo$1
+android.net.NetworkInfo$DetailedState
+android.net.NetworkInfo$State
+android.net.NetworkPolicyManager
+android.net.NetworkRequest
+android.net.NetworkRequest$1
+android.net.NetworkRequest$Builder
+android.net.NetworkRequest$Type
+android.net.NetworkScoreManager
+android.net.NetworkSpecifier
+android.net.NetworkStats
+android.net.NetworkStats$1
+android.net.NetworkUtils
+android.net.Proxy
+android.net.ProxyInfo$1
+android.net.RouteInfo
+android.net.RouteInfo$1
+android.net.SSLCertificateSocketFactory$1
+android.net.SSLSessionCache
+android.net.TrafficStats
+android.net.Uri
+android.net.Uri$1
+android.net.Uri$AbstractHierarchicalUri
+android.net.Uri$AbstractPart
+android.net.Uri$Builder
+android.net.Uri$HierarchicalUri
+android.net.Uri$OpaqueUri
+android.net.Uri$Part
+android.net.Uri$Part$EmptyPart
+android.net.Uri$PathPart
+android.net.Uri$PathSegments
+android.net.Uri$PathSegmentsBuilder
+android.net.Uri$StringUri
+android.net.http.AndroidHttpClient$1
+android.net.http.X509TrustManagerExtensions
+android.net.lowpan.LowpanManager
+android.net.nsd.NsdManager
+android.net.wifi.IWifiManager
+android.net.wifi.IWifiManager$Stub
+android.net.wifi.IWifiManager$Stub$Proxy
+android.net.wifi.RttManager
+android.net.wifi.ScanResult$1
+android.net.wifi.ScanResult$InformationElement
+android.net.wifi.SupplicantState
+android.net.wifi.SupplicantState$1
+android.net.wifi.WifiInfo
+android.net.wifi.WifiInfo$1
+android.net.wifi.WifiManager
+android.net.wifi.WifiManager$WifiLock
+android.net.wifi.WifiScanner
+android.net.wifi.WifiSsid
+android.net.wifi.WifiSsid$1
+android.net.wifi.aware.WifiAwareManager
+android.net.wifi.p2p.WifiP2pManager
+android.nfc.IAppCallback
+android.nfc.IAppCallback$Stub
+android.nfc.INfcAdapter
+android.nfc.INfcAdapter$Stub
+android.nfc.INfcAdapter$Stub$Proxy
+android.nfc.INfcCardEmulation
+android.nfc.INfcCardEmulation$Stub
+android.nfc.INfcCardEmulation$Stub$Proxy
+android.nfc.INfcFCardEmulation
+android.nfc.INfcFCardEmulation$Stub
+android.nfc.INfcFCardEmulation$Stub$Proxy
+android.nfc.INfcTag
+android.nfc.INfcTag$Stub
+android.nfc.INfcTag$Stub$Proxy
+android.nfc.NfcActivityManager$NfcActivityState
+android.nfc.NfcActivityManager$NfcApplicationState
+android.nfc.NfcAdapter$1
+android.nfc.NfcAdapter$CreateNdefMessageCallback
+android.nfc.NfcManager
+android.opengl.EGL14
+android.opengl.EGLConfig
+android.opengl.EGLContext
+android.opengl.EGLDisplay
+android.opengl.EGLExt
+android.opengl.EGLObjectHandle
+android.opengl.EGLSurface
+android.opengl.ETC1
+android.opengl.GLES10
+android.opengl.GLES10Ext
+android.opengl.GLES11
+android.opengl.GLES11Ext
+android.opengl.GLES20
+android.opengl.GLES30
+android.opengl.GLES31
+android.opengl.GLES31Ext
+android.opengl.GLES32
+android.opengl.GLUtils
+android.opengl.Matrix
+android.opengl.Visibility
+android.os.-$Lambda$BcGBlsGjMZMF6Ej78rWJ608MYSM
+android.os.AsyncResult
+android.os.AsyncTask
+android.os.AsyncTask$1
+android.os.AsyncTask$2
+android.os.AsyncTask$3
+android.os.AsyncTask$AsyncTaskResult
+android.os.AsyncTask$InternalHandler
+android.os.AsyncTask$SerialExecutor
+android.os.AsyncTask$SerialExecutor$1
+android.os.AsyncTask$Status
+android.os.AsyncTask$WorkerRunnable
+android.os.BadParcelableException
+android.os.BaseBundle
+android.os.BaseBundle$NoImagePreloadHolder
+android.os.BatteryManager
+android.os.BatteryStats$BitDescription
+android.os.BatteryStats$ControllerActivityCounter
+android.os.BatteryStats$Counter
+android.os.BatteryStats$HistoryEventTracker
+android.os.BatteryStats$HistoryItem
+android.os.BatteryStats$HistoryStepDetails
+android.os.BatteryStats$HistoryTag
+android.os.BatteryStats$IntToString
+android.os.BatteryStats$LevelStepTracker
+android.os.BatteryStats$LongCounter
+android.os.BatteryStats$LongCounterArray
+android.os.BatteryStats$Timer
+android.os.BatteryStats$Uid$Pkg
+android.os.BatteryStats$Uid$Pkg$Serv
+android.os.BatteryStats$Uid$Proc
+android.os.BatteryStats$Uid$Sensor
+android.os.BatteryStats$Uid$Wakelock
+android.os.Binder
+android.os.BinderProxy
+android.os.Build
+android.os.Build$VERSION
+android.os.Bundle
+android.os.Bundle$1
+android.os.CancellationSignal
+android.os.CancellationSignal$OnCancelListener
+android.os.CancellationSignal$Transport
+android.os.ConditionVariable
+android.os.DeadObjectException
+android.os.DeadSystemException
+android.os.Debug
+android.os.Debug$MemoryInfo
+android.os.Debug$MemoryInfo$1
+android.os.DropBoxManager
+android.os.Environment
+android.os.Environment$UserEnvironment
+android.os.FactoryTest
+android.os.FileObserver$ObserverThread
+android.os.FileUtils
+android.os.GraphicsEnvironment
+android.os.Handler
+android.os.Handler$Callback
+android.os.Handler$MessengerImpl
+android.os.HandlerThread
+android.os.HardwarePropertiesManager
+android.os.HwBinder
+android.os.HwBlob
+android.os.HwParcel
+android.os.HwRemoteBinder
+android.os.IBatteryPropertiesRegistrar
+android.os.IBatteryPropertiesRegistrar$Stub
+android.os.IBatteryPropertiesRegistrar$Stub$Proxy
+android.os.IBinder
+android.os.IBinder$DeathRecipient
+android.os.ICancellationSignal
+android.os.ICancellationSignal$Stub
+android.os.ICancellationSignal$Stub$Proxy
+android.os.IDeviceIdleController
+android.os.IDeviceIdleController$Stub
+android.os.IHardwarePropertiesManager
+android.os.IHardwarePropertiesManager$Stub
+android.os.IHwBinder
+android.os.IHwBinder$DeathRecipient
+android.os.IHwInterface
+android.os.IInterface
+android.os.IMessenger
+android.os.IMessenger$Stub
+android.os.IMessenger$Stub$Proxy
+android.os.INetworkManagementService
+android.os.INetworkManagementService$Stub
+android.os.INetworkManagementService$Stub$Proxy
+android.os.IPowerManager
+android.os.IPowerManager$Stub
+android.os.IPowerManager$Stub$Proxy
+android.os.IServiceManager
+android.os.IUserManager
+android.os.IUserManager$Stub
+android.os.IUserManager$Stub$Proxy
+android.os.IVibratorService
+android.os.IVibratorService$Stub
+android.os.IVibratorService$Stub$Proxy
+android.os.IncidentManager
+android.os.LocaleList
+android.os.LocaleList$1
+android.os.Looper
+android.os.MemoryFile
+android.os.Message
+android.os.Message$1
+android.os.MessageQueue
+android.os.MessageQueue$IdleHandler
+android.os.Messenger
+android.os.Messenger$1
+android.os.OperationCanceledException
+android.os.Parcel
+android.os.Parcel$1
+android.os.Parcel$2
+android.os.Parcel$ReadWriteHelper
+android.os.ParcelFileDescriptor
+android.os.ParcelFileDescriptor$1
+android.os.ParcelFileDescriptor$AutoCloseInputStream
+android.os.ParcelUuid$1
+android.os.Parcelable
+android.os.Parcelable$ClassLoaderCreator
+android.os.Parcelable$Creator
+android.os.ParcelableException
+android.os.ParcelableParcel$1
+android.os.PatternMatcher
+android.os.PatternMatcher$1
+android.os.PersistableBundle
+android.os.PersistableBundle$1
+android.os.PooledStringWriter
+android.os.PowerManager
+android.os.PowerManager$WakeLock
+android.os.PowerManager$WakeLock$1
+android.os.Process
+android.os.RecoverySystem
+android.os.Registrant
+android.os.RemoteCallbackList
+android.os.RemoteCallbackList$Callback
+android.os.RemoteException
+android.os.ResultReceiver
+android.os.ResultReceiver$1
+android.os.SELinux
+android.os.Seccomp
+android.os.ServiceManager
+android.os.ServiceManager$ServiceNotFoundException
+android.os.ServiceManagerNative
+android.os.ServiceManagerProxy
+android.os.ServiceSpecificException
+android.os.SharedMemory
+android.os.ShellCallback
+android.os.StatFs
+android.os.StrictMode
+android.os.StrictMode$1
+android.os.StrictMode$2
+android.os.StrictMode$3
+android.os.StrictMode$4
+android.os.StrictMode$5
+android.os.StrictMode$6
+android.os.StrictMode$7
+android.os.StrictMode$8
+android.os.StrictMode$9
+android.os.StrictMode$AndroidBlockGuardPolicy
+android.os.StrictMode$AndroidBlockGuardPolicy$1
+android.os.StrictMode$AndroidCloseGuardReporter
+android.os.StrictMode$InstanceCountViolation
+android.os.StrictMode$InstanceTracker
+android.os.StrictMode$LogStackTrace
+android.os.StrictMode$Span
+android.os.StrictMode$StrictModeDiskReadViolation
+android.os.StrictMode$StrictModeDiskWriteViolation
+android.os.StrictMode$StrictModeViolation
+android.os.StrictMode$ThreadPolicy
+android.os.StrictMode$ThreadPolicy$Builder
+android.os.StrictMode$ThreadSpanState
+android.os.StrictMode$ViolationInfo
+android.os.StrictMode$ViolationInfo$1
+android.os.StrictMode$VmPolicy
+android.os.StrictMode$VmPolicy$Builder
+android.os.SystemClock
+android.os.SystemProperties
+android.os.SystemVibrator
+android.os.Trace
+android.os.UEventObserver
+android.os.UserHandle
+android.os.UserHandle$1
+android.os.UserManager
+android.os.Vibrator
+android.os.VintfObject
+android.os.VintfRuntimeInfo
+android.os.WorkSource$1
+android.os.ZygoteProcess
+android.os.ZygoteStartFailedEx
+android.os.health.SystemHealthManager
+android.os.storage.IObbActionListener
+android.os.storage.IObbActionListener$Stub
+android.os.storage.IStorageManager
+android.os.storage.IStorageManager$Stub
+android.os.storage.IStorageManager$Stub$Proxy
+android.os.storage.StorageManager
+android.os.storage.StorageManager$ObbActionListener
+android.os.storage.StorageVolume
+android.os.storage.StorageVolume$1
+android.os.storage.VolumeInfo$1
+android.os.storage.VolumeInfo$2
+android.preference.PreferenceManager
+android.preference.PreferenceManager$OnPreferenceTreeClickListener
+android.print.PrintManager
+android.provider.-$Lambda$a7Jyr6j_Mb70hHJ2ssL1AAhKh4c
+android.provider.-$Lambda$asz6VwQ86PPY-v8JLMb7rx-pSqg
+android.provider.BaseColumns
+android.provider.ContactsContract$CommonDataKinds$BaseTypes
+android.provider.ContactsContract$CommonDataKinds$CommonColumns
+android.provider.ContactsContract$ContactCounts
+android.provider.ContactsContract$ContactNameColumns
+android.provider.ContactsContract$ContactOptionsColumns
+android.provider.ContactsContract$ContactStatusColumns
+android.provider.ContactsContract$ContactsColumns
+android.provider.ContactsContract$DataColumns
+android.provider.ContactsContract$DataColumnsWithJoins
+android.provider.ContactsContract$DataUsageStatColumns
+android.provider.ContactsContract$RawContactsColumns
+android.provider.ContactsContract$StatusColumns
+android.provider.FontsContract
+android.provider.FontsContract$1
+android.provider.MediaStore$MediaColumns
+android.provider.Settings
+android.provider.Settings$ContentProviderHolder
+android.provider.Settings$GenerationTracker
+android.provider.Settings$Global
+android.provider.Settings$NameValueCache
+android.provider.Settings$NameValueTable
+android.provider.Settings$Secure
+android.provider.Settings$SettingNotFoundException
+android.provider.Settings$System
+android.provider.Settings$System$1
+android.provider.Settings$System$2
+android.provider.Settings$System$3
+android.provider.Settings$System$4
+android.provider.Settings$System$5
+android.provider.Settings$System$6
+android.provider.Settings$System$7
+android.provider.Settings$System$8
+android.provider.Settings$System$9
+android.provider.Settings$System$DiscreteValueValidator
+android.provider.Settings$System$InclusiveFloatRangeValidator
+android.provider.Settings$System$InclusiveIntegerRangeValidator
+android.provider.Settings$System$Validator
+android.renderscript.RenderScriptCacheDir
+android.security.IKeystoreService
+android.security.IKeystoreService$Stub
+android.security.IKeystoreService$Stub$Proxy
+android.security.KeyStore
+android.security.keystore.AndroidKeyStoreBCWorkaroundProvider
+android.security.keystore.AndroidKeyStoreProvider
+android.security.net.config.ApplicationConfig
+android.security.net.config.CertificateSource
+android.security.net.config.CertificatesEntryRef
+android.security.net.config.ConfigNetworkSecurityPolicy
+android.security.net.config.ConfigSource
+android.security.net.config.DirectoryCertificateSource
+android.security.net.config.DirectoryCertificateSource$1
+android.security.net.config.DirectoryCertificateSource$3
+android.security.net.config.DirectoryCertificateSource$CertSelector
+android.security.net.config.KeyStoreCertificateSource
+android.security.net.config.KeyStoreConfigSource
+android.security.net.config.ManifestConfigSource
+android.security.net.config.ManifestConfigSource$DefaultConfigSource
+android.security.net.config.NetworkSecurityConfig
+android.security.net.config.NetworkSecurityConfig$1
+android.security.net.config.NetworkSecurityConfig$Builder
+android.security.net.config.NetworkSecurityConfigProvider
+android.security.net.config.NetworkSecurityTrustManager
+android.security.net.config.PinSet
+android.security.net.config.RootTrustManager
+android.security.net.config.RootTrustManagerFactorySpi
+android.security.net.config.SystemCertificateSource
+android.security.net.config.SystemCertificateSource$NoPreloadHolder
+android.security.net.config.TrustedCertificateStoreAdapter
+android.security.net.config.UserCertificateSource
+android.security.net.config.XmlConfigSource
+android.security.net.config.XmlConfigSource$ParserException
+android.service.notification.Condition$1
+android.service.notification.INotificationListener
+android.service.notification.INotificationListener$Stub
+android.service.notification.IStatusBarNotificationHolder
+android.service.notification.IStatusBarNotificationHolder$Stub
+android.service.notification.NotificationListenerService
+android.service.notification.NotificationListenerService$MyHandler
+android.service.notification.NotificationListenerService$NotificationListenerWrapper
+android.service.notification.NotificationListenerService$RankingMap$1
+android.service.notification.NotificationRankingUpdate$1
+android.service.notification.StatusBarNotification$1
+android.service.notification.ZenModeConfig$ZenRule$1
+android.service.oemlock.OemLockManager
+android.service.persistentdata.PersistentDataBlockManager
+android.service.vr.IVrManager
+android.service.vr.IVrManager$Stub
+android.service.vr.IVrStateCallbacks
+android.service.vr.IVrStateCallbacks$Stub
+android.system.ErrnoException
+android.system.GaiException
+android.system.NetlinkSocketAddress
+android.system.Os
+android.system.OsConstants
+android.system.PacketSocketAddress
+android.system.StructAddrinfo
+android.system.StructFlock
+android.system.StructGroupReq
+android.system.StructGroupSourceReq
+android.system.StructIfaddrs
+android.system.StructLinger
+android.system.StructPasswd
+android.system.StructPollfd
+android.system.StructStat
+android.system.StructStatVfs
+android.system.StructTimespec
+android.system.StructTimeval
+android.system.StructUcred
+android.system.StructUtsname
+android.system.UnixSocketAddress
+android.telecom.DisconnectCause$1
+android.telecom.Log$1
+android.telecom.PhoneAccount$1
+android.telecom.PhoneAccountHandle$1
+android.telecom.TelecomManager
+android.telephony.CarrierConfigManager
+android.telephony.CellIdentityLte$1
+android.telephony.CellInfo$1
+android.telephony.CellInfoLte$1
+android.telephony.CellSignalStrengthLte$1
+android.telephony.PhoneStateListener
+android.telephony.PhoneStateListener$1
+android.telephony.PhoneStateListener$IPhoneStateListenerStub
+android.telephony.Rlog
+android.telephony.ServiceState$1
+android.telephony.SignalStrength$1
+android.telephony.SubscriptionInfo$1
+android.telephony.SubscriptionManager
+android.telephony.SubscriptionManager$OnSubscriptionsChangedListener
+android.telephony.SubscriptionManager$OnSubscriptionsChangedListener$1
+android.telephony.SubscriptionManager$OnSubscriptionsChangedListener$2
+android.telephony.TelephonyManager
+android.telephony.euicc.EuiccManager
+android.text.AndroidBidi
+android.text.AndroidCharacter
+android.text.Annotation
+android.text.BoringLayout
+android.text.BoringLayout$Metrics
+android.text.ClipboardManager
+android.text.DynamicLayout
+android.text.DynamicLayout$ChangeWatcher
+android.text.Editable
+android.text.Editable$Factory
+android.text.FontConfig
+android.text.FontConfig$Alias
+android.text.FontConfig$Family
+android.text.FontConfig$Font
+android.text.GetChars
+android.text.GraphicsOperations
+android.text.Html
+android.text.Html$HtmlParser
+android.text.HtmlToSpannedConverter$Href
+android.text.Hyphenator
+android.text.Hyphenator$HyphenationData
+android.text.InputFilter
+android.text.InputType
+android.text.Layout
+android.text.Layout$Alignment
+android.text.Layout$Directions
+android.text.Layout$Ellipsizer
+android.text.Layout$SpannedEllipsizer
+android.text.MeasuredText
+android.text.NoCopySpan
+android.text.NoCopySpan$Concrete
+android.text.PackedIntVector
+android.text.PackedObjectVector
+android.text.ParcelableSpan
+android.text.Selection
+android.text.Selection$END
+android.text.Selection$START
+android.text.SpanSet
+android.text.SpanWatcher
+android.text.Spannable
+android.text.Spannable$Factory
+android.text.SpannableString
+android.text.SpannableStringBuilder
+android.text.SpannableStringInternal
+android.text.Spanned
+android.text.SpannedString
+android.text.StaticLayout
+android.text.StaticLayout$Builder
+android.text.StaticLayout$LineBreaks
+android.text.TextDirectionHeuristic
+android.text.TextDirectionHeuristics
+android.text.TextDirectionHeuristics$AnyStrong
+android.text.TextDirectionHeuristics$FirstStrong
+android.text.TextDirectionHeuristics$TextDirectionAlgorithm
+android.text.TextDirectionHeuristics$TextDirectionHeuristicImpl
+android.text.TextDirectionHeuristics$TextDirectionHeuristicInternal
+android.text.TextDirectionHeuristics$TextDirectionHeuristicLocale
+android.text.TextLine
+android.text.TextLine$DecorationInfo
+android.text.TextPaint
+android.text.TextUtils
+android.text.TextUtils$1
+android.text.TextUtils$EllipsizeCallback
+android.text.TextUtils$SimpleStringSplitter
+android.text.TextUtils$StringSplitter
+android.text.TextUtils$TruncateAt
+android.text.TextWatcher
+android.text.format.Formatter
+android.text.format.Time$TimeCalculator
+android.text.method.AllCapsTransformationMethod
+android.text.method.ArrowKeyMovementMethod
+android.text.method.BaseKeyListener
+android.text.method.BaseMovementMethod
+android.text.method.KeyListener
+android.text.method.MetaKeyKeyListener
+android.text.method.MovementMethod
+android.text.method.PasswordTransformationMethod
+android.text.method.ReplacementTransformationMethod
+android.text.method.ReplacementTransformationMethod$ReplacementCharSequence
+android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence
+android.text.method.SingleLineTransformationMethod
+android.text.method.TextKeyListener
+android.text.method.TextKeyListener$Capitalize
+android.text.method.TransformationMethod
+android.text.method.TransformationMethod2
+android.text.style.AlignmentSpan
+android.text.style.CharacterStyle
+android.text.style.EasyEditSpan
+android.text.style.ForegroundColorSpan
+android.text.style.LeadingMarginSpan
+android.text.style.LineBackgroundSpan
+android.text.style.LineHeightSpan
+android.text.style.MetricAffectingSpan
+android.text.style.ParagraphStyle
+android.text.style.ReplacementSpan
+android.text.style.SpellCheckSpan
+android.text.style.StyleSpan
+android.text.style.SuggestionSpan
+android.text.style.TabStopSpan
+android.text.style.TextAppearanceSpan
+android.text.style.URLSpan
+android.text.style.UnderlineSpan
+android.text.style.UpdateAppearance
+android.text.style.UpdateLayout
+android.text.style.WrapTogetherSpan
+android.transition.AutoTransition
+android.transition.ChangeBounds
+android.transition.ChangeBounds$1
+android.transition.ChangeBounds$2
+android.transition.ChangeBounds$3
+android.transition.ChangeBounds$4
+android.transition.ChangeBounds$5
+android.transition.ChangeBounds$6
+android.transition.ChangeClipBounds
+android.transition.ChangeImageTransform
+android.transition.ChangeImageTransform$1
+android.transition.ChangeImageTransform$2
+android.transition.ChangeTransform
+android.transition.ChangeTransform$1
+android.transition.ChangeTransform$2
+android.transition.Fade
+android.transition.PathMotion
+android.transition.Scene
+android.transition.Transition
+android.transition.Transition$1
+android.transition.TransitionInflater
+android.transition.TransitionManager
+android.transition.TransitionSet
+android.transition.TransitionValuesMaps
+android.transition.Visibility
+android.util.AndroidException
+android.util.AndroidRuntimeException
+android.util.ArrayMap
+android.util.ArrayMap$1
+android.util.ArraySet
+android.util.ArraySet$1
+android.util.AtomicFile
+android.util.AttributeSet
+android.util.Base64
+android.util.Base64$Coder
+android.util.Base64$Decoder
+android.util.Base64$Encoder
+android.util.ContainerHelpers
+android.util.DebugUtils
+android.util.DisplayMetrics
+android.util.EventLog
+android.util.EventLog$Event
+android.util.FloatProperty
+android.util.IntArray
+android.util.IntProperty
+android.util.Log
+android.util.Log$1
+android.util.Log$ImmediateLogWriter
+android.util.Log$PreloadHolder
+android.util.Log$TerribleFailureHandler
+android.util.LogPrinter
+android.util.LongArray
+android.util.LongSparseArray
+android.util.LongSparseLongArray
+android.util.LruCache
+android.util.MapCollections
+android.util.MapCollections$ArrayIterator
+android.util.MapCollections$EntrySet
+android.util.MapCollections$KeySet
+android.util.MapCollections$MapIterator
+android.util.MapCollections$ValuesCollection
+android.util.MathUtils
+android.util.MemoryIntArray
+android.util.MemoryIntArray$1
+android.util.MergedConfiguration
+android.util.MergedConfiguration$1
+android.util.MutableInt
+android.util.MutableLong
+android.util.Pair
+android.util.PathParser
+android.util.PathParser$PathData
+android.util.Pools$Pool
+android.util.Pools$SimplePool
+android.util.Pools$SynchronizedPool
+android.util.Printer
+android.util.Property
+android.util.Range
+android.util.Rational
+android.util.Singleton
+android.util.Size
+android.util.SizeF
+android.util.Slog
+android.util.SparseArray
+android.util.SparseBooleanArray
+android.util.SparseIntArray
+android.util.SparseLongArray
+android.util.StateSet
+android.util.SuperNotCalledException
+android.util.TimingLogger
+android.util.TimingsTraceLog
+android.util.TypedValue
+android.util.Xml
+android.util.jar.StrictJarFile
+android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk
+android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$1
+android.view.-$Lambda$XmA8Y30pNAdQP9ujRlGx1qfDHH8
+android.view.AbsSavedState
+android.view.AbsSavedState$1
+android.view.AbsSavedState$2
+android.view.AccessibilityInteractionController
+android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher
+android.view.AccessibilityInteractionController$PrivateHandler
+android.view.ActionMode
+android.view.ActionMode$Callback
+android.view.ActionProvider
+android.view.ActionProvider$SubUiVisibilityListener
+android.view.Choreographer
+android.view.Choreographer$1
+android.view.Choreographer$2
+android.view.Choreographer$3
+android.view.Choreographer$CallbackQueue
+android.view.Choreographer$CallbackRecord
+android.view.Choreographer$FrameCallback
+android.view.Choreographer$FrameDisplayEventReceiver
+android.view.Choreographer$FrameHandler
+android.view.ContextMenu
+android.view.ContextMenu$ContextMenuInfo
+android.view.ContextThemeWrapper
+android.view.Display
+android.view.Display$HdrCapabilities
+android.view.Display$HdrCapabilities$1
+android.view.Display$Mode
+android.view.Display$Mode$1
+android.view.DisplayAdjustments
+android.view.DisplayEventReceiver
+android.view.DisplayInfo
+android.view.DisplayInfo$1
+android.view.DisplayListCanvas
+android.view.FallbackEventHandler
+android.view.FocusFinder
+android.view.FocusFinder$1
+android.view.FocusFinder$FocusSorter
+android.view.FocusFinder$UserSpecifiedFocusComparator
+android.view.FocusFinder$UserSpecifiedFocusComparator$NextFocusGetter
+android.view.FrameInfo
+android.view.FrameMetrics
+android.view.FrameMetricsObserver
+android.view.FrameStats
+android.view.GestureDetector
+android.view.GestureDetector$GestureHandler
+android.view.GestureDetector$OnContextClickListener
+android.view.GestureDetector$OnDoubleTapListener
+android.view.GestureDetector$OnGestureListener
+android.view.GestureDetector$SimpleOnGestureListener
+android.view.Gravity
+android.view.HandlerActionQueue
+android.view.HandlerActionQueue$HandlerAction
+android.view.HardwareLayer
+android.view.IGraphicsStats
+android.view.IGraphicsStats$Stub
+android.view.IGraphicsStats$Stub$Proxy
+android.view.IGraphicsStatsCallback
+android.view.IGraphicsStatsCallback$Stub
+android.view.IRotationWatcher
+android.view.IRotationWatcher$Stub
+android.view.IWindow
+android.view.IWindow$Stub
+android.view.IWindowManager
+android.view.IWindowManager$Stub
+android.view.IWindowManager$Stub$Proxy
+android.view.IWindowSession
+android.view.IWindowSession$Stub
+android.view.IWindowSession$Stub$Proxy
+android.view.IWindowSessionCallback
+android.view.IWindowSessionCallback$Stub
+android.view.InflateException
+android.view.InputChannel
+android.view.InputChannel$1
+android.view.InputDevice
+android.view.InputDevice$1
+android.view.InputDevice$MotionRange
+android.view.InputEvent
+android.view.InputEvent$1
+android.view.InputEventConsistencyVerifier
+android.view.InputEventReceiver
+android.view.InputEventSender
+android.view.InputQueue
+android.view.InputQueue$Callback
+android.view.InputQueue$FinishedInputEventCallback
+android.view.KeyCharacterMap
+android.view.KeyCharacterMap$1
+android.view.KeyCharacterMap$FallbackAction
+android.view.KeyEvent
+android.view.KeyEvent$1
+android.view.KeyEvent$Callback
+android.view.KeyEvent$DispatcherState
+android.view.LayoutInflater
+android.view.LayoutInflater$Factory
+android.view.LayoutInflater$Factory2
+android.view.LayoutInflater$FactoryMerger
+android.view.LayoutInflater$Filter
+android.view.Menu
+android.view.MenuInflater
+android.view.MenuInflater$MenuState
+android.view.MenuItem
+android.view.MenuItem$OnActionExpandListener
+android.view.MenuItem$OnMenuItemClickListener
+android.view.MotionEvent
+android.view.MotionEvent$1
+android.view.MotionEvent$PointerCoords
+android.view.MotionEvent$PointerProperties
+android.view.OrientationEventListener
+android.view.OrientationEventListener$SensorEventListenerImpl
+android.view.PointerIcon
+android.view.PointerIcon$1
+android.view.RecordingCanvas
+android.view.RenderNode
+android.view.RenderNode$NoImagePreloadHolder
+android.view.RenderNodeAnimator
+android.view.RenderNodeAnimator$1
+android.view.RenderNodeAnimatorSetHelper
+android.view.ScaleGestureDetector
+android.view.ScaleGestureDetector$1
+android.view.ScaleGestureDetector$OnScaleGestureListener
+android.view.ScaleGestureDetector$SimpleOnScaleGestureListener
+android.view.SearchEvent
+android.view.SubMenu
+android.view.Surface
+android.view.Surface$1
+android.view.Surface$CompatibleCanvas
+android.view.Surface$OutOfResourcesException
+android.view.SurfaceControl
+android.view.SurfaceControl$PhysicalDisplayInfo
+android.view.SurfaceHolder
+android.view.SurfaceHolder$Callback
+android.view.SurfaceHolder$Callback2
+android.view.SurfaceSession
+android.view.SurfaceView
+android.view.SurfaceView$1
+android.view.SurfaceView$2
+android.view.SurfaceView$3
+android.view.SurfaceView$SurfaceControlWithBackground
+android.view.TextureView
+android.view.TextureView$1
+android.view.TextureView$SurfaceTextureListener
+android.view.ThreadedRenderer
+android.view.ThreadedRenderer$DrawCallbacks
+android.view.ThreadedRenderer$ProcessInitializer
+android.view.ThreadedRenderer$ProcessInitializer$1
+android.view.TouchDelegate
+android.view.VelocityTracker
+android.view.VelocityTracker$Estimator
+android.view.View
+android.view.View$1
+android.view.View$10
+android.view.View$11
+android.view.View$12
+android.view.View$2
+android.view.View$3
+android.view.View$4
+android.view.View$5
+android.view.View$6
+android.view.View$7
+android.view.View$8
+android.view.View$9
+android.view.View$AccessibilityDelegate
+android.view.View$AttachInfo
+android.view.View$AttachInfo$Callbacks
+android.view.View$BaseSavedState
+android.view.View$BaseSavedState$1
+android.view.View$CheckForTap
+android.view.View$ForegroundInfo
+android.view.View$ListenerInfo
+android.view.View$MatchLabelForPredicate
+android.view.View$MeasureSpec
+android.view.View$OnApplyWindowInsetsListener
+android.view.View$OnAttachStateChangeListener
+android.view.View$OnClickListener
+android.view.View$OnCreateContextMenuListener
+android.view.View$OnDragListener
+android.view.View$OnFocusChangeListener
+android.view.View$OnHoverListener
+android.view.View$OnKeyListener
+android.view.View$OnLayoutChangeListener
+android.view.View$OnLongClickListener
+android.view.View$OnSystemUiVisibilityChangeListener
+android.view.View$OnTouchListener
+android.view.View$PerformClick
+android.view.View$ScrollabilityCache
+android.view.View$SendViewScrolledAccessibilityEvent
+android.view.View$TooltipInfo
+android.view.View$TransformationInfo
+android.view.View$UnsetPressedState
+android.view.View$VisibilityChangeForAutofillHandler
+android.view.ViewConfiguration
+android.view.ViewDebug$HierarchyHandler
+android.view.ViewGroup
+android.view.ViewGroup$1
+android.view.ViewGroup$2
+android.view.ViewGroup$LayoutParams
+android.view.ViewGroup$MarginLayoutParams
+android.view.ViewGroup$OnHierarchyChangeListener
+android.view.ViewGroup$TouchTarget
+android.view.ViewGroupOverlay
+android.view.ViewManager
+android.view.ViewOutlineProvider
+android.view.ViewOutlineProvider$1
+android.view.ViewOutlineProvider$2
+android.view.ViewOutlineProvider$3
+android.view.ViewOverlay
+android.view.ViewOverlay$OverlayViewGroup
+android.view.ViewParent
+android.view.ViewPropertyAnimator
+android.view.ViewPropertyAnimator$1
+android.view.ViewPropertyAnimator$AnimatorEventListener
+android.view.ViewPropertyAnimator$NameValuesHolder
+android.view.ViewPropertyAnimator$PropertyBundle
+android.view.ViewRootImpl
+android.view.ViewRootImpl$1
+android.view.ViewRootImpl$4
+android.view.ViewRootImpl$AccessibilityInteractionConnection
+android.view.ViewRootImpl$AccessibilityInteractionConnectionManager
+android.view.ViewRootImpl$ActivityConfigCallback
+android.view.ViewRootImpl$AsyncInputStage
+android.view.ViewRootImpl$ConfigChangedCallback
+android.view.ViewRootImpl$ConsumeBatchedInputImmediatelyRunnable
+android.view.ViewRootImpl$ConsumeBatchedInputRunnable
+android.view.ViewRootImpl$EarlyPostImeInputStage
+android.view.ViewRootImpl$HighContrastTextManager
+android.view.ViewRootImpl$ImeInputStage
+android.view.ViewRootImpl$InputStage
+android.view.ViewRootImpl$InvalidateOnAnimationRunnable
+android.view.ViewRootImpl$NativePostImeInputStage
+android.view.ViewRootImpl$NativePreImeInputStage
+android.view.ViewRootImpl$QueuedInputEvent
+android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent
+android.view.ViewRootImpl$SyntheticInputStage
+android.view.ViewRootImpl$SyntheticJoystickHandler
+android.view.ViewRootImpl$SyntheticKeyboardHandler
+android.view.ViewRootImpl$SyntheticTouchNavigationHandler
+android.view.ViewRootImpl$SyntheticTouchNavigationHandler$1
+android.view.ViewRootImpl$SyntheticTrackballHandler
+android.view.ViewRootImpl$SystemUiVisibilityInfo
+android.view.ViewRootImpl$TrackballAxis
+android.view.ViewRootImpl$TraversalRunnable
+android.view.ViewRootImpl$ViewPostImeInputStage
+android.view.ViewRootImpl$ViewPreImeInputStage
+android.view.ViewRootImpl$ViewRootHandler
+android.view.ViewRootImpl$W
+android.view.ViewRootImpl$WindowInputEventReceiver
+android.view.ViewRootImpl$WindowStoppedCallback
+android.view.ViewStructure
+android.view.ViewStub
+android.view.ViewTreeObserver
+android.view.ViewTreeObserver$CopyOnWriteArray
+android.view.ViewTreeObserver$CopyOnWriteArray$Access
+android.view.ViewTreeObserver$InternalInsetsInfo
+android.view.ViewTreeObserver$OnGlobalFocusChangeListener
+android.view.ViewTreeObserver$OnGlobalLayoutListener
+android.view.ViewTreeObserver$OnPreDrawListener
+android.view.ViewTreeObserver$OnScrollChangedListener
+android.view.ViewTreeObserver$OnTouchModeChangeListener
+android.view.Window
+android.view.Window$Callback
+android.view.Window$OnWindowDismissedCallback
+android.view.Window$OnWindowSwipeDismissedCallback
+android.view.Window$WindowControllerCallback
+android.view.WindowAnimationFrameStats
+android.view.WindowAnimationFrameStats$1
+android.view.WindowCallbacks
+android.view.WindowContentFrameStats
+android.view.WindowContentFrameStats$1
+android.view.WindowInsets
+android.view.WindowLeaked
+android.view.WindowManager
+android.view.WindowManager$BadTokenException
+android.view.WindowManager$LayoutParams
+android.view.WindowManager$LayoutParams$1
+android.view.WindowManagerGlobal
+android.view.WindowManagerGlobal$1
+android.view.WindowManagerGlobal$2
+android.view.WindowManagerImpl
+android.view.accessibility.-$Lambda$T3m_l9_RA18vCOcakSWp1lZCy5g$1
+android.view.accessibility.AccessibilityEvent
+android.view.accessibility.AccessibilityEvent$1
+android.view.accessibility.AccessibilityEventSource
+android.view.accessibility.AccessibilityManager
+android.view.accessibility.AccessibilityManager$1
+android.view.accessibility.AccessibilityManager$AccessibilityStateChangeListener
+android.view.accessibility.AccessibilityManager$HighTextContrastChangeListener
+android.view.accessibility.AccessibilityManager$MyCallback
+android.view.accessibility.AccessibilityManager$TouchExplorationStateChangeListener
+android.view.accessibility.AccessibilityNodeInfo
+android.view.accessibility.AccessibilityNodeInfo$1
+android.view.accessibility.AccessibilityNodeProvider
+android.view.accessibility.AccessibilityRecord
+android.view.accessibility.CaptioningManager
+android.view.accessibility.CaptioningManager$1
+android.view.accessibility.CaptioningManager$CaptioningChangeListener
+android.view.accessibility.CaptioningManager$MyContentObserver
+android.view.accessibility.IAccessibilityInteractionConnection
+android.view.accessibility.IAccessibilityInteractionConnection$Stub
+android.view.accessibility.IAccessibilityInteractionConnectionCallback
+android.view.accessibility.IAccessibilityInteractionConnectionCallback$Stub
+android.view.accessibility.IAccessibilityInteractionConnectionCallback$Stub$Proxy
+android.view.accessibility.IAccessibilityManager
+android.view.accessibility.IAccessibilityManager$Stub
+android.view.accessibility.IAccessibilityManager$Stub$Proxy
+android.view.accessibility.IAccessibilityManagerClient
+android.view.accessibility.IAccessibilityManagerClient$Stub
+android.view.animation.AccelerateDecelerateInterpolator
+android.view.animation.AccelerateInterpolator
+android.view.animation.AlphaAnimation
+android.view.animation.Animation
+android.view.animation.Animation$1
+android.view.animation.Animation$2
+android.view.animation.Animation$3
+android.view.animation.Animation$AnimationListener
+android.view.animation.Animation$Description
+android.view.animation.AnimationSet
+android.view.animation.AnimationUtils
+android.view.animation.AnimationUtils$1
+android.view.animation.AnimationUtils$AnimationState
+android.view.animation.BaseInterpolator
+android.view.animation.DecelerateInterpolator
+android.view.animation.Interpolator
+android.view.animation.LayoutAnimationController
+android.view.animation.LinearInterpolator
+android.view.animation.OvershootInterpolator
+android.view.animation.PathInterpolator
+android.view.animation.Transformation
+android.view.animation.TranslateAnimation
+android.view.autofill.AutofillId$1
+android.view.autofill.AutofillManager
+android.view.autofill.AutofillManager$AutofillClient
+android.view.autofill.AutofillManager$AutofillManagerClient
+android.view.autofill.AutofillValue$1
+android.view.autofill.IAutoFillManager
+android.view.autofill.IAutoFillManager$Stub
+android.view.autofill.IAutoFillManager$Stub$Proxy
+android.view.autofill.IAutoFillManagerClient
+android.view.autofill.IAutoFillManagerClient$Stub
+android.view.autofill.IAutofillWindowPresenter
+android.view.inputmethod.BaseInputConnection
+android.view.inputmethod.ComposingText
+android.view.inputmethod.CursorAnchorInfo$Builder
+android.view.inputmethod.EditorInfo
+android.view.inputmethod.EditorInfo$1
+android.view.inputmethod.ExtractedText$1
+android.view.inputmethod.InputConnection
+android.view.inputmethod.InputMethodInfo$1
+android.view.inputmethod.InputMethodManager
+android.view.inputmethod.InputMethodManager$1
+android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper
+android.view.inputmethod.InputMethodManager$FinishedInputEventCallback
+android.view.inputmethod.InputMethodManager$H
+android.view.inputmethod.InputMethodManager$ImeInputEventSender
+android.view.inputmethod.InputMethodManager$PendingEvent
+android.view.inputmethod.InputMethodSubtype$1
+android.view.inputmethod.InputMethodSubtypeArray
+android.view.textclassifier.TextClassificationManager
+android.view.textservice.TextServicesManager
+android.webkit.IWebViewUpdateService
+android.webkit.IWebViewUpdateService$Stub
+android.webkit.IWebViewUpdateService$Stub$Proxy
+android.webkit.WebSyncManager
+android.webkit.WebViewFactory
+android.webkit.WebViewFactory$MissingWebViewPackageException
+android.webkit.WebViewLibraryLoader
+android.webkit.WebViewProviderResponse$1
+android.widget.-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4
+android.widget.-$Lambda$ISuHLqeK-K4pmesAfzlFglc3xF4$1
+android.widget.AbsListView
+android.widget.AbsListView$AdapterDataSetObserver
+android.widget.AbsListView$LayoutParams
+android.widget.AbsListView$OnScrollListener
+android.widget.AbsListView$RecycleBin
+android.widget.AbsListView$SavedState$1
+android.widget.AbsSeekBar
+android.widget.AbsoluteLayout
+android.widget.ActionMenuPresenter
+android.widget.ActionMenuPresenter$1
+android.widget.ActionMenuPresenter$2
+android.widget.ActionMenuPresenter$OverflowMenuButton
+android.widget.ActionMenuPresenter$OverflowMenuButton$1
+android.widget.ActionMenuPresenter$PopupPresenterCallback
+android.widget.ActionMenuView
+android.widget.ActionMenuView$ActionMenuChildView
+android.widget.ActionMenuView$LayoutParams
+android.widget.ActionMenuView$MenuBuilderCallback
+android.widget.ActionMenuView$OnMenuItemClickListener
+android.widget.Adapter
+android.widget.AdapterView
+android.widget.AdapterView$AdapterDataSetObserver
+android.widget.AdapterView$OnItemClickListener
+android.widget.AdapterView$OnItemSelectedListener
+android.widget.ArrayAdapter
+android.widget.AutoCompleteTextView
+android.widget.AutoCompleteTextView$DropDownItemClickListener
+android.widget.AutoCompleteTextView$MyWatcher
+android.widget.AutoCompleteTextView$PassThroughClickListener
+android.widget.BaseAdapter
+android.widget.Button
+android.widget.CheckBox
+android.widget.Checkable
+android.widget.CompoundButton$OnCheckedChangeListener
+android.widget.EdgeEffect
+android.widget.EditText
+android.widget.Editor
+android.widget.Editor$1
+android.widget.Editor$2
+android.widget.Editor$Blink
+android.widget.Editor$CursorAnchorInfoNotifier
+android.widget.Editor$CursorController
+android.widget.Editor$InputContentType
+android.widget.Editor$InputMethodState
+android.widget.Editor$InsertionPointCursorController
+android.widget.Editor$PositionListener
+android.widget.Editor$ProcessTextIntentActionsHandler
+android.widget.Editor$SelectionModifierCursorController
+android.widget.Editor$SpanController
+android.widget.Editor$SuggestionHelper
+android.widget.Editor$SuggestionHelper$SuggestionSpanComparator
+android.widget.Editor$TextRenderNode
+android.widget.Editor$TextViewPositionListener
+android.widget.Editor$UndoInputFilter
+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.Filter$FilterListener
+android.widget.Filterable
+android.widget.ForwardingListener
+android.widget.FrameLayout
+android.widget.FrameLayout$LayoutParams
+android.widget.GridLayout$1
+android.widget.GridLayout$2
+android.widget.GridLayout$3
+android.widget.GridLayout$4
+android.widget.GridLayout$5
+android.widget.GridLayout$6
+android.widget.GridLayout$6$1
+android.widget.GridLayout$7
+android.widget.GridLayout$8
+android.widget.GridLayout$Alignment
+android.widget.GridLayout$Arc
+android.widget.GridLayout$Assoc
+android.widget.GridLayout$Bounds
+android.widget.GridLayout$Interval
+android.widget.GridLayout$MutableInt
+android.widget.GridLayout$PackedMap
+android.widget.HorizontalScrollView
+android.widget.HorizontalScrollView$SavedState$1
+android.widget.ImageButton
+android.widget.ImageView
+android.widget.ImageView$ScaleType
+android.widget.LinearLayout
+android.widget.LinearLayout$LayoutParams
+android.widget.ListAdapter
+android.widget.ListPopupWindow
+android.widget.ListPopupWindow$ListSelectorHider
+android.widget.ListPopupWindow$PopupScrollListener
+android.widget.ListPopupWindow$PopupTouchInterceptor
+android.widget.ListPopupWindow$ResizePopupRunnable
+android.widget.ListView
+android.widget.ListView$ArrowScrollFocusResult
+android.widget.ListView$FixedViewInfo
+android.widget.OverScroller
+android.widget.OverScroller$SplineOverScroller
+android.widget.PopupWindow$1
+android.widget.PopupWindow$2
+android.widget.PopupWindow$OnDismissListener
+android.widget.ProgressBar
+android.widget.ProgressBar$1
+android.widget.ProgressBar$AccessibilityEventSender
+android.widget.ProgressBar$SavedState$1
+android.widget.RelativeLayout
+android.widget.RelativeLayout$DependencyGraph
+android.widget.RelativeLayout$DependencyGraph$Node
+android.widget.RelativeLayout$LayoutParams
+android.widget.RelativeLayout$TopToBottomLeftToRightComparator
+android.widget.RemoteViews$1
+android.widget.RemoteViews$2
+android.widget.RemoteViews$3
+android.widget.RemoteViews$Action
+android.widget.RemoteViews$BitmapCache
+android.widget.RemoteViews$LayoutParamAction
+android.widget.RemoteViews$MemoryUsageCounter
+android.widget.RemoteViews$MutablePair
+android.widget.RemoteViews$OnClickHandler
+android.widget.RemoteViews$ReflectionAction
+android.widget.RemoteViews$RemoteView
+android.widget.RemoteViews$RuntimeAction
+android.widget.RemoteViews$SetDrawableParameters
+android.widget.RemoteViewsAdapter$RemoteAdapterConnectionCallback
+android.widget.RtlSpacingHelper
+android.widget.ScrollBarDrawable
+android.widget.ScrollView
+android.widget.Scroller
+android.widget.Scroller$ViscousFluidInterpolator
+android.widget.SectionIndexer
+android.widget.SeekBar
+android.widget.SeekBar$OnSeekBarChangeListener
+android.widget.Space
+android.widget.SpinnerAdapter
+android.widget.Switch$1
+android.widget.TextView
+android.widget.TextView$BufferType
+android.widget.TextView$ChangeWatcher
+android.widget.TextView$CharWrapper
+android.widget.TextView$Drawables
+android.widget.TextView$OnEditorActionListener
+android.widget.TextView$SavedState$1
+android.widget.ThemedSpinnerAdapter
+android.widget.Toolbar
+android.widget.Toolbar$1
+android.widget.Toolbar$2
+android.widget.Toolbar$ExpandedActionViewMenuPresenter
+android.widget.Toolbar$LayoutParams
+android.widget.Toolbar$OnMenuItemClickListener
+android.widget.Toolbar$SavedState$1
+android.widget.ViewAnimator
+android.widget.WrapperListAdapter
+com.android.i18n.phonenumbers.AlternateFormatsCountryCodeSet
+com.android.i18n.phonenumbers.CountryCodeToRegionCodeMap
+com.android.i18n.phonenumbers.MetadataLoader
+com.android.i18n.phonenumbers.MetadataManager$1
+com.android.i18n.phonenumbers.MetadataSource
+com.android.i18n.phonenumbers.MultiFileMetadataSourceImpl
+com.android.i18n.phonenumbers.RegexCache
+com.android.i18n.phonenumbers.RegexCache$LRUCache
+com.android.i18n.phonenumbers.RegexCache$LRUCache$1
+com.android.i18n.phonenumbers.ShortNumbersRegionCodeSet
+com.android.ims.ImsException
+com.android.internal.R$styleable
+com.android.internal.app.AlertController$AlertParams
+com.android.internal.app.IAppOpsCallback
+com.android.internal.app.IAppOpsCallback$Stub
+com.android.internal.app.IAppOpsService
+com.android.internal.app.IAppOpsService$Stub
+com.android.internal.app.IAppOpsService$Stub$Proxy
+com.android.internal.app.IBatteryStats
+com.android.internal.app.IBatteryStats$Stub
+com.android.internal.app.IBatteryStats$Stub$Proxy
+com.android.internal.app.IVoiceInteractionManagerService
+com.android.internal.app.IVoiceInteractionManagerService$Stub
+com.android.internal.app.IVoiceInteractor
+com.android.internal.app.IVoiceInteractor$Stub
+com.android.internal.app.NightDisplayController
+com.android.internal.appwidget.IAppWidgetService
+com.android.internal.appwidget.IAppWidgetService$Stub
+com.android.internal.appwidget.IAppWidgetService$Stub$Proxy
+com.android.internal.content.NativeLibraryHelper
+com.android.internal.content.ReferrerIntent
+com.android.internal.content.ReferrerIntent$1
+com.android.internal.graphics.drawable.AnimationScaleListDrawable
+com.android.internal.graphics.drawable.AnimationScaleListDrawable$AnimationScaleListState
+com.android.internal.logging.AndroidConfig
+com.android.internal.logging.AndroidHandler
+com.android.internal.logging.AndroidHandler$1
+com.android.internal.logging.EventLogTags
+com.android.internal.logging.MetricsLogger
+com.android.internal.net.NetworkStatsFactory
+com.android.internal.os.AndroidPrintStream
+com.android.internal.os.BatteryStatsImpl$1
+com.android.internal.os.BatteryStatsImpl$Clocks
+com.android.internal.os.BatteryStatsImpl$ControllerActivityCounterImpl
+com.android.internal.os.BatteryStatsImpl$Counter
+com.android.internal.os.BatteryStatsImpl$DualTimer
+com.android.internal.os.BatteryStatsImpl$DurationTimer
+com.android.internal.os.BatteryStatsImpl$LongSamplingCounter
+com.android.internal.os.BatteryStatsImpl$LongSamplingCounterArray
+com.android.internal.os.BatteryStatsImpl$OverflowArrayMap
+com.android.internal.os.BatteryStatsImpl$SamplingTimer
+com.android.internal.os.BatteryStatsImpl$StopwatchTimer
+com.android.internal.os.BatteryStatsImpl$SystemClocks
+com.android.internal.os.BatteryStatsImpl$TimeBase
+com.android.internal.os.BatteryStatsImpl$TimeBaseObs
+com.android.internal.os.BatteryStatsImpl$Timer
+com.android.internal.os.BatteryStatsImpl$Uid
+com.android.internal.os.BatteryStatsImpl$Uid$1
+com.android.internal.os.BatteryStatsImpl$Uid$2
+com.android.internal.os.BatteryStatsImpl$Uid$3
+com.android.internal.os.BatteryStatsImpl$Uid$Pkg
+com.android.internal.os.BatteryStatsImpl$Uid$Pkg$Serv
+com.android.internal.os.BatteryStatsImpl$Uid$Proc
+com.android.internal.os.BatteryStatsImpl$Uid$Sensor
+com.android.internal.os.BatteryStatsImpl$Uid$Wakelock
+com.android.internal.os.BinderInternal
+com.android.internal.os.BinderInternal$GcWatcher
+com.android.internal.os.ClassLoaderFactory
+com.android.internal.os.FuseAppLoop
+com.android.internal.os.FuseAppLoop$1
+com.android.internal.os.FuseUnavailableMountException
+com.android.internal.os.HandlerCaller
+com.android.internal.os.HandlerCaller$Callback
+com.android.internal.os.HandlerCaller$MyHandler
+com.android.internal.os.IResultReceiver
+com.android.internal.os.IResultReceiver$Stub
+com.android.internal.os.IResultReceiver$Stub$Proxy
+com.android.internal.os.KernelMemoryBandwidthStats
+com.android.internal.os.KernelUidCpuFreqTimeReader
+com.android.internal.os.KernelUidCpuTimeReader
+com.android.internal.os.KernelWakelockStats
+com.android.internal.os.LoggingPrintStream
+com.android.internal.os.LoggingPrintStream$1
+com.android.internal.os.PowerProfile$CpuClusterKey
+com.android.internal.os.RoSystemProperties
+com.android.internal.os.RuntimeInit
+com.android.internal.os.RuntimeInit$1
+com.android.internal.os.RuntimeInit$Arguments
+com.android.internal.os.RuntimeInit$KillApplicationHandler
+com.android.internal.os.RuntimeInit$LoggingHandler
+com.android.internal.os.RuntimeInit$MethodAndArgsCaller
+com.android.internal.os.SomeArgs
+com.android.internal.os.Zygote
+com.android.internal.os.ZygoteConnection
+com.android.internal.os.ZygoteConnection$Arguments
+com.android.internal.os.ZygoteInit
+com.android.internal.os.ZygoteServer
+com.android.internal.policy.DecorContext
+com.android.internal.policy.DecorView
+com.android.internal.policy.DecorView$1
+com.android.internal.policy.DecorView$ColorViewAttributes
+com.android.internal.policy.DecorView$ColorViewState
+com.android.internal.policy.PhoneFallbackEventHandler
+com.android.internal.policy.PhoneLayoutInflater
+com.android.internal.policy.PhoneWindow
+com.android.internal.policy.PhoneWindow$1
+com.android.internal.policy.PhoneWindow$PanelFeatureState
+com.android.internal.policy.PhoneWindow$PanelFeatureState$SavedState$1
+com.android.internal.policy.PhoneWindow$PhoneWindowMenuCallback
+com.android.internal.policy.PhoneWindow$RotationWatcher
+com.android.internal.policy.PhoneWindow$RotationWatcher$1
+com.android.internal.telecom.ITelecomService
+com.android.internal.telecom.ITelecomService$Stub
+com.android.internal.telecom.ITelecomService$Stub$Proxy
+com.android.internal.telephony.ICarrierConfigLoader
+com.android.internal.telephony.ICarrierConfigLoader$Stub
+com.android.internal.telephony.ICarrierConfigLoader$Stub$Proxy
+com.android.internal.telephony.IOnSubscriptionsChangedListener
+com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub
+com.android.internal.telephony.IPhoneStateListener
+com.android.internal.telephony.IPhoneStateListener$Stub
+com.android.internal.telephony.IPhoneSubInfo
+com.android.internal.telephony.IPhoneSubInfo$Stub
+com.android.internal.telephony.IPhoneSubInfo$Stub$Proxy
+com.android.internal.telephony.ISms
+com.android.internal.telephony.ISms$Stub
+com.android.internal.telephony.ISub
+com.android.internal.telephony.ISub$Stub
+com.android.internal.telephony.ISub$Stub$Proxy
+com.android.internal.telephony.ITelephony
+com.android.internal.telephony.ITelephony$Stub
+com.android.internal.telephony.ITelephony$Stub$Proxy
+com.android.internal.telephony.ITelephonyRegistry
+com.android.internal.telephony.ITelephonyRegistry$Stub
+com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy
+com.android.internal.telephony.PhoneConstants$State
+com.android.internal.util.ArrayUtils
+com.android.internal.util.BitUtils
+com.android.internal.util.ExponentiallyBucketedHistogram
+com.android.internal.util.FastMath
+com.android.internal.util.FastPrintWriter
+com.android.internal.util.FastPrintWriter$DummyWriter
+com.android.internal.util.FastXmlSerializer
+com.android.internal.util.GrowingArrayUtils
+com.android.internal.util.IntPair
+com.android.internal.util.LineBreakBufferedWriter
+com.android.internal.util.Preconditions
+com.android.internal.util.State
+com.android.internal.util.StateMachine
+com.android.internal.util.StateMachine$LogRec
+com.android.internal.util.StateMachine$LogRecords
+com.android.internal.util.StateMachine$SmHandler$HaltingState
+com.android.internal.util.StateMachine$SmHandler$QuittingState
+com.android.internal.util.StateMachine$SmHandler$StateInfo
+com.android.internal.util.VirtualRefBasePtr
+com.android.internal.util.XmlUtils
+com.android.internal.util.XmlUtils$WriteMapCallback
+com.android.internal.view.ActionBarPolicy
+com.android.internal.view.IInputConnectionWrapper
+com.android.internal.view.IInputConnectionWrapper$MyHandler
+com.android.internal.view.IInputContext
+com.android.internal.view.IInputContext$Stub
+com.android.internal.view.IInputContextCallback
+com.android.internal.view.IInputContextCallback$Stub
+com.android.internal.view.IInputMethodClient
+com.android.internal.view.IInputMethodClient$Stub
+com.android.internal.view.IInputMethodManager
+com.android.internal.view.IInputMethodManager$Stub
+com.android.internal.view.IInputMethodManager$Stub$Proxy
+com.android.internal.view.IInputMethodSession
+com.android.internal.view.IInputMethodSession$Stub
+com.android.internal.view.IInputMethodSession$Stub$Proxy
+com.android.internal.view.InputBindResult
+com.android.internal.view.InputBindResult$1
+com.android.internal.view.RootViewSurfaceTaker
+com.android.internal.view.SurfaceCallbackHelper
+com.android.internal.view.SurfaceCallbackHelper$1
+com.android.internal.view.animation.FallbackLUTInterpolator
+com.android.internal.view.animation.HasNativeInterpolator
+com.android.internal.view.animation.NativeInterpolatorFactory
+com.android.internal.view.animation.NativeInterpolatorFactoryHelper
+com.android.internal.view.menu.ActionMenuItem
+com.android.internal.view.menu.BaseMenuPresenter
+com.android.internal.view.menu.MenuBuilder$Callback
+com.android.internal.view.menu.MenuBuilder$ItemInvoker
+com.android.internal.view.menu.MenuPresenter
+com.android.internal.view.menu.MenuPresenter$Callback
+com.android.internal.view.menu.MenuView
+com.android.internal.view.menu.ShowableListMenu
+com.android.internal.widget.AbsActionBarView$VisibilityAnimListener
+com.android.internal.widget.ActionBarContainer
+com.android.internal.widget.ActionBarContainer$ActionBarBackgroundDrawable
+com.android.internal.widget.ActionBarContextView
+com.android.internal.widget.ActionBarOverlayLayout$1
+com.android.internal.widget.ActionBarOverlayLayout$2
+com.android.internal.widget.ActionBarOverlayLayout$3
+com.android.internal.widget.ActionBarOverlayLayout$4
+com.android.internal.widget.ActionBarOverlayLayout$5
+com.android.internal.widget.ActionBarOverlayLayout$ActionBarVisibilityCallback
+com.android.internal.widget.ActionBarOverlayLayout$LayoutParams
+com.android.internal.widget.BackgroundFallback
+com.android.internal.widget.DecorContentParent
+com.android.internal.widget.DecorToolbar
+com.android.internal.widget.EditableInputConnection
+com.android.internal.widget.LockPatternUtils
+com.android.internal.widget.ScrollBarUtils
+com.android.internal.widget.ToolbarWidgetWrapper
+com.android.internal.widget.ToolbarWidgetWrapper$1
+com.android.okhttp.Address
+com.android.okhttp.Authenticator
+com.android.okhttp.CacheControl$Builder
+com.android.okhttp.CertificatePinner$Builder
+com.android.okhttp.CipherSuite
+com.android.okhttp.ConfigAwareConnectionPool
+com.android.okhttp.ConfigAwareConnectionPool$1
+com.android.okhttp.Connection
+com.android.okhttp.ConnectionPool$1
+com.android.okhttp.ConnectionSpec
+com.android.okhttp.ConnectionSpec$Builder
+com.android.okhttp.Dispatcher
+com.android.okhttp.Dns$1
+com.android.okhttp.Handshake
+com.android.okhttp.Headers
+com.android.okhttp.Headers$Builder
+com.android.okhttp.HttpHandler
+com.android.okhttp.HttpHandler$CleartextURLFilter
+com.android.okhttp.HttpUrl$Builder
+com.android.okhttp.HttpsHandler
+com.android.okhttp.OkHttpClient$1
+com.android.okhttp.OkUrlFactory
+com.android.okhttp.Protocol
+com.android.okhttp.Request
+com.android.okhttp.Request$Builder
+com.android.okhttp.RequestBody
+com.android.okhttp.RequestBody$2
+com.android.okhttp.Response
+com.android.okhttp.Response$Builder
+com.android.okhttp.ResponseBody
+com.android.okhttp.Route
+com.android.okhttp.TlsVersion
+com.android.okhttp.internal.ConnectionSpecSelector
+com.android.okhttp.internal.OptionalMethod
+com.android.okhttp.internal.RouteDatabase
+com.android.okhttp.internal.URLFilter
+com.android.okhttp.internal.Util$1
+com.android.okhttp.internal.http.CacheStrategy
+com.android.okhttp.internal.http.CacheStrategy$Factory
+com.android.okhttp.internal.http.Http1xStream
+com.android.okhttp.internal.http.Http1xStream$AbstractSource
+com.android.okhttp.internal.http.Http1xStream$ChunkedSource
+com.android.okhttp.internal.http.Http1xStream$FixedLengthSource
+com.android.okhttp.internal.http.HttpEngine$1
+com.android.okhttp.internal.http.HttpMethod
+com.android.okhttp.internal.http.HttpStream
+com.android.okhttp.internal.http.OkHeaders$1
+com.android.okhttp.internal.http.RealResponseBody
+com.android.okhttp.internal.http.RequestException
+com.android.okhttp.internal.http.RequestLine
+com.android.okhttp.internal.http.RetryableSink
+com.android.okhttp.internal.http.RouteSelector
+com.android.okhttp.internal.http.StatusLine
+com.android.okhttp.internal.http.StreamAllocation
+com.android.okhttp.internal.huc.DelegatingHttpsURLConnection
+com.android.okhttp.internal.huc.HttpsURLConnectionImpl
+com.android.okhttp.internal.tls.OkHostnameVerifier
+com.android.okhttp.okio.AsyncTimeout$1
+com.android.okhttp.okio.AsyncTimeout$2
+com.android.okhttp.okio.AsyncTimeout$Watchdog
+com.android.okhttp.okio.BufferedSink
+com.android.okhttp.okio.BufferedSource
+com.android.okhttp.okio.ForwardingTimeout
+com.android.okhttp.okio.GzipSource
+com.android.okhttp.okio.InflaterSource
+com.android.okhttp.okio.Okio$1
+com.android.okhttp.okio.Okio$2
+com.android.okhttp.okio.Okio$3
+com.android.okhttp.okio.RealBufferedSink
+com.android.okhttp.okio.RealBufferedSink$1
+com.android.okhttp.okio.RealBufferedSource
+com.android.okhttp.okio.RealBufferedSource$1
+com.android.okhttp.okio.Segment
+com.android.okhttp.okio.Sink
+com.android.okhttp.okio.Source
+com.android.okhttp.okio.Timeout$1
+com.android.org.bouncycastle.asn1.ASN1Encodable
+com.android.org.bouncycastle.asn1.ASN1Object
+com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier
+com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier$OidHandle
+com.android.org.bouncycastle.asn1.ASN1Primitive
+com.android.org.bouncycastle.asn1.OIDTokenizer
+com.android.org.bouncycastle.asn1.bc.BCObjectIdentifiers
+com.android.org.bouncycastle.asn1.iana.IANAObjectIdentifiers
+com.android.org.bouncycastle.asn1.misc.MiscObjectIdentifiers
+com.android.org.bouncycastle.asn1.nist.NISTObjectIdentifiers
+com.android.org.bouncycastle.asn1.oiw.OIWObjectIdentifiers
+com.android.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers
+com.android.org.bouncycastle.asn1.x509.X509ObjectIdentifiers
+com.android.org.bouncycastle.asn1.x9.X9ObjectIdentifiers
+com.android.org.bouncycastle.crypto.CipherParameters
+com.android.org.bouncycastle.jcajce.provider.asymmetric.DH
+com.android.org.bouncycastle.jcajce.provider.asymmetric.DH$Mappings
+com.android.org.bouncycastle.jcajce.provider.asymmetric.DSA$Mappings
+com.android.org.bouncycastle.jcajce.provider.asymmetric.EC
+com.android.org.bouncycastle.jcajce.provider.asymmetric.EC$Mappings
+com.android.org.bouncycastle.jcajce.provider.asymmetric.RSA
+com.android.org.bouncycastle.jcajce.provider.asymmetric.RSA$Mappings
+com.android.org.bouncycastle.jcajce.provider.asymmetric.X509$Mappings
+com.android.org.bouncycastle.jcajce.provider.asymmetric.dh.KeyFactorySpi
+com.android.org.bouncycastle.jcajce.provider.asymmetric.dsa.DSAUtil
+com.android.org.bouncycastle.jcajce.provider.asymmetric.dsa.KeyFactorySpi
+com.android.org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi
+com.android.org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi$EC
+com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi
+com.android.org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi
+com.android.org.bouncycastle.jcajce.provider.config.ConfigurableProvider
+com.android.org.bouncycastle.jcajce.provider.config.ProviderConfiguration
+com.android.org.bouncycastle.jcajce.provider.config.ProviderConfigurationPermission
+com.android.org.bouncycastle.jcajce.provider.digest.DigestAlgorithmProvider
+com.android.org.bouncycastle.jcajce.provider.digest.MD5
+com.android.org.bouncycastle.jcajce.provider.digest.MD5$Mappings
+com.android.org.bouncycastle.jcajce.provider.digest.SHA1
+com.android.org.bouncycastle.jcajce.provider.digest.SHA1$Mappings
+com.android.org.bouncycastle.jcajce.provider.digest.SHA224
+com.android.org.bouncycastle.jcajce.provider.digest.SHA224$Mappings
+com.android.org.bouncycastle.jcajce.provider.digest.SHA256
+com.android.org.bouncycastle.jcajce.provider.digest.SHA256$Mappings
+com.android.org.bouncycastle.jcajce.provider.digest.SHA384
+com.android.org.bouncycastle.jcajce.provider.digest.SHA384$Mappings
+com.android.org.bouncycastle.jcajce.provider.digest.SHA512
+com.android.org.bouncycastle.jcajce.provider.digest.SHA512$Mappings
+com.android.org.bouncycastle.jcajce.provider.keystore.BC$Mappings
+com.android.org.bouncycastle.jcajce.provider.keystore.PKCS12$Mappings
+com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi
+com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi$Std
+com.android.org.bouncycastle.jcajce.provider.symmetric.AES
+com.android.org.bouncycastle.jcajce.provider.symmetric.AES$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.ARC4
+com.android.org.bouncycastle.jcajce.provider.symmetric.ARC4$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.Blowfish
+com.android.org.bouncycastle.jcajce.provider.symmetric.Blowfish$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.DES
+com.android.org.bouncycastle.jcajce.provider.symmetric.DES$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.DESede
+com.android.org.bouncycastle.jcajce.provider.symmetric.DESede$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2
+com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12
+com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.PBES2AlgorithmParameters
+com.android.org.bouncycastle.jcajce.provider.symmetric.PBES2AlgorithmParameters$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.RC2
+com.android.org.bouncycastle.jcajce.provider.symmetric.RC2$Mappings
+com.android.org.bouncycastle.jcajce.provider.symmetric.SymmetricAlgorithmProvider
+com.android.org.bouncycastle.jcajce.provider.symmetric.Twofish
+com.android.org.bouncycastle.jcajce.provider.symmetric.Twofish$Mappings
+com.android.org.bouncycastle.jcajce.provider.util.AlgorithmProvider
+com.android.org.bouncycastle.jcajce.provider.util.AsymmetricAlgorithmProvider
+com.android.org.bouncycastle.jcajce.provider.util.AsymmetricKeyInfoConverter
+com.android.org.bouncycastle.jcajce.util.BCJcaJceHelper
+com.android.org.bouncycastle.jcajce.util.JcaJceHelper
+com.android.org.bouncycastle.jcajce.util.ProviderJcaJceHelper
+com.android.org.bouncycastle.jce.interfaces.BCKeyStore
+com.android.org.bouncycastle.jce.provider.BouncyCastleProvider
+com.android.org.bouncycastle.jce.provider.BouncyCastleProvider$1
+com.android.org.bouncycastle.jce.provider.BouncyCastleProviderConfiguration
+com.android.org.bouncycastle.util.Arrays
+com.android.org.bouncycastle.util.Encodable
+com.android.org.bouncycastle.util.Strings
+com.android.org.bouncycastle.util.Strings$1
+com.android.org.conscrypt.AbstractConscryptSocket
+com.android.org.conscrypt.AbstractConscryptSocket$1
+com.android.org.conscrypt.AbstractSessionContext
+com.android.org.conscrypt.AbstractSessionContext$1
+com.android.org.conscrypt.ActiveSession
+com.android.org.conscrypt.ArrayUtils
+com.android.org.conscrypt.ByteArray
+com.android.org.conscrypt.CertBlacklist
+com.android.org.conscrypt.CertificatePriorityComparator
+com.android.org.conscrypt.ChainStrengthAnalyzer
+com.android.org.conscrypt.ClientSessionContext
+com.android.org.conscrypt.ClientSessionContext$HostAndPort
+com.android.org.conscrypt.Conscrypt
+com.android.org.conscrypt.ConscryptFileDescriptorSocket
+com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream
+com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLOutputStream
+com.android.org.conscrypt.CryptoUpcalls
+com.android.org.conscrypt.EvpMdRef$SHA1
+com.android.org.conscrypt.FileClientSessionCache$Impl
+com.android.org.conscrypt.Hex
+com.android.org.conscrypt.InternalUtil
+com.android.org.conscrypt.JSSEProvider
+com.android.org.conscrypt.KeyManagerFactoryImpl
+com.android.org.conscrypt.KeyManagerImpl
+com.android.org.conscrypt.NativeCrypto
+com.android.org.conscrypt.NativeCrypto$SSLHandshakeCallbacks
+com.android.org.conscrypt.NativeCryptoJni
+com.android.org.conscrypt.NativeRef
+com.android.org.conscrypt.NativeRef$EC_GROUP
+com.android.org.conscrypt.NativeRef$EC_POINT
+com.android.org.conscrypt.NativeRef$EVP_CIPHER_CTX
+com.android.org.conscrypt.NativeRef$EVP_MD_CTX
+com.android.org.conscrypt.NativeRef$EVP_PKEY
+com.android.org.conscrypt.NativeRef$SSL_SESSION
+com.android.org.conscrypt.OpenSSLBIOInputStream
+com.android.org.conscrypt.OpenSSLCipher
+com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER
+com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER$AES
+com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER$AES$CBC
+com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER$AES$CBC$PKCS5Padding
+com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER$AES_BASE
+com.android.org.conscrypt.OpenSSLContextImpl$TLSv12
+com.android.org.conscrypt.OpenSSLECGroupContext
+com.android.org.conscrypt.OpenSSLECKeyFactory
+com.android.org.conscrypt.OpenSSLECPointContext
+com.android.org.conscrypt.OpenSSLECPublicKey
+com.android.org.conscrypt.OpenSSLKey
+com.android.org.conscrypt.OpenSSLKeyHolder
+com.android.org.conscrypt.OpenSSLMessageDigestJDK
+com.android.org.conscrypt.OpenSSLMessageDigestJDK$MD5
+com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA1
+com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA256
+com.android.org.conscrypt.OpenSSLProvider
+com.android.org.conscrypt.OpenSSLRSAKeyFactory
+com.android.org.conscrypt.OpenSSLRSAPublicKey
+com.android.org.conscrypt.OpenSSLRandom
+com.android.org.conscrypt.OpenSSLSignature
+com.android.org.conscrypt.OpenSSLSignature$RSAPKCS1Padding
+com.android.org.conscrypt.OpenSSLSocketImpl
+com.android.org.conscrypt.OpenSSLX509CertPath
+com.android.org.conscrypt.OpenSSLX509CertPath$Encoding
+com.android.org.conscrypt.OpenSSLX509Certificate
+com.android.org.conscrypt.OpenSSLX509CertificateFactory
+com.android.org.conscrypt.OpenSSLX509CertificateFactory$1
+com.android.org.conscrypt.OpenSSLX509CertificateFactory$2
+com.android.org.conscrypt.OpenSSLX509CertificateFactory$Parser
+com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException
+com.android.org.conscrypt.PeerInfoProvider$1
+com.android.org.conscrypt.Platform
+com.android.org.conscrypt.Platform$NoPreloadHolder
+com.android.org.conscrypt.Preconditions
+com.android.org.conscrypt.SSLClientSessionCache
+com.android.org.conscrypt.SSLParametersImpl$AliasChooser
+com.android.org.conscrypt.SSLParametersImpl$PSKCallbacks
+com.android.org.conscrypt.ServerSessionContext
+com.android.org.conscrypt.SslSessionWrapper
+com.android.org.conscrypt.SslSessionWrapper$Impl
+com.android.org.conscrypt.SslSessionWrapper$Impl$1
+com.android.org.conscrypt.SslWrapper
+com.android.org.conscrypt.TrustManagerFactoryImpl
+com.android.org.conscrypt.TrustManagerImpl
+com.android.org.conscrypt.TrustManagerImpl$ExtendedKeyUsagePKIXCertPathChecker
+com.android.org.conscrypt.TrustManagerImpl$TrustAnchorComparator
+com.android.org.conscrypt.TrustedCertificateIndex
+com.android.org.conscrypt.TrustedCertificateKeyStoreSpi
+com.android.org.conscrypt.TrustedCertificateStore
+com.android.org.conscrypt.TrustedCertificateStore$1
+com.android.org.conscrypt.TrustedCertificateStore$CertSelector
+com.android.org.conscrypt.TrustedCertificateStore$PreloadHolder
+com.android.org.conscrypt.ct.CTLogInfo
+com.android.org.conscrypt.ct.CTLogStore
+com.android.org.conscrypt.ct.CTLogStoreImpl
+com.android.org.conscrypt.ct.CTLogStoreImpl$InvalidLogFileException
+com.android.org.conscrypt.ct.CTPolicy
+com.android.org.conscrypt.ct.CTPolicyImpl
+com.android.org.conscrypt.ct.CTVerifier
+com.android.org.conscrypt.ct.SerializationException
+com.android.server.NetworkManagementSocketTagger
+com.android.server.NetworkManagementSocketTagger$1
+com.android.server.NetworkManagementSocketTagger$SocketTags
+com.google.android.collect.Lists
+com.google.android.collect.Maps
+com.google.android.collect.Sets
+com.google.android.gles_jni.EGLConfigImpl
+com.google.android.gles_jni.EGLContextImpl
+com.google.android.gles_jni.EGLDisplayImpl
+com.google.android.gles_jni.EGLImpl
+com.google.android.gles_jni.EGLSurfaceImpl
+com.google.android.gles_jni.GLImpl
+dalvik.annotation.optimization.CriticalNative
+dalvik.annotation.optimization.FastNative
+dalvik.system.-$Lambda$xxvwQBVHC44UYbpcpA8j0sUqLOo
+dalvik.system.BaseDexClassLoader
+dalvik.system.BaseDexClassLoader$Reporter
+dalvik.system.BlockGuard
+dalvik.system.BlockGuard$1
+dalvik.system.BlockGuard$2
+dalvik.system.BlockGuard$BlockGuardPolicyException
+dalvik.system.BlockGuard$Policy
+dalvik.system.ClassExt
+dalvik.system.CloseGuard
+dalvik.system.CloseGuard$DefaultReporter
+dalvik.system.CloseGuard$DefaultTracker
+dalvik.system.CloseGuard$Reporter
+dalvik.system.CloseGuard$Tracker
+dalvik.system.DalvikLogHandler
+dalvik.system.DalvikLogging
+dalvik.system.DelegateLastClassLoader
+dalvik.system.DexClassLoader
+dalvik.system.DexFile
+dalvik.system.DexFile$DFEnum
+dalvik.system.DexPathList
+dalvik.system.DexPathList$Element
+dalvik.system.DexPathList$NativeLibraryElement
+dalvik.system.EmulatedStackFrame
+dalvik.system.EmulatedStackFrame$Range
+dalvik.system.PathClassLoader
+dalvik.system.SocketTagger
+dalvik.system.SocketTagger$1
+dalvik.system.VMDebug
+dalvik.system.VMRuntime
+dalvik.system.VMStack
+dalvik.system.ZygoteHooks
+java.io.Bits
+java.io.BufferedInputStream
+java.io.BufferedOutputStream
+java.io.BufferedReader
+java.io.ByteArrayInputStream
+java.io.ByteArrayOutputStream
+java.io.CharArrayWriter
+java.io.Closeable
+java.io.Console
+java.io.DataInput
+java.io.DataInputStream
+java.io.DataOutput
+java.io.DataOutputStream
+java.io.DefaultFileSystem
+java.io.EOFException
+java.io.ExpiringCache
+java.io.ExpiringCache$1
+java.io.Externalizable
+java.io.File
+java.io.File$PathStatus
+java.io.File$TempDirectory
+java.io.FileDescriptor
+java.io.FileDescriptor$1
+java.io.FileFilter
+java.io.FileInputStream
+java.io.FileInputStream$UseManualSkipException
+java.io.FileNotFoundException
+java.io.FileOutputStream
+java.io.FileReader
+java.io.FileSystem
+java.io.FileWriter
+java.io.FilenameFilter
+java.io.FilterInputStream
+java.io.FilterOutputStream
+java.io.FilterReader
+java.io.Flushable
+java.io.IOException
+java.io.InputStream
+java.io.InputStreamReader
+java.io.InterruptedIOException
+java.io.InvalidClassException
+java.io.InvalidObjectException
+java.io.ObjectInput
+java.io.ObjectInputStream
+java.io.ObjectInputStream$BlockDataInputStream
+java.io.ObjectInputStream$HandleTable
+java.io.ObjectInputStream$HandleTable$HandleList
+java.io.ObjectInputStream$PeekInputStream
+java.io.ObjectInputStream$ValidationList
+java.io.ObjectOutput
+java.io.ObjectOutputStream
+java.io.ObjectOutputStream$BlockDataOutputStream
+java.io.ObjectOutputStream$HandleTable
+java.io.ObjectOutputStream$PutField
+java.io.ObjectOutputStream$ReplaceTable
+java.io.ObjectStreamClass
+java.io.ObjectStreamClass$1
+java.io.ObjectStreamClass$2
+java.io.ObjectStreamClass$3
+java.io.ObjectStreamClass$4
+java.io.ObjectStreamClass$5
+java.io.ObjectStreamClass$ClassDataSlot
+java.io.ObjectStreamClass$ExceptionInfo
+java.io.ObjectStreamClass$FieldReflectorKey
+java.io.ObjectStreamClass$MemberSignature
+java.io.ObjectStreamClass$WeakClassKey
+java.io.ObjectStreamConstants
+java.io.ObjectStreamException
+java.io.ObjectStreamField
+java.io.OutputStream
+java.io.OutputStreamWriter
+java.io.PrintStream
+java.io.PrintWriter
+java.io.PushbackInputStream
+java.io.PushbackReader
+java.io.RandomAccessFile
+java.io.Reader
+java.io.SequenceInputStream
+java.io.SerialCallbackContext
+java.io.Serializable
+java.io.SerializablePermission
+java.io.StreamCorruptedException
+java.io.StringReader
+java.io.StringWriter
+java.io.UnixFileSystem
+java.io.UnsupportedEncodingException
+java.io.Writer
+java.lang.-$Lambda$S9HjrJh0nDg7IyU6wZdPArnZWRQ
+java.lang.AbstractMethodError
+java.lang.AbstractStringBuilder
+java.lang.AndroidHardcodedSystemProperties
+java.lang.Appendable
+java.lang.ArithmeticException
+java.lang.ArrayIndexOutOfBoundsException
+java.lang.ArrayStoreException
+java.lang.AssertionError
+java.lang.AutoCloseable
+java.lang.Boolean
+java.lang.BootClassLoader
+java.lang.Byte
+java.lang.Byte$ByteCache
+java.lang.CaseMapper
+java.lang.CaseMapper$1
+java.lang.CharSequence
+java.lang.CharSequence$1CharIterator
+java.lang.CharSequence$1CodePointIterator
+java.lang.Character
+java.lang.Character$CharacterCache
+java.lang.Character$Subset
+java.lang.Character$UnicodeBlock
+java.lang.Class
+java.lang.Class$Caches
+java.lang.ClassCastException
+java.lang.ClassLoader
+java.lang.ClassLoader$SystemClassLoader
+java.lang.ClassNotFoundException
+java.lang.CloneNotSupportedException
+java.lang.Cloneable
+java.lang.Comparable
+java.lang.Daemons
+java.lang.Daemons$Daemon
+java.lang.Daemons$FinalizerDaemon
+java.lang.Daemons$FinalizerWatchdogDaemon
+java.lang.Daemons$HeapTaskDaemon
+java.lang.Daemons$ReferenceQueueDaemon
+java.lang.DexCache
+java.lang.Double
+java.lang.Enum
+java.lang.Enum$1
+java.lang.EnumConstantNotPresentException
+java.lang.Error
+java.lang.Exception
+java.lang.Float
+java.lang.IllegalAccessError
+java.lang.IllegalAccessException
+java.lang.IllegalArgumentException
+java.lang.IllegalStateException
+java.lang.IllegalThreadStateException
+java.lang.IncompatibleClassChangeError
+java.lang.IndexOutOfBoundsException
+java.lang.InheritableThreadLocal
+java.lang.InstantiationException
+java.lang.Integer
+java.lang.Integer$IntegerCache
+java.lang.InternalError
+java.lang.InterruptedException
+java.lang.Iterable
+java.lang.LinkageError
+java.lang.Long
+java.lang.Long$LongCache
+java.lang.Math
+java.lang.Math$RandomNumberGeneratorHolder
+java.lang.NoClassDefFoundError
+java.lang.NoSuchFieldError
+java.lang.NoSuchFieldException
+java.lang.NoSuchMethodError
+java.lang.NoSuchMethodException
+java.lang.NullPointerException
+java.lang.Number
+java.lang.NumberFormatException
+java.lang.Object
+java.lang.OutOfMemoryError
+java.lang.Package
+java.lang.Process
+java.lang.ProcessBuilder
+java.lang.ProcessEnvironment
+java.lang.Readable
+java.lang.ReflectiveOperationException
+java.lang.Runnable
+java.lang.Runtime
+java.lang.RuntimeException
+java.lang.RuntimePermission
+java.lang.SecurityException
+java.lang.Short
+java.lang.Short$ShortCache
+java.lang.StackOverflowError
+java.lang.StackTraceElement
+java.lang.StrictMath
+java.lang.String
+java.lang.String$CaseInsensitiveComparator
+java.lang.StringBuffer
+java.lang.StringBuilder
+java.lang.StringFactory
+java.lang.StringIndexOutOfBoundsException
+java.lang.System
+java.lang.System$PropertiesWithNonOverrideableDefaults
+java.lang.Thread
+java.lang.Thread$1
+java.lang.Thread$Caches
+java.lang.Thread$State
+java.lang.Thread$UncaughtExceptionHandler
+java.lang.Thread$WeakClassKey
+java.lang.ThreadDeath
+java.lang.ThreadGroup
+java.lang.ThreadLocal
+java.lang.ThreadLocal$SuppliedThreadLocal
+java.lang.ThreadLocal$ThreadLocalMap
+java.lang.ThreadLocal$ThreadLocalMap$Entry
+java.lang.Throwable
+java.lang.Throwable$PrintStreamOrWriter
+java.lang.Throwable$SentinelHolder
+java.lang.Throwable$WrappedPrintStream
+java.lang.Throwable$WrappedPrintWriter
+java.lang.TypeNotPresentException
+java.lang.UNIXProcess
+java.lang.UnsatisfiedLinkError
+java.lang.UnsupportedOperationException
+java.lang.VMClassLoader
+java.lang.VirtualMachineError
+java.lang.Void
+java.lang.annotation.Annotation
+java.lang.annotation.AnnotationTypeMismatchException
+java.lang.annotation.IncompleteAnnotationException
+java.lang.annotation.Inherited
+java.lang.annotation.Retention
+java.lang.invoke.CallSite
+java.lang.invoke.ConstantCallSite
+java.lang.invoke.MethodHandle
+java.lang.invoke.MethodHandleImpl
+java.lang.invoke.MethodHandleImpl$HandleInfo
+java.lang.invoke.MethodHandleInfo
+java.lang.invoke.MethodHandleStatics
+java.lang.invoke.MethodHandles
+java.lang.invoke.MethodHandles$Lookup
+java.lang.invoke.MethodType
+java.lang.invoke.MethodType$ConcurrentWeakInternSet
+java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry
+java.lang.invoke.MethodTypeForm
+java.lang.invoke.Transformers$AlwaysThrow
+java.lang.invoke.Transformers$BindTo
+java.lang.invoke.Transformers$CatchException
+java.lang.invoke.Transformers$CollectArguments
+java.lang.invoke.Transformers$Collector
+java.lang.invoke.Transformers$Constant
+java.lang.invoke.Transformers$Construct
+java.lang.invoke.Transformers$DropArguments
+java.lang.invoke.Transformers$ExplicitCastArguments
+java.lang.invoke.Transformers$FilterArguments
+java.lang.invoke.Transformers$FilterReturnValue
+java.lang.invoke.Transformers$FoldArguments
+java.lang.invoke.Transformers$GuardWithTest
+java.lang.invoke.Transformers$InsertArguments
+java.lang.invoke.Transformers$Invoker
+java.lang.invoke.Transformers$PermuteArguments
+java.lang.invoke.Transformers$ReferenceArrayElementGetter
+java.lang.invoke.Transformers$ReferenceArrayElementSetter
+java.lang.invoke.Transformers$ReferenceIdentity
+java.lang.invoke.Transformers$Spreader
+java.lang.invoke.Transformers$Transformer
+java.lang.invoke.Transformers$VarargsCollector
+java.lang.invoke.WrongMethodTypeException
+java.lang.ref.FinalizerReference
+java.lang.ref.FinalizerReference$Sentinel
+java.lang.ref.PhantomReference
+java.lang.ref.Reference
+java.lang.ref.ReferenceQueue
+java.lang.ref.SoftReference
+java.lang.ref.WeakReference
+java.lang.reflect.AccessibleObject
+java.lang.reflect.AnnotatedElement
+java.lang.reflect.Array
+java.lang.reflect.Constructor
+java.lang.reflect.Executable
+java.lang.reflect.Executable$GenericInfo
+java.lang.reflect.Field
+java.lang.reflect.GenericArrayType
+java.lang.reflect.GenericDeclaration
+java.lang.reflect.InvocationHandler
+java.lang.reflect.InvocationTargetException
+java.lang.reflect.MalformedParametersException
+java.lang.reflect.Member
+java.lang.reflect.Method
+java.lang.reflect.Method$1
+java.lang.reflect.Modifier
+java.lang.reflect.Parameter
+java.lang.reflect.ParameterizedType
+java.lang.reflect.Proxy
+java.lang.reflect.Proxy$1
+java.lang.reflect.Proxy$Key1
+java.lang.reflect.Proxy$Key2
+java.lang.reflect.Proxy$KeyFactory
+java.lang.reflect.Proxy$KeyX
+java.lang.reflect.Proxy$ProxyClassFactory
+java.lang.reflect.Type
+java.lang.reflect.TypeVariable
+java.lang.reflect.UndeclaredThrowableException
+java.lang.reflect.WeakCache
+java.lang.reflect.WeakCache$CacheKey
+java.lang.reflect.WeakCache$CacheValue
+java.lang.reflect.WeakCache$Factory
+java.lang.reflect.WeakCache$LookupValue
+java.lang.reflect.WeakCache$Value
+java.lang.reflect.WildcardType
+java.math.BigInt
+java.math.BigInteger
+java.math.NativeBN
+java.math.RoundingMode
+java.net.AbstractPlainSocketImpl
+java.net.AddressCache
+java.net.AddressCache$AddressCacheEntry
+java.net.AddressCache$AddressCacheKey
+java.net.ConnectException
+java.net.DatagramPacket
+java.net.DatagramSocket$1
+java.net.DatagramSocketImpl
+java.net.DefaultInterface
+java.net.HttpURLConnection
+java.net.IDN
+java.net.Inet4Address
+java.net.Inet6Address
+java.net.Inet6Address$Inet6AddressHolder
+java.net.Inet6AddressImpl
+java.net.InetAddress
+java.net.InetAddress$1
+java.net.InetAddress$InetAddressHolder
+java.net.InetAddressImpl
+java.net.InetSocketAddress
+java.net.InetSocketAddress$InetSocketAddressHolder
+java.net.InterfaceAddress
+java.net.JarURLConnection
+java.net.MalformedURLException
+java.net.MulticastSocket
+java.net.NetworkInterface
+java.net.Parts
+java.net.PlainDatagramSocketImpl
+java.net.PlainSocketImpl
+java.net.ProxySelector
+java.net.Socket
+java.net.Socket$2
+java.net.Socket$3
+java.net.SocketAddress
+java.net.SocketException
+java.net.SocketImpl
+java.net.SocketInputStream
+java.net.SocketOptions
+java.net.SocketOutputStream
+java.net.SocketTimeoutException
+java.net.SocksConsts
+java.net.URI
+java.net.URI$Parser
+java.net.URISyntaxException
+java.net.URL
+java.net.URLConnection
+java.net.URLStreamHandler
+java.net.URLStreamHandlerFactory
+java.net.UnknownHostException
+java.nio.Bits
+java.nio.Buffer
+java.nio.BufferOverflowException
+java.nio.BufferUnderflowException
+java.nio.ByteBuffer
+java.nio.ByteBufferAsCharBuffer
+java.nio.ByteBufferAsDoubleBuffer
+java.nio.ByteBufferAsFloatBuffer
+java.nio.ByteBufferAsIntBuffer
+java.nio.ByteBufferAsLongBuffer
+java.nio.ByteBufferAsShortBuffer
+java.nio.ByteOrder
+java.nio.CharBuffer
+java.nio.DirectByteBuffer
+java.nio.DirectByteBuffer$MemoryRef
+java.nio.DoubleBuffer
+java.nio.FloatBuffer
+java.nio.HeapByteBuffer
+java.nio.HeapCharBuffer
+java.nio.IntBuffer
+java.nio.InvalidMarkException
+java.nio.LongBuffer
+java.nio.MappedByteBuffer
+java.nio.NIOAccess
+java.nio.NioUtils
+java.nio.ReadOnlyBufferException
+java.nio.ShortBuffer
+java.nio.StringCharBuffer
+java.nio.channels.AsynchronousCloseException
+java.nio.channels.ByteChannel
+java.nio.channels.Channel
+java.nio.channels.Channels
+java.nio.channels.ClosedByInterruptException
+java.nio.channels.ClosedChannelException
+java.nio.channels.DatagramChannel
+java.nio.channels.FileChannel
+java.nio.channels.FileChannel$MapMode
+java.nio.channels.FileLock
+java.nio.channels.GatheringByteChannel
+java.nio.channels.InterruptibleChannel
+java.nio.channels.MulticastChannel
+java.nio.channels.NetworkChannel
+java.nio.channels.OverlappingFileLockException
+java.nio.channels.ReadableByteChannel
+java.nio.channels.ScatteringByteChannel
+java.nio.channels.SeekableByteChannel
+java.nio.channels.SelectableChannel
+java.nio.channels.ServerSocketChannel
+java.nio.channels.SocketChannel
+java.nio.channels.WritableByteChannel
+java.nio.channels.spi.AbstractInterruptibleChannel
+java.nio.channels.spi.AbstractInterruptibleChannel$1
+java.nio.channels.spi.AbstractSelectableChannel
+java.nio.charset.CharacterCodingException
+java.nio.charset.Charset
+java.nio.charset.CharsetDecoder
+java.nio.charset.CharsetDecoderICU
+java.nio.charset.CharsetEncoder
+java.nio.charset.CharsetEncoderICU
+java.nio.charset.CharsetICU
+java.nio.charset.CoderResult
+java.nio.charset.CoderResult$1
+java.nio.charset.CoderResult$2
+java.nio.charset.CoderResult$Cache
+java.nio.charset.CodingErrorAction
+java.nio.charset.IllegalCharsetNameException
+java.nio.charset.StandardCharsets
+java.nio.charset.UnsupportedCharsetException
+java.nio.file.FileSystem
+java.nio.file.FileSystems
+java.nio.file.FileSystems$DefaultFileSystemHolder$1
+java.nio.file.Path
+java.nio.file.Watchable
+java.nio.file.attribute.BasicFileAttributes
+java.nio.file.attribute.FileAttribute
+java.nio.file.attribute.PosixFileAttributes
+java.security.AccessControlContext
+java.security.AccessControlException
+java.security.AccessController
+java.security.AlgorithmConstraints
+java.security.AlgorithmParameters
+java.security.AlgorithmParametersSpi
+java.security.BasicPermission
+java.security.CryptoPrimitive
+java.security.GeneralSecurityException
+java.security.Guard
+java.security.InvalidAlgorithmParameterException
+java.security.InvalidKeyException
+java.security.Key
+java.security.KeyException
+java.security.KeyFactory
+java.security.KeyFactorySpi
+java.security.KeyManagementException
+java.security.KeyPair
+java.security.KeyStore
+java.security.KeyStore$1
+java.security.KeyStoreException
+java.security.KeyStoreSpi
+java.security.MessageDigest
+java.security.MessageDigest$Delegate
+java.security.MessageDigestSpi
+java.security.NoSuchAlgorithmException
+java.security.NoSuchProviderException
+java.security.Permission
+java.security.PermissionCollection
+java.security.Permissions
+java.security.Principal
+java.security.PrivateKey
+java.security.PrivilegedAction
+java.security.PrivilegedActionException
+java.security.PrivilegedExceptionAction
+java.security.ProtectionDomain
+java.security.Provider
+java.security.Provider$EngineDescription
+java.security.Provider$Service
+java.security.Provider$ServiceKey
+java.security.Provider$UString
+java.security.PublicKey
+java.security.SecureRandom
+java.security.SecureRandomSpi
+java.security.Security
+java.security.SignatureException
+java.security.SignatureSpi
+java.security.UnrecoverableEntryException
+java.security.UnrecoverableKeyException
+java.security.cert.CRL
+java.security.cert.CRLException
+java.security.cert.CertPath
+java.security.cert.CertPathChecker
+java.security.cert.CertPathHelperImpl
+java.security.cert.CertPathParameters
+java.security.cert.CertPathValidator
+java.security.cert.CertPathValidatorException
+java.security.cert.CertPathValidatorResult
+java.security.cert.CertPathValidatorSpi
+java.security.cert.CertSelector
+java.security.cert.Certificate
+java.security.cert.CertificateEncodingException
+java.security.cert.CertificateException
+java.security.cert.CertificateExpiredException
+java.security.cert.CertificateFactory
+java.security.cert.CertificateFactorySpi
+java.security.cert.CertificateNotYetValidException
+java.security.cert.CertificateParsingException
+java.security.cert.Extension
+java.security.cert.PKIXCertPathChecker
+java.security.cert.PKIXCertPathValidatorResult
+java.security.cert.PKIXParameters
+java.security.cert.PKIXRevocationChecker
+java.security.cert.PolicyNode
+java.security.cert.PolicyQualifierInfo
+java.security.cert.TrustAnchor
+java.security.cert.X509CertSelector
+java.security.cert.X509Certificate
+java.security.cert.X509Extension
+java.security.interfaces.DSAKey
+java.security.interfaces.DSAPublicKey
+java.security.interfaces.ECKey
+java.security.interfaces.ECPublicKey
+java.security.interfaces.RSAKey
+java.security.interfaces.RSAPrivateKey
+java.security.interfaces.RSAPublicKey
+java.security.spec.AlgorithmParameterSpec
+java.security.spec.ECField
+java.security.spec.ECFieldFp
+java.security.spec.ECParameterSpec
+java.security.spec.ECPoint
+java.security.spec.ECPublicKeySpec
+java.security.spec.EllipticCurve
+java.security.spec.EncodedKeySpec
+java.security.spec.InvalidKeySpecException
+java.security.spec.InvalidParameterSpecException
+java.security.spec.KeySpec
+java.security.spec.PKCS8EncodedKeySpec
+java.security.spec.RSAPublicKeySpec
+java.security.spec.X509EncodedKeySpec
+java.text.AttributedCharacterIterator$Attribute
+java.text.CalendarBuilder
+java.text.CharacterIterator
+java.text.Collator
+java.text.DateFormat
+java.text.DateFormat$Field
+java.text.DateFormatSymbols
+java.text.DecimalFormat
+java.text.DecimalFormatSymbols
+java.text.DontCareFieldPosition
+java.text.DontCareFieldPosition$1
+java.text.FieldPosition
+java.text.FieldPosition$Delegate
+java.text.Format
+java.text.Format$Field
+java.text.Format$FieldDelegate
+java.text.Normalizer
+java.text.Normalizer$Form
+java.text.NumberFormat
+java.text.ParseException
+java.text.ParsePosition
+java.text.RuleBasedCollator
+java.text.SimpleDateFormat
+java.text.StringCharacterIterator
+java.time.DateTimeException
+java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo
+java.util.-$Lambda$Hazqao1eYCE_pmZR5Jlrc2GvLhk
+java.util.-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw
+java.util.AbstractCollection
+java.util.AbstractList
+java.util.AbstractList$Itr
+java.util.AbstractList$ListItr
+java.util.AbstractMap
+java.util.AbstractMap$1
+java.util.AbstractMap$2
+java.util.AbstractMap$SimpleImmutableEntry
+java.util.AbstractQueue
+java.util.AbstractSequentialList
+java.util.AbstractSet
+java.util.ArrayDeque
+java.util.ArrayDeque$DeqIterator
+java.util.ArrayList
+java.util.ArrayList$ArrayListSpliterator
+java.util.ArrayList$Itr
+java.util.ArrayList$ListItr
+java.util.ArrayList$SubList
+java.util.ArrayList$SubList$1
+java.util.ArrayPrefixHelpers$CumulateTask
+java.util.ArrayPrefixHelpers$DoubleCumulateTask
+java.util.ArrayPrefixHelpers$IntCumulateTask
+java.util.ArrayPrefixHelpers$LongCumulateTask
+java.util.Arrays
+java.util.Arrays$ArrayList
+java.util.Arrays$NaturalOrder
+java.util.ArraysParallelSortHelpers$FJByte$Sorter
+java.util.ArraysParallelSortHelpers$FJChar$Sorter
+java.util.ArraysParallelSortHelpers$FJDouble$Sorter
+java.util.ArraysParallelSortHelpers$FJFloat$Sorter
+java.util.ArraysParallelSortHelpers$FJInt$Sorter
+java.util.ArraysParallelSortHelpers$FJLong$Sorter
+java.util.ArraysParallelSortHelpers$FJObject$Sorter
+java.util.ArraysParallelSortHelpers$FJShort$Sorter
+java.util.BitSet
+java.util.Calendar
+java.util.Collection
+java.util.Collections
+java.util.Collections$1
+java.util.Collections$2
+java.util.Collections$3
+java.util.Collections$AsLIFOQueue
+java.util.Collections$CheckedCollection
+java.util.Collections$CheckedList
+java.util.Collections$CheckedMap
+java.util.Collections$CheckedNavigableMap
+java.util.Collections$CheckedNavigableSet
+java.util.Collections$CheckedQueue
+java.util.Collections$CheckedRandomAccessList
+java.util.Collections$CheckedSet
+java.util.Collections$CheckedSortedMap
+java.util.Collections$CheckedSortedSet
+java.util.Collections$CopiesList
+java.util.Collections$EmptyEnumeration
+java.util.Collections$EmptyIterator
+java.util.Collections$EmptyList
+java.util.Collections$EmptyListIterator
+java.util.Collections$EmptyMap
+java.util.Collections$EmptySet
+java.util.Collections$ReverseComparator
+java.util.Collections$ReverseComparator2
+java.util.Collections$SetFromMap
+java.util.Collections$SingletonList
+java.util.Collections$SingletonMap
+java.util.Collections$SingletonSet
+java.util.Collections$SynchronizedCollection
+java.util.Collections$SynchronizedList
+java.util.Collections$SynchronizedMap
+java.util.Collections$SynchronizedNavigableMap
+java.util.Collections$SynchronizedNavigableSet
+java.util.Collections$SynchronizedRandomAccessList
+java.util.Collections$SynchronizedSet
+java.util.Collections$SynchronizedSortedMap
+java.util.Collections$SynchronizedSortedSet
+java.util.Collections$UnmodifiableCollection
+java.util.Collections$UnmodifiableCollection$1
+java.util.Collections$UnmodifiableList
+java.util.Collections$UnmodifiableList$1
+java.util.Collections$UnmodifiableMap
+java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet
+java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$1
+java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry
+java.util.Collections$UnmodifiableNavigableMap
+java.util.Collections$UnmodifiableNavigableMap$EmptyNavigableMap
+java.util.Collections$UnmodifiableNavigableSet
+java.util.Collections$UnmodifiableNavigableSet$EmptyNavigableSet
+java.util.Collections$UnmodifiableRandomAccessList
+java.util.Collections$UnmodifiableSet
+java.util.Collections$UnmodifiableSortedMap
+java.util.Collections$UnmodifiableSortedSet
+java.util.ComparableTimSort
+java.util.Comparator
+java.util.Comparators$NaturalOrderComparator
+java.util.Comparators$NullComparator
+java.util.ConcurrentModificationException
+java.util.Currency
+java.util.Date
+java.util.Deque
+java.util.Dictionary
+java.util.DualPivotQuicksort
+java.util.EnumMap
+java.util.EnumMap$1
+java.util.EnumMap$EnumMapIterator
+java.util.EnumMap$KeyIterator
+java.util.EnumMap$KeySet
+java.util.EnumSet
+java.util.Enumeration
+java.util.EventListener
+java.util.Formattable
+java.util.Formatter
+java.util.Formatter$Conversion
+java.util.Formatter$FixedString
+java.util.Formatter$Flags
+java.util.Formatter$FormatSpecifier
+java.util.Formatter$FormatSpecifierParser
+java.util.Formatter$FormatString
+java.util.GregorianCalendar
+java.util.HashMap
+java.util.HashMap$EntryIterator
+java.util.HashMap$EntrySet
+java.util.HashMap$HashIterator
+java.util.HashMap$KeyIterator
+java.util.HashMap$KeySet
+java.util.HashMap$Node
+java.util.HashMap$TreeNode
+java.util.HashMap$ValueIterator
+java.util.HashMap$Values
+java.util.HashSet
+java.util.Hashtable
+java.util.Hashtable$Enumerator
+java.util.Hashtable$HashtableEntry
+java.util.IdentityHashMap
+java.util.IdentityHashMap$KeySet
+java.util.IllegalFormatException
+java.util.IllformedLocaleException
+java.util.Iterator
+java.util.LinkedHashMap
+java.util.LinkedHashMap$LinkedEntryIterator
+java.util.LinkedHashMap$LinkedEntrySet
+java.util.LinkedHashMap$LinkedHashIterator
+java.util.LinkedHashMap$LinkedHashMapEntry
+java.util.LinkedHashMap$LinkedKeyIterator
+java.util.LinkedHashMap$LinkedKeySet
+java.util.LinkedHashMap$LinkedValueIterator
+java.util.LinkedHashMap$LinkedValues
+java.util.LinkedHashSet
+java.util.LinkedList
+java.util.LinkedList$ListItr
+java.util.LinkedList$Node
+java.util.List
+java.util.ListIterator
+java.util.Locale
+java.util.Locale$Builder
+java.util.Locale$Cache
+java.util.Locale$Category
+java.util.Locale$FilteringMode
+java.util.Locale$LanguageRange
+java.util.Locale$LocaleKey
+java.util.Locale$NoImagePreloadHolder
+java.util.Map
+java.util.Map$Entry
+java.util.MissingResourceException
+java.util.NavigableMap
+java.util.NavigableSet
+java.util.NoSuchElementException
+java.util.Objects
+java.util.Observable
+java.util.Observer
+java.util.PrimitiveIterator
+java.util.PrimitiveIterator$OfInt
+java.util.PriorityQueue
+java.util.PriorityQueue$Itr
+java.util.Properties
+java.util.Properties$LineReader
+java.util.Queue
+java.util.Random
+java.util.RandomAccess
+java.util.RandomAccessSubList
+java.util.RegularEnumSet
+java.util.RegularEnumSet$EnumSetIterator
+java.util.ResourceBundle
+java.util.ResourceBundle$1
+java.util.Set
+java.util.SimpleTimeZone
+java.util.SortedMap
+java.util.SortedSet
+java.util.Spliterator
+java.util.Spliterator$OfDouble
+java.util.Spliterator$OfInt
+java.util.Spliterator$OfLong
+java.util.Spliterator$OfPrimitive
+java.util.Spliterators
+java.util.Spliterators$EmptySpliterator
+java.util.Spliterators$EmptySpliterator$OfDouble
+java.util.Spliterators$EmptySpliterator$OfInt
+java.util.Spliterators$EmptySpliterator$OfLong
+java.util.Spliterators$EmptySpliterator$OfRef
+java.util.Spliterators$IteratorSpliterator
+java.util.Stack
+java.util.StringJoiner
+java.util.StringTokenizer
+java.util.SubList
+java.util.TimSort
+java.util.TimeZone
+java.util.Timer$1
+java.util.TimerTask
+java.util.TimerThread
+java.util.TreeMap
+java.util.TreeMap$AscendingSubMap
+java.util.TreeMap$AscendingSubMap$AscendingEntrySetView
+java.util.TreeMap$EntryIterator
+java.util.TreeMap$EntrySet
+java.util.TreeMap$KeyIterator
+java.util.TreeMap$KeySet
+java.util.TreeMap$NavigableSubMap
+java.util.TreeMap$NavigableSubMap$EntrySetView
+java.util.TreeMap$NavigableSubMap$SubMapEntryIterator
+java.util.TreeMap$NavigableSubMap$SubMapIterator
+java.util.TreeMap$PrivateEntryIterator
+java.util.TreeMap$TreeMapEntry
+java.util.TreeMap$ValueIterator
+java.util.TreeMap$Values
+java.util.TreeSet
+java.util.UUID
+java.util.UUID$Holder
+java.util.Vector
+java.util.Vector$1
+java.util.Vector$Itr
+java.util.WeakHashMap
+java.util.WeakHashMap$Entry
+java.util.WeakHashMap$EntrySet
+java.util.WeakHashMap$HashIterator
+java.util.WeakHashMap$KeyIterator
+java.util.WeakHashMap$KeySet
+java.util.WeakHashMap$ValueIterator
+java.util.WeakHashMap$Values
+java.util.concurrent.-$Lambda$xR9BLpu6SifNikvFgr4lEiECBsk
+java.util.concurrent.AbstractExecutorService
+java.util.concurrent.ArrayBlockingQueue
+java.util.concurrent.BlockingDeque
+java.util.concurrent.BlockingQueue
+java.util.concurrent.Callable
+java.util.concurrent.CancellationException
+java.util.concurrent.ConcurrentHashMap
+java.util.concurrent.ConcurrentHashMap$BaseIterator
+java.util.concurrent.ConcurrentHashMap$BulkTask
+java.util.concurrent.ConcurrentHashMap$CollectionView
+java.util.concurrent.ConcurrentHashMap$CounterCell
+java.util.concurrent.ConcurrentHashMap$EntryIterator
+java.util.concurrent.ConcurrentHashMap$EntrySetView
+java.util.concurrent.ConcurrentHashMap$ForEachEntryTask
+java.util.concurrent.ConcurrentHashMap$ForEachKeyTask
+java.util.concurrent.ConcurrentHashMap$ForEachMappingTask
+java.util.concurrent.ConcurrentHashMap$ForEachTransformedEntryTask
+java.util.concurrent.ConcurrentHashMap$ForEachTransformedKeyTask
+java.util.concurrent.ConcurrentHashMap$ForEachTransformedMappingTask
+java.util.concurrent.ConcurrentHashMap$ForEachTransformedValueTask
+java.util.concurrent.ConcurrentHashMap$ForEachValueTask
+java.util.concurrent.ConcurrentHashMap$ForwardingNode
+java.util.concurrent.ConcurrentHashMap$KeyIterator
+java.util.concurrent.ConcurrentHashMap$KeySetView
+java.util.concurrent.ConcurrentHashMap$MapEntry
+java.util.concurrent.ConcurrentHashMap$MapReduceEntriesTask
+java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToDoubleTask
+java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToIntTask
+java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToLongTask
+java.util.concurrent.ConcurrentHashMap$MapReduceKeysTask
+java.util.concurrent.ConcurrentHashMap$MapReduceKeysToDoubleTask
+java.util.concurrent.ConcurrentHashMap$MapReduceKeysToIntTask
+java.util.concurrent.ConcurrentHashMap$MapReduceKeysToLongTask
+java.util.concurrent.ConcurrentHashMap$MapReduceMappingsTask
+java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToDoubleTask
+java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToIntTask
+java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToLongTask
+java.util.concurrent.ConcurrentHashMap$MapReduceValuesTask
+java.util.concurrent.ConcurrentHashMap$MapReduceValuesToDoubleTask
+java.util.concurrent.ConcurrentHashMap$MapReduceValuesToIntTask
+java.util.concurrent.ConcurrentHashMap$MapReduceValuesToLongTask
+java.util.concurrent.ConcurrentHashMap$Node
+java.util.concurrent.ConcurrentHashMap$ReduceEntriesTask
+java.util.concurrent.ConcurrentHashMap$ReduceKeysTask
+java.util.concurrent.ConcurrentHashMap$ReduceValuesTask
+java.util.concurrent.ConcurrentHashMap$ReservationNode
+java.util.concurrent.ConcurrentHashMap$SearchEntriesTask
+java.util.concurrent.ConcurrentHashMap$SearchKeysTask
+java.util.concurrent.ConcurrentHashMap$SearchMappingsTask
+java.util.concurrent.ConcurrentHashMap$SearchValuesTask
+java.util.concurrent.ConcurrentHashMap$Segment
+java.util.concurrent.ConcurrentHashMap$Traverser
+java.util.concurrent.ConcurrentHashMap$TreeBin
+java.util.concurrent.ConcurrentHashMap$TreeNode
+java.util.concurrent.ConcurrentHashMap$ValueIterator
+java.util.concurrent.ConcurrentHashMap$ValuesView
+java.util.concurrent.ConcurrentLinkedQueue
+java.util.concurrent.ConcurrentLinkedQueue$Node
+java.util.concurrent.ConcurrentMap
+java.util.concurrent.CopyOnWriteArrayList
+java.util.concurrent.CopyOnWriteArrayList$COWIterator
+java.util.concurrent.CopyOnWriteArraySet
+java.util.concurrent.CountDownLatch
+java.util.concurrent.CountDownLatch$Sync
+java.util.concurrent.CountedCompleter
+java.util.concurrent.Delayed
+java.util.concurrent.ExecutionException
+java.util.concurrent.Executor
+java.util.concurrent.ExecutorService
+java.util.concurrent.Executors
+java.util.concurrent.Executors$DefaultThreadFactory
+java.util.concurrent.Executors$DelegatedExecutorService
+java.util.concurrent.Executors$DelegatedScheduledExecutorService
+java.util.concurrent.Executors$FinalizableDelegatedExecutorService
+java.util.concurrent.Executors$RunnableAdapter
+java.util.concurrent.ForkJoinPool
+java.util.concurrent.ForkJoinTask
+java.util.concurrent.ForkJoinTask$ExceptionNode
+java.util.concurrent.Future
+java.util.concurrent.FutureTask
+java.util.concurrent.FutureTask$WaitNode
+java.util.concurrent.LinkedBlockingDeque
+java.util.concurrent.LinkedBlockingDeque$Node
+java.util.concurrent.LinkedBlockingQueue
+java.util.concurrent.LinkedBlockingQueue$Node
+java.util.concurrent.RejectedExecutionException
+java.util.concurrent.RejectedExecutionHandler
+java.util.concurrent.RunnableFuture
+java.util.concurrent.RunnableScheduledFuture
+java.util.concurrent.ScheduledExecutorService
+java.util.concurrent.ScheduledFuture
+java.util.concurrent.ScheduledThreadPoolExecutor
+java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
+java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask
+java.util.concurrent.Semaphore
+java.util.concurrent.Semaphore$NonfairSync
+java.util.concurrent.Semaphore$Sync
+java.util.concurrent.SynchronousQueue
+java.util.concurrent.SynchronousQueue$TransferStack
+java.util.concurrent.SynchronousQueue$TransferStack$SNode
+java.util.concurrent.SynchronousQueue$Transferer
+java.util.concurrent.ThreadFactory
+java.util.concurrent.ThreadLocalRandom
+java.util.concurrent.ThreadLocalRandom$1
+java.util.concurrent.ThreadPoolExecutor
+java.util.concurrent.ThreadPoolExecutor$AbortPolicy
+java.util.concurrent.ThreadPoolExecutor$Worker
+java.util.concurrent.TimeUnit
+java.util.concurrent.TimeUnit$1
+java.util.concurrent.TimeUnit$2
+java.util.concurrent.TimeUnit$3
+java.util.concurrent.TimeUnit$4
+java.util.concurrent.TimeUnit$5
+java.util.concurrent.TimeUnit$6
+java.util.concurrent.TimeUnit$7
+java.util.concurrent.TimeoutException
+java.util.concurrent.atomic.AtomicBoolean
+java.util.concurrent.atomic.AtomicInteger
+java.util.concurrent.atomic.AtomicIntegerFieldUpdater
+java.util.concurrent.atomic.AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl$1
+java.util.concurrent.atomic.AtomicLong
+java.util.concurrent.atomic.AtomicReference
+java.util.concurrent.atomic.AtomicReferenceFieldUpdater
+java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
+java.util.concurrent.locks.AbstractOwnableSynchronizer
+java.util.concurrent.locks.AbstractQueuedSynchronizer
+java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
+java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
+java.util.concurrent.locks.Condition
+java.util.concurrent.locks.Lock
+java.util.concurrent.locks.LockSupport
+java.util.concurrent.locks.ReadWriteLock
+java.util.concurrent.locks.ReentrantLock
+java.util.concurrent.locks.ReentrantLock$NonfairSync
+java.util.concurrent.locks.ReentrantLock$Sync
+java.util.concurrent.locks.ReentrantReadWriteLock
+java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync
+java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock
+java.util.concurrent.locks.ReentrantReadWriteLock$Sync
+java.util.concurrent.locks.ReentrantReadWriteLock$Sync$HoldCounter
+java.util.concurrent.locks.ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter
+java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock
+java.util.function.-$Lambda$1MZdIZ-DL_fjy9l0o8IMJk57T2g
+java.util.function.-$Lambda$VGDeaUHZQIZywZW2ttlyhwk3Cmk
+java.util.function.-$Lambda$VGDeaUHZQIZywZW2ttlyhwk3Cmk$1
+java.util.function.BiConsumer
+java.util.function.BiFunction
+java.util.function.BinaryOperator
+java.util.function.Consumer
+java.util.function.DoubleBinaryOperator
+java.util.function.DoubleUnaryOperator
+java.util.function.Function
+java.util.function.IntBinaryOperator
+java.util.function.IntConsumer
+java.util.function.IntFunction
+java.util.function.IntToDoubleFunction
+java.util.function.IntToLongFunction
+java.util.function.IntUnaryOperator
+java.util.function.LongBinaryOperator
+java.util.function.LongUnaryOperator
+java.util.function.Predicate
+java.util.function.Supplier
+java.util.function.ToDoubleBiFunction
+java.util.function.ToDoubleFunction
+java.util.function.ToIntBiFunction
+java.util.function.ToIntFunction
+java.util.function.ToLongBiFunction
+java.util.function.ToLongFunction
+java.util.function.UnaryOperator
+java.util.jar.JarEntry
+java.util.jar.JarFile
+java.util.jar.JarFile$JarEntryIterator
+java.util.jar.JarFile$JarFileEntry
+java.util.logging.ErrorManager
+java.util.logging.Formatter
+java.util.logging.Handler
+java.util.logging.Level
+java.util.logging.Level$KnownLevel
+java.util.logging.LogManager
+java.util.logging.LogManager$1
+java.util.logging.LogManager$2
+java.util.logging.LogManager$3
+java.util.logging.LogManager$5
+java.util.logging.LogManager$Cleaner
+java.util.logging.LogManager$LogNode
+java.util.logging.LogManager$LoggerContext
+java.util.logging.LogManager$LoggerContext$1
+java.util.logging.LogManager$LoggerWeakRef
+java.util.logging.LogManager$RootLogger
+java.util.logging.LogManager$SystemLoggerContext
+java.util.logging.Logger
+java.util.logging.Logger$LoggerBundle
+java.util.logging.LoggingPermission
+java.util.logging.LoggingProxyImpl
+java.util.prefs.AbstractPreferences
+java.util.prefs.FileSystemPreferences
+java.util.prefs.Preferences
+java.util.regex.MatchResult
+java.util.regex.Matcher
+java.util.regex.Pattern
+java.util.regex.PatternSyntaxException
+java.util.stream.BaseStream
+java.util.stream.DoubleStream
+java.util.stream.IntStream
+java.util.stream.LongStream
+java.util.stream.PipelineHelper
+java.util.stream.ReferencePipeline
+java.util.stream.ReferencePipeline$2
+java.util.stream.ReferencePipeline$2$1
+java.util.stream.ReferencePipeline$Head
+java.util.stream.Sink
+java.util.stream.Sink$ChainedReference
+java.util.stream.Stream
+java.util.stream.StreamOpFlag$MaskBuilder
+java.util.stream.StreamSupport
+java.util.stream.TerminalOp
+java.util.zip.Adler32
+java.util.zip.CRC32
+java.util.zip.CheckedInputStream
+java.util.zip.Checksum
+java.util.zip.DataFormatException
+java.util.zip.Deflater
+java.util.zip.DeflaterOutputStream
+java.util.zip.GZIPInputStream
+java.util.zip.GZIPInputStream$1
+java.util.zip.GZIPOutputStream
+java.util.zip.Inflater
+java.util.zip.InflaterInputStream
+java.util.zip.ZStreamRef
+java.util.zip.ZipCoder
+java.util.zip.ZipConstants
+java.util.zip.ZipEntry
+java.util.zip.ZipFile
+java.util.zip.ZipFile$ZipEntryIterator
+java.util.zip.ZipFile$ZipFileInflaterInputStream
+java.util.zip.ZipFile$ZipFileInputStream
+java.util.zip.ZipUtils
+javax.crypto.BadPaddingException
+javax.crypto.Cipher
+javax.crypto.Cipher$CipherSpiAndProvider
+javax.crypto.Cipher$InitParams
+javax.crypto.Cipher$SpiAndProviderUpdater
+javax.crypto.Cipher$Transform
+javax.crypto.CipherSpi
+javax.crypto.IllegalBlockSizeException
+javax.crypto.MacSpi
+javax.crypto.NoSuchPaddingException
+javax.crypto.NullCipher
+javax.crypto.SecretKey
+javax.crypto.ShortBufferException
+javax.crypto.spec.GCMParameterSpec
+javax.crypto.spec.IvParameterSpec
+javax.crypto.spec.SecretKeySpec
+javax.microedition.khronos.egl.EGL
+javax.microedition.khronos.egl.EGL10
+javax.microedition.khronos.egl.EGLConfig
+javax.microedition.khronos.egl.EGLDisplay
+javax.microedition.khronos.egl.EGLSurface
+javax.microedition.khronos.opengles.GL
+javax.microedition.khronos.opengles.GL10
+javax.microedition.khronos.opengles.GL10Ext
+javax.microedition.khronos.opengles.GL11
+javax.microedition.khronos.opengles.GL11Ext
+javax.microedition.khronos.opengles.GL11ExtensionPack
+javax.net.DefaultSocketFactory
+javax.net.SocketFactory
+javax.net.ssl.ExtendedSSLSession
+javax.net.ssl.HandshakeCompletedListener
+javax.net.ssl.HostnameVerifier
+javax.net.ssl.HttpsURLConnection
+javax.net.ssl.KeyManager
+javax.net.ssl.KeyManagerFactory
+javax.net.ssl.KeyManagerFactory$1
+javax.net.ssl.KeyManagerFactorySpi
+javax.net.ssl.SNIHostName
+javax.net.ssl.SSLContext
+javax.net.ssl.SSLContextSpi
+javax.net.ssl.SSLEngine
+javax.net.ssl.SSLException
+javax.net.ssl.SSLParameters
+javax.net.ssl.SSLPeerUnverifiedException
+javax.net.ssl.SSLProtocolException
+javax.net.ssl.SSLSession
+javax.net.ssl.SSLSessionContext
+javax.net.ssl.SSLSocket
+javax.net.ssl.SSLSocketFactory
+javax.net.ssl.SSLSocketFactory$1
+javax.net.ssl.TrustManager
+javax.net.ssl.TrustManagerFactory
+javax.net.ssl.TrustManagerFactory$1
+javax.net.ssl.TrustManagerFactorySpi
+javax.net.ssl.X509ExtendedKeyManager
+javax.net.ssl.X509ExtendedTrustManager
+javax.net.ssl.X509KeyManager
+javax.net.ssl.X509TrustManager
+javax.security.auth.Destroyable
+javax.security.auth.callback.UnsupportedCallbackException
+javax.security.auth.x500.X500Principal
+javax.security.cert.CertificateException
+javax.xml.parsers.ParserConfigurationException
+javax.xml.parsers.SAXParser
+javax.xml.parsers.SAXParserFactory
+libcore.icu.DateUtilsBridge
+libcore.icu.ICU
+libcore.icu.LocaleData
+libcore.icu.NativeConverter
+libcore.icu.TimeZoneNames
+libcore.internal.StringPool
+libcore.io.AsynchronousCloseMonitor
+libcore.io.BlockGuardOs
+libcore.io.BufferIterator
+libcore.io.ClassPathURLStreamHandler
+libcore.io.ClassPathURLStreamHandler$ClassPathURLConnection
+libcore.io.ClassPathURLStreamHandler$ClassPathURLConnection$1
+libcore.io.DropBox
+libcore.io.DropBox$DefaultReporter
+libcore.io.DropBox$Reporter
+libcore.io.EventLogger
+libcore.io.EventLogger$DefaultReporter
+libcore.io.EventLogger$Reporter
+libcore.io.ForwardingOs
+libcore.io.IoBridge
+libcore.io.IoTracker
+libcore.io.IoTracker$Mode
+libcore.io.IoUtils
+libcore.io.Libcore
+libcore.io.Linux
+libcore.io.Memory
+libcore.io.MemoryMappedFile
+libcore.io.NioBufferIterator
+libcore.io.Os
+libcore.net.NetworkSecurityPolicy
+libcore.net.NetworkSecurityPolicy$DefaultNetworkSecurityPolicy
+libcore.net.UriCodec
+libcore.net.event.NetworkEventDispatcher
+libcore.net.event.NetworkEventListener
+libcore.reflect.AnnotatedElements
+libcore.reflect.AnnotationFactory
+libcore.reflect.AnnotationMember
+libcore.reflect.AnnotationMember$DefaultValues
+libcore.reflect.GenericArrayTypeImpl
+libcore.reflect.GenericSignatureParser
+libcore.reflect.ListOfTypes
+libcore.reflect.ListOfVariables
+libcore.reflect.ParameterizedTypeImpl
+libcore.reflect.Types
+libcore.util.BasicLruCache
+libcore.util.CharsetUtils
+libcore.util.CollectionUtils
+libcore.util.EmptyArray
+libcore.util.NativeAllocationRegistry
+libcore.util.NativeAllocationRegistry$CleanerRunner
+libcore.util.NativeAllocationRegistry$CleanerThunk
+libcore.util.Objects
+libcore.util.TimeZoneDataFiles
+libcore.util.ZoneInfo
+libcore.util.ZoneInfo$CheckedArithmeticException
+libcore.util.ZoneInfo$WallTime
+libcore.util.ZoneInfoDB
+libcore.util.ZoneInfoDB$TzData
+libcore.util.ZoneInfoDB$TzData$1
+org.apache.commons.logging.Log
+org.apache.commons.logging.impl.WeakHashtable
+org.apache.harmony.dalvik.NativeTestTarget
+org.apache.harmony.dalvik.ddmc.Chunk
+org.apache.harmony.dalvik.ddmc.ChunkHandler
+org.apache.harmony.dalvik.ddmc.DdmServer
+org.apache.harmony.dalvik.ddmc.DdmVmInternal
+org.apache.harmony.luni.internal.util.TimezoneGetter
+org.apache.harmony.xml.ExpatAttributes
+org.apache.harmony.xml.ExpatParser
+org.apache.harmony.xml.ExpatParser$CurrentAttributes
+org.apache.harmony.xml.ExpatParser$ExpatLocator
+org.apache.harmony.xml.ExpatReader
+org.apache.harmony.xml.parsers.SAXParserFactoryImpl
+org.apache.harmony.xml.parsers.SAXParserImpl
+org.apache.http.ConnectionReuseStrategy
+org.apache.http.HeaderElement
+org.apache.http.HttpEntity
+org.apache.http.HttpException
+org.apache.http.HttpHost
+org.apache.http.HttpMessage
+org.apache.http.HttpRequest
+org.apache.http.HttpRequestInterceptor
+org.apache.http.HttpResponse
+org.apache.http.HttpResponseFactory
+org.apache.http.NameValuePair
+org.apache.http.ProtocolException
+org.apache.http.ProtocolVersion
+org.apache.http.ReasonPhraseCatalog
+org.apache.http.StatusLine
+org.apache.http.client.HttpClient
+org.apache.http.client.ResponseHandler
+org.apache.http.client.methods.AbortableHttpRequest
+org.apache.http.client.methods.HttpRequestBase
+org.apache.http.client.methods.HttpUriRequest
+org.apache.http.client.params.HttpClientParams
+org.apache.http.conn.ClientConnectionManager
+org.apache.http.conn.ClientConnectionOperator
+org.apache.http.conn.ConnectTimeoutException
+org.apache.http.conn.params.ConnManagerPNames
+org.apache.http.conn.params.ConnManagerParams$1
+org.apache.http.conn.params.ConnPerRoute
+org.apache.http.conn.scheme.LayeredSocketFactory
+org.apache.http.conn.scheme.Scheme
+org.apache.http.conn.scheme.SchemeRegistry
+org.apache.http.conn.scheme.SocketFactory
+org.apache.http.conn.ssl.AllowAllHostnameVerifier
+org.apache.http.conn.ssl.BrowserCompatHostnameVerifier
+org.apache.http.conn.ssl.StrictHostnameVerifier
+org.apache.http.conn.ssl.X509HostnameVerifier
+org.apache.http.entity.AbstractHttpEntity
+org.apache.http.entity.BasicHttpEntity
+org.apache.http.impl.DefaultConnectionReuseStrategy
+org.apache.http.impl.DefaultHttpResponseFactory
+org.apache.http.impl.client.AbstractHttpClient
+org.apache.http.impl.client.DefaultHttpClient
+org.apache.http.impl.conn.IdleConnectionHandler
+org.apache.http.impl.conn.tsccm.AbstractConnPool
+org.apache.http.impl.conn.tsccm.ConnPoolByRoute
+org.apache.http.impl.conn.tsccm.RefQueueHandler
+org.apache.http.impl.conn.tsccm.RefQueueWorker
+org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager
+org.apache.http.impl.cookie.DateParseException
+org.apache.http.impl.cookie.DateUtils$DateFormatHolder$1
+org.apache.http.message.AbstractHttpMessage
+org.apache.http.message.BasicHeader
+org.apache.http.message.BasicHeaderElement
+org.apache.http.message.BasicHttpResponse
+org.apache.http.message.BasicNameValuePair
+org.apache.http.message.BasicStatusLine
+org.apache.http.message.HeaderGroup
+org.apache.http.message.HeaderValueParser
+org.apache.http.message.ParserCursor
+org.apache.http.params.AbstractHttpParams
+org.apache.http.params.BasicHttpParams
+org.apache.http.params.CoreConnectionPNames
+org.apache.http.params.CoreProtocolPNames
+org.apache.http.params.HttpConnectionParams
+org.apache.http.params.HttpParams
+org.apache.http.params.HttpProtocolParams
+org.apache.http.protocol.BasicHttpProcessor
+org.apache.http.protocol.HTTP
+org.apache.http.protocol.HttpContext
+org.apache.http.protocol.HttpRequestInterceptorList
+org.apache.http.protocol.HttpResponseInterceptorList
+org.apache.http.util.CharArrayBuffer
+org.ccil.cowan.tagsoup.AttributesImpl
+org.ccil.cowan.tagsoup.AutoDetector
+org.ccil.cowan.tagsoup.Element
+org.ccil.cowan.tagsoup.ElementType
+org.ccil.cowan.tagsoup.HTMLScanner
+org.ccil.cowan.tagsoup.HTMLSchema
+org.ccil.cowan.tagsoup.Parser$1
+org.ccil.cowan.tagsoup.ScanHandler
+org.ccil.cowan.tagsoup.Scanner
+org.ccil.cowan.tagsoup.Schema
+org.json.JSON
+org.json.JSONArray
+org.json.JSONException
+org.json.JSONObject
+org.json.JSONObject$1
+org.json.JSONStringer
+org.json.JSONTokener
+org.kxml2.io.KXmlParser
+org.kxml2.io.KXmlParser$ValueContext
+org.xml.sax.Attributes
+org.xml.sax.DTDHandler
+org.xml.sax.EntityResolver
+org.xml.sax.ErrorHandler
+org.xml.sax.InputSource
+org.xml.sax.Locator
+org.xml.sax.SAXException
+org.xml.sax.XMLReader
+org.xml.sax.ext.LexicalHandler
+org.xml.sax.helpers.DefaultHandler
+org.xmlpull.v1.XmlPullParser
+org.xmlpull.v1.XmlPullParserException
+org.xmlpull.v1.XmlSerializer
+sun.invoke.util.BytecodeDescriptor
+sun.invoke.util.VerifyAccess
+sun.invoke.util.Wrapper
+sun.invoke.util.Wrapper$Format
+sun.misc.Cleaner
+sun.misc.CompoundEnumeration
+sun.misc.FDBigInteger
+sun.misc.FloatingDecimal
+sun.misc.FloatingDecimal$1
+sun.misc.FloatingDecimal$ASCIIToBinaryBuffer
+sun.misc.FloatingDecimal$ASCIIToBinaryConverter
+sun.misc.FloatingDecimal$BinaryToASCIIBuffer
+sun.misc.FloatingDecimal$BinaryToASCIIConverter
+sun.misc.FloatingDecimal$ExceptionalBinaryToASCIIBuffer
+sun.misc.FloatingDecimal$PreparedASCIIToBinaryBuffer
+sun.misc.FormattedFloatingDecimal$1
+sun.misc.IOUtils
+sun.misc.JavaIOFileDescriptorAccess
+sun.misc.SharedSecrets
+sun.misc.Unsafe
+sun.misc.VM
+sun.misc.Version
+sun.net.ConnectionResetException
+sun.net.NetHooks
+sun.net.NetProperties$1
+sun.net.spi.DefaultProxySelector
+sun.net.spi.DefaultProxySelector$1
+sun.net.spi.nameservice.NameService
+sun.net.util.IPAddressUtil
+sun.net.www.ParseUtil
+sun.net.www.protocol.file.Handler
+sun.net.www.protocol.jar.Handler
+sun.nio.ch.DatagramChannelImpl
+sun.nio.ch.DatagramDispatcher
+sun.nio.ch.DirectBuffer
+sun.nio.ch.FileChannelImpl
+sun.nio.ch.FileChannelImpl$Unmapper
+sun.nio.ch.FileDispatcher
+sun.nio.ch.FileDispatcherImpl
+sun.nio.ch.FileKey
+sun.nio.ch.FileLockTable
+sun.nio.ch.IOStatus
+sun.nio.ch.IOUtil
+sun.nio.ch.Interruptible
+sun.nio.ch.NativeDispatcher
+sun.nio.ch.NativeThread
+sun.nio.ch.NativeThreadSet
+sun.nio.ch.Net
+sun.nio.ch.SelChImpl
+sun.nio.ch.ServerSocketChannelImpl
+sun.nio.ch.SharedFileLockTable$FileLockReference
+sun.nio.ch.SocketChannelImpl
+sun.nio.ch.Util$1
+sun.nio.cs.ArrayEncoder
+sun.nio.cs.StreamDecoder
+sun.nio.cs.StreamEncoder
+sun.nio.fs.AbstractFileSystemProvider
+sun.nio.fs.AbstractPath
+sun.nio.fs.DefaultFileSystemProvider
+sun.nio.fs.LinuxFileSystem
+sun.nio.fs.LinuxFileSystemProvider
+sun.nio.fs.NativeBuffer$Deallocator
+sun.nio.fs.UnixChannelFactory$Flags
+sun.nio.fs.UnixFileSystem
+sun.nio.fs.UnixFileSystemProvider
+sun.security.action.GetBooleanAction
+sun.security.action.GetPropertyAction
+sun.security.jca.GetInstance
+sun.security.jca.GetInstance$Instance
+sun.security.jca.ProviderConfig
+sun.security.jca.ProviderConfig$2
+sun.security.jca.ProviderList
+sun.security.jca.ProviderList$1
+sun.security.jca.ProviderList$2
+sun.security.jca.ProviderList$3
+sun.security.jca.ProviderList$ServiceList
+sun.security.jca.ProviderList$ServiceList$1
+sun.security.jca.Providers
+sun.security.jca.ServiceId
+sun.security.provider.CertPathProvider
+sun.security.provider.X509Factory
+sun.security.provider.certpath.AdaptableX509CertSelector
+sun.security.provider.certpath.AlgorithmChecker
+sun.security.provider.certpath.BasicChecker
+sun.security.provider.certpath.CertPathHelper
+sun.security.provider.certpath.ConstraintsChecker
+sun.security.provider.certpath.KeyChecker
+sun.security.provider.certpath.PKIX
+sun.security.provider.certpath.PKIX$ValidatorParams
+sun.security.provider.certpath.PKIXCertPathValidator
+sun.security.provider.certpath.PKIXMasterCertPathValidator
+sun.security.provider.certpath.PolicyChecker
+sun.security.provider.certpath.PolicyNodeImpl
+sun.security.util.AbstractAlgorithmConstraints
+sun.security.util.AbstractAlgorithmConstraints$1
+sun.security.util.AlgorithmDecomposer
+sun.security.util.BitArray
+sun.security.util.ByteArrayLexOrder
+sun.security.util.ByteArrayTagOrder
+sun.security.util.Cache
+sun.security.util.Cache$EqualByteArray
+sun.security.util.CertConstraintParameters
+sun.security.util.Debug
+sun.security.util.DerEncoder
+sun.security.util.DerIndefLenConverter
+sun.security.util.DerInputBuffer
+sun.security.util.DerInputStream
+sun.security.util.DerOutputStream
+sun.security.util.DerValue
+sun.security.util.DisabledAlgorithmConstraints
+sun.security.util.DisabledAlgorithmConstraints$Constraint
+sun.security.util.DisabledAlgorithmConstraints$Constraint$Operator
+sun.security.util.DisabledAlgorithmConstraints$Constraints
+sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraint
+sun.security.util.KeyUtil
+sun.security.util.Length
+sun.security.util.MemoryCache
+sun.security.util.MemoryCache$CacheEntry
+sun.security.util.MemoryCache$SoftCacheEntry
+sun.security.util.ObjectIdentifier
+sun.security.x509.AVA
+sun.security.x509.AVAKeyword
+sun.security.x509.AccessDescription
+sun.security.x509.AlgorithmId
+sun.security.x509.AuthorityInfoAccessExtension
+sun.security.x509.AuthorityKeyIdentifierExtension
+sun.security.x509.BasicConstraintsExtension
+sun.security.x509.CRLDistributionPointsExtension
+sun.security.x509.CRLNumberExtension
+sun.security.x509.CertAttrSet
+sun.security.x509.CertificateAlgorithmId
+sun.security.x509.CertificateExtensions
+sun.security.x509.CertificateIssuerExtension
+sun.security.x509.CertificatePoliciesExtension
+sun.security.x509.CertificatePolicyId
+sun.security.x509.CertificateSerialNumber
+sun.security.x509.CertificateValidity
+sun.security.x509.CertificateVersion
+sun.security.x509.CertificateX509Key
+sun.security.x509.DNSName
+sun.security.x509.DeltaCRLIndicatorExtension
+sun.security.x509.DistributionPoint
+sun.security.x509.ExtendedKeyUsageExtension
+sun.security.x509.Extension
+sun.security.x509.FreshestCRLExtension
+sun.security.x509.GeneralName
+sun.security.x509.GeneralNameInterface
+sun.security.x509.GeneralNames
+sun.security.x509.IssuerAlternativeNameExtension
+sun.security.x509.IssuingDistributionPointExtension
+sun.security.x509.KeyIdentifier
+sun.security.x509.KeyUsageExtension
+sun.security.x509.NameConstraintsExtension
+sun.security.x509.OCSPNoCheckExtension
+sun.security.x509.OIDMap
+sun.security.x509.OIDMap$OIDInfo
+sun.security.x509.PolicyConstraintsExtension
+sun.security.x509.PolicyInformation
+sun.security.x509.PolicyMappingsExtension
+sun.security.x509.PrivateKeyUsageExtension
+sun.security.x509.RDN
+sun.security.x509.SerialNumber
+sun.security.x509.SubjectAlternativeNameExtension
+sun.security.x509.SubjectInfoAccessExtension
+sun.security.x509.SubjectKeyIdentifierExtension
+sun.security.x509.URIName
+sun.security.x509.X500Name
+sun.security.x509.X500Name$1
+sun.security.x509.X509AttributeName
+sun.security.x509.X509CertImpl
+sun.security.x509.X509CertInfo
+sun.security.x509.X509Key
+sun.util.calendar.AbstractCalendar
+sun.util.calendar.BaseCalendar
+sun.util.calendar.BaseCalendar$Date
+sun.util.calendar.CalendarDate
+sun.util.calendar.CalendarSystem
+sun.util.calendar.CalendarUtils
+sun.util.calendar.Gregorian
+sun.util.calendar.Gregorian$Date
+sun.util.calendar.JulianCalendar
+sun.util.calendar.LocalGregorianCalendar
+sun.util.locale.BaseLocale
+sun.util.locale.BaseLocale$Cache
+sun.util.locale.BaseLocale$Key
+sun.util.locale.InternalLocaleBuilder
+sun.util.locale.InternalLocaleBuilder$CaseInsensitiveChar
+sun.util.locale.LanguageTag
+sun.util.locale.LocaleObjectCache
+sun.util.locale.LocaleObjectCache$CacheEntry
+sun.util.locale.LocaleSyntaxException
+sun.util.locale.LocaleUtils
+sun.util.locale.ParseStatus
+sun.util.locale.StringTokenIterator
+sun.util.logging.LoggingProxy
+sun.util.logging.LoggingSupport
+sun.util.logging.LoggingSupport$1
+sun.util.logging.PlatformLogger
+sun.util.logging.PlatformLogger$1
+sun.util.logging.PlatformLogger$Level
diff --git a/config/preloaded-classes-blacklist b/config/preloaded-classes-blacklist
new file mode 100644
index 0000000..f612b12
--- /dev/null
+++ b/config/preloaded-classes-blacklist
@@ -0,0 +1 @@
+android.net.ConnectivityThread$Singleton
diff --git a/config/preloaded-classes-extra b/config/preloaded-classes-extra
new file mode 100644
index 0000000..09f393a
--- /dev/null
+++ b/config/preloaded-classes-extra
@@ -0,0 +1,14 @@
+android.icu.impl.coll.CollationRoot
+android.icu.impl.IDNA2003
+android.icu.impl.number.Parse
+android.icu.util.TimeZone
+android.media.ImageReader
+android.media.MediaCodecList
+android.media.MediaPlayer
+android.media.SoundPool
+android.text.format.Formatter
+android.text.Html$HtmlParser
+android.util.Log$PreloadHolder
+com.android.org.conscrypt.TrustedCertificateStore
+org.ccil.cowan.tagsoup.HTMLScanner
+sun.security.jca.Providers
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index af0a204..a558d68 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -26,7 +26,6 @@
 import android.content.Intent;
 import android.content.pm.ParceledListSlice;
 import android.graphics.Region;
-import android.hardware.fingerprint.FingerprintManager;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
@@ -52,8 +51,6 @@
 import java.lang.annotation.RetentionPolicy;
 import java.util.List;
 
-import static android.content.pm.PackageManager.FEATURE_FINGERPRINT;
-
 /**
  * Accessibility services should only be used to assist users with disabilities in using
  * Android devices and apps. They run in the background and receive callbacks by the system
@@ -394,7 +391,7 @@
     public static final int SHOW_MODE_AUTO = 0;
     public static final int SHOW_MODE_HIDDEN = 1;
 
-    private int mConnectionId;
+    private int mConnectionId = AccessibilityInteractionClient.NO_ID;
 
     private AccessibilityServiceInfo mInfo;
 
@@ -612,7 +609,7 @@
 
     /**
      * Get the controller for fingerprint gestures. This feature requires {@link
-     * AccessibilityServiceInfo#CAPABILITY_CAN_CAPTURE_FINGERPRINT_GESTURES}.
+     * AccessibilityServiceInfo#CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES}.
      *
      *<strong>Note: </strong> The service must be connected before this method is called.
      *
@@ -1612,7 +1609,7 @@
 
         private final Callbacks mCallback;
 
-        private int mConnectionId;
+        private int mConnectionId = AccessibilityInteractionClient.NO_ID;
 
         public IAccessibilityServiceClientWrapper(Context context, Looper looper,
                 Callbacks callback) {
@@ -1707,7 +1704,8 @@
                     if (event != null) {
                         // Send the event to AccessibilityCache via AccessibilityInteractionClient
                         AccessibilityInteractionClient.getInstance().onAccessibilityEvent(event);
-                        if (serviceWantsEvent) {
+                        if (serviceWantsEvent
+                                && (mConnectionId != AccessibilityInteractionClient.NO_ID)) {
                             // Send the event to AccessibilityService
                             mCallback.onAccessibilityEvent(event);
                         }
@@ -1721,7 +1719,9 @@
                 } return;
 
                 case DO_ON_INTERRUPT: {
-                    mCallback.onInterrupt();
+                    if (mConnectionId != AccessibilityInteractionClient.NO_ID) {
+                        mCallback.onInterrupt();
+                    }
                 } return;
 
                 case DO_INIT: {
@@ -1746,8 +1746,10 @@
                 } return;
 
                 case DO_ON_GESTURE: {
-                    final int gestureId = message.arg1;
-                    mCallback.onGesture(gestureId);
+                    if (mConnectionId != AccessibilityInteractionClient.NO_ID) {
+                        final int gestureId = message.arg1;
+                        mCallback.onGesture(gestureId);
+                    }
                 } return;
 
                 case DO_CLEAR_ACCESSIBILITY_CACHE: {
@@ -1779,37 +1781,51 @@
                 } return;
 
                 case DO_ON_MAGNIFICATION_CHANGED: {
-                    final SomeArgs args = (SomeArgs) message.obj;
-                    final Region region = (Region) args.arg1;
-                    final float scale = (float) args.arg2;
-                    final float centerX = (float) args.arg3;
-                    final float centerY = (float) args.arg4;
-                    mCallback.onMagnificationChanged(region, scale, centerX, centerY);
+                    if (mConnectionId != AccessibilityInteractionClient.NO_ID) {
+                        final SomeArgs args = (SomeArgs) message.obj;
+                        final Region region = (Region) args.arg1;
+                        final float scale = (float) args.arg2;
+                        final float centerX = (float) args.arg3;
+                        final float centerY = (float) args.arg4;
+                        mCallback.onMagnificationChanged(region, scale, centerX, centerY);
+                    }
                 } return;
 
                 case DO_ON_SOFT_KEYBOARD_SHOW_MODE_CHANGED: {
-                    final int showMode = (int) message.arg1;
-                    mCallback.onSoftKeyboardShowModeChanged(showMode);
+                    if (mConnectionId != AccessibilityInteractionClient.NO_ID) {
+                        final int showMode = (int) message.arg1;
+                        mCallback.onSoftKeyboardShowModeChanged(showMode);
+                    }
                 } return;
 
                 case DO_GESTURE_COMPLETE: {
-                    final boolean successfully = message.arg2 == 1;
-                    mCallback.onPerformGestureResult(message.arg1, successfully);
+                    if (mConnectionId != AccessibilityInteractionClient.NO_ID) {
+                        final boolean successfully = message.arg2 == 1;
+                        mCallback.onPerformGestureResult(message.arg1, successfully);
+                    }
                 } return;
                 case DO_ON_FINGERPRINT_ACTIVE_CHANGED: {
-                    mCallback.onFingerprintCapturingGesturesChanged(message.arg1 == 1);
+                    if (mConnectionId != AccessibilityInteractionClient.NO_ID) {
+                        mCallback.onFingerprintCapturingGesturesChanged(message.arg1 == 1);
+                    }
                 } return;
                 case DO_ON_FINGERPRINT_GESTURE: {
-                    mCallback.onFingerprintGesture(message.arg1);
+                    if (mConnectionId != AccessibilityInteractionClient.NO_ID) {
+                        mCallback.onFingerprintGesture(message.arg1);
+                    }
                 } return;
 
                 case (DO_ACCESSIBILITY_BUTTON_CLICKED): {
-                    mCallback.onAccessibilityButtonClicked();
+                    if (mConnectionId != AccessibilityInteractionClient.NO_ID) {
+                        mCallback.onAccessibilityButtonClicked();
+                    }
                 } return;
 
                 case (DO_ACCESSIBILITY_BUTTON_AVAILABILITY_CHANGED): {
-                    final boolean available = (message.arg1 != 0);
-                    mCallback.onAccessibilityButtonAvailabilityChanged(available);
+                    if (mConnectionId != AccessibilityInteractionClient.NO_ID) {
+                        final boolean available = (message.arg1 != 0);
+                        mCallback.onAccessibilityButtonAvailabilityChanged(available);
+                    }
                 } return;
 
                 default :
diff --git a/core/java/android/accessibilityservice/FingerprintGestureController.java b/core/java/android/accessibilityservice/FingerprintGestureController.java
index 9f04cea..c30030d 100644
--- a/core/java/android/accessibilityservice/FingerprintGestureController.java
+++ b/core/java/android/accessibilityservice/FingerprintGestureController.java
@@ -29,11 +29,11 @@
  * sensor, as long as the device has a sensor capable of detecting gestures.
  * <p>
  * This capability must be declared by the service as
- * {@link AccessibilityServiceInfo#CAPABILITY_CAN_CAPTURE_FINGERPRINT_GESTURES}. It also requires
+ * {@link AccessibilityServiceInfo#CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES}. It also requires
  * the permission {@link android.Manifest.permission#USE_FINGERPRINT}.
  * <p>
  * Because capturing fingerprint gestures may have side effects, services with the capability only
- * capture gestures when {@link AccessibilityServiceInfo#FLAG_CAPTURE_FINGERPRINT_GESTURES} is set.
+ * capture gestures when {@link AccessibilityServiceInfo#FLAG_REQUEST_FINGERPRINT_GESTURES} is set.
  * <p>
  * <strong>Note: </strong>The fingerprint sensor is used for authentication in critical use cases,
  * so services must carefully design their user's experience when performing gestures on the sensor.
diff --git a/core/java/android/accounts/AbstractAccountAuthenticator.java b/core/java/android/accounts/AbstractAccountAuthenticator.java
index 87e512c..bf9bd79 100644
--- a/core/java/android/accounts/AbstractAccountAuthenticator.java
+++ b/core/java/android/accounts/AbstractAccountAuthenticator.java
@@ -547,7 +547,9 @@
      * @param authTokenType the type of auth token to retrieve after adding the account, may be null
      * @param requiredFeatures a String array of authenticator-specific features that the added
      * account must support, may be null
-     * @param options a Bundle of authenticator-specific options, may be null
+     * @param options a Bundle of authenticator-specific options. It always contains
+     * {@link AccountManager#KEY_CALLER_PID} and {@link AccountManager#KEY_CALLER_UID}
+     * fields which will let authenticator know the identity of the caller.
      * @return a Bundle result or null if the result is to be returned via the response. The result
      * will contain either:
      * <ul>
@@ -603,21 +605,24 @@
      * addition {@link AbstractAccountAuthenticator} implementations that declare themselves
      * {@code android:customTokens=true} may also provide a non-negative {@link
      * #KEY_CUSTOM_TOKEN_EXPIRY} long value containing the expiration timestamp of the expiration
-     * time (in millis since the unix epoch).
+     * time (in millis since the unix epoch), tokens will be cached in memory based on
+     * application's packageName/signature for however long that was specified.
      * <p>
      * Implementers should assume that tokens will be cached on the basis of account and
      * authTokenType. The system may ignore the contents of the supplied options Bundle when
      * determining to re-use a cached token. Furthermore, implementers should assume a supplied
      * expiration time will be treated as non-binding advice.
      * <p>
-     * Finally, note that for android:customTokens=false authenticators, tokens are cached
+     * Finally, note that for {@code android:customTokens=false} authenticators, tokens are cached
      * indefinitely until some client calls {@link
      * AccountManager#invalidateAuthToken(String,String)}.
      *
      * @param response to send the result back to the AccountManager, will never be null
      * @param account the account whose credentials are to be retrieved, will never be null
      * @param authTokenType the type of auth token to retrieve, will never be null
-     * @param options a Bundle of authenticator-specific options, may be null
+     * @param options a Bundle of authenticator-specific options. It always contains
+     * {@link AccountManager#KEY_CALLER_PID} and {@link AccountManager#KEY_CALLER_UID}
+     * fields which will let authenticator know the identity of the caller.
      * @return a Bundle result or null if the result is to be returned via the response.
      * @throws NetworkErrorException if the authenticator could not honor the request due to a
      * network error
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java
index a446296..dd6ad55 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -242,10 +242,13 @@
     public static final String KEY_LAST_AUTHENTICATED_TIME = "lastAuthenticatedTime";
 
     /**
-     * Authenticators using 'customTokens' option will also get the UID of the
-     * caller
+     * The UID of caller app.
      */
     public static final String KEY_CALLER_UID = "callerUid";
+
+    /**
+     * The process id of caller app.
+     */
     public static final String KEY_CALLER_PID = "callerPid";
 
     /**
@@ -392,7 +395,7 @@
 
     /**
      * Key to set default visibility for applications which don't satisfy conditions in
-     * {@link PACKAGE_NAME_KEY_LEGACY_VISIBLE}. If the value was not set by authenticator
+     * {@link #PACKAGE_NAME_KEY_LEGACY_VISIBLE}. If the value was not set by authenticator
      * {@link #VISIBILITY_USER_MANAGED_NOT_VISIBLE} is used.
      */
     public static final String PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE =
@@ -613,7 +616,7 @@
      * not authorized to view all accounts. This method can only be called by system apps and
      * authenticators managing the type.
      * Beginning API level {@link android.os.Build.VERSION_CODES#O} it also return accounts
-     * which user can make visible to the application (see {@link VISIBILITY_USER_MANAGED_VISIBLE}).
+     * which user can make visible to the application (see {@link #VISIBILITY_USER_MANAGED_VISIBLE}).
      *
      * @param type The type of accounts to return, null to retrieve all accounts
      * @param packageName The package name of the app for which the accounts are to be returned
@@ -651,7 +654,7 @@
      * of accounts made visible to it by user
      * (see {@link #newChooseAccountIntent(Account, List, String[], String,
      * String, String[], Bundle)}) or AbstractAcccountAuthenticator
-     * using {@link setAccountVisibility}.
+     * using {@link #setAccountVisibility}.
      * {@link android.Manifest.permission#GET_ACCOUNTS} permission is not used.
      *
      * <p>
@@ -797,7 +800,7 @@
      * of accounts made visible to it by user
      * (see {@link #newChooseAccountIntent(Account, List, String[], String,
      * String, String[], Bundle)}) or AbstractAcccountAuthenticator
-     * using {@link setAccountVisibility}.
+     * using {@link #setAccountVisibility}.
      * {@link android.Manifest.permission#GET_ACCOUNTS} permission is not used.
      *
      * <p>
@@ -2713,7 +2716,7 @@
      * On success the activity returns a Bundle with the account name and type specified using
      * keys {@link #KEY_ACCOUNT_NAME} and {@link #KEY_ACCOUNT_TYPE}.
      * Chosen account is marked as {@link #VISIBILITY_USER_MANAGED_VISIBLE} to the caller
-     * (see {@link setAccountVisibility}) and will be returned to it in consequent
+     * (see {@link #setAccountVisibility}) and will be returned to it in consequent
      * {@link #getAccountsByType}) calls.
      * <p>
      * The most common case is to call this with one account type, e.g.:
@@ -2768,7 +2771,7 @@
      * On success the activity returns a Bundle with the account name and type specified using
      * keys {@link #KEY_ACCOUNT_NAME} and {@link #KEY_ACCOUNT_TYPE}.
      * Chosen account is marked as {@link #VISIBILITY_USER_MANAGED_VISIBLE} to the caller
-     * (see {@link setAccountVisibility}) and will be returned to it in consequent
+     * (see {@link #setAccountVisibility}) and will be returned to it in consequent
      * {@link #getAccountsByType}) calls.
      * <p>
      * The most common case is to call this with one account type, e.g.:
diff --git a/core/java/android/accounts/ChooseAccountActivity.java b/core/java/android/accounts/ChooseAccountActivity.java
index 9f2c39b..6a43686 100644
--- a/core/java/android/accounts/ChooseAccountActivity.java
+++ b/core/java/android/accounts/ChooseAccountActivity.java
@@ -16,12 +16,17 @@
 package android.accounts;
 
 import android.app.Activity;
+import android.app.ActivityManager;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.os.IBinder;
 import android.os.Parcelable;
+import android.os.RemoteException;
+import android.os.Process;
+import android.os.UserHandle;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -45,6 +50,8 @@
     private Parcelable[] mAccounts = null;
     private AccountManagerResponse mAccountManagerResponse = null;
     private Bundle mResult;
+    private int mCallingUid;
+    private String mCallingPackage;
 
     private HashMap<String, AuthenticatorDescription> mTypeToAuthDescription
             = new HashMap<String, AuthenticatorDescription>();
@@ -52,9 +59,6 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        // TODO This activity is only used by getAuthTokenByFeatures and can not see
-        // VISIBILITY_USER_MANAGED_NOT_VISIBLE accounts. It should be moved to account managed
-        // service.
         mAccounts = getIntent().getParcelableArrayExtra(AccountManager.KEY_ACCOUNTS);
         mAccountManagerResponse =
                 getIntent().getParcelableExtra(AccountManager.KEY_ACCOUNT_MANAGER_RESPONSE);
@@ -66,6 +70,28 @@
             return;
         }
 
+        try {
+            IBinder activityToken = getActivityToken();
+            mCallingUid = ActivityManager.getService().getLaunchedFromUid(activityToken);
+            mCallingPackage = ActivityManager.getService().getLaunchedFromPackage(
+                    activityToken);
+        } catch (RemoteException re) {
+            // Couldn't figure out caller details
+            Log.w(getClass().getSimpleName(), "Unable to get caller identity \n" + re);
+        }
+
+        if (UserHandle.isSameApp(mCallingUid, Process.SYSTEM_UID) &&
+            getIntent().getStringExtra(AccountManager.KEY_ANDROID_PACKAGE_NAME) != null) {
+            mCallingPackage = getIntent().getStringExtra(
+                AccountManager.KEY_ANDROID_PACKAGE_NAME);
+        }
+
+        if (!UserHandle.isSameApp(mCallingUid, Process.SYSTEM_UID) &&
+                getIntent().getStringExtra(AccountManager.KEY_ANDROID_PACKAGE_NAME) != null) {
+            Log.w(getClass().getSimpleName(),
+                "Non-system Uid: " + mCallingUid + " tried to override packageName \n");
+        }
+
         getAuthDescriptions();
 
         AccountInfo[] mAccountInfos = new AccountInfo[mAccounts.length];
@@ -120,6 +146,14 @@
 
     protected void onListItemClick(ListView l, View v, int position, long id) {
         Account account = (Account) mAccounts[position];
+        // Mark account as visible since user chose it.
+        AccountManager am = AccountManager.get(this);
+        Integer oldVisibility = am.getAccountVisibility(account, mCallingPackage);
+        if (oldVisibility != null
+                && oldVisibility == AccountManager.VISIBILITY_USER_MANAGED_NOT_VISIBLE) {
+            am.setAccountVisibility(account, mCallingPackage,
+                AccountManager.VISIBILITY_USER_MANAGED_VISIBLE);
+        }
         Log.d(TAG, "selected account " + account);
         Bundle bundle = new Bundle();
         bundle.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
diff --git a/core/java/android/animation/AnimatorSet.java b/core/java/android/animation/AnimatorSet.java
index 00d6657..1a2dc5c 100644
--- a/core/java/android/animation/AnimatorSet.java
+++ b/core/java/android/animation/AnimatorSet.java
@@ -843,7 +843,7 @@
         // Assumes forward playing from here on.
         for (int i = 0; i < mEvents.size(); i++) {
             AnimationEvent event = mEvents.get(i);
-            if (event.getTime() > currentPlayTime) {
+            if (event.getTime() > currentPlayTime || event.getTime() == DURATION_INFINITE) {
                 break;
             }
 
@@ -1264,7 +1264,8 @@
         } else {
             for (int i = mLastEventId + 1; i < size; i++) {
                 AnimationEvent event = mEvents.get(i);
-                if (event.getTime() <= currentPlayTime) {
+                // TODO: need a function that accounts for infinite duration to compare time
+                if (event.getTime() != DURATION_INFINITE && event.getTime() <= currentPlayTime) {
                     latestId = i;
                 }
             }
diff --git a/core/java/android/annotation/TargetApi.java b/core/java/android/annotation/TargetApi.java
index ea17890..975318e 100644
--- a/core/java/android/annotation/TargetApi.java
+++ b/core/java/android/annotation/TargetApi.java
@@ -16,6 +16,7 @@
 package android.annotation;
 
 import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
 import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.TYPE;
 
@@ -25,7 +26,7 @@
 
 /** Indicates that Lint should treat this type as targeting a given API level, no matter what the
     project target is. */
-@Target({TYPE, METHOD, CONSTRUCTOR})
+@Target({TYPE, METHOD, CONSTRUCTOR, FIELD})
 @Retention(RetentionPolicy.CLASS)
 public @interface TargetApi {
     /**
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 0ff3215..060b5d8 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -16,8 +16,6 @@
 
 package android.app;
 
-import static android.os.Build.VERSION_CODES.O;
-
 import static java.lang.Character.MIN_VALUE;
 
 import android.annotation.CallSuper;
@@ -114,6 +112,7 @@
 import android.view.WindowManagerGlobal;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.autofill.AutofillManager;
+import android.view.autofill.AutofillManager.AutofillClient;
 import android.view.autofill.AutofillPopupWindow;
 import android.view.autofill.IAutofillWindowPresenter;
 import android.widget.AdapterView;
@@ -415,7 +414,7 @@
  * vs. those targeting prior platforms.  Starting with Honeycomb, an application
  * is not in the killable state until its {@link #onStop} has returned.  This
  * impacts when {@link #onSaveInstanceState(Bundle)} may be called (it may be
- * safely called after {@link #onPause()} and allows and application to safely
+ * safely called after {@link #onPause()}) and allows an application to safely
  * wait until {@link #onStop()} to save persistent state.</p>
  *
  * <p>For those methods that are not marked as being killable, the activity's
@@ -541,9 +540,9 @@
  * <ul>
  *     <li> <p>When creating a new document, the backing database entry or file for
  *             it is created immediately.  For example, if the user chooses to write
- *             a new e-mail, a new entry for that e-mail is created as soon as they
+ *             a new email, a new entry for that email is created as soon as they
  *             start entering data, so that if they go to any other activity after
- *             that point this e-mail will now appear in the list of drafts.</p>
+ *             that point this email will now appear in the list of drafts.</p>
  *     <li> <p>When an activity's <code>onPause()</code> method is called, it should
  *             commit to the backing content provider or file any changes the user
  *             has made.  This ensures that those changes will be seen by any other
@@ -641,13 +640,13 @@
  * <a name="ProcessLifecycle"></a>
  * <h3>Process Lifecycle</h3>
  *
- * <p>The Android system attempts to keep application process around for as
+ * <p>The Android system attempts to keep an application process around for as
  * long as possible, but eventually will need to remove old processes when
- * memory runs low.  As described in <a href="#ActivityLifecycle">Activity
+ * memory runs low. As described in <a href="#ActivityLifecycle">Activity
  * Lifecycle</a>, the decision about which process to remove is intimately
- * tied to the state of the user's interaction with it.  In general, there
+ * tied to the state of the user's interaction with it. In general, there
  * are four states a process can be in based on the activities running in it,
- * listed here in order of importance.  The system will kill less important
+ * listed here in order of importance. The system will kill less important
  * processes (the last ones) before it resorts to killing more important
  * processes (the first ones).
  *
@@ -761,6 +760,11 @@
     boolean mStartedActivity;
     private boolean mDestroyed;
     private boolean mDoReportFullyDrawn = true;
+    private boolean mRestoredFromBundle;
+
+    /** {@code true} if the activity lifecycle is in a state which supports picture-in-picture.
+     * This only affects the client-side exception, the actual state check still happens in AMS. */
+    private boolean mCanEnterPictureInPicture = false;
     /** true if the activity is going through a transient pause */
     /*package*/ boolean mTemporaryPause = false;
     /** true if the activity is being destroyed in order to recreate it with a new configuration */
@@ -801,10 +805,6 @@
     final Handler mHandler = new Handler();
     final FragmentController mFragments = FragmentController.createController(new HostCallbacks());
 
-    // Most recent call to requestVisibleBehind().
-    @Deprecated
-    boolean mVisibleBehind;
-
     private static final class ManagedCursor {
         ManagedCursor(Cursor cursor) {
             mCursor = cursor;
@@ -946,6 +946,18 @@
         return mAutofillManager;
     }
 
+    @Override
+    protected void attachBaseContext(Context newBase) {
+        super.attachBaseContext(newBase);
+        newBase.setAutofillClient(this);
+    }
+
+    /** @hide */
+    @Override
+    public final AutofillClient getAutofillClient() {
+        return this;
+    }
+
     /**
      * Called when the activity is starting.  This is where most initialization
      * should go: calling {@link #setContentView(int)} to inflate the
@@ -976,18 +988,6 @@
     @CallSuper
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         if (DEBUG_LIFECYCLE) Slog.v(TAG, "onCreate " + this + ": " + savedInstanceState);
-
-        if (getApplicationInfo().targetSdkVersion > O && mActivityInfo.isFixedOrientation()) {
-            final TypedArray ta = obtainStyledAttributes(com.android.internal.R.styleable.Window);
-            final boolean isTranslucentOrFloating = ActivityInfo.isTranslucentOrFloating(ta);
-            ta.recycle();
-
-            if (isTranslucentOrFloating) {
-                throw new IllegalStateException(
-                        "Only fullscreen opaque activities can request orientation");
-            }
-        }
-
         if (mLastNonConfigurationInstances != null) {
             mFragments.restoreLoaderNonConfig(mLastNonConfigurationInstances.loaders);
         }
@@ -1016,6 +1016,7 @@
         if (mVoiceInteractor != null) {
             mVoiceInteractor.attachActivity(this);
         }
+        mRestoredFromBundle = savedInstanceState != null;
         mCalled = true;
     }
 
@@ -1861,8 +1862,18 @@
         getApplication().dispatchActivityStopped(this);
         mTranslucentCallback = null;
         mCalled = true;
-        if (isFinishing() && mAutoFillResetNeeded) {
-            getAutofillManager().commit();
+
+        if (isFinishing()) {
+            if (mAutoFillResetNeeded) {
+                getAutofillManager().commit();
+            } else if (mIntent != null
+                    && mIntent.hasExtra(AutofillManager.EXTRA_RESTORE_SESSION_TOKEN)) {
+                // Activity was launched when user tapped a link in the Autofill Save UI - since
+                // user launched another activity, the Save UI should not be restored when this
+                // activity is finished.
+                getAutofillManager().onPendingSaveUi(AutofillManager.PENDING_UI_OPERATION_CANCEL,
+                        mIntent.getIBinderExtra(AutofillManager.EXTRA_RESTORE_SESSION_TOKEN));
+            }
         }
     }
 
@@ -1952,7 +1963,7 @@
         if (mDoReportFullyDrawn) {
             mDoReportFullyDrawn = false;
             try {
-                ActivityManager.getService().reportActivityFullyDrawn(mToken);
+                ActivityManager.getService().reportActivityFullyDrawn(mToken, mRestoredFromBundle);
             } catch (RemoteException e) {
             }
         }
@@ -2093,6 +2104,10 @@
             if (params == null) {
                 throw new IllegalArgumentException("Expected non-null picture-in-picture params");
             }
+            if (!mCanEnterPictureInPicture) {
+                throw new IllegalStateException("Activity must be resumed to enter"
+                        + " picture-in-picture");
+            }
             return ActivityManagerNative.getDefault().enterPictureInPictureMode(mToken, params);
         } catch (RemoteException e) {
             return false;
@@ -5494,6 +5509,13 @@
         } else {
             mParent.finishFromChild(this);
         }
+
+        // Activity was launched when user tapped a link in the Autofill Save UI - Save UI must
+        // be restored now.
+        if (mIntent != null && mIntent.hasExtra(AutofillManager.EXTRA_RESTORE_SESSION_TOKEN)) {
+            getAutofillManager().onPendingSaveUi(AutofillManager.PENDING_UI_OPERATION_RESTORE,
+                    mIntent.getIBinderExtra(AutofillManager.EXTRA_RESTORE_SESSION_TOKEN));
+        }
     }
 
     /**
@@ -5850,6 +5872,16 @@
     }
 
     /**
+     * Temporary method on O-MR1 only.
+     *
+     * @hide
+     */
+    @Override
+    public ComponentName getComponentNameForAutofill() {
+        return mComponent;
+    }
+
+    /**
      * Retrieve a {@link SharedPreferences} object for accessing preferences
      * that are private to this activity.  This simply calls the underlying
      * {@link #getSharedPreferences(String, int)} method by passing in this activity's
@@ -6228,6 +6260,11 @@
         }
 
         mHandler.getLooper().dump(new PrintWriterPrinter(writer), prefix);
+
+        final AutofillManager afm = getAutofillManager();
+        if (afm != null) {
+            afm.dump(prefix, writer);
+        }
     }
 
     /**
@@ -6459,10 +6496,6 @@
     @Deprecated
     @SystemApi
     public boolean isBackgroundVisibleBehind() {
-        try {
-            return ActivityManager.getService().isBackgroundVisibleBehind(mToken);
-        } catch (RemoteException e) {
-        }
         return false;
     }
 
@@ -6963,25 +6996,29 @@
         return mParent != null ? mParent.getActivityToken() : mToken;
     }
 
-    final void performCreateCommon() {
+    final void performCreate(Bundle icicle) {
+        performCreate(icicle, null);
+    }
+
+    final void performCreate(Bundle icicle, PersistableBundle persistentState) {
+        mCanEnterPictureInPicture = true;
+        restoreHasCurrentPermissionRequest(icicle);
+        if (persistentState != null) {
+            onCreate(icicle, persistentState);
+        } else {
+            onCreate(icicle);
+        }
+        mActivityTransitionState.readState(icicle);
+
         mVisibleFromClient = !mWindow.getWindowStyle().getBoolean(
                 com.android.internal.R.styleable.Window_windowNoDisplay, false);
         mFragments.dispatchActivityCreated();
         mActivityTransitionState.setEnterActivityOptions(this, getActivityOptions());
     }
 
-    final void performCreate(Bundle icicle) {
-        restoreHasCurrentPermissionRequest(icicle);
-        onCreate(icicle);
-        mActivityTransitionState.readState(icicle);
-        performCreateCommon();
-    }
-
-    final void performCreate(Bundle icicle, PersistableBundle persistentState) {
-        restoreHasCurrentPermissionRequest(icicle);
-        onCreate(icicle, persistentState);
-        mActivityTransitionState.readState(icicle);
-        performCreateCommon();
+    final void performNewIntent(Intent intent) {
+        mCanEnterPictureInPicture = true;
+        onNewIntent(intent);
     }
 
     final void performStart() {
@@ -7027,6 +7064,7 @@
     }
 
     final void performRestart() {
+        mCanEnterPictureInPicture = true;
         mFragments.noteStateNotSaved();
 
         if (mToken != null && mParent == null) {
@@ -7132,6 +7170,9 @@
         mDoReportFullyDrawn = false;
         mFragments.doLoaderStop(mChangingConfigurations /*retain*/);
 
+        // Disallow entering picture-in-picture after the activity has been stopped
+        mCanEnterPictureInPicture = false;
+
         if (!mStopped) {
             if (mWindow != null) {
                 mWindow.closeAllPanels();
@@ -7556,6 +7597,53 @@
         }
     }
 
+    /**
+     * Specifies whether an {@link Activity} should be shown on top of the the lock screen whenever
+     * the lockscreen is up and the activity is resumed. Normally an activity will be transitioned
+     * to the stopped state if it is started while the lockscreen is up, but with this flag set the
+     * activity will remain in the resumed state visible on-top of the lock screen. This value can
+     * be set as a manifest attribute using {@link android.R.attr#showWhenLocked}.
+     *
+     * @param showWhenLocked {@code true} to show the {@link Activity} on top of the lock screen;
+     *                                   {@code false} otherwise.
+     * @see #setTurnScreenOn(boolean)
+     * @see android.R.attr#turnScreenOn
+     * @see android.R.attr#showWhenLocked
+     */
+    public void setShowWhenLocked(boolean showWhenLocked) {
+        try {
+            ActivityManager.getService().setShowWhenLocked(mToken, showWhenLocked);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to call setShowWhenLocked", e);
+        }
+    }
+
+    /**
+     * Specifies whether the screen should be turned on when the {@link Activity} is resumed.
+     * Normally an activity will be transitioned to the stopped state if it is started while the
+     * screen if off, but with this flag set the activity will cause the screen to turn on if the
+     * activity will be visible and resumed due to the screen coming on. The screen will not be
+     * turned on if the activity won't be visible after the screen is turned on. This flag is
+     * normally used in conjunction with the {@link android.R.attr#showWhenLocked} flag to make sure
+     * the activity is visible after the screen is turned on when the lockscreen is up. In addition,
+     * if this flag is set and the activity calls {@link
+     * KeyguardManager#requestDismissKeyguard(Activity, KeyguardManager.KeyguardDismissCallback)}
+     * the screen will turn on.
+     *
+     * @param turnScreenOn {@code true} to turn on the screen; {@code false} otherwise.
+     *
+     * @see #setShowWhenLocked(boolean)
+     * @see android.R.attr#turnScreenOn
+     * @see android.R.attr#showWhenLocked
+     */
+    public void setTurnScreenOn(boolean turnScreenOn) {
+        try {
+            ActivityManager.getService().setTurnScreenOn(mToken, turnScreenOn);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to call setTurnScreenOn", e);
+        }
+    }
+
     class HostCallbacks extends FragmentHostCallback<Activity> {
         public HostCallbacks() {
             super(Activity.this /*activity*/);
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 7c90241..11ef9f8 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -24,42 +24,35 @@
 import android.annotation.SystemApi;
 import android.annotation.SystemService;
 import android.annotation.TestApi;
-import android.content.pm.ActivityInfo;
-import android.content.res.Configuration;
-import android.graphics.Canvas;
-import android.graphics.GraphicBuffer;
-import android.graphics.Matrix;
-import android.graphics.Point;
-import android.os.BatteryStats;
-import android.os.Build;
-import android.os.Build.VERSION_CODES;
-import android.os.IBinder;
-import android.os.ParcelFileDescriptor;
-
-import com.android.internal.app.procstats.ProcessStats;
-import com.android.internal.os.RoSystemProperties;
-import com.android.internal.os.TransferPipe;
-import com.android.internal.util.FastPrintWriter;
-import com.android.server.LocalServices;
-
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.UriPermission;
+import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.ConfigurationInfo;
 import android.content.pm.IPackageDataObserver;
 import android.content.pm.PackageManager;
 import android.content.pm.ParceledListSlice;
 import android.content.pm.UserInfo;
+import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
+import android.graphics.Canvas;
 import android.graphics.Color;
+import android.graphics.GraphicBuffer;
+import android.graphics.Matrix;
+import android.graphics.Point;
 import android.graphics.Rect;
+import android.os.BatteryStats;
+import android.os.Build;
+import android.os.Build.VERSION_CODES;
 import android.os.Bundle;
 import android.os.Debug;
 import android.os.Handler;
+import android.os.IBinder;
 import android.os.Parcel;
+import android.os.ParcelFileDescriptor;
 import android.os.Parcelable;
 import android.os.Process;
 import android.os.RemoteException;
@@ -72,6 +65,12 @@
 import android.util.Singleton;
 import android.util.Size;
 
+import com.android.internal.app.procstats.ProcessStats;
+import com.android.internal.os.RoSystemProperties;
+import com.android.internal.os.TransferPipe;
+import com.android.internal.util.FastPrintWriter;
+import com.android.server.LocalServices;
+
 import org.xmlpull.v1.XmlSerializer;
 
 import java.io.FileDescriptor;
@@ -173,6 +172,9 @@
         @Override
         public void onUidIdle(int uid, boolean disabled) {
         }
+
+        @Override public void onUidCachedChanged(int uid, boolean cached) {
+        }
     }
 
     final ArrayMap<OnUidImportanceListener, UidObserver> mImportanceListeners = new ArrayMap<>();
@@ -564,6 +566,9 @@
     /** @hide Flag for registerUidObserver: report uid has become active. */
     public static final int UID_OBSERVER_ACTIVE = 1<<3;
 
+    /** @hide Flag for registerUidObserver: report uid cached state has changed. */
+    public static final int UID_OBSERVER_CACHED = 1<<4;
+
     /** @hide Mode for {@link IActivityManager#isAppStartModeDisabled}: normal free-to-run operation. */
     public static final int APP_START_MODE_NORMAL = 0;
 
@@ -904,19 +909,6 @@
         }
 
         /**
-         * Returns true if activities contained in this stack can request visible behind by
-         * calling {@link Activity#requestVisibleBehind}.
-         *
-         * @deprecated This method's functionality is no longer supported as of
-         * {@link android.os.Build.VERSION_CODES#O} and will be removed in a future release.
-         */
-        @Deprecated
-        public static boolean activitiesCanRequestVisibleBehind(int stackId) {
-            return stackId == FULLSCREEN_WORKSPACE_STACK_ID ||
-                    stackId == ASSISTANT_STACK_ID;
-        }
-
-        /**
          * Returns true if this stack may be scaled without resizing, and windows within may need
          * to be configured as such.
          */
@@ -1108,9 +1100,8 @@
     /**
      * Returns true if this is a low-RAM device.  Exactly whether a device is low-RAM
      * is ultimately up to the device configuration, but currently it generally means
-     * something in the class of a 512MB device with about a 800x480 or less screen.
-     * This is mostly intended to be used by apps to determine whether they should turn
-     * off certain features that require more RAM.
+     * something with 1GB or less of RAM.  This is mostly intended to be used by apps
+     * to determine whether they should turn off certain features that require more RAM.
      */
     public boolean isLowRamDevice() {
         return isLowRamDeviceStatic();
@@ -2915,6 +2906,8 @@
     /**
      * @hide
      */
+    @RequiresPermission(anyOf={Manifest.permission.CLEAR_APP_USER_DATA,
+            Manifest.permission.ACCESS_INSTANT_APPS})
     public boolean clearApplicationUserData(String packageName, IPackageDataObserver observer) {
         try {
             return getService().clearApplicationUserData(packageName,
diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java
index 99a3f60..9dceb7f 100644
--- a/core/java/android/app/ActivityManagerInternal.java
+++ b/core/java/android/app/ActivityManagerInternal.java
@@ -30,8 +30,6 @@
 
 import com.android.internal.app.IVoiceInteractor;
 
-import java.io.PrintWriter;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -90,11 +88,12 @@
             String processName, String abiOverride, int uid, Runnable crashHandler);
 
     /**
-     * Acquires a sleep token with the specified tag.
+     * Acquires a sleep token for the specified display with the specified tag.
      *
      * @param tag A string identifying the purpose of the token (eg. "Dream").
+     * @param displayId The display to apply the sleep token to.
      */
-    public abstract SleepToken acquireSleepToken(@NonNull String tag);
+    public abstract SleepToken acquireSleepToken(@NonNull String tag, int displayId);
 
     /**
      * Sleep tokens cause the activity manager to put the top activity to sleep.
@@ -265,6 +264,12 @@
     public abstract void clearSavedANRState();
 
     /**
+     * Set focus on an activity.
+     * @param token The IApplicationToken for the activity
+     */
+    public abstract void setFocusedActivity(IBinder token);
+
+    /**
      * Returns {@code true} if {@code uid} is running an activity from {@code packageName}.
      */
     public abstract boolean hasRunningActivity(int uid, @Nullable String packageName);
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java
index 6dead3e..0bffc9e 100644
--- a/core/java/android/app/ActivityOptions.java
+++ b/core/java/android/app/ActivityOptions.java
@@ -195,6 +195,14 @@
     private static final String KEY_DOCK_CREATE_MODE = "android:activity.dockCreateMode";
 
     /**
+     * Determines whether to disallow the outgoing activity from entering picture-in-picture as the
+     * result of a new activity being launched.
+     * @hide
+     */
+    private static final String KEY_DISALLOW_ENTER_PICTURE_IN_PICTURE_WHILE_LAUNCHING =
+            "android:activity.disallowEnterPictureInPictureWhileLaunching";
+
+    /**
      * For Activity transitions, the calling Activity's TransitionListener used to
      * notify the called Activity when the shared element and the exit transitions
      * complete.
@@ -267,6 +275,7 @@
     private int mLaunchStackId = INVALID_STACK_ID;
     private int mLaunchTaskId = -1;
     private int mDockCreateMode = DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
+    private boolean mDisallowEnterPictureInPictureWhileLaunching;
     private boolean mTaskOverlay;
     private boolean mTaskOverlayCanResume;
     private AppTransitionAnimationSpec mAnimSpecs[];
@@ -856,6 +865,8 @@
         mTaskOverlay = opts.getBoolean(KEY_TASK_OVERLAY, false);
         mTaskOverlayCanResume = opts.getBoolean(KEY_TASK_OVERLAY_CAN_RESUME, false);
         mDockCreateMode = opts.getInt(KEY_DOCK_CREATE_MODE, DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT);
+        mDisallowEnterPictureInPictureWhileLaunching = opts.getBoolean(
+                KEY_DISALLOW_ENTER_PICTURE_IN_PICTURE_WHILE_LAUNCHING, false);
         if (opts.containsKey(KEY_ANIM_SPECS)) {
             Parcelable[] specs = opts.getParcelableArray(KEY_ANIM_SPECS);
             mAnimSpecs = new AppTransitionAnimationSpec[specs.length];
@@ -1121,6 +1132,16 @@
         mDockCreateMode = dockCreateMode;
     }
 
+    /** @hide */
+    public void setDisallowEnterPictureInPictureWhileLaunching(boolean disallow) {
+        mDisallowEnterPictureInPictureWhileLaunching = disallow;
+    }
+
+    /** @hide */
+    public boolean disallowEnterPictureInPictureWhileLaunching() {
+        return mDisallowEnterPictureInPictureWhileLaunching;
+    }
+
     /**
      * Update the current values in this ActivityOptions from those supplied
      * in <var>otherOptions</var>.  Any values
@@ -1275,6 +1296,8 @@
         b.putBoolean(KEY_TASK_OVERLAY, mTaskOverlay);
         b.putBoolean(KEY_TASK_OVERLAY_CAN_RESUME, mTaskOverlayCanResume);
         b.putInt(KEY_DOCK_CREATE_MODE, mDockCreateMode);
+        b.putBoolean(KEY_DISALLOW_ENTER_PICTURE_IN_PICTURE_WHILE_LAUNCHING,
+                mDisallowEnterPictureInPictureWhileLaunching);
         if (mAnimSpecs != null) {
             b.putParcelableArray(KEY_ANIM_SPECS, mAnimSpecs);
         }
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 895b448..45f7eba 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -100,6 +100,7 @@
 import android.util.EventLog;
 import android.util.Log;
 import android.util.LogPrinter;
+import android.util.LogWriter;
 import android.util.Pair;
 import android.util.PrintWriterPrinter;
 import android.util.Slog;
@@ -122,10 +123,10 @@
 import com.android.internal.content.ReferrerIntent;
 import com.android.internal.os.BinderInternal;
 import com.android.internal.os.RuntimeInit;
-import com.android.internal.os.SamplingProfilerIntegration;
 import com.android.internal.os.SomeArgs;
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.FastPrintWriter;
+import com.android.internal.util.IndentingPrintWriter;
 import com.android.org.conscrypt.OpenSSLSocketImpl;
 import com.android.org.conscrypt.TrustedCertificateStore;
 
@@ -134,8 +135,6 @@
 import dalvik.system.VMDebug;
 import dalvik.system.VMRuntime;
 
-import com.google.android.collect.Lists;
-
 import libcore.io.DropBox;
 import libcore.io.EventLogger;
 import libcore.io.IoUtils;
@@ -153,6 +152,7 @@
 import java.net.InetAddress;
 import java.text.DateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -446,7 +446,6 @@
                 sb.append(", startedActivity=").append(activity.mStartedActivity);
                 sb.append(", temporaryPause=").append(activity.mTemporaryPause);
                 sb.append(", changingConfigurations=").append(activity.mChangingConfigurations);
-                sb.append(", visibleBehind=").append(activity.mVisibleBehind);
                 sb.append("}");
             }
             sb.append("}");
@@ -659,6 +658,9 @@
     }
 
     static final class DumpHeapData {
+        public boolean managed;
+        public boolean mallocInfo;
+        public boolean runGc;
         String path;
         ParcelFileDescriptor fd;
     }
@@ -1024,11 +1026,16 @@
             sendMessage(H.PROFILER_CONTROL, profilerInfo, start ? 1 : 0, profileType);
         }
 
-        public void dumpHeap(boolean managed, String path, ParcelFileDescriptor fd) {
+        @Override
+        public void dumpHeap(boolean managed, boolean mallocInfo, boolean runGc, String path,
+                ParcelFileDescriptor fd) {
             DumpHeapData dhd = new DumpHeapData();
+            dhd.managed = managed;
+            dhd.mallocInfo = mallocInfo;
+            dhd.runGc = runGc;
             dhd.path = path;
             dhd.fd = fd;
-            sendMessage(H.DUMP_HEAP, dhd, managed ? 1 : 0, 0, true /*async*/);
+            sendMessage(H.DUMP_HEAP, dhd, 0, 0, true /*async*/);
         }
 
         public void attachAgent(String agent) {
@@ -1385,16 +1392,6 @@
         }
 
         @Override
-        public void scheduleCancelVisibleBehind(IBinder token) {
-            sendMessage(H.CANCEL_VISIBLE_BEHIND, token);
-        }
-
-        @Override
-        public void scheduleBackgroundVisibleBehindChanged(IBinder token, boolean visible) {
-            sendMessage(H.BACKGROUND_VISIBLE_BEHIND_CHANGED, token, visible ? 1 : 0);
-        }
-
-        @Override
         public void scheduleEnterAnimationComplete(IBinder token) {
             sendMessage(H.ENTER_ANIMATION_COMPLETE, token);
         }
@@ -1510,8 +1507,6 @@
         public static final int TRANSLUCENT_CONVERSION_COMPLETE = 144;
         public static final int INSTALL_PROVIDER        = 145;
         public static final int ON_NEW_ACTIVITY_OPTIONS = 146;
-        public static final int CANCEL_VISIBLE_BEHIND = 147;
-        public static final int BACKGROUND_VISIBLE_BEHIND_CHANGED = 148;
         public static final int ENTER_ANIMATION_COMPLETE = 149;
         public static final int START_BINDER_TRACKING = 150;
         public static final int STOP_BINDER_TRACKING_AND_DUMP = 151;
@@ -1572,8 +1567,6 @@
                     case TRANSLUCENT_CONVERSION_COMPLETE: return "TRANSLUCENT_CONVERSION_COMPLETE";
                     case INSTALL_PROVIDER: return "INSTALL_PROVIDER";
                     case ON_NEW_ACTIVITY_OPTIONS: return "ON_NEW_ACTIVITY_OPTIONS";
-                    case CANCEL_VISIBLE_BEHIND: return "CANCEL_VISIBLE_BEHIND";
-                    case BACKGROUND_VISIBLE_BEHIND_CHANGED: return "BACKGROUND_VISIBLE_BEHIND_CHANGED";
                     case ENTER_ANIMATION_COMPLETE: return "ENTER_ANIMATION_COMPLETE";
                     case MULTI_WINDOW_MODE_CHANGED: return "MULTI_WINDOW_MODE_CHANGED";
                     case PICTURE_IN_PICTURE_MODE_CHANGED: return "PICTURE_IN_PICTURE_MODE_CHANGED";
@@ -1608,7 +1601,6 @@
                     handlePauseActivity((IBinder) args.arg1, false,
                             (args.argi1 & USER_LEAVING) != 0, args.argi2,
                             (args.argi1 & DONT_REPORT) != 0, args.argi3);
-                    maybeSnapshot();
                     Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
                 } break;
                 case PAUSE_ACTIVITY_FINISHING: {
@@ -1678,7 +1670,6 @@
                 case RECEIVER:
                     Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "broadcastReceiveComp");
                     handleReceiver((ReceiverData)msg.obj);
-                    maybeSnapshot();
                     Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
                     break;
                 case CREATE_SERVICE:
@@ -1704,7 +1695,6 @@
                 case STOP_SERVICE:
                     Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "serviceStop");
                     handleStopService((IBinder)msg.obj);
-                    maybeSnapshot();
                     Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
                     break;
                 case CONFIGURATION_CHANGED:
@@ -1777,7 +1767,7 @@
                 case SCHEDULE_CRASH:
                     throw new RemoteServiceException((String)msg.obj);
                 case DUMP_HEAP:
-                    handleDumpHeap(msg.arg1 != 0, (DumpHeapData)msg.obj);
+                    handleDumpHeap((DumpHeapData) msg.obj);
                     break;
                 case DUMP_ACTIVITY:
                     handleDumpActivity((DumpComponentInfo)msg.obj);
@@ -1819,12 +1809,6 @@
                     Pair<IBinder, ActivityOptions> pair = (Pair<IBinder, ActivityOptions>) msg.obj;
                     onNewActivityOptions(pair.first, pair.second);
                     break;
-                case CANCEL_VISIBLE_BEHIND:
-                    handleCancelVisibleBehind((IBinder) msg.obj);
-                    break;
-                case BACKGROUND_VISIBLE_BEHIND_CHANGED:
-                    handleOnBackgroundVisibleBehindChanged((IBinder) msg.obj, msg.arg1 > 0);
-                    break;
                 case ENTER_ANIMATION_COMPLETE:
                     handleEnterAnimationComplete((IBinder) msg.obj);
                     break;
@@ -1866,32 +1850,6 @@
             }
             if (DEBUG_MESSAGES) Slog.v(TAG, "<<< done: " + codeToString(msg.what));
         }
-
-        private void maybeSnapshot() {
-            if (mBoundApplication != null && SamplingProfilerIntegration.isEnabled()) {
-                // convert the *private* ActivityThread.PackageInfo to *public* known
-                // android.content.pm.PackageInfo
-                String packageName = mBoundApplication.info.mPackageName;
-                android.content.pm.PackageInfo packageInfo = null;
-                try {
-                    Context context = getSystemContext();
-                    if(context == null) {
-                        Log.e(TAG, "cannot get a valid context");
-                        return;
-                    }
-                    PackageManager pm = context.getPackageManager();
-                    if(pm == null) {
-                        Log.e(TAG, "cannot get a valid PackageManager");
-                        return;
-                    }
-                    packageInfo = pm.getPackageInfo(
-                            packageName, PackageManager.GET_ACTIVITIES);
-                } catch (NameNotFoundException e) {
-                    Log.e(TAG, "cannot get package info for " + packageName, e);
-                }
-                SamplingProfilerIntegration.writeSnapshot(mBoundApplication.processName, packageInfo);
-            }
-        }
     }
 
     private class Idler implements MessageQueue.IdleHandler {
@@ -2708,14 +2666,8 @@
         Activity activity = null;
         try {
             java.lang.ClassLoader cl = appContext.getClassLoader();
-            if (appContext.getApplicationContext() instanceof Application) {
-                activity = ((Application) appContext.getApplicationContext())
-                        .instantiateActivity(cl, component.getClassName(), r.intent);
-            }
-            if (activity == null) {
-                activity = mInstrumentation.newActivity(
-                        cl, component.getClassName(), r.intent);
-            }
+            activity = mInstrumentation.newActivity(
+                    cl, component.getClassName(), r.intent);
             StrictMode.incrementExpectedActivityCount(activity.getClass());
             r.intent.setExtrasClassLoader(cl);
             r.intent.prepareToEnterProcess();
@@ -2992,6 +2944,7 @@
             r.activity.mTemporaryPause = true;
             mInstrumentation.callActivityOnPause(r.activity);
         }
+        checkAndBlockForNetworkAccess();
         deliverNewIntents(r, intents);
         if (resumed) {
             r.activity.performResume();
@@ -3099,40 +3052,10 @@
         }
     }
 
-    public void handleCancelVisibleBehind(IBinder token) {
-        ActivityClientRecord r = mActivities.get(token);
-        if (r != null) {
-            mSomeActivitiesChanged = true;
-            final Activity activity = r.activity;
-            if (activity.mVisibleBehind) {
-                activity.mCalled = false;
-                activity.onVisibleBehindCanceled();
-                // Tick, tick, tick. The activity has 500 msec to return or it will be destroyed.
-                if (!activity.mCalled) {
-                    throw new SuperNotCalledException("Activity " + activity.getLocalClassName() +
-                            " did not call through to super.onVisibleBehindCanceled()");
-                }
-                activity.mVisibleBehind = false;
-            }
-        }
-        try {
-            ActivityManager.getService().backgroundResourcesReleased(token);
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-    }
-
-    public void handleOnBackgroundVisibleBehindChanged(IBinder token, boolean visible) {
-        ActivityClientRecord r = mActivities.get(token);
-        if (r != null) {
-            r.activity.onBackgroundVisibleBehindChanged(visible);
-        }
-    }
-
     public void handleInstallProvider(ProviderInfo info) {
         final StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
         try {
-            installContentProviders(mInitialApplication, Lists.newArrayList(info));
+            installContentProviders(mInitialApplication, Arrays.asList(info));
         } finally {
             StrictMode.setThreadPolicy(oldPolicy);
         }
@@ -3240,8 +3163,7 @@
             data.intent.setExtrasClassLoader(cl);
             data.intent.prepareToEnterProcess();
             data.setExtrasClassLoader(cl);
-            receiver = instantiate(cl, component, data.intent, app,
-                    Application::instantiateReceiver);
+            receiver = (BroadcastReceiver)cl.loadClass(component).newInstance();
         } catch (Exception e) {
             if (DEBUG_BROADCAST) Slog.i(TAG,
                     "Finishing failed broadcast to " + data.intent.getComponent());
@@ -3329,13 +3251,12 @@
             } else {
                 try {
                     if (DEBUG_BACKUP) Slog.v(TAG, "Initializing agent class " + classname);
-                    ContextImpl context = ContextImpl.createAppContext(this, packageInfo);
 
                     java.lang.ClassLoader cl = packageInfo.getClassLoader();
-                    agent = instantiate(cl, classname, context,
-                            Application::instantiateBackupAgent);
+                    agent = (BackupAgent) cl.loadClass(classname).newInstance();
 
                     // set up the agent's context
+                    ContextImpl context = ContextImpl.createAppContext(this, packageInfo);
                     context.setOuterContext(agent);
                     agent.attach(context);
 
@@ -3395,12 +3316,9 @@
         LoadedApk packageInfo = getPackageInfoNoCheck(
                 data.info.applicationInfo, data.compatInfo);
         Service service = null;
-        Application app = null;
         try {
-            app = packageInfo.makeApplication(false, mInstrumentation);
             java.lang.ClassLoader cl = packageInfo.getClassLoader();
-            service = instantiate(cl, data.info.name, data.intent, app,
-                    Application::instantiateService);
+            service = (Service) cl.loadClass(data.info.name).newInstance();
         } catch (Exception e) {
             if (!mInstrumentation.onException(service, e)) {
                 throw new RuntimeException(
@@ -3415,6 +3333,7 @@
             ContextImpl context = ContextImpl.createAppContext(this, packageInfo);
             context.setOuterContext(service);
 
+            Application app = packageInfo.makeApplication(false, mInstrumentation);
             service.attach(context, this, data.info.name, data.token, app,
                     ActivityManager.getService());
             service.onCreate();
@@ -3625,6 +3544,7 @@
             try {
                 r.activity.onStateNotSaved();
                 r.activity.mFragments.noteStateNotSaved();
+                checkAndBlockForNetworkAccess();
                 if (r.pendingIntents != null) {
                     deliverNewIntents(r, r.pendingIntents);
                     r.pendingIntents = null;
@@ -4014,6 +3934,14 @@
                 ActivityManager.getService().activityStopped(
                     activity.token, state, persistentState, description);
             } catch (RemoteException ex) {
+                // Dump statistics about bundle to help developers debug
+                final LogWriter writer = new LogWriter(Log.WARN, TAG);
+                final IndentingPrintWriter pw = new IndentingPrintWriter(writer, "  ");
+                pw.println("Bundle stats:");
+                Bundle.dumpStats(pw, state);
+                pw.println("PersistableBundle stats:");
+                Bundle.dumpStats(pw, persistentState);
+
                 if (ex instanceof TransactionTooLargeException
                         && activity.packageInfo.getTargetSdkVersion() < Build.VERSION_CODES.N) {
                     Log.e(TAG, "App sent too much data in instance state, so it was ignored", ex);
@@ -4380,6 +4308,7 @@
                     }
                 }
             }
+            checkAndBlockForNetworkAccess();
             deliverResults(r, res.results);
             if (resumed) {
                 r.activity.performResume();
@@ -5225,11 +5154,7 @@
                 Slog.w(TAG, "Profiling failed on path " + profilerInfo.profileFile
                         + " -- can the process access this path?");
             } finally {
-                try {
-                    profilerInfo.profileFd.close();
-                } catch (IOException e) {
-                    Slog.w(TAG, "Failure closing profile fd", e);
-                }
+                profilerInfo.closeFd();
             }
         } else {
             switch (profileType) {
@@ -5252,8 +5177,13 @@
         }
     }
 
-    static final void handleDumpHeap(boolean managed, DumpHeapData dhd) {
-        if (managed) {
+    static void handleDumpHeap(DumpHeapData dhd) {
+        if (dhd.runGc) {
+            System.gc();
+            System.runFinalization();
+            System.gc();
+        }
+        if (dhd.managed) {
             try {
                 Debug.dumpHprofData(dhd.path, dhd.fd.getFileDescriptor());
             } catch (IOException e) {
@@ -5266,6 +5196,8 @@
                     Slog.w(TAG, "Failure closing profile fd", e);
                 }
             }
+        } else if (dhd.mallocInfo) {
+            Debug.dumpNativeMallocInfo(dhd.fd.getFileDescriptor());
         } else {
             Debug.dumpNativeHeap(dhd.fd.getFileDescriptor());
         }
@@ -5335,7 +5267,7 @@
                                 final ApplicationInfo aInfo =
                                         sPackageManager.getApplicationInfo(
                                                 packageName,
-                                                0 /*flags*/,
+                                                PackageManager.GET_SHARED_LIBRARY_FILES,
                                                 UserHandle.myUserId());
 
                                 if (mActivities.size() > 0) {
@@ -5740,8 +5672,8 @@
 
             try {
                 final ClassLoader cl = instrContext.getClassLoader();
-                mInstrumentation = instantiate(cl, data.instrumentationName.getClassName(),
-                        instrContext, Application::instantiateInstrumentation);
+                mInstrumentation = (Instrumentation)
+                    cl.loadClass(data.instrumentationName.getClassName()).newInstance();
             } catch (Exception e) {
                 throw new RuntimeException(
                     "Unable to instantiate instrumentation "
@@ -5774,11 +5706,13 @@
         // Allow disk access during application and provider setup. This could
         // block processing ordered broadcasts, but later processing would
         // probably end up doing the same disk access.
+        Application app;
         final StrictMode.ThreadPolicy savedPolicy = StrictMode.allowThreadDiskWrites();
+        final StrictMode.ThreadPolicy writesAllowedPolicy = StrictMode.getThreadPolicy();
         try {
             // If the app is being launched for full backup or restore, bring it up in
             // a restricted environment with the base application class.
-            Application app = data.info.makeApplication(data.restrictedBackupMode, null);
+            app = data.info.makeApplication(data.restrictedBackupMode, null);
             mInitialApplication = app;
 
             // don't bring up providers in restricted mode; they may depend on the
@@ -5802,18 +5736,22 @@
                     "Exception thrown in onCreate() of "
                     + data.instrumentationName + ": " + e.toString(), e);
             }
-
             try {
                 mInstrumentation.callApplicationOnCreate(app);
             } catch (Exception e) {
                 if (!mInstrumentation.onException(app, e)) {
                     throw new RuntimeException(
-                        "Unable to create application " + app.getClass().getName()
-                        + ": " + e.toString(), e);
+                      "Unable to create application " + app.getClass().getName()
+                      + ": " + e.toString(), e);
                 }
             }
         } finally {
-            StrictMode.setThreadPolicy(savedPolicy);
+            // If the app targets < O-MR1, or doesn't change the thread policy
+            // during startup, clobber the policy to maintain behavior of b/36951662
+            if (data.appInfo.targetSdkVersion <= Build.VERSION_CODES.O
+                    || StrictMode.getThreadPolicy().equals(writesAllowedPolicy)) {
+                StrictMode.setThreadPolicy(savedPolicy);
+            }
         }
 
         // Preload fonts resources
@@ -5828,7 +5766,7 @@
                 final int preloadedFontsResource = info.metaData.getInt(
                         ApplicationInfo.METADATA_PRELOADED_FONTS, 0);
                 if (preloadedFontsResource != 0) {
-                    data.info.mResources.preloadFonts(preloadedFontsResource);
+                    data.info.getResources().preloadFonts(preloadedFontsResource);
                 }
             }
         } catch (RemoteException e) {
@@ -6286,8 +6224,8 @@
 
             try {
                 final java.lang.ClassLoader cl = c.getClassLoader();
-                localProvider = instantiate(cl, info.name, context,
-                        Application::instantiateProvider);
+                localProvider = (ContentProvider)cl.
+                    loadClass(info.name).newInstance();
                 provider = localProvider.getIContentProvider();
                 if (provider == null) {
                     Slog.e(TAG, "Failed to instantiate class " +
@@ -6486,49 +6424,6 @@
         }
     }
 
-    private <T> T instantiate(ClassLoader cl, String className, Context c,
-            Instantiator<T> instantiator)
-            throws ClassNotFoundException, IllegalAccessException, InstantiationException {
-        Application app = getApp(c);
-        if (app != null) {
-            T a = instantiator.instantiate(app, cl, className);
-            if (a != null) return a;
-        }
-        return (T) cl.loadClass(className).newInstance();
-    }
-
-    private <T> T instantiate(ClassLoader cl, String className, Intent intent, Context c,
-            IntentInstantiator<T> instantiator)
-            throws ClassNotFoundException, IllegalAccessException, InstantiationException {
-        Application app = getApp(c);
-        if (app != null) {
-            T a = instantiator.instantiate(app, cl, className, intent);
-            if (a != null) return a;
-        }
-        return (T) cl.loadClass(className).newInstance();
-    }
-
-    private Application getApp(Context c) {
-        // We need this shortcut to avoid actually calling getApplicationContext() on an Application
-        // because the Application may not return itself for getApplicationContext() because the
-        // API doesn't enforce it.
-        if (c instanceof Application) return (Application) c;
-        if (c.getApplicationContext() instanceof Application) {
-            return (Application) c.getApplicationContext();
-        }
-        return null;
-    }
-
-    private interface Instantiator<T> {
-        T instantiate(Application app, ClassLoader cl, String className)
-                throws ClassNotFoundException, IllegalAccessException, InstantiationException;
-    }
-
-    private interface IntentInstantiator<T> {
-        T instantiate(Application app, ClassLoader cl, String className, Intent intent)
-                throws ClassNotFoundException, IllegalAccessException, InstantiationException;
-    }
-
     private static class EventLoggingReporter implements EventLogger.Reporter {
         @Override
         public void report (int code, Object... list) {
@@ -6563,7 +6458,6 @@
 
     public static void main(String[] args) {
         Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "ActivityThreadMain");
-        SamplingProfilerIntegration.start();
 
         // CloseGuard defaults to true and can be quite spammy.  We
         // disable it here, but selectively enable it later (via
diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java
index 7d4d70d..9b2bfc5 100644
--- a/core/java/android/app/ActivityTransitionCoordinator.java
+++ b/core/java/android/app/ActivityTransitionCoordinator.java
@@ -1006,9 +1006,12 @@
         final int numElements = mTransitioningViews == null ? 0 : mTransitioningViews.size();
         for (int i = 0; i < numElements; i++) {
             final View view = mTransitioningViews.get(i);
-            view.setTransitionVisibility(visiblity);
             if (invalidate) {
-                view.invalidate();
+                // Allow the view to be invalidated by the visibility change
+                view.setVisibility(visiblity);
+            } else {
+                // Don't invalidate the view with the visibility change
+                view.setTransitionVisibility(visiblity);
             }
         }
     }
diff --git a/core/java/android/app/ActivityView.java b/core/java/android/app/ActivityView.java
index 29b83dc..9f1e983 100644
--- a/core/java/android/app/ActivityView.java
+++ b/core/java/android/app/ActivityView.java
@@ -1,5 +1,5 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
+/**
+ * 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.
@@ -16,17 +16,12 @@
 
 package android.app;
 
-import static android.app.ActivityManager.START_CANCELED;
-
+import android.annotation.NonNull;
 import android.content.Context;
-import android.content.ContextWrapper;
-import android.content.IIntentSender;
 import android.content.Intent;
-import android.content.IntentSender;
-import android.graphics.SurfaceTexture;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.OperationCanceledException;
+import android.hardware.display.DisplayManager;
+import android.hardware.display.VirtualDisplay;
+import android.hardware.input.InputManager;
 import android.os.RemoteException;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
@@ -35,163 +30,177 @@
 import android.view.InputEvent;
 import android.view.MotionEvent;
 import android.view.Surface;
-import android.view.TextureView;
-import android.view.TextureView.SurfaceTextureListener;
-import android.view.View;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
 import android.view.ViewGroup;
 import android.view.WindowManager;
+
 import dalvik.system.CloseGuard;
 
-import java.lang.ref.WeakReference;
-import java.util.ArrayDeque;
-import java.util.concurrent.Executor;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import com.android.internal.annotations.GuardedBy;
-
-
-/** @hide */
+/**
+ * Activity container that allows launching activities into itself and does input forwarding.
+ * <p>Creation of this view is only allowed to callers who have
+ * {@link android.Manifest.permission#INJECT_EVENTS} permission.
+ * <p>Activity launching into this container is restricted by the same rules that apply to launching
+ * on VirtualDisplays.
+ * @hide
+ */
 public class ActivityView extends ViewGroup {
+
+    private static final String DISPLAY_NAME = "ActivityViewVirtualDisplay";
     private static final String TAG = "ActivityView";
-    private static final boolean DEBUG = false;
 
-    private static final int MSG_SET_SURFACE = 1;
-
-    private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
-    private static final int MINIMUM_POOL_SIZE = 1;
-    private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
-    private static final int KEEP_ALIVE = 1;
-
-    private static final ThreadFactory sThreadFactory = new ThreadFactory() {
-        private final AtomicInteger mCount = new AtomicInteger(1);
-
-        public Thread newThread(Runnable r) {
-            return new Thread(r, "ActivityView #" + mCount.getAndIncrement());
-        }
-    };
-
-    private static final BlockingQueue<Runnable> sPoolWorkQueue =
-            new LinkedBlockingQueue<Runnable>(128);
-
-    /**
-     * An {@link Executor} that can be used to execute tasks in parallel.
-     */
-    private static final Executor sExecutor = new ThreadPoolExecutor(MINIMUM_POOL_SIZE,
-            MAXIMUM_POOL_SIZE, KEEP_ALIVE, TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);
-
-
-    private static class SerialExecutor implements Executor {
-        private final ArrayDeque<Runnable> mTasks = new ArrayDeque<Runnable>();
-        private Runnable mActive;
-
-        public synchronized void execute(final Runnable r) {
-            mTasks.offer(new Runnable() {
-                public void run() {
-                    try {
-                        r.run();
-                    } finally {
-                        scheduleNext();
-                    }
-                }
-            });
-            if (mActive == null) {
-                scheduleNext();
-            }
-        }
-
-        protected synchronized void scheduleNext() {
-            if ((mActive = mTasks.poll()) != null) {
-                sExecutor.execute(mActive);
-            }
-        }
-    }
-
-    private final SerialExecutor mExecutor = new SerialExecutor();
-
-    private final int mDensityDpi;
-    private final TextureView mTextureView;
-
-    @GuardedBy("mActivityContainerLock")
-    private ActivityContainerWrapper mActivityContainer;
-    private Object mActivityContainerLock = new Object();
-
-    private Activity mActivity;
-    private int mWidth;
-    private int mHeight;
+    private VirtualDisplay mVirtualDisplay;
+    private final SurfaceView mSurfaceView;
     private Surface mSurface;
-    private int mLastVisibility;
-    private ActivityViewCallback mActivityViewCallback;
 
+    private final SurfaceCallback mSurfaceCallback;
+    private StateCallback mActivityViewCallback;
+
+    private IInputForwarder mInputForwarder;
+
+    private final CloseGuard mGuard = CloseGuard.get();
+    private boolean mOpened; // Protected by mGuard.
 
     public ActivityView(Context context) {
-        this(context, null);
+        this(context, null /* attrs */);
     }
 
     public ActivityView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
+        this(context, attrs, 0 /* defStyle */);
     }
 
     public ActivityView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
 
-        while (context instanceof ContextWrapper) {
-            if (context instanceof Activity) {
-                mActivity = (Activity)context;
-                break;
-            }
-            context = ((ContextWrapper)context).getBaseContext();
-        }
-        if (mActivity == null) {
-            throw new IllegalStateException("The ActivityView's Context is not an Activity.");
-        }
+        mSurfaceView = new SurfaceView(context);
+        mSurfaceCallback = new SurfaceCallback();
+        mSurfaceView.getHolder().addCallback(mSurfaceCallback);
+        addView(mSurfaceView);
 
+        mOpened = true;
+        mGuard.open("release");
+    }
+
+    /** Callback that notifies when the container is ready or destroyed. */
+    public abstract static class StateCallback {
+        /**
+         * Called when the container is ready for launching activities. Calling
+         * {@link #startActivity(Intent)} prior to this callback will result in an
+         * {@link IllegalStateException}.
+         *
+         * @see #startActivity(Intent)
+         */
+        public abstract void onActivityViewReady(ActivityView view);
+        /**
+         * Called when the container can no longer launch activities. Calling
+         * {@link #startActivity(Intent)} after this callback will result in an
+         * {@link IllegalStateException}.
+         *
+         * @see #startActivity(Intent)
+         */
+        public abstract void onActivityViewDestroyed(ActivityView view);
+    }
+
+    /**
+     * Set the callback to be notified about state changes.
+     * <p>This class must finish initializing before {@link #startActivity(Intent)} can be called.
+     * <p>Note: If the instance was ready prior to this call being made, then
+     * {@link StateCallback#onActivityViewReady(ActivityView)} will be called from within
+     * this method call.
+     *
+     * @param callback The callback to report events to.
+     *
+     * @see StateCallback
+     * @see #startActivity(Intent)
+     */
+    public void setCallback(StateCallback callback) {
+        mActivityViewCallback = callback;
+
+        if (mVirtualDisplay != null && mActivityViewCallback != null) {
+            mActivityViewCallback.onActivityViewReady(this);
+        }
+    }
+
+    /**
+     * Launch a new activity into this container.
+     * <p>Activity resolved by the provided {@link Intent} must have
+     * {@link android.R.attr#resizeableActivity} attribute set to {@code true} in order to be
+     * launched here. Also, if activity is not owned by the owner of this container, it must allow
+     * embedding and the caller must have permission to embed.
+     * <p>Note: This class must finish initializing and
+     * {@link StateCallback#onActivityViewReady(ActivityView)} callback must be triggered before
+     * this method can be called.
+     *
+     * @param intent Intent used to launch an activity.
+     *
+     * @see StateCallback
+     * @see #startActivity(PendingIntent)
+     */
+    public void startActivity(@NonNull Intent intent) {
+        final ActivityOptions options = prepareActivityOptions();
+        getContext().startActivity(intent, options.toBundle());
+    }
+
+    /**
+     * Launch a new activity into this container.
+     * <p>Activity resolved by the provided {@link PendingIntent} must have
+     * {@link android.R.attr#resizeableActivity} attribute set to {@code true} in order to be
+     * launched here. Also, if activity is not owned by the owner of this container, it must allow
+     * embedding and the caller must have permission to embed.
+     * <p>Note: This class must finish initializing and
+     * {@link StateCallback#onActivityViewReady(ActivityView)} callback must be triggered before
+     * this method can be called.
+     *
+     * @param pendingIntent Intent used to launch an activity.
+     *
+     * @see StateCallback
+     * @see #startActivity(Intent)
+     */
+    public void startActivity(@NonNull PendingIntent pendingIntent) {
+        final ActivityOptions options = prepareActivityOptions();
         try {
-            mActivityContainer = new ActivityContainerWrapper(
-                    ActivityManager.getService().createVirtualActivityContainer(
-                            mActivity.getActivityToken(), new ActivityContainerCallback(this)));
-        } catch (RemoteException e) {
-            throw new RuntimeException("ActivityView: Unable to create ActivityContainer. "
-                    + e);
+            pendingIntent.send(null /* context */, 0 /* code */, null /* intent */,
+                    null /* onFinished */, null /* handler */, null /* requiredPermission */,
+                    options.toBundle());
+        } catch (PendingIntent.CanceledException e) {
+            throw new RuntimeException(e);
         }
+    }
 
-        mTextureView = new TextureView(context);
-        mTextureView.setSurfaceTextureListener(new ActivityViewSurfaceTextureListener());
-        addView(mTextureView);
+    /**
+     * Check if container is ready to launch and create {@link ActivityOptions} to target the
+     * virtual display.
+     */
+    private ActivityOptions prepareActivityOptions() {
+        if (mVirtualDisplay == null) {
+            throw new IllegalStateException(
+                    "Trying to start activity before ActivityView is ready.");
+        }
+        final ActivityOptions options = ActivityOptions.makeBasic();
+        options.setLaunchDisplayId(mVirtualDisplay.getDisplay().getDisplayId());
+        return options;
+    }
 
-        WindowManager wm = (WindowManager)mActivity.getSystemService(Context.WINDOW_SERVICE);
-        DisplayMetrics metrics = new DisplayMetrics();
-        wm.getDefaultDisplay().getMetrics(metrics);
-        mDensityDpi = metrics.densityDpi;
-
-        mLastVisibility = getVisibility();
-
-        if (DEBUG) Log.v(TAG, "ctor()");
+    /**
+     * Release this container. Activity launching will no longer be permitted.
+     * <p>Note: Calling this method is allowed after
+     * {@link StateCallback#onActivityViewReady(ActivityView)} callback was triggered and before
+     * {@link StateCallback#onActivityViewDestroyed(ActivityView)}.
+     *
+     * @see StateCallback
+     */
+    public void release() {
+        if (mVirtualDisplay == null) {
+            throw new IllegalStateException(
+                    "Trying to release container that is not initialized.");
+        }
+        performRelease();
     }
 
     @Override
-    protected void onLayout(boolean changed, int l, int t, int r, int b) {
-        mTextureView.layout(0, 0, r - l, b - t);
-    }
-
-    @Override
-    protected void onVisibilityChanged(View changedView, final int visibility) {
-        super.onVisibilityChanged(changedView, visibility);
-
-        if (mSurface != null && (visibility == View.GONE || mLastVisibility == View.GONE)) {
-            if (DEBUG) Log.v(TAG, "visibility changed; enqueing runnable");
-            final Surface surface = (visibility == View.GONE) ? null : mSurface;
-            setSurfaceAsync(surface, mWidth, mHeight, mDensityDpi, false);
-        }
-        mLastVisibility = visibility;
-    }
-
-    private boolean injectInputEvent(InputEvent event) {
-        return mActivityContainer != null && mActivityContainer.injectEvent(event);
+    public void onLayout(boolean changed, int l, int t, int r, int b) {
+        mSurfaceView.layout(0 /* left */, 0 /* top */, r - l /* right */, b - t /* bottom */);
     }
 
     @Override
@@ -209,76 +218,86 @@
         return super.onGenericMotionEvent(event);
     }
 
-    @Override
-    public void onAttachedToWindow() {
-        if (DEBUG) Log.v(TAG, "onAttachedToWindow(): mActivityContainer=" + mActivityContainer +
-                " mSurface=" + mSurface);
-    }
-
-    @Override
-    public void onDetachedFromWindow() {
-        if (DEBUG) Log.v(TAG, "onDetachedFromWindow(): mActivityContainer=" + mActivityContainer +
-                " mSurface=" + mSurface);
-    }
-
-    public boolean isAttachedToDisplay() {
-        return mSurface != null;
-    }
-
-    public void startActivity(Intent intent) {
-        if (mActivityContainer == null) {
-            throw new IllegalStateException("Attempt to call startActivity after release");
+    private boolean injectInputEvent(InputEvent event) {
+        if (mInputForwarder != null) {
+            try {
+                return mInputForwarder.forwardEvent(event);
+            } catch (RemoteException e) {
+                e.rethrowAsRuntimeException();
+            }
         }
-        if (mSurface == null) {
-            throw new IllegalStateException("Surface not yet created.");
+        return false;
+    }
+
+    private class SurfaceCallback implements SurfaceHolder.Callback {
+        @Override
+        public void surfaceCreated(SurfaceHolder surfaceHolder) {
+            mSurface = mSurfaceView.getHolder().getSurface();
+            if (mVirtualDisplay == null) {
+                initVirtualDisplay();
+                if (mVirtualDisplay != null && mActivityViewCallback != null) {
+                    mActivityViewCallback.onActivityViewReady(ActivityView.this);
+                }
+            } else {
+                mVirtualDisplay.setSurface(surfaceHolder.getSurface());
+            }
         }
-        if (DEBUG) Log.v(TAG, "startActivity(): intent=" + intent + " " +
-                (isAttachedToDisplay() ? "" : "not") + " attached");
-        if (mActivityContainer.startActivity(intent) == START_CANCELED) {
-            throw new OperationCanceledException();
+
+        @Override
+        public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {
+            if (mVirtualDisplay != null) {
+                mVirtualDisplay.resize(width, height, getBaseDisplayDensity());
+            }
+        }
+
+        @Override
+        public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
+            mSurface.release();
+            mSurface = null;
+            if (mVirtualDisplay != null) {
+                mVirtualDisplay.setSurface(null);
+            }
         }
     }
 
-    public void startActivity(IntentSender intentSender) {
-        if (mActivityContainer == null) {
-            throw new IllegalStateException("Attempt to call startActivity after release");
+    private void initVirtualDisplay() {
+        if (mVirtualDisplay != null) {
+            throw new IllegalStateException("Trying to initialize for the second time.");
         }
-        if (mSurface == null) {
-            throw new IllegalStateException("Surface not yet created.");
-        }
-        if (DEBUG) Log.v(TAG, "startActivityIntentSender(): intentSender=" + intentSender + " " +
-                (isAttachedToDisplay() ? "" : "not") + " attached");
-        final IIntentSender iIntentSender = intentSender.getTarget();
-        if (mActivityContainer.startActivityIntentSender(iIntentSender) == START_CANCELED) {
-            throw new OperationCanceledException();
-        }
-    }
 
-    public void startActivity(PendingIntent pendingIntent) {
-        if (mActivityContainer == null) {
-            throw new IllegalStateException("Attempt to call startActivity after release");
-        }
-        if (mSurface == null) {
-            throw new IllegalStateException("Surface not yet created.");
-        }
-        if (DEBUG) Log.v(TAG, "startActivityPendingIntent(): PendingIntent=" + pendingIntent + " "
-                + (isAttachedToDisplay() ? "" : "not") + " attached");
-        final IIntentSender iIntentSender = pendingIntent.getTarget();
-        if (mActivityContainer.startActivityIntentSender(iIntentSender) == START_CANCELED) {
-            throw new OperationCanceledException();
-        }
-    }
-
-    public void release() {
-        if (DEBUG) Log.v(TAG, "release() mActivityContainer=" + mActivityContainer +
-                " mSurface=" + mSurface);
-        if (mActivityContainer == null) {
-            Log.e(TAG, "Duplicate call to release");
+        final int width = mSurfaceView.getWidth();
+        final int height = mSurfaceView.getHeight();
+        final DisplayManager displayManager = mContext.getSystemService(DisplayManager.class);
+        mVirtualDisplay = displayManager.createVirtualDisplay(
+                DISPLAY_NAME + "@" + System.identityHashCode(this),
+                width, height, getBaseDisplayDensity(), mSurface, 0 /* flags */);
+        if (mVirtualDisplay == null) {
+            Log.e(TAG, "Failed to initialize ActivityView");
             return;
         }
-        synchronized (mActivityContainerLock) {
-            mActivityContainer.release();
-            mActivityContainer = null;
+
+        mInputForwarder = InputManager.getInstance().createInputForwarder(
+                mVirtualDisplay.getDisplay().getDisplayId());
+    }
+
+    private void performRelease() {
+        if (!mOpened) {
+            return;
+        }
+
+        mSurfaceView.getHolder().removeCallback(mSurfaceCallback);
+
+        if (mInputForwarder != null) {
+            mInputForwarder = null;
+        }
+
+        final boolean displayReleased;
+        if (mVirtualDisplay != null) {
+            mVirtualDisplay.release();
+            mVirtualDisplay = null;
+            displayReleased = true;
+        } else {
+            displayReleased = false;
         }
 
         if (mSurface != null) {
@@ -286,232 +305,31 @@
             mSurface = null;
         }
 
-        mTextureView.setSurfaceTextureListener(null);
+        if (displayReleased && mActivityViewCallback != null) {
+            mActivityViewCallback.onActivityViewDestroyed(this);
+        }
+
+        mGuard.close();
+        mOpened = false;
     }
 
-    private void setSurfaceAsync(final Surface surface, final int width, final int height,
-            final int densityDpi, final boolean callback) {
-        mExecutor.execute(new Runnable() {
-            public void run() {
-                try {
-                    synchronized (mActivityContainerLock) {
-                        if (mActivityContainer != null) {
-                            mActivityContainer.setSurface(surface, width, height, densityDpi);
-                        }
-                    }
-                } catch (RemoteException e) {
-                    throw new RuntimeException(
-                        "ActivityView: Unable to set surface of ActivityContainer. ",
-                        e);
-                }
-                if (callback) {
-                    post(new Runnable() {
-                        @Override
-                        public void run() {
-                            if (mActivityViewCallback != null) {
-                                if (surface != null) {
-                                    mActivityViewCallback.onSurfaceAvailable(ActivityView.this);
-                                } else {
-                                    mActivityViewCallback.onSurfaceDestroyed(ActivityView.this);
-                                }
-                            }
-                        }
-                    });
-                }
-            }
-        });
+    /** Get density of the hosting display. */
+    private int getBaseDisplayDensity() {
+        final WindowManager wm = mContext.getSystemService(WindowManager.class);
+        final DisplayMetrics metrics = new DisplayMetrics();
+        wm.getDefaultDisplay().getMetrics(metrics);
+        return metrics.densityDpi;
     }
 
-    /**
-     * Set the callback to use to report certain state changes.
-     *
-     * Note: If the surface has been created prior to this call being made, then
-     * ActivityViewCallback.onSurfaceAvailable will be called from within setCallback.
-     *
-     *  @param callback The callback to report events to.
-     *
-     * @see ActivityViewCallback
-     */
-    public void setCallback(ActivityViewCallback callback) {
-        mActivityViewCallback = callback;
-
-        if (mSurface != null) {
-            mActivityViewCallback.onSurfaceAvailable(this);
-        }
-    }
-
-    public static abstract class ActivityViewCallback {
-        /**
-         * Called when all activities in the ActivityView have completed and been removed. Register
-         * using {@link ActivityView#setCallback(ActivityViewCallback)}. Each ActivityView may
-         * have at most one callback registered.
-         */
-        public abstract void onAllActivitiesComplete(ActivityView view);
-        /**
-         * Called when the surface is ready to be drawn to. Calling startActivity prior to this
-         * callback will result in an IllegalStateException.
-         */
-        public abstract void onSurfaceAvailable(ActivityView view);
-        /**
-         * Called when the surface has been removed. Calling startActivity after this callback
-         * will result in an IllegalStateException.
-         */
-        public abstract void onSurfaceDestroyed(ActivityView view);
-    }
-
-    private class ActivityViewSurfaceTextureListener implements SurfaceTextureListener {
-        @Override
-        public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width,
-                int height) {
-            if (mActivityContainer == null) {
-                return;
+    @Override
+    protected void finalize() throws Throwable {
+        try {
+            if (mGuard != null) {
+                mGuard.warnIfOpen();
+                performRelease();
             }
-            if (DEBUG) Log.d(TAG, "onSurfaceTextureAvailable: width=" + width + " height="
-                    + height);
-            mWidth = width;
-            mHeight = height;
-            mSurface = new Surface(surfaceTexture);
-            setSurfaceAsync(mSurface, mWidth, mHeight, mDensityDpi, true);
+        } finally {
+            super.finalize();
         }
-
-        @Override
-        public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int width,
-                int height) {
-            if (mActivityContainer == null) {
-                return;
-            }
-            if (DEBUG) Log.d(TAG, "onSurfaceTextureSizeChanged: w=" + width + " h=" + height);
-        }
-
-        @Override
-        public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
-            if (mActivityContainer == null) {
-                return true;
-            }
-            if (DEBUG) Log.d(TAG, "onSurfaceTextureDestroyed");
-            mSurface.release();
-            mSurface = null;
-            setSurfaceAsync(null, mWidth, mHeight, mDensityDpi, true);
-            return true;
-        }
-
-        @Override
-        public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
-//            Log.d(TAG, "onSurfaceTextureUpdated");
-        }
-
-    }
-
-    private static class ActivityContainerCallback extends IActivityContainerCallback.Stub {
-        private final WeakReference<ActivityView> mActivityViewWeakReference;
-
-        ActivityContainerCallback(ActivityView activityView) {
-            mActivityViewWeakReference = new WeakReference<>(activityView);
-        }
-
-        @Override
-        public void setVisible(IBinder container, boolean visible) {
-            if (DEBUG) Log.v(TAG, "setVisible(): container=" + container + " visible=" + visible +
-                    " ActivityView=" + mActivityViewWeakReference.get());
-        }
-
-        @Override
-        public void onAllActivitiesComplete(IBinder container) {
-            final ActivityView activityView = mActivityViewWeakReference.get();
-            if (activityView != null) {
-                final ActivityViewCallback callback = activityView.mActivityViewCallback;
-                if (callback != null) {
-                    final WeakReference<ActivityViewCallback> callbackRef =
-                            new WeakReference<>(callback);
-                    activityView.post(new Runnable() {
-                        @Override
-                        public void run() {
-                            ActivityViewCallback callback = callbackRef.get();
-                            if (callback != null) {
-                                callback.onAllActivitiesComplete(activityView);
-                            }
-                        }
-                    });
-                }
-            }
-        }
-    }
-
-    private static class ActivityContainerWrapper {
-        private final IActivityContainer mIActivityContainer;
-        private final CloseGuard mGuard = CloseGuard.get();
-        boolean mOpened; // Protected by mGuard.
-
-        ActivityContainerWrapper(IActivityContainer container) {
-            mIActivityContainer = container;
-            mOpened = true;
-            mGuard.open("release");
-        }
-
-        void setSurface(Surface surface, int width, int height, int density)
-                throws RemoteException {
-            mIActivityContainer.setSurface(surface, width, height, density);
-        }
-
-        int startActivity(Intent intent) {
-            try {
-                return mIActivityContainer.startActivity(intent);
-            } catch (RemoteException e) {
-                throw new RuntimeException("ActivityView: Unable to startActivity. " + e);
-            }
-        }
-
-        int startActivityIntentSender(IIntentSender intentSender) {
-            try {
-                return mIActivityContainer.startActivityIntentSender(intentSender);
-            } catch (RemoteException e) {
-                throw new RuntimeException(
-                        "ActivityView: Unable to startActivity from IntentSender. " + e);
-            }
-        }
-
-        int getDisplayId() {
-            try {
-                return mIActivityContainer.getDisplayId();
-            } catch (RemoteException e) {
-                return -1;
-            }
-        }
-
-        boolean injectEvent(InputEvent event) {
-            try {
-                return mIActivityContainer.injectEvent(event);
-            } catch (RemoteException e) {
-                return false;
-            }
-        }
-
-        void release() {
-            synchronized (mGuard) {
-                if (mOpened) {
-                    if (DEBUG) Log.v(TAG, "ActivityContainerWrapper: release called");
-                    try {
-                        mIActivityContainer.release();
-                        mGuard.close();
-                    } catch (RemoteException e) {
-                    }
-                    mOpened = false;
-                }
-            }
-        }
-
-        @Override
-        protected void finalize() throws Throwable {
-            if (DEBUG) Log.v(TAG, "ActivityContainerWrapper: finalize called");
-            try {
-                if (mGuard != null) {
-                    mGuard.warnIfOpen();
-                    release();
-                }
-            } finally {
-                super.finalize();
-            }
-        }
-
     }
 }
diff --git a/core/java/android/app/Application.java b/core/java/android/app/Application.java
index 7fb5e2e..156df36 100644
--- a/core/java/android/app/Application.java
+++ b/core/java/android/app/Application.java
@@ -16,20 +16,17 @@
 
 package android.app;
 
+import java.util.ArrayList;
+
 import android.annotation.CallSuper;
-import android.app.backup.BackupAgent;
-import android.content.BroadcastReceiver;
 import android.content.ComponentCallbacks;
 import android.content.ComponentCallbacks2;
-import android.content.ContentProvider;
 import android.content.Context;
 import android.content.ContextWrapper;
 import android.content.Intent;
 import android.content.res.Configuration;
 import android.os.Bundle;
 
-import java.util.ArrayList;
-
 /**
  * Base class for maintaining global application state. You can provide your own
  * implementation by creating a subclass and specifying the fully-qualified name
@@ -292,79 +289,4 @@
             }
         }
     }
-
-    /**
-     * Allows application to override the creation of activities. This can be used to
-     * perform things such as dependency injection or class loader changes to these
-     * classes. Return null to use the default creation flow.
-     * @param cl The default classloader to use for instantiation.
-     * @param className The class to be instantiated.
-     * @param intent Intent creating the class.
-     * @hide
-     */
-    public Activity instantiateActivity(ClassLoader cl, String className, Intent intent) {
-        return null;
-    }
-
-    /**
-     * Allows application to override the creation of receivers. This can be used to
-     * perform things such as dependency injection or class loader changes to these
-     * classes. Return null to use the default creation flow.
-     * @param cl The default classloader to use for instantiation.
-     * @param className The class to be instantiated.
-     * @param intent Intent creating the class.
-     * @hide
-     */
-    public BroadcastReceiver instantiateReceiver(ClassLoader cl, String className, Intent intent) {
-        return null;
-    }
-
-    /**
-     * Allows application to override the creation of services. This can be used to
-     * perform things such as dependency injection or class loader changes to these
-     * classes. Return null to use the default creation flow.
-     * @param cl The default classloader to use for instantiation.
-     * @param className The class to be instantiated.
-     * @param intent Intent creating the class.
-     * @hide
-     */
-    public Service instantiateService(ClassLoader cl, String className, Intent intent) {
-        return null;
-    }
-
-    /**
-     * Allows application to override the creation of providers. This can be used to
-     * perform things such as dependency injection or class loader changes to these
-     * classes. Return null to use the default creation flow.
-     * @param cl The default classloader to use for instantiation.
-     * @param className The class to be instantiated.
-     * @hide
-     */
-    public ContentProvider instantiateProvider(ClassLoader cl, String className) {
-        return null;
-    }
-
-    /**
-     * Allows application to override the creation of backup agents. This can be used to
-     * perform things such as dependency injection or class loader changes to these
-     * classes. Return null to use the default creation flow.
-     * @param cl The default classloader to use for instantiation.
-     * @param className The class to be instantiated.
-     * @hide
-     */
-    public BackupAgent instantiateBackupAgent(ClassLoader cl, String className) {
-        return null;
-    }
-
-    /**
-     * Allows application to override the creation of instrumentation. This can be used to
-     * perform things such as dependency injection or class loader changes to these
-     * classes. Return null to use the default creation flow.
-     * @param cl The default classloader to use for instantiation.
-     * @param className The class to be instantiated.
-     * @hide
-     */
-    public Instrumentation instantiateInstrumentation(ClassLoader cl, String className) {
-        return null;
-    }
 }
\ No newline at end of file
diff --git a/core/java/android/app/ApplicationLoaders.java b/core/java/android/app/ApplicationLoaders.java
index 2062930..b7c1f4e 100644
--- a/core/java/android/app/ApplicationLoaders.java
+++ b/core/java/android/app/ApplicationLoaders.java
@@ -18,9 +18,8 @@
 
 import android.os.Build;
 import android.os.Trace;
-import android.text.TextUtils;
 import android.util.ArrayMap;
-import com.android.internal.os.PathClassLoaderFactory;
+import com.android.internal.os.ClassLoaderFactory;
 import dalvik.system.PathClassLoader;
 
 /** @hide */
@@ -31,15 +30,16 @@
 
     ClassLoader getClassLoader(String zip, int targetSdkVersion, boolean isBundled,
                                String librarySearchPath, String libraryPermittedPath,
-                               ClassLoader parent) {
+                               ClassLoader parent, String classLoaderName) {
         // For normal usage the cache key used is the same as the zip path.
         return getClassLoader(zip, targetSdkVersion, isBundled, librarySearchPath,
-                              libraryPermittedPath, parent, zip);
+                              libraryPermittedPath, parent, zip, classLoaderName);
     }
 
     private ClassLoader getClassLoader(String zip, int targetSdkVersion, boolean isBundled,
                                        String librarySearchPath, String libraryPermittedPath,
-                                       ClassLoader parent, String cacheKey) {
+                                       ClassLoader parent, String cacheKey,
+                                       String classLoaderName) {
         /*
          * This is the parent we use if they pass "null" in.  In theory
          * this should be the "system" class loader; in practice we
@@ -66,28 +66,25 @@
 
                 Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, zip);
 
-                PathClassLoader pathClassloader = PathClassLoaderFactory.createClassLoader(
-                                                      zip,
-                                                      librarySearchPath,
-                                                      libraryPermittedPath,
-                                                      parent,
-                                                      targetSdkVersion,
-                                                      isBundled);
+                ClassLoader classloader = ClassLoaderFactory.createClassLoader(
+                        zip,  librarySearchPath, libraryPermittedPath, parent,
+                        targetSdkVersion, isBundled, classLoaderName);
 
                 Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
 
                 Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "setupVulkanLayerPath");
-                setupVulkanLayerPath(pathClassloader, librarySearchPath);
+                setupVulkanLayerPath(classloader, librarySearchPath);
                 Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
 
-                mLoaders.put(cacheKey, pathClassloader);
-                return pathClassloader;
+                mLoaders.put(cacheKey, classloader);
+                return classloader;
             }
 
             Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, zip);
-            PathClassLoader pathClassloader = new PathClassLoader(zip, parent);
+            ClassLoader loader = ClassLoaderFactory.createClassLoader(
+                    zip, null, parent, classLoaderName);
             Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
-            return pathClassloader;
+            return loader;
         }
     }
 
@@ -105,7 +102,7 @@
         // The cache key is passed separately to enable the stub WebView to be cached under the
         // stub's APK path, when the actual package path is the donor APK.
         return getClassLoader(packagePath, Build.VERSION.SDK_INT, false, libsPath, null, null,
-                              cacheKey);
+                              cacheKey, null /* classLoaderName */);
     }
 
     private static native void setupVulkanLayerPath(ClassLoader classLoader, String librarySearchPath);
@@ -122,7 +119,7 @@
         baseDexClassLoader.addDexPath(dexPath);
     }
 
-    private final ArrayMap<String, ClassLoader> mLoaders = new ArrayMap<String, ClassLoader>();
+    private final ArrayMap<String, ClassLoader> mLoaders = new ArrayMap<>();
 
     private static final ApplicationLoaders gApplicationLoaders = new ApplicationLoaders();
 }
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 7fc9a69..0eafdec 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -31,7 +31,6 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.ChangedPackages;
 import android.content.pm.ComponentInfo;
-import android.content.pm.InstantAppInfo;
 import android.content.pm.FeatureInfo;
 import android.content.pm.IOnPermissionsChangeListener;
 import android.content.pm.IPackageDataObserver;
@@ -40,6 +39,7 @@
 import android.content.pm.IPackageManager;
 import android.content.pm.IPackageMoveObserver;
 import android.content.pm.IPackageStatsObserver;
+import android.content.pm.InstantAppInfo;
 import android.content.pm.InstrumentationInfo;
 import android.content.pm.IntentFilterVerificationInfo;
 import android.content.pm.KeySet;
@@ -88,13 +88,14 @@
 import android.util.Log;
 import android.view.Display;
 
-import dalvik.system.VMRuntime;
-
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.os.SomeArgs;
 import com.android.internal.util.Preconditions;
 import com.android.internal.util.UserIcons;
+
+import dalvik.system.VMRuntime;
+
 import libcore.util.EmptyArray;
 
 import java.lang.ref.WeakReference;
@@ -706,6 +707,15 @@
     }
 
     @Override
+    public String[] getNamesForUids(int[] uids) {
+        try {
+            return mPM.getNamesForUids(uids);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    @Override
     public int getUidForSharedUser(String sharedUserName)
             throws NameNotFoundException {
         try {
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 318c7ac..5f34322 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -60,11 +60,10 @@
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.ServiceManager;
-import android.os.SystemProperties;
 import android.os.Trace;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.os.storage.IStorageManager;
-import android.os.storage.StorageManager;
 import android.system.ErrnoException;
 import android.system.Os;
 import android.system.OsConstants;
@@ -75,6 +74,7 @@
 import android.util.Slog;
 import android.view.Display;
 import android.view.DisplayAdjustments;
+import android.view.autofill.AutofillManager.AutofillClient;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.Preconditions;
@@ -186,6 +186,8 @@
     // The name of the split this Context is representing. May be null.
     private @Nullable String mSplitName = null;
 
+    private AutofillClient mAutofillClient = null;
+
     private final Object mSync = new Object();
 
     @GuardedBy("mSync")
@@ -370,13 +372,6 @@
         return getSharedPreferences(file, mode);
     }
 
-    private boolean isBuggy() {
-        // STOPSHIP: fix buggy apps
-        if (SystemProperties.getBoolean("fw.ignore_buggy", false)) return false;
-        if ("com.google.android.tts".equals(getApplicationInfo().packageName)) return true;
-        return false;
-    }
-
     @Override
     public SharedPreferences getSharedPreferences(File file, int mode) {
         SharedPreferencesImpl sp;
@@ -387,9 +382,8 @@
                 checkMode(mode);
                 if (getApplicationInfo().targetSdkVersion >= android.os.Build.VERSION_CODES.O) {
                     if (isCredentialProtectedStorage()
-                            && !getSystemService(StorageManager.class).isUserKeyUnlocked(
-                            UserHandle.myUserId())
-                            && !isBuggy()) {
+                            && !getSystemService(UserManager.class)
+                                    .isUserUnlockingOrUnlocked(UserHandle.myUserId())) {
                         throw new IllegalStateException("SharedPreferences in credential encrypted "
                                 + "storage are not available until after user is unlocked");
                     }
@@ -628,7 +622,8 @@
     @Override
     public File getExternalFilesDir(String type) {
         // Operates on primary external storage
-        return getExternalFilesDirs(type)[0];
+        final File[] dirs = getExternalFilesDirs(type);
+        return (dirs != null && dirs.length > 0) ? dirs[0] : null;
     }
 
     @Override
@@ -645,7 +640,8 @@
     @Override
     public File getObbDir() {
         // Operates on primary external storage
-        return getObbDirs()[0];
+        final File[] dirs = getObbDirs();
+        return (dirs != null && dirs.length > 0) ? dirs[0] : null;
     }
 
     @Override
@@ -679,7 +675,8 @@
     @Override
     public File getExternalCacheDir() {
         // Operates on primary external storage
-        return getExternalCacheDirs()[0];
+        final File[] dirs = getExternalCacheDirs();
+        return (dirs != null && dirs.length > 0) ? dirs[0] : null;
     }
 
     @Override
@@ -2231,6 +2228,18 @@
         return mUser.getIdentifier();
     }
 
+    /** @hide */
+    @Override
+    public AutofillClient getAutofillClient() {
+        return mAutofillClient;
+    }
+
+    /** @hide */
+    @Override
+    public void setAutofillClient(AutofillClient client) {
+        mAutofillClient = client;
+    }
+
     static ContextImpl createSystemContext(ActivityThread mainThread) {
         LoadedApk packageInfo = new LoadedApk(mainThread);
         ContextImpl context = new ContextImpl(null, mainThread, packageInfo, null, null, null, 0,
diff --git a/core/java/android/app/DexLoadReporter.java b/core/java/android/app/DexLoadReporter.java
index 13f288a..f99d1a8 100644
--- a/core/java/android/app/DexLoadReporter.java
+++ b/core/java/android/app/DexLoadReporter.java
@@ -19,6 +19,7 @@
 import android.os.FileUtils;
 import android.os.RemoteException;
 import android.os.SystemProperties;
+import android.system.ErrnoException;
 import android.util.Slog;
 
 import com.android.internal.annotations.GuardedBy;
@@ -26,8 +27,11 @@
 import dalvik.system.BaseDexClassLoader;
 import dalvik.system.VMRuntime;
 
+import libcore.io.Libcore;
+
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -86,29 +90,50 @@
     }
 
     @Override
-    public void report(List<String> dexPaths) {
-        if (dexPaths.isEmpty()) {
+    public void report(List<BaseDexClassLoader> 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.
+            return;
+        }
+
         // Notify the package manager about the dex loads unconditionally.
         // The load might be for either a primary or secondary dex file.
-        notifyPackageManager(dexPaths);
-        // Check for secondary dex files and register them for profiling if
-        // possible.
-        registerSecondaryDexForProfiling(dexPaths);
+        notifyPackageManager(classLoadersChain, classPaths);
+        // 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);
     }
 
-    private void notifyPackageManager(List<String> dexPaths) {
+    private void notifyPackageManager(List<BaseDexClassLoader> classLoadersChain,
+            List<String> classPaths) {
+        // Get the class loader names for the binder call.
+        List<String> classLoadersNames = new ArrayList<>(classPaths.size());
+        for (BaseDexClassLoader bdc : classLoadersChain) {
+            classLoadersNames.add(bdc.getClass().getName());
+        }
         String packageName = ActivityThread.currentPackageName();
         try {
             ActivityThread.getPackageManager().notifyDexLoad(
-                    packageName, dexPaths, VMRuntime.getRuntime().vmInstructionSet());
+                    packageName, classLoadersNames, classPaths,
+                    VMRuntime.getRuntime().vmInstructionSet());
         } catch (RemoteException re) {
             Slog.e(TAG, "Failed to notify PM about dex load for package " + packageName, re);
         }
     }
 
-    private void registerSecondaryDexForProfiling(List<String> dexPaths) {
+    private void registerSecondaryDexForProfiling(String[] dexPaths) {
         if (!SystemProperties.getBoolean("dalvik.vm.dexopt.secondary", false)) {
             return;
         }
@@ -129,22 +154,50 @@
             // The dex path is not a secondary dex file. Nothing to do.
             return;
         }
-        File secondaryProfile = getSecondaryProfileFile(dexPath);
+
+        File realDexPath;
         try {
-            // Create the profile if not already there.
-            // Returns true if the file was created, false if the file already exists.
-            // or throws exceptions in case of errors.
+            // Secondary dex profiles are stored in the oat directory, next to the real dex file
+            // and have the same name with 'cur.prof' appended. We use the realpath because that
+            // is what installd is using when processing the dex file.
+            // NOTE: Keep in sync with installd.
+            realDexPath = new File(Libcore.os.realpath(dexPath));
+        } catch (ErrnoException ex) {
+            Slog.e(TAG, "Failed to get the real path of secondary dex " + dexPath
+                    + ":" + ex.getMessage());
+            // Do not continue with registration if we could not retrieve the real path.
+            return;
+        }
+
+        // NOTE: Keep this in sync with installd expectations.
+        File secondaryProfileDir = new File(realDexPath.getParent(), "oat");
+        File secondaryProfile = new File(secondaryProfileDir, realDexPath.getName() + ".cur.prof");
+
+        // Create the profile if not already there.
+        // Returns true if the file was created, false if the file already exists.
+        // or throws exceptions in case of errors.
+        if (!secondaryProfileDir.exists()) {
+            if (!secondaryProfileDir.mkdir()) {
+                Slog.e(TAG, "Could not create the profile directory: " + secondaryProfile);
+                // Do not continue with registration if we could not create the oat dir.
+                return;
+            }
+        }
+
+        try {
             boolean created = secondaryProfile.createNewFile();
             if (DEBUG && created) {
                 Slog.i(TAG, "Created profile for secondary dex: " + secondaryProfile);
             }
         } catch (IOException ex) {
-            Slog.e(TAG, "Failed to create profile for secondary dex " + secondaryProfile +
-                    ":" + ex.getMessage());
-            // Don't move forward with the registration if we failed to create the profile.
+            Slog.e(TAG, "Failed to create profile for secondary dex " + dexPath
+                    + ":" + ex.getMessage());
+            // Do not continue with registration if we could not create the profile files.
             return;
         }
 
+        // If we got here, the dex paths is a secondary dex and we were able to create the profile.
+        // Register the path to the runtime.
         VMRuntime.registerAppInfo(secondaryProfile.getPath(), new String[] { dexPath });
     }
 
@@ -158,11 +211,4 @@
         }
         return false;
     }
-
-    // Secondary dex profiles are stored next to the dex file and have the same
-    // name with '.prof' appended.
-    // NOTE: Keep in sync with installd.
-    private File getSecondaryProfileFile(String dexPath) {
-        return new File(dexPath + ".prof");
-    }
 }
diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java
index 07595ea..af591a5 100644
--- a/core/java/android/app/DownloadManager.java
+++ b/core/java/android/app/DownloadManager.java
@@ -18,9 +18,9 @@
 
 import android.annotation.Nullable;
 import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
 import android.annotation.SystemApi;
 import android.annotation.SystemService;
-import android.annotation.SdkConstant.SdkConstantType;
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
@@ -36,8 +36,8 @@
 import android.os.FileUtils;
 import android.os.ParcelFileDescriptor;
 import android.provider.Downloads;
-import android.provider.Settings;
 import android.provider.MediaStore.Images;
+import android.provider.Settings;
 import android.provider.Settings.SettingNotFoundException;
 import android.text.TextUtils;
 import android.util.Pair;
@@ -395,7 +395,6 @@
         private int mFlags = 0;
         private boolean mIsVisibleInDownloadsUi = true;
         private boolean mScannable = false;
-        private boolean mUseSystemCache = false;
         /** if a file is designated as a MediaScanner scannable file, the following value is
          * stored in the database column {@link Downloads.Impl#COLUMN_MEDIA_SCANNED}.
          */
@@ -476,24 +475,6 @@
         }
 
         /**
-         * Set the local destination for the downloaded file to the system cache dir (/cache).
-         * This is only available to System apps with the permission
-         * {@link android.Manifest.permission#ACCESS_CACHE_FILESYSTEM}.
-         * <p>
-         * The downloaded file is not scanned by MediaScanner.
-         * But it can be made scannable by calling {@link #allowScanningByMediaScanner()}.
-         * <p>
-         * Files downloaded to /cache may be deleted by the system at any time to reclaim space.
-         *
-         * @return this object
-         * @hide
-         */
-        public Request setDestinationToSystemCache() {
-            mUseSystemCache = true;
-            return this;
-        }
-
-        /**
          * Set the local destination for the downloaded file to a path within
          * the application's external files directory (as returned by
          * {@link Context#getExternalFilesDir(String)}.
@@ -774,13 +755,13 @@
             values.put(Downloads.Impl.COLUMN_NOTIFICATION_PACKAGE, packageName);
 
             if (mDestinationUri != null) {
-                values.put(Downloads.Impl.COLUMN_DESTINATION, Downloads.Impl.DESTINATION_FILE_URI);
-                values.put(Downloads.Impl.COLUMN_FILE_NAME_HINT, mDestinationUri.toString());
+                values.put(Downloads.Impl.COLUMN_DESTINATION,
+                        Downloads.Impl.DESTINATION_FILE_URI);
+                values.put(Downloads.Impl.COLUMN_FILE_NAME_HINT,
+                        mDestinationUri.toString());
             } else {
                 values.put(Downloads.Impl.COLUMN_DESTINATION,
-                           (this.mUseSystemCache) ?
-                                   Downloads.Impl.DESTINATION_SYSTEMCACHE_PARTITION :
-                                   Downloads.Impl.DESTINATION_CACHE_PARTITION_PURGEABLE);
+                        Downloads.Impl.DESTINATION_CACHE_PARTITION_PURGEABLE);
             }
             // is the file supposed to be media-scannable?
             values.put(Downloads.Impl.COLUMN_MEDIA_SCANNED, (mScannable) ? SCANNABLE_VALUE_YES :
diff --git a/core/java/android/app/EphemeralResolverService.java b/core/java/android/app/EphemeralResolverService.java
index bbd8ab3..427a0386 100644
--- a/core/java/android/app/EphemeralResolverService.java
+++ b/core/java/android/app/EphemeralResolverService.java
@@ -40,6 +40,7 @@
 /**
  * Base class for implementing the resolver service.
  * @hide
+ * @removed
  * @deprecated use InstantAppResolverService instead
  */
 @Deprecated
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index 66dc6a1..afae9fe 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -42,7 +42,6 @@
 import android.util.ArrayMap;
 import android.util.AttributeSet;
 import android.util.DebugUtils;
-import android.util.Log;
 import android.util.SparseArray;
 import android.util.SuperNotCalledException;
 import android.view.ContextMenu;
@@ -406,6 +405,11 @@
     // getLayoutInflater()
     LayoutInflater mLayoutInflater;
 
+    // Keep track of whether or not this Fragment has run performCreate(). Retained instance
+    // fragments can have mRetaining set to true without going through creation, so we must
+    // track it separately.
+    boolean mIsCreated;
+
     /**
      * State information that has been retrieved from a fragment instance
      * through {@link FragmentManager#saveFragmentInstanceState(Fragment)
@@ -2293,7 +2297,7 @@
      * transaction have called {@link #startPostponedEnterTransition()}.
      * <p>
      * This method should be called before being added to the FragmentTransaction or
-     * in {@link #onCreate(Bundle), {@link #onAttach(Context)}, or
+     * in {@link #onCreate(Bundle)}, {@link #onAttach(Context)}, or
      * {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}}.
      * {@link #startPostponedEnterTransition()} must be called to allow the Fragment to
      * start the transitions.
@@ -2483,6 +2487,7 @@
         mState = CREATED;
         mCalled = false;
         onCreate(savedInstanceState);
+        mIsCreated = true;
         if (!mCalled) {
             throw new SuperNotCalledException("Fragment " + this
                     + " did not call through to super.onCreate()");
@@ -2759,6 +2764,7 @@
         }
         mState = INITIALIZING;
         mCalled = false;
+        mIsCreated = false;
         onDestroy();
         if (!mCalled) {
             throw new SuperNotCalledException("Fragment " + this
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index 6cb987c..0d5cd02 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -679,7 +679,8 @@
     ArrayList<Integer> mAvailBackStackIndices;
 
     ArrayList<OnBackStackChangedListener> mBackStackChangeListeners;
-    CopyOnWriteArrayList<Pair<FragmentLifecycleCallbacks, Boolean>> mLifecycleCallbacks;
+    final CopyOnWriteArrayList<Pair<FragmentLifecycleCallbacks, Boolean>>
+            mLifecycleCallbacks = new CopyOnWriteArrayList<>();
 
     int mCurState = Fragment.INITIALIZING;
     FragmentHostCallback<?> mHost;
@@ -1231,7 +1232,7 @@
                         }
                         dispatchOnFragmentAttached(f, mHost.getContext(), false);
 
-                        if (!f.mRetaining) {
+                        if (!f.mIsCreated) {
                             dispatchOnFragmentPreCreated(f, f.mSavedFragmentState, false);
                             f.performCreate(f.mSavedFragmentState);
                             dispatchOnFragmentCreated(f, f.mSavedFragmentState, false);
@@ -1379,8 +1380,13 @@
                                     @Override
                                     public void onAnimationEnd(Animator anim) {
                                         container.endViewTransition(view);
-                                        if (fragment.getAnimatingAway() != null) {
-                                            fragment.setAnimatingAway(null);
+                                        Animator animator = f.getAnimatingAway();
+                                        f.setAnimatingAway(null);
+                                        // If the animation finished immediately, the fragment's
+                                        // view will still be there. If so, we can just pretend
+                                        // there was no animation and skip the moveToState()
+                                        if (container.indexOfChild(view) == -1
+                                                && animator != null) {
                                             moveToState(fragment, fragment.getStateAfterAnimating(),
                                                     0, 0, false);
                                         }
@@ -3100,6 +3106,9 @@
     }
 
     public boolean dispatchCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        if (mCurState < Fragment.CREATED) {
+            return false;
+        }
         boolean show = false;
         ArrayList<Fragment> newMenus = null;
         for (int i = 0; i < mAdded.size(); i++) {
@@ -3130,6 +3139,9 @@
     }
     
     public boolean dispatchPrepareOptionsMenu(Menu menu) {
+        if (mCurState < Fragment.CREATED) {
+            return false;
+        }
         boolean show = false;
         for (int i = 0; i < mAdded.size(); i++) {
             Fragment f = mAdded.get(i);
@@ -3143,6 +3155,9 @@
     }
     
     public boolean dispatchOptionsItemSelected(MenuItem item) {
+        if (mCurState < Fragment.CREATED) {
+            return false;
+        }
         for (int i = 0; i < mAdded.size(); i++) {
             Fragment f = mAdded.get(i);
             if (f != null) {
@@ -3155,6 +3170,9 @@
     }
     
     public boolean dispatchContextItemSelected(MenuItem item) {
+        if (mCurState < Fragment.CREATED) {
+            return false;
+        }
         for (int i = 0; i < mAdded.size(); i++) {
             Fragment f = mAdded.get(i);
             if (f != null) {
@@ -3167,6 +3185,9 @@
     }
     
     public void dispatchOptionsMenuClosed(Menu menu) {
+        if (mCurState < Fragment.CREATED) {
+            return;
+        }
         for (int i = 0; i < mAdded.size(); i++) {
             Fragment f = mAdded.get(i);
             if (f != null) {
@@ -3191,17 +3212,10 @@
 
     public void registerFragmentLifecycleCallbacks(FragmentLifecycleCallbacks cb,
             boolean recursive) {
-        if (mLifecycleCallbacks == null) {
-            mLifecycleCallbacks = new CopyOnWriteArrayList<>();
-        }
-        mLifecycleCallbacks.add(new Pair(cb, recursive));
+        mLifecycleCallbacks.add(new Pair<>(cb, recursive));
     }
 
     public void unregisterFragmentLifecycleCallbacks(FragmentLifecycleCallbacks cb) {
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
-
         synchronized (mLifecycleCallbacks) {
             for (int i = 0, N = mLifecycleCallbacks.size(); i < N; i++) {
                 if (mLifecycleCallbacks.get(i).first == cb) {
@@ -3220,9 +3234,6 @@
                         .dispatchOnFragmentPreAttached(f, context, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentPreAttached(this, f, context);
@@ -3238,9 +3249,6 @@
                         .dispatchOnFragmentAttached(f, context, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentAttached(this, f, context);
@@ -3257,9 +3265,6 @@
                         .dispatchOnFragmentPreCreated(f, savedInstanceState, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentPreCreated(this, f, savedInstanceState);
@@ -3275,9 +3280,6 @@
                         .dispatchOnFragmentCreated(f, savedInstanceState, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentCreated(this, f, savedInstanceState);
@@ -3294,9 +3296,6 @@
                         .dispatchOnFragmentActivityCreated(f, savedInstanceState, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentActivityCreated(this, f, savedInstanceState);
@@ -3313,9 +3312,6 @@
                         .dispatchOnFragmentViewCreated(f, v, savedInstanceState, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentViewCreated(this, f, v, savedInstanceState);
@@ -3331,9 +3327,6 @@
                         .dispatchOnFragmentStarted(f, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentStarted(this, f);
@@ -3349,9 +3342,6 @@
                         .dispatchOnFragmentResumed(f, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentResumed(this, f);
@@ -3367,9 +3357,6 @@
                         .dispatchOnFragmentPaused(f, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentPaused(this, f);
@@ -3385,9 +3372,6 @@
                         .dispatchOnFragmentStopped(f, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentStopped(this, f);
@@ -3403,9 +3387,6 @@
                         .dispatchOnFragmentSaveInstanceState(f, outState, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentSaveInstanceState(this, f, outState);
@@ -3421,9 +3402,6 @@
                         .dispatchOnFragmentViewDestroyed(f, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentViewDestroyed(this, f);
@@ -3439,9 +3417,6 @@
                         .dispatchOnFragmentDestroyed(f, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentDestroyed(this, f);
@@ -3457,9 +3432,6 @@
                         .dispatchOnFragmentDetached(f, true);
             }
         }
-        if (mLifecycleCallbacks == null) {
-            return;
-        }
         for (Pair<FragmentLifecycleCallbacks, Boolean> p : mLifecycleCallbacks) {
             if (!onlyRecursive || p.second) {
                 p.first.onFragmentDetached(this, f);
diff --git a/core/java/android/app/IActivityContainer.aidl b/core/java/android/app/IActivityContainer.aidl
deleted file mode 100644
index 1ff3c87..0000000
--- a/core/java/android/app/IActivityContainer.aidl
+++ /dev/null
@@ -1,36 +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.
- */
-
-package android.app;
-
-import android.app.IActivityContainerCallback;
-import android.content.Intent;
-import android.content.IIntentSender;
-import android.os.IBinder;
-import android.view.InputEvent;
-import android.view.Surface;
-
-/** @hide */
-interface IActivityContainer {
-    void addToDisplay(int displayId);
-    void setSurface(in Surface surface, int width, int height, int density);
-    int startActivity(in Intent intent);
-    int startActivityIntentSender(in IIntentSender intentSender);
-    int getDisplayId();
-    int getStackId();
-    boolean injectEvent(in InputEvent event);
-    void release();
-}
diff --git a/core/java/android/app/IActivityContainerCallback.aidl b/core/java/android/app/IActivityContainerCallback.aidl
deleted file mode 100644
index 99d0a6f..0000000
--- a/core/java/android/app/IActivityContainerCallback.aidl
+++ /dev/null
@@ -1,25 +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.
- */
-
-package android.app;
-
-import android.os.IBinder;
-
-/** @hide */
-interface IActivityContainerCallback {
-    oneway void setVisible(IBinder container, boolean visible);
-    oneway void onAllActivitiesComplete(IBinder container);
-}
diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl
index 3ac026d..1811748 100644
--- a/core/java/android/app/IActivityManager.aidl
+++ b/core/java/android/app/IActivityManager.aidl
@@ -20,8 +20,6 @@
 import android.app.ApplicationErrorReport;
 import android.app.ContentProviderHolder;
 import android.app.IApplicationThread;
-import android.app.IActivityContainer;
-import android.app.IActivityContainerCallback;
 import android.app.IActivityController;
 import android.app.IAppTask;
 import android.app.IInstrumentationWatcher;
@@ -277,8 +275,8 @@
     int checkGrantUriPermission(int callingUid, in String targetPkg, in Uri uri,
             int modeFlags, int userId);
     // Cause the specified process to dump the specified heap.
-    boolean dumpHeap(in String process, int userId, boolean managed, in String path,
-            in ParcelFileDescriptor fd);
+    boolean dumpHeap(in String process, int userId, boolean managed, boolean mallocInfo,
+            boolean runGc, in String path, in ParcelFileDescriptor fd);
     int startActivities(in IApplicationThread caller, in String callingPackage,
             in Intent[] intents, in String[] resolvedTypes, in IBinder resultTo,
             in Bundle options, int userId);
@@ -310,7 +308,15 @@
     boolean shouldUpRecreateTask(in IBinder token, in String destAffinity);
     boolean navigateUpTo(in IBinder token, in Intent target, int resultCode,
             in Intent resultData);
-    void setLockScreenShown(boolean showing);
+    /**
+     * Informs ActivityManagerService that the keyguard is showing.
+     *
+     * @param showing True if the keyguard is showing, false otherwise.
+     * @param secondaryDisplayShowing The displayId of the secondary display on which the keyguard
+     *        is showing, or INVALID_DISPLAY if there is no such display. Only meaningful if
+     *        showing is true.
+     */
+    void setLockScreenShown(boolean showing, int secondaryDisplayShowing);
     boolean finishActivityAffinity(in IBinder token);
     // This is not public because you need to be very careful in how you
     // manage your activity to make sure it is always the uid you expect.
@@ -355,8 +361,6 @@
     void killUid(int appId, int userId, in String reason);
     void setUserIsMonkey(boolean monkey);
     void hang(in IBinder who, boolean allowRestart);
-    IActivityContainer createVirtualActivityContainer(in IBinder parentActivityToken,
-            in IActivityContainerCallback callback);
     void moveTaskToStack(int taskId, int stackId, boolean toTop);
     /**
      * Resizes the input stack id to the given bounds.
@@ -380,7 +384,7 @@
     boolean convertFromTranslucent(in IBinder token);
     boolean convertToTranslucent(in IBinder token, in Bundle options);
     void notifyActivityDrawn(in IBinder token);
-    void reportActivityFullyDrawn(in IBinder token);
+    void reportActivityFullyDrawn(in IBinder token, boolean restoredFromBundle);
     void restart();
     void performIdleMaintenance();
     void takePersistableUriPermission(in Uri uri, int modeFlags, int userId);
@@ -412,9 +416,6 @@
     void stopSystemLockTaskMode();
     void finishVoiceTask(in IVoiceInteractionSession session);
     boolean isTopOfTask(in IBinder token);
-    boolean requestVisibleBehind(in IBinder token, boolean visible);
-    boolean isBackgroundVisibleBehind(in IBinder token);
-    void backgroundResourcesReleased(in IBinder token);
     void notifyLaunchTaskBehindComplete(in IBinder token);
     int startActivityFromRecents(int taskId, in Bundle options);
     void notifyEnterAnimationComplete(in IBinder token);
@@ -439,7 +440,7 @@
 
     // Start of M transactions
     void notifyCleartextNetwork(int uid, in byte[] firstPacket);
-    IActivityContainer createStackOnDisplay(int displayId);
+    int createStackOnDisplay(int displayId);
     int getFocusedStackId();
     void setTaskResizeable(int taskId, int resizeableMode);
     boolean requestAssistContextExtras(int requestType, in IResultReceiver receiver,
@@ -636,4 +637,7 @@
     // side. If so, make sure they are using the correct transaction ids and arguments.
     // If a transaction which will also be used on the native side is being inserted, add it
     // alongside with other transactions of this kind at the top of this file.
+
+     void setShowWhenLocked(in IBinder token, boolean showWhenLocked);
+     void setTurnScreenOn(in IBinder token, boolean turnScreenOn);
 }
diff --git a/core/java/android/app/IApplicationThread.aidl b/core/java/android/app/IApplicationThread.aidl
index b3521c0..aeed7e1 100644
--- a/core/java/android/app/IApplicationThread.aidl
+++ b/core/java/android/app/IApplicationThread.aidl
@@ -117,7 +117,8 @@
     void scheduleSuicide();
     void dispatchPackageBroadcast(int cmd, in String[] packages);
     void scheduleCrash(in String msg);
-    void dumpHeap(boolean managed, in String path, in ParcelFileDescriptor fd);
+    void dumpHeap(boolean managed, boolean mallocInfo, boolean runGc, in String path,
+            in ParcelFileDescriptor fd);
     void dumpActivity(in ParcelFileDescriptor fd, IBinder servicetoken, in String prefix,
             in String[] args);
     void clearDnsCache();
@@ -140,8 +141,6 @@
     void setProcessState(int state);
     void scheduleInstallProvider(in ProviderInfo provider);
     void updateTimePrefs(int timeFormatPreference);
-    void scheduleCancelVisibleBehind(IBinder token);
-    void scheduleBackgroundVisibleBehindChanged(IBinder token, boolean enabled);
     void scheduleEnterAnimationComplete(IBinder token);
     void notifyCleartextNetwork(in byte[] firstPacket);
     void startBinderTracking();
diff --git a/core/java/android/app/IInputForwarder.aidl b/core/java/android/app/IInputForwarder.aidl
new file mode 100644
index 0000000..d6be63e
--- /dev/null
+++ b/core/java/android/app/IInputForwarder.aidl
@@ -0,0 +1,29 @@
+/**
+ * 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.app;
+
+import android.view.InputEvent;
+
+/**
+ * Forwards input events into owned activity container, used in {@link android.app.ActivityView}.
+ * To forward input to other apps {@link android.Manifest.permission.INJECT_EVENTS} permission is
+ * required.
+ * @hide
+ */
+interface IInputForwarder {
+    boolean forwardEvent(in InputEvent event);
+}
\ No newline at end of file
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 1c1883b..0c80dea 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -116,6 +116,16 @@
     boolean matchesCallFilter(in Bundle extras);
     boolean isSystemConditionProviderEnabled(String path);
 
+    boolean isNotificationListenerAccessGranted(in ComponentName listener);
+    boolean isNotificationListenerAccessGrantedForUser(in ComponentName listener, int userId);
+    boolean isNotificationAssistantAccessGranted(in ComponentName assistant);
+    void setNotificationListenerAccessGranted(in ComponentName listener, boolean enabled);
+    void setNotificationAssistantAccessGranted(in ComponentName assistant, boolean enabled);
+    void setNotificationListenerAccessGrantedForUser(in ComponentName listener, int userId, boolean enabled);
+    void setNotificationAssistantAccessGrantedForUser(in ComponentName assistant, int userId, boolean enabled);
+    List<String> getEnabledNotificationListenerPackages();
+    List<ComponentName> getEnabledNotificationListeners(int userId);
+
     int getZenMode();
     ZenModeConfig getZenModeConfig();
     oneway void setZenMode(int mode, in Uri conditionId, String reason);
@@ -123,9 +133,9 @@
     boolean isNotificationPolicyAccessGranted(String pkg);
     NotificationManager.Policy getNotificationPolicy(String pkg);
     void setNotificationPolicy(String pkg, in NotificationManager.Policy policy);
-    String[] getPackagesRequestingNotificationPolicyAccess();
     boolean isNotificationPolicyAccessGrantedForPackage(String pkg);
     void setNotificationPolicyAccessGranted(String pkg, boolean granted);
+    void setNotificationPolicyAccessGrantedForUser(String pkg, int userId, boolean granted);
     AutomaticZenRule getAutomaticZenRule(String id);
     List<ZenModeConfig.ZenRule> getZenRules();
     String addAutomaticZenRule(in AutomaticZenRule automaticZenRule);
diff --git a/core/java/android/app/ITaskStackListener.aidl b/core/java/android/app/ITaskStackListener.aidl
index b5b1017..a56965b 100644
--- a/core/java/android/app/ITaskStackListener.aidl
+++ b/core/java/android/app/ITaskStackListener.aidl
@@ -30,7 +30,7 @@
     void onTaskStackChanged();
 
     /** Called whenever an Activity is moved to the pinned stack from another stack. */
-    void onActivityPinned(String packageName, int taskId);
+    void onActivityPinned(String packageName, int userId, int taskId);
 
     /** Called whenever an Activity is moved from the pinned stack to another stack. */
     void onActivityUnpinned();
diff --git a/core/java/android/app/IUidObserver.aidl b/core/java/android/app/IUidObserver.aidl
index ae64875..01a9cbf 100644
--- a/core/java/android/app/IUidObserver.aidl
+++ b/core/java/android/app/IUidObserver.aidl
@@ -43,4 +43,14 @@
      * a sufficient period of time, or all of its processes have gone away.
      */
     void onUidIdle(int uid, boolean disabled);
+
+    /**
+     * Report when the cached state of a uid has changed.
+     * If true, a uid has become cached -- that is, it has some active processes that are
+     * all in the cached state.  It should be doing as little as possible at this point.
+     * If false, that a uid is no longer cached.  This will only be called after
+     * onUidCached() has been reported true.  It will happen when either one of its actively
+     * running processes is no longer cached, or it no longer has any actively running processes.
+     */
+    void onUidCachedChanged(int uid, boolean cached);
 }
diff --git a/core/java/android/app/IWallpaperManager.aidl b/core/java/android/app/IWallpaperManager.aidl
index 7ac2223..49d58eb 100644
--- a/core/java/android/app/IWallpaperManager.aidl
+++ b/core/java/android/app/IWallpaperManager.aidl
@@ -60,7 +60,7 @@
     /**
      * Get the wallpaper for a given user.
      */
-    ParcelFileDescriptor getWallpaper(IWallpaperManagerCallback cb, int which,
+    ParcelFileDescriptor getWallpaper(String callingPkg, IWallpaperManagerCallback cb, int which,
             out Bundle outParams, int userId);
 
     /**
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index 467fc95..e260967 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -48,6 +48,7 @@
 import android.view.MotionEvent;
 import android.view.ViewConfiguration;
 import android.view.Window;
+
 import com.android.internal.content.ReferrerIntent;
 
 import java.io.File;
@@ -1305,7 +1306,7 @@
      * @param intent The new intent being received.
      */
     public void callActivityOnNewIntent(Activity activity, Intent intent) {
-        activity.onNewIntent(intent);
+        activity.performNewIntent(intent);
     }
 
     /**
diff --git a/core/java/android/app/KeyguardManager.java b/core/java/android/app/KeyguardManager.java
index 16b21f1..54f74b1 100644
--- a/core/java/android/app/KeyguardManager.java
+++ b/core/java/android/app/KeyguardManager.java
@@ -174,7 +174,7 @@
      */
     public Intent createConfirmFactoryResetCredentialIntent(
             CharSequence title, CharSequence description, CharSequence alternateButtonLabel) {
-        if (!LockPatternUtils.frpCredentialEnabled()) {
+        if (!LockPatternUtils.frpCredentialEnabled(mContext)) {
             Log.w(TAG, "Factory reset credentials not supported.");
             return null;
         }
@@ -298,7 +298,9 @@
     }
 
     /**
-     * Callback passed to {@link KeyguardManager#dismissKeyguard} to notify caller of result.
+     * Callback passed to
+     * {@link KeyguardManager#requestDismissKeyguard(Activity, KeyguardDismissCallback)}
+     * to notify caller of result.
      */
     public static abstract class KeyguardDismissCallback {
 
@@ -461,6 +463,9 @@
      * <p>
      * If the Keyguard is secure and the device is not in a trusted state, this will bring up the
      * UI so the user can enter their credentials.
+     * <p>
+     * If the value set for the {@link Activity} attr {@link android.R.attr#turnScreenOn} is true,
+     * the screen will turn on when the keyguard is dismissed.
      *
      * @param activity The activity requesting the dismissal. The activity must be either visible
      *                 by using {@link LayoutParams#FLAG_SHOW_WHEN_LOCKED} or must be in a state in
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index 79e5407..f6d9710 100644
--- a/core/java/android/app/LoadedApk.java
+++ b/core/java/android/app/LoadedApk.java
@@ -97,7 +97,6 @@
     private String mAppDir;
     private String mResDir;
     private String[] mOverlayDirs;
-    private String[] mSharedLibraries;
     private String mDataDir;
     private String mLibDir;
     private File mDataDirFile;
@@ -116,6 +115,7 @@
     private String[] mSplitNames;
     private String[] mSplitAppDirs;
     private String[] mSplitResDirs;
+    private String[] mSplitClassLoaderNames;
 
     private final ArrayMap<Context, ArrayMap<BroadcastReceiver, ReceiverDispatcher>> mReceivers
         = new ArrayMap<>();
@@ -126,8 +126,6 @@
     private final ArrayMap<Context, ArrayMap<ServiceConnection, LoadedApk.ServiceDispatcher>> mUnboundServices
         = new ArrayMap<>();
 
-    int mClientCount = 0;
-
     Application getApplication() {
         return mApplication;
     }
@@ -192,8 +190,8 @@
         mResDir = null;
         mSplitAppDirs = null;
         mSplitResDirs = null;
+        mSplitClassLoaderNames = null;
         mOverlayDirs = null;
-        mSharedLibraries = null;
         mDataDir = null;
         mDataDirFile = null;
         mDeviceProtectedDataDirFile = null;
@@ -324,7 +322,6 @@
         mAppDir = aInfo.sourceDir;
         mResDir = aInfo.uid == myUid ? aInfo.sourceDir : aInfo.publicSourceDir;
         mOverlayDirs = aInfo.resourceDirs;
-        mSharedLibraries = aInfo.sharedLibraryFiles;
         mDataDir = aInfo.dataDir;
         mLibDir = aInfo.nativeLibraryDir;
         mDataDirFile = FileUtils.newFileOrNull(aInfo.dataDir);
@@ -334,6 +331,7 @@
         mSplitNames = aInfo.splitNames;
         mSplitAppDirs = aInfo.splitSourceDirs;
         mSplitResDirs = aInfo.uid == myUid ? aInfo.splitSourceDirs : aInfo.splitPublicSourceDirs;
+        mSplitClassLoaderNames = aInfo.splitClassLoaderNames;
 
         if (aInfo.requestsIsolatedSplitLoading() && !ArrayUtils.isEmpty(mSplitNames)) {
             mSplitLoader = new SplitDependencyLoaderImpl(aInfo.splitDependencies);
@@ -530,7 +528,8 @@
             // Since we handled the special base case above, parentSplitIdx is always valid.
             final ClassLoader parent = mCachedClassLoaders[parentSplitIdx];
             mCachedClassLoaders[splitIdx] = ApplicationLoaders.getDefault().getClassLoader(
-                    mSplitAppDirs[splitIdx - 1], getTargetSdkVersion(), false, null, null, parent);
+                    mSplitAppDirs[splitIdx - 1], getTargetSdkVersion(), false, null, null, parent,
+                    mSplitClassLoaderNames[splitIdx - 1]);
 
             Collections.addAll(splitPaths, mCachedResourcePaths[parentSplitIdx]);
             splitPaths.add(mSplitResDirs[splitIdx - 1]);
@@ -626,17 +625,31 @@
         final List<String> zipPaths = new ArrayList<>(10);
         final List<String> libPaths = new ArrayList<>(10);
 
-        final boolean isBundledApp = mApplicationInfo.isSystemApp()
+        boolean isBundledApp = mApplicationInfo.isSystemApp()
                 && !mApplicationInfo.isUpdatedSystemApp();
 
+        // Vendor apks are treated as bundled only when /vendor/lib is in the default search
+        // paths. If not, they are treated as unbundled; access to system libs is limited.
+        // Having /vendor/lib in the default search paths means that all system processes
+        // are allowed to use any vendor library, which in turn means that system is dependent
+        // on vendor partition. In the contrary, not having /vendor/lib in the default search
+        // paths mean that the two partitions are separated and thus we can treat vendor apks
+        // as unbundled.
+        final String defaultSearchPaths = System.getProperty("java.library.path");
+        final boolean treatVendorApkAsUnbundled = !defaultSearchPaths.contains("/vendor/lib");
+        if (mApplicationInfo.getCodePath() != null
+                && mApplicationInfo.getCodePath().startsWith("/vendor/")
+                && treatVendorApkAsUnbundled) {
+            isBundledApp = false;
+        }
+
         makePaths(mActivityThread, isBundledApp, mApplicationInfo, zipPaths, libPaths);
 
         String libraryPermittedPath = mDataDir;
         if (isBundledApp) {
             // This is necessary to grant bundled apps access to
             // libraries located in subdirectories of /system/lib
-            libraryPermittedPath += File.pathSeparator +
-                                    System.getProperty("java.library.path");
+            libraryPermittedPath += File.pathSeparator + defaultSearchPaths;
         }
 
         final String librarySearchPath = TextUtils.join(File.pathSeparator, libPaths);
@@ -650,8 +663,9 @@
             if (mClassLoader == null) {
                 StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
                 mClassLoader = ApplicationLoaders.getDefault().getClassLoader(
-                    "" /* codePath */, mApplicationInfo.targetSdkVersion, isBundledApp,
-                    librarySearchPath, libraryPermittedPath, mBaseClassLoader);
+                        "" /* codePath */, mApplicationInfo.targetSdkVersion, isBundledApp,
+                        librarySearchPath, libraryPermittedPath, mBaseClassLoader,
+                        null /* classLoaderName */);
                 StrictMode.setThreadPolicy(oldPolicy);
             }
 
@@ -678,7 +692,8 @@
 
             mClassLoader = ApplicationLoaders.getDefault().getClassLoader(zip,
                     mApplicationInfo.targetSdkVersion, isBundledApp, librarySearchPath,
-                    libraryPermittedPath, mBaseClassLoader);
+                    libraryPermittedPath, mBaseClassLoader,
+                    mApplicationInfo.classLoaderName);
 
             StrictMode.setThreadPolicy(oldPolicy);
             // Setup the class loader paths for profiling.
diff --git a/core/java/android/app/MediaRouteButton.java b/core/java/android/app/MediaRouteButton.java
index d2d7b6d..a4a89fa 100644
--- a/core/java/android/app/MediaRouteButton.java
+++ b/core/java/android/app/MediaRouteButton.java
@@ -24,6 +24,7 @@
 import android.content.ContextWrapper;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
+import android.graphics.drawable.AnimationDrawable;
 import android.graphics.drawable.Drawable;
 import android.media.MediaRouter;
 import android.media.MediaRouter.RouteGroup;
@@ -339,28 +340,42 @@
     }
 
     private void refreshRoute() {
+        final MediaRouter.RouteInfo route = mRouter.getSelectedRoute();
+        final boolean isRemote = !route.isDefault() && route.matchesTypes(mRouteTypes);
+        final boolean isConnecting = isRemote && route.isConnecting();
+        boolean needsRefresh = false;
+        if (mRemoteActive != isRemote) {
+            mRemoteActive = isRemote;
+            needsRefresh = true;
+        }
+        if (mIsConnecting != isConnecting) {
+            mIsConnecting = isConnecting;
+            needsRefresh = true;
+        }
+
+        if (needsRefresh) {
+            refreshDrawableState();
+        }
         if (mAttachedToWindow) {
-            final MediaRouter.RouteInfo route = mRouter.getSelectedRoute();
-            final boolean isRemote = !route.isDefault() && route.matchesTypes(mRouteTypes);
-            final boolean isConnecting = isRemote && route.isConnecting();
-
-            boolean needsRefresh = false;
-            if (mRemoteActive != isRemote) {
-                mRemoteActive = isRemote;
-                needsRefresh = true;
-            }
-            if (mIsConnecting != isConnecting) {
-                mIsConnecting = isConnecting;
-                needsRefresh = true;
-            }
-
-            if (needsRefresh) {
-                refreshDrawableState();
-            }
-
             setEnabled(mRouter.isRouteAvailable(mRouteTypes,
                     MediaRouter.AVAILABILITY_FLAG_IGNORE_DEFAULT_ROUTE));
         }
+        if (mRemoteIndicator != null
+                && mRemoteIndicator.getCurrent() instanceof AnimationDrawable) {
+            AnimationDrawable curDrawable = (AnimationDrawable) mRemoteIndicator.getCurrent();
+            if (mAttachedToWindow) {
+                if ((needsRefresh || isConnecting) && !curDrawable.isRunning()) {
+                    curDrawable.start();
+                }
+            } else if (isRemote && !isConnecting) {
+                // When the route is already connected before the view is attached, show the last
+                // frame of the connected animation immediately.
+                if (curDrawable.isRunning()) {
+                    curDrawable.stop();
+                }
+                curDrawable.selectDrawable(curDrawable.getNumberOfFrames() - 1);
+            }
+        }
     }
 
     private final class MediaRouterCallback extends MediaRouter.SimpleCallback {
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 531afa4..4a794c9 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -33,6 +33,7 @@
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ShortcutInfo;
 import android.content.res.ColorStateList;
+import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
@@ -59,7 +60,6 @@
 import android.text.Spanned;
 import android.text.TextUtils;
 import android.text.style.AbsoluteSizeSpan;
-import android.text.style.BackgroundColorSpan;
 import android.text.style.CharacterStyle;
 import android.text.style.ForegroundColorSpan;
 import android.text.style.RelativeSizeSpan;
@@ -474,7 +474,7 @@
      * </ul>
      * <p>
      * Since hardware varies, you are not guaranteed that any of the values
-     * you pass are honored exactly.  Use the system defaults (TODO) if possible
+     * you pass are honored exactly.  Use the system defaults if possible
      * because they will be set to values that work on any given hardware.
      * <p>
      * The alpha channel must be set for forward compatibility.
@@ -1163,7 +1163,8 @@
      * Constant for {@link Builder#setGroupAlertBehavior(int)}, meaning that all children
      * notification in a group should be silenced (no sound or vibration) even if they are posted
      * to a {@link NotificationChannel} that has sound and/or vibration. Use this constant to
-     * mute this notification if this notification is a group child.
+     * mute this notification if this notification is a group child. This must be applied to all
+     * children notifications you want to mute.
      *
      * <p> For example, you might want to use this constant if you post a number of children
      * notifications at once (say, after a periodic sync), and only need to notify the user
@@ -1178,7 +1179,8 @@
      * to mute this notification if this notification is a group summary.
      *
      * <p>For example, you might want to use this constant if only the children notifications
-     * in your group have content and the summary is only used to visually group notifications.
+     * in your group have content and the summary is only used to visually group notifications
+     * rather than to alert the user that new information is available.
      */
     public static final int GROUP_ALERT_CHILDREN = 2;
 
@@ -2779,6 +2781,9 @@
         private ArrayList<Action> mOriginalActions;
         private boolean mRebuildStyledRemoteViews;
 
+        private boolean mTintActionButtons;
+        private boolean mInNightMode;
+
         /**
          * Constructs a new Builder with the defaults:
          *
@@ -2810,6 +2815,14 @@
          */
         public Builder(Context context, Notification toAdopt) {
             mContext = context;
+            Resources res = mContext.getResources();
+            mTintActionButtons = res.getBoolean(R.bool.config_tintNotificationActionButtons);
+
+            if (res.getBoolean(R.bool.config_enableNightMode)) {
+                Configuration currentConfig = res.getConfiguration();
+                mInNightMode = (currentConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK)
+                        == Configuration.UI_MODE_NIGHT_YES;
+            }
 
             if (toAdopt == null) {
                 mN = new Notification();
@@ -2902,7 +2915,9 @@
          * Sets the group alert behavior for this notification. Use this method to mute this
          * notification if alerts for this notification's group should be handled by a different
          * notification. This is only applicable for notifications that belong to a
-         * {@link #setGroup(String) group}.
+         * {@link #setGroup(String) group}. This must be called on all notifications you want to
+         * mute. For example, if you want only the summary of your group to make noise, all
+         * children in the group should have the group alert behavior {@link #GROUP_ALERT_SUMMARY}.
          *
          * <p> The default value is {@link #GROUP_ALERT_ALL}.</p>
          */
@@ -3882,7 +3897,7 @@
             boolean showProgress = handleProgressBar(p.hasProgress, contentView, ex);
             if (p.title != null) {
                 contentView.setViewVisibility(R.id.title, View.VISIBLE);
-                contentView.setTextViewText(R.id.title, p.title);
+                contentView.setTextViewText(R.id.title, processTextSpans(p.title));
                 if (!p.ambient) {
                     setTextViewColorPrimary(contentView, R.id.title);
                 }
@@ -3893,7 +3908,7 @@
             if (p.text != null) {
                 int textId = showProgress ? com.android.internal.R.id.text_line_1
                         : com.android.internal.R.id.text;
-                contentView.setTextViewText(textId, p.text);
+                contentView.setTextViewText(textId, processTextSpans(p.text));
                 if (!p.ambient) {
                     setTextViewColorSecondary(contentView, textId);
                 }
@@ -3905,11 +3920,22 @@
             return contentView;
         }
 
+        private CharSequence processTextSpans(CharSequence text) {
+            if (hasForegroundColor()) {
+                return NotificationColorUtil.clearColorSpans(text);
+            }
+            return text;
+        }
+
         private void setTextViewColorPrimary(RemoteViews contentView, int id) {
             ensureColors();
             contentView.setTextColor(id, mPrimaryTextColor);
         }
 
+        private boolean hasForegroundColor() {
+            return mForegroundColor != COLOR_INVALID;
+        }
+
         /**
          * @return the primary text color
          * @hide
@@ -3952,7 +3978,7 @@
                     || mActionBarColor == COLOR_INVALID
                     || mTextColorsAreForBackground != backgroundColor) {
                 mTextColorsAreForBackground = backgroundColor;
-                if (mForegroundColor == COLOR_INVALID || !isColorized()) {
+                if (!hasForegroundColor() || !isColorized()) {
                     mPrimaryTextColor = NotificationColorUtil.resolvePrimaryColor(mContext,
                             backgroundColor);
                     mSecondaryTextColor = NotificationColorUtil.resolveSecondaryColor(mContext,
@@ -4203,7 +4229,8 @@
             }
             if (headerText != null) {
                 // TODO: Remove the span entirely to only have the string with propper formating.
-                contentView.setTextViewText(R.id.header_text, processLegacyText(headerText));
+                contentView.setTextViewText(R.id.header_text, processTextSpans(
+                        processLegacyText(headerText)));
                 setTextViewColorSecondary(contentView, R.id.header_text);
                 contentView.setViewVisibility(R.id.header_text, View.VISIBLE);
                 contentView.setViewVisibility(R.id.header_text_divider, View.VISIBLE);
@@ -4334,18 +4361,21 @@
             if (!p.ambient && validRemoteInput && replyText != null
                     && replyText.length > 0 && !TextUtils.isEmpty(replyText[0])) {
                 big.setViewVisibility(R.id.notification_material_reply_container, View.VISIBLE);
-                big.setTextViewText(R.id.notification_material_reply_text_1, replyText[0]);
+                big.setTextViewText(R.id.notification_material_reply_text_1,
+                        processTextSpans(replyText[0]));
                 setTextViewColorSecondary(big, R.id.notification_material_reply_text_1);
 
                 if (replyText.length > 1 && !TextUtils.isEmpty(replyText[1])) {
                     big.setViewVisibility(R.id.notification_material_reply_text_2, View.VISIBLE);
-                    big.setTextViewText(R.id.notification_material_reply_text_2, replyText[1]);
+                    big.setTextViewText(R.id.notification_material_reply_text_2,
+                            processTextSpans(replyText[1]));
                     setTextViewColorSecondary(big, R.id.notification_material_reply_text_2);
 
                     if (replyText.length > 2 && !TextUtils.isEmpty(replyText[2])) {
                         big.setViewVisibility(
                                 R.id.notification_material_reply_text_3, View.VISIBLE);
-                        big.setTextViewText(R.id.notification_material_reply_text_3, replyText[2]);
+                        big.setTextViewText(R.id.notification_material_reply_text_3,
+                                processTextSpans(replyText[2]));
                         setTextViewColorSecondary(big, R.id.notification_material_reply_text_3);
                     }
                 }
@@ -4652,25 +4682,26 @@
                 CharSequence title = action.title;
                 ColorStateList[] outResultColor = null;
                 if (isLegacy()) {
-                    title = clearColorSpans(title);
+                    title = NotificationColorUtil.clearColorSpans(title);
                 } else {
                     outResultColor = new ColorStateList[1];
                     title = ensureColorSpanContrast(title, bgColor, outResultColor);
                 }
-                button.setTextViewText(R.id.action0, title);
+                button.setTextViewText(R.id.action0, processTextSpans(title));
                 setTextViewColorPrimary(button, R.id.action0);
                 if (outResultColor != null && outResultColor[0] != null) {
                     // We need to set the text color as well since changing a text to uppercase
                     // clears its spans.
                     button.setTextColor(R.id.action0, outResultColor[0]);
-                } else if (mN.color != COLOR_DEFAULT && !isColorized()) {
+                } else if (mN.color != COLOR_DEFAULT && !isColorized() && mTintActionButtons) {
                     button.setTextColor(R.id.action0,resolveContrastColor());
                 }
             } else {
-                button.setTextViewText(R.id.action0, processLegacyText(action.title));
+                button.setTextViewText(R.id.action0, processTextSpans(
+                        processLegacyText(action.title)));
                 if (isColorized() && !ambient) {
                     setTextViewColorPrimary(button, R.id.action0);
-                } else if (mN.color != COLOR_DEFAULT) {
+                } else if (mN.color != COLOR_DEFAULT && mTintActionButtons) {
                     button.setTextColor(R.id.action0,
                             ambient ? resolveAmbientColor() : resolveContrastColor());
                 }
@@ -4679,45 +4710,6 @@
         }
 
         /**
-         * Clears all color spans of a text
-         * @param charSequence the input text
-         * @return the same text but without color spans
-         */
-        private CharSequence clearColorSpans(CharSequence charSequence) {
-            if (charSequence instanceof Spanned) {
-                Spanned ss = (Spanned) charSequence;
-                Object[] spans = ss.getSpans(0, ss.length(), Object.class);
-                SpannableStringBuilder builder = new SpannableStringBuilder(ss.toString());
-                for (Object span : spans) {
-                    Object resultSpan = span;
-                    if (resultSpan instanceof CharacterStyle) {
-                        resultSpan = ((CharacterStyle) span).getUnderlying();
-                    }
-                    if (resultSpan instanceof TextAppearanceSpan) {
-                        TextAppearanceSpan originalSpan = (TextAppearanceSpan) resultSpan;
-                        if (originalSpan.getTextColor() != null) {
-                            resultSpan = new TextAppearanceSpan(
-                                    originalSpan.getFamily(),
-                                    originalSpan.getTextStyle(),
-                                    originalSpan.getTextSize(),
-                                    null,
-                                    originalSpan.getLinkTextColor());
-                        }
-                    } else if (resultSpan instanceof ForegroundColorSpan
-                            || (resultSpan instanceof BackgroundColorSpan)) {
-                        continue;
-                    } else {
-                        resultSpan = span;
-                    }
-                    builder.setSpan(resultSpan, ss.getSpanStart(span), ss.getSpanEnd(span),
-                            ss.getSpanFlags(span));
-                }
-                return builder;
-            }
-            return charSequence;
-        }
-
-        /**
          * Ensures contrast on color spans against a background color. also returns the color of the
          * text if a span was found that spans over the whole text.
          *
@@ -4749,7 +4741,7 @@
                             int[] newColors = new int[colors.length];
                             for (int i = 0; i < newColors.length; i++) {
                                 newColors[i] = NotificationColorUtil.ensureLargeTextContrast(
-                                        colors[i], background);
+                                        colors[i], background, mInNightMode);
                             }
                             textColor = new ColorStateList(textColor.getStates().clone(),
                                     newColors);
@@ -4768,7 +4760,7 @@
                         ForegroundColorSpan originalSpan = (ForegroundColorSpan) resultSpan;
                         int foregroundColor = originalSpan.getForegroundColor();
                         foregroundColor = NotificationColorUtil.ensureLargeTextContrast(
-                                foregroundColor, background);
+                                foregroundColor, background, mInNightMode);
                         resultSpan = new ForegroundColorSpan(foregroundColor);
                         if (fullLength) {
                             outResultColor[0] = ColorStateList.valueOf(foregroundColor);
@@ -4863,7 +4855,7 @@
                 color = mSecondaryTextColor;
             } else {
                 color = NotificationColorUtil.resolveContrastColor(mContext, mN.color,
-                        background);
+                        background, mInNightMode);
             }
             if (Color.alpha(color) < 255) {
                 // alpha doesn't go well for color filters, so let's blend it manually
@@ -4958,7 +4950,6 @@
                 mStyle.purgeResources();
                 mStyle.buildStyled(mN);
             }
-
             mN.reduceImageSizes(mContext);
 
             if (mContext.getApplicationInfo().targetSdkVersion < Build.VERSION_CODES.N
@@ -5003,18 +4994,20 @@
 
         /**
          * Removes RemoteViews that were created for compatibility from {@param n}, if they did not
-         * change.
+         * change. Also removes extenders on low ram devices, as
+         * {@link android.service.notification.NotificationListenerService} services are disabled.
          *
          * @return {@param n}, if no stripping is needed, otherwise a stripped clone of {@param n}.
          *
          * @hide
          */
-        public static Notification maybeCloneStrippedForDelivery(Notification n) {
+        public static Notification maybeCloneStrippedForDelivery(Notification n, boolean isLowRam) {
             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 (!TextUtils.isEmpty(templateClass)
+            if (!isLowRam
+                    && !TextUtils.isEmpty(templateClass)
                     && getNotificationStyleClass(templateClass) == null) {
                 return n;
             }
@@ -5031,7 +5024,8 @@
                             n.headsUpContentView.getSequenceNumber();
 
             // Nothing to do here, no need to clone.
-            if (!stripContentView && !stripBigContentView && !stripHeadsUpContentView) {
+            if (!isLowRam
+                    && !stripContentView && !stripBigContentView && !stripHeadsUpContentView) {
                 return n;
             }
 
@@ -5048,6 +5042,11 @@
                 clone.headsUpContentView = null;
                 clone.extras.remove(EXTRA_REBUILD_HEADS_UP_CONTENT_VIEW_ACTION_COUNT);
             }
+            if (isLowRam) {
+                clone.extras.remove(Notification.TvExtender.EXTRA_TV_EXTENDER);
+                clone.extras.remove(WearableExtender.EXTRA_WEARABLE_EXTENSIONS);
+                clone.extras.remove(CarExtender.EXTRA_CAR_EXTENDER);
+            }
             return clone;
         }
 
@@ -5100,6 +5099,10 @@
             return mN.isColorized();
         }
 
+        private boolean shouldTintActionButtons() {
+            return mTintActionButtons;
+        }
+
         private boolean textColorsNeedInversion() {
             if (mStyle == null || !MediaStyle.class.equals(mStyle.getClass())) {
                 return false;
@@ -5159,17 +5162,22 @@
         if (extras.getBoolean(EXTRA_REDUCED_IMAGES)) {
             return;
         }
+        boolean isLowRam = ActivityManager.isLowRamDeviceStatic();
         if (mLargeIcon != null || largeIcon != null) {
             Resources resources = context.getResources();
             Class<? extends Style> style = getNotificationStyle();
-            int maxWidth = resources.getDimensionPixelSize(R.dimen.notification_right_icon_size);
+            int maxWidth = resources.getDimensionPixelSize(isLowRam
+                    ? R.dimen.notification_right_icon_size_low_ram
+                    : R.dimen.notification_right_icon_size);
             int maxHeight = maxWidth;
             if (MediaStyle.class.equals(style)
                     || DecoratedMediaCustomViewStyle.class.equals(style)) {
-                maxHeight = resources.getDimensionPixelSize(
-                        R.dimen.notification_media_image_max_height);
-                maxWidth = resources.getDimensionPixelSize(
-                        R.dimen.notification_media_image_max_width);
+                maxHeight = resources.getDimensionPixelSize(isLowRam
+                        ? R.dimen.notification_media_image_max_height_low_ram
+                        : R.dimen.notification_media_image_max_height);
+                maxWidth = resources.getDimensionPixelSize(isLowRam
+                        ? R.dimen.notification_media_image_max_width_low_ram
+                        : R.dimen.notification_media_image_max_width);
             }
             if (mLargeIcon != null) {
                 mLargeIcon.scaleDownIfNecessary(maxWidth, maxHeight);
@@ -5178,19 +5186,22 @@
                 largeIcon = Icon.scaleDownIfNecessary(largeIcon, maxWidth, maxHeight);
             }
         }
-        reduceImageSizesForRemoteView(contentView, context);
-        reduceImageSizesForRemoteView(headsUpContentView, context);
-        reduceImageSizesForRemoteView(bigContentView, context);
+        reduceImageSizesForRemoteView(contentView, context, isLowRam);
+        reduceImageSizesForRemoteView(headsUpContentView, context, isLowRam);
+        reduceImageSizesForRemoteView(bigContentView, context, isLowRam);
         extras.putBoolean(EXTRA_REDUCED_IMAGES, true);
     }
 
-    private void reduceImageSizesForRemoteView(RemoteViews remoteView, Context context) {
+    private void reduceImageSizesForRemoteView(RemoteViews remoteView, Context context,
+            boolean isLowRam) {
         if (remoteView != null) {
             Resources resources = context.getResources();
-            int maxWidth = resources.getDimensionPixelSize(
-                    R.dimen.notification_custom_view_max_image_width);
-            int maxHeight = resources.getDimensionPixelSize(
-                    R.dimen.notification_custom_view_max_image_height);
+            int maxWidth = resources.getDimensionPixelSize(isLowRam
+                    ? R.dimen.notification_custom_view_max_image_width_low_ram
+                    : R.dimen.notification_custom_view_max_image_width);
+            int maxHeight = resources.getDimensionPixelSize(isLowRam
+                    ? R.dimen.notification_custom_view_max_image_height_low_ram
+                    : R.dimen.notification_custom_view_max_image_height);
             remoteView.reduceImageSizes(maxWidth, maxHeight);
         }
     }
@@ -5301,7 +5312,7 @@
     }
 
     /**
-     * @hide
+     * @removed
      */
     @SystemApi
     public static Class<? extends Style> getNotificationStyleClass(String templateClass) {
@@ -5606,16 +5617,20 @@
         public void reduceImageSizes(Context context) {
             super.reduceImageSizes(context);
             Resources resources = context.getResources();
+            boolean isLowRam = ActivityManager.isLowRamDeviceStatic();
             if (mPicture != null) {
-                int maxPictureWidth = resources.getDimensionPixelSize(
-                        R.dimen.notification_big_picture_max_height);
-                int maxPictureHeight = resources.getDimensionPixelSize(
-                        R.dimen.notification_big_picture_max_width);
+                int maxPictureWidth = resources.getDimensionPixelSize(isLowRam
+                        ? R.dimen.notification_big_picture_max_height_low_ram
+                        : R.dimen.notification_big_picture_max_height);
+                int maxPictureHeight = resources.getDimensionPixelSize(isLowRam
+                        ? R.dimen.notification_big_picture_max_width_low_ram
+                        : R.dimen.notification_big_picture_max_width);
                 mPicture = Icon.scaleDownIfNecessary(mPicture, maxPictureWidth, maxPictureHeight);
             }
             if (mBigLargeIcon != null) {
-                int rightIconSize = resources.getDimensionPixelSize(
-                        R.dimen.notification_right_icon_size);
+                int rightIconSize = resources.getDimensionPixelSize(isLowRam
+                        ? R.dimen.notification_right_icon_size_low_ram
+                        : R.dimen.notification_right_icon_size);
                 mBigLargeIcon.scaleDownIfNecessary(rightIconSize, rightIconSize);
             }
         }
@@ -5643,7 +5658,8 @@
 
             RemoteViews contentView = getStandardView(mBuilder.getBigPictureLayoutResource());
             if (mSummaryTextSet) {
-                contentView.setTextViewText(R.id.text, mBuilder.processLegacyText(mSummaryText));
+                contentView.setTextViewText(R.id.text, mBuilder.processTextSpans(
+                        mBuilder.processLegacyText(mSummaryText)));
                 mBuilder.setTextViewColorSecondary(contentView, R.id.text);
                 contentView.setViewVisibility(R.id.text, View.VISIBLE);
             }
@@ -5825,7 +5841,7 @@
 
         static void applyBigTextContentView(Builder builder,
                 RemoteViews contentView, CharSequence bigTextText) {
-            contentView.setTextViewText(R.id.big_text, bigTextText);
+            contentView.setTextViewText(R.id.big_text, builder.processTextSpans(bigTextText));
             builder.setTextViewColorSecondary(contentView, R.id.big_text);
             contentView.setViewVisibility(R.id.big_text,
                     TextUtils.isEmpty(bigTextText) ? View.GONE : View.VISIBLE);
@@ -6160,7 +6176,8 @@
                 int rowId = rowIds[i];
 
                 contentView.setViewVisibility(rowId, View.VISIBLE);
-                contentView.setTextViewText(rowId, makeMessageLine(m, mBuilder));
+                contentView.setTextViewText(rowId, mBuilder.processTextSpans(
+                        makeMessageLine(m, mBuilder)));
                 mBuilder.setTextViewColorSecondary(contentView, rowId);
 
                 if (contractedMessage == m) {
@@ -6187,6 +6204,8 @@
             BidiFormatter bidi = BidiFormatter.getInstance();
             SpannableStringBuilder sb = new SpannableStringBuilder();
             boolean colorize = builder.isColorized();
+            TextAppearanceSpan colorSpan;
+            CharSequence messageName;
             if (TextUtils.isEmpty(m.mSender)) {
                 CharSequence replyName = mUserDisplayName == null ? "" : mUserDisplayName;
                 sb.append(bidi.unicodeWrap(replyName),
@@ -6524,7 +6543,8 @@
                 CharSequence str = mTexts.get(i);
                 if (!TextUtils.isEmpty(str)) {
                     contentView.setViewVisibility(rowIds[i], View.VISIBLE);
-                    contentView.setTextViewText(rowIds[i], mBuilder.processLegacyText(str));
+                    contentView.setTextViewText(rowIds[i],
+                            mBuilder.processTextSpans(mBuilder.processLegacyText(str)));
                     mBuilder.setTextViewColorSecondary(contentView, rowIds[i]);
                     contentView.setViewPadding(rowIds[i], 0, topPadding, 0, 0);
                     handleInboxImageMargin(contentView, rowIds[i], first);
@@ -6715,8 +6735,16 @@
             RemoteViews button = new BuilderRemoteViews(mBuilder.mContext.getApplicationInfo(),
                     R.layout.notification_material_media_action);
             button.setImageViewIcon(R.id.action0, action.getIcon());
-            button.setDrawableParameters(R.id.action0, false, -1, color, PorterDuff.Mode.SRC_ATOP,
-                    -1);
+
+            // If the action buttons should not be tinted, then just use the default
+            // notification color. Otherwise, just use the passed-in color.
+            int tintColor = mBuilder.shouldTintActionButtons() || mBuilder.isColorized()
+                    ? color
+                    : NotificationColorUtil.resolveColor(mBuilder.mContext,
+                            Notification.COLOR_DEFAULT);
+
+            button.setDrawableParameters(R.id.action0, false, -1, tintColor,
+                    PorterDuff.Mode.SRC_ATOP, -1);
             if (!tombstone) {
                 button.setOnClickPendingIntent(R.id.action0, action.actionIntent);
             }
@@ -6902,6 +6930,7 @@
                 customContent = customContent.clone();
                 remoteViews.removeAllViewsExceptId(R.id.notification_main_column, R.id.progress);
                 remoteViews.addView(R.id.notification_main_column, customContent, 0 /* index */);
+                remoteViews.setReapplyDisallowed();
             }
             // also update the end margin if there is an image
             int endMargin = R.dimen.notification_content_margin_end;
@@ -7006,8 +7035,10 @@
                 // Need to clone customContent before adding, because otherwise it can no longer be
                 // parceled independently of remoteViews.
                 customContent = customContent.clone();
+                customContent.overrideTextColors(mBuilder.getPrimaryTextColor());
                 remoteViews.removeAllViews(id);
                 remoteViews.addView(id, customContent);
+                remoteViews.setReapplyDisallowed();
             }
             return remoteViews;
         }
@@ -8484,8 +8515,15 @@
 
         final StandardTemplateParams fillTextsFrom(Builder b) {
             Bundle extras = b.mN.extras;
-            title = b.processLegacyText(extras.getCharSequence(EXTRA_TITLE), ambient);
-            text = b.processLegacyText(extras.getCharSequence(EXTRA_TEXT), ambient);
+            this.title = b.processLegacyText(extras.getCharSequence(EXTRA_TITLE), ambient);
+
+            // Big text notifications should contain their content when viewed in ambient mode.
+            CharSequence text = extras.getCharSequence(EXTRA_BIG_TEXT);
+            if (!ambient || TextUtils.isEmpty(text)) {
+                text = extras.getCharSequence(EXTRA_TEXT);
+            }
+            this.text = b.processLegacyText(text, ambient);
+
             return this;
         }
     }
diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java
index d6e3691..556acdc 100644
--- a/core/java/android/app/NotificationChannel.java
+++ b/core/java/android/app/NotificationChannel.java
@@ -15,8 +15,11 @@
  */
 package android.app;
 
+import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.app.NotificationManager.Importance;
+import android.content.ContentResolver;
+import android.content.Context;
 import android.content.Intent;
 import android.media.AudioAttributes;
 import android.net.Uri;
@@ -26,6 +29,8 @@
 import android.service.notification.NotificationListenerService;
 import android.text.TextUtils;
 
+import com.android.internal.util.Preconditions;
+
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.xmlpull.v1.XmlPullParser;
@@ -565,14 +570,35 @@
     /**
      * @hide
      */
+    public void populateFromXmlForRestore(XmlPullParser parser, Context context) {
+        populateFromXml(parser, true, context);
+    }
+
+    /**
+     * @hide
+     */
     @SystemApi
     public void populateFromXml(XmlPullParser parser) {
+        populateFromXml(parser, false, null);
+    }
+
+    /**
+     * If {@param forRestore} is true, {@param Context} MUST be non-null.
+     */
+    private void populateFromXml(XmlPullParser parser, boolean forRestore,
+            @Nullable Context context) {
+        Preconditions.checkArgument(!forRestore || context != null,
+                "forRestore is true but got null context");
+
         // Name, id, and importance are set in the constructor.
         setDescription(parser.getAttributeValue(null, ATT_DESC));
         setBypassDnd(Notification.PRIORITY_DEFAULT
                 != safeInt(parser, ATT_PRIORITY, Notification.PRIORITY_DEFAULT));
         setLockscreenVisibility(safeInt(parser, ATT_VISIBILITY, DEFAULT_VISIBILITY));
-        setSound(safeUri(parser, ATT_SOUND), safeAudioAttributes(parser));
+
+        Uri sound = safeUri(parser, ATT_SOUND);
+        setSound(forRestore ? restoreSoundUri(context, sound) : sound, safeAudioAttributes(parser));
+
         enableLights(safeBool(parser, ATT_LIGHTS, false));
         setLightColor(safeInt(parser, ATT_LIGHT_COLOR, DEFAULT_LIGHT_COLOR));
         setVibrationPattern(safeLongArray(parser, ATT_VIBRATION, null));
@@ -584,11 +610,62 @@
         setBlockableSystem(safeBool(parser, ATT_BLOCKABLE_SYSTEM, false));
     }
 
+    @Nullable
+    private Uri restoreSoundUri(Context context, @Nullable Uri uri) {
+        if (uri == null) {
+            return null;
+        }
+        ContentResolver contentResolver = context.getContentResolver();
+        // There are backups out there with uncanonical uris (because we fixed this after
+        // shipping). If uncanonical uris are given to MediaProvider.uncanonicalize it won't
+        // verify the uri against device storage and we'll possibly end up with a broken uri.
+        // We then canonicalize the uri to uncanonicalize it back, which means we properly check
+        // the uri and in the case of not having the resource we end up with the default - better
+        // than broken. As a side effect we'll canonicalize already canonicalized uris, this is fine
+        // according to the docs because canonicalize method has to handle canonical uris as well.
+        Uri canonicalizedUri = contentResolver.canonicalize(uri);
+        if (canonicalizedUri == null) {
+            // We got a null because the uri in the backup does not exist here, so we return default
+            return Settings.System.DEFAULT_NOTIFICATION_URI;
+        }
+        return contentResolver.uncanonicalize(canonicalizedUri);
+    }
+
     /**
      * @hide
      */
     @SystemApi
     public void writeXml(XmlSerializer out) throws IOException {
+        writeXml(out, false, null);
+    }
+
+    /**
+     * @hide
+     */
+    public void writeXmlForBackup(XmlSerializer out, Context context) throws IOException {
+        writeXml(out, true, context);
+    }
+
+    private Uri getSoundForBackup(Context context) {
+        Uri sound = getSound();
+        if (sound == null) {
+            return null;
+        }
+        Uri canonicalSound = context.getContentResolver().canonicalize(sound);
+        if (canonicalSound == null) {
+            // The content provider does not support canonical uris so we backup the default
+            return Settings.System.DEFAULT_NOTIFICATION_URI;
+        }
+        return canonicalSound;
+    }
+
+    /**
+     * If {@param forBackup} is true, {@param Context} MUST be non-null.
+     */
+    private void writeXml(XmlSerializer out, boolean forBackup, @Nullable Context context)
+            throws IOException {
+        Preconditions.checkArgument(!forBackup || context != null,
+                "forBackup is true but got null context");
         out.startTag(null, TAG_CHANNEL);
         out.attribute(null, ATT_ID, getId());
         if (getName() != null) {
@@ -609,8 +686,9 @@
             out.attribute(null, ATT_VISIBILITY,
                     Integer.toString(getLockscreenVisibility()));
         }
-        if (getSound() != null) {
-            out.attribute(null, ATT_SOUND, getSound().toString());
+        Uri sound = forBackup ? getSoundForBackup(context) : getSound();
+        if (sound != null) {
+            out.attribute(null, ATT_SOUND, sound.toString());
         }
         if (getAudioAttributes() != null) {
             out.attribute(null, ATT_USAGE, Integer.toString(getAudioAttributes().getUsage()));
diff --git a/core/java/android/app/NotificationChannelGroup.java b/core/java/android/app/NotificationChannelGroup.java
index 7e8f191a..18ad9cf 100644
--- a/core/java/android/app/NotificationChannelGroup.java
+++ b/core/java/android/app/NotificationChannelGroup.java
@@ -15,24 +15,18 @@
  */
 package android.app;
 
-import android.annotation.StringRes;
 import android.annotation.SystemApi;
 import android.content.Intent;
-import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.service.notification.NotificationListenerService;
 import android.text.TextUtils;
-import android.util.Slog;
 
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlSerializer;
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -115,10 +109,8 @@
         return mName;
     }
 
-    /*
+    /**
      * Returns the list of channels that belong to this group
-     *
-     * @hide
      */
     public List<NotificationChannel> getChannels() {
         return mChannels;
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 9d7e4a2..34343e9 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -40,7 +40,6 @@
 import android.provider.Settings.Global;
 import android.service.notification.StatusBarNotification;
 import android.service.notification.ZenModeConfig;
-import android.util.ArraySet;
 import android.util.Log;
 
 import java.lang.annotation.Retention;
@@ -205,7 +204,12 @@
     public static final int IMPORTANCE_NONE = 0;
 
     /**
-     * Min notification importance: only shows in the shade, below the fold.
+     * Min notification importance: only shows in the shade, below the fold.  This should
+     * not be used with {@link Service#startForeground(int, Notification) Service.startForeground}
+     * since a foreground service is supposed to be something the user cares about so it does
+     * not make semantic sense to mark its notification as minimum importance.  If you do this
+     * as of Android version {@link android.os.Build.VERSION_CODES#O}, the system will show
+     * a higher-priority notification about your app running in the background.
      */
     public static final int IMPORTANCE_MIN = 1;
 
@@ -309,7 +313,9 @@
         }
         if (localLOGV) Log.v(TAG, pkg + ": notify(" + id + ", " + notification + ")");
         notification.reduceImageSizes(mContext);
-        final Notification copy = Builder.maybeCloneStrippedForDelivery(notification);
+        ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
+        boolean isLowRam = am.isLowRamDevice();
+        final Notification copy = Builder.maybeCloneStrippedForDelivery(notification, isLowRam);
         try {
             service.enqueueNotificationWithTag(pkg, mContext.getOpPackageName(), tag, id,
                     copy, user.getIdentifier());
@@ -415,12 +421,16 @@
      * Creates a notification channel that notifications can be posted to.
      *
      * This can also be used to restore a deleted channel and to update an existing channel's
-     * name and description.
+     * name, description, and/or importance.
      *
      * <p>The name and description should only be changed if the locale changes
      * or in response to the user renaming this channel. For example, if a user has a channel
      * named 'John Doe' that represents messages from a 'John Doe', and 'John Doe' changes his name
      * to 'John Smith,' the channel can be renamed to match.
+     *
+     * <p>The importance of an existing channel will only be changed if the new importance is lower
+     * than the current value and the user has not altered any settings on this channel.
+     *
      * All other fields are ignored for channels that already exist.
      *
      * @param channel  the channel to create.  Note that the created channel may differ from this
@@ -744,14 +754,14 @@
     }
 
     /**
-     * Checks the ability to read/modify notification policy for the calling package.
+     * Checks the ability to read/modify notification do not disturb policy for the calling package.
      *
      * <p>
      * Returns true if the calling package can read/modify notification policy.
      *
      * <p>
-     * Request policy access by sending the user to the activity that matches the system intent
-     * action {@link android.provider.Settings#ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS}.
+     * Apps can request policy access by sending the user to the activity that matches the system
+     * intent action {@link android.provider.Settings#ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS}.
      *
      * <p>
      * Use {@link #ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED} to listen for
@@ -766,6 +776,39 @@
         }
     }
 
+    /**
+     * Checks whether the user has approved a given
+     * {@link android.service.notification.NotificationListenerService}.
+     *
+     * <p>
+     * The listener service must belong to the calling app.
+     *
+     * <p>
+     * Apps can request notification listener access by sending the user to the activity that
+     * matches the system intent action
+     * {@link android.provider.Settings#ACTION_NOTIFICATION_LISTENER_SETTINGS}.
+     */
+    public boolean isNotificationListenerAccessGranted(ComponentName listener) {
+        INotificationManager service = getService();
+        try {
+            return service.isNotificationListenerAccessGranted(listener);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public boolean isNotificationAssistantAccessGranted(ComponentName assistant) {
+        INotificationManager service = getService();
+        try {
+            return service.isNotificationAssistantAccessGranted(assistant);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
     /** @hide */
     public boolean isNotificationPolicyAccessGrantedForPackage(String pkg) {
         INotificationManager service = getService();
@@ -777,6 +820,18 @@
     }
 
     /**
+     * @hide
+     */
+    public List<String> getEnabledNotificationListenerPackages() {
+        INotificationManager service = getService();
+        try {
+            return service.getEnabledNotificationListenerPackages();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * Gets the current notification policy.
      *
      * <p>
@@ -822,21 +877,34 @@
     }
 
     /** @hide */
-    public ArraySet<String> getPackagesRequestingNotificationPolicyAccess() {
+    public void setNotificationListenerAccessGranted(ComponentName listener, boolean granted) {
         INotificationManager service = getService();
         try {
-            final String[] pkgs = service.getPackagesRequestingNotificationPolicyAccess();
-            if (pkgs != null && pkgs.length > 0) {
-                final ArraySet<String> rt = new ArraySet<>(pkgs.length);
-                for (int i = 0; i < pkgs.length; i++) {
-                    rt.add(pkgs[i]);
-                }
-                return rt;
-            }
+            service.setNotificationListenerAccessGranted(listener, granted);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
-        return new ArraySet<>();
+    }
+
+    /** @hide */
+    public void setNotificationListenerAccessGrantedForUser(ComponentName listener, int userId,
+            boolean granted) {
+        INotificationManager service = getService();
+        try {
+            service.setNotificationListenerAccessGrantedForUser(listener, userId, granted);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /** @hide */
+    public List<ComponentName> getEnabledNotificationListeners(int userId) {
+        INotificationManager service = getService();
+        try {
+            return service.getEnabledNotificationListeners(userId);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
     }
 
     private Context mContext;
diff --git a/core/java/android/app/ProfilerInfo.java b/core/java/android/app/ProfilerInfo.java
index f3fe677..fad4798 100644
--- a/core/java/android/app/ProfilerInfo.java
+++ b/core/java/android/app/ProfilerInfo.java
@@ -17,8 +17,11 @@
 package android.app;
 
 import android.os.Parcel;
-import android.os.Parcelable;
 import android.os.ParcelFileDescriptor;
+import android.os.Parcelable;
+import android.util.Slog;
+
+import java.io.IOException;
 
 /**
  * System private API for passing profiler settings.
@@ -27,6 +30,8 @@
  */
 public class ProfilerInfo implements Parcelable {
 
+    private static final String TAG = "ProfilerInfo";
+
     /* Name of profile output file. */
     public final String profileFile;
 
@@ -39,18 +44,50 @@
     /* Automatically stop the profiler when the app goes idle. */
     public final boolean autoStopProfiler;
 
-    /* Indicates whether to stream the profiling info to the out file continuously. */
+    /*
+     * Indicates whether to stream the profiling info to the out file continuously.
+     */
     public final boolean streamingOutput;
 
+    /**
+     * Denotes an agent (and its parameters) to attach for profiling.
+     */
+    public final String agent;
+
     public ProfilerInfo(String filename, ParcelFileDescriptor fd, int interval, boolean autoStop,
-                        boolean streaming) {
+            boolean streaming, String agent) {
         profileFile = filename;
         profileFd = fd;
         samplingInterval = interval;
         autoStopProfiler = autoStop;
         streamingOutput = streaming;
+        this.agent = agent;
     }
 
+    public ProfilerInfo(ProfilerInfo in) {
+        profileFile = in.profileFile;
+        profileFd = in.profileFd;
+        samplingInterval = in.samplingInterval;
+        autoStopProfiler = in.autoStopProfiler;
+        streamingOutput = in.streamingOutput;
+        agent = in.agent;
+    }
+
+    /**
+     * Close profileFd, if it is open. The field will be null after a call to this function.
+     */
+    public void closeFd() {
+        if (profileFd != null) {
+            try {
+                profileFd.close();
+            } catch (IOException e) {
+                Slog.w(TAG, "Failure closing profile fd", e);
+            }
+            profileFd = null;
+        }
+    }
+
+    @Override
     public int describeContents() {
         if (profileFd != null) {
             return profileFd.describeContents();
@@ -59,6 +96,7 @@
         }
     }
 
+    @Override
     public void writeToParcel(Parcel out, int flags) {
         out.writeString(profileFile);
         if (profileFd != null) {
@@ -70,18 +108,21 @@
         out.writeInt(samplingInterval);
         out.writeInt(autoStopProfiler ? 1 : 0);
         out.writeInt(streamingOutput ? 1 : 0);
+        out.writeString(agent);
     }
 
     public static final Parcelable.Creator<ProfilerInfo> CREATOR =
             new Parcelable.Creator<ProfilerInfo>() {
-        public ProfilerInfo createFromParcel(Parcel in) {
-            return new ProfilerInfo(in);
-        }
+                @Override
+                public ProfilerInfo createFromParcel(Parcel in) {
+                    return new ProfilerInfo(in);
+                }
 
-        public ProfilerInfo[] newArray(int size) {
-            return new ProfilerInfo[size];
-        }
-    };
+                @Override
+                public ProfilerInfo[] newArray(int size) {
+                    return new ProfilerInfo[size];
+                }
+            };
 
     private ProfilerInfo(Parcel in) {
         profileFile = in.readString();
@@ -89,5 +130,6 @@
         samplingInterval = in.readInt();
         autoStopProfiler = in.readInt() != 0;
         streamingOutput = in.readInt() != 0;
+        agent = in.readString();
     }
 }
diff --git a/core/java/android/app/SharedElementCallback.java b/core/java/android/app/SharedElementCallback.java
index bac84a4..80fb805 100644
--- a/core/java/android/app/SharedElementCallback.java
+++ b/core/java/android/app/SharedElementCallback.java
@@ -18,6 +18,7 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
+import android.graphics.GraphicBuffer;
 import android.graphics.Matrix;
 import android.graphics.RectF;
 import android.graphics.drawable.BitmapDrawable;
@@ -26,6 +27,7 @@
 import android.os.Parcelable;
 import android.transition.TransitionUtils;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.ImageView;
 import android.widget.ImageView.ScaleType;
 
@@ -44,6 +46,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_IMAGE_SCALETYPE = "sharedElement:snapshot:imageScaleType";
     private static final String BUNDLE_SNAPSHOT_IMAGE_MATRIX = "sharedElement:snapshot:imageMatrix";
 
@@ -173,10 +177,15 @@
             Drawable d = imageView.getDrawable();
             Drawable bg = imageView.getBackground();
             if (d != null && (bg == null || bg.getAlpha() == 0)) {
-                Bitmap bitmap = TransitionUtils.createDrawableBitmap(d);
+                Bitmap bitmap = TransitionUtils.createDrawableBitmap(d, imageView);
                 if (bitmap != null) {
                     Bundle bundle = new Bundle();
-                    bundle.putParcelable(BUNDLE_SNAPSHOT_BITMAP, bitmap);
+                    if (bitmap.getConfig() != Bitmap.Config.HARDWARE) {
+                        bundle.putParcelable(BUNDLE_SNAPSHOT_BITMAP, bitmap);
+                    } else {
+                        GraphicBuffer graphicBuffer = bitmap.createGraphicBufferHandle();
+                        bundle.putParcelable(BUNDLE_SNAPSHOT_GRAPHIC_BUFFER, graphicBuffer);
+                    }
                     bundle.putString(BUNDLE_SNAPSHOT_IMAGE_SCALETYPE,
                             imageView.getScaleType().toString());
                     if (imageView.getScaleType() == ScaleType.MATRIX) {
@@ -194,7 +203,8 @@
         } else {
             mTempMatrix.set(viewToGlobalMatrix);
         }
-        return TransitionUtils.createViewBitmap(sharedElement, mTempMatrix, screenBounds);
+        ViewGroup parent = (ViewGroup) sharedElement.getParent();
+        return TransitionUtils.createViewBitmap(sharedElement, mTempMatrix, screenBounds, parent);
     }
 
     /**
@@ -218,10 +228,14 @@
         View view = null;
         if (snapshot instanceof Bundle) {
             Bundle bundle = (Bundle) snapshot;
-            Bitmap bitmap = (Bitmap) bundle.getParcelable(BUNDLE_SNAPSHOT_BITMAP);
-            if (bitmap == null) {
+            GraphicBuffer buffer = bundle.getParcelable(BUNDLE_SNAPSHOT_GRAPHIC_BUFFER);
+            Bitmap bitmap = bundle.getParcelable(BUNDLE_SNAPSHOT_BITMAP);
+            if (buffer == null && bitmap == null) {
                 return null;
             }
+            if (bitmap == null) {
+                bitmap = Bitmap.createHardwareBitmap(buffer);
+            }
             ImageView imageView = new ImageView(context);
             view = imageView;
             imageView.setImageBitmap(bitmap);
diff --git a/core/java/android/app/SharedPreferencesImpl.java b/core/java/android/app/SharedPreferencesImpl.java
index 063ad24..6ea0825 100644
--- a/core/java/android/app/SharedPreferencesImpl.java
+++ b/core/java/android/app/SharedPreferencesImpl.java
@@ -23,16 +23,19 @@
 import android.system.ErrnoException;
 import android.system.Os;
 import android.system.StructStat;
+import android.system.StructTimespec;
 import android.util.Log;
 
-import com.google.android.collect.Maps;
-
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.ExponentiallyBucketedHistogram;
 import com.android.internal.util.XmlUtils;
 
 import dalvik.system.BlockGuard;
 
+import libcore.io.IoUtils;
+
+import com.google.android.collect.Maps;
+
 import org.xmlpull.v1.XmlPullParserException;
 
 import java.io.BufferedInputStream;
@@ -50,8 +53,6 @@
 import java.util.WeakHashMap;
 import java.util.concurrent.CountDownLatch;
 
-import libcore.io.IoUtils;
-
 final class SharedPreferencesImpl implements SharedPreferences {
     private static final String TAG = "SharedPreferencesImpl";
     private static final boolean DEBUG = false;
@@ -80,7 +81,7 @@
     private boolean mLoaded = false;
 
     @GuardedBy("mLock")
-    private long mStatTimestamp;
+    private StructTimespec mStatTimestamp;
 
     @GuardedBy("mLock")
     private long mStatSize;
@@ -162,7 +163,7 @@
             mLoaded = true;
             if (map != null) {
                 mMap = map;
-                mStatTimestamp = stat.st_mtime;
+                mStatTimestamp = stat.st_mtim;
                 mStatSize = stat.st_size;
             } else {
                 mMap = new HashMap<>();
@@ -209,7 +210,7 @@
         }
 
         synchronized (mLock) {
-            return mStatTimestamp != stat.st_mtime || mStatSize != stat.st_size;
+            return !stat.st_mtim.equals(mStatTimestamp) || mStatSize != stat.st_size;
         }
     }
 
@@ -744,7 +745,7 @@
             try {
                 final StructStat stat = Os.stat(mFile.getPath());
                 synchronized (mLock) {
-                    mStatTimestamp = stat.st_mtime;
+                    mStatTimestamp = stat.st_mtim;
                     mStatSize = stat.st_size;
                 }
             } catch (ErrnoException e) {
@@ -778,7 +779,7 @@
             }
 
             long fsyncDuration = fsyncTime - writeTime;
-            mSyncTimes.add(Long.valueOf(fsyncDuration).intValue());
+            mSyncTimes.add((int) fsyncDuration);
             mNumSync++;
 
             if (DEBUG || mNumSync % 1024 == 0 || fsyncDuration > MAX_FSYNC_DURATION_MILLIS) {
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 25e9224..ab70f0e 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -22,6 +22,7 @@
 import android.app.admin.IDevicePolicyManager;
 import android.app.job.IJobScheduler;
 import android.app.job.JobScheduler;
+import android.app.timezone.RulesManager;
 import android.app.trust.TrustManager;
 import android.app.usage.IStorageStatsManager;
 import android.app.usage.IUsageStatsManager;
@@ -38,6 +39,7 @@
 import android.content.RestrictionsManager;
 import android.content.pm.IShortcutService;
 import android.content.pm.LauncherApps;
+import android.content.pm.PackageManager;
 import android.content.pm.ShortcutManager;
 import android.content.res.Resources;
 import android.hardware.ConsumerIrManager;
@@ -81,6 +83,8 @@
 import android.net.NetworkScoreManager;
 import android.net.nsd.INsdManager;
 import android.net.nsd.NsdManager;
+import android.net.lowpan.ILowpanManager;
+import android.net.lowpan.LowpanManager;
 import android.net.wifi.IRttManager;
 import android.net.wifi.IWifiManager;
 import android.net.wifi.IWifiScanner;
@@ -538,6 +542,16 @@
                         ctx.mMainThread.getHandler());
             }});
 
+        registerService(Context.LOWPAN_SERVICE, LowpanManager.class,
+                new CachedServiceFetcher<LowpanManager>() {
+            @Override
+            public LowpanManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+                IBinder b = ServiceManager.getServiceOrThrow(Context.LOWPAN_SERVICE);
+                ILowpanManager service = ILowpanManager.Stub.asInterface(b);
+                return new LowpanManager(ctx.getOuterContext(), service,
+                        ConnectivityThread.getInstanceLooper());
+            }});
+
         registerService(Context.WIFI_SERVICE, WifiManager.class,
                 new CachedServiceFetcher<WifiManager>() {
             @Override
@@ -650,25 +664,30 @@
                 new CachedServiceFetcher<PrintManager>() {
             @Override
             public PrintManager createService(ContextImpl ctx) throws ServiceNotFoundException {
-                // Get the services without throwing as this is an optional feature
-                IBinder iBinder = ServiceManager.getService(Context.PRINT_SERVICE);
-                IPrintManager service = IPrintManager.Stub.asInterface(iBinder);
+                IPrintManager service = null;
+                // If the feature not present, don't try to look up every time
+                if (ctx.getPackageManager().hasSystemFeature(PackageManager.FEATURE_PRINTING)) {
+                    service = IPrintManager.Stub.asInterface(ServiceManager
+                            .getServiceOrThrow(Context.PRINT_SERVICE));
+                }
                 return new PrintManager(ctx.getOuterContext(), service, UserHandle.myUserId(),
                         UserHandle.getAppId(Process.myUid()));
             }});
 
         registerService(Context.COMPANION_DEVICE_SERVICE, CompanionDeviceManager.class,
                 new CachedServiceFetcher<CompanionDeviceManager>() {
-                    @Override
-                    public CompanionDeviceManager createService(ContextImpl ctx)
-                            throws ServiceNotFoundException {
-                        // Get the services without throwing as this is an optional feature
-                        IBinder iBinder =
-                                ServiceManager.getService(Context.COMPANION_DEVICE_SERVICE);
-                        ICompanionDeviceManager service =
-                                ICompanionDeviceManager.Stub.asInterface(iBinder);
-                        return new CompanionDeviceManager(service, ctx.getOuterContext());
-                    }});
+            @Override
+            public CompanionDeviceManager createService(ContextImpl ctx)
+                    throws ServiceNotFoundException {
+                ICompanionDeviceManager service = null;
+                // If the feature not present, don't try to look up every time
+                if (ctx.getPackageManager().hasSystemFeature(
+                        PackageManager.FEATURE_COMPANION_DEVICE_SETUP)) {
+                    service = ICompanionDeviceManager.Stub.asInterface(
+                            ServiceManager.getServiceOrThrow(Context.COMPANION_DEVICE_SERVICE));
+                }
+                return new CompanionDeviceManager(service, ctx.getOuterContext());
+            }});
 
         registerService(Context.CONSUMER_IR_SERVICE, ConsumerIrManager.class,
                 new CachedServiceFetcher<ConsumerIrManager>() {
@@ -871,6 +890,13 @@
                 return new VrManager(IVrManager.Stub.asInterface(b));
             }
         });
+
+        registerService(Context.TIME_ZONE_RULES_MANAGER_SERVICE, RulesManager.class,
+                new CachedServiceFetcher<RulesManager>() {
+            @Override
+            public RulesManager createService(ContextImpl ctx) {
+                return new RulesManager(ctx.getOuterContext());
+            }});
     }
 
     /**
diff --git a/core/java/android/app/TaskStackListener.java b/core/java/android/app/TaskStackListener.java
index a52ca0a..4674c9c 100644
--- a/core/java/android/app/TaskStackListener.java
+++ b/core/java/android/app/TaskStackListener.java
@@ -31,7 +31,8 @@
     }
 
     @Override
-    public void onActivityPinned(String packageName, int taskId) throws RemoteException {
+    public void onActivityPinned(String packageName, int userId, int taskId)
+            throws RemoteException {
     }
 
     @Override
diff --git a/core/java/android/app/VrManager.java b/core/java/android/app/VrManager.java
index b40c96c..5c6ffa3 100644
--- a/core/java/android/app/VrManager.java
+++ b/core/java/android/app/VrManager.java
@@ -1,13 +1,19 @@
 package android.app;
 
-
+import android.annotation.NonNull;
 import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
 import android.annotation.SystemService;
 import android.content.ComponentName;
 import android.content.Context;
+import android.os.Handler;
 import android.os.RemoteException;
+import android.service.vr.IPersistentVrStateCallbacks;
 import android.service.vr.IVrManager;
+import android.service.vr.IVrStateCallbacks;
+import android.util.ArrayMap;
+
+import java.util.Map;
 
 /**
  * Used to control aspects of a devices Virtual Reality (VR) capabilities.
@@ -16,7 +22,33 @@
 @SystemApi
 @SystemService(Context.VR_SERVICE)
 public class VrManager {
+
+    private static class CallbackEntry {
+        final IVrStateCallbacks mStateCallback = new IVrStateCallbacks.Stub() {
+            @Override
+            public void onVrStateChanged(boolean enabled) {
+                mHandler.post(() -> mCallback.onVrStateChanged(enabled));
+            }
+
+        };
+        final IPersistentVrStateCallbacks mPersistentStateCallback =
+                new IPersistentVrStateCallbacks.Stub() {
+            @Override
+            public void onPersistentVrStateChanged(boolean enabled) {
+                mHandler.post(() -> mCallback.onPersistentVrStateChanged(enabled));
+            }
+        };
+        final VrStateCallback mCallback;
+        final Handler mHandler;
+
+        CallbackEntry(VrStateCallback callback, Handler handler) {
+            mCallback = callback;
+            mHandler = handler;
+        }
+    }
+
     private final IVrManager mService;
+    private Map<VrStateCallback, CallbackEntry> mCallbackMap = new ArrayMap<>();
 
     /**
      * {@hide}
@@ -26,6 +58,96 @@
     }
 
     /**
+     * Registers a callback to be notified of changes to the VR Mode state.
+     *
+     * @param callback The callback to register.
+     * @hide
+     */
+    @RequiresPermission(anyOf = {
+            android.Manifest.permission.RESTRICTED_VR_ACCESS,
+            android.Manifest.permission.ACCESS_VR_STATE
+    })
+    public void registerVrStateCallback(VrStateCallback callback, @NonNull Handler handler) {
+        if (callback == null || mCallbackMap.containsKey(callback)) {
+            return;
+        }
+
+        CallbackEntry entry = new CallbackEntry(callback, handler);
+        mCallbackMap.put(callback, entry);
+        try {
+            mService.registerListener(entry.mStateCallback);
+            mService.registerPersistentVrStateListener(entry.mPersistentStateCallback);
+        } catch (RemoteException e) {
+            try {
+                unregisterVrStateCallback(callback);
+            } catch (Exception ignore) {
+                e.rethrowFromSystemServer();
+            }
+        }
+    }
+
+    /**
+     * Deregisters VR State callbacks.
+     *
+     * @param callback The callback to deregister.
+     * @hide
+     */
+    @RequiresPermission(anyOf = {
+            android.Manifest.permission.RESTRICTED_VR_ACCESS,
+            android.Manifest.permission.ACCESS_VR_STATE
+    })
+    public void unregisterVrStateCallback(VrStateCallback callback) {
+        CallbackEntry entry = mCallbackMap.remove(callback);
+        if (entry != null) {
+            try {
+                mService.unregisterListener(entry.mStateCallback);
+            } catch (RemoteException ignore) {
+                // Dont rethrow exceptions from requests to unregister.
+            }
+
+            try {
+                mService.unregisterPersistentVrStateListener(entry.mPersistentStateCallback);
+            } catch (RemoteException ignore) {
+                // Dont rethrow exceptions from requests to unregister.
+            }
+        }
+    }
+
+    /**
+     * Returns the current VrMode state.
+     * @hide
+     */
+    @RequiresPermission(anyOf = {
+            android.Manifest.permission.RESTRICTED_VR_ACCESS,
+            android.Manifest.permission.ACCESS_VR_STATE
+    })
+    public boolean getVrModeEnabled() {
+        try {
+            return mService.getVrModeState();
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+        }
+        return false;
+    }
+
+    /**
+     * Returns the current VrMode state.
+     * @hide
+     */
+    @RequiresPermission(anyOf = {
+            android.Manifest.permission.RESTRICTED_VR_ACCESS,
+            android.Manifest.permission.ACCESS_VR_STATE
+    })
+    public boolean getPersistentVrModeEnabled() {
+        try {
+            return mService.getPersistentVrModeEnabled();
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+        }
+        return false;
+    }
+
+    /**
      * Sets the persistent VR mode state of a device. When a device is in persistent VR mode it will
      * remain in VR mode even if the foreground does not specify Vr mode being enabled. Mainly used
      * by VR viewers to indicate that a device is placed in a VR viewer.
@@ -60,4 +182,20 @@
             e.rethrowFromSystemServer();
         }
     }
+
+    /**
+     * Set the component name of the compositor service to bind.
+     *
+     * @param componentName ComponentName of a Service in the application's compositor process to
+     * bind to, or null to clear the current binding.
+     */
+    @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS)
+    public void setAndBindVrCompositor(ComponentName componentName) {
+        try {
+            mService.setAndBindCompositor(
+                    (componentName == null) ? null : componentName.flattenToString());
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+        }
+    }
 }
diff --git a/core/java/android/app/VrStateCallback.java b/core/java/android/app/VrStateCallback.java
new file mode 100644
index 0000000..742faa06
--- /dev/null
+++ b/core/java/android/app/VrStateCallback.java
@@ -0,0 +1,38 @@
+/*
+ * 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.app;
+
+/**
+ * Listens to VR Mode state changes. Use with methods in {@link VrManager}.
+ *
+ * @hide
+ */
+public abstract class VrStateCallback {
+
+    /**
+     * Callback triggered when there is a change to Persistent VR State.
+     *
+     * @param enabled True when VR State is in persistent mode, false otherwise.
+     */
+    public void onPersistentVrStateChanged(boolean enabled) {}
+
+    /**
+     * Callback triggered when there is a change to Vr State.
+     *
+     * @param enabled True when VR State is in VR mode, false otherwise.
+     */
+    public void onVrStateChanged(boolean enabled) {}
+}
diff --git a/core/java/android/app/WallpaperColors.java b/core/java/android/app/WallpaperColors.java
index 2a8130f..a2864b9 100644
--- a/core/java/android/app/WallpaperColors.java
+++ b/core/java/android/app/WallpaperColors.java
@@ -49,7 +49,7 @@
      * eg. A launcher may set its text color to black if this flag is specified.
      * @hide
      */
-    public static final int HINT_SUPPORTS_DARK_TEXT = 0x1;
+    public static final int HINT_SUPPORTS_DARK_TEXT = 1 << 0;
 
     /**
      * Specifies that dark theme is preferred over the current wallpaper for best presentation.
@@ -57,7 +57,13 @@
      * eg. A launcher may set its drawer color to black if this flag is specified.
      * @hide
      */
-    public static final int HINT_SUPPORTS_DARK_THEME = 0x2;
+    public static final int HINT_SUPPORTS_DARK_THEME = 1 << 1;
+
+    /**
+     * Specifies that this object was generated by extracting colors from a bitmap.
+     * @hide
+     */
+    public static final int HINT_FROM_BITMAP = 1 << 2;
 
     // Maximum size that a bitmap can have to keep our calculations sane
     private static final int MAX_BITMAP_SIZE = 112;
@@ -180,13 +186,13 @@
             }
         }
 
-        int hints = calculateHints(bitmap);
+        int hints = calculateDarkHints(bitmap);
 
         if (shouldRecycle) {
             bitmap.recycle();
         }
 
-        return new WallpaperColors(primary, secondary, tertiary, hints);
+        return new WallpaperColors(primary, secondary, tertiary, HINT_FROM_BITMAP | hints);
     }
 
     /**
@@ -348,7 +354,7 @@
      * @param source What to read.
      * @return Whether image supports dark text or not.
      */
-    private static int calculateHints(Bitmap source) {
+    private static int calculateDarkHints(Bitmap source) {
         if (source == null) {
             return 0;
         }
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 84839bf..942cc99 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -48,6 +48,7 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.DeadSystemException;
 import android.os.Handler;
@@ -58,6 +59,7 @@
 import android.os.ServiceManager;
 import android.os.SystemProperties;
 import android.os.UserHandle;
+import android.service.wallpaper.WallpaperService;
 import android.text.TextUtils;
 import android.util.Log;
 import android.util.Pair;
@@ -407,10 +409,18 @@
                 mCachedWallpaper = null;
                 mCachedWallpaperUserId = 0;
                 try {
-                    mCachedWallpaper = getCurrentWallpaperLocked(userId);
+                    mCachedWallpaper = getCurrentWallpaperLocked(context, userId);
                     mCachedWallpaperUserId = userId;
                 } catch (OutOfMemoryError e) {
-                    Log.w(TAG, "No memory load current wallpaper", e);
+                    Log.w(TAG, "Out of memory loading the current wallpaper: " + e);
+                } catch (SecurityException e) {
+                    if (context.getApplicationInfo().targetSdkVersion <= Build.VERSION_CODES.O) {
+                        Log.w(TAG, "No permission to access wallpaper, suppressing"
+                                + " exception to avoid crashing legacy app.");
+                    } else {
+                        // Post-O apps really most sincerely need the permission.
+                        throw e;
+                    }
                 }
                 if (mCachedWallpaper != null) {
                     return mCachedWallpaper;
@@ -437,7 +447,7 @@
             }
         }
 
-        private Bitmap getCurrentWallpaperLocked(int userId) {
+        private Bitmap getCurrentWallpaperLocked(Context context, int userId) {
             if (mService == null) {
                 Log.w(TAG, "WallpaperService not running");
                 return null;
@@ -445,8 +455,8 @@
 
             try {
                 Bundle params = new Bundle();
-                ParcelFileDescriptor fd = mService.getWallpaper(this, FLAG_SYSTEM,
-                        params, userId);
+                ParcelFileDescriptor fd = mService.getWallpaper(context.getOpPackageName(),
+                        this, FLAG_SYSTEM, params, userId);
                 if (fd != null) {
                     try {
                         BitmapFactory.Options options = new BitmapFactory.Options();
@@ -778,6 +788,7 @@
      *
      * @return Returns a Drawable object that will draw the wallpaper.
      */
+    @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
     public Drawable getFastDrawable() {
         Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, true, FLAG_SYSTEM);
         if (bm != null) {
@@ -793,6 +804,7 @@
      * @return Returns an optimized Drawable object that will draw the
      * wallpaper or a null pointer if these is none.
      */
+    @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
     public Drawable peekFastDrawable() {
        Bitmap bm = sGlobals.peekWallpaperBitmap(mContext, false, FLAG_SYSTEM);
         if (bm != null) {
@@ -830,26 +842,20 @@
      * @param which The wallpaper whose image file is to be retrieved.  Must be a single
      *     defined kind of wallpaper, either {@link #FLAG_SYSTEM} or
      *     {@link #FLAG_LOCK}.
+     * @return An open, readable file desriptor to the requested wallpaper image file;
+     *     or {@code null} if no such wallpaper is configured or if the calling app does
+     *     not have permission to read the current wallpaper.
      *
      * @see #FLAG_LOCK
      * @see #FLAG_SYSTEM
      */
+    @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
     public ParcelFileDescriptor getWallpaperFile(@SetWallpaperFlags int which) {
         return getWallpaperFile(which, mContext.getUserId());
     }
 
     /**
      * Registers a listener to get notified when the wallpaper colors change.
-     * Callback might be called from an arbitrary background thread.
-     *
-     * @param listener A listener to register
-     */
-    public void addOnColorsChangedListener(@NonNull OnColorsChangedListener listener) {
-        addOnColorsChangedListener(listener, null);
-    }
-
-    /**
-     * Registers a listener to get notified when the wallpaper colors change
      * @param listener A listener to register
      * @param handler Where to call it from. Will be called from the main thread
      *                if null.
@@ -892,10 +898,16 @@
     }
 
     /**
-     * Get the primary colors of a wallpaper
-     * @param which wallpaper type. Must be either {@link #FLAG_SYSTEM} or
-     *     {@link #FLAG_LOCK}
-     * @return {@link WallpaperColors} or null if colors are unknown.
+     * Get the primary colors of a wallpaper.
+     *
+     * <p>You can expect null if:
+     * • Colors are still being processed by the system.
+     * • A live wallpaper doesn't implement {@link WallpaperService.Engine#onComputeColors()}.
+     *
+     * @param which Wallpaper type. Must be either {@link #FLAG_SYSTEM} or
+     *     {@link #FLAG_LOCK}.
+     * @return Current {@link WallpaperColors} or null if colors are unknown.
+     * @see #addOnColorsChangedListener(OnColorsChangedListener, Handler)
      */
     public @Nullable WallpaperColors getWallpaperColors(int which) {
         return getWallpaperColors(which, mContext.getUserId());
@@ -939,9 +951,18 @@
         } else {
             try {
                 Bundle outParams = new Bundle();
-                return sGlobals.mService.getWallpaper(null, which, outParams, userId);
+                return sGlobals.mService.getWallpaper(mContext.getOpPackageName(), null, which,
+                        outParams, userId);
             } catch (RemoteException e) {
                 throw e.rethrowFromSystemServer();
+            } catch (SecurityException e) {
+                if (mContext.getApplicationInfo().targetSdkVersion <= Build.VERSION_CODES.O) {
+                    Log.w(TAG, "No permission to access wallpaper, suppressing"
+                            + " exception to avoid crashing legacy app.");
+                    return null;
+                } else {
+                    throw e;
+                }
             }
         }
     }
@@ -1081,6 +1102,7 @@
      * @throws IOException If an error occurs reverting to the built-in
      * wallpaper.
      */
+    @RequiresPermission(android.Manifest.permission.SET_WALLPAPER)
     public void setResource(@RawRes int resid) throws IOException {
         setResource(resid, FLAG_SYSTEM | FLAG_LOCK);
     }
@@ -1099,6 +1121,7 @@
      *
      * @throws IOException
      */
+    @RequiresPermission(android.Manifest.permission.SET_WALLPAPER)
     public int setResource(@RawRes int resid, @SetWallpaperFlags int which)
             throws IOException {
         if (sGlobals.mService == null) {
@@ -1154,6 +1177,7 @@
      * @throws IOException If an error occurs when attempting to set the wallpaper
      *     to the provided image.
      */
+    @RequiresPermission(android.Manifest.permission.SET_WALLPAPER)
     public void setBitmap(Bitmap bitmap) throws IOException {
         setBitmap(bitmap, null, true);
     }
@@ -1186,6 +1210,7 @@
      * @throws IllegalArgumentException If the {@code visibleCropHint} rectangle is
      *     empty or invalid.
      */
+    @RequiresPermission(android.Manifest.permission.SET_WALLPAPER)
     public int setBitmap(Bitmap fullImage, Rect visibleCropHint, boolean allowBackup)
             throws IOException {
         return setBitmap(fullImage, visibleCropHint, allowBackup, FLAG_SYSTEM | FLAG_LOCK);
@@ -1211,6 +1236,7 @@
      *
      * @throws IOException
      */
+    @RequiresPermission(android.Manifest.permission.SET_WALLPAPER)
     public int setBitmap(Bitmap fullImage, Rect visibleCropHint,
             boolean allowBackup, @SetWallpaperFlags int which)
             throws IOException {
@@ -1282,6 +1308,7 @@
      * @throws IOException If an error occurs when attempting to set the wallpaper
      *     based on the provided image data.
      */
+    @RequiresPermission(android.Manifest.permission.SET_WALLPAPER)
     public void setStream(InputStream bitmapData) throws IOException {
         setStream(bitmapData, null, true);
     }
@@ -1324,6 +1351,7 @@
      * @throws IllegalArgumentException If the {@code visibleCropHint} rectangle is
      *     empty or invalid.
      */
+    @RequiresPermission(android.Manifest.permission.SET_WALLPAPER)
     public int setStream(InputStream bitmapData, Rect visibleCropHint, boolean allowBackup)
             throws IOException {
         return setStream(bitmapData, visibleCropHint, allowBackup, FLAG_SYSTEM | FLAG_LOCK);
@@ -1350,6 +1378,7 @@
      *
      * @throws IOException
      */
+    @RequiresPermission(android.Manifest.permission.SET_WALLPAPER)
     public int setStream(InputStream bitmapData, Rect visibleCropHint,
             boolean allowBackup, @SetWallpaperFlags int which)
                     throws IOException {
@@ -1574,11 +1603,12 @@
     /**
      * Clear the wallpaper for a specific user.  The caller must hold the
      * INTERACT_ACROSS_USERS_FULL permission to clear another user's
-     * wallpaper.
+     * wallpaper, and must hold the SET_WALLPAPER permission in all
+     * circumstances.
      * @hide
      */
     @SystemApi
-    @RequiresPermission(android.Manifest.permission.SET_WALLPAPER)
+    @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
     public void clearWallpaper(@SetWallpaperFlags int which, int userId) {
         if (sGlobals.mService == null) {
             Log.w(TAG, "WallpaperService not running");
@@ -1611,6 +1641,7 @@
      *
      * @hide
      */
+    @RequiresPermission(android.Manifest.permission.SET_WALLPAPER_COMPONENT)
     public boolean setWallpaperComponent(ComponentName name, int userId) {
         if (sGlobals.mService == null) {
             Log.w(TAG, "WallpaperService not running");
@@ -1755,6 +1786,7 @@
      * @throws IOException If an error occurs reverting to the built-in
      * wallpaper.
      */
+    @RequiresPermission(android.Manifest.permission.SET_WALLPAPER)
     public void clear() throws IOException {
         setStream(openDefaultWallpaper(mContext, FLAG_SYSTEM), null, false);
     }
@@ -1769,6 +1801,7 @@
      *   {@link #FLAG_LOCK}
      * @throws IOException If an error occurs reverting to the built-in wallpaper.
      */
+    @RequiresPermission(android.Manifest.permission.SET_WALLPAPER)
     public void clear(@SetWallpaperFlags int which) throws IOException {
         if ((which & FLAG_SYSTEM) != 0) {
             clear();
diff --git a/core/java/android/app/admin/ConnectEvent.java b/core/java/android/app/admin/ConnectEvent.java
index 423ee52..ffd38e2 100644
--- a/core/java/android/app/admin/ConnectEvent.java
+++ b/core/java/android/app/admin/ConnectEvent.java
@@ -23,7 +23,11 @@
 import java.net.UnknownHostException;
 
 /**
- * A class that represents a connect library call event.
+ * A class that represents a TCP connect event initiated through the standard network stack.
+ *
+ * <p>It contains information about the originating app as well as the remote TCP endpoint.
+ *
+ * <p>Support both IPv4 and IPv6 connections.
  */
 public final class ConnectEvent extends NetworkEvent implements Parcelable {
 
diff --git a/core/java/android/app/admin/DeviceAdminReceiver.java b/core/java/android/app/admin/DeviceAdminReceiver.java
index d9b6eed..d0d98c9 100644
--- a/core/java/android/app/admin/DeviceAdminReceiver.java
+++ b/core/java/android/app/admin/DeviceAdminReceiver.java
@@ -238,8 +238,7 @@
      * {@link android.app.admin.DevicePolicyManager#isProfileOwnerApp}. You will generally handle
      * this in {@link DeviceAdminReceiver#onProfileProvisioningComplete}.
      *
-     * <p>Input: Nothing.</p>
-     * <p>Output: Nothing</p>
+     * @see DevicePolicyManager#ACTION_PROVISIONING_SUCCESSFUL
      */
     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
     @BroadcastBehavior(explicitOnly = true)
@@ -660,15 +659,20 @@
      * managed provisioning.
      *
      * <p>When provisioning of a managed profile is complete, the managed profile is hidden until
-     * the profile owner calls {DevicePolicyManager#setProfileEnabled(ComponentName admin)}.
+     * the profile owner calls {@link DevicePolicyManager#setProfileEnabled(ComponentName admin)}.
      * Typically a profile owner will enable the profile when it has finished any additional setup
-     * such as adding an account by using the {@link AccountManager} and calling apis to bring the
+     * such as adding an account by using the {@link AccountManager} and calling APIs to bring the
      * profile into the desired state.
      *
      * <p> Note that provisioning completes without waiting for any server interactions, so the
-     * profile owner needs to wait for data to be available if required (e.g. android device ids or
+     * profile owner needs to wait for data to be available if required (e.g. Android device IDs or
      * other data that is set as a result of server interactions).
      *
+     * <p>From version {@link android.os.Build.VERSION_CODES#O}, when managed provisioning has
+     * completed, along with this callback the activity intent
+     * {@link DevicePolicyManager#ACTION_PROVISIONING_SUCCESSFUL} will also be sent to the same
+     * application.
+     *
      * @param context The running context as per {@link #onReceive}.
      * @param intent The received intent as per {@link #onReceive}.
      */
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index a749fe70..121b58a 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -169,8 +169,7 @@
      *
      * <p>From version {@link android.os.Build.VERSION_CODES#O}, when managed provisioning has
      * completed, along with the above broadcast, activity intent
-     * {@link #ACTION_PROVISIONING_SUCCESSFUL} will also be sent to the application specified in
-     * the provisioning intent.
+     * {@link #ACTION_PROVISIONING_SUCCESSFUL} will also be sent to the profile owner.
      *
      * <p>If provisioning fails, the managedProfile is removed so the device returns to its
      * previous state.
@@ -278,6 +277,7 @@
      * @hide
      */
     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    @SystemApi
     public static final String ACTION_STATE_USER_SETUP_COMPLETE =
             "android.app.action.STATE_USER_SETUP_COMPLETE";
 
@@ -856,8 +856,7 @@
      * {@link DeviceAdminReceiver#ACTION_PROFILE_PROVISIONING_COMPLETE} broadcast but this will be
      * delivered faster as it's an activity intent.
      *
-     * <p>The intent is only sent to the application on the profile that requested provisioning. In
-     * the device owner case the profile is the primary user.
+     * <p>The intent is only sent to the new device or profile owner.
      *
      * @see #ACTION_PROVISION_MANAGED_PROFILE
      * @see #ACTION_PROVISION_MANAGED_DEVICE
@@ -2532,7 +2531,7 @@
      * @return Returns true if the password meets the current requirements, else false.
      * @throws SecurityException if the calling application does not own an active administrator
      *             that uses {@link DeviceAdminInfo#USES_POLICY_LIMIT_PASSWORD}
-     * @throws InvalidStateException if the user is not unlocked.
+     * @throws IllegalStateException if the user is not unlocked.
      */
     public boolean isActivePasswordSufficient() {
         if (mService != null) {
@@ -2708,13 +2707,14 @@
     }
 
     /**
-     * Flag for {@link #resetPassword}: don't allow other admins to change
-     * the password again until the user has entered it.
+     * Flag for {@link #resetPasswordWithToken} and {@link #resetPassword}: don't allow other admins
+     * to change the password again until the user has entered it.
      */
     public static final int RESET_PASSWORD_REQUIRE_ENTRY = 0x0001;
 
     /**
-     * Flag for {@link #resetPassword}: don't ask for user credentials on device boot.
+     * Flag for {@link #resetPasswordWithToken} and {@link #resetPassword}: don't ask for user
+     * credentials on device boot.
      * If the flag is set, the device can be booted without asking for user password.
      * The absence of this flag does not change the current boot requirements. This flag
      * can be set by the device owner only. If the app is not the device owner, the flag
@@ -2724,8 +2724,8 @@
     public static final int RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT = 0x0002;
 
     /**
-     * Force a new device unlock password (the password needed to access the entire device, not for
-     * individual accounts) on the user. This takes effect immediately.
+     * Force a new password for device unlock (the password needed to access the entire device) or
+     * the work profile challenge on the current user. This takes effect immediately.
      * <p>
      * <em>For device owner and profile owners targeting SDK level
      * {@link android.os.Build.VERSION_CODES#O} or above, this API is no longer available and will
@@ -2763,7 +2763,6 @@
      * @throws SecurityException if the calling application does not own an active administrator
      *             that uses {@link DeviceAdminInfo#USES_POLICY_RESET_PASSWORD}
      * @throws IllegalStateException if the calling user is locked or has a managed profile.
-     * @throws IllegalArgumentException if the password does not meet system requirements.
      */
     public boolean resetPassword(String password, int flags) {
         throwIfParentInstance("resetPassword");
@@ -2805,8 +2804,8 @@
      * @param token a secure token a least 32-byte long, which must be generated by a
      *        cryptographically strong random number generator.
      * @return true if the operation is successful, false otherwise.
+     * @throws SecurityException if admin is not a device or profile owner.
      * @throws IllegalArgumentException if the supplied token is invalid.
-     * @throws SecurityException
      */
     public boolean setResetPasswordToken(ComponentName admin, byte[] token) {
         throwIfParentInstance("setResetPasswordToken");
@@ -2825,6 +2824,7 @@
      *
      * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
      * @return true if the operation is successful, false otherwise.
+     * @throws SecurityException if admin is not a device or profile owner.
      */
     public boolean clearResetPasswordToken(ComponentName admin) {
         throwIfParentInstance("clearResetPasswordToken");
@@ -2843,6 +2843,7 @@
      *
      * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
      * @return true if the token is active, false otherwise.
+     * @throws SecurityException if admin is not a device or profile owner.
      * @throws IllegalStateException if no token has been set.
      */
     public boolean isResetPasswordTokenActive(ComponentName admin) {
@@ -2868,24 +2869,23 @@
      * The given password must be sufficient for the current password quality and length constraints
      * as returned by {@link #getPasswordQuality(ComponentName)} and
      * {@link #getPasswordMinimumLength(ComponentName)}; if it does not meet these constraints, then
-     * it will be rejected and false returned. Note that the password may be a stronger quality
-     * (containing alphanumeric characters when the requested quality is only numeric), in which
-     * case the currently active quality will be increased to match.
+     * it will be rejected and false returned. Note that the password may be a stronger quality, for
+     * example, a password containing alphanumeric characters when the requested quality is only
+     * numeric.
      * <p>
-     * Calling with a null or empty password will clear any existing PIN, pattern or password if the
-     * current password constraints allow it.
+     * Calling with a {@code null} or empty password will clear any existing PIN, pattern or
+     * password if the current password constraints allow it.
      *
      * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
-     * @param password The new password for the user. Null or empty clears the password.
-     * @param token the password reset token previously provisioned by #setResetPasswordToken.
+     * @param password The new password for the user. {@code null} or empty clears the password.
+     * @param token the password reset token previously provisioned by
+     *        {@link #setResetPasswordToken}.
      * @param flags May be 0 or combination of {@link #RESET_PASSWORD_REQUIRE_ENTRY} and
-     *            {@link #RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT}.
+     *        {@link #RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT}.
      * @return Returns true if the password was applied, or false if it is not acceptable for the
      *         current constraints.
-     * @throws SecurityException if the calling application does not own an active administrator
-     *             that uses {@link DeviceAdminInfo#USES_POLICY_RESET_PASSWORD}
+     * @throws SecurityException if admin is not a device or profile owner.
      * @throws IllegalStateException if the provided token is not valid.
-     * @throws IllegalArgumentException if the password does not meet system requirements.
      */
     public boolean resetPasswordWithToken(@NonNull ComponentName admin, String password,
             byte[] token, int flags) {
@@ -3930,26 +3930,18 @@
 
     /**
      * Called by a device or profile owner to configure an always-on VPN connection through a
-     * specific application for the current user.
-     *
-     * @deprecated this version only exists for compability with previous developer preview builds.
-     *             TODO: delete once there are no longer any live references.
-     * @hide
-     */
-    @Deprecated
-    public void setAlwaysOnVpnPackage(@NonNull ComponentName admin, @Nullable String vpnPackage)
-            throws NameNotFoundException, UnsupportedOperationException {
-        setAlwaysOnVpnPackage(admin, vpnPackage, /* lockdownEnabled */ true);
-    }
-
-    /**
-     * Called by a device or profile owner to configure an always-on VPN connection through a
      * specific application for the current user. This connection is automatically granted and
      * persisted after a reboot.
      * <p>
-     * The designated package should declare a {@link android.net.VpnService} in its manifest
-     * guarded by {@link android.Manifest.permission#BIND_VPN_SERVICE}, otherwise the call will
-     * fail.
+     * To support the always-on feature, an app must
+     * <ul>
+     *     <li>declare a {@link android.net.VpnService} in its manifest, guarded by
+     *         {@link android.Manifest.permission#BIND_VPN_SERVICE};</li>
+     *     <li>target {@link android.os.Build.VERSION_CODES#N API 24} or above; and</li>
+     *     <li><i>not</i> explicitly opt out of the feature through
+     *         {@link android.net.VpnService#SERVICE_META_DATA_SUPPORTS_ALWAYS_ON}.</li>
+     * </ul>
+     * The call will fail if called with the package name of an unsupported VPN app.
      *
      * @param vpnPackage The package name for an installed VPN app on the device, or {@code null} to
      *        remove an existing always-on VPN configuration.
@@ -6430,34 +6422,35 @@
     }
 
     /**
-     * Called by device owners to update {@link Settings.Global} settings. Validation that the value
-     * of the setting is in the correct form for the setting type should be performed by the caller.
+     * Called by device owners to update {@link android.provider.Settings.Global} settings.
+     * Validation that the value of the setting is in the correct form for the setting type should
+     * be performed by the caller.
      * <p>
      * The settings that can be updated with this method are:
      * <ul>
-     * <li>{@link Settings.Global#ADB_ENABLED}</li>
-     * <li>{@link Settings.Global#AUTO_TIME}</li>
-     * <li>{@link Settings.Global#AUTO_TIME_ZONE}</li>
-     * <li>{@link Settings.Global#DATA_ROAMING}</li>
-     * <li>{@link Settings.Global#USB_MASS_STORAGE_ENABLED}</li>
-     * <li>{@link Settings.Global#WIFI_SLEEP_POLICY}</li>
-     * <li>{@link Settings.Global#STAY_ON_WHILE_PLUGGED_IN} This setting is only available from
-     * {@link android.os.Build.VERSION_CODES#M} onwards and can only be set if
+     * <li>{@link android.provider.Settings.Global#ADB_ENABLED}</li>
+     * <li>{@link android.provider.Settings.Global#AUTO_TIME}</li>
+     * <li>{@link android.provider.Settings.Global#AUTO_TIME_ZONE}</li>
+     * <li>{@link android.provider.Settings.Global#DATA_ROAMING}</li>
+     * <li>{@link android.provider.Settings.Global#USB_MASS_STORAGE_ENABLED}</li>
+     * <li>{@link android.provider.Settings.Global#WIFI_SLEEP_POLICY}</li>
+     * <li>{@link android.provider.Settings.Global#STAY_ON_WHILE_PLUGGED_IN} This setting is only
+     * available from {@link android.os.Build.VERSION_CODES#M} onwards and can only be set if
      * {@link #setMaximumTimeToLock} is not used to set a timeout.</li>
-     * <li>{@link Settings.Global#WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN}</li> This setting is only
-     * available from {@link android.os.Build.VERSION_CODES#M} onwards.</li>
+     * <li>{@link android.provider.Settings.Global#WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN}</li> This
+     * setting is only available from {@link android.os.Build.VERSION_CODES#M} onwards.</li>
      * </ul>
      * <p>
      * Changing the following settings has no effect as of {@link android.os.Build.VERSION_CODES#M}:
      * <ul>
-     * <li>{@link Settings.Global#BLUETOOTH_ON}. Use
+     * <li>{@link android.provider.Settings.Global#BLUETOOTH_ON}. Use
      * {@link android.bluetooth.BluetoothAdapter#enable()} and
      * {@link android.bluetooth.BluetoothAdapter#disable()} instead.</li>
-     * <li>{@link Settings.Global#DEVELOPMENT_SETTINGS_ENABLED}</li>
-     * <li>{@link Settings.Global#MODE_RINGER}. Use
+     * <li>{@link android.provider.Settings.Global#DEVELOPMENT_SETTINGS_ENABLED}</li>
+     * <li>{@link android.provider.Settings.Global#MODE_RINGER}. Use
      * {@link android.media.AudioManager#setRingerMode(int)} instead.</li>
-     * <li>{@link Settings.Global#NETWORK_PREFERENCE}</li>
-     * <li>{@link Settings.Global#WIFI_ON}. Use
+     * <li>{@link android.provider.Settings.Global#NETWORK_PREFERENCE}</li>
+     * <li>{@link android.provider.Settings.Global#WIFI_ON}. Use
      * {@link android.net.wifi.WifiManager#setWifiEnabled(boolean)} instead.</li>
      * </ul>
      *
@@ -6478,19 +6471,19 @@
     }
 
     /**
-     * Called by profile or device owners to update {@link Settings.Secure} settings. Validation
-     * that the value of the setting is in the correct form for the setting type should be performed
-     * by the caller.
+     * Called by profile or device owners to update {@link android.provider.Settings.Secure}
+     * settings. Validation that the value of the setting is in the correct form for the setting
+     * type should be performed by the caller.
      * <p>
      * The settings that can be updated by a profile or device owner with this method are:
      * <ul>
-     * <li>{@link Settings.Secure#DEFAULT_INPUT_METHOD}</li>
-     * <li>{@link Settings.Secure#SKIP_FIRST_USE_HINTS}</li>
+     * <li>{@link android.provider.Settings.Secure#DEFAULT_INPUT_METHOD}</li>
+     * <li>{@link android.provider.Settings.Secure#SKIP_FIRST_USE_HINTS}</li>
      * </ul>
      * <p>
      * A device owner can additionally update the following settings:
      * <ul>
-     * <li>{@link Settings.Secure#LOCATION_MODE}</li>
+     * <li>{@link android.provider.Settings.Secure#LOCATION_MODE}</li>
      * </ul>
      *
      * <strong>Note: Starting from Android O, apps should no longer call this method with the
diff --git a/core/java/android/app/admin/DnsEvent.java b/core/java/android/app/admin/DnsEvent.java
index c21725f..f84c5b0 100644
--- a/core/java/android/app/admin/DnsEvent.java
+++ b/core/java/android/app/admin/DnsEvent.java
@@ -26,7 +26,10 @@
 import java.util.List;
 
 /**
- * A class that represents a DNS lookup event.
+ * A class that represents a DNS lookup event initiated through the standard network stack.
+ *
+ * <p>It contains information about the originating app as well as the DNS hostname and resolved
+ * IP addresses.
  */
 public final class DnsEvent extends NetworkEvent implements Parcelable {
 
diff --git a/core/java/android/app/admin/PasswordMetrics.java b/core/java/android/app/admin/PasswordMetrics.java
index ea3f560..4658a47 100644
--- a/core/java/android/app/admin/PasswordMetrics.java
+++ b/core/java/android/app/admin/PasswordMetrics.java
@@ -18,13 +18,11 @@
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
-import android.app.admin.DevicePolicyManager;
-import android.os.Parcelable;
 import android.os.Parcel;
+import android.os.Parcelable;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
-import java.io.IOException;
 
 /**
  * A class that represents the metrics of a password that are used to decide whether or not a
@@ -159,6 +157,22 @@
                 quality, length, letters, upperCase, lowerCase, numeric, symbols, nonLetter);
     }
 
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof PasswordMetrics)) {
+            return false;
+        }
+        PasswordMetrics o = (PasswordMetrics) other;
+        return this.quality == o.quality
+                && this.length == o.length
+                && this.letters == o.letters
+                && this.upperCase == o.upperCase
+                && this.lowerCase == o.lowerCase
+                && this.numeric == o.numeric
+                && this.symbols == o.symbols
+                && this.nonLetter == o.nonLetter;
+    }
+
     /*
      * Returns the maximum length of a sequential characters. A sequence is defined as
      * monotonically increasing characters with a constant interval or the same character repeated.
diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java
index 8bd2313..bf715c3 100644
--- a/core/java/android/app/assist/AssistStructure.java
+++ b/core/java/android/app/assist/AssistStructure.java
@@ -1260,12 +1260,12 @@
          * <p>Typically used when the view associated with the view is a container for an HTML
          * document.
          *
-         * <strong>WARNING:</strong> a {@link android.service.autofill.AutofillService} should only
-         * use this domain for autofill purposes when it trusts the app generating it (i.e., the app
-         * defined by {@link AssistStructure#getActivityComponent()}).
+         * <p><b>Warning:</b> an autofill service cannot trust the value reported by this method
+         * without verifing its authenticity&mdash;see the "Web security" section of
+         * {@link android.service.autofill.AutofillService} for more details.
          *
          * @return domain-only part of the document. For example, if the full URL is
-         * {@code http://my.site/login?user=my_user}, it returns {@code my.site}.
+         * {@code https://example.com/login?user=my_user}, it returns {@code example.com}.
          */
         @Nullable public String getWebDomain() {
             return mWebDomain;
@@ -1905,6 +1905,10 @@
                 activity.getActivityToken());
         for (int i=0; i<views.size(); i++) {
             ViewRootImpl root = views.get(i);
+            if (root.getView() == null) {
+                Log.w(TAG, "Skipping window with dettached view: " + root.getTitle());
+                continue;
+            }
             mWindowNodes.add(new WindowNode(this, root, forAutoFill, flags));
         }
     }
diff --git a/core/java/android/app/backup/BackupAgent.java b/core/java/android/app/backup/BackupAgent.java
index 42e6147..7aa80d2 100644
--- a/core/java/android/app/backup/BackupAgent.java
+++ b/core/java/android/app/backup/BackupAgent.java
@@ -103,6 +103,18 @@
  * {@link android.app.backup.BackupAgentHelper}.  That class is particularly
  * suited to handling of simple file or {@link android.content.SharedPreferences}
  * backup and restore.
+ * <p>
+ * <b>Threading</b>
+ * <p>
+ * The constructor, as well as {@link #onCreate()} and {@link #onDestroy()} lifecycle callbacks run
+ * on the main thread (UI thread) of the application that implements the BackupAgent.
+ * The data-handling callbacks:
+ * {@link #onBackup(ParcelFileDescriptor, BackupDataOutput, ParcelFileDescriptor) onBackup()},
+ * {@link #onFullBackup(FullBackupDataOutput)},
+ * {@link #onRestore(BackupDataInput, int, ParcelFileDescriptor) onRestore()},
+ * {@link #onRestoreFile(ParcelFileDescriptor, long, File, int, long, long) onRestoreFile()},
+ * {@link #onRestoreFinished()}, and {@link #onQuotaExceeded(long, long) onQuotaExceeded()}
+ * run on binder pool threads.
  *
  * @see android.app.backup.BackupManager
  * @see android.app.backup.BackupAgentHelper
diff --git a/core/java/android/app/backup/IBackupManager.aidl b/core/java/android/app/backup/IBackupManager.aidl
index 9c3b110..f1dc6d2 100644
--- a/core/java/android/app/backup/IBackupManager.aidl
+++ b/core/java/android/app/backup/IBackupManager.aidl
@@ -57,6 +57,15 @@
     void clearBackupData(String transportName, String packageName);
 
     /**
+     * Run an initialize operation on the given transports.  This will wipe all data from
+     * the backing data store and establish a clean starting point for all backup
+     * operations.
+     *
+     * <p>Callers must hold the android.permission.BACKUP permission to use this method.
+     */
+    void initializeTransports(in String[] transportNames, IBackupObserver observer);
+
+    /**
      * Notifies the Backup Manager Service that an agent has become available.  This
      * method is only invoked by the Activity Manager.
      */
diff --git a/core/java/android/app/backup/IBackupObserver.aidl b/core/java/android/app/backup/IBackupObserver.aidl
index 821a589..07a6634 100644
--- a/core/java/android/app/backup/IBackupObserver.aidl
+++ b/core/java/android/app/backup/IBackupObserver.aidl
@@ -29,20 +29,22 @@
      * This method could be called several times for packages with full data backup.
      * It will tell how much of backup data is already saved and how much is expected.
      *
-     * @param currentBackupPackage The name of the package that now being backuped.
+     * @param currentBackupPackage The name of the package that now being backed up.
      * @param backupProgress Current progress of backup for the package.
      */
     void onUpdate(String currentPackage, in BackupProgress backupProgress);
 
     /**
-     * The backup of single package has completed.  This method will be called at most one time
-     * for each package and could be not called if backup is failed before and
-     * backupFinished() is called.
+     * Backup of one package or initialization of one transport has completed.  This
+     * method will be called at most one time for each package or transport, and might not
+     * be not called if the operation fails before backupFinished(); for example, if the
+     * requested package/transport does not exist.
      *
-     * @param currentBackupPackage The name of the package that was backuped.
+     * @param target The name of the package that was backed up, or of the transport
+     *                  that was initialized
      * @param status Zero on success; a nonzero error code if the backup operation failed.
      */
-    void onResult(String currentPackage, int status);
+    void onResult(String target, int status);
 
     /**
      * The backup process has completed.  This method will always be called,
diff --git a/core/java/android/app/backup/RestoreDescription.java b/core/java/android/app/backup/RestoreDescription.java
index 611ff07..0250326 100644
--- a/core/java/android/app/backup/RestoreDescription.java
+++ b/core/java/android/app/backup/RestoreDescription.java
@@ -34,7 +34,7 @@
     private final String mPackageName;
     private final int mDataType;
 
-    private static final String NO_MORE_PACKAGES_SENTINEL = "";
+    private static final String NO_MORE_PACKAGES_SENTINEL = "NO_MORE_PACKAGES";
 
     /**
      * Return this constant RestoreDescription from BackupTransport.nextRestorePackage()
diff --git a/core/java/android/app/backup/WallpaperBackupHelper.java b/core/java/android/app/backup/WallpaperBackupHelper.java
index f987468..36f5f96 100644
--- a/core/java/android/app/backup/WallpaperBackupHelper.java
+++ b/core/java/android/app/backup/WallpaperBackupHelper.java
@@ -18,20 +18,19 @@
 
 import android.app.WallpaperManager;
 import android.content.Context;
-import android.graphics.BitmapFactory;
-import android.graphics.Point;
 import android.os.Environment;
 import android.os.ParcelFileDescriptor;
 import android.os.UserHandle;
 import android.util.Slog;
-import android.view.Display;
-import android.view.WindowManager;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
 
 /**
- * Helper for backing up / restoring wallpapers.  Basically an AbsoluteFileBackupHelper,
- * but with logic for deciding what to do with restored wallpaper images.
+ * We no longer back up wallpapers with this helper, but we do need to process restores
+ * of legacy backup payloads.  We just take the restored image as-is and apply it as the
+ * system wallpaper using the public "set the wallpaper" API.
  *
  * @hide
  */
@@ -39,83 +38,34 @@
     private static final String TAG = "WallpaperBackupHelper";
     private static final boolean DEBUG = false;
 
-    // If 'true', then apply an acceptable-size heuristic at restore time, dropping back
-    // to the factory default wallpaper if the restored one differs "too much" from the
-    // device's preferred wallpaper image dimensions.
-    private static final boolean REJECT_OUTSIZED_RESTORE = false;
-
-    // When outsized restore rejection is enabled, this is the maximum ratio between the
-    // source and target image heights that will be permitted.  The ratio is checked both
-    // ways (i.e. >= MAX, or <= 1/MAX) to validate restores from both largeer-than-target
-    // and smaller-than-target sources.
-    private static final double MAX_HEIGHT_RATIO = 1.35;
-
-    // The height ratio check when applying larger images on smaller screens is separate;
-    // in current policy we accept any such restore regardless of the relative dimensions.
-    private static final double MIN_HEIGHT_RATIO = 0;
-
-    // This path must match what the WallpaperManagerService uses
-    // TODO: Will need to change if backing up non-primary user's wallpaper
-    // http://b/22388012
-    public static final String WALLPAPER_IMAGE =
-            new File(Environment.getUserSystemDirectory(UserHandle.USER_SYSTEM),
-                    "wallpaper").getAbsolutePath();
-    public static final String WALLPAPER_ORIG_IMAGE =
-            new File(Environment.getUserSystemDirectory(UserHandle.USER_SYSTEM),
-                    "wallpaper_orig").getAbsolutePath();
-    public static final String WALLPAPER_INFO =
-            new File(Environment.getUserSystemDirectory(UserHandle.USER_SYSTEM),
-                    "wallpaper_info.xml").getAbsolutePath();
-    // Use old keys to keep legacy data compatibility and avoid writing two wallpapers
+    // Key that legacy wallpaper imagery was stored under
     public static final String WALLPAPER_IMAGE_KEY =
             "/data/data/com.android.settings/files/wallpaper";
     public static final String WALLPAPER_INFO_KEY = "/data/system/wallpaper_info.xml";
 
-    // Stage file - should be adjacent to the WALLPAPER_IMAGE location.  The wallpapers
-    // will be saved to this file from the restore stream, then renamed to the proper
-    // location if it's deemed suitable.
-    // TODO: Will need to change if backing up non-primary user's wallpaper
-    // http://b/22388012
+    // Stage file that the restored imagery is stored to prior to being applied
+    // as the system wallpaper.
     private static final String STAGE_FILE =
             new File(Environment.getUserSystemDirectory(UserHandle.USER_SYSTEM),
                     "wallpaper-tmp").getAbsolutePath();
 
-    Context mContext;
-    String[] mFiles;
-    String[] mKeys;
-    double mDesiredMinWidth;
-    double mDesiredMinHeight;
+    private final String[] mKeys;
+    private final WallpaperManager mWpm;
 
     /**
-     * Construct a helper for backing up / restoring the files at the given absolute locations
-     * within the file system.
+     * Legacy wallpaper restores, from back when the imagery was stored under the
+     * "android" system package as file key/value entities.
      *
      * @param context
      * @param files
      */
-    public WallpaperBackupHelper(Context context, String[] files, String[] keys) {
+    public WallpaperBackupHelper(Context context, String[] keys) {
         super(context);
 
         mContext = context;
-        mFiles = files;
         mKeys = keys;
 
-        final WindowManager wm =
-                (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
-        final WallpaperManager wpm =
-                (WallpaperManager) context.getSystemService(Context.WALLPAPER_SERVICE);
-        final Display d = wm.getDefaultDisplay();
-        final Point size = new Point();
-        d.getSize(size);
-        mDesiredMinWidth = Math.min(size.x, size.y);
-        mDesiredMinHeight = (double) wpm.getDesiredMinimumHeight();
-        if (mDesiredMinHeight <= 0) {
-            mDesiredMinHeight = size.y;
-        }
-
-        if (DEBUG) {
-            Slog.d(TAG, "dmW=" + mDesiredMinWidth + " dmH=" + mDesiredMinHeight);
-        }
+        mWpm = (WallpaperManager) context.getSystemService(Context.WALLPAPER_SERVICE);
     }
 
     /**
@@ -126,13 +76,12 @@
     @Override
     public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
             ParcelFileDescriptor newState) {
-        performBackup_checked(oldState, data, newState, mFiles, mKeys);
+        // Intentionally no-op; we don't back up the wallpaper this way any more.
     }
 
     /**
      * Restore one absolute file entity from the restore stream.  If we're restoring the
-     * magic wallpaper file, take specific action to determine whether it is suitable for
-     * the current device.
+     * magic wallpaper file, apply it as the system wallpaper.
      */
     @Override
     public void restoreEntity(BackupDataInputStream data) {
@@ -140,69 +89,21 @@
         if (isKeyInList(key, mKeys)) {
             if (key.equals(WALLPAPER_IMAGE_KEY)) {
                 // restore the file to the stage for inspection
-                File f = new File(STAGE_FILE);
-                if (writeFile(f, data)) {
-
-                    // Preflight the restored image's dimensions without loading it
-                    BitmapFactory.Options options = new BitmapFactory.Options();
-                    options.inJustDecodeBounds = true;
-                    BitmapFactory.decodeFile(STAGE_FILE, options);
-
-                    if (DEBUG) Slog.d(TAG, "Restoring wallpaper image w=" + options.outWidth
-                            + " h=" + options.outHeight);
-
-                    if (REJECT_OUTSIZED_RESTORE) {
-                        // We accept any wallpaper that is at least as wide as our preference
-                        // (i.e. wide enough to fill the screen), and is within a comfortable
-                        // factor of the target height, to avoid significant clipping/scaling/
-                        // letterboxing.  At this point we know that mDesiredMinWidth is the
-                        // smallest dimension, regardless of current orientation, so we can
-                        // safely require that the candidate's width and height both exceed
-                        // that hard minimum.
-                        final double heightRatio = mDesiredMinHeight / options.outHeight;
-                        if (options.outWidth < mDesiredMinWidth
-                                || options.outHeight < mDesiredMinWidth
-                                || heightRatio >= MAX_HEIGHT_RATIO
-                                || heightRatio <= MIN_HEIGHT_RATIO) {
-                            // Not wide enough for the screen, or too short/tall to be a good fit
-                            // for the height of the screen, broken image file, or the system's
-                            // desires for wallpaper size are in a bad state.  Probably one of the
-                            // first two.
-                            Slog.i(TAG, "Restored image dimensions (w="
-                                    + options.outWidth + ", h=" + options.outHeight
-                                    + ") too far off target (tw="
-                                    + mDesiredMinWidth + ", th=" + mDesiredMinHeight
-                                    + "); falling back to default wallpaper.");
-                            f.delete();
-                            return;
+                File stage = new File(STAGE_FILE);
+                try {
+                    if (writeFile(stage, data)) {
+                        try (FileInputStream in = new FileInputStream(stage)) {
+                            mWpm.setStream(in);
+                        } catch (IOException e) {
+                            Slog.e(TAG, "Unable to set restored wallpaper: " + e.getMessage());
                         }
+                    } else {
+                        Slog.e(TAG, "Unable to save restored wallpaper");
                     }
-
-                    // We passed the acceptable-dimensions test (if any), so we're going to
-                    // use the restored image.  That comes last, when we are done restoring
-                    // both the pixels and the metadata.
+                } finally {
+                    stage.delete();
                 }
-            } else if (key.equals(WALLPAPER_INFO_KEY)) {
-                // XML file containing wallpaper info
-                File f = new File(WALLPAPER_INFO);
-                writeFile(f, data);
             }
         }
     }
-
-    /**
-     * Hook for the agent to call this helper upon completion of the restore.  We do this
-     * upon completion so that we know both the imagery and the wallpaper info have
-     * been emplaced without requiring either or relying on ordering.
-     */
-    public void onRestoreFinished() {
-        final File f = new File(STAGE_FILE);
-        if (f.exists()) {
-            // TODO: spin a service to copy the restored image to sd/usb storage,
-            // since it does not exist anywhere other than the private wallpaper
-            // file.
-            Slog.d(TAG, "Applying restored wallpaper image.");
-            f.renameTo(new File(WALLPAPER_ORIG_IMAGE));
-        }
-    }
 }
diff --git a/core/java/android/app/job/JobParameters.java b/core/java/android/app/job/JobParameters.java
index 98bdde8..a6f6be2 100644
--- a/core/java/android/app/job/JobParameters.java
+++ b/core/java/android/app/job/JobParameters.java
@@ -45,6 +45,18 @@
     /** @hide */
     public static final int REASON_DEVICE_IDLE = 4;
 
+    /** @hide */
+    public static String getReasonName(int reason) {
+        switch (reason) {
+            case REASON_CANCELED: return "canceled";
+            case REASON_CONSTRAINTS_NOT_SATISFIED: return "constraints";
+            case REASON_PREEMPT: return "preempt";
+            case REASON_TIMEOUT: return "timeout";
+            case REASON_DEVICE_IDLE: return "device_idle";
+            default: return "unknown:" + reason;
+        }
+    }
+
     private final int jobId;
     private final PersistableBundle extras;
     private final Bundle transientExtras;
diff --git a/core/java/android/app/timezone/Callback.java b/core/java/android/app/timezone/Callback.java
new file mode 100644
index 0000000..aea8038
--- /dev/null
+++ b/core/java/android/app/timezone/Callback.java
@@ -0,0 +1,75 @@
+/*
+ * 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.app.timezone;
+
+import android.annotation.IntDef;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Callback interface for receiving information about an async time zone operation.
+ * The methods will be called on your application's main thread.
+ *
+ * @hide
+ */
+public abstract class Callback {
+
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({SUCCESS, ERROR_UNKNOWN_FAILURE, ERROR_INSTALL_BAD_DISTRO_STRUCTURE,
+        ERROR_INSTALL_BAD_DISTRO_FORMAT_VERSION, ERROR_INSTALL_RULES_TOO_OLD,
+        ERROR_INSTALL_VALIDATION_ERROR})
+    public @interface AsyncResultCode {}
+
+    /**
+     * Indicates that an operation succeeded.
+     */
+    public static final int SUCCESS = 0;
+
+    /**
+     * Indicates an install / uninstall did not fully succeed for an unknown reason.
+     */
+    public static final int ERROR_UNKNOWN_FAILURE = 1;
+
+    /**
+     * Indicates an install failed because of a structural issue with the provided distro,
+     * e.g. it wasn't in the right format or the contents were structured incorrectly.
+     */
+    public static final int ERROR_INSTALL_BAD_DISTRO_STRUCTURE = 2;
+
+    /**
+     * Indicates an install failed because of a versioning issue with the provided distro,
+     * e.g. it was created for a different version of Android.
+     */
+    public static final int ERROR_INSTALL_BAD_DISTRO_FORMAT_VERSION = 3;
+
+    /**
+     * Indicates an install failed because the rules provided are too old for the device,
+     * e.g. the Android device shipped with a newer rules version.
+     */
+    public static final int ERROR_INSTALL_RULES_TOO_OLD = 4;
+
+    /**
+     * Indicates an install failed because the distro contents failed validation.
+     */
+    public static final int ERROR_INSTALL_VALIDATION_ERROR = 5;
+
+    /**
+     * Reports the result of an async time zone operation.
+     */
+    public abstract void onFinished(@AsyncResultCode int status);
+}
diff --git a/core/java/android/app/timezone/DistroFormatVersion.java b/core/java/android/app/timezone/DistroFormatVersion.java
new file mode 100644
index 0000000..be732e4
--- /dev/null
+++ b/core/java/android/app/timezone/DistroFormatVersion.java
@@ -0,0 +1,119 @@
+/*
+ * 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.app.timezone;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Versioning information about a distro's format or a device's supported format.
+ *
+ * <p>The following properties are included:
+ * <dl>
+ *     <dt>majorVersion</dt>
+ *     <dd>the major distro format version. Major versions differences are not compatible - e.g.
+ *     2 is not compatible with 1 or 3.</dd>
+ *     <dt>minorVersion</dt>
+ *     <dd>the minor distro format version. Minor versions should be backwards compatible iff the
+ *     major versions match exactly, i.e. version 2.2 will be compatible with 2.1 devices but not
+ *     2.3 devices.</dd>
+ * </dl>
+ *
+ * @hide
+ */
+public final class DistroFormatVersion implements Parcelable {
+
+    private final int mMajorVersion;
+    private final int mMinorVersion;
+
+    public DistroFormatVersion(int majorVersion, int minorVersion) {
+        mMajorVersion = Utils.validateVersion("major", majorVersion);
+        mMinorVersion = Utils.validateVersion("minor", minorVersion);
+    }
+
+    public static final Creator<DistroFormatVersion> CREATOR = new Creator<DistroFormatVersion>() {
+        public DistroFormatVersion createFromParcel(Parcel in) {
+            int majorVersion = in.readInt();
+            int minorVersion = in.readInt();
+            return new DistroFormatVersion(majorVersion, minorVersion);
+        }
+
+        public DistroFormatVersion[] newArray(int size) {
+            return new DistroFormatVersion[size];
+        }
+    };
+
+    public int getMajorVersion() {
+        return mMajorVersion;
+    }
+
+    public int getMinorVersion() {
+        return mMinorVersion;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeInt(mMajorVersion);
+        out.writeInt(mMinorVersion);
+    }
+
+    /**
+     * If this object describes a device's supported version and the parameter describes a distro's
+     * version, this method returns whether the device would accept the distro.
+     */
+    public boolean supports(DistroFormatVersion distroFormatVersion) {
+        return mMajorVersion == distroFormatVersion.mMajorVersion
+                && mMinorVersion <= distroFormatVersion.mMinorVersion;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        DistroFormatVersion that = (DistroFormatVersion) o;
+
+        if (mMajorVersion != that.mMajorVersion) {
+            return false;
+        }
+        return mMinorVersion == that.mMinorVersion;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = mMajorVersion;
+        result = 31 * result + mMinorVersion;
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "DistroFormatVersion{"
+                + "mMajorVersion=" + mMajorVersion
+                + ", mMinorVersion=" + mMinorVersion
+                + '}';
+    }
+}
diff --git a/core/java/android/app/timezone/DistroRulesVersion.java b/core/java/android/app/timezone/DistroRulesVersion.java
new file mode 100644
index 0000000..a680594
--- /dev/null
+++ b/core/java/android/app/timezone/DistroRulesVersion.java
@@ -0,0 +1,131 @@
+/*
+ * 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.app.timezone;
+
+import static android.app.timezone.Utils.validateRulesVersion;
+import static android.app.timezone.Utils.validateVersion;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Versioning information about a set of time zone rules.
+ *
+ * <p>The following properties are included:
+ * <dl>
+ *     <dt>rulesVersion</dt>
+ *     <dd>the IANA rules version. e.g. "2017a"</dd>
+ *     <dt>revision</dt>
+ *     <dd>the revision for the rules. Allows there to be several revisions for a given IANA rules
+ *     release. Numerically higher is newer.</dd>
+ * </dl>
+ *
+ * @hide
+ */
+public final class DistroRulesVersion implements Parcelable {
+
+    private final String mRulesVersion;
+    private final int mRevision;
+
+    public DistroRulesVersion(String rulesVersion, int revision) {
+        mRulesVersion = validateRulesVersion("rulesVersion", rulesVersion);
+        mRevision = validateVersion("revision", revision);
+    }
+
+    public static final Creator<DistroRulesVersion> CREATOR = new Creator<DistroRulesVersion>() {
+        public DistroRulesVersion createFromParcel(Parcel in) {
+            String rulesVersion = in.readString();
+            int revision = in.readInt();
+            return new DistroRulesVersion(rulesVersion, revision);
+        }
+
+        public DistroRulesVersion[] newArray(int size) {
+            return new DistroRulesVersion[size];
+        }
+    };
+
+    public String getRulesVersion() {
+        return mRulesVersion;
+    }
+
+    public int getRevision() {
+        return mRevision;
+    }
+
+    /**
+     * Returns true if this DistroRulesVersion is older than the one supplied. It returns false if
+     * it is the same or newer. This method compares the {@code rulesVersion} and the
+     * {@code revision}.
+     */
+    public boolean isOlderThan(DistroRulesVersion distroRulesVersion) {
+        int rulesComparison = mRulesVersion.compareTo(distroRulesVersion.mRulesVersion);
+        if (rulesComparison < 0) {
+            return true;
+        }
+        if (rulesComparison > 0) {
+            return false;
+        }
+        return mRevision < distroRulesVersion.mRevision;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeString(mRulesVersion);
+        out.writeInt(mRevision);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        DistroRulesVersion that = (DistroRulesVersion) o;
+
+        if (mRevision != that.mRevision) {
+            return false;
+        }
+        return mRulesVersion.equals(that.mRulesVersion);
+    }
+
+    @Override
+    public int hashCode() {
+        int result = mRulesVersion.hashCode();
+        result = 31 * result + mRevision;
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "DistroRulesVersion{"
+                + "mRulesVersion='" + mRulesVersion + '\''
+                + ", mRevision='" + mRevision + '\''
+                + '}';
+    }
+
+    public String toDumpString() {
+        return mRulesVersion + "," + mRevision;
+    }
+}
diff --git a/core/java/android/app/timezone/ICallback.aidl b/core/java/android/app/timezone/ICallback.aidl
new file mode 100644
index 0000000..519ef1a
--- /dev/null
+++ b/core/java/android/app/timezone/ICallback.aidl
@@ -0,0 +1,27 @@
+/*
+ * 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.app.timezone;
+
+/**
+ * Callback interface for a timezone updater to receive information about the success or failure of
+ * an installation/uninstallation attempt.
+ *
+ * {@hide}
+ */
+oneway interface ICallback {
+    void onFinished(int error);
+}
\ No newline at end of file
diff --git a/core/java/android/app/timezone/IRulesManager.aidl b/core/java/android/app/timezone/IRulesManager.aidl
new file mode 100644
index 0000000..40f3fd2
--- /dev/null
+++ b/core/java/android/app/timezone/IRulesManager.aidl
@@ -0,0 +1,84 @@
+/*
+ * 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.app.timezone;
+
+import android.app.timezone.ICallback;
+import android.app.timezone.RulesState;
+import android.os.ParcelFileDescriptor;
+
+ /**
+  * Interface to the TimeZone Rules Manager Service.
+  *
+  * <p>This interface is only intended for system apps to call. They should use the
+  * {@link android.app.timezone.RulesManager} class rather than going through this
+  * Binder interface directly. See {@link android.app.timezone.RulesManager} for more complete
+  * documentation.
+  *
+  * {@hide}
+  */
+interface IRulesManager {
+
+    /**
+     * Returns information about the current time zone rules state such as the IANA version of
+     * the system and any currently installed distro. This method is intended to allow clients to
+     * determine if the current state can be improved; for example by passing the information to a
+     * server that may provide a new distro for download.
+     */
+    RulesState getRulesState();
+
+    /**
+     * Requests installation of the supplied distro. The distro must have been checked for integrity
+     * by the caller or have been received via a trusted mechanism.
+     *
+     * @param distroFileDescriptor the file descriptor for the distro
+     * @param checkToken an optional token provided if the install was triggered in response to a
+     *     {@link RulesUpdaterContract#ACTION_TRIGGER_RULES_UPDATE_CHECK} intent
+     * @param callback the {@link ICallback} to receive callbacks related to the
+     *     installation
+     * @return zero if the installation will be attempted; nonzero on error
+     */
+    int requestInstall(in ParcelFileDescriptor distroFileDescriptor, in byte[] checkToken,
+            ICallback callback);
+
+    /**
+     * Requests uninstallation of the currently installed distro (leaving the device with no
+     * distro installed).
+     *
+     * @param checkToken an optional token provided if the uninstall was triggered in response to a
+     *     {@link RulesUpdaterContract#ACTION_TRIGGER_RULES_UPDATE_CHECK} intent
+     * @param callback the {@link ICallback} to receive callbacks related to the
+     *     uninstall
+     * @return zero if the uninstallation will be attempted; nonzero on error
+     */
+    int requestUninstall(in byte[] checkToken, ICallback callback);
+
+    /**
+     * Requests the system does not modify the currently installed time zone distro, if any. This
+     * method records the fact that a time zone check operation triggered by the system is now
+     * complete and there was nothing to do. The token passed should be the one presented when the
+     * check was triggered.
+     *
+     * <p>Note: Passing {@code success == false} may result in more checks being triggered. Clients
+     * should be careful not to pass false if the failure is unlikely to resolve by itself.
+     *
+     * @param checkToken an optional token provided if the install was triggered in response to a
+     *     {@link RulesUpdaterContract#ACTION_TRIGGER_RULES_UPDATE_CHECK} intent
+     * @param success true if the check was successful, false if it was not successful but may
+     *     succeed if it is retried
+     */
+    void requestNothing(in byte[] token, boolean success);
+}
diff --git a/core/java/android/app/timezone/RulesManager.java b/core/java/android/app/timezone/RulesManager.java
new file mode 100644
index 0000000..ad9b698
--- /dev/null
+++ b/core/java/android/app/timezone/RulesManager.java
@@ -0,0 +1,211 @@
+/*
+ * 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.app.timezone;
+
+import android.annotation.IntDef;
+import android.content.Context;
+import android.os.Handler;
+import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.util.Log;
+
+import java.io.IOException;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Arrays;
+
+/**
+ * The interface through which a time zone update application interacts with the Android system
+ * to handle time zone rule updates.
+ *
+ * <p>This interface is intended for use with the default APK-based time zone rules update
+ * application but it can also be used by OEMs if that mechanism is turned off using configuration.
+ * All callers must possess the {@link android.Manifest.permission#UPDATE_TIME_ZONE_RULES} system
+ * permission.
+ *
+ * <p>When using the default mechanism, when properly configured the Android system will send a
+ * {@link RulesUpdaterContract#ACTION_TRIGGER_RULES_UPDATE_CHECK} intent with a
+ * {@link RulesUpdaterContract#EXTRA_CHECK_TOKEN} extra to the time zone rules updater application
+ * when it detects that it or the OEM's APK containing time zone rules data has been modified. The
+ * updater application is then responsible for calling one of
+ * {@link #requestInstall(ParcelFileDescriptor, byte[], Callback)},
+ * {@link #requestUninstall(byte[], Callback)} or
+ * {@link #requestNothing(byte[], boolean)}, indicating, respectively, whether a new time zone rules
+ * distro should be installed, the current distro should be uninstalled, or there is nothing to do
+ * (or that the correct operation could not be determined due to an error). In each case the updater
+ * must pass the {@link RulesUpdaterContract#EXTRA_CHECK_TOKEN} value it received from the intent
+ * back so the system in the {@code checkToken} parameter.
+ *
+ * <p>If OEMs want to handle their own time zone rules updates, perhaps via a server-side component
+ * rather than an APK, then they should disable the default triggering mechanism in config and are
+ * responsible for triggering their own update checks / installs / uninstalls. In this case the
+ * "check token" parameter can be left null and there is never any need to call
+ * {@link #requestNothing(byte[], boolean)}.
+ *
+ * <p>OEMs should not mix the default mechanism and their own as this could lead to conflicts and
+ * unnecessary checks being triggered.
+ *
+ * <p>Applications obtain this using {@link android.app.Activity#getSystemService(String)} with
+ * {@link Context#TIME_ZONE_RULES_MANAGER_SERVICE}.
+ * @hide
+ */
+public final class RulesManager {
+    private static final String TAG = "timezone.RulesManager";
+    private static final boolean DEBUG = false;
+
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({SUCCESS, ERROR_UNKNOWN_FAILURE, ERROR_OPERATION_IN_PROGRESS})
+    public @interface ResultCode {}
+
+    /**
+     * Indicates that an operation succeeded.
+     */
+    public static final int SUCCESS = 0;
+
+    /**
+     * Indicates that an install/uninstall cannot be initiated because there is one already in
+     * progress.
+     */
+    public static final int ERROR_OPERATION_IN_PROGRESS = 1;
+
+    /**
+     * Indicates an install / uninstall did not fully succeed for an unknown reason.
+     */
+    public static final int ERROR_UNKNOWN_FAILURE = 2;
+
+    private final Context mContext;
+    private final IRulesManager mIRulesManager;
+
+    public RulesManager(Context context) {
+        mContext = context;
+        mIRulesManager = IRulesManager.Stub.asInterface(
+                ServiceManager.getService(Context.TIME_ZONE_RULES_MANAGER_SERVICE));
+    }
+
+    /**
+     * Returns information about the current time zone rules state such as the IANA version of
+     * the system and any currently installed distro. This method is intended to allow clients to
+     * determine if the current state can be improved; for example by passing the information to a
+     * server that may provide a new distro for download.
+     */
+    public RulesState getRulesState() {
+        try {
+            logDebug("sIRulesManager.getRulesState()");
+            RulesState rulesState = mIRulesManager.getRulesState();
+            logDebug("sIRulesManager.getRulesState() returned " + rulesState);
+            return rulesState;
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Requests installation of the supplied distro. The distro must have been checked for integrity
+     * by the caller or have been received via a trusted mechanism.
+     *
+     * @param distroFileDescriptor the file descriptor for the distro
+     * @param checkToken an optional token provided if the install was triggered in response to a
+     *     {@link RulesUpdaterContract#ACTION_TRIGGER_RULES_UPDATE_CHECK} intent
+     * @param callback the {@link Callback} to receive callbacks related to the installation
+     * @return {@link #SUCCESS} if the installation will be attempted
+     */
+    @ResultCode
+    public int requestInstall(
+            ParcelFileDescriptor distroFileDescriptor, byte[] checkToken, Callback callback)
+            throws IOException {
+
+        ICallback iCallback = new CallbackWrapper(mContext, callback);
+        try {
+            logDebug("sIRulesManager.requestInstall()");
+            return mIRulesManager.requestInstall(distroFileDescriptor, checkToken, iCallback);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Requests uninstallation of the currently installed distro (leaving the device with no
+     * distro installed).
+     *
+     * @param checkToken an optional token provided if the uninstall was triggered in response to a
+     *     {@link RulesUpdaterContract#ACTION_TRIGGER_RULES_UPDATE_CHECK} intent
+     * @param callback the {@link Callback} to receive callbacks related to the uninstall
+     * @return {@link #SUCCESS} if the uninstallation will be attempted
+     */
+    @ResultCode
+    public int requestUninstall(byte[] checkToken, Callback callback) {
+        ICallback iCallback = new CallbackWrapper(mContext, callback);
+        try {
+            logDebug("sIRulesManager.requestUninstall()");
+            return mIRulesManager.requestUninstall(checkToken, iCallback);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /*
+     * We wrap incoming binder calls with a private class implementation that
+     * redirects them into main-thread actions.  This serializes the backup
+     * progress callbacks nicely within the usual main-thread lifecycle pattern.
+     */
+    private class CallbackWrapper extends ICallback.Stub {
+        final Handler mHandler;
+        final Callback mCallback;
+
+        CallbackWrapper(Context context, Callback callback) {
+            mCallback = callback;
+            mHandler = new Handler(context.getMainLooper());
+        }
+
+        // Binder calls into this object just enqueue on the main-thread handler
+        @Override
+        public void onFinished(int status) {
+            logDebug("mCallback.onFinished(status), status=" + status);
+            mHandler.post(() -> mCallback.onFinished(status));
+        }
+    }
+
+    /**
+     * Requests the system does not modify the currently installed time zone distro, if any. This
+     * method records the fact that a time zone check operation triggered by the system is now
+     * complete and there was nothing to do. The token passed should be the one presented when the
+     * check was triggered.
+     *
+     * <p>Note: Passing {@code success == false} may result in more checks being triggered. Clients
+     * should be careful not to pass false if the failure is unlikely to resolve by itself.
+     *
+     * @param checkToken an optional token provided if the install was triggered in response to a
+     *     {@link RulesUpdaterContract#ACTION_TRIGGER_RULES_UPDATE_CHECK} intent
+     * @param succeeded true if the check was successful, false if it was not successful but may
+     *     succeed if it is retried
+     */
+    public void requestNothing(byte[] checkToken, boolean succeeded) {
+        try {
+            logDebug("sIRulesManager.requestNothing() with token=" + Arrays.toString(checkToken));
+            mIRulesManager.requestNothing(checkToken, succeeded);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    static void logDebug(String msg) {
+        if (DEBUG) {
+            Log.v(TAG, msg);
+        }
+    }
+}
diff --git a/core/java/android/app/timezone/RulesState.aidl b/core/java/android/app/timezone/RulesState.aidl
new file mode 100644
index 0000000..f789120
--- /dev/null
+++ b/core/java/android/app/timezone/RulesState.aidl
@@ -0,0 +1,17 @@
+/*
+ * 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.
+ */
+
+parcelable RulesState;
\ No newline at end of file
diff --git a/core/java/android/app/timezone/RulesState.java b/core/java/android/app/timezone/RulesState.java
new file mode 100644
index 0000000..ec247eb
--- /dev/null
+++ b/core/java/android/app/timezone/RulesState.java
@@ -0,0 +1,303 @@
+/*
+ * 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.app.timezone;
+
+import static android.app.timezone.Utils.validateConditionalNull;
+import static android.app.timezone.Utils.validateNotNull;
+import static android.app.timezone.Utils.validateRulesVersion;
+
+import android.annotation.IntDef;
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Description of the state of time zone rules on a device.
+ *
+ * <p>The following properties are included:
+ * <dl>
+ *     <dt>systemRulesVersion</dt>
+ *     <dd>the IANA rules version that shipped with the OS. Always present. e.g. "2017a".</dd>
+ *     <dt>distroFormatVersionSupported</dt>
+ *     <dd>the distro format version supported by this device. Always present.</dd>
+ *     <dt>operationInProgress</dt>
+ *     <dd>{@code true} if there is an install / uninstall operation currently happening.</dd>
+ *     <dt>stagedOperationType</dt>
+ *     <dd>one of {@link #STAGED_OPERATION_UNKNOWN}, {@link #STAGED_OPERATION_NONE},
+ *     {@link #STAGED_OPERATION_UNINSTALL} and {@link #STAGED_OPERATION_INSTALL} indicating whether
+ *     there is a currently staged time zone distro operation. {@link #STAGED_OPERATION_UNKNOWN} is
+ *     used when {@link #isOperationInProgress()} is {@code true}. Staged operations currently
+ *     require a reboot to become active.</dd>
+ *     <dt>stagedDistroRulesVersion</dt>
+ *     <dd>[present if distroStagedState == STAGED_STATE_INSTALL], the rules version of the distro
+ *     currently staged for installation.</dd>
+ *     <dt>distroStatus</dt>
+ *     <dd>{@link #DISTRO_STATUS_INSTALLED} if there is a time zone distro installed and active,
+ *     {@link #DISTRO_STATUS_NONE} if there is no active installed distro.
+ *     {@link #DISTRO_STATUS_UNKNOWN} is used when {@link #isOperationInProgress()} is {@code true}.
+ *     </dd>
+ *     <dt>installedDistroRulesVersion</dt>
+ *     <dd>[present if distroStatus == {@link #DISTRO_STATUS_INSTALLED}], the rules version of the
+ *     installed and active distro.</dd>
+ * </dl>
+ *
+ * @hide
+ */
+public final class RulesState implements Parcelable {
+
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({
+            STAGED_OPERATION_UNKNOWN,
+            STAGED_OPERATION_NONE,
+            STAGED_OPERATION_UNINSTALL,
+            STAGED_OPERATION_INSTALL })
+    private @interface StagedOperationType {}
+
+    /** Staged state could not be determined. */
+    public static final int STAGED_OPERATION_UNKNOWN = 0;
+    /** Nothing is staged. */
+    public static final int STAGED_OPERATION_NONE = 1;
+    /** An uninstall is staged. */
+    public static final int STAGED_OPERATION_UNINSTALL = 2;
+    /** An install is staged. */
+    public static final int STAGED_OPERATION_INSTALL = 3;
+
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({
+            DISTRO_STATUS_UNKNOWN,
+            DISTRO_STATUS_NONE,
+            DISTRO_STATUS_INSTALLED })
+    private @interface DistroStatus {}
+
+    /** The current distro status could not be determined. */
+    public static final int DISTRO_STATUS_UNKNOWN = 0;
+    /** There is no active installed time zone distro. */
+    public static final int DISTRO_STATUS_NONE = 1;
+    /** The is an active, installed time zone distro. */
+    public static final int DISTRO_STATUS_INSTALLED = 2;
+
+    private static final byte BYTE_FALSE = 0;
+    private static final byte BYTE_TRUE = 1;
+
+    private final String mSystemRulesVersion;
+    private final DistroFormatVersion mDistroFormatVersionSupported;
+    private final boolean mOperationInProgress;
+    @StagedOperationType private final int mStagedOperationType;
+    @Nullable private final DistroRulesVersion mStagedDistroRulesVersion;
+    @DistroStatus private final int mDistroStatus;
+    @Nullable private final DistroRulesVersion mInstalledDistroRulesVersion;
+
+    public RulesState(String systemRulesVersion, DistroFormatVersion distroFormatVersionSupported,
+            boolean operationInProgress,
+            @StagedOperationType int stagedOperationType,
+            @Nullable DistroRulesVersion stagedDistroRulesVersion,
+            @DistroStatus int distroStatus,
+            @Nullable DistroRulesVersion installedDistroRulesVersion) {
+        this.mSystemRulesVersion = validateRulesVersion("systemRulesVersion", systemRulesVersion);
+        this.mDistroFormatVersionSupported =
+                validateNotNull("distroFormatVersionSupported", distroFormatVersionSupported);
+        this.mOperationInProgress = operationInProgress;
+
+        if (operationInProgress && stagedOperationType != STAGED_OPERATION_UNKNOWN) {
+            throw new IllegalArgumentException(
+                    "stagedOperationType != STAGED_OPERATION_UNKNOWN");
+        }
+        this.mStagedOperationType = validateStagedOperation(stagedOperationType);
+        this.mStagedDistroRulesVersion = validateConditionalNull(
+                mStagedOperationType == STAGED_OPERATION_INSTALL /* requireNotNull */,
+                "stagedDistroRulesVersion", stagedDistroRulesVersion);
+
+        if (operationInProgress && distroStatus != DISTRO_STATUS_UNKNOWN) {
+            throw new IllegalArgumentException("distroInstalled != DISTRO_STATUS_UNKNOWN");
+        }
+        this.mDistroStatus = validateDistroStatus(distroStatus);
+        this.mInstalledDistroRulesVersion = validateConditionalNull(
+                mDistroStatus == DISTRO_STATUS_INSTALLED/* requireNotNull */,
+                "installedDistroRulesVersion", installedDistroRulesVersion);
+    }
+
+    public String getSystemRulesVersion() {
+        return mSystemRulesVersion;
+    }
+
+    public boolean isOperationInProgress() {
+        return mOperationInProgress;
+    }
+
+    public @StagedOperationType int getStagedOperationType() {
+        return mStagedOperationType;
+    }
+
+    /**
+     * Returns the staged rules version when {@link #getStagedOperationType()} is
+     * {@link #STAGED_OPERATION_INSTALL}.
+     */
+    public @Nullable DistroRulesVersion getStagedDistroRulesVersion() {
+        return mStagedDistroRulesVersion;
+    }
+
+    public @DistroStatus int getDistroStatus() {
+        return mDistroStatus;
+    }
+
+    /**
+     * Returns the installed rules version when {@link #getDistroStatus()} is
+     * {@link #DISTRO_STATUS_INSTALLED}.
+     */
+    public @Nullable DistroRulesVersion getInstalledDistroRulesVersion() {
+        return mInstalledDistroRulesVersion;
+    }
+
+    /**
+     * Returns true if a distro in the specified format is supported on this device.
+     */
+    public boolean isDistroFormatVersionSupported(DistroFormatVersion distroFormatVersion) {
+        return mDistroFormatVersionSupported.supports(distroFormatVersion);
+    }
+
+    /**
+     * Returns true if the system image data files contain IANA rules data that are newer than the
+     * distro IANA rules version supplied, i.e. true when the version specified would be "worse"
+     * than the one that is in the system image. Returns false if the system image version is the
+     * same or older, i.e. false when the version specified would be "better" than the one that is
+     * in the system image.
+     */
+    public boolean isSystemVersionNewerThan(DistroRulesVersion distroRulesVersion) {
+        return mSystemRulesVersion.compareTo(distroRulesVersion.getRulesVersion()) > 0;
+    }
+
+    public static final Parcelable.Creator<RulesState> CREATOR =
+            new Parcelable.Creator<RulesState>() {
+        public RulesState createFromParcel(Parcel in) {
+            return RulesState.createFromParcel(in);
+        }
+
+        public RulesState[] newArray(int size) {
+            return new RulesState[size];
+        }
+    };
+
+    private static RulesState createFromParcel(Parcel in) {
+        String systemRulesVersion = in.readString();
+        DistroFormatVersion distroFormatVersionSupported = in.readParcelable(null);
+        boolean operationInProgress = in.readByte() == BYTE_TRUE;
+        int distroStagedState = in.readByte();
+        DistroRulesVersion stagedDistroRulesVersion = in.readParcelable(null);
+        int installedDistroStatus = in.readByte();
+        DistroRulesVersion installedDistroRulesVersion = in.readParcelable(null);
+        return new RulesState(systemRulesVersion, distroFormatVersionSupported, operationInProgress,
+                distroStagedState, stagedDistroRulesVersion,
+                installedDistroStatus, installedDistroRulesVersion);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeString(mSystemRulesVersion);
+        out.writeParcelable(mDistroFormatVersionSupported, 0);
+        out.writeByte(mOperationInProgress ? BYTE_TRUE : BYTE_FALSE);
+        out.writeByte((byte) mStagedOperationType);
+        out.writeParcelable(mStagedDistroRulesVersion, 0);
+        out.writeByte((byte) mDistroStatus);
+        out.writeParcelable(mInstalledDistroRulesVersion, 0);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        RulesState that = (RulesState) o;
+
+        if (mOperationInProgress != that.mOperationInProgress) {
+            return false;
+        }
+        if (mStagedOperationType != that.mStagedOperationType) {
+            return false;
+        }
+        if (mDistroStatus != that.mDistroStatus) {
+            return false;
+        }
+        if (!mSystemRulesVersion.equals(that.mSystemRulesVersion)) {
+            return false;
+        }
+        if (!mDistroFormatVersionSupported.equals(that.mDistroFormatVersionSupported)) {
+            return false;
+        }
+        if (mStagedDistroRulesVersion != null ? !mStagedDistroRulesVersion
+                .equals(that.mStagedDistroRulesVersion) : that.mStagedDistroRulesVersion != null) {
+            return false;
+        }
+        return mInstalledDistroRulesVersion != null ? mInstalledDistroRulesVersion
+                .equals(that.mInstalledDistroRulesVersion)
+                : that.mInstalledDistroRulesVersion == null;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = mSystemRulesVersion.hashCode();
+        result = 31 * result + mDistroFormatVersionSupported.hashCode();
+        result = 31 * result + (mOperationInProgress ? 1 : 0);
+        result = 31 * result + mStagedOperationType;
+        result = 31 * result + (mStagedDistroRulesVersion != null ? mStagedDistroRulesVersion
+                .hashCode()
+                : 0);
+        result = 31 * result + mDistroStatus;
+        result = 31 * result + (mInstalledDistroRulesVersion != null ? mInstalledDistroRulesVersion
+                .hashCode() : 0);
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "RulesState{"
+                + "mSystemRulesVersion='" + mSystemRulesVersion + '\''
+                + ", mDistroFormatVersionSupported=" + mDistroFormatVersionSupported
+                + ", mOperationInProgress=" + mOperationInProgress
+                + ", mStagedOperationType=" + mStagedOperationType
+                + ", mStagedDistroRulesVersion=" + mStagedDistroRulesVersion
+                + ", mDistroStatus=" + mDistroStatus
+                + ", mInstalledDistroRulesVersion=" + mInstalledDistroRulesVersion
+                + '}';
+    }
+
+    private static int validateStagedOperation(int stagedOperationType) {
+        if (stagedOperationType < STAGED_OPERATION_UNKNOWN
+                || stagedOperationType > STAGED_OPERATION_INSTALL) {
+            throw new IllegalArgumentException("Unknown operation type=" + stagedOperationType);
+        }
+        return stagedOperationType;
+    }
+
+    private static int validateDistroStatus(int distroStatus) {
+        if (distroStatus < DISTRO_STATUS_UNKNOWN || distroStatus > DISTRO_STATUS_INSTALLED) {
+            throw new IllegalArgumentException("Unknown distro status=" + distroStatus);
+        }
+        return distroStatus;
+    }
+}
diff --git a/core/java/android/app/timezone/RulesUpdaterContract.java b/core/java/android/app/timezone/RulesUpdaterContract.java
new file mode 100644
index 0000000..2a22ead
--- /dev/null
+++ b/core/java/android/app/timezone/RulesUpdaterContract.java
@@ -0,0 +1,90 @@
+/*
+ * 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.app.timezone;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.ParcelFileDescriptor;
+import android.os.UserHandle;
+
+/**
+ * Constants related to the contract between the Android system and the privileged time zone updater
+ * application.
+ *
+ * @hide
+ */
+public final class RulesUpdaterContract {
+
+    /**
+     * The system permission possessed by the Android system that allows it to trigger time zone
+     * update checks. The updater should be configured to require this permission when registering
+     * for {@link #ACTION_TRIGGER_RULES_UPDATE_CHECK} intents.
+     */
+    public static final String TRIGGER_TIME_ZONE_RULES_CHECK_PERMISSION =
+            android.Manifest.permission.TRIGGER_TIME_ZONE_RULES_CHECK;
+
+    /**
+     * The system permission possessed by the time zone rules updater app that allows it to update
+     * device time zone rules. The Android system requires this permission for calls made to
+     * {@link RulesManager}.
+     */
+    public static final String UPDATE_TIME_ZONE_RULES_PERMISSION =
+            android.Manifest.permission.UPDATE_TIME_ZONE_RULES;
+
+    /**
+     * The action of the intent that the Android system will broadcast. The intent will be targeted
+     * at the configured updater application's package meaning the term "broadcast" only loosely
+     * applies.
+     */
+    public static final String ACTION_TRIGGER_RULES_UPDATE_CHECK =
+            "com.android.intent.action.timezone.TRIGGER_RULES_UPDATE_CHECK";
+
+    /**
+     * The extra containing the {@code byte[]} that should be passed to
+     * {@link RulesManager#requestInstall(ParcelFileDescriptor, byte[], Callback)},
+     * {@link RulesManager#requestUninstall(byte[], Callback)} and
+     * {@link RulesManager#requestNothing(byte[], boolean)} methods when the
+     * {@link #ACTION_TRIGGER_RULES_UPDATE_CHECK} intent has been processed.
+     */
+    public static final String EXTRA_CHECK_TOKEN =
+            "com.android.intent.extra.timezone.CHECK_TOKEN";
+
+    /**
+     * Creates an intent that would trigger a time zone rules update check.
+     */
+    public static Intent createUpdaterIntent(String updaterPackageName) {
+        Intent intent = new Intent(RulesUpdaterContract.ACTION_TRIGGER_RULES_UPDATE_CHECK);
+        intent.setPackage(updaterPackageName);
+        intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
+        return intent;
+    }
+
+    /**
+     * Broadcasts an {@link #ACTION_TRIGGER_RULES_UPDATE_CHECK} intent with the
+     * {@link #EXTRA_CHECK_TOKEN} that triggers an update check, including the required receiver
+     * permission.
+     */
+    public static void sendBroadcast(Context context, String updaterAppPackageName,
+            byte[] checkTokenBytes) {
+        Intent intent = createUpdaterIntent(updaterAppPackageName);
+        intent.putExtra(EXTRA_CHECK_TOKEN, checkTokenBytes);
+        context.sendBroadcastAsUser(
+                intent,
+                UserHandle.of(UserHandle.myUserId()),
+                RulesUpdaterContract.UPDATE_TIME_ZONE_RULES_PERMISSION);
+    }
+}
diff --git a/core/java/android/app/timezone/Utils.java b/core/java/android/app/timezone/Utils.java
new file mode 100644
index 0000000..8dd3fb7
--- /dev/null
+++ b/core/java/android/app/timezone/Utils.java
@@ -0,0 +1,67 @@
+/*
+ * 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.app.timezone;
+
+/**
+ * Shared code for android.app.timezone classes.
+ */
+final class Utils {
+    private Utils() {}
+
+    static int validateVersion(String type, int version) {
+        if (version < 0 || version > 999) {
+            throw new IllegalArgumentException("Invalid " + type + " version=" + version);
+        }
+        return version;
+    }
+
+    static String validateRulesVersion(String type, String rulesVersion) {
+        validateNotNull(type, rulesVersion);
+
+        if (rulesVersion.isEmpty()) {
+            throw new IllegalArgumentException(type + " must not be empty");
+        }
+        return rulesVersion;
+    }
+
+    /** Validates that {@code object} is not null. Always returns {@code object}. */
+    static <T> T validateNotNull(String type, T object) {
+        if (object == null) {
+            throw new NullPointerException(type + " == null");
+        }
+        return object;
+    }
+
+    /**
+     * If {@code requireNotNull} is {@code true} calls {@link #validateNotNull(String, Object)},
+     * and {@link #validateNull(String, Object)} otherwise. Returns {@code object}.
+     */
+    static <T> T validateConditionalNull(boolean requireNotNull, String type, T object) {
+        if (requireNotNull) {
+            return validateNotNull(type, object);
+        } else {
+            return validateNull(type, object);
+        }
+    }
+
+    /** Validates that {@code object} is null. Always returns null. */
+    static <T> T validateNull(String type, T object) {
+        if (object != null) {
+            throw new IllegalArgumentException(type + " != null");
+        }
+        return null;
+    }
+}
diff --git a/core/java/android/app/usage/ExternalStorageStats.java b/core/java/android/app/usage/ExternalStorageStats.java
index d7e570f..f00e5c2 100644
--- a/core/java/android/app/usage/ExternalStorageStats.java
+++ b/core/java/android/app/usage/ExternalStorageStats.java
@@ -33,6 +33,7 @@
     /** {@hide} */ public long videoBytes;
     /** {@hide} */ public long imageBytes;
     /** {@hide} */ public long appBytes;
+    /** {@hide} */ public long obbBytes;
 
     /**
      * Return the total bytes used by all files in the shared/external storage
@@ -97,6 +98,11 @@
     }
 
     /** {@hide} */
+    public @BytesLong long getObbBytes() {
+        return obbBytes;
+    }
+
+    /** {@hide} */
     public ExternalStorageStats() {
     }
 
@@ -107,6 +113,7 @@
         this.videoBytes = in.readLong();
         this.imageBytes = in.readLong();
         this.appBytes = in.readLong();
+        this.obbBytes = in.readLong();
     }
 
     @Override
@@ -121,6 +128,7 @@
         dest.writeLong(videoBytes);
         dest.writeLong(imageBytes);
         dest.writeLong(appBytes);
+        dest.writeLong(obbBytes);
     }
 
     public static final Creator<ExternalStorageStats> CREATOR = new Creator<ExternalStorageStats>() {
diff --git a/core/java/android/app/usage/NetworkStats.java b/core/java/android/app/usage/NetworkStats.java
index 3670b91..222e9a0 100644
--- a/core/java/android/app/usage/NetworkStats.java
+++ b/core/java/android/app/usage/NetworkStats.java
@@ -97,12 +97,12 @@
     private NetworkStatsHistory.Entry mRecycledHistoryEntry = null;
 
     /** @hide */
-    NetworkStats(Context context, NetworkTemplate template, long startTimestamp,
+    NetworkStats(Context context, NetworkTemplate template, int flags, long startTimestamp,
             long endTimestamp) throws RemoteException, SecurityException {
         final INetworkStatsService statsService = INetworkStatsService.Stub.asInterface(
                 ServiceManager.getService(Context.NETWORK_STATS_SERVICE));
         // Open network stats session
-        mSession = statsService.openSessionForUsageStats(context.getOpPackageName());
+        mSession = statsService.openSessionForUsageStats(flags, context.getOpPackageName());
         mCloseGuard.open("close");
         mTemplate = template;
         mStartTimeStamp = startTimestamp;
diff --git a/core/java/android/app/usage/NetworkStatsManager.java b/core/java/android/app/usage/NetworkStatsManager.java
index ef262e0..853b003 100644
--- a/core/java/android/app/usage/NetworkStatsManager.java
+++ b/core/java/android/app/usage/NetworkStatsManager.java
@@ -24,15 +24,14 @@
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.DataUsageRequest;
+import android.net.INetworkStatsService;
 import android.net.NetworkIdentity;
 import android.net.NetworkTemplate;
-import android.net.INetworkStatsService;
 import android.os.Binder;
-import android.os.Build;
-import android.os.Message;
-import android.os.Messenger;
 import android.os.Handler;
 import android.os.Looper;
+import android.os.Message;
+import android.os.Messenger;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.ServiceManager.ServiceNotFoundException;
@@ -79,7 +78,7 @@
  * In addition to tethering usage, usage by removed users and apps, and usage by the system
  * is also included in the results for callers with one of these higher levels of access.
  * <p />
- * <b>NOTE:</b> Prior to API level {@value Build.VERSION_CODES#N}, all calls to these APIs required
+ * <b>NOTE:</b> Prior to API level {@value android.os.Build.VERSION_CODES#N}, all calls to these APIs required
  * the above permission, even to access an app's own data usage, and carrier-privileged apps were
  * not included.
  */
@@ -96,6 +95,13 @@
     private final Context mContext;
     private final INetworkStatsService mService;
 
+    /** @hide */
+    public static final int FLAG_POLL_ON_OPEN = 1 << 0;
+    /** @hide */
+    public static final int FLAG_AUGMENT_WITH_SUBSCRIPTION_PLAN = 1 << 1;
+
+    private int mFlags;
+
     /**
      * {@hide}
      */
@@ -103,6 +109,25 @@
         mContext = context;
         mService = INetworkStatsService.Stub.asInterface(
                 ServiceManager.getServiceOrThrow(Context.NETWORK_STATS_SERVICE));
+        setPollOnOpen(true);
+    }
+
+    /** @hide */
+    public void setPollOnOpen(boolean pollOnOpen) {
+        if (pollOnOpen) {
+            mFlags |= FLAG_POLL_ON_OPEN;
+        } else {
+            mFlags &= ~FLAG_POLL_ON_OPEN;
+        }
+    }
+
+    /** @hide */
+    public void setAugmentWithSubscriptionPlan(boolean augmentWithSubscriptionPlan) {
+        if (augmentWithSubscriptionPlan) {
+            mFlags |= FLAG_AUGMENT_WITH_SUBSCRIPTION_PLAN;
+        } else {
+            mFlags &= ~FLAG_AUGMENT_WITH_SUBSCRIPTION_PLAN;
+        }
     }
 
     /**
@@ -136,7 +161,7 @@
         }
 
         Bucket bucket = null;
-        NetworkStats stats = new NetworkStats(mContext, template, startTime, endTime);
+        NetworkStats stats = new NetworkStats(mContext, template, mFlags, startTime, endTime);
         bucket = stats.getDeviceSummaryForNetwork();
 
         stats.close();
@@ -174,7 +199,7 @@
         }
 
         NetworkStats stats;
-        stats = new NetworkStats(mContext, template, startTime, endTime);
+        stats = new NetworkStats(mContext, template, mFlags, startTime, endTime);
         stats.startSummaryEnumeration();
 
         stats.close();
@@ -211,7 +236,7 @@
         }
 
         NetworkStats result;
-        result = new NetworkStats(mContext, template, startTime, endTime);
+        result = new NetworkStats(mContext, template, mFlags, startTime, endTime);
         result.startSummaryEnumeration();
 
         return result;
@@ -260,7 +285,7 @@
 
         NetworkStats result;
         try {
-            result = new NetworkStats(mContext, template, startTime, endTime);
+            result = new NetworkStats(mContext, template, mFlags, startTime, endTime);
             result.startHistoryEnumeration(uid, tag);
         } catch (RemoteException e) {
             Log.e(TAG, "Error while querying stats for uid=" + uid + " tag=" + tag, e);
@@ -305,7 +330,7 @@
         }
 
         NetworkStats result;
-        result = new NetworkStats(mContext, template, startTime, endTime);
+        result = new NetworkStats(mContext, template, mFlags, startTime, endTime);
         result.startUserUidEnumeration();
         return result;
     }
diff --git a/core/java/android/app/usage/StorageStatsManager.java b/core/java/android/app/usage/StorageStatsManager.java
index 7c68079..3d187ec 100644
--- a/core/java/android/app/usage/StorageStatsManager.java
+++ b/core/java/android/app/usage/StorageStatsManager.java
@@ -119,8 +119,7 @@
      * could be reclaimed by the system.
      * <p>
      * Apps making logical decisions about disk space should always use
-     * {@link StorageManager#getAllocatableBytes(UUID, int)} instead of this
-     * value.
+     * {@link StorageManager#getAllocatableBytes(UUID)} instead of this value.
      *
      * @param storageUuid the UUID of the storage volume you're interested in,
      *            such as {@link StorageManager#UUID_DEFAULT}.
diff --git a/core/java/android/appwidget/AppWidgetHost.java b/core/java/android/appwidget/AppWidgetHost.java
index c1ff580..37360ba 100644
--- a/core/java/android/appwidget/AppWidgetHost.java
+++ b/core/java/android/appwidget/AppWidgetHost.java
@@ -16,15 +16,13 @@
 
 package android.appwidget;
 
-import java.lang.ref.WeakReference;
-import java.util.List;
-
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.Activity;
 import android.content.ActivityNotFoundException;
 import android.content.Context;
 import android.content.IntentSender;
+import android.content.pm.PackageManager;
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.Handler;
@@ -42,6 +40,9 @@
 import com.android.internal.appwidget.IAppWidgetHost;
 import com.android.internal.appwidget.IAppWidgetService;
 
+import java.lang.ref.WeakReference;
+import java.util.List;
+
 /**
  * AppWidgetHost provides the interaction with the AppWidget service for apps,
  * like the home screen, that want to embed AppWidgets in their UI.
@@ -55,6 +56,7 @@
 
     final static Object sServiceLock = new Object();
     static IAppWidgetService sService;
+    static boolean sServiceInitialized = false;
     private DisplayMetrics mDisplayMetrics;
 
     private String mContextOpPackageName;
@@ -160,15 +162,21 @@
         mHandler = new UpdateHandler(looper);
         mCallbacks = new Callbacks(mHandler);
         mDisplayMetrics = context.getResources().getDisplayMetrics();
-        bindService();
+        bindService(context);
     }
 
-    private static void bindService() {
+    private static void bindService(Context context) {
         synchronized (sServiceLock) {
-            if (sService == null) {
-                IBinder b = ServiceManager.getService(Context.APPWIDGET_SERVICE);
-                sService = IAppWidgetService.Stub.asInterface(b);
+            if (sServiceInitialized) {
+                return;
             }
+            sServiceInitialized = true;
+            if (!context.getPackageManager().hasSystemFeature(
+                    PackageManager.FEATURE_APP_WIDGETS)) {
+                return;
+            }
+            IBinder b = ServiceManager.getService(Context.APPWIDGET_SERVICE);
+            sService = IAppWidgetService.Stub.asInterface(b);
         }
     }
 
@@ -177,6 +185,9 @@
      * becomes visible, i.e. from onStart() in your Activity.
      */
     public void startListening() {
+        if (sService == null) {
+            return;
+        }
         final int[] idsToUpdate;
         synchronized (mViews) {
             int N = mViews.size();
@@ -215,6 +226,9 @@
      * no longer visible, i.e. from onStop() in your Activity.
      */
     public void stopListening() {
+        if (sService == null) {
+            return;
+        }
         try {
             sService.stopListening(mContextOpPackageName, mHostId);
         }
@@ -229,6 +243,9 @@
      * @return a appWidgetId
      */
     public int allocateAppWidgetId() {
+        if (sService == null) {
+            return -1;
+        }
         try {
             return sService.allocateAppWidgetId(mContextOpPackageName, mHostId);
         }
@@ -258,6 +275,9 @@
      */
     public final void startAppWidgetConfigureActivityForResult(@NonNull Activity activity,
             int appWidgetId, int intentFlags, int requestCode, @Nullable Bundle options) {
+        if (sService == null) {
+            return;
+        }
         try {
             IntentSender intentSender = sService.createAppWidgetConfigIntentSender(
                     mContextOpPackageName, appWidgetId, intentFlags);
@@ -278,10 +298,10 @@
      * Gets a list of all the appWidgetIds that are bound to the current host
      */
     public int[] getAppWidgetIds() {
+        if (sService == null) {
+            return new int[0];
+        }
         try {
-            if (sService == null) {
-                bindService();
-            }
             return sService.getAppWidgetIdsForHost(mContextOpPackageName, mHostId);
         } catch (RemoteException e) {
             throw new RuntimeException("system server dead?", e);
@@ -292,6 +312,9 @@
      * Stop listening to changes for this AppWidget.
      */
     public void deleteAppWidgetId(int appWidgetId) {
+        if (sService == null) {
+            return;
+        }
         synchronized (mViews) {
             mViews.remove(appWidgetId);
             try {
@@ -312,6 +335,9 @@
      * </ul>
      */
     public void deleteHost() {
+        if (sService == null) {
+            return;
+        }
         try {
             sService.deleteHost(mContextOpPackageName, mHostId);
         }
@@ -329,6 +355,9 @@
      * </ul>
      */
     public static void deleteAllHosts() {
+        if (sService == null) {
+            return;
+        }
         try {
             sService.deleteAllHosts();
         }
@@ -343,6 +372,9 @@
      */
     public final AppWidgetHostView createView(Context context, int appWidgetId,
             AppWidgetProviderInfo appWidget) {
+        if (sService == null) {
+            return null;
+        }
         AppWidgetHostView view = onCreateView(context, appWidgetId, appWidget);
         view.setOnClickHandler(mOnClickHandler);
         view.setAppWidget(appWidgetId, appWidget);
diff --git a/core/java/android/appwidget/AppWidgetManagerInternal.java b/core/java/android/appwidget/AppWidgetManagerInternal.java
index daa297d..5562c55 100644
--- a/core/java/android/appwidget/AppWidgetManagerInternal.java
+++ b/core/java/android/appwidget/AppWidgetManagerInternal.java
@@ -16,12 +16,9 @@
 
 package android.appwidget;
 
-import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.util.ArraySet;
 
-import java.util.Set;
-
 /**
  * App widget manager local system service interface.
  *
diff --git a/core/java/android/bluetooth/BluetoothA2dpSink.java b/core/java/android/bluetooth/BluetoothA2dpSink.java
index 9dfc4b4..4ebef4f 100755
--- a/core/java/android/bluetooth/BluetoothA2dpSink.java
+++ b/core/java/android/bluetooth/BluetoothA2dpSink.java
@@ -125,7 +125,7 @@
 
     private Context mContext;
     private ServiceListener mServiceListener;
-    private IBluetoothA2dpSink mService;
+    private volatile IBluetoothA2dpSink mService;
     private BluetoothAdapter mAdapter;
 
     final private IBluetoothStateChangeCallback mBluetoothStateChangeCallback =
@@ -239,16 +239,16 @@
      */
     public boolean connect(BluetoothDevice device) {
         if (DBG) log("connect(" + device + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothA2dpSink service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.connect(device);
+                return service.connect(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -280,16 +280,16 @@
      */
     public boolean disconnect(BluetoothDevice device) {
         if (DBG) log("disconnect(" + device + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothA2dpSink service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.disconnect(device);
+                return service.disconnect(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -298,15 +298,16 @@
      */
     public List<BluetoothDevice> getConnectedDevices() {
         if (VDBG) log("getConnectedDevices()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothA2dpSink service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getConnectedDevices();
+                return service.getConnectedDevices();
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -315,15 +316,16 @@
      */
     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
         if (VDBG) log("getDevicesMatchingStates()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothA2dpSink service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getDevicesMatchingConnectionStates(states);
+                return service.getDevicesMatchingConnectionStates(states);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -332,16 +334,16 @@
      */
     public int getConnectionState(BluetoothDevice device) {
         if (VDBG) log("getState(" + device + ")");
-        if (mService != null && isEnabled()
-            && isValidDevice(device)) {
+        final IBluetoothA2dpSink service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getConnectionState(device);
+                return service.getConnectionState(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return BluetoothProfile.STATE_DISCONNECTED;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return BluetoothProfile.STATE_DISCONNECTED;
     }
 
@@ -358,16 +360,16 @@
      */
           public BluetoothAudioConfig getAudioConfig(BluetoothDevice device) {
         if (VDBG) log("getAudioConfig(" + device + ")");
-        if (mService != null && isEnabled()
-            && isValidDevice(device)) {
+        final IBluetoothA2dpSink service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getAudioConfig(device);
+                return service.getAudioConfig(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return null;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return null;
     }
 
@@ -388,21 +390,21 @@
      */
     public boolean setPriority(BluetoothDevice device, int priority) {
         if (DBG) log("setPriority(" + device + ", " + priority + ")");
-        if (mService != null && isEnabled()
-            && isValidDevice(device)) {
-            if (priority != BluetoothProfile.PRIORITY_OFF &&
-                priority != BluetoothProfile.PRIORITY_ON){
+        final IBluetoothA2dpSink service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
+            if (priority != BluetoothProfile.PRIORITY_OFF
+                    && priority != BluetoothProfile.PRIORITY_ON) {
                 return false;
             }
             try {
-                return mService.setPriority(device, priority);
+                return service.setPriority(device, priority);
             } catch (RemoteException e) {
                    Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                    return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
-            return false;
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
+        return false;
     }
 
     /**
@@ -420,16 +422,16 @@
      */
     public int getPriority(BluetoothDevice device) {
         if (VDBG) log("getPriority(" + device + ")");
-        if (mService != null && isEnabled()
-            && isValidDevice(device)) {
+        final IBluetoothA2dpSink service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getPriority(device);
+                return service.getPriority(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return BluetoothProfile.PRIORITY_OFF;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return BluetoothProfile.PRIORITY_OFF;
     }
 
@@ -441,16 +443,16 @@
      * @param device BluetoothDevice device
      */
     public boolean isA2dpPlaying(BluetoothDevice device) {
-        if (mService != null && isEnabled()
-            && isValidDevice(device)) {
+        final IBluetoothA2dpSink service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.isA2dpPlaying(device);
+                return service.isA2dpPlaying(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -483,7 +485,6 @@
         public void onServiceConnected(ComponentName className, IBinder service) {
             if (DBG) Log.d(TAG, "Proxy object connected");
             mService = IBluetoothA2dpSink.Stub.asInterface(Binder.allowBlocking(service));
-
             if (mServiceListener != null) {
                 mServiceListener.onServiceConnected(BluetoothProfile.A2DP_SINK,
                         BluetoothA2dpSink.this);
@@ -499,15 +500,11 @@
     };
 
     private boolean isEnabled() {
-       if (mAdapter.getState() == BluetoothAdapter.STATE_ON) return true;
-       return false;
+        return mAdapter.getState() == BluetoothAdapter.STATE_ON;
     }
 
-    private boolean isValidDevice(BluetoothDevice device) {
-       if (device == null) return false;
-
-       if (BluetoothAdapter.checkBluetoothAddress(device.getAddress())) return true;
-       return false;
+    private static boolean isValidDevice(BluetoothDevice device) {
+        return device != null && BluetoothAdapter.checkBluetoothAddress(device.getAddress());
     }
 
     private static void log(String msg) {
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 64c0f31..1553eec 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -70,9 +70,10 @@
  * devices, and start a scan for Bluetooth LE devices.
  *
  * <p>To get a {@link BluetoothAdapter} representing the local Bluetooth
- * adapter, when running on JELLY_BEAN_MR1 and below, call the
- * static {@link #getDefaultAdapter} method; when running on JELLY_BEAN_MR2 and
- * higher, call {@link BluetoothManager#getAdapter}.
+ * adapter, call the {@link BluetoothManager#getAdapter} function on {@link BluetoothManager}.
+ * On JELLY_BEAN_MR1 and below you will need to use the static {@link #getDefaultAdapter}
+ * method instead.
+ * </p><p>
  * Fundamentally, this is your starting point for all
  * Bluetooth actions. Once you have the local adapter, you can get a set of
  * {@link BluetoothDevice} objects representing all paired devices with
@@ -81,14 +82,13 @@
  * listen for incoming connection requests with
  * {@link #listenUsingRfcommWithServiceRecord(String,UUID)}; or start a scan for
  * Bluetooth LE devices with {@link #startLeScan(LeScanCallback callback)}.
- *
- * <p>This class is thread safe.
- *
+ * </p>
+ * <p>This class is thread safe.</p>
  * <p class="note"><strong>Note:</strong>
  * Most methods require the {@link android.Manifest.permission#BLUETOOTH}
  * permission and some also require the
  * {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission.
- *
+ * </p>
  * <div class="special reference">
  * <h3>Developer Guides</h3>
  * <p>
@@ -415,7 +415,7 @@
      * Intent used to broadcast the change in connection state of the local
      * Bluetooth adapter to a profile of the remote device. When the adapter is
      * not connected to any profiles of any remote devices and it attempts a
-     * connection to a profile this intent will sent. Once connected, this intent
+     * connection to a profile this intent will be sent. Once connected, this intent
      * will not be sent for any more connection attempts to any profiles of any
      * remote device. When the adapter disconnects from the last profile its
      * connected to of any remote device, this intent will be sent.
@@ -565,6 +565,7 @@
      * <p>Currently Android only supports one Bluetooth adapter, but the API
      * could be extended to support more. This will always return the default
      * adapter.
+     * </p>
      * @return the default local adapter, or null if Bluetooth is not supported
      *         on this hardware platform
      */
diff --git a/core/java/android/bluetooth/BluetoothAvrcpController.java b/core/java/android/bluetooth/BluetoothAvrcpController.java
index 0261b1b..a04f110 100644
--- a/core/java/android/bluetooth/BluetoothAvrcpController.java
+++ b/core/java/android/bluetooth/BluetoothAvrcpController.java
@@ -20,8 +20,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.media.MediaMetadata;
-import android.media.session.PlaybackState;
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.RemoteException;
@@ -83,7 +81,7 @@
 
     private Context mContext;
     private ServiceListener mServiceListener;
-    private IBluetoothAvrcpController mService;
+    private volatile IBluetoothAvrcpController mService;
     private BluetoothAdapter mAdapter;
 
     final private IBluetoothStateChangeCallback mBluetoothStateChangeCallback =
@@ -180,15 +178,16 @@
      */
     public List<BluetoothDevice> getConnectedDevices() {
         if (VDBG) log("getConnectedDevices()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothAvrcpController service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getConnectedDevices();
+                return service.getConnectedDevices();
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -197,15 +196,16 @@
      */
     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
         if (VDBG) log("getDevicesMatchingStates()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothAvrcpController service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getDevicesMatchingConnectionStates(states);
+                return service.getDevicesMatchingConnectionStates(states);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -214,16 +214,16 @@
      */
     public int getConnectionState(BluetoothDevice device) {
         if (VDBG) log("getState(" + device + ")");
-        if (mService != null && isEnabled()
-            && isValidDevice(device)) {
+        final IBluetoothAvrcpController service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getConnectionState(device);
+                return service.getConnectionState(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return BluetoothProfile.STATE_DISCONNECTED;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return BluetoothProfile.STATE_DISCONNECTED;
     }
 
@@ -235,9 +235,10 @@
     public BluetoothAvrcpPlayerSettings getPlayerSettings(BluetoothDevice device) {
         if (DBG) Log.d(TAG, "getPlayerSettings");
         BluetoothAvrcpPlayerSettings settings = null;
-        if (mService != null && isEnabled()) {
+        final IBluetoothAvrcpController service = mService;
+        if (service != null && isEnabled()) {
             try {
-                settings = mService.getPlayerSettings(device);
+                settings = service.getPlayerSettings(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Error talking to BT service in getMetadata() " + e);
                 return null;
@@ -252,15 +253,16 @@
      */
     public boolean setPlayerApplicationSetting(BluetoothAvrcpPlayerSettings plAppSetting) {
         if (DBG) Log.d(TAG, "setPlayerApplicationSetting");
-        if (mService != null && isEnabled()) {
+        final IBluetoothAvrcpController service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.setPlayerApplicationSetting(plAppSetting);
+                return service.setPlayerApplicationSetting(plAppSetting);
             } catch (RemoteException e) {
                 Log.e(TAG, "Error talking to BT service in setPlayerApplicationSetting() " + e);
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -269,24 +271,25 @@
      * possible keycode values: next_grp, previous_grp defined above
      */
     public void sendGroupNavigationCmd(BluetoothDevice device, int keyCode, int keyState) {
-        Log.d(TAG, "sendGroupNavigationCmd dev = " + device + " key " + keyCode + " State = " + keyState);
-        if (mService != null && isEnabled()) {
+        Log.d(TAG, "sendGroupNavigationCmd dev = " + device + " key " + keyCode + " State = "
+                + keyState);
+        final IBluetoothAvrcpController service = mService;
+        if (service != null && isEnabled()) {
             try {
-                mService.sendGroupNavigationCmd(device, keyCode, keyState);
+                service.sendGroupNavigationCmd(device, keyCode, keyState);
                 return;
             } catch (RemoteException e) {
                 Log.e(TAG, "Error talking to BT service in sendGroupNavigationCmd()", e);
                 return;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
     }
 
     private final ServiceConnection mConnection = new ServiceConnection() {
         public void onServiceConnected(ComponentName className, IBinder service) {
             if (DBG) Log.d(TAG, "Proxy object connected");
             mService = IBluetoothAvrcpController.Stub.asInterface(Binder.allowBlocking(service));
-
             if (mServiceListener != null) {
                 mServiceListener.onServiceConnected(BluetoothProfile.AVRCP_CONTROLLER,
                         BluetoothAvrcpController.this);
@@ -302,15 +305,11 @@
     };
 
     private boolean isEnabled() {
-       if (mAdapter.getState() == BluetoothAdapter.STATE_ON) return true;
-       return false;
+        return mAdapter.getState() == BluetoothAdapter.STATE_ON;
     }
 
-    private boolean isValidDevice(BluetoothDevice device) {
-       if (device == null) return false;
-
-       if (BluetoothAdapter.checkBluetoothAddress(device.getAddress())) return true;
-       return false;
+    private static boolean isValidDevice(BluetoothDevice device) {
+        return device != null && BluetoothAdapter.checkBluetoothAddress(device.getAddress());
     }
 
     private static void log(String msg) {
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index 071c4f6..9498f12 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -23,10 +23,9 @@
 import android.annotation.SystemApi;
 import android.content.Context;
 import android.os.Handler;
-import android.os.Looper;
 import android.os.Parcel;
-import android.os.Parcelable;
 import android.os.ParcelUuid;
+import android.os.Parcelable;
 import android.os.Process;
 import android.os.RemoteException;
 import android.util.Log;
@@ -683,7 +682,7 @@
      * getService() called.
      * TODO: Unify implementation of sService amongst BluetoothFoo API's
      */
-    private static IBluetooth sService;
+    private static volatile IBluetooth sService;
 
     private final String mAddress;
 
@@ -803,17 +802,20 @@
      */
     @RequiresPermission(Manifest.permission.BLUETOOTH)
     public String getName() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "BT not enabled. Cannot get Remote Device name");
             return null;
         }
         try {
-            String name = sService.getRemoteName(this);
+            String name = service.getRemoteName(this);
             if (name != null) {
                 return name.replaceAll("[\\t\\n\\r]+", " ");
             }
             return null;
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return null;
     }
 
@@ -826,13 +828,16 @@
      */
     @RequiresPermission(Manifest.permission.BLUETOOTH)
     public int getType() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "BT not enabled. Cannot get Remote Device type");
             return DEVICE_TYPE_UNKNOWN;
         }
         try {
-            return sService.getRemoteType(this);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            return service.getRemoteType(this);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return DEVICE_TYPE_UNKNOWN;
     }
 
@@ -844,13 +849,16 @@
      * @hide
      */
     public String getAlias() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "BT not enabled. Cannot get Remote Device Alias");
             return null;
         }
         try {
-            return sService.getRemoteAlias(this);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            return service.getRemoteAlias(this);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return null;
     }
 
@@ -865,13 +873,16 @@
      * @hide
      */
     public boolean setAlias(String alias) {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "BT not enabled. Cannot set Remote Device name");
             return false;
         }
         try {
-            return sService.setRemoteAlias(this, alias);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            return service.setRemoteAlias(this, alias);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return false;
     }
 
@@ -903,13 +914,16 @@
      */
     @RequiresPermission(Manifest.permission.BLUETOOTH)
     public int getBatteryLevel() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "Bluetooth disabled. Cannot get remote device battery level");
             return BATTERY_LEVEL_UNKNOWN;
         }
         try {
-            return sService.getBatteryLevel(this);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            return service.getBatteryLevel(this);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return BATTERY_LEVEL_UNKNOWN;
     }
 
@@ -925,16 +939,19 @@
      */
     @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
     public boolean createBond() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "BT not enabled. Cannot create bond to Remote Device");
             return false;
         }
         try {
-            Log.i(TAG, "createBond() for device " + getAddress() +
-                    " called by pid: " + Process.myPid() +
-                    " tid: " + Process.myTid());
-            return sService.createBond(this, TRANSPORT_AUTO);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            Log.i(TAG, "createBond() for device " + getAddress()
+                    + " called by pid: " + Process.myPid()
+                    + " tid: " + Process.myTid());
+            return service.createBond(this, TRANSPORT_AUTO);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return false;
     }
 
@@ -955,7 +972,8 @@
      * @hide
      */
     public boolean createBond(int transport) {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "BT not enabled. Cannot create bond to Remote Device");
             return false;
         }
@@ -964,11 +982,13 @@
             throw new IllegalArgumentException(transport + " is not a valid Bluetooth transport");
         }
         try {
-            Log.i(TAG, "createBond() for device " + getAddress() +
-                    " called by pid: " + Process.myPid() +
-                    " tid: " + Process.myTid());
-            return sService.createBond(this, transport);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            Log.i(TAG, "createBond() for device " + getAddress()
+                    + " called by pid: " + Process.myPid()
+                    + " tid: " + Process.myTid());
+            return service.createBond(this, transport);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return false;
     }
 
@@ -992,17 +1012,31 @@
      * @hide
      */
     public boolean createBondOutOfBand(int transport, OobData oobData) {
+        final IBluetooth service = sService;
+        if (service == null) {
+            Log.w(TAG, "BT not enabled, createBondOutOfBand failed");
+            return false;
+        }
         try {
-            return sService.createBondOutOfBand(this, transport, oobData);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            return service.createBondOutOfBand(this, transport, oobData);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return false;
     }
 
     /** @hide */
     public boolean isBondingInitiatedLocally() {
+        final IBluetooth service = sService;
+        if (service == null) {
+            Log.w(TAG, "BT not enabled, isBondingInitiatedLocally failed");
+            return false;
+        }
         try {
-            return sService.isBondingInitiatedLocally(this);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            return service.isBondingInitiatedLocally(this);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return false;
     }
 
@@ -1036,16 +1070,19 @@
      * @hide
      */
     public boolean cancelBondProcess() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "BT not enabled. Cannot cancel Remote Device bond");
             return false;
         }
         try {
-            Log.i(TAG, "cancelBondProcess() for device " + getAddress() +
-                    " called by pid: " + Process.myPid() +
-                    " tid: " + Process.myTid());
-            return sService.cancelBondProcess(this);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            Log.i(TAG, "cancelBondProcess() for device " + getAddress()
+                    + " called by pid: " + Process.myPid()
+                    + " tid: " + Process.myTid());
+            return service.cancelBondProcess(this);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return false;
     }
 
@@ -1060,16 +1097,19 @@
      * @hide
      */
     public boolean removeBond() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "BT not enabled. Cannot remove Remote Device bond");
             return false;
         }
         try {
-            Log.i(TAG, "removeBond() for device " + getAddress() +
-                    " called by pid: " + Process.myPid() +
-                    " tid: " + Process.myTid());
-            return sService.removeBond(this);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            Log.i(TAG, "removeBond() for device " + getAddress()
+                    + " called by pid: " + Process.myPid()
+                    + " tid: " + Process.myTid());
+            return service.removeBond(this);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return false;
     }
 
@@ -1084,18 +1124,15 @@
      */
     @RequiresPermission(Manifest.permission.BLUETOOTH)
     public int getBondState() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "BT not enabled. Cannot get bond state");
             return BOND_NONE;
         }
         try {
-            return sService.getBondState(this);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
-        catch (NullPointerException npe) {
-            // Handle case where bluetooth service proxy
-            // is already null.
-            Log.e(TAG, "NullPointerException for getBondState() of device ("+
-                getAddress()+")", npe);
+            return service.getBondState(this);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
         }
         return BOND_NONE;
     }
@@ -1109,12 +1146,13 @@
      */
     @SystemApi
     public boolean isConnected() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             // BT is not enabled, we cannot be connected.
             return false;
         }
         try {
-            return sService.getConnectionState(this) != CONNECTION_STATE_DISCONNECTED;
+            return service.getConnectionState(this) != CONNECTION_STATE_DISCONNECTED;
         } catch (RemoteException e) {
             Log.e(TAG, "", e);
             return false;
@@ -1131,12 +1169,13 @@
      */
     @SystemApi
     public boolean isEncrypted() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             // BT is not enabled, we cannot be connected.
             return false;
         }
         try {
-            return sService.getConnectionState(this) > CONNECTION_STATE_CONNECTED;
+            return service.getConnectionState(this) > CONNECTION_STATE_CONNECTED;
         } catch (RemoteException e) {
             Log.e(TAG, "", e);
             return false;
@@ -1150,12 +1189,13 @@
      */
     @RequiresPermission(Manifest.permission.BLUETOOTH)
     public BluetoothClass getBluetoothClass() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "BT not enabled. Cannot get Bluetooth Class");
             return null;
         }
         try {
-            int classInt = sService.getRemoteClass(this);
+            int classInt = service.getRemoteClass(this);
             if (classInt == BluetoothClass.ERROR) return null;
             return new BluetoothClass(classInt);
         } catch (RemoteException e) {Log.e(TAG, "", e);}
@@ -1174,75 +1214,82 @@
      *         or null on error
      */
     @RequiresPermission(Manifest.permission.BLUETOOTH)
-     public ParcelUuid[] getUuids() {
-         if (sService == null || isBluetoothEnabled() == false) {
+    public ParcelUuid[] getUuids() {
+        final IBluetooth service = sService;
+        if (service == null || !isBluetoothEnabled()) {
             Log.e(TAG, "BT not enabled. Cannot get remote device Uuids");
              return null;
          }
         try {
-            return sService.getRemoteUuids(this);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            return service.getRemoteUuids(this);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return null;
     }
 
-     /**
-      * Perform a service discovery on the remote device to get the UUIDs supported.
-      *
-      * <p>This API is asynchronous and {@link #ACTION_UUID} intent is sent,
-      * with the UUIDs supported by the remote end. If there is an error
-      * in getting the SDP records or if the process takes a long time,
-      * {@link #ACTION_UUID} intent is sent with the UUIDs that is currently
-      * present in the cache. Clients should use the {@link #getUuids} to get UUIDs
-      * if service discovery is not to be performed.
-      *
-      * @return False if the sanity check fails, True if the process
-      *               of initiating an ACL connection to the remote device
-      *               was started.
-      */
-     @RequiresPermission(Manifest.permission.BLUETOOTH)
-     public boolean fetchUuidsWithSdp() {
-        IBluetooth service = sService;
-        if (service == null || isBluetoothEnabled() == false) {
+    /**
+     * Perform a service discovery on the remote device to get the UUIDs supported.
+     *
+     * <p>This API is asynchronous and {@link #ACTION_UUID} intent is sent,
+     * with the UUIDs supported by the remote end. If there is an error
+     * in getting the SDP records or if the process takes a long time,
+     * {@link #ACTION_UUID} intent is sent with the UUIDs that is currently
+     * present in the cache. Clients should use the {@link #getUuids} to get UUIDs
+     * if service discovery is not to be performed.
+     *
+     * @return False if the sanity check fails, True if the process of initiating an ACL connection
+     * to the remote device was started.
+     */
+    @RequiresPermission(Manifest.permission.BLUETOOTH)
+    public boolean fetchUuidsWithSdp() {
+        final IBluetooth service = sService;
+        if (service == null || !isBluetoothEnabled()) {
             Log.e(TAG, "BT not enabled. Cannot fetchUuidsWithSdp");
             return false;
         }
         try {
             return service.fetchRemoteUuids(this);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
-            return false;
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
+        return false;
     }
 
-     /**
-      * Perform a service discovery on the remote device to get the SDP records associated
-      * with the specified UUID.
-      *
-      * <p>This API is asynchronous and {@link #ACTION_SDP_RECORD} intent is sent,
-      * with the SDP records found on the remote end. If there is an error
-      * in getting the SDP records or if the process takes a long time,
-      * {@link #ACTION_SDP_RECORD} intent is sent with an status value in
-      * {@link #EXTRA_SDP_SEARCH_STATUS} different from 0.
-      * Detailed status error codes can be found by members of the Bluetooth package in
-      * the AbstractionLayer class.
-      * <p>Requires {@link android.Manifest.permission#BLUETOOTH}.
-      * The SDP record data will be stored in the intent as {@link #EXTRA_SDP_RECORD}.
-      * The object type will match one of the SdpXxxRecord types, depending on the UUID searched
-      * for.
-      *
-      * @return False if the sanity check fails, True if the process
-      *               of initiating an ACL connection to the remote device
-      *               was started.
-      */
-     /** @hide */
-     public boolean sdpSearch(ParcelUuid uuid) {
-         if (sService == null) {
-             Log.e(TAG, "BT not enabled. Cannot query remote device sdp records");
-             return false;
-         }
-         try {
-             return sService.sdpSearch(this,uuid);
-         } catch (RemoteException e) {Log.e(TAG, "", e);}
-         return false;
-     }
+    /**
+     * Perform a service discovery on the remote device to get the SDP records associated
+     * with the specified UUID.
+     *
+     * <p>This API is asynchronous and {@link #ACTION_SDP_RECORD} intent is sent,
+     * with the SDP records found on the remote end. If there is an error
+     * in getting the SDP records or if the process takes a long time,
+     * {@link #ACTION_SDP_RECORD} intent is sent with an status value in
+     * {@link #EXTRA_SDP_SEARCH_STATUS} different from 0.
+     * Detailed status error codes can be found by members of the Bluetooth package in
+     * the AbstractionLayer class.
+     * <p>Requires {@link android.Manifest.permission#BLUETOOTH}.
+     * The SDP record data will be stored in the intent as {@link #EXTRA_SDP_RECORD}.
+     * The object type will match one of the SdpXxxRecord types, depending on the UUID searched
+     * for.
+     *
+     * @return False if the sanity check fails, True if the process
+     *               of initiating an ACL connection to the remote device
+     *               was started.
+     */
+    /** @hide */
+    public boolean sdpSearch(ParcelUuid uuid) {
+        final IBluetooth service = sService;
+        if (service == null) {
+            Log.e(TAG, "BT not enabled. Cannot query remote device sdp records");
+            return false;
+        }
+        try {
+            return service.sdpSearch(this, uuid);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
+        return false;
+    }
 
     /**
      * Set the pin during pairing when the pairing method is {@link #PAIRING_VARIANT_PIN}
@@ -1252,13 +1299,16 @@
      *         false for error
      */
     public boolean setPin(byte[] pin) {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "BT not enabled. Cannot set Remote Device pin");
             return false;
         }
         try {
-            return sService.setPin(this, true, pin.length, pin);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            return service.setPin(this, true, pin.length, pin);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return false;
     }
 
@@ -1280,13 +1330,16 @@
      */
     @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
     public boolean setPairingConfirmation(boolean confirm) {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "BT not enabled. Cannot set pairing confirmation");
             return false;
         }
         try {
-            return sService.setPairingConfirmation(this, confirm);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            return service.setPairingConfirmation(this, confirm);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return false;
     }
 
@@ -1302,13 +1355,16 @@
 
     /** @hide */
     public boolean cancelPairingUserInput() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             Log.e(TAG, "BT not enabled. Cannot create pairing user input");
             return false;
         }
         try {
-            return sService.cancelBondProcess(this);
-        } catch (RemoteException e) {Log.e(TAG, "", e);}
+            return service.cancelBondProcess(this);
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+        }
         return false;
     }
 
@@ -1338,11 +1394,12 @@
      * @hide
      */
     public int getPhonebookAccessPermission() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             return ACCESS_UNKNOWN;
         }
         try {
-            return sService.getPhonebookAccessPermission(this);
+            return service.getPhonebookAccessPermission(this);
         } catch (RemoteException e) {
             Log.e(TAG, "", e);
         }
@@ -1358,11 +1415,12 @@
      * @hide
      */
     public boolean setPhonebookAccessPermission(int value) {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             return false;
         }
         try {
-            return sService.setPhonebookAccessPermission(this, value);
+            return service.setPhonebookAccessPermission(this, value);
         } catch (RemoteException e) {
             Log.e(TAG, "", e);
         }
@@ -1376,11 +1434,12 @@
      * @hide
      */
     public int getMessageAccessPermission() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             return ACCESS_UNKNOWN;
         }
         try {
-            return sService.getMessageAccessPermission(this);
+            return service.getMessageAccessPermission(this);
         } catch (RemoteException e) {
             Log.e(TAG, "", e);
         }
@@ -1396,11 +1455,12 @@
      * @hide
      */
     public boolean setMessageAccessPermission(int value) {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             return false;
         }
         try {
-            return sService.setMessageAccessPermission(this, value);
+            return service.setMessageAccessPermission(this, value);
         } catch (RemoteException e) {
             Log.e(TAG, "", e);
         }
@@ -1414,11 +1474,12 @@
      * @hide
      */
     public int getSimAccessPermission() {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             return ACCESS_UNKNOWN;
         }
         try {
-            return sService.getSimAccessPermission(this);
+            return service.getSimAccessPermission(this);
         } catch (RemoteException e) {
             Log.e(TAG, "", e);
         }
@@ -1434,11 +1495,12 @@
      * @hide
      */
     public boolean setSimAccessPermission(int value) {
-        if (sService == null) {
+        final IBluetooth service = sService;
+        if (service == null) {
             return false;
         }
         try {
-            return sService.setSimAccessPermission(this, value);
+            return service.setSimAccessPermission(this, value);
         } catch (RemoteException e) {
             Log.e(TAG, "", e);
         }
diff --git a/core/java/android/bluetooth/BluetoothGatt.java b/core/java/android/bluetooth/BluetoothGatt.java
index 678159b..b596dd6 100644
--- a/core/java/android/bluetooth/BluetoothGatt.java
+++ b/core/java/android/bluetooth/BluetoothGatt.java
@@ -42,7 +42,7 @@
     private static final boolean VDBG = false;
 
     private IBluetoothGatt mService;
-    private BluetoothGattCallback mCallback;
+    private volatile BluetoothGattCallback mCallback;
     private Handler mHandler;
     private int mClientIf;
     private BluetoothDevice mDevice;
@@ -159,8 +159,9 @@
                     runOrQueueCallback(new Runnable() {
                         @Override
                         public void run() {
-                            if (mCallback != null) {
-                                mCallback.onConnectionStateChange(BluetoothGatt.this, GATT_FAILURE,
+                            final BluetoothGattCallback callback = mCallback;
+                            if (callback != null) {
+                                callback.onConnectionStateChange(BluetoothGatt.this, GATT_FAILURE,
                                                   BluetoothProfile.STATE_DISCONNECTED);
                             }
                         }
@@ -194,8 +195,9 @@
                 runOrQueueCallback(new Runnable() {
                     @Override
                     public void run() {
-                        if (mCallback != null) {
-                            mCallback.onPhyUpdate(BluetoothGatt.this, txPhy, rxPhy, status);
+                        final BluetoothGattCallback callback = mCallback;
+                        if (callback != null) {
+                            callback.onPhyUpdate(BluetoothGatt.this, txPhy, rxPhy, status);
                         }
                     }
                 });
@@ -216,8 +218,9 @@
                 runOrQueueCallback(new Runnable() {
                     @Override
                     public void run() {
-                        if (mCallback != null) {
-                            mCallback.onPhyRead(BluetoothGatt.this, txPhy, rxPhy, status);
+                        final BluetoothGattCallback callback = mCallback;
+                        if (callback != null) {
+                            callback.onPhyRead(BluetoothGatt.this, txPhy, rxPhy, status);
                         }
                     }
                 });
@@ -241,8 +244,9 @@
                 runOrQueueCallback(new Runnable() {
                     @Override
                     public void run() {
-                        if (mCallback != null) {
-                            mCallback.onConnectionStateChange(BluetoothGatt.this, status,
+                        final BluetoothGattCallback callback = mCallback;
+                        if (callback != null) {
+                            callback.onConnectionStateChange(BluetoothGatt.this, status,
                                                               profileState);
                         }
                     }
@@ -303,8 +307,9 @@
                 runOrQueueCallback(new Runnable() {
                     @Override
                     public void run() {
-                        if (mCallback != null) {
-                            mCallback.onServicesDiscovered(BluetoothGatt.this, status);
+                        final BluetoothGattCallback callback = mCallback;
+                        if (callback != null) {
+                            callback.onServicesDiscovered(BluetoothGatt.this, status);
                         }
                     }
                 });
@@ -350,13 +355,13 @@
                     return;
                 }
 
-                if (status == 0) characteristic.setValue(value);
-
                 runOrQueueCallback(new Runnable() {
                     @Override
                     public void run() {
-                        if (mCallback != null) {
-                            mCallback.onCharacteristicRead(BluetoothGatt.this, characteristic,
+                        final BluetoothGattCallback callback = mCallback;
+                        if (callback != null) {
+                            if (status == 0) characteristic.setValue(value);
+                            callback.onCharacteristicRead(BluetoothGatt.this, characteristic,
                                                            status);
                         }
                     }
@@ -404,8 +409,9 @@
                 runOrQueueCallback(new Runnable() {
                     @Override
                     public void run() {
-                        if (mCallback != null) {
-                            mCallback.onCharacteristicWrite(BluetoothGatt.this, characteristic,
+                        final BluetoothGattCallback callback = mCallback;
+                        if (callback != null) {
+                            callback.onCharacteristicWrite(BluetoothGatt.this, characteristic,
                                                             status);
                         }
                     }
@@ -428,13 +434,13 @@
                 BluetoothGattCharacteristic characteristic = getCharacteristicById(mDevice, handle);
                 if (characteristic == null) return;
 
-                characteristic.setValue(value);
-
                 runOrQueueCallback(new Runnable() {
                     @Override
                     public void run() {
-                        if (mCallback != null) {
-                            mCallback.onCharacteristicChanged(BluetoothGatt.this, characteristic);
+                        final BluetoothGattCallback callback = mCallback;
+                        if (callback != null) {
+                            characteristic.setValue(value);
+                            callback.onCharacteristicChanged(BluetoothGatt.this, characteristic);
                         }
                     }
                 });
@@ -459,7 +465,6 @@
                 BluetoothGattDescriptor descriptor = getDescriptorById(mDevice, handle);
                 if (descriptor == null) return;
 
-                if (status == 0) descriptor.setValue(value);
 
                 if ((status == GATT_INSUFFICIENT_AUTHENTICATION
                   || status == GATT_INSUFFICIENT_ENCRYPTION)
@@ -480,8 +485,10 @@
                 runOrQueueCallback(new Runnable() {
                     @Override
                     public void run() {
-                        if (mCallback != null) {
-                            mCallback.onDescriptorRead(BluetoothGatt.this, descriptor, status);
+                        final BluetoothGattCallback callback = mCallback;
+                        if (callback != null) {
+                            if (status == 0) descriptor.setValue(value);
+                            callback.onDescriptorRead(BluetoothGatt.this, descriptor, status);
                         }
                     }
                 });
@@ -526,8 +533,9 @@
                 runOrQueueCallback(new Runnable() {
                     @Override
                     public void run() {
-                        if (mCallback != null) {
-                            mCallback.onDescriptorWrite(BluetoothGatt.this, descriptor, status);
+                        final BluetoothGattCallback callback = mCallback;
+                        if (callback != null) {
+                            callback.onDescriptorWrite(BluetoothGatt.this, descriptor, status);
                         }
                     }
                 });
@@ -552,8 +560,9 @@
                 runOrQueueCallback(new Runnable() {
                     @Override
                     public void run() {
-                        if (mCallback != null) {
-                           mCallback.onReliableWriteCompleted(BluetoothGatt.this, status);
+                        final BluetoothGattCallback callback = mCallback;
+                        if (callback != null) {
+                            callback.onReliableWriteCompleted(BluetoothGatt.this, status);
                         }
                     }
                 });
@@ -573,8 +582,9 @@
                 runOrQueueCallback(new Runnable() {
                     @Override
                     public void run() {
-                        if (mCallback != null) {
-                            mCallback.onReadRemoteRssi(BluetoothGatt.this, rssi, status);
+                        final BluetoothGattCallback callback = mCallback;
+                        if (callback != null) {
+                            callback.onReadRemoteRssi(BluetoothGatt.this, rssi, status);
                         }
                     }
                 });
@@ -595,8 +605,9 @@
                 runOrQueueCallback(new Runnable() {
                     @Override
                     public void run() {
-                        if (mCallback != null) {
-                            mCallback.onMtuChanged(BluetoothGatt.this, mtu, status);
+                        final BluetoothGattCallback callback = mCallback;
+                        if (callback != null) {
+                            callback.onMtuChanged(BluetoothGatt.this, mtu, status);
                         }
                     }
                 });
@@ -619,8 +630,9 @@
                 runOrQueueCallback(new Runnable() {
                     @Override
                     public void run() {
-                        if (mCallback != null) {
-                            mCallback.onConnectionUpdated(BluetoothGatt.this, interval, latency,
+                        final BluetoothGattCallback callback = mCallback;
+                        if (callback != null) {
+                            callback.onConnectionUpdated(BluetoothGatt.this, interval, latency,
                                                           timeout, status);
                         }
                     }
diff --git a/core/java/android/bluetooth/BluetoothGattCharacteristic.java b/core/java/android/bluetooth/BluetoothGattCharacteristic.java
index 1cc2270..6609907 100644
--- a/core/java/android/bluetooth/BluetoothGattCharacteristic.java
+++ b/core/java/android/bluetooth/BluetoothGattCharacteristic.java
@@ -119,7 +119,7 @@
     public static final int WRITE_TYPE_DEFAULT = 0x02;
 
     /**
-     * Wrtite characteristic without requiring a response by the remote device
+     * Write characteristic without requiring a response by the remote device
      */
     public static final int WRITE_TYPE_NO_RESPONSE = 0x01;
 
diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java
index c84643f..500cba3 100644
--- a/core/java/android/bluetooth/BluetoothHeadset.java
+++ b/core/java/android/bluetooth/BluetoothHeadset.java
@@ -298,7 +298,7 @@
 
     private Context mContext;
     private ServiceListener mServiceListener;
-    private IBluetoothHeadset mService;
+    private volatile IBluetoothHeadset mService;
     private BluetoothAdapter mAdapter;
 
     final private IBluetoothStateChangeCallback mBluetoothStateChangeCallback =
@@ -411,16 +411,16 @@
      */
     public boolean connect(BluetoothDevice device) {
         if (DBG) log("connect(" + device + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.connect(device);
+                return service.connect(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -452,16 +452,16 @@
      */
     public boolean disconnect(BluetoothDevice device) {
         if (DBG) log("disconnect(" + device + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.disconnect(device);
+                return service.disconnect(device);
             } catch (RemoteException e) {
               Log.e(TAG, Log.getStackTraceString(new Throwable()));
               return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -470,15 +470,16 @@
      */
     public List<BluetoothDevice> getConnectedDevices() {
         if (VDBG) log("getConnectedDevices()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getConnectedDevices();
+                return service.getConnectedDevices();
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -487,15 +488,16 @@
      */
     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
         if (VDBG) log("getDevicesMatchingStates()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getDevicesMatchingConnectionStates(states);
+                return service.getDevicesMatchingConnectionStates(states);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -504,16 +506,16 @@
      */
     public int getConnectionState(BluetoothDevice device) {
         if (VDBG) log("getConnectionState(" + device + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getConnectionState(device);
+                return service.getConnectionState(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return BluetoothProfile.STATE_DISCONNECTED;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return BluetoothProfile.STATE_DISCONNECTED;
     }
 
@@ -534,20 +536,20 @@
      */
     public boolean setPriority(BluetoothDevice device, int priority) {
         if (DBG) log("setPriority(" + device + ", " + priority + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
-            if (priority != BluetoothProfile.PRIORITY_OFF &&
-                priority != BluetoothProfile.PRIORITY_ON) {
-              return false;
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
+            if (priority != BluetoothProfile.PRIORITY_OFF
+                    && priority != BluetoothProfile.PRIORITY_ON) {
+                return false;
             }
             try {
-                return mService.setPriority(device, priority);
+                return service.setPriority(device, priority);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -566,16 +568,16 @@
      */
     public int getPriority(BluetoothDevice device) {
         if (VDBG) log("getPriority(" + device + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getPriority(device);
+                return service.getPriority(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return PRIORITY_OFF;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return PRIORITY_OFF;
     }
 
@@ -602,15 +604,15 @@
      */
     public boolean startVoiceRecognition(BluetoothDevice device) {
         if (DBG) log("startVoiceRecognition()");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.startVoiceRecognition(device);
+                return service.startVoiceRecognition(device);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -626,15 +628,15 @@
      */
     public boolean stopVoiceRecognition(BluetoothDevice device) {
         if (DBG) log("stopVoiceRecognition()");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.stopVoiceRecognition(device);
+                return service.stopVoiceRecognition(device);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -649,15 +651,15 @@
      */
     public boolean isAudioConnected(BluetoothDevice device) {
         if (VDBG) log("isAudioConnected()");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-              return mService.isAudioConnected(device);
+                return service.isAudioConnected(device);
             } catch (RemoteException e) {
               Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -677,15 +679,15 @@
      */
     public int getBatteryUsageHint(BluetoothDevice device) {
         if (VDBG) log("getBatteryUsageHint()");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getBatteryUsageHint(device);
+                return service.getBatteryUsageHint(device);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return -1;
     }
 
@@ -708,10 +710,13 @@
      */
     public boolean acceptIncomingConnect(BluetoothDevice device) {
         if (DBG) log("acceptIncomingConnect");
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.acceptIncomingConnect(device);
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.acceptIncomingConnect(device);
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
@@ -725,10 +730,13 @@
      */
     public boolean rejectIncomingConnect(BluetoothDevice device) {
         if (DBG) log("rejectIncomingConnect");
-        if (mService != null) {
+        final IBluetoothHeadset service = mService;
+        if (service != null) {
             try {
-                return mService.rejectIncomingConnect(device);
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.rejectIncomingConnect(device);
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
@@ -744,10 +752,13 @@
      */
     public int getAudioState(BluetoothDevice device) {
         if (VDBG) log("getAudioState");
-        if (mService != null && !isDisabled()) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && !isDisabled()) {
             try {
-                return mService.getAudioState(device);
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.getAudioState(device);
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
@@ -768,10 +779,13 @@
      */
     public void setAudioRouteAllowed(boolean allowed) {
         if (VDBG) log("setAudioRouteAllowed");
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-                mService.setAudioRouteAllowed(allowed);
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                service.setAudioRouteAllowed(allowed);
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
@@ -786,10 +800,13 @@
      */
     public boolean getAudioRouteAllowed() {
         if (VDBG) log("getAudioRouteAllowed");
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getAudioRouteAllowed();
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.getAudioRouteAllowed();
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
@@ -807,9 +824,10 @@
      */
     public void setForceScoAudio(boolean forced) {
         if (VDBG) log("setForceScoAudio " + String.valueOf(forced));
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-                mService.setForceScoAudio(forced);
+                service.setForceScoAudio(forced);
             } catch (RemoteException e) {
               Log.e(TAG, e.toString());
             }
@@ -830,14 +848,15 @@
      */
     public boolean isAudioOn() {
         if (VDBG) log("isAudioOn()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-              return mService.isAudioOn();
+                return service.isAudioOn();
             } catch (RemoteException e) {
               Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
 
     }
@@ -852,9 +871,10 @@
      * @hide
      */
     public boolean connectAudio() {
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.connectAudio();
+                return service.connectAudio();
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -875,9 +895,10 @@
      * @hide
      */
     public boolean disconnectAudio() {
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.disconnectAudio();
+                return service.disconnectAudio();
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -901,9 +922,10 @@
      */
     public boolean startScoUsingVirtualVoiceCall(BluetoothDevice device) {
         if (DBG) log("startScoUsingVirtualVoiceCall()");
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.startScoUsingVirtualVoiceCall(device);
+                return service.startScoUsingVirtualVoiceCall(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -924,9 +946,10 @@
      */
     public boolean stopScoUsingVirtualVoiceCall(BluetoothDevice device) {
         if (DBG) log("stopScoUsingVirtualVoiceCall()");
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.stopScoUsingVirtualVoiceCall(device);
+                return service.stopScoUsingVirtualVoiceCall(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -946,10 +969,11 @@
      * @hide
      */
     public void phoneStateChanged(int numActive, int numHeld, int callState, String number,
-                                  int type) {
-        if (mService != null && isEnabled()) {
+            int type) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-                mService.phoneStateChanged(numActive, numHeld, callState, number, type);
+                service.phoneStateChanged(numActive, numHeld, callState, number, type);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -965,10 +989,11 @@
      * @hide
      */
     public void clccResponse(int index, int direction, int status, int mode, boolean mpty,
-                             String number, int type) {
-        if (mService != null && isEnabled()) {
+            String number, int type) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-                mService.clccResponse(index, direction, status, mode, mpty, number, type);
+                service.clccResponse(index, direction, status, mode, mpty, number, type);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -1004,15 +1029,15 @@
         if (command == null) {
             throw new IllegalArgumentException("command is null");
         }
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.sendVendorSpecificResultCode(device, command, arg);
+                return service.sendVendorSpecificResultCode(device, command, arg);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) {
+        if (service == null) {
             Log.w(TAG, "Proxy not attached to service");
         }
         return false;
@@ -1027,9 +1052,10 @@
      * @hide
      */
     public boolean enableWBS() {
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.enableWBS();
+                return service.enableWBS();
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -1049,9 +1075,10 @@
      * @hide
      */
     public boolean disableWBS() {
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.disableWBS();
+                return service.disableWBS();
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -1078,16 +1105,17 @@
      * Send Headset the BIND response from AG to report change in the status of the
      * HF indicators to the headset
      *
-     * @param ind_id Assigned Number of the indicator (defined by SIG)
-     * @param ind_status
+     * @param indId Assigned Number of the indicator (defined by SIG)
+     * @param indStatus
      * possible values- false-Indicator is disabled, no value changes shall be sent for this indicator
      *                  true-Indicator is enabled, value changes may be sent for this indicator
      * @hide
      */
-    public void bindResponse(int ind_id, boolean ind_status) {
-        if (mService != null && isEnabled()) {
+    public void bindResponse(int indId, boolean indStatus) {
+        final IBluetoothHeadset service = mService;
+        if (service != null && isEnabled()) {
             try {
-                mService.bindResponse(ind_id, ind_status);
+                service.bindResponse(indId, indStatus);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -1116,20 +1144,15 @@
     };
 
     private boolean isEnabled() {
-       if (mAdapter.getState() == BluetoothAdapter.STATE_ON) return true;
-       return false;
+        return mAdapter.getState() == BluetoothAdapter.STATE_ON;
     }
 
     private boolean isDisabled() {
-       if (mAdapter.getState() == BluetoothAdapter.STATE_OFF) return true;
-       return false;
+        return mAdapter.getState() == BluetoothAdapter.STATE_OFF;
     }
 
-    private boolean isValidDevice(BluetoothDevice device) {
-       if (device == null) return false;
-
-       if (BluetoothAdapter.checkBluetoothAddress(device.getAddress())) return true;
-       return false;
+    private static boolean isValidDevice(BluetoothDevice device) {
+        return device != null && BluetoothAdapter.checkBluetoothAddress(device.getAddress());
     }
 
     private static void log(String msg) {
diff --git a/core/java/android/bluetooth/BluetoothHeadsetClient.java b/core/java/android/bluetooth/BluetoothHeadsetClient.java
index 544b3b95..73a16de 100644
--- a/core/java/android/bluetooth/BluetoothHeadsetClient.java
+++ b/core/java/android/bluetooth/BluetoothHeadsetClient.java
@@ -28,7 +28,6 @@
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.UUID;
 
 /**
  * Public API to control Hands Free Profile (HFP role only).
@@ -77,8 +76,8 @@
      * Intent sent whenever audio state changes.
      *
      * <p>It includes two mandatory extras:
-     * {@link BluetoothProfile.EXTRA_STATE},
-     * {@link BluetoothProfile.EXTRA_PREVIOUS_STATE},
+     * {@link BluetoothProfile#EXTRA_STATE},
+     * {@link BluetoothProfile#EXTRA_PREVIOUS_STATE},
      * with possible values:
      * {@link #STATE_AUDIO_CONNECTING},
      * {@link #STATE_AUDIO_CONNECTED},
@@ -368,7 +367,7 @@
 
     private Context mContext;
     private ServiceListener mServiceListener;
-    private IBluetoothHeadsetClient mService;
+    private volatile IBluetoothHeadsetClient mService;
     private BluetoothAdapter mAdapter;
 
     final private IBluetoothStateChangeCallback mBluetoothStateChangeCallback =
@@ -480,16 +479,16 @@
      */
     public boolean connect(BluetoothDevice device) {
         if (DBG) log("connect(" + device + ")");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.connect(device);
+                return service.connect(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -504,16 +503,16 @@
      */
     public boolean disconnect(BluetoothDevice device) {
         if (DBG) log("disconnect(" + device + ")");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.disconnect(device);
+                return service.disconnect(device);
             } catch (RemoteException e) {
               Log.e(TAG, Log.getStackTraceString(new Throwable()));
               return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -525,15 +524,16 @@
     @Override
     public List<BluetoothDevice> getConnectedDevices() {
         if (VDBG) log("getConnectedDevices()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getConnectedDevices();
+                return service.getConnectedDevices();
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -548,15 +548,16 @@
     @Override
     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
         if (VDBG) log("getDevicesMatchingStates()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getDevicesMatchingConnectionStates(states);
+                return service.getDevicesMatchingConnectionStates(states);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -569,16 +570,16 @@
     @Override
     public int getConnectionState(BluetoothDevice device) {
         if (VDBG) log("getConnectionState(" + device + ")");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getConnectionState(device);
+                return service.getConnectionState(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return BluetoothProfile.STATE_DISCONNECTED;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return BluetoothProfile.STATE_DISCONNECTED;
     }
 
@@ -589,20 +590,20 @@
      */
     public boolean setPriority(BluetoothDevice device, int priority) {
         if (DBG) log("setPriority(" + device + ", " + priority + ")");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
-            if (priority != BluetoothProfile.PRIORITY_OFF &&
-                    priority != BluetoothProfile.PRIORITY_ON) {
-              return false;
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
+            if (priority != BluetoothProfile.PRIORITY_OFF
+                    && priority != BluetoothProfile.PRIORITY_ON) {
+                return false;
             }
             try {
-                return mService.setPriority(device, priority);
+                return service.setPriority(device, priority);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -611,16 +612,16 @@
      */
     public int getPriority(BluetoothDevice device) {
         if (VDBG) log("getPriority(" + device + ")");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getPriority(device);
+                return service.getPriority(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return PRIORITY_OFF;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return PRIORITY_OFF;
     }
 
@@ -639,15 +640,15 @@
      */
     public boolean startVoiceRecognition(BluetoothDevice device) {
         if (DBG) log("startVoiceRecognition()");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.startVoiceRecognition(device);
+                return service.startVoiceRecognition(device);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -666,15 +667,15 @@
      */
     public boolean stopVoiceRecognition(BluetoothDevice device) {
         if (DBG) log("stopVoiceRecognition()");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.stopVoiceRecognition(device);
+                return service.stopVoiceRecognition(device);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -686,15 +687,15 @@
      */
     public List<BluetoothHeadsetClientCall> getCurrentCalls(BluetoothDevice device) {
         if (DBG) log("getCurrentCalls()");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getCurrentCalls(device);
+                return service.getCurrentCalls(device);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return null;
     }
 
@@ -707,15 +708,15 @@
      */
     public Bundle getCurrentAgEvents(BluetoothDevice device) {
         if (DBG) log("getCurrentCalls()");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getCurrentAgEvents(device);
+                return service.getCurrentAgEvents(device);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return null;
     }
 
@@ -733,15 +734,15 @@
      */
     public boolean acceptCall(BluetoothDevice device, int flag) {
         if (DBG) log("acceptCall()");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.acceptCall(device, flag);
+                return service.acceptCall(device, flag);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -756,15 +757,15 @@
      */
     public boolean holdCall(BluetoothDevice device) {
         if (DBG) log("holdCall()");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.holdCall(device);
+                return service.holdCall(device);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -783,15 +784,15 @@
      */
     public boolean rejectCall(BluetoothDevice device) {
         if (DBG) log("rejectCall()");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.rejectCall(device);
+                return service.rejectCall(device);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -802,7 +803,7 @@
      *
      * @param device    remote device
      * @param call      Handle of call obtained in {@link dial()} or obtained via
-     *                  {@link ACTION_CALL_CHANGED}. {@code call} may be null in which
+     *                  {@link #ACTION_CALL_CHANGED}. {@code call} may be null in which
      *                  case we will hangup all active calls.
      * @return          <code>true</code> if command has been issued successfully;
      *                   <code>false</code> otherwise;
@@ -815,15 +816,15 @@
      */
     public boolean terminateCall(BluetoothDevice device, BluetoothHeadsetClientCall call) {
         if (DBG) log("terminateCall()");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.terminateCall(device, call);
+                return service.terminateCall(device, call);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -845,15 +846,15 @@
      */
     public boolean enterPrivateMode(BluetoothDevice device, int index) {
         if (DBG) log("enterPrivateMode()");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.enterPrivateMode(device, index);
+                return service.enterPrivateMode(device, index);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -874,15 +875,15 @@
      */
     public boolean explicitCallTransfer(BluetoothDevice device) {
         if (DBG) log("explicitCallTransfer()");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.explicitCallTransfer(device);
+                return service.explicitCallTransfer(device);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -900,15 +901,15 @@
      */
     public BluetoothHeadsetClientCall dial(BluetoothDevice device, String number) {
         if (DBG) log("dial()");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.dial(device, number);
+                return service.dial(device, number);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return null;
     }
 
@@ -925,15 +926,15 @@
      */
     public boolean sendDTMF(BluetoothDevice device, byte code) {
         if (DBG) log("sendDTMF()");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.sendDTMF(device, code);
+                return service.sendDTMF(device, code);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -952,15 +953,15 @@
      */
     public boolean getLastVoiceTagNumber(BluetoothDevice device) {
         if (DBG) log("getLastVoiceTagNumber()");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getLastVoiceTagNumber(device);
+                return service.getLastVoiceTagNumber(device);
             } catch (RemoteException e) {
                 Log.e(TAG,  Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -971,10 +972,13 @@
      */
     public int getAudioState(BluetoothDevice device) {
         if (VDBG) log("getAudioState");
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getAudioState(device);
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.getAudioState(device);
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
@@ -991,10 +995,13 @@
      */
     public void setAudioRouteAllowed(BluetoothDevice device, boolean allowed) {
         if (VDBG) log("setAudioRouteAllowed");
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled()) {
             try {
-                mService.setAudioRouteAllowed(device, allowed);
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                service.setAudioRouteAllowed(device, allowed);
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
@@ -1009,10 +1016,13 @@
      */
     public boolean getAudioRouteAllowed(BluetoothDevice device) {
         if (VDBG) log("getAudioRouteAllowed");
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getAudioRouteAllowed(device);
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.getAudioRouteAllowed(device);
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
@@ -1032,9 +1042,10 @@
      *                   intent;
      */
     public boolean connectAudio(BluetoothDevice device) {
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.connectAudio(device);
+                return service.connectAudio(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -1057,9 +1068,10 @@
      *                   intent;
      */
     public boolean disconnectAudio(BluetoothDevice device) {
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.disconnectAudio(device);
+                return service.disconnectAudio(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -1078,9 +1090,10 @@
      *                  AG not connected
      */
     public Bundle getCurrentAgFeatures(BluetoothDevice device) {
-        if (mService != null && isEnabled()) {
+        final IBluetoothHeadsetClient service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getCurrentAgFeatures(device);
+                return service.getCurrentAgFeatures(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -1092,7 +1105,7 @@
     }
 
 
-    private ServiceConnection mConnection = new ServiceConnection() {
+    private final ServiceConnection mConnection = new ServiceConnection() {
         @Override
         public void onServiceConnected(ComponentName className, IBinder service) {
             if (DBG) Log.d(TAG, "Proxy object connected");
@@ -1114,15 +1127,11 @@
     };
 
     private boolean isEnabled() {
-       if (mAdapter.getState() == BluetoothAdapter.STATE_ON) return true;
-       return false;
+        return mAdapter.getState() == BluetoothAdapter.STATE_ON;
     }
 
-    private boolean isValidDevice(BluetoothDevice device) {
-       if (device == null) return false;
-
-       if (BluetoothAdapter.checkBluetoothAddress(device.getAddress())) return true;
-       return false;
+    private static boolean isValidDevice(BluetoothDevice device) {
+        return device != null && BluetoothAdapter.checkBluetoothAddress(device.getAddress());
     }
 
     private static void log(String msg) {
diff --git a/core/java/android/bluetooth/BluetoothHealth.java b/core/java/android/bluetooth/BluetoothHealth.java
index 8d77888..07be63f 100644
--- a/core/java/android/bluetooth/BluetoothHealth.java
+++ b/core/java/android/bluetooth/BluetoothHealth.java
@@ -178,9 +178,10 @@
         BluetoothHealthAppConfiguration config =
                 new BluetoothHealthAppConfiguration(name, dataType, role, channelType);
 
-        if (mService != null) {
+        final IBluetoothHealth service = mService;
+        if (service != null) {
             try {
-                result = mService.registerAppConfiguration(config, wrapper);
+                result = service.registerAppConfiguration(config, wrapper);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -202,9 +203,10 @@
      */
     public boolean unregisterAppConfiguration(BluetoothHealthAppConfiguration config) {
         boolean result = false;
-        if (mService != null && isEnabled() && config != null) {
+        final IBluetoothHealth service = mService;
+        if (service != null && isEnabled() && config != null) {
             try {
-                result = mService.unregisterAppConfiguration(config);
+                result = service.unregisterAppConfiguration(config);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -230,10 +232,10 @@
      */
     public boolean connectChannelToSource(BluetoothDevice device,
             BluetoothHealthAppConfiguration config) {
-        if (mService != null && isEnabled() && isValidDevice(device) &&
-                config != null) {
+        final IBluetoothHealth service = mService;
+        if (service != null && isEnabled() && isValidDevice(device) && config != null) {
             try {
-                return mService.connectChannelToSource(device, config);
+                return service.connectChannelToSource(device, config);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -259,10 +261,10 @@
      */
     public boolean connectChannelToSink(BluetoothDevice device,
             BluetoothHealthAppConfiguration config, int channelType) {
-        if (mService != null && isEnabled() && isValidDevice(device) &&
-                config != null) {
+        final IBluetoothHealth service = mService;
+        if (service != null && isEnabled() && isValidDevice(device) && config != null) {
             try {
-                return mService.connectChannelToSink(device, config, channelType);
+                return service.connectChannelToSink(device, config, channelType);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -288,10 +290,10 @@
      */
     public boolean disconnectChannel(BluetoothDevice device,
             BluetoothHealthAppConfiguration config, int channelId) {
-        if (mService != null && isEnabled() && isValidDevice(device) &&
-                config != null) {
+        final IBluetoothHealth service = mService;
+        if (service != null && isEnabled() && isValidDevice(device) && config != null) {
             try {
-                return mService.disconnectChannel(device, config, channelId);
+                return service.disconnectChannel(device, config, channelId);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -317,10 +319,10 @@
      */
     public ParcelFileDescriptor getMainChannelFd(BluetoothDevice device,
             BluetoothHealthAppConfiguration config) {
-        if (mService != null && isEnabled() && isValidDevice(device) &&
-                config != null) {
+        final IBluetoothHealth service = mService;
+        if (service != null && isEnabled() && isValidDevice(device) && config != null) {
             try {
-                return mService.getMainChannelFd(device, config);
+                return service.getMainChannelFd(device, config);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -348,9 +350,10 @@
      */
     @Override
     public int getConnectionState(BluetoothDevice device) {
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothHealth service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getHealthDeviceConnectionState(device);
+                return service.getHealthDeviceConnectionState(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -376,15 +379,16 @@
      */
     @Override
     public List<BluetoothDevice> getConnectedDevices() {
-        if (mService != null && isEnabled()) {
+        final IBluetoothHealth service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getConnectedHealthDevices();
+                return service.getConnectedHealthDevices();
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -408,15 +412,16 @@
      */
     @Override
     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
-        if (mService != null && isEnabled()) {
+        final IBluetoothHealth service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getHealthDevicesMatchingConnectionStates(states);
+                return service.getHealthDevicesMatchingConnectionStates(states);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -462,7 +467,7 @@
 
     private Context mContext;
     private ServiceListener mServiceListener;
-    private IBluetoothHealth mService;
+    private volatile IBluetoothHealth mService;
     BluetoothAdapter mAdapter;
 
     /**
@@ -546,11 +551,8 @@
         return false;
     }
 
-    private boolean isValidDevice(BluetoothDevice device) {
-        if (device == null) return false;
-
-        if (BluetoothAdapter.checkBluetoothAddress(device.getAddress())) return true;
-        return false;
+    private static boolean isValidDevice(BluetoothDevice device) {
+        return device != null && BluetoothAdapter.checkBluetoothAddress(device.getAddress());
     }
 
     private boolean checkAppParam(String name, int role, int channelType,
diff --git a/core/java/android/bluetooth/BluetoothInputDevice.java b/core/java/android/bluetooth/BluetoothInputDevice.java
index a5a0243..07966ed 100644
--- a/core/java/android/bluetooth/BluetoothInputDevice.java
+++ b/core/java/android/bluetooth/BluetoothInputDevice.java
@@ -214,7 +214,7 @@
     private Context mContext;
     private ServiceListener mServiceListener;
     private BluetoothAdapter mAdapter;
-    private IBluetoothInputDevice mService;
+    private volatile IBluetoothInputDevice mService;
 
     final private IBluetoothStateChangeCallback mBluetoothStateChangeCallback =
             new IBluetoothStateChangeCallback.Stub() {
@@ -325,15 +325,16 @@
      */
     public boolean connect(BluetoothDevice device) {
         if (DBG) log("connect(" + device + ")");
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.connect(device);
+                return service.connect(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -365,15 +366,16 @@
      */
     public boolean disconnect(BluetoothDevice device) {
         if (DBG) log("disconnect(" + device + ")");
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.disconnect(device);
+                return service.disconnect(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -382,15 +384,16 @@
      */
     public List<BluetoothDevice> getConnectedDevices() {
         if (VDBG) log("getConnectedDevices()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getConnectedDevices();
+                return service.getConnectedDevices();
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -399,15 +402,16 @@
      */
     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
         if (VDBG) log("getDevicesMatchingStates()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getDevicesMatchingConnectionStates(states);
+                return service.getDevicesMatchingConnectionStates(states);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -416,15 +420,16 @@
      */
     public int getConnectionState(BluetoothDevice device) {
         if (VDBG) log("getState(" + device + ")");
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getConnectionState(device);
+                return service.getConnectionState(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return BluetoothProfile.STATE_DISCONNECTED;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return BluetoothProfile.STATE_DISCONNECTED;
     }
 
@@ -445,19 +450,20 @@
      */
     public boolean setPriority(BluetoothDevice device, int priority) {
         if (DBG) log("setPriority(" + device + ", " + priority + ")");
-        if (mService != null && isEnabled() && isValidDevice(device)) {
-            if (priority != BluetoothProfile.PRIORITY_OFF &&
-                priority != BluetoothProfile.PRIORITY_ON) {
-              return false;
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
+            if (priority != BluetoothProfile.PRIORITY_OFF
+                    && priority != BluetoothProfile.PRIORITY_ON) {
+                return false;
             }
             try {
-                return mService.setPriority(device, priority);
+                return service.setPriority(device, priority);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -476,15 +482,16 @@
      */
     public int getPriority(BluetoothDevice device) {
         if (VDBG) log("getPriority(" + device + ")");
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getPriority(device);
+                return service.getPriority(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return BluetoothProfile.PRIORITY_OFF;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return BluetoothProfile.PRIORITY_OFF;
     }
 
@@ -507,18 +514,13 @@
     };
 
     private boolean isEnabled() {
-       if (mAdapter.getState() == BluetoothAdapter.STATE_ON) return true;
-       return false;
+        return mAdapter.getState() == BluetoothAdapter.STATE_ON;
     }
 
-    private boolean isValidDevice(BluetoothDevice device) {
-       if (device == null) return false;
-
-       if (BluetoothAdapter.checkBluetoothAddress(device.getAddress())) return true;
-       return false;
+    private static boolean isValidDevice(BluetoothDevice device) {
+        return device != null && BluetoothAdapter.checkBluetoothAddress(device.getAddress());
     }
 
-
     /**
      * Initiate virtual unplug for a HID input device.
      *
@@ -531,16 +533,17 @@
      */
     public boolean virtualUnplug(BluetoothDevice device) {
         if (DBG) log("virtualUnplug(" + device + ")");
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.virtualUnplug(device);
+                return service.virtualUnplug(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
 
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
 
     }
@@ -557,16 +560,17 @@
     */
     public boolean getProtocolMode(BluetoothDevice device) {
         if (VDBG) log("getProtocolMode(" + device + ")");
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getProtocolMode(device);
+                return service.getProtocolMode(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
-            return false;
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
+        return false;
     }
 
     /**
@@ -581,15 +585,16 @@
      */
     public boolean setProtocolMode(BluetoothDevice device, int protocolMode) {
         if (DBG) log("setProtocolMode(" + device + ")");
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.setProtocolMode(device, protocolMode);
+                return service.setProtocolMode(device, protocolMode);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -606,17 +611,22 @@
      *               true otherwise
      * @hide
      */
-    public boolean getReport(BluetoothDevice device, byte reportType, byte reportId, int bufferSize) {
-        if (VDBG) log("getReport(" + device + "), reportType=" + reportType + " reportId=" + reportId + "bufferSize=" + bufferSize);
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+    public boolean getReport(BluetoothDevice device, byte reportType, byte reportId,
+            int bufferSize) {
+        if (VDBG) {
+            log("getReport(" + device + "), reportType=" + reportType + " reportId=" + reportId
+                    + "bufferSize=" + bufferSize);
+        }
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getReport(device, reportType, reportId, bufferSize);
+                return service.getReport(device, reportType, reportId, bufferSize);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -634,15 +644,16 @@
      */
     public boolean setReport(BluetoothDevice device, byte reportType, String report) {
         if (VDBG) log("setReport(" + device + "), reportType=" + reportType + " report=" + report);
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.setReport(device, reportType, report);
+                return service.setReport(device, reportType, report);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -659,15 +670,16 @@
      */
     public boolean sendData(BluetoothDevice device, String report) {
         if (DBG) log("sendData(" + device + "), report=" + report);
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.sendData(device, report);
+                return service.sendData(device, report);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -683,15 +695,16 @@
      */
     public boolean getIdleTime(BluetoothDevice device) {
         if (DBG) log("getIdletime(" + device + ")");
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getIdleTime(device);
+                return service.getIdleTime(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -708,15 +721,16 @@
      */
     public boolean setIdleTime(BluetoothDevice device, byte idleTime) {
         if (DBG) log("setIdletime(" + device + "), idleTime=" + idleTime);
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothInputDevice service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.setIdleTime(device, idleTime);
+                return service.setIdleTime(device, idleTime);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
diff --git a/core/java/android/bluetooth/BluetoothInputHost.java b/core/java/android/bluetooth/BluetoothInputHost.java
index 68d105f..6a0506d 100644
--- a/core/java/android/bluetooth/BluetoothInputHost.java
+++ b/core/java/android/bluetooth/BluetoothInputHost.java
@@ -26,8 +26,8 @@
 import android.os.RemoteException;
 import android.util.Log;
 
-import java.util.Arrays;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -114,7 +114,7 @@
 
     private ServiceListener mServiceListener;
 
-    private IBluetoothInputHost mService;
+    private volatile IBluetoothInputHost mService;
 
     private BluetoothAdapter mAdapter;
 
@@ -195,24 +195,18 @@
         }
     };
 
-    private ServiceConnection mConnection = new ServiceConnection() {
-
+    private final ServiceConnection mConnection = new ServiceConnection() {
         public void onServiceConnected(ComponentName className, IBinder service) {
             Log.d(TAG, "onServiceConnected()");
-
             mService = IBluetoothInputHost.Stub.asInterface(service);
-
             if (mServiceListener != null) {
                 mServiceListener.onServiceConnected(BluetoothProfile.INPUT_HOST,
                     BluetoothInputHost.this);
             }
         }
-
         public void onServiceDisconnected(ComponentName className) {
             Log.d(TAG, "onServiceDisconnected()");
-
             mService = null;
-
             if (mServiceListener != null) {
                 mServiceListener.onServiceDisconnected(BluetoothProfile.INPUT_HOST);
             }
@@ -283,9 +277,10 @@
     public List<BluetoothDevice> getConnectedDevices() {
         Log.v(TAG, "getConnectedDevices()");
 
-        if (mService != null) {
+        final IBluetoothInputHost service = mService;
+        if (service != null) {
             try {
-                return mService.getConnectedDevices();
+                return service.getConnectedDevices();
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -302,9 +297,10 @@
     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
         Log.v(TAG, "getDevicesMatchingConnectionStates(): states=" + Arrays.toString(states));
 
-        if (mService != null) {
+        final IBluetoothInputHost service = mService;
+        if (service != null) {
             try {
-                return mService.getDevicesMatchingConnectionStates(states);
+                return service.getDevicesMatchingConnectionStates(states);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -321,9 +317,10 @@
     public int getConnectionState(BluetoothDevice device) {
         Log.v(TAG, "getConnectionState(): device=" + device);
 
-        if (mService != null) {
+        final IBluetoothInputHost service = mService;
+        if (service != null) {
             try {
-                return mService.getConnectionState(device);
+                return service.getConnectionState(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -363,13 +360,14 @@
             return false;
         }
 
-        if (mService != null) {
+        final IBluetoothInputHost service = mService;
+        if (service != null) {
             try {
                 BluetoothHidDeviceAppConfiguration config =
-                    new BluetoothHidDeviceAppConfiguration();
+                        new BluetoothHidDeviceAppConfiguration();
                 BluetoothHidDeviceCallbackWrapper cbw =
-                    new BluetoothHidDeviceCallbackWrapper(callback);
-                result = mService.registerApp(config, sdp, inQos, outQos, cbw);
+                        new BluetoothHidDeviceCallbackWrapper(callback);
+                result = service.registerApp(config, sdp, inQos, outQos, cbw);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -397,9 +395,10 @@
 
         boolean result = false;
 
-        if (mService != null) {
+        final IBluetoothInputHost service = mService;
+        if (service != null) {
             try {
-                result = mService.unregisterApp(config);
+                result = service.unregisterApp(config);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -421,9 +420,10 @@
     public boolean sendReport(BluetoothDevice device, int id, byte[] data) {
         boolean result = false;
 
-        if (mService != null) {
+        final IBluetoothInputHost service = mService;
+        if (service != null) {
             try {
-                result = mService.sendReport(device, id, data);
+                result = service.sendReport(device, id, data);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -448,9 +448,10 @@
 
         boolean result = false;
 
-        if (mService != null) {
+        final IBluetoothInputHost service = mService;
+        if (service != null) {
             try {
-                result = mService.replyReport(device, type, id, data);
+                result = service.replyReport(device, type, id, data);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -473,9 +474,10 @@
 
         boolean result = false;
 
-        if (mService != null) {
+        final IBluetoothInputHost service = mService;
+        if (service != null) {
             try {
-                result = mService.reportError(device, error);
+                result = service.reportError(device, error);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -496,9 +498,10 @@
 
         boolean result = false;
 
-        if (mService != null) {
+        final IBluetoothInputHost service = mService;
+        if (service != null) {
             try {
-                result = mService.unplug(device);
+                result = service.unplug(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -520,9 +523,10 @@
 
         boolean result = false;
 
-        if (mService != null) {
+        final IBluetoothInputHost service = mService;
+        if (service != null) {
             try {
-                result = mService.connect(device);
+                result = service.connect(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -543,9 +547,10 @@
 
         boolean result = false;
 
-        if (mService != null) {
+        final IBluetoothInputHost service = mService;
+        if (service != null) {
             try {
-                result = mService.disconnect(device);
+                result = service.disconnect(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
diff --git a/core/java/android/bluetooth/BluetoothManager.java b/core/java/android/bluetooth/BluetoothManager.java
index e2fa38a..bacce80 100644
--- a/core/java/android/bluetooth/BluetoothManager.java
+++ b/core/java/android/bluetooth/BluetoothManager.java
@@ -33,10 +33,7 @@
  * Use {@link android.content.Context#getSystemService(java.lang.String)}
  * with {@link Context#BLUETOOTH_SERVICE} to create an {@link BluetoothManager},
  * then call {@link #getAdapter} to obtain the {@link BluetoothAdapter}.
- * <p>
- * Alternately, you can just call the static helper
- * {@link BluetoothAdapter#getDefaultAdapter()}.
- *
+ * </p>
  * <div class="special reference">
  * <h3>Developer Guides</h3>
  * <p>
diff --git a/core/java/android/bluetooth/BluetoothMap.java b/core/java/android/bluetooth/BluetoothMap.java
index 2e73051..0f801fd 100644
--- a/core/java/android/bluetooth/BluetoothMap.java
+++ b/core/java/android/bluetooth/BluetoothMap.java
@@ -16,15 +16,18 @@
 
 package android.bluetooth;
 
-import java.util.List;
-import java.util.ArrayList;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.os.*;
+import android.os.Binder;
+import android.os.IBinder;
+import android.os.RemoteException;
 import android.util.Log;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * This class provides the APIs to control the Bluetooth MAP
  * Profile.
@@ -39,7 +42,7 @@
     public static final String ACTION_CONNECTION_STATE_CHANGED =
         "android.bluetooth.map.profile.action.CONNECTION_STATE_CHANGED";
 
-    private IBluetoothMap mService;
+    private volatile IBluetoothMap mService;
     private final Context mContext;
     private ServiceListener mServiceListener;
     private BluetoothAdapter mAdapter;
@@ -156,10 +159,13 @@
      */
     public int getState() {
         if (VDBG) log("getState()");
-        if (mService != null) {
+        final IBluetoothMap service = mService;
+        if (service != null) {
             try {
-                return mService.getState();
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.getState();
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) log(Log.getStackTraceString(new Throwable()));
@@ -175,10 +181,13 @@
      */
     public BluetoothDevice getClient() {
         if (VDBG) log("getClient()");
-        if (mService != null) {
+        final IBluetoothMap service = mService;
+        if (service != null) {
             try {
-                return mService.getClient();
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.getClient();
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) log(Log.getStackTraceString(new Throwable()));
@@ -193,10 +202,13 @@
      */
     public boolean isConnected(BluetoothDevice device) {
         if (VDBG) log("isConnected(" + device + ")");
-        if (mService != null) {
+        final IBluetoothMap service = mService;
+        if (service != null) {
             try {
-                return mService.isConnected(device);
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.isConnected(device);
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) log(Log.getStackTraceString(new Throwable()));
@@ -222,16 +234,16 @@
      */
     public boolean disconnect(BluetoothDevice device) {
         if (DBG) log("disconnect(" + device + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothMap service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.disconnect(device);
+                return service.disconnect(device);
             } catch (RemoteException e) {
               Log.e(TAG, Log.getStackTraceString(new Throwable()));
               return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -262,15 +274,16 @@
      */
     public List<BluetoothDevice> getConnectedDevices() {
         if (DBG) log("getConnectedDevices()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothMap service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getConnectedDevices();
+                return service.getConnectedDevices();
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -281,15 +294,16 @@
      */
     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
         if (DBG) log("getDevicesMatchingStates()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothMap service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getDevicesMatchingConnectionStates(states);
+                return service.getDevicesMatchingConnectionStates(states);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -300,16 +314,16 @@
      */
     public int getConnectionState(BluetoothDevice device) {
         if (DBG) log("getConnectionState(" + device + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothMap service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getConnectionState(device);
+                return service.getConnectionState(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return BluetoothProfile.STATE_DISCONNECTED;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return BluetoothProfile.STATE_DISCONNECTED;
     }
 
@@ -326,20 +340,20 @@
      */
     public boolean setPriority(BluetoothDevice device, int priority) {
         if (DBG) log("setPriority(" + device + ", " + priority + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
-            if (priority != BluetoothProfile.PRIORITY_OFF &&
-                priority != BluetoothProfile.PRIORITY_ON) {
-              return false;
+        final IBluetoothMap service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
+            if (priority != BluetoothProfile.PRIORITY_OFF
+                    && priority != BluetoothProfile.PRIORITY_ON) {
+                return false;
             }
             try {
-                return mService.setPriority(device, priority);
+                return service.setPriority(device, priority);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -355,16 +369,16 @@
      */
     public int getPriority(BluetoothDevice device) {
         if (VDBG) log("getPriority(" + device + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothMap service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getPriority(device);
+                return service.getPriority(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return PRIORITY_OFF;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return PRIORITY_OFF;
     }
 
@@ -395,12 +409,8 @@
         log("Bluetooth is Not enabled");
         return false;
     }
-    private boolean isValidDevice(BluetoothDevice device) {
-       if (device == null) return false;
-
-       if (BluetoothAdapter.checkBluetoothAddress(device.getAddress())) return true;
-       return false;
+    private static boolean isValidDevice(BluetoothDevice device) {
+        return device != null && BluetoothAdapter.checkBluetoothAddress(device.getAddress());
     }
 
-
 }
diff --git a/core/java/android/bluetooth/BluetoothMapClient.java b/core/java/android/bluetooth/BluetoothMapClient.java
index ccab3cd..b8fadf4 100644
--- a/core/java/android/bluetooth/BluetoothMapClient.java
+++ b/core/java/android/bluetooth/BluetoothMapClient.java
@@ -59,7 +59,7 @@
     public static final String EXTRA_SENDER_CONTACT_NAME =
             "android.bluetooth.mapmce.profile.extra.SENDER_CONTACT_NAME";
 
-    private IBluetoothMapClient mService;
+    private volatile IBluetoothMapClient mService;
     private final Context mContext;
     private ServiceListener mServiceListener;
     private BluetoothAdapter mAdapter;
@@ -176,9 +176,10 @@
      */
     public boolean isConnected(BluetoothDevice device) {
         if (VDBG) Log.d(TAG, "isConnected(" + device + ")");
-        if (mService != null) {
+        final IBluetoothMapClient service = mService;
+        if (service != null) {
             try {
-                return mService.isConnected(device);
+                return service.isConnected(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -195,9 +196,10 @@
      */
     public boolean connect(BluetoothDevice device) {
         if (DBG) Log.d(TAG, "connect(" + device + ")" + "for MAPS MCE");
-        if (mService != null) {
+        final IBluetoothMapClient service = mService;
+        if (service != null) {
             try {
-                return mService.connect(device);
+                return service.connect(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -216,15 +218,15 @@
      */
     public boolean disconnect(BluetoothDevice device) {
         if (DBG) Log.d(TAG, "disconnect(" + device + ")");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothMapClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.disconnect(device);
+                return service.disconnect(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -236,15 +238,16 @@
     @Override
     public List<BluetoothDevice> getConnectedDevices() {
         if (DBG) Log.d(TAG, "getConnectedDevices()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothMapClient service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getConnectedDevices();
+                return service.getConnectedDevices();
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return new ArrayList<>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<>();
     }
 
@@ -256,15 +259,16 @@
     @Override
     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
         if (DBG) Log.d(TAG, "getDevicesMatchingStates()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothMapClient service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getDevicesMatchingConnectionStates(states);
+                return service.getDevicesMatchingConnectionStates(states);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return new ArrayList<>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<>();
     }
 
@@ -276,16 +280,16 @@
     @Override
     public int getConnectionState(BluetoothDevice device) {
         if (DBG) Log.d(TAG, "getConnectionState(" + device + ")");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothMapClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getConnectionState(device);
+                return service.getConnectionState(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return BluetoothProfile.STATE_DISCONNECTED;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return BluetoothProfile.STATE_DISCONNECTED;
     }
 
@@ -300,20 +304,20 @@
      */
     public boolean setPriority(BluetoothDevice device, int priority) {
         if (DBG) Log.d(TAG, "setPriority(" + device + ", " + priority + ")");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
-            if (priority != BluetoothProfile.PRIORITY_OFF &&
-                    priority != BluetoothProfile.PRIORITY_ON) {
+        final IBluetoothMapClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
+            if (priority != BluetoothProfile.PRIORITY_OFF
+                    && priority != BluetoothProfile.PRIORITY_ON) {
                 return false;
             }
             try {
-                return mService.setPriority(device, priority);
+                return service.setPriority(device, priority);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -329,16 +333,16 @@
      */
     public int getPriority(BluetoothDevice device) {
         if (VDBG) Log.d(TAG, "getPriority(" + device + ")");
-        if (mService != null && isEnabled() &&
-                isValidDevice(device)) {
+        final IBluetoothMapClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getPriority(device);
+                return service.getPriority(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return PRIORITY_OFF;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return PRIORITY_OFF;
     }
 
@@ -357,9 +361,10 @@
     public boolean sendMessage(BluetoothDevice device, Uri[] contacts, String message,
             PendingIntent sentIntent, PendingIntent deliveredIntent) {
         if (DBG) Log.d(TAG, "sendMessage(" + device + ", " + contacts + ", " + message);
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothMapClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.sendMessage(device, contacts, message, sentIntent, deliveredIntent);
+                return service.sendMessage(device, contacts, message, sentIntent, deliveredIntent);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return false;
@@ -376,9 +381,10 @@
      */
     public boolean getUnreadMessages(BluetoothDevice device) {
         if (DBG) Log.d(TAG, "getUnreadMessages(" + device + ")");
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothMapClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getUnreadMessages(device);
+                return service.getUnreadMessages(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return false;
@@ -413,12 +419,8 @@
         return false;
     }
 
-    private boolean isValidDevice(BluetoothDevice device) {
-        if (device == null) return false;
-
-        if (BluetoothAdapter.checkBluetoothAddress(device.getAddress())) return true;
-        return false;
+    private static boolean isValidDevice(BluetoothDevice device) {
+        return device != null && BluetoothAdapter.checkBluetoothAddress(device.getAddress());
     }
 
-
 }
diff --git a/core/java/android/bluetooth/BluetoothPan.java b/core/java/android/bluetooth/BluetoothPan.java
index 2a026a9..123d10b 100644
--- a/core/java/android/bluetooth/BluetoothPan.java
+++ b/core/java/android/bluetooth/BluetoothPan.java
@@ -121,7 +121,7 @@
     private Context mContext;
     private ServiceListener mServiceListener;
     private BluetoothAdapter mAdapter;
-    private IBluetoothPan mPanService;
+    private volatile IBluetoothPan mPanService;
 
     /**
      * Create a BluetoothPan proxy object for interacting with the local
@@ -235,16 +235,16 @@
      */
     public boolean connect(BluetoothDevice device) {
         if (DBG) log("connect(" + device + ")");
-        if (mPanService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothPan service = mPanService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mPanService.connect(device);
+                return service.connect(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mPanService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -276,16 +276,16 @@
      */
     public boolean disconnect(BluetoothDevice device) {
         if (DBG) log("disconnect(" + device + ")");
-        if (mPanService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothPan service = mPanService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mPanService.disconnect(device);
+                return service.disconnect(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mPanService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -294,15 +294,16 @@
      */
     public List<BluetoothDevice> getConnectedDevices() {
         if (VDBG) log("getConnectedDevices()");
-        if (mPanService != null && isEnabled()) {
+        final IBluetoothPan service = mPanService;
+        if (service != null && isEnabled()) {
             try {
-                return mPanService.getConnectedDevices();
+                return service.getConnectedDevices();
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mPanService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -311,15 +312,16 @@
      */
     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
         if (VDBG) log("getDevicesMatchingStates()");
-        if (mPanService != null && isEnabled()) {
+        final IBluetoothPan service = mPanService;
+        if (service != null && isEnabled()) {
             try {
-                return mPanService.getDevicesMatchingConnectionStates(states);
+                return service.getDevicesMatchingConnectionStates(states);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mPanService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -328,25 +330,25 @@
      */
     public int getConnectionState(BluetoothDevice device) {
         if (VDBG) log("getState(" + device + ")");
-        if (mPanService != null && isEnabled()
-            && isValidDevice(device)) {
+        final IBluetoothPan service = mPanService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mPanService.getConnectionState(device);
+                return service.getConnectionState(device);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
                 return BluetoothProfile.STATE_DISCONNECTED;
             }
         }
-        if (mPanService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return BluetoothProfile.STATE_DISCONNECTED;
     }
 
     public void setBluetoothTethering(boolean value) {
         if (DBG) log("setBluetoothTethering(" + value + ")");
-
-        if (mPanService != null && isEnabled()) {
+        final IBluetoothPan service = mPanService;
+        if (service != null && isEnabled()) {
             try {
-                mPanService.setBluetoothTethering(value);
+                service.setBluetoothTethering(value);
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
             }
@@ -355,10 +357,10 @@
 
     public boolean isTetheringOn() {
         if (VDBG) log("isTetheringOn()");
-
-        if (mPanService != null && isEnabled()) {
+        final IBluetoothPan service = mPanService;
+        if (service != null && isEnabled()) {
             try {
-                return mPanService.isTetheringOn();
+                return service.isTetheringOn();
             } catch (RemoteException e) {
                 Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
             }
@@ -370,7 +372,6 @@
         public void onServiceConnected(ComponentName className, IBinder service) {
             if (DBG) Log.d(TAG, "BluetoothPAN Proxy object connected");
             mPanService = IBluetoothPan.Stub.asInterface(Binder.allowBlocking(service));
-
             if (mServiceListener != null) {
                 mServiceListener.onServiceConnected(BluetoothProfile.PAN,
                                                     BluetoothPan.this);
@@ -386,15 +387,11 @@
     };
 
     private boolean isEnabled() {
-       if (mAdapter.getState() == BluetoothAdapter.STATE_ON) return true;
-       return false;
+        return mAdapter.getState() == BluetoothAdapter.STATE_ON;
     }
 
-    private boolean isValidDevice(BluetoothDevice device) {
-       if (device == null) return false;
-
-       if (BluetoothAdapter.checkBluetoothAddress(device.getAddress())) return true;
-       return false;
+    private static boolean isValidDevice(BluetoothDevice device) {
+        return device != null && BluetoothAdapter.checkBluetoothAddress(device.getAddress());
     }
 
     private static void log(String msg) {
diff --git a/core/java/android/bluetooth/BluetoothPbap.java b/core/java/android/bluetooth/BluetoothPbap.java
index dc01fc7..f16160e4 100644
--- a/core/java/android/bluetooth/BluetoothPbap.java
+++ b/core/java/android/bluetooth/BluetoothPbap.java
@@ -20,8 +20,8 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.os.RemoteException;
 import android.os.IBinder;
+import android.os.RemoteException;
 import android.util.Log;
 
 /**
@@ -67,7 +67,7 @@
     public static final String PBAP_STATE_CHANGED_ACTION =
         "android.bluetooth.pbap.intent.action.PBAP_STATE_CHANGED";
 
-    private IBluetoothPbap mService;
+    private volatile IBluetoothPbap mService;
     private final Context mContext;
     private ServiceListener mServiceListener;
     private BluetoothAdapter mAdapter;
@@ -212,10 +212,13 @@
      */
     public int getState() {
         if (VDBG) log("getState()");
-        if (mService != null) {
+        final IBluetoothPbap service = mService;
+        if (service != null) {
             try {
-                return mService.getState();
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.getState();
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) log(Log.getStackTraceString(new Throwable()));
@@ -231,10 +234,13 @@
      */
     public BluetoothDevice getClient() {
         if (VDBG) log("getClient()");
-        if (mService != null) {
+        final IBluetoothPbap service = mService;
+        if (service != null) {
             try {
-                return mService.getClient();
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.getClient();
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) log(Log.getStackTraceString(new Throwable()));
@@ -249,10 +255,13 @@
      */
     public boolean isConnected(BluetoothDevice device) {
         if (VDBG) log("isConnected(" + device + ")");
-        if (mService != null) {
+        final IBluetoothPbap service = mService;
+        if (service != null) {
             try {
-                return mService.isConnected(device);
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.isConnected(device);
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) log(Log.getStackTraceString(new Throwable()));
@@ -267,9 +276,10 @@
      */
     public boolean disconnect() {
         if (DBG) log("disconnect()");
-        if (mService != null) {
+        final IBluetoothPbap service = mService;
+        if (service != null) {
             try {
-                mService.disconnect();
+                service.disconnect();
                 return true;
             } catch (RemoteException e) {Log.e(TAG, e.toString());}
         } else {
diff --git a/core/java/android/bluetooth/BluetoothPbapClient.java b/core/java/android/bluetooth/BluetoothPbapClient.java
index 9f00e1a..28b551e 100644
--- a/core/java/android/bluetooth/BluetoothPbapClient.java
+++ b/core/java/android/bluetooth/BluetoothPbapClient.java
@@ -16,17 +16,18 @@
 
 package android.bluetooth;
 
-import java.util.List;
-import java.util.ArrayList;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.os.RemoteException;
 import android.os.Binder;
 import android.os.IBinder;
+import android.os.RemoteException;
 import android.util.Log;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * This class provides the APIs to control the Bluetooth PBAP Client Profile.
  *@hide
@@ -40,7 +41,7 @@
     public static final String ACTION_CONNECTION_STATE_CHANGED =
         "android.bluetooth.pbap.profile.action.CONNECTION_STATE_CHANGED";
 
-    private IBluetoothPbapClient mService;
+    private volatile IBluetoothPbapClient mService;
     private final Context mContext;
     private ServiceListener mServiceListener;
     private BluetoothAdapter mAdapter;
@@ -171,15 +172,16 @@
         if (DBG) {
             log("connect(" + device + ") for PBAP Client.");
         }
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothPbapClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.connect(device);
+                return service.connect(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) {
+        if (service == null) {
             Log.w(TAG, "Proxy not attached to service");
         }
         return false;
@@ -196,16 +198,17 @@
         if (DBG) {
             log("disconnect(" + device + ")" + new Exception() );
         }
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothPbapClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                mService.disconnect(device);
+                service.disconnect(device);
                 return true;
             } catch (RemoteException e) {
               Log.e(TAG, Log.getStackTraceString(new Throwable()));
               return false;
             }
         }
-        if (mService == null) {
+        if (service == null) {
             Log.w(TAG, "Proxy not attached to service");
         }
         return false;
@@ -222,15 +225,16 @@
         if (DBG) {
             log("getConnectedDevices()");
         }
-        if (mService != null && isEnabled()) {
+        final IBluetoothPbapClient service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getConnectedDevices();
+                return service.getConnectedDevices();
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) {
+        if (service == null) {
             Log.w(TAG, "Proxy not attached to service");
         }
         return new ArrayList<BluetoothDevice>();
@@ -246,15 +250,16 @@
         if (DBG) {
             log("getDevicesMatchingStates()");
         }
-        if (mService != null && isEnabled()) {
+        final IBluetoothPbapClient service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getDevicesMatchingConnectionStates(states);
+                return service.getDevicesMatchingConnectionStates(states);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) {
+        if (service == null) {
             Log.w(TAG, "Proxy not attached to service");
         }
         return new ArrayList<BluetoothDevice>();
@@ -270,15 +275,16 @@
         if (DBG) {
             log("getConnectionState(" + device + ")");
         }
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothPbapClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getConnectionState(device);
+                return service.getConnectionState(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return BluetoothProfile.STATE_DISCONNECTED;
             }
         }
-        if (mService == null) {
+        if (service == null) {
             Log.w(TAG, "Proxy not attached to service");
         }
         return BluetoothProfile.STATE_DISCONNECTED;
@@ -318,14 +324,8 @@
         return false;
     }
 
-    private boolean isValidDevice(BluetoothDevice device) {
-       if (device == null) {
-           return false;
-       }
-       if (BluetoothAdapter.checkBluetoothAddress(device.getAddress())) {
-           return true;
-       }
-       return false;
+    private static boolean isValidDevice(BluetoothDevice device) {
+        return device != null && BluetoothAdapter.checkBluetoothAddress(device.getAddress());
     }
 
     /**
@@ -336,27 +336,27 @@
      * {@link #PRIORITY_OFF},
      *
      * @param device Paired bluetooth device
-     * @param priority
+     * @param priority Priority of this profile
      * @return true if priority is set, false on error
      */
     public boolean setPriority(BluetoothDevice device, int priority) {
         if (DBG) {
             log("setPriority(" + device + ", " + priority + ")");
         }
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
-            if (priority != BluetoothProfile.PRIORITY_OFF &&
-                priority != BluetoothProfile.PRIORITY_ON) {
-              return false;
+        final IBluetoothPbapClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
+            if (priority != BluetoothProfile.PRIORITY_OFF
+                    && priority != BluetoothProfile.PRIORITY_ON) {
+                return false;
             }
             try {
-                return mService.setPriority(device, priority);
+                return service.setPriority(device, priority);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) {
+        if (service == null) {
             Log.w(TAG, "Proxy not attached to service");
         }
         return false;
@@ -376,15 +376,16 @@
         if (VDBG) {
             log("getPriority(" + device + ")");
         }
-        if (mService != null && isEnabled() && isValidDevice(device)) {
+        final IBluetoothPbapClient service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getPriority(device);
+                return service.getPriority(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return PRIORITY_OFF;
             }
         }
-        if (mService == null) {
+        if (service == null) {
             Log.w(TAG, "Proxy not attached to service");
         }
         return PRIORITY_OFF;
diff --git a/core/java/android/bluetooth/BluetoothSap.java b/core/java/android/bluetooth/BluetoothSap.java
index 89c1bf8..f9ddb2e 100644
--- a/core/java/android/bluetooth/BluetoothSap.java
+++ b/core/java/android/bluetooth/BluetoothSap.java
@@ -16,19 +16,18 @@
 
 package android.bluetooth;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.os.RemoteException;
 import android.os.Binder;
 import android.os.IBinder;
-import android.os.ServiceManager;
+import android.os.RemoteException;
 import android.util.Log;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * This class provides the APIs to control the Bluetooth SIM
  * Access Profile (SAP).
@@ -67,7 +66,7 @@
     public static final String ACTION_CONNECTION_STATE_CHANGED =
         "android.bluetooth.sap.profile.action.CONNECTION_STATE_CHANGED";
 
-    private IBluetoothSap mService;
+    private volatile IBluetoothSap mService;
     private final Context mContext;
     private ServiceListener mServiceListener;
     private BluetoothAdapter mAdapter;
@@ -196,10 +195,13 @@
      */
     public int getState() {
         if (VDBG) log("getState()");
-        if (mService != null) {
+        final IBluetoothSap service = mService;
+        if (service != null) {
             try {
-                return mService.getState();
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.getState();
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) log(Log.getStackTraceString(new Throwable()));
@@ -216,10 +218,13 @@
      */
     public BluetoothDevice getClient() {
         if (VDBG) log("getClient()");
-        if (mService != null) {
+        final IBluetoothSap service = mService;
+        if (service != null) {
             try {
-                return mService.getClient();
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.getClient();
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) log(Log.getStackTraceString(new Throwable()));
@@ -235,10 +240,13 @@
      */
     public boolean isConnected(BluetoothDevice device) {
         if (VDBG) log("isConnected(" + device + ")");
-        if (mService != null) {
+        final IBluetoothSap service = mService;
+        if (service != null) {
             try {
-                return mService.isConnected(device);
-            } catch (RemoteException e) {Log.e(TAG, e.toString());}
+                return service.isConnected(device);
+            } catch (RemoteException e) {
+                Log.e(TAG, e.toString());
+            }
         } else {
             Log.w(TAG, "Proxy not attached to service");
             if (DBG) log(Log.getStackTraceString(new Throwable()));
@@ -266,16 +274,16 @@
      */
     public boolean disconnect(BluetoothDevice device) {
         if (DBG) log("disconnect(" + device + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothSap service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.disconnect(device);
+                return service.disconnect(device);
             } catch (RemoteException e) {
               Log.e(TAG, Log.getStackTraceString(new Throwable()));
               return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -287,15 +295,16 @@
      */
     public List<BluetoothDevice> getConnectedDevices() {
         if (DBG) log("getConnectedDevices()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothSap service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getConnectedDevices();
+                return service.getConnectedDevices();
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -307,15 +316,16 @@
      */
     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
         if (DBG) log("getDevicesMatchingStates()");
-        if (mService != null && isEnabled()) {
+        final IBluetoothSap service = mService;
+        if (service != null && isEnabled()) {
             try {
-                return mService.getDevicesMatchingConnectionStates(states);
+                return service.getDevicesMatchingConnectionStates(states);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return new ArrayList<BluetoothDevice>();
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return new ArrayList<BluetoothDevice>();
     }
 
@@ -327,16 +337,16 @@
      */
     public int getConnectionState(BluetoothDevice device) {
         if (DBG) log("getConnectionState(" + device + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothSap service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getConnectionState(device);
+                return service.getConnectionState(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return BluetoothProfile.STATE_DISCONNECTED;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return BluetoothProfile.STATE_DISCONNECTED;
     }
 
@@ -352,20 +362,20 @@
      */
     public boolean setPriority(BluetoothDevice device, int priority) {
         if (DBG) log("setPriority(" + device + ", " + priority + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
-            if (priority != BluetoothProfile.PRIORITY_OFF &&
-                priority != BluetoothProfile.PRIORITY_ON) {
-              return false;
+        final IBluetoothSap service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
+            if (priority != BluetoothProfile.PRIORITY_OFF
+                    && priority != BluetoothProfile.PRIORITY_ON) {
+                return false;
             }
             try {
-                return mService.setPriority(device, priority);
+                return service.setPriority(device, priority);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return false;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return false;
     }
 
@@ -378,20 +388,20 @@
      */
     public int getPriority(BluetoothDevice device) {
         if (VDBG) log("getPriority(" + device + ")");
-        if (mService != null && isEnabled() &&
-            isValidDevice(device)) {
+        final IBluetoothSap service = mService;
+        if (service != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.getPriority(device);
+                return service.getPriority(device);
             } catch (RemoteException e) {
                 Log.e(TAG, Log.getStackTraceString(new Throwable()));
                 return PRIORITY_OFF;
             }
         }
-        if (mService == null) Log.w(TAG, "Proxy not attached to service");
+        if (service == null) Log.w(TAG, "Proxy not attached to service");
         return PRIORITY_OFF;
     }
 
-    private ServiceConnection mConnection = new ServiceConnection() {
+    private final ServiceConnection mConnection = new ServiceConnection() {
         public void onServiceConnected(ComponentName className, IBinder service) {
             if (DBG) log("Proxy object connected");
             mService = IBluetoothSap.Stub.asInterface(Binder.allowBlocking(service));
@@ -421,13 +431,8 @@
         return false;
     }
 
-    private boolean isValidDevice(BluetoothDevice device) {
-       if (device == null)
-           return false;
-
-       if (BluetoothAdapter.checkBluetoothAddress(device.getAddress()))
-           return true;
-       return false;
+    private static boolean isValidDevice(BluetoothDevice device) {
+        return device != null && BluetoothAdapter.checkBluetoothAddress(device.getAddress());
     }
 
 }
diff --git a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
index dfd5996..44c2667 100644
--- a/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
+++ b/core/java/android/bluetooth/le/BluetoothLeAdvertiser.java
@@ -415,7 +415,8 @@
           gatt = mBluetoothManager.getBluetoothGatt();
         } catch (RemoteException e) {
           Log.e(TAG, "Failed to get Bluetooth gatt - ", e);
-          throw new IllegalStateException("Failed to get Bluetooth");
+          postStartSetFailure(handler, callback, AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR);
+          return;
         }
 
         IAdvertisingSetCallback wrapped = wrap(callback, handler);
@@ -429,7 +430,8 @@
                                      periodicData, duration, maxExtendedAdvertisingEvents, wrapped);
         } catch (RemoteException e) {
           Log.e(TAG, "Failed to start advertising set - ", e);
-          throw new IllegalStateException("Failed to start advertising set");
+          postStartSetFailure(handler, callback, AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR);
+          return;
         }
     }
 
@@ -453,8 +455,7 @@
             gatt.stopAdvertisingSet(wrapped);
        } catch (RemoteException e) {
             Log.e(TAG, "Failed to stop advertising - ", e);
-            throw new IllegalStateException("Failed to stop advertising");
-        }
+       }
     }
 
     /**
@@ -648,6 +649,16 @@
         };
     }
 
+    private void postStartSetFailure(Handler handler, final AdvertisingSetCallback callback,
+        final int error) {
+        handler.post(new Runnable() {
+              @Override
+              public void run() {
+                  callback.onAdvertisingSetStarted(null, 0, error);
+              }
+          });
+    }
+
     private void postStartFailure(final AdvertiseCallback callback, final int error) {
         mHandler.post(new Runnable() {
             @Override
diff --git a/core/java/android/bluetooth/le/BluetoothLeScanner.java b/core/java/android/bluetooth/le/BluetoothLeScanner.java
index e3bc78e..7106a84 100644
--- a/core/java/android/bluetooth/le/BluetoothLeScanner.java
+++ b/core/java/android/bluetooth/le/BluetoothLeScanner.java
@@ -137,6 +137,11 @@
      * the PendingIntent. Use this method of scanning if your process is not always running and it
      * should be started when scan results are available.
      * <p>
+     * An app must hold
+     * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION ACCESS_COARSE_LOCATION} or
+     * {@link android.Manifest.permission#ACCESS_FINE_LOCATION ACCESS_FINE_LOCATION} permission
+     * in order to get results.
+     * <p>
      * When the PendingIntent is delivered, the Intent passed to the receiver or activity
      * will contain one or more of the extras {@link #EXTRA_CALLBACK_TYPE},
      * {@link #EXTRA_ERROR_CODE} and {@link #EXTRA_LIST_SCAN_RESULT} to indicate the result of
@@ -344,6 +349,7 @@
         private List<List<ResultStorageDescriptor>> mResultStorages;
 
         // mLeHandle 0: not registered
+        // -2: registration failed because app is scanning to frequently
         // -1: scan stopped or registration failed
         // > 0: registered and scan started
         private int mScannerId;
@@ -364,7 +370,7 @@
         public void startRegistration() {
             synchronized (this) {
                 // Scan stopped.
-                if (mScannerId == -1) return;
+                if (mScannerId == -1 || mScannerId == -2) return;
                 try {
                     mBluetoothGatt.registerScanner(this, mWorkSource);
                     wait(REGISTRATION_CALLBACK_TIMEOUT_MILLIS);
@@ -378,6 +384,10 @@
                     // Registration timed out or got exception, reset scannerId to -1 so no
                     // subsequent operations can proceed.
                     if (mScannerId == 0) mScannerId = -1;
+
+                    // If scanning too frequently, don't report anything to the app.
+                    if (mScannerId == -2) return;
+
                     postCallbackError(mScanCallback,
                             ScanCallback.SCAN_FAILED_APPLICATION_REGISTRATION_FAILED);
                 }
@@ -437,6 +447,9 @@
                         Log.e(TAG, "fail to start le scan: " + e);
                         mScannerId = -1;
                     }
+                } else if (status == ScanCallback.SCAN_FAILED_SCANNING_TOO_FREQUENTLY) {
+                    // applicaiton was scanning too frequently
+                    mScannerId = -2;
                 } else {
                     // registration failed
                     mScannerId = -1;
diff --git a/core/java/android/bluetooth/le/ScanCallback.java b/core/java/android/bluetooth/le/ScanCallback.java
index aff2e90..57c9b40 100644
--- a/core/java/android/bluetooth/le/ScanCallback.java
+++ b/core/java/android/bluetooth/le/ScanCallback.java
@@ -50,6 +50,12 @@
      */
     public static final int SCAN_FAILED_OUT_OF_HARDWARE_RESOURCES = 5;
 
+    /**
+     * Fails to start scan as application tries to scan too frequently.
+     * @hide
+     */
+    public static final int SCAN_FAILED_SCANNING_TOO_FREQUENTLY = 6;
+
     static final int NO_ERROR = 0;
 
     /**
diff --git a/core/java/android/companion/CompanionDeviceManager.java b/core/java/android/companion/CompanionDeviceManager.java
index 076deab..b2952aa 100644
--- a/core/java/android/companion/CompanionDeviceManager.java
+++ b/core/java/android/companion/CompanionDeviceManager.java
@@ -113,8 +113,8 @@
      *
      * <p>If your app needs to be excluded from battery optimizations (run in the background)
      * or to have unrestricted data access (use data in the background) you can declare that
-     * you use the {@link android.Manifest.permission#RUN_IN_BACKGROUND} and {@link
-     * android.Manifest.permission#USE_DATA_IN_BACKGROUND} respectively. Note that these
+     * you use the {@link android.Manifest.permission#REQUEST_COMPANION_RUN_IN_BACKGROUND} and {@link
+     * android.Manifest.permission#REQUEST_COMPANION_USE_DATA_IN_BACKGROUND} respectively. Note that these
      * special capabilities have a negative effect on the device's battery and user's data
      * usage, therefore you should requested them when absolutely necessary.</p>
      *
diff --git a/core/java/android/content/BroadcastReceiver.java b/core/java/android/content/BroadcastReceiver.java
index f907721..58a9183 100644
--- a/core/java/android/content/BroadcastReceiver.java
+++ b/core/java/android/content/BroadcastReceiver.java
@@ -338,7 +338,7 @@
      * before they system will consider them non-responsive and ANR the app.  Since these usually
      * execute on the app's main thread, they are already bound by the ~5 second time limit
      * of various operations that can happen there (not to mention just avoiding UI jank), so
-     * the receive limit is generally not of concern.  However, once you use {@goAsync}, though
+     * the receive limit is generally not of concern.  However, once you use {@code goAsync}, though
      * able to be off the main thread, the broadcast execution limit still applies, and that
      * includes the time spent between calling this method and ultimately
      * {@link PendingResult#finish() PendingResult.finish()}.</p>
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index e38c1f1..e2c898d 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -39,7 +39,6 @@
 import android.os.CancellationSignal;
 import android.os.IBinder;
 import android.os.ICancellationSignal;
-import android.os.OperationCanceledException;
 import android.os.ParcelFileDescriptor;
 import android.os.Process;
 import android.os.RemoteException;
@@ -47,7 +46,6 @@
 import android.os.storage.StorageManager;
 import android.text.TextUtils;
 import android.util.Log;
-import android.util.MathUtils;
 
 import java.io.File;
 import java.io.FileDescriptor;
@@ -1049,7 +1047,7 @@
      * @param sortOrder How the rows in the cursor should be sorted.
      *      If {@code null} then the provider is free to define the sort order.
      * @param cancellationSignal A signal to cancel the operation in progress, or {@code null} if none.
-     * If the operation is canceled, then {@link OperationCanceledException} will be thrown
+     * If the operation is canceled, then {@link android.os.OperationCanceledException} will be thrown
      * when the query is executed.
      * @return a Cursor or {@code null}.
      */
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 0d4fa16..f821d31 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -34,7 +34,6 @@
 import android.annotation.UserIdInt;
 import android.app.IApplicationThread;
 import android.app.IServiceConnection;
-import android.app.Notification;
 import android.app.VrManager;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
@@ -65,6 +64,7 @@
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.WindowManager;
+import android.view.autofill.AutofillManager.AutofillClient;
 import android.view.textclassifier.TextClassificationManager;
 
 import java.io.File;
@@ -2714,8 +2714,8 @@
 
     /**
      * Similar to {@link #startService(Intent)}, but with an implicit promise that the
-     * Service will call {@link android.app.Service#startForeground(int, Notification)
-     * startForeground(int, Notification)} once it begins running.  The service is given
+     * Service will call {@link android.app.Service#startForeground(int, android.app.Notification)
+     * startForeground(int, android.app.Notification)} once it begins running.  The service is given
      * an amount of time comparable to the ANR interval to do this, otherwise the system
      * will automatically stop the service and declare the app ANR.
      *
@@ -2736,7 +2736,7 @@
      * or the service can not be found.
      *
      * @see #stopService
-     * @see android.app.Service#startForeground(int, Notification)
+     * @see android.app.Service#startForeground(int, android.app.Notification)
      */
     @Nullable
     public abstract ComponentName startForegroundService(Intent service);
@@ -2926,6 +2926,7 @@
             STORAGE_SERVICE,
             STORAGE_STATS_SERVICE,
             WALLPAPER_SERVICE,
+            TIME_ZONE_RULES_MANAGER_SERVICE,
             VIBRATOR_SERVICE,
             //@hide: STATUS_BAR_SERVICE,
             CONNECTIVITY_SERVICE,
@@ -2938,6 +2939,7 @@
             WIFI_AWARE_SERVICE,
             WIFI_P2P_SERVICE,
             WIFI_SCANNING_SERVICE,
+            //@hide: LOWPAN_SERVICE,
             //@hide: WIFI_RTT_SERVICE,
             //@hide: ETHERNET_SERVICE,
             WIFI_RTT_SERVICE,
@@ -2993,7 +2995,8 @@
             SHORTCUT_SERVICE,
             //@hide: CONTEXTHUB_SERVICE,
             SYSTEM_HEALTH_SERVICE,
-            //@hide: INCIDENT_SERVICE
+            //@hide: INCIDENT_SERVICE,
+            COMPANION_DEVICE_SERVICE
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface ServiceName {}
@@ -3466,6 +3469,18 @@
 
     /**
      * Use with {@link #getSystemService} to retrieve a {@link
+     * android.net.lowpan.LowpanManager} for handling management of
+     * LoWPAN access.
+     *
+     * @see #getSystemService
+     * @see android.net.lowpan.LowpanManager
+     *
+     * @hide
+     */
+    public static final String LOWPAN_SERVICE = "lowpan";
+
+    /**
+     * Use with {@link #getSystemService} to retrieve a {@link
      * android.net.EthernetManager} for handling management of
      * Ethernet access.
      *
@@ -3951,7 +3966,7 @@
      * @see #getSystemService
      * @hide
      */
-    public static final String RADIO_SERVICE = "radio";
+    public static final String RADIO_SERVICE = "broadcastradio";
 
     /**
      * Use with {@link #getSystemService} to retrieve a
@@ -4030,6 +4045,15 @@
     public static final String VR_SERVICE = "vrmanager";
 
     /**
+     * Use with {@link #getSystemService} to retrieve an
+     * {@link android.app.timezone.ITimeZoneRulesManager}.
+     * @hide
+     *
+     * @see #getSystemService
+     */
+    public static final String TIME_ZONE_RULES_MANAGER_SERVICE = "timezone";
+
+    /**
      * Determine whether the given permission is allowed for a particular
      * process and user ID running in the system.
      *
@@ -4746,6 +4770,19 @@
     }
 
     /**
+     * @hide
+     */
+    public AutofillClient getAutofillClient() {
+        return null;
+    }
+
+    /**
+     * @hide
+     */
+    public void setAutofillClient(AutofillClient client) {
+    }
+
+    /**
      * Throws an exception if the Context is using system resources,
      * which are non-runtime-overlay-themable and may show inconsistent UI.
      * @hide
diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java
index a9fd58b..85acdc6 100644
--- a/core/java/android/content/ContextWrapper.java
+++ b/core/java/android/content/ContextWrapper.java
@@ -37,6 +37,7 @@
 import android.os.UserHandle;
 import android.view.Display;
 import android.view.DisplayAdjustments;
+import android.view.autofill.AutofillManager.AutofillClient;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -967,7 +968,24 @@
     /**
      * @hide
      */
+    @Override
     public int getNextAutofillId() {
         return mBase.getNextAutofillId();
     }
+
+    /**
+     * @hide
+     */
+    @Override
+    public AutofillClient getAutofillClient() {
+        return mBase.getAutofillClient();
+    }
+
+    /**
+     * @hide
+     */
+    @Override
+    public void setAutofillClient(AutofillClient client) {
+        mBase.setAutofillClient(client);
+    }
 }
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 9008ddc..c863fe0 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -264,8 +264,8 @@
  * </ul>
  *
  * <p>For example, consider the Note Pad sample application that
- * allows user to browse through a list of notes data and view details about
- * individual items.  Text in italics indicate places were you would replace a
+ * allows a user to browse through a list of notes data and view details about
+ * individual items.  Text in italics indicates places where you would replace a
  * name with one specific to your own package.</p>
  *
  * <pre> &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
@@ -1459,6 +1459,7 @@
      * @deprecated As of {@link android.os.Build.VERSION_CODES#M}, setup wizard can be identified
      * using {@link #ACTION_MAIN} and {@link #CATEGORY_SETUP_WIZARD}
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -1535,7 +1536,24 @@
     public static final String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE";
 
     /**
+     * Activity Action: Activity to handle split installation failures.
+     * <p>Splits may be installed dynamically. This happens when an Activity is launched,
+     * but the split that contains the application isn't installed. When a split is
+     * installed in this manner, the containing package usually doesn't know this is
+     * happening. However, if an error occurs during installation, the containing
+     * package can define a single activity handling this action to deal with such
+     * failures.
+     * <p>The activity handling this action must be in the base package.
+     * <p>
+     * Input: {@link #EXTRA_INTENT} the original intent that started split installation.
+     * {@link #EXTRA_SPLIT_NAME} the name of the split that failed to be installed.
+     */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_INSTALL_FAILURE = "android.intent.action.INSTALL_FAILURE";
+
+    /**
      * @hide
+     * @removed
      * @deprecated Do not use. This will go away.
      *     Replace with {@link #ACTION_INSTALL_INSTANT_APP_PACKAGE}.
      */
@@ -1558,6 +1576,7 @@
 
     /**
      * @hide
+     * @removed
      * @deprecated Do not use. This will go away.
      *     Replace with {@link #ACTION_RESOLVE_INSTANT_APP_PACKAGE}.
      */
@@ -1581,6 +1600,7 @@
 
     /**
      * @hide
+     * @removed
      * @deprecated Do not use. This will go away.
      *     Replace with {@link #ACTION_INSTANT_APP_RESOLVER_SETTINGS}.
      */
@@ -1823,9 +1843,7 @@
      * <p>
      * Type: String
      * </p>
-     * @hide
      */
-    @SystemApi
     public static final String EXTRA_SPLIT_NAME = "android.intent.extra.SPLIT_NAME";
 
     /**
@@ -2207,7 +2225,12 @@
      * Note that the cleared package does <em>not</em>
      * receive this broadcast. The data contains the name of the package.
      * <ul>
-     * <li> {@link #EXTRA_UID} containing the integer uid assigned to the package.
+     * <li> {@link #EXTRA_UID} containing the integer uid assigned to the package. If the
+     *      package whose data was cleared is an uninstalled instant app, then the UID
+     *      will be -1. The platform keeps some meta-data associated with instant apps
+     *      after they are uninstalled.
+     * <li> {@link #EXTRA_PACKAGE_NAME} containing the package name only if the cleared
+     *      data was for an instant app.
      * </ul>
      *
      * <p class="note">This is a protected intent that can only be sent
@@ -3389,6 +3412,7 @@
     /**
      * Deprecated - use ACTION_FACTORY_RESET instead.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3524,6 +3548,7 @@
      *
      * <p class="note">This is a protected intent that can only be sent by the system.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3538,6 +3563,7 @@
      * @see android.telephony.ServiceState#STATE_OUT_OF_SERVICE
      * @see android.telephony.ServiceState#STATE_POWER_OFF
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3550,6 +3576,7 @@
      * @see android.telephony.ServiceState#STATE_OUT_OF_SERVICE
      * @see android.telephony.ServiceState#STATE_POWER_OFF
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3559,6 +3586,7 @@
      * An integer extra used with {@link #ACTION_SERVICE_STATE} which indicates the voice roaming
      * type.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3568,6 +3596,7 @@
      * An integer extra used with {@link #ACTION_SERVICE_STATE} which indicates the data roaming
      * type.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3578,6 +3607,7 @@
      * registered voice operator name in long alphanumeric format.
      * {@code null} if the operator name is not known or unregistered.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3588,6 +3618,7 @@
      * registered voice operator name in short alphanumeric format.
      * {@code null} if the operator name is not known or unregistered.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3598,6 +3629,7 @@
      * (Mobile Country Code, 3 digits) and MNC (Mobile Network code, 2-3 digits) for the mobile
      * network.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3608,6 +3640,7 @@
      * registered data operator name in long alphanumeric format.
      * {@code null} if the operator name is not known or unregistered.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3618,6 +3651,7 @@
      * registered data operator name in short alphanumeric format.
      * {@code null} if the operator name is not known or unregistered.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3628,6 +3662,7 @@
      * (Mobile Country Code, 3 digits) and MNC (Mobile Network code, 2-3 digits) for the
      * data operator.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3638,6 +3673,7 @@
      * network selection mode is manual.
      * Will be {@code true} if manual mode, {@code false} if automatic mode.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3647,6 +3683,7 @@
      * An integer extra used with {@link #ACTION_SERVICE_STATE} which represents the current voice
      * radio technology.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3656,6 +3693,7 @@
      * An integer extra used with {@link #ACTION_SERVICE_STATE} which represents the current data
      * radio technology.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3666,6 +3704,7 @@
      * support on CDMA network.
      * Will be {@code true} if support, {@code false} otherwise.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3675,6 +3714,7 @@
      * An integer extra used with {@link #ACTION_SERVICE_STATE} which represents the CDMA network
      * id. {@code Integer.MAX_VALUE} if unknown.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3684,6 +3724,7 @@
      * An integer extra used with {@link #ACTION_SERVICE_STATE} which represents the CDMA system id.
      * {@code Integer.MAX_VALUE} if unknown.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3693,6 +3734,7 @@
      * An integer extra used with {@link #ACTION_SERVICE_STATE} represents the TSB-58 roaming
      * indicator if registered on a CDMA or EVDO system or {@code -1} if not.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3702,6 +3744,7 @@
      * An integer extra used with {@link #ACTION_SERVICE_STATE} represents the default roaming
      * indicator from the PRL if registered on a CDMA or EVDO system {@code -1} if not.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3712,6 +3755,7 @@
      * only mode.
      * {@code true} if in emergency only mode, {@code false} otherwise.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3722,6 +3766,7 @@
      * registration state is roaming.
      * {@code true} if registration indicates roaming, {@code false} otherwise
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3733,6 +3778,7 @@
      * aggregation is in use.
      * {@code true} if carrier aggregation is in use, {@code false} otherwise.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3742,6 +3788,7 @@
      * An integer extra used with {@link #ACTION_SERVICE_STATE} representing the offset which
      * is reduced from the rsrp threshold while calculating signal strength level.
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -3908,6 +3955,16 @@
     @SdkConstant(SdkConstantType.INTENT_CATEGORY)
     public static final String CATEGORY_SETUP_WIZARD = "android.intent.category.SETUP_WIZARD";
     /**
+     * This is the home activity, that is the activity that serves as the launcher app
+     * from there the user can start other apps. Often components with lower/higher
+     * priority intent filters handle the home intent, for example SetupWizard, to
+     * setup the device and we need to be able to distinguish the home app from these
+     * setup helpers.
+     * @hide
+     */
+    @SdkConstant(SdkConstantType.INTENT_CATEGORY)
+    public static final String CATEGORY_LAUNCHER_APP = "android.intent.category.LAUNCHER_APP";
+    /**
      * This activity is a preference panel.
      */
     @SdkConstant(SdkConstantType.INTENT_CATEGORY)
@@ -5592,6 +5649,16 @@
 
     // ---------------------------------------------------------------------
 
+    private static final int COPY_MODE_ALL = 0;
+    private static final int COPY_MODE_FILTER = 1;
+    private static final int COPY_MODE_HISTORY = 2;
+
+    /** @hide */
+    @IntDef(value = {COPY_MODE_ALL, COPY_MODE_FILTER, COPY_MODE_HISTORY})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface CopyMode {}
+
+
     /**
      * Create an empty intent.
      */
@@ -5602,28 +5669,46 @@
      * Copy constructor.
      */
     public Intent(Intent o) {
+        this(o, COPY_MODE_ALL);
+    }
+
+    private Intent(Intent o, @CopyMode int copyMode) {
         this.mAction = o.mAction;
         this.mData = o.mData;
         this.mType = o.mType;
         this.mPackage = o.mPackage;
         this.mComponent = o.mComponent;
-        this.mFlags = o.mFlags;
-        this.mContentUserHint = o.mContentUserHint;
-        this.mLaunchToken = o.mLaunchToken;
+
         if (o.mCategories != null) {
-            this.mCategories = new ArraySet<String>(o.mCategories);
+            this.mCategories = new ArraySet<>(o.mCategories);
         }
-        if (o.mExtras != null) {
-            this.mExtras = new Bundle(o.mExtras);
-        }
-        if (o.mSourceBounds != null) {
-            this.mSourceBounds = new Rect(o.mSourceBounds);
-        }
-        if (o.mSelector != null) {
-            this.mSelector = new Intent(o.mSelector);
-        }
-        if (o.mClipData != null) {
-            this.mClipData = new ClipData(o.mClipData);
+
+        if (copyMode != COPY_MODE_FILTER) {
+            this.mFlags = o.mFlags;
+            this.mContentUserHint = o.mContentUserHint;
+            this.mLaunchToken = o.mLaunchToken;
+            if (o.mSourceBounds != null) {
+                this.mSourceBounds = new Rect(o.mSourceBounds);
+            }
+            if (o.mSelector != null) {
+                this.mSelector = new Intent(o.mSelector);
+            }
+
+            if (copyMode != COPY_MODE_HISTORY) {
+                if (o.mExtras != null) {
+                    this.mExtras = new Bundle(o.mExtras);
+                }
+                if (o.mClipData != null) {
+                    this.mClipData = new ClipData(o.mClipData);
+                }
+            } else {
+                if (o.mExtras != null && !o.mExtras.maybeIsEmpty()) {
+                    this.mExtras = Bundle.STRIPPED;
+                }
+
+                // Also set "stripped" clip data when we ever log mClipData in the (broadcast)
+                // history.
+            }
         }
     }
 
@@ -5632,23 +5717,12 @@
         return new Intent(this);
     }
 
-    private Intent(Intent o, boolean all) {
-        this.mAction = o.mAction;
-        this.mData = o.mData;
-        this.mType = o.mType;
-        this.mPackage = o.mPackage;
-        this.mComponent = o.mComponent;
-        if (o.mCategories != null) {
-            this.mCategories = new ArraySet<String>(o.mCategories);
-        }
-    }
-
     /**
      * Make a clone of only the parts of the Intent that are relevant for
      * filter matching: the action, data, type, component, and categories.
      */
     public @NonNull Intent cloneFilter() {
-        return new Intent(this, false);
+        return new Intent(this, COPY_MODE_FILTER);
     }
 
     /**
@@ -6904,7 +6978,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if none was found.
      *
      * @deprecated
@@ -6922,7 +6996,7 @@
      * @param defaultValue the value to be returned if no value of the desired
      * type is stored with the given name.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or the default value if none was found.
      *
      * @see #putExtra(String, boolean)
@@ -6939,7 +7013,7 @@
      * @param defaultValue the value to be returned if no value of the desired
      * type is stored with the given name.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or the default value if none was found.
      *
      * @see #putExtra(String, byte)
@@ -6956,7 +7030,7 @@
      * @param defaultValue the value to be returned if no value of the desired
      * type is stored with the given name.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or the default value if none was found.
      *
      * @see #putExtra(String, short)
@@ -6973,7 +7047,7 @@
      * @param defaultValue the value to be returned if no value of the desired
      * type is stored with the given name.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or the default value if none was found.
      *
      * @see #putExtra(String, char)
@@ -6990,7 +7064,7 @@
      * @param defaultValue the value to be returned if no value of the desired
      * type is stored with the given name.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or the default value if none was found.
      *
      * @see #putExtra(String, int)
@@ -7007,7 +7081,7 @@
      * @param defaultValue the value to be returned if no value of the desired
      * type is stored with the given name.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or the default value if none was found.
      *
      * @see #putExtra(String, long)
@@ -7024,7 +7098,7 @@
      * @param defaultValue the value to be returned if no value of the desired
      * type is stored with the given name.
      *
-     * @return the value of an item that previously added with putExtra(),
+     * @return the value of an item previously added with putExtra(),
      * or the default value if no such item is present
      *
      * @see #putExtra(String, float)
@@ -7041,7 +7115,7 @@
      * @param defaultValue the value to be returned if no value of the desired
      * type is stored with the given name.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or the default value if none was found.
      *
      * @see #putExtra(String, double)
@@ -7056,7 +7130,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no String value was found.
      *
      * @see #putExtra(String, String)
@@ -7070,7 +7144,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no CharSequence value was found.
      *
      * @see #putExtra(String, CharSequence)
@@ -7084,7 +7158,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no Parcelable value was found.
      *
      * @see #putExtra(String, Parcelable)
@@ -7098,7 +7172,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no Parcelable[] value was found.
      *
      * @see #putExtra(String, Parcelable[])
@@ -7112,8 +7186,9 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
-     * or null if no ArrayList<Parcelable> value was found.
+     * @return the value of an item previously added with
+     * putParcelableArrayListExtra(), or null if no
+     * ArrayList<Parcelable> value was found.
      *
      * @see #putParcelableArrayListExtra(String, ArrayList)
      */
@@ -7126,7 +7201,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no Serializable value was found.
      *
      * @see #putExtra(String, Serializable)
@@ -7140,8 +7215,9 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
-     * or null if no ArrayList<Integer> value was found.
+     * @return the value of an item previously added with
+     * putIntegerArrayListExtra(), or null if no
+     * ArrayList<Integer> value was found.
      *
      * @see #putIntegerArrayListExtra(String, ArrayList)
      */
@@ -7154,8 +7230,9 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
-     * or null if no ArrayList<String> value was found.
+     * @return the value of an item previously added with
+     * putStringArrayListExtra(), or null if no
+     * ArrayList<String> value was found.
      *
      * @see #putStringArrayListExtra(String, ArrayList)
      */
@@ -7168,8 +7245,9 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
-     * or null if no ArrayList<CharSequence> value was found.
+     * @return the value of an item previously added with
+     * putCharSequenceArrayListExtra, or null if no
+     * ArrayList<CharSequence> value was found.
      *
      * @see #putCharSequenceArrayListExtra(String, ArrayList)
      */
@@ -7182,7 +7260,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no boolean array value was found.
      *
      * @see #putExtra(String, boolean[])
@@ -7196,7 +7274,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no byte array value was found.
      *
      * @see #putExtra(String, byte[])
@@ -7210,7 +7288,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no short array value was found.
      *
      * @see #putExtra(String, short[])
@@ -7224,7 +7302,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no char array value was found.
      *
      * @see #putExtra(String, char[])
@@ -7238,7 +7316,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no int array value was found.
      *
      * @see #putExtra(String, int[])
@@ -7252,7 +7330,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no long array value was found.
      *
      * @see #putExtra(String, long[])
@@ -7266,7 +7344,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no float array value was found.
      *
      * @see #putExtra(String, float[])
@@ -7280,7 +7358,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no double array value was found.
      *
      * @see #putExtra(String, double[])
@@ -7294,7 +7372,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no String array value was found.
      *
      * @see #putExtra(String, String[])
@@ -7308,7 +7386,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no CharSequence array value was found.
      *
      * @see #putExtra(String, CharSequence[])
@@ -7322,7 +7400,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no Bundle value was found.
      *
      * @see #putExtra(String, Bundle)
@@ -7336,7 +7414,7 @@
      *
      * @param name The name of the desired item.
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or null if no IBinder value was found.
      *
      * @see #putExtra(String, IBinder)
@@ -7356,7 +7434,7 @@
      * @param defaultValue The default value to return in case no item is
      * associated with the key 'name'
      *
-     * @return the value of an item that previously added with putExtra()
+     * @return the value of an item previously added with putExtra(),
      * or defaultValue if none was found.
      *
      * @see #putExtra
@@ -7400,6 +7478,29 @@
     }
 
     /**
+     * @return Whether {@link #maybeStripForHistory} will return an lightened intent or
+     * return itself as-is.
+     * @hide
+     */
+    public boolean canStripForHistory() {
+        return ((mExtras != null) && mExtras.isParcelled()) || (mClipData != null);
+    }
+
+    /**
+     * Call it when the system needs to keep an intent for logging purposes to remove fields
+     * that are not needed for logging.
+     * @hide
+     */
+    public Intent maybeStripForHistory() {
+        // TODO Scan and remove possibly heavy instances like Bitmaps from unparcelled extras?
+
+        if (!canStripForHistory()) {
+            return this;
+        }
+        return new Intent(this, COPY_MODE_HISTORY);
+    }
+
+    /**
      * Retrieve any special flags associated with this intent.  You will
      * normally just set them with {@link #setFlags} and let the system
      * take the appropriate action with them.
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index 18f9e53..e0c3f75 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -20,7 +20,6 @@
 import android.content.Intent;
 import android.content.res.Configuration;
 import android.content.res.Configuration.NativeConfig;
-import android.content.res.TypedArray;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.Printer;
@@ -439,6 +438,21 @@
      * @hide
      */
     public static final int FLAG_SUPPORTS_PICTURE_IN_PICTURE = 0x400000;
+
+    /**
+     * Bit in {@link #flags} indicating if the activity should be shown when locked.
+     * See {@link android.R.attr#showWhenLocked}
+     * @hide
+     */
+    public static final int FLAG_SHOW_WHEN_LOCKED = 0x800000;
+
+    /**
+     * Bit in {@link #flags} indicating if the screen should turn on when starting the activity.
+     * See {@link android.R.attr#turnScreenOn}
+     * @hide
+     */
+    public static final int FLAG_TURN_SCREEN_ON = 0x1000000;
+
     /**
      * @hide Bit in {@link #flags}: If set, this component will only be seen
      * by the system user.  Only works with broadcast receivers.  Set from the
@@ -460,6 +474,7 @@
      * thrown. Set from the {@link android.R.attr#allowEmbedded} attribute.
      */
     public static final int FLAG_ALLOW_EMBEDDED = 0x80000000;
+
     /**
      * Options that have been set in the activity declaration in the
      * manifest.
@@ -976,20 +991,12 @@
      * Returns true if the activity's orientation is fixed.
      * @hide
      */
-    public boolean isFixedOrientation() {
+    boolean isFixedOrientation() {
         return isFixedOrientationLandscape() || isFixedOrientationPortrait()
                 || screenOrientation == SCREEN_ORIENTATION_LOCKED;
     }
 
     /**
-     * Returns true if the specified orientation is considered fixed.
-     * @hide
-     */
-    static public boolean isFixedOrientation(int orientation) {
-        return isFixedOrientationLandscape(orientation) || isFixedOrientationPortrait(orientation);
-    }
-
-    /**
      * Returns true if the activity's orientation is fixed to landscape.
      * @hide
      */
@@ -1079,12 +1086,12 @@
     }
 
     /** @hide */
-    public void dump(Printer pw, String prefix, int flags) {
+    public void dump(Printer pw, String prefix, int dumpFlags) {
         super.dumpFront(pw, prefix);
         if (permission != null) {
             pw.println(prefix + "permission=" + permission);
         }
-        if ((flags&DUMP_FLAG_DETAILS) != 0) {
+        if ((dumpFlags & DUMP_FLAG_DETAILS) != 0) {
             pw.println(prefix + "taskAffinity=" + taskAffinity
                     + " targetActivity=" + targetActivity
                     + " persistableMode=" + persistableModeToString());
@@ -1103,7 +1110,7 @@
         if (uiOptions != 0) {
             pw.println(prefix + " uiOptions=0x" + Integer.toHexString(uiOptions));
         }
-        if ((flags&DUMP_FLAG_DETAILS) != 0) {
+        if ((dumpFlags & DUMP_FLAG_DETAILS) != 0) {
             pw.println(prefix + "lockTaskLaunchMode="
                     + lockTaskLaunchModeToString(lockTaskLaunchMode));
         }
@@ -1119,7 +1126,7 @@
         if (maxAspectRatio != 0) {
             pw.println(prefix + "maxAspectRatio=" + maxAspectRatio);
         }
-        super.dumpBack(pw, prefix, flags);
+        super.dumpBack(pw, prefix, dumpFlags);
     }
 
     public String toString() {
@@ -1168,25 +1175,6 @@
         dest.writeFloat(maxAspectRatio);
     }
 
-    /**
-     * Determines whether the {@link Activity} is considered translucent or floating.
-     * @hide
-     */
-    public static boolean isTranslucentOrFloating(TypedArray attributes) {
-        final boolean isTranslucent =
-                attributes.getBoolean(com.android.internal.R.styleable.Window_windowIsTranslucent,
-                        false);
-        final boolean isSwipeToDismiss = !attributes.hasValue(
-                com.android.internal.R.styleable.Window_windowIsTranslucent)
-                && attributes.getBoolean(
-                        com.android.internal.R.styleable.Window_windowSwipeToDismiss, false);
-        final boolean isFloating =
-                attributes.getBoolean(com.android.internal.R.styleable.Window_windowIsFloating,
-                        false);
-
-        return isFloating || isTranslucent || isSwipeToDismiss;
-    }
-
     public static final Parcelable.Creator<ActivityInfo> CREATOR
             = new Parcelable.Creator<ActivityInfo>() {
         public ActivityInfo createFromParcel(Parcel source) {
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index 06f7916..664bcbca 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -572,7 +572,7 @@
     public static final int PRIVATE_FLAG_STATIC_SHARED_LIBRARY = 1 << 14;
 
     /**
-     * Value for {@linl #privateFlags}: When set, the application will only have its splits loaded
+     * Value for {@link #privateFlags}: When set, the application will only have its splits loaded
      * if they are required to load a component. Splits can be loaded on demand using the
      * {@link Context#createContextForSplit(String)} API.
      * @hide
@@ -580,10 +580,40 @@
     public static final int PRIVATE_FLAG_ISOLATED_SPLIT_LOADING = 1 << 15;
 
     /**
-     * Private/hidden flags. See {@code PRIVATE_FLAG_...} constants.
-     * {@hide}
+     * Value for {@link #privateFlags}: When set, the application was installed as
+     * a virtual preload.
+     * @hide
      */
-    public int privateFlags;
+    public static final int PRIVATE_FLAG_VIRTUAL_PRELOAD = 1 << 16;
+
+    /** @hide */
+    @IntDef(flag = true, prefix = { "PRIVATE_FLAG_" }, value = {
+            PRIVATE_FLAG_HIDDEN,
+            PRIVATE_FLAG_CANT_SAVE_STATE,
+            PRIVATE_FLAG_FORWARD_LOCK,
+            PRIVATE_FLAG_PRIVILEGED,
+            PRIVATE_FLAG_HAS_DOMAIN_URLS,
+            PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE,
+            PRIVATE_FLAG_DIRECT_BOOT_AWARE,
+            PRIVATE_FLAG_INSTANT,
+            PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE,
+            PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER,
+            PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE,
+            PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE,
+            PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION,
+            PRIVATE_FLAG_BACKUP_IN_FOREGROUND,
+            PRIVATE_FLAG_STATIC_SHARED_LIBRARY,
+            PRIVATE_FLAG_ISOLATED_SPLIT_LOADING,
+            PRIVATE_FLAG_VIRTUAL_PRELOAD,
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface ApplicationInfoPrivateFlags {}
+
+    /**
+     * Private/hidden flags. See {@code PRIVATE_FLAG_...} constants.
+     * @hide
+     */
+    public @ApplicationInfoPrivateFlags int privateFlags;
 
     /**
      * @hide
@@ -688,6 +718,10 @@
      * Cycles do not exist because they are illegal and screened for during installation.
      *
      * May be null if no splits are installed, or if no dependencies exist between them.
+     *
+     * NOTE: Any change to the way split dependencies are stored must update the logic that
+     *       creates the class loader context for dexopt (DexoptUtils#getClassLoaderContexts).
+     *
      * @hide
      */
     public SparseArray<int[]> splitDependencies;
@@ -1005,27 +1039,33 @@
         }
     }
 
+    /** @hide */
+    public String classLoaderName;
+
+    /** @hide */
+    public String[] splitClassLoaderNames;
+
     public void dump(Printer pw, String prefix) {
         dump(pw, prefix, DUMP_FLAG_ALL);
     }
 
     /** @hide */
-    public void dump(Printer pw, String prefix, int flags) {
+    public void dump(Printer pw, String prefix, int dumpFlags) {
         super.dumpFront(pw, prefix);
-        if ((flags&DUMP_FLAG_DETAILS) != 0 && className != null) {
+        if ((dumpFlags & DUMP_FLAG_DETAILS) != 0 && className != null) {
             pw.println(prefix + "className=" + className);
         }
         if (permission != null) {
             pw.println(prefix + "permission=" + permission);
         }
         pw.println(prefix + "processName=" + processName);
-        if ((flags&DUMP_FLAG_DETAILS) != 0) {
+        if ((dumpFlags & DUMP_FLAG_DETAILS) != 0) {
             pw.println(prefix + "taskAffinity=" + taskAffinity);
         }
         pw.println(prefix + "uid=" + uid + " flags=0x" + Integer.toHexString(flags)
                 + " privateFlags=0x" + Integer.toHexString(privateFlags)
                 + " theme=0x" + Integer.toHexString(theme));
-        if ((flags&DUMP_FLAG_DETAILS) != 0) {
+        if ((dumpFlags & DUMP_FLAG_DETAILS) != 0) {
             pw.println(prefix + "requiresSmallestWidthDp=" + requiresSmallestWidthDp
                     + " compatibleWidthLimitDp=" + compatibleWidthLimitDp
                     + " largestWidthLimitDp=" + largestWidthLimitDp);
@@ -1044,24 +1084,31 @@
         if (resourceDirs != null) {
             pw.println(prefix + "resourceDirs=" + Arrays.toString(resourceDirs));
         }
-        if ((flags&DUMP_FLAG_DETAILS) != 0 && seInfo != null) {
+        if ((dumpFlags & DUMP_FLAG_DETAILS) != 0 && seInfo != null) {
             pw.println(prefix + "seinfo=" + seInfo);
             pw.println(prefix + "seinfoUser=" + seInfoUser);
         }
         pw.println(prefix + "dataDir=" + dataDir);
-        if ((flags&DUMP_FLAG_DETAILS) != 0) {
+        if ((dumpFlags & DUMP_FLAG_DETAILS) != 0) {
             pw.println(prefix + "deviceProtectedDataDir=" + deviceProtectedDataDir);
             pw.println(prefix + "credentialProtectedDataDir=" + credentialProtectedDataDir);
             if (sharedLibraryFiles != null) {
                 pw.println(prefix + "sharedLibraryFiles=" + Arrays.toString(sharedLibraryFiles));
             }
         }
+        if (classLoaderName != null) {
+            pw.println(prefix + "classLoaderName=" + classLoaderName);
+        }
+        if (!ArrayUtils.isEmpty(splitClassLoaderNames)) {
+            pw.println(prefix + "splitClassLoaderNames=" + Arrays.toString(splitClassLoaderNames));
+        }
+
         pw.println(prefix + "enabled=" + enabled
                 + " minSdkVersion=" + minSdkVersion
                 + " targetSdkVersion=" + targetSdkVersion
                 + " versionCode=" + versionCode
                 + " targetSandboxVersion=" + targetSandboxVersion);
-        if ((flags&DUMP_FLAG_DETAILS) != 0) {
+        if ((dumpFlags & DUMP_FLAG_DETAILS) != 0) {
             if (manageSpaceActivityName != null) {
                 pw.println(prefix + "manageSpaceActivityName=" + manageSpaceActivityName);
             }
@@ -1178,6 +1225,8 @@
         networkSecurityConfigRes = orig.networkSecurityConfigRes;
         category = orig.category;
         targetSandboxVersion = orig.targetSandboxVersion;
+        classLoaderName = orig.classLoaderName;
+        splitClassLoaderNames = orig.splitClassLoaderNames;
     }
 
     public String toString() {
@@ -1246,6 +1295,8 @@
         dest.writeInt(networkSecurityConfigRes);
         dest.writeInt(category);
         dest.writeInt(targetSandboxVersion);
+        dest.writeString(classLoaderName);
+        dest.writeStringArray(splitClassLoaderNames);
     }
 
     public static final Parcelable.Creator<ApplicationInfo> CREATOR
@@ -1311,6 +1362,8 @@
         networkSecurityConfigRes = source.readInt();
         category = source.readInt();
         targetSandboxVersion = source.readInt();
+        classLoaderName = source.readString();
+        splitClassLoaderNames = source.readStringArray();
     }
 
     /**
@@ -1459,6 +1512,11 @@
         return (privateFlags & ApplicationInfo.PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE) != 0;
     }
 
+    /** @hide */
+    public boolean isEncryptionAware() {
+        return isDirectBootAware() || isPartiallyDirectBootAware();
+    }
+
     /**
      * @hide
      */
@@ -1490,6 +1548,13 @@
     }
 
     /**
+     * Returns whether or not this application was installed as a virtual preload.
+     */
+    public boolean isVirtualPreload() {
+        return (privateFlags & PRIVATE_FLAG_VIRTUAL_PRELOAD) != 0;
+    }
+
+    /**
      * @hide
      */
     @Override protected ApplicationInfo getApplicationInfo() {
diff --git a/core/java/android/content/pm/AuxiliaryResolveInfo.java b/core/java/android/content/pm/AuxiliaryResolveInfo.java
index 323733c..067363d 100644
--- a/core/java/android/content/pm/AuxiliaryResolveInfo.java
+++ b/core/java/android/content/pm/AuxiliaryResolveInfo.java
@@ -18,6 +18,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.content.ComponentName;
 import android.content.Intent;
 import android.content.IntentFilter;
 
@@ -35,6 +36,8 @@
     public final InstantAppResolveInfo resolveInfo;
     /** The resolved package. Copied from {@link #resolveInfo}. */
     public final String packageName;
+    /** The activity to launch if there's an installation failure. */
+    public final ComponentName installFailureActivity;
     /** The resolve split. Copied from the matched filter in {@link #resolveInfo}. */
     public final String splitName;
     /** Whether or not instant resolution needs the second phase */
@@ -61,15 +64,18 @@
         this.needsPhaseTwo = needsPhase2;
         this.versionCode = resolveInfo.getVersionCode();
         this.failureIntent = failureIntent;
+        this.installFailureActivity = null;
     }
 
     /** Create a response for installing a split on demand. */
     public AuxiliaryResolveInfo(@NonNull String packageName,
             @Nullable String splitName,
+            @Nullable ComponentName failureActivity,
             int versionCode,
             @Nullable Intent failureIntent) {
         super();
         this.packageName = packageName;
+        this.installFailureActivity = failureActivity;
         this.splitName = splitName;
         this.versionCode = versionCode;
         this.resolveInfo = null;
diff --git a/core/java/android/content/pm/BaseParceledListSlice.java b/core/java/android/content/pm/BaseParceledListSlice.java
index aaa5f19..5877a09 100644
--- a/core/java/android/content/pm/BaseParceledListSlice.java
+++ b/core/java/android/content/pm/BaseParceledListSlice.java
@@ -102,7 +102,7 @@
                 return;
             }
             while (i < N && reply.readInt() != 0) {
-                final T parcelable = reply.readCreator(creator, loader);
+                final T parcelable = readCreator(creator, reply, loader);
                 verifySameType(listElementClass, parcelable.getClass());
 
                 mList.add(parcelable);
diff --git a/core/java/android/content/pm/ComponentInfo.java b/core/java/android/content/pm/ComponentInfo.java
index 53be953..6b1222f 100644
--- a/core/java/android/content/pm/ComponentInfo.java
+++ b/core/java/android/content/pm/ComponentInfo.java
@@ -183,12 +183,12 @@
     protected void dumpBack(Printer pw, String prefix) {
         dumpBack(pw, prefix, DUMP_FLAG_ALL);
     }
-    
-    void dumpBack(Printer pw, String prefix, int flags) {
-        if ((flags&DUMP_FLAG_APPLICATION) != 0) {
+
+    void dumpBack(Printer pw, String prefix, int dumpFlags) {
+        if ((dumpFlags & DUMP_FLAG_APPLICATION) != 0) {
             if (applicationInfo != null) {
                 pw.println(prefix + "ApplicationInfo:");
-                applicationInfo.dump(pw, prefix + "  ", flags);
+                applicationInfo.dump(pw, prefix + "  ", dumpFlags);
             } else {
                 pw.println(prefix + "ApplicationInfo: null");
             }
diff --git a/core/java/android/content/pm/EphemeralIntentFilter.java b/core/java/android/content/pm/EphemeralIntentFilter.java
index f7d83a9..1dbbf81 100644
--- a/core/java/android/content/pm/EphemeralIntentFilter.java
+++ b/core/java/android/content/pm/EphemeralIntentFilter.java
@@ -29,6 +29,7 @@
 /**
  * Information about an ephemeral application intent filter.
  * @hide
+ * @removed
  */
 @Deprecated
 @SystemApi
diff --git a/core/java/android/content/pm/EphemeralResolveInfo.java b/core/java/android/content/pm/EphemeralResolveInfo.java
index a6e8268..12131a3 100644
--- a/core/java/android/content/pm/EphemeralResolveInfo.java
+++ b/core/java/android/content/pm/EphemeralResolveInfo.java
@@ -34,6 +34,7 @@
 /**
  * Information about an ephemeral application.
  * @hide
+ * @removed
  */
 @Deprecated
 @SystemApi
diff --git a/core/java/android/content/pm/IPackageInstallerSession.aidl b/core/java/android/content/pm/IPackageInstallerSession.aidl
index 2a3fac3..0b16852 100644
--- a/core/java/android/content/pm/IPackageInstallerSession.aidl
+++ b/core/java/android/content/pm/IPackageInstallerSession.aidl
@@ -32,6 +32,7 @@
     void removeSplit(String splitName);
 
     void close();
-    void commit(in IntentSender statusReceiver);
+    void commit(in IntentSender statusReceiver, boolean forTransferred);
+    void transfer(in String packageName);
     void abandon();
 }
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 4b44a17..0e70645 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -128,6 +128,7 @@
     String[] getPackagesForUid(int uid);
 
     String getNameForUid(int uid);
+    String[] getNamesForUids(in int[] uids);
 
     int getUidForSharedUser(String sharedUserName);
 
@@ -469,11 +470,19 @@
      * 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 dexPats the list of the dex files paths that have been loaded
+     * @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}.
+     *     The dex files found in the first class path will be recorded in the usage file.
      * @param loaderIsa the ISA of the loader process
      */
-    oneway void notifyDexLoad(String loadingPackageName, in List<String> dexPaths,
-            String loaderIsa);
+    oneway void notifyDexLoad(String loadingPackageName, in List<String> classLoadersNames,
+            in List<String> classPaths, String loaderIsa);
 
     /**
      * Register an application dex module with the package manager.
@@ -508,21 +517,13 @@
              in boolean isSharedModule, IDexModuleRegisterCallback callback);
 
     /**
-     * Ask the package manager to perform a dex-opt for the given reason. The package
-     * manager will map the reason to a compiler filter according to the current system
-     * configuration.
-     */
-    boolean performDexOpt(String packageName, boolean checkProfiles,
-            int compileReason, boolean force, boolean bootComplete);
-
-    /**
      * Ask the package manager to perform a dex-opt with the given compiler filter.
      *
      * Note: exposed only for the shell command to allow moving packages explicitly to a
      *       definite state.
      */
     boolean performDexOptMode(String packageName, boolean checkProfiles,
-            String targetCompilerFilter, boolean force, boolean bootComplete);
+            String targetCompilerFilter, boolean force, boolean bootComplete, String splitName);
 
     /**
      * Ask the package manager to perform a dex-opt with the given compiler filter on the
diff --git a/core/java/android/content/pm/InstantAppRequest.java b/core/java/android/content/pm/InstantAppRequest.java
index 27d2828..38f0225 100644
--- a/core/java/android/content/pm/InstantAppRequest.java
+++ b/core/java/android/content/pm/InstantAppRequest.java
@@ -38,14 +38,18 @@
      * Optional extra bundle provided by the source application to the installer for additional
      * verification. */
     public final Bundle verificationBundle;
+    /** Whether resolution occurs because an application is starting */
+    public final boolean resolveForStart;
 
     public InstantAppRequest(AuxiliaryResolveInfo responseObj, Intent origIntent,
-            String resolvedType, String callingPackage, int userId, Bundle verificationBundle) {
+            String resolvedType, String callingPackage, int userId, Bundle verificationBundle,
+            boolean resolveForStart) {
         this.responseObj = responseObj;
         this.origIntent = origIntent;
         this.resolvedType = resolvedType;
         this.callingPackage = callingPackage;
         this.userId = userId;
         this.verificationBundle = verificationBundle;
+        this.resolveForStart = resolveForStart;
     }
 }
diff --git a/core/java/android/content/pm/InstantAppResolveInfo.java b/core/java/android/content/pm/InstantAppResolveInfo.java
index dcaf66e..22e994f 100644
--- a/core/java/android/content/pm/InstantAppResolveInfo.java
+++ b/core/java/android/content/pm/InstantAppResolveInfo.java
@@ -37,7 +37,7 @@
 @SystemApi
 public final class InstantAppResolveInfo implements Parcelable {
     /** Algorithm that will be used to generate the domain digest */
-    public static final String SHA_ALGORITHM = "SHA-256";
+    private static final String SHA_ALGORITHM = "SHA-256";
 
     private final InstantAppDigest mDigest;
     private final String mPackageName;
diff --git a/core/java/android/content/pm/PackageBackwardCompatibility.java b/core/java/android/content/pm/PackageBackwardCompatibility.java
new file mode 100644
index 0000000..4de160b
--- /dev/null
+++ b/core/java/android/content/pm/PackageBackwardCompatibility.java
@@ -0,0 +1,78 @@
+/*
+ * 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.content.pm;
+
+import android.annotation.Nullable;
+import android.content.pm.PackageParser.Package;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.ArrayUtils;
+
+import java.util.ArrayList;
+
+/**
+ * Modifies {@link Package} in order to maintain backwards compatibility.
+ *
+ * @hide
+ */
+@VisibleForTesting
+public class PackageBackwardCompatibility {
+
+    private static final String ANDROID_TEST_MOCK = "android.test.mock";
+
+    private static final String ANDROID_TEST_RUNNER = "android.test.runner";
+
+    /**
+     * Modify the shared libraries in the supplied {@link Package} to maintain backwards
+     * compatibility.
+     *
+     * @param pkg the {@link Package} to modify.
+     */
+    @VisibleForTesting
+    public static void modifySharedLibraries(Package pkg) {
+        ArrayList<String> usesLibraries = pkg.usesLibraries;
+        ArrayList<String> usesOptionalLibraries = pkg.usesOptionalLibraries;
+
+        usesLibraries = orgApacheHttpLegacy(usesLibraries);
+        usesOptionalLibraries = orgApacheHttpLegacy(usesOptionalLibraries);
+
+        // 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.
+        boolean androidTestMockPresent = ArrayUtils.contains(usesLibraries, ANDROID_TEST_MOCK)
+                || ArrayUtils.contains(usesOptionalLibraries, ANDROID_TEST_MOCK);
+        if (ArrayUtils.contains(usesLibraries, ANDROID_TEST_RUNNER) && !androidTestMockPresent) {
+            usesLibraries.add(ANDROID_TEST_MOCK);
+        }
+        if (ArrayUtils.contains(usesOptionalLibraries, ANDROID_TEST_RUNNER)
+                && !androidTestMockPresent) {
+            usesOptionalLibraries.add(ANDROID_TEST_MOCK);
+        }
+
+        pkg.usesLibraries = usesLibraries;
+        pkg.usesOptionalLibraries = usesOptionalLibraries;
+    }
+
+    private static ArrayList<String> orgApacheHttpLegacy(@Nullable ArrayList<String> libraries) {
+        // "org.apache.http.legacy" is now a part of the boot classpath so it doesn't need
+        // to be an explicit dependency.
+        //
+        // A future change will remove this library from the boot classpath, at which point
+        // all apps that target SDK 21 and earlier will have it automatically added to their
+        // dependency lists.
+        return ArrayUtils.remove(libraries, "org.apache.http.legacy");
+    }
+}
diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java
index 7f11985..3230ee7 100644
--- a/core/java/android/content/pm/PackageInfo.java
+++ b/core/java/android/content/pm/PackageInfo.java
@@ -187,8 +187,17 @@
     public static final int REQUESTED_PERMISSION_GRANTED = 1<<1;
 
     /**
-     * Array of all signatures read from the package file.  This is only filled
-     * in if the flag {@link PackageManager#GET_SIGNATURES} was set.
+     * Array of all signatures read from the package file. This is only filled
+     * in if the flag {@link PackageManager#GET_SIGNATURES} was set. A package
+     * must be singed with at least one certificate which is at position zero.
+     * The package can be signed with additional certificates which appear as
+     * subsequent entries.
+     *
+     * <strong>Note:</strong> Signature ordering is not guaranteed to be
+     * stable which means that a package signed with certificates A and B is
+     * equivalent to being signed with certificates B and A. This means that
+     * in case multiple signatures are reported you cannot assume the one at
+     * the first position to be the same across updates.
      */
     public Signature[] signatures;
     
@@ -252,6 +261,9 @@
     public int installLocation = INSTALL_LOCATION_INTERNAL_ONLY;
 
     /** @hide */
+    public boolean isStub;
+
+    /** @hide */
     public boolean coreApp;
 
     /** @hide */
@@ -274,8 +286,26 @@
     /** @hide */
     public int overlayPriority;
 
-    /** @hide */
-    public boolean isStaticOverlay;
+
+    /**
+     * Flag for use with {@link #overlayFlags}. Marks the overlay as static, meaning it cannot
+     * be enabled/disabled at runtime.
+     * @hide
+     */
+    public static final int FLAG_OVERLAY_STATIC = 1 << 1;
+
+    /**
+     * Flag for use with {@link #overlayFlags}. Marks the overlay as trusted (not 3rd party).
+     * @hide
+     */
+    public static final int FLAG_OVERLAY_TRUSTED = 1 << 2;
+
+    /**
+     * Modifiers that affect the state of this overlay. See {@link #FLAG_OVERLAY_STATIC},
+     * {@link #FLAG_OVERLAY_TRUSTED}.
+     * @hide
+     */
+    public int overlayFlags;
 
     public PackageInfo() {
     }
@@ -324,13 +354,14 @@
         dest.writeTypedArray(reqFeatures, parcelableFlags);
         dest.writeTypedArray(featureGroups, parcelableFlags);
         dest.writeInt(installLocation);
+        dest.writeInt(isStub ? 1 : 0);
         dest.writeInt(coreApp ? 1 : 0);
         dest.writeInt(requiredForAllUsers ? 1 : 0);
         dest.writeString(restrictedAccountType);
         dest.writeString(requiredAccountType);
         dest.writeString(overlayTarget);
-        dest.writeInt(isStaticOverlay ? 1 : 0);
         dest.writeInt(overlayPriority);
+        dest.writeInt(overlayFlags);
     }
 
     public static final Parcelable.Creator<PackageInfo> CREATOR
@@ -375,13 +406,14 @@
         reqFeatures = source.createTypedArray(FeatureInfo.CREATOR);
         featureGroups = source.createTypedArray(FeatureGroupInfo.CREATOR);
         installLocation = source.readInt();
+        isStub = source.readInt() != 0;
         coreApp = source.readInt() != 0;
         requiredForAllUsers = source.readInt() != 0;
         restrictedAccountType = source.readString();
         requiredAccountType = source.readString();
         overlayTarget = source.readString();
-        isStaticOverlay = source.readInt() != 0;
         overlayPriority = source.readInt();
+        overlayFlags = source.readInt();
 
         // The component lists were flattened with the redundant ApplicationInfo
         // instances omitted.  Distribute the canonical one here as appropriate.
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index 2add9a3..5673361 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -27,6 +27,7 @@
 import android.app.AppGlobals;
 import android.content.Intent;
 import android.content.IntentSender;
+import android.content.pm.PackageManager.DeleteFlags;
 import android.content.pm.PackageManager.InstallReason;
 import android.graphics.Bitmap;
 import android.net.Uri;
@@ -37,6 +38,7 @@
 import android.os.Parcel;
 import android.os.ParcelFileDescriptor;
 import android.os.Parcelable;
+import android.os.ParcelableException;
 import android.os.RemoteException;
 import android.os.SystemProperties;
 import android.system.ErrnoException;
@@ -443,8 +445,24 @@
      * @param statusReceiver Where to deliver the result.
      */
     public void uninstall(@NonNull String packageName, @NonNull IntentSender statusReceiver) {
-       uninstall(new VersionedPackage(packageName, PackageManager.VERSION_CODE_HIGHEST),
-               statusReceiver);
+        uninstall(packageName, 0 /*flags*/, statusReceiver);
+    }
+
+    /**
+     * Uninstall the given package, removing it completely from the device. This
+     * method is only available to the current "installer of record" for the
+     * package.
+     *
+     * @param packageName The package to uninstall.
+     * @param flags Flags for uninstall.
+     * @param statusReceiver Where to deliver the result.
+     *
+     * @hide
+     */
+    public void uninstall(@NonNull String packageName, @DeleteFlags int flags,
+            @NonNull IntentSender statusReceiver) {
+        uninstall(new VersionedPackage(packageName, PackageManager.VERSION_CODE_HIGHEST),
+                flags, statusReceiver);
     }
 
     /**
@@ -458,15 +476,34 @@
      * @param versionedPackage The versioned package to uninstall.
      * @param statusReceiver Where to deliver the result.
      */
+    public void uninstall(@NonNull VersionedPackage versionedPackage,
+            @NonNull IntentSender statusReceiver) {
+        uninstall(versionedPackage, 0 /*flags*/, statusReceiver);
+    }
+
+    /**
+     * Uninstall the given package with a specific version code, removing it
+     * completely from the device. This method is only available to the current
+     * "installer of record" for the package. If the version code of the package
+     * does not match the one passed in the versioned package argument this
+     * method is a no-op. Use {@link PackageManager#VERSION_CODE_HIGHEST} to
+     * uninstall the latest version of the package.
+     *
+     * @param versionedPackage The versioned package to uninstall.
+     * @param flags Flags for uninstall.
+     * @param statusReceiver Where to deliver the result.
+     *
+     * @hide
+     */
     @RequiresPermission(anyOf = {
             Manifest.permission.DELETE_PACKAGES,
             Manifest.permission.REQUEST_DELETE_PACKAGES})
-    public void uninstall(@NonNull VersionedPackage versionedPackage,
+    public void uninstall(@NonNull VersionedPackage versionedPackage, @DeleteFlags int flags,
             @NonNull IntentSender statusReceiver) {
         Preconditions.checkNotNull(versionedPackage, "versionedPackage cannot be null");
         try {
             mInstaller.uninstall(versionedPackage, mInstallerPackageName,
-                    0, statusReceiver, mUserId);
+                    flags, statusReceiver, mUserId);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -757,7 +794,7 @@
          * @throws IOException if trouble opening the file for writing, such as
          *             lack of disk space or unavailable media.
          * @throws SecurityException if called after the session has been
-         *             committed or abandoned.
+         *             sealed or abandoned
          */
         public @NonNull OutputStream openWrite(@NonNull String name, long offsetBytes,
                 long lengthBytes) throws IOException {
@@ -882,7 +919,68 @@
          */
         public void commit(@NonNull IntentSender statusReceiver) {
             try {
-                mSession.commit(statusReceiver);
+                mSession.commit(statusReceiver, false);
+            } catch (RemoteException e) {
+                throw e.rethrowFromSystemServer();
+            }
+        }
+
+        /**
+         * Attempt to commit a session that has been {@link #transfer(String) transferred}.
+         *
+         * <p>If the device reboots before the session has been finalized, you may commit the
+         * session again.
+         *
+         * <p>The caller of this method is responsible to ensure the safety of the session. As the
+         * session was created by another - usually less trusted - app, it is paramount that before
+         * committing <u>all</u> public and system {@link SessionInfo properties of the session}
+         * and <u>all</u> {@link #openRead(String) APKs} are verified by the caller. It might happen
+         * that new properties are added to the session with a new API revision. In this case the
+         * callers need to be updated.
+         *
+         * @param statusReceiver Callbacks called when the state of the session changes.
+         *
+         * @hide
+         */
+        @SystemApi
+        @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES)
+        public void commitTransferred(@NonNull IntentSender statusReceiver) {
+            try {
+                mSession.commit(statusReceiver, true);
+            } catch (RemoteException e) {
+                throw e.rethrowFromSystemServer();
+            }
+        }
+
+        /**
+         * Transfer the session to a new owner.
+         * <p>
+         * Only sessions that update the installing app can be transferred.
+         * <p>
+         * After the transfer to a package with a different uid all method calls on the session
+         * will cause {@link SecurityException}s.
+         * <p>
+         * Once this method is called, the session is sealed and no additional mutations beside
+         * committing it may be performed on the session.
+         *
+         * @param packageName The package of the new owner. Needs to hold the INSTALL_PACKAGES
+         *                    permission.
+         *
+         * @throws PackageManager.NameNotFoundException if the new owner could not be found.
+         * @throws SecurityException if called after the session has been committed or abandoned.
+         * @throws SecurityException if the session does not update the original installer
+         * @throws SecurityException if streams opened through
+         *                           {@link #openWrite(String, long, long) are still open.
+         */
+        public void transfer(@NonNull String packageName)
+                throws PackageManager.NameNotFoundException {
+            Preconditions.checkNotNull(packageName);
+
+            try {
+                mSession.transfer(packageName);
+            } catch (ParcelableException e) {
+                e.maybeRethrow(PackageManager.NameNotFoundException.class);
+                throw new RuntimeException(e);
             } catch (RemoteException e) {
                 throw e.rethrowFromSystemServer();
             }
@@ -1005,6 +1103,26 @@
         }
 
         /**
+         * Check if there are hidden options set.
+         *
+         * <p>Hidden options are those options that cannot be verified via public or system-api
+         * methods on {@link SessionInfo}.
+         *
+         * @return {@code true} if any hidden option is set.
+         *
+         * @hide
+         */
+        public boolean areHiddenOptionsSet() {
+            return (installFlags & (PackageManager.INSTALL_ALLOW_DOWNGRADE
+                    | PackageManager.INSTALL_DONT_KILL_APP
+                    | PackageManager.INSTALL_INSTANT_APP
+                    | PackageManager.INSTALL_FULL_APP
+                    | PackageManager.INSTALL_VIRTUAL_PRELOAD
+                    | PackageManager.INSTALL_ALLOCATE_AGGRESSIVE)) != installFlags
+                    || abiOverride != null || volumeUuid != null;
+        }
+
+        /**
          * Provide value of {@link PackageInfo#installLocation}, which may be used
          * to determine where the app will be staged. Defaults to
          * {@link PackageInfo#INSTALL_LOCATION_INTERNAL_ONLY}.
@@ -1066,10 +1184,10 @@
         }
 
         /**
-         * Sets the UID that initiated package installation. This is informational
+         * Sets the UID that initiated the package installation. This is informational
          * and may be used as a signal for anti-malware purposes.
          *
-         * @see PackageManager#EXTRA_VERIFICATION_INSTALLER_UID
+         * @see Intent#EXTRA_ORIGINATING_UID
          */
         public void setOriginatingUid(int originatingUid) {
             this.originatingUid = originatingUid;
@@ -1150,6 +1268,16 @@
         }
 
         /**
+         * Sets the install as a virtual preload. Will only have effect when called
+         * by the verifier.
+         * {@hide}
+         */
+        @SystemApi
+        public void setInstallAsVirtualPreload() {
+            installFlags |= PackageManager.INSTALL_VIRTUAL_PRELOAD;
+        }
+
+        /**
          * Set the reason for installing this package.
          */
         public void setInstallReason(@InstallReason int installReason) {
@@ -1254,6 +1382,19 @@
         public CharSequence appLabel;
 
         /** {@hide} */
+        public int installLocation;
+        /** {@hide} */
+        public Uri originatingUri;
+        /** {@hide} */
+        public int originatingUid;
+        /** {@hide} */
+        public Uri referrerUri;
+        /** {@hide} */
+        public String[] grantedRuntimePermissions;
+        /** {@hide} */
+        public int installFlags;
+
+        /** {@hide} */
         public SessionInfo() {
         }
 
@@ -1272,6 +1413,13 @@
             appPackageName = source.readString();
             appIcon = source.readParcelable(null);
             appLabel = source.readString();
+
+            installLocation = source.readInt();
+            originatingUri = source.readParcelable(null);
+            originatingUid = source.readInt();
+            referrerUri = source.readParcelable(null);
+            grantedRuntimePermissions = source.readStringArray();
+            installFlags = source.readInt();
         }
 
         /**
@@ -1395,6 +1543,130 @@
             return intent;
         }
 
+        /**
+         * Get the mode of the session as set in the constructor of the {@link SessionParams}.
+         *
+         * @return One of {@link SessionParams#MODE_FULL_INSTALL}
+         *         or {@link SessionParams#MODE_INHERIT_EXISTING}
+         */
+        public int getMode() {
+            return mode;
+        }
+
+        /**
+         * Get the value set in {@link SessionParams#setInstallLocation(int)}.
+         */
+        public int getInstallLocation() {
+            return installLocation;
+        }
+
+        /**
+         * Get the value as set in {@link SessionParams#setSize(long)}.
+         *
+         * <p>The value is a hint and does not have to match the actual size.
+         */
+        public long getSize() {
+            return sizeBytes;
+        }
+
+        /**
+         * Get the value set in {@link SessionParams#setOriginatingUri(Uri)}.
+         */
+        public @Nullable Uri getOriginatingUri() {
+            return originatingUri;
+        }
+
+        /**
+         * Get the value set in {@link SessionParams#setOriginatingUid(int)}.
+         */
+        public int getOriginatingUid() {
+            return originatingUid;
+        }
+
+        /**
+         * Get the value set in {@link SessionParams#setReferrerUri(Uri)}
+         */
+        public @Nullable Uri getReferrerUri() {
+            return referrerUri;
+        }
+
+        /**
+         * Get the value set in {@link SessionParams#setGrantedRuntimePermissions(String[])}.
+         *
+         * @hide
+         */
+        @SystemApi
+        public @Nullable String[] getGrantedRuntimePermissions() {
+            return grantedRuntimePermissions;
+        }
+
+        /**
+         * Get the value set in {@link SessionParams#setAllowDowngrade(boolean)}.
+         *
+         * @hide
+         */
+        @SystemApi
+        public boolean getAllowDowngrade() {
+            return (installFlags & PackageManager.INSTALL_ALLOW_DOWNGRADE) != 0;
+        }
+
+        /**
+         * Get the value set in {@link SessionParams#setDontKillApp(boolean)}.
+         *
+         * @hide
+         */
+        @SystemApi
+        public boolean getDontKillApp() {
+            return (installFlags & PackageManager.INSTALL_DONT_KILL_APP) != 0;
+        }
+
+        /**
+         * If {@link SessionParams#setInstallAsInstantApp(boolean)} was called with {@code true},
+         * return true. If it was called with {@code false} or if it was not called return false.
+         *
+         * @hide
+         *
+         * @see #getInstallAsFullApp
+         */
+        @SystemApi
+        public boolean getInstallAsInstantApp(boolean isInstantApp) {
+            return (installFlags & PackageManager.INSTALL_INSTANT_APP) != 0;
+        }
+
+        /**
+         * If {@link SessionParams#setInstallAsInstantApp(boolean)} was called with {@code false},
+         * return true. If it was called with {@code true} or if it was not called return false.
+         *
+         * @hide
+         *
+         * @see #getInstallAsInstantApp
+         */
+        @SystemApi
+        public boolean getInstallAsFullApp(boolean isInstantApp) {
+            return (installFlags & PackageManager.INSTALL_FULL_APP) != 0;
+        }
+
+        /**
+         * Get if {@link SessionParams#setInstallAsVirtualPreload()} was called.
+         *
+         * @hide
+         */
+        @SystemApi
+        public boolean getInstallAsVirtualPreload() {
+            return (installFlags & PackageManager.INSTALL_VIRTUAL_PRELOAD) != 0;
+        }
+
+        /**
+         * Get the value set in {@link SessionParams#setAllocateAggressive(boolean)}.
+         *
+         * @hide
+         */
+        @SystemApi
+        public boolean getAllocateAggressive() {
+            return (installFlags & PackageManager.INSTALL_ALLOCATE_AGGRESSIVE) != 0;
+        }
+
+
         /** {@hide} */
         @Deprecated
         public @Nullable Intent getDetailsIntent() {
@@ -1421,6 +1693,13 @@
             dest.writeString(appPackageName);
             dest.writeParcelable(appIcon, flags);
             dest.writeString(appLabel != null ? appLabel.toString() : null);
+
+            dest.writeInt(installLocation);
+            dest.writeParcelable(originatingUri, flags);
+            dest.writeInt(originatingUid);
+            dest.writeParcelable(referrerUri, flags);
+            dest.writeStringArray(grantedRuntimePermissions);
+            dest.writeInt(installFlags);
         }
 
         public static final Parcelable.Creator<SessionInfo>
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 06dbc0b..ef8f84b 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -31,6 +31,7 @@
 import android.annotation.TestApi;
 import android.annotation.UserIdInt;
 import android.annotation.XmlRes;
+import android.app.ActivityManager;
 import android.app.PackageDeleteObserver;
 import android.app.PackageInstallObserver;
 import android.app.admin.DevicePolicyManager;
@@ -46,6 +47,7 @@
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
+import android.net.wifi.WifiManager;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
@@ -54,7 +56,6 @@
 import android.os.UserManager;
 import android.os.storage.StorageManager;
 import android.os.storage.VolumeInfo;
-import android.provider.Settings;
 import android.util.AndroidException;
 import android.util.Log;
 
@@ -810,6 +811,14 @@
      */
     public static final int INSTALL_ALLOCATE_AGGRESSIVE = 0x00008000;
 
+    /**
+     * Flag parameter for {@link #installPackage} to indicate that this package
+     * is a virtual preload.
+     *
+     * @hide
+     */
+    public static final int INSTALL_VIRTUAL_PRELOAD = 0x00010000;
+
     /** @hide */
     @IntDef(flag = true, prefix = { "DONT_KILL_APP" }, value = {
             DONT_KILL_APP
@@ -1490,6 +1499,9 @@
      */
     public static final int MOVE_FAILED_3RD_PARTY_NOT_ALLOWED_ON_INTERNAL = -9;
 
+    /** @hide */
+    public static final int MOVE_FAILED_LOCKED_USER = -10;
+
     /**
      * Flag parameter for {@link #movePackage} to indicate that
      * the package should be moved to internal storage if its
@@ -1780,6 +1792,24 @@
 
     /**
      * Feature for {@link #getSystemAvailableFeatures} and
+     * {@link #hasSystemFeature}: The device's
+     * {@link ActivityManager#isLowRamDevice() ActivityManager.isLowRamDevice()} method returns
+     * true.
+     */
+    @SdkConstant(SdkConstantType.FEATURE)
+    public static final String FEATURE_RAM_LOW = "android.hardware.ram.low";
+
+    /**
+     * Feature for {@link #getSystemAvailableFeatures} and
+     * {@link #hasSystemFeature}: The device's
+     * {@link ActivityManager#isLowRamDevice() ActivityManager.isLowRamDevice()} method returns
+     * false.
+     */
+    @SdkConstant(SdkConstantType.FEATURE)
+    public static final String FEATURE_RAM_NORMAL = "android.hardware.ram.normal";
+
+    /**
+     * Feature for {@link #getSystemAvailableFeatures} and
      * {@link #hasSystemFeature}: The device can record audio via a
      * microphone.
      */
@@ -1874,10 +1904,16 @@
      * Feature for {@link #getSystemAvailableFeatures} and
      * {@link #hasSystemFeature(String, int)}: If this feature is supported, the Vulkan native API
      * will enumerate at least one {@code VkPhysicalDevice}, and the feature version will indicate
-     * what level of optional compute features are supported beyond the Vulkan 1.0 requirements.
+     * what level of optional compute features that device supports beyond the Vulkan 1.0
+     * requirements.
      * <p>
-     * Compute level 0 indicates support for the {@code VariablePointers} SPIR-V capability defined
-     * by the SPV_KHR_variable_pointers extension.
+     * Compute level 0 indicates:
+     * <ul>
+     * <li>The {@code VK_KHR_variable_pointers} extension and
+     *     {@code VkPhysicalDeviceVariablePointerFeaturesKHR::variablePointers} feature are
+           supported.</li>
+     * <li>{@code VkPhysicalDeviceLimits::maxPerStageDescriptorStorageBuffers} is at least 16.</li>
+     * </ul>
      */
     @SdkConstant(SdkConstantType.FEATURE)
     public static final String FEATURE_VULKAN_HARDWARE_COMPUTE = "android.hardware.vulkan.compute";
@@ -1898,12 +1934,13 @@
     public static final String FEATURE_VULKAN_HARDWARE_VERSION = "android.hardware.vulkan.version";
 
     /**
-     * The device includes broadcast radio tuner.
-     *
-     * @hide FutureFeature
+     * Feature for {@link #getSystemAvailableFeatures} and
+     * {@link #hasSystemFeature}: The device includes broadcast radio tuner.
+     * @hide
      */
+    @SystemApi
     @SdkConstant(SdkConstantType.FEATURE)
-    public static final String FEATURE_RADIO = "android.hardware.radio";
+    public static final String FEATURE_BROADCAST_RADIO = "android.hardware.broadcastradio";
 
     /**
      * Feature for {@link #getSystemAvailableFeatures} and
@@ -2284,14 +2321,23 @@
 
     /**
      * Feature for {@link #getSystemAvailableFeatures} and
-     * {@link #hasSystemFeature}: The device supports Wi-Fi Passpoint.
-     * @hide
+     * {@link #hasSystemFeature}: The device supports Wi-Fi Passpoint and all
+     * Passpoint related APIs in {@link WifiManager} are supported. Refer to
+     * {@link WifiManager#addOrUpdatePasspointConfiguration} for more info.
      */
     @SdkConstant(SdkConstantType.FEATURE)
     public static final String FEATURE_WIFI_PASSPOINT = "android.hardware.wifi.passpoint";
 
     /**
      * Feature for {@link #getSystemAvailableFeatures} and
+     * {@link #hasSystemFeature}: The device supports LoWPAN networking.
+     * @hide
+     */
+    @SdkConstant(SdkConstantType.FEATURE)
+    public static final String FEATURE_LOWPAN = "android.hardware.lowpan";
+
+    /**
+     * Feature for {@link #getSystemAvailableFeatures} and
      * {@link #hasSystemFeature}: This is a device dedicated to showing UI
      * on a vehicle headunit. A headunit here is defined to be inside a
      * vehicle that may or may not be moving. A headunit uses either a
@@ -2343,7 +2389,6 @@
      * computers, laptops and variants such as convertibles or detachables.
      * Due to the larger screen, the device will most likely use the
      * {@link #FEATURE_FREEFORM_WINDOW_MANAGEMENT} feature as well.
-     * @hide
      */
     @SdkConstant(SdkConstantType.FEATURE)
     public static final String FEATURE_PC = "android.hardware.type.pc";
@@ -3304,6 +3349,7 @@
      *
      * @hide
      */
+    @TestApi
     public abstract String getPermissionControllerPackageName();
 
     /**
@@ -3572,6 +3618,14 @@
     public abstract @Nullable String getNameForUid(int uid);
 
     /**
+     * Retrieves the official names associated with each given uid.
+     * @see #getNameForUid(int)
+     *
+     * @hide
+     */
+    public abstract @Nullable String[] getNamesForUids(int[] uids);
+
+    /**
      * Return the user id associated with a shared user name. Multiple
      * applications can specify a shared user name in their manifest and thus
      * end up using a common uid. This might be used for new applications
@@ -3750,7 +3804,6 @@
 
     /**
      * @removed
-     * @hide
      */
     public abstract boolean setInstantAppCookie(@Nullable byte[] cookie);
 
@@ -4003,6 +4056,7 @@
      * @hide
      */
     @SystemApi
+    @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS)
     public List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent,
             @ResolveInfoFlags int flags, UserHandle userHandle) {
         return queryBroadcastReceiversAsUser(intent, flags, userHandle.getIdentifier());
@@ -4673,6 +4727,7 @@
      * on the system for other users, also install it for the calling user.
      * @hide
      */
+    @SystemApi
     public abstract int installExistingPackage(String packageName) throws NameNotFoundException;
 
     /**
@@ -4680,6 +4735,7 @@
      * on the system for other users, also install it for the calling user.
      * @hide
      */
+    @SystemApi
     public abstract int installExistingPackage(String packageName, @InstallReason int installReason)
             throws NameNotFoundException;
 
@@ -4791,6 +4847,7 @@
      * @hide
      */
     @SystemApi
+    @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL)
     public abstract int getIntentVerificationStatusAsUser(String packageName, @UserIdInt int userId);
 
     /**
@@ -4860,6 +4917,7 @@
      */
     @TestApi
     @SystemApi
+    @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL)
     public abstract String getDefaultBrowserPackageNameAsUser(@UserIdInt int userId);
 
     /**
@@ -4875,7 +4933,9 @@
      * @hide
      */
     @SystemApi
-    @RequiresPermission(android.Manifest.permission.SET_PREFERRED_APPLICATIONS)
+    @RequiresPermission(allOf = {
+            Manifest.permission.SET_PREFERRED_APPLICATIONS,
+            Manifest.permission.INTERACT_ACROSS_USERS_FULL})
     public abstract boolean setDefaultBrowserPackageNameAsUser(String packageName,
             @UserIdInt int userId);
 
@@ -5775,6 +5835,7 @@
      *
      * @hide
      */
+    @SystemApi
     public static abstract class DexModuleRegisterCallback {
         public abstract void onDexModuleRegistered(String dexModulePath, boolean success,
                 String message);
@@ -5808,6 +5869,7 @@
      *
      * @hide
      */
+    @SystemApi
     public abstract void registerDexModule(String dexModulePath,
             @Nullable DexModuleRegisterCallback callback);
 }
diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java
index 99700df..4c981cd 100644
--- a/core/java/android/content/pm/PackageManagerInternal.java
+++ b/core/java/android/content/pm/PackageManagerInternal.java
@@ -20,7 +20,6 @@
 import android.content.Intent;
 import android.content.pm.PackageManager.ApplicationInfoFlags;
 import android.content.pm.PackageManager.ComponentInfoFlags;
-import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.PackageManager.PackageInfoFlags;
 import android.content.pm.PackageManager.ResolveInfoFlags;
 import android.os.Bundle;
@@ -372,4 +371,16 @@
 
     /** Whether the binder caller can access instant apps. */
     public abstract boolean canAccessInstantApps(int callingUid, int userId);
+
+    /**
+     * Returns {@code true} if a given package has instant application meta-data.
+     * Otherwise, returns {@code false}. Meta-data is state (eg. cookie, app icon, etc)
+     * associated with an instant app. It may be kept after the instant app has been uninstalled.
+     */
+    public abstract boolean hasInstantApplicationMetadata(String packageName, int userId);
+
+    /**
+     * Updates a package last used time.
+     */
+    public abstract void notifyPackageUse(String packageName, int reason);
 }
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index bcba938e..4689f45 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -27,9 +27,9 @@
 import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
 import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED;
-import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE;
 import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE;
 import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
+import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE;
 import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST;
 import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME;
 import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING;
@@ -50,9 +50,11 @@
 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.split.DefaultSplitAssetLoader;
 import android.content.pm.split.SplitAssetDependencyLoader;
 import android.content.pm.split.SplitAssetLoader;
-import android.content.pm.split.DefaultSplitAssetLoader;
 import android.content.res.AssetManager;
 import android.content.res.Configuration;
 import android.content.res.Resources;
@@ -64,6 +66,7 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.PatternMatcher;
+import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.Trace;
 import android.os.UserHandle;
@@ -88,11 +91,13 @@
 
 import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
+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;
 
@@ -119,6 +124,7 @@
 import java.util.List;
 import java.util.Set;
 import java.util.UUID;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.zip.ZipEntry;
 
@@ -144,6 +150,8 @@
     private static final boolean DEBUG_JAR = false;
     private static final boolean DEBUG_PARSER = false;
     private static final boolean DEBUG_BACKUP = false;
+    private static final boolean LOG_PARSE_TIMINGS = Build.IS_DEBUGGABLE;
+    private static final int LOG_PARSE_TIMINGS_THRESHOLD_MS = 100;
 
     private static final String PROPERTY_CHILD_PACKAGES_ENABLED =
             "persist.sys.child_packages_enabled";
@@ -230,6 +238,11 @@
 
     private static final boolean LOG_UNSAFE_BROADCASTS = false;
 
+    /**
+     * Total number of packages that were read from the cache.  We use it only for logging.
+     */
+    public static final AtomicInteger sCachedPackageReadCount = new AtomicInteger();
+
     // Set of broadcast actions that are safe for manifest receivers
     private static final Set<String> SAFE_BROADCASTS = new ArraySet<>();
     static {
@@ -500,11 +513,25 @@
         }
     }
 
+    /**
+     * Cached parse state for new components.
+     *
+     * Allows reuse of the same parse argument records to avoid GC pressure.  Lifetime is carefully
+     * scoped to the parsing of a single application element.
+     */
+    private static class CachedComponentArgs {
+        ParseComponentArgs mActivityArgs;
+        ParseComponentArgs mActivityAliasArgs;
+        ParseComponentArgs mServiceArgs;
+        ParseComponentArgs mProviderArgs;
+    }
+
+    /**
+     * Cached state for parsing instrumentation to avoid GC pressure.
+     *
+     * Must be manually reset to null for each new manifest.
+     */
     private ParsePackageItemArgs mParseInstrumentationArgs;
-    private ParseComponentArgs mParseActivityArgs;
-    private ParseComponentArgs mParseActivityAliasArgs;
-    private ParseComponentArgs mParseServiceArgs;
-    private ParseComponentArgs mParseProviderArgs;
 
     /** If set to true, we will only allow package files that exactly match
      *  the DTD.  Otherwise, we try to get as much from the package as we
@@ -641,6 +668,7 @@
         pi.sharedUserLabel = p.mSharedUserLabel;
         pi.applicationInfo = generateApplicationInfo(p, flags, state, userId);
         pi.installLocation = p.installLocation;
+        pi.isStub = p.isStub;
         pi.coreApp = p.coreApp;
         if ((pi.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) != 0
                 || (pi.applicationInfo.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
@@ -650,7 +678,15 @@
         pi.requiredAccountType = p.mRequiredAccountType;
         pi.overlayTarget = p.mOverlayTarget;
         pi.overlayPriority = p.mOverlayPriority;
-        pi.isStaticOverlay = p.mIsStaticOverlay;
+
+        if (p.mIsStaticOverlay) {
+            pi.overlayFlags |= PackageInfo.FLAG_OVERLAY_STATIC;
+        }
+
+        if (p.mTrustedOverlay) {
+            pi.overlayFlags |= PackageInfo.FLAG_OVERLAY_TRUSTED;
+        }
+
         pi.firstInstallTime = firstInstallTime;
         pi.lastUpdateTime = lastUpdateTime;
         if ((flags&PackageManager.GET_GIDS) != 0) {
@@ -913,6 +949,7 @@
         String[] configForSplits = null;
         String[] splitCodePaths = null;
         int[] splitRevisionCodes = null;
+        String[] splitClassLoaderNames = null;
         if (size > 0) {
             splitNames = new String[size];
             isFeatureSplits = new boolean[size];
@@ -965,14 +1002,23 @@
             return parsed;
         }
 
+        long parseTime = LOG_PARSE_TIMINGS ? SystemClock.uptimeMillis() : 0;
         if (packageFile.isDirectory()) {
             parsed = parseClusterPackage(packageFile, flags);
         } else {
             parsed = parseMonolithicPackage(packageFile, flags);
         }
 
+        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;
     }
 
@@ -995,21 +1041,45 @@
     }
 
     @VisibleForTesting
-    protected Package fromCacheEntry(byte[] bytes) throws IOException {
-        Parcel p = Parcel.obtain();
+    protected Package fromCacheEntry(byte[] bytes) {
+        return fromCacheEntryStatic(bytes);
+    }
+
+    /** static version of {@link #fromCacheEntry} for unit tests. */
+    @VisibleForTesting
+    public static Package 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();
+
         PackageParser.Package pkg = new PackageParser.Package(p);
+
         p.recycle();
 
+        sCachedPackageReadCount.incrementAndGet();
+
         return pkg;
     }
 
     @VisibleForTesting
-    protected byte[] toCacheEntry(Package pkg) throws IOException {
-        Parcel p = Parcel.obtain();
+    protected byte[] toCacheEntry(Package pkg) {
+        return toCacheEntryStatic(pkg);
+
+    }
+
+    /** static version of {@link #toCacheEntry} for unit tests. */
+    @VisibleForTesting
+    public static byte[] toCacheEntryStatic(Package 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();
 
@@ -1059,12 +1129,12 @@
         final String cacheKey = getCacheKey(packageFile, flags);
         final File cacheFile = new File(mCacheDir, cacheKey);
 
-        // If the cache is not up to date, return null.
-        if (!isCacheUpToDate(packageFile, cacheFile)) {
-            return null;
-        }
-
         try {
+            // If the cache is not up to date, return null.
+            if (!isCacheUpToDate(packageFile, cacheFile)) {
+                return null;
+            }
+
             final byte[] bytes = IoUtils.readFileAsByteArray(cacheFile.getAbsolutePath());
             Package p = fromCacheEntry(bytes);
             if (mCallback != null) {
@@ -1079,7 +1149,7 @@
                 }
             }
             return p;
-        } catch (Exception e) {
+        } catch (Throwable e) {
             Slog.w(TAG, "Error reading package cache: ", e);
 
             // If something went wrong while reading the cache entry, delete the cache file
@@ -1097,32 +1167,30 @@
             return;
         }
 
-        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;
         try {
-            cacheEntry = toCacheEntry(parsed);
-        } catch (IOException ioe) {
-            Slog.e(TAG, "Unable to serialize parsed package for: " + packageFile);
-            return;
-        }
+            final String cacheKey = getCacheKey(packageFile, flags);
+            final File cacheFile = new File(mCacheDir, cacheKey);
 
-        if (cacheEntry == null) {
-            return;
-        }
+            if (cacheFile.exists()) {
+                if (!cacheFile.delete()) {
+                    Slog.e(TAG, "Unable to delete cache file: " + cacheFile);
+                }
+            }
 
-        try (FileOutputStream fos = new FileOutputStream(cacheFile)) {
-            fos.write(cacheEntry);
-        } catch (IOException ioe) {
-            Slog.w(TAG, "Error writing cache entry.", ioe);
-            cacheFile.delete();
+            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);
         }
     }
 
@@ -1174,6 +1242,7 @@
                 pkg.splitPrivateFlags = new int[num];
                 pkg.applicationInfo.splitNames = pkg.splitNames;
                 pkg.applicationInfo.splitDependencies = splitDependencies;
+                pkg.applicationInfo.splitClassLoaderNames = new String[num];
 
                 for (int i = 0; i < num; i++) {
                     final AssetManager splitAssets = assetLoader.getSplitAssetManager(i);
@@ -1337,9 +1406,6 @@
         parsePackageSplitNames(parser, attrs);
 
         mParseInstrumentationArgs = null;
-        mParseActivityArgs = null;
-        mParseServiceArgs = null;
-        mParseProviderArgs = null;
 
         int type;
 
@@ -1687,7 +1753,7 @@
             }
 
             final AttributeSet attrs = parser;
-            return parseApkLite(apkPath, parser, attrs, flags, signatures, certificates);
+            return parseApkLite(apkPath, parser, attrs, signatures, certificates);
 
         } catch (XmlPullParserException | IOException | RuntimeException e) {
             Slog.w(TAG, "Failed to parse " + apkPath, e);
@@ -1774,7 +1840,7 @@
     }
 
     private static ApkLite parseApkLite(String codePath, XmlPullParser parser, AttributeSet attrs,
-            int flags, Signature[] signatures, Certificate[][] certificates)
+            Signature[] signatures, Certificate[][] certificates)
             throws IOException, XmlPullParserException, PackageParserException {
         final Pair<String, String> packageSplit = parsePackageSplitNames(parser, attrs);
 
@@ -1869,18 +1935,6 @@
     }
 
     /**
-     * Temporary.
-     */
-    static public Signature stringToSignature(String str) {
-        final int N = str.length();
-        byte[] sig = new byte[N];
-        for (int i=0; i<N; i++) {
-            sig[i] = (byte)str.charAt(i);
-        }
-        return new Signature(sig);
-    }
-
-    /**
      * Parses a child package and adds it to the parent if successful. If you add
      * new tags that need to be supported by child packages make sure to add them
      * to {@link #CHILD_PACKAGE_TAGS}.
@@ -2046,9 +2100,6 @@
             XmlResourceParser parser, int flags, String[] outError) throws XmlPullParserException,
             IOException {
         mParseInstrumentationArgs = null;
-        mParseActivityArgs = null;
-        mParseServiceArgs = null;
-        mParseProviderArgs = null;
 
         int type;
         boolean foundApp = false;
@@ -2782,14 +2833,14 @@
                 com.android.internal.R.styleable.AndroidManifestUsesLibrary_name);
         final int version = sa.getInt(
                 com.android.internal.R.styleable.AndroidManifestUsesStaticLibrary_version, -1);
-        String certSha256 = sa.getNonResourceString(com.android.internal.R.styleable
+        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 || certSha256 == null) {
+        if (lname == null || version < 0 || certSha256Digest == null) {
             outError[0] = "Bad uses-static-library declaration name: " + lname + " version: "
-                    + version + " certDigest" + certSha256;
+                    + version + " certDigest" + certSha256Digest;
             mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
             XmlUtils.skipCurrentTag(parser);
             return false;
@@ -2806,18 +2857,75 @@
         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.
-        certSha256 = certSha256.replace(":", "").toLowerCase();
+        certSha256Digest = certSha256Digest.replace(":", "").toLowerCase();
+
+        // Fot apps targeting O-MR1 we require explicit enumeration of all certs.
+        String[] additionalCertSha256Digests = EmptyArray.STRING;
+        if (pkg.applicationInfo.targetSdkVersion > Build.VERSION_CODES.O) {
+            additionalCertSha256Digests = parseAdditionalCertificates(res, parser, outError);
+            if (additionalCertSha256Digests == null) {
+                return false;
+            }
+        } else {
+            XmlUtils.skipCurrentTag(parser);
+        }
+
+        final String[] certSha256Digests = new String[additionalCertSha256Digests.length + 1];
+        certSha256Digests[0] = certSha256Digest;
+        System.arraycopy(additionalCertSha256Digests, 0, certSha256Digests,
+                1, additionalCertSha256Digests.length);
+
         pkg.usesStaticLibraries = ArrayUtils.add(pkg.usesStaticLibraries, lname);
         pkg.usesStaticLibrariesVersions = ArrayUtils.appendInt(
                 pkg.usesStaticLibrariesVersions, version, true);
-        pkg.usesStaticLibrariesCertDigests = ArrayUtils.appendElement(String.class,
-                pkg.usesStaticLibrariesCertDigests, certSha256, true);
-
-        XmlUtils.skipCurrentTag(parser);
+        pkg.usesStaticLibrariesCertDigests = ArrayUtils.appendElement(String[].class,
+                pkg.usesStaticLibrariesCertDigests, certSha256Digests, true);
 
         return true;
     }
 
+    private 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;
+                    mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
+                    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;
+    }
+
     private boolean parseUsesPermission(Package pkg, Resources res, XmlResourceParser parser)
             throws XmlPullParserException, IOException {
         TypedArray sa = res.obtainAttributes(parser,
@@ -2943,7 +3051,7 @@
         if (procSeq == null || procSeq.length() <= 0) {
             return defProc;
         }
-        return buildCompoundName(pkg, procSeq, "process", outError);
+        return TextUtils.safeIntern(buildCompoundName(pkg, procSeq, "process", outError));
     }
 
     private static String buildTaskAffinityName(String pkg, String defProc,
@@ -3197,11 +3305,11 @@
         perm.info.protectionLevel = PermissionInfo.fixProtectionLevel(perm.info.protectionLevel);
 
         if ((perm.info.protectionLevel&PermissionInfo.PROTECTION_MASK_FLAGS) != 0) {
-            if ( (perm.info.protectionLevel&PermissionInfo.PROTECTION_FLAG_EPHEMERAL) == 0
+            if ( (perm.info.protectionLevel&PermissionInfo.PROTECTION_FLAG_INSTANT) == 0
                     && (perm.info.protectionLevel&PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) == 0
                     && (perm.info.protectionLevel&PermissionInfo.PROTECTION_MASK_BASE) !=
                     PermissionInfo.PROTECTION_SIGNATURE) {
-                outError[0] = "<permission>  protectionLevel specifies a non-ephemeral flag but is "
+                outError[0] = "<permission>  protectionLevel specifies a non-instnat flag but is "
                         + "not based on signature type";
                 mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                 return false;
@@ -3632,6 +3740,13 @@
         ai.uiOptions = sa.getInt(
                 com.android.internal.R.styleable.AndroidManifestApplication_uiOptions, 0);
 
+        ai.classLoaderName = sa.getString(
+            com.android.internal.R.styleable.AndroidManifestApplication_classLoader);
+        if (ai.classLoaderName != null
+                && !ClassLoaderFactory.isValidClassLoaderName(ai.classLoaderName)) {
+            outError[0] = "Invalid class loader name: " + ai.classLoaderName;
+        }
+
         sa.recycle();
 
         if (outError[0] != null) {
@@ -3640,6 +3755,9 @@
         }
 
         final int innerDepth = parser.getDepth();
+        // IMPORTANT: These must only be cached for a single <application> to avoid components
+        // getting added to the wrong package.
+        final CachedComponentArgs cachedArgs = new CachedComponentArgs();
         int type;
 
         while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
@@ -3650,7 +3768,7 @@
 
             String tagName = parser.getName();
             if (tagName.equals("activity")) {
-                Activity a = parseActivity(owner, res, parser, flags, outError, false,
+                Activity a = parseActivity(owner, res, parser, flags, outError, cachedArgs, false,
                         owner.baseHardwareAccelerated);
                 if (a == null) {
                     mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
@@ -3660,7 +3778,8 @@
                 owner.activities.add(a);
 
             } else if (tagName.equals("receiver")) {
-                Activity a = parseActivity(owner, res, parser, flags, outError, true, false);
+                Activity a = parseActivity(owner, res, parser, flags, outError, cachedArgs,
+                        true, false);
                 if (a == null) {
                     mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                     return false;
@@ -3669,7 +3788,7 @@
                 owner.receivers.add(a);
 
             } else if (tagName.equals("service")) {
-                Service s = parseService(owner, res, parser, flags, outError);
+                Service s = parseService(owner, res, parser, flags, outError, cachedArgs);
                 if (s == null) {
                     mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                     return false;
@@ -3678,7 +3797,7 @@
                 owner.services.add(s);
 
             } else if (tagName.equals("provider")) {
-                Provider p = parseProvider(owner, res, parser, flags, outError);
+                Provider p = parseProvider(owner, res, parser, flags, outError, cachedArgs);
                 if (p == null) {
                     mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                     return false;
@@ -3687,7 +3806,7 @@
                 owner.providers.add(p);
 
             } else if (tagName.equals("activity-alias")) {
-                Activity a = parseActivityAlias(owner, res, parser, flags, outError);
+                Activity a = parseActivityAlias(owner, res, parser, flags, outError, cachedArgs);
                 if (a == null) {
                     mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                     return false;
@@ -3822,7 +3941,7 @@
         // every activity info has had a chance to set it from its attributes.
         setMaxAspectRatio(owner);
 
-        modifySharedLibrariesForBackwardCompatibility(owner);
+        PackageBackwardCompatibility.modifySharedLibraries(owner);
 
         if (hasDomainURLs(owner)) {
             owner.applicationInfo.privateFlags |= ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS;
@@ -3833,18 +3952,6 @@
         return true;
     }
 
-    private static void modifySharedLibrariesForBackwardCompatibility(Package owner) {
-        // "org.apache.http.legacy" is now a part of the boot classpath so it doesn't need
-        // to be an explicit dependency.
-        //
-        // A future change will remove this library from the boot classpath, at which point
-        // all apps that target SDK 21 and earlier will have it automatically added to their
-        // dependency lists.
-        owner.usesLibraries = ArrayUtils.remove(owner.usesLibraries, "org.apache.http.legacy");
-        owner.usesOptionalLibraries = ArrayUtils.remove(owner.usesOptionalLibraries,
-                "org.apache.http.legacy");
-    }
-
     /**
      * Check if one of the IntentFilter as both actions DEFAULT / VIEW and a HTTP/HTTPS data URI
      */
@@ -3889,6 +3996,16 @@
             owner.splitFlags[splitIndex] |= ApplicationInfo.FLAG_HAS_CODE;
         }
 
+        final String classLoaderName = sa.getString(
+                com.android.internal.R.styleable.AndroidManifestApplication_classLoader);
+        if (classLoaderName == null || ClassLoaderFactory.isValidClassLoaderName(classLoaderName)) {
+            owner.applicationInfo.splitClassLoaderNames[splitIndex] = classLoaderName;
+        } else {
+            outError[0] = "Invalid class loader name: " + classLoaderName;
+            mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
+            return false;
+        }
+
         final int innerDepth = parser.getDepth();
         int type;
         while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
@@ -3899,9 +4016,12 @@
 
             ComponentInfo parsedComponent = null;
 
+            // IMPORTANT: These must only be cached for a single <application> to avoid components
+            // getting added to the wrong package.
+            final CachedComponentArgs cachedArgs = new CachedComponentArgs();
             String tagName = parser.getName();
             if (tagName.equals("activity")) {
-                Activity a = parseActivity(owner, res, parser, flags, outError, false,
+                Activity a = parseActivity(owner, res, parser, flags, outError, cachedArgs, false,
                         owner.baseHardwareAccelerated);
                 if (a == null) {
                     mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
@@ -3912,7 +4032,8 @@
                 parsedComponent = a.info;
 
             } else if (tagName.equals("receiver")) {
-                Activity a = parseActivity(owner, res, parser, flags, outError, true, false);
+                Activity a = parseActivity(owner, res, parser, flags, outError, cachedArgs,
+                        true, false);
                 if (a == null) {
                     mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                     return false;
@@ -3922,7 +4043,7 @@
                 parsedComponent = a.info;
 
             } else if (tagName.equals("service")) {
-                Service s = parseService(owner, res, parser, flags, outError);
+                Service s = parseService(owner, res, parser, flags, outError, cachedArgs);
                 if (s == null) {
                     mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                     return false;
@@ -3932,7 +4053,7 @@
                 parsedComponent = s.info;
 
             } else if (tagName.equals("provider")) {
-                Provider p = parseProvider(owner, res, parser, flags, outError);
+                Provider p = parseProvider(owner, res, parser, flags, outError, cachedArgs);
                 if (p == null) {
                     mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                     return false;
@@ -3942,7 +4063,7 @@
                 parsedComponent = p.info;
 
             } else if (tagName.equals("activity-alias")) {
-                Activity a = parseActivityAlias(owner, res, parser, flags, outError);
+                Activity a = parseActivityAlias(owner, res, parser, flags, outError, cachedArgs);
                 if (a == null) {
                     mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                     return false;
@@ -4088,13 +4209,13 @@
     }
 
     private Activity parseActivity(Package owner, Resources res,
-            XmlResourceParser parser, int flags, String[] outError,
+            XmlResourceParser parser, int flags, String[] outError, CachedComponentArgs cachedArgs,
             boolean receiver, boolean hardwareAccelerated)
             throws XmlPullParserException, IOException {
         TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestActivity);
 
-        if (mParseActivityArgs == null) {
-            mParseActivityArgs = new ParseComponentArgs(owner, outError,
+        if (cachedArgs.mActivityArgs == null) {
+            cachedArgs.mActivityArgs = new ParseComponentArgs(owner, outError,
                     R.styleable.AndroidManifestActivity_name,
                     R.styleable.AndroidManifestActivity_label,
                     R.styleable.AndroidManifestActivity_icon,
@@ -4107,11 +4228,11 @@
                     R.styleable.AndroidManifestActivity_enabled);
         }
 
-        mParseActivityArgs.tag = receiver ? "<receiver>" : "<activity>";
-        mParseActivityArgs.sa = sa;
-        mParseActivityArgs.flags = flags;
+        cachedArgs.mActivityArgs.tag = receiver ? "<receiver>" : "<activity>";
+        cachedArgs.mActivityArgs.sa = sa;
+        cachedArgs.mActivityArgs.flags = flags;
 
-        Activity a = new Activity(mParseActivityArgs, new ActivityInfo());
+        Activity a = new Activity(cachedArgs.mActivityArgs, new ActivityInfo());
         if (outError[0] != null) {
             sa.recycle();
             return null;
@@ -4287,6 +4408,15 @@
 
             a.info.colorMode = sa.getInt(R.styleable.AndroidManifestActivity_colorMode,
                     ActivityInfo.COLOR_MODE_DEFAULT);
+
+            if (sa.getBoolean(R.styleable.AndroidManifestActivity_showWhenLocked, false)) {
+                a.info.flags |= ActivityInfo.FLAG_SHOW_WHEN_LOCKED;
+            }
+
+            if (sa.getBoolean(R.styleable.AndroidManifestActivity_turnScreenOn, false)) {
+                a.info.flags |= ActivityInfo.FLAG_TURN_SCREEN_ON;
+            }
+
         } else {
             a.info.launchMode = ActivityInfo.LAUNCH_MULTIPLE;
             a.info.configChanges = 0;
@@ -4600,7 +4730,8 @@
     }
 
     private Activity parseActivityAlias(Package owner, Resources res,
-            XmlResourceParser parser, int flags, String[] outError)
+            XmlResourceParser parser, int flags, String[] outError,
+            CachedComponentArgs cachedArgs)
             throws XmlPullParserException, IOException {
         TypedArray sa = res.obtainAttributes(parser,
                 com.android.internal.R.styleable.AndroidManifestActivityAlias);
@@ -4621,8 +4752,8 @@
             return null;
         }
 
-        if (mParseActivityAliasArgs == null) {
-            mParseActivityAliasArgs = new ParseComponentArgs(owner, outError,
+        if (cachedArgs.mActivityAliasArgs == null) {
+            cachedArgs.mActivityAliasArgs = new ParseComponentArgs(owner, outError,
                     com.android.internal.R.styleable.AndroidManifestActivityAlias_name,
                     com.android.internal.R.styleable.AndroidManifestActivityAlias_label,
                     com.android.internal.R.styleable.AndroidManifestActivityAlias_icon,
@@ -4633,11 +4764,11 @@
                     0,
                     com.android.internal.R.styleable.AndroidManifestActivityAlias_description,
                     com.android.internal.R.styleable.AndroidManifestActivityAlias_enabled);
-            mParseActivityAliasArgs.tag = "<activity-alias>";
+            cachedArgs.mActivityAliasArgs.tag = "<activity-alias>";
         }
 
-        mParseActivityAliasArgs.sa = sa;
-        mParseActivityAliasArgs.flags = flags;
+        cachedArgs.mActivityAliasArgs.sa = sa;
+        cachedArgs.mActivityAliasArgs.flags = flags;
 
         Activity target = null;
 
@@ -4685,7 +4816,7 @@
 
         info.encryptionAware = info.directBootAware = target.info.directBootAware;
 
-        Activity a = new Activity(mParseActivityAliasArgs, info);
+        Activity a = new Activity(cachedArgs.mActivityAliasArgs, info);
         if (outError[0] != null) {
             sa.recycle();
             return null;
@@ -4791,13 +4922,14 @@
     }
 
     private Provider parseProvider(Package owner, Resources res,
-            XmlResourceParser parser, int flags, String[] outError)
+            XmlResourceParser parser, int flags, String[] outError,
+            CachedComponentArgs cachedArgs)
             throws XmlPullParserException, IOException {
         TypedArray sa = res.obtainAttributes(parser,
                 com.android.internal.R.styleable.AndroidManifestProvider);
 
-        if (mParseProviderArgs == null) {
-            mParseProviderArgs = new ParseComponentArgs(owner, outError,
+        if (cachedArgs.mProviderArgs == null) {
+            cachedArgs.mProviderArgs = new ParseComponentArgs(owner, outError,
                     com.android.internal.R.styleable.AndroidManifestProvider_name,
                     com.android.internal.R.styleable.AndroidManifestProvider_label,
                     com.android.internal.R.styleable.AndroidManifestProvider_icon,
@@ -4808,13 +4940,13 @@
                     com.android.internal.R.styleable.AndroidManifestProvider_process,
                     com.android.internal.R.styleable.AndroidManifestProvider_description,
                     com.android.internal.R.styleable.AndroidManifestProvider_enabled);
-            mParseProviderArgs.tag = "<provider>";
+            cachedArgs.mProviderArgs.tag = "<provider>";
         }
 
-        mParseProviderArgs.sa = sa;
-        mParseProviderArgs.flags = flags;
+        cachedArgs.mProviderArgs.sa = sa;
+        cachedArgs.mProviderArgs.flags = flags;
 
-        Provider p = new Provider(mParseProviderArgs, new ProviderInfo());
+        Provider p = new Provider(cachedArgs.mProviderArgs, new ProviderInfo());
         if (outError[0] != null) {
             sa.recycle();
             return null;
@@ -5145,13 +5277,14 @@
     }
 
     private Service parseService(Package owner, Resources res,
-            XmlResourceParser parser, int flags, String[] outError)
+            XmlResourceParser parser, int flags, String[] outError,
+            CachedComponentArgs cachedArgs)
             throws XmlPullParserException, IOException {
         TypedArray sa = res.obtainAttributes(parser,
                 com.android.internal.R.styleable.AndroidManifestService);
 
-        if (mParseServiceArgs == null) {
-            mParseServiceArgs = new ParseComponentArgs(owner, outError,
+        if (cachedArgs.mServiceArgs == null) {
+            cachedArgs.mServiceArgs = new ParseComponentArgs(owner, outError,
                     com.android.internal.R.styleable.AndroidManifestService_name,
                     com.android.internal.R.styleable.AndroidManifestService_label,
                     com.android.internal.R.styleable.AndroidManifestService_icon,
@@ -5162,13 +5295,13 @@
                     com.android.internal.R.styleable.AndroidManifestService_process,
                     com.android.internal.R.styleable.AndroidManifestService_description,
                     com.android.internal.R.styleable.AndroidManifestService_enabled);
-            mParseServiceArgs.tag = "<service>";
+            cachedArgs.mServiceArgs.tag = "<service>";
         }
 
-        mParseServiceArgs.sa = sa;
-        mParseServiceArgs.flags = flags;
+        cachedArgs.mServiceArgs.sa = sa;
+        cachedArgs.mServiceArgs.flags = flags;
 
-        Service s = new Service(mParseServiceArgs, new ServiceInfo());
+        Service s = new Service(cachedArgs.mServiceArgs, new ServiceInfo());
         if (outError[0] != null) {
             sa.recycle();
             return null;
@@ -5753,7 +5886,7 @@
         public ArrayList<String> usesLibraries = null;
         public ArrayList<String> usesStaticLibraries = null;
         public int[] usesStaticLibrariesVersions = null;
-        public String[] usesStaticLibrariesCertDigests = null;
+        public String[][] usesStaticLibrariesCertDigests = null;
         public ArrayList<String> usesOptionalLibraries = null;
         public String[] usesLibraryFiles = null;
 
@@ -5851,10 +5984,10 @@
 
         public byte[] restrictUpdateHash;
 
-        /**
-         * Set if the app or any of its components are visible to Instant Apps.
-         */
+        /** Set if the app or any of its components are visible to instant applications. */
         public boolean visibleToInstantApps;
+        /** Whether or not the package is a stub and must be replaced by the full version. */
+        public boolean isStub;
 
         public Package(String packageName) {
             this.packageName = packageName;
@@ -6251,8 +6384,10 @@
                 internStringArrayList(usesStaticLibraries);
                 usesStaticLibrariesVersions = new int[libCount];
                 dest.readIntArray(usesStaticLibrariesVersions);
-                usesStaticLibrariesCertDigests = new String[libCount];
-                dest.readStringArray(usesStaticLibrariesCertDigests);
+                usesStaticLibrariesCertDigests = new String[libCount][];
+                for (int i = 0; i < libCount; i++) {
+                    usesStaticLibrariesCertDigests[i] = dest.createStringArray();
+                }
             }
 
             preferredActivityFilters = new ArrayList<>();
@@ -6380,8 +6515,11 @@
 
             dest.writeStringList(requestedPermissions);
             dest.writeStringList(protectedBroadcasts);
+
+            // TODO: This doesn't work: b/64295061
             dest.writeParcelable(parentPackage, flags);
             dest.writeParcelableList(childPackages, flags);
+
             dest.writeString(staticSharedLibName);
             dest.writeInt(staticSharedLibVersion);
             dest.writeStringList(libraryNames);
@@ -6395,7 +6533,9 @@
                 dest.writeInt(usesStaticLibraries.size());
                 dest.writeStringList(usesStaticLibraries);
                 dest.writeIntArray(usesStaticLibrariesVersions);
-                dest.writeStringArray(usesStaticLibrariesCertDigests);
+                for (String[] usesStaticLibrariesCertDigest : usesStaticLibrariesCertDigests) {
+                    dest.writeStringArray(usesStaticLibrariesCertDigest);
+                }
             }
 
             dest.writeParcelableList(preferredActivityFilters, flags);
@@ -6860,6 +7000,11 @@
         } 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 {
diff --git a/core/java/android/content/pm/PackageParserCacheHelper.java b/core/java/android/content/pm/PackageParserCacheHelper.java
new file mode 100644
index 0000000..44def33
--- /dev/null
+++ b/core/java/android/content/pm/PackageParserCacheHelper.java
@@ -0,0 +1,157 @@
+/*
+ * 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.content.pm;
+
+import android.os.Parcel;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * Helper classes to read from and write to Parcel with pooled strings.
+ *
+ * @hide
+ */
+public class PackageParserCacheHelper {
+    private PackageParserCacheHelper() {
+    }
+
+    private static final String TAG = "PackageParserCacheHelper";
+    private static final boolean DEBUG = false;
+
+    /**
+     * Parcel read helper with a string pool.
+     */
+    public static class ReadHelper extends Parcel.ReadWriteHelper {
+        private final ArrayList<String> mStrings = new ArrayList<>();
+
+        private final Parcel mParcel;
+
+        public ReadHelper(Parcel p) {
+            mParcel = p;
+        }
+
+        /**
+         * Prepare to read from a parcel, and install itself as a read-write helper.
+         *
+         * (We don't do it in the constructor to avoid calling methods before the constructor
+         * finishes.)
+         */
+        public void startAndInstall() {
+            mStrings.clear();
+
+            final int poolPosition = mParcel.readInt();
+            final int startPosition = mParcel.dataPosition();
+
+            // The pool is at the end of the parcel.
+            mParcel.setDataPosition(poolPosition);
+            mParcel.readStringList(mStrings);
+
+            // Then move back.
+            mParcel.setDataPosition(startPosition);
+
+            if (DEBUG) {
+                Log.i(TAG, "Read " + mStrings.size() + " strings");
+                for (int i = 0; i < mStrings.size(); i++) {
+                    Log.i(TAG, "  " + i + ": \"" + mStrings.get(i) + "\"");
+                }
+            }
+
+            mParcel.setReadWriteHelper(this);
+        }
+
+        /**
+         * Read an string index from a parcel, and returns the corresponding string from the pool.
+         */
+        @Override
+        public String readString(Parcel p) {
+            return mStrings.get(p.readInt());
+        }
+    }
+
+    /**
+     * Parcel write helper with a string pool.
+     */
+    public static class WriteHelper extends Parcel.ReadWriteHelper {
+        private final ArrayList<String> mStrings = new ArrayList<>();
+
+        private final HashMap<String, Integer> mIndexes = new HashMap<>();
+
+        private final Parcel mParcel;
+        private final int mStartPos;
+
+        /**
+         * Constructor.  Prepare a parcel, and install it self as a read-write helper.
+         */
+        public WriteHelper(Parcel p) {
+            mParcel = p;
+            mStartPos = p.dataPosition();
+            mParcel.writeInt(0); // We come back later here and write the pool position.
+
+            mParcel.setReadWriteHelper(this);
+        }
+
+        /**
+         * Instead of writing a string directly to a parcel, this method adds it to the pool,
+         * and write the index in the pool to the parcel.
+         */
+        @Override
+        public void writeString(Parcel p, String s) {
+            final Integer cur = mIndexes.get(s);
+            if (cur != null) {
+                // String already in the pool. Just write the index.
+                p.writeInt(cur); // Already in the pool.
+                if (DEBUG) {
+                    Log.i(TAG, "Duplicate '" + s + "' at " + cur);
+                }
+            } else {
+                // Not in the pool. Add to the pool, and write the index.
+                final int index = mStrings.size();
+                mIndexes.put(s, index);
+                mStrings.add(s);
+
+                if (DEBUG) {
+                    Log.i(TAG, "New '" + s + "' at " + index);
+                }
+
+                p.writeInt(index);
+            }
+        }
+
+        /**
+         * Closes a parcel by appending the string pool at the end and updating the pool offset,
+         * which it assumes is at the first byte.  It also uninstalls itself as a read-write helper.
+         */
+        public void finishAndUninstall() {
+            // Uninstall first, so that writeStringList() uses the native writeString.
+            mParcel.setReadWriteHelper(null);
+
+            final int poolPosition = mParcel.dataPosition();
+            mParcel.writeStringList(mStrings);
+
+            mParcel.setDataPosition(mStartPos);
+            mParcel.writeInt(poolPosition);
+
+            // Move back to the end.
+            mParcel.setDataPosition(mParcel.dataSize());
+            if (DEBUG) {
+                Log.i(TAG, "Wrote " + mStrings.size() + " strings");
+            }
+        }
+    }
+}
diff --git a/core/java/android/content/pm/PackageUserState.java b/core/java/android/content/pm/PackageUserState.java
index 470336c..069b2d4 100644
--- a/core/java/android/content/pm/PackageUserState.java
+++ b/core/java/android/content/pm/PackageUserState.java
@@ -21,10 +21,10 @@
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
-import static android.content.pm.PackageManager.MATCH_DISABLED_COMPONENTS;
-import static android.content.pm.PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS;
 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_DISABLED_COMPONENTS;
+import static android.content.pm.PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS;
 import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY;
 
 import android.util.ArraySet;
@@ -45,6 +45,7 @@
     public boolean hidden; // Is the app restricted by owner / admin
     public boolean suspended;
     public boolean instantApp;
+    public boolean virtualPreload;
     public int enabled;
     public String lastDisableAppCaller;
     public int domainVerificationStatus;
@@ -75,6 +76,7 @@
         hidden = o.hidden;
         suspended = o.suspended;
         instantApp = o.instantApp;
+        virtualPreload = o.virtualPreload;
         enabled = o.enabled;
         lastDisableAppCaller = o.lastDisableAppCaller;
         domainVerificationStatus = o.domainVerificationStatus;
@@ -194,6 +196,9 @@
         if (instantApp != oldState.instantApp) {
             return false;
         }
+        if (virtualPreload != oldState.virtualPreload) {
+            return false;
+        }
         if (enabled != oldState.enabled) {
             return false;
         }
diff --git a/core/java/android/content/pm/PermissionInfo.java b/core/java/android/content/pm/PermissionInfo.java
index 694e607..797db54 100644
--- a/core/java/android/content/pm/PermissionInfo.java
+++ b/core/java/android/content/pm/PermissionInfo.java
@@ -122,13 +122,10 @@
 
     /**
      * Additional flag for {@link #protectionLevel}, corresponding
-     * to the <code>ephemeral</code> value of
+     * to the <code>instant</code> value of
      * {@link android.R.attr#protectionLevel}.
-     * @hide
      */
-    @SystemApi
-    @TestApi
-    public static final int PROTECTION_FLAG_EPHEMERAL = 0x1000;
+    public static final int PROTECTION_FLAG_INSTANT = 0x1000;
 
     /**
      * Additional flag for {@link #protectionLevel}, corresponding
@@ -254,8 +251,8 @@
         if ((level&PermissionInfo.PROTECTION_FLAG_SETUP) != 0) {
             protLevel += "|setup";
         }
-        if ((level&PermissionInfo.PROTECTION_FLAG_EPHEMERAL) != 0) {
-            protLevel += "|ephemeral";
+        if ((level&PermissionInfo.PROTECTION_FLAG_INSTANT) != 0) {
+            protLevel += "|instant";
         }
         if ((level&PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY) != 0) {
             protLevel += "|runtime";
diff --git a/core/java/android/content/pm/ProviderInfo.java b/core/java/android/content/pm/ProviderInfo.java
index 91dc06e..379b783 100644
--- a/core/java/android/content/pm/ProviderInfo.java
+++ b/core/java/android/content/pm/ProviderInfo.java
@@ -125,11 +125,11 @@
     }
 
     /** @hide */
-    public void dump(Printer pw, String prefix, int flags) {
+    public void dump(Printer pw, String prefix, int dumpFlags) {
         super.dumpFront(pw, prefix);
         pw.println(prefix + "authority=" + authority);
         pw.println(prefix + "flags=0x" + Integer.toHexString(flags));
-        super.dumpBack(pw, prefix, flags);
+        super.dumpBack(pw, prefix, dumpFlags);
     }
 
     public int describeContents() {
diff --git a/core/java/android/content/pm/ResolveInfo.java b/core/java/android/content/pm/ResolveInfo.java
index f312204..3f63d80 100644
--- a/core/java/android/content/pm/ResolveInfo.java
+++ b/core/java/android/content/pm/ResolveInfo.java
@@ -222,6 +222,40 @@
     }
 
     /**
+     * @return The resource that would be used when loading
+     * the label for this resolve info.
+     *
+     * @hide
+     */
+    public int resolveLabelResId() {
+        if (labelRes != 0) {
+            return labelRes;
+        }
+        final ComponentInfo componentInfo = getComponentInfo();
+        if (componentInfo.labelRes != 0) {
+            return componentInfo.labelRes;
+        }
+        return componentInfo.applicationInfo.labelRes;
+    }
+
+    /**
+     * @return The resource that would be used when loading
+     * the icon for this resolve info.
+     *
+     * @hide
+     */
+    public int resolveIconResId() {
+        if (icon != 0) {
+            return icon;
+        }
+        final ComponentInfo componentInfo = getComponentInfo();
+        if (componentInfo.icon != 0) {
+            return componentInfo.icon;
+        }
+        return componentInfo.applicationInfo.icon;
+    }
+
+    /**
      * Retrieve the current graphical icon associated with this resolution.  This
      * will call back on the given PackageManager to load the icon from
      * the application.
@@ -282,7 +316,7 @@
     }
 
     /** @hide */
-    public void dump(Printer pw, String prefix, int flags) {
+    public void dump(Printer pw, String prefix, int dumpFlags) {
         if (filter != null) {
             pw.println(prefix + "Filter:");
             filter.dump(pw, prefix + "  ");
@@ -302,13 +336,13 @@
         }
         if (activityInfo != null) {
             pw.println(prefix + "ActivityInfo:");
-            activityInfo.dump(pw, prefix + "  ", flags);
+            activityInfo.dump(pw, prefix + "  ", dumpFlags);
         } else if (serviceInfo != null) {
             pw.println(prefix + "ServiceInfo:");
-            serviceInfo.dump(pw, prefix + "  ", flags);
+            serviceInfo.dump(pw, prefix + "  ", dumpFlags);
         } else if (providerInfo != null) {
             pw.println(prefix + "ProviderInfo:");
-            providerInfo.dump(pw, prefix + "  ", flags);
+            providerInfo.dump(pw, prefix + "  ", dumpFlags);
         }
     }
 
diff --git a/core/java/android/content/pm/ServiceInfo.java b/core/java/android/content/pm/ServiceInfo.java
index c683ea5..91f884c 100644
--- a/core/java/android/content/pm/ServiceInfo.java
+++ b/core/java/android/content/pm/ServiceInfo.java
@@ -91,13 +91,13 @@
     }
 
     /** @hide */
-    void dump(Printer pw, String prefix, int flags) {
+    void dump(Printer pw, String prefix, int dumpFlags) {
         super.dumpFront(pw, prefix);
         pw.println(prefix + "permission=" + permission);
         pw.println(prefix + "flags=0x" + Integer.toHexString(flags));
-        super.dumpBack(pw, prefix, flags);
+        super.dumpBack(pw, prefix, dumpFlags);
     }
-    
+
     public String toString() {
         return "ServiceInfo{"
             + Integer.toHexString(System.identityHashCode(this))
diff --git a/core/java/android/content/pm/SharedLibraryInfo.java b/core/java/android/content/pm/SharedLibraryInfo.java
index 5032e6a..7d301a3 100644
--- a/core/java/android/content/pm/SharedLibraryInfo.java
+++ b/core/java/android/content/pm/SharedLibraryInfo.java
@@ -136,7 +136,6 @@
     }
 
     /**
-     * @hide
      * @removed
      */
     public boolean isBuiltin() {
@@ -144,7 +143,6 @@
     }
 
     /**
-     * @hide
      * @removed
      */
     public boolean isDynamic() {
@@ -152,7 +150,6 @@
     }
 
     /**
-     * @hide
      * @removed
      */
     public boolean isStatic() {
diff --git a/core/java/android/content/pm/ShortcutManager.java b/core/java/android/content/pm/ShortcutManager.java
index 61b0eb0..30222b7 100644
--- a/core/java/android/content/pm/ShortcutManager.java
+++ b/core/java/android/content/pm/ShortcutManager.java
@@ -36,15 +36,26 @@
 import java.util.List;
 
 /**
- * The ShortcutManager manages an app's <em>shortcuts</em>. Shortcuts provide users with quick
- * access to activities other than an app's main activity in the currently-active launcher, provided
- * that the launcher supports app shortcuts.  For example, an email app may publish the "compose new
- * email" action, which will directly open the compose activity.  The {@link ShortcutInfo} class
- * contains information about each of the shortcuts themselves.
+ * The ShortcutManager performs operations on an app's set of <em>shortcuts</em>. The
+ * {@link ShortcutInfo} class contains information about each of the shortcuts themselves.
+ *
+ * <p>An app's shortcuts represent specific tasks and actions that users can perform within your
+ * app. When a user selects a shortcut in the currently-active launcher, your app opens an activity
+ * other than the app's starting activity, provided that the currently-active launcher supports app
+ * shortcuts.</p>
+ *
+ * <p>The types of shortcuts that you create for your app depend on the app's key use cases. For
+ * example, an email app may publish the "compose new email" shortcut, which allows the app to
+ * directly open the compose activity.</p>
+ *
+ * <p class="note"><b>Note:</b> Only main activities&mdash;activities that handle the
+ * {@link Intent#ACTION_MAIN} action and the {@link Intent#CATEGORY_LAUNCHER} category&mdash;can
+ * have shortcuts. If an app has multiple main activities, you need to define the set of shortcuts
+ * for <em>each</em> activity.
  *
  * <p>This page discusses the implementation details of the <code>ShortcutManager</code> class. For
- * guidance on performing operations on app shortcuts within your app, see the
- * <a href="/guide/topics/ui/shortcuts.html">App Shortcuts</a> feature guide.
+ * definitions of key terms and guidance on performing operations on shortcuts within your app, see
+ * the <a href="/guide/topics/ui/shortcuts.html">App Shortcuts</a> feature guide.
  *
  * <h3>Shortcut characteristics</h3>
  *
@@ -69,8 +80,8 @@
  * <ul>
  *     <li>The user removes it.
  *     <li>The publisher app associated with the shortcut is uninstalled.
- *     <li>The user performs the clear data action on the publisher app from the device's
- *     <b>Settings</b> app.
+ *     <li>The user selects <b>Clear data</b> from the publisher app's <i>Storage</i> screen, within
+ *     the system's <b>Settings</b> app.
  * </ul>
  *
  * <p>Because the system performs
@@ -83,12 +94,17 @@
  *
  * <p>When the launcher displays an app's shortcuts, they should appear in the following order:
  *
- * <ul>
- *   <li>Static shortcuts (if {@link ShortcutInfo#isDeclaredInManifest()} is {@code true}),
- *   and then show dynamic shortcuts (if {@link ShortcutInfo#isDynamic()} is {@code true}).
- *   <li>Within each shortcut type (static and dynamic), sort the shortcuts in order of increasing
- *   rank according to {@link ShortcutInfo#getRank()}.
- * </ul>
+ * <ol>
+ *   <li><b>Static shortcuts:</b> Shortcuts whose {@link ShortcutInfo#isDeclaredInManifest()} method
+ *   returns {@code true}.</li>
+ *   <li><b>Dynamic shortcuts:</b> Shortcuts whose {@link ShortcutInfo#isDynamic()} method returns
+ *   {@code true}.</li>
+ * </ol>
+ *
+ * <p>Within each shortcut type (static and dynamic), shortcuts are sorted in order of increasing
+ * rank according to {@link ShortcutInfo#getRank()}.</p>
+ *
+ * <h4>Shortcut ranks</h4>
  *
  * <p>Shortcut ranks are non-negative, sequential integers that determine the order in which
  * shortcuts appear, assuming that the shortcuts are all in the same category. You can update ranks
@@ -103,64 +119,99 @@
  *
  * <h3>Options for static shortcuts</h3>
  *
- * The following list includes descriptions for the different attributes within a static shortcut:
+ * The following list includes descriptions for the different attributes within a static shortcut.
+ * You must provide a value for {@code android:shortcutId} and {@code android:shortcutShortLabel};
+ * all other values are optional.
+ *
  * <dl>
  *   <dt>{@code android:shortcutId}</dt>
- *   <dd>Mandatory shortcut ID.
- *   <p>
- *   This must be a string literal.
- *   A resource string, such as <code>@string/foo</code>, cannot be used.
+ *   <dd><p>A string literal, which represents the shortcut when a {@code ShortcutManager} object
+ *   performs operations on it.</p>
+ *   <p class="note"><b>Note: </b>You cannot set this attribute's value to a resource string, such
+ *   as <code>@string/foo</code>.</p>
  *   </dd>
  *
  *   <dt>{@code android:enabled}</dt>
- *   <dd>Default is {@code true}.  Can be set to {@code false} in order
- *   to disable a static shortcut that was published in a previous version and set a custom
- *   disabled message.  If a custom disabled message is not needed, then a static shortcut can
- *   be simply removed from the XML file rather than keeping it with {@code enabled="false"}.</dd>
+ *   <dd><p>Whether the user can interact with the shortcut from a supported launcher.</p>
+ *   <p>The default value is {@code true}. If you set it to {@code false}, you should also set
+ *   {@code android:shortcutDisabledMessage} to a message that explains why you've disabled the
+ *   shortcut. If you don't think you need to provide such a message, it's easiest to just remove
+ *   the shortcut from the XML file entirely, rather than changing the values of the shortcut's
+ *   {@code android:enabled} and {@code android:shortcutDisabledMessage} attributes.
+ *   </dd>
  *
  *   <dt>{@code android:icon}</dt>
- *   <dd>Shortcut icon.</dd>
+ *   <dd><p>The <a href="/topic/performance/graphics/index.html">bitmap</a> or
+ *   <a href="/guide/practices/ui_guidelines/icon_design_adaptive.html">adaptive icon</a> that the
+ *   launcher uses when displaying the shortcut to the user. This value can be either the path to an
+ *   image or the resource file that contains the image. Use adaptive icons whenever possible to
+ *   improve performance and consistency.</p>
+ *   <p class="note"><b>Note: </b>Shortcut icons cannot include
+ *   <a href="/training/material/drawables.html#DrawableTint">tints</a>.
+ *   </dd>
  *
  *   <dt>{@code android:shortcutShortLabel}</dt>
- *   <dd>Mandatory shortcut short label.
- *   See {@link ShortcutInfo.Builder#setShortLabel(CharSequence)}.
- *   <p>
- *   This must be a resource string, such as <code>@string/shortcut_label</code>.
+ *   <dd><p>A concise phrase that describes the shortcut's purpose. For more information, see
+ *   {@link ShortcutInfo.Builder#setShortLabel(CharSequence)}.</p>
+ *   <p class="note"><b>Note: </b>This attribute's value must be a resource string, such as
+ *   <code>@string/shortcut_short_label</code>.</p>
  *   </dd>
  *
  *   <dt>{@code android:shortcutLongLabel}</dt>
- *   <dd>Shortcut long label.
- *   See {@link ShortcutInfo.Builder#setLongLabel(CharSequence)}.
- *   <p>
- *   This must be a resource string, such as <code>@string/shortcut_long_label</code>.
+ *   <dd><p>An extended phrase that describes the shortcut's purpose. If there's enough space, the
+ *   launcher displays this value instead of {@code android:shortcutShortLabel}. For more
+ *   information, see {@link ShortcutInfo.Builder#setLongLabel(CharSequence)}.</p>
+ *   <p class="note"><b>Note: </b>This attribute's value must be a resource string, such as
+ *   <code>@string/shortcut_long_label</code>.</p>
  *   </dd>
  *
  *   <dt>{@code android:shortcutDisabledMessage}</dt>
- *   <dd>When {@code android:enabled} is set to
- *   {@code false}, this attribute is used to display a custom disabled message.
- *   <p>
- *   This must be a resource string, such as <code>@string/shortcut_disabled_message</code>.
+ *   <dd><p>The message that appears in a supported launcher when the user attempts to launch a
+ *   disabled shortcut. The message should explain to the user why the shortcut is now disabled.
+ *   This attribute's value has no effect if {@code android:enabled} is {@code true}.</p>
+ *   <p class="note"><b>Note: </b>This attribute's value must be a resource string, such as
+ *   <code>@string/shortcut_disabled_message</code>.</p>
+ *   </dd>
+ * </dl>
+ *
+ * <h3>Inner elements that define static shortcuts</h3>
+ *
+ * <p>The XML file that lists an app's static shortcuts supports the following elements inside each
+ * {@code <shortcut>} element. You must include an {@code intent} inner element for each
+ * static shortcut that you define.</p>
+ *
+ * <dl>
+ *   <dt>{@code intent}</dt>
+ *   <dd><p>The action that the system launches when the user selects the shortcut. This intent must
+ *   provide a value for the {@code android:action} attribute.</p>
+ *   <p>You can provide multiple intents for a single shortcut. If you do so, the last defined
+ *   activity is launched, and the other activities are placed in the
+ *   <a href="/guide/components/tasks-and-back-stack.html">back stack</a>. See
+ *   <a href="/guide/topics/ui/shortcuts.html#static">Using Static Shortcuts</a> and the
+ *   {@link android.app.TaskStackBuilder} class reference for details.</p>
+ *   <p class="note"><b>Note:</b> This {@code intent} element cannot include string resources.</p>
+ *   <p>To learn more about how to configure intents, see
+ *   <a href="{@docRoot}guide/topics/ui/settings.html#Intents">Using intents</a>.</p>
  *   </dd>
  *
- *   <dt>{@code intent}</dt>
- *   <dd>Intent to launch when the user selects the shortcut.
- *   {@code android:action} is mandatory.
- *   See <a href="{@docRoot}guide/topics/ui/settings.html#Intents">Using intents</a> for the
- *   other supported tags.
- *   <p>You can provide multiple intents for a single shortcut so that the last defined activity is
- *   launched with the other activities in the
- *   <a href="/guide/components/tasks-and-back-stack.html">back stack</a>. See
- *   {@link android.app.TaskStackBuilder} for details.
- *   <p><b>Note:</b> String resources may not be used within an {@code <intent>} element.
- *   </dd>
  *   <dt>{@code categories}</dt>
- *   <dd>Specify shortcut categories.  Currently only
- *   {@link ShortcutInfo#SHORTCUT_CATEGORY_CONVERSATION} is defined in the framework.
+ *   <dd><p>Provides a grouping for the types of actions that your app's shortcuts perform, such as
+ *   creating new chat messages.</p>
+ *   <p>For a list of supported shortcut categories, see the {@link ShortcutInfo} class reference
+ *   for a list of supported shortcut categories.
  *   </dd>
  * </dl>
  *
  * <h3>Updating shortcuts</h3>
  *
+ * <p>Each app's launcher icon can contain at most {@link #getMaxShortcutCountPerActivity()} number
+ * of static and dynamic shortcuts combined. There is no limit to the number of pinned shortcuts
+ * that an app can create, though.
+ *
+ * <p>When a dynamic shortcut is pinned, even when the publisher removes it as a dynamic shortcut,
+ * the pinned shortcut is still visible and launchable.  This allows an app to have more than
+ * {@link #getMaxShortcutCountPerActivity()} number of shortcuts.
+ *
  * <p>As an example, suppose {@link #getMaxShortcutCountPerActivity()} is 5:
  * <ol>
  *     <li>A chat app publishes 5 dynamic shortcuts for the 5 most recent
@@ -168,18 +219,13 @@
  *
  *     <li>The user pins all 5 of the shortcuts.
  *
- *     <li>Later, the user has started 3 additional conversations (c6, c7, and c8),
- *     so the publisher app
- *     re-publishes its dynamic shortcuts.  The new dynamic shortcut list is:
- *     c4, c5, ..., c8.
- *     The publisher app has to remove c1, c2, and c3 because it can't have more than
- *     5 dynamic shortcuts.
- *
- *     <li>However, even though c1, c2, and c3 are no longer dynamic shortcuts, the pinned
- *     shortcuts for these conversations are still available and launchable.
- *
- *     <li>At this point, the user can access a total of 8 shortcuts that link to activities in
- *     the publisher app, including the 3 pinned shortcuts, even though an app can have at most 5
+ *     <li>Later, the user has started 3 additional conversations (c6, c7, and c8), so the publisher
+ *     app re-publishes its dynamic shortcuts. The new dynamic shortcut list is: c4, c5, ..., c8.
+ *     <p>The publisher app has to remove c1, c2, and c3 because it can't have more than 5 dynamic
+ *     shortcuts. However, c1, c2, and c3 are still pinned shortcuts that the user can access and
+ *     launch.
+ *     <p>At this point, the user can access a total of 8 shortcuts that link to activities in the
+ *     publisher app, including the 3 pinned shortcuts, even though an app can have at most 5
  *     dynamic shortcuts.
  *
  *     <li>The app can use {@link #updateShortcuts(List)} to update <em>any</em> of the existing
@@ -196,44 +242,23 @@
  * Dynamic shortcuts can be published with any set of {@link Intent#addFlags Intent} flags.
  * Typically, {@link Intent#FLAG_ACTIVITY_CLEAR_TASK} is specified, possibly along with other
  * flags; otherwise, if the app is already running, the app is simply brought to
- * the foreground, and the target activity may not appear.
+ * the foreground, and the target activity might not appear.
  *
  * <p>Static shortcuts <b>cannot</b> have custom intent flags.
  * The first intent of a static shortcut will always have {@link Intent#FLAG_ACTIVITY_NEW_TASK}
  * and {@link Intent#FLAG_ACTIVITY_CLEAR_TASK} set. This means, when the app is already running, all
- * the existing activities in your app will be destroyed when a static shortcut is launched.
+ * the existing activities in your app are destroyed when a static shortcut is launched.
  * If this behavior is not desirable, you can use a <em>trampoline activity</em>, or an invisible
  * activity that starts another activity in {@link Activity#onCreate}, then calls
  * {@link Activity#finish()}:
  * <ol>
  *     <li>In the <code>AndroidManifest.xml</code> file, the trampoline activity should include the
  *     attribute assignment {@code android:taskAffinity=""}.
- *     <li>In the shortcuts resource file, the intent within the static shortcut should point at
+ *     <li>In the shortcuts resource file, the intent within the static shortcut should reference
  *     the trampoline activity.
  * </ol>
  *
- * <h3>Handling system locale changes</h3>
- *
- * <p>Apps should update dynamic and pinned shortcuts when the system locale changes using the
- * {@link Intent#ACTION_LOCALE_CHANGED} broadcast. When the system locale changes,
- * <a href="/guide/topics/ui/shortcuts.html#rate-limit">rate limiting</a> is reset, so even
- * background apps can add and update dynamic shortcuts until the rate limit is reached again.
- *
- * <h3>Shortcut limits</h3>
- *
- * <p>Only main activities&mdash;activities that handle the {@code MAIN} action and the
- * {@code LAUNCHER} category&mdash;can have shortcuts. If an app has multiple main activities, you
- * need to define the set of shortcuts for <em>each</em> activity.
- *
- * <p>Each launcher icon can have at most {@link #getMaxShortcutCountPerActivity()} number of
- * static and dynamic shortcuts combined. There is no limit to the number of pinned shortcuts that
- * an app can create.
- *
- * <p>When a dynamic shortcut is pinned, even when the publisher removes it as a dynamic shortcut,
- * the pinned shortcut is still visible and launchable.  This allows an app to have more than
- * {@link #getMaxShortcutCountPerActivity()} number of shortcuts.
- *
- * <h4>Rate limiting</h4>
+ * <h3>Rate limiting</h3>
  *
  * <p>When <a href="/guide/topics/ui/shortcuts.html#rate-limit">rate limiting</a> is active,
  * {@link #isRateLimitingActive()} returns {@code true}.
@@ -243,8 +268,20 @@
  * <ul>
  *   <li>An app comes to the foreground.
  *   <li>The system locale changes.
- *   <li>The user performs the <strong>inline reply</strong> action on a notification.
+ *   <li>The user performs the <a href="/guide/topics/ui/notifiers/notifications.html#direct">inline
+ *   reply</a> action on a notification.
  * </ul>
+ *
+ * <h3>Handling system locale changes</h3>
+ *
+ * <p>Apps should update dynamic and pinned shortcuts when they receive the
+ * {@link Intent#ACTION_LOCALE_CHANGED} broadcast, indicating that the system locale has changed.
+ * <p>When the system locale changes, <a href="/guide/topics/ui/shortcuts.html#rate-limit">rate
+ * limiting</a> is reset, so even background apps can add and update dynamic shortcuts until the
+ * rate limit is reached again.
+ *
+ * <h3>Retrieving class instances</h3>
+ * <!-- Provides a heading for the content filled in by the @SystemService annotation below -->
  */
 @SystemService(Context.SHORTCUT_SERVICE)
 public class ShortcutManager {
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 60226d5..e173653c 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -19,6 +19,7 @@
 import android.animation.Animator;
 import android.animation.StateListAnimator;
 import android.annotation.AnimRes;
+import android.annotation.AnimatorRes;
 import android.annotation.AnyRes;
 import android.annotation.ArrayRes;
 import android.annotation.AttrRes;
@@ -1162,7 +1163,7 @@
      *         
      * @see #getXml
      */
-    public XmlResourceParser getAnimation(@AnimRes int id) throws NotFoundException {
+    public XmlResourceParser getAnimation(@AnimatorRes @AnimRes int id) throws NotFoundException {
         return loadXmlResourceParser(id, "anim");
     }
 
diff --git a/core/java/android/content/res/ResourcesImpl.java b/core/java/android/content/res/ResourcesImpl.java
index 18e305b..97cb78b 100644
--- a/core/java/android/content/res/ResourcesImpl.java
+++ b/core/java/android/content/res/ResourcesImpl.java
@@ -15,9 +15,6 @@
  */
 package android.content.res;
 
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
 import android.animation.Animator;
 import android.animation.StateListAnimator;
 import android.annotation.AnyRes;
@@ -32,7 +29,7 @@
 import android.content.pm.ActivityInfo.Config;
 import android.content.res.Configuration.NativeConfig;
 import android.content.res.Resources.NotFoundException;
-import android.graphics.FontFamily;
+import android.graphics.Bitmap;
 import android.graphics.Typeface;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
@@ -40,8 +37,9 @@
 import android.icu.text.PluralRules;
 import android.os.Build;
 import android.os.LocaleList;
+import android.os.SystemClock;
+import android.os.SystemProperties;
 import android.os.Trace;
-import android.text.FontConfig;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
 import android.util.Log;
@@ -51,10 +49,14 @@
 import android.util.Xml;
 import android.view.DisplayAdjustments;
 
+import com.android.internal.util.GrowingArrayUtils;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Arrays;
-import java.util.List;
 import java.util.Locale;
 
 /**
@@ -72,9 +74,20 @@
 
     private static final boolean DEBUG_LOAD = false;
     private static final boolean DEBUG_CONFIG = false;
-    private static final boolean TRACE_FOR_PRELOAD = false;
-    private static final boolean TRACE_FOR_MISS_PRELOAD = false;
 
+    static final String TAG_PRELOAD = TAG + ".preload";
+
+    private static final boolean TRACE_FOR_PRELOAD = false; // Do we still need it?
+    private static final boolean TRACE_FOR_MISS_PRELOAD = false; // Do we still need it?
+
+    public static final boolean TRACE_FOR_DETAILED_PRELOAD =
+            SystemProperties.getBoolean("debug.trace_resource_preload", false);
+
+    /** Used only when TRACE_FOR_DETAILED_PRELOAD is true. */
+    private static int sPreloadTracingNumLoadedDrawables;
+    private long mPreloadTracingPreloadStartTime;
+    private long mPreloadTracingStartBitmapSize;
+    private long mPreloadTracingStartBitmapCount;
 
     private static final int ID_OTHER = 0x01000004;
 
@@ -106,6 +119,13 @@
     private final ConfigurationBoundResourceCache<StateListAnimator> mStateListAnimatorCache =
             new ConfigurationBoundResourceCache<>();
 
+    // A stack of all the resourceIds already referenced when parsing a resource. This is used to
+    // detect circular references in the xml.
+    // Using a ThreadLocal variable ensures that we have different stacks for multiple parallel
+    // calls to ResourcesImpl
+    private final ThreadLocal<LookupStack> mLookupStack =
+            ThreadLocal.withInitial(() -> new LookupStack());
+
     /** Size of the cyclical cache used to map XML files to blocks. */
     private static final int XML_BLOCK_CACHE_SIZE = 4;
 
@@ -593,6 +613,16 @@
             Drawable dr;
             boolean needsNewDrawableAfterCache = false;
             if (cs != null) {
+                if (TRACE_FOR_DETAILED_PRELOAD) {
+                    // Log only framework resources
+                    if (((id >>> 24) == 0x1) && (android.os.Process.myUid() != 0)) {
+                        final String name = getResourceName(id);
+                        if (name != null) {
+                            Log.d(TAG_PRELOAD, "Hit preloaded FW drawable #"
+                                    + Integer.toHexString(id) + " " + name);
+                        }
+                    }
+                }
                 dr = cs.newDrawable(wrapper);
             } else if (isColorDrawable) {
                 dr = new ColorDrawable(value.data);
@@ -744,6 +774,18 @@
             }
         }
 
+        // For prelaod tracing.
+        long startTime = 0;
+        int startBitmapCount = 0;
+        long startBitmapSize = 0;
+        int startDrwableCount = 0;
+        if (TRACE_FOR_DETAILED_PRELOAD) {
+            startTime = System.nanoTime();
+            startBitmapCount = Bitmap.sPreloadTracingNumInstantiatedBitmaps;
+            startBitmapSize = Bitmap.sPreloadTracingTotalBitmapsSize;
+            startDrwableCount = sPreloadTracingNumLoadedDrawables;
+        }
+
         if (DEBUG_LOAD) {
             Log.v(TAG, "Loading drawable for cookie " + value.assetCookie + ": " + file);
         }
@@ -751,17 +793,27 @@
         final Drawable dr;
 
         Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, file);
+        LookupStack stack = mLookupStack.get();
         try {
-            if (file.endsWith(".xml")) {
-                final XmlResourceParser rp = loadXmlResourceParser(
-                        file, id, value.assetCookie, "drawable");
-                dr = Drawable.createFromXmlForDensity(wrapper, rp, density, theme);
-                rp.close();
-            } else {
-                final InputStream is = mAssets.openNonAsset(
-                        value.assetCookie, file, AssetManager.ACCESS_STREAMING);
-                dr = Drawable.createFromResourceStream(wrapper, value, is, file, null);
-                is.close();
+            // Perform a linear search to check if we have already referenced this resource before.
+            if (stack.contains(id)) {
+                throw new Exception("Recursive reference in drawable");
+            }
+            stack.push(id);
+            try {
+                if (file.endsWith(".xml")) {
+                    final XmlResourceParser rp = loadXmlResourceParser(
+                            file, id, value.assetCookie, "drawable");
+                    dr = Drawable.createFromXmlForDensity(wrapper, rp, density, theme);
+                    rp.close();
+                } else {
+                    final InputStream is = mAssets.openNonAsset(
+                            value.assetCookie, file, AssetManager.ACCESS_STREAMING);
+                    dr = Drawable.createFromResourceStream(wrapper, value, is, file, null);
+                    is.close();
+                }
+            } finally {
+                stack.pop();
             }
         } catch (Exception | StackOverflowError e) {
             Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
@@ -772,6 +824,37 @@
         }
         Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
 
+        if (TRACE_FOR_DETAILED_PRELOAD) {
+            if (((id >>> 24) == 0x1)) {
+                final String name = getResourceName(id);
+                if (name != null) {
+                    final long time = System.nanoTime() - startTime;
+                    final int loadedBitmapCount =
+                            Bitmap.sPreloadTracingNumInstantiatedBitmaps - startBitmapCount;
+                    final long loadedBitmapSize =
+                            Bitmap.sPreloadTracingTotalBitmapsSize - startBitmapSize;
+                    final int loadedDrawables =
+                            sPreloadTracingNumLoadedDrawables - startDrwableCount;
+
+                    sPreloadTracingNumLoadedDrawables++;
+
+                    final boolean isRoot = (android.os.Process.myUid() == 0);
+
+                    Log.d(TAG_PRELOAD,
+                            (isRoot ? "Preloaded FW drawable #"
+                                    : "Loaded non-preloaded FW drawable #")
+                            + Integer.toHexString(id)
+                            + " " + name
+                            + " " + file
+                            + " " + dr.getClass().getCanonicalName()
+                            + " #nested_drawables= " + loadedDrawables
+                            + " #bitmaps= " + loadedBitmapCount
+                            + " total_bitmap_size= " + loadedBitmapSize
+                            + " in[us] " + (time / 1000));
+                }
+            }
+        }
+
         return dr;
     }
 
@@ -1102,6 +1185,13 @@
             mPreloading = true;
             mConfiguration.densityDpi = DisplayMetrics.DENSITY_DEVICE;
             updateConfiguration(null, null, null);
+
+            if (TRACE_FOR_DETAILED_PRELOAD) {
+                mPreloadTracingPreloadStartTime = SystemClock.uptimeMillis();
+                mPreloadTracingStartBitmapSize = Bitmap.sPreloadTracingTotalBitmapsSize;
+                mPreloadTracingStartBitmapCount = Bitmap.sPreloadTracingNumInstantiatedBitmaps;
+                Log.d(TAG_PRELOAD, "Preload starting");
+            }
         }
     }
 
@@ -1111,6 +1201,16 @@
      */
     void finishPreloading() {
         if (mPreloading) {
+            if (TRACE_FOR_DETAILED_PRELOAD) {
+                final long time = SystemClock.uptimeMillis() - mPreloadTracingPreloadStartTime;
+                final long size =
+                        Bitmap.sPreloadTracingTotalBitmapsSize - mPreloadTracingStartBitmapSize;
+                final long count = Bitmap.sPreloadTracingNumInstantiatedBitmaps
+                        - mPreloadTracingStartBitmapCount;
+                Log.d(TAG_PRELOAD, "Preload finished, "
+                        + count + " bitmaps of " + size + " bytes in " + time + " ms");
+            }
+
             mPreloading = false;
             flushLayoutCache();
         }
@@ -1296,4 +1396,29 @@
             }
         }
     }
+
+    private static class LookupStack {
+
+        // Pick a reasonable default size for the array, it is grown as needed.
+        private int[] mIds = new int[4];
+        private int mSize = 0;
+
+        public void push(int id) {
+            mIds = GrowingArrayUtils.append(mIds, mSize, id);
+            mSize++;
+        }
+
+        public boolean contains(int id) {
+            for (int i = 0; i < mSize; i++) {
+                if (mIds[i] == id) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        public void pop() {
+            mSize--;
+        }
+    }
 }
diff --git a/core/java/android/database/AbstractCursor.java b/core/java/android/database/AbstractCursor.java
index 581fe7f..fdb702f 100644
--- a/core/java/android/database/AbstractCursor.java
+++ b/core/java/android/database/AbstractCursor.java
@@ -23,6 +23,7 @@
 import android.util.Log;
 
 import java.lang.ref.WeakReference;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -330,7 +331,14 @@
     public int getColumnIndexOrThrow(String columnName) {
         final int index = getColumnIndex(columnName);
         if (index < 0) {
-            throw new IllegalArgumentException("column '" + columnName + "' does not exist");
+            String availableColumns = "";
+            try {
+                availableColumns = Arrays.toString(getColumnNames());
+            } catch (Exception e) {
+                Log.d(TAG, "Cannot collect column names for debug purposes", e);
+            }
+            throw new IllegalArgumentException("column '" + columnName
+                    + "' does not exist. Available columns: " + availableColumns);
         }
         return index;
     }
diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java
index 34a9523..f894f05 100644
--- a/core/java/android/database/sqlite/SQLiteConnection.java
+++ b/core/java/android/database/sqlite/SQLiteConnection.java
@@ -16,9 +16,6 @@
 
 package android.database.sqlite;
 
-import dalvik.system.BlockGuard;
-import dalvik.system.CloseGuard;
-
 import android.database.Cursor;
 import android.database.CursorWindow;
 import android.database.DatabaseUtils;
@@ -32,11 +29,14 @@
 import android.util.LruCache;
 import android.util.Printer;
 
+import dalvik.system.BlockGuard;
+import dalvik.system.CloseGuard;
+
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Map;
-import java.util.regex.Pattern;
+
 
 /**
  * Represents a SQLite database connection.
@@ -118,7 +118,8 @@
     private int mCancellationSignalAttachCount;
 
     private static native long nativeOpen(String path, int openFlags, String label,
-            boolean enableTrace, boolean enableProfile);
+            boolean enableTrace, boolean enableProfile, int lookasideSlotSize,
+            int lookasideSlotCount);
     private static native void nativeClose(long connectionPtr);
     private static native void nativeRegisterCustomFunction(long connectionPtr,
             SQLiteCustomFunction function);
@@ -208,8 +209,8 @@
     private void open() {
         mConnectionPtr = nativeOpen(mConfiguration.path, mConfiguration.openFlags,
                 mConfiguration.label,
-                SQLiteDebug.DEBUG_SQL_STATEMENTS, SQLiteDebug.DEBUG_SQL_TIME);
-
+                SQLiteDebug.DEBUG_SQL_STATEMENTS, SQLiteDebug.DEBUG_SQL_TIME,
+                mConfiguration.lookasideSlotSize, mConfiguration.lookasideSlotCount);
         setPageSize();
         setForeignKeyModeFromConfiguration();
         setWalModeFromConfiguration();
diff --git a/core/java/android/database/sqlite/SQLiteConnectionPool.java b/core/java/android/database/sqlite/SQLiteConnectionPool.java
index 3a1714c..b66bf18 100644
--- a/core/java/android/database/sqlite/SQLiteConnectionPool.java
+++ b/core/java/android/database/sqlite/SQLiteConnectionPool.java
@@ -16,16 +16,22 @@
 
 package android.database.sqlite;
 
-import dalvik.system.CloseGuard;
-
 import android.database.sqlite.SQLiteDebug.DbStats;
 import android.os.CancellationSignal;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
 import android.os.OperationCanceledException;
 import android.os.SystemClock;
 import android.util.Log;
 import android.util.PrefixPrinter;
 import android.util.Printer;
 
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
+
+import dalvik.system.CloseGuard;
+
 import java.io.Closeable;
 import java.util.ArrayList;
 import java.util.Map;
@@ -93,6 +99,9 @@
             new ArrayList<SQLiteConnection>();
     private SQLiteConnection mAvailablePrimaryConnection;
 
+    @GuardedBy("mLock")
+    private IdleConnectionHandler mIdleConnectionHandler;
+
     // Describes what should happen to an acquired connection when it is returned to the pool.
     enum AcquiredConnectionStatus {
         // The connection should be returned to the pool as usual.
@@ -148,6 +157,12 @@
     private SQLiteConnectionPool(SQLiteDatabaseConfiguration configuration) {
         mConfiguration = new SQLiteDatabaseConfiguration(configuration);
         setMaxConnectionPoolSizeLocked();
+        // If timeout is set, setup idle connection handler
+        // In case of MAX_VALUE - idle connections are never closed
+        if (mConfiguration.idleConnectionTimeoutMs != Long.MAX_VALUE) {
+            setupIdleConnectionHandler(Looper.getMainLooper(),
+                    mConfiguration.idleConnectionTimeoutMs);
+        }
     }
 
     @Override
@@ -184,6 +199,12 @@
         // This might throw if the database is corrupt.
         mAvailablePrimaryConnection = openConnectionLocked(mConfiguration,
                 true /*primaryConnection*/); // might throw
+        // Mark it released so it can be closed after idle timeout
+        synchronized (mLock) {
+            if (mIdleConnectionHandler != null) {
+                mIdleConnectionHandler.connectionReleased(mAvailablePrimaryConnection);
+            }
+        }
 
         // Mark the pool as being open for business.
         mIsOpen = true;
@@ -345,7 +366,13 @@
      */
     public SQLiteConnection acquireConnection(String sql, int connectionFlags,
             CancellationSignal cancellationSignal) {
-        return waitForConnection(sql, connectionFlags, cancellationSignal);
+        SQLiteConnection con = waitForConnection(sql, connectionFlags, cancellationSignal);
+        synchronized (mLock) {
+            if (mIdleConnectionHandler != null) {
+                mIdleConnectionHandler.connectionAcquired(con);
+            }
+        }
+        return con;
     }
 
     /**
@@ -362,6 +389,9 @@
      */
     public void releaseConnection(SQLiteConnection connection) {
         synchronized (mLock) {
+            if (mIdleConnectionHandler != null) {
+                mIdleConnectionHandler.connectionReleased(connection);
+            }
             AcquiredConnectionStatus status = mAcquiredConnections.remove(connection);
             if (status == null) {
                 throw new IllegalStateException("Cannot perform this operation "
@@ -504,6 +534,27 @@
     }
 
     // Can't throw.
+    private boolean closeAvailableConnectionLocked(int connectionId) {
+        final int count = mAvailableNonPrimaryConnections.size();
+        for (int i = count - 1; i >= 0; i--) {
+            SQLiteConnection c = mAvailableNonPrimaryConnections.get(i);
+            if (c.getConnectionId() == connectionId) {
+                closeConnectionAndLogExceptionsLocked(c);
+                mAvailableNonPrimaryConnections.remove(i);
+                return true;
+            }
+        }
+
+        if (mAvailablePrimaryConnection != null
+                && mAvailablePrimaryConnection.getConnectionId() == connectionId) {
+            closeConnectionAndLogExceptionsLocked(mAvailablePrimaryConnection);
+            mAvailablePrimaryConnection = null;
+            return true;
+        }
+        return false;
+    }
+
+    // Can't throw.
     private void closeAvailableNonPrimaryConnectionsAndLogExceptionsLocked() {
         final int count = mAvailableNonPrimaryConnections.size();
         for (int i = 0; i < count; i++) {
@@ -526,6 +577,9 @@
     private void closeConnectionAndLogExceptionsLocked(SQLiteConnection connection) {
         try {
             connection.close(); // might throw
+            if (mIdleConnectionHandler != null) {
+                mIdleConnectionHandler.connectionClosed(connection);
+            }
         } catch (RuntimeException ex) {
             Log.e(TAG, "Failed to close connection, its fate is now in the hands "
                     + "of the merciful GC: " + connection, ex);
@@ -946,17 +1000,35 @@
     }
 
     private void setMaxConnectionPoolSizeLocked() {
-        if ((mConfiguration.openFlags & SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING) != 0) {
+        if (!mConfiguration.isInMemoryDb()
+                && (mConfiguration.openFlags & SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING) != 0) {
             mMaxConnectionPoolSize = SQLiteGlobal.getWALConnectionPoolSize();
         } else {
-            // TODO: We don't actually need to restrict the connection pool size to 1
+            // We don't actually need to always restrict the connection pool size to 1
             // for non-WAL databases.  There might be reasons to use connection pooling
-            // with other journal modes.  For now, enabling connection pooling and
-            // using WAL are the same thing in the API.
+            // with other journal modes. However, we should always keep pool size of 1 for in-memory
+            // databases since every :memory: db is separate from another.
+            // For now, enabling connection pooling and using WAL are the same thing in the API.
             mMaxConnectionPoolSize = 1;
         }
     }
 
+    /**
+     * Set up the handler based on the provided looper and timeout.
+     */
+    @VisibleForTesting
+    public void setupIdleConnectionHandler(Looper looper, long timeoutMs) {
+        synchronized (mLock) {
+            mIdleConnectionHandler = new IdleConnectionHandler(looper, timeoutMs);
+        }
+    }
+
+    void disableIdleConnectionHandler() {
+        synchronized (mLock) {
+            mIdleConnectionHandler = null;
+        }
+    }
+
     private void throwIfClosedLocked() {
         if (!mIsOpen) {
             throw new IllegalStateException("Cannot perform this operation "
@@ -1004,7 +1076,14 @@
             printer.println("Connection pool for " + mConfiguration.path + ":");
             printer.println("  Open: " + mIsOpen);
             printer.println("  Max connections: " + mMaxConnectionPoolSize);
-
+            if (mConfiguration.isLookasideConfigSet()) {
+                printer.println("  Lookaside config: sz=" + mConfiguration.lookasideSlotSize
+                        + " cnt=" + mConfiguration.lookasideSlotCount);
+            }
+            if (mConfiguration.idleConnectionTimeoutMs != Long.MAX_VALUE) {
+                printer.println(
+                        "  Idle connection timeout: " + mConfiguration.idleConnectionTimeoutMs);
+            }
             printer.println("  Available primary connection:");
             if (mAvailablePrimaryConnection != null) {
                 mAvailablePrimaryConnection.dump(indentedPrinter, verbose);
@@ -1069,4 +1148,42 @@
         public RuntimeException mException;
         public int mNonce;
     }
+
+    private class IdleConnectionHandler extends Handler {
+        private final long mTimeout;
+
+        IdleConnectionHandler(Looper looper, long timeout) {
+            super(looper);
+            mTimeout = timeout;
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            // Skip the (obsolete) message if the handler has changed
+            synchronized (mLock) {
+                if (this != mIdleConnectionHandler) {
+                    return;
+                }
+                if (closeAvailableConnectionLocked(msg.what)) {
+                    if (Log.isLoggable(TAG, Log.DEBUG)) {
+                        Log.d(TAG, "Closed idle connection " + mConfiguration.label + " " + msg.what
+                                + " after " + mTimeout);
+                    }
+                }
+            }
+        }
+
+        void connectionReleased(SQLiteConnection con) {
+            sendEmptyMessageDelayed(con.getConnectionId(), mTimeout);
+        }
+
+        void connectionAcquired(SQLiteConnection con) {
+            // Remove any pending close operations
+            removeMessages(con.getConnectionId());
+        }
+
+        void connectionClosed(SQLiteConnection con) {
+            removeMessages(con.getConnectionId());
+        }
+    }
 }
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index debf058..822bc2c 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -16,8 +16,11 @@
 
 package android.database.sqlite;
 
+import android.annotation.IntDef;
+import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.app.ActivityManager;
 import android.content.ContentValues;
 import android.database.Cursor;
 import android.database.DatabaseErrorHandler;
@@ -28,16 +31,21 @@
 import android.os.CancellationSignal;
 import android.os.Looper;
 import android.os.OperationCanceledException;
+import android.os.SystemProperties;
 import android.text.TextUtils;
 import android.util.EventLog;
 import android.util.Log;
 import android.util.Pair;
 import android.util.Printer;
 
+import com.android.internal.util.Preconditions;
+
 import dalvik.system.CloseGuard;
 
 import java.io.File;
 import java.io.FileFilter;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -71,21 +79,20 @@
 
     private static final int EVENT_DB_CORRUPT = 75004;
 
+    // By default idle connections are not closed
+    private static final boolean DEBUG_CLOSE_IDLE_CONNECTIONS = SystemProperties
+            .getBoolean("persist.debug.sqlite.close_idle_connections", false);
+
     // Stores reference to all databases opened in the current process.
     // (The referent Object is not used at this time.)
     // INVARIANT: Guarded by sActiveDatabases.
-    private static WeakHashMap<SQLiteDatabase, Object> sActiveDatabases =
-            new WeakHashMap<SQLiteDatabase, Object>();
+    private static WeakHashMap<SQLiteDatabase, Object> sActiveDatabases = new WeakHashMap<>();
 
     // Thread-local for database sessions that belong to this database.
     // Each thread has its own database session.
     // INVARIANT: Immutable.
-    private final ThreadLocal<SQLiteSession> mThreadSession = new ThreadLocal<SQLiteSession>() {
-        @Override
-        protected SQLiteSession initialValue() {
-            return createSession();
-        }
-    };
+    private final ThreadLocal<SQLiteSession> mThreadSession = ThreadLocal
+            .withInitial(this::createSession);
 
     // The optional factory to use when creating new Cursors.  May be null.
     // INVARIANT: Immutable.
@@ -253,11 +260,31 @@
      */
     public static final int MAX_SQL_CACHE_SIZE = 100;
 
-    private SQLiteDatabase(String path, int openFlags, CursorFactory cursorFactory,
-            DatabaseErrorHandler errorHandler) {
+    private SQLiteDatabase(final String path, final int openFlags,
+            CursorFactory cursorFactory, DatabaseErrorHandler errorHandler,
+            int lookasideSlotSize, int lookasideSlotCount, long idleConnectionTimeoutMs) {
         mCursorFactory = cursorFactory;
         mErrorHandler = errorHandler != null ? errorHandler : new DefaultDatabaseErrorHandler();
         mConfigurationLocked = new SQLiteDatabaseConfiguration(path, openFlags);
+        mConfigurationLocked.lookasideSlotSize = lookasideSlotSize;
+        mConfigurationLocked.lookasideSlotCount = lookasideSlotCount;
+        // Disable lookaside allocator on low-RAM devices
+        if (ActivityManager.isLowRamDeviceStatic()) {
+            mConfigurationLocked.lookasideSlotCount = 0;
+            mConfigurationLocked.lookasideSlotSize = 0;
+        }
+        long effectiveTimeoutMs = Long.MAX_VALUE;
+        // Never close idle connections for in-memory databases
+        if (!mConfigurationLocked.isInMemoryDb()) {
+            // First, check app-specific value. Otherwise use defaults
+            // -1 in idleConnectionTimeoutMs indicates unset value
+            if (idleConnectionTimeoutMs >= 0) {
+                effectiveTimeoutMs = idleConnectionTimeoutMs;
+            } else if (DEBUG_CLOSE_IDLE_CONNECTIONS) {
+                effectiveTimeoutMs = SQLiteGlobal.getIdleConnectionTimeout();
+            }
+        }
+        mConfigurationLocked.idleConnectionTimeoutMs = effectiveTimeoutMs;
     }
 
     @Override
@@ -667,11 +694,38 @@
      * @return the newly opened database
      * @throws SQLiteException if the database cannot be opened
      */
-    public static SQLiteDatabase openDatabase(String path, CursorFactory factory, int flags) {
+    public static SQLiteDatabase openDatabase(@NonNull String path, @Nullable CursorFactory factory,
+            @DatabaseOpenFlags int flags) {
         return openDatabase(path, factory, flags, null);
     }
 
     /**
+     * Open the database according to the specified {@link OpenParams parameters}
+     *
+     * @param path path to database file to open and/or create.
+     * <p><strong>Important:</strong> The file should be constructed either from an absolute path or
+     * by using {@link android.content.Context#getDatabasePath(String)}.
+     * @param openParams configuration parameters that are used for opening {@link SQLiteDatabase}
+     * @return the newly opened database
+     * @throws SQLiteException if the database cannot be opened
+     */
+    public static SQLiteDatabase openDatabase(@NonNull File path,
+            @NonNull OpenParams openParams) {
+        return openDatabase(path.getPath(), openParams);
+    }
+
+    private static SQLiteDatabase openDatabase(@NonNull String path,
+            @NonNull OpenParams openParams) {
+        Preconditions.checkArgument(openParams != null, "OpenParams cannot be null");
+        SQLiteDatabase db = new SQLiteDatabase(path, openParams.mOpenFlags,
+                openParams.mCursorFactory, openParams.mErrorHandler,
+                openParams.mLookasideSlotSize, openParams.mLookasideSlotCount,
+                openParams.mIdleConnectionTimeout);
+        db.open();
+        return db;
+    }
+
+    /**
      * Open the database according to the flags {@link #OPEN_READWRITE}
      * {@link #OPEN_READONLY} {@link #CREATE_IF_NECESSARY} and/or {@link #NO_LOCALIZED_COLLATORS}.
      *
@@ -690,9 +744,9 @@
      * @return the newly opened database
      * @throws SQLiteException if the database cannot be opened
      */
-    public static SQLiteDatabase openDatabase(String path, CursorFactory factory, int flags,
-            DatabaseErrorHandler errorHandler) {
-        SQLiteDatabase db = new SQLiteDatabase(path, flags, factory, errorHandler);
+    public static SQLiteDatabase openDatabase(@NonNull String path, @Nullable CursorFactory factory,
+            @DatabaseOpenFlags int flags, @Nullable DatabaseErrorHandler errorHandler) {
+        SQLiteDatabase db = new SQLiteDatabase(path, flags, factory, errorHandler, -1, -1, -1);
         db.open();
         return db;
     }
@@ -700,22 +754,24 @@
     /**
      * Equivalent to openDatabase(file.getPath(), factory, CREATE_IF_NECESSARY).
      */
-    public static SQLiteDatabase openOrCreateDatabase(File file, CursorFactory factory) {
+    public static SQLiteDatabase openOrCreateDatabase(@NonNull File file,
+            @Nullable CursorFactory factory) {
         return openOrCreateDatabase(file.getPath(), factory);
     }
 
     /**
      * Equivalent to openDatabase(path, factory, CREATE_IF_NECESSARY).
      */
-    public static SQLiteDatabase openOrCreateDatabase(String path, CursorFactory factory) {
+    public static SQLiteDatabase openOrCreateDatabase(@NonNull String path,
+            @Nullable CursorFactory factory) {
         return openDatabase(path, factory, CREATE_IF_NECESSARY, null);
     }
 
     /**
      * Equivalent to openDatabase(path, factory, CREATE_IF_NECESSARY, errorHandler).
      */
-    public static SQLiteDatabase openOrCreateDatabase(String path, CursorFactory factory,
-            DatabaseErrorHandler errorHandler) {
+    public static SQLiteDatabase openOrCreateDatabase(@NonNull String path,
+            @Nullable CursorFactory factory, @Nullable DatabaseErrorHandler errorHandler) {
         return openDatabase(path, factory, CREATE_IF_NECESSARY, errorHandler);
     }
 
@@ -726,7 +782,7 @@
      * @param file The database file path.
      * @return True if the database was successfully deleted.
      */
-    public static boolean deleteDatabase(File file) {
+    public static boolean deleteDatabase(@NonNull File file) {
         if (file == null) {
             throw new IllegalArgumentException("file must not be null");
         }
@@ -823,15 +879,33 @@
      *
      * @param factory an optional factory class that is called to instantiate a
      *            cursor when query is called
-     * @return a SQLiteDatabase object, or null if the database can't be created
+     * @return a SQLiteDatabase instance
+     * @throws SQLiteException if the database cannot be created
      */
-    public static SQLiteDatabase create(CursorFactory factory) {
+    @NonNull
+    public static SQLiteDatabase create(@Nullable CursorFactory factory) {
         // This is a magic string with special meaning for SQLite.
         return openDatabase(SQLiteDatabaseConfiguration.MEMORY_DB_PATH,
                 factory, CREATE_IF_NECESSARY);
     }
 
     /**
+     * Create a memory backed SQLite database.  Its contents will be destroyed
+     * when the database is closed.
+     *
+     * <p>Sets the locale of the database to the  the system's current locale.
+     * Call {@link #setLocale} if you would like something else.</p>
+     * @param openParams configuration parameters that are used for opening SQLiteDatabase
+     * @return a SQLiteDatabase instance
+     * @throws SQLException if the database cannot be created
+     */
+    @NonNull
+    public static SQLiteDatabase createInMemory(@NonNull OpenParams openParams) {
+        return openDatabase(SQLiteDatabaseConfiguration.MEMORY_DB_PATH,
+                openParams.toBuilder().addOpenFlags(CREATE_IF_NECESSARY).build());
+    }
+
+    /**
      * Registers a CustomFunction callback as a function that can be called from
      * SQLite database triggers.
      *
@@ -1668,6 +1742,7 @@
                     if (!mHasAttachedDbsLocked) {
                         mHasAttachedDbsLocked = true;
                         disableWal = true;
+                        mConnectionPoolLocked.disableIdleConnectionHandler();
                     }
                 }
                 if (disableWal) {
@@ -2211,4 +2286,273 @@
     public interface CustomFunction {
         public void callback(String[] args);
     }
+
+    /**
+     * Wrapper for configuration parameters that are used for opening {@link SQLiteDatabase}
+     */
+    public static final class OpenParams {
+        private final int mOpenFlags;
+        private final CursorFactory mCursorFactory;
+        private final DatabaseErrorHandler mErrorHandler;
+        private final int mLookasideSlotSize;
+        private final int mLookasideSlotCount;
+        private long mIdleConnectionTimeout;
+
+        private OpenParams(int openFlags, CursorFactory cursorFactory,
+                DatabaseErrorHandler errorHandler, int lookasideSlotSize, int lookasideSlotCount,
+                long idleConnectionTimeout) {
+            mOpenFlags = openFlags;
+            mCursorFactory = cursorFactory;
+            mErrorHandler = errorHandler;
+            mLookasideSlotSize = lookasideSlotSize;
+            mLookasideSlotCount = lookasideSlotCount;
+            mIdleConnectionTimeout = idleConnectionTimeout;
+        }
+
+        /**
+         * Returns size in bytes of each lookaside slot or -1 if not set.
+         *
+         * @see Builder#setLookasideConfig(int, int)
+         */
+        @IntRange(from = -1)
+        public int getLookasideSlotSize() {
+            return mLookasideSlotSize;
+        }
+
+        /**
+         * Returns total number of lookaside memory slots per database connection or -1 if not
+         * set.
+         *
+         * @see Builder#setLookasideConfig(int, int)
+         */
+        @IntRange(from = -1)
+        public int getLookasideSlotCount() {
+            return mLookasideSlotCount;
+        }
+
+        /**
+         * Returns flags to control database access mode. Default value is 0.
+         *
+         * @see Builder#setOpenFlags(int)
+         */
+        @DatabaseOpenFlags
+        public int getOpenFlags() {
+            return mOpenFlags;
+        }
+
+        /**
+         * Returns an optional factory class that is called to instantiate a cursor when query
+         * is called
+         *
+         * @see Builder#setCursorFactory(CursorFactory)
+         */
+        @Nullable
+        public CursorFactory getCursorFactory() {
+            return mCursorFactory;
+        }
+
+        /**
+         * Returns handler for database corruption errors
+         *
+         * @see Builder#setErrorHandler(DatabaseErrorHandler)
+         */
+        @Nullable
+        public DatabaseErrorHandler getErrorHandler() {
+            return mErrorHandler;
+        }
+
+        /**
+         * Returns maximum number of milliseconds that SQLite connection is allowed to be idle
+         * before it is closed and removed from the pool.
+         * <p>If the value isn't set, the timeout defaults to the system wide timeout
+         *
+         * @return timeout in milliseconds or -1 if the value wasn't set.
+         */
+        public long getIdleConnectionTimeout() {
+            return mIdleConnectionTimeout;
+        }
+
+        /**
+         * Creates a new instance of builder {@link Builder#Builder(OpenParams) initialized} with
+         * {@code this} parameters.
+         * @hide
+         */
+        @NonNull
+        public Builder toBuilder() {
+            return new Builder(this);
+        }
+
+        /**
+         * Builder for {@link OpenParams}.
+         */
+        public static final class Builder {
+            private int mLookasideSlotSize = -1;
+            private int mLookasideSlotCount = -1;
+            private long mIdleConnectionTimeout = -1;
+            private int mOpenFlags;
+            private CursorFactory mCursorFactory;
+            private DatabaseErrorHandler mErrorHandler;
+
+            public Builder() {
+            }
+
+            public Builder(OpenParams params) {
+                mLookasideSlotSize = params.mLookasideSlotSize;
+                mLookasideSlotCount = params.mLookasideSlotCount;
+                mOpenFlags = params.mOpenFlags;
+                mCursorFactory = params.mCursorFactory;
+                mErrorHandler = params.mErrorHandler;
+            }
+
+            /**
+             * Configures
+             * <a href="https://sqlite.org/malloc.html#lookaside">lookaside memory allocator</a>
+             *
+             * <p>SQLite default settings will be used, if this method isn't called.
+             * Use {@code setLookasideConfig(0,0)} to disable lookaside
+             *
+             * <p><strong>Note:</strong> Provided slotSize/slotCount configuration is just a
+             * recommendation. The system may choose different values depending on a device, e.g.
+             * lookaside allocations can be disabled on low-RAM devices
+             *
+             * @param slotSize The size in bytes of each lookaside slot.
+             * @param slotCount The total number of lookaside memory slots per database connection.
+             */
+            public Builder setLookasideConfig(@IntRange(from = 0) final int slotSize,
+                    @IntRange(from = 0) final int slotCount) {
+                Preconditions.checkArgument(slotSize >= 0,
+                        "lookasideSlotCount cannot be negative");
+                Preconditions.checkArgument(slotCount >= 0,
+                        "lookasideSlotSize cannot be negative");
+                Preconditions.checkArgument(
+                        (slotSize > 0 && slotCount > 0) || (slotCount == 0 && slotSize == 0),
+                        "Invalid configuration: " + slotSize + ", " + slotCount);
+
+                mLookasideSlotSize = slotSize;
+                mLookasideSlotCount = slotCount;
+                return this;
+            }
+
+            /**
+             * Returns true if {@link #ENABLE_WRITE_AHEAD_LOGGING} flag is set
+             * @hide
+             */
+            public boolean isWriteAheadLoggingEnabled() {
+                return (mOpenFlags & ENABLE_WRITE_AHEAD_LOGGING) != 0;
+            }
+
+            /**
+             * Sets flags to control database access mode
+             * @param openFlags The new flags to set
+             * @see #OPEN_READWRITE
+             * @see #OPEN_READONLY
+             * @see #CREATE_IF_NECESSARY
+             * @see #NO_LOCALIZED_COLLATORS
+             * @see #ENABLE_WRITE_AHEAD_LOGGING
+             * @return same builder instance for chaining multiple calls into a single statement
+             */
+            @NonNull
+            public Builder setOpenFlags(@DatabaseOpenFlags int openFlags) {
+                mOpenFlags = openFlags;
+                return this;
+            }
+
+            /**
+             * Adds flags to control database access mode
+             *
+             * @param openFlags The new flags to add
+             * @return same builder instance for chaining multiple calls into a single statement
+             */
+            @NonNull
+            public Builder addOpenFlags(@DatabaseOpenFlags int openFlags) {
+                mOpenFlags |= openFlags;
+                return this;
+            }
+
+            /**
+             * Removes database access mode flags
+             *
+             * @param openFlags Flags to remove
+             * @return same builder instance for chaining multiple calls into a single statement
+             */
+            @NonNull
+            public Builder removeOpenFlags(@DatabaseOpenFlags int openFlags) {
+                mOpenFlags &= ~openFlags;
+                return this;
+            }
+
+            /**
+             * Sets {@link #ENABLE_WRITE_AHEAD_LOGGING} flag if {@code enabled} is {@code true},
+             * unsets otherwise
+             * @hide
+             */
+            public void setWriteAheadLoggingEnabled(boolean enabled) {
+                if (enabled) {
+                    addOpenFlags(ENABLE_WRITE_AHEAD_LOGGING);
+                } else {
+                    removeOpenFlags(ENABLE_WRITE_AHEAD_LOGGING);
+                }
+            }
+
+            /**
+             * Set an optional factory class that is called to instantiate a cursor when query
+             * is called.
+             *
+             * @param cursorFactory instance
+             * @return same builder instance for chaining multiple calls into a single statement
+             */
+            @NonNull
+            public Builder setCursorFactory(@Nullable CursorFactory cursorFactory) {
+                mCursorFactory = cursorFactory;
+                return this;
+            }
+
+
+            /**
+             * Sets {@link DatabaseErrorHandler} object to handle db corruption errors
+             */
+            @NonNull
+            public Builder setErrorHandler(@Nullable DatabaseErrorHandler errorHandler) {
+                mErrorHandler = errorHandler;
+                return this;
+            }
+
+            /**
+             * Sets the maximum number of milliseconds that SQLite connection is allowed to be idle
+             * before it is closed and removed from the pool.
+             *
+             * @param idleConnectionTimeoutMs timeout in milliseconds. Use {@link Long#MAX_VALUE}
+             * to allow unlimited idle connections.
+             */
+            @NonNull
+            public Builder setIdleConnectionTimeout(
+                    @IntRange(from = 0) long idleConnectionTimeoutMs) {
+                Preconditions.checkArgument(idleConnectionTimeoutMs >= 0,
+                        "idle connection timeout cannot be negative");
+                mIdleConnectionTimeout = idleConnectionTimeoutMs;
+                return this;
+            }
+
+            /**
+             * Creates an instance of {@link OpenParams} with the options that were previously set
+             * on this builder
+             */
+            @NonNull
+            public OpenParams build() {
+                return new OpenParams(mOpenFlags, mCursorFactory, mErrorHandler, mLookasideSlotSize,
+                        mLookasideSlotCount, mIdleConnectionTimeout);
+            }
+        }
+    }
+
+    /** @hide */
+    @IntDef(flag = true, prefix = {"OPEN_", "CREATE_", "NO_", "ENABLE_"}, value = {
+            OPEN_READWRITE,
+            OPEN_READONLY,
+            CREATE_IF_NECESSARY,
+            NO_LOCALIZED_COLLATORS,
+            ENABLE_WRITE_AHEAD_LOGGING
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface DatabaseOpenFlags {}
 }
diff --git a/core/java/android/database/sqlite/SQLiteDatabaseConfiguration.java b/core/java/android/database/sqlite/SQLiteDatabaseConfiguration.java
index 549ab90..34c9b33 100644
--- a/core/java/android/database/sqlite/SQLiteDatabaseConfiguration.java
+++ b/core/java/android/database/sqlite/SQLiteDatabaseConfiguration.java
@@ -90,6 +90,27 @@
             new ArrayList<SQLiteCustomFunction>();
 
     /**
+     * The size in bytes of each lookaside slot
+     *
+     * <p>If negative, the default lookaside configuration will be used
+     */
+    public int lookasideSlotSize = -1;
+
+    /**
+     * The total number of lookaside memory slots per database connection
+     *
+     * <p>If negative, the default lookaside configuration will be used
+     */
+    public int lookasideSlotCount = -1;
+
+    /**
+     * The number of milliseconds that SQLite connection is allowed to be idle before it
+     * is closed and removed from the pool.
+     * <p>By default, idle connections are not closed
+     */
+    public long idleConnectionTimeoutMs = Long.MAX_VALUE;
+
+    /**
      * Creates a database configuration with the required parameters for opening a
      * database and default values for all other parameters.
      *
@@ -146,6 +167,9 @@
         foreignKeyConstraintsEnabled = other.foreignKeyConstraintsEnabled;
         customFunctions.clear();
         customFunctions.addAll(other.customFunctions);
+        lookasideSlotSize = other.lookasideSlotSize;
+        lookasideSlotCount = other.lookasideSlotCount;
+        idleConnectionTimeoutMs = other.idleConnectionTimeoutMs;
     }
 
     /**
@@ -162,4 +186,8 @@
         }
         return EMAIL_IN_DB_PATTERN.matcher(path).replaceAll("XX@YY");
     }
+
+    boolean isLookasideConfigSet() {
+        return lookasideSlotCount >= 0 && lookasideSlotSize >= 0;
+    }
 }
diff --git a/core/java/android/database/sqlite/SQLiteDebug.java b/core/java/android/database/sqlite/SQLiteDebug.java
index 1197331..a921aa3 100644
--- a/core/java/android/database/sqlite/SQLiteDebug.java
+++ b/core/java/android/database/sqlite/SQLiteDebug.java
@@ -16,13 +16,14 @@
 
 package android.database.sqlite;
 
-import java.util.ArrayList;
-
+import android.annotation.TestApi;
 import android.os.Build;
 import android.os.SystemProperties;
 import android.util.Log;
 import android.util.Printer;
 
+import java.util.ArrayList;
+
 /**
  * Provides debugging info about all SQLite databases running in the current process.
  *
@@ -117,6 +118,7 @@
     /**
      * contains statistics about a database
      */
+    @TestApi
     public static class DbStats {
         /** name of the database */
         public String dbName;
@@ -127,7 +129,8 @@
         /** the database size */
         public long dbSize;
 
-        /** documented here http://www.sqlite.org/c3ref/c_dbstatus_lookaside_used.html */
+        /**
+         * Number of lookaside slots: http://www.sqlite.org/c3ref/c_dbstatus_lookaside_used.html */
         public int lookaside;
 
         /** statement cache stats: hits/misses/cachesize */
@@ -147,6 +150,7 @@
      * return all pager and database stats for the current process.
      * @return {@link PagerStats}
      */
+    @TestApi
     public static PagerStats getDatabaseInfo() {
         PagerStats stats = new PagerStats();
         nativeGetPagerStats(stats);
diff --git a/core/java/android/database/sqlite/SQLiteDirectCursorDriver.java b/core/java/android/database/sqlite/SQLiteDirectCursorDriver.java
index 797430a..1721e0c 100644
--- a/core/java/android/database/sqlite/SQLiteDirectCursorDriver.java
+++ b/core/java/android/database/sqlite/SQLiteDirectCursorDriver.java
@@ -16,6 +16,7 @@
 
 package android.database.sqlite;
 
+import android.annotation.TestApi;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 import android.os.CancellationSignal;
@@ -25,6 +26,7 @@
  * 
  * @hide
  */
+@TestApi
 public final class SQLiteDirectCursorDriver implements SQLiteCursorDriver {
     private final SQLiteDatabase mDatabase;
     private final String mEditTable; 
diff --git a/core/java/android/database/sqlite/SQLiteGlobal.java b/core/java/android/database/sqlite/SQLiteGlobal.java
index 922d11b..94d5555 100644
--- a/core/java/android/database/sqlite/SQLiteGlobal.java
+++ b/core/java/android/database/sqlite/SQLiteGlobal.java
@@ -16,6 +16,7 @@
 
 package android.database.sqlite;
 
+import android.annotation.TestApi;
 import android.content.res.Resources;
 import android.os.StatFs;
 import android.os.SystemProperties;
@@ -34,6 +35,7 @@
  *
  * @hide
  */
+@TestApi
 public final class SQLiteGlobal {
     private static final String TAG = "SQLiteGlobal";
 
@@ -124,4 +126,15 @@
                 com.android.internal.R.integer.db_connection_pool_size));
         return Math.max(2, value);
     }
+
+    /**
+     * The default number of milliseconds that SQLite connection is allowed to be idle before it
+     * is closed and removed from the pool.
+     */
+    public static int getIdleConnectionTimeout() {
+        return SystemProperties.getInt("debug.sqlite.idle_connection_timeout",
+                Resources.getSystem().getInteger(
+                        com.android.internal.R.integer.db_default_idle_connection_timeout));
+    }
+
 }
diff --git a/core/java/android/database/sqlite/SQLiteOpenHelper.java b/core/java/android/database/sqlite/SQLiteOpenHelper.java
index bb8d9ff..cc9e0f4 100644
--- a/core/java/android/database/sqlite/SQLiteOpenHelper.java
+++ b/core/java/android/database/sqlite/SQLiteOpenHelper.java
@@ -16,10 +16,14 @@
 
 package android.database.sqlite;
 
+import android.annotation.IntRange;
 import android.content.Context;
 import android.database.DatabaseErrorHandler;
+import android.database.SQLException;
 import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.os.FileUtils;
 import android.util.Log;
+
 import java.io.File;
 
 /**
@@ -43,24 +47,14 @@
 public abstract class SQLiteOpenHelper {
     private static final String TAG = SQLiteOpenHelper.class.getSimpleName();
 
-    // When true, getReadableDatabase returns a read-only database if it is just being opened.
-    // The database handle is reopened in read/write mode when getWritableDatabase is called.
-    // We leave this behavior disabled in production because it is inefficient and breaks
-    // many applications.  For debugging purposes it can be useful to turn on strict
-    // read-only semantics to catch applications that call getReadableDatabase when they really
-    // wanted getWritableDatabase.
-    private static final boolean DEBUG_STRICT_READONLY = false;
-
     private final Context mContext;
     private final String mName;
-    private final CursorFactory mFactory;
     private final int mNewVersion;
     private final int mMinimumSupportedVersion;
 
     private SQLiteDatabase mDatabase;
     private boolean mIsInitializing;
-    private boolean mEnableWriteAheadLogging;
-    private final DatabaseErrorHandler mErrorHandler;
+    private final SQLiteDatabase.OpenParams.Builder mOpenParamsBuilder;
 
     /**
      * Create a helper object to create, open, and/or manage a database.
@@ -130,10 +124,12 @@
 
         mContext = context;
         mName = name;
-        mFactory = factory;
         mNewVersion = version;
-        mErrorHandler = errorHandler;
         mMinimumSupportedVersion = Math.max(0, minimumSupportedVersion);
+        mOpenParamsBuilder = new SQLiteDatabase.OpenParams.Builder();
+        mOpenParamsBuilder.setCursorFactory(factory);
+        mOpenParamsBuilder.setErrorHandler(errorHandler);
+        mOpenParamsBuilder.addOpenFlags(SQLiteDatabase.CREATE_IF_NECESSARY);
     }
 
     /**
@@ -157,7 +153,7 @@
      */
     public void setWriteAheadLoggingEnabled(boolean enabled) {
         synchronized (this) {
-            if (mEnableWriteAheadLogging != enabled) {
+            if (mOpenParamsBuilder.isWriteAheadLoggingEnabled() != enabled) {
                 if (mDatabase != null && mDatabase.isOpen() && !mDatabase.isReadOnly()) {
                     if (enabled) {
                         mDatabase.enableWriteAheadLogging();
@@ -165,12 +161,60 @@
                         mDatabase.disableWriteAheadLogging();
                     }
                 }
-                mEnableWriteAheadLogging = enabled;
+                mOpenParamsBuilder.setWriteAheadLoggingEnabled(enabled);
             }
         }
     }
 
     /**
+     * Configures <a href="https://sqlite.org/malloc.html#lookaside">lookaside memory allocator</a>
+     *
+     * <p>This method should be called from the constructor of the subclass,
+     * before opening the database, since lookaside memory configuration can only be changed
+     * when no connection is using it
+     *
+     * <p>SQLite default settings will be used, if this method isn't called.
+     * Use {@code setLookasideConfig(0,0)} to disable lookaside
+     *
+     * <p><strong>Note:</strong> Provided slotSize/slotCount configuration is just a recommendation.
+     * The system may choose different values depending on a device, e.g. lookaside allocations
+     * can be disabled on low-RAM devices
+     *
+     * @param slotSize The size in bytes of each lookaside slot.
+     * @param slotCount The total number of lookaside memory slots per database connection.
+     */
+    public void setLookasideConfig(@IntRange(from = 0) final int slotSize,
+            @IntRange(from = 0) final int slotCount) {
+        synchronized (this) {
+            if (mDatabase != null && mDatabase.isOpen()) {
+                throw new IllegalStateException(
+                        "Lookaside memory config cannot be changed after opening the database");
+            }
+            mOpenParamsBuilder.setLookasideConfig(slotSize, slotCount);
+        }
+    }
+
+    /**
+     * Sets the maximum number of milliseconds that SQLite connection is allowed to be idle
+     * before it is closed and removed from the pool.
+     *
+     * <p>This method should be called from the constructor of the subclass,
+     * before opening the database
+     *
+     * @param idleConnectionTimeoutMs timeout in milliseconds. Use {@link Long#MAX_VALUE} value
+     * to allow unlimited idle connections.
+     */
+    public void setIdleConnectionTimeout(@IntRange(from = 0) final long idleConnectionTimeoutMs) {
+        synchronized (this) {
+            if (mDatabase != null && mDatabase.isOpen()) {
+                throw new IllegalStateException(
+                        "Connection timeout setting cannot be changed after opening the database");
+            }
+            mOpenParamsBuilder.setIdleConnectionTimeout(idleConnectionTimeoutMs);
+        }
+    }
+
+    /**
      * Create and/or open a database that will be used for reading and writing.
      * The first time this is called, the database will be opened and
      * {@link #onCreate}, {@link #onUpgrade} and/or {@link #onOpen} will be
@@ -243,27 +287,22 @@
                     db.reopenReadWrite();
                 }
             } else if (mName == null) {
-                db = SQLiteDatabase.create(null);
+                db = SQLiteDatabase.createInMemory(mOpenParamsBuilder.build());
             } else {
+                final File filePath = mContext.getDatabasePath(mName);
+                SQLiteDatabase.OpenParams params = mOpenParamsBuilder.build();
                 try {
-                    if (DEBUG_STRICT_READONLY && !writable) {
-                        final String path = mContext.getDatabasePath(mName).getPath();
-                        db = SQLiteDatabase.openDatabase(path, mFactory,
-                                SQLiteDatabase.OPEN_READONLY, mErrorHandler);
-                    } else {
-                        db = mContext.openOrCreateDatabase(mName, mEnableWriteAheadLogging ?
-                                Context.MODE_ENABLE_WRITE_AHEAD_LOGGING : 0,
-                                mFactory, mErrorHandler);
-                    }
-                } catch (SQLiteException ex) {
+                    db = SQLiteDatabase.openDatabase(filePath, params);
+                    // Keep pre-O-MR1 behavior by resetting file permissions to 660
+                    setFilePermissionsForDb(filePath.getPath());
+                } catch (SQLException ex) {
                     if (writable) {
                         throw ex;
                     }
                     Log.e(TAG, "Couldn't open " + mName
                             + " for writing (will try read-only):", ex);
-                    final String path = mContext.getDatabasePath(mName).getPath();
-                    db = SQLiteDatabase.openDatabase(path, mFactory,
-                            SQLiteDatabase.OPEN_READONLY, mErrorHandler);
+                    params = params.toBuilder().addOpenFlags(SQLiteDatabase.OPEN_READONLY).build();
+                    db = SQLiteDatabase.openDatabase(filePath, params);
                 }
             }
 
@@ -323,6 +362,11 @@
         }
     }
 
+    private static void setFilePermissionsForDb(String dbPath) {
+        int perms = FileUtils.S_IRUSR | FileUtils.S_IWUSR | FileUtils.S_IRGRP | FileUtils.S_IWGRP;
+        FileUtils.setPermissions(dbPath, perms, -1, -1);
+    }
+
     /**
      * Close any open database object.
      */
diff --git a/core/java/android/database/sqlite/SQLiteQueryBuilder.java b/core/java/android/database/sqlite/SQLiteQueryBuilder.java
index c8cd04f..7bd26b6 100644
--- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java
+++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java
@@ -44,7 +44,7 @@
 import java.util.regex.Pattern;
 
 /**
- * This is a convience class that helps build SQL queries to be sent to
+ * This is a convenience class that helps build SQL queries to be sent to
  * {@link SQLiteDatabase} objects.
  */
 public class SQLiteQueryBuilder
diff --git a/core/java/android/database/sqlite/package.html b/core/java/android/database/sqlite/package.html
index 864a9bb..4d6ba28 100644
--- a/core/java/android/database/sqlite/package.html
+++ b/core/java/android/database/sqlite/package.html
@@ -20,6 +20,8 @@
 <p>The version of SQLite depends on the version of Android. See the following table:
 <table style="width:auto;">
   <tr><th>Android API</th><th>SQLite Version</th></tr>
+  <tr><td>API 27</td><td>3.19</td></tr>
+  <tr><td>API 26</td><td>3.18</td></tr>
   <tr><td>API 24</td><td>3.9</td></tr>
   <tr><td>API 21</td><td>3.8</td></tr>
   <tr><td>API 11</td><td>3.7</td></tr>
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index aa35a66..931b5c9 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -16,10 +16,11 @@
 
 package android.hardware;
 
-import android.app.ActivityThread;
+import static android.system.OsConstants.*;
+
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
-import android.app.job.JobInfo;
+import android.app.ActivityThread;
 import android.content.Context;
 import android.graphics.ImageFormat;
 import android.graphics.Point;
@@ -34,11 +35,11 @@
 import android.os.ServiceManager;
 import android.renderscript.Allocation;
 import android.renderscript.Element;
-import android.renderscript.RenderScript;
 import android.renderscript.RSIllegalArgumentException;
+import android.renderscript.RenderScript;
 import android.renderscript.Type;
-import android.util.Log;
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.Surface;
 import android.view.SurfaceHolder;
 
@@ -48,8 +49,6 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 
-import static android.system.OsConstants.*;
-
 /**
  * The Camera class is used to set image capture settings, start/stop preview,
  * snap pictures, and retrieve frames for encoding for video.  This class is a
@@ -243,12 +242,19 @@
 
     /**
      * Returns the number of physical cameras available on this device.
+     *
+     * @return total number of accessible camera devices, or 0 if there are no
+     *   cameras or an error was encountered enumerating them.
      */
     public native static int getNumberOfCameras();
 
     /**
      * Returns the information about a particular camera.
      * If {@link #getNumberOfCameras()} returns N, the valid id is 0 to N-1.
+     *
+     * @throws RuntimeException if an invalid ID is provided, or if there is an
+     *    error retrieving the information (generally due to a hardware or other
+     *    low-level failure).
      */
     public static void getCameraInfo(int cameraId, CameraInfo cameraInfo) {
         _getCameraInfo(cameraId, cameraInfo);
@@ -362,7 +368,10 @@
     /**
      * Creates a new Camera object to access the first back-facing camera on the
      * device. If the device does not have a back-facing camera, this returns
-     * null.
+     * null. Otherwise acts like the {@link #open(int)} call.
+     *
+     * @return a new Camera object for the first back-facing camera, or null if there is no
+     *  backfacing camera
      * @see #open(int)
      */
     public static Camera open() {
@@ -609,6 +618,8 @@
      *
      * @throws IOException if a connection cannot be re-established (for
      *     example, if the camera is still in use by another process).
+     * @throws RuntimeException if release() has been called on this Camera
+     *     instance.
      */
     public native final void reconnect() throws IOException;
 
@@ -637,6 +648,8 @@
      *     or null to remove the preview surface
      * @throws IOException if the method fails (for example, if the surface
      *     is unavailable or unsuitable).
+     * @throws RuntimeException if release() has been called on this Camera
+     *    instance.
      */
     public final void setPreviewDisplay(SurfaceHolder holder) throws IOException {
         if (holder != null) {
@@ -684,6 +697,8 @@
      *     texture
      * @throws IOException if the method fails (for example, if the surface
      *     texture is unavailable or unsuitable).
+     * @throws RuntimeException if release() has been called on this Camera
+     *    instance.
      */
     public native final void setPreviewTexture(SurfaceTexture surfaceTexture) throws IOException;
 
@@ -733,12 +748,20 @@
      * {@link #setPreviewCallbackWithBuffer(Camera.PreviewCallback)} were
      * called, {@link Camera.PreviewCallback#onPreviewFrame(byte[], Camera)}
      * will be called when preview data becomes available.
+     *
+     * @throws RuntimeException if starting preview fails; usually this would be
+     *    because of a hardware or other low-level error, or because release()
+     *    has been called on this Camera instance.
      */
     public native final void startPreview();
 
     /**
      * Stops capturing and drawing preview frames to the surface, and
      * resets the camera for a future call to {@link #startPreview()}.
+     *
+     * @throws RuntimeException if stopping preview fails; usually this would be
+     *    because of a hardware or other low-level error, or because release()
+     *    has been called on this Camera instance.
      */
     public final void stopPreview() {
         _stopPreview();
@@ -777,6 +800,8 @@
      *
      * @param cb a callback object that receives a copy of each preview frame,
      *     or null to stop receiving callbacks.
+     * @throws RuntimeException if release() has been called on this Camera
+     *     instance.
      * @see android.media.MediaActionSound
      */
     public final void setPreviewCallback(PreviewCallback cb) {
@@ -803,6 +828,8 @@
      *
      * @param cb a callback object that receives a copy of the next preview frame,
      *     or null to stop receiving callbacks.
+     * @throws RuntimeException if release() has been called on this Camera
+     *     instance.
      * @see android.media.MediaActionSound
      */
     public final void setOneShotPreviewCallback(PreviewCallback cb) {
@@ -840,6 +867,8 @@
      *
      * @param cb a callback object that receives a copy of the preview frame,
      *     or null to stop receiving callbacks and clear the buffer queue.
+     * @throws RuntimeException if release() has been called on this Camera
+     *     instance.
      * @see #addCallbackBuffer(byte[])
      * @see android.media.MediaActionSound
      */
@@ -1259,6 +1288,9 @@
      * success sound to the user.</p>
      *
      * @param cb the callback to run
+     * @throws RuntimeException if starting autofocus fails; usually this would
+     *    be because of a hardware or other low-level error, or because
+     *    release() has been called on this Camera instance.
      * @see #cancelAutoFocus()
      * @see android.hardware.Camera.Parameters#setAutoExposureLock(boolean)
      * @see android.hardware.Camera.Parameters#setAutoWhiteBalanceLock(boolean)
@@ -1279,6 +1311,9 @@
      * this function will return the focus position to the default.
      * If the camera does not support auto-focus, this is a no-op.
      *
+     * @throws RuntimeException if canceling autofocus fails; usually this would
+     *    be because of a hardware or other low-level error, or because
+     *    release() has been called on this Camera instance.
      * @see #autoFocus(Camera.AutoFocusCallback)
      */
     public final void cancelAutoFocus()
@@ -1333,6 +1368,9 @@
      * Sets camera auto-focus move callback.
      *
      * @param cb the callback to run
+     * @throws RuntimeException if enabling the focus move callback fails;
+     *    usually this would be because of a hardware or other low-level error,
+     *    or because release() has been called on this Camera instance.
      */
     public void setAutoFocusMoveCallback(AutoFocusMoveCallback cb) {
         mAutoFocusMoveCallback = cb;
@@ -1384,7 +1422,7 @@
     };
 
     /**
-     * Equivalent to takePicture(shutter, raw, null, jpeg).
+     * Equivalent to <pre>takePicture(Shutter, raw, null, jpeg)</pre>.
      *
      * @see #takePicture(ShutterCallback, PictureCallback, PictureCallback, PictureCallback)
      */
@@ -1422,6 +1460,9 @@
      * @param raw       the callback for raw (uncompressed) image data, or null
      * @param postview  callback with postview image data, may be null
      * @param jpeg      the callback for JPEG image data, or null
+     * @throws RuntimeException if starting picture capture fails; usually this
+     *    would be because of a hardware or other low-level error, or because
+     *    release() has been called on this Camera instance.
      */
     public final void takePicture(ShutterCallback shutter, PictureCallback raw,
             PictureCallback postview, PictureCallback jpeg) {
@@ -1534,6 +1575,9 @@
      *
      * @param degrees the angle that the picture will be rotated clockwise.
      *                Valid values are 0, 90, 180, and 270.
+     * @throws RuntimeException if setting orientation fails; usually this would
+     *    be because of a hardware or other low-level error, or because
+     *    release() has been called on this Camera instance.
      * @see #setPreviewDisplay(SurfaceHolder)
      */
     public native final void setDisplayOrientation(int degrees);
@@ -1559,6 +1603,9 @@
      *         changed. {@code false} if the shutter sound state could not be
      *         changed. {@code true} is also returned if shutter sound playback
      *         is already set to the requested state.
+     * @throws RuntimeException if the call fails; usually this would be because
+     *    of a hardware or other low-level error, or because release() has been
+     *    called on this Camera instance.
      * @see #takePicture
      * @see CameraInfo#canDisableShutterSound
      * @see ShutterCallback
@@ -1903,6 +1950,9 @@
      * If modifications are made to the returned Parameters, they must be passed
      * to {@link #setParameters(Camera.Parameters)} to take effect.
      *
+     * @throws RuntimeException if reading parameters fails; usually this would
+     *    be because of a hardware or other low-level error, or because
+     *    release() has been called on this Camera instance.
      * @see #setParameters(Camera.Parameters)
      */
     public Parameters getParameters() {
diff --git a/core/java/android/hardware/Sensor.java b/core/java/android/hardware/Sensor.java
index f02e484..5dc65e2 100644
--- a/core/java/android/hardware/Sensor.java
+++ b/core/java/android/hardware/Sensor.java
@@ -22,7 +22,9 @@
 
 /**
  * Class representing a sensor. Use {@link SensorManager#getSensorList} to get
- * the list of available Sensors.
+ * the list of available sensors. For more information about Android sensors,
+ * read the
+ * <a href="/guide/topics/sensors/sensors_motion.html">Motion Sensors guide</a>.</p>
  *
  * @see SensorManager
  * @see SensorEventListener
diff --git a/core/java/android/hardware/camera2/DngCreator.java b/core/java/android/hardware/camera2/DngCreator.java
index 1a51acd..cc484ea 100644
--- a/core/java/android/hardware/camera2/DngCreator.java
+++ b/core/java/android/hardware/camera2/DngCreator.java
@@ -18,7 +18,6 @@
 
 import android.annotation.IntRange;
 import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.graphics.Bitmap;
 import android.graphics.Color;
 import android.graphics.ImageFormat;
@@ -37,6 +36,7 @@
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
+import java.util.Locale;
 import java.util.TimeZone;
 
 /**
@@ -122,7 +122,7 @@
         // Create this fresh each time since the time zone may change while a long-running application
         // is active.
         final DateFormat dateTimeStampFormat =
-            new SimpleDateFormat(TIFF_DATETIME_FORMAT);
+                new SimpleDateFormat(TIFF_DATETIME_FORMAT, Locale.US);
         dateTimeStampFormat.setTimeZone(TimeZone.getDefault());
 
         // Format for metadata
@@ -472,7 +472,8 @@
 
     private static final String GPS_DATE_FORMAT_STR = "yyyy:MM:dd";
     private static final String TIFF_DATETIME_FORMAT = "yyyy:MM:dd HH:mm:ss";
-    private static final DateFormat sExifGPSDateStamp = new SimpleDateFormat(GPS_DATE_FORMAT_STR);
+    private static final DateFormat sExifGPSDateStamp =
+            new SimpleDateFormat(GPS_DATE_FORMAT_STR, Locale.US);
     private final Calendar mGPSTimeStampCalendar = Calendar
             .getInstance(TimeZone.getTimeZone("UTC"));
 
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index 0d5c5e3..bfeb14d 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -1769,7 +1769,7 @@
         }
 
         @Override
-        public void onRepeatingRequestError(long lastFrameNumber) {
+        public void onRepeatingRequestError(long lastFrameNumber, int repeatingRequestId) {
             if (DEBUG) {
                 Log.d(TAG, "Repeating request error received. Last frame number is " +
                         lastFrameNumber);
@@ -1782,7 +1782,10 @@
                 }
 
                 checkEarlyTriggerSequenceComplete(mRepeatingRequestId, lastFrameNumber);
-                mRepeatingRequestId = REQUEST_ID_NONE;
+                // Check if there is already a new repeating request
+                if (mRepeatingRequestId == repeatingRequestId) {
+                    mRepeatingRequestId = REQUEST_ID_NONE;
+                }
             }
         }
 
diff --git a/core/java/android/hardware/camera2/legacy/CameraDeviceState.java b/core/java/android/hardware/camera2/legacy/CameraDeviceState.java
index e48bce1..89ecd5f 100644
--- a/core/java/android/hardware/camera2/legacy/CameraDeviceState.java
+++ b/core/java/android/hardware/camera2/legacy/CameraDeviceState.java
@@ -76,7 +76,8 @@
         void onBusy();
         void onCaptureStarted(RequestHolder holder, long timestamp);
         void onCaptureResult(CameraMetadataNative result, RequestHolder holder);
-        void onRepeatingRequestError(long lastFrameNumber);
+        void onRequestQueueEmpty();
+        void onRepeatingRequestError(long lastFrameNumber, int repeatingRequestId);
     }
 
     /**
@@ -207,12 +208,28 @@
      * <p>Repeating request has been stopped due to an error such as abandoned output surfaces.</p>
      *
      * @param lastFrameNumber Frame number of the last repeating request before it is stopped.
+     * @param repeatingRequestId The ID of the repeating request being stopped
      */
-    public synchronized void setRepeatingRequestError(final long lastFrameNumber) {
+    public synchronized void setRepeatingRequestError(final long lastFrameNumber,
+            final int repeatingRequestId) {
         mCurrentHandler.post(new Runnable() {
             @Override
             public void run() {
-                mCurrentListener.onRepeatingRequestError(lastFrameNumber);
+                mCurrentListener.onRepeatingRequestError(lastFrameNumber, repeatingRequestId);
+            }
+        });
+    }
+
+    /**
+     * Indicate that request queue (non-repeating) becomes empty.
+     *
+     * <p> Send notification that all non-repeating requests have been sent to camera device. </p>
+     */
+    public synchronized void setRequestQueueEmpty() {
+        mCurrentHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mCurrentListener.onRequestQueueEmpty();
             }
         });
     }
diff --git a/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java b/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java
index f87d8c1..49d4096 100644
--- a/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java
+++ b/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java
@@ -264,10 +264,10 @@
         }
 
         @Override
-        public void onRepeatingRequestError(long lastFrameNumber) {
+        public void onRepeatingRequestError(long lastFrameNumber, int repeatingRequestId) {
+            Object[] objArray = new Object[] { lastFrameNumber, repeatingRequestId };
             Message msg = getHandler().obtainMessage(REPEATING_REQUEST_ERROR,
-                    /*arg1*/ (int) (lastFrameNumber & 0xFFFFFFFFL),
-                    /*arg2*/ (int) ( (lastFrameNumber >> 32) & 0xFFFFFFFFL));
+                    /*obj*/ objArray);
             getHandler().sendMessage(msg);
         }
 
@@ -329,9 +329,10 @@
                             break;
                         }
                         case REPEATING_REQUEST_ERROR: {
-                            long lastFrameNumber = msg.arg2 & 0xFFFFFFFFL;
-                            lastFrameNumber = (lastFrameNumber << 32) | (msg.arg1 & 0xFFFFFFFFL);
-                            mCallbacks.onRepeatingRequestError(lastFrameNumber);
+                            Object[] objArray = (Object[]) msg.obj;
+                            long lastFrameNumber = (Long) objArray[0];
+                            int repeatingRequestId = (Integer) objArray[1];
+                            mCallbacks.onRepeatingRequestError(lastFrameNumber, repeatingRequestId);
                             break;
                         }
                         case REQUEST_QUEUE_EMPTY: {
@@ -504,12 +505,18 @@
         if (mLegacyDevice.isClosed()) {
             String err = "Cannot end configure, device has been closed.";
             Log.e(TAG, err);
+            synchronized(mConfigureLock) {
+                mConfiguring = false;
+            }
             throw new ServiceSpecificException(ICameraService.ERROR_DISCONNECTED, err);
         }
 
         if (operatingMode != ICameraDeviceUser.NORMAL_MODE) {
             String err = "LEGACY devices do not support this operating mode";
             Log.e(TAG, err);
+            synchronized(mConfigureLock) {
+                mConfiguring = false;
+            }
             throw new ServiceSpecificException(ICameraService.ERROR_ILLEGAL_ARGUMENT, err);
         }
 
diff --git a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java
index 1a05904..cb59fd1 100644
--- a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java
+++ b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java
@@ -223,6 +223,25 @@
         }
 
         @Override
+        public void onRequestQueueEmpty() {
+            mResultHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    if (DEBUG) {
+                        Log.d(TAG, "doing onRequestQueueEmpty callback");
+                    }
+                    try {
+                        mDeviceCallbacks.onRequestQueueEmpty();
+                    } catch (RemoteException e) {
+                        throw new IllegalStateException(
+                                "Received remote exception during onRequestQueueEmpty callback: ",
+                                e);
+                    }
+                }
+            });
+        }
+
+        @Override
         public void onCaptureResult(final CameraMetadataNative result, final RequestHolder holder) {
             final CaptureResultExtras extras = getExtrasFromRequest(holder);
 
@@ -244,7 +263,8 @@
         }
 
         @Override
-        public void onRepeatingRequestError(final long lastFrameNumber) {
+        public void onRepeatingRequestError(final long lastFrameNumber,
+                final int repeatingRequestId) {
             mResultHandler.post(new Runnable() {
                 @Override
                 public void run() {
@@ -252,7 +272,8 @@
                         Log.d(TAG, "doing onRepeatingRequestError callback.");
                     }
                     try {
-                        mDeviceCallbacks.onRepeatingRequestError(lastFrameNumber);
+                        mDeviceCallbacks.onRepeatingRequestError(lastFrameNumber,
+                                repeatingRequestId);
                     } catch (RemoteException e) {
                         throw new IllegalStateException(
                                 "Received remote exception during onRepeatingRequestError " +
diff --git a/core/java/android/hardware/camera2/legacy/RequestQueue.java b/core/java/android/hardware/camera2/legacy/RequestQueue.java
index 8f252a1..407e5e6 100644
--- a/core/java/android/hardware/camera2/legacy/RequestQueue.java
+++ b/core/java/android/hardware/camera2/legacy/RequestQueue.java
@@ -18,7 +18,6 @@
 import android.hardware.camera2.CaptureRequest;
 import android.hardware.camera2.utils.SubmitInfo;
 import android.util.Log;
-import android.util.Pair;
 
 import java.util.ArrayDeque;
 import java.util.List;
@@ -41,6 +40,28 @@
     private int mCurrentRequestId = 0;
     private final List<Long> mJpegSurfaceIds;
 
+    public final class RequestQueueEntry {
+        private final BurstHolder mBurstHolder;
+        private final Long mFrameNumber;
+        private final boolean mQueueEmpty;
+
+        public BurstHolder getBurstHolder() {
+            return mBurstHolder;
+        }
+        public Long getFrameNumber() {
+            return mFrameNumber;
+        }
+        public boolean isQueueEmpty() {
+            return mQueueEmpty;
+        }
+
+        public RequestQueueEntry(BurstHolder burstHolder, Long frameNumber, boolean queueEmpty) {
+            mBurstHolder = burstHolder;
+            mFrameNumber = frameNumber;
+            mQueueEmpty = queueEmpty;
+        }
+    }
+
     public RequestQueue(List<Long> jpegSurfaceIds) {
         mJpegSurfaceIds = jpegSurfaceIds;
     }
@@ -50,10 +71,12 @@
      *
      * <p>If a repeating burst is returned, it will not be removed.</p>
      *
-     * @return a pair containing the next burst and the current frame number, or null if none exist.
+     * @return an entry containing the next burst, the current frame number, and flag about whether
+     * request queue becomes empty. Null if no burst exists.
      */
-    public synchronized Pair<BurstHolder, Long> getNext() {
+    public synchronized RequestQueueEntry getNext() {
         BurstHolder next = mRequestQueue.poll();
+        boolean queueEmptied = (next != null && mRequestQueue.size() == 0);
         if (next == null && mRepeatingRequest != null) {
             next = mRepeatingRequest;
             mCurrentRepeatingFrameNumber = mCurrentFrameNumber +
@@ -64,7 +87,7 @@
             return null;
         }
 
-        Pair<BurstHolder, Long> ret =  new Pair<BurstHolder, Long>(next, mCurrentFrameNumber);
+        RequestQueueEntry ret =  new RequestQueueEntry(next, mCurrentFrameNumber, queueEmptied);
         mCurrentFrameNumber += next.getNumberOfRequests();
         return ret;
     }
diff --git a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
index da62f54..aaf07e6 100644
--- a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
+++ b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
@@ -504,6 +504,15 @@
             previews.add(new Pair<>(p, previewSizeIter.next()));
         }
         mGLThreadManager.setConfigurationAndWait(previews, mCaptureCollector);
+
+        for (Surface p : mPreviewOutputs) {
+            try {
+                LegacyCameraDevice.setSurfaceOrientation(p, facing, orientation);
+            } catch (LegacyExceptionUtils.BufferQueueAbandonedException e) {
+                Log.e(TAG, "Surface abandoned, skipping setSurfaceOrientation()", e);
+            }
+        }
+
         mGLThreadManager.allowNewFrames();
         mPreviewTexture = mGLThreadManager.getCurrentSurfaceTexture();
         if (mPreviewTexture != null) {
@@ -713,7 +722,7 @@
                     boolean anyRequestOutputAbandoned = false;
 
                     // Get the next burst from the request queue.
-                    Pair<BurstHolder, Long> nextBurst = mRequestQueue.getNext();
+                    RequestQueue.RequestQueueEntry nextBurst = mRequestQueue.getNext();
 
                     if (nextBurst == null) {
                         // If there are no further requests queued, wait for any currently executing
@@ -748,11 +757,17 @@
                     if (nextBurst != null) {
                         // Queue another capture if we did not get the last burst.
                         handler.sendEmptyMessage(MSG_SUBMIT_CAPTURE_REQUEST);
+
+                        // Check whether capture queue becomes empty
+                        if (nextBurst.isQueueEmpty()) {
+                            mDeviceState.setRequestQueueEmpty();
+                        }
                     }
 
                     // Complete each request in the burst
+                    BurstHolder burstHolder = nextBurst.getBurstHolder();
                     List<RequestHolder> requests =
-                            nextBurst.first.produceRequestHolders(nextBurst.second);
+                            burstHolder.produceRequestHolders(nextBurst.getFrameNumber());
                     for (RequestHolder holder : requests) {
                         CaptureRequest request = holder.getRequest();
 
@@ -918,13 +933,14 @@
                     }
 
                     // Stop the repeating request if any of its output surfaces is abandoned.
-                    if (anyRequestOutputAbandoned && nextBurst.first.isRepeating()) {
-                        long lastFrameNumber = cancelRepeating(nextBurst.first.getRequestId());
+                    if (anyRequestOutputAbandoned && burstHolder.isRepeating()) {
+                        long lastFrameNumber = cancelRepeating(burstHolder.getRequestId());
                         if (DEBUG) {
                             Log.d(TAG, "Stopped repeating request. Last frame number is " +
                                     lastFrameNumber);
                         }
-                        mDeviceState.setRepeatingRequestError(lastFrameNumber);
+                        mDeviceState.setRepeatingRequestError(lastFrameNumber,
+                                burstHolder.getRequestId());
                     }
 
                     if (DEBUG) {
diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java
index bda8039..b2af44e 100644
--- a/core/java/android/hardware/display/DisplayManager.java
+++ b/core/java/android/hardware/display/DisplayManager.java
@@ -18,13 +18,16 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.SystemApi;
 import android.annotation.SystemService;
 import android.content.Context;
+import android.graphics.Point;
 import android.media.projection.MediaProjection;
 import android.os.Handler;
 import android.util.SparseArray;
 import android.view.Display;
 import android.view.Surface;
+import android.view.WindowManagerPolicy;
 
 import java.util.ArrayList;
 
@@ -236,6 +239,13 @@
      * keyguard is shown but is insecure.
      *
      * <p>
+     * This might be used in a case when the content of a virtual display is captured and sent to an
+     * external hardware display that is not visible to the system directly. This flag will allow
+     * the continued display of content while other displays will be covered by a keyguard which
+     * doesn't require providing credentials to unlock. This means that there is either no password
+     * or other authentication method set, or the device is in a trusted state -
+     * {@link android.service.trust.TrustAgentService} has available and active trust agent.
+     * </p><p>
      * This flag can only be applied to private displays as defined by the
      * {@link Display#FLAG_PRIVATE} display flag. It is mutually exclusive with
      * {@link #VIRTUAL_DISPLAY_FLAG_PUBLIC}. If both flags are specified then this flag's behavior
@@ -243,8 +253,11 @@
      * </p>
      *
      * @see #createVirtualDisplay
+     * @see WindowManagerPolicy#isKeyguardSecure(int)
+     * @see WindowManagerPolicy#isKeyguardTrustedLw()
      * @hide
      */
+    // TODO: Update name and documentation and un-hide the flag. Don't change the value before that.
     public static final int VIRTUAL_DISPLAY_FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD = 1 << 5;
 
     /**
@@ -265,6 +278,19 @@
      */
     public static final int VIRTUAL_DISPLAY_FLAG_ROTATES_WITH_CONTENT = 1 << 7;
 
+    /**
+     * Virtual display flag: Indicates that the contents will be destroyed once
+     * the display is removed.
+     *
+     * Public virtual displays without this flag will move their content to main display
+     * stack once they're removed. Private vistual displays will always destroy their
+     * content on removal even without this flag.
+     *
+     * @see #createVirtualDisplay
+     * @hide
+     */
+    public static final int VIRTUAL_DISPLAY_FLAG_DESTROY_CONTENT_ON_REMOVAL = 1 << 8;
+
     /** @hide */
     public DisplayManager(Context context) {
         mContext = context;
@@ -575,6 +601,20 @@
     }
 
     /**
+     * Gets the stable device display size, in pixels.
+     *
+     * This should really only be used for things like server-side filtering of available
+     * applications. Most applications don't need the level of stability guaranteed by this and
+     * should instead query either the size of the display they're currently running on or the
+     * size of the default display.
+     * @hide
+     */
+    @SystemApi
+    public Point getStableDisplaySize() {
+        return mGlobal.getStableDisplaySize();
+    }
+
+    /**
      * Listens for changes in available display devices.
      */
     public interface DisplayListener {
diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java
index 0b998e5..a8a4eb6 100644
--- a/core/java/android/hardware/display/DisplayManagerGlobal.java
+++ b/core/java/android/hardware/display/DisplayManagerGlobal.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.content.res.Resources;
+import android.graphics.Point;
 import android.hardware.display.DisplayManager.DisplayListener;
 import android.media.projection.IMediaProjection;
 import android.media.projection.MediaProjection;
@@ -444,6 +445,17 @@
         }
     }
 
+    /**
+     * Gets the stable device display size, in pixels.
+     */
+    public Point getStableDisplaySize() {
+        try {
+            return mDm.getStableDisplaySize();
+        } catch (RemoteException ex) {
+            throw ex.rethrowFromSystemServer();
+        }
+    }
+
     private final class DisplayManagerCallback extends IDisplayManagerCallback.Stub {
         @Override
         public void onDisplayEvent(int displayId, int event) {
diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl
index 7ca4dc1..5053884 100644
--- a/core/java/android/hardware/display/IDisplayManager.aidl
+++ b/core/java/android/hardware/display/IDisplayManager.aidl
@@ -16,6 +16,7 @@
 
 package android.hardware.display;
 
+import android.graphics.Point;
 import android.hardware.display.IDisplayManagerCallback;
 import android.hardware.display.IVirtualDisplayCallback;
 import android.hardware.display.WifiDisplay;
@@ -77,4 +78,7 @@
 
     // No permissions required but must be same Uid as the creator.
     void releaseVirtualDisplay(in IVirtualDisplayCallback token);
+
+    // Get a stable metric for the device's display size. No permissions required.
+    Point getStableDisplaySize();
 }
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index b51a791..987718a 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -106,13 +106,17 @@
 
    /**
      * 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;
 
     /**
      * 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
+     * These messages are typically reserved for internal operations such as enrollment, but may be
+     * used to express vendor errors not covered by the ones in fingerprint.h. Applications are
+     * 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;
 
@@ -120,11 +124,17 @@
      * 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)
-     * @hide
      */
     public static final 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;
+
+    /**
      * @hide
      */
     public static final int FINGERPRINT_ERROR_VENDOR_BASE = 1000;
diff --git a/core/java/android/hardware/input/IInputManager.aidl b/core/java/android/hardware/input/IInputManager.aidl
index 4586316..9e0c680 100644
--- a/core/java/android/hardware/input/IInputManager.aidl
+++ b/core/java/android/hardware/input/IInputManager.aidl
@@ -16,6 +16,7 @@
 
 package android.hardware.input;
 
+import android.app.IInputForwarder;
 import android.hardware.input.InputDeviceIdentifier;
 import android.hardware.input.KeyboardLayout;
 import android.hardware.input.IInputDevicesChangedListener;
@@ -88,4 +89,7 @@
     void setCustomPointerIcon(in PointerIcon icon);
 
     void requestPointerCapture(IBinder windowToken, boolean enabled);
+
+    /** Create input forwarder to deliver touch events to owned display. */
+    IInputForwarder createInputForwarder(int displayId);
 }
diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java
index 4898c1a..c531a89 100644
--- a/core/java/android/hardware/input/InputManager.java
+++ b/core/java/android/hardware/input/InputManager.java
@@ -19,8 +19,9 @@
 import android.annotation.IntDef;
 import android.annotation.Nullable;
 import android.annotation.SdkConstant;
-import android.annotation.SystemService;
 import android.annotation.SdkConstant.SdkConstantType;
+import android.annotation.SystemService;
+import android.app.IInputForwarder;
 import android.content.Context;
 import android.media.AudioAttributes;
 import android.os.Binder;
@@ -971,6 +972,25 @@
         }
     }
 
+
+    /**
+     * Create an {@link IInputForwarder} targeted to provided display.
+     * {@link android.Manifest.permission.INJECT_EVENTS} permission is required to call this method.
+     *
+     * @param displayId Id of the target display where input events should be forwarded.
+     *                  Display must exist and must be owned by the caller.
+     * @return The forwarder instance.
+     *
+     * @hide
+     */
+    public IInputForwarder createInputForwarder(int displayId) {
+        try {
+            return mIm.createInputForwarder(displayId);
+        } catch (RemoteException ex) {
+            throw ex.rethrowFromSystemServer();
+        }
+    }
+
     private void populateInputDevicesLocked() {
         if (mInputDevicesChangedListener == null) {
             final InputDevicesChangedListener listener = new InputDevicesChangedListener();
diff --git a/core/java/android/hardware/location/NanoApp.java b/core/java/android/hardware/location/NanoApp.java
index d5d428e..0465def 100644
--- a/core/java/android/hardware/location/NanoApp.java
+++ b/core/java/android/hardware/location/NanoApp.java
@@ -56,10 +56,10 @@
      * {@link #setAppBinary(byte[])} and {@link #setAppId(long)} must be called
      * prior to passing this object to any managers.
      *
-     * @see #NanoApp(int, byte[])
+     * @see #NanoApp(long, byte[])
      */
     public NanoApp() {
-        this(0, null);
+        this(0L, null);
         mAppIdSet = false;
     }
 
diff --git a/core/java/android/hardware/location/NanoAppInstanceInfo.java b/core/java/android/hardware/location/NanoAppInstanceInfo.java
index ac6d83f..2623830 100644
--- a/core/java/android/hardware/location/NanoAppInstanceInfo.java
+++ b/core/java/android/hardware/location/NanoAppInstanceInfo.java
@@ -287,8 +287,10 @@
         mPublisher = in.readString();
         mName = in.readString();
 
+        mHandle = in.readInt();
         mAppId = in.readLong();
         mAppVersion = in.readInt();
+        mContexthubId = in.readInt();
         mNeededReadMemBytes = in.readInt();
         mNeededWriteMemBytes = in.readInt();
         mNeededExecMemBytes = in.readInt();
@@ -309,6 +311,8 @@
     public void writeToParcel(Parcel out, int flags) {
         out.writeString(mPublisher);
         out.writeString(mName);
+
+        out.writeInt(mHandle);
         out.writeLong(mAppId);
         out.writeInt(mAppVersion);
         out.writeInt(mContexthubId);
diff --git a/core/java/android/hardware/radio/IRadioService.aidl b/core/java/android/hardware/radio/IRadioService.aidl
index 9a157d1..c43fd26 100644
--- a/core/java/android/hardware/radio/IRadioService.aidl
+++ b/core/java/android/hardware/radio/IRadioService.aidl
@@ -26,6 +26,8 @@
  * {@hide}
  */
 interface IRadioService {
+    List<RadioManager.ModuleProperties> listModules();
+
     ITuner openTuner(int moduleId, in RadioManager.BandConfig bandConfig, boolean withAudio,
             in ITunerCallback callback);
 }
diff --git a/core/java/android/hardware/radio/ITuner.aidl b/core/java/android/hardware/radio/ITuner.aidl
index 1fc71e0..3aaeb50 100644
--- a/core/java/android/hardware/radio/ITuner.aidl
+++ b/core/java/android/hardware/radio/ITuner.aidl
@@ -16,12 +16,16 @@
 
 package android.hardware.radio;
 
+import android.graphics.Bitmap;
+import android.hardware.radio.ProgramSelector;
 import android.hardware.radio.RadioManager;
 
 /** {@hide} */
 interface ITuner {
     void close();
 
+    boolean isClosed();
+
     /**
      * @throws IllegalArgumentException if config is not valid or null
      */
@@ -50,28 +54,33 @@
      * @throws IllegalArgumentException if invalid arguments are passed
      * @throws IllegalStateException if called out of sequence
      */
-    void tune(int channel, int subChannel);
+    void tune(in ProgramSelector selector);
 
     /**
      * @throws IllegalStateException if called out of sequence
      */
     void cancel();
 
+    void cancelAnnouncement();
+
     RadioManager.ProgramInfo getProgramInformation();
 
+    Bitmap getImage(int id);
+
     /**
-     * @returns {@code true} if the scan was properly scheduled,
+     * @return {@code true} if the scan was properly scheduled,
      *          {@code false} if the scan feature is unavailable
      */
     boolean startBackgroundScan();
 
     /**
-     * @returns the list, or null if scan is in progress
+     * @param vendorFilter Vendor-specific filter, must be Map<String, String>
+     * @return the list, or null if scan is in progress
      * @throws IllegalArgumentException if invalid arguments are passed
      * @throws IllegalStateException if the scan has not been started, client may
      *         call startBackgroundScan to fix this.
      */
-    List<RadioManager.ProgramInfo> getProgramList(String filter);
+    List<RadioManager.ProgramInfo> getProgramList(in Map vendorFilter);
 
     /**
      * @throws IllegalStateException if the switch is not supported at current
diff --git a/core/java/android/hardware/radio/ITunerCallback.aidl b/core/java/android/hardware/radio/ITunerCallback.aidl
index b32c683..6ed171b 100644
--- a/core/java/android/hardware/radio/ITunerCallback.aidl
+++ b/core/java/android/hardware/radio/ITunerCallback.aidl
@@ -17,10 +17,17 @@
 package android.hardware.radio;
 
 import android.hardware.radio.RadioManager;
+import android.hardware.radio.RadioMetadata;
 
 /** {@hide} */
 oneway interface ITunerCallback {
     void onError(int status);
     void onConfigurationChanged(in RadioManager.BandConfig config);
-    void onProgramInfoChanged(in RadioManager.ProgramInfo info);
+    void onCurrentProgramInfoChanged(in RadioManager.ProgramInfo info);
+    void onTrafficAnnouncement(boolean active);
+    void onEmergencyAnnouncement(boolean active);
+    void onAntennaState(boolean connected);
+    void onBackgroundScanAvailabilityChange(boolean isAvailable);
+    void onBackgroundScanComplete();
+    void onProgramListChanged();
 }
diff --git a/core/java/android/hardware/radio/ProgramSelector.aidl b/core/java/android/hardware/radio/ProgramSelector.aidl
new file mode 100644
index 0000000..545269a
--- /dev/null
+++ b/core/java/android/hardware/radio/ProgramSelector.aidl
@@ -0,0 +1,20 @@
+/**
+ * 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.hardware.radio;
+
+/** @hide */
+parcelable ProgramSelector;
diff --git a/core/java/android/hardware/radio/ProgramSelector.java b/core/java/android/hardware/radio/ProgramSelector.java
new file mode 100644
index 0000000..2211cee
--- /dev/null
+++ b/core/java/android/hardware/radio/ProgramSelector.java
@@ -0,0 +1,502 @@
+/**
+ * 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.hardware.radio;
+
+import android.annotation.IntDef;
+import android.annotation.IntRange;
+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;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Stream;
+
+/**
+ * A set of identifiers necessary to tune to a given station.
+ *
+ * This can hold various identifiers, like
+ * - AM/FM frequency
+ * - HD Radio subchannel
+ * - DAB channel info
+ *
+ * The primary ID uniquely identifies a station and can be used for equality
+ * check. The secondary IDs are supplementary and can speed up tuning process,
+ * but the primary ID is sufficient (ie. after a full band scan).
+ *
+ * Two selectors with different secondary IDs, but the same primary ID are
+ * considered equal. In particular, secondary IDs vector may get updated for
+ * an entry on the program list (ie. when a better frequency for a given
+ * station is found).
+ *
+ * The primaryId of a given programType MUST be of a specific type:
+ * - AM, FM: RDS_PI if the station broadcasts RDS, AMFM_FREQUENCY otherwise;
+ * - AM_HD, FM_HD: HD_STATION_ID_EXT;
+ * - DAB: DAB_SIDECC;
+ * - DRMO: DRMO_SERVICE_ID;
+ * - SXM: SXM_SERVICE_ID;
+ * - VENDOR: VENDOR_PRIMARY.
+ * @hide
+ */
+@SystemApi
+public final class ProgramSelector implements Parcelable {
+    /** Analogue AM radio (with or without RDS). */
+    public static final int PROGRAM_TYPE_AM = 1;
+    /** analogue FM radio (with or without RDS). */
+    public static final int PROGRAM_TYPE_FM = 2;
+    /** AM HD Radio. */
+    public static final int PROGRAM_TYPE_AM_HD = 3;
+    /** FM HD Radio. */
+    public static final int PROGRAM_TYPE_FM_HD = 4;
+    /** Digital audio broadcasting. */
+    public static final int PROGRAM_TYPE_DAB = 5;
+    /** Digital Radio Mondiale. */
+    public static final int PROGRAM_TYPE_DRMO = 6;
+    /** SiriusXM Satellite Radio. */
+    public static final int PROGRAM_TYPE_SXM = 7;
+    /** Vendor-specific, not synced across devices. */
+    public static final int PROGRAM_TYPE_VENDOR_START = 1000;
+    public static final int PROGRAM_TYPE_VENDOR_END = 1999;
+    @IntDef(prefix = { "PROGRAM_TYPE_" }, value = {
+        PROGRAM_TYPE_AM,
+        PROGRAM_TYPE_FM,
+        PROGRAM_TYPE_AM_HD,
+        PROGRAM_TYPE_FM_HD,
+        PROGRAM_TYPE_DAB,
+        PROGRAM_TYPE_DRMO,
+        PROGRAM_TYPE_SXM,
+    })
+    @IntRange(from = PROGRAM_TYPE_VENDOR_START, to = PROGRAM_TYPE_VENDOR_END)
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface ProgramType {}
+
+    /** kHz */
+    public static final int IDENTIFIER_TYPE_AMFM_FREQUENCY = 1;
+    /** 16bit */
+    public static final int IDENTIFIER_TYPE_RDS_PI = 2;
+    /**
+     * 64bit compound primary identifier for HD Radio.
+     *
+     * Consists of (from the LSB):
+     * - 32bit: Station ID number;
+     * - 4bit: HD_SUBCHANNEL;
+     * - 18bit: AMFM_FREQUENCY.
+     * The remaining bits should be set to zeros when writing on the chip side
+     * and ignored when read.
+     */
+    public static final int IDENTIFIER_TYPE_HD_STATION_ID_EXT = 3;
+    /**
+     * HD Radio subchannel - a value of range 0-7.
+     *
+     * The subchannel index is 0-based (where 0 is MPS and 1..7 are SPS),
+     * as opposed to HD Radio standard (where it's 1-based).
+     */
+    public static final int IDENTIFIER_TYPE_HD_SUBCHANNEL = 4;
+    /**
+     * 24bit compound primary identifier for DAB.
+     *
+     * Consists of (from the LSB):
+     * - 16bit: SId;
+     * - 8bit: ECC code.
+     * The remaining bits should be set to zeros when writing on the chip side
+     * and ignored when read.
+     */
+    public static final int IDENTIFIER_TYPE_DAB_SIDECC = 5;
+    /** 16bit */
+    public static final int IDENTIFIER_TYPE_DAB_ENSEMBLE = 6;
+    /** 12bit */
+    public static final int IDENTIFIER_TYPE_DAB_SCID = 7;
+    /** kHz */
+    public static final int IDENTIFIER_TYPE_DAB_FREQUENCY = 8;
+    /** 24bit */
+    public static final int IDENTIFIER_TYPE_DRMO_SERVICE_ID = 9;
+    /** kHz */
+    public static final int IDENTIFIER_TYPE_DRMO_FREQUENCY = 10;
+    /** 1: AM, 2:FM */
+    public static final int IDENTIFIER_TYPE_DRMO_MODULATION = 11;
+    /** 32bit */
+    public static final int IDENTIFIER_TYPE_SXM_SERVICE_ID = 12;
+    /** 0-999 range */
+    public static final int IDENTIFIER_TYPE_SXM_CHANNEL = 13;
+    /**
+     * Primary identifier for vendor-specific radio technology.
+     * The value format is determined by a vendor.
+     *
+     * It must not be used in any other programType than corresponding VENDOR
+     * type between VENDOR_START and VENDOR_END (eg. identifier type 1015 must
+     * not be used in any program type other than 1015).
+     */
+    public static final int IDENTIFIER_TYPE_VENDOR_PRIMARY_START = PROGRAM_TYPE_VENDOR_START;
+    public static final int IDENTIFIER_TYPE_VENDOR_PRIMARY_END = PROGRAM_TYPE_VENDOR_END;
+    @IntDef(prefix = { "IDENTIFIER_TYPE_" }, value = {
+        IDENTIFIER_TYPE_AMFM_FREQUENCY,
+        IDENTIFIER_TYPE_RDS_PI,
+        IDENTIFIER_TYPE_HD_STATION_ID_EXT,
+        IDENTIFIER_TYPE_HD_SUBCHANNEL,
+        IDENTIFIER_TYPE_DAB_SIDECC,
+        IDENTIFIER_TYPE_DAB_ENSEMBLE,
+        IDENTIFIER_TYPE_DAB_SCID,
+        IDENTIFIER_TYPE_DAB_FREQUENCY,
+        IDENTIFIER_TYPE_DRMO_SERVICE_ID,
+        IDENTIFIER_TYPE_DRMO_FREQUENCY,
+        IDENTIFIER_TYPE_DRMO_MODULATION,
+        IDENTIFIER_TYPE_SXM_SERVICE_ID,
+        IDENTIFIER_TYPE_SXM_CHANNEL,
+    })
+    @IntRange(from = IDENTIFIER_TYPE_VENDOR_PRIMARY_START, to = IDENTIFIER_TYPE_VENDOR_PRIMARY_END)
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface IdentifierType {}
+
+    private final @ProgramType int mProgramType;
+    private final @NonNull Identifier mPrimaryId;
+    private final @NonNull Identifier[] mSecondaryIds;
+    private final @NonNull long[] mVendorIds;
+
+    /**
+     * Constructor for ProgramSelector.
+     *
+     * It's not desired to modify selector objects, so all its fields are initialized at creation.
+     *
+     * Identifier lists must not contain any nulls, but can itself be null to be interpreted
+     * as empty list at object creation.
+     *
+     * @param programType type of a radio technology.
+     * @param primaryId primary program identifier.
+     * @param secondaryIds list of secondary program identifiers.
+     * @param vendorIds list of vendor-specific program identifiers.
+     */
+    public ProgramSelector(@ProgramType int programType, @NonNull Identifier primaryId,
+            @Nullable Identifier[] secondaryIds, @Nullable long[] vendorIds) {
+        if (secondaryIds == null) secondaryIds = new Identifier[0];
+        if (vendorIds == null) vendorIds = new long[0];
+        if (Stream.of(secondaryIds).anyMatch(id -> id == null)) {
+            throw new IllegalArgumentException("secondaryIds list must not contain nulls");
+        }
+        mProgramType = programType;
+        mPrimaryId = Objects.requireNonNull(primaryId);
+        mSecondaryIds = secondaryIds;
+        mVendorIds = vendorIds;
+    }
+
+    /**
+     * Type of a radio technology.
+     *
+     * @return program type.
+     */
+    public @ProgramType int getProgramType() {
+        return mProgramType;
+    }
+
+    /**
+     * Primary program identifier uniquely identifies a station and is used to
+     * determine equality between two ProgramSelectors.
+     *
+     * @return primary identifier.
+     */
+    public @NonNull Identifier getPrimaryId() {
+        return mPrimaryId;
+    }
+
+    /**
+     * Secondary program identifier is not required for tuning, but may make it
+     * faster or more reliable.
+     *
+     * @return secondary identifier list, must not be modified.
+     */
+    public @NonNull Identifier[] getSecondaryIds() {
+        return mSecondaryIds;
+    }
+
+    /**
+     * Looks up an identifier of a given type (either primary or secondary).
+     *
+     * If there are multiple identifiers if a given type, then first in order (where primary id is
+     * before any secondary) is selected.
+     *
+     * @param type type of identifier.
+     * @return identifier value, if found.
+     * @throws IllegalArgumentException, if not found.
+     */
+    public long getFirstId(@IdentifierType int type) {
+        if (mPrimaryId.getType() == type) return mPrimaryId.getValue();
+        for (Identifier id : mSecondaryIds) {
+            if (id.getType() == type) return id.getValue();
+        }
+        throw new IllegalArgumentException("Identifier " + type + " not found");
+    }
+
+    /**
+     * Looks up all identifier of a given type (either primary or secondary).
+     *
+     * Some identifiers may be provided multiple times, for example
+     * IDENTIFIER_TYPE_AMFM_FREQUENCY for FM Alternate Frequencies.
+     *
+     * @param type type of identifier.
+     * @return a list of identifiers, generated on each call. May be modified.
+     */
+    public @NonNull Identifier[] getAllIds(@IdentifierType int type) {
+        List<Identifier> out = new ArrayList<>();
+
+        if (mPrimaryId.getType() == type) out.add(mPrimaryId);
+        for (Identifier id : mSecondaryIds) {
+            if (id.getType() == type) out.add(id);
+        }
+
+        return out.toArray(new Identifier[out.size()]);
+    }
+
+    /**
+     * Vendor identifiers are passed as-is to the HAL implementation,
+     * preserving elements order.
+     *
+     * @return a array of vendor identifiers, must not be modified.
+     */
+    public @NonNull long[] getVendorIds() {
+        return mVendorIds;
+    }
+
+    /**
+     * Builds new ProgramSelector for AM/FM frequency.
+     *
+     * @param band the band.
+     * @param frequencyKhz the frequency in kHz.
+     * @return new ProgramSelector object representing given frequency.
+     * @throws IllegalArgumentException if provided frequency is out of bounds.
+     */
+    public static @NonNull ProgramSelector createAmFmSelector(
+            @RadioManager.Band int band, int frequencyKhz) {
+        return createAmFmSelector(band, frequencyKhz, 0);
+    }
+
+    /**
+     * Checks, if a given AM/FM frequency is roughly valid and in correct unit.
+     *
+     * It does not check the range precisely. In particular, it may be way off for certain regions.
+     * The main purpose is to avoid passing inproper units, ie. MHz instead of kHz.
+     *
+     * @param isAm true, if AM, false if FM.
+     * @param frequencyKhz the frequency in kHz.
+     * @return true, if the frequency is rougly valid.
+     */
+    private static boolean isValidAmFmFrequency(boolean isAm, int frequencyKhz) {
+        if (isAm) {
+            return frequencyKhz > 150 && frequencyKhz < 30000;
+        } else {
+            return frequencyKhz > 60000 && frequencyKhz < 110000;
+        }
+    }
+
+    /**
+     * Builds new ProgramSelector for AM/FM frequency.
+     *
+     * This method variant supports HD Radio subchannels, but it's undesirable to
+     * select them manually. Instead, the value should be retrieved from program list.
+     *
+     * @param band the band.
+     * @param frequencyKhz the frequency in kHz.
+     * @param subChannel 1-based HD Radio subchannel.
+     * @return new ProgramSelector object representing given frequency.
+     * @throws IllegalArgumentException if provided frequency is out of bounds,
+     *         or tried setting a subchannel for analog AM/FM.
+     */
+    public static @NonNull ProgramSelector createAmFmSelector(
+            @RadioManager.Band int band, int frequencyKhz, int subChannel) {
+        boolean isAm = (band == RadioManager.BAND_AM || band == RadioManager.BAND_AM_HD);
+        boolean isDigital = (band == RadioManager.BAND_AM_HD || band == RadioManager.BAND_FM_HD);
+        if (!isAm && !isDigital && band != RadioManager.BAND_FM) {
+            throw new IllegalArgumentException("Unknown band: " + band);
+        }
+        if (subChannel < 0 || subChannel > 8) {
+            throw new IllegalArgumentException("Invalid subchannel: " + subChannel);
+        }
+        if (subChannel > 0 && !isDigital) {
+            throw new IllegalArgumentException("Subchannels are not supported for non-HD radio");
+        }
+        if (!isValidAmFmFrequency(isAm, frequencyKhz)) {
+            throw new IllegalArgumentException("Provided value is not a valid AM/FM frequency");
+        }
+
+        // We can't use AM_HD or FM_HD, because we don't know HD station ID.
+        @ProgramType int programType = isAm ? PROGRAM_TYPE_AM : PROGRAM_TYPE_FM;
+        Identifier primary = new Identifier(IDENTIFIER_TYPE_AMFM_FREQUENCY, frequencyKhz);
+
+        Identifier[] secondary = null;
+        if (subChannel > 0) {
+            /* Stating sub channel for non-HD AM/FM does not give any guarantees,
+             * but we can't do much more without HD station ID.
+             *
+             * The legacy APIs had 1-based subChannels, while ProgramSelector is 0-based.
+             */
+            secondary = new Identifier[]{
+                    new Identifier(IDENTIFIER_TYPE_HD_SUBCHANNEL, subChannel - 1)};
+        }
+
+        return new ProgramSelector(programType, primary, secondary, null);
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder("ProgramSelector(type=").append(mProgramType)
+                .append(", primary=").append(mPrimaryId);
+        if (mSecondaryIds.length > 0) sb.append(", secondary=").append(mSecondaryIds);
+        if (mVendorIds.length > 0) sb.append(", vendor=").append(mVendorIds);
+        sb.append(")");
+        return sb.toString();
+    }
+
+    @Override
+    public int hashCode() {
+        // secondaryIds and vendorIds are ignored for equality/hashing
+        return Objects.hash(mProgramType, mPrimaryId);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) return true;
+        if (!(obj instanceof ProgramSelector)) return false;
+        ProgramSelector other = (ProgramSelector) obj;
+        // secondaryIds and vendorIds are ignored for equality/hashing
+        return other.getProgramType() == mProgramType && mPrimaryId.equals(other.getPrimaryId());
+    }
+
+    private ProgramSelector(Parcel in) {
+        mProgramType = in.readInt();
+        mPrimaryId = in.readTypedObject(Identifier.CREATOR);
+        mSecondaryIds = in.createTypedArray(Identifier.CREATOR);
+        if (Stream.of(mSecondaryIds).anyMatch(id -> id == null)) {
+            throw new IllegalArgumentException("secondaryIds list must not contain nulls");
+        }
+        mVendorIds = in.createLongArray();
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(mProgramType);
+        dest.writeTypedObject(mPrimaryId, 0);
+        dest.writeTypedArray(mSecondaryIds, 0);
+        dest.writeLongArray(mVendorIds);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public static final Parcelable.Creator<ProgramSelector> CREATOR =
+            new Parcelable.Creator<ProgramSelector>() {
+        public ProgramSelector createFromParcel(Parcel in) {
+            return new ProgramSelector(in);
+        }
+
+        public ProgramSelector[] newArray(int size) {
+            return new ProgramSelector[size];
+        }
+    };
+
+    /**
+     * A single program identifier component, eg. frequency or channel ID.
+     *
+     * The long value field holds the value in format described in comments for
+     * IdentifierType constants.
+     */
+    public static final class Identifier implements Parcelable {
+        private final @IdentifierType int mType;
+        private final long mValue;
+
+        public Identifier(@IdentifierType int type, long value) {
+            mType = type;
+            mValue = value;
+        }
+
+        /**
+         * Type of an identifier.
+         *
+         * @return type of an identifier.
+         */
+        public @IdentifierType int getType() {
+            return mType;
+        }
+
+        /**
+         * Value of an identifier.
+         *
+         * Its meaning depends on identifier type, ie. for IDENTIFIER_TYPE_AMFM_FREQUENCY type,
+         * the value is a frequency in kHz.
+         *
+         * The range of a value depends on its type; it does not always require the whole long
+         * range. Casting to necessary type (ie. int) without range checking is correct in front-end
+         * code - any range violations are either errors in the framework or in the
+         * HAL implementation. For example, IDENTIFIER_TYPE_AMFM_FREQUENCY always fits in int,
+         * as Integer.MAX_VALUE would mean 2.1THz.
+         *
+         * @return value of an identifier.
+         */
+        public long getValue() {
+            return mValue;
+        }
+
+        @Override
+        public String toString() {
+            return "Identifier(" + mType + ", " + mValue + ")";
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(mType, mValue);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) return true;
+            if (!(obj instanceof Identifier)) return false;
+            Identifier other = (Identifier) obj;
+            return other.getType() == mType && other.getValue() == mValue;
+        }
+
+        private Identifier(Parcel in) {
+            mType = in.readInt();
+            mValue = in.readLong();
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeInt(mType);
+            dest.writeLong(mValue);
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        public static final Parcelable.Creator<Identifier> CREATOR =
+                new Parcelable.Creator<Identifier>() {
+            public Identifier createFromParcel(Parcel in) {
+                return new Identifier(in);
+            }
+
+            public Identifier[] newArray(int size) {
+                return new Identifier[size];
+            }
+        };
+    }
+}
diff --git a/core/java/android/hardware/radio/RadioManager.aidl b/core/java/android/hardware/radio/RadioManager.aidl
index 0f0ec84..8a39388 100644
--- a/core/java/android/hardware/radio/RadioManager.aidl
+++ b/core/java/android/hardware/radio/RadioManager.aidl
@@ -17,7 +17,10 @@
 package android.hardware.radio;
 
 /** @hide */
-parcelable RadioManager.ProgramInfo;
+parcelable RadioManager.BandConfig;
 
 /** @hide */
-parcelable RadioManager.BandConfig;
+parcelable RadioManager.ModuleProperties;
+
+/** @hide */
+parcelable RadioManager.ProgramInfo;
diff --git a/core/java/android/hardware/radio/RadioManager.java b/core/java/android/hardware/radio/RadioManager.java
index 20292f7..4f4361f 100644
--- a/core/java/android/hardware/radio/RadioManager.java
+++ b/core/java/android/hardware/radio/RadioManager.java
@@ -16,8 +16,10 @@
 
 package android.hardware.radio;
 
+import android.Manifest;
+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.content.Context;
@@ -27,12 +29,17 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.ServiceManager.ServiceNotFoundException;
-import android.os.SystemProperties;
 import android.text.TextUtils;
 import android.util.Log;
 
-import java.util.List;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * The RadioManager class allows to control a broadcast radio tuner present on the device.
@@ -44,7 +51,7 @@
 @SystemApi
 @SystemService(Context.RADIO_SERVICE)
 public class RadioManager {
-    private static final String TAG = "RadioManager";
+    private static final String TAG = "BroadcastRadio.manager";
 
     /** Method return status: successful operation */
     public static final int STATUS_OK = 0;
@@ -72,7 +79,7 @@
     /** Radio module class supporting Digital terrestrial radio */
     public static final int CLASS_DT = 2;
 
-    // keep in sync with radio_band_t in /system/core/incluse/system/radio.h
+    public static final int BAND_INVALID = -1;
     /** AM radio band (LW/MW/SW).
      * @see BandDescriptor */
     public static final int BAND_AM = 0;
@@ -85,6 +92,15 @@
     /** AM HD radio or DRM band.
      * @see BandDescriptor */
     public static final int BAND_AM_HD = 3;
+    @IntDef(prefix = { "BAND_" }, value = {
+        BAND_INVALID,
+        BAND_AM,
+        BAND_FM,
+        BAND_AM_HD,
+        BAND_FM_HD,
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Band {}
 
     // keep in sync with radio_region_t in /system/core/incluse/system/radio.h
     /** Africa, Europe.
@@ -103,6 +119,25 @@
      * @see BandDescriptor */
     public static final int REGION_KOREA  = 4;
 
+    private static void writeStringMap(@NonNull Parcel dest, @NonNull Map<String, String> map) {
+        dest.writeInt(map.size());
+        for (Map.Entry<String, String> entry : map.entrySet()) {
+            dest.writeString(entry.getKey());
+            dest.writeString(entry.getValue());
+        }
+    }
+
+    private static @NonNull Map<String, String> readStringMap(@NonNull Parcel in) {
+        int size = in.readInt();
+        Map<String, String> map = new HashMap<>();
+        while (size-- > 0) {
+            String key = in.readString();
+            String value = in.readString();
+            map.put(key, value);
+        }
+        return map;
+    }
+
     /*****************************************************************************
      * Lists properties, options and radio bands supported by a given broadcast radio module.
      * Each module has a unique ID used to address it when calling RadioManager APIs.
@@ -111,6 +146,7 @@
     public static class ModuleProperties implements Parcelable {
 
         private final int mId;
+        @NonNull private final String mServiceName;
         private final int mClassId;
         private final String mImplementor;
         private final String mProduct;
@@ -121,12 +157,18 @@
         private final boolean mIsCaptureSupported;
         private final BandDescriptor[] mBands;
         private final boolean mIsBgScanSupported;
-        private final String mVendorExension;
+        private final Set<Integer> mSupportedProgramTypes;
+        private final Set<Integer> mSupportedIdentifierTypes;
+        @NonNull private final Map<String, String> mVendorInfo;
 
-        ModuleProperties(int id, int classId, String implementor, String product, String version,
-                String serial, int numTuners, int numAudioSources, boolean isCaptureSupported,
-                BandDescriptor[] bands, boolean isBgScanSupported, String vendorExension) {
+        ModuleProperties(int id, String serviceName, int classId, String implementor,
+                String product, String version, String serial, int numTuners, int numAudioSources,
+                boolean isCaptureSupported, BandDescriptor[] bands, boolean isBgScanSupported,
+                @ProgramSelector.ProgramType int[] supportedProgramTypes,
+                @ProgramSelector.IdentifierType int[] supportedIdentifierTypes,
+                Map<String, String> vendorInfo) {
             mId = id;
+            mServiceName = TextUtils.isEmpty(serviceName) ? "default" : serviceName;
             mClassId = classId;
             mImplementor = implementor;
             mProduct = product;
@@ -137,9 +179,18 @@
             mIsCaptureSupported = isCaptureSupported;
             mBands = bands;
             mIsBgScanSupported = isBgScanSupported;
-            mVendorExension = vendorExension;
+            mSupportedProgramTypes = arrayToSet(supportedProgramTypes);
+            mSupportedIdentifierTypes = arrayToSet(supportedIdentifierTypes);
+            mVendorInfo = (vendorInfo == null) ? new HashMap<>() : vendorInfo;
         }
 
+        private static Set<Integer> arrayToSet(int[] arr) {
+            return Arrays.stream(arr).boxed().collect(Collectors.toSet());
+        }
+
+        private static int[] setToArray(Set<Integer> set) {
+            return set.stream().mapToInt(Integer::intValue).toArray();
+        }
 
         /** Unique module identifier provided by the native service.
          * For use with {@link #openTuner(int, BandConfig, boolean, Callback, Handler)}.
@@ -149,6 +200,14 @@
             return mId;
         }
 
+        /**
+         * Module service (driver) name as registered with HIDL.
+         * @return the module service name.
+         */
+        public @NonNull String getServiceName() {
+            return mServiceName;
+        }
+
         /** Module class identifier: {@link #CLASS_AM_FM}, {@link #CLASS_SAT}, {@link #CLASS_DT}
          * @return the radio module class identifier.
          */
@@ -218,27 +277,48 @@
          *
          * @return {@code true} if background scanning is supported (not necessary available
          * at a given time), {@code false} otherwise.
-         *
-         * @hide FutureFeature
          */
         public boolean isBackgroundScanningSupported() {
             return mIsBgScanSupported;
         }
 
         /**
-         * Opaque vendor-specific string, passed from HAL without changes.
-         * Format of this string can vary across vendors.
+         * Checks, if a given program type is supported by this tuner.
+         *
+         * If a program type is supported by radio module, it means it can tune
+         * to ProgramSelector of a given type.
+         *
+         * @return {@code true} if a given program type is supported.
+         */
+        public boolean isProgramTypeSupported(@ProgramSelector.ProgramType int type) {
+            return mSupportedProgramTypes.contains(type);
+        }
+
+        /**
+         * Checks, if a given program identifier is supported by this tuner.
+         *
+         * If an identifier is supported by radio module, it means it can use it for
+         * tuning to ProgramSelector with either primary or secondary Identifier of
+         * a given type.
+         *
+         * @return {@code true} if a given program type is supported.
+         */
+        public boolean isProgramIdentifierSupported(@ProgramSelector.IdentifierType int type) {
+            return mSupportedIdentifierTypes.contains(type);
+        }
+
+        /**
+         * A map of vendor-specific opaque strings, passed from HAL without changes.
+         * Format of these strings can vary across vendors.
          *
          * It may be used for extra features, that's not supported by a platform,
-         * for example: "preset-slots=6;ultra-hd-capable=false".
+         * for example: preset-slots=6; ultra-hd-capable=false.
          *
-         * Client application MUST verify vendor/product name from the
-         * ModuleProperties class before doing any interpretation of this value.
-         *
-         * @hide FutureFeature
+         * Keys must be prefixed with unique vendor Java-style namespace,
+         * eg. 'com.somecompany.parameter1'.
          */
-        public @NonNull String getVendorExension() {
-            return mVendorExension == null ? "" : mVendorExension;
+        public @NonNull Map<String, String> getVendorInfo() {
+            return mVendorInfo;
         }
 
         /** List of descriptors for all bands supported by this module.
@@ -250,6 +330,8 @@
 
         private ModuleProperties(Parcel in) {
             mId = in.readInt();
+            String serviceName = in.readString();
+            mServiceName = TextUtils.isEmpty(serviceName) ? "default" : serviceName;
             mClassId = in.readInt();
             mImplementor = in.readString();
             mProduct = in.readString();
@@ -264,7 +346,9 @@
                 mBands[i] = (BandDescriptor) tmp[i];
             }
             mIsBgScanSupported = in.readInt() == 1;
-            mVendorExension = in.readString();
+            mSupportedProgramTypes = arrayToSet(in.createIntArray());
+            mSupportedIdentifierTypes = arrayToSet(in.createIntArray());
+            mVendorInfo = readStringMap(in);
         }
 
         public static final Parcelable.Creator<ModuleProperties> CREATOR
@@ -281,6 +365,7 @@
         @Override
         public void writeToParcel(Parcel dest, int flags) {
             dest.writeInt(mId);
+            dest.writeString(mServiceName);
             dest.writeInt(mClassId);
             dest.writeString(mImplementor);
             dest.writeString(mProduct);
@@ -291,7 +376,9 @@
             dest.writeInt(mIsCaptureSupported ? 1 : 0);
             dest.writeParcelableArray(mBands, flags);
             dest.writeInt(mIsBgScanSupported ? 1 : 0);
-            dest.writeString(mVendorExension);
+            dest.writeIntArray(setToArray(mSupportedProgramTypes));
+            dest.writeIntArray(setToArray(mSupportedIdentifierTypes));
+            writeStringMap(dest, mVendorInfo);
         }
 
         @Override
@@ -301,7 +388,8 @@
 
         @Override
         public String toString() {
-            return "ModuleProperties [mId=" + mId + ", mClassId=" + mClassId
+            return "ModuleProperties [mId=" + mId
+                    + ", mServiceName=" + mServiceName + ", mClassId=" + mClassId
                     + ", mImplementor=" + mImplementor + ", mProduct=" + mProduct
                     + ", mVersion=" + mVersion + ", mSerial=" + mSerial
                     + ", mNumTuners=" + mNumTuners
@@ -316,6 +404,7 @@
             final int prime = 31;
             int result = 1;
             result = prime * result + mId;
+            result = prime * result + mServiceName.hashCode();
             result = prime * result + mClassId;
             result = prime * result + ((mImplementor == null) ? 0 : mImplementor.hashCode());
             result = prime * result + ((mProduct == null) ? 0 : mProduct.hashCode());
@@ -326,7 +415,7 @@
             result = prime * result + (mIsCaptureSupported ? 1 : 0);
             result = prime * result + Arrays.hashCode(mBands);
             result = prime * result + (mIsBgScanSupported ? 1 : 0);
-            result = prime * result + ((mVendorExension == null) ? 0 : mVendorExension.hashCode());
+            result = prime * result + mVendorInfo.hashCode();
             return result;
         }
 
@@ -339,6 +428,7 @@
             ModuleProperties other = (ModuleProperties) obj;
             if (mId != other.getId())
                 return false;
+            if (!TextUtils.equals(mServiceName, other.mServiceName)) return false;
             if (mClassId != other.getClassId())
                 return false;
             if (mImplementor == null) {
@@ -371,8 +461,7 @@
                 return false;
             if (mIsBgScanSupported != other.isBackgroundScanningSupported())
                 return false;
-            if (!TextUtils.equals(mVendorExension, other.mVendorExension))
-                return false;
+            if (!mVendorInfo.equals(other.mVendorInfo)) return false;
             return true;
         }
     }
@@ -414,6 +503,25 @@
         public int getType() {
             return mType;
         }
+
+        /**
+         * Checks if the band is either AM or AM_HD.
+         *
+         * @return {@code true}, if band is AM or AM_HD.
+         */
+        public boolean isAmBand() {
+            return mType == BAND_AM || mType == BAND_AM_HD;
+        }
+
+        /**
+         * Checks if the band is either FM or FM_HD.
+         *
+         * @return {@code true}, if band is FM or FM_HD.
+         */
+        public boolean isFmBand() {
+            return mType == BAND_FM || mType == BAND_FM_HD;
+        }
+
         /** Lower band limit expressed in units according to band type.
          * Currently all defined band types express channels as frequency in kHz
          * @return the lower band limit.
@@ -1225,46 +1333,72 @@
     public static class ProgramInfo implements Parcelable {
 
         // sourced from hardware/interfaces/broadcastradio/1.1/types.hal
-        private final static int FLAG_LIVE = 1 << 0;
-        private final static int FLAG_MUTED = 1 << 1;
+        private static final int FLAG_LIVE = 1 << 0;
+        private static final int FLAG_MUTED = 1 << 1;
+        private static final int FLAG_TRAFFIC_PROGRAM = 1 << 2;
+        private static final int FLAG_TRAFFIC_ANNOUNCEMENT = 1 << 3;
 
-        private final int mChannel;
-        private final int mSubChannel;
+        @NonNull private final ProgramSelector mSelector;
         private final boolean mTuned;
         private final boolean mStereo;
         private final boolean mDigital;
         private final int mFlags;
         private final int mSignalStrength;
         private final RadioMetadata mMetadata;
-        private final String mVendorExension;
+        @NonNull private final Map<String, String> mVendorInfo;
 
-        ProgramInfo(int channel, int subChannel, boolean tuned, boolean stereo,
+        ProgramInfo(@NonNull ProgramSelector selector, boolean tuned, boolean stereo,
                 boolean digital, int signalStrength, RadioMetadata metadata, int flags,
-                String vendorExension) {
-            mChannel = channel;
-            mSubChannel = subChannel;
+                Map<String, String> vendorInfo) {
+            mSelector = selector;
             mTuned = tuned;
             mStereo = stereo;
             mDigital = digital;
             mFlags = flags;
             mSignalStrength = signalStrength;
             mMetadata = metadata;
-            mVendorExension = vendorExension;
+            mVendorInfo = (vendorInfo == null) ? new HashMap<>() : vendorInfo;
+        }
+
+        /**
+         * Program selector, necessary for tuning to a program.
+         *
+         * @return the program selector.
+         */
+        public @NonNull ProgramSelector getSelector() {
+            return mSelector;
         }
 
         /** Main channel expressed in units according to band type.
          * Currently all defined band types express channels as frequency in kHz
          * @return the program channel
+         * @deprecated Use {@link getSelector()} instead.
          */
+        @Deprecated
         public int getChannel() {
-            return mChannel;
+            try {
+                return (int) mSelector.getFirstId(ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY);
+            } catch (IllegalArgumentException ex) {
+                Log.w(TAG, "Not an AM/FM program");
+                return 0;
+            }
         }
+
         /** Sub channel ID. E.g 1 for HD radio HD1
          * @return the program sub channel
+         * @deprecated Use {@link getSelector()} instead.
          */
+        @Deprecated
         public int getSubChannel() {
-            return mSubChannel;
+            try {
+                return (int) mSelector.getFirstId(
+                        ProgramSelector.IDENTIFIER_TYPE_HD_SUBCHANNEL) + 1;
+            } catch (IllegalArgumentException ex) {
+                // this is a normal behavior for analog AM/FM selector
+                return 0;
+            }
         }
+
         /** {@code true} if the tuner is currently tuned on a valid station
          * @return {@code true} if currently tuned, {@code false} otherwise.
          */
@@ -1288,8 +1422,6 @@
          * {@code true} if the program is currently playing live stream.
          * This may result in a slightly altered reception parameters,
          * usually targetted at reduced latency.
-         *
-         * @hide FutureFeature
          */
         public boolean isLive() {
             return (mFlags & FLAG_LIVE) != 0;
@@ -1300,13 +1432,27 @@
          * conditions or buffering. In this state volume knob MAY be disabled to
          * prevent user increasing volume too much.
          * It does NOT mean the user has muted audio.
-         *
-         * @hide FutureFeature
          */
         public boolean isMuted() {
             return (mFlags & FLAG_MUTED) != 0;
         }
 
+        /**
+         * {@code true} if radio station transmits traffic information
+         * regularily.
+         */
+        public boolean isTrafficProgram() {
+            return (mFlags & FLAG_TRAFFIC_PROGRAM) != 0;
+        }
+
+        /**
+         * {@code true} if radio station transmits traffic information
+         * at the very moment.
+         */
+        public boolean isTrafficAnnouncementActive() {
+            return (mFlags & FLAG_TRAFFIC_ANNOUNCEMENT) != 0;
+        }
+
         /** Signal strength indicator from 0 (no signal) to 100 (excellent)
          * @return the signal strength indication.
          */
@@ -1322,24 +1468,21 @@
         }
 
         /**
-         * Opaque vendor-specific string, passed from HAL without changes.
-         * Format of this string can vary across vendors.
+         * A map of vendor-specific opaque strings, passed from HAL without changes.
+         * Format of these strings can vary across vendors.
          *
          * It may be used for extra features, that's not supported by a platform,
-         * for example: "paid-service=true;bitrate=320kbps".
+         * for example: paid-service=true; bitrate=320kbps.
          *
-         * Client application MUST verify vendor/product name from the
-         * ModuleProperties class before doing any interpretation of this value.
-         *
-         * @hide FutureFeature
+         * Keys must be prefixed with unique vendor Java-style namespace,
+         * eg. 'com.somecompany.parameter1'.
          */
-        public @NonNull String getVendorExension() {
-            return mVendorExension == null ? "" : mVendorExension;
+        public @NonNull Map<String, String> getVendorInfo() {
+            return mVendorInfo;
         }
 
         private ProgramInfo(Parcel in) {
-            mChannel = in.readInt();
-            mSubChannel = in.readInt();
+            mSelector = in.readParcelable(null);
             mTuned = in.readByte() == 1;
             mStereo = in.readByte() == 1;
             mDigital = in.readByte() == 1;
@@ -1350,7 +1493,7 @@
                 mMetadata = null;
             }
             mFlags = in.readInt();
-            mVendorExension = in.readString();
+            mVendorInfo = readStringMap(in);
         }
 
         public static final Parcelable.Creator<ProgramInfo> CREATOR
@@ -1366,8 +1509,7 @@
 
         @Override
         public void writeToParcel(Parcel dest, int flags) {
-            dest.writeInt(mChannel);
-            dest.writeInt(mSubChannel);
+            dest.writeParcelable(mSelector, 0);
             dest.writeByte((byte)(mTuned ? 1 : 0));
             dest.writeByte((byte)(mStereo ? 1 : 0));
             dest.writeByte((byte)(mDigital ? 1 : 0));
@@ -1379,7 +1521,7 @@
                 mMetadata.writeToParcel(dest, flags);
             }
             dest.writeInt(mFlags);
-            dest.writeString(mVendorExension);
+            writeStringMap(dest, mVendorInfo);
         }
 
         @Override
@@ -1389,7 +1531,7 @@
 
         @Override
         public String toString() {
-            return "ProgramInfo [mChannel=" + mChannel + ", mSubChannel=" + mSubChannel
+            return "ProgramInfo [mSelector=" + mSelector
                     + ", mTuned=" + mTuned + ", mStereo=" + mStereo + ", mDigital=" + mDigital
                     + ", mFlags=" + mFlags + ", mSignalStrength=" + mSignalStrength
                     + ((mMetadata == null) ? "" : (", mMetadata=" + mMetadata.toString()))
@@ -1400,15 +1542,14 @@
         public int hashCode() {
             final int prime = 31;
             int result = 1;
-            result = prime * result + mChannel;
-            result = prime * result + mSubChannel;
+            result = prime * result + mSelector.hashCode();
             result = prime * result + (mTuned ? 1 : 0);
             result = prime * result + (mStereo ? 1 : 0);
             result = prime * result + (mDigital ? 1 : 0);
             result = prime * result + mFlags;
             result = prime * result + mSignalStrength;
             result = prime * result + ((mMetadata == null) ? 0 : mMetadata.hashCode());
-            result = prime * result + ((mVendorExension == null) ? 0 : mVendorExension.hashCode());
+            result = prime * result + mVendorInfo.hashCode();
             return result;
         }
 
@@ -1419,10 +1560,7 @@
             if (!(obj instanceof ProgramInfo))
                 return false;
             ProgramInfo other = (ProgramInfo) obj;
-            if (mChannel != other.getChannel())
-                return false;
-            if (mSubChannel != other.getSubChannel())
-                return false;
+            if (!mSelector.equals(other.getSelector())) return false;
             if (mTuned != other.isTuned())
                 return false;
             if (mStereo != other.isStereo())
@@ -1438,8 +1576,7 @@
                     return false;
             } else if (!mMetadata.equals(other.getMetadata()))
                 return false;
-            if (!TextUtils.equals(mVendorExension, other.mVendorExension))
-                return false;
+            if (!mVendorInfo.equals(other.mVendorInfo)) return false;
             return true;
         }
     }
@@ -1457,7 +1594,32 @@
      *  <li>{@link #STATUS_DEAD_OBJECT} if the binder transaction to the native service fails, </li>
      * </ul>
      */
-    public native int listModules(List <ModuleProperties> modules);
+    @RequiresPermission(Manifest.permission.ACCESS_BROADCAST_RADIO)
+    public int listModules(List<ModuleProperties> modules) {
+        if (modules == null) {
+            Log.e(TAG, "the output list must not be empty");
+            return STATUS_BAD_VALUE;
+        }
+
+        Log.d(TAG, "Listing available tuners...");
+        List<ModuleProperties> returnedList;
+        try {
+            returnedList = mService.listModules();
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed listing available tuners", e);
+            return STATUS_DEAD_OBJECT;
+        }
+
+        if (returnedList == null) {
+            Log.e(TAG, "Returned list was a null");
+            return STATUS_ERROR;
+        }
+
+        modules.addAll(returnedList);
+        return STATUS_OK;
+    }
+
+    private native int nativeListModules(List<ModuleProperties> modules);
 
     /**
      * Open an interface to control a tuner on a given broadcast radio module.
@@ -1473,50 +1635,39 @@
      * Can be null if default handler is OK.
      * @return a valid {@link RadioTuner} interface in case of success or null in case of error.
      */
+    @RequiresPermission(Manifest.permission.ACCESS_BROADCAST_RADIO)
     public RadioTuner openTuner(int moduleId, BandConfig config, boolean withAudio,
             RadioTuner.Callback callback, Handler handler) {
         if (callback == null) {
             throw new IllegalArgumentException("callback must not be empty");
         }
 
-        if (mService != null) {
-            Log.d(TAG, "Opening tuner...");
+        Log.d(TAG, "Opening tuner " + moduleId + "...");
 
-            ITuner tuner;
-            ITunerCallback halCallback = new TunerCallbackAdapter(callback, handler);
-            try {
-                tuner = mService.openTuner(moduleId, config, withAudio, halCallback);
-            } catch (RemoteException e) {
-                throw e.rethrowFromSystemServer();
-            }
-            if (tuner == null) {
-                Log.e(TAG, "Failed to open tuner");
-                return null;
-            }
-            return new TunerAdapter(tuner);
+        ITuner tuner;
+        TunerCallbackAdapter halCallback = new TunerCallbackAdapter(callback, handler);
+        try {
+            tuner = mService.openTuner(moduleId, config, withAudio, halCallback);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to open tuner", e);
+            return null;
         }
-
-        RadioModule module = new RadioModule(moduleId, config, withAudio, callback, handler);
-        if (!module.initCheck()) {
+        if (tuner == null) {
             Log.e(TAG, "Failed to open tuner");
-            module = null;
+            return null;
         }
-
-        return (RadioTuner)module;
+        return new TunerAdapter(tuner, config != null ? config.getType() : BAND_INVALID);
     }
 
     @NonNull private final Context mContext;
-    // TODO(b/36863239): NonNull when transitioned from native service
-    @Nullable private final IRadioService mService;
+    @NonNull private final IRadioService mService;
 
     /**
      * @hide
      */
     public RadioManager(@NonNull Context context) throws ServiceNotFoundException {
         mContext = context;
-
-        boolean isServiceJava = SystemProperties.getBoolean("config.enable_java_radio", false);
-        mService = isServiceJava ? IRadioService.Stub.asInterface(
-                ServiceManager.getServiceOrThrow(Context.RADIO_SERVICE)) : null;
+        mService = IRadioService.Stub.asInterface(
+                ServiceManager.getServiceOrThrow(Context.RADIO_SERVICE));
     }
 }
diff --git a/core/java/android/hardware/radio/RadioMetadata.aidl b/core/java/android/hardware/radio/RadioMetadata.aidl
new file mode 100644
index 0000000..cbf4713
--- /dev/null
+++ b/core/java/android/hardware/radio/RadioMetadata.aidl
@@ -0,0 +1,20 @@
+/**
+ * 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.hardware.radio;
+
+/** @hide */
+parcelable RadioMetadata;
diff --git a/core/java/android/hardware/radio/RadioMetadata.java b/core/java/android/hardware/radio/RadioMetadata.java
index d07b407..3cc4b56 100644
--- a/core/java/android/hardware/radio/RadioMetadata.java
+++ b/core/java/android/hardware/radio/RadioMetadata.java
@@ -17,19 +17,15 @@
 
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
-import android.content.ContentResolver;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
-import android.net.Uri;
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.Log;
 import android.util.SparseArray;
 
-import java.util.ArrayList;
 import java.util.Set;
 
 /**
@@ -38,7 +34,7 @@
  */
 @SystemApi
 public final class RadioMetadata implements Parcelable {
-    private static final String TAG = "RadioMetadata";
+    private static final String TAG = "BroadcastRadio.metadata";
 
     /**
      * The RDS Program Information.
@@ -111,7 +107,7 @@
 
     static {
         METADATA_KEYS_TYPE = new ArrayMap<String, Integer>();
-        METADATA_KEYS_TYPE.put(METADATA_KEY_RDS_PI, METADATA_TYPE_TEXT);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_RDS_PI, METADATA_TYPE_INT);
         METADATA_KEYS_TYPE.put(METADATA_KEY_RDS_PS, METADATA_TYPE_TEXT);
         METADATA_KEYS_TYPE.put(METADATA_KEY_RDS_PTY, METADATA_TYPE_INT);
         METADATA_KEYS_TYPE.put(METADATA_KEY_RBDS_PTY, METADATA_TYPE_INT);
@@ -245,6 +241,14 @@
         return mBundle.getString(key);
     }
 
+    private static void putInt(Bundle bundle, String key, int value) {
+        int type = METADATA_KEYS_TYPE.getOrDefault(key, METADATA_TYPE_INVALID);
+        if (type != METADATA_TYPE_INT && type != METADATA_TYPE_BITMAP) {
+            throw new IllegalArgumentException("The " + key + " key cannot be used to put an int");
+        }
+        bundle.putInt(key, value);
+    }
+
     /**
      * Returns the value associated with the given key,
      * or 0 if the key is not found in the meta data.
@@ -261,7 +265,9 @@
      *
      * @param key The key the value is stored under
      * @return a {@link Bitmap} or null
+     * @deprecated Use getBitmapId(String) instead
      */
+    @Deprecated
     public Bitmap getBitmap(String key) {
         Bitmap bmp = null;
         try {
@@ -273,6 +279,30 @@
         return bmp;
     }
 
+    /**
+     * Retrieves an identifier for a bitmap.
+     *
+     * The format of an identifier is opaque to the application,
+     * with a special case of value 0 being invalid.
+     * An identifier for a given image-tuner pair is unique, so an application
+     * may cache images and determine if there is a necessity to fetch them
+     * again - if identifier changes, it means the image has changed.
+     *
+     * Only bitmap keys may be used with this method:
+     * <ul>
+     * <li>{@link #METADATA_KEY_ICON}</li>
+     * <li>{@link #METADATA_KEY_ART}</li>
+     * </ul>
+     *
+     * @param key The key the value is stored under.
+     * @return a bitmap identifier or 0 if it's missing.
+     * @hide This API is not thoroughly elaborated yet
+     */
+    public int getBitmapId(@NonNull String key) {
+        if (!METADATA_KEY_ICON.equals(key) && !METADATA_KEY_ART.equals(key)) return 0;
+        return getInt(key);
+    }
+
     public Clock getClock(String key) {
         Clock clock = null;
         try {
@@ -390,7 +420,6 @@
          * the METADATA_KEYs defined in this class are used they may only be one
          * of the following:
          * <ul>
-         * <li>{@link #METADATA_KEY_RDS_PI}</li>
          * <li>{@link #METADATA_KEY_RDS_PS}</li>
          * <li>{@link #METADATA_KEY_RDS_RT}</li>
          * <li>{@link #METADATA_KEY_TITLE}</li>
@@ -418,21 +447,18 @@
          * the METADATA_KEYs defined in this class are used they may only be one
          * of the following:
          * <ul>
+         * <li>{@link #METADATA_KEY_RDS_PI}</li>
          * <li>{@link #METADATA_KEY_RDS_PTY}</li>
          * <li>{@link #METADATA_KEY_RBDS_PTY}</li>
          * </ul>
+         * or any bitmap represented by its identifier.
          *
          * @param key The key for referencing this value
          * @param value The int value to store
          * @return the same Builder instance
          */
         public Builder putInt(String key, int value) {
-            if (!METADATA_KEYS_TYPE.containsKey(key) ||
-                    METADATA_KEYS_TYPE.get(key) != METADATA_TYPE_INT) {
-                throw new IllegalArgumentException("The " + key
-                        + " key cannot be used to put a long");
-            }
-            mBundle.putInt(key, value);
+            RadioMetadata.putInt(mBundle, key, value);
             return this;
         }
 
@@ -503,12 +529,12 @@
 
     int putIntFromNative(int nativeKey, int value) {
         String key = getKeyFromNativeKey(nativeKey);
-        if (!METADATA_KEYS_TYPE.containsKey(key) ||
-                METADATA_KEYS_TYPE.get(key) != METADATA_TYPE_INT) {
+        try {
+            putInt(mBundle, key, value);
+            return 0;
+        } catch (IllegalArgumentException ex) {
             return -1;
         }
-        mBundle.putInt(key, value);
-        return 0;
     }
 
     int putStringFromNative(int nativeKey, String value) {
@@ -540,7 +566,6 @@
     }
 
     int putClockFromNative(int nativeKey, long utcEpochSeconds, int timezoneOffsetInMinutes) {
-        Log.d(TAG, "putClockFromNative()");
         String key = getKeyFromNativeKey(nativeKey);
         if (!METADATA_KEYS_TYPE.containsKey(key) ||
                 METADATA_KEYS_TYPE.get(key) != METADATA_TYPE_CLOCK) {
diff --git a/core/java/android/hardware/radio/RadioModule.java b/core/java/android/hardware/radio/RadioModule.java
deleted file mode 100644
index c0df0f3..0000000
--- a/core/java/android/hardware/radio/RadioModule.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.radio;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.annotation.SystemApi;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import java.lang.ref.WeakReference;
-import java.util.List;
-import java.util.UUID;
-
-/**
- * A RadioModule implements the RadioTuner interface for a broadcast radio tuner physically
- * present on the device and exposed by the radio HAL.
- *
- * @hide
- */
-public class RadioModule extends RadioTuner {
-    private long mNativeContext = 0;
-    private int mId;
-    private NativeEventHandlerDelegate mEventHandlerDelegate;
-
-    RadioModule(int moduleId, RadioManager.BandConfig config, boolean withAudio,
-            RadioTuner.Callback callback, Handler handler) {
-        mId = moduleId;
-        mEventHandlerDelegate = new NativeEventHandlerDelegate(callback, handler);
-        native_setup(new WeakReference<RadioModule>(this), config, withAudio);
-    }
-    private native void native_setup(Object module_this,
-            RadioManager.BandConfig config, boolean withAudio);
-
-    @Override
-    protected void finalize() {
-        native_finalize();
-    }
-    private native void native_finalize();
-
-    boolean initCheck() {
-        return mNativeContext != 0;
-    }
-
-    // RadioTuner implementation
-    public native void close();
-
-    public native int setConfiguration(RadioManager.BandConfig config);
-
-    public native int getConfiguration(RadioManager.BandConfig[] config);
-
-    public native int setMute(boolean mute);
-
-    public native boolean getMute();
-
-    public native int step(int direction, boolean skipSubChannel);
-
-    public native int scan(int direction, boolean skipSubChannel);
-
-    public native int tune(int channel, int subChannel);
-
-    public native int cancel();
-
-    public native int getProgramInformation(RadioManager.ProgramInfo[] info);
-
-    public native boolean startBackgroundScan();
-
-    public native @NonNull List<RadioManager.ProgramInfo> getProgramList(@Nullable String filter);
-
-    public native boolean isAnalogForced();
-
-    public native void setAnalogForced(boolean isForced);
-
-    public native boolean isAntennaConnected();
-
-    public native boolean hasControl();
-
-
-    /* keep in sync with radio_event_type_t in system/core/include/system/radio.h */
-    static final int EVENT_HW_FAILURE = 0;
-    static final int EVENT_CONFIG = 1;
-    static final int EVENT_ANTENNA = 2;
-    static final int EVENT_TUNED = 3;
-    static final int EVENT_METADATA = 4;
-    static final int EVENT_TA = 5;
-    static final int EVENT_AF_SWITCH = 6;
-    static final int EVENT_EA = 7;
-    static final int EVENT_CONTROL = 100;
-    static final int EVENT_SERVER_DIED = 101;
-
-    private class NativeEventHandlerDelegate {
-        private final Handler mHandler;
-
-        NativeEventHandlerDelegate(final RadioTuner.Callback callback,
-                                   Handler handler) {
-            // find the looper for our new event handler
-            Looper looper;
-            if (handler != null) {
-                looper = handler.getLooper();
-            } else {
-                looper = Looper.getMainLooper();
-            }
-
-            // construct the event handler with this looper
-            if (looper != null) {
-                // implement the event handler delegate
-                mHandler = new Handler(looper) {
-                    @Override
-                    public void handleMessage(Message msg) {
-                        switch (msg.what) {
-                        case EVENT_HW_FAILURE:
-                            if (callback != null) {
-                                callback.onError(RadioTuner.ERROR_HARDWARE_FAILURE);
-                            }
-                            break;
-                        case EVENT_CONFIG: {
-                            RadioManager.BandConfig config = (RadioManager.BandConfig)msg.obj;
-                            switch(msg.arg1) {
-                            case RadioManager.STATUS_OK:
-                                if (callback != null) {
-                                    callback.onConfigurationChanged(config);
-                                }
-                                break;
-                            default:
-                                if (callback != null) {
-                                    callback.onError(RadioTuner.ERROR_CONFIG);
-                                }
-                                break;
-                            }
-                        } break;
-                        case EVENT_ANTENNA:
-                            if (callback != null) {
-                                callback.onAntennaState(msg.arg2 == 1);
-                            }
-                            break;
-                        case EVENT_AF_SWITCH:
-                        case EVENT_TUNED: {
-                            RadioManager.ProgramInfo info = (RadioManager.ProgramInfo)msg.obj;
-                            switch (msg.arg1) {
-                            case RadioManager.STATUS_OK:
-                                if (callback != null) {
-                                    callback.onProgramInfoChanged(info);
-                                }
-                                break;
-                            case RadioManager.STATUS_TIMED_OUT:
-                                if (callback != null) {
-                                    callback.onError(RadioTuner.ERROR_SCAN_TIMEOUT);
-                                }
-                                break;
-                            case RadioManager.STATUS_INVALID_OPERATION:
-                            default:
-                                if (callback != null) {
-                                    callback.onError(RadioTuner.ERROR_CANCELLED);
-                                }
-                                break;
-                            }
-                        } break;
-                        case EVENT_METADATA: {
-                            RadioMetadata metadata = (RadioMetadata)msg.obj;
-                            if (callback != null) {
-                                callback.onMetadataChanged(metadata);
-                            }
-                        } break;
-                        case EVENT_TA:
-                            if (callback != null) {
-                                callback.onTrafficAnnouncement(msg.arg2 == 1);
-                            }
-                            break;
-                        case EVENT_EA:
-                            if (callback != null) {
-                                callback.onEmergencyAnnouncement(msg.arg2 == 1);
-                            }
-                        case EVENT_CONTROL:
-                            if (callback != null) {
-                                callback.onControlChanged(msg.arg2 == 1);
-                            }
-                            break;
-                        case EVENT_SERVER_DIED:
-                            if (callback != null) {
-                                callback.onError(RadioTuner.ERROR_SERVER_DIED);
-                            }
-                            break;
-                        default:
-                            // Should not happen
-                            break;
-                        }
-                    }
-                };
-            } else {
-                mHandler = null;
-            }
-        }
-
-        Handler handler() {
-            return mHandler;
-        }
-    }
-
-
-    @SuppressWarnings("unused")
-    private static void postEventFromNative(Object module_ref,
-                                            int what, int arg1, int arg2, Object obj) {
-        RadioModule module = (RadioModule)((WeakReference)module_ref).get();
-        if (module == null) {
-            return;
-        }
-
-        NativeEventHandlerDelegate delegate = module.mEventHandlerDelegate;
-        if (delegate != null) {
-            Handler handler = delegate.handler();
-            if (handler != null) {
-                Message m = handler.obtainMessage(what, arg1, arg2, obj);
-                handler.sendMessage(m);
-            }
-        }
-    }
-}
-
diff --git a/core/java/android/hardware/radio/RadioTuner.java b/core/java/android/hardware/radio/RadioTuner.java
index 6e1232d..6e8991a 100644
--- a/core/java/android/hardware/radio/RadioTuner.java
+++ b/core/java/android/hardware/radio/RadioTuner.java
@@ -19,14 +19,11 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
-import android.content.Context;
-import android.content.Intent;
+import android.graphics.Bitmap;
 import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import java.lang.ref.WeakReference;
+
 import java.util.List;
-import java.util.UUID;
+import java.util.Map;
 
 /**
  * RadioTuner interface provides methods to control a radio tuner on the device: selecting and
@@ -175,10 +172,22 @@
      *  <li>{@link RadioManager#STATUS_DEAD_OBJECT} if the binder transaction to the native
      *  service fails, </li>
      * </ul>
+     * @deprecated Use {@link tune(ProgramSelector)} instead.
      */
+    @Deprecated
     public abstract int tune(int channel, int subChannel);
 
     /**
+     * Tune to a program.
+     *
+     * The operation is asynchronous and {@link Callback} onProgramInfoChanged() will be called
+     * when tune completes or onError() when cancelled or on timeout.
+     *
+     * @throws IllegalArgumentException if the provided selector is invalid
+     */
+    public abstract void tune(@NonNull ProgramSelector selector);
+
+    /**
      * Cancel a pending scan or tune operation.
      * If an operation is pending, {@link Callback} onError() will be called with
      * {@link #ERROR_CANCELLED}.
@@ -196,6 +205,17 @@
     public abstract int cancel();
 
     /**
+     * Cancels traffic or emergency announcement.
+     *
+     * If there was no announcement to cancel, no action is taken.
+     *
+     * There is a race condition between calling cancelAnnouncement and the actual announcement
+     * being finished, so onTrafficAnnouncement / onEmergencyAnnouncement callback should be
+     * tracked with proper locking.
+     */
+    public abstract void cancelAnnouncement();
+
+    /**
      * Get current station information.
      * @param info a ProgramInfo array of lengh 1 where the information is returned.
      * @return
@@ -212,6 +232,27 @@
     public abstract int getProgramInformation(RadioManager.ProgramInfo[] info);
 
     /**
+     * Retrieves a {@link Bitmap} for the given image ID or null,
+     * if the image was missing from the tuner.
+     *
+     * This involves doing a call to the tuner, so the bitmap should be cached
+     * on the application side.
+     *
+     * If the method returns null for non-zero ID, it means the image was
+     * updated on the tuner side. There is a race conditon between fetching
+     * image for an old ID and tuner updating the image (and cleaning up the
+     * old image). In such case, a new ProgramInfo with updated image id will
+     * be sent with a {@link onProgramInfoChanged} callback.
+     *
+     * @param id The image identifier, retrieved with
+     *           {@link RadioMetadata#getBitmapId(String)}.
+     * @return A {@link Bitmap} or null.
+     * @throws IllegalArgumentException if id==0
+     * @hide This API is not thoroughly elaborated yet
+     */
+    public abstract @Nullable Bitmap getMetadataImage(int id);
+
+    /**
      * Initiates a background scan to update internally cached program list.
      *
      * It may not be necessary to initiate the scan explicitly - the scan MAY be performed on boot.
@@ -224,24 +265,24 @@
      * is unavailable; ie. temporarily due to ongoing foreground playback in single-tuner device
      * or permanently if the feature is not supported
      * (see ModuleProperties#isBackgroundScanningSupported()).
-     * @hide FutureFeature
      */
     public abstract boolean startBackgroundScan();
 
     /**
      * Get the list of discovered radio stations.
      *
-     * To get the full list, set filter to null or empty string. Otherwise, client application
-     * must verify vendor product/name before setting this parameter to anything else.
+     * To get the full list, set filter to null or empty map.
+     * Keys must be prefixed with unique vendor Java-style namespace,
+     * eg. 'com.somecompany.parameter1'.
      *
-     * @param filter vendor-specific selector for radio stations.
+     * @param vendorFilter vendor-specific selector for radio stations.
      * @return a list of radio stations.
      * @throws IllegalStateException if the scan is in progress or has not been started,
      *         startBackgroundScan() call may fix it.
-     * @throws IllegalArgumentException if the filter argument is not valid.
-     * @hide FutureFeature
+     * @throws IllegalArgumentException if the vendorFilter argument is not valid.
      */
-    public abstract @NonNull List<RadioManager.ProgramInfo> getProgramList(@Nullable String filter);
+    public abstract @NonNull List<RadioManager.ProgramInfo>
+            getProgramList(@Nullable Map<String, String> vendorFilter);
 
     /**
      * Checks, if the analog playback is forced, see setAnalogForced.
@@ -249,7 +290,6 @@
      * @throws IllegalStateException if the switch is not supported at current
      *         configuration.
      * @return {@code true} if analog is forced, {@code false} otherwise.
-     * @hide FutureFeature
      */
     public abstract boolean isAnalogForced();
 
@@ -265,7 +305,6 @@
      * @param isForced {@code true} to force analog, {@code false} for a default behaviour.
      * @throws IllegalStateException if the switch is not supported at current
      *         configuration.
-     * @hide FutureFeature
      */
     public abstract void setAnalogForced(boolean isForced);
 
@@ -303,6 +342,10 @@
     public static final  int ERROR_SCAN_TIMEOUT = 3;
     /** The requested configuration could not be applied */
     public static final  int ERROR_CONFIG = 4;
+    /** Background scan was interrupted due to hardware becoming temporarily unavailable. */
+    public static final int ERROR_BACKGROUND_SCAN_UNAVAILABLE = 5;
+    /** Background scan failed due to other error, ie. HW failure. */
+    public static final int ERROR_BACKGROUND_SCAN_FAILED = 6;
 
     /**
      * Callback provided by the client application when opening a {@link RadioTuner}
@@ -323,20 +366,24 @@
          * or {@link RadioTuner#setConfiguration(RadioManager.BandConfig)}
          */
         public void onConfigurationChanged(RadioManager.BandConfig config) {}
+
         /**
-         * onProgramInfoChanged() is called upon successful completion of
-         * {@link RadioTuner#step(int, boolean)}, {@link RadioTuner#scan(int, boolean)},
-         * {@link RadioTuner#tune(int, int)} or when a switching to alternate frequency occurs.
-         * Note that if metadata only are updated,  {@link #onMetadataChanged(RadioMetadata)} will
-         * be called.
+         * Called when program info (including metadata) for the current program has changed.
+         *
+         * It happens either upon successful completion of {@link RadioTuner#step(int, boolean)},
+         * {@link RadioTuner#scan(int, boolean)}, {@link RadioTuner#tune(int, int)}; when
+         * a switching to alternate frequency occurs; or when metadata is updated.
          */
         public void onProgramInfoChanged(RadioManager.ProgramInfo info) {}
+
         /**
-         * onMetadataChanged() is called when new meta data are received on current program.
-         * Meta data are also received in {@link RadioManager.ProgramInfo} when
-         *  {@link #onProgramInfoChanged(RadioManager.ProgramInfo)} is called.
+         * Called when metadata is updated for the current program.
+         *
+         * @deprecated Use {@link #onProgramInfoChanged(RadioManager.ProgramInfo)} instead.
          */
+        @Deprecated
         public void onMetadataChanged(RadioMetadata metadata) {}
+
         /**
          * onTrafficAnnouncement() is called when a traffic announcement starts and stops.
          */
@@ -368,23 +415,18 @@
          *
          * @param isAvailable true, if the tuner turned temporarily background-
          *                    capable, false in the other case.
-         * @hide FutureFeature
          */
         public void onBackgroundScanAvailabilityChange(boolean isAvailable) {}
 
         /**
          * Called when a background scan completes successfully.
-         *
-         * @hide FutureFeature
          */
         public void onBackgroundScanComplete() {}
 
         /**
          * Called when available program list changed.
          *
-         * Use getProgramList() to get the actual list.
-         *
-         * @hide FutureFeature
+         * Use {@link RadioTuner#getProgramList(String)} to get an actual list.
          */
         public void onProgramListChanged() {}
     }
diff --git a/core/java/android/hardware/radio/TunerAdapter.java b/core/java/android/hardware/radio/TunerAdapter.java
index a457494..b621969 100644
--- a/core/java/android/hardware/radio/TunerAdapter.java
+++ b/core/java/android/hardware/radio/TunerAdapter.java
@@ -18,32 +18,37 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.graphics.Bitmap;
 import android.os.RemoteException;
 import android.util.Log;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * Implements the RadioTuner interface by forwarding calls to radio service.
  */
 class TunerAdapter extends RadioTuner {
-    private static final String TAG = "radio.TunerAdapter";
+    private static final String TAG = "BroadcastRadio.TunerAdapter";
 
     @NonNull private final ITuner mTuner;
     private boolean mIsClosed = false;
 
-    TunerAdapter(ITuner tuner) {
+    private @RadioManager.Band int mBand;
+
+    TunerAdapter(ITuner tuner, @RadioManager.Band int band) {
         if (tuner == null) {
             throw new NullPointerException();
         }
         mTuner = tuner;
+        mBand = band;
     }
 
     @Override
     public void close() {
         synchronized (mTuner) {
             if (mIsClosed) {
-                Log.d(TAG, "Tuner is already closed");
+                Log.v(TAG, "Tuner is already closed");
                 return;
             }
             mIsClosed = true;
@@ -59,6 +64,7 @@
     public int setConfiguration(RadioManager.BandConfig config) {
         try {
             mTuner.setConfiguration(config);
+            mBand = config.getType();
             return RadioManager.STATUS_OK;
         } catch (IllegalArgumentException e) {
             Log.e(TAG, "Can't set configuration", e);
@@ -138,7 +144,7 @@
     @Override
     public int tune(int channel, int subChannel) {
         try {
-            mTuner.tune(channel, subChannel);
+            mTuner.tune(ProgramSelector.createAmFmSelector(mBand, channel, subChannel));
         } catch (IllegalStateException e) {
             Log.e(TAG, "Can't tune", e);
             return RadioManager.STATUS_INVALID_OPERATION;
@@ -153,6 +159,15 @@
     }
 
     @Override
+    public void tune(@NonNull ProgramSelector selector) {
+        try {
+            mTuner.tune(selector);
+        } catch (RemoteException e) {
+            throw new RuntimeException("service died", e);
+        }
+    }
+
+    @Override
     public int cancel() {
         try {
             mTuner.cancel();
@@ -167,6 +182,15 @@
     }
 
     @Override
+    public void cancelAnnouncement() {
+        try {
+            mTuner.cancelAnnouncement();
+        } catch (RemoteException e) {
+            throw new RuntimeException("service died", e);
+        }
+    }
+
+    @Override
     public int getProgramInformation(RadioManager.ProgramInfo[] info) {
         if (info == null || info.length != 1) {
             throw new IllegalArgumentException("The argument must be an array of length 1");
@@ -181,6 +205,15 @@
     }
 
     @Override
+    public @Nullable Bitmap getMetadataImage(int id) {
+        try {
+            return mTuner.getImage(id);
+        } catch (RemoteException e) {
+            throw new RuntimeException("service died", e);
+        }
+    }
+
+    @Override
     public boolean startBackgroundScan() {
         try {
             return mTuner.startBackgroundScan();
@@ -190,9 +223,10 @@
     }
 
     @Override
-    public @NonNull List<RadioManager.ProgramInfo> getProgramList(@Nullable String filter) {
+    public @NonNull List<RadioManager.ProgramInfo>
+            getProgramList(@Nullable Map<String, String> vendorFilter) {
         try {
-            return mTuner.getProgramList(filter);
+            return mTuner.getProgramList(vendorFilter);
         } catch (RemoteException e) {
             throw new RuntimeException("service died", e);
         }
@@ -227,7 +261,11 @@
 
     @Override
     public boolean hasControl() {
-        // TODO(b/36863239): forward to mTuner
-        throw new RuntimeException("Not implemented");
+        try {
+            // don't rely on mIsClosed, as tuner might get closed internally
+            return !mTuner.isClosed();
+        } catch (RemoteException e) {
+            return false;
+        }
     }
 }
diff --git a/core/java/android/hardware/radio/TunerCallbackAdapter.java b/core/java/android/hardware/radio/TunerCallbackAdapter.java
index ba85017..ffd5b30f 100644
--- a/core/java/android/hardware/radio/TunerCallbackAdapter.java
+++ b/core/java/android/hardware/radio/TunerCallbackAdapter.java
@@ -20,11 +20,14 @@
 import android.annotation.Nullable;
 import android.os.Handler;
 import android.os.Looper;
+import android.util.Log;
 
 /**
  * Implements the ITunerCallback interface by forwarding calls to RadioTuner.Callback.
  */
 class TunerCallbackAdapter extends ITunerCallback.Stub {
+    private static final String TAG = "BroadcastRadio.TunerCallbackAdapter";
+
     @NonNull private final RadioTuner.Callback mCallback;
     @NonNull private final Handler mHandler;
 
@@ -48,7 +51,47 @@
     }
 
     @Override
-    public void onProgramInfoChanged(RadioManager.ProgramInfo info) {
-        mHandler.post(() -> mCallback.onProgramInfoChanged(info));
+    public void onCurrentProgramInfoChanged(RadioManager.ProgramInfo info) {
+        if (info == null) {
+            Log.e(TAG, "ProgramInfo must not be null");
+            return;
+        }
+
+        mHandler.post(() -> {
+            mCallback.onProgramInfoChanged(info);
+
+            RadioMetadata metadata = info.getMetadata();
+            if (metadata != null) mCallback.onMetadataChanged(metadata);
+        });
+    }
+
+    @Override
+    public void onTrafficAnnouncement(boolean active) {
+        mHandler.post(() -> mCallback.onTrafficAnnouncement(active));
+    }
+
+    @Override
+    public void onEmergencyAnnouncement(boolean active) {
+        mHandler.post(() -> mCallback.onEmergencyAnnouncement(active));
+    }
+
+    @Override
+    public void onAntennaState(boolean connected) {
+        mHandler.post(() -> mCallback.onAntennaState(connected));
+    }
+
+    @Override
+    public void onBackgroundScanAvailabilityChange(boolean isAvailable) {
+        mHandler.post(() -> mCallback.onBackgroundScanAvailabilityChange(isAvailable));
+    }
+
+    @Override
+    public void onBackgroundScanComplete() {
+        mHandler.post(() -> mCallback.onBackgroundScanComplete());
+    }
+
+    @Override
+    public void onProgramListChanged() {
+        mHandler.post(() -> mCallback.onProgramListChanged());
     }
 }
diff --git a/core/java/android/hardware/usb/UsbDeviceConnection.java b/core/java/android/hardware/usb/UsbDeviceConnection.java
index 9b5d0d3..5b15c0d 100644
--- a/core/java/android/hardware/usb/UsbDeviceConnection.java
+++ b/core/java/android/hardware/usb/UsbDeviceConnection.java
@@ -18,6 +18,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.content.Context;
 import android.os.Build;
@@ -257,6 +258,7 @@
      * @hide
      */
     @SystemApi
+    @SuppressLint("Doclava125")
     public boolean resetDevice() {
         return native_reset_device();
     }
diff --git a/core/java/android/hardware/usb/UsbManager.java b/core/java/android/hardware/usb/UsbManager.java
index d73d3d8..1fa606c 100644
--- a/core/java/android/hardware/usb/UsbManager.java
+++ b/core/java/android/hardware/usb/UsbManager.java
@@ -99,7 +99,7 @@
             "android.hardware.usb.action.USB_PORT_CHANGED";
 
    /**
-     * Broadcast Action:  A broadcast for USB device attached event.
+     * Activity intent sent when user attaches a USB device.
      *
      * This intent is sent when a USB device is attached to the USB bus when in host mode.
      * <ul>
@@ -125,9 +125,8 @@
             "android.hardware.usb.action.USB_DEVICE_DETACHED";
 
    /**
-     * Broadcast Action:  A broadcast for USB accessory attached event.
+     * Activity intent sent when user attaches a USB accessory.
      *
-     * This intent is sent when a USB accessory is attached.
      * <ul>
      * <li> {@link #EXTRA_ACCESSORY} containing the {@link android.hardware.usb.UsbAccessory}
      * for the attached accessory
diff --git a/core/java/android/inputmethodservice/KeyboardView.java b/core/java/android/inputmethodservice/KeyboardView.java
index 13b9206..2306e5f 100644
--- a/core/java/android/inputmethodservice/KeyboardView.java
+++ b/core/java/android/inputmethodservice/KeyboardView.java
@@ -61,6 +61,7 @@
  * @attr ref android.R.styleable#KeyboardView_keyBackground
  * @attr ref android.R.styleable#KeyboardView_keyPreviewLayout
  * @attr ref android.R.styleable#KeyboardView_keyPreviewOffset
+ * @attr ref android.R.styleable#KeyboardView_keyPreviewHeight
  * @attr ref android.R.styleable#KeyboardView_labelTextSize
  * @attr ref android.R.styleable#KeyboardView_keyTextSize
  * @attr ref android.R.styleable#KeyboardView_keyTextColor
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index f478071..467eb9b 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -582,6 +582,8 @@
     /** {@hide} */
     public static final int MAX_NETWORK_TYPE = TYPE_VPN;
 
+    private static final int MIN_NETWORK_TYPE = TYPE_MOBILE;
+
     /**
      * If you want to set the default network preference,you can directly
      * change the networkAttributes array in framework's config.xml.
@@ -599,7 +601,7 @@
     /**
      * @hide
      */
-    public final static int REQUEST_ID_UNSET = 0;
+    public static final int REQUEST_ID_UNSET = 0;
 
     /**
      * Static unique request used as a tombstone for NetworkCallbacks that have been unregistered.
@@ -607,7 +609,7 @@
      * registered and those that were already unregistered.
      * @hide
      */
-    private final static NetworkRequest ALREADY_UNREGISTERED =
+    private static final NetworkRequest ALREADY_UNREGISTERED =
             new NetworkRequest.Builder().clearCapabilities().build();
 
     /**
@@ -640,7 +642,7 @@
      */
     @Deprecated
     public static boolean isNetworkTypeValid(int networkType) {
-        return networkType >= 0 && networkType <= MAX_NETWORK_TYPE;
+        return MIN_NETWORK_TYPE <= networkType && networkType <= MAX_NETWORK_TYPE;
     }
 
     /**
@@ -653,6 +655,8 @@
      */
     public static String getNetworkTypeName(int type) {
         switch (type) {
+          case TYPE_NONE:
+                return "NONE";
             case TYPE_MOBILE:
                 return "MOBILE";
             case TYPE_WIFI:
@@ -831,6 +835,29 @@
     }
 
     /**
+     * Checks if a VPN app supports always-on mode.
+     *
+     * In order to support the always-on feature, an app has to
+     * <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.
+     * </ul>
+     *
+     * @param userId The identifier of the user for whom the VPN app is installed.
+     * @param vpnPackage The canonical package name of the VPN app.
+     * @return {@code true} if and only if the VPN app exists and supports always-on mode.
+     * @hide
+     */
+    public boolean isAlwaysOnVpnPackageSupportedForUser(int userId, @Nullable String vpnPackage) {
+        try {
+            return mService.isAlwaysOnVpnPackageSupported(userId, vpnPackage);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * Configures an always-on VPN connection through a specific application.
      * This connection is automatically granted and persisted after a reboot.
      *
@@ -1098,6 +1125,7 @@
      * @hide
      */
     @SystemApi
+    @RequiresPermission(android.Manifest.permission.LOCAL_MAC_ADDRESS)
     public String getCaptivePortalServerUrl() {
         try {
             return mService.getCaptivePortalServerUrl();
@@ -1715,14 +1743,8 @@
         // ignored
     }
 
-    /**
-     * Return quota status for the current active network, or {@code null} if no
-     * network is active. Quota status can change rapidly, so these values
-     * shouldn't be cached.
-     *
-     * @hide
-     */
-    @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE)
+    /** {@hide} */
+    @Deprecated
     public NetworkQuotaInfo getActiveNetworkQuotaInfo() {
         try {
             return mService.getActiveNetworkQuotaInfo();
@@ -2056,15 +2078,30 @@
      * {@code ro.tether.denied} system property, Settings.TETHER_SUPPORTED or
      * due to device configuration.
      *
+     * <p>If this app does not have permission to use this API, it will always
+     * return false rather than throw an exception.</p>
+     *
+     * <p>If the device has a hotspot provisioning app, the caller is required to hold the
+     * {@link android.Manifest.permission.TETHER_PRIVILEGED} permission.</p>
+     *
+     * <p>Otherwise, this method requires the caller to hold the ability to modify system
+     * settings as determined by {@link android.provider.Settings.System#canWrite}.</p>
+     *
      * @return a boolean - {@code true} indicating Tethering is supported.
      *
      * {@hide}
      */
     @SystemApi
-    @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE)
+    @RequiresPermission(anyOf = {android.Manifest.permission.TETHER_PRIVILEGED,
+            android.Manifest.permission.WRITE_SETTINGS})
     public boolean isTetheringSupported() {
+        String pkgName = mContext.getOpPackageName();
         try {
-            return mService.isTetheringSupported();
+            return mService.isTetheringSupported(pkgName);
+        } catch (SecurityException e) {
+            // This API is not available to this caller, but for backward-compatibility
+            // this will just return false instead of throwing.
+            return false;
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -2094,6 +2131,7 @@
      * @hide
      */
     @SystemApi
+    @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED)
     public void startTethering(int type, boolean showProvisioningUi,
             final OnStartTetheringCallback callback) {
         startTethering(type, showProvisioningUi, callback, null);
@@ -2467,6 +2505,28 @@
     }
 
     /**
+     * Returns if the active data network for the given UID is metered. A network
+     * is classified as metered when the user is sensitive to heavy data usage on
+     * that connection due to monetary costs, data limitations or
+     * battery/performance issues. You should check this before doing large
+     * data transfers, and warn the user or delay the operation until another
+     * network is available.
+     *
+     * @return {@code true} if large transfers should be avoided, otherwise
+     *        {@code false}.
+     *
+     * @hide
+     */
+    @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL)
+    public boolean isActiveNetworkMeteredForUid(int uid) {
+        try {
+            return mService.isActiveNetworkMeteredForUid(uid);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * If the LockdownVpn mechanism is enabled, updates the vpn
      * with a reload of its profile.
      *
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index 27729dc..f11372c2 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -66,6 +66,7 @@
 
     NetworkQuotaInfo getActiveNetworkQuotaInfo();
     boolean isActiveNetworkMetered();
+    boolean isActiveNetworkMeteredForUid(int uid);
 
     boolean requestRouteToHostAddress(int networkType, in byte[] hostAddress);
 
@@ -75,7 +76,7 @@
 
     int getLastTetherError(String iface);
 
-    boolean isTetheringSupported();
+    boolean isTetheringSupported(String callerPkg);
 
     void startTethering(int type, in ResultReceiver receiver, boolean showProvisioningUi,
             String callerPkg);
@@ -123,6 +124,7 @@
     VpnInfo[] getAllVpnInfo();
 
     boolean updateLockdownVpn();
+    boolean isAlwaysOnVpnPackageSupported(int userId, String packageName);
     boolean setAlwaysOnVpnPackage(int userId, String packageName, boolean lockdown);
     String getAlwaysOnVpnPackage(int userId);
 
diff --git a/core/java/android/net/INetworkPolicyManager.aidl b/core/java/android/net/INetworkPolicyManager.aidl
index 63bbd96..f75789f 100644
--- a/core/java/android/net/INetworkPolicyManager.aidl
+++ b/core/java/android/net/INetworkPolicyManager.aidl
@@ -21,6 +21,7 @@
 import android.net.NetworkQuotaInfo;
 import android.net.NetworkState;
 import android.net.NetworkTemplate;
+import android.telephony.SubscriptionPlan;
 
 /**
  * Interface that creates and modifies network policy rules.
@@ -63,9 +64,14 @@
     int getRestrictBackgroundByCaller();
 
     void setDeviceIdleMode(boolean enabled);
+    void setWifiMeteredOverride(String networkId, int meteredOverride);
 
     NetworkQuotaInfo getNetworkQuotaInfo(in NetworkState state);
-    boolean isNetworkMetered(in NetworkState state);
+
+    SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage);
+    void setSubscriptionPlans(int subId, in SubscriptionPlan[] plans, String callingPackage);
 
     void factoryReset(String subscriber);
+
+    boolean isUidNetworkingBlocked(int uid, boolean meteredNetwork);
 }
diff --git a/core/java/android/net/INetworkStatsService.aidl b/core/java/android/net/INetworkStatsService.aidl
index e693009..9180112 100644
--- a/core/java/android/net/INetworkStatsService.aidl
+++ b/core/java/android/net/INetworkStatsService.aidl
@@ -36,7 +36,7 @@
      *  PACKAGE_USAGE_STATS permission is always checked. If PACKAGE_USAGE_STATS is not granted
      *  READ_NETWORK_USAGE_STATS is checked for.
      */
-    INetworkStatsSession openSessionForUsageStats(String callingPackage);
+    INetworkStatsSession openSessionForUsageStats(int flags, String callingPackage);
 
     /** Return network layer usage total for traffic that matches template. */
     long getNetworkTotalBytes(in NetworkTemplate template, long start, long end);
diff --git a/core/java/android/net/ITetheringStatsProvider.aidl b/core/java/android/net/ITetheringStatsProvider.aidl
index 769086d..da0bf4c 100644
--- a/core/java/android/net/ITetheringStatsProvider.aidl
+++ b/core/java/android/net/ITetheringStatsProvider.aidl
@@ -19,7 +19,7 @@
 import android.net.NetworkStats;
 
 /**
- * Interface that allows NetworkManagementService to query for tethering statistics.
+ * Interface for NetworkManagementService to query tethering statistics and set data limits.
  *
  * TODO: this does not really need to be an interface since Tethering runs in the same process
  * as NetworkManagementService. Consider refactoring Tethering to use direct access to
@@ -29,5 +29,17 @@
  * @hide
  */
 interface ITetheringStatsProvider {
-    NetworkStats getTetherStats();
+    // Returns cumulative statistics for all tethering sessions since boot, on all upstreams.
+    // @code {how} is one of the NetworkStats.STATS_PER_* constants. If {@code how} is
+    // {@code STATS_PER_IFACE}, the provider should not include any traffic that is already
+    // counted by kernel interface counters.
+    NetworkStats getTetherStats(int how);
+
+    // Sets the interface quota for the specified upstream interface. This is defined as the number
+    // of bytes, starting from zero and counting from now, after which data should stop being
+    // forwarded to/from the specified upstream. A value of QUOTA_UNLIMITED means there is no limit.
+    void setInterfaceQuota(String iface, long quotaBytes);
+
+    // Indicates that no data usage limit is set.
+    const int QUOTA_UNLIMITED = -1;
 }
diff --git a/core/java/android/net/IpPrefix.java b/core/java/android/net/IpPrefix.java
index 6b4f2d5..6e2654e 100644
--- a/core/java/android/net/IpPrefix.java
+++ b/core/java/android/net/IpPrefix.java
@@ -20,6 +20,8 @@
 import android.os.Parcelable;
 import android.util.Pair;
 
+import java.net.Inet4Address;
+import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.Arrays;
@@ -185,6 +187,20 @@
     }
 
     /**
+     * @hide
+     */
+    public boolean isIPv6() {
+        return getAddress() instanceof Inet6Address;
+    }
+
+    /**
+     * @hide
+     */
+    public boolean isIPv4() {
+        return getAddress() instanceof Inet4Address;
+    }
+
+    /**
      * Returns a string representation of this {@code IpPrefix}.
      *
      * @return a string such as {@code "192.0.2.0/24"} or {@code "2001:db8:1:2::/64"}.
diff --git a/core/java/android/net/LinkAddress.java b/core/java/android/net/LinkAddress.java
index 6e74f14..bcfe938 100644
--- a/core/java/android/net/LinkAddress.java
+++ b/core/java/android/net/LinkAddress.java
@@ -16,6 +16,15 @@
 
 package android.net;
 
+import static android.system.OsConstants.IFA_F_DADFAILED;
+import static android.system.OsConstants.IFA_F_DEPRECATED;
+import static android.system.OsConstants.IFA_F_OPTIMISTIC;
+import static android.system.OsConstants.IFA_F_TENTATIVE;
+import static android.system.OsConstants.RT_SCOPE_HOST;
+import static android.system.OsConstants.RT_SCOPE_LINK;
+import static android.system.OsConstants.RT_SCOPE_SITE;
+import static android.system.OsConstants.RT_SCOPE_UNIVERSE;
+
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.Pair;
@@ -26,15 +35,6 @@
 import java.net.InterfaceAddress;
 import java.net.UnknownHostException;
 
-import static android.system.OsConstants.IFA_F_DADFAILED;
-import static android.system.OsConstants.IFA_F_DEPRECATED;
-import static android.system.OsConstants.IFA_F_OPTIMISTIC;
-import static android.system.OsConstants.IFA_F_TENTATIVE;
-import static android.system.OsConstants.RT_SCOPE_HOST;
-import static android.system.OsConstants.RT_SCOPE_LINK;
-import static android.system.OsConstants.RT_SCOPE_SITE;
-import static android.system.OsConstants.RT_SCOPE_UNIVERSE;
-
 /**
  * Identifies an IP address on a network link.
  *
@@ -76,7 +76,7 @@
      * RFC 6724 section 3.2.
      * @hide
      */
-    static int scopeForUnicastAddress(InetAddress addr) {
+    private static int scopeForUnicastAddress(InetAddress addr) {
         if (addr.isAnyLocalAddress()) {
             return RT_SCOPE_HOST;
         }
@@ -101,7 +101,7 @@
      * Per RFC 4193 section 8, fc00::/7 identifies these addresses.
      */
     private boolean isIPv6ULA() {
-        if (address != null && address instanceof Inet6Address) {
+        if (isIPv6()) {
             byte[] bytes = address.getAddress();
             return ((bytes[0] & (byte)0xfe) == (byte)0xfc);
         }
@@ -109,13 +109,29 @@
     }
 
     /**
+     * @return true if the address is IPv6.
+     * @hide
+     */
+    public boolean isIPv6() {
+        return address instanceof Inet6Address;
+    }
+
+    /**
+     * @return true if the address is IPv4 or is a mapped IPv4 address.
+     * @hide
+     */
+    public boolean isIPv4() {
+        return address instanceof Inet4Address;
+    }
+
+    /**
      * Utility function for the constructors.
      */
     private void init(InetAddress address, int prefixLength, int flags, int scope) {
         if (address == null ||
                 address.isMulticastAddress() ||
                 prefixLength < 0 ||
-                ((address instanceof Inet4Address) && prefixLength > 32) ||
+                (address instanceof Inet4Address && prefixLength > 32) ||
                 (prefixLength > 128)) {
             throw new IllegalArgumentException("Bad LinkAddress params " + address +
                     "/" + prefixLength);
@@ -184,6 +200,7 @@
      */
     public LinkAddress(String address, int flags, int scope) {
         // This may throw an IllegalArgumentException; catching it is the caller's responsibility.
+        // TODO: consider rejecting mapped IPv4 addresses such as "::ffff:192.0.2.5/24".
         Pair<InetAddress, Integer> ipAndMask = NetworkUtils.parseIpAndMask(address);
         init(ipAndMask.first, ipAndMask.second, flags, scope);
     }
diff --git a/core/java/android/net/LinkProperties.java b/core/java/android/net/LinkProperties.java
index 1bb0fbb..f527f77 100644
--- a/core/java/android/net/LinkProperties.java
+++ b/core/java/android/net/LinkProperties.java
@@ -18,14 +18,13 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.net.ProxyInfo;
-import android.os.Parcelable;
 import android.os.Parcel;
+import android.os.Parcelable;
 import android.text.TextUtils;
 
-import java.net.InetAddress;
 import java.net.Inet4Address;
 import java.net.Inet6Address;
+import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -504,11 +503,22 @@
     }
 
     /**
+     * Make sure this LinkProperties instance contains routes that cover the local subnet
+     * of its link addresses. Add any route that is missing.
+     * @hide
+     */
+    public void ensureDirectlyConnectedRoutes() {
+        for (LinkAddress addr: mLinkAddresses) {
+            addRoute(new RouteInfo(addr, null, mIfaceName));
+        }
+    }
+
+    /**
      * Returns all the routes on this link and all the links stacked above it.
      * @hide
      */
     public List<RouteInfo> getAllRoutes() {
-        List<RouteInfo> routes = new ArrayList();
+        List<RouteInfo> routes = new ArrayList<>();
         routes.addAll(mRoutes);
         for (LinkProperties stacked: mStackedLinks.values()) {
             routes.addAll(stacked.getAllRoutes());
diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java
index 0a5b9c1..f038c24 100644
--- a/core/java/android/net/NetworkCapabilities.java
+++ b/core/java/android/net/NetworkCapabilities.java
@@ -21,6 +21,7 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.BitUtils;
+import com.android.internal.util.Preconditions;
 
 import java.util.Objects;
 import java.util.StringJoiner;
@@ -416,7 +417,6 @@
 
     /**
      * Indicates this network uses a LoWPAN transport.
-     * @hide
      */
     public static final int TRANSPORT_LOWPAN = 6;
 
@@ -425,6 +425,11 @@
     /** @hide */
     public static final int MAX_TRANSPORT = TRANSPORT_LOWPAN;
 
+    /** @hide */
+    public static boolean isValidTransport(int transportType) {
+        return (MIN_TRANSPORT <= transportType) && (transportType <= MAX_TRANSPORT);
+    }
+
     private static final String[] TRANSPORT_NAMES = {
         "CELLULAR",
         "WIFI",
@@ -449,9 +454,7 @@
      * @hide
      */
     public NetworkCapabilities addTransportType(int transportType) {
-        if (transportType < MIN_TRANSPORT || transportType > MAX_TRANSPORT) {
-            throw new IllegalArgumentException("TransportType out of range");
-        }
+        checkValidTransportType(transportType);
         mTransportTypes |= 1 << transportType;
         setNetworkSpecifier(mNetworkSpecifier); // used for exception checking
         return this;
@@ -465,9 +468,7 @@
      * @hide
      */
     public NetworkCapabilities removeTransportType(int transportType) {
-        if (transportType < MIN_TRANSPORT || transportType > MAX_TRANSPORT) {
-            throw new IllegalArgumentException("TransportType out of range");
-        }
+        checkValidTransportType(transportType);
         mTransportTypes &= ~(1 << transportType);
         setNetworkSpecifier(mNetworkSpecifier); // used for exception checking
         return this;
@@ -491,10 +492,7 @@
      * @return {@code true} if set on this instance.
      */
     public boolean hasTransport(int transportType) {
-        if (transportType < MIN_TRANSPORT || transportType > MAX_TRANSPORT) {
-            return false;
-        }
-        return ((mTransportTypes & (1 << transportType)) != 0);
+        return isValidTransport(transportType) && ((mTransportTypes & (1 << transportType)) != 0);
     }
 
     private void combineTransportTypes(NetworkCapabilities nc) {
@@ -772,10 +770,11 @@
 
         StringJoiner joiner = new StringJoiner(", ");
 
-        // TODO: consider only enforcing that capabilities are not removed, allowing addition.
         // Ignore NOT_METERED being added or removed as it is effectively dynamic. http://b/63326103
         // TODO: properly support NOT_METERED as a mutable and requestable capability.
-        final long mask = ~MUTABLE_CAPABILITIES & ~(1 << NET_CAPABILITY_NOT_METERED);
+        // Ignore DUN being added or removed. http://b/65257223.
+        final long mask = ~MUTABLE_CAPABILITIES
+                & ~(1 << NET_CAPABILITY_NOT_METERED) & ~(1 << NET_CAPABILITY_DUN);
         long oldImmutableCapabilities = this.mNetworkCapabilities & mask;
         long newImmutableCapabilities = that.mNetworkCapabilities & mask;
         if (oldImmutableCapabilities != newImmutableCapabilities) {
@@ -954,9 +953,14 @@
      * @hide
      */
     public static String transportNameOf(int transport) {
-        if (transport < 0 || TRANSPORT_NAMES.length <= transport) {
+        if (!isValidTransport(transport)) {
             return "UNKNOWN";
         }
         return TRANSPORT_NAMES[transport];
     }
+
+    private static void checkValidTransportType(int transport) {
+        Preconditions.checkArgument(
+                isValidTransport(transport), "Invalid TransportType " + transport);
+    }
 }
diff --git a/core/java/android/net/NetworkFactory.java b/core/java/android/net/NetworkFactory.java
index cab88b9..e2f8d1a 100644
--- a/core/java/android/net/NetworkFactory.java
+++ b/core/java/android/net/NetworkFactory.java
@@ -254,6 +254,16 @@
         }
     }
 
+    /**
+     * Post a command, on this NetworkFactory Handler, to re-evaluate all
+     * oustanding requests. Can be called from a factory implementation.
+     */
+    protected void reevaluateAllRequests() {
+        post(() -> {
+            evalRequests();
+        });
+    }
+
     // override to do simple mode (request independent)
     protected void startNetwork() { }
     protected void stopNetwork() { }
diff --git a/core/java/android/net/NetworkIdentity.java b/core/java/android/net/NetworkIdentity.java
index 0775bda..acd7b560 100644
--- a/core/java/android/net/NetworkIdentity.java
+++ b/core/java/android/net/NetworkIdentity.java
@@ -157,7 +157,7 @@
      * Scrub given IMSI on production builds.
      */
     public static String scrubSubscriberId(String subscriberId) {
-        if ("eng".equals(Build.TYPE)) {
+        if (Build.IS_ENG) {
             return subscriberId;
         } else if (subscriberId != null) {
             // TODO: parse this as MCC+MNC instead of hard-coding
diff --git a/core/java/android/net/NetworkInfo.java b/core/java/android/net/NetworkInfo.java
index 42f5feb..818aa21 100644
--- a/core/java/android/net/NetworkInfo.java
+++ b/core/java/android/net/NetworkInfo.java
@@ -16,8 +16,8 @@
 
 package android.net;
 
-import android.os.Parcelable;
 import android.os.Parcel;
+import android.os.Parcelable;
 
 import com.android.internal.annotations.VisibleForTesting;
 
@@ -121,13 +121,13 @@
     private boolean mIsFailover;
     private boolean mIsAvailable;
     private boolean mIsRoaming;
-    private boolean mIsMetered;
 
     /**
      * @hide
      */
     public NetworkInfo(int type, int subtype, String typeName, String subtypeName) {
-        if (!ConnectivityManager.isNetworkTypeValid(type)) {
+        if (!ConnectivityManager.isNetworkTypeValid(type)
+                && type != ConnectivityManager.TYPE_NONE) {
             throw new IllegalArgumentException("Invalid network type: " + type);
         }
         mNetworkType = type;
@@ -153,7 +153,6 @@
                 mIsFailover = source.mIsFailover;
                 mIsAvailable = source.mIsAvailable;
                 mIsRoaming = source.mIsRoaming;
-                mIsMetered = source.mIsMetered;
             }
         }
     }
@@ -326,31 +325,6 @@
     }
 
     /**
-     * Returns if this network is metered. A network is classified as metered
-     * when the user is sensitive to heavy data usage on that connection due to
-     * monetary costs, data limitations or battery/performance issues. You
-     * should check this before doing large data transfers, and warn the user or
-     * delay the operation until another network is available.
-     *
-     * @return {@code true} if large transfers should be avoided, otherwise
-     *         {@code false}.
-     * @hide
-     */
-    public boolean isMetered() {
-        synchronized (this) {
-            return mIsMetered;
-        }
-    }
-
-    /** {@hide} */
-    @VisibleForTesting
-    public void setMetered(boolean isMetered) {
-        synchronized (this) {
-            mIsMetered = isMetered;
-        }
-    }
-
-    /**
      * Reports the current coarse-grained state of the network.
      * @return the coarse-grained state
      */
@@ -433,7 +407,6 @@
             append(", failover: ").append(mIsFailover).
             append(", available: ").append(mIsAvailable).
             append(", roaming: ").append(mIsRoaming).
-            append(", metered: ").append(mIsMetered).
             append("]");
             return builder.toString();
         }
@@ -456,7 +429,6 @@
             dest.writeInt(mIsFailover ? 1 : 0);
             dest.writeInt(mIsAvailable ? 1 : 0);
             dest.writeInt(mIsRoaming ? 1 : 0);
-            dest.writeInt(mIsMetered ? 1 : 0);
             dest.writeString(mReason);
             dest.writeString(mExtraInfo);
         }
@@ -475,7 +447,6 @@
             netInfo.mIsFailover = in.readInt() != 0;
             netInfo.mIsAvailable = in.readInt() != 0;
             netInfo.mIsRoaming = in.readInt() != 0;
-            netInfo.mIsMetered = in.readInt() != 0;
             netInfo.mReason = in.readString();
             netInfo.mExtraInfo = in.readString();
             return netInfo;
diff --git a/core/java/android/net/NetworkPolicy.java b/core/java/android/net/NetworkPolicy.java
index 9870e7b..5df742c 100644
--- a/core/java/android/net/NetworkPolicy.java
+++ b/core/java/android/net/NetworkPolicy.java
@@ -16,16 +16,21 @@
 
 package android.net;
 
-import static com.android.internal.util.Preconditions.checkNotNull;
-
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.BackupUtils;
+import android.util.Pair;
+import android.util.RecurrenceRule;
+
+import com.android.internal.util.Preconditions;
 
 import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.util.Iterator;
 import java.util.Objects;
 
 /**
@@ -35,10 +40,8 @@
  * @hide
  */
 public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {
-    /**
-     * Current Version of the Backup Serializer.
-     */
-    private static final int BACKUP_VERSION = 1;
+    private static final int VERSION_INIT = 1;
+    private static final int VERSION_RULE = 2;
 
     public static final int CYCLE_NONE = -1;
     public static final long WARNING_DISABLED = -1;
@@ -46,17 +49,24 @@
     public static final long SNOOZE_NEVER = -1;
 
     public NetworkTemplate template;
-    public int cycleDay;
-    public String cycleTimezone;
-    public long warningBytes;
-    public long limitBytes;
-    public long lastWarningSnooze;
-    public long lastLimitSnooze;
-    public boolean metered;
-    public boolean inferred;
+    public RecurrenceRule cycleRule;
+    public long warningBytes = WARNING_DISABLED;
+    public long limitBytes = LIMIT_DISABLED;
+    public long lastWarningSnooze = SNOOZE_NEVER;
+    public long lastLimitSnooze = SNOOZE_NEVER;
+    @Deprecated public boolean metered = true;
+    public boolean inferred = false;
 
     private static final long DEFAULT_MTU = 1500;
 
+    public static RecurrenceRule buildRule(int cycleDay, ZoneId cycleTimezone) {
+        if (cycleDay != NetworkPolicy.CYCLE_NONE) {
+            return RecurrenceRule.buildRecurringMonthly(cycleDay, cycleTimezone);
+        } else {
+            return RecurrenceRule.buildNever();
+        }
+    }
+
     @Deprecated
     public NetworkPolicy(NetworkTemplate template, int cycleDay, String cycleTimezone,
             long warningBytes, long limitBytes, boolean metered) {
@@ -64,12 +74,19 @@
                 SNOOZE_NEVER, metered, false);
     }
 
+    @Deprecated
     public NetworkPolicy(NetworkTemplate template, int cycleDay, String cycleTimezone,
             long warningBytes, long limitBytes, long lastWarningSnooze, long lastLimitSnooze,
             boolean metered, boolean inferred) {
-        this.template = checkNotNull(template, "missing NetworkTemplate");
-        this.cycleDay = cycleDay;
-        this.cycleTimezone = checkNotNull(cycleTimezone, "missing cycleTimezone");
+        this(template, buildRule(cycleDay, ZoneId.of(cycleTimezone)), warningBytes,
+                limitBytes, lastWarningSnooze, lastLimitSnooze, metered, inferred);
+    }
+
+    public NetworkPolicy(NetworkTemplate template, RecurrenceRule cycleRule, long warningBytes,
+            long limitBytes, long lastWarningSnooze, long lastLimitSnooze, boolean metered,
+            boolean inferred) {
+        this.template = Preconditions.checkNotNull(template, "missing NetworkTemplate");
+        this.cycleRule = Preconditions.checkNotNull(cycleRule, "missing RecurrenceRule");
         this.warningBytes = warningBytes;
         this.limitBytes = limitBytes;
         this.lastWarningSnooze = lastWarningSnooze;
@@ -78,23 +95,21 @@
         this.inferred = inferred;
     }
 
-    public NetworkPolicy(Parcel in) {
-        template = in.readParcelable(null);
-        cycleDay = in.readInt();
-        cycleTimezone = in.readString();
-        warningBytes = in.readLong();
-        limitBytes = in.readLong();
-        lastWarningSnooze = in.readLong();
-        lastLimitSnooze = in.readLong();
-        metered = in.readInt() != 0;
-        inferred = in.readInt() != 0;
+    private NetworkPolicy(Parcel source) {
+        template = source.readParcelable(null);
+        cycleRule = source.readParcelable(null);
+        warningBytes = source.readLong();
+        limitBytes = source.readLong();
+        lastWarningSnooze = source.readLong();
+        lastLimitSnooze = source.readLong();
+        metered = source.readInt() != 0;
+        inferred = source.readInt() != 0;
     }
 
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeParcelable(template, flags);
-        dest.writeInt(cycleDay);
-        dest.writeString(cycleTimezone);
+        dest.writeParcelable(cycleRule, flags);
         dest.writeLong(warningBytes);
         dest.writeLong(limitBytes);
         dest.writeLong(lastWarningSnooze);
@@ -108,6 +123,10 @@
         return 0;
     }
 
+    public Iterator<Pair<ZonedDateTime, ZonedDateTime>> cycleIterator() {
+        return cycleRule.cycleIterator();
+    }
+
     /**
      * Test if given measurement is over {@link #warningBytes}.
      */
@@ -138,7 +157,7 @@
      * Test if this policy has a cycle defined, after which usage should reset.
      */
     public boolean hasCycle() {
-        return cycleDay != CYCLE_NONE;
+        return cycleRule.cycleIterator().hasNext();
     }
 
     @Override
@@ -156,7 +175,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(template, cycleDay, cycleTimezone, warningBytes, limitBytes,
+        return Objects.hash(template, cycleRule, warningBytes, limitBytes,
                 lastWarningSnooze, lastLimitSnooze, metered, inferred);
     }
 
@@ -164,30 +183,29 @@
     public boolean equals(Object obj) {
         if (obj instanceof NetworkPolicy) {
             final NetworkPolicy other = (NetworkPolicy) obj;
-            return cycleDay == other.cycleDay && warningBytes == other.warningBytes
+            return warningBytes == other.warningBytes
                     && limitBytes == other.limitBytes
                     && lastWarningSnooze == other.lastWarningSnooze
                     && lastLimitSnooze == other.lastLimitSnooze && metered == other.metered
                     && inferred == other.inferred
-                    && Objects.equals(cycleTimezone, other.cycleTimezone)
-                    && Objects.equals(template, other.template);
+                    && Objects.equals(template, other.template)
+                    && Objects.equals(cycleRule, other.cycleRule);
         }
         return false;
     }
 
     @Override
     public String toString() {
-        final StringBuilder builder = new StringBuilder("NetworkPolicy");
-        builder.append("[").append(template).append("]:");
-        builder.append(" cycleDay=").append(cycleDay);
-        builder.append(", cycleTimezone=").append(cycleTimezone);
-        builder.append(", warningBytes=").append(warningBytes);
-        builder.append(", limitBytes=").append(limitBytes);
-        builder.append(", lastWarningSnooze=").append(lastWarningSnooze);
-        builder.append(", lastLimitSnooze=").append(lastLimitSnooze);
-        builder.append(", metered=").append(metered);
-        builder.append(", inferred=").append(inferred);
-        return builder.toString();
+        return new StringBuilder("NetworkPolicy{")
+                .append("template=").append(template)
+                .append(" cycleRule=").append(cycleRule)
+                .append(" warningBytes=").append(warningBytes)
+                .append(" limitBytes=").append(limitBytes)
+                .append(" lastWarningSnooze=").append(lastWarningSnooze)
+                .append(" lastLimitSnooze=").append(lastLimitSnooze)
+                .append(" metered=").append(metered)
+                .append(" inferred=").append(inferred)
+                .append("}").toString();
     }
 
     public static final Creator<NetworkPolicy> CREATOR = new Creator<NetworkPolicy>() {
@@ -206,10 +224,9 @@
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         DataOutputStream out = new DataOutputStream(baos);
 
-        out.writeInt(BACKUP_VERSION);
+        out.writeInt(VERSION_RULE);
         out.write(template.getBytesForBackup());
-        out.writeInt(cycleDay);
-        BackupUtils.writeString(out, cycleTimezone);
+        cycleRule.writeToStream(out);
         out.writeLong(warningBytes);
         out.writeLong(limitBytes);
         out.writeLong(lastWarningSnooze);
@@ -221,21 +238,36 @@
 
     public static NetworkPolicy getNetworkPolicyFromBackup(DataInputStream in) throws IOException,
             BackupUtils.BadVersionException {
-        int version = in.readInt();
-        if (version < 1 || version > BACKUP_VERSION) {
-            throw new BackupUtils.BadVersionException("Unknown Backup Serialization Version");
+        final int version = in.readInt();
+        switch (version) {
+            case VERSION_INIT: {
+                NetworkTemplate template = NetworkTemplate.getNetworkTemplateFromBackup(in);
+                int cycleDay = in.readInt();
+                String cycleTimeZone = BackupUtils.readString(in);
+                long warningBytes = in.readLong();
+                long limitBytes = in.readLong();
+                long lastWarningSnooze = in.readLong();
+                long lastLimitSnooze = in.readLong();
+                boolean metered = in.readInt() == 1;
+                boolean inferred = in.readInt() == 1;
+                return new NetworkPolicy(template, cycleDay, cycleTimeZone, warningBytes,
+                        limitBytes, lastWarningSnooze, lastLimitSnooze, metered, inferred);
+            }
+            case VERSION_RULE: {
+                NetworkTemplate template = NetworkTemplate.getNetworkTemplateFromBackup(in);
+                RecurrenceRule cycleRule = new RecurrenceRule(in);
+                long warningBytes = in.readLong();
+                long limitBytes = in.readLong();
+                long lastWarningSnooze = in.readLong();
+                long lastLimitSnooze = in.readLong();
+                boolean metered = in.readInt() == 1;
+                boolean inferred = in.readInt() == 1;
+                return new NetworkPolicy(template, cycleRule, warningBytes,
+                        limitBytes, lastWarningSnooze, lastLimitSnooze, metered, inferred);
+            }
+            default: {
+                throw new BackupUtils.BadVersionException("Unknown backup version: " + version);
+            }
         }
-
-        NetworkTemplate template = NetworkTemplate.getNetworkTemplateFromBackup(in);
-        int cycleDay = in.readInt();
-        String cycleTimeZone = BackupUtils.readString(in);
-        long warningBytes = in.readLong();
-        long limitBytes = in.readLong();
-        long lastWarningSnooze = in.readLong();
-        long lastLimitSnooze = in.readLong();
-        boolean metered = in.readInt() == 1;
-        boolean inferred = in.readInt() == 1;
-        return new NetworkPolicy(template, cycleDay, cycleTimeZone, warningBytes, limitBytes,
-                lastWarningSnooze, lastLimitSnooze, metered, inferred);
     }
 }
diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java
index 4d94a55..81c49a3 100644
--- a/core/java/android/net/NetworkPolicyManager.java
+++ b/core/java/android/net/NetworkPolicyManager.java
@@ -17,7 +17,6 @@
 package android.net;
 
 import static android.content.pm.PackageManager.GET_SIGNATURES;
-import static android.net.NetworkPolicy.CYCLE_NONE;
 
 import android.annotation.SystemService;
 import android.app.ActivityManager;
@@ -26,15 +25,19 @@
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.Signature;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiInfo;
 import android.os.RemoteException;
 import android.os.UserHandle;
+import android.telephony.SubscriptionPlan;
 import android.util.DebugUtils;
+import android.util.Pair;
 
 import com.google.android.collect.Sets;
 
-import java.util.Calendar;
+import java.time.ZonedDateTime;
 import java.util.HashSet;
-import java.util.TimeZone;
+import java.util.Iterator;
 
 /**
  * Manager for creating and modifying network policy rules.
@@ -249,73 +252,9 @@
         }
     }
 
-    /**
-     * Compute the last cycle boundary for the given {@link NetworkPolicy}. For
-     * example, if cycle day is 20th, and today is June 15th, it will return May
-     * 20th. When cycle day doesn't exist in current month, it snaps to the 1st
-     * of following month.
-     *
-     * @hide
-     */
-    public static long computeLastCycleBoundary(long currentTime, NetworkPolicy policy) {
-        if (policy.cycleDay == CYCLE_NONE) {
-            throw new IllegalArgumentException("Unable to compute boundary without cycleDay");
-        }
-
-        final Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(policy.cycleTimezone));
-        cal.setTimeInMillis(currentTime);
-        snapToCycleDay(cal, policy.cycleDay);
-
-        if (cal.getTimeInMillis() >= currentTime) {
-            // Cycle boundary is beyond now, use last cycle boundary
-            cal.set(Calendar.DAY_OF_MONTH, 1);
-            cal.add(Calendar.MONTH, -1);
-            snapToCycleDay(cal, policy.cycleDay);
-        }
-
-        return cal.getTimeInMillis();
-    }
-
     /** {@hide} */
-    public static long computeNextCycleBoundary(long currentTime, NetworkPolicy policy) {
-        if (policy.cycleDay == CYCLE_NONE) {
-            throw new IllegalArgumentException("Unable to compute boundary without cycleDay");
-        }
-
-        final Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(policy.cycleTimezone));
-        cal.setTimeInMillis(currentTime);
-        snapToCycleDay(cal, policy.cycleDay);
-
-        if (cal.getTimeInMillis() <= currentTime) {
-            // Cycle boundary is before now, use next cycle boundary
-            cal.set(Calendar.DAY_OF_MONTH, 1);
-            cal.add(Calendar.MONTH, 1);
-            snapToCycleDay(cal, policy.cycleDay);
-        }
-
-        return cal.getTimeInMillis();
-    }
-
-    /**
-     * Snap to the cycle day for the current month given; when cycle day doesn't
-     * exist, it snaps to last second of current month.
-     *
-     * @hide
-     */
-    public static void snapToCycleDay(Calendar cal, int cycleDay) {
-        cal.set(Calendar.HOUR_OF_DAY, 0);
-        cal.set(Calendar.MINUTE, 0);
-        cal.set(Calendar.SECOND, 0);
-        if (cycleDay > cal.getActualMaximum(Calendar.DAY_OF_MONTH)) {
-            cal.add(Calendar.MONTH, 1);
-            cal.set(Calendar.DAY_OF_MONTH, 1);
-            cal.set(Calendar.HOUR_OF_DAY, 0);
-            cal.set(Calendar.MINUTE, 0);
-            cal.set(Calendar.SECOND, 0);
-            cal.add(Calendar.SECOND, -1);
-        } else {
-            cal.set(Calendar.DAY_OF_MONTH, cycleDay);
-        }
+    public static Iterator<Pair<ZonedDateTime, ZonedDateTime>> cycleIterator(NetworkPolicy policy) {
+        return policy.cycleIterator();
     }
 
     /**
@@ -400,4 +339,13 @@
     public static boolean isProcStateAllowedWhileOnRestrictBackground(int procState) {
         return procState <= ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE;
     }
+
+    public static String resolveNetworkId(WifiConfiguration config) {
+        return WifiInfo.removeDoubleQuotes(config.isPasspoint()
+                ? config.providerFriendlyName : config.SSID);
+    }
+
+    public static String resolveNetworkId(String ssid) {
+        return WifiInfo.removeDoubleQuotes(ssid);
+    }
 }
diff --git a/core/java/android/net/NetworkQuotaInfo.java b/core/java/android/net/NetworkQuotaInfo.java
index 1725ed7..b95f1d9 100644
--- a/core/java/android/net/NetworkQuotaInfo.java
+++ b/core/java/android/net/NetworkQuotaInfo.java
@@ -20,41 +20,32 @@
 import android.os.Parcelable;
 
 /**
- * Information about quota status on a specific network.
- *
+ * @deprecated nobody should be using this, but keep it around returning stub
+ *             values to prevent app crashes.
  * @hide
  */
+@Deprecated
 public class NetworkQuotaInfo implements Parcelable {
-    private final long mEstimatedBytes;
-    private final long mSoftLimitBytes;
-    private final long mHardLimitBytes;
-
     public static final long NO_LIMIT = -1;
 
     /** {@hide} */
-    public NetworkQuotaInfo(long estimatedBytes, long softLimitBytes, long hardLimitBytes) {
-        mEstimatedBytes = estimatedBytes;
-        mSoftLimitBytes = softLimitBytes;
-        mHardLimitBytes = hardLimitBytes;
+    public NetworkQuotaInfo() {
     }
 
     /** {@hide} */
     public NetworkQuotaInfo(Parcel in) {
-        mEstimatedBytes = in.readLong();
-        mSoftLimitBytes = in.readLong();
-        mHardLimitBytes = in.readLong();
     }
 
     public long getEstimatedBytes() {
-        return mEstimatedBytes;
+        return 0;
     }
 
     public long getSoftLimitBytes() {
-        return mSoftLimitBytes;
+        return NO_LIMIT;
     }
 
     public long getHardLimitBytes() {
-        return mHardLimitBytes;
+        return NO_LIMIT;
     }
 
     @Override
@@ -64,9 +55,6 @@
 
     @Override
     public void writeToParcel(Parcel out, int flags) {
-        out.writeLong(mEstimatedBytes);
-        out.writeLong(mSoftLimitBytes);
-        out.writeLong(mHardLimitBytes);
     }
 
     public static final Creator<NetworkQuotaInfo> CREATOR = new Creator<NetworkQuotaInfo>() {
diff --git a/core/java/android/net/NetworkRecommendationProvider.java b/core/java/android/net/NetworkRecommendationProvider.java
index fdb4ba0..a70c97b 100644
--- a/core/java/android/net/NetworkRecommendationProvider.java
+++ b/core/java/android/net/NetworkRecommendationProvider.java
@@ -35,6 +35,7 @@
  * A network recommendation provider is any application which:
  * <ul>
  * <li>Is granted the {@link permission#SCORE_NETWORKS} permission.
+ * <li>Is granted the {@link permission#ACCESS_COARSE_LOCATION} permission.
  * <li>Includes a Service for the {@link NetworkScoreManager#ACTION_RECOMMEND_NETWORKS} intent
  *     which is protected by the {@link permission#BIND_NETWORK_RECOMMENDATION_SERVICE} permission.
  * </ul>
diff --git a/core/java/android/net/NetworkScoreManager.java b/core/java/android/net/NetworkScoreManager.java
index 7e0c9ce..54e1899 100644
--- a/core/java/android/net/NetworkScoreManager.java
+++ b/core/java/android/net/NetworkScoreManager.java
@@ -38,7 +38,8 @@
  *
  * <p>A network scorer is any application which:
  * <ul>
- * <li>Declares the {@link permission#SCORE_NETWORKS} permission.
+ * <li>Is granted the {@link permission#SCORE_NETWORKS} permission.
+ * <li>Is granted the {@link permission#ACCESS_COARSE_LOCATION} permission.
  * <li>Include a Service for the {@link #ACTION_RECOMMEND_NETWORKS} action
  *     protected by the {@link permission#BIND_NETWORK_RECOMMENDATION_SERVICE}
  *     permission.
@@ -226,6 +227,8 @@
      * @return the full package name of the current active scorer, or null if there is no active
      *         scorer.
      */
+    @RequiresPermission(anyOf = {android.Manifest.permission.SCORE_NETWORKS,
+                                 android.Manifest.permission.REQUEST_NETWORK_SCORES})
     public String getActiveScorerPackage() {
         try {
             return mService.getActiveScorerPackage();
diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java
index be9e809..171adc0 100644
--- a/core/java/android/net/NetworkStats.java
+++ b/core/java/android/net/NetworkStats.java
@@ -82,6 +82,11 @@
     /** {@link #roaming} value where roaming data is accounted. */
     public static final int ROAMING_YES = 1;
 
+    /** Denotes a request for stats at the interface level. */
+    public static final int STATS_PER_IFACE = 0;
+    /** Denotes a request for stats at the interface and UID level. */
+    public static final int STATS_PER_UID = 1;
+
     // TODO: move fields to "mVariable" notation
 
     /**
diff --git a/core/java/android/net/NetworkStatsHistory.java b/core/java/android/net/NetworkStatsHistory.java
index 5f521de..433f941 100644
--- a/core/java/android/net/NetworkStatsHistory.java
+++ b/core/java/android/net/NetworkStatsHistory.java
@@ -27,6 +27,7 @@
 import static android.net.NetworkStatsHistory.ParcelUtils.readLongArray;
 import static android.net.NetworkStatsHistory.ParcelUtils.writeLongArray;
 import static android.text.format.DateUtils.SECOND_IN_MILLIS;
+
 import static com.android.internal.util.ArrayUtils.total;
 
 import android.os.Parcel;
@@ -282,6 +283,24 @@
         return entry;
     }
 
+    public void setValues(int i, Entry entry) {
+        // Unwind old values
+        if (rxBytes != null) totalBytes -= rxBytes[i];
+        if (txBytes != null) totalBytes -= txBytes[i];
+
+        bucketStart[i] = entry.bucketStart;
+        setLong(activeTime, i, entry.activeTime);
+        setLong(rxBytes, i, entry.rxBytes);
+        setLong(rxPackets, i, entry.rxPackets);
+        setLong(txBytes, i, entry.txBytes);
+        setLong(txPackets, i, entry.txPackets);
+        setLong(operations, i, entry.operations);
+
+        // Apply new values
+        if (rxBytes != null) totalBytes += rxBytes[i];
+        if (txBytes != null) totalBytes += txBytes[i];
+    }
+
     /**
      * Record that data traffic occurred in the given time range. Will
      * distribute across internal buckets, creating new buckets as needed.
diff --git a/core/java/android/net/NetworkTemplate.java b/core/java/android/net/NetworkTemplate.java
index 0d2fcd0..b307c5d 100644
--- a/core/java/android/net/NetworkTemplate.java
+++ b/core/java/android/net/NetworkTemplate.java
@@ -326,6 +326,10 @@
         }
     }
 
+    public boolean matchesSubscriberId(String subscriberId) {
+        return ArrayUtils.contains(mMatchSubscriberIds, subscriberId);
+    }
+
     /**
      * Check if mobile network with matching IMSI.
      */
diff --git a/core/java/android/net/OWNERS b/core/java/android/net/OWNERS
new file mode 100644
index 0000000..0f1e259
--- /dev/null
+++ b/core/java/android/net/OWNERS
@@ -0,0 +1,6 @@
+ek@google.com
+hugobenichi@google.com
+jsharkey@google.com
+lorenzo@google.com
+satk@google.com
+silberst@google.com
diff --git a/core/java/android/net/SSLCertificateSocketFactory.java b/core/java/android/net/SSLCertificateSocketFactory.java
index 6542200..4817813 100644
--- a/core/java/android/net/SSLCertificateSocketFactory.java
+++ b/core/java/android/net/SSLCertificateSocketFactory.java
@@ -20,6 +20,7 @@
 import android.util.Log;
 
 import com.android.internal.os.RoSystemProperties;
+import com.android.org.conscrypt.Conscrypt;
 import com.android.org.conscrypt.OpenSSLContextImpl;
 import com.android.org.conscrypt.OpenSSLSocketImpl;
 import com.android.org.conscrypt.SSLClientSessionCache;
@@ -217,7 +218,7 @@
     private SSLSocketFactory makeSocketFactory(
             KeyManager[] keyManagers, TrustManager[] trustManagers) {
         try {
-            OpenSSLContextImpl sslContext = OpenSSLContextImpl.getPreferred();
+            OpenSSLContextImpl sslContext =  (OpenSSLContextImpl) Conscrypt.newPreferredSSLContextSpi();
             sslContext.engineInit(keyManagers, trustManagers, null);
             sslContext.engineGetClientSessionContext().setPersistentCache(mSessionCache);
             return sslContext.engineGetSocketFactory();
diff --git a/core/java/android/net/TrafficStats.java b/core/java/android/net/TrafficStats.java
index f934616..c339856 100644
--- a/core/java/android/net/TrafficStats.java
+++ b/core/java/android/net/TrafficStats.java
@@ -109,25 +109,26 @@
      */
     public static final int TAG_SYSTEM_RESTORE = 0xFFFFFF04;
 
-    /** @hide */
-    public static final int TAG_SYSTEM_DHCP = 0xFFFFFF05;
-    /** @hide */
-    public static final int TAG_SYSTEM_NTP = 0xFFFFFF06;
-    /** @hide */
-    public static final int TAG_SYSTEM_PROBE = 0xFFFFFF07;
-    /** @hide */
-    public static final int TAG_SYSTEM_NEIGHBOR = 0xFFFFFF08;
-    /** @hide */
-    public static final int TAG_SYSTEM_GPS = 0xFFFFFF09;
-    /** @hide */
-    public static final int TAG_SYSTEM_PAC = 0xFFFFFF0A;
-
     /**
-     * Sockets that are strictly local on device; never hits network.
+     * Default tag value for code (typically APKs) downloaded by an app store on
+     * behalf of the app, such as updates.
      *
      * @hide
      */
-    public static final int TAG_SYSTEM_LOCAL = 0xFFFFFFAA;
+    public static final int TAG_SYSTEM_APP = 0xFFFFFF05;
+
+    /** @hide */
+    public static final int TAG_SYSTEM_DHCP = 0xFFFFFF40;
+    /** @hide */
+    public static final int TAG_SYSTEM_NTP = 0xFFFFFF41;
+    /** @hide */
+    public static final int TAG_SYSTEM_PROBE = 0xFFFFFF42;
+    /** @hide */
+    public static final int TAG_SYSTEM_NEIGHBOR = 0xFFFFFF43;
+    /** @hide */
+    public static final int TAG_SYSTEM_GPS = 0xFFFFFF44;
+    /** @hide */
+    public static final int TAG_SYSTEM_PAC = 0xFFFFFF45;
 
     private static INetworkStatsService sStatsService;
 
@@ -210,6 +211,19 @@
     }
 
     /**
+     * Set active tag to use when accounting {@link Socket} traffic originating
+     * from the current thread. The tag used internally is well-defined to
+     * distinguish all code (typically APKs) downloaded by an app store on
+     * behalf of the app, such as updates.
+     *
+     * @hide
+     */
+    @SystemApi
+    public static void setThreadStatsTagApp() {
+        setThreadStatsTag(TAG_SYSTEM_APP);
+    }
+
+    /**
      * Get the active tag used when accounting {@link Socket} traffic originating
      * from the current thread. Only one active tag per thread is supported.
      * {@link #tagSocket(Socket)}.
diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java
index 4b79cbb..185b181 100644
--- a/core/java/android/net/VpnService.java
+++ b/core/java/android/net/VpnService.java
@@ -28,8 +28,6 @@
 import android.content.Intent;
 import android.content.pm.IPackageManager;
 import android.content.pm.PackageManager;
-import android.net.Network;
-import android.net.NetworkUtils;
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.Parcel;
@@ -131,6 +129,36 @@
     public static final String SERVICE_INTERFACE = VpnConfig.SERVICE_INTERFACE;
 
     /**
+     * Key for boolean meta-data field indicating whether this VpnService supports always-on mode.
+     *
+     * <p>For a VPN app targeting {@link android.os.Build.VERSION_CODES#N API 24} or above, Android
+     * provides users with the ability to set it as always-on, so that VPN connection is
+     * persisted after device reboot and app upgrade. Always-on VPN can also be enabled by device
+     * owner and profile owner apps through
+     * {@link android.app.admin.DevicePolicyManager#setAlwaysOnVpnPackage}.
+     *
+     * <p>VPN apps not supporting this feature should opt out by adding this meta-data field to the
+     * {@code VpnService} component of {@code AndroidManifest.xml}. In case there is more than one
+     * {@code VpnService} component defined in {@code AndroidManifest.xml}, opting out any one of
+     * them will opt out the entire app. For example,
+     * <pre> {@code
+     * <service android:name=".ExampleVpnService"
+     *         android:permission="android.permission.BIND_VPN_SERVICE">
+     *     <intent-filter>
+     *         <action android:name="android.net.VpnService"/>
+     *     </intent-filter>
+     *     <meta-data android:name="android.net.VpnService.SUPPORTS_ALWAYS_ON"
+     *             android:value=false/>
+     * </service>
+     * } </pre>
+     *
+     * <p>This meta-data field defaults to {@code true} if absent. It will only have effect on
+     * {@link android.os.Build.VERSION_CODES#O_MR1} or higher.
+     */
+    public static final String SERVICE_META_DATA_SUPPORTS_ALWAYS_ON =
+            "android.net.VpnService.SUPPORTS_ALWAYS_ON";
+
+    /**
      * Use IConnectivityManager since those methods are hidden and not
      * available in ConnectivityManager.
      */
diff --git a/core/java/android/net/metrics/IpManagerEvent.java b/core/java/android/net/metrics/IpManagerEvent.java
index f5aea73..a94b928 100644
--- a/core/java/android/net/metrics/IpManagerEvent.java
+++ b/core/java/android/net/metrics/IpManagerEvent.java
@@ -39,10 +39,12 @@
     public static final int ERROR_STARTING_IPV4                   = 4;
     public static final int ERROR_STARTING_IPV6                   = 5;
     public static final int ERROR_STARTING_IPREACHABILITYMONITOR  = 6;
+    public static final int ERROR_INVALID_PROVISIONING            = 7;
 
     @IntDef(value = {
             PROVISIONING_OK, PROVISIONING_FAIL, COMPLETE_LIFECYCLE,
             ERROR_STARTING_IPV4, ERROR_STARTING_IPV6, ERROR_STARTING_IPREACHABILITYMONITOR,
+            ERROR_INVALID_PROVISIONING,
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface EventType {}
diff --git a/core/java/android/net/metrics/WakeupEvent.java b/core/java/android/net/metrics/WakeupEvent.java
new file mode 100644
index 0000000..cbf3fc8
--- /dev/null
+++ b/core/java/android/net/metrics/WakeupEvent.java
@@ -0,0 +1,34 @@
+/*
+ * 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.metrics;
+
+/**
+ * An event logged when NFLOG notifies userspace of a wakeup packet for
+ * watched interfaces.
+ * {@hide}
+ */
+public class WakeupEvent {
+    public String iface;
+    public long timestampMs;
+    public int uid;
+
+    @Override
+    public String toString() {
+        return String.format("WakeupEvent(%tT.%tL, %s, uid: %d)",
+                timestampMs, timestampMs, iface, uid);
+    }
+}
diff --git a/core/java/android/net/metrics/WakeupStats.java b/core/java/android/net/metrics/WakeupStats.java
new file mode 100644
index 0000000..97e83f9
--- /dev/null
+++ b/core/java/android/net/metrics/WakeupStats.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.metrics;
+
+import android.os.Process;
+import android.os.SystemClock;
+
+/**
+ * An event logged per interface and that aggregates WakeupEvents for that interface.
+ * {@hide}
+ */
+public class WakeupStats {
+
+    private static final int NO_UID = -1;
+
+    public final long creationTimeMs = SystemClock.elapsedRealtime();
+    public final String iface;
+
+    public long totalWakeups = 0;
+    public long rootWakeups = 0;
+    public long systemWakeups = 0;
+    public long nonApplicationWakeups = 0;
+    public long applicationWakeups = 0;
+    public long noUidWakeups = 0;
+    public long durationSec = 0;
+
+    public WakeupStats(String iface) {
+        this.iface = iface;
+    }
+
+    /** Update durationSec with current time. */
+    public void updateDuration() {
+        durationSec = (SystemClock.elapsedRealtime() - creationTimeMs) / 1000;
+    }
+
+    /** Update wakeup counters for the given WakeupEvent. */
+    public void countEvent(WakeupEvent ev) {
+        totalWakeups++;
+        switch (ev.uid) {
+            case Process.ROOT_UID:
+                rootWakeups++;
+                break;
+            case Process.SYSTEM_UID:
+                systemWakeups++;
+                break;
+            case NO_UID:
+                noUidWakeups++;
+                break;
+            default:
+                if (ev.uid >= Process.FIRST_APPLICATION_UID) {
+                    applicationWakeups++;
+                } else {
+                    nonApplicationWakeups++;
+                }
+                break;
+        }
+    }
+
+    @Override
+    public String toString() {
+        updateDuration();
+        return new StringBuilder()
+                .append("WakeupStats(").append(iface)
+                .append(", total: ").append(totalWakeups)
+                .append(", root: ").append(rootWakeups)
+                .append(", system: ").append(systemWakeups)
+                .append(", apps: ").append(applicationWakeups)
+                .append(", non-apps: ").append(nonApplicationWakeups)
+                .append(", no uid: ").append(noUidWakeups)
+                .append(", ").append(durationSec).append("s)")
+                .toString();
+    }
+}
diff --git a/core/java/android/net/nsd/NsdManager.java b/core/java/android/net/nsd/NsdManager.java
index ace3748..1e41eea 100644
--- a/core/java/android/net/nsd/NsdManager.java
+++ b/core/java/android/net/nsd/NsdManager.java
@@ -16,6 +16,10 @@
 
 package android.net.nsd;
 
+import static com.android.internal.util.Preconditions.checkArgument;
+import static com.android.internal.util.Preconditions.checkNotNull;
+import static com.android.internal.util.Preconditions.checkStringNotEmpty;
+
 import android.annotation.SdkConstant;
 import android.annotation.SystemService;
 import android.annotation.SdkConstant.SdkConstantType;
@@ -240,12 +244,12 @@
         return name;
     }
 
+    private static int FIRST_LISTENER_KEY = 1;
+
     private final INsdManager mService;
     private final Context mContext;
 
-    private static final int INVALID_LISTENER_KEY = 0;
-    private static final int BUSY_LISTENER_KEY = -1;
-    private int mListenerKey = 1;
+    private int mListenerKey = FIRST_LISTENER_KEY;
     private final SparseArray mListenerMap = new SparseArray();
     private final SparseArray<NsdServiceInfo> mServiceMap = new SparseArray<>();
     private final Object mMapLock = new Object();
@@ -311,7 +315,6 @@
         public void onServiceFound(NsdServiceInfo serviceInfo);
 
         public void onServiceLost(NsdServiceInfo serviceInfo);
-
     }
 
     /** Interface for callback invocation for service registration */
@@ -342,8 +345,9 @@
 
         @Override
         public void handleMessage(Message message) {
-            if (DBG) Log.d(TAG, "received " + nameOf(message.what));
-            switch (message.what) {
+            final int what = message.what;
+            final int key = message.arg2;
+            switch (what) {
                 case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED:
                     mAsyncChannel.sendMessage(AsyncChannel.CMD_CHANNEL_FULL_CONNECTION);
                     return;
@@ -356,19 +360,26 @@
                 default:
                     break;
             }
-            Object listener = getListener(message.arg2);
+            final Object listener;
+            final NsdServiceInfo ns;
+            synchronized (mMapLock) {
+                listener = mListenerMap.get(key);
+                ns = mServiceMap.get(key);
+            }
             if (listener == null) {
                 Log.d(TAG, "Stale key " + message.arg2);
                 return;
             }
-            NsdServiceInfo ns = getNsdService(message.arg2);
-            switch (message.what) {
+            if (DBG) {
+                Log.d(TAG, "received " + nameOf(what) + " for key " + key + ", service " + ns);
+            }
+            switch (what) {
                 case DISCOVER_SERVICES_STARTED:
                     String s = getNsdServiceInfoType((NsdServiceInfo) message.obj);
                     ((DiscoveryListener) listener).onDiscoveryStarted(s);
                     break;
                 case DISCOVER_SERVICES_FAILED:
-                    removeListener(message.arg2);
+                    removeListener(key);
                     ((DiscoveryListener) listener).onStartDiscoveryFailed(getNsdServiceInfoType(ns),
                             message.arg1);
                     break;
@@ -381,16 +392,16 @@
                 case STOP_DISCOVERY_FAILED:
                     // TODO: failure to stop discovery should be internal and retried internally, as
                     // the effect for the client is indistinguishable from STOP_DISCOVERY_SUCCEEDED
-                    removeListener(message.arg2);
+                    removeListener(key);
                     ((DiscoveryListener) listener).onStopDiscoveryFailed(getNsdServiceInfoType(ns),
                             message.arg1);
                     break;
                 case STOP_DISCOVERY_SUCCEEDED:
-                    removeListener(message.arg2);
+                    removeListener(key);
                     ((DiscoveryListener) listener).onDiscoveryStopped(getNsdServiceInfoType(ns));
                     break;
                 case REGISTER_SERVICE_FAILED:
-                    removeListener(message.arg2);
+                    removeListener(key);
                     ((RegistrationListener) listener).onRegistrationFailed(ns, message.arg1);
                     break;
                 case REGISTER_SERVICE_SUCCEEDED:
@@ -398,7 +409,7 @@
                             (NsdServiceInfo) message.obj);
                     break;
                 case UNREGISTER_SERVICE_FAILED:
-                    removeListener(message.arg2);
+                    removeListener(key);
                     ((RegistrationListener) listener).onUnregistrationFailed(ns, message.arg1);
                     break;
                 case UNREGISTER_SERVICE_SUCCEEDED:
@@ -408,11 +419,11 @@
                     ((RegistrationListener) listener).onServiceUnregistered(ns);
                     break;
                 case RESOLVE_SERVICE_FAILED:
-                    removeListener(message.arg2);
+                    removeListener(key);
                     ((ResolveListener) listener).onResolveFailed(ns, message.arg1);
                     break;
                 case RESOLVE_SERVICE_SUCCEEDED:
-                    removeListener(message.arg2);
+                    removeListener(key);
                     ((ResolveListener) listener).onServiceResolved((NsdServiceInfo) message.obj);
                     break;
                 default:
@@ -422,40 +433,27 @@
         }
     }
 
-    // if the listener is already in the map, reject it.  Otherwise, add it and
-    // return its key.
+    private int nextListenerKey() {
+        // Ensure mListenerKey >= FIRST_LISTENER_KEY;
+        mListenerKey = Math.max(FIRST_LISTENER_KEY, mListenerKey + 1);
+        return mListenerKey;
+    }
+
+    // Assert that the listener is not in the map, then add it and returns its key
     private int putListener(Object listener, NsdServiceInfo s) {
-        if (listener == null) return INVALID_LISTENER_KEY;
-        int key;
+        checkListener(listener);
+        final int key;
         synchronized (mMapLock) {
             int valueIndex = mListenerMap.indexOfValue(listener);
-            if (valueIndex != -1) {
-                return BUSY_LISTENER_KEY;
-            }
-            do {
-                key = mListenerKey++;
-            } while (key == INVALID_LISTENER_KEY);
+            checkArgument(valueIndex == -1, "listener already in use");
+            key = nextListenerKey();
             mListenerMap.put(key, listener);
             mServiceMap.put(key, s);
         }
         return key;
     }
 
-    private Object getListener(int key) {
-        if (key == INVALID_LISTENER_KEY) return null;
-        synchronized (mMapLock) {
-            return mListenerMap.get(key);
-        }
-    }
-
-    private NsdServiceInfo getNsdService(int key) {
-        synchronized (mMapLock) {
-            return mServiceMap.get(key);
-        }
-    }
-
     private void removeListener(int key) {
-        if (key == INVALID_LISTENER_KEY) return;
         synchronized (mMapLock) {
             mListenerMap.remove(key);
             mServiceMap.remove(key);
@@ -463,16 +461,15 @@
     }
 
     private int getListenerKey(Object listener) {
+        checkListener(listener);
         synchronized (mMapLock) {
             int valueIndex = mListenerMap.indexOfValue(listener);
-            if (valueIndex != -1) {
-                return mListenerMap.keyAt(valueIndex);
-            }
+            checkArgument(valueIndex != -1, "listener not registered");
+            return mListenerMap.keyAt(valueIndex);
         }
-        return INVALID_LISTENER_KEY;
     }
 
-    private String getNsdServiceInfoType(NsdServiceInfo s) {
+    private static String getNsdServiceInfoType(NsdServiceInfo s) {
         if (s == null) return "?";
         return s.getServiceType();
     }
@@ -482,7 +479,9 @@
      */
     private void init() {
         final Messenger messenger = getMessenger();
-        if (messenger == null) throw new RuntimeException("Failed to initialize");
+        if (messenger == null) {
+            fatal("Failed to obtain service Messenger");
+        }
         HandlerThread t = new HandlerThread("NsdManager");
         t.start();
         mHandler = new ServiceHandler(t.getLooper());
@@ -490,10 +489,15 @@
         try {
             mConnected.await();
         } catch (InterruptedException e) {
-            Log.e(TAG, "interrupted wait at init");
+            fatal("Interrupted wait at init");
         }
     }
 
+    private static void fatal(String msg) {
+        Log.e(TAG, msg);
+        throw new RuntimeException(msg);
+    }
+
     /**
      * Register a service to be discovered by other services.
      *
@@ -513,23 +517,10 @@
      */
     public void registerService(NsdServiceInfo serviceInfo, int protocolType,
             RegistrationListener listener) {
-        if (TextUtils.isEmpty(serviceInfo.getServiceName()) ||
-                TextUtils.isEmpty(serviceInfo.getServiceType())) {
-            throw new IllegalArgumentException("Service name or type cannot be empty");
-        }
-        if (serviceInfo.getPort() <= 0) {
-            throw new IllegalArgumentException("Invalid port number");
-        }
-        if (listener == null) {
-            throw new IllegalArgumentException("listener cannot be null");
-        }
-        if (protocolType != PROTOCOL_DNS_SD) {
-            throw new IllegalArgumentException("Unsupported protocol");
-        }
+        checkArgument(serviceInfo.getPort() > 0, "Invalid port number");
+        checkServiceInfo(serviceInfo);
+        checkProtocol(protocolType);
         int key = putListener(listener, serviceInfo);
-        if (key == BUSY_LISTENER_KEY) {
-            throw new IllegalArgumentException("listener already in use");
-        }
         mAsyncChannel.sendMessage(REGISTER_SERVICE, 0, key, serviceInfo);
     }
 
@@ -548,12 +539,6 @@
      */
     public void unregisterService(RegistrationListener listener) {
         int id = getListenerKey(listener);
-        if (id == INVALID_LISTENER_KEY) {
-            throw new IllegalArgumentException("listener not registered");
-        }
-        if (listener == null) {
-            throw new IllegalArgumentException("listener cannot be null");
-        }
         mAsyncChannel.sendMessage(UNREGISTER_SERVICE, 0, id);
     }
 
@@ -586,25 +571,13 @@
      * Cannot be null. Cannot be in use for an active service discovery.
      */
     public void discoverServices(String serviceType, int protocolType, DiscoveryListener listener) {
-        if (listener == null) {
-            throw new IllegalArgumentException("listener cannot be null");
-        }
-        if (TextUtils.isEmpty(serviceType)) {
-            throw new IllegalArgumentException("Service type cannot be empty");
-        }
-
-        if (protocolType != PROTOCOL_DNS_SD) {
-            throw new IllegalArgumentException("Unsupported protocol");
-        }
+        checkStringNotEmpty(serviceType, "Service type cannot be empty");
+        checkProtocol(protocolType);
 
         NsdServiceInfo s = new NsdServiceInfo();
         s.setServiceType(serviceType);
 
         int key = putListener(listener, s);
-        if (key == BUSY_LISTENER_KEY) {
-            throw new IllegalArgumentException("listener already in use");
-        }
-
         mAsyncChannel.sendMessage(DISCOVER_SERVICES, 0, key, s);
     }
 
@@ -626,12 +599,6 @@
      */
     public void stopServiceDiscovery(DiscoveryListener listener) {
         int id = getListenerKey(listener);
-        if (id == INVALID_LISTENER_KEY) {
-            throw new IllegalArgumentException("service discovery not active on listener");
-        }
-        if (listener == null) {
-            throw new IllegalArgumentException("listener cannot be null");
-        }
         mAsyncChannel.sendMessage(STOP_DISCOVERY, 0, id);
     }
 
@@ -645,19 +612,8 @@
      * Cannot be in use for an active service resolution.
      */
     public void resolveService(NsdServiceInfo serviceInfo, ResolveListener listener) {
-        if (TextUtils.isEmpty(serviceInfo.getServiceName()) ||
-                TextUtils.isEmpty(serviceInfo.getServiceType())) {
-            throw new IllegalArgumentException("Service name or type cannot be empty");
-        }
-        if (listener == null) {
-            throw new IllegalArgumentException("listener cannot be null");
-        }
-
+        checkServiceInfo(serviceInfo);
         int key = putListener(listener, serviceInfo);
-
-        if (key == BUSY_LISTENER_KEY) {
-            throw new IllegalArgumentException("listener already in use");
-        }
         mAsyncChannel.sendMessage(RESOLVE_SERVICE, 0, key, serviceInfo);
     }
 
@@ -671,10 +627,10 @@
     }
 
     /**
-     * Get a reference to NetworkService handler. This is used to establish
+     * Get a reference to NsdService handler. This is used to establish
      * an AsyncChannel communication with the service
      *
-     * @return Messenger pointing to the NetworkService handler
+     * @return Messenger pointing to the NsdService handler
      */
     private Messenger getMessenger() {
         try {
@@ -683,4 +639,18 @@
             throw e.rethrowFromSystemServer();
         }
     }
+
+    private static void checkListener(Object listener) {
+        checkNotNull(listener, "listener cannot be null");
+    }
+
+    private static void checkProtocol(int protocolType) {
+        checkArgument(protocolType == PROTOCOL_DNS_SD, "Unsupported protocol");
+    }
+
+    private static void checkServiceInfo(NsdServiceInfo serviceInfo) {
+        checkNotNull(serviceInfo, "NsdServiceInfo cannot be null");
+        checkStringNotEmpty(serviceInfo.getServiceName(),"Service name cannot be empty");
+        checkStringNotEmpty(serviceInfo.getServiceType(), "Service type cannot be empty");
+    }
 }
diff --git a/core/java/android/os/BaseBundle.java b/core/java/android/os/BaseBundle.java
index 8d85880..5312dca 100644
--- a/core/java/android/os/BaseBundle.java
+++ b/core/java/android/os/BaseBundle.java
@@ -16,11 +16,16 @@
 
 package android.os;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.util.ArrayMap;
 import android.util.Log;
 import android.util.MathUtils;
 import android.util.Slog;
+import android.util.SparseArray;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.IndentingPrintWriter;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -91,7 +96,8 @@
     private ClassLoader mClassLoader;
 
     /** {@hide} */
-    int mFlags;
+    @VisibleForTesting
+    public int mFlags;
 
     /**
      * Constructs a new, empty Bundle that uses a specific ClassLoader for
@@ -215,59 +221,72 @@
      */
     /* package */ void unparcel() {
         synchronized (this) {
-            final Parcel parcelledData = mParcelledData;
-            if (parcelledData == null) {
-                if (DEBUG) Log.d(TAG, "unparcel "
-                        + Integer.toHexString(System.identityHashCode(this))
-                        + ": no parcelled data");
-                return;
-            }
-
-            if (LOG_DEFUSABLE && sShouldDefuse && (mFlags & FLAG_DEFUSABLE) == 0) {
-                Slog.wtf(TAG, "Attempting to unparcel a Bundle while in transit; this may "
-                        + "clobber all data inside!", new Throwable());
-            }
-
-            if (isEmptyParcel()) {
-                if (DEBUG) Log.d(TAG, "unparcel "
-                        + Integer.toHexString(System.identityHashCode(this)) + ": empty");
-                if (mMap == null) {
-                    mMap = new ArrayMap<>(1);
-                } else {
-                    mMap.erase();
-                }
-                mParcelledData = null;
-                return;
-            }
-
-            int N = parcelledData.readInt();
-            if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
-                    + ": reading " + N + " maps");
-            if (N < 0) {
-                return;
-            }
-            ArrayMap<String, Object> map = mMap;
-            if (map == null) {
-                map = new ArrayMap<>(N);
+            final Parcel source = mParcelledData;
+            if (source != null) {
+                initializeFromParcelLocked(source, /*recycleParcel=*/ true);
             } else {
-                map.erase();
-                map.ensureCapacity(N);
-            }
-            try {
-                parcelledData.readArrayMapInternal(map, N, mClassLoader);
-            } catch (BadParcelableException e) {
-                if (sShouldDefuse) {
-                    Log.w(TAG, "Failed to parse Bundle, but defusing quietly", e);
-                    map.erase();
-                } else {
-                    throw e;
+                if (DEBUG) {
+                    Log.d(TAG, "unparcel "
+                            + Integer.toHexString(System.identityHashCode(this))
+                            + ": no parcelled data");
                 }
-            } finally {
-                mMap = map;
-                parcelledData.recycle();
-                mParcelledData = null;
             }
-            if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
+        }
+    }
+
+    private void initializeFromParcelLocked(@NonNull Parcel parcelledData, boolean recycleParcel) {
+        if (LOG_DEFUSABLE && sShouldDefuse && (mFlags & FLAG_DEFUSABLE) == 0) {
+            Slog.wtf(TAG, "Attempting to unparcel a Bundle while in transit; this may "
+                    + "clobber all data inside!", new Throwable());
+        }
+
+        if (isEmptyParcel(parcelledData)) {
+            if (DEBUG) {
+                Log.d(TAG, "unparcel "
+                        + Integer.toHexString(System.identityHashCode(this)) + ": empty");
+            }
+            if (mMap == null) {
+                mMap = new ArrayMap<>(1);
+            } else {
+                mMap.erase();
+            }
+            mParcelledData = null;
+            return;
+        }
+
+        final int count = parcelledData.readInt();
+        if (DEBUG) {
+            Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
+                    + ": reading " + count + " maps");
+        }
+        if (count < 0) {
+            return;
+        }
+        ArrayMap<String, Object> map = mMap;
+        if (map == null) {
+            map = new ArrayMap<>(count);
+        } else {
+            map.erase();
+            map.ensureCapacity(count);
+        }
+        try {
+            parcelledData.readArrayMapInternal(map, count, mClassLoader);
+        } catch (BadParcelableException e) {
+            if (sShouldDefuse) {
+                Log.w(TAG, "Failed to parse Bundle, but defusing quietly", e);
+                map.erase();
+            } else {
+                throw e;
+            }
+        } finally {
+            mMap = map;
+            if (recycleParcel) {
+                recycleParcel(parcelledData);
+            }
+            mParcelledData = null;
+        }
+        if (DEBUG) {
+            Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
                     + " final map: " + mMap);
         }
     }
@@ -283,7 +302,20 @@
      * @hide
      */
     public boolean isEmptyParcel() {
-        return mParcelledData == NoImagePreloadHolder.EMPTY_PARCEL;
+        return isEmptyParcel(mParcelledData);
+    }
+
+    /**
+     * @hide
+     */
+    private static boolean isEmptyParcel(Parcel p) {
+        return p == NoImagePreloadHolder.EMPTY_PARCEL;
+    }
+
+    private static void recycleParcel(Parcel p) {
+        if (p != null && !isEmptyParcel(p)) {
+            p.recycle();
+        }
     }
 
     /** @hide */
@@ -1473,6 +1505,10 @@
      * @param parcel The parcel to copy this bundle to.
      */
     void writeToParcelInner(Parcel parcel, int flags) {
+        // If the parcel has a read-write helper, we can't just copy the blob, so unparcel it first.
+        if (parcel.hasReadWriteHelper()) {
+            unparcel();
+        }
         // Keep implementation in sync with writeToParcel() in
         // frameworks/native/libs/binder/PersistableBundle.cpp.
         final ArrayMap<String, Object> map;
@@ -1541,6 +1577,15 @@
                     + Integer.toHexString(magic));
         }
 
+        if (parcel.hasReadWriteHelper()) {
+            // If the parcel has a read-write helper, then we can't lazily-unparcel it, so just
+            // unparcel right away.
+            synchronized (this) {
+                initializeFromParcelLocked(parcel, /*recycleParcel=*/ false);
+            }
+            return;
+        }
+
         // Advance within this Parcel
         int offset = parcel.dataPosition();
         parcel.setDataPosition(MathUtils.addOrThrow(offset, length));
@@ -1555,4 +1600,49 @@
 
         mParcelledData = p;
     }
+
+    /** {@hide} */
+    public static void dumpStats(IndentingPrintWriter pw, String key, Object value) {
+        final Parcel tmp = Parcel.obtain();
+        tmp.writeValue(value);
+        final int size = tmp.dataPosition();
+        tmp.recycle();
+
+        // We only really care about logging large values
+        if (size > 1024) {
+            pw.println(key + " [size=" + size + "]");
+            if (value instanceof BaseBundle) {
+                dumpStats(pw, (BaseBundle) value);
+            } else if (value instanceof SparseArray) {
+                dumpStats(pw, (SparseArray) value);
+            }
+        }
+    }
+
+    /** {@hide} */
+    public static void dumpStats(IndentingPrintWriter pw, SparseArray array) {
+        pw.increaseIndent();
+        if (array == null) {
+            pw.println("[null]");
+            return;
+        }
+        for (int i = 0; i < array.size(); i++) {
+            dumpStats(pw, "0x" + Integer.toHexString(array.keyAt(i)), array.valueAt(i));
+        }
+        pw.decreaseIndent();
+    }
+
+    /** {@hide} */
+    public static void dumpStats(IndentingPrintWriter pw, BaseBundle bundle) {
+        pw.increaseIndent();
+        if (bundle == null) {
+            pw.println("[null]");
+            return;
+        }
+        final ArrayMap<String, Object> map = bundle.getMap();
+        for (int i = 0; i < map.size(); i++) {
+            dumpStats(pw, map.keyAt(i), map.valueAt(i));
+        }
+        pw.decreaseIndent();
+    }
 }
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index 4160ed7..5785619 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -16,15 +16,7 @@
 
 package android.os;
 
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Formatter;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
+import android.app.job.JobParameters;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.telephony.SignalStrength;
@@ -42,6 +34,15 @@
 import com.android.internal.os.BatterySipper;
 import com.android.internal.os.BatteryStatsHelper;
 
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Formatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * A class providing access to battery usage statistics, including information on
  * wakelocks, processes, packages, and services.  All times are represented in microseconds
@@ -52,6 +53,8 @@
     private static final String TAG = "BatteryStats";
 
     private static final boolean LOCAL_LOGV = false;
+    /** Fetching RPM stats is too slow to do each time screen changes, so disable it. */
+    protected static final boolean SCREEN_OFF_RPM_STATS_ENABLED = false;
 
     /** @hide */
     public static final String SERVICE_NAME = "batterystats";
@@ -75,17 +78,17 @@
      * A constant indicating a sensor timer.
      */
     public static final int SENSOR = 3;
-    
+
     /**
      * A constant indicating a a wifi running timer
      */
     public static final int WIFI_RUNNING = 4;
-    
+
     /**
      * A constant indicating a full wifi lock timer
      */
     public static final int FULL_WIFI_LOCK = 5;
-    
+
     /**
      * A constant indicating a wifi scan
      */
@@ -167,6 +170,11 @@
     public static final int BLUETOOTH_UNOPTIMIZED_SCAN_ON = 21;
 
     /**
+     * A constant indicating a foreground service timer
+     */
+    public static final int FOREGROUND_SERVICE = 22;
+
+    /**
      * Include all of the data in the stats, including previously saved data.
      */
     public static final int STATS_SINCE_CHARGED = 0;
@@ -200,8 +208,19 @@
      *   - CPU frequency time per uid
      * New in version 22:
      *   - BLE scan result background count, BLE unoptimized scan time
+     *   - Background partial wakelock time & count
+     * New in version 23:
+     *   - Logging smeared power model values
+     * New in version 24:
+     *   - Fixed bugs in background timers and BLE scan time
+     * New in version 25:
+     *   - Package wakeup alarms are now on screen-off timebase
+     * New in version 26:
+     *   - Resource power manager (rpm) states [but screenOffRpm is disabled from working properly]
+     * New in version 27:
+     *   - Always On Display (screen doze mode) time and power
      */
-    static final String CHECKIN_VERSION = "24";
+    static final String CHECKIN_VERSION = "27";
 
     /**
      * Old version, we hit 9 and ran out of room, need to remove.
@@ -220,9 +239,17 @@
     private static final String CPU_DATA = "cpu";
     private static final String GLOBAL_CPU_FREQ_DATA = "gcf";
     private static final String CPU_TIMES_AT_FREQ_DATA = "ctf";
+    // rpm line is:
+    // BATTERY_STATS_CHECKIN_VERSION, uid, which, "rpm", state/voter name, total time, total count,
+    // screen-off time, screen-off count
+    private static final String RESOURCE_POWER_MANAGER_DATA = "rpm";
     private static final String SENSOR_DATA = "sr";
     private static final String VIBRATOR_DATA = "vib";
-    private static final String FOREGROUND_DATA = "fg";
+    private static final String FOREGROUND_ACTIVITY_DATA = "fg";
+    // fgs line is:
+    // BATTERY_STATS_CHECKIN_VERSION, uid, category, "fgs",
+    // foreground service time, count
+    private static final String FOREGROUND_SERVICE_DATA = "fgs";
     private static final String STATE_TIME_DATA = "st";
     // wl line is:
     // BATTERY_STATS_CHECKIN_VERSION, uid, which, "wl", name,
@@ -238,6 +265,7 @@
     private static final String AGGREGATED_WAKELOCK_DATA = "awl";
     private static final String SYNC_DATA = "sy";
     private static final String JOB_DATA = "jb";
+    private static final String JOB_COMPLETION_DATA = "jbc";
     private static final String KERNEL_WAKELOCK_DATA = "kwl";
     private static final String WAKEUP_REASON_DATA = "wr";
     private static final String NETWORK_DATA = "nt";
@@ -498,6 +526,13 @@
         public abstract ArrayMap<String, ? extends Timer> getJobStats();
 
         /**
+         * Returns statistics about how jobs have completed.
+         *
+         * @return A Map of String job names to completion type -> count mapping.
+         */
+        public abstract ArrayMap<String, SparseIntArray> getJobCompletionStats();
+
+        /**
          * The statistics associated with a particular wake lock.
          */
         public static abstract class Wakelock {
@@ -573,6 +608,11 @@
         public abstract Timer getFlashlightTurnedOnTimer();
         public abstract Timer getCameraTurnedOnTimer();
         public abstract Timer getForegroundActivityTimer();
+
+        /**
+         * Returns the timer keeping track of Foreground Service time
+         */
+        public abstract Timer getForegroundServiceTimer();
         public abstract Timer getBluetoothScanTimer();
         public abstract Timer getBluetoothScanBackgroundTimer();
         public abstract Timer getBluetoothUnoptimizedScanTimer();
@@ -663,7 +703,7 @@
         public abstract long getSystemCpuTimeUs(int which);
 
         /**
-         * Returns the approximate cpu time (in milliseconds) spent at a certain CPU speed for a
+         * Returns the approximate cpu time (in microseconds) spent at a certain CPU speed for a
          * given CPU cluster.
          * @param cluster the index of the CPU cluster.
          * @param step the index of the CPU speed. This is not the actual speed of the CPU.
@@ -1343,12 +1383,12 @@
         public static final int STATE_PHONE_SCANNING_FLAG = 1<<21;
         public static final int STATE_SCREEN_ON_FLAG = 1<<20;       // consider moving to states2
         public static final int STATE_BATTERY_PLUGGED_FLAG = 1<<19; // consider moving to states2
-        // empty slot
+        public static final int STATE_SCREEN_DOZE_FLAG = 1 << 18;
         // empty slot
         public static final int STATE_WIFI_MULTICAST_ON_FLAG = 1<<16;
 
         public static final int MOST_INTERESTING_STATES =
-            STATE_BATTERY_PLUGGED_FLAG | STATE_SCREEN_ON_FLAG;
+                STATE_BATTERY_PLUGGED_FLAG | STATE_SCREEN_ON_FLAG | STATE_SCREEN_DOZE_FLAG;
 
         public static final int SETTLE_TO_ZERO_STATES = 0xffff0000 & ~MOST_INTERESTING_STATES;
 
@@ -1376,8 +1416,8 @@
         public static final int STATE2_BLUETOOTH_SCAN_FLAG = 1 << 20;
 
         public static final int MOST_INTERESTING_STATES2 =
-            STATE2_POWER_SAVE_FLAG | STATE2_WIFI_ON_FLAG | STATE2_DEVICE_IDLE_MASK
-            | STATE2_CHARGING_FLAG | STATE2_PHONE_IN_CALL_FLAG | STATE2_BLUETOOTH_ON_FLAG;
+                STATE2_POWER_SAVE_FLAG | STATE2_WIFI_ON_FLAG | STATE2_DEVICE_IDLE_MASK
+                | STATE2_CHARGING_FLAG | STATE2_PHONE_IN_CALL_FLAG | STATE2_BLUETOOTH_ON_FLAG;
 
         public static final int SETTLE_TO_ZERO_STATES2 = 0xffff0000 & ~MOST_INTERESTING_STATES2;
 
@@ -1825,6 +1865,21 @@
      */
     public abstract int getScreenOnCount(int which);
 
+    /**
+     * Returns the time in microseconds that the screen has been dozing while the device was
+     * running on battery.
+     *
+     * {@hide}
+     */
+    public abstract long getScreenDozeTime(long elapsedRealtimeUs, int which);
+
+    /**
+     * Returns the number of times the screen was turned dozing.
+     *
+     * {@hide}
+     */
+    public abstract int getScreenDozeCount(int which);
+
     public abstract long getInteractiveTime(long elapsedRealtimeUs, int which);
 
     public static final int SCREEN_BRIGHTNESS_DARK = 0;
@@ -2078,8 +2133,7 @@
         "group", "compl", "dorm", "uninit"
     };
 
-    public static final BitDescription[] HISTORY_STATE_DESCRIPTIONS
-            = new BitDescription[] {
+    public static final BitDescription[] HISTORY_STATE_DESCRIPTIONS = new BitDescription[] {
         new BitDescription(HistoryItem.STATE_CPU_RUNNING_FLAG, "running", "r"),
         new BitDescription(HistoryItem.STATE_WAKE_LOCK_FLAG, "wake_lock", "w"),
         new BitDescription(HistoryItem.STATE_SENSOR_ON_FLAG, "sensor", "s"),
@@ -2093,6 +2147,7 @@
         new BitDescription(HistoryItem.STATE_AUDIO_ON_FLAG, "audio", "a"),
         new BitDescription(HistoryItem.STATE_SCREEN_ON_FLAG, "screen", "S"),
         new BitDescription(HistoryItem.STATE_BATTERY_PLUGGED_FLAG, "plugged", "BP"),
+        new BitDescription(HistoryItem.STATE_SCREEN_DOZE_FLAG, "screen_doze", "Sd"),
         new BitDescription(HistoryItem.STATE_DATA_CONNECTION_MASK,
                 HistoryItem.STATE_DATA_CONNECTION_SHIFT, "data_conn", "Pcn",
                 DATA_CONNECTION_NAMES, DATA_CONNECTION_NAMES),
@@ -2429,6 +2484,18 @@
     public abstract int getDischargeAmountScreenOffSinceCharge();
 
     /**
+     * Get the amount the battery has discharged while the screen was doze,
+     * since the last time power was unplugged.
+     */
+    public abstract int getDischargeAmountScreenDoze();
+
+    /**
+     * Get the amount the battery has discharged while the screen was doze,
+     * since the last time the device was charged.
+     */
+    public abstract int getDischargeAmountScreenDozeSinceCharge();
+
+    /**
      * Returns the total, last, or current battery uptime in microseconds.
      *
      * @param curTime the elapsed realtime in microseconds.
@@ -2445,7 +2512,7 @@
     public abstract long computeBatteryRealtime(long curTime, int which);
 
     /**
-     * Returns the total, last, or current battery screen off uptime in microseconds.
+     * Returns the total, last, or current battery screen off/doze uptime in microseconds.
      *
      * @param curTime the elapsed realtime in microseconds.
      * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
@@ -2453,7 +2520,7 @@
     public abstract long computeBatteryScreenOffUptime(long curTime, int which);
 
     /**
-     * Returns the total, last, or current battery screen off realtime in microseconds.
+     * Returns the total, last, or current battery screen off/doze realtime in microseconds.
      *
      * @param curTime the current elapsed realtime in microseconds.
      * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
@@ -2552,18 +2619,24 @@
     };
 
     /**
-     * Return the counter keeping track of the amount of battery discharge while the screen was off,
-     * measured in micro-Ampere-hours. This will be non-zero only if the device's battery has
-     * a coulomb counter.
-     */
-    public abstract LongCounter getDischargeScreenOffCoulombCounter();
-
-    /**
-     * Return the counter keeping track of the amount of battery discharge measured in
+     * Return the amount of battery discharge while the screen was off, measured in
      * micro-Ampere-hours. This will be non-zero only if the device's battery has
      * a coulomb counter.
      */
-    public abstract LongCounter getDischargeCoulombCounter();
+    public abstract long getMahDischargeScreenOff(int which);
+
+    /**
+     * Return the amount of battery discharge while the screen was in doze mode, measured in
+     * micro-Ampere-hours. This will be non-zero only if the device's battery has
+     * a coulomb counter.
+     */
+    public abstract long getMahDischargeScreenDoze(int which);
+
+    /**
+     * Return the amount of battery discharge  measured in micro-Ampere-hours. This will be
+     * non-zero only if the device's battery has a coulomb counter.
+     */
+    public abstract long getMahDischarge(int which);
 
     /**
      * Returns the estimated real battery capacity, which may be less than the capacity
@@ -2618,6 +2691,16 @@
 
     public abstract Map<String, ? extends Timer> getKernelWakelockStats();
 
+    /**
+     * Returns Timers tracking the total time of each Resource Power Manager state and voter.
+     */
+    public abstract Map<String, ? extends Timer> getRpmStats();
+    /**
+     * Returns Timers tracking the screen-off time of each Resource Power Manager state and voter.
+     */
+    public abstract Map<String, ? extends Timer> getScreenOffRpmStats();
+
+
     public abstract LongSparseArray<? extends Timer> getKernelMemoryStats();
 
     public abstract void writeToParcelWithoutUids(Parcel out, int flags);
@@ -2971,71 +3054,104 @@
         final long idleTimeMs = counter.getIdleTimeCounter().getCountLocked(which);
         final long rxTimeMs = counter.getRxTimeCounter().getCountLocked(which);
         final long powerDrainMaMs = counter.getPowerCounter().getCountLocked(which);
+        // Battery real time
+        final long totalControllerActivityTimeMs
+            = computeBatteryRealtime(SystemClock.elapsedRealtime() * 1000, which) / 1000;
         long totalTxTimeMs = 0;
         for (LongCounter txState : counter.getTxTimeCounters()) {
             totalTxTimeMs += txState.getCountLocked(which);
         }
-
-        final long totalTimeMs = idleTimeMs + rxTimeMs + totalTxTimeMs;
+        final long sleepTimeMs
+            = totalControllerActivityTimeMs - (idleTimeMs + rxTimeMs + totalTxTimeMs);
 
         sb.setLength(0);
         sb.append(prefix);
-        sb.append("  ");
+        sb.append("     ");
+        sb.append(controllerName);
+        sb.append(" Sleep time:  ");
+        formatTimeMs(sb, sleepTimeMs);
+        sb.append("(");
+        sb.append(formatRatioLocked(sleepTimeMs, totalControllerActivityTimeMs));
+        sb.append(")");
+        pw.println(sb.toString());
+
+        sb.setLength(0);
+        sb.append(prefix);
+        sb.append("     ");
         sb.append(controllerName);
         sb.append(" Idle time:   ");
         formatTimeMs(sb, idleTimeMs);
         sb.append("(");
-        sb.append(formatRatioLocked(idleTimeMs, totalTimeMs));
+        sb.append(formatRatioLocked(idleTimeMs, totalControllerActivityTimeMs));
         sb.append(")");
         pw.println(sb.toString());
 
         sb.setLength(0);
         sb.append(prefix);
-        sb.append("  ");
+        sb.append("     ");
         sb.append(controllerName);
         sb.append(" Rx time:     ");
         formatTimeMs(sb, rxTimeMs);
         sb.append("(");
-        sb.append(formatRatioLocked(rxTimeMs, totalTimeMs));
+        sb.append(formatRatioLocked(rxTimeMs, totalControllerActivityTimeMs));
         sb.append(")");
         pw.println(sb.toString());
 
         sb.setLength(0);
         sb.append(prefix);
-        sb.append("  ");
+        sb.append("     ");
         sb.append(controllerName);
         sb.append(" Tx time:     ");
-        formatTimeMs(sb, totalTxTimeMs);
-        sb.append("(");
-        sb.append(formatRatioLocked(totalTxTimeMs, totalTimeMs));
-        sb.append(")");
-        pw.println(sb.toString());
 
-        final int numTxLvls = counter.getTxTimeCounters().length;
+        String [] powerLevel;
+        switch(controllerName) {
+            case "Cellular":
+                powerLevel = new String[] {
+                    "   less than 0dBm: ",
+                    "   0dBm to 8dBm: ",
+                    "   8dBm to 15dBm: ",
+                    "   15dBm to 20dBm: ",
+                    "   above 20dBm: "};
+                break;
+            default:
+                powerLevel = new String[] {"[0]", "[1]", "[2]", "[3]", "[4]"};
+                break;
+        }
+        final int numTxLvls = Math.min(counter.getTxTimeCounters().length, powerLevel.length);
         if (numTxLvls > 1) {
+            pw.println(sb.toString());
             for (int lvl = 0; lvl < numTxLvls; lvl++) {
                 final long txLvlTimeMs = counter.getTxTimeCounters()[lvl].getCountLocked(which);
                 sb.setLength(0);
                 sb.append(prefix);
-                sb.append("    [");
-                sb.append(lvl);
-                sb.append("] ");
+                sb.append("    ");
+                sb.append(powerLevel[lvl]);
+                sb.append(" ");
                 formatTimeMs(sb, txLvlTimeMs);
                 sb.append("(");
-                sb.append(formatRatioLocked(txLvlTimeMs, totalTxTimeMs));
+                sb.append(formatRatioLocked(txLvlTimeMs, totalControllerActivityTimeMs));
                 sb.append(")");
                 pw.println(sb.toString());
             }
+        } else {
+            final long txLvlTimeMs = counter.getTxTimeCounters()[0].getCountLocked(which);
+            formatTimeMs(sb, txLvlTimeMs);
+            sb.append("(");
+            sb.append(formatRatioLocked(txLvlTimeMs, totalControllerActivityTimeMs));
+            sb.append(")");
+            pw.println(sb.toString());
         }
 
-        sb.setLength(0);
-        sb.append(prefix);
-        sb.append("  ");
-        sb.append(controllerName);
-        sb.append(" Power drain: ").append(
+        if (powerDrainMaMs > 0) {
+            sb.setLength(0);
+            sb.append(prefix);
+            sb.append("     ");
+            sb.append(controllerName);
+            sb.append(" Battery drain: ").append(
                 BatteryStatsHelper.makemAh(powerDrainMaMs / (double) (1000*60*60)));
-        sb.append("mAh");
-        pw.println(sb.toString());
+            sb.append("mAh");
+            pw.println(sb.toString());
+        }
     }
 
     /**
@@ -3064,6 +3180,7 @@
         final long totalRealtime = computeRealtime(rawRealtime, which);
         final long totalUptime = computeUptime(rawUptime, which);
         final long screenOnTime = getScreenOnTime(rawRealtime, which);
+        final long screenDozeTime = getScreenDozeTime(rawRealtime, which);
         final long interactiveTime = getInteractiveTime(rawRealtime, which);
         final long powerSaveModeEnabledTime = getPowerSaveModeEnabledTime(rawRealtime, which);
         final long deviceIdleModeLightTime = getDeviceIdleModeTime(DEVICE_IDLE_MODE_LIGHT,
@@ -3076,9 +3193,9 @@
                 rawRealtime, which);
         final int connChanges = getNumConnectivityChange(which);
         final long phoneOnTime = getPhoneOnTime(rawRealtime, which);
-        final long dischargeCount = getDischargeCoulombCounter().getCountLocked(which);
-        final long dischargeScreenOffCount = getDischargeScreenOffCoulombCounter()
-                .getCountLocked(which);
+        final long dischargeCount = getMahDischarge(which);
+        final long dischargeScreenOffCount = getMahDischargeScreenOff(which);
+        final long dischargeScreenDozeCount = getMahDischargeScreenDoze(which);
 
         final StringBuilder sb = new StringBuilder(128);
 
@@ -3095,7 +3212,8 @@
                 getStartClockTime(),
                 whichBatteryScreenOffRealtime / 1000, whichBatteryScreenOffUptime / 1000,
                 getEstimatedBatteryCapacity(),
-                getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity());
+                getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity(),
+                screenDozeTime / 1000);
 
 
         // Calculate wakelock times across all uids.
@@ -3247,13 +3365,15 @@
                     getDischargeStartLevel()-getDischargeCurrentLevel(),
                     getDischargeStartLevel()-getDischargeCurrentLevel(),
                     getDischargeAmountScreenOn(), getDischargeAmountScreenOff(),
-                    dischargeCount / 1000, dischargeScreenOffCount / 1000);
+                    dischargeCount / 1000, dischargeScreenOffCount / 1000,
+                    getDischargeAmountScreenDoze(), dischargeScreenDozeCount / 1000);
         } else {
             dumpLine(pw, 0 /* uid */, category, BATTERY_DISCHARGE_DATA,
                     getLowDischargeAmountSinceCharge(), getHighDischargeAmountSinceCharge(),
                     getDischargeAmountScreenOnSinceCharge(),
                     getDischargeAmountScreenOffSinceCharge(),
-                    dischargeCount / 1000, dischargeScreenOffCount / 1000);
+                    dischargeCount / 1000, dischargeScreenOffCount / 1000,
+                    getDischargeAmountScreenDozeSinceCharge(), dischargeScreenDozeCount / 1000);
         }
 
         if (reqUid < 0) {
@@ -3279,6 +3399,30 @@
             }
         }
 
+        final Map<String, ? extends Timer> rpmStats = getRpmStats();
+        final Map<String, ? extends Timer> screenOffRpmStats = getScreenOffRpmStats();
+        if (rpmStats.size() > 0) {
+            for (Map.Entry<String, ? extends Timer> ent : rpmStats.entrySet()) {
+                sb.setLength(0);
+                Timer totalTimer = ent.getValue();
+                long timeMs = (totalTimer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000;
+                int count = totalTimer.getCountLocked(which);
+                Timer screenOffTimer = screenOffRpmStats.get(ent.getKey());
+                long screenOffTimeMs = screenOffTimer != null
+                        ? (screenOffTimer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000 : 0;
+                int screenOffCount = screenOffTimer != null
+                        ? screenOffTimer.getCountLocked(which) : 0;
+                if (SCREEN_OFF_RPM_STATS_ENABLED) {
+                    dumpLine(pw, 0 /* uid */, category, RESOURCE_POWER_MANAGER_DATA,
+                            "\"" + ent.getKey() + "\"", timeMs, count, screenOffTimeMs,
+                            screenOffCount);
+                } else {
+                    dumpLine(pw, 0 /* uid */, category, RESOURCE_POWER_MANAGER_DATA,
+                            "\"" + ent.getKey() + "\"", timeMs, count);
+                }
+            }
+        }
+
         final BatteryStatsHelper helper = new BatteryStatsHelper(context, false, wifiOnly);
         helper.create(this);
         helper.refreshStats(which, UserHandle.USER_ALL);
@@ -3521,6 +3665,12 @@
                     if (name.indexOf(',') >= 0) {
                         name = name.replace(',', '_');
                     }
+                    if (name.indexOf('\n') >= 0) {
+                        name = name.replace('\n', '_');
+                    }
+                    if (name.indexOf('\r') >= 0) {
+                        name = name.replace('\r', '_');
+                    }
                     dumpLine(pw, uid, category, WAKELOCK_DATA, name, sb.toString());
                 }
             }
@@ -3557,6 +3707,20 @@
                 }
             }
 
+            final ArrayMap<String, SparseIntArray> completions = u.getJobCompletionStats();
+            for (int ic=completions.size()-1; ic>=0; ic--) {
+                SparseIntArray types = completions.valueAt(ic);
+                if (types != null) {
+                    dumpLine(pw, uid, category, JOB_COMPLETION_DATA,
+                            "\"" + completions.keyAt(ic) + "\"",
+                            types.get(JobParameters.REASON_CANCELED, 0),
+                            types.get(JobParameters.REASON_CONSTRAINTS_NOT_SATISFIED, 0),
+                            types.get(JobParameters.REASON_PREEMPT, 0),
+                            types.get(JobParameters.REASON_TIMEOUT, 0),
+                            types.get(JobParameters.REASON_DEVICE_IDLE, 0));
+                }
+            }
+
             dumpTimer(pw, uid, category, FLASHLIGHT_DATA, u.getFlashlightTurnedOnTimer(),
                     rawRealtime, which);
             dumpTimer(pw, uid, category, CAMERA_DATA, u.getCameraTurnedOnTimer(),
@@ -3593,7 +3757,10 @@
             dumpTimer(pw, uid, category, VIBRATOR_DATA, u.getVibratorOnTimer(),
                     rawRealtime, which);
 
-            dumpTimer(pw, uid, category, FOREGROUND_DATA, u.getForegroundActivityTimer(),
+            dumpTimer(pw, uid, category, FOREGROUND_ACTIVITY_DATA, u.getForegroundActivityTimer(),
+                    rawRealtime, which);
+
+            dumpTimer(pw, uid, category, FOREGROUND_SERVICE_DATA, u.getForegroundServiceTimer(),
                     rawRealtime, which);
 
             final Object[] stateTimes = new Object[Uid.NUM_PROCESS_STATE];
@@ -3614,25 +3781,29 @@
                         0 /* old cpu power, keep for compatibility */);
             }
 
-            final long[] cpuFreqTimeMs = u.getCpuFreqTimes(which);
-            // If total cpuFreqTimes is null, then we don't need to check for screenOffCpuFreqTimes.
-            if (cpuFreqTimeMs != null) {
-                sb.setLength(0);
-                for (int i = 0; i < cpuFreqTimeMs.length; ++i) {
-                    sb.append((i == 0 ? "" : ",") + cpuFreqTimeMs[i]);
-                }
-                final long[] screenOffCpuFreqTimeMs = u.getScreenOffCpuFreqTimes(which);
-                if (screenOffCpuFreqTimeMs != null) {
-                    for (int i = 0; i < screenOffCpuFreqTimeMs.length; ++i) {
-                        sb.append("," + screenOffCpuFreqTimeMs[i]);
-                    }
-                } else {
+            // If the cpuFreqs is null, then don't bother checking for cpu freq times.
+            if (cpuFreqs != null) {
+                final long[] cpuFreqTimeMs = u.getCpuFreqTimes(which);
+                // If total cpuFreqTimes is null, then we don't need to check for
+                // screenOffCpuFreqTimes.
+                if (cpuFreqTimeMs != null && cpuFreqTimeMs.length == cpuFreqs.length) {
+                    sb.setLength(0);
                     for (int i = 0; i < cpuFreqTimeMs.length; ++i) {
-                        sb.append(",0");
+                        sb.append((i == 0 ? "" : ",") + cpuFreqTimeMs[i]);
                     }
+                    final long[] screenOffCpuFreqTimeMs = u.getScreenOffCpuFreqTimes(which);
+                    if (screenOffCpuFreqTimeMs != null) {
+                        for (int i = 0; i < screenOffCpuFreqTimeMs.length; ++i) {
+                            sb.append("," + screenOffCpuFreqTimeMs[i]);
+                        }
+                    } else {
+                        for (int i = 0; i < cpuFreqTimeMs.length; ++i) {
+                            sb.append(",0");
+                        }
+                    }
+                    dumpLine(pw, uid, category, CPU_TIMES_AT_FREQ_DATA, UID_TIMES_TYPE_ALL,
+                            cpuFreqTimeMs.length, sb.toString());
                 }
-                dumpLine(pw, uid, category, CPU_TIMES_AT_FREQ_DATA, UID_TIMES_TYPE_ALL,
-                        cpuFreqTimeMs.length, sb.toString());
             }
 
             final ArrayMap<String, ? extends BatteryStats.Uid.Proc> processStats
@@ -3732,6 +3903,7 @@
                 which);
         final long batteryTimeRemaining = computeBatteryTimeRemaining(rawRealtime);
         final long chargeTimeRemaining = computeChargeTimeRemaining(rawRealtime);
+        final long screenDozeTime = getScreenDozeTime(rawRealtime, which);
 
         final StringBuilder sb = new StringBuilder(128);
 
@@ -3769,25 +3941,35 @@
 
         sb.setLength(0);
         sb.append(prefix);
-                sb.append("  Time on battery: ");
-                formatTimeMs(sb, whichBatteryRealtime / 1000); sb.append("(");
-                sb.append(formatRatioLocked(whichBatteryRealtime, totalRealtime));
-                sb.append(") realtime, ");
-                formatTimeMs(sb, whichBatteryUptime / 1000);
-                sb.append("("); sb.append(formatRatioLocked(whichBatteryUptime, totalRealtime));
-                sb.append(") uptime");
+        sb.append("  Time on battery: ");
+        formatTimeMs(sb, whichBatteryRealtime / 1000); sb.append("(");
+        sb.append(formatRatioLocked(whichBatteryRealtime, totalRealtime));
+        sb.append(") realtime, ");
+        formatTimeMs(sb, whichBatteryUptime / 1000);
+        sb.append("("); sb.append(formatRatioLocked(whichBatteryUptime, whichBatteryRealtime));
+        sb.append(") uptime");
         pw.println(sb.toString());
+
         sb.setLength(0);
         sb.append(prefix);
-                sb.append("  Time on battery screen off: ");
-                formatTimeMs(sb, whichBatteryScreenOffRealtime / 1000); sb.append("(");
-                sb.append(formatRatioLocked(whichBatteryScreenOffRealtime, totalRealtime));
-                sb.append(") realtime, ");
-                formatTimeMs(sb, whichBatteryScreenOffUptime / 1000);
-                sb.append("(");
-                sb.append(formatRatioLocked(whichBatteryScreenOffUptime, totalRealtime));
-                sb.append(") uptime");
+        sb.append("  Time on battery screen off: ");
+        formatTimeMs(sb, whichBatteryScreenOffRealtime / 1000); sb.append("(");
+        sb.append(formatRatioLocked(whichBatteryScreenOffRealtime, whichBatteryRealtime));
+        sb.append(") realtime, ");
+        formatTimeMs(sb, whichBatteryScreenOffUptime / 1000);
+        sb.append("(");
+        sb.append(formatRatioLocked(whichBatteryScreenOffUptime, whichBatteryRealtime));
+        sb.append(") uptime");
         pw.println(sb.toString());
+
+        sb.setLength(0);
+        sb.append(prefix);
+        sb.append("  Time on battery screen doze: ");
+        formatTimeMs(sb, screenDozeTime / 1000); sb.append("(");
+        sb.append(formatRatioLocked(screenDozeTime, whichBatteryRealtime));
+        sb.append(")");
+        pw.println(sb.toString());
+
         sb.setLength(0);
         sb.append(prefix);
                 sb.append("  Total run time: ");
@@ -3811,8 +3993,7 @@
             pw.println(sb.toString());
         }
 
-        final LongCounter dischargeCounter = getDischargeCoulombCounter();
-        final long dischargeCount = dischargeCounter.getCountLocked(which);
+        final long dischargeCount = getMahDischarge(which);
         if (dischargeCount >= 0) {
             sb.setLength(0);
             sb.append(prefix);
@@ -3822,8 +4003,7 @@
             pw.println(sb.toString());
         }
 
-        final LongCounter dischargeScreenOffCounter = getDischargeScreenOffCoulombCounter();
-        final long dischargeScreenOffCount = dischargeScreenOffCounter.getCountLocked(which);
+        final long dischargeScreenOffCount = getMahDischargeScreenOff(which);
         if (dischargeScreenOffCount >= 0) {
             sb.setLength(0);
             sb.append(prefix);
@@ -3833,7 +4013,18 @@
             pw.println(sb.toString());
         }
 
-        final long dischargeScreenOnCount = dischargeCount - dischargeScreenOffCount;
+        final long dischargeScreenDozeCount = getMahDischargeScreenDoze(which);
+        if (dischargeScreenDozeCount >= 0) {
+            sb.setLength(0);
+            sb.append(prefix);
+            sb.append("  Screen doze discharge: ");
+            sb.append(BatteryStatsHelper.makemAh(dischargeScreenDozeCount / 1000.0));
+            sb.append(" mAh");
+            pw.println(sb.toString());
+        }
+
+        final long dischargeScreenOnCount =
+                dischargeCount - dischargeScreenOffCount - dischargeScreenDozeCount;
         if (dischargeScreenOnCount >= 0) {
             sb.setLength(0);
             sb.append(prefix);
@@ -4028,51 +4219,50 @@
             pw.println(sb.toString());
         }
 
+        pw.println("");
         pw.print(prefix);
-                pw.print("  Mobile total received: "); pw.print(formatBytesLocked(mobileRxTotalBytes));
-                pw.print(", sent: "); pw.print(formatBytesLocked(mobileTxTotalBytes));
-                pw.print(" (packets received "); pw.print(mobileRxTotalPackets);
-                pw.print(", sent "); pw.print(mobileTxTotalPackets); pw.println(")");
         sb.setLength(0);
         sb.append(prefix);
-        sb.append("  Phone signal levels:");
-        didOne = false;
-        for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) {
-            final long time = getPhoneSignalStrengthTime(i, rawRealtime, which);
-            if (time == 0) {
-                continue;
-            }
-            sb.append("\n    ");
-            sb.append(prefix);
-            didOne = true;
-            sb.append(SignalStrength.SIGNAL_STRENGTH_NAMES[i]);
-            sb.append(" ");
-            formatTimeMs(sb, time/1000);
-            sb.append("(");
-            sb.append(formatRatioLocked(time, whichBatteryRealtime));
-            sb.append(") ");
-            sb.append(getPhoneSignalStrengthCount(i, which));
-            sb.append("x");
-        }
-        if (!didOne) sb.append(" (no activity)");
+        sb.append("  CONNECTIVITY POWER SUMMARY START");
+        pw.println(sb.toString());
+
+        pw.print(prefix);
+        sb.setLength(0);
+        sb.append(prefix);
+        sb.append("  Logging duration for connectivity statistics: ");
+        formatTimeMs(sb, whichBatteryRealtime / 1000);
         pw.println(sb.toString());
 
         sb.setLength(0);
         sb.append(prefix);
-        sb.append("  Signal scanning time: ");
-        formatTimeMsNoSpace(sb, getPhoneSignalScanningTime(rawRealtime, which) / 1000);
+        sb.append("  Cellular Statistics:");
         pw.println(sb.toString());
 
+        pw.print(prefix);
+        sb.setLength(0);
+        sb.append(prefix);
+        sb.append("     Cellular kernel active time: ");
+        final long mobileActiveTime = getMobileRadioActiveTime(rawRealtime, which);
+        formatTimeMs(sb, mobileActiveTime / 1000);
+        sb.append("("); sb.append(formatRatioLocked(mobileActiveTime, whichBatteryRealtime));
+        sb.append(")");
+        pw.println(sb.toString());
+
+        pw.print("     Cellular data received: "); pw.println(formatBytesLocked(mobileRxTotalBytes));
+        pw.print("     Cellular data sent: "); pw.println(formatBytesLocked(mobileTxTotalBytes));
+        pw.print("     Cellular packets received: "); pw.println(mobileRxTotalPackets);
+        pw.print("     Cellular packets sent: "); pw.println(mobileTxTotalPackets);
+
         sb.setLength(0);
         sb.append(prefix);
-        sb.append("  Radio types:");
+        sb.append("     Cellular Radio Access Technology:");
         didOne = false;
         for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
             final long time = getPhoneDataConnectionTime(i, rawRealtime, which);
             if (time == 0) {
                 continue;
             }
-            sb.append("\n    ");
+            sb.append("\n       ");
             sb.append(prefix);
             didOne = true;
             sb.append(DATA_CONNECTION_NAMES[i]);
@@ -4081,73 +4271,64 @@
             sb.append("(");
             sb.append(formatRatioLocked(time, whichBatteryRealtime));
             sb.append(") ");
-            sb.append(getPhoneDataConnectionCount(i, which));
-            sb.append("x");
         }
         if (!didOne) sb.append(" (no activity)");
         pw.println(sb.toString());
 
         sb.setLength(0);
         sb.append(prefix);
-        sb.append("  Mobile radio active time: ");
-        final long mobileActiveTime = getMobileRadioActiveTime(rawRealtime, which);
-        formatTimeMs(sb, mobileActiveTime / 1000);
-        sb.append("("); sb.append(formatRatioLocked(mobileActiveTime, whichBatteryRealtime));
-        sb.append(") "); sb.append(getMobileRadioActiveCount(which));
-        sb.append("x");
+        sb.append("     Cellular Rx signal strength (RSRP):");
+        final String[] cellularRxSignalStrengthDescription = new String[]{
+            "very poor (less than -128dBm): ",
+            "poor (-128dBm to -118dBm): ",
+            "moderate (-118dBm to -108dBm): ",
+            "good (-108dBm to -98dBm): ",
+            "great (greater than -98dBm): "};
+        didOne = false;
+        final int numCellularRxBins = Math.min(SignalStrength.NUM_SIGNAL_STRENGTH_BINS,
+            cellularRxSignalStrengthDescription.length);
+        for (int i=0; i<numCellularRxBins; i++) {
+            final long time = getPhoneSignalStrengthTime(i, rawRealtime, which);
+            if (time == 0) {
+                continue;
+            }
+            sb.append("\n       ");
+            sb.append(prefix);
+            didOne = true;
+            sb.append(cellularRxSignalStrengthDescription[i]);
+            sb.append(" ");
+            formatTimeMs(sb, time/1000);
+            sb.append("(");
+            sb.append(formatRatioLocked(time, whichBatteryRealtime));
+            sb.append(") ");
+        }
+        if (!didOne) sb.append(" (no activity)");
         pw.println(sb.toString());
 
-        final long mobileActiveUnknownTime = getMobileRadioActiveUnknownTime(which);
-        if (mobileActiveUnknownTime != 0) {
-            sb.setLength(0);
-            sb.append(prefix);
-            sb.append("  Mobile radio active unknown time: ");
-            formatTimeMs(sb, mobileActiveUnknownTime / 1000);
-            sb.append("(");
-            sb.append(formatRatioLocked(mobileActiveUnknownTime, whichBatteryRealtime));
-            sb.append(") "); sb.append(getMobileRadioActiveUnknownCount(which));
-            sb.append("x");
-            pw.println(sb.toString());
-        }
-
-        final long mobileActiveAdjustedTime = getMobileRadioActiveAdjustedTime(which);
-        if (mobileActiveAdjustedTime != 0) {
-            sb.setLength(0);
-            sb.append(prefix);
-            sb.append("  Mobile radio active adjusted time: ");
-            formatTimeMs(sb, mobileActiveAdjustedTime / 1000);
-            sb.append("(");
-            sb.append(formatRatioLocked(mobileActiveAdjustedTime, whichBatteryRealtime));
-            sb.append(")");
-            pw.println(sb.toString());
-        }
-
-        printControllerActivity(pw, sb, prefix, "Radio", getModemControllerActivity(), which);
+        printControllerActivity(pw, sb, prefix, "Cellular",
+            getModemControllerActivity(), which);
 
         pw.print(prefix);
-                pw.print("  Wi-Fi total received: "); pw.print(formatBytesLocked(wifiRxTotalBytes));
-                pw.print(", sent: "); pw.print(formatBytesLocked(wifiTxTotalBytes));
-                pw.print(" (packets received "); pw.print(wifiRxTotalPackets);
-                pw.print(", sent "); pw.print(wifiTxTotalPackets); pw.println(")");
         sb.setLength(0);
         sb.append(prefix);
-                sb.append("  Wifi on: "); formatTimeMs(sb, wifiOnTime / 1000);
-                sb.append("("); sb.append(formatRatioLocked(wifiOnTime, whichBatteryRealtime));
-                sb.append("), Wifi running: "); formatTimeMs(sb, wifiRunningTime / 1000);
-                sb.append("("); sb.append(formatRatioLocked(wifiRunningTime, whichBatteryRealtime));
-                sb.append(")");
+        sb.append("  Wifi Statistics:");
         pw.println(sb.toString());
 
+        pw.print("     Wifi data received: "); pw.println(formatBytesLocked(wifiRxTotalBytes));
+        pw.print("     Wifi data sent: "); pw.println(formatBytesLocked(wifiTxTotalBytes));
+        pw.print("     Wifi packets received: "); pw.println(wifiRxTotalPackets);
+        pw.print("     Wifi packets sent: "); pw.println(wifiTxTotalPackets);
+
         sb.setLength(0);
         sb.append(prefix);
-        sb.append("  Wifi states:");
+        sb.append("     Wifi states:");
         didOne = false;
         for (int i=0; i<NUM_WIFI_STATES; i++) {
             final long time = getWifiStateTime(i, rawRealtime, which);
             if (time == 0) {
                 continue;
             }
-            sb.append("\n    ");
+            sb.append("\n       ");
             didOne = true;
             sb.append(WIFI_STATE_NAMES[i]);
             sb.append(" ");
@@ -4155,22 +4336,20 @@
             sb.append("(");
             sb.append(formatRatioLocked(time, whichBatteryRealtime));
             sb.append(") ");
-            sb.append(getWifiStateCount(i, which));
-            sb.append("x");
         }
         if (!didOne) sb.append(" (no activity)");
         pw.println(sb.toString());
 
         sb.setLength(0);
         sb.append(prefix);
-        sb.append("  Wifi supplicant states:");
+        sb.append("     Wifi supplicant states:");
         didOne = false;
         for (int i=0; i<NUM_WIFI_SUPPL_STATES; i++) {
             final long time = getWifiSupplStateTime(i, rawRealtime, which);
             if (time == 0) {
                 continue;
             }
-            sb.append("\n    ");
+            sb.append("\n       ");
             didOne = true;
             sb.append(WIFI_SUPPL_STATE_NAMES[i]);
             sb.append(" ");
@@ -4178,17 +4357,23 @@
             sb.append("(");
             sb.append(formatRatioLocked(time, whichBatteryRealtime));
             sb.append(") ");
-            sb.append(getWifiSupplStateCount(i, which));
-            sb.append("x");
         }
         if (!didOne) sb.append(" (no activity)");
         pw.println(sb.toString());
 
         sb.setLength(0);
         sb.append(prefix);
-        sb.append("  Wifi signal levels:");
+        sb.append("     Wifi Rx signal strength (RSSI):");
+        final String[] wifiRxSignalStrengthDescription = new String[]{
+            "very poor (less than -88.75dBm): ",
+            "poor (-88.75 to -77.5dBm): ",
+            "moderate (-77.5dBm to -66.25dBm): ",
+            "good (-66.25dBm to -55dBm): ",
+            "great (greater than -55dBm): "};
         didOne = false;
-        for (int i=0; i<NUM_WIFI_SIGNAL_STRENGTH_BINS; i++) {
+        final int numWifiRxBins = Math.min(NUM_WIFI_SIGNAL_STRENGTH_BINS,
+            wifiRxSignalStrengthDescription.length);
+        for (int i=0; i<numWifiRxBins; i++) {
             final long time = getWifiSignalStrengthTime(i, rawRealtime, which);
             if (time == 0) {
                 continue;
@@ -4196,15 +4381,12 @@
             sb.append("\n    ");
             sb.append(prefix);
             didOne = true;
-            sb.append("level(");
-            sb.append(i);
-            sb.append(") ");
+            sb.append("     ");
+            sb.append(wifiRxSignalStrengthDescription[i]);
             formatTimeMs(sb, time/1000);
             sb.append("(");
             sb.append(formatRatioLocked(time, whichBatteryRealtime));
             sb.append(") ");
-            sb.append(getWifiSignalStrengthCount(i, which));
-            sb.append("x");
         }
         if (!didOne) sb.append(" (no activity)");
         pw.println(sb.toString());
@@ -4212,6 +4394,13 @@
         printControllerActivity(pw, sb, prefix, "WiFi", getWifiControllerActivity(), which);
 
         pw.print(prefix);
+        sb.setLength(0);
+        sb.append(prefix);
+        sb.append("  CONNECTIVITY POWER SUMMARY END");
+        pw.println(sb.toString());
+        pw.println("");
+
+        pw.print(prefix);
         pw.print("  Bluetooth total received: "); pw.print(formatBytesLocked(btRxTotalBytes));
         pw.print(", sent: "); pw.println(formatBytesLocked(btTxTotalBytes));
 
@@ -4241,20 +4430,24 @@
                         pw.println(getDischargeCurrentLevel());
             }
             pw.print(prefix); pw.print("    Amount discharged while screen on: ");
-                    pw.println(getDischargeAmountScreenOn());
+            pw.println(getDischargeAmountScreenOn());
             pw.print(prefix); pw.print("    Amount discharged while screen off: ");
-                    pw.println(getDischargeAmountScreenOff());
+            pw.println(getDischargeAmountScreenOff());
+            pw.print(prefix); pw.print("    Amount discharged while screen doze: ");
+            pw.println(getDischargeAmountScreenDoze());
             pw.println(" ");
         } else {
             pw.print(prefix); pw.println("  Device battery use since last full charge");
             pw.print(prefix); pw.print("    Amount discharged (lower bound): ");
-                    pw.println(getLowDischargeAmountSinceCharge());
+            pw.println(getLowDischargeAmountSinceCharge());
             pw.print(prefix); pw.print("    Amount discharged (upper bound): ");
-                    pw.println(getHighDischargeAmountSinceCharge());
+            pw.println(getHighDischargeAmountSinceCharge());
             pw.print(prefix); pw.print("    Amount discharged while screen on: ");
-                    pw.println(getDischargeAmountScreenOnSinceCharge());
+            pw.println(getDischargeAmountScreenOnSinceCharge());
             pw.print(prefix); pw.print("    Amount discharged while screen off: ");
-                    pw.println(getDischargeAmountScreenOffSinceCharge());
+            pw.println(getDischargeAmountScreenOffSinceCharge());
+            pw.print(prefix); pw.print("    Amount discharged while screen doze: ");
+            pw.println(getDischargeAmountScreenDozeSinceCharge());
             pw.println();
         }
 
@@ -4513,24 +4706,56 @@
         }
 
         final LongSparseArray<? extends Timer> mMemoryStats = getKernelMemoryStats();
-        pw.println("Memory Stats");
-        for (int i = 0; i < mMemoryStats.size(); i++) {
-            sb.setLength(0);
-            sb.append("Bandwidth ");
-            sb.append(mMemoryStats.keyAt(i));
-            sb.append(" Time ");
-            sb.append(mMemoryStats.valueAt(i).getTotalTimeLocked(rawRealtime, which));
-            pw.println(sb.toString());
+        if (mMemoryStats.size() > 0) {
+            pw.println("  Memory Stats");
+            for (int i = 0; i < mMemoryStats.size(); i++) {
+                sb.setLength(0);
+                sb.append("  Bandwidth ");
+                sb.append(mMemoryStats.keyAt(i));
+                sb.append(" Time ");
+                sb.append(mMemoryStats.valueAt(i).getTotalTimeLocked(rawRealtime, which));
+                pw.println(sb.toString());
+            }
+            pw.println();
+        }
+
+        final Map<String, ? extends Timer> rpmStats = getRpmStats();
+        if (rpmStats.size() > 0) {
+            pw.print(prefix); pw.println("  Resource Power Manager Stats");
+            if (rpmStats.size() > 0) {
+                for (Map.Entry<String, ? extends Timer> ent : rpmStats.entrySet()) {
+                    final String timerName = ent.getKey();
+                    final Timer timer = ent.getValue();
+                    printTimer(pw, sb, timer, rawRealtime, which, prefix, timerName);
+                }
+            }
+            pw.println();
+        }
+        if (SCREEN_OFF_RPM_STATS_ENABLED) {
+            final Map<String, ? extends Timer> screenOffRpmStats = getScreenOffRpmStats();
+            if (screenOffRpmStats.size() > 0) {
+                pw.print(prefix);
+                pw.println("  Resource Power Manager Stats for when screen was off");
+                if (screenOffRpmStats.size() > 0) {
+                    for (Map.Entry<String, ? extends Timer> ent : screenOffRpmStats.entrySet()) {
+                        final String timerName = ent.getKey();
+                        final Timer timer = ent.getValue();
+                        printTimer(pw, sb, timer, rawRealtime, which, prefix, timerName);
+                    }
+                }
+                pw.println();
+            }
         }
 
         final long[] cpuFreqs = getCpuFreqs();
         if (cpuFreqs != null) {
             sb.setLength(0);
-            sb.append("CPU freqs:");
+            sb.append("  CPU freqs:");
             for (int i = 0; i < cpuFreqs.length; ++i) {
                 sb.append(" " + cpuFreqs[i]);
             }
             pw.println(sb.toString());
+            pw.println();
         }
 
         for (int iu=0; iu<NU; iu++) {
@@ -4979,6 +5204,25 @@
                 uidActivity = true;
             }
 
+            final ArrayMap<String, SparseIntArray> completions = u.getJobCompletionStats();
+            for (int ic=completions.size()-1; ic>=0; ic--) {
+                SparseIntArray types = completions.valueAt(ic);
+                if (types != null) {
+                    pw.print(prefix);
+                    pw.print("    Job Completions ");
+                    pw.print(completions.keyAt(ic));
+                    pw.print(":");
+                    for (int it=0; it<types.size(); it++) {
+                        pw.print(" ");
+                        pw.print(JobParameters.getReasonName(types.keyAt(it)));
+                        pw.print("(");
+                        pw.print(types.valueAt(it));
+                        pw.print("x)");
+                    }
+                    pw.println();
+                }
+            }
+
             uidActivity |= printTimer(pw, sb, u.getFlashlightTurnedOnTimer(), rawRealtime, which,
                     prefix, "Flashlight");
             uidActivity |= printTimer(pw, sb, u.getCameraTurnedOnTimer(), rawRealtime, which,
@@ -5051,6 +5295,8 @@
                     "Vibrator");
             uidActivity |= printTimer(pw, sb, u.getForegroundActivityTimer(), rawRealtime, which,
                     prefix, "Foreground activities");
+            uidActivity |= printTimer(pw, sb, u.getForegroundServiceTimer(), rawRealtime, which,
+                    prefix, "Foreground services");
 
             long totalStateTime = 0;
             for (int ips=0; ips<Uid.NUM_PROCESS_STATE; ips++) {
@@ -5160,9 +5406,7 @@
                         Uid.Proc.ExcessivePower ew = ps.getExcessivePower(e);
                         if (ew != null) {
                             pw.print(prefix); pw.print("      * Killed for ");
-                                    if (ew.type == Uid.Proc.ExcessivePower.TYPE_WAKE) {
-                                        pw.print("wake lock");
-                                    } else if (ew.type == Uid.Proc.ExcessivePower.TYPE_CPU) {
+                                    if (ew.type == Uid.Proc.ExcessivePower.TYPE_CPU) {
                                         pw.print("cpu");
                                     } else {
                                         pw.print("unknown");
@@ -5276,7 +5520,7 @@
             }
         }
     }
-    
+
     public void prepareForDumpLocked() {
     }
 
@@ -6098,7 +6342,7 @@
             pw.println();
         }
     }
-    
+
     @SuppressWarnings("unused")
     public void dumpCheckinLocked(Context context, PrintWriter pw,
             List<ApplicationInfo> apps, int flags, long histStart) {
diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java
index b9e2119..3aeafab 100644
--- a/core/java/android/os/Binder.java
+++ b/core/java/android/os/Binder.java
@@ -16,6 +16,8 @@
 
 package android.os;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.util.ExceptionUtils;
 import android.util.Log;
 import android.util.Slog;
@@ -218,7 +220,7 @@
      * with their own uid.  If the current thread is not currently executing an
      * incoming transaction, then its own UserHandle is returned.
      */
-    public static final UserHandle getCallingUserHandle() {
+    public static final @NonNull UserHandle getCallingUserHandle() {
         return UserHandle.of(UserHandle.getUserId(getCallingUid()));
     }
 
@@ -261,7 +263,7 @@
      *
      * @hide
      */
-    public static final void withCleanCallingIdentity(ThrowingRunnable action) {
+    public static final void withCleanCallingIdentity(@NonNull ThrowingRunnable action) {
         long callingIdentity = clearCallingIdentity();
         Throwable throwableToPropagate = null;
         try {
@@ -285,7 +287,7 @@
      *
      * @hide
      */
-    public static final <T> T withCleanCallingIdentity(ThrowingSupplier<T> action) {
+    public static final <T> T withCleanCallingIdentity(@NonNull ThrowingSupplier<T> action) {
         long callingIdentity = clearCallingIdentity();
         Throwable throwableToPropagate = null;
         try {
@@ -377,7 +379,7 @@
      * to return the given owner IInterface when the corresponding
      * descriptor is requested.
      */
-    public void attachInterface(IInterface owner, String descriptor) {
+    public void attachInterface(@Nullable IInterface owner, @Nullable String descriptor) {
         mOwner = owner;
         mDescriptor = descriptor;
     }
@@ -385,7 +387,7 @@
     /**
      * Default implementation returns an empty interface name.
      */
-    public String getInterfaceDescriptor() {
+    public @Nullable String getInterfaceDescriptor() {
         return mDescriptor;
     }
 
@@ -412,7 +414,7 @@
      * associated IInterface if it matches the requested
      * descriptor.
      */
-    public IInterface queryLocalInterface(String descriptor) {
+    public @Nullable IInterface queryLocalInterface(@NonNull String descriptor) {
         if (mDescriptor.equals(descriptor)) {
             return mOwner;
         }
@@ -438,8 +440,25 @@
      * to override this to do the appropriate unmarshalling of transactions.
      *
      * <p>If you want to call this, call transact().
+     *
+     * <p>Implementations that are returning a result should generally use
+     * {@link Parcel#writeNoException() Parcel.writeNoException} and
+     * {@link Parcel#writeException(Exception) Parcel.writeException} to propagate
+     * exceptions back to the caller.</p>
+     *
+     * @param code The action to perform.  This should
+     * be a number between {@link #FIRST_CALL_TRANSACTION} and
+     * {@link #LAST_CALL_TRANSACTION}.
+     * @param data Marshalled data being received from the caller.
+     * @param reply If the caller is expecting a result back, it should be marshalled
+     * in to here.
+     * @param flags Additional operation flags.  Either 0 for a normal
+     * RPC, or {@link #FLAG_ONEWAY} for a one-way RPC.
+     *
+     * @return Return true on a successful call; returning false is generally used to
+     * indicate that you did not understand the transaction code.
      */
-    protected boolean onTransact(int code, Parcel data, Parcel reply,
+    protected boolean onTransact(int code, @NonNull Parcel data, @Nullable Parcel reply,
             int flags) throws RemoteException {
         if (code == INTERFACE_TRANSACTION) {
             reply.writeString(getInterfaceDescriptor());
@@ -495,7 +514,7 @@
      * Implemented to call the more convenient version
      * {@link #dump(FileDescriptor, PrintWriter, String[])}.
      */
-    public void dump(FileDescriptor fd, String[] args) {
+    public void dump(@NonNull FileDescriptor fd, @Nullable String[] args) {
         FileOutputStream fout = new FileOutputStream(fd);
         PrintWriter pw = new FastPrintWriter(fout);
         try {
@@ -531,7 +550,7 @@
      * Like {@link #dump(FileDescriptor, String[])}, but ensures the target
      * executes asynchronously.
      */
-    public void dumpAsync(final FileDescriptor fd, final String[] args) {
+    public void dumpAsync(@NonNull final FileDescriptor fd, @Nullable final String[] args) {
         final FileOutputStream fout = new FileOutputStream(fd);
         final PrintWriter pw = new FastPrintWriter(fout);
         Thread thr = new Thread("Binder.dumpAsync") {
@@ -554,7 +573,8 @@
      * closed for you after you return.
      * @param args additional arguments to the dump request.
      */
-    protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
+    protected void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter fout,
+            @Nullable String[] args) {
     }
 
     /**
@@ -567,9 +587,10 @@
      * @throws RemoteException
      * @hide
      */
-    public void shellCommand(FileDescriptor in, FileDescriptor out, FileDescriptor err,
-            String[] args, ShellCallback callback,
-            ResultReceiver resultReceiver) throws RemoteException {
+    public void shellCommand(@Nullable FileDescriptor in, @Nullable FileDescriptor out,
+            @Nullable FileDescriptor err,
+            @NonNull String[] args, @Nullable ShellCallback callback,
+            @NonNull ResultReceiver resultReceiver) throws RemoteException {
         onShellCommand(in, out, err, args, callback, resultReceiver);
     }
 
@@ -581,8 +602,10 @@
      * Consider using {@link ShellCommand} to help in the implementation.</p>
      * @hide
      */
-    public void onShellCommand(FileDescriptor in, FileDescriptor out, FileDescriptor err,
-            String[] args, ShellCallback callback, ResultReceiver resultReceiver) throws RemoteException {
+    public void onShellCommand(@Nullable FileDescriptor in, @Nullable FileDescriptor out,
+            @Nullable FileDescriptor err,
+            @NonNull String[] args, @Nullable ShellCallback callback,
+            @NonNull ResultReceiver resultReceiver) throws RemoteException {
         FileOutputStream fout = new FileOutputStream(err != null ? err : out);
         PrintWriter pw = new FastPrintWriter(fout);
         pw.println("No shell command implementation.");
@@ -594,7 +617,7 @@
      * Default implementation rewinds the parcels and calls onTransact.  On
      * the remote side, transact calls into the binder to do the IPC.
      */
-    public final boolean transact(int code, Parcel data, Parcel reply,
+    public final boolean transact(int code, @NonNull Parcel data, @Nullable Parcel reply,
             int flags) throws RemoteException {
         if (false) Log.v("Binder", "Transact: " + code + " to " + this);
 
@@ -611,19 +634,19 @@
     /**
      * Local implementation is a no-op.
      */
-    public void linkToDeath(DeathRecipient recipient, int flags) {
+    public void linkToDeath(@NonNull DeathRecipient recipient, int flags) {
     }
 
     /**
      * Local implementation is a no-op.
      */
-    public boolean unlinkToDeath(DeathRecipient recipient, int flags) {
+    public boolean unlinkToDeath(@NonNull DeathRecipient recipient, int flags) {
         return true;
     }
     
     protected void finalize() throws Throwable {
         try {
-            destroy();
+            destroyBinder();
         } finally {
             super.finalize();
         }
@@ -653,7 +676,7 @@
     }
 
     private native final void init();
-    private native final void destroy();
+    private native final void destroyBinder();
 
     // Entry point from android_util_Binder.cpp's onTransact
     private boolean execTransact(int code, long dataObj, long replyObj,
@@ -689,13 +712,6 @@
                 reply.writeException(e);
             }
             res = true;
-        } catch (OutOfMemoryError e) {
-            // Unconditionally log this, since this is generally unrecoverable.
-            Log.e(TAG, "Caught an OutOfMemoryError from the binder stub implementation.", e);
-            RuntimeException re = new RuntimeException("Out of memory", e);
-            reply.setDataPosition(0);
-            reply.writeException(re);
-            res = true;
         } finally {
             if (tracingEnabled) {
                 Trace.traceEnd(Trace.TRACE_TAG_ALWAYS);
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index a2fb9db..3c1cdc9 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -19,9 +19,11 @@
 import android.Manifest;
 import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
+import android.app.Application;
 import android.content.Context;
 import android.text.TextUtils;
 import android.util.Slog;
+import android.view.View;
 
 import com.android.internal.telephony.TelephonyProperties;
 
@@ -115,8 +117,14 @@
     public static final String SERIAL = getString("no.such.thing");
 
     /**
-     * Gets the hardware serial, if available.
-     * @return The serial if specified.
+     * Gets the hardware serial number, if available.
+     *
+     * <p class="note"><b>Note:</b> Root access may allow you to modify device identifiers, such as
+     * the hardware serial number. If you change these identifiers, you can use
+     * <a href="/training/articles/security-key-attestation.html">key attestation</a> to obtain
+     * proof of the device's original identifiers.
+     *
+     * @return The serial number if specified.
      */
     @RequiresPermission(Manifest.permission.READ_PHONE_STATE)
     public static String getSerial() {
@@ -757,8 +765,106 @@
 
         /**
          * O.
+         *
+         * <p>Applications targeting this or a later release will get these
+         * new changes in behavior:</p>
+         * <ul>
+         * <li><a href="{@docRoot}about/versions/oreo/background.html">Background execution limits</a>
+         * are applied to the application.</li>
+         * <li>The behavior of AccountManager's
+         * {@link android.accounts.AccountManager#getAccountsByType},
+         * {@link android.accounts.AccountManager#getAccountsByTypeAndFeatures}, and
+         * {@link android.accounts.AccountManager#hasFeatures} has changed as documented there.</li>
+         * <li>{@link android.app.ActivityManager.RunningAppProcessInfo#IMPORTANCE_PERCEPTIBLE_PRE_26}
+         * is now returned as
+         * {@link android.app.ActivityManager.RunningAppProcessInfo#IMPORTANCE_PERCEPTIBLE}.</li>
+         * <li>The {@link android.app.NotificationManager} now requires the use of notification
+         * channels.</li>
+         * <li>Changes to the strict mode that are set in
+         * {@link Application#onCreate Application.onCreate} will no longer be clobbered after
+         * that function returns.</li>
+         * <li>A shared library apk with native code will have that native code included in
+         * the library path of its clients.</li>
+         * <li>{@link android.content.Context#getSharedPreferences Context.getSharedPreferences}
+         * in credential encrypted storage will throw an exception before the user is unlocked.</li>
+         * <li>Attempting to retrieve a {@link Context#FINGERPRINT_SERVICE} on a device that
+         * does not support that feature will now throw a runtime exception.</li>
+         * <li>{@link android.app.Fragment} will stop any active view animations when
+         * the fragment is stopped.</li>
+         * <li>Some compatibility code in Resources that attempts to use the default Theme
+         * the app may be using will be turned off, requiring the app to explicitly request
+         * resources with the right theme.</li>
+         * <li>{@link android.content.ContentResolver#notifyChange ContentResolver.notifyChange} and
+         * {@link android.content.ContentResolver#registerContentObserver
+         * ContentResolver.registerContentObserver}
+         * will throw a SecurityException if the caller does not have permission to access
+         * the provider (or the provider doesn't exit); otherwise the call will be silently
+         * ignored.</li>
+         * <li>{@link android.hardware.camera2.CameraDevice#createCaptureRequest
+         * CameraDevice.createCaptureRequest} will enable
+         * {@link android.hardware.camera2.CaptureRequest#CONTROL_ENABLE_ZSL} by default for
+         * still image capture.</li>
+         * <li>WallpaperManager's {@link android.app.WallpaperManager#getWallpaperFile},
+         * {@link android.app.WallpaperManager#getDrawable},
+         * {@link android.app.WallpaperManager#getFastDrawable},
+         * {@link android.app.WallpaperManager#peekDrawable}, and
+         * {@link android.app.WallpaperManager#peekFastDrawable} will throw an exception
+         * if you can not access the wallpaper.</li>
+         * <li>The behavior of
+         * {@link android.hardware.usb.UsbDeviceConnection#requestWait UsbDeviceConnection.requestWait}
+         * is modified as per the documentation there.</li>
+         * <li>{@link StrictMode.VmPolicy.Builder#detectAll StrictMode.VmPolicy.Builder.detectAll}
+         * will also enable {@link StrictMode.VmPolicy.Builder#detectContentUriWithoutPermission}
+         * and {@link StrictMode.VmPolicy.Builder#detectUntaggedSockets}.</li>
+         * <li>{@link StrictMode.ThreadPolicy.Builder#detectAll StrictMode.ThreadPolicy.Builder.detectAll}
+         * will also enable {@link StrictMode.ThreadPolicy.Builder#detectUnbufferedIo}.</li>
+         * <li>{@link android.provider.DocumentsContract}'s various methods will throw failure
+         * exceptions back to the caller instead of returning null.
+         * <li>{@link View#hasFocusable View.hasFocusable} now includes auto-focusable views.</li>
+         * <li>{@link android.view.SurfaceView} will no longer always change the underlying
+         * Surface object when something about it changes; apps need to look at the current
+         * state of the object to determine which things they are interested in have changed.</li>
+         * <li>{@link android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY} must be
+         * used for overlay windows, other system overlay window types are not allowed.</li>
+         * <li>{@link android.view.ViewTreeObserver#addOnDrawListener
+         * ViewTreeObserver.addOnDrawListener} will throw an exception if called from within
+         * onDraw.</li>
+         * <li>{@link android.graphics.Canvas#setBitmap Canvas.setBitmap} will no longer preserve
+         * the current matrix and clip stack of the canvas.</li>
+         * <li>{@link android.widget.ListPopupWindow#setHeight ListPopupWindow.setHeight}
+         * will throw an exception if a negative height is supplied.</li>
+         * <li>{@link android.widget.TextView} will use internationalized input for numbers,
+         * dates, and times.</li>
+         * <li>{@link android.widget.Toast} must be used for showing toast windows; the toast
+         * window type can not be directly used.</li>
+         * <li>{@link android.net.wifi.WifiManager#getConnectionInfo WifiManager.getConnectionInfo}
+         * requires that the caller hold the location permission to return BSSID/SSID</li>
+         * <li>{@link android.net.wifi.p2p.WifiP2pManager#requestPeers WifiP2pManager.requestPeers}
+         * requires the caller hold the location permission.</li>
+         * <li>{@link android.R.attr#maxAspectRatio} defaults to 0, meaning there is no restriction
+         * on the app's maximum aspect ratio (so it can be stretched to fill larger screens).</li>
+         * <li>{@link android.R.attr#focusable} defaults to a new state ({@code auto}) where it will
+         * inherit the value of {@link android.R.attr#clickable} unless explicitly overridden.</li>
+         * <li>A default theme-appropriate focus-state highlight will be supplied to all Views
+         * which don't provide a focus-state drawable themselves. This can be disabled by setting
+         * {@link android.R.attr#defaultFocusHighlightEnabled} to false.</li>
+         * </ul>
          */
         public static final int O = 26;
+
+        /**
+         * O MR1.
+         *
+         * <p>Applications targeting this or a later release will get these
+         * new changes in behavior:</p>
+         * <ul>
+         * <li>Apps exporting and linking to apk shared libraries must explicitly
+         * enumerate all signing certificates in a consistent order.</li>
+         * <li>{@link android.R.attr#screenOrientation} can not be used to request a fixed
+         * orientation if the associated activity is not fullscreen and opaque.</li>
+         * </ul>
+         */
+        public static final int O_MR1 = 27;
     }
 
     /** The type of build, like "user" or "eng". */
diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java
index ec01364..c58153a 100644
--- a/core/java/android/os/Bundle.java
+++ b/core/java/android/os/Bundle.java
@@ -22,6 +22,8 @@
 import android.util.SizeF;
 import android.util.SparseArray;
 
+import com.android.internal.annotations.VisibleForTesting;
+
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
@@ -32,15 +34,29 @@
  * @see PersistableBundle
  */
 public final class Bundle extends BaseBundle implements Cloneable, Parcelable {
-    private static final int FLAG_HAS_FDS = 1 << 8;
-    private static final int FLAG_HAS_FDS_KNOWN = 1 << 9;
-    private static final int FLAG_ALLOW_FDS = 1 << 10;
+    @VisibleForTesting
+    static final int FLAG_HAS_FDS = 1 << 8;
+
+    @VisibleForTesting
+    static final int FLAG_HAS_FDS_KNOWN = 1 << 9;
+
+    @VisibleForTesting
+    static final int FLAG_ALLOW_FDS = 1 << 10;
 
     public static final Bundle EMPTY;
 
+    /**
+     * Special extras used to denote extras have been stripped off.
+     * @hide
+     */
+    public static final Bundle STRIPPED;
+
     static {
         EMPTY = new Bundle();
         EMPTY.mMap = ArrayMap.EMPTY;
+
+        STRIPPED = new Bundle();
+        STRIPPED.putInt("STRIPPED", 1);
     }
 
     /**
@@ -56,20 +72,42 @@
      * will be unparcelled on first contact, using the assigned ClassLoader.
      *
      * @param parcelledData a Parcel containing a Bundle
+     *
+     * @hide
      */
-    Bundle(Parcel parcelledData) {
+    @VisibleForTesting
+    public Bundle(Parcel parcelledData) {
         super(parcelledData);
-        mFlags = FLAG_HAS_FDS_KNOWN | FLAG_ALLOW_FDS;
-        if (mParcelledData.hasFileDescriptors()) {
-            mFlags |= FLAG_HAS_FDS;
-        }
+        mFlags = FLAG_ALLOW_FDS;
+        maybePrefillHasFds();
     }
 
-    /* package */ Bundle(Parcel parcelledData, int length) {
+    /**
+     * Constructor from a parcel for when the length is known *and is not stored in the parcel.*
+     * The other constructor that takes a parcel assumes the length is in the parcel.
+     *
+     * @hide
+     */
+    @VisibleForTesting
+    public Bundle(Parcel parcelledData, int length) {
         super(parcelledData, length);
-        mFlags = FLAG_HAS_FDS_KNOWN | FLAG_ALLOW_FDS;
-        if (mParcelledData.hasFileDescriptors()) {
-            mFlags |= FLAG_HAS_FDS;
+        mFlags = FLAG_ALLOW_FDS;
+        maybePrefillHasFds();
+    }
+
+    /**
+     * If {@link #mParcelledData} is not null, copy the HAS FDS bit from it because it's fast.
+     * Otherwise (if {@link #mParcelledData} is already null), leave {@link #FLAG_HAS_FDS_KNOWN}
+     * unset, because scanning a map is slower.  We'll do it lazily in
+     * {@link #hasFileDescriptors()}.
+     */
+    private void maybePrefillHasFds() {
+        if (mParcelledData != null) {
+            if (mParcelledData.hasFileDescriptors()) {
+                mFlags |= FLAG_HAS_FDS | FLAG_HAS_FDS_KNOWN;
+            } else {
+                mFlags |= FLAG_HAS_FDS_KNOWN;
+            }
         }
     }
 
@@ -1204,10 +1242,8 @@
      */
     public void readFromParcel(Parcel parcel) {
         super.readFromParcelInner(parcel);
-        mFlags = FLAG_HAS_FDS_KNOWN | FLAG_ALLOW_FDS;
-        if (mParcelledData.hasFileDescriptors()) {
-            mFlags |= FLAG_HAS_FDS;
-        }
+        mFlags = FLAG_ALLOW_FDS;
+        maybePrefillHasFds();
     }
 
     @Override
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index f243f37..22174ff 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -56,10 +56,10 @@
  * <p><strong>Logging Trace Files</strong></p>
  * <p>Debug can create log files that give details about an application, such as
  * a call stack and start/stop times for any running methods. See <a
-href="{@docRoot}guide/developing/tools/traceview.html">Traceview: A Graphical Log Viewer</a> for
- * information about reading trace files. To start logging trace files, call one
- * of the startMethodTracing() methods. To stop tracing, call
- * {@link #stopMethodTracing()}.
+ * href="{@docRoot}studio/profile/traceview.html">Inspect Trace Logs with
+ * Traceview</a> for information about reading trace files. To start logging
+ * trace files, call one of the startMethodTracing() methods. To stop tracing,
+ * call {@link #stopMethodTracing()}.
  */
 public final class Debug
 {
@@ -223,28 +223,69 @@
         /** @hide */
         public static final int OTHER_OTHER_MEMTRACK = 16;
 
+        // Needs to be declared here for the DVK_STAT ranges below.
+        /** @hide */
+        public static final int NUM_OTHER_STATS = 17;
+
+        // Dalvik subsections.
         /** @hide */
         public static final int OTHER_DALVIK_NORMAL = 17;
         /** @hide */
         public static final int OTHER_DALVIK_LARGE = 18;
         /** @hide */
-        public static final int OTHER_DALVIK_LINEARALLOC = 19;
+        public static final int OTHER_DALVIK_ZYGOTE = 19;
         /** @hide */
-        public static final int OTHER_DALVIK_ACCOUNTING = 20;
+        public static final int OTHER_DALVIK_NON_MOVING = 20;
+        // Section begins and ends for dumpsys, relative to the DALVIK categories.
         /** @hide */
-        public static final int OTHER_DALVIK_CODE_CACHE = 21;
+        public static final int OTHER_DVK_STAT_DALVIK_START =
+                OTHER_DALVIK_NORMAL - NUM_OTHER_STATS;
         /** @hide */
-        public static final int OTHER_DALVIK_ZYGOTE = 22;
+        public static final int OTHER_DVK_STAT_DALVIK_END =
+                OTHER_DALVIK_NON_MOVING - NUM_OTHER_STATS;
+
+        // Dalvik Other subsections.
         /** @hide */
-        public static final int OTHER_DALVIK_NON_MOVING = 23;
+        public static final int OTHER_DALVIK_OTHER_LINEARALLOC = 21;
         /** @hide */
-        public static final int OTHER_DALVIK_INDIRECT_REFERENCE_TABLE = 24;
+        public static final int OTHER_DALVIK_OTHER_ACCOUNTING = 22;
+        /** @hide */
+        public static final int OTHER_DALVIK_OTHER_CODE_CACHE = 23;
+        /** @hide */
+        public static final int OTHER_DALVIK_OTHER_COMPILER_METADATA = 24;
+        /** @hide */
+        public static final int OTHER_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE = 25;
+        /** @hide */
+        public static final int OTHER_DVK_STAT_DALVIK_OTHER_START =
+                OTHER_DALVIK_OTHER_LINEARALLOC - NUM_OTHER_STATS;
+        /** @hide */
+        public static final int OTHER_DVK_STAT_DALVIK_OTHER_END =
+                OTHER_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE - NUM_OTHER_STATS;
+
+        // Dex subsections (Boot vdex, App dex, and App vdex).
+        /** @hide */
+        public static final int OTHER_DEX_BOOT_VDEX = 26;
+        /** @hide */
+        public static final int OTHER_DEX_APP_DEX = 27;
+        /** @hide */
+        public static final int OTHER_DEX_APP_VDEX = 28;
+        /** @hide */
+        public static final int OTHER_DVK_STAT_DEX_START = OTHER_DEX_BOOT_VDEX - NUM_OTHER_STATS;
+        /** @hide */
+        public static final int OTHER_DVK_STAT_DEX_END = OTHER_DEX_APP_VDEX - NUM_OTHER_STATS;
+
+        // Art subsections (App image, boot image).
+        /** @hide */
+        public static final int OTHER_ART_APP = 29;
+        /** @hide */
+        public static final int OTHER_ART_BOOT = 30;
+        /** @hide */
+        public static final int OTHER_DVK_STAT_ART_START = OTHER_ART_APP - NUM_OTHER_STATS;
+        /** @hide */
+        public static final int OTHER_DVK_STAT_ART_END = OTHER_ART_BOOT - NUM_OTHER_STATS;
 
         /** @hide */
-        public static final int NUM_OTHER_STATS = 17;
-
-        /** @hide */
-        public static final int NUM_DVK_STATS = 8;
+        public static final int NUM_DVK_STATS = 14;
 
         /** @hide */
         public static final int NUM_CATEGORIES = 8;
@@ -408,12 +449,18 @@
                 case OTHER_OTHER_MEMTRACK: return "Other mtrack";
                 case OTHER_DALVIK_NORMAL: return ".Heap";
                 case OTHER_DALVIK_LARGE: return ".LOS";
-                case OTHER_DALVIK_LINEARALLOC: return ".LinearAlloc";
-                case OTHER_DALVIK_ACCOUNTING: return ".GC";
-                case OTHER_DALVIK_CODE_CACHE: return ".JITCache";
                 case OTHER_DALVIK_ZYGOTE: return ".Zygote";
                 case OTHER_DALVIK_NON_MOVING: return ".NonMoving";
-                case OTHER_DALVIK_INDIRECT_REFERENCE_TABLE: return ".IndirectRef";
+                case OTHER_DALVIK_OTHER_LINEARALLOC: return ".LinearAlloc";
+                case OTHER_DALVIK_OTHER_ACCOUNTING: return ".GC";
+                case OTHER_DALVIK_OTHER_CODE_CACHE: return ".JITCache";
+                case OTHER_DALVIK_OTHER_COMPILER_METADATA: return ".CompilerMetadata";
+                case OTHER_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE: return ".IndirectRef";
+                case OTHER_DEX_BOOT_VDEX: return ".Boot vdex";
+                case OTHER_DEX_APP_DEX: return ".App dex";
+                case OTHER_DEX_APP_VDEX: return ".App vdex";
+                case OTHER_ART_APP: return ".App art";
+                case OTHER_ART_BOOT: return ".Boot art";
                 default: return "????";
             }
         }
@@ -954,8 +1001,8 @@
      * under your package-specific directory on primary shared/external storage,
      * as returned by {@link Context#getExternalFilesDir(String)}.
      * <p>
-     * See <a href="{@docRoot}guide/developing/tools/traceview.html">Traceview:
-     * A Graphical Log Viewer</a> for information about reading trace files.
+     * See <a href="{@docRoot}studio/profile/traceview.html">Inspect Trace Logs
+     * with Traceview</a> for information about reading trace files.
      * <p class="note">
      * When method tracing is enabled, the VM will run more slowly than usual,
      * so the timings from the trace files should only be considered in relative
@@ -978,8 +1025,8 @@
      * your package-specific directory on primary shared/external storage, as
      * returned by {@link Context#getExternalFilesDir(String)}.
      * <p>
-     * See <a href="{@docRoot}guide/developing/tools/traceview.html">Traceview:
-     * A Graphical Log Viewer</a> for information about reading trace files.
+     * See <a href="{@docRoot}studio/profile/traceview.html">Inspect Trace Logs
+     * with Traceview</a> for information about reading trace files.
      * <p class="note">
      * When method tracing is enabled, the VM will run more slowly than usual,
      * so the timings from the trace files should only be considered in relative
@@ -1008,8 +1055,8 @@
      * your package-specific directory on primary shared/external storage, as
      * returned by {@link Context#getExternalFilesDir(String)}.
      * <p>
-     * See <a href="{@docRoot}guide/developing/tools/traceview.html">Traceview:
-     * A Graphical Log Viewer</a> for information about reading trace files.
+     * See <a href="{@docRoot}studio/profile/traceview.html">Inspect Trace Logs
+     * with Traceview</a> for information about reading trace files.
      * <p class="note">
      * When method tracing is enabled, the VM will run more slowly than usual,
      * so the timings from the trace files should only be considered in relative
@@ -1040,8 +1087,8 @@
      * your package-specific directory on primary shared/external storage, as
      * returned by {@link Context#getExternalFilesDir(String)}.
      * <p>
-     * See <a href="{@docRoot}guide/developing/tools/traceview.html">Traceview:
-     * A Graphical Log Viewer</a> for information about reading trace files.
+     * See <a href="{@docRoot}studio/profile/traceview.html">Inspect Trace Logs
+     * with Traceview</a> for information about reading trace files.
      * <p class="note">
      * When method tracing is enabled, the VM will run more slowly than usual,
      * so the timings from the trace files should only be considered in relative
@@ -1074,8 +1121,8 @@
      * your package-specific directory on primary shared/external storage, as
      * returned by {@link Context#getExternalFilesDir(String)}.
      * <p>
-     * See <a href="{@docRoot}guide/developing/tools/traceview.html">Traceview:
-     * A Graphical Log Viewer</a> for information about reading trace files.
+     * See <a href="{@docRoot}studio/profile/traceview.html">Inspect Trace Logs
+     * with Traceview</a> for information about reading trace files.
      *
      * @param tracePath Path to the trace log file to create. If {@code null},
      *            this will default to "dmtrace.trace". If the file already
@@ -1701,22 +1748,26 @@
     public static final int MEMINFO_SHMEM = 4;
     /** @hide */
     public static final int MEMINFO_SLAB = 5;
+     /** @hide */
+    public static final int MEMINFO_SLAB_RECLAIMABLE = 6;
+     /** @hide */
+    public static final int MEMINFO_SLAB_UNRECLAIMABLE = 7;
     /** @hide */
-    public static final int MEMINFO_SWAP_TOTAL = 6;
+    public static final int MEMINFO_SWAP_TOTAL = 8;
     /** @hide */
-    public static final int MEMINFO_SWAP_FREE = 7;
+    public static final int MEMINFO_SWAP_FREE = 9;
     /** @hide */
-    public static final int MEMINFO_ZRAM_TOTAL = 8;
+    public static final int MEMINFO_ZRAM_TOTAL = 10;
     /** @hide */
-    public static final int MEMINFO_MAPPED = 9;
+    public static final int MEMINFO_MAPPED = 11;
     /** @hide */
-    public static final int MEMINFO_VM_ALLOC_USED = 10;
+    public static final int MEMINFO_VM_ALLOC_USED = 12;
     /** @hide */
-    public static final int MEMINFO_PAGE_TABLES = 11;
+    public static final int MEMINFO_PAGE_TABLES = 13;
     /** @hide */
-    public static final int MEMINFO_KERNEL_STACK = 12;
+    public static final int MEMINFO_KERNEL_STACK = 14;
     /** @hide */
-    public static final int MEMINFO_COUNT = 13;
+    public static final int MEMINFO_COUNT = 15;
 
     /**
      * Retrieves /proc/meminfo.  outSizes is filled with fields
@@ -1814,6 +1865,13 @@
     public static native void dumpNativeHeap(FileDescriptor fd);
 
     /**
+     * Writes malloc info data to the specified file descriptor.
+     *
+     * @hide
+     */
+    public static native void dumpNativeMallocInfo(FileDescriptor fd);
+
+    /**
       * Returns a count of the extant instances of a class.
      *
      * @hide
diff --git a/core/java/android/os/Handler.java b/core/java/android/os/Handler.java
index b69a23a..3ca1005 100644
--- a/core/java/android/os/Handler.java
+++ b/core/java/android/os/Handler.java
@@ -76,11 +76,12 @@
     /**
      * Callback interface you can use when instantiating a Handler to avoid
      * having to implement your own subclass of Handler.
-     *
-     * @param msg A {@link android.os.Message Message} object
-     * @return True if no further handling is desired
      */
     public interface Callback {
+        /**
+         * @param msg A {@link android.os.Message Message} object
+         * @return True if no further handling is desired
+         */
         public boolean handleMessage(Message msg);
     }
     
diff --git a/core/java/android/os/HwBinder.java b/core/java/android/os/HwBinder.java
index b09c51c..866e20c 100644
--- a/core/java/android/os/HwBinder.java
+++ b/core/java/android/os/HwBinder.java
@@ -51,6 +51,11 @@
             String serviceName)
         throws RemoteException, NoSuchElementException;
 
+    public static native final void configureRpcThreadpool(
+            long maxThreads, boolean callerWillJoin);
+
+    public static native final void joinRpcThreadpool();
+
     // Returns address of the "freeFunction".
     private static native final long native_init();
 
diff --git a/core/java/android/os/IBinder.java b/core/java/android/os/IBinder.java
index f762a05..e74b0bb 100644
--- a/core/java/android/os/IBinder.java
+++ b/core/java/android/os/IBinder.java
@@ -16,6 +16,9 @@
 
 package android.os;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
 import java.io.FileDescriptor;
 
 /**
@@ -153,6 +156,14 @@
      * caller returns immediately, without waiting for a result from the
      * callee. Applies only if the caller and callee are in different
      * processes.
+     *
+     * <p>The system provides special ordering semantics for multiple oneway calls
+     * being made to the same IBinder object: these calls will be dispatched in the
+     * other process one at a time, with the same order as the original calls.  These
+     * are still dispatched by the IPC thread pool, so may execute on different threads,
+     * but the next one will not be dispatched until the previous one completes.  This
+     * ordering is not guaranteed for calls on different IBinder objects or when mixing
+     * oneway and non-oneway calls on the same IBinder object.</p>
      */
     int FLAG_ONEWAY             = 0x00000001;
 
@@ -166,7 +177,7 @@
     /**
      * Get the canonical name of the interface supported by this binder.
      */
-    public String getInterfaceDescriptor() throws RemoteException;
+    public @Nullable String getInterfaceDescriptor() throws RemoteException;
 
     /**
      * Check to see if the object still exists.
@@ -192,7 +203,7 @@
      * to instantiate a proxy class to marshall calls through
      * the transact() method.
      */
-    public IInterface queryLocalInterface(String descriptor);
+    public @Nullable IInterface queryLocalInterface(@NonNull String descriptor);
 
     /**
      * Print the object's state into the given stream.
@@ -200,7 +211,7 @@
      * @param fd The raw file descriptor that the dump is being sent to.
      * @param args additional arguments to the dump request.
      */
-    public void dump(FileDescriptor fd, String[] args) throws RemoteException;
+    public void dump(@NonNull FileDescriptor fd, @Nullable String[] args) throws RemoteException;
 
     /**
      * Like {@link #dump(FileDescriptor, String[])} but always executes
@@ -210,7 +221,8 @@
      * @param fd The raw file descriptor that the dump is being sent to.
      * @param args additional arguments to the dump request.
      */
-    public void dumpAsync(FileDescriptor fd, String[] args) throws RemoteException;
+    public void dumpAsync(@NonNull FileDescriptor fd, @Nullable String[] args)
+            throws RemoteException;
 
     /**
      * Execute a shell command on this object.  This may be performed asynchrously from the caller;
@@ -224,9 +236,10 @@
      * @param resultReceiver Called when the command has finished executing, with the result code.
      * @hide
      */
-    public void shellCommand(FileDescriptor in, FileDescriptor out, FileDescriptor err,
-            String[] args, ShellCallback shellCallback,
-            ResultReceiver resultReceiver) throws RemoteException;
+    public void shellCommand(@Nullable FileDescriptor in, @Nullable FileDescriptor out,
+            @Nullable FileDescriptor err,
+            @NonNull String[] args, @Nullable ShellCallback shellCallback,
+            @NonNull ResultReceiver resultReceiver) throws RemoteException;
 
     /**
      * Perform a generic operation with the object.
@@ -241,8 +254,12 @@
      * null if you are not interested in the return value.
      * @param flags Additional operation flags.  Either 0 for a normal
      * RPC, or {@link #FLAG_ONEWAY} for a one-way RPC.
+     *
+     * @return Returns the result from {@link Binder#onTransact}.  A successful call
+     * generally returns true; false generally means the transaction code was not
+     * understood.
      */
-    public boolean transact(int code, Parcel data, Parcel reply, int flags)
+    public boolean transact(int code, @NonNull Parcel data, @Nullable Parcel reply, int flags)
         throws RemoteException;
 
     /**
@@ -271,7 +288,7 @@
      * 
      * @see #unlinkToDeath
      */
-    public void linkToDeath(DeathRecipient recipient, int flags)
+    public void linkToDeath(@NonNull DeathRecipient recipient, int flags)
             throws RemoteException;
 
     /**
@@ -292,5 +309,5 @@
      * exception will <em>not</em> be thrown, and you will receive a false
      * return value instead.
      */
-    public boolean unlinkToDeath(DeathRecipient recipient, int flags);
+    public boolean unlinkToDeath(@NonNull DeathRecipient recipient, int flags);
 }
diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl
index 3de2174..0562716 100644
--- a/core/java/android/os/INetworkManagementService.aidl
+++ b/core/java/android/os/INetworkManagementService.aidl
@@ -220,6 +220,21 @@
     void unregisterTetheringStatsProvider(ITetheringStatsProvider provider);
 
     /**
+     * Reports that a tethering provider has reached a data limit.
+     *
+     * Currently triggers a global alert, which causes NetworkStatsService to poll counters and
+     * re-evaluate data usage.
+     *
+     * This does not take an interface name because:
+     * 1. The tethering offload stats provider cannot reliably determine the interface on which the
+     *    limit was reached, because the HAL does not provide it.
+     * 2. Firing an interface-specific alert instead of a global alert isn't really useful since in
+     *    all cases of interest, the system responds to both in the same way - it polls stats, and
+     *    then notifies NetworkPolicyManagerService of the fact.
+     */
+    void tetherLimitReached(ITetheringStatsProvider provider);
+
+    /**
      ** PPPD
      **/
 
@@ -266,7 +281,7 @@
     /**
      * Return summary of network statistics all tethering interfaces.
      */
-    NetworkStats getNetworkStatsTethering();
+    NetworkStats getNetworkStatsTethering(int how);
 
     /**
      * Set quota for an interface.
@@ -435,4 +450,6 @@
     int removeRoutesFromLocalNetwork(in List<RouteInfo> routes);
 
     void setAllowOnlyVpnForUids(boolean enable, in UidRange[] uidRanges);
+
+    boolean isNetworkRestricted(int uid);
 }
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl
index 037cccf..75f7c1f 100644
--- a/core/java/android/os/IPowerManager.aidl
+++ b/core/java/android/os/IPowerManager.aidl
@@ -59,6 +59,8 @@
 
     void setStayOnSetting(int val);
     void boostScreenBrightness(long time);
+
+    // --- deprecated ---
     boolean isScreenBrightnessBoosted();
 
     // temporarily overrides the screen brightness settings to allow the user to
diff --git a/core/java/android/os/IThermalEventListener.aidl b/core/java/android/os/IThermalEventListener.aidl
new file mode 100644
index 0000000..9a6de60
--- /dev/null
+++ b/core/java/android/os/IThermalEventListener.aidl
@@ -0,0 +1,32 @@
+/*
+** Copyright 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.os.Temperature;
+
+/**
+ * Listener for thermal events.
+ * {@hide}
+ */
+oneway interface IThermalEventListener {
+    /**
+     * Called when a thermal throttling start/stop event is received.
+     * @param temperature the temperature at which the event was generated.
+     */
+    void notifyThrottling(
+        in boolean isThrottling, in Temperature temperature);
+}
diff --git a/core/java/android/os/IThermalService.aidl b/core/java/android/os/IThermalService.aidl
new file mode 100644
index 0000000..e388eda
--- /dev/null
+++ b/core/java/android/os/IThermalService.aidl
@@ -0,0 +1,51 @@
+/*
+** Copyright 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.os.IThermalEventListener;
+import android.os.Temperature;
+
+/**
+ * {@hide}
+ */
+interface IThermalService {
+    /**
+      * Register a listener for thermal events.
+      * @param listener the IThermalEventListener to be notified.
+      * {@hide}
+      */
+    void registerThermalEventListener(in IThermalEventListener listener);
+    /**
+      * Unregister a previously-registered listener for thermal events.
+      * @param listener the IThermalEventListener to no longer be notified.
+      * {@hide}
+      */
+    void unregisterThermalEventListener(in IThermalEventListener listener);
+    /**
+      * Send a thermal throttling start/stop notification to all listeners.
+      * @param temperature the temperature at which the event was generated.
+      * {@hide}
+      */
+    oneway void notifyThrottling(
+        in boolean isThrottling, in Temperature temperature);
+    /**
+      * Return whether system performance is currently thermal throttling.
+      * @return true if thermal throttling is currently in effect
+      * {@hide}
+      */
+    boolean isThrottling();
+}
diff --git a/core/java/android/os/MemoryFile.java b/core/java/android/os/MemoryFile.java
index 6cec55a..ff3258f 100644
--- a/core/java/android/os/MemoryFile.java
+++ b/core/java/android/os/MemoryFile.java
@@ -16,68 +16,50 @@
 
 package android.os;
 
-import android.util.Log;
+import android.system.ErrnoException;
 
 import java.io.FileDescriptor;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.nio.ByteBuffer;
 
 
 /**
- * MemoryFile is a wrapper for the Linux ashmem driver.
- * MemoryFiles are backed by shared memory, which can be optionally
- * set to be purgeable.
+ * MemoryFile is a wrapper for {@link SharedMemory} which can optionally be set to purgeable.
+ *
+ * Applications should generally prefer to use {@link SharedMemory} which offers more flexible
+ * access & control over the shared memory region than MemoryFile does.
+ *
  * Purgeable files may have their contents reclaimed by the kernel
  * in low memory conditions (only if allowPurging is set to true).
  * After a file is purged, attempts to read or write the file will
  * cause an IOException to be thrown.
  */
-public class MemoryFile
-{
+public class MemoryFile {
     private static String TAG = "MemoryFile";
 
-    // mmap(2) protection flags from <sys/mman.h>
-    private static final int PROT_READ = 0x1;
-    private static final int PROT_WRITE = 0x2;
-
-    private static native FileDescriptor native_open(String name, int length) throws IOException;
-    // returns memory address for ashmem region
-    private static native long native_mmap(FileDescriptor fd, int length, int mode)
-            throws IOException;
-    private static native void native_munmap(long addr, int length) throws IOException;
-    private static native void native_close(FileDescriptor fd);
-    private static native int native_read(FileDescriptor fd, long address, byte[] buffer,
-            int srcOffset, int destOffset, int count, boolean isUnpinned) throws IOException;
-    private static native void native_write(FileDescriptor fd, long address, byte[] buffer,
-            int srcOffset, int destOffset, int count, boolean isUnpinned) throws IOException;
-    private static native void native_pin(FileDescriptor fd, boolean pin) throws IOException;
+    // Returns 'true' if purged, 'false' otherwise
+    private static native boolean native_pin(FileDescriptor fd, boolean pin) throws IOException;
     private static native int native_get_size(FileDescriptor fd) throws IOException;
 
-    private FileDescriptor mFD;        // ashmem file descriptor
-    private long mAddress;   // address of ashmem memory
-    private int mLength;    // total length of our ashmem region
+    private SharedMemory mSharedMemory;
+    private ByteBuffer mMapping;
     private boolean mAllowPurging = false;  // true if our ashmem region is unpinned
 
     /**
      * Allocates a new ashmem region. The region is initially not purgable.
      *
      * @param name optional name for the file (can be null).
-     * @param length of the memory file in bytes, must be non-negative.
+     * @param length of the memory file in bytes, must be positive.
      * @throws IOException if the memory file could not be created.
      */
     public MemoryFile(String name, int length) throws IOException {
-        mLength = length;
-        if (length >= 0) {
-            mFD = native_open(name, length);
-        } else {
-            throw new IOException("Invalid length: " + length);
-        }
-
-        if (length > 0) {
-            mAddress = native_mmap(mFD, length, PROT_READ | PROT_WRITE);
-        } else {
-            mAddress = 0;
+        try {
+            mSharedMemory = SharedMemory.create(name, length);
+            mMapping = mSharedMemory.mapReadWrite();
+        } catch (ErrnoException ex) {
+            ex.rethrowAsIOException();
         }
     }
 
@@ -87,9 +69,7 @@
      */
     public void close() {
         deactivate();
-        if (!isClosed()) {
-            native_close(mFD);
-        }
+        mSharedMemory.close();
     }
 
     /**
@@ -100,35 +80,30 @@
      * @hide
      */
     void deactivate() {
-        if (!isDeactivated()) {
-            try {
-                native_munmap(mAddress, mLength);
-                mAddress = 0;
-            } catch (IOException ex) {
-                Log.e(TAG, ex.toString());
+        if (mMapping != null) {
+            SharedMemory.unmap(mMapping);
+            mMapping = null;
+        }
+    }
+
+    private void checkActive() throws IOException {
+        if (mMapping == null) {
+            throw new IOException("MemoryFile has been deactivated");
+        }
+    }
+
+    private void beginAccess() throws IOException {
+        checkActive();
+        if (mAllowPurging) {
+            if (native_pin(mSharedMemory.getFileDescriptor(), true)) {
+                throw new IOException("MemoryFile has been purged");
             }
         }
     }
 
-    /**
-     * Checks whether the memory file has been deactivated.
-     */
-    private boolean isDeactivated() {
-        return mAddress == 0;
-    }
-
-    /**
-     * Checks whether the memory file has been closed.
-     */
-    private boolean isClosed() {
-        return !mFD.valid();
-    }
-
-    @Override
-    protected void finalize() {
-        if (!isClosed()) {
-            Log.e(TAG, "MemoryFile.finalize() called while ashmem still open");
-            close();
+    private void endAccess() throws IOException {
+        if (mAllowPurging) {
+            native_pin(mSharedMemory.getFileDescriptor(), false);
         }
     }
 
@@ -138,14 +113,19 @@
      * @return file length.
      */
     public int length() {
-        return mLength;
+        return mSharedMemory.getSize();
     }
 
     /**
      * Is memory file purging enabled?
      *
      * @return true if the file may be purged.
+     *
+     * @deprecated Purgable is considered generally fragile and hard to use safely. Applications
+     * are recommend to instead use {@link android.content.ComponentCallbacks2#onTrimMemory(int)}
+     * to react to memory events and release shared memory regions as appropriate.
      */
+    @Deprecated
     public boolean isPurgingAllowed() {
         return mAllowPurging;
     }
@@ -156,11 +136,16 @@
      * @param allowPurging true if the operating system can purge the contents
      * of the file in low memory situations
      * @return previous value of allowPurging
+     *
+     * @deprecated Purgable is considered generally fragile and hard to use safely. Applications
+     * are recommend to instead use {@link android.content.ComponentCallbacks2#onTrimMemory(int)}
+     * to react to memory events and release shared memory regions as appropriate.
      */
+    @Deprecated
     synchronized public boolean allowPurging(boolean allowPurging) throws IOException {
         boolean oldValue = mAllowPurging;
         if (oldValue != allowPurging) {
-            native_pin(mFD, !allowPurging);
+            native_pin(mSharedMemory.getFileDescriptor(), !allowPurging);
             mAllowPurging = allowPurging;
         }
         return oldValue;
@@ -197,16 +182,14 @@
      */
     public int readBytes(byte[] buffer, int srcOffset, int destOffset, int count)
             throws IOException {
-        if (isDeactivated()) {
-            throw new IOException("Can't read from deactivated memory file.");
+        beginAccess();
+        try {
+            mMapping.position(srcOffset);
+            mMapping.get(buffer, destOffset, count);
+        } finally {
+            endAccess();
         }
-        if (destOffset < 0 || destOffset > buffer.length || count < 0
-                || count > buffer.length - destOffset
-                || srcOffset < 0 || srcOffset > mLength
-                || count > mLength - srcOffset) {
-            throw new IndexOutOfBoundsException();
-        }
-        return native_read(mFD, mAddress, buffer, srcOffset, destOffset, count, mAllowPurging);
+        return count;
     }
 
     /**
@@ -221,16 +204,13 @@
      */
     public void writeBytes(byte[] buffer, int srcOffset, int destOffset, int count)
             throws IOException {
-        if (isDeactivated()) {
-            throw new IOException("Can't write to deactivated memory file.");
+        beginAccess();
+        try {
+            mMapping.position(destOffset);
+            mMapping.put(buffer, srcOffset, count);
+        } finally {
+            endAccess();
         }
-        if (srcOffset < 0 || srcOffset > buffer.length || count < 0
-                || count > buffer.length - srcOffset
-                || destOffset < 0 || destOffset > mLength
-                || count > mLength - destOffset) {
-            throw new IndexOutOfBoundsException();
-        }
-        native_write(mFD, mAddress, buffer, srcOffset, destOffset, count, mAllowPurging);
     }
 
     /**
@@ -243,7 +223,7 @@
      * @hide
      */
     public FileDescriptor getFileDescriptor() throws IOException {
-        return mFD;
+        return mSharedMemory.getFileDescriptor();
     }
 
     /**
@@ -266,10 +246,10 @@
 
         @Override
         public int available() throws IOException {
-            if (mOffset >= mLength) {
+            if (mOffset >= mSharedMemory.getSize()) {
                 return 0;
             }
-            return mLength - mOffset;
+            return mSharedMemory.getSize() - mOffset;
         }
 
         @Override
@@ -319,8 +299,8 @@
 
         @Override
         public long skip(long n) throws IOException {
-            if (mOffset + n > mLength) {
-                n = mLength - mOffset;
+            if (mOffset + n > mSharedMemory.getSize()) {
+                n = mSharedMemory.getSize() - mOffset;
             }
             mOffset += n;
             return n;
diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java
index 3dbab2c..7da3e1f 100644
--- a/core/java/android/os/Parcel.java
+++ b/core/java/android/os/Parcel.java
@@ -27,6 +27,7 @@
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
 
+import dalvik.annotation.optimization.CriticalNative;
 import dalvik.annotation.optimization.FastNative;
 import dalvik.system.VMRuntime;
 
@@ -131,7 +132,7 @@
  * caller of the read function must know what type to expect and pass in the
  * appropriate {@link Parcelable.Creator Parcelable.Creator} instead to
  * properly construct the new object and read its data.  (To more efficient
- * write and read a single Parceable object that is not null, you can directly
+ * write and read a single Parcelable object that is not null, you can directly
  * call {@link Parcelable#writeToParcel Parcelable.writeToParcel} and
  * {@link Parcelable.Creator#createFromParcel Parcelable.Creator.createFromParcel}
  * yourself.)</p>
@@ -260,24 +261,24 @@
     // see libbinder's binder/Status.h
     private static final int EX_TRANSACTION_FAILED = -129;
 
-    @FastNative
+    @CriticalNative
     private static native int nativeDataSize(long nativePtr);
-    @FastNative
+    @CriticalNative
     private static native int nativeDataAvail(long nativePtr);
-    @FastNative
+    @CriticalNative
     private static native int nativeDataPosition(long nativePtr);
-    @FastNative
+    @CriticalNative
     private static native int nativeDataCapacity(long nativePtr);
     @FastNative
     private static native long nativeSetDataSize(long nativePtr, int size);
-    @FastNative
+    @CriticalNative
     private static native void nativeSetDataPosition(long nativePtr, int pos);
     @FastNative
     private static native void nativeSetDataCapacity(long nativePtr, int size);
 
-    @FastNative
+    @CriticalNative
     private static native boolean nativePushAllowFds(long nativePtr, boolean allowFds);
-    @FastNative
+    @CriticalNative
     private static native void nativeRestoreAllowFds(long nativePtr, boolean lastValue);
 
     private static native void nativeWriteByteArray(long nativePtr, byte[] b, int offset, int len);
@@ -290,22 +291,22 @@
     private static native void nativeWriteFloat(long nativePtr, float val);
     @FastNative
     private static native void nativeWriteDouble(long nativePtr, double val);
-    private static native void nativeWriteString(long nativePtr, String val);
+    static native void nativeWriteString(long nativePtr, String val);
     private static native void nativeWriteStrongBinder(long nativePtr, IBinder val);
     private static native long nativeWriteFileDescriptor(long nativePtr, FileDescriptor val);
 
     private static native byte[] nativeCreateByteArray(long nativePtr);
     private static native boolean nativeReadByteArray(long nativePtr, byte[] dest, int destLen);
     private static native byte[] nativeReadBlob(long nativePtr);
-    @FastNative
+    @CriticalNative
     private static native int nativeReadInt(long nativePtr);
-    @FastNative
+    @CriticalNative
     private static native long nativeReadLong(long nativePtr);
-    @FastNative
+    @CriticalNative
     private static native float nativeReadFloat(long nativePtr);
-    @FastNative
+    @CriticalNative
     private static native double nativeReadDouble(long nativePtr);
-    private static native String nativeReadString(long nativePtr);
+    static native String nativeReadString(long nativePtr);
     private static native IBinder nativeReadStrongBinder(long nativePtr);
     private static native FileDescriptor nativeReadFileDescriptor(long nativePtr);
 
@@ -319,11 +320,12 @@
     private static native int nativeCompareData(long thisNativePtr, long otherNativePtr);
     private static native long nativeAppendFrom(
             long thisNativePtr, long otherNativePtr, int offset, int length);
-    @FastNative
+    @CriticalNative
     private static native boolean nativeHasFileDescriptors(long nativePtr);
     private static native void nativeWriteInterfaceToken(long nativePtr, String interfaceName);
     private static native void nativeEnforceInterface(long nativePtr, String interfaceName);
 
+    @CriticalNative
     private static native long nativeGetBlobAshmemSize(long nativePtr);
 
     public final static Parcelable.Creator<String> STRING_CREATOR
@@ -337,6 +339,33 @@
     };
 
     /**
+     * @hide
+     */
+    public static class ReadWriteHelper {
+        public static final ReadWriteHelper DEFAULT = new ReadWriteHelper();
+
+        /**
+         * Called when writing a string to a parcel. Subclasses wanting to write a string
+         * must use {@link #writeStringNoHelper(String)} to avoid
+         * infinity recursive calls.
+         */
+        public void writeString(Parcel p, String s) {
+            nativeWriteString(p.mNativePtr, s);
+        }
+
+        /**
+         * Called when reading a string to a parcel. Subclasses wanting to read a string
+         * must use {@link #readStringNoHelper()} to avoid
+         * infinity recursive calls.
+         */
+        public String readString(Parcel p) {
+            return nativeReadString(p.mNativePtr);
+        }
+    }
+
+    private ReadWriteHelper mReadWriteHelper = ReadWriteHelper.DEFAULT;
+
+    /**
      * Retrieve a new Parcel object from the pool.
      */
     public static Parcel obtain() {
@@ -350,6 +379,7 @@
                     if (DEBUG_RECYCLE) {
                         p.mStack = new RuntimeException();
                     }
+                    p.mReadWriteHelper = ReadWriteHelper.DEFAULT;
                     return p;
                 }
             }
@@ -383,6 +413,25 @@
         }
     }
 
+    /**
+     * Set a {@link ReadWriteHelper}, which can be used to avoid having duplicate strings, for
+     * example.
+     *
+     * @hide
+     */
+    public void setReadWriteHelper(ReadWriteHelper helper) {
+        mReadWriteHelper = helper != null ? helper : ReadWriteHelper.DEFAULT;
+    }
+
+    /**
+     * @return whether this parcel has a {@link ReadWriteHelper}.
+     *
+     * @hide
+     */
+    public boolean hasReadWriteHelper() {
+        return (mReadWriteHelper != null) && (mReadWriteHelper != ReadWriteHelper.DEFAULT);
+    }
+
     /** @hide */
     public static native long getGlobalAllocSize();
 
@@ -623,6 +672,17 @@
      * growing dataCapacity() if needed.
      */
     public final void writeString(String val) {
+        mReadWriteHelper.writeString(this, val);
+    }
+
+    /**
+     * Write a string without going though a {@link ReadWriteHelper}.  Subclasses of
+     * {@link ReadWriteHelper} must use this method instead of {@link #writeString} to avoid
+     * infinity recursive calls.
+     *
+     * @hide
+     */
+    public void writeStringNoHelper(String val) {
         nativeWriteString(mNativePtr, val);
     }
 
@@ -1789,6 +1849,7 @@
      * <li>{@link IllegalStateException}
      * <li>{@link NullPointerException}
      * <li>{@link SecurityException}
+     * <li>{@link UnsupportedOperationException}
      * <li>{@link NetworkOnMainThreadException}
      * </ul>
      *
@@ -2003,6 +2064,17 @@
      * Read a string value from the parcel at the current dataPosition().
      */
     public final String readString() {
+        return mReadWriteHelper.readString(this);
+    }
+
+    /**
+     * Read a string without going though a {@link ReadWriteHelper}.  Subclasses of
+     * {@link ReadWriteHelper} must use this method instead of {@link #readString} to avoid
+     * infinity recursive calls.
+     *
+     * @hide
+     */
+    public String readStringNoHelper() {
         return nativeReadString(mNativePtr);
     }
 
@@ -3003,6 +3075,7 @@
         if (mOwnsNativeParcelObject) {
             updateNativeSize(nativeFreeBuffer(mNativePtr));
         }
+        mReadWriteHelper = ReadWriteHelper.DEFAULT;
     }
 
     private void destroy() {
@@ -3013,6 +3086,7 @@
             }
             mNativePtr = 0;
         }
+        mReadWriteHelper = null;
     }
 
     @Override
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index a85ed9c..960c9f5 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -23,6 +23,7 @@
 import android.annotation.SystemService;
 import android.content.Context;
 import android.util.Log;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
@@ -265,7 +266,13 @@
      * {@link #PROXIMITY_SCREEN_OFF_WAKE_LOCK} wake lock until the proximity sensor
      * indicates that an object is not in close proximity.
      */
-    public static final int RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY = 1;
+    public static final int RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY = 1 << 0;
+
+    /**
+     * Flag for {@link WakeLock#release(int)} when called due to timeout.
+     * @hide
+     */
+    public static final int RELEASE_FLAG_TIMEOUT = 1 << 16;
 
     /**
      * Brightness value for fully on.
@@ -848,15 +855,13 @@
      * to {@link #boostScreenBrightness(long)}.
      * @return {@code True} if the screen brightness is currently boosted. {@code False} otherwise.
      *
+     * @deprecated This call is rarely used and will be phased out soon.
      * @hide
+     * @removed
      */
-    @SystemApi
+    @SystemApi @Deprecated
     public boolean isScreenBrightnessBoosted() {
-        try {
-            return mService.isScreenBrightnessBoosted();
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
+        return false;
     }
 
     /**
@@ -1216,9 +1221,11 @@
      * Intent that is broadcast when the state of {@link #isScreenBrightnessBoosted()} has changed.
      * This broadcast is only sent to registered receivers.
      *
+     * @deprecated This intent is rarely used and will be phased out soon.
      * @hide
+     * @removed
      **/
-    @SystemApi
+    @SystemApi @Deprecated
     public static final String ACTION_SCREEN_BRIGHTNESS_BOOST_CHANGED
             = "android.os.action.SCREEN_BRIGHTNESS_BOOST_CHANGED";
 
@@ -1243,7 +1250,8 @@
         private String mTag;
         private final String mPackageName;
         private final IBinder mToken;
-        private int mCount;
+        private int mInternalCount;
+        private int mExternalCount;
         private boolean mRefCounted = true;
         private boolean mHeld;
         private WorkSource mWorkSource;
@@ -1252,7 +1260,7 @@
 
         private final Runnable mReleaser = new Runnable() {
             public void run() {
-                release();
+                release(RELEASE_FLAG_TIMEOUT);
             }
         };
 
@@ -1329,7 +1337,9 @@
         }
 
         private void acquireLocked() {
-            if (!mRefCounted || mCount++ == 0) {
+            mInternalCount++;
+            mExternalCount++;
+            if (!mRefCounted || mInternalCount == 1) {
                 // Do this even if the wake lock is already thought to be held (mHeld == true)
                 // because non-reference counted wake locks are not always properly released.
                 // For example, the keyguard's wake lock might be forcibly released by the
@@ -1374,7 +1384,11 @@
          */
         public void release(int flags) {
             synchronized (mToken) {
-                if (!mRefCounted || --mCount == 0) {
+                mInternalCount--;
+                if ((flags & RELEASE_FLAG_TIMEOUT) == 0) {
+                    mExternalCount--;
+                }
+                if (!mRefCounted || mInternalCount == 0) {
                     mHandler.removeCallbacks(mReleaser);
                     if (mHeld) {
                         Trace.asyncTraceEnd(Trace.TRACE_TAG_POWER, mTraceName, 0);
@@ -1386,7 +1400,7 @@
                         mHeld = false;
                     }
                 }
-                if (mCount < 0) {
+                if (mRefCounted && mExternalCount < 0) {
                     throw new RuntimeException("WakeLock under-locked " + mTag);
                 }
             }
@@ -1470,7 +1484,7 @@
             synchronized (mToken) {
                 return "WakeLock{"
                     + Integer.toHexString(System.identityHashCode(this))
-                    + " held=" + mHeld + ", refCount=" + mCount + "}";
+                    + " held=" + mHeld + ", refCount=" + mInternalCount + "}";
             }
         }
 
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 3074942..9351661 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -773,7 +773,8 @@
     /**
      * Return the current priority of a thread, based on Linux priorities.
      * 
-     * @param tid The identifier of the thread/process to change.
+     * @param tid The identifier of the thread/process. If tid equals zero, the priority of the
+     * calling process/thread will be returned.
      * 
      * @return Returns the current priority, as a Linux priority level,
      * from -20 for highest scheduling priority to 19 for lowest scheduling
diff --git a/core/java/android/os/SharedMemory.aidl b/core/java/android/os/SharedMemory.aidl
new file mode 100644
index 0000000..b7c695e
--- /dev/null
+++ b/core/java/android/os/SharedMemory.aidl
@@ -0,0 +1,20 @@
+/* //device/java/android/android/os/SharedMemory.aidl
+**
+** Copyright 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;
+
+parcelable SharedMemory;
\ No newline at end of file
diff --git a/core/java/android/os/SharedMemory.java b/core/java/android/os/SharedMemory.java
new file mode 100644
index 0000000..e6c7a17
--- /dev/null
+++ b/core/java/android/os/SharedMemory.java
@@ -0,0 +1,363 @@
+/*
+ * 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.annotation.NonNull;
+import android.annotation.Nullable;
+import android.system.ErrnoException;
+import android.system.Os;
+import android.system.OsConstants;
+
+import dalvik.system.VMRuntime;
+
+import java.io.Closeable;
+import java.io.FileDescriptor;
+import java.nio.ByteBuffer;
+import java.nio.DirectByteBuffer;
+import java.nio.NioUtils;
+
+import sun.misc.Cleaner;
+
+/**
+ * SharedMemory enables the creation, mapping, and protection control over anonymous shared memory.
+ */
+public final class SharedMemory implements Parcelable, Closeable {
+
+    private final FileDescriptor mFileDescriptor;
+    private final int mSize;
+    private final MemoryRegistration mMemoryRegistration;
+    private Cleaner mCleaner;
+
+    private SharedMemory(FileDescriptor fd) {
+        // This constructor is only used internally so it should be impossible to hit any of the
+        // exceptions unless something goes horribly wrong.
+        if (fd == null) {
+            throw new IllegalArgumentException(
+                    "Unable to create SharedMemory from a null FileDescriptor");
+        }
+        if (!fd.valid()) {
+            throw new IllegalArgumentException(
+                    "Unable to create SharedMemory from closed FileDescriptor");
+        }
+        mFileDescriptor = fd;
+        mSize = nGetSize(mFileDescriptor);
+        if (mSize <= 0) {
+            throw new IllegalArgumentException("FileDescriptor is not a valid ashmem fd");
+        }
+
+        mMemoryRegistration = new MemoryRegistration(mSize);
+        mCleaner = Cleaner.create(mFileDescriptor,
+                new Closer(mFileDescriptor, mMemoryRegistration));
+    }
+
+    /**
+     * Creates an anonymous SharedMemory instance with the provided debug name and size. The name
+     * is only used for debugging purposes and can help identify what the shared memory is used
+     * for when inspecting memory maps for the processes that have mapped this SharedMemory
+     * instance.
+     *
+     * @param name The debug name to use for this SharedMemory instance. This can be null, however
+     *             a debug name is recommended to help identify memory usage when using tools
+     *             such as lsof or examining /proc/[pid]/maps
+     * @param size The size of the shared memory to create. Must be greater than 0.
+     * @return A SharedMemory instance of the requested size
+     * @throws ErrnoException if the requested allocation fails.
+     */
+    public static @NonNull SharedMemory create(@Nullable String name, int size)
+            throws ErrnoException {
+        if (size <= 0) {
+            throw new IllegalArgumentException("Size must be greater than zero");
+        }
+        return new SharedMemory(nCreate(name, size));
+    }
+
+    private void checkOpen() {
+        if (!mFileDescriptor.valid()) {
+            throw new IllegalStateException("SharedMemory is closed");
+        }
+    }
+
+    private static final int PROT_MASK = OsConstants.PROT_READ | OsConstants.PROT_WRITE
+            | OsConstants.PROT_EXEC | OsConstants.PROT_NONE;
+
+    private static void validateProt(int prot) {
+        if ((prot & ~PROT_MASK) != 0) {
+            throw new IllegalArgumentException("Invalid prot value");
+        }
+    }
+
+    /**
+     * Sets the protection on the shared memory to the combination specified in prot, which
+     * is either a bitwise-or'd combination of {@link android.system.OsConstants#PROT_READ},
+     * {@link android.system.OsConstants#PROT_WRITE}, {@link android.system.OsConstants#PROT_EXEC}
+     * from {@link android.system.OsConstants}, or {@link android.system.OsConstants#PROT_NONE},
+     * to remove all further access.
+     *
+     * Note that protection can only ever be removed, not added. By default shared memory
+     * is created with protection set to PROT_READ | PROT_WRITE | PROT_EXEC. The protection
+     * passed here also only applies to any mappings created after calling this method. Existing
+     * mmaps of the shared memory retain whatever protection they had when they were created.
+     *
+     * A common usage of this is to share a read-only copy of the data with something else. To do
+     * that first create the read/write mapping with PROT_READ | PROT_WRITE,
+     * then call setProtect(PROT_READ) to remove write capability, then send the SharedMemory
+     * to another process. That process will only be able to mmap with PROT_READ.
+     *
+     * @param prot Any bitwise-or'ed combination of
+     *                  {@link android.system.OsConstants#PROT_READ},
+     *                  {@link android.system.OsConstants#PROT_WRITE}, and
+     *                  {@link android.system.OsConstants#PROT_EXEC}; or
+     *                  {@link android.system.OsConstants#PROT_NONE}
+     * @return Whether or not the requested protection was applied. Returns true on success,
+     * false if the requested protection was broader than the existing protection.
+     */
+    public boolean setProtect(int prot) {
+        checkOpen();
+        validateProt(prot);
+        int errno = nSetProt(mFileDescriptor, prot);
+        return errno == 0;
+    }
+
+    /**
+     * Returns the backing {@link FileDescriptor} for this SharedMemory object. The SharedMemory
+     * instance retains ownership of the FileDescriptor.
+     *
+     * This FileDescriptor is interoperable with the ASharedMemory NDK APIs.
+     *
+     * @return Returns the FileDescriptor associated with this object.
+     *
+     * @hide Exists only for MemoryFile interop
+     */
+    public @NonNull FileDescriptor getFileDescriptor() {
+        return mFileDescriptor;
+    }
+
+    /**
+     * Returns the backing native fd int for this SharedMemory object. The SharedMemory
+     * instance retains ownership of the fd.
+     *
+     * This fd is interoperable with the ASharedMemory NDK APIs.
+     *
+     * @return Returns the native fd associated with this object, or -1 if it is already closed.
+     *
+     * @hide Exposed for native ASharedMemory_dupFromJava()
+     */
+    public int getFd() {
+        return mFileDescriptor.getInt$();
+    }
+
+    /**
+     * @return The size of the SharedMemory region.
+     */
+    public int getSize() {
+        checkOpen();
+        return mSize;
+    }
+
+    /**
+     * Creates a read/write mapping of the entire shared memory region. This requires the the
+     * protection level of the shared memory is at least PROT_READ|PROT_WRITE or the map will fail.
+     *
+     * Use {@link #map(int, int, int)} to have more control over the mapping if desired.
+     * This is equivalent to map(OsConstants.PROT_READ | OsConstants.PROT_WRITE, 0, getSize())
+     *
+     * @return A ByteBuffer mapping
+     * @throws ErrnoException if the mmap call failed.
+     */
+    public @NonNull ByteBuffer mapReadWrite() throws ErrnoException {
+        return map(OsConstants.PROT_READ | OsConstants.PROT_WRITE, 0, mSize);
+    }
+
+    /**
+     * Creates a read-only mapping of the entire shared memory region. This requires the the
+     * protection level of the shared memory is at least PROT_READ or the map will fail.
+     *
+     * Use {@link #map(int, int, int)} to have more control over the mapping if desired.
+     * This is equivalent to map(OsConstants.PROT_READ, 0, getSize())
+     *
+     * @return A ByteBuffer mapping
+     * @throws ErrnoException if the mmap call failed.
+     */
+    public @NonNull ByteBuffer mapReadOnly() throws ErrnoException {
+        return map(OsConstants.PROT_READ, 0, mSize);
+    }
+
+    /**
+     * Creates an mmap of the SharedMemory with the specified prot, offset, and length. This will
+     * always produce a new ByteBuffer window to the backing shared memory region. Every call
+     * to map() may be paired with a call to {@link #unmap(ByteBuffer)} when the ByteBuffer
+     * returned by map() is no longer needed.
+     *
+     * @param prot A bitwise-or'd combination of PROT_READ, PROT_WRITE, PROT_EXEC, or PROT_NONE.
+     * @param offset The offset into the shared memory to begin mapping. Must be >= 0 and less than
+     *         getSize().
+     * @param length The length of the region to map. Must be > 0 and offset + length must not
+     *         exceed getSize().
+     * @return A ByteBuffer mapping.
+     * @throws ErrnoException if the mmap call failed.
+     */
+    public @NonNull ByteBuffer map(int prot, int offset, int length) throws ErrnoException {
+        checkOpen();
+        validateProt(prot);
+        if (offset < 0) {
+            throw new IllegalArgumentException("Offset must be >= 0");
+        }
+        if (length <= 0) {
+            throw new IllegalArgumentException("Length must be > 0");
+        }
+        if (offset + length > mSize) {
+            throw new IllegalArgumentException("offset + length must not exceed getSize()");
+        }
+        long address = Os.mmap(0, length, prot, OsConstants.MAP_SHARED, mFileDescriptor, offset);
+        boolean readOnly = (prot & OsConstants.PROT_WRITE) == 0;
+        Runnable unmapper = new Unmapper(address, length, mMemoryRegistration.acquire());
+        return new DirectByteBuffer(length, address, mFileDescriptor, unmapper, readOnly);
+    }
+
+    /**
+     * Unmaps a buffer previously returned by {@link #map(int, int, int)}. This will immediately
+     * release the backing memory of the ByteBuffer, invalidating all references to it. Only
+     * call this method if there are no duplicates of the ByteBuffer in use and don't
+     * access the ByteBuffer after calling this method.
+     *
+     * @param buffer The buffer to unmap
+     */
+    public static void unmap(@NonNull ByteBuffer buffer) {
+        if (buffer instanceof DirectByteBuffer) {
+            NioUtils.freeDirectBuffer(buffer);
+        } else {
+            throw new IllegalArgumentException(
+                    "ByteBuffer wasn't created by #map(int, int, int); can't unmap");
+        }
+    }
+
+    /**
+     * Close the backing {@link FileDescriptor} of this SharedMemory instance. Note that all
+     * open mappings of the shared memory will remain valid and may continue to be used. The
+     * shared memory will not be freed until all file descriptor handles are closed and all
+     * memory mappings are unmapped.
+     */
+    @Override
+    public void close() {
+        if (mCleaner != null) {
+            mCleaner.clean();
+            mCleaner = null;
+        }
+    }
+
+    @Override
+    public int describeContents() {
+        return CONTENTS_FILE_DESCRIPTOR;
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        checkOpen();
+        dest.writeFileDescriptor(mFileDescriptor);
+    }
+
+    public static final Parcelable.Creator<SharedMemory> CREATOR =
+            new Parcelable.Creator<SharedMemory>() {
+        @Override
+        public SharedMemory createFromParcel(Parcel source) {
+            FileDescriptor descriptor = source.readRawFileDescriptor();
+            return new SharedMemory(descriptor);
+        }
+
+        @Override
+        public SharedMemory[] newArray(int size) {
+            return new SharedMemory[size];
+        }
+    };
+
+    /**
+     * Cleaner that closes the FD
+     */
+    private static final class Closer implements Runnable {
+        private FileDescriptor mFd;
+        private MemoryRegistration mMemoryReference;
+
+        private Closer(FileDescriptor fd, MemoryRegistration memoryReference) {
+            mFd = fd;
+            mMemoryReference = memoryReference;
+        }
+
+        @Override
+        public void run() {
+            try {
+                Os.close(mFd);
+            } catch (ErrnoException e) { /* swallow error */ }
+            mMemoryReference.release();
+            mMemoryReference = null;
+        }
+    }
+
+    /**
+     * Cleaner that munmap regions
+     */
+    private static final class Unmapper implements Runnable {
+        private long mAddress;
+        private int mSize;
+        private MemoryRegistration mMemoryReference;
+
+        private Unmapper(long address, int size, MemoryRegistration memoryReference) {
+            mAddress = address;
+            mSize = size;
+            mMemoryReference = memoryReference;
+        }
+
+        @Override
+        public void run() {
+            try {
+                Os.munmap(mAddress, mSize);
+            } catch (ErrnoException e) { /* swallow exception */ }
+            mMemoryReference.release();
+            mMemoryReference = null;
+        }
+    }
+
+    /**
+     * Helper class that ensures that the native allocation pressure against the VM heap stays
+     * active until the FD is closed as well as all mappings from that FD are closed.
+     */
+    private static final class MemoryRegistration {
+        private int mSize;
+        private int mReferenceCount;
+
+        private MemoryRegistration(int size) {
+            mSize = size;
+            mReferenceCount = 1;
+            VMRuntime.getRuntime().registerNativeAllocation(mSize);
+        }
+
+        public synchronized MemoryRegistration acquire() {
+            mReferenceCount++;
+            return this;
+        }
+
+        public synchronized void release() {
+            mReferenceCount--;
+            if (mReferenceCount == 0) {
+                VMRuntime.getRuntime().registerNativeFree(mSize);
+            }
+        }
+    }
+
+    private static native FileDescriptor nCreate(String name, int size) throws ErrnoException;
+    private static native int nGetSize(FileDescriptor fd);
+    private static native int nSetProt(FileDescriptor fd, int prot);
+}
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index 2b82c77..3b6df5d 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -16,6 +16,7 @@
 package android.os;
 
 import android.animation.ValueAnimator;
+import android.annotation.TestApi;
 import android.app.ActivityManager;
 import android.app.ActivityThread;
 import android.app.ApplicationErrorReport;
@@ -124,9 +125,6 @@
     private static final String TAG = "StrictMode";
     private static final boolean LOG_V = Log.isLoggable(TAG, Log.VERBOSE);
 
-    private static final boolean IS_USER_BUILD = "user".equals(Build.TYPE);
-    private static final boolean IS_ENG_BUILD = "eng".equals(Build.TYPE);
-
     /**
      * Boolean system property to disable strict mode checks outright.
      * Set this to 'true' to force disable; 'false' has no effect on other
@@ -343,6 +341,7 @@
     private static volatile VmPolicy sVmPolicy = VmPolicy.LAX;
 
     /** {@hide} */
+    @TestApi
     public interface ViolationListener {
         public void onViolation(String message);
     }
@@ -350,6 +349,7 @@
     private static volatile ViolationListener sListener;
 
     /** {@hide} */
+    @TestApi
     public static void setViolationListener(ViolationListener listener) {
         sListener = listener;
     }
@@ -791,7 +791,7 @@
 
             /**
              * Detect when an {@link java.io.Closeable} or other
-             * object with a explict termination method is finalized
+             * object with an explicit termination method is finalized
              * without having been closed.
              *
              * <p>You always want to explicitly close such objects to
@@ -1188,7 +1188,7 @@
 
         // For debug builds, log event loop stalls to dropbox for analysis.
         // Similar logic also appears in ActivityThread.java for system apps.
-        if (!doFlashes && (IS_USER_BUILD || suppress)) {
+        if (!doFlashes && (Build.IS_USER || suppress)) {
             setCloseGuardEnabled(false);
             return false;
         }
@@ -1196,7 +1196,7 @@
         // Eng builds have flashes on all the time.  The suppression property
         // overrides this, so we force the behavior only after the short-circuit
         // check above.
-        if (IS_ENG_BUILD) {
+        if (Build.IS_ENG) {
             doFlashes = true;
         }
 
@@ -1205,7 +1205,7 @@
                 StrictMode.DETECT_DISK_READ |
                 StrictMode.DETECT_NETWORK;
 
-        if (!IS_USER_BUILD) {
+        if (!Build.IS_USER) {
             threadPolicyMask |= StrictMode.PENALTY_DROPBOX;
         }
         if (doFlashes) {
@@ -1216,23 +1216,25 @@
 
         // VM Policy controls CloseGuard, detection of Activity leaks,
         // and instance counting.
-        if (IS_USER_BUILD) {
+        if (Build.IS_USER) {
             setCloseGuardEnabled(false);
         } else {
             VmPolicy.Builder policyBuilder = new VmPolicy.Builder().detectAll();
-            if (!IS_ENG_BUILD) {
+            if (!Build.IS_ENG) {
                 // Activity leak detection causes too much slowdown for userdebug because of the
                 // GCs.
                 policyBuilder = policyBuilder.disable(DETECT_VM_ACTIVITY_LEAKS);
             }
             policyBuilder = policyBuilder.penaltyDropBox();
-            if (IS_ENG_BUILD) {
+            if (Build.IS_ENG) {
                 policyBuilder.penaltyLog();
             }
             // All core system components need to tag their sockets to aid
             // system health investigations
             if (android.os.Process.myUid() < android.os.Process.FIRST_APPLICATION_UID) {
-                policyBuilder.detectUntaggedSockets();
+                policyBuilder.enable(DETECT_VM_UNTAGGED_SOCKET);
+            } else {
+                policyBuilder.disable(DETECT_VM_UNTAGGED_SOCKET);
             }
             setVmPolicy(policyBuilder.build());
             setCloseGuardEnabled(vmClosableObjectLeaksEnabled());
@@ -2291,7 +2293,7 @@
      * @hide
      */
     public static Span enterCriticalSpan(String name) {
-        if (IS_USER_BUILD) {
+        if (Build.IS_USER) {
             return NO_OP_SPAN;
         }
         if (name == null || name.isEmpty()) {
diff --git a/core/java/android/os/SynchronousResultReceiver.java b/core/java/android/os/SynchronousResultReceiver.java
index d1b6288..6e1d4b3 100644
--- a/core/java/android/os/SynchronousResultReceiver.java
+++ b/core/java/android/os/SynchronousResultReceiver.java
@@ -43,9 +43,19 @@
     }
 
     private final CompletableFuture<Result> mFuture = new CompletableFuture<>();
+    private final String mName;
 
     public SynchronousResultReceiver() {
         super((Handler) null);
+        mName = null;
+    }
+
+    /**
+     * @param name Name for logging purposes
+     */
+    public SynchronousResultReceiver(String name) {
+        super((Handler) null);
+        mName = name;
     }
 
     @Override
@@ -54,6 +64,10 @@
         mFuture.complete(new Result(resultCode, resultData));
     }
 
+    public String getName() {
+        return mName;
+    }
+
     /**
      * Blocks waiting for the result from the remote client.
      *
diff --git a/core/java/android/os/Temperature.aidl b/core/java/android/os/Temperature.aidl
new file mode 100644
index 0000000..708c08f
--- /dev/null
+++ b/core/java/android/os/Temperature.aidl
@@ -0,0 +1,19 @@
+/*
+** Copyright 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;
+
+parcelable Temperature;
diff --git a/core/java/android/os/Temperature.java b/core/java/android/os/Temperature.java
new file mode 100644
index 0000000..3e48493
--- /dev/null
+++ b/core/java/android/os/Temperature.java
@@ -0,0 +1,101 @@
+/*
+ * 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;
+
+/**
+ * Temperature values used by IThermalService.
+ */
+
+/**
+ * @hide
+ */
+public class Temperature implements Parcelable {
+    /* Temperature value */
+    private float mValue;
+    /* A temperature type from HardwarePropertiesManager */
+    private int mType;
+
+    public Temperature() {
+        mType = Integer.MIN_VALUE;
+        mValue = HardwarePropertiesManager.UNDEFINED_TEMPERATURE;
+    }
+
+    public Temperature(float value, int type) {
+        mValue = value;
+        mType = type;
+    }
+
+    /**
+     * Return the temperature value.
+     * @return a temperature value in floating point.
+     */
+    public float getValue() {
+        return mValue;
+    }
+
+    /**
+     * Return the temperature type.
+     * @return a temperature type:
+     *         HardwarePropertiesManager.DEVICE_TEMPERATURE_CPU, etc.
+     */
+    public int getType() {
+        return mType;
+    }
+
+    /*
+     * Parcel read/write code must be kept in sync with
+     * frameworks/native/services/thermalservice/aidl/android/os/
+     * Temperature.cpp
+     */
+
+    private Temperature(Parcel p) {
+        readFromParcel(p);
+    }
+
+    /**
+     * Fill in Temperature members from a Parcel.
+     * @param p the parceled Temperature object.
+     */
+    public void readFromParcel(Parcel p) {
+        mValue = p.readFloat();
+        mType = p.readInt();
+    }
+
+    @Override
+    public void writeToParcel(Parcel p, int flags) {
+        p.writeFloat(mValue);
+        p.writeInt(mType);
+    }
+
+    public static final Parcelable.Creator<Temperature> CREATOR =
+            new Parcelable.Creator<Temperature>() {
+        @Override
+        public Temperature createFromParcel(Parcel p) {
+            return new Temperature(p);
+        }
+
+        @Override
+        public Temperature[] newArray(int size) {
+            return new Temperature[size];
+        }
+    };
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+}
diff --git a/core/java/android/os/UpdateEngine.java b/core/java/android/os/UpdateEngine.java
index 8549cff..ee0b623 100644
--- a/core/java/android/os/UpdateEngine.java
+++ b/core/java/android/os/UpdateEngine.java
@@ -21,8 +21,6 @@
 import android.os.IUpdateEngineCallback;
 import android.os.RemoteException;
 
-import android.util.Log;
-
 /**
  * UpdateEngine handles calls to the update engine which takes care of A/B OTA
  * updates. It wraps up the update engine Binder APIs and exposes them as
@@ -90,6 +88,8 @@
     }
 
     private IUpdateEngine mUpdateEngine;
+    private IUpdateEngineCallback mUpdateEngineCallback = null;
+    private final Object mUpdateEngineCallbackLock = new Object();
 
     /**
      * Creates a new instance.
@@ -107,40 +107,42 @@
      */
     @SystemApi
     public boolean bind(final UpdateEngineCallback callback, final Handler handler) {
-        IUpdateEngineCallback updateEngineCallback = new IUpdateEngineCallback.Stub() {
-            @Override
-            public void onStatusUpdate(final int status, final float percent) {
-                if (handler != null) {
-                    handler.post(new Runnable() {
-                        @Override
-                        public void run() {
-                            callback.onStatusUpdate(status, percent);
-                        }
-                    });
-                } else {
-                    callback.onStatusUpdate(status, percent);
+        synchronized (mUpdateEngineCallbackLock) {
+            mUpdateEngineCallback = new IUpdateEngineCallback.Stub() {
+                @Override
+                public void onStatusUpdate(final int status, final float percent) {
+                    if (handler != null) {
+                        handler.post(new Runnable() {
+                            @Override
+                            public void run() {
+                                callback.onStatusUpdate(status, percent);
+                            }
+                        });
+                    } else {
+                        callback.onStatusUpdate(status, percent);
+                    }
                 }
-            }
 
-            @Override
-            public void onPayloadApplicationComplete(final int errorCode) {
-                if (handler != null) {
-                    handler.post(new Runnable() {
-                        @Override
-                        public void run() {
-                            callback.onPayloadApplicationComplete(errorCode);
-                        }
-                    });
-                } else {
-                    callback.onPayloadApplicationComplete(errorCode);
+                @Override
+                public void onPayloadApplicationComplete(final int errorCode) {
+                    if (handler != null) {
+                        handler.post(new Runnable() {
+                            @Override
+                            public void run() {
+                                callback.onPayloadApplicationComplete(errorCode);
+                            }
+                        });
+                    } else {
+                        callback.onPayloadApplicationComplete(errorCode);
+                    }
                 }
-            }
-        };
+            };
 
-        try {
-            return mUpdateEngine.bind(updateEngineCallback);
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
+            try {
+                return mUpdateEngine.bind(mUpdateEngineCallback);
+            } catch (RemoteException e) {
+                throw e.rethrowFromSystemServer();
+            }
         }
     }
 
@@ -249,4 +251,23 @@
             throw e.rethrowFromSystemServer();
         }
     }
+
+    /**
+     * Unbinds the last bound callback function.
+     */
+    @SystemApi
+    public boolean unbind() {
+        synchronized (mUpdateEngineCallbackLock) {
+            if (mUpdateEngineCallback == null) {
+                return true;
+            }
+            try {
+                boolean result = mUpdateEngine.unbind(mUpdateEngineCallback);
+                mUpdateEngineCallback = null;
+                return result;
+            } catch (RemoteException e) {
+                throw e.rethrowFromSystemServer();
+            }
+        }
+    }
 }
diff --git a/core/java/android/os/VibrationEffect.java b/core/java/android/os/VibrationEffect.java
index fe9e8c6..da0ed54 100644
--- a/core/java/android/os/VibrationEffect.java
+++ b/core/java/android/os/VibrationEffect.java
@@ -149,14 +149,43 @@
      * provide a better experience than you could otherwise build using the generic building
      * blocks.
      *
+     * This will fallback to a generic pattern if one exists and there does not exist a
+     * hardware-specific implementation of the effect.
+     *
      * @param effectId The ID of the effect to perform:
-     * {@link #EFFECT_CLICK}, {@link #EFFECT_DOUBLE_CLICK}.
+     *                 {@link #EFFECT_CLICK}, {@link #EFFECT_DOUBLE_CLICK}, {@link #EFFECT_TICK}
      *
      * @return The desired effect.
      * @hide
      */
     public static VibrationEffect get(int effectId) {
-        VibrationEffect effect = new Prebaked(effectId);
+        return get(effectId, true);
+    }
+
+    /**
+     * Get a predefined vibration effect.
+     *
+     * Predefined effects are a set of common vibration effects that should be identical, regardless
+     * of the app they come from, in order to provide a cohesive experience for users across
+     * the entire device. They also may be custom tailored to the device hardware in order to
+     * provide a better experience than you could otherwise build using the generic building
+     * blocks.
+     *
+     * Some effects you may only want to play if there's a hardware specific implementation because
+     * they may, for example, be too disruptive to the user without tuning. The {@code fallback}
+     * parameter allows you to decide whether you want to fallback to the generic implementation or
+     * only play if there's a tuned, hardware specific one available.
+     *
+     * @param effectId The ID of the effect to perform:
+     *                 {@link #EFFECT_CLICK}, {@link #EFFECT_DOUBLE_CLICK}, {@link #EFFECT_TICK}
+     * @param fallback Whether to fallback to a generic pattern if a hardware specific
+     *                 implementation doesn't exist.
+     *
+     * @return The desired effect.
+     * @hide
+     */
+    public static VibrationEffect get(int effectId, boolean fallback) {
+        VibrationEffect effect = new Prebaked(effectId, fallback);
         effect.validate();
         return effect;
     }
@@ -374,19 +403,29 @@
     /** @hide */
     public static class Prebaked extends VibrationEffect implements Parcelable {
         private int mEffectId;
+        private boolean mFallback;
 
         public Prebaked(Parcel in) {
-            this(in.readInt());
+            this(in.readInt(), in.readByte() != 0);
         }
 
-        public Prebaked(int effectId) {
+        public Prebaked(int effectId, boolean fallback) {
             mEffectId = effectId;
+            mFallback = fallback;
         }
 
         public int getId() {
             return mEffectId;
         }
 
+        /**
+         * Whether the effect should fall back to a generic pattern if there's no hardware specific
+         * implementation of it.
+         */
+        public boolean shouldFallback() {
+            return mFallback;
+        }
+
         @Override
         public void validate() {
             switch (mEffectId) {
@@ -406,7 +445,7 @@
                 return false;
             }
             VibrationEffect.Prebaked other = (VibrationEffect.Prebaked) o;
-            return mEffectId == other.mEffectId;
+            return mEffectId == other.mEffectId && mFallback == other.mFallback;
         }
 
         @Override
@@ -416,7 +455,7 @@
 
         @Override
         public String toString() {
-            return "Prebaked{mEffectId=" + mEffectId + "}";
+            return "Prebaked{mEffectId=" + mEffectId + ", mFallback=" + mFallback + "}";
         }
 
 
@@ -424,6 +463,7 @@
         public void writeToParcel(Parcel out, int flags) {
             out.writeInt(PARCEL_TOKEN_EFFECT);
             out.writeInt(mEffectId);
+            out.writeByte((byte) (mFallback ? 1 : 0));
         }
 
         public static final Parcelable.Creator<Prebaked> CREATOR =
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index f2aa113..8533c7e 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -118,6 +118,8 @@
     public static final String PROP_SDCARDFS = "persist.sys.sdcardfs";
     /** {@hide} */
     public static final String PROP_VIRTUAL_DISK = "persist.sys.virtual_disk";
+    /** {@hide} */
+    public static final String PROP_ADOPTABLE_FBE = "persist.sys.adoptable_fbe";
 
     /** {@hide} */
     public static final String UUID_PRIVATE_INTERNAL = null;
@@ -737,7 +739,7 @@
      * {@link Environment#getDataDirectory()}, the returned value will be
      * {@link #UUID_DEFAULT}.
      *
-     * @throws IOException when the storage device at the given path isn't
+     * @throws IOException when the storage device hosting the given path isn't
      *             present, or when it doesn't have a valid UUID.
      */
     public @NonNull UUID getUuidForPath(@NonNull File path) throws IOException {
@@ -769,6 +771,19 @@
         throw new FileNotFoundException("Failed to find a storage device for " + volumeUuid);
     }
 
+    /**
+     * Test if the given file descriptor supports allocation of disk space using
+     * {@link #allocateBytes(FileDescriptor, long)}.
+     */
+    public boolean isAllocationSupported(@NonNull FileDescriptor fd) {
+        try {
+            getUuidForPath(ParcelFileDescriptor.getFile(fd));
+            return true;
+        } catch (IOException e) {
+            return false;
+        }
+    }
+
     /** {@hide} */
     public @NonNull List<VolumeInfo> getVolumes() {
         try {
@@ -1560,12 +1575,6 @@
         }
     }
 
-    /** @removed */
-    @Deprecated
-    public long getCacheQuotaBytes(@NonNull File path) throws IOException {
-        return getCacheQuotaBytes(getUuidForPath(path));
-    }
-
     /**
      * Return total size in bytes of all cached data belonging to the calling
      * app on the given storage volume.
@@ -1601,36 +1610,6 @@
         }
     }
 
-    /** @removed */
-    @Deprecated
-    public long getCacheSizeBytes(@NonNull File path) throws IOException {
-        return getCacheSizeBytes(getUuidForPath(path));
-    }
-
-    /** @removed */
-    @Deprecated
-    public long getCacheQuotaBytes() throws IOException {
-        return getCacheQuotaBytes(mContext.getCacheDir());
-    }
-
-    /** @removed */
-    @Deprecated
-    public long getCacheSizeBytes() throws IOException {
-        return getCacheSizeBytes(mContext.getCacheDir());
-    }
-
-    /** @removed */
-    @Deprecated
-    public long getExternalCacheQuotaBytes() throws IOException {
-        return getCacheQuotaBytes(mContext.getExternalCacheDir());
-    }
-
-    /** @removed */
-    @Deprecated
-    public long getExternalCacheSizeBytes() throws IOException {
-        return getCacheSizeBytes(mContext.getExternalCacheDir());
-    }
-
     /**
      * Flag indicating that a disk space allocation request should operate in an
      * aggressive mode. This flag should only be rarely used in situations that
@@ -1683,8 +1662,8 @@
      * itself on the given storage volume. This value is typically larger than
      * {@link File#getUsableSpace()}, since the system may be willing to delete
      * cached files to satisfy an allocation request. You can then allocate
-     * space for yourself using {@link #allocateBytes(UUID, long, int)} or
-     * {@link #allocateBytes(FileDescriptor, long, int)}.
+     * space for yourself using {@link #allocateBytes(UUID, long)} or
+     * {@link #allocateBytes(FileDescriptor, long)}.
      * <p>
      * This method is best used as a pre-flight check, such as deciding if there
      * is enough space to store an entire music album before you allocate space
@@ -1711,8 +1690,8 @@
      *            UUID for a specific path can be obtained using
      *            {@link #getUuidForPath(File)}.
      * @return the maximum number of new bytes that the calling app can allocate
-     *         using {@link #allocateBytes(UUID, long, int)} or
-     *         {@link #allocateBytes(FileDescriptor, long, int)}.
+     *         using {@link #allocateBytes(UUID, long)} or
+     *         {@link #allocateBytes(FileDescriptor, long)}.
      * @throws IOException when the storage device isn't present, or when it
      *             doesn't support allocating space.
      */
@@ -1739,26 +1718,17 @@
         }
     }
 
-    /** @removed */
-    @Deprecated
-    @WorkerThread
-    @SuppressLint("Doclava125")
-    public long getAllocatableBytes(@NonNull File path,
-            @RequiresPermission @AllocateFlags int flags) throws IOException {
-        return getAllocatableBytes(getUuidForPath(path), flags);
-    }
-
     /**
      * Allocate the requested number of bytes for your application to use on the
      * given storage volume. This will cause the system to delete any cached
      * files necessary to satisfy your request.
      * <p>
      * Attempts to allocate disk space beyond the value returned by
-     * {@link #getAllocatableBytes(UUID, int)} will fail.
+     * {@link #getAllocatableBytes(UUID)} will fail.
      * <p>
      * Since multiple apps can be running simultaneously, this method may be
      * subject to race conditions. If possible, consider using
-     * {@link #allocateBytes(FileDescriptor, long, int)} which will guarantee
+     * {@link #allocateBytes(FileDescriptor, long)} which will guarantee
      * that bytes are allocated to an opened file.
      * <p>
      * If you're progressively allocating an unbounded amount of storage space
@@ -1772,7 +1742,7 @@
      * @throws IOException when the storage device isn't present, or when it
      *             doesn't support allocating space, or if the device had
      *             trouble allocating the requested space.
-     * @see #getAllocatableBytes(UUID, int)
+     * @see #getAllocatableBytes(UUID)
      */
     @WorkerThread
     public void allocateBytes(@NonNull UUID storageUuid, @BytesLong long bytes)
@@ -1796,22 +1766,13 @@
         }
     }
 
-    /** @removed */
-    @Deprecated
-    @WorkerThread
-    @SuppressLint("Doclava125")
-    public void allocateBytes(@NonNull File path, @BytesLong long bytes,
-            @RequiresPermission @AllocateFlags int flags) throws IOException {
-        allocateBytes(getUuidForPath(path), bytes, flags);
-    }
-
     /**
      * Allocate the requested number of bytes for your application to use in the
      * given open file. This will cause the system to delete any cached files
      * necessary to satisfy your request.
      * <p>
      * Attempts to allocate disk space beyond the value returned by
-     * {@link #getAllocatableBytes(UUID, int)} will fail.
+     * {@link #getAllocatableBytes(UUID)} will fail.
      * <p>
      * This method guarantees that bytes have been allocated to the opened file,
      * otherwise it will throw if fast allocation is not possible. Fast
@@ -1832,6 +1793,7 @@
      *             doesn't support allocating space, or if the device had
      *             trouble allocating the requested space.
      * @see #getAllocatableBytes(UUID, int)
+     * @see #isAllocationSupported(FileDescriptor)
      * @see Environment#isExternalStorageEmulated(File)
      */
     @WorkerThread
@@ -1846,17 +1808,28 @@
     public void allocateBytes(FileDescriptor fd, @BytesLong long bytes,
             @RequiresPermission @AllocateFlags int flags) throws IOException {
         final File file = ParcelFileDescriptor.getFile(fd);
+        final UUID uuid = getUuidForPath(file);
         for (int i = 0; i < 3; i++) {
             try {
                 final long haveBytes = Os.fstat(fd).st_blocks * 512;
                 final long needBytes = bytes - haveBytes;
 
                 if (needBytes > 0) {
-                    allocateBytes(file, needBytes, flags);
+                    allocateBytes(uuid, needBytes, flags);
                 }
 
-                Os.posix_fallocate(fd, 0, bytes);
-                return;
+                try {
+                    Os.posix_fallocate(fd, 0, bytes);
+                    return;
+                } catch (ErrnoException e) {
+                    if (e.errno == OsConstants.ENOSYS || e.errno == OsConstants.ENOTSUP) {
+                        Log.w(TAG, "fallocate() not supported; falling back to ftruncate()");
+                        Os.ftruncate(fd, bytes);
+                        return;
+                    } else {
+                        throw e;
+                    }
+                }
             } catch (ErrnoException e) {
                 if (e.errno == OsConstants.ENOSPC) {
                     Log.w(TAG, "Odd, not enough space; let's try again?");
@@ -1939,18 +1912,6 @@
         return isCacheBehavior(path, XATTR_CACHE_GROUP);
     }
 
-    /** @removed */
-    @Deprecated
-    public void setCacheBehaviorAtomic(File path, boolean atomic) throws IOException {
-        setCacheBehaviorGroup(path, atomic);
-    }
-
-    /** @removed */
-    @Deprecated
-    public boolean isCacheBehaviorAtomic(File path) throws IOException {
-        return isCacheBehaviorGroup(path);
-    }
-
     /**
      * Enable or disable special cache behavior that leaves deleted cache files
      * intact as tombstones.
diff --git a/core/java/android/preference/SeekBarVolumizer.java b/core/java/android/preference/SeekBarVolumizer.java
index ee8eed1..3d2e1d1 100644
--- a/core/java/android/preference/SeekBarVolumizer.java
+++ b/core/java/android/preference/SeekBarVolumizer.java
@@ -206,8 +206,7 @@
                     try {
                         mRingtone.setAudioAttributes(new AudioAttributes.Builder(mRingtone
                                 .getAudioAttributes())
-                                .setFlags(AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY |
-                                        AudioAttributes.FLAG_BYPASS_MUTE)
+                                .setFlags(AudioAttributes.FLAG_BYPASS_MUTE)
                                 .build());
                         mRingtone.play();
                     } catch (Throwable e) {
diff --git a/core/java/android/print/PrintDocumentAdapter.java b/core/java/android/print/PrintDocumentAdapter.java
index 1f59bef..2bb7c2e 100644
--- a/core/java/android/print/PrintDocumentAdapter.java
+++ b/core/java/android/print/PrintDocumentAdapter.java
@@ -268,7 +268,9 @@
          * Notifies that all the data was written.
          *
          * @param pages The pages that were written. Cannot be <code>null</code>
-         * or empty.
+         *        or empty. <br />
+         *        Returning {@link PageRange#ALL_PAGES} indicates that all pages that were
+         *        requested as the {@code pages} parameter in {@link #onWrite} were written.
          */
         public void onWriteFinished(PageRange[] pages) {
             /* do nothing - stub */
diff --git a/core/java/android/print/PrintManager.java b/core/java/android/print/PrintManager.java
index 52dccb4..51b7798 100644
--- a/core/java/android/print/PrintManager.java
+++ b/core/java/android/print/PrintManager.java
@@ -18,9 +18,9 @@
 
 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.Activity;
 import android.app.Application.ActivityLifecycleCallbacks;
 import android.content.ComponentName;
@@ -142,7 +142,6 @@
      * @see #getPrintServices
      * @hide
      */
-    @TestApi
     public static final int ALL_SERVICES = ENABLED_SERVICES | DISABLED_SERVICES;
 
     /**
@@ -554,6 +553,7 @@
      * @hide
      */
     @SystemApi
+    @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICES)
     public void addPrintServicesChangeListener(@NonNull PrintServicesChangeListener listener,
             @Nullable Handler handler) {
         Preconditions.checkNotNull(listener);
@@ -589,6 +589,7 @@
      * @hide
      */
     @SystemApi
+    @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICES)
     public void removePrintServicesChangeListener(@NonNull PrintServicesChangeListener listener) {
         Preconditions.checkNotNull(listener);
 
@@ -629,8 +630,8 @@
      *
      * @hide
      */
-    @TestApi
     @SystemApi
+    @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICES)
     public @NonNull List<PrintServiceInfo> getPrintServices(int selectionFlags) {
         Preconditions.checkFlagsArgument(selectionFlags, ALL_SERVICES);
 
@@ -656,6 +657,7 @@
      * @hide
      */
     @SystemApi
+    @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICE_RECOMMENDATIONS)
     public void addPrintServiceRecommendationsChangeListener(
             @NonNull PrintServiceRecommendationsChangeListener listener,
             @Nullable Handler handler) {
@@ -692,6 +694,7 @@
      * @hide
      */
     @SystemApi
+    @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICE_RECOMMENDATIONS)
     public void removePrintServiceRecommendationsChangeListener(
             @NonNull PrintServiceRecommendationsChangeListener listener) {
         Preconditions.checkNotNull(listener);
@@ -731,6 +734,7 @@
      * @hide
      */
     @SystemApi
+    @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICE_RECOMMENDATIONS)
     public @NonNull List<RecommendationInfo> getPrintServiceRecommendations() {
         try {
             List<RecommendationInfo> recommendations =
diff --git a/core/java/android/printservice/PrintServiceInfo.java b/core/java/android/printservice/PrintServiceInfo.java
index 5ef9319..57f1229 100644
--- a/core/java/android/printservice/PrintServiceInfo.java
+++ b/core/java/android/printservice/PrintServiceInfo.java
@@ -18,7 +18,6 @@
 
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
-import android.annotation.TestApi;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.PackageManager;
@@ -49,7 +48,6 @@
  *
  * @hide
  */
-@TestApi
 @SystemApi
 public final class PrintServiceInfo implements Parcelable {
 
diff --git a/core/java/android/provider/CallLog.java b/core/java/android/provider/CallLog.java
index a8acb97..766ad84 100644
--- a/core/java/android/provider/CallLog.java
+++ b/core/java/android/provider/CallLog.java
@@ -224,6 +224,12 @@
         public static final int FEATURES_WIFI = 0x8;
 
         /**
+         * Indicates the call underwent Assisted Dialing.
+         * @hide
+         */
+        public static final Integer FEATURES_ASSISTED_DIALING_USED = 0x10;
+
+        /**
          * The phone number as the user entered it.
          * <P>Type: TEXT</P>
          */
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 70ef035..cc1c067 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -1878,7 +1878,6 @@
          * @deprecated - Do not use. This will not be supported in the future. In the future,
          * cursors returned from related queries will be empty.
          *
-         * @hide
          * @removed
          */
         @Deprecated
@@ -2975,7 +2974,6 @@
          * @deprecated - Do not use. This will not be supported in the future. In the future,
          * cursors returned from related queries will be empty.
          *
-         * @hide
          * @removed
          */
         @Deprecated
@@ -3414,7 +3412,6 @@
      * @deprecated - Do not use. This will not be supported in the future. In the future,
      * cursors returned from related queries will be empty.
      *
-     * @hide
      * @removed
      */
     @Deprecated
@@ -3515,7 +3512,6 @@
          * @deprecated - Do not use. This will not be supported in the future. In the future,
          * cursors returned from related queries will be empty.
          *
-         * @hide
          * @removed
          */
         @Deprecated
@@ -3568,7 +3564,6 @@
      * @deprecated - Do not use. This will not be supported in the future. In the future,
      * cursors returned from related queries will be empty.
      *
-     * @hide
      * @removed
      */
     @Deprecated
@@ -3961,7 +3956,6 @@
      * @deprecated - Do not use. This will not be supported in the future. In the future,
      * cursors returned from related queries will be empty.
      *
-     * @hide
      * @removed
      */
     @Deprecated
@@ -4002,7 +3996,6 @@
      * @deprecated - Do not use. This will not be supported in the future. In the future,
      * cursors returned from related queries will be empty.
      *
-     * @hide
      * @removed
      */
     @Deprecated
diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java
index fa90384..ad4ec72 100644
--- a/core/java/android/provider/DocumentsContract.java
+++ b/core/java/android/provider/DocumentsContract.java
@@ -18,6 +18,7 @@
 
 import static android.net.TrafficStats.KB_IN_BYTES;
 import static android.system.OsConstants.SEEK_SET;
+
 import static com.android.internal.util.Preconditions.checkArgument;
 import static com.android.internal.util.Preconditions.checkCollectionElementsNotNull;
 import static com.android.internal.util.Preconditions.checkCollectionNotEmpty;
@@ -28,7 +29,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentSender;
-import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.res.AssetFileDescriptor;
 import android.database.Cursor;
@@ -182,6 +182,15 @@
     /** {@hide} */
     public static final String PACKAGE_DOCUMENTS_UI = "com.android.documentsui";
 
+    /** {@hide} */
+    public static final String METADATA_TYPES = "android:documentMetadataType";
+
+    /** {@hide} */
+    public static final String METADATA_EXIF = "android:documentExif";
+
+    /** {@hide} */
+    public static final String EXTRA_METADATA_TAGS = "android:documentMetadataTags";
+
     /**
      * Constants related to a document, including {@link Cursor} column names
      * and flags.
@@ -442,6 +451,13 @@
          * @hide
          */
         public static final int FLAG_PARTIAL = 1 << 16;
+
+        /**
+         * Flag indicating that a document has available metadata that can be read
+         * using DocumentsContract#getDocumentMetadata
+         * @hide
+         */
+        public static final int FLAG_SUPPORTS_METADATA = 1 << 17;
     }
 
     /**
@@ -706,6 +722,8 @@
     public static final String METHOD_FIND_DOCUMENT_PATH = "android:findDocumentPath";
     /** {@hide} */
     public static final String METHOD_CREATE_WEB_LINK_INTENT = "android:createWebLinkIntent";
+    /** {@hide} */
+    public static final String METHOD_GET_DOCUMENT_METADATA = "android:getDocumentMetadata";
 
     /** {@hide} */
     public static final String EXTRA_PARENT_URI = "parentUri";
@@ -1378,6 +1396,89 @@
     }
 
     /**
+     * Returns metadata associated with the document. The type of metadata returned
+     * is specific to the document type. For example image files will largely return EXIF
+     * metadata.
+     *
+     * <p>The returned {@link Bundle} will contain zero or more entries.
+     * <p>Each entry represents a specific type of metadata.
+     *
+     * <p>if tags == null, then a list of default tags will be used.
+     *
+     * @param documentUri a Document URI
+     * @param tags an array of keys to choose which data are added to the Bundle. If the Document
+     *             is a JPG or ExifInterface compatible, send keys from {@link ExifInterface}.
+     *             If tags are null, a set of default tags will be used. If the tags don't
+     *             match with any relevant data, they will not be added to the Bundle.
+     * @return a Bundle of Bundles. If metadata exists within the Bundle, there will also
+     * be a String under DocumentsContract.METADATA_TYPES that will return a String[] of the
+     * types of metadata gathered.
+     *
+     * <pre><code>
+     *     Bundle metadata = DocumentsContract.getDocumentMetadata(resolver, imageDocUri, tags);
+     *     int imageLength = metadata.getInt(ExifInterface.TAG_IMAGE_LENGTH);
+     * </code></pre>
+     *
+     * {@hide}
+     */
+    public static Bundle getDocumentMetadata(ContentResolver resolver, Uri documentUri,
+            @Nullable String[] tags)
+            throws FileNotFoundException {
+        final ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
+                documentUri.getAuthority());
+
+        try {
+            return getDocumentMetadata(client, documentUri, tags);
+        } catch (Exception e) {
+            Log.w(TAG, "Failed to get document metadata");
+            rethrowIfNecessary(resolver, e);
+            return null;
+        } finally {
+            ContentProviderClient.releaseQuietly(client);
+        }
+    }
+
+    /**
+     * Returns metadata associated with the document. The type of metadata returned
+     * is specific to the document type. For example image files will largely return EXIF
+     * metadata.
+     *
+     * <p>The returned {@link Bundle} will contain zero or more entries.
+     * <p>Each entry represents a specific type of metadata.
+     *
+     * <p>if tags == null, then a list of default tags will be used.
+     *
+     * @param documentUri a Document URI
+     * @param tags an array of keys to choose which data are added to the Bundle. If the Document
+     *             is a JPG or ExifInterface compatible, send keys from {@link ExifInterface}.
+     *             If tags are null, a set of default tags will be used. If the tags don't
+     *             match with any relevant data, they will not be added to the Bundle.
+     * @return a Bundle of Bundles. If metadata exists within the Bundle, there will also
+     * be a String under DocumentsContract.METADATA_TYPES that will return a String[] of the
+     * types of metadata gathered.
+     *
+     * <pre><code>
+     *     Bundle metadata = DocumentsContract.getDocumentMetadata(client, imageDocUri, tags);
+     *     int imageLength = metadata.getInt(ExifInterface.TAG_IMAGE_LENGTH);
+     * </code></pre>
+     *
+     * {@hide}
+     */
+    public static Bundle getDocumentMetadata(ContentProviderClient client,
+            Uri documentUri, @Nullable String[] tags) throws RemoteException {
+        final Bundle in = new Bundle();
+        in.putParcelable(EXTRA_URI, documentUri);
+        in.putStringArray(EXTRA_METADATA_TAGS, tags);
+
+        final Bundle out = client.call(METHOD_GET_DOCUMENT_METADATA, null, in);
+
+        if (out == null) {
+            throw new RemoteException("Failed to get a response from getDocumentMetadata");
+        }
+        return out;
+    }
+
+    /**
      * Finds the canonical path from the top of the document tree.
      *
      * The {@link Path#getPath()} of the return value contains the document ID
diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java
index 3eef31a..4bdcdb0 100644
--- a/core/java/android/provider/DocumentsProvider.java
+++ b/core/java/android/provider/DocumentsProvider.java
@@ -22,6 +22,7 @@
 import static android.provider.DocumentsContract.METHOD_DELETE_DOCUMENT;
 import static android.provider.DocumentsContract.METHOD_EJECT_ROOT;
 import static android.provider.DocumentsContract.METHOD_FIND_DOCUMENT_PATH;
+import static android.provider.DocumentsContract.METHOD_GET_DOCUMENT_METADATA;
 import static android.provider.DocumentsContract.METHOD_IS_CHILD_DOCUMENT;
 import static android.provider.DocumentsContract.METHOD_MOVE_DOCUMENT;
 import static android.provider.DocumentsContract.METHOD_REMOVE_DOCUMENT;
@@ -55,9 +56,7 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.CancellationSignal;
-import android.os.OperationCanceledException;
 import android.os.ParcelFileDescriptor;
-import android.os.ParcelFileDescriptor.OnCloseListener;
 import android.os.ParcelableException;
 import android.provider.DocumentsContract.Document;
 import android.provider.DocumentsContract.Path;
@@ -627,6 +626,12 @@
         throw new UnsupportedOperationException("Eject not supported");
     }
 
+    /** {@hide} */
+    public @Nullable Bundle getDocumentMetadata(String documentId, @Nullable String[] tags)
+            throws FileNotFoundException {
+        throw new UnsupportedOperationException("Metadata not supported");
+    }
+
     /**
      * Return concrete MIME type of the requested document. Must match the value
      * of {@link Document#COLUMN_MIME_TYPE} for this document. The default
@@ -1136,6 +1141,9 @@
             }
 
             out.putParcelable(DocumentsContract.EXTRA_RESULT, path);
+        } else if (METHOD_GET_DOCUMENT_METADATA.equals(method)) {
+            return getDocumentMetadata(
+                    documentId, extras.getStringArray(DocumentsContract.EXTRA_METADATA_TAGS));
         } else {
             throw new UnsupportedOperationException("Method not supported " + method);
         }
diff --git a/core/java/android/provider/Downloads.java b/core/java/android/provider/Downloads.java
index 9d83bd7..a2c5a92 100644
--- a/core/java/android/provider/Downloads.java
+++ b/core/java/android/provider/Downloads.java
@@ -485,6 +485,7 @@
          * partition. This option is only used by system apps and so it requires
          * android.permission.ACCESS_CACHE_FILESYSTEM permission.
          */
+        @Deprecated
         public static final int DESTINATION_SYSTEMCACHE_PARTITION = 5;
 
         /**
diff --git a/core/java/android/provider/FontsContract.java b/core/java/android/provider/FontsContract.java
index f909114..d8540ff 100644
--- a/core/java/android/provider/FontsContract.java
+++ b/core/java/android/provider/FontsContract.java
@@ -447,14 +447,14 @@
         public FontRequestCallback() {}
 
         /**
-         * Called then a Typeface request done via {@link #requestFont} is complete. Note that this
+         * Called then a Typeface request done via {@link #requestFonts} is complete. Note that this
          * method will not be called if {@link #onTypefaceRequestFailed(int)} is called instead.
          * @param typeface  The Typeface object retrieved.
          */
         public void onTypefaceRetrieved(Typeface typeface) {}
 
         /**
-         * Called when a Typeface request done via {@link #requestFont}} fails.
+         * Called when a Typeface request done via {@link #requestFonts}} fails.
          * @param reason One of {@link #FAIL_REASON_PROVIDER_NOT_FOUND},
          *               {@link #FAIL_REASON_FONT_NOT_FOUND},
          *               {@link #FAIL_REASON_FONT_LOAD_ERROR},
diff --git a/core/java/android/provider/MetadataReader.java b/core/java/android/provider/MetadataReader.java
new file mode 100644
index 0000000..2d1fca0
--- /dev/null
+++ b/core/java/android/provider/MetadataReader.java
@@ -0,0 +1,285 @@
+/*
+ * 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.provider;
+
+import android.annotation.Nullable;
+import android.media.ExifInterface;
+import android.os.Bundle;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Class providing support for extracting metadata from a file as a
+ * {@link Bundle} suitable for use with {@link DocumentsContract#getDocumentMetadata}.
+ * <p>Currently only EXIF data is supported.
+ * <p>TODO: Add support for common video and audio types, as well as PDF files.
+ * {@hide}
+ */
+public final class MetadataReader {
+
+    private MetadataReader() {
+    }
+
+    private static final String[] DEFAULT_EXIF_TAGS = {
+            ExifInterface.TAG_IMAGE_WIDTH,
+            ExifInterface.TAG_IMAGE_LENGTH,
+            ExifInterface.TAG_DATETIME,
+            ExifInterface.TAG_GPS_LATITUDE,
+            ExifInterface.TAG_GPS_LONGITUDE,
+            ExifInterface.TAG_MAKE,
+            ExifInterface.TAG_MODEL,
+            ExifInterface.TAG_APERTURE,
+            ExifInterface.TAG_SHUTTER_SPEED_VALUE
+    };
+
+    private static final Map<String, Integer> TYPE_MAPPING = new HashMap<>();
+    private static final String[] ALL_KNOWN_EXIF_KEYS;
+    private static final int TYPE_INT = 0;
+    private static final int TYPE_DOUBLE = 1;
+    private static final int TYPE_STRING = 2;
+
+    static {
+        // TODO: Move this over to ExifInterface.java
+        // Since each ExifInterface item has a type, and there's currently no way to get the type
+        // from the tag, here we identify the tag to the type so that we can call the correct
+        // ExifInterface method
+        TYPE_MAPPING.put(ExifInterface.TAG_ARTIST, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_BITS_PER_SAMPLE, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_COMPRESSION, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_COPYRIGHT, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_DATETIME, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_IMAGE_DESCRIPTION, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_IMAGE_LENGTH, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_IMAGE_WIDTH, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_MAKE, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_MODEL, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_ORIENTATION, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_PHOTOMETRIC_INTERPRETATION, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_PLANAR_CONFIGURATION, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_PRIMARY_CHROMATICITIES, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_REFERENCE_BLACK_WHITE, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_RESOLUTION_UNIT, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_ROWS_PER_STRIP, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_SAMPLES_PER_PIXEL, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_SOFTWARE, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_STRIP_BYTE_COUNTS, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_STRIP_OFFSETS, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_TRANSFER_FUNCTION, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_WHITE_POINT, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_X_RESOLUTION, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_Y_CB_CR_COEFFICIENTS, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_Y_CB_CR_POSITIONING, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_Y_CB_CR_SUB_SAMPLING, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_Y_RESOLUTION, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_APERTURE_VALUE, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_BRIGHTNESS_VALUE, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_CFA_PATTERN, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_COLOR_SPACE, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_COMPONENTS_CONFIGURATION, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_COMPRESSED_BITS_PER_PIXEL, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_CONTRAST, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_CUSTOM_RENDERED, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_DATETIME_DIGITIZED, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_DATETIME_ORIGINAL, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_DEVICE_SETTING_DESCRIPTION, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_DIGITAL_ZOOM_RATIO, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_EXIF_VERSION, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_EXPOSURE_BIAS_VALUE, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_EXPOSURE_INDEX, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_EXPOSURE_MODE, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_EXPOSURE_PROGRAM, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_EXPOSURE_TIME, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_F_NUMBER, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_FILE_SOURCE, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_FLASH, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_FLASH_ENERGY, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_FLASHPIX_VERSION, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_FOCAL_LENGTH, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_FOCAL_LENGTH_IN_35MM_FILM, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_FOCAL_PLANE_RESOLUTION_UNIT, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_FOCAL_PLANE_X_RESOLUTION, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_FOCAL_PLANE_Y_RESOLUTION, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_GAIN_CONTROL, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_ISO_SPEED_RATINGS, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_IMAGE_UNIQUE_ID, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_LIGHT_SOURCE, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_MAKER_NOTE, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_MAX_APERTURE_VALUE, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_METERING_MODE, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_NEW_SUBFILE_TYPE, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_OECF, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_PIXEL_X_DIMENSION, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_PIXEL_Y_DIMENSION, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_RELATED_SOUND_FILE, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_SATURATION, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_SCENE_CAPTURE_TYPE, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_SCENE_TYPE, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_SENSING_METHOD, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_SHARPNESS, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_SHUTTER_SPEED_VALUE, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_SPATIAL_FREQUENCY_RESPONSE, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_SPECTRAL_SENSITIVITY, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_SUBFILE_TYPE, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_SUBSEC_TIME, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_SUBSEC_TIME_DIGITIZED, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_SUBSEC_TIME_ORIGINAL, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_SUBJECT_AREA, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_SUBJECT_DISTANCE, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_SUBJECT_DISTANCE_RANGE, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_SUBJECT_LOCATION, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_USER_COMMENT, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_WHITE_BALANCE, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_ALTITUDE, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_ALTITUDE_REF, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_AREA_INFORMATION, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_DOP, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_DATESTAMP, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_DEST_BEARING, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_DEST_BEARING_REF, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_DEST_DISTANCE, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_DEST_DISTANCE_REF, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_DEST_LATITUDE, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_DEST_LATITUDE_REF, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_DEST_LONGITUDE, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_DEST_LONGITUDE_REF, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_DIFFERENTIAL, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_IMG_DIRECTION, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_IMG_DIRECTION_REF, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_LATITUDE, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_LATITUDE_REF, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_LONGITUDE, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_LONGITUDE_REF, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_MAP_DATUM, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_MEASURE_MODE, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_PROCESSING_METHOD, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_SATELLITES, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_SPEED, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_SPEED_REF, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_STATUS, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_TIMESTAMP, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_TRACK, TYPE_DOUBLE);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_TRACK_REF, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_GPS_VERSION_ID, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_INTEROPERABILITY_INDEX, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_THUMBNAIL_IMAGE_LENGTH, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_THUMBNAIL_IMAGE_WIDTH, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_DNG_VERSION, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_DEFAULT_CROP_SIZE, TYPE_INT);
+        //I don't know how to represent this. Type is unknown
+        //TYPE_MAPPING.put(ExifInterface.TAG_ORF_THUMBNAIL_IMAGE, TYPE_STRING);
+        TYPE_MAPPING.put(ExifInterface.TAG_ORF_PREVIEW_IMAGE_START, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_ORF_PREVIEW_IMAGE_LENGTH, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_ORF_ASPECT_FRAME, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_RW2_SENSOR_BOTTOM_BORDER, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_RW2_SENSOR_LEFT_BORDER, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_RW2_SENSOR_RIGHT_BORDER, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_RW2_SENSOR_TOP_BORDER, TYPE_INT);
+        TYPE_MAPPING.put(ExifInterface.TAG_RW2_ISO, TYPE_INT);
+        ALL_KNOWN_EXIF_KEYS = TYPE_MAPPING.keySet().toArray(new String[TYPE_MAPPING.size()]);
+    }
+    private static final String JPG_MIME_TYPE = "image/jpg";
+    private static final String JPEG_MIME_TYPE = "image/jpeg";
+
+    /**
+     * Generic metadata retrieval method that can retrieve any available metadata from a given doc
+     * Currently only functions for exifdata
+     *
+     * @param metadata the bundle to which we add any relevant metadata
+     * @param stream InputStream containing a file
+     * @param mimeType type of the given file
+     * @param tags a variable amount of keys to differentiate which tags the user wants
+     *             if null, returns a default set of data from the following keys:
+     *             Exif data:
+     *             ExifInterface.TAG_IMAGE_WIDTH,
+     *             ExifInterface.TAG_IMAGE_LENGTH,
+     *             ExifInterface.TAG_DATETIME,
+     *             ExifInterface.TAG_GPS_LATITUDE,
+     *             ExifInterface.TAG_GPS_LONGITUDE,
+     *             ExifInterface.TAG_MAKE,
+     *             ExifInterface.TAG_MODEL,
+     *             ExifInterface.TAG_APERTURE,
+     *             ExifInterface.TAG_SHUTTER_SPEED_VALUE
+     * @throws IOException when the file doesn't exist
+     */
+    public static void getMetadata(Bundle metadata, InputStream stream, String mimeType,
+            @Nullable String[] tags) throws IOException {
+        List<String> metadataTypes = new ArrayList();
+        if (mimeType.equals(JPG_MIME_TYPE) || mimeType.equals(JPEG_MIME_TYPE)) {
+            ExifInterface exifInterface = new ExifInterface(stream);
+            Bundle exifData = getExifData(exifInterface, tags);
+            if (exifData.size() > 0) {
+                metadata.putBundle(DocumentsContract.METADATA_EXIF, exifData);
+                metadataTypes.add(DocumentsContract.METADATA_EXIF);
+            }
+        }
+        metadata.putStringArray(DocumentsContract.METADATA_TYPES,
+                metadataTypes.toArray(new String[metadataTypes.size()]));
+        // TODO: Add support for PDF and Video metadata
+        // TODO: Broaden image support to all images
+    }
+
+    /**
+     * Helper method that is called if getMetadata is called for an image mimeType.
+     *
+     * @param exif the bundle to which we add exif data.
+     * @param exifInterface an ExifInterface for an image
+     * @param tags a list of ExifInterface tags that are used to retrieve data.
+     *             if null, returns a default set of data from the following keys:
+     *             ExifInterface.TAG_IMAGE_WIDTH,
+     *             ExifInterface.TAG_IMAGE_LENGTH,
+     *             ExifInterface.TAG_DATETIME,
+     *             ExifInterface.TAG_GPS_LATITUDE,
+     *             ExifInterface.TAG_GPS_LONGITUDE,
+     *             ExifInterface.TAG_MAKE,
+     *             ExifInterface.TAG_MODEL,
+     *             ExifInterface.TAG_APERTURE,
+     *             ExifInterface.TAG_SHUTTER_SPEED_VALUE
+     */
+    private static Bundle getExifData(ExifInterface exifInterface, @Nullable String[] tags)
+            throws IOException {
+        if (tags == null) {
+            tags = DEFAULT_EXIF_TAGS;
+        }
+        Bundle exif = new Bundle();
+        for (int i = 0; i < tags.length; i++) {
+            if (TYPE_MAPPING.get(tags[i]).equals(TYPE_INT)) {
+                int data = exifInterface.getAttributeInt(tags[i], Integer.MIN_VALUE);
+                if (data != Integer.MIN_VALUE) {
+                    exif.putInt(tags[i], data);
+                }
+            } else if (TYPE_MAPPING.get(tags[i]).equals(TYPE_DOUBLE)) {
+                double data = exifInterface.getAttributeDouble(tags[i], Double.MIN_VALUE);
+                if (data != Double.MIN_VALUE) {
+                    exif.putDouble(tags[i], data);
+                }
+            } else if (TYPE_MAPPING.get(tags[i]).equals(TYPE_STRING)) {
+                String data = exifInterface.getAttribute(tags[i]);
+                if (data != null) {
+                    exif.putString(tags[i], data);
+                }
+            }
+        }
+        return exif;
+    }
+}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 323b19d..a5ee9c8 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -31,6 +31,7 @@
 import android.app.AppOpsManager;
 import android.app.Application;
 import android.app.NotificationChannel;
+import android.app.NotificationManager;
 import android.app.SearchManager;
 import android.app.WallpaperManager;
 import android.content.ComponentName;
@@ -194,6 +195,24 @@
             "android.settings.AIRPLANE_MODE_SETTINGS";
 
     /**
+     * Activity Action: Show mobile data usage list.
+     * <p>
+     * Input: {@link EXTRA_NETWORK_TEMPLATE} and {@link EXTRA_SUB_ID} should be included to specify
+     * how and what mobile data statistics should be collected.
+     * <p>
+     * Output: Nothing
+     * @hide
+     */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_MOBILE_DATA_USAGE =
+            "android.settings.MOBILE_DATA_USAGE";
+
+    /** @hide */
+    public static final String EXTRA_NETWORK_TEMPLATE = "network_template";
+    /** @hide */
+    public static final String EXTRA_SUB_ID = "sub_id";
+
+    /**
      * Activity Action: Modify Airplane mode settings using a voice command.
      * <p>
      * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
@@ -291,10 +310,7 @@
 
     /**
      * Activity Action: Show settings to allow configuration of trusted external sources
-     * <p>
-     * In some cases, a matching Activity may not exist, so ensure you
-     * safeguard against this.
-     * <p>
+     *
      * Input: Optionally, 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".
@@ -560,21 +576,6 @@
             "android.settings.INPUT_METHOD_SUBTYPE_SETTINGS";
 
     /**
-     * Activity Action: Show a dialog to select input method.
-     * <p>
-     * In some cases, a matching Activity may not exist, so ensure you
-     * safeguard against this.
-     * <p>
-     * Input: Nothing.
-     * <p>
-     * Output: Nothing.
-     * @hide
-     */
-    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
-    public static final String ACTION_SHOW_INPUT_METHOD_PICKER =
-            "android.settings.SHOW_INPUT_METHOD_PICKER";
-
-    /**
      * Activity Action: Show settings to manage the user input dictionary.
      * <p>
      * Starting with {@link android.os.Build.VERSION_CODES#KITKAT},
@@ -3994,6 +3995,15 @@
         };
 
         /**
+         * Keys we no longer back up under the current schema, but want to continue to
+         * process when restoring historical backup datasets.
+         *
+         * @hide
+         */
+        public static final String[] LEGACY_RESTORE_SETTINGS = {
+        };
+
+        /**
          * These are all public system settings
          *
          * @hide
@@ -5268,6 +5278,7 @@
          * Whether the current user has been set up via setup wizard (0 = false, 1 = true)
          * @hide
          */
+        @TestApi
         public static final String USER_SETUP_COMPLETE = "user_setup_complete";
 
         /**
@@ -6670,28 +6681,36 @@
         public static final String ASSIST_DISCLOSURE_ENABLED = "assist_disclosure_enabled";
 
         /**
-         * Name of the service components that the current user has explicitly allowed to
+         * Read only list of the service components that the current user has explicitly allowed to
          * see and assist with all of the user's notifications.
          *
+         * @deprecated Use
+         * {@link NotificationManager#isNotificationListenerAccessGranted(ComponentName)}.
          * @hide
          */
+        @Deprecated
         public static final String ENABLED_NOTIFICATION_ASSISTANT =
                 "enabled_notification_assistant";
 
         /**
-         * Names of the service components that the current user has explicitly allowed to
+         * Read only list of the service components that the current user has explicitly allowed to
          * see all of the user's notifications, separated by ':'.
          *
          * @hide
+         * @deprecated Use
+         * {@link NotificationManager#isNotificationAssistantAccessGranted(ComponentName)}.
          */
+        @Deprecated
         public static final String ENABLED_NOTIFICATION_LISTENERS = "enabled_notification_listeners";
 
         /**
-         * Names of the packages that the current user has explicitly allowed to
-         * manage notification policy configuration, separated by ':'.
+         * Read only list of the packages that the current user has explicitly allowed to
+         * manage do not disturb, separated by ':'.
          *
+         * @deprecated Use {@link NotificationManager#isNotificationPolicyAccessGranted()}.
          * @hide
          */
+        @Deprecated
         @TestApi
         public static final String ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES =
                 "enabled_notification_policy_access_packages";
@@ -6930,8 +6949,9 @@
         public static final String NIGHT_DISPLAY_CUSTOM_END_TIME = "night_display_custom_end_time";
 
         /**
-         * Time in milliseconds (since epoch) when Night display was last activated. Use to decide
-         * whether to apply the current activated state after a reboot or user change.
+         * A String representing the LocalDateTime when Night display was last activated. Use to
+         * decide whether to apply the current activated state after a reboot or user change. In
+         * legacy cases, this is represented by the time in milliseconds (since epoch).
          * @hide
          */
         public static final String NIGHT_DISPLAY_LAST_ACTIVATED_TIME =
@@ -7128,7 +7148,6 @@
             AUTOFILL_SERVICE,
             ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
             ENABLED_ACCESSIBILITY_SERVICES,
-            ENABLED_NOTIFICATION_LISTENERS,
             ENABLED_VR_LISTENERS,
             ENABLED_INPUT_METHODS,
             TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
@@ -7210,6 +7229,13 @@
             SCREENSAVER_ACTIVATE_ON_SLEEP,
         };
 
+        /** @hide */
+        public static final String[] LEGACY_RESTORE_SETTINGS = {
+                ENABLED_NOTIFICATION_LISTENERS,
+                ENABLED_NOTIFICATION_ASSISTANT,
+                ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES
+        };
+
         /**
          * These entries are considered common between the personal and the managed profile,
          * since the managed profile doesn't get to change them.
@@ -7744,6 +7770,16 @@
          */
         public static final String CDMA_SUBSCRIPTION_MODE = "subscription_mode";
 
+        /**
+         * The default value for whether background data is enabled or not.
+         *
+         * Used by {@code NetworkPolicyManagerService}.
+         *
+         * @hide
+         */
+        public static final String DEFAULT_RESTRICT_BACKGROUND_DATA =
+                "default_restrict_background_data";
+
         /** Inactivity timeout to track mobile data activity.
         *
         * If set to a positive integer, it indicates the inactivity timeout value in seconds to
@@ -8009,6 +8045,8 @@
        public static final String NETSTATS_GLOBAL_ALERT_BYTES = "netstats_global_alert_bytes";
        /** {@hide} */
        public static final String NETSTATS_SAMPLE_ENABLED = "netstats_sample_enabled";
+       /** {@hide} */
+       public static final String NETSTATS_AUGMENT_ENABLED = "netstats_augment_enabled";
 
        /** {@hide} */
        public static final String NETSTATS_DEV_BUCKET_DURATION = "netstats_dev_bucket_duration";
@@ -8535,6 +8573,16 @@
         public static final String NETWORK_SCORING_UI_ENABLED = "network_scoring_ui_enabled";
 
         /**
+         * Value to specify how long in milliseconds to retain seen score cache curves to be used
+         * when generating SSID only bases score curves.
+         *
+         * Type: long
+         * @hide
+         */
+        public static final String SPEED_LABEL_CACHE_EVICTION_AGE_MILLIS =
+                "speed_label_cache_eviction_age_millis";
+
+        /**
          * Value to specify if network recommendations from
          * {@link com.android.server.NetworkScoreService} are enabled.
          *
@@ -9230,9 +9278,11 @@
          * gc_min_interval                      (long)
          * full_pss_min_interval                (long)
          * full_pss_lowered_interval            (long)
-         * power_check_delay                    (long)
-         * wake_lock_min_check_duration         (long)
-         * cpu_min_check_duration               (long)
+         * power_check_interval                 (long)
+         * power_check_max_cpu_1                (int)
+         * power_check_max_cpu_2                (int)
+         * power_check_max_cpu_3                (int)
+         * power_check_max_cpu_4                (int)
          * service_usage_interaction_time       (long)
          * usage_stats_interaction_interval     (long)
          * service_restart_duration             (long)
@@ -9317,9 +9367,12 @@
 
         /**
          * Battery anomaly detection specific settings
-         * This is encoded as a key=value list, separated by commas. Ex:
+         * This is encoded as a key=value list, separated by commas.
+         * wakeup_blacklisted_tags is a string, encoded as a set of tags, encoded via
+         * {@link Uri#encode(String)}, separated by colons. Ex:
          *
-         * "anomaly_detection_enabled=true,wakelock_threshold=2000"
+         * "anomaly_detection_enabled=true,wakelock_threshold=2000,wakeup_alarm_enabled=true,"
+         * "wakeup_alarm_threshold=10,wakeup_blacklisted_tags=tag1:tag2:with%2Ccomma:with%3Acolon"
          *
          * The following keys are supported:
          *
@@ -9327,12 +9380,36 @@
          * anomaly_detection_enabled       (boolean)
          * wakelock_enabled                (boolean)
          * wakelock_threshold              (long)
+         * wakeup_alarm_enabled            (boolean)
+         * wakeup_alarm_threshold          (long)
+         * wakeup_blacklisted_tags         (string)
+         * bluetooth_scan_enabled          (boolean)
+         * bluetooth_scan_threshold        (long)
          * </pre>
          * @hide
          */
         public static final String ANOMALY_DETECTION_CONSTANTS = "anomaly_detection_constants";
 
         /**
+         * Always on display(AOD) specific settings
+         * This is encoded as a key=value list, separated by commas. Ex:
+         *
+         * "prox_screen_off_delay=10000,screen_brightness_array=0:1:2:3:4"
+         *
+         * The following keys are supported:
+         *
+         * <pre>
+         * screen_brightness_array         (string)
+         * dimming_scrim_array             (string)
+         * prox_screen_off_delay           (long)
+         * prox_cooldown_trigger           (long)
+         * prox_cooldown_period            (long)
+         * </pre>
+         * @hide
+         */
+        public static final String ALWAYS_ON_DISPLAY_CONSTANTS = "always_on_display_constants";
+
+        /**
          * App standby (app idle) specific settings.
          * This is encoded as a key=value list, separated by commas. Ex:
          *
@@ -9471,6 +9548,22 @@
         public static final String DEVICE_POLICY_CONSTANTS = "device_policy_constants";
 
         /**
+         * TextClassifier specific settings.
+         * This is encoded as a key=value list, separated by commas. Ex:
+         *
+         * <pre>
+         * smart_selection_dark_launch              (boolean)
+         * smart_selection_enabled_for_edit_text    (boolean)
+         * </pre>
+         *
+         * <p>
+         * Type: string
+         * @hide
+         * see also android.view.textclassifier.TextClassifierConstants
+         */
+        public static final String TEXT_CLASSIFIER_CONSTANTS = "text_classifier_constants";
+
+        /**
          * Get the key that retrieves a bluetooth headset's priority.
          * @hide
          */
@@ -10182,6 +10275,15 @@
                 "euicc_factory_reset_timeout_millis";
 
         /**
+         * Flag to set the timeout for when to refresh the storage settings cached data.
+         * Type: long
+         *
+         * @hide
+         */
+        public static final String STORAGE_SETTINGS_CLOBBER_THRESHOLD =
+                "storage_settings_clobber_threshold";
+
+        /**
          * Settings to backup. This is here so that it's in the same place as the settings
          * keys and easy to update.
          *
@@ -10219,6 +10321,10 @@
             BLUETOOTH_ON
         };
 
+        /** @hide */
+        public static final String[] LEGACY_RESTORE_SETTINGS = {
+        };
+
         private static final ContentProviderHolder sProviderHolder =
                 new ContentProviderHolder(CONTENT_URI);
 
@@ -10741,6 +10847,7 @@
             INSTANT_APP_SETTINGS.add(ANIMATOR_DURATION_SCALE);
             INSTANT_APP_SETTINGS.add(DEBUG_VIEW_ATTRIBUTES);
             INSTANT_APP_SETTINGS.add(WTF_IS_FATAL);
+            INSTANT_APP_SETTINGS.add(SEND_ACTION_APP_ERROR);
         }
 
         /**
@@ -10774,6 +10881,26 @@
          */
         public static final String ENABLE_DELETION_HELPER_NO_THRESHOLD_TOGGLE =
                 "enable_deletion_helper_no_threshold_toggle";
+
+        /**
+         * The list of snooze options for notifications
+         * This is encoded as a key=value list, separated by commas. Ex:
+         *
+         * "default=60,options_array=15:30:60:120"
+         *
+         * The following keys are supported:
+         *
+         * <pre>
+         * default               (int)
+         * options_array         (string)
+         * </pre>
+         *
+         * All delays in integer minutes. Array order is respected.
+         * Options will be used in order up to the maximum allowed by the UI.
+         * @hide
+         */
+        public static final String NOTIFICATION_SNOOZE_OPTIONS =
+                "notification_snooze_options";
     }
 
     /**
diff --git a/core/java/android/provider/TimeZoneRulesDataContract.java b/core/java/android/provider/TimeZoneRulesDataContract.java
index 19e914b..33d2588 100644
--- a/core/java/android/provider/TimeZoneRulesDataContract.java
+++ b/core/java/android/provider/TimeZoneRulesDataContract.java
@@ -16,6 +16,7 @@
 
 package android.provider;
 
+import android.annotation.SystemApi;
 import android.net.Uri;
 
 /**
@@ -24,7 +25,7 @@
  *
  * @hide
  */
-// TODO(nfuller): Expose necessary APIs for OEMs with @SystemApi. http://b/31008728
+@SystemApi
 public final class TimeZoneRulesDataContract {
 
     private TimeZoneRulesDataContract() {}
@@ -40,75 +41,80 @@
     private static final Uri AUTHORITY_URI = Uri.parse("content://" + AUTHORITY);
 
     /**
-     * The content:// style URI for determining what type of update is available.
-     *
-     * <p>The URI can be queried using
-     * {@link android.content.ContentProvider#query(Uri, String[], String, String[], String)};
-     * the result will be a cursor with a single row. If the {@link #COLUMN_OPERATION}
-     * column is {@link #OPERATION_INSTALL} then see {@link #DATA_URI} for how to obtain the
-     * binary data.
+     * Defines fields exposed through the {@link Operation#CONTENT_URI} for describing a time zone
+     * distro operation.
      */
-    public static final Uri OPERATION_URI = Uri.withAppendedPath(AUTHORITY_URI, "operation");
+    public static final class Operation {
 
-    /**
-     * The {@code String} column of the {@link #OPERATION_URI} that provides an int specifying the
-     * type of operation to perform. See {@link #OPERATION_NO_OP}, {@link #OPERATION_UNINSTALL} and
-     * {@link #OPERATION_INSTALL}.
-     */
-    public static final String COLUMN_OPERATION = "operation";
+        /** Not instantiable. */
+        private Operation() {
+        }
 
-    /**
-     * An operation type used when the time zone rules on device should be left as they are.
-     * This is not expected to be used in normal operation but a safe result in the event of an
-     * error that cannot be recovered from.
-     */
-    public static final String OPERATION_NO_OP = "NOOP";
+        /**
+         * The content:// style URI for determining what type of update is available.
+         *
+         * <p>The URI can be queried using
+         * {@link android.content.ContentProvider#query(Uri, String[], String, String[], String)};
+         * the result will be a cursor with a single row. If the {@link Operation#COLUMN_TYPE}
+         * column is {@link Operation#TYPE_INSTALL} then
+         * {@link android.content.ContentProvider#openFile(Uri, String)} can be used with "r" mode
+         * to obtain the binary data.
+         */
+        public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "operation");
 
-    /**
-     * An operation type used when the current time zone rules on device should be uninstalled,
-     * returning to the values held in the system partition.
-     */
-    public static final String OPERATION_UNINSTALL = "UNINSTALL";
+        /**
+         * The {@code String} column of the {@link #CONTENT_URI} that provides an int specifying
+         * the type of operation to perform. See {@link #TYPE_NO_OP},
+         * {@link #TYPE_UNINSTALL} and {@link #TYPE_INSTALL}.
+         */
+        public static final String COLUMN_TYPE = "type";
 
-    /**
-     * An operation type used when the current time zone rules on device should be replaced by
-     * a new set obtained via the {@link android.content.ContentProvider#openFile(Uri, String)}
-     * method.
-     */
-    public static final String OPERATION_INSTALL = "INSTALL";
+        /**
+         * An operation type used when the current time zone rules on device should be replaced by
+         * a new set obtained via the {@link android.content.ContentProvider#openFile(Uri, String)}
+         * method.
+         */
+        public static final String TYPE_INSTALL = "INSTALL";
 
-    /**
-     * The {@code nullable int} column of the {@link #OPERATION_URI} that describes the major
-     * version of the distro to be installed.
-     * Only non-null if {@link #COLUMN_OPERATION} contains {@link #OPERATION_INSTALL}.
-     */
-    public static final String COLUMN_DISTRO_MAJOR_VERSION = "distro_major_version";
+        /**
+         * An operation type used when the current time zone rules on device should be uninstalled,
+         * returning to the values held in the system partition.
+         */
+        public static final String TYPE_UNINSTALL = "UNINSTALL";
 
-    /**
-     * The {@code nullable int} column of the {@link #OPERATION_URI} that describes the minor
-     * version of the distro to be installed.
-     * Only non-null if {@link #COLUMN_OPERATION} contains {@link #OPERATION_INSTALL}.
-     */
-    public static final String COLUMN_DISTRO_MINOR_VERSION = "distro_minor_version";
+        /**
+         * An operation type used when the time zone rules on device should be left as they are.
+         * This is not expected to be used in normal operation but a safe result in the event of an
+         * error that cannot be recovered from.
+         */
+        public static final String TYPE_NO_OP = "NOOP";
 
-    /**
-     * The {@code nullable String} column of the {@link #OPERATION_URI} that describes the IANA
-     * rules version of the distro to be installed.
-     * Only non-null if {@link #COLUMN_OPERATION} contains {@link #OPERATION_INSTALL}.
-     */
-    public static final String COLUMN_RULES_VERSION = "rules_version";
+        /**
+         * The {@code nullable int} column of the {@link #CONTENT_URI} that describes the major
+         * version of the distro to be installed.
+         * Only non-null if {@link #COLUMN_TYPE} contains {@link #TYPE_INSTALL}.
+         */
+        public static final String COLUMN_DISTRO_MAJOR_VERSION = "distro_major_version";
 
-    /**
-     * The {@code nullable int} column of the {@link #OPERATION_URI} that describes the revision
-     * number of the distro to be installed.
-     * Only non-null if {@link #COLUMN_OPERATION} contains {@link #OPERATION_INSTALL}.
-     */
-    public static final String COLUMN_REVISION = "revision";
+        /**
+         * The {@code nullable int} column of the {@link #CONTENT_URI} that describes the minor
+         * version of the distro to be installed.
+         * Only non-null if {@link #COLUMN_TYPE} contains {@link #TYPE_INSTALL}.
+         */
+        public static final String COLUMN_DISTRO_MINOR_VERSION = "distro_minor_version";
 
-    /**
-     * The content:// style URI for obtaining time zone bundle data.
-     *
-     * <p>Use {@link android.content.ContentProvider#openFile(Uri, String)} with "r" mode.
-     */
-    public static final Uri DATA_URI = Uri.withAppendedPath(AUTHORITY_URI, "data");
+        /**
+         * The {@code nullable String} column of the {@link #CONTENT_URI} that describes the IANA
+         * rules version of the distro to be installed.
+         * Only non-null if {@link #COLUMN_TYPE} contains {@link #TYPE_INSTALL}.
+         */
+        public static final String COLUMN_RULES_VERSION = "rules_version";
+
+        /**
+         * The {@code nullable int} column of the {@link #CONTENT_URI} that describes the revision
+         * number of the distro to be installed.
+         * Only non-null if {@link #COLUMN_TYPE} contains {@link #TYPE_INSTALL}.
+         */
+        public static final String COLUMN_REVISION = "revision";
+    }
 }
diff --git a/core/java/android/service/autofill/AutofillService.java b/core/java/android/service/autofill/AutofillService.java
index b062dc3..fb2e4a01 100644
--- a/core/java/android/service/autofill/AutofillService.java
+++ b/core/java/android/service/autofill/AutofillService.java
@@ -18,16 +18,15 @@
 import android.annotation.CallSuper;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.os.RemoteException;
-import android.provider.Settings;
-
-import com.android.internal.os.HandlerCaller;
 import android.annotation.SdkConstant;
-import android.app.Service;import android.content.Intent;
+import android.app.Service;
+import android.content.Intent;
 import android.os.CancellationSignal;
 import android.os.IBinder;
 import android.os.ICancellationSignal;
 import android.os.Looper;
+import android.os.RemoteException;
+import android.provider.Settings;
 import android.util.Log;
 import android.view.View;
 import android.view.ViewStructure;
@@ -35,6 +34,7 @@
 import android.view.autofill.AutofillManager;
 import android.view.autofill.AutofillValue;
 
+import com.android.internal.os.HandlerCaller;
 import com.android.internal.os.SomeArgs;
 
 /**
@@ -305,7 +305,7 @@
  *   <li>Use the {@link android.app.assist.AssistStructure.ViewNode#getWebDomain()} to get the
  *       source of the document.
  *   <li>Get the canonical domain using the
- *       <a href="https://publicsuffix.org/>Public Suffix List</a> (see example below).
+ *       <a href="https://publicsuffix.org/">Public Suffix List</a> (see example below).
  *   <li>Use <a href="https://developers.google.com/digital-asset-links/">Digital Asset Links</a>
  *       to obtain the package name and certificate fingerprint of the package corresponding to
  *       the canonical domain.
@@ -365,6 +365,94 @@
  * <p><b>Note:</b> The autofill service could also whitelist well-known browser apps and skip the
  * verifications above, as long as the service can verify the authenticity of the browser app by
  * checking its signing certificate.
+ *
+ * <a name="MultipleStepsSave"></a>
+ * <h3>Saving when data is split in multiple screens</h3>
+ *
+ * Apps often split the user data in multiple screens in the same activity, specially in
+ * activities used to create a new user account. For example, the first screen asks for a username,
+ * and if the username is available, it moves to a second screen, which asks for a password.
+ *
+ * <p>It's tricky to handle save for autofill in these situations, because the autofill service must
+ * wait until the user enters both fields before the autofill save UI can be shown. But it can be
+ * done by following the steps below:
+ *
+ * <ol>
+ * <li>In the first
+ * {@link #onFillRequest(FillRequest, CancellationSignal, FillCallback) fill request}, the service
+ * adds a {@link FillResponse.Builder#setClientState(android.os.Bundle) client state bundle} in
+ * the response, containing the autofill ids of the partial fields present in the screen.
+ * <li>In the second
+ * {@link #onFillRequest(FillRequest, CancellationSignal, FillCallback) fill request}, the service
+ * retrieves the {@link FillRequest#getClientState() client state bundle}, gets the autofill ids
+ * set in the previous request from the client state, and adds these ids and the
+ * {@link SaveInfo#FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE} to the {@link SaveInfo} used in the second
+ * response.
+ * <li>In the {@link #onSaveRequest(SaveRequest, SaveCallback) save request}, the service uses the
+ * proper {@link FillContext fill contexts} to get the value of each field (there is one fill
+ * context per fill request).
+ * </ol>
+ *
+ * <p>For example, in an app that uses 2 steps for the username and password fields, the workflow
+ * would be:
+ * <pre class="prettyprint">
+ *  // On first fill request
+ *  AutofillId usernameId = // parse from AssistStructure;
+ *  Bundle clientState = new Bundle();
+ *  clientState.putParcelable("usernameId", usernameId);
+ *  fillCallback.onSuccess(
+ *    new FillResponse.Builder()
+ *        .setClientState(clientState)
+ *        .setSaveInfo(new SaveInfo
+ *             .Builder(SaveInfo.SAVE_DATA_TYPE_USERNAME, new AutofillId[] {usernameId})
+ *             .build())
+ *        .build());
+ *
+ *  // On second fill request
+ *  Bundle clientState = fillRequest.getClientState();
+ *  AutofillId usernameId = clientState.getParcelable("usernameId");
+ *  AutofillId passwordId = // parse from AssistStructure
+ *  clientState.putParcelable("passwordId", passwordId);
+ *  fillCallback.onSuccess(
+ *    new FillResponse.Builder()
+ *        .setClientState(clientState)
+ *        .setSaveInfo(new SaveInfo
+ *             .Builder(SaveInfo.SAVE_DATA_TYPE_USERNAME | SaveInfo.SAVE_DATA_TYPE_PASSWORD,
+ *                      new AutofillId[] {usernameId, passwordId})
+ *             .setFlags(SaveInfo.FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE)
+ *             .build())
+ *        .build());
+ *
+ *  // On save request
+ *  Bundle clientState = saveRequest.getClientState();
+ *  AutofillId usernameId = clientState.getParcelable("usernameId");
+ *  AutofillId passwordId = clientState.getParcelable("passwordId");
+ *  List<FillContext> fillContexts = saveRequest.getFillContexts();
+ *
+ *  FillContext usernameContext = fillContexts.get(0);
+ *  ViewNode usernameNode = findNodeByAutofillId(usernameContext.getStructure(), usernameId);
+ *  AutofillValue username = usernameNode.getAutofillValue().getTextValue().toString();
+ *
+ *  FillContext passwordContext = fillContexts.get(1);
+ *  ViewNode passwordNode = findNodeByAutofillId(passwordContext.getStructure(), passwordId);
+ *  AutofillValue password = passwordNode.getAutofillValue().getTextValue().toString();
+ *
+ *  save(username, password);
+ *  </pre>
+ *
+ * <a name="Privacy"></a>
+ * <h3>Privacy</h3>
+ *
+ * <p>The {@link #onFillRequest(FillRequest, CancellationSignal, FillCallback)} method is called
+ * without the user content. The Android system strips some properties of the
+ * {@link android.app.assist.AssistStructure.ViewNode view nodes} passed to this call, but not all
+ * of them. For example, the data provided in the {@link android.view.ViewStructure.HtmlInfo}
+ * objects set by {@link android.webkit.WebView} is never stripped out.
+ *
+ * <p>Because this data could contain PII (Personally Identifiable Information, such as username or
+ * email address), the service should only use it locally (i.e., in the app's process) for
+ * heuristics purposes, but it should not be sent to external servers.
+ *
  */
 public abstract class AutofillService extends Service {
     private static final String TAG = "AutofillService";
@@ -503,13 +591,19 @@
             @NonNull CancellationSignal cancellationSignal, @NonNull FillCallback callback);
 
     /**
-     * Called when user requests service to save the fields of a screen.
+     * Called when the user requests the service to save the contents of a screen.
      *
      * <p>Service must call one of the {@link SaveCallback} methods (like
      * {@link SaveCallback#onSuccess()} or {@link SaveCallback#onFailure(CharSequence)})
-     * to notify the result of the request.
+     * to notify the Android System of the result of the request.
      *
-     * <p><b>Note:</b> To retrieve the actual value of the field, the service should call
+     * <p>If the service could not handle the request right away&mdash;for example, because it must
+     * launch an activity asking the user to authenticate first or because the network is
+     * down&mdash;the service could keep the {@link SaveRequest request} and reuse it later,
+     * but the service must call {@link SaveCallback#onSuccess()} right away.
+     *
+     * <p><b>Note:</b> To retrieve the actual value of fields input by the user, the service
+     * should call
      * {@link android.app.assist.AssistStructure.ViewNode#getAutofillValue()}; if it calls
      * {@link android.app.assist.AssistStructure.ViewNode#getText()} or other methods, there is no
      * guarantee such method will return the most recent value of the field.
diff --git a/core/java/android/service/autofill/AutofillServiceInfo.java b/core/java/android/service/autofill/AutofillServiceInfo.java
index e64eb0d..1a9afcc 100644
--- a/core/java/android/service/autofill/AutofillServiceInfo.java
+++ b/core/java/android/service/autofill/AutofillServiceInfo.java
@@ -29,11 +29,12 @@
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.Xml;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
 
 import com.android.internal.R;
 
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
 import java.io.IOException;
 
 /**
@@ -147,4 +148,9 @@
     public String getSettingsActivity() {
         return mSettingsActivity;
     }
+
+    @Override
+    public String toString() {
+        return mServiceInfo == null ? "null" : mServiceInfo.toString();
+    }
 }
diff --git a/core/java/android/service/autofill/CharSequenceTransformation.java b/core/java/android/service/autofill/CharSequenceTransformation.java
new file mode 100644
index 0000000..2413e97
--- /dev/null
+++ b/core/java/android/service/autofill/CharSequenceTransformation.java
@@ -0,0 +1,226 @@
+/*
+ * 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.service.autofill;
+
+import static android.view.autofill.Helper.sDebug;
+
+import android.annotation.NonNull;
+import android.annotation.TestApi;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.ArrayMap;
+import android.util.Log;
+import android.util.Pair;
+import android.view.autofill.AutofillId;
+import android.widget.RemoteViews;
+import android.widget.TextView;
+
+import com.android.internal.util.Preconditions;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Replaces a {@link TextView} child of a {@link CustomDescription} with the contents of one or
+ * more regular expressions (regexs).
+ *
+ * <p>When it contains more than one field, the fields that match their regex are added to the
+ * overall transformation result.
+ *
+ * <p>For example, a transformation to mask a credit card number contained in just one field would
+ * be:
+ *
+ * <pre class="prettyprint">
+ * new CharSequenceTransformation
+ *     .Builder(ccNumberId, Pattern.compile("^.*(\\d\\d\\d\\d)$"), "...$1")
+ *     .build();
+ * </pre>
+ *
+ * <p>But a transformation that generates a {@code Exp: MM / YYYY} credit expiration date from two
+ * fields (month and year) would be:
+ *
+ * <pre class="prettyprint">
+ * new CharSequenceTransformation
+ *   .Builder(ccExpMonthId, Pattern.compile("^(\\d\\d)$"), "Exp: $1")
+ *   .addField(ccExpYearId, Pattern.compile("^(\\d\\d\\d\\d)$"), " / $1");
+ * </pre>
+ */
+public final class CharSequenceTransformation extends InternalTransformation implements
+        Transformation, Parcelable {
+    private static final String TAG = "CharSequenceTransformation";
+    @NonNull private final ArrayMap<AutofillId, Pair<Pattern, String>> mFields;
+
+    private CharSequenceTransformation(Builder builder) {
+        mFields = builder.mFields;
+    }
+
+    /** @hide */
+    @Override
+    @TestApi
+    public void apply(@NonNull ValueFinder finder, @NonNull RemoteViews parentTemplate,
+            int childViewId) throws Exception {
+        final StringBuilder converted = new StringBuilder();
+        final int size = mFields.size();
+        if (sDebug) Log.d(TAG, size + " multiple fields on id " + childViewId);
+        for (int i = 0; i < size; i++) {
+            final AutofillId id = mFields.keyAt(i);
+            final Pair<Pattern, String> field = mFields.valueAt(i);
+            final String value = finder.findByAutofillId(id);
+            if (value == null) {
+                Log.w(TAG, "No value for id " + id);
+                return;
+            }
+            try {
+                final Matcher matcher = field.first.matcher(value);
+                if (!matcher.find()) {
+                    if (sDebug) Log.d(TAG, "match for " + field.first + " failed on id " + id);
+                    return;
+                }
+                // replaceAll throws an exception if the subst is invalid
+                final String convertedValue = matcher.replaceAll(field.second);
+                converted.append(convertedValue);
+            } catch (Exception e) {
+                // Do not log full exception to avoid PII leaking
+                Log.w(TAG, "Cannot apply " + field.first.pattern() + "->" + field.second + " to "
+                        + "field with autofill id" + id + ": " + e.getClass());
+                throw e;
+            }
+        }
+        parentTemplate.setCharSequence(childViewId, "setText", converted);
+    }
+
+    /**
+     * Builder for {@link CharSequenceTransformation} objects.
+     */
+    public static class Builder {
+        @NonNull private final ArrayMap<AutofillId, Pair<Pattern, String>> mFields =
+                new ArrayMap<>();
+        private boolean mDestroyed;
+
+        /**
+         * Creates a new builder and adds the first transformed contents of a field to the overall
+         * result of this transformation.
+         *
+         * @param id id of the screen field.
+         * @param regex regular expression with groups (delimited by {@code (} and {@code (}) that
+         * are used to substitute parts of the value.
+         * @param subst the string that substitutes the matched regex, using {@code $} for
+         * group substitution ({@code $1} for 1st group match, {@code $2} for 2nd, etc).
+         */
+        public Builder(@NonNull AutofillId id, @NonNull Pattern regex, @NonNull String subst) {
+            addField(id, regex, subst);
+        }
+
+        /**
+         * Adds the transformed contents of a field to the overall result of this transformation.
+         *
+         * @param id id of the screen field.
+         * @param regex regular expression with groups (delimited by {@code (} and {@code (}) that
+         * are used to substitute parts of the value.
+         * @param subst the string that substitutes the matched regex, using {@code $} for
+         * group substitution ({@code $1} for 1st group match, {@code $2} for 2nd, etc).
+         *
+         * @return this builder.
+         */
+        public Builder addField(@NonNull AutofillId id, @NonNull Pattern regex,
+                @NonNull String subst) {
+            throwIfDestroyed();
+            Preconditions.checkNotNull(id);
+            Preconditions.checkNotNull(regex);
+            Preconditions.checkNotNull(subst);
+
+            mFields.put(id, new Pair<>(regex, subst));
+            return this;
+        }
+
+        /**
+         * Creates a new {@link CharSequenceTransformation} instance.
+         */
+        public CharSequenceTransformation build() {
+            throwIfDestroyed();
+            mDestroyed = true;
+            return new CharSequenceTransformation(this);
+        }
+
+        private void throwIfDestroyed() {
+            Preconditions.checkState(!mDestroyed, "Already called build()");
+        }
+    }
+
+    /////////////////////////////////////
+    // Object "contract" methods. //
+    /////////////////////////////////////
+    @Override
+    public String toString() {
+        if (!sDebug) return super.toString();
+
+        return "MultipleViewsCharSequenceTransformation: [fields=" + mFields + "]";
+    }
+
+    /////////////////////////////////////
+    // Parcelable "contract" methods. //
+    /////////////////////////////////////
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel parcel, int flags) {
+        final int size = mFields.size();
+        final AutofillId[] ids = new AutofillId[size];
+        final Pattern[] regexs = new Pattern[size];
+        final String[] substs = new String[size];
+        Pair<Pattern, String> pair;
+        for (int i = 0; i < size; i++) {
+            ids[i] = mFields.keyAt(i);
+            pair = mFields.valueAt(i);
+            regexs[i] = pair.first;
+            substs[i] = pair.second;
+        }
+        parcel.writeParcelableArray(ids, flags);
+        parcel.writeSerializable(regexs);
+        parcel.writeStringArray(substs);
+    }
+
+    public static final Parcelable.Creator<CharSequenceTransformation> CREATOR =
+            new Parcelable.Creator<CharSequenceTransformation>() {
+        @Override
+        public CharSequenceTransformation createFromParcel(Parcel parcel) {
+            final AutofillId[] ids = parcel.readParcelableArray(null, AutofillId.class);
+            final Pattern[] regexs = (Pattern[]) parcel.readSerializable();
+            final String[] substs = parcel.createStringArray();
+
+            // Always go through the builder to ensure the data ingested by
+            // the system obeys the contract of the builder to avoid attacks
+            // using specially crafted parcels.
+            final CharSequenceTransformation.Builder builder =
+                    new CharSequenceTransformation.Builder(ids[0], regexs[0], substs[0]);
+
+            final int size = ids.length;
+            for (int i = 1; i < size; i++) {
+                builder.addField(ids[i], regexs[i], substs[i]);
+            }
+            return builder.build();
+        }
+
+        @Override
+        public CharSequenceTransformation[] newArray(int size) {
+            return new CharSequenceTransformation[size];
+        }
+    };
+}
diff --git a/core/java/android/service/autofill/CustomDescription.java b/core/java/android/service/autofill/CustomDescription.java
new file mode 100644
index 0000000..9a4cbc4
--- /dev/null
+++ b/core/java/android/service/autofill/CustomDescription.java
@@ -0,0 +1,248 @@
+/*
+ * 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.service.autofill;
+
+import static android.view.autofill.Helper.sDebug;
+
+import android.annotation.NonNull;
+import android.app.Activity;
+import android.app.PendingIntent;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+import android.util.Pair;
+import android.widget.RemoteViews;
+
+import com.android.internal.util.Preconditions;
+
+import java.util.ArrayList;
+
+/**
+ * Defines a custom description for the Save UI affordance.
+ *
+ * <p>This is useful when the autofill service needs to show a detailed view of what would be saved;
+ * for example, when the screen contains a credit card, it could display a logo of the credit card
+ * bank, the last four digits of the credit card number, and its expiration number.
+ *
+ * <p>A custom description is made of 2 parts:
+ * <ul>
+ *   <li>A {@link RemoteViews presentation template} containing children views.
+ *   <li>{@link Transformation Transformations} to populate the children views.
+ * </ul>
+ *
+ * <p>For the credit card example mentioned above, the (simplified) template would be:
+ *
+ * <pre class="prettyprint">
+ * &lt;LinearLayout&gt;
+ *   &lt;ImageView android:id="@+id/templateccLogo"/&gt;
+ *   &lt;TextView android:id="@+id/templateCcNumber"/&gt;
+ *   &lt;TextView android:id="@+id/templateExpDate"/&gt;
+ * &lt;/LinearLayout&gt;
+ * </pre>
+ *
+ * <p>Which in code translates to:
+ *
+ * <pre class="prettyprint">
+ *   CustomDescription.Builder buider = new Builder(new RemoteViews(pgkName, R.layout.cc_template);
+ * </pre>
+ *
+ * <p>Then the value of each of the 3 children would be changed at runtime based on the the value of
+ * the screen fields and the {@link Transformation Transformations}:
+ *
+ * <pre class="prettyprint">
+ * // Image child - different logo for each bank, based on credit card prefix
+ * builder.addChild(R.id.templateccLogo,
+ *   new ImageTransformation.Builder(ccNumberId)
+ *     .addOption(Pattern.compile(""^4815.*$"), R.drawable.ic_credit_card_logo1)
+ *     .addOption(Pattern.compile(""^1623.*$"), R.drawable.ic_credit_card_logo2)
+ *     .addOption(Pattern.compile(""^42.*$"), R.drawable.ic_credit_card_logo3)
+ *     .build();
+ * // Masked credit card number (as .....LAST_4_DIGITS)
+ * builder.addChild(R.id.templateCcNumber, new CharSequenceTransformation
+ *     .Builder(ccNumberId, Pattern.compile(""^.*(\\d\\d\\d\\d)$"), "...$1")
+ *     .build();
+ * // Expiration date as MM / YYYY:
+ * builder.addChild(R.id.templateExpDate, new CharSequenceTransformation
+ *     .Builder(ccExpMonthId, Pattern.compile(""^(\\d\\d)$"), "Exp: $1")
+ *     .addField(ccExpYearId, Pattern.compile(""^(\\d\\d)$"), "/$1")
+ *     .build();
+ * </pre>
+ *
+ * <p>See {@link ImageTransformation}, {@link CharSequenceTransformation} for more info about these
+ * transformations.
+ */
+public final class CustomDescription implements Parcelable {
+
+    private static final String TAG = "CustomDescription";
+
+    private final RemoteViews mPresentation;
+    private final ArrayList<Pair<Integer, InternalTransformation>> mTransformations;
+
+    private CustomDescription(Builder builder) {
+        mPresentation = builder.mPresentation;
+        mTransformations = builder.mTransformations;
+    }
+
+    /** @hide */
+    public RemoteViews getPresentation(ValueFinder finder) {
+        if (mTransformations != null) {
+            final int size = mTransformations.size();
+            if (sDebug) Log.d(TAG, "getPresentation(): applying " + size + " transformations");
+            for (int i = 0; i < size; i++) {
+                final Pair<Integer, InternalTransformation> pair = mTransformations.get(i);
+                final int id = pair.first;
+                final InternalTransformation transformation = pair.second;
+                if (sDebug) Log.d(TAG, "#" + i + ": " + transformation);
+
+                try {
+                    transformation.apply(finder, mPresentation, id);
+                } catch (Exception e) {
+                    // Do not log full exception to avoid PII leaking
+                    Log.e(TAG, "Could not apply transformation " + transformation + ": "
+                            + e.getClass());
+                    return null;
+                }
+            }
+        }
+        return mPresentation;
+    }
+
+    /**
+     * Builder for {@link CustomDescription} objects.
+     */
+    public static class Builder {
+        private final RemoteViews mPresentation;
+
+        private ArrayList<Pair<Integer, InternalTransformation>> mTransformations;
+
+        /**
+         * Default constructor.
+         *
+         * <p><b>Note:</b> If any child view of presentation triggers a
+         * {@link RemoteViews#setOnClickPendingIntent(int, android.app.PendingIntent) pending intent
+         * on click}, such {@link PendingIntent} must follow the restrictions below, otherwise
+         * it might not be triggered or the Save affordance might not be shown when its activity
+         * is finished:
+         * <ul>
+         *   <li>It cannot be created with the {@link PendingIntent#FLAG_IMMUTABLE} flag.
+         *   <li>It must be a PendingIntent for an {@link Activity}.
+         *   <li>The activity must call {@link Activity#finish()} when done.
+         *   <li>The activity should not launch other activities.
+         * </ul>
+         *
+         * @param parentPresentation template presentation with (optional) children views.
+         */
+        public Builder(RemoteViews parentPresentation) {
+            mPresentation = parentPresentation;
+        }
+
+        /**
+         * Adds a transformation to replace the value of a child view with the fields in the
+         * screen.
+         *
+         * <p>When multiple transformations are added for the same child view, they will be applied
+         * in the same order as added.
+         *
+         * @param id view id of the children view.
+         * @param transformation an implementation provided by the Android System.
+         * @return this builder.
+         * @throws IllegalArgumentException if {@code transformation} is not a class provided
+         * by the Android System.
+         */
+        public Builder addChild(int id, @NonNull Transformation transformation) {
+            Preconditions.checkArgument((transformation instanceof InternalTransformation),
+                    "not provided by Android System: " + transformation);
+            if (mTransformations == null) {
+                mTransformations = new ArrayList<>();
+            }
+            mTransformations.add(new Pair<>(id, (InternalTransformation) transformation));
+            return this;
+        }
+
+        /**
+         * Creates a new {@link CustomDescription} instance.
+         */
+        public CustomDescription build() {
+            return new CustomDescription(this);
+        }
+    }
+
+    /////////////////////////////////////
+    // Object "contract" methods. //
+    /////////////////////////////////////
+    @Override
+    public String toString() {
+        if (!sDebug) return super.toString();
+
+        return new StringBuilder("CustomDescription: [presentation=")
+                .append(mPresentation)
+                .append(", transformations=").append(mTransformations)
+                .append("]").toString();
+    }
+
+    /////////////////////////////////////
+    // Parcelable "contract" methods. //
+    /////////////////////////////////////
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeParcelable(mPresentation, flags);
+        if (mTransformations == null) {
+            dest.writeIntArray(null);
+        } else {
+            final int size = mTransformations.size();
+            final int[] ids = new int[size];
+            final InternalTransformation[] values = new InternalTransformation[size];
+            for (int i = 0; i < size; i++) {
+                final Pair<Integer, InternalTransformation> pair = mTransformations.get(i);
+                ids[i] = pair.first;
+                values[i] = pair.second;
+            }
+            dest.writeIntArray(ids);
+            dest.writeParcelableArray(values, flags);
+        }
+    }
+    public static final Parcelable.Creator<CustomDescription> CREATOR =
+            new Parcelable.Creator<CustomDescription>() {
+        @Override
+        public CustomDescription createFromParcel(Parcel parcel) {
+            // Always go through the builder to ensure the data ingested by
+            // the system obeys the contract of the builder to avoid attacks
+            // using specially crafted parcels.
+            final Builder builder = new Builder(parcel.readParcelable(null));
+            final int[] ids = parcel.createIntArray();
+            if (ids != null) {
+                final InternalTransformation[] values =
+                    parcel.readParcelableArray(null, InternalTransformation.class);
+                final int size = ids.length;
+                for (int i = 0; i < size; i++) {
+                    builder.addChild(ids[i], values[i]);
+                }
+            }
+            return builder.build();
+        }
+
+        @Override
+        public CustomDescription[] newArray(int size) {
+            return new CustomDescription[size];
+        }
+    };
+}
diff --git a/core/java/android/service/autofill/Dataset.java b/core/java/android/service/autofill/Dataset.java
index 72506ce..21a3df8 100644
--- a/core/java/android/service/autofill/Dataset.java
+++ b/core/java/android/service/autofill/Dataset.java
@@ -26,6 +26,7 @@
 import android.view.autofill.AutofillId;
 import android.view.autofill.AutofillValue;
 import android.widget.RemoteViews;
+
 import com.android.internal.util.Preconditions;
 
 import java.util.ArrayList;
diff --git a/core/java/android/service/autofill/FillEventHistory.java b/core/java/android/service/autofill/FillEventHistory.java
index f7dc1c5..768e743 100644
--- a/core/java/android/service/autofill/FillEventHistory.java
+++ b/core/java/android/service/autofill/FillEventHistory.java
@@ -22,8 +22,7 @@
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.view.autofill.AutofillId;
-import android.widget.RemoteViews;
+import android.view.autofill.AutofillManager;
 
 import com.android.internal.util.Preconditions;
 
@@ -81,7 +80,7 @@
     /**
      * Returns the client state set in the previous {@link FillResponse}.
      *
-     * <p><b>NOTE: </b>the state is associated with the app that was autofilled in the previous
+     * <p><b>Note: </b>the state is associated with the app that was autofilled in the previous
      * {@link AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal, FillCallback)}
      * , which is not necessary the same app being autofilled now.
      */
@@ -148,6 +147,14 @@
     public static final class Event {
         /**
          * A dataset was selected. The dataset selected can be read from {@link #getDatasetId()}.
+         *
+         * <p><b>Note: </b>on Android {@link android.os.Build.VERSION_CODES#O}, this event was also
+         * incorrectly reported after a
+         * {@link Dataset.Builder#setAuthentication(IntentSender) dataset authentication} was
+         * selected and the service returned a dataset in the
+         * {@link AutofillManager#EXTRA_AUTHENTICATION_RESULT} of the activity launched from that
+         * {@link IntentSender}. This behavior was fixed on Android
+         * {@link android.os.Build.VERSION_CODES#O_MR1}.
          */
         public static final int TYPE_DATASET_SELECTED = 0;
 
@@ -158,8 +165,8 @@
         public static final int TYPE_DATASET_AUTHENTICATION_SELECTED = 1;
 
         /**
-         * A {@link FillResponse.Builder#setAuthentication(AutofillId[], IntentSender, RemoteViews)
-         * fill response authentication} was selected.
+         * A {@link FillResponse.Builder#setAuthentication(android.view.autofill.AutofillId[],
+         * IntentSender, android.widget.RemoteViews) fill response authentication} was selected.
          */
         public static final int TYPE_AUTHENTICATION_SELECTED = 2;
 
diff --git a/core/java/android/service/autofill/FillRequest.java b/core/java/android/service/autofill/FillRequest.java
index fd6da05..e604fde 100644
--- a/core/java/android/service/autofill/FillRequest.java
+++ b/core/java/android/service/autofill/FillRequest.java
@@ -20,7 +20,6 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.os.Bundle;
-import android.os.CancellationSignal;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.view.View;
@@ -38,7 +37,7 @@
  * interesting for saving and what are the possible ways to fill the inputs on
  * the screen if applicable.
  *
- * @see AutofillService#onFillRequest(FillRequest, CancellationSignal, FillCallback)
+ * @see AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal, FillCallback)
  */
 public final class FillRequest implements Parcelable {
 
@@ -61,9 +60,8 @@
      * <p>An explicit autofill request is triggered when the
      * {@link android.view.autofill.AutofillManager#requestAutofill(View)} or
      * {@link android.view.autofill.AutofillManager#requestAutofill(View, int, android.graphics.Rect)}
-     * is called. For example, standard {@link android.widget.TextView} views that use
-     * an {@link android.widget.Editor} shows an {@code AUTOFILL} option in the overflow menu that
-     * triggers such request.
+     * is called. For example, standard {@link android.widget.TextView} views show an
+     * {@code AUTOFILL} option in the overflow menu that triggers such request.
      */
     public static final int FLAG_MANUAL_REQUEST = 0x1;
 
@@ -123,13 +121,15 @@
         return mContexts;
     }
 
+    @Override
+    public String toString() {
+        return "FillRequest: [id=" + mId + ", flags=" + mFlags + ", ctxts= " + mContexts + "]";
+    }
+
     /**
      * Gets the extra client state returned from the last {@link
-     * AutofillService#onFillRequest(FillRequest, CancellationSignal, FillCallback)
-     * fill request}, so the service can use it for state management.
-     *
-     * <p>Once a {@link AutofillService#onSaveRequest(SaveRequest, SaveCallback)
-     * save request} is made, the client state is cleared.
+     * AutofillService#onFillRequest(FillRequest, CancellationSignal, FillCallback)}
+     * fill request.
      *
      * @return The client state.
      */
diff --git a/core/java/android/service/autofill/FillResponse.java b/core/java/android/service/autofill/FillResponse.java
index 80ef3aa..6d8a959 100644
--- a/core/java/android/service/autofill/FillResponse.java
+++ b/core/java/android/service/autofill/FillResponse.java
@@ -23,15 +23,16 @@
 import android.annotation.Nullable;
 import android.app.Activity;
 import android.content.IntentSender;
+import android.content.pm.ParceledListSlice;
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.view.autofill.AutofillId;
-import android.view.autofill.AutofillManager;
 import android.widget.RemoteViews;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 /**
  * Response for a {@link
@@ -41,7 +42,7 @@
  */
 public final class FillResponse implements Parcelable {
 
-    private final @Nullable ArrayList<Dataset> mDatasets;
+    private final @Nullable ParceledListSlice<Dataset> mDatasets;
     private final @Nullable SaveInfo mSaveInfo;
     private final @Nullable Bundle mClientState;
     private final @Nullable RemoteViews mPresentation;
@@ -51,7 +52,7 @@
     private int mRequestId;
 
     private FillResponse(@NonNull Builder builder) {
-        mDatasets = builder.mDatasets;
+        mDatasets = (builder.mDatasets != null) ? new ParceledListSlice<>(builder.mDatasets) : null;
         mSaveInfo = builder.mSaveInfo;
         mClientState = builder.mCLientState;
         mPresentation = builder.mPresentation;
@@ -67,8 +68,8 @@
     }
 
     /** @hide */
-    public @Nullable ArrayList<Dataset> getDatasets() {
-        return mDatasets;
+    public @Nullable List<Dataset> getDatasets() {
+        return (mDatasets != null) ? mDatasets.getList() : null;
     }
 
     /** @hide */
@@ -143,13 +144,16 @@
          * for the user to trigger your authentication flow.
          *
          * <p>When a user triggers autofill, the system launches the provided intent
-         * whose extras will have the {@link AutofillManager#EXTRA_ASSIST_STRUCTURE screen
+         * whose extras will have the
+         * {@link android.view.autofill.AutofillManager#EXTRA_ASSIST_STRUCTURE screen
          * content} and your {@link android.view.autofill.AutofillManager#EXTRA_CLIENT_STATE
          * client state}. Once you complete your authentication flow you should set the
-         * {@link Activity} result to {@link android.app.Activity#RESULT_OK} and provide the fully
-         * populated {@link FillResponse response} by setting it to the {@link
-         * AutofillManager#EXTRA_AUTHENTICATION_RESULT} extra.
-         * For example, if you provided an empty {@link FillResponse resppnse} because the
+         * {@link Activity} result to {@link android.app.Activity#RESULT_OK} and set the
+         * {@link android.view.autofill.AutofillManager#EXTRA_AUTHENTICATION_RESULT} extra
+         * with the fully populated {@link FillResponse response} (or {@code null} if the screen
+         * cannot be autofilled).
+         *
+         * <p>For example, if you provided an empty {@link FillResponse response} because the
          * user's data was locked and marked that the response needs an authentication then
          * in the response returned if authentication succeeds you need to provide all
          * available data sets some of which may need to be further authenticated, for
@@ -168,7 +172,7 @@
          * @param ids id of Views that when focused will display the authentication UI affordance.
          *
          * @return This builder.
-         * @throw {@link IllegalArgumentException} if {@code ids} is {@code null} or empty, or if
+         * @throws IllegalArgumentException if {@code ids} is {@code null} or empty, or if
          * neither {@code authentication} nor {@code presentation} is non-{@code null}.
          *
          * @see android.app.PendingIntent#getIntentSender()
@@ -205,12 +209,14 @@
         /**
          * Adds a new {@link Dataset} to this response.
          *
-         * <p><b>Note: </b> the total number of datasets is limited by the Binder transaction size,
-         * so it's recommended to keep it small (in the range of 10-20 at most) and use pagination
-         * by adding a fake
-         * {@link Dataset.Builder#setAuthentication(IntentSender) authenticated dataset}
-         * at the end with a presentation string like "Next 10" that would return a new
-         * {@link FillResponse} with the next 10 datasets, and so on.
+         * <p><b>Note: </b> on Android {@link android.os.Build.VERSION_CODES#O}, the total number of
+         * datasets is limited by the Binder transaction size, so it's recommended to keep it
+         * small (in the range of 10-20 at most) and use pagination by adding a fake
+         * {@link Dataset.Builder#setAuthentication(IntentSender) authenticated dataset} at the end
+         * with a presentation string like "Next 10" that would return a new {@link FillResponse}
+         * with the next 10 datasets, and so on. This limitation was lifted on
+         * Android {@link android.os.Build.VERSION_CODES#O_MR1}, although the Binder transaction
+         * size can still be reached if each dataset itself is too big.
          *
          * @return This builder.
          */
@@ -298,7 +304,7 @@
         // TODO: create a dump() method instead
         return new StringBuilder(
                 "FillResponse : [mRequestId=" + mRequestId)
-                .append(", datasets=").append(mDatasets)
+                .append(", datasets=").append(mDatasets == null ? "N/A" : mDatasets.getList())
                 .append(", saveInfo=").append(mSaveInfo)
                 .append(", clientState=").append(mClientState != null)
                 .append(", hasPresentation=").append(mPresentation != null)
@@ -320,7 +326,7 @@
 
     @Override
     public void writeToParcel(Parcel parcel, int flags) {
-        parcel.writeTypedArrayList(mDatasets, flags);
+        parcel.writeParcelable(mDatasets, flags);
         parcel.writeParcelable(mSaveInfo, flags);
         parcel.writeParcelable(mClientState, flags);
         parcel.writeParcelableArray(mAuthenticationIds, flags);
@@ -338,7 +344,8 @@
             // the system obeys the contract of the builder to avoid attacks
             // using specially crafted parcels.
             final Builder builder = new Builder();
-            final ArrayList<Dataset> datasets = parcel.readTypedArrayList(null);
+            final ParceledListSlice<Dataset> datasetSlice = parcel.readParcelable(null);
+            final List<Dataset> datasets = (datasetSlice != null) ? datasetSlice.getList() : null;
             final int datasetCount = (datasets != null) ? datasets.size() : 0;
             for (int i = 0; i < datasetCount; i++) {
                 builder.addDataset(datasets.get(i));
diff --git a/core/java/android/service/autofill/ImageTransformation.java b/core/java/android/service/autofill/ImageTransformation.java
new file mode 100644
index 0000000..2151f74
--- /dev/null
+++ b/core/java/android/service/autofill/ImageTransformation.java
@@ -0,0 +1,219 @@
+/*
+ * 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.service.autofill;
+
+import static android.view.autofill.Helper.sDebug;
+
+import android.annotation.DrawableRes;
+import android.annotation.NonNull;
+import android.annotation.TestApi;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+import android.util.Pair;
+import android.view.autofill.AutofillId;
+import android.widget.ImageView;
+import android.widget.RemoteViews;
+
+import com.android.internal.util.Preconditions;
+
+import java.util.ArrayList;
+import java.util.regex.Pattern;
+
+/**
+ * Replaces the content of a child {@link ImageView} of a
+ * {@link RemoteViews presentation template} with the first image that matches a regular expression
+ * (regex).
+ *
+ * <p>Typically used to display credit card logos. Example:
+ *
+ * <pre class="prettyprint">
+ *   new ImageTransformation.Builder(ccNumberId, Pattern.compile("^4815.*$"),
+ *                                   R.drawable.ic_credit_card_logo1)
+ *     .addOption(Pattern.compile("^1623.*$"), R.drawable.ic_credit_card_logo2)
+ *     .addOption(Pattern.compile("^42.*$"), R.drawable.ic_credit_card_logo3)
+ *     .build();
+ * </pre>
+ *
+ * <p>There is no imposed limit in the number of options, but keep in mind that regexs are
+ * expensive to evaluate, so use the minimum number of regexs and add the most common first
+ * (for example, if this is a tranformation for a credit card logo and the most common credit card
+ * issuers are banks X and Y, add the regexes that resolves these 2 banks first).
+ */
+public final class ImageTransformation extends InternalTransformation implements Transformation,
+        Parcelable {
+    private static final String TAG = "ImageTransformation";
+
+    private final AutofillId mId;
+    private final ArrayList<Pair<Pattern, Integer>> mOptions;
+
+    private ImageTransformation(Builder builder) {
+        mId = builder.mId;
+        mOptions = builder.mOptions;
+    }
+
+    /** @hide */
+    @TestApi
+    @Override
+    public void apply(@NonNull ValueFinder finder, @NonNull RemoteViews parentTemplate,
+            int childViewId) throws Exception {
+        final String value = finder.findByAutofillId(mId);
+        if (value == null) {
+            Log.w(TAG, "No view for id " + mId);
+            return;
+        }
+        final int size = mOptions.size();
+        if (sDebug) {
+            Log.d(TAG, size + " multiple options on id " + childViewId + " to compare against");
+        }
+
+        for (int i = 0; i < size; i++) {
+            final Pair<Pattern, Integer> option = mOptions.get(i);
+            try {
+                if (option.first.matcher(value).matches()) {
+                    Log.d(TAG, "Found match at " + i + ": " + option);
+                    parentTemplate.setImageViewResource(childViewId, option.second);
+                    return;
+                }
+            } catch (Exception e) {
+                // Do not log full exception to avoid PII leaking
+                Log.w(TAG, "Error matching regex #" + i + "(" + option.first.pattern() + ") on id "
+                        + option.second + ": " + e.getClass());
+                throw e;
+
+            }
+        }
+        if (sDebug) Log.d(TAG, "No match for " + value);
+    }
+
+    /**
+     * Builder for {@link ImageTransformation} objects.
+     */
+    public static class Builder {
+        private final AutofillId mId;
+        private final ArrayList<Pair<Pattern, Integer>> mOptions = new ArrayList<>();
+        private boolean mDestroyed;
+
+        /**
+         * Create a new builder for a autofill id and add a first option.
+         *
+         * @param id id of the screen field that will be used to evaluate whether the image should
+         * be used.
+         * @param regex regular expression defining what should be matched to use this image.
+         * @param resId resource id of the image (in the autofill service's package). The
+         * {@link RemoteViews presentation} must contain a {@link ImageView} child with that id.
+         */
+        public Builder(@NonNull AutofillId id, @NonNull Pattern regex, @DrawableRes int resId) {
+            mId = Preconditions.checkNotNull(id);
+
+            addOption(regex, resId);
+        }
+
+        /**
+         * Adds an option to replace the child view with a different image when the regex matches.
+         *
+         * @param regex regular expression defining what should be matched to use this image.
+         * @param resId resource id of the image (in the autofill service's package). The
+         * {@link RemoteViews presentation} must contain a {@link ImageView} child with that id.
+         *
+         * @return this build
+         */
+        public Builder addOption(@NonNull Pattern regex, @DrawableRes int resId) {
+            throwIfDestroyed();
+
+            Preconditions.checkNotNull(regex);
+            Preconditions.checkArgument(resId != 0);
+
+            mOptions.add(new Pair<>(regex, resId));
+            return this;
+        }
+
+        /**
+         * Creates a new {@link ImageTransformation} instance.
+         */
+        public ImageTransformation build() {
+            throwIfDestroyed();
+            mDestroyed = true;
+            return new ImageTransformation(this);
+        }
+
+        private void throwIfDestroyed() {
+            Preconditions.checkState(!mDestroyed, "Already called build()");
+        }
+    }
+
+    /////////////////////////////////////
+    // Object "contract" methods. //
+    /////////////////////////////////////
+    @Override
+    public String toString() {
+        if (!sDebug) return super.toString();
+
+        return "ImageTransformation: [id=" + mId + ", options=" + mOptions + "]";
+    }
+
+    /////////////////////////////////////
+    // Parcelable "contract" methods. //
+    /////////////////////////////////////
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+    @Override
+    public void writeToParcel(Parcel parcel, int flags) {
+        parcel.writeParcelable(mId, flags);
+
+        final int size = mOptions.size();
+        final Pattern[] regexs = new Pattern[size];
+        final int[] resIds = new int[size];
+        for (int i = 0; i < size; i++) {
+            Pair<Pattern, Integer> regex = mOptions.get(i);
+            regexs[i] = regex.first;
+            resIds[i] = regex.second;
+        }
+        parcel.writeSerializable(regexs);
+        parcel.writeIntArray(resIds);
+    }
+
+    public static final Parcelable.Creator<ImageTransformation> CREATOR =
+            new Parcelable.Creator<ImageTransformation>() {
+        @Override
+        public ImageTransformation createFromParcel(Parcel parcel) {
+            final AutofillId id = parcel.readParcelable(null);
+
+            final Pattern[] regexs = (Pattern[]) parcel.readSerializable();
+            final int[] resIds = parcel.createIntArray();
+
+            // Always go through the builder to ensure the data ingested by the system obeys the
+            // contract of the builder to avoid attacks using specially crafted parcels.
+            final ImageTransformation.Builder builder = new ImageTransformation.Builder(id,
+                    regexs[0], resIds[0]);
+
+            final int size = regexs.length;
+            for (int i = 1; i < size; i++) {
+                builder.addOption(regexs[i], resIds[i]);
+            }
+
+            return builder.build();
+        }
+
+        @Override
+        public ImageTransformation[] newArray(int size) {
+            return new ImageTransformation[size];
+        }
+    };
+}
diff --git a/core/java/android/service/autofill/InternalTransformation.java b/core/java/android/service/autofill/InternalTransformation.java
new file mode 100644
index 0000000..974397b
--- /dev/null
+++ b/core/java/android/service/autofill/InternalTransformation.java
@@ -0,0 +1,42 @@
+/*
+ * 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.service.autofill;
+
+import android.annotation.NonNull;
+import android.os.Parcelable;
+import android.widget.RemoteViews;
+
+/**
+ * Superclass of all transformation the system understands. As this is not public all
+ * subclasses have to implement {@link Transformation} again.
+ *
+ * @hide
+ */
+abstract class InternalTransformation implements Transformation, Parcelable {
+
+    /**
+     * Applies this transformation to a child view of a {@link android.widget.RemoteViews
+     * presentation template}.
+     *
+     * @param finder object used to find the value of a field in the screen.
+     * @param template the {@link RemoteViews presentation template}.
+     * @param childViewId resource id of the child view inside the template.
+     *
+     * @hide
+     */
+    abstract void apply(@NonNull ValueFinder finder, @NonNull RemoteViews template,
+            int childViewId) throws Exception;
+}
diff --git a/core/java/android/service/autofill/InternalValidator.java b/core/java/android/service/autofill/InternalValidator.java
new file mode 100644
index 0000000..e11cf6a
--- /dev/null
+++ b/core/java/android/service/autofill/InternalValidator.java
@@ -0,0 +1,38 @@
+/*
+ * 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.service.autofill;
+
+import android.annotation.NonNull;
+import android.os.Parcelable;
+
+/**
+ * Superclass of all validators the system understands. As this is not public all public subclasses
+ * have to implement {@link Validator} again.
+ *
+ * @hide
+ */
+public abstract class InternalValidator implements Validator, Parcelable {
+
+    /**
+     * Decides whether the contents of the screen are valid.
+     *
+     * @param finder object used to find the value of a field in the screen.
+     * @return {@code true} if the contents are valid, {@code false} otherwise.
+     *
+     * @hide
+     */
+    public abstract boolean isValid(@NonNull ValueFinder finder);
+}
diff --git a/core/java/android/service/autofill/LuhnChecksumValidator.java b/core/java/android/service/autofill/LuhnChecksumValidator.java
new file mode 100644
index 0000000..0b5930d
--- /dev/null
+++ b/core/java/android/service/autofill/LuhnChecksumValidator.java
@@ -0,0 +1,127 @@
+/*
+ * 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.service.autofill;
+
+import static android.view.autofill.Helper.sDebug;
+
+import android.annotation.NonNull;
+import android.annotation.TestApi;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+import android.view.autofill.AutofillId;
+
+import com.android.internal.util.Preconditions;
+
+/**
+ * Validator that returns {@code true} if the number created by concatenating all given fields
+ * pass a Luhn algorithm checksum. All non-digits are ignored.
+ *
+ * <p>See {@link SaveInfo.Builder#setValidator(Validator)} for examples.
+ */
+public final class LuhnChecksumValidator extends InternalValidator implements Validator,
+        Parcelable {
+    private static final String TAG = "LuhnChecksumValidator";
+
+    private final AutofillId[] mIds;
+
+    /**
+      * Default constructor.
+      *
+      * @param ids id of fields that comprises the number to be checked.
+      */
+    public LuhnChecksumValidator(@NonNull AutofillId... ids) {
+        mIds = Preconditions.checkArrayElementsNotNull(ids, "ids");
+    }
+
+    /**
+     * Checks if the Luhn checksum is valid.
+     *
+     * @param number The number including the checksum
+     */
+    private static boolean isLuhnChecksumValid(@NonNull String number) {
+        int sum = 0;
+        boolean isDoubled = false;
+
+        for (int i = number.length() - 1; i >= 0; i--) {
+            final int digit = number.charAt(i) - '0';
+            if (digit < 0 || digit > 9) {
+                // Ignore non-digits
+                continue;
+            }
+
+            int addend;
+            if (isDoubled) {
+                addend = digit * 2;
+                if (addend > 9) {
+                    addend -= 9;
+                }
+            } else {
+                addend = digit;
+            }
+            sum += addend;
+            isDoubled = !isDoubled;
+        }
+
+        return sum % 10 == 0;
+    }
+
+    /** @hide */
+    @Override
+    @TestApi
+    public boolean isValid(@NonNull ValueFinder finder) {
+        if (mIds == null || mIds.length == 0) return false;
+
+        final StringBuilder number = new StringBuilder();
+        for (AutofillId id : mIds) {
+            final String partialNumber = finder.findByAutofillId(id);
+            if (partialNumber == null) {
+                if (sDebug) Log.d(TAG, "No partial number for id " + id);
+                return false;
+            }
+            number.append(partialNumber);
+        }
+
+        return isLuhnChecksumValid(number.toString());
+    }
+
+    /////////////////////////////////////
+    // Parcelable "contract" methods. //
+    /////////////////////////////////////
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel parcel, int flags) {
+        parcel.writeParcelableArray(mIds, flags);
+    }
+
+    public static final Parcelable.Creator<LuhnChecksumValidator> CREATOR =
+            new Parcelable.Creator<LuhnChecksumValidator>() {
+        @Override
+        public LuhnChecksumValidator createFromParcel(Parcel parcel) {
+            return new LuhnChecksumValidator(parcel.readParcelableArray(null, AutofillId.class));
+        }
+
+        @Override
+        public LuhnChecksumValidator[] newArray(int size) {
+            return new LuhnChecksumValidator[size];
+        }
+    };
+}
diff --git a/core/java/android/service/autofill/OptionalValidators.java b/core/java/android/service/autofill/OptionalValidators.java
new file mode 100644
index 0000000..f7edd6e
--- /dev/null
+++ b/core/java/android/service/autofill/OptionalValidators.java
@@ -0,0 +1,91 @@
+/*
+ * 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.service.autofill;
+
+import static android.view.autofill.Helper.sDebug;
+
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.Preconditions;
+
+/**
+ * Compound validator that returns {@code true} on {@link #isValid(ValueFinder)} if any
+ * of its subvalidators returns {@code true} as well.
+ *
+ * <p>Used to implement an {@code OR} logical operation.
+ *
+ * @hide
+ */
+final class OptionalValidators extends InternalValidator {
+
+    @NonNull private final InternalValidator[] mValidators;
+
+    OptionalValidators(@NonNull InternalValidator[] validators) {
+        mValidators = Preconditions.checkArrayElementsNotNull(validators, "validators");
+    }
+
+    @Override
+    public boolean isValid(@NonNull ValueFinder finder) {
+        for (InternalValidator validator : mValidators) {
+            final boolean valid = validator.isValid(finder);
+            if (valid) return true;
+        }
+
+        return false;
+    }
+
+    /////////////////////////////////////
+    // Object "contract" methods. //
+    /////////////////////////////////////
+    @Override
+    public String toString() {
+        if (!sDebug) return super.toString();
+
+        return new StringBuilder("OptionalValidators: [validators=").append(mValidators)
+                .append("]")
+                .toString();
+    }
+
+    /////////////////////////////////////
+    // Parcelable "contract" methods. //
+    /////////////////////////////////////
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeParcelableArray(mValidators, flags);
+    }
+
+    public static final Parcelable.Creator<OptionalValidators> CREATOR =
+            new Parcelable.Creator<OptionalValidators>() {
+        @Override
+        public OptionalValidators createFromParcel(Parcel parcel) {
+            return new OptionalValidators(parcel
+                .readParcelableArray(null, InternalValidator.class));
+        }
+
+        @Override
+        public OptionalValidators[] newArray(int size) {
+            return new OptionalValidators[size];
+        }
+    };
+}
diff --git a/core/java/android/service/autofill/RegexValidator.java b/core/java/android/service/autofill/RegexValidator.java
new file mode 100644
index 0000000..9dfe78d
--- /dev/null
+++ b/core/java/android/service/autofill/RegexValidator.java
@@ -0,0 +1,109 @@
+/*
+ * 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.service.autofill;
+
+import static android.view.autofill.Helper.sDebug;
+
+import android.annotation.NonNull;
+import android.annotation.TestApi;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+import android.view.autofill.AutofillId;
+
+import com.android.internal.util.Preconditions;
+
+import java.util.regex.Pattern;
+
+/**
+ * Defines if a field is valid based on a regular expression (regex).
+ *
+ * <p>See {@link SaveInfo.Builder#setValidator(Validator)} for examples.
+ */
+public final class RegexValidator extends InternalValidator implements Validator, Parcelable {
+
+    private static final String TAG = "RegexValidator";
+
+    private final AutofillId mId;
+    private final Pattern mRegex;
+
+    /**
+     * Default constructor.
+     *
+     * @param id id of the field whose regex is applied to.
+     * @param regex regular expression that defines the result of the validator: if the regex
+     * matches the contents of the field identified by {@code id}, it returns {@code true};
+     * otherwise, it returns {@code false}.
+      */
+    public RegexValidator(@NonNull AutofillId id, @NonNull Pattern regex) {
+        mId = Preconditions.checkNotNull(id);
+        mRegex = Preconditions.checkNotNull(regex);
+    }
+
+    /** @hide */
+    @Override
+    @TestApi
+    public boolean isValid(@NonNull ValueFinder finder) {
+        final String value = finder.findByAutofillId(mId);
+        if (value == null) {
+            Log.w(TAG, "No view for id " + mId);
+            return false;
+        }
+
+        final boolean valid = mRegex.matcher(value).matches();
+        if (sDebug) Log.d(TAG, "isValid(): " + valid);
+        return valid;
+    }
+
+    /////////////////////////////////////
+    // Object "contract" methods. //
+    /////////////////////////////////////
+    @Override
+    public String toString() {
+        if (!sDebug) return super.toString();
+
+        return "RegexValidator: [id=" + mId + ", regex=" + mRegex + "]";
+    }
+
+    /////////////////////////////////////
+    // Parcelable "contract" methods. //
+    /////////////////////////////////////
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel parcel, int flags) {
+        parcel.writeParcelable(mId, flags);
+        parcel.writeSerializable(mRegex);
+    }
+
+    public static final Parcelable.Creator<RegexValidator> CREATOR =
+            new Parcelable.Creator<RegexValidator>() {
+        @Override
+        public RegexValidator createFromParcel(Parcel parcel) {
+            return new RegexValidator(parcel.readParcelable(null),
+                    (Pattern) parcel.readSerializable());
+        }
+
+        @Override
+        public RegexValidator[] newArray(int size) {
+            return new RegexValidator[size];
+        }
+    };
+}
diff --git a/core/java/android/service/autofill/RequiredValidators.java b/core/java/android/service/autofill/RequiredValidators.java
new file mode 100644
index 0000000..ac85c28
--- /dev/null
+++ b/core/java/android/service/autofill/RequiredValidators.java
@@ -0,0 +1,90 @@
+/*
+ * 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.service.autofill;
+
+import static android.view.autofill.Helper.sDebug;
+
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.Preconditions;
+
+/**
+ * Compound validator that only returns {@code true} on {@link #isValid(ValueFinder)} if all
+ * of its subvalidators return {@code true} as well.
+ *
+ * <p>Used to implement an {@code AND} logical operation.
+ *
+ * @hide
+ */
+final class RequiredValidators extends InternalValidator {
+
+    @NonNull private final InternalValidator[] mValidators;
+
+    RequiredValidators(@NonNull InternalValidator[] validators) {
+        mValidators = Preconditions.checkArrayElementsNotNull(validators, "validators");
+    }
+
+    @Override
+    public boolean isValid(@NonNull ValueFinder finder) {
+        for (InternalValidator validator : mValidators) {
+            final boolean valid = validator.isValid(finder);
+            if (!valid) return false;
+        }
+        return true;
+    }
+
+    /////////////////////////////////////
+    // Object "contract" methods. //
+    /////////////////////////////////////
+    @Override
+    public String toString() {
+        if (!sDebug) return super.toString();
+
+        return new StringBuilder("RequiredValidators: [validators=").append(mValidators)
+                .append("]")
+                .toString();
+    }
+
+    /////////////////////////////////////
+    // Parcelable "contract" methods. //
+    /////////////////////////////////////
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeParcelableArray(mValidators, flags);
+    }
+
+    public static final Parcelable.Creator<RequiredValidators> CREATOR =
+            new Parcelable.Creator<RequiredValidators>() {
+        @Override
+        public RequiredValidators createFromParcel(Parcel parcel) {
+            return new RequiredValidators(parcel
+                .readParcelableArray(null, InternalValidator.class));
+        }
+
+        @Override
+        public RequiredValidators[] newArray(int size) {
+            return new RequiredValidators[size];
+        }
+    };
+}
diff --git a/core/java/android/service/autofill/SaveCallback.java b/core/java/android/service/autofill/SaveCallback.java
index 3a70138..7207f1d 100644
--- a/core/java/android/service/autofill/SaveCallback.java
+++ b/core/java/android/service/autofill/SaveCallback.java
@@ -34,9 +34,13 @@
 
     /**
      * Notifies the Android System that an
-     * {@link AutofillService#onSaveRequest(SaveRequest, SaveCallback)} was successfully fulfilled
+     * {@link AutofillService#onSaveRequest(SaveRequest, SaveCallback)} was successfully handled
      * by the service.
      *
+     * <p>If the service could not handle the request right away&mdash;for example, because it must
+     * launch an activity asking the user to authenticate first or because the network is
+     * down&mdash;it should still call {@link #onSuccess()}.
+     *
      * @throws RuntimeException if an error occurred while calling the Android System.
      */
     public void onSuccess() {
@@ -51,9 +55,16 @@
 
     /**
      * Notifies the Android System that an
-     * {@link AutofillService#onSaveRequest(SaveRequest, SaveCallback)} could not be fulfilled
+     * {@link AutofillService#onSaveRequest(SaveRequest, SaveCallback)} could not be handled
      * by the service.
      *
+     * <p>This method should only be called when the service could not handle the request right away
+     * and could not recover or retry it. If the service could retry or recover, it could keep
+     * the {@link SaveRequest} and call {@link #onSuccess()} instead.
+     *
+     * <p><b>Note:</b> The Android System displays an UI with the supplied error message; if
+     * you prefer to show your own message, call {@link #onSuccess()} instead.
+     *
      * @param message error message to be displayed to the user.
      *
      * @throws RuntimeException if an error occurred while calling the Android System.
diff --git a/core/java/android/service/autofill/SaveInfo.java b/core/java/android/service/autofill/SaveInfo.java
index 95d393b..630e450 100644
--- a/core/java/android/service/autofill/SaveInfo.java
+++ b/core/java/android/service/autofill/SaveInfo.java
@@ -30,6 +30,7 @@
 import android.view.autofill.AutofillManager;
 import android.view.autofill.AutofillValue;
 
+import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.Preconditions;
 
 import java.lang.annotation.Retention;
@@ -117,14 +118,21 @@
  *   <li>The {@link AutofillValue} of at least one view (be it required or optional) has changed
  *       (i.e., it's neither the same value passed in a {@link Dataset}, nor the initial value
  *       presented in the view).
+ *   <li>There is no {@link Dataset} in the last {@link FillResponse} that completely matches the
+ *       screen state (i.e., all required and optional fields in the dataset have the same value as
+ *       the fields in the screen).
  *   <li>The user explicitly tapped the UI affordance asking to save data for autofill.
  * </ul>
  *
  * <p>The service can also customize some aspects of the save UI affordance:
  * <ul>
- *   <li>Add a subtitle by calling {@link Builder#setDescription(CharSequence)}.
+ *   <li>Add a simple subtitle by calling {@link Builder#setDescription(CharSequence)}.
+ *   <li>Add a customized subtitle by calling
+ *       {@link Builder#setCustomDescription(CustomDescription)}.
  *   <li>Customize the button used to reject the save request by calling
  *       {@link Builder#setNegativeAction(int, IntentSender)}.
+ *   <li>Decide whether the UI should be shown based on the user input validation by calling
+ *       {@link Builder#setValidator(Validator)}.
  * </ul>
  */
 public final class SaveInfo implements Parcelable {
@@ -222,6 +230,8 @@
     private final AutofillId[] mOptionalIds;
     private final CharSequence mDescription;
     private final int mFlags;
+    private final CustomDescription mCustomDescription;
+    private final InternalValidator mValidator;
 
     private SaveInfo(Builder builder) {
         mType = builder.mType;
@@ -231,6 +241,8 @@
         mOptionalIds = builder.mOptionalIds;
         mDescription = builder.mDescription;
         mFlags = builder.mFlags;
+        mCustomDescription = builder.mCustomDescription;
+        mValidator = builder.mValidator;
     }
 
     /** @hide */
@@ -244,7 +256,7 @@
     }
 
     /** @hide */
-    public AutofillId[] getRequiredIds() {
+    public @Nullable AutofillId[] getRequiredIds() {
         return mRequiredIds;
     }
 
@@ -268,6 +280,18 @@
         return mDescription;
     }
 
+     /** @hide */
+    @Nullable
+    public CustomDescription getCustomDescription() {
+        return mCustomDescription;
+    }
+
+    /** @hide */
+    @Nullable
+    public InternalValidator getValidator() {
+        return mValidator;
+    }
+
     /**
      * A builder for {@link SaveInfo} objects.
      */
@@ -281,12 +305,14 @@
         private CharSequence mDescription;
         private boolean mDestroyed;
         private int mFlags;
+        private CustomDescription mCustomDescription;
+        private InternalValidator mValidator;
 
         /**
          * Creates a new builder.
          *
-         * @param type the type of information the associated {@link FillResponse} represents, can
-         * be any combination of {@link SaveInfo#SAVE_DATA_TYPE_GENERIC},
+         * @param type the type of information the associated {@link FillResponse} represents. It
+         * can be any combination of {@link SaveInfo#SAVE_DATA_TYPE_GENERIC},
          * {@link SaveInfo#SAVE_DATA_TYPE_PASSWORD},
          * {@link SaveInfo#SAVE_DATA_TYPE_ADDRESS}, {@link SaveInfo#SAVE_DATA_TYPE_CREDIT_CARD},
          * {@link SaveInfo#SAVE_DATA_TYPE_USERNAME}, or
@@ -299,11 +325,30 @@
          * it contains any {@code null} entry.
          */
         public Builder(@SaveDataType int type, @NonNull AutofillId[] requiredIds) {
-            // TODO: add CTS unit tests (not integration) to assert the null cases
             mType = type;
             mRequiredIds = assertValid(requiredIds);
         }
 
+        /**
+         * Creates a new builder when no id is required.
+         *
+         * <p>When using this builder, caller must call {@link #setOptionalIds(AutofillId[])} before
+         * calling {@link #build()}.
+         *
+         * @param type the type of information the associated {@link FillResponse} represents. It
+         * can be any combination of {@link SaveInfo#SAVE_DATA_TYPE_GENERIC},
+         * {@link SaveInfo#SAVE_DATA_TYPE_PASSWORD},
+         * {@link SaveInfo#SAVE_DATA_TYPE_ADDRESS}, {@link SaveInfo#SAVE_DATA_TYPE_CREDIT_CARD},
+         * {@link SaveInfo#SAVE_DATA_TYPE_USERNAME}, or
+         * {@link SaveInfo#SAVE_DATA_TYPE_EMAIL_ADDRESS}.
+         *
+         * <p>See {@link SaveInfo} for more info.
+         */
+        public Builder(@SaveDataType int type) {
+            mType = type;
+            mRequiredIds = null;
+        }
+
         private AutofillId[] assertValid(AutofillId[] ids) {
             Preconditions.checkArgument(ids != null && ids.length > 0,
                     "must have at least one id: " + Arrays.toString(ids));
@@ -340,7 +385,6 @@
          * it contains any {@code null} entry.
          */
         public @NonNull Builder setOptionalIds(@NonNull AutofillId[] ids) {
-            // TODO: add CTS unit tests (not integration) to assert the null cases
             throwIfDestroyed();
             mOptionalIds = assertValid(ids);
             return this;
@@ -354,21 +398,46 @@
          *
          * @param description a succint description.
          * @return This Builder.
+         *
+         * @throws IllegalStateException if this call was made after calling
+         * {@link #setCustomDescription(CustomDescription)}.
          */
         public @NonNull Builder setDescription(@Nullable CharSequence description) {
             throwIfDestroyed();
+            Preconditions.checkState(mCustomDescription == null,
+                    "Can call setDescription() or setCustomDescription(), but not both");
             mDescription = description;
             return this;
         }
 
         /**
+         * Sets a custom description to be shown in the UI when the user is asked to save.
+         *
+         * <p>Typically used when the service must show more info about the object being saved,
+         * like a credit card logo, masked number, and expiration date.
+         *
+         * @param customDescription the custom description.
+         * @return This Builder.
+         *
+         * @throws IllegalStateException if this call was made after calling
+         * {@link #setDescription(CharSequence)}.
+         */
+        public @NonNull Builder setCustomDescription(@NonNull CustomDescription customDescription) {
+            throwIfDestroyed();
+            Preconditions.checkState(mDescription == null,
+                    "Can call setDescription() or setCustomDescription(), but not both");
+            mCustomDescription = customDescription;
+            return this;
+        }
+
+        /**
          * Sets the style and listener for the negative save action.
          *
-         * <p>This allows a fill-provider to customize the style and be
+         * <p>This allows an autofill service to customize the style and be
          * notified when the user selects the negative action in the save
          * UI. Note that selecting the negative action regardless of its style
          * and listener being customized would dismiss the save UI and if a
-         * custom listener intent is provided then this intent will be
+         * custom listener intent is provided then this intent is
          * started. The default style is {@link #NEGATIVE_BUTTON_STYLE_CANCEL}</p>
          *
          * @param style The action style.
@@ -393,10 +462,86 @@
         }
 
         /**
+         * Sets an object used to validate the user input - if the input is not valid, the Save UI
+         * affordance is not shown.
+         *
+         * <p>Typically used to validate credit card numbers. Examples:
+         *
+         * <p>Validator for a credit number that must have exactly 16 digits:
+         *
+         * <pre class="prettyprint">
+         * Validator validator = new RegexValidator(ccNumberId, Pattern.compile(""^\\d{16}$"))
+         * </pre>
+         *
+         * <p>Validator for a credit number that must pass a Luhn checksum and either have
+         * 16 digits, or 15 digits starting with 108:
+         *
+         * <pre class="prettyprint">
+         * import static android.service.autofill.Validators.and;
+         * import static android.service.autofill.Validators.or;
+         *
+         * Validator validator =
+         *   and(
+         *     new LuhnChecksumValidator(ccNumberId),
+         *     or(
+         *       new RegexValidator(ccNumberId, Pattern.compile("^\\d{16}$")),
+         *       new RegexValidator(ccNumberId, Pattern.compile("^108\\d{12}$"))
+         *     )
+         *   );
+         * </pre>
+         *
+         * <p><b>NOTE: </b>the example above is just for illustrative purposes; the same validator
+         * could be created using a single regex for the {@code OR} part:
+         *
+         * <pre class="prettyprint">
+         * Validator validator =
+         *   and(
+         *     new LuhnChecksumValidator(ccNumberId),
+         *     new RegexValidator(ccNumberId, Pattern.compile(""^(\\d{16}|108\\d{12})$"))
+         *   );
+         * </pre>
+         *
+         * <p>Validator for a credit number contained in just 4 fields and that must have exactly
+         * 4 digits on each field:
+         *
+         * <pre class="prettyprint">
+         * import static android.service.autofill.Validators.and;
+         *
+         * Validator validator =
+         *   and(
+         *     new RegexValidator(ccNumberId1, Pattern.compile("^\\d{4}$")),
+         *     new RegexValidator(ccNumberId2, Pattern.compile("^\\d{4}$")),
+         *     new RegexValidator(ccNumberId3, Pattern.compile("^\\d{4}$")),
+         *     new RegexValidator(ccNumberId4, Pattern.compile("^\\d{4}$"))
+         *   );
+         * </pre>
+         *
+         * @param validator an implementation provided by the Android System.
+         * @return this builder.
+         *
+         * @throws IllegalArgumentException if {@code validator} is not a class provided
+         * by the Android System.
+         */
+        public @NonNull Builder setValidator(@NonNull Validator validator) {
+            throwIfDestroyed();
+            Preconditions.checkArgument((validator instanceof InternalValidator),
+                    "not provided by Android System: " + validator);
+            mValidator = (InternalValidator) validator;
+            return this;
+        }
+
+        /**
          * Builds a new {@link SaveInfo} instance.
+         *
+         * @throws IllegalStateException if no
+         * {@link #SaveInfo.Builder(int, AutofillId[]) required ids}
+         * or {@link #setOptionalIds(AutofillId[]) optional ids} were set
          */
         public SaveInfo build() {
             throwIfDestroyed();
+            Preconditions.checkState(
+                    !ArrayUtils.isEmpty(mRequiredIds) || !ArrayUtils.isEmpty(mOptionalIds),
+                    "must have at least one required or optional id");
             mDestroyed = true;
             return new SaveInfo(this);
         }
@@ -406,7 +551,6 @@
                 throw new IllegalStateException("Already called #build()");
             }
         }
-
     }
 
     /////////////////////////////////////
@@ -424,6 +568,8 @@
                 .append(DebugUtils.flagsToString(SaveInfo.class, "NEGATIVE_BUTTON_STYLE_",
                         mNegativeButtonStyle))
                 .append(", mFlags=").append(mFlags)
+                .append(", mCustomDescription=").append(mCustomDescription)
+                .append(", validation=").append(mValidator)
                 .append("]").toString();
     }
 
@@ -440,27 +586,42 @@
     public void writeToParcel(Parcel parcel, int flags) {
         parcel.writeInt(mType);
         parcel.writeParcelableArray(mRequiredIds, flags);
+        parcel.writeParcelableArray(mOptionalIds, flags);
         parcel.writeInt(mNegativeButtonStyle);
         parcel.writeParcelable(mNegativeActionListener, flags);
-        parcel.writeParcelableArray(mOptionalIds, flags);
         parcel.writeCharSequence(mDescription);
+        parcel.writeParcelable(mCustomDescription, flags);
+        parcel.writeParcelable(mValidator, flags);
         parcel.writeInt(mFlags);
     }
 
     public static final Parcelable.Creator<SaveInfo> CREATOR = new Parcelable.Creator<SaveInfo>() {
         @Override
         public SaveInfo createFromParcel(Parcel parcel) {
+
             // Always go through the builder to ensure the data ingested by
             // the system obeys the contract of the builder to avoid attacks
             // using specially crafted parcels.
-            final Builder builder = new Builder(parcel.readInt(),
-                    parcel.readParcelableArray(null, AutofillId.class));
-            builder.setNegativeAction(parcel.readInt(), parcel.readParcelable(null));
+            final int type = parcel.readInt();
+            final AutofillId[] requiredIds = parcel.readParcelableArray(null, AutofillId.class);
+            final Builder builder = requiredIds != null
+                    ? new Builder(type, requiredIds)
+                    : new Builder(type);
             final AutofillId[] optionalIds = parcel.readParcelableArray(null, AutofillId.class);
             if (optionalIds != null) {
                 builder.setOptionalIds(optionalIds);
             }
+
+            builder.setNegativeAction(parcel.readInt(), parcel.readParcelable(null));
             builder.setDescription(parcel.readCharSequence());
+            final CustomDescription customDescripton = parcel.readParcelable(null);
+            if (customDescripton != null) {
+                builder.setCustomDescription(customDescripton);
+            }
+            final InternalValidator validator = parcel.readParcelable(null);
+            if (validator != null) {
+                builder.setValidator(validator);
+            }
             builder.setFlags(parcel.readInt());
             return builder.build();
         }
diff --git a/core/java/android/service/autofill/Transformation.java b/core/java/android/service/autofill/Transformation.java
new file mode 100644
index 0000000..4cef261
--- /dev/null
+++ b/core/java/android/service/autofill/Transformation.java
@@ -0,0 +1,25 @@
+/*
+ * 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.service.autofill;
+
+/**
+ * Helper class used to change a child view of a {@link android.widget.RemoteViews presentation
+ * template} at runtime, using the values of fields contained in the screen.
+ *
+ * <p>Typically used by {@link CustomDescription} to provide a customized Save UI affordance.
+ */
+public interface Transformation {
+}
diff --git a/core/java/android/service/autofill/Validator.java b/core/java/android/service/autofill/Validator.java
new file mode 100644
index 0000000..854aa1e
--- /dev/null
+++ b/core/java/android/service/autofill/Validator.java
@@ -0,0 +1,24 @@
+/*
+ * 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.service.autofill;
+
+/**
+ * Helper class used to define whether the contents of a screen are valid.
+ *
+ * <p>Typically used to avoid displaying the Save UI affordance when the user input is invalid.
+ */
+public interface Validator {
+}
diff --git a/core/java/android/service/autofill/Validators.java b/core/java/android/service/autofill/Validators.java
new file mode 100644
index 0000000..51b503c
--- /dev/null
+++ b/core/java/android/service/autofill/Validators.java
@@ -0,0 +1,67 @@
+/*
+ * 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.service.autofill;
+
+import android.annotation.NonNull;
+
+import com.android.internal.util.Preconditions;
+
+/**
+ * Factory for {@link Validator} operations.
+ *
+ * <p>See {@link SaveInfo.Builder#setValidator(Validator)} for examples.
+ */
+public final class Validators {
+
+    private Validators() {
+        throw new UnsupportedOperationException("contains static methods only");
+    }
+
+    /**
+     * Creates a validator that is only valid if all {@code validators} are valid.
+     *
+     * @throws IllegalArgumentException if any element of {@code validators} is an instance of a
+     * class that is not provided by the Android System.
+     */
+    @NonNull
+    public static Validator and(@NonNull Validator...validators) {
+        return new RequiredValidators(getInternalValidators(validators));
+    }
+
+    /**
+     * Creates a validator that is valid if any of the {@code validators} is valid.
+     *
+     * @throws IllegalArgumentException if any element of {@code validators} is an instance of a
+     * class that is not provided by the Android System.
+     */
+    @NonNull
+    public static Validator or(@NonNull Validator...validators) {
+        return new OptionalValidators(getInternalValidators(validators));
+    }
+
+    private static InternalValidator[] getInternalValidators(Validator[] validators) {
+        Preconditions.checkArrayElementsNotNull(validators, "validators");
+
+        final InternalValidator[] internals = new InternalValidator[validators.length];
+
+        for (int i = 0; i < validators.length; i++) {
+            Preconditions.checkArgument((validators[i] instanceof InternalValidator),
+                    "element " + i + " not provided by Android System: " + validators[i]);
+            internals[i] = (InternalValidator) validators[i];
+        }
+        return internals;
+    }
+}
diff --git a/core/java/android/service/autofill/ValueFinder.java b/core/java/android/service/autofill/ValueFinder.java
new file mode 100644
index 0000000..1705b7d
--- /dev/null
+++ b/core/java/android/service/autofill/ValueFinder.java
@@ -0,0 +1,35 @@
+/*
+ * 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.service.autofill;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.TestApi;
+import android.view.autofill.AutofillId;
+
+/**
+ * Helper object used to obtain the value of a field in the screen being autofilled.
+ *
+ * @hide
+ */
+@TestApi
+public interface ValueFinder {
+
+    /**
+     * Gets the value of a field, or {@code null} when not found.
+     */
+    @Nullable String findByAutofillId(@NonNull AutofillId id);
+}
diff --git a/core/java/android/service/carrier/CarrierService.java b/core/java/android/service/carrier/CarrierService.java
index 813acc2..03e0155 100644
--- a/core/java/android/service/carrier/CarrierService.java
+++ b/core/java/android/service/carrier/CarrierService.java
@@ -30,8 +30,8 @@
  * To extend this class, you must declare the service in your manifest file to require the
  * {@link android.Manifest.permission#BIND_CARRIER_SERVICES} permission and include an intent
  * filter with the {@link #CARRIER_SERVICE_INTERFACE}. If the service should have a long-lived
- * binding, set android.service.carrier.LONG_LIVED_BINDING to true in the service's metadata.
- * For example:
+ * binding, set <code>android.service.carrier.LONG_LIVED_BINDING</code> to <code>true</code> in the
+ * service's metadata. For example:
  * </p>
  *
  * <pre>{@code
diff --git a/core/java/android/service/notification/Adjustment.java b/core/java/android/service/notification/Adjustment.java
index 137cf57..ce678fc 100644
--- a/core/java/android/service/notification/Adjustment.java
+++ b/core/java/android/service/notification/Adjustment.java
@@ -17,7 +17,7 @@
 
 import android.annotation.SystemApi;
 import android.annotation.TestApi;
-import android.app.NotificationChannel;
+import android.app.Notification;
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -48,6 +48,12 @@
      * {@link NotificationAssistantService#onNotificationSnoozedUntilContext}.
      */
     public static final String KEY_SNOOZE_CRITERIA = "key_snooze_criteria";
+    /**
+     * Data type: String. Used to change what {@link Notification#getGroup() group} a notification
+     * belongs to.
+     * @hide
+     */
+    public static final String KEY_GROUP_KEY = "key_group_key";
 
     /**
      * Create a notification adjustment.
@@ -146,4 +152,11 @@
         dest.writeBundle(mSignals);
         dest.writeInt(mUser);
     }
+
+    @Override
+    public String toString() {
+        return "Adjustment{"
+                + "mSignals=" + mSignals
+                + '}';
+    }
 }
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index 76c96bd..a5223fd 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -16,35 +16,32 @@
 
 package android.service.notification;
 
-import android.Manifest;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
-import android.annotation.TestApi;
-import android.app.NotificationChannel;
-import android.app.NotificationChannelGroup;
-import android.companion.CompanionDeviceManager;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-
-import android.annotation.SystemApi;
 import android.annotation.SdkConstant;
+import android.annotation.SystemApi;
 import android.app.INotificationManager;
 import android.app.Notification;
 import android.app.Notification.Builder;
+import android.app.NotificationChannel;
+import android.app.NotificationChannelGroup;
 import android.app.NotificationManager;
 import android.app.Service;
+import android.companion.CompanionDeviceManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ParceledListSlice;
+import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.Icon;
-import android.graphics.Bitmap;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.RemoteException;
@@ -54,6 +51,7 @@
 import android.util.ArraySet;
 import android.util.Log;
 import android.widget.RemoteViews;
+
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.os.SomeArgs;
 
@@ -67,7 +65,7 @@
  * A service that receives calls from the system when new notifications are
  * posted or removed, or their ranking changed.
  * <p>To extend this class, you must declare the service in your manifest file with
- * the {@link Manifest.permission#BIND_NOTIFICATION_LISTENER_SERVICE} permission
+ * the {@link android.Manifest.permission#BIND_NOTIFICATION_LISTENER_SERVICE} permission
  * and include an intent filter with the {@link #SERVICE_INTERFACE} action. For example:</p>
  * <pre>
  * &lt;service android:name=".NotificationListener"
@@ -199,6 +197,7 @@
      * The full trim of the StatusBarNotification including all its features.
      *
      * @hide
+     * @removed
      */
     @SystemApi
     public static final int TRIM_FULL = 0;
@@ -219,6 +218,7 @@
      * </ol>
      *
      * @hide
+     * @removed
      */
     @SystemApi
     public static final int TRIM_LIGHT = 1;
@@ -605,9 +605,9 @@
      * @param snoozeCriterionId The{@link SnoozeCriterion#getId()} of a context to snooze the
      *                          notification until.
      * @hide
+     * @removed
      */
     @SystemApi
-    @TestApi
     public final void snoozeNotification(String key, String snoozeCriterionId) {
         if (!isBound()) return;
         try {
@@ -749,6 +749,7 @@
      * before performing this operation.
      *
      * @hide
+     * @removed
      *
      * @param trim trim of the notifications to be passed via {@link #onNotificationPosted}.
      *             See <code>TRIM_*</code> constants.
@@ -801,6 +802,7 @@
      * current user). Useful when you don't know what's already been posted.
      *
      * @hide
+     * @removed
      *
      * @param trim trim of the notifications to be returned. See <code>TRIM_*</code> constants.
      * @return An array of active notifications, sorted in natural order.
@@ -832,6 +834,7 @@
      * more data out of those notifications.
      *
      * @hide
+     * @removed
      *
      * @param keys the keys of the notifications to request
      * @param trim trim of the notifications to be returned. See <code>TRIM_*</code> constants.
@@ -1046,6 +1049,7 @@
      * @param componentName the component that will consume the notification information
      * @param currentUser the user to use as the stream filter
      * @hide
+     * @removed
      */
     @SystemApi
     public void registerAsSystemService(Context context, ComponentName componentName,
@@ -1066,6 +1070,7 @@
      * <p>This method will fail for listeners that were not registered
      * with (@link registerAsService).
      * @hide
+     * @removed
      */
     @SystemApi
     public void unregisterAsSystemService() throws RemoteException {
@@ -1434,9 +1439,9 @@
          * If the {@link NotificationAssistantService} has added people to this notification, then
          * this will be non-null.
          * @hide
+         * @removed
          */
         @SystemApi
-        @TestApi
         public List<String> getAdditionalPeople() {
             return mOverridePeople;
         }
@@ -1446,9 +1451,9 @@
          * user interface displays options for snoozing notifications these criteria should be
          * displayed as well.
          * @hide
+         * @removed
          */
         @SystemApi
-        @TestApi
         public List<SnoozeCriterion> getSnoozeCriteria() {
             return mSnoozeCriteria;
         }
diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java
index b225018..7bec898 100644
--- a/core/java/android/service/notification/ZenModeConfig.java
+++ b/core/java/android/service/notification/ZenModeConfig.java
@@ -85,7 +85,7 @@
     private static final boolean DEFAULT_ALLOW_SCREEN_ON = true;
 
     private static final int XML_VERSION = 2;
-    private static final String ZEN_TAG = "zen";
+    public static final String ZEN_TAG = "zen";
     private static final String ZEN_ATT_VERSION = "version";
     private static final String ZEN_ATT_USER = "user";
     private static final String ALLOW_TAG = "allow";
@@ -712,7 +712,8 @@
             int userHandle, boolean shortVersion) {
         final int num;
         String summary, line1, line2;
-        final CharSequence formattedTime = getFormattedTime(context, time, userHandle);
+        final CharSequence formattedTime =
+                getFormattedTime(context, time, isToday(time), userHandle);
         final Resources res = context.getResources();
         if (minutes < 60) {
             // display as minutes
@@ -738,33 +739,43 @@
             // display as day/time
             summary = line1 = line2 = res.getString(R.string.zen_mode_until, formattedTime);
         }
-        final Uri id = toCountdownConditionId(time);
+        final Uri id = toCountdownConditionId(time, false);
         return new Condition(id, summary, line1, line2, 0, Condition.STATE_TRUE,
                 Condition.FLAG_RELEVANT_NOW);
     }
 
-    public static Condition toNextAlarmCondition(Context context, long now, long alarm,
+    /**
+     * Converts countdown to alarm parameters into a condition with user facing summary
+     */
+    public static Condition toNextAlarmCondition(Context context, long alarm,
             int userHandle) {
-        final CharSequence formattedTime = getFormattedTime(context, alarm, userHandle);
+        boolean isSameDay = isToday(alarm);
+        final CharSequence formattedTime = getFormattedTime(context, alarm, isSameDay, userHandle);
         final Resources res = context.getResources();
-        final String line1 = res.getString(R.string.zen_mode_alarm, formattedTime);
-        final Uri id = toCountdownConditionId(alarm);
+        final String line1 = res.getString(R.string.zen_mode_until, formattedTime);
+        final Uri id = toCountdownConditionId(alarm, true);
         return new Condition(id, "", line1, "", 0, Condition.STATE_TRUE,
                 Condition.FLAG_RELEVANT_NOW);
     }
 
-    private static CharSequence getFormattedTime(Context context, long time, int userHandle) {
-        String skeleton = "EEE " + (DateFormat.is24HourFormat(context, userHandle) ? "Hm" : "hma");
+    private static CharSequence getFormattedTime(Context context, long time, boolean isSameDay,
+            int userHandle) {
+        String skeleton = (!isSameDay ? "EEE " : "")
+                + (DateFormat.is24HourFormat(context, userHandle) ? "Hm" : "hma");
+        final String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton);
+        return DateFormat.format(pattern, time);
+    }
+
+    private static boolean isToday(long time) {
         GregorianCalendar now = new GregorianCalendar();
         GregorianCalendar endTime = new GregorianCalendar();
         endTime.setTimeInMillis(time);
         if (now.get(Calendar.YEAR) == endTime.get(Calendar.YEAR)
                 && now.get(Calendar.MONTH) == endTime.get(Calendar.MONTH)
                 && now.get(Calendar.DATE) == endTime.get(Calendar.DATE)) {
-            skeleton = DateFormat.is24HourFormat(context, userHandle) ? "Hm" : "hma";
+            return true;
         }
-        final String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton);
-        return DateFormat.format(pattern, time);
+        return false;
     }
 
     // ==== Built-in system conditions ====
@@ -775,17 +786,24 @@
 
     public static final String COUNTDOWN_PATH = "countdown";
 
-    public static Uri toCountdownConditionId(long time) {
+    public static final String IS_ALARM_PATH = "alarm";
+
+    /**
+     * Converts countdown condition parameters into a condition id.
+     */
+    public static Uri toCountdownConditionId(long time, boolean alarm) {
         return new Uri.Builder().scheme(Condition.SCHEME)
                 .authority(SYSTEM_AUTHORITY)
                 .appendPath(COUNTDOWN_PATH)
                 .appendPath(Long.toString(time))
+                .appendPath(IS_ALARM_PATH)
+                .appendPath(Boolean.toString(alarm))
                 .build();
     }
 
     public static long tryParseCountdownConditionId(Uri conditionId) {
         if (!Condition.isValidId(conditionId, SYSTEM_AUTHORITY)) return 0;
-        if (conditionId.getPathSegments().size() != 2
+        if (conditionId.getPathSegments().size() < 2
                 || !COUNTDOWN_PATH.equals(conditionId.getPathSegments().get(0))) return 0;
         try {
             return Long.parseLong(conditionId.getPathSegments().get(1));
@@ -795,10 +813,32 @@
         }
     }
 
+    /**
+     * Returns whether this condition is a countdown condition.
+     */
     public static boolean isValidCountdownConditionId(Uri conditionId) {
         return tryParseCountdownConditionId(conditionId) != 0;
     }
 
+    /**
+     * Returns whether this condition is a countdown to an alarm.
+     */
+    public static boolean isValidCountdownToAlarmConditionId(Uri conditionId) {
+        if (tryParseCountdownConditionId(conditionId) != 0) {
+            if (conditionId.getPathSegments().size() < 4
+                    || !IS_ALARM_PATH.equals(conditionId.getPathSegments().get(2))) {
+                return false;
+            }
+            try {
+                return Boolean.parseBoolean(conditionId.getPathSegments().get(3));
+            } catch (RuntimeException e) {
+                Slog.w(TAG, "Error parsing countdown alarm condition: " + conditionId, e);
+                return false;
+            }
+        }
+        return false;
+    }
+
     // ==== Built-in system condition: schedule ====
 
     public static final String SCHEDULE_PATH = "schedule";
diff --git a/core/java/android/service/oemlock/IOemLockService.aidl b/core/java/android/service/oemlock/IOemLockService.aidl
index 682e7ee..d5e10d6 100644
--- a/core/java/android/service/oemlock/IOemLockService.aidl
+++ b/core/java/android/service/oemlock/IOemLockService.aidl
@@ -28,7 +28,6 @@
     void setOemUnlockAllowedByUser(boolean allowed);
     boolean isOemUnlockAllowedByUser();
 
-    boolean canUserAllowOemUnlock();
     boolean isOemUnlockAllowed();
     boolean isDeviceOemUnlocked();
 }
diff --git a/core/java/android/service/oemlock/OemLockManager.java b/core/java/android/service/oemlock/OemLockManager.java
index 3a56d9f..f0d6603 100644
--- a/core/java/android/service/oemlock/OemLockManager.java
+++ b/core/java/android/service/oemlock/OemLockManager.java
@@ -118,24 +118,6 @@
     }
 
     /**
-     * Returns whether all parties other than the user allow OEM unlock meaning the user can
-     * directly control whether or not the device can be OEM unlocked.
-     *
-     * If this is true, {@link #isOemUnlockAllowedByUser} is the same as {@link #isOemUnlockAllowed}
-     *
-     * @return Whether the user can directly control whether the device can be OEM unlocked.
-     *
-     * @hide
-     */
-    public boolean canUserAllowOemUnlock() {
-        try {
-            return mService.canUserAllowOemUnlock();
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-    }
-
-    /**
      * @return Whether the bootloader is able to OEM unlock the device.
      *
      * @hide
diff --git a/core/java/android/service/persistentdata/PersistentDataBlockManager.java b/core/java/android/service/persistentdata/PersistentDataBlockManager.java
index fa75ad3..9332a5b 100644
--- a/core/java/android/service/persistentdata/PersistentDataBlockManager.java
+++ b/core/java/android/service/persistentdata/PersistentDataBlockManager.java
@@ -130,6 +130,7 @@
      *
      * Returns -1 on error.
      */
+    @SuppressLint("Doclava125")
     public long getMaximumDataBlockSize() {
         try {
             return sService.getMaximumDataBlockSize();
diff --git a/core/java/android/service/voice/VoiceInteractionService.java b/core/java/android/service/voice/VoiceInteractionService.java
index fbc6fc6..8f79bcf 100644
--- a/core/java/android/service/voice/VoiceInteractionService.java
+++ b/core/java/android/service/voice/VoiceInteractionService.java
@@ -262,8 +262,7 @@
      * @param keyphrase The keyphrase that's being used, for example "Hello Android".
      * @param locale The locale for which the enrollment needs to be performed.
      * @param callback The callback to notify of detection events.
-     * @return An always-on hotword detector for the given keyphrase and locale. Is null if the
-     * keyphrase and locale is not supported.
+     * @return An always-on hotword detector for the given keyphrase and locale.
      */
     public final AlwaysOnHotwordDetector createAlwaysOnHotwordDetector(
             String keyphrase, Locale locale, AlwaysOnHotwordDetector.Callback callback) {
@@ -273,10 +272,8 @@
         synchronized (mLock) {
             // Allow only one concurrent recognition via the APIs.
             safelyShutdownHotwordDetector();
-            if (isKeyphraseAndLocaleSupportedForHotword(keyphrase, locale)) {
-                mHotwordDetector = new AlwaysOnHotwordDetector(keyphrase, locale, callback,
-                        mKeyphraseEnrollmentInfo, mInterface, mSystemService);
-            }
+            mHotwordDetector = new AlwaysOnHotwordDetector(keyphrase, locale, callback,
+                    mKeyphraseEnrollmentInfo, mInterface, mSystemService);
         }
         return mHotwordDetector;
     }
diff --git a/core/java/android/service/vr/IVrManager.aidl b/core/java/android/service/vr/IVrManager.aidl
index 9b37a65..fef9223 100644
--- a/core/java/android/service/vr/IVrManager.aidl
+++ b/core/java/android/service/vr/IVrManager.aidl
@@ -59,6 +59,13 @@
     boolean getVrModeState();
 
     /**
+     * Returns the current Persistent VR mode state.
+     *
+     * @return {@code true} if Persistent VR mode is enabled.
+     */
+    boolean getPersistentVrModeEnabled();
+
+    /**
      * Sets the persistent VR mode state of a device. When a device is in persistent VR mode it will
      * remain in VR mode even if the foreground does not specify VR mode being enabled. Mainly used
      * by VR viewers to indicate that a device is placed in a VR viewer.
@@ -86,5 +93,13 @@
      * currently, else return the display id of the virtual display
      */
     int getVr2dDisplayId();
+
+    /**
+     * Set the component name of the compositor service to bind.
+     *
+     * @param componentName flattened string representing a ComponentName of a Service in the
+     * application's compositor process to bind to, or null to clear the current binding.
+     */
+    void setAndBindCompositor(in String componentName);
 }
 
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index 5ef60a5..1c6275f 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -33,10 +33,12 @@
 import android.hardware.display.DisplayManager;
 import android.hardware.display.DisplayManager.DisplayListener;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
 import android.os.RemoteException;
+import android.os.SystemClock;
 import android.util.Log;
 import android.util.MergedConfiguration;
 import android.view.Display;
@@ -54,6 +56,7 @@
 import android.view.WindowManager;
 import android.view.WindowManagerGlobal;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.os.HandlerCaller;
 import com.android.internal.view.BaseIWindow;
 import com.android.internal.view.BaseSurfaceHolder;
@@ -61,6 +64,7 @@
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.function.Supplier;
 
 /**
  * A wallpaper service is responsible for showing a live wallpaper behind
@@ -106,7 +110,9 @@
     private static final int MSG_WINDOW_MOVED = 10035;
     private static final int MSG_TOUCH_EVENT = 10040;
     private static final int MSG_REQUEST_WALLPAPER_COLORS = 10050;
-    
+
+    private static final int NOTIFY_COLORS_RATE_LIMIT_MS = 1000;
+
     private final ArrayList<Engine> mActiveEngines
             = new ArrayList<Engine>();
     
@@ -186,6 +192,12 @@
         boolean mPendingSync;
         MotionEvent mPendingMove;
 
+        // Needed for throttling onComputeColors.
+        private long mLastColorInvalidation;
+        private final Runnable mNotifyColorsChanged = this::notifyColorsChanged;
+        private final Supplier<Long> mClockFunction;
+        private final Handler mHandler;
+
         DisplayManager mDisplayManager;
         Display mDisplay;
         private int mDisplayState;
@@ -351,6 +363,26 @@
                 }
             }
         };
+
+        /**
+         * Default constructor
+         */
+        public Engine() {
+            this(SystemClock::elapsedRealtime, Handler.getMain());
+        }
+
+        /**
+         * Constructor used for test purposes.
+         *
+         * @param clockFunction Supplies current times in millis.
+         * @param handler Used for posting/deferring asynchronous calls.
+         * @hide
+         */
+        @VisibleForTesting
+        public Engine(Supplier<Long> clockFunction, Handler handler) {
+           mClockFunction = clockFunction;
+           mHandler = handler;
+        }
         
         /**
          * Provides access to the surface in which this wallpaper is drawn.
@@ -548,32 +580,49 @@
 
         /**
          * Notifies the engine that wallpaper colors changed significantly.
-         * This will trigger a {@link #onComputeWallpaperColors()} call.
-         * @hide
+         * This will trigger a {@link #onComputeColors()} call.
          */
-        public void invalidateColors() {
+        public void notifyColorsChanged() {
+            final long now = mClockFunction.get();
+            if (now - mLastColorInvalidation < NOTIFY_COLORS_RATE_LIMIT_MS) {
+                Log.w(TAG, "This call has been deferred. You should only call "
+                        + "notifyColorsChanged() once every "
+                        + (NOTIFY_COLORS_RATE_LIMIT_MS / 1000f) + " seconds.");
+                if (!mHandler.hasCallbacks(mNotifyColorsChanged)) {
+                    mHandler.postDelayed(mNotifyColorsChanged, NOTIFY_COLORS_RATE_LIMIT_MS);
+                }
+                return;
+            }
+            mLastColorInvalidation = now;
+            mHandler.removeCallbacks(mNotifyColorsChanged);
+
             try {
-                mConnection.onWallpaperColorsChanged(onComputeWallpaperColors());
+                final WallpaperColors newColors = onComputeColors();
+                if (mConnection != null) {
+                    mConnection.onWallpaperColorsChanged(newColors);
+                } else {
+                    Log.w(TAG, "Can't notify system because wallpaper connection "
+                            + "was not established.");
+                }
             } catch (RemoteException e) {
-                Log.w(TAG, "Can't invalidate wallpaper colors because " +
-                        "wallpaper connection was lost", e);
+                Log.w(TAG, "Can't notify system because wallpaper connection was lost.", e);
             }
         }
 
         /**
-         * Notifies the system about what colors the wallpaper is using.
-         * You might return null if no color information is available at the moment. In that case
-         * you might want to call {@link #invalidateColors()} in a near future.
+         * Called by the system when it needs to know what colors the wallpaper is using.
+         * You might return null if no color information is available at the moment.
+         * In that case you might want to call {@link #notifyColorsChanged()} when
+         * color information becomes available.
          * <p>
-         * The simplest way of creating A {@link android.app.WallpaperColors} object is by using
+         * The simplest way of creating a {@link android.app.WallpaperColors} object is by using
          * {@link android.app.WallpaperColors#fromBitmap(Bitmap)} or
          * {@link android.app.WallpaperColors#fromDrawable(Drawable)}, but you can also specify
-         * your main colors and dark text support explicitly using one of the constructors.
+         * your main colors by constructing a {@link android.app.WallpaperColors} object manually.
          *
          * @return Wallpaper colors.
-         * @hide
          */
-        public @Nullable WallpaperColors onComputeWallpaperColors() {
+        public @Nullable WallpaperColors onComputeColors() {
             return null;
         }
 
@@ -629,8 +678,7 @@
                 }
                 Message msg = mCaller.obtainMessageO(MSG_TOUCH_EVENT, event);
                 mCaller.sendMessage(msg);
-            } else {
-                event.recycle();
+            } else {event.recycle();
             }
         }
 
@@ -896,7 +944,7 @@
                     " w=" + mLayout.width + " h=" + mLayout.height);
             }
         }
-        
+
         void attach(IWallpaperEngineWrapper wrapper) {
             if (DEBUG) Log.v(TAG, "attach: " + this + " wrapper=" + wrapper);
             if (mDestroyed) {
@@ -1280,7 +1328,7 @@
                         break;
                     }
                     try {
-                        mConnection.onWallpaperColorsChanged(mEngine.onComputeWallpaperColors());
+                        mConnection.onWallpaperColorsChanged(mEngine.onComputeColors());
                     } catch (RemoteException e) {
                         // Connection went away, nothing to do in here.
                     }
diff --git a/core/java/android/text/InputFilter.java b/core/java/android/text/InputFilter.java
index bff09a2..a507f2b 100644
--- a/core/java/android/text/InputFilter.java
+++ b/core/java/android/text/InputFilter.java
@@ -16,6 +16,12 @@
 
 package android.text;
 
+import android.annotation.NonNull;
+
+import com.android.internal.util.Preconditions;
+
+import java.util.Locale;
+
 /**
  * InputFilters can be attached to {@link Editable}s to constrain the
  * changes that can be made to them.
@@ -33,40 +39,123 @@
      * as this is what happens when you delete text.  Also beware that
      * you should not attempt to make any changes to <code>dest</code>
      * from this method; you may only examine it for context.
-     * 
+     *
      * Note: If <var>source</var> is an instance of {@link Spanned} or
-     * {@link Spannable}, the span objects in the <var>source</var> should be 
-     * copied into the filtered result (i.e. the non-null return value). 
-     * {@link TextUtils#copySpansFrom} can be used for convenience.
+     * {@link Spannable}, the span objects in the <var>source</var> should be
+     * copied into the filtered result (i.e. the non-null return value).
+     * {@link TextUtils#copySpansFrom} can be used for convenience if the
+     * span boundary indices would be remaining identical relative to the source.
      */
     public CharSequence filter(CharSequence source, int start, int end,
                                Spanned dest, int dstart, int dend);
 
     /**
-     * This filter will capitalize all the lower case letters that are added
-     * through edits.
+     * This filter will capitalize all the lowercase and titlecase letters that are added
+     * through edits. (Note that if there are no lowercase or titlecase letters in the input, the
+     * text would not be transformed, even if the result of capitalization of the string is
+     * different from the string.)
      */
     public static class AllCaps implements InputFilter {
+        private final Locale mLocale;
+
+        public AllCaps() {
+            mLocale = null;
+        }
+
+        /**
+         * Constructs a locale-specific AllCaps filter, to make sure capitalization rules of that
+         * locale are used for transforming the sequence.
+         */
+        public AllCaps(@NonNull Locale locale) {
+            Preconditions.checkNotNull(locale);
+            mLocale = locale;
+        }
+
         public CharSequence filter(CharSequence source, int start, int end,
                                    Spanned dest, int dstart, int dend) {
-            for (int i = start; i < end; i++) {
-                if (Character.isLowerCase(source.charAt(i))) {
-                    char[] v = new char[end - start];
-                    TextUtils.getChars(source, start, end, v, 0);
-                    String s = new String(v).toUpperCase();
+            final CharSequence wrapper = new CharSequenceWrapper(source, start, end);
 
-                    if (source instanceof Spanned) {
-                        SpannableString sp = new SpannableString(s);
-                        TextUtils.copySpansFrom((Spanned) source,
-                                                start, end, null, sp, 0);
-                        return sp;
-                    } else {
-                        return s;
-                    }
+            boolean lowerOrTitleFound = false;
+            final int length = end - start;
+            for (int i = 0, cp; i < length; i += Character.charCount(cp)) {
+                // We access 'wrapper' instead of 'source' to make sure no code unit beyond 'end' is
+                // ever accessed.
+                cp = Character.codePointAt(wrapper, i);
+                if (Character.isLowerCase(cp) || Character.isTitleCase(cp)) {
+                    lowerOrTitleFound = true;
+                    break;
                 }
             }
+            if (!lowerOrTitleFound) {
+                return null; // keep original
+            }
 
-            return null; // keep original
+            final boolean copySpans = source instanceof Spanned;
+            final CharSequence upper = TextUtils.toUpperCase(mLocale, wrapper, copySpans);
+            if (upper == wrapper) {
+                // Nothing was changed in the uppercasing operation. This is weird, since
+                // we had found at least one lowercase or titlecase character. But we can't
+                // do anything better than keeping the original in this case.
+                return null; // keep original
+            }
+            // Return a SpannableString or String for backward compatibility.
+            return copySpans ? new SpannableString(upper) : upper.toString();
+        }
+
+        private static class CharSequenceWrapper implements CharSequence, Spanned {
+            private final CharSequence mSource;
+            private final int mStart, mEnd;
+            private final int mLength;
+
+            CharSequenceWrapper(CharSequence source, int start, int end) {
+                mSource = source;
+                mStart = start;
+                mEnd = end;
+                mLength = end - start;
+            }
+
+            public int length() {
+                return mLength;
+            }
+
+            public char charAt(int index) {
+                if (index < 0 || index >= mLength) {
+                    throw new IndexOutOfBoundsException();
+                }
+                return mSource.charAt(mStart + index);
+            }
+
+            public CharSequence subSequence(int start, int end) {
+                if (start < 0 || end < 0 || end > mLength || start > end) {
+                    throw new IndexOutOfBoundsException();
+                }
+                return new CharSequenceWrapper(mSource, mStart + start, mStart + end);
+            }
+
+            public String toString() {
+                return mSource.subSequence(mStart, mEnd).toString();
+            }
+
+            public <T> T[] getSpans(int start, int end, Class<T> type) {
+                return ((Spanned) mSource).getSpans(mStart + start, mStart + end, type);
+            }
+
+            public int getSpanStart(Object tag) {
+                return ((Spanned) mSource).getSpanStart(tag) - mStart;
+            }
+
+            public int getSpanEnd(Object tag) {
+                return ((Spanned) mSource).getSpanEnd(tag) - mStart;
+            }
+
+            public int getSpanFlags(Object tag) {
+                return ((Spanned) mSource).getSpanFlags(tag);
+            }
+
+            public int nextSpanTransition(int start, int limit, Class type) {
+                return ((Spanned) mSource).nextSpanTransition(mStart + start, mStart + limit, type)
+                        - mStart;
+            }
         }
     }
 
diff --git a/core/java/android/text/InputType.java b/core/java/android/text/InputType.java
index 8967b70..7f903b6 100644
--- a/core/java/android/text/InputType.java
+++ b/core/java/android/text/InputType.java
@@ -24,7 +24,7 @@
  * <h3>Examples</h3>
  *
  * <dl>
- * <dt>A password field with with the password visible to the user:
+ * <dt>A password field with the password visible to the user:
  * <dd>inputType = TYPE_CLASS_TEXT |
  *     TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
  *
@@ -182,9 +182,9 @@
      * want the IME to correct typos.
      * Note the contrast with {@link #TYPE_TEXT_FLAG_AUTO_CORRECT} and
      * {@link #TYPE_TEXT_FLAG_AUTO_COMPLETE}:
-     * {@code TYPE_TEXT_FLAG_NO_SUGGESTIONS} means the IME should never
+     * {@code TYPE_TEXT_FLAG_NO_SUGGESTIONS} means the IME does not need to
      * show an interface to display suggestions. Most IMEs will also take this to
-     * mean they should not try to auto-correct what the user is typing.
+     * mean they do not need to try to auto-correct what the user is typing.
      */
     public static final int TYPE_TEXT_FLAG_NO_SUGGESTIONS = 0x00080000;
 
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index 74ff6dc..a03a4fb 100644
--- a/core/java/android/text/StaticLayout.java
+++ b/core/java/android/text/StaticLayout.java
@@ -18,6 +18,7 @@
 
 import android.annotation.Nullable;
 import android.graphics.Paint;
+import android.os.LocaleList;
 import android.text.style.LeadingMarginSpan;
 import android.text.style.LeadingMarginSpan.LeadingMarginSpan2;
 import android.text.style.LineHeightSpan;
@@ -333,6 +334,16 @@
             return this;
         }
 
+        private long[] getHyphenators(LocaleList locales) {
+            final int length = locales.size();
+            final long[] result = new long[length];
+            for (int i = 0; i < length; i++) {
+                final Locale locale = locales.get(i);
+                result[i] = Hyphenator.get(locale).getNativePtr();
+            }
+            return result;
+        }
+
         /**
          * Measurement and break iteration is done in native code. The protocol for using
          * the native code is as follows.
@@ -342,7 +353,7 @@
          * future).
          *
          * Then, for each run within the paragraph:
-         *  - setLocale (this must be done at least for the first run, optional afterwards)
+         *  - setLocales (this must be done at least for the first run, optional afterwards)
          *  - one of the following, depending on the type of run:
          *    + addStyleRun (a text run, to be measured in native code)
          *    + addMeasuredRun (a run already measured in Java, passed into native code)
@@ -354,15 +365,15 @@
          * After all paragraphs, call finish() to release expensive buffers.
          */
 
-        private void setLocale(Locale locale) {
-            if (!locale.equals(mLocale)) {
-                nSetLocale(mNativePtr, locale.toLanguageTag(),
-                        Hyphenator.get(locale).getNativePtr());
-                mLocale = locale;
+        private void setLocales(LocaleList locales) {
+            if (!locales.equals(mLocales)) {
+                nSetLocales(mNativePtr, locales.toLanguageTags(), getHyphenators(locales));
+                mLocales = locales;
             }
         }
 
         /* package */ float addStyleRun(TextPaint paint, int start, int end, boolean isRtl) {
+            setLocales(paint.getTextLocales());
             return nAddStyleRun(mNativePtr, paint.getNativeInstance(), paint.mNativeTypeface,
                     start, end, isRtl);
         }
@@ -425,7 +436,7 @@
         // This will go away and be subsumed by native builder code
         MeasuredText mMeasuredText;
 
-        Locale mLocale;
+        LocaleList mLocales;
 
         private static final SynchronizedPool<Builder> sPool = new SynchronizedPool<Builder>(3);
     }
@@ -594,9 +605,11 @@
         // store fontMetrics per span range
         // must be a multiple of 4 (and > 0) (store top, bottom, ascent, and descent per range)
         int[] fmCache = new int[4 * 4];
-        b.setLocale(paint.getTextLocale());  // TODO: also respect LocaleSpan within the text
+        b.setLocales(paint.getTextLocales());
 
         mLineCount = 0;
+        mEllipsized = false;
+        mMaxLineHeight = mMaximumVisibleLineCount < 1 ? 0 : DEFAULT_MAX_LINE_HEIGHT;
 
         int v = 0;
         boolean needMultiply = (spacingmult != 1 || spacingadd != 0);
@@ -1308,7 +1321,8 @@
     /* package */ static native long nLoadHyphenator(ByteBuffer buf, int offset,
             int minPrefix, int minSuffix);
 
-    private static native void nSetLocale(long nativePtr, String locale, long nativeHyphenator);
+    private static native void nSetLocales(long nativePtr, String locales,
+            long[] nativeHyphenators);
 
     private static native void nSetIndents(long nativePtr, int[] indents);
 
@@ -1354,7 +1368,7 @@
      * The value is the same as getLineTop(maxLines) for ellipsized version where structurally no
      * more than maxLines is contained.
      */
-    private int mMaxLineHeight = -1;
+    private int mMaxLineHeight = DEFAULT_MAX_LINE_HEIGHT;
 
     private static final int COLUMNS_NORMAL = 4;
     private static final int COLUMNS_ELLIPSIZE = 6;
@@ -1382,6 +1396,8 @@
 
     private static final double EXTRA_ROUNDING = 0.5;
 
+    private static final int DEFAULT_MAX_LINE_HEIGHT = -1;
+
     // This is used to return three arrays from a single JNI call when
     // performing line breaking
     /*package*/ static class LineBreaks {
diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java
index ea5c71e..a6425ef 100644
--- a/core/java/android/text/TextLine.java
+++ b/core/java/android/text/TextLine.java
@@ -72,8 +72,8 @@
     private final SpanSet<ReplacementSpan> mReplacementSpanSpanSet =
             new SpanSet<ReplacementSpan>(ReplacementSpan.class);
 
-    private final UnderlineInfo mUnderlineInfo = new UnderlineInfo();
-    private final ArrayList<UnderlineInfo> mUnderlines = new ArrayList();
+    private final DecorationInfo mDecorationInfo = new DecorationInfo();
+    private final ArrayList<DecorationInfo> mDecorations = new ArrayList();
 
     private static final TextLine[] sCached = new TextLine[3];
 
@@ -799,9 +799,9 @@
         fmi.leading = Math.max(fmi.leading, previousLeading);
     }
 
-    private static void drawUnderline(TextPaint wp, Canvas c, int color, float thickness,
-            float xleft, float xright, float baseline) {
-        final float underlineTop = baseline + wp.baselineShift + wp.getUnderlinePosition();
+    private static void drawStroke(TextPaint wp, Canvas c, int color, float position,
+            float thickness, float xleft, float xright, float baseline) {
+        final float strokeTop = baseline + wp.baselineShift + position;
 
         final int previousColor = wp.getColor();
         final Paint.Style previousStyle = wp.getStyle();
@@ -811,7 +811,7 @@
         wp.setAntiAlias(true);
 
         wp.setColor(color);
-        c.drawRect(xleft, underlineTop, xright, underlineTop + thickness, wp);
+        c.drawRect(xleft, strokeTop, xright, strokeTop + thickness, wp);
 
         wp.setStyle(previousStyle);
         wp.setColor(previousColor);
@@ -845,7 +845,7 @@
      * @param fmi receives metrics information, can be null
      * @param needWidth true if the width of the run is needed
      * @param offset the offset for the purpose of measuring
-     * @param underlines the list of locations and paremeters for drawing underlines
+     * @param decorations the list of locations and paremeters for drawing decorations
      * @return the signed width of the run based on the run direction; only
      * valid if needWidth is true
      */
@@ -853,7 +853,7 @@
             int contextStart, int contextEnd, boolean runIsRtl,
             Canvas c, float x, int top, int y, int bottom,
             FontMetricsInt fmi, boolean needWidth, int offset,
-            @Nullable ArrayList<UnderlineInfo> underlines) {
+            @Nullable ArrayList<DecorationInfo> decorations) {
 
         wp.setWordSpacing(mAddedWidth);
         // Get metrics first (even for empty strings or "0" width runs)
@@ -868,8 +868,8 @@
 
         float totalWidth = 0;
 
-        final int numUnderlines = underlines == null ? 0 : underlines.size();
-        if (needWidth || (c != null && (wp.bgColor != 0 || numUnderlines != 0 || runIsRtl))) {
+        final int numDecorations = decorations == null ? 0 : decorations.size();
+        if (needWidth || (c != null && (wp.bgColor != 0 || numDecorations != 0 || runIsRtl))) {
             totalWidth = getRunAdvance(wp, start, end, contextStart, contextEnd, runIsRtl, offset);
         }
 
@@ -895,35 +895,44 @@
                 wp.setColor(previousColor);
             }
 
-            if (numUnderlines != 0) {
-                for (int i = 0; i < numUnderlines; i++) {
-                    final UnderlineInfo info = underlines.get(i);
+            if (numDecorations != 0) {
+                for (int i = 0; i < numDecorations; i++) {
+                    final DecorationInfo info = decorations.get(i);
 
-                    final int underlineStart = Math.max(info.start, start);
-                    final int underlineEnd = Math.min(info.end, offset);
-                    float underlineStartAdvance = getRunAdvance(
-                            wp, start, end, contextStart, contextEnd, runIsRtl, underlineStart);
-                    float underlineEndAdvance = getRunAdvance(
-                            wp, start, end, contextStart, contextEnd, runIsRtl, underlineEnd);
-                    final float underlineXLeft, underlineXRight;
+                    final int decorationStart = Math.max(info.start, start);
+                    final int decorationEnd = Math.min(info.end, offset);
+                    float decorationStartAdvance = getRunAdvance(
+                            wp, start, end, contextStart, contextEnd, runIsRtl, decorationStart);
+                    float decorationEndAdvance = getRunAdvance(
+                            wp, start, end, contextStart, contextEnd, runIsRtl, decorationEnd);
+                    final float decorationXLeft, decorationXRight;
                     if (runIsRtl) {
-                        underlineXLeft = rightX - underlineEndAdvance;
-                        underlineXRight = rightX - underlineStartAdvance;
+                        decorationXLeft = rightX - decorationEndAdvance;
+                        decorationXRight = rightX - decorationStartAdvance;
                     } else {
-                        underlineXLeft = leftX + underlineStartAdvance;
-                        underlineXRight = leftX + underlineEndAdvance;
+                        decorationXLeft = leftX + decorationStartAdvance;
+                        decorationXRight = leftX + decorationEndAdvance;
                     }
 
                     // Theoretically, there could be cases where both Paint's and TextPaint's
                     // setUnderLineText() are called. For backward compatibility, we need to draw
                     // both underlines, the one with custom color first.
                     if (info.underlineColor != 0) {
-                        drawUnderline(wp, c, info.underlineColor, info.underlineThickness,
-                                underlineXLeft, underlineXRight, y);
+                        drawStroke(wp, c, info.underlineColor, wp.getUnderlinePosition(),
+                                info.underlineThickness, decorationXLeft, decorationXRight, y);
                     }
                     if (info.isUnderlineText) {
-                        drawUnderline(wp, c, wp.getColor(), ((Paint) wp).getUnderlineThickness(),
-                                underlineXLeft, underlineXRight, y);
+                        final float thickness =
+                                Math.max(((Paint) wp).getUnderlineThickness(), 1.0f);
+                        drawStroke(wp, c, wp.getColor(), wp.getUnderlinePosition(), thickness,
+                                decorationXLeft, decorationXRight, y);
+                    }
+
+                    if (info.isStrikeThruText) {
+                        final float thickness =
+                                Math.max(((Paint) wp).getStrikeThruThickness(), 1.0f);
+                        drawStroke(wp, c, wp.getColor(), wp.getStrikeThruPosition(), thickness,
+                                decorationXLeft, decorationXRight, y);
                     }
                 }
             }
@@ -1012,20 +1021,22 @@
         return result;
     }
 
-    private static final class UnderlineInfo {
+    private static final class DecorationInfo {
+        public boolean isStrikeThruText;
         public boolean isUnderlineText;
         public int underlineColor;
         public float underlineThickness;
         public int start = -1;
         public int end = -1;
 
-        public boolean hasUnderline() {
-            return isUnderlineText || underlineColor != 0;
+        public boolean hasDecoration() {
+            return isStrikeThruText || isUnderlineText || underlineColor != 0;
         }
 
         // Copies the info, but not the start and end range.
-        public UnderlineInfo copyInfo() {
-            final UnderlineInfo copy = new UnderlineInfo();
+        public DecorationInfo copyInfo() {
+            final DecorationInfo copy = new DecorationInfo();
+            copy.isStrikeThruText = isStrikeThruText;
             copy.isUnderlineText = isUnderlineText;
             copy.underlineColor = underlineColor;
             copy.underlineThickness = underlineThickness;
@@ -1033,7 +1044,11 @@
         }
     }
 
-    private void extractUnderlineInfo(@NonNull TextPaint paint, @NonNull UnderlineInfo info) {
+    private void extractDecorationInfo(@NonNull TextPaint paint, @NonNull DecorationInfo info) {
+        info.isStrikeThruText = paint.isStrikeThruText();
+        if (info.isStrikeThruText) {
+            paint.setStrikeThruText(false);
+        }
         info.isUnderlineText = paint.isUnderlineText();
         if (info.isUnderlineText) {
             paint.setUnderlineText(false);
@@ -1081,7 +1096,17 @@
             return 0f;
         }
 
+        final boolean needsSpanMeasurement;
         if (mSpanned == null) {
+            needsSpanMeasurement = false;
+        } else {
+            mMetricAffectingSpanSpanSet.init(mSpanned, mStart + start, mStart + limit);
+            mCharacterStyleSpanSet.init(mSpanned, mStart + start, mStart + limit);
+            needsSpanMeasurement = mMetricAffectingSpanSpanSet.numberOfSpans != 0
+                    || mCharacterStyleSpanSet.numberOfSpans != 0;
+        }
+
+        if (!needsSpanMeasurement) {
             final TextPaint wp = mWorkPaint;
             wp.set(mPaint);
             wp.setHyphenEdit(adjustHyphenEdit(start, limit, wp.getHyphenEdit()));
@@ -1089,9 +1114,6 @@
                     y, bottom, fmi, needWidth, measureLimit, null);
         }
 
-        mMetricAffectingSpanSpanSet.init(mSpanned, mStart + start, mStart + limit);
-        mCharacterStyleSpanSet.init(mSpanned, mStart + start, mStart + limit);
-
         // Shaping needs to take into account context up to metric boundaries,
         // but rendering needs to take into account character style boundaries.
         // So we iterate through metric runs to get metric bounds,
@@ -1133,8 +1155,8 @@
             activePaint.set(mPaint);
             int activeStart = i;
             int activeEnd = mlimit;
-            final UnderlineInfo underlineInfo = mUnderlineInfo;
-            mUnderlines.clear();
+            final DecorationInfo decorationInfo = mDecorationInfo;
+            mDecorations.clear();
             for (int j = i, jnext; j < mlimit; j = jnext) {
                 jnext = mCharacterStyleSpanSet.getNextTransition(mStart + j, mStart + inext) -
                         mStart;
@@ -1150,7 +1172,7 @@
                     span.updateDrawState(wp);
                 }
 
-                extractUnderlineInfo(wp, underlineInfo);
+                extractDecorationInfo(wp, decorationInfo);
 
                 if (j == i) {
                     // First chunk of text. We can't handle it yet, since we may need to merge it
@@ -1165,24 +1187,24 @@
                             activeStart, activeEnd, mPaint.getHyphenEdit()));
                     x += handleText(activePaint, activeStart, activeEnd, i, inext, runIsRtl, c, x,
                             top, y, bottom, fmi, needWidth || activeEnd < measureLimit,
-                            Math.min(activeEnd, mlimit), mUnderlines);
+                            Math.min(activeEnd, mlimit), mDecorations);
 
                     activeStart = j;
                     activePaint.set(wp);
-                    mUnderlines.clear();
+                    mDecorations.clear();
                 } else {
                     // The present TextPaint is substantially equal to the last TextPaint except
-                    // perhaps for underlines. We just need to expand the active piece of text to
+                    // perhaps for decorations. We just need to expand the active piece of text to
                     // include the present chunk, which we always do anyway. We don't need to save
                     // wp to activePaint, since they are already equal.
                 }
 
                 activeEnd = jnext;
-                if (underlineInfo.hasUnderline()) {
-                    final UnderlineInfo copy = underlineInfo.copyInfo();
+                if (decorationInfo.hasDecoration()) {
+                    final DecorationInfo copy = decorationInfo.copyInfo();
                     copy.start = j;
                     copy.end = jnext;
-                    mUnderlines.add(copy);
+                    mDecorations.add(copy);
                 }
             }
             // Handle the final piece of text.
@@ -1190,7 +1212,7 @@
                     activeStart, activeEnd, mPaint.getHyphenEdit()));
             x += handleText(activePaint, activeStart, activeEnd, i, inext, runIsRtl, c, x,
                     top, y, bottom, fmi, needWidth || activeEnd < measureLimit,
-                    Math.min(activeEnd, mlimit), mUnderlines);
+                    Math.min(activeEnd, mlimit), mDecorations);
         }
 
         return x - originalX;
diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java
index 3baadd4..3e64af4 100644
--- a/core/java/android/text/TextUtils.java
+++ b/core/java/android/text/TextUtils.java
@@ -23,6 +23,8 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.icu.lang.UCharacter;
+import android.icu.text.CaseMap;
+import android.icu.text.Edits;
 import android.icu.util.ULocale;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -482,6 +484,14 @@
     }
 
     /**
+     * @return interned string if it's null.
+     * @hide
+     */
+    public static String safeIntern(String s) {
+        return (s != null) ? s.intern() : null;
+    }
+
+    /**
      * Returns the length that the specified CharSequence would have if
      * spaces and ASCII control characters were trimmed from the start and end,
      * as by {@link String#trim}.
@@ -1072,6 +1082,75 @@
         }
     }
 
+    /**
+     * Transforms a CharSequences to uppercase, copying the sources spans and keeping them spans as
+     * much as possible close to their relative original places. In the case the the uppercase
+     * string is identical to the sources, the source itself is returned instead of being copied.
+     *
+     * If copySpans is set, source must be an instance of Spanned.
+     *
+     * {@hide}
+     */
+    @NonNull
+    public static CharSequence toUpperCase(@Nullable Locale locale, @NonNull CharSequence source,
+            boolean copySpans) {
+        final Edits edits = new Edits();
+        if (!copySpans) { // No spans. Just uppercase the characters.
+            final StringBuilder result = CaseMap.toUpper().apply(
+                    locale, source, new StringBuilder(), edits);
+            return edits.hasChanges() ? result : source;
+        }
+
+        final SpannableStringBuilder result = CaseMap.toUpper().apply(
+                locale, source, new SpannableStringBuilder(), edits);
+        if (!edits.hasChanges()) {
+            // No changes happened while capitalizing. We can return the source as it was.
+            return source;
+        }
+
+        final Edits.Iterator iterator = edits.getFineIterator();
+        final int sourceLength = source.length();
+        final Spanned spanned = (Spanned) source;
+        final Object[] spans = spanned.getSpans(0, sourceLength, Object.class);
+        for (Object span : spans) {
+            final int sourceStart = spanned.getSpanStart(span);
+            final int sourceEnd = spanned.getSpanEnd(span);
+            final int flags = spanned.getSpanFlags(span);
+            // Make sure the indices are not at the end of the string, since in that case
+            // iterator.findSourceIndex() would fail.
+            final int destStart = sourceStart == sourceLength ? result.length() :
+                    toUpperMapToDest(iterator, sourceStart);
+            final int destEnd = sourceEnd == sourceLength ? result.length() :
+                    toUpperMapToDest(iterator, sourceEnd);
+            result.setSpan(span, destStart, destEnd, flags);
+        }
+        return result;
+    }
+
+    // helper method for toUpperCase()
+    private static int toUpperMapToDest(Edits.Iterator iterator, int sourceIndex) {
+        // Guaranteed to succeed if sourceIndex < source.length().
+        iterator.findSourceIndex(sourceIndex);
+        if (sourceIndex == iterator.sourceIndex()) {
+            return iterator.destinationIndex();
+        }
+        // We handle the situation differently depending on if we are in the changed slice or an
+        // unchanged one: In an unchanged slice, we can find the exact location the span
+        // boundary was before and map there.
+        //
+        // But in a changed slice, we need to treat the whole destination slice as an atomic unit.
+        // We adjust the span boundary to the end of that slice to reduce of the chance of adjacent
+        // spans in the source overlapping in the result. (The choice for the end vs the beginning
+        // is somewhat arbitrary, but was taken because we except to see slightly more spans only
+        // affecting a base character compared to spans only affecting a combining character.)
+        if (iterator.hasChange()) {
+            return iterator.destinationIndex() + iterator.newLength();
+        } else {
+            // Move the index 1:1 along with this unchanged piece of text.
+            return iterator.destinationIndex() + (sourceIndex - iterator.sourceIndex());
+        }
+    }
+
     public enum TruncateAt {
         START,
         MIDDLE,
diff --git a/core/java/android/text/format/Formatter.java b/core/java/android/text/format/Formatter.java
index b67ac98..2c83fc4 100644
--- a/core/java/android/text/format/Formatter.java
+++ b/core/java/android/text/format/Formatter.java
@@ -20,11 +20,20 @@
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.Resources;
+import android.icu.text.DecimalFormat;
+import android.icu.text.MeasureFormat;
+import android.icu.text.NumberFormat;
+import android.icu.text.UnicodeSet;
+import android.icu.text.UnicodeSetSpanner;
+import android.icu.util.Measure;
+import android.icu.util.MeasureUnit;
 import android.net.NetworkUtils;
 import android.text.BidiFormatter;
 import android.text.TextUtils;
 import android.view.View;
 
+import java.lang.reflect.Constructor;
+import java.math.BigDecimal;
 import java.util.Locale;
 
 /**
@@ -34,6 +43,8 @@
 public final class Formatter {
 
     /** {@hide} */
+    public static final int FLAG_DEFAULT = 0;
+    /** {@hide} */
     public static final int FLAG_SHORTER = 1 << 0;
     /** {@hide} */
     public static final int FLAG_CALCULATE_ROUNDED = 1 << 1;
@@ -51,9 +62,15 @@
         }
     }
 
-    /* Wraps the source string in bidi formatting characters in RTL locales */
+    private static Locale localeFromContext(@NonNull Context context) {
+        return context.getResources().getConfiguration().getLocales().get(0);
+    }
+
+    /**
+     * Wraps the source string in bidi formatting characters in RTL locales.
+     */
     private static String bidiWrap(@NonNull Context context, String source) {
-        final Locale locale = context.getResources().getConfiguration().locale;
+        final Locale locale = localeFromContext(context);
         if (TextUtils.getLayoutDirectionFromLocale(locale) == View.LAYOUT_DIRECTION_RTL) {
             return BidiFormatter.getInstance(true /* RTL*/).unicodeWrap(source);
         } else {
@@ -80,12 +97,7 @@
      * @return formatted string with the number
      */
     public static String formatFileSize(@Nullable Context context, long sizeBytes) {
-        if (context == null) {
-            return "";
-        }
-        final BytesResult res = formatBytes(context.getResources(), sizeBytes, 0);
-        return bidiWrap(context, context.getString(com.android.internal.R.string.fileSizeSuffix,
-                res.value, res.units));
+        return formatFileSize(context, sizeBytes, FLAG_DEFAULT);
     }
 
     /**
@@ -93,88 +105,207 @@
      * (showing fewer digits of precision).
      */
     public static String formatShortFileSize(@Nullable Context context, long sizeBytes) {
+        return formatFileSize(context, sizeBytes, FLAG_SHORTER);
+    }
+
+    private static String formatFileSize(@Nullable Context context, long sizeBytes, int flags) {
         if (context == null) {
             return "";
         }
-        final BytesResult res = formatBytes(context.getResources(), sizeBytes, FLAG_SHORTER);
-        return bidiWrap(context, context.getString(com.android.internal.R.string.fileSizeSuffix,
-                res.value, res.units));
+        final RoundedBytesResult res = RoundedBytesResult.roundBytes(sizeBytes, flags);
+        return bidiWrap(context, formatRoundedBytesResult(context, res));
+    }
+
+    private static String getSuffixOverride(@NonNull Resources res, MeasureUnit unit) {
+        if (unit == MeasureUnit.BYTE) {
+            return res.getString(com.android.internal.R.string.byteShort);
+        } else { // unit == PETABYTE
+            return res.getString(com.android.internal.R.string.petabyteShort);
+        }
+    }
+
+    private static NumberFormat getNumberFormatter(Locale locale, int fractionDigits) {
+        final NumberFormat numberFormatter = NumberFormat.getInstance(locale);
+        numberFormatter.setMinimumFractionDigits(fractionDigits);
+        numberFormatter.setMaximumFractionDigits(fractionDigits);
+        numberFormatter.setGroupingUsed(false);
+        if (numberFormatter instanceof DecimalFormat) {
+            // We do this only for DecimalFormat, since in the general NumberFormat case, calling
+            // setRoundingMode may throw an exception.
+            numberFormatter.setRoundingMode(BigDecimal.ROUND_HALF_UP);
+        }
+        return numberFormatter;
+    }
+
+    private static String deleteFirstFromString(String source, String toDelete) {
+        final int location = source.indexOf(toDelete);
+        if (location == -1) {
+            return source;
+        } else {
+            return source.substring(0, location)
+                    + source.substring(location + toDelete.length(), source.length());
+        }
+    }
+
+    private static String formatMeasureShort(Locale locale, NumberFormat numberFormatter,
+            float value, MeasureUnit units) {
+        final MeasureFormat measureFormatter = MeasureFormat.getInstance(
+                locale, MeasureFormat.FormatWidth.SHORT, numberFormatter);
+        return measureFormatter.format(new Measure(value, units));
+    }
+
+    private static final UnicodeSetSpanner SPACES_AND_CONTROLS =
+            new UnicodeSetSpanner(new UnicodeSet("[[:Zs:][:Cf:]]").freeze());
+
+    private static String formatRoundedBytesResult(
+            @NonNull Context context, @NonNull RoundedBytesResult input) {
+        final Locale locale = localeFromContext(context);
+        final NumberFormat numberFormatter = getNumberFormatter(locale, input.fractionDigits);
+        if (input.units == MeasureUnit.BYTE || input.units == PETABYTE) {
+            // ICU spells out "byte" instead of "B", and can't format petabytes yet.
+            final String formattedNumber = numberFormatter.format(input.value);
+            return context.getString(com.android.internal.R.string.fileSizeSuffix,
+                    formattedNumber, getSuffixOverride(context.getResources(), input.units));
+        } else {
+            return formatMeasureShort(locale, numberFormatter, input.value, input.units);
+        }
     }
 
     /** {@hide} */
     public static BytesResult formatBytes(Resources res, long sizeBytes, int flags) {
-        final boolean isNegative = (sizeBytes < 0);
-        float result = isNegative ? -sizeBytes : sizeBytes;
-        int suffix = com.android.internal.R.string.byteShort;
-        long mult = 1;
-        if (result > 900) {
-            suffix = com.android.internal.R.string.kilobyteShort;
-            mult = 1000;
-            result = result / 1000;
+        final RoundedBytesResult rounded = RoundedBytesResult.roundBytes(sizeBytes, flags);
+        final Locale locale = res.getConfiguration().getLocales().get(0);
+        final NumberFormat numberFormatter = getNumberFormatter(locale, rounded.fractionDigits);
+        final String formattedNumber = numberFormatter.format(rounded.value);
+        final String units;
+        if (rounded.units == MeasureUnit.BYTE || rounded.units == PETABYTE) {
+            // ICU spells out "byte" instead of "B", and can't format petabytes yet.
+            units = getSuffixOverride(res, rounded.units);
+        } else {
+            // Since ICU does not give us access to the pattern, we need to extract the unit string
+            // from ICU, which we do by taking out the formatted number out of the formatted string
+            // and trimming the result of spaces and controls.
+            final String formattedMeasure = formatMeasureShort(
+                    locale, numberFormatter, rounded.value, rounded.units);
+            final String numberRemoved = deleteFirstFromString(formattedMeasure, formattedNumber);
+            units = SPACES_AND_CONTROLS.trim(numberRemoved).toString();
         }
-        if (result > 900) {
-            suffix = com.android.internal.R.string.megabyteShort;
-            mult *= 1000;
-            result = result / 1000;
+        return new BytesResult(formattedNumber, units, rounded.roundedBytes);
+    }
+
+    /**
+     * ICU doesn't support PETABYTE yet. Fake it so that we can treat all units the same way.
+     */
+    private static final MeasureUnit PETABYTE = createPetaByte();
+
+    /**
+     * Create a petabyte MeasureUnit without registering it with ICU.
+     * ICU doesn't support user-create MeasureUnit and the only public (but hidden) method to do so
+     * is {@link MeasureUnit#internalGetInstance(String, String)} which also registers the unit as
+     * an available type and thus leaks it to code that doesn't expect or support it.
+     * <p>This method uses reflection to create an instance of MeasureUnit to avoid leaking it. This
+     * instance is <b>only</b> to be used in this class.
+     */
+    private static MeasureUnit createPetaByte() {
+        try {
+            Constructor<MeasureUnit> constructor = MeasureUnit.class
+                    .getDeclaredConstructor(String.class, String.class);
+            constructor.setAccessible(true);
+            return constructor.newInstance("digital", "petabyte");
+        } catch (ReflectiveOperationException e) {
+            throw new RuntimeException("Failed to create petabyte MeasureUnit", e);
         }
-        if (result > 900) {
-            suffix = com.android.internal.R.string.gigabyteShort;
-            mult *= 1000;
-            result = result / 1000;
+    }
+
+    private static class RoundedBytesResult {
+        public final float value;
+        public final MeasureUnit units;
+        public final int fractionDigits;
+        public final long roundedBytes;
+
+        private RoundedBytesResult(
+                float value, MeasureUnit units, int fractionDigits, long roundedBytes) {
+            this.value = value;
+            this.units = units;
+            this.fractionDigits = fractionDigits;
+            this.roundedBytes = roundedBytes;
         }
-        if (result > 900) {
-            suffix = com.android.internal.R.string.terabyteShort;
-            mult *= 1000;
-            result = result / 1000;
-        }
-        if (result > 900) {
-            suffix = com.android.internal.R.string.petabyteShort;
-            mult *= 1000;
-            result = result / 1000;
-        }
-        // Note we calculate the rounded long by ourselves, but still let String.format()
-        // compute the rounded value. String.format("%f", 0.1) might not return "0.1" due to
-        // floating point errors.
-        final int roundFactor;
-        final String roundFormat;
-        if (mult == 1 || result >= 100) {
-            roundFactor = 1;
-            roundFormat = "%.0f";
-        } else if (result < 1) {
-            roundFactor = 100;
-            roundFormat = "%.2f";
-        } else if (result < 10) {
-            if ((flags & FLAG_SHORTER) != 0) {
-                roundFactor = 10;
-                roundFormat = "%.1f";
-            } else {
-                roundFactor = 100;
-                roundFormat = "%.2f";
+
+        /**
+         * Returns a RoundedBytesResult object based on the input size in bytes and the rounding
+         * flags. The result can be used for formatting.
+         */
+        static RoundedBytesResult roundBytes(long sizeBytes, int flags) {
+            final boolean isNegative = (sizeBytes < 0);
+            float result = isNegative ? -sizeBytes : sizeBytes;
+            MeasureUnit units = MeasureUnit.BYTE;
+            long mult = 1;
+            if (result > 900) {
+                units = MeasureUnit.KILOBYTE;
+                mult = 1000;
+                result = result / 1000;
             }
-        } else { // 10 <= result < 100
-            if ((flags & FLAG_SHORTER) != 0) {
+            if (result > 900) {
+                units = MeasureUnit.MEGABYTE;
+                mult *= 1000;
+                result = result / 1000;
+            }
+            if (result > 900) {
+                units = MeasureUnit.GIGABYTE;
+                mult *= 1000;
+                result = result / 1000;
+            }
+            if (result > 900) {
+                units = MeasureUnit.TERABYTE;
+                mult *= 1000;
+                result = result / 1000;
+            }
+            if (result > 900) {
+                units = PETABYTE;
+                mult *= 1000;
+                result = result / 1000;
+            }
+            // Note we calculate the rounded long by ourselves, but still let NumberFormat compute
+            // the rounded value. NumberFormat.format(0.1) might not return "0.1" due to floating
+            // point errors.
+            final int roundFactor;
+            final int roundDigits;
+            if (mult == 1 || result >= 100) {
                 roundFactor = 1;
-                roundFormat = "%.0f";
-            } else {
+                roundDigits = 0;
+            } else if (result < 1) {
                 roundFactor = 100;
-                roundFormat = "%.2f";
+                roundDigits = 2;
+            } else if (result < 10) {
+                if ((flags & FLAG_SHORTER) != 0) {
+                    roundFactor = 10;
+                    roundDigits = 1;
+                } else {
+                    roundFactor = 100;
+                    roundDigits = 2;
+                }
+            } else { // 10 <= result < 100
+                if ((flags & FLAG_SHORTER) != 0) {
+                    roundFactor = 1;
+                    roundDigits = 0;
+                } else {
+                    roundFactor = 100;
+                    roundDigits = 2;
+                }
             }
+
+            if (isNegative) {
+                result = -result;
+            }
+
+            // Note this might overflow if abs(result) >= Long.MAX_VALUE / 100, but that's like
+            // 80PB so it's okay (for now)...
+            final long roundedBytes =
+                    (flags & FLAG_CALCULATE_ROUNDED) == 0 ? 0
+                    : (((long) Math.round(result * roundFactor)) * mult / roundFactor);
+
+            return new RoundedBytesResult(result, units, roundDigits, roundedBytes);
         }
-
-        if (isNegative) {
-            result = -result;
-        }
-        final String roundedString = String.format(roundFormat, result);
-
-        // Note this might overflow if abs(result) >= Long.MAX_VALUE / 100, but that's like 80PB so
-        // it's okay (for now)...
-        final long roundedBytes =
-                (flags & FLAG_CALCULATE_ROUNDED) == 0 ? 0
-                : (((long) Math.round(result * roundFactor)) * mult / roundFactor);
-
-        final String units = res.getString(suffix);
-
-        return new BytesResult(roundedString, units, roundedBytes);
     }
 
     /**
@@ -197,7 +328,7 @@
 
     /**
      * Returns elapsed time for the given millis, in the following format:
-     * 1 day 5 hrs; will include at most two units, can go down to seconds precision.
+     * 1 day, 5 hr; will include at most two units, can go down to seconds precision.
      * @param context the application context
      * @param millis the elapsed time in milli seconds
      * @return the formatted elapsed time
@@ -221,44 +352,38 @@
         }
         int seconds = (int)secondsLong;
 
+        final Locale locale = localeFromContext(context);
+        final MeasureFormat measureFormat = MeasureFormat.getInstance(
+                locale, MeasureFormat.FormatWidth.SHORT);
         if (days >= 2) {
             days += (hours+12)/24;
-            return context.getString(com.android.internal.R.string.durationDays, days);
+            return measureFormat.format(new Measure(days, MeasureUnit.DAY));
         } else if (days > 0) {
-            if (hours == 1) {
-                return context.getString(com.android.internal.R.string.durationDayHour, days, hours);
-            }
-            return context.getString(com.android.internal.R.string.durationDayHours, days, hours);
+            return measureFormat.formatMeasures(
+                    new Measure(days, MeasureUnit.DAY),
+                    new Measure(hours, MeasureUnit.HOUR));
         } else if (hours >= 2) {
             hours += (minutes+30)/60;
-            return context.getString(com.android.internal.R.string.durationHours, hours);
+            return measureFormat.format(new Measure(hours, MeasureUnit.HOUR));
         } else if (hours > 0) {
-            if (minutes == 1) {
-                return context.getString(com.android.internal.R.string.durationHourMinute, hours,
-                        minutes);
-            }
-            return context.getString(com.android.internal.R.string.durationHourMinutes, hours,
-                    minutes);
+            return measureFormat.formatMeasures(
+                    new Measure(hours, MeasureUnit.HOUR),
+                    new Measure(minutes, MeasureUnit.MINUTE));
         } else if (minutes >= 2) {
             minutes += (seconds+30)/60;
-            return context.getString(com.android.internal.R.string.durationMinutes, minutes);
+            return measureFormat.format(new Measure(minutes, MeasureUnit.MINUTE));
         } else if (minutes > 0) {
-            if (seconds == 1) {
-                return context.getString(com.android.internal.R.string.durationMinuteSecond, minutes,
-                        seconds);
-            }
-            return context.getString(com.android.internal.R.string.durationMinuteSeconds, minutes,
-                    seconds);
-        } else if (seconds == 1) {
-            return context.getString(com.android.internal.R.string.durationSecond, seconds);
+            return measureFormat.formatMeasures(
+                    new Measure(minutes, MeasureUnit.MINUTE),
+                    new Measure(seconds, MeasureUnit.SECOND));
         } else {
-            return context.getString(com.android.internal.R.string.durationSeconds, seconds);
+            return measureFormat.format(new Measure(seconds, MeasureUnit.SECOND));
         }
     }
 
     /**
      * Returns elapsed time for the given millis, in the following format:
-     * 1 day 5 hrs; will include at most two units, can go down to minutes precision.
+     * 1 day, 5 hr; will include at most two units, can go down to minutes precision.
      * @param context the application context
      * @param millis the elapsed time in milli seconds
      * @return the formatted elapsed time
@@ -267,10 +392,11 @@
     public static String formatShortElapsedTimeRoundingUpToMinutes(Context context, long millis) {
         long minutesRoundedUp = (millis + MILLIS_PER_MINUTE - 1) / MILLIS_PER_MINUTE;
 
-        if (minutesRoundedUp == 0) {
-            return context.getString(com.android.internal.R.string.durationMinutes, 0);
-        } else if (minutesRoundedUp == 1) {
-            return context.getString(com.android.internal.R.string.durationMinute, 1);
+        if (minutesRoundedUp == 0 || minutesRoundedUp == 1) {
+            final Locale locale = localeFromContext(context);
+            final MeasureFormat measureFormat = MeasureFormat.getInstance(
+                    locale, MeasureFormat.FormatWidth.SHORT);
+            return measureFormat.format(new Measure(minutesRoundedUp, MeasureUnit.MINUTE));
         }
 
         return formatShortElapsedTime(context, minutesRoundedUp * MILLIS_PER_MINUTE);
diff --git a/core/java/android/text/method/AllCapsTransformationMethod.java b/core/java/android/text/method/AllCapsTransformationMethod.java
index 15f40d5..c807e7d 100644
--- a/core/java/android/text/method/AllCapsTransformationMethod.java
+++ b/core/java/android/text/method/AllCapsTransformationMethod.java
@@ -15,12 +15,12 @@
  */
 package android.text.method;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.Context;
 import android.graphics.Rect;
-import android.icu.text.CaseMap;
-import android.icu.text.Edits;
-import android.text.SpannableStringBuilder;
 import android.text.Spanned;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
 import android.widget.TextView;
@@ -38,12 +38,12 @@
     private boolean mEnabled;
     private Locale mLocale;
 
-    public AllCapsTransformationMethod(Context context) {
+    public AllCapsTransformationMethod(@NonNull Context context) {
         mLocale = context.getResources().getConfiguration().getLocales().get(0);
     }
 
     @Override
-    public CharSequence getTransformation(CharSequence source, View view) {
+    public CharSequence getTransformation(@Nullable CharSequence source, View view) {
         if (!mEnabled) {
             Log.w(TAG, "Caller did not enable length changes; not transforming text");
             return source;
@@ -60,61 +60,8 @@
         if (locale == null) {
             locale = mLocale;
         }
-
-        if (!(source instanceof Spanned)) { // No spans
-            return CaseMap.toUpper().apply(
-                    locale, source, new StringBuilder(),
-                    null /* we don't need the edits */);
-        }
-
-        final Edits edits = new Edits();
-        final SpannableStringBuilder result = CaseMap.toUpper().apply(
-                locale, source, new SpannableStringBuilder(), edits);
-        if (!edits.hasChanges()) {
-            // No changes happened while capitalizing. We can return the source as it was.
-            return source;
-        }
-
-        final Edits.Iterator iterator = edits.getFineIterator();
-        final Spanned spanned = (Spanned) source;
-        final int sourceLength = source.length();
-        final Object[] spans = spanned.getSpans(0, sourceLength, Object.class);
-        for (Object span : spans) {
-            final int sourceStart = spanned.getSpanStart(span);
-            final int sourceEnd = spanned.getSpanEnd(span);
-            final int flags = spanned.getSpanFlags(span);
-            // Make sure the indexes are not at the end of the string, since in that case
-            // iterator.findSourceIndex() would fail.
-            final int destStart = sourceStart == sourceLength ? result.length() :
-                    mapToDest(iterator, sourceStart);
-            final int destEnd = sourceEnd == sourceLength ? result.length() :
-                    mapToDest(iterator, sourceEnd);
-            result.setSpan(span, destStart, destEnd, flags);
-        }
-        return result;
-    }
-
-    private static int mapToDest(Edits.Iterator iterator, int sourceIndex) {
-        // Guaranteed to succeed if sourceIndex < source.length().
-        iterator.findSourceIndex(sourceIndex);
-        if (sourceIndex == iterator.sourceIndex()) {
-            return iterator.destinationIndex();
-        }
-        // We handle the situation differently depending on if we are in the changed slice or an
-        // unchanged one: In an unchanged slice, we can find the exact location the span
-        // boundary was before and map there.
-        //
-        // But in a changed slice, we need to treat the whole destination slice as an atomic unit.
-        // We adjust the span boundary to the end of that slice to reduce of the chance of adjacent
-        // spans in the source overlapping in the result. (The choice for the end vs the beginning
-        // is somewhat arbitrary, but was taken because we except to see slightly more spans only
-        // affecting a base character compared to spans only affecting a combining character.)
-        if (iterator.hasChange()) {
-            return iterator.destinationIndex() + iterator.newLength();
-        } else {
-            // Move the index 1:1 along with this unchanged piece of text.
-            return iterator.destinationIndex() + (sourceIndex - iterator.sourceIndex());
-        }
+        final boolean copySpans = source instanceof Spanned;
+        return TextUtils.toUpperCase(locale, source, copySpans);
     }
 
     @Override
diff --git a/core/java/android/text/style/TextAppearanceSpan.java b/core/java/android/text/style/TextAppearanceSpan.java
index abbd793..c17cfd5 100644
--- a/core/java/android/text/style/TextAppearanceSpan.java
+++ b/core/java/android/text/style/TextAppearanceSpan.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.content.res.TypedArray;
+import android.graphics.LeakyTypefaceStorage;
 import android.graphics.Typeface;
 import android.os.Parcel;
 import android.text.ParcelableSpan;
@@ -30,11 +31,12 @@
  * resource.
  */
 public class TextAppearanceSpan extends MetricAffectingSpan implements ParcelableSpan {
-    private final String mTypeface;
+    private final String mFamilyName;
     private final int mStyle;
     private final int mTextSize;
     private final ColorStateList mTextColor;
     private final ColorStateList mTextColorLink;
+    private final Typeface mTypeface;
 
     /**
      * Uses the specified TextAppearance resource to determine the
@@ -55,7 +57,7 @@
      */
     public TextAppearanceSpan(Context context, int appearance, int colorList) {
         ColorStateList textColor;
-        
+
         TypedArray a =
             context.obtainStyledAttributes(appearance,
                                            com.android.internal.R.styleable.TextAppearance);
@@ -68,28 +70,37 @@
                                         TextAppearance_textSize, -1);
 
         mStyle = a.getInt(com.android.internal.R.styleable.TextAppearance_textStyle, 0);
-        String family = a.getString(com.android.internal.R.styleable.TextAppearance_fontFamily);
-        if (family != null) {
-            mTypeface = family;
+        if (!context.isRestricted() && context.canLoadUnsafeResources()) {
+            mTypeface = a.getFont(com.android.internal.R.styleable.TextAppearance_fontFamily);
         } else {
-            int tf = a.getInt(com.android.internal.R.styleable.TextAppearance_typeface, 0);
+            mTypeface = null;
+        }
+        if (mTypeface != null) {
+            mFamilyName = null;
+        } else {
+            String family = a.getString(com.android.internal.R.styleable.TextAppearance_fontFamily);
+            if (family != null) {
+                mFamilyName = family;
+            } else {
+                int tf = a.getInt(com.android.internal.R.styleable.TextAppearance_typeface, 0);
 
-            switch (tf) {
-                case 1:
-                    mTypeface = "sans";
-                    break;
+                switch (tf) {
+                    case 1:
+                        mFamilyName = "sans";
+                        break;
 
-                case 2:
-                    mTypeface = "serif";
-                    break;
+                    case 2:
+                        mFamilyName = "serif";
+                        break;
 
-                case 3:
-                    mTypeface = "monospace";
-                    break;
+                    case 3:
+                        mFamilyName = "monospace";
+                        break;
 
-                default:
-                    mTypeface = null;
-                    break;
+                    default:
+                        mFamilyName = null;
+                        break;
+                }
             }
         }
 
@@ -102,7 +113,7 @@
             textColor = a.getColorStateList(colorList);
             a.recycle();
         }
-        
+
         mTextColor = textColor;
     }
 
@@ -112,15 +123,16 @@
      */
     public TextAppearanceSpan(String family, int style, int size,
                               ColorStateList color, ColorStateList linkColor) {
-        mTypeface = family;
+        mFamilyName = family;
         mStyle = style;
         mTextSize = size;
         mTextColor = color;
         mTextColorLink = linkColor;
+        mTypeface = null;
     }
 
     public TextAppearanceSpan(Parcel src) {
-        mTypeface = src.readString();
+        mFamilyName = src.readString();
         mStyle = src.readInt();
         mTextSize = src.readInt();
         if (src.readInt() != 0) {
@@ -133,8 +145,9 @@
         } else {
             mTextColorLink = null;
         }
+        mTypeface = LeakyTypefaceStorage.readTypefaceFromParcel(src);
     }
-    
+
     public int getSpanTypeId() {
         return getSpanTypeIdInternal();
     }
@@ -143,7 +156,7 @@
     public int getSpanTypeIdInternal() {
         return TextUtils.TEXT_APPEARANCE_SPAN;
     }
-    
+
     public int describeContents() {
         return 0;
     }
@@ -154,7 +167,7 @@
 
     /** @hide */
     public void writeToParcelInternal(Parcel dest, int flags) {
-        dest.writeString(mTypeface);
+        dest.writeString(mFamilyName);
         dest.writeInt(mStyle);
         dest.writeInt(mTextSize);
         if (mTextColor != null) {
@@ -169,6 +182,7 @@
         } else {
             dest.writeInt(0);
         }
+        LeakyTypefaceStorage.writeTypefaceToParcel(mTypeface, dest);
     }
 
     /**
@@ -176,7 +190,7 @@
      * if it does not specify one.
      */
     public String getFamily() {
-        return mTypeface;
+        return mFamilyName;
     }
 
     /**
@@ -226,9 +240,14 @@
 
     @Override
     public void updateMeasureState(TextPaint ds) {
-        if (mTypeface != null || mStyle != 0) {
+        final Typeface styledTypeface;
+        int style = 0;
+
+        if (mTypeface != null) {
+            style = mStyle;
+            styledTypeface = Typeface.create(mTypeface, style);
+        } else if (mFamilyName != null || mStyle != 0) {
             Typeface tf = ds.getTypeface();
-            int style = 0;
 
             if (tf != null) {
                 style = tf.getStyle();
@@ -236,15 +255,19 @@
 
             style |= mStyle;
 
-            if (mTypeface != null) {
-                tf = Typeface.create(mTypeface, style);
+            if (mFamilyName != null) {
+                styledTypeface = Typeface.create(mFamilyName, style);
             } else if (tf == null) {
-                tf = Typeface.defaultFromStyle(style);
+                styledTypeface = Typeface.defaultFromStyle(style);
             } else {
-                tf = Typeface.create(tf, style);
+                styledTypeface = Typeface.create(tf, style);
             }
+        } else {
+            styledTypeface = null;
+        }
 
-            int fake = style & ~tf.getStyle();
+        if (styledTypeface != null) {
+            int fake = style & ~styledTypeface.getStyle();
 
             if ((fake & Typeface.BOLD) != 0) {
                 ds.setFakeBoldText(true);
@@ -254,7 +277,7 @@
                 ds.setTextSkewX(-0.25f);
             }
 
-            ds.setTypeface(tf);
+            ds.setTypeface(styledTypeface);
         }
 
         if (mTextSize > 0) {
diff --git a/core/java/android/text/util/Linkify.java b/core/java/android/text/util/Linkify.java
index 63929ea..bc462aa 100644
--- a/core/java/android/text/util/Linkify.java
+++ b/core/java/android/text/util/Linkify.java
@@ -19,7 +19,9 @@
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.content.Context;
 import android.telephony.PhoneNumberUtils;
+import android.telephony.TelephonyManager;
 import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.Spanned;
@@ -225,6 +227,11 @@
      *  @return True if at least one link is found and applied.
      */
     public static final boolean addLinks(@NonNull Spannable text, @LinkifyMask int mask) {
+        return addLinks(text, mask, null);
+    }
+
+    private static boolean addLinks(@NonNull Spannable text, @LinkifyMask int mask,
+            @Nullable Context context) {
         if (text != null && containsUnsupportedCharacters(text.toString())) {
             android.util.EventLog.writeEvent(0x534e4554, "116321860", -1, "");
             return false;
@@ -255,7 +262,7 @@
         }
 
         if ((mask & PHONE_NUMBERS) != 0) {
-            gatherTelLinks(links, text);
+            gatherTelLinks(links, text, context);
         }
 
         if ((mask & MAP_ADDRESSES) != 0) {
@@ -314,10 +321,10 @@
             return false;
         }
 
-        CharSequence t = text.getText();
-
+        final Context context = text.getContext();
+        final CharSequence t = text.getText();
         if (t instanceof Spannable) {
-            if (addLinks((Spannable) t, mask)) {
+            if (addLinks((Spannable) t, mask, context)) {
                 addLinkMovementMethod(text);
                 return true;
             }
@@ -326,7 +333,7 @@
         } else {
             SpannableString s = SpannableString.valueOf(t);
 
-            if (addLinks(s, mask)) {
+            if (addLinks(s, mask, context)) {
                 addLinkMovementMethod(text);
                 text.setText(s);
 
@@ -564,10 +571,15 @@
         }
     }
 
-    private static final void gatherTelLinks(ArrayList<LinkSpec> links, Spannable s) {
+    private static void gatherTelLinks(ArrayList<LinkSpec> links, Spannable s,
+            @Nullable Context context) {
         PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
+        final TelephonyManager tm = (context == null)
+                ? TelephonyManager.getDefault()
+                : TelephonyManager.from(context);
         Iterable<PhoneNumberMatch> matches = phoneUtil.findNumbers(s.toString(),
-                Locale.getDefault().getCountry(), Leniency.POSSIBLE, Long.MAX_VALUE);
+                tm.getSimCountryIso().toUpperCase(Locale.US),
+                Leniency.POSSIBLE, Long.MAX_VALUE);
         for (PhoneNumberMatch match : matches) {
             LinkSpec spec = new LinkSpec();
             spec.url = "tel:" + PhoneNumberUtils.normalizeNumber(match.rawString());
diff --git a/core/java/android/transition/TransitionUtils.java b/core/java/android/transition/TransitionUtils.java
index 49ceb3b..084b79d 100644
--- a/core/java/android/transition/TransitionUtils.java
+++ b/core/java/android/transition/TransitionUtils.java
@@ -20,12 +20,14 @@
 import android.animation.AnimatorSet;
 import android.animation.TypeEvaluator;
 import android.graphics.Bitmap;
-import android.graphics.Canvas;
 import android.graphics.Matrix;
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
+import android.view.DisplayListCanvas;
+import android.view.RenderNode;
+import android.view.ThreadedRenderer;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageView;
@@ -99,7 +101,7 @@
 
         ImageView copy = new ImageView(view.getContext());
         copy.setScaleType(ImageView.ScaleType.CENTER_CROP);
-        Bitmap bitmap = createViewBitmap(view, matrix, bounds);
+        Bitmap bitmap = createViewBitmap(view, matrix, bounds, sceneRoot);
         if (bitmap != null) {
             copy.setImageBitmap(bitmap);
         }
@@ -113,7 +115,7 @@
     /**
      * Get a copy of bitmap of given drawable, return null if intrinsic size is zero
      */
-    public static Bitmap createDrawableBitmap(Drawable drawable) {
+    public static Bitmap createDrawableBitmap(Drawable drawable, View hostView) {
         int width = drawable.getIntrinsicWidth();
         int height = drawable.getIntrinsicHeight();
         if (width <= 0 || height <= 0) {
@@ -126,8 +128,11 @@
         }
         int bitmapWidth = (int) (width * scale);
         int bitmapHeight = (int) (height * scale);
-        Bitmap bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);
-        Canvas canvas = new Canvas(bitmap);
+        final RenderNode node = RenderNode.create("TransitionUtils", hostView);
+        node.setLeftTopRightBottom(0, 0, width, height);
+        node.setClipToBounds(false);
+        final DisplayListCanvas canvas = node.start(width, height);
+        // Do stuff with the canvas
         Rect existingBounds = drawable.getBounds();
         int left = existingBounds.left;
         int top = existingBounds.top;
@@ -136,7 +141,8 @@
         drawable.setBounds(0, 0, bitmapWidth, bitmapHeight);
         drawable.draw(canvas);
         drawable.setBounds(left, top, right, bottom);
-        return bitmap;
+        node.end(canvas);
+        return ThreadedRenderer.createHardwareBitmap(node, width, height);
     }
 
     /**
@@ -150,22 +156,40 @@
      *               returning.
      * @param bounds The bounds of the bitmap in the destination coordinate system (where the
      *               view should be presented. Typically, this is matrix.mapRect(viewBounds);
+     * @param sceneRoot A ViewGroup that is attached to the window to temporarily contain the view
+     *                  if it isn't attached to the window.
      * @return A bitmap of the given view or null if bounds has no width or height.
      */
-    public static Bitmap createViewBitmap(View view, Matrix matrix, RectF bounds) {
+    public static Bitmap createViewBitmap(View view, Matrix matrix, RectF bounds,
+            ViewGroup sceneRoot) {
+        final boolean addToOverlay = !view.isAttachedToWindow();
+        if (addToOverlay) {
+            if (sceneRoot == null || !sceneRoot.isAttachedToWindow()) {
+                return null;
+            }
+            sceneRoot.getOverlay().add(view);
+        }
         Bitmap bitmap = null;
         int bitmapWidth = Math.round(bounds.width());
         int bitmapHeight = Math.round(bounds.height());
         if (bitmapWidth > 0 && bitmapHeight > 0) {
-            float scale = Math.min(1f, ((float)MAX_IMAGE_SIZE) / (bitmapWidth * bitmapHeight));
+            float scale = Math.min(1f, ((float) MAX_IMAGE_SIZE) / (bitmapWidth * bitmapHeight));
             bitmapWidth *= scale;
             bitmapHeight *= scale;
             matrix.postTranslate(-bounds.left, -bounds.top);
             matrix.postScale(scale, scale);
-            bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);
-            Canvas canvas = new Canvas(bitmap);
+
+            final RenderNode node = RenderNode.create("TransitionUtils", view);
+            node.setLeftTopRightBottom(0, 0, bitmapWidth, bitmapHeight);
+            node.setClipToBounds(false);
+            final DisplayListCanvas canvas = node.start(bitmapWidth, bitmapHeight);
             canvas.concat(matrix);
             view.draw(canvas);
+            node.end(canvas);
+            bitmap = ThreadedRenderer.createHardwareBitmap(node, bitmapWidth, bitmapHeight);
+        }
+        if (addToOverlay) {
+            sceneRoot.getOverlay().remove(view);
         }
         return bitmap;
     }
diff --git a/core/java/android/util/AtomicFile.java b/core/java/android/util/AtomicFile.java
index 0122e49..6342c8b 100644
--- a/core/java/android/util/AtomicFile.java
+++ b/core/java/android/util/AtomicFile.java
@@ -214,10 +214,10 @@
      * Gets the last modified time of the atomic file.
      * {@hide}
      *
-     * @return last modified time in milliseconds since epoch.
-     * @throws IOException
+     * @return last modified time in milliseconds since epoch.  Returns zero if
+     *     the file does not exist or an I/O error is encountered.
      */
-    public long getLastModifiedTime() throws IOException {
+    public long getLastModifiedTime() {
         if (mBackupName.exists()) {
             return mBackupName.lastModified();
         }
diff --git a/core/java/android/util/BootTimingsTraceLog.java b/core/java/android/util/BootTimingsTraceLog.java
deleted file mode 100644
index 2e4319c..0000000
--- a/core/java/android/util/BootTimingsTraceLog.java
+++ /dev/null
@@ -1,64 +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.util;
-
-import android.os.Build;
-import android.os.SystemClock;
-import android.os.Trace;
-
-import java.util.ArrayDeque;
-import java.util.Deque;
-
-/**
- * Helper class for reporting boot timing metrics.
- * @hide
- */
-public class BootTimingsTraceLog {
-    // Debug boot time for every step if it's non-user build.
-    private static final boolean DEBUG_BOOT_TIME = !"user".equals(Build.TYPE);
-    private final Deque<Pair<String, Long>> mStartTimes
-            = DEBUG_BOOT_TIME ? new ArrayDeque<>() : null;
-    private final String mTag;
-    private long mTraceTag;
-
-    public BootTimingsTraceLog(String tag, long traceTag) {
-        mTag = tag;
-        mTraceTag = traceTag;
-    }
-
-    public void traceBegin(String name) {
-        Trace.traceBegin(mTraceTag, name);
-        if (DEBUG_BOOT_TIME) {
-            mStartTimes.push(Pair.create(name, SystemClock.elapsedRealtime()));
-        }
-    }
-
-    public void traceEnd() {
-        Trace.traceEnd(mTraceTag);
-        if (!DEBUG_BOOT_TIME) {
-            return;
-        }
-        if (mStartTimes.peek() == null) {
-            Slog.w(mTag, "traceEnd called more times than traceBegin");
-            return;
-        }
-        Pair<String, Long> event = mStartTimes.pop();
-        // Log the duration so it can be parsed by external tools for performance reporting
-        Slog.d(mTag, event.first + " took to complete: "
-                + (SystemClock.elapsedRealtime() - event.second) + "ms");
-    }
-}
diff --git a/core/java/android/util/IconDrawableFactory.java b/core/java/android/util/IconDrawableFactory.java
index b07942f..6a6c2ce 100644
--- a/core/java/android/util/IconDrawableFactory.java
+++ b/core/java/android/util/IconDrawableFactory.java
@@ -21,7 +21,6 @@
 import android.content.pm.PackageItemInfo;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
-import android.graphics.Color;
 import android.graphics.drawable.Drawable;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -68,8 +67,7 @@
             return icon;
         }
 
-        // Before badging, add shadow to adaptive icon if needed.
-        icon = mLauncherIcons.wrapIconDrawableWithShadow(icon);
+        icon = getShadowedIcon(icon);
         if (appInfo.isInstantApp()) {
             int badgeColor = Resources.getSystem().getColor(
                     com.android.internal.R.color.instant_app_badge, null);
@@ -85,6 +83,13 @@
         return icon;
     }
 
+    /**
+     * Add shadow to the icon if {@link AdaptiveIconDrawable}
+     */
+    public Drawable getShadowedIcon(Drawable icon) {
+        return mLauncherIcons.wrapIconDrawableWithShadow(icon);
+    }
+
     // Should have enough colors to cope with UserManagerService.getMaxManagedProfiles()
     @VisibleForTesting
     public static final int[] CORP_BADGE_COLORS = new int[] {
diff --git a/core/java/android/util/LocalLog.java b/core/java/android/util/LocalLog.java
index 665c583..eb84479f 100644
--- a/core/java/android/util/LocalLog.java
+++ b/core/java/android/util/LocalLog.java
@@ -18,10 +18,10 @@
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
-import java.util.Calendar;
-import java.util.Iterator;
-import java.util.Deque;
+import java.time.LocalDateTime;
 import java.util.ArrayDeque;
+import java.util.Deque;
+import java.util.Iterator;
 
 /**
  * @hide
@@ -40,9 +40,7 @@
         if (mMaxLines <= 0) {
             return;
         }
-        Calendar c = Calendar.getInstance();
-        c.setTimeInMillis(System.currentTimeMillis());
-        append(String.format("%tm-%td %tH:%tM:%tS.%tL - %s", c, c, c, c, c, c, msg));
+        append(String.format("%s - %s", LocalDateTime.now(), msg));
     }
 
     private synchronized void append(String logLine) {
diff --git a/core/java/android/util/Log.java b/core/java/android/util/Log.java
index 8691136..0299865 100644
--- a/core/java/android/util/Log.java
+++ b/core/java/android/util/Log.java
@@ -392,7 +392,7 @@
         // and the length of the tag.
         // Note: we implicitly accept possible truncation for Modified-UTF8 differences. It
         //       is too expensive to compute that ahead of time.
-        int bufferSize = NoPreloadHolder.LOGGER_ENTRY_MAX_PAYLOAD  // Base.
+        int bufferSize = PreloadHolder.LOGGER_ENTRY_MAX_PAYLOAD    // Base.
                 - 2                                                // Two terminators.
                 - (tag != null ? tag.length() : 0)                 // Tag length.
                 - 32;                                              // Some slack.
@@ -429,10 +429,10 @@
     }
 
     /**
-     * NoPreloadHelper class. Caches the LOGGER_ENTRY_MAX_PAYLOAD value to avoid
+     * PreloadHelper class. Caches the LOGGER_ENTRY_MAX_PAYLOAD value to avoid
      * a JNI call during logging.
      */
-    static class NoPreloadHolder {
+    static class PreloadHolder {
         public final static int LOGGER_ENTRY_MAX_PAYLOAD =
                 logger_entry_max_payload_native();
     }
diff --git a/core/java/android/util/PackageUtils.java b/core/java/android/util/PackageUtils.java
index 0fe56f6..e2e9d53 100644
--- a/core/java/android/util/PackageUtils.java
+++ b/core/java/android/util/PackageUtils.java
@@ -18,12 +18,13 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
 import android.content.pm.Signature;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
 
 /**
  * Helper functions applicable to packages.
@@ -36,32 +37,67 @@
     }
 
     /**
-     * Computes the SHA256 digest of the signing cert for a package.
-     * @param packageManager The package manager.
-     * @param packageName The package for which to generate the digest.
-     * @param userId The user for which to generate the digest.
-     * @return The digest or null if the package does not exist for this user.
+     * Computes the SHA256 digests of a list of signatures. Items in the
+     * resulting array of hashes correspond to the signatures in the
+     * input array.
+     * @param signatures The signatures.
+     * @return The digest array.
      */
-    public static @Nullable String computePackageCertSha256Digest(
-            @NonNull PackageManager packageManager,
-            @NonNull String packageName, int userId) {
-        final PackageInfo packageInfo;
-        try {
-            packageInfo = packageManager.getPackageInfoAsUser(packageName,
-                    PackageManager.GET_SIGNATURES, userId);
-        } catch (PackageManager.NameNotFoundException e) {
-            return null;
+    public static @NonNull String[] computeSignaturesSha256Digests(
+            @NonNull Signature[] signatures) {
+        final int signatureCount = signatures.length;
+        final String[] digests = new String[signatureCount];
+        for (int i = 0; i < signatureCount; i++) {
+            digests[i] = computeSha256Digest(signatures[i].toByteArray());
         }
-        return computeCertSha256Digest(packageInfo.signatures[0]);
+        return digests;
+    }
+    /**
+     * Computes a SHA256 digest of the signatures' SHA256 digests. First,
+     * individual hashes for each signature is derived in a hexademical
+     * form, then these strings are sorted based the natural ordering, and
+     * finally a hash is derived from these strings' bytes.
+     * @param signatures The signatures.
+     * @return The digest.
+     */
+    public static @NonNull String computeSignaturesSha256Digest(
+            @NonNull Signature[] signatures) {
+        // Shortcut for optimization - most apps singed by a single cert
+        if (signatures.length == 1) {
+            return computeSha256Digest(signatures[0].toByteArray());
+        }
+
+        // Make sure these are sorted to handle reversed certificates
+        final String[] sha256Digests = computeSignaturesSha256Digests(signatures);
+        return computeSignaturesSha256Digest(sha256Digests);
     }
 
     /**
-     * Computes the SHA256 digest of a cert.
-     * @param signature The signature.
-     * @return The digest or null if an error occurs.
+     * Computes a SHA256 digest in of the signatures SHA256 digests. First,
+     * the strings are sorted based the natural ordering, and then a hash is
+     * derived from these strings' bytes.
+     * @param sha256Digests Signature SHA256 hashes in hexademical form.
+     * @return The digest.
      */
-    public static @Nullable String computeCertSha256Digest(@NonNull Signature signature) {
-        return computeSha256Digest(signature.toByteArray());
+    public static @NonNull String computeSignaturesSha256Digest(
+            @NonNull String[] sha256Digests) {
+        // Shortcut for optimization - most apps singed by a single cert
+        if (sha256Digests.length == 1) {
+            return sha256Digests[0];
+        }
+
+        // Make sure these are sorted to handle reversed certificates
+        Arrays.sort(sha256Digests);
+
+        final ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+        for (String sha256Digest : sha256Digests) {
+            try {
+                bytes.write(sha256Digest.getBytes());
+            } catch (IOException e) {
+                /* ignore - can't happen */
+            }
+        }
+        return computeSha256Digest(bytes.toByteArray());
     }
 
     /**
diff --git a/core/java/android/util/Patterns.java b/core/java/android/util/Patterns.java
index ca39854..50cd7b1 100644
--- a/core/java/android/util/Patterns.java
+++ b/core/java/android/util/Patterns.java
@@ -406,7 +406,7 @@
      * the local part to be at most 64 octets.
      */
     private static final String EMAIL_ADDRESS_LOCAL_PART =
-            "[" + EMAIL_CHAR + "]" + "(?:[" + EMAIL_CHAR + "\\.]{1,62}[" + EMAIL_CHAR + "])?";
+            "[" + EMAIL_CHAR + "]" + "(?:[" + EMAIL_CHAR + "\\.]{0,62}[" + EMAIL_CHAR + "])?";
 
     /**
      * Regular expression for the domain part of an email address. RFC5321 section 4.5.3.1.2 limits
diff --git a/core/java/android/util/RecurrenceRule.java b/core/java/android/util/RecurrenceRule.java
new file mode 100644
index 0000000..1fe638d
--- /dev/null
+++ b/core/java/android/util/RecurrenceRule.java
@@ -0,0 +1,257 @@
+/*
+ * 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.util;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.net.ProtocolException;
+import java.time.Clock;
+import java.time.LocalTime;
+import java.time.Period;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.util.Iterator;
+import java.util.Objects;
+
+/**
+ * Description of an event that should recur over time at a specific interval
+ * between two anchor points in time.
+ *
+ * @hide
+ */
+public class RecurrenceRule implements Parcelable {
+    private static final String TAG = "RecurrenceRule";
+    private static final boolean DEBUG = true;
+
+    private static final int VERSION_INIT = 0;
+
+    /** {@hide} */
+    @VisibleForTesting
+    public static Clock sClock = Clock.systemDefaultZone();
+
+    public final ZonedDateTime start;
+    public final ZonedDateTime end;
+    public final Period period;
+
+    public RecurrenceRule(ZonedDateTime start, ZonedDateTime end, Period period) {
+        this.start = start;
+        this.end = end;
+        this.period = period;
+    }
+
+    @Deprecated
+    public static RecurrenceRule buildNever() {
+        return new RecurrenceRule(null, null, null);
+    }
+
+    @Deprecated
+    public static RecurrenceRule buildRecurringMonthly(int dayOfMonth, ZoneId zone) {
+        // Assume we started last January, since it has all possible days
+        final ZonedDateTime now = ZonedDateTime.now(sClock).withZoneSameInstant(zone);
+        final ZonedDateTime start = ZonedDateTime.of(
+                now.toLocalDate().minusYears(1).withMonth(1).withDayOfMonth(dayOfMonth),
+                LocalTime.MIDNIGHT, zone);
+        return new RecurrenceRule(start, null, Period.ofMonths(1));
+    }
+
+    private RecurrenceRule(Parcel source) {
+        start = convertZonedDateTime(source.readString());
+        end = convertZonedDateTime(source.readString());
+        period = convertPeriod(source.readString());
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(convertZonedDateTime(start));
+        dest.writeString(convertZonedDateTime(end));
+        dest.writeString(convertPeriod(period));
+    }
+
+    public RecurrenceRule(DataInputStream in) throws IOException {
+        final int version = in.readInt();
+        switch (version) {
+            case VERSION_INIT:
+                start = convertZonedDateTime(BackupUtils.readString(in));
+                end = convertZonedDateTime(BackupUtils.readString(in));
+                period = convertPeriod(BackupUtils.readString(in));
+            default:
+                throw new ProtocolException("Unknown version " + version);
+        }
+    }
+
+    public void writeToStream(DataOutputStream out) throws IOException {
+        out.writeInt(VERSION_INIT);
+        BackupUtils.writeString(out, convertZonedDateTime(start));
+        BackupUtils.writeString(out, convertZonedDateTime(end));
+        BackupUtils.writeString(out, convertPeriod(period));
+    }
+
+    @Override
+    public String toString() {
+        return new StringBuilder("RecurrenceRule{")
+                .append("start=").append(start)
+                .append(" end=").append(end)
+                .append(" period=").append(period)
+                .append("}").toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(start, end, period);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof RecurrenceRule) {
+            final RecurrenceRule other = (RecurrenceRule) obj;
+            return Objects.equals(start, other.start)
+                    && Objects.equals(end, other.end)
+                    && Objects.equals(period, other.period);
+        }
+        return false;
+    }
+
+    public static final Parcelable.Creator<RecurrenceRule> CREATOR = new Parcelable.Creator<RecurrenceRule>() {
+        @Override
+        public RecurrenceRule createFromParcel(Parcel source) {
+            return new RecurrenceRule(source);
+        }
+
+        @Override
+        public RecurrenceRule[] newArray(int size) {
+            return new RecurrenceRule[size];
+        }
+    };
+
+    @Deprecated
+    public boolean isMonthly() {
+        return start != null
+                && period != null
+                && period.getYears() == 0
+                && period.getMonths() == 1
+                && period.getDays() == 0;
+    }
+
+    public Iterator<Pair<ZonedDateTime, ZonedDateTime>> cycleIterator() {
+        if (period != null) {
+            return new RecurringIterator();
+        } else {
+            return new NonrecurringIterator();
+        }
+    }
+
+    private class NonrecurringIterator implements Iterator<Pair<ZonedDateTime, ZonedDateTime>> {
+        boolean hasNext;
+
+        public NonrecurringIterator() {
+            hasNext = (start != null) && (end != null);
+        }
+
+        @Override
+        public boolean hasNext() {
+            return hasNext;
+        }
+
+        @Override
+        public Pair<ZonedDateTime, ZonedDateTime> next() {
+            hasNext = false;
+            return new Pair<>(start, end);
+        }
+    }
+
+    private class RecurringIterator implements Iterator<Pair<ZonedDateTime, ZonedDateTime>> {
+        int i;
+        ZonedDateTime cycleStart;
+        ZonedDateTime cycleEnd;
+
+        public RecurringIterator() {
+            final ZonedDateTime anchor = (end != null) ? end
+                    : ZonedDateTime.now(sClock).withZoneSameInstant(start.getZone());
+            if (DEBUG) Log.d(TAG, "Resolving using anchor " + anchor);
+
+            updateCycle();
+
+            // Walk forwards until we find first cycle after now
+            while (anchor.toEpochSecond() > cycleEnd.toEpochSecond()) {
+                i++;
+                updateCycle();
+            }
+
+            // Walk backwards until we find first cycle before now
+            while (anchor.toEpochSecond() <= cycleStart.toEpochSecond()) {
+                i--;
+                updateCycle();
+            }
+        }
+
+        private void updateCycle() {
+            cycleStart = roundBoundaryTime(start.plus(period.multipliedBy(i)));
+            cycleEnd = roundBoundaryTime(start.plus(period.multipliedBy(i + 1)));
+        }
+
+        private ZonedDateTime roundBoundaryTime(ZonedDateTime boundary) {
+            if (isMonthly() && (boundary.getDayOfMonth() < start.getDayOfMonth())) {
+                // When forced to end a monthly cycle early, we want to count
+                // that entire day against the boundary.
+                return ZonedDateTime.of(boundary.toLocalDate(), LocalTime.MAX, start.getZone());
+            } else {
+                return boundary;
+            }
+        }
+
+        @Override
+        public boolean hasNext() {
+            return cycleStart.toEpochSecond() >= start.toEpochSecond();
+        }
+
+        @Override
+        public Pair<ZonedDateTime, ZonedDateTime> next() {
+            if (DEBUG) Log.d(TAG, "Cycle " + i + " from " + cycleStart + " to " + cycleEnd);
+            Pair<ZonedDateTime, ZonedDateTime> p = new Pair<>(cycleStart, cycleEnd);
+            i--;
+            updateCycle();
+            return p;
+        }
+    }
+
+    public static String convertZonedDateTime(ZonedDateTime time) {
+        return time != null ? time.toString() : null;
+    }
+
+    public static ZonedDateTime convertZonedDateTime(String time) {
+        return time != null ? ZonedDateTime.parse(time) : null;
+    }
+
+    public static String convertPeriod(Period period) {
+        return period != null ? period.toString() : null;
+    }
+
+    public static Period convertPeriod(String period) {
+        return period != null ? Period.parse(period) : null;
+    }
+}
diff --git a/core/java/android/util/SparseLongArray.java b/core/java/android/util/SparseLongArray.java
index 0166c4a..81db2b7 100644
--- a/core/java/android/util/SparseLongArray.java
+++ b/core/java/android/util/SparseLongArray.java
@@ -119,6 +119,23 @@
     }
 
     /**
+     * @hide
+     * Remove a range of mappings as a batch.
+     *
+     * @param index Index to begin at
+     * @param size Number of mappings to remove
+     *
+     * <p>For indices outside of the range <code>0...size()-1</code>,
+     * the behavior is undefined.</p>
+     */
+    public void removeAtRange(int index, int size) {
+        size = Math.min(size, mSize - index);
+        System.arraycopy(mKeys, index + size, mKeys, index, mSize - (index + size));
+        System.arraycopy(mValues, index + size, mValues, index, mSize - (index + size));
+        mSize -= size;
+    }
+
+    /**
      * Removes the mapping at the given index.
      */
     public void removeAt(int index) {
diff --git a/core/java/android/util/TimingsTraceLog.java b/core/java/android/util/TimingsTraceLog.java
new file mode 100644
index 0000000..36e9f77
--- /dev/null
+++ b/core/java/android/util/TimingsTraceLog.java
@@ -0,0 +1,77 @@
+/*
+ * 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.util;
+
+import android.os.Build;
+import android.os.SystemClock;
+import android.os.Trace;
+
+import java.util.ArrayDeque;
+import java.util.Deque;
+
+/**
+ * Helper class for reporting boot and shutdown timing metrics.
+ * @hide
+ */
+public class TimingsTraceLog {
+    // Debug boot time for every step if it's non-user build.
+    private static final boolean DEBUG_BOOT_TIME = !Build.IS_USER;
+    private final Deque<Pair<String, Long>> mStartTimes =
+            DEBUG_BOOT_TIME ? new ArrayDeque<>() : null;
+    private final String mTag;
+    private long mTraceTag;
+
+    public TimingsTraceLog(String tag, long traceTag) {
+        mTag = tag;
+        mTraceTag = traceTag;
+    }
+
+    /**
+     * Begin tracing named section
+     * @param name name to appear in trace
+     */
+    public void traceBegin(String name) {
+        Trace.traceBegin(mTraceTag, name);
+        if (DEBUG_BOOT_TIME) {
+            mStartTimes.push(Pair.create(name, SystemClock.elapsedRealtime()));
+        }
+    }
+
+    /**
+     * End tracing previously {@link #traceBegin(String) started} section.
+     * Also {@link #logDuration logs} the duration.
+     */
+    public void traceEnd() {
+        Trace.traceEnd(mTraceTag);
+        if (!DEBUG_BOOT_TIME) {
+            return;
+        }
+        if (mStartTimes.peek() == null) {
+            Slog.w(mTag, "traceEnd called more times than traceBegin");
+            return;
+        }
+        Pair<String, Long> event = mStartTimes.pop();
+        logDuration(event.first, (SystemClock.elapsedRealtime() - event.second));
+    }
+
+    /**
+     * Log the duration so it can be parsed by external tools for performance reporting
+     */
+    public void logDuration(String name, long timeMs) {
+        Slog.d(mTag, name + " took to complete: " + timeMs + "ms");
+    }
+}
diff --git a/core/java/android/view/ActionMode.java b/core/java/android/view/ActionMode.java
index ea979c8..05d9167 100644
--- a/core/java/android/view/ActionMode.java
+++ b/core/java/android/view/ActionMode.java
@@ -18,6 +18,7 @@
 
 
 import android.annotation.StringRes;
+import android.annotation.TestApi;
 import android.graphics.Rect;
 
 /**
@@ -278,6 +279,7 @@
      * @return true if the UI used to show this action mode can take focus
      * @hide Internal use only
      */
+    @TestApi
     public boolean isUiFocusable() {
         return true;
     }
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 9778893..e7c3f92 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -26,6 +26,7 @@
 import android.graphics.PixelFormat;
 import android.graphics.Point;
 import android.graphics.Rect;
+import android.hardware.display.DisplayManager;
 import android.hardware.display.DisplayManagerGlobal;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -200,11 +201,16 @@
      * Display flag: Indicates that the display can show its content when non-secure keyguard is
      * shown.
      * <p>
-     * This flag identifies secondary displays that won't show keyguard if it can be dismissed
-     * without entering credentials. Display content will be shown even if other displays are
-     * locked.
+     * This flag identifies secondary displays that will continue showing content if keyguard can be
+     * dismissed without entering credentials.
+     * </p><p>
+     * An example of usage is a virtual display which content is displayed on external hardware
+     * display that is not visible to the system directly.
      * </p>
      *
+     * @see DisplayManager#VIRTUAL_DISPLAY_FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD
+     * @see WindowManagerPolicy#isKeyguardSecure(int)
+     * @see WindowManagerPolicy#isKeyguardTrustedLw()
      * @see #getFlags
      * @hide
      */
diff --git a/core/java/android/view/FocusFinder.java b/core/java/android/view/FocusFinder.java
index af26a88..74555de 100644
--- a/core/java/android/view/FocusFinder.java
+++ b/core/java/android/view/FocusFinder.java
@@ -574,10 +574,10 @@
         switch (direction) {
             case View.FOCUS_LEFT:
             case View.FOCUS_RIGHT:
-                return (rect2.bottom >= rect1.top) && (rect2.top <= rect1.bottom);
+                return (rect2.bottom > rect1.top) && (rect2.top < rect1.bottom);
             case View.FOCUS_UP:
             case View.FOCUS_DOWN:
-                return (rect2.right >= rect1.left) && (rect2.left <= rect1.right);
+                return (rect2.right > rect1.left) && (rect2.left < rect1.right);
         }
         throw new IllegalArgumentException("direction must be one of "
                 + "{FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}.");
diff --git a/core/java/android/view/HapticFeedbackConstants.java b/core/java/android/view/HapticFeedbackConstants.java
index c431323..b147928 100644
--- a/core/java/android/view/HapticFeedbackConstants.java
+++ b/core/java/android/view/HapticFeedbackConstants.java
@@ -57,16 +57,24 @@
     public static final int CONTEXT_CLICK = 6;
 
     /**
-     * The user has released a virtual or software keyboard key.
-     * @hide
+     * The user has pressed a virtual or software keyboard key.
      */
-    public static final int VIRTUAL_KEY_RELEASE = 7;
+    public static final int KEYBOARD_PRESS = KEYBOARD_TAP;
+
+    /**
+     * The user has released a virtual keyboard key.
+     */
+    public static final int KEYBOARD_RELEASE = 7;
+
+    /**
+     * The user has released a virtual key.
+     */
+    public static final int VIRTUAL_KEY_RELEASE = 8;
 
     /**
      * The user has performed a selection/insertion handle move on text field.
-     * @hide
      */
-    public static final int TEXT_HANDLE_MOVE = 8;
+    public static final int TEXT_HANDLE_MOVE = 9;
 
     /**
      * The phone has booted with safe mode enabled.
diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java
index 15be2b0..8405d9e 100644
--- a/core/java/android/view/InputDevice.java
+++ b/core/java/android/view/InputDevice.java
@@ -772,7 +772,6 @@
     /**
      * Returns true if input device is enabled.
      * @return Whether the input device is enabled.
-     * @hide
      */
     public boolean isEnabled() {
         return InputManager.getInstance().isInputDeviceEnabled(mId);
diff --git a/core/java/android/view/InputEventConsistencyVerifier.java b/core/java/android/view/InputEventConsistencyVerifier.java
index 46ef379..7e8ec04 100644
--- a/core/java/android/view/InputEventConsistencyVerifier.java
+++ b/core/java/android/view/InputEventConsistencyVerifier.java
@@ -30,7 +30,7 @@
  * @hide
  */
 public final class InputEventConsistencyVerifier {
-    private static final boolean IS_ENG_BUILD = "eng".equals(Build.TYPE);
+    private static final boolean IS_ENG_BUILD = Build.IS_ENG;
 
     private static final String EVENT_TYPE_KEY = "KeyEvent";
     private static final String EVENT_TYPE_TRACKBALL = "TrackballEvent";
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index 829b2b7..a2147b7 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -804,8 +804,11 @@
     public static final int KEYCODE_SYSTEM_NAVIGATION_LEFT = 282;
     /** Key code constant: Consumed by the system for navigation right */
     public static final int KEYCODE_SYSTEM_NAVIGATION_RIGHT = 283;
+    /** Key code constant: Show all apps
+     * @hide */
+    public static final int KEYCODE_ALL_APPS = 284;
 
-    private static final int LAST_KEYCODE = KEYCODE_SYSTEM_NAVIGATION_RIGHT;
+    private static final int LAST_KEYCODE = KEYCODE_ALL_APPS;
 
     // NOTE: If you add a new keycode here you must also add it to:
     //  isSystem()
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index 4f9dbd5..2c1f734 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -73,10 +73,12 @@
 
     private static native long nativeGetNextFrameNumber(long nativeObject);
     private static native int nativeSetScalingMode(long nativeObject, int scalingMode);
-    private static native void nativeSetBuffersTransform(long nativeObject, long transform);
     private static native int nativeForceScopedDisconnect(long nativeObject);
     private static native int nativeAttachAndQueueBuffer(long nativeObject, GraphicBuffer buffer);
 
+    private static native int nativeSetSharedBufferModeEnabled(long nativeObject, boolean enabled);
+    private static native int nativeSetAutoRefreshEnabled(long nativeObject, boolean enabled);
+
     public static final Parcelable.Creator<Surface> CREATOR =
             new Parcelable.Creator<Surface>() {
         @Override
@@ -114,6 +116,8 @@
     private HwuiContext mHwuiContext;
 
     private boolean mIsSingleBuffered;
+    private boolean mIsSharedBufferModeEnabled;
+    private boolean mIsAutoRefreshEnabled;
 
     /** @hide */
     @Retention(RetentionPolicy.SOURCE)
@@ -624,6 +628,105 @@
     }
 
     /**
+     * <p>The shared buffer mode allows both the application and the surface compositor
+     * (SurfaceFlinger) to concurrently access this surface's buffer. While the
+     * application is still required to issue a present request
+     * (see {@link #unlockCanvasAndPost(Canvas)}) to the compositor when an update is required,
+     * the compositor may trigger an update at any time. Since the surface's buffer is shared
+     * between the application and the compositor, updates triggered by the compositor may
+     * cause visible tearing.</p>
+     *
+     * <p>The shared buffer mode can be used with
+     * {@link #setAutoRefreshEnabled(boolean) auto-refresh} to avoid the overhead of
+     * issuing present requests.</p>
+     *
+     * <p>If the application uses the shared buffer mode to reduce latency, it is
+     * recommended to use software rendering (see {@link #lockCanvas(Rect)} to ensure
+     * the graphics workloads are not affected by other applications and/or the system
+     * using the GPU. When using software rendering, the application should update the
+     * smallest possible region of the surface required.</p>
+     *
+     * <p class="note">The shared buffer mode might not be supported by the underlying
+     * hardware. Enabling shared buffer mode on hardware that does not support it will
+     * not yield an error but the application will not benefit from lower latency (and
+     * tearing will not be visible).</p>
+     *
+     * <p class="note">Depending on how many and what kind of surfaces are visible, the
+     * surface compositor may need to copy the shared buffer before it is displayed. When
+     * this happens, the latency benefits of shared buffer mode will be reduced.</p>
+     *
+     * @param enabled True to enable the shared buffer mode on this surface, false otherwise
+     *
+     * @see #isSharedBufferModeEnabled()
+     * @see #setAutoRefreshEnabled(boolean)
+     *
+     * @hide
+     */
+    public void setSharedBufferModeEnabled(boolean enabled) {
+        if (mIsSharedBufferModeEnabled != enabled) {
+            int error = nativeSetSharedBufferModeEnabled(mNativeObject, enabled);
+            if (error != 0) {
+                throw new RuntimeException(
+                        "Failed to set shared buffer mode on Surface (bad object?)");
+            } else {
+                mIsSharedBufferModeEnabled = enabled;
+            }
+        }
+    }
+
+    /**
+     * @return True if shared buffer mode is enabled on this surface, false otherwise
+     *
+     * @see #setSharedBufferModeEnabled(boolean)
+     *
+     * @hide
+     */
+    public boolean isSharedBufferModeEnabled() {
+        return mIsSharedBufferModeEnabled;
+    }
+
+    /**
+     * <p>When auto-refresh is enabled, the surface compositor (SurfaceFlinger)
+     * automatically updates the display on a regular refresh cycle. The application
+     * can continue to issue present requests but it is not required. Enabling
+     * auto-refresh may result in visible tearing.</p>
+     *
+     * <p>Auto-refresh has no effect if the {@link #setSharedBufferModeEnabled(boolean)
+     * shared buffer mode} is not enabled.</p>
+     *
+     * <p>Because auto-refresh will trigger continuous updates of the display, it is
+     * recommended to turn it on only when necessary. For example, in a drawing/painting
+     * application auto-refresh should be enabled on finger/pen down and disabled on
+     * finger/pen up.</p>
+     *
+     * @param enabled True to enable auto-refresh on this surface, false otherwise
+     *
+     * @see #isAutoRefreshEnabled()
+     * @see #setSharedBufferModeEnabled(boolean)
+     *
+     * @hide
+     */
+    public void setAutoRefreshEnabled(boolean enabled) {
+        if (mIsAutoRefreshEnabled != enabled) {
+            int error = nativeSetAutoRefreshEnabled(mNativeObject, enabled);
+            if (error != 0) {
+                throw new RuntimeException("Failed to set auto refresh on Surface (bad object?)");
+            } else {
+                mIsAutoRefreshEnabled = enabled;
+            }
+        }
+    }
+
+    /**
+     * @return True if auto-refresh is enabled on this surface, false otherwise
+     *
+     * @hide
+     */
+    public boolean isAutoRefreshEnabled() {
+        return mIsAutoRefreshEnabled;
+    }
+
+    /**
      * Exception thrown when a Canvas couldn't be locked with {@link Surface#lockCanvas}, or
      * when a SurfaceTexture could not successfully be allocated.
      */
@@ -650,13 +753,13 @@
                 return "ROTATION_0";
             }
             case Surface.ROTATION_90: {
-                return "ROATATION_90";
+                return "ROTATION_90";
             }
             case Surface.ROTATION_180: {
-                return "ROATATION_180";
+                return "ROTATION_180";
             }
             case Surface.ROTATION_270: {
-                return "ROATATION_270";
+                return "ROTATION_270";
             }
             default: {
                 throw new IllegalArgumentException("Invalid rotation: " + rotation);
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index cac27af..462dad3 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -231,6 +231,7 @@
         updateRequestedVisibility();
 
         mAttachedToWindow = true;
+        mParent.requestTransparentRegion(SurfaceView.this);
         if (!mGlobalListenersAdded) {
             ViewTreeObserver observer = getViewTreeObserver();
             observer.addOnScrollChangedListener(mScrollChangedListener);
@@ -269,8 +270,6 @@
         if (mPendingReportDraws > 0) {
             mDrawFinished = true;
             if (mAttachedToWindow) {
-                mParent.requestTransparentRegion(SurfaceView.this);
-                
                 notifyDrawFinished();
                 invalidate();
             }
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 590a87f..8d24d1e 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -127,6 +127,7 @@
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Calendar;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -1078,6 +1079,29 @@
      * <a href="#attr_android:autofillHint"> {@code android:autofillHint}</a> (in which case the
      * value should be <code>{@value #AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE}</code>).
      *
+     * <p>When annotating a view with this hint, it's recommended to use a date autofill value to
+     * avoid ambiguity when the autofill service provides a value for it. To understand why a
+     * value can be ambiguous, consider "April of 2020", which could be represented as either of
+     * the following options:
+     *
+     * <ul>
+     *   <li>{@code "04/2020"}
+     *   <li>{@code "4/2020"}
+     *   <li>{@code "2020/04"}
+     *   <li>{@code "2020/4"}
+     *   <li>{@code "April/2020"}
+     *   <li>{@code "Apr/2020"}
+     * </ul>
+     *
+     * <p>You define a date autofill value for the view by overriding the following methods:
+     *
+     * <ol>
+     *   <li>{@link #getAutofillType()} to return {@link #AUTOFILL_TYPE_DATE}.
+     *   <li>{@link #getAutofillValue()} to return a
+     *       {@link AutofillValue#forDate(long) date autofillvalue}.
+     *   <li>{@link #autofill(AutofillValue)} to expect a data autofillvalue.
+     * </ol>
+     *
      * <p>See {@link #setAutofillHints(String...)} for more info about autofill hints.
      */
     public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE =
@@ -1090,6 +1114,22 @@
      * <a href="#attr_android:autofillHint"> {@code android:autofillHint}</a> (in which case the
      * value should be <code>{@value #AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH}</code>).
      *
+     * <p>When annotating a view with this hint, it's recommended to use a text autofill value
+     * whose value is the numerical representation of the month, starting on {@code 1} to avoid
+     * ambiguity when the autofill service provides a value for it. To understand why a
+     * value can be ambiguous, consider "January", which could be represented as either of
+     *
+     * <ul>
+     *   <li>{@code "1"}: recommended way.
+     *   <li>{@code "0"}: if following the {@link Calendar#MONTH} convention.
+     *   <li>{@code "January"}: full name, in English.
+     *   <li>{@code "jan"}: abbreviated name, in English.
+     *   <li>{@code "Janeiro"}: full name, in another language.
+     * </ul>
+     *
+     * <p>Another recommended approach is to use a date autofill value - see
+     * {@link #AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE} for more details.
+     *
      * <p>See {@link #setAutofillHints(String...)} for more info about autofill hints.
      */
     public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH =
@@ -7618,6 +7658,10 @@
      *   <li>Call
      *    {@link android.view.autofill.AutofillManager#notifyValueChanged(View, int, AutofillValue)}
      *       when the value of a virtual child changed.
+     *   <li>Call
+     *    {@link
+     *    android.view.autofill.AutofillManager#notifyViewVisibilityChanged(View, int, boolean)}
+     *       when the visibility of a virtual child changed.
      *   <li>Call {@link AutofillManager#commit()} when the autofill context of the view structure
      *       changed and the current context should be committed (for example, when the user tapped
      *       a {@code SUBMIT} button in an HTML page).
@@ -8082,10 +8126,6 @@
             boolean forAutofill, @AutofillFlags int flags) {
         if (forAutofill) {
             structure.setAutofillId(getAutofillId());
-            if (!isLaidOut()) {
-                Log.w(VIEW_LOG_TAG, "dispatchProvideAutofillStructure(): not laid out, ignoring");
-                return;
-            }
             onProvideAutofillStructure(structure, flags);
             onProvideAutofillVirtualStructure(structure, flags);
         } else if (!isAssistBlocked()) {
@@ -9715,6 +9755,7 @@
      * @param hasTransientState true if this view has transient state
      */
     public void setHasTransientState(boolean hasTransientState) {
+        final boolean oldHasTransientState = hasTransientState();
         mTransientStateCount = hasTransientState ? mTransientStateCount + 1 :
                 mTransientStateCount - 1;
         if (mTransientStateCount < 0) {
@@ -9726,9 +9767,10 @@
             // update flag if we've just incremented up from 0 or decremented down to 0
             mPrivateFlags2 = (mPrivateFlags2 & ~PFLAG2_HAS_TRANSIENT_STATE) |
                     (hasTransientState ? PFLAG2_HAS_TRANSIENT_STATE : 0);
-            if (mParent != null) {
+            final boolean newHasTransientState = hasTransientState();
+            if (mParent != null && newHasTransientState != oldHasTransientState) {
                 try {
-                    mParent.childHasTransientStateChanged(this, hasTransientState);
+                    mParent.childHasTransientStateChanged(this, newHasTransientState);
                 } catch (AbstractMethodError e) {
                     Log.e(VIEW_LOG_TAG, mParent.getClass().getSimpleName() +
                             " does not fully implement ViewParent", e);
@@ -10184,6 +10226,7 @@
      *
      * @hide
      */
+    @TestApi
     public final void setFocusedInCluster() {
         setFocusedInCluster(findKeyboardNavigationCluster());
     }
@@ -12161,7 +12204,7 @@
                 // If the view is in the background but still part of the hierarchy this is called
                 // with isVisible=false. Hence visibility==false requires further checks
                 if (isVisible) {
-                    afm.notifyViewVisibilityChange(this, true);
+                    afm.notifyViewVisibilityChanged(this, true);
                 } else {
                     if (mVisibilityChangeForAutofillHandler == null) {
                         mVisibilityChangeForAutofillHandler =
@@ -13250,6 +13293,9 @@
                     && ((privateFlags & PFLAG_FOCUSED) != 0)) {
                 /* Give up focus if we are no longer focusable */
                 clearFocus();
+                if (mParent instanceof ViewGroup) {
+                    ((ViewGroup) mParent).clearFocusedInCluster();
+                }
             } else if (((old & FOCUSABLE) == NOT_FOCUSABLE)
                     && ((privateFlags & PFLAG_FOCUSED) == 0)) {
                 /*
@@ -13297,7 +13343,12 @@
             requestLayout();
 
             if (((mViewFlags & VISIBILITY_MASK) == GONE)) {
-                if (hasFocus()) clearFocus();
+                if (hasFocus()) {
+                    clearFocus();
+                    if (mParent instanceof ViewGroup) {
+                        ((ViewGroup) mParent).clearFocusedInCluster();
+                    }
+                }
                 clearAccessibilityFocus();
                 destroyDrawingCache();
                 if (mParent instanceof View) {
@@ -13325,7 +13376,12 @@
             if (((mViewFlags & VISIBILITY_MASK) == INVISIBLE)) {
                 // root view becoming invisible shouldn't clear focus and accessibility focus
                 if (getRootView() != this) {
-                    if (hasFocus()) clearFocus();
+                    if (hasFocus()) {
+                        clearFocus();
+                        if (mParent instanceof ViewGroup) {
+                            ((ViewGroup) mParent).clearFocusedInCluster();
+                        }
+                    }
                     clearAccessibilityFocus();
                 }
             }
@@ -13593,7 +13649,7 @@
     }
 
     /**
-     * Return the width of the your view.
+     * Return the width of your view.
      *
      * @return The width of your view, in pixels.
      */
@@ -17688,6 +17744,11 @@
                 setAutofilled(baseState.mIsAutofilled);
             }
             if ((baseState.mSavedData & BaseSavedState.AUTOFILL_ID) != 0) {
+                // It can happen that views have the same view id and the restoration path will not
+                // be able to distinguish between them. The autofill id needs to be unique though.
+                // Hence prevent the same autofill view id from being restored multiple times.
+                ((BaseSavedState) state).mSavedData &= ~BaseSavedState.AUTOFILL_ID;
+
                 mAutofillViewId = baseState.mAutofillViewId;
             }
         }
@@ -25016,7 +25077,7 @@
 
         @Override
         public void handleMessage(Message msg) {
-            mAfm.notifyViewVisibilityChange(mView, mView.isShown());
+            mAfm.notifyViewVisibilityChanged(mView, mView.isShown());
         }
     }
 
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index 4def0d0..574137b 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -35,7 +35,7 @@
      * Defines the width of the horizontal scrollbar and the height of the vertical scrollbar in
      * dips
      */
-    private static final int SCROLL_BAR_SIZE = 10;
+    private static final int SCROLL_BAR_SIZE = 4;
 
     /**
      * Duration of the fade when scrollbars fade away in milliseconds
@@ -354,7 +354,8 @@
 
         mEdgeSlop = (int) (sizeAndDensity * EDGE_SLOP + 0.5f);
         mFadingEdgeLength = (int) (sizeAndDensity * FADING_EDGE_LENGTH + 0.5f);
-        mScrollbarSize = (int) (density * SCROLL_BAR_SIZE + 0.5f);
+        mScrollbarSize = res.getDimensionPixelSize(
+                com.android.internal.R.dimen.config_scrollbarSize);
         mDoubleTapSlop = (int) (sizeAndDensity * DOUBLE_TAP_SLOP + 0.5f);
         mWindowTouchSlop = (int) (sizeAndDensity * WINDOW_TOUCH_SLOP + 0.5f);
 
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index ecdfa3f..bf32407 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -818,6 +818,13 @@
         if (mFocusedInCluster != child) {
             return;
         }
+        clearFocusedInCluster();
+    }
+
+    /**
+     * Removes the focusedInCluster chain from this up to the cluster containing it.
+     */
+    void clearFocusedInCluster() {
         View top = findKeyboardNavigationCluster();
         ViewParent parent = this;
         do {
@@ -3400,6 +3407,13 @@
         if (childrenCount <= 0) {
             return;
         }
+
+        if (!isLaidOut()) {
+            Log.v(VIEW_LOG_TAG, "dispatchProvideStructure(): not laid out, ignoring "
+                    + childrenCount + " children of " + getAccessibilityViewId());
+            return;
+        }
+
         structure.setChildCount(childrenCount);
         ArrayList<View> preorderedList = buildOrderedChildList();
         boolean customOrder = preorderedList == null
@@ -3476,6 +3490,13 @@
         if (structure.getChildCount() != 0) {
             return;
         }
+
+        if (!isLaidOut()) {
+            Log.v(VIEW_LOG_TAG, "dispatchProvideAutofillStructure(): not laid out, ignoring "
+                    + mChildrenCount + " children of " + getAutofillId());
+            return;
+        }
+
         final ChildListForAutoFill children = getChildrenForAutofill(flags);
         final int childrenCount = children.size();
         structure.setChildCount(childrenCount);
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index be745bd..3f1ea34 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -28,7 +28,6 @@
 import android.Manifest;
 import android.animation.LayoutTransition;
 import android.annotation.NonNull;
-import android.annotation.TestApi;
 import android.app.ActivityManager;
 import android.app.ActivityThread;
 import android.app.ResourcesManager;
@@ -214,11 +213,8 @@
 
     /**
      * Always assign focus if a focusable View is available.
-     *
-     * @hide
      */
-    @TestApi
-    public static boolean sAlwaysAssignFocus;
+    private static boolean sAlwaysAssignFocus;
 
     /**
      * This list must only be modified by the main thread, so a lock is only needed when changing
@@ -263,6 +259,9 @@
     // visibility to control drawing. The decor view visibility will get adjusted when the app get
     // stopped and that's when the app will stop drawing further frames.
     private boolean mForceDecorViewVisibility = false;
+    // Used for tracking app visibility updates separately in case we get double change. This will
+    // make sure that we always call relayout for the corresponding window.
+    private boolean mAppVisibilityChanged;
     int mOrigWindowType = -1;
 
     /** Whether the window had focus during the most recent traversal. */
@@ -1062,6 +1061,7 @@
     void handleAppVisibility(boolean visible) {
         if (mAppVisible != visible) {
             mAppVisible = visible;
+            mAppVisibilityChanged = true;
             scheduleTraversals();
             if (!mAppVisible) {
                 WindowManagerGlobal.trimForeground();
@@ -1604,7 +1604,11 @@
 
         final int viewVisibility = getHostVisibility();
         final boolean viewVisibilityChanged = !mFirst
-                && (mViewVisibility != viewVisibility || mNewSurfaceNeeded);
+                && (mViewVisibility != viewVisibility || mNewSurfaceNeeded
+                // Also check for possible double visibility update, which will make current
+                // viewVisibility value equal to mViewVisibility and we may miss it.
+                || mAppVisibilityChanged);
+        mAppVisibilityChanged = false;
         final boolean viewUserVisibilityChanged = !mFirst &&
                 ((mViewVisibility == View.VISIBLE) != (viewVisibility == View.VISIBLE));
 
@@ -7710,7 +7714,7 @@
         public void onAccessibilityStateChanged(boolean enabled) {
             if (enabled) {
                 ensureConnection();
-                if (mAttachInfo.mHasWindowFocus) {
+                if (mAttachInfo.mHasWindowFocus && (mView != null)) {
                     mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
                     View focusedView = mView.findFocus();
                     if (focusedView != null && focusedView != mView) {
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index 0d5c075..3d6af41 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -1139,11 +1139,18 @@
     }
 
     /**
-     * <p>Set the color mode of the window. Setting the color mode might
+     * <p>Sets the requested color mode of the window. The requested the color mode might
      * override the window's pixel {@link WindowManager.LayoutParams#format format}.</p>
      *
-     * <p>The color mode must be one of {@link ActivityInfo#COLOR_MODE_DEFAULT},
+     * <p>The requested color mode must be one of {@link ActivityInfo#COLOR_MODE_DEFAULT},
      * {@link ActivityInfo#COLOR_MODE_WIDE_COLOR_GAMUT} or {@link ActivityInfo#COLOR_MODE_HDR}.</p>
+     *
+     * <p>The requested color mode is not guaranteed to be honored. Please refer to
+     * {@link #getColorMode()} for more information.</p>
+     *
+     * @see #getColorMode()
+     * @see Display#isWideColorGamut()
+     * @see Configuration#isScreenWideColorGamut()
      */
     public void setColorMode(@ActivityInfo.ColorMode int colorMode) {
         final WindowManager.LayoutParams attrs = getAttributes();
@@ -1152,8 +1159,16 @@
     }
 
     /**
-     * Returns the color mode of the window, one of {@link ActivityInfo#COLOR_MODE_DEFAULT},
-     * {@link ActivityInfo#COLOR_MODE_WIDE_COLOR_GAMUT} or {@link ActivityInfo#COLOR_MODE_HDR}.
+     * Returns the requested color mode of the window, one of
+     * {@link ActivityInfo#COLOR_MODE_DEFAULT}, {@link ActivityInfo#COLOR_MODE_WIDE_COLOR_GAMUT}
+     * or {@link ActivityInfo#COLOR_MODE_HDR}. If {@link ActivityInfo#COLOR_MODE_WIDE_COLOR_GAMUT}
+     * was requested it is possible the window will not be put in wide color gamut mode depending
+     * on device and display support for that mode. Use {@link #isWideColorGamut} to determine
+     * if the window is currently in wide color gamut mode.
+     *
+     * @see #setColorMode(int)
+     * @see Display#isWideColorGamut()
+     * @see Configuration#isScreenWideColorGamut()
      */
     @ActivityInfo.ColorMode
     public int getColorMode() {
@@ -1161,6 +1176,18 @@
     }
 
     /**
+     * Returns true if this window's color mode is {@link ActivityInfo#COLOR_MODE_WIDE_COLOR_GAMUT},
+     * the display has a wide color gamut and this device supports wide color gamut rendering.
+     *
+     * @see Display#isWideColorGamut()
+     * @see Configuration#isScreenWideColorGamut()
+     */
+    public boolean isWideColorGamut() {
+        return getColorMode() == ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT
+                && getContext().getResources().getConfiguration().isScreenWideColorGamut();
+    }
+
+    /**
      * Set the amount of dim behind the window when using
      * {@link WindowManager.LayoutParams#FLAG_DIM_BEHIND}.  This overrides
      * the default dim amount of that is selected by the Window based on
@@ -1242,8 +1269,10 @@
 
     /** @hide */
     public boolean shouldCloseOnTouch(Context context, MotionEvent event) {
-        if (mCloseOnTouchOutside && event.getAction() == MotionEvent.ACTION_DOWN
-                && isOutOfBounds(context, event) && peekDecorView() != null) {
+        final boolean isOutside =
+                event.getAction() == MotionEvent.ACTION_DOWN && isOutOfBounds(context, event)
+                || event.getAction() == MotionEvent.ACTION_OUTSIDE;
+        if (mCloseOnTouchOutside && peekDecorView() != null && isOutside) {
             return true;
         }
         return false;
diff --git a/core/java/android/view/WindowInfo.java b/core/java/android/view/WindowInfo.java
index 95a6394..bb9e391 100644
--- a/core/java/android/view/WindowInfo.java
+++ b/core/java/android/view/WindowInfo.java
@@ -41,6 +41,7 @@
     public int layer;
     public IBinder token;
     public IBinder parentToken;
+    public IBinder activityToken;
     public boolean focused;
     public final Rect boundsInScreen = new Rect();
     public List<IBinder> childTokens;
@@ -66,6 +67,7 @@
         window.layer = other.layer;
         window.token = other.token;
         window.parentToken = other.parentToken;
+        window.activityToken = other.activityToken;
         window.focused = other.focused;
         window.boundsInScreen.set(other.boundsInScreen);
         window.title = other.title;
@@ -99,6 +101,7 @@
         parcel.writeInt(layer);
         parcel.writeStrongBinder(token);
         parcel.writeStrongBinder(parentToken);
+        parcel.writeStrongBinder(activityToken);
         parcel.writeInt(focused ? 1 : 0);
         boundsInScreen.writeToParcel(parcel, flags);
         parcel.writeCharSequence(title);
@@ -135,6 +138,7 @@
         layer = parcel.readInt();
         token = parcel.readStrongBinder();
         parentToken = parcel.readStrongBinder();
+        activityToken = parcel.readStrongBinder();
         focused = (parcel.readInt() == 1);
         boundsInScreen.readFromParcel(parcel);
         title = parcel.readCharSequence();
@@ -155,6 +159,7 @@
         layer = 0;
         token = null;
         parentToken = null;
+        activityToken = null;
         focused = false;
         boundsInScreen.setEmpty();
         if (childTokens != null) {
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index c7f24bb..86402a7 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -16,6 +16,7 @@
 
 package android.view;
 
+import android.Manifest.permission;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.RequiresPermission;
@@ -955,7 +956,11 @@
          * {@link #FLAG_DISMISS_KEYGUARD} to automatically fully dismisss
          * non-secure keyguards.  This flag only applies to the top-most
          * full-screen window.
+         * @deprecated Use {@link android.R.attr#showWhenLocked} or
+         * {@link android.app.Activity#setShowWhenLocked(boolean)} instead to prevent an
+         * unintentional double life-cycle event.
          */
+        @Deprecated
         public static final int FLAG_SHOW_WHEN_LOCKED = 0x00080000;
 
         /** Window flag: ask that the system wallpaper be shown behind
@@ -980,24 +985,32 @@
         /** Window flag: when set as a window is being added or made
          * visible, once the window has been shown then the system will
          * poke the power manager's user activity (as if the user had woken
-         * up the device) to turn the screen on. */
+         * up the device) to turn the screen on.
+         * @deprecated Use {@link android.R.attr#turnScreenOn} or
+         * {@link android.app.Activity#setTurnScreenOn(boolean)} instead to prevent an
+         * unintentional double life-cycle event.
+         */
+        @Deprecated
         public static final int FLAG_TURN_SCREEN_ON = 0x00200000;
 
-        /** Window flag: when set the window will cause the keyguard to
-         * be dismissed, only if it is not a secure lock keyguard. Because such
-         * a keyguard is not needed for security, it will never re-appear if
-         * the user navigates to another window (in contrast to
-         * {@link #FLAG_SHOW_WHEN_LOCKED}, which will only temporarily
-         * hide both secure and non-secure keyguards but ensure they reappear
-         * when the user moves to another UI that doesn't hide them).
-         * If the keyguard is currently active and is secure (requires an
-         * unlock credential) than the user will still need to confirm it before
-         * seeing this window, unless {@link #FLAG_SHOW_WHEN_LOCKED} has
-         * also been set.
-         * @deprecated Use {@link #FLAG_SHOW_WHEN_LOCKED} or {@link KeyguardManager#dismissKeyguard}
-         * instead. Since keyguard was dismissed all the time as long as an activity with this flag
-         * on its window was focused, keyguard couldn't guard against unintentional touches on the
-         * screen, which isn't desired.
+        /**
+         * Window flag: when set the window will cause the keyguard to be
+         * dismissed, only if it is not a secure lock keyguard. Because such a
+         * keyguard is not needed for security, it will never re-appear if the
+         * user navigates to another window (in contrast to
+         * {@link #FLAG_SHOW_WHEN_LOCKED}, which will only temporarily hide both
+         * secure and non-secure keyguards but ensure they reappear when the
+         * user moves to another UI that doesn't hide them). If the keyguard is
+         * currently active and is secure (requires an unlock credential) than
+         * the user will still need to confirm it before seeing this window,
+         * unless {@link #FLAG_SHOW_WHEN_LOCKED} has also been set.
+         *
+         * @deprecated Use {@link #FLAG_SHOW_WHEN_LOCKED} or
+         *             {@link KeyguardManager#requestDismissKeyguard} instead.
+         *             Since keyguard was dismissed all the time as long as an
+         *             activity with this flag on its window was focused,
+         *             keyguard couldn't guard against unintentional touches on
+         *             the screen, which isn't desired.
          */
         @Deprecated
         public static final int FLAG_DISMISS_KEYGUARD = 0x00400000;
@@ -1400,6 +1413,7 @@
          * this window is visible.
          * @hide
          */
+        @RequiresPermission(android.Manifest.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS)
         public static final int PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS = 0x00080000;
 
         /**
@@ -1411,6 +1425,15 @@
         public static final int PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY = 0x00100000;
 
         /**
+         * If this flag is set on the window, window manager will acquire a sleep token that puts
+         * all activities to sleep as long as this window is visible. When this flag is set, the
+         * window needs to occlude all activity windows.
+         * @hide
+         */
+        @RequiresPermission(permission.DEVICE_POWER)
+        public static final int PRIVATE_FLAG_ACQUIRES_SLEEP_TOKEN = 0x00200000;
+
+        /**
          * Control flags that are private to the platform.
          * @hide
          */
diff --git a/core/java/android/view/WindowManagerInternal.java b/core/java/android/view/WindowManagerInternal.java
index 98f8dc8..97dff6a 100644
--- a/core/java/android/view/WindowManagerInternal.java
+++ b/core/java/android/view/WindowManagerInternal.java
@@ -225,9 +225,6 @@
      */
     public abstract boolean isKeyguardLocked();
 
-    /** @return {@code true} if the keyguard is going away. */
-    public abstract boolean isKeyguardGoingAway();
-
     /**
     * @return Whether the keyguard is showing and not occluded.
     */
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index f09557d..235e61a 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -16,6 +16,7 @@
 
 package android.view;
 
+import static android.Manifest.permission;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
 import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
@@ -485,11 +486,17 @@
 
         /**
          * Returns true if the window owner can add internal system windows.
-         * That is, they have {@link android.Manifest.permission#INTERNAL_SYSTEM_WINDOW}.
+         * That is, they have {@link permission#INTERNAL_SYSTEM_WINDOW}.
          */
         default boolean canAddInternalSystemWindow() {
             return false;
         }
+
+        /**
+         * Returns true if the window owner has the permission to acquire a sleep token when it's
+         * visible. That is, they have the permission {@link permission#DEVICE_POWER}.
+         */
+        boolean canAcquireSleepToken();
     }
 
     /**
@@ -779,7 +786,7 @@
      * @param type The type of window being assigned.
      * @param canAddInternalSystemWindow If the owner window associated with the type we are
      *        evaluating can add internal system windows. I.e they have
-     *        {@link android.Manifest.permission#INTERNAL_SYSTEM_WINDOW}. If true, alert window
+     *        {@link permission#INTERNAL_SYSTEM_WINDOW}. If true, alert window
      *        types {@link android.view.WindowManager.LayoutParams#isSystemAlertWindowType(int)}
      *        can be assigned layers greater than the layer for
      *        {@link android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY} Else, their
diff --git a/core/java/android/view/accessibility/AccessibilityCache.java b/core/java/android/view/accessibility/AccessibilityCache.java
index 604e985..d785117 100644
--- a/core/java/android/view/accessibility/AccessibilityCache.java
+++ b/core/java/android/view/accessibility/AccessibilityCache.java
@@ -40,7 +40,7 @@
 
     private static final boolean DEBUG = false;
 
-    private static final boolean CHECK_INTEGRITY = "eng".equals(Build.TYPE);
+    private static final boolean CHECK_INTEGRITY = Build.IS_ENG;
 
     /**
      * {@link AccessibilityEvent} types that are critical for the cache to stay up to date
@@ -329,8 +329,6 @@
                 final long oldParentId = oldInfo.getParentNodeId();
                 if (info.getParentNodeId() != oldParentId) {
                     clearSubTreeLocked(windowId, oldParentId);
-                } else {
-                    oldInfo.recycle();
                 }
            }
 
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java
index 9dd0fb0..eaa4b4b 100644
--- a/core/java/android/view/accessibility/AccessibilityEvent.java
+++ b/core/java/android/view/accessibility/AccessibilityEvent.java
@@ -620,7 +620,8 @@
     public static final int TYPE_WINDOW_CONTENT_CHANGED = 0x00000800;
 
     /**
-     * Represents the event of scrolling a view.
+     * Represents the event of scrolling a view. This event type is generally not sent directly.
+     * @see View#onScrollChanged(int, int, int, int)
      */
     public static final int TYPE_VIEW_SCROLLED = 0x00001000;
 
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index fecf0c7..2478281e 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -23,9 +23,7 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SdkConstant;
-import android.annotation.SystemApi;
 import android.annotation.SystemService;
-import android.annotation.TestApi;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.PackageManager;
@@ -705,9 +703,7 @@
 
     /**
      * Registers a {@link AccessibilityRequestPreparer}.
-     * @hide
      */
-    @TestApi
     public void addAccessibilityRequestPreparer(AccessibilityRequestPreparer preparer) {
         if (mRequestPreparerLists == null) {
             mRequestPreparerLists = new SparseArray<>(1);
@@ -723,9 +719,7 @@
 
     /**
      * Unregisters a {@link AccessibilityRequestPreparer}.
-     * @hide
      */
-    @TestApi
     public void removeAccessibilityRequestPreparer(AccessibilityRequestPreparer preparer) {
         if (mRequestPreparerLists == null) {
             return;
@@ -1119,9 +1113,7 @@
      *
      * @return {@code true} if the accessibility button is supported on this device,
      * {@code false} otherwise
-     * @hide
      */
-    @SystemApi
     public static boolean isAccessibilityButtonSupported() {
         final Resources res = Resources.getSystem();
         return res.getBoolean(com.android.internal.R.bool.config_showNavigationBar);
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index 82a6de7..53efe18 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -335,7 +335,8 @@
      */
     public static final int ACTION_SET_TEXT = 0x00200000;
 
-    private static final int LAST_LEGACY_STANDARD_ACTION = ACTION_SET_TEXT;
+    /** @hide */
+    public static final int LAST_LEGACY_STANDARD_ACTION = ACTION_SET_TEXT;
 
     /**
      * Mask to see if the value is larger than the largest ACTION_ constant
@@ -1180,7 +1181,7 @@
                     "actions: " + action);
         }
 
-        addLegacyStandardActions(action);
+        addStandardActions(action);
     }
 
     /**
@@ -3193,22 +3194,22 @@
             if (mActions != null && !mActions.isEmpty()) {
                 final int actionCount = mActions.size();
 
-                int nonLegacyActionCount = 0;
-                int defaultLegacyStandardActions = 0;
+                int nonStandardActionCount = 0;
+                int defaultStandardActions = 0;
                 for (int i = 0; i < actionCount; i++) {
                     AccessibilityAction action = mActions.get(i);
-                    if (isDefaultLegacyStandardAction(action)) {
-                        defaultLegacyStandardActions |= action.getId();
+                    if (isDefaultStandardAction(action)) {
+                        defaultStandardActions |= action.mSerializationFlag;
                     } else {
-                        nonLegacyActionCount++;
+                        nonStandardActionCount++;
                     }
                 }
-                parcel.writeInt(defaultLegacyStandardActions);
-                parcel.writeInt(nonLegacyActionCount);
+                parcel.writeInt(defaultStandardActions);
 
+                parcel.writeInt(nonStandardActionCount);
                 for (int i = 0; i < actionCount; i++) {
                     AccessibilityAction action = mActions.get(i);
-                    if (!isDefaultLegacyStandardAction(action)) {
+                    if (!isDefaultStandardAction(action)) {
                         parcel.writeInt(action.getId());
                         parcel.writeCharSequence(action.getLabel());
                     }
@@ -3400,10 +3401,10 @@
         }
 
         if (isBitSet(nonDefaultFields, fieldIndex++)) {
-            final int legacyStandardActions = parcel.readInt();
-            addLegacyStandardActions(legacyStandardActions);
-            final int nonLegacyActionCount = parcel.readInt();
-            for (int i = 0; i < nonLegacyActionCount; i++) {
+            final int standardActions = parcel.readInt();
+            addStandardActions(standardActions);
+            final int nonStandardActionCount = parcel.readInt();
+            for (int i = 0; i < nonStandardActionCount; i++) {
                 final AccessibilityAction action = new AccessibilityAction(
                         parcel.readInt(), parcel.readCharSequence());
                 addActionUnchecked(action);
@@ -3478,9 +3479,8 @@
         init(DEFAULT);
     }
 
-    private static boolean isDefaultLegacyStandardAction(AccessibilityAction action) {
-        return (action.getId() <= LAST_LEGACY_STANDARD_ACTION
-                && TextUtils.isEmpty(action.getLabel()));
+    private static boolean isDefaultStandardAction(AccessibilityAction action) {
+        return action.mSerializationFlag != -1 && TextUtils.isEmpty(action.getLabel());
     }
 
     private static AccessibilityAction getActionSingleton(int actionId) {
@@ -3495,12 +3495,24 @@
         return null;
     }
 
-    private void addLegacyStandardActions(int actionMask) {
-        int remainingIds = actionMask;
+    private static AccessibilityAction getActionSingletonBySerializationFlag(int flag) {
+        final int actions = AccessibilityAction.sStandardActions.size();
+        for (int i = 0; i < actions; i++) {
+            AccessibilityAction currentAction = AccessibilityAction.sStandardActions.valueAt(i);
+            if (flag == currentAction.mSerializationFlag) {
+                return currentAction;
+            }
+        }
+
+        return null;
+    }
+
+    private void addStandardActions(int serializationIdMask) {
+        int remainingIds = serializationIdMask;
         while (remainingIds > 0) {
             final int id = 1 << Integer.numberOfTrailingZeros(remainingIds);
             remainingIds &= ~id;
-            AccessibilityAction action = getActionSingleton(id);
+            AccessibilityAction action = getActionSingletonBySerializationFlag(id);
             addAction(action);
         }
     }
@@ -3749,61 +3761,56 @@
      */
     public static final class AccessibilityAction {
 
+        /** @hide */
+        public static final ArraySet<AccessibilityAction> sStandardActions = new ArraySet<>();
+
         /**
          * Action that gives input focus to the node.
          */
         public static final AccessibilityAction ACTION_FOCUS =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_FOCUS, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_FOCUS);
 
         /**
          * Action that clears input focus of the node.
          */
         public static final AccessibilityAction ACTION_CLEAR_FOCUS =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_CLEAR_FOCUS, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_CLEAR_FOCUS);
 
         /**
          *  Action that selects the node.
          */
         public static final AccessibilityAction ACTION_SELECT =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_SELECT, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_SELECT);
 
         /**
          * Action that deselects the node.
          */
         public static final AccessibilityAction ACTION_CLEAR_SELECTION =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_CLEAR_SELECTION, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_CLEAR_SELECTION);
 
         /**
          * Action that clicks on the node info.
          */
         public static final AccessibilityAction ACTION_CLICK =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_CLICK, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_CLICK);
 
         /**
          * Action that long clicks on the node.
          */
         public static final AccessibilityAction ACTION_LONG_CLICK =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_LONG_CLICK, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_LONG_CLICK);
 
         /**
          * Action that gives accessibility focus to the node.
          */
         public static final AccessibilityAction ACTION_ACCESSIBILITY_FOCUS =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS);
 
         /**
          * Action that clears accessibility focus of the node.
          */
         public static final AccessibilityAction ACTION_CLEAR_ACCESSIBILITY_FOCUS =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS);
 
         /**
          * Action that requests to go to the next entity in this node's text
@@ -3849,8 +3856,7 @@
          *  AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PAGE
          */
         public static final AccessibilityAction ACTION_NEXT_AT_MOVEMENT_GRANULARITY =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY);
 
         /**
          * Action that requests to go to the previous entity in this node's text
@@ -3897,7 +3903,7 @@
          */
         public static final AccessibilityAction ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY =
                 new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY, null);
+                        AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY);
 
         /**
          * Action to move to the next HTML element of a given type. For example, move
@@ -3915,8 +3921,7 @@
          * </p>
          */
         public static final AccessibilityAction ACTION_NEXT_HTML_ELEMENT =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_NEXT_HTML_ELEMENT, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_NEXT_HTML_ELEMENT);
 
         /**
          * Action to move to the previous HTML element of a given type. For example, move
@@ -3934,43 +3939,37 @@
          * </p>
          */
         public static final AccessibilityAction ACTION_PREVIOUS_HTML_ELEMENT =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_PREVIOUS_HTML_ELEMENT, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_PREVIOUS_HTML_ELEMENT);
 
         /**
          * Action to scroll the node content forward.
          */
         public static final AccessibilityAction ACTION_SCROLL_FORWARD =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_SCROLL_FORWARD, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
 
         /**
          * Action to scroll the node content backward.
          */
         public static final AccessibilityAction ACTION_SCROLL_BACKWARD =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
 
         /**
          * Action to copy the current selection to the clipboard.
          */
         public static final AccessibilityAction ACTION_COPY =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_COPY, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_COPY);
 
         /**
          * Action to paste the current clipboard content.
          */
         public static final AccessibilityAction ACTION_PASTE =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_PASTE, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_PASTE);
 
         /**
          * Action to cut the current selection and place it to the clipboard.
          */
         public static final AccessibilityAction ACTION_CUT =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_CUT, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_CUT);
 
         /**
          * Action to set the selection. Performing this action with no arguments
@@ -3996,29 +3995,25 @@
          *  AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_END_INT
          */
         public static final AccessibilityAction ACTION_SET_SELECTION =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_SET_SELECTION, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_SET_SELECTION);
 
         /**
          * Action to expand an expandable node.
          */
         public static final AccessibilityAction ACTION_EXPAND =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_EXPAND, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_EXPAND);
 
         /**
          * Action to collapse an expandable node.
          */
         public static final AccessibilityAction ACTION_COLLAPSE =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_COLLAPSE, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_COLLAPSE);
 
         /**
          * Action to dismiss a dismissable node.
          */
         public static final AccessibilityAction ACTION_DISMISS =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_DISMISS, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_DISMISS);
 
         /**
          * Action that sets the text of the node. Performing the action without argument,
@@ -4037,8 +4032,7 @@
          * </code></pre></p>
          */
         public static final AccessibilityAction ACTION_SET_TEXT =
-                new AccessibilityAction(
-                        AccessibilityNodeInfo.ACTION_SET_TEXT, null);
+                new AccessibilityAction(AccessibilityNodeInfo.ACTION_SET_TEXT);
 
         /**
          * Action that requests the node make its bounding rectangle visible
@@ -4047,7 +4041,7 @@
          * @see View#requestRectangleOnScreen(Rect)
          */
         public static final AccessibilityAction ACTION_SHOW_ON_SCREEN =
-                new AccessibilityAction(R.id.accessibilityActionShowOnScreen, null);
+                new AccessibilityAction(R.id.accessibilityActionShowOnScreen);
 
         /**
          * Action that scrolls the node to make the specified collection
@@ -4062,37 +4056,37 @@
          * @see AccessibilityNodeInfo#getCollectionInfo()
          */
         public static final AccessibilityAction ACTION_SCROLL_TO_POSITION =
-                new AccessibilityAction(R.id.accessibilityActionScrollToPosition, null);
+                new AccessibilityAction(R.id.accessibilityActionScrollToPosition);
 
         /**
          * Action to scroll the node content up.
          */
         public static final AccessibilityAction ACTION_SCROLL_UP =
-                new AccessibilityAction(R.id.accessibilityActionScrollUp, null);
+                new AccessibilityAction(R.id.accessibilityActionScrollUp);
 
         /**
          * Action to scroll the node content left.
          */
         public static final AccessibilityAction ACTION_SCROLL_LEFT =
-                new AccessibilityAction(R.id.accessibilityActionScrollLeft, null);
+                new AccessibilityAction(R.id.accessibilityActionScrollLeft);
 
         /**
          * Action to scroll the node content down.
          */
         public static final AccessibilityAction ACTION_SCROLL_DOWN =
-                new AccessibilityAction(R.id.accessibilityActionScrollDown, null);
+                new AccessibilityAction(R.id.accessibilityActionScrollDown);
 
         /**
          * Action to scroll the node content right.
          */
         public static final AccessibilityAction ACTION_SCROLL_RIGHT =
-                new AccessibilityAction(R.id.accessibilityActionScrollRight, null);
+                new AccessibilityAction(R.id.accessibilityActionScrollRight);
 
         /**
          * Action that context clicks the node.
          */
         public static final AccessibilityAction ACTION_CONTEXT_CLICK =
-                new AccessibilityAction(R.id.accessibilityActionContextClick, null);
+                new AccessibilityAction(R.id.accessibilityActionContextClick);
 
         /**
          * Action that sets progress between {@link  RangeInfo#getMin() RangeInfo.getMin()} and
@@ -4105,7 +4099,7 @@
          * @see RangeInfo
          */
         public static final AccessibilityAction ACTION_SET_PROGRESS =
-                new AccessibilityAction(R.id.accessibilityActionSetProgress, null);
+                new AccessibilityAction(R.id.accessibilityActionSetProgress);
 
         /**
          * Action to move a window to a new location.
@@ -4115,45 +4109,14 @@
          * {@link AccessibilityNodeInfo#ACTION_ARGUMENT_MOVE_WINDOW_Y}
          */
         public static final AccessibilityAction ACTION_MOVE_WINDOW =
-                new AccessibilityAction(R.id.accessibilityActionMoveWindow, null);
-
-        private static final ArraySet<AccessibilityAction> sStandardActions = new ArraySet<>();
-        static {
-            sStandardActions.add(ACTION_FOCUS);
-            sStandardActions.add(ACTION_CLEAR_FOCUS);
-            sStandardActions.add(ACTION_SELECT);
-            sStandardActions.add(ACTION_CLEAR_SELECTION);
-            sStandardActions.add(ACTION_CLICK);
-            sStandardActions.add(ACTION_LONG_CLICK);
-            sStandardActions.add(ACTION_ACCESSIBILITY_FOCUS);
-            sStandardActions.add(ACTION_CLEAR_ACCESSIBILITY_FOCUS);
-            sStandardActions.add(ACTION_NEXT_AT_MOVEMENT_GRANULARITY);
-            sStandardActions.add(ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY);
-            sStandardActions.add(ACTION_NEXT_HTML_ELEMENT);
-            sStandardActions.add(ACTION_PREVIOUS_HTML_ELEMENT);
-            sStandardActions.add(ACTION_SCROLL_FORWARD);
-            sStandardActions.add(ACTION_SCROLL_BACKWARD);
-            sStandardActions.add(ACTION_COPY);
-            sStandardActions.add(ACTION_PASTE);
-            sStandardActions.add(ACTION_CUT);
-            sStandardActions.add(ACTION_SET_SELECTION);
-            sStandardActions.add(ACTION_EXPAND);
-            sStandardActions.add(ACTION_COLLAPSE);
-            sStandardActions.add(ACTION_DISMISS);
-            sStandardActions.add(ACTION_SET_TEXT);
-            sStandardActions.add(ACTION_SHOW_ON_SCREEN);
-            sStandardActions.add(ACTION_SCROLL_TO_POSITION);
-            sStandardActions.add(ACTION_SCROLL_UP);
-            sStandardActions.add(ACTION_SCROLL_LEFT);
-            sStandardActions.add(ACTION_SCROLL_DOWN);
-            sStandardActions.add(ACTION_SCROLL_RIGHT);
-            sStandardActions.add(ACTION_SET_PROGRESS);
-            sStandardActions.add(ACTION_CONTEXT_CLICK);
-        }
+                new AccessibilityAction(R.id.accessibilityActionMoveWindow);
 
         private final int mActionId;
         private final CharSequence mLabel;
 
+        /** @hide */
+        public int mSerializationFlag = -1;
+
         /**
          * Creates a new AccessibilityAction. For adding a standard action without a specific label,
          * use the static constants.
@@ -4181,6 +4144,16 @@
         }
 
         /**
+         * Constructor for a {@link #sStandardActions standard} action
+         */
+        private AccessibilityAction(int standardActionId) {
+            this(standardActionId, null);
+
+            mSerializationFlag = (int) bitAt(sStandardActions.size());
+            sStandardActions.add(this);
+        }
+
+        /**
          * Gets the id for this action.
          *
          * @return The action id.
diff --git a/core/java/android/view/accessibility/AccessibilityRequestPreparer.java b/core/java/android/view/accessibility/AccessibilityRequestPreparer.java
index c032390..889feb9 100644
--- a/core/java/android/view/accessibility/AccessibilityRequestPreparer.java
+++ b/core/java/android/view/accessibility/AccessibilityRequestPreparer.java
@@ -18,7 +18,6 @@
 
 import android.annotation.IntDef;
 import android.annotation.Nullable;
-import android.annotation.TestApi;
 import android.content.Context;
 import android.os.Bundle;
 import android.os.Message;
@@ -40,9 +39,7 @@
  * <p>
  * <strong>Note:</strong> This class should only be needed in exceptional situations where a
  * {@link View} cannot otherwise synchronously meet the request for accessibility data.
- * @hide
  */
-@TestApi
 public abstract class AccessibilityRequestPreparer {
     public static final int REQUEST_TYPE_EXTRA_DATA = 0x00000001;
 
diff --git a/core/java/android/view/autofill/AutofillId.java b/core/java/android/view/autofill/AutofillId.java
index 1cee529..5ce2421 100644
--- a/core/java/android/view/autofill/AutofillId.java
+++ b/core/java/android/view/autofill/AutofillId.java
@@ -15,6 +15,7 @@
  */
 package android.view.autofill;
 
+import android.annotation.TestApi;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.view.View;
@@ -29,6 +30,7 @@
     private final int mVirtualId;
 
     /** @hide */
+    @TestApi
     public AutofillId(int id) {
         mVirtual = false;
         mViewId = id;
diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java
index f2d2d5b..aa4bbb2 100644
--- a/core/java/android/view/autofill/AutofillManager.java
+++ b/core/java/android/view/autofill/AutofillManager.java
@@ -24,7 +24,6 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemService;
-import android.app.Activity;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -32,6 +31,7 @@
 import android.graphics.Rect;
 import android.metrics.LogMaker;
 import android.os.Bundle;
+import android.os.IBinder;
 import android.os.Parcelable;
 import android.os.RemoteException;
 import android.service.autofill.AutofillService;
@@ -44,9 +44,10 @@
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.util.Preconditions;
 
+import java.io.PrintWriter;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.ref.WeakReference;
@@ -157,8 +158,15 @@
     public static final String EXTRA_CLIENT_STATE =
             "android.view.autofill.extra.CLIENT_STATE";
 
-    static final String SESSION_ID_TAG = "android:sessionId";
-    static final String LAST_AUTOFILLED_DATA_TAG = "android:lastAutoFilledData";
+
+    /** @hide */
+    public static final String EXTRA_RESTORE_SESSION_TOKEN =
+            "android.view.autofill.extra.RESTORE_SESSION_TOKEN";
+
+    private static final String SESSION_ID_TAG = "android:sessionId";
+    private static final String STATE_TAG = "android:state";
+    private static final String LAST_AUTOFILLED_DATA_TAG = "android:lastAutoFilledData";
+
 
     /** @hide */ public static final int ACTION_START_SESSION = 1;
     /** @hide */ public static final int ACTION_VIEW_ENTERED =  2;
@@ -178,6 +186,58 @@
     public static final int AUTHENTICATION_ID_DATASET_ID_UNDEFINED = 0xFFFF;
 
     /**
+     * Used on {@link #onPendingSaveUi(int, IBinder)} to cancel the pending UI.
+     *
+     * @hide
+     */
+    public static final int PENDING_UI_OPERATION_CANCEL = 1;
+
+    /**
+     * Used on {@link #onPendingSaveUi(int, IBinder)} to restore the pending UI.
+     *
+     * @hide
+     */
+    public static final int PENDING_UI_OPERATION_RESTORE = 2;
+
+    /**
+     * Initial state of the autofill context, set when there is no session (i.e., when
+     * {@link #mSessionId} is {@link #NO_SESSION}).
+     *
+     * <p>In this state, app callbacks (such as {@link #notifyViewEntered(View)}) are notified to
+     * the server.
+     *
+     * @hide
+     */
+    public static final int STATE_UNKNOWN = 0;
+
+    /**
+     * State where the autofill context hasn't been {@link #commit() finished} nor
+     * {@link #cancel() canceled} yet.
+     *
+     * @hide
+     */
+    public static final int STATE_ACTIVE = 1;
+
+    /**
+     * State where the autofill context was finished by the server because the autofill
+     * service could not autofill the page.
+     *
+     * <p>In this state, most apps callback (such as {@link #notifyViewEntered(View)}) are ignored,
+     * exception {@link #requestAutofill(View)} (and {@link #requestAutofill(View, int, Rect)}).
+     *
+     * @hide
+     */
+    public static final int STATE_FINISHED = 2;
+
+    /**
+     * State where the autofill context has been {@link #commit() finished} but the server still has
+     * a session because the Save UI hasn't been dismissed yet.
+     *
+     * @hide
+     */
+    public static final int STATE_SHOWING_SAVE_UI = 3;
+
+    /**
      * Makes an authentication id from a request id and a dataset id.
      *
      * @param requestId The request id.
@@ -236,6 +296,9 @@
     private int mSessionId = NO_SESSION;
 
     @GuardedBy("mLock")
+    private int mState = STATE_UNKNOWN;
+
+    @GuardedBy("mLock")
     private boolean mEnabled;
 
     /** If a view changes to this mapping the autofill operation was successful */
@@ -323,6 +386,13 @@
          * Runs the specified action on the UI thread.
          */
         void runOnUiThread(Runnable action);
+
+        /**
+         * Gets the complete component name of this client.
+         *
+         * <p>Temporary method on O-MR1 only.
+         */
+        ComponentName getComponentNameForAutofill();
     }
 
     /**
@@ -347,12 +417,13 @@
         synchronized (mLock) {
             mLastAutofilledData = savedInstanceState.getParcelable(LAST_AUTOFILLED_DATA_TAG);
 
-            if (mSessionId != NO_SESSION) {
+            if (isActiveLocked()) {
                 Log.w(TAG, "New session was started before onCreate()");
                 return;
             }
 
             mSessionId = savedInstanceState.getInt(SESSION_ID_TAG, NO_SESSION);
+            mState = savedInstanceState.getInt(STATE_TAG, STATE_UNKNOWN);
 
             if (mSessionId != NO_SESSION) {
                 ensureServiceClientAddedIfNeededLocked();
@@ -366,6 +437,7 @@
                         if (!sessionWasRestored) {
                             Log.w(TAG, "Session " + mSessionId + " could not be restored");
                             mSessionId = NO_SESSION;
+                            mState = STATE_UNKNOWN;
                         } else {
                             if (sDebug) {
                                 Log.d(TAG, "session " + mSessionId + " was restored");
@@ -390,7 +462,7 @@
      */
     public void onVisibleForAutofill() {
         synchronized (mLock) {
-            if (mEnabled && mSessionId != NO_SESSION && mTrackedViews != null) {
+            if (mEnabled && isActiveLocked() && mTrackedViews != null) {
                 mTrackedViews.onVisibleForAutofillLocked();
             }
         }
@@ -411,7 +483,9 @@
             if (mSessionId != NO_SESSION) {
                 outState.putInt(SESSION_ID_TAG, mSessionId);
             }
-
+            if (mState != STATE_UNKNOWN) {
+                outState.putInt(STATE_TAG, mState);
+            }
             if (mLastAutofilledData != null) {
                 outState.putParcelable(LAST_AUTOFILLED_DATA_TAG, mLastAutofilledData);
             }
@@ -507,6 +581,14 @@
         }
         AutofillCallback callback = null;
         synchronized (mLock) {
+            if (isFinishedLocked() && (flags & FLAG_MANUAL_REQUEST) == 0) {
+                if (sVerbose) {
+                    Log.v(TAG, "notifyViewEntered(flags=" + flags + ", view=" + view
+                            + "): ignored on state " + getStateAsStringLocked());
+                }
+                return;
+            }
+
             ensureServiceClientAddedIfNeededLocked();
 
             if (!mEnabled) {
@@ -517,7 +599,7 @@
                 final AutofillId id = getAutofillId(view);
                 final AutofillValue value = view.getAutofillValue();
 
-                if (mSessionId == NO_SESSION) {
+                if (!isActiveLocked()) {
                     // Starts new session.
                     startSessionLocked(id, null, value, flags);
                 } else {
@@ -544,7 +626,7 @@
         synchronized (mLock) {
             ensureServiceClientAddedIfNeededLocked();
 
-            if (mEnabled && mSessionId != NO_SESSION) {
+            if (mEnabled && isActiveLocked()) {
                 final AutofillId id = getAutofillId(view);
 
                 // Update focus on existing session.
@@ -554,25 +636,48 @@
     }
 
     /**
-     * Called when a {@link View view's} visibility changes.
+     * Called when a {@link View view's} visibility changed.
      *
      * @param view {@link View} that was exited.
      * @param isVisible visible if the view is visible in the view hierarchy.
-     *
-     * @hide
      */
-    public void notifyViewVisibilityChange(@NonNull View view, boolean isVisible) {
+    public void notifyViewVisibilityChanged(@NonNull View view, boolean isVisible) {
+        notifyViewVisibilityChangedInternal(view, 0, isVisible, false);
+    }
+
+    /**
+     * Called when a virtual view's visibility changed.
+     *
+     * @param view {@link View} that was exited.
+     * @param virtualId id identifying the virtual child inside the parent view.
+     * @param isVisible visible if the view is visible in the view hierarchy.
+     */
+    public void notifyViewVisibilityChanged(@NonNull View view, int virtualId, boolean isVisible) {
+        notifyViewVisibilityChangedInternal(view, virtualId, isVisible, true);
+    }
+
+    /**
+     * Called when a view/virtual view's visibility changed.
+     *
+     * @param view {@link View} that was exited.
+     * @param virtualId id identifying the virtual child inside the parent view.
+     * @param isVisible visible if the view is visible in the view hierarchy.
+     * @param virtual Whether the view is virtual.
+     */
+    private void notifyViewVisibilityChangedInternal(@NonNull View view, int virtualId,
+            boolean isVisible, boolean virtual) {
         synchronized (mLock) {
-            if (mEnabled && mSessionId != NO_SESSION) {
+            if (mEnabled && isActiveLocked()) {
+                final AutofillId id = virtual ? getAutofillId(view, virtualId)
+                        : view.getAutofillId();
                 if (!isVisible && mFillableIds != null) {
-                    final AutofillId id = view.getAutofillId();
                     if (mFillableIds.contains(id)) {
                         if (sDebug) Log.d(TAG, "Hidding UI when view " + id + " became invisible");
                         requestHideFillUi(id, view);
                     }
                 }
                 if (mTrackedViews != null) {
-                    mTrackedViews.notifyViewVisibilityChange(view, isVisible);
+                    mTrackedViews.notifyViewVisibilityChanged(id, isVisible);
                 }
             }
         }
@@ -607,6 +712,14 @@
         }
         AutofillCallback callback = null;
         synchronized (mLock) {
+            if (isFinishedLocked() && (flags & FLAG_MANUAL_REQUEST) == 0) {
+                if (sVerbose) {
+                    Log.v(TAG, "notifyViewEntered(flags=" + flags + ", view=" + view
+                            + ", virtualId=" + virtualId
+                            + "): ignored on state " + getStateAsStringLocked());
+                }
+                return;
+            }
             ensureServiceClientAddedIfNeededLocked();
 
             if (!mEnabled) {
@@ -616,7 +729,7 @@
             } else {
                 final AutofillId id = getAutofillId(view, virtualId);
 
-                if (mSessionId == NO_SESSION) {
+                if (!isActiveLocked()) {
                     // Starts new session.
                     startSessionLocked(id, bounds, null, flags);
                 } else {
@@ -645,7 +758,7 @@
         synchronized (mLock) {
             ensureServiceClientAddedIfNeededLocked();
 
-            if (mEnabled && mSessionId != NO_SESSION) {
+            if (mEnabled && isActiveLocked()) {
                 final AutofillId id = getAutofillId(view, virtualId);
 
                 // Update focus on existing session.
@@ -689,7 +802,11 @@
                 }
             }
 
-            if (!mEnabled || mSessionId == NO_SESSION) {
+            if (!mEnabled || !isActiveLocked()) {
+                if (sVerbose && mEnabled) {
+                    Log.v(TAG, "notifyValueChanged(" + view + "): ignoring on state "
+                            + getStateAsStringLocked());
+                }
                 return;
             }
 
@@ -717,7 +834,7 @@
             return;
         }
         synchronized (mLock) {
-            if (!mEnabled || mSessionId == NO_SESSION) {
+            if (!mEnabled || !isActiveLocked()) {
                 return;
             }
 
@@ -742,7 +859,7 @@
             return;
         }
         synchronized (mLock) {
-            if (!mEnabled && mSessionId == NO_SESSION) {
+            if (!mEnabled && !isActiveLocked()) {
                 return;
             }
 
@@ -766,7 +883,7 @@
             return;
         }
         synchronized (mLock) {
-            if (!mEnabled && mSessionId == NO_SESSION) {
+            if (!mEnabled && !isActiveLocked()) {
                 return;
             }
 
@@ -829,17 +946,11 @@
     }
 
     private AutofillClient getClientLocked() {
-        if (mContext instanceof AutofillClient) {
-            return (AutofillClient) mContext;
-        }
-        return null;
+        return mContext.getAutofillClient();
     }
 
-    private ComponentName getComponentNameFromContext() {
-        if (mContext instanceof Activity) {
-            return ((Activity) mContext).getComponentName();
-        }
-        return null;
+    private ComponentName getComponentNameFromContext(AutofillClient client) {
+        return client == null ? null : client.getComponentNameForAutofill();
     }
 
     /** @hide */
@@ -855,7 +966,7 @@
         if (sDebug) Log.d(TAG, "onAuthenticationResult(): d=" + data);
 
         synchronized (mLock) {
-            if (mSessionId == NO_SESSION || data == null) {
+            if (!isActiveLocked() || data == null) {
                 return;
             }
             final Parcelable result = data.getParcelableExtra(EXTRA_AUTHENTICATION_RESULT);
@@ -882,11 +993,18 @@
             @NonNull AutofillValue value, int flags) {
         if (sVerbose) {
             Log.v(TAG, "startSessionLocked(): id=" + id + ", bounds=" + bounds + ", value=" + value
-                    + ", flags=" + flags);
+                    + ", flags=" + flags + ", state=" + getStateAsStringLocked());
         }
-
+        if (mState != STATE_UNKNOWN && (flags & FLAG_MANUAL_REQUEST) == 0) {
+            if (sVerbose) {
+                Log.v(TAG, "not automatically starting session for " + id
+                        + " on state " + getStateAsStringLocked());
+            }
+            return;
+        }
         try {
-            final ComponentName componentName = getComponentNameFromContext();
+            final AutofillClient client = getClientLocked();
+            final ComponentName componentName = getComponentNameFromContext(client);
             if (componentName == null) {
                 Log.w(TAG, "startSessionLocked(): context is not activity: " + mContext);
                 return;
@@ -894,7 +1012,9 @@
             mSessionId = mService.startSession(mContext.getActivityToken(),
                     mServiceClient.asBinder(), id, bounds, value, mContext.getUserId(),
                     mCallback != null, flags, componentName);
-            final AutofillClient client = getClientLocked();
+            if (mSessionId != NO_SESSION) {
+                mState = STATE_ACTIVE;
+            }
             if (client != null) {
                 client.autofillCallbackResetableStateAvailable();
             }
@@ -904,7 +1024,9 @@
     }
 
     private void finishSessionLocked() {
-        if (sVerbose) Log.v(TAG, "finishSessionLocked()");
+        if (sVerbose) Log.v(TAG, "finishSessionLocked(): " + getStateAsStringLocked());
+
+        if (!isActiveLocked()) return;
 
         try {
             mService.finishSession(mSessionId, mContext.getUserId());
@@ -912,12 +1034,13 @@
             throw e.rethrowFromSystemServer();
         }
 
-        mTrackedViews = null;
-        mSessionId = NO_SESSION;
+        resetSessionLocked();
     }
 
     private void cancelSessionLocked() {
-        if (sVerbose) Log.v(TAG, "cancelSessionLocked()");
+        if (sVerbose) Log.v(TAG, "cancelSessionLocked(): " + getStateAsStringLocked());
+
+        if (!isActiveLocked()) return;
 
         try {
             mService.cancelSession(mSessionId, mContext.getUserId());
@@ -930,7 +1053,9 @@
 
     private void resetSessionLocked() {
         mSessionId = NO_SESSION;
+        mState = STATE_UNKNOWN;
         mTrackedViews = null;
+        mFillableIds = null;
     }
 
     private void updateSessionLocked(AutofillId id, Rect bounds, AutofillValue value, int action,
@@ -939,12 +1064,12 @@
             Log.v(TAG, "updateSessionLocked(): id=" + id + ", bounds=" + bounds
                     + ", value=" + value + ", action=" + action + ", flags=" + flags);
         }
-
         boolean restartIfNecessary = (flags & FLAG_MANUAL_REQUEST) != 0;
 
         try {
             if (restartIfNecessary) {
-                final ComponentName componentName = getComponentNameFromContext();
+                final AutofillClient client = getClientLocked();
+                final ComponentName componentName = getComponentNameFromContext(client);
                 if (componentName == null) {
                     Log.w(TAG, "startSessionLocked(): context is not activity: " + mContext);
                     return;
@@ -955,7 +1080,7 @@
                 if (newId != mSessionId) {
                     if (sDebug) Log.d(TAG, "Session restarted: " + mSessionId + "=>" + newId);
                     mSessionId = newId;
-                    final AutofillClient client = getClientLocked();
+                    mState = (mSessionId == NO_SESSION) ? STATE_UNKNOWN : STATE_ACTIVE;
                     if (client != null) {
                         client.autofillCallbackResetableStateAvailable();
                     }
@@ -1176,10 +1301,10 @@
                 }
             }
 
-            final LogMaker log = new LogMaker(MetricsProto.MetricsEvent.AUTOFILL_DATASET_APPLIED);
-            log.addTaggedData(MetricsProto.MetricsEvent.FIELD_AUTOFILL_NUM_VALUES, itemCount);
-            log.addTaggedData(MetricsProto.MetricsEvent.FIELD_AUTOFILL_NUM_VIEWS_FILLED,
-                    numApplied);
+            final LogMaker log = new LogMaker(MetricsEvent.AUTOFILL_DATASET_APPLIED)
+                    .setPackageName(mContext.getPackageName())
+                    .addTaggedData(MetricsEvent.FIELD_AUTOFILL_NUM_VALUES, itemCount)
+                    .addTaggedData(MetricsEvent.FIELD_AUTOFILL_NUM_VIEWS_FILLED, numApplied);
             mMetricsLogger.write(log);
         }
     }
@@ -1216,6 +1341,41 @@
         }
     }
 
+    private void setSaveUiState(int sessionId, boolean shown) {
+        if (sDebug) Log.d(TAG, "setSaveUiState(" + sessionId + "): " + shown);
+        synchronized (mLock) {
+            if (mSessionId != NO_SESSION) {
+                // Race condition: app triggered a new session after the previous session was
+                // finished but before server called setSaveUiState() - need to cancel the new
+                // session to avoid further inconsistent behavior.
+                Log.w(TAG, "setSaveUiState(" + sessionId + ", " + shown
+                        + ") called on existing session " + mSessionId + "; cancelling it");
+                cancelSessionLocked();
+            }
+            if (shown) {
+                mSessionId = sessionId;
+                mState = STATE_SHOWING_SAVE_UI;
+            } else {
+                mSessionId = NO_SESSION;
+                mState = STATE_UNKNOWN;
+            }
+        }
+    }
+
+    /**
+     * Marks the state of the session as finished.
+     *
+     * @param newState {@link #STATE_FINISHED} (because the autofill service returned a {@code null}
+     *  FillResponse) or {@link #STATE_UNKNOWN} (because the session was removed).
+     */
+    private void setSessionFinished(int newState) {
+        synchronized (mLock) {
+            if (sVerbose) Log.v(TAG, "setSessionFinished(): from " + mState + " to " + newState);
+            resetSessionLocked();
+            mState = newState;
+        }
+    }
+
     private void requestHideFillUi(AutofillId id) {
         final View anchor = findView(id);
         if (sVerbose) Log.v(TAG, "requestHideFillUi(" + id + "): anchor = " + anchor);
@@ -1251,7 +1411,11 @@
         }
     }
 
-    private void notifyNoFillUi(int sessionId, AutofillId id) {
+    private void notifyNoFillUi(int sessionId, AutofillId id, boolean sessionFinished) {
+        if (sVerbose) {
+            Log.v(TAG, "notifyNoFillUi(): sessionId=" + sessionId + ", autofillId=" + id
+                    + ", finished=" + sessionFinished);
+        }
         final View anchor = findView(id);
         if (anchor == null) {
             return;
@@ -1271,7 +1435,11 @@
             } else {
                 callback.onAutofillEvent(anchor, AutofillCallback.EVENT_INPUT_UNAVAILABLE);
             }
+        }
 
+        if (sessionFinished) {
+            // Callback call was "hijacked" to also update the session state.
+            setSessionFinished(STATE_FINISHED);
         }
     }
 
@@ -1326,6 +1494,64 @@
         return mService != null;
     }
 
+    /** @hide */
+    public void onPendingSaveUi(int operation, IBinder token) {
+        if (sVerbose) Log.v(TAG, "onPendingSaveUi(" + operation + "): " + token);
+
+        synchronized (mLock) {
+            try {
+                mService.onPendingSaveUi(operation, token);
+            } catch (RemoteException e) {
+                e.rethrowFromSystemServer();
+            }
+        }
+    }
+
+    /** @hide */
+    public void dump(String outerPrefix, PrintWriter pw) {
+        pw.print(outerPrefix); pw.println("AutofillManager:");
+        final String pfx = outerPrefix + "  ";
+        pw.print(pfx); pw.print("sessionId: "); pw.println(mSessionId);
+        pw.print(pfx); pw.print("state: "); pw.println(getStateAsStringLocked());
+        pw.print(pfx); pw.print("enabled: "); pw.println(mEnabled);
+        pw.print(pfx); pw.print("hasService: "); pw.println(mService != null);
+        pw.print(pfx); pw.print("hasCallback: "); pw.println(mCallback != null);
+        pw.print(pfx); pw.print("last autofilled data: "); pw.println(mLastAutofilledData);
+        pw.print(pfx); pw.print("tracked views: ");
+        if (mTrackedViews == null) {
+            pw.println("null");
+        } else {
+            final String pfx2 = pfx + "  ";
+            pw.println();
+            pw.print(pfx2); pw.print("visible:"); pw.println(mTrackedViews.mVisibleTrackedIds);
+            pw.print(pfx2); pw.print("invisible:"); pw.println(mTrackedViews.mInvisibleTrackedIds);
+        }
+        pw.print(pfx); pw.print("fillable ids: "); pw.println(mFillableIds);
+    }
+
+    private String getStateAsStringLocked() {
+        switch (mState) {
+            case STATE_UNKNOWN:
+                return "STATE_UNKNOWN";
+            case STATE_ACTIVE:
+                return "STATE_ACTIVE";
+            case STATE_FINISHED:
+                return "STATE_FINISHED";
+            case STATE_SHOWING_SAVE_UI:
+                return "STATE_SHOWING_SAVE_UI";
+            default:
+                return "INVALID:" + mState;
+        }
+    }
+
+    private boolean isActiveLocked() {
+        return mState == STATE_ACTIVE;
+    }
+
+    private boolean isFinishedLocked() {
+        return mState == STATE_FINISHED;
+    }
+
     private void post(Runnable runnable) {
         final AutofillClient client = getClientLocked();
         if (client == null) {
@@ -1447,15 +1673,14 @@
         /**
          * Called when a {@link View view's} visibility changes.
          *
-         * @param view {@link View} that was exited.
+         * @param id the id of the view/virtual view whose visibility changed.
          * @param isVisible visible if the view is visible in the view hierarchy.
          */
-        void notifyViewVisibilityChange(@NonNull View view, boolean isVisible) {
-            AutofillId id = getAutofillId(view);
+        void notifyViewVisibilityChanged(@NonNull AutofillId id, boolean isVisible) {
             AutofillClient client = getClientLocked();
 
             if (sDebug) {
-                Log.d(TAG, "notifyViewVisibilityChange(): id=" + id + " isVisible="
+                Log.d(TAG, "notifyViewVisibilityChanged(): id=" + id + " isVisible="
                         + isVisible);
             }
 
@@ -1555,7 +1780,7 @@
     public abstract static class AutofillCallback {
 
         /** @hide */
-        @IntDef({EVENT_INPUT_SHOWN, EVENT_INPUT_HIDDEN})
+        @IntDef({EVENT_INPUT_SHOWN, EVENT_INPUT_HIDDEN, EVENT_INPUT_UNAVAILABLE})
         @Retention(RetentionPolicy.SOURCE)
         public @interface AutofillEventType {}
 
@@ -1658,20 +1883,20 @@
         }
 
         @Override
-        public void notifyNoFillUi(int sessionId, AutofillId id) {
+        public void notifyNoFillUi(int sessionId, AutofillId id, boolean sessionFinished) {
             final AutofillManager afm = mAfm.get();
             if (afm != null) {
-                afm.post(() -> afm.notifyNoFillUi(sessionId, id));
+                afm.post(() -> afm.notifyNoFillUi(sessionId, id, sessionFinished));
             }
         }
 
         @Override
-        public void startIntentSender(IntentSender intentSender) {
+        public void startIntentSender(IntentSender intentSender, Intent intent) {
             final AutofillManager afm = mAfm.get();
             if (afm != null) {
                 afm.post(() -> {
                     try {
-                        afm.mContext.startIntentSender(intentSender, null, 0, 0, 0);
+                        afm.mContext.startIntentSender(intentSender, intent, 0, 0, 0);
                     } catch (IntentSender.SendIntentException e) {
                         Log.e(TAG, "startIntentSender() failed for intent:" + intentSender, e);
                     }
@@ -1689,5 +1914,21 @@
                 );
             }
         }
+
+        @Override
+        public void setSaveUiState(int sessionId, boolean shown) {
+            final AutofillManager afm = mAfm.get();
+            if (afm != null) {
+                afm.post(() -> afm.setSaveUiState(sessionId, shown));
+            }
+        }
+
+        @Override
+        public void setSessionFinished(int newState) {
+            final AutofillManager afm = mAfm.get();
+            if (afm != null) {
+                afm.post(() -> afm.setSessionFinished(newState));
+            }
+        }
     }
 }
diff --git a/core/java/android/view/autofill/AutofillPopupWindow.java b/core/java/android/view/autofill/AutofillPopupWindow.java
index 5f47638..b4688bb 100644
--- a/core/java/android/view/autofill/AutofillPopupWindow.java
+++ b/core/java/android/view/autofill/AutofillPopupWindow.java
@@ -47,6 +47,19 @@
     private final WindowPresenter mWindowPresenter;
     private WindowManager.LayoutParams mWindowLayoutParams;
 
+    private final View.OnAttachStateChangeListener mOnAttachStateChangeListener =
+            new View.OnAttachStateChangeListener() {
+        @Override
+        public void onViewAttachedToWindow(View v) {
+            /* ignore - handled by the super class */
+        }
+
+        @Override
+        public void onViewDetachedFromWindow(View v) {
+            dismiss();
+        }
+    };
+
     /**
      * Creates a popup window with a presenter owning the window and responsible for
      * showing/hiding/updating the backing window. This can be useful of the window is
@@ -208,7 +221,21 @@
         p.packageName = anchor.getContext().getPackageName();
         mWindowPresenter.show(p, getTransitionEpicenter(), isLayoutInsetDecor(),
                 anchor.getLayoutDirection());
-        return;
+    }
+
+    @Override
+    protected void attachToAnchor(View anchor, int xoff, int yoff, int gravity) {
+        super.attachToAnchor(anchor, xoff, yoff, gravity);
+        anchor.addOnAttachStateChangeListener(mOnAttachStateChangeListener);
+    }
+
+    @Override
+    protected void detachFromAnchor() {
+        final View anchor = getAnchor();
+        if (anchor != null) {
+            anchor.removeOnAttachStateChangeListener(mOnAttachStateChangeListener);
+        }
+        super.detachFromAnchor();
     }
 
     @Override
diff --git a/core/java/android/view/autofill/IAutoFillManager.aidl b/core/java/android/view/autofill/IAutoFillManager.aidl
index 92dd5b1..9329c4d 100644
--- a/core/java/android/view/autofill/IAutoFillManager.aidl
+++ b/core/java/android/view/autofill/IAutoFillManager.aidl
@@ -51,4 +51,5 @@
     void disableOwnedAutofillServices(int userId);
     boolean isServiceSupported(int userId);
     boolean isServiceEnabled(int userId, String packageName);
+    void onPendingSaveUi(int operation, IBinder token);
 }
diff --git a/core/java/android/view/autofill/IAutoFillManagerClient.aidl b/core/java/android/view/autofill/IAutoFillManagerClient.aidl
index d18b181..3dabcec 100644
--- a/core/java/android/view/autofill/IAutoFillManagerClient.aidl
+++ b/core/java/android/view/autofill/IAutoFillManagerClient.aidl
@@ -67,12 +67,24 @@
     void requestHideFillUi(int sessionId, in AutofillId id);
 
     /**
-     * Notifies no fill UI will be shown.
+     * Notifies no fill UI will be shown, and also mark the state as finished if necessary.
      */
-    void notifyNoFillUi(int sessionId, in AutofillId id);
+    void notifyNoFillUi(int sessionId, in AutofillId id, boolean sessionFinished);
 
     /**
-     * Starts the provided intent sender
+     * Starts the provided intent sender.
      */
-    void startIntentSender(in IntentSender intentSender);
+    void startIntentSender(in IntentSender intentSender, in Intent intent);
+
+   /**
+     * Sets the state of the Autofill Save UI for a given session.
+     */
+   void setSaveUiState(int sessionId, boolean shown);
+
+   /**
+     * Marks the state of the session as finished.
+     * @param newState STATE_FINISHED (because the autofill service returned a null
+     * FillResponse) or STATE_UNKNOWN (because the session was removed).
+     */
+   void setSessionFinished(int newState);
 }
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index e2f7979..92d1de8 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -97,7 +97,7 @@
  * that manages the interaction across all processes.
  * <li> An <strong>input method (IME)</strong> implements a particular
  * interaction model allowing the user to generate text.  The system binds
- * to the current input method that is use, causing it to be created and run,
+ * to the current input method that is in use, causing it to be created and run,
  * and tells it when to hide and show its UI.  Only one IME is running at a time.
  * <li> Multiple <strong>client applications</strong> arbitrate with the input
  * method manager for input focus and control over the state of the IME.  Only
diff --git a/core/java/android/view/inputmethod/InputMethodSubtype.java b/core/java/android/view/inputmethod/InputMethodSubtype.java
index 28c2d01..a7d7a8d 100644
--- a/core/java/android/view/inputmethod/InputMethodSubtype.java
+++ b/core/java/android/view/inputmethod/InputMethodSubtype.java
@@ -84,6 +84,8 @@
     private final String mSubtypeLanguageTag;
     private final String mSubtypeMode;
     private final String mSubtypeExtraValue;
+    private final Object mLock = new Object();
+    private volatile Locale mCachedLocaleObj;
     private volatile HashMap<String, String> mExtraValueHashMapCache;
 
     /**
@@ -372,10 +374,20 @@
      */
     @Nullable
     public Locale getLocaleObject() {
-        if (!TextUtils.isEmpty(mSubtypeLanguageTag)) {
-            return Locale.forLanguageTag(mSubtypeLanguageTag);
+        if (mCachedLocaleObj != null) {
+            return mCachedLocaleObj;
         }
-        return InputMethodUtils.constructLocaleFromString(mSubtypeLocale);
+        synchronized (mLock) {
+            if (mCachedLocaleObj != null) {
+                return mCachedLocaleObj;
+            }
+            if (!TextUtils.isEmpty(mSubtypeLanguageTag)) {
+                mCachedLocaleObj = Locale.forLanguageTag(mSubtypeLanguageTag);
+            } else {
+                mCachedLocaleObj = InputMethodUtils.constructLocaleFromString(mSubtypeLocale);
+            }
+            return mCachedLocaleObj;
+        }
     }
 
     /**
@@ -681,4 +693,4 @@
         }
         return sortedList;
     }
-}
+}
\ No newline at end of file
diff --git a/core/java/android/view/textclassifier/LangId.java b/core/java/android/view/textclassifier/LangId.java
deleted file mode 100644
index 23c7842..0000000
--- a/core/java/android/view/textclassifier/LangId.java
+++ /dev/null
@@ -1,69 +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.view.textclassifier;
-
-/**
- *  Java wrapper for LangId native library interface.
- *  This class is used to detect languages in text.
- */
-final class LangId {
-
-    static {
-        System.loadLibrary("textclassifier");
-    }
-
-    private final long mModelPtr;
-
-    /**
-     * Creates a new instance of LangId predictor, using the provided model image.
-     */
-    LangId(int fd) {
-        mModelPtr = nativeNew(fd);
-    }
-
-    /**
-     * Detects the language for given text.
-     */
-    public ClassificationResult[] findLanguages(String text) {
-        return nativeFindLanguages(mModelPtr, text);
-    }
-
-    /**
-     * Frees up the allocated memory.
-     */
-    public void close() {
-        nativeClose(mModelPtr);
-    }
-
-    private static native long nativeNew(int fd);
-
-    private static native ClassificationResult[] nativeFindLanguages(
-            long context, String text);
-
-    private static native void nativeClose(long context);
-
-    /** Classification result for findLanguage method. */
-    static final class ClassificationResult {
-        final String mLanguage;
-        /** float range: 0 - 1 */
-        final float mScore;
-
-        ClassificationResult(String language, float score) {
-            mLanguage = language;
-            mScore = score;
-        }
-    }
-}
diff --git a/core/java/android/view/textclassifier/TextClassification.java b/core/java/android/view/textclassifier/TextClassification.java
index 961e15b..c879233 100644
--- a/core/java/android/view/textclassifier/TextClassification.java
+++ b/core/java/android/view/textclassifier/TextClassification.java
@@ -48,15 +48,17 @@
     @NonNull private final EntityConfidence<String> mEntityConfidence;
     @NonNull private final List<String> mEntities;
     private int mLogType;
+    @NonNull private final String mVersionInfo;
 
     private TextClassification(
-            @NonNull String text,
-            Drawable icon,
-            String label,
-            Intent intent,
-            OnClickListener onClickListener,
+            @Nullable String text,
+            @Nullable Drawable icon,
+            @Nullable String label,
+            @Nullable Intent intent,
+            @Nullable OnClickListener onClickListener,
             @NonNull EntityConfidence<String> entityConfidence,
-            int logType) {
+            int logType,
+            @NonNull String versionInfo) {
         mText = text;
         mIcon = icon;
         mLabel = label;
@@ -65,12 +67,13 @@
         mEntityConfidence = new EntityConfidence<>(entityConfidence);
         mEntities = mEntityConfidence.getEntities();
         mLogType = logType;
+        mVersionInfo = versionInfo;
     }
 
     /**
      * Gets the classified text.
      */
-    @NonNull
+    @Nullable
     public String getText() {
         return mText;
     }
@@ -145,6 +148,15 @@
         return mLogType;
     }
 
+    /**
+     * Returns information about the classifier model used to generate this TextClassification.
+     * @hide
+     */
+    @NonNull
+    public String getVersionInfo() {
+        return mVersionInfo;
+    }
+
     @Override
     public String toString() {
         return String.format("TextClassification {"
@@ -179,12 +191,13 @@
         @NonNull private final EntityConfidence<String> mEntityConfidence =
                 new EntityConfidence<>();
         private int mLogType;
+        @NonNull private String mVersionInfo = "";
 
         /**
          * Sets the classified text.
          */
-        public Builder setText(@NonNull String text) {
-            mText = Preconditions.checkNotNull(text);
+        public Builder setText(@Nullable String text) {
+            mText = text;
             return this;
         }
 
@@ -197,7 +210,7 @@
          */
         public Builder setEntityType(
                 @NonNull @EntityType String type,
-                @FloatRange(from = 0.0, to = 1.0)float confidenceScore) {
+                @FloatRange(from = 0.0, to = 1.0) float confidenceScore) {
             mEntityConfidence.setEntityType(type, confidenceScore);
             return this;
         }
@@ -244,11 +257,21 @@
         }
 
         /**
+         * Sets information about the classifier model used to generate this TextClassification.
+         * @hide
+         */
+        Builder setVersionInfo(@NonNull String versionInfo) {
+            mVersionInfo = Preconditions.checkNotNull(versionInfo);
+            return this;
+        }
+
+        /**
          * Builds and returns a {@link TextClassification} object.
          */
         public TextClassification build() {
             return new TextClassification(
-                    mText, mIcon, mLabel, mIntent, mOnClickListener, mEntityConfidence, mLogType);
+                    mText, mIcon, mLabel, mIntent, mOnClickListener, mEntityConfidence,
+                    mLogType, mVersionInfo);
         }
     }
 }
diff --git a/core/java/android/view/textclassifier/TextClassificationManager.java b/core/java/android/view/textclassifier/TextClassificationManager.java
index efc88e2..d7b0776 100644
--- a/core/java/android/view/textclassifier/TextClassificationManager.java
+++ b/core/java/android/view/textclassifier/TextClassificationManager.java
@@ -16,37 +16,22 @@
 
 package android.view.textclassifier;
 
-import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemService;
 import android.content.Context;
-import android.os.ParcelFileDescriptor;
-import android.util.Log;
 
 import com.android.internal.util.Preconditions;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-
 /**
  * Interface to the text classification service.
  */
 @SystemService(Context.TEXT_CLASSIFICATION_SERVICE)
 public final class TextClassificationManager {
 
-    private static final String LOG_TAG = "TextClassificationManager";
-
     private final Object mTextClassifierLock = new Object();
-    private final Object mLangIdLock = new Object();
 
     private final Context mContext;
-    private ParcelFileDescriptor mLangIdFd;
     private TextClassifier mTextClassifier;
-    private LangId mLangId;
 
     /** @hide */
     public TextClassificationManager(Context context) {
@@ -75,47 +60,4 @@
             mTextClassifier = textClassifier;
         }
     }
-
-    /**
-     * Returns information containing languages that were detected in the provided text.
-     * This is a blocking operation you should avoid calling it on the UI thread.
-     *
-     * @throws IllegalArgumentException if text is null
-     * @hide
-     */
-    public List<TextLanguage> detectLanguages(@NonNull CharSequence text) {
-        Preconditions.checkArgument(text != null);
-        try {
-            if (text.length() > 0) {
-                final LangId.ClassificationResult[] results =
-                        getLanguageDetector().findLanguages(text.toString());
-                final TextLanguage.Builder tlBuilder = new TextLanguage.Builder(0, text.length());
-                final int size = results.length;
-                for (int i = 0; i < size; i++) {
-                    tlBuilder.setLanguage(
-                            new Locale.Builder().setLanguageTag(results[i].mLanguage).build(),
-                            results[i].mScore);
-                }
-
-                return Collections.unmodifiableList(Arrays.asList(tlBuilder.build()));
-            }
-        } catch (Throwable t) {
-            // Avoid throwing from this method. Log the error.
-            Log.e(LOG_TAG, "Error detecting languages for text. Returning empty result.", t);
-        }
-        // Getting here means something went wrong. Return an empty result.
-        return Collections.emptyList();
-    }
-
-    private LangId getLanguageDetector() throws FileNotFoundException {
-        synchronized (mLangIdLock) {
-            if (mLangId == null) {
-                mLangIdFd = ParcelFileDescriptor.open(
-                        new File("/etc/textclassifier/textclassifier.langid.model"),
-                        ParcelFileDescriptor.MODE_READ_ONLY);
-                mLangId = new LangId(mLangIdFd.getFd());
-            }
-            return mLangId;
-        }
-    }
 }
diff --git a/core/java/android/view/textclassifier/TextClassifier.java b/core/java/android/view/textclassifier/TextClassifier.java
index ab1d034..c3601d9 100644
--- a/core/java/android/view/textclassifier/TextClassifier.java
+++ b/core/java/android/view/textclassifier/TextClassifier.java
@@ -34,6 +34,11 @@
  */
 public interface TextClassifier {
 
+    /** @hide */
+    String DEFAULT_LOG_TAG = "TextClassifierImpl";
+
+    /** @hide */
+    String TYPE_UNKNOWN = "";  // TODO: Make this public API.
     String TYPE_OTHER = "other";
     String TYPE_EMAIL = "email";
     String TYPE_PHONE = "phone";
@@ -43,7 +48,7 @@
     /** @hide */
     @Retention(RetentionPolicy.SOURCE)
     @StringDef({
-            TYPE_OTHER, TYPE_EMAIL, TYPE_PHONE, TYPE_ADDRESS, TYPE_URL
+            TYPE_UNKNOWN, TYPE_OTHER, TYPE_EMAIL, TYPE_PHONE, TYPE_ADDRESS, TYPE_URL
     })
     @interface EntityType {}
 
@@ -147,4 +152,12 @@
      */
     @WorkerThread
     default void logEvent(String source, String event) {}
+
+    /**
+     * Returns this TextClassifier's settings.
+     * @hide
+     */
+    default TextClassifierConstants getSettings() {
+        return TextClassifierConstants.DEFAULT;
+    }
 }
diff --git a/core/java/android/view/textclassifier/TextClassifierConstants.java b/core/java/android/view/textclassifier/TextClassifierConstants.java
new file mode 100644
index 0000000..51e6168
--- /dev/null
+++ b/core/java/android/view/textclassifier/TextClassifierConstants.java
@@ -0,0 +1,90 @@
+/*
+ * 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.view.textclassifier;
+
+import android.annotation.Nullable;
+import android.util.KeyValueListParser;
+import android.util.Slog;
+
+/**
+ * TextClassifier specific settings.
+ * This is encoded as a key=value list, separated by commas. Ex:
+ *
+ * <pre>
+ * smart_selection_dark_launch              (boolean)
+ * smart_selection_enabled_for_edit_text    (boolean)
+ * </pre>
+ *
+ * <p>
+ * Type: string
+ * see also android.provider.Settings.Global.TEXT_CLASSIFIER_CONSTANTS
+ *
+ * Example of setting the values for testing.
+ * adb shell settings put global text_classifier_constants smart_selection_dark_launch=true,smart_selection_enabled_for_edit_text=true
+ * @hide
+ */
+public final class TextClassifierConstants {
+
+    private static final String LOG_TAG = "TextClassifierConstants";
+
+    private static final String SMART_SELECTION_DARK_LAUNCH =
+            "smart_selection_dark_launch";
+    private static final String SMART_SELECTION_ENABLED_FOR_EDIT_TEXT =
+            "smart_selection_enabled_for_edit_text";
+
+    private static final boolean SMART_SELECTION_DARK_LAUNCH_DEFAULT = false;
+    private static final boolean SMART_SELECTION_ENABLED_FOR_EDIT_TEXT_DEFAULT = true;
+
+    /** Default settings. */
+    static final TextClassifierConstants DEFAULT = new TextClassifierConstants();
+
+    private final boolean mDarkLaunch;
+    private final boolean mSuggestSelectionEnabledForEditableText;
+
+    private TextClassifierConstants() {
+        mDarkLaunch = SMART_SELECTION_DARK_LAUNCH_DEFAULT;
+        mSuggestSelectionEnabledForEditableText = SMART_SELECTION_ENABLED_FOR_EDIT_TEXT_DEFAULT;
+    }
+
+    private TextClassifierConstants(@Nullable String settings) {
+        final KeyValueListParser parser = new KeyValueListParser(',');
+        try {
+            parser.setString(settings);
+        } catch (IllegalArgumentException e) {
+            // Failed to parse the settings string, log this and move on with defaults.
+            Slog.e(LOG_TAG, "Bad TextClassifier settings: " + settings);
+        }
+        mDarkLaunch = parser.getBoolean(
+                SMART_SELECTION_DARK_LAUNCH,
+                SMART_SELECTION_DARK_LAUNCH_DEFAULT);
+        mSuggestSelectionEnabledForEditableText = parser.getBoolean(
+                SMART_SELECTION_ENABLED_FOR_EDIT_TEXT,
+                SMART_SELECTION_ENABLED_FOR_EDIT_TEXT_DEFAULT);
+    }
+
+    static TextClassifierConstants loadFromString(String settings) {
+        return new TextClassifierConstants(settings);
+    }
+
+    public boolean isDarkLaunch() {
+        return mDarkLaunch;
+    }
+
+    public boolean isSuggestSelectionEnabledForEditableText() {
+        return mSuggestSelectionEnabledForEditableText;
+    }
+}
diff --git a/core/java/android/view/textclassifier/TextClassifierImpl.java b/core/java/android/view/textclassifier/TextClassifierImpl.java
index 290d811..2e41404 100644
--- a/core/java/android/view/textclassifier/TextClassifierImpl.java
+++ b/core/java/android/view/textclassifier/TextClassifierImpl.java
@@ -24,11 +24,11 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.graphics.drawable.Drawable;
-import android.icu.text.BreakIterator;
 import android.net.Uri;
 import android.os.LocaleList;
 import android.os.ParcelFileDescriptor;
 import android.provider.Browser;
+import android.provider.Settings;
 import android.text.Spannable;
 import android.text.TextUtils;
 import android.text.method.WordIterator;
@@ -46,6 +46,7 @@
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.text.BreakIterator;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -70,7 +71,7 @@
  */
 final class TextClassifierImpl implements TextClassifier {
 
-    private static final String LOG_TAG = "TextClassifierImpl";
+    private static final String LOG_TAG = DEFAULT_LOG_TAG;
     private static final String MODEL_DIR = "/etc/textclassifier/";
     private static final String MODEL_FILE_REGEX = "textclassifier\\.smartselection\\.(.*)\\.model";
     private static final String UPDATED_MODEL_FILE_PATH =
@@ -86,8 +87,12 @@
     @GuardedBy("mSmartSelectionLock") // Do not access outside this lock.
     private Locale mLocale;
     @GuardedBy("mSmartSelectionLock") // Do not access outside this lock.
+    private int mVersion;
+    @GuardedBy("mSmartSelectionLock") // Do not access outside this lock.
     private SmartSelection mSmartSelection;
 
+    private TextClassifierConstants mSettings;
+
     TextClassifierImpl(Context context) {
         mContext = Preconditions.checkNotNull(context);
     }
@@ -108,8 +113,7 @@
                 if (start <= end
                         && start >= 0 && end <= string.length()
                         && start <= selectionStartIndex && end >= selectionEndIndex) {
-                    final TextSelection.Builder tsBuilder = new TextSelection.Builder(start, end)
-                            .setLogSource(LOG_TAG);
+                    final TextSelection.Builder tsBuilder = new TextSelection.Builder(start, end);
                     final SmartSelection.ClassificationResult[] results =
                             smartSelection.classifyText(
                                     string, start, end,
@@ -118,7 +122,10 @@
                     for (int i = 0; i < size; i++) {
                         tsBuilder.setEntityType(results[i].mCollection, results[i].mScore);
                     }
-                    return tsBuilder.build();
+                    return tsBuilder
+                            .setLogSource(LOG_TAG)
+                            .setVersionInfo(getVersionInfo())
+                            .build();
                 } else {
                     // We can not trust the result. Log the issue and ignore the result.
                     Log.d(LOG_TAG, "Got bad indices for input text. Ignoring result.");
@@ -184,6 +191,15 @@
         }
     }
 
+    @Override
+    public TextClassifierConstants getSettings() {
+        if (mSettings == null) {
+            mSettings = TextClassifierConstants.loadFromString(Settings.Global.getString(
+                    mContext.getContentResolver(), Settings.Global.TEXT_CLASSIFIER_CONSTANTS));
+        }
+        return mSettings;
+    }
+
     private SmartSelection getSmartSelection(LocaleList localeList) throws FileNotFoundException {
         synchronized (mSmartSelectionLock) {
             localeList = localeList == null ? LocaleList.getEmptyLocaleList() : localeList;
@@ -202,6 +218,16 @@
         }
     }
 
+    @NonNull
+    private String getVersionInfo() {
+        synchronized (mSmartSelectionLock) {
+            if (mLocale != null) {
+                return String.format("%s_v%d", mLocale.toLanguageTag(), mVersion);
+            }
+            return "";
+        }
+    }
+
     @GuardedBy("mSmartSelectionLock") // Do not call outside this lock.
     private ParcelFileDescriptor getFdLocked(Locale locale) throws FileNotFoundException {
         ParcelFileDescriptor updateFd;
@@ -256,9 +282,11 @@
         final int factoryVersion = SmartSelection.getVersion(factoryFd.getFd());
         if (updateVersion > factoryVersion) {
             closeAndLogError(factoryFd);
+            mVersion = updateVersion;
             return updateFd;
         } else {
             closeAndLogError(updateFd);
+            mVersion = factoryVersion;
             return factoryFd;
         }
     }
@@ -374,7 +402,7 @@
                 builder.setLabel(label != null ? label.toString() : null);
             }
         }
-        return builder.build();
+        return builder.setVersionInfo(getVersionInfo()).build();
     }
 
     private static int getHintFlags(CharSequence text, int start, int end) {
diff --git a/core/java/android/view/textclassifier/TextLanguage.java b/core/java/android/view/textclassifier/TextLanguage.java
deleted file mode 100644
index 209813a..0000000
--- a/core/java/android/view/textclassifier/TextLanguage.java
+++ /dev/null
@@ -1,140 +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.view.textclassifier;
-
-import android.annotation.FloatRange;
-import android.annotation.IntRange;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-
-import com.android.internal.util.Preconditions;
-
-import java.util.List;
-import java.util.Locale;
-
-/**
- * Specifies detected languages for a section of text indicated by a start and end index.
- * @hide
- */
-public final class TextLanguage {
-
-    private final int mStartIndex;
-    private final int mEndIndex;
-    @NonNull private final EntityConfidence<Locale> mLanguageConfidence;
-    @NonNull private final List<Locale> mLanguages;
-
-    private TextLanguage(
-            int startIndex, int endIndex, @NonNull EntityConfidence<Locale> languageConfidence) {
-        mStartIndex = startIndex;
-        mEndIndex = endIndex;
-        mLanguageConfidence = new EntityConfidence<>(languageConfidence);
-        mLanguages = mLanguageConfidence.getEntities();
-    }
-
-    /**
-     * Returns the start index of the detected languages in the text provided to generate this
-     * object.
-     */
-    public int getStartIndex() {
-        return mStartIndex;
-    }
-
-    /**
-     * Returns the end index of the detected languages in the text provided to generate this object.
-     */
-    public int getEndIndex() {
-        return mEndIndex;
-    }
-
-    /**
-     * Returns the number of languages found in the classified text.
-     */
-    @IntRange(from = 0)
-    public int getLanguageCount() {
-        return mLanguages.size();
-    }
-
-    /**
-     * Returns the language locale at the specified index.
-     * Language locales are ordered from high confidence to low confidence.
-     *
-     * @throws IndexOutOfBoundsException if the specified index is out of range.
-     * @see #getLanguageCount() for the number of language locales available.
-     */
-    @NonNull
-    public Locale getLanguage(int index) {
-        return mLanguages.get(index);
-    }
-
-    /**
-     * Returns the confidence score for the specified language. The value ranges from
-     * 0 (low confidence) to 1 (high confidence). 0 indicates that the language was
-     * not found for the classified text.
-     */
-    @FloatRange(from = 0.0, to = 1.0)
-    public float getConfidenceScore(@Nullable Locale language) {
-        return mLanguageConfidence.getConfidenceScore(language);
-    }
-
-    @Override
-    public String toString() {
-        return String.format("TextLanguage {%d, %d, %s}",
-                mStartIndex, mEndIndex, mLanguageConfidence);
-    }
-
-    /**
-     * Builder to build {@link TextLanguage} objects.
-     */
-    public static final class Builder {
-
-        private final int mStartIndex;
-        private final int mEndIndex;
-        @NonNull private final EntityConfidence<Locale> mLanguageConfidence =
-                new EntityConfidence<>();
-
-        /**
-         * Creates a builder to build {@link TextLanguage} objects.
-         *
-         * @param startIndex the start index of the detected languages in the text provided
-         *      to generate the result
-         * @param endIndex the end index of the detected languages in the text provided
-         *      to generate the result. Must be greater than startIndex
-         */
-        public Builder(@IntRange(from = 0) int startIndex, @IntRange(from = 0) int endIndex) {
-            Preconditions.checkArgument(startIndex >= 0);
-            Preconditions.checkArgument(endIndex > startIndex);
-            mStartIndex = startIndex;
-            mEndIndex = endIndex;
-        }
-
-        /**
-         * Sets a language locale with the associated confidence score.
-         */
-        public Builder setLanguage(
-                @NonNull Locale locale, @FloatRange(from = 0.0, to = 1.0) float confidenceScore) {
-            mLanguageConfidence.setEntityType(locale, confidenceScore);
-            return this;
-        }
-
-        /**
-         * Builds and returns a {@link TextLanguage}.
-         */
-        public TextLanguage build() {
-            return new TextLanguage(mStartIndex, mEndIndex, mLanguageConfidence);
-        }
-    }
-}
diff --git a/core/java/android/view/textclassifier/TextSelection.java b/core/java/android/view/textclassifier/TextSelection.java
index 9a66693..11ebe83 100644
--- a/core/java/android/view/textclassifier/TextSelection.java
+++ b/core/java/android/view/textclassifier/TextSelection.java
@@ -35,15 +35,17 @@
     @NonNull private final EntityConfidence<String> mEntityConfidence;
     @NonNull private final List<String> mEntities;
     @NonNull private final String mLogSource;
+    @NonNull private final String mVersionInfo;
 
     private TextSelection(
             int startIndex, int endIndex, @NonNull EntityConfidence<String> entityConfidence,
-            @NonNull String logSource) {
+            @NonNull String logSource, @NonNull String versionInfo) {
         mStartIndex = startIndex;
         mEndIndex = endIndex;
         mEntityConfidence = new EntityConfidence<>(entityConfidence);
         mEntities = mEntityConfidence.getEntities();
         mLogSource = logSource;
+        mVersionInfo = versionInfo;
     }
 
     /**
@@ -94,10 +96,20 @@
      * Returns a tag for the source classifier used to generate this result.
      * @hide
      */
+    @NonNull
     public String getSourceClassifier() {
         return mLogSource;
     }
 
+    /**
+     * Returns information about the classifier model used to generate this TextSelection.
+     * @hide
+     */
+    @NonNull
+    public String getVersionInfo() {
+        return mVersionInfo;
+    }
+
     @Override
     public String toString() {
         return String.format("TextSelection {%d, %d, %s}",
@@ -114,6 +126,7 @@
         @NonNull private final EntityConfidence<String> mEntityConfidence =
                 new EntityConfidence<>();
         @NonNull private String mLogSource = "";
+        @NonNull private String mVersionInfo = "";
 
         /**
          * Creates a builder used to build {@link TextSelection} objects.
@@ -152,10 +165,20 @@
         }
 
         /**
+         * Sets information about the classifier model used to generate this TextSelection.
+         * @hide
+         */
+        Builder setVersionInfo(@NonNull String versionInfo) {
+            mVersionInfo = Preconditions.checkNotNull(versionInfo);
+            return this;
+        }
+
+        /**
          * Builds and returns {@link TextSelection} object.
          */
         public TextSelection build() {
-            return new TextSelection(mStartIndex, mEndIndex, mEntityConfidence, mLogSource);
+            return new TextSelection(
+                    mStartIndex, mEndIndex, mEntityConfidence, mLogSource, mVersionInfo);
         }
     }
 }
diff --git a/core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java b/core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java
new file mode 100644
index 0000000..fb870bd
--- /dev/null
+++ b/core/java/android/view/textclassifier/logging/SmartSelectionEventTracker.java
@@ -0,0 +1,592 @@
+/*
+ * 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.view.textclassifier.logging;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.metrics.LogMaker;
+import android.util.Log;
+import android.view.textclassifier.TextClassification;
+import android.view.textclassifier.TextClassifier;
+import android.view.textclassifier.TextSelection;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.util.Preconditions;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Objects;
+import java.util.UUID;
+
+/**
+ * A selection event tracker.
+ * @hide
+ */
+//TODO: Do not allow any crashes from this class.
+public final class SmartSelectionEventTracker {
+
+    private static final String LOG_TAG = "SmartSelectEventTracker";
+    private static final boolean DEBUG_LOG_ENABLED = false;
+
+    private static final int START_EVENT_DELTA = MetricsEvent.FIELD_SELECTION_SINCE_START;
+    private static final int PREV_EVENT_DELTA = MetricsEvent.FIELD_SELECTION_SINCE_PREVIOUS;
+    private static final int INDEX = MetricsEvent.FIELD_SELECTION_SESSION_INDEX;
+    private static final int VERSION_TAG = MetricsEvent.FIELD_SELECTION_VERSION_TAG;
+    private static final int SMART_INDICES = MetricsEvent.FIELD_SELECTION_SMART_RANGE;
+    private static final int EVENT_INDICES = MetricsEvent.FIELD_SELECTION_RANGE;
+    private static final int SESSION_ID = MetricsEvent.FIELD_SELECTION_SESSION_ID;
+
+    private static final String ZERO = "0";
+    private static final String TEXTVIEW = "textview";
+    private static final String EDITTEXT = "edittext";
+    private static final String WEBVIEW = "webview";
+    private static final String EDIT_WEBVIEW = "edit-webview";
+    private static final String UNKNOWN = "unknown";
+
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({WidgetType.UNSPECIFIED, WidgetType.TEXTVIEW, WidgetType.WEBVIEW,
+            WidgetType.EDITTEXT, WidgetType.EDIT_WEBVIEW})
+    public @interface WidgetType {
+    int UNSPECIFIED = 0;
+    int TEXTVIEW = 1;
+    int WEBVIEW = 2;
+    int EDITTEXT = 3;
+    int EDIT_WEBVIEW = 4;
+    }
+
+    private final MetricsLogger mMetricsLogger = new MetricsLogger();
+    private final int mWidgetType;
+    private final Context mContext;
+
+    @Nullable private String mSessionId;
+    private final int[] mSmartIndices = new int[2];
+    private final int[] mPrevIndices = new int[2];
+    private int mOrigStart;
+    private int mIndex;
+    private long mSessionStartTime;
+    private long mLastEventTime;
+    private boolean mSmartSelectionTriggered;
+    private String mVersionTag;
+
+    public SmartSelectionEventTracker(@NonNull Context context, @WidgetType int widgetType) {
+        mWidgetType = widgetType;
+        mContext = Preconditions.checkNotNull(context);
+    }
+
+    /**
+     * Logs a selection event.
+     *
+     * @param event the selection event
+     */
+    public void logEvent(@NonNull SelectionEvent event) {
+        Preconditions.checkNotNull(event);
+
+        if (event.mEventType != SelectionEvent.EventType.SELECTION_STARTED && mSessionId == null
+                && DEBUG_LOG_ENABLED) {
+            Log.d(LOG_TAG, "Selection session not yet started. Ignoring event");
+            return;
+        }
+
+        final long now = System.currentTimeMillis();
+        switch (event.mEventType) {
+            case SelectionEvent.EventType.SELECTION_STARTED:
+                mSessionId = startNewSession();
+                Preconditions.checkArgument(event.mEnd == event.mStart + 1);
+                mOrigStart = event.mStart;
+                mSessionStartTime = now;
+                break;
+            case SelectionEvent.EventType.SMART_SELECTION_SINGLE:  // fall through
+            case SelectionEvent.EventType.SMART_SELECTION_MULTI:
+                mSmartSelectionTriggered = true;
+                mVersionTag = getVersionTag(event);
+                mSmartIndices[0] = event.mStart;
+                mSmartIndices[1] = event.mEnd;
+                break;
+            case SelectionEvent.EventType.SELECTION_MODIFIED:  // fall through
+            case SelectionEvent.EventType.AUTO_SELECTION:
+                if (mPrevIndices[0] == event.mStart && mPrevIndices[1] == event.mEnd) {
+                    // Selection did not change. Ignore event.
+                    return;
+                }
+        }
+        writeEvent(event, now);
+
+        if (event.isTerminal()) {
+            endSession();
+        }
+    }
+
+    private void writeEvent(SelectionEvent event, long now) {
+        final long prevEventDelta = mLastEventTime == 0 ? 0 : now - mLastEventTime;
+        final LogMaker log = new LogMaker(MetricsEvent.TEXT_SELECTION_SESSION)
+                .setType(getLogType(event))
+                .setSubtype(getLogSubType(event))
+                .setPackageName(mContext.getPackageName())
+                .setTimestamp(now)
+                .addTaggedData(START_EVENT_DELTA, now - mSessionStartTime)
+                .addTaggedData(PREV_EVENT_DELTA, prevEventDelta)
+                .addTaggedData(INDEX, mIndex)
+                .addTaggedData(VERSION_TAG, mVersionTag)
+                .addTaggedData(SMART_INDICES, getSmartDelta())
+                .addTaggedData(EVENT_INDICES, getEventDelta(event))
+                .addTaggedData(SESSION_ID, mSessionId);
+        mMetricsLogger.write(log);
+        debugLog(log);
+        mLastEventTime = now;
+        mPrevIndices[0] = event.mStart;
+        mPrevIndices[1] = event.mEnd;
+        mIndex++;
+    }
+
+    private String startNewSession() {
+        endSession();
+        mSessionId = createSessionId();
+        return mSessionId;
+    }
+
+    private void endSession() {
+        // Reset fields.
+        mOrigStart = 0;
+        mSmartIndices[0] = mSmartIndices[1] = 0;
+        mPrevIndices[0] = mPrevIndices[1] = 0;
+        mIndex = 0;
+        mSessionStartTime = 0;
+        mLastEventTime = 0;
+        mSmartSelectionTriggered = false;
+        mVersionTag = getVersionTag(null);
+        mSessionId = null;
+    }
+
+    private static int getLogType(SelectionEvent event) {
+        switch (event.mEventType) {
+            case SelectionEvent.ActionType.OVERTYPE:
+                return MetricsEvent.ACTION_TEXT_SELECTION_OVERTYPE;
+            case SelectionEvent.ActionType.COPY:
+                return MetricsEvent.ACTION_TEXT_SELECTION_COPY;
+            case SelectionEvent.ActionType.PASTE:
+                return MetricsEvent.ACTION_TEXT_SELECTION_PASTE;
+            case SelectionEvent.ActionType.CUT:
+                return MetricsEvent.ACTION_TEXT_SELECTION_CUT;
+            case SelectionEvent.ActionType.SHARE:
+                return MetricsEvent.ACTION_TEXT_SELECTION_SHARE;
+            case SelectionEvent.ActionType.SMART_SHARE:
+                return MetricsEvent.ACTION_TEXT_SELECTION_SMART_SHARE;
+            case SelectionEvent.ActionType.DRAG:
+                return MetricsEvent.ACTION_TEXT_SELECTION_DRAG;
+            case SelectionEvent.ActionType.ABANDON:
+                return MetricsEvent.ACTION_TEXT_SELECTION_ABANDON;
+            case SelectionEvent.ActionType.OTHER:
+                return MetricsEvent.ACTION_TEXT_SELECTION_OTHER;
+            case SelectionEvent.ActionType.SELECT_ALL:
+                return MetricsEvent.ACTION_TEXT_SELECTION_SELECT_ALL;
+            case SelectionEvent.ActionType.RESET:
+                return MetricsEvent.ACTION_TEXT_SELECTION_RESET;
+            case SelectionEvent.EventType.SELECTION_STARTED:
+                return MetricsEvent.ACTION_TEXT_SELECTION_START;
+            case SelectionEvent.EventType.SELECTION_MODIFIED:
+                return MetricsEvent.ACTION_TEXT_SELECTION_MODIFY;
+            case SelectionEvent.EventType.SMART_SELECTION_SINGLE:
+                return MetricsEvent.ACTION_TEXT_SELECTION_SMART_SINGLE;
+            case SelectionEvent.EventType.SMART_SELECTION_MULTI:
+                return MetricsEvent.ACTION_TEXT_SELECTION_SMART_MULTI;
+            case SelectionEvent.EventType.AUTO_SELECTION:
+                return MetricsEvent.ACTION_TEXT_SELECTION_AUTO;
+            default:
+                return MetricsEvent.VIEW_UNKNOWN;
+        }
+    }
+
+    private static String getLogTypeString(int logType) {
+        switch (logType) {
+            case MetricsEvent.ACTION_TEXT_SELECTION_OVERTYPE:
+                return "OVERTYPE";
+            case MetricsEvent.ACTION_TEXT_SELECTION_COPY:
+                return "COPY";
+            case MetricsEvent.ACTION_TEXT_SELECTION_PASTE:
+                return "PASTE";
+            case MetricsEvent.ACTION_TEXT_SELECTION_CUT:
+                return "CUT";
+            case MetricsEvent.ACTION_TEXT_SELECTION_SHARE:
+                return "SHARE";
+            case MetricsEvent.ACTION_TEXT_SELECTION_SMART_SHARE:
+                return "SMART_SHARE";
+            case MetricsEvent.ACTION_TEXT_SELECTION_DRAG:
+                return "DRAG";
+            case MetricsEvent.ACTION_TEXT_SELECTION_ABANDON:
+                return "ABANDON";
+            case MetricsEvent.ACTION_TEXT_SELECTION_OTHER:
+                return "OTHER";
+            case MetricsEvent.ACTION_TEXT_SELECTION_SELECT_ALL:
+                return "SELECT_ALL";
+            case MetricsEvent.ACTION_TEXT_SELECTION_RESET:
+                return "RESET";
+            case MetricsEvent.ACTION_TEXT_SELECTION_START:
+                return "SELECTION_STARTED";
+            case MetricsEvent.ACTION_TEXT_SELECTION_MODIFY:
+                return "SELECTION_MODIFIED";
+            case MetricsEvent.ACTION_TEXT_SELECTION_SMART_SINGLE:
+                return "SMART_SELECTION_SINGLE";
+            case MetricsEvent.ACTION_TEXT_SELECTION_SMART_MULTI:
+                return "SMART_SELECTION_MULTI";
+            case MetricsEvent.ACTION_TEXT_SELECTION_AUTO:
+                return "AUTO_SELECTION";
+            default:
+                return UNKNOWN;
+        }
+    }
+
+    private static int getLogSubType(SelectionEvent event) {
+        switch (event.mEntityType) {
+            case TextClassifier.TYPE_OTHER:
+                return MetricsEvent.TEXT_CLASSIFIER_TYPE_OTHER;
+            case TextClassifier.TYPE_EMAIL:
+                return MetricsEvent.TEXT_CLASSIFIER_TYPE_EMAIL;
+            case TextClassifier.TYPE_PHONE:
+                return MetricsEvent.TEXT_CLASSIFIER_TYPE_PHONE;
+            case TextClassifier.TYPE_ADDRESS:
+                return MetricsEvent.TEXT_CLASSIFIER_TYPE_ADDRESS;
+            case TextClassifier.TYPE_URL:
+                return MetricsEvent.TEXT_CLASSIFIER_TYPE_URL;
+            default:
+                return MetricsEvent.TEXT_CLASSIFIER_TYPE_UNKNOWN;
+        }
+    }
+
+    private static String getLogSubTypeString(int logSubType) {
+        switch (logSubType) {
+            case MetricsEvent.TEXT_CLASSIFIER_TYPE_OTHER:
+                return TextClassifier.TYPE_OTHER;
+            case MetricsEvent.TEXT_CLASSIFIER_TYPE_EMAIL:
+                return TextClassifier.TYPE_EMAIL;
+            case MetricsEvent.TEXT_CLASSIFIER_TYPE_PHONE:
+                return TextClassifier.TYPE_PHONE;
+            case MetricsEvent.TEXT_CLASSIFIER_TYPE_ADDRESS:
+                return TextClassifier.TYPE_ADDRESS;
+            case MetricsEvent.TEXT_CLASSIFIER_TYPE_URL:
+                return TextClassifier.TYPE_URL;
+            default:
+                return TextClassifier.TYPE_UNKNOWN;
+        }
+    }
+
+    private int getSmartDelta() {
+        if (mSmartSelectionTriggered) {
+            return (clamp(mSmartIndices[0] - mOrigStart) << 16)
+                    | (clamp(mSmartIndices[1] - mOrigStart) & 0xffff);
+        }
+        // If the smart selection model was not run, return invalid selection indices [0,0]. This
+        // allows us to tell from the terminal event alone whether the model was run.
+        return 0;
+    }
+
+    private int getEventDelta(SelectionEvent event) {
+        return (clamp(event.mStart - mOrigStart) << 16)
+                | (clamp(event.mEnd - mOrigStart) & 0xffff);
+    }
+
+    private String getVersionTag(@Nullable SelectionEvent event) {
+        final String widgetType;
+        switch (mWidgetType) {
+            case WidgetType.TEXTVIEW:
+                widgetType = TEXTVIEW;
+                break;
+            case WidgetType.WEBVIEW:
+                widgetType = WEBVIEW;
+                break;
+            case WidgetType.EDITTEXT:
+                widgetType = EDITTEXT;
+                break;
+            case WidgetType.EDIT_WEBVIEW:
+                widgetType = EDIT_WEBVIEW;
+                break;
+            default:
+                widgetType = UNKNOWN;
+        }
+        final String version = event == null
+                ? SelectionEvent.NO_VERSION_TAG
+                : Objects.toString(event.mVersionTag, SelectionEvent.NO_VERSION_TAG);
+        return String.format("%s/%s", widgetType, version);
+    }
+
+    private static String createSessionId() {
+        return UUID.randomUUID().toString();
+    }
+
+    private static int clamp(int val) {
+        return Math.max(Math.min(val, Short.MAX_VALUE), Short.MIN_VALUE);
+    }
+
+    private static void debugLog(LogMaker log) {
+        if (!DEBUG_LOG_ENABLED) return;
+
+        final String tag = Objects.toString(log.getTaggedData(VERSION_TAG), "tag");
+        final int index = Integer.parseInt(Objects.toString(log.getTaggedData(INDEX), ZERO));
+        if (log.getType() == MetricsEvent.ACTION_TEXT_SELECTION_START) {
+            String sessionId = Objects.toString(log.getTaggedData(SESSION_ID), "");
+            sessionId = sessionId.substring(sessionId.lastIndexOf("-") + 1);
+            Log.d(LOG_TAG, String.format("New selection session: %s(%s)", tag, sessionId));
+        }
+
+        final String type = getLogTypeString(log.getType());
+        final String subType = getLogSubTypeString(log.getSubtype());
+
+        final int smartIndices = Integer.parseInt(
+                Objects.toString(log.getTaggedData(SMART_INDICES), ZERO));
+        final int smartStart = (short) ((smartIndices & 0xffff0000) >> 16);
+        final int smartEnd = (short) (smartIndices & 0xffff);
+
+        final int eventIndices = Integer.parseInt(
+                Objects.toString(log.getTaggedData(EVENT_INDICES), ZERO));
+        final int eventStart = (short) ((eventIndices & 0xffff0000) >> 16);
+        final int eventEnd = (short) (eventIndices & 0xffff);
+
+        Log.d(LOG_TAG, String.format("%2d: %s/%s, context=%d,%d - old=%d,%d (%s)",
+                index, type, subType, eventStart, eventEnd, smartStart, smartEnd, tag));
+    }
+
+    /**
+     * A selection event.
+     * Specify index parameters as word token indices.
+     */
+    public static final class SelectionEvent {
+
+        /**
+         * Use this to specify an indeterminate positive index.
+         */
+        public static final int OUT_OF_BOUNDS = Short.MAX_VALUE;
+
+        /**
+         * Use this to specify an indeterminate negative index.
+         */
+        public static final int OUT_OF_BOUNDS_NEGATIVE = Short.MIN_VALUE;
+
+        private static final String NO_VERSION_TAG = "";
+
+        @Retention(RetentionPolicy.SOURCE)
+        @IntDef({ActionType.OVERTYPE, ActionType.COPY, ActionType.PASTE, ActionType.CUT,
+                ActionType.SHARE, ActionType.SMART_SHARE, ActionType.DRAG, ActionType.ABANDON,
+                ActionType.OTHER, ActionType.SELECT_ALL, ActionType.RESET})
+        public @interface ActionType {
+        /** User typed over the selection. */
+        int OVERTYPE = 100;
+        /** User copied the selection. */
+        int COPY = 101;
+        /** User pasted over the selection. */
+        int PASTE = 102;
+        /** User cut the selection. */
+        int CUT = 103;
+        /** User shared the selection. */
+        int SHARE = 104;
+        /** User clicked the textAssist menu item. */
+        int SMART_SHARE = 105;
+        /** User dragged+dropped the selection. */
+        int DRAG = 106;
+        /** User abandoned the selection. */
+        int ABANDON = 107;
+        /** User performed an action on the selection. */
+        int OTHER = 108;
+
+        /* Non-terminal actions. */
+        /** User activated Select All */
+        int SELECT_ALL = 200;
+        /** User reset the smart selection. */
+        int RESET = 201;
+        }
+
+        @Retention(RetentionPolicy.SOURCE)
+        @IntDef({ActionType.OVERTYPE, ActionType.COPY, ActionType.PASTE, ActionType.CUT,
+                ActionType.SHARE, ActionType.SMART_SHARE, ActionType.DRAG, ActionType.ABANDON,
+                ActionType.OTHER, ActionType.SELECT_ALL, ActionType.RESET,
+                EventType.SELECTION_STARTED, EventType.SELECTION_MODIFIED,
+                EventType.SMART_SELECTION_SINGLE, EventType.SMART_SELECTION_MULTI,
+                EventType.AUTO_SELECTION})
+        private @interface EventType {
+        /** User started a new selection. */
+        int SELECTION_STARTED = 1;
+        /** User modified an existing selection. */
+        int SELECTION_MODIFIED = 2;
+        /** Smart selection triggered for a single token (word). */
+        int SMART_SELECTION_SINGLE = 3;
+        /** Smart selection triggered spanning multiple tokens (words). */
+        int SMART_SELECTION_MULTI = 4;
+        /** Something else other than User or the default TextClassifier triggered a selection. */
+        int AUTO_SELECTION = 5;
+        }
+
+        private final int mStart;
+        private final int mEnd;
+        private @EventType int mEventType;
+        private final @TextClassifier.EntityType String mEntityType;
+        private final String mVersionTag;
+
+        private SelectionEvent(
+                int start, int end, int eventType,
+                @TextClassifier.EntityType String entityType, String versionTag) {
+            Preconditions.checkArgument(end >= start, "end cannot be less than start");
+            mStart = start;
+            mEnd = end;
+            mEventType = eventType;
+            mEntityType = Preconditions.checkNotNull(entityType);
+            mVersionTag = Preconditions.checkNotNull(versionTag);
+        }
+
+        /**
+         * Creates a "selection started" event.
+         *
+         * @param start  the word index of the selected word
+         */
+        public static SelectionEvent selectionStarted(int start) {
+            return new SelectionEvent(
+                    start, start + 1, EventType.SELECTION_STARTED,
+                    TextClassifier.TYPE_UNKNOWN, NO_VERSION_TAG);
+        }
+
+        /**
+         * Creates a "selection modified" event.
+         * Use when the user modifies the selection.
+         *
+         * @param start  the start word (inclusive) index of the selection
+         * @param end  the end word (exclusive) index of the selection
+         */
+        public static SelectionEvent selectionModified(int start, int end) {
+            return new SelectionEvent(
+                    start, end, EventType.SELECTION_MODIFIED,
+                    TextClassifier.TYPE_UNKNOWN, NO_VERSION_TAG);
+        }
+
+        /**
+         * Creates a "selection modified" event.
+         * Use when the user modifies the selection and the selection's entity type is known.
+         *
+         * @param start  the start word (inclusive) index of the selection
+         * @param end  the end word (exclusive) index of the selection
+         * @param classification  the TextClassification object returned by the TextClassifier that
+         *      classified the selected text
+         */
+        public static SelectionEvent selectionModified(
+                int start, int end, @NonNull TextClassification classification) {
+            final String entityType = classification.getEntityCount() > 0
+                    ? classification.getEntity(0)
+                    : TextClassifier.TYPE_UNKNOWN;
+            final String versionTag = classification.getVersionInfo();
+            return new SelectionEvent(
+                    start, end, EventType.SELECTION_MODIFIED, entityType, versionTag);
+        }
+
+        /**
+         * Creates a "selection modified" event.
+         * Use when a TextClassifier modifies the selection.
+         *
+         * @param start  the start word (inclusive) index of the selection
+         * @param end  the end word (exclusive) index of the selection
+         * @param selection  the TextSelection object returned by the TextClassifier for the
+         *      specified selection
+         */
+        public static SelectionEvent selectionModified(
+                int start, int end, @NonNull TextSelection selection) {
+            final boolean smartSelection = selection.getSourceClassifier()
+                    .equals(TextClassifier.DEFAULT_LOG_TAG);
+            final int eventType;
+            if (smartSelection) {
+                eventType = end - start > 1
+                        ? EventType.SMART_SELECTION_MULTI
+                        : EventType.SMART_SELECTION_SINGLE;
+
+            } else {
+                eventType = EventType.AUTO_SELECTION;
+            }
+            final String entityType = selection.getEntityCount() > 0
+                    ? selection.getEntity(0)
+                    : TextClassifier.TYPE_UNKNOWN;
+            final String versionTag = selection.getVersionInfo();
+            return new SelectionEvent(start, end, eventType, entityType, versionTag);
+        }
+
+        /**
+         * Creates an event specifying an action taken on a selection.
+         * Use when the user clicks on an action to act on the selected text.
+         *
+         * @param start  the start word (inclusive) index of the selection
+         * @param end  the end word (exclusive) index of the selection
+         * @param actionType  the action that was performed on the selection
+         */
+        public static SelectionEvent selectionAction(
+                int start, int end, @ActionType int actionType) {
+            return new SelectionEvent(
+                    start, end, actionType, TextClassifier.TYPE_UNKNOWN, NO_VERSION_TAG);
+        }
+
+        /**
+         * Creates an event specifying an action taken on a selection.
+         * Use when the user clicks on an action to act on the selected text and the selection's
+         * entity type is known.
+         *
+         * @param start  the start word (inclusive) index of the selection
+         * @param end  the end word (exclusive) index of the selection
+         * @param actionType  the action that was performed on the selection
+         * @param classification  the TextClassification object returned by the TextClassifier that
+         *      classified the selected text
+         */
+        public static SelectionEvent selectionAction(
+                int start, int end, @ActionType int actionType,
+                @NonNull TextClassification classification) {
+            final String entityType = classification.getEntityCount() > 0
+                    ? classification.getEntity(0)
+                    : TextClassifier.TYPE_UNKNOWN;
+            final String versionTag = classification.getVersionInfo();
+            return new SelectionEvent(start, end, actionType, entityType, versionTag);
+        }
+
+        private boolean isActionType() {
+            switch (mEventType) {
+                case ActionType.OVERTYPE:  // fall through
+                case ActionType.COPY:  // fall through
+                case ActionType.PASTE:  // fall through
+                case ActionType.CUT:  // fall through
+                case ActionType.SHARE:  // fall through
+                case ActionType.SMART_SHARE:  // fall through
+                case ActionType.DRAG:  // fall through
+                case ActionType.ABANDON:  // fall through
+                case ActionType.SELECT_ALL:  // fall through
+                case ActionType.RESET:  // fall through
+                    return true;
+                default:
+                    return false;
+            }
+        }
+
+        private boolean isTerminal() {
+            switch (mEventType) {
+                case ActionType.OVERTYPE:  // fall through
+                case ActionType.COPY:  // fall through
+                case ActionType.PASTE:  // fall through
+                case ActionType.CUT:  // fall through
+                case ActionType.SHARE:  // fall through
+                case ActionType.SMART_SHARE:  // fall through
+                case ActionType.DRAG:  // fall through
+                case ActionType.ABANDON:  // fall through
+                case ActionType.OTHER:  // fall through
+                    return true;
+                default:
+                    return false;
+            }
+        }
+    }
+}
diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java
index d9bfade..f368c74 100644
--- a/core/java/android/view/textservice/TextServicesManager.java
+++ b/core/java/android/view/textservice/TextServicesManager.java
@@ -213,20 +213,6 @@
     /**
      * @hide
      */
-    public void setCurrentSpellChecker(SpellCheckerInfo sci) {
-        try {
-            if (sci == null) {
-                throw new NullPointerException("SpellCheckerInfo is null.");
-            }
-            mService.setCurrentSpellChecker(null, sci.getId());
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-    }
-
-    /**
-     * @hide
-     */
     public SpellCheckerSubtype getCurrentSpellCheckerSubtype(
             boolean allowImplicitlySelectedSubtype) {
         try {
@@ -240,34 +226,6 @@
     /**
      * @hide
      */
-    public void setSpellCheckerSubtype(SpellCheckerSubtype subtype) {
-        try {
-            final int hashCode;
-            if (subtype == null) {
-                hashCode = 0;
-            } else {
-                hashCode = subtype.hashCode();
-            }
-            mService.setCurrentSpellCheckerSubtype(null, hashCode);
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-    }
-
-    /**
-     * @hide
-     */
-    public void setSpellCheckerEnabled(boolean enabled) {
-        try {
-            mService.setSpellCheckerEnabled(enabled);
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-    }
-
-    /**
-     * @hide
-     */
     public boolean isSpellCheckerEnabled() {
         try {
             return mService.isSpellCheckerEnabled();
diff --git a/core/java/android/webkit/SafeBrowsingResponse.java b/core/java/android/webkit/SafeBrowsingResponse.java
new file mode 100644
index 0000000..0d0f1cc
--- /dev/null
+++ b/core/java/android/webkit/SafeBrowsingResponse.java
@@ -0,0 +1,52 @@
+/*
+ * 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.webkit;
+
+/**
+ * Used to indicate an action to take when hitting a malicious URL. Instances of this class are
+ * created by the WebView and passed to {@link android.webkit.WebViewClient#onSafeBrowsingHit}. The
+ * host application must call {@link #showInterstitial(boolean)}, {@link #proceed(boolean)}, or
+ * {@link #backToSafety(boolean)} to set the WebView's response to the Safe Browsing hit.
+ *
+ * <p>
+ * If reporting is enabled, all reports will be sent according to the privacy policy referenced by
+ * {@link android.webkit.WebView#getSafeBrowsingPrivacyPolicyUrl()}.
+ * </p>
+ */
+public abstract class SafeBrowsingResponse {
+
+    /**
+     * Display the default interstitial.
+     *
+     * @param allowReporting True if the interstitial should show a reporting checkbox.
+     */
+    public abstract void showInterstitial(boolean allowReporting);
+
+    /**
+     * Act as if the user clicked "visit this unsafe site."
+     *
+     * @param report True to enable Safe Browsing reporting.
+     */
+    public abstract void proceed(boolean report);
+
+    /**
+     * Act as if the user clicked "back to safety."
+     *
+     * @param report True to enable Safe Browsing reporting.
+     */
+    public abstract void backToSafety(boolean report);
+}
diff --git a/core/java/android/webkit/UserPackage.java b/core/java/android/webkit/UserPackage.java
index 8920089..9da6455 100644
--- a/core/java/android/webkit/UserPackage.java
+++ b/core/java/android/webkit/UserPackage.java
@@ -83,7 +83,7 @@
      * supported by the current framework version.
      */
     public static boolean hasCorrectTargetSdkVersion(PackageInfo packageInfo) {
-        return packageInfo.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.O;
+        return packageInfo.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.O_MR1;
     }
 
     public UserInfo getUserInfo() {
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 3a6de96..82cff7c 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -1390,17 +1390,15 @@
      * Sets whether Safe Browsing is enabled. Safe browsing allows WebView to
      * protect against malware and phishing attacks by verifying the links.
      *
-     * Safe browsing is disabled by default. The recommended way to enable
-     * Safe browsing is using a manifest tag to change the default value to
-     * enabled for all WebViews.
      * <p>
-     * <pre>
-     * &lt;meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
-     *            android:value="true" /&gt;
-     * </pre>
+     * Safe browsing is disabled by default. The recommended way to enable Safe browsing is using a
+     * manifest tag to change the default value to enabled for all WebViews (read <a
+     * href="{@docRoot}reference/android/webkit/WebView.html">general Safe Browsing info</a>).
      * </p>
      *
+     * <p>
      * This API overrides the manifest tag value for this WebView.
+     * </p>
      *
      * @param enabled Whether Safe browsing is enabled.
      */
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index a0b4a03..637b60e 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -67,6 +67,7 @@
 import java.io.File;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -318,6 +319,22 @@
  * out.
  * </p>
  *
+ * <h3>Safe Browsing</h3>
+ *
+ * <p>
+ * If Safe Browsing is enabled, WebView will block malicious URLs and present a warning UI to the
+ * user to allow them to navigate back safely or proceed to the malicious page.
+ * </p>
+ * <p>
+ * The recommended way for apps to enable the feature is putting the following tag in the manifest:
+ * </p>
+ * <p>
+ * <pre>
+ * &lt;meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
+ *            android:value="true" /&gt;
+ * </pre>
+ * </p>
+ *
  */
 // Implementation notes.
 // The WebView is a thin API class that delegates its public API to a backend WebViewProvider
@@ -330,16 +347,6 @@
         implements ViewTreeObserver.OnGlobalFocusChangeListener,
         ViewGroup.OnHierarchyChangeListener, ViewDebug.HierarchyHandler {
 
-    /**
-     * Broadcast Action: Indicates the data reduction proxy setting changed.
-     * Sent by the settings app when user changes the data reduction proxy value. This intent will
-     * always stay as a hidden API.
-     * @hide
-     */
-    @SystemApi
-    public static final String DATA_REDUCTION_PROXY_SETTING_CHANGED =
-            "android.webkit.DATA_REDUCTION_PROXY_SETTING_CHANGED";
-
     private static final String LOGTAG = "WebView";
 
     // Throwing an exception for incorrect thread usage if the
@@ -1621,22 +1628,60 @@
     }
 
     /**
-     * Starts Safe Browsing initialization. This should only be called once.
-     * @param context is the activity context the WebView will be used in.
-     * @param callback will be called with the value true if initialization is
-     * successful. The callback will be run on the UI thread.
-     * @hide
+     * Starts Safe Browsing initialization.
+     * <p>
+     * URL loads are not guaranteed to be protected by Safe Browsing until after {@code callback} is
+     * invoked with {@code true}. Safe Browsing is not fully supported on all devices. For those
+     * devices {@code callback} will receive {@code false}.
+     * <p>
+     * This does not enable the Safe Browsing feature itself, and should only be called if Safe
+     * Browsing is enabled by the manifest tag or {@link WebSettings#setSafeBrowsingEnabled}. This
+     * prepares resources used for Safe Browsing.
+     * <p>
+     * This should be called with the Application Context (and will always use the Application
+     * context to do its work regardless).
+     *
+     * @param context Application Context.
+     * @param callback will be called on the UI thread with {@code true} if initialization is
+     * successful, {@code false} otherwise.
      */
-    public static void initSafeBrowsing(Context context, ValueCallback<Boolean> callback) {
+    public static void startSafeBrowsing(Context context, ValueCallback<Boolean> callback) {
         getFactory().getStatics().initSafeBrowsing(context, callback);
     }
 
     /**
-     * Shuts down Safe Browsing. This should only be called once.
-     * @hide
+     * Sets the list of domains that are exempt from SafeBrowsing checks. The list is
+     * global for all the WebViews.
+     * <p>
+     * Each rule should take one of these:
+     * <table>
+     * <tr><th> Rule </th> <th> Example </th> <th> Matches Subdomain</th> </tr>
+     * <tr><td> HOSTNAME </td> <td> example.com </td> <td> Yes </td> </tr>
+     * <tr><td> .HOSTNAME </td> <td> .example.com </td> <td> No </td> </tr>
+     * <tr><td> IPV4_LITERAL </td> <td> 192.168.1.1 </td> <td> No </td></tr>
+     * <tr><td> IPV6_LITERAL_WITH_BRACKETS </td><td>[10:20:30:40:50:60:70:80]</td><td>No</td></tr>
+     * </table>
+     * <p>
+     * All other rules, including wildcards, are invalid.
+     *
+     * @param urls the list of URLs
+     * @param callback will be called with true if URLs are successfully added to the whitelist.
+     * It will be called with false if any URLs are malformed. The callback will be run on
+     * the UI thread
      */
-    public static void shutdownSafeBrowsing() {
-        getFactory().getStatics().shutdownSafeBrowsing();
+    public static void setSafeBrowsingWhitelist(@NonNull List<String> urls,
+            @Nullable ValueCallback<Boolean> callback) {
+        getFactory().getStatics().setSafeBrowsingWhitelist(urls, callback);
+    }
+
+    /**
+     * Returns a URL pointing to the privacy policy for Safe Browsing reporting.
+     *
+     * @return the url pointing to a privacy policy document which can be displayed to users.
+     */
+    @NonNull
+    public static Uri getSafeBrowsingPrivacyPolicyUrl() {
+        return getFactory().getStatics().getSafeBrowsingPrivacyPolicyUrl();
     }
 
     /**
@@ -1880,13 +1925,14 @@
      * For applications targeted to API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN} or below,
      * all public methods (including the inherited ones) can be accessed, see the
      * important security note below for implications.
-     * <p> Note that injected objects will not
-     * appear in JavaScript until the page is next (re)loaded. For example:
+     * <p> Note that injected objects will not appear in JavaScript until the page is next
+     * (re)loaded. JavaScript should be enabled before injecting the object. For example:
      * <pre>
      * class JsObject {
      *    {@literal @}JavascriptInterface
      *    public String toString() { return "injectedObject"; }
      * }
+     * webview.getSettings().setJavaScriptEnabled(true);
      * webView.addJavascriptInterface(new JsObject(), "injectedObject");
      * webView.loadData("<!DOCTYPE html><title></title>", "text/html", null);
      * webView.loadUrl("javascript:alert(injectedObject.toString())");</pre>
@@ -2274,7 +2320,6 @@
 
     /**
      * Sets the {@link TextClassifier} for this WebView.
-     * @hide
      */
     public void setTextClassifier(@Nullable TextClassifier textClassifier) {
         mProvider.setTextClassifier(textClassifier);
@@ -2283,7 +2328,6 @@
     /**
      * Returns the {@link TextClassifier} used by this WebView.
      * If no TextClassifier has been set, this WebView uses the default set by the system.
-     * @hide
      */
     @NonNull
     public TextClassifier getTextClassifier() {
@@ -2679,25 +2723,20 @@
      *   {@code IFRAME}, in which case it would be treated the same way as multiple forms described
      *   above, except that the {@link ViewStructure#setWebDomain(String) web domain} of the
      *   {@code FORM} contains the {@code src} attribute from the {@code IFRAME} node.
-     *   <li>If the Android SDK provides a similar View, then should be set with the
-     *   fully-qualified class name of such view.
      *   <li>The W3C autofill field ({@code autocomplete} tag attribute) maps to
-     *       {@link ViewStructure#setAutofillHints(String[])}.
-     *   <li>The {@code type} attribute of {@code INPUT} tags maps to
-     *       {@link ViewStructure#setInputType(int)}.
-     *   <li>The {@code value} attribute of {@code INPUT} tags maps to
-     *       {@link ViewStructure#setText(CharSequence)}.
-     *   <li>If the view is editalbe, the {@link ViewStructure#setAutofillType(int)} and
+     *   {@link ViewStructure#setAutofillHints(String[])}.
+     *   <li>If the view is editable, the {@link ViewStructure#setAutofillType(int)} and
      *   {@link ViewStructure#setAutofillValue(AutofillValue)} must be set.
      *   <li>The {@code placeholder} attribute maps to {@link ViewStructure#setHint(CharSequence)}.
      *   <li>Other HTML attributes can be represented through
      *   {@link ViewStructure#setHtmlInfo(android.view.ViewStructure.HtmlInfo)}.
      * </ol>
      *
-     * <p>It should also call {@code structure.setDataIsSensitive(false)} for fields whose value
-     * were not dynamically changed (for example, through Javascript).
+     * <p>If the WebView implementation can determine that the value of a field was set statically
+     * (for example, not through Javascript), it should also call
+     * {@code structure.setDataIsSensitive(false)}.
      *
-     * <p>Example1: an HTML form with 2 fields for username and password.
+     * <p>For example, an HTML form with 2 fields for username and password:
      *
      * <pre class="prettyprint">
      *    &lt;input type="text" name="username" id="user" value="Type your username" autocomplete="username" placeholder="Email or username"&gt;
@@ -2710,51 +2749,27 @@
      *     int index = structure.addChildCount(2);
      *     ViewStructure username = structure.newChild(index);
      *     username.setAutofillId(structure.getAutofillId(), 1); // id 1 - first child
-     *     username.setClassName("input");
-     *     username.setInputType("android.widget.EditText");
      *     username.setAutofillHints("username");
      *     username.setHtmlInfo(username.newHtmlInfoBuilder("input")
      *         .addAttribute("type", "text")
      *         .addAttribute("name", "username")
-     *         .addAttribute("id", "user")
      *         .build());
      *     username.setHint("Email or username");
      *     username.setAutofillType(View.AUTOFILL_TYPE_TEXT);
      *     username.setAutofillValue(AutofillValue.forText("Type your username"));
-     *     username.setText("Type your username");
-     *     // Value of the field is not sensitive because it was not dynamically changed:
+     *     // Value of the field is not sensitive because it was created statically and not changed.
      *     username.setDataIsSensitive(false);
      *
      *     ViewStructure password = structure.newChild(index + 1);
      *     username.setAutofillId(structure, 2); // id 2 - second child
-     *     password.setInputType("android.widget.EditText");
-     *     password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
      *     password.setAutofillHints("current-password");
      *     password.setHtmlInfo(password.newHtmlInfoBuilder("input")
      *         .addAttribute("type", "password")
      *         .addAttribute("name", "password")
-     *         .addAttribute("id", "pass")
      *         .build());
      *     password.setHint("Password");
      *     password.setAutofillType(View.AUTOFILL_TYPE_TEXT);
      * </pre>
-     *
-     * <p>Example2: an IFRAME tag.
-     *
-     * <pre class="prettyprint">
-     *    &lt;iframe src="https://example.com/login"/&gt;
-     * </pre>
-     *
-     * <p>Would map to:
-     *
-     * <pre class="prettyprint">
-     *     int index = structure.addChildCount(1);
-     *     ViewStructure iframe = structure.newChildFor(index);
-     *     iframe.setAutofillId(structure.getAutofillId(), 1);
-     *     iframe.setHtmlInfo(iframe.newHtmlInfoBuilder("iframe")
-     *         .addAttribute("src", "https://example.com/login")
-     *         .build());
-     * </pre>
      */
     @Override
     public void onProvideAutofillVirtualStructure(ViewStructure structure, int flags) {
diff --git a/core/java/android/webkit/WebViewClient.java b/core/java/android/webkit/WebViewClient.java
index 788908a..cbe75c4 100644
--- a/core/java/android/webkit/WebViewClient.java
+++ b/core/java/android/webkit/WebViewClient.java
@@ -16,6 +16,7 @@
 
 package android.webkit;
 
+import android.annotation.IntDef;
 import android.graphics.Bitmap;
 import android.net.http.SslError;
 import android.os.Message;
@@ -23,6 +24,9 @@
 import android.view.KeyEvent;
 import android.view.ViewRootImpl;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 public class WebViewClient {
 
     /**
@@ -150,6 +154,10 @@
      * other than the UI thread so clients should exercise caution
      * when accessing private data or the view system.
      *
+     * <p>Note: when Safe Browsing is enabled, these URLs still undergo Safe Browsing checks. If
+     * this is undesired, whitelist the URL with {@link WebView#setSafeBrowsingWhitelist} or ignore
+     * the warning with {@link #onSafeBrowsingHit}.
+     *
      * @param view The {@link android.webkit.WebView} that is requesting the
      *             resource.
      * @param url The raw url of the resource.
@@ -173,6 +181,10 @@
      * other than the UI thread so clients should exercise caution
      * when accessing private data or the view system.
      *
+     * <p>Note: when Safe Browsing is enabled, these URLs still undergo Safe Browsing checks. If
+     * this is undesired, whitelist the URL with {@link WebView#setSafeBrowsingWhitelist} or ignore
+     * the warning with {@link #onSafeBrowsingHit}.
+     *
      * @param view The {@link android.webkit.WebView} that is requesting the
      *             resource.
      * @param request Object containing the details of the request.
@@ -237,6 +249,25 @@
     /** Resource load was cancelled by Safe Browsing */
     public static final int ERROR_UNSAFE_RESOURCE = -16;
 
+    /** @hide */
+    @IntDef({
+        SAFE_BROWSING_THREAT_UNKNOWN,
+        SAFE_BROWSING_THREAT_MALWARE,
+        SAFE_BROWSING_THREAT_PHISHING,
+        SAFE_BROWSING_THREAT_UNWANTED_SOFTWARE
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface SafeBrowsingThreat {}
+
+    /** The resource was blocked for an unknown reason */
+    public static final int SAFE_BROWSING_THREAT_UNKNOWN = 0;
+    /** The resource was blocked because it contains malware */
+    public static final int SAFE_BROWSING_THREAT_MALWARE = 1;
+    /** The resource was blocked because it contains deceptive content */
+    public static final int SAFE_BROWSING_THREAT_PHISHING = 2;
+    /** The resource was blocked because it contains unwanted software */
+    public static final int SAFE_BROWSING_THREAT_UNWANTED_SOFTWARE = 3;
+
     /**
      * Report an error to the host application. These errors are unrecoverable
      * (i.e. the main resource is unavailable). The errorCode parameter
@@ -496,4 +527,24 @@
     public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) {
         return false;
     }
+
+    /**
+     * Notify the host application that a loading URL has been flagged by Safe Browsing.
+     *
+     * The application must invoke the callback to indicate the preferred response. The default
+     * behavior is to show an interstitial to the user, with the reporting checkbox visible.
+     *
+     * If the application needs to show its own custom interstitial UI, the callback can be invoked
+     * asynchronously with backToSafety() or proceed(), depending on user response.
+     *
+     * @param view The WebView that hit the malicious resource.
+     * @param request Object containing the details of the request.
+     * @param threatType The reason the resource was caught by Safe Browsing, corresponding to a
+     *                   SAFE_BROWSING_THREAT_* value.
+     * @param callback Applications must invoke one of the callback methods.
+     */
+    public void onSafeBrowsingHit(WebView view, WebResourceRequest request,
+            @SafeBrowsingThreat int threatType, SafeBrowsingResponse callback) {
+        callback.showInterstitial(/* allowReporting */ true);
+    }
 }
diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java
index 1b6b392..668cfba 100644
--- a/core/java/android/webkit/WebViewFactory.java
+++ b/core/java/android/webkit/WebViewFactory.java
@@ -18,7 +18,6 @@
 
 import android.annotation.SystemApi;
 import android.app.ActivityManager;
-import android.app.ActivityManagerInternal;
 import android.app.AppGlobals;
 import android.app.Application;
 import android.content.Context;
@@ -27,27 +26,15 @@
 import android.content.pm.PackageManager;
 import android.content.pm.Signature;
 import android.os.Build;
-import android.os.Process;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.StrictMode;
-import android.os.SystemProperties;
 import android.os.Trace;
-import android.text.TextUtils;
 import android.util.AndroidRuntimeException;
 import android.util.ArraySet;
 import android.util.Log;
 
-import com.android.server.LocalServices;
-
-import dalvik.system.VMRuntime;
-
 import java.lang.reflect.Method;
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
 
 /**
  * Top level factory, used creating all the main WebView implementation classes.
@@ -60,21 +47,15 @@
     // 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.WebViewChromiumFactoryProviderForO";
+            "com.android.webview.chromium.WebViewChromiumFactoryProviderForOMR1";
 
     private static final String CHROMIUM_WEBVIEW_FACTORY_METHOD = "create";
 
     private static final String NULL_WEBVIEW_FACTORY =
             "com.android.webview.nullwebview.NullWebViewFactoryProvider";
 
-    private static final String CHROMIUM_WEBVIEW_NATIVE_RELRO_32 =
-            "/data/misc/shared_relro/libwebviewchromium32.relro";
-    private static final String CHROMIUM_WEBVIEW_NATIVE_RELRO_64 =
-            "/data/misc/shared_relro/libwebviewchromium64.relro";
-
     public static final String CHROMIUM_WEBVIEW_VMSIZE_SIZE_PROPERTY =
             "persist.sys.webview.vmsize";
-    private static final long CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES = 100 * 1024 * 1024;
 
     private static final String LOGTAG = "WebViewFactory";
 
@@ -84,7 +65,6 @@
     // same provider.
     private static WebViewFactoryProvider sProviderInstance;
     private static final Object sProviderLock = new Object();
-    private static boolean sAddressSpaceReserved = false;
     private static PackageInfo sPackageInfo;
 
     // Error codes for loadWebViewNativeLibraryFromPackage
@@ -120,7 +100,7 @@
         return "Unknown";
     }
 
-    private static class MissingWebViewPackageException extends Exception {
+    static class MissingWebViewPackageException extends Exception {
         public MissingWebViewPackageException(String message) { super(message); }
         public MissingWebViewPackageException(Exception e) { super(e); }
     }
@@ -183,7 +163,7 @@
         }
 
         try {
-            int loadNativeRet = loadNativeLibrary(clazzLoader, packageInfo);
+            int loadNativeRet = WebViewLibraryLoader.loadNativeLibrary(clazzLoader, packageInfo);
             // If we failed waiting for relro we want to return that fact even if we successfully
             // load the relro file.
             if (loadNativeRet == LIBLOAD_SUCCESS) return response.status;
@@ -414,7 +394,7 @@
                 ClassLoader clazzLoader = webViewContext.getClassLoader();
 
                 Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "WebViewFactory.loadNativeLibrary()");
-                loadNativeLibrary(clazzLoader, sPackageInfo);
+                WebViewLibraryLoader.loadNativeLibrary(clazzLoader, sPackageInfo);
                 Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW);
 
                 Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "Class.forName()");
@@ -450,20 +430,7 @@
      */
     public static void prepareWebViewInZygote() {
         try {
-            System.loadLibrary("webviewchromium_loader");
-            long addressSpaceToReserve =
-                    SystemProperties.getLong(CHROMIUM_WEBVIEW_VMSIZE_SIZE_PROPERTY,
-                    CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES);
-            sAddressSpaceReserved = nativeReserveAddressSpace(addressSpaceToReserve);
-
-            if (sAddressSpaceReserved) {
-                if (DEBUG) {
-                    Log.v(LOGTAG, "address space reserved: " + addressSpaceToReserve + " bytes");
-                }
-            } else {
-                Log.e(LOGTAG, "reserving " + addressSpaceToReserve +
-                        " bytes of address space failed");
-            }
+            WebViewLibraryLoader.reserveAddressSpaceInZygote();
         } catch (Throwable t) {
             // Log and discard errors at this stage as we must not crash the zygote.
             Log.e(LOGTAG, "error preparing native loader", t);
@@ -479,13 +446,13 @@
         // waiting on relro creation.
         if (Build.SUPPORTED_32_BIT_ABIS.length > 0) {
             if (DEBUG) Log.v(LOGTAG, "Create 32 bit relro");
-            createRelroFile(false /* is64Bit */, nativeLibraryPaths);
+            WebViewLibraryLoader.createRelroFile(false /* is64Bit */, nativeLibraryPaths);
             numRelros++;
         }
 
         if (Build.SUPPORTED_64_BIT_ABIS.length > 0) {
             if (DEBUG) Log.v(LOGTAG, "Create 64 bit relro");
-            createRelroFile(true /* is64Bit */, nativeLibraryPaths);
+            WebViewLibraryLoader.createRelroFile(true /* is64Bit */, nativeLibraryPaths);
             numRelros++;
         }
         return numRelros;
@@ -501,49 +468,7 @@
             fixupStubApplicationInfo(packageInfo.applicationInfo,
                                      AppGlobals.getInitialApplication().getPackageManager());
 
-            nativeLibs = WebViewFactory.getWebViewNativeLibraryPaths(packageInfo);
-            if (nativeLibs != null) {
-                long newVmSize = 0L;
-
-                for (String path : nativeLibs) {
-                    if (path == null || TextUtils.isEmpty(path)) continue;
-                    if (DEBUG) Log.d(LOGTAG, "Checking file size of " + path);
-                    File f = new File(path);
-                    if (f.exists()) {
-                        newVmSize = Math.max(newVmSize, f.length());
-                        continue;
-                    }
-                    if (path.contains("!/")) {
-                        String[] split = TextUtils.split(path, "!/");
-                        if (split.length == 2) {
-                            try (ZipFile z = new ZipFile(split[0])) {
-                                ZipEntry e = z.getEntry(split[1]);
-                                if (e != null && e.getMethod() == ZipEntry.STORED) {
-                                    newVmSize = Math.max(newVmSize, e.getSize());
-                                    continue;
-                                }
-                            }
-                            catch (IOException e) {
-                                Log.e(LOGTAG, "error reading APK file " + split[0] + ", ", e);
-                            }
-                        }
-                    }
-                    Log.e(LOGTAG, "error sizing load for " + path);
-                }
-
-                if (DEBUG) {
-                    Log.v(LOGTAG, "Based on library size, need " + newVmSize +
-                            " bytes of address space.");
-                }
-                // The required memory can be larger than the file on disk (due to .bss), and an
-                // upgraded version of the library will likely be larger, so always attempt to
-                // reserve twice as much as we think to allow for the library to grow during this
-                // boot cycle.
-                newVmSize = Math.max(2 * newVmSize, CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES);
-                Log.d(LOGTAG, "Setting new address space to " + newVmSize);
-                SystemProperties.set(CHROMIUM_WEBVIEW_VMSIZE_SIZE_PROPERTY,
-                        Long.toString(newVmSize));
-            }
+            nativeLibs = WebViewLibraryLoader.updateWebViewZygoteVmSize(packageInfo);
         } catch (Throwable t) {
             // Log and discard errors at this stage as we must not crash the system server.
             Log.e(LOGTAG, "error preparing webview native library", t);
@@ -554,173 +479,6 @@
         return prepareWebViewInSystemServer(nativeLibs);
     }
 
-    private static String getLoadFromApkPath(String apkPath,
-                                             String[] abiList,
-                                             String nativeLibFileName)
-            throws MissingWebViewPackageException {
-        // Search the APK for a native library conforming to a listed ABI.
-        try (ZipFile z = new ZipFile(apkPath)) {
-            for (String abi : abiList) {
-                final String entry = "lib/" + abi + "/" + nativeLibFileName;
-                ZipEntry e = z.getEntry(entry);
-                if (e != null && e.getMethod() == ZipEntry.STORED) {
-                    // Return a path formatted for dlopen() load from APK.
-                    return apkPath + "!/" + entry;
-                }
-            }
-        } catch (IOException e) {
-            throw new MissingWebViewPackageException(e);
-        }
-        return "";
-    }
-
-    private static String[] getWebViewNativeLibraryPaths(PackageInfo packageInfo)
-            throws MissingWebViewPackageException {
-        ApplicationInfo ai = packageInfo.applicationInfo;
-        final String NATIVE_LIB_FILE_NAME = getWebViewLibrary(ai);
-
-        String path32;
-        String path64;
-        boolean primaryArchIs64bit = VMRuntime.is64BitAbi(ai.primaryCpuAbi);
-        if (!TextUtils.isEmpty(ai.secondaryCpuAbi)) {
-            // Multi-arch case.
-            if (primaryArchIs64bit) {
-                // Primary arch: 64-bit, secondary: 32-bit.
-                path64 = ai.nativeLibraryDir;
-                path32 = ai.secondaryNativeLibraryDir;
-            } else {
-                // Primary arch: 32-bit, secondary: 64-bit.
-                path64 = ai.secondaryNativeLibraryDir;
-                path32 = ai.nativeLibraryDir;
-            }
-        } else if (primaryArchIs64bit) {
-            // Single-arch 64-bit.
-            path64 = ai.nativeLibraryDir;
-            path32 = "";
-        } else {
-            // Single-arch 32-bit.
-            path32 = ai.nativeLibraryDir;
-            path64 = "";
-        }
-
-        // Form the full paths to the extracted native libraries.
-        // If libraries were not extracted, try load from APK paths instead.
-        if (!TextUtils.isEmpty(path32)) {
-            path32 += "/" + NATIVE_LIB_FILE_NAME;
-            File f = new File(path32);
-            if (!f.exists()) {
-                path32 = getLoadFromApkPath(ai.sourceDir,
-                                            Build.SUPPORTED_32_BIT_ABIS,
-                                            NATIVE_LIB_FILE_NAME);
-            }
-        }
-        if (!TextUtils.isEmpty(path64)) {
-            path64 += "/" + NATIVE_LIB_FILE_NAME;
-            File f = new File(path64);
-            if (!f.exists()) {
-                path64 = getLoadFromApkPath(ai.sourceDir,
-                                            Build.SUPPORTED_64_BIT_ABIS,
-                                            NATIVE_LIB_FILE_NAME);
-            }
-        }
-
-        if (DEBUG) Log.v(LOGTAG, "Native 32-bit lib: " + path32 + ", 64-bit lib: " + path64);
-        return new String[] { path32, path64 };
-    }
-
-    private static void createRelroFile(final boolean is64Bit, String[] nativeLibraryPaths) {
-        final String abi =
-                is64Bit ? Build.SUPPORTED_64_BIT_ABIS[0] : Build.SUPPORTED_32_BIT_ABIS[0];
-
-        // crashHandler is invoked by the ActivityManagerService when the isolated process crashes.
-        Runnable crashHandler = new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    Log.e(LOGTAG, "relro file creator for " + abi + " crashed. Proceeding without");
-                    getUpdateService().notifyRelroCreationCompleted();
-                } catch (RemoteException e) {
-                    Log.e(LOGTAG, "Cannot reach WebViewUpdateService. " + e.getMessage());
-                }
-            }
-        };
-
-        try {
-            if (nativeLibraryPaths == null
-                    || nativeLibraryPaths[0] == null || nativeLibraryPaths[1] == null) {
-                throw new IllegalArgumentException(
-                        "Native library paths to the WebView RelRo process must not be null!");
-            }
-            int pid = LocalServices.getService(ActivityManagerInternal.class).startIsolatedProcess(
-                    RelroFileCreator.class.getName(), nativeLibraryPaths, "WebViewLoader-" + abi, abi,
-                    Process.SHARED_RELRO_UID, crashHandler);
-            if (pid <= 0) throw new Exception("Failed to start the relro file creator process");
-        } catch (Throwable t) {
-            // Log and discard errors as we must not crash the system server.
-            Log.e(LOGTAG, "error starting relro file creator for abi " + abi, t);
-            crashHandler.run();
-        }
-    }
-
-    private static class RelroFileCreator {
-        // Called in an unprivileged child process to create the relro file.
-        public static void main(String[] args) {
-            boolean result = false;
-            boolean is64Bit = VMRuntime.getRuntime().is64Bit();
-            try{
-                if (args.length != 2 || args[0] == null || args[1] == null) {
-                    Log.e(LOGTAG, "Invalid RelroFileCreator args: " + Arrays.toString(args));
-                    return;
-                }
-                Log.v(LOGTAG, "RelroFileCreator (64bit = " + is64Bit + "), " +
-                        " 32-bit lib: " + args[0] + ", 64-bit lib: " + args[1]);
-                if (!sAddressSpaceReserved) {
-                    Log.e(LOGTAG, "can't create relro file; address space not reserved");
-                    return;
-                }
-                result = nativeCreateRelroFile(args[0] /* path32 */,
-                                               args[1] /* path64 */,
-                                               CHROMIUM_WEBVIEW_NATIVE_RELRO_32,
-                                               CHROMIUM_WEBVIEW_NATIVE_RELRO_64);
-                if (result && DEBUG) Log.v(LOGTAG, "created relro file");
-            } finally {
-                // We must do our best to always notify the update service, even if something fails.
-                try {
-                    getUpdateService().notifyRelroCreationCompleted();
-                } catch (RemoteException e) {
-                    Log.e(LOGTAG, "error notifying update service", e);
-                }
-
-                if (!result) Log.e(LOGTAG, "failed to create relro file");
-
-                // Must explicitly exit or else this process will just sit around after we return.
-                System.exit(0);
-            }
-        }
-    }
-
-    // Assumes that we have waited for relro creation
-    private static int loadNativeLibrary(ClassLoader clazzLoader, PackageInfo packageInfo)
-            throws MissingWebViewPackageException {
-        if (!sAddressSpaceReserved) {
-            Log.e(LOGTAG, "can't load with relro file; address space not reserved");
-            return LIBLOAD_ADDRESS_SPACE_NOT_RESERVED;
-        }
-
-        String[] args = getWebViewNativeLibraryPaths(packageInfo);
-        int result = nativeLoadWithRelroFile(args[0] /* path32 */,
-                                             args[1] /* path64 */,
-                                             CHROMIUM_WEBVIEW_NATIVE_RELRO_32,
-                                             CHROMIUM_WEBVIEW_NATIVE_RELRO_64,
-                                             clazzLoader);
-        if (result != LIBLOAD_SUCCESS) {
-            Log.w(LOGTAG, "failed to load with relro file, proceeding without");
-        } else if (DEBUG) {
-            Log.v(LOGTAG, "loaded with relro file");
-        }
-        return result;
-    }
-
     private static String WEBVIEW_UPDATE_SERVICE_NAME = "webviewupdate";
 
     /** @hide */
@@ -728,11 +486,4 @@
         return IWebViewUpdateService.Stub.asInterface(
                 ServiceManager.getService(WEBVIEW_UPDATE_SERVICE_NAME));
     }
-
-    private static native boolean nativeReserveAddressSpace(long addressSpaceToReserve);
-    private static native boolean nativeCreateRelroFile(String lib32, String lib64,
-                                                        String relro32, String relro64);
-    private static native int nativeLoadWithRelroFile(String lib32, String lib64,
-                                                      String relro32, String relro64,
-                                                      ClassLoader clazzLoader);
 }
diff --git a/core/java/android/webkit/WebViewFactoryProvider.java b/core/java/android/webkit/WebViewFactoryProvider.java
index 00fdac8..4c47abc 100644
--- a/core/java/android/webkit/WebViewFactoryProvider.java
+++ b/core/java/android/webkit/WebViewFactoryProvider.java
@@ -16,11 +16,14 @@
 
 package android.webkit;
 
+import android.annotation.NonNull;
 import android.annotation.SystemApi;
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
 
+import java.util.List;
+
 /**
  * This is the main entry-point into the WebView back end implementations, which the WebView
  * proxy class uses to instantiate all the other objects as needed. The backend must provide an
@@ -77,19 +80,23 @@
 
         /**
          * Implement the API method
-         * {@link android.webkit.WebView#initSafeBrowsing(Context , ValueCallback<Boolean>)}
-         * @hide
+         * {@link android.webkit.WebView#startSafeBrowsing(Context , ValueCallback<Boolean>)}
          */
-        default void initSafeBrowsing(Context context, ValueCallback<Boolean> callback) {
-        }
+        void initSafeBrowsing(Context context, ValueCallback<Boolean> callback);
+
+        /**
+        * Implement the API method
+        * {@link android.webkit.WebView#setSafeBrowsingWhitelist(List<String>,
+        * ValueCallback<Boolean>)}
+        */
+        void setSafeBrowsingWhitelist(List<String> urls, ValueCallback<Boolean> callback);
 
         /**
          * Implement the API method
-         * {@link android.webkit.WebView#shutdownSafeBrowsing()}
-         * @hide
+         * {@link android.webkit.WebView#getSafeBrowsingPrivacyPolicyUrl()}
          */
-        default void shutdownSafeBrowsing() {
-        }
+        @NonNull
+        Uri getSafeBrowsingPrivacyPolicyUrl();
     }
 
     Statics getStatics();
diff --git a/core/java/android/webkit/WebViewLibraryLoader.java b/core/java/android/webkit/WebViewLibraryLoader.java
new file mode 100644
index 0000000..6f9e8ec
--- /dev/null
+++ b/core/java/android/webkit/WebViewLibraryLoader.java
@@ -0,0 +1,320 @@
+/*
+ * 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.webkit;
+
+import android.app.ActivityManagerInternal;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.os.Build;
+import android.os.Process;
+import android.os.RemoteException;
+import android.os.SystemProperties;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.server.LocalServices;
+
+import dalvik.system.VMRuntime;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+class WebViewLibraryLoader {
+    private static final String LOGTAG = WebViewLibraryLoader.class.getSimpleName();
+
+    private static final String CHROMIUM_WEBVIEW_NATIVE_RELRO_32 =
+            "/data/misc/shared_relro/libwebviewchromium32.relro";
+    private static final String CHROMIUM_WEBVIEW_NATIVE_RELRO_64 =
+            "/data/misc/shared_relro/libwebviewchromium64.relro";
+    private static final long CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES = 100 * 1024 * 1024;
+
+    private static final boolean DEBUG = false;
+
+    private static boolean sAddressSpaceReserved = false;
+
+    /**
+     * Private class for running the actual relro creation in an unprivileged child process.
+     * RelroFileCreator is a static class (without access to the outer class) to avoid accidentally
+     * using any static members from the outer class. Those members will in reality differ between
+     * the child process in which RelroFileCreator operates, and the app process in which the static
+     * members of this class are used.
+     */
+    private static class RelroFileCreator {
+        // Called in an unprivileged child process to create the relro file.
+        public static void main(String[] args) {
+            boolean result = false;
+            boolean is64Bit = VMRuntime.getRuntime().is64Bit();
+            try {
+                if (args.length != 2 || args[0] == null || args[1] == null) {
+                    Log.e(LOGTAG, "Invalid RelroFileCreator args: " + Arrays.toString(args));
+                    return;
+                }
+                Log.v(LOGTAG, "RelroFileCreator (64bit = " + is64Bit + "), "
+                        + " 32-bit lib: " + args[0] + ", 64-bit lib: " + args[1]);
+                if (!sAddressSpaceReserved) {
+                    Log.e(LOGTAG, "can't create relro file; address space not reserved");
+                    return;
+                }
+                result = nativeCreateRelroFile(args[0] /* path32 */,
+                                               args[1] /* path64 */,
+                                               CHROMIUM_WEBVIEW_NATIVE_RELRO_32,
+                                               CHROMIUM_WEBVIEW_NATIVE_RELRO_64);
+                if (result && DEBUG) Log.v(LOGTAG, "created relro file");
+            } finally {
+                // We must do our best to always notify the update service, even if something fails.
+                try {
+                    WebViewFactory.getUpdateService().notifyRelroCreationCompleted();
+                } catch (RemoteException e) {
+                    Log.e(LOGTAG, "error notifying update service", e);
+                }
+
+                if (!result) Log.e(LOGTAG, "failed to create relro file");
+
+                // Must explicitly exit or else this process will just sit around after we return.
+                System.exit(0);
+            }
+        }
+    }
+
+    /**
+     * Create a single relro file by invoking an isolated process that to do the actual work.
+     */
+    static void createRelroFile(final boolean is64Bit, String[] nativeLibraryPaths) {
+        final String abi =
+                is64Bit ? Build.SUPPORTED_64_BIT_ABIS[0] : Build.SUPPORTED_32_BIT_ABIS[0];
+
+        // crashHandler is invoked by the ActivityManagerService when the isolated process crashes.
+        Runnable crashHandler = new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    Log.e(LOGTAG, "relro file creator for " + abi + " crashed. Proceeding without");
+                    WebViewFactory.getUpdateService().notifyRelroCreationCompleted();
+                } catch (RemoteException e) {
+                    Log.e(LOGTAG, "Cannot reach WebViewUpdateService. " + e.getMessage());
+                }
+            }
+        };
+
+        try {
+            if (nativeLibraryPaths == null
+                    || nativeLibraryPaths[0] == null || nativeLibraryPaths[1] == null) {
+                throw new IllegalArgumentException(
+                        "Native library paths to the WebView RelRo process must not be null!");
+            }
+            int pid = LocalServices.getService(ActivityManagerInternal.class).startIsolatedProcess(
+                    RelroFileCreator.class.getName(), nativeLibraryPaths,
+                    "WebViewLoader-" + abi, abi, Process.SHARED_RELRO_UID, crashHandler);
+            if (pid <= 0) throw new Exception("Failed to start the relro file creator process");
+        } catch (Throwable t) {
+            // Log and discard errors as we must not crash the system server.
+            Log.e(LOGTAG, "error starting relro file creator for abi " + abi, t);
+            crashHandler.run();
+        }
+    }
+
+    /**
+     *
+     * @return the native WebView libraries in the new WebView APK.
+     */
+    static String[] updateWebViewZygoteVmSize(PackageInfo packageInfo)
+            throws WebViewFactory.MissingWebViewPackageException {
+        // Find the native libraries of the new WebView package, to change the size of the
+        // memory region in the Zygote reserved for the library.
+        String[] nativeLibs = getWebViewNativeLibraryPaths(packageInfo);
+        if (nativeLibs != null) {
+            long newVmSize = 0L;
+
+            for (String path : nativeLibs) {
+                if (path == null || TextUtils.isEmpty(path)) continue;
+                if (DEBUG) Log.d(LOGTAG, "Checking file size of " + path);
+                File f = new File(path);
+                if (f.exists()) {
+                    newVmSize = Math.max(newVmSize, f.length());
+                    continue;
+                }
+                if (path.contains("!/")) {
+                    String[] split = TextUtils.split(path, "!/");
+                    if (split.length == 2) {
+                        try (ZipFile z = new ZipFile(split[0])) {
+                            ZipEntry e = z.getEntry(split[1]);
+                            if (e != null && e.getMethod() == ZipEntry.STORED) {
+                                newVmSize = Math.max(newVmSize, e.getSize());
+                                continue;
+                            }
+                        }
+                        catch (IOException e) {
+                            Log.e(LOGTAG, "error reading APK file " + split[0] + ", ", e);
+                        }
+                    }
+                }
+                Log.e(LOGTAG, "error sizing load for " + path);
+            }
+
+            if (DEBUG) {
+                Log.v(LOGTAG, "Based on library size, need " + newVmSize
+                        + " bytes of address space.");
+            }
+            // The required memory can be larger than the file on disk (due to .bss), and an
+            // upgraded version of the library will likely be larger, so always attempt to
+            // reserve twice as much as we think to allow for the library to grow during this
+            // boot cycle.
+            newVmSize = Math.max(2 * newVmSize, CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES);
+            Log.d(LOGTAG, "Setting new address space to " + newVmSize);
+            setWebViewZygoteVmSize(newVmSize);
+        }
+        return nativeLibs;
+    }
+
+    /**
+     * Reserve space for the native library to be loaded into.
+     */
+    static void reserveAddressSpaceInZygote() {
+        System.loadLibrary("webviewchromium_loader");
+        long addressSpaceToReserve =
+                SystemProperties.getLong(WebViewFactory.CHROMIUM_WEBVIEW_VMSIZE_SIZE_PROPERTY,
+                CHROMIUM_WEBVIEW_DEFAULT_VMSIZE_BYTES);
+        sAddressSpaceReserved = nativeReserveAddressSpace(addressSpaceToReserve);
+
+        if (sAddressSpaceReserved) {
+            if (DEBUG) {
+                Log.v(LOGTAG, "address space reserved: " + addressSpaceToReserve + " bytes");
+            }
+        } else {
+            Log.e(LOGTAG, "reserving " + addressSpaceToReserve + " bytes of address space failed");
+        }
+    }
+
+    /**
+     * Load WebView's native library into the current process.
+     * Note: assumes that we have waited for relro creation.
+     * @param clazzLoader class loader used to find the linker namespace to load the library into.
+     * @param packageInfo the package from which WebView is loaded.
+     */
+    static int loadNativeLibrary(ClassLoader clazzLoader, PackageInfo packageInfo)
+            throws WebViewFactory.MissingWebViewPackageException {
+        if (!sAddressSpaceReserved) {
+            Log.e(LOGTAG, "can't load with relro file; address space not reserved");
+            return WebViewFactory.LIBLOAD_ADDRESS_SPACE_NOT_RESERVED;
+        }
+
+        final String libraryFileName =
+                WebViewFactory.getWebViewLibrary(packageInfo.applicationInfo);
+        int result = nativeLoadWithRelroFile(libraryFileName, CHROMIUM_WEBVIEW_NATIVE_RELRO_32,
+                                             CHROMIUM_WEBVIEW_NATIVE_RELRO_64, clazzLoader);
+        if (result != WebViewFactory.LIBLOAD_SUCCESS) {
+            Log.w(LOGTAG, "failed to load with relro file, proceeding without");
+        } else if (DEBUG) {
+            Log.v(LOGTAG, "loaded with relro file");
+        }
+        return result;
+    }
+
+    /**
+     * Fetch WebView's native library paths from {@param packageInfo}.
+     */
+    static String[] getWebViewNativeLibraryPaths(PackageInfo packageInfo)
+            throws WebViewFactory.MissingWebViewPackageException {
+        ApplicationInfo ai = packageInfo.applicationInfo;
+        final String nativeLibFileName = WebViewFactory.getWebViewLibrary(ai);
+
+        String path32;
+        String path64;
+        boolean primaryArchIs64bit = VMRuntime.is64BitAbi(ai.primaryCpuAbi);
+        if (!TextUtils.isEmpty(ai.secondaryCpuAbi)) {
+            // Multi-arch case.
+            if (primaryArchIs64bit) {
+                // Primary arch: 64-bit, secondary: 32-bit.
+                path64 = ai.nativeLibraryDir;
+                path32 = ai.secondaryNativeLibraryDir;
+            } else {
+                // Primary arch: 32-bit, secondary: 64-bit.
+                path64 = ai.secondaryNativeLibraryDir;
+                path32 = ai.nativeLibraryDir;
+            }
+        } else if (primaryArchIs64bit) {
+            // Single-arch 64-bit.
+            path64 = ai.nativeLibraryDir;
+            path32 = "";
+        } else {
+            // Single-arch 32-bit.
+            path32 = ai.nativeLibraryDir;
+            path64 = "";
+        }
+
+        // Form the full paths to the extracted native libraries.
+        // If libraries were not extracted, try load from APK paths instead.
+        if (!TextUtils.isEmpty(path32)) {
+            path32 += "/" + nativeLibFileName;
+            File f = new File(path32);
+            if (!f.exists()) {
+                path32 = getLoadFromApkPath(ai.sourceDir,
+                                            Build.SUPPORTED_32_BIT_ABIS,
+                                            nativeLibFileName);
+            }
+        }
+        if (!TextUtils.isEmpty(path64)) {
+            path64 += "/" + nativeLibFileName;
+            File f = new File(path64);
+            if (!f.exists()) {
+                path64 = getLoadFromApkPath(ai.sourceDir,
+                                            Build.SUPPORTED_64_BIT_ABIS,
+                                            nativeLibFileName);
+            }
+        }
+
+        if (DEBUG) Log.v(LOGTAG, "Native 32-bit lib: " + path32 + ", 64-bit lib: " + path64);
+        return new String[] { path32, path64 };
+    }
+
+    private static String getLoadFromApkPath(String apkPath,
+                                             String[] abiList,
+                                             String nativeLibFileName)
+            throws WebViewFactory.MissingWebViewPackageException {
+        // Search the APK for a native library conforming to a listed ABI.
+        try (ZipFile z = new ZipFile(apkPath)) {
+            for (String abi : abiList) {
+                final String entry = "lib/" + abi + "/" + nativeLibFileName;
+                ZipEntry e = z.getEntry(entry);
+                if (e != null && e.getMethod() == ZipEntry.STORED) {
+                    // Return a path formatted for dlopen() load from APK.
+                    return apkPath + "!/" + entry;
+                }
+            }
+        } catch (IOException e) {
+            throw new WebViewFactory.MissingWebViewPackageException(e);
+        }
+        return "";
+    }
+
+    /**
+     * Sets the size of the memory area in which to store the relro section.
+     */
+    private static void setWebViewZygoteVmSize(long vmSize) {
+        SystemProperties.set(WebViewFactory.CHROMIUM_WEBVIEW_VMSIZE_SIZE_PROPERTY,
+                Long.toString(vmSize));
+    }
+
+    static native boolean nativeReserveAddressSpace(long addressSpaceToReserve);
+    static native boolean nativeCreateRelroFile(String lib32, String lib64,
+                                                        String relro32, String relro64);
+    static native int nativeLoadWithRelroFile(String lib, String relro32, String relro64,
+                                                      ClassLoader clazzLoader);
+}
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 5476ab2..bb4f0a4 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -88,7 +88,7 @@
 
 /**
  * Base class that can be used to implement virtualized lists of items. A list does
- * not have a spatial definition here. For instance, subclases of this class can
+ * not have a spatial definition here. For instance, subclasses of this class can
  * display the content of the list in a grid, in a carousel, as stack, etc.
  *
  * @attr ref android.R.styleable#AbsListView_listSelector
@@ -913,14 +913,7 @@
                 mCheckedIdStates = new LongSparseArray<Integer>();
             }
         }
-
-        if (mCheckStates != null) {
-            mCheckStates.clear();
-        }
-
-        if (mCheckedIdStates != null) {
-            mCheckedIdStates.clear();
-        }
+        clearChoices();
     }
 
     /**
diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java
index dd01251..6c19256 100644
--- a/core/java/android/widget/AdapterView.java
+++ b/core/java/android/widget/AdapterView.java
@@ -202,7 +202,7 @@
      * The last selected position we used when notifying
      */
     int mOldSelectedPosition = INVALID_POSITION;
-    
+
     /**
      * The id of the last selected position we used when notifying
      */
@@ -382,7 +382,7 @@
          * position is different from the previously selected position or if
          * there was no selected item.</p>
          *
-         * Impelmenters can call getItemAtPosition(position) if they need to access the
+         * Implementers can call getItemAtPosition(position) if they need to access the
          * data associated with the selected item.
          *
          * @param parent The AdapterView where the selection happened
@@ -778,8 +778,8 @@
             // We are now GONE, so pending layouts will not be dispatched.
             // Force one here to make sure that the state of the list matches
             // the state of the adapter.
-            if (mDataChanged) {           
-                this.onLayout(false, mLeft, mTop, mRight, mBottom); 
+            if (mDataChanged) {
+                this.onLayout(false, mLeft, mTop, mRight, mBottom);
             }
         } else {
             if (mEmptyView != null) mEmptyView.setVisibility(View.GONE);
@@ -1304,4 +1304,4 @@
             structure.setAutofillOptions(options);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/core/java/android/widget/ArrayAdapter.java b/core/java/android/widget/ArrayAdapter.java
index 74f22b3..690067b 100644
--- a/core/java/android/widget/ArrayAdapter.java
+++ b/core/java/android/widget/ArrayAdapter.java
@@ -526,6 +526,13 @@
      */
     @Override
     public CharSequence[] getAutofillOptions() {
+        // First check if app developer explicitly set them.
+        final CharSequence[] explicitOptions = super.getAutofillOptions();
+        if (explicitOptions != null) {
+            return explicitOptions;
+        }
+
+        // Otherwise, only return options that came from static resources.
         if (!mObjectsFromResources || mObjects == null || mObjects.isEmpty()) {
             return null;
         }
diff --git a/core/java/android/widget/BaseAdapter.java b/core/java/android/widget/BaseAdapter.java
index c960342..5838cc1 100644
--- a/core/java/android/widget/BaseAdapter.java
+++ b/core/java/android/widget/BaseAdapter.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.Nullable;
 import android.database.DataSetObservable;
 import android.database.DataSetObserver;
 import android.view.View;
@@ -29,6 +30,7 @@
  */
 public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {
     private final DataSetObservable mDataSetObservable = new DataSetObservable();
+    private CharSequence[] mAutofillOptions;
 
     public boolean hasStableIds() {
         return false;
@@ -82,4 +84,16 @@
     public boolean isEmpty() {
         return getCount() == 0;
     }
+
+    @Override
+    public CharSequence[] getAutofillOptions() {
+        return mAutofillOptions;
+    }
+
+    /**
+     * Sets the value returned by {@link #getAutofillOptions()}
+     */
+    public void setAutofillOptions(@Nullable CharSequence... options) {
+        mAutofillOptions = options;
+    }
 }
diff --git a/core/java/android/widget/Button.java b/core/java/android/widget/Button.java
index 452ff17..634cbe3 100644
--- a/core/java/android/widget/Button.java
+++ b/core/java/android/widget/Button.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.util.AttributeSet;
+import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.PointerIcon;
 import android.widget.RemoteViews.RemoteView;
@@ -54,7 +55,7 @@
  *     }
  * }</pre>
  *
- * <p>The above snippet creates an instance of {@link View.OnClickListener} and wires
+ * <p>The above snippet creates an instance of {@link android.view.View.OnClickListener} and wires
  * the listener to the button using
  * {@link #setOnClickListener setOnClickListener(View.OnClickListener)}.
  * As a result, the system executes the code you write in {@code onClick(View)} after the
@@ -77,15 +78,8 @@
  * {@link android.R.styleable#Button Button Attributes},
  * {@link android.R.styleable#TextView TextView Attributes},
  * {@link android.R.styleable#View View Attributes}.  See the
- * {@link <a href="{@docRoot}guide/topics/ui/themes.html#ApplyingStyles">Styles and Themes</a>
+ * <a href="{@docRoot}guide/topics/ui/themes.html#ApplyingStyles">Styles and Themes</a>
  * guide to learn how to implement and organize overrides to style-related attributes.</p>
- *
- * @see
- * <a href="{@docRoot}guide/topics/ui/controls/button.html">Buttons Guide</a>
- * {@link android.R.styleable#Button Styleable Button Attributes},
- * {@link android.R.styleable#TextView Styleable TextView Attributes},
- * {@link android.R.styleable#View Styleable View Attributes},
- *
  */
 @RemoteView
 public class Button extends TextView {
diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java
index 8094bfc..dfb3642 100644
--- a/core/java/android/widget/DatePicker.java
+++ b/core/java/android/widget/DatePicker.java
@@ -524,12 +524,13 @@
         void setAutoFillChangeListener(OnDateChangedListener onDateChangedListener);
 
         void updateDate(int year, int month, int dayOfMonth);
-        void updateDate(long date);
 
         int getYear();
         int getMonth();
         int getDayOfMonth();
-        long getDate();
+
+        void autofill(AutofillValue value);
+        AutofillValue getAutofillValue();
 
         void setFirstDayOfWeek(int firstDayOfWeek);
         int getFirstDayOfWeek();
@@ -572,6 +573,7 @@
         // The context
         protected Context mContext;
 
+        // NOTE: when subclasses change this variable, they must call resetAutofilledValue().
         protected Calendar mCurrentDate;
 
         // The current locale
@@ -582,6 +584,11 @@
         protected OnDateChangedListener mAutoFillChangeListener;
         protected ValidationCallback mValidationCallback;
 
+        // The value that was passed to autofill() - it must be stored because it getAutofillValue()
+        // must return the exact same value that was autofilled, otherwise the widget will not be
+        // properly highlighted after autofill().
+        private long mAutofilledValue;
+
         public AbstractDatePickerDelegate(DatePicker delegator, Context context) {
             mDelegator = delegator;
             mContext = context;
@@ -612,16 +619,38 @@
         }
 
         @Override
-        public void updateDate(long date) {
-            Calendar cal = Calendar.getInstance(mCurrentLocale);
-            cal.setTimeInMillis(date);
+        public final void autofill(AutofillValue value) {
+            if (value == null || !value.isDate()) {
+                Log.w(LOG_TAG, value + " could not be autofilled into " + this);
+                return;
+            }
+
+            final long time = value.getDateValue();
+
+            final Calendar cal = Calendar.getInstance(mCurrentLocale);
+            cal.setTimeInMillis(time);
             updateDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
                     cal.get(Calendar.DAY_OF_MONTH));
+
+            // Must set mAutofilledValue *after* calling subclass method to make sure the value
+            // returned by getAutofillValue() matches it.
+            mAutofilledValue = time;
         }
 
         @Override
-        public long getDate() {
-            return mCurrentDate.getTimeInMillis();
+        public final AutofillValue getAutofillValue() {
+            final long time = mAutofilledValue != 0
+                    ? mAutofilledValue
+                    : mCurrentDate.getTimeInMillis();
+            return AutofillValue.forDate(time);
+        }
+
+        /**
+         * This method must be called every time the value of the year, month, and/or day is
+         * changed by a subclass method.
+         */
+        protected void resetAutofilledValue() {
+            mAutofilledValue = 0;
         }
 
         protected void onValidationChanged(boolean valid) {
@@ -777,12 +806,7 @@
     public void autofill(AutofillValue value) {
         if (!isEnabled()) return;
 
-        if (!value.isDate()) {
-            Log.w(LOG_TAG, value + " could not be autofilled into " + this);
-            return;
-        }
-
-        mDelegate.updateDate(value.getDateValue());
+        mDelegate.autofill(value);
     }
 
     @Override
@@ -792,6 +816,6 @@
 
     @Override
     public AutofillValue getAutofillValue() {
-        return isEnabled() ? AutofillValue.forDate(mDelegate.getDate()) : null;
+        return isEnabled() ? mDelegate.getAutofillValue() : null;
     }
 }
diff --git a/core/java/android/widget/DatePickerCalendarDelegate.java b/core/java/android/widget/DatePickerCalendarDelegate.java
index 636519b..e40023d 100755
--- a/core/java/android/widget/DatePickerCalendarDelegate.java
+++ b/core/java/android/widget/DatePickerCalendarDelegate.java
@@ -22,11 +22,10 @@
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.icu.text.DateFormat;
 import android.icu.text.DisplayContext;
-import android.icu.text.SimpleDateFormat;
 import android.icu.util.Calendar;
 import android.os.Parcelable;
-import android.text.format.DateFormat;
 import android.util.AttributeSet;
 import android.util.StateSet;
 import android.view.HapticFeedbackConstants;
@@ -62,8 +61,8 @@
     private static final int[] ATTRS_DISABLED_ALPHA = new int[] {
             com.android.internal.R.attr.disabledAlpha};
 
-    private SimpleDateFormat mYearFormat;
-    private SimpleDateFormat mMonthDayFormat;
+    private DateFormat mYearFormat;
+    private DateFormat mMonthDayFormat;
 
     // Top-level container.
     private ViewGroup mContainer;
@@ -273,19 +272,16 @@
     /**
      * Listener called when the user clicks on a header item.
      */
-    private final OnClickListener mOnHeaderClickListener = new OnClickListener() {
-        @Override
-        public void onClick(View v) {
-            tryVibrate();
+    private final OnClickListener mOnHeaderClickListener = v -> {
+        tryVibrate();
 
-            switch (v.getId()) {
-                case R.id.date_picker_header_year:
-                    setCurrentView(VIEW_YEAR);
-                    break;
-                case R.id.date_picker_header_date:
-                    setCurrentView(VIEW_MONTH_DAY);
-                    break;
-            }
+        switch (v.getId()) {
+            case R.id.date_picker_header_year:
+                setCurrentView(VIEW_YEAR);
+                break;
+            case R.id.date_picker_header_date:
+                setCurrentView(VIEW_MONTH_DAY);
+                break;
         }
     };
 
@@ -299,10 +295,9 @@
         }
 
         // Update the date formatter.
-        final String datePattern = DateFormat.getBestDateTimePattern(locale, "EMMMd");
-        mMonthDayFormat = new SimpleDateFormat(datePattern, locale);
+        mMonthDayFormat = DateFormat.getInstanceForSkeleton("EMMMd", locale);
         mMonthDayFormat.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE);
-        mYearFormat = new SimpleDateFormat("y", locale);
+        mYearFormat = DateFormat.getInstanceForSkeleton("y", locale);
 
         // Update the header text.
         onCurrentDateChanged(false);
@@ -344,14 +339,11 @@
             case VIEW_YEAR:
                 final int year = mCurrentDate.get(Calendar.YEAR);
                 mYearPickerView.setYear(year);
-                mYearPickerView.post(new Runnable() {
-                    @Override
-                    public void run() {
-                        mYearPickerView.requestFocus();
-                        final View selected = mYearPickerView.getSelectedView();
-                        if (selected != null) {
-                            selected.requestFocus();
-                        }
+                mYearPickerView.post(() -> {
+                    mYearPickerView.requestFocus();
+                    final View selected = mYearPickerView.getSelectedView();
+                    if (selected != null) {
+                        selected.requestFocus();
                     }
                 });
 
@@ -368,12 +360,9 @@
     }
 
     @Override
-    public void init(int year, int monthOfYear, int dayOfMonth,
+    public void init(int year, int month, int dayOfMonth,
             DatePicker.OnDateChangedListener callBack) {
-        mCurrentDate.set(Calendar.YEAR, year);
-        mCurrentDate.set(Calendar.MONTH, monthOfYear);
-        mCurrentDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
-
+        setDate(year, month, dayOfMonth);
         onDateChanged(false, false);
 
         mOnDateChangedListener = callBack;
@@ -381,11 +370,15 @@
 
     @Override
     public void updateDate(int year, int month, int dayOfMonth) {
+        setDate(year, month, dayOfMonth);
+        onDateChanged(false, true);
+    }
+
+    private void setDate(int year, int month, int dayOfMonth) {
         mCurrentDate.set(Calendar.YEAR, year);
         mCurrentDate.set(Calendar.MONTH, month);
         mCurrentDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
-
-        onDateChanged(false, true);
+        resetAutofilledValue();
     }
 
     private void onDateChanged(boolean fromUser, boolean callbackToClient) {
diff --git a/core/java/android/widget/DatePickerSpinnerDelegate.java b/core/java/android/widget/DatePickerSpinnerDelegate.java
index 4f9316f..dba74b1 100644
--- a/core/java/android/widget/DatePickerSpinnerDelegate.java
+++ b/core/java/android/widget/DatePickerSpinnerDelegate.java
@@ -504,6 +504,7 @@
 
     private void setDate(int year, int month, int dayOfMonth) {
         mCurrentDate.set(year, month, dayOfMonth);
+        resetAutofilledValue();
         if (mCurrentDate.before(mMinDate)) {
             mCurrentDate.setTimeInMillis(mMinDate.getTimeInMillis());
         } else if (mCurrentDate.after(mMaxDate)) {
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 6374aa2..92e8f44 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -83,6 +83,7 @@
 import android.view.DragAndDropPermissions;
 import android.view.DragEvent;
 import android.view.Gravity;
+import android.view.HapticFeedbackConstants;
 import android.view.InputDevice;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -176,6 +177,8 @@
     private boolean mInsertionControllerEnabled;
     private boolean mSelectionControllerEnabled;
 
+    private final boolean mHapticTextHandleEnabled;
+
     // Used to highlight a word when it is corrected by the IME
     private CorrectionHighlighter mCorrectionHighlighter;
 
@@ -320,6 +323,8 @@
         // Synchronize the filter list, which places the undo input filter at the end.
         mTextView.setFilters(mTextView.getFilters());
         mProcessTextIntentActionsHandler = new ProcessTextIntentActionsHandler(this);
+        mHapticTextHandleEnabled = mTextView.getContext().getResources().getBoolean(
+                com.android.internal.R.bool.config_enableHapticTextHandle);
     }
 
     ParcelableParcel saveInstanceState() {
@@ -1061,6 +1066,8 @@
     }
 
     private void startDragAndDrop() {
+        getSelectionActionModeHelper().onSelectionDrag();
+
         // TODO: Fix drag and drop in full screen extracted mode.
         if (mTextView.isInExtractedMode()) {
             return;
@@ -1244,7 +1251,8 @@
         }
     }
 
-    void sendOnTextChanged(int start, int after) {
+    void sendOnTextChanged(int start, int before, int after) {
+        getSelectionActionModeHelper().onTextChanged(start, start + before);
         updateSpellCheckSpans(start, start + after, false);
 
         // Flip flag to indicate the word iterator needs to have the text reset.
@@ -1382,7 +1390,7 @@
         if (mTextActionMode != null) {
             switch (event.getActionMasked()) {
                 case MotionEvent.ACTION_MOVE:
-                    hideFloatingToolbar();
+                    hideFloatingToolbar(ActionMode.DEFAULT_HIDE_DURATION);
                     break;
                 case MotionEvent.ACTION_UP:  // fall through
                 case MotionEvent.ACTION_CANCEL:
@@ -1391,10 +1399,10 @@
         }
     }
 
-    private void hideFloatingToolbar() {
+    void hideFloatingToolbar(int duration) {
         if (mTextActionMode != null) {
             mTextView.removeCallbacks(mShowFloatingToolbar);
-            mTextActionMode.hide(ActionMode.DEFAULT_HIDE_DURATION);
+            mTextActionMode.hide(duration);
         }
     }
 
@@ -2659,7 +2667,7 @@
                 .setEnabled(mTextView.canSelectAllText())
                 .setOnMenuItemClickListener(mOnContextMenuItemClickListener);
         menu.add(Menu.NONE, TextView.ID_AUTOFILL, MENU_ITEM_ORDER_AUTOFILL,
-                com.android.internal.R.string.autofill)
+                android.R.string.autofill)
                 .setEnabled(mTextView.canRequestAutofill())
                 .setOnMenuItemClickListener(mOnContextMenuItemClickListener);
 
@@ -3935,7 +3943,7 @@
 
         @Override
         public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
-            getSelectionActionModeHelper().onSelectionAction();
+            getSelectionActionModeHelper().onSelectionAction(item.getItemId());
 
             if (mProcessTextIntentActionsHandler.performMenuItemAction(item)) {
                 return true;
@@ -4258,7 +4266,7 @@
             mNumberPreviousOffsets++;
         }
 
-        private void filterOnTouchUp() {
+        private void filterOnTouchUp(boolean fromTouchScreen) {
             final long now = SystemClock.uptimeMillis();
             int i = 0;
             int index = mPreviousOffsetIndex;
@@ -4270,7 +4278,7 @@
 
             if (i > 0 && i < iMax
                     && (now - mPreviousOffsetsTimes[index]) > TOUCH_UP_FILTER_DELAY_BEFORE) {
-                positionAtCursorOffset(mPreviousOffsets[index], false);
+                positionAtCursorOffset(mPreviousOffsets[index], false, fromTouchScreen);
             }
         }
 
@@ -4287,7 +4295,7 @@
         public void invalidate() {
             super.invalidate();
             if (isShowing()) {
-                positionAtCursorOffset(getCurrentCursorOffset(), true);
+                positionAtCursorOffset(getCurrentCursorOffset(), true, false);
             }
         };
 
@@ -4306,7 +4314,7 @@
 
             // Make sure the offset is always considered new, even when focusing at same position
             mPreviousOffset = -1;
-            positionAtCursorOffset(getCurrentCursorOffset(), false);
+            positionAtCursorOffset(getCurrentCursorOffset(), false, false);
         }
 
         protected void dismiss() {
@@ -4343,7 +4351,7 @@
 
         protected abstract void updateSelection(int offset);
 
-        public abstract void updatePosition(float x, float y);
+        protected abstract void updatePosition(float x, float y, boolean fromTouchScreen);
 
         protected boolean isAtRtlRun(@NonNull Layout layout, int offset) {
             return layout.isRtlCharAt(offset);
@@ -4362,8 +4370,11 @@
          * @param offset Cursor offset. Must be in [-1, length].
          * @param forceUpdatePosition whether to force update the position.  This should be true
          * when If the parent has been scrolled, for example.
+         * @param fromTouchScreen {@code true} if the cursor is moved with motion events from the
+         * touch screen.
          */
-        protected void positionAtCursorOffset(int offset, boolean forceUpdatePosition) {
+        protected void positionAtCursorOffset(int offset, boolean forceUpdatePosition,
+                boolean fromTouchScreen) {
             // A HandleView relies on the layout, which may be nulled by external methods
             Layout layout = mTextView.getLayout();
             if (layout == null) {
@@ -4377,6 +4388,9 @@
             if (offsetChanged || forceUpdatePosition) {
                 if (offsetChanged) {
                     updateSelection(offset);
+                    if (fromTouchScreen && mHapticTextHandleEnabled) {
+                        mTextView.performHapticFeedback(HapticFeedbackConstants.TEXT_HANDLE_MOVE);
+                    }
                     addPositionToTouchUpFilter(offset);
                 }
                 final int line = layout.getLineForOffset(offset);
@@ -4409,7 +4423,7 @@
         @Override
         public void updatePosition(int parentPositionX, int parentPositionY,
                 boolean parentPositionChanged, boolean parentScrolled) {
-            positionAtCursorOffset(getCurrentCursorOffset(), parentScrolled);
+            positionAtCursorOffset(getCurrentCursorOffset(), parentScrolled, false);
             if (parentPositionChanged || mPositionHasChanged) {
                 if (mIsDragging) {
                     // Update touchToWindow offset in case of parent scrolling while dragging
@@ -4521,12 +4535,13 @@
                             xInWindow - mTouchToWindowOffsetX + mHotspotX + getHorizontalOffset();
                     final float newPosY = yInWindow - mTouchToWindowOffsetY + mTouchOffsetY;
 
-                    updatePosition(newPosX, newPosY);
+                    updatePosition(newPosX, newPosY,
+                            ev.isFromSource(InputDevice.SOURCE_TOUCHSCREEN));
                     break;
                 }
 
                 case MotionEvent.ACTION_UP:
-                    filterOnTouchUp();
+                    filterOnTouchUp(ev.isFromSource(InputDevice.SOURCE_TOUCHSCREEN));
                     mIsDragging = false;
                     updateDrawable();
                     break;
@@ -4707,7 +4722,7 @@
         }
 
         @Override
-        public void updatePosition(float x, float y) {
+        protected void updatePosition(float x, float y, boolean fromTouchScreen) {
             Layout layout = mTextView.getLayout();
             int offset;
             if (layout != null) {
@@ -4720,7 +4735,7 @@
             } else {
                 offset = -1;
             }
-            positionAtCursorOffset(offset, false);
+            positionAtCursorOffset(offset, false, fromTouchScreen);
             if (mTextActionMode != null) {
                 invalidateActionMode();
             }
@@ -4811,12 +4826,13 @@
         }
 
         @Override
-        public void updatePosition(float x, float y) {
+        protected void updatePosition(float x, float y, boolean fromTouchScreen) {
             final Layout layout = mTextView.getLayout();
             if (layout == null) {
                 // HandleView will deal appropriately in positionAtCursorOffset when
                 // layout is null.
-                positionAndAdjustForCrossingHandles(mTextView.getOffsetForPosition(x, y));
+                positionAndAdjustForCrossingHandles(mTextView.getOffsetForPosition(x, y),
+                        fromTouchScreen);
                 return;
             }
 
@@ -4859,12 +4875,12 @@
                 // to the current position.
                 mLanguageDirectionChanged = true;
                 mTouchWordDelta = 0.0f;
-                positionAndAdjustForCrossingHandles(offset);
+                positionAndAdjustForCrossingHandles(offset, fromTouchScreen);
                 return;
             } else if (mLanguageDirectionChanged && !isLvlBoundary) {
                 // We've just moved past the boundary so update the position. After this we can
                 // figure out if the user is expanding or shrinking to go by word or character.
-                positionAndAdjustForCrossingHandles(offset);
+                positionAndAdjustForCrossingHandles(offset, fromTouchScreen);
                 mTouchWordDelta = 0.0f;
                 mLanguageDirectionChanged = false;
                 return;
@@ -4898,7 +4914,7 @@
                     final int nextOffset = (atRtl == isStartHandle())
                             ? layout.getOffsetToRightOf(mPreviousOffset)
                             : layout.getOffsetToLeftOf(mPreviousOffset);
-                    positionAndAdjustForCrossingHandles(nextOffset);
+                    positionAndAdjustForCrossingHandles(nextOffset, fromTouchScreen);
                     return;
                 }
             }
@@ -4977,14 +4993,15 @@
 
             if (positionCursor) {
                 mPreviousLineTouched = currLine;
-                positionAndAdjustForCrossingHandles(offset);
+                positionAndAdjustForCrossingHandles(offset, fromTouchScreen);
             }
             mPrevX = x;
         }
 
         @Override
-        protected void positionAtCursorOffset(int offset, boolean forceUpdatePosition) {
-            super.positionAtCursorOffset(offset, forceUpdatePosition);
+        protected void positionAtCursorOffset(int offset, boolean forceUpdatePosition,
+                boolean fromTouchScreen) {
+            super.positionAtCursorOffset(offset, forceUpdatePosition, fromTouchScreen);
             mInWord = (offset != -1) && !getWordIteratorWithText().isBoundary(offset);
         }
 
@@ -5000,7 +5017,7 @@
             return superResult;
         }
 
-        private void positionAndAdjustForCrossingHandles(int offset) {
+        private void positionAndAdjustForCrossingHandles(int offset, boolean fromTouchScreen) {
             final int anotherHandleOffset =
                     isStartHandle() ? mTextView.getSelectionEnd() : mTextView.getSelectionStart();
             if ((isStartHandle() && offset >= anotherHandleOffset)
@@ -5025,14 +5042,14 @@
                         } else {
                             offset = TextUtils.unpackRangeEndFromLong(range);
                         }
-                        positionAtCursorOffset(offset, false);
+                        positionAtCursorOffset(offset, false, fromTouchScreen);
                         return;
                     }
                 }
                 // Handles can not cross and selection is at least one character.
                 offset = getNextCursorOffset(anotherHandleOffset, !isStartHandle());
             }
-            positionAtCursorOffset(offset, false);
+            positionAtCursorOffset(offset, false, fromTouchScreen);
         }
 
         private boolean positionNearEdgeOfScrollingView(float x, boolean atRtl) {
@@ -5475,7 +5492,8 @@
 
         private void updateCharacterBasedSelection(MotionEvent event) {
             final int offset = mTextView.getOffsetForPosition(event.getX(), event.getY());
-            Selection.setSelection((Spannable) mTextView.getText(), mStartOffset, offset);
+            updateSelectionInternal(mStartOffset, offset,
+                    event.isFromSource(InputDevice.SOURCE_TOUCHSCREEN));
         }
 
         private void updateWordBasedSelection(MotionEvent event) {
@@ -5533,7 +5551,8 @@
                 }
             }
             mLineSelectionIsOn = currLine;
-            Selection.setSelection((Spannable) mTextView.getText(), startOffset, offset);
+            updateSelectionInternal(startOffset, offset,
+                    event.isFromSource(InputDevice.SOURCE_TOUCHSCREEN));
         }
 
         private void updateParagraphBasedSelection(MotionEvent event) {
@@ -5544,7 +5563,19 @@
             final long paragraphsRange = getParagraphsRange(start, end);
             final int selectionStart = TextUtils.unpackRangeStartFromLong(paragraphsRange);
             final int selectionEnd = TextUtils.unpackRangeEndFromLong(paragraphsRange);
+            updateSelectionInternal(selectionStart, selectionEnd,
+                    event.isFromSource(InputDevice.SOURCE_TOUCHSCREEN));
+        }
+
+        private void updateSelectionInternal(int selectionStart, int selectionEnd,
+                boolean fromTouchScreen) {
+            final boolean performHapticFeedback = fromTouchScreen && mHapticTextHandleEnabled
+                    && ((mTextView.getSelectionStart() != selectionStart)
+                            || (mTextView.getSelectionEnd() != selectionEnd));
             Selection.setSelection((Spannable) mTextView.getText(), selectionStart, selectionEnd);
+            if (performHapticFeedback) {
+                mTextView.performHapticFeedback(HapticFeedbackConstants.TEXT_HANDLE_MOVE);
+            }
         }
 
         /**
diff --git a/core/java/android/widget/LinearLayout.java b/core/java/android/widget/LinearLayout.java
index 88c3c5b..380bf7a 100644
--- a/core/java/android/widget/LinearLayout.java
+++ b/core/java/android/widget/LinearLayout.java
@@ -66,7 +66,7 @@
  * both horizontal and vertical alignment of all child views within the single row or column.</p>
  *
  * <p>You can set
- * {@link LinearLayout.LayoutParams.html#attr_android:layout_weight android:layout_weight}
+ * {@link android.R.styleable#LinearLayout_Layout_layout_weight android:layout_weight}
  * on individual child views to specify how linear layout divides remaining space amongst
  * the views it contains. See the
  * <a href="https://developer.android.com/guide/topics/ui/layout/linear.html">Linear Layout</a>
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java
index 7bdd6da..4d3189e 100644
--- a/core/java/android/widget/NumberPicker.java
+++ b/core/java/android/widget/NumberPicker.java
@@ -737,6 +737,7 @@
         mInputText.setFilters(new InputFilter[] {
             new InputTextFilter()
         });
+        mInputText.setAccessibilityLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE);
 
         mInputText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
         mInputText.setImeOptions(EditorInfo.IME_ACTION_DONE);
@@ -770,6 +771,12 @@
         if (getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
             setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
         }
+
+        // Should be focusable by default, as the text view whose visibility changes is focusable
+        if (getFocusable() == View.FOCUSABLE_AUTO) {
+            setFocusable(View.FOCUSABLE);
+            setFocusableInTouchMode(true);
+        }
     }
 
     @Override
@@ -856,7 +863,7 @@
         switch (action) {
             case MotionEvent.ACTION_DOWN: {
                 removeAllCallbacks();
-                mInputText.setVisibility(View.INVISIBLE);
+                hideSoftInput();
                 mLastDownOrMoveEventY = mLastDownEventY = event.getY();
                 mLastDownEventTime = event.getEventTime();
                 mIgnoreMoveEvents = false;
@@ -883,11 +890,9 @@
                     mFlingScroller.forceFinished(true);
                     mAdjustScroller.forceFinished(true);
                 } else if (mLastDownEventY < mTopSelectionDividerTop) {
-                    hideSoftInput();
                     postChangeCurrentByOneFromLongPress(
                             false, ViewConfiguration.getLongPressTimeout());
                 } else if (mLastDownEventY > mBottomSelectionDividerBottom) {
-                    hideSoftInput();
                     postChangeCurrentByOneFromLongPress(
                             true, ViewConfiguration.getLongPressTimeout());
                 } else {
@@ -1120,6 +1125,7 @@
     @Override
     public void scrollBy(int x, int y) {
         int[] selectorIndices = mSelectorIndices;
+        int startScrollOffset = mCurrentScrollOffset;
         if (!mWrapSelectorWheel && y > 0
                 && selectorIndices[SELECTOR_MIDDLE_ITEM_INDEX] <= mMinValue) {
             mCurrentScrollOffset = mInitialScrollOffset;
@@ -1147,6 +1153,9 @@
                 mCurrentScrollOffset = mInitialScrollOffset;
             }
         }
+        if (startScrollOffset != mCurrentScrollOffset) {
+            onScrollChanged(0, mCurrentScrollOffset, 0, startScrollOffset);
+        }
     }
 
     @Override
@@ -1281,9 +1290,9 @@
         InputMethodManager inputMethodManager = InputMethodManager.peekInstance();
         if (inputMethodManager != null && inputMethodManager.isActive(mInputText)) {
             inputMethodManager.hideSoftInputFromWindow(getWindowToken(), 0);
-            if (mHasSelectorWheel) {
-                mInputText.setVisibility(View.INVISIBLE);
-            }
+        }
+        if (mHasSelectorWheel) {
+            mInputText.setVisibility(View.INVISIBLE);
         }
     }
 
@@ -1735,7 +1744,10 @@
         }
         int previous = mValue;
         mValue = current;
-        updateInputTextView();
+        // If we're flinging, we'll update the text view at the end when it becomes visible
+        if (mScrollState != OnScrollListener.SCROLL_STATE_FLING) {
+            updateInputTextView();
+        }
         if (notifyChange) {
             notifyChange(previous, current);
         }
@@ -1752,7 +1764,7 @@
      */
      private void changeValueByOne(boolean increment) {
         if (mHasSelectorWheel) {
-            mInputText.setVisibility(View.INVISIBLE);
+            hideSoftInput();
             if (!moveToFinalScrollerPosition(mFlingScroller)) {
                 moveToFinalScrollerPosition(mAdjustScroller);
             }
@@ -1799,9 +1811,8 @@
      */
     private void onScrollerFinished(Scroller scroller) {
         if (scroller == mFlingScroller) {
-            if (!ensureScrollWheelAdjusted()) {
-                updateInputTextView();
-            }
+            ensureScrollWheelAdjusted();
+            updateInputTextView();
             onScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);
         } else {
             if (mScrollState != OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
@@ -1937,9 +1948,25 @@
          */
         String text = (mDisplayedValues == null) ? formatNumber(mValue)
                 : mDisplayedValues[mValue - mMinValue];
-        if (!TextUtils.isEmpty(text) && !text.equals(mInputText.getText().toString())) {
-            mInputText.setText(text);
-            return true;
+        if (!TextUtils.isEmpty(text)) {
+            CharSequence beforeText = mInputText.getText();
+            if (!text.equals(beforeText.toString())) {
+                mInputText.setText(text);
+                if (AccessibilityManager.getInstance(mContext).isEnabled()) {
+                    AccessibilityEvent event = AccessibilityEvent.obtain(
+                            AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
+                    mInputText.onInitializeAccessibilityEvent(event);
+                    mInputText.onPopulateAccessibilityEvent(event);
+                    event.setFromIndex(0);
+                    event.setRemovedCount(beforeText.length());
+                    event.setAddedCount(text.length());
+                    event.setBeforeText(beforeText);
+                    event.setSource(NumberPicker.this,
+                            AccessibilityNodeProviderImpl.VIRTUAL_VIEW_ID_INPUT);
+                    requestSendAccessibilityEvent(NumberPicker.this, event);
+                }
+                return true;
+            }
         }
 
         return false;
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java
index 8464c6e..23ebadb 100644
--- a/core/java/android/widget/PopupWindow.java
+++ b/core/java/android/widget/PopupWindow.java
@@ -1334,6 +1334,10 @@
                     + "calling setContentView() before attempting to show the popup.");
         }
 
+        if (p.accessibilityTitle == null) {
+            p.accessibilityTitle = mContext.getString(R.string.popup_window_default_title);
+        }
+
         // The old decor view may be transitioning out. Make sure it finishes
         // and cleans up before we try to create another one.
         if (mDecorView != null) {
@@ -2292,8 +2296,8 @@
     }
 
     /** @hide */
-    protected final void detachFromAnchor() {
-        final View anchor = mAnchor != null ? mAnchor.get() : null;
+    protected void detachFromAnchor() {
+        final View anchor = getAnchor();
         if (anchor != null) {
             final ViewTreeObserver vto = anchor.getViewTreeObserver();
             vto.removeOnScrollChangedListener(mOnScrollChangedListener);
@@ -2312,7 +2316,7 @@
     }
 
     /** @hide */
-    protected final void attachToAnchor(View anchor, int xoff, int yoff, int gravity) {
+    protected void attachToAnchor(View anchor, int xoff, int yoff, int gravity) {
         detachFromAnchor();
 
         final ViewTreeObserver vto = anchor.getViewTreeObserver();
@@ -2335,6 +2339,11 @@
         mAnchoredGravity = gravity;
     }
 
+    /** @hide */
+    protected @Nullable View getAnchor() {
+        return mAnchor != null ? mAnchor.get() : null;
+    }
+
     private void alignToAnchor() {
         final View anchor = mAnchor != null ? mAnchor.get() : null;
         if (anchor != null && anchor.isAttachedToWindow() && hasDecorView()) {
diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java
index 181ad31..75fc538 100644
--- a/core/java/android/widget/RelativeLayout.java
+++ b/core/java/android/widget/RelativeLayout.java
@@ -486,7 +486,7 @@
                         if (targetSdkVersion < Build.VERSION_CODES.KITKAT) {
                             width = Math.max(width, myWidth - params.mLeft);
                         } else {
-                            width = Math.max(width, myWidth - params.mLeft - params.leftMargin);
+                            width = Math.max(width, myWidth - params.mLeft + params.leftMargin);
                         }
                     } else {
                         if (targetSdkVersion < Build.VERSION_CODES.KITKAT) {
@@ -833,25 +833,28 @@
                 if (!wrapContent) {
                     centerHorizontal(child, params, myWidth);
                 } else {
-                    params.mLeft = mPaddingLeft + params.leftMargin;
-                    params.mRight = params.mLeft + child.getMeasuredWidth();
+                    positionAtEdge(child, params, myWidth);
                 }
                 return true;
             } else {
                 // This is the default case. For RTL we start from the right and for LTR we start
                 // from the left. This will give LEFT/TOP for LTR and RIGHT/TOP for RTL.
-                if (isLayoutRtl()) {
-                    params.mRight = myWidth - mPaddingRight- params.rightMargin;
-                    params.mLeft = params.mRight - child.getMeasuredWidth();
-                } else {
-                    params.mLeft = mPaddingLeft + params.leftMargin;
-                    params.mRight = params.mLeft + child.getMeasuredWidth();
-                }
+                positionAtEdge(child, params, myWidth);
             }
         }
         return rules[ALIGN_PARENT_END] != 0;
     }
 
+    private void positionAtEdge(View child, LayoutParams params, int myWidth) {
+        if (isLayoutRtl()) {
+            params.mRight = myWidth - mPaddingRight - params.rightMargin;
+            params.mLeft = params.mRight - child.getMeasuredWidth();
+        } else {
+            params.mLeft = mPaddingLeft + params.leftMargin;
+            params.mRight = params.mLeft + child.getMeasuredWidth();
+        }
+    }
+
     private boolean positionChildVertical(View child, LayoutParams params, int myHeight,
             boolean wrapContent) {
 
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 6e62351..5adbdbe 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -64,6 +64,7 @@
 import android.widget.AdapterView.OnItemClickListener;
 
 import com.android.internal.R;
+import com.android.internal.util.NotificationColorUtil;
 import com.android.internal.util.Preconditions;
 
 import libcore.util.Objects;
@@ -75,6 +76,7 @@
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Stack;
 import java.util.concurrent.Executor;
 
 /**
@@ -118,6 +120,7 @@
     private static final int TEXT_VIEW_DRAWABLE_COLOR_FILTER_ACTION_TAG = 17;
     private static final int SET_REMOTE_INPUTS_ACTION_TAG = 18;
     private static final int LAYOUT_PARAM_ACTION_TAG = 19;
+    private static final int OVERRIDE_TEXT_COLORS_TAG = 20;
 
     /**
      * Application that hosts the remote views.
@@ -154,6 +157,12 @@
     private boolean mIsRoot = true;
 
     /**
+     * Whether reapply is disallowed on this remoteview. This maybe be true if some actions modify
+     * the layout in a way that isn't recoverable, since views are being removed.
+     */
+    private boolean mReapplyDisallowed;
+
+    /**
      * Constants to whether or not this RemoteViews is composed of a landscape and portrait
      * RemoteViews.
      */
@@ -215,6 +224,37 @@
     }
 
     /**
+     * Override all text colors in this layout and replace them by the given text color.
+     *
+     * @param textColor The color to use.
+     *
+     * @hide
+     */
+    public void overrideTextColors(int textColor) {
+        addAction(new OverrideTextColorsAction(textColor));
+    }
+
+    /**
+     * Set that it is disallowed to reapply another remoteview with the same layout as this view.
+     * This should be done if an action is destroying the view tree of the base layout.
+     *
+     * @hide
+     */
+    public void setReapplyDisallowed() {
+        mReapplyDisallowed = true;
+    }
+
+    /**
+     * @return Whether it is disallowed to reapply another remoteview with the same layout as this
+     * view. True if this remoteview has actions that destroyed view tree of the base layout.
+     *
+     * @hide
+     */
+    public boolean isReapplyDisallowed() {
+        return mReapplyDisallowed;
+    }
+
+    /**
      * Handle with care!
      */
     static class MutablePair<F, S> {
@@ -2223,6 +2263,52 @@
     }
 
     /**
+     * Helper action to override all textViewColors
+     */
+    private class OverrideTextColorsAction extends Action {
+
+        private final int textColor;
+
+        public OverrideTextColorsAction(int textColor) {
+            this.textColor = textColor;
+        }
+
+        public OverrideTextColorsAction(Parcel parcel) {
+            textColor = parcel.readInt();
+        }
+
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeInt(OVERRIDE_TEXT_COLORS_TAG);
+            dest.writeInt(textColor);
+        }
+
+        @Override
+        public void apply(View root, ViewGroup rootParent, OnClickHandler handler) {
+            // Let's traverse the viewtree and override all textColors!
+            Stack<View> viewsToProcess = new Stack<>();
+            viewsToProcess.add(root);
+            while (!viewsToProcess.isEmpty()) {
+                View v = viewsToProcess.pop();
+                if (v instanceof TextView) {
+                    TextView textView = (TextView) v;
+                    textView.setText(NotificationColorUtil.clearColorSpans(textView.getText()));
+                    textView.setTextColor(textColor);
+                }
+                if (v instanceof ViewGroup) {
+                    ViewGroup viewGroup = (ViewGroup) v;
+                    for (int i = 0; i < viewGroup.getChildCount(); i++) {
+                        viewsToProcess.push(viewGroup.getChildAt(i));
+                    }
+                }
+            }
+        }
+
+        public String getActionName() {
+            return "OverrideTextColorsAction";
+        }
+    }
+
+    /**
      * Simple class used to keep track of memory usage in a RemoteViews.
      *
      */
@@ -2417,6 +2503,9 @@
                         case LAYOUT_PARAM_ACTION_TAG:
                             mActions.add(new LayoutParamAction(parcel));
                             break;
+                        case OVERRIDE_TEXT_COLORS_TAG:
+                            mActions.add(new OverrideTextColorsAction(parcel));
+                            break;
                         default:
                             throw new ActionException("Tag " + tag + " not found");
                     }
@@ -2429,13 +2518,21 @@
             mApplication = mPortrait.mApplication;
             mLayoutId = mPortrait.getLayoutId();
         }
+        mReapplyDisallowed = parcel.readInt() == 0;
 
         // setup the memory usage statistics
         mMemoryUsageCounter = new MemoryUsageCounter();
         recalculateMemoryUsage();
     }
 
-
+    /**
+     * Returns a deep copy of the RemoteViews object. The RemoteView may not be
+     * attached to another RemoteView -- it must be the root of a hierarchy.
+     *
+     * @throws IllegalStateException if this is not the root of a RemoteView
+     *         hierarchy
+     */
+    @Override
     public RemoteViews clone() {
         synchronized (this) {
             Preconditions.checkState(mIsRoot, "RemoteView has been attached to another RemoteView. "
@@ -3731,6 +3828,7 @@
             // Both RemoteViews already share the same package and user
             mPortrait.writeToParcel(dest, flags | PARCELABLE_ELIDE_DUPLICATES);
         }
+        dest.writeInt(mReapplyDisallowed ? 1 : 0);
     }
 
     private static ApplicationInfo getApplicationInfo(String packageName, int userId) {
diff --git a/core/java/android/widget/SelectionActionModeHelper.java b/core/java/android/widget/SelectionActionModeHelper.java
index 72d87ee..f5db93e 100644
--- a/core/java/android/widget/SelectionActionModeHelper.java
+++ b/core/java/android/widget/SelectionActionModeHelper.java
@@ -26,17 +26,22 @@
 import android.text.Spannable;
 import android.text.TextUtils;
 import android.text.util.Linkify;
+import android.util.Log;
 import android.view.ActionMode;
 import android.view.textclassifier.TextClassification;
 import android.view.textclassifier.TextClassifier;
 import android.view.textclassifier.TextSelection;
+import android.view.textclassifier.logging.SmartSelectionEventTracker;
+import android.view.textclassifier.logging.SmartSelectionEventTracker.SelectionEvent;
 import android.widget.Editor.SelectionModifierCursorController;
 
 import com.android.internal.util.Preconditions;
 
+import java.text.BreakIterator;
 import java.util.Objects;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
+import java.util.regex.Pattern;
 
 /**
  * Helper class for starting selection action mode
@@ -45,13 +50,10 @@
 @UiThread
 final class SelectionActionModeHelper {
 
-    /**
-     * Maximum time (in milliseconds) to wait for a result before timing out.
-     */
-    // TODO: Consider making this a ViewConfiguration.
-    private static final int TIMEOUT_DURATION = 200;
+    private static final String LOG_TAG = "SelectActionModeHelper";
 
     private final Editor mEditor;
+    private final TextView mTextView;
     private final TextClassificationHelper mTextClassificationHelper;
 
     private TextClassification mTextClassification;
@@ -61,24 +63,32 @@
 
     SelectionActionModeHelper(@NonNull Editor editor) {
         mEditor = Preconditions.checkNotNull(editor);
-        final TextView textView = mEditor.getTextView();
+        mTextView = mEditor.getTextView();
         mTextClassificationHelper = new TextClassificationHelper(
-                textView.getTextClassifier(), textView.getText(), 0, 1, textView.getTextLocales());
-        mSelectionTracker = new SelectionTracker(textView.getTextClassifier());
+                mTextView.getTextClassifier(),
+                getText(mTextView),
+                0, 1, mTextView.getTextLocales());
+        mSelectionTracker = new SelectionTracker(mTextView);
     }
 
     public void startActionModeAsync(boolean adjustSelection) {
+        // Check if the smart selection should run for editable text.
+        adjustSelection &= !mTextView.isTextEditable()
+                || mTextView.getTextClassifier().getSettings()
+                        .isSuggestSelectionEnabledForEditableText();
+
+        mSelectionTracker.onOriginalSelection(
+                getText(mTextView),
+                mTextView.getSelectionStart(),
+                mTextView.getSelectionEnd());
         cancelAsyncTask();
         if (skipTextClassification()) {
-            // No need to make an async call for a no-op TextClassifier.
-            // Do not call the TextClassifier if there is no selection.
             startActionMode(null);
         } else {
-            resetTextClassificationHelper(true /* resetSelectionTag */);
-            final TextView tv = mEditor.getTextView();
+            resetTextClassificationHelper();
             mTextClassificationAsyncTask = new TextClassificationAsyncTask(
-                    tv,
-                    TIMEOUT_DURATION,
+                    mTextView,
+                    mTextClassificationHelper.getTimeoutDuration(),
                     adjustSelection
                             ? mTextClassificationHelper::suggestSelection
                             : mTextClassificationHelper::classifyText,
@@ -90,25 +100,36 @@
     public void invalidateActionModeAsync() {
         cancelAsyncTask();
         if (skipTextClassification()) {
-            // No need to make an async call for a no-op TextClassifier.
-            // Do not call the TextClassifier if there is no selection.
             invalidateActionMode(null);
         } else {
-            resetTextClassificationHelper(false /* resetSelectionTag */);
+            resetTextClassificationHelper();
             mTextClassificationAsyncTask = new TextClassificationAsyncTask(
-                    mEditor.getTextView(), TIMEOUT_DURATION,
-                    mTextClassificationHelper::classifyText, this::invalidateActionMode)
+                    mTextView,
+                    mTextClassificationHelper.getTimeoutDuration(),
+                    mTextClassificationHelper::classifyText,
+                    this::invalidateActionMode)
                     .execute();
         }
     }
 
-    public void onSelectionAction() {
-        mSelectionTracker.onSelectionAction(mTextClassificationHelper.getSelectionTag());
+    public void onSelectionAction(int menuItemId) {
+        mSelectionTracker.onSelectionAction(
+                mTextView.getSelectionStart(), mTextView.getSelectionEnd(),
+                getActionType(menuItemId), mTextClassification);
+    }
+
+    public void onSelectionDrag() {
+        mSelectionTracker.onSelectionAction(
+                mTextView.getSelectionStart(), mTextView.getSelectionEnd(),
+                SelectionEvent.ActionType.DRAG, mTextClassification);
+    }
+
+    public void onTextChanged(int start, int end) {
+        mSelectionTracker.onTextChanged(start, end, mTextClassification);
     }
 
     public boolean resetSelection(int textIndex) {
-        if (mSelectionTracker.resetSelection(
-                textIndex, mEditor, mTextClassificationHelper.getSelectionTag())) {
+        if (mSelectionTracker.resetSelection(textIndex, mEditor)) {
             invalidateActionModeAsync();
             return true;
         }
@@ -134,29 +155,23 @@
     }
 
     private boolean skipTextClassification() {
-        final TextView textView = mEditor.getTextView();
         // No need to make an async call for a no-op TextClassifier.
-        final boolean noOpTextClassifier = textView.getTextClassifier() == TextClassifier.NO_OP;
+        final boolean noOpTextClassifier = mTextView.getTextClassifier() == TextClassifier.NO_OP;
         // Do not call the TextClassifier if there is no selection.
-        final boolean noSelection = textView.getSelectionEnd() == textView.getSelectionStart();
+        final boolean noSelection = mTextView.getSelectionEnd() == mTextView.getSelectionStart();
         // Do not call the TextClassifier if this is a password field.
-        final boolean password = textView.hasPasswordTransformationMethod()
-                || TextView.isPasswordInputType(textView.getInputType());
+        final boolean password = mTextView.hasPasswordTransformationMethod()
+                || TextView.isPasswordInputType(mTextView.getInputType());
         return noOpTextClassifier || noSelection || password;
     }
 
-    private boolean hasSelection() {
-        final TextView textView = mEditor.getTextView();
-        return textView.getSelectionEnd() > textView.getSelectionStart();
-    }
-
     private void startActionMode(@Nullable SelectionResult result) {
-        final TextView textView = mEditor.getTextView();
-        final CharSequence text = textView.getText();
-        mSelectionTracker.setOriginalSelection(
-                textView.getSelectionStart(), textView.getSelectionEnd());
+        final CharSequence text = getText(mTextView);
         if (result != null && text instanceof Spannable) {
-            Selection.setSelection((Spannable) text, result.mStart, result.mEnd);
+            // Do not change the selection if TextClassifier should be dark launched.
+            if (!mTextView.getTextClassifier().getSettings().isDarkLaunch()) {
+                Selection.setSelection((Spannable) text, result.mStart, result.mEnd);
+            }
             mTextClassification = result.mClassification;
         } else {
             mTextClassification = null;
@@ -167,8 +182,7 @@
                 controller.show();
             }
             if (result != null) {
-                mSelectionTracker.onSelectionStarted(
-                        result.mStart, result.mEnd, mTextClassificationHelper.getSelectionTag());
+                mSelectionTracker.onSmartSelection(result);
             }
         }
         mEditor.setRestartActionModeOnNextRefresh(false);
@@ -181,18 +195,17 @@
         if (actionMode != null) {
             actionMode.invalidate();
         }
-        final TextView textView = mEditor.getTextView();
         mSelectionTracker.onSelectionUpdated(
-                textView.getSelectionStart(), textView.getSelectionEnd(),
-                mTextClassificationHelper.getSelectionTag());
+                mTextView.getSelectionStart(), mTextView.getSelectionEnd(), mTextClassification);
         mTextClassificationAsyncTask = null;
     }
 
-    private void resetTextClassificationHelper(boolean resetSelectionTag) {
-        final TextView textView = mEditor.getTextView();
-        mTextClassificationHelper.reset(textView.getTextClassifier(), textView.getText(),
-                textView.getSelectionStart(), textView.getSelectionEnd(),
-                resetSelectionTag, textView.getTextLocales());
+    private void resetTextClassificationHelper() {
+        mTextClassificationHelper.init(
+                mTextView.getTextClassifier(),
+                getText(mTextView),
+                mTextView.getSelectionStart(), mTextView.getSelectionEnd(),
+                mTextView.getTextLocales());
     }
 
     /**
@@ -202,84 +215,60 @@
      */
     private static final class SelectionTracker {
 
-        // Log event: Smart selection happened.
-        private static final String LOG_EVENT_MULTI_SELECTION =
-                "textClassifier_multiSelection";
-        private static final String LOG_EVENT_SINGLE_SELECTION =
-                "textClassifier_singleSelection";
-
-        // Log event: Smart selection acted upon.
-        private static final String LOG_EVENT_MULTI_SELECTION_ACTION =
-                "textClassifier_multiSelection_action";
-        private static final String LOG_EVENT_SINGLE_SELECTION_ACTION =
-                "textClassifier_singleSelection_action";
-
-        // Log event: Smart selection was reset to original selection.
-        private static final String LOG_EVENT_MULTI_SELECTION_RESET =
-                "textClassifier_multiSelection_reset";
-
-        // Log event: Smart selection was user modified.
-        private static final String LOG_EVENT_MULTI_SELECTION_MODIFIED =
-                "textClassifier_multiSelection_modified";
-        private static final String LOG_EVENT_SINGLE_SELECTION_MODIFIED =
-                "textClassifier_singleSelection_modified";
-
-        private final TextClassifier mClassifier;
+        private final TextView mTextView;
+        private SelectionMetricsLogger mLogger;
 
         private int mOriginalStart;
         private int mOriginalEnd;
         private int mSelectionStart;
         private int mSelectionEnd;
+        private boolean mAllowReset;
+        private final LogAbandonRunnable mDelayedLogAbandon = new LogAbandonRunnable();
 
-        private boolean mMultiSelection;
-        private boolean mClassifierSelection;
-
-        SelectionTracker(TextClassifier classifier) {
-            mClassifier = classifier;
+        SelectionTracker(TextView textView) {
+            mTextView = Preconditions.checkNotNull(textView);
+            mLogger = new SelectionMetricsLogger(textView);
         }
 
         /**
-         * Called to initialize the original selection before smart selection is triggered.
+         * Called when the original selection happens, before smart selection is triggered.
          */
-        public void setOriginalSelection(int selectionStart, int selectionEnd) {
-            mOriginalStart = selectionStart;
-            mOriginalEnd = selectionEnd;
-            resetSelectionFlags();
+        public void onOriginalSelection(CharSequence text, int selectionStart, int selectionEnd) {
+            // If we abandoned a selection and created a new one very shortly after, we may still
+            // have a pending request to log ABANDON, which we flush here.
+            mDelayedLogAbandon.flush();
+
+            mOriginalStart = mSelectionStart = selectionStart;
+            mOriginalEnd = mSelectionEnd = selectionEnd;
+            mAllowReset = false;
+            maybeInvalidateLogger();
+            mLogger.logSelectionStarted(text, selectionStart);
         }
 
         /**
          * Called when selection action mode is started and the results come from a classifier.
-         * If the selection indices are different from the original selection indices, we have a
-         * smart selection.
          */
-        public void onSelectionStarted(int selectionStart, int selectionEnd, String logTag) {
-            mClassifierSelection = !logTag.isEmpty();
-            mSelectionStart = selectionStart;
-            mSelectionEnd = selectionEnd;
-            // If the started selection is different from the original selection, we have a
-            // smart selection.
-            mMultiSelection =
-                    mSelectionStart != mOriginalStart || mSelectionEnd != mOriginalEnd;
-            if (mMultiSelection) {
-                mClassifier.logEvent(logTag, LOG_EVENT_MULTI_SELECTION);
-            } else if (mClassifierSelection) {
-                mClassifier.logEvent(logTag, LOG_EVENT_SINGLE_SELECTION);
+        public void onSmartSelection(SelectionResult result) {
+            if (isSelectionStarted()) {
+                mSelectionStart = result.mStart;
+                mSelectionEnd = result.mEnd;
+                mAllowReset = mSelectionStart != mOriginalStart || mSelectionEnd != mOriginalEnd;
+                mLogger.logSelectionModified(
+                        result.mStart, result.mEnd, result.mClassification, result.mSelection);
             }
         }
 
         /**
          * Called when selection bounds change.
          */
-        public void onSelectionUpdated(int selectionStart, int selectionEnd, String logTag) {
-            final boolean selectionChanged =
-                    selectionStart != mSelectionStart || selectionEnd != mSelectionEnd;
-            if (selectionChanged) {
-                if (mMultiSelection) {
-                    mClassifier.logEvent(logTag, LOG_EVENT_MULTI_SELECTION_MODIFIED);
-                } else if (mClassifierSelection) {
-                    mClassifier.logEvent(logTag, LOG_EVENT_SINGLE_SELECTION_MODIFIED);
-                }
-                resetSelectionFlags();
+        public void onSelectionUpdated(
+                int selectionStart, int selectionEnd,
+                @Nullable TextClassification classification) {
+            if (isSelectionStarted()) {
+                mSelectionStart = selectionStart;
+                mSelectionEnd = selectionEnd;
+                mAllowReset = false;
+                mLogger.logSelectionModified(selectionStart, selectionEnd, classification, null);
             }
         }
 
@@ -287,17 +276,21 @@
          * Called when the selection action mode is destroyed.
          */
         public void onSelectionDestroyed() {
-            resetSelectionFlags();
+            mAllowReset = false;
+            // Wait a few ms to see if the selection was destroyed because of a text change event.
+            mDelayedLogAbandon.schedule(100 /* ms */);
         }
 
         /**
-         * Logs if the action was taken on a smart selection.
+         * Called when an action is taken on a smart selection.
          */
-        public void onSelectionAction(String logTag) {
-            if (mMultiSelection) {
-                mClassifier.logEvent(logTag, LOG_EVENT_MULTI_SELECTION_ACTION);
-            } else if (mClassifierSelection) {
-                mClassifier.logEvent(logTag, LOG_EVENT_SINGLE_SELECTION_ACTION);
+        public void onSelectionAction(
+                int selectionStart, int selectionEnd,
+                @SelectionEvent.ActionType int action,
+                @Nullable TextClassification classification) {
+            if (isSelectionStarted()) {
+                mAllowReset = false;
+                mLogger.logSelectionAction(selectionStart, selectionEnd, action, classification);
             }
         }
 
@@ -307,22 +300,234 @@
          * The expected UX here is to allow the user to select a word inside of the smart selection
          * on a single tap.
          */
-        public boolean resetSelection(int textIndex, Editor editor, String logTag) {
-            final CharSequence text = editor.getTextView().getText();
-            if (mMultiSelection
+        public boolean resetSelection(int textIndex, Editor editor) {
+            final TextView textView = editor.getTextView();
+            if (isSelectionStarted()
+                    && mAllowReset
                     && textIndex >= mSelectionStart && textIndex <= mSelectionEnd
-                    && text instanceof Spannable) {
-                // Only allow a reset once.
-                resetSelectionFlags();
-                mClassifier.logEvent(logTag, LOG_EVENT_MULTI_SELECTION_RESET);
-                return editor.selectCurrentWord();
+                    && getText(textView) instanceof Spannable) {
+                mAllowReset = false;
+                boolean selected = editor.selectCurrentWord();
+                if (selected) {
+                    mSelectionStart = editor.getTextView().getSelectionStart();
+                    mSelectionEnd = editor.getTextView().getSelectionEnd();
+                    mLogger.logSelectionAction(
+                            textView.getSelectionStart(), textView.getSelectionEnd(),
+                            SelectionEvent.ActionType.RESET, null /* classification */);
+                }
+                return selected;
             }
             return false;
         }
 
-        private void resetSelectionFlags() {
-            mMultiSelection = false;
-            mClassifierSelection = false;
+        public void onTextChanged(int start, int end, TextClassification classification) {
+            if (isSelectionStarted() && start == mSelectionStart && end == mSelectionEnd) {
+                onSelectionAction(start, end, SelectionEvent.ActionType.OVERTYPE, classification);
+            }
+        }
+
+        private void maybeInvalidateLogger() {
+            if (mLogger.isEditTextLogger() != mTextView.isTextEditable()) {
+                mLogger = new SelectionMetricsLogger(mTextView);
+            }
+        }
+
+        private boolean isSelectionStarted() {
+            return mSelectionStart >= 0 && mSelectionEnd >= 0 && mSelectionStart != mSelectionEnd;
+        }
+
+        /** A helper for keeping track of pending abandon logging requests. */
+        private final class LogAbandonRunnable implements Runnable {
+            private boolean mIsPending;
+
+            /** Schedules an abandon to be logged with the given delay. Flush if necessary. */
+            void schedule(int delayMillis) {
+                if (mIsPending) {
+                    Log.e(LOG_TAG, "Force flushing abandon due to new scheduling request");
+                    flush();
+                }
+                mIsPending = true;
+                mTextView.postDelayed(this, delayMillis);
+            }
+
+            /** If there is a pending log request, execute it now. */
+            void flush() {
+                mTextView.removeCallbacks(this);
+                run();
+            }
+
+            @Override
+            public void run() {
+                if (mIsPending) {
+                    mLogger.logSelectionAction(
+                            mSelectionStart, mSelectionEnd,
+                            SelectionEvent.ActionType.ABANDON, null /* classification */);
+                    mSelectionStart = mSelectionEnd = -1;
+                    mIsPending = false;
+                }
+            }
+        }
+    }
+
+    // TODO: Write tests
+    /**
+     * Metrics logging helper.
+     *
+     * This logger logs selection by word indices. The initial (start) single word selection is
+     * logged at [0, 1) -- end index is exclusive. Other word indices are logged relative to the
+     * initial single word selection.
+     * e.g. New York city, NY. Suppose the initial selection is "York" in
+     * "New York city, NY", then "York" is at [0, 1), "New" is at [-1, 0], and "city" is at [1, 2).
+     * "New York" is at [-1, 1).
+     * Part selection of a word e.g. "or" is counted as selecting the
+     * entire word i.e. equivalent to "York", and each special character is counted as a word, e.g.
+     * "," is at [2, 3). Whitespaces are ignored.
+     */
+    private static final class SelectionMetricsLogger {
+
+        private static final String LOG_TAG = "SelectionMetricsLogger";
+        private static final Pattern PATTERN_WHITESPACE = Pattern.compile("\\s+");
+
+        private final SmartSelectionEventTracker mDelegate;
+        private final boolean mEditTextLogger;
+        private final BreakIterator mWordIterator;
+        private int mStartIndex;
+        private String mText;
+
+        SelectionMetricsLogger(TextView textView) {
+            Preconditions.checkNotNull(textView);
+            final @SmartSelectionEventTracker.WidgetType int widgetType = textView.isTextEditable()
+                    ? SmartSelectionEventTracker.WidgetType.EDITTEXT
+                    : SmartSelectionEventTracker.WidgetType.TEXTVIEW;
+            mDelegate = new SmartSelectionEventTracker(textView.getContext(), widgetType);
+            mEditTextLogger = textView.isTextEditable();
+            mWordIterator = BreakIterator.getWordInstance(textView.getTextLocale());
+        }
+
+        public void logSelectionStarted(CharSequence text, int index) {
+            try {
+                Preconditions.checkNotNull(text);
+                Preconditions.checkArgumentInRange(index, 0, text.length(), "index");
+                if (mText == null || !mText.contentEquals(text)) {
+                    mText = text.toString();
+                }
+                mWordIterator.setText(mText);
+                mStartIndex = index;
+                mDelegate.logEvent(SelectionEvent.selectionStarted(0));
+            } catch (Exception e) {
+                // Avoid crashes due to logging.
+                Log.d(LOG_TAG, e.getMessage());
+            }
+        }
+
+        public void logSelectionModified(int start, int end,
+                @Nullable TextClassification classification, @Nullable TextSelection selection) {
+            try {
+                Preconditions.checkArgumentInRange(start, 0, mText.length(), "start");
+                Preconditions.checkArgumentInRange(end, start, mText.length(), "end");
+                int[] wordIndices = getWordDelta(start, end);
+                if (selection != null) {
+                    mDelegate.logEvent(SelectionEvent.selectionModified(
+                            wordIndices[0], wordIndices[1], selection));
+                } else if (classification != null) {
+                    mDelegate.logEvent(SelectionEvent.selectionModified(
+                            wordIndices[0], wordIndices[1], classification));
+                } else {
+                    mDelegate.logEvent(SelectionEvent.selectionModified(
+                            wordIndices[0], wordIndices[1]));
+                }
+            } catch (Exception e) {
+                // Avoid crashes due to logging.
+                Log.d(LOG_TAG, e.getMessage());
+            }
+        }
+
+        public void logSelectionAction(
+                int start, int end,
+                @SelectionEvent.ActionType int action,
+                @Nullable TextClassification classification) {
+            try {
+                Preconditions.checkArgumentInRange(start, 0, mText.length(), "start");
+                Preconditions.checkArgumentInRange(end, start, mText.length(), "end");
+                int[] wordIndices = getWordDelta(start, end);
+                if (classification != null) {
+                    mDelegate.logEvent(SelectionEvent.selectionAction(
+                            wordIndices[0], wordIndices[1], action, classification));
+                } else {
+                    mDelegate.logEvent(SelectionEvent.selectionAction(
+                            wordIndices[0], wordIndices[1], action));
+                }
+            } catch (Exception e) {
+                // Avoid crashes due to logging.
+                Log.d(LOG_TAG, e.getMessage());
+            }
+        }
+
+        public boolean isEditTextLogger() {
+            return mEditTextLogger;
+        }
+
+        private int[] getWordDelta(int start, int end) {
+            int[] wordIndices = new int[2];
+
+            if (start == mStartIndex) {
+                wordIndices[0] = 0;
+            } else if (start < mStartIndex) {
+                wordIndices[0] = -countWordsForward(start);
+            } else {  // start > mStartIndex
+                wordIndices[0] = countWordsBackward(start);
+
+                // For the selection start index, avoid counting a partial word backwards.
+                if (!mWordIterator.isBoundary(start)
+                        && !isWhitespace(
+                                mWordIterator.preceding(start),
+                                mWordIterator.following(start))) {
+                    // We counted a partial word. Remove it.
+                    wordIndices[0]--;
+                }
+            }
+
+            if (end == mStartIndex) {
+                wordIndices[1] = 0;
+            } else if (end < mStartIndex) {
+                wordIndices[1] = -countWordsForward(end);
+            } else {  // end > mStartIndex
+                wordIndices[1] = countWordsBackward(end);
+            }
+
+            return wordIndices;
+        }
+
+        private int countWordsBackward(int from) {
+            Preconditions.checkArgument(from >= mStartIndex);
+            int wordCount = 0;
+            int offset = from;
+            while (offset > mStartIndex) {
+                int start = mWordIterator.preceding(offset);
+                if (!isWhitespace(start, offset)) {
+                    wordCount++;
+                }
+                offset = start;
+            }
+            return wordCount;
+        }
+
+        private int countWordsForward(int from) {
+            Preconditions.checkArgument(from <= mStartIndex);
+            int wordCount = 0;
+            int offset = from;
+            while (offset < mStartIndex) {
+                int end = mWordIterator.following(offset);
+                if (!isWhitespace(offset, end)) {
+                    wordCount++;
+                }
+                offset = end;
+            }
+            return wordCount;
+        }
+
+        private boolean isWhitespace(int start, int end) {
+            return PATTERN_WHITESPACE.matcher(mText.substring(start, end)).matches();
         }
     }
 
@@ -334,7 +539,7 @@
     private static final class TextClassificationAsyncTask
             extends AsyncTask<Void, Void, SelectionResult> {
 
-        private final int mTimeOutDuration;
+        private final long mTimeOutDuration;
         private final Supplier<SelectionResult> mSelectionResultSupplier;
         private final Consumer<SelectionResult> mSelectionResultCallback;
         private final TextView mTextView;
@@ -347,7 +552,7 @@
          * @param selectionResultCallback receives the selection results. Runs on the UiThread
          */
         TextClassificationAsyncTask(
-                @NonNull TextView textView, int timeOut,
+                @NonNull TextView textView, long timeOut,
                 @NonNull Supplier<SelectionResult> selectionResultSupplier,
                 @NonNull Consumer<SelectionResult> selectionResultCallback) {
             super(textView != null ? textView.getHandler() : null);
@@ -356,7 +561,7 @@
             mSelectionResultSupplier = Preconditions.checkNotNull(selectionResultSupplier);
             mSelectionResultCallback = Preconditions.checkNotNull(selectionResultCallback);
             // Make a copy of the original text.
-            mOriginalText = mTextView.getText().toString();
+            mOriginalText = getText(mTextView).toString();
         }
 
         @Override
@@ -372,7 +577,7 @@
         @Override
         @UiThread
         protected void onPostExecute(SelectionResult result) {
-            result = TextUtils.equals(mOriginalText, mTextView.getText()) ? result : null;
+            result = TextUtils.equals(mOriginalText, getText(mTextView)) ? result : null;
             mSelectionResultCallback.accept(result);
         }
 
@@ -402,8 +607,6 @@
         /** End index relative to mText. */
         private int mSelectionEnd;
         private LocaleList mLocales;
-        /** A tag for the classifier that returned the latest smart selection. */
-        private String mSelectionTag = "";
 
         /** Trimmed text starting from mTrimStart in mText. */
         private CharSequence mTrimmedText;
@@ -421,15 +624,17 @@
         private LocaleList mLastClassificationLocales;
         private SelectionResult mLastClassificationResult;
 
+        /** Whether the TextClassifier has been initialized. */
+        private boolean mHot;
+
         TextClassificationHelper(TextClassifier textClassifier,
                 CharSequence text, int selectionStart, int selectionEnd, LocaleList locales) {
-            reset(textClassifier, text, selectionStart, selectionEnd, true, locales);
+            init(textClassifier, text, selectionStart, selectionEnd, locales);
         }
 
         @UiThread
-        public void reset(TextClassifier textClassifier,
-                CharSequence text, int selectionStart, int selectionEnd,
-                boolean resetSelectionTag, LocaleList locales) {
+        public void init(TextClassifier textClassifier,
+                CharSequence text, int selectionStart, int selectionEnd, LocaleList locales) {
             mTextClassifier = Preconditions.checkNotNull(textClassifier);
             mText = Preconditions.checkNotNull(text).toString();
             mLastClassificationText = null; // invalidate.
@@ -437,13 +642,46 @@
             mSelectionStart = selectionStart;
             mSelectionEnd = selectionEnd;
             mLocales = locales;
-            if (resetSelectionTag) {
-                mSelectionTag = "";
-            }
         }
 
         @WorkerThread
         public SelectionResult classifyText() {
+            mHot = true;
+            return performClassification(null /* selection */);
+        }
+
+        @WorkerThread
+        public SelectionResult suggestSelection() {
+            mHot = true;
+            trimText();
+            final TextSelection selection = mTextClassifier.suggestSelection(
+                    mTrimmedText, mRelativeStart, mRelativeEnd, mLocales);
+            // Do not classify new selection boundaries if TextClassifier should be dark launched.
+            if (!mTextClassifier.getSettings().isDarkLaunch()) {
+                mSelectionStart = Math.max(0, selection.getSelectionStartIndex() + mTrimStart);
+                mSelectionEnd = Math.min(
+                        mText.length(), selection.getSelectionEndIndex() + mTrimStart);
+            }
+            return performClassification(selection);
+        }
+
+        /**
+         * Maximum time (in milliseconds) to wait for a textclassifier result before timing out.
+         */
+        // TODO: Consider making this a ViewConfiguration.
+        public long getTimeoutDuration() {
+            if (mHot) {
+                return 200;
+            } else {
+                // Return a slightly larger number than usual when the TextClassifier is first
+                // initialized. Initialization would usually take longer than subsequent calls to
+                // the TextClassifier. The impact of this on the UI is that we do not show the
+                // selection handles or toolbar until after this timeout.
+                return 500;
+            }
+        }
+
+        private SelectionResult performClassification(@Nullable TextSelection selection) {
             if (!Objects.equals(mText, mLastClassificationText)
                     || mSelectionStart != mLastClassificationSelectionStart
                     || mSelectionEnd != mLastClassificationSelectionEnd
@@ -467,27 +705,13 @@
                 mLastClassificationResult = new SelectionResult(
                         mSelectionStart,
                         mSelectionEnd,
-                        classification);
+                        classification,
+                        selection);
 
             }
             return mLastClassificationResult;
         }
 
-        @WorkerThread
-        public SelectionResult suggestSelection() {
-            trimText();
-            final TextSelection sel = mTextClassifier.suggestSelection(
-                    mTrimmedText, mRelativeStart, mRelativeEnd, mLocales);
-            mSelectionStart = Math.max(0, sel.getSelectionStartIndex() + mTrimStart);
-            mSelectionEnd = Math.min(mText.length(), sel.getSelectionEndIndex() + mTrimStart);
-            mSelectionTag = sel.getSourceClassifier();
-            return classifyText();
-        }
-
-        String getSelectionTag() {
-            return mSelectionTag;
-        }
-
         private void trimText() {
             mTrimStart = Math.max(0, mSelectionStart - TRIM_DELTA);
             final int referenceEnd = Math.min(mText.length(), mSelectionEnd + TRIM_DELTA);
@@ -504,11 +728,45 @@
         private final int mStart;
         private final int mEnd;
         private final TextClassification mClassification;
+        @Nullable private final TextSelection mSelection;
 
-        SelectionResult(int start, int end, TextClassification classification) {
+        SelectionResult(int start, int end,
+                TextClassification classification, @Nullable TextSelection selection) {
             mStart = start;
             mEnd = end;
             mClassification = Preconditions.checkNotNull(classification);
+            mSelection = selection;
         }
     }
+
+    @SelectionEvent.ActionType
+    private static int getActionType(int menuItemId) {
+        switch (menuItemId) {
+            case TextView.ID_SELECT_ALL:
+                return SelectionEvent.ActionType.SELECT_ALL;
+            case TextView.ID_CUT:
+                return SelectionEvent.ActionType.CUT;
+            case TextView.ID_COPY:
+                return SelectionEvent.ActionType.COPY;
+            case TextView.ID_PASTE:  // fall through
+            case TextView.ID_PASTE_AS_PLAIN_TEXT:
+                return SelectionEvent.ActionType.PASTE;
+            case TextView.ID_SHARE:
+                return SelectionEvent.ActionType.SHARE;
+            case TextView.ID_ASSIST:
+                return SelectionEvent.ActionType.SMART_SHARE;
+            default:
+                return SelectionEvent.ActionType.OTHER;
+        }
+    }
+
+    private static CharSequence getText(TextView textView) {
+        // Extracts the textView's text.
+        // TODO: Investigate why/when TextView.getText() is null.
+        final CharSequence text = textView.getText();
+        if (text != null) {
+            return text;
+        }
+        return "";
+    }
 }
diff --git a/core/java/android/widget/TabHost.java b/core/java/android/widget/TabHost.java
index 8de17c0..8696d0d 100644
--- a/core/java/android/widget/TabHost.java
+++ b/core/java/android/widget/TabHost.java
@@ -146,12 +146,17 @@
         // and relays them to the tab content.
         mTabKeyListener = new OnKeyListener() {
             public boolean onKey(View v, int keyCode, KeyEvent event) {
+                if (KeyEvent.isModifierKey(keyCode)) {
+                    return false;
+                }
                 switch (keyCode) {
                     case KeyEvent.KEYCODE_DPAD_CENTER:
                     case KeyEvent.KEYCODE_DPAD_LEFT:
                     case KeyEvent.KEYCODE_DPAD_RIGHT:
                     case KeyEvent.KEYCODE_DPAD_UP:
                     case KeyEvent.KEYCODE_DPAD_DOWN:
+                    case KeyEvent.KEYCODE_TAB:
+                    case KeyEvent.KEYCODE_SPACE:
                     case KeyEvent.KEYCODE_ENTER:
                         return false;
 
diff --git a/core/java/android/widget/TabWidget.java b/core/java/android/widget/TabWidget.java
index 05f7c0a..f8b6837 100644
--- a/core/java/android/widget/TabWidget.java
+++ b/core/java/android/widget/TabWidget.java
@@ -61,7 +61,10 @@
     // This value will be set to 0 as soon as the first tab is added to TabHost.
     private int mSelectedTab = -1;
 
+    @Nullable
     private Drawable mLeftStrip;
+
+    @Nullable
     private Drawable mRightStrip;
 
     private boolean mDrawBottomStrips = true;
@@ -374,23 +377,36 @@
         final Drawable leftStrip = mLeftStrip;
         final Drawable rightStrip = mRightStrip;
 
-        leftStrip.setState(selectedChild.getDrawableState());
-        rightStrip.setState(selectedChild.getDrawableState());
+        if (leftStrip != null) {
+            leftStrip.setState(selectedChild.getDrawableState());
+        }
+        if (rightStrip != null) {
+            rightStrip.setState(selectedChild.getDrawableState());
+        }
 
         if (mStripMoved) {
             final Rect bounds = mBounds;
             bounds.left = selectedChild.getLeft();
             bounds.right = selectedChild.getRight();
             final int myHeight = getHeight();
-            leftStrip.setBounds(Math.min(0, bounds.left - leftStrip.getIntrinsicWidth()),
-                    myHeight - leftStrip.getIntrinsicHeight(), bounds.left, myHeight);
-            rightStrip.setBounds(bounds.right, myHeight - rightStrip.getIntrinsicHeight(),
-                    Math.max(getWidth(), bounds.right + rightStrip.getIntrinsicWidth()), myHeight);
+            if (leftStrip != null) {
+                leftStrip.setBounds(Math.min(0, bounds.left - leftStrip.getIntrinsicWidth()),
+                        myHeight - leftStrip.getIntrinsicHeight(), bounds.left, myHeight);
+            }
+            if (rightStrip != null) {
+                rightStrip.setBounds(bounds.right, myHeight - rightStrip.getIntrinsicHeight(),
+                        Math.max(getWidth(), bounds.right + rightStrip.getIntrinsicWidth()),
+                        myHeight);
+            }
             mStripMoved = false;
         }
 
-        leftStrip.draw(canvas);
-        rightStrip.draw(canvas);
+        if (leftStrip != null) {
+            leftStrip.draw(canvas);
+        }
+        if (rightStrip != null) {
+            rightStrip.draw(canvas);
+        }
     }
 
     /**
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 52fc6d9..9826fa0 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -374,6 +374,8 @@
     private static final int KEY_DOWN_HANDLED_BY_KEY_LISTENER = 1;
     private static final int KEY_DOWN_HANDLED_BY_MOVEMENT_METHOD = 2;
 
+    private static final int FLOATING_TOOLBAR_SELECT_ALL_REFRESH_DELAY = 500;
+
     // System wide time for last cut, copy or text changed action.
     static long sLastCutCopyOrTextChangedTime;
 
@@ -8339,7 +8341,9 @@
     }
 
     private boolean suggestedSizeFitsInSpace(int suggestedSizeInPx, RectF availableSpace) {
-        final CharSequence text = getText();
+        final CharSequence text = mTransformed != null
+                ? mTransformed
+                : getText();
         final int maxLines = getMaxLines();
         if (mTempTextPaint == null) {
             mTempTextPaint = new TextPaint();
@@ -8405,7 +8409,8 @@
 
         if (mMaxMode != LINES) {
             desired = Math.min(desired, mMaximum);
-        } else if (cap && linecount > mMaximum && layout instanceof DynamicLayout) {
+        } else if (cap && linecount > mMaximum && (layout instanceof DynamicLayout
+                || layout instanceof BoringLayout)) {
             desired = layout.getLineTop(mMaximum);
 
             if (dr != null) {
@@ -9360,7 +9365,7 @@
             }
         }
 
-        if (mEditor != null) mEditor.sendOnTextChanged(start, after);
+        if (mEditor != null) mEditor.sendOnTextChanged(start, before, after);
     }
 
     /**
@@ -10318,7 +10323,16 @@
             return;
         }
 
-        setText(value.getTextValue(), mBufferType, true, 0);
+        final CharSequence autofilledValue = value.getTextValue();
+
+        // First autofill it...
+        setText(autofilledValue, mBufferType, true, 0);
+
+        // ...then move cursor to the end.
+        final CharSequence text = getText();
+        if ((text instanceof Spannable)) {
+            Selection.setSelection((Spannable) text, text.length());
+        }
     }
 
     @Override
@@ -10862,6 +10876,7 @@
     @Override
     public boolean performLongClick() {
         boolean handled = false;
+        boolean performedHapticFeedback = false;
 
         if (mEditor != null) {
             mEditor.mIsBeingLongClicked = true;
@@ -10869,6 +10884,7 @@
 
         if (super.performLongClick()) {
             handled = true;
+            performedHapticFeedback = true;
         }
 
         if (mEditor != null) {
@@ -10877,7 +10893,9 @@
         }
 
         if (handled) {
-            performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
+            if (!performedHapticFeedback) {
+              performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
+            }
             if (mEditor != null) mEditor.mDiscardNextActionUp = true;
         } else {
             MetricsLogger.action(
@@ -11138,6 +11156,10 @@
     }
 
     boolean selectAllText() {
+        if (mEditor != null) {
+            // Hide the toolbar before changing the selection to avoid flickering.
+            mEditor.hideFloatingToolbar(FLOATING_TOOLBAR_SELECT_ALL_REFRESH_DELAY);
+        }
         final int length = mText.length();
         Selection.setSelection((Spannable) mText, 0, length);
         return length > 0;
diff --git a/core/java/android/widget/TimePicker.java b/core/java/android/widget/TimePicker.java
index de289bb..ae6881e 100644
--- a/core/java/android/widget/TimePicker.java
+++ b/core/java/android/widget/TimePicker.java
@@ -366,8 +366,11 @@
         void setMinute(@IntRange(from = 0, to = 59) int minute);
         int getMinute();
 
-        void setDate(long date);
-        long getDate();
+        void setDate(@IntRange(from = 0, to = 23) int hour,
+                @IntRange(from = 0, to = 59) int minute);
+
+        void autofill(AutofillValue value);
+        AutofillValue getAutofillValue();
 
         void setIs24Hour(boolean is24Hour);
         boolean is24Hour();
@@ -422,6 +425,11 @@
         protected OnTimeChangedListener mOnTimeChangedListener;
         protected OnTimeChangedListener mAutoFillChangeListener;
 
+        // The value that was passed to autofill() - it must be stored because it getAutofillValue()
+        // must return the exact same value that was autofilled, otherwise the widget will not be
+        // properly highlighted after autofill().
+        private long mAutofilledValue;
+
         public AbstractTimePickerDelegate(@NonNull TimePicker delegator, @NonNull Context context) {
             mDelegator = delegator;
             mContext = context;
@@ -439,19 +447,41 @@
         }
 
         @Override
-        public void setDate(long date) {
-            Calendar cal = Calendar.getInstance(mLocale);
-            cal.setTimeInMillis(date);
-            setHour(cal.get(Calendar.HOUR_OF_DAY));
-            setMinute(cal.get(Calendar.MINUTE));
+        public final void autofill(AutofillValue value) {
+            if (value == null || !value.isDate()) {
+                Log.w(LOG_TAG, value + " could not be autofilled into " + this);
+                return;
+            }
+
+            final long time = value.getDateValue();
+
+            final Calendar cal = Calendar.getInstance(mLocale);
+            cal.setTimeInMillis(time);
+            setDate(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE));
+
+            // Must set mAutofilledValue *after* calling subclass method to make sure the value
+            // returned by getAutofillValue() matches it.
+            mAutofilledValue = time;
         }
 
         @Override
-        public long getDate() {
-            Calendar cal = Calendar.getInstance(mLocale);
+        public final AutofillValue getAutofillValue() {
+            if (mAutofilledValue != 0) {
+                return AutofillValue.forDate(mAutofilledValue);
+            }
+
+            final Calendar cal = Calendar.getInstance(mLocale);
             cal.set(Calendar.HOUR_OF_DAY, getHour());
             cal.set(Calendar.MINUTE, getMinute());
-            return cal.getTimeInMillis();
+            return AutofillValue.forDate(cal.getTimeInMillis());
+        }
+
+        /**
+         * This method must be called every time the value of the hour and/or minute is changed by
+         * a subclass method.
+         */
+        protected void resetAutofilledValue() {
+            mAutofilledValue = 0;
         }
 
         protected static class SavedState extends View.BaseSavedState {
@@ -532,12 +562,7 @@
     public void autofill(AutofillValue value) {
         if (!isEnabled()) return;
 
-        if (!value.isDate()) {
-            Log.w(LOG_TAG, value + " could not be autofilled into " + this);
-            return;
-        }
-
-        mDelegate.setDate(value.getDateValue());
+        mDelegate.autofill(value);
     }
 
     @Override
@@ -547,6 +572,6 @@
 
     @Override
     public AutofillValue getAutofillValue() {
-        return isEnabled() ? AutofillValue.forDate(mDelegate.getDate()) : null;
+        return isEnabled() ? mDelegate.getAutofillValue() : null;
     }
 }
diff --git a/core/java/android/widget/TimePickerClockDelegate.java b/core/java/android/widget/TimePickerClockDelegate.java
index d3c83ee..706b0ce 100644
--- a/core/java/android/widget/TimePickerClockDelegate.java
+++ b/core/java/android/widget/TimePickerClockDelegate.java
@@ -26,6 +26,7 @@
 import android.icu.text.DecimalFormatSymbols;
 import android.os.Parcelable;
 import android.text.SpannableStringBuilder;
+import android.text.TextUtils;
 import android.text.format.DateFormat;
 import android.text.format.DateUtils;
 import android.text.style.TtsSpan;
@@ -41,6 +42,7 @@
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.RadialTimePickerView.OnValueSelectedListener;
 import android.widget.TextInputTimePickerView.OnValueTypedListener;
 
@@ -110,7 +112,11 @@
     private int mCurrentHour;
     private int mCurrentMinute;
     private boolean mIs24Hour;
-    private boolean mIsAmPmAtStart;
+
+    // The portrait layout puts AM/PM at the right by default.
+    private boolean mIsAmPmAtLeft = false;
+    // The landscape layouts put AM/PM at the bottom by default.
+    private boolean mIsAmPmAtTop = false;
 
     // Localization data.
     private boolean mHourFormatShowLeadingZero;
@@ -262,6 +268,10 @@
             mRadialTimePickerModeButton.setContentDescription(
                     mTextInputPickerModeEnabledDescription);
             updateTextInputPicker();
+            InputMethodManager imm = InputMethodManager.peekInstance();
+            if (imm != null) {
+                imm.hideSoftInputFromWindow(mDelegator.getWindowToken(), 0);
+            }
             mRadialPickerModeEnabled = true;
         }
     }
@@ -430,34 +440,78 @@
         if (mIs24Hour) {
             mAmPmLayout.setVisibility(View.GONE);
         } else {
-            // Ensure that AM/PM layout is in the correct position.
+            // Find the location of AM/PM based on locale information.
             final String dateTimePattern = DateFormat.getBestDateTimePattern(mLocale, "hm");
             final boolean isAmPmAtStart = dateTimePattern.startsWith("a");
-            setAmPmAtStart(isAmPmAtStart);
-
+            setAmPmStart(isAmPmAtStart);
             updateAmPmLabelStates(mCurrentHour < 12 ? AM : PM);
         }
     }
 
-    private void setAmPmAtStart(boolean isAmPmAtStart) {
-        if (mIsAmPmAtStart != isAmPmAtStart) {
-            mIsAmPmAtStart = isAmPmAtStart;
-
-            final RelativeLayout.LayoutParams params =
-                    (RelativeLayout.LayoutParams) mAmPmLayout.getLayoutParams();
-            if (params.getRule(RelativeLayout.RIGHT_OF) != 0 ||
-                    params.getRule(RelativeLayout.LEFT_OF) != 0) {
-                if (isAmPmAtStart) {
-                    params.removeRule(RelativeLayout.RIGHT_OF);
-                    params.addRule(RelativeLayout.LEFT_OF, mHourView.getId());
-                } else {
-                    params.removeRule(RelativeLayout.LEFT_OF);
-                    params.addRule(RelativeLayout.RIGHT_OF, mMinuteView.getId());
-                }
+    private void setAmPmStart(boolean isAmPmAtStart) {
+        final RelativeLayout.LayoutParams params =
+                (RelativeLayout.LayoutParams) mAmPmLayout.getLayoutParams();
+        if (params.getRule(RelativeLayout.RIGHT_OF) != 0
+                || params.getRule(RelativeLayout.LEFT_OF) != 0) {
+            // Horizontal mode, with AM/PM appearing to left/right of hours and minutes.
+            final boolean isAmPmAtLeft;
+            if (TextUtils.getLayoutDirectionFromLocale(mLocale) == View.LAYOUT_DIRECTION_LTR) {
+                isAmPmAtLeft = isAmPmAtStart;
+            } else {
+                isAmPmAtLeft = !isAmPmAtStart;
+            }
+            if (mIsAmPmAtLeft == isAmPmAtLeft) {
+                // AM/PM is already at the correct location. No change needed.
+                return;
             }
 
-            mAmPmLayout.setLayoutParams(params);
+            if (isAmPmAtLeft) {
+                params.removeRule(RelativeLayout.RIGHT_OF);
+                params.addRule(RelativeLayout.LEFT_OF, mHourView.getId());
+            } else {
+                params.removeRule(RelativeLayout.LEFT_OF);
+                params.addRule(RelativeLayout.RIGHT_OF, mMinuteView.getId());
+            }
+            mIsAmPmAtLeft = isAmPmAtLeft;
+        } else if (params.getRule(RelativeLayout.BELOW) != 0
+                || params.getRule(RelativeLayout.ABOVE) != 0) {
+            // Vertical mode, with AM/PM appearing to top/bottom of hours and minutes.
+            if (mIsAmPmAtTop == isAmPmAtStart) {
+                // AM/PM is already at the correct location. No change needed.
+                return;
+            }
+
+            final int otherViewId;
+            if (isAmPmAtStart) {
+                otherViewId = params.getRule(RelativeLayout.BELOW);
+                params.removeRule(RelativeLayout.BELOW);
+                params.addRule(RelativeLayout.ABOVE, otherViewId);
+            } else {
+                otherViewId = params.getRule(RelativeLayout.ABOVE);
+                params.removeRule(RelativeLayout.ABOVE);
+                params.addRule(RelativeLayout.BELOW, otherViewId);
+            }
+
+            // Switch the top and bottom paddings on the other view.
+            final View otherView = mRadialTimePickerHeader.findViewById(otherViewId);
+            final int top = otherView.getPaddingTop();
+            final int bottom = otherView.getPaddingBottom();
+            final int left = otherView.getPaddingLeft();
+            final int right = otherView.getPaddingRight();
+            otherView.setPadding(left, bottom, right, top);
+
+            mIsAmPmAtTop = isAmPmAtStart;
         }
+
+        mAmPmLayout.setLayoutParams(params);
+    }
+
+    @Override
+    public void setDate(int hour, int minute) {
+        setHourInternal(hour, FROM_EXTERNAL_API, true, false);
+        setMinuteInternal(minute, FROM_EXTERNAL_API, false);
+
+        onTimeChanged();
     }
 
     /**
@@ -465,14 +519,16 @@
      */
     @Override
     public void setHour(int hour) {
-        setHourInternal(hour, FROM_EXTERNAL_API, true);
+        setHourInternal(hour, FROM_EXTERNAL_API, true, true);
     }
 
-    private void setHourInternal(int hour, @ChangeSource int source, boolean announce) {
+    private void setHourInternal(int hour, @ChangeSource int source, boolean announce,
+            boolean notify) {
         if (mCurrentHour == hour) {
             return;
         }
 
+        resetAutofilledValue();
         mCurrentHour = hour;
         updateHeaderHour(hour, announce);
         updateHeaderAmPm();
@@ -486,7 +542,9 @@
         }
 
         mDelegator.invalidate();
-        onTimeChanged();
+        if (notify) {
+            onTimeChanged();
+        }
     }
 
     /**
@@ -511,14 +569,15 @@
      */
     @Override
     public void setMinute(int minute) {
-        setMinuteInternal(minute, FROM_EXTERNAL_API);
+        setMinuteInternal(minute, FROM_EXTERNAL_API, true);
     }
 
-    private void setMinuteInternal(int minute, @ChangeSource int source) {
+    private void setMinuteInternal(int minute, @ChangeSource int source, boolean notify) {
         if (mCurrentMinute == minute) {
             return;
         }
 
+        resetAutofilledValue();
         mCurrentMinute = minute;
         updateHeaderMinute(minute, true);
 
@@ -530,7 +589,9 @@
         }
 
         mDelegator.invalidate();
-        onTimeChanged();
+        if (notify) {
+            onTimeChanged();
+        }
     }
 
     /**
@@ -824,7 +885,7 @@
                         valueChanged = true;
                     }
                     final boolean isTransition = mAllowAutoAdvance && autoAdvance;
-                    setHourInternal(newValue, FROM_RADIAL_PICKER, !isTransition);
+                    setHourInternal(newValue, FROM_RADIAL_PICKER, !isTransition, true);
                     if (isTransition) {
                         setCurrentItemShowing(MINUTE_INDEX, true, false);
 
@@ -836,7 +897,7 @@
                     if (getMinute() != newValue) {
                         valueChanged = true;
                     }
-                    setMinuteInternal(newValue, FROM_RADIAL_PICKER);
+                    setMinuteInternal(newValue, FROM_RADIAL_PICKER, true);
                     break;
             }
 
@@ -851,10 +912,10 @@
         public void onValueChanged(int pickerType, int newValue) {
             switch (pickerType) {
                 case TextInputTimePickerView.HOURS:
-                    setHourInternal(newValue, FROM_INPUT_PICKER, false);
+                    setHourInternal(newValue, FROM_INPUT_PICKER, false, true);
                     break;
                 case TextInputTimePickerView.MINUTES:
-                    setMinuteInternal(newValue, FROM_INPUT_PICKER);
+                    setMinuteInternal(newValue, FROM_INPUT_PICKER, true);
                     break;
                 case TextInputTimePickerView.AMPM:
                     setAmOrPm(newValue);
diff --git a/core/java/android/widget/TimePickerSpinnerDelegate.java b/core/java/android/widget/TimePickerSpinnerDelegate.java
index 7a7d9a9..cc79b9c 100644
--- a/core/java/android/widget/TimePickerSpinnerDelegate.java
+++ b/core/java/android/widget/TimePickerSpinnerDelegate.java
@@ -284,6 +284,14 @@
     }
 
     @Override
+    public void setDate(int hour, int minute) {
+        setCurrentHour(hour, false);
+        setCurrentMinute(minute, false);
+
+        onTimeChanged();
+    }
+
+    @Override
     public void setHour(int hour) {
         setCurrentHour(hour, true);
     }
@@ -293,6 +301,7 @@
         if (currentHour == getHour()) {
             return;
         }
+        resetAutofilledValue();
         if (!is24Hour()) {
             // convert [0,23] ordinal to wall clock display
             if (currentHour >= HOURS_IN_HALF_DAY) {
@@ -328,11 +337,18 @@
 
     @Override
     public void setMinute(int minute) {
+        setCurrentMinute(minute, true);
+    }
+
+    private void setCurrentMinute(int minute, boolean notifyTimeChanged) {
         if (minute == getMinute()) {
             return;
         }
+        resetAutofilledValue();
         mMinuteSpinner.setValue(minute);
-        onTimeChanged();
+        if (notifyTimeChanged) {
+            onTimeChanged();
+        }
     }
 
     @Override
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index 54afc95..6e0ba341 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -100,7 +100,7 @@
     private static final boolean DEBUG = false;
 
     private static final int QUERY_TARGET_SERVICE_LIMIT = 5;
-    private static final int WATCHDOG_TIMEOUT_MILLIS = 5000;
+    private static final int WATCHDOG_TIMEOUT_MILLIS = 2000;
 
     private Bundle mReplacementExtras;
     private IntentSender mChosenComponentSender;
@@ -1450,11 +1450,16 @@
                         getFirstRowPosition(rowPosition + 1));
                 int serviceSpacing = holder.row.getContext().getResources()
                         .getDimensionPixelSize(R.dimen.chooser_service_spacing);
-                int top = rowPosition == 0 ? serviceSpacing : 0;
-                if (nextStartType != ChooserListAdapter.TARGET_SERVICE) {
-                    setVertPadding(holder, top, serviceSpacing);
+                if (rowPosition == 0 && nextStartType != ChooserListAdapter.TARGET_SERVICE) {
+                    // if the row is the only row for target service
+                    setVertPadding(holder, 0, 0);
                 } else {
-                    setVertPadding(holder, top, 0);
+                    int top = rowPosition == 0 ? serviceSpacing : 0;
+                    if (nextStartType != ChooserListAdapter.TARGET_SERVICE) {
+                        setVertPadding(holder, top, serviceSpacing);
+                    } else {
+                        setVertPadding(holder, top, 0);
+                    }
                 }
             } else {
                 holder.row.setBackgroundColor(Color.TRANSPARENT);
@@ -1470,10 +1475,8 @@
             }
 
             final int oldHeight = holder.row.getLayoutParams().height;
-            int measuredRowHeight = holder.measuredRowHeight + holder.row.getPaddingTop()
-                    + holder.row.getPaddingBottom();
             holder.row.getLayoutParams().height = Math.max(1,
-                    (int) (measuredRowHeight * getRowScale(rowPosition)));
+                    (int) (holder.measuredRowHeight * getRowScale(rowPosition)));
             if (holder.row.getLayoutParams().height != oldHeight) {
                 holder.row.requestLayout();
             }
@@ -1582,8 +1585,8 @@
                 } catch (RemoteException e) {
                     Log.e(TAG, "Querying ChooserTargetService " + name + " failed.", e);
                     mChooserActivity.unbindService(this);
-                    destroy();
                     mChooserActivity.mServiceConnections.remove(this);
+                    destroy();
                 }
             }
         }
@@ -1599,7 +1602,6 @@
                 }
 
                 mChooserActivity.unbindService(this);
-                destroy();
                 mChooserActivity.mServiceConnections.remove(this);
                 if (mChooserActivity.mServiceConnections.isEmpty()) {
                     mChooserActivity.mChooserHandler.removeMessages(
@@ -1607,6 +1609,7 @@
                     mChooserActivity.sendVoiceChoicesIfNeeded();
                 }
                 mConnectedComponent = null;
+                destroy();
             }
         }
 
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index a44fd67..4275e0b 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -66,7 +66,7 @@
     void noteSyncStart(String name, int uid);
     void noteSyncFinish(String name, int uid);
     void noteJobStart(String name, int uid);
-    void noteJobFinish(String name, int uid);
+    void noteJobFinish(String name, int uid, int stopReason);
 
     void noteStartWakelock(int uid, int pid, String name, String historyName,
             int type, boolean unimportantForLogging);
diff --git a/core/java/com/android/internal/app/IMediaContainerService.aidl b/core/java/com/android/internal/app/IMediaContainerService.aidl
index 81ea191..36e4c1c6 100644
--- a/core/java/com/android/internal/app/IMediaContainerService.aidl
+++ b/core/java/com/android/internal/app/IMediaContainerService.aidl
@@ -27,9 +27,6 @@
 
     PackageInfoLite getMinimalPackageInfo(String packagePath, int flags, String abiOverride);
     ObbInfo getObbInfo(String filename);
-    long calculateDirectorySize(String directory);
-    /** Return file system stats: [0] is total bytes, [1] is available bytes */
-    long[] getFileSystemStats(String path);
     void clearDirectory(String directory);
     long calculateInstalledSize(String packagePath, boolean isForwardLocked, String abiOverride);
 }
diff --git a/core/java/com/android/internal/app/LocalePickerWithRegion.java b/core/java/com/android/internal/app/LocalePickerWithRegion.java
index d0719ee..3d5cd0f 100644
--- a/core/java/com/android/internal/app/LocalePickerWithRegion.java
+++ b/core/java/com/android/internal/app/LocalePickerWithRegion.java
@@ -238,7 +238,7 @@
             mSearchView.setOnQueryTextListener(this);
 
             // Restore previous search status
-            if (!TextUtils.isEmpty(mPreviousSearch)) {
+            if (mPreviousSearch != null) {
                 searchMenuItem.expandActionView();
                 mSearchView.setIconified(false);
                 mSearchView.setActivated(true);
diff --git a/core/java/com/android/internal/app/MediaRouteControllerDialog.java b/core/java/com/android/internal/app/MediaRouteControllerDialog.java
index 635a868..61e63d1 100644
--- a/core/java/com/android/internal/app/MediaRouteControllerDialog.java
+++ b/core/java/com/android/internal/app/MediaRouteControllerDialog.java
@@ -72,6 +72,7 @@
     private boolean mVolumeSliderTouched;
 
     private View mControlView;
+    private boolean mAttachedToWindow;
 
     public MediaRouteControllerDialog(Context context, int theme) {
         super(context, theme);
@@ -215,6 +216,7 @@
     @Override
     public void onAttachedToWindow() {
         super.onAttachedToWindow();
+        mAttachedToWindow = true;
 
         mRouter.addCallback(0, mCallback, MediaRouter.CALLBACK_FLAG_UNFILTERED_EVENTS);
         update();
@@ -223,6 +225,7 @@
     @Override
     public void onDetachedFromWindow() {
         mRouter.removeCallback(mCallback);
+        mAttachedToWindow = false;
 
         super.onDetachedFromWindow();
     }
@@ -260,7 +263,14 @@
             mCurrentIconDrawable = icon;
             if (icon instanceof AnimationDrawable) {
                 AnimationDrawable animDrawable = (AnimationDrawable) icon;
-                if (!animDrawable.isRunning()) {
+                if (!mAttachedToWindow && !mRoute.isConnecting()) {
+                    // When the route is already connected before the view is attached, show the
+                    // last frame of the connected animation immediately.
+                    if (animDrawable.isRunning()) {
+                        animDrawable.stop();
+                    }
+                    icon = animDrawable.getFrame(animDrawable.getNumberOfFrames() - 1);
+                } else if (!animDrawable.isRunning()) {
                     animDrawable.start();
                 }
             }
diff --git a/core/java/com/android/internal/app/NightDisplayController.java b/core/java/com/android/internal/app/NightDisplayController.java
index 78a8b17..e0e15c8 100644
--- a/core/java/com/android/internal/app/NightDisplayController.java
+++ b/core/java/com/android/internal/app/NightDisplayController.java
@@ -25,6 +25,7 @@
 import android.net.Uri;
 import android.os.Handler;
 import android.os.Looper;
+import android.os.SystemProperties;
 import android.provider.Settings.Secure;
 import android.provider.Settings.System;
 import android.util.Slog;
@@ -33,8 +34,12 @@
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
-import java.util.Calendar;
-import java.util.Locale;
+import java.time.DateTimeException;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeParseException;
 
 /**
  * Controller for managing Night display settings.
@@ -96,6 +101,12 @@
      */
     public static final int COLOR_MODE_SATURATED = 2;
 
+    /**
+     * See com.android.server.display.DisplayTransformManager.
+     */
+    private static final String PERSISTENT_PROPERTY_SATURATION = "persist.sys.sf.color_saturation";
+    private static final String PERSISTENT_PROPERTY_NATIVE_MODE = "persist.sys.sf.native_mode";
+
     private final Context mContext;
     private final int mUserId;
 
@@ -140,9 +151,9 @@
      */
     public boolean setActivated(boolean activated) {
         if (isActivated() != activated) {
-            Secure.putLongForUser(mContext.getContentResolver(),
+            Secure.putStringForUser(mContext.getContentResolver(),
                     Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME,
-                    java.lang.System.currentTimeMillis(),
+                    LocalDateTime.now().toString(),
                     mUserId);
         }
         return Secure.putIntForUser(mContext.getContentResolver(),
@@ -153,17 +164,22 @@
      * Returns the time when Night display's activation state last changed, or {@code null} if it
      * has never been changed.
      */
-    public Calendar getLastActivatedTime() {
+    public LocalDateTime getLastActivatedTime() {
         final ContentResolver cr = mContext.getContentResolver();
-        final long lastActivatedTimeMillis = Secure.getLongForUser(
-                cr, Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, -1, mUserId);
-        if (lastActivatedTimeMillis < 0) {
-            return null;
+        final String lastActivatedTime = Secure.getStringForUser(
+                cr, Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, mUserId);
+        if (lastActivatedTime != null) {
+            try {
+                return LocalDateTime.parse(lastActivatedTime);
+            } catch (DateTimeParseException ignored) {}
+            // Uses the old epoch time.
+            try {
+                return LocalDateTime.ofInstant(
+                    Instant.ofEpochMilli(Long.parseLong(lastActivatedTime)),
+                    ZoneId.systemDefault());
+            } catch (DateTimeException|NumberFormatException ignored) {}
         }
-
-        final Calendar lastActivatedTime = Calendar.getInstance();
-        lastActivatedTime.setTimeInMillis(lastActivatedTimeMillis);
-        return lastActivatedTime;
+        return null;
     }
 
     /**
@@ -208,8 +224,10 @@
         }
 
         if (getAutoMode() != autoMode) {
-            Secure.putLongForUser(mContext.getContentResolver(),
-                    Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, -1L, mUserId);
+            Secure.putStringForUser(mContext.getContentResolver(),
+                    Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME,
+                    null,
+                    mUserId);
         }
         return Secure.putIntForUser(mContext.getContentResolver(),
                 Secure.NIGHT_DISPLAY_AUTO_MODE, autoMode, mUserId);
@@ -231,7 +249,7 @@
                     R.integer.config_defaultNightDisplayCustomStartTime);
         }
 
-        return LocalTime.valueOf(startTimeValue);
+        return LocalTime.ofSecondOfDay(startTimeValue / 1000);
     }
 
     /**
@@ -246,7 +264,7 @@
             throw new IllegalArgumentException("startTime cannot be null");
         }
         return Secure.putIntForUser(mContext.getContentResolver(),
-                Secure.NIGHT_DISPLAY_CUSTOM_START_TIME, startTime.toMillis(), mUserId);
+                Secure.NIGHT_DISPLAY_CUSTOM_START_TIME, startTime.toSecondOfDay() * 1000, mUserId);
     }
 
     /**
@@ -265,7 +283,7 @@
                     R.integer.config_defaultNightDisplayCustomEndTime);
         }
 
-        return LocalTime.valueOf(endTimeValue);
+        return LocalTime.ofSecondOfDay(endTimeValue / 1000);
     }
 
     /**
@@ -280,7 +298,7 @@
             throw new IllegalArgumentException("endTime cannot be null");
         }
         return Secure.putIntForUser(mContext.getContentResolver(),
-                Secure.NIGHT_DISPLAY_CUSTOM_END_TIME, endTime.toMillis(), mUserId);
+                Secure.NIGHT_DISPLAY_CUSTOM_END_TIME, endTime.toSecondOfDay() * 1000, mUserId);
     }
 
     /**
@@ -323,9 +341,15 @@
      */
     public int getColorMode() {
         final int colorMode = System.getIntForUser(mContext.getContentResolver(),
-            System.DISPLAY_COLOR_MODE, COLOR_MODE_BOOSTED, mUserId);
+            System.DISPLAY_COLOR_MODE, -1, mUserId);
         if (colorMode < COLOR_MODE_NATURAL || colorMode > COLOR_MODE_SATURATED) {
-            return COLOR_MODE_BOOSTED;
+            // There still might be a legacy system property controlling color mode that we need to
+            // respect.
+            if ("1".equals(SystemProperties.get(PERSISTENT_PROPERTY_NATIVE_MODE))) {
+                return COLOR_MODE_SATURATED;
+            }
+            return "1.0".equals(SystemProperties.get(PERSISTENT_PROPERTY_SATURATION))
+                    ? COLOR_MODE_NATURAL : COLOR_MODE_BOOSTED;
         }
         return colorMode;
     }
@@ -434,106 +458,6 @@
     }
 
     /**
-     * A time without a time-zone or date.
-     */
-    public static class LocalTime {
-
-        /**
-         * The hour of the day from 0 - 23.
-         */
-        public final int hourOfDay;
-        /**
-         * The minute within the hour from 0 - 59.
-         */
-        public final int minute;
-
-        public LocalTime(int hourOfDay, int minute) {
-            if (hourOfDay < 0 || hourOfDay > 23) {
-                throw new IllegalArgumentException("Invalid hourOfDay: " + hourOfDay);
-            } else if (minute < 0 || minute > 59) {
-                throw new IllegalArgumentException("Invalid minute: " + minute);
-            }
-
-            this.hourOfDay = hourOfDay;
-            this.minute = minute;
-        }
-
-        /**
-         * Returns the first date time corresponding to this local time that occurs before the
-         * provided date time.
-         *
-         * @param time the date time to compare against
-         * @return the prior date time corresponding to this local time
-         */
-        public Calendar getDateTimeBefore(Calendar time) {
-            final Calendar c = Calendar.getInstance();
-            c.set(Calendar.YEAR, time.get(Calendar.YEAR));
-            c.set(Calendar.DAY_OF_YEAR, time.get(Calendar.DAY_OF_YEAR));
-
-            c.set(Calendar.HOUR_OF_DAY, hourOfDay);
-            c.set(Calendar.MINUTE, minute);
-            c.set(Calendar.SECOND, 0);
-            c.set(Calendar.MILLISECOND, 0);
-
-            // Check if the local time has past, if so return the same time tomorrow.
-            if (c.after(time)) {
-                c.add(Calendar.DATE, -1);
-            }
-
-            return c;
-        }
-
-        /**
-         * Returns the first date time corresponding to this local time that occurs after the
-         * provided date time.
-         *
-         * @param time the date time to compare against
-         * @return the next date time corresponding to this local time
-         */
-        public Calendar getDateTimeAfter(Calendar time) {
-            final Calendar c = Calendar.getInstance();
-            c.set(Calendar.YEAR, time.get(Calendar.YEAR));
-            c.set(Calendar.DAY_OF_YEAR, time.get(Calendar.DAY_OF_YEAR));
-
-            c.set(Calendar.HOUR_OF_DAY, hourOfDay);
-            c.set(Calendar.MINUTE, minute);
-            c.set(Calendar.SECOND, 0);
-            c.set(Calendar.MILLISECOND, 0);
-
-            // Check if the local time has past, if so return the same time tomorrow.
-            if (c.before(time)) {
-                c.add(Calendar.DATE, 1);
-            }
-
-            return c;
-        }
-
-        /**
-         * Returns a local time corresponding the given number of milliseconds from midnight.
-         *
-         * @param millis the number of milliseconds from midnight
-         * @return the corresponding local time
-         */
-        private static LocalTime valueOf(int millis) {
-            final int hourOfDay = (millis / 3600000) % 24;
-            final int minutes = (millis / 60000) % 60;
-            return new LocalTime(hourOfDay, minutes);
-        }
-
-        /**
-         * Returns the local time represented as milliseconds from midnight.
-         */
-        private int toMillis() {
-            return hourOfDay * 3600000 + minute * 60000;
-        }
-
-        @Override
-        public String toString() {
-            return String.format(Locale.US, "%02d:%02d", hourOfDay, minute);
-        }
-    }
-
-    /**
      * Callback invoked whenever the Night display settings are changed.
      */
     public interface Callback {
diff --git a/core/java/com/android/internal/app/PlatLogoActivity.java b/core/java/com/android/internal/app/PlatLogoActivity.java
index 36ab394..b22ce5e 100644
--- a/core/java/com/android/internal/app/PlatLogoActivity.java
+++ b/core/java/com/android/internal/app/PlatLogoActivity.java
@@ -53,8 +53,7 @@
 import android.widget.ImageView;
 
 public class PlatLogoActivity extends Activity {
-    public static final boolean REVEAL_THE_NAME = false;
-    public static final boolean FINISH = false;
+    public static final boolean FINISH = true;
 
     FrameLayout mLayout;
     int mTapCount;
@@ -85,15 +84,18 @@
         im.setAlpha(0f);
 
         im.setBackground(new RippleDrawable(
-                ColorStateList.valueOf(0xFFFFFFFF),
+                ColorStateList.valueOf(0xFF776677),
                 getDrawable(com.android.internal.R.drawable.platlogo),
                 null));
-//        im.setOutlineProvider(new ViewOutlineProvider() {
-//            @Override
-//            public void getOutline(View view, Outline outline) {
-//                outline.setOval(0, 0, view.getWidth(), view.getHeight());
-//            }
-//        });
+        im.setOutlineProvider(new ViewOutlineProvider() {
+            @Override
+            public void getOutline(View view, Outline outline) {
+                final int w = view.getWidth();
+                final int h = view.getHeight();
+                outline.setOval((int)(w*.125), (int)(h*.125), (int)(w*.96), (int)(h*.96));
+            }
+        });
+        im.setElevation(12f*dp);
         im.setClickable(true);
         im.setOnClickListener(new View.OnClickListener() {
             @Override
@@ -103,18 +105,6 @@
                     public boolean onLongClick(View v) {
                         if (mTapCount < 5) return false;
 
-                        if (REVEAL_THE_NAME) {
-                            final Drawable overlay = getDrawable(
-                                com.android.internal.R.drawable.platlogo_m);
-                            overlay.setBounds(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
-                            im.getOverlay().clear();
-                            im.getOverlay().add(overlay);
-                            overlay.setAlpha(0);
-                            ObjectAnimator.ofInt(overlay, "alpha", 0, 255)
-                                .setDuration(500)
-                                .start();
-                        }
-
                         final ContentResolver cr = getContentResolver();
                         if (Settings.System.getLong(cr, Settings.System.EGG_MODE, 0)
                                 == 0) {
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 5c1bafd..ceb06f5 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -36,6 +36,7 @@
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ResolveInfo;
 import android.content.pm.UserInfo;
+import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
@@ -50,6 +51,7 @@
 import android.provider.MediaStore;
 import android.provider.Settings;
 import android.text.TextUtils;
+import android.util.IconDrawableFactory;
 import android.util.Log;
 import android.util.Slog;
 import android.view.LayoutInflater;
@@ -120,6 +122,8 @@
     /** See {@link #setRetainInOnStop}. */
     private boolean mRetainInOnStop;
 
+    IconDrawableFactory mIconFactory;
+
     private final PackageMonitor mPackageMonitor = new PackageMonitor() {
         @Override public void onSomePackagesChanged() {
             mAdapter.handlePackagesChanged();
@@ -330,6 +334,13 @@
                 : MetricsProto.MetricsEvent.ACTION_SHOW_APP_DISAMBIG_NONE_FEATURED,
                 intent.getAction() + ":" + intent.getType() + ":"
                         + (categories != null ? Arrays.toString(categories.toArray()) : ""));
+        mIconFactory = IconDrawableFactory.newInstance(this, true);
+    }
+
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        mAdapter.handlePackagesChanged();
     }
 
     /**
@@ -468,20 +479,20 @@
             if (ri.resolvePackageName != null && ri.icon != 0) {
                 dr = getIcon(mPm.getResourcesForApplication(ri.resolvePackageName), ri.icon);
                 if (dr != null) {
-                    return dr;
+                    return mIconFactory.getShadowedIcon(dr);
                 }
             }
             final int iconRes = ri.getIconResource();
             if (iconRes != 0) {
                 dr = getIcon(mPm.getResourcesForApplication(ri.activityInfo.packageName), iconRes);
                 if (dr != null) {
-                    return dr;
+                    return mIconFactory.getShadowedIcon(dr);
                 }
             }
         } catch (NameNotFoundException e) {
             Log.e(TAG, "Couldn't find resources for package", e);
         }
-        return ri.loadIcon(mPm);
+        return mIconFactory.getBadgedIcon(ri.activityInfo.applicationInfo);
     }
 
     @Override
@@ -1930,7 +1941,8 @@
             final int checkedPos = mAdapterView.getCheckedItemPosition();
             final boolean hasValidSelection = checkedPos != ListView.INVALID_POSITION;
             if (!useLayoutWithDefault()
-                    && (!hasValidSelection || mLastSelected != checkedPos)) {
+                    && (!hasValidSelection || mLastSelected != checkedPos)
+                    && mAlwaysButton != null) {
                 setAlwaysButtonEnabled(hasValidSelection, checkedPos, true);
                 mOnceButton.setEnabled(hasValidSelection);
                 if (hasValidSelection) {
diff --git a/core/java/com/android/internal/app/ResolverComparator.java b/core/java/com/android/internal/app/ResolverComparator.java
index a0f58a9..77cfc2fc 100644
--- a/core/java/com/android/internal/app/ResolverComparator.java
+++ b/core/java/com/android/internal/app/ResolverComparator.java
@@ -30,6 +30,7 @@
 import android.content.pm.ResolveInfo;
 import android.content.SharedPreferences;
 import android.content.ServiceConnection;
+import android.metrics.LogMaker;
 import android.os.Environment;
 import android.os.Handler;
 import android.os.IBinder;
@@ -46,6 +47,8 @@
 import android.util.ArrayMap;
 import android.util.Log;
 import com.android.internal.app.ResolverActivity.ResolvedComponentInfo;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 
 import java.io.File;
 import java.lang.InterruptedException;
@@ -99,6 +102,8 @@
     private String mContentType;
     private String[] mAnnotations;
     private String mAction;
+    private ComponentName mResolvedRankerName;
+    private ComponentName mRankerServiceName;
     private IResolverRankerService mRanker;
     private ResolverRankerServiceConnection mConnection;
     private AfterCompute mAfterCompute;
@@ -119,9 +124,17 @@
                             if (receivedTargets != null && mTargets != null
                                     && receivedTargets.size() == mTargets.size()) {
                                 final int size = mTargets.size();
+                                boolean isUpdated = false;
                                 for (int i = 0; i < size; ++i) {
-                                    mTargets.get(i).setSelectProbability(
-                                            receivedTargets.get(i).getSelectProbability());
+                                    final float predictedProb =
+                                            receivedTargets.get(i).getSelectProbability();
+                                    if (predictedProb != mTargets.get(i).getSelectProbability()) {
+                                        mTargets.get(i).setSelectProbability(predictedProb);
+                                        isUpdated = true;
+                                    }
+                                }
+                                if (isUpdated) {
+                                    mRankerServiceName = mResolvedRankerName;
                                 }
                             } else {
                                 Log.e(TAG, "Sizes of sent and received ResolverTargets diff.");
@@ -170,6 +183,7 @@
         mContentType = intent.getType();
         getContentAnnotations(intent);
         mAction = intent.getAction();
+        mRankerServiceName = new ComponentName(mContext, this.getClass());
     }
 
     // get annotations of content from intent.
@@ -323,11 +337,13 @@
                 final ResolverTarget rhsTarget = mTargetsDict.get(new ComponentName(
                         rhs.activityInfo.packageName, rhs.activityInfo.name));
 
-                final int selectProbabilityDiff = Float.compare(
+                if (lhsTarget != null && rhsTarget != null) {
+                    final int selectProbabilityDiff = Float.compare(
                         rhsTarget.getSelectProbability(), lhsTarget.getSelectProbability());
 
-                if (selectProbabilityDiff != 0) {
-                    return selectProbabilityDiff > 0 ? 1 : -1;
+                    if (selectProbabilityDiff != 0) {
+                        return selectProbabilityDiff > 0 ? 1 : -1;
+                    }
                 }
             }
         }
@@ -361,7 +377,15 @@
                 try {
                     int selectedPos = new ArrayList<ComponentName>(mTargetsDict.keySet())
                             .indexOf(componentName);
-                    if (selectedPos > 0) {
+                    if (selectedPos >= 0 && mTargets != null) {
+                        final float selectedProbability = getScore(componentName);
+                        int order = 0;
+                        for (ResolverTarget target : mTargets) {
+                            if (target.getSelectProbability() > selectedProbability) {
+                                order++;
+                            }
+                        }
+                        logMetrics(order);
                         mRanker.train(mTargets, selectedPos);
                     } else {
                         if (DEBUG) {
@@ -392,6 +416,19 @@
         }
     }
 
+    // records metrics for evaluation.
+    private void logMetrics(int selectedPos) {
+        if (mRankerServiceName != null) {
+            MetricsLogger metricsLogger = new MetricsLogger();
+            LogMaker log = new LogMaker(MetricsEvent.ACTION_TARGET_SELECTED);
+            log.setComponentName(mRankerServiceName);
+            int isCategoryUsed = (mAnnotations == null) ? 0 : 1;
+            log.addTaggedData(MetricsEvent.FIELD_IS_CATEGORY_USED, isCategoryUsed);
+            log.addTaggedData(MetricsEvent.FIELD_RANKED_POSITION, selectedPos);
+            metricsLogger.write(log);
+        }
+    }
+
     // connect to a ranking service.
     private void initRanker(Context context) {
         synchronized (mLock) {
@@ -454,6 +491,7 @@
             if (DEBUG) {
                 Log.d(TAG, "Succeeded to retrieve a ranker: " + componentName);
             }
+            mResolvedRankerName = componentName;
             intent.setComponent(componentName);
             return intent;
         }
@@ -523,6 +561,8 @@
     private void reset() {
         mTargetsDict.clear();
         mTargets = null;
+        mRankerServiceName = new ComponentName(mContext, this.getClass());
+        mResolvedRankerName = null;
         startWatchDog(WATCHDOG_TIMEOUT_MILLIS);
         initRanker(mContext);
     }
diff --git a/core/java/com/android/internal/app/procstats/ProcessState.java b/core/java/com/android/internal/app/procstats/ProcessState.java
index 9470668..e0a4053 100644
--- a/core/java/com/android/internal/app/procstats/ProcessState.java
+++ b/core/java/com/android/internal/app/procstats/ProcessState.java
@@ -196,7 +196,6 @@
         ProcessState pnew = new ProcessState(this, mPackage, mUid, mVersion, mName, now);
         pnew.mDurations.addDurations(mDurations);
         pnew.mPssTable.copyFrom(mPssTable, PSS_COUNT);
-        pnew.mNumExcessiveWake = mNumExcessiveWake;
         pnew.mNumExcessiveCpu = mNumExcessiveCpu;
         pnew.mNumCachedKill = mNumCachedKill;
         pnew.mMinCachedKillPss = mMinCachedKillPss;
@@ -250,7 +249,6 @@
     public void add(ProcessState other) {
         mDurations.addDurations(other.mDurations);
         mPssTable.mergeStats(other.mPssTable);
-        mNumExcessiveWake += other.mNumExcessiveWake;
         mNumExcessiveCpu += other.mNumExcessiveCpu;
         if (other.mNumCachedKill > 0) {
             addCachedKill(other.mNumCachedKill, other.mMinCachedKillPss,
@@ -264,7 +262,6 @@
         mStartTime = now;
         mLastPssState = STATE_NOTHING;
         mLastPssTime = 0;
-        mNumExcessiveWake = 0;
         mNumExcessiveCpu = 0;
         mNumCachedKill = 0;
         mMinCachedKillPss = mAvgCachedKillPss = mMaxCachedKillPss = 0;
@@ -286,7 +283,7 @@
         out.writeInt(mMultiPackage ? 1 : 0);
         mDurations.writeToParcel(out);
         mPssTable.writeToParcel(out);
-        out.writeInt(mNumExcessiveWake);
+        out.writeInt(0);  // was mNumExcessiveWake
         out.writeInt(mNumExcessiveCpu);
         out.writeInt(mNumCachedKill);
         if (mNumCachedKill > 0) {
@@ -309,7 +306,7 @@
         if (!mPssTable.readFromParcel(in)) {
             return false;
         }
-        mNumExcessiveWake = in.readInt();
+        in.readInt(); // was mNumExcessiveWake
         mNumExcessiveCpu = in.readInt();
         mNumCachedKill = in.readInt();
         if (mNumCachedKill > 0) {
@@ -493,18 +490,6 @@
         }
     }
 
-    public void reportExcessiveWake(ArrayMap<String, ProcessStateHolder> pkgList) {
-        ensureNotDead();
-        mCommonProcess.mNumExcessiveWake++;
-        if (!mCommonProcess.mMultiPackage) {
-            return;
-        }
-
-        for (int ip=pkgList.size()-1; ip>=0; ip--) {
-            pullFixedProc(pkgList, ip).mNumExcessiveWake++;
-        }
-    }
-
     public void reportExcessiveCpu(ArrayMap<String, ProcessStateHolder> pkgList) {
         ensureNotDead();
         mCommonProcess.mNumExcessiveCpu++;
@@ -895,10 +880,6 @@
                 }
             }
         }
-        if (mNumExcessiveWake != 0) {
-            pw.print(prefix); pw.print("Killed for excessive wake locks: ");
-                    pw.print(mNumExcessiveWake); pw.println(" times");
-        }
         if (mNumExcessiveCpu != 0) {
             pw.print(prefix); pw.print("Killed for excessive CPU use: ");
                     pw.print(mNumExcessiveCpu); pw.println(" times");
@@ -1072,7 +1053,7 @@
             dumpAllPssCheckin(pw);
             pw.println();
         }
-        if (mNumExcessiveWake > 0 || mNumExcessiveCpu > 0 || mNumCachedKill > 0) {
+        if (mNumExcessiveCpu > 0 || mNumCachedKill > 0) {
             pw.print("pkgkills,");
             pw.print(pkgName);
             pw.print(",");
@@ -1082,7 +1063,7 @@
             pw.print(",");
             pw.print(DumpUtils.collapseString(pkgName, itemName));
             pw.print(",");
-            pw.print(mNumExcessiveWake);
+            pw.print("0"); // was mNumExcessiveWake
             pw.print(",");
             pw.print(mNumExcessiveCpu);
             pw.print(",");
@@ -1114,13 +1095,13 @@
             dumpAllPssCheckin(pw);
             pw.println();
         }
-        if (mNumExcessiveWake > 0 || mNumExcessiveCpu > 0 || mNumCachedKill > 0) {
+        if (mNumExcessiveCpu > 0 || mNumCachedKill > 0) {
             pw.print("kills,");
             pw.print(procName);
             pw.print(",");
             pw.print(uid);
             pw.print(",");
-            pw.print(mNumExcessiveWake);
+            pw.print("0"); // was mNumExcessiveWake
             pw.print(",");
             pw.print(mNumExcessiveCpu);
             pw.print(",");
diff --git a/core/java/com/android/internal/app/procstats/SparseMappingTable.java b/core/java/com/android/internal/app/procstats/SparseMappingTable.java
index 6d79d3b..91b2054 100644
--- a/core/java/com/android/internal/app/procstats/SparseMappingTable.java
+++ b/core/java/com/android/internal/app/procstats/SparseMappingTable.java
@@ -653,7 +653,7 @@
      */
     private static void logOrThrow(String message, Throwable th) {
         Slog.e(TAG, message, th);
-        if (Build.TYPE.equals("eng")) {
+        if (Build.IS_ENG) {
             throw new RuntimeException(message, th);
         }
     }
diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java
index f76b702..543bd0c 100644
--- a/core/java/com/android/internal/backup/LocalTransport.java
+++ b/core/java/com/android/internal/backup/LocalTransport.java
@@ -30,6 +30,7 @@
 import android.system.ErrnoException;
 import android.system.Os;
 import android.system.StructStat;
+import android.util.ArrayMap;
 import android.util.Log;
 
 import com.android.org.bouncycastle.util.encoders.Base64;
@@ -44,7 +45,6 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
-import static android.system.OsConstants.SEEK_CUR;
 
 /**
  * Backup transport for stashing stuff into a known location on disk, and
@@ -70,9 +70,8 @@
     // The currently-active restore set always has the same (nonzero!) token
     private static final long CURRENT_SET_TOKEN = 1;
 
-    // Full backup size quota is set to reasonable value.
+    // Size quotas at reasonable values, similar to the current cloud-storage limits
     private static final long FULL_BACKUP_SIZE_QUOTA = 25 * 1024 * 1024;
-
     private static final long KEY_VALUE_BACKUP_SIZE_QUOTA = 5 * 1024 * 1024;
 
     private Context mContext;
@@ -157,6 +156,17 @@
         return TRANSPORT_OK;
     }
 
+    // Encapsulation of a single k/v element change
+    private class KVOperation {
+        final String key;     // Element filename, not the raw key, for efficiency
+        final byte[] value;   // null when this is a deletion operation
+
+        KVOperation(String k, byte[] v) {
+            key = k;
+            value = v;
+        }
+    }
+
     @Override
     public int performBackup(PackageInfo packageInfo, ParcelFileDescriptor data) {
         if (DEBUG) {
@@ -175,62 +185,135 @@
 
         // Each 'record' in the restore set is kept in its own file, named by
         // the record key.  Wind through the data file, extracting individual
-        // record operations and building a set of all the updates to apply
+        // record operations and building a list of all the updates to apply
         // in this update.
-        BackupDataInput changeSet = new BackupDataInput(data.getFileDescriptor());
+        final ArrayList<KVOperation> changeOps;
         try {
-            int bufSize = 512;
-            byte[] buf = new byte[bufSize];
-            while (changeSet.readNextHeader()) {
-                String key = changeSet.getKey();
-                String base64Key = new String(Base64.encode(key.getBytes()));
-                File entityFile = new File(packageDir, base64Key);
-
-                int dataSize = changeSet.getDataSize();
-
-                if (DEBUG) Log.v(TAG, "Got change set key=" + key + " size=" + dataSize
-                        + " key64=" + base64Key);
-
-                if (dataSize >= 0) {
-                    if (entityFile.exists()) {
-                        entityFile.delete();
-                    }
-                    FileOutputStream entity = new FileOutputStream(entityFile);
-
-                    if (dataSize > bufSize) {
-                        bufSize = dataSize;
-                        buf = new byte[bufSize];
-                    }
-                    changeSet.readEntityData(buf, 0, dataSize);
-                    if (DEBUG) {
-                        try {
-                            long cur = Os.lseek(data.getFileDescriptor(), 0, SEEK_CUR);
-                            Log.v(TAG, "  read entity data; new pos=" + cur);
-                        }
-                        catch (ErrnoException e) {
-                            Log.w(TAG, "Unable to stat input file in performBackup() on "
-                                    + packageInfo.packageName);
-                        }
-                    }
-
-                    try {
-                        entity.write(buf, 0, dataSize);
-                    } catch (IOException e) {
-                        Log.e(TAG, "Unable to update key file " + entityFile.getAbsolutePath());
-                        return TRANSPORT_ERROR;
-                    } finally {
-                        entity.close();
-                    }
-                } else {
-                    entityFile.delete();
-                }
-            }
-            return TRANSPORT_OK;
+            changeOps = parseBackupStream(data);
         } catch (IOException e) {
             // oops, something went wrong.  abort the operation and return error.
-            Log.v(TAG, "Exception reading backup input:", e);
+            Log.v(TAG, "Exception reading backup input", e);
             return TRANSPORT_ERROR;
         }
+
+        // Okay, now we've parsed out the delta's individual operations.  We need to measure
+        // the effect against what we already have in the datastore to detect quota overrun.
+        // So, we first need to tally up the current in-datastore size per key.
+        final ArrayMap<String, Integer> datastore = new ArrayMap<>();
+        int totalSize = parseKeySizes(packageDir, datastore);
+
+        // ... and now figure out the datastore size that will result from applying the
+        // sequence of delta operations
+        if (DEBUG) {
+            if (changeOps.size() > 0) {
+                Log.v(TAG, "Calculating delta size impact");
+            } else {
+                Log.v(TAG, "No operations in backup stream, so no size change");
+            }
+        }
+        int updatedSize = totalSize;
+        for (KVOperation op : changeOps) {
+            // Deduct the size of the key we're about to replace, if any
+            final Integer curSize = datastore.get(op.key);
+            if (curSize != null) {
+                updatedSize -= curSize.intValue();
+                if (DEBUG && op.value == null) {
+                    Log.v(TAG, "  delete " + op.key + ", updated total " + updatedSize);
+                }
+            }
+
+            // And add back the size of the value we're about to store, if any
+            if (op.value != null) {
+                updatedSize += op.value.length;
+                if (DEBUG) {
+                    Log.v(TAG, ((curSize == null) ? "  new " : "  replace ")
+                            +  op.key + ", updated total " + updatedSize);
+                }
+            }
+        }
+
+        // If our final size is over quota, report the failure
+        if (updatedSize > KEY_VALUE_BACKUP_SIZE_QUOTA) {
+            if (DEBUG) {
+                Log.i(TAG, "New datastore size " + updatedSize
+                        + " exceeds quota " + KEY_VALUE_BACKUP_SIZE_QUOTA);
+            }
+            return TRANSPORT_QUOTA_EXCEEDED;
+        }
+
+        // No problem with storage size, so go ahead and apply the delta operations
+        // (in the order that the app provided them)
+        for (KVOperation op : changeOps) {
+            File element = new File(packageDir, op.key);
+
+            // this is either a deletion or a rewrite-from-zero, so we can just remove
+            // the existing file and proceed in either case.
+            element.delete();
+
+            // if this wasn't a deletion, put the new data in place
+            if (op.value != null) {
+                try (FileOutputStream out = new FileOutputStream(element)) {
+                    out.write(op.value, 0, op.value.length);
+                } catch (IOException e) {
+                    Log.e(TAG, "Unable to update key file " + element);
+                    return TRANSPORT_ERROR;
+                }
+            }
+        }
+        return TRANSPORT_OK;
+    }
+
+    // Parses a backup stream into individual key/value operations
+    private ArrayList<KVOperation> parseBackupStream(ParcelFileDescriptor data)
+            throws IOException {
+        ArrayList<KVOperation> changeOps = new ArrayList<>();
+        BackupDataInput changeSet = new BackupDataInput(data.getFileDescriptor());
+        while (changeSet.readNextHeader()) {
+            String key = changeSet.getKey();
+            String base64Key = new String(Base64.encode(key.getBytes()));
+            int dataSize = changeSet.getDataSize();
+            if (DEBUG) {
+                Log.v(TAG, "  Delta operation key " + key + "   size " + dataSize
+                        + "   key64 " + base64Key);
+            }
+
+            byte[] buf = (dataSize >= 0) ? new byte[dataSize] : null;
+            if (dataSize >= 0) {
+                changeSet.readEntityData(buf, 0, dataSize);
+            }
+            changeOps.add(new KVOperation(base64Key, buf));
+        }
+        return changeOps;
+    }
+
+    // Reads the given datastore directory, building a table of the value size of each
+    // keyed element, and returning the summed total.
+    private int parseKeySizes(File packageDir, ArrayMap<String, Integer> datastore) {
+        int totalSize = 0;
+        final String[] elements = packageDir.list();
+        if (elements != null) {
+            if (DEBUG) {
+                Log.v(TAG, "Existing datastore contents:");
+            }
+            for (String file : elements) {
+                File element = new File(packageDir, file);
+                String key = file;  // filename
+                int size = (int) element.length();
+                totalSize += size;
+                if (DEBUG) {
+                    Log.v(TAG, "  key " + key + "   size " + size);
+                }
+                datastore.put(key, size);
+            }
+            if (DEBUG) {
+                Log.v(TAG, "  TOTAL: " + totalSize);
+            }
+        } else {
+            if (DEBUG) {
+                Log.v(TAG, "No existing data for this package");
+            }
+        }
+        return totalSize;
     }
 
     // Deletes the contents but not the given directory
diff --git a/core/java/com/android/internal/colorextraction/ColorExtractor.java b/core/java/com/android/internal/colorextraction/ColorExtractor.java
index ef98a5e..c171fa6 100644
--- a/core/java/com/android/internal/colorextraction/ColorExtractor.java
+++ b/core/java/com/android/internal/colorextraction/ColorExtractor.java
@@ -80,7 +80,7 @@
         if (wallpaperManager == null) {
             Log.w(TAG, "Can't listen to color changes!");
         } else {
-            wallpaperManager.addOnColorsChangedListener(this);
+            wallpaperManager.addOnColorsChangedListener(this, null /* handler */);
 
             // Initialize all gradients with the current colors
             Trace.beginSection("ColorExtractor#getWallpaperColors");
diff --git a/core/java/com/android/internal/colorextraction/types/Tonal.java b/core/java/com/android/internal/colorextraction/types/Tonal.java
index dbc086c..71baaf1 100644
--- a/core/java/com/android/internal/colorextraction/types/Tonal.java
+++ b/core/java/com/android/internal/colorextraction/types/Tonal.java
@@ -51,9 +51,11 @@
 
     private static final boolean DEBUG = true;
 
+    public static final int THRESHOLD_COLOR_LIGHT = 0xffe0e0e0;
     public static final int MAIN_COLOR_LIGHT = 0xffe0e0e0;
     public static final int SECONDARY_COLOR_LIGHT = 0xff9e9e9e;
-    public static final int MAIN_COLOR_DARK = 0xff212121;
+    public static final int THRESHOLD_COLOR_DARK = 0xff212121;
+    public static final int MAIN_COLOR_DARK = 0xff000000;
     public static final int SECONDARY_COLOR_DARK = 0xff000000;
 
     private final TonalPalette mGreyPalette;
@@ -111,18 +113,19 @@
 
         final List<Color> mainColors = inWallpaperColors.getMainColors();
         final int mainColorsSize = mainColors.size();
-        final boolean supportsDarkText = (inWallpaperColors.getColorHints() &
-                WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0;
+        final int hints = inWallpaperColors.getColorHints();
+        final boolean supportsDarkText = (hints & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0;
+        final boolean generatedFromBitmap = (hints & WallpaperColors.HINT_FROM_BITMAP) != 0;
 
         if (mainColorsSize == 0) {
             return false;
         }
-        // Tonal is not really a sort, it takes a color from the extracted
-        // palette and finds a best fit amongst a collection of pre-defined
-        // palettes. The best fit is tweaked to be closer to the source color
-        // and replaces the original palette
 
-        // Get the most preeminent, non-blacklisted color.
+        // Decide what's the best color to use.
+        // We have 2 options:
+        // • Just pick the primary color
+        // • Filter out blacklisted colors. This is useful when palette is generated
+        //   automatically from a bitmap.
         Color bestColor = null;
         final float[] hsl = new float[3];
         for (int i = 0; i < mainColorsSize; i++) {
@@ -132,7 +135,7 @@
                     Color.blue(colorValue), hsl);
 
             // Stop when we find a color that meets our criteria
-            if (!isBlacklisted(hsl)) {
+            if (!generatedFromBitmap || !isBlacklisted(hsl)) {
                 bestColor = color;
                 break;
             }
@@ -143,6 +146,10 @@
             return false;
         }
 
+        // Tonal is not really a sort, it takes a color from the extracted
+        // palette and finds a best fit amongst a collection of pre-defined
+        // palettes. The best fit is tweaked to be closer to the source color
+        // and replaces the original palette.
         int colorValue = bestColor.toArgb();
         ColorUtils.RGBToHSL(Color.red(colorValue), Color.green(colorValue), Color.blue(colorValue),
                 hsl);
@@ -192,12 +199,12 @@
         // light fallback or darker than our dark fallback.
         ColorUtils.colorToHSL(mainColor, mTmpHSL);
         final float mainLuminosity = mTmpHSL[2];
-        ColorUtils.colorToHSL(MAIN_COLOR_LIGHT, mTmpHSL);
+        ColorUtils.colorToHSL(THRESHOLD_COLOR_LIGHT, mTmpHSL);
         final float lightLuminosity = mTmpHSL[2];
         if (mainLuminosity > lightLuminosity) {
             return false;
         }
-        ColorUtils.colorToHSL(MAIN_COLOR_DARK, mTmpHSL);
+        ColorUtils.colorToHSL(THRESHOLD_COLOR_DARK, mTmpHSL);
         final float darkLuminosity = mTmpHSL[2];
         if (mainLuminosity < darkLuminosity) {
             return false;
diff --git a/core/java/com/android/internal/content/FileSystemProvider.java b/core/java/com/android/internal/content/FileSystemProvider.java
index ebea1a4..4b80a5f 100644
--- a/core/java/com/android/internal/content/FileSystemProvider.java
+++ b/core/java/com/android/internal/content/FileSystemProvider.java
@@ -28,6 +28,7 @@
 import android.graphics.Point;
 import android.net.Uri;
 import android.os.Binder;
+import android.os.Bundle;
 import android.os.CancellationSignal;
 import android.os.FileObserver;
 import android.os.FileUtils;
@@ -37,6 +38,7 @@
 import android.provider.DocumentsContract.Document;
 import android.provider.DocumentsProvider;
 import android.provider.MediaStore;
+import android.provider.MetadataReader;
 import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.Log;
@@ -44,7 +46,10 @@
 
 import com.android.internal.annotations.GuardedBy;
 
+import libcore.io.IoUtils;
+
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.LinkedList;
@@ -68,6 +73,13 @@
 
     private Handler mHandler;
 
+
+    private static final String MIMETYPE_JPEG = "image/jpeg";
+
+    private static final String MIMETYPE_JPG = "image/jpg";
+
+
+
     protected abstract File getFileForDocId(String docId, boolean visible)
             throws FileNotFoundException;
 
@@ -99,6 +111,30 @@
         }
     }
 
+    @Override
+    public @Nullable Bundle getDocumentMetadata(String documentId, @Nullable String[] tags)
+            throws FileNotFoundException {
+        File file = getFileForDocId(documentId);
+        if (!(file.exists() && file.isFile() && file.canRead())) {
+            return Bundle.EMPTY;
+        }
+        String filePath = file.getAbsolutePath();
+        Bundle metadata = new Bundle();
+        if (getTypeForFile(file).equals(MIMETYPE_JPEG)
+                || getTypeForFile(file).equals(MIMETYPE_JPG)) {
+            FileInputStream stream = new FileInputStream(filePath);
+            try {
+                MetadataReader.getMetadata(metadata, stream, getTypeForFile(file), tags);
+                return metadata;
+            } catch (IOException e) {
+                Log.e(TAG, "An error occurred retrieving the metadata", e);
+            } finally {
+                IoUtils.closeQuietly(stream);
+            }
+        }
+        return null;
+    }
+
     protected final List<String> findDocumentPath(File parent, File doc)
             throws FileNotFoundException {
 
diff --git a/core/java/com/android/internal/content/PackageHelper.java b/core/java/com/android/internal/content/PackageHelper.java
index 9c361b3..e923223 100644
--- a/core/java/com/android/internal/content/PackageHelper.java
+++ b/core/java/com/android/internal/content/PackageHelper.java
@@ -16,11 +16,14 @@
 
 package com.android.internal.content;
 
+import static android.net.TrafficStats.MB_IN_BYTES;
+import static android.os.storage.VolumeInfo.ID_PRIVATE_INTERNAL;
+
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
 import android.content.pm.PackageInstaller.SessionParams;
+import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.PackageParser.PackageLite;
 import android.os.Environment;
@@ -39,21 +42,19 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 
+import libcore.io.IoUtils;
+
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Collections;
 import java.util.Objects;
+import java.util.UUID;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 import java.util.zip.ZipOutputStream;
 
-import libcore.io.IoUtils;
-
-import static android.net.TrafficStats.MB_IN_BYTES;
-import static android.os.storage.VolumeInfo.ID_PRIVATE_INTERNAL;
-
 /**
  * Constants used internally between the PackageManager
  * and media container service transports.
@@ -358,7 +359,7 @@
         public boolean fitsOnInternalStorage(Context context, SessionParams params)
                 throws IOException {
             StorageManager storage = getStorageManager(context);
-            File target = getDataDirectory();
+            final UUID target = storage.getUuidForPath(getDataDirectory());
             return (params.sizeBytes <= storage.getAllocatableBytes(target,
                     translateAllocateFlags(params.installFlags)));
         }
@@ -466,7 +467,8 @@
             boolean isInternalStorage = ID_PRIVATE_INTERNAL.equals(vol.id);
             if (vol.type == VolumeInfo.TYPE_PRIVATE && vol.isMountedWritable()
                     && (!isInternalStorage || allow3rdPartyOnInternal)) {
-                final long availBytes = storageManager.getAllocatableBytes(new File(vol.path),
+                final UUID target = storageManager.getUuidForPath(new File(vol.path));
+                final long availBytes = storageManager.getAllocatableBytes(target,
                         translateAllocateFlags(params.installFlags));
                 if (availBytes >= params.sizeBytes) {
                     allCandidates.add(vol.fsUuid);
@@ -523,7 +525,7 @@
 
     public static boolean fitsOnInternal(Context context, SessionParams params) throws IOException {
         final StorageManager storage = context.getSystemService(StorageManager.class);
-        final File target = Environment.getDataDirectory();
+        final UUID target = storage.getUuidForPath(Environment.getDataDirectory());
         return (params.sizeBytes <= storage.getAllocatableBytes(target,
                 translateAllocateFlags(params.installFlags)));
     }
diff --git a/core/java/com/android/internal/content/PdfUtils.java b/core/java/com/android/internal/content/PdfUtils.java
new file mode 100644
index 0000000..1716d42
--- /dev/null
+++ b/core/java/com/android/internal/content/PdfUtils.java
@@ -0,0 +1,96 @@
+/*
+ * 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.internal.content;
+
+import android.annotation.Nullable;
+import android.content.res.AssetFileDescriptor;
+import android.graphics.Bitmap;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.graphics.pdf.PdfRenderer;
+import android.os.AsyncTask;
+import android.os.ParcelFileDescriptor;
+
+import libcore.io.IoUtils;
+import libcore.io.Streams;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Utils class for extracting PDF Thumbnails
+ */
+public final class PdfUtils {
+
+    private PdfUtils() {
+    }
+
+    /**
+     * Returns the front page of the pdf as a thumbnail
+     * @param file Given PDF File
+     * @param size Cropping of the front page.
+     * @return AssetFileDescriptor containing the thumbnail as a bitmap.
+     * @throws IOException if the file isn't a pdf or if the file doesn't exist.
+     */
+    public static @Nullable AssetFileDescriptor openPdfThumbnail(File file, Point size)
+            throws IOException {
+        // Create the bitmap of the PDF's first page
+        ParcelFileDescriptor pdfDescriptor =
+                ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
+        PdfRenderer renderer = new PdfRenderer(pdfDescriptor);
+        PdfRenderer.Page frontPage = renderer.openPage(0);
+        Bitmap thumbnail = Bitmap.createBitmap(size.x, size.y,
+                Bitmap.Config.ARGB_8888);
+        frontPage.render(thumbnail, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
+
+        // Create an AssetFileDescriptor that contains the Bitmap's information
+        final ByteArrayOutputStream out = new ByteArrayOutputStream();
+        // Quality is an integer that determines how much compression is used.
+        // However, this integer is ignored when using the PNG format
+        int quality = 100;
+        // The use of Bitmap.CompressFormat.JPEG leads to a black PDF background on the thumbnail
+        thumbnail.compress(Bitmap.CompressFormat.PNG, quality, out);
+
+        final ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+
+        final ParcelFileDescriptor[] fds = ParcelFileDescriptor.createReliablePipe();
+        new AsyncTask<Object, Object, Object>() {
+            @Override
+            protected Object doInBackground(Object... params) {
+                final FileOutputStream fos = new FileOutputStream(fds[1].getFileDescriptor());
+                try {
+                    Streams.copy(in, fos);
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
+                IoUtils.closeQuietly(fds[1]);
+                try {
+                    pdfDescriptor.close();
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
+                return null;
+            }
+        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+        pdfDescriptor.close();
+        return new AssetFileDescriptor(fds[0], 0, AssetFileDescriptor.UNKNOWN_LENGTH);
+    }
+
+}
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 3bb20b4..f26c0cd 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -42,7 +42,7 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemClock;
-import android.os.SystemProperties;
+import android.os.UserHandle;
 import android.os.WorkSource;
 import android.telephony.DataConnectionRealTimeInfo;
 import android.telephony.ModemActivityInfo;
@@ -75,7 +75,7 @@
 import com.android.internal.util.FastXmlSerializer;
 import com.android.internal.util.JournaledFile;
 import com.android.internal.util.XmlUtils;
-import com.android.server.NetworkManagementSocketTagger;
+
 import libcore.util.EmptyArray;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
@@ -95,6 +95,7 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.concurrent.Future;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.locks.ReentrantLock;
 
@@ -118,18 +119,37 @@
     private static final int MAGIC = 0xBA757475; // 'BATSTATS'
 
     // Current on-disk Parcel version
-    private static final int VERSION = 159 + (USE_OLD_HISTORY ? 1000 : 0);
+    private static final int VERSION = 167 + (USE_OLD_HISTORY ? 1000 : 0);
 
     // Maximum number of items we will record in the history.
-    private static final int MAX_HISTORY_ITEMS = 2000;
+    private static final int MAX_HISTORY_ITEMS;
 
     // No, really, THIS is the maximum number of items we will record in the history.
-    private static final int MAX_MAX_HISTORY_ITEMS = 3000;
+    private static final int MAX_MAX_HISTORY_ITEMS;
 
     // The maximum number of names wakelocks we will keep track of
     // per uid; once the limit is reached, we batch the remaining wakelocks
     // in to one common name.
-    private static final int MAX_WAKELOCKS_PER_UID = 100;
+    private static final int MAX_WAKELOCKS_PER_UID;
+
+    static final int MAX_HISTORY_BUFFER; // 256KB
+    static final int MAX_MAX_HISTORY_BUFFER; // 320KB
+
+    static {
+        if (ActivityManager.isLowRamDeviceStatic()) {
+            MAX_HISTORY_ITEMS = 800;
+            MAX_MAX_HISTORY_ITEMS = 1200;
+            MAX_WAKELOCKS_PER_UID = 40;
+            MAX_HISTORY_BUFFER = 96*1024;  // 96KB
+            MAX_MAX_HISTORY_BUFFER = 128*1024; // 128KB
+        } else {
+            MAX_HISTORY_ITEMS = 2000;
+            MAX_MAX_HISTORY_ITEMS = 3000;
+            MAX_WAKELOCKS_PER_UID = 100;
+            MAX_HISTORY_BUFFER = 256*1024;  // 256KB
+            MAX_MAX_HISTORY_BUFFER = 320*1024;  // 256KB
+        }
+    }
 
     // Number of transmit power states the Wifi controller can be in.
     private static final int NUM_WIFI_TX_LEVELS = 1;
@@ -163,6 +183,13 @@
         return mKernelMemoryStats;
     }
 
+    /** Container for Resource Power Manager stats. Updated by updateRpmStatsLocked. */
+    private final RpmStats mTmpRpmStats = new RpmStats();
+    /** The soonest the RPM stats can be updated after it was last updated. */
+    private static final long RPM_STATS_UPDATE_FREQ_MS = 1000;
+    /** Last time that RPM stats were updated by updateRpmStatsLocked. */
+    private long mLastRpmStatsUpdateTimeMs = -RPM_STATS_UPDATE_FREQ_MS;
+
     public interface BatteryCallback {
         public void batteryNeedsCpuUpdate();
         public void batteryPowerChanged(boolean onBattery);
@@ -170,10 +197,22 @@
     }
 
     public interface PlatformIdleStateCallback {
+        public void fillLowPowerStats(RpmStats rpmStats);
         public String getPlatformLowPowerStats();
         public String getSubsystemLowPowerStats();
     }
 
+    public static abstract class UserInfoProvider {
+        private int[] userIds;
+        protected abstract @Nullable int[] getUserIds();
+        private final void refreshUserIds() {
+            userIds = getUserIds();
+        }
+        private final boolean exists(int userId) {
+            return userIds != null ? ArrayUtils.contains(userIds, userId) : true;
+        }
+    }
+
     private final PlatformIdleStateCallback mPlatformIdleStateCallback;
 
     final class MyHandler extends Handler {
@@ -234,14 +273,16 @@
         int UPDATE_WIFI = 0x02;
         int UPDATE_RADIO = 0x04;
         int UPDATE_BT = 0x08;
-        int UPDATE_ALL = UPDATE_CPU | UPDATE_WIFI | UPDATE_RADIO | UPDATE_BT;
+        int UPDATE_RPM = 0x10; // 16
+        int UPDATE_ALL = UPDATE_CPU | UPDATE_WIFI | UPDATE_RADIO | UPDATE_BT | UPDATE_RPM;
 
-        void scheduleSync(String reason, int flags);
-        void scheduleCpuSyncDueToRemovedUid(int uid);
+        Future<?> scheduleSync(String reason, int flags);
+        Future<?> scheduleCpuSyncDueToRemovedUid(int uid);
     }
 
     public final MyHandler mHandler;
-    private final ExternalStatsSync mExternalSync;
+    private ExternalStatsSync mExternalSync = null;
+    private UserInfoProvider mUserInfoProvider = null;
 
     private BatteryCallback mCallback;
 
@@ -283,8 +324,8 @@
     protected final TimeBase mOnBatteryTimeBase = new TimeBase();
 
     // These are the objects that will want to do something when the device
-    // is unplugged from power *and* the screen is off.
-    final TimeBase mOnBatteryScreenOffTimeBase = new TimeBase();
+    // is unplugged from power *and* the screen is off or doze.
+    protected final TimeBase mOnBatteryScreenOffTimeBase = new TimeBase();
 
     // Set to true when we want to distribute CPU across wakelocks for the next
     // CPU update, even if we aren't currently running wake locks.
@@ -299,8 +340,6 @@
     boolean mRecordingHistory = false;
     int mNumHistoryItems;
 
-    static final int MAX_HISTORY_BUFFER = 256*1024; // 256KB
-    static final int MAX_MAX_HISTORY_BUFFER = 320*1024; // 320KB
     final Parcel mHistoryBuffer = Parcel.obtain();
     final HistoryItem mHistoryLastWritten = new HistoryItem();
     final HistoryItem mHistoryLastLastWritten = new HistoryItem();
@@ -380,8 +419,12 @@
     public boolean mRecordAllHistory;
     boolean mNoAutoReset;
 
-    int mScreenState = Display.STATE_UNKNOWN;
-    StopwatchTimer mScreenOnTimer;
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    protected int mScreenState = Display.STATE_UNKNOWN;
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    protected StopwatchTimer mScreenOnTimer;
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    protected StopwatchTimer mScreenDozeTimer;
 
     int mScreenBrightnessBin = -1;
     final StopwatchTimer[] mScreenBrightnessTimer = new StopwatchTimer[NUM_SCREEN_BRIGHTNESS_BINS];
@@ -526,12 +569,16 @@
     int mHighDischargeAmountSinceCharge;
     int mDischargeScreenOnUnplugLevel;
     int mDischargeScreenOffUnplugLevel;
+    int mDischargeScreenDozeUnplugLevel;
     int mDischargeAmountScreenOn;
     int mDischargeAmountScreenOnSinceCharge;
     int mDischargeAmountScreenOff;
     int mDischargeAmountScreenOffSinceCharge;
+    int mDischargeAmountScreenDoze;
+    int mDischargeAmountScreenDozeSinceCharge;
 
     private LongSamplingCounter mDischargeScreenOffCounter;
+    private LongSamplingCounter mDischargeScreenDozeCounter;
     private LongSamplingCounter mDischargeCounter;
 
     static final int MAX_LEVEL_STEPS = 200;
@@ -579,6 +626,25 @@
     private PowerProfile mPowerProfile;
 
     /*
+     * Holds a SamplingTimer associated with each Resource Power Manager state and voter,
+     * recording their times when on-battery (regardless of screen state).
+     */
+    private final HashMap<String, SamplingTimer> mRpmStats = new HashMap<>();
+    /** Times for each Resource Power Manager state and voter when screen-off and on-battery. */
+    private final HashMap<String, SamplingTimer> mScreenOffRpmStats = new HashMap<>();
+
+    @Override
+    public Map<String, ? extends Timer> getRpmStats() {
+        return mRpmStats;
+    }
+
+    // TODO: Note: screenOffRpmStats has been disabled via SCREEN_OFF_RPM_STATS_ENABLED.
+    @Override
+    public Map<String, ? extends Timer> getScreenOffRpmStats() {
+        return mScreenOffRpmStats;
+    }
+
+    /*
      * Holds a SamplingTimer associated with each kernel wakelock name being tracked.
      */
     private final HashMap<String, SamplingTimer> mKernelWakelockStats = new HashMap<>();
@@ -596,13 +662,18 @@
     }
 
     @Override
-    public LongCounter getDischargeScreenOffCoulombCounter() {
-        return mDischargeScreenOffCounter;
+    public long getMahDischarge(int which) {
+        return mDischargeCounter.getCountLocked(which);
     }
 
     @Override
-    public LongCounter getDischargeCoulombCounter() {
-        return mDischargeCounter;
+    public long getMahDischargeScreenOff(int which) {
+        return mDischargeScreenOffCounter.getCountLocked(which);
+    }
+
+    @Override
+    public long getMahDischargeScreenDoze(int which) {
+        return mDischargeScreenDozeCounter.getCountLocked(which);
     }
 
     @Override
@@ -630,8 +701,8 @@
         mCheckinFile = null;
         mDailyFile = null;
         mHandler = null;
-        mExternalSync = null;
         mPlatformIdleStateCallback = null;
+        mUserInfoProvider = null;
         clearHistoryLocked();
     }
 
@@ -1033,6 +1104,10 @@
             }
         }
 
+        public int getSize() {
+            return mCounts == null ? 0 : mCounts.length;
+        }
+
         /**
          * Clear state of this counter.
          */
@@ -1793,6 +1868,7 @@
             super(clocks, uid, type, timerPool, timeBase, in);
             mMaxDurationMs = in.readLong();
             mTotalDurationMs = in.readLong();
+            mCurrentDurationMs = in.readLong();
         }
 
         public DurationTimer(Clocks clocks, Uid uid, int type, ArrayList<StopwatchTimer> timerPool,
@@ -1804,7 +1880,8 @@
         public void writeToParcel(Parcel out, long elapsedRealtimeUs) {
             super.writeToParcel(out, elapsedRealtimeUs);
             out.writeLong(getMaxDurationMsLocked(elapsedRealtimeUs / 1000));
-            out.writeLong(getTotalDurationMsLocked(elapsedRealtimeUs / 1000));
+            out.writeLong(mTotalDurationMs);
+            out.writeLong(getCurrentDurationMsLocked(elapsedRealtimeUs / 1000));
         }
 
         /**
@@ -1935,6 +2012,10 @@
          *
          * Note that this time is NOT split between the timers in the timer group that
          * this timer is attached to.  It is the TOTAL time.
+         *
+         * Note that if running timer is parceled and unparceled, this method will return
+         * current duration value at the time of parceling even though timer may not be
+         * currently running.
          */
         @Override
         public long getCurrentDurationMsLocked(long elapsedRealtimeMs) {
@@ -2588,6 +2669,26 @@
         }
     }
 
+    /** Get Resource Power Manager stats. Create a new one if it doesn't already exist. */
+    public SamplingTimer getRpmTimerLocked(String name) {
+        SamplingTimer rpmt = mRpmStats.get(name);
+        if (rpmt == null) {
+            rpmt = new SamplingTimer(mClocks, mOnBatteryTimeBase);
+            mRpmStats.put(name, rpmt);
+        }
+        return rpmt;
+    }
+
+    /** Get Screen-off Resource Power Manager stats. Create new one if it doesn't already exist. */
+    public SamplingTimer getScreenOffRpmTimerLocked(String name) {
+        SamplingTimer rpmt = mScreenOffRpmStats.get(name);
+        if (rpmt == null) {
+            rpmt = new SamplingTimer(mClocks, mOnBatteryScreenOffTimeBase);
+            mScreenOffRpmStats.put(name, rpmt);
+        }
+        return rpmt;
+    }
+
     /*
      * Get the wakeup reason counter, and create a new one if one
      * doesn't already exist.
@@ -3465,28 +3566,41 @@
         mActiveHistoryStates2 = 0xffffffff;
     }
 
-    public void updateTimeBasesLocked(boolean unplugged, boolean screenOff, long uptime,
+    public void updateTimeBasesLocked(boolean unplugged, int screenState, long uptime,
             long realtime) {
-        boolean batteryStatusChanged = mOnBatteryTimeBase.setRunning(unplugged, uptime, realtime);
+        final boolean screenOff = isScreenOff(screenState) || isScreenDoze(screenState);
+        final boolean updateOnBatteryTimeBase = unplugged != mOnBatteryTimeBase.isRunning();
+        final boolean updateOnBatteryScreenOffTimeBase =
+                (unplugged && screenOff) != mOnBatteryScreenOffTimeBase.isRunning();
 
-        if (batteryStatusChanged) {
-            for (int i = 0; i < mUidStats.size(); i++) {
-                mUidStats.valueAt(i).updateOnBatteryBgTimeBase(uptime, realtime);
+        if (updateOnBatteryScreenOffTimeBase || updateOnBatteryTimeBase) {
+            if (updateOnBatteryScreenOffTimeBase) {
+                updateKernelWakelocksLocked();
+                updateBatteryPropertiesLocked();
             }
-        }
-
-        boolean unpluggedScreenOff = unplugged && screenOff;
-        if (unpluggedScreenOff != mOnBatteryScreenOffTimeBase.isRunning()) {
-            updateKernelWakelocksLocked();
-            updateBatteryPropertiesLocked();
+            // This if{} is only necessary due to SCREEN_OFF_RPM_STATS_ENABLED, which exists because
+            // updateRpmStatsLocked is too slow to run each screen change. When the speed is
+            // improved, remove the surrounding if{}.
+            if (SCREEN_OFF_RPM_STATS_ENABLED || updateOnBatteryTimeBase) {
+                updateRpmStatsLocked(); // if either OnBattery or OnBatteryScreenOff timebase changes.
+            }
             if (DEBUG_ENERGY_CPU) {
-                Slog.d(TAG, "Updating cpu time because screen is now " +
-                        (unpluggedScreenOff ? "off" : "on"));
+                Slog.d(TAG, "Updating cpu time because screen is now "
+                        + Display.stateToString(screenState)
+                        + " and battery is " + (unplugged ? "on" : "off"));
             }
             updateCpuTimeLocked(true /* updateCpuFreqData */);
-            mOnBatteryScreenOffTimeBase.setRunning(unpluggedScreenOff, uptime, realtime);
-            for (int i = 0; i < mUidStats.size(); i++) {
-                mUidStats.valueAt(i).updateOnBatteryScreenOffBgTimeBase(uptime, realtime);
+            mOnBatteryTimeBase.setRunning(unplugged, uptime, realtime);
+            if (updateOnBatteryTimeBase) {
+                for (int i = mUidStats.size() - 1; i >= 0; --i) {
+                    mUidStats.valueAt(i).updateOnBatteryBgTimeBase(uptime, realtime);
+                }
+            }
+            if (updateOnBatteryScreenOffTimeBase) {
+                mOnBatteryScreenOffTimeBase.setRunning(unplugged && screenOff, uptime, realtime);
+                for (int i = mUidStats.size() - 1; i >= 0; --i) {
+                    mUidStats.valueAt(i).updateOnBatteryScreenOffBgTimeBase(uptime, realtime);
+                }
             }
         }
     }
@@ -3652,11 +3766,11 @@
         addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_JOB_START, name, uid);
     }
 
-    public void noteJobFinishLocked(String name, int uid) {
+    public void noteJobFinishLocked(String name, int uid, int stopReason) {
         uid = mapUid(uid);
         final long elapsedRealtime = mClocks.elapsedRealtime();
         final long uptime = mClocks.uptimeMillis();
-        getUidStatsLocked(uid).noteStopJobLocked(name, elapsedRealtime);
+        getUidStatsLocked(uid).noteStopJobLocked(name, elapsedRealtime, stopReason);
         if (!mActiveEvents.updateState(HistoryItem.EVENT_JOB_FINISH, name, uid, 0)) {
             return;
         }
@@ -3745,8 +3859,10 @@
     }
 
     public void setPretendScreenOff(boolean pretendScreenOff) {
-        mPretendScreenOff = pretendScreenOff;
-        noteScreenStateLocked(pretendScreenOff ? Display.STATE_OFF : Display.STATE_ON);
+        if (mPretendScreenOff != pretendScreenOff) {
+            mPretendScreenOff = pretendScreenOff;
+            noteScreenStateLocked(pretendScreenOff ? Display.STATE_OFF : Display.STATE_ON);
+        }
     }
 
     private String mInitialAcquireWakeName;
@@ -3975,14 +4091,6 @@
         return 0;
     }
 
-    public void reportExcessiveWakeLocked(int uid, String proc, long overTime, long usedTime) {
-        uid = mapUid(uid);
-        Uid u = mUidStats.get(uid);
-        if (u != null) {
-            u.reportExcessiveWakeLocked(proc, overTime, usedTime);
-        }
-    }
-
     public void reportExcessiveCpuLocked(int uid, String proc, long overTime, long usedTime) {
         uid = mapUid(uid);
         Uid u = mUidStats.get(uid);
@@ -4084,54 +4192,58 @@
                 }
             }
 
-            if (state == Display.STATE_ON) {
-                // Screen turning on.
-                final long elapsedRealtime = mClocks.elapsedRealtime();
-                final long uptime = mClocks.uptimeMillis();
+            final long elapsedRealtime = mClocks.elapsedRealtime();
+            final long uptime = mClocks.uptimeMillis();
+
+            boolean updateHistory = false;
+            if (isScreenDoze(state)) {
+                mHistoryCur.states |= HistoryItem.STATE_SCREEN_DOZE_FLAG;
+                mScreenDozeTimer.startRunningLocked(elapsedRealtime);
+                updateHistory = true;
+            } else if (isScreenDoze(oldState)) {
+                mHistoryCur.states &= ~HistoryItem.STATE_SCREEN_DOZE_FLAG;
+                mScreenDozeTimer.stopRunningLocked(elapsedRealtime);
+                updateHistory = true;
+            }
+            if (isScreenOn(state)) {
                 mHistoryCur.states |= HistoryItem.STATE_SCREEN_ON_FLAG;
                 if (DEBUG_HISTORY) Slog.v(TAG, "Screen on to: "
                         + Integer.toHexString(mHistoryCur.states));
-                addHistoryRecordLocked(elapsedRealtime, uptime);
                 mScreenOnTimer.startRunningLocked(elapsedRealtime);
                 if (mScreenBrightnessBin >= 0) {
                     mScreenBrightnessTimer[mScreenBrightnessBin].startRunningLocked(elapsedRealtime);
                 }
-
-                updateTimeBasesLocked(mOnBatteryTimeBase.isRunning(), false,
-                        mClocks.uptimeMillis() * 1000, elapsedRealtime * 1000);
-
-                // Fake a wake lock, so we consider the device waked as long
-                // as the screen is on.
-                noteStartWakeLocked(-1, -1, "screen", null, WAKE_TYPE_PARTIAL, false,
-                        elapsedRealtime, uptime);
-
-                // Update discharge amounts.
-                if (mOnBatteryInternal) {
-                    updateDischargeScreenLevelsLocked(false, true);
-                }
-            } else if (oldState == Display.STATE_ON) {
-                // Screen turning off or dozing.
-                final long elapsedRealtime = mClocks.elapsedRealtime();
-                final long uptime = mClocks.uptimeMillis();
+                updateHistory = true;
+            } else if (isScreenOn(oldState)) {
                 mHistoryCur.states &= ~HistoryItem.STATE_SCREEN_ON_FLAG;
                 if (DEBUG_HISTORY) Slog.v(TAG, "Screen off to: "
                         + Integer.toHexString(mHistoryCur.states));
-                addHistoryRecordLocked(elapsedRealtime, uptime);
                 mScreenOnTimer.stopRunningLocked(elapsedRealtime);
                 if (mScreenBrightnessBin >= 0) {
                     mScreenBrightnessTimer[mScreenBrightnessBin].stopRunningLocked(elapsedRealtime);
                 }
-
+                updateHistory = true;
+            }
+            if (updateHistory) {
+                if (DEBUG_HISTORY) Slog.v(TAG, "Screen state to: "
+                        + Display.stateToString(state));
+                addHistoryRecordLocked(elapsedRealtime, uptime);
+            }
+            if (isScreenOn(state)) {
+                updateTimeBasesLocked(mOnBatteryTimeBase.isRunning(), state,
+                        mClocks.uptimeMillis() * 1000, elapsedRealtime * 1000);
+                // Fake a wake lock, so we consider the device waked as long as the screen is on.
+                noteStartWakeLocked(-1, -1, "screen", null, WAKE_TYPE_PARTIAL, false,
+                        elapsedRealtime, uptime);
+            } else if (isScreenOn(oldState)) {
                 noteStopWakeLocked(-1, -1, "screen", "screen", WAKE_TYPE_PARTIAL,
                         elapsedRealtime, uptime);
-
-                updateTimeBasesLocked(mOnBatteryTimeBase.isRunning(), true,
+                updateTimeBasesLocked(mOnBatteryTimeBase.isRunning(), state,
                         mClocks.uptimeMillis() * 1000, elapsedRealtime * 1000);
-
-                // Update discharge amounts.
-                if (mOnBatteryInternal) {
-                    updateDischargeScreenLevelsLocked(true, false);
-                }
+            }
+            // Update discharge amounts.
+            if (mOnBatteryInternal) {
+                updateDischargeScreenLevelsLocked(oldState, state);
             }
         }
     }
@@ -5280,6 +5392,14 @@
         return mScreenOnTimer.getCountLocked(which);
     }
 
+    @Override public long getScreenDozeTime(long elapsedRealtimeUs, int which) {
+        return mScreenDozeTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
+    }
+
+    @Override public int getScreenDozeCount(int which) {
+        return mScreenDozeTimer.getCountLocked(which);
+    }
+
     @Override public long getScreenBrightnessTime(int brightnessBin,
             long elapsedRealtimeUs, int which) {
         return mScreenBrightnessTimer[brightnessBin].getTotalTimeLocked(
@@ -5620,6 +5740,7 @@
         StopwatchTimer mFlashlightTurnedOnTimer;
         StopwatchTimer mCameraTurnedOnTimer;
         StopwatchTimer mForegroundActivityTimer;
+        StopwatchTimer mForegroundServiceTimer;
         /** Total time spent by the uid holding any partial wakelocks. */
         DualTimer mAggregatedPartialWakelockTimer;
         DualTimer mBluetoothScanTimer;
@@ -5630,6 +5751,8 @@
         int mProcessState = ActivityManager.PROCESS_STATE_NONEXISTENT;
         StopwatchTimer[] mProcessStateTimer;
 
+        boolean mInForegroundService = false;
+
         BatchTimer mVibratorOnTimer;
 
         Counter[] mUserActivityCounters;
@@ -5677,7 +5800,7 @@
 
         LongSamplingCounter mUserCpuTime;
         LongSamplingCounter mSystemCpuTime;
-        LongSamplingCounter[][] mCpuClusterSpeed;
+        LongSamplingCounter[][] mCpuClusterSpeedTimesUs;
 
         LongSamplingCounterArray mCpuFreqTimeMs;
         LongSamplingCounterArray mScreenOffCpuFreqTimeMs;
@@ -5698,6 +5821,11 @@
         final OverflowArrayMap<DualTimer> mJobStats;
 
         /**
+         * Count of the jobs that have completed and the reasons why they completed.
+         */
+        final ArrayMap<String, SparseIntArray> mJobCompletions = new ArrayMap<>();
+
+        /**
          * The statistics we have collected for this uid's sensor activations.
          */
         final SparseArray<Sensor> mSensorStats = new SparseArray<>();
@@ -5819,6 +5947,11 @@
         }
 
         @Override
+        public ArrayMap<String, SparseIntArray> getJobCompletionStats() {
+            return mJobCompletions;
+        }
+
+        @Override
         public SparseArray<? extends BatteryStats.Uid.Sensor> getSensorStats() {
             return mSensorStats;
         }
@@ -6092,6 +6225,14 @@
             return mForegroundActivityTimer;
         }
 
+        public StopwatchTimer createForegroundServiceTimerLocked() {
+            if (mForegroundServiceTimer == null) {
+                mForegroundServiceTimer = new StopwatchTimer(mBsi.mClocks, Uid.this,
+                        FOREGROUND_SERVICE, null, mBsi.mOnBatteryTimeBase);
+            }
+            return mForegroundServiceTimer;
+        }
+
         public DualTimer createAggregatedPartialWakelockTimerLocked() {
             if (mAggregatedPartialWakelockTimer == null) {
                 mAggregatedPartialWakelockTimer = new DualTimer(mBsi.mClocks, this,
@@ -6177,6 +6318,16 @@
             }
         }
 
+        public void noteForegroundServiceResumedLocked(long elapsedRealtimeMs) {
+            createForegroundServiceTimerLocked().startRunningLocked(elapsedRealtimeMs);
+        }
+
+        public void noteForegroundServicePausedLocked(long elapsedRealtimeMs) {
+            if (mForegroundServiceTimer != null) {
+                mForegroundServiceTimer.stopRunningLocked(elapsedRealtimeMs);
+            }
+        }
+
         public BatchTimer createVibratorOnTimerLocked() {
             if (mVibratorOnTimer == null) {
                 mVibratorOnTimer = new BatchTimer(mBsi.mClocks, Uid.this, VIBRATOR_ON,
@@ -6305,6 +6456,11 @@
         }
 
         @Override
+        public Timer getForegroundServiceTimer() {
+            return mForegroundServiceTimer;
+        }
+
+        @Override
         public Timer getBluetoothScanTimer() {
             return mBluetoothScanTimer;
         }
@@ -6493,12 +6649,12 @@
 
         @Override
         public long getTimeAtCpuSpeed(int cluster, int step, int which) {
-            if (mCpuClusterSpeed != null) {
-                if (cluster >= 0 && cluster < mCpuClusterSpeed.length) {
-                    final LongSamplingCounter[] cpuSpeeds = mCpuClusterSpeed[cluster];
-                    if (cpuSpeeds != null) {
-                        if (step >= 0 && step < cpuSpeeds.length) {
-                            final LongSamplingCounter c = cpuSpeeds[step];
+            if (mCpuClusterSpeedTimesUs != null) {
+                if (cluster >= 0 && cluster < mCpuClusterSpeedTimesUs.length) {
+                    final LongSamplingCounter[] cpuSpeedTimesUs = mCpuClusterSpeedTimesUs[cluster];
+                    if (cpuSpeedTimesUs != null) {
+                        if (step >= 0 && step < cpuSpeedTimesUs.length) {
+                            final LongSamplingCounter c = cpuSpeedTimesUs[step];
                             if (c != null) {
                                 return c.getCountLocked(which);
                             }
@@ -6591,6 +6747,7 @@
             active |= !resetTimerIfNotNull(mFlashlightTurnedOnTimer, false);
             active |= !resetTimerIfNotNull(mCameraTurnedOnTimer, false);
             active |= !resetTimerIfNotNull(mForegroundActivityTimer, false);
+            active |= !resetTimerIfNotNull(mForegroundServiceTimer, false);
             active |= !resetTimerIfNotNull(mAggregatedPartialWakelockTimer, false);
             active |= !resetTimerIfNotNull(mBluetoothScanTimer, false);
             active |= !resetTimerIfNotNull(mBluetoothUnoptimizedScanTimer, false);
@@ -6648,8 +6805,8 @@
             mUserCpuTime.reset(false);
             mSystemCpuTime.reset(false);
 
-            if (mCpuClusterSpeed != null) {
-                for (LongSamplingCounter[] speeds : mCpuClusterSpeed) {
+            if (mCpuClusterSpeedTimesUs != null) {
+                for (LongSamplingCounter[] speeds : mCpuClusterSpeedTimesUs) {
                     if (speeds != null) {
                         for (LongSamplingCounter speed : speeds) {
                             if (speed != null) {
@@ -6702,6 +6859,7 @@
                 }
             }
             mJobStats.cleanup();
+            mJobCompletions.clear();
             for (int ise=mSensorStats.size()-1; ise>=0; ise--) {
                 Sensor s = mSensorStats.valueAt(ise);
                 if (s.reset()) {
@@ -6784,6 +6942,10 @@
                     mForegroundActivityTimer.detach();
                     mForegroundActivityTimer = null;
                 }
+                if (mForegroundServiceTimer != null) {
+                    mForegroundServiceTimer.detach();
+                    mForegroundServiceTimer = null;
+                }
                 if (mAggregatedPartialWakelockTimer != null) {
                     mAggregatedPartialWakelockTimer.detach();
                     mAggregatedPartialWakelockTimer = null;
@@ -6833,8 +6995,8 @@
                 mUserCpuTime.detach();
                 mSystemCpuTime.detach();
 
-                if (mCpuClusterSpeed != null) {
-                    for (LongSamplingCounter[] cpuSpeeds : mCpuClusterSpeed) {
+                if (mCpuClusterSpeedTimesUs != null) {
+                    for (LongSamplingCounter[] cpuSpeeds : mCpuClusterSpeedTimesUs) {
                         if (cpuSpeeds != null) {
                             for (LongSamplingCounter c : cpuSpeeds) {
                                 if (c != null) {
@@ -6859,6 +7021,21 @@
             return !active;
         }
 
+        void writeJobCompletionsToParcelLocked(Parcel out) {
+            int NJC = mJobCompletions.size();
+            out.writeInt(NJC);
+            for (int ijc=0; ijc<NJC; ijc++) {
+                out.writeString(mJobCompletions.keyAt(ijc));
+                SparseIntArray types = mJobCompletions.valueAt(ijc);
+                int NT = types.size();
+                out.writeInt(NT);
+                for (int it=0; it<NT; it++) {
+                    out.writeInt(types.keyAt(it));
+                    out.writeInt(types.valueAt(it));
+                }
+            }
+        }
+
         void writeToParcelLocked(Parcel out, long uptimeUs, long elapsedRealtimeUs) {
             mOnBatteryBackgroundTimeBase.writeToParcel(out, uptimeUs, elapsedRealtimeUs);
             mOnBatteryScreenOffBackgroundTimeBase.writeToParcel(out, uptimeUs, elapsedRealtimeUs);
@@ -6890,6 +7067,8 @@
                 Timer.writeTimerToParcel(out, timer, elapsedRealtimeUs);
             }
 
+            writeJobCompletionsToParcelLocked(out);
+
             int NSE = mSensorStats.size();
             out.writeInt(NSE);
             for (int ise=0; ise<NSE; ise++) {
@@ -6976,6 +7155,12 @@
             } else {
                 out.writeInt(0);
             }
+            if (mForegroundServiceTimer != null) {
+                out.writeInt(1);
+                mForegroundServiceTimer.writeToParcel(out, elapsedRealtimeUs);
+            } else {
+                out.writeInt(0);
+            }
             if (mAggregatedPartialWakelockTimer != null) {
                 out.writeInt(1);
                 mAggregatedPartialWakelockTimer.writeToParcel(out, elapsedRealtimeUs);
@@ -7064,10 +7249,10 @@
             mUserCpuTime.writeToParcel(out);
             mSystemCpuTime.writeToParcel(out);
 
-            if (mCpuClusterSpeed != null) {
+            if (mCpuClusterSpeedTimesUs != null) {
                 out.writeInt(1);
-                out.writeInt(mCpuClusterSpeed.length);
-                for (LongSamplingCounter[] cpuSpeeds : mCpuClusterSpeed) {
+                out.writeInt(mCpuClusterSpeedTimesUs.length);
+                for (LongSamplingCounter[] cpuSpeeds : mCpuClusterSpeedTimesUs) {
                     if (cpuSpeeds != null) {
                         out.writeInt(1);
                         out.writeInt(cpuSpeeds.length);
@@ -7105,6 +7290,24 @@
             }
         }
 
+        void readJobCompletionsFromParcelLocked(Parcel in) {
+            int numJobCompletions = in.readInt();
+            mJobCompletions.clear();
+            for (int j = 0; j < numJobCompletions; j++) {
+                String jobName = in.readString();
+                int numTypes = in.readInt();
+                if (numTypes > 0) {
+                    SparseIntArray types = new SparseIntArray();
+                    for (int k = 0; k < numTypes; k++) {
+                        int type = in.readInt();
+                        int count = in.readInt();
+                        types.put(type, count);
+                    }
+                    mJobCompletions.put(jobName, types);
+                }
+            }
+        }
+
         void readFromParcelLocked(TimeBase timeBase, TimeBase screenOffTimeBase, Parcel in) {
             mOnBatteryBackgroundTimeBase.readFromParcel(in);
             mOnBatteryScreenOffBackgroundTimeBase.readFromParcel(in);
@@ -7139,6 +7342,8 @@
                 }
             }
 
+            readJobCompletionsFromParcelLocked(in);
+
             int numSensors = in.readInt();
             mSensorStats.clear();
             for (int k = 0; k < numSensors; k++) {
@@ -7235,6 +7440,12 @@
                 mForegroundActivityTimer = null;
             }
             if (in.readInt() != 0) {
+                mForegroundServiceTimer = new StopwatchTimer(mBsi.mClocks, Uid.this,
+                        FOREGROUND_SERVICE, null, mBsi.mOnBatteryTimeBase, in);
+            } else {
+                mForegroundServiceTimer = null;
+            }
+            if (in.readInt() != 0) {
                 mAggregatedPartialWakelockTimer = new DualTimer(mBsi.mClocks, this,
                         AGGREGATED_WAKE_TYPE_PARTIAL, null,
                         mBsi.mOnBatteryScreenOffTimeBase, mOnBatteryScreenOffBackgroundTimeBase,
@@ -7335,7 +7546,7 @@
                     throw new ParcelFormatException("Incompatible number of cpu clusters");
                 }
 
-                mCpuClusterSpeed = new LongSamplingCounter[numCpuClusters][];
+                mCpuClusterSpeedTimesUs = new LongSamplingCounter[numCpuClusters][];
                 for (int cluster = 0; cluster < numCpuClusters; cluster++) {
                     if (in.readInt() != 0) {
                         int numSpeeds = in.readInt();
@@ -7345,18 +7556,19 @@
                         }
 
                         final LongSamplingCounter[] cpuSpeeds = new LongSamplingCounter[numSpeeds];
-                        mCpuClusterSpeed[cluster] = cpuSpeeds;
+                        mCpuClusterSpeedTimesUs[cluster] = cpuSpeeds;
                         for (int speed = 0; speed < numSpeeds; speed++) {
                             if (in.readInt() != 0) {
-                                cpuSpeeds[speed] = new LongSamplingCounter(mBsi.mOnBatteryTimeBase, in);
+                                cpuSpeeds[speed] = new LongSamplingCounter(
+                                        mBsi.mOnBatteryTimeBase, in);
                             }
                         }
                     } else {
-                        mCpuClusterSpeed[cluster] = null;
+                        mCpuClusterSpeedTimesUs[cluster] = null;
                     }
                 }
             } else {
-                mCpuClusterSpeed = null;
+                mCpuClusterSpeedTimesUs = null;
             }
 
             mCpuFreqTimeMs = LongSamplingCounterArray.readFromParcel(in, mBsi.mOnBatteryTimeBase);
@@ -7728,17 +7940,6 @@
                 return null;
             }
 
-            public void addExcessiveWake(long overTime, long usedTime) {
-                if (mExcessivePower == null) {
-                    mExcessivePower = new ArrayList<ExcessivePower>();
-                }
-                ExcessivePower ew = new ExcessivePower();
-                ew.type = ExcessivePower.TYPE_WAKE;
-                ew.overTime = overTime;
-                ew.usedTime = usedTime;
-                mExcessivePower.add(ew);
-            }
-
             public void addExcessiveCpu(long overTime, long usedTime) {
                 if (mExcessivePower == null) {
                     mExcessivePower = new ArrayList<ExcessivePower>();
@@ -7936,6 +8137,7 @@
 
             /**
              * Number of times wakeup alarms have occurred for this app.
+             * On screen-off timebase starting in report v25.
              */
             ArrayMap<String, Counter> mWakeupAlarms = new ArrayMap<>();
 
@@ -7964,7 +8166,7 @@
                 mWakeupAlarms.clear();
                 for (int i=0; i<numWA; i++) {
                     String tag = in.readString();
-                    mWakeupAlarms.put(tag, new Counter(mBsi.mOnBatteryTimeBase, in));
+                    mWakeupAlarms.put(tag, new Counter(mBsi.mOnBatteryScreenOffTimeBase, in));
                 }
 
                 int numServs = in.readInt();
@@ -8003,7 +8205,7 @@
             public void noteWakeupAlarmLocked(String tag) {
                 Counter c = mWakeupAlarms.get(tag);
                 if (c == null) {
-                    c = new Counter(mBsi.mOnBatteryTimeBase);
+                    c = new Counter(mBsi.mOnBatteryScreenOffTimeBase);
                     mWakeupAlarms.put(tag, c);
                 }
                 c.stepAtomic();
@@ -8291,6 +8493,9 @@
 
         public void updateUidProcessStateLocked(int procState) {
             int uidRunningState;
+            // Make special note of Foreground Services
+            final boolean userAwareService =
+                    (procState == ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE);
             if (procState == ActivityManager.PROCESS_STATE_NONEXISTENT) {
                 uidRunningState = ActivityManager.PROCESS_STATE_NONEXISTENT;
             } else if (procState == ActivityManager.PROCESS_STATE_TOP) {
@@ -8309,24 +8514,37 @@
                 uidRunningState = PROCESS_STATE_CACHED;
             }
 
-            if (mProcessState == uidRunningState) return;
+            if (mProcessState == uidRunningState && userAwareService == mInForegroundService) {
+                return;
+            }
 
             final long elapsedRealtimeMs = mBsi.mClocks.elapsedRealtime();
-            final long uptimeMs = mBsi.mClocks.uptimeMillis();
+            if (mProcessState != uidRunningState) {
+                final long uptimeMs = mBsi.mClocks.uptimeMillis();
 
-            if (mProcessState != ActivityManager.PROCESS_STATE_NONEXISTENT) {
-                mProcessStateTimer[mProcessState].stopRunningLocked(elapsedRealtimeMs);
-            }
-            mProcessState = uidRunningState;
-            if (uidRunningState != ActivityManager.PROCESS_STATE_NONEXISTENT) {
-                if (mProcessStateTimer[uidRunningState] == null) {
-                    makeProcessState(uidRunningState, null);
+                if (mProcessState != ActivityManager.PROCESS_STATE_NONEXISTENT) {
+                    mProcessStateTimer[mProcessState].stopRunningLocked(elapsedRealtimeMs);
                 }
-                mProcessStateTimer[uidRunningState].startRunningLocked(elapsedRealtimeMs);
+                mProcessState = uidRunningState;
+                if (uidRunningState != ActivityManager.PROCESS_STATE_NONEXISTENT) {
+                    if (mProcessStateTimer[uidRunningState] == null) {
+                        makeProcessState(uidRunningState, null);
+                    }
+                    mProcessStateTimer[uidRunningState].startRunningLocked(elapsedRealtimeMs);
+                }
+
+                updateOnBatteryBgTimeBase(uptimeMs * 1000, elapsedRealtimeMs * 1000);
+                updateOnBatteryScreenOffBgTimeBase(uptimeMs * 1000, elapsedRealtimeMs * 1000);
             }
 
-            updateOnBatteryBgTimeBase(uptimeMs * 1000, elapsedRealtimeMs * 1000);
-            updateOnBatteryScreenOffBgTimeBase(uptimeMs * 1000, elapsedRealtimeMs * 1000);
+            if (userAwareService != mInForegroundService) {
+                if (userAwareService) {
+                    noteForegroundServiceResumedLocked(elapsedRealtimeMs);
+                } else {
+                    noteForegroundServicePausedLocked(elapsedRealtimeMs);
+                }
+                mInForegroundService = userAwareService;
+            }
         }
 
         /** Whether to consider Uid to be in the background for background timebase purposes. */
@@ -8462,11 +8680,20 @@
             }
         }
 
-        public void noteStopJobLocked(String name, long elapsedRealtimeMs) {
+        public void noteStopJobLocked(String name, long elapsedRealtimeMs, int stopReason) {
             DualTimer t = mJobStats.stopObject(name);
             if (t != null) {
                 t.stopRunningLocked(elapsedRealtimeMs);
             }
+            if (mBsi.mOnBatteryTimeBase.isRunning()) {
+                SparseIntArray types = mJobCompletions.get(name);
+                if (types == null) {
+                    types = new SparseIntArray();
+                    mJobCompletions.put(name, types);
+                }
+                int last = types.get(stopReason, 0);
+                types.put(stopReason, last + 1);
+            }
         }
 
         public StopwatchTimer getWakelockTimerLocked(Wakelock wl, int type) {
@@ -8553,13 +8780,6 @@
             }
         }
 
-        public void reportExcessiveWakeLocked(String proc, long overTime, long usedTime) {
-            Proc p = getProcessStatsLocked(proc);
-            if (p != null) {
-                p.addExcessiveWake(overTime, usedTime);
-            }
-        }
-
         public void reportExcessiveCpuLocked(String proc, long overTime, long usedTime) {
             Proc p = getProcessStatsLocked(proc);
             if (p != null) {
@@ -8597,17 +8817,14 @@
         return mCpuFreqs;
     }
 
-    public BatteryStatsImpl(File systemDir, Handler handler, ExternalStatsSync externalSync) {
-        this(new SystemClocks(), systemDir, handler, externalSync, null);
+    public BatteryStatsImpl(File systemDir, Handler handler, PlatformIdleStateCallback cb,
+            UserInfoProvider userInfoProvider) {
+        this(new SystemClocks(), systemDir, handler, cb, userInfoProvider);
     }
 
-    public BatteryStatsImpl(File systemDir, Handler handler, ExternalStatsSync externalSync,
-                            PlatformIdleStateCallback cb) {
-        this(new SystemClocks(), systemDir, handler, externalSync, cb);
-    }
-
-    public BatteryStatsImpl(Clocks clocks, File systemDir, Handler handler,
-            ExternalStatsSync externalSync, PlatformIdleStateCallback cb) {
+    private BatteryStatsImpl(Clocks clocks, File systemDir, Handler handler,
+            PlatformIdleStateCallback cb,
+            UserInfoProvider userInfoProvider) {
         init(clocks);
 
         if (systemDir != null) {
@@ -8618,10 +8835,10 @@
         }
         mCheckinFile = new AtomicFile(new File(systemDir, "batterystats-checkin.bin"));
         mDailyFile = new AtomicFile(new File(systemDir, "batterystats-daily.xml"));
-        mExternalSync = externalSync;
         mHandler = new MyHandler(handler.getLooper());
         mStartCount++;
         mScreenOnTimer = new StopwatchTimer(mClocks, null, -1, null, mOnBatteryTimeBase);
+        mScreenDozeTimer = new StopwatchTimer(mClocks, null, -1, null, mOnBatteryTimeBase);
         for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
             mScreenBrightnessTimer[i] = new StopwatchTimer(mClocks, null, -100-i, null,
                     mOnBatteryTimeBase);
@@ -8680,6 +8897,7 @@
         mCameraOnTimer = new StopwatchTimer(mClocks, null, -13, null, mOnBatteryTimeBase);
         mBluetoothScanTimer = new StopwatchTimer(mClocks, null, -14, null, mOnBatteryTimeBase);
         mDischargeScreenOffCounter = new LongSamplingCounter(mOnBatteryScreenOffTimeBase);
+        mDischargeScreenDozeCounter = new LongSamplingCounter(mOnBatteryTimeBase);
         mDischargeCounter = new LongSamplingCounter(mOnBatteryTimeBase);
         mOnBattery = mOnBatteryInternal = false;
         long uptime = mClocks.uptimeMillis() * 1000;
@@ -8695,6 +8913,7 @@
         clearHistoryLocked();
         updateDailyDeadlineLocked();
         mPlatformIdleStateCallback = cb;
+        mUserInfoProvider = userInfoProvider;
     }
 
     public BatteryStatsImpl(Parcel p) {
@@ -8745,6 +8964,10 @@
         }
     }
 
+    public void setExternalStatsSyncLocked(ExternalStatsSync sync) {
+        mExternalSync = sync;
+    }
+
     public void updateDailyDeadlineLocked() {
         // Get the current time.
         long currentTime = mDailyStartTime = System.currentTimeMillis();
@@ -9218,8 +9441,16 @@
         return mCharging;
     }
 
-    public boolean isScreenOn() {
-        return mScreenState == Display.STATE_ON;
+    public boolean isScreenOn(int state) {
+        return state == Display.STATE_ON;
+    }
+
+    public boolean isScreenOff(int state) {
+        return state == Display.STATE_OFF;
+    }
+
+    public boolean isScreenDoze(int state) {
+        return state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND;
     }
 
     void initTimes(long uptime, long realtime) {
@@ -9239,9 +9470,12 @@
         mDischargeAmountScreenOnSinceCharge = 0;
         mDischargeAmountScreenOff = 0;
         mDischargeAmountScreenOffSinceCharge = 0;
+        mDischargeAmountScreenDoze = 0;
+        mDischargeAmountScreenDozeSinceCharge = 0;
         mDischargeStepTracker.init();
         mChargeStepTracker.init();
         mDischargeScreenOffCounter.reset(false);
+        mDischargeScreenDozeCounter.reset(false);
         mDischargeCounter.reset(false);
     }
 
@@ -9259,15 +9493,22 @@
         mOnBatteryTimeBase.reset(uptime, realtime);
         mOnBatteryScreenOffTimeBase.reset(uptime, realtime);
         if ((mHistoryCur.states&HistoryItem.STATE_BATTERY_PLUGGED_FLAG) == 0) {
-            if (mScreenState == Display.STATE_ON) {
+            if (isScreenOn(mScreenState)) {
                 mDischargeScreenOnUnplugLevel = mHistoryCur.batteryLevel;
+                mDischargeScreenDozeUnplugLevel = 0;
+                mDischargeScreenOffUnplugLevel = 0;
+            } else if (isScreenDoze(mScreenState)) {
+                mDischargeScreenOnUnplugLevel = 0;
+                mDischargeScreenDozeUnplugLevel = mHistoryCur.batteryLevel;
                 mDischargeScreenOffUnplugLevel = 0;
             } else {
                 mDischargeScreenOnUnplugLevel = 0;
+                mDischargeScreenDozeUnplugLevel = 0;
                 mDischargeScreenOffUnplugLevel = mHistoryCur.batteryLevel;
             }
             mDischargeAmountScreenOn = 0;
             mDischargeAmountScreenOff = 0;
+            mDischargeAmountScreenDoze = 0;
         }
         initActiveHistoryEventsLocked(mSecRealtime, mSecUptime);
     }
@@ -9278,6 +9519,7 @@
         mStartCount = 0;
         initTimes(uptimeMillis * 1000, elapsedRealtimeMillis * 1000);
         mScreenOnTimer.reset(false);
+        mScreenDozeTimer.reset(false);
         for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
             mScreenBrightnessTimer[i].reset(false);
         }
@@ -9343,6 +9585,19 @@
             }
         }
 
+        if (mRpmStats.size() > 0) {
+            for (SamplingTimer timer : mRpmStats.values()) {
+                mOnBatteryTimeBase.remove(timer);
+            }
+            mRpmStats.clear();
+        }
+        if (mScreenOffRpmStats.size() > 0) {
+            for (SamplingTimer timer : mScreenOffRpmStats.values()) {
+                mOnBatteryScreenOffTimeBase.remove(timer);
+            }
+            mScreenOffRpmStats.clear();
+        }
+
         if (mKernelWakelockStats.size() > 0) {
             for (SamplingTimer timer : mKernelWakelockStats.values()) {
                 mOnBatteryScreenOffTimeBase.remove(timer);
@@ -9401,33 +9656,52 @@
         }
     }
 
-    void updateDischargeScreenLevelsLocked(boolean oldScreenOn, boolean newScreenOn) {
-        if (oldScreenOn) {
+    void updateDischargeScreenLevelsLocked(int oldState, int newState) {
+        updateOldDischargeScreenLevelLocked(oldState);
+        updateNewDischargeScreenLevelLocked(newState);
+    }
+
+    private void updateOldDischargeScreenLevelLocked(int state) {
+        if (isScreenOn(state)) {
             int diff = mDischargeScreenOnUnplugLevel - mDischargeCurrentLevel;
             if (diff > 0) {
                 mDischargeAmountScreenOn += diff;
                 mDischargeAmountScreenOnSinceCharge += diff;
             }
-        } else {
+        } else if (isScreenDoze(state)) {
+            int diff = mDischargeScreenDozeUnplugLevel - mDischargeCurrentLevel;
+            if (diff > 0) {
+                mDischargeAmountScreenDoze += diff;
+                mDischargeAmountScreenDozeSinceCharge += diff;
+            }
+        } else if (isScreenOff(state)){
             int diff = mDischargeScreenOffUnplugLevel - mDischargeCurrentLevel;
             if (diff > 0) {
                 mDischargeAmountScreenOff += diff;
                 mDischargeAmountScreenOffSinceCharge += diff;
             }
         }
-        if (newScreenOn) {
+    }
+
+    private void updateNewDischargeScreenLevelLocked(int state) {
+        if (isScreenOn(state)) {
             mDischargeScreenOnUnplugLevel = mDischargeCurrentLevel;
             mDischargeScreenOffUnplugLevel = 0;
-        } else {
+            mDischargeScreenDozeUnplugLevel = 0;
+        } else if (isScreenDoze(state)){
             mDischargeScreenOnUnplugLevel = 0;
+            mDischargeScreenDozeUnplugLevel = mDischargeCurrentLevel;
+            mDischargeScreenOffUnplugLevel = 0;
+        } else if (isScreenOff(state)) {
+            mDischargeScreenOnUnplugLevel = 0;
+            mDischargeScreenDozeUnplugLevel = 0;
             mDischargeScreenOffUnplugLevel = mDischargeCurrentLevel;
         }
     }
 
     public void pullPendingStateUpdatesLocked() {
         if (mOnBatteryInternal) {
-            final boolean screenOn = mScreenState == Display.STATE_ON;
-            updateDischargeScreenLevelsLocked(screenOn, screenOn);
+            updateDischargeScreenLevelsLocked(mScreenState, mScreenState);
         }
     }
 
@@ -9750,7 +10024,7 @@
                 return;
             }
 
-            final long elapsedRealtimeMs = SystemClock.elapsedRealtime();
+            final long elapsedRealtimeMs = mClocks.elapsedRealtime();
             long radioTime = mMobileRadioActivePerAppTimer.getTimeSinceMarkLocked(
                     elapsedRealtimeMs * 1000);
             mMobileRadioActivePerAppTimer.setMark(elapsedRealtimeMs);
@@ -10045,6 +10319,61 @@
     }
 
     /**
+     * Read and record Resource Power Manager (RPM) state and voter times.
+     * If RPM stats were fetched more recently than RPM_STATS_UPDATE_FREQ_MS ago, uses the old data
+     * instead of fetching it anew.
+     */
+    public void updateRpmStatsLocked() {
+        if (mPlatformIdleStateCallback == null) return;
+        long now = SystemClock.elapsedRealtime();
+        if (now - mLastRpmStatsUpdateTimeMs >= RPM_STATS_UPDATE_FREQ_MS) {
+            mPlatformIdleStateCallback.fillLowPowerStats(mTmpRpmStats);
+            mLastRpmStatsUpdateTimeMs = now;
+        }
+
+        for (Map.Entry<String, RpmStats.PowerStatePlatformSleepState> pstate
+                : mTmpRpmStats.mPlatformLowPowerStats.entrySet()) {
+
+            // Update values for this platform state.
+            final String pName = pstate.getKey();
+            final long pTimeUs = pstate.getValue().mTimeMs * 1000;
+            final int pCount = pstate.getValue().mCount;
+            getRpmTimerLocked(pName).update(pTimeUs, pCount);
+            if (SCREEN_OFF_RPM_STATS_ENABLED) {
+                getScreenOffRpmTimerLocked(pName).update(pTimeUs, pCount);
+            }
+
+            // Update values for each voter of this platform state.
+            for (Map.Entry<String, RpmStats.PowerStateElement> voter
+                    : pstate.getValue().mVoters.entrySet()) {
+                final String vName = pName + "." + voter.getKey();
+                final long vTimeUs = voter.getValue().mTimeMs * 1000;
+                final int vCount = voter.getValue().mCount;
+                getRpmTimerLocked(vName).update(vTimeUs, vCount);
+                if (SCREEN_OFF_RPM_STATS_ENABLED) {
+                    getScreenOffRpmTimerLocked(vName).update(vTimeUs, vCount);
+                }
+            }
+        }
+
+        for (Map.Entry<String, RpmStats.PowerStateSubsystem> subsys
+                : mTmpRpmStats.mSubsystemLowPowerStats.entrySet()) {
+
+            final String subsysName = subsys.getKey();
+            for (Map.Entry<String, RpmStats.PowerStateElement> sstate
+                    : subsys.getValue().mStates.entrySet()) {
+                final String name = subsysName + "." + sstate.getKey();
+                final long timeUs = sstate.getValue().mTimeMs * 1000;
+                final int count = sstate.getValue().mCount;
+                getRpmTimerLocked(name).update(timeUs, count);
+                if (SCREEN_OFF_RPM_STATS_ENABLED) {
+                    getScreenOffRpmTimerLocked(name).update(timeUs, count);
+                }
+            }
+        }
+    }
+
+    /**
      * Read and distribute kernel wake lock use across apps.
      */
     public void updateKernelWakelocksLocked() {
@@ -10146,12 +10475,6 @@
         // If no app is holding a wakelock, then the distribution is normal.
         final int wakelockWeight = 50;
 
-        // Read the time spent for each cluster at various cpu frequencies.
-        final long[][] clusterSpeeds = new long[mKernelCpuSpeedReaders.length][];
-        for (int cluster = 0; cluster < mKernelCpuSpeedReaders.length; cluster++) {
-            clusterSpeeds[cluster] = mKernelCpuSpeedReaders[cluster].readDelta();
-        }
-
         int numWakelocks = 0;
 
         // Calculate how many wakelocks we have to distribute amongst. The system is excluded.
@@ -10175,10 +10498,13 @@
         mTempTotalCpuUserTimeUs = 0;
         mTempTotalCpuSystemTimeUs = 0;
 
+        final SparseLongArray updatedUids = new SparseLongArray();
+
         // Read the CPU data for each UID. This will internally generate a snapshot so next time
         // we read, we get a delta. If we are to distribute the cpu time, then do so. Otherwise
         // we just ignore the data.
         final long startTimeMs = mClocks.uptimeMillis();
+        mUserInfoProvider.refreshUserIds();
         mKernelUidCpuTimeReader.readDelta(!mOnBatteryInternal ? null :
                 new KernelUidCpuTimeReader.Callback() {
                     @Override
@@ -10192,6 +10518,11 @@
                                     + " no mapping to owning uid: " + uid);
                             return;
                         }
+                        if (!mUserInfoProvider.exists(UserHandle.getUserId(uid))) {
+                            Slog.d(TAG, "Got readings for an invalid user's uid " + uid);
+                            mKernelUidCpuTimeReader.removeUid(uid);
+                            return;
+                        }
                         final Uid u = getUidStatsLocked(uid);
 
                         // Accumulate the total system and user time.
@@ -10226,32 +10557,7 @@
 
                         u.mUserCpuTime.addCountLocked(userTimeUs);
                         u.mSystemCpuTime.addCountLocked(systemTimeUs);
-
-                        // Add the cpu speeds to this UID. These are used as a ratio
-                        // for computing the power this UID used.
-                        final int numClusters = mPowerProfile.getNumCpuClusters();
-                        if (u.mCpuClusterSpeed == null || u.mCpuClusterSpeed.length !=
-                                numClusters) {
-                            u.mCpuClusterSpeed = new LongSamplingCounter[numClusters][];
-                        }
-
-                        for (int cluster = 0; cluster < clusterSpeeds.length; cluster++) {
-                            final int speedsInCluster = mPowerProfile.getNumSpeedStepsInCpuCluster(
-                                    cluster);
-                            if (u.mCpuClusterSpeed[cluster] == null || speedsInCluster !=
-                                    u.mCpuClusterSpeed[cluster].length) {
-                                u.mCpuClusterSpeed[cluster] =
-                                        new LongSamplingCounter[speedsInCluster];
-                            }
-
-                            final LongSamplingCounter[] cpuSpeeds = u.mCpuClusterSpeed[cluster];
-                            for (int speed = 0; speed < clusterSpeeds[cluster].length; speed++) {
-                                if (cpuSpeeds[speed] == null) {
-                                    cpuSpeeds[speed] = new LongSamplingCounter(mOnBatteryTimeBase);
-                                }
-                                cpuSpeeds[speed].addCountLocked(clusterSpeeds[cluster][speed]);
-                            }
-                        }
+                        updatedUids.put(u.getUid(), userTimeUs + systemTimeUs);
                     }
                 });
 
@@ -10291,6 +10597,8 @@
 
                     timer.mUid.mUserCpuTime.addCountLocked(userTimeUs);
                     timer.mUid.mSystemCpuTime.addCountLocked(systemTimeUs);
+                    final int uid = timer.mUid.getUid();
+                    updatedUids.put(uid, updatedUids.get(uid, 0) + userTimeUs + systemTimeUs);
 
                     final Uid.Proc proc = timer.mUid.getProcessStatsLocked("*wakelock*");
                     proc.addCpuTimeLocked(userTimeUs / 1000, systemTimeUs / 1000);
@@ -10315,6 +10623,8 @@
                 final Uid u = getUidStatsLocked(Process.SYSTEM_UID);
                 u.mUserCpuTime.addCountLocked(mTempTotalCpuUserTimeUs);
                 u.mSystemCpuTime.addCountLocked(mTempTotalCpuSystemTimeUs);
+                updatedUids.put(Process.SYSTEM_UID, updatedUids.get(Process.SYSTEM_UID, 0)
+                        + mTempTotalCpuUserTimeUs + mTempTotalCpuSystemTimeUs);
 
                 final Uid.Proc proc = u.getProcessStatsLocked("*lost*");
                 proc.addCpuTimeLocked((int) mTempTotalCpuUserTimeUs / 1000,
@@ -10322,6 +10632,53 @@
             }
         }
 
+        long totalCpuClustersTimeMs = 0;
+        // Read the time spent for each cluster at various cpu frequencies.
+        final long[][] clusterSpeedTimesMs = new long[mKernelCpuSpeedReaders.length][];
+        for (int cluster = 0; cluster < mKernelCpuSpeedReaders.length; cluster++) {
+            clusterSpeedTimesMs[cluster] = mKernelCpuSpeedReaders[cluster].readDelta();
+            if (clusterSpeedTimesMs[cluster] != null) {
+                for (int speed = clusterSpeedTimesMs[cluster].length - 1; speed >= 0; --speed) {
+                    totalCpuClustersTimeMs += clusterSpeedTimesMs[cluster][speed];
+                }
+            }
+        }
+        if (totalCpuClustersTimeMs != 0) {
+            // We have cpu times per freq aggregated over all uids but we need the times per uid.
+            // So, we distribute total time spent by an uid to different cpu freqs based on the
+            // amount of time cpu was running at that freq.
+            final int updatedUidsCount = updatedUids.size();
+            for (int i = 0; i < updatedUidsCount; ++i) {
+                final Uid u = getUidStatsLocked(updatedUids.keyAt(i));
+                final long appCpuTimeUs = updatedUids.valueAt(i);
+                // Add the cpu speeds to this UID.
+                final int numClusters = mPowerProfile.getNumCpuClusters();
+                if (u.mCpuClusterSpeedTimesUs == null || u.mCpuClusterSpeedTimesUs.length !=
+                        numClusters) {
+                    u.mCpuClusterSpeedTimesUs = new LongSamplingCounter[numClusters][];
+                }
+
+                for (int cluster = 0; cluster < clusterSpeedTimesMs.length; cluster++) {
+                    final int speedsInCluster = clusterSpeedTimesMs[cluster].length;
+                    if (u.mCpuClusterSpeedTimesUs[cluster] == null || speedsInCluster !=
+                            u.mCpuClusterSpeedTimesUs[cluster].length) {
+                        u.mCpuClusterSpeedTimesUs[cluster]
+                                = new LongSamplingCounter[speedsInCluster];
+                    }
+
+                    final LongSamplingCounter[] cpuSpeeds = u.mCpuClusterSpeedTimesUs[cluster];
+                    for (int speed = 0; speed < speedsInCluster; speed++) {
+                        if (cpuSpeeds[speed] == null) {
+                            cpuSpeeds[speed] = new LongSamplingCounter(mOnBatteryTimeBase);
+                        }
+                        cpuSpeeds[speed].addCountLocked(appCpuTimeUs
+                                * clusterSpeedTimesMs[cluster][speed]
+                                / totalCpuClustersTimeMs);
+                    }
+                }
+            }
+        }
+
         // See if there is a difference in wakelocks between this collection and the last
         // collection.
         if (ArrayUtils.referenceEquals(mPartialTimers, mLastPartialTimers)) {
@@ -10364,12 +10721,19 @@
                                     + " no mapping to owning uid: " + uid);
                             return;
                         }
+                        if (!mUserInfoProvider.exists(UserHandle.getUserId(uid))) {
+                            Slog.d(TAG, "Got readings for an invalid user's uid " + uid);
+                            mKernelUidCpuFreqTimeReader.removeUid(uid);
+                            return;
+                        }
                         final Uid u = getUidStatsLocked(uid);
-                        if (u.mCpuFreqTimeMs == null) {
+                        if (u.mCpuFreqTimeMs == null
+                                || u.mCpuFreqTimeMs.getSize() != cpuFreqTimeMs.length) {
                             u.mCpuFreqTimeMs = new LongSamplingCounterArray(mOnBatteryTimeBase);
                         }
                         u.mCpuFreqTimeMs.addCountLocked(cpuFreqTimeMs);
-                        if (u.mScreenOffCpuFreqTimeMs == null) {
+                        if (u.mScreenOffCpuFreqTimeMs == null
+                                || u.mScreenOffCpuFreqTimeMs.getSize() != cpuFreqTimeMs.length) {
                             u.mScreenOffCpuFreqTimeMs = new LongSamplingCounterArray(
                                     mOnBatteryScreenOffTimeBase);
                         }
@@ -10392,8 +10756,8 @@
         return false;
     }
 
-    void setOnBatteryLocked(final long mSecRealtime, final long mSecUptime, final boolean onBattery,
-            final int oldStatus, final int level, final int chargeUAh) {
+    protected void setOnBatteryLocked(final long mSecRealtime, final long mSecUptime,
+            final boolean onBattery, final int oldStatus, final int level, final int chargeUAh) {
         boolean doWrite = false;
         Message m = mHandler.obtainMessage(MSG_REPORT_POWER_CHANGE);
         m.arg1 = onBattery ? 1 : 0;
@@ -10401,7 +10765,7 @@
 
         final long uptime = mSecUptime * 1000;
         final long realtime = mSecRealtime * 1000;
-        final boolean screenOn = mScreenState == Display.STATE_ON;
+        final int screenState = mScreenState;
         if (onBattery) {
             // We will reset our status if we are unplugging after the
             // battery was last full, or the level is at 100, or
@@ -10477,16 +10841,23 @@
             }
             addHistoryRecordLocked(mSecRealtime, mSecUptime);
             mDischargeCurrentLevel = mDischargeUnplugLevel = level;
-            if (screenOn) {
+            if (isScreenOn(screenState)) {
                 mDischargeScreenOnUnplugLevel = level;
+                mDischargeScreenDozeUnplugLevel = 0;
+                mDischargeScreenOffUnplugLevel = 0;
+            } else if (isScreenDoze(screenState)) {
+                mDischargeScreenOnUnplugLevel = 0;
+                mDischargeScreenDozeUnplugLevel = level;
                 mDischargeScreenOffUnplugLevel = 0;
             } else {
                 mDischargeScreenOnUnplugLevel = 0;
+                mDischargeScreenDozeUnplugLevel = 0;
                 mDischargeScreenOffUnplugLevel = level;
             }
             mDischargeAmountScreenOn = 0;
+            mDischargeAmountScreenDoze = 0;
             mDischargeAmountScreenOff = 0;
-            updateTimeBasesLocked(true, !screenOn, uptime, realtime);
+            updateTimeBasesLocked(true, screenState, uptime, realtime);
         } else {
             mLastChargingStateLevel = level;
             mOnBattery = mOnBatteryInternal = false;
@@ -10501,8 +10872,8 @@
                 mLowDischargeAmountSinceCharge += mDischargeUnplugLevel-level-1;
                 mHighDischargeAmountSinceCharge += mDischargeUnplugLevel-level;
             }
-            updateDischargeScreenLevelsLocked(screenOn, screenOn);
-            updateTimeBasesLocked(false, !screenOn, uptime, realtime);
+            updateDischargeScreenLevelsLocked(screenState, screenState);
+            updateTimeBasesLocked(false, screenState, uptime, realtime);
             mChargeStepTracker.init();
             mLastChargeStepLevel = level;
             mMaxChargeStepLevel = level;
@@ -10619,6 +10990,9 @@
                 final long chargeDiff = mHistoryCur.batteryChargeUAh - chargeUAh;
                 mDischargeCounter.addCountLocked(chargeDiff);
                 mDischargeScreenOffCounter.addCountLocked(chargeDiff);
+                if (isScreenDoze(mScreenState)) {
+                    mDischargeScreenDozeCounter.addCountLocked(chargeDiff);
+                }
             }
             mHistoryCur.batteryChargeUAh = chargeUAh;
             setOnBatteryLocked(elapsedRealtime, uptime, onBattery, oldStatus, level, chargeUAh);
@@ -10661,6 +11035,9 @@
                     final long chargeDiff = mHistoryCur.batteryChargeUAh - chargeUAh;
                     mDischargeCounter.addCountLocked(chargeDiff);
                     mDischargeScreenOffCounter.addCountLocked(chargeDiff);
+                    if (isScreenDoze(mScreenState)) {
+                        mDischargeScreenDozeCounter.addCountLocked(chargeDiff);
+                    }
                 }
                 mHistoryCur.batteryChargeUAh = chargeUAh;
                 changed = true;
@@ -10969,10 +11346,11 @@
         return dischargeAmount;
     }
 
+    @Override
     public int getDischargeAmountScreenOn() {
         synchronized(this) {
             int val = mDischargeAmountScreenOn;
-            if (mOnBattery && mScreenState == Display.STATE_ON
+            if (mOnBattery && isScreenOn(mScreenState)
                     && mDischargeCurrentLevel < mDischargeScreenOnUnplugLevel) {
                 val += mDischargeScreenOnUnplugLevel-mDischargeCurrentLevel;
             }
@@ -10980,10 +11358,11 @@
         }
     }
 
+    @Override
     public int getDischargeAmountScreenOnSinceCharge() {
         synchronized(this) {
             int val = mDischargeAmountScreenOnSinceCharge;
-            if (mOnBattery && mScreenState == Display.STATE_ON
+            if (mOnBattery && isScreenOn(mScreenState)
                     && mDischargeCurrentLevel < mDischargeScreenOnUnplugLevel) {
                 val += mDischargeScreenOnUnplugLevel-mDischargeCurrentLevel;
             }
@@ -10991,23 +11370,51 @@
         }
     }
 
+    @Override
     public int getDischargeAmountScreenOff() {
         synchronized(this) {
             int val = mDischargeAmountScreenOff;
-            if (mOnBattery && mScreenState != Display.STATE_ON
+            if (mOnBattery && isScreenOff(mScreenState)
                     && mDischargeCurrentLevel < mDischargeScreenOffUnplugLevel) {
                 val += mDischargeScreenOffUnplugLevel-mDischargeCurrentLevel;
             }
+            // For backward compatibility, doze discharge is counted into screen off.
+            return val + getDischargeAmountScreenDoze();
+        }
+    }
+
+    @Override
+    public int getDischargeAmountScreenOffSinceCharge() {
+        synchronized(this) {
+            int val = mDischargeAmountScreenOffSinceCharge;
+            if (mOnBattery && isScreenOff(mScreenState)
+                    && mDischargeCurrentLevel < mDischargeScreenOffUnplugLevel) {
+                val += mDischargeScreenOffUnplugLevel-mDischargeCurrentLevel;
+            }
+            // For backward compatibility, doze discharge is counted into screen off.
+            return val + getDischargeAmountScreenDozeSinceCharge();
+        }
+    }
+
+    @Override
+    public int getDischargeAmountScreenDoze() {
+        synchronized(this) {
+            int val = mDischargeAmountScreenDoze;
+            if (mOnBattery && isScreenDoze(mScreenState)
+                    && mDischargeCurrentLevel < mDischargeScreenDozeUnplugLevel) {
+                val += mDischargeScreenDozeUnplugLevel-mDischargeCurrentLevel;
+            }
             return val;
         }
     }
 
-    public int getDischargeAmountScreenOffSinceCharge() {
+    @Override
+    public int getDischargeAmountScreenDozeSinceCharge() {
         synchronized(this) {
-            int val = mDischargeAmountScreenOffSinceCharge;
-            if (mOnBattery && mScreenState != Display.STATE_ON
-                    && mDischargeCurrentLevel < mDischargeScreenOffUnplugLevel) {
-                val += mDischargeScreenOffUnplugLevel-mDischargeCurrentLevel;
+            int val = mDischargeAmountScreenDozeSinceCharge;
+            if (mOnBattery && isScreenDoze(mScreenState)
+                    && mDischargeCurrentLevel < mDischargeScreenDozeUnplugLevel) {
+                val += mDischargeScreenDozeUnplugLevel-mDischargeCurrentLevel;
             }
             return val;
         }
@@ -11025,6 +11432,23 @@
         return u;
     }
 
+    public void onCleanupUserLocked(int userId) {
+        final int firstUidForUser = UserHandle.getUid(userId, 0);
+        final int lastUidForUser = UserHandle.getUid(userId, UserHandle.PER_USER_RANGE - 1);
+        mKernelUidCpuFreqTimeReader.removeUidsInRange(firstUidForUser, lastUidForUser);
+        mKernelUidCpuTimeReader.removeUidsInRange(firstUidForUser, lastUidForUser);
+    }
+
+    public void onUserRemovedLocked(int userId) {
+        final int firstUidForUser = UserHandle.getUid(userId, 0);
+        final int lastUidForUser = UserHandle.getUid(userId, UserHandle.PER_USER_RANGE - 1);
+        mUidStats.put(firstUidForUser, null);
+        mUidStats.put(lastUidForUser, null);
+        final int firstIndex = mUidStats.indexOfKey(firstUidForUser);
+        final int lastIndex = mUidStats.indexOfKey(lastUidForUser);
+        mUidStats.removeAtRange(firstIndex, lastIndex - firstIndex + 1);
+    }
+
     /**
      * Remove the statistics object for a particular uid.
      */
@@ -11349,12 +11773,14 @@
         mHighDischargeAmountSinceCharge = in.readInt();
         mDischargeAmountScreenOnSinceCharge = in.readInt();
         mDischargeAmountScreenOffSinceCharge = in.readInt();
+        mDischargeAmountScreenDozeSinceCharge = in.readInt();
         mDischargeStepTracker.readFromParcel(in);
         mChargeStepTracker.readFromParcel(in);
         mDailyDischargeStepTracker.readFromParcel(in);
         mDailyChargeStepTracker.readFromParcel(in);
         mDischargeCounter.readSummaryFromParcelLocked(in);
         mDischargeScreenOffCounter.readSummaryFromParcelLocked(in);
+        mDischargeScreenDozeCounter.readSummaryFromParcelLocked(in);
         int NPKG = in.readInt();
         if (NPKG > 0) {
             mDailyPackageChanges = new ArrayList<>(NPKG);
@@ -11377,6 +11803,7 @@
 
         mScreenState = Display.STATE_UNKNOWN;
         mScreenOnTimer.readSummaryFromParcelLocked(in);
+        mScreenDozeTimer.readSummaryFromParcelLocked(in);
         for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
             mScreenBrightnessTimer[i].readSummaryFromParcelLocked(in);
         }
@@ -11437,6 +11864,27 @@
         mBluetoothScanNesting = 0;
         mBluetoothScanTimer.readSummaryFromParcelLocked(in);
 
+        int NRPMS = in.readInt();
+        if (NRPMS > 10000) {
+            throw new ParcelFormatException("File corrupt: too many rpm stats " + NRPMS);
+        }
+        for (int irpm = 0; irpm < NRPMS; irpm++) {
+            if (in.readInt() != 0) {
+                String rpmName = in.readString();
+                getRpmTimerLocked(rpmName).readSummaryFromParcelLocked(in);
+            }
+        }
+        int NSORPMS = in.readInt();
+        if (NSORPMS > 10000) {
+            throw new ParcelFormatException("File corrupt: too many screen-off rpm stats " + NSORPMS);
+        }
+        for (int irpm = 0; irpm < NSORPMS; irpm++) {
+            if (in.readInt() != 0) {
+                String rpmName = in.readString();
+                getScreenOffRpmTimerLocked(rpmName).readSummaryFromParcelLocked(in);
+            }
+        }
+
         int NKW = in.readInt();
         if (NKW > 10000) {
             throw new ParcelFormatException("File corrupt: too many kernel wake locks " + NKW);
@@ -11520,6 +11968,9 @@
                 u.createForegroundActivityTimerLocked().readSummaryFromParcelLocked(in);
             }
             if (in.readInt() != 0) {
+                u.createForegroundServiceTimerLocked().readSummaryFromParcelLocked(in);
+            }
+            if (in.readInt() != 0) {
                 u.createAggregatedPartialWakelockTimerLocked().readSummaryFromParcelLocked(in);
             }
             if (in.readInt() != 0) {
@@ -11575,7 +12026,7 @@
                     throw new ParcelFormatException("Incompatible cpu cluster arrangement");
                 }
 
-                u.mCpuClusterSpeed = new LongSamplingCounter[numClusters][];
+                u.mCpuClusterSpeedTimesUs = new LongSamplingCounter[numClusters][];
                 for (int cluster = 0; cluster < numClusters; cluster++) {
                     if (in.readInt() != 0) {
                         final int NSB = in.readInt();
@@ -11585,20 +12036,20 @@
                                     NSB);
                         }
 
-                        u.mCpuClusterSpeed[cluster] = new LongSamplingCounter[NSB];
+                        u.mCpuClusterSpeedTimesUs[cluster] = new LongSamplingCounter[NSB];
                         for (int speed = 0; speed < NSB; speed++) {
                             if (in.readInt() != 0) {
-                                u.mCpuClusterSpeed[cluster][speed] = new LongSamplingCounter(
+                                u.mCpuClusterSpeedTimesUs[cluster][speed] = new LongSamplingCounter(
                                         mOnBatteryTimeBase);
-                                u.mCpuClusterSpeed[cluster][speed].readSummaryFromParcelLocked(in);
+                                u.mCpuClusterSpeedTimesUs[cluster][speed].readSummaryFromParcelLocked(in);
                             }
                         }
                     } else {
-                        u.mCpuClusterSpeed[cluster] = null;
+                        u.mCpuClusterSpeedTimesUs[cluster] = null;
                     }
                 }
             } else {
-                u.mCpuClusterSpeed = null;
+                u.mCpuClusterSpeedTimesUs = null;
             }
 
             u.mCpuFreqTimeMs = LongSamplingCounterArray.readSummaryFromParcelLocked(
@@ -11647,6 +12098,8 @@
                 u.readJobSummaryFromParcelLocked(name, in);
             }
 
+            u.readJobCompletionsFromParcelLocked(in);
+
             int NP = in.readInt();
             if (NP > 1000) {
                 throw new ParcelFormatException("File corrupt: too many sensors " + NP);
@@ -11688,7 +12141,7 @@
                 p.mWakeupAlarms.clear();
                 for (int iwa=0; iwa<NWA; iwa++) {
                     String tag = in.readString();
-                    Counter c = new Counter(mOnBatteryTimeBase);
+                    Counter c = new Counter(mOnBatteryScreenOffTimeBase);
                     c.readSummaryFromParcelLocked(in);
                     p.mWakeupAlarms.put(tag, c);
                 }
@@ -11746,12 +12199,14 @@
         out.writeInt(getHighDischargeAmountSinceCharge());
         out.writeInt(getDischargeAmountScreenOnSinceCharge());
         out.writeInt(getDischargeAmountScreenOffSinceCharge());
+        out.writeInt(getDischargeAmountScreenDozeSinceCharge());
         mDischargeStepTracker.writeToParcel(out);
         mChargeStepTracker.writeToParcel(out);
         mDailyDischargeStepTracker.writeToParcel(out);
         mDailyChargeStepTracker.writeToParcel(out);
         mDischargeCounter.writeSummaryFromParcelLocked(out);
         mDischargeScreenOffCounter.writeSummaryFromParcelLocked(out);
+        mDischargeScreenDozeCounter.writeSummaryFromParcelLocked(out);
         if (mDailyPackageChanges != null) {
             final int NPKG = mDailyPackageChanges.size();
             out.writeInt(NPKG);
@@ -11769,6 +12224,7 @@
         out.writeLong(mNextMaxDailyDeadline);
 
         mScreenOnTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
+        mScreenDozeTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
         for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
             mScreenBrightnessTimer[i].writeSummaryFromParcelLocked(out, NOWREAL_SYS);
         }
@@ -11820,6 +12276,29 @@
         mCameraOnTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
         mBluetoothScanTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
 
+        out.writeInt(mRpmStats.size());
+        for (Map.Entry<String, SamplingTimer> ent : mRpmStats.entrySet()) {
+            Timer rpmt = ent.getValue();
+            if (rpmt != null) {
+                out.writeInt(1);
+                out.writeString(ent.getKey());
+                rpmt.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
+            } else {
+                out.writeInt(0);
+            }
+        }
+        out.writeInt(mScreenOffRpmStats.size());
+        for (Map.Entry<String, SamplingTimer> ent : mScreenOffRpmStats.entrySet()) {
+            Timer rpmt = ent.getValue();
+            if (rpmt != null) {
+                out.writeInt(1);
+                out.writeString(ent.getKey());
+                rpmt.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
+            } else {
+                out.writeInt(0);
+            }
+        }
+
         out.writeInt(mKernelWakelockStats.size());
         for (Map.Entry<String, SamplingTimer> ent : mKernelWakelockStats.entrySet()) {
             Timer kwlt = ent.getValue();
@@ -11929,6 +12408,12 @@
             } else {
                 out.writeInt(0);
             }
+            if (u.mForegroundServiceTimer != null) {
+                out.writeInt(1);
+                u.mForegroundServiceTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
+            } else {
+                out.writeInt(0);
+            }
             if (u.mAggregatedPartialWakelockTimer != null) {
                 out.writeInt(1);
                 u.mAggregatedPartialWakelockTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
@@ -11998,10 +12483,10 @@
             u.mUserCpuTime.writeSummaryFromParcelLocked(out);
             u.mSystemCpuTime.writeSummaryFromParcelLocked(out);
 
-            if (u.mCpuClusterSpeed != null) {
+            if (u.mCpuClusterSpeedTimesUs != null) {
                 out.writeInt(1);
-                out.writeInt(u.mCpuClusterSpeed.length);
-                for (LongSamplingCounter[] cpuSpeeds : u.mCpuClusterSpeed) {
+                out.writeInt(u.mCpuClusterSpeedTimesUs.length);
+                for (LongSamplingCounter[] cpuSpeeds : u.mCpuClusterSpeedTimesUs) {
                     if (cpuSpeeds != null) {
                         out.writeInt(1);
                         out.writeInt(cpuSpeeds.length);
@@ -12086,6 +12571,8 @@
                 jobStats.valueAt(ij).writeSummaryFromParcelLocked(out, NOWREAL_SYS);
             }
 
+            u.writeJobCompletionsToParcelLocked(out);
+
             int NSE = u.mSensorStats.size();
             out.writeInt(NSE);
             for (int ise=0; ise<NSE; ise++) {
@@ -12172,6 +12659,7 @@
 
         mScreenState = Display.STATE_UNKNOWN;
         mScreenOnTimer = new StopwatchTimer(mClocks, null, -1, null, mOnBatteryTimeBase, in);
+        mScreenDozeTimer = new StopwatchTimer(mClocks, null, -1, null, mOnBatteryTimeBase, in);
         for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
             mScreenBrightnessTimer[i] = new StopwatchTimer(mClocks, null, -100-i, null,
                     mOnBatteryTimeBase, in);
@@ -12265,12 +12753,34 @@
         mDischargeAmountScreenOnSinceCharge = in.readInt();
         mDischargeAmountScreenOff = in.readInt();
         mDischargeAmountScreenOffSinceCharge = in.readInt();
+        mDischargeAmountScreenDoze = in.readInt();
+        mDischargeAmountScreenDozeSinceCharge = in.readInt();
         mDischargeStepTracker.readFromParcel(in);
         mChargeStepTracker.readFromParcel(in);
         mDischargeCounter = new LongSamplingCounter(mOnBatteryTimeBase, in);
-        mDischargeScreenOffCounter = new LongSamplingCounter(mOnBatteryTimeBase, in);
+        mDischargeScreenOffCounter = new LongSamplingCounter(mOnBatteryScreenOffTimeBase, in);
+        mDischargeScreenDozeCounter = new LongSamplingCounter(mOnBatteryTimeBase, in);
         mLastWriteTime = in.readLong();
 
+        mRpmStats.clear();
+        int NRPMS = in.readInt();
+        for (int irpm = 0; irpm < NRPMS; irpm++) {
+            if (in.readInt() != 0) {
+                String rpmName = in.readString();
+                SamplingTimer rpmt = new SamplingTimer(mClocks, mOnBatteryTimeBase, in);
+                mRpmStats.put(rpmName, rpmt);
+            }
+        }
+        mScreenOffRpmStats.clear();
+        int NSORPMS = in.readInt();
+        for (int irpm = 0; irpm < NSORPMS; irpm++) {
+            if (in.readInt() != 0) {
+                String rpmName = in.readString();
+                SamplingTimer rpmt = new SamplingTimer(mClocks, mOnBatteryScreenOffTimeBase, in);
+                mScreenOffRpmStats.put(rpmName, rpmt);
+            }
+        }
+
         mKernelWakelockStats.clear();
         int NKW = in.readInt();
         for (int ikw = 0; ikw < NKW; ikw++) {
@@ -12368,6 +12878,7 @@
         mOnBatteryScreenOffTimeBase.writeToParcel(out, uSecUptime, uSecRealtime);
 
         mScreenOnTimer.writeToParcel(out, uSecRealtime);
+        mScreenDozeTimer.writeToParcel(out, uSecRealtime);
         for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
             mScreenBrightnessTimer[i].writeToParcel(out, uSecRealtime);
         }
@@ -12430,12 +12941,38 @@
         out.writeInt(mDischargeAmountScreenOnSinceCharge);
         out.writeInt(mDischargeAmountScreenOff);
         out.writeInt(mDischargeAmountScreenOffSinceCharge);
+        out.writeInt(mDischargeAmountScreenDoze);
+        out.writeInt(mDischargeAmountScreenDozeSinceCharge);
         mDischargeStepTracker.writeToParcel(out);
         mChargeStepTracker.writeToParcel(out);
         mDischargeCounter.writeToParcel(out);
         mDischargeScreenOffCounter.writeToParcel(out);
+        mDischargeScreenDozeCounter.writeToParcel(out);
         out.writeLong(mLastWriteTime);
 
+        out.writeInt(mRpmStats.size());
+        for (Map.Entry<String, SamplingTimer> ent : mRpmStats.entrySet()) {
+            SamplingTimer rpmt = ent.getValue();
+            if (rpmt != null) {
+                out.writeInt(1);
+                out.writeString(ent.getKey());
+                rpmt.writeToParcel(out, uSecRealtime);
+            } else {
+                out.writeInt(0);
+            }
+        }
+        out.writeInt(mScreenOffRpmStats.size());
+        for (Map.Entry<String, SamplingTimer> ent : mScreenOffRpmStats.entrySet()) {
+            SamplingTimer rpmt = ent.getValue();
+            if (rpmt != null) {
+                out.writeInt(1);
+                out.writeString(ent.getKey());
+                rpmt.writeToParcel(out, uSecRealtime);
+            } else {
+                out.writeInt(0);
+            }
+        }
+
         if (inclUids) {
             out.writeInt(mKernelWakelockStats.size());
             for (Map.Entry<String, SamplingTimer> ent : mKernelWakelockStats.entrySet()) {
@@ -12460,6 +12997,7 @@
                 }
             }
         } else {
+            // TODO: There should be two 0's printed here, not just one.
             out.writeInt(0);
         }
 
@@ -12518,8 +13056,10 @@
             pw.println("mOnBatteryScreenOffTimeBase:");
             mOnBatteryScreenOffTimeBase.dump(pw, "  ");
             Printer pr = new PrintWriterPrinter(pw);
-            pr.println("*** Screen timer:");
+            pr.println("*** Screen on timer:");
             mScreenOnTimer.logState(pr, "  ");
+            pr.println("*** Screen doze timer:");
+            mScreenDozeTimer.logState(pr, "  ");
             for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
                 pr.println("*** Screen brightness #" + i + ":");
                 mScreenBrightnessTimer[i].logState(pr, "  ");
diff --git a/core/java/com/android/internal/os/ClassLoaderFactory.java b/core/java/com/android/internal/os/ClassLoaderFactory.java
new file mode 100644
index 0000000..387857f
--- /dev/null
+++ b/core/java/com/android/internal/os/ClassLoaderFactory.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.os;
+
+import android.os.Trace;
+
+import dalvik.system.DelegateLastClassLoader;
+import dalvik.system.DexClassLoader;
+import dalvik.system.PathClassLoader;
+
+/**
+ * Creates class loaders.
+ *
+ * @hide
+ */
+public class ClassLoaderFactory {
+    // Unconstructable
+    private ClassLoaderFactory() {}
+
+    private static final String PATH_CLASS_LOADER_NAME = PathClassLoader.class.getName();
+    private static final String DEX_CLASS_LOADER_NAME = DexClassLoader.class.getName();
+    private static final String DELEGATE_LAST_CLASS_LOADER_NAME =
+            DelegateLastClassLoader.class.getName();
+
+    /**
+     * Returns true if {@code name} is a supported classloader. {@code name} must be a
+     * binary name of a class, as defined by {@code Class.getName}.
+     */
+    public static boolean isValidClassLoaderName(String name) {
+        // This method is used to parse package data and does not accept null names.
+        return name != null && (isPathClassLoaderName(name) || isDelegateLastClassLoaderName(name));
+    }
+
+    /**
+     * Returns true if {@code name} is the encoding for either PathClassLoader or DexClassLoader.
+     * The two class loaders are grouped together because they have the same behaviour.
+     */
+    public static boolean isPathClassLoaderName(String name) {
+        // For null values we default to PathClassLoader. This cover the case when packages
+        // don't specify any value for their class loaders.
+        return name == null || PATH_CLASS_LOADER_NAME.equals(name) ||
+                DEX_CLASS_LOADER_NAME.equals(name);
+    }
+
+    /**
+     * Returns true if {@code name} is the encoding for the DelegateLastClassLoader.
+     */
+    public static boolean isDelegateLastClassLoaderName(String name) {
+        return DELEGATE_LAST_CLASS_LOADER_NAME.equals(name);
+    }
+
+    /**
+     * Same as {@code createClassLoader} below, except that no associated namespace
+     * is created.
+     */
+    public static ClassLoader createClassLoader(String dexPath,
+            String librarySearchPath, ClassLoader parent, String classloaderName) {
+        if (isPathClassLoaderName(classloaderName)) {
+            return new PathClassLoader(dexPath, librarySearchPath, parent);
+        } else if (isDelegateLastClassLoaderName(classloaderName)) {
+            return new DelegateLastClassLoader(dexPath, librarySearchPath, parent);
+        }
+
+        throw new AssertionError("Invalid classLoaderName: " + classloaderName);
+    }
+
+    /**
+     * Create a ClassLoader and initialize a linker-namespace for it.
+     */
+    public static ClassLoader createClassLoader(String dexPath,
+            String librarySearchPath, String libraryPermittedPath, ClassLoader parent,
+            int targetSdkVersion, boolean isNamespaceShared, String classloaderName) {
+
+        final ClassLoader classLoader = createClassLoader(dexPath, librarySearchPath, parent,
+                classloaderName);
+
+        boolean isForVendor = false;
+        for (String path : dexPath.split(":")) {
+            if (path.startsWith("/vendor/")) {
+                isForVendor = true;
+                break;
+            }
+        }
+        Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "createClassloaderNamespace");
+        String errorMessage = createClassloaderNamespace(classLoader,
+                                                         targetSdkVersion,
+                                                         librarySearchPath,
+                                                         libraryPermittedPath,
+                                                         isNamespaceShared,
+                                                         isForVendor);
+        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
+
+        if (errorMessage != null) {
+            throw new UnsatisfiedLinkError("Unable to create namespace for the classloader " +
+                                           classLoader + ": " + errorMessage);
+        }
+
+        return classLoader;
+    }
+
+    private static native String createClassloaderNamespace(ClassLoader classLoader,
+                                                            int targetSdkVersion,
+                                                            String librarySearchPath,
+                                                            String libraryPermittedPath,
+                                                            boolean isNamespaceShared,
+                                                            boolean isForVendor);
+}
diff --git a/core/java/com/android/internal/os/CpuPowerCalculator.java b/core/java/com/android/internal/os/CpuPowerCalculator.java
index 8417856..bb743c1 100644
--- a/core/java/com/android/internal/os/CpuPowerCalculator.java
+++ b/core/java/com/android/internal/os/CpuPowerCalculator.java
@@ -22,6 +22,7 @@
 public class CpuPowerCalculator extends PowerCalculator {
     private static final String TAG = "CpuPowerCalculator";
     private static final boolean DEBUG = BatteryStatsHelper.DEBUG;
+    private static final long MICROSEC_IN_HR = (long) 60 * 60 * 1000 * 1000;
     private final PowerProfile mProfile;
 
     public CpuPowerCalculator(PowerProfile profile) {
@@ -33,35 +34,24 @@
                              long rawUptimeUs, int statsType) {
 
         app.cpuTimeMs = (u.getUserCpuTimeUs(statsType) + u.getSystemCpuTimeUs(statsType)) / 1000;
-
-        // Aggregate total time spent on each cluster.
-        long totalTime = 0;
         final int numClusters = mProfile.getNumCpuClusters();
-        for (int cluster = 0; cluster < numClusters; cluster++) {
-            final int speedsForCluster = mProfile.getNumSpeedStepsInCpuCluster(cluster);
-            for (int speed = 0; speed < speedsForCluster; speed++) {
-                totalTime += u.getTimeAtCpuSpeed(cluster, speed, statsType);
-            }
-        }
-        totalTime = Math.max(totalTime, 1);
 
-        double cpuPowerMaMs = 0;
+        double cpuPowerMaUs = 0;
         for (int cluster = 0; cluster < numClusters; cluster++) {
             final int speedsForCluster = mProfile.getNumSpeedStepsInCpuCluster(cluster);
             for (int speed = 0; speed < speedsForCluster; speed++) {
-                final double ratio = (double) u.getTimeAtCpuSpeed(cluster, speed, statsType) /
-                        totalTime;
-                final double cpuSpeedStepPower = ratio * app.cpuTimeMs *
+                final long timeUs = u.getTimeAtCpuSpeed(cluster, speed, statsType);
+                final double cpuSpeedStepPower = timeUs *
                         mProfile.getAveragePowerForCpu(cluster, speed);
-                if (DEBUG && ratio != 0) {
+                if (DEBUG) {
                     Log.d(TAG, "UID " + u.getUid() + ": CPU cluster #" + cluster + " step #"
-                            + speed + " ratio=" + BatteryStatsHelper.makemAh(ratio) + " power="
-                            + BatteryStatsHelper.makemAh(cpuSpeedStepPower / (60 * 60 * 1000)));
+                            + speed + " timeUs=" + timeUs + " power="
+                            + BatteryStatsHelper.makemAh(cpuSpeedStepPower / MICROSEC_IN_HR));
                 }
-                cpuPowerMaMs += cpuSpeedStepPower;
+                cpuPowerMaUs += cpuSpeedStepPower;
             }
         }
-        app.cpuPowerMah = cpuPowerMaMs / (60 * 60 * 1000);
+        app.cpuPowerMah = cpuPowerMaUs / MICROSEC_IN_HR;
 
         if (DEBUG && (app.cpuTimeMs != 0 || app.cpuPowerMah != 0)) {
             Log.d(TAG, "UID " + u.getUid() + ": CPU time=" + app.cpuTimeMs + " ms power="
diff --git a/core/java/com/android/internal/os/KernelCpuSpeedReader.java b/core/java/com/android/internal/os/KernelCpuSpeedReader.java
index 9c7debb..757a112 100644
--- a/core/java/com/android/internal/os/KernelCpuSpeedReader.java
+++ b/core/java/com/android/internal/os/KernelCpuSpeedReader.java
@@ -39,8 +39,8 @@
     private static final String TAG = "KernelCpuSpeedReader";
 
     private final String mProcFile;
-    private final long[] mLastSpeedTimes;
-    private final long[] mDeltaSpeedTimes;
+    private final long[] mLastSpeedTimesMs;
+    private final long[] mDeltaSpeedTimesMs;
 
     // How long a CPU jiffy is in milliseconds.
     private final long mJiffyMillis;
@@ -51,8 +51,8 @@
     public KernelCpuSpeedReader(int cpuNumber, int numSpeedSteps) {
         mProcFile = String.format("/sys/devices/system/cpu/cpu%d/cpufreq/stats/time_in_state",
                 cpuNumber);
-        mLastSpeedTimes = new long[numSpeedSteps];
-        mDeltaSpeedTimes = new long[numSpeedSteps];
+        mLastSpeedTimesMs = new long[numSpeedSteps];
+        mDeltaSpeedTimesMs = new long[numSpeedSteps];
         long jiffyHz = Libcore.os.sysconf(OsConstants._SC_CLK_TCK);
         mJiffyMillis = 1000/jiffyHz;
     }
@@ -68,27 +68,27 @@
             TextUtils.SimpleStringSplitter splitter = new TextUtils.SimpleStringSplitter(' ');
             String line;
             int speedIndex = 0;
-            while (speedIndex < mLastSpeedTimes.length && (line = reader.readLine()) != null) {
+            while (speedIndex < mLastSpeedTimesMs.length && (line = reader.readLine()) != null) {
                 splitter.setString(line);
-                Long.parseLong(splitter.next());
+                splitter.next();
 
                 long time = Long.parseLong(splitter.next()) * mJiffyMillis;
-                if (time < mLastSpeedTimes[speedIndex]) {
+                if (time < mLastSpeedTimesMs[speedIndex]) {
                     // The stats reset when the cpu hotplugged. That means that the time
                     // we read is offset from 0, so the time is the delta.
-                    mDeltaSpeedTimes[speedIndex] = time;
+                    mDeltaSpeedTimesMs[speedIndex] = time;
                 } else {
-                    mDeltaSpeedTimes[speedIndex] = time - mLastSpeedTimes[speedIndex];
+                    mDeltaSpeedTimesMs[speedIndex] = time - mLastSpeedTimesMs[speedIndex];
                 }
-                mLastSpeedTimes[speedIndex] = time;
+                mLastSpeedTimesMs[speedIndex] = time;
                 speedIndex++;
             }
         } catch (IOException e) {
             Slog.e(TAG, "Failed to read cpu-freq: " + e.getMessage());
-            Arrays.fill(mDeltaSpeedTimes, 0);
+            Arrays.fill(mDeltaSpeedTimesMs, 0);
         } finally {
             StrictMode.setThreadPolicy(policy);
         }
-        return mDeltaSpeedTimes;
+        return mDeltaSpeedTimesMs;
     }
 }
diff --git a/core/java/com/android/internal/os/KernelUidCpuFreqTimeReader.java b/core/java/com/android/internal/os/KernelUidCpuFreqTimeReader.java
index ff521c2..19e2b86 100644
--- a/core/java/com/android/internal/os/KernelUidCpuFreqTimeReader.java
+++ b/core/java/com/android/internal/os/KernelUidCpuFreqTimeReader.java
@@ -17,8 +17,10 @@
 package com.android.internal.os;
 
 import android.annotation.Nullable;
+import android.os.SystemClock;
 import android.util.Slog;
 import android.util.SparseArray;
+import android.util.TimeUtils;
 
 import com.android.internal.annotations.VisibleForTesting;
 
@@ -40,6 +42,7 @@
  * delta.
  */
 public class KernelUidCpuFreqTimeReader {
+    private static final boolean DEBUG = false;
     private static final String TAG = "KernelUidCpuFreqTimeReader";
     private static final String UID_TIMES_PROC_FILE = "/proc/uid_time_in_state";
 
@@ -50,6 +53,8 @@
 
     private long[] mCpuFreqs;
     private int mCpuFreqsCount;
+    private long mLastTimeReadMs;
+    private long mNowTimeMs;
 
     private SparseArray<long[]> mLastUidCpuFreqTimeMs = new SparseArray<>();
 
@@ -64,7 +69,9 @@
             return;
         }
         try (BufferedReader reader = new BufferedReader(new FileReader(UID_TIMES_PROC_FILE))) {
+            mNowTimeMs = SystemClock.elapsedRealtime();
             readDelta(reader, callback);
+            mLastTimeReadMs = mNowTimeMs;
             mProcFileAvailable = true;
         } catch (IOException e) {
             mReadErrorCounter++;
@@ -76,6 +83,17 @@
         mLastUidCpuFreqTimeMs.delete(uid);
     }
 
+    public void removeUidsInRange(int startUid, int endUid) {
+        if (endUid < startUid) {
+            return;
+        }
+        mLastUidCpuFreqTimeMs.put(startUid, null);
+        mLastUidCpuFreqTimeMs.put(endUid, null);
+        final int firstIndex = mLastUidCpuFreqTimeMs.indexOfKey(startUid);
+        final int lastIndex = mLastUidCpuFreqTimeMs.indexOfKey(endUid);
+        mLastUidCpuFreqTimeMs.removeAtRange(firstIndex, lastIndex - firstIndex + 1);
+    }
+
     @VisibleForTesting
     public void readDelta(BufferedReader reader, @Nullable Callback callback) throws IOException {
         String line = reader.readLine();
@@ -104,14 +122,37 @@
             return;
         }
         final long[] deltaUidTimeMs = new long[size];
+        final long[] curUidTimeMs = new long[size];
+        boolean notify = false;
         for (int i = 0; i < size; ++i) {
             // Times read will be in units of 10ms
             final long totalTimeMs = Long.parseLong(timesStr[i], 10) * 10;
             deltaUidTimeMs[i] = totalTimeMs - uidTimeMs[i];
-            uidTimeMs[i] = totalTimeMs;
+            // If there is malformed data for any uid, then we just log about it and ignore
+            // the data for that uid.
+            if (deltaUidTimeMs[i] < 0 || totalTimeMs < 0) {
+                if (DEBUG) {
+                    final StringBuilder sb = new StringBuilder("Malformed cpu freq data for UID=")
+                            .append(uid).append("\n");
+                    sb.append("data=").append("(").append(uidTimeMs[i]).append(",")
+                            .append(totalTimeMs).append(")").append("\n");
+                    sb.append("times=").append("(");
+                    TimeUtils.formatDuration(mLastTimeReadMs, sb);
+                    sb.append(",");
+                    TimeUtils.formatDuration(mNowTimeMs, sb);
+                    sb.append(")");
+                    Slog.e(TAG, sb.toString());
+                }
+                return;
+            }
+            curUidTimeMs[i] = totalTimeMs;
+            notify = notify || (deltaUidTimeMs[i] > 0);
         }
-        if (callback != null) {
-            callback.onUidCpuFreqTime(uid, deltaUidTimeMs);
+        if (notify) {
+            System.arraycopy(curUidTimeMs, 0, uidTimeMs, 0, size);
+            if (callback != null) {
+                callback.onUidCpuFreqTime(uid, deltaUidTimeMs);
+            }
         }
     }
 
diff --git a/core/java/com/android/internal/os/KernelUidCpuTimeReader.java b/core/java/com/android/internal/os/KernelUidCpuTimeReader.java
index 181e1ac..37d9d1d 100644
--- a/core/java/com/android/internal/os/KernelUidCpuTimeReader.java
+++ b/core/java/com/android/internal/os/KernelUidCpuTimeReader.java
@@ -130,17 +130,42 @@
      * @param uid The UID to remove.
      */
     public void removeUid(int uid) {
-        int index = mLastUserTimeUs.indexOfKey(uid);
+        final int index = mLastSystemTimeUs.indexOfKey(uid);
         if (index >= 0) {
-            mLastUserTimeUs.removeAt(index);
             mLastSystemTimeUs.removeAt(index);
+            mLastUserTimeUs.removeAt(index);
         }
+        removeUidsFromKernelModule(uid, uid);
+    }
 
+    /**
+     * Removes UIDs in a given range from the kernel module and internal accounting data.
+     * @param startUid the first uid to remove
+     * @param endUid the last uid to remove
+     */
+    public void removeUidsInRange(int startUid, int endUid) {
+        if (endUid < startUid) {
+            return;
+        }
+        mLastSystemTimeUs.put(startUid, 0);
+        mLastUserTimeUs.put(startUid, 0);
+        mLastSystemTimeUs.put(endUid, 0);
+        mLastUserTimeUs.put(endUid, 0);
+        final int startIndex = mLastSystemTimeUs.indexOfKey(startUid);
+        final int endIndex = mLastSystemTimeUs.indexOfKey(endUid);
+        mLastSystemTimeUs.removeAtRange(startIndex, endIndex - startIndex + 1);
+        mLastUserTimeUs.removeAtRange(startIndex, endIndex - startIndex + 1);
+        removeUidsFromKernelModule(startUid, endUid);
+    }
+
+    private void removeUidsFromKernelModule(int startUid, int endUid) {
+        Slog.d(TAG, "Removing uids " + startUid + "-" + endUid);
         try (FileWriter writer = new FileWriter(sRemoveUidProcFile)) {
-            writer.write(Integer.toString(uid) + "-" + Integer.toString(uid));
+            writer.write(startUid + "-" + endUid);
             writer.flush();
         } catch (IOException e) {
-            Slog.e(TAG, "failed to remove uid from uid_cputime module", e);
+            Slog.e(TAG, "failed to remove uids " + startUid + " - " + endUid
+                    + " from uid_cputime module", e);
         }
     }
 }
diff --git a/core/java/com/android/internal/os/PathClassLoaderFactory.java b/core/java/com/android/internal/os/PathClassLoaderFactory.java
deleted file mode 100644
index 06a93b2..0000000
--- a/core/java/com/android/internal/os/PathClassLoaderFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.os;
-
-import android.os.Trace;
-
-import dalvik.system.PathClassLoader;
-
-/**
- * Creates path class loaders.
- *
- * @hide
- */
-public class PathClassLoaderFactory {
-    // Unconstructable
-    private PathClassLoaderFactory() {}
-
-    /**
-     * Create a PathClassLoader and initialize a linker-namespace for it.
-     *
-     * @hide
-     */
-    public static PathClassLoader createClassLoader(String dexPath,
-                                                    String librarySearchPath,
-                                                    String libraryPermittedPath,
-                                                    ClassLoader parent,
-                                                    int targetSdkVersion,
-                                                    boolean isNamespaceShared) {
-        PathClassLoader pathClassloader = new PathClassLoader(dexPath, librarySearchPath, parent);
-
-        Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "createClassloaderNamespace");
-        String errorMessage = createClassloaderNamespace(pathClassloader,
-                                                         targetSdkVersion,
-                                                         librarySearchPath,
-                                                         libraryPermittedPath,
-                                                         isNamespaceShared);
-        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
-
-        if (errorMessage != null) {
-            throw new UnsatisfiedLinkError("Unable to create namespace for the classloader " +
-                                           pathClassloader + ": " + errorMessage);
-        }
-
-        return pathClassloader;
-    }
-
-    private static native String createClassloaderNamespace(ClassLoader classLoader,
-                                                            int targetSdkVersion,
-                                                            String librarySearchPath,
-                                                            String libraryPermittedPath,
-                                                            boolean isNamespaceShared);
-}
diff --git a/core/java/com/android/internal/os/PowerProfile.java b/core/java/com/android/internal/os/PowerProfile.java
index 51cf2ea..872b465 100644
--- a/core/java/com/android/internal/os/PowerProfile.java
+++ b/core/java/com/android/internal/os/PowerProfile.java
@@ -205,13 +205,17 @@
     private static final String TAG_ARRAYITEM = "value";
     private static final String ATTR_NAME = "name";
 
+    private static final Object sLock = new Object();
+
     public PowerProfile(Context context) {
         // Read the XML file for the given profile (normally only one per
         // device)
-        if (sPowerMap.size() == 0) {
-            readPowerValuesFromXml(context);
+        synchronized (sLock) {
+            if (sPowerMap.size() == 0) {
+                readPowerValuesFromXml(context);
+            }
+            initCpuClusters();
         }
-        initCpuClusters();
     }
 
     private void readPowerValuesFromXml(Context context) {
diff --git a/core/java/com/android/internal/os/RpmStats.java b/core/java/com/android/internal/os/RpmStats.java
new file mode 100644
index 0000000..befc76e
--- /dev/null
+++ b/core/java/com/android/internal/os/RpmStats.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 com.android.internal.os;
+
+import android.util.ArrayMap;
+
+import java.util.Map;
+
+/**
+ * Container for Resource Power Manager states and their data.
+ * Values can be populated by the BatteryStatsService.fillLowPowerStats jni function.
+ */
+public final class RpmStats {
+    public Map<String, PowerStatePlatformSleepState> mPlatformLowPowerStats = new ArrayMap<>();
+    public Map<String, PowerStateSubsystem> mSubsystemLowPowerStats = new ArrayMap<>();
+
+    /**
+     * Finds the PowerStatePlatformSleepState with the given name (creating it if it doesn't exist),
+     * updates its timeMs and count, and returns it.
+     */
+    @SuppressWarnings("unused")
+    public PowerStatePlatformSleepState getAndUpdatePlatformState(
+            String name, long timeMs, int count) {
+
+        PowerStatePlatformSleepState e = mPlatformLowPowerStats.get(name);
+        if (e == null) {
+            e = new PowerStatePlatformSleepState();
+            mPlatformLowPowerStats.put(name, e);
+        }
+        e.mTimeMs = timeMs;
+        e.mCount = count;
+        return e;
+    }
+
+    /**
+     * Returns the PowerStateSubsystem with the given name (creating it if it doesn't exist).
+     */
+    public PowerStateSubsystem getSubsystem(String name) {
+        PowerStateSubsystem e = mSubsystemLowPowerStats.get(name);
+        if (e == null) {
+            e = new PowerStateSubsystem();
+            mSubsystemLowPowerStats.put(name, e);
+        }
+        return e;
+    }
+
+    /** Represents a subsystem state or a platform voter. */
+    public static class PowerStateElement {
+        public long mTimeMs; // totalTimeInMsecVotedForSinceBoot
+        public int mCount; // totalNumberOfTimesVotedSinceBoot
+
+        private PowerStateElement(long timeMs, int count) {
+            this.mTimeMs = timeMs;
+            this.mCount = count;
+        }
+    }
+
+    /** Represents a PowerStatePlatformSleepState, per hardware/interfaces/power/1.0/types.hal */
+    public static class PowerStatePlatformSleepState {
+        public long mTimeMs; // residencyInMsecSinceBoot
+        public int mCount; // totalTransitions
+        public Map<String, PowerStateElement> mVoters = new ArrayMap<>(); // voters for this platform-level sleep state
+
+        /**
+         * Updates (creating if necessary) the voter with the given name, with the given timeMs and
+         * count.
+         */
+        @SuppressWarnings("unused")
+        public void putVoter(String name, long timeMs, int count) {
+            PowerStateElement e = mVoters.get(name);
+            if (e == null) {
+                mVoters.put(name, new PowerStateElement(timeMs, count));
+            } else {
+                e.mTimeMs = timeMs;
+                e.mCount = count;
+            }
+        }
+    }
+
+    /** Represents a PowerStateSubsystem, per hardware/interfaces/power/1.1/types.hal */
+    public static class PowerStateSubsystem {
+        public Map<String, PowerStateElement> mStates = new ArrayMap<>(); // sleep states supported by this susbsystem
+
+        /**
+         * Updates (creating if necessary) the subsystem state with the given name, with the given
+         * timeMs and count.
+         */
+        @SuppressWarnings("unused")
+        public void putState(String name, long timeMs, int count) {
+            PowerStateElement e = mStates.get(name);
+            if (e == null) {
+                mStates.put(name, new PowerStateElement(timeMs, count));
+            } else {
+                e.mTimeMs = timeMs;
+                e.mCount = count;
+            }
+        }
+    }
+}
diff --git a/core/java/com/android/internal/os/RuntimeInit.java b/core/java/com/android/internal/os/RuntimeInit.java
index f4be128..66475e4 100644
--- a/core/java/com/android/internal/os/RuntimeInit.java
+++ b/core/java/com/android/internal/os/RuntimeInit.java
@@ -31,6 +31,7 @@
 import com.android.internal.logging.AndroidConfig;
 import com.android.server.NetworkManagementSocketTagger;
 import dalvik.system.VMRuntime;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.TimeZone;
@@ -228,8 +229,8 @@
      * @param argv Argument vector for main()
      * @param classLoader the classLoader to load {@className} with
      */
-    private static void invokeStaticMain(String className, String[] argv, ClassLoader classLoader)
-            throws Zygote.MethodAndArgsCaller {
+    private static Runnable findStaticMain(String className, String[] argv,
+            ClassLoader classLoader) {
         Class<?> cl;
 
         try {
@@ -263,7 +264,7 @@
          * clears up all the stack frames that were required in setting
          * up the process.
          */
-        throw new Zygote.MethodAndArgsCaller(m, argv);
+        return new MethodAndArgsCaller(m, argv);
     }
 
     public static final void main(String[] argv) {
@@ -286,8 +287,8 @@
         if (DEBUG) Slog.d(TAG, "Leaving RuntimeInit!");
     }
 
-    protected static void applicationInit(int targetSdkVersion, String[] argv, ClassLoader classLoader)
-            throws Zygote.MethodAndArgsCaller {
+    protected static Runnable applicationInit(int targetSdkVersion, String[] argv,
+            ClassLoader classLoader) {
         // If the application calls System.exit(), terminate the process
         // immediately without running any shutdown hooks.  It is not possible to
         // shutdown an Android application gracefully.  Among other things, the
@@ -300,20 +301,13 @@
         VMRuntime.getRuntime().setTargetHeapUtilization(0.75f);
         VMRuntime.getRuntime().setTargetSdkVersion(targetSdkVersion);
 
-        final Arguments args;
-        try {
-            args = new Arguments(argv);
-        } catch (IllegalArgumentException ex) {
-            Slog.e(TAG, ex.getMessage());
-            // let the process exit
-            return;
-        }
+        final Arguments args = new Arguments(argv);
 
         // The end of of the RuntimeInit event (see #zygoteInit).
         Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
 
         // Remaining arguments are passed to the start class's static main
-        invokeStaticMain(args.startClass, args.startArgs, classLoader);
+        return findStaticMain(args.startClass, args.startArgs, classLoader);
     }
 
     /**
@@ -422,4 +416,37 @@
             System.arraycopy(args, curArg, startArgs, 0, startArgs.length);
         }
     }
+
+    /**
+     * Helper class which holds a method and arguments and can call them. This is used as part of
+     * a trampoline to get rid of the initial process setup stack frames.
+     */
+    static class MethodAndArgsCaller implements Runnable {
+        /** method to call */
+        private final Method mMethod;
+
+        /** argument array */
+        private final String[] mArgs;
+
+        public MethodAndArgsCaller(Method method, String[] args) {
+            mMethod = method;
+            mArgs = args;
+        }
+
+        public void run() {
+            try {
+                mMethod.invoke(null, new Object[] { mArgs });
+            } catch (IllegalAccessException ex) {
+                throw new RuntimeException(ex);
+            } catch (InvocationTargetException ex) {
+                Throwable cause = ex.getCause();
+                if (cause instanceof RuntimeException) {
+                    throw (RuntimeException) cause;
+                } else if (cause instanceof Error) {
+                    throw (Error) cause;
+                }
+                throw new RuntimeException(ex);
+            }
+        }
+    }
 }
diff --git a/core/java/com/android/internal/os/SamplingProfilerIntegration.java b/core/java/com/android/internal/os/SamplingProfilerIntegration.java
deleted file mode 100644
index 6429aa4..0000000
--- a/core/java/com/android/internal/os/SamplingProfilerIntegration.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS 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.content.pm.PackageInfo;
-import android.os.Build;
-import android.os.SystemProperties;
-import android.util.Log;
-import dalvik.system.profiler.BinaryHprofWriter;
-import dalvik.system.profiler.SamplingProfiler;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.util.Date;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.atomic.AtomicBoolean;
-import libcore.io.IoUtils;
-
-/**
- * Integrates the framework with Dalvik's sampling profiler.
- */
-public class SamplingProfilerIntegration {
-
-    private static final String TAG = "SamplingProfilerIntegration";
-
-    public static final String SNAPSHOT_DIR = "/data/snapshots";
-
-    private static final boolean enabled;
-    private static final Executor snapshotWriter;
-    private static final int samplingProfilerMilliseconds;
-    private static final int samplingProfilerDepth;
-
-    /** Whether or not a snapshot is being persisted. */
-    private static final AtomicBoolean pending = new AtomicBoolean(false);
-
-    static {
-        samplingProfilerMilliseconds = SystemProperties.getInt("persist.sys.profiler_ms", 0);
-        samplingProfilerDepth = SystemProperties.getInt("persist.sys.profiler_depth", 4);
-        if (samplingProfilerMilliseconds > 0) {
-            File dir = new File(SNAPSHOT_DIR);
-            dir.mkdirs();
-            // the directory needs to be writable to anybody to allow file writing
-            dir.setWritable(true, false);
-            // the directory needs to be executable to anybody to allow file creation
-            dir.setExecutable(true, false);
-            if (dir.isDirectory()) {
-                snapshotWriter = Executors.newSingleThreadExecutor(new ThreadFactory() {
-                        public Thread newThread(Runnable r) {
-                            return new Thread(r, TAG);
-                        }
-                    });
-                enabled = true;
-                Log.i(TAG, "Profiling enabled. Sampling interval ms: "
-                      + samplingProfilerMilliseconds);
-            } else {
-                snapshotWriter = null;
-                enabled = true;
-                Log.w(TAG, "Profiling setup failed. Could not create " + SNAPSHOT_DIR);
-            }
-        } else {
-            snapshotWriter = null;
-            enabled = false;
-            Log.i(TAG, "Profiling disabled.");
-        }
-    }
-
-    private static SamplingProfiler samplingProfiler;
-    private static long startMillis;
-
-    /**
-     * Is profiling enabled?
-     */
-    public static boolean isEnabled() {
-        return enabled;
-    }
-
-    /**
-     * Starts the profiler if profiling is enabled.
-     */
-    public static void start() {
-        if (!enabled) {
-            return;
-        }
-        if (samplingProfiler != null) {
-            Log.e(TAG, "SamplingProfilerIntegration already started at " + new Date(startMillis));
-            return;
-        }
-
-        ThreadGroup group = Thread.currentThread().getThreadGroup();
-        SamplingProfiler.ThreadSet threadSet = SamplingProfiler.newThreadGroupThreadSet(group);
-        samplingProfiler = new SamplingProfiler(samplingProfilerDepth, threadSet);
-        samplingProfiler.start(samplingProfilerMilliseconds);
-        startMillis = System.currentTimeMillis();
-    }
-
-    /**
-     * Writes a snapshot if profiling is enabled.
-     */
-    public static void writeSnapshot(final String processName, final PackageInfo packageInfo) {
-        if (!enabled) {
-            return;
-        }
-        if (samplingProfiler == null) {
-            Log.e(TAG, "SamplingProfilerIntegration is not started");
-            return;
-        }
-
-        /*
-         * If we're already writing a snapshot, don't bother enqueueing another
-         * request right now. This will reduce the number of individual
-         * snapshots and in turn the total amount of memory consumed (one big
-         * snapshot is smaller than N subset snapshots).
-         */
-        if (pending.compareAndSet(false, true)) {
-            snapshotWriter.execute(new Runnable() {
-                public void run() {
-                    try {
-                        writeSnapshotFile(processName, packageInfo);
-                    } finally {
-                        pending.set(false);
-                    }
-                }
-            });
-        }
-    }
-
-    /**
-     * Writes the zygote's snapshot to internal storage if profiling is enabled.
-     */
-    public static void writeZygoteSnapshot() {
-        if (!enabled) {
-            return;
-        }
-        writeSnapshotFile("zygote", null);
-        samplingProfiler.shutdown();
-        samplingProfiler = null;
-        startMillis = 0;
-    }
-
-    /**
-     * pass in PackageInfo to retrieve various values for snapshot header
-     */
-    private static void writeSnapshotFile(String processName, PackageInfo packageInfo) {
-        if (!enabled) {
-            return;
-        }
-        samplingProfiler.stop();
-
-        /*
-         * We use the global start time combined with the process name
-         * as a unique ID. We can't use a counter because processes
-         * restart. This could result in some overlap if we capture
-         * two snapshots in rapid succession.
-         */
-        String name = processName.replaceAll(":", ".");
-        String path = SNAPSHOT_DIR + "/" + name + "-" + startMillis + ".snapshot";
-        long start = System.currentTimeMillis();
-        OutputStream outputStream = null;
-        try {
-            outputStream = new BufferedOutputStream(new FileOutputStream(path));
-            PrintStream out = new PrintStream(outputStream);
-            generateSnapshotHeader(name, packageInfo, out);
-            if (out.checkError()) {
-                throw new IOException();
-            }
-            BinaryHprofWriter.write(samplingProfiler.getHprofData(), outputStream);
-        } catch (IOException e) {
-            Log.e(TAG, "Error writing snapshot to " + path, e);
-            return;
-        } finally {
-            IoUtils.closeQuietly(outputStream);
-        }
-        // set file readable to the world so that SamplingProfilerService
-        // can put it to dropbox
-        new File(path).setReadable(true, false);
-
-        long elapsed = System.currentTimeMillis() - start;
-        Log.i(TAG, "Wrote snapshot " + path + " in " + elapsed + "ms.");
-        samplingProfiler.start(samplingProfilerMilliseconds);
-    }
-
-    /**
-     * generate header for snapshots, with the following format
-     * (like an HTTP header but without the \r):
-     *
-     * Version: <version number of profiler>\n
-     * Process: <process name>\n
-     * Package: <package name, if exists>\n
-     * Package-Version: <version number of the package, if exists>\n
-     * Build: <fingerprint>\n
-     * \n
-     * <the actual snapshot content begins here...>
-     */
-    private static void generateSnapshotHeader(String processName, PackageInfo packageInfo,
-            PrintStream out) {
-        // profiler version
-        out.println("Version: 3");
-        out.println("Process: " + processName);
-        if (packageInfo != null) {
-            out.println("Package: " + packageInfo.packageName);
-            out.println("Package-Version: " + packageInfo.versionCode);
-        }
-        out.println("Build: " + Build.FINGERPRINT);
-        // single blank line means the end of snapshot header.
-        out.println();
-    }
-}
diff --git a/core/java/com/android/internal/os/WebViewZygoteInit.java b/core/java/com/android/internal/os/WebViewZygoteInit.java
index 58e4a3e..cadb66a 100644
--- a/core/java/com/android/internal/os/WebViewZygoteInit.java
+++ b/core/java/com/android/internal/os/WebViewZygoteInit.java
@@ -29,7 +29,7 @@
 import java.io.DataOutputStream;
 import java.io.File;
 import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 
 /**
  * Startup class for the WebView zygote process.
@@ -69,8 +69,7 @@
         }
 
         @Override
-        protected boolean handlePreloadPackage(String packagePath, String libsPath,
-                                               String cacheKey) {
+        protected void handlePreloadPackage(String packagePath, String libsPath, String cacheKey) {
             Log.i(TAG, "Beginning package preload");
             // Ask ApplicationLoaders to create and cache a classloader for the WebView APK so that
             // our children will reuse the same classloader instead of creating their own.
@@ -92,13 +91,18 @@
             try {
                 Class<WebViewFactoryProvider> providerClass =
                         WebViewFactory.getWebViewProviderClass(loader);
-                Object result = providerClass.getMethod("preloadInZygote").invoke(null);
-                preloadSucceeded = ((Boolean) result).booleanValue();
-                if (!preloadSucceeded) {
-                    Log.e(TAG, "preloadInZygote returned false");
+                Method preloadInZygote = providerClass.getMethod("preloadInZygote");
+                preloadInZygote.setAccessible(true);
+                if (preloadInZygote.getReturnType() != Boolean.TYPE) {
+                    Log.e(TAG, "Unexpected return type: preloadInZygote must return boolean");
+                } else {
+                    preloadSucceeded = (boolean) providerClass.getMethod("preloadInZygote")
+                            .invoke(null);
+                    if (!preloadSucceeded) {
+                        Log.e(TAG, "preloadInZygote returned false");
+                    }
                 }
-            } catch (ClassNotFoundException | NoSuchMethodException | SecurityException |
-                     IllegalAccessException | InvocationTargetException e) {
+            } catch (ReflectiveOperationException e) {
                 Log.e(TAG, "Exception while preloading package", e);
             }
 
@@ -106,12 +110,10 @@
                 DataOutputStream socketOut = getSocketOutputStream();
                 socketOut.writeInt(preloadSucceeded ? 1 : 0);
             } catch (IOException ioe) {
-                Log.e(TAG, "Error writing to command socket", ioe);
-                return true;
+                throw new IllegalStateException("Error writing to command socket", ioe);
             }
 
             Log.i(TAG, "Package preload done");
-            return false;
         }
     }
 
@@ -125,16 +127,23 @@
             throw new RuntimeException("Failed to setpgid(0,0)", ex);
         }
 
+        final Runnable caller;
         try {
             sServer.registerServerSocket("webview_zygote");
-            sServer.runSelectLoop(TextUtils.join(",", Build.SUPPORTED_ABIS));
-            sServer.closeServerSocket();
-        } catch (Zygote.MethodAndArgsCaller caller) {
-            caller.run();
+            // The select loop returns early in the child process after a fork and
+            // loops forever in the zygote.
+            caller = sServer.runSelectLoop(TextUtils.join(",", Build.SUPPORTED_ABIS));
         } catch (RuntimeException e) {
             Log.e(TAG, "Fatal exception:", e);
+            throw e;
+        } finally {
+            sServer.closeServerSocket();
         }
 
-        System.exit(0);
+        // We're in the child process and have exited the select loop. Proceed to execute the
+        // command.
+        if (caller != null) {
+            caller.run();
+        }
     }
 }
diff --git a/core/java/com/android/internal/os/WrapperInit.java b/core/java/com/android/internal/os/WrapperInit.java
index b245678..4901080 100644
--- a/core/java/com/android/internal/os/WrapperInit.java
+++ b/core/java/com/android/internal/os/WrapperInit.java
@@ -23,9 +23,8 @@
 import android.system.OsConstants;
 import android.system.StructCapUserData;
 import android.system.StructCapUserHeader;
-import android.util.BootTimingsTraceLog;
+import android.util.TimingsTraceLog;
 import android.util.Slog;
-import com.android.internal.os.Zygote.MethodAndArgsCaller;
 import dalvik.system.VMRuntime;
 import java.io.DataOutputStream;
 import java.io.FileDescriptor;
@@ -61,37 +60,35 @@
      * @param args The command-line arguments.
      */
     public static void main(String[] args) {
-        try {
-            // Parse our mandatory arguments.
-            int fdNum = Integer.parseInt(args[0], 10);
-            int targetSdkVersion = Integer.parseInt(args[1], 10);
+        // Parse our mandatory arguments.
+        int fdNum = Integer.parseInt(args[0], 10);
+        int targetSdkVersion = Integer.parseInt(args[1], 10);
 
-            // Tell the Zygote what our actual PID is (since it only knows about the
-            // wrapper that it directly forked).
-            if (fdNum != 0) {
-                try {
-                    FileDescriptor fd = new FileDescriptor();
-                    fd.setInt$(fdNum);
-                    DataOutputStream os = new DataOutputStream(new FileOutputStream(fd));
-                    os.writeInt(Process.myPid());
-                    os.close();
-                    IoUtils.closeQuietly(fd);
-                } catch (IOException ex) {
-                    Slog.d(TAG, "Could not write pid of wrapped process to Zygote pipe.", ex);
-                }
+        // Tell the Zygote what our actual PID is (since it only knows about the
+        // wrapper that it directly forked).
+        if (fdNum != 0) {
+            try {
+                FileDescriptor fd = new FileDescriptor();
+                fd.setInt$(fdNum);
+                DataOutputStream os = new DataOutputStream(new FileOutputStream(fd));
+                os.writeInt(Process.myPid());
+                os.close();
+                IoUtils.closeQuietly(fd);
+            } catch (IOException ex) {
+                Slog.d(TAG, "Could not write pid of wrapped process to Zygote pipe.", ex);
             }
-
-            // Mimic system Zygote preloading.
-            ZygoteInit.preload(new BootTimingsTraceLog("WrapperInitTiming",
-                    Trace.TRACE_TAG_DALVIK));
-
-            // Launch the application.
-            String[] runtimeArgs = new String[args.length - 2];
-            System.arraycopy(args, 2, runtimeArgs, 0, runtimeArgs.length);
-            WrapperInit.wrapperInit(targetSdkVersion, runtimeArgs);
-        } catch (Zygote.MethodAndArgsCaller caller) {
-            caller.run();
         }
+
+        // Mimic system Zygote preloading.
+        ZygoteInit.preload(new TimingsTraceLog("WrapperInitTiming",
+                Trace.TRACE_TAG_DALVIK));
+
+        // Launch the application.
+        String[] runtimeArgs = new String[args.length - 2];
+        System.arraycopy(args, 2, runtimeArgs, 0, runtimeArgs.length);
+        Runnable r = wrapperInit(targetSdkVersion, runtimeArgs);
+
+        r.run();
     }
 
     /**
@@ -142,8 +139,7 @@
      * @param targetSdkVersion target SDK version
      * @param argv arg strings
      */
-    private static void wrapperInit(int targetSdkVersion, String[] argv)
-            throws Zygote.MethodAndArgsCaller {
+    private static Runnable wrapperInit(int targetSdkVersion, String[] argv) {
         if (RuntimeInit.DEBUG) {
             Slog.d(RuntimeInit.TAG, "RuntimeInit: Starting application from wrapper");
         }
@@ -163,7 +159,9 @@
             argv = removedArgs;
         }
 
-        RuntimeInit.applicationInit(targetSdkVersion, argv, classLoader);
+        // Perform the same initialization that would happen after the Zygote forks.
+        Zygote.nativePreApplicationInit();
+        return RuntimeInit.applicationInit(targetSdkVersion, argv, classLoader);
     }
 
     /**
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index 5eca496..a9350db 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -121,6 +121,11 @@
           int[] fdsToIgnore, String instructionSet, String appDataDir);
 
     /**
+     * Called to do any initialization before starting an application.
+     */
+    native static void nativePreApplicationInit();
+
+    /**
      * Special method to start the system server process. In addition to the
      * common actions performed in forkAndSpecialize, the pid of the child
      * process is recorded such that the death of the child process will cause
@@ -216,39 +221,4 @@
             command.append(" '").append(arg.replace("'", "'\\''")).append("'");
         }
     }
-
-    /**
-     * Helper exception class which holds a method and arguments and
-     * can call them. This is used as part of a trampoline to get rid of
-     * the initial process setup stack frames.
-     */
-    public static class MethodAndArgsCaller extends Exception
-            implements Runnable {
-        /** method to call */
-        private final Method mMethod;
-
-        /** argument array */
-        private final String[] mArgs;
-
-        public MethodAndArgsCaller(Method method, String[] args) {
-            mMethod = method;
-            mArgs = args;
-        }
-
-        public void run() {
-            try {
-                mMethod.invoke(null, new Object[] { mArgs });
-            } catch (IllegalAccessException ex) {
-                throw new RuntimeException(ex);
-            } catch (InvocationTargetException ex) {
-                Throwable cause = ex.getCause();
-                if (cause instanceof RuntimeException) {
-                    throw (RuntimeException) cause;
-                } else if (cause instanceof Error) {
-                    throw (Error) cause;
-                }
-                throw new RuntimeException(ex);
-            }
-        }
-    }
 }
diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java
index f0c0b99..9fa3239 100644
--- a/core/java/com/android/internal/os/ZygoteConnection.java
+++ b/core/java/com/android/internal/os/ZygoteConnection.java
@@ -18,33 +18,35 @@
 
 import static android.system.OsConstants.F_SETFD;
 import static android.system.OsConstants.O_CLOEXEC;
+import static android.system.OsConstants.POLLIN;
 import static android.system.OsConstants.STDERR_FILENO;
 import static android.system.OsConstants.STDIN_FILENO;
 import static android.system.OsConstants.STDOUT_FILENO;
+import static com.android.internal.os.ZygoteConnectionConstants.CONNECTION_TIMEOUT_MILLIS;
+import static com.android.internal.os.ZygoteConnectionConstants.MAX_ZYGOTE_ARGC;
+import static com.android.internal.os.ZygoteConnectionConstants.WRAPPED_PID_TIMEOUT_MILLIS;
 
 import android.net.Credentials;
 import android.net.LocalSocket;
 import android.os.FactoryTest;
 import android.os.Process;
-import android.os.SELinux;
 import android.os.SystemProperties;
 import android.os.Trace;
 import android.system.ErrnoException;
 import android.system.Os;
+import android.system.StructPollfd;
 import android.util.Log;
 import dalvik.system.VMRuntime;
 import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
+import java.io.EOFException;
 import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.io.PrintStream;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
-import java.util.Arrays;
 import libcore.io.IoUtils;
 
 /**
@@ -57,18 +59,6 @@
     private static final int[][] intArray2d = new int[0][0];
 
     /**
-     * {@link android.net.LocalSocket#setSoTimeout} value for connections.
-     * Effectively, the amount of time a requestor has between the start of
-     * the request and the completed request. The select-loop mode Zygote
-     * doesn't have the logic to return to the select loop in the middle of
-     * a request, so we need to time out here to avoid being denial-of-serviced.
-     */
-    private static final int CONNECTION_TIMEOUT_MILLIS = 1000;
-
-    /** max number of arguments that a connection can specify */
-    private static final int MAX_ZYGOTE_ARGC = 1024;
-
-    /**
      * The command socket.
      *
      * mSocket is retained in the child process in "peer wait" mode, so
@@ -80,6 +70,7 @@
     private final BufferedReader mSocketReader;
     private final Credentials peer;
     private final String abiList;
+    private boolean isEof;
 
     /**
      * Constructs instance from connected socket.
@@ -106,6 +97,8 @@
             Log.e(TAG, "Cannot read peer credentials", ex);
             throw ex;
         }
+
+        isEof = false;
     }
 
     /**
@@ -118,21 +111,14 @@
     }
 
     /**
-     * Reads one start command from the command socket. If successful,
-     * a child is forked and a {@link Zygote.MethodAndArgsCaller}
-     * exception is thrown in that child while in the parent process,
-     * the method returns normally. On failure, the child is not
-     * spawned and messages are printed to the log and stderr. Returns
-     * a boolean status value indicating whether an end-of-file on the command
-     * socket has been encountered.
+     * Reads one start command from the command socket. If successful, a child is forked and a
+     * {@code Runnable} that calls the childs main method (or equivalent) is returned in the child
+     * process. {@code null} is always returned in the parent process (the zygote).
      *
-     * @return false if command socket should continue to be read from, or
-     * true if an end-of-file has been encountered.
-     * @throws Zygote.MethodAndArgsCaller trampoline to invoke main()
-     * method in child process
+     * If the client closes the socket, an {@code EOF} condition is set, which callers can test
+     * for by calling {@code ZygoteConnection.isClosedByPeer}.
      */
-    boolean runOnce(ZygoteServer zygoteServer) throws Zygote.MethodAndArgsCaller {
-
+    Runnable processOneCommand(ZygoteServer zygoteServer) {
         String args[];
         Arguments parsedArgs = null;
         FileDescriptor[] descriptors;
@@ -141,130 +127,120 @@
             args = readArgumentList();
             descriptors = mSocket.getAncillaryFileDescriptors();
         } catch (IOException ex) {
-            Log.w(TAG, "IOException on command socket " + ex.getMessage());
-            closeSocket();
-            return true;
+            throw new IllegalStateException("IOException on command socket", ex);
         }
 
+        // readArgumentList returns null only when it has reached EOF with no available
+        // data to read. This will only happen when the remote socket has disconnected.
         if (args == null) {
-            // EOF reached.
-            closeSocket();
-            return true;
-        }
-
-        /** the stderr of the most recent request, if avail */
-        PrintStream newStderr = null;
-
-        if (descriptors != null && descriptors.length >= 3) {
-            newStderr = new PrintStream(
-                    new FileOutputStream(descriptors[2]));
+            isEof = true;
+            return null;
         }
 
         int pid = -1;
         FileDescriptor childPipeFd = null;
         FileDescriptor serverPipeFd = null;
 
-        try {
-            parsedArgs = new Arguments(args);
+        parsedArgs = new Arguments(args);
 
-            if (parsedArgs.abiListQuery) {
-                return handleAbiListQuery();
-            }
+        if (parsedArgs.abiListQuery) {
+            handleAbiListQuery();
+            return null;
+        }
 
-            if (parsedArgs.preloadDefault) {
-                return handlePreload();
-            }
+        if (parsedArgs.preloadDefault) {
+            handlePreload();
+            return null;
+        }
 
-            if (parsedArgs.preloadPackage != null) {
-                return handlePreloadPackage(parsedArgs.preloadPackage,
-                        parsedArgs.preloadPackageLibs, parsedArgs.preloadPackageCacheKey);
-            }
+        if (parsedArgs.preloadPackage != null) {
+            handlePreloadPackage(parsedArgs.preloadPackage, parsedArgs.preloadPackageLibs,
+                    parsedArgs.preloadPackageCacheKey);
+            return null;
+        }
 
-            if (parsedArgs.permittedCapabilities != 0 || parsedArgs.effectiveCapabilities != 0) {
-                throw new ZygoteSecurityException("Client may not specify capabilities: " +
-                        "permitted=0x" + Long.toHexString(parsedArgs.permittedCapabilities) +
-                        ", effective=0x" + Long.toHexString(parsedArgs.effectiveCapabilities));
-            }
+        if (parsedArgs.permittedCapabilities != 0 || parsedArgs.effectiveCapabilities != 0) {
+            throw new ZygoteSecurityException("Client may not specify capabilities: " +
+                    "permitted=0x" + Long.toHexString(parsedArgs.permittedCapabilities) +
+                    ", effective=0x" + Long.toHexString(parsedArgs.effectiveCapabilities));
+        }
 
-            applyUidSecurityPolicy(parsedArgs, peer);
-            applyInvokeWithSecurityPolicy(parsedArgs, peer);
+        applyUidSecurityPolicy(parsedArgs, peer);
+        applyInvokeWithSecurityPolicy(parsedArgs, peer);
 
-            applyDebuggerSystemProperty(parsedArgs);
-            applyInvokeWithSystemProperty(parsedArgs);
+        applyDebuggerSystemProperty(parsedArgs);
+        applyInvokeWithSystemProperty(parsedArgs);
 
-            int[][] rlimits = null;
+        int[][] rlimits = null;
 
-            if (parsedArgs.rlimits != null) {
-                rlimits = parsedArgs.rlimits.toArray(intArray2d);
-            }
+        if (parsedArgs.rlimits != null) {
+            rlimits = parsedArgs.rlimits.toArray(intArray2d);
+        }
 
-            int[] fdsToIgnore = null;
+        int[] fdsToIgnore = null;
 
-            if (parsedArgs.invokeWith != null) {
+        if (parsedArgs.invokeWith != null) {
+            try {
                 FileDescriptor[] pipeFds = Os.pipe2(O_CLOEXEC);
                 childPipeFd = pipeFds[1];
                 serverPipeFd = pipeFds[0];
                 Os.fcntlInt(childPipeFd, F_SETFD, 0);
-                fdsToIgnore = new int[] { childPipeFd.getInt$(), serverPipeFd.getInt$() };
+                fdsToIgnore = new int[]{childPipeFd.getInt$(), serverPipeFd.getInt$()};
+            } catch (ErrnoException errnoEx) {
+                throw new IllegalStateException("Unable to set up pipe for invoke-with", errnoEx);
             }
-
-            /**
-             * In order to avoid leaking descriptors to the Zygote child,
-             * the native code must close the two Zygote socket descriptors
-             * in the child process before it switches from Zygote-root to
-             * the UID and privileges of the application being launched.
-             *
-             * In order to avoid "bad file descriptor" errors when the
-             * two LocalSocket objects are closed, the Posix file
-             * descriptors are released via a dup2() call which closes
-             * the socket and substitutes an open descriptor to /dev/null.
-             */
-
-            int [] fdsToClose = { -1, -1 };
-
-            FileDescriptor fd = mSocket.getFileDescriptor();
-
-            if (fd != null) {
-                fdsToClose[0] = fd.getInt$();
-            }
-
-            fd = zygoteServer.getServerSocketFileDescriptor();
-
-            if (fd != null) {
-                fdsToClose[1] = fd.getInt$();
-            }
-
-            fd = null;
-
-            pid = Zygote.forkAndSpecialize(parsedArgs.uid, parsedArgs.gid, parsedArgs.gids,
-                    parsedArgs.debugFlags, rlimits, parsedArgs.mountExternal, parsedArgs.seInfo,
-                    parsedArgs.niceName, fdsToClose, fdsToIgnore, parsedArgs.instructionSet,
-                    parsedArgs.appDataDir);
-        } catch (ErrnoException ex) {
-            logAndPrintError(newStderr, "Exception creating pipe", ex);
-        } catch (IllegalArgumentException ex) {
-            logAndPrintError(newStderr, "Invalid zygote arguments", ex);
-        } catch (ZygoteSecurityException ex) {
-            logAndPrintError(newStderr,
-                    "Zygote security policy prevents request: ", ex);
         }
 
+        /**
+         * In order to avoid leaking descriptors to the Zygote child,
+         * the native code must close the two Zygote socket descriptors
+         * in the child process before it switches from Zygote-root to
+         * the UID and privileges of the application being launched.
+         *
+         * In order to avoid "bad file descriptor" errors when the
+         * two LocalSocket objects are closed, the Posix file
+         * descriptors are released via a dup2() call which closes
+         * the socket and substitutes an open descriptor to /dev/null.
+         */
+
+        int [] fdsToClose = { -1, -1 };
+
+        FileDescriptor fd = mSocket.getFileDescriptor();
+
+        if (fd != null) {
+            fdsToClose[0] = fd.getInt$();
+        }
+
+        fd = zygoteServer.getServerSocketFileDescriptor();
+
+        if (fd != null) {
+            fdsToClose[1] = fd.getInt$();
+        }
+
+        fd = null;
+
+        pid = Zygote.forkAndSpecialize(parsedArgs.uid, parsedArgs.gid, parsedArgs.gids,
+                parsedArgs.debugFlags, rlimits, parsedArgs.mountExternal, parsedArgs.seInfo,
+                parsedArgs.niceName, fdsToClose, fdsToIgnore, parsedArgs.instructionSet,
+                parsedArgs.appDataDir);
+
         try {
             if (pid == 0) {
                 // in child
+                zygoteServer.setForkChild();
+
                 zygoteServer.closeServerSocket();
                 IoUtils.closeQuietly(serverPipeFd);
                 serverPipeFd = null;
-                handleChildProc(parsedArgs, descriptors, childPipeFd, newStderr);
 
-                // should never get here, the child is expected to either
-                // throw Zygote.MethodAndArgsCaller or exec().
-                return true;
+                return handleChildProc(parsedArgs, descriptors, childPipeFd);
             } else {
-                // in parent...pid of < 0 means failure
+                // In the parent. A pid < 0 indicates a failure and will be handled in
+                // handleParentProc.
                 IoUtils.closeQuietly(childPipeFd);
                 childPipeFd = null;
-                return handleParentProc(pid, descriptors, serverPipeFd, parsedArgs);
+                handleParentProc(pid, descriptors, serverPipeFd);
+                return null;
             }
         } finally {
             IoUtils.closeQuietly(childPipeFd);
@@ -272,15 +248,13 @@
         }
     }
 
-    private boolean handleAbiListQuery() {
+    private void handleAbiListQuery() {
         try {
             final byte[] abiListBytes = abiList.getBytes(StandardCharsets.US_ASCII);
             mSocketOutStream.writeInt(abiListBytes.length);
             mSocketOutStream.write(abiListBytes);
-            return false;
         } catch (IOException ioe) {
-            Log.e(TAG, "Error writing to command socket", ioe);
-            return true;
+            throw new IllegalStateException("Error writing to command socket", ioe);
         }
     }
 
@@ -290,7 +264,7 @@
      * if no preload was initiated. The latter implies that the zygote is not configured to load
      * resources lazy or that the zygote has already handled a previous request to handlePreload.
      */
-    private boolean handlePreload() {
+    private void handlePreload() {
         try {
             if (isPreloadComplete()) {
                 mSocketOutStream.writeInt(1);
@@ -298,11 +272,8 @@
                 preload();
                 mSocketOutStream.writeInt(0);
             }
-
-            return false;
         } catch (IOException ioe) {
-            Log.e(TAG, "Error writing to command socket", ioe);
-            return true;
+            throw new IllegalStateException("Error writing to command socket", ioe);
         }
     }
 
@@ -318,7 +289,7 @@
         return mSocketOutStream;
     }
 
-    protected boolean handlePreloadPackage(String packagePath, String libsPath, String cacheKey) {
+    protected void handlePreloadPackage(String packagePath, String libsPath, String cacheKey) {
         throw new RuntimeException("Zyogte does not support package preloading");
     }
 
@@ -334,6 +305,10 @@
         }
     }
 
+    boolean isClosedByPeer() {
+        return isEof;
+    }
+
     /**
      * Handles argument parsing for args related to the zygote spawner.
      *
@@ -781,15 +756,9 @@
      * @param parsedArgs non-null; zygote args
      * @param descriptors null-ok; new file descriptors for stdio if available.
      * @param pipeFd null-ok; pipe for communication back to Zygote.
-     * @param newStderr null-ok; stream to use for stderr until stdio
-     * is reopened.
-     *
-     * @throws Zygote.MethodAndArgsCaller on success to
-     * trampoline to code that invokes static main.
      */
-    private void handleChildProc(Arguments parsedArgs,
-            FileDescriptor[] descriptors, FileDescriptor pipeFd, PrintStream newStderr)
-            throws Zygote.MethodAndArgsCaller {
+    private Runnable handleChildProc(Arguments parsedArgs, FileDescriptor[] descriptors,
+            FileDescriptor pipeFd) {
         /**
          * By the time we get here, the native code has closed the two actual Zygote
          * socket connections, and substituted /dev/null in their place.  The LocalSocket
@@ -806,7 +775,6 @@
                 for (FileDescriptor fd: descriptors) {
                     IoUtils.closeQuietly(fd);
                 }
-                newStderr = System.err;
             } catch (ErrnoException ex) {
                 Log.e(TAG, "Error reopening stdio", ex);
             }
@@ -823,9 +791,12 @@
                     parsedArgs.niceName, parsedArgs.targetSdkVersion,
                     VMRuntime.getCurrentInstructionSet(),
                     pipeFd, parsedArgs.remainingArgs);
+
+            // Should not get here.
+            throw new IllegalStateException("WrapperInit.execApplication unexpectedly returned");
         } else {
-            ZygoteInit.zygoteInit(parsedArgs.targetSdkVersion,
-                    parsedArgs.remainingArgs, null /* classLoader */);
+            return ZygoteInit.zygoteInit(parsedArgs.targetSdkVersion, parsedArgs.remainingArgs,
+                    null /* classLoader */);
         }
     }
 
@@ -837,13 +808,8 @@
      * @param descriptors null-ok; file descriptors for child's new stdio if
      * specified.
      * @param pipeFd null-ok; pipe for communication with child.
-     * @param parsedArgs non-null; zygote args
-     * @return true for "exit command loop" and false for "continue command
-     * loop"
      */
-    private boolean handleParentProc(int pid,
-            FileDescriptor[] descriptors, FileDescriptor pipeFd, Arguments parsedArgs) {
-
+    private void handleParentProc(int pid, FileDescriptor[] descriptors, FileDescriptor pipeFd) {
         if (pid > 0) {
             setChildPgid(pid);
         }
@@ -856,17 +822,60 @@
 
         boolean usingWrapper = false;
         if (pipeFd != null && pid > 0) {
-            DataInputStream is = new DataInputStream(new FileInputStream(pipeFd));
             int innerPid = -1;
             try {
-                innerPid = is.readInt();
-            } catch (IOException ex) {
-                Log.w(TAG, "Error reading pid from wrapped process, child may have died", ex);
-            } finally {
-                try {
-                    is.close();
-                } catch (IOException ex) {
+                // Do a busy loop here. We can't guarantee that a failure (and thus an exception
+                // bail) happens in a timely manner.
+                final int BYTES_REQUIRED = 4;  // Bytes in an int.
+
+                StructPollfd fds[] = new StructPollfd[] {
+                        new StructPollfd()
+                };
+
+                byte data[] = new byte[BYTES_REQUIRED];
+
+                int remainingSleepTime = WRAPPED_PID_TIMEOUT_MILLIS;
+                int dataIndex = 0;
+                long startTime = System.nanoTime();
+
+                while (dataIndex < data.length && remainingSleepTime > 0) {
+                    fds[0].fd = pipeFd;
+                    fds[0].events = (short) POLLIN;
+                    fds[0].revents = 0;
+                    fds[0].userData = null;
+
+                    int res = android.system.Os.poll(fds, remainingSleepTime);
+                    long endTime = System.nanoTime();
+                    int elapsedTimeMs = (int)((endTime - startTime) / 1000000l);
+                    remainingSleepTime = WRAPPED_PID_TIMEOUT_MILLIS - elapsedTimeMs;
+
+                    if (res > 0) {
+                        if ((fds[0].revents & POLLIN) != 0) {
+                            // Only read one byte, so as not to block.
+                            int readBytes = android.system.Os.read(pipeFd, data, dataIndex, 1);
+                            if (readBytes < 0) {
+                                throw new RuntimeException("Some error");
+                            }
+                            dataIndex += readBytes;
+                        } else {
+                            // Error case. revents should contain one of the error bits.
+                            break;
+                        }
+                    } else if (res == 0) {
+                        Log.w(TAG, "Timed out waiting for child.");
+                    }
                 }
+
+                if (dataIndex == data.length) {
+                    DataInputStream is = new DataInputStream(new ByteArrayInputStream(data));
+                    innerPid = is.readInt();
+                }
+
+                if (innerPid == -1) {
+                    Log.w(TAG, "Error reading pid from wrapped process, child may have died");
+                }
+            } catch (Exception ex) {
+                Log.w(TAG, "Error reading pid from wrapped process, child may have died", ex);
             }
 
             // Ensure that the pid reported by the wrapped process is either the
@@ -892,11 +901,8 @@
             mSocketOutStream.writeInt(pid);
             mSocketOutStream.writeBoolean(usingWrapper);
         } catch (IOException ex) {
-            Log.e(TAG, "Error writing to command socket", ex);
-            return true;
+            throw new IllegalStateException("Error writing to command socket", ex);
         }
-
-        return false;
     }
 
     private void setChildPgid(int pid) {
@@ -912,20 +918,4 @@
                 + "normal if peer is not in our session");
         }
     }
-
-    /**
-     * Logs an error message and prints it to the specified stream, if
-     * provided
-     *
-     * @param newStderr null-ok; a standard error stream
-     * @param message non-null; error message
-     * @param ex null-ok an exception
-     */
-    private static void logAndPrintError (PrintStream newStderr,
-            String message, Throwable ex) {
-        Log.e(TAG, message, ex);
-        if (newStderr != null) {
-            newStderr.println(message + (ex == null ? "" : ex));
-        }
-    }
 }
diff --git a/core/java/com/android/internal/os/ZygoteConnectionConstants.java b/core/java/com/android/internal/os/ZygoteConnectionConstants.java
new file mode 100644
index 0000000..506e39f
--- /dev/null
+++ b/core/java/com/android/internal/os/ZygoteConnectionConstants.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.os;
+
+/**
+ * Sharable zygote constants.
+ *
+ * @hide
+ */
+public class ZygoteConnectionConstants {
+    /**
+     * {@link android.net.LocalSocket#setSoTimeout} value for connections.
+     * Effectively, the amount of time a requestor has between the start of
+     * the request and the completed request. The select-loop mode Zygote
+     * doesn't have the logic to return to the select loop in the middle of
+     * a request, so we need to time out here to avoid being denial-of-serviced.
+     */
+    public static final int CONNECTION_TIMEOUT_MILLIS = 1000;
+
+    /** max number of arguments that a connection can specify */
+    public static final int MAX_ZYGOTE_ARGC = 1024;
+
+    /**
+     * Wait time for a wrapped app to report back its pid.
+     *
+     * We'll wait up to thirty seconds. This should give enough time for the fork
+     * to go through, but not to trigger the watchdog in the system server (by default
+     * sixty seconds).
+     *
+     * WARNING: This may trigger the watchdog in debug mode. However, to support
+     *          wrapping on lower-end devices we do not have much choice.
+     */
+    public static final int WRAPPED_PID_TIMEOUT_MILLIS = 30000;
+}
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 21cf95f..25e90ad 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -24,7 +24,6 @@
 import android.icu.impl.CacheValue;
 import android.icu.text.DecimalFormatSymbols;
 import android.icu.util.ULocale;
-import android.net.LocalServerSocket;
 import android.opengl.EGL14;
 import android.os.Build;
 import android.os.IInstalld;
@@ -44,7 +43,7 @@
 import android.system.Os;
 import android.system.OsConstants;
 import android.text.Hyphenator;
-import android.util.BootTimingsTraceLog;
+import android.util.TimingsTraceLog;
 import android.util.EventLog;
 import android.util.Log;
 import android.util.Slog;
@@ -55,7 +54,6 @@
 
 import com.android.internal.util.Preconditions;
 import dalvik.system.DexFile;
-import dalvik.system.PathClassLoader;
 import dalvik.system.VMRuntime;
 import dalvik.system.ZygoteHooks;
 
@@ -121,7 +119,7 @@
 
     private static boolean sPreloadComplete;
 
-    static void preload(BootTimingsTraceLog bootTimingsTraceLog) {
+    static void preload(TimingsTraceLog bootTimingsTraceLog) {
         Log.d(TAG, "begin preload");
         bootTimingsTraceLog.traceBegin("BeginIcuCachePinning");
         beginIcuCachePinning();
@@ -154,7 +152,7 @@
         Preconditions.checkState(!sPreloadComplete);
         Log.i(TAG, "Lazily preloading resources.");
 
-        preload(new BootTimingsTraceLog("ZygoteInitTiming_lazy", Trace.TRACE_TAG_DALVIK));
+        preload(new TimingsTraceLog("ZygoteInitTiming_lazy", Trace.TRACE_TAG_DALVIK));
     }
 
     private static void beginIcuCachePinning() {
@@ -451,10 +449,7 @@
     /**
      * Finish remaining work for the newly forked system server process.
      */
-    private static void handleSystemServerProcess(
-            ZygoteConnection.Arguments parsedArgs)
-            throws Zygote.MethodAndArgsCaller {
-
+    private static Runnable handleSystemServerProcess(ZygoteConnection.Arguments parsedArgs) {
         // set umask to 0077 so new files and directories will default to owner-only permissions.
         Os.umask(S_IRWXG | S_IRWXO);
 
@@ -500,6 +495,8 @@
             WrapperInit.execApplication(parsedArgs.invokeWith,
                     parsedArgs.niceName, parsedArgs.targetSdkVersion,
                     VMRuntime.getCurrentInstructionSet(), null, args);
+
+            throw new IllegalStateException("Unexpected return from WrapperInit.execApplication");
         } else {
             ClassLoader cl = null;
             if (systemServerClasspath != null) {
@@ -511,7 +508,7 @@
             /*
              * Pass the remaining arguments to SystemServer.
              */
-            ZygoteInit.zygoteInit(parsedArgs.targetSdkVersion, parsedArgs.remainingArgs, cl);
+            return ZygoteInit.zygoteInit(parsedArgs.targetSdkVersion, parsedArgs.remainingArgs, cl);
         }
 
         /* should never reach here */
@@ -522,15 +519,12 @@
      * namespace, i.e., this classloader can access platform-private native libraries. The
      * classloader will use java.library.path as the native library path.
      */
-    static PathClassLoader createPathClassLoader(String classPath, int targetSdkVersion) {
-      String libraryPath = System.getProperty("java.library.path");
+    static ClassLoader createPathClassLoader(String classPath, int targetSdkVersion) {
+        String libraryPath = System.getProperty("java.library.path");
 
-      return PathClassLoaderFactory.createClassLoader(classPath,
-                                                      libraryPath,
-                                                      libraryPath,
-                                                      ClassLoader.getSystemClassLoader(),
-                                                      targetSdkVersion,
-                                                      true /* isNamespaceShared */);
+        return ClassLoaderFactory.createClassLoader(classPath, libraryPath, libraryPath,
+                ClassLoader.getSystemClassLoader(), targetSdkVersion, true /* isNamespaceShared */,
+                null /* classLoaderName */);
     }
 
     /**
@@ -543,17 +537,18 @@
                 .asInterface(ServiceManager.getService("installd"));
         final String instructionSet = VMRuntime.getRuntime().vmInstructionSet();
 
-        String sharedLibraries = "";
+        String classPathForElement = "";
         for (String classPathElement : classPathElements) {
             // System server is fully AOTed and never profiled
             // for profile guided compilation.
-            // TODO: Make this configurable between INTERPRET_ONLY, SPEED, SPACE and EVERYTHING?
+            String systemServerFilter = SystemProperties.get(
+                    "dalvik.vm.systemservercompilerfilter", "speed");
 
             int dexoptNeeded;
             try {
                 dexoptNeeded = DexFile.getDexOptNeeded(
-                    classPathElement, instructionSet, "speed",
-                    false /* newProfile */);
+                    classPathElement, instructionSet, systemServerFilter,
+                    false /* newProfile */, false /* downgrade */);
             } catch (FileNotFoundException ignored) {
                 // Do not add to the classpath.
                 Log.w(TAG, "Missing classpath element for system server: " + classPathElement);
@@ -571,13 +566,15 @@
                 final String packageName = "*";
                 final String outputPath = null;
                 final int dexFlags = 0;
-                final String compilerFilter = "speed";
+                final String compilerFilter = systemServerFilter;
                 final String uuid = StorageManager.UUID_PRIVATE_INTERNAL;
                 final String seInfo = null;
+                final String classLoaderContext =
+                        getSystemServerClassLoaderContext(classPathForElement);
                 try {
                     installd.dexopt(classPathElement, Process.SYSTEM_UID, packageName,
                             instructionSet, dexoptNeeded, outputPath, dexFlags, compilerFilter,
-                            uuid, sharedLibraries, seInfo);
+                            uuid, classLoaderContext, seInfo, false /* downgrade */);
                 } catch (RemoteException | ServiceSpecificException e) {
                     // Ignore (but log), we need this on the classpath for fallback mode.
                     Log.w(TAG, "Failed compiling classpath element for system server: "
@@ -585,18 +582,43 @@
                 }
             }
 
-            if (!sharedLibraries.isEmpty()) {
-                sharedLibraries += ":";
-            }
-            sharedLibraries += classPathElement;
+            classPathForElement = encodeSystemServerClassPath(
+                    classPathForElement, classPathElement);
         }
     }
 
     /**
-     * Prepare the arguments and fork for the system server process.
+     * Encodes the system server class loader context in a format that is accepted by dexopt.
+     * This assumes the system server is always loaded with a {@link dalvik.system.PathClassLoader}.
+     *
+     * Note that ideally we would use the {@code DexoptUtils} to compute this. However we have no
+     * dependency here on the server so we hard code the logic again.
      */
-    private static boolean startSystemServer(String abiList, String socketName, ZygoteServer zygoteServer)
-            throws Zygote.MethodAndArgsCaller, RuntimeException {
+    private static String getSystemServerClassLoaderContext(String classPath) {
+        return classPath == null ? "PCL[]" : "PCL[" + classPath + "]";
+    }
+
+    /**
+     * Encodes the class path in a format accepted by dexopt.
+     * @param classPath the old class path (may be empty).
+     * @param newElement the new class path elements
+     * @return the class path encoding resulted from appending {@code newElement} to
+     * {@code classPath}.
+     */
+    private static String encodeSystemServerClassPath(String classPath, String newElement) {
+        return (classPath == null || classPath.isEmpty())
+                ? newElement
+                : classPath + ":" + newElement;
+    }
+
+    /**
+     * Prepare the arguments and forks for the system server process.
+     *
+     * Returns an {@code Runnable} that provides an entrypoint into system_server code in the
+     * child process, and {@code null} in the parent.
+     */
+    private static Runnable forkSystemServer(String abiList, String socketName,
+            ZygoteServer zygoteServer) {
         long capabilities = posixCapabilitiesAsBits(
             OsConstants.CAP_IPC_LOCK,
             OsConstants.CAP_KILL,
@@ -653,10 +675,10 @@
             }
 
             zygoteServer.closeServerSocket();
-            handleSystemServerProcess(parsedArgs);
+            return handleSystemServerProcess(parsedArgs);
         }
 
-        return true;
+        return null;
     }
 
     /**
@@ -687,6 +709,7 @@
             throw new RuntimeException("Failed to setpgid(0,0)", ex);
         }
 
+        final Runnable caller;
         try {
             // Report Zygote start time to tron unless it is a runtime restart
             if (!"1".equals(SystemProperties.get("sys.boot_completed"))) {
@@ -695,12 +718,10 @@
             }
 
             String bootTimeTag = Process.is64Bit() ? "Zygote64Timing" : "Zygote32Timing";
-            BootTimingsTraceLog bootTimingsTraceLog = new BootTimingsTraceLog(bootTimeTag,
+            TimingsTraceLog bootTimingsTraceLog = new TimingsTraceLog(bootTimeTag,
                     Trace.TRACE_TAG_DALVIK);
             bootTimingsTraceLog.traceBegin("ZygoteInit");
             RuntimeInit.enableDdms();
-            // Start profiling the zygote initialization.
-            SamplingProfilerIntegration.start();
 
             boolean startSystemServer = false;
             String socketName = "zygote";
@@ -739,9 +760,6 @@
                 Zygote.resetNicePriority();
             }
 
-            // Finish profiling the zygote initialization.
-            SamplingProfilerIntegration.writeZygoteSnapshot();
-
             // Do an initial gc to clean up after startup
             bootTimingsTraceLog.traceBegin("PostZygoteInitGC");
             gcAndFinalize();
@@ -761,19 +779,32 @@
             ZygoteHooks.stopZygoteNoThreadCreation();
 
             if (startSystemServer) {
-                startSystemServer(abiList, socketName, zygoteServer);
+                Runnable r = forkSystemServer(abiList, socketName, zygoteServer);
+
+                // {@code r == null} in the parent (zygote) process, and {@code r != null} in the
+                // child (system_server) process.
+                if (r != null) {
+                    r.run();
+                    return;
+                }
             }
 
             Log.i(TAG, "Accepting command socket connections");
-            zygoteServer.runSelectLoop(abiList);
 
-            zygoteServer.closeServerSocket();
-        } catch (Zygote.MethodAndArgsCaller caller) {
-            caller.run();
+            // The select loop returns early in the child process after a fork and
+            // loops forever in the zygote.
+            caller = zygoteServer.runSelectLoop(abiList);
         } catch (Throwable ex) {
             Log.e(TAG, "System zygote died with exception", ex);
-            zygoteServer.closeServerSocket();
             throw ex;
+        } finally {
+            zygoteServer.closeServerSocket();
+        }
+
+        // We're in the child process and have exited the select loop. Proceed to execute the
+        // command.
+        if (caller != null) {
+            caller.run();
         }
     }
 
@@ -817,8 +848,7 @@
      * @param targetSdkVersion target SDK version
      * @param argv arg strings
      */
-    public static final void zygoteInit(int targetSdkVersion, String[] argv,
-            ClassLoader classLoader) throws Zygote.MethodAndArgsCaller {
+    public static final Runnable zygoteInit(int targetSdkVersion, String[] argv, ClassLoader classLoader) {
         if (RuntimeInit.DEBUG) {
             Slog.d(RuntimeInit.TAG, "RuntimeInit: Starting application from zygote");
         }
@@ -828,7 +858,7 @@
 
         RuntimeInit.commonInit();
         ZygoteInit.nativeZygoteInit();
-        RuntimeInit.applicationInit(targetSdkVersion, argv, classLoader);
+        return RuntimeInit.applicationInit(targetSdkVersion, argv, classLoader);
     }
 
     private static final native void nativeZygoteInit();
diff --git a/core/java/com/android/internal/os/ZygoteServer.java b/core/java/com/android/internal/os/ZygoteServer.java
index 126d9e7..8baa15a 100644
--- a/core/java/com/android/internal/os/ZygoteServer.java
+++ b/core/java/com/android/internal/os/ZygoteServer.java
@@ -25,6 +25,7 @@
 import android.system.StructPollfd;
 import android.util.Log;
 
+import android.util.Slog;
 import java.io.IOException;
 import java.io.FileDescriptor;
 import java.util.ArrayList;
@@ -45,9 +46,18 @@
 
     private LocalServerSocket mServerSocket;
 
+    /**
+     * Set by the child process, immediately after a call to {@code Zygote.forkAndSpecialize}.
+     */
+    private boolean mIsForkChild;
+
     ZygoteServer() {
     }
 
+    void setForkChild() {
+        mIsForkChild = true;
+    }
+
     /**
      * Registers a server socket for zygote command connections
      *
@@ -129,11 +139,8 @@
      * Runs the zygote process's select loop. Accepts new connections as
      * they happen, and reads commands from connections one spawn-request's
      * worth at a time.
-     *
-     * @throws Zygote.MethodAndArgsCaller in a child process when a main()
-     * should be executed.
      */
-    void runSelectLoop(String abiList) throws Zygote.MethodAndArgsCaller {
+    Runnable runSelectLoop(String abiList) {
         ArrayList<FileDescriptor> fds = new ArrayList<FileDescriptor>();
         ArrayList<ZygoteConnection> peers = new ArrayList<ZygoteConnection>();
 
@@ -156,15 +163,62 @@
                 if ((pollFds[i].revents & POLLIN) == 0) {
                     continue;
                 }
+
                 if (i == 0) {
                     ZygoteConnection newPeer = acceptCommandPeer(abiList);
                     peers.add(newPeer);
                     fds.add(newPeer.getFileDesciptor());
                 } else {
-                    boolean done = peers.get(i).runOnce(this);
-                    if (done) {
-                        peers.remove(i);
-                        fds.remove(i);
+                    try {
+                        ZygoteConnection connection = peers.get(i);
+                        final Runnable command = connection.processOneCommand(this);
+
+                        if (mIsForkChild) {
+                            // We're in the child. We should always have a command to run at this
+                            // stage if processOneCommand hasn't called "exec".
+                            if (command == null) {
+                                throw new IllegalStateException("command == null");
+                            }
+
+                            return command;
+                        } else {
+                            // We're in the server - we should never have any commands to run.
+                            if (command != null) {
+                                throw new IllegalStateException("command != null");
+                            }
+
+                            // We don't know whether the remote side of the socket was closed or
+                            // not until we attempt to read from it from processOneCommand. This shows up as
+                            // a regular POLLIN event in our regular processing loop.
+                            if (connection.isClosedByPeer()) {
+                                connection.closeSocket();
+                                peers.remove(i);
+                                fds.remove(i);
+                            }
+                        }
+                    } catch (Exception e) {
+                        if (!mIsForkChild) {
+                            // We're in the server so any exception here is one that has taken place
+                            // pre-fork while processing commands or reading / writing from the
+                            // control socket. Make a loud noise about any such exceptions so that
+                            // we know exactly what failed and why.
+
+                            Slog.e(TAG, "Exception executing zygote command: ", e);
+
+                            // Make sure the socket is closed so that the other end knows immediately
+                            // that something has gone wrong and doesn't time out waiting for a
+                            // response.
+                            ZygoteConnection conn = peers.remove(i);
+                            conn.closeSocket();
+
+                            fds.remove(i);
+                        } else {
+                            // We're in the child so any exception caught here has happened post
+                            // fork and before we execute ActivityThread.main (or any other main()
+                            // method). Log the details of the exception and bring down the process.
+                            Log.e(TAG, "Caught post-fork exception in child process.", e);
+                            throw e;
+                        }
                     }
                 }
             }
diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java
index 60fbbe9..4e06577 100644
--- a/core/java/com/android/internal/policy/DecorView.java
+++ b/core/java/com/android/internal/policy/DecorView.java
@@ -17,6 +17,9 @@
 package com.android.internal.policy;
 
 import android.graphics.Outline;
+import android.graphics.drawable.InsetDrawable;
+import android.graphics.drawable.LayerDrawable;
+import android.util.Pair;
 import android.view.ViewOutlineProvider;
 import android.view.accessibility.AccessibilityNodeInfo;
 import com.android.internal.R;
@@ -1061,7 +1064,7 @@
         WindowManager.LayoutParams attrs = mWindow.getAttributes();
         int sysUiVisibility = attrs.systemUiVisibility | getWindowSystemUiVisibility();
 
-        if (!mWindow.mIsFloating && ActivityManager.isHighEndGfx()) {
+        if (!mWindow.mIsFloating) {
             boolean disallowAnimate = !isLaidOut();
             disallowAnimate |= ((mLastWindowFlags ^ attrs.flags)
                     & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0;
@@ -1103,8 +1106,8 @@
             boolean navBarToLeftEdge = isNavBarToLeftEdge(mLastBottomInset, mLastLeftInset);
             int navBarSize = getNavBarSize(mLastBottomInset, mLastRightInset, mLastLeftInset);
             updateColorViewInt(mNavigationColorViewState, sysUiVisibility,
-                    mWindow.mNavigationBarColor, navBarSize, navBarToRightEdge || navBarToLeftEdge,
-                    navBarToLeftEdge,
+                    mWindow.mNavigationBarColor, mWindow.mNavigationBarDividerColor, navBarSize,
+                    navBarToRightEdge || navBarToLeftEdge, navBarToLeftEdge,
                     0 /* sideInset */, animate && !disallowAnimate, false /* force */);
 
             boolean statusBarNeedsRightInset = navBarToRightEdge
@@ -1114,7 +1117,7 @@
             int statusBarSideInset = statusBarNeedsRightInset ? mLastRightInset
                     : statusBarNeedsLeftInset ? mLastLeftInset : 0;
             updateColorViewInt(mStatusColorViewState, sysUiVisibility,
-                    calculateStatusBarColor(), mLastTopInset,
+                    calculateStatusBarColor(), 0, mLastTopInset,
                     false /* matchVertical */, statusBarNeedsLeftInset, statusBarSideInset,
                     animate && !disallowAnimate,
                     mForceWindowDrawsStatusBarBackground);
@@ -1201,6 +1204,7 @@
      * @param state the color view to update.
      * @param sysUiVis the current systemUiVisibility to apply.
      * @param color the current color to apply.
+     * @param dividerColor the current divider color to apply.
      * @param size the current size in the non-parent-matching dimension.
      * @param verticalBar if true the view is attached to a vertical edge, otherwise to a
      *                    horizontal edge,
@@ -1208,7 +1212,7 @@
      * @param animate if true, the change will be animated.
      */
     private void updateColorViewInt(final ColorViewState state, int sysUiVis, int color,
-            int size, boolean verticalBar, boolean seascape, int sideMargin,
+            int dividerColor, int size, boolean verticalBar, boolean seascape, int sideMargin,
             boolean animate, boolean force) {
         state.present = state.attributes.isPresent(sysUiVis, mWindow.getAttributes().flags, force);
         boolean show = state.attributes.isVisible(state.present, color,
@@ -1227,7 +1231,7 @@
         if (view == null) {
             if (showView) {
                 state.view = view = new View(mContext);
-                view.setBackgroundColor(color);
+                setColor(view, color, dividerColor, verticalBar, seascape);
                 view.setTransitionName(state.attributes.transitionName);
                 view.setId(state.attributes.id);
                 visibilityChanged = true;
@@ -1262,7 +1266,7 @@
                 view.setLayoutParams(lp);
             }
             if (showView) {
-                view.setBackgroundColor(color);
+                setColor(view, color, dividerColor, verticalBar, seascape);
             }
         }
         if (visibilityChanged) {
@@ -1295,6 +1299,34 @@
         state.color = color;
     }
 
+    private static void setColor(View v, int color, int dividerColor, boolean verticalBar,
+            boolean seascape) {
+        if (dividerColor != 0) {
+            final Pair<Boolean, Boolean> dir = (Pair<Boolean, Boolean>) v.getTag();
+            if (dir == null || dir.first != verticalBar || dir.second != seascape) {
+                final int size = Math.round(
+                        TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1,
+                                v.getContext().getResources().getDisplayMetrics()));
+                // Use an inset to make the divider line on the side that faces the app.
+                final InsetDrawable d = new InsetDrawable(new ColorDrawable(color),
+                        verticalBar && !seascape ? size : 0,
+                        !verticalBar ? size : 0,
+                        verticalBar && seascape ? size : 0, 0);
+                v.setBackground(new LayerDrawable(new Drawable[] {
+                        new ColorDrawable(dividerColor), d }));
+                v.setTag(new Pair<>(verticalBar, seascape));
+            } else {
+                final LayerDrawable d = (LayerDrawable) v.getBackground();
+                final InsetDrawable inset = ((InsetDrawable) d.getDrawable(1));
+                ((ColorDrawable) inset.getDrawable()).setColor(color);
+                ((ColorDrawable) d.getDrawable(0)).setColor(dividerColor);
+            }
+        } else {
+            v.setTag(null);
+            v.setBackgroundColor(color);
+        }
+    }
+
     private void updateColorViewTranslations() {
         // Put the color views back in place when they get moved off the screen
         // due to the the ViewRootImpl panning.
@@ -1812,7 +1844,7 @@
             mFloatingActionMode.finish();
         }
         cleanupFloatingActionModeViews();
-        mFloatingToolbar = new FloatingToolbar(mContext, mWindow);
+        mFloatingToolbar = new FloatingToolbar(mWindow);
         final FloatingActionMode mode =
                 new FloatingActionMode(mContext, callback, originatingView, mFloatingToolbar);
         mFloatingActionModeOriginatingView = originatingView;
diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java
index 544afd9..b13560c 100644
--- a/core/java/com/android/internal/policy/PhoneWindow.java
+++ b/core/java/com/android/internal/policy/PhoneWindow.java
@@ -233,6 +233,7 @@
     private int mTextColor = 0;
     int mStatusBarColor = 0;
     int mNavigationBarColor = 0;
+    int mNavigationBarDividerColor = 0;
     private boolean mForcedStatusBarColor = false;
     private boolean mForcedNavigationBarColor = false;
 
@@ -2432,13 +2433,15 @@
         }
         if (!mForcedNavigationBarColor) {
             mNavigationBarColor = a.getColor(R.styleable.Window_navigationBarColor, 0xFF000000);
+            mNavigationBarDividerColor = a.getColor(R.styleable.Window_navigationBarDividerColor,
+                    0x00000000);
         }
 
         WindowManager.LayoutParams params = getAttributes();
 
         // Non-floating windows on high end devices must put up decor beneath the system bars and
         // therefore must know about visibility changes of those.
-        if (!mIsFloating && ActivityManager.isHighEndGfx()) {
+        if (!mIsFloating) {
             if (!targetPreL && a.getBoolean(
                     R.styleable.Window_windowDrawsSystemBarBackgrounds,
                     false)) {
@@ -2453,6 +2456,10 @@
             decor.setSystemUiVisibility(
                     decor.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
         }
+        if (a.getBoolean(R.styleable.Window_windowLightNavigationBar, false)) {
+            decor.setSystemUiVisibility(
+                    decor.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
+        }
 
         if (mAlwaysReadCloseOnTouchAttr || getContext().getApplicationInfo().targetSdkVersion
                 >= android.os.Build.VERSION_CODES.HONEYCOMB) {
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index 6f54b0c..bab0306aa 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -32,6 +32,7 @@
     void animateExpandNotificationsPanel();
     void animateExpandSettingsPanel(String subPanel);
     void animateCollapsePanels();
+    void togglePanel();
 
     /**
      * Notifies the status bar of a System UI visibility flag change.
@@ -111,6 +112,13 @@
      */
     void showGlobalActionsMenu();
 
+    /**
+     * Set whether the top app currently hides the statusbar.
+     *
+     * @param hidesStatusBar whether it is being hidden
+     */
+    void setTopAppHidesStatusBar(boolean hidesStatusBar);
+
     void addQsTile(in ComponentName tile);
     void remQsTile(in ComponentName tile);
     void clickQsTile(in ComponentName tile);
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index 22eef07..82eb1ab 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -31,6 +31,7 @@
 {
     void expandNotificationsPanel();
     void collapsePanels();
+    void togglePanel();
     void disable(int what, IBinder token, String pkg);
     void disableForUser(int what, IBinder token, String pkg, int userId);
     void disable2(int what, IBinder token, String pkg);
diff --git a/core/java/com/android/internal/textservice/ITextServicesManager.aidl b/core/java/com/android/internal/textservice/ITextServicesManager.aidl
index 4882a12..c5940ba 100644
--- a/core/java/com/android/internal/textservice/ITextServicesManager.aidl
+++ b/core/java/com/android/internal/textservice/ITextServicesManager.aidl
@@ -36,9 +36,6 @@
             in ITextServicesSessionListener tsListener,
             in ISpellCheckerSessionListener scListener, in Bundle bundle);
     oneway void finishSpellCheckerService(in ISpellCheckerSessionListener listener);
-    oneway void setCurrentSpellChecker(String locale, String sciId);
-    oneway void setCurrentSpellCheckerSubtype(String locale, int hashCode);
-    oneway void setSpellCheckerEnabled(boolean enabled);
     boolean isSpellCheckerEnabled();
     SpellCheckerInfo[] getEnabledSpellCheckers();
 }
diff --git a/core/java/com/android/internal/util/AsyncChannel.java b/core/java/com/android/internal/util/AsyncChannel.java
index d8be9fd..e760f25 100644
--- a/core/java/com/android/internal/util/AsyncChannel.java
+++ b/core/java/com/android/internal/util/AsyncChannel.java
@@ -402,7 +402,6 @@
 
         // Initialize destination fields
         mDstMessenger = dstMessenger;
-        linkToDeathMonitor();
         if (DBG) log("connected srcHandler to the dstMessenger X");
     }
 
@@ -768,9 +767,10 @@
             /** Handle of the reply message */
             @Override
             public void handleMessage(Message msg) {
-                mResultMsg = Message.obtain();
-                mResultMsg.copyFrom(msg);
+                Message msgCopy = Message.obtain();
+                msgCopy.copyFrom(msg);
                 synchronized(mLockObject) {
+                    mResultMsg = msgCopy;
                     mLockObject.notify();
                 }
             }
@@ -812,22 +812,26 @@
          */
         private static Message sendMessageSynchronously(Messenger dstMessenger, Message msg) {
             SyncMessenger sm = SyncMessenger.obtain();
+            Message resultMsg = null;
             try {
                 if (dstMessenger != null && msg != null) {
                     msg.replyTo = sm.mMessenger;
                     synchronized (sm.mHandler.mLockObject) {
+                        if (sm.mHandler.mResultMsg != null) {
+                            Slog.wtf(TAG, "mResultMsg should be null here");
+                            sm.mHandler.mResultMsg = null;
+                        }
                         dstMessenger.send(msg);
                         sm.mHandler.mLockObject.wait();
+                        resultMsg = sm.mHandler.mResultMsg;
+                        sm.mHandler.mResultMsg = null;
                     }
-                } else {
-                    sm.mHandler.mResultMsg = null;
                 }
             } catch (InterruptedException e) {
-                sm.mHandler.mResultMsg = null;
+                Slog.e(TAG, "error in sendMessageSynchronously", e);
             } catch (RemoteException e) {
-                sm.mHandler.mResultMsg = null;
+                Slog.e(TAG, "error in sendMessageSynchronously", e);
             }
-            Message resultMsg = sm.mHandler.mResultMsg;
             sm.recycle();
             return resultMsg;
         }
diff --git a/core/java/com/android/internal/util/CollectionUtils.java b/core/java/com/android/internal/util/CollectionUtils.java
index 1f84061..f0b47de 100644
--- a/core/java/com/android/internal/util/CollectionUtils.java
+++ b/core/java/com/android/internal/util/CollectionUtils.java
@@ -20,17 +20,21 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.util.ArraySet;
+import android.util.ExceptionUtils;
+
+import com.android.internal.util.FunctionalUtils.ThrowingConsumer;
 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
-import java.util.function.Function;
+import java.util.function.*;
 import java.util.stream.Stream;
 
 /**
- * Utility methods for dealing with (typically {@link Nullable}) {@link Collection}s
+ * Utility methods for dealing with (typically {@code Nullable}) {@link Collection}s
  *
  * Unless a method specifies otherwise, a null value for a collection is treated as an empty
  * collection of that type.
@@ -57,6 +61,32 @@
     }
 
     /**
+     * @see #filter(List, java.util.function.Predicate)
+     */
+    public static @NonNull <T> Set<T> filter(@Nullable Set<T> set,
+            java.util.function.Predicate<? super T> predicate) {
+        if (set == null || set.size() == 0) return Collections.emptySet();
+        ArraySet<T> result = null;
+        if (set instanceof ArraySet) {
+            ArraySet<T> arraySet = (ArraySet<T>) set;
+            int size = arraySet.size();
+            for (int i = 0; i < size; i++) {
+                final T item = arraySet.valueAt(i);
+                if (predicate.test(item)) {
+                    result = ArrayUtils.add(result, item);
+                }
+            }
+        } else {
+            for (T item : set) {
+                if (predicate.test(item)) {
+                    result = ArrayUtils.add(result, item);
+                }
+            }
+        }
+        return emptyIfNull(result);
+    }
+
+    /**
      * Returns a list of items resulting from applying the given function to each element of the
      * provided list.
      *
@@ -76,6 +106,27 @@
     }
 
     /**
+     * @see #map(List, Function)
+     */
+    public static @NonNull <I, O> Set<O> map(@Nullable Set<I> cur,
+            Function<? super I, ? extends O> f) {
+        if (isEmpty(cur)) return Collections.emptySet();
+        ArraySet<O> result = new ArraySet<>();
+        if (cur instanceof ArraySet) {
+            ArraySet<I> arraySet = (ArraySet<I>) cur;
+            int size = arraySet.size();
+            for (int i = 0; i < size; i++) {
+                result.add(f.apply(arraySet.valueAt(i)));
+            }
+        } else {
+            for (I item : cur) {
+                result.add(f.apply(item));
+            }
+        }
+        return result;
+    }
+
+    /**
      * {@link #map(List, Function)} + {@link #filter(List, java.util.function.Predicate)}
      *
      * Calling this is equivalent (but more memory efficient) to:
@@ -179,6 +230,17 @@
     }
 
     /**
+     * @see #add(List, Object)
+     */
+    public static @NonNull <T> Set<T> add(@Nullable Set<T> cur, T val) {
+        if (cur == null || cur == Collections.emptySet()) {
+            cur = new ArraySet<>();
+        }
+        cur.add(val);
+        return cur;
+    }
+
+    /**
      * Similar to {@link List#remove}, but with support for list values of {@code null} and
      * {@link Collections#emptyList}
      */
@@ -191,9 +253,52 @@
     }
 
     /**
+     * @see #remove(List, Object)
+     */
+    public static @NonNull <T> Set<T> remove(@Nullable Set<T> cur, T val) {
+        if (isEmpty(cur)) {
+            return emptyIfNull(cur);
+        }
+        cur.remove(val);
+        return cur;
+    }
+
+    /**
      * @return a list that will not be affected by mutations to the given original list.
      */
     public static @NonNull <T> List<T> copyOf(@Nullable List<T> cur) {
         return isEmpty(cur) ? Collections.emptyList() : new ArrayList<>(cur);
     }
+
+    /**
+     * @return a list that will not be affected by mutations to the given original list.
+     */
+    public static @NonNull <T> Set<T> copyOf(@Nullable Set<T> cur) {
+        return isEmpty(cur) ? Collections.emptySet() : new ArraySet<>(cur);
+    }
+
+    /**
+     * Applies {@code action} to each element in {@code cur}
+     *
+     * This avoids creating an iterator if the given set is an {@link ArraySet}
+     */
+    public static <T> void forEach(@Nullable Set<T> cur, @Nullable ThrowingConsumer<T> action) {
+        if (cur == null || action == null) return;
+        int size = cur.size();
+        if (size == 0) return;
+        try {
+            if (cur instanceof ArraySet) {
+                ArraySet<T> arraySet = (ArraySet<T>) cur;
+                for (int i = 0; i < size; i++) {
+                    action.accept(arraySet.valueAt(i));
+                }
+            } else {
+                for (T t : cur) {
+                    action.accept(t);
+                }
+            }
+        } catch (Exception e) {
+            throw ExceptionUtils.propagate(e);
+        }
+    }
 }
diff --git a/core/java/com/android/internal/util/FastXmlSerializer.java b/core/java/com/android/internal/util/FastXmlSerializer.java
index 3c1d2d6..b85b84f 100644
--- a/core/java/com/android/internal/util/FastXmlSerializer.java
+++ b/core/java/com/android/internal/util/FastXmlSerializer.java
@@ -49,18 +49,19 @@
         null,     null,     null,     null,     "&lt;",   null,     "&gt;",   null,   // 56-63
     };
 
-    private static final int BUFFER_LEN = 8192;
+    private static final int DEFAULT_BUFFER_LEN = 32*1024;
 
     private static String sSpace = "                                                              ";
 
-    private final char[] mText = new char[BUFFER_LEN];
+    private final int mBufferLen;
+    private final char[] mText;
     private int mPos;
 
     private Writer mWriter;
 
     private OutputStream mOutputStream;
     private CharsetEncoder mCharset;
-    private ByteBuffer mBytes = ByteBuffer.allocate(BUFFER_LEN);
+    private ByteBuffer mBytes;
 
     private boolean mIndent = false;
     private boolean mInTag;
@@ -68,9 +69,25 @@
     private int mNesting = 0;
     private boolean mLineStart = true;
 
+    public FastXmlSerializer() {
+        this(DEFAULT_BUFFER_LEN);
+    }
+
+    /**
+     * Allocate a FastXmlSerializer with the given internal output buffer size.  If the
+     * size is zero or negative, then the default buffer size will be used.
+     *
+     * @param bufferSize Size in bytes of the in-memory output buffer that the writer will use.
+     */
+    public FastXmlSerializer(int bufferSize) {
+        mBufferLen = (bufferSize > 0) ? bufferSize : DEFAULT_BUFFER_LEN;
+        mText = new char[mBufferLen];
+        mBytes = ByteBuffer.allocate(mBufferLen);
+    }
+
     private void append(char c) throws IOException {
         int pos = mPos;
-        if (pos >= (BUFFER_LEN-1)) {
+        if (pos >= (mBufferLen-1)) {
             flush();
             pos = mPos;
         }
@@ -79,17 +96,17 @@
     }
 
     private void append(String str, int i, final int length) throws IOException {
-        if (length > BUFFER_LEN) {
+        if (length > mBufferLen) {
             final int end = i + length;
             while (i < end) {
-                int next = i + BUFFER_LEN;
-                append(str, i, next<end ? BUFFER_LEN : (end-i));
+                int next = i + mBufferLen;
+                append(str, i, next<end ? mBufferLen : (end-i));
                 i = next;
             }
             return;
         }
         int pos = mPos;
-        if ((pos+length) > BUFFER_LEN) {
+        if ((pos+length) > mBufferLen) {
             flush();
             pos = mPos;
         }
@@ -98,17 +115,17 @@
     }
 
     private void append(char[] buf, int i, final int length) throws IOException {
-        if (length > BUFFER_LEN) {
+        if (length > mBufferLen) {
             final int end = i + length;
             while (i < end) {
-                int next = i + BUFFER_LEN;
-                append(buf, i, next<end ? BUFFER_LEN : (end-i));
+                int next = i + mBufferLen;
+                append(buf, i, next<end ? mBufferLen : (end-i));
                 i = next;
             }
             return;
         }
         int pos = mPos;
-        if ((pos+length) > BUFFER_LEN) {
+        if ((pos+length) > mBufferLen) {
             flush();
             pos = mPos;
         }
diff --git a/core/java/com/android/internal/util/FunctionalUtils.java b/core/java/com/android/internal/util/FunctionalUtils.java
index 9aeb041..cdef97e 100644
--- a/core/java/com/android/internal/util/FunctionalUtils.java
+++ b/core/java/com/android/internal/util/FunctionalUtils.java
@@ -45,4 +45,15 @@
     public interface ThrowingSupplier<T> {
         T get() throws Exception;
     }
+
+    /**
+     * An equivalent of {@link java.util.function.Consumer} that allows throwing checked exceptions
+     *
+     * This can be used to specify a lambda argument without forcing all the checked exceptions
+     * to be handled within it
+     */
+    @FunctionalInterface
+    public interface ThrowingConsumer<T> {
+        void accept(T t) throws Exception;
+    }
 }
diff --git a/core/java/com/android/internal/util/JournaledFile.java b/core/java/com/android/internal/util/JournaledFile.java
index 9f775d3..5372fc0 100644
--- a/core/java/com/android/internal/util/JournaledFile.java
+++ b/core/java/com/android/internal/util/JournaledFile.java
@@ -20,7 +20,7 @@
 import java.io.IOException;
 
 /**
- * @deprecated Use {@link com.android.internal.os.AtomicFile} instead.  It would
+ * @deprecated Use {@code AtomicFile} instead.  It would
  * be nice to update all existing uses of this to switch to AtomicFile, but since
  * their on-file semantics are slightly different that would run the risk of losing
  * data if at the point of the platform upgrade to the new code it would need to
diff --git a/core/java/com/android/internal/util/MemInfoReader.java b/core/java/com/android/internal/util/MemInfoReader.java
index b71fa06..8d71666 100644
--- a/core/java/com/android/internal/util/MemInfoReader.java
+++ b/core/java/com/android/internal/util/MemInfoReader.java
@@ -82,7 +82,7 @@
      * that are mapped in to processes.
      */
     public long getCachedSizeKb() {
-        return mInfos[Debug.MEMINFO_BUFFERS]
+        return mInfos[Debug.MEMINFO_BUFFERS] + mInfos[Debug.MEMINFO_SLAB_RECLAIMABLE]
                 + mInfos[Debug.MEMINFO_CACHED] - mInfos[Debug.MEMINFO_MAPPED];
     }
 
@@ -90,7 +90,7 @@
      * Amount of RAM that is in use by the kernel for actual allocations.
      */
     public long getKernelUsedSizeKb() {
-        return mInfos[Debug.MEMINFO_SHMEM] + mInfos[Debug.MEMINFO_SLAB]
+        return mInfos[Debug.MEMINFO_SHMEM] + mInfos[Debug.MEMINFO_SLAB_UNRECLAIMABLE]
                 + mInfos[Debug.MEMINFO_VM_ALLOC_USED] + mInfos[Debug.MEMINFO_PAGE_TABLES]
                 + mInfos[Debug.MEMINFO_KERNEL_STACK];
     }
diff --git a/core/java/com/android/internal/util/NotificationColorUtil.java b/core/java/com/android/internal/util/NotificationColorUtil.java
index 0c046a9..933cc7a 100644
--- a/core/java/com/android/internal/util/NotificationColorUtil.java
+++ b/core/java/com/android/internal/util/NotificationColorUtil.java
@@ -33,6 +33,7 @@
 import android.graphics.drawable.VectorDrawable;
 import android.text.SpannableStringBuilder;
 import android.text.Spanned;
+import android.text.style.BackgroundColorSpan;
 import android.text.style.CharacterStyle;
 import android.text.style.ForegroundColorSpan;
 import android.text.style.TextAppearanceSpan;
@@ -240,6 +241,45 @@
         return span;
     }
 
+    /**
+     * Clears all color spans of a text
+     * @param charSequence the input text
+     * @return the same text but without color spans
+     */
+    public static CharSequence clearColorSpans(CharSequence charSequence) {
+        if (charSequence instanceof Spanned) {
+            Spanned ss = (Spanned) charSequence;
+            Object[] spans = ss.getSpans(0, ss.length(), Object.class);
+            SpannableStringBuilder builder = new SpannableStringBuilder(ss.toString());
+            for (Object span : spans) {
+                Object resultSpan = span;
+                if (resultSpan instanceof CharacterStyle) {
+                    resultSpan = ((CharacterStyle) span).getUnderlying();
+                }
+                if (resultSpan instanceof TextAppearanceSpan) {
+                    TextAppearanceSpan originalSpan = (TextAppearanceSpan) resultSpan;
+                    if (originalSpan.getTextColor() != null) {
+                        resultSpan = new TextAppearanceSpan(
+                                originalSpan.getFamily(),
+                                originalSpan.getTextStyle(),
+                                originalSpan.getTextSize(),
+                                null,
+                                originalSpan.getLinkTextColor());
+                    }
+                } else if (resultSpan instanceof ForegroundColorSpan
+                        || (resultSpan instanceof BackgroundColorSpan)) {
+                    continue;
+                } else {
+                    resultSpan = span;
+                }
+                builder.setSpan(resultSpan, ss.getSpanStart(span), ss.getSpanEnd(span),
+                        ss.getSpanFlags(span));
+            }
+            return builder;
+        }
+        return charSequence;
+    }
+
     private int processColor(int color) {
         return Color.argb(Color.alpha(color),
                 255 - Color.red(color),
@@ -360,20 +400,28 @@
         return findContrastColorAgainstDark(color, Color.BLACK, true /* fg */, 12);
     }
 
-    /**
-     * Finds a text color with sufficient contrast over bg that has the same hue as the original
-     * color, assuming it is for large text.
+     /**
+     * Finds a large text color with sufficient contrast over bg that has the same or darker hue as
+     * the original color, depending on the value of {@code isBgDarker}.
+     *
+     * @param isBgDarker {@code true} if {@code bg} is darker than {@code color}.
      */
-    public static int ensureLargeTextContrast(int color, int bg) {
-        return findContrastColor(color, bg, true, 3);
+    public static int ensureLargeTextContrast(int color, int bg, boolean isBgDarker) {
+        return isBgDarker
+                ? findContrastColorAgainstDark(color, bg, true, 3)
+                : findContrastColor(color, bg, true, 3);
     }
 
     /**
-     * Finds a text color with sufficient contrast over bg that has the same hue as the original
-     * color.
+     * Finds a text color with sufficient contrast over bg that has the same or darker hue as the
+     * original color, depending on the value of {@code isBgDarker}.
+     *
+     * @param isBgDarker {@code true} if {@code bg} is darker than {@code color}.
      */
-    private static int ensureTextContrast(int color, int bg) {
-        return findContrastColor(color, bg, true, 4.5);
+    private static int ensureTextContrast(int color, int bg, boolean isBgDarker) {
+        return isBgDarker
+                ? findContrastColorAgainstDark(color, bg, true, 4.5)
+                : findContrastColor(color, bg, true, 4.5);
     }
 
     /** Finds a background color for a text view with given text color and hint text color, that
@@ -402,22 +450,37 @@
 
     /**
      * Resolves a Notification's color such that it has enough contrast to be used as the
+     * color for the Notification's action and header text on a background that is lighter than
+     * {@code notificationColor}.
+     *
+     * @see {@link #resolveContrastColor(Context, int, boolean)}
+     */
+    public static int resolveContrastColor(Context context, int notificationColor,
+            int backgroundColor) {
+        return NotificationColorUtil.resolveContrastColor(context, notificationColor,
+                backgroundColor, false /* isDark */);
+    }
+
+    /**
+     * Resolves a Notification's color such that it has enough contrast to be used as the
      * color for the Notification's action and header text.
      *
      * @param notificationColor the color of the notification or {@link Notification#COLOR_DEFAULT}
      * @param backgroundColor the background color to ensure the contrast against.
+     * @param isDark whether or not the {@code notificationColor} will be placed on a background
+     *               that is darker than the color itself
      * @return a color of the same hue with enough contrast against the backgrounds.
      */
     public static int resolveContrastColor(Context context, int notificationColor,
-            int backgroundColor) {
+            int backgroundColor, boolean isDark) {
         final int resolvedColor = resolveColor(context, notificationColor);
 
         final int actionBg = context.getColor(
                 com.android.internal.R.color.notification_action_list);
 
         int color = resolvedColor;
-        color = NotificationColorUtil.ensureLargeTextContrast(color, actionBg);
-        color = NotificationColorUtil.ensureTextContrast(color, backgroundColor);
+        color = NotificationColorUtil.ensureLargeTextContrast(color, actionBg, isDark);
+        color = NotificationColorUtil.ensureTextContrast(color, backgroundColor, isDark);
 
         if (color != resolvedColor) {
             if (DEBUG){
diff --git a/core/java/com/android/internal/util/ObjectUtils.java b/core/java/com/android/internal/util/ObjectUtils.java
index d109a5a..59e5a64 100644
--- a/core/java/com/android/internal/util/ObjectUtils.java
+++ b/core/java/com/android/internal/util/ObjectUtils.java
@@ -28,4 +28,12 @@
     public static <T> T firstNotNull(@Nullable T a, @NonNull T b) {
         return a != null ? a : Preconditions.checkNotNull(b);
     }
+
+    public static <T extends Comparable> int compare(@Nullable T a, @Nullable T b) {
+        if (a != null) {
+            return (b != null) ? a.compareTo(b) : 1;
+        } else {
+            return (b != null) ? -1 : 0;
+        }
+    }
 }
diff --git a/core/java/com/android/internal/util/Protocol.java b/core/java/com/android/internal/util/Protocol.java
index b075db8..1aa32cc 100644
--- a/core/java/com/android/internal/util/Protocol.java
+++ b/core/java/com/android/internal/util/Protocol.java
@@ -65,5 +65,6 @@
     public static final int BASE_NETWORK_MONITOR                                    = 0x00082000;
     public static final int BASE_NETWORK_FACTORY                                    = 0x00083000;
     public static final int BASE_ETHERNET                                           = 0x00084000;
+    public static final int BASE_LOWPAN                                             = 0x00085000;
     //TODO: define all used protocols
 }
diff --git a/core/java/com/android/internal/util/XmlUtils.java b/core/java/com/android/internal/util/XmlUtils.java
index 3d8c85e..3188d30 100644
--- a/core/java/com/android/internal/util/XmlUtils.java
+++ b/core/java/com/android/internal/util/XmlUtils.java
@@ -1694,10 +1694,10 @@
         return in.getAttributeValue(null, name);
     }
 
-    public static void writeStringAttribute(XmlSerializer out, String name, String value)
+    public static void writeStringAttribute(XmlSerializer out, String name, CharSequence value)
             throws IOException {
         if (value != null) {
-            out.attribute(null, name, value);
+            out.attribute(null, name, value.toString());
         }
     }
 
diff --git a/core/java/com/android/internal/view/FloatingActionMode.java b/core/java/com/android/internal/view/FloatingActionMode.java
index ff211b6..497e7b0 100644
--- a/core/java/com/android/internal/view/FloatingActionMode.java
+++ b/core/java/com/android/internal/view/FloatingActionMode.java
@@ -295,6 +295,8 @@
      */
     private static final class FloatingToolbarVisibilityHelper {
 
+        private static final long MIN_SHOW_DURATION_FOR_MOVE_HIDE = 500;
+
         private final FloatingToolbar mToolbar;
 
         private boolean mHideRequested;
@@ -304,6 +306,8 @@
 
         private boolean mActive;
 
+        private long mLastShowTime;
+
         public FloatingToolbarVisibilityHelper(FloatingToolbar toolbar) {
             mToolbar = Preconditions.checkNotNull(toolbar);
         }
@@ -327,7 +331,13 @@
         }
 
         public void setMoving(boolean moving) {
-            mMoving = moving;
+            // Avoid unintended flickering by allowing the toolbar to show long enough before
+            // triggering the 'moving' flag - which signals a hide.
+            final boolean showingLongEnough =
+                System.currentTimeMillis() - mLastShowTime > MIN_SHOW_DURATION_FOR_MOVE_HIDE;
+            if (!moving || showingLongEnough) {
+                mMoving = moving;
+            }
         }
 
         public void setOutOfBounds(boolean outOfBounds) {
@@ -347,6 +357,7 @@
                 mToolbar.hide();
             } else {
                 mToolbar.show();
+                mLastShowTime = System.currentTimeMillis();
             }
         }
     }
diff --git a/core/java/com/android/internal/view/TooltipPopup.java b/core/java/com/android/internal/view/TooltipPopup.java
index 3930214..d38ea2c 100644
--- a/core/java/com/android/internal/view/TooltipPopup.java
+++ b/core/java/com/android/internal/view/TooltipPopup.java
@@ -93,7 +93,7 @@
 
     private void computePosition(View anchorView, int anchorX, int anchorY, boolean fromTouch,
             WindowManager.LayoutParams outParams) {
-        outParams.token = anchorView.getWindowToken();
+        outParams.token = anchorView.getApplicationWindowToken();
 
         final int tooltipPreciseAnchorThreshold = mContext.getResources().getDimensionPixelOffset(
                 com.android.internal.R.dimen.tooltip_precise_anchor_threshold);
diff --git a/core/java/com/android/internal/widget/FloatingToolbar.java b/core/java/com/android/internal/widget/FloatingToolbar.java
index 1d56e1a..f63b5a2 100644
--- a/core/java/com/android/internal/widget/FloatingToolbar.java
+++ b/core/java/com/android/internal/widget/FloatingToolbar.java
@@ -120,8 +120,10 @@
     /**
      * Initializes a floating toolbar.
      */
-    public FloatingToolbar(Context context, Window window) {
-        mContext = applyDefaultTheme(Preconditions.checkNotNull(context));
+    public FloatingToolbar(Window window) {
+        // TODO(b/65172902): Pass context in constructor when DecorView (and other callers)
+        // supports multi-display.
+        mContext = applyDefaultTheme(window.getContext());
         mWindow = Preconditions.checkNotNull(window);
         mPopup = new FloatingToolbarPopup(mContext, window.getDecorView());
     }
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 53a9654..5439906 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -67,8 +67,7 @@
 
     private static final String TAG = "LockPatternUtils";
     private static final boolean DEBUG = false;
-    private static final boolean FRP_CREDENTIAL_ENABLED =
-            Build.IS_DEBUGGABLE && SystemProperties.getBoolean("debug.frpcredential.enable", false);
+    private static final boolean FRP_CREDENTIAL_ENABLED = true;
 
     /**
      * The key to identify when the lock pattern enabled flag is being accessed for legacy reasons.
@@ -304,7 +303,7 @@
     }
 
     public void reportFailedPasswordAttempt(int userId) {
-        if (userId == USER_FRP && frpCredentialEnabled()) {
+        if (userId == USER_FRP && frpCredentialEnabled(mContext)) {
             return;
         }
         getDevicePolicyManager().reportFailedPasswordAttempt(userId);
@@ -312,7 +311,7 @@
     }
 
     public void reportSuccessfulPasswordAttempt(int userId) {
-        if (userId == USER_FRP && frpCredentialEnabled()) {
+        if (userId == USER_FRP && frpCredentialEnabled(mContext)) {
             return;
         }
         getDevicePolicyManager().reportSuccessfulPasswordAttempt(userId);
@@ -320,21 +319,21 @@
     }
 
     public void reportPasswordLockout(int timeoutMs, int userId) {
-        if (userId == USER_FRP && frpCredentialEnabled()) {
+        if (userId == USER_FRP && frpCredentialEnabled(mContext)) {
             return;
         }
         getTrustManager().reportUnlockLockout(timeoutMs, userId);
     }
 
     public int getCurrentFailedPasswordAttempts(int userId) {
-        if (userId == USER_FRP && frpCredentialEnabled()) {
+        if (userId == USER_FRP && frpCredentialEnabled(mContext)) {
             return 0;
         }
         return getDevicePolicyManager().getCurrentFailedPasswordAttempts(userId);
     }
 
     public int getMaximumFailedPasswordsForWipe(int userId) {
-        if (userId == USER_FRP && frpCredentialEnabled()) {
+        if (userId == USER_FRP && frpCredentialEnabled(mContext)) {
             return 0;
         }
         return getDevicePolicyManager().getMaximumFailedPasswordsForWipe(
@@ -804,12 +803,14 @@
                         + "of length " + MIN_LOCK_PASSWORD_SIZE);
             }
 
-            final int computedQuality = PasswordMetrics.computeForPassword(password).quality;
-            setLong(PASSWORD_TYPE_KEY, Math.max(requestedQuality, computedQuality), userHandle);
+            setLong(PASSWORD_TYPE_KEY,
+                    computePasswordQuality(CREDENTIAL_TYPE_PASSWORD, password, requestedQuality),
+                    userHandle);
             getLockSettings().setLockCredential(password, CREDENTIAL_TYPE_PASSWORD, savedPassword,
                     requestedQuality, userHandle);
 
-            updateEncryptionPasswordIfNeeded(password, computedQuality, userHandle);
+            updateEncryptionPasswordIfNeeded(password,
+                    PasswordMetrics.computeForPassword(password).quality, userHandle);
             updatePasswordHistory(password, userHandle);
         } catch (RemoteException re) {
             // Cant do much
@@ -899,6 +900,24 @@
     }
 
     /**
+     * Returns the password quality of the given credential, promoting it to a higher level
+     * if DevicePolicyManager has a stronger quality requirement. This value will be written
+     * to PASSWORD_TYPE_KEY.
+     */
+    private int computePasswordQuality(int type, String credential, int requestedQuality) {
+        final int quality;
+        if (type == CREDENTIAL_TYPE_PASSWORD) {
+            int computedQuality = PasswordMetrics.computeForPassword(credential).quality;
+            quality = Math.max(requestedQuality, computedQuality);
+        } else if (type == CREDENTIAL_TYPE_PATTERN)  {
+            quality = DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
+        } else /* if (type == CREDENTIAL_TYPE_NONE) */ {
+            quality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
+        }
+        return quality;
+    }
+
+    /**
      * Enables/disables the Separate Profile Challenge for this {@param userHandle}. This is a no-op
      * for user handles that do not belong to a managed profile.
      *
@@ -909,26 +928,48 @@
      */
     public void setSeparateProfileChallengeEnabled(int userHandle, boolean enabled,
             String managedUserPassword) {
-        UserInfo info = getUserManager().getUserInfo(userHandle);
-        if (info.isManagedProfile()) {
-            try {
-                getLockSettings().setSeparateProfileChallengeEnabled(userHandle, enabled,
-                        managedUserPassword);
-                onAfterChangingPassword(userHandle);
-            } catch (RemoteException e) {
-                Log.e(TAG, "Couldn't update work profile challenge enabled");
-            }
+        if (!isManagedProfile(userHandle)) {
+            return;
+        }
+        try {
+            getLockSettings().setSeparateProfileChallengeEnabled(userHandle, enabled,
+                    managedUserPassword);
+            onAfterChangingPassword(userHandle);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Couldn't update work profile challenge enabled");
         }
     }
 
     /**
-     * Retrieves whether the Separate Profile Challenge is enabled for this {@param userHandle}.
+     * Returns true if {@param userHandle} is a managed profile with separate challenge.
      */
     public boolean isSeparateProfileChallengeEnabled(int userHandle) {
-        UserInfo info = getUserManager().getUserInfo(userHandle);
-        if (info == null || !info.isManagedProfile()) {
-            return false;
-        }
+        return isManagedProfile(userHandle) && hasSeparateChallenge(userHandle);
+    }
+
+    /**
+     * Returns true if {@param userHandle} is a managed profile with unified challenge.
+     */
+    public boolean isManagedProfileWithUnifiedChallenge(int userHandle) {
+        return isManagedProfile(userHandle) && !hasSeparateChallenge(userHandle);
+    }
+
+    /**
+     * Retrieves whether the current DPM allows use of the Profile Challenge.
+     */
+    public boolean isSeparateProfileChallengeAllowed(int userHandle) {
+        return isManagedProfile(userHandle)
+                && getDevicePolicyManager().isSeparateProfileChallengeAllowed(userHandle);
+    }
+
+    /**
+     * Retrieves whether the current profile and device locks can be unified.
+     */
+    public boolean isSeparateProfileChallengeAllowedToUnify(int userHandle) {
+        return getDevicePolicyManager().isProfileActivePasswordSufficientForParent(userHandle);
+    }
+
+    private boolean hasSeparateChallenge(int userHandle) {
         try {
             return getLockSettings().getSeparateProfileChallengeEnabled(userHandle);
         } catch (RemoteException e) {
@@ -938,22 +979,9 @@
         }
     }
 
-    /**
-     * Retrieves whether the current DPM allows use of the Profile Challenge.
-     */
-    public boolean isSeparateProfileChallengeAllowed(int userHandle) {
-        UserInfo info = getUserManager().getUserInfo(userHandle);
-        if (info == null || !info.isManagedProfile()) {
-            return false;
-        }
-        return getDevicePolicyManager().isSeparateProfileChallengeAllowed(userHandle);
-    }
-
-    /**
-     * Retrieves whether the current profile and device locks can be unified.
-     */
-    public boolean isSeparateProfileChallengeAllowedToUnify(int userHandle) {
-        return getDevicePolicyManager().isProfileActivePasswordSufficientForParent(userHandle);
+    private boolean isManagedProfile(int userHandle) {
+        final UserInfo info = getUserManager().getUserInfo(userHandle);
+        return info != null && info.isManagedProfile();
     }
 
     /**
@@ -1203,6 +1231,11 @@
      */
     public long setLockoutAttemptDeadline(int userId, int timeoutMs) {
         final long deadline = SystemClock.elapsedRealtime() + timeoutMs;
+        if (userId == USER_FRP) {
+            // For secure password storage (that is required for FRP), the underlying storage also
+            // enforces the deadline. Since we cannot store settings for the FRP user, don't.
+            return deadline;
+        }
         setLong(LOCKOUT_ATTEMPT_DEADLINE, deadline, userId);
         setLong(LOCKOUT_ATTEMPT_TIMEOUT_MS, timeoutMs, userId);
         return deadline;
@@ -1492,25 +1525,34 @@
         }
     }
 
-    public boolean setLockCredentialWithToken(String credential, int type, long tokenHandle,
-            byte[] token, int userId) {
+    /**
+     * Change a user's lock credential with a pre-configured escrow token.
+     *
+     * @param credential The new credential to be set
+     * @param type Credential type: password / pattern / none.
+     * @param requestedQuality the requested password quality by DevicePolicyManager.
+     *        See {@link DevicePolicyManager#getPasswordQuality(android.content.ComponentName)}
+     * @param tokenHandle Handle of the escrow token
+     * @param token Escrow token
+     * @param userId The user who's lock credential to be changed
+     * @return {@code true} if the operation is successful.
+     */
+    public boolean setLockCredentialWithToken(String credential, int type, int requestedQuality,
+            long tokenHandle, byte[] token, int userId) {
         try {
             if (type != CREDENTIAL_TYPE_NONE) {
                 if (TextUtils.isEmpty(credential) || credential.length() < MIN_LOCK_PASSWORD_SIZE) {
                     throw new IllegalArgumentException("password must not be null and at least "
                             + "of length " + MIN_LOCK_PASSWORD_SIZE);
                 }
-
-                final int computedQuality = PasswordMetrics.computeForPassword(credential).quality;
-                int quality = Math.max(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC,
-                        computedQuality);
+                final int quality = computePasswordQuality(type, credential, requestedQuality);
                 if (!getLockSettings().setLockCredentialWithToken(credential, type, tokenHandle,
                         token, quality, userId)) {
                     return false;
                 }
                 setLong(PASSWORD_TYPE_KEY, quality, userId);
 
-                updateEncryptionPasswordIfNeeded(credential, computedQuality, userId);
+                updateEncryptionPasswordIfNeeded(credential, quality, userId);
                 updatePasswordHistory(credential, userId);
             } else {
                 if (!TextUtils.isEmpty(credential)) {
@@ -1726,11 +1768,12 @@
         return getLong(SYNTHETIC_PASSWORD_ENABLED_KEY, 0, UserHandle.USER_SYSTEM) != 0;
     }
 
-    public static boolean userOwnsFrpCredential(UserInfo info) {
-        return info != null && info.isPrimary() && info.isAdmin() && frpCredentialEnabled();
+    public static boolean userOwnsFrpCredential(Context context, UserInfo info) {
+        return info != null && info.isPrimary() && info.isAdmin() && frpCredentialEnabled(context);
     }
 
-    public static boolean frpCredentialEnabled() {
-        return FRP_CREDENTIAL_ENABLED;
+    public static boolean frpCredentialEnabled(Context context) {
+        return FRP_CREDENTIAL_ENABLED && context.getResources().getBoolean(
+                com.android.internal.R.bool.config_enableCredentialFactoryResetProtection);
     }
 }
diff --git a/core/java/com/android/internal/widget/NotificationExpandButton.java b/core/java/com/android/internal/widget/NotificationExpandButton.java
index b702898..39f82a5 100644
--- a/core/java/com/android/internal/widget/NotificationExpandButton.java
+++ b/core/java/com/android/internal/widget/NotificationExpandButton.java
@@ -31,7 +31,6 @@
  */
 @RemoteViews.RemoteView
 public class NotificationExpandButton extends ImageView {
-    private View mLabeledBy;
 
     public NotificationExpandButton(Context context) {
         super(context);
@@ -69,12 +68,5 @@
     public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
         super.onInitializeAccessibilityNodeInfo(info);
         info.setClassName(Button.class.getName());
-        if (mLabeledBy != null) {
-            info.setLabeledBy(mLabeledBy);
-        }
-    }
-
-    public void setLabeledBy(View labeledBy) {
-        mLabeledBy = labeledBy;
     }
 }
diff --git a/core/java/com/android/internal/widget/PointerLocationView.java b/core/java/com/android/internal/widget/PointerLocationView.java
index 592576b..e53162c 100644
--- a/core/java/com/android/internal/widget/PointerLocationView.java
+++ b/core/java/com/android/internal/widget/PointerLocationView.java
@@ -25,6 +25,7 @@
 import android.hardware.input.InputManager.InputDeviceListener;
 import android.os.SystemProperties;
 import android.util.Log;
+import android.util.Slog;
 import android.view.InputDevice;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
@@ -630,6 +631,12 @@
                     >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; // will be 0 for UP
 
             final int id = event.getPointerId(index);
+            if (id >= NP) {
+                Slog.wtf(TAG, "Got pointer ID out of bounds: id=" + id + " arraysize="
+                        + NP + " pointerindex=" + index
+                        + " action=0x" + Integer.toHexString(action));
+                return;
+            }
             final PointerState ps = mPointers.get(id);
             ps.mCurDown = false;
 
diff --git a/core/java/com/android/internal/widget/RecyclerView.java b/core/java/com/android/internal/widget/RecyclerView.java
index 0cf3164..7abc76a 100644
--- a/core/java/com/android/internal/widget/RecyclerView.java
+++ b/core/java/com/android/internal/widget/RecyclerView.java
@@ -132,8 +132,6 @@
  * <p>
  * When writing a {@link LayoutManager} you almost always want to use layout positions whereas when
  * writing an {@link Adapter}, you probably want to use adapter positions.
- *
- * @attr ref android.support.v7.recyclerview.R.styleable#RecyclerView_layoutManager
  */
 public class RecyclerView extends ViewGroup implements ScrollingView, NestedScrollingChild {
 
@@ -9591,11 +9589,6 @@
         /**
          * Parse the xml attributes to get the most common properties used by layout managers.
          *
-         * @attr ref android.support.v7.recyclerview.R.styleable#RecyclerView_android_orientation
-         * @attr ref android.support.v7.recyclerview.R.styleable#RecyclerView_spanCount
-         * @attr ref android.support.v7.recyclerview.R.styleable#RecyclerView_reverseLayout
-         * @attr ref android.support.v7.recyclerview.R.styleable#RecyclerView_stackFromEnd
-         *
          * @return an object containing the properties as specified in the attrs.
          */
         public static Properties getProperties(Context context, AttributeSet attrs,
diff --git a/core/java/com/android/server/BootReceiver.java b/core/java/com/android/server/BootReceiver.java
index 4f9e8a5..4354486 100644
--- a/core/java/com/android/server/BootReceiver.java
+++ b/core/java/com/android/server/BootReceiver.java
@@ -31,13 +31,13 @@
 import android.os.SystemProperties;
 import android.os.storage.StorageManager;
 import android.provider.Downloads;
+import android.text.TextUtils;
 import android.util.AtomicFile;
 import android.util.Slog;
 import android.util.Xml;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.MetricsLogger;
-import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.FastXmlSerializer;
 import com.android.internal.util.XmlUtils;
 
@@ -106,6 +106,11 @@
             "powerctl_shutdown_time_ms:([0-9]+):([0-9]+)";
     private static final int UMOUNT_STATUS_NOT_AVAILABLE = 4; // should match with init/reboot.h
 
+    // Location of file with metrics recorded during shutdown
+    private static final String SHUTDOWN_METRICS_FILE = "/data/system/shutdown-metrics.txt";
+
+    private static final String SHUTDOWN_TRON_METRICS_PREFIX = "shutdown_";
+
     @Override
     public void onReceive(final Context context, Intent intent) {
         // Log boot events in the background to avoid blocking the main thread with I/O
@@ -217,6 +222,8 @@
                     "/proc/last_kmsg", -LOG_SIZE, "SYSTEM_LAST_KMSG");
             addFileWithFootersToDropBox(db, timestamps, headers, lastKmsgFooter,
                     "/sys/fs/pstore/console-ramoops", -LOG_SIZE, "SYSTEM_LAST_KMSG");
+            addFileWithFootersToDropBox(db, timestamps, headers, lastKmsgFooter,
+                    "/sys/fs/pstore/console-ramoops-0", -LOG_SIZE, "SYSTEM_LAST_KMSG");
             addFileToDropBox(db, timestamps, headers, "/cache/recovery/log", -LOG_SIZE,
                     "SYSTEM_RECOVERY_LOG");
             addFileToDropBox(db, timestamps, headers, "/cache/recovery/last_kmsg",
@@ -230,6 +237,7 @@
         logFsShutdownTime();
         logFsMountTime();
         addFsckErrorsToDropBoxAndLogFsStat(db, timestamps, headers, -LOG_SIZE, "SYSTEM_FSCK");
+        logSystemServerShutdownTimeMetrics();
 
         // Scan existing tombstones (in case any new ones appeared)
         File[] tombstoneFiles = TOMBSTONE_DIR.listFiles();
@@ -302,6 +310,10 @@
         if (fileTime <= 0) {
             file = new File("/sys/fs/pstore/console-ramoops");
             fileTime = file.lastModified();
+            if (fileTime <= 0) {
+                file = new File("/sys/fs/pstore/console-ramoops-0");
+                fileTime = file.lastModified();
+            }
         }
 
         if (fileTime <= 0) return;  // File does not exist
@@ -374,6 +386,47 @@
         }
     }
 
+    // TODO b/64815357 Move to bootstat.cpp and log AbsoluteRebootTime
+    private static void logSystemServerShutdownTimeMetrics() {
+        File metricsFile = new File(SHUTDOWN_METRICS_FILE);
+        String metricsStr = null;
+        if (metricsFile.exists()) {
+            try {
+                metricsStr = FileUtils.readTextFile(metricsFile, 0, null);
+            } catch (IOException e) {
+                Slog.e(TAG, "Problem reading " + metricsFile, e);
+            }
+        }
+        if (!TextUtils.isEmpty(metricsStr)) {
+            String[] array = metricsStr.split(",");
+            for (String keyValueStr : array) {
+                String[] keyValue = keyValueStr.split(":");
+                if (keyValue.length != 2) {
+                    Slog.e(TAG, "Wrong format of shutdown metrics - " + metricsStr);
+                    continue;
+                }
+                // Ignore keys that are not indended for tron
+                if (keyValue[0].startsWith(SHUTDOWN_TRON_METRICS_PREFIX)) {
+                    logTronShutdownMetric(keyValue[0], keyValue[1]);
+                }
+            }
+        }
+        metricsFile.delete();
+    }
+
+    private static void logTronShutdownMetric(String metricName, String valueStr) {
+        int value;
+        try {
+            value = Integer.parseInt(valueStr);
+        } catch (NumberFormatException e) {
+            Slog.e(TAG, "Cannot parse metric " + metricName + " int value - " + valueStr);
+            return;
+        }
+        if (value >= 0) {
+            MetricsLogger.histogram(null, metricName, value);
+        }
+    }
+
     private static void logFsShutdownTime() {
         File f = null;
         for (String fileName : LAST_KMSG_FILES) {
diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java
index 67f9f8f..7778892 100644
--- a/core/java/com/android/server/SystemConfig.java
+++ b/core/java/com/android/server/SystemConfig.java
@@ -141,6 +141,7 @@
 
 
     final ArrayMap<String, ArraySet<String>> mPrivAppPermissions = new ArrayMap<>();
+    final ArrayMap<String, ArraySet<String>> mPrivAppDenyPermissions = new ArrayMap<>();
 
     public static SystemConfig getInstance() {
         synchronized (SystemConfig.class) {
@@ -219,6 +220,10 @@
         return mPrivAppPermissions.get(packageName);
     }
 
+    public ArraySet<String> getPrivAppDenyPermissions(String packageName) {
+        return mPrivAppDenyPermissions.get(packageName);
+    }
+
     SystemConfig() {
         // Read configuration from system
         readPermissions(Environment.buildPath(
@@ -584,6 +589,12 @@
             addFeature(PackageManager.FEATURE_SECURELY_REMOVES_USERS, 0);
         }
 
+        if (ActivityManager.isLowRamDeviceStatic()) {
+            addFeature(PackageManager.FEATURE_RAM_LOW, 0);
+        } else {
+            addFeature(PackageManager.FEATURE_RAM_NORMAL, 0);
+        }
+
         for (String featureName : mUnavailableFeatures) {
             removeFeature(featureName);
         }
@@ -654,6 +665,7 @@
         if (permissions == null) {
             permissions = new ArraySet<>();
         }
+        ArraySet<String> denyPermissions = mPrivAppDenyPermissions.get(packageName);
         int depth = parser.getDepth();
         while (XmlUtils.nextElementWithin(parser, depth)) {
             String name = parser.getName();
@@ -665,8 +677,22 @@
                     continue;
                 }
                 permissions.add(permName);
+            } else if ("deny-permission".equals(name)) {
+                String permName = parser.getAttributeValue(null, "name");
+                if (TextUtils.isEmpty(permName)) {
+                    Slog.w(TAG, "name is required for <deny-permission> in "
+                            + parser.getPositionDescription());
+                    continue;
+                }
+                if (denyPermissions == null) {
+                    denyPermissions = new ArraySet<>();
+                }
+                denyPermissions.add(permName);
             }
         }
         mPrivAppPermissions.put(packageName, permissions);
+        if (denyPermissions != null) {
+            mPrivAppDenyPermissions.put(packageName, denyPermissions);
+        }
     }
 }
diff --git a/core/java/com/android/server/backup/SystemBackupAgent.java b/core/java/com/android/server/backup/SystemBackupAgent.java
index 5375651..a96b5dd 100644
--- a/core/java/com/android/server/backup/SystemBackupAgent.java
+++ b/core/java/com/android/server/backup/SystemBackupAgent.java
@@ -35,7 +35,8 @@
 import java.io.IOException;
 
 /**
- * Backup agent for various system-managed data, currently just the system wallpaper
+ * Backup agent for various system-managed data.  Wallpapers are now handled by a
+ * separate package, but we still process restores from legacy datasets here.
  */
 public class SystemBackupAgent extends BackupAgentHelper {
     private static final String TAG = "SystemBackupAgent";
@@ -61,16 +62,19 @@
     // TODO: http://b/22388012
     private static final String WALLPAPER_IMAGE_DIR =
             Environment.getUserSystemDirectory(UserHandle.USER_SYSTEM).getAbsolutePath();
-    private static final String WALLPAPER_IMAGE = WallpaperBackupHelper.WALLPAPER_IMAGE;
+    public static final String WALLPAPER_IMAGE =
+            new File(Environment.getUserSystemDirectory(UserHandle.USER_SYSTEM),
+                    "wallpaper").getAbsolutePath();
 
     // TODO: Will need to change if backing up non-primary user's wallpaper
     // TODO: http://b/22388012
     private static final String WALLPAPER_INFO_DIR =
             Environment.getUserSystemDirectory(UserHandle.USER_SYSTEM).getAbsolutePath();
-    private static final String WALLPAPER_INFO = WallpaperBackupHelper.WALLPAPER_INFO;
+    public static final String WALLPAPER_INFO =
+            new File(Environment.getUserSystemDirectory(UserHandle.USER_SYSTEM),
+                    "wallpaper_info.xml").getAbsolutePath();
     // Use old keys to keep legacy data compatibility and avoid writing two wallpapers
     private static final String WALLPAPER_IMAGE_KEY = WallpaperBackupHelper.WALLPAPER_IMAGE_KEY;
-    private static final String WALLPAPER_INFO_KEY = WallpaperBackupHelper.WALLPAPER_INFO_KEY;
 
     private WallpaperBackupHelper mWallpaperHelper = null;
 
@@ -98,13 +102,11 @@
         // Slot in a restore helper for the older wallpaper backup schema to support restore
         // from devices still generating data in that format.
         mWallpaperHelper = new WallpaperBackupHelper(this,
-                new String[] { WALLPAPER_IMAGE, WALLPAPER_INFO },
-                new String[] { WALLPAPER_IMAGE_KEY, WALLPAPER_INFO_KEY} );
+                new String[] { WALLPAPER_IMAGE_KEY} );
         addHelper(WALLPAPER_HELPER, mWallpaperHelper);
 
         // On restore, we also support a long-ago wallpaper data schema "system_files"
         addHelper("system_files", new WallpaperBackupHelper(this,
-                new String[] { WALLPAPER_IMAGE },
                 new String[] { WALLPAPER_IMAGE_KEY} ));
 
         addHelper(SYNC_SETTINGS_HELPER, new AccountSyncSettingsBackupHelper(this));
@@ -115,27 +117,12 @@
         addHelper(SHORTCUT_MANAGER_HELPER, new ShortcutBackupHelper());
         addHelper(ACCOUNT_MANAGER_HELPER, new AccountManagerBackupHelper());
 
-        try {
-            super.onRestore(data, appVersionCode, newState);
-
-            IWallpaperManager wallpaper = (IWallpaperManager) ServiceManager.getService(
-                    Context.WALLPAPER_SERVICE);
-            if (wallpaper != null) {
-                try {
-                    wallpaper.settingsRestored();
-                } catch (RemoteException re) {
-                    Slog.e(TAG, "Couldn't restore settings\n" + re);
-                }
-            }
-        } catch (IOException ex) {
-            // If there was a failure, delete everything for the wallpaper, this is too aggressive,
-            // but this is hopefully a rare failure.
-            Slog.d(TAG, "restore failed", ex);
-            (new File(WALLPAPER_IMAGE)).delete();
-            (new File(WALLPAPER_INFO)).delete();
-        }
+        super.onRestore(data, appVersionCode, newState);
     }
 
+    /**
+     * Support for 'adb restore' of legacy archives
+     */
     @Override
     public void onRestoreFile(ParcelFileDescriptor data, long size,
             int type, String domain, String path, long mode, long mtime)
@@ -183,12 +170,4 @@
             }
         }
     }
-
-    @Override
-    public void onRestoreFinished() {
-        // helper will be null following 'adb restore' or other full-data operation
-        if (mWallpaperHelper != null) {
-            mWallpaperHelper.onRestoreFinished();
-        }
-    }
 }
diff --git a/core/java/com/android/server/net/OWNERS b/core/java/com/android/server/net/OWNERS
new file mode 100644
index 0000000..74f39a1
--- /dev/null
+++ b/core/java/com/android/server/net/OWNERS
@@ -0,0 +1,5 @@
+set noparent
+
+ek@google.com
+hugobenichi@google.com
+lorenzo@google.com
diff --git a/core/jni/Android.bp b/core/jni/Android.bp
index a228d34..c629341 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -90,6 +90,7 @@
         "android_os_Parcel.cpp",
         "android_os_SELinux.cpp",
         "android_os_seccomp.cpp",
+        "android_os_SharedMemory.cpp",
         "android_os_SystemClock.cpp",
         "android_os_SystemProperties.cpp",
         "android_os_Trace.cpp",
@@ -162,7 +163,6 @@
         "android_hardware_camera2_DngCreator.cpp",
         "android_hardware_display_DisplayViewport.cpp",
         "android_hardware_HardwareBuffer.cpp",
-        "android_hardware_Radio.cpp",
         "android_hardware_SensorManager.cpp",
         "android_hardware_SerialPort.cpp",
         "android_hardware_SoundTrigger.cpp",
@@ -185,8 +185,8 @@
         "android_content_res_Configuration.cpp",
         "android_animation_PropertyValuesHolder.cpp",
         "com_android_internal_net_NetworkStatsFactory.cpp",
+        "com_android_internal_os_ClassLoaderFactory.cpp",
         "com_android_internal_os_FuseAppLoop.cpp",
-        "com_android_internal_os_PathClassLoaderFactory.cpp",
         "com_android_internal_os_Zygote.cpp",
         "com_android_internal_os_ZygoteInit.cpp",
         "com_android_internal_util_VirtualRefBasePtr.cpp",
@@ -216,7 +216,6 @@
         "libgif",
         "libseccomp_policy",
         "libselinux",
-        "libcrypto",
         "libgrallocusage",
     ],
 
@@ -225,6 +224,7 @@
         "libandroidfw",
         "libappfuse",
         "libbase",
+        "libcrypto",
         "libnativehelper",
         "liblog",
         "libcutils",
@@ -259,12 +259,10 @@
         "libpdfium",
         "libimg_utils",
         "libnetd_client",
-        "libradio",
         "libsoundtrigger",
         "libminikin",
         "libprocessgroup",
         "libnativebridge",
-        "libradio_metadata",
         "libnativeloader",
         "libmemunreachable",
         "libhidlbase",
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index daf815a..4c137b1 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -32,8 +32,8 @@
 #include <SkGraphics.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
-#include "JniInvocation.h"
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/JniInvocation.h>
 #include "android_util_Binder.h"
 
 #include <stdio.h>
@@ -88,7 +88,6 @@
 extern int register_android_hardware_camera2_legacy_PerfMeasurement(JNIEnv *env);
 extern int register_android_hardware_camera2_DngCreator(JNIEnv *env);
 extern int register_android_hardware_HardwareBuffer(JNIEnv *env);
-extern int register_android_hardware_Radio(JNIEnv *env);
 extern int register_android_hardware_SensorManager(JNIEnv *env);
 extern int register_android_hardware_SerialPort(JNIEnv *env);
 extern int register_android_hardware_SoundTrigger(JNIEnv *env);
@@ -168,6 +167,7 @@
 extern int register_android_os_FileObserver(JNIEnv *env);
 extern int register_android_os_UEventObserver(JNIEnv* env);
 extern int register_android_os_MemoryFile(JNIEnv* env);
+extern int register_android_os_SharedMemory(JNIEnv* env);
 extern int register_android_net_LocalSocketImpl(JNIEnv* env);
 extern int register_android_net_NetworkUtils(JNIEnv* env);
 extern int register_android_net_TrafficStats(JNIEnv* env);
@@ -203,8 +203,8 @@
 extern int register_android_animation_PropertyValuesHolder(JNIEnv *env);
 extern int register_com_android_internal_content_NativeLibraryHelper(JNIEnv *env);
 extern int register_com_android_internal_net_NetworkStatsFactory(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_PathClassLoaderFactory(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);
@@ -614,9 +614,13 @@
     char useJitProfilesOptsBuf[sizeof("-Xjitsaveprofilinginfo:")-1 + PROPERTY_VALUE_MAX];
     char jitprithreadweightOptBuf[sizeof("-Xjitprithreadweight:")-1 + PROPERTY_VALUE_MAX];
     char jittransitionweightOptBuf[sizeof("-Xjittransitionweight:")-1 + PROPERTY_VALUE_MAX];
+    char hotstartupsamplesOptsBuf[sizeof("-Xps-hot-startup-method-samples:")-1 + PROPERTY_VALUE_MAX];
+    char madviseRandomOptsBuf[sizeof("-XX:MadviseRandomAccess:")-1 + PROPERTY_VALUE_MAX];
     char gctypeOptsBuf[sizeof("-Xgc:")-1 + PROPERTY_VALUE_MAX];
     char backgroundgcOptsBuf[sizeof("-XX:BackgroundGC=")-1 + PROPERTY_VALUE_MAX];
     char heaptargetutilizationOptsBuf[sizeof("-XX:HeapTargetUtilization=")-1 + PROPERTY_VALUE_MAX];
+    char foregroundHeapGrowthMultiplierOptsBuf[
+            sizeof("-XX:ForegroundHeapGrowthMultiplier=")-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];
@@ -720,6 +724,11 @@
                        heaptargetutilizationOptsBuf,
                        "-XX:HeapTargetUtilization=");
 
+    /* Foreground heap growth multiplier option */
+    parseRuntimeOption("dalvik.vm.foreground-heap-growth-multiplier",
+                       foregroundHeapGrowthMultiplierOptsBuf,
+                       "-XX:ForegroundHeapGrowthMultiplier=");
+
     /*
      * JIT related options.
      */
@@ -740,6 +749,17 @@
                        jittransitionweightOptBuf,
                        "-Xjittransitionweight:");
 
+    /*
+     * Madvise related options.
+     */
+    parseRuntimeOption("dalvik.vm.madvise-random", madviseRandomOptsBuf, "-XX:MadviseRandomAccess:");
+
+    /*
+     * Profile related options.
+     */
+    parseRuntimeOption("dalvik.vm.hot-startup-method-samples", hotstartupsamplesOptsBuf,
+            "-Xps-hot-startup-method-samples:");
+
     property_get("ro.config.low_ram", propBuf, "");
     if (strcmp(propBuf, "true") == 0) {
       addOption("-XX:LowMemoryMode");
@@ -786,19 +806,33 @@
                             "--compiler-filter=", "-Ximage-compiler-option");
     }
 
-    // Make sure there is a preloaded-classes file.
-    if (!hasFile("/system/etc/preloaded-classes")) {
-        ALOGE("Missing preloaded-classes file, /system/etc/preloaded-classes not found: %s\n",
-              strerror(errno));
-        return -1;
-    }
-    addOption("-Ximage-compiler-option");
-    addOption("--image-classes=/system/etc/preloaded-classes");
-
-    // If there is a compiled-classes file, push it.
-    if (hasFile("/system/etc/compiled-classes")) {
+    // If there is a boot profile, it takes precedence over the image and preloaded classes.
+    if (hasFile("/system/etc/boot-image.prof")) {
         addOption("-Ximage-compiler-option");
-        addOption("--compiled-classes=/system/etc/compiled-classes");
+        addOption("--profile-file=/system/etc/boot-image.prof");
+        addOption("-Ximage-compiler-option");
+        addOption("--compiler-filter=speed-profile");
+    } else {
+        // Make sure there is a preloaded-classes file.
+        if (!hasFile("/system/etc/preloaded-classes")) {
+            ALOGE("Missing preloaded-classes file, /system/etc/preloaded-classes not found: %s\n",
+                  strerror(errno));
+            return -1;
+        }
+        addOption("-Ximage-compiler-option");
+        addOption("--image-classes=/system/etc/preloaded-classes");
+
+        // If there is a compiled-classes file, push it.
+        if (hasFile("/system/etc/compiled-classes")) {
+            addOption("-Ximage-compiler-option");
+            addOption("--compiled-classes=/system/etc/compiled-classes");
+        }
+
+        // If there is a dirty-image-objects file, push it.
+        if (hasFile("/system/etc/dirty-image-objects")) {
+            addOption("-Ximage-compiler-option");
+            addOption("--dirty-image-objects=/system/etc/dirty-image-objects");
+        }
     }
 
     property_get("dalvik.vm.image-dex2oat-flags", dex2oatImageFlagsBuf, "");
@@ -1073,7 +1107,7 @@
      * Start VM.  This thread becomes the main thread of the VM, and will
      * not return until the VM exits.
      */
-    char* slashClassName = toSlashClassName(className);
+    char* slashClassName = toSlashClassName(className != NULL ? className : "");
     jclass startClass = env->FindClass(slashClassName);
     if (startClass == NULL) {
         ALOGE("JavaVM unable to locate class '%s'\n", slashClassName);
@@ -1387,7 +1421,8 @@
     REG_JNI(register_android_net_NetworkUtils),
     REG_JNI(register_android_net_TrafficStats),
     REG_JNI(register_android_os_MemoryFile),
-    REG_JNI(register_com_android_internal_os_PathClassLoaderFactory),
+    REG_JNI(register_android_os_SharedMemory),
+    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),
@@ -1397,7 +1432,6 @@
     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_Radio),
     REG_JNI(register_android_hardware_SensorManager),
     REG_JNI(register_android_hardware_SerialPort),
     REG_JNI(register_android_hardware_SoundTrigger),
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index 547e2b4..108fdbc 100755
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -485,11 +485,9 @@
 
 //////////////////// ToColor procs
 
-typedef void (*ToColorProc)(SkColor dst[], const void* src, int width,
-                            SkColorTable*);
+typedef void (*ToColorProc)(SkColor dst[], const void* src, int width);
 
-static void ToColor_F16_Alpha(SkColor dst[], const void* src, int width,
-                              SkColorTable*) {
+static void ToColor_F16_Alpha(SkColor dst[], const void* src, int width) {
     SkASSERT(width > 0);
     uint64_t* s = (uint64_t*)src;
     do {
@@ -497,8 +495,7 @@
     } while (--width != 0);
 }
 
-static void ToColor_F16_Raw(SkColor dst[], const void* src, int width,
-                            SkColorTable*) {
+static void ToColor_F16_Raw(SkColor dst[], const void* src, int width) {
     SkASSERT(width > 0);
     uint64_t* s = (uint64_t*)src;
     do {
@@ -506,8 +503,7 @@
     } while (--width != 0);
 }
 
-static void ToColor_S32_Alpha(SkColor dst[], const void* src, int width,
-                              SkColorTable*) {
+static void ToColor_S32_Alpha(SkColor dst[], const void* src, int width) {
     SkASSERT(width > 0);
     const SkPMColor* s = (const SkPMColor*)src;
     do {
@@ -515,8 +511,7 @@
     } while (--width != 0);
 }
 
-static void ToColor_S32_Raw(SkColor dst[], const void* src, int width,
-                              SkColorTable*) {
+static void ToColor_S32_Raw(SkColor dst[], const void* src, int width) {
     SkASSERT(width > 0);
     const SkPMColor* s = (const SkPMColor*)src;
     do {
@@ -526,8 +521,7 @@
     } while (--width != 0);
 }
 
-static void ToColor_S32_Opaque(SkColor dst[], const void* src, int width,
-                               SkColorTable*) {
+static void ToColor_S32_Opaque(SkColor dst[], const void* src, int width) {
     SkASSERT(width > 0);
     const SkPMColor* s = (const SkPMColor*)src;
     do {
@@ -537,8 +531,7 @@
     } while (--width != 0);
 }
 
-static void ToColor_S4444_Alpha(SkColor dst[], const void* src, int width,
-                                SkColorTable*) {
+static void ToColor_S4444_Alpha(SkColor dst[], const void* src, int width) {
     SkASSERT(width > 0);
     const SkPMColor16* s = (const SkPMColor16*)src;
     do {
@@ -546,8 +539,7 @@
     } while (--width != 0);
 }
 
-static void ToColor_S4444_Raw(SkColor dst[], const void* src, int width,
-                                SkColorTable*) {
+static void ToColor_S4444_Raw(SkColor dst[], const void* src, int width) {
     SkASSERT(width > 0);
     const SkPMColor16* s = (const SkPMColor16*)src;
     do {
@@ -557,8 +549,7 @@
     } while (--width != 0);
 }
 
-static void ToColor_S4444_Opaque(SkColor dst[], const void* src, int width,
-                                 SkColorTable*) {
+static void ToColor_S4444_Opaque(SkColor dst[], const void* src, int width) {
     SkASSERT(width > 0);
     const SkPMColor16* s = (const SkPMColor16*)src;
     do {
@@ -568,8 +559,7 @@
     } while (--width != 0);
 }
 
-static void ToColor_S565(SkColor dst[], const void* src, int width,
-                         SkColorTable*) {
+static void ToColor_S565(SkColor dst[], const void* src, int width) {
     SkASSERT(width > 0);
     const uint16_t* s = (const uint16_t*)src;
     do {
@@ -579,41 +569,7 @@
     } while (--width != 0);
 }
 
-static void ToColor_SI8_Alpha(SkColor dst[], const void* src, int width,
-                              SkColorTable* ctable) {
-    SkASSERT(width > 0);
-    const uint8_t* s = (const uint8_t*)src;
-    const SkPMColor* colors = ctable->readColors();
-    do {
-        *dst++ = SkUnPreMultiply::PMColorToColor(colors[*s++]);
-    } while (--width != 0);
-}
-
-static void ToColor_SI8_Raw(SkColor dst[], const void* src, int width,
-                              SkColorTable* ctable) {
-    SkASSERT(width > 0);
-    const uint8_t* s = (const uint8_t*)src;
-    const SkPMColor* colors = ctable->readColors();
-    do {
-        SkPMColor c = colors[*s++];
-        *dst++ = SkColorSetARGB(SkGetPackedA32(c), SkGetPackedR32(c),
-                                SkGetPackedG32(c), SkGetPackedB32(c));
-    } while (--width != 0);
-}
-
-static void ToColor_SI8_Opaque(SkColor dst[], const void* src, int width,
-                               SkColorTable* ctable) {
-    SkASSERT(width > 0);
-    const uint8_t* s = (const uint8_t*)src;
-    const SkPMColor* colors = ctable->readColors();
-    do {
-        SkPMColor c = colors[*s++];
-        *dst++ = SkColorSetRGB(SkGetPackedR32(c), SkGetPackedG32(c),
-                               SkGetPackedB32(c));
-    } while (--width != 0);
-}
-
-static void ToColor_SA8(SkColor dst[], const void* src, int width, SkColorTable*) {
+static void ToColor_SA8(SkColor dst[], const void* src, int width) {
     SkASSERT(width > 0);
     const uint8_t* s = (const uint8_t*)src;
     do {
@@ -649,20 +605,6 @@
             }
         case kRGB_565_SkColorType:
             return ToColor_S565;
-        case kIndex_8_SkColorType:
-            if (src.getColorTable() == NULL) {
-                return NULL;
-            }
-            switch (src.alphaType()) {
-                case kOpaque_SkAlphaType:
-                    return ToColor_SI8_Opaque;
-                case kPremul_SkAlphaType:
-                    return ToColor_SI8_Alpha;
-                case kUnpremul_SkAlphaType:
-                    return ToColor_SI8_Raw;
-                default:
-                    return NULL;
-            }
         case kAlpha_8_SkColorType:
             return ToColor_SA8;
         case kRGBA_F16_SkColorType:
@@ -738,7 +680,7 @@
 
     bitmap.setInfo(SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType, colorSpace));
 
-    sk_sp<Bitmap> nativeBitmap = Bitmap::allocateHeapBitmap(&bitmap, NULL);
+    sk_sp<Bitmap> nativeBitmap = Bitmap::allocateHeapBitmap(&bitmap);
     if (!nativeBitmap) {
         ALOGE("OOM allocating Bitmap with dimensions %i x %i", width, height);
         doThrowOOME(env);
@@ -754,9 +696,6 @@
 
 static bool bitmapCopyTo(SkBitmap* dst, SkColorType dstCT, const SkBitmap& src,
         SkBitmap::Allocator* alloc) {
-    LOG_ALWAYS_FATAL_IF(kIndex_8_SkColorType == dstCT &&
-            kIndex_8_SkColorType != src.colorType(), "Error, cannot copyTo kIndex8.");
-
     SkPixmap srcPM;
     if (!src.peekPixels(&srcPM)) {
         return false;
@@ -769,7 +708,7 @@
             // allow the call to readPixels() to succeed and preserve this lenient behavior.
             if (kOpaque_SkAlphaType != srcPM.alphaType()) {
                 srcPM = SkPixmap(srcPM.info().makeAlphaType(kOpaque_SkAlphaType), srcPM.addr(),
-                                 srcPM.rowBytes(), srcPM.ctable());
+                                 srcPM.rowBytes());
                 dstInfo = dstInfo.makeAlphaType(kOpaque_SkAlphaType);
             }
             break;
@@ -790,7 +729,7 @@
     if (!dst->setInfo(dstInfo)) {
         return false;
     }
-    if (!dst->tryAllocPixels(alloc, srcPM.ctable())) {
+    if (!dst->tryAllocPixels(alloc)) {
         return false;
     }
 
@@ -803,7 +742,7 @@
                 for (int y = 0; y < src.height(); y++) {
                     const uint8_t* srcRow = srcPM.addr8(0, y);
                     uint32_t* dstRow = dst->getAddr32(0, y);
-                    ToColor_SA8(dstRow, srcRow, src.width(), nullptr);
+                    ToColor_SA8(dstRow, srcRow, src.width());
                 }
                 return true;
             }
@@ -1102,7 +1041,6 @@
             kRGBA_F16_SkColorType != colorType &&
             kRGB_565_SkColorType != colorType &&
             kARGB_4444_SkColorType != colorType &&
-            kIndex_8_SkColorType != colorType &&
             kAlpha_8_SkColorType != colorType) {
         SkDebugf("Bitmap_createFromParcel unknown colortype: %d\n", colorType);
         return NULL;
@@ -1114,24 +1052,6 @@
         return NULL;
     }
 
-    sk_sp<SkColorTable> ctable = NULL;
-    if (colorType == kIndex_8_SkColorType) {
-        int count = p->readInt32();
-        if (count < 0 || count > 256) {
-            // The data is corrupt, since SkColorTable enforces a value between 0 and 256,
-            // inclusive.
-            return NULL;
-        }
-        if (count > 0) {
-            size_t size = count * sizeof(SkPMColor);
-            const SkPMColor* src = (const SkPMColor*)p->readInplace(size);
-            if (src == NULL) {
-                return NULL;
-            }
-            ctable = SkColorTable::Make(src, count);
-        }
-    }
-
     // Read the bitmap blob.
     size_t size = bitmap->getSize();
     android::Parcel::ReadableBlob blob;
@@ -1163,7 +1083,7 @@
 
         // Map the pixels in place and take ownership of the ashmem region.
         nativeBitmap = sk_sp<Bitmap>(GraphicsJNI::mapAshmemBitmap(env, bitmap.get(),
-                ctable.get(), dupFd, const_cast<void*>(blob.data()), size, !isMutable));
+                dupFd, const_cast<void*>(blob.data()), size, !isMutable));
         if (!nativeBitmap) {
             close(dupFd);
             blob.release();
@@ -1188,7 +1108,7 @@
 #endif
 
         // Copy the pixels into a new buffer.
-        nativeBitmap = Bitmap::allocateHeapBitmap(bitmap.get(), ctable);
+        nativeBitmap = Bitmap::allocateHeapBitmap(bitmap.get());
         if (!nativeBitmap) {
             blob.release();
             doThrowRE(env, "Could not allocate java pixel ref.");
@@ -1243,19 +1163,6 @@
     p->writeInt32(bitmap.rowBytes());
     p->writeInt32(density);
 
-    if (bitmap.colorType() == kIndex_8_SkColorType) {
-        // The bitmap needs to be locked to access its color table.
-        SkColorTable* ctable = bitmap.getColorTable();
-        if (ctable != NULL) {
-            int count = ctable->count();
-            p->writeInt32(count);
-            memcpy(p->writeInplace(count * sizeof(SkPMColor)),
-                   ctable->readColors(), count * sizeof(SkPMColor));
-        } else {
-            p->writeInt32(0);   // indicate no ctable
-        }
-    }
-
     // Transfer the underlying ashmem region if we have one and it's immutable.
     android::status_t status;
     int fd = bitmapWrapper->bitmap().getAshmemFd();
@@ -1397,7 +1304,7 @@
     }
 
     SkColor dst[1];
-    proc(dst, src, 1, bitmap.getColorTable());
+    proc(dst, src, 1);
 
     SkColorSpace* colorSpace = bitmap.colorSpace();
     if (bitmap.colorType() != kRGBA_F16_SkColorType &&
@@ -1427,7 +1334,6 @@
         return;
     }
 
-    SkColorTable* ctable = bitmap.getColorTable();
     jint* dst = env->GetIntArrayElements(pixelArray, NULL);
     SkColor* d = (SkColor*)dst + offset;
 
@@ -1435,7 +1341,7 @@
     if (bitmap.colorType() == kRGBA_F16_SkColorType ||
             GraphicsJNI::isColorSpaceSRGB(colorSpace)) {
         while (--height >= 0) {
-            proc(d, src, width, ctable);
+            proc(d, src, width);
             d += stride;
             src = (void*)((const char*)src + bitmap.rowBytes());
         }
@@ -1444,7 +1350,7 @@
         auto xform = SkColorSpaceXform::New(colorSpace, sRGB.get());
 
         while (--height >= 0) {
-            proc(d, src, width, ctable);
+            proc(d, src, width);
 
             xform->apply(SkColorSpaceXform::kBGRA_8888_ColorFormat, d,
                     SkColorSpaceXform::kBGRA_8888_ColorFormat, d, width,
@@ -1554,22 +1460,6 @@
         return JNI_FALSE;
     }
 
-    if (bm0.colorType() == kIndex_8_SkColorType) {
-        SkColorTable* ct0 = bm0.getColorTable();
-        SkColorTable* ct1 = bm1.getColorTable();
-        if (NULL == ct0 || NULL == ct1) {
-            return JNI_FALSE;
-        }
-        if (ct0->count() != ct1->count()) {
-            return JNI_FALSE;
-        }
-
-        const size_t size = ct0->count() * sizeof(SkPMColor);
-        if (memcmp(ct0->readColors(), ct1->readColors(), size) != 0) {
-            return JNI_FALSE;
-        }
-    }
-
     // now compare each scanline. We can't do the entire buffer at once,
     // since we don't care about the pixel values that might extend beyond
     // the width (since the scanline might be larger than the logical width)
diff --git a/core/jni/android/graphics/Bitmap.h b/core/jni/android/graphics/Bitmap.h
index a4bfc94..06877915 100644
--- a/core/jni/android/graphics/Bitmap.h
+++ b/core/jni/android/graphics/Bitmap.h
@@ -19,9 +19,7 @@
 #include <jni.h>
 #include <android/bitmap.h>
 #include <SkBitmap.h>
-#include <SkColorTable.h>
 #include <SkImageInfo.h>
-#include <SkPixelRef.h>
 
 namespace android {
 
diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp
index 5a25d5e..325f6d4 100644
--- a/core/jni/android/graphics/BitmapFactory.cpp
+++ b/core/jni/android/graphics/BitmapFactory.cpp
@@ -14,7 +14,7 @@
 #include "Utils.h"
 #include "core_jni_helpers.h"
 
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <androidfw/Asset.h>
 #include <androidfw/ResourceTypes.h>
 #include <cutils/compiler.h>
@@ -75,6 +75,9 @@
         case SkEncodedImageFormat::kWEBP:
             mimeType = "image/webp";
             break;
+        case SkEncodedImageFormat::kHEIF:
+            mimeType = "image/heif";
+            break;
         case SkEncodedImageFormat::kWBMP:
             mimeType = "image/vnd.wap.wbmp";
             break;
@@ -130,27 +133,15 @@
     scaleDivRange(chunk->getYDivs(), chunk->numYDivs, scale, scaledHeight);
 }
 
-static SkColorType colorTypeForScaledOutput(SkColorType colorType) {
-    switch (colorType) {
-        case kUnknown_SkColorType:
-        case kIndex_8_SkColorType:
-            return kN32_SkColorType;
-        default:
-            break;
-    }
-    return colorType;
-}
-
 class ScaleCheckingAllocator : public SkBitmap::HeapAllocator {
 public:
     ScaleCheckingAllocator(float scale, int size)
             : mScale(scale), mSize(size) {
     }
 
-    virtual bool allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) {
+    virtual bool allocPixelRef(SkBitmap* bitmap) {
         // accounts for scale in final allocation, using eventual size and config
-        const int bytesPerPixel = SkColorTypeBytesPerPixel(
-                colorTypeForScaledOutput(bitmap->colorType()));
+        const int bytesPerPixel = SkColorTypeBytesPerPixel(bitmap->colorType());
         const int requestedSize = bytesPerPixel *
                 int(bitmap->width() * mScale + 0.5f) *
                 int(bitmap->height() * mScale + 0.5f);
@@ -159,7 +150,7 @@
                     mSize, requestedSize);
             return false;
         }
-        return SkBitmap::HeapAllocator::allocPixelRef(bitmap, ctable);
+        return SkBitmap::HeapAllocator::allocPixelRef(bitmap);
     }
 private:
     const float mScale;
@@ -175,7 +166,7 @@
     ~RecyclingPixelAllocator() {
     }
 
-    virtual bool allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) {
+    virtual bool allocPixelRef(SkBitmap* bitmap) {
         const SkImageInfo& info = bitmap->info();
         if (info.colorType() == kUnknown_SkColorType) {
             ALOGW("unable to reuse a bitmap as the target has an unknown bitmap configuration");
@@ -195,7 +186,7 @@
             return false;
         }
 
-        mBitmap->reconfigure(info, bitmap->rowBytes(), sk_ref_sp(ctable));
+        mBitmap->reconfigure(info, bitmap->rowBytes());
         bitmap->setPixelRef(sk_ref_sp(mBitmap), 0, 0);
         return true;
     }
@@ -334,13 +325,7 @@
         env->SetIntField(options, gOptions_heightFieldID, scaledHeight);
         env->SetObjectField(options, gOptions_mimeFieldID, mimeType);
 
-        SkColorType outColorType = decodeColorType;
-        // Scaling can affect the output color type
-        if (willScale || scale != 1.0f) {
-            outColorType = colorTypeForScaledOutput(outColorType);
-        }
-
-        jint configID = GraphicsJNI::colorTypeToLegacyBitmapConfig(outColorType);
+        jint configID = GraphicsJNI::colorTypeToLegacyBitmapConfig(decodeColorType);
         if (isHardware) {
             configID = GraphicsJNI::kHardware_LegacyBitmapConfig;
         }
@@ -397,24 +382,6 @@
         decodeAllocator = &defaultAllocator;
     }
 
-    // Construct a color table for the decode if necessary
-    sk_sp<SkColorTable> colorTable(nullptr);
-    SkPMColor* colorPtr = nullptr;
-    int* colorCount = nullptr;
-    int maxColors = 256;
-    SkPMColor colors[256];
-    if (kIndex_8_SkColorType == decodeColorType) {
-        colorTable.reset(new SkColorTable(colors, maxColors));
-
-        // SkColorTable expects us to initialize all of the colors before creating an
-        // SkColorTable.  However, we are using SkBitmap with an Allocator to allocate
-        // memory for the decode, so we need to create the SkColorTable before decoding.
-        // It is safe for SkAndroidCodec to modify the colors because this SkBitmap is
-        // not being used elsewhere.
-        colorPtr = const_cast<SkPMColor*>(colorTable->readColors());
-        colorCount = &maxColors;
-    }
-
     SkAlphaType alphaType = codec->computeOutputAlphaType(requireUnpremultiplied);
 
     const SkImageInfo decodeInfo = SkImageInfo::Make(size.width(), size.height(),
@@ -437,7 +404,7 @@
     }
     SkBitmap decodingBitmap;
     if (!decodingBitmap.setInfo(bitmapInfo) ||
-            !decodingBitmap.tryAllocPixels(decodeAllocator, colorTable.get())) {
+            !decodingBitmap.tryAllocPixels(decodeAllocator)) {
         // SkAndroidCodec should recommend a valid SkImageInfo, so setInfo()
         // should only only fail if the calculated value for rowBytes is too
         // large.
@@ -450,8 +417,6 @@
     SkAndroidCodec::AndroidOptions codecOptions;
     codecOptions.fZeroInitialized = decodeAllocator == &defaultAllocator ?
             SkCodec::kYes_ZeroInitialized : SkCodec::kNo_ZeroInitialized;
-    codecOptions.fColorPtr = colorPtr;
-    codecOptions.fColorCount = colorCount;
     codecOptions.fSampleSize = sampleSize;
     SkCodec::Result result = codec->getAndroidPixels(decodeInfo, decodingBitmap.getPixels(),
             decodingBitmap.rowBytes(), &codecOptions);
@@ -518,13 +483,13 @@
             outputAllocator = &defaultAllocator;
         }
 
-        SkColorType scaledColorType = colorTypeForScaledOutput(decodingBitmap.colorType());
+        SkColorType scaledColorType = decodingBitmap.colorType();
         // FIXME: If the alphaType is kUnpremul and the image has alpha, the
         // colors may not be correct, since Skia does not yet support drawing
         // to/from unpremultiplied bitmaps.
         outputBitmap.setInfo(
                 bitmapInfo.makeWH(scaledWidth, scaledHeight).makeColorType(scaledColorType));
-        if (!outputBitmap.tryAllocPixels(outputAllocator, NULL)) {
+        if (!outputBitmap.tryAllocPixels(outputAllocator)) {
             // This should only fail on OOM.  The recyclingAllocator should have
             // enough memory since we check this before decoding using the
             // scaleCheckingAllocator.
@@ -579,6 +544,9 @@
 
     if (isHardware) {
         sk_sp<Bitmap> hardwareBitmap = Bitmap::allocateHardwareBitmap(outputBitmap);
+        if (!hardwareBitmap.get()) {
+            return nullObjectReturn("Failed to allocate a hardware bitmap");
+        }
         return bitmap::createBitmap(env, hardwareBitmap.release(), bitmapCreateFlags,
                 ninePatchChunk, ninePatchInsets, -1);
     }
diff --git a/core/jni/android/graphics/BitmapRegionDecoder.cpp b/core/jni/android/graphics/BitmapRegionDecoder.cpp
index 9355cfc..3b081ef 100644
--- a/core/jni/android/graphics/BitmapRegionDecoder.cpp
+++ b/core/jni/android/graphics/BitmapRegionDecoder.cpp
@@ -33,7 +33,7 @@
 #include "android_util_Binder.h"
 #include "core_jni_helpers.h"
 
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <androidfw/Asset.h>
 #include <binder/Parcel.h>
 #include <jni.h>
diff --git a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp b/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp
index 067489a..0e907c3 100644
--- a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp
+++ b/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp
@@ -5,7 +5,7 @@
 #include "SkTypes.h"
 #include "Utils.h"
 
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <memory>
 
 static jmethodID    gInputStream_readMethodID;
diff --git a/core/jni/android/graphics/FontFamily.cpp b/core/jni/android/graphics/FontFamily.cpp
index 9ad57b1..4cf2b56 100644
--- a/core/jni/android/graphics/FontFamily.cpp
+++ b/core/jni/android/graphics/FontFamily.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "Minikin"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <core_jni_helpers.h>
 
 #include "SkData.h"
@@ -24,8 +24,8 @@
 #include "SkRefCnt.h"
 #include "SkTypeface.h"
 #include "GraphicsJNI.h"
-#include <ScopedPrimitiveArray.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
+#include <nativehelper/ScopedUtfChars.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/android_util_AssetManager.h>
 #include <androidfw/AssetManager.h>
diff --git a/core/jni/android/graphics/GIFMovie.cpp b/core/jni/android/graphics/GIFMovie.cpp
index e501cf8..dd99b37 100644
--- a/core/jni/android/graphics/GIFMovie.cpp
+++ b/core/jni/android/graphics/GIFMovie.cpp
@@ -391,8 +391,8 @@
     }
 
     SkColor bgColor = SkPackARGB32(0, 0, 0, 0);
-    if (gif->SColorMap != nullptr) {
-        const GifColorType& col = gif->SColorMap->Colors[fGIF->SBackGroundColor];
+    if (gif->SColorMap != nullptr && gif->SBackGroundColor < gif->SColorMap->ColorCount) {
+        const GifColorType& col = gif->SColorMap->Colors[gif->SBackGroundColor];
         bgColor = SkColorSetARGB(0xFF, col.Red, col.Green, col.Blue);
     }
 
diff --git a/core/jni/android/graphics/Graphics.cpp b/core/jni/android/graphics/Graphics.cpp
index 5a2238f..7c75ff4 100644
--- a/core/jni/android/graphics/Graphics.cpp
+++ b/core/jni/android/graphics/Graphics.cpp
@@ -4,7 +4,7 @@
 #include <sys/mman.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "GraphicsJNI.h"
 #include "core_jni_helpers.h"
 
@@ -327,8 +327,6 @@
             return kARGB_4444_LegacyBitmapConfig;
         case kRGB_565_SkColorType:
             return kRGB_565_LegacyBitmapConfig;
-        case kIndex_8_SkColorType:
-            return kIndex8_LegacyBitmapConfig;
         case kAlpha_8_SkColorType:
             return kA8_LegacyBitmapConfig;
         case kUnknown_SkColorType:
@@ -342,7 +340,7 @@
     const uint8_t gConfig2ColorType[] = {
         kUnknown_SkColorType,
         kAlpha_8_SkColorType,
-        kIndex_8_SkColorType,
+        kUnknown_SkColorType, // Previously kIndex_8_SkColorType,
         kRGB_565_SkColorType,
         kARGB_4444_SkColorType,
         kN32_SkColorType,
@@ -435,7 +433,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 android::Bitmap* GraphicsJNI::mapAshmemBitmap(JNIEnv* env, SkBitmap* bitmap,
-        SkColorTable* ctable, int fd, void* addr, size_t size, bool readOnly) {
+        int fd, void* addr, size_t size, bool readOnly) {
     const SkImageInfo& info = bitmap->info();
     if (info.colorType() == kUnknown_SkColorType) {
         doThrowIAE(env, "unknown bitmap configuration");
@@ -456,7 +454,7 @@
     // attempting to compute our own.
     const size_t rowBytes = bitmap->rowBytes();
 
-    auto wrapper = new android::Bitmap(addr, fd, size, info, rowBytes, sk_ref_sp(ctable));
+    auto wrapper = new android::Bitmap(addr, fd, size, info, rowBytes);
     wrapper->getSkBitmap(bitmap);
     if (readOnly) {
         bitmap->pixelRef()->setImmutable();
@@ -609,8 +607,8 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////
-bool HeapAllocator::allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) {
-    mStorage = android::Bitmap::allocateHeapBitmap(bitmap, sk_ref_sp(ctable));
+bool HeapAllocator::allocPixelRef(SkBitmap* bitmap) {
+    mStorage = android::Bitmap::allocateHeapBitmap(bitmap);
     return !!mStorage;
 }
 
@@ -626,7 +624,7 @@
 
 RecyclingClippingPixelAllocator::~RecyclingClippingPixelAllocator() {}
 
-bool RecyclingClippingPixelAllocator::allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) {
+bool RecyclingClippingPixelAllocator::allocPixelRef(SkBitmap* bitmap) {
     // Ensure that the caller did not pass in a NULL bitmap to the constructor or this
     // function.
     LOG_ALWAYS_FATAL_IF(!mRecycledBitmap);
@@ -649,7 +647,7 @@
     const size_t rowBytes = maxInfo.minRowBytes();
     const size_t bytesNeeded = maxInfo.getSafeSize(rowBytes);
     if (bytesNeeded <= mRecycledBytes) {
-        // Here we take advantage of reconfigure() to reset the rowBytes and ctable
+        // Here we take advantage of reconfigure() to reset the rowBytes
         // of mRecycledBitmap.  It is very important that we pass in
         // mRecycledBitmap->info() for the SkImageInfo.  According to the
         // specification for BitmapRegionDecoder, we are not allowed to change
@@ -658,7 +656,7 @@
         // storage needs
         mRecycledBitmap->reconfigure(
                 mRecycledBitmap->info().makeColorSpace(bitmap->refColorSpace()),
-                rowBytes, sk_ref_sp(ctable));
+                rowBytes);
 
         // Give the bitmap the same pixelRef as mRecycledBitmap.
         // skbug.com/4538: We also need to make sure that the rowBytes on the pixel ref
@@ -685,7 +683,7 @@
     // decode is complete.
     mNeedsCopy = true;
 
-    return heapAllocator.allocPixelRef(bitmap, ctable);
+    return heapAllocator.allocPixelRef(bitmap);
 }
 
 void RecyclingClippingPixelAllocator::copyIfNecessary() {
@@ -716,8 +714,8 @@
             "env->GetJavaVM failed");
 }
 
-bool AshmemPixelAllocator::allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) {
-    mStorage = android::Bitmap::allocateAshmemBitmap(bitmap, sk_ref_sp(ctable));
+bool AshmemPixelAllocator::allocPixelRef(SkBitmap* bitmap) {
+    mStorage = android::Bitmap::allocateAshmemBitmap(bitmap);
     return !!mStorage;
 }
 
diff --git a/core/jni/android/graphics/GraphicsJNI.h b/core/jni/android/graphics/GraphicsJNI.h
index 7fbea25..7f4b384 100644
--- a/core/jni/android/graphics/GraphicsJNI.h
+++ b/core/jni/android/graphics/GraphicsJNI.h
@@ -91,7 +91,7 @@
     static jobject createBitmapRegionDecoder(JNIEnv* env, SkBitmapRegionDecoder* bitmap);
 
     static android::Bitmap* mapAshmemBitmap(JNIEnv* env, SkBitmap* bitmap,
-            SkColorTable* ctable, int fd, void* addr, size_t size, bool readOnly);
+            int fd, void* addr, size_t size, bool readOnly);
 
     /**
      * Given a bitmap we natively allocate a memory block to store the contents
@@ -99,7 +99,7 @@
      * SkPixelRef, which ensures that upon deletion the appropriate caches
      * are notified.
      */
-    static bool allocatePixels(JNIEnv* env, SkBitmap* bitmap, SkColorTable* ctable);
+    static bool allocatePixels(JNIEnv* env, SkBitmap* bitmap);
 
     /** Copy the colors in colors[] to the bitmap, convert to the correct
         format along the way.
@@ -127,7 +127,7 @@
    HeapAllocator() { };
     ~HeapAllocator() { };
 
-    virtual bool allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) override;
+    virtual bool allocPixelRef(SkBitmap* bitmap) override;
 
     /**
      * Fetches the backing allocation object. Must be called!
@@ -176,7 +176,7 @@
 
     ~RecyclingClippingPixelAllocator();
 
-    virtual bool allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) override;
+    virtual bool allocPixelRef(SkBitmap* bitmap) override;
 
     /**
      *  Must be called!
@@ -206,7 +206,7 @@
 public:
     explicit AshmemPixelAllocator(JNIEnv* env);
     ~AshmemPixelAllocator() { };
-    virtual bool allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable);
+    virtual bool allocPixelRef(SkBitmap* bitmap);
     android::Bitmap* getStorageObjAndReset() {
         return mStorage.release();
     };
diff --git a/core/jni/android/graphics/Movie.cpp b/core/jni/android/graphics/Movie.cpp
index 776ed66..b243817 100644
--- a/core/jni/android/graphics/Movie.cpp
+++ b/core/jni/android/graphics/Movie.cpp
@@ -1,6 +1,6 @@
 #include "CreateJavaOutputStreamAdaptor.h"
 #include "GraphicsJNI.h"
-#include "ScopedLocalRef.h"
+#include <nativehelper/ScopedLocalRef.h>
 #include "SkFrontBufferedStream.h"
 #include "Movie.h"
 #include "SkStream.h"
diff --git a/core/jni/android/graphics/NinePatch.cpp b/core/jni/android/graphics/NinePatch.cpp
index 91e5caf..460a0d7 100644
--- a/core/jni/android/graphics/NinePatch.cpp
+++ b/core/jni/android/graphics/NinePatch.cpp
@@ -31,7 +31,7 @@
 #include "GraphicsJNI.h"
 #include "NinePatchUtils.h"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 using namespace android;
@@ -91,7 +91,6 @@
             jlong chunkHandle, jobject dstRect) {
         Res_png_9patch* chunk = reinterpret_cast<Res_png_9patch*>(chunkHandle);
         SkASSERT(chunk);
-        SkASSERT(boundsRect);
 
         SkBitmap bitmap;
         GraphicsJNI::getSkBitmap(env, jbitmap, &bitmap);
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index fa25a8f..7c7a1c7 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -22,8 +22,8 @@
 #include "jni.h"
 #include "GraphicsJNI.h"
 #include "core_jni_helpers.h"
-#include <ScopedStringChars.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedStringChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 
 #include "SkBlurDrawLooper.h"
 #include "SkColorFilter.h"
@@ -961,6 +961,40 @@
         return SkScalarToFloat(metrics.fDescent);
     }
 
+    static jfloat getUnderlinePosition(jlong paintHandle, jlong typefaceHandle) {
+        Paint::FontMetrics metrics;
+        getMetricsInternal(paintHandle, typefaceHandle, &metrics);
+        SkScalar position;
+        if (metrics.hasUnderlinePosition(&position)) {
+            return SkScalarToFloat(position);
+        } else {
+            const SkScalar textSize = reinterpret_cast<Paint*>(paintHandle)->getTextSize();
+            return SkScalarToFloat(Paint::kStdUnderline_Top * textSize);
+        }
+    }
+
+    static jfloat getUnderlineThickness(jlong paintHandle, jlong typefaceHandle) {
+        Paint::FontMetrics metrics;
+        getMetricsInternal(paintHandle, typefaceHandle, &metrics);
+        SkScalar thickness;
+        if (metrics.hasUnderlineThickness(&thickness)) {
+            return SkScalarToFloat(thickness);
+        } else {
+            const SkScalar textSize = reinterpret_cast<Paint*>(paintHandle)->getTextSize();
+            return SkScalarToFloat(Paint::kStdUnderline_Thickness * textSize);
+        }
+    }
+
+    static jfloat getStrikeThruPosition(jlong paintHandle, jlong typefaceHandle) {
+        const SkScalar textSize = reinterpret_cast<Paint*>(paintHandle)->getTextSize();
+        return SkScalarToFloat(Paint::kStdStrikeThru_Top * textSize);
+    }
+
+    static jfloat getStrikeThruThickness(jlong paintHandle, jlong typefaceHandle) {
+        const SkScalar textSize = reinterpret_cast<Paint*>(paintHandle)->getTextSize();
+        return SkScalarToFloat(Paint::kStdStrikeThru_Thickness * textSize);
+    }
+
     static void setShadowLayer(jlong paintHandle, jfloat radius,
                                jfloat dx, jfloat dy, jint color) {
         Paint* paint = reinterpret_cast<Paint*>(paintHandle);
@@ -1072,6 +1106,10 @@
     {"nSetHyphenEdit", "(JI)V", (void*) PaintGlue::setHyphenEdit},
     {"nAscent","(JJ)F", (void*) PaintGlue::ascent},
     {"nDescent","(JJ)F", (void*) PaintGlue::descent},
+    {"nGetUnderlinePosition","(JJ)F", (void*) PaintGlue::getUnderlinePosition},
+    {"nGetUnderlineThickness","(JJ)F", (void*) PaintGlue::getUnderlineThickness},
+    {"nGetStrikeThruPosition","(JJ)F", (void*) PaintGlue::getStrikeThruPosition},
+    {"nGetStrikeThruThickness","(JJ)F", (void*) PaintGlue::getStrikeThruThickness},
     {"nSetShadowLayer", "(JFFFI)V", (void*)PaintGlue::setShadowLayer},
     {"nHasShadowLayer", "(J)Z", (void*)PaintGlue::hasShadowLayer}
 };
diff --git a/core/jni/android/graphics/Typeface.cpp b/core/jni/android/graphics/Typeface.cpp
index eb2ca5d..e4540c0 100644
--- a/core/jni/android/graphics/Typeface.cpp
+++ b/core/jni/android/graphics/Typeface.cpp
@@ -19,7 +19,7 @@
 
 #include "FontUtils.h"
 #include "GraphicsJNI.h"
-#include "ScopedPrimitiveArray.h"
+#include <nativehelper/ScopedPrimitiveArray.h>
 #include "SkTypeface.h"
 #include <android_runtime/android_util_AssetManager.h>
 #include <androidfw/AssetManager.h>
diff --git a/core/jni/android/graphics/pdf/PdfEditor.cpp b/core/jni/android/graphics/pdf/PdfEditor.cpp
index c727519..e75712c 100644
--- a/core/jni/android/graphics/pdf/PdfEditor.cpp
+++ b/core/jni/android/graphics/pdf/PdfEditor.cpp
@@ -26,7 +26,7 @@
 #include "PdfUtils.h"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor"
diff --git a/core/jni/android/graphics/pdf/PdfRenderer.cpp b/core/jni/android/graphics/pdf/PdfRenderer.cpp
index 33bbdc4..95cdbb5 100644
--- a/core/jni/android/graphics/pdf/PdfRenderer.cpp
+++ b/core/jni/android/graphics/pdf/PdfRenderer.cpp
@@ -17,7 +17,7 @@
 #include "PdfUtils.h"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "GraphicsJNI.h"
 #include "SkBitmap.h"
 #include "SkMatrix.h"
diff --git a/core/jni/android/opengl/util.cpp b/core/jni/android/opengl/util.cpp
index 1370e61..1522c20 100644
--- a/core/jni/android/opengl/util.cpp
+++ b/core/jni/android/opengl/util.cpp
@@ -15,7 +15,7 @@
  */
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "GraphicsJNI.h"
 
 #include <math.h>
@@ -49,27 +49,6 @@
     pDest[3] = pM[3 + 4 * 0] * x + pM[3 + 4 * 1] * y + pM[3 + 4 * 2] * z + pM[3 + 4 * 3] * w;
 }
 
-class MallocHelper {
-public:
-    MallocHelper() {
-        mData = 0;
-    }
-
-    ~MallocHelper() {
-        if (mData != 0) {
-            free(mData);
-        }
-    }
-
-    void* alloc(size_t size) {
-        mData = malloc(size);
-        return mData;
-    }
-
-private:
-    void* mData;
-};
-
 #if 0
 static
 void
@@ -85,10 +64,7 @@
 static
 int visibilityTest(float* pWS, float* pPositions, int positionsLength,
         unsigned short* pIndices, int indexCount) {
-    MallocHelper mallocHelper;
     int result = POLY_CLIP_OUT;
-    float* pTransformed = 0;
-    int transformedIndexCount = 0;
 
     if ( indexCount < 3 ) {
         return POLY_CLIP_OUT;
@@ -116,8 +92,9 @@
         return -1;
     }
 
-    transformedIndexCount = maxIndex - minIndex + 1;
-    pTransformed = (float*) mallocHelper.alloc(transformedIndexCount * 4 * sizeof(float));
+    int transformedIndexCount = maxIndex - minIndex + 1;
+    std::unique_ptr<float[]> holder{new float[transformedIndexCount * 4]};
+    float* pTransformed = holder.get();
 
     if (pTransformed == 0 ) {
         return -2;
@@ -646,9 +623,6 @@
 static int checkFormat(SkColorType colorType, int format, int type)
 {
     switch(colorType) {
-        case kIndex_8_SkColorType:
-            if (format == GL_PALETTE8_RGBA8_OES)
-                return 0;
         case kN32_SkColorType:
         case kAlpha_8_SkColorType:
             if (type == GL_UNSIGNED_BYTE)
@@ -680,8 +654,6 @@
             return GL_RGBA;
         case kN32_SkColorType:
             return GL_RGBA;
-        case kIndex_8_SkColorType:
-            return GL_PALETTE8_RGBA8_OES;
         case kRGB_565_SkColorType:
             return GL_RGB;
         default:
@@ -698,8 +670,6 @@
             return GL_UNSIGNED_SHORT_4_4_4_4;
         case kN32_SkColorType:
             return GL_UNSIGNED_BYTE;
-        case kIndex_8_SkColorType:
-            return -1; // No type for compressed data.
         case kRGB_565_SkColorType:
             return GL_UNSIGNED_SHORT_5_6_5;
         default:
@@ -743,28 +713,10 @@
     const int h = bitmap.height();
     const void* p = bitmap.getPixels();
     if (internalformat == GL_PALETTE8_RGBA8_OES) {
-        if (sizeof(SkPMColor) != sizeof(uint32_t)) {
-            err = -1;
-            goto error;
-        }
-        const size_t size = bitmap.getSize();
-        const size_t palette_size = 256*sizeof(SkPMColor);
-        const size_t imageSize = size + palette_size;
-        void* const data = malloc(imageSize);
-        if (data) {
-            void* const pixels = (char*)data + palette_size;
-            SkColorTable* ctable = bitmap.getColorTable();
-            memcpy(data, ctable->readColors(), ctable->count() * sizeof(SkPMColor));
-            memcpy(pixels, p, size);
-            glCompressedTexImage2D(target, level, internalformat, w, h, border, imageSize, data);
-            free(data);
-        } else {
-            err = -1;
-        }
+        err = -1;
     } else {
         glTexImage2D(target, level, internalformat, w, h, border, internalformat, type, p);
     }
-error:
     return err;
 }
 
diff --git a/core/jni/android_app_NativeActivity.cpp b/core/jni/android_app_NativeActivity.cpp
index ee74ef0..18f3177 100644
--- a/core/jni/android_app_NativeActivity.cpp
+++ b/core/jni/android_app_NativeActivity.cpp
@@ -35,7 +35,7 @@
 
 #include <utils/Looper.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_os_MessageQueue.h"
 #include "android_view_InputChannel.h"
 #include "android_view_KeyEvent.h"
@@ -45,7 +45,7 @@
 
 #include "core_jni_helpers.h"
 
-#include "ScopedUtfChars.h"
+#include <nativehelper/ScopedUtfChars.h>
 
 #define LOG_TRACE(...)
 //#define LOG_TRACE(...) ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)
diff --git a/core/jni/android_app_admin_SecurityLog.cpp b/core/jni/android_app_admin_SecurityLog.cpp
index e8ca793..5c45b4b 100644
--- a/core/jni/android_app_admin_SecurityLog.cpp
+++ b/core/jni/android_app_admin_SecurityLog.cpp
@@ -16,7 +16,7 @@
 
 #include <fcntl.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 #include "jni.h"
 #include <private/android_logger.h>
diff --git a/core/jni/android_app_backup_FullBackup.cpp b/core/jni/android_app_backup_FullBackup.cpp
index 63b2e2a..3e39989 100644
--- a/core/jni/android_app_backup_FullBackup.cpp
+++ b/core/jni/android_app_backup_FullBackup.cpp
@@ -20,7 +20,7 @@
 #include <utils/Log.h>
 #include <utils/String8.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 
 #include <androidfw/BackupHelpers.h>
diff --git a/core/jni/android_backup_BackupDataInput.cpp b/core/jni/android_backup_BackupDataInput.cpp
index 096a784..aa8acc16 100644
--- a/core/jni/android_backup_BackupDataInput.cpp
+++ b/core/jni/android_backup_BackupDataInput.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "FileBackupHelper_native"
 #include <utils/Log.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 
 #include <androidfw/BackupHelpers.h>
diff --git a/core/jni/android_backup_BackupDataOutput.cpp b/core/jni/android_backup_BackupDataOutput.cpp
index a7894f4..4f5d1f80 100644
--- a/core/jni/android_backup_BackupDataOutput.cpp
+++ b/core/jni/android_backup_BackupDataOutput.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "FileBackupHelper_native"
 #include <utils/Log.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 #include <androidfw/BackupHelpers.h>
diff --git a/core/jni/android_backup_BackupHelperDispatcher.cpp b/core/jni/android_backup_BackupHelperDispatcher.cpp
index 80bdaf8..fac7eba 100644
--- a/core/jni/android_backup_BackupHelperDispatcher.cpp
+++ b/core/jni/android_backup_BackupHelperDispatcher.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "BackupHelperDispatcher_native"
 #include <utils/Log.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 
 #include <sys/types.h>
diff --git a/core/jni/android_backup_FileBackupHelperBase.cpp b/core/jni/android_backup_FileBackupHelperBase.cpp
index 6d6ac1b..65840ee 100644
--- a/core/jni/android_backup_FileBackupHelperBase.cpp
+++ b/core/jni/android_backup_FileBackupHelperBase.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "FileBackupHelper_native"
 #include <utils/Log.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 #include <androidfw/BackupHelpers.h>
diff --git a/core/jni/android_content_res_ObbScanner.cpp b/core/jni/android_content_res_ObbScanner.cpp
index 36d78cf..de429a0 100644
--- a/core/jni/android_content_res_ObbScanner.cpp
+++ b/core/jni/android_content_res_ObbScanner.cpp
@@ -21,7 +21,7 @@
 #include <androidfw/ObbFile.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "utils/misc.h"
 #include "android_runtime/AndroidRuntime.h"
 
diff --git a/core/jni/android_database_CursorWindow.cpp b/core/jni/android_database_CursorWindow.cpp
index f1fa76a..0d09b56 100644
--- a/core/jni/android_database_CursorWindow.cpp
+++ b/core/jni/android_database_CursorWindow.cpp
@@ -20,7 +20,7 @@
 
 #include <inttypes.h>
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 
 #include <utils/Log.h>
diff --git a/core/jni/android_database_SQLiteCommon.h b/core/jni/android_database_SQLiteCommon.h
index 0cac176..81164ef 100644
--- a/core/jni/android_database_SQLiteCommon.h
+++ b/core/jni/android_database_SQLiteCommon.h
@@ -18,7 +18,7 @@
 #define _ANDROID_DATABASE_SQLITE_COMMON_H
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 
 #include <sqlite3.h>
 
diff --git a/core/jni/android_database_SQLiteConnection.cpp b/core/jni/android_database_SQLiteConnection.cpp
index bcc3bb0..c3f9bf7 100644
--- a/core/jni/android_database_SQLiteConnection.cpp
+++ b/core/jni/android_database_SQLiteConnection.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "SQLiteConnection"
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/Log.h>
 
@@ -112,7 +112,8 @@
 
 
 static jlong nativeOpen(JNIEnv* env, jclass clazz, jstring pathStr, jint openFlags,
-        jstring labelStr, jboolean enableTrace, jboolean enableProfile) {
+        jstring labelStr, jboolean enableTrace, jboolean enableProfile, jint lookasideSz,
+        jint lookasideCnt) {
     int sqliteFlags;
     if (openFlags & SQLiteConnection::CREATE_IF_NECESSARY) {
         sqliteFlags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
@@ -137,6 +138,16 @@
         return 0;
     }
 
+    if (lookasideSz >= 0 && lookasideCnt >= 0) {
+        int err = sqlite3_db_config(db, SQLITE_DBCONFIG_LOOKASIDE, NULL, lookasideSz, lookasideCnt);
+        if (err != SQLITE_OK) {
+            ALOGE("sqlite3_db_config(..., %d, %d) failed: %d", lookasideSz, lookasideCnt, err);
+            throw_sqlite3_exception(env, db, "Cannot set lookaside");
+            sqlite3_close(db);
+            return 0;
+        }
+    }
+
     // Check that the database is really read/write when that is what we asked for.
     if ((sqliteFlags & SQLITE_OPEN_READWRITE) && sqlite3_db_readonly(db, NULL)) {
         throw_sqlite3_exception(env, db, "Could not open the database in read/write mode.");
@@ -789,7 +800,7 @@
 static const JNINativeMethod sMethods[] =
 {
     /* name, signature, funcPtr */
-    { "nativeOpen", "(Ljava/lang/String;ILjava/lang/String;ZZ)J",
+    { "nativeOpen", "(Ljava/lang/String;ILjava/lang/String;ZZII)J",
             (void*)nativeOpen },
     { "nativeClose", "(J)V",
             (void*)nativeClose },
diff --git a/core/jni/android_database_SQLiteDebug.cpp b/core/jni/android_database_SQLiteDebug.cpp
index 4e4c36c..3ba9b91 100644
--- a/core/jni/android_database_SQLiteDebug.cpp
+++ b/core/jni/android_database_SQLiteDebug.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "SQLiteDebug"
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 
 #include <stdio.h>
diff --git a/core/jni/android_database_SQLiteGlobal.cpp b/core/jni/android_database_SQLiteGlobal.cpp
index 03e2387..ec5dc4a 100644
--- a/core/jni/android_database_SQLiteGlobal.cpp
+++ b/core/jni/android_database_SQLiteGlobal.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "SQLiteGlobal"
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 #include <sqlite3.h>
diff --git a/core/jni/android_ddm_DdmHandleNativeHeap.cpp b/core/jni/android_ddm_DdmHandleNativeHeap.cpp
index 3e7a04e..2f25d8f 100644
--- a/core/jni/android_ddm_DdmHandleNativeHeap.cpp
+++ b/core/jni/android_ddm_DdmHandleNativeHeap.cpp
@@ -18,7 +18,7 @@
 #undef LOG_TAG
 #define LOG_TAG "DdmHandleNativeHeap"
 
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <jni.h>
 #include "core_jni_helpers.h"
 
diff --git a/core/jni/android_graphics_Canvas.cpp b/core/jni/android_graphics_Canvas.cpp
index c0f719e..80f6abe 100644
--- a/core/jni/android_graphics_Canvas.cpp
+++ b/core/jni/android_graphics_Canvas.cpp
@@ -452,7 +452,7 @@
             GraphicsJNI::defaultColorSpace());
     SkBitmap bitmap;
     bitmap.setInfo(info);
-    sk_sp<Bitmap> androidBitmap = Bitmap::allocateHeapBitmap(&bitmap, NULL);
+    sk_sp<Bitmap> androidBitmap = Bitmap::allocateHeapBitmap(&bitmap);
     if (!androidBitmap) {
         return;
     }
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index d606c2d..d6f8dc4 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -20,7 +20,7 @@
 #include <utils/Log.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 #include <android_runtime/android_graphics_SurfaceTexture.h>
 #include <android_runtime/android_view_Surface.h>
diff --git a/core/jni/android_hardware_Radio.cpp b/core/jni/android_hardware_Radio.cpp
deleted file mode 100644
index 39e615c..0000000
--- a/core/jni/android_hardware_Radio.cpp
+++ /dev/null
@@ -1,967 +0,0 @@
-/*
-**
-** Copyright 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.
-*/
-
-#define LOG_NDEBUG 1
-#define LOG_TAG "Radio-JNI"
-#include <utils/Log.h>
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "core_jni_helpers.h"
-#include <system/radio.h>
-#include <system/RadioMetadataWrapper.h>
-#include <radio/RadioCallback.h>
-#include <radio/Radio.h>
-#include <utils/RefBase.h>
-#include <utils/Vector.h>
-#include <binder/IMemory.h>
-#include <binder/MemoryDealer.h>
-
-using namespace android;
-
-static jclass gArrayListClass;
-static struct {
-    jmethodID    add;
-} gArrayListMethods;
-
-static const char* const kRadioManagerClassPathName = "android/hardware/radio/RadioManager";
-static jclass gRadioManagerClass;
-
-static const char* const kRadioModuleClassPathName = "android/hardware/radio/RadioModule";
-static jclass gRadioModuleClass;
-static struct {
-    jfieldID    mNativeContext;
-    jfieldID    mId;
-} gModuleFields;
-static jmethodID gPostEventFromNative;
-
-static const char* const kModulePropertiesClassPathName =
-                                     "android/hardware/radio/RadioManager$ModuleProperties";
-static jclass gModulePropertiesClass;
-static jmethodID gModulePropertiesCstor;
-
-
-static const char* const kRadioBandDescriptorClassPathName =
-                             "android/hardware/radio/RadioManager$BandDescriptor";
-static jclass gRadioBandDescriptorClass;
-static struct {
-    jfieldID mRegion;
-    jfieldID mType;
-    jfieldID mLowerLimit;
-    jfieldID mUpperLimit;
-    jfieldID mSpacing;
-} gRadioBandDescriptorFields;
-
-static const char* const kRadioFmBandDescriptorClassPathName =
-                             "android/hardware/radio/RadioManager$FmBandDescriptor";
-static jclass gRadioFmBandDescriptorClass;
-static jmethodID gRadioFmBandDescriptorCstor;
-
-static const char* const kRadioAmBandDescriptorClassPathName =
-                             "android/hardware/radio/RadioManager$AmBandDescriptor";
-static jclass gRadioAmBandDescriptorClass;
-static jmethodID gRadioAmBandDescriptorCstor;
-
-static const char* const kRadioBandConfigClassPathName =
-                             "android/hardware/radio/RadioManager$BandConfig";
-static jclass gRadioBandConfigClass;
-static struct {
-    jfieldID mDescriptor;
-} gRadioBandConfigFields;
-
-
-static const char* const kRadioFmBandConfigClassPathName =
-                             "android/hardware/radio/RadioManager$FmBandConfig";
-static jclass gRadioFmBandConfigClass;
-static jmethodID gRadioFmBandConfigCstor;
-static struct {
-    jfieldID mStereo;
-    jfieldID mRds;
-    jfieldID mTa;
-    jfieldID mAf;
-    jfieldID mEa;
-} gRadioFmBandConfigFields;
-
-static const char* const kRadioAmBandConfigClassPathName =
-                             "android/hardware/radio/RadioManager$AmBandConfig";
-static jclass gRadioAmBandConfigClass;
-static jmethodID gRadioAmBandConfigCstor;
-static struct {
-    jfieldID mStereo;
-} gRadioAmBandConfigFields;
-
-
-static const char* const kRadioProgramInfoClassPathName =
-                             "android/hardware/radio/RadioManager$ProgramInfo";
-static jclass gRadioProgramInfoClass;
-static jmethodID gRadioProgramInfoCstor;
-
-static const char* const kRadioMetadataClassPathName =
-                             "android/hardware/radio/RadioMetadata";
-static jclass gRadioMetadataClass;
-static jmethodID gRadioMetadataCstor;
-static struct {
-    jmethodID putIntFromNative;
-    jmethodID putStringFromNative;
-    jmethodID putBitmapFromNative;
-    jmethodID putClockFromNative;
-} gRadioMetadataMethods;
-
-static Mutex gLock;
-
-enum {
-    RADIO_STATUS_OK = 0,
-    RADIO_STATUS_ERROR = INT_MIN,
-    RADIO_PERMISSION_DENIED = -1,
-    RADIO_STATUS_NO_INIT = -19,
-    RADIO_STATUS_BAD_VALUE = -22,
-    RADIO_STATUS_DEAD_OBJECT = -32,
-    RADIO_STATUS_INVALID_OPERATION = -38,
-    RADIO_STATUS_TIMED_OUT = -110,
-};
-
-
-// ----------------------------------------------------------------------------
-
-static sp<Radio> getRadio(JNIEnv* env, jobject thiz)
-{
-    Mutex::Autolock l(gLock);
-    Radio* const radio = (Radio*)env->GetLongField(thiz, gModuleFields.mNativeContext);
-    return sp<Radio>(radio);
-}
-
-static sp<Radio> setRadio(JNIEnv* env, jobject thiz, const sp<Radio>& module)
-{
-    Mutex::Autolock l(gLock);
-    sp<Radio> old = (Radio*)env->GetLongField(thiz, gModuleFields.mNativeContext);
-    if (module.get()) {
-        module->incStrong((void*)setRadio);
-    }
-    if (old != 0) {
-        old->decStrong((void*)setRadio);
-    }
-    env->SetLongField(thiz, gModuleFields.mNativeContext, (jlong)module.get());
-    return old;
-}
-
-static jint convertBandDescriptorFromNative(JNIEnv *env,
-                                           jobject *jBandDescriptor,
-                                           const radio_band_config_t *nBandconfig)
-{
-    ALOGV("%s type %d region %d", __FUNCTION__, nBandconfig->band.type, nBandconfig->region);
-
-    if (nBandconfig->band.type == RADIO_BAND_FM ||
-            nBandconfig->band.type == RADIO_BAND_FM_HD) {
-        *jBandDescriptor = env->NewObject(gRadioFmBandDescriptorClass, gRadioFmBandDescriptorCstor,
-                                      nBandconfig->region, nBandconfig->band.type,
-                                      nBandconfig->band.lower_limit, nBandconfig->band.upper_limit,
-                                      nBandconfig->band.spacings[0],
-                                      nBandconfig->band.fm.stereo,
-                                      nBandconfig->band.fm.rds != RADIO_RDS_NONE,
-                                      nBandconfig->band.fm.ta,
-                                      nBandconfig->band.fm.af,
-                                      nBandconfig->band.fm.ea);
-    } else if (nBandconfig->band.type == RADIO_BAND_AM) {
-        *jBandDescriptor = env->NewObject(gRadioAmBandDescriptorClass, gRadioAmBandDescriptorCstor,
-                                      nBandconfig->region, nBandconfig->band.type,
-                                      nBandconfig->band.lower_limit, nBandconfig->band.upper_limit,
-                                      nBandconfig->band.spacings[0],
-                                      nBandconfig->band.am.stereo);
-    } else {
-        ALOGE("%s unknown band type %d", __FUNCTION__, nBandconfig->band.type);
-        return (jint)RADIO_STATUS_BAD_VALUE;
-    }
-
-    if (*jBandDescriptor == NULL) {
-        return (jint)RADIO_STATUS_NO_INIT;
-    }
-
-    return (jint)RADIO_STATUS_OK;
-}
-
-static jint convertBandConfigFromNative(JNIEnv *env,
-                                           jobject *jBandConfig,
-                                           const radio_band_config_t *nBandconfig)
-{
-    ALOGV("%s type %d region %d", __FUNCTION__, nBandconfig->band.type, nBandconfig->region);
-
-    if (nBandconfig->band.type == RADIO_BAND_FM ||
-            nBandconfig->band.type == RADIO_BAND_FM_HD) {
-        *jBandConfig = env->NewObject(gRadioFmBandConfigClass, gRadioFmBandConfigCstor,
-                                      nBandconfig->region, nBandconfig->band.type,
-                                      nBandconfig->band.lower_limit, nBandconfig->band.upper_limit,
-                                      nBandconfig->band.spacings[0],
-                                      nBandconfig->band.fm.stereo,
-                                      nBandconfig->band.fm.rds != RADIO_RDS_NONE,
-                                      nBandconfig->band.fm.ta,
-                                      nBandconfig->band.fm.af,
-                                      nBandconfig->band.fm.ea);
-    } else if (nBandconfig->band.type == RADIO_BAND_AM) {
-        *jBandConfig = env->NewObject(gRadioAmBandConfigClass, gRadioAmBandConfigCstor,
-                                      nBandconfig->region, nBandconfig->band.type,
-                                      nBandconfig->band.lower_limit, nBandconfig->band.upper_limit,
-                                      nBandconfig->band.spacings[0],
-                                      nBandconfig->band.am.stereo);
-    } else {
-        ALOGE("%s unknown band type %d", __FUNCTION__, nBandconfig->band.type);
-        return (jint)RADIO_STATUS_BAD_VALUE;
-    }
-
-    if (*jBandConfig == NULL) {
-        return (jint)RADIO_STATUS_NO_INIT;
-    }
-
-    return (jint)RADIO_STATUS_OK;
-}
-
-static jint convertMetadataFromNative(JNIEnv *env,
-                                           jobject *jMetadata,
-                                           const radio_metadata_t *nMetadata)
-{
-    ALOGV("%s", __FUNCTION__);
-    int count = radio_metadata_get_count(nMetadata);
-    if (count <= 0) {
-        return (jint)count;
-    }
-    *jMetadata = env->NewObject(gRadioMetadataClass, gRadioMetadataCstor);
-
-    jint jCount = 0;
-    jint jStatus = 0;
-    for (unsigned int i = 0; i < (unsigned int)count; i++) {
-        radio_metadata_key_t key;
-        radio_metadata_type_t type;
-        void *value;
-        size_t size;
-        if (radio_metadata_get_at_index(nMetadata, i , &key, &type, &value, &size) != 0) {
-            continue;
-        }
-        switch (type) {
-            case RADIO_METADATA_TYPE_INT: {
-                ALOGV("%s RADIO_METADATA_TYPE_INT %d", __FUNCTION__, key);
-                int32_t val = *(int32_t *)value;
-                jStatus = env->CallIntMethod(*jMetadata,
-                                   gRadioMetadataMethods.putIntFromNative,
-                                   key, (jint)val);
-                if (jStatus == 0) {
-                    jCount++;
-                }
-            } break;
-            case RADIO_METADATA_TYPE_TEXT: {
-                ALOGV("%s RADIO_METADATA_TYPE_TEXT %d", __FUNCTION__, key);
-                jstring jText = env->NewStringUTF((char *)value);
-                jStatus = env->CallIntMethod(*jMetadata,
-                                   gRadioMetadataMethods.putStringFromNative,
-                                   key, jText);
-                if (jStatus == 0) {
-                    jCount++;
-                }
-                env->DeleteLocalRef(jText);
-            } break;
-            case RADIO_METADATA_TYPE_RAW: {
-                ALOGV("%s RADIO_METADATA_TYPE_RAW %d size %zu", __FUNCTION__, key, size);
-                if (size == 0) {
-                    break;
-                }
-                jbyteArray jData = env->NewByteArray(size);
-                if (jData == NULL) {
-                    break;
-                }
-                env->SetByteArrayRegion(jData, 0, size, (jbyte *)value);
-                jStatus = env->CallIntMethod(*jMetadata,
-                                   gRadioMetadataMethods.putBitmapFromNative,
-                                   key, jData);
-                if (jStatus == 0) {
-                    jCount++;
-                }
-                env->DeleteLocalRef(jData);
-            } break;
-            case RADIO_METADATA_TYPE_CLOCK: {
-                  ALOGV("%s RADIO_METADATA_TYPE_CLOCK %d", __FUNCTION__, key);
-                  radio_metadata_clock_t *clock = (radio_metadata_clock_t *) value;
-                  jStatus =
-                      env->CallIntMethod(*jMetadata,
-                                         gRadioMetadataMethods.putClockFromNative,
-                                         key, (jint) clock->utc_seconds_since_epoch,
-                                         (jint) clock->timezone_offset_in_minutes);
-                  if (jStatus == 0) {
-                      jCount++;
-                  }
-            } break;
-        }
-    }
-    return jCount;
-}
-
-static jint convertProgramInfoFromNative(JNIEnv *env,
-                                           jobject *jProgramInfo,
-                                           const radio_program_info_t *nProgramInfo)
-{
-    ALOGV("%s", __FUNCTION__);
-    int jStatus;
-    jobject jMetadata = NULL;
-
-    if (nProgramInfo == nullptr || nProgramInfo->metadata == nullptr) {
-        return (jint)RADIO_STATUS_BAD_VALUE;
-    }
-
-    jStatus = convertMetadataFromNative(env, &jMetadata, nProgramInfo->metadata);
-    if (jStatus < 0) {
-        return jStatus;
-    }
-
-    ALOGV("%s channel %d tuned %d", __FUNCTION__, nProgramInfo->channel, nProgramInfo->tuned);
-
-    int flags = 0;  // TODO(b/32621193): pass from the HAL
-    jstring jVendorExension = env->NewStringUTF("");  // TODO(b/32621193): pass from the HAL
-    *jProgramInfo = env->NewObject(gRadioProgramInfoClass, gRadioProgramInfoCstor,
-                                  nProgramInfo->channel, nProgramInfo->sub_channel,
-                                  nProgramInfo->tuned, nProgramInfo->stereo,
-                                  nProgramInfo->digital, nProgramInfo->signal_strength,
-                                  jMetadata, flags, jVendorExension);
-
-    env->DeleteLocalRef(jMetadata);
-    env->DeleteLocalRef(jVendorExension);
-    return (jint)RADIO_STATUS_OK;
-}
-
-
-static jint convertBandConfigToNative(JNIEnv *env,
-                                      radio_band_config_t *nBandconfig,
-                                      jobject jBandConfig)
-{
-    ALOGV("%s", __FUNCTION__);
-
-    jobject jDescriptor = env->GetObjectField(jBandConfig, gRadioBandConfigFields.mDescriptor);
-
-    if (jDescriptor == NULL) {
-        return (jint)RADIO_STATUS_NO_INIT;
-    }
-
-    nBandconfig->region =
-            (radio_region_t)env->GetIntField(jDescriptor, gRadioBandDescriptorFields.mRegion);
-    nBandconfig->band.type =
-            (radio_band_t)env->GetIntField(jDescriptor, gRadioBandDescriptorFields.mType);
-    nBandconfig->band.lower_limit =
-            env->GetIntField(jDescriptor, gRadioBandDescriptorFields.mLowerLimit);
-    nBandconfig->band.upper_limit =
-            env->GetIntField(jDescriptor, gRadioBandDescriptorFields.mUpperLimit);
-    nBandconfig->band.num_spacings = 1;
-    nBandconfig->band.spacings[0] =
-            env->GetIntField(jDescriptor, gRadioBandDescriptorFields.mSpacing);
-
-    if (env->IsInstanceOf(jBandConfig, gRadioFmBandConfigClass)) {
-        nBandconfig->band.fm.deemphasis = radio_demephasis_for_region(nBandconfig->region);
-        nBandconfig->band.fm.stereo =
-                env->GetBooleanField(jBandConfig, gRadioFmBandConfigFields.mStereo);
-        nBandconfig->band.fm.rds =
-                radio_rds_for_region(env->GetBooleanField(jBandConfig,
-                                                          gRadioFmBandConfigFields.mRds),
-                                     nBandconfig->region);
-        nBandconfig->band.fm.ta = env->GetBooleanField(jBandConfig, gRadioFmBandConfigFields.mTa);
-        nBandconfig->band.fm.af = env->GetBooleanField(jBandConfig, gRadioFmBandConfigFields.mAf);
-        nBandconfig->band.fm.ea = env->GetBooleanField(jBandConfig, gRadioFmBandConfigFields.mEa);
-    } else if (env->IsInstanceOf(jBandConfig, gRadioAmBandConfigClass)) {
-        nBandconfig->band.am.stereo =
-                env->GetBooleanField(jBandConfig, gRadioAmBandConfigFields.mStereo);
-    } else {
-        return (jint)RADIO_STATUS_BAD_VALUE;
-    }
-
-    return (jint)RADIO_STATUS_OK;
-}
-
-static jint
-android_hardware_Radio_listModules(JNIEnv *env, jobject clazz,
-                                          jobject jModules)
-{
-    ALOGV("%s", __FUNCTION__);
-
-    if (jModules == NULL) {
-        ALOGE("listModules NULL ArrayList");
-        return RADIO_STATUS_BAD_VALUE;
-    }
-    if (!env->IsInstanceOf(jModules, gArrayListClass)) {
-        ALOGE("listModules not an arraylist");
-        return RADIO_STATUS_BAD_VALUE;
-    }
-
-    unsigned int numModules = 0;
-    radio_properties_t *nModules = NULL;
-
-    status_t status = Radio::listModules(nModules, &numModules);
-    if (status != NO_ERROR || numModules == 0) {
-        return (jint)status;
-    }
-
-    nModules = (radio_properties_t *)calloc(numModules, sizeof(radio_properties_t));
-
-    status = Radio::listModules(nModules, &numModules);
-    ALOGV("%s Radio::listModules status %d numModules %d", __FUNCTION__, status, numModules);
-
-    if (status != NO_ERROR) {
-        numModules = 0;
-    }
-
-    for (size_t i = 0; i < numModules; i++) {
-        if (nModules[i].num_bands == 0) {
-            continue;
-        }
-        ALOGV("%s module %zu id %d implementor %s product %s",
-              __FUNCTION__, i, nModules[i].handle, nModules[i].implementor,
-              nModules[i].product);
-
-
-        jobjectArray jBands = env->NewObjectArray(nModules[i].num_bands,
-                                                  gRadioBandDescriptorClass, NULL);
-
-        for (size_t j = 0; j < nModules[i].num_bands; j++) {
-            jobject jBandDescriptor;
-            int jStatus =
-                    convertBandDescriptorFromNative(env, &jBandDescriptor, &nModules[i].bands[j]);
-            if (jStatus != RADIO_STATUS_OK) {
-                continue;
-            }
-            env->SetObjectArrayElement(jBands, j, jBandDescriptor);
-            env->DeleteLocalRef(jBandDescriptor);
-        }
-
-        if (env->GetArrayLength(jBands) == 0) {
-            continue;
-        }
-        jstring jImplementor = env->NewStringUTF(nModules[i].implementor);
-        jstring jProduct = env->NewStringUTF(nModules[i].product);
-        jstring jVersion = env->NewStringUTF(nModules[i].version);
-        jstring jSerial = env->NewStringUTF(nModules[i].serial);
-        bool isBgscanSupported = false;  // TODO(b/32621193): pass from the HAL
-        jstring jVendorExension = env->NewStringUTF("");  // TODO(b/32621193): pass from the HAL
-        jobject jModule = env->NewObject(gModulePropertiesClass, gModulePropertiesCstor,
-                                               nModules[i].handle, nModules[i].class_id,
-                                               jImplementor, jProduct, jVersion, jSerial,
-                                               nModules[i].num_tuners,
-                                               nModules[i].num_audio_sources,
-                                               nModules[i].supports_capture,
-                                               jBands, isBgscanSupported, jVendorExension);
-
-        env->DeleteLocalRef(jImplementor);
-        env->DeleteLocalRef(jProduct);
-        env->DeleteLocalRef(jVersion);
-        env->DeleteLocalRef(jSerial);
-        env->DeleteLocalRef(jBands);
-        env->DeleteLocalRef(jVendorExension);
-        if (jModule == NULL) {
-            continue;
-        }
-        env->CallBooleanMethod(jModules, gArrayListMethods.add, jModule);
-    }
-
-    free(nModules);
-    return (jint) status;
-}
-
-// ----------------------------------------------------------------------------
-
-class JNIRadioCallback: public RadioCallback
-{
-public:
-    JNIRadioCallback(JNIEnv* env, jobject thiz, jobject weak_thiz);
-    ~JNIRadioCallback();
-
-    virtual void onEvent(struct radio_event *event);
-
-private:
-    jclass      mClass;     // Reference to Radio class
-    jobject     mObject;    // Weak ref to Radio Java object to call on
-};
-
-JNIRadioCallback::JNIRadioCallback(JNIEnv* env, jobject thiz, jobject weak_thiz)
-{
-
-    // Hold onto the RadioModule class for use in calling the static method
-    // that posts events to the application thread.
-    jclass clazz = env->GetObjectClass(thiz);
-    if (clazz == NULL) {
-        ALOGE("Can't find class %s", kRadioModuleClassPathName);
-        return;
-    }
-    mClass = (jclass)env->NewGlobalRef(clazz);
-
-    // We use a weak reference so the RadioModule object can be garbage collected.
-    // The reference is only used as a proxy for callbacks.
-    mObject  = env->NewGlobalRef(weak_thiz);
-}
-
-JNIRadioCallback::~JNIRadioCallback()
-{
-    // remove global references
-    JNIEnv *env = AndroidRuntime::getJNIEnv();
-    if (env == NULL) {
-        return;
-    }
-    env->DeleteGlobalRef(mObject);
-    env->DeleteGlobalRef(mClass);
-}
-
-void JNIRadioCallback::onEvent(struct radio_event *event)
-{
-    JNIEnv *env = AndroidRuntime::getJNIEnv();
-    if (env == NULL) {
-        return;
-    }
-
-    ALOGV("%s", __FUNCTION__);
-
-    jobject jObj = NULL;
-    jint jArg2 = 0;
-    jint jStatus = RADIO_STATUS_OK;
-    switch (event->type) {
-        case RADIO_EVENT_CONFIG:
-            jStatus = convertBandConfigFromNative(env, &jObj, &event->config);
-            break;
-        case RADIO_EVENT_TUNED:
-        case RADIO_EVENT_AF_SWITCH:
-            ALOGV("%s RADIO_EVENT_TUNED channel %d", __FUNCTION__, event->info.channel);
-            jStatus = convertProgramInfoFromNative(env, &jObj, &event->info);
-            break;
-        case RADIO_EVENT_METADATA:
-            jStatus = convertMetadataFromNative(env, &jObj, event->metadata);
-            if (jStatus >= 0) {
-                jStatus = RADIO_STATUS_OK;
-            }
-            break;
-        case RADIO_EVENT_ANTENNA:
-        case RADIO_EVENT_TA:
-        case RADIO_EVENT_EA:
-        case RADIO_EVENT_CONTROL:
-            jArg2 = event->on ? 1 : 0;
-            break;
-    }
-
-    if (jStatus != RADIO_STATUS_OK) {
-        return;
-    }
-    env->CallStaticVoidMethod(mClass, gPostEventFromNative, mObject,
-                              event->type, event->status, jArg2, jObj);
-
-    env->DeleteLocalRef(jObj);
-    if (env->ExceptionCheck()) {
-        ALOGW("An exception occurred while notifying an event.");
-        env->ExceptionClear();
-    }
-}
-
-// ----------------------------------------------------------------------------
-
-static void
-android_hardware_Radio_setup(JNIEnv *env, jobject thiz,
-                             jobject weak_this, jobject jConfig, jboolean withAudio)
-{
-    ALOGV("%s", __FUNCTION__);
-
-    setRadio(env, thiz, 0);
-
-    sp<JNIRadioCallback> callback = new JNIRadioCallback(env, thiz, weak_this);
-
-    radio_handle_t handle = (radio_handle_t)env->GetIntField(thiz, gModuleFields.mId);
-
-    struct radio_band_config nConfig;
-    struct radio_band_config *configPtr = NULL;
-    if (jConfig != NULL) {
-        jint jStatus = convertBandConfigToNative(env, &nConfig, jConfig);
-        if (jStatus != RADIO_STATUS_OK) {
-            return;
-        }
-        configPtr = &nConfig;
-    }
-    sp<Radio> module = Radio::attach(handle, configPtr, (bool)withAudio, callback);
-    if (module == 0) {
-        return;
-    }
-
-    setRadio(env, thiz, module);
-}
-
-static void
-android_hardware_Radio_close(JNIEnv *env, jobject thiz)
-{
-    ALOGV("%s", __FUNCTION__);
-    sp<Radio> module = setRadio(env, thiz, 0);
-    ALOGV("detach module %p", module.get());
-    if (module != 0) {
-        ALOGV("detach module->detach()");
-        module->detach();
-    }
-}
-
-static void
-android_hardware_Radio_finalize(JNIEnv *env, jobject thiz)
-{
-    ALOGV("%s", __FUNCTION__);
-    sp<Radio> module = getRadio(env, thiz);
-    if (module != 0) {
-        ALOGW("Radio finalized without being detached");
-    }
-    android_hardware_Radio_close(env, thiz);
-}
-
-static jint
-android_hardware_Radio_setConfiguration(JNIEnv *env, jobject thiz, jobject jConfig)
-{
-    ALOGV("%s", __FUNCTION__);
-    sp<Radio> module = getRadio(env, thiz);
-    if (module == NULL) {
-        return RADIO_STATUS_NO_INIT;
-    }
-
-    if (!env->IsInstanceOf(jConfig, gRadioFmBandConfigClass) &&
-            !env->IsInstanceOf(jConfig, gRadioAmBandConfigClass)) {
-        return RADIO_STATUS_BAD_VALUE;
-    }
-
-    struct radio_band_config nConfig;
-    jint jStatus = convertBandConfigToNative(env, &nConfig, jConfig);
-    if (jStatus != RADIO_STATUS_OK) {
-        return jStatus;
-    }
-
-    status_t status = module->setConfiguration(&nConfig);
-    return (jint)status;
-}
-
-static jint
-android_hardware_Radio_getConfiguration(JNIEnv *env, jobject thiz, jobjectArray jConfigs)
-{
-    ALOGV("%s", __FUNCTION__);
-    sp<Radio> module = getRadio(env, thiz);
-    if (module == NULL) {
-        return RADIO_STATUS_NO_INIT;
-    }
-    if (env->GetArrayLength(jConfigs) != 1) {
-        return (jint)RADIO_STATUS_BAD_VALUE;
-    }
-
-    struct radio_band_config nConfig;
-
-    status_t status = module->getConfiguration(&nConfig);
-    if (status != NO_ERROR) {
-        return (jint)status;
-    }
-    jobject jConfig;
-    int jStatus = convertBandConfigFromNative(env, &jConfig, &nConfig);
-    if (jStatus != RADIO_STATUS_OK) {
-        return jStatus;
-    }
-    env->SetObjectArrayElement(jConfigs, 0, jConfig);
-    env->DeleteLocalRef(jConfig);
-    return RADIO_STATUS_OK;
-}
-
-static jint
-android_hardware_Radio_setMute(JNIEnv *env, jobject thiz, jboolean mute)
-{
-    ALOGV("%s", __FUNCTION__);
-    sp<Radio> module = getRadio(env, thiz);
-    if (module == NULL) {
-        return RADIO_STATUS_NO_INIT;
-    }
-    status_t status = module->setMute((bool)mute);
-    return (jint)status;
-}
-
-static jboolean
-android_hardware_Radio_getMute(JNIEnv *env, jobject thiz)
-{
-    ALOGV("%s", __FUNCTION__);
-    sp<Radio> module = getRadio(env, thiz);
-    if (module == NULL) {
-        return true;
-    }
-    bool mute = true;
-    status_t status = module->getMute(&mute);
-    if (status != NO_ERROR) {
-        return true;
-    }
-    return (jboolean)mute;
-}
-
-static jint
-android_hardware_Radio_step(JNIEnv *env, jobject thiz, jint direction, jboolean skipSubChannel)
-{
-    ALOGV("%s", __FUNCTION__);
-    sp<Radio> module = getRadio(env, thiz);
-    if (module == NULL) {
-        return RADIO_STATUS_NO_INIT;
-    }
-    status_t status = module->step((radio_direction_t)direction, (bool)skipSubChannel);
-    return (jint)status;
-}
-
-static jint
-android_hardware_Radio_scan(JNIEnv *env, jobject thiz, jint direction, jboolean skipSubChannel)
-{
-    ALOGV("%s", __FUNCTION__);
-    sp<Radio> module = getRadio(env, thiz);
-    if (module == NULL) {
-        return RADIO_STATUS_NO_INIT;
-    }
-    status_t status = module->scan((radio_direction_t)direction, (bool)skipSubChannel);
-    return (jint)status;
-}
-
-static jint
-android_hardware_Radio_tune(JNIEnv *env, jobject thiz, jint channel, jint subChannel)
-{
-    ALOGV("%s", __FUNCTION__);
-    sp<Radio> module = getRadio(env, thiz);
-    if (module == NULL) {
-        return RADIO_STATUS_NO_INIT;
-    }
-    status_t status = module->tune((uint32_t)channel, (uint32_t)subChannel);
-    return (jint)status;
-}
-
-static jint
-android_hardware_Radio_cancel(JNIEnv *env, jobject thiz)
-{
-    ALOGV("%s", __FUNCTION__);
-    sp<Radio> module = getRadio(env, thiz);
-    if (module == NULL) {
-        return RADIO_STATUS_NO_INIT;
-    }
-    status_t status = module->cancel();
-    return (jint)status;
-}
-
-static jint
-android_hardware_Radio_getProgramInformation(JNIEnv *env, jobject thiz, jobjectArray jInfos)
-{
-    ALOGV("%s", __FUNCTION__);
-    sp<Radio> module = getRadio(env, thiz);
-    if (module == NULL) {
-        return RADIO_STATUS_NO_INIT;
-    }
-    if (env->GetArrayLength(jInfos) != 1) {
-        return (jint)RADIO_STATUS_BAD_VALUE;
-    }
-
-    struct radio_program_info nInfo;
-    RadioMetadataWrapper metadataWrapper(&nInfo.metadata);
-    jobject jInfo = NULL;
-    int jStatus;
-
-    jStatus = (int)module->getProgramInformation(&nInfo);
-    if (jStatus != RADIO_STATUS_OK) {
-        goto exit;
-    }
-    jStatus = convertProgramInfoFromNative(env, &jInfo, &nInfo);
-    if (jStatus != RADIO_STATUS_OK) {
-        goto exit;
-    }
-    env->SetObjectArrayElement(jInfos, 0, jInfo);
-
-exit:
-    if (jInfo != NULL) {
-        env->DeleteLocalRef(jInfo);
-    }
-    return jStatus;
-}
-
-static jboolean
-android_hardware_Radio_isAntennaConnected(JNIEnv *env, jobject thiz)
-{
-    ALOGV("%s", __FUNCTION__);
-    sp<Radio> module = getRadio(env, thiz);
-    if (module == NULL) {
-        return false;
-    }
-
-    struct radio_band_config nConfig;
-
-    status_t status = module->getConfiguration(&nConfig);
-    if (status != NO_ERROR) {
-        return false;
-    }
-
-    return (jboolean)nConfig.band.antenna_connected;
-}
-
-
-static jboolean
-android_hardware_Radio_hasControl(JNIEnv *env, jobject thiz)
-{
-    ALOGV("%s", __FUNCTION__);
-    sp<Radio> module = getRadio(env, thiz);
-    if (module == NULL) {
-        return false;
-    }
-
-    bool hasControl;
-    status_t status = module->hasControl(&hasControl);
-    if (status != NO_ERROR) {
-        return false;
-    }
-
-    return (jboolean)hasControl;
-}
-
-
-static JNINativeMethod gMethods[] = {
-    {"listModules",
-        "(Ljava/util/List;)I",
-        (void *)android_hardware_Radio_listModules},
-};
-
-static JNINativeMethod gModuleMethods[] = {
-    {"native_setup",
-        "(Ljava/lang/Object;Landroid/hardware/radio/RadioManager$BandConfig;Z)V",
-        (void *)android_hardware_Radio_setup},
-    {"native_finalize",
-        "()V",
-        (void *)android_hardware_Radio_finalize},
-    {"close",
-        "()V",
-        (void *)android_hardware_Radio_close},
-    {"setConfiguration",
-        "(Landroid/hardware/radio/RadioManager$BandConfig;)I",
-        (void *)android_hardware_Radio_setConfiguration},
-    {"getConfiguration",
-        "([Landroid/hardware/radio/RadioManager$BandConfig;)I",
-        (void *)android_hardware_Radio_getConfiguration},
-    {"setMute",
-        "(Z)I",
-        (void *)android_hardware_Radio_setMute},
-    {"getMute",
-        "()Z",
-        (void *)android_hardware_Radio_getMute},
-    {"step",
-        "(IZ)I",
-        (void *)android_hardware_Radio_step},
-    {"scan",
-        "(IZ)I",
-        (void *)android_hardware_Radio_scan},
-    {"tune",
-        "(II)I",
-        (void *)android_hardware_Radio_tune},
-    {"cancel",
-        "()I",
-        (void *)android_hardware_Radio_cancel},
-    {"getProgramInformation",
-        "([Landroid/hardware/radio/RadioManager$ProgramInfo;)I",
-        (void *)android_hardware_Radio_getProgramInformation},
-    {"isAntennaConnected",
-        "()Z",
-        (void *)android_hardware_Radio_isAntennaConnected},
-    {"hasControl",
-        "()Z",
-        (void *)android_hardware_Radio_hasControl},
-};
-
-int register_android_hardware_Radio(JNIEnv *env)
-{
-    jclass arrayListClass = FindClassOrDie(env, "java/util/ArrayList");
-    gArrayListClass = MakeGlobalRefOrDie(env, arrayListClass);
-    gArrayListMethods.add = GetMethodIDOrDie(env, arrayListClass, "add", "(Ljava/lang/Object;)Z");
-
-    jclass lClass = FindClassOrDie(env, kRadioManagerClassPathName);
-    gRadioManagerClass = MakeGlobalRefOrDie(env, lClass);
-
-    jclass moduleClass = FindClassOrDie(env, kRadioModuleClassPathName);
-    gRadioModuleClass = MakeGlobalRefOrDie(env, moduleClass);
-    gPostEventFromNative = GetStaticMethodIDOrDie(env, moduleClass, "postEventFromNative",
-                                                  "(Ljava/lang/Object;IIILjava/lang/Object;)V");
-    gModuleFields.mNativeContext = GetFieldIDOrDie(env, moduleClass, "mNativeContext", "J");
-    gModuleFields.mId = GetFieldIDOrDie(env, moduleClass, "mId", "I");
-
-    jclass modulePropertiesClass = FindClassOrDie(env, kModulePropertiesClassPathName);
-    gModulePropertiesClass = MakeGlobalRefOrDie(env, modulePropertiesClass);
-    gModulePropertiesCstor = GetMethodIDOrDie(env, modulePropertiesClass, "<init>",
-            "(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIZ[Landroid/hardware/radio/RadioManager$BandDescriptor;ZLjava/lang/String;)V");
-
-    jclass bandDescriptorClass = FindClassOrDie(env, kRadioBandDescriptorClassPathName);
-    gRadioBandDescriptorClass = MakeGlobalRefOrDie(env, bandDescriptorClass);
-    gRadioBandDescriptorFields.mRegion = GetFieldIDOrDie(env, bandDescriptorClass, "mRegion", "I");
-    gRadioBandDescriptorFields.mType = GetFieldIDOrDie(env, bandDescriptorClass, "mType", "I");
-    gRadioBandDescriptorFields.mLowerLimit =
-            GetFieldIDOrDie(env, bandDescriptorClass, "mLowerLimit", "I");
-    gRadioBandDescriptorFields.mUpperLimit =
-            GetFieldIDOrDie(env, bandDescriptorClass, "mUpperLimit", "I");
-    gRadioBandDescriptorFields.mSpacing =
-            GetFieldIDOrDie(env, bandDescriptorClass, "mSpacing", "I");
-
-    jclass fmBandDescriptorClass = FindClassOrDie(env, kRadioFmBandDescriptorClassPathName);
-    gRadioFmBandDescriptorClass = MakeGlobalRefOrDie(env, fmBandDescriptorClass);
-    gRadioFmBandDescriptorCstor = GetMethodIDOrDie(env, fmBandDescriptorClass, "<init>",
-            "(IIIIIZZZZZ)V");
-
-    jclass amBandDescriptorClass = FindClassOrDie(env, kRadioAmBandDescriptorClassPathName);
-    gRadioAmBandDescriptorClass = MakeGlobalRefOrDie(env, amBandDescriptorClass);
-    gRadioAmBandDescriptorCstor = GetMethodIDOrDie(env, amBandDescriptorClass, "<init>",
-            "(IIIIIZ)V");
-
-    jclass bandConfigClass = FindClassOrDie(env, kRadioBandConfigClassPathName);
-    gRadioBandConfigClass = MakeGlobalRefOrDie(env, bandConfigClass);
-    gRadioBandConfigFields.mDescriptor =
-            GetFieldIDOrDie(env, bandConfigClass, "mDescriptor",
-                            "Landroid/hardware/radio/RadioManager$BandDescriptor;");
-
-    jclass fmBandConfigClass = FindClassOrDie(env, kRadioFmBandConfigClassPathName);
-    gRadioFmBandConfigClass = MakeGlobalRefOrDie(env, fmBandConfigClass);
-    gRadioFmBandConfigCstor = GetMethodIDOrDie(env, fmBandConfigClass, "<init>",
-            "(IIIIIZZZZZ)V");
-    gRadioFmBandConfigFields.mStereo = GetFieldIDOrDie(env, fmBandConfigClass, "mStereo", "Z");
-    gRadioFmBandConfigFields.mRds = GetFieldIDOrDie(env, fmBandConfigClass, "mRds", "Z");
-    gRadioFmBandConfigFields.mTa = GetFieldIDOrDie(env, fmBandConfigClass, "mTa", "Z");
-    gRadioFmBandConfigFields.mAf = GetFieldIDOrDie(env, fmBandConfigClass, "mAf", "Z");
-    gRadioFmBandConfigFields.mEa =
-        GetFieldIDOrDie(env, fmBandConfigClass, "mEa", "Z");
-
-
-    jclass amBandConfigClass = FindClassOrDie(env, kRadioAmBandConfigClassPathName);
-    gRadioAmBandConfigClass = MakeGlobalRefOrDie(env, amBandConfigClass);
-    gRadioAmBandConfigCstor = GetMethodIDOrDie(env, amBandConfigClass, "<init>",
-            "(IIIIIZ)V");
-    gRadioAmBandConfigFields.mStereo = GetFieldIDOrDie(env, amBandConfigClass, "mStereo", "Z");
-
-    jclass programInfoClass = FindClassOrDie(env, kRadioProgramInfoClassPathName);
-    gRadioProgramInfoClass = MakeGlobalRefOrDie(env, programInfoClass);
-    gRadioProgramInfoCstor = GetMethodIDOrDie(env, programInfoClass, "<init>",
-            "(IIZZZILandroid/hardware/radio/RadioMetadata;ILjava/lang/String;)V");
-
-    jclass metadataClass = FindClassOrDie(env, kRadioMetadataClassPathName);
-    gRadioMetadataClass = MakeGlobalRefOrDie(env, metadataClass);
-    gRadioMetadataCstor = GetMethodIDOrDie(env, metadataClass, "<init>", "()V");
-    gRadioMetadataMethods.putIntFromNative = GetMethodIDOrDie(env, metadataClass,
-                                                              "putIntFromNative",
-                                                              "(II)I");
-    gRadioMetadataMethods.putStringFromNative = GetMethodIDOrDie(env, metadataClass,
-                                                                 "putStringFromNative",
-                                                                 "(ILjava/lang/String;)I");
-    gRadioMetadataMethods.putBitmapFromNative = GetMethodIDOrDie(env, metadataClass,
-                                                                 "putBitmapFromNative",
-                                                                 "(I[B)I");
-    gRadioMetadataMethods.putClockFromNative = GetMethodIDOrDie(env, metadataClass,
-                                                                "putClockFromNative",
-                                                                "(IJI)I");
-
-
-    RegisterMethodsOrDie(env, kRadioManagerClassPathName, gMethods, NELEM(gMethods));
-
-    int ret = RegisterMethodsOrDie(env, kRadioModuleClassPathName, gModuleMethods, NELEM(gModuleMethods));
-
-    ALOGV("%s DONE", __FUNCTION__);
-
-    return ret;
-}
diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp
index e90a41c..5b327d4 100644
--- a/core/jni/android_hardware_SensorManager.cpp
+++ b/core/jni/android_hardware_SensorManager.cpp
@@ -15,13 +15,13 @@
  */
 #define LOG_TAG "SensorManager"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_os_MessageQueue.h"
 #include "core_jni_helpers.h"
 #include "jni.h"
 
-#include <ScopedUtfChars.h>
-#include <ScopedLocalRef.h>
+#include <nativehelper/ScopedUtfChars.h>
+#include <nativehelper/ScopedLocalRef.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/android_hardware_HardwareBuffer.h>
 #include <vndk/hardware_buffer.h>
diff --git a/core/jni/android_hardware_SerialPort.cpp b/core/jni/android_hardware_SerialPort.cpp
index 393dc7b..190ddce 100644
--- a/core/jni/android_hardware_SerialPort.cpp
+++ b/core/jni/android_hardware_SerialPort.cpp
@@ -19,7 +19,7 @@
 #include "utils/Log.h"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 #include <stdio.h>
diff --git a/core/jni/android_hardware_SoundTrigger.cpp b/core/jni/android_hardware_SoundTrigger.cpp
index 0c7f5a1..9dbb8d7 100644
--- a/core/jni/android_hardware_SoundTrigger.cpp
+++ b/core/jni/android_hardware_SoundTrigger.cpp
@@ -20,7 +20,7 @@
 #include <utils/Log.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 #include <system/sound_trigger.h>
 #include <soundtrigger/SoundTriggerCallback.h>
diff --git a/core/jni/android_hardware_UsbDevice.cpp b/core/jni/android_hardware_UsbDevice.cpp
index 89d33e2..879d409 100644
--- a/core/jni/android_hardware_UsbDevice.cpp
+++ b/core/jni/android_hardware_UsbDevice.cpp
@@ -19,7 +19,7 @@
 #include "utils/Log.h"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 #include <usbhost/usbhost.h>
diff --git a/core/jni/android_hardware_UsbDeviceConnection.cpp b/core/jni/android_hardware_UsbDeviceConnection.cpp
index ba08bce..d953aee 100644
--- a/core/jni/android_hardware_UsbDeviceConnection.cpp
+++ b/core/jni/android_hardware_UsbDeviceConnection.cpp
@@ -19,7 +19,7 @@
 #include "utils/Log.h"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 #include <usbhost/usbhost.h>
diff --git a/core/jni/android_hardware_UsbRequest.cpp b/core/jni/android_hardware_UsbRequest.cpp
index 01fe078..9bdb605 100644
--- a/core/jni/android_hardware_UsbRequest.cpp
+++ b/core/jni/android_hardware_UsbRequest.cpp
@@ -19,7 +19,7 @@
 #include "utils/Log.h"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 #include <usbhost/usbhost.h>
diff --git a/core/jni/android_hardware_camera2_CameraMetadata.cpp b/core/jni/android_hardware_camera2_CameraMetadata.cpp
index d8eb7d2..fad5b0e 100644
--- a/core/jni/android_hardware_camera2_CameraMetadata.cpp
+++ b/core/jni/android_hardware_camera2_CameraMetadata.cpp
@@ -28,7 +28,7 @@
 #include <vector>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_os_Parcel.h"
 #include "core_jni_helpers.h"
 #include "android_runtime/android_hardware_camera2_CameraMetadata.h"
diff --git a/core/jni/android_hardware_camera2_DngCreator.cpp b/core/jni/android_hardware_camera2_DngCreator.cpp
index 3d021d6..c8eef7f 100644
--- a/core/jni/android_hardware_camera2_DngCreator.cpp
+++ b/core/jni/android_hardware_camera2_DngCreator.cpp
@@ -46,7 +46,7 @@
 #include "android_runtime/android_hardware_camera2_CameraMetadata.h"
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 
 using namespace android;
 using namespace img_utils;
diff --git a/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp b/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp
index 7121194..b610b35 100644
--- a/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp
+++ b/core/jni/android_hardware_camera2_legacy_LegacyCameraDevice.cpp
@@ -22,7 +22,7 @@
 #include <camera/CameraUtils.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 #include "android_runtime/android_view_Surface.h"
 #include "android_runtime/android_graphics_SurfaceTexture.h"
@@ -484,14 +484,14 @@
 
     sp<ANativeWindow> anw;
     if ((anw = getNativeWindow(env, surface)) == NULL) {
-        jniThrowException(env, "Ljava/lang/UnsupportedOperationException;",
+        jniThrowException(env, "java/lang/UnsupportedOperationException;",
             "Could not retrieve native window from surface.");
         return BAD_VALUE;
     }
     int32_t usage = 0;
     status_t err = anw->query(anw.get(), NATIVE_WINDOW_CONSUMER_USAGE_BITS, &usage);
     if(err != NO_ERROR) {
-        jniThrowException(env, "Ljava/lang/UnsupportedOperationException;",
+        jniThrowException(env, "java/lang/UnsupportedOperationException;",
             "Error while querying surface usage bits");
         return err;
     }
@@ -511,7 +511,7 @@
 
     status_t err = native_window_api_disconnect(anw.get(), NATIVE_WINDOW_API_CAMERA);
     if(err != NO_ERROR) {
-        jniThrowException(env, "Ljava/lang/UnsupportedOperationException;",
+        jniThrowException(env, "java/lang/UnsupportedOperationException;",
             "Error while disconnecting surface");
         return err;
     }
diff --git a/core/jni/android_hardware_camera2_legacy_PerfMeasurement.cpp b/core/jni/android_hardware_camera2_legacy_PerfMeasurement.cpp
index a081665..fac243a 100644
--- a/core/jni/android_hardware_camera2_legacy_PerfMeasurement.cpp
+++ b/core/jni/android_hardware_camera2_legacy_PerfMeasurement.cpp
@@ -21,7 +21,7 @@
 #include <utils/Vector.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 #include <ui/GraphicBuffer.h>
diff --git a/core/jni/android_hardware_location_ActivityRecognitionHardware.cpp b/core/jni/android_hardware_location_ActivityRecognitionHardware.cpp
index 637234f..1c9ab94 100644
--- a/core/jni/android_hardware_location_ActivityRecognitionHardware.cpp
+++ b/core/jni/android_hardware_location_ActivityRecognitionHardware.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "ActivityRecognitionHardware"
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/Log.h>
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index 5e93fc9..e4da3c6 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -20,13 +20,13 @@
 
 #include <inttypes.h>
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 #include <utils/Log.h>
 #include <media/AudioRecord.h>
 
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 
 #include "android_media_AudioFormat.h"
 #include "android_media_AudioErrors.h"
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index 1779ada..7ec68ed 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -22,7 +22,7 @@
 
 #include <sstream>
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 #include <media/AudioSystem.h>
@@ -396,7 +396,7 @@
 }
 
 static void
-android_media_AudioSystem_recording_callback(int event, audio_session_t session, int source,
+android_media_AudioSystem_recording_callback(int event, const record_client_info_t *clientInfo,
         const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig,
         audio_patch_handle_t patchHandle)
 {
@@ -404,8 +404,8 @@
     if (env == NULL) {
         return;
     }
-    if (clientConfig == NULL || deviceConfig == NULL) {
-        ALOGE("Unexpected null client/device configurations in recording callback");
+    if (clientInfo == NULL || clientConfig == NULL || deviceConfig == NULL) {
+        ALOGE("Unexpected null client/device info or configurations in recording callback");
         return;
     }
 
@@ -433,7 +433,7 @@
     jclass clazz = env->FindClass(kClassPathName);
     env->CallStaticVoidMethod(clazz,
             gAudioPolicyEventHandlerMethods.postRecordConfigEventFromNative,
-            event, session, source, recParamArray);
+            event, (jint) clientInfo->uid, clientInfo->session, clientInfo->source, recParamArray);
     env->DeleteLocalRef(clazz);
 
     env->DeleteLocalRef(recParamArray);
@@ -1930,7 +1930,7 @@
                     "dynamicPolicyCallbackFromNative", "(ILjava/lang/String;I)V");
     gAudioPolicyEventHandlerMethods.postRecordConfigEventFromNative =
             GetStaticMethodIDOrDie(env, env->FindClass(kClassPathName),
-                    "recordingCallbackFromNative", "(III[I)V");
+                    "recordingCallbackFromNative", "(IIII[I)V");
 
     jclass audioMixClass = FindClassOrDie(env, "android/media/audiopolicy/AudioMix");
     gAudioMixClass = MakeGlobalRefOrDie(env, audioMixClass);
diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp
index 3e9ffce..c7ed599 100644
--- a/core/jni/android_media_AudioTrack.cpp
+++ b/core/jni/android_media_AudioTrack.cpp
@@ -19,11 +19,11 @@
 
 #include "android_media_AudioTrack.h"
 
-#include <JNIHelp.h>
-#include <JniConstants.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/JniConstants.h>
 #include "core_jni_helpers.h"
 
-#include "ScopedBytes.h"
+#include <nativehelper/ScopedBytes.h>
 
 #include <utils/Log.h>
 #include <media/AudioSystem.h>
diff --git a/core/jni/android_media_DeviceCallback.cpp b/core/jni/android_media_DeviceCallback.cpp
index e159373..108fa00 100644
--- a/core/jni/android_media_DeviceCallback.cpp
+++ b/core/jni/android_media_DeviceCallback.cpp
@@ -19,8 +19,8 @@
 #define LOG_TAG "AudioDeviceCallback-JNI"
 
 #include <utils/Log.h>
-#include <JNIHelp.h>
-#include <JniConstants.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/JniConstants.h>
 #include "core_jni_helpers.h"
 #include <media/AudioSystem.h>
 
diff --git a/core/jni/android_media_JetPlayer.cpp b/core/jni/android_media_JetPlayer.cpp
index 873c3f2..da116bf 100644
--- a/core/jni/android_media_JetPlayer.cpp
+++ b/core/jni/android_media_JetPlayer.cpp
@@ -23,7 +23,7 @@
 #include <fcntl.h>
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 #include <utils/Log.h>
diff --git a/core/jni/android_media_RemoteDisplay.cpp b/core/jni/android_media_RemoteDisplay.cpp
index bd1a6ec..3b517f1 100644
--- a/core/jni/android_media_RemoteDisplay.cpp
+++ b/core/jni/android_media_RemoteDisplay.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "RemoteDisplay"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include "android_os_Parcel.h"
 #include "android_util_Binder.h"
@@ -36,7 +36,7 @@
 
 #include <utils/Log.h>
 
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 
 namespace android {
 
diff --git a/core/jni/android_media_ToneGenerator.cpp b/core/jni/android_media_ToneGenerator.cpp
index aec6263..ecb3cd6 100644
--- a/core/jni/android_media_ToneGenerator.cpp
+++ b/core/jni/android_media_ToneGenerator.cpp
@@ -22,7 +22,7 @@
 #include <fcntl.h>
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 #include <utils/Log.h>
diff --git a/core/jni/android_net_LocalSocketImpl.cpp b/core/jni/android_net_LocalSocketImpl.cpp
index 37b6df1..6df23f7 100644
--- a/core/jni/android_net_LocalSocketImpl.cpp
+++ b/core/jni/android_net_LocalSocketImpl.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "LocalSocketImpl"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 #include "utils/Log.h"
 #include "utils/misc.h"
@@ -35,7 +35,7 @@
 
 #include <cutils/sockets.h>
 #include <netinet/tcp.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 
 namespace android {
 
diff --git a/core/jni/android_net_NetUtils.cpp b/core/jni/android_net_NetUtils.cpp
index 3e99521..823f1cc 100644
--- a/core/jni/android_net_NetUtils.cpp
+++ b/core/jni/android_net_NetUtils.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "NetUtils"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "NetdClient.h"
 #include <utils/misc.h>
 #include <android_runtime/AndroidRuntime.h>
diff --git a/core/jni/android_net_TrafficStats.cpp b/core/jni/android_net_TrafficStats.cpp
index 7b7d0cf..d0c237d 100644
--- a/core/jni/android_net_TrafficStats.cpp
+++ b/core/jni/android_net_TrafficStats.cpp
@@ -25,7 +25,7 @@
 
 #include "core_jni_helpers.h"
 #include <jni.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 #include <utils/misc.h>
 #include <utils/Log.h>
 
diff --git a/core/jni/android_opengl_EGL14.cpp b/core/jni/android_opengl_EGL14.cpp
index c8b1784..6163588 100644
--- a/core/jni/android_opengl_EGL14.cpp
+++ b/core/jni/android_opengl_EGL14.cpp
@@ -21,7 +21,7 @@
 #pragma GCC diagnostic ignored "-Wunused-function"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/android_view_Surface.h>
 #include <android_runtime/android_graphics_SurfaceTexture.h>
diff --git a/core/jni/android_opengl_EGLExt.cpp b/core/jni/android_opengl_EGLExt.cpp
index 62ccad4..df1aa20 100644
--- a/core/jni/android_opengl_EGLExt.cpp
+++ b/core/jni/android_opengl_EGLExt.cpp
@@ -21,7 +21,7 @@
 #pragma GCC diagnostic ignored "-Wunused-function"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/android_view_Surface.h>
 #include <android_runtime/android_graphics_SurfaceTexture.h>
diff --git a/core/jni/android_opengl_GLES10.cpp b/core/jni/android_opengl_GLES10.cpp
index 5bcb800..6d4f6ec 100644
--- a/core/jni/android_opengl_GLES10.cpp
+++ b/core/jni/android_opengl_GLES10.cpp
@@ -25,7 +25,7 @@
 #include <GLES/glext.h>
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/misc.h>
 #include <assert.h>
diff --git a/core/jni/android_opengl_GLES10Ext.cpp b/core/jni/android_opengl_GLES10Ext.cpp
index 38f7ba6..e630cfca 100644
--- a/core/jni/android_opengl_GLES10Ext.cpp
+++ b/core/jni/android_opengl_GLES10Ext.cpp
@@ -25,7 +25,7 @@
 #include <GLES/glext.h>
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/misc.h>
 #include <assert.h>
diff --git a/core/jni/android_opengl_GLES11.cpp b/core/jni/android_opengl_GLES11.cpp
index 014672d..ab9cbb1 100644
--- a/core/jni/android_opengl_GLES11.cpp
+++ b/core/jni/android_opengl_GLES11.cpp
@@ -25,7 +25,7 @@
 #include <GLES/glext.h>
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/misc.h>
 #include <assert.h>
diff --git a/core/jni/android_opengl_GLES11Ext.cpp b/core/jni/android_opengl_GLES11Ext.cpp
index b4a1ab6..8f71a6d 100644
--- a/core/jni/android_opengl_GLES11Ext.cpp
+++ b/core/jni/android_opengl_GLES11Ext.cpp
@@ -25,7 +25,7 @@
 #include <GLES/glext.h>
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/misc.h>
 #include <assert.h>
diff --git a/core/jni/android_opengl_GLES20.cpp b/core/jni/android_opengl_GLES20.cpp
index c1ffa81..f83d204 100644
--- a/core/jni/android_opengl_GLES20.cpp
+++ b/core/jni/android_opengl_GLES20.cpp
@@ -25,7 +25,7 @@
 #include <GLES2/gl2ext.h>
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/misc.h>
 #include <assert.h>
diff --git a/core/jni/android_opengl_GLES30.cpp b/core/jni/android_opengl_GLES30.cpp
index 1d12b0a..b649daf 100644
--- a/core/jni/android_opengl_GLES30.cpp
+++ b/core/jni/android_opengl_GLES30.cpp
@@ -25,7 +25,7 @@
 #include <GLES3/gl3ext.h>
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/misc.h>
 #include <assert.h>
diff --git a/core/jni/android_opengl_GLES31.cpp b/core/jni/android_opengl_GLES31.cpp
index e0750e4..07d920f 100644
--- a/core/jni/android_opengl_GLES31.cpp
+++ b/core/jni/android_opengl_GLES31.cpp
@@ -23,7 +23,7 @@
 #include <stdint.h>
 #include <GLES3/gl31.h>
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/misc.h>
 #include <assert.h>
diff --git a/core/jni/android_opengl_GLES31Ext.cpp b/core/jni/android_opengl_GLES31Ext.cpp
index 8212eb1..723dd4c 100644
--- a/core/jni/android_opengl_GLES31Ext.cpp
+++ b/core/jni/android_opengl_GLES31Ext.cpp
@@ -24,7 +24,7 @@
 #include <GLES2/gl2ext.h>
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/misc.h>
 #include <assert.h>
diff --git a/core/jni/android_opengl_GLES32.cpp b/core/jni/android_opengl_GLES32.cpp
index 91b573b..62a6e6c 100644
--- a/core/jni/android_opengl_GLES32.cpp
+++ b/core/jni/android_opengl_GLES32.cpp
@@ -23,7 +23,7 @@
 #include <stdint.h>
 #include <GLES3/gl32.h>
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/misc.h>
 #include <assert.h>
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index 76140c0..4370747 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -29,6 +29,7 @@
 #include <time.h>
 #include <unistd.h>
 
+#include <atomic>
 #include <iomanip>
 #include <string>
 
@@ -44,14 +45,13 @@
 #include "jni.h"
 #include <memtrack/memtrack.h>
 #include <memunreachable/memunreachable.h>
+#include "android_os_Debug.h"
 
 namespace android
 {
 
-using UniqueFile = std::unique_ptr<FILE, decltype(&fclose)>;
-
 static inline UniqueFile MakeUniqueFile(const char* path, const char* mode) {
-    return UniqueFile(fopen(path, mode), fclose);
+    return UniqueFile(fopen(path, mode), safeFclose);
 }
 
 enum {
@@ -77,14 +77,27 @@
     HEAP_GL,
     HEAP_OTHER_MEMTRACK,
 
+    // Dalvik extra sections (heap).
     HEAP_DALVIK_NORMAL,
     HEAP_DALVIK_LARGE,
-    HEAP_DALVIK_LINEARALLOC,
-    HEAP_DALVIK_ACCOUNTING,
-    HEAP_DALVIK_CODE_CACHE,
     HEAP_DALVIK_ZYGOTE,
     HEAP_DALVIK_NON_MOVING,
-    HEAP_DALVIK_INDIRECT_REFERENCE_TABLE,
+
+    // Dalvik other extra sections.
+    HEAP_DALVIK_OTHER_LINEARALLOC,
+    HEAP_DALVIK_OTHER_ACCOUNTING,
+    HEAP_DALVIK_OTHER_CODE_CACHE,
+    HEAP_DALVIK_OTHER_COMPILER_METADATA,
+    HEAP_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE,
+
+    // Boot vdex / app dex / app vdex
+    HEAP_DEX_BOOT_VDEX,
+    HEAP_DEX_APP_DEX,
+    HEAP_DEX_APP_VDEX,
+
+    // App art, boot art.
+    HEAP_ART_APP,
+    HEAP_ART_BOOT,
 
     _NUM_HEAP,
     _NUM_EXCLUSIVE_HEAP = HEAP_OTHER_MEMTRACK+1,
@@ -138,6 +151,14 @@
     int swappedOutPss;
 };
 
+enum pss_rollup_support {
+  PSS_ROLLUP_UNTRIED,
+  PSS_ROLLUP_SUPPORTED,
+  PSS_ROLLUP_UNSUPPORTED
+};
+
+static std::atomic<pss_rollup_support> g_pss_rollup_support;
+
 #define BINDER_STATS "/proc/binder/stats"
 
 static jlong android_os_Debug_getNativeHeapSize(JNIEnv *env, jobject clazz)
@@ -293,15 +314,30 @@
                 whichHeap = HEAP_TTF;
                 is_swappable = true;
             } else if ((nameLen > 4 && strstr(name, ".dex") != NULL) ||
-                       (nameLen > 5 && strcmp(name+nameLen-5, ".odex") == 0) ||
-                       (nameLen > 5 && strcmp(name+nameLen-5, ".vdex") == 0)) {
+                       (nameLen > 5 && strcmp(name+nameLen-5, ".odex") == 0)) {
                 whichHeap = HEAP_DEX;
+                subHeap = HEAP_DEX_APP_DEX;
+                is_swappable = true;
+            } else if (nameLen > 5 && strcmp(name+nameLen-5, ".vdex") == 0) {
+                whichHeap = HEAP_DEX;
+                // Handle system@framework@boot* and system/framework/boot*
+                if (strstr(name, "@boot") != NULL || strstr(name, "/boot") != NULL) {
+                    subHeap = HEAP_DEX_BOOT_VDEX;
+                } else {
+                    subHeap = HEAP_DEX_APP_VDEX;
+                }
                 is_swappable = true;
             } else if (nameLen > 4 && strcmp(name+nameLen-4, ".oat") == 0) {
                 whichHeap = HEAP_OAT;
                 is_swappable = true;
             } else if (nameLen > 4 && strcmp(name+nameLen-4, ".art") == 0) {
                 whichHeap = HEAP_ART;
+                // Handle system@framework@boot* and system/framework/boot*
+                if (strstr(name, "@boot") != NULL || strstr(name, "/boot") != NULL) {
+                    subHeap = HEAP_ART_BOOT;
+                } else {
+                    subHeap = HEAP_ART_APP;
+                }
                 is_swappable = true;
             } else if (strncmp(name, "/dev/", 5) == 0) {
                 if (strncmp(name, "/dev/kgsl-3d0", 13) == 0) {
@@ -310,7 +346,7 @@
                     if (strncmp(name, "/dev/ashmem/dalvik-", 19) == 0) {
                         whichHeap = HEAP_DALVIK_OTHER;
                         if (strstr(name, "/dev/ashmem/dalvik-LinearAlloc") == name) {
-                            subHeap = HEAP_DALVIK_LINEARALLOC;
+                            subHeap = HEAP_DALVIK_OTHER_LINEARALLOC;
                         } else if ((strstr(name, "/dev/ashmem/dalvik-alloc space") == name) ||
                                    (strstr(name, "/dev/ashmem/dalvik-main space") == name)) {
                             // This is the regular Dalvik heap.
@@ -328,13 +364,14 @@
                             whichHeap = HEAP_DALVIK;
                             subHeap = HEAP_DALVIK_ZYGOTE;
                         } else if (strstr(name, "/dev/ashmem/dalvik-indirect ref") == name) {
-                            subHeap = HEAP_DALVIK_INDIRECT_REFERENCE_TABLE;
+                            subHeap = HEAP_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE;
                         } else if (strstr(name, "/dev/ashmem/dalvik-jit-code-cache") == name ||
-                                   strstr(name, "/dev/ashmem/dalvik-data-code-cache") == name ||
-                                   strstr(name, "/dev/ashmem/dalvik-CompilerMetadata") == name) {
-                            subHeap = HEAP_DALVIK_CODE_CACHE;
+                                   strstr(name, "/dev/ashmem/dalvik-data-code-cache") == name) {
+                            subHeap = HEAP_DALVIK_OTHER_CODE_CACHE;
+                        } else if (strstr(name, "/dev/ashmem/dalvik-CompilerMetadata") == name) {
+                            subHeap = HEAP_DALVIK_OTHER_COMPILER_METADATA;
                         } else {
-                            subHeap = HEAP_DALVIK_ACCOUNTING;  // Default to accounting.
+                            subHeap = HEAP_DALVIK_OTHER_ACCOUNTING;  // Default to accounting.
                         }
                     } else if (strncmp(name, "/dev/ashmem/CursorWindow", 24) == 0) {
                         whichHeap = HEAP_CURSOR;
@@ -419,7 +456,8 @@
             stats[whichHeap].sharedClean += shared_clean;
             stats[whichHeap].swappedOut += swapped_out;
             stats[whichHeap].swappedOutPss += swapped_out_pss;
-            if (whichHeap == HEAP_DALVIK || whichHeap == HEAP_DALVIK_OTHER) {
+            if (whichHeap == HEAP_DALVIK || whichHeap == HEAP_DALVIK_OTHER ||
+                    whichHeap == HEAP_DEX || whichHeap == HEAP_ART) {
                 stats[subHeap].pss += pss;
                 stats[subHeap].swappablePss += swappable_pss;
                 stats[subHeap].privateDirty += private_dirty;
@@ -514,6 +552,33 @@
     android_os_Debug_getDirtyPagesPid(env, clazz, getpid(), object);
 }
 
+UniqueFile OpenSmapsOrRollup(int pid)
+{
+    enum pss_rollup_support rollup_support =
+            g_pss_rollup_support.load(std::memory_order_relaxed);
+    if (rollup_support != PSS_ROLLUP_UNSUPPORTED) {
+        std::string smaps_rollup_path =
+                base::StringPrintf("/proc/%d/smaps_rollup", pid);
+        UniqueFile fp_rollup = MakeUniqueFile(smaps_rollup_path.c_str(), "re");
+        if (fp_rollup == nullptr && errno != ENOENT) {
+            return fp_rollup;  // Actual error, not just old kernel.
+        }
+        if (fp_rollup != nullptr) {
+            if (rollup_support == PSS_ROLLUP_UNTRIED) {
+                ALOGI("using rollup pss collection");
+                g_pss_rollup_support.store(PSS_ROLLUP_SUPPORTED,
+                                           std::memory_order_relaxed);
+            }
+            return fp_rollup;
+        }
+        g_pss_rollup_support.store(PSS_ROLLUP_UNSUPPORTED,
+                                   std::memory_order_relaxed);
+    }
+
+    std::string smaps_path = base::StringPrintf("/proc/%d/smaps", pid);
+    return MakeUniqueFile(smaps_path.c_str(), "re");
+}
+
 static jlong android_os_Debug_getPssPid(JNIEnv *env, jobject clazz, jint pid,
         jlongArray outUssSwapPss, jlongArray outMemtrack)
 {
@@ -529,12 +594,11 @@
     }
 
     {
-        std::string smaps_path = base::StringPrintf("/proc/%d/smaps", pid);
-        UniqueFile fp = MakeUniqueFile(smaps_path.c_str(), "re");
+        UniqueFile fp = OpenSmapsOrRollup(pid);
 
         if (fp != nullptr) {
             while (true) {
-                if (fgets(line, 1024, fp.get()) == NULL) {
+                if (fgets(line, sizeof (line), fp.get()) == NULL) {
                     break;
                 }
 
@@ -641,6 +705,8 @@
     MEMINFO_CACHED,
     MEMINFO_SHMEM,
     MEMINFO_SLAB,
+    MEMINFO_SLAB_RECLAIMABLE,
+    MEMINFO_SLAB_UNRECLAIMABLE,
     MEMINFO_SWAP_TOTAL,
     MEMINFO_SWAP_FREE,
     MEMINFO_ZRAM_TOTAL,
@@ -712,6 +778,8 @@
             "Cached:",
             "Shmem:",
             "Slab:",
+            "SReclaimable:",
+            "SUnreclaim:",
             "SwapTotal:",
             "SwapFree:",
             "ZRam:",
@@ -728,6 +796,8 @@
             7,
             6,
             5,
+            13,
+            11,
             10,
             9,
             5,
@@ -737,7 +807,7 @@
             12,
             0
     };
-    long mem[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+    long mem[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 
     char* p = buffer;
     while (*p && numFound < (sizeof(tagsLen) / sizeof(tagsLen[0]))) {
@@ -972,21 +1042,16 @@
     fprintf(fp, "END\n");
 }
 
-/*
- * Dump the native heap, writing human-readable output to the specified
- * file descriptor.
- */
-static void android_os_Debug_dumpNativeHeap(JNIEnv* env, jobject clazz,
-    jobject fileDescriptor)
+static bool openFile(JNIEnv* env, jobject fileDescriptor, UniqueFile& fp)
 {
     if (fileDescriptor == NULL) {
         jniThrowNullPointerException(env, "fd == null");
-        return;
+        return false;
     }
     int origFd = jniGetFDFromFileDescriptor(env, fileDescriptor);
     if (origFd < 0) {
         jniThrowRuntimeException(env, "Invalid file descriptor");
-        return;
+        return false;
     }
 
     /* dup() the descriptor so we don't close the original with fclose() */
@@ -994,14 +1059,28 @@
     if (fd < 0) {
         ALOGW("dup(%d) failed: %s\n", origFd, strerror(errno));
         jniThrowRuntimeException(env, "dup() failed");
-        return;
+        return false;
     }
 
-    UniqueFile fp(fdopen(fd, "w"), fclose);
+    fp.reset(fdopen(fd, "w"));
     if (fp == nullptr) {
         ALOGW("fdopen(%d) failed: %s\n", fd, strerror(errno));
         close(fd);
         jniThrowRuntimeException(env, "fdopen() failed");
+        return false;
+    }
+    return true;
+}
+
+/*
+ * Dump the native heap, writing human-readable output to the specified
+ * file descriptor.
+ */
+static void android_os_Debug_dumpNativeHeap(JNIEnv* env, jobject,
+    jobject fileDescriptor)
+{
+    UniqueFile fp(nullptr, safeFclose);
+    if (!openFile(env, fileDescriptor, fp)) {
         return;
     }
 
@@ -1010,6 +1089,21 @@
     ALOGD("Native heap dump complete.\n");
 }
 
+/*
+ * Dump the native malloc info, writing xml output to the specified
+ * file descriptor.
+ */
+static void android_os_Debug_dumpNativeMallocInfo(JNIEnv* env, jobject,
+    jobject fileDescriptor)
+{
+    UniqueFile fp(nullptr, safeFclose);
+    if (!openFile(env, fileDescriptor, fp)) {
+        return;
+    }
+
+    malloc_info(0, fp.get());
+}
+
 static bool dumpTraces(JNIEnv* env, jint pid, jstring fileName, jint timeoutSecs,
                        DebuggerdDumpType dumpType) {
     const ScopedUtfChars fileNameChars(env, fileName);
@@ -1070,6 +1164,8 @@
             (void*) android_os_Debug_getMemInfo },
     { "dumpNativeHeap",         "(Ljava/io/FileDescriptor;)V",
             (void*) android_os_Debug_dumpNativeHeap },
+    { "dumpNativeMallocInfo",   "(Ljava/io/FileDescriptor;)V",
+            (void*) android_os_Debug_dumpNativeMallocInfo },
     { "getBinderSentTransactions", "()I",
             (void*) android_os_Debug_getBinderSentTransactions },
     { "getBinderReceivedTransactions", "()I",
diff --git a/core/jni/android_os_Debug.h b/core/jni/android_os_Debug.h
new file mode 100644
index 0000000..81270ca
--- /dev/null
+++ b/core/jni/android_os_Debug.h
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+
+#ifndef ANDROID_OS_DEBUG_H
+#define ANDROID_OS_DEBUG_H
+
+#include <memory>
+#include <stdio.h>
+
+namespace android {
+
+inline void safeFclose(FILE* fp) {
+  if (fp) fclose(fp);
+}
+
+using UniqueFile = std::unique_ptr<FILE, decltype(&safeFclose)>;
+UniqueFile OpenSmapsOrRollup(int pid);
+
+}  // namespace android
+
+#endif  // ANDROID_OS_HW_BLOB_H
diff --git a/core/jni/android_os_HwBinder.cpp b/core/jni/android_os_HwBinder.cpp
index 6c6fa66..1b14d282 100644
--- a/core/jni/android_os_HwBinder.cpp
+++ b/core/jni/android_os_HwBinder.cpp
@@ -25,7 +25,7 @@
 
 #include <cstring>
 
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android/hidl/manager/1.0/IServiceManager.h>
 #include <android/hidl/base/1.0/IBase.h>
 #include <android/hidl/base/1.0/BpHwBase.h>
@@ -42,6 +42,8 @@
 using android::AndroidRuntime;
 using android::hardware::hidl_vec;
 using android::hardware::hidl_string;
+using android::hardware::IPCThreadState;
+using android::hardware::ProcessState;
 template<typename T>
 using Return = android::hardware::Return<T>;
 
@@ -381,8 +383,7 @@
         return NULL;
     }
 
-    sp<hardware::IBinder> service = hardware::toBinder<
-            hidl::base::V1_0::IBase, hidl::base::V1_0::BpHwBase>(ret);
+    sp<hardware::IBinder> service = hardware::toBinder<hidl::base::V1_0::IBase>(ret);
 
     if (service == NULL) {
         signalExceptionForError(env, NAME_NOT_FOUND);
@@ -395,6 +396,15 @@
     return JHwRemoteBinder::NewObject(env, service);
 }
 
+void JHwBinder_native_configureRpcThreadpool(jlong maxThreads, jboolean callerWillJoin) {
+    CHECK(maxThreads > 0);
+    ProcessState::self()->setThreadPoolConfiguration(maxThreads, callerWillJoin /*callerJoinsPool*/);
+}
+
+void JHwBinder_native_joinRpcThreadpool() {
+    IPCThreadState::self()->joinThreadPool();
+}
+
 static JNINativeMethod gMethods[] = {
     { "native_init", "()J", (void *)JHwBinder_native_init },
     { "native_setup", "()V", (void *)JHwBinder_native_setup },
@@ -408,6 +418,12 @@
 
     { "getService", "(Ljava/lang/String;Ljava/lang/String;)L" PACKAGE_PATH "/IHwBinder;",
         (void *)JHwBinder_native_getService },
+
+    { "configureRpcThreadpool", "(JZ)V",
+        (void *)JHwBinder_native_configureRpcThreadpool },
+
+    { "joinRpcThreadpool", "()V",
+        (void *)JHwBinder_native_joinRpcThreadpool },
 };
 
 namespace android {
diff --git a/core/jni/android_os_HwBlob.cpp b/core/jni/android_os_HwBlob.cpp
index d00f17f..632d7de 100644
--- a/core/jni/android_os_HwBlob.cpp
+++ b/core/jni/android_os_HwBlob.cpp
@@ -22,7 +22,7 @@
 
 #include "android_os_HwParcel.h"
 
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <hidl/Status.h>
 #include <nativehelper/ScopedLocalRef.h>
@@ -83,12 +83,6 @@
       mSize(size),
       mOwnsBuffer(true),
       mHandle(0) {
-    jclass clazz = env->GetObjectClass(thiz);
-    CHECK(clazz != NULL);
-
-    mClass = (jclass)env->NewGlobalRef(clazz);
-    mObject = env->NewWeakGlobalRef(thiz);
-
     if (size > 0) {
         mBuffer = calloc(size, 1);
     }
@@ -99,14 +93,6 @@
         free(mBuffer);
         mBuffer = nullptr;
     }
-
-    JNIEnv *env = AndroidRuntime::getJNIEnv();
-
-    env->DeleteWeakGlobalRef(mObject);
-    mObject = NULL;
-
-    env->DeleteGlobalRef(mClass);
-    mClass = NULL;
 }
 
 void JHwBlob::setTo(const void *ptr, size_t handle) {
diff --git a/core/jni/android_os_HwBlob.h b/core/jni/android_os_HwBlob.h
index 0920488..39393cb 100644
--- a/core/jni/android_os_HwBlob.h
+++ b/core/jni/android_os_HwBlob.h
@@ -70,9 +70,6 @@
         sp<JHwBlob> mBlob;
     };
 
-    jclass mClass;
-    jobject mObject;
-
     void *mBuffer;
     size_t mSize;
     bool mOwnsBuffer;
diff --git a/core/jni/android_os_HwParcel.cpp b/core/jni/android_os_HwParcel.cpp
index 6ea809a..9494fb8 100644
--- a/core/jni/android_os_HwParcel.cpp
+++ b/core/jni/android_os_HwParcel.cpp
@@ -24,7 +24,7 @@
 #include "android_os_HwBlob.h"
 #include "android_os_HwRemoteBinder.h"
 
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <hidl/HidlTransportSupport.h>
 #include <hidl/Status.h>
@@ -166,10 +166,6 @@
       mOwnsParcel(false),
       mTransactCallback(nullptr),
       mWasSent(false) {
-    jclass clazz = env->GetObjectClass(thiz);
-    CHECK(clazz != NULL);
-
-    mObject = env->NewWeakGlobalRef(thiz);
 }
 
 JHwParcel::~JHwParcel() {
@@ -178,9 +174,6 @@
     mStorage.release(env);
 
     setParcel(NULL, false /* assumeOwnership */);
-
-    env->DeleteWeakGlobalRef(mObject);
-    mObject = NULL;
 }
 
 hardware::Parcel *JHwParcel::getParcel() {
diff --git a/core/jni/android_os_HwParcel.h b/core/jni/android_os_HwParcel.h
index f6e6100..2c26993 100644
--- a/core/jni/android_os_HwParcel.h
+++ b/core/jni/android_os_HwParcel.h
@@ -53,8 +53,6 @@
     virtual ~JHwParcel();
 
 private:
-    jobject mObject;
-
     hardware::Parcel *mParcel;
     bool mOwnsParcel;
 
diff --git a/core/jni/android_os_HwRemoteBinder.cpp b/core/jni/android_os_HwRemoteBinder.cpp
index 9c2ee9c..cf59a56a 100644
--- a/core/jni/android_os_HwRemoteBinder.cpp
+++ b/core/jni/android_os_HwRemoteBinder.cpp
@@ -22,10 +22,10 @@
 
 #include "android_os_HwParcel.h"
 
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <hidl/Status.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 #include <nativehelper/ScopedLocalRef.h>
 
 #include "core_jni_helpers.h"
diff --git a/core/jni/android_os_MemoryFile.cpp b/core/jni/android_os_MemoryFile.cpp
index c198a73..b21566b 100644
--- a/core/jni/android_os_MemoryFile.cpp
+++ b/core/jni/android_os_MemoryFile.cpp
@@ -19,102 +19,21 @@
 
 #include <cutils/ashmem.h>
 #include "core_jni_helpers.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <unistd.h>
 #include <sys/mman.h>
 
 
 namespace android {
 
-static jobject android_os_MemoryFile_open(JNIEnv* env, jobject clazz, jstring name, jint length)
-{
-    const char* namestr = (name ? env->GetStringUTFChars(name, NULL) : NULL);
-
-    int result = ashmem_create_region(namestr, length);
-
-    if (name)
-        env->ReleaseStringUTFChars(name, namestr);
-
-    if (result < 0) {
-        jniThrowException(env, "java/io/IOException", "ashmem_create_region failed");
-        return NULL;
-    }
-
-    return jniCreateFileDescriptor(env, result);
-}
-
-static jlong android_os_MemoryFile_mmap(JNIEnv* env, jobject clazz, jobject fileDescriptor,
-        jint length, jint prot)
-{
-    int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
-    void* result = mmap(NULL, length, prot, MAP_SHARED, fd, 0);
-    if (result == MAP_FAILED) {
-        jniThrowException(env, "java/io/IOException", "mmap failed");
-    }
-    return reinterpret_cast<jlong>(result);
-}
-
-static void android_os_MemoryFile_munmap(JNIEnv* env, jobject clazz, jlong addr, jint length)
-{
-    int result = munmap(reinterpret_cast<void *>(addr), length);
-    if (result < 0)
-        jniThrowException(env, "java/io/IOException", "munmap failed");
-}
-
-static void android_os_MemoryFile_close(JNIEnv* env, jobject clazz, jobject fileDescriptor)
-{
-    int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
-    if (fd >= 0) {
-        jniSetFileDescriptorOfFD(env, fileDescriptor, -1);
-        close(fd);
-    }
-}
-
-static jint android_os_MemoryFile_read(JNIEnv* env, jobject clazz,
-        jobject fileDescriptor, jlong address, jbyteArray buffer, jint srcOffset, jint destOffset,
-        jint count, jboolean unpinned)
-{
-    int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
-    if (unpinned && ashmem_pin_region(fd, 0, 0) == ASHMEM_WAS_PURGED) {
-        ashmem_unpin_region(fd, 0, 0);
-        jniThrowException(env, "java/io/IOException", "ashmem region was purged");
-        return -1;
-    }
-
-    env->SetByteArrayRegion(buffer, destOffset, count, (const jbyte *)address + srcOffset);
-
-    if (unpinned) {
-        ashmem_unpin_region(fd, 0, 0);
-    }
-    return count;
-}
-
-static jint android_os_MemoryFile_write(JNIEnv* env, jobject clazz,
-        jobject fileDescriptor, jlong address, jbyteArray buffer, jint srcOffset, jint destOffset,
-        jint count, jboolean unpinned)
-{
-    int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
-    if (unpinned && ashmem_pin_region(fd, 0, 0) == ASHMEM_WAS_PURGED) {
-        ashmem_unpin_region(fd, 0, 0);
-        jniThrowException(env, "java/io/IOException", "ashmem region was purged");
-        return -1;
-    }
-
-    env->GetByteArrayRegion(buffer, srcOffset, count, (jbyte *)address + destOffset);
-
-    if (unpinned) {
-        ashmem_unpin_region(fd, 0, 0);
-    }
-    return count;
-}
-
-static void android_os_MemoryFile_pin(JNIEnv* env, jobject clazz, jobject fileDescriptor, jboolean pin)
-{
+static jboolean android_os_MemoryFile_pin(JNIEnv* env, jobject clazz, jobject fileDescriptor,
+        jboolean pin) {
     int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
     int result = (pin ? ashmem_pin_region(fd, 0, 0) : ashmem_unpin_region(fd, 0, 0));
     if (result < 0) {
         jniThrowException(env, "java/io/IOException", NULL);
     }
+    return result == ASHMEM_WAS_PURGED;
 }
 
 static jint android_os_MemoryFile_get_size(JNIEnv* env, jobject clazz,
@@ -138,19 +57,12 @@
 }
 
 static const JNINativeMethod methods[] = {
-    {"native_open",  "(Ljava/lang/String;I)Ljava/io/FileDescriptor;", (void*)android_os_MemoryFile_open},
-    {"native_mmap",  "(Ljava/io/FileDescriptor;II)J", (void*)android_os_MemoryFile_mmap},
-    {"native_munmap", "(JI)V", (void*)android_os_MemoryFile_munmap},
-    {"native_close", "(Ljava/io/FileDescriptor;)V", (void*)android_os_MemoryFile_close},
-    {"native_read",  "(Ljava/io/FileDescriptor;J[BIIIZ)I", (void*)android_os_MemoryFile_read},
-    {"native_write", "(Ljava/io/FileDescriptor;J[BIIIZ)V", (void*)android_os_MemoryFile_write},
-    {"native_pin",   "(Ljava/io/FileDescriptor;Z)V", (void*)android_os_MemoryFile_pin},
+    {"native_pin",   "(Ljava/io/FileDescriptor;Z)Z", (void*)android_os_MemoryFile_pin},
     {"native_get_size", "(Ljava/io/FileDescriptor;)I",
             (void*)android_os_MemoryFile_get_size}
 };
 
-int register_android_os_MemoryFile(JNIEnv* env)
-{
+int register_android_os_MemoryFile(JNIEnv* env) {
     return RegisterMethodsOrDie(env, "android/os/MemoryFile", methods, NELEM(methods));
 }
 
diff --git a/core/jni/android_os_MessageQueue.cpp b/core/jni/android_os_MessageQueue.cpp
index e57a719..f7a98d1 100644
--- a/core/jni/android_os_MessageQueue.cpp
+++ b/core/jni/android_os_MessageQueue.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "MessageQueue-JNI"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 
 #include <utils/Looper.h>
diff --git a/core/jni/android_os_Parcel.cpp b/core/jni/android_os_Parcel.cpp
index cd7aae7..f0ac79a 100644
--- a/core/jni/android_os_Parcel.cpp
+++ b/core/jni/android_os_Parcel.cpp
@@ -20,7 +20,7 @@
 #include "android_os_Parcel.h"
 #include "android_util_Binder.h"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <fcntl.h>
 #include <stdio.h>
@@ -41,8 +41,8 @@
 #include <utils/threads.h>
 #include <utils/String8.h>
 
-#include <ScopedUtfChars.h>
-#include <ScopedLocalRef.h>
+#include <nativehelper/ScopedUtfChars.h>
+#include <nativehelper/ScopedLocalRef.h>
 
 #include <android_runtime/AndroidRuntime.h>
 
@@ -90,25 +90,25 @@
     env->CallVoidMethod(parcelObj, gParcelOffsets.recycle);
 }
 
-static jint android_os_Parcel_dataSize(JNIEnv* env, jclass clazz, jlong nativePtr)
+static jint android_os_Parcel_dataSize(jlong nativePtr)
 {
     Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
     return parcel ? parcel->dataSize() : 0;
 }
 
-static jint android_os_Parcel_dataAvail(JNIEnv* env, jclass clazz, jlong nativePtr)
+static jint android_os_Parcel_dataAvail(jlong nativePtr)
 {
     Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
     return parcel ? parcel->dataAvail() : 0;
 }
 
-static jint android_os_Parcel_dataPosition(JNIEnv* env, jclass clazz, jlong nativePtr)
+static jint android_os_Parcel_dataPosition(jlong nativePtr)
 {
     Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
     return parcel ? parcel->dataPosition() : 0;
 }
 
-static jint android_os_Parcel_dataCapacity(JNIEnv* env, jclass clazz, jlong nativePtr)
+static jint android_os_Parcel_dataCapacity(jlong nativePtr)
 {
     Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
     return parcel ? parcel->dataCapacity() : 0;
@@ -127,7 +127,7 @@
     return 0;
 }
 
-static void android_os_Parcel_setDataPosition(JNIEnv* env, jclass clazz, jlong nativePtr, jint pos)
+static void android_os_Parcel_setDataPosition(jlong nativePtr, jint pos)
 {
     Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
     if (parcel != NULL) {
@@ -146,7 +146,7 @@
     }
 }
 
-static jboolean android_os_Parcel_pushAllowFds(JNIEnv* env, jclass clazz, jlong nativePtr, jboolean allowFds)
+static jboolean android_os_Parcel_pushAllowFds(jlong nativePtr, jboolean allowFds)
 {
     Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
     jboolean ret = JNI_TRUE;
@@ -156,7 +156,7 @@
     return ret;
 }
 
-static void android_os_Parcel_restoreAllowFds(JNIEnv* env, jclass clazz, jlong nativePtr, jboolean lastValue)
+static void android_os_Parcel_restoreAllowFds(jlong nativePtr, jboolean lastValue)
 {
     Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
     if (parcel != NULL) {
@@ -398,7 +398,7 @@
     return ret;
 }
 
-static jint android_os_Parcel_readInt(JNIEnv* env, jclass clazz, jlong nativePtr)
+static jint android_os_Parcel_readInt(jlong nativePtr)
 {
     Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
     if (parcel != NULL) {
@@ -407,7 +407,7 @@
     return 0;
 }
 
-static jlong android_os_Parcel_readLong(JNIEnv* env, jclass clazz, jlong nativePtr)
+static jlong android_os_Parcel_readLong(jlong nativePtr)
 {
     Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
     if (parcel != NULL) {
@@ -416,7 +416,7 @@
     return 0;
 }
 
-static jfloat android_os_Parcel_readFloat(JNIEnv* env, jclass clazz, jlong nativePtr)
+static jfloat android_os_Parcel_readFloat(jlong nativePtr)
 {
     Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
     if (parcel != NULL) {
@@ -425,7 +425,7 @@
     return 0;
 }
 
-static jdouble android_os_Parcel_readDouble(JNIEnv* env, jclass clazz, jlong nativePtr)
+static jdouble android_os_Parcel_readDouble(jlong nativePtr)
 {
     Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
     if (parcel != NULL) {
@@ -673,7 +673,7 @@
     return thisParcel->getOpenAshmemSize();
 }
 
-static jboolean android_os_Parcel_hasFileDescriptors(JNIEnv* env, jclass clazz, jlong nativePtr)
+static jboolean android_os_Parcel_hasFileDescriptors(jlong nativePtr)
 {
     jboolean ret = JNI_FALSE;
     Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
@@ -747,7 +747,7 @@
     return Parcel::getGlobalAllocCount();
 }
 
-static jlong android_os_Parcel_getBlobAshmemSize(JNIEnv* env, jclass clazz, jlong nativePtr)
+static jlong android_os_Parcel_getBlobAshmemSize(jlong nativePtr)
 {
     Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
     if (parcel != NULL) {
@@ -759,24 +759,24 @@
 // ----------------------------------------------------------------------------
 
 static const JNINativeMethod gParcelMethods[] = {
-    // @FastNative
+    // @CriticalNative
     {"nativeDataSize",            "(J)I", (void*)android_os_Parcel_dataSize},
-    // @FastNative
+    // @CriticalNative
     {"nativeDataAvail",           "(J)I", (void*)android_os_Parcel_dataAvail},
-    // @FastNative
+    // @CriticalNative
     {"nativeDataPosition",        "(J)I", (void*)android_os_Parcel_dataPosition},
-    // @FastNative
+    // @CriticalNative
     {"nativeDataCapacity",        "(J)I", (void*)android_os_Parcel_dataCapacity},
     // @FastNative
     {"nativeSetDataSize",         "(JI)J", (void*)android_os_Parcel_setDataSize},
-    // @FastNative
+    // @CriticalNative
     {"nativeSetDataPosition",     "(JI)V", (void*)android_os_Parcel_setDataPosition},
     // @FastNative
     {"nativeSetDataCapacity",     "(JI)V", (void*)android_os_Parcel_setDataCapacity},
 
-    // @FastNative
+    // @CriticalNative
     {"nativePushAllowFds",        "(JZ)Z", (void*)android_os_Parcel_pushAllowFds},
-    // @FastNative
+    // @CriticalNative
     {"nativeRestoreAllowFds",     "(JZ)V", (void*)android_os_Parcel_restoreAllowFds},
 
     {"nativeWriteByteArray",      "(J[BII)V", (void*)android_os_Parcel_writeByteArray},
@@ -796,13 +796,13 @@
     {"nativeCreateByteArray",     "(J)[B", (void*)android_os_Parcel_createByteArray},
     {"nativeReadByteArray",       "(J[BI)Z", (void*)android_os_Parcel_readByteArray},
     {"nativeReadBlob",            "(J)[B", (void*)android_os_Parcel_readBlob},
-    // @FastNative
+    // @CriticalNative
     {"nativeReadInt",             "(J)I", (void*)android_os_Parcel_readInt},
-    // @FastNative
+    // @CriticalNative
     {"nativeReadLong",            "(J)J", (void*)android_os_Parcel_readLong},
-    // @FastNative
+    // @CriticalNative
     {"nativeReadFloat",           "(J)F", (void*)android_os_Parcel_readFloat},
-    // @FastNative
+    // @CriticalNative
     {"nativeReadDouble",          "(J)D", (void*)android_os_Parcel_readDouble},
     {"nativeReadString",          "(J)Ljava/lang/String;", (void*)android_os_Parcel_readString},
     {"nativeReadStrongBinder",    "(J)Landroid/os/IBinder;", (void*)android_os_Parcel_readStrongBinder},
@@ -821,7 +821,7 @@
     {"nativeUnmarshall",          "(J[BII)J", (void*)android_os_Parcel_unmarshall},
     {"nativeCompareData",         "(JJ)I", (void*)android_os_Parcel_compareData},
     {"nativeAppendFrom",          "(JJII)J", (void*)android_os_Parcel_appendFrom},
-    // @FastNative
+    // @CriticalNative
     {"nativeHasFileDescriptors",  "(J)Z", (void*)android_os_Parcel_hasFileDescriptors},
     {"nativeWriteInterfaceToken", "(JLjava/lang/String;)V", (void*)android_os_Parcel_writeInterfaceToken},
     {"nativeEnforceInterface",    "(JLjava/lang/String;)V", (void*)android_os_Parcel_enforceInterface},
@@ -829,6 +829,7 @@
     {"getGlobalAllocSize",        "()J", (void*)android_os_Parcel_getGlobalAllocSize},
     {"getGlobalAllocCount",       "()J", (void*)android_os_Parcel_getGlobalAllocCount},
 
+    // @CriticalNative
     {"nativeGetBlobAshmemSize",       "(J)J", (void*)android_os_Parcel_getBlobAshmemSize},
 };
 
diff --git a/core/jni/android_os_SELinux.cpp b/core/jni/android_os_SELinux.cpp
index 4b68c0d..6778b29 100644
--- a/core/jni/android_os_SELinux.cpp
+++ b/core/jni/android_os_SELinux.cpp
@@ -17,15 +17,15 @@
 #define LOG_TAG "SELinuxJNI"
 #include <utils/Log.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 #include "core_jni_helpers.h"
 #include "selinux/selinux.h"
 #include "selinux/android.h"
 #include <errno.h>
 #include <memory>
-#include <ScopedLocalRef.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedLocalRef.h>
+#include <nativehelper/ScopedUtfChars.h>
 
 namespace android {
 
diff --git a/core/jni/android_os_SharedMemory.cpp b/core/jni/android_os_SharedMemory.cpp
new file mode 100644
index 0000000..24d0811
--- /dev/null
+++ b/core/jni/android_os_SharedMemory.cpp
@@ -0,0 +1,105 @@
+/*
+ * 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 "SharedMemory"
+
+#include "core_jni_helpers.h"
+
+#include <cutils/ashmem.h>
+#include <utils/Log.h>
+#include "JNIHelp.h"
+#include "JniConstants.h"
+#include "ScopedLocalRef.h"
+
+#include <algorithm>
+#include <errno.h>
+#include <limits>
+#include <unistd.h>
+
+namespace {
+
+static void throwErrnoException(JNIEnv* env, const char* functionName, int error) {
+    static jmethodID ctor = env->GetMethodID(JniConstants::errnoExceptionClass,
+            "<init>", "(Ljava/lang/String;I)V");
+
+    ScopedLocalRef<jstring> detailMessage(env, env->NewStringUTF(functionName));
+    if (detailMessage.get() == NULL) {
+        // Not really much we can do here. We're probably dead in the water,
+        // but let's try to stumble on...
+        env->ExceptionClear();
+    }
+
+    jobject exception = env->NewObject(JniConstants::errnoExceptionClass, ctor,
+            detailMessage.get(), error);
+    env->Throw(reinterpret_cast<jthrowable>(exception));
+}
+
+static jobject SharedMemory_create(JNIEnv* env, jobject, jstring jname, jint size) {
+
+    // Name is optional so we can't use ScopedUtfChars for this as it throws NPE on null
+    const char* name = jname ? env->GetStringUTFChars(jname, nullptr) : nullptr;
+
+    int fd = ashmem_create_region(name, size);
+
+    // Capture the error, if there is one, before calling ReleaseStringUTFChars
+    int err = fd < 0 ? errno : 0;
+
+    if (name) {
+        env->ReleaseStringUTFChars(jname, name);
+    }
+
+    if (fd < 0) {
+        throwErrnoException(env, "SharedMemory_create", err);
+        return nullptr;
+    }
+
+    return jniCreateFileDescriptor(env, fd);
+}
+
+static jint SharedMemory_getSize(JNIEnv* env, jobject, jobject fileDescriptor) {
+    int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
+    if (!ashmem_valid(fd)) {
+        return -1;
+    }
+    size_t size = ashmem_get_size_region(fd);
+    return static_cast<jint>(std::min(size, static_cast<size_t>(std::numeric_limits<jint>::max())));
+}
+
+static jint SharedMemory_setProt(JNIEnv* env, jobject, jobject fileDescriptor, jint prot) {
+    int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
+    int err = 0;
+    if (ashmem_set_prot_region(fd, prot)) {
+        err = errno;
+    }
+    return err;
+}
+
+static const JNINativeMethod methods[] = {
+    {"nCreate", "(Ljava/lang/String;I)Ljava/io/FileDescriptor;", (void*)SharedMemory_create},
+    {"nGetSize", "(Ljava/io/FileDescriptor;)I", (void*)SharedMemory_getSize},
+    {"nSetProt", "(Ljava/io/FileDescriptor;I)I", (void*)SharedMemory_setProt},
+};
+
+} // anonymous namespace
+
+namespace android {
+
+int register_android_os_SharedMemory(JNIEnv* env)
+{
+    return RegisterMethodsOrDie(env, "android/os/SharedMemory", methods, NELEM(methods));
+}
+
+} // namespace android
diff --git a/core/jni/android_os_SystemClock.cpp b/core/jni/android_os_SystemClock.cpp
index 2fade69..1f000d7 100644
--- a/core/jni/android_os_SystemClock.cpp
+++ b/core/jni/android_os_SystemClock.cpp
@@ -25,7 +25,7 @@
 #include <errno.h>
 #include <string.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 #include "core_jni_helpers.h"
 
diff --git a/core/jni/android_os_Trace.cpp b/core/jni/android_os_Trace.cpp
index de91f70..4f4e5da 100644
--- a/core/jni/android_os_Trace.cpp
+++ b/core/jni/android_os_Trace.cpp
@@ -23,9 +23,9 @@
 #include <utils/String8.h>
 #include <log/log.h>
 
-#include <JNIHelp.h>
-#include <ScopedUtfChars.h>
-#include <ScopedStringChars.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedUtfChars.h>
+#include <nativehelper/ScopedStringChars.h>
 
 namespace android {
 
diff --git a/core/jni/android_os_UEventObserver.cpp b/core/jni/android_os_UEventObserver.cpp
index 30d40a2..2df74b0 100644
--- a/core/jni/android_os_UEventObserver.cpp
+++ b/core/jni/android_os_UEventObserver.cpp
@@ -21,13 +21,13 @@
 
 #include "hardware_legacy/uevent.h"
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 #include <utils/Mutex.h>
 #include <utils/Vector.h>
 #include <utils/String8.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 
 namespace android {
 
diff --git a/core/jni/android_os_VintfObject.cpp b/core/jni/android_os_VintfObject.cpp
index fa9379e..7ec4b8e 100644
--- a/core/jni/android_os_VintfObject.cpp
+++ b/core/jni/android_os_VintfObject.cpp
@@ -21,7 +21,7 @@
 #include <vector>
 #include <string>
 
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <vintf/VintfObject.h>
 #include <vintf/parse_string.h>
 #include <vintf/parse_xml.h>
@@ -102,7 +102,10 @@
         cPackageInfo[i] = cString;
         env->ReleaseStringUTFChars(element, cString);
     }
-    int32_t status = VintfObject::CheckCompatibility(cPackageInfo);
+    std::string error;
+    int32_t status = VintfObject::CheckCompatibility(cPackageInfo, &error);
+    if (status)
+        LOG(WARNING) << "VintfObject.verify() returns " << status << ": " << error;
     return status;
 }
 
diff --git a/core/jni/android_os_VintfRuntimeInfo.cpp b/core/jni/android_os_VintfRuntimeInfo.cpp
index ecb6854..19220cf0 100644
--- a/core/jni/android_os_VintfRuntimeInfo.cpp
+++ b/core/jni/android_os_VintfRuntimeInfo.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "VintfRuntimeInfo"
 //#define LOG_NDEBUG 0
 
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <vintf/VintfObject.h>
 #include <vintf/parse_string.h>
 #include <vintf/parse_xml.h>
diff --git a/core/jni/android_os_seccomp.cpp b/core/jni/android_os_seccomp.cpp
index 4502371..06e2a16 100644
--- a/core/jni/android_os_seccomp.cpp
+++ b/core/jni/android_os_seccomp.cpp
@@ -15,7 +15,7 @@
  */
 
 #include "core_jni_helpers.h"
-#include "JniConstants.h"
+#include <nativehelper/JniConstants.h>
 #include "utils/Log.h"
 #include <selinux/selinux.h>
 
diff --git a/core/jni/android_server_NetworkManagementSocketTagger.cpp b/core/jni/android_server_NetworkManagementSocketTagger.cpp
index 818bf53..58295af 100644
--- a/core/jni/android_server_NetworkManagementSocketTagger.cpp
+++ b/core/jni/android_server_NetworkManagementSocketTagger.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "NMST_QTagUidNative"
 #include <utils/Log.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include "jni.h"
 #include <utils/misc.h>
diff --git a/core/jni/android_server_Watchdog.cpp b/core/jni/android_server_Watchdog.cpp
index d1f9434..01d565b 100644
--- a/core/jni/android_server_Watchdog.cpp
+++ b/core/jni/android_server_Watchdog.cpp
@@ -25,7 +25,7 @@
 #include <errno.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 
 static void dumpOneStack(int tid, int outFd) {
diff --git a/core/jni/android_text_AndroidBidi.cpp b/core/jni/android_text_AndroidBidi.cpp
index d744b7c..f72f0f0 100644
--- a/core/jni/android_text_AndroidBidi.cpp
+++ b/core/jni/android_text_AndroidBidi.cpp
@@ -17,7 +17,7 @@
 
 #define LOG_TAG "AndroidUnicode"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 #include "utils/misc.h"
 #include "utils/Log.h"
@@ -42,7 +42,7 @@
             // Set callbacks to override bidi classes of new emoji
             ubidi_setClassCallback(
                     bidi, minikin::emojiBidiOverride, nullptr, nullptr, nullptr, &status);
-            ubidi_setPara(bidi, chs, n, dir, NULL, &status);
+            ubidi_setPara(bidi, reinterpret_cast<const UChar*>(chs), n, dir, NULL, &status);
             if (U_SUCCESS(status)) {
                 for (int i = 0; i < n; ++i) {
                   info[i] = ubidi_getLevelAt(bidi, i);
diff --git a/core/jni/android_text_AndroidCharacter.cpp b/core/jni/android_text_AndroidCharacter.cpp
index 474a74e..8885aac 100644
--- a/core/jni/android_text_AndroidCharacter.cpp
+++ b/core/jni/android_text_AndroidCharacter.cpp
@@ -17,8 +17,8 @@
 
 #define LOG_TAG "AndroidUnicode"
 
-#include "JNIHelp.h"
-#include "ScopedPrimitiveArray.h"
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
 #include "core_jni_helpers.h"
 #include "utils/misc.h"
 #include "utils/Log.h"
diff --git a/core/jni/android_text_StaticLayout.cpp b/core/jni/android_text_StaticLayout.cpp
index 4a445d8..ba8dec1 100644
--- a/core/jni/android_text_StaticLayout.cpp
+++ b/core/jni/android_text_StaticLayout.cpp
@@ -21,9 +21,9 @@
 #include "unicode/brkiter.h"
 #include "utils/misc.h"
 #include "utils/Log.h"
-#include "ScopedStringChars.h"
-#include "ScopedPrimitiveArray.h"
-#include "JNIHelp.h"
+#include <nativehelper/ScopedStringChars.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 #include <cstdint>
 #include <vector>
@@ -137,15 +137,19 @@
     return reinterpret_cast<jlong>(hyphenator);
 }
 
-static void nSetLocale(JNIEnv* env, jclass, jlong nativePtr, jstring javaLocaleName,
-        jlong nativeHyphenator) {
-    ScopedIcuLocale icuLocale(env, javaLocaleName);
+static void nSetLocales(JNIEnv* env, jclass, jlong nativePtr, jstring javaLocaleNames,
+        jlongArray nativeHyphenators) {
     minikin::LineBreaker* b = reinterpret_cast<minikin::LineBreaker*>(nativePtr);
-    minikin::Hyphenator* hyphenator = reinterpret_cast<minikin::Hyphenator*>(nativeHyphenator);
 
-    if (icuLocale.valid()) {
-        b->setLocale(icuLocale.locale(), hyphenator);
+    ScopedUtfChars localeNames(env, javaLocaleNames);
+    ScopedLongArrayRO hyphArr(env, nativeHyphenators);
+    const size_t numLocales = hyphArr.size();
+    std::vector<minikin::Hyphenator*> hyphVec;
+    hyphVec.reserve(numLocales);
+    for (size_t i = 0; i < numLocales; i++) {
+        hyphVec.push_back(reinterpret_cast<minikin::Hyphenator*>(hyphArr[i]));
     }
+    b->setLocales(localeNames.c_str(), hyphVec);
 }
 
 static void nSetIndents(JNIEnv* env, jclass, jlong nativePtr, jintArray indents) {
@@ -194,7 +198,7 @@
     {"nFreeBuilder", "(J)V", (void*) nFreeBuilder},
     {"nFinishBuilder", "(J)V", (void*) nFinishBuilder},
     {"nLoadHyphenator", "(Ljava/nio/ByteBuffer;III)J", (void*) nLoadHyphenator},
-    {"nSetLocale", "(JLjava/lang/String;J)V", (void*) nSetLocale},
+    {"nSetLocales", "(JLjava/lang/String;[J)V", (void*) nSetLocales},
     {"nSetupParagraph", "(J[CIFIF[IIIIZ)V", (void*) nSetupParagraph},
     {"nSetIndents", "(J[I)V", (void*) nSetIndents},
     {"nAddStyleRun", "(JJJIIZ)F", (void*) nAddStyleRun},
diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp
index 90aee9e..b137da3 100644
--- a/core/jni/android_util_AssetManager.cpp
+++ b/core/jni/android_util_AssetManager.cpp
@@ -37,9 +37,9 @@
 #include "android_util_Binder.h"
 #include "core_jni_helpers.h"
 #include "jni.h"
-#include "JNIHelp.h"
-#include "ScopedStringChars.h"
-#include "ScopedUtfChars.h"
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedStringChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 #include "utils/Log.h"
 #include "utils/misc.h"
 #include "utils/String8.h"
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index 26b0034..883d4db 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -20,7 +20,7 @@
 #include "android_os_Parcel.h"
 #include "android_util_Binder.h"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <fcntl.h>
 #include <inttypes.h>
@@ -44,8 +44,8 @@
 #include <utils/SystemClock.h>
 #include <utils/threads.h>
 
-#include <ScopedUtfChars.h>
-#include <ScopedLocalRef.h>
+#include <nativehelper/ScopedUtfChars.h>
+#include <nativehelper/ScopedLocalRef.h>
 
 #include "core_jni_helpers.h"
 
@@ -133,6 +133,14 @@
     jmethodID mCallback;
 } gStrictModeCallbackOffsets;
 
+static struct thread_dispatch_offsets_t
+{
+    // Class state.
+    jclass mClass;
+    jmethodID mDispatchUncaughtException;
+    jmethodID mCurrentThread;
+} gThreadDispatchOffsets;
+
 // ****************************************************************************
 // ****************************************************************************
 // ****************************************************************************
@@ -166,6 +174,23 @@
     return vm->GetEnv((void **)&env, JNI_VERSION_1_4) >= 0 ? env : NULL;
 }
 
+// Report a java.lang.Error (or subclass). This may terminate the runtime.
+static void report_java_lang_error(JNIEnv* env, jthrowable error)
+{
+    // Try to run the uncaught exception machinery.
+    jobject thread = env->CallStaticObjectMethod(gThreadDispatchOffsets.mClass,
+            gThreadDispatchOffsets.mCurrentThread);
+    if (thread != nullptr) {
+        env->CallVoidMethod(thread, gThreadDispatchOffsets.mDispatchUncaughtException,
+                error);
+        // Should not return here, unless more errors occured.
+    }
+    // Some error occurred that meant that either dispatchUncaughtException could not be
+    // called or that it had an error itself (as this should be unreachable under normal
+    // conditions). Clear the exception.
+    env->ExceptionClear();
+}
+
 static void report_exception(JNIEnv* env, jthrowable excep, const char* msg)
 {
     env->ExceptionClear();
@@ -192,6 +217,10 @@
     }
 
     if (env->IsInstanceOf(excep, gErrorOffsets.mClass)) {
+        // Try to report the error. This should not return under normal circumstances.
+        report_java_lang_error(env, excep);
+        // The traditional handling: re-raise and abort.
+
         /*
          * It's an Error: Reraise the exception and ask the runtime to abort.
          */
@@ -836,7 +865,7 @@
     env->SetLongField(obj, gBinderOffsets.mObject, (jlong)jbh);
 }
 
-static void android_os_Binder_destroy(JNIEnv* env, jobject obj)
+static void android_os_Binder_destroyBinder(JNIEnv* env, jobject obj)
 {
     JavaBBinderHolder* jbh = (JavaBBinderHolder*)
         env->GetLongField(obj, gBinderOffsets.mObject);
@@ -847,7 +876,7 @@
     } else {
         // Encountering an uninitialized binder is harmless.  All it means is that
         // the Binder was only partially initialized when its finalizer ran and called
-        // destroy().  The Binder could be partially initialized for several reasons.
+        // destroyBinder().  The Binder could be partially initialized for several reasons.
         // For example, a Binder subclass constructor might have thrown an exception before
         // it could delegate to its superclass's constructor.  Consequently init() would
         // not have been called and the holder pointer would remain NULL.
@@ -872,7 +901,7 @@
     { "getThreadStrictModePolicy", "()I", (void*)android_os_Binder_getThreadStrictModePolicy },
     { "flushPendingCommands", "()V", (void*)android_os_Binder_flushPendingCommands },
     { "init", "()V", (void*)android_os_Binder_init },
-    { "destroy", "()V", (void*)android_os_Binder_destroy },
+    { "destroyBinder", "()V", (void*)android_os_Binder_destroyBinder },
     { "blockUntilThreadAvailable", "()V", (void*)android_os_Binder_blockUntilThreadAvailable }
 };
 
@@ -1337,5 +1366,12 @@
     gStrictModeCallbackOffsets.mCallback = GetStaticMethodIDOrDie(env, clazz,
             "onBinderStrictModePolicyChange", "(I)V");
 
+    clazz = FindClassOrDie(env, "java/lang/Thread");
+    gThreadDispatchOffsets.mClass = MakeGlobalRefOrDie(env, clazz);
+    gThreadDispatchOffsets.mDispatchUncaughtException = GetMethodIDOrDie(env, clazz,
+            "dispatchUncaughtException", "(Ljava/lang/Throwable;)V");
+    gThreadDispatchOffsets.mCurrentThread = GetStaticMethodIDOrDie(env, clazz, "currentThread",
+            "()Ljava/lang/Thread;");
+
     return 0;
 }
diff --git a/core/jni/android_util_EventLog.cpp b/core/jni/android_util_EventLog.cpp
index 8a7600b..9fd7c40 100644
--- a/core/jni/android_util_EventLog.cpp
+++ b/core/jni/android_util_EventLog.cpp
@@ -20,7 +20,7 @@
 
 #include <log/log.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 #include "jni.h"
 
diff --git a/core/jni/android_util_FileObserver.cpp b/core/jni/android_util_FileObserver.cpp
index 2b93b6d..6f975b2 100644
--- a/core/jni/android_util_FileObserver.cpp
+++ b/core/jni/android_util_FileObserver.cpp
@@ -15,7 +15,7 @@
 ** limitations under the License.
 */
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 #include "utils/Log.h"
 #include "utils/misc.h"
diff --git a/core/jni/android_util_Log.cpp b/core/jni/android_util_Log.cpp
index 56505af..a6adc88 100644
--- a/core/jni/android_util_Log.cpp
+++ b/core/jni/android_util_Log.cpp
@@ -26,7 +26,7 @@
 #include <utils/String8.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "utils/misc.h"
 #include "core_jni_helpers.h"
 #include "android_util_Log.h"
diff --git a/core/jni/android_util_Log.h b/core/jni/android_util_Log.h
index 4804a854..8a32864 100644
--- a/core/jni/android_util_Log.h
+++ b/core/jni/android_util_Log.h
@@ -18,7 +18,7 @@
 #define _ANDROID_UTIL_LOG_H
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 
 
 namespace android {
diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp
index f34b138..33c8304 100644
--- a/core/jni/android_util_Process.cpp
+++ b/core/jni/android_util_Process.cpp
@@ -30,7 +30,8 @@
 #include "core_jni_helpers.h"
 
 #include "android_util_Binder.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
+#include "android_os_Debug.h"
 
 #include <dirent.h>
 #include <fcntl.h>
@@ -1092,27 +1093,21 @@
 
 static jlong android_os_Process_getPss(JNIEnv* env, jobject clazz, jint pid)
 {
-    char filename[64];
-
-    snprintf(filename, sizeof(filename), "/proc/%" PRId32 "/smaps", pid);
-
-    FILE * file = fopen(filename, "r");
-    if (!file) {
+    UniqueFile file = OpenSmapsOrRollup(pid);
+    if (file == nullptr) {
         return (jlong) -1;
     }
 
     // Tally up all of the Pss from the various maps
     char line[256];
     jlong pss = 0;
-    while (fgets(line, sizeof(line), file)) {
+    while (fgets(line, sizeof(line), file.get())) {
         jlong v;
         if (sscanf(line, "Pss: %" SCNd64 " kB", &v) == 1) {
             pss += v;
         }
     }
 
-    fclose(file);
-
     // Return the Pss value in bytes, not kilobytes
     return pss * 1024;
 }
diff --git a/core/jni/android_util_StringBlock.cpp b/core/jni/android_util_StringBlock.cpp
index b396afe..760f9e3 100644
--- a/core/jni/android_util_StringBlock.cpp
+++ b/core/jni/android_util_StringBlock.cpp
@@ -18,7 +18,7 @@
 #define LOG_TAG "StringBlock"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <utils/misc.h>
 #include <core_jni_helpers.h>
 #include <utils/Log.h>
diff --git a/core/jni/android_util_XmlBlock.cpp b/core/jni/android_util_XmlBlock.cpp
index 99882cc..ad6bad2 100644
--- a/core/jni/android_util_XmlBlock.cpp
+++ b/core/jni/android_util_XmlBlock.cpp
@@ -18,7 +18,7 @@
 #define LOG_TAG "XmlBlock"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <core_jni_helpers.h>
 #include <androidfw/AssetManager.h>
 #include <androidfw/ResourceTypes.h>
diff --git a/core/jni/android_util_jar_StrictJarFile.cpp b/core/jni/android_util_jar_StrictJarFile.cpp
index 4f1f926..4ab8db4 100644
--- a/core/jni/android_util_jar_StrictJarFile.cpp
+++ b/core/jni/android_util_jar_StrictJarFile.cpp
@@ -22,10 +22,10 @@
 
 #include <log/log.h>
 
-#include "JNIHelp.h"
-#include "JniConstants.h"
-#include "ScopedLocalRef.h"
-#include "ScopedUtfChars.h"
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/JniConstants.h>
+#include <nativehelper/ScopedLocalRef.h>
+#include <nativehelper/ScopedUtfChars.h>
 #include "jni.h"
 #include "ziparchive/zip_archive.h"
 
diff --git a/core/jni/android_view_DisplayEventReceiver.cpp b/core/jni/android_view_DisplayEventReceiver.cpp
index 831393b..c1b5aae 100644
--- a/core/jni/android_view_DisplayEventReceiver.cpp
+++ b/core/jni/android_view_DisplayEventReceiver.cpp
@@ -18,7 +18,7 @@
 
 //#define LOG_NDEBUG 0
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <inttypes.h>
 
@@ -30,7 +30,7 @@
 #include <gui/DisplayEventReceiver.h>
 #include "android_os_MessageQueue.h"
 
-#include <ScopedLocalRef.h>
+#include <nativehelper/ScopedLocalRef.h>
 
 #include "core_jni_helpers.h"
 
diff --git a/core/jni/android_view_InputChannel.cpp b/core/jni/android_view_InputChannel.cpp
index 1c6ead0..71742cb 100644
--- a/core/jni/android_view_InputChannel.cpp
+++ b/core/jni/android_view_InputChannel.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "InputChannel-JNI"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <android_runtime/AndroidRuntime.h>
 #include <binder/Parcel.h>
diff --git a/core/jni/android_view_InputDevice.cpp b/core/jni/android_view_InputDevice.cpp
index 9cf6a9d..494fad7 100644
--- a/core/jni/android_view_InputDevice.cpp
+++ b/core/jni/android_view_InputDevice.cpp
@@ -17,10 +17,10 @@
 #include <input/Input.h>
 
 #include <android_runtime/AndroidRuntime.h>
-#include <nativehelper/jni.h>
+#include <jni.h>
 #include <nativehelper/JNIHelp.h>
 
-#include <ScopedLocalRef.h>
+#include <nativehelper/ScopedLocalRef.h>
 
 #include "android_view_InputDevice.h"
 #include "android_view_KeyCharacterMap.h"
diff --git a/core/jni/android_view_InputEventReceiver.cpp b/core/jni/android_view_InputEventReceiver.cpp
index 084a3d1..c457ab0 100644
--- a/core/jni/android_view_InputEventReceiver.cpp
+++ b/core/jni/android_view_InputEventReceiver.cpp
@@ -18,7 +18,7 @@
 
 //#define LOG_NDEBUG 0
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/Log.h>
@@ -31,7 +31,7 @@
 #include "android_view_KeyEvent.h"
 #include "android_view_MotionEvent.h"
 
-#include <ScopedLocalRef.h>
+#include <nativehelper/ScopedLocalRef.h>
 
 #include "core_jni_helpers.h"
 
diff --git a/core/jni/android_view_InputEventSender.cpp b/core/jni/android_view_InputEventSender.cpp
index 4769257..58ccef18 100644
--- a/core/jni/android_view_InputEventSender.cpp
+++ b/core/jni/android_view_InputEventSender.cpp
@@ -18,7 +18,7 @@
 
 //#define LOG_NDEBUG 0
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/Log.h>
@@ -31,7 +31,7 @@
 #include "android_view_KeyEvent.h"
 #include "android_view_MotionEvent.h"
 
-#include <ScopedLocalRef.h>
+#include <nativehelper/ScopedLocalRef.h>
 
 #include "core_jni_helpers.h"
 
diff --git a/core/jni/android_view_InputQueue.cpp b/core/jni/android_view_InputQueue.cpp
index 96ccdee..24c3ff8 100644
--- a/core/jni/android_view_InputQueue.cpp
+++ b/core/jni/android_view_InputQueue.cpp
@@ -26,9 +26,9 @@
 #include <input/Input.h>
 #include <utils/Looper.h>
 #include <utils/TypeHelpers.h>
-#include <ScopedLocalRef.h>
+#include <nativehelper/ScopedLocalRef.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_os_MessageQueue.h"
 #include "android_view_KeyEvent.h"
 #include "android_view_MotionEvent.h"
diff --git a/core/jni/android_view_KeyCharacterMap.cpp b/core/jni/android_view_KeyCharacterMap.cpp
index e5519a7..586b26e 100644
--- a/core/jni/android_view_KeyCharacterMap.cpp
+++ b/core/jni/android_view_KeyCharacterMap.cpp
@@ -20,7 +20,7 @@
 #include <input/Input.h>
 #include <binder/Parcel.h>
 
-#include <nativehelper/jni.h>
+#include <jni.h>
 #include <nativehelper/JNIHelp.h>
 
 #include "android_os_Parcel.h"
diff --git a/core/jni/android_view_KeyEvent.cpp b/core/jni/android_view_KeyEvent.cpp
index 216e6f6..8a6e745 100644
--- a/core/jni/android_view_KeyEvent.cpp
+++ b/core/jni/android_view_KeyEvent.cpp
@@ -16,13 +16,13 @@
 
 #define LOG_TAG "KeyEvent-JNI"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/Log.h>
 #include <utils/Log.h>
 #include <input/Input.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 #include "android_view_KeyEvent.h"
 
 #include "core_jni_helpers.h"
diff --git a/core/jni/android_view_MotionEvent.cpp b/core/jni/android_view_MotionEvent.cpp
index 2132f3d..64bf0dc 100644
--- a/core/jni/android_view_MotionEvent.cpp
+++ b/core/jni/android_view_MotionEvent.cpp
@@ -16,14 +16,14 @@
 
 #define LOG_TAG "MotionEvent-JNI"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <SkMatrix.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/Log.h>
 #include <utils/Log.h>
 #include <input/Input.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 #include "android_os_Parcel.h"
 #include "android_view_MotionEvent.h"
 #include "android_util_Binder.h"
@@ -345,8 +345,10 @@
         return 0;
     }
 
-    MotionEvent* event = reinterpret_cast<MotionEvent*>(nativePtr);
-    if (!event) {
+    MotionEvent* event;
+    if (nativePtr) {
+        event = reinterpret_cast<MotionEvent*>(nativePtr);
+    } else {
         event = new MotionEvent();
     }
 
diff --git a/core/jni/android_view_PointerIcon.cpp b/core/jni/android_view_PointerIcon.cpp
index 4150636..4f79790 100644
--- a/core/jni/android_view_PointerIcon.cpp
+++ b/core/jni/android_view_PointerIcon.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "PointerIcon-JNI"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include "android_view_PointerIcon.h"
 
@@ -24,7 +24,7 @@
 #include <android_runtime/Log.h>
 #include <utils/Log.h>
 #include <android/graphics/GraphicsJNI.h>
-#include "ScopedLocalRef.h"
+#include <nativehelper/ScopedLocalRef.h>
 
 #include "core_jni_helpers.h"
 
diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp
index 494e266..3ad4da6 100644
--- a/core/jni/android_view_Surface.cpp
+++ b/core/jni/android_view_Surface.cpp
@@ -19,7 +19,7 @@
 #include <stdio.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_os_Parcel.h"
 #include "android/graphics/GraphicBuffer.h"
 #include "android/graphics/GraphicsJNI.h"
@@ -47,7 +47,7 @@
 #include <utils/misc.h>
 #include <utils/Log.h>
 
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 
 #include <AnimationContext.h>
 #include <FrameInfo.h>
@@ -537,6 +537,20 @@
     return err;
 }
 
+static jint nativeSetSharedBufferModeEnabled(JNIEnv* env, jclass clazz, jlong nativeObject,
+        jboolean enabled) {
+    Surface* surface = reinterpret_cast<Surface*>(nativeObject);
+    return ((ANativeWindow*) nativeObject)->perform(surface,
+            NATIVE_WINDOW_SET_SHARED_BUFFER_MODE, enabled);
+}
+
+static jint nativeSetAutoRefreshEnabled(JNIEnv* env, jclass clazz, jlong nativeObject,
+        jboolean enabled) {
+    Surface* surface = reinterpret_cast<Surface*>(nativeObject);
+    return ((ANativeWindow*) nativeObject)->perform(surface,
+            NATIVE_WINDOW_SET_AUTO_REFRESH, enabled);
+}
+
 namespace uirenderer {
 
 using namespace android::uirenderer::renderthread;
@@ -618,6 +632,8 @@
     {"nativeSetScalingMode", "(JI)I", (void*)nativeSetScalingMode },
     {"nativeForceScopedDisconnect", "(J)I", (void*)nativeForceScopedDisconnect},
     {"nativeAttachAndQueueBuffer", "(JLandroid/graphics/GraphicBuffer;)I", (void*)nativeAttachAndQueueBuffer},
+    {"nativeSetSharedBufferModeEnabled", "(JZ)I", (void*)nativeSetSharedBufferModeEnabled},
+    {"nativeSetAutoRefreshEnabled", "(JZ)I", (void*)nativeSetAutoRefreshEnabled},
 
     // HWUI context
     {"nHwuiCreate", "(JJ)J", (void*) hwui::create },
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index 97aa562..db9b52e 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -24,8 +24,9 @@
 #include "android/graphics/Region.h"
 #include "core_jni_helpers.h"
 
-#include <JNIHelp.h>
-#include <ScopedUtfChars.h>
+#include <android-base/chrono_utils.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedUtfChars.h>
 #include <android_runtime/android_view_Surface.h>
 #include <android_runtime/android_view_SurfaceSession.h>
 #include <gui/Surface.h>
@@ -245,7 +246,7 @@
 
     auto bitmap = new Bitmap(
             (void*) screenshot->getPixels(), (void*) screenshot.get(), DeleteScreenshot,
-            screenshotInfo, rowBytes, nullptr);
+            screenshotInfo, rowBytes);
     screenshot.release();
     bitmap->setImmutable();
     return bitmap::createBitmap(env, bitmap,
@@ -561,8 +562,9 @@
     sp<IBinder> token(ibinderForJavaObject(env, tokenObj));
     if (token == NULL) return;
 
-    ALOGD_IF_SLOW(100, "Excessive delay in setPowerMode()");
+    android::base::Timer t;
     SurfaceComposerClient::setDisplayPowerMode(token, mode);
+    if (t.duration() > 100ms) ALOGD("Excessive delay in setPowerMode()");
 }
 
 static jboolean nativeClearContentFrameStats(JNIEnv* env, jclass clazz, jlong nativeObject) {
diff --git a/core/jni/android_view_SurfaceSession.cpp b/core/jni/android_view_SurfaceSession.cpp
index 508d897..30c0030 100644
--- a/core/jni/android_view_SurfaceSession.cpp
+++ b/core/jni/android_view_SurfaceSession.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "SurfaceSession"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/android_view_SurfaceSession.h>
diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp
index 286c1a2..e757ddd 100644
--- a/core/jni/android_view_ThreadedRenderer.cpp
+++ b/core/jni/android_view_ThreadedRenderer.cpp
@@ -23,7 +23,7 @@
 #include <nativehelper/JNIHelp.h>
 #include "core_jni_helpers.h"
 #include <GraphicsJNI.h>
-#include <ScopedPrimitiveArray.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
 
 #include <gui/BufferItemConsumer.h>
 #include <gui/BufferQueue.h>
@@ -888,7 +888,7 @@
     // Render into the surface
     {
         ContextFactory factory;
-        RenderProxy proxy{false, renderNode, &factory};
+        RenderProxy proxy{true, renderNode, &factory};
         proxy.loadSystemProperties();
         proxy.setSwapBehavior(SwapBehavior::kSwap_discardBuffer);
         proxy.initialize(surface);
diff --git a/core/jni/android_view_VelocityTracker.cpp b/core/jni/android_view_VelocityTracker.cpp
index e1f2241..153789c 100644
--- a/core/jni/android_view_VelocityTracker.cpp
+++ b/core/jni/android_view_VelocityTracker.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "VelocityTracker-JNI"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/Log.h>
@@ -24,7 +24,7 @@
 #include <input/VelocityTracker.h>
 #include "android_view_MotionEvent.h"
 
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 
 #include "core_jni_helpers.h"
 
diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
index f8f9efe..fce5dd5 100644
--- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
+++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
@@ -19,7 +19,7 @@
 
 #include "core_jni_helpers.h"
 
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 #include <androidfw/ZipFileRO.h>
 #include <androidfw/ZipUtils.h>
 #include <utils/Log.h>
diff --git a/core/jni/com_android_internal_net_NetworkStatsFactory.cpp b/core/jni/com_android_internal_net_NetworkStatsFactory.cpp
index 4a2b881..0cb6935 100644
--- a/core/jni/com_android_internal_net_NetworkStatsFactory.cpp
+++ b/core/jni/com_android_internal_net_NetworkStatsFactory.cpp
@@ -24,9 +24,9 @@
 #include <core_jni_helpers.h>
 #include <jni.h>
 
-#include <ScopedUtfChars.h>
-#include <ScopedLocalRef.h>
-#include <ScopedPrimitiveArray.h>
+#include <nativehelper/ScopedUtfChars.h>
+#include <nativehelper/ScopedLocalRef.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
 
 #include <utils/Log.h>
 #include <utils/misc.h>
diff --git a/core/jni/com_android_internal_os_ClassLoaderFactory.cpp b/core/jni/com_android_internal_os_ClassLoaderFactory.cpp
new file mode 100644
index 0000000..9ce3289
--- /dev/null
+++ b/core/jni/com_android_internal_os_ClassLoaderFactory.cpp
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string>
+
+#include "nativeloader/native_loader.h"
+
+#include "core_jni_helpers.h"
+
+
+static jstring createClassloaderNamespace_native(JNIEnv* env,
+                                              jobject clazz,
+                                              jobject classLoader,
+                                              jint targetSdkVersion,
+                                              jstring librarySearchPath,
+                                              jstring libraryPermittedPath,
+                                              jboolean isShared,
+                                              jboolean isForVendor) {
+    return android::CreateClassLoaderNamespace(env, targetSdkVersion,
+                                               classLoader, isShared == JNI_TRUE,
+                                               isForVendor == JNI_TRUE,
+                                               librarySearchPath, libraryPermittedPath);
+}
+
+static const JNINativeMethod g_methods[] = {
+    { "createClassloaderNamespace",
+      "(Ljava/lang/ClassLoader;ILjava/lang/String;Ljava/lang/String;ZZ)Ljava/lang/String;",
+      reinterpret_cast<void*>(createClassloaderNamespace_native) },
+};
+
+static const char* const kClassLoaderFactoryPathName = "com/android/internal/os/ClassLoaderFactory";
+
+namespace android
+{
+
+int register_com_android_internal_os_ClassLoaderFactory(JNIEnv* env) {
+    return RegisterMethodsOrDie(env, kClassLoaderFactoryPathName, g_methods, NELEM(g_methods));
+}
+
+} // namespace android
diff --git a/core/jni/com_android_internal_os_PathClassLoaderFactory.cpp b/core/jni/com_android_internal_os_PathClassLoaderFactory.cpp
deleted file mode 100644
index a7a912c..0000000
--- a/core/jni/com_android_internal_os_PathClassLoaderFactory.cpp
+++ /dev/null
@@ -1,51 +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.
- */
-
-#include <string>
-
-#include "nativeloader/native_loader.h"
-
-#include "core_jni_helpers.h"
-
-
-static jstring createClassloaderNamespace_native(JNIEnv* env,
-                                              jobject clazz,
-                                              jobject classLoader,
-                                              jint targetSdkVersion,
-                                              jstring librarySearchPath,
-                                              jstring libraryPermittedPath,
-                                              jboolean isShared) {
-    return android::CreateClassLoaderNamespace(env, targetSdkVersion,
-                                               classLoader, isShared == JNI_TRUE,
-                                               librarySearchPath, libraryPermittedPath);
-}
-
-static const JNINativeMethod g_methods[] = {
-    { "createClassloaderNamespace",
-      "(Ljava/lang/ClassLoader;ILjava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;",
-      reinterpret_cast<void*>(createClassloaderNamespace_native) },
-};
-
-static const char* const kPathClassLoaderFactoryPathName = "com/android/internal/os/PathClassLoaderFactory";
-
-namespace android
-{
-
-int register_com_android_internal_os_PathClassLoaderFactory(JNIEnv* env) {
-    return RegisterMethodsOrDie(env, kPathClassLoaderFactoryPathName, g_methods, NELEM(g_methods));
-}
-
-} // namespace android
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp
index d73e7dd..e1c2cb0 100644
--- a/core/jni/com_android_internal_os_Zygote.cpp
+++ b/core/jni/com_android_internal_os_Zygote.cpp
@@ -45,6 +45,8 @@
 #include <unistd.h>
 
 #include "android-base/logging.h"
+#include <android-base/file.h>
+#include <android-base/stringprintf.h>
 #include <cutils/fs.h>
 #include <cutils/multiuser.h>
 #include <cutils/sched_policy.h>
@@ -54,10 +56,10 @@
 #include <processgroup/processgroup.h>
 
 #include "core_jni_helpers.h"
-#include "JNIHelp.h"
-#include "ScopedLocalRef.h"
-#include "ScopedPrimitiveArray.h"
-#include "ScopedUtfChars.h"
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedLocalRef.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
+#include <nativehelper/ScopedUtfChars.h>
 #include "fd_utils.h"
 
 #include "nativebridge/native_bridge.h"
@@ -65,6 +67,8 @@
 namespace {
 
 using android::String8;
+using android::base::StringPrintf;
+using android::base::WriteStringToFile;
 
 static pid_t gSystemServerPid = 0;
 
@@ -221,6 +225,14 @@
 // The debug malloc library needs to know whether it's the zygote or a child.
 extern "C" int gMallocLeakZygoteChild;
 
+static void PreApplicationInit() {
+  // The child process sets this to indicate it's not the zygote.
+  gMallocLeakZygoteChild = 1;
+
+  // Set the jemalloc decay time to 1.
+  mallopt(M_DECAY_TIME, 1);
+}
+
 static void EnableKeepCapabilities(JNIEnv* env) {
   int rc = prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);
   if (rc == -1) {
@@ -517,11 +529,7 @@
   pid_t pid = fork();
 
   if (pid == 0) {
-    // The child process.
-    gMallocLeakZygoteChild = 1;
-
-    // Set the jemalloc decay time to 1.
-    mallopt(M_DECAY_TIME, 1);
+    PreApplicationInit();
 
     // Clean up any descriptors which must be closed immediately
     DetachDescriptors(env, fdsToClose);
@@ -678,6 +686,10 @@
 
 namespace android {
 
+static void com_android_internal_os_Zygote_nativePreApplicationInit(JNIEnv*, jclass) {
+  PreApplicationInit();
+}
+
 static jint com_android_internal_os_Zygote_nativeForkAndSpecialize(
         JNIEnv* env, jclass, jint uid, jint gid, jintArray gids,
         jint debug_flags, jobjectArray rlimits,
@@ -746,6 +758,11 @@
           ALOGE("System server process %d has died. Restarting Zygote!", pid);
           RuntimeAbort(env, __LINE__, "System server process has died. Restarting Zygote!");
       }
+
+      // Assign system_server to the correct memory cgroup.
+      if (!WriteStringToFile(StringPrintf("%d", pid), "/dev/memcg/system/tasks")) {
+        ALOGE("couldn't write %d to /dev/memcg/system/tasks", pid);
+      }
   }
   return pid;
 }
@@ -807,7 +824,9 @@
     { "nativeAllowFileAcrossFork", "(Ljava/lang/String;)V",
       (void *) com_android_internal_os_Zygote_nativeAllowFileAcrossFork },
     { "nativeUnmountStorageOnInit", "()V",
-      (void *) com_android_internal_os_Zygote_nativeUnmountStorageOnInit }
+      (void *) com_android_internal_os_Zygote_nativeUnmountStorageOnInit },
+    { "nativePreApplicationInit", "()V",
+      (void *) com_android_internal_os_Zygote_nativePreApplicationInit }
 };
 
 int register_com_android_internal_os_Zygote(JNIEnv* env) {
diff --git a/core/jni/com_google_android_gles_jni_EGLImpl.cpp b/core/jni/com_google_android_gles_jni_EGLImpl.cpp
index c00d698..940ac22 100644
--- a/core/jni/com_google_android_gles_jni_EGLImpl.cpp
+++ b/core/jni/com_google_android_gles_jni_EGLImpl.cpp
@@ -15,7 +15,7 @@
 ** limitations under the License.
 */
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/android_view_Surface.h>
 #include <android_runtime/android_graphics_SurfaceTexture.h>
diff --git a/core/jni/com_google_android_gles_jni_GLImpl.cpp b/core/jni/com_google_android_gles_jni_GLImpl.cpp
index eeb92fc..ac23eca 100644
--- a/core/jni/com_google_android_gles_jni_GLImpl.cpp
+++ b/core/jni/com_google_android_gles_jni_GLImpl.cpp
@@ -22,7 +22,7 @@
 #pragma GCC diagnostic ignored "-Wunused-function"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/misc.h>
 
diff --git a/core/jni/core_jni_helpers.h b/core/jni/core_jni_helpers.h
index 3f169c3..1325b0c 100644
--- a/core/jni/core_jni_helpers.h
+++ b/core/jni/core_jni_helpers.h
@@ -17,7 +17,7 @@
 #ifndef CORE_JNI_HELPERS
 #define CORE_JNI_HELPERS
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 
 namespace android {
diff --git a/core/jni/include/android_runtime/AndroidRuntime.h b/core/jni/include/android_runtime/AndroidRuntime.h
index c2189d4..3ec8b1f 100644
--- a/core/jni/include/android_runtime/AndroidRuntime.h
+++ b/core/jni/include/android_runtime/AndroidRuntime.h
@@ -26,7 +26,7 @@
 #include <utils/Vector.h>
 #include <utils/threads.h>
 #include <pthread.h>
-#include <nativehelper/jni.h>
+#include <jni.h>
 
 
 namespace android {
diff --git a/core/jni/include/android_runtime/android_view_InputQueue.h b/core/jni/include/android_runtime/android_view_InputQueue.h
index ed37b0a..ac8da58 100644
--- a/core/jni/include/android_runtime/android_view_InputQueue.h
+++ b/core/jni/include/android_runtime/android_view_InputQueue.h
@@ -22,7 +22,7 @@
 #include <utils/TypeHelpers.h>
 #include <utils/Vector.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 /*
  * Declare a concrete type for the NDK's AInputQueue forward declaration
diff --git a/core/proto/android/service/diskstats.proto b/core/proto/android/service/diskstats.proto
index 4d86526..4057e45 100644
--- a/core/proto/android/service/diskstats.proto
+++ b/core/proto/android/service/diskstats.proto
@@ -47,7 +47,7 @@
 }
 
 message DiskStatsCachedValuesProto {
-    // Total app data size, in kilobytes
+    // Total app code size, in kilobytes
     int64 agg_apps_size = 1;
     // Total app cache size, in kilobytes
     int64 agg_apps_cache_size = 2;
@@ -65,15 +65,19 @@
     int64 other_size = 8;
     // Sizes of individual packages
     repeated DiskStatsAppSizesProto app_sizes = 9;
+    // Total app data size, in kilobytes
+    int64 agg_apps_data_size = 10;
 }
 
 message DiskStatsAppSizesProto {
     // Name of the package
     string package_name = 1;
-    // App's data size in kilobytes
+    // App's code size in kilobytes
     int64 app_size = 2;
     // App's cache size in kilobytes
     int64 cache_size = 3;
+    // App's data size in kilobytes
+    int64 app_data_size = 4;
 }
 
 message DiskStatsFreeSpaceProto {
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index f623871..98be5b2 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -94,6 +94,7 @@
     <protected-broadcast android:name="android.os.action.POWER_SAVE_TEMP_WHITELIST_CHANGED" />
     <protected-broadcast android:name="android.os.action.POWER_SAVE_MODE_CHANGED_INTERNAL" />
 
+    <!-- @deprecated This is rarely used and will be phased out soon. -->
     <protected-broadcast android:name="android.os.action.SCREEN_BRIGHTNESS_BOOST_CHANGED" />
 
     <protected-broadcast android:name="android.app.action.ENTER_CAR_MODE" />
@@ -308,6 +309,10 @@
     <protected-broadcast android:name="com.android.server.usb.ACTION_OPEN_IN_APPS" />
     <protected-broadcast android:name="com.android.server.am.DELETE_DUMPHEAP" />
     <protected-broadcast android:name="com.android.server.net.action.SNOOZE_WARNING" />
+    <protected-broadcast android:name="com.android.server.wifi.ConnectToNetworkNotification.USER_DISMISSED_NOTIFICATION" />
+    <protected-broadcast android:name="com.android.server.wifi.ConnectToNetworkNotification.CONNECT_TO_NETWORK" />
+    <protected-broadcast android:name="com.android.server.wifi.ConnectToNetworkNotification.PICK_WIFI_NETWORK" />
+    <protected-broadcast android:name="com.android.server.wifi.ConnectToNetworkNotification.PICK_NETWORK_AFTER_FAILURE" />
     <protected-broadcast android:name="android.net.wifi.WIFI_STATE_CHANGED" />
     <protected-broadcast android:name="android.net.wifi.WIFI_AP_STATE_CHANGED" />
     <protected-broadcast android:name="android.net.wifi.WIFI_CREDENTIAL_CHANGED" />
@@ -544,6 +549,7 @@
     <protected-broadcast android:name="android.media.tv.action.PREVIEW_PROGRAM_BROWSABLE_DISABLED" />
     <protected-broadcast android:name="android.media.tv.action.WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED" />
     <protected-broadcast android:name="android.media.tv.action.CHANNEL_BROWSABLE_REQUESTED" />
+    <protected-broadcast android:name="com.android.server.InputMethodManagerService.SHOW_INPUT_METHOD_PICKER" />
 
     <!-- ====================================================================== -->
     <!--                          RUNTIME PERMISSIONS                           -->
@@ -768,7 +774,7 @@
         android:permissionGroup="android.permission-group.LOCATION"
         android:label="@string/permlab_accessFineLocation"
         android:description="@string/permdesc_accessFineLocation"
-        android:protectionLevel="dangerous|ephemeral" />
+        android:protectionLevel="dangerous|instant" />
 
     <!-- Allows an app to access approximate location.
          Alternatively, you might want {@link #ACCESS_FINE_LOCATION}.
@@ -778,7 +784,7 @@
         android:permissionGroup="android.permission-group.LOCATION"
         android:label="@string/permlab_accessCoarseLocation"
         android:description="@string/permdesc_accessCoarseLocation"
-        android:protectionLevel="dangerous|ephemeral" />
+        android:protectionLevel="dangerous|instant" />
 
     <!-- ====================================================================== -->
     <!-- Permissions for accessing the device telephony                         -->
@@ -812,13 +818,13 @@
         android:protectionLevel="dangerous" />
 
     <!-- Allows read access to the device's phone number(s). This is a subset of the capabilities
-         granted by {@link #READ_PHONE_STATE} but is exposed to ephemeral applications.
+         granted by {@link #READ_PHONE_STATE} but is exposed to instant applications.
          <p>Protection level: dangerous-->
     <permission android:name="android.permission.READ_PHONE_NUMBERS"
         android:permissionGroup="android.permission-group.PHONE"
         android:label="@string/permlab_readPhoneNumbers"
         android:description="@string/permdesc_readPhoneNumbers"
-        android:protectionLevel="dangerous|ephemeral" />
+        android:protectionLevel="dangerous|instant" />
 
     <!-- Allows an application to initiate a phone call without going through
         the Dialer user interface for the user to confirm the call.
@@ -950,25 +956,25 @@
         android:permissionGroup="android.permission-group.MICROPHONE"
         android:label="@string/permlab_recordAudio"
         android:description="@string/permdesc_recordAudio"
-        android:protectionLevel="dangerous"/>
+        android:protectionLevel="dangerous|instant"/>
 
     <!-- ====================================================================== -->
     <!-- Permissions for accessing the UCE Service                              -->
     <!-- ====================================================================== -->
 
     <!-- @hide Allows an application to Access UCE-Presence.
-         <p>Protection level: dangerous
+         <p>Protection level: signature|privileged
     -->
     <permission android:name="android.permission.ACCESS_UCE_PRESENCE_SERVICE"
         android:permissionGroup="android.permission-group.PHONE"
-        android:protectionLevel="signatureOrSystem"/>
+        android:protectionLevel="signature|privileged"/>
 
     <!-- @hide Allows an application to Access UCE-OPTIONS.
-         <p>Protection level: dangerous
+         <p>Protection level: signature|privileged
     -->
     <permission android:name="android.permission.ACCESS_UCE_OPTIONS_SERVICE"
         android:permissionGroup="android.permission-group.PHONE"
-        android:protectionLevel="signatureOrSystem"/>
+        android:protectionLevel="signature|privileged"/>
 
 
 
@@ -998,7 +1004,7 @@
         android:permissionGroup="android.permission-group.CAMERA"
         android:label="@string/permlab_camera"
         android:description="@string/permdesc_camera"
-        android:protectionLevel="dangerous|ephemeral" />
+        android:protectionLevel="dangerous|instant" />
 
 
     <!-- ====================================================================== -->
@@ -1007,7 +1013,7 @@
     <eat-comment />
 
     <!-- Used for permissions that are associated with accessing
-         camera or capturing images/video from the device. -->
+         body or environmental sensors. -->
     <permission-group android:name="android.permission-group.SENSORS"
         android:icon="@drawable/perm_group_sensors"
         android:label="@string/permgrouplab_sensors"
@@ -1240,7 +1246,7 @@
     <permission android:name="android.permission.INTERNET"
         android:description="@string/permdesc_createNetworkSockets"
         android:label="@string/permlab_createNetworkSockets"
-        android:protectionLevel="normal|ephemeral" />
+        android:protectionLevel="normal|instant" />
 
     <!-- Allows applications to access information about networks.
          <p>Protection level: normal
@@ -1248,7 +1254,7 @@
     <permission android:name="android.permission.ACCESS_NETWORK_STATE"
         android:description="@string/permdesc_accessNetworkState"
         android:label="@string/permlab_accessNetworkState"
-        android:protectionLevel="normal|ephemeral" />
+        android:protectionLevel="normal|instant" />
 
     <!-- Allows applications to access information about Wi-Fi networks.
          <p>Protection level: normal
@@ -1326,6 +1332,27 @@
     <permission android:name="android.permission.NETWORK_SETTINGS"
         android:protectionLevel="signature" />
 
+    <!-- #SystemApi @hide Allows applications to access information about LoWPAN interfaces.
+         <p>Not for use by third-party applications. -->
+    <permission android:name="android.permission.ACCESS_LOWPAN_STATE"
+        android:protectionLevel="signature|privileged" />
+
+    <!-- #SystemApi @hide Allows applications to change LoWPAN connectivity state.
+         <p>Not for use by third-party applications. -->
+    <permission android:name="android.permission.CHANGE_LOWPAN_STATE"
+        android:protectionLevel="signature|privileged" />
+
+    <!-- #SystemApi @hide Allows applications to read LoWPAN credential.
+         <p>Not for use by third-party applications. -->
+    <permission android:name="android.permission.READ_LOWPAN_CREDENTIAL"
+        android:protectionLevel="signature|privileged" />
+
+    <!-- #SystemApi @hide Allows a service to register or unregister
+         new LoWPAN interfaces.
+         <p>Not for use by third-party applications. -->
+    <permission android:name="android.permission.MANAGE_LOWPAN_INTERFACES"
+        android:protectionLevel="signature|privileged" />
+
     <!-- ======================================= -->
     <!-- Permissions for short range, peripheral networks -->
     <!-- ======================================= -->
@@ -1450,7 +1477,7 @@
     <permission android:name="android.permission.VIBRATE"
         android:label="@string/permlab_vibrate"
         android:description="@string/permdesc_vibrate"
-        android:protectionLevel="normal|ephemeral" />
+        android:protectionLevel="normal|instant" />
 
     <!-- Allows using PowerManager WakeLocks to keep processor from sleeping or screen
          from dimming.
@@ -1459,7 +1486,7 @@
     <permission android:name="android.permission.WAKE_LOCK"
         android:label="@string/permlab_wakeLock"
         android:description="@string/permdesc_wakeLock"
-        android:protectionLevel="normal|ephemeral" />
+        android:protectionLevel="normal|instant" />
 
     <!-- Allows using the device's IR transmitter, if available.
          <p>Protection level: normal
@@ -1505,7 +1532,12 @@
     <permission android:name="android.permission.HARDWARE_TEST"
         android:protectionLevel="signature" />
 
-    <!-- @SystemApi Allows access to FM
+    <!-- @SystemApi Allows access to Broadcast Radio
+         @hide This is not a third-party API (intended for system apps).-->
+    <permission android:name="android.permission.ACCESS_BROADCAST_RADIO"
+        android:protectionLevel="signature|privileged" />
+
+    <!-- @deprecated @SystemApi Allows access to FM
          @hide This is not a third-party API (intended for system apps).-->
     <permission android:name="android.permission.ACCESS_FM_RADIO"
         android:protectionLevel="signature|privileged" />
@@ -1672,6 +1704,11 @@
     <permission android:name="android.permission.RECEIVE_STK_COMMANDS"
         android:protectionLevel="signature|privileged" />
 
+      <!-- Allows an application to send EMBMS download intents to apps
+           @hide -->
+    <permission android:name="android.permission.SEND_EMBMS_INTENTS"
+        android:protectionLevel="signature|privileged" />
+
     <!-- Must be required by an ImsService to ensure that only the
          system can bind to it.
          <p>Protection level: signature|privileged
@@ -1829,6 +1866,10 @@
     <permission android:name="android.permission.MANAGE_ACTIVITY_STACKS"
         android:protectionLevel="signature|privileged" />
 
+    <!-- @SystemApi @hide Allows an application to embed other activities -->
+    <permission android:name="android.permission.ACTIVITY_EMBEDDING"
+                android:protectionLevel="signature|privileged" />
+
     <!-- Allows an application to start any activity, regardless of permission
          protection or exported state.
          @hide -->
@@ -1947,6 +1988,15 @@
         android:description="@string/permdesc_setWallpaperHints"
         android:protectionLevel="normal" />
 
+    <!-- Allow the app to read the system wallpaper image without
+        holding the READ_EXTERNAL_STORAGE permission.
+        <p>Not for use by third-party applications.
+        @hide
+        @SystemApi
+    -->
+    <permission android:name="android.permission.READ_WALLPAPER_INTERNAL"
+        android:protectionLevel="signature|privileged" />
+
     <!-- ============================================ -->
     <!-- Permissions for changing the system clock -->
     <!-- ============================================ -->
@@ -2188,7 +2238,7 @@
 
     <!-- Allows an application to clear the caches of all installed
          applications on the device.
-         <p>Protection level: system|signature
+         <p>Protection level: signature|privileged
     -->
     <permission android:name="android.permission.CLEAR_APP_CACHE"
         android:protectionLevel="signature|privileged" />
@@ -2224,6 +2274,22 @@
     <permission android:name="android.permission.UPDATE_CONFIG"
         android:protectionLevel="signature|privileged" />
 
+    <!-- Allows a time zone rule updater application to request
+         the system installs / uninstalls timezone rules.
+         <p>An application requesting this permission is responsible for
+         verifying the source and integrity of the update before passing
+         it off to the installer components.
+         @SystemApi @hide -->
+    <permission android:name="android.permission.UPDATE_TIME_ZONE_RULES"
+        android:protectionLevel="signature|privileged" />
+
+    <!-- Must be required by a time zone rule updater application,
+         to ensure that only the system can trigger it.
+         @hide -->
+    <permission android:name="android.permission.TRIGGER_TIME_ZONE_RULES_CHECK"
+        android:protectionLevel="signature" />
+    <uses-permission android:name="android.permission.TRIGGER_TIME_ZONE_RULES_CHECK"/>
+
     <!-- Allows the system to reset throttling in shortcut manager.
          @hide -->
     <permission android:name="android.permission.RESET_SHORTCUT_MANAGER_THROTTLING"
@@ -2493,6 +2559,22 @@
     <permission android:name="android.permission.BIND_PRINT_RECOMMENDATION_SERVICE"
             android:protectionLevel="signature" />
 
+    <!-- Allows applications to get the installed and enabled print services.
+         @hide
+         @SystemApi
+         <p>Protection level: signature|preinstalled
+    -->
+    <permission android:name="android.permission.READ_PRINT_SERVICES"
+        android:protectionLevel="signature|preinstalled" />
+
+    <!-- Allows applications to get the currently recommended print services for printers.
+         @hide
+         @SystemApi
+         <p>Protection level: signature|preinstalled
+    -->
+    <permission android:name="android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS"
+        android:protectionLevel="signature|preinstalled" />
+
     <!-- Must be required by a {@link android.nfc.cardemulation.HostApduService}
          or {@link android.nfc.cardemulation.OffHostApduService} to ensure that only
          the system can bind to it.
@@ -2533,7 +2615,7 @@
 
     <!-- Must be required by a {@link android.service.wallpaper.WallpaperService},
          to ensure that only the system can bind to it.
-         <p>Protection level: system|signature
+         <p>Protection level: signature|privileged
     -->
     <permission android:name="android.permission.BIND_WALLPAPER"
         android:protectionLevel="signature|privileged" />
@@ -2570,7 +2652,7 @@
 
     <!-- Must be required by a {@link android.media.tv.TvInputService}
          to ensure that only the system can bind to it.
-         <p>Protection level: signature
+         <p>Protection level: signature|privileged
     -->
     <permission android:name="android.permission.BIND_TV_INPUT"
         android:protectionLevel="signature|privileged" />
@@ -2592,12 +2674,24 @@
     <permission android:name="android.permission.TV_VIRTUAL_REMOTE_CONTROLLER"
         android:protectionLevel="signature|privileged" />
 
+    <!-- Allows an application to change HDMI CEC active source.
+         <p>Not for use by third-party applications.
+         @hide -->
+    <permission android:name="android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE"
+        android:protectionLevel="signature|privileged" />
+
     <!-- @SystemApi Allows an application to modify parental controls
          <p>Not for use by third-party applications.
          @hide -->
     <permission android:name="android.permission.MODIFY_PARENTAL_CONTROLS"
         android:protectionLevel="signature|privileged" />
 
+    <!-- @SystemApi Allows an application to read TvContentRatingSystemInfo
+         <p>Not for use by third-party applications.
+         @hide -->
+    <permission android:name="android.permission.READ_CONTENT_RATING_SYSTEMS"
+        android:protectionLevel="signature|privileged" />
+
     <!-- @SystemApi Allows an application to notify TV inputs by sending broadcasts.
          <p>Protection level: signature|privileged
          <p>Not for use by third-party applications.
@@ -2771,7 +2865,7 @@
          Could be used to prevent unwanted touch events
          on a touchscreen, for example during swimming or rain.
          @hide -->
-    <permission android:name="com.android.permission.DISABLE_INPUT_DEVICE"
+    <permission android:name="android.permission.DISABLE_INPUT_DEVICE"
         android:protectionLevel="signature" />
 
     <!-- Allows an application to configure and connect to Wifi displays
@@ -3086,12 +3180,14 @@
     <permission android:name="android.permission.MANAGE_NETWORK_POLICY"
         android:protectionLevel="signature" />
 
-    <!-- @SystemApi Allows an application to account its network traffic against other UIDs. Used
-         by system services like download manager and media server. Not for use by
-         third party apps. @hide -->
+    <!-- @SystemApi @hide @deprecated use UPDATE_DEVICE_STATS instead -->
     <permission android:name="android.permission.MODIFY_NETWORK_ACCOUNTING"
         android:protectionLevel="signature|privileged" />
 
+    <!-- @SystemApi @hide Allows an application to manage carrier subscription plans. -->
+    <permission android:name="android.permission.MANAGE_SUBSCRIPTION_PLANS"
+        android:protectionLevel="signature|privileged" />
+
     <!-- C2DM permission.
          @hide Used internally.
      -->
@@ -3167,7 +3263,7 @@
 
     <!-- Allows notifications to be colorized
          <p>Not for use by third-party applications. @hide -->
-    <permission android:name="com.android.permission.USE_COLORIZED_NOTIFICATIONS"
+    <permission android:name="android.permission.USE_COLORIZED_NOTIFICATIONS"
                 android:protectionLevel="signature|setup" />
 
     <!-- Allows access to keyguard secure storage.  Only allowed for system processes.
@@ -3320,7 +3416,7 @@
     <!-- The system process that is allowed to bind to services in carrier apps will
          have this permission. Carrier apps should use this permission to protect
          their services that only the system is allowed to bind to.
-         <p>Protection level: system|signature
+         <p>Protection level: signature|privileged
     -->
     <permission android:name="android.permission.BIND_CARRIER_SERVICES"
         android:label="@string/permlab_bindCarrierServices"
@@ -3425,6 +3521,11 @@
     <permission android:name="android.permission.ACCESS_VR_MANAGER"
             android:protectionLevel="signature" />
 
+    <!-- Required to access VR-Mode state and state change events via {android.app.VrStateCallback}
+         @hide -->
+    <permission android:name="android.permission.ACCESS_VR_STATE"
+        android:protectionLevel="signature|preinstalled" />
+
     <!-- Allows an application to whitelist tasks during lock task mode
          @hide <p>Not for use by third-party applications.</p> -->
     <permission android:name="android.permission.UPDATE_LOCK_TASK_PACKAGES"
@@ -3454,7 +3555,7 @@
 
     <!-- Allows an instant app to create foreground services. -->
     <permission android:name="android.permission.INSTANT_APP_FOREGROUND_SERVICE"
-        android:protectionLevel="signature|development|ephemeral|appop" />
+        android:protectionLevel="signature|development|instant|appop" />
 
     <application android:process="system"
                  android:persistent="true"
@@ -3795,6 +3896,9 @@
                  android:permission="android.permission.BIND_JOB_SERVICE" >
         </service>
 
+        <service android:name="com.android.server.timezone.TimeZoneUpdateIdler"
+                 android:permission="android.permission.BIND_JOB_SERVICE" >
+        </service>
     </application>
 
 </manifest>
diff --git a/core/res/res/drawable-hdpi/ic_corp_icon.png b/core/res/res/drawable-hdpi/ic_corp_icon.png
deleted file mode 100644
index 06c5135..0000000
--- a/core/res/res/drawable-hdpi/ic_corp_icon.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_00_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_00_mtrl.png
new file mode 100644
index 0000000..5aa4e98
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_01_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_01_mtrl.png
new file mode 100644
index 0000000..2afba7f
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_02_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_02_mtrl.png
new file mode 100644
index 0000000..94c696c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_03_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_03_mtrl.png
new file mode 100644
index 0000000..2bbc0e0
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_04_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_04_mtrl.png
new file mode 100644
index 0000000..1554f45
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_05_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_05_mtrl.png
new file mode 100644
index 0000000..f7f9bec
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_06_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_06_mtrl.png
new file mode 100644
index 0000000..caf35d0
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_07_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_07_mtrl.png
new file mode 100644
index 0000000..428b6cf
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_08_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_08_mtrl.png
new file mode 100644
index 0000000..5bba9bb
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_09_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_09_mtrl.png
new file mode 100644
index 0000000..d562375
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_10_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_10_mtrl.png
new file mode 100644
index 0000000..a083bd2
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_11_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_11_mtrl.png
new file mode 100644
index 0000000..cdd80c8f
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_12_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_12_mtrl.png
new file mode 100644
index 0000000..f38ba50
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_13_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_13_mtrl.png
new file mode 100644
index 0000000..92d5887
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_14_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_14_mtrl.png
new file mode 100644
index 0000000..e5fb306
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_15_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_15_mtrl.png
new file mode 100644
index 0000000..ae62588
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_16_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_16_mtrl.png
new file mode 100644
index 0000000..952eda0
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_17_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_17_mtrl.png
new file mode 100644
index 0000000..d51aa42
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_18_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_18_mtrl.png
new file mode 100644
index 0000000..95a696f
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_19_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_19_mtrl.png
new file mode 100644
index 0000000..a9435e3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_20_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_20_mtrl.png
new file mode 100644
index 0000000..851168a
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_21_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_21_mtrl.png
new file mode 100644
index 0000000..c0e15e9
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_22_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_22_mtrl.png
new file mode 100644
index 0000000..41a7b9c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_23_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_23_mtrl.png
new file mode 100644
index 0000000..8618f96
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_24_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_24_mtrl.png
new file mode 100644
index 0000000..81488d1
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_25_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_25_mtrl.png
new file mode 100644
index 0000000..6b635c9
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_26_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_26_mtrl.png
new file mode 100644
index 0000000..8a7e4fc
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_27_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_27_mtrl.png
new file mode 100644
index 0000000..6f7d3a2
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_28_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_28_mtrl.png
new file mode 100644
index 0000000..fc6caf5
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_29_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_29_mtrl.png
new file mode 100644
index 0000000..3554271
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_dark_30_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_30_mtrl.png
new file mode 100644
index 0000000..6c82a89
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_dark_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_00_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_00_mtrl.png
new file mode 100644
index 0000000..d6daf80
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_01_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_01_mtrl.png
new file mode 100644
index 0000000..41275f1
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_02_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_02_mtrl.png
new file mode 100644
index 0000000..b63b7c3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_03_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_03_mtrl.png
new file mode 100644
index 0000000..403d1b7
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_04_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_04_mtrl.png
new file mode 100644
index 0000000..a19aa06
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_05_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_05_mtrl.png
new file mode 100644
index 0000000..33d4dbf
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_06_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_06_mtrl.png
new file mode 100644
index 0000000..ad89fa1
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_07_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_07_mtrl.png
new file mode 100644
index 0000000..9a970c8
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_08_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_08_mtrl.png
new file mode 100644
index 0000000..5c71217
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_09_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_09_mtrl.png
new file mode 100644
index 0000000..181c812
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_10_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_10_mtrl.png
new file mode 100644
index 0000000..1b285a7
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_11_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_11_mtrl.png
new file mode 100644
index 0000000..00f1c62
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_12_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_12_mtrl.png
new file mode 100644
index 0000000..f86cca7
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_13_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_13_mtrl.png
new file mode 100644
index 0000000..4e47fc8
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_14_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_14_mtrl.png
new file mode 100644
index 0000000..8b33f2c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_15_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_15_mtrl.png
new file mode 100644
index 0000000..451bda7
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_16_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_16_mtrl.png
new file mode 100644
index 0000000..dedbff1
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_17_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_17_mtrl.png
new file mode 100644
index 0000000..d6be31c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_18_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_18_mtrl.png
new file mode 100644
index 0000000..bfd1900
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_19_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_19_mtrl.png
new file mode 100644
index 0000000..003f13d
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_20_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_20_mtrl.png
new file mode 100644
index 0000000..5564760
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_21_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_21_mtrl.png
new file mode 100644
index 0000000..ebc1ae1
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_22_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_22_mtrl.png
new file mode 100644
index 0000000..92a9230
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_23_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_23_mtrl.png
new file mode 100644
index 0000000..6f5c84a
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_24_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_24_mtrl.png
new file mode 100644
index 0000000..ba4ab1d
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_25_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_25_mtrl.png
new file mode 100644
index 0000000..f246835
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_26_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_26_mtrl.png
new file mode 100644
index 0000000..04b790b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_27_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_27_mtrl.png
new file mode 100644
index 0000000..63e0d79
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_28_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_28_mtrl.png
new file mode 100644
index 0000000..89027f4
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_29_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_29_mtrl.png
new file mode 100644
index 0000000..4b4870b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connected_light_30_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connected_light_30_mtrl.png
new file mode 100644
index 0000000..1dae891
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connected_light_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_00_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_00_mtrl.png
new file mode 100644
index 0000000..5aa4e98
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_01_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_01_mtrl.png
new file mode 100644
index 0000000..2afba7f
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_02_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_02_mtrl.png
new file mode 100644
index 0000000..94c696c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_03_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_03_mtrl.png
new file mode 100644
index 0000000..2bbc0e0
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_04_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_04_mtrl.png
new file mode 100644
index 0000000..1554f45
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_05_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_05_mtrl.png
new file mode 100644
index 0000000..f7f9bec
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_06_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_06_mtrl.png
new file mode 100644
index 0000000..caf35d0
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_07_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_07_mtrl.png
new file mode 100644
index 0000000..4c36c70
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_08_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_08_mtrl.png
new file mode 100644
index 0000000..5bba9bb
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_09_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_09_mtrl.png
new file mode 100644
index 0000000..d562375
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_10_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_10_mtrl.png
new file mode 100644
index 0000000..19b7700
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_11_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_11_mtrl.png
new file mode 100644
index 0000000..d86fe79
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_12_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_12_mtrl.png
new file mode 100644
index 0000000..c38e4be
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_13_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_13_mtrl.png
new file mode 100644
index 0000000..4ea1ce3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_14_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_14_mtrl.png
new file mode 100644
index 0000000..b49e12c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_15_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_15_mtrl.png
new file mode 100644
index 0000000..5ce7064
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_16_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_16_mtrl.png
new file mode 100644
index 0000000..ebc0b50
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_17_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_17_mtrl.png
new file mode 100644
index 0000000..04af459
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_18_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_18_mtrl.png
new file mode 100644
index 0000000..862f22d
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_19_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_19_mtrl.png
new file mode 100644
index 0000000..9d8f434
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_20_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_20_mtrl.png
new file mode 100644
index 0000000..099703e
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_21_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_21_mtrl.png
new file mode 100644
index 0000000..6463743
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_22_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_22_mtrl.png
new file mode 100644
index 0000000..c3808eb
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_23_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_23_mtrl.png
new file mode 100644
index 0000000..14215bb
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_24_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_24_mtrl.png
new file mode 100644
index 0000000..0720a34
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_25_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_25_mtrl.png
new file mode 100644
index 0000000..08d94b0
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_26_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_26_mtrl.png
new file mode 100644
index 0000000..58bd80b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_27_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_27_mtrl.png
new file mode 100644
index 0000000..0c7a1f3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_28_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_28_mtrl.png
new file mode 100644
index 0000000..1a8c1e6
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_29_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_29_mtrl.png
new file mode 100644
index 0000000..10bc6c4
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_30_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_30_mtrl.png
new file mode 100644
index 0000000..5aa4e98
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_dark_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_00_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_00_mtrl.png
new file mode 100644
index 0000000..d6daf80
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_01_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_01_mtrl.png
new file mode 100644
index 0000000..41275f1
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_02_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_02_mtrl.png
new file mode 100644
index 0000000..b63b7c3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_03_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_03_mtrl.png
new file mode 100644
index 0000000..403d1b7
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_04_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_04_mtrl.png
new file mode 100644
index 0000000..a19aa06
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_05_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_05_mtrl.png
new file mode 100644
index 0000000..33d4dbf
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_06_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_06_mtrl.png
new file mode 100644
index 0000000..ad89fa1
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_07_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_07_mtrl.png
new file mode 100644
index 0000000..9a970c8
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_08_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_08_mtrl.png
new file mode 100644
index 0000000..5c71217
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_09_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_09_mtrl.png
new file mode 100644
index 0000000..181c812
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_10_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_10_mtrl.png
new file mode 100644
index 0000000..1b285a7
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_11_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_11_mtrl.png
new file mode 100644
index 0000000..4a91688
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_12_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_12_mtrl.png
new file mode 100644
index 0000000..4a3bc21
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_13_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_13_mtrl.png
new file mode 100644
index 0000000..84d944d
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_14_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_14_mtrl.png
new file mode 100644
index 0000000..8fe61bc
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_15_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_15_mtrl.png
new file mode 100644
index 0000000..d1a9906
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_16_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_16_mtrl.png
new file mode 100644
index 0000000..3de70e3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_17_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_17_mtrl.png
new file mode 100644
index 0000000..a2caa31
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_18_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_18_mtrl.png
new file mode 100644
index 0000000..984e0b1
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_19_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_19_mtrl.png
new file mode 100644
index 0000000..1a20df8
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_20_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_20_mtrl.png
new file mode 100644
index 0000000..2ffe3f7
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_21_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_21_mtrl.png
new file mode 100644
index 0000000..87f7880
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_22_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_22_mtrl.png
new file mode 100644
index 0000000..39f1db7
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_23_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_23_mtrl.png
new file mode 100644
index 0000000..e1501fe6
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_24_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_24_mtrl.png
new file mode 100644
index 0000000..1ac9df6
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_25_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_25_mtrl.png
new file mode 100644
index 0000000..486225b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_26_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_26_mtrl.png
new file mode 100644
index 0000000..e2aec2b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_27_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_27_mtrl.png
new file mode 100644
index 0000000..c63ee04
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_28_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_28_mtrl.png
new file mode 100644
index 0000000..2f92d61
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_29_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_29_mtrl.png
new file mode 100644
index 0000000..9b7c065
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_connecting_light_30_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_30_mtrl.png
new file mode 100644
index 0000000..d6daf80
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_connecting_light_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_disabled_mtrl_alpha.png b/core/res/res/drawable-hdpi/ic_media_route_disabled_mtrl_alpha.png
new file mode 100644
index 0000000..e0a2ba1
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_disabled_mtrl_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_disabled_mtrl_dark.png b/core/res/res/drawable-hdpi/ic_media_route_disabled_mtrl_dark.png
deleted file mode 100644
index 8ad305d..0000000
--- a/core/res/res/drawable-hdpi/ic_media_route_disabled_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_disabled_mtrl_light.png b/core/res/res/drawable-hdpi/ic_media_route_disabled_mtrl_light.png
deleted file mode 100644
index 887fde4..0000000
--- a/core/res/res/drawable-hdpi/ic_media_route_disabled_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_off_dark_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_off_dark_mtrl.png
new file mode 100644
index 0000000..1f180ad
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_off_dark_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_off_light_mtrl.png b/core/res/res/drawable-hdpi/ic_media_route_off_light_mtrl.png
new file mode 100644
index 0000000..18d83e9
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_off_light_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_off_mtrl_dark.png b/core/res/res/drawable-hdpi/ic_media_route_off_mtrl_dark.png
deleted file mode 100644
index 5739df7..0000000
--- a/core/res/res/drawable-hdpi/ic_media_route_off_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_off_mtrl_light.png b/core/res/res/drawable-hdpi/ic_media_route_off_mtrl_light.png
deleted file mode 100644
index 58c344a..0000000
--- a/core/res/res/drawable-hdpi/ic_media_route_off_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_0_mtrl_dark.png b/core/res/res/drawable-hdpi/ic_media_route_on_0_mtrl_dark.png
deleted file mode 100644
index ac699cf..0000000
--- a/core/res/res/drawable-hdpi/ic_media_route_on_0_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_0_mtrl_light.png b/core/res/res/drawable-hdpi/ic_media_route_on_0_mtrl_light.png
deleted file mode 100644
index 84c5a11..0000000
--- a/core/res/res/drawable-hdpi/ic_media_route_on_0_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_1_mtrl_dark.png b/core/res/res/drawable-hdpi/ic_media_route_on_1_mtrl_dark.png
deleted file mode 100644
index 372ab35..0000000
--- a/core/res/res/drawable-hdpi/ic_media_route_on_1_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_1_mtrl_light.png b/core/res/res/drawable-hdpi/ic_media_route_on_1_mtrl_light.png
deleted file mode 100644
index 7fc993d6..0000000
--- a/core/res/res/drawable-hdpi/ic_media_route_on_1_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_2_mtrl_dark.png b/core/res/res/drawable-hdpi/ic_media_route_on_2_mtrl_dark.png
deleted file mode 100644
index 3261626..0000000
--- a/core/res/res/drawable-hdpi/ic_media_route_on_2_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_2_mtrl_light.png b/core/res/res/drawable-hdpi/ic_media_route_on_2_mtrl_light.png
deleted file mode 100644
index 36adcd0..0000000
--- a/core/res/res/drawable-hdpi/ic_media_route_on_2_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_mtrl_dark.png b/core/res/res/drawable-hdpi/ic_media_route_on_mtrl_dark.png
deleted file mode 100644
index 9fbc9b0..0000000
--- a/core/res/res/drawable-hdpi/ic_media_route_on_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_mtrl_light.png b/core/res/res/drawable-hdpi/ic_media_route_on_mtrl_light.png
deleted file mode 100644
index 086aefe..0000000
--- a/core/res/res/drawable-hdpi/ic_media_route_on_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_corp_icon.png b/core/res/res/drawable-mdpi/ic_corp_icon.png
deleted file mode 100644
index 79372b2..0000000
--- a/core/res/res/drawable-mdpi/ic_corp_icon.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_00_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_00_mtrl.png
new file mode 100644
index 0000000..49d353d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_01_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_01_mtrl.png
new file mode 100644
index 0000000..ca1bf45
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_02_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_02_mtrl.png
new file mode 100644
index 0000000..69611bc
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_03_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_03_mtrl.png
new file mode 100644
index 0000000..53e0f64
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_04_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_04_mtrl.png
new file mode 100644
index 0000000..bcf2a18
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_05_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_05_mtrl.png
new file mode 100644
index 0000000..937f5a0
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_06_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_06_mtrl.png
new file mode 100644
index 0000000..5a5e2d5
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_07_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_07_mtrl.png
new file mode 100644
index 0000000..82cf33c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_08_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_08_mtrl.png
new file mode 100644
index 0000000..522b331
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_09_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_09_mtrl.png
new file mode 100644
index 0000000..23723a3
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_10_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_10_mtrl.png
new file mode 100644
index 0000000..313b6d2
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_11_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_11_mtrl.png
new file mode 100644
index 0000000..cfbc110
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_12_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_12_mtrl.png
new file mode 100644
index 0000000..2b2c628
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_13_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_13_mtrl.png
new file mode 100644
index 0000000..260adca
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_14_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_14_mtrl.png
new file mode 100644
index 0000000..cadb1c5
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_15_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_15_mtrl.png
new file mode 100644
index 0000000..b91e799
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_16_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_16_mtrl.png
new file mode 100644
index 0000000..19edb96
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_17_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_17_mtrl.png
new file mode 100644
index 0000000..e7b20cc
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_18_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_18_mtrl.png
new file mode 100644
index 0000000..7ea341e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_19_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_19_mtrl.png
new file mode 100644
index 0000000..fb8b556
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_20_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_20_mtrl.png
new file mode 100644
index 0000000..91016aa
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_21_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_21_mtrl.png
new file mode 100644
index 0000000..c51481a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_22_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_22_mtrl.png
new file mode 100644
index 0000000..80d09e2
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_23_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_23_mtrl.png
new file mode 100644
index 0000000..c4ad65f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_24_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_24_mtrl.png
new file mode 100644
index 0000000..060be80
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_25_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_25_mtrl.png
new file mode 100644
index 0000000..e45e858
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_26_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_26_mtrl.png
new file mode 100644
index 0000000..55c3959
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_27_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_27_mtrl.png
new file mode 100644
index 0000000..9c11d99
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_28_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_28_mtrl.png
new file mode 100644
index 0000000..d3c334b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_29_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_29_mtrl.png
new file mode 100644
index 0000000..a3164c9
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_dark_30_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_30_mtrl.png
new file mode 100644
index 0000000..b550760
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_dark_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_00_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_00_mtrl.png
new file mode 100644
index 0000000..d5efab4
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_01_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_01_mtrl.png
new file mode 100644
index 0000000..74d39ac
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_02_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_02_mtrl.png
new file mode 100644
index 0000000..3775cef
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_03_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_03_mtrl.png
new file mode 100644
index 0000000..d960a39
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_04_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_04_mtrl.png
new file mode 100644
index 0000000..6101cdf
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_05_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_05_mtrl.png
new file mode 100644
index 0000000..fca6c96
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_06_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_06_mtrl.png
new file mode 100644
index 0000000..b2bdc46
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_07_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_07_mtrl.png
new file mode 100644
index 0000000..9d8335e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_08_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_08_mtrl.png
new file mode 100644
index 0000000..4593765
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_09_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_09_mtrl.png
new file mode 100644
index 0000000..d740810
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_10_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_10_mtrl.png
new file mode 100644
index 0000000..7b8a7fc
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_11_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_11_mtrl.png
new file mode 100644
index 0000000..e5d3c682
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_12_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_12_mtrl.png
new file mode 100644
index 0000000..b264a99
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_13_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_13_mtrl.png
new file mode 100644
index 0000000..0232d72
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_14_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_14_mtrl.png
new file mode 100644
index 0000000..2aa94bb
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_15_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_15_mtrl.png
new file mode 100644
index 0000000..693f6c6
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_16_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_16_mtrl.png
new file mode 100644
index 0000000..b7aea5c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_17_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_17_mtrl.png
new file mode 100644
index 0000000..217cb3d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_18_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_18_mtrl.png
new file mode 100644
index 0000000..933f338
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_19_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_19_mtrl.png
new file mode 100644
index 0000000..a2ced71
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_20_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_20_mtrl.png
new file mode 100644
index 0000000..4303ca4
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_21_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_21_mtrl.png
new file mode 100644
index 0000000..c4d9559
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_22_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_22_mtrl.png
new file mode 100644
index 0000000..a6e278b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_23_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_23_mtrl.png
new file mode 100644
index 0000000..19bf6c2
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_24_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_24_mtrl.png
new file mode 100644
index 0000000..c6c2163
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_25_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_25_mtrl.png
new file mode 100644
index 0000000..fe87238
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_26_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_26_mtrl.png
new file mode 100644
index 0000000..229c489
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_27_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_27_mtrl.png
new file mode 100644
index 0000000..64155d9
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_28_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_28_mtrl.png
new file mode 100644
index 0000000..cb4c0ed
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_29_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_29_mtrl.png
new file mode 100644
index 0000000..a85c70c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connected_light_30_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connected_light_30_mtrl.png
new file mode 100644
index 0000000..d99afbf
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connected_light_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_00_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_00_mtrl.png
new file mode 100644
index 0000000..49d353d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_01_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_01_mtrl.png
new file mode 100644
index 0000000..ca1bf45
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_02_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_02_mtrl.png
new file mode 100644
index 0000000..69611bc
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_03_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_03_mtrl.png
new file mode 100644
index 0000000..53e0f64
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_04_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_04_mtrl.png
new file mode 100644
index 0000000..bcf2a18
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_05_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_05_mtrl.png
new file mode 100644
index 0000000..937f5a0
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_06_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_06_mtrl.png
new file mode 100644
index 0000000..5a5e2d5
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_07_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_07_mtrl.png
new file mode 100644
index 0000000..82cf33c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_08_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_08_mtrl.png
new file mode 100644
index 0000000..522b331
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_09_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_09_mtrl.png
new file mode 100644
index 0000000..23723a3
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_10_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_10_mtrl.png
new file mode 100644
index 0000000..313b6d2
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_11_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_11_mtrl.png
new file mode 100644
index 0000000..db37fc5
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_12_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_12_mtrl.png
new file mode 100644
index 0000000..79941dc
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_13_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_13_mtrl.png
new file mode 100644
index 0000000..3361fe2
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_14_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_14_mtrl.png
new file mode 100644
index 0000000..5649d0f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_15_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_15_mtrl.png
new file mode 100644
index 0000000..801b562
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_16_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_16_mtrl.png
new file mode 100644
index 0000000..38e1408
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_17_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_17_mtrl.png
new file mode 100644
index 0000000..f99797d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_18_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_18_mtrl.png
new file mode 100644
index 0000000..7048711
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_19_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_19_mtrl.png
new file mode 100644
index 0000000..6f60804
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_20_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_20_mtrl.png
new file mode 100644
index 0000000..da3a23b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_21_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_21_mtrl.png
new file mode 100644
index 0000000..4007ed1
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_22_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_22_mtrl.png
new file mode 100644
index 0000000..518d2b9
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_23_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_23_mtrl.png
new file mode 100644
index 0000000..d821697
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_24_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_24_mtrl.png
new file mode 100644
index 0000000..aa19608
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_25_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_25_mtrl.png
new file mode 100644
index 0000000..81bf08c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_26_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_26_mtrl.png
new file mode 100644
index 0000000..1bb7aec
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_27_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_27_mtrl.png
new file mode 100644
index 0000000..864795c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_28_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_28_mtrl.png
new file mode 100644
index 0000000..ed07e9f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_29_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_29_mtrl.png
new file mode 100644
index 0000000..a188260
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_30_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_30_mtrl.png
new file mode 100644
index 0000000..49d353d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_dark_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_00_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_00_mtrl.png
new file mode 100644
index 0000000..d5efab4
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_01_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_01_mtrl.png
new file mode 100644
index 0000000..74d39ac
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_02_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_02_mtrl.png
new file mode 100644
index 0000000..3775cef
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_03_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_03_mtrl.png
new file mode 100644
index 0000000..d960a39
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_04_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_04_mtrl.png
new file mode 100644
index 0000000..6101cdf
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_05_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_05_mtrl.png
new file mode 100644
index 0000000..fca6c96
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_06_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_06_mtrl.png
new file mode 100644
index 0000000..b2bdc46
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_07_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_07_mtrl.png
new file mode 100644
index 0000000..9d8335e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_08_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_08_mtrl.png
new file mode 100644
index 0000000..4593765
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_09_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_09_mtrl.png
new file mode 100644
index 0000000..d740810
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_10_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_10_mtrl.png
new file mode 100644
index 0000000..7b8a7fc
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_11_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_11_mtrl.png
new file mode 100644
index 0000000..aadb0cd
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_12_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_12_mtrl.png
new file mode 100644
index 0000000..628e63d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_13_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_13_mtrl.png
new file mode 100644
index 0000000..dfc63ae
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_14_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_14_mtrl.png
new file mode 100644
index 0000000..450ead1
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_15_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_15_mtrl.png
new file mode 100644
index 0000000..6424958
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_16_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_16_mtrl.png
new file mode 100644
index 0000000..c5b7fa4
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_17_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_17_mtrl.png
new file mode 100644
index 0000000..13fcf6f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_18_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_18_mtrl.png
new file mode 100644
index 0000000..5be9c69
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_19_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_19_mtrl.png
new file mode 100644
index 0000000..3de2194
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_20_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_20_mtrl.png
new file mode 100644
index 0000000..c40a2cf
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_21_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_21_mtrl.png
new file mode 100644
index 0000000..9923ccd
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_22_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_22_mtrl.png
new file mode 100644
index 0000000..8a000c1
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_23_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_23_mtrl.png
new file mode 100644
index 0000000..3680ced
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_24_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_24_mtrl.png
new file mode 100644
index 0000000..d014f5e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_25_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_25_mtrl.png
new file mode 100644
index 0000000..a8aefdb
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_26_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_26_mtrl.png
new file mode 100644
index 0000000..4716d66
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_27_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_27_mtrl.png
new file mode 100644
index 0000000..fdeaf4f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_28_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_28_mtrl.png
new file mode 100644
index 0000000..9accc7a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_29_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_29_mtrl.png
new file mode 100644
index 0000000..1f0a327
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_connecting_light_30_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_30_mtrl.png
new file mode 100644
index 0000000..d5efab4
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_connecting_light_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_disabled_mtrl_dark.png b/core/res/res/drawable-mdpi/ic_media_route_disabled_mtrl_dark.png
deleted file mode 100644
index 4446ea4..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_disabled_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_disabled_mtrl_light.png b/core/res/res/drawable-mdpi/ic_media_route_disabled_mtrl_light.png
deleted file mode 100644
index 4d790c6..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_disabled_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_off_dark_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_off_dark_mtrl.png
new file mode 100644
index 0000000..9ef3ea6
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_off_dark_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_off_light_mtrl.png b/core/res/res/drawable-mdpi/ic_media_route_off_light_mtrl.png
new file mode 100644
index 0000000..cbcc75a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_off_light_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_off_mtrl_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_off_mtrl_alpha.png
deleted file mode 100644
index a652117..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_off_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_off_mtrl_dark.png b/core/res/res/drawable-mdpi/ic_media_route_off_mtrl_dark.png
deleted file mode 100644
index c401dc0..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_off_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_off_mtrl_light.png b/core/res/res/drawable-mdpi/ic_media_route_off_mtrl_light.png
deleted file mode 100644
index e24d58650..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_off_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_0_mtrl_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_on_0_mtrl_alpha.png
deleted file mode 100644
index 35d1c56..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_on_0_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_0_mtrl_dark.png b/core/res/res/drawable-mdpi/ic_media_route_on_0_mtrl_dark.png
deleted file mode 100644
index 5a9fea0..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_on_0_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_0_mtrl_light.png b/core/res/res/drawable-mdpi/ic_media_route_on_0_mtrl_light.png
deleted file mode 100644
index 3029695..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_on_0_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_1_mtrl_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_on_1_mtrl_alpha.png
deleted file mode 100644
index 264188b..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_on_1_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_1_mtrl_dark.png b/core/res/res/drawable-mdpi/ic_media_route_on_1_mtrl_dark.png
deleted file mode 100644
index d8d0b7b..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_on_1_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_1_mtrl_light.png b/core/res/res/drawable-mdpi/ic_media_route_on_1_mtrl_light.png
deleted file mode 100644
index 868c7f4..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_on_1_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_2_mtrl_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_on_2_mtrl_alpha.png
deleted file mode 100644
index 06ae665..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_on_2_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_2_mtrl_dark.png b/core/res/res/drawable-mdpi/ic_media_route_on_2_mtrl_dark.png
deleted file mode 100644
index 83a1b69..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_on_2_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_2_mtrl_light.png b/core/res/res/drawable-mdpi/ic_media_route_on_2_mtrl_light.png
deleted file mode 100644
index 269ee8e..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_on_2_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_mtrl_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_on_mtrl_alpha.png
deleted file mode 100644
index a69e301..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_on_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_mtrl_dark.png b/core/res/res/drawable-mdpi/ic_media_route_on_mtrl_dark.png
deleted file mode 100644
index 9f3d12e..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_on_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_mtrl_light.png b/core/res/res/drawable-mdpi/ic_media_route_on_mtrl_light.png
deleted file mode 100644
index ca865f2..0000000
--- a/core/res/res/drawable-mdpi/ic_media_route_on_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-nodpi/platlogo.xml b/core/res/res/drawable-nodpi/platlogo.xml
index 182ba24..a6dee8a 100644
--- a/core/res/res/drawable-nodpi/platlogo.xml
+++ b/core/res/res/drawable-nodpi/platlogo.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
 <!--
 Copyright (C) 2017 The Android Open Source Project
 
@@ -14,27 +15,35 @@
     limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="480dp"
-        android:height="480dp"
-        android:viewportWidth="48.0"
-        android:viewportHeight="48.0">
-    <path
-        android:pathData="M25.0,25.0m-20.5,0.0a20.5,20.5,0,1,1,41.0,0.0a20.5,20.5,0,1,1,-41.0,0.0"
-        android:fillAlpha="0.066"
-        android:fillColor="#000000"/>
-    <path
-        android:pathData="M24.0,24.0m-20.0,0.0a20.0,20.0,0,1,1,40.0,0.0a20.0,20.0,0,1,1,-40.0,0.0"
-        android:fillColor="#FFC107"/>
-    <path
-        android:pathData="M44,24.2010101 L33.9004889,14.101499 L14.101499,33.9004889 L24.2010101,44 C29.2525804,43.9497929 34.2887564,41.9975027 38.1431296,38.1431296 C41.9975027,34.2887564 43.9497929,29.2525804 44,24.2010101 Z"
-        android:fillColor="#FE9F00"/>
-    <path
-        android:pathData="M24.0,24.0m-14.0,0.0a14.0,14.0,0,1,1,28.0,0.0a14.0,14.0,0,1,1,-28.0,0.0"
-        android:fillColor="#FED44F"/>
-    <path
-        android:pathData="M37.7829445,26.469236 L29.6578482,18.3441397 L18.3441397,29.6578482 L26.469236,37.7829445 C29.1911841,37.2979273 31.7972024,36.0037754 33.9004889,33.9004889 C36.0037754,31.7972024 37.2979273,29.1911841 37.7829445,26.469236 Z"
-        android:fillColor="#FFC107"/>
-    <path
-        android:pathData="M24.0,24.0m-8.0,0.0a8.0,8.0,0,1,1,16.0,0.0a8.0,8.0,0,1,1,-16.0,0.0"
-        android:fillColor="#FFFFFF"/>
+    android:width="48dp"
+    android:height="48dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48">
+    <group>
+        <path
+            android:fillColor="#2C292A"
+            android:fillType="evenOdd"
+            android:pathData="M6,26a20,20 0 0,1 40,0a20,20 0 0,1 -40,0z"/>
+        <path
+            android:fillColor="#FAFAFA"
+            android:fillType="evenOdd"
+            android:pathData="M4,24a20,20 0 0,1 40,0a20,20 0 0,1 -40,0z"/>
+        <path
+            android:fillColor="#2C292A"
+            android:fillType="evenOdd"
+            android:pathData="M2,22a20,20 0 0,1 40,0a20,20 0 0,1 -40,0z"/>
+        <path
+            android:fillColor="#00000000"
+            android:strokeColor="#453F41"
+            android:strokeWidth="1"
+            android:fillType="evenOdd"
+            android:pathData="M26.5 29.5v3c0 1.13-.87 2-2 2s-2-.87-2-2v-3h-1v3c0 1.13-.87 2-2 2s-2-.87-2-2v-3H17a1.5 1.5 0 0 1-1.5-1.5V17.5h13V28a1.5 1.5 0 0 1-1.5 1.5h-.5zM13.5 17.5c1.13 0 2 .87 2 2v7c0 1.13-.87 2-2 2s-2-.87-2-2v-7c0-1.13.87-2 2-2zM30.5 17.5c1.13 0 2 .87 2 2v7c0 1.13-.87 2-2 2s-2-.87-2-2v-7c0-1.13.87-2 2-2zM26.3 12.11A6.46 6.46 0 0 1 28.5 17v.5h-13V17a6.46 6.46 0 0 1 2.2-4.89l-.9-.9a.98.98 0 0 1 0-1.41.98.98 0 0 1 1.4 0l1.26 1.25A6.33 6.33 0 0 1 22 10.5c.87 0 1.73.2 2.54.55L25.8 9.8a.98.98 0 0 1 1.4 0 .98.98 0 0 1 0 1.4l-.9.91z"/>
+        <path
+            android:fillColor="#453F41"
+            android:fillType="evenOdd"
+            android:pathData="M20.16 14.5a.66.66 0 1 1-1.31 0c0-.36.29-.65.65-.65.36 0 .65.29.65.65zM25.16 14.5c0 .36-.3.66-.66.66a.65.65 0 1 1 .66-.66z"/>
+        <path
+            android:fillColor="#453F41"
+            android:pathData="M22 40.5c0.36 0 0.73-0.01 1.09-0.03l-0.18-3A15.77 15.77 0 0 1 22 37.5v3zm2.17-0.13a18.48 18.48 0 0 0 1.08-0.15l-0.53-2.96c-0.3 0.05-0.6 0.1-0.9 0.13l0.35 2.98zM26.32 40a18.37 18.37 0 0 0 1.05-0.28l-0.87-2.87a15.37 15.37 0 0 1-0.88 0.23l0.7 2.92zm2.1-0.64l-1.03-2.81a15.39 15.39 0 0 0 0.84-0.34l1.2 2.74a18.39 18.39 0 0 1-1 0.41zm1.99-0.87l-1.37-2.67a15.46 15.46 0 0 0 0.8-0.44l1.52 2.59a18.46 18.46 0 0 1-0.95 0.52zm1.89-1.11l-1.67-2.5a15.55 15.55 0 0 0 0.74-0.52l1.81 2.39a18.55 18.55 0 0 1-0.88 0.63zm1.75-1.33l-1.95-2.28a15.6 15.6 0 0 0 0.67-0.61l2.09 2.15a18.6 18.6 0 0 1-0.8 0.74zm1.6-1.55l-2.22-2.02a15.6 15.6 0 0 0 0.6-0.7l2.33 1.9a18.6 18.6 0 0 1-0.72 0.82zM37 32.82l-2.43-1.76a15.53 15.53 0 0 0 0.5-0.75l2.54 1.6c-0.2 0.31-0.4 0.61-0.61 0.9zm1.15-1.8l-2.62-1.47a15.45 15.45 0 0 0 0.42-0.8l2.7 1.3a18.45 18.45 0 0 1-0.5 0.97zm0.95-1.98l-2.77-1.14a15.38 15.38 0 0 0 0.32-0.86l2.84 0.98a18.38 18.38 0 0 1-0.39 1.02zm0.72-2.09c0.1-0.34 0.18-0.7 0.26-1.05l-2.93-0.63a15.38 15.38 0 0 1-0.22 0.88l2.89 0.8zm0.46-2.15a18.52 18.52 0 0 0 0.13-1.08l-2.99-0.28a15.52 15.52 0 0 1-0.1 0.9l2.96 0.46zm0.2-2.2a18.81 18.81 0 0 0 0-1.1l-3 0.08a16 16 0 0 1 0 0.92l3 0.1zm-0.06-2.2a18.54 18.54 0 0 0-0.12-1.07l-2.97 0.43c0.04 0.3 0.08 0.6 0.1 0.9l3-0.25zm-0.31-2.15a18.39 18.39 0 0 0-0.25-1.06l-2.9 0.78a15.39 15.39 0 0 1 0.21 0.89l2.94-0.6zm-0.57-2.12l-2.85 0.95a15.37 15.37 0 0 0-0.31-0.85l2.78-1.12a18.37 18.37 0 0 1 0.38 1.02zm-0.83-2.06l-2.71 1.29a15.44 15.44 0 0 0-0.42-0.81l2.63-1.45a18.44 18.44 0 0 1 0.5 0.97zm-1.03-1.88l-2.54 1.6a15.53 15.53 0 0 0-0.5-0.76l2.44-1.74 0.6 0.9zm-1.28-1.79l-2.33 1.88a15.6 15.6 0 0 0-0.6-0.69l2.23-2.02a18.6 18.6 0 0 1 0.7 0.83zm-1.48-1.63l-2.1 2.14a15.6 15.6 0 0 0-0.67-0.62l1.97-2.26a18.6 18.6 0 0 1 0.8 0.74zM33.24 7.3l-1.82 2.38a15.55 15.55 0 0 0-0.74-0.53l1.68-2.49c0.3 0.2 0.6 0.42 0.88 0.64zm-1.71-1.17L29.98 8.7a15.47 15.47 0 0 0-0.8-0.45l1.4-2.66a18.47 18.47 0 0 1 0.95 0.54zm-1.95-1.02l-1.23 2.74A15.4 15.4 0 0 0 27.5 7.5l1.06-2.8a18.4 18.4 0 0 1 1.01 0.4zm-2.06-0.78l-0.9 2.86a15.37 15.37 0 0 0-0.87-0.24l0.72-2.92a18.37 18.37 0 0 1 1.05 0.3zM25.38 3.8a18.47 18.47 0 0 0-1.08-0.17l-0.37 2.98c0.3 0.04 0.6 0.08 0.9 0.14l0.55-2.95zm-2.2-0.27A18.75 18.75 0 0 0 22.1 3.5l-0.02 3L23 6.53l0.19-3zM21 3.53a18.6 18.6 0 0 0-1.08 0.09l0.33 2.98a15.6 15.6 0 0 1 0.91-0.08l-0.16-3zm-2.16 0.24A18.4 18.4 0 0 0 17.76 4l0.68 2.92a15.4 15.4 0 0 1 0.9-0.18l-0.51-2.96zm-2.14 0.5l0.86 2.88a15.37 15.37 0 0 0-0.86 0.28l-1.03-2.81a18.37 18.37 0 0 1 1.03-0.35zm-2.07 0.76l1.2 2.75a15.42 15.42 0 0 0-0.83 0.4L13.63 5.5a18.42 18.42 0 0 1 0.99-0.47zM12.7 6l1.5 2.6a15.5 15.5 0 0 0-0.76 0.48l-1.66-2.5A18.5 18.5 0 0 1 12.7 6zm-1.83 1.22l1.8 2.4a15.58 15.58 0 0 0-0.7 0.57L10.01 7.9a18.58 18.58 0 0 1 0.85-0.68zM9.19 8.66l2.07 2.16a15.6 15.6 0 0 0-0.63 0.65l-2.2-2.04a18.6 18.6 0 0 1 0.76-0.77zm-1.51 1.63l2.32 1.9a15.57 15.57 0 0 0-0.56 0.72l-2.42-1.76a18.57 18.57 0 0 1 0.66-0.86zm-1.23 1.69l2.52 1.62a15.5 15.5 0 0 0-0.47 0.78l-2.61-1.47a18.5 18.5 0 0 1 0.56-0.93zm-1.08 1.9l2.7 1.32a15.41 15.41 0 0 0-0.38 0.83l-2.77-1.15a18.41 18.41 0 0 1 0.45-1zm-0.85 2.04l2.84 0.98a15.37 15.37 0 0 0-0.28 0.87L4.2 16.96c0.1-0.35 0.2-0.7 0.32-1.04zm-0.6 2.12a18.43 18.43 0 0 0-0.2 1.07l2.97 0.47c0.05-0.3 0.1-0.6 0.17-0.9l-2.93-0.64zm-0.34 2.18a18.65 18.65 0 0 0-0.07 1.09l3 0.11 0.06-0.91-2.99-0.29zm-0.08 2.2a18.7 18.7 0 0 0 0.06 1.1l3-0.25a15.7 15.7 0 0 1-0.06-0.91l-3 0.07zm0.18 2.18a18.44 18.44 0 0 0 0.18 1.07l2.95-0.6a15.44 15.44 0 0 1-0.16-0.9L3.68 24.6zm0.43 2.14l2.9-0.77a15.37 15.37 0 0 0 0.26 0.88l-2.85 0.94a18.37 18.37 0 0 1-0.3-1.05zm0.7 2.1l2.78-1.11a15.4 15.4 0 0 0 0.36 0.83l-2.71 1.27a18.4 18.4 0 0 1-0.44-1zm0.9 1.95l2.65-1.43a15.48 15.48 0 0 0 0.45 0.8l-2.55 1.57a18.48 18.48 0 0 1-0.54-0.94zm1.17 1.87l2.45-1.73a15.56 15.56 0 0 0 0.54 0.73l-2.34 1.87a18.56 18.56 0 0 1-0.65-0.87zm1.37 1.72l2.23-2a15.6 15.6 0 0 0 0.63 0.65l-2.1 2.14a18.6 18.6 0 0 1-0.76-0.79zm1.58 1.56l1.98-2.26c0.22 0.2 0.46 0.39 0.7 0.58l-1.84 2.37a18.59 18.59 0 0 1-0.84-0.7zm1.66 1.28l1.7-2.46a15.52 15.52 0 0 0 0.77 0.5l-1.56 2.56a18.52 18.52 0 0 1-0.91-0.6zm1.87 1.14l1.4-2.65a15.43 15.43 0 0 0 0.82 0.4l-1.24 2.73a18.43 18.43 0 0 1-0.98-0.48zm2 0.91l1.08-2.8a15.37 15.37 0 0 0 0.86 0.3l-0.9 2.86a18.37 18.37 0 0 1-1.04-0.36zm2.1 0.67a18.4 18.4 0 0 0 1.07 0.23l0.56-2.94a15.4 15.4 0 0 1-0.9-0.2l-0.72 2.91zm2.18 0.41a18.57 18.57 0 0 0 1.08 0.1l0.2-2.99a15.57 15.57 0 0 1-0.9-0.09l-0.38 2.98zm2.2 0.15H22v-3h-0.13l-0.03 3z"/>
+    </group>
 </vector>
diff --git a/core/res/res/drawable-nodpi/platlogo_m.xml b/core/res/res/drawable-nodpi/platlogo_m.xml
index d9a558d..aacf674 100644
--- a/core/res/res/drawable-nodpi/platlogo_m.xml
+++ b/core/res/res/drawable-nodpi/platlogo_m.xml
@@ -1,5 +1,5 @@
 <!--
-Copyright (C) 2016 The Android Open Source Project
+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.
@@ -14,59 +14,27 @@
     limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="48dp"
-        android:height="48dp"
+        android:width="480dp"
+        android:height="480dp"
         android:viewportWidth="48.0"
         android:viewportHeight="48.0">
+    <!--<path
+        android:pathData="M25.0,25.0m-20.5,0.0a20.5,20.5,0,1,1,41.0,0.0a20.5,20.5,0,1,1,-41.0,0.0"
+        android:fillAlpha="0.066"
+        android:fillColor="#000000"/>-->
     <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M33.8,38l-25.5,-25.5l-1.7000003,0.6999998l25.499998,25.5z"/>
+        android:pathData="M24.0,24.0m-20.0,0.0a20.0,20.0,0,1,1,40.0,0.0a20.0,20.0,0,1,1,-40.0,0.0"
+        android:fillColor="#FFC107"/>
     <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M40.8,34.8l-25.4,-25.5l-1.6999998,0.6999998l25.5,25.5z"/>
+        android:pathData="M44,24.2010101 L33.9004889,14.101499 L14.101499,33.9004889 L24.2010101,44 C29.2525804,43.9497929 34.2887564,41.9975027 38.1431296,38.1431296 C41.9975027,34.2887564 43.9497929,29.2525804 44,24.2010101 Z"
+        android:fillColor="#FE9F00"/>
     <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M11.1,13.1l-0.3,-0.4l1.1,-1.3l0,0l-1.6,0.8l-0.4,-0.4l2.6,-1.2l0.4,0.4l-1.1,1.3l0,0l1.6,-0.8l0.3,0.4L11.1,13.1z"/>
+        android:pathData="M24.0,24.0m-14.0,0.0a14.0,14.0,0,1,1,28.0,0.0a14.0,14.0,0,1,1,-28.0,0.0"
+        android:fillColor="#FED44F"/>
     <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M13,14.2l-0.5,-0.5l-0.6,0.2l-0.4,-0.4l3.1,-0.7l0.4,0.4l-2.1,1.7l-0.4,-0.4L13,14.2z M13,13.6l0.3,0.3l0.8,-0.6   l0,0L13,13.6z"/>
+        android:pathData="M37.7829445,26.469236 L29.6578482,18.3441397 L18.3441397,29.6578482 L26.469236,37.7829445 C29.1911841,37.2979273 31.7972024,36.0037754 33.9004889,33.9004889 C36.0037754,31.7972024 37.2979273,29.1911841 37.7829445,26.469236 Z"
+        android:fillColor="#FFC107"/>
     <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M16.3,14.6l-1.6,1.2l0,0l2.2,-0.6l0.5,0.5l-2.6,1.2l-0.3,-0.4l0.7,-0.3l1,-0.4l0,0l-2.1,0.5L13.9,16l1.4,-1.1l0,0   l-0.9,0.5l-0.7,0.3l-0.3,-0.4l2.6,-1.2L16.3,14.6z"/>
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M17.4,17.8l-0.6,-0.6l-0.7,0.3l0.7,0.7l-0.4,0.2l-1,-1l2.6,-1.2l1,1l-0.4,0.2l-0.7,-0.7L17.2,17l0.6,0.6L17.4,17.8   z"/>
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M18.8,18.7L18.8,18.7l1.3,-0.2l0.4,0.4l-2.1,0.3l-0.9,0.4l-0.3,-0.4l1,-0.4l1.2,-1.2l0.4,0.4L18.8,18.7z"/>
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M22.2,20.5l-1.6,1.2l0,0l2.2,-0.6l0.5,0.5l-2.6,1.2l-0.3,-0.4l0.7,-0.3l1,-0.4l0,0L20,22.1l-0.2,-0.2l1.4,-1.1l0,0   l-0.9,0.5l-0.7,0.3l-0.3,-0.4l2.6,-1.2L22.2,20.5z"/>
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M22,23.6c0,0,0.1,0.1,0.2,0.1c0.1,0,0.2,0,0.3,-0.1l0.3,0.3c-0.2,0.1,-0.4,0.1,-0.6,0.1c-0.2,0,-0.4,-0.1,-0.5,-0.2   c-0.2,-0.2,-0.2,-0.3,-0.1,-0.5c0.1,-0.2,0.2,-0.3,0.5,-0.4l0.2,-0.1c0.3,-0.1,0.5,-0.2,0.8,-0.2c0.2,0,0.5,0.1,0.6,0.3   c0.1,0.1,0.2,0.3,0.1,0.4c0,0.1,-0.2,0.3,-0.4,0.4L23,23.4c0.1,0,0.2,-0.1,0.2,-0.2c0,-0.1,0,-0.1,0,-0.2C23.1,23,23,22.9,22.9,23   c-0.1,0,-0.2,0.1,-0.4,0.1l-0.2,0.1c-0.2,0.1,-0.3,0.1,-0.3,0.2C21.9,23.5,21.9,23.5,22,23.6z"/>
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M23.8,25.9l-0.3,-0.4l1.1,-1.3l0,0L22.9,25l-0.4,-0.4l2.6,-1.2l0.4,0.4l-1.1,1.3l0,0l1.6,-0.8l0.3,0.4L23.8,25.9z"/>
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M25.7,27l-0.5,-0.5l-0.6,0.2l-0.4,-0.4l3.1,-0.7l0.4,0.4l-2.1,1.7l-0.4,-0.4L25.7,27z M25.7,26.4l0.3,0.3l0.8,-0.6   l0,0L25.7,26.4z"/>
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M29,27.4l-1.6,1.2l0,0l2.2,-0.6l0.5,0.5l-2.6,1.2l-0.3,-0.4l0.8,-0.3l1,-0.4l0,0L26.8,29l-0.2,-0.2l1.4,-1.1l0,0   L27,28.1l-0.8,0.3l-0.3,-0.4l2.6,-1.2L29,27.4z"/>
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M30,30.6L29.5,30l-0.7,0.3l0.7,0.7L29,31.2l-1,-1l2.6,-1.2l1,1l-0.4,0.2l-0.7,-0.7l-0.6,0.3l0.6,0.6L30,30.6z"/>
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M31.5,32.1l-0.6,-0.6L29.8,32l-0.4,-0.4l2.6,-1.2l1,1l-0.4,0.2L32,31l-0.7,0.3l0.6,0.6L31.5,32.1z"/>
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M32,33.5L31.6,33L31,33.2l-0.4,-0.4l3.1,-0.7l0.4,0.4l-2.1,1.7l-0.4,-0.4L32,33.5z M32.1,32.9l0.3,0.3l0.8,-0.6   l0,0L32.1,32.9z"/>
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M34.3,35.3c-0.3,0.1,-0.5,0.2,-0.8,0.1c-0.2,0,-0.5,-0.1,-0.6,-0.3c-0.2,-0.2,-0.2,-0.4,-0.2,-0.5   c0.1,-0.2,0.2,-0.3,0.6,-0.5l0.8,-0.4c0.3,-0.1,0.6,-0.2,0.9,-0.2c0.3,0,0.5,0.1,0.7,0.3c0.2,0.2,0.3,0.4,0.2,0.5c0,0.2,-0.2,0.3,-0.5,0.5   l-0.3,-0.4c0.2,-0.1,0.3,-0.1,0.3,-0.2c0,-0.1,0,-0.1,-0.1,-0.2C35,34,34.9,34,34.8,34c-0.1,0,-0.3,0,-0.5,0.1l-0.8,0.4   c-0.2,0.1,-0.3,0.2,-0.4,0.2c0,0.1,0,0.1,0,0.2c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0,0.4,-0.1L34.3,35.3z"/>
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M36,36.6L35.4,36l-0.7,0.3l0.7,0.7l-0.4,0.2l-1,-1l2.6,-1.2l1,1l-0.4,0.2l-0.7,-0.7l-0.6,0.3l0.6,0.6L36,36.6z"/>
+        android:pathData="M24.0,24.0m-8.0,0.0a8.0,8.0,0,1,1,16.0,0.0a8.0,8.0,0,1,1,-16.0,0.0"
+        android:fillColor="#FFFFFF"/>
 </vector>
diff --git a/core/res/res/drawable-nodpi/stat_sys_adb.xml b/core/res/res/drawable-nodpi/stat_sys_adb.xml
index 89e42e6..2e2b395 100644
--- a/core/res/res/drawable-nodpi/stat_sys_adb.xml
+++ b/core/res/res/drawable-nodpi/stat_sys_adb.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
 <!--
 Copyright (C) 2017 The Android Open Source Project
 
@@ -14,19 +15,23 @@
     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="#FF000000"
-        android:pathData="M12.0,12.0m-10.0,0.0a10.0,10.0,0,1,1,20.0,0.0a10.0,10.0,0,1,1,-20.0,0.0"
-        android:fillAlpha="0.25"/>
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z M12,18.5 C15.5898509,18.5 18.5,15.5898509 18.5,12 C18.5,8.41014913 15.5898509,5.5 12,5.5 C8.41014913,5.5 5.5,8.41014913 5.5,12 C5.5,15.5898509 8.41014913,18.5 12,18.5 Z"/>
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M12,18.5 C8.41014913,18.5 5.5,15.5898509 5.5,12 C5.5,8.41014913 8.41014913,5.5 12,5.5 C15.5898509,5.5 18.5,8.41014913 18.5,12 C18.5,15.5898509 15.5898509,18.5 12,18.5 Z M12,15 C13.6568542,15 15,13.6568542 15,12 C15,10.3431458 13.6568542,9 12,9 C10.3431458,9 9,10.3431458 9,12 C9,13.6568542 10.3431458,15 12,15 Z"
-        android:fillAlpha="0.25"/>
-</vector>
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <group>
+        <path
+            android:fillColor="#FFFFFF"
+            android:fillAlpha=".33"
+            android:fillType="evenOdd"
+            android:pathData="M5.71 18.29A8.99 8.99 0 0 0 22 13c0-3-1.46-5.65-3.71-7.29A8.99 8.99 0 0 0 2 11c0 3 1.46 5.65 3.71 7.29z"/>
+        <path
+            android:fillColor="#FFFFFF"
+            android:fillType="evenOdd"
+            android:pathData="M7.25 19.18A8.5 8.5 0 0 0 19.19 7.24 9 9 0 0 1 7.24 19.19z"/>
+        <path
+            android:fillColor="#FFFFFF"
+            android:fillAlpha=".33"
+            android:pathData="M10.5 3a0.5 0.5 0 1 1 1 0v2.05a0.5 0.5 0 1 1-1 0V3zm3.1 0.42a0.5 0.5 0 0 1 0.93 0.39l-0.8 1.88A0.5 0.5 0 1 1 12.8 5.3l0.8-1.88zm2.7 1.57a0.5 0.5 0 1 1 0.71 0.7l-1.45 1.46a0.5 0.5 0 0 1-0.7-0.71l1.44-1.45zm1.9 2.5a0.5 0.5 0 0 1 0.38 0.92l-1.9 0.77a0.5 0.5 0 0 1-0.37-0.93l1.9-0.77zM19 10.5a0.5 0.5 0 1 1 0 1h-2.05a0.5 0.5 0 0 1 0-1H19zm-0.42 3.1a0.5 0.5 0 0 1-0.39 0.93l-1.88-0.8a0.5 0.5 0 1 1 0.39-0.92l1.88 0.8zm-1.57 2.7a0.5 0.5 0 1 1-0.7 0.71l-1.46-1.45a0.5 0.5 0 0 1 0.71-0.7l1.45 1.44zm-2.5 1.9a0.5 0.5 0 1 1-0.92 0.38l-0.77-1.9a0.5 0.5 0 0 1 0.93-0.37l0.77 1.9zM11.5 19a0.5 0.5 0 1 1-1 0v-2.05a0.5 0.5 0 0 1 1 0V19zm-3.1-0.42a0.5 0.5 0 0 1-0.93-0.39l0.8-1.88A0.5 0.5 0 0 1 9.2 16.7l-0.8 1.88zm-2.7-1.57a0.5 0.5 0 1 1-0.71-0.7l1.45-1.46a0.5 0.5 0 0 1 0.7 0.71L5.7 17.01zm-1.9-2.48a0.5 0.5 0 0 1-0.38-0.92l1.88-0.8a0.5 0.5 0 0 1 0.4 0.92l-1.9 0.8zM3 11.5a0.5 0.5 0 1 1 0-1h2.05a0.5 0.5 0 1 1 0 1H3zm0.42-3.1A0.5 0.5 0 0 1 3.8 7.46l1.88 0.8A0.5 0.5 0 1 1 5.3 9.2L3.42 8.4zm1.57-2.7a0.5 0.5 0 1 1 0.7-0.71l1.46 1.45a0.5 0.5 0 0 1-0.71 0.7L4.99 5.7zm2.5-1.9A0.5 0.5 0 0 1 8.4 3.41l0.77 1.9a0.5 0.5 0 0 1-0.93 0.37L7.48 3.8z"/>
+    </group>
+</vector>
\ No newline at end of file
diff --git a/core/res/res/drawable-xhdpi/ic_corp_icon.png b/core/res/res/drawable-xhdpi/ic_corp_icon.png
deleted file mode 100644
index 3626c7d..0000000
--- a/core/res/res/drawable-xhdpi/ic_corp_icon.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_00_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_00_mtrl.png
new file mode 100644
index 0000000..0907a1e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_01_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_01_mtrl.png
new file mode 100644
index 0000000..365d96e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_02_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_02_mtrl.png
new file mode 100644
index 0000000..7191add
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_03_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_03_mtrl.png
new file mode 100644
index 0000000..fd8a5df
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_04_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_04_mtrl.png
new file mode 100644
index 0000000..9ae573b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_05_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_05_mtrl.png
new file mode 100644
index 0000000..a41d549
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_06_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_06_mtrl.png
new file mode 100644
index 0000000..4faef98
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_07_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_07_mtrl.png
new file mode 100644
index 0000000..337372c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_08_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_08_mtrl.png
new file mode 100644
index 0000000..a78de95
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_09_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_09_mtrl.png
new file mode 100644
index 0000000..74f8912
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_10_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_10_mtrl.png
new file mode 100644
index 0000000..0b868fb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_11_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_11_mtrl.png
new file mode 100644
index 0000000..8c381cc
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_12_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_12_mtrl.png
new file mode 100644
index 0000000..17e40a0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_13_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_13_mtrl.png
new file mode 100644
index 0000000..5280b2f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_14_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_14_mtrl.png
new file mode 100644
index 0000000..dfe29ce
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_15_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_15_mtrl.png
new file mode 100644
index 0000000..663d361
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_16_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_16_mtrl.png
new file mode 100644
index 0000000..5e2ecdf
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_17_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_17_mtrl.png
new file mode 100644
index 0000000..8d6c1f24
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_18_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_18_mtrl.png
new file mode 100644
index 0000000..4edd1ac
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_19_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_19_mtrl.png
new file mode 100644
index 0000000..af45ea7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_20_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_20_mtrl.png
new file mode 100644
index 0000000..f075756
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_21_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_21_mtrl.png
new file mode 100644
index 0000000..69bd877
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_22_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_22_mtrl.png
new file mode 100644
index 0000000..8c956bb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_23_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_23_mtrl.png
new file mode 100644
index 0000000..76bf9ab
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_24_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_24_mtrl.png
new file mode 100644
index 0000000..1a7f9a1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_25_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_25_mtrl.png
new file mode 100644
index 0000000..1275eaa
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_26_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_26_mtrl.png
new file mode 100644
index 0000000..c4ed71d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_27_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_27_mtrl.png
new file mode 100644
index 0000000..03252d7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_28_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_28_mtrl.png
new file mode 100644
index 0000000..ea8ee85
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_29_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_29_mtrl.png
new file mode 100644
index 0000000..b024c4e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_30_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_30_mtrl.png
new file mode 100644
index 0000000..35516f6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_dark_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_00_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_00_mtrl.png
new file mode 100644
index 0000000..dbd9854
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_01_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_01_mtrl.png
new file mode 100644
index 0000000..f0c30b1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_02_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_02_mtrl.png
new file mode 100644
index 0000000..f21743b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_03_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_03_mtrl.png
new file mode 100644
index 0000000..0b96ae0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_04_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_04_mtrl.png
new file mode 100644
index 0000000..2e5407f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_05_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_05_mtrl.png
new file mode 100644
index 0000000..0beb389
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_06_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_06_mtrl.png
new file mode 100644
index 0000000..a41586e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_07_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_07_mtrl.png
new file mode 100644
index 0000000..709f650
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_08_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_08_mtrl.png
new file mode 100644
index 0000000..494a716
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_09_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_09_mtrl.png
new file mode 100644
index 0000000..9ec48f4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_10_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_10_mtrl.png
new file mode 100644
index 0000000..f4c22b1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_11_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_11_mtrl.png
new file mode 100644
index 0000000..6fd600f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_12_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_12_mtrl.png
new file mode 100644
index 0000000..cfee3e1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_13_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_13_mtrl.png
new file mode 100644
index 0000000..cc79904
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_14_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_14_mtrl.png
new file mode 100644
index 0000000..28c7441
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_15_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_15_mtrl.png
new file mode 100644
index 0000000..6c7e534
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_16_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_16_mtrl.png
new file mode 100644
index 0000000..e7d20d7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_17_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_17_mtrl.png
new file mode 100644
index 0000000..ea492d2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_18_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_18_mtrl.png
new file mode 100644
index 0000000..92c6ad8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_19_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_19_mtrl.png
new file mode 100644
index 0000000..f666d89
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_20_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_20_mtrl.png
new file mode 100644
index 0000000..c2b600d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_21_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_21_mtrl.png
new file mode 100644
index 0000000..31736aa
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_22_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_22_mtrl.png
new file mode 100644
index 0000000..3032ef0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_23_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_23_mtrl.png
new file mode 100644
index 0000000..1d5cbc0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_24_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_24_mtrl.png
new file mode 100644
index 0000000..84ebcc3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_25_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_25_mtrl.png
new file mode 100644
index 0000000..505aadf
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_26_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_26_mtrl.png
new file mode 100644
index 0000000..3b8c662
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_27_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_27_mtrl.png
new file mode 100644
index 0000000..d650c07
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_28_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_28_mtrl.png
new file mode 100644
index 0000000..3caa40d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_29_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_29_mtrl.png
new file mode 100644
index 0000000..d3f8ea6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connected_light_30_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_30_mtrl.png
new file mode 100644
index 0000000..b54396c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connected_light_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_00_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_00_mtrl.png
new file mode 100644
index 0000000..0907a1e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_01_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_01_mtrl.png
new file mode 100644
index 0000000..365d96e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_02_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_02_mtrl.png
new file mode 100644
index 0000000..7191add
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_03_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_03_mtrl.png
new file mode 100644
index 0000000..fd8a5df
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_04_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_04_mtrl.png
new file mode 100644
index 0000000..9ae573b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_05_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_05_mtrl.png
new file mode 100644
index 0000000..a41d549
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_06_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_06_mtrl.png
new file mode 100644
index 0000000..4faef98
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_07_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_07_mtrl.png
new file mode 100644
index 0000000..337372c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_08_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_08_mtrl.png
new file mode 100644
index 0000000..a78de95
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_09_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_09_mtrl.png
new file mode 100644
index 0000000..74f8912
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_10_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_10_mtrl.png
new file mode 100644
index 0000000..0b868fb
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_11_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_11_mtrl.png
new file mode 100644
index 0000000..90ca46c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_12_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_12_mtrl.png
new file mode 100644
index 0000000..db02019
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_13_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_13_mtrl.png
new file mode 100644
index 0000000..ce5ee81
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_14_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_14_mtrl.png
new file mode 100644
index 0000000..3dcbef6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_15_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_15_mtrl.png
new file mode 100644
index 0000000..7646f18
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_16_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_16_mtrl.png
new file mode 100644
index 0000000..c16cac9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_17_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_17_mtrl.png
new file mode 100644
index 0000000..7dbc57c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_18_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_18_mtrl.png
new file mode 100644
index 0000000..39d17e0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_19_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_19_mtrl.png
new file mode 100644
index 0000000..ad0e121
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_20_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_20_mtrl.png
new file mode 100644
index 0000000..30ea5df
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_21_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_21_mtrl.png
new file mode 100644
index 0000000..151a222
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_22_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_22_mtrl.png
new file mode 100644
index 0000000..7d4e660
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_23_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_23_mtrl.png
new file mode 100644
index 0000000..8e26d54
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_24_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_24_mtrl.png
new file mode 100644
index 0000000..e85f239
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_25_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_25_mtrl.png
new file mode 100644
index 0000000..81f38ac
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_26_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_26_mtrl.png
new file mode 100644
index 0000000..5a50e6a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_27_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_27_mtrl.png
new file mode 100644
index 0000000..6069dad
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_28_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_28_mtrl.png
new file mode 100644
index 0000000..37cc4c6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_29_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_29_mtrl.png
new file mode 100644
index 0000000..aff0d4c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_30_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_30_mtrl.png
new file mode 100644
index 0000000..0907a1e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_dark_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_00_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_00_mtrl.png
new file mode 100644
index 0000000..dbd9854
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_01_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_01_mtrl.png
new file mode 100644
index 0000000..f0c30b1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_02_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_02_mtrl.png
new file mode 100644
index 0000000..f21743b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_03_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_03_mtrl.png
new file mode 100644
index 0000000..0b96ae0
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_04_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_04_mtrl.png
new file mode 100644
index 0000000..2e5407f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_05_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_05_mtrl.png
new file mode 100644
index 0000000..302fafa
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_06_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_06_mtrl.png
new file mode 100644
index 0000000..a41586e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_07_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_07_mtrl.png
new file mode 100644
index 0000000..709f650
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_08_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_08_mtrl.png
new file mode 100644
index 0000000..494a716
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_09_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_09_mtrl.png
new file mode 100644
index 0000000..9ec48f4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_10_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_10_mtrl.png
new file mode 100644
index 0000000..f4c22b1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_11_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_11_mtrl.png
new file mode 100644
index 0000000..7d72685
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_12_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_12_mtrl.png
new file mode 100644
index 0000000..4c545ef
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_13_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_13_mtrl.png
new file mode 100644
index 0000000..a8e9b00
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_14_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_14_mtrl.png
new file mode 100644
index 0000000..b67140d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_15_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_15_mtrl.png
new file mode 100644
index 0000000..166bdae
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_16_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_16_mtrl.png
new file mode 100644
index 0000000..1bda465
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_17_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_17_mtrl.png
new file mode 100644
index 0000000..cc8ec51
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_18_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_18_mtrl.png
new file mode 100644
index 0000000..cf2013c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_19_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_19_mtrl.png
new file mode 100644
index 0000000..daa1ca1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_20_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_20_mtrl.png
new file mode 100644
index 0000000..56355d9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_21_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_21_mtrl.png
new file mode 100644
index 0000000..42657ec
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_22_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_22_mtrl.png
new file mode 100644
index 0000000..53e4121
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_23_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_23_mtrl.png
new file mode 100644
index 0000000..f6e9ffa
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_24_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_24_mtrl.png
new file mode 100644
index 0000000..a313e16
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_25_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_25_mtrl.png
new file mode 100644
index 0000000..40034b6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_26_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_26_mtrl.png
new file mode 100644
index 0000000..678f972
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_27_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_27_mtrl.png
new file mode 100644
index 0000000..d2a3707
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_28_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_28_mtrl.png
new file mode 100644
index 0000000..427c52e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_29_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_29_mtrl.png
new file mode 100644
index 0000000..8a4d807
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_30_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_30_mtrl.png
new file mode 100644
index 0000000..dbd9854
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_connecting_light_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_disabled_mtrl_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_disabled_mtrl_dark.png
deleted file mode 100644
index c4dc132..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_disabled_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_disabled_mtrl_light.png b/core/res/res/drawable-xhdpi/ic_media_route_disabled_mtrl_light.png
deleted file mode 100644
index b14617c..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_disabled_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_off_dark_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_off_dark_mtrl.png
new file mode 100644
index 0000000..1d85b66
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_off_dark_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_off_light_mtrl.png b/core/res/res/drawable-xhdpi/ic_media_route_off_light_mtrl.png
new file mode 100644
index 0000000..231aec4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_off_light_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_off_mtrl_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_off_mtrl_alpha.png
deleted file mode 100644
index e75ffb8..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_off_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_off_mtrl_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_off_mtrl_dark.png
deleted file mode 100644
index bb30773..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_off_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_off_mtrl_light.png b/core/res/res/drawable-xhdpi/ic_media_route_off_mtrl_light.png
deleted file mode 100644
index a05d7d7..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_off_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_0_mtrl_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_on_0_mtrl_alpha.png
deleted file mode 100644
index 1b9fc12..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_0_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_0_mtrl_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_0_mtrl_dark.png
deleted file mode 100644
index 8690cf4..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_0_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_0_mtrl_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_0_mtrl_light.png
deleted file mode 100644
index 2cf94ce..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_0_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_1_mtrl_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_on_1_mtrl_alpha.png
deleted file mode 100644
index f63d47e..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_1_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_1_mtrl_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_1_mtrl_dark.png
deleted file mode 100644
index e3fd200..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_1_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_1_mtrl_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_1_mtrl_light.png
deleted file mode 100644
index 0af22be..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_1_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_2_mtrl_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_on_2_mtrl_alpha.png
deleted file mode 100644
index fe005d9..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_2_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_2_mtrl_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_2_mtrl_dark.png
deleted file mode 100644
index 6cb970c..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_2_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_2_mtrl_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_2_mtrl_light.png
deleted file mode 100644
index 9577e7b..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_2_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_mtrl_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_on_mtrl_alpha.png
deleted file mode 100644
index ea86408..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_mtrl_dark.png b/core/res/res/drawable-xhdpi/ic_media_route_on_mtrl_dark.png
deleted file mode 100644
index 8290b98..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_mtrl_light.png b/core/res/res/drawable-xhdpi/ic_media_route_on_mtrl_light.png
deleted file mode 100644
index abdecfb..0000000
--- a/core/res/res/drawable-xhdpi/ic_media_route_on_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_corp_icon.png b/core/res/res/drawable-xxhdpi/ic_corp_icon.png
deleted file mode 100644
index d33319f..0000000
--- a/core/res/res/drawable-xxhdpi/ic_corp_icon.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_00_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_00_mtrl.png
new file mode 100644
index 0000000..97949c6
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_01_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_01_mtrl.png
new file mode 100644
index 0000000..3f35bcd
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_02_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_02_mtrl.png
new file mode 100644
index 0000000..0ed2094
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_03_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_03_mtrl.png
new file mode 100644
index 0000000..7fa7f01
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_04_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_04_mtrl.png
new file mode 100644
index 0000000..b7e1ea1
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_05_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_05_mtrl.png
new file mode 100644
index 0000000..ff07932
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_06_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_06_mtrl.png
new file mode 100644
index 0000000..4a7b283
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_07_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_07_mtrl.png
new file mode 100644
index 0000000..41c4443
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_08_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_08_mtrl.png
new file mode 100644
index 0000000..461fa46
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_09_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_09_mtrl.png
new file mode 100644
index 0000000..f96d1f0
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_10_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_10_mtrl.png
new file mode 100644
index 0000000..87a9b49
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_11_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_11_mtrl.png
new file mode 100644
index 0000000..96b5366
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_12_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_12_mtrl.png
new file mode 100644
index 0000000..532a86d
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_13_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_13_mtrl.png
new file mode 100644
index 0000000..9f37eb2
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_14_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_14_mtrl.png
new file mode 100644
index 0000000..2437e0e
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_15_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_15_mtrl.png
new file mode 100644
index 0000000..79bc6ce
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_16_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_16_mtrl.png
new file mode 100644
index 0000000..9dbbe2f
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_17_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_17_mtrl.png
new file mode 100644
index 0000000..1da48b8
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_18_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_18_mtrl.png
new file mode 100644
index 0000000..8963582
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_19_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_19_mtrl.png
new file mode 100644
index 0000000..ec4be83
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_20_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_20_mtrl.png
new file mode 100644
index 0000000..4658fc3
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_21_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_21_mtrl.png
new file mode 100644
index 0000000..3ecd6bd
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_22_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_22_mtrl.png
new file mode 100644
index 0000000..565e8de
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_23_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_23_mtrl.png
new file mode 100644
index 0000000..9c5c607
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_24_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_24_mtrl.png
new file mode 100644
index 0000000..87b84a7
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_25_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_25_mtrl.png
new file mode 100644
index 0000000..9e12e5b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_26_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_26_mtrl.png
new file mode 100644
index 0000000..85e8791
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_27_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_27_mtrl.png
new file mode 100644
index 0000000..a7bd75d
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_28_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_28_mtrl.png
new file mode 100644
index 0000000..204f393
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_29_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_29_mtrl.png
new file mode 100644
index 0000000..78f787a
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_30_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_30_mtrl.png
new file mode 100644
index 0000000..a2e61c2
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_dark_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_00_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_00_mtrl.png
new file mode 100644
index 0000000..80d5155
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_01_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_01_mtrl.png
new file mode 100644
index 0000000..8ec05ae
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_02_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_02_mtrl.png
new file mode 100644
index 0000000..42cd13c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_03_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_03_mtrl.png
new file mode 100644
index 0000000..f43727f
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_04_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_04_mtrl.png
new file mode 100644
index 0000000..e61a05c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_05_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_05_mtrl.png
new file mode 100644
index 0000000..8dc5976
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_06_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_06_mtrl.png
new file mode 100644
index 0000000..ead968e
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_07_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_07_mtrl.png
new file mode 100644
index 0000000..52aa7d5
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_08_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_08_mtrl.png
new file mode 100644
index 0000000..58986d4
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_09_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_09_mtrl.png
new file mode 100644
index 0000000..42d6c7c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_10_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_10_mtrl.png
new file mode 100644
index 0000000..e7e0e60
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_11_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_11_mtrl.png
new file mode 100644
index 0000000..75bd261
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_12_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_12_mtrl.png
new file mode 100644
index 0000000..5207dac
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_13_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_13_mtrl.png
new file mode 100644
index 0000000..c2f69e7
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_14_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_14_mtrl.png
new file mode 100644
index 0000000..167f882
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_15_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_15_mtrl.png
new file mode 100644
index 0000000..d6a85f2
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_16_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_16_mtrl.png
new file mode 100644
index 0000000..cb0390d
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_17_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_17_mtrl.png
new file mode 100644
index 0000000..6a65d15
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_18_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_18_mtrl.png
new file mode 100644
index 0000000..8086a55
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_19_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_19_mtrl.png
new file mode 100644
index 0000000..eee4115
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_20_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_20_mtrl.png
new file mode 100644
index 0000000..d214ad1
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_21_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_21_mtrl.png
new file mode 100644
index 0000000..ac56ac4
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_22_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_22_mtrl.png
new file mode 100644
index 0000000..49af14e
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_23_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_23_mtrl.png
new file mode 100644
index 0000000..5003095b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_24_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_24_mtrl.png
new file mode 100644
index 0000000..62054a0
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_25_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_25_mtrl.png
new file mode 100644
index 0000000..4c83dd4
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_26_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_26_mtrl.png
new file mode 100644
index 0000000..a55f8e4
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_27_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_27_mtrl.png
new file mode 100644
index 0000000..81567b7
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_28_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_28_mtrl.png
new file mode 100644
index 0000000..4047475
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_29_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_29_mtrl.png
new file mode 100644
index 0000000..23db45a
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_30_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_30_mtrl.png
new file mode 100644
index 0000000..e7d9961
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connected_light_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_00_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_00_mtrl.png
new file mode 100644
index 0000000..97949c6
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_01_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_01_mtrl.png
new file mode 100644
index 0000000..3f35bcd
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_02_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_02_mtrl.png
new file mode 100644
index 0000000..0ed2094
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_03_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_03_mtrl.png
new file mode 100644
index 0000000..7fa7f01
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_04_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_04_mtrl.png
new file mode 100644
index 0000000..b7e1ea1
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_05_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_05_mtrl.png
new file mode 100644
index 0000000..ff07932
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_06_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_06_mtrl.png
new file mode 100644
index 0000000..4a7b283
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_07_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_07_mtrl.png
new file mode 100644
index 0000000..41c4443
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_08_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_08_mtrl.png
new file mode 100644
index 0000000..461fa46
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_09_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_09_mtrl.png
new file mode 100644
index 0000000..f96d1f0
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_10_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_10_mtrl.png
new file mode 100644
index 0000000..87a9b49
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_11_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_11_mtrl.png
new file mode 100644
index 0000000..685a340
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_12_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_12_mtrl.png
new file mode 100644
index 0000000..b49c30e
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_13_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_13_mtrl.png
new file mode 100644
index 0000000..aa92d9e
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_14_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_14_mtrl.png
new file mode 100644
index 0000000..73d487c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_15_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_15_mtrl.png
new file mode 100644
index 0000000..f427d0c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_16_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_16_mtrl.png
new file mode 100644
index 0000000..8fbaa08
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_17_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_17_mtrl.png
new file mode 100644
index 0000000..1f0fcd6
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_18_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_18_mtrl.png
new file mode 100644
index 0000000..80c905a
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_19_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_19_mtrl.png
new file mode 100644
index 0000000..9b27fa3
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_20_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_20_mtrl.png
new file mode 100644
index 0000000..24f2b75
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_21_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_21_mtrl.png
new file mode 100644
index 0000000..f499d0a
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_22_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_22_mtrl.png
new file mode 100644
index 0000000..e22ca9b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_23_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_23_mtrl.png
new file mode 100644
index 0000000..596ca8b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_24_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_24_mtrl.png
new file mode 100644
index 0000000..363a4d6
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_25_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_25_mtrl.png
new file mode 100644
index 0000000..10e275b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_26_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_26_mtrl.png
new file mode 100644
index 0000000..aa87c9e
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_27_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_27_mtrl.png
new file mode 100644
index 0000000..77a2b8f
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_28_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_28_mtrl.png
new file mode 100644
index 0000000..f6108d9
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_29_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_29_mtrl.png
new file mode 100644
index 0000000..e3a6a20
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_30_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_30_mtrl.png
new file mode 100644
index 0000000..fa6dc9a
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_dark_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_00_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_00_mtrl.png
new file mode 100644
index 0000000..80d5155
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_01_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_01_mtrl.png
new file mode 100644
index 0000000..8ec05ae
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_02_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_02_mtrl.png
new file mode 100644
index 0000000..42cd13c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_03_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_03_mtrl.png
new file mode 100644
index 0000000..f43727f
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_04_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_04_mtrl.png
new file mode 100644
index 0000000..849638b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_05_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_05_mtrl.png
new file mode 100644
index 0000000..06e21b0
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_06_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_06_mtrl.png
new file mode 100644
index 0000000..ead968e
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_07_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_07_mtrl.png
new file mode 100644
index 0000000..52aa7d5
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_08_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_08_mtrl.png
new file mode 100644
index 0000000..58986d4
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_09_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_09_mtrl.png
new file mode 100644
index 0000000..42d6c7c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_10_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_10_mtrl.png
new file mode 100644
index 0000000..e7e0e60
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_11_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_11_mtrl.png
new file mode 100644
index 0000000..933be30
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_12_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_12_mtrl.png
new file mode 100644
index 0000000..b39230f
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_13_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_13_mtrl.png
new file mode 100644
index 0000000..01492c4
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_14_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_14_mtrl.png
new file mode 100644
index 0000000..b56aa16
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_15_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_15_mtrl.png
new file mode 100644
index 0000000..bdd3d2c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_16_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_16_mtrl.png
new file mode 100644
index 0000000..b76d5d7
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_17_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_17_mtrl.png
new file mode 100644
index 0000000..5fb12e7
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_18_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_18_mtrl.png
new file mode 100644
index 0000000..64fe3c5
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_19_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_19_mtrl.png
new file mode 100644
index 0000000..68fd051
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_20_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_20_mtrl.png
new file mode 100644
index 0000000..a4fd4cc
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_21_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_21_mtrl.png
new file mode 100644
index 0000000..40b02f0
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_22_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_22_mtrl.png
new file mode 100644
index 0000000..fcd6ddb
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_23_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_23_mtrl.png
new file mode 100644
index 0000000..cb250dd
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_24_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_24_mtrl.png
new file mode 100644
index 0000000..43d2119
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_25_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_25_mtrl.png
new file mode 100644
index 0000000..bdcaf69
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_26_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_26_mtrl.png
new file mode 100644
index 0000000..3d2bff4
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_27_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_27_mtrl.png
new file mode 100644
index 0000000..290e7d9
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_28_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_28_mtrl.png
new file mode 100644
index 0000000..6c670fb
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_29_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_29_mtrl.png
new file mode 100644
index 0000000..e93c824
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_30_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_30_mtrl.png
new file mode 100644
index 0000000..80d5155
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_connecting_light_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_disabled_mtrl_dark.png b/core/res/res/drawable-xxhdpi/ic_media_route_disabled_mtrl_dark.png
deleted file mode 100644
index fdb2121..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_disabled_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_disabled_mtrl_light.png b/core/res/res/drawable-xxhdpi/ic_media_route_disabled_mtrl_light.png
deleted file mode 100644
index 9ce7e3a..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_disabled_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_off_dark_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_off_dark_mtrl.png
new file mode 100644
index 0000000..9acbd29
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_off_dark_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_off_light_mtrl.png b/core/res/res/drawable-xxhdpi/ic_media_route_off_light_mtrl.png
new file mode 100644
index 0000000..5d4273d
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_off_light_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_off_mtrl_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_off_mtrl_alpha.png
deleted file mode 100644
index 44d98d5..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_off_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_off_mtrl_dark.png b/core/res/res/drawable-xxhdpi/ic_media_route_off_mtrl_dark.png
deleted file mode 100644
index e8601ce..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_off_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_off_mtrl_light.png b/core/res/res/drawable-xxhdpi/ic_media_route_off_mtrl_light.png
deleted file mode 100644
index 34928d7..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_off_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_0_mtrl_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_0_mtrl_alpha.png
deleted file mode 100644
index c807b50..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_0_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_0_mtrl_dark.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_0_mtrl_dark.png
deleted file mode 100644
index 23d8ba8..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_0_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_0_mtrl_light.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_0_mtrl_light.png
deleted file mode 100644
index ef5039c..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_0_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_1_mtrl_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_1_mtrl_alpha.png
deleted file mode 100644
index d54f44a..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_1_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_1_mtrl_dark.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_1_mtrl_dark.png
deleted file mode 100644
index 4c0f0e0..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_1_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_1_mtrl_light.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_1_mtrl_light.png
deleted file mode 100644
index 8cd82da..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_1_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_2_mtrl_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_2_mtrl_alpha.png
deleted file mode 100644
index 17c1d99..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_2_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_2_mtrl_dark.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_2_mtrl_dark.png
deleted file mode 100644
index ecfe346..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_2_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_2_mtrl_light.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_2_mtrl_light.png
deleted file mode 100644
index d25288d..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_2_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_mtrl_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_mtrl_alpha.png
deleted file mode 100644
index 906401e..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_mtrl_alpha.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_mtrl_dark.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_mtrl_dark.png
deleted file mode 100644
index 8e47095..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_mtrl_dark.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_mtrl_light.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_mtrl_light.png
deleted file mode 100644
index 4b64a48..0000000
--- a/core/res/res/drawable-xxhdpi/ic_media_route_on_mtrl_light.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_corp_icon.png b/core/res/res/drawable-xxxhdpi/ic_corp_icon.png
deleted file mode 100644
index 359e210..0000000
--- a/core/res/res/drawable-xxxhdpi/ic_corp_icon.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_00_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_00_mtrl.png
new file mode 100644
index 0000000..5561c62
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_01_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_01_mtrl.png
new file mode 100644
index 0000000..9eff17e
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_02_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_02_mtrl.png
new file mode 100644
index 0000000..67923e2
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_03_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_03_mtrl.png
new file mode 100644
index 0000000..1aa0e98
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_04_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_04_mtrl.png
new file mode 100644
index 0000000..7cd549d
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_05_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_05_mtrl.png
new file mode 100644
index 0000000..2c14d79
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_06_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_06_mtrl.png
new file mode 100644
index 0000000..9f061a5
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_07_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_07_mtrl.png
new file mode 100644
index 0000000..fe15230
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_08_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_08_mtrl.png
new file mode 100644
index 0000000..220a4fe
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_09_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_09_mtrl.png
new file mode 100644
index 0000000..77aac4c
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_10_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_10_mtrl.png
new file mode 100644
index 0000000..bf69188
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_11_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_11_mtrl.png
new file mode 100644
index 0000000..22197da
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_12_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_12_mtrl.png
new file mode 100644
index 0000000..380e929
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_13_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_13_mtrl.png
new file mode 100644
index 0000000..d93a600
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_14_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_14_mtrl.png
new file mode 100644
index 0000000..3709d5f
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_15_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_15_mtrl.png
new file mode 100644
index 0000000..2a5019b
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_16_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_16_mtrl.png
new file mode 100644
index 0000000..f75a072
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_17_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_17_mtrl.png
new file mode 100644
index 0000000..c8dcd0d
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_18_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_18_mtrl.png
new file mode 100644
index 0000000..172775e
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_19_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_19_mtrl.png
new file mode 100644
index 0000000..2f081fd
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_20_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_20_mtrl.png
new file mode 100644
index 0000000..cb4c55b
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_21_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_21_mtrl.png
new file mode 100644
index 0000000..de155f6
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_22_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_22_mtrl.png
new file mode 100644
index 0000000..2cc028d
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_23_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_23_mtrl.png
new file mode 100644
index 0000000..e848d08
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_24_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_24_mtrl.png
new file mode 100644
index 0000000..584c2f8
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_25_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_25_mtrl.png
new file mode 100644
index 0000000..c9299be
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_26_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_26_mtrl.png
new file mode 100644
index 0000000..8abcbd6
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_27_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_27_mtrl.png
new file mode 100644
index 0000000..ee53e47
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_28_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_28_mtrl.png
new file mode 100644
index 0000000..b10d23a
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_29_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_29_mtrl.png
new file mode 100644
index 0000000..65a2363
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_30_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_30_mtrl.png
new file mode 100644
index 0000000..2b73472
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_dark_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_00_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_00_mtrl.png
new file mode 100644
index 0000000..6a656b8
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_01_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_01_mtrl.png
new file mode 100644
index 0000000..7d3a3b6
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_02_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_02_mtrl.png
new file mode 100644
index 0000000..6b22554
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_03_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_03_mtrl.png
new file mode 100644
index 0000000..0a9245c
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_04_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_04_mtrl.png
new file mode 100644
index 0000000..f9a7f6c
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_05_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_05_mtrl.png
new file mode 100644
index 0000000..ac396ed
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_06_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_06_mtrl.png
new file mode 100644
index 0000000..8c15241d
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_07_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_07_mtrl.png
new file mode 100644
index 0000000..e6a75e2
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_08_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_08_mtrl.png
new file mode 100644
index 0000000..90280a9
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_09_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_09_mtrl.png
new file mode 100644
index 0000000..d9a4632
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_10_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_10_mtrl.png
new file mode 100644
index 0000000..b1ae68b
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_11_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_11_mtrl.png
new file mode 100644
index 0000000..e5cba8f
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_12_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_12_mtrl.png
new file mode 100644
index 0000000..611faeb
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_13_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_13_mtrl.png
new file mode 100644
index 0000000..dfada4d
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_14_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_14_mtrl.png
new file mode 100644
index 0000000..6118202
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_15_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_15_mtrl.png
new file mode 100644
index 0000000..60d5199
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_16_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_16_mtrl.png
new file mode 100644
index 0000000..ee0b672
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_17_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_17_mtrl.png
new file mode 100644
index 0000000..5a97f67
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_18_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_18_mtrl.png
new file mode 100644
index 0000000..9237a7d
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_19_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_19_mtrl.png
new file mode 100644
index 0000000..4d4c663
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_20_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_20_mtrl.png
new file mode 100644
index 0000000..141f9f6
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_21_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_21_mtrl.png
new file mode 100644
index 0000000..2baa531
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_22_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_22_mtrl.png
new file mode 100644
index 0000000..7a911d5
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_23_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_23_mtrl.png
new file mode 100644
index 0000000..a760b85
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_24_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_24_mtrl.png
new file mode 100644
index 0000000..5c15a87
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_25_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_25_mtrl.png
new file mode 100644
index 0000000..36a9f1f
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_26_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_26_mtrl.png
new file mode 100644
index 0000000..03e8c9f
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_27_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_27_mtrl.png
new file mode 100644
index 0000000..533c694
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_28_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_28_mtrl.png
new file mode 100644
index 0000000..ead60f5
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_29_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_29_mtrl.png
new file mode 100644
index 0000000..0a8534f
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_30_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_30_mtrl.png
new file mode 100644
index 0000000..fa69ad0
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connected_light_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_00_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_00_mtrl.png
new file mode 100644
index 0000000..5561c62
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_01_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_01_mtrl.png
new file mode 100644
index 0000000..9eff17e
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_02_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_02_mtrl.png
new file mode 100644
index 0000000..67923e2
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_03_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_03_mtrl.png
new file mode 100644
index 0000000..1aa0e98
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_04_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_04_mtrl.png
new file mode 100644
index 0000000..7cd549d
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_05_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_05_mtrl.png
new file mode 100644
index 0000000..2c14d79
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_06_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_06_mtrl.png
new file mode 100644
index 0000000..9f061a5
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_07_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_07_mtrl.png
new file mode 100644
index 0000000..fe15230
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_08_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_08_mtrl.png
new file mode 100644
index 0000000..220a4fe
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_09_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_09_mtrl.png
new file mode 100644
index 0000000..77aac4c
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_10_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_10_mtrl.png
new file mode 100644
index 0000000..bf69188
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_11_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_11_mtrl.png
new file mode 100644
index 0000000..98b0448
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_12_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_12_mtrl.png
new file mode 100644
index 0000000..a926419
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_13_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_13_mtrl.png
new file mode 100644
index 0000000..53f6e3e
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_14_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_14_mtrl.png
new file mode 100644
index 0000000..4a2d1b1
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_15_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_15_mtrl.png
new file mode 100644
index 0000000..22cce05
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_16_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_16_mtrl.png
new file mode 100644
index 0000000..d40db21
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_17_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_17_mtrl.png
new file mode 100644
index 0000000..0a95b7e
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_18_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_18_mtrl.png
new file mode 100644
index 0000000..08698bd
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_19_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_19_mtrl.png
new file mode 100644
index 0000000..698d23a
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_20_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_20_mtrl.png
new file mode 100644
index 0000000..36ed854
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_21_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_21_mtrl.png
new file mode 100644
index 0000000..2c0d925
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_22_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_22_mtrl.png
new file mode 100644
index 0000000..747b901
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_23_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_23_mtrl.png
new file mode 100644
index 0000000..bae8665
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_24_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_24_mtrl.png
new file mode 100644
index 0000000..fd7b1a8
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_25_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_25_mtrl.png
new file mode 100644
index 0000000..03f624e
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_26_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_26_mtrl.png
new file mode 100644
index 0000000..d2a06ed
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_27_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_27_mtrl.png
new file mode 100644
index 0000000..c5b2a16
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_28_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_28_mtrl.png
new file mode 100644
index 0000000..8b045cb
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_29_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_29_mtrl.png
new file mode 100644
index 0000000..522ec67
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_30_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_30_mtrl.png
new file mode 100644
index 0000000..5561c62
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_dark_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_00_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_00_mtrl.png
new file mode 100644
index 0000000..6a656b8
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_00_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_01_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_01_mtrl.png
new file mode 100644
index 0000000..7d3a3b6
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_01_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_02_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_02_mtrl.png
new file mode 100644
index 0000000..6b22554
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_02_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_03_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_03_mtrl.png
new file mode 100644
index 0000000..0a9245c
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_03_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_04_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_04_mtrl.png
new file mode 100644
index 0000000..f9a7f6c
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_04_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_05_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_05_mtrl.png
new file mode 100644
index 0000000..ac396ed
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_05_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_06_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_06_mtrl.png
new file mode 100644
index 0000000..8c15241d
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_06_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_07_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_07_mtrl.png
new file mode 100644
index 0000000..e6a75e2
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_07_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_08_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_08_mtrl.png
new file mode 100644
index 0000000..90280a9
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_08_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_09_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_09_mtrl.png
new file mode 100644
index 0000000..d9a4632
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_09_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_10_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_10_mtrl.png
new file mode 100644
index 0000000..b1ae68b
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_10_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_11_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_11_mtrl.png
new file mode 100644
index 0000000..e3ce3fd
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_11_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_12_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_12_mtrl.png
new file mode 100644
index 0000000..42482a4
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_12_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_13_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_13_mtrl.png
new file mode 100644
index 0000000..ff30f98
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_13_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_14_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_14_mtrl.png
new file mode 100644
index 0000000..0ddcb55
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_14_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_15_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_15_mtrl.png
new file mode 100644
index 0000000..46ec435
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_15_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_16_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_16_mtrl.png
new file mode 100644
index 0000000..d95fd77
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_16_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_17_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_17_mtrl.png
new file mode 100644
index 0000000..f116a1f
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_17_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_18_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_18_mtrl.png
new file mode 100644
index 0000000..957db7f
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_18_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_19_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_19_mtrl.png
new file mode 100644
index 0000000..624ec47
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_19_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_20_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_20_mtrl.png
new file mode 100644
index 0000000..362fba4
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_20_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_21_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_21_mtrl.png
new file mode 100644
index 0000000..24032b9
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_21_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_22_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_22_mtrl.png
new file mode 100644
index 0000000..6e4c83c
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_22_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_23_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_23_mtrl.png
new file mode 100644
index 0000000..1d2a09e
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_23_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_24_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_24_mtrl.png
new file mode 100644
index 0000000..7b05dfa
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_24_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_25_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_25_mtrl.png
new file mode 100644
index 0000000..30de74a1
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_25_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_26_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_26_mtrl.png
new file mode 100644
index 0000000..b08b782
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_26_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_27_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_27_mtrl.png
new file mode 100644
index 0000000..e52a1aa
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_27_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_28_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_28_mtrl.png
new file mode 100644
index 0000000..2c311f5
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_28_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_29_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_29_mtrl.png
new file mode 100644
index 0000000..efdf5fc
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_29_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_30_mtrl.png b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_30_mtrl.png
new file mode 100644
index 0000000..6a656b8
--- /dev/null
+++ b/core/res/res/drawable-xxxhdpi/ic_media_route_connecting_light_30_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable/ic_close.xml b/core/res/res/drawable/ic_close.xml
index 7086959..70565f2 100644
--- a/core/res/res/drawable/ic_close.xml
+++ b/core/res/res/drawable/ic_close.xml
@@ -19,6 +19,6 @@
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
     <path
-        android:pathData="M19.000000,6.400000l-1.400000,-1.400000 -5.600000,5.600000 -5.600000,-5.600000 -1.400000,1.400000 5.600000,5.600000 -5.600000,5.600000 1.400000,1.400000 5.600000,-5.600000 5.600000,5.600000 1.400000,-1.400000 -5.600000,-5.600000z"
+        android:pathData="M18.3,5.71a0.996,0.996 0,0 0,-1.41 0L12,10.59 7.11,5.7A0.996,0.996 0,1 0,5.7 7.11L10.59,12 5.7,16.89a0.996,0.996 0,1 0,1.41 1.41L12,13.41l4.89,4.89a0.996,0.996 0,1 0,1.41 -1.41L13.41,12l4.89,-4.89c0.38,-0.38 0.38,-1.02 0,-1.4z"
         android:fillColor="#FF000000"/>
 </vector>
diff --git a/core/res/res/drawable/ic_corp_badge.xml b/core/res/res/drawable/ic_corp_badge.xml
new file mode 100644
index 0000000..78cce58
--- /dev/null
+++ b/core/res/res/drawable/ic_corp_badge.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="20dp"
+        android:height="20dp"
+        android:viewportWidth="20.0"
+        android:viewportHeight="20.0">
+    <path
+        android:pathData="M10,10m-10,0a10,10 0,1 1,20 0a10,10 0,1 1,-20 0"
+        android:fillColor="#FF6D00"/>
+    <path
+        android:pathData="M14.67,6.5h-2.33V5.33c0,-0.65 -0.52,-1.17 -1.17,-1.17H8.83c-0.65,0 -1.17,0.52 -1.17,1.17V6.5H5.33c-0.65,0 -1.16,0.52 -1.16,1.17l-0.01,6.42c0,0.65 0.52,1.17 1.17,1.17h9.33c0.65,0 1.17,-0.52 1.17,-1.17V7.67C15.83,7.02 15.31,6.5 14.67,6.5zM10,11.75c-0.64,0 -1.17,-0.52 -1.17,-1.17c0,-0.64 0.52,-1.17 1.17,-1.17c0.64,0 1.17,0.52 1.17,1.17C11.17,11.22 10.64,11.75 10,11.75zM11.17,6.5H8.83V5.33h2.33V6.5z"
+        android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/core/res/res/drawable/ic_corp_badge_case.xml b/core/res/res/drawable/ic_corp_badge_case.xml
index 0b6028c..2d11ee6 100644
--- a/core/res/res/drawable/ic_corp_badge_case.xml
+++ b/core/res/res/drawable/ic_corp_badge_case.xml
@@ -1,30 +1,9 @@
-<!--
-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.
--->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="20.0dp"
-        android:height="20.0dp"
+        android:width="20dp"
+        android:height="20dp"
         android:viewportWidth="20.0"
         android:viewportHeight="20.0">
     <path
-        android:pathData="M15.2,6.2L4.8,6.2c-0.5,0.0 -0.9,0.4 -0.9,1.0L3.9,10.0c0.0,0.5 0.4,1.0 0.9,1.0l3.8,0.0l0.0,-1.0l2.9,0.0l0.0,1.0l3.8,0.0c0.5,0.0 1.0,-0.4 1.0,-1.0L16.3,7.1C16.2,6.6 15.8,6.2 15.2,6.2z"
-        android:fillColor="#FFFFFF"/>
-    <path
-        android:pathData="M8.6,12.9l0.0,-1.0L4.3,11.9l0.0,2.4c0.0,0.5 0.4,0.9 0.9,0.9l9.5,0.0c0.5,0.0 0.9,-0.4 0.9,-0.9l0.0,-2.4l-4.3,0.0l0.0,1.0L8.6,12.9z"
-        android:fillColor="#FFFFFF"/>
-    <path
-        android:pathData="M7.1,5.2l0.0,1.0 1.0,0.0 0.0,-1.0 3.799999,0.0 0.0,1.0 1.0,0.0 0.0,-1.0 -1.0,-0.9 -3.799999,0.0z"
+        android:pathData="M14.67,6.5h-2.33V5.33c0,-0.65 -0.52,-1.17 -1.17,-1.17H8.83c-0.65,0 -1.17,0.52 -1.17,1.17V6.5H5.33c-0.65,0 -1.16,0.52 -1.16,1.17l-0.01,6.42c0,0.65 0.52,1.17 1.17,1.17h9.33c0.65,0 1.17,-0.52 1.17,-1.17V7.67C15.83,7.02 15.31,6.5 14.67,6.5zM10,11.75c-0.64,0 -1.17,-0.52 -1.17,-1.17c0,-0.64 0.52,-1.17 1.17,-1.17c0.64,0 1.17,0.52 1.17,1.17C11.17,11.22 10.64,11.75 10,11.75zM11.17,6.5H8.83V5.33h2.33V6.5z"
         android:fillColor="#FFFFFF"/>
 </vector>
diff --git a/core/res/res/drawable/ic_corp_badge_no_background.xml b/core/res/res/drawable/ic_corp_badge_no_background.xml
index 78322a9..8f7fb70 100644
--- a/core/res/res/drawable/ic_corp_badge_no_background.xml
+++ b/core/res/res/drawable/ic_corp_badge_no_background.xml
@@ -1,30 +1,9 @@
-<!--
-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.
--->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24.0dp"
-    android:height="24.0dp"
-    android:viewportWidth="24.0"
-    android:viewportHeight="24.0">
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
     <path
-        android:pathData="M20.801,5.981L17.13,5.98l0.001,-1.471l-2.053,-2.055L8.969,2.453L6.915,4.506L6.914,5.977L3.203,5.976c-1.216,0.0 -2.189,0.983 -2.189,2.199L1.0,12.406c0.0,1.216 0.983,2.2 2.199,2.2L10.0,14.608l0.0,-1.644l0.291,0.0l3.351,0.0l0.291,0.0l0.0,1.645l6.863,0.002c1.216,0.0 2.2,-0.983 2.2,-2.199L23.0,8.181C23.0,6.965 22.017,5.981 20.801,5.981zM15.076,5.979L8.968,5.978l0.001,-1.471l6.108,0.001L15.076,5.979z"
+        android:pathData="M20,6h-4V4c0,-1.11 -0.89,-2 -2,-2h-4C8.89,2 8,2.89 8,4v2H4C2.89,6 2.01,6.89 2.01,8L2,19c0,1.11 0.89,2 2,2h16c1.11,0 2,-0.89 2,-2V8C22,6.89 21.11,6 20,6zM12,15c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2s2,0.9 2,2S13.1,15 12,15zM14,6h-4V4h4V6z"
         android:fillColor="#FFFFFF"/>
-    <path
-        android:pathData="M13.911,16.646L9.978,16.646L9.978,15.48L1.673,15.48l0.0,4.105c0.0,1.216 0.959,2.2 2.175,2.2l16.13,0.004c1.216,0.0 2.203,-0.983 2.203,-2.199l0.0,-4.11l-8.27,0.0L13.910999,16.646z"
-        android:fillColor="#FFFFFF"/>
-    <path
-        android:pathData="M23.657,6.55 h4.72 v1.137 h-4.72z"
-        android:fillColor="#00000000"/>
 </vector>
diff --git a/core/res/res/drawable/ic_corp_badge_off.xml b/core/res/res/drawable/ic_corp_badge_off.xml
index 6799bf7..4774f31 100644
--- a/core/res/res/drawable/ic_corp_badge_off.xml
+++ b/core/res/res/drawable/ic_corp_badge_off.xml
@@ -1,56 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Copyright (C) 2015 The Android Open Source Project
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="20dp"
-    android:height="20dp"
-    android:viewportWidth="20"
-    android:viewportHeight="20">
-
+        android:width="20dp"
+        android:height="20dp"
+        android:viewportWidth="20.0"
+        android:viewportHeight="20.0">
     <path
-        android:fillColor="#607D8B"
-        android:pathData="M10,0 C15.5228,0,20,4.47715,20,10 C20,15.5228,15.5228,20,10,20
-C4.47715,20,0,15.5228,0,10 C0,4.47715,4.47715,0,10,0 Z" />
+        android:pathData="M10,10m-10,0a10,10 0,1 1,20 0a10,10 0,1 1,-20 0"
+        android:fillColor="#607D8B"/>
     <path
-        android:pathData="M1.91667,1.91667 L18.0833,1.91667 L18.0833,18.0833 L1.91667,18.0833
-L1.91667,1.91667 Z" />
-    <path
-        android:fillColor="#ffffff"
-        android:pathData="M11.9167,11.9167 L11.4167,11.9167 L11.4167,12.8333 L8.5,12.8333 L8.5,11.9167
-L4.16667,11.9167 L4.16667,14.3333 C4.16667,14.8333,4.58333,15.25,5.08333,15.25
-L14.75,15.25 C14.9167,15.25,15,15.25,15.1667,15.1667 L11.9167,11.9167 Z" />
-    <path
-        android:fillColor="#ffffff"
-        android:pathData="M15.8333,13.75 L15.8333,11.9167 L14,11.9167
-C14.6667,12.6667,15.3333,13.3333,15.8333,13.75 Z" />
-    <path
-        android:fillColor="#ffffff"
-        android:pathData="M6.16667,6.16667 L4.66667,6.16667 C4.16667,6.16667,3.75,6.58333,3.75,7.08333
-L3.75,10 C3.75,10.5,4.16667,10.9167,4.66667,10.9167 L8.5,10.9167 L8.5,10 L10,10
-L6.16667,6.16667 Z" />
-    <path
-        android:fillColor="#ffffff"
-        android:pathData="M8.08333,6 L8.08333,5.16667 L11.9167,5.16667 L11.9167,6.08333 L8.16667,6.08333
-C9.66667,7.58333,11.4167,9.33333,12.9167,10.8333 L15.25,10.8333
-C15.75,10.8333,16.1667,10.4167,16.1667,9.91667 L16.1667,7.08333
-C16.1667,6.58333,15.75,6.16667,15.25,6.16667 L12.8333,6.16667 L12.8333,5.25
-L11.9167,4.33333 L8.08333,4.33333 L7.16667,5.16667
-C7.41667,5.41667,7.75,5.75,8.08333,6 Z" />
-    <path
-        android:fillColor="#ffffff"
-        android:pathData="M15.6824,15.676 L14.6807,16.6777 L3.24921,5.24624 L4.25093,4.24452
-L15.6824,15.676 Z" />
-</vector>
\ No newline at end of file
+        android:pathData="M16.42,15.68l-0.85,-0.85L7.21,6.47L4.9,4.16L4.16,4.9l1.57,1.57H5.36c-0.65,0 -1.16,0.52 -1.16,1.17L4.2,14.05c0,0.65 0.52,1.17 1.17,1.17h9.12l1.2,1.2L16.42,15.68zM15.83,7.64c0.03,-0.65 -0.49,-1.17 -1.14,-1.14h-2.33V5.3c0,-0.65 -0.52,-1.17 -1.17,-1.14H8.86C8.22,4.14 7.7,4.66 7.7,5.3v0.19l8.14,8.17V7.64zM11.2,6.5H8.83V5.3h2.36V6.5z"
+        android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/core/res/res/drawable/ic_corp_icon.xml b/core/res/res/drawable/ic_corp_icon.xml
new file mode 100644
index 0000000..48531dd
--- /dev/null
+++ b/core/res/res/drawable/ic_corp_icon.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="48dp"
+        android:height="48dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M20,6h-4L16,4c0,-1.11 -0.89,-2 -2,-2h-4c-1.11,0 -2,0.89 -2,2v2L4,6c-1.11,0 -1.99,0.89 -1.99,2L2,19c0,1.11 0.89,2 2,2h16c1.11,0 2,-0.89 2,-2L22,8c0,-1.11 -0.89,-2 -2,-2zM12,15c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM14,6h-4L10,4h4v2z"
+        android:fillColor="#000000"/>
+</vector>
\ No newline at end of file
diff --git a/core/res/res/drawable/ic_corp_icon_badge_case.xml b/core/res/res/drawable/ic_corp_icon_badge_case.xml
index d62eda4..dd653c6 100644
--- a/core/res/res/drawable/ic_corp_icon_badge_case.xml
+++ b/core/res/res/drawable/ic_corp_icon_badge_case.xml
@@ -1,30 +1,9 @@
-<!--
-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.
--->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="64.0dp"
-        android:height="64.0dp"
+        android:width="64dp"
+        android:height="64dp"
         android:viewportWidth="64.0"
         android:viewportHeight="64.0">
     <path
-        android:pathData="M56.4,43.5L41.8,43.5c-0.7,0.0 -1.3,0.6 -1.3,1.3l0.0,4.0c0.0,0.7 0.6,1.3 1.3,1.3L47.0,50.1l0.0,-1.3l4.0,0.0l0.0,1.4l5.4,0.0c0.7,0.0 1.3,-0.6 1.3,-1.3l0.0,-4.0C57.6,44.1 57.0,43.5 56.4,43.5z"
-        android:fillColor="#FFFFFF"/>
-    <path
-        android:pathData="M47.1,52.8l0.0,-1.3l-6.0,0.0l0.0,3.3c0.0,0.7 0.6,1.3 1.3,1.3l13.2,0.0c0.7,0.0 1.3,-0.6 1.3,-1.3l0.0,-3.3l-6.0,0.0l0.0,1.3L47.1,52.8z"
-        android:fillColor="#FFFFFF"/>
-    <path
-        android:pathData="M45.1,42.2l0.0,1.299999 1.300003,0.0 0.0,-1.299999 5.299999,0.0 0.0,1.299999 1.399998,0.0 0.0,-1.299999 -1.399998,-1.299999 -5.299999,0.0z"
+        android:pathData="M55.67,44h-3.33v-1.67c0,-0.92 -0.74,-1.67 -1.67,-1.67h-3.33c-0.92,0 -1.67,0.74 -1.67,1.67V44h-3.33c-0.92,0 -1.66,0.74 -1.66,1.67l-0.01,9.17c0,0.93 0.74,1.67 1.67,1.67h13.33c0.92,0 1.67,-0.74 1.67,-1.67v-9.17C57.33,44.74 56.59,44 55.67,44zM49,51.5c-0.92,0 -1.67,-0.75 -1.67,-1.67c0,-0.92 0.75,-1.67 1.67,-1.67s1.67,0.75 1.67,1.67C50.67,50.75 49.92,51.5 49,51.5zM50.67,44h-3.33v-1.67h3.33V44z"
         android:fillColor="#FFFFFF"/>
 </vector>
diff --git a/core/res/res/drawable/ic_corp_statusbar_icon.xml b/core/res/res/drawable/ic_corp_statusbar_icon.xml
index e742c0b..8f7fb70 100644
--- a/core/res/res/drawable/ic_corp_statusbar_icon.xml
+++ b/core/res/res/drawable/ic_corp_statusbar_icon.xml
@@ -1,30 +1,9 @@
-<!--
-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.
--->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24.0dp"
-        android:height="24.0dp"
+        android:width="24dp"
+        android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
     <path
-        android:pathData="M20.801,5.981L17.13,5.98l0.001,-1.471l-2.053,-2.055L8.969,2.453L6.915,4.506L6.914,5.977L3.203,5.976c-1.216,0.0 -2.189,0.983 -2.189,2.199L1.0,12.406c0.0,1.216 0.983,2.2 2.199,2.2L10.0,14.608l0.0,-1.644l0.291,0.0l3.351,0.0l0.291,0.0l0.0,1.645l6.863,0.002c1.216,0.0 2.2,-0.983 2.2,-2.199L23.0,8.181C23.0,6.965 22.017,5.981 20.801,5.981zM15.076,5.979L8.968,5.978l0.001,-1.471l6.108,0.001L15.076,5.979z"
+        android:pathData="M20,6h-4V4c0,-1.11 -0.89,-2 -2,-2h-4C8.89,2 8,2.89 8,4v2H4C2.89,6 2.01,6.89 2.01,8L2,19c0,1.11 0.89,2 2,2h16c1.11,0 2,-0.89 2,-2V8C22,6.89 21.11,6 20,6zM12,15c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2s2,0.9 2,2S13.1,15 12,15zM14,6h-4V4h4V6z"
         android:fillColor="#FFFFFF"/>
-    <path
-        android:pathData="M13.911,16.646L9.978,16.646L9.978,15.48L1.673,15.48l0.0,4.105c0.0,1.216 0.959,2.2 2.175,2.2l16.13,0.004c1.216,0.0 2.203,-0.983 2.203,-2.199l0.0,-4.11l-8.27,0.0L13.910999,16.646z"
-        android:fillColor="#FFFFFF"/>
-    <path
-        android:pathData="M23.657,6.55 h4.72 v1.137 h-4.72z"
-        android:fillColor="#00000000"/>
 </vector>
diff --git a/core/res/res/drawable/ic_corp_user_badge.xml b/core/res/res/drawable/ic_corp_user_badge.xml
index 23809d5..6a0d902 100644
--- a/core/res/res/drawable/ic_corp_user_badge.xml
+++ b/core/res/res/drawable/ic_corp_user_badge.xml
@@ -1,24 +1,15 @@
-<!--
-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.
--->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="36dp"
         android:height="36dp"
         android:viewportWidth="36.0"
         android:viewportHeight="36.0">
     <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M18,0C8.06,-0 0,8.06 0,18C0,27.94 8.06,36 18,36C27.94,36 36,27.94 36,18C36,8.06 27.94,0 18,0zM15.5,10.5L20.5,10.5L21.75,11.75L21.75,13L24.66,13C25.57,13 26.34,13.74 26.34,14.66L26.34,18C26.34,18.92 25.57,19.66 24.66,19.66L19.66,19.66L19.66,18.41L16.34,18.41L16.34,19.66L11.34,19.66C10.43,19.66 9.66,18.92 9.66,18L9.66,14.66C9.66,13.74 10.43,13 11.34,13L14.25,13L14.25,11.78L15.5,10.5zM15.5,11.75L15.5,13L20.5,13L20.5,11.75L15.5,11.75zM10.5,20.5L16.34,20.5L16.34,21.75L19.66,21.75L19.66,20.5L25.5,20.5L25.5,23.84C25.5,24.76 24.76,25.5 23.84,25.5L12.16,25.5C11.24,25.5 10.5,24.76 10.5,23.84L10.5,20.5z"/>
+        android:pathData="M16.3,11.3h3.4v1.7h-3.4z"
+        android:fillColor="#FFFFFF"/>
+    <path
+        android:pathData="M18,17.17c-0.92,0 -1.67,0.75 -1.67,1.67c0,0.92 0.75,1.67 1.67,1.67c0.92,0 1.67,-0.75 1.67,-1.67C19.67,17.92 18.92,17.17 18,17.17z"
+        android:fillColor="#FFFFFF"/>
+    <path
+        android:pathData="M18,0C8.06,0 0,8.06 0,18s8.06,18 18,18s18,-8.06 18,-18S27.94,0 18,0zM26.3,23.83c0,0.92 -0.71,1.67 -1.63,1.67H11.33c-0.93,0 -1.67,-0.74 -1.67,-1.67l0.01,-9.17c0,-0.92 0.73,-1.67 1.66,-1.67h3.37v-1.67c0,-0.93 0.71,-1.63 1.63,-1.63h3.33c0.93,0 1.63,0.71 1.63,1.63V13h3.37c0.93,0 1.63,0.74 1.63,1.67V23.83z"
+        android:fillColor="#FFFFFF"/>
 </vector>
diff --git a/core/res/res/drawable/ic_eject_24dp.xml b/core/res/res/drawable/ic_eject_24dp.xml
index 1bb351a..321ee3b 100644
--- a/core/res/res/drawable/ic_eject_24dp.xml
+++ b/core/res/res/drawable/ic_eject_24dp.xml
@@ -20,5 +20,8 @@
         android:viewportHeight="24.0">
     <path
         android:fillColor="#FF000000"
-        android:pathData="M5 17h14v2H5zm7,-12L5.33 15h13.34z"/>
+        android:pathData="M6,17h12c0.55,0 1,0.45 1,1v0c0,0.55 -0.45,1 -1,1H6c-0.55,0 -1,-0.45 -1,-1v0C5,17.45 5.45,17 6,17z"/>
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M11.1,5.48l-5.22,7.83C5.39,14.03 5.91,15 6.78,15h10.44c0.87,0 1.39,-0.97 0.9,-1.69L12.9,5.48C12.47,4.84 11.53,4.84 11.1,5.48z"/>
 </vector>
diff --git a/core/res/res/drawable/ic_feedback.xml b/core/res/res/drawable/ic_feedback.xml
index 365863d..c316e7d 100644
--- a/core/res/res/drawable/ic_feedback.xml
+++ b/core/res/res/drawable/ic_feedback.xml
@@ -20,5 +20,5 @@
         android:viewportHeight="24.0">
     <path
         android:fillColor="#FF000000"
-        android:pathData="M20.0,2.0L4.0,2.0c-1.1,0.0 -1.9,0.9 -1.99,2.0L2.0,22.0l4.0,-4.0l14.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L22.0,4.0c0.0,-1.1 -0.9,-2.0 -2.0,-2.0zm-7.0,12.0l-2.0,0.0l0.0,-2.0l2.0,0.0l0.0,2.0zm0.0,-4.0l-2.0,0.0L11.0,6.0l2.0,0.0l0.0,4.0z"/>
+        android:pathData="M20,2H4C2.9,2 2,2.9 2,4v17.39c0,0.54 0.65,0.81 1.04,0.43L6.86,18H20c1.1,0 2,-0.9 2,-2V4C22,2.9 21.1,2 20,2zM11,7c0,-0.55 0.45,-1 1,-1s1,0.45 1,1v3c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1V7zM12,15.2c-0.61,0 -1.1,-0.49 -1.1,-1.1c0,-0.61 0.49,-1.1 1.1,-1.1c0.61,0 1.1,0.49 1.1,1.1C13.1,14.71 12.61,15.2 12,15.2z"/>
 </vector>
diff --git a/core/res/res/drawable/ic_media_route_connected_dark_material.xml b/core/res/res/drawable/ic_media_route_connected_dark_material.xml
new file mode 100644
index 0000000..efde152
--- /dev/null
+++ b/core/res/res/drawable/ic_media_route_connected_dark_material.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">
+    <item android:drawable="@drawable/ic_media_route_connected_dark_00_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_01_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_02_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_03_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_04_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_05_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_06_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_07_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_08_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_09_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_10_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_11_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_12_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_13_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_14_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_15_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_16_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_17_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_18_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_19_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_20_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_21_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_22_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_23_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_24_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_25_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_26_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_27_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_28_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_29_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_dark_30_mtrl"
+          android:duration="42" />
+</animation-list>
diff --git a/core/res/res/drawable/ic_media_route_connected_light_material.xml b/core/res/res/drawable/ic_media_route_connected_light_material.xml
new file mode 100644
index 0000000..466a43a
--- /dev/null
+++ b/core/res/res/drawable/ic_media_route_connected_light_material.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">
+    <item android:drawable="@drawable/ic_media_route_connected_light_00_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_01_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_02_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_03_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_04_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_05_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_06_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_07_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_08_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_09_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_10_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_11_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_12_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_13_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_14_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_15_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_16_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_17_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_18_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_19_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_20_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_21_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_22_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_23_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_24_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_25_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_26_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_27_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_28_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_29_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connected_light_30_mtrl"
+          android:duration="42" />
+</animation-list>
diff --git a/core/res/res/drawable/ic_media_route_connecting_dark_material.xml b/core/res/res/drawable/ic_media_route_connecting_dark_material.xml
new file mode 100644
index 0000000..1c4bae5
--- /dev/null
+++ b/core/res/res/drawable/ic_media_route_connecting_dark_material.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_00_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_01_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_02_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_03_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_04_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_05_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_06_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_07_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_08_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_09_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_10_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_11_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_12_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_13_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_14_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_15_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_16_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_17_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_18_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_19_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_20_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_21_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_22_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_23_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_24_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_25_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_26_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_27_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_28_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_29_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_dark_30_mtrl"
+          android:duration="42" />
+</animation-list>
diff --git a/core/res/res/drawable/ic_media_route_connecting_light_material.xml b/core/res/res/drawable/ic_media_route_connecting_light_material.xml
new file mode 100644
index 0000000..4b7e807
--- /dev/null
+++ b/core/res/res/drawable/ic_media_route_connecting_light_material.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
+    <item android:drawable="@drawable/ic_media_route_connecting_light_00_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_01_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_02_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_03_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_04_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_05_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_06_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_07_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_08_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_09_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_10_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_11_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_12_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_13_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_14_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_15_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_16_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_17_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_18_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_19_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_20_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_21_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_22_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_23_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_24_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_25_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_26_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_27_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_28_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_29_mtrl"
+          android:duration="42" />
+    <item android:drawable="@drawable/ic_media_route_connecting_light_30_mtrl"
+          android:duration="42" />
+</animation-list>
diff --git a/core/res/res/drawable/ic_media_route_connecting_material_dark.xml b/core/res/res/drawable/ic_media_route_connecting_material_dark.xml
deleted file mode 100644
index 51decd3..0000000
--- a/core/res/res/drawable/ic_media_route_connecting_material_dark.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
-    android:oneshot="false">
-    <item android:duration="500">
-        <bitmap android:src="@drawable/ic_media_route_on_0_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-    <item android:duration="500">
-        <bitmap android:src="@drawable/ic_media_route_on_1_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-    <item android:duration="500">
-        <bitmap android:src="@drawable/ic_media_route_on_2_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-    <item android:duration="500">
-        <bitmap android:src="@drawable/ic_media_route_on_1_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-</animation-list>
diff --git a/core/res/res/drawable/ic_media_route_connecting_material_light.xml b/core/res/res/drawable/ic_media_route_connecting_material_light.xml
deleted file mode 100644
index 51decd3..0000000
--- a/core/res/res/drawable/ic_media_route_connecting_material_light.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
-    android:oneshot="false">
-    <item android:duration="500">
-        <bitmap android:src="@drawable/ic_media_route_on_0_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-    <item android:duration="500">
-        <bitmap android:src="@drawable/ic_media_route_on_1_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-    <item android:duration="500">
-        <bitmap android:src="@drawable/ic_media_route_on_2_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-    <item android:duration="500">
-        <bitmap android:src="@drawable/ic_media_route_on_1_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-</animation-list>
diff --git a/core/res/res/drawable/ic_media_route_dark_material.xml b/core/res/res/drawable/ic_media_route_dark_material.xml
new file mode 100644
index 0000000..2a60f58
--- /dev/null
+++ b/core/res/res/drawable/ic_media_route_dark_material.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_checked="true" android:state_enabled="true"
+        android:drawable="@android:drawable/ic_media_route_connecting_dark_material" />
+    <item android:state_activated="true" android:state_enabled="true"
+        android:drawable="@android:drawable/ic_media_route_connected_dark_material" />
+    <item android:state_enabled="true">
+        <bitmap android:src="@android:drawable/ic_media_route_off_dark_mtrl"/>
+    </item>
+    <item>
+        <bitmap android:src="@android:drawable/ic_media_route_off_dark_mtrl"
+            android:alpha="0.5" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/ic_media_route_light_material.xml b/core/res/res/drawable/ic_media_route_light_material.xml
new file mode 100644
index 0000000..f35187e
--- /dev/null
+++ b/core/res/res/drawable/ic_media_route_light_material.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_checked="true" android:state_enabled="true"
+          android:drawable="@android:drawable/ic_media_route_connecting_light_material" />
+    <item android:state_activated="true" android:state_enabled="true"
+          android:drawable="@android:drawable/ic_media_route_connected_light_material" />
+    <item android:state_enabled="true">
+        <bitmap android:src="@android:drawable/ic_media_route_off_light_mtrl"/>
+    </item>
+    <item>
+        <bitmap android:src="@android:drawable/ic_media_route_off_light_mtrl"
+            android:alpha="0.62" />
+    </item>
+</selector>
\ No newline at end of file
diff --git a/core/res/res/drawable/ic_media_route_material_dark.xml b/core/res/res/drawable/ic_media_route_material_dark.xml
deleted file mode 100644
index eb26ac8..0000000
--- a/core/res/res/drawable/ic_media_route_material_dark.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_checked="true" android:state_enabled="true"
-        android:drawable="@android:drawable/ic_media_route_connecting_material_dark" />
-    <item android:state_activated="true" android:state_enabled="true">
-        <bitmap android:src="@android:drawable/ic_media_route_on_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-    <item android:state_enabled="true">
-        <bitmap android:src="@android:drawable/ic_media_route_off_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-    <item>
-        <bitmap android:src="@android:drawable/ic_media_route_disabled_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-</selector>
diff --git a/core/res/res/drawable/ic_media_route_material_light.xml b/core/res/res/drawable/ic_media_route_material_light.xml
deleted file mode 100644
index 37bbf14..0000000
--- a/core/res/res/drawable/ic_media_route_material_light.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_checked="true" android:state_enabled="true"
-        android:drawable="@android:drawable/ic_media_route_connecting_material_light" />
-    <item android:state_activated="true" android:state_enabled="true">
-        <bitmap android:src="@android:drawable/ic_media_route_on_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-    <item android:state_enabled="true">
-        <bitmap android:src="@android:drawable/ic_media_route_off_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-    <item>
-        <bitmap android:src="@android:drawable/ic_media_route_disabled_mtrl_alpha"
-            android:tint="?attr/colorControlNormal" />
-    </item>
-</selector>
diff --git a/core/res/res/drawable/ic_refresh.xml b/core/res/res/drawable/ic_refresh.xml
index 1297407..5894f95 100644
--- a/core/res/res/drawable/ic_refresh.xml
+++ b/core/res/res/drawable/ic_refresh.xml
@@ -20,5 +20,5 @@
         android:viewportHeight="24.0">
     <path
         android:fillColor="#FF000000"
-        android:pathData="M17.65,6.35C16.2,4.9 14.21,4.0 12.0,4.0c-4.42,0.0 -7.99,3.58 -7.99,8.0s3.57,8.0 7.99,8.0c3.73,0.0 6.84,-2.55 7.73,-6.0l-2.08,0.0c-0.82,2.33 -3.04,4.0 -5.65,4.0 -3.31,0.0 -6.0,-2.69 -6.0,-6.0s2.69,-6.0 6.0,-6.0c1.66,0.0 3.1,0.69 4.22,1.78L13.0,11.0l7.0,0.0L20.0,4.0l-2.35,2.35z"/>
+        android:pathData="M17.65,6.35c-1.63,-1.63 -3.94,-2.57 -6.48,-2.31c-3.67,0.37 -6.69,3.35 -7.1,7.02C3.52,15.91 7.27,20 12,20c3.19,0 5.93,-1.87 7.21,-4.57c0.31,-0.66 -0.16,-1.43 -0.89,-1.43h-0.01c-0.37,0 -0.72,0.2 -0.88,0.53c-1.13,2.43 -3.84,3.97 -6.81,3.32c-2.22,-0.49 -4.01,-2.3 -4.49,-4.52C5.31,9.44 8.26,6 12,6c1.66,0 3.14,0.69 4.22,1.78l-2.37,2.37C13.54,10.46 13.76,11 14.21,11H19c0.55,0 1,-0.45 1,-1V5.21c0,-0.45 -0.54,-0.67 -0.85,-0.35L17.65,6.35z"/>
 </vector>
diff --git a/core/res/res/drawable/scrollbar_handle_material.xml b/core/res/res/drawable/scrollbar_handle_material.xml
index 33efbba..f020112 100644
--- a/core/res/res/drawable/scrollbar_handle_material.xml
+++ b/core/res/res/drawable/scrollbar_handle_material.xml
@@ -19,7 +19,4 @@
        android:shape="rectangle">
     <solid
         android:color="#84ffffff" />
-    <size
-        android:width="4dp"
-        android:height="4dp" />
 </shape>
diff --git a/core/res/res/layout-land/time_picker_material.xml b/core/res/res/layout-land/time_picker_material.xml
index d83ccb2..f3d4a84 100644
--- a/core/res/res/layout-land/time_picker_material.xml
+++ b/core/res/res/layout-land/time_picker_material.xml
@@ -17,7 +17,6 @@
 
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layoutDirection="ltr"
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
 
@@ -34,6 +33,8 @@
             android:layoutDirection="ltr"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
+            android:layout_centerHorizontal="true"
+            android:layout_centerVertical="true"
             android:paddingTop="@dimen/timepicker_radial_picker_top_margin"
             android:orientation="horizontal">
 
diff --git a/core/res/res/layout/autofill_save.xml b/core/res/res/layout/autofill_save.xml
index 90b74ac..5c5b985 100644
--- a/core/res/res/layout/autofill_save.xml
+++ b/core/res/res/layout/autofill_save.xml
@@ -14,6 +14,7 @@
      limitations under the License.
 -->
 
+<!-- NOTE: outer layout is required to provide proper shadow. -->
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
@@ -21,6 +22,7 @@
     android:orientation="vertical">
 
     <LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/autofill_save"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
@@ -42,9 +44,16 @@
                 android:layout_height="wrap_content"
                 android:orientation="horizontal">
 
+                <ImageView
+                    android:id="@+id/autofill_save_icon"
+                    android:scaleType="fitStart"
+                    android:layout_width="24dp"
+                    android:layout_height="24dp"/>
+
                 <TextView
                     android:id="@+id/autofill_save_title"
-                    android:layout_width="0dp"
+                    android:paddingLeft="8dp"
+                    android:layout_width="fill_parent"
                     android:layout_height="wrap_content"
                     android:text="@string/autofill_save_title"
                     android:textSize="16sp"
@@ -52,26 +61,14 @@
                     android:layout_weight="1">
                 </TextView>
 
-                <ImageView
-                    android:id="@+id/autofill_save_close"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginLeft="16dp"
-                    android:src="@android:drawable/ic_close"
-                    android:alpha="0.54"
-                    android:background="?android:attr/selectableItemBackgroundBorderless"
-                    android:contentDescription="@android:string/close_button_text">
-                </ImageView>
-
             </LinearLayout>
 
-            <TextView
-                android:id="@+id/autofill_save_subtitle"
-                android:layout_width="fill_parent"
+            <com.android.server.autofill.ui.CustomScrollView
+                android:id="@+id/autofill_save_custom_subtitle"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="4dp"
-                android:visibility="gone">
-            </TextView>
+                android:visibility="gone"/>
 
         </LinearLayout>
 
@@ -105,7 +102,6 @@
                 android:layout_height="wrap_content"
                 style="@style/Widget.Material.Button.Colored"
                 android:text="@string/autofill_save_yes">
-                <requestFocus />
             </Button>
 
         </com.android.internal.widget.ButtonBarLayout>
diff --git a/core/res/res/layout/notification_template_material_ambient.xml b/core/res/res/layout/notification_template_material_ambient.xml
index 76b3528..ee5c758 100644
--- a/core/res/res/layout/notification_template_material_ambient.xml
+++ b/core/res/res/layout/notification_template_material_ambient.xml
@@ -70,6 +70,8 @@
                 android:textSize="16sp"
                 android:textColor="#eeffffff"
                 android:layout_marginTop="4dp"
+                android:ellipsize="end"
+                android:maxLines="7"
             />
         </LinearLayout>
     </LinearLayout>
diff --git a/core/res/res/layout/notification_template_material_big_picture.xml b/core/res/res/layout/notification_template_material_big_picture.xml
index 83c0fec..e94e646 100644
--- a/core/res/res/layout/notification_template_material_big_picture.xml
+++ b/core/res/res/layout/notification_template_material_big_picture.xml
@@ -40,7 +40,10 @@
             android:layout_marginEnd="@dimen/notification_content_margin_end"
             android:orientation="vertical">
             <include layout="@layout/notification_template_part_line1"/>
-            <include layout="@layout/notification_template_progress"/>
+            <include layout="@layout/notification_template_progress"
+                     android:layout_width="match_parent"
+                     android:layout_height="@dimen/notification_progress_bar_height"
+                     android:layout_marginTop="@dimen/notification_progress_margin_top"/>
             <include layout="@layout/notification_template_text"/>
         </LinearLayout>
         <ImageView
diff --git a/core/res/res/layout/notification_template_material_big_text.xml b/core/res/res/layout/notification_template_material_big_text.xml
index 0cfe689..3c87f92 100644
--- a/core/res/res/layout/notification_template_material_big_text.xml
+++ b/core/res/res/layout/notification_template_material_big_text.xml
@@ -45,7 +45,11 @@
             android:orientation="vertical"
             >
             <include layout="@layout/notification_template_part_line1" />
-            <include layout="@layout/notification_template_progress" />
+            <include layout="@layout/notification_template_progress"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/notification_progress_bar_height"
+                android:layout_marginTop="@dimen/notification_progress_margin_top"
+                android:layout_marginBottom="6dp"/>
             <com.android.internal.widget.ImageFloatingTextView android:id="@+id/big_text"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
diff --git a/core/res/res/layout/notification_template_material_inbox.xml b/core/res/res/layout/notification_template_material_inbox.xml
index 7820e39..e4c91a4 100644
--- a/core/res/res/layout/notification_template_material_inbox.xml
+++ b/core/res/res/layout/notification_template_material_inbox.xml
@@ -48,8 +48,9 @@
                 android:layout_height="wrap_content" />
             <include layout="@layout/notification_template_progress"
                 android:layout_width="match_parent"
-                android:layout_height="15dp"
-                android:layout_marginTop="4dp"/>
+                android:layout_height="@dimen/notification_progress_bar_height"
+                android:layout_marginTop="@dimen/notification_progress_margin_top"
+                android:layout_marginBottom="2dp"/>
             <TextView android:id="@+id/inbox_text0"
                 android:textAppearance="@style/TextAppearance.Material.Notification"
                 android:layout_width="match_parent"
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index e48bcb8..e323dc0 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dae"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> dag <xliff:g id="HOURS">%2$d</xliff:g> uur"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> dag <xliff:g id="HOURS">%2$d</xliff:g> uur"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> uur"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> u. <xliff:g id="MINUTES">%2$d</xliff:g> min."</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> u. <xliff:g id="MINUTES">%2$d</xliff:g> min."</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> minute"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min."</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min. <xliff:g id="SECONDS">%2$d</xliff:g> s."</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min. <xliff:g id="SECONDS">%2$d</xliff:g> s."</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> sekondes"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sekonde"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Titelloos&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Geen foonnommer)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Onbekend"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Geen stem- of nooddiens nie"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Word tydelik nie deur die selnetwerk by jou ligging aangebied nie"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Kan netwerk nie bereik nie"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Om die opvangs te verbeter, probeer die tipe verander wat gekies is by Stelsel &gt; Netwerk en internet &gt; Mobiele netwerke &gt; Voorkeurnetwerktipe."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Om opvangs te verbeter, probeer die soort verander wat by Instellings &gt; Netwerk en internet &gt; Mobiele netwerke &gt; Voorkeurnetwerksoort gekies is."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi-oproepe is aktief"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Noodoproepe vereis \'n mobiele netwerk."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Opletberigte"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Oproepaanstuur"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Noodterugbel-modus"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Opletberigte oor mobiele data"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status van mobiele data"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS-boodskappe"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Stemboodskappe"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-oproepe"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM is nie opgestel nie"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM word nie toegelaat nie"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Foon word nie toegelaat nie"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Opspringvenster"</string>
 </resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index dc001e5..057555e 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"ኪባ"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> ቀኖች"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> ቀን <xliff:g id="HOURS">%2$d</xliff:g> ሰዓ"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> ቀን <xliff:g id="HOURS">%2$d</xliff:g> ሰዓ"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ሰዓ"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ሰዓ <xliff:g id="MINUTES">%2$d</xliff:g> ደቂቃ"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ሰዓ <xliff:g id="MINUTES">%2$d</xliff:g> ደቂቃ"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> ደቂቃዎች"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> ደቂቃዎች"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> ደቂቃ <xliff:g id="SECONDS">%2$d</xliff:g> ሴ"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> ደቂቃ <xliff:g id="SECONDS">%2$d</xliff:g> ሴ"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> ሴ"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> ሴ"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;ርዕስ አልባ&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(ምንም ስልክ ቁጥር የለም)"</string>
     <string name="unknownName" msgid="6867811765370350269">"አይታወቅም"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"ምንም የድምፅ እና የድንገተኛ አደጋ ጥሪ አገልግሎት የለም"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"ለጊዜው በአካባቢዎ ባለው የተንቀሳቃሽ ስልክ አውታረ መረብ አይቀርብም"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"አውታረ መረብ ላይ መድረስ አይቻልም"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"ቅበላን ለማሻሻል የተመረጠውን ዓይነት በሥርዓት &gt; አውታረ መረቦች እና በይነመረብ &gt; የተንቀሳቃሽ ስልክ አውታረ መረቦች &gt; ተመራጭ የአውታረ መረብ ዓይነት ላይ ለመለወጥ ይሞክሩ።"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"ቅበላን ለማሻሻል የተመረጠውን ዓይነት በቅንብሮች &gt; አውታረ መረብ እና በይነመረብ &gt; የተንቀሳቃሽ ስልክ አውታረ መረቦች &gt; ተመራጭ የአውታረ መረብ ዓይነት ላይ ለመለወጥ ይሞክሩ።"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"የWi‑Fi ጥሪ ገቢር ነው"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"የአደጋ ጥሪዎች የተንቀሳቃሽ ስልክ አውታረ መረብ ያስፈልጋቸዋል።"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"ማንቂያዎች"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"ጥሪ ማስተላለፍ"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"የአደጋ ጊዜ ጥሪ ሁነታ"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"የተንቀሳቃሽ ስልክ ውሂብ ማንቂያዎች"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"የተንቀሳቃሽ ስልክ ውሂብ ሁኔታ"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"የኤስኤምኤስ መልዕክቶች"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"የድምጽ መልዕክቶች"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"የWi-Fi ጥሪ"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"ሲም አልቀረበም"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"ሲም አይፈቀድም"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"ስልክ አይፈቀድም"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"ብቅ-ባይ መስኮት"</string>
 </resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 3c2dd23..58e4379 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"بايت"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"كيلوبايت"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"ميغابايت"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"غيغابايت"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"تيرابايت"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"بيتابايت"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> يوم"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> يوم <xliff:g id="HOURS">%2$d</xliff:g> ساعة"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> يوم <xliff:g id="HOURS">%2$d</xliff:g> ساعة"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ساعة"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ساعة <xliff:g id="MINUTES">%2$d</xliff:g> دقيقة"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ساعة <xliff:g id="MINUTES">%2$d</xliff:g> دقيقة"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> دقيقة"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> دقيقة"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> دقيقة <xliff:g id="SECONDS">%2$d</xliff:g> ثانية"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> دقيقة <xliff:g id="SECONDS">%2$d</xliff:g> ثانية"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> ثانية"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> ثانية"</string>
     <string name="untitled" msgid="4638956954852782576">"‏&lt;بلا عنوان&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(ليس هناك رقم هاتف)"</string>
     <string name="unknownName" msgid="6867811765370350269">"غير معروف"</string>
@@ -63,7 +47,7 @@
     <string name="needPuk2" msgid="4526033371987193070">"‏اكتب PUK2 لإلغاء تأمين شريحة SIM."</string>
     <string name="enablePin" msgid="209412020907207950">"‏محاولة غير ناجحة، مكّن قفل SIM/RUIM."</string>
     <plurals name="pinpuk_attempts" formatted="false" msgid="1251012001539225582">
-      <item quantity="zero">‏لم يتبق لديك أية محاولات (<xliff:g id="NUMBER_1">%d</xliff:g>) يتم بعدها قفل شريحة SIM.</item>
+      <item quantity="zero">‏لم يتبق لديك أي محاولات (<xliff:g id="NUMBER_1">%d</xliff:g>) يتم بعدها قفل شريحة SIM.</item>
       <item quantity="two">‏يتبقى لديك محاولتان (<xliff:g id="NUMBER_1">%d</xliff:g>) يتم بعدهما قفل شريحة SIM.</item>
       <item quantity="few">‏يتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولات يتم بعدها قفل شريحة SIM.</item>
       <item quantity="many">‏يتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولة يتم بعدها قفل شريحة SIM.</item>
@@ -99,11 +83,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"لا تتوفر خدمة الصوت/الطوارئ"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"مؤقتا لا تقدمها شبكة الجوال في موقعك"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"يتعذر الوصول إلى الشبكة"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"‏لتحسين الاستقبال، يمكنك تجربة تغيير النوع المحدّد في النظام &gt; الشبكة والإنترنت &gt; شبكات الجوّال &gt; نوع الشبكة المفضّل."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"‏لتحسين الاستقبال، يمكنك محاولة تغيير النوع المحدّد من خلال الإعدادات &gt; الشبكة والإنترنت &gt; شبكات الجوّال &gt; نوع الشبكة المفضّل."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"‏الاتصال عبر Wi-Fi نشط"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"تتطلب مكالمات الطوارئ شبكة جوّال."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"التنبيهات"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"إعادة توجيه المكالمة"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"وضع معاودة الاتصال بالطوارئ"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"تنبيهات بيانات الجوّال"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"حالة بيانات الجوّال"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"‏الرسائل القصيرة SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"رسائل البريد الصوتي"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"‏الاتصال عبر Wi-Fi"</string>
@@ -446,9 +432,9 @@
     <string name="permdesc_setTimeZone" product="tv" msgid="888864653946175955">"يتيح للتطبيق تغيير المنطقة الزمنية للتلفزيون."</string>
     <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"للسماح للتطبيق بتغيير المنطقة الزمنية للهاتف."</string>
     <string name="permlab_getAccounts" msgid="1086795467760122114">"البحث عن حسابات على الجهاز"</string>
-    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"للسماح للتطبيق بالحصول على قائمة بالحسابات التي يعرفها الجهاز اللوحي. وقد يتضمن ذلك أية حسابات تم إنشاؤها بواسطة التطبيقات التي ثبتها."</string>
-    <string name="permdesc_getAccounts" product="tv" msgid="4190633395633907543">"يتيح للتطبيق الحصول على قائمة بالحسابات المعروفة في التلفزيون. وقد يتضمن هذا أية حسابات أنشأتها التطبيقات التي ثبتها."</string>
-    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"للسماح للتطبيق بالحصول على قائمة بالحسابات التي يعرفها الهاتف. وقد يتضمن ذلك أية حسابات تم إنشاؤها بواسطة التطبيقات التي ثبتها."</string>
+    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"للسماح للتطبيق بالحصول على قائمة بالحسابات التي يعرفها الجهاز اللوحي. وقد يتضمن ذلك أي حسابات تم إنشاؤها بواسطة التطبيقات التي ثبتها."</string>
+    <string name="permdesc_getAccounts" product="tv" msgid="4190633395633907543">"يتيح للتطبيق الحصول على قائمة بالحسابات المعروفة في التلفزيون. وقد يتضمن هذا أي حسابات أنشأتها التطبيقات التي ثبتها."</string>
+    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"للسماح للتطبيق بالحصول على قائمة بالحسابات التي يعرفها الهاتف. وقد يتضمن ذلك أي حسابات تم إنشاؤها بواسطة التطبيقات التي ثبتها."</string>
     <string name="permlab_accessNetworkState" msgid="4951027964348974773">"عرض اتصالات الشبكة"</string>
     <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"للسماح للتطبيق بعرض معلومات حول اتصالات الشبكة كعرض معلومات عن الشبكات المتوفرة والشبكات المتصلة."</string>
     <string name="permlab_createNetworkSockets" msgid="7934516631384168107">"حق الوصول الكامل إلى الشبكة"</string>
@@ -470,7 +456,7 @@
     <string name="permdesc_bluetoothAdmin" product="tv" msgid="3373125682645601429">"يتيح للتطبيق تهيئة تلفزيون بلوتوث المحلي، واكتشاف الأجهزة البعيدة وإقرانها."</string>
     <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"للسماح للتطبيق بتهيئة هاتف البلوتوث المحلي، واكتشاف أجهزة التحكم عن بعد والاقتران بها."</string>
     <string name="permlab_accessWimaxState" msgid="4195907010610205703">"‏الاتصال بـشبكة WiMAX وقطع الاتصال بها"</string>
-    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"‏للسماح للتطبيق بتحديد ما إذا تم تمكين WiMAX وتحديد معلومات حول أية شبكات WiMAX متصلة."</string>
+    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"‏للسماح للتطبيق بتحديد ما إذا تم تمكين WiMAX وتحديد معلومات حول أي شبكات WiMAX متصلة."</string>
     <string name="permlab_changeWimaxState" msgid="340465839241528618">"‏تغيير حالة WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"‏للسماح للتطبيق بتوصيل الجهاز اللوحي بشبكات WiMAX وقطع اتصاله بها."</string>
     <string name="permdesc_changeWimaxState" product="tv" msgid="6022307083934827718">"‏يتيح للتطبيق توصيل التلفزيون أو إلغاء توصيله بشبكات WiMAX."</string>
@@ -815,7 +801,7 @@
     <string name="granularity_label_line" msgid="5764267235026120888">"سطر"</string>
     <string name="factorytest_failed" msgid="5410270329114212041">"تعذّر اختبار المصنع"</string>
     <string name="factorytest_not_system" msgid="4435201656767276723">"‏إجراء FACTORY_TEST غير متاح سوى للحزم المثبتة في /system/app."</string>
-    <string name="factorytest_no_action" msgid="872991874799998561">"‏لم يتم العثور على أية حزمة توفر إجراء FACTORY_TEST."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"‏لم يتم العثور على أي حزمة توفر إجراء FACTORY_TEST."</string>
     <string name="factorytest_reboot" msgid="6320168203050791643">"إعادة تشغيل"</string>
     <string name="js_dialog_title" msgid="1987483977834603872">"تعرض الصفحة في \"<xliff:g id="TITLE">%s</xliff:g>\":"</string>
     <string name="js_dialog_title_default" msgid="6961903213729667573">"جافا سكريبت"</string>
@@ -1170,15 +1156,15 @@
     <string name="volume_icon_description_incall" msgid="8890073218154543397">"مستوى صوت المكالمة"</string>
     <string name="volume_icon_description_media" msgid="4217311719665194215">"مستوى صوت الوسائط"</string>
     <string name="volume_icon_description_notification" msgid="7044986546477282274">"مستوى صوت الإشعار"</string>
-    <string name="ringtone_default" msgid="3789758980357696936">"نغمة الرنين الافتراضية"</string>
+    <string name="ringtone_default" msgid="3789758980357696936">"نغمة الرنين التلقائية"</string>
     <string name="ringtone_default_with_actual" msgid="1767304850491060581">"الافتراضية (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
-    <string name="ringtone_silent" msgid="7937634392408977062">"لا شيء"</string>
+    <string name="ringtone_silent" msgid="7937634392408977062">"بلا نغمة رنين"</string>
     <string name="ringtone_picker_title" msgid="3515143939175119094">"نغمات الرنين"</string>
     <string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"أصوات التنبيه"</string>
     <string name="ringtone_picker_title_notification" msgid="4837740874822788802">"أصوات الإشعار"</string>
     <string name="ringtone_unknown" msgid="3914515995813061520">"غير معروف"</string>
     <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
-      <item quantity="zero">‏لا تتوفر أية شبكات Wi-Fi</item>
+      <item quantity="zero">‏لا تتوفر أي شبكات Wi-Fi</item>
       <item quantity="two">‏تتوفر شبكتا Wi-Fi</item>
       <item quantity="few">‏تتوفر شبكات Wi-Fi</item>
       <item quantity="many">‏تتوفر شبكات Wi-Fi</item>
@@ -1186,7 +1172,7 @@
       <item quantity="one">‏تتوفر شبكة Wi-Fi واحدة</item>
     </plurals>
     <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
-      <item quantity="zero">‏لا تتوفر أية شبكات Wi-Fi مفتوحة</item>
+      <item quantity="zero">‏لا تتوفر أي شبكات Wi-Fi مفتوحة</item>
       <item quantity="two">‏تتوفر شبكتا Wi-Fi مفتوحتان</item>
       <item quantity="few">‏تتوفر شبكات Wi-Fi مفتوحة</item>
       <item quantity="many">‏تتوفر شبكات Wi-Fi مفتوحة</item>
@@ -1400,7 +1386,7 @@
     <string name="back_button_label" msgid="2300470004503343439">"رجوع"</string>
     <string name="next_button_label" msgid="1080555104677992408">"التالي"</string>
     <string name="skip_button_label" msgid="1275362299471631819">"تخطي"</string>
-    <string name="no_matches" msgid="8129421908915840737">"ليس هناك أية مطابقات"</string>
+    <string name="no_matches" msgid="8129421908915840737">"ليس هناك أي مطابقات"</string>
     <string name="find_on_page" msgid="1946799233822820384">"بحث في الصفحة"</string>
     <plurals name="matches_found" formatted="false" msgid="1210884353962081884">
       <item quantity="zero"><xliff:g id="INDEX">%d</xliff:g> من <xliff:g id="TOTAL">%d</xliff:g></item>
@@ -1916,4 +1902,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"‏لم يتم تقديم SIM"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"‏غير مسموح باستخدام SIM"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"غير مسموح باستخدام الهاتف"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"نافذة منبثقة"</string>
 </resources>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index 5b968c4..10839d6 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> gün"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> gan <xliff:g id="HOURS">%2$d</xliff:g> saat"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> gün <xliff:g id="HOURS">%2$d</xliff:g> saat"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> saat"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> saat <xliff:g id="MINUTES">%2$d</xliff:g> dəq"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> saat <xliff:g id="MINUTES">%2$d</xliff:g> dəq"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> dəqiqə"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> dəq"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> dəq <xliff:g id="SECONDS">%2$d</xliff:g> san"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> dəq <xliff:g id="SECONDS">%2$d</xliff:g> san"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> saniyə"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> saniyə"</string>
     <string name="untitled" msgid="4638956954852782576">"Başlıqsız"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Telefon nömrəsi yoxdur)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Naməlum"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Səsli/təcili xidmət yoxdur"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Müvəqqəti olaraq məkanda mobil şəbəkə tərəfindən təklif edilmir"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Şəbəkəyə daxil olmaq mümkün deyil"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Qəbulu inkişaf etdirmək üçün seçilmiş növü Sistem &gt; Şəbəkə və İnternet &gt; Mobil şəbəkə &gt; Tərcih edilən şəbəkə növü bölməsində dəyişə bilərsiniz."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Qəbulu inkişaf etdirmək üçün seçilmiş növü Ayarlar &gt; Şəbəkə və İnternet &gt; Mobil şəbəkə &gt; Tərcih edilən şəbəkə növü bölməsində dəyişə bilərsiniz."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi zəngi aktivdir"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Təcili zənglər üçün mobil şəbəkə tələb olunur."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Siqnallar"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Zəng yönləndirmə"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Təcili geriyə zəng rejimi"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Mobil data siqnalları"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Mobil data statusu"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS mesajları"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Səsli e-poçt mesajları"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi zəngi"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM təmin edilməyib"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM-ə icazə verilmir"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefona icazə verilmir"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Popap Pəncərəsi"</string>
 </resources>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index e252a48..2396950 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dana"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> dan <xliff:g id="HOURS">%2$d</xliff:g> s"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> dan <xliff:g id="HOURS">%2$d</xliff:g> s"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> s"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> s <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> s <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sek"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sek"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> sek"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sek"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Bez naslova&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nema broja telefona)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Nepoznato"</string>
@@ -96,11 +80,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Nema glasovne usluge/usluge za hitne pozive"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Privremeno je onemogućeno na mobilnoj mreži na vašoj lokaciji"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Povezivanje sa mrežom nije uspelo"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Da biste poboljšali prijem, probajte da promenite izabrani tip u odeljku Sistem &gt; Mreža i internet &gt; Mobilne mreže &gt; Željeni tip mreže."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Da biste poboljšali prijem, probajte da promenite izabrani tip u odeljku Podešavanja &gt; Mreža i internet &gt; Mobilne mreže &gt; Željeni tip mreže."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi pozivanje je aktivno"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Hitni pozivi zahtevaju mobilnu mrežu."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Obaveštenja"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Preusmeravanje poziva"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Režim za hitan povratni poziv"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Obaveštenja za mobilne podatke"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status mobilnih podataka"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS-ovi"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Poruke govorne pošte"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Pozivanje preko Wi-Fi mreže"</string>
@@ -1009,7 +995,7 @@
     <string name="low_internal_storage_view_text_no_boot" msgid="6935190099204693424">"Nema dovoljno memorijskog prostora za sistem. Uverite se da imate 250 MB slobodnog prostora i ponovo pokrenite."</string>
     <string name="app_running_notification_title" msgid="8718335121060787914">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je pokrenuta"</string>
     <string name="app_running_notification_text" msgid="1197581823314971177">"Dodirnite za više informacija ili zaustavljanje aplikacije."</string>
-    <string name="ok" msgid="5970060430562524910">"Potvrdi"</string>
+    <string name="ok" msgid="5970060430562524910">"U redu"</string>
     <string name="cancel" msgid="6442560571259935130">"Otkaži"</string>
     <string name="yes" msgid="5362982303337969312">"Potvrdi"</string>
     <string name="no" msgid="5141531044935541497">"Otkaži"</string>
@@ -1814,4 +1800,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM kartica nije podešena"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM kartica nije dozvoljena"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefon nije dozvoljen"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Iskačući prozor"</string>
 </resources>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index f178f8d..5ce8c3a 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"б"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"КБ"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"Мб"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"ГБ"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"Тб"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"Пб"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> сут"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> дз. <xliff:g id="HOURS">%2$d</xliff:g> гадз"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> дз. <xliff:g id="HOURS">%2$d</xliff:g> гадз"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> гадз"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> гадз <xliff:g id="MINUTES">%2$d</xliff:g> хв"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> гадз <xliff:g id="MINUTES">%2$d</xliff:g> хв"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> хв"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> хвіліна"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> хв <xliff:g id="SECONDS">%2$d</xliff:g> с"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> хв <xliff:g id="SECONDS">%2$d</xliff:g> с"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> с"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> секунда"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Без назвы&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Няма нумара тэлефона)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Невядома"</string>
@@ -97,11 +81,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Няма сэрвісу галасавых / экстранных выклікаў"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Часова не прапаноўваецца сеткай мабільнай сувязі ў вашым месцазанходжанні"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Немагчыма падключыцца да сеткі"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Каб палепшыць якасць прыёму, паспрабуйце змяніць тып, выбраны ў меню \"Сістэма &gt; Сетка і інтэрнэт &gt; Мабільныя сеткі &gt; Прыярытэтны тып сеткі\"."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Каб палепшыць якасць прыёму, паспрабуйце змяніць тып, выбраны ў меню \"Налады &gt; Сетка і інтэрнэт &gt; Мабільныя сеткі &gt; Прыярытэтны тып сеткі\"."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi-Fi-тэлефанія актыўная"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Для экстранных выклікаў патрабуецца мабільная сетка."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Абвесткі"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Пераадрасацыя выкліку"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Рэжым экстраннага зваротнага выкліку"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Абвесткі пра мабільныя даныя"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Стан мабільнай перадачы даных"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS-паведамленні"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Паведамленні галасавой пошты"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-тэлефанія"</string>
@@ -1848,4 +1834,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM-карты няма"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM-карта не дапускаецца"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Тэлефон не дапускаецца"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Выплыўное акно"</string>
 </resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index d8b9630..fff112d 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"Б"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"КБ"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"МБ"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"ГБ"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"ТБ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"ПБ"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> дни"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> ден <xliff:g id="HOURS">%2$d</xliff:g> ч"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> ден <xliff:g id="HOURS">%2$d</xliff:g> ч"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ч"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ч <xliff:g id="MINUTES">%2$d</xliff:g> мин"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ч <xliff:g id="MINUTES">%2$d</xliff:g> мин"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> мин"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> мин"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> мин <xliff:g id="SECONDS">%2$d</xliff:g> сек"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> мин <xliff:g id="SECONDS">%2$d</xliff:g> сек"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> сек"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> сек"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Без заглавие&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Няма телефонен номер)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Неизвестно"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Няма услуга за гласови/спешни обаждания"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Временно не се предлага от мобилната мрежа в местоположението ви"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Не може да се установи връзка с мрежата"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"За да подобрите сигнала, променете избрания тип мрежа от „Система“ &gt; „Мрежа и интернет“ &gt; „Мобилни мрежи“ &gt; „Предпочитан тип мрежа“."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"За да подобрите сигнала, променете избрания тип мрежа от „Настройки“ &gt; „Мрежа и интернет“ &gt; „Мобилни мрежи“ &gt; „Предпочитан тип мрежа“."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Функцията за обаждания през Wi-Fi е активна"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"За спешните обаждания се изисква мобилна мрежа."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Сигнали"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Пренасочване на обаждания"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Режим на обратно обаждане при спешност"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Сигнали за мобилните данни"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Състояние на мобилните данни"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS съобщения"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Съобщения в гласовата поща"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Обаждания през Wi-Fi"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM картата не е обезпечена"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM картата не е разрешена"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Телефонът не е разрешен"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Изскачащ прозорец"</string>
 </resources>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index ba4a8f1..5ebfd5c 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"বাইট"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> দিন"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> দিন <xliff:g id="HOURS">%2$d</xliff:g> ঘণ্টা"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> দিন <xliff:g id="HOURS">%2$d</xliff:g> ঘণ্টা"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ঘণ্টা"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ঘণ্টা <xliff:g id="MINUTES">%2$d</xliff:g> মিনিট"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ঘণ্টা <xliff:g id="MINUTES">%2$d</xliff:g> মিনিট"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> মিনিট"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> মিনিট"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> মিনিট <xliff:g id="SECONDS">%2$d</xliff:g> সেকেন্ড"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> মিনিট <xliff:g id="SECONDS">%2$d</xliff:g> সেকেন্ড"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> সেকেন্ড"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> সেকেন্ড"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;শিরোনামহীন&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(কোনো ফোন নম্বর নেই)"</string>
     <string name="unknownName" msgid="6867811765370350269">"অজানা"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"কোনো ভয়েস/জরুরী পরিষেবা নেই"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"সাময়িকভাবে মোবাইল নেটওয়ার্ক আপনার অবস্থানে এই পরিষেবা দিচ্ছে না"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"নেটওয়ার্কের সিগন্যাল নেই"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"রিসেপশন উন্নত করতে সিস্টেম &gt; নেটওয়ার্ক এবং ইন্টারনেট &gt; মোবাইল নেটওয়ার্ক &gt; পছন্দের নেটওয়ার্কের ধরণ এ গিয়ে নির্বাচিত নেটওয়ার্কের ধরণ পরিবর্তন করে দেখুন।"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"রিসেপশন উন্নত করতে সেটিংস &gt; নেটওয়ার্ক এবং ইন্টারনেট &gt; মোবাইল নেটওয়ার্ক &gt; পছন্দের নেটওয়ার্কের ধরণ এ গিয়ে নির্বাচিত নেটওয়ার্কের ধরণ পরিবর্তন করে দেখুন।"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"ওয়াই-ফাই কলিং সক্রিয় আছে"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"জরুরি কলের জন্য মোবাইল নেটওয়ার্ক থাকতে হবে।"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"সতর্কতা"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"কল ফরওয়ার্ড করা"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"জরুরি কলব্যাক মোড"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"মোবাইল ডেটার সতর্কবার্তা"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"মোবাইল ডেটার স্থিতি"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"এসএমএস মেসেজ"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ভয়েসমেল মেসেজ"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"ওয়াই-ফাই কলিং"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"সিম প্রস্তুত নয়"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"সিম অনুমোদিত নয়"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"ফোন অনুমোদিত নয়"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"পপ-আপ উইন্ডো"</string>
 </resources>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index 30f270a..3e703da 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dana"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> d i <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> d i <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> sati"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h i <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h i <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min i <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min i <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> sek"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sek"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Bez naslova&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nema broja telefona)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Nepoznato"</string>
@@ -96,11 +80,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Nema govornih/hitnih usluga"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Trenutno nije u ponudi mobilne mreže na vašoj lokaciji"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Nije moguće dosegnuti mrežu"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Za poboljšanje prijema, pokušajte promijeniti vrstu odabranu u meniju Sistem &gt; Mreža i internet &gt; Mobilne mreže &gt; Preferirana vrsta mreže."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Da poboljšate prijem, pokušajte promijeniti odabranu vrstu u meniju Postavke &lt; Mreža i internet &lt; Mobilne mreže &lt; Preferirana vrsta mreže."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Aktivno je Wi‑Fi pozivanje"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Za hitne pozive potrebna je mreža"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Upozorenja"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Preusmjeravanje poziva"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Način rada za hitni povratni poziv"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Upozorenja za mobilne podatke"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status prijenosa podataka na mobilnoj mreži"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS poruke"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Poruke govorne pošte"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi pozivanje"</string>
@@ -554,8 +540,8 @@
     <string name="permdesc_bindCarrierMessagingService" msgid="2762882888502113944">"Dozvoljava vlasniku povezivanje s interfejsom najvišeg nivoa u servisu za poruke operatera. Nije potrebno za obične aplikacije."</string>
     <string name="permlab_bindCarrierServices" msgid="3233108656245526783">"povezivanje na usluge operatera"</string>
     <string name="permdesc_bindCarrierServices" msgid="1391552602551084192">"Omogućava vlasniku povezivanje sa uslugama operatera. Obično nije potrebno za obične aplikacije."</string>
-    <string name="permlab_access_notification_policy" msgid="4247510821662059671">"pristup opciji Ne ometaj"</string>
-    <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"Omogućava aplikaciji da čita i upisuje konfiguraciju opcije Ne ometaj."</string>
+    <string name="permlab_access_notification_policy" msgid="4247510821662059671">"pristup načinu rada Ne ometaj"</string>
+    <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"Omogućava aplikaciji da čita i upisuje konfiguraciju načina rada Ne ometaj."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Postavljanje pravila za lozinke"</string>
     <string name="policydesc_limitPassword" msgid="2502021457917874968">"Kontrolira dužinu i znakove koji su dozvoljeni u lozinkama za zaključavanje ekrana i PIN-ovima."</string>
     <string name="policylab_watchLogin" msgid="5091404125971980158">"Prati pokušaje otključavanja ekrana"</string>
@@ -1146,7 +1132,7 @@
     <string name="network_switch_metered_detail" msgid="5325661434777870353">"Kada na uređaju <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nema pristup internetu, koristi se <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Moguća je naplata usluge."</string>
     <string name="network_switch_metered_toast" msgid="5779283181685974304">"Prebačeno iz mreže <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> u <xliff:g id="NEW_NETWORK">%2$s</xliff:g> mrežu"</string>
   <string-array name="network_switch_type_name">
-    <item msgid="3979506840912951943">"mobilni podaci"</item>
+    <item msgid="3979506840912951943">"prijenos podataka na mobilnoj mreži"</item>
     <item msgid="75483255295529161">"Wi-Fi"</item>
     <item msgid="6862614801537202646">"Bluetooth"</item>
     <item msgid="5447331121797802871">"Ethernet"</item>
@@ -1701,12 +1687,12 @@
     </plurals>
     <string name="zen_mode_until" msgid="7336308492289875088">"Do <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_alarm" msgid="9128205721301330797">"Do <xliff:g id="FORMATTEDTIME">%1$s</xliff:g> (sljedeći alarm)"</string>
-    <string name="zen_mode_forever" msgid="1916263162129197274">"Dok ne isključite opciju Ne ometaj"</string>
-    <string name="zen_mode_forever_dnd" msgid="3792132696572189081">"Dok ne isključite opciju Ne ometaj"</string>
+    <string name="zen_mode_forever" msgid="1916263162129197274">"Dok ne isključite način rada Ne ometaj"</string>
+    <string name="zen_mode_forever_dnd" msgid="3792132696572189081">"Dok ne isključite način rada Ne ometaj"</string>
     <string name="zen_mode_rule_name_combination" msgid="191109939968076477">"<xliff:g id="FIRST">%1$s</xliff:g>/<xliff:g id="REST">%2$s</xliff:g>"</string>
     <string name="toolbar_collapse_description" msgid="2821479483960330739">"Skupi"</string>
     <string name="zen_mode_feature_name" msgid="5254089399895895004">"Ne ometaj"</string>
-    <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Odmor"</string>
+    <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Prestanak rada"</string>
     <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"Radni dan uvečer"</string>
     <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"Vikend"</string>
     <string name="zen_mode_default_events_name" msgid="8158334939013085363">"Događaj"</string>
@@ -1816,4 +1802,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM kartica nije dodijeljena"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM kartica nije dozvoljena"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefon nije dozvoljen"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Iskočni prozor"</string>
 </resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 24a36b5..e7f6fb6 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dies"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> dia <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> dia <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> hores"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> minuts"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Sense títol&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Sense número de telèfon)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Desconegut"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Sense servei de veu/emergència"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"La xarxa mòbil de la teva ubicació temporalment no ofereix aquest servei"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"No es pot accedir a la xarxa"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Per millorar la recepció, prova de canviar-ne el tipus a Sistema &gt; Xarxa i Internet &gt; Xarxes mòbils &gt; Tipus de xarxa preferit."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Per millorar la recepció, prova de canviar el tipus de xarxa a Configuració &gt; Xarxa i Internet &gt; Xarxes mòbils &gt; Tipus de xarxa preferit."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"La funció Trucades per Wi Fi està activada"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Per poder fer trucades d\'emergència, cal tenir connexió a una xarxa mòbil."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alertes"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Desviació de trucades"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Mode de devolució de trucada d\'emergència"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Alertes de dades mòbils"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Estat de les dades mòbils"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Missatges SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Missatges de veu"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Trucades per Wi-Fi"</string>
@@ -1629,7 +1615,7 @@
     <string name="package_installed_device_owner" msgid="6875717669960212648">"Instal·lat per l\'administrador"</string>
     <string name="package_updated_device_owner" msgid="1847154566357862089">"Actualitzat per l\'administrador"</string>
     <string name="package_deleted_device_owner" msgid="2307122077550236438">"Suprimit per l\'administrador"</string>
-    <string name="battery_saver_description" msgid="1960431123816253034">"Per tal d\'augmentar la durada de la bateria, la funció Estalvi de bateria redueix el rendiment del dispositiu i en limita la vibració, els serveis d\'ubicació i la majoria de dades en segon pla. És possible que el correu electrònic, la missatgeria i la resta d\'aplicacions que se sincronitzen amb freqüència no s\'actualitzin llevat que les obris.\n\nLa funció Estalvi de bateria es desactiva automàticament mentre el dispositiu s\'està carregant."</string>
+    <string name="battery_saver_description" msgid="1960431123816253034">"Per tal d\'augmentar la durada de la bateria, el mode d\'estalvi de bateria redueix el rendiment del dispositiu i en limita la vibració, els serveis d\'ubicació i la majoria de dades en segon pla. És possible que el correu electrònic, la missatgeria i la resta d\'aplicacions que se sincronitzen amb freqüència no s\'actualitzin llevat que les obris.\n\nEl mode d\'estalvi de bateria es desactiva automàticament mentre el dispositiu s\'està carregant."</string>
     <string name="data_saver_description" msgid="6015391409098303235">"Per reduir l\'ús de dades, la funció Economitzador de dades evita que determinades aplicacions enviïn o rebin dades en segon pla. L\'aplicació que estiguis fent servir podrà accedir a dades, però potser ho farà menys sovint. Això vol dir, per exemple, que les imatges no es mostraran fins que no les toquis."</string>
     <string name="data_saver_enable_title" msgid="4674073932722787417">"Activar Economitzador de dades?"</string>
     <string name="data_saver_enable_button" msgid="7147735965247211818">"Activa"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM no proporcionada"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM no compatible"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telèfon no no compatible"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Finestra emergent"</string>
 </resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index c0d4b4b..5266d41 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> d"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> d <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> d <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Bez názvu&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(žádné telefonní číslo)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Není známo"</string>
@@ -97,11 +81,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Hlasová ani tísňová volání nejsou k dispozici"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Mobilní síť ve vaší oblasti tuto službu dočasně nenabízí"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"K síti se nelze připojit"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Chcete-li zlepšit příjem, zkuste změnit vybraný typ sítě v nastavení Systém &gt; Síť a internet &gt; Mobilní sítě &gt; Preferovaný typ sítě."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Chcete-li zlepšit příjem, zkuste změnit vybraný typ sítě v Nastavení &gt; Síť a internet &gt; Mobilní sítě &gt; Preferovaný typ sítě."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Volání přes Wi-Fi je aktivní"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Tísňová volání vyžadují mobilní síť."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Upozornění"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Přesměrování hovorů"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Režim tísňového zpětného volání"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Upozornění na mobilní data"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Stav mobilních dat"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Zprávy SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Hlasové zprávy"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Volání přes Wi-Fi"</string>
@@ -1848,4 +1834,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM karta není poskytována"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM karta není povolena"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefon není povolen"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Vyskakovací okno"</string>
 </resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index ba5d6c3..a96a3dd 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"b"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"Mb"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"Tb"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"Pb"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dage"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> dag <xliff:g id="HOURS">%2$d</xliff:g> t."</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> dag <xliff:g id="HOURS">%2$d</xliff:g> t."</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> timer"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> t. <xliff:g id="MINUTES">%2$d</xliff:g> min."</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> t. <xliff:g id="MINUTES">%2$d</xliff:g> min."</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min."</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min."</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min. <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min. <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> sek."</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sek."</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Uden titel&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Intet telefonnummer)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Ukendt"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Ingen tale- og nødtjenester"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Tilbydes i øjeblikket ikke af mobilnetværket på din placering"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Der er ingen forbindelse til netværket"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Hvis du vil forbedre signalet, kan du prøve at ændre den valgte netværkstype i System &gt; Netværk og internet &gt; Mobilnetværk &gt; Foretrukken netværkstype."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Hvis du vil forbedre signalet, kan du prøve at ændre den valgte netværkstype i Indstillinger &gt; Netværk og internet &gt; Mobilnetværk &gt; Foretrukken netværkstype."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi-opkald er aktiveret"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Nødopkald kræver adgang til et mobilnetværk."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Underretninger"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Viderestilling af opkald"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Nødtilbagekaldstilstand"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Underretninger om mobildata"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status for mobildata"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Sms-beskeder"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Talebeskeder"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-opkald"</string>
@@ -1453,7 +1439,7 @@
     <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Indtast pinkode til SIM-kort"</string>
     <string name="kg_pin_instructions" msgid="2377242233495111557">"Indtast pinkode"</string>
     <string name="kg_password_instructions" msgid="5753646556186936819">"Angiv adgangskode"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-kortet er nu deaktiveret. Indtast PUK-koden for at fortsætte. Kontakt mobiloperatøren for at få flere oplysninger."</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-kortet er nu deaktiveret. Indtast PUK-koden for at fortsætte. Kontakt mobilselskabet for at få flere oplysninger."</string>
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Indtast den ønskede pinkode"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Bekræft den ønskede pinkode"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kortet låses op…"</string>
@@ -1484,7 +1470,7 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%1$d</xliff:g> gange. Efter <xliff:g id="NUMBER_1">%2$d</xliff:g> yderligere mislykkede forsøg til vil du blive bedt om at låse din telefon op ved hjælp af en e-mailkonto.\n\n Prøv igen om <xliff:g id="NUMBER_2">%3$d</xliff:g> sekunder."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Fjern"</string>
-    <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"Vil du skrue højere op end det anbefalede lydstyrkeniveau?\n\nDu kan skade hørelsen ved at lytte til meget højt musik over længere tid."</string>
+    <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"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="8404780875025725199">"Vil du bruge genvejen til Hjælpefunktioner?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"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>
     <string name="disable_accessibility_shortcut" msgid="627625354248453445">"Deaktiver genvej"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM-kortet er ikke aktiveret"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM-kortet har ikke adgangstilladelse"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefonen har ikke adgangstilladelse"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Pop op-vindue"</string>
 </resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 11db706..07c321d2 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> Tage"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> Tag <xliff:g id="HOURS">%2$d</xliff:g> Std."</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> Tag <xliff:g id="HOURS">%2$d</xliff:g> Std."</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> Std."</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> Std. <xliff:g id="MINUTES">%2$d</xliff:g> Min."</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> Std. <xliff:g id="MINUTES">%2$d</xliff:g> Min."</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> Min."</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> Min. <xliff:g id="SECONDS">%2$d</xliff:g> Sek."</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> Min. <xliff:g id="SECONDS">%2$d</xliff:g> Sek."</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> Sek."</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> Sek."</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Unbenannt&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Keine Telefonnummer)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Unbekannt"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Keine Anrufe/Notrufe"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Derzeit nicht im Mobilfunknetz in deiner Region verfügbar"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Netzwerk nicht erreichbar"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Der Empfang lässt sich möglicherweise verbessern, indem du unter \"System\" &gt; \"Netzwerk\" &amp; \"Internet\" &gt; \"Mobilfunknetze\" &gt; \"Bevorzugter Netzwerktyp\" einen anderen Typ auswählst."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Der Empfang lässt sich möglicherweise verbessern, indem du unter \"Einstellungen\" &gt; \"Netzwerk\" &amp; \"Internet\" &gt; \"Mobilfunknetze\" &gt; \"Bevorzugter Netzwerktyp\" einen anderen Typ auswählst."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"\"Anrufe über WLAN\" ist aktiv"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Für Notrufe ist ein Mobilfunknetz erforderlich."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Warnmeldungen"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Anrufweiterleitung"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Notfallrückrufmodus"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Warnmeldungen für mobile Daten"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status der mobilen Datennutzung"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mailboxnachrichten"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Anrufe über WLAN"</string>
@@ -377,7 +363,7 @@
     <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Ermöglicht der App, die Anrufliste deines Tablets zu ändern, einschließlich der Daten über ein- und ausgehende Anrufe. Schädliche Apps können so deine Anrufliste löschen oder ändern."</string>
     <string name="permdesc_writeCallLog" product="tv" msgid="4225034892248398019">"Ermöglicht der App, die Anrufliste deines Fernsehers zu ändern, einschließlich der Daten über ein- und ausgehende Anrufe. Schädliche Apps können so deine Anrufliste löschen oder ändern."</string>
     <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Ermöglicht der App, die Anrufliste deines Telefons zu ändern, einschließlich der Daten über ein- und ausgehende Anrufe. Schädliche Apps können so deine Anrufliste löschen oder ändern."</string>
-    <string name="permlab_bodySensors" msgid="4683341291818520277">"Auf Körpersensoren wie z. B. Herzfrequenzmesser zugreifen"</string>
+    <string name="permlab_bodySensors" msgid="4683341291818520277">"Auf Körpersensoren wie z. B. Pulsmesser zugreifen"</string>
     <string name="permdesc_bodySensors" product="default" msgid="4380015021754180431">"Ermöglicht der App, auf Daten von Sensoren zuzugreifen, die deine körperliche Verfassung überwachen, beispielsweise deinen Puls"</string>
     <string name="permlab_readCalendar" msgid="6716116972752441641">"Kalendertermine und Details lesen"</string>
     <string name="permdesc_readCalendar" product="tablet" msgid="4993979255403945892">"Diese App kann alle auf deinem Tablet gespeicherten Kalendertermine lesen und deine Kalenderdaten teilen oder speichern."</string>
@@ -547,8 +533,8 @@
     <string name="permdesc_handoverStatus" msgid="4788144087245714948">"Ermöglicht dieser App, Informationen zu aktuellen Android Beam-Übertragungen zu erhalten"</string>
     <string name="permlab_removeDrmCertificates" msgid="7044888287209892751">"DRM-Zertifikate entfernen"</string>
     <string name="permdesc_removeDrmCertificates" msgid="7272999075113400993">"Ermöglicht einer App das Entfernen von DRM-Zertifikaten. Sollte für normale Apps nie benötigt werden."</string>
-    <string name="permlab_bindCarrierMessagingService" msgid="1490229371796969158">"An einen Mobilfunkanbieter-SMS/MMS-Dienst binden"</string>
-    <string name="permdesc_bindCarrierMessagingService" msgid="2762882888502113944">"Ermöglicht dem Inhaber die Bindung an die Oberfläche eines Mobilfunkanbieter-SMS/MMS-Dienstes auf oberster Ebene. Für normale Apps sollte dies nie erforderlich sein."</string>
+    <string name="permlab_bindCarrierMessagingService" msgid="1490229371796969158">"An einen Mobilfunkanbieter-Messaging-Dienst binden"</string>
+    <string name="permdesc_bindCarrierMessagingService" msgid="2762882888502113944">"Ermöglicht dem Inhaber die Bindung an die Oberfläche eines Mobilfunkanbieter-Messaging-Dienstes auf oberster Ebene. Für normale Apps sollte dies nie erforderlich sein."</string>
     <string name="permlab_bindCarrierServices" msgid="3233108656245526783">"An Mobilfunkanbieter-Dienste binden"</string>
     <string name="permdesc_bindCarrierServices" msgid="1391552602551084192">"Ermöglicht dem Inhaber die Bindung an Mobilfunkanbieter-Dienste. Für normale Apps sollte dies nicht erforderlich sein."</string>
     <string name="permlab_access_notification_policy" msgid="4247510821662059671">"Auf \"Nicht stören\" zugreifen"</string>
@@ -812,7 +798,7 @@
     <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"Auf dieser Seite bleiben"</string>
     <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nMöchtest du diese Seite wirklich verlassen?"</string>
     <string name="save_password_label" msgid="6860261758665825069">"Bestätigen"</string>
-    <string name="double_tap_toast" msgid="4595046515400268881">"Tipp: Zum Vergrößern und Verkleinern zweimal tippen"</string>
+    <string name="double_tap_toast" msgid="4595046515400268881">"Tipp: Zum Vergrößern und Verkleinern doppeltippen"</string>
     <string name="autofill_this_form" msgid="4616758841157816676">"AutoFill"</string>
     <string name="setup_autofill" msgid="7103495070180590814">"AutoFill konfig."</string>
     <string name="autofill_address_name_separator" msgid="6350145154779706772">" "</string>
@@ -1179,7 +1165,7 @@
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Datum festlegen"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Speichern"</string>
     <string name="date_time_done" msgid="2507683751759308828">"Fertig"</string>
-    <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"Neu: "</font></string>
+    <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"NEU: "</font></string>
     <string name="perms_description_app" msgid="5139836143293299417">"Zur Verfügung gestellt von <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="no_permissions" msgid="7283357728219338112">"Keine Berechtigungen erforderlich"</string>
     <string name="perm_costs_money" msgid="4902470324142151116">"Hierfür können Gebühren anfallen."</string>
@@ -1629,7 +1615,7 @@
     <string name="package_installed_device_owner" msgid="6875717669960212648">"Von deinem Administrator installiert"</string>
     <string name="package_updated_device_owner" msgid="1847154566357862089">"Von deinem Administrator aktualisiert"</string>
     <string name="package_deleted_device_owner" msgid="2307122077550236438">"Von deinem Administrator gelöscht"</string>
-    <string name="battery_saver_description" msgid="1960431123816253034">"Der Energiesparmodus schont den Akku, indem er die Leistung des Geräts reduziert und die Vibrationsfunktion, Standortdienste sowie die meisten Hintergrunddatenaktivitäten einschränkt. E-Mail, SMS/MMS und andere Apps, die auf deinem Gerät synchronisiert werden, werden möglicherweise erst nach dem Öffnen aktualisiert.\n\nDer Energiesparmodus wird automatisch deaktiviert, wenn dein Gerät aufgeladen wird."</string>
+    <string name="battery_saver_description" msgid="1960431123816253034">"Der Energiesparmodus schont den Akku, indem er die Leistung des Geräts reduziert und die Vibrationsfunktion, Standortdienste sowie die meisten Hintergrunddatenaktivitäten einschränkt. E-Mail, Messaging und andere Apps, die auf deinem Gerät synchronisiert werden, werden möglicherweise erst nach dem Öffnen aktualisiert.\n\nDer Energiesparmodus wird automatisch deaktiviert, wenn dein Gerät aufgeladen wird."</string>
     <string name="data_saver_description" msgid="6015391409098303235">"Mit dem Datensparmodus wird die Datennutzung verringert, indem verhindert wird, dass im Hintergrund Daten von Apps gesendet oder empfangen werden. Datenzugriffe sind mit einer aktiven App zwar möglich, erfolgen aber seltener. Als Folge davon könnten Bilder beispielsweise erst dann sichtbar werden, wenn sie angetippt werden."</string>
     <string name="data_saver_enable_title" msgid="4674073932722787417">"Datensparmodus aktivieren?"</string>
     <string name="data_saver_enable_button" msgid="7147735965247211818">"Aktivieren"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM nicht eingerichtet"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM-Karte nicht zulässig"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Smartphone nicht zulässig"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Pop-up-Fenster"</string>
 </resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 624d0d0..2dab4c2 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> ημέρες"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> ημ. <xliff:g id="HOURS">%2$d</xliff:g> ώρες"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> ημ. <xliff:g id="HOURS">%2$d</xliff:g> ώρα"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ώρες"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ώρα <xliff:g id="MINUTES">%2$d</xliff:g> λ"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ώρα <xliff:g id="MINUTES">%2$d</xliff:g> λ"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> λεπτά"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> λεπτά"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> λ. <xliff:g id="SECONDS">%2$d</xliff:g> δευτ."</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> λ <xliff:g id="SECONDS">%2$d</xliff:g> δευτ."</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> δευτ."</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> δευτ."</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Χωρίς τίτλο&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Δεν υπάρχει τηλεφωνικός αριθμός)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Άγνωστο"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Δεν υπάρχει φωνητική υπηρεσία/υπηρεσία έκτακτης ανάγκης"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Δεν προσφέρεται προσωρινά από το δίκτυο κινητής τηλεφωνίας στην τοποθεσία σας"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Δεν είναι δυνατή η σύνδεση στο δίκτυο"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Για να βελτιώσετε τη λήψη, δοκιμάστε να αλλάξετε τον επιλεγμένο τύπο από το Σύστημα &gt; Δίκτυο και διαδίκτυο &gt; Δίκτυα κινητής τηλεφωνίας &gt; Προτιμώμενος τύπος δικτύου."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Για να βελτιώσετε τη λήψη, δοκιμάστε να αλλάξετε τον επιλεγμένο τύπο από τις Ρυθμίσεις &gt; Δίκτυο και διαδίκτυο &gt; Δίκτυα κινητής τηλεφωνίας &gt; Προτιμώμενος τύπος δικτύου."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Η κλήση Wi‑Fi είναι ενεργή"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Για κλήσεις έκτακτης ανάγκης, απαιτείται δίκτυο κινητής τηλεφωνίας."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Ειδοποιήσεις"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Προώθηση κλήσης"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Λειτουργία επιστροφής κλήσης έκτακτης ανάγκης"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Ειδοποιήσεις δεδομένων κινητής τηλεφωνίας"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Κατάσταση δεδομένων κινητής τηλεφωνίας"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Μηνύματα SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Μηνύματα αυτόματου τηλεφωνητή"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Κλήση Wi-Fi"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Δεν παρέχεται κάρτα SIM"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Η κάρτα SIM δεν επιτρέπεται"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Το τηλέφωνο δεν επιτρέπεται"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Αναδυόμενο παράθυρο"</string>
 </resources>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 1d08534..a9c5757 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> days"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> day <xliff:g id="HOURS">%2$d</xliff:g> hrs"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> day <xliff:g id="HOURS">%2$d</xliff:g> hr"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> hrs"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> hr <xliff:g id="MINUTES">%2$d</xliff:g> mins"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> hr <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> mins"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> secs"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sec"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> secs"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sec"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Untitled&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(No phone number)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Unknown"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"No voice/emergency service"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Temporarily not offered by the mobile network at your location"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Can’t find network"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"To improve reception, try changing the type selected at System &gt; Network &amp; Internet &gt; Mobile networks &gt; Preferred network type."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"To improve reception, try changing the type selected at Settings &gt; Network &amp; Internet &gt; Mobile networks &gt; Preferred network type."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi calling is active"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Emergency calls require a mobile network."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alerts"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Call forwarding"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Emergency callback mode"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Mobile data alerts"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Mobile data status"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS messages"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Voicemail messages"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi Calling"</string>
@@ -300,7 +286,7 @@
     <string name="capability_title_canPerformGestures" msgid="7418984730362576862">"Perform gestures"</string>
     <string name="capability_desc_canPerformGestures" msgid="8296373021636981249">"Can tap, swipe, pinch and perform other gestures."</string>
     <string name="capability_title_canCaptureFingerprintGestures" msgid="6309568287512278670">"Fingerprint gestures"</string>
-    <string name="capability_desc_canCaptureFingerprintGestures" msgid="7102111919385702482">"Can capture gestures performed on the devices fingerprint sensor."</string>
+    <string name="capability_desc_canCaptureFingerprintGestures" msgid="7102111919385702482">"Can capture gestures performed on the device\'s fingerprint sensor."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"disable or modify status bar"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Allows the app to disable the status bar or add and remove system icons."</string>
     <string name="permlab_statusBarService" msgid="4826835508226139688">"be the status bar"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM not provisioned"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM not allowed"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Phone not allowed"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Pop-Up Window"</string>
 </resources>
diff --git a/core/res/res/values-en-rCA-watch/strings.xml b/core/res/res/values-en-rCA-watch/strings.xml
new file mode 100644
index 0000000..ac7b671
--- /dev/null
+++ b/core/res/res/values-en-rCA-watch/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2015, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="android_upgrading_apk" msgid="1090732262010398759">"App <xliff:g id="NUMBER_0">%1$d</xliff:g> of <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+    <string name="permgrouplab_sensors" msgid="202675452368612754">"Sensors"</string>
+</resources>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..a9c5757
--- /dev/null
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -0,0 +1,1770 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="byteShort" msgid="8340973892742019101">"B"</string>
+    <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
+    <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <string name="untitled" msgid="4638956954852782576">"&lt;Untitled&gt;"</string>
+    <string name="emptyPhoneNumber" msgid="7694063042079676517">"(No phone number)"</string>
+    <string name="unknownName" msgid="6867811765370350269">"Unknown"</string>
+    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Voicemail"</string>
+    <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
+    <string name="mmiError" msgid="5154499457739052907">"Connection problem or invalid MMI code."</string>
+    <string name="mmiFdnError" msgid="5224398216385316471">"Operation is restricted to fixed dialling numbers only."</string>
+    <string name="mmiErrorWhileRoaming" msgid="762488890299284230">"Cannot change call forwarding settings from your phone while you are roaming."</string>
+    <string name="serviceEnabled" msgid="8147278346414714315">"Service was enabled."</string>
+    <string name="serviceEnabledFor" msgid="6856228140453471041">"Service was enabled for:"</string>
+    <string name="serviceDisabled" msgid="1937553226592516411">"Service has been disabled."</string>
+    <string name="serviceRegistered" msgid="6275019082598102493">"Registration was successful."</string>
+    <string name="serviceErased" msgid="1288584695297200972">"Erase successful."</string>
+    <string name="passwordIncorrect" msgid="7612208839450128715">"Incorrect password."</string>
+    <string name="mmiComplete" msgid="8232527495411698359">"MMI complete."</string>
+    <string name="badPin" msgid="9015277645546710014">"The old PIN that you typed is incorrect."</string>
+    <string name="badPuk" msgid="5487257647081132201">"The PUK that you typed isn\'t correct."</string>
+    <string name="mismatchPin" msgid="609379054496863419">"The PINs that you typed don\'t match."</string>
+    <string name="invalidPin" msgid="3850018445187475377">"Type a PIN that is 4 to 8 numbers."</string>
+    <string name="invalidPuk" msgid="8761456210898036513">"Type a PUK that is 8 numbers or longer."</string>
+    <string name="needPuk" msgid="919668385956251611">"Your SIM card is PUK-locked. Type the PUK code to unlock it."</string>
+    <string name="needPuk2" msgid="4526033371987193070">"Type PUK2 to unblock SIM card."</string>
+    <string name="enablePin" msgid="209412020907207950">"Unsuccessful, enable SIM/RUIM Lock."</string>
+    <plurals name="pinpuk_attempts" formatted="false" msgid="1251012001539225582">
+      <item quantity="other">You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts before SIM is locked.</item>
+      <item quantity="one">You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before SIM is locked.</item>
+    </plurals>
+    <string name="imei" msgid="2625429890869005782">"IMEI"</string>
+    <string name="meid" msgid="4841221237681254195">"MEID"</string>
+    <string name="ClipMmi" msgid="6952821216480289285">"Incoming Caller ID"</string>
+    <string name="ClirMmi" msgid="7784673673446833091">"Outgoing Caller ID"</string>
+    <string name="ColpMmi" msgid="3065121483740183974">"Connected Line ID"</string>
+    <string name="ColrMmi" msgid="4996540314421889589">"Connected Line ID Restriction"</string>
+    <string name="CfMmi" msgid="5123218989141573515">"Call forwarding"</string>
+    <string name="CwMmi" msgid="9129678056795016867">"Call waiting"</string>
+    <string name="BaMmi" msgid="455193067926770581">"Call barring"</string>
+    <string name="PwdMmi" msgid="7043715687905254199">"Password change"</string>
+    <string name="PinMmi" msgid="3113117780361190304">"PIN change"</string>
+    <string name="CnipMmi" msgid="3110534680557857162">"Calling number present"</string>
+    <string name="CnirMmi" msgid="3062102121430548731">"Calling number restricted"</string>
+    <string name="ThreeWCMmi" msgid="9051047170321190368">"Three-way calling"</string>
+    <string name="RuacMmi" msgid="7827887459138308886">"Rejection of undesired annoying calls"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"Calling number delivery"</string>
+    <string name="DndMmi" msgid="1265478932418334331">"Do not disturb"</string>
+    <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"Caller ID defaults to restricted. Next call: Restricted"</string>
+    <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"Caller ID defaults to restricted. Next call: Not restricted"</string>
+    <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"Caller ID defaults to not restricted. Next call: Restricted"</string>
+    <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Caller ID defaults to not restricted. Next call: Not restricted"</string>
+    <string name="serviceNotProvisioned" msgid="8614830180508686666">"Service not provisioned."</string>
+    <string name="CLIRPermanent" msgid="3377371145926835671">"You can\'t change the caller ID setting."</string>
+    <string name="RestrictedOnDataTitle" msgid="1322504692764166532">"No data service"</string>
+    <string name="RestrictedOnEmergencyTitle" msgid="3646729271176394091">"No emergency calling"</string>
+    <string name="RestrictedOnNormalTitle" msgid="3179574012752700984">"No voice service"</string>
+    <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"No voice/emergency service"</string>
+    <string name="RestrictedStateContent" msgid="4278821484643362350">"Temporarily not offered by the mobile network at your location"</string>
+    <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Can’t find network"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"To improve reception, try changing the type selected at Settings &gt; Network &amp; Internet &gt; Mobile networks &gt; Preferred network type."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi calling is active"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Emergency calls require a mobile network."</string>
+    <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alerts"</string>
+    <string name="notification_channel_call_forward" msgid="2419697808481833249">"Call forwarding"</string>
+    <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Emergency callback mode"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Mobile data status"</string>
+    <string name="notification_channel_sms" msgid="3441746047346135073">"SMS messages"</string>
+    <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Voicemail messages"</string>
+    <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi Calling"</string>
+    <string name="peerTtyModeFull" msgid="6165351790010341421">"Peer requested TTY Mode FULL"</string>
+    <string name="peerTtyModeHco" msgid="5728602160669216784">"Peer requested TTY Mode HCO"</string>
+    <string name="peerTtyModeVco" msgid="1742404978686538049">"Peer requested TTY Mode VCO"</string>
+    <string name="peerTtyModeOff" msgid="3280819717850602205">"Peer requested TTY Mode OFF"</string>
+    <string name="serviceClassVoice" msgid="1258393812335258019">"Voice"</string>
+    <string name="serviceClassData" msgid="872456782077937893">"Data"</string>
+    <string name="serviceClassFAX" msgid="5566624998840486475">"FAX"</string>
+    <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
+    <string name="serviceClassDataAsync" msgid="4523454783498551468">"Async"</string>
+    <string name="serviceClassDataSync" msgid="7530000519646054776">"Sync"</string>
+    <string name="serviceClassPacket" msgid="6991006557993423453">"Packet"</string>
+    <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
+    <string name="roamingText0" msgid="7170335472198694945">"Roaming Indicator On"</string>
+    <string name="roamingText1" msgid="5314861519752538922">"Roaming Indicator Off"</string>
+    <string name="roamingText2" msgid="8969929049081268115">"Roaming Indicator Flashing"</string>
+    <string name="roamingText3" msgid="5148255027043943317">"Out of local area"</string>
+    <string name="roamingText4" msgid="8808456682550796530">"Out of Building"</string>
+    <string name="roamingText5" msgid="7604063252850354350">"Roaming - Preferred System"</string>
+    <string name="roamingText6" msgid="2059440825782871513">"Roaming - Available System"</string>
+    <string name="roamingText7" msgid="7112078724097233605">"Roaming - Alliance Partner"</string>
+    <string name="roamingText8" msgid="5989569778604089291">"Roaming - Premium Partner"</string>
+    <string name="roamingText9" msgid="7969296811355152491">"Roaming - Full Service Functionality"</string>
+    <string name="roamingText10" msgid="3992906999815316417">"Roaming - Partial Service Functionality"</string>
+    <string name="roamingText11" msgid="4154476854426920970">"Roaming Banner On"</string>
+    <string name="roamingText12" msgid="1189071119992726320">"Roaming Banner Off"</string>
+    <string name="roamingTextSearching" msgid="8360141885972279963">"Searching for Service"</string>
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"Wi-Fi Calling"</string>
+  <string-array name="wfcOperatorErrorAlertMessages">
+    <item msgid="3910386316304772394">"To make calls and send messages over Wi-Fi, first ask your operator to set up this service. Then turn on Wi-Fi calling again from Settings. (Error code: <xliff:g id="CODE">%1$s</xliff:g>)"</item>
+  </string-array>
+  <string-array name="wfcOperatorErrorNotificationMessages">
+    <item msgid="7472393097168811593">"Register with your operator (Error code: <xliff:g id="CODE">%1$s</xliff:g>)"</item>
+  </string-array>
+  <string-array name="wfcSpnFormats">
+    <item msgid="6830082633573257149">"%s"</item>
+    <item msgid="4397097370387921767">"%s Wi-Fi Calling"</item>
+  </string-array>
+    <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Off"</string>
+    <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi preferred"</string>
+    <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"Mobile preferred"</string>
+    <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Wi-Fi only"</string>
+    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Not forwarded"</string>
+    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> after <xliff:g id="TIME_DELAY">{2}</xliff:g> seconds"</string>
+    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Not forwarded"</string>
+    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Not forwarded"</string>
+    <string name="fcComplete" msgid="3118848230966886575">"Feature code complete."</string>
+    <string name="fcError" msgid="3327560126588500777">"Connection problem or invalid feature code."</string>
+    <string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
+    <string name="httpError" msgid="7956392511146698522">"There was a network error."</string>
+    <string name="httpErrorLookup" msgid="4711687456111963163">"Couldn\'t find the URL."</string>
+    <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"The site authentication scheme isn\'t supported."</string>
+    <string name="httpErrorAuth" msgid="1435065629438044534">"Couldn\'t authenticate."</string>
+    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"Authentication via the proxy server was unsuccessful."</string>
+    <string name="httpErrorConnect" msgid="8714273236364640549">"Couldn\'t connect to the server."</string>
+    <string name="httpErrorIO" msgid="2340558197489302188">"Couldn\'t communicate with the server. Try again later."</string>
+    <string name="httpErrorTimeout" msgid="4743403703762883954">"The connection to the server timed out."</string>
+    <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"The page contains too many server redirects."</string>
+    <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"The protocol isn\'t supported."</string>
+    <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"Couldn\'t establish a secure connection."</string>
+    <string name="httpErrorBadUrl" msgid="3636929722728881972">"Couldn\'t open the page because the URL is invalid."</string>
+    <string name="httpErrorFile" msgid="2170788515052558676">"Couldn\'t access the file."</string>
+    <string name="httpErrorFileNotFound" msgid="6203856612042655084">"Couldn\'t find the requested file."</string>
+    <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Too many requests are being processed. Try again later."</string>
+    <string name="notification_title" msgid="8967710025036163822">"Sign-in error for <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
+    <string name="contentServiceSync" msgid="8353523060269335667">"Sync"</string>
+    <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sync"</string>
+    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Too many <xliff:g id="CONTENT_TYPE">%s</xliff:g> deletions."</string>
+    <string name="low_memory" product="tablet" msgid="6494019234102154896">"Tablet storage is full. Delete some files to free space."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Watch storage is full. Delete some files to free up space."</string>
+    <string name="low_memory" product="tv" msgid="516619861191025923">"TV storage is full. Delete some files to free space."</string>
+    <string name="low_memory" product="default" msgid="3475999286680000541">"Phone storage is full. Delete some files to free space."</string>
+    <plurals name="ssl_ca_cert_warning" formatted="false" msgid="5106721205300213569">
+      <item quantity="other">Certificate authorities installed</item>
+      <item quantity="one">Certificate authority installed</item>
+    </plurals>
+    <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"By an unknown third party"</string>
+    <string name="ssl_ca_cert_noti_by_administrator" msgid="3541729986326153557">"By your work profile admin"</string>
+    <string name="ssl_ca_cert_noti_managed" msgid="4030263497686867141">"By <xliff:g id="MANAGING_DOMAIN">%s</xliff:g>"</string>
+    <string name="work_profile_deleted" msgid="5005572078641980632">"Work profile deleted"</string>
+    <string name="work_profile_deleted_description" msgid="1100529432509639864">"Work profile deleted due to missing admin app"</string>
+    <string name="work_profile_deleted_details" msgid="6307630639269092360">"The work profile admin app is either missing or corrupted. As a result, your work profile and related data have been deleted. Contact your admin for assistance."</string>
+    <string name="work_profile_deleted_description_dpm_wipe" msgid="8823792115612348820">"Your work profile is no longer available on this device"</string>
+    <string name="network_logging_notification_title" msgid="6399790108123704477">"Device is managed"</string>
+    <string name="network_logging_notification_text" msgid="7930089249949354026">"Your organisation manages this device and may monitor network traffic. Tap for details."</string>
+    <string name="factory_reset_warning" msgid="5423253125642394387">"Your device will be erased"</string>
+    <string name="factory_reset_message" msgid="7972496262232832457">"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="me" msgid="6545696007631404292">"Me"</string>
+    <string name="power_dialog" product="tablet" msgid="8545351420865202853">"Tablet options"</string>
+    <string name="power_dialog" product="tv" msgid="6153888706430556356">"TV options"</string>
+    <string name="power_dialog" product="default" msgid="1319919075463988638">"Phone options"</string>
+    <string name="silent_mode" msgid="7167703389802618663">"Silent mode"</string>
+    <string name="turn_on_radio" msgid="3912793092339962371">"Turn on wireless"</string>
+    <string name="turn_off_radio" msgid="8198784949987062346">"Turn off wireless"</string>
+    <string name="screen_lock" msgid="799094655496098153">"Screen lock"</string>
+    <string name="power_off" msgid="4266614107412865048">"Power off"</string>
+    <string name="silent_mode_silent" msgid="319298163018473078">"Ringer off"</string>
+    <string name="silent_mode_vibrate" msgid="7072043388581551395">"Ringer vibrate"</string>
+    <string name="silent_mode_ring" msgid="8592241816194074353">"Ringer on"</string>
+    <string name="reboot_to_update_title" msgid="6212636802536823850">"Android system update"</string>
+    <string name="reboot_to_update_prepare" msgid="6305853831955310890">"Preparing to update…"</string>
+    <string name="reboot_to_update_package" msgid="3871302324500927291">"Processing the update package…"</string>
+    <string name="reboot_to_update_reboot" msgid="6428441000951565185">"Restarting…"</string>
+    <string name="reboot_to_reset_title" msgid="4142355915340627490">"Factory data reset"</string>
+    <string name="reboot_to_reset_message" msgid="2432077491101416345">"Restarting…"</string>
+    <string name="shutdown_progress" msgid="2281079257329981203">"Shutting down…"</string>
+    <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Your tablet will shut down."</string>
+    <string name="shutdown_confirm" product="tv" msgid="476672373995075359">"Your TV will shut down."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Your watch will shut down."</string>
+    <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Your phone will shut down."</string>
+    <string name="shutdown_confirm_question" msgid="2906544768881136183">"Do you want to shut down?"</string>
+    <string name="reboot_safemode_title" msgid="7054509914500140361">"Reboot to safe mode"</string>
+    <string name="reboot_safemode_confirm" msgid="55293944502784668">"Do you want to reboot into safe mode? This will disable all third-party applications that you have installed. They will be restored when you reboot again."</string>
+    <string name="recent_tasks_title" msgid="3691764623638127888">"Recent"</string>
+    <string name="no_recent_tasks" msgid="8794906658732193473">"No recent apps"</string>
+    <string name="global_actions" product="tablet" msgid="408477140088053665">"Tablet options"</string>
+    <string name="global_actions" product="tv" msgid="7240386462508182976">"TV options"</string>
+    <string name="global_actions" product="default" msgid="2406416831541615258">"Phone options"</string>
+    <string name="global_action_lock" msgid="2844945191792119712">"Screen lock"</string>
+    <string name="global_action_power_off" msgid="4471879440839879722">"Power off"</string>
+    <string name="global_action_emergency" msgid="7112311161137421166">"Emergency"</string>
+    <string name="global_action_bug_report" msgid="7934010578922304799">"Bug report"</string>
+    <string name="bugreport_title" msgid="2667494803742548533">"Take bug report"</string>
+    <string name="bugreport_message" msgid="398447048750350456">"This will collect information about your current device state, to send as an email message. It will take a little time from starting the bug report until it is ready to be sent. Please be patient."</string>
+    <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"Interactive report"</string>
+    <string name="bugreport_option_interactive_summary" msgid="229299488536107968">"Use this under most circumstances. It allows you to track progress of the report, enter more details about the problem and take screenshots. It might omit some less-used sections that take a long time to report."</string>
+    <string name="bugreport_option_full_title" msgid="6354382025840076439">"Full report"</string>
+    <string name="bugreport_option_full_summary" msgid="7210859858969115745">"Use this option for minimal system interference when your device is unresponsive or too slow, or when you need all report sections. Does not allow you to enter more details or take additional screenshots."</string>
+    <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+      <item quantity="other">Taking screenshot for bug report in <xliff:g id="NUMBER_1">%d</xliff:g> seconds.</item>
+      <item quantity="one">Taking screenshot for bug report in <xliff:g id="NUMBER_0">%d</xliff:g> second.</item>
+    </plurals>
+    <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Silent mode"</string>
+    <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Sound is OFF"</string>
+    <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Sound is ON"</string>
+    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Aeroplane mode"</string>
+    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Aeroplane mode is ON"</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Aeroplane mode is OFF"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Settings"</string>
+    <string name="global_action_assist" msgid="3892832961594295030">"Assist"</string>
+    <string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string>
+    <string name="global_action_lockdown" msgid="8751542514724332873">"Lock now"</string>
+    <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
+    <string name="notification_hidden_text" msgid="6351207030447943784">"New notification"</string>
+    <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtual keyboard"</string>
+    <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Physical keyboard"</string>
+    <string name="notification_channel_security" msgid="7345516133431326347">"Security"</string>
+    <string name="notification_channel_car_mode" msgid="3553380307619874564">"Car mode"</string>
+    <string name="notification_channel_account" msgid="7577959168463122027">"Account status"</string>
+    <string name="notification_channel_developer" msgid="7579606426860206060">"Developer messages"</string>
+    <string name="notification_channel_updates" msgid="4794517569035110397">"Updates"</string>
+    <string name="notification_channel_network_status" msgid="5025648583129035447">"Network status"</string>
+    <string name="notification_channel_network_alerts" msgid="2895141221414156525">"Network alerts"</string>
+    <string name="notification_channel_network_available" msgid="4531717914138179517">"Network available"</string>
+    <string name="notification_channel_vpn" msgid="8330103431055860618">"VPN status"</string>
+    <string name="notification_channel_device_admin" msgid="1568154104368069249">"Device administration"</string>
+    <string name="notification_channel_alerts" msgid="4496839309318519037">"Alerts"</string>
+    <string name="notification_channel_retail_mode" msgid="6088920674914038779">"Retail demo"</string>
+    <string name="notification_channel_usb" msgid="9006850475328924681">"USB connection"</string>
+    <string name="notification_channel_foreground_service" msgid="3931987440602669158">"Apps consuming battery"</string>
+    <string name="foreground_service_app_in_background" msgid="1060198778219731292">"<xliff:g id="APP_NAME">%1$s</xliff:g> is using battery"</string>
+    <string name="foreground_service_apps_in_background" msgid="7175032677643332242">"<xliff:g id="NUMBER">%1$d</xliff:g> apps are using battery"</string>
+    <string name="foreground_service_tap_for_details" msgid="372046743534354644">"Tap for details on battery and data usage"</string>
+    <string name="foreground_service_multiple_separator" msgid="4021901567939866542">"<xliff:g id="LEFT_SIDE">%1$s</xliff:g>, <xliff:g id="RIGHT_SIDE">%2$s</xliff:g>"</string>
+    <string name="safeMode" msgid="2788228061547930246">"Safe mode"</string>
+    <string name="android_system_label" msgid="6577375335728551336">"Android system"</string>
+    <string name="user_owner_label" msgid="1119010402169916617">"Switch to Personal"</string>
+    <string name="managed_profile_label" msgid="5289992269827577857">"Switch to Work"</string>
+    <string name="permgrouplab_contacts" msgid="3657758145679177612">"Contacts"</string>
+    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"access your contacts"</string>
+    <string name="permgrouplab_location" msgid="7275582855722310164">"Location"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"access this device\'s location"</string>
+    <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendar"</string>
+    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"access your calendar"</string>
+    <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"send and view SMS messages"</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"Storage"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"access photos, media and files on your device"</string>
+    <string name="permgrouplab_microphone" msgid="171539900250043464">"Microphone"</string>
+    <string name="permgroupdesc_microphone" msgid="4988812113943554584">"record audio"</string>
+    <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string>
+    <string name="permgroupdesc_camera" msgid="3250611594678347720">"take pictures and record video"</string>
+    <string name="permgrouplab_phone" msgid="5229115638567440675">"Telephone"</string>
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"make and manage phone calls"</string>
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"Body sensors"</string>
+    <string name="permgroupdesc_sensors" msgid="7147968539346634043">"access sensor data about your vital signs"</string>
+    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Retrieve window content"</string>
+    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspect the content of a window that you\'re interacting with."</string>
+    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Turn on Explore by Touch"</string>
+    <string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"Tapped items will be spoken aloud and the screen can be explored using gestures."</string>
+    <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Observe text that you type"</string>
+    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Includes personal data such as credit card numbers and passwords."</string>
+    <string name="capability_title_canControlMagnification" msgid="3593493281059424855">"Control display magnification"</string>
+    <string name="capability_desc_canControlMagnification" msgid="4791858203568383773">"Control the display\'s zoom level and positioning."</string>
+    <string name="capability_title_canPerformGestures" msgid="7418984730362576862">"Perform gestures"</string>
+    <string name="capability_desc_canPerformGestures" msgid="8296373021636981249">"Can tap, swipe, pinch and perform other gestures."</string>
+    <string name="capability_title_canCaptureFingerprintGestures" msgid="6309568287512278670">"Fingerprint gestures"</string>
+    <string name="capability_desc_canCaptureFingerprintGestures" msgid="7102111919385702482">"Can capture gestures performed on the device\'s fingerprint sensor."</string>
+    <string name="permlab_statusBar" msgid="7417192629601890791">"disable or modify status bar"</string>
+    <string name="permdesc_statusBar" msgid="8434669549504290975">"Allows the app to disable the status bar or add and remove system icons."</string>
+    <string name="permlab_statusBarService" msgid="4826835508226139688">"be the status bar"</string>
+    <string name="permdesc_statusBarService" msgid="716113660795976060">"Allows the app to be the status bar."</string>
+    <string name="permlab_expandStatusBar" msgid="1148198785937489264">"expand/collapse status bar"</string>
+    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Allows the app to expand or collapse the status bar."</string>
+    <string name="permlab_install_shortcut" msgid="4279070216371564234">"Install shortcuts"</string>
+    <string name="permdesc_install_shortcut" msgid="8341295916286736996">"Allows an application to add Home screen shortcuts without user intervention."</string>
+    <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"uninstall shortcuts"</string>
+    <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Allows the application to remove Home screen shortcuts without user intervention."</string>
+    <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"reroute outgoing calls"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Allows the app to see the number being dialled during an outgoing call with the option to redirect the call to a different number or abort the call altogether."</string>
+    <string name="permlab_answerPhoneCalls" msgid="4077162841226223337">"answer phone calls"</string>
+    <string name="permdesc_answerPhoneCalls" msgid="2901889867993572266">"Allows the app to answer an incoming phone call."</string>
+    <string name="permlab_receiveSms" msgid="8673471768947895082">"receive text messages (SMS)"</string>
+    <string name="permdesc_receiveSms" msgid="6424387754228766939">"Allows the app to receive and process SMS messages. This means that the app could monitor or delete messages sent to your device without showing them to you."</string>
+    <string name="permlab_receiveMms" msgid="1821317344668257098">"receive text messages (MMS)"</string>
+    <string name="permdesc_receiveMms" msgid="533019437263212260">"Allows the app to receive and process MMS messages. This means that the app could monitor or delete messages sent to your device without showing them to you."</string>
+    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"read mobile broadcast messages"</string>
+    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Allows the app to read mobile broadcast messages received by your device. Cell broadcast alerts are delivered in some locations to warn you of emergency situations. Malicious apps may interfere with the performance or operation of your device when an emergency mobile broadcast is received."</string>
+    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"read subscribed feeds"</string>
+    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Allows the app to get details about the currently synced feeds."</string>
+    <string name="permlab_sendSms" msgid="7544599214260982981">"send and view SMS messages"</string>
+    <string name="permdesc_sendSms" msgid="7094729298204937667">"Allows the app to send SMS messages. This may result in unexpected charges. Malicious apps may cost you money by sending messages without your confirmation."</string>
+    <string name="permlab_readSms" msgid="8745086572213270480">"read your text messages (SMS or MMS)"</string>
+    <string name="permdesc_readSms" product="tablet" msgid="4741697454888074891">"This app can read all SMS (text) messages stored on your tablet."</string>
+    <string name="permdesc_readSms" product="tv" msgid="5796670395641116592">"This app can read all SMS (text) messages stored on your TV."</string>
+    <string name="permdesc_readSms" product="default" msgid="6826832415656437652">"This app can read all SMS (text) messages stored on your phone."</string>
+    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"receive text messages (WAP)"</string>
+    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Allows the app to receive and process WAP messages. This permission includes the ability to monitor or delete messages sent to you without showing them to you."</string>
+    <string name="permlab_getTasks" msgid="6466095396623933906">"retrieve running apps"</string>
+    <string name="permdesc_getTasks" msgid="7454215995847658102">"Allows the app to retrieve information about currently and recently running tasks. This may allow the app to discover information about which applications are used on the device."</string>
+    <string name="permlab_manageProfileAndDeviceOwners" msgid="7918181259098220004">"manage profile and device owners"</string>
+    <string name="permdesc_manageProfileAndDeviceOwners" msgid="106894851498657169">"Allows apps to set the profile owners and the device owner."</string>
+    <string name="permlab_reorderTasks" msgid="2018575526934422779">"re-order running apps"</string>
+    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"Allows the app to move tasks to the foreground and background. The app may do this without your input."</string>
+    <string name="permlab_enableCarMode" msgid="5684504058192921098">"enable car mode"</string>
+    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Allows the app to enable the car mode."</string>
+    <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"close other apps"</string>
+    <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"Allows the app to end background processes of other apps. This may cause other apps to stop running."</string>
+    <string name="permlab_systemAlertWindow" msgid="7238805243128138690">"This app can appear on top of other apps"</string>
+    <string name="permdesc_systemAlertWindow" msgid="2393776099672266188">"This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear."</string>
+    <string name="permlab_runInBackground" msgid="7365290743781858803">"run in the background"</string>
+    <string name="permdesc_runInBackground" msgid="7370142232209999824">"This app can run in the background. This may drain battery faster."</string>
+    <string name="permlab_useDataInBackground" msgid="8694951340794341809">"use data in the background"</string>
+    <string name="permdesc_useDataInBackground" msgid="6049514223791806027">"This app can use data in the background. This may increase data usage."</string>
+    <string name="permlab_persistentActivity" msgid="8841113627955563938">"make app always run"</string>
+    <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"Allows the app to make parts of itself persistent in memory. This can limit the memory available to other apps, slowing down the tablet."</string>
+    <string name="permdesc_persistentActivity" product="tv" msgid="5086862529499103587">"Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the TV."</string>
+    <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"Allows the app to make parts of itself persistent in memory. This can limit the memory available to other apps, slowing down the phone."</string>
+    <string name="permlab_getPackageSize" msgid="7472921768357981986">"measure app storage space"</string>
+    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Allows the app to retrieve its code, data and cache sizes"</string>
+    <string name="permlab_writeSettings" msgid="2226195290955224730">"modify system settings"</string>
+    <string name="permdesc_writeSettings" msgid="7775723441558907181">"Allows the app to modify the system\'s settings data. Malicious apps may corrupt your system\'s configuration."</string>
+    <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"run at startup"</string>
+    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Allows the app to have itself started as soon as the system has finished booting. This can make it take longer to start the tablet and allow the app to slow down the overall tablet by always running."</string>
+    <string name="permdesc_receiveBootCompleted" product="tv" msgid="4525890122209673621">"Allows the app to have itself started as soon as the system has finished booting. This can make it take longer to start the TV and allow the app to slow down the overall tablet by always running."</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Allows the app to have itself started as soon as the system has finished booting. This can make it take longer to start the phone and allow the app to slow down the overall phone by always running."</string>
+    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"send sticky broadcast"</string>
+    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"Allows the app to send sticky broadcasts, which remain after the broadcast ends. Excessive use may make the tablet slow or unstable by causing it to use too much memory."</string>
+    <string name="permdesc_broadcastSticky" product="tv" msgid="6839285697565389467">"Allows the app to send sticky broadcasts, which remain after the broadcast ends. Excessive use may make the TV slow or unstable by causing it to use too much memory."</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"Allows the app to send sticky broadcasts, which remain after the broadcast ends. Excessive use may make the phone slow or unstable by causing it to use too much memory."</string>
+    <string name="permlab_readContacts" msgid="8348481131899886131">"read your contacts"</string>
+    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"Allows the app to read data about your contacts stored on your tablet, including the frequency with which you\'ve called, emailed or communicated in other ways with specific individuals. This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge."</string>
+    <string name="permdesc_readContacts" product="tv" msgid="1839238344654834087">"Allows the app to read data about your contacts stored on your TV, including the frequency with which you\'ve called, emailed or communicated in other ways with specific individuals. This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge."</string>
+    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"Allows the app to read data about your contacts stored on your phone, including the frequency with which you\'ve called, emailed or communicated in other ways with specific individuals. This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge."</string>
+    <string name="permlab_writeContacts" msgid="5107492086416793544">"modify your contacts"</string>
+    <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"Allows the app to modify the data about your contacts stored on your tablet, including the frequency with which you\'ve called, emailed or communicated in other ways with specific contacts. This permission allows apps to delete contact data."</string>
+    <string name="permdesc_writeContacts" product="tv" msgid="5438230957000018959">"Allows the app to modify the data about your contacts stored on your TV, including the frequency with which you\'ve called, emailed or communicated in other ways with specific contacts. This permission allows apps to delete contact data."</string>
+    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"Allows the app to modify the data about your contacts stored on your phone, including the frequency with which you\'ve called, emailed or communicated in other ways with specific contacts. This permission allows apps to delete contact data."</string>
+    <string name="permlab_readCallLog" msgid="3478133184624102739">"read call log"</string>
+    <string name="permdesc_readCallLog" msgid="3204122446463552146">"This app can read your call history."</string>
+    <string name="permlab_writeCallLog" msgid="8552045664743499354">"write call log"</string>
+    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Allows the app to modify your tablet\'s call log, including data about incoming and outgoing calls. Malicious apps may use this to erase or modify your call log."</string>
+    <string name="permdesc_writeCallLog" product="tv" msgid="4225034892248398019">"Allows the app to modify your TV\'s call log, including data about incoming and outgoing calls. Malicious apps may use this to erase or modify your call log."</string>
+    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Allows the app to modify your phone\'s call log, including data about incoming and outgoing calls. Malicious apps may use this to erase or modify your call log."</string>
+    <string name="permlab_bodySensors" msgid="4683341291818520277">"access body sensors (like heart rate monitors)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="4380015021754180431">"Allows the app to access data from sensors that monitor your physical condition, such as your heart rate."</string>
+    <string name="permlab_readCalendar" msgid="6716116972752441641">"Read calendar events and details"</string>
+    <string name="permdesc_readCalendar" product="tablet" msgid="4993979255403945892">"This app can read all calendar events stored on your tablet and share or save your calendar data."</string>
+    <string name="permdesc_readCalendar" product="tv" msgid="8837931557573064315">"This app can read all calendar events stored on your TV and share or save your calendar data."</string>
+    <string name="permdesc_readCalendar" product="default" msgid="4373978642145196715">"This app can read all calendar events stored on your phone and share or save your calendar data."</string>
+    <string name="permlab_writeCalendar" msgid="8438874755193825647">"add or modify calendar events and send emails to guests without owners\' knowledge"</string>
+    <string name="permdesc_writeCalendar" product="tablet" msgid="1675270619903625982">"This app can add, remove or change calendar events on your tablet. This app can send messages that may appear to come from calendar owners or change events without notifying their owners."</string>
+    <string name="permdesc_writeCalendar" product="tv" msgid="9017809326268135866">"This app can add, remove or change calendar events on your TV. This app can send messages that may appear to come from calendar owners or change events without notifying their owners."</string>
+    <string name="permdesc_writeCalendar" product="default" msgid="7592791790516943173">"This app can add, remove or change calendar events on your phone. This app can send messages that may appear to come from calendar owners or change events without notifying their owners."</string>
+    <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"access extra location provider commands"</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="6078307221056649927">"Allows the app to access extra location provider commands. This may allow the app to interfere with the operation of the GPS or other location sources."</string>
+    <string name="permlab_accessFineLocation" msgid="251034415460950944">"access precise location (GPS and network-based)"</string>
+    <string name="permdesc_accessFineLocation" msgid="5821994817969957884">"This app can get your location based on GPS or network location sources such as phone masts and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them. This may increase battery consumption."</string>
+    <string name="permlab_accessCoarseLocation" msgid="7715277613928539434">"access approximate location (network-based)"</string>
+    <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3373266766487862426">"This app can pick up your location based on network sources such as phone masts and Wi-Fi networks. These location services must be turned on and available on your tablet for the app to be able to use them."</string>
+    <string name="permdesc_accessCoarseLocation" product="tv" msgid="1884022719818788511">"This app can pick up your location based on network sources such as mobile towers and Wi-Fi networks. These location services must be turned on and available on your TV for the app to be able to use them."</string>
+    <string name="permdesc_accessCoarseLocation" product="default" msgid="7788009094906196995">"This app can get your location based on network sources such as phone masts and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them."</string>
+    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"change your audio settings"</string>
+    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Allows the app to modify global audio settings such as volume and which speaker is used for output."</string>
+    <string name="permlab_recordAudio" msgid="3876049771427466323">"record audio"</string>
+    <string name="permdesc_recordAudio" msgid="4245930455135321433">"This app can record audio using the microphone at any time."</string>
+    <string name="permlab_sim_communication" msgid="2935852302216852065">"send commands to the SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Allows the app to send commands to the SIM. This is very dangerous."</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"take pictures and videos"</string>
+    <string name="permdesc_camera" msgid="5392231870049240670">"This app can take pictures and record videos using the camera at any time."</string>
+    <string name="permlab_vibrate" msgid="7696427026057705834">"control vibration"</string>
+    <string name="permdesc_vibrate" msgid="6284989245902300945">"Allows the app to control the vibrator."</string>
+    <string name="permlab_callPhone" msgid="3925836347681847954">"directly call phone numbers"</string>
+    <string name="permdesc_callPhone" msgid="3740797576113760827">"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="3574943847181793918">"access IMS call service"</string>
+    <string name="permdesc_accessImsCallService" msgid="8992884015198298775">"Allows the app to use the IMS service to make calls without your intervention."</string>
+    <string name="permlab_readPhoneState" msgid="9178228524507610486">"read phone status and identity"</string>
+    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Allows the app to access the phone features of the device. This permission allows the app to determine the phone number and device IDs, whether a call is active and the remote number connected by a call."</string>
+    <string name="permlab_manageOwnCalls" msgid="1503034913274622244">"route calls through the system"</string>
+    <string name="permdesc_manageOwnCalls" msgid="6552974537554717418">"Allows the app to route its calls through the system in order to improve the calling experience."</string>
+    <string name="permlab_readPhoneNumbers" msgid="6108163940932852440">"read phone numbers"</string>
+    <string name="permdesc_readPhoneNumbers" msgid="8559488833662272354">"Allows the app to access the phone numbers of the device."</string>
+    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"prevent tablet from sleeping"</string>
+    <string name="permlab_wakeLock" product="tv" msgid="2601193288949154131">"prevent TV from sleeping"</string>
+    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"prevent phone from sleeping"</string>
+    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Allows the app to prevent the tablet from going to sleep."</string>
+    <string name="permdesc_wakeLock" product="tv" msgid="3208534859208996974">"Allows the app to prevent the TV from going to sleep."</string>
+    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Allows the app to prevent the phone from going to sleep."</string>
+    <string name="permlab_transmitIr" msgid="7545858504238530105">"transmit infrared"</string>
+    <string name="permdesc_transmitIr" product="tablet" msgid="5358308854306529170">"Allows the app to use the tablet\'s infrared transmitter."</string>
+    <string name="permdesc_transmitIr" product="tv" msgid="3926790828514867101">"Allows the app to use the TV\'s infrared transmitter."</string>
+    <string name="permdesc_transmitIr" product="default" msgid="7957763745020300725">"Allows the app to use the phone\'s infrared transmitter."</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"set wallpaper"</string>
+    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Allows the app to set the system wallpaper."</string>
+    <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"adjust your wallpaper size"</string>
+    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Allows the app to set the system wallpaper size hints."</string>
+    <string name="permlab_setTimeZone" msgid="2945079801013077340">"set time zone"</string>
+    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"Allows the app to change the tablet\'s time zone."</string>
+    <string name="permdesc_setTimeZone" product="tv" msgid="888864653946175955">"Allows the app to change the TV\'s time zone."</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Allows the app to change the phone\'s time zone."</string>
+    <string name="permlab_getAccounts" msgid="1086795467760122114">"find accounts on the device"</string>
+    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"Allows the app to get the list of accounts known by the tablet. This may include any accounts created by applications that you have installed."</string>
+    <string name="permdesc_getAccounts" product="tv" msgid="4190633395633907543">"Allows the app to get the list of accounts known by the TV. This may include any accounts created by applications that you have installed."</string>
+    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"Allows the app to get the list of accounts known by the phone. This may include any accounts created by applications that you have installed."</string>
+    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"view network connections"</string>
+    <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"Allows the app to view information about network connections such as which networks exist and are connected."</string>
+    <string name="permlab_createNetworkSockets" msgid="7934516631384168107">"have full network access"</string>
+    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"Allows the app to create network sockets and use customised network protocols. The browser and other applications provide means to send data to the Internet, so this permission is not required to send data to the Internet."</string>
+    <string name="permlab_changeNetworkState" msgid="958884291454327309">"change network connectivity"</string>
+    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"Allows the app to change the state of network connectivity."</string>
+    <string name="permlab_changeTetherState" msgid="5952584964373017960">"change tethered connectivity"</string>
+    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Allows the app to change the state of tethered network connectivity."</string>
+    <string name="permlab_accessWifiState" msgid="5202012949247040011">"view Wi-Fi connections"</string>
+    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Allows the app to view information about Wi-Fi networking, such as whether Wi-Fi is enabled and name of connected Wi-Fi devices."</string>
+    <string name="permlab_changeWifiState" msgid="6550641188749128035">"Connect and disconnect from Wi-Fi"</string>
+    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Allows the app to connect to and disconnect from Wi-Fi access points and to make changes to device configuration for Wi-Fi networks."</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"allow Wi-Fi Multicast reception"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"Allows the app to receive packets sent to all devices on a Wi-Fi network using multicast addresses, not just your tablet. It uses more power than the non-multicast mode."</string>
+    <string name="permdesc_changeWifiMulticastState" product="tv" msgid="9031975661145014160">"Allows the app to receive packets sent to all devices on a Wi-Fi network using multicast addresses, not just your TV. It uses more power than the non-multicast mode."</string>
+    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"Allows the app to receive packets sent to all devices on a Wi-Fi network using multicast addresses, not just your phone. It uses more power than the non-multicast mode."</string>
+    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Access Bluetooth settings"</string>
+    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Allows the app to configure the local Bluetooth tablet and to discover and pair with remote devices."</string>
+    <string name="permdesc_bluetoothAdmin" product="tv" msgid="3373125682645601429">"Allows the app to configure the local Bluetooth TV, and to discover and pair with remote devices."</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Allows the app to configure the local Bluetooth phone and to discover and pair with remote devices."</string>
+    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"connect and disconnect from WiMAX"</string>
+    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Allows the app to determine whether WiMAX is enabled and information about any WiMAX networks that are connected."</string>
+    <string name="permlab_changeWimaxState" msgid="340465839241528618">"change WiMAX state"</string>
+    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Allows the app to connect the tablet to and disconnect the tablet from WiMAX networks."</string>
+    <string name="permdesc_changeWimaxState" product="tv" msgid="6022307083934827718">"Allows the app to connect the TV to and disconnect the TV from WiMAX networks."</string>
+    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Allows the app to connect the phone to and disconnect the phone from WiMAX networks."</string>
+    <string name="permlab_bluetooth" msgid="6127769336339276828">"Pair with Bluetooth devices"</string>
+    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Allows the app to view the configuration of Bluetooth on the tablet and to make and accept connections with paired devices."</string>
+    <string name="permdesc_bluetooth" product="tv" msgid="3974124940101104206">"Allows the app to view the configuration of Bluetooth on the TV, and to make and accept connections with paired devices."</string>
+    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Allows the app to view the configuration of the Bluetooth on the phone and to make and accept connections with paired devices."</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"control Near-Field Communication"</string>
+    <string name="permdesc_nfc" msgid="7120611819401789907">"Allows the app to communicate with Near Field Communication (NFC) tags, cards and readers."</string>
+    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"disable your screen lock"</string>
+    <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Allows the app to disable the keylock and any associated password security. For example, the phone disables the keylock when receiving an incoming phone call, then re-enables the keylock when the call is finished."</string>
+    <string name="permlab_manageFingerprint" msgid="5640858826254575638">"manage fingerprint hardware"</string>
+    <string name="permdesc_manageFingerprint" msgid="178208705828055464">"Allows the app to invoke methods to add and delete fingerprint templates for use."</string>
+    <string name="permlab_useFingerprint" msgid="3150478619915124905">"Use fingerprint hardware"</string>
+    <string name="permdesc_useFingerprint" msgid="9165097460730684114">"Allows the app to use fingerprint hardware for authentication"</string>
+    <string name="fingerprint_acquired_partial" msgid="735082772341716043">"Partial fingerprint detected. Please try again."</string>
+    <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Couldn\'t process fingerprint. Please try again."</string>
+    <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Fingerprint sensor is dirty. Please clean and try again."</string>
+    <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Finger moved too fast. Please try again."</string>
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Finger moved too slow. Please try again."</string>
+  <string-array name="fingerprint_acquired_vendor">
+  </string-array>
+    <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"Fingerprint hardware not available."</string>
+    <string name="fingerprint_error_no_space" msgid="1055819001126053318">"Fingerprint can\'t be stored. Please remove an existing fingerprint."</string>
+    <string name="fingerprint_error_timeout" msgid="3927186043737732875">"Fingerprint timeout reached. Try again."</string>
+    <string name="fingerprint_error_canceled" msgid="4402024612660774395">"Fingerprint operation cancelled."</string>
+    <string name="fingerprint_error_lockout" msgid="5536934748136933450">"Too many attempts. Try again later."</string>
+    <string name="fingerprint_error_lockout_permanent" msgid="5033251797919508137">"Too many attempts. Fingerprint sensor disabled."</string>
+    <string name="fingerprint_error_unable_to_process" msgid="6107816084103552441">"Try again."</string>
+    <string name="fingerprint_name_template" msgid="5870957565512716938">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
+  <string-array name="fingerprint_error_vendor">
+  </string-array>
+    <string name="fingerprint_icon_content_description" msgid="2340202869968465936">"Fingerprint icon"</string>
+    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"read sync settings"</string>
+    <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account."</string>
+    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"toggle sync on and off"</string>
+    <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Allows an app to modify the sync settings for an account. For example, this can be used to enable syncing of the People app with an account."</string>
+    <string name="permlab_readSyncStats" msgid="7396577451360202448">"read sync statistics"</string>
+    <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced."</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"read the contents of your USB storage"</string>
+    <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"read the contents of your SD card"</string>
+    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"Allows the app to read the contents of your USB storage."</string>
+    <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"Allows the app to read the contents of your SD card."</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modify or delete the contents of your USB storage"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"modify or delete the contents of your SD card"</string>
+    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Allows the app to write to the USB storage."</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Allows the app to write to the SD card."</string>
+    <string name="permlab_use_sip" msgid="2052499390128979920">"make/receive SIP calls"</string>
+    <string name="permdesc_use_sip" msgid="2297804849860225257">"Allows the app to make and receive SIP calls."</string>
+    <string name="permlab_register_sim_subscription" msgid="3166535485877549177">"register new telecom SIM connections"</string>
+    <string name="permdesc_register_sim_subscription" msgid="2138909035926222911">"Allows the app to register new telecom SIM connections."</string>
+    <string name="permlab_register_call_provider" msgid="108102120289029841">"register new telecom connections"</string>
+    <string name="permdesc_register_call_provider" msgid="7034310263521081388">"Allows the app to register new telecom connections."</string>
+    <string name="permlab_connection_manager" msgid="1116193254522105375">"manage telecom connections"</string>
+    <string name="permdesc_connection_manager" msgid="5925480810356483565">"Allows the app to manage telecom connections."</string>
+    <string name="permlab_bind_incall_service" msgid="6773648341975287125">"interact with in-call screen"</string>
+    <string name="permdesc_bind_incall_service" msgid="8343471381323215005">"Allows the app to control when and how the user sees the in-call screen."</string>
+    <string name="permlab_bind_connection_service" msgid="3557341439297014940">"interact with telephony services"</string>
+    <string name="permdesc_bind_connection_service" msgid="4008754499822478114">"Allows the app to interact with telephony services to make/receive calls."</string>
+    <string name="permlab_control_incall_experience" msgid="9061024437607777619">"provide an in-call user experience"</string>
+    <string name="permdesc_control_incall_experience" msgid="915159066039828124">"Allows the app to provide an in-call user experience."</string>
+    <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"read historical network usage"</string>
+    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"Allows the app to read historical network usage for specific networks and apps."</string>
+    <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"manage network policy"</string>
+    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"Allows the app to manage network policies and define app-specific rules."</string>
+    <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"modify network usage accounting"</string>
+    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"Allows the app to modify how network usage is accounted against apps. Not for use by normal apps."</string>
+    <string name="permlab_accessNotifications" msgid="7673416487873432268">"access notifications"</string>
+    <string name="permdesc_accessNotifications" msgid="458457742683431387">"Allows the app to retrieve, examine, and clear notifications, including those posted by other apps."</string>
+    <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"bind to a notification listener service"</string>
+    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"bind to a condition provider service"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Allows the holder to bind to the top-level interface of a condition provider service. Should never be needed for normal apps."</string>
+    <string name="permlab_bindDreamService" msgid="4153646965978563462">"bind to a dream service"</string>
+    <string name="permdesc_bindDreamService" msgid="7325825272223347863">"Allows the holder to bind to the top-level interface of a dream service. Should never be needed for normal apps."</string>
+    <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"invoke the carrier-provided configuration app"</string>
+    <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Allows the holder to invoke the carrier-provided configuration app. Should never be needed for normal apps."</string>
+    <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"listen for observations on network conditions"</string>
+    <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Allows an application to listen for observations on network conditions. Should never be needed for normal apps."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"change input device calibration"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Allows the app to modify the calibration parameters of the touch screen. Should never be needed for normal apps."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"access DRM certificates"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Allows an application to provision and use DRM certficates. Should never be needed for normal apps."</string>
+    <string name="permlab_handoverStatus" msgid="7820353257219300883">"receive Android Beam transfer status"</string>
+    <string name="permdesc_handoverStatus" msgid="4788144087245714948">"Allows this application to receive information about current Android Beam transfers"</string>
+    <string name="permlab_removeDrmCertificates" msgid="7044888287209892751">"remove DRM certificates"</string>
+    <string name="permdesc_removeDrmCertificates" msgid="7272999075113400993">"Allows an application to remove DRM certficates. Should never be needed for normal apps."</string>
+    <string name="permlab_bindCarrierMessagingService" msgid="1490229371796969158">"bind to a carrier messaging service"</string>
+    <string name="permdesc_bindCarrierMessagingService" msgid="2762882888502113944">"Allows the holder to bind to the top-level interface of a carrier messaging service. Should never be needed for normal apps."</string>
+    <string name="permlab_bindCarrierServices" msgid="3233108656245526783">"bind to operator services"</string>
+    <string name="permdesc_bindCarrierServices" msgid="1391552602551084192">"Allows the holder to bind to operator services. Should never be needed for normal apps."</string>
+    <string name="permlab_access_notification_policy" msgid="4247510821662059671">"access Do Not Disturb"</string>
+    <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"Allows the app to read and write Do Not Disturb configuration."</string>
+    <string name="policylab_limitPassword" msgid="4497420728857585791">"Set password rules"</string>
+    <string name="policydesc_limitPassword" msgid="2502021457917874968">"Control the length and the characters allowed in screen lock passwords and PINs."</string>
+    <string name="policylab_watchLogin" msgid="5091404125971980158">"Monitor screen unlock attempts"</string>
+    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Monitor the number of incorrect passwords typed when unlocking the screen and lock the tablet or erase all the tablet\'s data if too many incorrect passwords are typed."</string>
+    <string name="policydesc_watchLogin" product="TV" msgid="2707817988309890256">"Monitor the number of incorrect passwords typed when unlocking the screen, and lock the TV or erase all the TV\'s data if too many incorrect passwords are typed."</string>
+    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Monitor the number of incorrect passwords typed when unlocking the screen and lock the phone or erase all the phone\'s data if too many incorrect passwords are typed."</string>
+    <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"Monitor the number of incorrect passwords typed when unlocking the screen, and lock the tablet or erase all this user\'s data if too many incorrect passwords are typed."</string>
+    <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Monitor the number of incorrect passwords typed when unlocking the screen, and lock the TV or erase all this user\'s data if too many incorrect passwords are typed."</string>
+    <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Monitor the number of incorrect passwords typed when unlocking the screen, and lock the phone or erase all this user\'s data if too many incorrect passwords are typed."</string>
+    <string name="policylab_resetPassword" msgid="4934707632423915395">"Change the screen lock"</string>
+    <string name="policydesc_resetPassword" msgid="1278323891710619128">"Change the screen lock."</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"Lock the screen"</string>
+    <string name="policydesc_forceLock" msgid="1141797588403827138">"Control how and when the screen locks."</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"Erase all data"</string>
+    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Erase the tablet\'s data without warning by performing a factory data reset."</string>
+    <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"Erase the TV\'s data without warning by performing a factory data reset."</string>
+    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Erase the phone\'s data without warning by performing a factory data reset."</string>
+    <string name="policylab_wipeData_secondaryUser" msgid="8362863289455531813">"Erase user data"</string>
+    <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="6336255514635308054">"Erase this user\'s data on this tablet without warning."</string>
+    <string name="policydesc_wipeData_secondaryUser" product="tv" msgid="2086473496848351810">"Erase this user\'s data on this TV without warning."</string>
+    <string name="policydesc_wipeData_secondaryUser" product="default" msgid="6787904546711590238">"Erase this user\'s data on this phone without warning."</string>
+    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Set the device global proxy"</string>
+    <string name="policydesc_setGlobalProxy" msgid="8459859731153370499">"Set the device global proxy to be used while policy is enabled. Only the device owner can set the global proxy."</string>
+    <string name="policylab_expirePassword" msgid="5610055012328825874">"Set screen lock password expiry"</string>
+    <string name="policydesc_expirePassword" msgid="5367525762204416046">"Change how frequently the screen lock password, PIN or pattern must be changed."</string>
+    <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Set storage encryption"</string>
+    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Require that stored app data be encrypted."</string>
+    <string name="policylab_disableCamera" msgid="6395301023152297826">"Disable cameras"</string>
+    <string name="policydesc_disableCamera" msgid="2306349042834754597">"Prevent use of all device cameras."</string>
+    <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"Disable some screen lock features"</string>
+    <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"Prevent use of some screen lock features."</string>
+  <string-array name="phoneTypes">
+    <item msgid="8901098336658710359">"Home"</item>
+    <item msgid="869923650527136615">"Mobile"</item>
+    <item msgid="7897544654242874543">"Work"</item>
+    <item msgid="1103601433382158155">"Work fax"</item>
+    <item msgid="1735177144948329370">"Home fax"</item>
+    <item msgid="603878674477207394">"Pager"</item>
+    <item msgid="1650824275177931637">"Other"</item>
+    <item msgid="9192514806975898961">"Custom"</item>
+  </string-array>
+  <string-array name="emailAddressTypes">
+    <item msgid="8073994352956129127">"Home"</item>
+    <item msgid="7084237356602625604">"Work"</item>
+    <item msgid="1112044410659011023">"Other"</item>
+    <item msgid="2374913952870110618">"Custom"</item>
+  </string-array>
+  <string-array name="postalAddressTypes">
+    <item msgid="6880257626740047286">"Home"</item>
+    <item msgid="5629153956045109251">"Work"</item>
+    <item msgid="4966604264500343469">"Other"</item>
+    <item msgid="4932682847595299369">"Custom"</item>
+  </string-array>
+  <string-array name="imAddressTypes">
+    <item msgid="1738585194601476694">"Home"</item>
+    <item msgid="1359644565647383708">"Work"</item>
+    <item msgid="7868549401053615677">"Other"</item>
+    <item msgid="3145118944639869809">"Custom"</item>
+  </string-array>
+  <string-array name="organizationTypes">
+    <item msgid="7546335612189115615">"Work"</item>
+    <item msgid="4378074129049520373">"Other"</item>
+    <item msgid="3455047468583965104">"Custom"</item>
+  </string-array>
+  <string-array name="imProtocols">
+    <item msgid="8595261363518459565">"AIM"</item>
+    <item msgid="7390473628275490700">"Windows Live"</item>
+    <item msgid="7882877134931458217">"Yahoo"</item>
+    <item msgid="5035376313200585242">"Skype"</item>
+    <item msgid="7532363178459444943">"QQ"</item>
+    <item msgid="3713441034299660749">"Google Talk"</item>
+    <item msgid="2506857312718630823">"ICQ"</item>
+    <item msgid="1648797903785279353">"Jabber"</item>
+  </string-array>
+    <string name="phoneTypeCustom" msgid="1644738059053355820">"Custom"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"Home"</string>
+    <string name="phoneTypeMobile" msgid="6501463557754751037">"Mobile"</string>
+    <string name="phoneTypeWork" msgid="8863939667059911633">"Work"</string>
+    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Work Fax"</string>
+    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Home fax"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"Pager"</string>
+    <string name="phoneTypeOther" msgid="1544425847868765990">"Other"</string>
+    <string name="phoneTypeCallback" msgid="2712175203065678206">"Callback"</string>
+    <string name="phoneTypeCar" msgid="8738360689616716982">"Car"</string>
+    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"Company Main"</string>
+    <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
+    <string name="phoneTypeMain" msgid="6766137010628326916">"Main"</string>
+    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"Other Fax"</string>
+    <string name="phoneTypeRadio" msgid="4093738079908667513">"Radio"</string>
+    <string name="phoneTypeTelex" msgid="3367879952476250512">"Telex"</string>
+    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY/TDD"</string>
+    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Work Mobile"</string>
+    <string name="phoneTypeWorkPager" msgid="649938731231157056">"Work Pager"</string>
+    <string name="phoneTypeAssistant" msgid="5596772636128562884">"Assistant"</string>
+    <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
+    <string name="eventTypeCustom" msgid="7837586198458073404">"Customised"</string>
+    <string name="eventTypeBirthday" msgid="2813379844211390740">"Birthday"</string>
+    <string name="eventTypeAnniversary" msgid="3876779744518284000">"Anniversary"</string>
+    <string name="eventTypeOther" msgid="7388178939010143077">"Other"</string>
+    <string name="emailTypeCustom" msgid="8525960257804213846">"Custom"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"Home"</string>
+    <string name="emailTypeWork" msgid="3548058059601149973">"Work"</string>
+    <string name="emailTypeOther" msgid="2923008695272639549">"Other"</string>
+    <string name="emailTypeMobile" msgid="119919005321166205">"Mobile"</string>
+    <string name="postalTypeCustom" msgid="8903206903060479902">"Custom"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"Home"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"Work"</string>
+    <string name="postalTypeOther" msgid="2726111966623584341">"Other"</string>
+    <string name="imTypeCustom" msgid="2074028755527826046">"Custom"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"Home"</string>
+    <string name="imTypeWork" msgid="1371489290242433090">"Work"</string>
+    <string name="imTypeOther" msgid="5377007495735915478">"Other"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"Custom"</string>
+    <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
+    <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
+    <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
+    <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
+    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
+    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Hangouts"</string>
+    <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
+    <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
+    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"Net Meeting"</string>
+    <string name="orgTypeWork" msgid="29268870505363872">"Work"</string>
+    <string name="orgTypeOther" msgid="3951781131570124082">"Other"</string>
+    <string name="orgTypeCustom" msgid="225523415372088322">"Custom"</string>
+    <string name="relationTypeCustom" msgid="3542403679827297300">"Customised"</string>
+    <string name="relationTypeAssistant" msgid="6274334825195379076">"Assistant"</string>
+    <string name="relationTypeBrother" msgid="8757913506784067713">"Brother"</string>
+    <string name="relationTypeChild" msgid="1890746277276881626">"Child"</string>
+    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Domestic Partner"</string>
+    <string name="relationTypeFather" msgid="5228034687082050725">"Father"</string>
+    <string name="relationTypeFriend" msgid="7313106762483391262">"Friend"</string>
+    <string name="relationTypeManager" msgid="6365677861610137895">"Manager"</string>
+    <string name="relationTypeMother" msgid="4578571352962758304">"Mother"</string>
+    <string name="relationTypeParent" msgid="4755635567562925226">"Parent"</string>
+    <string name="relationTypePartner" msgid="7266490285120262781">"Partner"</string>
+    <string name="relationTypeReferredBy" msgid="101573059844135524">"Referred by"</string>
+    <string name="relationTypeRelative" msgid="1799819930085610271">"Relative"</string>
+    <string name="relationTypeSister" msgid="1735983554479076481">"Sister"</string>
+    <string name="relationTypeSpouse" msgid="394136939428698117">"Spouse"</string>
+    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Customised"</string>
+    <string name="sipAddressTypeHome" msgid="6093598181069359295">"Home"</string>
+    <string name="sipAddressTypeWork" msgid="6920725730797099047">"Work"</string>
+    <string name="sipAddressTypeOther" msgid="4408436162950119849">"Other"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"No application found to view this contact."</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Type PIN code"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Type PUK and new PIN code"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK code"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"New PIN Code"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="2644215452200037944"><font size="17">"Tap to type password"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Type password to unlock"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Type PIN to unlock"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Incorrect PIN code."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"To unlock, press Menu, then 0."</string>
+    <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Emergency number"</string>
+    <string name="lockscreen_carrier_default" msgid="6169005837238288522">"No service"</string>
+    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"Screen locked."</string>
+    <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Press Menu to unlock or place emergency call."</string>
+    <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Press Menu to unlock."</string>
+    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Draw pattern to unlock"</string>
+    <string name="lockscreen_emergency_call" msgid="5298642613417801888">"Emergency"</string>
+    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Return to call"</string>
+    <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Correct!"</string>
+    <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Try again"</string>
+    <string name="lockscreen_password_wrong" msgid="5737815393253165301">"Try again"</string>
+    <string name="lockscreen_storage_locked" msgid="9167551160010625200">"Unlock for all features and data"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maximum Face Unlock attempts exceeded"</string>
+    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"No SIM card"</string>
+    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"No SIM card in tablet."</string>
+    <string name="lockscreen_missing_sim_message" product="tv" msgid="1943633865476989599">"No SIM card in TV."</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"No SIM card in phone."</string>
+    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Insert a SIM card."</string>
+    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"The SIM card is missing or not readable. Insert a SIM card."</string>
+    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Unusable SIM card."</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Your SIM card has been permanently disabled.\n Contact your wireless service provider for another SIM card."</string>
+    <string name="lockscreen_transport_prev_description" msgid="6300840251218161534">"Previous track"</string>
+    <string name="lockscreen_transport_next_description" msgid="573285210424377338">"Next track"</string>
+    <string name="lockscreen_transport_pause_description" msgid="3980308465056173363">"Pause"</string>
+    <string name="lockscreen_transport_play_description" msgid="1901258823643886401">"Play"</string>
+    <string name="lockscreen_transport_stop_description" msgid="5907083260651210034">"Stop"</string>
+    <string name="lockscreen_transport_rew_description" msgid="6944412838651990410">"Rewind"</string>
+    <string name="lockscreen_transport_ffw_description" msgid="42987149870928985">"Fast-forward"</string>
+    <string name="emergency_calls_only" msgid="6733978304386365407">"Emergency calls only"</string>
+    <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Network locked"</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM card is PUK-locked."</string>
+    <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"See the User Guide or contact Customer Care."</string>
+    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM card is locked."</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"Unlocking SIM card…"</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"You have incorrectly typed your password <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"You have incorrectly typed your PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using your Google sign-in.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your TV using your Google signin.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"You have drawn your unlock pattern incorrectly <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using your Google sign-in.\n\n Please try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, the tablet will be reset to factory default and all user data will be lost."</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="950408382418270260">"You have incorrectly attempted to unlock the TV <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, the TV will be reset to factory default and all user data will be lost."</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, the phone will be reset to factory default and all user data will be lost."</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER">%d</xliff:g> times. The tablet will now be reset to factory default."</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="3195755534096192191">"You have incorrectly attempted to unlock the TV <xliff:g id="NUMBER">%d</xliff:g> times. The TV will now be reset to factory default."</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. The phone will now be reset to factory default."</string>
+    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Try again in <xliff:g id="NUMBER">%d</xliff:g> seconds."</string>
+    <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Forgotten pattern?"</string>
+    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Account unlock"</string>
+    <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Too many pattern attempts"</string>
+    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"To unlock, sign in with your Google account."</string>
+    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Username (email)"</string>
+    <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Password"</string>
+    <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Sign in"</string>
+    <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Invalid username or password."</string>
+    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"Forgot your username or password?\nVisit "<b>"google.co.uk/accounts/recovery"</b>"."</string>
+    <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"Checking…"</string>
+    <string name="lockscreen_unlock_label" msgid="737440483220667054">"Unlock"</string>
+    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Sound on"</string>
+    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"Sound off"</string>
+    <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Pattern started"</string>
+    <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Pattern cleared"</string>
+    <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Cell added"</string>
+    <string name="lockscreen_access_pattern_cell_added_verbose" msgid="7264580781744026939">"Cell <xliff:g id="CELL_INDEX">%1$s</xliff:g> added"</string>
+    <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Pattern completed"</string>
+    <string name="lockscreen_access_pattern_area" msgid="400813207572953209">"Pattern area."</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d of %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Add widget"</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Empty"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Unlock area expanded."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Unlock area collapsed."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> widget."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"User selector"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Camera"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Media controls"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Widget reordering started."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Widget reordering ended."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> deleted."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Expand unlock area."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Slide unlock."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Pattern unlock."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face unlock."</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin unlock."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Password unlock."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Pattern area."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Slide area."</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="granularity_label_character" msgid="7336470535385009523">"character"</string>
+    <string name="granularity_label_word" msgid="7075570328374918660">"word"</string>
+    <string name="granularity_label_link" msgid="5815508880782488267">"link"</string>
+    <string name="granularity_label_line" msgid="5764267235026120888">"line"</string>
+    <string name="factorytest_failed" msgid="5410270329114212041">"Factory test failed"</string>
+    <string name="factorytest_not_system" msgid="4435201656767276723">"The FACTORY_TEST action is only supported for packages installed in /system/app."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"No package was found that provides the FACTORY_TEST action."</string>
+    <string name="factorytest_reboot" msgid="6320168203050791643">"Reboot"</string>
+    <string name="js_dialog_title" msgid="1987483977834603872">"The page at \"<xliff:g id="TITLE">%s</xliff:g>\" says:"</string>
+    <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
+    <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"Confirm Navigation"</string>
+    <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"Leave this Page"</string>
+    <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"Stay on this Page"</string>
+    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nAre you sure you want to navigate away from this page?"</string>
+    <string name="save_password_label" msgid="6860261758665825069">"Confirm"</string>
+    <string name="double_tap_toast" msgid="4595046515400268881">"Tip: double-tap to zoom in and out."</string>
+    <string name="autofill_this_form" msgid="4616758841157816676">"Auto-fill"</string>
+    <string name="setup_autofill" msgid="7103495070180590814">"Set up Auto-fill"</string>
+    <string name="autofill_address_name_separator" msgid="6350145154779706772">" "</string>
+    <string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
+    <string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
+    <string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
+    <string name="autofill_province" msgid="2231806553863422300">"Province"</string>
+    <string name="autofill_postal_code" msgid="4696430407689377108">"Postcode"</string>
+    <string name="autofill_state" msgid="6988894195520044613">"State"</string>
+    <string name="autofill_zip_code" msgid="8697544592627322946">"Zip code"</string>
+    <string name="autofill_county" msgid="237073771020362891">"County"</string>
+    <string name="autofill_island" msgid="4020100875984667025">"Island"</string>
+    <string name="autofill_district" msgid="8400735073392267672">"District"</string>
+    <string name="autofill_department" msgid="5343279462564453309">"Department"</string>
+    <string name="autofill_prefecture" msgid="2028499485065800419">"Prefecture"</string>
+    <string name="autofill_parish" msgid="8202206105468820057">"Parish"</string>
+    <string name="autofill_area" msgid="3547409050889952423">"Area"</string>
+    <string name="autofill_emirate" msgid="2893880978835698818">"Emirate"</string>
+    <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"read your Web bookmarks and history"</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"Allows the app to read the history of all URLs that the Browser has visited, and all of the Browser\'s bookmarks. Note: this permission may not be enforced by third-party browsers or other applications with web browsing capabilities."</string>
+    <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"write web bookmarks and history"</string>
+    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"Allows the app to modify the Browser\'s history or bookmarks stored on your tablet. This may allow the app to delete or modify Browser data. Note: this permission may not be enforced by third-party browsers or other applications with web browsing capabilities."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="tv" msgid="7007393823197766548">"Allows the app to modify the Browser\'s history or bookmarks stored on your TV. This may allow the app to erase or modify Browser data. Note: This permission may not be enforced by third-party browsers or other applications with web browsing capabilities."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"Allows the app to modify the Browser\'s history or bookmarks stored on your phone. This may allow the app to delete or modify Browser data. Note: this permission may not be enforced by third-party browsers or other applications with web browsing capabilities."</string>
+    <string name="permlab_setAlarm" msgid="1379294556362091814">"set an alarm"</string>
+    <string name="permdesc_setAlarm" msgid="316392039157473848">"Allows the app to set an alarm in an installed alarm clock app. Some alarm clock apps may not implement this feature."</string>
+    <string name="permlab_addVoicemail" msgid="5525660026090959044">"add voicemail"</string>
+    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Allows the app to add messages to your voicemail inbox."</string>
+    <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"Modify Browser geo-location permissions"</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Allows the app to modify the Browser\'s geo-location permissions. Malicious apps may use this to allow sending location information to arbitrary websites."</string>
+    <string name="save_password_message" msgid="767344687139195790">"Do you want the browser to remember this password?"</string>
+    <string name="save_password_notnow" msgid="6389675316706699758">"Not now"</string>
+    <string name="save_password_remember" msgid="6491879678996749466">"Remember"</string>
+    <string name="save_password_never" msgid="8274330296785855105">"Never"</string>
+    <string name="open_permission_deny" msgid="7374036708316629800">"You don\'t have permission to open this page."</string>
+    <string name="text_copied" msgid="4985729524670131385">"Text copied to clipboard."</string>
+    <string name="more_item_label" msgid="4650918923083320495">"More"</string>
+    <string name="prepend_shortcut_label" msgid="2572214461676015642">"Menu+"</string>
+    <string name="menu_space_shortcut_label" msgid="2410328639272162537">"space"</string>
+    <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
+    <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"delete"</string>
+    <string name="search_go" msgid="8298016669822141719">"Search"</string>
+    <string name="search_hint" msgid="1733947260773056054">"Search…"</string>
+    <string name="searchview_description_search" msgid="6749826639098512120">"Search"</string>
+    <string name="searchview_description_query" msgid="5911778593125355124">"Search query"</string>
+    <string name="searchview_description_clear" msgid="1330281990951833033">"Clear query"</string>
+    <string name="searchview_description_submit" msgid="2688450133297983542">"Submit query"</string>
+    <string name="searchview_description_voice" msgid="2453203695674994440">"Voice search"</string>
+    <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Enable Explore by Touch?"</string>
+    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> wants to enable Explore by Touch. When Explore by Touch is turned on, you can hear or see descriptions of what\'s under your finger or perform gestures to interact with the tablet."</string>
+    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> wants to enable Explore by Touch. When Explore by Touch is turned on, you can hear or see descriptions of what\'s under your finger or perform gestures to interact with the phone."</string>
+    <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 month ago"</string>
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Before 1 month ago"</string>
+    <plurals name="last_num_days" formatted="false" msgid="5104533550723932025">
+      <item quantity="other">Last <xliff:g id="COUNT_1">%d</xliff:g> days</item>
+      <item quantity="one">Last <xliff:g id="COUNT_0">%d</xliff:g> day</item>
+    </plurals>
+    <string name="last_month" msgid="3959346739979055432">"Last month"</string>
+    <string name="older" msgid="5211975022815554840">"Older"</string>
+    <string name="preposition_for_date" msgid="9093949757757445117">"on <xliff:g id="DATE">%s</xliff:g>"</string>
+    <string name="preposition_for_time" msgid="5506831244263083793">"at <xliff:g id="TIME">%s</xliff:g>"</string>
+    <string name="preposition_for_year" msgid="5040395640711867177">"in<xliff:g id="YEAR">%s</xliff:g>"</string>
+    <string name="day" msgid="8144195776058119424">"day"</string>
+    <string name="days" msgid="4774547661021344602">"days"</string>
+    <string name="hour" msgid="2126771916426189481">"hour"</string>
+    <string name="hours" msgid="894424005266852993">"hours"</string>
+    <string name="minute" msgid="9148878657703769868">"min"</string>
+    <string name="minutes" msgid="5646001005827034509">"mins"</string>
+    <string name="second" msgid="3184235808021478">"sec"</string>
+    <string name="seconds" msgid="3161515347216589235">"secs"</string>
+    <string name="week" msgid="5617961537173061583">"week"</string>
+    <string name="weeks" msgid="6509623834583944518">"weeks"</string>
+    <string name="year" msgid="4001118221013892076">"year"</string>
+    <string name="years" msgid="6881577717993213522">"years"</string>
+    <string name="now_string_shortest" msgid="8912796667087856402">"now"</string>
+    <plurals name="duration_minutes_shortest" formatted="false" msgid="3957499975064245495">
+      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>m</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>m</item>
+    </plurals>
+    <plurals name="duration_hours_shortest" formatted="false" msgid="3552182110578602356">
+      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>h</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>h</item>
+    </plurals>
+    <plurals name="duration_days_shortest" formatted="false" msgid="5213655532597081640">
+      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>d</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>d</item>
+    </plurals>
+    <plurals name="duration_years_shortest" formatted="false" msgid="7848711145196397042">
+      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>y</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>y</item>
+    </plurals>
+    <plurals name="duration_minutes_shortest_future" formatted="false" msgid="3277614521231489951">
+      <item quantity="other">in <xliff:g id="COUNT_1">%d</xliff:g>m</item>
+      <item quantity="one">in <xliff:g id="COUNT_0">%d</xliff:g>m</item>
+    </plurals>
+    <plurals name="duration_hours_shortest_future" formatted="false" msgid="2152452368397489370">
+      <item quantity="other">in <xliff:g id="COUNT_1">%d</xliff:g>h</item>
+      <item quantity="one">in <xliff:g id="COUNT_0">%d</xliff:g>h</item>
+    </plurals>
+    <plurals name="duration_days_shortest_future" formatted="false" msgid="8088331502820295701">
+      <item quantity="other">in <xliff:g id="COUNT_1">%d</xliff:g>d</item>
+      <item quantity="one">in <xliff:g id="COUNT_0">%d</xliff:g>d</item>
+    </plurals>
+    <plurals name="duration_years_shortest_future" formatted="false" msgid="2317006667145250301">
+      <item quantity="other">in <xliff:g id="COUNT_1">%d</xliff:g>y</item>
+      <item quantity="one">in <xliff:g id="COUNT_0">%d</xliff:g>y</item>
+    </plurals>
+    <plurals name="duration_minutes_relative" formatted="false" msgid="3178131706192980192">
+      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> minutes</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> minute ago</item>
+    </plurals>
+    <plurals name="duration_hours_relative" formatted="false" msgid="676894109982008411">
+      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> hours</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> hour ago</item>
+    </plurals>
+    <plurals name="duration_days_relative" formatted="false" msgid="2203515825765397130">
+      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> days</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> day ago</item>
+    </plurals>
+    <plurals name="duration_years_relative" formatted="false" msgid="4820062134188885734">
+      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> years ago</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> year ago</item>
+    </plurals>
+    <plurals name="duration_minutes_relative_future" formatted="false" msgid="4655043589817680966">
+      <item quantity="other">in <xliff:g id="COUNT_1">%d</xliff:g> minutes</item>
+      <item quantity="one">in <xliff:g id="COUNT_0">%d</xliff:g> minute</item>
+    </plurals>
+    <plurals name="duration_hours_relative_future" formatted="false" msgid="8084579714205223891">
+      <item quantity="other">in <xliff:g id="COUNT_1">%d</xliff:g> hours</item>
+      <item quantity="one">in <xliff:g id="COUNT_0">%d</xliff:g> hour</item>
+    </plurals>
+    <plurals name="duration_days_relative_future" formatted="false" msgid="333215369363433992">
+      <item quantity="other">in <xliff:g id="COUNT_1">%d</xliff:g> days</item>
+      <item quantity="one">in <xliff:g id="COUNT_0">%d</xliff:g> day</item>
+    </plurals>
+    <plurals name="duration_years_relative_future" formatted="false" msgid="8644862986413104011">
+      <item quantity="other">in <xliff:g id="COUNT_1">%d</xliff:g> years</item>
+      <item quantity="one">in <xliff:g id="COUNT_0">%d</xliff:g> year</item>
+    </plurals>
+    <string name="VideoView_error_title" msgid="3534509135438353077">"Video problem"</string>
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"This video isn\'t valid for streaming to this device."</string>
+    <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"Can\'t play this video."</string>
+    <string name="VideoView_error_button" msgid="2822238215100679592">"OK"</string>
+    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
+    <string name="noon" msgid="7245353528818587908">"noon"</string>
+    <string name="Noon" msgid="3342127745230013127">"Noon"</string>
+    <string name="midnight" msgid="7166259508850457595">"midnight"</string>
+    <string name="Midnight" msgid="5630806906897892201">"Midnight"</string>
+    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
+    <string name="selectAll" msgid="6876518925844129331">"Select all"</string>
+    <string name="cut" msgid="3092569408438626261">"Cut"</string>
+    <string name="copy" msgid="2681946229533511987">"Copy"</string>
+    <string name="paste" msgid="5629880836805036433">"Paste"</string>
+    <string name="paste_as_plain_text" msgid="5427792741908010675">"Paste as plain text"</string>
+    <string name="replace" msgid="5781686059063148930">"Replace..."</string>
+    <string name="delete" msgid="6098684844021697789">"Delete"</string>
+    <string name="copyUrl" msgid="2538211579596067402">"Copy URL"</string>
+    <string name="selectTextMode" msgid="1018691815143165326">"Select text"</string>
+    <string name="undo" msgid="7905788502491742328">"Undo"</string>
+    <string name="redo" msgid="7759464876566803888">"Redo"</string>
+    <string name="autofill" msgid="3035779615680565188">"Auto-fill"</string>
+    <string name="textSelectionCABTitle" msgid="5236850394370820357">"Text selection"</string>
+    <string name="addToDictionary" msgid="4352161534510057874">"Add to dictionary"</string>
+    <string name="deleteText" msgid="6979668428458199034">"Delete"</string>
+    <string name="inputMethod" msgid="1653630062304567879">"Input method"</string>
+    <string name="editTextMenuTitle" msgid="4909135564941815494">"Text actions"</string>
+    <string name="email" msgid="4560673117055050403">"Email"</string>
+    <string name="dial" msgid="4204975095406423102">"Phone"</string>
+    <string name="map" msgid="6068210738233985748">"Maps"</string>
+    <string name="browse" msgid="6993590095938149861">"Browser"</string>
+    <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Storage space running out"</string>
+    <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Some system functions may not work"</string>
+    <string name="low_internal_storage_view_text_no_boot" msgid="6935190099204693424">"Not enough storage for the system. Make sure that you have 250 MB of free space and restart."</string>
+    <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> is running"</string>
+    <string name="app_running_notification_text" msgid="1197581823314971177">"Tap for more information or to stop the app."</string>
+    <string name="ok" msgid="5970060430562524910">"OK"</string>
+    <string name="cancel" msgid="6442560571259935130">"Cancel"</string>
+    <string name="yes" msgid="5362982303337969312">"OK"</string>
+    <string name="no" msgid="5141531044935541497">"Cancel"</string>
+    <string name="dialog_alert_title" msgid="2049658708609043103">"Attention"</string>
+    <string name="loading" msgid="7933681260296021180">"Loading…"</string>
+    <string name="capital_on" msgid="1544682755514494298">"ON"</string>
+    <string name="capital_off" msgid="6815870386972805832">"OFF"</string>
+    <string name="whichApplication" msgid="4533185947064773386">"Complete action using"</string>
+    <string name="whichApplicationNamed" msgid="8260158865936942783">"Complete action using %1$s"</string>
+    <string name="whichApplicationLabel" msgid="7425855495383818784">"Complete action"</string>
+    <string name="whichViewApplication" msgid="3272778576700572102">"Open with"</string>
+    <string name="whichViewApplicationNamed" msgid="2286418824011249620">"Open with %1$s"</string>
+    <string name="whichViewApplicationLabel" msgid="2666774233008808473">"Open"</string>
+    <string name="whichEditApplication" msgid="144727838241402655">"Edit with"</string>
+    <string name="whichEditApplicationNamed" msgid="1775815530156447790">"Edit with %1$s"</string>
+    <string name="whichEditApplicationLabel" msgid="7183524181625290300">"Edit"</string>
+    <string name="whichSendApplication" msgid="6902512414057341668">"Share with"</string>
+    <string name="whichSendApplicationNamed" msgid="2799370240005424391">"Share with %1$s"</string>
+    <string name="whichSendApplicationLabel" msgid="4579076294675975354">"Share"</string>
+    <string name="whichSendToApplication" msgid="8272422260066642057">"Send using"</string>
+    <string name="whichSendToApplicationNamed" msgid="7768387871529295325">"Send using %1$s"</string>
+    <string name="whichSendToApplicationLabel" msgid="8878962419005813500">"Send"</string>
+    <string name="whichHomeApplication" msgid="4307587691506919691">"Select a Home app"</string>
+    <string name="whichHomeApplicationNamed" msgid="4493438593214760979">"Use %1$s as Home"</string>
+    <string name="whichHomeApplicationLabel" msgid="809529747002918649">"Capture image"</string>
+    <string name="whichImageCaptureApplication" msgid="3680261417470652882">"Capture image with"</string>
+    <string name="whichImageCaptureApplicationNamed" msgid="8619384150737825003">"Capture image with %1$s"</string>
+    <string name="whichImageCaptureApplicationLabel" msgid="6390303445371527066">"Capture image"</string>
+    <string name="alwaysUse" msgid="4583018368000610438">"Use by default for this action."</string>
+    <string name="use_a_different_app" msgid="8134926230585710243">"Use a different app"</string>
+    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Clear default in System settings &gt; Apps &gt; Downloaded."</string>
+    <string name="chooseActivity" msgid="7486876147751803333">"Choose an action"</string>
+    <string name="chooseUsbActivity" msgid="6894748416073583509">"Choose an app for the USB device"</string>
+    <string name="noApplications" msgid="2991814273936504689">"No apps can perform this action."</string>
+    <string name="aerr_application" msgid="250320989337856518">"<xliff:g id="APPLICATION">%1$s</xliff:g> has stopped"</string>
+    <string name="aerr_process" msgid="6201597323218674729">"<xliff:g id="PROCESS">%1$s</xliff:g> has stopped"</string>
+    <string name="aerr_application_repeated" msgid="3146328699537439573">"<xliff:g id="APPLICATION">%1$s</xliff:g> keeps stopping"</string>
+    <string name="aerr_process_repeated" msgid="6235302956890402259">"<xliff:g id="PROCESS">%1$s</xliff:g> keeps stopping"</string>
+    <string name="aerr_restart" msgid="7581308074153624475">"Open app again"</string>
+    <string name="aerr_report" msgid="5371800241488400617">"Send feedback"</string>
+    <string name="aerr_close" msgid="2991640326563991340">"Close"</string>
+    <string name="aerr_mute" msgid="1974781923723235953">"Mute until device restarts"</string>
+    <string name="aerr_wait" msgid="3199956902437040261">"Wait"</string>
+    <string name="aerr_close_app" msgid="3269334853724920302">"Close app"</string>
+    <string name="anr_title" msgid="4351948481459135709"></string>
+    <string name="anr_activity_application" msgid="8493290105678066167">"<xliff:g id="APPLICATION">%2$s</xliff:g> isn\'t responding"</string>
+    <string name="anr_activity_process" msgid="1622382268908620314">"<xliff:g id="ACTIVITY">%1$s</xliff:g> isn\'t responding"</string>
+    <string name="anr_application_process" msgid="6417199034861140083">"<xliff:g id="APPLICATION">%1$s</xliff:g> isn\'t responding"</string>
+    <string name="anr_process" msgid="6156880875555921105">"Process <xliff:g id="PROCESS">%1$s</xliff:g> isn\'t responding"</string>
+    <string name="force_close" msgid="8346072094521265605">"OK"</string>
+    <string name="report" msgid="4060218260984795706">"Report"</string>
+    <string name="wait" msgid="7147118217226317732">"Wait"</string>
+    <string name="webpage_unresponsive" msgid="3272758351138122503">"The page has become unresponsive.\n\nDo you want to close it?"</string>
+    <string name="launch_warning_title" msgid="1547997780506713581">"App redirected"</string>
+    <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> is now running."</string>
+    <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> was originally launched."</string>
+    <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Scale"</string>
+    <string name="screen_compat_mode_show" msgid="4013878876486655892">"Always show"</string>
+    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Re-enable this in System settings &gt; Apps &gt; Downloaded."</string>
+    <string name="unsupported_display_size_message" msgid="6545327290756295232">"<xliff:g id="APP_NAME">%1$s</xliff:g> does not support the current Display size setting and may behave unexpectedly."</string>
+    <string name="unsupported_display_size_show" msgid="7969129195360353041">"Always show"</string>
+    <string name="smv_application" msgid="3307209192155442829">"The app <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) has violated its self-enforced Strict Mode policy."</string>
+    <string name="smv_process" msgid="5120397012047462446">"The process <xliff:g id="PROCESS">%1$s</xliff:g> has violated its self-enforced StrictMode policy."</string>
+    <string name="android_upgrading_title" msgid="1584192285441405746">"Android is upgrading…"</string>
+    <string name="android_start_title" msgid="8418054686415318207">"Android is starting…"</string>
+    <string name="android_upgrading_fstrim" msgid="8036718871534640010">"Optimising storage."</string>
+    <string name="android_upgrading_notification_title" msgid="8428357096969413169">"Finishing Android update…"</string>
+    <string name="android_upgrading_notification_body" msgid="5761201379457064286">"Some apps may not work properly until the upgrade finishes"</string>
+    <string name="app_upgrading_toast" msgid="3008139776215597053">"<xliff:g id="APPLICATION">%1$s</xliff:g> is upgrading…"</string>
+    <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimising app <xliff:g id="NUMBER_0">%1$d</xliff:g> of <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+    <string name="android_preparing_apk" msgid="8162599310274079154">"Preparing <xliff:g id="APPNAME">%1$s</xliff:g>."</string>
+    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Starting apps."</string>
+    <string name="android_upgrading_complete" msgid="1405954754112999229">"Finishing boot."</string>
+    <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> running"</string>
+    <string name="heavy_weight_notification_detail" msgid="867643381388543170">"Tap to switch to app"</string>
+    <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"Switch apps?"</string>
+    <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"Another app is already running that must be stopped before you can start a new one."</string>
+    <string name="old_app_action" msgid="493129172238566282">"Return to <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
+    <string name="old_app_description" msgid="2082094275580358049">"Don\'t start the new app."</string>
+    <string name="new_app_action" msgid="5472756926945440706">"Start <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
+    <string name="new_app_description" msgid="1932143598371537340">"Stop the old app without saving."</string>
+    <string name="dump_heap_notification" msgid="2618183274836056542">"<xliff:g id="PROC">%1$s</xliff:g> exceeded memory limit"</string>
+    <string name="dump_heap_notification_detail" msgid="6901391084243999274">"Heap dump has been collected; tap to share"</string>
+    <string name="dump_heap_title" msgid="5864292264307651673">"Share heap dump?"</string>
+    <string name="dump_heap_text" msgid="4809417337240334941">"The process <xliff:g id="PROC">%1$s</xliff:g> has exceeded its process memory limit of <xliff:g id="SIZE">%2$s</xliff:g>. A heap dump is available for you to share with its developer. Be careful: this heap dump can contain any of your personal information that the application has access to."</string>
+    <string name="sendText" msgid="5209874571959469142">"Choose an action for text"</string>
+    <string name="volume_ringtone" msgid="6885421406845734650">"Ringer volume"</string>
+    <string name="volume_music" msgid="5421651157138628171">"Media volume"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Playing through Bluetooth"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Silent ringtone set"</string>
+    <string name="volume_call" msgid="3941680041282788711">"In-call volume"</string>
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"Bluetooth in-call volume"</string>
+    <string name="volume_alarm" msgid="1985191616042689100">"Alarm volume"</string>
+    <string name="volume_notification" msgid="2422265656744276715">"Notification volume"</string>
+    <string name="volume_unknown" msgid="1400219669770445902">"Volume"</string>
+    <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth volume"</string>
+    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Ringtone volume"</string>
+    <string name="volume_icon_description_incall" msgid="8890073218154543397">"Call volume"</string>
+    <string name="volume_icon_description_media" msgid="4217311719665194215">"Media volume"</string>
+    <string name="volume_icon_description_notification" msgid="7044986546477282274">"Notification volume"</string>
+    <string name="ringtone_default" msgid="3789758980357696936">"Default ringtone"</string>
+    <string name="ringtone_default_with_actual" msgid="1767304850491060581">"Default (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
+    <string name="ringtone_silent" msgid="7937634392408977062">"None"</string>
+    <string name="ringtone_picker_title" msgid="3515143939175119094">"Ringtones"</string>
+    <string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"Alarm Sounds"</string>
+    <string name="ringtone_picker_title_notification" msgid="4837740874822788802">"Notification Sounds"</string>
+    <string name="ringtone_unknown" msgid="3914515995813061520">"Unknown"</string>
+    <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
+      <item quantity="other">Wi-Fi networks available</item>
+      <item quantity="one">Wi-Fi network available</item>
+    </plurals>
+    <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
+      <item quantity="other">Open Wi-Fi networks available</item>
+      <item quantity="one">Open Wi-Fi network available</item>
+    </plurals>
+    <string name="wifi_available_title" msgid="3817100557900599505">"Connect to open Wi‑Fi network"</string>
+    <string name="wifi_available_title_connecting" msgid="1557292688310330032">"Connecting to open Wi‑Fi network"</string>
+    <string name="wifi_available_title_connected" msgid="7542672851522241548">"Connected to Wi‑Fi network"</string>
+    <string name="wifi_available_title_failed_to_connect" msgid="6861772233582618132">"Could not connect to Wi‑Fi network"</string>
+    <string name="wifi_available_content_failed_to_connect" msgid="3377406637062802645">"Tap to see all networks"</string>
+    <string name="wifi_available_action_connect" msgid="2635699628459488788">"Connect"</string>
+    <string name="wifi_available_action_all_networks" msgid="1100098935861622985">"All Networks"</string>
+    <string name="wifi_available_sign_in" msgid="9157196203958866662">"Sign in to a Wi-Fi network"</string>
+    <string name="network_available_sign_in" msgid="1848877297365446605">"Sign in to network"</string>
+    <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
+    <skip />
+    <string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi has no Internet access"</string>
+    <string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tap for options"</string>
+    <string name="network_switch_metered" msgid="4671730921726992671">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+    <string name="network_switch_metered_detail" msgid="5325661434777870353">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no Internet access. Charges may apply."</string>
+    <string name="network_switch_metered_toast" msgid="5779283181685974304">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+  <string-array name="network_switch_type_name">
+    <item msgid="3979506840912951943">"mobile data"</item>
+    <item msgid="75483255295529161">"Wi-Fi"</item>
+    <item msgid="6862614801537202646">"Bluetooth"</item>
+    <item msgid="5447331121797802871">"Ethernet"</item>
+    <item msgid="8257233890381651999">"VPN"</item>
+  </string-array>
+    <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"an unknown network type"</string>
+    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Couldn\'t connect to Wi-Fi"</string>
+    <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" has a poor Internet connection."</string>
+    <string name="wifi_connect_alert_title" msgid="8455846016001810172">"Allow connection?"</string>
+    <string name="wifi_connect_alert_message" msgid="6451273376815958922">"Application %1$s would like to connect to Wi-Fi Network %2$s"</string>
+    <string name="wifi_connect_default_application" msgid="7143109390475484319">"An application"</string>
+    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Start Wi-Fi Direct. This will turn off Wi-Fi client/hotspot."</string>
+    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"Couldn\'t start Wi-Fi Direct."</string>
+    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct is on"</string>
+    <string name="wifi_p2p_enabled_notification_message" msgid="8064677407830620023">"Tap for settings"</string>
+    <string name="accept" msgid="1645267259272829559">"Accept"</string>
+    <string name="decline" msgid="2112225451706137894">"Decline"</string>
+    <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"Invitation sent"</string>
+    <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"Invitation to connect"</string>
+    <string name="wifi_p2p_from_message" msgid="570389174731951769">"From:"</string>
+    <string name="wifi_p2p_to_message" msgid="248968974522044099">"To:"</string>
+    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Type the required PIN:"</string>
+    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN:"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"The tablet will temporarily disconnect from Wi-Fi while it\'s connected to <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="tv" msgid="3087858235069421128">"The TV will temporarily disconnect from Wi-Fi while it\'s connected to <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"The phone will temporarily disconnect from Wi-Fi while it\'s connected to <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="select_character" msgid="3365550120617701745">"Insert character"</string>
+    <string name="sms_control_title" msgid="7296612781128917719">"Sending SMS messages"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; is sending a large number of SMS messages. Do you want to allow this app to continue sending messages?"</string>
+    <string name="sms_control_yes" msgid="3663725993855816807">"Allow"</string>
+    <string name="sms_control_no" msgid="625438561395534982">"Deny"</string>
+    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; would like to send a message to &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
+    <string name="sms_short_code_details" msgid="5873295990846059400">"This "<b>"may cause charges"</b>" on your mobile account."</string>
+    <string name="sms_premium_short_code_details" msgid="7869234868023975"><b>"This will cause charges on your mobile account."</b></string>
+    <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Send"</string>
+    <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Cancel"</string>
+    <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Remember my choice"</string>
+    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"You can change this later in Settings &gt; Apps"</string>
+    <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Always Allow*"</string>
+    <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Never Allow"</string>
+    <string name="sim_removed_title" msgid="6227712319223226185">"SIM card removed"</string>
+    <string name="sim_removed_message" msgid="2333164559970958645">"The mobile network will be unavailable until you restart with a valid SIM card inserted."</string>
+    <string name="sim_done_button" msgid="827949989369963775">"Done"</string>
+    <string name="sim_added_title" msgid="3719670512889674693">"SIM card added"</string>
+    <string name="sim_added_message" msgid="6599945301141050216">"Restart your device to access the mobile network."</string>
+    <string name="sim_restart_button" msgid="4722407842815232347">"Restart"</string>
+    <string name="carrier_app_dialog_message" msgid="7066156088266319533">"To get your new SIM working properly, you\'ll need to install and open an app from your operator."</string>
+    <string name="carrier_app_dialog_button" msgid="7900235513678617329">"GET THE APP"</string>
+    <string name="carrier_app_dialog_not_now" msgid="6361378684292268027">"NOT NOW"</string>
+    <string name="carrier_app_notification_title" msgid="8921767385872554621">"New SIM inserted"</string>
+    <string name="carrier_app_notification_text" msgid="1132487343346050225">"Tap to set it up"</string>
+    <string name="time_picker_dialog_title" msgid="8349362623068819295">"Set time"</string>
+    <string name="date_picker_dialog_title" msgid="5879450659453782278">"Set date"</string>
+    <string name="date_time_set" msgid="5777075614321087758">"Set"</string>
+    <string name="date_time_done" msgid="2507683751759308828">"Done"</string>
+    <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"NEW: "</font></string>
+    <string name="perms_description_app" msgid="5139836143293299417">"Provided by <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+    <string name="no_permissions" msgid="7283357728219338112">"No permission required"</string>
+    <string name="perm_costs_money" msgid="4902470324142151116">"this may cost you money"</string>
+    <string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
+    <string name="usb_charging_notification_title" msgid="6895185153353640787">"USB charging this device"</string>
+    <string name="usb_supplying_notification_title" msgid="5310642257296510271">"USB supplying power to attached device"</string>
+    <string name="usb_mtp_notification_title" msgid="8396264943589760855">"USB for file transfer"</string>
+    <string name="usb_ptp_notification_title" msgid="1347328437083192112">"USB for photo transfer"</string>
+    <string name="usb_midi_notification_title" msgid="4850904915889144654">"USB for MIDI"</string>
+    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Connected to a USB accessory"</string>
+    <string name="usb_notification_message" msgid="3370903770828407960">"Tap for more options."</string>
+    <string name="usb_unsupported_audio_accessory_title" msgid="3529881374464628084">"Analogue audio accessory detected"</string>
+    <string name="usb_unsupported_audio_accessory_message" msgid="6309553946441565215">"The attached device is not compatible with this phone. Tap to learn more."</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"USB debugging connected"</string>
+    <string name="adb_active_notification_message" msgid="4948470599328424059">"Tap to disable USB debugging."</string>
+    <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"Select to disable USB debugging."</string>
+    <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"Taking bug report…"</string>
+    <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Share bug report?"</string>
+    <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Sharing bug report…"</string>
+    <string name="share_remote_bugreport_notification_message_finished" msgid="6029609949340992866">"Your admin requested a bug report to help troubleshoot this device. Apps and data may be shared."</string>
+    <string name="share_remote_bugreport_action" msgid="6249476773913384948">"SHARE"</string>
+    <string name="decline_remote_bugreport_action" msgid="6230987241608770062">"DECLINE"</string>
+    <string name="select_input_method" msgid="8547250819326693584">"Change keyboard"</string>
+    <string name="show_ime" msgid="2506087537466597099">"Keep it on screen while physical keyboard is active"</string>
+    <string name="hardware" msgid="194658061510127999">"Show virtual keyboard"</string>
+    <string name="select_keyboard_layout_notification_title" msgid="597189518763083494">"Configure physical keyboard"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="8084622969903004900">"Tap to select language and layout"</string>
+    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"Display over other apps"</string>
+    <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> displaying over other apps"</string>
+    <string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> is displaying over other apps"</string>
+    <string name="alert_windows_notification_message" msgid="8917232109522912560">"If you don’t want <xliff:g id="NAME">%s</xliff:g> to use this feature, tap to open settings and turn it off."</string>
+    <string name="alert_windows_notification_turn_off_action" msgid="3367294525884949878">"TURN OFF"</string>
+    <string name="ext_media_checking_notification_title" msgid="5734005953288045806">"Preparing <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_checking_notification_message" msgid="4747432538578886744">"Checking for errors"</string>
+    <string name="ext_media_new_notification_message" msgid="7589986898808506239">"New <xliff:g id="NAME">%s</xliff:g> detected"</string>
+    <string name="ext_media_ready_notification_message" msgid="4083398150380114462">"For transferring photos and media"</string>
+    <string name="ext_media_unmountable_notification_title" msgid="8295123366236989588">"Corrupted <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_unmountable_notification_message" msgid="2343202057122495773">"<xliff:g id="NAME">%s</xliff:g> is corrupt. Tap to fix."</string>
+    <string name="ext_media_unmountable_notification_message" product="tv" msgid="3941179940297874950">"<xliff:g id="NAME">%s</xliff:g> is corrupt. Select to fix."</string>
+    <string name="ext_media_unsupported_notification_title" msgid="3797642322958803257">"Unsupported <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_unsupported_notification_message" msgid="6121601473787888589">"This device doesn’t support this <xliff:g id="NAME">%s</xliff:g>. Tap to set up in a supported format."</string>
+    <string name="ext_media_unsupported_notification_message" product="tv" msgid="3725436899820390906">"This device doesn’t support this <xliff:g id="NAME">%s</xliff:g>. Select to set up in a supported format."</string>
+    <string name="ext_media_badremoval_notification_title" msgid="3206248947375505416">"<xliff:g id="NAME">%s</xliff:g> unexpectedly removed"</string>
+    <string name="ext_media_badremoval_notification_message" msgid="380176703346946313">"Unmount <xliff:g id="NAME">%s</xliff:g> before removing to avoid data loss"</string>
+    <string name="ext_media_nomedia_notification_title" msgid="1704840188641749091">"Removed <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_nomedia_notification_message" msgid="6471542972147056586">"<xliff:g id="NAME">%s</xliff:g> removed; insert a new one"</string>
+    <string name="ext_media_unmounting_notification_title" msgid="640674168454809372">"Still ejecting <xliff:g id="NAME">%s</xliff:g>…"</string>
+    <string name="ext_media_unmounting_notification_message" msgid="4182843895023357756">"Don\'t remove"</string>
+    <string name="ext_media_init_action" msgid="7952885510091978278">"Set-up"</string>
+    <string name="ext_media_unmount_action" msgid="1121883233103278199">"Eject"</string>
+    <string name="ext_media_browse_action" msgid="8322172381028546087">"Explore"</string>
+    <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> missing"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"Reinsert this device"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"Moving <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"Moving data"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"Move complete"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"Data moved to <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"Couldn\'t move data"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"Data left at original location"</string>
+    <string name="ext_media_status_removed" msgid="6576172423185918739">"Removed"</string>
+    <string name="ext_media_status_unmounted" msgid="2551560878416417752">"Ejected"</string>
+    <string name="ext_media_status_checking" msgid="6193921557423194949">"Checking…"</string>
+    <string name="ext_media_status_mounted" msgid="7253821726503179202">"Ready"</string>
+    <string name="ext_media_status_mounted_ro" msgid="8020978752406021015">"Read-only"</string>
+    <string name="ext_media_status_bad_removal" msgid="8395398567890329422">"Removed unsafely"</string>
+    <string name="ext_media_status_unmountable" msgid="805594039236667894">"Corrupted"</string>
+    <string name="ext_media_status_unsupported" msgid="4691436711745681828">"Unsupported"</string>
+    <string name="ext_media_status_ejecting" msgid="5463887263101234174">"Ejecting…"</string>
+    <string name="ext_media_status_formatting" msgid="1085079556538644861">"Formatting…"</string>
+    <string name="ext_media_status_missing" msgid="5638633895221670766">"Not inserted"</string>
+    <string name="activity_list_empty" msgid="1675388330786841066">"No matching activities found."</string>
+    <string name="permlab_route_media_output" msgid="6243022988998972085">"route media output"</string>
+    <string name="permdesc_route_media_output" msgid="4932818749547244346">"Allows an application to route media output to other external devices."</string>
+    <string name="permlab_readInstallSessions" msgid="3713753067455750349">"read install sessions"</string>
+    <string name="permdesc_readInstallSessions" msgid="2049771699626019849">"Allows an application to read install sessions. This allows it to see details about active package installations."</string>
+    <string name="permlab_requestInstallPackages" msgid="5782013576218172577">"request install packages"</string>
+    <string name="permdesc_requestInstallPackages" msgid="5740101072486783082">"Allows an application to request installation of packages."</string>
+    <string name="permlab_requestDeletePackages" msgid="1703686454657781242">"request delete packages"</string>
+    <string name="permdesc_requestDeletePackages" msgid="3406172963097595270">"Allows an application to request deletion of packages."</string>
+    <string name="permlab_requestIgnoreBatteryOptimizations" msgid="8021256345643918264">"ask to ignore battery optimisations"</string>
+    <string name="permdesc_requestIgnoreBatteryOptimizations" msgid="8359147856007447638">"Allows an app to ask for permission to ignore battery optimisations for that app."</string>
+    <string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"Tap twice for zoom control"</string>
+    <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Couldn\'t add widget."</string>
+    <string name="ime_action_go" msgid="8320845651737369027">"Go"</string>
+    <string name="ime_action_search" msgid="658110271822807811">"Search"</string>
+    <string name="ime_action_send" msgid="2316166556349314424">"Send"</string>
+    <string name="ime_action_next" msgid="3138843904009813834">"Next"</string>
+    <string name="ime_action_done" msgid="8971516117910934605">"Done"</string>
+    <string name="ime_action_previous" msgid="1443550039250105948">"Prev"</string>
+    <string name="ime_action_default" msgid="2840921885558045721">"Execute"</string>
+    <string name="dial_number_using" msgid="5789176425167573586">"Dial number\n using <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <string name="create_contact_using" msgid="4947405226788104538">"Create contact\n using <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"The following one or more applications request permission to access your account, now and in the future."</string>
+    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Do you want to allow this request?"</string>
+    <string name="grant_permissions_header_text" msgid="6874497408201826708">"Access request"</string>
+    <string name="allow" msgid="7225948811296386551">"Allow"</string>
+    <string name="deny" msgid="2081879885755434506">"Deny"</string>
+    <string name="permission_request_notification_title" msgid="6486759795926237907">"Permission requested"</string>
+    <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">"Permission requested\nfor account <xliff:g id="ACCOUNT">%s</xliff:g>."</string>
+    <string name="forward_intent_to_owner" msgid="1207197447013960896">"You\'re using this app outside of your work profile"</string>
+    <string name="forward_intent_to_work" msgid="621480743856004612">"You\'re using this app in your work profile"</string>
+    <string name="input_method_binding_label" msgid="1283557179944992649">"Input Method"</string>
+    <string name="sync_binding_label" msgid="3687969138375092423">"Sync"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"Accessibility"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Wallpaper"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"Change wallpaper"</string>
+    <string name="notification_listener_binding_label" msgid="2014162835481906429">"Notification listener"</string>
+    <string name="vr_listener_binding_label" msgid="4316591939343607306">"VR listener"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Condition provider"</string>
+    <string name="notification_ranker_binding_label" msgid="774540592299064747">"Notification ranker service"</string>
+    <string name="vpn_title" msgid="19615213552042827">"VPN activated"</string>
+    <string name="vpn_title_long" msgid="6400714798049252294">"VPN is activated by <xliff:g id="APP">%s</xliff:g>"</string>
+    <string name="vpn_text" msgid="1610714069627824309">"Tap to manage the network."</string>
+    <string name="vpn_text_long" msgid="4907843483284977618">"Connected to <xliff:g id="SESSION">%s</xliff:g>. Tap to manage the network."</string>
+    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"Always-on VPN connecting…"</string>
+    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"Always-on VPN connected"</string>
+    <string name="vpn_lockdown_disconnected" msgid="4532298952570796327">"Always-on VPN disconnected"</string>
+    <string name="vpn_lockdown_error" msgid="6009249814034708175">"Always-on VPN error"</string>
+    <string name="vpn_lockdown_config" msgid="5099330695245008680">"Tap to set up"</string>
+    <string name="upload_file" msgid="2897957172366730416">"Choose file"</string>
+    <string name="no_file_chosen" msgid="6363648562170759465">"No file chosen"</string>
+    <string name="reset" msgid="2448168080964209908">"Reset"</string>
+    <string name="submit" msgid="1602335572089911941">"Submit"</string>
+    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Car mode enabled"</string>
+    <string name="car_mode_disable_notification_message" msgid="6301524980144350051">"Tap to exit car mode."</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"Tethering or hotspot active"</string>
+    <string name="tethered_notification_message" msgid="2113628520792055377">"Tap to set up."</string>
+    <string name="back_button_label" msgid="2300470004503343439">"Back"</string>
+    <string name="next_button_label" msgid="1080555104677992408">"Next"</string>
+    <string name="skip_button_label" msgid="1275362299471631819">"Skip"</string>
+    <string name="no_matches" msgid="8129421908915840737">"No matches"</string>
+    <string name="find_on_page" msgid="1946799233822820384">"Find on page"</string>
+    <plurals name="matches_found" formatted="false" msgid="1210884353962081884">
+      <item quantity="other"><xliff:g id="INDEX">%d</xliff:g> of <xliff:g id="TOTAL">%d</xliff:g></item>
+      <item quantity="one">1 match</item>
+    </plurals>
+    <string name="action_mode_done" msgid="7217581640461922289">"Done"</string>
+    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"Erasing USB storage..."</string>
+    <string name="progress_erasing" product="default" msgid="6596988875507043042">"Erasing SD card…"</string>
+    <string name="share" msgid="1778686618230011964">"Share"</string>
+    <string name="find" msgid="4808270900322985960">"Find"</string>
+    <string name="websearch" msgid="4337157977400211589">"Web Search"</string>
+    <string name="find_next" msgid="5742124618942193978">"Find next"</string>
+    <string name="find_previous" msgid="2196723669388360506">"Find previous"</string>
+    <string name="gpsNotifTicker" msgid="5622683912616496172">"Location request from <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="gpsNotifTitle" msgid="5446858717157416839">"Location request"</string>
+    <string name="gpsNotifMessage" msgid="1374718023224000702">"Requested by <xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>)"</string>
+    <string name="gpsVerifYes" msgid="2346566072867213563">"Yes"</string>
+    <string name="gpsVerifNo" msgid="1146564937346454865">"No"</string>
+    <string name="sync_too_many_deletes" msgid="5296321850662746890">"Deletion limit exceeded"</string>
+    <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"There are <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> deleted items for <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, account <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. What do you want to do?"</string>
+    <string name="sync_really_delete" msgid="2572600103122596243">"Delete the items"</string>
+    <string name="sync_undo_deletes" msgid="2941317360600338602">"Undo the deletes"</string>
+    <string name="sync_do_nothing" msgid="3743764740430821845">"Do nothing for now"</string>
+    <string name="choose_account_label" msgid="5655203089746423927">"Choose an account"</string>
+    <string name="add_account_label" msgid="2935267344849993553">"Add an account"</string>
+    <string name="add_account_button_label" msgid="3611982894853435874">"Add account"</string>
+    <string name="number_picker_increment_button" msgid="2412072272832284313">"Increase"</string>
+    <string name="number_picker_decrement_button" msgid="476050778386779067">"Decrease"</string>
+    <string name="number_picker_increment_scroll_mode" msgid="5259126567490114216">"<xliff:g id="VALUE">%s</xliff:g> touch &amp; hold."</string>
+    <string name="number_picker_increment_scroll_action" msgid="9101473045891835490">"Slide up to increase and down to decrease."</string>
+    <string name="time_picker_increment_minute_button" msgid="8865885114028614321">"Increase minute"</string>
+    <string name="time_picker_decrement_minute_button" msgid="6246834937080684791">"Decrease minute"</string>
+    <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"Increase hour"</string>
+    <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"Decrease hour"</string>
+    <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"Set p.m."</string>
+    <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"Set a.m."</string>
+    <string name="date_picker_increment_month_button" msgid="5369998479067934110">"Increase month"</string>
+    <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"Decrease month"</string>
+    <string name="date_picker_increment_day_button" msgid="7130465412308173903">"Increase day"</string>
+    <string name="date_picker_decrement_day_button" msgid="4131881521818750031">"Decrease day"</string>
+    <string name="date_picker_increment_year_button" msgid="6318697384310808899">"Increase year"</string>
+    <string name="date_picker_decrement_year_button" msgid="4482021813491121717">"Decrease year"</string>
+    <string name="date_picker_prev_month_button" msgid="2858244643992056505">"Previous month"</string>
+    <string name="date_picker_next_month_button" msgid="5559507736887605055">"Next month"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancel"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Done"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Mode change"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+    <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Choose an app"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Couldn\'t launch <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+    <string name="shareactionprovider_share_with" msgid="806688056141131819">"Share with"</string>
+    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Share with <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+    <string name="content_description_sliding_handle" msgid="415975056159262248">"Sliding handle. Touch &amp; hold."</string>
+    <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Swipe to unlock."</string>
+    <string name="action_bar_home_description" msgid="5293600496601490216">"Navigate home"</string>
+    <string name="action_bar_up_description" msgid="2237496562952152589">"Navigate up"</string>
+    <string name="action_menu_overflow_description" msgid="2295659037509008453">"More options"</string>
+    <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
+    <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
+    <string name="storage_internal" msgid="3570990907910199483">"Internal shared storage"</string>
+    <string name="storage_sd_card" msgid="3282948861378286745">"SD card"</string>
+    <string name="storage_sd_card_label" msgid="6347111320774379257">"<xliff:g id="MANUFACTURER">%s</xliff:g> SD card"</string>
+    <string name="storage_usb_drive" msgid="6261899683292244209">"USB drive"</string>
+    <string name="storage_usb_drive_label" msgid="4501418548927759953">"<xliff:g id="MANUFACTURER">%s</xliff:g> USB drive"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB storage"</string>
+    <string name="extract_edit_menu_button" msgid="8940478730496610137">"Edit"</string>
+    <string name="data_usage_warning_title" msgid="3620440638180218181">"Data usage alert"</string>
+    <string name="data_usage_warning_body" msgid="6660692274311972007">"Tap to view usage and settings."</string>
+    <string name="data_usage_3g_limit_title" msgid="4361523876818447683">"2G-3G data limit reached"</string>
+    <string name="data_usage_4g_limit_title" msgid="4609566827219442376">"4G data limit reached"</string>
+    <string name="data_usage_mobile_limit_title" msgid="6561099244084267376">"Mobile data limit reached"</string>
+    <string name="data_usage_wifi_limit_title" msgid="5803363779034792676">"Wi-Fi data limit reached"</string>
+    <string name="data_usage_limit_body" msgid="291731708279614081">"Data paused for rest of cycle"</string>
+    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G data limit exceeded"</string>
+    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G data limit exceeded"</string>
+    <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobile data limit exceeded"</string>
+    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Wi-Fi data limit exceeded"</string>
+    <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> over specified limit."</string>
+    <string name="data_usage_restricted_title" msgid="5965157361036321914">"Background data restricted"</string>
+    <string name="data_usage_restricted_body" msgid="469866376337242726">"Tap to remove restriction."</string>
+    <string name="ssl_certificate" msgid="6510040486049237639">"Security certificate"</string>
+    <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"This certificate is valid."</string>
+    <string name="issued_to" msgid="454239480274921032">"Issued to:"</string>
+    <string name="common_name" msgid="2233209299434172646">"Common name:"</string>
+    <string name="org_name" msgid="6973561190762085236">"Organisation:"</string>
+    <string name="org_unit" msgid="7265981890422070383">"Organisational unit:"</string>
+    <string name="issued_by" msgid="2647584988057481566">"Issued by:"</string>
+    <string name="validity_period" msgid="8818886137545983110">"Validity:"</string>
+    <string name="issued_on" msgid="5895017404361397232">"Issued on:"</string>
+    <string name="expires_on" msgid="3676242949915959821">"Expires on:"</string>
+    <string name="serial_number" msgid="758814067660862493">"Serial number:"</string>
+    <string name="fingerprints" msgid="4516019619850763049">"Fingerprints:"</string>
+    <string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 fingerprint"</string>
+    <string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 fingerprint"</string>
+    <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"See all"</string>
+    <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Choose activity"</string>
+    <string name="share_action_provider_share_with" msgid="5247684435979149216">"Share with"</string>
+    <string name="sending" msgid="3245653681008218030">"Sending…"</string>
+    <string name="launchBrowserDefault" msgid="2057951947297614725">"Launch Browser?"</string>
+    <string name="SetupCallDefault" msgid="5834948469253758575">"Accept call?"</string>
+    <string name="activity_resolver_use_always" msgid="8017770747801494933">"Always"</string>
+    <string name="activity_resolver_use_once" msgid="2404644797149173758">"Just once"</string>
+    <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s doesn\'t support work profile"</string>
+    <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"Tablet"</string>
+    <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string>
+    <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Phone"</string>
+    <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Headphones"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dock speakers"</string>
+    <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
+    <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
+    <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
+    <string name="wireless_display_route_description" msgid="9070346425023979651">"Wireless display"</string>
+    <string name="media_route_button_content_description" msgid="591703006349356016">"Cast"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Connect to device"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Cast screen to device"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Searching for devices…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Settings"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Disconnect"</string>
+    <string name="media_route_status_scanning" msgid="7279908761758293783">"Scanning..."</string>
+    <string name="media_route_status_connecting" msgid="6422571716007825440">"Connecting..."</string>
+    <string name="media_route_status_available" msgid="6983258067194649391">"Available"</string>
+    <string name="media_route_status_not_available" msgid="6739899962681886401">"Not available"</string>
+    <string name="media_route_status_in_use" msgid="4533786031090198063">"In use"</string>
+    <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Built-in Screen"</string>
+    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI Screen"</string>
+    <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay #<xliff:g id="ID">%1$d</xliff:g>"</string>
+    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
+    <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", secure"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Forgot Pattern"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Wrong Pattern"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"Wrong Password"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"Wrong PIN"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Try again in <xliff:g id="NUMBER">%1$d</xliff:g> seconds."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"Draw your pattern"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Enter SIM PIN"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"Enter PIN"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"Enter Password"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM is now disabled. Enter PUK code to continue. Contact carrier for details."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Enter desired PIN code"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirm desired PIN code"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Unlocking SIM card…"</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Incorrect PIN code."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Type a PIN that is 4 to 8 numbers."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK code should be 8 numbers."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"Re-enter the correct PUK code. Repeated attempts will permanently disable the SIM."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN codes do not match"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Too many pattern attempts"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"To unlock, sign in with your Google account."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"Username (email)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"Password"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"Sign in"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Invalid username or password."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Forgot your username or password?\nVisit "<b>"google.com/accounts/recovery"</b>"."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"Checking account…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"You have incorrectly typed your PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"You have incorrectly typed your password <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, the tablet will be reset to factory default and all user data will be lost."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="5621231220154419413">"You have incorrectly attempted to unlock the TV <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, the TV will be reset to factory default and all user data will be lost."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, the phone will be reset to factory default and all user data will be lost."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER">%d</xliff:g> times. The tablet will now be reset to factory default."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tv" msgid="4987878286750741463">"You have incorrectly attempted to unlock the TV <xliff:g id="NUMBER">%d</xliff:g> times. The TV will now be reset to factory default."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. The phone will now be reset to factory default."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4224651132862313471">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your TV using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Remove"</string>
+    <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"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="8404780875025725199">"Use Accessibility Shortcut?"</string>
+    <string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"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="disable_accessibility_shortcut" msgid="627625354248453445">"Turn off Shortcut"</string>
+    <string name="leave_accessibility_shortcut_on" msgid="7653111894438512680">"Use Shortcut"</string>
+    <string name="accessibility_shortcut_enabling_service" msgid="7771852911861522636">"Accessibility Shortcut turned <xliff:g id="SERVICE_NAME">%1$s</xliff:g> on"</string>
+    <string name="accessibility_shortcut_disabling_service" msgid="2747243438223109821">"Accessibility Shortcut turned <xliff:g id="SERVICE_NAME">%1$s</xliff:g> off"</string>
+    <string name="accessibility_button_prompt_text" msgid="4234556536456854251">"Choose a feature to use when you tap the Accessibility button:"</string>
+    <string name="accessibility_button_instructional_text" msgid="6942300463612999993">"To change features, touch &amp; hold the Accessibility button."</string>
+    <string name="accessibility_magnification_chooser_text" msgid="1227146738764986237">"Magnification"</string>
+    <string name="user_switched" msgid="3768006783166984410">"Current user <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="user_switching_message" msgid="2871009331809089783">"Switching to <xliff:g id="NAME">%1$s</xliff:g>…"</string>
+    <string name="user_logging_out_message" msgid="8939524935808875155">"Logging out <xliff:g id="NAME">%1$s</xliff:g>…"</string>
+    <string name="owner_name" msgid="2716755460376028154">"Owner"</string>
+    <string name="error_message_title" msgid="4510373083082500195">"Error"</string>
+    <string name="error_message_change_not_allowed" msgid="1238035947357923497">"This change isn\'t allowed by your admin"</string>
+    <string name="app_not_found" msgid="3429141853498927379">"No application found to handle this action"</string>
+    <string name="revoke" msgid="5404479185228271586">"Revoke"</string>
+    <string name="mediasize_iso_a0" msgid="1994474252931294172">"ISO A0"</string>
+    <string name="mediasize_iso_a1" msgid="3333060421529791786">"ISO A1"</string>
+    <string name="mediasize_iso_a2" msgid="3097535991925798280">"ISO A2"</string>
+    <string name="mediasize_iso_a3" msgid="3023213259314236123">"ISO A3"</string>
+    <string name="mediasize_iso_a4" msgid="231745325296873764">"ISO A4"</string>
+    <string name="mediasize_iso_a5" msgid="3484327407340865411">"ISO A5"</string>
+    <string name="mediasize_iso_a6" msgid="4861908487129577530">"ISO A6"</string>
+    <string name="mediasize_iso_a7" msgid="5890208588072936130">"ISO A7"</string>
+    <string name="mediasize_iso_a8" msgid="4319425041085816612">"ISO A8"</string>
+    <string name="mediasize_iso_a9" msgid="4882220529506432008">"ISO A9"</string>
+    <string name="mediasize_iso_a10" msgid="2382866026365359391">"ISO A10"</string>
+    <string name="mediasize_iso_b0" msgid="3651827147402009675">"ISO B0"</string>
+    <string name="mediasize_iso_b1" msgid="6072859628278739957">"ISO B1"</string>
+    <string name="mediasize_iso_b2" msgid="1348731852150380378">"ISO B2"</string>
+    <string name="mediasize_iso_b3" msgid="2612510181259261379">"ISO B3"</string>
+    <string name="mediasize_iso_b4" msgid="695151378838115434">"ISO B4"</string>
+    <string name="mediasize_iso_b5" msgid="4863754285582212487">"ISO B5"</string>
+    <string name="mediasize_iso_b6" msgid="5305816292139647241">"ISO B6"</string>
+    <string name="mediasize_iso_b7" msgid="531673542602786624">"ISO B7"</string>
+    <string name="mediasize_iso_b8" msgid="9164474595708850034">"ISO B8"</string>
+    <string name="mediasize_iso_b9" msgid="282102976764774160">"ISO B9"</string>
+    <string name="mediasize_iso_b10" msgid="4517141714407898976">"ISO B10"</string>
+    <string name="mediasize_iso_c0" msgid="3103521357901591100">"ISO C0"</string>
+    <string name="mediasize_iso_c1" msgid="1231954105985048595">"ISO C1"</string>
+    <string name="mediasize_iso_c2" msgid="927702816980087462">"ISO C2"</string>
+    <string name="mediasize_iso_c3" msgid="835154173518304159">"ISO C3"</string>
+    <string name="mediasize_iso_c4" msgid="5095951985108194011">"ISO C4"</string>
+    <string name="mediasize_iso_c5" msgid="1985397450332305739">"ISO C5"</string>
+    <string name="mediasize_iso_c6" msgid="8147421924174693013">"ISO C6"</string>
+    <string name="mediasize_iso_c7" msgid="8993994925276122950">"ISO C7"</string>
+    <string name="mediasize_iso_c8" msgid="6871178104139598957">"ISO C8"</string>
+    <string name="mediasize_iso_c9" msgid="7983532635227561362">"ISO C9"</string>
+    <string name="mediasize_iso_c10" msgid="5040764293406765584">"ISO C10"</string>
+    <string name="mediasize_na_letter" msgid="2841414839888344296">"Letter"</string>
+    <string name="mediasize_na_gvrnmt_letter" msgid="5295836838862962809">"Government Letter"</string>
+    <string name="mediasize_na_legal" msgid="8621364037680465666">"Legal"</string>
+    <string name="mediasize_na_junior_legal" msgid="3309324162155085904">"Junior Legal"</string>
+    <string name="mediasize_na_ledger" msgid="5567030340509075333">"Ledger"</string>
+    <string name="mediasize_na_tabloid" msgid="4571735038501661757">"Tabloid"</string>
+    <string name="mediasize_na_index_3x5" msgid="5182901917818625126">"Index Card 3 x 5"</string>
+    <string name="mediasize_na_index_4x6" msgid="7687620625422312396">"Index Card 4 x 6"</string>
+    <string name="mediasize_na_index_5x8" msgid="8834215284646872800">"Index Card 5 x 8"</string>
+    <string name="mediasize_na_monarch" msgid="213639906956550754">"Monarch"</string>
+    <string name="mediasize_na_quarto" msgid="835778493593023223">"Quarto"</string>
+    <string name="mediasize_na_foolscap" msgid="1573911237983677138">"Foolscap"</string>
+    <string name="mediasize_chinese_roc_8k" msgid="3626855847189438896">"ROC 8K"</string>
+    <string name="mediasize_chinese_roc_16k" msgid="9182191577022943355">"ROC 16K"</string>
+    <string name="mediasize_chinese_prc_1" msgid="4793232644980170500">"PRC 1"</string>
+    <string name="mediasize_chinese_prc_2" msgid="5404109730975720670">"PRC 2"</string>
+    <string name="mediasize_chinese_prc_3" msgid="1335092253339363526">"PRC 3"</string>
+    <string name="mediasize_chinese_prc_4" msgid="9167997800486569834">"PRC 4"</string>
+    <string name="mediasize_chinese_prc_5" msgid="845875168823541497">"PRC 5"</string>
+    <string name="mediasize_chinese_prc_6" msgid="3220325667692648789">"PRC 6"</string>
+    <string name="mediasize_chinese_prc_7" msgid="1776792138507038527">"PRC 7"</string>
+    <string name="mediasize_chinese_prc_8" msgid="1417176642687456692">"PRC 8"</string>
+    <string name="mediasize_chinese_prc_9" msgid="4785983473123798365">"PRC 9"</string>
+    <string name="mediasize_chinese_prc_10" msgid="7847982299391851899">"PRC 10"</string>
+    <string name="mediasize_chinese_prc_16k" msgid="262793383539980677">"PRC 16K"</string>
+    <string name="mediasize_chinese_om_pa_kai" msgid="5256815579447959814">"Pa Kai"</string>
+    <string name="mediasize_chinese_om_dai_pa_kai" msgid="7336412963441354407">"Dai Pa Kai"</string>
+    <string name="mediasize_chinese_om_jurro_ku_kai" msgid="6324465444100490742">"Jurro Ku Kai"</string>
+    <string name="mediasize_japanese_jis_b10" msgid="1787262845627694376">"JIS B10"</string>
+    <string name="mediasize_japanese_jis_b9" msgid="3336035783663287470">"JIS B9"</string>
+    <string name="mediasize_japanese_jis_b8" msgid="6195398299104345731">"JIS B8"</string>
+    <string name="mediasize_japanese_jis_b7" msgid="1674621886902828884">"JIS B7"</string>
+    <string name="mediasize_japanese_jis_b6" msgid="4170576286062657435">"JIS B6"</string>
+    <string name="mediasize_japanese_jis_b5" msgid="4899297958100032533">"JIS B5"</string>
+    <string name="mediasize_japanese_jis_b4" msgid="4213158129126666847">"JIS B4"</string>
+    <string name="mediasize_japanese_jis_b3" msgid="8513715307410310696">"JIS B3"</string>
+    <string name="mediasize_japanese_jis_b2" msgid="4777690211897131190">"JIS B2"</string>
+    <string name="mediasize_japanese_jis_b1" msgid="4608142385457034603">"JIS B1"</string>
+    <string name="mediasize_japanese_jis_b0" msgid="7587108366572243991">"JIS B0"</string>
+    <string name="mediasize_japanese_jis_exec" msgid="5244075432263649068">"JIS Exec"</string>
+    <string name="mediasize_japanese_chou4" msgid="4941652015032631361">"Chou4"</string>
+    <string name="mediasize_japanese_chou3" msgid="6387319169263957010">"Chou3"</string>
+    <string name="mediasize_japanese_chou2" msgid="1299112025415343982">"Chou2"</string>
+    <string name="mediasize_japanese_hagaki" msgid="8070115620644254565">"Hagaki"</string>
+    <string name="mediasize_japanese_oufuku" msgid="6049065587307896564">"Oufuku"</string>
+    <string name="mediasize_japanese_kahu" msgid="6872696027560065173">"Kahu"</string>
+    <string name="mediasize_japanese_kaku2" msgid="2359077233775455405">"Kaku2"</string>
+    <string name="mediasize_japanese_you4" msgid="2091777168747058008">"You4"</string>
+    <string name="mediasize_unknown_portrait" msgid="3088043641616409762">"Unknown portrait"</string>
+    <string name="mediasize_unknown_landscape" msgid="4876995327029361552">"Unknown landscape"</string>
+    <string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancelled"</string>
+    <string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Error writing content"</string>
+    <string name="reason_unknown" msgid="6048913880184628119">"unknown"</string>
+    <string name="reason_service_unavailable" msgid="7824008732243903268">"Print service not enabled"</string>
+    <string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g> service installed"</string>
+    <string name="print_service_installed_message" msgid="5897362931070459152">"Tap to enable"</string>
+    <string name="restr_pin_enter_admin_pin" msgid="8641662909467236832">"Enter admin PIN"</string>
+    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"Enter PIN"</string>
+    <string name="restr_pin_incorrect" msgid="8571512003955077924">"Incorrect"</string>
+    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Current PIN:"</string>
+    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"New PIN"</string>
+    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Confirm new PIN"</string>
+    <string name="restr_pin_create_pin" msgid="8017600000263450337">"Create a PIN for modifying restrictions"</string>
+    <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PINs don\'t match. Try again."</string>
+    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN is too short. Must be at least 4 digits."</string>
+    <plurals name="restr_pin_countdown" formatted="false" msgid="9061246974881224688">
+      <item quantity="other">Try again in <xliff:g id="COUNT">%d</xliff:g> seconds</item>
+      <item quantity="one">Try again in 1 second</item>
+    </plurals>
+    <string name="restr_pin_try_later" msgid="973144472490532377">"Try again later"</string>
+    <string name="immersive_cling_title" msgid="8394201622932303336">"Viewing full screen"</string>
+    <string name="immersive_cling_description" msgid="3482371193207536040">"To exit, swipe down from the top."</string>
+    <string name="immersive_cling_positive" msgid="5016839404568297683">"Got it"</string>
+    <string name="done_label" msgid="2093726099505892398">"Done"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Hours circular slider"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Minutes circular slider"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Select hours"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Select minutes"</string>
+    <string name="select_day" msgid="7774759604701773332">"Select month and day"</string>
+    <string name="select_year" msgid="7952052866994196170">"Select year"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> deleted"</string>
+    <string name="managed_profile_label_badge" msgid="2355652472854327647">"Work <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+    <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"2nd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+    <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"3rd Work <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+    <string name="lock_to_app_toast" msgid="6820571533009838261">"To unpin this screen, touch &amp; hold Back and Overview buttons"</string>
+    <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"This app can\'t be unpinned"</string>
+    <string name="lock_to_app_start" msgid="6643342070839862795">"Screen pinned"</string>
+    <string name="lock_to_app_exit" msgid="8598219838213787430">"Screen unpinned"</string>
+    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Ask for PIN before unpinning"</string>
+    <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Ask for unlock pattern before unpinning"</string>
+    <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Ask for password before unpinning"</string>
+    <string name="package_installed_device_owner" msgid="6875717669960212648">"Installed by your admin"</string>
+    <string name="package_updated_device_owner" msgid="1847154566357862089">"Updated by your admin"</string>
+    <string name="package_deleted_device_owner" msgid="2307122077550236438">"Deleted by your admin"</string>
+    <string name="battery_saver_description" msgid="1960431123816253034">"To help improve battery life, battery saver reduces your device’s performance and limits vibration, location services and most background data. Email, messaging and other apps that rely on syncing may not update unless you open them.\n\nBattery saver turns off automatically when your device is charging."</string>
+    <string name="data_saver_description" msgid="6015391409098303235">"To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app that you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them."</string>
+    <string name="data_saver_enable_title" msgid="4674073932722787417">"Turn on Data Saver?"</string>
+    <string name="data_saver_enable_button" msgid="7147735965247211818">"Turn on"</string>
+    <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
+      <item quantity="other">For %1$d minutes (until <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
+      <item quantity="one">For one minute (until <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
+    </plurals>
+    <plurals name="zen_mode_duration_minutes_summary_short" formatted="false" msgid="6830154222366042597">
+      <item quantity="other">For %1$d min (until <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
+      <item quantity="one">For 1 min (until <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
+    </plurals>
+    <plurals name="zen_mode_duration_hours_summary" formatted="false" msgid="8152974162096743862">
+      <item quantity="other">For %1$d hours (until <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
+      <item quantity="one">For one hour (until <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
+    </plurals>
+    <plurals name="zen_mode_duration_hours_summary_short" formatted="false" msgid="4787552595253082371">
+      <item quantity="other">For %1$d hr (until <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
+      <item quantity="one">For 1 hr (until <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
+    </plurals>
+    <plurals name="zen_mode_duration_minutes" formatted="false" msgid="5127407202506485571">
+      <item quantity="other">For %d minutes</item>
+      <item quantity="one">For one minute</item>
+    </plurals>
+    <plurals name="zen_mode_duration_minutes_short" formatted="false" msgid="2199350154433426128">
+      <item quantity="other">For %d min</item>
+      <item quantity="one">For 1 min</item>
+    </plurals>
+    <plurals name="zen_mode_duration_hours" formatted="false" msgid="3938821308277433854">
+      <item quantity="other">For %d hours</item>
+      <item quantity="one">For one hour</item>
+    </plurals>
+    <plurals name="zen_mode_duration_hours_short" formatted="false" msgid="6748277774662434217">
+      <item quantity="other">For %d hr</item>
+      <item quantity="one">For 1 hr</item>
+    </plurals>
+    <string name="zen_mode_until" msgid="7336308492289875088">"Until <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
+    <string name="zen_mode_alarm" msgid="9128205721301330797">"Until <xliff:g id="FORMATTEDTIME">%1$s</xliff:g> (next alarm)"</string>
+    <string name="zen_mode_forever" msgid="1916263162129197274">"Until you turn off Do not disturb"</string>
+    <string name="zen_mode_forever_dnd" msgid="3792132696572189081">"Until you turn off Do not disturb"</string>
+    <string name="zen_mode_rule_name_combination" msgid="191109939968076477">"<xliff:g id="FIRST">%1$s</xliff:g> / <xliff:g id="REST">%2$s</xliff:g>"</string>
+    <string name="toolbar_collapse_description" msgid="2821479483960330739">"Collapse"</string>
+    <string name="zen_mode_feature_name" msgid="5254089399895895004">"Do not disturb"</string>
+    <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Downtime"</string>
+    <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"Weeknight"</string>
+    <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"Weekend"</string>
+    <string name="zen_mode_default_events_name" msgid="8158334939013085363">"Event"</string>
+    <string name="muted_by" msgid="6147073845094180001">"Muted by <xliff:g id="THIRD_PARTY">%1$s</xliff:g>"</string>
+    <string name="system_error_wipe_data" msgid="6608165524785354962">"There\'s an internal problem with your device, and it may be unstable until you factory data reset."</string>
+    <string name="system_error_manufacturer" msgid="8086872414744210668">"There\'s an internal problem with your device. Contact your manufacturer for details."</string>
+    <string name="stk_cc_ussd_to_dial" msgid="5202342984749947872">"USSD request is modified to DIAL request."</string>
+    <string name="stk_cc_ussd_to_ss" msgid="2345360594181405482">"USSD request is modified to SS request."</string>
+    <string name="stk_cc_ussd_to_ussd" msgid="7466087659967191653">"USSD request is modified to new USSD request."</string>
+    <string name="stk_cc_ss_to_dial" msgid="2151304435775557162">"SS request is modified to DIAL request."</string>
+    <string name="stk_cc_ss_to_ussd" msgid="3951862188105305589">"SS request is modified to USSD request."</string>
+    <string name="stk_cc_ss_to_ss" msgid="5470768854991452695">"SS request is modified to new SS request."</string>
+    <string name="notification_work_profile_content_description" msgid="4600554564103770764">"Work profile"</string>
+    <string name="expand_button_content_description_collapsed" msgid="3609784019345534652">"Expand"</string>
+    <string name="expand_button_content_description_expanded" msgid="8520652707158554895">"Collapse"</string>
+    <string name="expand_action_accessibility" msgid="5307730695723718254">"toggle expansion"</string>
+    <string name="usb_midi_peripheral_name" msgid="7221113987741003817">"Android USB Peripheral Port"</string>
+    <string name="usb_midi_peripheral_manufacturer_name" msgid="7176526170008970168">"Android"</string>
+    <string name="usb_midi_peripheral_product_name" msgid="4971827859165280403">"USB Peripheral Port"</string>
+    <string name="floating_toolbar_open_overflow_description" msgid="4797287862999444631">"More options"</string>
+    <string name="floating_toolbar_close_overflow_description" msgid="559796923090723804">"Close overflow"</string>
+    <string name="maximize_button_text" msgid="7543285286182446254">"Maximise"</string>
+    <string name="close_button_text" msgid="3937902162644062866">"Close"</string>
+    <string name="notification_messaging_title_template" msgid="3452480118762691020">"<xliff:g id="CONVERSATION_TITLE">%1$s</xliff:g>: <xliff:g id="SENDER_NAME">%2$s</xliff:g>"</string>
+    <plurals name="selected_count" formatted="false" msgid="7187339492915744615">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selected</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> selected</item>
+    </plurals>
+    <string name="default_notification_channel_label" msgid="5929663562028088222">"Uncategorised"</string>
+    <string name="importance_from_user" msgid="7318955817386549931">"You set the importance of these notifications."</string>
+    <string name="importance_from_person" msgid="9160133597262938296">"This is important because of the people involved."</string>
+    <string name="user_creation_account_exists" msgid="1942606193570143289">"Allow <xliff:g id="APP">%1$s</xliff:g> to create a new User with <xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string>
+    <string name="user_creation_adding" msgid="4482658054622099197">"Allow <xliff:g id="APP">%1$s</xliff:g> to create a new User with <xliff:g id="ACCOUNT">%2$s</xliff:g> (a User with this account already exists) ?"</string>
+    <string name="language_selection_title" msgid="2680677278159281088">"Add a language"</string>
+    <string name="country_selection_title" msgid="2954859441620215513">"Region preference"</string>
+    <string name="search_language_hint" msgid="7042102592055108574">"Type language name"</string>
+    <string name="language_picker_section_suggested" msgid="8414489646861640885">"Suggested"</string>
+    <string name="language_picker_section_all" msgid="3097279199511617537">"All languages"</string>
+    <string name="region_picker_section_all" msgid="8966316787153001779">"All regions"</string>
+    <string name="locale_search_menu" msgid="2560710726687249178">"Search"</string>
+    <string name="work_mode_off_title" msgid="2615362773958585967">"Turn on work mode?"</string>
+    <string name="work_mode_off_message" msgid="2961559609199223594">"This will turn on your work profile, including apps, background sync and related features"</string>
+    <string name="work_mode_turn_on" msgid="2062544985670564875">"Turn on"</string>
+    <string name="new_sms_notification_title" msgid="8442817549127555977">"You have new messages"</string>
+    <string name="new_sms_notification_content" msgid="7002938807812083463">"Open SMS app to view"</string>
+    <string name="user_encrypted_title" msgid="9054897468831672082">"Some functionality may be limited"</string>
+    <string name="user_encrypted_message" msgid="4923292604515744267">"Tap to unlock"</string>
+    <string name="user_encrypted_detail" msgid="5708447464349420392">"User data locked"</string>
+    <string name="profile_encrypted_detail" msgid="3700965619978314974">"Work profile locked"</string>
+    <string name="profile_encrypted_message" msgid="6964994232310195874">"Tap to unlock work profile"</string>
+    <string name="usb_mtp_launch_notification_title" msgid="8359219638312208932">"Connected to <xliff:g id="PRODUCT_NAME">%1$s</xliff:g>"</string>
+    <string name="usb_mtp_launch_notification_description" msgid="8541876176425411358">"Tap to view files"</string>
+    <string name="pin_target" msgid="3052256031352291362">"Pin"</string>
+    <string name="unpin_target" msgid="3556545602439143442">"Unpin"</string>
+    <string name="app_info" msgid="6856026610594615344">"App info"</string>
+    <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
+    <string name="demo_starting_message" msgid="5268556852031489931">"Starting demo…"</string>
+    <string name="demo_restarting_message" msgid="952118052531642451">"Resetting device…"</string>
+    <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Disabled <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+    <string name="conference_call" msgid="3751093130790472426">"Conference Call"</string>
+    <string name="tooltip_popup_title" msgid="5253721848739260181">"Tooltip"</string>
+    <string name="app_category_game" msgid="5431836943981492993">"Games"</string>
+    <string name="app_category_audio" msgid="1659853108734301647">"Music &amp; Audio"</string>
+    <string name="app_category_video" msgid="2728726078629384196">"Movies &amp; Video"</string>
+    <string name="app_category_image" msgid="4867854544519846048">"Photos &amp; Images"</string>
+    <string name="app_category_social" msgid="5842783057834965912">"Social &amp; Communication"</string>
+    <string name="app_category_news" msgid="7496506240743986873">"News &amp; Magazines"</string>
+    <string name="app_category_maps" msgid="5878491404538024367">"Maps &amp; Navigation"</string>
+    <string name="app_category_productivity" msgid="3742083261781538852">"Productivity"</string>
+    <string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"Device storage"</string>
+    <string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"USB debugging"</string>
+    <string name="time_picker_hour_label" msgid="2979075098868106450">"hour"</string>
+    <string name="time_picker_minute_label" msgid="5168864173796598399">"minute"</string>
+    <string name="time_picker_header_text" msgid="143536825321922567">"Set time"</string>
+    <string name="time_picker_input_error" msgid="7574999942502513765">"Enter a valid time"</string>
+    <string name="time_picker_prompt_label" msgid="7588093983899966783">"Type in time"</string>
+    <string name="time_picker_text_input_mode_description" msgid="4148166758173708199">"Switch to text input mode for the time input."</string>
+    <string name="time_picker_radial_mode_description" msgid="4953403779779557198">"Switch to clock mode for the time input."</string>
+    <string name="autofill_picker_accessibility_title" msgid="8469043291648711535">"Auto-fill options"</string>
+    <string name="autofill_save_accessibility_title" msgid="7244365268417107822">"Save for AutoFill"</string>
+    <string name="autofill_error_cannot_autofill" msgid="7402758580060110371">"Contents can’t be auto-filled"</string>
+    <string name="autofill_picker_no_suggestions" msgid="3908514303773350735">"No auto-fill suggestions"</string>
+    <plurals name="autofill_picker_some_suggestions" formatted="false" msgid="5506565809835815274">
+      <item quantity="other"><xliff:g id="COUNT">%1$s</xliff:g> auto-fill suggestions</item>
+      <item quantity="one">One auto-fill suggestion</item>
+    </plurals>
+    <string name="autofill_save_title" msgid="3345527308992082601">"Save to &lt;b&gt;<xliff:g id="LABEL">%1$s</xliff:g>&lt;/b&gt;?"</string>
+    <string name="autofill_save_title_with_type" msgid="8637809388029313305">"Save <xliff:g id="TYPE">%1$s</xliff:g> to &lt;b&gt;<xliff:g id="LABEL">%2$s</xliff:g>&lt;/b&gt;?"</string>
+    <string name="autofill_save_title_with_2types" msgid="5214035651838265325">"Save <xliff:g id="TYPE_0">%1$s</xliff:g> and <xliff:g id="TYPE_1">%2$s</xliff:g> to &lt;b&gt;<xliff:g id="LABEL">%3$s</xliff:g>&lt;/b&gt;?"</string>
+    <string name="autofill_save_title_with_3types" msgid="6943161834231458441">"Save <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g>, and <xliff:g id="TYPE_2">%3$s</xliff:g> to &lt;b&gt;<xliff:g id="LABEL">%4$s</xliff:g>&lt;/b&gt;?"</string>
+    <string name="autofill_save_yes" msgid="6398026094049005921">"Save"</string>
+    <string name="autofill_save_no" msgid="2625132258725581787">"No thanks"</string>
+    <string name="autofill_save_type_password" msgid="5288448918465971568">"password"</string>
+    <string name="autofill_save_type_address" msgid="4936707762193009542">"address"</string>
+    <string name="autofill_save_type_credit_card" msgid="7127694776265563071">"credit card"</string>
+    <string name="autofill_save_type_username" msgid="239040540379769562">"username"</string>
+    <string name="autofill_save_type_email_address" msgid="5752949432129262174">"email address"</string>
+    <string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"Stay calm and seek shelter nearby."</string>
+    <string name="etws_primary_default_message_tsunami" msgid="1887685943498368548">"Evacuate immediately from coastal regions and riverside areas to a safer place such as high ground."</string>
+    <string name="etws_primary_default_message_earthquake_and_tsunami" msgid="998797956848445862">"Stay calm and seek shelter nearby."</string>
+    <string name="etws_primary_default_message_test" msgid="2709597093560037455">"Emergency messages test"</string>
+    <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"Reply"</string>
+    <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string>
+    <string name="mmcc_authentication_reject" msgid="7729819349669603406">"SIM not allowed"</string>
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM not provisioned"</string>
+    <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM not allowed"</string>
+    <string name="mmcc_illegal_me" msgid="4438696681169345015">"Phone not allowed"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Pop-Up Window"</string>
+</resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 1d08534..a9c5757 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> days"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> day <xliff:g id="HOURS">%2$d</xliff:g> hrs"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> day <xliff:g id="HOURS">%2$d</xliff:g> hr"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> hrs"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> hr <xliff:g id="MINUTES">%2$d</xliff:g> mins"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> hr <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> mins"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> secs"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sec"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> secs"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sec"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Untitled&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(No phone number)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Unknown"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"No voice/emergency service"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Temporarily not offered by the mobile network at your location"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Can’t find network"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"To improve reception, try changing the type selected at System &gt; Network &amp; Internet &gt; Mobile networks &gt; Preferred network type."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"To improve reception, try changing the type selected at Settings &gt; Network &amp; Internet &gt; Mobile networks &gt; Preferred network type."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi calling is active"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Emergency calls require a mobile network."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alerts"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Call forwarding"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Emergency callback mode"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Mobile data alerts"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Mobile data status"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS messages"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Voicemail messages"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi Calling"</string>
@@ -300,7 +286,7 @@
     <string name="capability_title_canPerformGestures" msgid="7418984730362576862">"Perform gestures"</string>
     <string name="capability_desc_canPerformGestures" msgid="8296373021636981249">"Can tap, swipe, pinch and perform other gestures."</string>
     <string name="capability_title_canCaptureFingerprintGestures" msgid="6309568287512278670">"Fingerprint gestures"</string>
-    <string name="capability_desc_canCaptureFingerprintGestures" msgid="7102111919385702482">"Can capture gestures performed on the devices fingerprint sensor."</string>
+    <string name="capability_desc_canCaptureFingerprintGestures" msgid="7102111919385702482">"Can capture gestures performed on the device\'s fingerprint sensor."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"disable or modify status bar"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Allows the app to disable the status bar or add and remove system icons."</string>
     <string name="permlab_statusBarService" msgid="4826835508226139688">"be the status bar"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM not provisioned"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM not allowed"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Phone not allowed"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Pop-Up Window"</string>
 </resources>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 1d08534..a9c5757 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> days"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> day <xliff:g id="HOURS">%2$d</xliff:g> hrs"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> day <xliff:g id="HOURS">%2$d</xliff:g> hr"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> hrs"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> hr <xliff:g id="MINUTES">%2$d</xliff:g> mins"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> hr <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> mins"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> secs"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sec"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> secs"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sec"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Untitled&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(No phone number)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Unknown"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"No voice/emergency service"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Temporarily not offered by the mobile network at your location"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Can’t find network"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"To improve reception, try changing the type selected at System &gt; Network &amp; Internet &gt; Mobile networks &gt; Preferred network type."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"To improve reception, try changing the type selected at Settings &gt; Network &amp; Internet &gt; Mobile networks &gt; Preferred network type."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi calling is active"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Emergency calls require a mobile network."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alerts"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Call forwarding"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Emergency callback mode"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Mobile data alerts"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Mobile data status"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS messages"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Voicemail messages"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi Calling"</string>
@@ -300,7 +286,7 @@
     <string name="capability_title_canPerformGestures" msgid="7418984730362576862">"Perform gestures"</string>
     <string name="capability_desc_canPerformGestures" msgid="8296373021636981249">"Can tap, swipe, pinch and perform other gestures."</string>
     <string name="capability_title_canCaptureFingerprintGestures" msgid="6309568287512278670">"Fingerprint gestures"</string>
-    <string name="capability_desc_canCaptureFingerprintGestures" msgid="7102111919385702482">"Can capture gestures performed on the devices fingerprint sensor."</string>
+    <string name="capability_desc_canCaptureFingerprintGestures" msgid="7102111919385702482">"Can capture gestures performed on the device\'s fingerprint sensor."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"disable or modify status bar"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Allows the app to disable the status bar or add and remove system icons."</string>
     <string name="permlab_statusBarService" msgid="4826835508226139688">"be the status bar"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM not provisioned"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM not allowed"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Phone not allowed"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Pop-Up Window"</string>
 </resources>
diff --git a/core/res/res/values-en-rXC-watch/strings.xml b/core/res/res/values-en-rXC-watch/strings.xml
new file mode 100644
index 0000000..0287c52
--- /dev/null
+++ b/core/res/res/values-en-rXC-watch/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2015, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="android_upgrading_apk" msgid="1090732262010398759">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‏‏‎App ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ of ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="permgrouplab_sensors" msgid="202675452368612754">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎Sensors‎‏‎‎‏‎"</string>
+</resources>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..12831fb
--- /dev/null
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -0,0 +1,1770 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="byteShort" msgid="8340973892742019101">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎B‎‏‎‎‏‎"</string>
+    <string name="petabyteShort" msgid="5637816680144990219">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‎‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‏‏‎PB‎‏‎‎‏‎"</string>
+    <string name="fileSizeSuffix" msgid="8897567456150907538">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="NUMBER">%1$s</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="UNIT">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="untitled" msgid="4638956954852782576">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎‎&lt;Untitled&gt;‎‏‎‎‏‎"</string>
+    <string name="emptyPhoneNumber" msgid="7694063042079676517">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‎‏‎‏‎(No phone number)‎‏‎‎‏‎"</string>
+    <string name="unknownName" msgid="6867811765370350269">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎Unknown‎‏‎‎‏‎"</string>
+    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎Voicemail‎‏‎‎‏‎"</string>
+    <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎MSISDN1‎‏‎‎‏‎"</string>
+    <string name="mmiError" msgid="5154499457739052907">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎Connection problem or invalid MMI code.‎‏‎‎‏‎"</string>
+    <string name="mmiFdnError" msgid="5224398216385316471">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‏‎Operation is restricted to fixed dialing numbers only.‎‏‎‎‏‎"</string>
+    <string name="mmiErrorWhileRoaming" msgid="762488890299284230">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎‎‎‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎Can not change call forwarding settings from your phone while you are roaming.‎‏‎‎‏‎"</string>
+    <string name="serviceEnabled" msgid="8147278346414714315">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎Service was enabled.‎‏‎‎‏‎"</string>
+    <string name="serviceEnabledFor" msgid="6856228140453471041">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‎Service was enabled for:‎‏‎‎‏‎"</string>
+    <string name="serviceDisabled" msgid="1937553226592516411">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‎‏‏‏‎‏‏‎Service has been disabled.‎‏‎‎‏‎"</string>
+    <string name="serviceRegistered" msgid="6275019082598102493">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎‏‎Registration was successful.‎‏‎‎‏‎"</string>
+    <string name="serviceErased" msgid="1288584695297200972">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‎‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎‎Erasure was successful.‎‏‎‎‏‎"</string>
+    <string name="passwordIncorrect" msgid="7612208839450128715">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎Incorrect password.‎‏‎‎‏‎"</string>
+    <string name="mmiComplete" msgid="8232527495411698359">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‏‎‏‏‏‎MMI complete.‎‏‎‎‏‎"</string>
+    <string name="badPin" msgid="9015277645546710014">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎The old PIN you typed isn\'t correct.‎‏‎‎‏‎"</string>
+    <string name="badPuk" msgid="5487257647081132201">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎The PUK you typed isn\'t correct.‎‏‎‎‏‎"</string>
+    <string name="mismatchPin" msgid="609379054496863419">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎The PINs you typed don\'t match.‎‏‎‎‏‎"</string>
+    <string name="invalidPin" msgid="3850018445187475377">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‏‎Type a PIN that is 4 to 8 numbers.‎‏‎‎‏‎"</string>
+    <string name="invalidPuk" msgid="8761456210898036513">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‎‎‏‎Type a PUK that is 8 numbers or longer.‎‏‎‎‏‎"</string>
+    <string name="needPuk" msgid="919668385956251611">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎Your SIM card is PUK-locked. Type the PUK code to unlock it.‎‏‎‎‏‎"</string>
+    <string name="needPuk2" msgid="4526033371987193070">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎Type PUK2 to unblock SIM card.‎‏‎‎‏‎"</string>
+    <string name="enablePin" msgid="209412020907207950">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎Unsuccessful, enable SIM/RUIM Lock.‎‏‎‎‏‎"</string>
+    <plurals name="pinpuk_attempts" formatted="false" msgid="1251012001539225582">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎You have ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempts before SIM is locked.‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎You have ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempt before SIM is locked.‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="imei" msgid="2625429890869005782">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‏‏‎‏‎‏‏‎‎IMEI‎‏‎‎‏‎"</string>
+    <string name="meid" msgid="4841221237681254195">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‏‎‎‏‏‎‎‏‏‎MEID‎‏‎‎‏‎"</string>
+    <string name="ClipMmi" msgid="6952821216480289285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‎Incoming Caller ID‎‏‎‎‏‎"</string>
+    <string name="ClirMmi" msgid="7784673673446833091">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‏‎‎‎‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎Outgoing Caller ID‎‏‎‎‏‎"</string>
+    <string name="ColpMmi" msgid="3065121483740183974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‎Connected Line ID‎‏‎‎‏‎"</string>
+    <string name="ColrMmi" msgid="4996540314421889589">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎Connected Line ID Restriction‎‏‎‎‏‎"</string>
+    <string name="CfMmi" msgid="5123218989141573515">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‎‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎Call forwarding‎‏‎‎‏‎"</string>
+    <string name="CwMmi" msgid="9129678056795016867">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‎‎‏‏‎Call waiting‎‏‎‎‏‎"</string>
+    <string name="BaMmi" msgid="455193067926770581">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‎‏‎‏‎‏‎Call barring‎‏‎‎‏‎"</string>
+    <string name="PwdMmi" msgid="7043715687905254199">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎Password change‎‏‎‎‏‎"</string>
+    <string name="PinMmi" msgid="3113117780361190304">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‎‎‎PIN change‎‏‎‎‏‎"</string>
+    <string name="CnipMmi" msgid="3110534680557857162">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎Calling number present‎‏‎‎‏‎"</string>
+    <string name="CnirMmi" msgid="3062102121430548731">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎Calling number restricted‎‏‎‎‏‎"</string>
+    <string name="ThreeWCMmi" msgid="9051047170321190368">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎‎‎Three way calling‎‏‎‎‏‎"</string>
+    <string name="RuacMmi" msgid="7827887459138308886">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‎Rejection of undesired annoying calls‎‏‎‎‏‎"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‎‎‎‎‎Calling number delivery‎‏‎‎‏‎"</string>
+    <string name="DndMmi" msgid="1265478932418334331">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‏‎Do not disturb‎‏‎‎‏‎"</string>
+    <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎Caller ID defaults to restricted. Next call: Restricted‎‏‎‎‏‎"</string>
+    <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎Caller ID defaults to restricted. Next call: Not restricted‎‏‎‎‏‎"</string>
+    <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‎Caller ID defaults to not restricted. Next call: Restricted‎‏‎‎‏‎"</string>
+    <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎Caller ID defaults to not restricted. Next call: Not restricted‎‏‎‎‏‎"</string>
+    <string name="serviceNotProvisioned" msgid="8614830180508686666">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‎‏‎‎Service not provisioned.‎‏‎‎‏‎"</string>
+    <string name="CLIRPermanent" msgid="3377371145926835671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎You can\'t change the caller ID setting.‎‏‎‎‏‎"</string>
+    <string name="RestrictedOnDataTitle" msgid="1322504692764166532">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‎‏‎‎‎No data service‎‏‎‎‏‎"</string>
+    <string name="RestrictedOnEmergencyTitle" msgid="3646729271176394091">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎No emergency calling‎‏‎‎‏‎"</string>
+    <string name="RestrictedOnNormalTitle" msgid="3179574012752700984">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎‎No voice service‎‏‎‎‏‎"</string>
+    <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‎No voice/emergency service‎‏‎‎‏‎"</string>
+    <string name="RestrictedStateContent" msgid="4278821484643362350">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‏‏‎‎‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‎‏‏‏‎‎Temporarily not offered by the mobile network at your location‎‏‎‎‏‎"</string>
+    <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‎‎Can’t reach network‎‏‎‎‏‎"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‎‏‎‎‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎To improve reception, try changing the type selected at Settings &gt; Network &amp; Internet &gt; Mobile networks &gt; Preferred network type.‎‏‎‎‏‎"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‎‏‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‎‎‎Wi‑Fi calling is active‎‏‎‎‏‎"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‎‏‎Emergency calls require a mobile network.‎‏‎‎‏‎"</string>
+    <string name="notification_channel_network_alert" msgid="4427736684338074967">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‏‎Alerts‎‏‎‎‏‎"</string>
+    <string name="notification_channel_call_forward" msgid="2419697808481833249">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎Call forwarding‎‏‎‎‏‎"</string>
+    <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‎Emergency callback mode‎‏‎‎‏‎"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‎Mobile data status‎‏‎‎‏‎"</string>
+    <string name="notification_channel_sms" msgid="3441746047346135073">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎SMS messages‎‏‎‎‏‎"</string>
+    <string name="notification_channel_voice_mail" msgid="3954099424160511919">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎Voicemail messages‎‏‎‎‏‎"</string>
+    <string name="notification_channel_wfc" msgid="2130802501654254801">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎Wi-Fi calling‎‏‎‎‏‎"</string>
+    <string name="peerTtyModeFull" msgid="6165351790010341421">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎Peer requested TTY Mode FULL‎‏‎‎‏‎"</string>
+    <string name="peerTtyModeHco" msgid="5728602160669216784">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎Peer requested TTY Mode HCO‎‏‎‎‏‎"</string>
+    <string name="peerTtyModeVco" msgid="1742404978686538049">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎Peer requested TTY Mode VCO‎‏‎‎‏‎"</string>
+    <string name="peerTtyModeOff" msgid="3280819717850602205">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‎‏‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎Peer requested TTY Mode OFF‎‏‎‎‏‎"</string>
+    <string name="serviceClassVoice" msgid="1258393812335258019">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‎Voice‎‏‎‎‏‎"</string>
+    <string name="serviceClassData" msgid="872456782077937893">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‏‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎‏‏‏‎‎‏‎‏‎Data‎‏‎‎‏‎"</string>
+    <string name="serviceClassFAX" msgid="5566624998840486475">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‏‎FAX‎‏‎‎‏‎"</string>
+    <string name="serviceClassSMS" msgid="2015460373701527489">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‎SMS‎‏‎‎‏‎"</string>
+    <string name="serviceClassDataAsync" msgid="4523454783498551468">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‏‎‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎Async‎‏‎‎‏‎"</string>
+    <string name="serviceClassDataSync" msgid="7530000519646054776">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‏‏‏‎‎‎‎Sync‎‏‎‎‏‎"</string>
+    <string name="serviceClassPacket" msgid="6991006557993423453">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‎Packet‎‏‎‎‏‎"</string>
+    <string name="serviceClassPAD" msgid="3235259085648271037">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‎‏‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‎‏‎PAD‎‏‎‎‏‎"</string>
+    <string name="roamingText0" msgid="7170335472198694945">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‎‎‏‎‎‎‎‏‎Roaming Indicator On‎‏‎‎‏‎"</string>
+    <string name="roamingText1" msgid="5314861519752538922">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎‎Roaming Indicator Off‎‏‎‎‏‎"</string>
+    <string name="roamingText2" msgid="8969929049081268115">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‎‏‏‎Roaming Indicator Flashing‎‏‎‎‏‎"</string>
+    <string name="roamingText3" msgid="5148255027043943317">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‎Out of Neighborhood‎‏‎‎‏‎"</string>
+    <string name="roamingText4" msgid="8808456682550796530">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎Out of Building‎‏‎‎‏‎"</string>
+    <string name="roamingText5" msgid="7604063252850354350">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‎‎Roaming - Preferred System‎‏‎‎‏‎"</string>
+    <string name="roamingText6" msgid="2059440825782871513">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎‏‎Roaming - Available System‎‏‎‎‏‎"</string>
+    <string name="roamingText7" msgid="7112078724097233605">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‏‎‏‎Roaming - Alliance Partner‎‏‎‎‏‎"</string>
+    <string name="roamingText8" msgid="5989569778604089291">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎Roaming - Premium Partner‎‏‎‎‏‎"</string>
+    <string name="roamingText9" msgid="7969296811355152491">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‏‏‎‏‎‏‏‎Roaming - Full Service Functionality‎‏‎‎‏‎"</string>
+    <string name="roamingText10" msgid="3992906999815316417">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‎‎‎‏‎Roaming - Partial Service Functionality‎‏‎‎‏‎"</string>
+    <string name="roamingText11" msgid="4154476854426920970">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‎Roaming Banner On‎‏‎‎‏‎"</string>
+    <string name="roamingText12" msgid="1189071119992726320">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎Roaming Banner Off‎‏‎‎‏‎"</string>
+    <string name="roamingTextSearching" msgid="8360141885972279963">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‎‏‏‎‏‏‎Searching for Service‎‏‎‎‏‎"</string>
+    <string name="wfcRegErrorTitle" msgid="2301376280632110664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎Wi-Fi Calling‎‏‎‎‏‎"</string>
+  <string-array name="wfcOperatorErrorAlertMessages">
+    <item msgid="3910386316304772394">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‎‏‏‏‏‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎To make calls and send messages over Wi-Fi, first ask your carrier to set up this service. Then turn on Wi-Fi calling again from Settings. (Error code: ‎‏‎‎‏‏‎<xliff:g id="CODE">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="wfcOperatorErrorNotificationMessages">
+    <item msgid="7472393097168811593">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎Register with your carrier (Error code: ‎‏‎‎‏‏‎<xliff:g id="CODE">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="wfcSpnFormats">
+    <item msgid="6830082633573257149">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎%s‎‏‎‎‏‎"</item>
+    <item msgid="4397097370387921767">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎%s Wi-Fi Calling‎‏‎‎‏‎"</item>
+  </string-array>
+    <string name="wifi_calling_off_summary" msgid="8720659586041656098">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‎‎‎‏‎‎Off‎‏‎‎‏‎"</string>
+    <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‏‎‏‏‏‏‏‎Wi-Fi preferred‎‏‎‎‏‎"</string>
+    <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‎‏‎‎‎Mobile preferred‎‏‎‎‏‎"</string>
+    <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‎‎‏‎‎‎‎Wi-Fi only‎‏‎‎‏‎"</string>
+    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>‎‏‎‎‏‏‏‎: Not forwarded‎‏‎‎‏‎"</string>
+    <string name="cfTemplateForwarded" msgid="1302922117498590521">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>‎‏‎‎‏‏‏‎: ‎‏‎‎‏‏‎<xliff:g id="DIALING_NUMBER">{1}</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>‎‏‎‎‏‏‏‎: ‎‏‎‎‏‏‎<xliff:g id="DIALING_NUMBER">{1}</xliff:g>‎‏‎‎‏‏‏‎ after ‎‏‎‎‏‏‎<xliff:g id="TIME_DELAY">{2}</xliff:g>‎‏‎‎‏‏‏‎ seconds‎‏‎‎‏‎"</string>
+    <string name="cfTemplateRegistered" msgid="5073237827620166285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‏‏‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>‎‏‎‎‏‏‏‎: Not forwarded‎‏‎‎‏‎"</string>
+    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>‎‏‎‎‏‏‏‎: Not forwarded‎‏‎‎‏‎"</string>
+    <string name="fcComplete" msgid="3118848230966886575">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‏‏‏‏‎Feature code complete.‎‏‎‎‏‎"</string>
+    <string name="fcError" msgid="3327560126588500777">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‏‎Connection problem or invalid feature code.‎‏‎‎‏‎"</string>
+    <string name="httpErrorOk" msgid="1191919378083472204">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎OK‎‏‎‎‏‎"</string>
+    <string name="httpError" msgid="7956392511146698522">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎‎‎‏‏‎‏‎‎There was a network error.‎‏‎‎‏‎"</string>
+    <string name="httpErrorLookup" msgid="4711687456111963163">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‏‏‎Couldn\'t find the URL.‎‏‎‎‏‎"</string>
+    <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‎‏‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎The site authentication scheme isn\'t supported.‎‏‎‎‏‎"</string>
+    <string name="httpErrorAuth" msgid="1435065629438044534">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎Couldn\'t authenticate.‎‏‎‎‏‎"</string>
+    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‏‎Authentication via the proxy server was unsuccessful.‎‏‎‎‏‎"</string>
+    <string name="httpErrorConnect" msgid="8714273236364640549">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎Couldn\'t connect to the server.‎‏‎‎‏‎"</string>
+    <string name="httpErrorIO" msgid="2340558197489302188">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎Couldn\'t communicate with the server. Try again later.‎‏‎‎‏‎"</string>
+    <string name="httpErrorTimeout" msgid="4743403703762883954">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎The connection to the server timed out.‎‏‎‎‏‎"</string>
+    <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‎‏‏‏‏‏‏‎‎‎The page contains too many server redirects.‎‏‎‎‏‎"</string>
+    <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎The protocol isn\'t supported.‎‏‎‎‏‎"</string>
+    <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‎‎‎‏‎Couldn\'t establish a secure connection.‎‏‎‎‏‎"</string>
+    <string name="httpErrorBadUrl" msgid="3636929722728881972">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎Couldn\'t open the page because the URL is invalid.‎‏‎‎‏‎"</string>
+    <string name="httpErrorFile" msgid="2170788515052558676">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‎‏‎‎‎Couldn\'t access the file.‎‏‎‎‏‎"</string>
+    <string name="httpErrorFileNotFound" msgid="6203856612042655084">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‏‏‎‎‎Couldn\'t find the requested file.‎‏‎‎‏‎"</string>
+    <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‎‏‎Too many requests are being processed. Try again later.‎‏‎‎‏‎"</string>
+    <string name="notification_title" msgid="8967710025036163822">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‎Signin error for ‎‏‎‎‏‏‎<xliff:g id="ACCOUNT">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="contentServiceSync" msgid="8353523060269335667">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎Sync‎‏‎‎‏‎"</string>
+    <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‎‎‏‎‎Sync‎‏‎‎‏‎"</string>
+    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‏‎Too many ‎‏‎‎‏‏‎<xliff:g id="CONTENT_TYPE">%s</xliff:g>‎‏‎‎‏‏‏‎ deletes.‎‏‎‎‏‎"</string>
+    <string name="low_memory" product="tablet" msgid="6494019234102154896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎Tablet storage is full. Delete some files to free space.‎‏‎‎‏‎"</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎Watch storage is full. Delete some files to free space.‎‏‎‎‏‎"</string>
+    <string name="low_memory" product="tv" msgid="516619861191025923">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‎‎‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎TV storage is full. Delete some files to free space.‎‏‎‎‏‎"</string>
+    <string name="low_memory" product="default" msgid="3475999286680000541">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‎Phone storage is full. Delete some files to free space.‎‏‎‎‏‎"</string>
+    <plurals name="ssl_ca_cert_warning" formatted="false" msgid="5106721205300213569">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎Certificate authorities installed‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎Certificate authority installed‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎By an unknown third party‎‏‎‎‏‎"</string>
+    <string name="ssl_ca_cert_noti_by_administrator" msgid="3541729986326153557">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎By your work profile admin‎‏‎‎‏‎"</string>
+    <string name="ssl_ca_cert_noti_managed" msgid="4030263497686867141">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‏‎By ‎‏‎‎‏‏‎<xliff:g id="MANAGING_DOMAIN">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="work_profile_deleted" msgid="5005572078641980632">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎Work profile deleted‎‏‎‎‏‎"</string>
+    <string name="work_profile_deleted_description" msgid="1100529432509639864">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎Work profile deleted due to missing admin app‎‏‎‎‏‎"</string>
+    <string name="work_profile_deleted_details" msgid="6307630639269092360">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‎‏‏‏‎‎‎‎‎‎‏‎‎‎‎The work profile admin app is either missing or corrupted. As a result, your work profile and related data have been deleted. Contact your admin for assistance.‎‏‎‎‏‎"</string>
+    <string name="work_profile_deleted_description_dpm_wipe" msgid="8823792115612348820">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‎‎‎Your work profile is no longer available on this device‎‏‎‎‏‎"</string>
+    <string name="network_logging_notification_title" msgid="6399790108123704477">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‎‏‎Device is managed‎‏‎‎‏‎"</string>
+    <string name="network_logging_notification_text" msgid="7930089249949354026">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎‎Your organization manages this device and may monitor network traffic. Tap for details.‎‏‎‎‏‎"</string>
+    <string name="factory_reset_warning" msgid="5423253125642394387">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‏‏‎Your device will be erased‎‏‎‎‏‎"</string>
+    <string name="factory_reset_message" msgid="7972496262232832457">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‎The admin app can\'t be used. Your device will now be erased.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎If you have questions, contact your organizations admin.‎‏‎‎‏‎"</string>
+    <string name="me" msgid="6545696007631404292">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎Me‎‏‎‎‏‎"</string>
+    <string name="power_dialog" product="tablet" msgid="8545351420865202853">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‏‎‎‏‎‏‎‏‎‏‎‎‏‎‏‎Tablet options‎‏‎‎‏‎"</string>
+    <string name="power_dialog" product="tv" msgid="6153888706430556356">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‎‎TV options‎‏‎‎‏‎"</string>
+    <string name="power_dialog" product="default" msgid="1319919075463988638">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎Phone options‎‏‎‎‏‎"</string>
+    <string name="silent_mode" msgid="7167703389802618663">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎Silent mode‎‏‎‎‏‎"</string>
+    <string name="turn_on_radio" msgid="3912793092339962371">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‏‎‏‏‎‎‏‎‎‎‎‏‏‎‏‎‎‏‎‎‏‎‎‎‎‎‎‎‏‏‎Turn on wireless‎‏‎‎‏‎"</string>
+    <string name="turn_off_radio" msgid="8198784949987062346">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎Turn off wireless‎‏‎‎‏‎"</string>
+    <string name="screen_lock" msgid="799094655496098153">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‎Screen lock‎‏‎‎‏‎"</string>
+    <string name="power_off" msgid="4266614107412865048">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎Power off‎‏‎‎‏‎"</string>
+    <string name="silent_mode_silent" msgid="319298163018473078">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‎‎Ringer off‎‏‎‎‏‎"</string>
+    <string name="silent_mode_vibrate" msgid="7072043388581551395">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‎‎‎‏‏‎Ringer vibrate‎‏‎‎‏‎"</string>
+    <string name="silent_mode_ring" msgid="8592241816194074353">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎Ringer on‎‏‎‎‏‎"</string>
+    <string name="reboot_to_update_title" msgid="6212636802536823850">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‎Android system update‎‏‎‎‏‎"</string>
+    <string name="reboot_to_update_prepare" msgid="6305853831955310890">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‎‏‎‎Preparing to update…‎‏‎‎‏‎"</string>
+    <string name="reboot_to_update_package" msgid="3871302324500927291">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‏‏‎Processing the update package…‎‏‎‎‏‎"</string>
+    <string name="reboot_to_update_reboot" msgid="6428441000951565185">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎Restarting…‎‏‎‎‏‎"</string>
+    <string name="reboot_to_reset_title" msgid="4142355915340627490">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎Factory data reset‎‏‎‎‏‎"</string>
+    <string name="reboot_to_reset_message" msgid="2432077491101416345">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎Restarting…‎‏‎‎‏‎"</string>
+    <string name="shutdown_progress" msgid="2281079257329981203">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‎‎‎‏‎‎‏‏‎Shutting down…‎‏‎‎‏‎"</string>
+    <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‎Your tablet will shut down.‎‏‎‎‏‎"</string>
+    <string name="shutdown_confirm" product="tv" msgid="476672373995075359">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‎Your TV will shut down.‎‏‎‎‏‎"</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‏‎‎‎‎‎‎Your watch will shut down.‎‏‎‎‏‎"</string>
+    <string name="shutdown_confirm" product="default" msgid="649792175242821353">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎Your phone will shut down.‎‏‎‎‏‎"</string>
+    <string name="shutdown_confirm_question" msgid="2906544768881136183">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‏‏‎Do you want to shut down?‎‏‎‎‏‎"</string>
+    <string name="reboot_safemode_title" msgid="7054509914500140361">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‎Reboot to safe mode‎‏‎‎‏‎"</string>
+    <string name="reboot_safemode_confirm" msgid="55293944502784668">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‎‎‎‏‎‎‎‏‏‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‏‎‎‏‏‏‎‎‎Do you want to reboot into safe mode? This will disable all third party applications you have installed. They will be restored when you reboot again.‎‏‎‎‏‎"</string>
+    <string name="recent_tasks_title" msgid="3691764623638127888">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‎‎Recent‎‏‎‎‏‎"</string>
+    <string name="no_recent_tasks" msgid="8794906658732193473">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‎‏‎No recent apps.‎‏‎‎‏‎"</string>
+    <string name="global_actions" product="tablet" msgid="408477140088053665">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎Tablet options‎‏‎‎‏‎"</string>
+    <string name="global_actions" product="tv" msgid="7240386462508182976">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎TV options‎‏‎‎‏‎"</string>
+    <string name="global_actions" product="default" msgid="2406416831541615258">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‎‏‎‏‎‏‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‎Phone options‎‏‎‎‏‎"</string>
+    <string name="global_action_lock" msgid="2844945191792119712">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‎‎‎Screen lock‎‏‎‎‏‎"</string>
+    <string name="global_action_power_off" msgid="4471879440839879722">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎Power off‎‏‎‎‏‎"</string>
+    <string name="global_action_emergency" msgid="7112311161137421166">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎Emergency‎‏‎‎‏‎"</string>
+    <string name="global_action_bug_report" msgid="7934010578922304799">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‏‎Bug report‎‏‎‎‏‎"</string>
+    <string name="bugreport_title" msgid="2667494803742548533">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‏‎‏‎Take bug report‎‏‎‎‏‎"</string>
+    <string name="bugreport_message" msgid="398447048750350456">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‏‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎This will collect information about your current device state, to send as an e-mail message. It will take a little time from starting the bug report until it is ready to be sent; please be patient.‎‏‎‎‏‎"</string>
+    <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎‎‎‎‏‏‏‏‎Interactive report‎‏‎‎‏‎"</string>
+    <string name="bugreport_option_interactive_summary" msgid="229299488536107968">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‏‎‏‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‏‎‏‎‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‎‎‎‎‎Use this under most circumstances. It allows you to track progress of the report, enter more details about the problem, and take screenshots. It might omit some less-used sections that take a long time to report.‎‏‎‎‏‎"</string>
+    <string name="bugreport_option_full_title" msgid="6354382025840076439">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‏‏‏‎Full report‎‏‎‎‏‎"</string>
+    <string name="bugreport_option_full_summary" msgid="7210859858969115745">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎Use this option for minimal system interference when your device is unresponsive or too slow, or when you need all report sections. Does not allow you to enter more details or take additional screenshots.‎‏‎‎‏‎"</string>
+    <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‎‎Taking screenshot for bug report in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‎‎Taking screenshot for bug report in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%d</xliff:g>‎‏‎‎‏‏‏‎ second.‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‏‎Silent mode‎‏‎‎‏‎"</string>
+    <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‎Sound is OFF‎‏‎‎‏‎"</string>
+    <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎Sound is ON‎‏‎‎‏‎"</string>
+    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎Airplane mode‎‏‎‎‏‎"</string>
+    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎Airplane mode is ON‎‏‎‎‏‎"</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎Airplane mode is OFF‎‏‎‎‏‎"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎Settings‎‏‎‎‏‎"</string>
+    <string name="global_action_assist" msgid="3892832961594295030">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‏‏‏‏‎‏‏‎‎Assist‎‏‎‎‏‎"</string>
+    <string name="global_action_voice_assist" msgid="7751191495200504480">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎Voice Assist‎‏‎‎‏‎"</string>
+    <string name="global_action_lockdown" msgid="8751542514724332873">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‎‎‏‎Lock now‎‏‎‎‏‎"</string>
+    <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎999+‎‏‎‎‏‎"</string>
+    <string name="notification_hidden_text" msgid="6351207030447943784">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‎‏‏‎‏‎‎‎‎New notification‎‏‎‎‏‎"</string>
+    <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎Virtual keyboard‎‏‎‎‏‎"</string>
+    <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎Physical keyboard‎‏‎‎‏‎"</string>
+    <string name="notification_channel_security" msgid="7345516133431326347">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎Security‎‏‎‎‏‎"</string>
+    <string name="notification_channel_car_mode" msgid="3553380307619874564">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‏‎‎‎‎‎‏‎‎‎Car mode‎‏‎‎‏‎"</string>
+    <string name="notification_channel_account" msgid="7577959168463122027">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎Account status‎‏‎‎‏‎"</string>
+    <string name="notification_channel_developer" msgid="7579606426860206060">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎Developer messages‎‏‎‎‏‎"</string>
+    <string name="notification_channel_updates" msgid="4794517569035110397">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎Updates‎‏‎‎‏‎"</string>
+    <string name="notification_channel_network_status" msgid="5025648583129035447">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎Network status‎‏‎‎‏‎"</string>
+    <string name="notification_channel_network_alerts" msgid="2895141221414156525">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎Network alerts‎‏‎‎‏‎"</string>
+    <string name="notification_channel_network_available" msgid="4531717914138179517">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‏‎Network available‎‏‎‎‏‎"</string>
+    <string name="notification_channel_vpn" msgid="8330103431055860618">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‎‎VPN status‎‏‎‎‏‎"</string>
+    <string name="notification_channel_device_admin" msgid="1568154104368069249">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‎Device administration‎‏‎‎‏‎"</string>
+    <string name="notification_channel_alerts" msgid="4496839309318519037">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎Alerts‎‏‎‎‏‎"</string>
+    <string name="notification_channel_retail_mode" msgid="6088920674914038779">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎Retail demo‎‏‎‎‏‎"</string>
+    <string name="notification_channel_usb" msgid="9006850475328924681">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎USB connection‎‏‎‎‏‎"</string>
+    <string name="notification_channel_foreground_service" msgid="3931987440602669158">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‏‏‎‎Apps consuming battery‎‏‎‎‏‎"</string>
+    <string name="foreground_service_app_in_background" msgid="1060198778219731292">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is using battery‎‏‎‎‏‎"</string>
+    <string name="foreground_service_apps_in_background" msgid="7175032677643332242">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="NUMBER">%1$d</xliff:g>‎‏‎‎‏‏‏‎ apps are using battery‎‏‎‎‏‎"</string>
+    <string name="foreground_service_tap_for_details" msgid="372046743534354644">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‏‎‎‎Tap for details on battery and data usage‎‏‎‎‏‎"</string>
+    <string name="foreground_service_multiple_separator" msgid="4021901567939866542">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="LEFT_SIDE">%1$s</xliff:g>‎‏‎‎‏‏‏‎, ‎‏‎‎‏‏‎<xliff:g id="RIGHT_SIDE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="safeMode" msgid="2788228061547930246">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎Safe mode‎‏‎‎‏‎"</string>
+    <string name="android_system_label" msgid="6577375335728551336">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‎‎‎‎‎‎‎‎‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‏‎‎‎‎Android System‎‏‎‎‏‎"</string>
+    <string name="user_owner_label" msgid="1119010402169916617">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎Switch to Personal‎‏‎‎‏‎"</string>
+    <string name="managed_profile_label" msgid="5289992269827577857">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‏‎Switch to Work‎‏‎‎‏‎"</string>
+    <string name="permgrouplab_contacts" msgid="3657758145679177612">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎Contacts‎‏‎‎‏‎"</string>
+    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‎access your contacts‎‏‎‎‏‎"</string>
+    <string name="permgrouplab_location" msgid="7275582855722310164">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‎‎Location‎‏‎‎‏‎"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎access this device\'s location‎‏‎‎‏‎"</string>
+    <string name="permgrouplab_calendar" msgid="5863508437783683902">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‏‏‎‎Calendar‎‏‎‎‏‎"</string>
+    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‎‏‎‎access your calendar‎‏‎‎‏‎"</string>
+    <string name="permgrouplab_sms" msgid="228308803364967808">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‏‎‏‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‎SMS‎‏‎‎‏‎"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‏‏‏‏‎‎send and view SMS messages‎‏‎‎‏‎"</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎Storage‎‏‎‎‏‎"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎access photos, media, and files on your device‎‏‎‎‏‎"</string>
+    <string name="permgrouplab_microphone" msgid="171539900250043464">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‎‎Microphone‎‏‎‎‏‎"</string>
+    <string name="permgroupdesc_microphone" msgid="4988812113943554584">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‎record audio‎‏‎‎‏‎"</string>
+    <string name="permgrouplab_camera" msgid="4820372495894586615">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‎‏‎‎‏‏‏‏‎‏‏‏‎Camera‎‏‎‎‏‎"</string>
+    <string name="permgroupdesc_camera" msgid="3250611594678347720">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‎‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‎‎take pictures and record video‎‏‎‎‏‎"</string>
+    <string name="permgrouplab_phone" msgid="5229115638567440675">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‎‏‎‎‎‏‏‎Phone‎‏‎‎‏‎"</string>
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‏‏‏‎make and manage phone calls‎‏‎‎‏‎"</string>
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‎‎‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‎Body Sensors‎‏‎‎‏‎"</string>
+    <string name="permgroupdesc_sensors" msgid="7147968539346634043">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‏‎access sensor data about your vital signs‎‏‎‎‏‎"</string>
+    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎Retrieve window content‎‏‎‎‏‎"</string>
+    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎Inspect the content of a window you\'re interacting with.‎‏‎‎‏‎"</string>
+    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎Turn on Explore by Touch‎‏‎‎‏‎"</string>
+    <string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎Tapped items will be spoken aloud and the screen can be explored using gestures.‎‏‎‎‏‎"</string>
+    <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎Observe text you type‎‏‎‎‏‎"</string>
+    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎Includes personal data such as credit card numbers and passwords.‎‏‎‎‏‎"</string>
+    <string name="capability_title_canControlMagnification" msgid="3593493281059424855">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‎Control display magnification‎‏‎‎‏‎"</string>
+    <string name="capability_desc_canControlMagnification" msgid="4791858203568383773">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎Control the display\'s zoom level and positioning.‎‏‎‎‏‎"</string>
+    <string name="capability_title_canPerformGestures" msgid="7418984730362576862">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎Perform gestures‎‏‎‎‏‎"</string>
+    <string name="capability_desc_canPerformGestures" msgid="8296373021636981249">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎Can tap, swipe, pinch, and perform other gestures.‎‏‎‎‏‎"</string>
+    <string name="capability_title_canCaptureFingerprintGestures" msgid="6309568287512278670">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎Fingerprint gestures‎‏‎‎‏‎"</string>
+    <string name="capability_desc_canCaptureFingerprintGestures" msgid="7102111919385702482">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‏‎‎Can capture gestures performed on the devices fingerprint sensor.‎‏‎‎‏‎"</string>
+    <string name="permlab_statusBar" msgid="7417192629601890791">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‏‎disable or modify status bar‎‏‎‎‏‎"</string>
+    <string name="permdesc_statusBar" msgid="8434669549504290975">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‎Allows the app to disable the status bar or add and remove system icons.‎‏‎‎‏‎"</string>
+    <string name="permlab_statusBarService" msgid="4826835508226139688">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‎be the status bar‎‏‎‎‏‎"</string>
+    <string name="permdesc_statusBarService" msgid="716113660795976060">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‎‎‏‏‎‎‎‏‏‏‏‎‎‏‎‏‏‏‏‏‎‎‎Allows the app to be the status bar.‎‏‎‎‏‎"</string>
+    <string name="permlab_expandStatusBar" msgid="1148198785937489264">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎expand/collapse status bar‎‏‎‎‏‎"</string>
+    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‏‎‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎Allows the app to expand or collapse the status bar.‎‏‎‎‏‎"</string>
+    <string name="permlab_install_shortcut" msgid="4279070216371564234">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎install shortcuts‎‏‎‎‏‎"</string>
+    <string name="permdesc_install_shortcut" msgid="8341295916286736996">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎Allows an application to add Homescreen shortcuts without user intervention.‎‏‎‎‏‎"</string>
+    <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‎‏‏‏‎‎‏‏‎uninstall shortcuts‎‏‎‎‏‎"</string>
+    <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‎Allows the application to remove Homescreen shortcuts without user intervention.‎‏‎‎‏‎"</string>
+    <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎‏‎‎reroute outgoing calls‎‏‎‎‏‎"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎Allows the app to see the number being dialed during an outgoing call with the option to redirect the call to a different number or abort the call altogether.‎‏‎‎‏‎"</string>
+    <string name="permlab_answerPhoneCalls" msgid="4077162841226223337">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎answer phone calls‎‏‎‎‏‎"</string>
+    <string name="permdesc_answerPhoneCalls" msgid="2901889867993572266">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‎‎Allows the app to answer an incoming phone call.‎‏‎‎‏‎"</string>
+    <string name="permlab_receiveSms" msgid="8673471768947895082">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎‎receive text messages (SMS)‎‏‎‎‏‎"</string>
+    <string name="permdesc_receiveSms" msgid="6424387754228766939">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎Allows the app to receive and process SMS messages. This means the app could monitor or delete messages sent to your device without showing them to you.‎‏‎‎‏‎"</string>
+    <string name="permlab_receiveMms" msgid="1821317344668257098">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‏‎‏‎‎receive text messages (MMS)‎‏‎‎‏‎"</string>
+    <string name="permdesc_receiveMms" msgid="533019437263212260">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‎‏‎‎‎Allows the app to receive and process MMS messages. This means the app could monitor or delete messages sent to your device without showing them to you.‎‏‎‎‏‎"</string>
+    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‏‎‎read cell broadcast messages‎‏‎‎‏‎"</string>
+    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‎‎‎‏‎‎‏‎‎‎‏‎‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‏‎‎‎‏‏‎Allows the app to read cell broadcast messages received by your device. Cell broadcast alerts are delivered in some locations to warn you of emergency situations. Malicious apps may interfere with the performance or operation of your device when an emergency cell broadcast is received.‎‏‎‎‏‎"</string>
+    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎read subscribed feeds‎‏‎‎‏‎"</string>
+    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‏‏‎‎‏‎Allows the app to get details about the currently synced feeds.‎‏‎‎‏‎"</string>
+    <string name="permlab_sendSms" msgid="7544599214260982981">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‎‏‎‏‎send and view SMS messages‎‏‎‎‏‎"</string>
+    <string name="permdesc_sendSms" msgid="7094729298204937667">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‎‎‎‏‏‎Allows the app to send SMS messages. This may result in unexpected charges. Malicious apps may cost you money by sending messages without your confirmation.‎‏‎‎‏‎"</string>
+    <string name="permlab_readSms" msgid="8745086572213270480">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎read your text messages (SMS or MMS)‎‏‎‎‏‎"</string>
+    <string name="permdesc_readSms" product="tablet" msgid="4741697454888074891">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎This app can read all SMS (text) messages stored on your tablet.‎‏‎‎‏‎"</string>
+    <string name="permdesc_readSms" product="tv" msgid="5796670395641116592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎This app can read all SMS (text) messages stored on your TV.‎‏‎‎‏‎"</string>
+    <string name="permdesc_readSms" product="default" msgid="6826832415656437652">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‎‎‎This app can read all SMS (text) messages stored on your phone.‎‏‎‎‏‎"</string>
+    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎receive text messages (WAP)‎‏‎‎‏‎"</string>
+    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‎‎‏‎Allows the app to receive and process WAP messages. This permission includes the ability to monitor or delete messages sent to you without showing them to you.‎‏‎‎‏‎"</string>
+    <string name="permlab_getTasks" msgid="6466095396623933906">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎retrieve running apps‎‏‎‎‏‎"</string>
+    <string name="permdesc_getTasks" msgid="7454215995847658102">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‎‏‏‎‎Allows the app to retrieve information about currently and recently running tasks. This may allow the app to discover information about which applications are used on the device.‎‏‎‎‏‎"</string>
+    <string name="permlab_manageProfileAndDeviceOwners" msgid="7918181259098220004">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎‎‎manage profile and device owners‎‏‎‎‏‎"</string>
+    <string name="permdesc_manageProfileAndDeviceOwners" msgid="106894851498657169">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎Allows apps to set the profile owners and the device owner.‎‏‎‎‏‎"</string>
+    <string name="permlab_reorderTasks" msgid="2018575526934422779">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‎‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎reorder running apps‎‏‎‎‏‎"</string>
+    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎Allows the app to move tasks to the foreground and background. The app may do this without your input.‎‏‎‎‏‎"</string>
+    <string name="permlab_enableCarMode" msgid="5684504058192921098">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‏‎‎enable car mode‎‏‎‎‏‎"</string>
+    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‎‎‎‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‏‎Allows the app to enable the car mode.‎‏‎‎‏‎"</string>
+    <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‎‏‎‎close other apps‎‏‎‎‏‎"</string>
+    <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‏‏‎Allows the app to end background processes of other apps. This may cause other apps to stop running.‎‏‎‎‏‎"</string>
+    <string name="permlab_systemAlertWindow" msgid="7238805243128138690">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎‎‏‎‎This app can appear on top of other apps‎‏‎‎‏‎"</string>
+    <string name="permdesc_systemAlertWindow" msgid="2393776099672266188">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎This app can appear on top of other apps or other parts of the screen. This may interfere with normal app usage and change the way that other apps appear.‎‏‎‎‏‎"</string>
+    <string name="permlab_runInBackground" msgid="7365290743781858803">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‏‏‎run in the background‎‏‎‎‏‎"</string>
+    <string name="permdesc_runInBackground" msgid="7370142232209999824">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‎‎This app can run in the background. This may drain battery faster.‎‏‎‎‏‎"</string>
+    <string name="permlab_useDataInBackground" msgid="8694951340794341809">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎use data in the background‎‏‎‎‏‎"</string>
+    <string name="permdesc_useDataInBackground" msgid="6049514223791806027">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‎‎‏‎‏‏‎This app can use data in the background. This may increase data usage.‎‏‎‎‏‎"</string>
+    <string name="permlab_persistentActivity" msgid="8841113627955563938">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‎make app always run‎‏‎‎‏‎"</string>
+    <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the tablet.‎‏‎‎‏‎"</string>
+    <string name="permdesc_persistentActivity" product="tv" msgid="5086862529499103587">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‎‏‏‎Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the TV.‎‏‎‎‏‎"</string>
+    <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎Allows the app to make parts of itself persistent in memory. This can limit memory available to other apps slowing down the phone.‎‏‎‎‏‎"</string>
+    <string name="permlab_getPackageSize" msgid="7472921768357981986">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎measure app storage space‎‏‎‎‏‎"</string>
+    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎Allows the app to retrieve its code, data, and cache sizes‎‏‎‎‏‎"</string>
+    <string name="permlab_writeSettings" msgid="2226195290955224730">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‏‎‎modify system settings‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeSettings" msgid="7775723441558907181">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‎‏‎Allows the app to modify the system\'s settings data. Malicious apps may corrupt your system\'s configuration.‎‏‎‎‏‎"</string>
+    <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎run at startup‎‏‎‎‏‎"</string>
+    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎Allows the app to have itself started as soon as the system has finished booting. This can make it take longer to start the tablet and allow the app to slow down the overall tablet by always running.‎‏‎‎‏‎"</string>
+    <string name="permdesc_receiveBootCompleted" product="tv" msgid="4525890122209673621">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‎‎‏‏‏‎‎‎‎‎‏‏‎‎‏‎‏‎‏‎Allows the app to have itself started as soon as the system has finished booting. This can make it take longer to start the TV and allow the app to slow down the overall tablet by always running.‎‏‎‎‏‎"</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎Allows the app to have itself started as soon as the system has finished booting. This can make it take longer to start the phone and allow the app to slow down the overall phone by always running.‎‏‎‎‏‎"</string>
+    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‎‏‎‎‏‏‏‎‎send sticky broadcast‎‏‎‎‏‎"</string>
+    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎Allows the app to send sticky broadcasts, which remain after the broadcast ends. Excessive use may make the tablet slow or unstable by causing it to use too much memory.‎‏‎‎‏‎"</string>
+    <string name="permdesc_broadcastSticky" product="tv" msgid="6839285697565389467">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‎‏‎‎‏‏‎‏‏‎Allows the app to send sticky broadcasts, which remain after the broadcast ends. Excessive use may make the TV slow or unstable by causing it to use too much memory.‎‏‎‎‏‎"</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎Allows the app to send sticky broadcasts, which remain after the broadcast ends. Excessive use may make the phone slow or unstable by causing it to use too much memory.‎‏‎‎‏‎"</string>
+    <string name="permlab_readContacts" msgid="8348481131899886131">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎read your contacts‎‏‎‎‏‎"</string>
+    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎Allows the app to read data about your contacts stored on your tablet, including the frequency with which you\'ve called, emailed, or communicated in other ways with specific individuals. This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.‎‏‎‎‏‎"</string>
+    <string name="permdesc_readContacts" product="tv" msgid="1839238344654834087">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‏‎Allows the app to read data about your contacts stored on your TV, including the frequency with which you\'ve called, emailed, or communicated in other ways with specific individuals. This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.‎‏‎‎‏‎"</string>
+    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎Allows the app to read data about your contacts stored on your phone, including the frequency with which you\'ve called, emailed, or communicated in other ways with specific individuals. This permission allows apps to save your contact data, and malicious apps may share contact data without your knowledge.‎‏‎‎‏‎"</string>
+    <string name="permlab_writeContacts" msgid="5107492086416793544">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎modify your contacts‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‎‎‎‏‎‎Allows the app to modify the data about your contacts stored on your tablet, including the frequency with which you\'ve called, emailed, or communicated in other ways with specific contacts. This permission allows apps to delete contact data.‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeContacts" product="tv" msgid="5438230957000018959">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‎‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‎‎‎‏‏‏‏‎Allows the app to modify the data about your contacts stored on your TV, including the frequency with which you\'ve called, emailed, or communicated in other ways with specific contacts. This permission allows apps to delete contact data.‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‎Allows the app to modify the data about your contacts stored on your phone, including the frequency with which you\'ve called, emailed, or communicated in other ways with specific contacts. This permission allows apps to delete contact data.‎‏‎‎‏‎"</string>
+    <string name="permlab_readCallLog" msgid="3478133184624102739">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‏‎read call log‎‏‎‎‏‎"</string>
+    <string name="permdesc_readCallLog" msgid="3204122446463552146">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‏‎‎‏‎‎‏‎‎This app can read your call history.‎‏‎‎‏‎"</string>
+    <string name="permlab_writeCallLog" msgid="8552045664743499354">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‏‎‎write call log‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‎‎‎‎‎‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‎Allows the app to modify your tablet\'s call log, including data about incoming and outgoing calls. Malicious apps may use this to erase or modify your call log.‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeCallLog" product="tv" msgid="4225034892248398019">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‏‎‎‎‎‏‏‎Allows the app to modify your TV\'s call log, including data about incoming and outgoing calls. Malicious apps may use this to erase or modify your call log.‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‏‎‎Allows the app to modify your phone\'s call log, including data about incoming and outgoing calls. Malicious apps may use this to erase or modify your call log.‎‏‎‎‏‎"</string>
+    <string name="permlab_bodySensors" msgid="4683341291818520277">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎access body sensors (like heart rate monitors)‎‏‎‎‏‎"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="4380015021754180431">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎Allows the app to access data from sensors that monitor your physical condition, such as your heart rate.‎‏‎‎‏‎"</string>
+    <string name="permlab_readCalendar" msgid="6716116972752441641">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎Read calendar events and details‎‏‎‎‏‎"</string>
+    <string name="permdesc_readCalendar" product="tablet" msgid="4993979255403945892">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎This app can read all calendar events stored on your tablet and share or save your calendar data.‎‏‎‎‏‎"</string>
+    <string name="permdesc_readCalendar" product="tv" msgid="8837931557573064315">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‏‏‎‏‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎This app can read all calendar events stored on your TV and share or save your calendar data.‎‏‎‎‏‎"</string>
+    <string name="permdesc_readCalendar" product="default" msgid="4373978642145196715">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎This app can read all calendar events stored on your phone and share or save your calendar data.‎‏‎‎‏‎"</string>
+    <string name="permlab_writeCalendar" msgid="8438874755193825647">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎add or modify calendar events and send email to guests without owners\' knowledge‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeCalendar" product="tablet" msgid="1675270619903625982">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‏‏‏‏‏‏‏‎‎This app can add, remove, or change calendar events on your tablet. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeCalendar" product="tv" msgid="9017809326268135866">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎This app can add, remove, or change calendar events on your TV. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeCalendar" product="default" msgid="7592791790516943173">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎This app can add, remove, or change calendar events on your phone. This app can send messages that may appear to come from calendar owners, or change events without notifying their owners.‎‏‎‎‏‎"</string>
+    <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎access extra location provider commands‎‏‎‎‏‎"</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="6078307221056649927">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎Allows the app to access extra location provider commands. This may allow the app to interfere with the operation of the GPS or other location sources.‎‏‎‎‏‎"</string>
+    <string name="permlab_accessFineLocation" msgid="251034415460950944">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‏‎‏‎‎‎‎‎‎access precise location (GPS and network-based)‎‏‎‎‏‎"</string>
+    <string name="permdesc_accessFineLocation" msgid="5821994817969957884">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‏‎‎‎This app can get your location based on GPS or network location sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them. This may increase battery consumption.‎‏‎‎‏‎"</string>
+    <string name="permlab_accessCoarseLocation" msgid="7715277613928539434">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‏‎‎access approximate location (network-based)‎‏‎‎‏‎"</string>
+    <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3373266766487862426">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎This app can get your location based on network sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your tablet for the app to be able to use them.‎‏‎‎‏‎"</string>
+    <string name="permdesc_accessCoarseLocation" product="tv" msgid="1884022719818788511">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‎‎‎‎‏‏‏‎‎‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‏‏‏‏‏‎This app can get your location based on network sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your TV for the app to be able to use them.‎‏‎‎‏‎"</string>
+    <string name="permdesc_accessCoarseLocation" product="default" msgid="7788009094906196995">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎This app can get your location based on network sources such as cell towers and Wi-Fi networks. These location services must be turned on and available on your phone for the app to be able to use them.‎‏‎‎‏‎"</string>
+    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎change your audio settings‎‏‎‎‏‎"</string>
+    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‎‏‎‎‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎Allows the app to modify global audio settings such as volume and which speaker is used for output.‎‏‎‎‏‎"</string>
+    <string name="permlab_recordAudio" msgid="3876049771427466323">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‎record audio‎‏‎‎‏‎"</string>
+    <string name="permdesc_recordAudio" msgid="4245930455135321433">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎This app can record audio using the microphone at any time.‎‏‎‎‏‎"</string>
+    <string name="permlab_sim_communication" msgid="2935852302216852065">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‎send commands to the SIM‎‏‎‎‏‎"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎‎Allows the app to send commands to the SIM. This is very dangerous.‎‏‎‎‏‎"</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‎‎‎take pictures and videos‎‏‎‎‏‎"</string>
+    <string name="permdesc_camera" msgid="5392231870049240670">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎This app can take pictures and record videos using the camera at any time.‎‏‎‎‏‎"</string>
+    <string name="permlab_vibrate" msgid="7696427026057705834">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎control vibration‎‏‎‎‏‎"</string>
+    <string name="permdesc_vibrate" msgid="6284989245902300945">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎Allows the app to control the vibrator.‎‏‎‎‏‎"</string>
+    <string name="permlab_callPhone" msgid="3925836347681847954">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎directly call phone numbers‎‏‎‎‏‎"</string>
+    <string name="permdesc_callPhone" msgid="3740797576113760827">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎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="3574943847181793918">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎access IMS call service‎‏‎‎‏‎"</string>
+    <string name="permdesc_accessImsCallService" msgid="8992884015198298775">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‏‏‎Allows the app to use the IMS service to make calls without your intervention.‎‏‎‎‏‎"</string>
+    <string name="permlab_readPhoneState" msgid="9178228524507610486">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎read phone status and identity‎‏‎‎‏‎"</string>
+    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‎‎Allows the app to access the phone features of the device. This permission allows the app to determine the phone number and device IDs, whether a call is active, and the remote number connected by a call.‎‏‎‎‏‎"</string>
+    <string name="permlab_manageOwnCalls" msgid="1503034913274622244">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‎‎‏‎‎‎route calls through the system‎‏‎‎‏‎"</string>
+    <string name="permdesc_manageOwnCalls" msgid="6552974537554717418">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎Allows the app to route its calls through the system in order to improve the calling experience.‎‏‎‎‏‎"</string>
+    <string name="permlab_readPhoneNumbers" msgid="6108163940932852440">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‎‎‎read phone numbers‎‏‎‎‏‎"</string>
+    <string name="permdesc_readPhoneNumbers" msgid="8559488833662272354">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎‎‏‎‎Allows the app to access the phone numbers of the device.‎‏‎‎‏‎"</string>
+    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎prevent tablet from sleeping‎‏‎‎‏‎"</string>
+    <string name="permlab_wakeLock" product="tv" msgid="2601193288949154131">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎prevent TV from sleeping‎‏‎‎‏‎"</string>
+    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎prevent phone from sleeping‎‏‎‎‏‎"</string>
+    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‎‎Allows the app to prevent the tablet from going to sleep.‎‏‎‎‏‎"</string>
+    <string name="permdesc_wakeLock" product="tv" msgid="3208534859208996974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‎‎Allows the app to prevent the TV from going to sleep.‎‏‎‎‏‎"</string>
+    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎Allows the app to prevent the phone from going to sleep.‎‏‎‎‏‎"</string>
+    <string name="permlab_transmitIr" msgid="7545858504238530105">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‎‎‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎transmit infrared‎‏‎‎‏‎"</string>
+    <string name="permdesc_transmitIr" product="tablet" msgid="5358308854306529170">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‎Allows the app to use the tablet\'s infrared transmitter.‎‏‎‎‏‎"</string>
+    <string name="permdesc_transmitIr" product="tv" msgid="3926790828514867101">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎Allows the app to use the TV\'s infrared transmitter.‎‏‎‎‏‎"</string>
+    <string name="permdesc_transmitIr" product="default" msgid="7957763745020300725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‏‎Allows the app to use the phone\'s infrared transmitter.‎‏‎‎‏‎"</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‏‎set wallpaper‎‏‎‎‏‎"</string>
+    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎Allows the app to set the system wallpaper.‎‏‎‎‏‎"</string>
+    <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‎adjust your wallpaper size‎‏‎‎‏‎"</string>
+    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‏‏‎Allows the app to set the system wallpaper size hints.‎‏‎‎‏‎"</string>
+    <string name="permlab_setTimeZone" msgid="2945079801013077340">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎set time zone‎‏‎‎‏‎"</string>
+    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎Allows the app to change the tablet\'s time zone.‎‏‎‎‏‎"</string>
+    <string name="permdesc_setTimeZone" product="tv" msgid="888864653946175955">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎Allows the app to change the TV\'s time zone.‎‏‎‎‏‎"</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎Allows the app to change the phone\'s time zone.‎‏‎‎‏‎"</string>
+    <string name="permlab_getAccounts" msgid="1086795467760122114">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎find accounts on the device‎‏‎‎‏‎"</string>
+    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‏‎Allows the app to get the list of accounts known by the tablet. This may include any accounts created by applications you have installed.‎‏‎‎‏‎"</string>
+    <string name="permdesc_getAccounts" product="tv" msgid="4190633395633907543">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‎‏‎‏‏‏‎Allows the app to get the list of accounts known by the TV. This may include any accounts created by applications you have installed.‎‏‎‎‏‎"</string>
+    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎Allows the app to get the list of accounts known by the phone. This may include any accounts created by applications you have installed.‎‏‎‎‏‎"</string>
+    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‏‎view network connections‎‏‎‎‏‎"</string>
+    <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‏‏‏‎Allows the app to view information about network connections such as which networks exist and are connected.‎‏‎‎‏‎"</string>
+    <string name="permlab_createNetworkSockets" msgid="7934516631384168107">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‎‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‏‏‎have full network access‎‏‎‎‏‎"</string>
+    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‏‎‎‏‎Allows the app to create network sockets and use custom network protocols. The browser and other applications provide means to send data to the internet, so this permission is not required to send data to the internet.‎‏‎‎‏‎"</string>
+    <string name="permlab_changeNetworkState" msgid="958884291454327309">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎change network connectivity‎‏‎‎‏‎"</string>
+    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‏‏‎‎Allows the app to change the state of network connectivity.‎‏‎‎‏‎"</string>
+    <string name="permlab_changeTetherState" msgid="5952584964373017960">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‎‎‏‎‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎change tethered connectivity‎‏‎‎‏‎"</string>
+    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‎Allows the app to change the state of tethered network connectivity.‎‏‎‎‏‎"</string>
+    <string name="permlab_accessWifiState" msgid="5202012949247040011">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎view Wi-Fi connections‎‏‎‎‏‎"</string>
+    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‏‏‏‎‎Allows the app to view information about Wi-Fi networking, such as whether Wi-Fi is enabled and name of connected Wi-Fi devices.‎‏‎‎‏‎"</string>
+    <string name="permlab_changeWifiState" msgid="6550641188749128035">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‎‏‏‎connect and disconnect from Wi-Fi‎‏‎‎‏‎"</string>
+    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‏‏‎‏‎Allows the app to connect to and disconnect from Wi-Fi access points and to make changes to device configuration for Wi-Fi networks.‎‏‎‎‏‎"</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎allow Wi-Fi Multicast reception‎‏‎‎‏‎"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‎‎Allows the app to receive packets sent to all devices on a Wi-Fi network using multicast addresses, not just your tablet. It uses more power than the non-multicast mode.‎‏‎‎‏‎"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tv" msgid="9031975661145014160">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎Allows the app to receive packets sent to all devices on a Wi-Fi network using multicast addresses, not just your TV. It uses more power than the non-multicast mode.‎‏‎‎‏‎"</string>
+    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‎‏‏‎‎Allows the app to receive packets sent to all devices on a Wi-Fi network using multicast addresses, not just your phone. It uses more power than the non-multicast mode.‎‏‎‎‏‎"</string>
+    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎access Bluetooth settings‎‏‎‎‏‎"</string>
+    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎Allows the app to configure the local Bluetooth tablet, and to discover and pair with remote devices.‎‏‎‎‏‎"</string>
+    <string name="permdesc_bluetoothAdmin" product="tv" msgid="3373125682645601429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‏‎‏‎Allows the app to configure the local Bluetooth TV, and to discover and pair with remote devices.‎‏‎‎‏‎"</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‏‎‎‏‎Allows the app to configure the local Bluetooth phone, and to discover and pair with remote devices.‎‏‎‎‏‎"</string>
+    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎connect and disconnect from WiMAX‎‏‎‎‏‎"</string>
+    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‏‏‎Allows the app to determine whether WiMAX is enabled and information about any WiMAX networks that are connected.‎‏‎‎‏‎"</string>
+    <string name="permlab_changeWimaxState" msgid="340465839241528618">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‎‏‎‏‎‎change WiMAX state‎‏‎‎‏‎"</string>
+    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‏‎Allows the app to connect the tablet to and disconnect the tablet from WiMAX networks.‎‏‎‎‏‎"</string>
+    <string name="permdesc_changeWimaxState" product="tv" msgid="6022307083934827718">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎Allows the app to connect the TV to and disconnect the TV from WiMAX networks.‎‏‎‎‏‎"</string>
+    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎Allows the app to connect the phone to and disconnect the phone from WiMAX networks.‎‏‎‎‏‎"</string>
+    <string name="permlab_bluetooth" msgid="6127769336339276828">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‏‏‎‎‎pair with Bluetooth devices‎‏‎‎‏‎"</string>
+    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎Allows the app to view the configuration of Bluetooth on the tablet, and to make and accept connections with paired devices.‎‏‎‎‏‎"</string>
+    <string name="permdesc_bluetooth" product="tv" msgid="3974124940101104206">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎Allows the app to view the configuration of Bluetooth on the TV, and to make and accept connections with paired devices.‎‏‎‎‏‎"</string>
+    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎Allows the app to view the configuration of the Bluetooth on the phone, and to make and accept connections with paired devices.‎‏‎‎‏‎"</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‎control Near Field Communication‎‏‎‎‏‎"</string>
+    <string name="permdesc_nfc" msgid="7120611819401789907">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎Allows the app to communicate with Near Field Communication (NFC) tags, cards, and readers.‎‏‎‎‏‎"</string>
+    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎disable your screen lock‎‏‎‎‏‎"</string>
+    <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‎Allows the app to disable the keylock and any associated password security. For example, the phone disables the keylock when receiving an incoming phone call, then re-enables the keylock when the call is finished.‎‏‎‎‏‎"</string>
+    <string name="permlab_manageFingerprint" msgid="5640858826254575638">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‎‎manage fingerprint hardware‎‏‎‎‏‎"</string>
+    <string name="permdesc_manageFingerprint" msgid="178208705828055464">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‎‎Allows the app to invoke methods to add and delete fingerprint templates for use.‎‏‎‎‏‎"</string>
+    <string name="permlab_useFingerprint" msgid="3150478619915124905">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎use fingerprint hardware‎‏‎‎‏‎"</string>
+    <string name="permdesc_useFingerprint" msgid="9165097460730684114">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‎‏‎‎Allows the app to use fingerprint hardware for authentication‎‏‎‎‏‎"</string>
+    <string name="fingerprint_acquired_partial" msgid="735082772341716043">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎Partial fingerprint detected. Please try again.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‏‏‎‎Couldn\'t process fingerprint. Please try again.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‎‏‎Fingerprint sensor is dirty. Please clean and try again.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎Finger moved too fast. Please try again.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‏‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‎Finger moved too slow. Please try again.‎‏‎‎‏‎"</string>
+  <string-array name="fingerprint_acquired_vendor">
+  </string-array>
+    <string name="fingerprint_error_hw_not_available" msgid="7955921658939936596">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎Fingerprint hardware not available.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_error_no_space" msgid="1055819001126053318">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‎Fingerprint can\'t be stored. Please remove an existing fingerprint.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_error_timeout" msgid="3927186043737732875">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎Fingerprint time out reached. Try again.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_error_canceled" msgid="4402024612660774395">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎Fingerprint operation canceled.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_error_lockout" msgid="5536934748136933450">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‏‎‎Too many attempts. Try again later.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_error_lockout_permanent" msgid="5033251797919508137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎Too many attempts. Fingerprint sensor disabled.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_error_unable_to_process" msgid="6107816084103552441">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎Try again.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_name_template" msgid="5870957565512716938">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‎‎‎‏‎‏‎‎Finger ‎‏‎‎‏‏‎<xliff:g id="FINGERID">%d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+  <string-array name="fingerprint_error_vendor">
+  </string-array>
+    <string name="fingerprint_icon_content_description" msgid="2340202869968465936">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎Fingerprint icon‎‏‎‎‏‎"</string>
+    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‏‎‎‎read sync settings‎‏‎‎‏‎"</string>
+    <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎Allows the app to read the sync settings for an account. For example, this can determine whether the People app is synced with an account.‎‏‎‎‏‎"</string>
+    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎toggle sync on and off‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‎‎Allows an app to modify the sync settings for an account. For example, this can be used to enable sync of the People app with an account.‎‏‎‎‏‎"</string>
+    <string name="permlab_readSyncStats" msgid="7396577451360202448">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎read sync statistics‎‏‎‎‏‎"</string>
+    <string name="permdesc_readSyncStats" msgid="1510143761757606156">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎Allows an app to read the sync stats for an account, including the history of sync events and how much data is synced.‎‏‎‎‏‎"</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‎read the contents of your USB storage‎‏‎‎‏‎"</string>
+    <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‏‎‎‎read the contents of your SD card‎‏‎‎‏‎"</string>
+    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎Allows the app to read the contents of your USB storage.‎‏‎‎‏‎"</string>
+    <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‎Allows the app to read the contents of your SD card.‎‏‎‎‏‎"</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎modify or delete the contents of your USB storage‎‏‎‎‏‎"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‏‎modify or delete the contents of your SD card‎‏‎‎‏‎"</string>
+    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‎‎Allows the app to write to the USB storage.‎‏‎‎‏‎"</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‎‏‎‎Allows the app to write to the SD card.‎‏‎‎‏‎"</string>
+    <string name="permlab_use_sip" msgid="2052499390128979920">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎make/receive SIP calls‎‏‎‎‏‎"</string>
+    <string name="permdesc_use_sip" msgid="2297804849860225257">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎Allows the app to make and receive SIP calls.‎‏‎‎‏‎"</string>
+    <string name="permlab_register_sim_subscription" msgid="3166535485877549177">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‎register new telecom SIM connections‎‏‎‎‏‎"</string>
+    <string name="permdesc_register_sim_subscription" msgid="2138909035926222911">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‎‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‎Allows the app to register new telecom SIM connections.‎‏‎‎‏‎"</string>
+    <string name="permlab_register_call_provider" msgid="108102120289029841">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎register new telecom connections‎‏‎‎‏‎"</string>
+    <string name="permdesc_register_call_provider" msgid="7034310263521081388">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎Allows the app to register new telecom connections.‎‏‎‎‏‎"</string>
+    <string name="permlab_connection_manager" msgid="1116193254522105375">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎manage telecom connections‎‏‎‎‏‎"</string>
+    <string name="permdesc_connection_manager" msgid="5925480810356483565">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎Allows the app to manage telecom connections.‎‏‎‎‏‎"</string>
+    <string name="permlab_bind_incall_service" msgid="6773648341975287125">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‏‎‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‎interact with in-call screen‎‏‎‎‏‎"</string>
+    <string name="permdesc_bind_incall_service" msgid="8343471381323215005">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‎Allows the app to control when and how the user sees the in-call screen.‎‏‎‎‏‎"</string>
+    <string name="permlab_bind_connection_service" msgid="3557341439297014940">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‎‎‎interact with telephony services‎‏‎‎‏‎"</string>
+    <string name="permdesc_bind_connection_service" msgid="4008754499822478114">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎Allows the app to interact with telephony services to make/receive calls.‎‏‎‎‏‎"</string>
+    <string name="permlab_control_incall_experience" msgid="9061024437607777619">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‎‏‏‎provide an in-call user experience‎‏‎‎‏‎"</string>
+    <string name="permdesc_control_incall_experience" msgid="915159066039828124">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎Allows the app to provide an in-call user experience.‎‏‎‎‏‎"</string>
+    <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‎‎‎‎‎read historical network usage‎‏‎‎‏‎"</string>
+    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎‎Allows the app to read historical network usage for specific networks and apps.‎‏‎‎‏‎"</string>
+    <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‎‎‏‎‏‏‎‎manage network policy‎‏‎‎‏‎"</string>
+    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎Allows the app to manage network policies and define app-specific rules.‎‏‎‎‏‎"</string>
+    <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‎‏‎‏‎‎‎‏‏‎‎‏‎‎modify network usage accounting‎‏‎‎‏‎"</string>
+    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎Allows the app to modify how network usage is accounted against apps. Not for use by normal apps.‎‏‎‎‏‎"</string>
+    <string name="permlab_accessNotifications" msgid="7673416487873432268">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‎‎access notifications‎‏‎‎‏‎"</string>
+    <string name="permdesc_accessNotifications" msgid="458457742683431387">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‎Allows the app to retrieve, examine, and clear notifications, including those posted by other apps.‎‏‎‎‏‎"</string>
+    <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‎bind to a notification listener service‎‏‎‎‏‎"</string>
+    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‎Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps.‎‏‎‎‏‎"</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎bind to a condition provider service‎‏‎‎‏‎"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎Allows the holder to bind to the top-level interface of a condition provider service. Should never be needed for normal apps.‎‏‎‎‏‎"</string>
+    <string name="permlab_bindDreamService" msgid="4153646965978563462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎‎bind to a dream service‎‏‎‎‏‎"</string>
+    <string name="permdesc_bindDreamService" msgid="7325825272223347863">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‏‏‎Allows the holder to bind to the top-level interface of a dream service. Should never be needed for normal apps.‎‏‎‎‏‎"</string>
+    <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‎invoke the carrier-provided configuration app‎‏‎‎‏‎"</string>
+    <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‎Allows the holder to invoke the carrier-provided configuration app. Should never be needed for normal apps.‎‏‎‎‏‎"</string>
+    <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‎listen for observations on network conditions‎‏‎‎‏‎"</string>
+    <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎Allows an application to listen for observations on network conditions. Should never be needed for normal apps.‎‏‎‎‏‎"</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎change input device calibration‎‏‎‎‏‎"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‎‏‎Allows the app to modify the calibration parameters of the touch screen. Should never be needed for normal apps.‎‏‎‎‏‎"</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‎access DRM certificates‎‏‎‎‏‎"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎Allows an application to provision and use DRM certficates. Should never be needed for normal apps.‎‏‎‎‏‎"</string>
+    <string name="permlab_handoverStatus" msgid="7820353257219300883">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎receive Android Beam transfer status‎‏‎‎‏‎"</string>
+    <string name="permdesc_handoverStatus" msgid="4788144087245714948">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎Allows this application to receive information about current Android Beam transfers‎‏‎‎‏‎"</string>
+    <string name="permlab_removeDrmCertificates" msgid="7044888287209892751">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎remove DRM certificates‎‏‎‎‏‎"</string>
+    <string name="permdesc_removeDrmCertificates" msgid="7272999075113400993">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎Allows an application to remove DRM certficates. Should never be needed for normal apps.‎‏‎‎‏‎"</string>
+    <string name="permlab_bindCarrierMessagingService" msgid="1490229371796969158">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‏‏‎‎bind to a carrier messaging service‎‏‎‎‏‎"</string>
+    <string name="permdesc_bindCarrierMessagingService" msgid="2762882888502113944">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎Allows the holder to bind to the top-level interface of a carrier messaging service. Should never be needed for normal apps.‎‏‎‎‏‎"</string>
+    <string name="permlab_bindCarrierServices" msgid="3233108656245526783">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎bind to carrier services‎‏‎‎‏‎"</string>
+    <string name="permdesc_bindCarrierServices" msgid="1391552602551084192">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎Allows the holder to bind to carrier services. Should never be needed for normal apps.‎‏‎‎‏‎"</string>
+    <string name="permlab_access_notification_policy" msgid="4247510821662059671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‎access Do Not Disturb‎‏‎‎‏‎"</string>
+    <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎Allows the app to read and write Do Not Disturb configuration.‎‏‎‎‏‎"</string>
+    <string name="policylab_limitPassword" msgid="4497420728857585791">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‎‎‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎Set password rules‎‏‎‎‏‎"</string>
+    <string name="policydesc_limitPassword" msgid="2502021457917874968">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎Control the length and the characters allowed in screen lock passwords and PINs.‎‏‎‎‏‎"</string>
+    <string name="policylab_watchLogin" msgid="5091404125971980158">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎Monitor screen unlock attempts‎‏‎‎‏‎"</string>
+    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎‎‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‏‎‎‎‎Monitor the number of incorrect passwords typed when unlocking the screen, and lock the tablet or erase all the tablet\'s data if too many incorrect passwords are typed.‎‏‎‎‏‎"</string>
+    <string name="policydesc_watchLogin" product="TV" msgid="2707817988309890256">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎Monitor the number of incorrect passwords typed when unlocking the screen, and lock the TV or erase all the TV\'s data if too many incorrect passwords are typed.‎‏‎‎‏‎"</string>
+    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎Monitor the number of incorrect passwords typed. when unlocking the screen, and lock the phone or erase all the phone\'s data if too many incorrect passwords are typed.‎‏‎‎‏‎"</string>
+    <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‎Monitor the number of incorrect passwords typed when unlocking the screen, and lock the tablet or erase all this user\'s data if too many incorrect passwords are typed.‎‏‎‎‏‎"</string>
+    <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎Monitor the number of incorrect passwords typed when unlocking the screen, and lock the TV or erase all this user\'s data if too many incorrect passwords are typed.‎‏‎‎‏‎"</string>
+    <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‎‏‏‎Monitor the number of incorrect passwords typed when unlocking the screen, and lock the phone or erase all this user\'s data if too many incorrect passwords are typed.‎‏‎‎‏‎"</string>
+    <string name="policylab_resetPassword" msgid="4934707632423915395">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎Change the screen lock‎‏‎‎‏‎"</string>
+    <string name="policydesc_resetPassword" msgid="1278323891710619128">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎Change the screen lock.‎‏‎‎‏‎"</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎Lock the screen‎‏‎‎‏‎"</string>
+    <string name="policydesc_forceLock" msgid="1141797588403827138">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎‎‏‎‎Control how and when the screen locks.‎‏‎‎‏‎"</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‎‏‎‎‎‎‏‏‎‎‎‎‏‎Erase all data‎‏‎‎‏‎"</string>
+    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎Erase the tablet\'s data without warning by performing a factory data reset.‎‏‎‎‏‎"</string>
+    <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‎‎Erase the TV\'s data without warning by performing a factory data reset.‎‏‎‎‏‎"</string>
+    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‎Erase the phone\'s data without warning by performing a factory data reset.‎‏‎‎‏‎"</string>
+    <string name="policylab_wipeData_secondaryUser" msgid="8362863289455531813">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎Erase user data‎‏‎‎‏‎"</string>
+    <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="6336255514635308054">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‎‎‎‏‎‏‏‎‎Erase this user\'s data on this tablet without warning.‎‏‎‎‏‎"</string>
+    <string name="policydesc_wipeData_secondaryUser" product="tv" msgid="2086473496848351810">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‎‏‎‎Erase this user\'s data on this TV without warning.‎‏‎‎‏‎"</string>
+    <string name="policydesc_wipeData_secondaryUser" product="default" msgid="6787904546711590238">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‎‎Erase this user\'s data on this phone without warning.‎‏‎‎‏‎"</string>
+    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‏‎‏‏‎‎Set the device global proxy‎‏‎‎‏‎"</string>
+    <string name="policydesc_setGlobalProxy" msgid="8459859731153370499">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎Set the device global proxy to be used while policy is enabled. Only the device owner can set the global proxy.‎‏‎‎‏‎"</string>
+    <string name="policylab_expirePassword" msgid="5610055012328825874">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎Set screen lock password expiration‎‏‎‎‏‎"</string>
+    <string name="policydesc_expirePassword" msgid="5367525762204416046">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎Change how frequently the screen lock password, PIN, or pattern must be changed.‎‏‎‎‏‎"</string>
+    <string name="policylab_encryptedStorage" msgid="8901326199909132915">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‏‎Set storage encryption‎‏‎‎‏‎"</string>
+    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‎‎‎Require that stored app data be encrypted.‎‏‎‎‏‎"</string>
+    <string name="policylab_disableCamera" msgid="6395301023152297826">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‎‎Disable cameras‎‏‎‎‏‎"</string>
+    <string name="policydesc_disableCamera" msgid="2306349042834754597">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‎‏‎‎‏‎‏‎Prevent use of all device cameras.‎‏‎‎‏‎"</string>
+    <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‎Disable some screen lock features‎‏‎‎‏‎"</string>
+    <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‏‎Prevent use of some screen lock features.‎‏‎‎‏‎"</string>
+  <string-array name="phoneTypes">
+    <item msgid="8901098336658710359">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎Home‎‏‎‎‏‎"</item>
+    <item msgid="869923650527136615">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‎Mobile‎‏‎‎‏‎"</item>
+    <item msgid="7897544654242874543">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎Work‎‏‎‎‏‎"</item>
+    <item msgid="1103601433382158155">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎Work Fax‎‏‎‎‏‎"</item>
+    <item msgid="1735177144948329370">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎Home Fax‎‏‎‎‏‎"</item>
+    <item msgid="603878674477207394">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‏‎‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‏‎‎Pager‎‏‎‎‏‎"</item>
+    <item msgid="1650824275177931637">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎‏‎Other‎‏‎‎‏‎"</item>
+    <item msgid="9192514806975898961">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‎‏‎‎‎‏‎Custom‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="emailAddressTypes">
+    <item msgid="8073994352956129127">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎Home‎‏‎‎‏‎"</item>
+    <item msgid="7084237356602625604">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‎‏‎‎‎‏‎‎‎Work‎‏‎‎‏‎"</item>
+    <item msgid="1112044410659011023">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎Other‎‏‎‎‏‎"</item>
+    <item msgid="2374913952870110618">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎Custom‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="postalAddressTypes">
+    <item msgid="6880257626740047286">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎Home‎‏‎‎‏‎"</item>
+    <item msgid="5629153956045109251">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎Work‎‏‎‎‏‎"</item>
+    <item msgid="4966604264500343469">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎Other‎‏‎‎‏‎"</item>
+    <item msgid="4932682847595299369">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‏‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‏‎Custom‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="imAddressTypes">
+    <item msgid="1738585194601476694">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎Home‎‏‎‎‏‎"</item>
+    <item msgid="1359644565647383708">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎Work‎‏‎‎‏‎"</item>
+    <item msgid="7868549401053615677">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎‎‏‏‏‏‎‏‎Other‎‏‎‎‏‎"</item>
+    <item msgid="3145118944639869809">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‎‎‎‏‎Custom‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="organizationTypes">
+    <item msgid="7546335612189115615">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‏‏‏‎Work‎‏‎‎‏‎"</item>
+    <item msgid="4378074129049520373">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‎‏‎‎‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‏‎‏‎Other‎‏‎‎‏‎"</item>
+    <item msgid="3455047468583965104">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‎‎Custom‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="imProtocols">
+    <item msgid="8595261363518459565">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‎‏‎AIM‎‏‎‎‏‎"</item>
+    <item msgid="7390473628275490700">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎Windows Live‎‏‎‎‏‎"</item>
+    <item msgid="7882877134931458217">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎Yahoo‎‏‎‎‏‎"</item>
+    <item msgid="5035376313200585242">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‎‏‏‎‏‎‎Skype‎‏‎‎‏‎"</item>
+    <item msgid="7532363178459444943">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎QQ‎‏‎‎‏‎"</item>
+    <item msgid="3713441034299660749">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‏‏‎‏‎Google Talk‎‏‎‎‏‎"</item>
+    <item msgid="2506857312718630823">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎ICQ‎‏‎‎‏‎"</item>
+    <item msgid="1648797903785279353">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎Jabber‎‏‎‎‏‎"</item>
+  </string-array>
+    <string name="phoneTypeCustom" msgid="1644738059053355820">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‏‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎Custom‎‏‎‎‏‎"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎Home‎‏‎‎‏‎"</string>
+    <string name="phoneTypeMobile" msgid="6501463557754751037">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‏‏‎‏‎Mobile‎‏‎‎‏‎"</string>
+    <string name="phoneTypeWork" msgid="8863939667059911633">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎Work‎‏‎‎‏‎"</string>
+    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‎‎‎‎Work Fax‎‏‎‎‏‎"</string>
+    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‎‏‏‎Home Fax‎‏‎‎‏‎"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‎Pager‎‏‎‎‏‎"</string>
+    <string name="phoneTypeOther" msgid="1544425847868765990">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎‎Other‎‏‎‎‏‎"</string>
+    <string name="phoneTypeCallback" msgid="2712175203065678206">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‎Callback‎‏‎‎‏‎"</string>
+    <string name="phoneTypeCar" msgid="8738360689616716982">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎Car‎‏‎‎‏‎"</string>
+    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎Company Main‎‏‎‎‏‎"</string>
+    <string name="phoneTypeIsdn" msgid="8022453193171370337">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‏‏‎‎‎‏‎‏‏‎‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‎‏‎ISDN‎‏‎‎‏‎"</string>
+    <string name="phoneTypeMain" msgid="6766137010628326916">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎Main‎‏‎‎‏‎"</string>
+    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎Other Fax‎‏‎‎‏‎"</string>
+    <string name="phoneTypeRadio" msgid="4093738079908667513">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎Radio‎‏‎‎‏‎"</string>
+    <string name="phoneTypeTelex" msgid="3367879952476250512">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎Telex‎‏‎‎‏‎"</string>
+    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎TTY TDD‎‏‎‎‏‎"</string>
+    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎Work Mobile‎‏‎‎‏‎"</string>
+    <string name="phoneTypeWorkPager" msgid="649938731231157056">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‎‎‎‎Work Pager‎‏‎‎‏‎"</string>
+    <string name="phoneTypeAssistant" msgid="5596772636128562884">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‏‎‏‏‎‎‎‏‎‎‎Assistant‎‏‎‎‏‎"</string>
+    <string name="phoneTypeMms" msgid="7254492275502768992">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‎‎MMS‎‏‎‎‏‎"</string>
+    <string name="eventTypeCustom" msgid="7837586198458073404">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‎‎Custom‎‏‎‎‏‎"</string>
+    <string name="eventTypeBirthday" msgid="2813379844211390740">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‎Birthday‎‏‎‎‏‎"</string>
+    <string name="eventTypeAnniversary" msgid="3876779744518284000">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‎‎‎Anniversary‎‏‎‎‏‎"</string>
+    <string name="eventTypeOther" msgid="7388178939010143077">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎Other‎‏‎‎‏‎"</string>
+    <string name="emailTypeCustom" msgid="8525960257804213846">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‎‎‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎Custom‎‏‎‎‏‎"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎Home‎‏‎‎‏‎"</string>
+    <string name="emailTypeWork" msgid="3548058059601149973">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎Work‎‏‎‎‏‎"</string>
+    <string name="emailTypeOther" msgid="2923008695272639549">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‎‏‏‏‏‎‏‎Other‎‏‎‎‏‎"</string>
+    <string name="emailTypeMobile" msgid="119919005321166205">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎Mobile‎‏‎‎‏‎"</string>
+    <string name="postalTypeCustom" msgid="8903206903060479902">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎Custom‎‏‎‎‏‎"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‏‏‎‎‏‎Home‎‏‎‎‏‎"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‏‎‎‏‏‏‏‎‎‏‏‏‏‏‎Work‎‏‎‎‏‎"</string>
+    <string name="postalTypeOther" msgid="2726111966623584341">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎Other‎‏‎‎‏‎"</string>
+    <string name="imTypeCustom" msgid="2074028755527826046">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‎‏‎‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎Custom‎‏‎‎‏‎"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎Home‎‏‎‎‏‎"</string>
+    <string name="imTypeWork" msgid="1371489290242433090">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎Work‎‏‎‎‏‎"</string>
+    <string name="imTypeOther" msgid="5377007495735915478">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‏‏‎‎Other‎‏‎‎‏‎"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‎‎‎Custom‎‏‎‎‏‎"</string>
+    <string name="imProtocolAim" msgid="7050360612368383417">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎AIM‎‏‎‎‏‎"</string>
+    <string name="imProtocolMsn" msgid="144556545420769442">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‎‎‎‏‎‎Windows Live‎‏‎‎‏‎"</string>
+    <string name="imProtocolYahoo" msgid="8271439408469021273">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‎Yahoo‎‏‎‎‏‎"</string>
+    <string name="imProtocolSkype" msgid="9019296744622832951">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎Skype‎‏‎‎‏‎"</string>
+    <string name="imProtocolQq" msgid="8887484379494111884">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎QQ‎‏‎‎‏‎"</string>
+    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‎Hangouts‎‏‎‎‏‎"</string>
+    <string name="imProtocolIcq" msgid="1574870433606517315">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎ICQ‎‏‎‎‏‎"</string>
+    <string name="imProtocolJabber" msgid="2279917630875771722">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‎Jabber‎‏‎‎‏‎"</string>
+    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‎‏‏‎NetMeeting‎‏‎‎‏‎"</string>
+    <string name="orgTypeWork" msgid="29268870505363872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‎Work‎‏‎‎‏‎"</string>
+    <string name="orgTypeOther" msgid="3951781131570124082">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎Other‎‏‎‎‏‎"</string>
+    <string name="orgTypeCustom" msgid="225523415372088322">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‏‎‎Custom‎‏‎‎‏‎"</string>
+    <string name="relationTypeCustom" msgid="3542403679827297300">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‎‎‎‎‎‏‎‏‎‎‎Custom‎‏‎‎‏‎"</string>
+    <string name="relationTypeAssistant" msgid="6274334825195379076">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‎‎‏‎‎‎Assistant‎‏‎‎‏‎"</string>
+    <string name="relationTypeBrother" msgid="8757913506784067713">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‎‎‎‏‎Brother‎‏‎‎‏‎"</string>
+    <string name="relationTypeChild" msgid="1890746277276881626">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‏‎‎Child‎‏‎‎‏‎"</string>
+    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎Domestic Partner‎‏‎‎‏‎"</string>
+    <string name="relationTypeFather" msgid="5228034687082050725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎Father‎‏‎‎‏‎"</string>
+    <string name="relationTypeFriend" msgid="7313106762483391262">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‎Friend‎‏‎‎‏‎"</string>
+    <string name="relationTypeManager" msgid="6365677861610137895">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‏‎Manager‎‏‎‎‏‎"</string>
+    <string name="relationTypeMother" msgid="4578571352962758304">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎Mother‎‏‎‎‏‎"</string>
+    <string name="relationTypeParent" msgid="4755635567562925226">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‏‎‏‎‎Parent‎‏‎‎‏‎"</string>
+    <string name="relationTypePartner" msgid="7266490285120262781">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‏‎‏‎Partner‎‏‎‎‏‎"</string>
+    <string name="relationTypeReferredBy" msgid="101573059844135524">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‎Referred by‎‏‎‎‏‎"</string>
+    <string name="relationTypeRelative" msgid="1799819930085610271">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‏‏‏‎Relative‎‏‎‎‏‎"</string>
+    <string name="relationTypeSister" msgid="1735983554479076481">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎Sister‎‏‎‎‏‎"</string>
+    <string name="relationTypeSpouse" msgid="394136939428698117">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎Spouse‎‏‎‎‏‎"</string>
+    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎Custom‎‏‎‎‏‎"</string>
+    <string name="sipAddressTypeHome" msgid="6093598181069359295">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎Home‎‏‎‎‏‎"</string>
+    <string name="sipAddressTypeWork" msgid="6920725730797099047">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎‏‏‏‎Work‎‏‎‎‏‎"</string>
+    <string name="sipAddressTypeOther" msgid="4408436162950119849">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‏‎‏‎‏‎‎‏‎Other‎‏‎‎‏‎"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎‎‎No application found to view this contact.‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‎Type PIN code‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎Type PUK and new PIN code‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‎‎‎PUK code‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‏‎‎‎‏‎‎New PIN code‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="2644215452200037944">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‎‏‏‎"<font size="17">"‎‏‎‎‏‏‏‎Tap to type password‎‏‎‎‏‏‎"</font>"‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‎‎Type password to unlock‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‏‏‏‎‏‎‎‏‎‎‏‏‎Type PIN to unlock‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎Incorrect PIN code.‎‏‎‎‏‎"</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‎‎To unlock, press Menu then 0.‎‏‎‎‏‎"</string>
+    <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎‏‎‎Emergency number‎‏‎‎‏‎"</string>
+    <string name="lockscreen_carrier_default" msgid="6169005837238288522">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‎No service‎‏‎‎‏‎"</string>
+    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‎‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎‎‎‎Screen locked.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎Press Menu to unlock or place emergency call.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎Press Menu to unlock.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‏‏‎‎Draw pattern to unlock‎‏‎‎‏‎"</string>
+    <string name="lockscreen_emergency_call" msgid="5298642613417801888">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‎Emergency‎‏‎‎‏‎"</string>
+    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‎Return to call‎‏‎‎‏‎"</string>
+    <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎Correct!‎‏‎‎‏‎"</string>
+    <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎Try again‎‏‎‎‏‎"</string>
+    <string name="lockscreen_password_wrong" msgid="5737815393253165301">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‎‏‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‎‏‎Try again‎‏‎‎‏‎"</string>
+    <string name="lockscreen_storage_locked" msgid="9167551160010625200">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‎Unlock for all features and data‎‏‎‎‏‎"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎Maximum Face Unlock attempts exceeded‎‏‎‎‏‎"</string>
+    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎No SIM card‎‏‎‎‏‎"</string>
+    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎No SIM card in tablet.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_missing_sim_message" product="tv" msgid="1943633865476989599">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‎No SIM card in TV.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎No SIM card in phone.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎Insert a SIM card.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‎‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‎‎The SIM card is missing or not readable. Insert a SIM card.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎Unusable SIM card.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎Your SIM card has been permanently disabled.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Contact your wireless service provider for another SIM card.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_transport_prev_description" msgid="6300840251218161534">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎Previous track‎‏‎‎‏‎"</string>
+    <string name="lockscreen_transport_next_description" msgid="573285210424377338">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎Next track‎‏‎‎‏‎"</string>
+    <string name="lockscreen_transport_pause_description" msgid="3980308465056173363">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎‏‏‎Pause‎‏‎‎‏‎"</string>
+    <string name="lockscreen_transport_play_description" msgid="1901258823643886401">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‎Play‎‏‎‎‏‎"</string>
+    <string name="lockscreen_transport_stop_description" msgid="5907083260651210034">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‎Stop‎‏‎‎‏‎"</string>
+    <string name="lockscreen_transport_rew_description" msgid="6944412838651990410">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎Rewind‎‏‎‎‏‎"</string>
+    <string name="lockscreen_transport_ffw_description" msgid="42987149870928985">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‎‎‏‎Fast forward‎‏‎‎‏‎"</string>
+    <string name="emergency_calls_only" msgid="6733978304386365407">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎Emergency calls only‎‏‎‎‏‎"</string>
+    <string name="lockscreen_network_locked_message" msgid="143389224986028501">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎Network locked‎‏‎‎‏‎"</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‎‎‎‏‎‎‏‏‎‎SIM card is PUK-locked.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‏‎See the User Guide or contact Customer Care.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‏‎‎‏‎‎‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‏‏‎SIM card is locked.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‎‎‎Unlocking SIM card…‎‏‎‎‏‎"</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‎‏‏‏‎‏‎‏‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‎‏‏‎‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎You have incorrectly typed your password ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‎You have incorrectly typed your PIN ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‏‎‏‎‎‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, you will be asked to unlock your tablet using your Google signin.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_2">%3$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, you will be asked to unlock your TV using your Google signin.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_2">%3$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‏‏‏‏‏‏‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, you will be asked to unlock your phone using your Google signin.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_2">%3$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎You have incorrectly attempted to unlock the tablet ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, the tablet will be reset to factory default and all user data will be lost.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="950408382418270260">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎You have incorrectly attempted to unlock the TV ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, the TV will be reset to factory default and all user data will be lost.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎You have incorrectly attempted to unlock the phone ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, the phone will be reset to factory default and all user data will be lost.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎You have incorrectly attempted to unlock the tablet ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ times. The tablet will now be reset to factory default.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="3195755534096192191">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎You have incorrectly attempted to unlock the TV ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ times. The TV will now be reset to factory default.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‏‏‎‎You have incorrectly attempted to unlock the phone ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ times. The phone will now be reset to factory default.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‎Forgot pattern?‎‏‎‎‏‎"</string>
+    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎Account unlock‎‏‎‎‏‎"</string>
+    <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‎‎‎‎Too many pattern attempts‎‏‎‎‏‎"</string>
+    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎To unlock, sign in with your Google account.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎Username (email)‎‏‎‎‏‎"</string>
+    <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‎‎‎‎‎‎Password‎‏‎‎‏‎"</string>
+    <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‎‎‎‏‎‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‎Sign in‎‏‎‎‏‎"</string>
+    <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‎‎Invalid username or password.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎Forgot your username or password?‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Visit ‎‏‎‎‏‏‎"<b>"‎‏‎‎‏‏‏‎google.com/accounts/recovery‎‏‎‎‏‏‎"</b>"‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‏‎‏‏‎Checking…‎‏‎‎‏‎"</string>
+    <string name="lockscreen_unlock_label" msgid="737440483220667054">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎Unlock‎‏‎‎‏‎"</string>
+    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎Sound on‎‏‎‎‏‎"</string>
+    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‎Sound off‎‏‎‎‏‎"</string>
+    <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‎‏‎‎‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎Pattern started‎‏‎‎‏‎"</string>
+    <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‎‎‏‏‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎Pattern cleared‎‏‎‎‏‎"</string>
+    <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‏‏‎Cell added‎‏‎‎‏‎"</string>
+    <string name="lockscreen_access_pattern_cell_added_verbose" msgid="7264580781744026939">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎Cell ‎‏‎‎‏‏‎<xliff:g id="CELL_INDEX">%1$s</xliff:g>‎‏‎‎‏‏‏‎ added‎‏‎‎‏‎"</string>
+    <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‎Pattern completed‎‏‎‎‏‎"</string>
+    <string name="lockscreen_access_pattern_area" msgid="400813207572953209">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‎Pattern area.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‏‎%1$s. Widget %2$d of %3$d.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‎‎‏‏‏‎‏‏‏‎‎Add widget.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎Empty‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎Unlock area expanded.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‎Unlock area collapsed.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>‎‏‎‎‏‏‏‎ widget.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎User selector‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‏‎‎‎‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎Status‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‏‎Camera‎‏‎‎‏‎"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‏‎‎‎‎‏‏‏‎‎Media controls‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‎‏‎‎‏‎‏‎Widget reordering started.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎Widget reordering ended.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‎Widget ‎‏‎‎‏‏‎<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>‎‏‎‎‏‏‏‎ deleted.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎Expand unlock area.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎Slide unlock.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‎Pattern unlock.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎Face unlock.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‎Pin unlock.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‏‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎‎‎‏‎Password unlock.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‎Pattern area.‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‎‎Slide area.‎‏‎‎‏‎"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‏‏‎‏‎‏‎‎?123‎‏‎‎‏‎"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎ABC‎‏‎‎‏‎"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‎ALT‎‏‎‎‏‎"</string>
+    <string name="granularity_label_character" msgid="7336470535385009523">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎character‎‏‎‎‏‎"</string>
+    <string name="granularity_label_word" msgid="7075570328374918660">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎word‎‏‎‎‏‎"</string>
+    <string name="granularity_label_link" msgid="5815508880782488267">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎link‎‏‎‎‏‎"</string>
+    <string name="granularity_label_line" msgid="5764267235026120888">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‎‎‎line‎‏‎‎‏‎"</string>
+    <string name="factorytest_failed" msgid="5410270329114212041">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎Factory test failed‎‏‎‎‏‎"</string>
+    <string name="factorytest_not_system" msgid="4435201656767276723">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‏‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‏‎The FACTORY_TEST action is only supported for packages installed in /system/app.‎‏‎‎‏‎"</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‎‏‎No package was found that provides the FACTORY_TEST action.‎‏‎‎‏‎"</string>
+    <string name="factorytest_reboot" msgid="6320168203050791643">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‎Reboot‎‏‎‎‏‎"</string>
+    <string name="js_dialog_title" msgid="1987483977834603872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‏‏‎‎‎‎‎‎The page at \"‎‏‎‎‏‏‎<xliff:g id="TITLE">%s</xliff:g>‎‏‎‎‏‏‏‎\" says:‎‏‎‎‏‎"</string>
+    <string name="js_dialog_title_default" msgid="6961903213729667573">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‎‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‎JavaScript‎‏‎‎‏‎"</string>
+    <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‎‏‎Confirm Navigation‎‏‎‎‏‎"</string>
+    <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‎‏‎‎Leave this Page‎‏‎‎‏‎"</string>
+    <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‏‏‎Stay on this Page‎‏‎‎‏‎"</string>
+    <string name="js_dialog_before_unload" msgid="3468816357095378590">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="MESSAGE">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Are you sure you want to navigate away from this page?‎‏‎‎‏‎"</string>
+    <string name="save_password_label" msgid="6860261758665825069">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎Confirm‎‏‎‎‏‎"</string>
+    <string name="double_tap_toast" msgid="4595046515400268881">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‏‎Tip: Double-tap to zoom in and out.‎‏‎‎‏‎"</string>
+    <string name="autofill_this_form" msgid="4616758841157816676">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‎‎‏‏‎‏‏‎‏‏‎‎‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎Autofill‎‏‎‎‏‎"</string>
+    <string name="setup_autofill" msgid="7103495070180590814">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‎‎‏‏‎‏‏‏‏‎‎Set up Autofill‎‏‎‎‏‎"</string>
+    <string name="autofill_address_name_separator" msgid="6350145154779706772">" ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎ ‎‏‎‎‏‎"</string>
+    <string name="autofill_address_summary_name_format" msgid="3268041054899214945">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎$1$2$3‎‏‎‎‏‎"</string>
+    <string name="autofill_address_summary_separator" msgid="7483307893170324129">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‎, ‎‏‎‎‏‎ "</string>
+    <string name="autofill_address_summary_format" msgid="4874459455786827344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎$1$2$3‎‏‎‎‏‎"</string>
+    <string name="autofill_province" msgid="2231806553863422300">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎Province‎‏‎‎‏‎"</string>
+    <string name="autofill_postal_code" msgid="4696430407689377108">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎Postal code‎‏‎‎‏‎"</string>
+    <string name="autofill_state" msgid="6988894195520044613">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎State‎‏‎‎‏‎"</string>
+    <string name="autofill_zip_code" msgid="8697544592627322946">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎ZIP code‎‏‎‎‏‎"</string>
+    <string name="autofill_county" msgid="237073771020362891">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‎‏‏‎County‎‏‎‎‏‎"</string>
+    <string name="autofill_island" msgid="4020100875984667025">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎Island‎‏‎‎‏‎"</string>
+    <string name="autofill_district" msgid="8400735073392267672">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎District‎‏‎‎‏‎"</string>
+    <string name="autofill_department" msgid="5343279462564453309">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎Department‎‏‎‎‏‎"</string>
+    <string name="autofill_prefecture" msgid="2028499485065800419">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎Prefecture‎‏‎‎‏‎"</string>
+    <string name="autofill_parish" msgid="8202206105468820057">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‎‏‎Parish‎‏‎‎‏‎"</string>
+    <string name="autofill_area" msgid="3547409050889952423">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‏‎‎‏‏‏‎Area‎‏‎‎‏‎"</string>
+    <string name="autofill_emirate" msgid="2893880978835698818">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‎‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎Emirate‎‏‎‎‏‎"</string>
+    <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‏‎‎‎‏‏‏‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‏‎read your Web bookmarks and history‎‏‎‎‏‎"</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎Allows the app to read the history of all URLs that the Browser has visited, and all of the Browser\'s bookmarks. Note: this permission may not be enforced by third-party browsers or other applications with web browsing capabilities.‎‏‎‎‏‎"</string>
+    <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎write web bookmarks and history‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎Allows the app to modify the Browser\'s history or bookmarks stored on your tablet. This may allow the app to erase or modify Browser data. Note: this permission may note be enforced by third-party browsers or other applications with web browsing capabilities.‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeHistoryBookmarks" product="tv" msgid="7007393823197766548">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‏‏‏‎‎‏‎‏‎‎‎Allows the app to modify the Browser\'s history or bookmarks stored on your TV. This may allow the app to erase or modify Browser data. Note: this permission may note be enforced by third-party browsers or other applications with web browsing capabilities.‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‎‎‎‏‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎Allows the app to modify the Browser\'s history or bookmarks stored on your phone. This may allow the app to erase or modify Browser data. Note: this permission may note be enforced by third-party browsers or other applications with web browsing capabilities.‎‏‎‎‏‎"</string>
+    <string name="permlab_setAlarm" msgid="1379294556362091814">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‎‎set an alarm‎‏‎‎‏‎"</string>
+    <string name="permdesc_setAlarm" msgid="316392039157473848">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‏‏‏‎‎‎‎Allows the app to set an alarm in an installed alarm clock app. Some alarm clock apps may not implement this feature.‎‏‎‎‏‎"</string>
+    <string name="permlab_addVoicemail" msgid="5525660026090959044">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‎‏‏‎‎‎‏‎‎‎add voicemail‎‏‎‎‏‎"</string>
+    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‎Allows the app to add messages to your voicemail inbox.‎‏‎‎‏‎"</string>
+    <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎modify Browser geolocation permissions‎‏‎‎‏‎"</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎Allows the app to modify the Browser\'s geolocation permissions. Malicious apps may use this to allow sending location information to arbitrary web sites.‎‏‎‎‏‎"</string>
+    <string name="save_password_message" msgid="767344687139195790">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‏‏‎‎Do you want the browser to remember this password?‎‏‎‎‏‎"</string>
+    <string name="save_password_notnow" msgid="6389675316706699758">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‎Not now‎‏‎‎‏‎"</string>
+    <string name="save_password_remember" msgid="6491879678996749466">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎Remember‎‏‎‎‏‎"</string>
+    <string name="save_password_never" msgid="8274330296785855105">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‎‏‎‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‎‎‏‎Never‎‏‎‎‏‎"</string>
+    <string name="open_permission_deny" msgid="7374036708316629800">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎You don\'t have permission to open this page.‎‏‎‎‏‎"</string>
+    <string name="text_copied" msgid="4985729524670131385">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‎Text copied to clipboard.‎‏‎‎‏‎"</string>
+    <string name="more_item_label" msgid="4650918923083320495">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎More‎‏‎‎‏‎"</string>
+    <string name="prepend_shortcut_label" msgid="2572214461676015642">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‏‎‏‎‎Menu+‎‏‎‎‏‎"</string>
+    <string name="menu_space_shortcut_label" msgid="2410328639272162537">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‎space‎‏‎‎‏‎"</string>
+    <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎enter‎‏‎‎‏‎"</string>
+    <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎delete‎‏‎‎‏‎"</string>
+    <string name="search_go" msgid="8298016669822141719">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‏‎‏‏‏‎Search‎‏‎‎‏‎"</string>
+    <string name="search_hint" msgid="1733947260773056054">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎Search…‎‏‎‎‏‎"</string>
+    <string name="searchview_description_search" msgid="6749826639098512120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎Search‎‏‎‎‏‎"</string>
+    <string name="searchview_description_query" msgid="5911778593125355124">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎Search query‎‏‎‎‏‎"</string>
+    <string name="searchview_description_clear" msgid="1330281990951833033">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‏‎Clear query‎‏‎‎‏‎"</string>
+    <string name="searchview_description_submit" msgid="2688450133297983542">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎Submit query‎‏‎‎‏‎"</string>
+    <string name="searchview_description_voice" msgid="2453203695674994440">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‎Voice search‎‏‎‎‏‎"</string>
+    <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎Enable Explore by Touch?‎‏‎‎‏‎"</string>
+    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ wants to enable Explore by Touch. When Explore by Touch is turned on, you can hear or see descriptions of what\'s under your finger or perform gestures to interact with the tablet.‎‏‎‎‏‎"</string>
+    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ wants to enable Explore by Touch. When Explore by Touch is turned on, you can hear or see descriptions of what\'s under your finger or perform gestures to interact with the phone.‎‏‎‎‏‎"</string>
+    <string name="oneMonthDurationPast" msgid="7396384508953779925">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‏‎1 month ago‎‏‎‎‏‎"</string>
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎Before 1 month ago‎‏‎‎‏‎"</string>
+    <plurals name="last_num_days" formatted="false" msgid="5104533550723932025">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎Last ‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎ days‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎Last ‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎ day‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="last_month" msgid="3959346739979055432">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‎‎Last month‎‏‎‎‏‎"</string>
+    <string name="older" msgid="5211975022815554840">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‎‎‎‎Older‎‏‎‎‏‎"</string>
+    <string name="preposition_for_date" msgid="9093949757757445117">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‏‏‎‏‎on ‎‏‎‎‏‏‎<xliff:g id="DATE">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="preposition_for_time" msgid="5506831244263083793">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‎‎‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‎‏‎at ‎‏‎‎‏‏‎<xliff:g id="TIME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="preposition_for_year" msgid="5040395640711867177">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‏‎in ‎‏‎‎‏‏‎<xliff:g id="YEAR">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="day" msgid="8144195776058119424">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎‎day‎‏‎‎‏‎"</string>
+    <string name="days" msgid="4774547661021344602">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‎days‎‏‎‎‏‎"</string>
+    <string name="hour" msgid="2126771916426189481">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‎hour‎‏‎‎‏‎"</string>
+    <string name="hours" msgid="894424005266852993">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎hours‎‏‎‎‏‎"</string>
+    <string name="minute" msgid="9148878657703769868">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎min‎‏‎‎‏‎"</string>
+    <string name="minutes" msgid="5646001005827034509">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‎‏‎mins‎‏‎‎‏‎"</string>
+    <string name="second" msgid="3184235808021478">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎sec‎‏‎‎‏‎"</string>
+    <string name="seconds" msgid="3161515347216589235">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎‏‏‎secs‎‏‎‎‏‎"</string>
+    <string name="week" msgid="5617961537173061583">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎week‎‏‎‎‏‎"</string>
+    <string name="weeks" msgid="6509623834583944518">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎weeks‎‏‎‎‏‎"</string>
+    <string name="year" msgid="4001118221013892076">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎year‎‏‎‎‏‎"</string>
+    <string name="years" msgid="6881577717993213522">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‏‎‎‏‎‎years‎‏‎‎‏‎"</string>
+    <string name="now_string_shortest" msgid="8912796667087856402">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎‎‏‎‎‎‎‏‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‏‎‎now‎‏‎‎‏‎"</string>
+    <plurals name="duration_minutes_shortest" formatted="false" msgid="3957499975064245495">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎m‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎m‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_hours_shortest" formatted="false" msgid="3552182110578602356">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‏‎‏‎‎‎‏‎‎‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎h‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‏‎‏‎‎‎‏‎‎‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎h‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_days_shortest" formatted="false" msgid="5213655532597081640">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎d‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎d‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_years_shortest" formatted="false" msgid="7848711145196397042">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎y‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎y‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_minutes_shortest_future" formatted="false" msgid="3277614521231489951">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎m‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎m‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_hours_shortest_future" formatted="false" msgid="2152452368397489370">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‏‎‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎h‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‏‎‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎h‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_days_shortest_future" formatted="false" msgid="8088331502820295701">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎d‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎d‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_years_shortest_future" formatted="false" msgid="2317006667145250301">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎y‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎y‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_minutes_relative" formatted="false" msgid="3178131706192980192">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎ minutes ago‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎ minute ago‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_hours_relative" formatted="false" msgid="676894109982008411">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎ hours ago‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎ hour ago‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_days_relative" formatted="false" msgid="2203515825765397130">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎ days ago‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎ day ago‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_years_relative" formatted="false" msgid="4820062134188885734">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎ years ago‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎ year ago‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_minutes_relative_future" formatted="false" msgid="4655043589817680966">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎‏‏‎‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎ minutes‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎‏‏‎‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎ minute‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_hours_relative_future" formatted="false" msgid="8084579714205223891">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎ hours‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎ hour‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_days_relative_future" formatted="false" msgid="333215369363433992">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‎‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎ days‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‎‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎ day‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="duration_years_relative_future" formatted="false" msgid="8644862986413104011">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‏‎‏‏‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%d</xliff:g>‎‏‎‎‏‏‏‎ years‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‏‎‏‏‎in ‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%d</xliff:g>‎‏‎‎‏‏‏‎ year‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="VideoView_error_title" msgid="3534509135438353077">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‎‏‎‏‎Video problem‎‏‎‎‏‎"</string>
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎This video isn\'t valid for streaming to this device.‎‏‎‎‏‎"</string>
+    <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎Can\'t play this video.‎‏‎‎‏‎"</string>
+    <string name="VideoView_error_button" msgid="2822238215100679592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎‎OK‎‏‎‎‏‎"</string>
+    <string name="relative_time" msgid="1818557177829411417">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="DATE">%1$s</xliff:g>‎‏‎‎‏‏‏‎, ‎‏‎‎‏‏‎<xliff:g id="TIME">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="noon" msgid="7245353528818587908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎noon‎‏‎‎‏‎"</string>
+    <string name="Noon" msgid="3342127745230013127">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎Noon‎‏‎‎‏‎"</string>
+    <string name="midnight" msgid="7166259508850457595">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎midnight‎‏‎‎‏‎"</string>
+    <string name="Midnight" msgid="5630806906897892201">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‎Midnight‎‏‎‎‏‎"</string>
+    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="MINUTES">%1$02d</xliff:g>‎‏‎‎‏‏‏‎:‎‏‎‎‏‏‎<xliff:g id="SECONDS">%2$02d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="HOURS">%1$d</xliff:g>‎‏‎‎‏‏‏‎:‎‏‎‎‏‏‎<xliff:g id="MINUTES">%2$02d</xliff:g>‎‏‎‎‏‏‏‎:‎‏‎‎‏‏‎<xliff:g id="SECONDS">%3$02d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="selectAll" msgid="6876518925844129331">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‎Select all‎‏‎‎‏‎"</string>
+    <string name="cut" msgid="3092569408438626261">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎Cut‎‏‎‎‏‎"</string>
+    <string name="copy" msgid="2681946229533511987">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‎Copy‎‏‎‎‏‎"</string>
+    <string name="paste" msgid="5629880836805036433">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎Paste‎‏‎‎‏‎"</string>
+    <string name="paste_as_plain_text" msgid="5427792741908010675">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‎‏‏‎Paste as plain text‎‏‎‎‏‎"</string>
+    <string name="replace" msgid="5781686059063148930">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‏‏‎‎‎‎‎‏‎‎Replace…‎‏‎‎‏‎"</string>
+    <string name="delete" msgid="6098684844021697789">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‏‏‎‏‎Delete‎‏‎‎‏‎"</string>
+    <string name="copyUrl" msgid="2538211579596067402">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‎Copy URL‎‏‎‎‏‎"</string>
+    <string name="selectTextMode" msgid="1018691815143165326">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎‎‎‏‏‏‎‎Select text‎‏‎‎‏‎"</string>
+    <string name="undo" msgid="7905788502491742328">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎Undo‎‏‎‎‏‎"</string>
+    <string name="redo" msgid="7759464876566803888">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‎Redo‎‏‎‎‏‎"</string>
+    <string name="autofill" msgid="3035779615680565188">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‏‎‎‎Autofill‎‏‎‎‏‎"</string>
+    <string name="textSelectionCABTitle" msgid="5236850394370820357">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‎‏‎‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎Text selection‎‏‎‎‏‎"</string>
+    <string name="addToDictionary" msgid="4352161534510057874">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎Add to dictionary‎‏‎‎‏‎"</string>
+    <string name="deleteText" msgid="6979668428458199034">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‎‏‎‎‎‎‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎Delete‎‏‎‎‏‎"</string>
+    <string name="inputMethod" msgid="1653630062304567879">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‎‎‏‎‎‎‏‏‏‎Input method‎‏‎‎‏‎"</string>
+    <string name="editTextMenuTitle" msgid="4909135564941815494">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎Text actions‎‏‎‎‏‎"</string>
+    <string name="email" msgid="4560673117055050403">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎Email‎‏‎‎‏‎"</string>
+    <string name="dial" msgid="4204975095406423102">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‏‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎Phone‎‏‎‎‏‎"</string>
+    <string name="map" msgid="6068210738233985748">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‎‏‎‎‎Maps‎‏‎‎‏‎"</string>
+    <string name="browse" msgid="6993590095938149861">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎Browser‎‏‎‎‏‎"</string>
+    <string name="low_internal_storage_view_title" msgid="5576272496365684834">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎‎‎‏‎‎Storage space running out‎‏‎‎‏‎"</string>
+    <string name="low_internal_storage_view_text" msgid="6640505817617414371">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎Some system functions may not work‎‏‎‎‏‎"</string>
+    <string name="low_internal_storage_view_text_no_boot" msgid="6935190099204693424">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‎Not enough storage for the system. Make sure you have 250MB of free space and restart.‎‏‎‎‏‎"</string>
+    <string name="app_running_notification_title" msgid="8718335121060787914">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is running‎‏‎‎‏‎"</string>
+    <string name="app_running_notification_text" msgid="1197581823314971177">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‎‎‏‎Tap for more information or to stop the app.‎‏‎‎‏‎"</string>
+    <string name="ok" msgid="5970060430562524910">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‎‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎OK‎‏‎‎‏‎"</string>
+    <string name="cancel" msgid="6442560571259935130">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎Cancel‎‏‎‎‏‎"</string>
+    <string name="yes" msgid="5362982303337969312">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎OK‎‏‎‎‏‎"</string>
+    <string name="no" msgid="5141531044935541497">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‎‏‎‏‎‎‎‏‎‏‏‏‏‏‎‎‏‎Cancel‎‏‎‎‏‎"</string>
+    <string name="dialog_alert_title" msgid="2049658708609043103">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‏‏‏‎Attention‎‏‎‎‏‎"</string>
+    <string name="loading" msgid="7933681260296021180">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‏‎‎‎Loading…‎‏‎‎‏‎"</string>
+    <string name="capital_on" msgid="1544682755514494298">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‏‎‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎ON‎‏‎‎‏‎"</string>
+    <string name="capital_off" msgid="6815870386972805832">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‎‎‎OFF‎‏‎‎‏‎"</string>
+    <string name="whichApplication" msgid="4533185947064773386">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‎‎Complete action using‎‏‎‎‏‎"</string>
+    <string name="whichApplicationNamed" msgid="8260158865936942783">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‎Complete action using %1$s‎‏‎‎‏‎"</string>
+    <string name="whichApplicationLabel" msgid="7425855495383818784">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎Complete action‎‏‎‎‏‎"</string>
+    <string name="whichViewApplication" msgid="3272778576700572102">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎Open with‎‏‎‎‏‎"</string>
+    <string name="whichViewApplicationNamed" msgid="2286418824011249620">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎Open with %1$s‎‏‎‎‏‎"</string>
+    <string name="whichViewApplicationLabel" msgid="2666774233008808473">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‎Open‎‏‎‎‏‎"</string>
+    <string name="whichEditApplication" msgid="144727838241402655">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‏‏‎‏‏‏‎‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‏‏‏‏‎Edit with‎‏‎‎‏‎"</string>
+    <string name="whichEditApplicationNamed" msgid="1775815530156447790">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‎‎Edit with %1$s‎‏‎‎‏‎"</string>
+    <string name="whichEditApplicationLabel" msgid="7183524181625290300">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎Edit‎‏‎‎‏‎"</string>
+    <string name="whichSendApplication" msgid="6902512414057341668">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‏‎‎‎Share with‎‏‎‎‏‎"</string>
+    <string name="whichSendApplicationNamed" msgid="2799370240005424391">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‎Share with %1$s‎‏‎‎‏‎"</string>
+    <string name="whichSendApplicationLabel" msgid="4579076294675975354">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‏‎‎Share‎‏‎‎‏‎"</string>
+    <string name="whichSendToApplication" msgid="8272422260066642057">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‏‏‎‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‎‏‎Send using‎‏‎‎‏‎"</string>
+    <string name="whichSendToApplicationNamed" msgid="7768387871529295325">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎Send using %1$s‎‏‎‎‏‎"</string>
+    <string name="whichSendToApplicationLabel" msgid="8878962419005813500">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎‎Send‎‏‎‎‏‎"</string>
+    <string name="whichHomeApplication" msgid="4307587691506919691">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎Select a Home app‎‏‎‎‏‎"</string>
+    <string name="whichHomeApplicationNamed" msgid="4493438593214760979">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎Use %1$s as Home‎‏‎‎‏‎"</string>
+    <string name="whichHomeApplicationLabel" msgid="809529747002918649">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‎‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‏‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‎Capture image‎‏‎‎‏‎"</string>
+    <string name="whichImageCaptureApplication" msgid="3680261417470652882">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‏‏‏‎‏‎‎‏‎‎Capture image with‎‏‎‎‏‎"</string>
+    <string name="whichImageCaptureApplicationNamed" msgid="8619384150737825003">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎Capture image with %1$s‎‏‎‎‏‎"</string>
+    <string name="whichImageCaptureApplicationLabel" msgid="6390303445371527066">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‏‎‏‎‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎Capture image‎‏‎‎‏‎"</string>
+    <string name="alwaysUse" msgid="4583018368000610438">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎Use by default for this action.‎‏‎‎‏‎"</string>
+    <string name="use_a_different_app" msgid="8134926230585710243">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‎‎‏‎‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‏‎‎‎‏‏‎Use a different app‎‏‎‎‏‎"</string>
+    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‏‎Clear default in System settings &gt; Apps &gt; Downloaded.‎‏‎‎‏‎"</string>
+    <string name="chooseActivity" msgid="7486876147751803333">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‎‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‏‎‏‎Choose an action‎‏‎‎‏‎"</string>
+    <string name="chooseUsbActivity" msgid="6894748416073583509">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎Choose an app for the USB device‎‏‎‎‏‎"</string>
+    <string name="noApplications" msgid="2991814273936504689">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎No apps can perform this action.‎‏‎‎‏‎"</string>
+    <string name="aerr_application" msgid="250320989337856518">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="APPLICATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎ has stopped‎‏‎‎‏‎"</string>
+    <string name="aerr_process" msgid="6201597323218674729">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="PROCESS">%1$s</xliff:g>‎‏‎‎‏‏‏‎ has stopped‎‏‎‎‏‎"</string>
+    <string name="aerr_application_repeated" msgid="3146328699537439573">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‏‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="APPLICATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎ keeps stopping‎‏‎‎‏‎"</string>
+    <string name="aerr_process_repeated" msgid="6235302956890402259">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="PROCESS">%1$s</xliff:g>‎‏‎‎‏‏‏‎ keeps stopping‎‏‎‎‏‎"</string>
+    <string name="aerr_restart" msgid="7581308074153624475">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎Open app again‎‏‎‎‏‎"</string>
+    <string name="aerr_report" msgid="5371800241488400617">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎‏‎Send feedback‎‏‎‎‏‎"</string>
+    <string name="aerr_close" msgid="2991640326563991340">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‏‏‎‎‎Close‎‏‎‎‏‎"</string>
+    <string name="aerr_mute" msgid="1974781923723235953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‎‎‎‏‎Mute until device restarts‎‏‎‎‏‎"</string>
+    <string name="aerr_wait" msgid="3199956902437040261">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‎‏‎Wait‎‏‎‎‏‎"</string>
+    <string name="aerr_close_app" msgid="3269334853724920302">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‎‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎Close app‎‏‎‎‏‎"</string>
+    <string name="anr_title" msgid="4351948481459135709"></string>
+    <string name="anr_activity_application" msgid="8493290105678066167">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="APPLICATION">%2$s</xliff:g>‎‏‎‎‏‏‏‎ isn\'t responding‎‏‎‎‏‎"</string>
+    <string name="anr_activity_process" msgid="1622382268908620314">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="ACTIVITY">%1$s</xliff:g>‎‏‎‎‏‏‏‎ isn\'t responding‎‏‎‎‏‎"</string>
+    <string name="anr_application_process" msgid="6417199034861140083">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="APPLICATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎ isn\'t responding‎‏‎‎‏‎"</string>
+    <string name="anr_process" msgid="6156880875555921105">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎Process ‎‏‎‎‏‏‎<xliff:g id="PROCESS">%1$s</xliff:g>‎‏‎‎‏‏‏‎ isn\'t responding‎‏‎‎‏‎"</string>
+    <string name="force_close" msgid="8346072094521265605">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‎OK‎‏‎‎‏‎"</string>
+    <string name="report" msgid="4060218260984795706">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‏‎‏‎‎Report‎‏‎‎‏‎"</string>
+    <string name="wait" msgid="7147118217226317732">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎Wait‎‏‎‎‏‎"</string>
+    <string name="webpage_unresponsive" msgid="3272758351138122503">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‏‎The page has become unresponsive.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Do you want to close it?‎‏‎‎‏‎"</string>
+    <string name="launch_warning_title" msgid="1547997780506713581">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎App redirected‎‏‎‎‏‎"</string>
+    <string name="launch_warning_replace" msgid="6202498949970281412">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is now running.‎‏‎‎‏‎"</string>
+    <string name="launch_warning_original" msgid="188102023021668683">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ was originally launched.‎‏‎‎‏‎"</string>
+    <string name="screen_compat_mode_scale" msgid="3202955667675944499">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‏‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎Scale‎‏‎‎‏‎"</string>
+    <string name="screen_compat_mode_show" msgid="4013878876486655892">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎‏‎‏‎‎‎Always show‎‏‎‎‏‎"</string>
+    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎‏‏‎‎‎‎‏‎‏‏‎Re-enable this in System settings &gt; Apps &gt; Downloaded.‎‏‎‎‏‎"</string>
+    <string name="unsupported_display_size_message" msgid="6545327290756295232">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ does not support the current Display size setting and may behave unexpectedly.‎‏‎‎‏‎"</string>
+    <string name="unsupported_display_size_show" msgid="7969129195360353041">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‎Always show‎‏‎‎‏‎"</string>
+    <string name="smv_application" msgid="3307209192155442829">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‎The app ‎‏‎‎‏‏‎<xliff:g id="APPLICATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎ (process ‎‏‎‎‏‏‎<xliff:g id="PROCESS">%2$s</xliff:g>‎‏‎‎‏‏‏‎) has violated its self-enforced StrictMode policy.‎‏‎‎‏‎"</string>
+    <string name="smv_process" msgid="5120397012047462446">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎The process ‎‏‎‎‏‏‎<xliff:g id="PROCESS">%1$s</xliff:g>‎‏‎‎‏‏‏‎ has has violated its self-enforced StrictMode policy.‎‏‎‎‏‎"</string>
+    <string name="android_upgrading_title" msgid="1584192285441405746">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎Android is upgrading…‎‏‎‎‏‎"</string>
+    <string name="android_start_title" msgid="8418054686415318207">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‏‏‏‎Android is starting…‎‏‎‎‏‎"</string>
+    <string name="android_upgrading_fstrim" msgid="8036718871534640010">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎Optimizing storage.‎‏‎‎‏‎"</string>
+    <string name="android_upgrading_notification_title" msgid="8428357096969413169">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎Finishing Android update…‎‏‎‎‏‎"</string>
+    <string name="android_upgrading_notification_body" msgid="5761201379457064286">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎Some apps may not work properly until the upgrade finishes‎‏‎‎‏‎"</string>
+    <string name="app_upgrading_toast" msgid="3008139776215597053">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‎‏‏‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="APPLICATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is upgrading…‎‏‎‎‏‎"</string>
+    <string name="android_upgrading_apk" msgid="7904042682111526169">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‎Optimizing app ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ of ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="android_preparing_apk" msgid="8162599310274079154">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎‏‎‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‎Preparing ‎‏‎‎‏‏‎<xliff:g id="APPNAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎Starting apps.‎‏‎‎‏‎"</string>
+    <string name="android_upgrading_complete" msgid="1405954754112999229">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎Finishing boot.‎‏‎‎‏‎"</string>
+    <string name="heavy_weight_notification" msgid="9087063985776626166">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎ running‎‏‎‎‏‎"</string>
+    <string name="heavy_weight_notification_detail" msgid="867643381388543170">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‎‎Tap to switch to app‎‏‎‎‏‎"</string>
+    <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎Switch apps?‎‏‎‎‏‎"</string>
+    <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎Another app is already running that must be stopped before you can start a new one.‎‏‎‎‏‎"</string>
+    <string name="old_app_action" msgid="493129172238566282">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‎‎Return to ‎‏‎‎‏‏‎<xliff:g id="OLD_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="old_app_description" msgid="2082094275580358049">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎Don\'t start the new app.‎‏‎‎‏‎"</string>
+    <string name="new_app_action" msgid="5472756926945440706">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‎‎‎‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎Start ‎‏‎‎‏‏‎<xliff:g id="OLD_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="new_app_description" msgid="1932143598371537340">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‎Stop the old app without saving.‎‏‎‎‏‎"</string>
+    <string name="dump_heap_notification" msgid="2618183274836056542">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="PROC">%1$s</xliff:g>‎‏‎‎‏‏‏‎ exceeded memory limit‎‏‎‎‏‎"</string>
+    <string name="dump_heap_notification_detail" msgid="6901391084243999274">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‎Heap dump has been collected; tap to share‎‏‎‎‏‎"</string>
+    <string name="dump_heap_title" msgid="5864292264307651673">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎Share heap dump?‎‏‎‎‏‎"</string>
+    <string name="dump_heap_text" msgid="4809417337240334941">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‎‎‏‎‏‏‎‎‏‎‎‏‎‏‏‏‎‏‎The process ‎‏‎‎‏‏‎<xliff:g id="PROC">%1$s</xliff:g>‎‏‎‎‏‏‏‎ has exceeded its process memory limit of ‎‏‎‎‏‏‎<xliff:g id="SIZE">%2$s</xliff:g>‎‏‎‎‏‏‏‎. A heap dump is available for you to share with its developer. Be careful: this heap dump can contain any of your personal information that the application has access to.‎‏‎‎‏‎"</string>
+    <string name="sendText" msgid="5209874571959469142">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎Choose an action for text‎‏‎‎‏‎"</string>
+    <string name="volume_ringtone" msgid="6885421406845734650">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‎Ringer volume‎‏‎‎‏‎"</string>
+    <string name="volume_music" msgid="5421651157138628171">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎Media volume‎‏‎‎‏‎"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‏‎‏‎Playing through Bluetooth‎‏‎‎‏‎"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎Silent ringtone set‎‏‎‎‏‎"</string>
+    <string name="volume_call" msgid="3941680041282788711">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‎In-call volume‎‏‎‎‏‎"</string>
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‎‎Bluetooth in-call volume‎‏‎‎‏‎"</string>
+    <string name="volume_alarm" msgid="1985191616042689100">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎‎‎Alarm volume‎‏‎‎‏‎"</string>
+    <string name="volume_notification" msgid="2422265656744276715">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‎‏‎‏‏‎Notification volume‎‏‎‎‏‎"</string>
+    <string name="volume_unknown" msgid="1400219669770445902">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‏‎‎‏‏‏‎‎Volume‎‏‎‎‏‎"</string>
+    <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎Bluetooth volume‎‏‎‎‏‎"</string>
+    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‎‎‎‎‎Ringtone volume‎‏‎‎‏‎"</string>
+    <string name="volume_icon_description_incall" msgid="8890073218154543397">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‎‏‎Call volume‎‏‎‎‏‎"</string>
+    <string name="volume_icon_description_media" msgid="4217311719665194215">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‏‏‎Media volume‎‏‎‎‏‎"</string>
+    <string name="volume_icon_description_notification" msgid="7044986546477282274">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎Notification volume‎‏‎‎‏‎"</string>
+    <string name="ringtone_default" msgid="3789758980357696936">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎Default ringtone‎‏‎‎‏‎"</string>
+    <string name="ringtone_default_with_actual" msgid="1767304850491060581">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‎‎‏‎‏‎Default (‎‏‎‎‏‏‎<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+    <string name="ringtone_silent" msgid="7937634392408977062">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‎‎None‎‏‎‎‏‎"</string>
+    <string name="ringtone_picker_title" msgid="3515143939175119094">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‎‏‏‎‎Ringtones‎‏‎‎‏‎"</string>
+    <string name="ringtone_picker_title_alarm" msgid="6473325356070549702">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‏‎‎Alarm sounds‎‏‎‎‏‎"</string>
+    <string name="ringtone_picker_title_notification" msgid="4837740874822788802">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎Notification sounds‎‏‎‎‏‎"</string>
+    <string name="ringtone_unknown" msgid="3914515995813061520">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‎‎‎‎Unknown‎‏‎‎‏‎"</string>
+    <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎Wi-Fi networks available‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎Wi-Fi network available‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="wifi_available_detailed" formatted="false" msgid="1140699367193975606">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‎Open Wi-Fi networks available‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‎Open Wi-Fi network available‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="wifi_available_title" msgid="3817100557900599505">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‎Connect to open Wi‑Fi network‎‏‎‎‏‎"</string>
+    <string name="wifi_available_title_connecting" msgid="1557292688310330032">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎Connecting to open Wi‑Fi network‎‏‎‎‏‎"</string>
+    <string name="wifi_available_title_connected" msgid="7542672851522241548">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‏‏‎‎‎Connected to Wi‑Fi network‎‏‎‎‏‎"</string>
+    <string name="wifi_available_title_failed_to_connect" msgid="6861772233582618132">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎Could not connect to Wi‑Fi network‎‏‎‎‏‎"</string>
+    <string name="wifi_available_content_failed_to_connect" msgid="3377406637062802645">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎Tap to see all networks‎‏‎‎‏‎"</string>
+    <string name="wifi_available_action_connect" msgid="2635699628459488788">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎Connect‎‏‎‎‏‎"</string>
+    <string name="wifi_available_action_all_networks" msgid="1100098935861622985">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎All Networks‎‏‎‎‏‎"</string>
+    <string name="wifi_available_sign_in" msgid="9157196203958866662">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‏‏‎‎‏‏‎‎Sign in to Wi-Fi network‎‏‎‎‏‎"</string>
+    <string name="network_available_sign_in" msgid="1848877297365446605">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎Sign in to network‎‏‎‎‏‎"</string>
+    <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
+    <skip />
+    <string name="wifi_no_internet" msgid="8451173622563841546">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎Wi-Fi has no Internet access‎‏‎‎‏‎"</string>
+    <string name="wifi_no_internet_detailed" msgid="8083079241212301741">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎Tap for options‎‏‎‎‏‎"</string>
+    <string name="network_switch_metered" msgid="4671730921726992671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎Switched to ‎‏‎‎‏‏‎<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="network_switch_metered_detail" msgid="5325661434777870353">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎Device uses ‎‏‎‎‏‏‎<xliff:g id="NEW_NETWORK">%1$s</xliff:g>‎‏‎‎‏‏‏‎ when ‎‏‎‎‏‏‎<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>‎‏‎‎‏‏‏‎ has no Internet access. Charges may apply.‎‏‎‎‏‎"</string>
+    <string name="network_switch_metered_toast" msgid="5779283181685974304">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‎‎‏‎‎‎‎‎‎Switched from ‎‏‎‎‏‏‎<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>‎‏‎‎‏‏‏‎ to ‎‏‎‎‏‏‎<xliff:g id="NEW_NETWORK">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+  <string-array name="network_switch_type_name">
+    <item msgid="3979506840912951943">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‎mobile data‎‏‎‎‏‎"</item>
+    <item msgid="75483255295529161">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‎‎‏‎Wi-Fi‎‏‎‎‏‎"</item>
+    <item msgid="6862614801537202646">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎Bluetooth‎‏‎‎‏‎"</item>
+    <item msgid="5447331121797802871">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎Ethernet‎‏‎‎‏‎"</item>
+    <item msgid="8257233890381651999">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‏‏‏‏‏‎VPN‎‏‎‎‏‎"</item>
+  </string-array>
+    <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‏‏‎‎‎‎‎an unknown network type‎‏‎‎‏‎"</string>
+    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎Couldn\'t connect to Wi-Fi‎‏‎‎‏‎"</string>
+    <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‎‏‏‎ has a poor Internet connection.‎‏‎‎‏‎"</string>
+    <string name="wifi_connect_alert_title" msgid="8455846016001810172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎Allow connection?‎‏‎‎‏‎"</string>
+    <string name="wifi_connect_alert_message" msgid="6451273376815958922">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎Application %1$s would like to connect to Wifi Network %2$s‎‏‎‎‏‎"</string>
+    <string name="wifi_connect_default_application" msgid="7143109390475484319">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‏‏‏‎An application‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎Wi-Fi Direct‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎Start Wi-Fi Direct. This will turn off Wi-Fi client/hotspot.‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎Couldn\'t start Wi-Fi Direct.‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎‎Wi-Fi Direct is on‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_enabled_notification_message" msgid="8064677407830620023">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‏‏‎Tap for settings‎‏‎‎‏‎"</string>
+    <string name="accept" msgid="1645267259272829559">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‏‎‏‏‏‎Accept‎‏‎‎‏‎"</string>
+    <string name="decline" msgid="2112225451706137894">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‎‎Decline‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‎Invitation sent‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‏‎Invitation to connect‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_from_message" msgid="570389174731951769">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‎From:‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_to_message" msgid="248968974522044099">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‎To:‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‎‎Type the required PIN:‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‎‎PIN:‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‎The tablet will temporarily disconnect from Wi-Fi while it\'s connected to ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="tv" msgid="3087858235069421128">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎The TV will temporarily disconnect from Wi-Fi while it\'s connected to ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎The phone will temporarily disconnect from Wi-Fi while it\'s connected to ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="select_character" msgid="3365550120617701745">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎Insert character‎‏‎‎‏‎"</string>
+    <string name="sms_control_title" msgid="7296612781128917719">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‏‏‎Sending SMS messages‎‏‎‎‏‎"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎&lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/b&gt; is sending a large number of SMS messages. Do you want to allow this app to continue sending messages?‎‏‎‎‏‎"</string>
+    <string name="sms_control_yes" msgid="3663725993855816807">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎Allow‎‏‎‎‏‎"</string>
+    <string name="sms_control_no" msgid="625438561395534982">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‎‎Deny‎‏‎‎‏‎"</string>
+    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎&lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/b&gt; would like to send a message to &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/b&gt;.‎‏‎‎‏‎"</string>
+    <string name="sms_short_code_details" msgid="5873295990846059400">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎This ‎‏‎‎‏‏‎"<b>"‎‏‎‎‏‏‏‎may cause charges‎‏‎‎‏‏‎"</b>"‎‏‎‎‏‏‏‎ on your mobile account.‎‏‎‎‏‎"</string>
+    <string name="sms_premium_short_code_details" msgid="7869234868023975">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎"<b>"‎‏‎‎‏‏‏‎This will cause charges on your mobile account.‎‏‎‎‏‏‎"</b>"‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎Send‎‏‎‎‏‎"</string>
+    <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‎‏‎‎‎‏‎‎‎‏‎‎‏‎‎Cancel‎‏‎‎‏‎"</string>
+    <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎Remember my choice‎‏‎‎‏‎"</string>
+    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‎You can change this later in Settings &gt; Apps‎‏‎‎‏‎"</string>
+    <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎Always Allow‎‏‎‎‏‎"</string>
+    <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‎‎‏‎Never Allow‎‏‎‎‏‎"</string>
+    <string name="sim_removed_title" msgid="6227712319223226185">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎SIM card removed‎‏‎‎‏‎"</string>
+    <string name="sim_removed_message" msgid="2333164559970958645">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‎The mobile network will be unavailable until you restart with a valid SIM card inserted.‎‏‎‎‏‎"</string>
+    <string name="sim_done_button" msgid="827949989369963775">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‏‏‏‎Done‎‏‎‎‏‎"</string>
+    <string name="sim_added_title" msgid="3719670512889674693">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‎‏‎SIM card added‎‏‎‎‏‎"</string>
+    <string name="sim_added_message" msgid="6599945301141050216">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‎‎‎‎Restart your device to access the mobile network.‎‏‎‎‏‎"</string>
+    <string name="sim_restart_button" msgid="4722407842815232347">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‏‎Restart‎‏‎‎‏‎"</string>
+    <string name="carrier_app_dialog_message" msgid="7066156088266319533">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‎To get your new SIM working properly, you\'ll need to install and open an app from your carrier.‎‏‎‎‏‎"</string>
+    <string name="carrier_app_dialog_button" msgid="7900235513678617329">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‎‏‎GET THE APP‎‏‎‎‏‎"</string>
+    <string name="carrier_app_dialog_not_now" msgid="6361378684292268027">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎NOT NOW‎‏‎‎‏‎"</string>
+    <string name="carrier_app_notification_title" msgid="8921767385872554621">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎New SIM inserted‎‏‎‎‏‎"</string>
+    <string name="carrier_app_notification_text" msgid="1132487343346050225">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‎‏‎Tap to set it up‎‏‎‎‏‎"</string>
+    <string name="time_picker_dialog_title" msgid="8349362623068819295">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎Set time‎‏‎‎‏‎"</string>
+    <string name="date_picker_dialog_title" msgid="5879450659453782278">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‏‎‎Set date‎‏‎‎‏‎"</string>
+    <string name="date_time_set" msgid="5777075614321087758">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎Set‎‏‎‎‏‎"</string>
+    <string name="date_time_done" msgid="2507683751759308828">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‎‎‎‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎Done‎‏‎‎‏‎"</string>
+    <string name="perms_new_perm_prefix" msgid="8257740710754301407">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‏‎"<font size="12" fgcolor="#ff33b5e5">"‎‏‎‎‏‏‏‎NEW: ‎‏‎‎‏‏‎"</font>"‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="perms_description_app" msgid="5139836143293299417">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎Provided by ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="no_permissions" msgid="7283357728219338112">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‎‎‎‎‎No permissions required‎‏‎‎‏‎"</string>
+    <string name="perm_costs_money" msgid="4902470324142151116">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎this may cost you money‎‏‎‎‏‎"</string>
+    <string name="dlg_ok" msgid="7376953167039865701">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‏‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‎‏‎OK‎‏‎‎‏‎"</string>
+    <string name="usb_charging_notification_title" msgid="6895185153353640787">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‎‎‏‏‎USB charging this device‎‏‎‎‏‎"</string>
+    <string name="usb_supplying_notification_title" msgid="5310642257296510271">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎USB supplying power to attached device‎‏‎‎‏‎"</string>
+    <string name="usb_mtp_notification_title" msgid="8396264943589760855">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎USB for file transfer‎‏‎‎‏‎"</string>
+    <string name="usb_ptp_notification_title" msgid="1347328437083192112">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‎‏‏‏‎‏‏‎‎‏‏‎‎‎‎‎USB for photo transfer‎‏‎‎‏‎"</string>
+    <string name="usb_midi_notification_title" msgid="4850904915889144654">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‎USB for MIDI‎‏‎‎‏‎"</string>
+    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‎‎Connected to a USB accessory‎‏‎‎‏‎"</string>
+    <string name="usb_notification_message" msgid="3370903770828407960">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎Tap for more options.‎‏‎‎‏‎"</string>
+    <string name="usb_unsupported_audio_accessory_title" msgid="3529881374464628084">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‏‎‎‎Analog audio accessory detected‎‏‎‎‏‎"</string>
+    <string name="usb_unsupported_audio_accessory_message" msgid="6309553946441565215">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎The attached device is not compatible with this phone. Tap to learn more.‎‏‎‎‏‎"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‎‎‎‏‏‏‏‎‎USB debugging connected‎‏‎‎‏‎"</string>
+    <string name="adb_active_notification_message" msgid="4948470599328424059">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‎Tap to disable USB debugging.‎‏‎‎‏‎"</string>
+    <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‎Select to disable USB debugging.‎‏‎‎‏‎"</string>
+    <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‏‏‎‎‎‏‏‎‎Taking bug report…‎‏‎‎‏‎"</string>
+    <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎Share bug report?‎‏‎‎‏‎"</string>
+    <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎Sharing bug report…‎‏‎‎‏‎"</string>
+    <string name="share_remote_bugreport_notification_message_finished" msgid="6029609949340992866">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‎Your admin requested a bug report to help troubleshoot this device. Apps and data may be shared.‎‏‎‎‏‎"</string>
+    <string name="share_remote_bugreport_action" msgid="6249476773913384948">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎SHARE‎‏‎‎‏‎"</string>
+    <string name="decline_remote_bugreport_action" msgid="6230987241608770062">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‎‏‏‏‎‎DECLINE‎‏‎‎‏‎"</string>
+    <string name="select_input_method" msgid="8547250819326693584">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‎Change keyboard‎‏‎‎‏‎"</string>
+    <string name="show_ime" msgid="2506087537466597099">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎Keep it on screen while physical keyboard is active‎‏‎‎‏‎"</string>
+    <string name="hardware" msgid="194658061510127999">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎Show virtual keyboard‎‏‎‎‏‎"</string>
+    <string name="select_keyboard_layout_notification_title" msgid="597189518763083494">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎‏‎‎‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‎Configure physical keyboard‎‏‎‎‏‎"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="8084622969903004900">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎Tap to select language and layout‎‏‎‎‏‎"</string>
+    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎ ABCDEFGHIJKLMNOPQRSTUVWXYZ‎‏‎‎‏‎"</string>
+    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‎‎ 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ‎‏‎‎‏‎"</string>
+    <string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎Display over other apps‎‏‎‎‏‎"</string>
+    <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ displaying over other apps‎‏‎‎‏‎"</string>
+    <string name="alert_windows_notification_title" msgid="3697657294867638947">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ is displaying over other apps‎‏‎‎‏‎"</string>
+    <string name="alert_windows_notification_message" msgid="8917232109522912560">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎If you don’t want ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ to use this feature, tap to open settings and turn it off.‎‏‎‎‏‎"</string>
+    <string name="alert_windows_notification_turn_off_action" msgid="3367294525884949878">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‎‎‎‏‎‎‎‏‎‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎TURN OFF‎‏‎‎‏‎"</string>
+    <string name="ext_media_checking_notification_title" msgid="5734005953288045806">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎‏‏‏‎‎Preparing ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="ext_media_checking_notification_message" msgid="4747432538578886744">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‎‏‏‎‎‎‎Checking for errors‎‏‎‎‏‎"</string>
+    <string name="ext_media_new_notification_message" msgid="7589986898808506239">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‏‎New ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ detected‎‏‎‎‏‎"</string>
+    <string name="ext_media_ready_notification_message" msgid="4083398150380114462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎For transferring photos and media‎‏‎‎‏‎"</string>
+    <string name="ext_media_unmountable_notification_title" msgid="8295123366236989588">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎Corrupted ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="ext_media_unmountable_notification_message" msgid="2343202057122495773">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ is corrupt. Tap to fix.‎‏‎‎‏‎"</string>
+    <string name="ext_media_unmountable_notification_message" product="tv" msgid="3941179940297874950">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ is corrupt. Select to fix.‎‏‎‎‏‎"</string>
+    <string name="ext_media_unsupported_notification_title" msgid="3797642322958803257">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‎Unsupported ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="ext_media_unsupported_notification_message" msgid="6121601473787888589">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎This device doesn’t support this ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎. Tap to set up in a supported format.‎‏‎‎‏‎"</string>
+    <string name="ext_media_unsupported_notification_message" product="tv" msgid="3725436899820390906">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‎This device doesn’t support this ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎. Select to set up in a supported format.‎‏‎‎‏‎"</string>
+    <string name="ext_media_badremoval_notification_title" msgid="3206248947375505416">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ unexpectedly removed‎‏‎‎‏‎"</string>
+    <string name="ext_media_badremoval_notification_message" msgid="380176703346946313">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎Unmount ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ before removing to avoid data loss‎‏‎‎‏‎"</string>
+    <string name="ext_media_nomedia_notification_title" msgid="1704840188641749091">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‎Removed ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="ext_media_nomedia_notification_message" msgid="6471542972147056586">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ removed; insert a new one‎‏‎‎‏‎"</string>
+    <string name="ext_media_unmounting_notification_title" msgid="640674168454809372">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎Still ejecting ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</string>
+    <string name="ext_media_unmounting_notification_message" msgid="4182843895023357756">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎Don\'t remove‎‏‎‎‏‎"</string>
+    <string name="ext_media_init_action" msgid="7952885510091978278">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‏‏‎‎Set up‎‏‎‎‏‎"</string>
+    <string name="ext_media_unmount_action" msgid="1121883233103278199">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎Eject‎‏‎‎‏‎"</string>
+    <string name="ext_media_browse_action" msgid="8322172381028546087">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎Explore‎‏‎‎‏‎"</string>
+    <string name="ext_media_missing_title" msgid="620980315821543904">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ missing‎‏‎‎‏‎"</string>
+    <string name="ext_media_missing_message" msgid="5761133583368750174">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎Reinsert this device‎‏‎‎‏‎"</string>
+    <string name="ext_media_move_specific_title" msgid="1471100343872375842">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‏‎‎Moving ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="ext_media_move_title" msgid="1022809140035962662">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎Moving data‎‏‎‎‏‎"</string>
+    <string name="ext_media_move_success_title" msgid="8575300932957954671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‏‎Move complete‎‏‎‎‏‎"</string>
+    <string name="ext_media_move_success_message" msgid="4199002148206265426">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‎‎Data moved to ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="ext_media_move_failure_title" msgid="7613189040358789908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎Couldn\'t move data‎‏‎‎‏‎"</string>
+    <string name="ext_media_move_failure_message" msgid="1978096440816403360">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎Data left at original location‎‏‎‎‏‎"</string>
+    <string name="ext_media_status_removed" msgid="6576172423185918739">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎Removed‎‏‎‎‏‎"</string>
+    <string name="ext_media_status_unmounted" msgid="2551560878416417752">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎Ejected‎‏‎‎‏‎"</string>
+    <string name="ext_media_status_checking" msgid="6193921557423194949">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‎Checking…‎‏‎‎‏‎"</string>
+    <string name="ext_media_status_mounted" msgid="7253821726503179202">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‎‎‎‏‎‎Ready‎‏‎‎‏‎"</string>
+    <string name="ext_media_status_mounted_ro" msgid="8020978752406021015">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‎Read-only‎‏‎‎‏‎"</string>
+    <string name="ext_media_status_bad_removal" msgid="8395398567890329422">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎Removed unsafely‎‏‎‎‏‎"</string>
+    <string name="ext_media_status_unmountable" msgid="805594039236667894">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‎‏‏‎‎Corrupted‎‏‎‎‏‎"</string>
+    <string name="ext_media_status_unsupported" msgid="4691436711745681828">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎‎Unsupported‎‏‎‎‏‎"</string>
+    <string name="ext_media_status_ejecting" msgid="5463887263101234174">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‎Ejecting…‎‏‎‎‏‎"</string>
+    <string name="ext_media_status_formatting" msgid="1085079556538644861">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎Formatting…‎‏‎‎‏‎"</string>
+    <string name="ext_media_status_missing" msgid="5638633895221670766">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‎‎‏‏‎‏‏‎‏‏‏‎‎Not inserted‎‏‎‎‏‎"</string>
+    <string name="activity_list_empty" msgid="1675388330786841066">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎No matching activities found.‎‏‎‎‏‎"</string>
+    <string name="permlab_route_media_output" msgid="6243022988998972085">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‏‎‏‏‎‏‎‏‎route media output‎‏‎‎‏‎"</string>
+    <string name="permdesc_route_media_output" msgid="4932818749547244346">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‎Allows an application to route media output to other external devices.‎‏‎‎‏‎"</string>
+    <string name="permlab_readInstallSessions" msgid="3713753067455750349">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‎read install sessions‎‏‎‎‏‎"</string>
+    <string name="permdesc_readInstallSessions" msgid="2049771699626019849">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‏‎Allows an application to read install sessions. This allows it to see details about active package installations.‎‏‎‎‏‎"</string>
+    <string name="permlab_requestInstallPackages" msgid="5782013576218172577">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‎request install packages‎‏‎‎‏‎"</string>
+    <string name="permdesc_requestInstallPackages" msgid="5740101072486783082">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎Allows an application to request installation of packages.‎‏‎‎‏‎"</string>
+    <string name="permlab_requestDeletePackages" msgid="1703686454657781242">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎request delete packages‎‏‎‎‏‎"</string>
+    <string name="permdesc_requestDeletePackages" msgid="3406172963097595270">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‎Allows an application to request deletion of packages.‎‏‎‎‏‎"</string>
+    <string name="permlab_requestIgnoreBatteryOptimizations" msgid="8021256345643918264">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎ask to ignore battery optimizations‎‏‎‎‏‎"</string>
+    <string name="permdesc_requestIgnoreBatteryOptimizations" msgid="8359147856007447638">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‎‏‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎Allows an app to ask for permission to ignore battery optimizations for that app.‎‏‎‎‏‎"</string>
+    <string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‏‎‏‎‎Tap twice for zoom control‎‏‎‎‏‎"</string>
+    <string name="gadget_host_error_inflating" msgid="4882004314906466162">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‏‎‎‏‎‎Couldn\'t add widget.‎‏‎‎‏‎"</string>
+    <string name="ime_action_go" msgid="8320845651737369027">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‏‏‎‎‎‎‏‏‎Go‎‏‎‎‏‎"</string>
+    <string name="ime_action_search" msgid="658110271822807811">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎Search‎‏‎‎‏‎"</string>
+    <string name="ime_action_send" msgid="2316166556349314424">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎Send‎‏‎‎‏‎"</string>
+    <string name="ime_action_next" msgid="3138843904009813834">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎Next‎‏‎‎‏‎"</string>
+    <string name="ime_action_done" msgid="8971516117910934605">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎Done‎‏‎‎‏‎"</string>
+    <string name="ime_action_previous" msgid="1443550039250105948">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎Prev‎‏‎‎‏‎"</string>
+    <string name="ime_action_default" msgid="2840921885558045721">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‏‎Execute‎‏‎‎‏‎"</string>
+    <string name="dial_number_using" msgid="5789176425167573586">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‎Dial number‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎using ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="create_contact_using" msgid="4947405226788104538">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎Create contact‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎using ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‏‎‎The following one or more apps request permission to access your account, now and in the future.‎‏‎‎‏‎"</string>
+    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎Do you want to allow this request?‎‏‎‎‏‎"</string>
+    <string name="grant_permissions_header_text" msgid="6874497408201826708">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎‎Access request‎‏‎‎‏‎"</string>
+    <string name="allow" msgid="7225948811296386551">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‎‏‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‏‏‏‏‎‏‏‏‎Allow‎‏‎‎‏‎"</string>
+    <string name="deny" msgid="2081879885755434506">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‎‎Deny‎‏‎‎‏‎"</string>
+    <string name="permission_request_notification_title" msgid="6486759795926237907">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‎‎‎‏‏‎‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‎‏‎‎‏‏‎Permission requested‎‏‎‎‏‎"</string>
+    <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‎Permission requested‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎for account ‎‏‎‎‏‏‎<xliff:g id="ACCOUNT">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="forward_intent_to_owner" msgid="1207197447013960896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎You\'re using this app outside of your work profile‎‏‎‎‏‎"</string>
+    <string name="forward_intent_to_work" msgid="621480743856004612">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‏‎‎‎You\'re using this app in your work profile‎‏‎‎‏‎"</string>
+    <string name="input_method_binding_label" msgid="1283557179944992649">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎Input method‎‏‎‎‏‎"</string>
+    <string name="sync_binding_label" msgid="3687969138375092423">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‏‎Sync‎‏‎‎‏‎"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‎‏‎Accessibility‎‏‎‎‏‎"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎Wallpaper‎‏‎‎‏‎"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‏‏‏‎Change wallpaper‎‏‎‎‏‎"</string>
+    <string name="notification_listener_binding_label" msgid="2014162835481906429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‏‎‏‎Notification listener‎‏‎‎‏‎"</string>
+    <string name="vr_listener_binding_label" msgid="4316591939343607306">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎VR listener‎‏‎‎‏‎"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‏‏‎‎‏‎‏‎‎‎Condition provider‎‏‎‎‏‎"</string>
+    <string name="notification_ranker_binding_label" msgid="774540592299064747">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎Notification ranker service‎‏‎‎‏‎"</string>
+    <string name="vpn_title" msgid="19615213552042827">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‎‏‏‎VPN activated‎‏‎‎‏‎"</string>
+    <string name="vpn_title_long" msgid="6400714798049252294">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‎‎VPN is activated by ‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="vpn_text" msgid="1610714069627824309">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎Tap to manage the network.‎‏‎‎‏‎"</string>
+    <string name="vpn_text_long" msgid="4907843483284977618">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‏‎‎Connected to ‎‏‎‎‏‏‎<xliff:g id="SESSION">%s</xliff:g>‎‏‎‎‏‏‏‎. Tap to manage the network.‎‏‎‎‏‎"</string>
+    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‎‏‎Always-on VPN connecting…‎‏‎‎‏‎"</string>
+    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‎Always-on VPN connected‎‏‎‎‏‎"</string>
+    <string name="vpn_lockdown_disconnected" msgid="4532298952570796327">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎Always-on VPN disconnected‎‏‎‎‏‎"</string>
+    <string name="vpn_lockdown_error" msgid="6009249814034708175">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎Always-on VPN error‎‏‎‎‏‎"</string>
+    <string name="vpn_lockdown_config" msgid="5099330695245008680">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‎‎‎Tap to set up‎‏‎‎‏‎"</string>
+    <string name="upload_file" msgid="2897957172366730416">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‏‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‎‎‎Choose file‎‏‎‎‏‎"</string>
+    <string name="no_file_chosen" msgid="6363648562170759465">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‏‎No file chosen‎‏‎‎‏‎"</string>
+    <string name="reset" msgid="2448168080964209908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‏‎‎‎Reset‎‏‎‎‏‎"</string>
+    <string name="submit" msgid="1602335572089911941">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎Submit‎‏‎‎‏‎"</string>
+    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎Car mode enabled‎‏‎‎‏‎"</string>
+    <string name="car_mode_disable_notification_message" msgid="6301524980144350051">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‏‎‎‎‏‏‎Tap to exit car mode.‎‏‎‎‏‎"</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‎Tethering or hotspot active‎‏‎‎‏‎"</string>
+    <string name="tethered_notification_message" msgid="2113628520792055377">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‎Tap to set up.‎‏‎‎‏‎"</string>
+    <string name="back_button_label" msgid="2300470004503343439">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‎‏‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‏‎Back‎‏‎‎‏‎"</string>
+    <string name="next_button_label" msgid="1080555104677992408">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‏‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎Next‎‏‎‎‏‎"</string>
+    <string name="skip_button_label" msgid="1275362299471631819">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‏‏‎Skip‎‏‎‎‏‎"</string>
+    <string name="no_matches" msgid="8129421908915840737">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‎‎‏‎No matches‎‏‎‎‏‎"</string>
+    <string name="find_on_page" msgid="1946799233822820384">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎Find on page‎‏‎‎‏‎"</string>
+    <plurals name="matches_found" formatted="false" msgid="1210884353962081884">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="INDEX">%d</xliff:g>‎‏‎‎‏‏‏‎ of ‎‏‎‎‏‏‎<xliff:g id="TOTAL">%d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎1 match‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="action_mode_done" msgid="7217581640461922289">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‏‎‎‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎Done‎‏‎‎‏‎"</string>
+    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎‎Erasing USB storage…‎‏‎‎‏‎"</string>
+    <string name="progress_erasing" product="default" msgid="6596988875507043042">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‏‏‎‏‎‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‎‎‎‏‎‎Erasing SD card…‎‏‎‎‏‎"</string>
+    <string name="share" msgid="1778686618230011964">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎Share‎‏‎‎‏‎"</string>
+    <string name="find" msgid="4808270900322985960">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎Find‎‏‎‎‏‎"</string>
+    <string name="websearch" msgid="4337157977400211589">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎Web Search‎‏‎‎‏‎"</string>
+    <string name="find_next" msgid="5742124618942193978">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎Find next‎‏‎‎‏‎"</string>
+    <string name="find_previous" msgid="2196723669388360506">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎Find previous‎‏‎‎‏‎"</string>
+    <string name="gpsNotifTicker" msgid="5622683912616496172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎Location request from ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="gpsNotifTitle" msgid="5446858717157416839">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‎Location request‎‏‎‎‏‎"</string>
+    <string name="gpsNotifMessage" msgid="1374718023224000702">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎Requested by ‎‏‎‎‏‏‎<xliff:g id="NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ (‎‏‎‎‏‏‎<xliff:g id="SERVICE">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+    <string name="gpsVerifYes" msgid="2346566072867213563">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎Yes‎‏‎‎‏‎"</string>
+    <string name="gpsVerifNo" msgid="1146564937346454865">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‎No‎‏‎‎‏‎"</string>
+    <string name="sync_too_many_deletes" msgid="5296321850662746890">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎Delete limit exceeded‎‏‎‎‏‎"</string>
+    <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‏‏‎‎‏‎‏‎There are ‎‏‎‎‏‏‎<xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g>‎‏‎‎‏‏‏‎ deleted items for ‎‏‎‎‏‏‎<xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>‎‏‎‎‏‏‏‎, account ‎‏‎‎‏‏‎<xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>‎‏‎‎‏‏‏‎. What do you want to do?‎‏‎‎‏‎"</string>
+    <string name="sync_really_delete" msgid="2572600103122596243">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‏‎Delete the items‎‏‎‎‏‎"</string>
+    <string name="sync_undo_deletes" msgid="2941317360600338602">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎Undo the deletes‎‏‎‎‏‎"</string>
+    <string name="sync_do_nothing" msgid="3743764740430821845">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‏‎Do nothing for now‎‏‎‎‏‎"</string>
+    <string name="choose_account_label" msgid="5655203089746423927">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎Choose an account‎‏‎‎‏‎"</string>
+    <string name="add_account_label" msgid="2935267344849993553">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎Add an account‎‏‎‎‏‎"</string>
+    <string name="add_account_button_label" msgid="3611982894853435874">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‎‎‎‏‎‎Add account‎‏‎‎‏‎"</string>
+    <string name="number_picker_increment_button" msgid="2412072272832284313">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‏‎‎‏‎Increase‎‏‎‎‏‎"</string>
+    <string name="number_picker_decrement_button" msgid="476050778386779067">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‎‏‏‏‎‏‏‏‎‏‏‎Decrease‎‏‎‎‏‎"</string>
+    <string name="number_picker_increment_scroll_mode" msgid="5259126567490114216">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="VALUE">%s</xliff:g>‎‏‎‎‏‏‏‎ touch &amp; hold.‎‏‎‎‏‎"</string>
+    <string name="number_picker_increment_scroll_action" msgid="9101473045891835490">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎Slide up to increase and down to decrease.‎‏‎‎‏‎"</string>
+    <string name="time_picker_increment_minute_button" msgid="8865885114028614321">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‎‏‎Increase minute‎‏‎‎‏‎"</string>
+    <string name="time_picker_decrement_minute_button" msgid="6246834937080684791">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‎Decrease minute‎‏‎‎‏‎"</string>
+    <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎Increase hour‎‏‎‎‏‎"</string>
+    <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎Decrease hour‎‏‎‎‏‎"</string>
+    <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‎‏‏‏‏‎Set PM‎‏‎‎‏‎"</string>
+    <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎Set AM‎‏‎‎‏‎"</string>
+    <string name="date_picker_increment_month_button" msgid="5369998479067934110">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎Increase month‎‏‎‎‏‎"</string>
+    <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‏‎Decrease month‎‏‎‎‏‎"</string>
+    <string name="date_picker_increment_day_button" msgid="7130465412308173903">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‎Increase day‎‏‎‎‏‎"</string>
+    <string name="date_picker_decrement_day_button" msgid="4131881521818750031">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‎Decrease day‎‏‎‎‏‎"</string>
+    <string name="date_picker_increment_year_button" msgid="6318697384310808899">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎Increase year‎‏‎‎‏‎"</string>
+    <string name="date_picker_decrement_year_button" msgid="4482021813491121717">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎Decrease year‎‏‎‎‏‎"</string>
+    <string name="date_picker_prev_month_button" msgid="2858244643992056505">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‏‏‏‎‎‏‎Previous month‎‏‎‎‏‎"</string>
+    <string name="date_picker_next_month_button" msgid="5559507736887605055">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‏‏‏‏‎Next month‎‏‎‎‏‎"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‏‎‏‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‎‎‏‏‎Alt‎‏‎‎‏‎"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎Cancel‎‏‎‎‏‎"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‎Delete‎‏‎‎‏‎"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎Done‎‏‎‎‏‎"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎Mode change‎‏‎‎‏‎"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎Shift‎‏‎‎‏‎"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎Enter‎‏‎‎‏‎"</string>
+    <string name="activitychooserview_choose_application" msgid="2125168057199941199">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‏‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎Choose an app‎‏‎‎‏‎"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‎‎‏‏‎‎‎Couldn\'t launch ‎‏‎‎‏‏‎<xliff:g id="APPLICATION_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="shareactionprovider_share_with" msgid="806688056141131819">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎Share with‎‏‎‎‏‎"</string>
+    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎Share with ‎‏‎‎‏‏‎<xliff:g id="APPLICATION_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="content_description_sliding_handle" msgid="415975056159262248">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎Sliding handle. Touch &amp; hold.‎‏‎‎‏‎"</string>
+    <string name="description_target_unlock_tablet" msgid="3833195335629795055">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‏‏‏‎Swipe to unlock.‎‏‎‎‏‎"</string>
+    <string name="action_bar_home_description" msgid="5293600496601490216">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‎‎‎Navigate home‎‏‎‎‏‎"</string>
+    <string name="action_bar_up_description" msgid="2237496562952152589">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‏‏‎‏‎Navigate up‎‏‎‎‏‎"</string>
+    <string name="action_menu_overflow_description" msgid="2295659037509008453">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎More options‎‏‎‎‏‎"</string>
+    <string name="action_bar_home_description_format" msgid="7965984360903693903">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎%1$s, %2$s‎‏‎‎‏‎"</string>
+    <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎‏‏‏‎%1$s, %2$s, %3$s‎‏‎‎‏‎"</string>
+    <string name="storage_internal" msgid="3570990907910199483">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‏‎‏‏‎Internal shared storage‎‏‎‎‏‎"</string>
+    <string name="storage_sd_card" msgid="3282948861378286745">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‏‎SD card‎‏‎‎‏‎"</string>
+    <string name="storage_sd_card_label" msgid="6347111320774379257">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="MANUFACTURER">%s</xliff:g>‎‏‎‎‏‏‏‎ SD card‎‏‎‎‏‎"</string>
+    <string name="storage_usb_drive" msgid="6261899683292244209">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‎USB drive‎‏‎‎‏‎"</string>
+    <string name="storage_usb_drive_label" msgid="4501418548927759953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="MANUFACTURER">%s</xliff:g>‎‏‎‎‏‏‏‎ USB drive‎‏‎‎‏‎"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎USB storage‎‏‎‎‏‎"</string>
+    <string name="extract_edit_menu_button" msgid="8940478730496610137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎Edit‎‏‎‎‏‎"</string>
+    <string name="data_usage_warning_title" msgid="3620440638180218181">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎‎‎‏‎‏‎Data usage alert‎‏‎‎‏‎"</string>
+    <string name="data_usage_warning_body" msgid="6660692274311972007">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‎‎‎‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‎‎‏‏‏‎Tap to view usage and settings.‎‏‎‎‏‎"</string>
+    <string name="data_usage_3g_limit_title" msgid="4361523876818447683">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‏‎‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎2G-3G data limit reached‎‏‎‎‏‎"</string>
+    <string name="data_usage_4g_limit_title" msgid="4609566827219442376">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‎‎4G data limit reached‎‏‎‎‏‎"</string>
+    <string name="data_usage_mobile_limit_title" msgid="6561099244084267376">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‎‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‎‎‎‎‎Mobile data limit reached‎‏‎‎‏‎"</string>
+    <string name="data_usage_wifi_limit_title" msgid="5803363779034792676">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎‎Wi-Fi data limit reached‎‏‎‎‏‎"</string>
+    <string name="data_usage_limit_body" msgid="291731708279614081">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎Data paused for rest of cycle‎‏‎‎‏‎"</string>
+    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎2G-3G data limit exceeded‎‏‎‎‏‎"</string>
+    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‎4G data limit exceeded‎‏‎‎‏‎"</string>
+    <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‎Mobile data limit exceeded‎‏‎‎‏‎"</string>
+    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎Wi-Fi data limit exceeded‎‏‎‎‏‎"</string>
+    <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="SIZE">%s</xliff:g>‎‏‎‎‏‏‏‎ over specified limit.‎‏‎‎‏‎"</string>
+    <string name="data_usage_restricted_title" msgid="5965157361036321914">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎Background data restricted‎‏‎‎‏‎"</string>
+    <string name="data_usage_restricted_body" msgid="469866376337242726">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‏‎‎Tap to remove restriction.‎‏‎‎‏‎"</string>
+    <string name="ssl_certificate" msgid="6510040486049237639">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎‏‏‏‎Security certificate‎‏‎‎‏‎"</string>
+    <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‎This certificate is valid.‎‏‎‎‏‎"</string>
+    <string name="issued_to" msgid="454239480274921032">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎Issued to:‎‏‎‎‏‎"</string>
+    <string name="common_name" msgid="2233209299434172646">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‎‎Common name:‎‏‎‎‏‎"</string>
+    <string name="org_name" msgid="6973561190762085236">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎Organization:‎‏‎‎‏‎"</string>
+    <string name="org_unit" msgid="7265981890422070383">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‏‏‎Organizational unit:‎‏‎‎‏‎"</string>
+    <string name="issued_by" msgid="2647584988057481566">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‏‏‏‏‎‎Issued by:‎‏‎‎‏‎"</string>
+    <string name="validity_period" msgid="8818886137545983110">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎‎Validity:‎‏‎‎‏‎"</string>
+    <string name="issued_on" msgid="5895017404361397232">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‎‎Issued on:‎‏‎‎‏‎"</string>
+    <string name="expires_on" msgid="3676242949915959821">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‎Expires on:‎‏‎‎‏‎"</string>
+    <string name="serial_number" msgid="758814067660862493">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎Serial number:‎‏‎‎‏‎"</string>
+    <string name="fingerprints" msgid="4516019619850763049">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‏‎‎‏‎Fingerprints:‎‏‎‎‏‎"</string>
+    <string name="sha256_fingerprint" msgid="4391271286477279263">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‏‏‏‏‎SHA-256 fingerprint:‎‏‎‎‏‎"</string>
+    <string name="sha1_fingerprint" msgid="7930330235269404581">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‏‎SHA-1 fingerprint:‎‏‎‎‏‎"</string>
+    <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‎‎‎See all‎‏‎‎‏‎"</string>
+    <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎Choose activity‎‏‎‎‏‎"</string>
+    <string name="share_action_provider_share_with" msgid="5247684435979149216">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎Share with‎‏‎‎‏‎"</string>
+    <string name="sending" msgid="3245653681008218030">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‎‎‏‏‏‏‏‎‏‎‏‏‏‎‎Sending…‎‏‎‎‏‎"</string>
+    <string name="launchBrowserDefault" msgid="2057951947297614725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎Launch Browser?‎‏‎‎‏‎"</string>
+    <string name="SetupCallDefault" msgid="5834948469253758575">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎Accept call?‎‏‎‎‏‎"</string>
+    <string name="activity_resolver_use_always" msgid="8017770747801494933">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‎‏‎Always‎‏‎‎‏‎"</string>
+    <string name="activity_resolver_use_once" msgid="2404644797149173758">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎Just once‎‏‎‎‏‎"</string>
+    <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‏‎%1$s doesn\'t support work profile‎‏‎‎‏‎"</string>
+    <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‎Tablet‎‏‎‎‏‎"</string>
+    <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‎‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎TV‎‏‎‎‏‎"</string>
+    <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‎‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎Phone‎‏‎‎‏‎"</string>
+    <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‎Headphones‎‏‎‎‏‎"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎Dock speakers‎‏‎‎‏‎"</string>
+    <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‏‏‎HDMI‎‏‎‎‏‎"</string>
+    <string name="default_audio_route_category_name" msgid="3722811174003886946">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎System‎‏‎‎‏‎"</string>
+    <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎Bluetooth audio‎‏‎‎‏‎"</string>
+    <string name="wireless_display_route_description" msgid="9070346425023979651">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‎Wireless display‎‏‎‎‏‎"</string>
+    <string name="media_route_button_content_description" msgid="591703006349356016">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‎Cast‎‏‎‎‏‎"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‎‎Connect to device‎‏‎‎‏‎"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‎Cast screen to device‎‏‎‎‏‎"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎Searching for devices…‎‏‎‎‏‎"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‏‎‏‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‏‎‎‎Settings‎‏‎‎‏‎"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‎Disconnect‎‏‎‎‏‎"</string>
+    <string name="media_route_status_scanning" msgid="7279908761758293783">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‏‏‎Scanning...‎‏‎‎‏‎"</string>
+    <string name="media_route_status_connecting" msgid="6422571716007825440">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‎Connecting...‎‏‎‎‏‎"</string>
+    <string name="media_route_status_available" msgid="6983258067194649391">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎Available‎‏‎‎‏‎"</string>
+    <string name="media_route_status_not_available" msgid="6739899962681886401">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‏‎Not available‎‏‎‎‏‎"</string>
+    <string name="media_route_status_in_use" msgid="4533786031090198063">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎In use‎‏‎‎‏‎"</string>
+    <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎Built-in Screen‎‏‎‎‏‎"</string>
+    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎‎‎‏‎‎‎‏‏‏‎‏‎HDMI Screen‎‏‎‎‏‎"</string>
+    <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‏‎‎‏‏‎‏‏‎‎‎Overlay #‎‏‎‎‏‏‎<xliff:g id="ID">%1$d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎: ‎‏‎‎‏‏‎<xliff:g id="WIDTH">%2$d</xliff:g>‎‏‎‎‏‏‏‎x‎‏‎‎‏‏‎<xliff:g id="HEIGHT">%3$d</xliff:g>‎‏‎‎‏‏‏‎, ‎‏‎‎‏‏‎<xliff:g id="DPI">%4$d</xliff:g>‎‏‎‎‏‏‏‎ dpi‎‏‎‎‏‎"</string>
+    <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‎‎‎‎‎, secure‎‏‎‎‏‎"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎Forgot Pattern‎‏‎‎‏‎"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‎‎‏‎‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎Wrong Pattern‎‏‎‎‏‎"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‏‎Wrong Password‎‏‎‎‏‎"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎Wrong PIN‎‏‎‎‏‎"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‎‏‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‎‎‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%1$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‏‎‎‎Draw your pattern‎‏‎‎‏‎"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‎‎‏‏‎Enter SIM PIN‎‏‎‎‏‎"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‎Enter PIN‎‏‎‎‏‎"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‏‏‎Enter Password‎‏‎‎‏‎"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎SIM is now disabled. Enter PUK code to continue. Contact carrier for details.‎‏‎‎‏‎"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‎‎‎Enter desired PIN code‎‏‎‎‏‎"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‏‎‎‎‎Confirm desired PIN code‎‏‎‎‏‎"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‏‎‎‏‏‏‏‎‎‎‏‎‎Unlocking SIM card…‎‏‎‎‏‎"</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎Incorrect PIN code.‎‏‎‎‏‎"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎‎‎‏‎Type a PIN that is 4 to 8 numbers.‎‏‎‎‏‎"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‎‎‎PUK code should be 8 numbers.‎‏‎‎‏‎"</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎Re-enter the correct PUK code. Repeated attempts will permanently disable the SIM.‎‏‎‎‏‎"</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‎PIN codes does not match‎‏‎‎‏‎"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‎‎‎‎‏‎‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎Too many pattern attempts‎‏‎‎‏‎"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎To unlock, sign in with your Google account.‎‏‎‎‏‎"</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‎‎‎Username (email)‎‏‎‎‏‎"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎Password‎‏‎‎‏‎"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎Sign in‎‏‎‎‏‎"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎Invalid username or password.‎‏‎‎‏‎"</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‏‎‎Forgot your username or password?‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Visit ‎‏‎‎‏‏‎"<b>"‎‏‎‎‏‏‏‎google.com/accounts/recovery‎‏‎‎‏‏‎"</b>"‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎‏‏‎Checking account…‎‏‎‎‏‎"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎You have incorrectly typed your PIN ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‏‎You have incorrectly typed your password ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‎You have incorrectly attempted to unlock the tablet ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, the tablet will be reset to factory default and all user data will be lost.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="5621231220154419413">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‎‎‎‎‎‎‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎You have incorrectly attempted to unlock the TV ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, the TV will be reset to factory default and all user data will be lost.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‎‎‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎You have incorrectly attempted to unlock the phone ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, the phone will be reset to factory default and all user data will be lost.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‎‎‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‏‎You have incorrectly attempted to unlock the tablet ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ times. The tablet will now be reset to factory default.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tv" msgid="4987878286750741463">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‏‎‏‏‏‎You have incorrectly attempted to unlock the TV ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ times. The TV will now be reset to factory default.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‏‏‏‏‎‎You have incorrectly attempted to unlock the phone ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ times. The phone will now be reset to factory default.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‎‎‎‏‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‎‎‏‎‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, you will be asked to unlock your tablet using an email account.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_2">%3$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4224651132862313471">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‏‏‏‏‏‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, you will be asked to unlock your TV using an email account.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_2">%3$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, you will be asked to unlock your phone using an email account.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_2">%3$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‎ — ‎‏‎‎‏‎ "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‏‎‏‏‎‏‎‎‎Remove‎‏‎‎‏‎"</string>
+    <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‎‎‎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="8404780875025725199">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‏‏‏‎Use Accessibility Shortcut?‎‏‎‎‏‎"</string>
+    <string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‏‏‎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="disable_accessibility_shortcut" msgid="627625354248453445">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‎Turn off Shortcut‎‏‎‎‏‎"</string>
+    <string name="leave_accessibility_shortcut_on" msgid="7653111894438512680">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‏‎‎‏‎‏‎‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎Use Shortcut‎‏‎‎‏‎"</string>
+    <string name="accessibility_shortcut_enabling_service" msgid="7771852911861522636">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‎Accessibility Shortcut turned ‎‏‎‎‏‏‎<xliff:g id="SERVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ on‎‏‎‎‏‎"</string>
+    <string name="accessibility_shortcut_disabling_service" msgid="2747243438223109821">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‎‏‎Accessibility Shortcut turned ‎‏‎‎‏‏‎<xliff:g id="SERVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ off‎‏‎‎‏‎"</string>
+    <string name="accessibility_button_prompt_text" msgid="4234556536456854251">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎Choose a feature to use when you tap the Accessibility button:‎‏‎‎‏‎"</string>
+    <string name="accessibility_button_instructional_text" msgid="6942300463612999993">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‎‎‏‎To change features, touch &amp; hold the Accessibility button.‎‏‎‎‏‎"</string>
+    <string name="accessibility_magnification_chooser_text" msgid="1227146738764986237">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎Magnification‎‏‎‎‏‎"</string>
+    <string name="user_switched" msgid="3768006783166984410">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‎‎‏‏‎‏‏‎‏‎‎Current user ‎‏‎‎‏‏‎<xliff:g id="NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="user_switching_message" msgid="2871009331809089783">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎Switching to ‎‏‎‎‏‏‎<xliff:g id="NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</string>
+    <string name="user_logging_out_message" msgid="8939524935808875155">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎Logging out ‎‏‎‎‏‏‎<xliff:g id="NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</string>
+    <string name="owner_name" msgid="2716755460376028154">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‎‎Owner‎‏‎‎‏‎"</string>
+    <string name="error_message_title" msgid="4510373083082500195">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‎Error‎‏‎‎‏‎"</string>
+    <string name="error_message_change_not_allowed" msgid="1238035947357923497">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎This change isn\'t allowed by your admin‎‏‎‎‏‎"</string>
+    <string name="app_not_found" msgid="3429141853498927379">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‎‎‏‎‎‏‏‎No application found to handle this action‎‏‎‎‏‎"</string>
+    <string name="revoke" msgid="5404479185228271586">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‎Revoke‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_a0" msgid="1994474252931294172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‎ISO A0‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_a1" msgid="3333060421529791786">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎ISO A1‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_a2" msgid="3097535991925798280">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎ISO A2‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_a3" msgid="3023213259314236123">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎ISO A3‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_a4" msgid="231745325296873764">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‏‎‎‎ISO A4‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_a5" msgid="3484327407340865411">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‎ISO A5‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_a6" msgid="4861908487129577530">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎ISO A6‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_a7" msgid="5890208588072936130">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‎‏‎‎ISO A7‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_a8" msgid="4319425041085816612">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎ISO A8‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_a9" msgid="4882220529506432008">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎ISO A9‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_a10" msgid="2382866026365359391">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‎ISO A10‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_b0" msgid="3651827147402009675">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‏‏‎ISO B0‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_b1" msgid="6072859628278739957">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‎ISO B1‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_b2" msgid="1348731852150380378">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‏‏‎‏‎‎ISO B2‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_b3" msgid="2612510181259261379">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎ISO B3‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_b4" msgid="695151378838115434">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎ISO B4‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_b5" msgid="4863754285582212487">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎ISO B5‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_b6" msgid="5305816292139647241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‎‏‏‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎ISO B6‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_b7" msgid="531673542602786624">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎ISO B7‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_b8" msgid="9164474595708850034">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎ISO B8‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_b9" msgid="282102976764774160">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎ISO B9‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_b10" msgid="4517141714407898976">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎ISO B10‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_c0" msgid="3103521357901591100">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‎‎ISO C0‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_c1" msgid="1231954105985048595">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎ISO C1‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_c2" msgid="927702816980087462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‏‎‎‏‏‎‎ISO C2‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_c3" msgid="835154173518304159">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎ISO C3‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_c4" msgid="5095951985108194011">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‏‏‎ISO C4‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_c5" msgid="1985397450332305739">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎ISO C5‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_c6" msgid="8147421924174693013">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‏‎ISO C6‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_c7" msgid="8993994925276122950">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‎ISO C7‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_c8" msgid="6871178104139598957">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‏‎ISO C8‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_c9" msgid="7983532635227561362">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‏‎‎‏‎‎ISO C9‎‏‎‎‏‎"</string>
+    <string name="mediasize_iso_c10" msgid="5040764293406765584">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‎ISO C10‎‏‎‎‏‎"</string>
+    <string name="mediasize_na_letter" msgid="2841414839888344296">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‎Letter‎‏‎‎‏‎"</string>
+    <string name="mediasize_na_gvrnmt_letter" msgid="5295836838862962809">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‎‎‏‎Government Letter‎‏‎‎‏‎"</string>
+    <string name="mediasize_na_legal" msgid="8621364037680465666">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‎‎‎‎‎‎‏‎‎Legal‎‏‎‎‏‎"</string>
+    <string name="mediasize_na_junior_legal" msgid="3309324162155085904">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‎‎‎Junior Legal‎‏‎‎‏‎"</string>
+    <string name="mediasize_na_ledger" msgid="5567030340509075333">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‎‏‎Ledger‎‏‎‎‏‎"</string>
+    <string name="mediasize_na_tabloid" msgid="4571735038501661757">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‏‎‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎Tabloid‎‏‎‎‏‎"</string>
+    <string name="mediasize_na_index_3x5" msgid="5182901917818625126">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‏‎‎Index Card 3x5‎‏‎‎‏‎"</string>
+    <string name="mediasize_na_index_4x6" msgid="7687620625422312396">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‎Index Card 4x6‎‏‎‎‏‎"</string>
+    <string name="mediasize_na_index_5x8" msgid="8834215284646872800">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎Index Card 5x8‎‏‎‎‏‎"</string>
+    <string name="mediasize_na_monarch" msgid="213639906956550754">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‎‏‎‎Monarch‎‏‎‎‏‎"</string>
+    <string name="mediasize_na_quarto" msgid="835778493593023223">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‏‎‎‏‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‎Quarto‎‏‎‎‏‎"</string>
+    <string name="mediasize_na_foolscap" msgid="1573911237983677138">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎‎‏‎‎Foolscap‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_roc_8k" msgid="3626855847189438896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎ROC 8K‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_roc_16k" msgid="9182191577022943355">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎ROC 16K‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_prc_1" msgid="4793232644980170500">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎PRC 1‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_prc_2" msgid="5404109730975720670">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎PRC 2‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_prc_3" msgid="1335092253339363526">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‏‎‎‎‏‏‎‎PRC 3‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_prc_4" msgid="9167997800486569834">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‎‏‎‎PRC 4‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_prc_5" msgid="845875168823541497">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎PRC 5‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_prc_6" msgid="3220325667692648789">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‎PRC 6‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_prc_7" msgid="1776792138507038527">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎PRC 7‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_prc_8" msgid="1417176642687456692">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎‎PRC 8‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_prc_9" msgid="4785983473123798365">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‏‏‎‏‎PRC 9‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_prc_10" msgid="7847982299391851899">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‎‏‎‎‏‏‎‏‏‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎PRC 10‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_prc_16k" msgid="262793383539980677">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‏‎PRC 16K‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_om_pa_kai" msgid="5256815579447959814">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‎‎Pa Kai‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_om_dai_pa_kai" msgid="7336412963441354407">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎Dai Pa Kai‎‏‎‎‏‎"</string>
+    <string name="mediasize_chinese_om_jurro_ku_kai" msgid="6324465444100490742">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎Jurro Ku Kai‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_jis_b10" msgid="1787262845627694376">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎JIS B10‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_jis_b9" msgid="3336035783663287470">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎JIS B9‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_jis_b8" msgid="6195398299104345731">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎JIS B8‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_jis_b7" msgid="1674621886902828884">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎JIS B7‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_jis_b6" msgid="4170576286062657435">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎JIS B6‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_jis_b5" msgid="4899297958100032533">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎JIS B5‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_jis_b4" msgid="4213158129126666847">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‎‏‏‏‏‏‎JIS B4‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_jis_b3" msgid="8513715307410310696">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎JIS B3‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_jis_b2" msgid="4777690211897131190">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎JIS B2‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_jis_b1" msgid="4608142385457034603">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎JIS B1‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_jis_b0" msgid="7587108366572243991">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‎‎‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‎‎‎‎‎‏‎‏‏‏‎JIS B0‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_jis_exec" msgid="5244075432263649068">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‏‎‎‎JIS Exec‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_chou4" msgid="4941652015032631361">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‎Chou4‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_chou3" msgid="6387319169263957010">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‎‏‎‎Chou3‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_chou2" msgid="1299112025415343982">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎Chou2‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_hagaki" msgid="8070115620644254565">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‎Hagaki‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_oufuku" msgid="6049065587307896564">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎Oufuku‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_kahu" msgid="6872696027560065173">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎Kahu‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_kaku2" msgid="2359077233775455405">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‏‎‏‏‎‏‎Kaku2‎‏‎‎‏‎"</string>
+    <string name="mediasize_japanese_you4" msgid="2091777168747058008">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎You4‎‏‎‎‏‎"</string>
+    <string name="mediasize_unknown_portrait" msgid="3088043641616409762">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎Unknown portrait‎‏‎‎‏‎"</string>
+    <string name="mediasize_unknown_landscape" msgid="4876995327029361552">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‏‎‎‏‏‏‎‏‏‏‎‎‏‎‎‎‎‎Unknown landscape‎‏‎‎‏‎"</string>
+    <string name="write_fail_reason_cancelled" msgid="7091258378121627624">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎Cancelled‎‏‎‎‏‎"</string>
+    <string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‎‎Error writing content‎‏‎‎‏‎"</string>
+    <string name="reason_unknown" msgid="6048913880184628119">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‏‏‏‎unknown‎‏‎‎‏‎"</string>
+    <string name="reason_service_unavailable" msgid="7824008732243903268">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‎Print service not enabled‎‏‎‎‏‎"</string>
+    <string name="print_service_installed_title" msgid="2246317169444081628">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ service installed‎‏‎‎‏‎"</string>
+    <string name="print_service_installed_message" msgid="5897362931070459152">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‎Tap to enable‎‏‎‎‏‎"</string>
+    <string name="restr_pin_enter_admin_pin" msgid="8641662909467236832">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‎Enter admin PIN‎‏‎‎‏‎"</string>
+    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‎Enter PIN‎‏‎‎‏‎"</string>
+    <string name="restr_pin_incorrect" msgid="8571512003955077924">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎‎‎Incorrect‎‏‎‎‏‎"</string>
+    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‏‎‏‎Current PIN‎‏‎‎‏‎"</string>
+    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎New PIN‎‏‎‎‏‎"</string>
+    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎‏‏‏‏‏‏‏‎Confirm new PIN‎‏‎‎‏‎"</string>
+    <string name="restr_pin_create_pin" msgid="8017600000263450337">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎Create a PIN for modifying restrictions‎‏‎‎‏‎"</string>
+    <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‎PINs don\'t match. Try again.‎‏‎‎‏‎"</string>
+    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎PIN is too short. Must be at least 4 digits.‎‏‎‎‏‎"</string>
+    <plurals name="restr_pin_countdown" formatted="false" msgid="9061246974881224688">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎Try again in ‎‏‎‎‏‏‎<xliff:g id="COUNT">%d</xliff:g>‎‏‎‎‏‏‏‎ seconds‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎Try again in 1 second‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="restr_pin_try_later" msgid="973144472490532377">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎Try again later‎‏‎‎‏‎"</string>
+    <string name="immersive_cling_title" msgid="8394201622932303336">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‎‎Viewing full screen‎‏‎‎‏‎"</string>
+    <string name="immersive_cling_description" msgid="3482371193207536040">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎To exit, swipe down from the top.‎‏‎‎‏‎"</string>
+    <string name="immersive_cling_positive" msgid="5016839404568297683">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‏‏‎Got it‎‏‎‎‏‎"</string>
+    <string name="done_label" msgid="2093726099505892398">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‏‏‎‎Done‎‏‎‎‏‎"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎Hours circular slider‎‏‎‎‏‎"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‎Minutes circular slider‎‏‎‎‏‎"</string>
+    <string name="select_hours" msgid="6043079511766008245">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎Select hours‎‏‎‎‏‎"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‎‏‏‏‎Select minutes‎‏‎‎‏‎"</string>
+    <string name="select_day" msgid="7774759604701773332">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎Select month and day‎‏‎‎‏‎"</string>
+    <string name="select_year" msgid="7952052866994196170">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‎Select year‎‏‎‎‏‎"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="KEY">%1$s</xliff:g>‎‏‎‎‏‏‏‎ deleted‎‏‎‎‏‎"</string>
+    <string name="managed_profile_label_badge" msgid="2355652472854327647">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‏‏‏‎Work ‎‏‎‎‏‏‎<xliff:g id="LABEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="managed_profile_label_badge_2" msgid="5048136430082124036">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‎2nd Work ‎‏‎‎‏‏‎<xliff:g id="LABEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="managed_profile_label_badge_3" msgid="2808305070321719040">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‎‎‎‎‎‎‎‎‎3rd Work ‎‏‎‎‏‏‎<xliff:g id="LABEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="lock_to_app_toast" msgid="6820571533009838261">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‎‎‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎‏‎To unpin this screen, touch &amp; hold Back and Overview buttons‎‏‎‎‏‎"</string>
+    <string name="lock_to_app_toast_locked" msgid="7849470948648628704">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‏‎‎‎‏‏‏‏‎‎‎‎‎‎This app can\'t be unpinned‎‏‎‎‏‎"</string>
+    <string name="lock_to_app_start" msgid="6643342070839862795">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‎‏‏‎Screen pinned‎‏‎‎‏‎"</string>
+    <string name="lock_to_app_exit" msgid="8598219838213787430">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‏‏‎‎Screen unpinned‎‏‎‎‏‎"</string>
+    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎‏‎‎Ask for PIN before unpinning‎‏‎‎‏‎"</string>
+    <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‎‏‏‏‏‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎Ask for unlock pattern before unpinning‎‏‎‎‏‎"</string>
+    <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‎Ask for password before unpinning‎‏‎‎‏‎"</string>
+    <string name="package_installed_device_owner" msgid="6875717669960212648">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‎‎Installed by your admin‎‏‎‎‏‎"</string>
+    <string name="package_updated_device_owner" msgid="1847154566357862089">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‎Updated by your admin‎‏‎‎‏‎"</string>
+    <string name="package_deleted_device_owner" msgid="2307122077550236438">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‎‎Deleted by your admin‎‏‎‎‏‎"</string>
+    <string name="battery_saver_description" msgid="1960431123816253034">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‎‏‎‎To help improve battery life, battery saver reduces your device’s performance and limits vibration, location services, and most background data. Email, messaging, and other apps that rely on syncing may not update unless you open them.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Battery saver turns off automatically when your device is charging.‎‏‎‎‏‎"</string>
+    <string name="data_saver_description" msgid="6015391409098303235">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎‎‎‏‏‎To help reduce data usage, Data Saver prevents some apps from sending or receiving data in the background. An app you’re currently using can access data, but may do so less frequently. This may mean, for example, that images don’t display until you tap them.‎‏‎‎‏‎"</string>
+    <string name="data_saver_enable_title" msgid="4674073932722787417">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‎‎‏‎‏‏‎‎‏‎Turn on Data Saver?‎‏‎‎‏‎"</string>
+    <string name="data_saver_enable_button" msgid="7147735965247211818">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎‏‎‎Turn on‎‏‎‎‏‎"</string>
+    <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‎‎For %1$d minutes (until ‎‏‎‎‏‏‎<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‎‎For one minute (until ‎‏‎‎‏‏‎<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="zen_mode_duration_minutes_summary_short" formatted="false" msgid="6830154222366042597">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‏‎‎‏‎‏‎For %1$d min (until ‎‏‎‎‏‏‎<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‏‎‎‏‎‏‎For 1 min (until ‎‏‎‎‏‏‎<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="zen_mode_duration_hours_summary" formatted="false" msgid="8152974162096743862">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‏‎‎For %1$d hours (until ‎‏‎‎‏‏‎<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‏‎‎For one hour (until ‎‏‎‎‏‏‎<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="zen_mode_duration_hours_summary_short" formatted="false" msgid="4787552595253082371">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‎‎‏‏‎For %1$d hr (until ‎‏‎‎‏‏‎<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‎‎‏‏‎For 1 hr (until ‎‏‎‎‏‏‎<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="zen_mode_duration_minutes" formatted="false" msgid="5127407202506485571">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‏‎For %d minutes‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‏‎For one minute‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="zen_mode_duration_minutes_short" formatted="false" msgid="2199350154433426128">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‏‎‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‎For %d min‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‏‎‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‎For 1 min‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="zen_mode_duration_hours" formatted="false" msgid="3938821308277433854">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎For %d hours‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎For one hour‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="zen_mode_duration_hours_short" formatted="false" msgid="6748277774662434217">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎For %d hr‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎For 1 hr‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="zen_mode_until" msgid="7336308492289875088">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎Until ‎‏‎‎‏‏‎<xliff:g id="FORMATTEDTIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="zen_mode_alarm" msgid="9128205721301330797">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‎‏‎Until ‎‏‎‎‏‏‎<xliff:g id="FORMATTEDTIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ (next alarm)‎‏‎‎‏‎"</string>
+    <string name="zen_mode_forever" msgid="1916263162129197274">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‎‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‎‎Until you turn off Do Not Disturb‎‏‎‎‏‎"</string>
+    <string name="zen_mode_forever_dnd" msgid="3792132696572189081">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‎Until you turn off Do Not Disturb‎‏‎‎‏‎"</string>
+    <string name="zen_mode_rule_name_combination" msgid="191109939968076477">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‎‎‏‎‏‎‏‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="FIRST">%1$s</xliff:g>‎‏‎‎‏‏‏‎ / ‎‏‎‎‏‏‎<xliff:g id="REST">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="toolbar_collapse_description" msgid="2821479483960330739">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‏‏‏‎‎‏‏‎Collapse‎‏‎‎‏‎"</string>
+    <string name="zen_mode_feature_name" msgid="5254089399895895004">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‏‏‎‎‎Do not disturb‎‏‎‎‏‎"</string>
+    <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‎‎‏‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎Downtime‎‏‎‎‏‎"</string>
+    <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎Weeknight‎‏‎‎‏‎"</string>
+    <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎‎‎‎‏‎‏‎‎‏‎‏‎‏‏‏‎‎‎Weekend‎‏‎‎‏‎"</string>
+    <string name="zen_mode_default_events_name" msgid="8158334939013085363">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎Event‎‏‎‎‏‎"</string>
+    <string name="muted_by" msgid="6147073845094180001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‎‎‏‎Muted by ‎‏‎‎‏‏‎<xliff:g id="THIRD_PARTY">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="system_error_wipe_data" msgid="6608165524785354962">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎There\'s an internal problem with your device, and it may be unstable until you factory data reset.‎‏‎‎‏‎"</string>
+    <string name="system_error_manufacturer" msgid="8086872414744210668">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‎There\'s an internal problem with your device. Contact your manufacturer for details.‎‏‎‎‏‎"</string>
+    <string name="stk_cc_ussd_to_dial" msgid="5202342984749947872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‎‎‎‎‎‎USSD request is modified to DIAL request.‎‏‎‎‏‎"</string>
+    <string name="stk_cc_ussd_to_ss" msgid="2345360594181405482">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎USSD request is modified to SS request.‎‏‎‎‏‎"</string>
+    <string name="stk_cc_ussd_to_ussd" msgid="7466087659967191653">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‎‏‎‏‎USSD request is modified to new USSD request.‎‏‎‎‏‎"</string>
+    <string name="stk_cc_ss_to_dial" msgid="2151304435775557162">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‎‎SS request is modified to DIAL request.‎‏‎‎‏‎"</string>
+    <string name="stk_cc_ss_to_ussd" msgid="3951862188105305589">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎SS request is modified to USSD request.‎‏‎‎‏‎"</string>
+    <string name="stk_cc_ss_to_ss" msgid="5470768854991452695">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‎‏‎‎‏‎‎‏‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎SS request is modified to new SS request.‎‏‎‎‏‎"</string>
+    <string name="notification_work_profile_content_description" msgid="4600554564103770764">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎‏‏‎‎‎Work profile‎‏‎‎‏‎"</string>
+    <string name="expand_button_content_description_collapsed" msgid="3609784019345534652">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‎‎Expand‎‏‎‎‏‎"</string>
+    <string name="expand_button_content_description_expanded" msgid="8520652707158554895">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎Collapse‎‏‎‎‏‎"</string>
+    <string name="expand_action_accessibility" msgid="5307730695723718254">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‏‏‏‎‎toggle expansion‎‏‎‎‏‎"</string>
+    <string name="usb_midi_peripheral_name" msgid="7221113987741003817">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‎‏‎‎‏‎Android USB Peripheral Port‎‏‎‎‏‎"</string>
+    <string name="usb_midi_peripheral_manufacturer_name" msgid="7176526170008970168">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎Android‎‏‎‎‏‎"</string>
+    <string name="usb_midi_peripheral_product_name" msgid="4971827859165280403">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎USB Peripheral Port‎‏‎‎‏‎"</string>
+    <string name="floating_toolbar_open_overflow_description" msgid="4797287862999444631">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‎More options‎‏‎‎‏‎"</string>
+    <string name="floating_toolbar_close_overflow_description" msgid="559796923090723804">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‎Close overflow‎‏‎‎‏‎"</string>
+    <string name="maximize_button_text" msgid="7543285286182446254">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‎‎Maximize‎‏‎‎‏‎"</string>
+    <string name="close_button_text" msgid="3937902162644062866">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‎‏‏‎‎‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‎Close‎‏‎‎‏‎"</string>
+    <string name="notification_messaging_title_template" msgid="3452480118762691020">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="CONVERSATION_TITLE">%1$s</xliff:g>‎‏‎‎‏‏‏‎: ‎‏‎‎‏‏‎<xliff:g id="SENDER_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <plurals name="selected_count" formatted="false" msgid="7187339492915744615">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%1$d</xliff:g>‎‏‎‎‏‏‏‎ selected‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ selected‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="default_notification_channel_label" msgid="5929663562028088222">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎Uncategorized‎‏‎‎‏‎"</string>
+    <string name="importance_from_user" msgid="7318955817386549931">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‎You set the importance of these notifications.‎‏‎‎‏‎"</string>
+    <string name="importance_from_person" msgid="9160133597262938296">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‎‏‎‏‏‏‎‎‎‎This is important because of the people involved.‎‏‎‎‏‎"</string>
+    <string name="user_creation_account_exists" msgid="1942606193570143289">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‏‎Allow ‎‏‎‎‏‏‎<xliff:g id="APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎ to create a new User with ‎‏‎‎‏‏‎<xliff:g id="ACCOUNT">%2$s</xliff:g>‎‏‎‎‏‏‏‎ ?‎‏‎‎‏‎"</string>
+    <string name="user_creation_adding" msgid="4482658054622099197">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎Allow ‎‏‎‎‏‏‎<xliff:g id="APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎ to create a new User with ‎‏‎‎‏‏‎<xliff:g id="ACCOUNT">%2$s</xliff:g>‎‏‎‎‏‏‏‎ (a User with this account already exists) ?‎‏‎‎‏‎"</string>
+    <string name="language_selection_title" msgid="2680677278159281088">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎‎‎‎Add a language‎‏‎‎‏‎"</string>
+    <string name="country_selection_title" msgid="2954859441620215513">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‎‏‎Region preference‎‏‎‎‏‎"</string>
+    <string name="search_language_hint" msgid="7042102592055108574">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‎‏‏‏‏‎‎Type language name‎‏‎‎‏‎"</string>
+    <string name="language_picker_section_suggested" msgid="8414489646861640885">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‎‏‎Suggested‎‏‎‎‏‎"</string>
+    <string name="language_picker_section_all" msgid="3097279199511617537">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‏‎All languages‎‏‎‎‏‎"</string>
+    <string name="region_picker_section_all" msgid="8966316787153001779">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎‏‏‎‎‏‏‎All regions‎‏‎‎‏‎"</string>
+    <string name="locale_search_menu" msgid="2560710726687249178">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎Search‎‏‎‎‏‎"</string>
+    <string name="work_mode_off_title" msgid="2615362773958585967">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‎‎‎‎‎‏‏‎‎‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‏‎Turn on work mode?‎‏‎‎‏‎"</string>
+    <string name="work_mode_off_message" msgid="2961559609199223594">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‎This will turn on your work profile, including apps, background sync, and related features‎‏‎‎‏‎"</string>
+    <string name="work_mode_turn_on" msgid="2062544985670564875">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎‏‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎Turn on‎‏‎‎‏‎"</string>
+    <string name="new_sms_notification_title" msgid="8442817549127555977">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‎‏‎‎‏‎You have new messages‎‏‎‎‏‎"</string>
+    <string name="new_sms_notification_content" msgid="7002938807812083463">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎Open SMS app to view‎‏‎‎‏‎"</string>
+    <string name="user_encrypted_title" msgid="9054897468831672082">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‏‎‎‏‎‎Some functionality may be limited‎‏‎‎‏‎"</string>
+    <string name="user_encrypted_message" msgid="4923292604515744267">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎Tap to unlock‎‏‎‎‏‎"</string>
+    <string name="user_encrypted_detail" msgid="5708447464349420392">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‎‎‎‎User data locked‎‏‎‎‏‎"</string>
+    <string name="profile_encrypted_detail" msgid="3700965619978314974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎Work profile locked‎‏‎‎‏‎"</string>
+    <string name="profile_encrypted_message" msgid="6964994232310195874">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‎‎Tap to unlock work profile‎‏‎‎‏‎"</string>
+    <string name="usb_mtp_launch_notification_title" msgid="8359219638312208932">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‏‎‎‏‎‎‎Connected to ‎‏‎‎‏‏‎<xliff:g id="PRODUCT_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="usb_mtp_launch_notification_description" msgid="8541876176425411358">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‎‎Tap to view files‎‏‎‎‏‎"</string>
+    <string name="pin_target" msgid="3052256031352291362">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎Pin‎‏‎‎‏‎"</string>
+    <string name="unpin_target" msgid="3556545602439143442">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‎‏‎‎Unpin‎‏‎‎‏‎"</string>
+    <string name="app_info" msgid="6856026610594615344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎‎App info‎‏‎‎‏‎"</string>
+    <string name="negative_duration" msgid="5688706061127375131">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‏‏‎−‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="demo_starting_message" msgid="5268556852031489931">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‏‎Starting demo…‎‏‎‎‏‎"</string>
+    <string name="demo_restarting_message" msgid="952118052531642451">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‎‎‎‎‏‎‏‎‎‏‏‎Resetting device…‎‏‎‎‏‎"</string>
+    <string name="suspended_widget_accessibility" msgid="6712143096475264190">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎Disabled ‎‏‎‎‏‏‎<xliff:g id="LABEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="conference_call" msgid="3751093130790472426">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎‏‎‎Conference Call‎‏‎‎‏‎"</string>
+    <string name="tooltip_popup_title" msgid="5253721848739260181">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‎Tooltip‎‏‎‎‏‎"</string>
+    <string name="app_category_game" msgid="5431836943981492993">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‎‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‏‎Games‎‏‎‎‏‎"</string>
+    <string name="app_category_audio" msgid="1659853108734301647">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‏‏‎Music &amp; Audio‎‏‎‎‏‎"</string>
+    <string name="app_category_video" msgid="2728726078629384196">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎‎‏‎‎‏‎‎‎‎‎‎‎‎‎‏‎‎‎Movies &amp; Video‎‏‎‎‏‎"</string>
+    <string name="app_category_image" msgid="4867854544519846048">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‎‎Photos &amp; Images‎‏‎‎‏‎"</string>
+    <string name="app_category_social" msgid="5842783057834965912">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎Social &amp; Communication‎‏‎‎‏‎"</string>
+    <string name="app_category_news" msgid="7496506240743986873">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎News &amp; Magazines‎‏‎‎‏‎"</string>
+    <string name="app_category_maps" msgid="5878491404538024367">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‏‏‎Maps &amp; Navigation‎‏‎‎‏‎"</string>
+    <string name="app_category_productivity" msgid="3742083261781538852">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎Productivity‎‏‎‎‏‎"</string>
+    <string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎Device storage‎‏‎‎‏‎"</string>
+    <string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‎USB debugging‎‏‎‎‏‎"</string>
+    <string name="time_picker_hour_label" msgid="2979075098868106450">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‎‏‎‎hour‎‏‎‎‏‎"</string>
+    <string name="time_picker_minute_label" msgid="5168864173796598399">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‎minute‎‏‎‎‏‎"</string>
+    <string name="time_picker_header_text" msgid="143536825321922567">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‎‎‎‏‏‏‎Set time‎‏‎‎‏‎"</string>
+    <string name="time_picker_input_error" msgid="7574999942502513765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎Enter a valid time‎‏‎‎‏‎"</string>
+    <string name="time_picker_prompt_label" msgid="7588093983899966783">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎Type in time‎‏‎‎‏‎"</string>
+    <string name="time_picker_text_input_mode_description" msgid="4148166758173708199">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‎Switch to text input mode for the time input.‎‏‎‎‏‎"</string>
+    <string name="time_picker_radial_mode_description" msgid="4953403779779557198">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎Switch to clock mode for the time input.‎‏‎‎‏‎"</string>
+    <string name="autofill_picker_accessibility_title" msgid="8469043291648711535">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‏‎Autofill options‎‏‎‎‏‎"</string>
+    <string name="autofill_save_accessibility_title" msgid="7244365268417107822">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎Save for Autofill‎‏‎‎‏‎"</string>
+    <string name="autofill_error_cannot_autofill" msgid="7402758580060110371">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‏‎‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎Contents can’t be autofilled‎‏‎‎‏‎"</string>
+    <string name="autofill_picker_no_suggestions" msgid="3908514303773350735">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‎‏‎‎‏‏‏‏‎No autofill suggestions‎‏‎‎‏‎"</string>
+    <plurals name="autofill_picker_some_suggestions" formatted="false" msgid="5506565809835815274">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT">%1$s</xliff:g>‎‏‎‎‏‏‏‎ autofill suggestions‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎One autofill suggestion‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="autofill_save_title" msgid="3345527308992082601">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‏‎‎‏‎Save to &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="LABEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/b&gt;?‎‏‎‎‏‎"</string>
+    <string name="autofill_save_title_with_type" msgid="8637809388029313305">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‏‎Save ‎‏‎‎‏‏‎<xliff:g id="TYPE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ to &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="LABEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/b&gt;?‎‏‎‎‏‎"</string>
+    <string name="autofill_save_title_with_2types" msgid="5214035651838265325">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎Save ‎‏‎‎‏‏‎<xliff:g id="TYPE_0">%1$s</xliff:g>‎‏‎‎‏‏‏‎ and ‎‏‎‎‏‏‎<xliff:g id="TYPE_1">%2$s</xliff:g>‎‏‎‎‏‏‏‎ to &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="LABEL">%3$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/b&gt;?‎‏‎‎‏‎"</string>
+    <string name="autofill_save_title_with_3types" msgid="6943161834231458441">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎Save ‎‏‎‎‏‏‎<xliff:g id="TYPE_0">%1$s</xliff:g>‎‏‎‎‏‏‏‎, ‎‏‎‎‏‏‎<xliff:g id="TYPE_1">%2$s</xliff:g>‎‏‎‎‏‏‏‎, and ‎‏‎‎‏‏‎<xliff:g id="TYPE_2">%3$s</xliff:g>‎‏‎‎‏‏‏‎ to &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="LABEL">%4$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/b&gt;?‎‏‎‎‏‎"</string>
+    <string name="autofill_save_yes" msgid="6398026094049005921">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‎‎‎‏‎Save‎‏‎‎‏‎"</string>
+    <string name="autofill_save_no" msgid="2625132258725581787">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎No thanks‎‏‎‎‏‎"</string>
+    <string name="autofill_save_type_password" msgid="5288448918465971568">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‎password‎‏‎‎‏‎"</string>
+    <string name="autofill_save_type_address" msgid="4936707762193009542">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‎‏‏‎‎address‎‏‎‎‏‎"</string>
+    <string name="autofill_save_type_credit_card" msgid="7127694776265563071">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎credit card‎‏‎‎‏‎"</string>
+    <string name="autofill_save_type_username" msgid="239040540379769562">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎username‎‏‎‎‏‎"</string>
+    <string name="autofill_save_type_email_address" msgid="5752949432129262174">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‏‏‎‎email address‎‏‎‎‏‎"</string>
+    <string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎Stay calm and seek shelter nearby.‎‏‎‎‏‎"</string>
+    <string name="etws_primary_default_message_tsunami" msgid="1887685943498368548">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‏‎‎‎Evacuate immediately from coastal regions and riverside areas to a safer place such as high ground.‎‏‎‎‏‎"</string>
+    <string name="etws_primary_default_message_earthquake_and_tsunami" msgid="998797956848445862">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎Stay calm and seek shelter nearby.‎‏‎‎‏‎"</string>
+    <string name="etws_primary_default_message_test" msgid="2709597093560037455">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎Emergency messages test‎‏‎‎‏‎"</string>
+    <string name="notification_reply_button_accessibility" msgid="3621714652387814344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎Reply‎‏‎‎‏‎"</string>
+    <string name="etws_primary_default_message_others" msgid="6293148756130398971"></string>
+    <string name="mmcc_authentication_reject" msgid="7729819349669603406">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‎SIM not allowed‎‏‎‎‏‎"</string>
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‏‎‎‏‏‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‎SIM not provisioned‎‏‎‎‏‎"</string>
+    <string name="mmcc_illegal_ms" msgid="2769452751852211112">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎SIM not allowed‎‏‎‎‏‎"</string>
+    <string name="mmcc_illegal_me" msgid="4438696681169345015">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‎Phone not allowed‎‏‎‎‏‎"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‎‏‎Popup Window‎‏‎‎‏‎"</string>
+</resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 9e20e50..1c6f5ce 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> días"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> día <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> día <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Sin título&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(No hay número de teléfono)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Desconocido"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Sin servicio de voz/emergencia"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"La red móvil de tu ubicación no ofrece este servicio de forma temporal"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"No se puede establecer conexión con la red"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Para mejorar la recepción, cambia el tipo de red. Selecciona Sistema &gt; Internet y red &gt; Redes móviles &gt; Tipo de red preferido."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Para mejorar la recepción, cambia el tipo de red. Selecciona Configuración &gt; Internet y red &gt; Redes móviles &gt; Tipo de red preferido."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Las llamadas con Wi-Fi están activadas"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Las llamadas de emergencia requieren una red móvil."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alertas"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Desvío de llamada"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Modo de devolución de llamada de emergencia"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Alertas de datos móviles"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Estado de datos móviles"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Mensajes SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mensajes del buzón de voz"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Llamada con Wi-Fi"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM no provista"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM no permitida"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Teléfono no permitido"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Ventana emergente"</string>
 </resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 9a7d932..940f5e4 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> días"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> día <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> día <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Sin título&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Sin número de teléfono)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Desconocido"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Sin servicio de emergencia ni de voz"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"La red móvil disponible en tu ubicación no ofrece esta opción de forma temporal"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"No se puede establecer conexión con la red"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Para mejorar la recepción, prueba a cambiar el tipo de red seleccionado en Sistema &gt; Red e Internet &gt; Redes móviles &gt; Tipo de red preferido."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Para mejorar la recepción, prueba a cambiar el tipo seleccionado en Ajustes &gt; Red e Internet &gt; Redes móviles &gt; Tipo de red preferido."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"La llamada por Wi‑Fi está activada"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Necesitas conectarte a una red móvil para hacer llamadas de emergencia."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alertas"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Desvío de llamada"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Modo de devolución de llamada de emergencia"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Alertas de datos móviles"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Estado de los datos móviles"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Mensajes SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mensajes de voz"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Llamada por Wi-Fi"</string>
@@ -289,7 +275,7 @@
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"hacer y administrar llamadas telefónicas"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Sensores corporales"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"acceder a datos de sensores de tus constantes vitales"</string>
-    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Recuperar el contenido de la ventana"</string>
+    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Comprobar el contenido de la ventana"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspecciona el contenido de una ventana con la que estés interactuando."</string>
     <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Activar la exploración táctil"</string>
     <string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"Los elementos que tocas se dicen en voz alta y se puede explorar la pantalla mediante gestos."</string>
@@ -451,7 +437,7 @@
     <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Permite que la aplicación se conecte a puntos de acceso Wi-Fi y se desconecte de ellos y que realice cambios en la configuración de redes Wi-Fi del dispositivo."</string>
     <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"permitir recepción multidifusión Wi-Fi"</string>
     <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"Permite que la aplicación reciba paquetes enviados a todos los dispositivos de una red Wi-Fi que utilicen direcciones de multidifusión, no solo al tablet. Utiliza más batería que el modo de no multidifusión."</string>
-    <string name="permdesc_changeWifiMulticastState" product="tv" msgid="9031975661145014160">"Permite que la aplicación reciba paquetes enviados a todos los dispositivos a través de una red Wi-Fi mediante direcciones de multidifusión, no solo la TV. Consume más energía que el modo sin multidifusión."</string>
+    <string name="permdesc_changeWifiMulticastState" product="tv" msgid="9031975661145014160">"Permite que la aplicación reciba paquetes enviados a todos los dispositivos a través de una red Wi-Fi mediante direcciones de multidifusión, no solo la TV. Consume más batería que el modo sin multidifusión."</string>
     <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"Permite que la aplicación reciba paquetes enviados a todos los dispositivos de una red Wi-Fi que utilicen direcciones de multidifusión, no solo al teléfono. Utiliza más batería que el modo de no multidifusión."</string>
     <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"acceder a los ajustes de Bluetooth"</string>
     <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Permite que la aplicación configure el tablet Bluetooth local y que detecte dispositivos remotos y se vincule con ellos."</string>
@@ -1484,7 +1470,7 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Has fallado <xliff:g id="NUMBER_0">%1$d</xliff:g> veces al dibujar el patrón de desbloqueo. Si fallas otras <xliff:g id="NUMBER_1">%2$d</xliff:g> veces, deberás usar una cuenta de correo electrónico para desbloquear el teléfono.\n\n Inténtalo de nuevo en <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Quitar"</string>
-    <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"¿Quieres subir el volumen por encima del nivel recomendado?\n\nEscuchar sonidos a alto volumen durante largos períodos de tiempo puede dañar tus oídos."</string>
+    <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"¿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="8404780875025725199">"¿Utilizar acceso directo de accesibilidad?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"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>
     <string name="disable_accessibility_shortcut" msgid="627625354248453445">"Desactivar acceso directo"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM no proporcionada"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM no compatible"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Teléfono no compatible"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Ventana emergente"</string>
 </resources>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 1b354d9..4009254 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> päeva"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> päev <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> päev <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Pealkirjata&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Telefoninumbrit pole)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Teadmata"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Häälkõned/hädaabiteenus pole saadaval"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Teie asukoha mobiilsidevõrk seda teenust ajutiselt ei paku"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Võrguga ei saa ühendust"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Vastuvõtu parandamiseks muutke valitud tüüpi jaotises Süsteem &gt; Võrk ja Internet &gt; Mobiilsidevõrgud &gt; Eelistatud võrgutüüp."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Vastuvõtu parandamiseks muutke valitud tüüpi jaotises Seaded &gt; Võrk ja Internet &gt; Mobiilsidevõrgud &gt; Eelistatud võrgutüüp."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"WiFi-kõned on aktiivsed"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Hädaabikõnede jaoks on vajalik mobiilsidevõrk."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Teatised"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Kõnede suunamine"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Hädaolukorra tagasihelistusrežiim"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Mobiilse andmeside teatised"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Mobiilse andmeside olek"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS-sõnumid"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Kõnepostisõnumid"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"WiFi-kõned"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM-kaart on ettevalmistamata"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM-kaart pole lubatud"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefon pole lubatud"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Hüpikaken"</string>
 </resources>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index ac06b2a..2cbaa3d6 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> egun"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> egun <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> egun <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> m"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> m"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> m"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> m <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> m <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Izengabea&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Ez dago telefono-zenbakirik)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Ezezaguna"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Ez dago ahots- edo larrialdi-deien zerbitzurik"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Zauden tokiko sare mugikorrak ez du eskaintzen aukera hori une honetan"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Ezin da konektatu sarera"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Seinalea hobea izan dadin, aldatu hautatutako sare mota Sistema &gt; Sareak eta Internet &gt; Sare mugikorrak &gt; Sare mota hobetsia atalean."</string>
-    <string name="notification_channel_network_alert" msgid="4427736684338074967">"Abisuak"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Seinalea hobea izan dadin, aldatu sare mota Ezarpenak &gt; Sareak eta Internet &gt; Sare mugikorrak &gt; Sare mota hobetsia atalean."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi bidezko deiak aktibo daude"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Sare mugikorrera konektatuta egon behar da larrialdi-deiak egin ahal izateko."</string>
+    <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alertak"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Dei-desbideratzea"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Larrialdi-deiak soilik jasotzeko modua"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Datu mugikorren abisuak"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Datu-konexioaren egoera"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS mezuak"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Erantzungailuko mezuak"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi bidezko deiak"</string>
@@ -259,7 +245,7 @@
     <string name="notification_channel_network_available" msgid="4531717914138179517">"Sare bat erabilgarri dago"</string>
     <string name="notification_channel_vpn" msgid="8330103431055860618">"VPN egoera"</string>
     <string name="notification_channel_device_admin" msgid="1568154104368069249">"Gailuen administrazioa"</string>
-    <string name="notification_channel_alerts" msgid="4496839309318519037">"Abisuak"</string>
+    <string name="notification_channel_alerts" msgid="4496839309318519037">"Alertak"</string>
     <string name="notification_channel_retail_mode" msgid="6088920674914038779">"Saltzaileentzako demoa"</string>
     <string name="notification_channel_usb" msgid="9006850475328924681">"USB konexioa"</string>
     <string name="notification_channel_foreground_service" msgid="3931987440602669158">"Bateria kontsumitzen ari diren aplikazioak"</string>
@@ -292,7 +278,7 @@
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Eskuratu leihoko edukia"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Arakatu irekita daukazun leihoko edukia."</string>
     <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Aktibatu \"Arakatu ukituta\""</string>
-    <string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"Sakatutako elementuak ozen esango dira eta pantaila keinu bidez arakatu ahal izango da."</string>
+    <string name="capability_desc_canRequestTouchExploration" msgid="7543249041581408313">"Sakatutako elementuak ozen irakurriko dira eta pantaila keinu bidez arakatu ahal izango da."</string>
     <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Behatu idazten duzun testua"</string>
     <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Ez da salbuespenik egiten datu pertsonalekin, hala nola, kreditu-txartelen zenbakiekin eta pasahitzekin."</string>
     <string name="capability_title_canControlMagnification" msgid="3593493281059424855">"Kontrolatu pantailaren zoom-maila"</string>
@@ -434,9 +420,9 @@
     <string name="permdesc_setTimeZone" product="tv" msgid="888864653946175955">"Telebistaren ordu-zona aldatzea baimentzen die aplikazioei."</string>
     <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Telefonoaren ordu-zona aldatzea baimentzen die aplikazioei."</string>
     <string name="permlab_getAccounts" msgid="1086795467760122114">"bilatu gailuko kontuak"</string>
-    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"Tabletak ezagutzen dituen kontuen zerrenda lortzeko baimena ematen die aplikazioei. Instalatuta dituzun aplikazioek sortutako kontuak har daitezke barne."</string>
+    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"Tabletak ezagutzen dituen kontuen zerrenda lortzeko baimena ematen die aplikazioei. Instalatuta dituzun aplikazioek sortutako kontuak har daitezke barnean."</string>
     <string name="permdesc_getAccounts" product="tv" msgid="4190633395633907543">"Telebistak ezagutzen dituen kontuen zerrenda lortzea baimentzen die aplikazioei. Instalatuta dituzun aplikazioek sortutako kontuak sar daitezke."</string>
-    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"Telefonoak ezagutzen dituen kontuen zerrenda lortzeko baimena ematen die aplikazioei. Instalatuta dituzun aplikazioek sortutako kontuak har daitezke barne."</string>
+    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"Telefonoak ezagutzen dituen kontuen zerrenda lortzeko baimena ematen die aplikazioei. Instalatuta dituzun aplikazioek sortutako kontuak har daitezke barnean."</string>
     <string name="permlab_accessNetworkState" msgid="4951027964348974773">"ikusi sareko konexioak"</string>
     <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"Sareko konexioei buruzko informazioa ikusteko baimena ematen die aplikazioei; adibidez, zer sare dauden eta zeintzuk dauden konektatuta."</string>
     <string name="permlab_createNetworkSockets" msgid="7934516631384168107">"izan sarerako sarbide osoa"</string>
@@ -1122,7 +1108,7 @@
     <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> Internetera konektatzeko gauza ez denean, <xliff:g id="NEW_NETWORK">%1$s</xliff:g> erabiltzen du gailuak. Agian kostuak ordaindu beharko dituzu."</string>
     <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> erabiltzen ari zinen, baina <xliff:g id="NEW_NETWORK">%2$s</xliff:g> erabiltzen ari zara orain"</string>
   <string-array name="network_switch_type_name">
-    <item msgid="3979506840912951943">"datu mugikorrak"</item>
+    <item msgid="3979506840912951943">"datu-konexioa"</item>
     <item msgid="75483255295529161">"Wi-Fi"</item>
     <item msgid="6862614801537202646">"Bluetooth"</item>
     <item msgid="5447331121797802871">"Ethernet"</item>
@@ -1382,7 +1368,7 @@
     <string name="storage_usb_drive_label" msgid="4501418548927759953">"<xliff:g id="MANUFACTURER">%s</xliff:g> USB unitatea"</string>
     <string name="storage_usb" msgid="3017954059538517278">"USB memoria"</string>
     <string name="extract_edit_menu_button" msgid="8940478730496610137">"Editatu"</string>
-    <string name="data_usage_warning_title" msgid="3620440638180218181">"Datuen erabilerari buruzko abisua"</string>
+    <string name="data_usage_warning_title" msgid="3620440638180218181">"Datuen erabilerari buruzko alerta"</string>
     <string name="data_usage_warning_body" msgid="6660692274311972007">"Sakatu erabilera eta ezarpenak ikusteko."</string>
     <string name="data_usage_3g_limit_title" msgid="4361523876818447683">"2-3 GB-ko mugara iritsi zara"</string>
     <string name="data_usage_4g_limit_title" msgid="4609566827219442376">"4 GB-ko mugara iritsi zara"</string>
@@ -1391,7 +1377,7 @@
     <string name="data_usage_limit_body" msgid="291731708279614081">"Datuen erab. etenda zikloa amaitu arte"</string>
     <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G datu-muga gainditu da"</string>
     <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G datu-muga gainditu da"</string>
-    <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Datu mugikorren muga gainditu da"</string>
+    <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Datu-konexioaren muga gainditu da"</string>
     <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Wi-Fi datuen muga gainditu da"</string>
     <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"Zehaztutako muga baino <xliff:g id="SIZE">%s</xliff:g> gehiago."</string>
     <string name="data_usage_restricted_title" msgid="5965157361036321914">"Atzeko planoko datuak murriztuta"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Ez dago SIM txartelik"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Ez da onartzen SIM txartela"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Ez da onartzen telefonoa"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Leiho gainerakorra"</string>
 </resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index f66ea6c..f7e6353 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"بایت"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"کیلوبایت"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"مگابایت"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"گیگابایت"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"ترابایت"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"پتابایت"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> ‏<xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> روز"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> روز و <xliff:g id="HOURS">%2$d</xliff:g> ساعت"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> روز و <xliff:g id="HOURS">%2$d</xliff:g> ساعت"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ساعت"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ساعت و <xliff:g id="MINUTES">%2$d</xliff:g> دقیقه"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ساعت و <xliff:g id="MINUTES">%2$d</xliff:g> دقیقه"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> دقیقه"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> دقیقه"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> دقیقه و <xliff:g id="SECONDS">%2$d</xliff:g> ثانیه"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> دقیقه و <xliff:g id="SECONDS">%2$d</xliff:g> ثانیه"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> ثانیه"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> ثانیه"</string>
     <string name="untitled" msgid="4638956954852782576">"‏&lt;بدون عنوان&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(بدون شماره تلفن)"</string>
     <string name="unknownName" msgid="6867811765370350269">"نامشخص"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"سرویس صوتی/اضطراری دردسترس نیست"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"موقتاً توسط شبکه داده دستگاه همراه در مکان شما ارائه نمی‌شود"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"شبکه دردسترس نیست"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"برای بهبود دریافت، نوع شبکه‌ای را که انتخاب کرده‌اید در «سیستم» &gt; «شبکه‌ و اینترنت» &gt; «شبکه‌های تلفن همراه» &gt; «نوع شبکه ترجیحی» تغییر دهید."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"برای بهبود دریافت، نوع شبکه انتخاب‌شده را در «تنظیمات &gt; شبکه‌ و اینترنت &gt; شبکه‌های تلفن همراه &gt; نوع شبکه ترجیحی» تغییر دهید."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"‏تماس ازطریق Wi-Fi فعال است"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"برای انجام تماس‌های اضطراری به شبکه تلفن همراه نیاز دارید."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"هشدارها"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"بازارسال تماس"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"حالت پاسخ تماس اضطراری"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"هشدارهای داده تلفن همراه"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"وضعیت داده تلفن همراه"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"پیامک‌ها"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"پیام‌های پست صوتی"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"‏تماس ازطریق Wi-Fi"</string>
@@ -455,7 +441,7 @@
     <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"‏به برنامه اجازه می‌دهد به دریافت بسته‌های ارسالی به همه دستگاه‌های موجود در شبکه Wi-Fi با استفاده از آدرس‌های پخش چندگانه و نه فقط به تلفن شما بپردازند. این از توان مصرف بیشتری نسبت به حالت پخش غیرچندگانه استفاده می‌کند."</string>
     <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"دسترسی به تنظیمات بلوتوث"</string>
     <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"‏به برنامه اجازه می‎دهد تا رایانهٔ لوحی بلوتوث محلی را پیکربندی کرده، دستگاه‌های راه دور را شناسایی کرده و با آن‌ها مرتبط‌سازی شود."</string>
-    <string name="permdesc_bluetoothAdmin" product="tv" msgid="3373125682645601429">"به برنامه اجازه می‌دهد تا تلویزیون بلوتوث محلی را پیکربندی کند و دستگاه‌های از راه دور را شناسایی کند و با آنها مرتبط شود."</string>
+    <string name="permdesc_bluetoothAdmin" product="tv" msgid="3373125682645601429">"به برنامه اجازه می‌دهد تا تلویزیون بلوتوث محلی را پیکربندی کند و دستگاه‌های ازراه‌دور را شناسایی کند و با آنها مرتبط شود."</string>
     <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"‏به برنامه اجازه می‎دهد تا تلفن بلوتوث محلی را پیکربندی کند و دستگاه‌های راه دور را پیدا کند و با آن‌ها مرتبط‌سازی شود."</string>
     <string name="permlab_accessWimaxState" msgid="4195907010610205703">"‏اتصال و قطع اتصال از WiMAX"</string>
     <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"به برنامه امکان می‌دهد فعال بودن وایمکس و اطلاعات مربوط به هر یک از شبکه‌های وایمکس متصل را مشخص کند."</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"سیم‌کارت مجوز لازم را ندارد"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"سیم‌کارت مجاز نیست"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"تلفن مجاز نیست"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"پنجره بازشو"</string>
 </resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 41df8b8..8bd46b0 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"t"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kt"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"Mt"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"Gt"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"Tt"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"Pt"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> päivää"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> päivä <xliff:g id="HOURS">%2$d</xliff:g> t"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> päivä <xliff:g id="HOURS">%2$d</xliff:g> t"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> t"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> t <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> t <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Nimetön&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Ei puhelinnumeroa)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Tuntematon"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Ei ääni- tai hätäpuheluja"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Sijaintisi mobiiliverkko ei tarjoa tätä tilapäisesti."</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Ei yhteyttä verkkoon"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Voit yrittää parantaa kuuluvuutta vaihtamalla tyypin asetusta. Valitse Järjestelmä &gt; Verkko &gt; Internet &gt; Mobiiliverkot &gt; Ensisijainen verkko."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Voit yrittää parantaa kuuluvuutta vaihtamalla tyypin asetusta. Valitse Asetukset &gt; Verkko &gt; Internet &gt; Mobiiliverkot &gt; Ensisijainen verkko."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi-puhelut käytössä"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Hätäpuheluihin vaaditaan mobiiliverkko."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Ilmoitukset"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Soitonsiirto"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Hätäpuhelujen takaisinsoittotila"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Mobiilidatailmoitukset"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Mobiilidatan tila"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Tekstiviestit"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Vastaajaviestit"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-puhelut"</string>
@@ -877,7 +863,7 @@
     <string name="preposition_for_year" msgid="5040395640711867177">"vuonna <xliff:g id="YEAR">%s</xliff:g>"</string>
     <string name="day" msgid="8144195776058119424">"päivä"</string>
     <string name="days" msgid="4774547661021344602">"päivää"</string>
-    <string name="hour" msgid="2126771916426189481">"tunti"</string>
+    <string name="hour" msgid="2126771916426189481">"tunnit"</string>
     <string name="hours" msgid="894424005266852993">"tuntia"</string>
     <string name="minute" msgid="9148878657703769868">"min"</string>
     <string name="minutes" msgid="5646001005827034509">"min"</string>
@@ -1744,7 +1730,7 @@
     <string name="app_category_productivity" msgid="3742083261781538852">"Tuottavuus"</string>
     <string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"Laitteen tallennustila"</string>
     <string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"USB-vianetsintä"</string>
-    <string name="time_picker_hour_label" msgid="2979075098868106450">"tunti"</string>
+    <string name="time_picker_hour_label" msgid="2979075098868106450">"tunnit"</string>
     <string name="time_picker_minute_label" msgid="5168864173796598399">"minuutit"</string>
     <string name="time_picker_header_text" msgid="143536825321922567">"Aseta aika"</string>
     <string name="time_picker_input_error" msgid="7574999942502513765">"Anna kelvollinen aika."</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM-kortti ei käyttäjien hallinnassa"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM-kortti estetty"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Puhelin estetty"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Ponnahdusikkuna"</string>
 </resources>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 9f9c447..a1db116 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"o"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"ko"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"Mo"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"Go"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"To"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"Po"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> jours"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> j et <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> j et <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h et <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h et <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min et <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min et <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Sans_titre&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Aucun numéro de téléphone)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Inconnu"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Aucun service vocal ou d\'urgence"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Ce service est temporairement non offert par le réseau cellulaire à l\'endroit où vous êtes"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Impossible de joindre le réseau"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Pour améliorer la réception, essayez de changer le type de réseau sélectionné, sous Système &gt; Réseaux et Internet &gt; Réseaux cellulaires &gt; Type de réseau préféré."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Pour améliorer la réception, essayez de changer le type de réseau sélectionné, sous Paramètres &gt; Réseaux et Internet &gt; Réseaux cellulaires &gt; Type de réseau préféré."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Les appels Wi-Fi sont actifs"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Les appels d\'urgence nécessitent un réseau cellulaire."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alertes"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Transfert d\'appel"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Mode de rappel d\'urgence"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Alertes de données cellulaires"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"État des données cellulaires"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Messages texte"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Messages vocaux"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Appels Wi-Fi"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Carte SIM non configurée"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Carte SIM non autorisée"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Téléphone non autorisé"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Fenêtre contextuelle"</string>
 </resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 6a603ad..b789551 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"octet(s)"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"Ko"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"Mo"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"Go"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"To"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"Po"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> jours"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> j et <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> j et <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h et <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h et <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min et <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min et <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Sans nom&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Aucun numéro de téléphone)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Inconnu"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Aucun service vocal/d\'urgence"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Momentanément non proposé par le réseau mobile à votre position"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Impossible d\'accéder au réseau"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Pour améliorer la réception, essayez de modifier le type sélectionné sous Système &gt; Réseau et Internet &gt; Réseaux mobiles &gt; Type de réseau préféré."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Pour améliorer la réception, essayez de modifier le type sélectionné sous Paramètres &gt; Réseau et Internet &gt; Réseaux mobiles &gt; Type de réseau préféré."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Les appels Wi-Fi sont actifs"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Les appels d\'urgence requièrent un réseau mobile."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alertes"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Transfert d\'appel"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Mode de rappel d\'urgence"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Alertes relatives aux données mobiles"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"État des données mobiles"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Messages vocaux"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Appels Wi-Fi"</string>
@@ -1211,7 +1197,7 @@
     <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"Afficher par-dessus les autres applications"</string>
     <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> est affichée sur les autres applications"</string>
-    <string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> s\'affiche sur autres applis"</string>
+    <string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> se superpose aux autres applis"</string>
     <string name="alert_windows_notification_message" msgid="8917232109522912560">"Si vous ne voulez pas que l\'application <xliff:g id="NAME">%s</xliff:g> utilise cette fonctionnalité, appuyez ici pour ouvrir les paramètres et la désactiver."</string>
     <string name="alert_windows_notification_turn_off_action" msgid="3367294525884949878">"DÉSACTIVER"</string>
     <string name="ext_media_checking_notification_title" msgid="5734005953288045806">"Préparation mémoire \"<xliff:g id="NAME">%s</xliff:g>\" en cours"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Carte SIM non configurée"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Carte SIM non autorisée"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Téléphone non autorisé"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Fenêtre pop-up"</string>
 </resources>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index 217caf7..4067027 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> días"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> día <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> día <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> minuto"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> seg"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> seg"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> segundos"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> segundo"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Sen título&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Sen número de teléfono)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Descoñecido"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Non hai servizo de chamadas de urxencia nin de voz"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"A rede de telefonía móbil non ofrece o servizo na túa localización temporalmente"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Non se pode conectar coa rede"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Para mellorar a recepción, proba a cambiar o tipo seleccionado en Sistema &gt; Rede e Internet &gt; Redes de telefonía móbil &gt; Tipo de rede preferido."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Para mellorar a recepción, proba a cambiar o tipo seleccionado en Configuración &gt; Rede e Internet &gt; Redes de telefonía móbil &gt; Tipo de rede preferido."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"As chamadas por wifi están activadas"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"As chamadas de urxencia precisan unha rede de telefonía móbil."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alertas"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Desvío de chamadas"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Modo de devolución de chamadas de urxencia"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Alertas de datos móbiles"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Estado dos datos móbiles"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Mensaxes SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mensaxes de correo de voz"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Chamadas por wifi"</string>
@@ -143,7 +129,7 @@
     <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Desactivado"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wifi preferida"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"Datos móbiles preferidos"</string>
-    <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Só wifi"</string>
+    <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Só por wifi"</string>
     <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: non desviada"</string>
     <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
     <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> tras <xliff:g id="TIME_DELAY">{2}</xliff:g> segundos"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Non se introduciu ningunha tarxeta SIM"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Non se admite a tarxeta SIM"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Non se admite o teléfono"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Ventá emerxente"</string>
 </resources>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index a11968f..bc8f2382 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> દિવસ"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> દિવસ <xliff:g id="HOURS">%2$d</xliff:g> કલાક"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> દિવસ <xliff:g id="HOURS">%2$d</xliff:g> કલાક"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> કલાક"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> કલાક <xliff:g id="MINUTES">%2$d</xliff:g> મિનિટ"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> કલાક <xliff:g id="MINUTES">%2$d</xliff:g> મિનિટ"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> મિનિટ"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> મિનિટ"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> મિનિટ <xliff:g id="SECONDS">%2$d</xliff:g> સેકન્ડ"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> મિ <xliff:g id="SECONDS">%2$d</xliff:g> સે"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> સેકન્ડ"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> સેકન્ડ"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;અનામાંકિત&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(કોઈ ફોન નંબર નથી)"</string>
     <string name="unknownName" msgid="6867811765370350269">"અજાણ્યું"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"કોઈ વૉઇસ/કટોકટીની સેવા નથી"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"તમારા સ્થળે મોબાઇલ નેટવર્ક દ્વારા અસ્થાયીરૂપે ઑફર કરવામાં આવતી નથી"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"નેટવર્ક પર પહોંચી શકાતું નથી"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"રિસેપ્શનને બહેતર બનાવવા માટે, સિસ્ટમ &gt; નેટવર્ક અને ઇન્ટરનેટ &gt; મોબાઇલ નેટવર્ક &gt; પસંદગીનો નેટવર્ક પ્રકારમાં પસંદ કરેલો પ્રકાર બદલવાનો પ્રયાસ કરો."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"રિસેપ્શનને બહેતર બનાવવા માટે, સેટિંગ્સ &gt; નેટવર્ક અને ઇન્ટરનેટ &gt; મોબાઇલ નેટવર્ક &gt; પસંદગીના નેટવર્ક પ્રકાર પર પસંદ કરેલ પ્રકાર બદલવાનો પ્રયાસ કરો."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"વાઇ-ફાઇ કૉલિંગ સક્રિય છે"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"કટોકટીના કૉલ માટે એક મોબાઇલ નેટવર્કની આવશ્યકતા છે."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"ચેતવણીઓ"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"કૉલ ફૉર્વર્ડિંગ"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"કટોકટી કૉલબૅક મોડ"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"મોબાઇલ ડેટા ચેતવણીઓ"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"મોબાઇલ ડેટાની સ્થિતિ"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS સંદેશા"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"વૉઇસમેઇલ સંદેશા"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"વાઇ-ફાઇ કૉલિંગ"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIMની જોગવાઈ કરી નથી"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"સિમ મંજૂર નથી"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"ફોન મંજૂર નથી"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"પૉપઅપ વિંડો"</string>
 </resources>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index c0bbf8d..4d7eb71 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"केबी"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"एमबी"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"जीबी"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> दिन"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> दिन <xliff:g id="HOURS">%2$d</xliff:g> घंटे"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> दिन <xliff:g id="HOURS">%2$d</xliff:g> घंटा"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> घंटे"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> घं. <xliff:g id="MINUTES">%2$d</xliff:g> मि."</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> घं. <xliff:g id="MINUTES">%2$d</xliff:g> मि."</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> मिनट"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> मिनट"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> मि. <xliff:g id="SECONDS">%2$d</xliff:g> से."</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> मि. <xliff:g id="SECONDS">%2$d</xliff:g> से."</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> सेकंड"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> सेकंड"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;शीर्षक-रहित&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(कोई फ़ोन नंबर नहीं)"</string>
     <string name="unknownName" msgid="6867811765370350269">"अज्ञात"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"कोई वॉइस/आपातकालीन सेवा नहीं है"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"मोबाइल नेटवर्क आपके जगह पर इस समय यह सेवाएं नहीं दे पा रहा"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"नेटवर्क तक नहीं पहुंच पा रहे हैं"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"रिसेप्शन बेहतर करने के लिए, सिस्टम &gt; नेटवर्क और इंटरनेट &gt; मोबाइल नेटवर्क &gt; पसंदीदा नेटवर्क प्रकार पर जाकर, चुना गया प्रकार बदलकर देखें."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"रिसेप्शन बेहतर करने के लिए, सेटिंग &gt; नेटवर्क और इंटरनेट &gt; मोबाइल नेटवर्क &gt; पसंदीदा नेटवर्क प्रकार पर जाकर, चुना गया प्रकार बदलकर देखें."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"वाई-फ़ाई कॉलिंग सक्रिय है"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"आपातकालीन कॉल के लिए मोबाइल नेटवर्क ज़रूरी है."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"सूचनाएं"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"कॉल को दूसरे नंबर पर भेजना"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"आपातकालीन कॉलबैक मोड"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"मोबाइल डेटा सूचनाएं"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"मोबाइल डेटा की स्थिति"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"मैसेज (एसएमएस)"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"वॉइसमेल संदेश"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"वाई-फ़ाई कॉलिंग"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM का प्रावधान नहीं किया गया है"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM की अनुमति नहीं है"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"फ़ोन की अनुमति नहीं है"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"पॉपअप विंडो"</string>
 </resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index fcd78d5..2ccb902 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> d"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> d <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> d <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Bez naslova&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nema telefonskog broja)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Nepoznato"</string>
@@ -96,11 +80,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Nema glasovnih i hitnih usluga"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Trenutačno nije u ponudi mobilne mreže na vašoj lokaciji"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Pristup mreži nije moguć"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Za bolji prijem pokušajte odabrati drugu vrstu mreže u odjeljku Sustav &gt; Mreža i internet &gt; Mobilne mreže &gt; Željena vrsta mreže."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Za bolji prijem pokušajte promijeniti vrstu odabranu u odjeljku Postavke &gt; Mreža i internet &gt; Mobilne mreže &gt; Preferirana vrsta mreže."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Aktivni su Wi‑Fi pozivi"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Za hitne pozive potrebna je mobilna mreža."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Upozorenja"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Preusmjeravanje poziva"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Način hitnog povratnog poziva"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Upozorenja o mobilnim podacima"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status mobilnih podataka"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS poruke"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Poruke govorne pošte"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi pozivi"</string>
@@ -1814,4 +1800,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Ne pruža se usluga za SIM"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM nije dopušten"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefon nije dopušten"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Skočni prozor"</string>
 </resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 5b64935..fe00b60 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> nap"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> nap <xliff:g id="HOURS">%2$d</xliff:g> óra"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> nap <xliff:g id="HOURS">%2$d</xliff:g> óra"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> óra"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> óra <xliff:g id="MINUTES">%2$d</xliff:g> perc"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> óra <xliff:g id="MINUTES">%2$d</xliff:g> perc"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> perc"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> perc"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> perc <xliff:g id="SECONDS">%2$d</xliff:g> mp"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> perc <xliff:g id="SECONDS">%2$d</xliff:g> mp"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> másodperc"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> másodperc"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Névtelen&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nincs telefonszám)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Ismeretlen"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Hang- és segélyszolgáltatás letiltva"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Az Ön tartózkodási helyén ideiglenesen nem áll rendelkezésre a mobilhálózaton"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"A hálózat nem érhető el"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"A vétel javítása érdekében próbálja módosítani a kiválasztott hálózattípust a Rendszer &gt; Hálózat és internet &gt; Mobilhálózatok &gt; Preferált hálózattípus menüben."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"A vétel javítása érdekében próbálja módosítani a kiválasztott hálózattípust a Beállítások &gt; Hálózat és internet &gt; Mobilhálózatok &gt; Preferált hálózattípus menüpontban."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"A Wi‑Fi-hívás aktív"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"A segélyhíváshoz mobilhálózatra van szükség."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Értesítések"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Hívásátirányítás"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Sürgősségi visszahívás mód"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Mobiladat-forgalommal kapcsolatos értesítések"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Mobiladat-állapot"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS-ek"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Hangpostaüzenetek"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-hívás"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Nem engedélyezett SIM-kártya"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"A SIM-kártya nem engedélyezett"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"A telefon nem engedélyezett"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Előugró ablak"</string>
 </resources>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index 1844509..3c49ac58 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"Բ"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"կԲ"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"ՄԲ"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"ԳԲ"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"ՏԲ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"Պբ"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> օր"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> օր <xliff:g id="HOURS">%2$d</xliff:g> ժ"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> օր <xliff:g id="HOURS">%2$d</xliff:g> ժ"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ժ"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ժ <xliff:g id="MINUTES">%2$d</xliff:g> ր"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ժ <xliff:g id="MINUTES">%2$d</xliff:g> ր"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> րոպե"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> րոպե"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> ր <xliff:g id="SECONDS">%2$d</xliff:g> վ"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> ր <xliff:g id="SECONDS">%2$d</xliff:g> վ"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> վ"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> վ"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Անանուն&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Հեռախոսահամար չկա)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Անհայտ"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Ձայնային/արտակարգ իրավիճակների ծառայությունն անհասանելի է"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Ձեր գտնվելու վայրում ծառայությունը ժամանակավորապես չի տրամադրվում բջջային ցանցի կողմից"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Ցանցն անհասանելի է"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Ազդանշանի ընդունման որակը բարելավելու համար փոխեք ցանցի տեսակը՝ անցնելով Համակարգ &gt; Ցանց և ինտերնետ &gt; Բջջային ցանցեր &gt; Ցանկալի ցանցի տեսակը։"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Ազդանշանի ընդունման որակը բարելավելու համար փոխեք ցանցի տեսակը՝ անցնելով Համակարգ &gt; Ցանց և ինտերնետ &gt; Բջջային ցանցեր &gt; Ցանկալի ցանցի տեսակը։"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi կանչերն ակտիվ են"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Շտապ կանչերի համար բջջային ցանց է անհրաժեշտ"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Ծանուցումներ"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Զանգի վերահասցեավորում"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Շտապ հետկանչի ռեժիմ"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Բջջային տվյալների ծանուցումներ"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Բջջային ինտերնետի կարգավիճակը"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS հաղորդագրություններ"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Ձայնային փոստի հաղորդագրություններ"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Զանգեր Wi-Fi-ի միջոցով"</string>
@@ -1423,7 +1409,7 @@
     <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"Հեռուստացույց"</string>
     <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Հեռախոս"</string>
     <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Ականջակալներ"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Համակցված բարձրախոսներ"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Դոկ-կայանի բարձրախոսներ"</string>
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Համակարգ"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ի աուդիո ֆայլ"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM քարտը նախապատրաստված չէ"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM քարտի օգտագործումն արգելված է"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Հեռախոսի օգտագործումն արգելված է"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Հայտնվող պատուհան"</string>
 </resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 02ab17f..a9a131e 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> hari"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> hari <xliff:g id="HOURS">%2$d</xliff:g> jam"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> hari <xliff:g id="HOURS">%2$d</xliff:g> jam"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> jam"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> jam <xliff:g id="MINUTES">%2$d</xliff:g> mnt"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> jam <xliff:g id="MINUTES">%2$d</xliff:g> mnt"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> mnt"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> menit"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> mnt <xliff:g id="SECONDS">%2$d</xliff:g> dtk"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> mnt <xliff:g id="SECONDS">%2$d</xliff:g> dtk"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> dtk"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> dtk"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Tanpa judul&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Tidak ada nomor telepon)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Tidak diketahui"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Tidak ada layanan panggilan suara/darurat"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Untuk sementara tidak ditawarkan oleh jaringan seluler di lokasi Anda"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Tidak dapat menjangkau jaringan"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Untuk meningkatkan penerimaan sinyal, coba ubah jenis yang dipilih di Sistem &gt; Jaringan &amp; Internet &gt; Jaringan seluler &gt; Jenis jaringan pilihan."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Untuk menyempurnakan penerimaan sinyal, coba ubah jenis yang dipilih di Setelan &gt; Jaringan &amp; Internet &gt; Jaringan seluler &gt; Jenis jaringan pilihan."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Panggilan Wi‑Fi aktif"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Panggilan darurat memerlukan jaringan seluler."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Notifikasi"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Penerusan panggilan"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Mode panggilan balik darurat"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Notifikasi data seluler"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status data seluler"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Pesan SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Notifikasi pesan suara"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Panggilan Wi-Fi"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM tidak di-provisioning"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM tidak diizinkan"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Ponsel tidak diizinkan"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Jendela Pop-up"</string>
 </resources>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index 11786bb..b45912e 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dagar"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> d. <xliff:g id="HOURS">%2$d</xliff:g> klst."</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> d. <xliff:g id="HOURS">%2$d</xliff:g> klst."</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> klst."</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> k. <xliff:g id="MINUTES">%2$d</xliff:g> mín."</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> k. <xliff:g id="MINUTES">%2$d</xliff:g> mín."</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> mín."</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> mín."</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> m. <xliff:g id="SECONDS">%2$d</xliff:g> sek."</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> m. <xliff:g id="SECONDS">%2$d</xliff:g> sek."</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> sek."</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sek."</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Ónefnt&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Ekkert símanúmer)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Óþekkt"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Símtöl/neyðarsímtöl eru ekki í boði"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Ekki í boði á farsímakerfinu á þínum stað eins og er"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Ekki næst samband við símkerfi"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Reyndu að breyta valinni gerð í Kerfi &gt; Netkerfi og internet > Farsímakerfi &gt; Valin símkerfistegund til að bæta móttökuskilyrðin."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Reyndu að breyta valinni gerð í Stillingar &gt; Netkerfi og internet > Farsímakerfi &gt; Valin símkerfistegund til að bæta móttökuskilyrðin."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi-Fi símtöl eru virk"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Neyðarsímtöl krefjast farsímanets."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Tilkynningar"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Símtalsflutningur"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Stilling fyrir svarhringingu neyðarsímtala"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Tilkynningar fyrir farsímagögn"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Staða farsímagagna"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS-skilaboð"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Talhólfsskilaboð"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi símtöl"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM-korti ekki úthlutað"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM-kort er ekki leyft"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Sími er ekki leyfður"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Sprettigluggi"</string>
 </resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 8189fea..49af5f4e 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> giorni"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> giorno <xliff:g id="HOURS">%2$d</xliff:g> ore"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> giorno <xliff:g id="HOURS">%2$d</xliff:g> ora"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ore"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ora <xliff:g id="MINUTES">%2$d</xliff:g> minuti"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ora <xliff:g id="MINUTES">%2$d</xliff:g> minuto"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> minuti"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> minuto <xliff:g id="SECONDS">%2$d</xliff:g> secondi"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> minuto <xliff:g id="SECONDS">%2$d</xliff:g> secondo"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> secondi"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> secondo"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Senza nome&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nessun numero di telefono)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Sconosciuto"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Nessun servizio di telefonia/emergenza"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Servizio temporaneamente non offerto dalla rete mobile nella tua località"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Impossibile raggiungere la rete"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Per migliorare la ricezione, prova a modificare il tipo selezionato in Sistema &gt; Rete e Internet &gt; Reti mobili &gt; Tipo di rete preferito."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Per migliorare la ricezione, prova a modificare il tipo selezionato in Impostazioni &gt; Rete e Internet &gt; Reti mobili &gt; Tipo di rete preferito."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Chiamate Wi‑Fi attive"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Per le chiamate di emergenza è necessaria una rete mobile."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Avvisi"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Deviazione chiamate"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Modalità di richiamata di emergenza"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Avvisi relativi ai dati mobili"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Stato dati mobili"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Messaggi vocali"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Chiamate Wi-Fi"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Scheda SIM non predisposta"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Scheda SIM non consentita"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefono non consentito"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Finestra popup"</string>
 </resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index e79453e..2d0b9a1 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> ימים"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"יום <xliff:g id="DAYS">%1$d</xliff:g> ‏<xliff:g id="HOURS">%2$d</xliff:g> שע\'"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"יום <xliff:g id="DAYS">%1$d</xliff:g> שעה <xliff:g id="HOURS">%2$d</xliff:g>"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> שעות"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"שעה <xliff:g id="HOURS">%1$d</xliff:g> ‏<xliff:g id="MINUTES">%2$d</xliff:g> דק\'"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> שעות <xliff:g id="MINUTES">%2$d</xliff:g> דק\'"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> דקות"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> דקות"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"דקה <xliff:g id="MINUTES">%1$d</xliff:g> ‏<xliff:g id="SECONDS">%2$d</xliff:g> שנ\'"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"דקה <xliff:g id="MINUTES">%1$d</xliff:g> שנ\' <xliff:g id="SECONDS">%2$d</xliff:g>"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> שניות"</string>
-    <string name="durationSecond" msgid="985669622276420331">"שנייה <xliff:g id="SECONDS">%1$d</xliff:g>"</string>
     <string name="untitled" msgid="4638956954852782576">"‏&gt;ללא כותרת&lt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(אין מספר טלפון)"</string>
     <string name="unknownName" msgid="6867811765370350269">"לא ידוע"</string>
@@ -97,11 +81,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"אין אפשרות לבצע שיחות חירום ושיחות קוליות רגילות"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"הרשת הסלולרית במיקום הזה חסמה את השירות באופן זמני"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"לא ניתן להתחבר לרשת"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"‏כדי לשפר את הקליטה, נסה לשנות את הסוג הנבחר ב\'מערכת\' &gt; \'רשת ואינטרנט\' &gt; \'רשתות סלולריות\' &gt; \'סוג רשת מועדף\'."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"כדי לשפר את הקליטה, כדאי לנסות לשנות את סוג הרשת ב\'הגדרות\' &gt; \'רשת ואינטרנט\' &gt; \'רשתות סלולריות\' &gt; \'סוג רשת מועדף\'."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"‏שיחות ה-Wi-Fi מופעלות"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"כדי לבצע שיחות חירום, יש להתחבר לרשת סלולרית."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"התראות"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"העברת שיחות"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"מצב \'התקשרות חזרה בחירום\'"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"התראות לגבי חבילת הגלישה"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"סטטוס חבילת הגלישה"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"‏הודעות SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"הודעות קוליות"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"‏שיחות Wi-Fi"</string>
@@ -533,8 +519,8 @@
     <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"מאפשר לאפליקציה לנהל מדיניות הרשת להגדיר כללים ספציפיים-לאפליקציה."</string>
     <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"שנה ניהול חשבונות של שימוש ברשת"</string>
     <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"הרשאה זו מאפשרת לאפליקציה לשנות את אופן החישוב של נתוני שימוש ברשת מול כל אפליקציה. לא מיועד לשימוש באפליקציות רגילות."</string>
-    <string name="permlab_accessNotifications" msgid="7673416487873432268">"גישה להתראות"</string>
-    <string name="permdesc_accessNotifications" msgid="458457742683431387">"מאפשר לאפליקציה לאחזר, לבדוק ולמחוק התראות, כולל כאלה שפורסמו על ידי אפליקציות אחרות."</string>
+    <string name="permlab_accessNotifications" msgid="7673416487873432268">"גישה להודעות"</string>
+    <string name="permdesc_accessNotifications" msgid="458457742683431387">"מאפשר לאפליקציה לאחזר, לבדוק ולמחוק הודעות, כולל כאלה שפורסמו על ידי אפליקציות אחרות."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"איגוד לשירות של מאזין להתראות"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"הרשאה זו מאפשרת למשתמש לבצע איגוד לממשק הרמה העליונה של שירות מאזין להתראות. הרשאה זו אף פעם אינה נחוצה לאפליקציות רגילים."</string>
     <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"איגוד לשירות ספק תנאי"</string>
@@ -1123,13 +1109,13 @@
     <string name="volume_call" msgid="3941680041282788711">"עוצמת קול בשיחה"</string>
     <string name="volume_bluetooth_call" msgid="2002891926351151534">"‏עוצמת הקול בשיחה ב-Bluetooth"</string>
     <string name="volume_alarm" msgid="1985191616042689100">"עוצמת קול של התראה"</string>
-    <string name="volume_notification" msgid="2422265656744276715">"עוצמת קול של התראות"</string>
+    <string name="volume_notification" msgid="2422265656744276715">"עוצמת קול של הודעות"</string>
     <string name="volume_unknown" msgid="1400219669770445902">"עוצמת קול"</string>
     <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"‏עוצמת קול של Bluetooth"</string>
     <string name="volume_icon_description_ringer" msgid="3326003847006162496">"עוצמת קול של רינגטון"</string>
     <string name="volume_icon_description_incall" msgid="8890073218154543397">"עוצמת קול של שיחות"</string>
     <string name="volume_icon_description_media" msgid="4217311719665194215">"עוצמת קול של מדיה"</string>
-    <string name="volume_icon_description_notification" msgid="7044986546477282274">"עוצמת קול של התראות"</string>
+    <string name="volume_icon_description_notification" msgid="7044986546477282274">"עוצמת קול של הודעות"</string>
     <string name="ringtone_default" msgid="3789758980357696936">"רינגטון ברירת מחדל"</string>
     <string name="ringtone_default_with_actual" msgid="1767304850491060581">"ברירת מחדל (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
     <string name="ringtone_silent" msgid="7937634392408977062">"ללא"</string>
@@ -1848,4 +1834,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"‏כרטיס ה-SIM לא מזוהה"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"‏כרטיס ה-SIM לא מורשה"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"הטלפון לא מורשה"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"חלון קופץ"</string>
 </resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 3c02273..9aaa80b 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g>日"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g>日<xliff:g id="HOURS">%2$d</xliff:g>時間"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g>日<xliff:g id="HOURS">%2$d</xliff:g>時間"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g>時間"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g>時間<xliff:g id="MINUTES">%2$d</xliff:g>分"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g>時間<xliff:g id="MINUTES">%2$d</xliff:g>分"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g>分"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g>分"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g>分<xliff:g id="SECONDS">%2$d</xliff:g>秒"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g>分<xliff:g id="SECONDS">%2$d</xliff:g>秒"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g>秒"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g>秒"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;新規&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(電話番号なし)"</string>
     <string name="unknownName" msgid="6867811765370350269">"不明"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"音声通話 / 緊急通報サービス停止"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"現在地のモバイル ネットワークでは一時的に提供されていません"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"ネットワークにアクセスできません"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"受信状態を改善するには、[システム] &gt; [ネットワークとインターネット] &gt; [モバイル ネットワーク] &gt; [優先ネットワーク タイプ] で選択したタイプを変更してみてください。"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"受信状態を改善するには、[設定] &gt; [ネットワークとインターネット] &gt; [モバイル ネットワーク] &gt; [優先ネットワーク タイプ] で選択したタイプを変更してみてください。"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi 通話が有効な状態です"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"緊急通報にはモバイル ネットワークが必要です。"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"通知"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"電話の転送"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"緊急通報待機モード"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"モバイルデータ通知"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"モバイルデータのステータス"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS メッセージ"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ボイスメール メッセージ"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi 通話"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM には対応していません"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM は許可されていません"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"電話は許可されていません"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"ポップアップ ウィンドウ"</string>
 </resources>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index e93a12e..d5dc283 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"ბაიტი"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"კბაიტი"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"მბაიტი"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"გბაიტი"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"ტბაიტი"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> დღე"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> დღე <xliff:g id="HOURS">%2$d</xliff:g> სთ"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> დღე <xliff:g id="HOURS">%2$d</xliff:g> სთ"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> სთ"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> სთ <xliff:g id="MINUTES">%2$d</xliff:g> წთ"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> სთ <xliff:g id="MINUTES">%2$d</xliff:g> წთ"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> წთ"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> წთ"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> წთ <xliff:g id="SECONDS">%2$d</xliff:g> წმ"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> წთ <xliff:g id="SECONDS">%2$d</xliff:g> წმ"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> წმ"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> წმ"</string>
     <string name="untitled" msgid="4638956954852782576">"უსათაურო"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(ტელეფონის ნომრის გარეშე)"</string>
     <string name="unknownName" msgid="6867811765370350269">"უცნობი"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"ხმოვანი/გადაუდებელი ზარების სერვისი არ არის"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"დროებით არ არის შემოთავაზებული მობილური ქსელის მიერ თქვენს მდებარეობაზე"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"ქსელთან დაკავშირება ვერ ხერხდება"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"მიღების გასაუმჯობესებლად ცადეთ არჩეული ტიპის შეცვლა აქ: სისტემა &gt; ქსელი და ინტერნეტი &gt; მობილური ქსელები &gt; ქსელის სასურველი ტიპი."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"მიღების გასაუმჯობესებლად ცადეთ არჩეული ტიპის შეცვლა აქ: პარამეტრები &gt; ქსელი და ინტერნეტი &gt; მობილური ქსელები &gt; ქსელის სასურველი ტიპი."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"აქტიურია Wi‑Fi დარეკვა"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"გადაუდებელი ზარები საჭიროებს მობილურ ქსელს."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"გაფრთხილებები"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"ზარის გადამისამართება"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"გადაუდებელი გადმორეკვის რეჟიმი"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"მობილური ინტერნეტის შეტყობინებები"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"მობილური ინტერნეტის სტატუსი"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS შეტყობინებები"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ხმოვანი ფოსტის შეტყობინებები"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"დარეკვა Wi-Fi-ს მეშვეობით"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM ბარათი უზრუნველყოფილი არ არის"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM ბარათი დაუშვებელია"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"ტელეფონი დაუშვებელია"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"ამომხტარი ფანჯარა"</string>
 </resources>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index 31fe828..5d0a49d 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"Б"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"КБ"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MБ"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"ГБ"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TБ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"ПБ"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> күн"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> күн <xliff:g id="HOURS">%2$d</xliff:g> сағ."</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> күн <xliff:g id="HOURS">%2$d</xliff:g> сағ."</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> сағ."</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> сағ. <xliff:g id="MINUTES">%2$d</xliff:g> м."</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> сағ. <xliff:g id="MINUTES">%2$d</xliff:g> м."</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> мин."</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> мин"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> мин. <xliff:g id="SECONDS">%2$d</xliff:g> с."</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> мин. <xliff:g id="SECONDS">%2$d</xliff:g> с."</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> сек."</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> сек."</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Атаусыз&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Телефон нөмірі жоқ)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Белгісіз"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Дауыстық/жедел қызметке қоңыраулар қызметі жоқ"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Орналасқан аймағыңызда мобильдік желі уақытша ұсынбады"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Желіге қосылу мүмкін емес"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Қабылдауды жақсарту үшін \"Жүйе &gt; Желі және интернет &gt; Мобильдік желілер &gt; Қалаған желі түрі\" тармағынан түрді өзгертіп көріңіз."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Қабылдауды жақсарту үшін \"Параметрлер &gt; Желі және интернет &gt; Мобильді желілер және қалаулы желі түрі\" тармағынан түрді өзгертіп көріңіз."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi қоңыраулары қосулы"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Жедел қызметке қоңырау шалу үшін мобильдік желі қажет."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Дабылдар"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Қоңырауды басқа нөмірге бағыттау"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Шұғыл кері қоңырау шалу режимі"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Мобильдік деректер дабылдары"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Мобильдік деректер күйі"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS хабарлары"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Дауыстық пошта хабарлары"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi қоңыраулары"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM картасы белсендірілмеген"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM картасына рұқсат етілмеген"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Телефонға рұқсат етілмеген"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Қалқымалы терезе"</string>
 </resources>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index c97812da..2234518 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"មេកាបៃ"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"ជីកាបៃ"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"តេរ៉ាបៃ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> ថ្ងៃ"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> ថ្ងៃ <xliff:g id="HOURS">%2$d</xliff:g> ម៉ោង"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> ថ្ងៃ <xliff:g id="HOURS">%2$d</xliff:g> ម៉ោង"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ម៉ោង"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ម៉ោង <xliff:g id="MINUTES">%2$d</xliff:g> នាទី"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ម៉ោង <xliff:g id="MINUTES">%2$d</xliff:g> នាទី"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> នាទី"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> នាទី"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g>នាទី <xliff:g id="SECONDS">%2$d</xliff:g>វិនាទី"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g>នាទី <xliff:g id="SECONDS">%2$d</xliff:g>វិនាទី"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> វិនាទី"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> វិនាទី"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;គ្មាន​ចំណង​ជើង&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(គ្មាន​លេខ​ទូរស័ព្ទ)"</string>
     <string name="unknownName" msgid="6867811765370350269">"មិន​ស្គាល់"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"គ្មាន​សេវាកម្ម​សំឡេង/សង្រ្គោះបន្ទាន់​ទេ"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"​មិន​បាន​ផ្តល់​ជូន​ដោយ​បណ្តាញចល័តនៅ​ទីកន្លែងរបស់អ្នកជា​បណ្តោះ​អាសន្ន"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"មិន​អាច​ភ្ជាប់​ទៅ​បណ្តាញ​បានទេ​"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"ដើម្បីកែលម្អការទទួលយក សាកល្បងប្តូរប្រភេទដែលបានជ្រើសរើសនៅ ប្រព័ន្ធ &gt; បណ្តាញ និងអ៊ីនធឺណិត &gt; បណ្តាញទូរសព្ទចល័ត &gt; ប្រភេទបណ្តាញដែលចង់ប្រើ។"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"ដើម្បី​ធ្វើ​ឲ្យ​ការ​ទទួល​​រលក​សញ្ញា​​ប្រសើរ​ជាងមុន សូមសាកល្បងប្តូរប្រភេទដែលបានជ្រើសរើសនៅ ការកំណត់ &gt; បណ្តាញ និងអ៊ីនធឺណិត &gt; បណ្តាញទូរសព្ទចល័ត &gt; ប្រភេទបណ្តាញដែលចង់ប្រើ។"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"ការហៅតាម Wi-Fi បានបើក"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"ការហៅ​បន្ទាន់​តម្រូវឲ្យ​មានបណ្ដាញ​ទូរសព្ទ​ចល័ត។"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"ការជូនដំណឹង"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"ការបញ្ជូន​ការហៅ​ទូរសព្ទ​បន្ត"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"មុខងារ​ហៅត្រឡប់​វិញ​បន្ទាន់"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"ការជូនដំណឹង​អំពី​ទិន្នន័យ​ទូរសព្ទ​ចល័ត"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"ស្ថានភាព​ទិន្នន័យ​ទូរសព្ទ​ចល័ត"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"សារ SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"សារ​ជា​សំឡេង"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"ការហៅ​ទូរសព្ទ​តាម Wi-Fi"</string>
@@ -1782,4 +1768,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"សីុម​មិន​ត្រូវបាន​ផ្តល់ជូន​ទេ"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"មិន​អនុញ្ញាត​ចំពោះសីុម​ទេ"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"មិន​អនុញ្ញាត​ចំពោះទូរសព្ទ​ទេ"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"វិនដូលេចឡើង"</string>
 </resources>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index f355e85..2d5b27c 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> ದಿನಗಳು"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> ದಿನ <xliff:g id="HOURS">%2$d</xliff:g> ಗಂಟೆಗಳು"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> ದಿನ <xliff:g id="HOURS">%2$d</xliff:g> ಗಂ"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ಗಂಟೆಗಳು"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ಗಂಟೆ <xliff:g id="MINUTES">%2$d</xliff:g> ನಿಮಿಷಗಳು"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ಗಂಟೆ <xliff:g id="MINUTES">%2$d</xliff:g> ನಿಮಿಷ"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> ನಿಮಿಷಗಳು"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> ನಿಮಿಷ"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> ನಿಮಿ <xliff:g id="SECONDS">%2$d</xliff:g> ಸೆಕೆಂಡುಗಳು"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> ನಿಮಿ <xliff:g id="SECONDS">%2$d</xliff:g> ಸೆ"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> ಸೆಕೆಂಡುಗಳು"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> ಸೆಕೆಂಡುಗಳು"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;ಶೀರ್ಷಿಕೆ ರಹಿತ&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(ಯಾವುದೇ ಫೋನ್ ಸಂಖ್ಯೆಯಿಲ್ಲ)"</string>
     <string name="unknownName" msgid="6867811765370350269">"ಅಪರಿಚಿತ"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"ಧ್ವನಿ/ತುರ್ತು ಸೇವೆ ಇಲ್ಲ"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"ತಾತ್ಕಾಲಿಕವಾಗಿ ಮೊಬೈಲ್ ನೆಟ್‌ವರ್ಕ್‌ನಿಂದ ನಿಮ್ಮ ಸ್ಥಳದಲ್ಲಿ ಒದಗಿಸುತ್ತಿಲ್ಲ"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"ನೆಟ್‌ವರ್ಕ್ ತಲುಪಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"ನೆಟ್‌ವರ್ಕ್ ಸಂಪರ್ಕ ಪಡೆಯುವುದನ್ನು ಸುಧಾರಿಸಲು, ಆಯ್ಕೆ ಮಾಡಿರುವ ವಿಧವನ್ನು ಸಿಸ್ಟಂ &gt; ನೆಟ್‌ವರ್ಕ್ ಮತ್ತು ಇಂಟರ್ನೆಟ್ &gt; ಮೊಬೈಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು &gt; ಆದ್ಯತೆಯ ನೆಟ್‌ವರ್ಕ್ ವಿಧದಲ್ಲಿ ಬದಲಿಸಿ ನೋಡಿ."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"ನೆಟ್‌ವರ್ಕ್ ಸಂಪರ್ಕ ಪಡೆಯುವುದನ್ನು ಸುಧಾರಿಸಲು, ಆಯ್ಕೆ ಮಾಡಿರುವ ವಿಧವನ್ನು ಸೆಟ್ಟಿಂಗ್‌ಗಳು &gt; ನೆಟ್‌ವರ್ಕ್ ಮತ್ತು ಇಂಟರ್ನೆಟ್ &gt; ಮೊಬೈಲ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳು &gt; ಆದ್ಯತೆಯ ನೆಟ್‌ವರ್ಕ್ ವಿಧದಲ್ಲಿ ಬದಲಿಸಿ ನೋಡಿ."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"ವೈ‑ಫೈ ಕರೆಮಾಡುವಿಕೆ ಸಕ್ರಿಯವಾಗಿದೆ"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"ತುರ್ತು ಕರೆಗಳನ್ನು ಮಾಡಲು ಮೊಬೈಲ್ ನೆಟ್‌ವರ್ಕ್ ಅಗತ್ಯವಿದೆ."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"ಎಚ್ಚರಿಕೆಗಳು"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"ಕರೆ ಫಾರ್ವರ್ಡ್‌ ಮಾಡುವಿಕೆ"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"ತುರ್ತು ಕಾಲ್‌ಬ್ಯಾಕ್‌ ಮೋಡ್‌"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"ಮೊಬೈಲ್ ಡೇಟಾ ಎಚ್ಚರಿಕೆಗಳು"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"ಮೊಬೈಲ್ ಡೇಟಾ ಸ್ಥಿತಿ"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"ಎಸ್‌ಎಂಎಸ್ ಸಂದೇಶಗಳು"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ಧ್ವನಿಮೇಲ್ ಸಂದೇಶಗಳು"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"ವೈ-ಫೈ ಕರೆ ಮಾಡುವಿಕೆ"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"ಸಿಮ್ ಸಿದ್ಧವಾಗಿಲ್ಲ"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"ಸಿಮ್‌ಗೆ ಅನುಮತಿಯಿಲ್ಲ"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"ಫೋನ್‌ಗೆ ಅನುಮತಿಯಿಲ್ಲ"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"ಪಾಪ್‌ಅಪ್ ವಿಂಡೋ"</string>
 </resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index ebc2fb4..ec651c3 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g>일"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g>일 <xliff:g id="HOURS">%2$d</xliff:g>시간"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g>일 <xliff:g id="HOURS">%2$d</xliff:g>시간"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g>시간"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g>시간 <xliff:g id="MINUTES">%2$d</xliff:g>분"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g>시간 <xliff:g id="MINUTES">%2$d</xliff:g>분"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g>분"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g>분"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g>분 <xliff:g id="SECONDS">%2$d</xliff:g>초"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g>분 <xliff:g id="SECONDS">%2$d</xliff:g>초"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g>초"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g>초"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;제목 없음&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(전화번호 없음)"</string>
     <string name="unknownName" msgid="6867811765370350269">"알 수 없음"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"음성/긴급 서비스를 이용할 수 없음"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"현재 위치에서 모바일 네트워크가 서비스 제공을 일시적으로 중단했습니다."</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"네트워크에 연결할 수 없습니다."</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"수신 상태를 개선하려면 시스템 &gt; 네트워크 및 인터넷 &gt; 모바일 네트워크 &gt; 기본 네트워크 유형에서 선택된 유형을 변경해 보세요."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"수신 상태를 개선하려면 설정 &gt; 네트워크 및 인터넷 &gt; 모바일 네트워크 &gt; 기본 네트워크 유형에서 선택된 유형을 변경해 보세요."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi 통화가 활성화됨"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"긴급 전화를 걸려면 모바일 네트워크에 연결되어 있어야 합니다."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"알림"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"착신전환"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"긴급 콜백 모드"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"모바일 데이터 알림"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"모바일 데이터 상태"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS 메시지"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"음성사서함 메시지"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi 통화"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM이 프로비저닝되지 않음"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM이 허용되지 않음"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"전화가 허용되지 않음"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"팝업 창"</string>
 </resources>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index 7e5d5b6..0d5eb74 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"Б"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"Кб"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"Мб"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"Гб"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"ТБ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"ПБ"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> күн"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> күн <xliff:g id="HOURS">%2$d</xliff:g> с"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> күн <xliff:g id="HOURS">%2$d</xliff:g> с"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> с"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> с. <xliff:g id="MINUTES">%2$d</xliff:g> мүн"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> саат <xliff:g id="MINUTES">%2$d</xliff:g> мүн"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> мүн"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> мүн."</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> мүн. <xliff:g id="SECONDS">%2$d</xliff:g> сек"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> мүн. <xliff:g id="SECONDS">%2$d</xliff:g> сек"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> сек"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> сек"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Баш аты жок&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Телефон номери жок)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Белгисиз"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Бардык чалуулар жана кызматтар бөгөттөлгөн"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Өзгөчө кырдаалдагы кызматтар сиз жайгашкан жердеги мобилдик тармак тарабынан убактылуу бөгөттөлгөн"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Тармакка туташпай жатат"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Кабыл алуу мүмкүнчүлүгүн жакшыртуу үчүн Тутум &gt; Тармак жана Интернет &gt; Мобилдик тармактар &gt; Тандалган тармак бөлүмүнөн тармактын түрүн өзгөртүп көрүңүз."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Кабыл алуу мүмкүнчүлүгүн жакшыртуу үчүн Жөндөөлөр &gt; Тармак жана Интернет &gt; Мобилдик тармактар &gt; Тандалган тармак бөлүмүнөн тармактын түрүн өзгөртүп көрүңүз."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi аркылуу чалуу жүрүп жатат"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Шашылыш чалуу үчүн мобилдик тармак талап кылынат."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Эскертүүлөр"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Чалууну башка номерге багыттоо"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Шашылыш кайра чалуу режими"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Мобилдик Интернеттин эскертүүлөрү"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Мобилдик Интернеттин абалы"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS билдирүүлөрү"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Үн почтасынын билдирүүлөрү"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi аркылуу чалуу"</string>
@@ -1705,8 +1691,8 @@
     <string name="default_notification_channel_label" msgid="5929663562028088222">"Категорияларга бөлүнгөн эмес"</string>
     <string name="importance_from_user" msgid="7318955817386549931">"Бул эскертмелердин маанилүүлүгүн белгиледиңиз."</string>
     <string name="importance_from_person" msgid="9160133597262938296">"Булар сиз үчүн маанилүү адамдар."</string>
-    <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> колдонмосу <xliff:g id="ACCOUNT">%2$s</xliff:g> каттоо эсеби менен жаңы колдонуучу түзө берсинби ?"</string>
-    <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> колдонмосу <xliff:g id="ACCOUNT">%2$s</xliff:g> каттоо эсеби менен жаңы колдонуучу түзө берсинби (мындай каттоо эсеби бар колдонуучу мурунтан эле бар) ?"</string>
+    <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> колдонмосу <xliff:g id="ACCOUNT">%2$s</xliff:g> аккаунту менен жаңы колдонуучу түзө берсинби?"</string>
+    <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> колдонмосуна <xliff:g id="ACCOUNT">%2$s</xliff:g> аккаунту үчүн жаңы колдонуучу түзгөнгө уруксат бересизби (мындай аккаунту бар колдонуучу мурунтан эле бар)?"</string>
     <string name="language_selection_title" msgid="2680677278159281088">"Тил кошуңуз"</string>
     <string name="country_selection_title" msgid="2954859441620215513">"Чөлкөмдүк жөндөөлөр"</string>
     <string name="search_language_hint" msgid="7042102592055108574">"Тилди киргизиңиз"</string>
@@ -1781,4 +1767,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM карта таанылган жок"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM картаны колдонууга тыюу салынган"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Телефонду колдонууга тыюу салынган"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Калкып чыкма терезе"</string>
 </resources>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index 79654e7..331c8e0 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> ມື້"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> ມື້ <xliff:g id="HOURS">%2$d</xliff:g> ຊມ"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> ມື້ <xliff:g id="HOURS">%2$d</xliff:g> ຊມ"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ຊມ"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ຊມ <xliff:g id="MINUTES">%2$d</xliff:g> ນທ"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ຊມ <xliff:g id="MINUTES">%2$d</xliff:g> ນທ"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> ນທ"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> ​ນ​ທ"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> ນທ <xliff:g id="SECONDS">%2$d</xliff:g> ວິ"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> ນທ <xliff:g id="SECONDS">%2$d</xliff:g> ວິ"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> ວິ"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> ວິ"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;ບໍ່ມີຊື່&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(ບໍ່ມີເບີໂທລະສັບ)"</string>
     <string name="unknownName" msgid="6867811765370350269">"​ບໍ່​ຮູ້​ຈັກ"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"ບໍ່ມີບໍລິການສຽງ/ສຸກເສີນ"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"ເຄືອຂ່າຍຂອງທ່ານບໍ່ໄດ້ໃຫ້ບໍລິການຢູ່ສະຖານທີ່ນີ້ເປັນການຊົ່ວຄາວ"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Can’t reach network"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"ເພື່ອປັບປຸງການຮັບສັນຍານ, ໃຫ້ລອງປ່ຽນປະເພດທີ່ເລືອກໄວ້ທີ່ ລະບົບ &gt; ເຄືອຂ່າຍ ແລະ ອິນເຕີເນັດ &gt; ເຄືອຂ່າຍມືຖື &gt; ປະເພດເຄືອຂ່າຍທີ່ຕ້ອງການ."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"ເພື່ອປັບປຸງການຮັບສັນຍານ, ໃຫ້ລອງປ່ຽນປະເພດທີ່ເລືອກໄວ້ຢູ່ທີ່ ການຕັ້ງຄ່າ &gt; ເຄືອຂ່າຍ ແລະ ອິນເຕີເນັດ &gt; ເຄືອຂ່າຍມືຖື &gt; ປະເພດເຄືອຂ່າຍທີ່ຕ້ອງການ."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"ການໂທ Wi‑Fi ເຮັດວຽກຢູ່"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"ການໂທສຸກເສີນຕ້ອງໃຊ້ການເຊື່ອມຕໍ່ເຄືອຂ່າຍ."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"ການເຕືອນ"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"ການໂອນສາຍ"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"ໂໝດໂທກັບສຸກເສີນ"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"ການແຈ້ງເຕືອນອິນເຕີເນັດມືຖື"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"ສະຖານະອິນເຕີເນັດມືຖື"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"ຂໍ້ຄວາມ SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ຂໍ້ຄວາມສຽງ"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"ການ​ໂທ Wi-Fi"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"ບໍ່ມີການນຳໃຊ້ SIM"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ SIM"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ໂທລະສັບ"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"ໜ້າຈໍປັອບອັບ"</string>
 </resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 4fb1f64..65e9fa0 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> d."</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> d. <xliff:g id="HOURS">%2$d</xliff:g> val."</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> d. <xliff:g id="HOURS">%2$d</xliff:g> val."</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> val."</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> val. <xliff:g id="MINUTES">%2$d</xliff:g> min."</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> val. <xliff:g id="MINUTES">%2$d</xliff:g> min."</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min."</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min."</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min. <xliff:g id="SECONDS">%2$d</xliff:g> sek."</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min. <xliff:g id="SECONDS">%2$d</xliff:g> sek."</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> sek."</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sek."</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Be pavadinimo&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nėra telefono numerio)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Nežinoma"</string>
@@ -97,11 +81,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Balso skambučių / skambučių pagalbos numeriais paslauga neteikiama"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Laikinai nesiūloma mobiliojo ryšio tinkle jūsų vietovėje"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Nepavyko pasiekti tinklo"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Kad pagerintumėte ryšį, pabandykite pakeisti tipą, pasirinktą skiltyje „Nustatymai“ &gt; „Tinklas ir internetas“ &gt; „Mobiliojo ryšio tinklai“ &gt; „Pageidaujamas tinklo tipas“."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Kad pagerintumėte ryšį, pabandykite pakeisti tipą, pasirinktą skiltyje „Nustatymai“ &gt; „Tinklas ir internetas“ &gt; „Mobiliojo ryšio tinklai“ &gt; „Pageidaujamas tinklo tipas“."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"„Wi-Fi“ skambinimas aktyvus"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Kad būtų galima skambinti pagalbos numeriais, būtina naudoti mobiliojo ryšio tinklą."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Įspėjimai"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Skambučio peradresavimas"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Atskambinimo pagalbos numeriu režimas"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Mobiliojo ryšio duomenų įspėjimai"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Mobiliojo ryšio duomenų būsena"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS pranešimai"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Balso pašto pranešimai"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"„Wi-Fi“ skambinimas"</string>
@@ -1848,4 +1834,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM kortelė neteikiama"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM kortelė neleidžiama"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefonas neleidžiamas"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Iššokantysis langas"</string>
 </resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index c0df24c..9cc3081 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> d."</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> d. <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> d. <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Bez nosaukuma&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nav tālruņa numura)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Nezināms"</string>
@@ -96,11 +80,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Balss un ārkārtas izsaukumu pakalpojums nedarbojas"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Pagaidām netiek piedāvāts mobilajā tīklā jūsu atrašanās vietā"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Nevar sasniegt tīklu"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Lai uzlabotu uztveršanu, mainiet atlasīto veidu sadaļā Sistēma &gt; Tīkls un internets &gt; Mobilie tīkli &gt; Ieteicamais tīkla veids."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Lai uzlabotu uztveršanu, mainiet atlasīto veidu sadaļā Iestatījumi &gt; Tīkls un internets &gt; Mobilie tīkli &gt; Ieteicamais tīkla veids."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi zvani ir aktīvi"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Lai veiktu ārkārtas zvanus, ir nepieciešams mobilais tīkls."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Brīdinājumi"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Zvanu pāradresācija"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Ārkārtas atzvana režīms"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Mobilo datu brīdinājumi"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Mobilo datu statuss"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Īsziņas"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Balss pasta ziņojumi"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi zvani"</string>
@@ -1814,4 +1800,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM karte netiek nodrošināta"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM karti nav atļauts izmantot"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Tālruni nav atļauts izmantot"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Uznirstošais logs"</string>
 </resources>
diff --git a/core/res/res/values-mcc204-mnc12/config.xml b/core/res/res/values-mcc204-mnc12/config.xml
deleted file mode 100644
index 80432d7..0000000
--- a/core/res/res/values-mcc204-mnc12/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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 my obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR 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">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>20408</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc206-mnc05/config.xml b/core/res/res/values-mcc206-mnc05/config.xml
deleted file mode 100644
index a684aaa..0000000
--- a/core/res/res/values-mcc206-mnc05/config.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>20610</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc206-mnc10/config.xml b/core/res/res/values-mcc206-mnc10/config.xml
deleted file mode 100644
index 5c96317..0000000
--- a/core/res/res/values-mcc206-mnc10/config.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>20605</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc208-mnc15/config.xml b/core/res/res/values-mcc208-mnc15/config.xml
deleted file mode 100644
index 32b951c..0000000
--- a/core/res/res/values-mcc208-mnc15/config.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>20801</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc208-mnc26/config.xml b/core/res/res/values-mcc208-mnc26/config.xml
deleted file mode 100644
index 31d2d0f..0000000
--- a/core/res/res/values-mcc208-mnc26/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>20801</item>
-        <item>20810</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc02/config.xml b/core/res/res/values-mcc214-mnc02/config.xml
deleted file mode 100755
index c83de57..0000000
--- a/core/res/res/values-mcc214-mnc02/config.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-
-</resources>
diff --git a/core/res/res/values-mcc214-mnc04/config.xml b/core/res/res/values-mcc214-mnc04/config.xml
deleted file mode 100644
index 6dfa87b..0000000
--- a/core/res/res/values-mcc214-mnc04/config.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc05/config.xml b/core/res/res/values-mcc214-mnc05/config.xml
deleted file mode 100755
index 9302b0c..0000000
--- a/core/res/res/values-mcc214-mnc05/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc06/config.xml b/core/res/res/values-mcc214-mnc06/config.xml
deleted file mode 100755
index c3f2643..0000000
--- a/core/res/res/values-mcc214-mnc06/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc08/config.xml b/core/res/res/values-mcc214-mnc08/config.xml
deleted file mode 100755
index 5af6d5d..0000000
--- a/core/res/res/values-mcc214-mnc08/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc09/config.xml b/core/res/res/values-mcc214-mnc09/config.xml
deleted file mode 100755
index d789771..0000000
--- a/core/res/res/values-mcc214-mnc09/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc10/config.xml b/core/res/res/values-mcc214-mnc10/config.xml
deleted file mode 100755
index b66e1a2..0000000
--- a/core/res/res/values-mcc214-mnc10/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc11/config.xml b/core/res/res/values-mcc214-mnc11/config.xml
deleted file mode 100755
index 9fd06db..0000000
--- a/core/res/res/values-mcc214-mnc11/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc12/config.xml b/core/res/res/values-mcc214-mnc12/config.xml
deleted file mode 100755
index 7468238..0000000
--- a/core/res/res/values-mcc214-mnc12/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc13/config.xml b/core/res/res/values-mcc214-mnc13/config.xml
deleted file mode 100755
index 35ff4ae..0000000
--- a/core/res/res/values-mcc214-mnc13/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc14/config.xml b/core/res/res/values-mcc214-mnc14/config.xml
deleted file mode 100755
index b6a7440..0000000
--- a/core/res/res/values-mcc214-mnc14/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc15/config.xml b/core/res/res/values-mcc214-mnc15/config.xml
deleted file mode 100755
index 8296410..0000000
--- a/core/res/res/values-mcc214-mnc15/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc16/config.xml b/core/res/res/values-mcc214-mnc16/config.xml
deleted file mode 100755
index 1aaf577..0000000
--- a/core/res/res/values-mcc214-mnc16/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc17/config.xml b/core/res/res/values-mcc214-mnc17/config.xml
deleted file mode 100755
index be92a32..0000000
--- a/core/res/res/values-mcc214-mnc17/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc18/config.xml b/core/res/res/values-mcc214-mnc18/config.xml
deleted file mode 100755
index 078d7e2..0000000
--- a/core/res/res/values-mcc214-mnc18/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21419</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc19/config.xml b/core/res/res/values-mcc214-mnc19/config.xml
deleted file mode 100755
index d194687..0000000
--- a/core/res/res/values-mcc214-mnc19/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21420</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc20/config.xml b/core/res/res/values-mcc214-mnc20/config.xml
deleted file mode 100755
index 6aaf970..0000000
--- a/core/res/res/values-mcc214-mnc20/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21421</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc214-mnc21/config.xml b/core/res/res/values-mcc214-mnc21/config.xml
deleted file mode 100755
index f890b14..0000000
--- a/core/res/res/values-mcc214-mnc21/config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21401</item>
-        <item>21402</item>
-        <item>21403</item>
-        <item>21404</item>
-        <item>21405</item>
-        <item>21406</item>
-        <item>21407</item>
-        <item>21408</item>
-        <item>21409</item>
-        <item>21410</item>
-        <item>21411</item>
-        <item>21412</item>
-        <item>21413</item>
-        <item>21414</item>
-        <item>21415</item>
-        <item>21416</item>
-        <item>21417</item>
-        <item>21418</item>
-        <item>21419</item>
-        <item>21420</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc219-mnc02/config.xml b/core/res/res/values-mcc219-mnc02/config.xml
deleted file mode 100644
index 2ac6ba6..0000000
--- a/core/res/res/values-mcc219-mnc02/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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 my obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR 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">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>21901</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc232-mnc10/config.xml b/core/res/res/values-mcc232-mnc10/config.xml
deleted file mode 100644
index bdf83016..0000000
--- a/core/res/res/values-mcc232-mnc10/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- ** Copyright 2016, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- **     http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23203</item>
-        <item>23205</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc232-mnc11/config.xml b/core/res/res/values-mcc232-mnc11/config.xml
deleted file mode 100644
index 91e37b4..0000000
--- a/core/res/res/values-mcc232-mnc11/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- ** Copyright 2016, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- **     http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23201</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc232-mnc12/config.xml b/core/res/res/values-mcc232-mnc12/config.xml
deleted file mode 100644
index 91e37b4..0000000
--- a/core/res/res/values-mcc232-mnc12/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- ** Copyright 2016, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- **     http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23201</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc232-mnc13/config.xml b/core/res/res/values-mcc232-mnc13/config.xml
deleted file mode 100644
index 2c14f87..0000000
--- a/core/res/res/values-mcc232-mnc13/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- ** Copyright 2016, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- **     http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23203</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc08/config.xml b/core/res/res/values-mcc234-mnc08/config.xml
deleted file mode 100644
index 13d4d8f..0000000
--- a/core/res/res/values-mcc234-mnc08/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23430</item>
-        <item>23433</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc10/config.xml b/core/res/res/values-mcc234-mnc10/config.xml
deleted file mode 100644
index b704d3f..0000000
--- a/core/res/res/values-mcc234-mnc10/config.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23420</item>
-        <item>23426</item>
-        <item>23430</item>
-        <item>23431</item>
-        <item>23432</item>
-        <item>23433</item>
-        <item>23434</item>
-        <item>23486</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc20/config.xml b/core/res/res/values-mcc234-mnc20/config.xml
index 27c91d2..1e4bb0b 100644
--- a/core/res/res/values-mcc234-mnc20/config.xml
+++ b/core/res/res/values-mcc234-mnc20/config.xml
@@ -32,15 +32,4 @@
     <!-- Configure mobile network MTU. Carrier specific value is set here.
     -->
     <integer name="config_mobile_mtu">1440</integer>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23410</item>
-        <item>23426</item>
-        <item>23430</item>
-        <item>23431</item>
-        <item>23432</item>
-        <item>23433</item>
-        <item>23434</item>
-        <item>23486</item>
-    </string-array>
-
 </resources>
diff --git a/core/res/res/values-mcc234-mnc26/config.xml b/core/res/res/values-mcc234-mnc26/config.xml
deleted file mode 100644
index 8d259de..0000000
--- a/core/res/res/values-mcc234-mnc26/config.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23410</item>
-        <item>23420</item>
-        <item>23430</item>
-        <item>23431</item>
-        <item>23432</item>
-        <item>23433</item>
-        <item>23434</item>
-        <item>23486</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc30/config.xml b/core/res/res/values-mcc234-mnc30/config.xml
deleted file mode 100644
index eabdf9a..0000000
--- a/core/res/res/values-mcc234-mnc30/config.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23430</item>
-        <item>23431</item>
-        <item>23432</item>
-        <item>23433</item>
-        <item>23434</item>
-        <item>23486</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc31/config.xml b/core/res/res/values-mcc234-mnc31/config.xml
deleted file mode 100644
index eabdf9a..0000000
--- a/core/res/res/values-mcc234-mnc31/config.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23430</item>
-        <item>23431</item>
-        <item>23432</item>
-        <item>23433</item>
-        <item>23434</item>
-        <item>23486</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc32/config.xml b/core/res/res/values-mcc234-mnc32/config.xml
deleted file mode 100644
index eabdf9a..0000000
--- a/core/res/res/values-mcc234-mnc32/config.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23430</item>
-        <item>23431</item>
-        <item>23432</item>
-        <item>23433</item>
-        <item>23434</item>
-        <item>23486</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc33/config.xml b/core/res/res/values-mcc234-mnc33/config.xml
deleted file mode 100644
index 776b570..0000000
--- a/core/res/res/values-mcc234-mnc33/config.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
-     for different hardware and product builds.  Do not translate. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23430</item>
-        <item>23431</item>
-        <item>23432</item>
-        <item>23433</item>
-        <item>23434</item>
-        <item>23486</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc34/config.xml b/core/res/res/values-mcc234-mnc34/config.xml
deleted file mode 100644
index eabdf9a..0000000
--- a/core/res/res/values-mcc234-mnc34/config.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23430</item>
-        <item>23431</item>
-        <item>23432</item>
-        <item>23433</item>
-        <item>23434</item>
-        <item>23486</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc234-mnc86/config.xml b/core/res/res/values-mcc234-mnc86/config.xml
deleted file mode 100644
index eabdf9a..0000000
--- a/core/res/res/values-mcc234-mnc86/config.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>23430</item>
-        <item>23431</item>
-        <item>23432</item>
-        <item>23433</item>
-        <item>23434</item>
-        <item>23486</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc302-mnc370-en-rCA/strings.xml b/core/res/res/values-mcc302-mnc370-en-rCA/strings.xml
new file mode 100644
index 0000000..b93949e
--- /dev/null
+++ b/core/res/res/values-mcc302-mnc370-en-rCA/strings.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcSpnFormats">
+    <item msgid="5022384999749536798">"%s"</item>
+    <item msgid="8117276330682171665">"%s Wi-Fi"</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc302-mnc370-en-rXC/strings.xml b/core/res/res/values-mcc302-mnc370-en-rXC/strings.xml
new file mode 100644
index 0000000..5328d1e
--- /dev/null
+++ b/core/res/res/values-mcc302-mnc370-en-rXC/strings.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcSpnFormats">
+    <item msgid="5022384999749536798">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎%s‎‏‎‎‏‎"</item>
+    <item msgid="8117276330682171665">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎%s Wi-Fi‎‏‎‎‏‎"</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc302-mnc370/config.xml b/core/res/res/values-mcc302-mnc370/config.xml
index a7322e0..b520d5d 100644
--- a/core/res/res/values-mcc302-mnc370/config.xml
+++ b/core/res/res/values-mcc302-mnc370/config.xml
@@ -35,15 +35,7 @@
     -->
     <integer name="config_mobile_mtu">1410</integer>
 
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>302220</item>
-        <item>302610</item>
-        <item>302660</item>
-        <item>302720</item>
-        <item>302780</item>
-    </string-array>
-
-    <!-- Values for GPS configuration (Rogers) -->
+  <!-- Values for GPS configuration (Rogers) -->
     <string-array translatable="false" name="config_gpsParameters">
         <item>SUPL_HOST=supl.google.com</item>
         <item>SUPL_PORT=7275</item>
diff --git a/core/res/res/values-mcc302-mnc500/config.xml b/core/res/res/values-mcc302-mnc500/config.xml
deleted file mode 100644
index 77f6419..0000000
--- a/core/res/res/values-mcc302-mnc500/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- ** Copyright 2016, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- **     http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>302</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc302-mnc510/config.xml b/core/res/res/values-mcc302-mnc510/config.xml
deleted file mode 100644
index 77f6419..0000000
--- a/core/res/res/values-mcc302-mnc510/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- ** Copyright 2016, The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- ** You may obtain a copy of the License at
- **
- **     http://www.apache.org/licenses/LICENSE-2.0
- **
- ** Unless required by applicable law or agreed to in writing, software
- ** distributed under the License is distributed on an "AS IS" BASIS,
- ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ** See the License for the specific language governing permissions and
- ** limitations under the License.
- */
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>302</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc302-mnc610/config.xml b/core/res/res/values-mcc302-mnc610/config.xml
index eb2f60a..650aa62 100644
--- a/core/res/res/values-mcc302-mnc610/config.xml
+++ b/core/res/res/values-mcc302-mnc610/config.xml
@@ -18,11 +18,6 @@
 -->
 
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>302</item>
-    </string-array>
-
     <!-- Configure mobile network MTU. Carrier specific value is set here.
     -->
     <integer name="config_mobile_mtu">1428</integer>
diff --git a/core/res/res/values-mcc302-mnc640/config.xml b/core/res/res/values-mcc302-mnc640/config.xml
index 6a37878..4bb68dc 100644
--- a/core/res/res/values-mcc302-mnc640/config.xml
+++ b/core/res/res/values-mcc302-mnc640/config.xml
@@ -18,11 +18,6 @@
 -->
 
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>302</item>
-    </string-array>
-
     <!-- Values for GPS configuration (Bell) -->
     <string-array translatable="false" name="config_gpsParameters">
         <item>SUPL_HOST=supl.google.com</item>
diff --git a/core/res/res/values-mcc302-mnc660/config.xml b/core/res/res/values-mcc302-mnc660/config.xml
index c689d22..8c2e702 100644
--- a/core/res/res/values-mcc302-mnc660/config.xml
+++ b/core/res/res/values-mcc302-mnc660/config.xml
@@ -43,12 +43,4 @@
     -->
     <integer name="config_mobile_mtu">1430</integer>
 
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>302220</item>
-        <item>302370</item>
-        <item>302610</item>
-        <item>302720</item>
-        <item>302780</item>
-    </string-array>
-
 </resources>
diff --git a/core/res/res/values-mcc302-mnc720-en-rCA/strings.xml b/core/res/res/values-mcc302-mnc720-en-rCA/strings.xml
new file mode 100644
index 0000000..9b2336d
--- /dev/null
+++ b/core/res/res/values-mcc302-mnc720-en-rCA/strings.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcSpnFormats">
+    <item msgid="2776657861851140021">"%s"</item>
+    <item msgid="5094669985484060934">"%s Wi-Fi"</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc302-mnc720-en-rXC/strings.xml b/core/res/res/values-mcc302-mnc720-en-rXC/strings.xml
new file mode 100644
index 0000000..5d14078
--- /dev/null
+++ b/core/res/res/values-mcc302-mnc720-en-rXC/strings.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wfcSpnFormats">
+    <item msgid="2776657861851140021">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎%s‎‏‎‎‏‎"</item>
+    <item msgid="5094669985484060934">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎%s Wi-Fi‎‏‎‎‏‎"</item>
+  </string-array>
+</resources>
diff --git a/core/res/res/values-mcc302-mnc720/config.xml b/core/res/res/values-mcc302-mnc720/config.xml
index 1096a9c..11bfa05 100644
--- a/core/res/res/values-mcc302-mnc720/config.xml
+++ b/core/res/res/values-mcc302-mnc720/config.xml
@@ -37,15 +37,7 @@
     -->
     <integer name="config_mobile_mtu">1430</integer>
 
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>302220</item>
-        <item>302370</item>
-        <item>302610</item>
-        <item>302660</item>
-        <item>302780</item>
-    </string-array>
-
-    <!-- Values for GPS configuration (Rogers) -->
+  <!-- Values for GPS configuration (Rogers) -->
     <string-array translatable="false" name="config_gpsParameters">
         <item>SUPL_HOST=supl.google.com</item>
         <item>SUPL_PORT=7275</item>
diff --git a/core/res/res/values-mcc302-mnc780/config.xml b/core/res/res/values-mcc302-mnc780/config.xml
index a48f695..d300dab 100644
--- a/core/res/res/values-mcc302-mnc780/config.xml
+++ b/core/res/res/values-mcc302-mnc780/config.xml
@@ -20,12 +20,6 @@
 <!-- These resources are around just to allow their values to be customized
      for different hardware and product builds. -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>302</item>
-    </string-array>
-
     <!-- Configure mobile network MTU. Carrier specific value is set here.
     -->
     <integer name="config_mobile_mtu">1358</integer>
diff --git a/core/res/res/values-mcc310-mnc030-af/strings.xml b/core/res/res/values-mcc310-mnc030-af/strings.xml
new file mode 100644
index 0000000..0b666c2
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-af/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM is nie opgestel nie MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM word nie toegelaat nie MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-am/strings.xml b/core/res/res/values-mcc310-mnc030-am/strings.xml
new file mode 100644
index 0000000..08c5e32
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-am/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"ሲም አልቀረበም MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"ሲም አይፈቀድም MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-ar/strings.xml b/core/res/res/values-mcc310-mnc030-ar/strings.xml
new file mode 100644
index 0000000..5d6a53d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-ar/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"‏لم يتم توفير SIM ‏MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"‏غير مسموح باستخدام SIM ‏MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-az/strings.xml b/core/res/res/values-mcc310-mnc030-az/strings.xml
new file mode 100644
index 0000000..194d189
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-az/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM MM#2 təmin etmir"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM MM#3 dəstəkləmir"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-b+sr+Latn/strings.xml b/core/res/res/values-mcc310-mnc030-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..d306893
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-b+sr+Latn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM kartica nije podešena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-be/strings.xml b/core/res/res/values-mcc310-mnc030-be/strings.xml
new file mode 100644
index 0000000..12fef7a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-be/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM-карты няма MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM-карта не дапускаецца MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-bg/strings.xml b/core/res/res/values-mcc310-mnc030-bg/strings.xml
new file mode 100644
index 0000000..a7c014a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-bg/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM картата не е обезпечена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM картата не е разрешена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-bn/strings.xml b/core/res/res/values-mcc310-mnc030-bn/strings.xml
new file mode 100644
index 0000000..f07a3d6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-bn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"সিমের জন্য প্রস্তুত নয় MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"সিমের অনুমতি নেই MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-bs/strings.xml b/core/res/res/values-mcc310-mnc030-bs/strings.xml
new file mode 100644
index 0000000..1e6c7db
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-bs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM kartica nije dodijeljena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-ca/strings.xml b/core/res/res/values-mcc310-mnc030-ca/strings.xml
new file mode 100644
index 0000000..af25f9b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-ca/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"La SIM no està proporcionada a MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"La SIM no és compatible a MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-cs/strings.xml b/core/res/res/values-mcc310-mnc030-cs/strings.xml
new file mode 100644
index 0000000..ee0f90c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-cs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM karta není poskytována (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM karta není povolena (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-da/strings.xml b/core/res/res/values-mcc310-mnc030-da/strings.xml
new file mode 100644
index 0000000..8925c1a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-da/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM-kortet er ikke aktiveret MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM-kort er ikke tilladt MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-de/strings.xml b/core/res/res/values-mcc310-mnc030-de/strings.xml
new file mode 100644
index 0000000..ad797b5
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-de/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM-Karte nicht eingerichtet MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM-Karte nicht zulässig MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-el/strings.xml b/core/res/res/values-mcc310-mnc030-el/strings.xml
new file mode 100644
index 0000000..62aa97f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-el/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Δεν παρέχεται κάρτα SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"Η κάρτα SIM δεν επιτρέπεται MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-en-rAU/strings.xml b/core/res/res/values-mcc310-mnc030-en-rAU/strings.xml
new file mode 100644
index 0000000..1a50ac6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-en-rAU/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-en-rCA/strings.xml b/core/res/res/values-mcc310-mnc030-en-rCA/strings.xml
new file mode 100644
index 0000000..1a50ac6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-en-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-en-rGB/strings.xml b/core/res/res/values-mcc310-mnc030-en-rGB/strings.xml
new file mode 100644
index 0000000..1a50ac6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-en-rGB/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-en-rIN/strings.xml b/core/res/res/values-mcc310-mnc030-en-rIN/strings.xml
new file mode 100644
index 0000000..1a50ac6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-en-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-en-rXC/strings.xml b/core/res/res/values-mcc310-mnc030-en-rXC/strings.xml
new file mode 100644
index 0000000..5eb9cba
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-en-rXC/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎SIM not provisioned MM#2‎‏‎‎‏‎"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎‎SIM not allowed MM#3‎‏‎‎‏‎"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-es-rUS/strings.xml b/core/res/res/values-mcc310-mnc030-es-rUS/strings.xml
new file mode 100644
index 0000000..87226ac
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-es-rUS/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM no provista MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM no permitida MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-es/strings.xml b/core/res/res/values-mcc310-mnc030-es/strings.xml
new file mode 100644
index 0000000..c13f5f8
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-es/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM no proporcionada (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM no admitida (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-et/strings.xml b/core/res/res/values-mcc310-mnc030-et/strings.xml
new file mode 100644
index 0000000..07229ab
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-et/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM-kaart on ette valmistamata MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM-kaart pole lubatud MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-eu/strings.xml b/core/res/res/values-mcc310-mnc030-eu/strings.xml
new file mode 100644
index 0000000..024fbab
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-eu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Ez dago SIM txartelik MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"Ez da onartzen SIM txartela MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-fa/strings.xml b/core/res/res/values-mcc310-mnc030-fa/strings.xml
new file mode 100644
index 0000000..e754032
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-fa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"‏سیم‌کارت مجوز لازم را ندارد MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"‏سیم‌کارت مجاز نیست MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-fi/strings.xml b/core/res/res/values-mcc310-mnc030-fi/strings.xml
new file mode 100644
index 0000000..3b9c2ab
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-fi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM-kortti ei käyttäjien hallinnassa MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM-kortti estetty MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-fr-rCA/strings.xml b/core/res/res/values-mcc310-mnc030-fr-rCA/strings.xml
new file mode 100644
index 0000000..31644b7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-fr-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Carte SIM non configurée, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"Carte SIM non autorisée, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-fr/strings.xml b/core/res/res/values-mcc310-mnc030-fr/strings.xml
new file mode 100644
index 0000000..9c690e7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-fr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Carte SIM non provisionnée MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"Carte SIM non autorisée MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-gl/strings.xml b/core/res/res/values-mcc310-mnc030-gl/strings.xml
new file mode 100644
index 0000000..59be216
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-gl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Non se introduciu ningunha tarxeta SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"Non se admite a tarxeta SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-gu/strings.xml b/core/res/res/values-mcc310-mnc030-gu/strings.xml
new file mode 100644
index 0000000..ac57a85
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-gu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIMને MM#2ની જોગવાઈ નથી"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIMને MM#3 કરવાની મંજૂરી નથી"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-hi/strings.xml b/core/res/res/values-mcc310-mnc030-hi/strings.xml
new file mode 100644
index 0000000..244d175
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-hi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM काम नहीं कर रहा है MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM की अनुमति नहीं है MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-hr/strings.xml b/core/res/res/values-mcc310-mnc030-hr/strings.xml
new file mode 100644
index 0000000..a37043c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-hr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Ne pruža se usluga za SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM nije dopušten MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-hu/strings.xml b/core/res/res/values-mcc310-mnc030-hu/strings.xml
new file mode 100644
index 0000000..b26b2b2
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-hu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Nem engedélyezett SIM-kártya (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"A SIM-kártya nem engedélyezett (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-hy/strings.xml b/core/res/res/values-mcc310-mnc030-hy/strings.xml
new file mode 100644
index 0000000..0d052f3
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-hy/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM քարտը նախապատրաստված չէ (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM քարտի օգտագործումն արգելված է (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-in/strings.xml b/core/res/res/values-mcc310-mnc030-in/strings.xml
new file mode 100644
index 0000000..f8f6613
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-in/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM tidak di-provisioning MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM tidak diizinkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-is/strings.xml b/core/res/res/values-mcc310-mnc030-is/strings.xml
new file mode 100644
index 0000000..1033965
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-is/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM-korti ekki úthlutað MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM-kort ekki leyft MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-it/strings.xml b/core/res/res/values-mcc310-mnc030-it/strings.xml
new file mode 100644
index 0000000..fb74a97
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-it/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Scheda SIM non predisposta MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"Scheda SIM non consentita MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-iw/strings.xml b/core/res/res/values-mcc310-mnc030-iw/strings.xml
new file mode 100644
index 0000000..50bd517
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-iw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"‏כרטיס ה-SIM לא הופעל MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"‏כרטיס ה-SIM לא מורשה לשימוש ברשת הסלולרית MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-ja/strings.xml b/core/res/res/values-mcc310-mnc030-ja/strings.xml
new file mode 100644
index 0000000..78cd78c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-ja/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM には対応していません(MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM は許可されていません(MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-ka/strings.xml b/core/res/res/values-mcc310-mnc030-ka/strings.xml
new file mode 100644
index 0000000..04d6a7d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-ka/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM ბარათი უზრუნველყოფილი არ არის (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM ბარათი დაუშვებელია (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-kk/strings.xml b/core/res/res/values-mcc310-mnc030-kk/strings.xml
new file mode 100644
index 0000000..aad588c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-kk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM картасы қарастырылмаған MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM картасына рұқсат етілмеген MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-km/strings.xml b/core/res/res/values-mcc310-mnc030-km/strings.xml
new file mode 100644
index 0000000..bd99927
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-km/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"ស៊ីមកាត​មិនត្រូវបាន​ផ្ដល់ជូនទេ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"មិនអនុញ្ញាត​ចំពោះស៊ីមកាត​ទេ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-kn/strings.xml b/core/res/res/values-mcc310-mnc030-kn/strings.xml
new file mode 100644
index 0000000..39e9b070
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-kn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"MM#2 ಗೆ ಸಿಮ್‌ ಸಿದ್ಧವಾಗಿಲ್ಲ"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"ಸಿಮ್‌ MM#3 ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-ko/strings.xml b/core/res/res/values-mcc310-mnc030-ko/strings.xml
new file mode 100644
index 0000000..67e45b0
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-ko/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM이 프로비저닝되지 않음 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM이 허용되지 않음 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-ky/strings.xml b/core/res/res/values-mcc310-mnc030-ky/strings.xml
new file mode 100644
index 0000000..02ac153
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-ky/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM карта таанылган жок (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM картаны колдонууга тыюу салынган (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-lo/strings.xml b/core/res/res/values-mcc310-mnc030-lo/strings.xml
new file mode 100644
index 0000000..b41bf91
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-lo/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM ບໍ່ໄດ້ເປີດໃຊ້ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM ບໍ່ອະນຸຍາດ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-lt/strings.xml b/core/res/res/values-mcc310-mnc030-lt/strings.xml
new file mode 100644
index 0000000..59c66be
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-lt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM kortelė neteikiama (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM kortelė neleidžiama (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-lv/strings.xml b/core/res/res/values-mcc310-mnc030-lv/strings.xml
new file mode 100644
index 0000000..685c9b8
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-lv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM karte netiek nodrošināta: MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM karti nav atļauts izmantot: MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-mk/strings.xml b/core/res/res/values-mcc310-mnc030-mk/strings.xml
new file mode 100644
index 0000000..ce24e25
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-mk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Не е обезбедена SIM-картичка, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"Не е дозволена SIM-картичка, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-ml/strings.xml b/core/res/res/values-mcc310-mnc030-ml/strings.xml
new file mode 100644
index 0000000..9adfd9c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-ml/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"സിം MM#2 പ്രൊവിഷൻ ചെയ്‌തിട്ടില്ല"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"സിം MM#3 അനുവദിച്ചിട്ടില്ല"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-mn/strings.xml b/core/res/res/values-mcc310-mnc030-mn/strings.xml
new file mode 100644
index 0000000..6ff2d5e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-mn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM-г идэвхжүүлээгүй байна MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM-г зөвшөөрөөгүй байна MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-mr/strings.xml b/core/res/res/values-mcc310-mnc030-mr/strings.xml
new file mode 100644
index 0000000..afc40a1
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-mr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM ने MM#2 ची तरतूद केलेली नाही"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM ने MM#3 ला परवानगी दिली नाही"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-ms/strings.xml b/core/res/res/values-mcc310-mnc030-ms/strings.xml
new file mode 100644
index 0000000..9a54b04
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-ms/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM tidak diperuntukkan MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM tidak dibenarkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-my/strings.xml b/core/res/res/values-mcc310-mnc030-my/strings.xml
new file mode 100644
index 0000000..79a0791
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-my/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-nb/strings.xml b/core/res/res/values-mcc310-mnc030-nb/strings.xml
new file mode 100644
index 0000000..7c06dba
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-nb/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM-kortet er ikke klargjort, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM-kortet er ikke tillatt, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-ne/strings.xml b/core/res/res/values-mcc310-mnc030-ne/strings.xml
new file mode 100644
index 0000000..3ef06ab
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-ne/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM को प्रावधान छैन MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM लाई अनुमति छैन MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-nl/strings.xml b/core/res/res/values-mcc310-mnc030-nl/strings.xml
new file mode 100644
index 0000000..861385d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-nl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Simkaart niet geregistreerd MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"Simkaart niet toegestaan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-pa/strings.xml b/core/res/res/values-mcc310-mnc030-pa/strings.xml
new file mode 100644
index 0000000..ba7b614
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-pa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"ਸਿਮ ਦੀ ਵਿਵਸਥਾ ਨਹੀਂ ਹੈ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"ਸਿਮ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-pl/strings.xml b/core/res/res/values-mcc310-mnc030-pl/strings.xml
new file mode 100644
index 0000000..84ff351
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-pl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"MM#2 – karta SIM nieobsługiwana"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"MM#3 – niedozwolona karta SIM"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-pt-rBR/strings.xml b/core/res/res/values-mcc310-mnc030-pt-rBR/strings.xml
new file mode 100644
index 0000000..2679f93
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-pt-rBR/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-pt-rPT/strings.xml b/core/res/res/values-mcc310-mnc030-pt-rPT/strings.xml
new file mode 100644
index 0000000..2679f93
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-pt-rPT/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-pt/strings.xml b/core/res/res/values-mcc310-mnc030-pt/strings.xml
new file mode 100644
index 0000000..2679f93
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-pt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-ro/strings.xml b/core/res/res/values-mcc310-mnc030-ro/strings.xml
new file mode 100644
index 0000000..5bae0c0
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-ro/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Cardul SIM nu este activat MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"Cardul SIM nu este permis MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-ru/strings.xml b/core/res/res/values-mcc310-mnc030-ru/strings.xml
new file mode 100644
index 0000000..658badf
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-ru/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM-карта не активирована (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"Использование SIM-карты запрещено (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-si/strings.xml b/core/res/res/values-mcc310-mnc030-si/strings.xml
new file mode 100644
index 0000000..635ffa4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-si/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM MM#2 ප්‍රතිපාදනය නොකරයි"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM MM#3 ඉඩ නොදේ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-sk/strings.xml b/core/res/res/values-mcc310-mnc030-sk/strings.xml
new file mode 100644
index 0000000..2a046b6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-sk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM karta nie je k dispozícii – MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM karta je zakázaná – MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-sl/strings.xml b/core/res/res/values-mcc310-mnc030-sl/strings.xml
new file mode 100644
index 0000000..7321e4d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-sl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Kartica SIM ni omogočena za uporabo MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"Kartica SIM ni dovoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-sq/strings.xml b/core/res/res/values-mcc310-mnc030-sq/strings.xml
new file mode 100644
index 0000000..e553f01
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-sq/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Karta SIM nuk është dhënë MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"Karta SIM nuk lejohet MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-sr/strings.xml b/core/res/res/values-mcc310-mnc030-sr/strings.xml
new file mode 100644
index 0000000..945e2fc
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-sr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM картица није подешена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM картица није дозвољена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-sv/strings.xml b/core/res/res/values-mcc310-mnc030-sv/strings.xml
new file mode 100644
index 0000000..5f0cc46
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-sv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM-kort tillhandahålls inte MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM-kort tillåts inte MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-sw/strings.xml b/core/res/res/values-mcc310-mnc030-sw/strings.xml
new file mode 100644
index 0000000..fbd2076
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-sw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM haitumiki MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM hairuhusiwi MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-ta/strings.xml b/core/res/res/values-mcc310-mnc030-ta/strings.xml
new file mode 100644
index 0000000..6fc3df6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-ta/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"சிம் அமைக்கப்படவில்லை MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"சிம் அனுமதிக்கப்படவில்லை MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-te/strings.xml b/core/res/res/values-mcc310-mnc030-te/strings.xml
new file mode 100644
index 0000000..4c61791
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-te/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM MM#2ని సక్రియం చేయలేదు"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM MM#3ని అనుమతించలేదు"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-th/strings.xml b/core/res/res/values-mcc310-mnc030-th/strings.xml
new file mode 100644
index 0000000..9a8ee74
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-th/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"ไม่มีการจัดสรรซิม MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"ไม่อนุญาตให้ใช้ซิม MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-tl/strings.xml b/core/res/res/values-mcc310-mnc030-tl/strings.xml
new file mode 100644
index 0000000..6408f4e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-tl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"Hindi na-provision ang SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"Hindi pinapahintulutan ang SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-tr/strings.xml b/core/res/res/values-mcc310-mnc030-tr/strings.xml
new file mode 100644
index 0000000..361ee9c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-tr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM, MM#2\'nin temel hazırlığını yapamadı"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM MM#3\'e izin vermiyor"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-uk/strings.xml b/core/res/res/values-mcc310-mnc030-uk/strings.xml
new file mode 100644
index 0000000..efee94e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-uk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM-карту не надано (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM-карта заборонена (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-ur/strings.xml b/core/res/res/values-mcc310-mnc030-ur/strings.xml
new file mode 100644
index 0000000..a0e5fd6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-ur/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"‏SIM فراہم کردہ نہیں ہے MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"‏SIM کی اجازت نہیں ہے MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-uz/strings.xml b/core/res/res/values-mcc310-mnc030-uz/strings.xml
new file mode 100644
index 0000000..7eb641a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-uz/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM karta ishlatish taqiqlangan (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM karta ishlatish taqiqlangan (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-vi/strings.xml b/core/res/res/values-mcc310-mnc030-vi/strings.xml
new file mode 100644
index 0000000..362ee6a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-vi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"SIM không được cấp phép MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"SIM không được phép MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-zh-rCN/strings.xml b/core/res/res/values-mcc310-mnc030-zh-rCN/strings.xml
new file mode 100644
index 0000000..efa43f5
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-zh-rCN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"未配置的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"不被允许的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-zh-rHK/strings.xml b/core/res/res/values-mcc310-mnc030-zh-rHK/strings.xml
new file mode 100644
index 0000000..c163544
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-zh-rHK/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-zh-rTW/strings.xml b/core/res/res/values-mcc310-mnc030-zh-rTW/strings.xml
new file mode 100644
index 0000000..c163544
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-zh-rTW/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030-zu/strings.xml b/core/res/res/values-mcc310-mnc030-zu/strings.xml
new file mode 100644
index 0000000..720fa82
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030-zu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6575159319460304530">"I-SIM ayinikezelwe MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1930079814544869756">"I-SIM ayivunyelwe MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc030/strings.xml b/core/res/res/values-mcc310-mnc030/strings.xml
new file mode 100644
index 0000000..a3fea29
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc030/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR 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="mmcc_imsi_unknown_in_hlr">SIM not provisioned MM#2</string>
+    <string name="mmcc_illegal_ms">SIM not allowed MM#3</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc150/config.xml b/core/res/res/values-mcc310-mnc150/config.xml
index e1f696e..e7d1325 100644
--- a/core/res/res/values-mcc310-mnc150/config.xml
+++ b/core/res/res/values-mcc310-mnc150/config.xml
@@ -18,23 +18,6 @@
 -->
 
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Show roaming icon though same named operators. -->
-    <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
-        <item>310110</item>
-        <item>310140</item>
-        <item>310400</item>
-        <item>310470</item>
-        <item>311170</item>
-    </string-array>
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>310</item>
-        <item>311</item>
-        <item>312</item>
-        <item>313</item>
-        <item>314</item>
-        <item>315</item>
-        <item>316</item>
-    </string-array>
     <string-array translatable="false" name="config_twoDigitNumberPattern">
         <item>"0"</item>
         <item>"00"</item>
diff --git a/core/res/res/values-mcc310-mnc170 b/core/res/res/values-mcc310-mnc170
deleted file mode 120000
index cfced17..0000000
--- a/core/res/res/values-mcc310-mnc170
+++ /dev/null
@@ -1 +0,0 @@
-./values-mcc310-mnc150
\ No newline at end of file
diff --git a/core/res/res/values-mcc310-mnc170-af/strings.xml b/core/res/res/values-mcc310-mnc170-af/strings.xml
new file mode 100644
index 0000000..4256d3a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-af/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM is nie opgestel nie MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM word nie toegelaat nie MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-am/strings.xml b/core/res/res/values-mcc310-mnc170-am/strings.xml
new file mode 100644
index 0000000..311d9e1
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-am/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"ሲም አልቀረበም MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"ሲም አይፈቀድም MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-ar/strings.xml b/core/res/res/values-mcc310-mnc170-ar/strings.xml
new file mode 100644
index 0000000..a80ff2e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-ar/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"‏لم يتم توفير SIM ‏MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"‏غير مسموح باستخدام SIM ‏MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-az/strings.xml b/core/res/res/values-mcc310-mnc170-az/strings.xml
new file mode 100644
index 0000000..a690668
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-az/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM MM#2 təmin etmir"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM MM#3 dəstəkləmir"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-b+sr+Latn/strings.xml b/core/res/res/values-mcc310-mnc170-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..b2da8a7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-b+sr+Latn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM kartica nije podešena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-be/strings.xml b/core/res/res/values-mcc310-mnc170-be/strings.xml
new file mode 100644
index 0000000..fb7f556
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-be/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM-карты няма MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM-карта не дапускаецца MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-bg/strings.xml b/core/res/res/values-mcc310-mnc170-bg/strings.xml
new file mode 100644
index 0000000..1158b3b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-bg/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM картата не е обезпечена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM картата не е разрешена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-bn/strings.xml b/core/res/res/values-mcc310-mnc170-bn/strings.xml
new file mode 100644
index 0000000..4e6d41b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-bn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"সিমের জন্য প্রস্তুত নয় MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"সিমের অনুমতি নেই MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-bs/strings.xml b/core/res/res/values-mcc310-mnc170-bs/strings.xml
new file mode 100644
index 0000000..d3f3e3b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-bs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM kartica nije dodijeljena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-ca/strings.xml b/core/res/res/values-mcc310-mnc170-ca/strings.xml
new file mode 100644
index 0000000..9abeeb7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-ca/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"La SIM no està proporcionada a MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"La SIM no és compatible a MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-cs/strings.xml b/core/res/res/values-mcc310-mnc170-cs/strings.xml
new file mode 100644
index 0000000..2d4d2fb
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-cs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM karta není poskytována (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM karta není povolena (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-da/strings.xml b/core/res/res/values-mcc310-mnc170-da/strings.xml
new file mode 100644
index 0000000..7566d10
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-da/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM-kortet er ikke aktiveret MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM-kort er ikke tilladt MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-de/strings.xml b/core/res/res/values-mcc310-mnc170-de/strings.xml
new file mode 100644
index 0000000..f7c5eec
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-de/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM-Karte nicht eingerichtet MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM-Karte nicht zulässig MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-el/strings.xml b/core/res/res/values-mcc310-mnc170-el/strings.xml
new file mode 100644
index 0000000..68b7008
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-el/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Δεν παρέχεται κάρτα SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"Η κάρτα SIM δεν επιτρέπεται MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-en-rAU/strings.xml b/core/res/res/values-mcc310-mnc170-en-rAU/strings.xml
new file mode 100644
index 0000000..fd16620
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-en-rAU/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-en-rCA/strings.xml b/core/res/res/values-mcc310-mnc170-en-rCA/strings.xml
new file mode 100644
index 0000000..fd16620
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-en-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-en-rGB/strings.xml b/core/res/res/values-mcc310-mnc170-en-rGB/strings.xml
new file mode 100644
index 0000000..fd16620
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-en-rGB/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-en-rIN/strings.xml b/core/res/res/values-mcc310-mnc170-en-rIN/strings.xml
new file mode 100644
index 0000000..fd16620
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-en-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-en-rXC/strings.xml b/core/res/res/values-mcc310-mnc170-en-rXC/strings.xml
new file mode 100644
index 0000000..71d087e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-en-rXC/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎SIM not provisioned MM#2‎‏‎‎‏‎"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‎SIM not allowed MM#3‎‏‎‎‏‎"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-es-rUS/strings.xml b/core/res/res/values-mcc310-mnc170-es-rUS/strings.xml
new file mode 100644
index 0000000..50d3c12
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-es-rUS/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM no provista MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM no permitida MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-es/strings.xml b/core/res/res/values-mcc310-mnc170-es/strings.xml
new file mode 100644
index 0000000..7191d04
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-es/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM no proporcionada (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM no admitida (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-et/strings.xml b/core/res/res/values-mcc310-mnc170-et/strings.xml
new file mode 100644
index 0000000..7159bf9
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-et/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM-kaart on ette valmistamata MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM-kaart pole lubatud MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-eu/strings.xml b/core/res/res/values-mcc310-mnc170-eu/strings.xml
new file mode 100644
index 0000000..797f988
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-eu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Ez dago SIM txartelik MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"Ez da onartzen SIM txartela MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-fa/strings.xml b/core/res/res/values-mcc310-mnc170-fa/strings.xml
new file mode 100644
index 0000000..968f952
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-fa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"‏سیم‌کارت مجوز لازم را ندارد MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"‏سیم‌کارت مجاز نیست MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-fi/strings.xml b/core/res/res/values-mcc310-mnc170-fi/strings.xml
new file mode 100644
index 0000000..c0523f4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-fi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM-kortti ei käyttäjien hallinnassa MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM-kortti estetty MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-fr-rCA/strings.xml b/core/res/res/values-mcc310-mnc170-fr-rCA/strings.xml
new file mode 100644
index 0000000..5600fa4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-fr-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Carte SIM non configurée, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"Carte SIM non autorisée, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-fr/strings.xml b/core/res/res/values-mcc310-mnc170-fr/strings.xml
new file mode 100644
index 0000000..73b4f0e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-fr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Carte SIM non provisionnée MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"Carte SIM non autorisée MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-gl/strings.xml b/core/res/res/values-mcc310-mnc170-gl/strings.xml
new file mode 100644
index 0000000..fe13211
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-gl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Non se introduciu ningunha tarxeta SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"Non se admite a tarxeta SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-gu/strings.xml b/core/res/res/values-mcc310-mnc170-gu/strings.xml
new file mode 100644
index 0000000..60eba5b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-gu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIMને MM#2ની જોગવાઈ નથી"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIMને MM#3 કરવાની મંજૂરી નથી"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-hi/strings.xml b/core/res/res/values-mcc310-mnc170-hi/strings.xml
new file mode 100644
index 0000000..eb350b0
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-hi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM काम नहीं कर रहा है MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM की अनुमति नहीं है MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-hr/strings.xml b/core/res/res/values-mcc310-mnc170-hr/strings.xml
new file mode 100644
index 0000000..d5cf025
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-hr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Ne pruža se usluga za SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM nije dopušten MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-hu/strings.xml b/core/res/res/values-mcc310-mnc170-hu/strings.xml
new file mode 100644
index 0000000..e05e700
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-hu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Nem engedélyezett SIM-kártya (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"A SIM-kártya nem engedélyezett (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-hy/strings.xml b/core/res/res/values-mcc310-mnc170-hy/strings.xml
new file mode 100644
index 0000000..90a5f6d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-hy/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM քարտը նախապատրաստված չէ (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM քարտի օգտագործումն արգելված է (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-in/strings.xml b/core/res/res/values-mcc310-mnc170-in/strings.xml
new file mode 100644
index 0000000..fc1bd0a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-in/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM tidak di-provisioning MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM tidak diizinkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-is/strings.xml b/core/res/res/values-mcc310-mnc170-is/strings.xml
new file mode 100644
index 0000000..eef786c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-is/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM-korti ekki úthlutað MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM-kort ekki leyft MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-it/strings.xml b/core/res/res/values-mcc310-mnc170-it/strings.xml
new file mode 100644
index 0000000..eaf0abc
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-it/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Scheda SIM non predisposta MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"Scheda SIM non consentita MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-iw/strings.xml b/core/res/res/values-mcc310-mnc170-iw/strings.xml
new file mode 100644
index 0000000..edee703
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-iw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"‏כרטיס ה-SIM לא הופעל MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"‏כרטיס ה-SIM לא מורשה לשימוש ברשת הסלולרית MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-ja/strings.xml b/core/res/res/values-mcc310-mnc170-ja/strings.xml
new file mode 100644
index 0000000..6942641
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-ja/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM には対応していません(MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM は許可されていません(MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-ka/strings.xml b/core/res/res/values-mcc310-mnc170-ka/strings.xml
new file mode 100644
index 0000000..6f6c4aa
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-ka/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM ბარათი უზრუნველყოფილი არ არის (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM ბარათი დაუშვებელია (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-kk/strings.xml b/core/res/res/values-mcc310-mnc170-kk/strings.xml
new file mode 100644
index 0000000..210fb31
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-kk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM картасы қарастырылмаған MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM картасына рұқсат етілмеген MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-km/strings.xml b/core/res/res/values-mcc310-mnc170-km/strings.xml
new file mode 100644
index 0000000..79acf48
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-km/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"ស៊ីមកាត​មិនត្រូវបានផ្ដល់ជូនទេ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"មិនអនុញ្ញាត​ចំពោះស៊ីមកាតទេ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-kn/strings.xml b/core/res/res/values-mcc310-mnc170-kn/strings.xml
new file mode 100644
index 0000000..e11523b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-kn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"MM#2 ಗೆ ಸಿಮ್‌ ಸಿದ್ಧವಾಗಿಲ್ಲ"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"ಸಿಮ್‌ MM#3 ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-ko/strings.xml b/core/res/res/values-mcc310-mnc170-ko/strings.xml
new file mode 100644
index 0000000..22d7e35
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-ko/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM이 프로비저닝되지 않음 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM이 허용되지 않음 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-ky/strings.xml b/core/res/res/values-mcc310-mnc170-ky/strings.xml
new file mode 100644
index 0000000..1f07c68
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-ky/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM карта таанылган жок (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM картаны колдонууга тыюу салынган (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-lo/strings.xml b/core/res/res/values-mcc310-mnc170-lo/strings.xml
new file mode 100644
index 0000000..3073000
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-lo/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM ບໍ່ໄດ້ເປີດໃຊ້ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM ບໍ່ອະນຸຍາດ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-lt/strings.xml b/core/res/res/values-mcc310-mnc170-lt/strings.xml
new file mode 100644
index 0000000..127e69f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-lt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM kortelė neteikiama (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM kortelė neleidžiama (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-lv/strings.xml b/core/res/res/values-mcc310-mnc170-lv/strings.xml
new file mode 100644
index 0000000..da2ff7c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-lv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM karte netiek nodrošināta: MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM karti nav atļauts izmantot: MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-mk/strings.xml b/core/res/res/values-mcc310-mnc170-mk/strings.xml
new file mode 100644
index 0000000..3bc8194
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-mk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Не е обезбедена SIM-картичка, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"Не е дозволена SIM-картичка, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-ml/strings.xml b/core/res/res/values-mcc310-mnc170-ml/strings.xml
new file mode 100644
index 0000000..0479aef
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-ml/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"സിം MM#2 പ്രൊവിഷൻ ചെയ്‌തിട്ടില്ല"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"സിം MM#3 അനുവദിച്ചിട്ടില്ല"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-mn/strings.xml b/core/res/res/values-mcc310-mnc170-mn/strings.xml
new file mode 100644
index 0000000..59f24ec
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-mn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM-г идэвхжүүлээгүй байна MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM-г зөвшөөрөөгүй байна MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-mr/strings.xml b/core/res/res/values-mcc310-mnc170-mr/strings.xml
new file mode 100644
index 0000000..938207c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-mr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM ने MM#2 ची तरतूद केलेली नाही"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM ने MM#3 ला परवानगी दिली नाही"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-ms/strings.xml b/core/res/res/values-mcc310-mnc170-ms/strings.xml
new file mode 100644
index 0000000..36be774
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-ms/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM tidak diperuntukkan MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM tidak dibenarkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-my/strings.xml b/core/res/res/values-mcc310-mnc170-my/strings.xml
new file mode 100644
index 0000000..61f1a67
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-my/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-nb/strings.xml b/core/res/res/values-mcc310-mnc170-nb/strings.xml
new file mode 100644
index 0000000..3f213da
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-nb/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM-kortet er ikke klargjort, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM-kortet er ikke tillatt, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-ne/strings.xml b/core/res/res/values-mcc310-mnc170-ne/strings.xml
new file mode 100644
index 0000000..d7febc4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-ne/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM को प्रावधान छैन MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM लाई अनुमति छैन MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-nl/strings.xml b/core/res/res/values-mcc310-mnc170-nl/strings.xml
new file mode 100644
index 0000000..b1f9ba8
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-nl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Simkaart niet geregistreerd MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"Simkaart niet toegestaan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-pa/strings.xml b/core/res/res/values-mcc310-mnc170-pa/strings.xml
new file mode 100644
index 0000000..9e993e3
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-pa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"ਸਿਮ ਦੀ ਵਿਵਸਥਾ ਨਹੀਂ ਹੈ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"ਸਿਮ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-pl/strings.xml b/core/res/res/values-mcc310-mnc170-pl/strings.xml
new file mode 100644
index 0000000..d1ecd5d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-pl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"MM#2 – karta SIM nieobsługiwana"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"MM#3 – niedozwolona karta SIM"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-pt-rBR/strings.xml b/core/res/res/values-mcc310-mnc170-pt-rBR/strings.xml
new file mode 100644
index 0000000..fc31e9e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-pt-rBR/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-pt-rPT/strings.xml b/core/res/res/values-mcc310-mnc170-pt-rPT/strings.xml
new file mode 100644
index 0000000..fc31e9e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-pt-rPT/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-pt/strings.xml b/core/res/res/values-mcc310-mnc170-pt/strings.xml
new file mode 100644
index 0000000..fc31e9e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-pt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-ro/strings.xml b/core/res/res/values-mcc310-mnc170-ro/strings.xml
new file mode 100644
index 0000000..1ee5080
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-ro/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Cardul SIM nu este activat MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"Cardul SIM nu este permis MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-ru/strings.xml b/core/res/res/values-mcc310-mnc170-ru/strings.xml
new file mode 100644
index 0000000..0e00909
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-ru/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM-карта не активирована (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"Использование SIM-карты запрещено (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-si/strings.xml b/core/res/res/values-mcc310-mnc170-si/strings.xml
new file mode 100644
index 0000000..bbd1e4c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-si/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM MM#2 ප්‍රතිපාදනය නොකරයි"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM MM#3 ඉඩ නොදේ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-sk/strings.xml b/core/res/res/values-mcc310-mnc170-sk/strings.xml
new file mode 100644
index 0000000..e5f9376
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-sk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM karta nie je k dispozícii – MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM karta je zakázaná – MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-sl/strings.xml b/core/res/res/values-mcc310-mnc170-sl/strings.xml
new file mode 100644
index 0000000..2d4c7dd
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-sl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Kartica SIM ni omogočena za uporabo MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"Kartica SIM ni dovoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-sq/strings.xml b/core/res/res/values-mcc310-mnc170-sq/strings.xml
new file mode 100644
index 0000000..df5b537
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-sq/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Karta SIM nuk është dhënë MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"Karta SIM nuk lejohet MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-sr/strings.xml b/core/res/res/values-mcc310-mnc170-sr/strings.xml
new file mode 100644
index 0000000..6bfbbb2
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-sr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM картица није подешена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM картица није дозвољена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-sv/strings.xml b/core/res/res/values-mcc310-mnc170-sv/strings.xml
new file mode 100644
index 0000000..1a28db1
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-sv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM-kort tillhandahålls inte MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM-kort tillåts inte MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-sw/strings.xml b/core/res/res/values-mcc310-mnc170-sw/strings.xml
new file mode 100644
index 0000000..0852115
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-sw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM haitumiki MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM hairuhusiwi MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-ta/strings.xml b/core/res/res/values-mcc310-mnc170-ta/strings.xml
new file mode 100644
index 0000000..0277cc2
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-ta/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"சிம் அமைக்கப்படவில்லை MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"சிம் அனுமதிக்கப்படவில்லை MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-te/strings.xml b/core/res/res/values-mcc310-mnc170-te/strings.xml
new file mode 100644
index 0000000..a208cd3
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-te/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM MM#2ని సక్రియం చేయలేదు"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM MM#3ని అనుమతించలేదు"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-th/strings.xml b/core/res/res/values-mcc310-mnc170-th/strings.xml
new file mode 100644
index 0000000..e5d02c8
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-th/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"ไม่มีการจัดสรรซิม MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"ไม่อนุญาตให้ใช้ซิม MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-tl/strings.xml b/core/res/res/values-mcc310-mnc170-tl/strings.xml
new file mode 100644
index 0000000..e285759
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-tl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"Hindi na-provision ang SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"Hindi pinapahintulutan ang SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-tr/strings.xml b/core/res/res/values-mcc310-mnc170-tr/strings.xml
new file mode 100644
index 0000000..b5102ef
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-tr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM, MM#2\'nin temel hazırlığını yapamadı"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM MM#3\'e izin vermiyor"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-uk/strings.xml b/core/res/res/values-mcc310-mnc170-uk/strings.xml
new file mode 100644
index 0000000..37e3118
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-uk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM-карту не надано (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM-карта заборонена (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-ur/strings.xml b/core/res/res/values-mcc310-mnc170-ur/strings.xml
new file mode 100644
index 0000000..ea8b93e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-ur/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"‏SIM فراہم کردہ نہیں ہے MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"‏SIM کی اجازت نہیں ہے MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-uz/strings.xml b/core/res/res/values-mcc310-mnc170-uz/strings.xml
new file mode 100644
index 0000000..0bb3f52
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-uz/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM karta ishlatish taqiqlangan (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM karta ishlatish taqiqlangan (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-vi/strings.xml b/core/res/res/values-mcc310-mnc170-vi/strings.xml
new file mode 100644
index 0000000..a37f48f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-vi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"SIM không được cấp phép MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"SIM không được phép MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-zh-rCN/strings.xml b/core/res/res/values-mcc310-mnc170-zh-rCN/strings.xml
new file mode 100644
index 0000000..f072b28
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-zh-rCN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"未配置的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"不被允许的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-zh-rHK/strings.xml b/core/res/res/values-mcc310-mnc170-zh-rHK/strings.xml
new file mode 100644
index 0000000..db14b90
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-zh-rHK/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-zh-rTW/strings.xml b/core/res/res/values-mcc310-mnc170-zh-rTW/strings.xml
new file mode 100644
index 0000000..db14b90
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-zh-rTW/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170-zu/strings.xml b/core/res/res/values-mcc310-mnc170-zu/strings.xml
new file mode 100644
index 0000000..282f403
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170-zu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="210168420192421012">"I-SIM ayinikezelwe MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1130721094178658338">"I-SIM ayivunyelwe MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc170/strings.xml b/core/res/res/values-mcc310-mnc170/strings.xml
new file mode 100644
index 0000000..a3fea29
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc170/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR 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="mmcc_imsi_unknown_in_hlr">SIM not provisioned MM#2</string>
+    <string name="mmcc_illegal_ms">SIM not allowed MM#3</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-af/strings.xml b/core/res/res/values-mcc310-mnc280-af/strings.xml
new file mode 100644
index 0000000..a761881
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-af/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM is nie opgestel nie MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM word nie toegelaat nie MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-am/strings.xml b/core/res/res/values-mcc310-mnc280-am/strings.xml
new file mode 100644
index 0000000..6750a71
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-am/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"ሲም አልቀረበም MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"ሲም አይፈቀድም MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-ar/strings.xml b/core/res/res/values-mcc310-mnc280-ar/strings.xml
new file mode 100644
index 0000000..a77d78e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-ar/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"‏لم يتم توفير SIM ‏MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"‏غير مسموح باستخدام SIM ‏MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-az/strings.xml b/core/res/res/values-mcc310-mnc280-az/strings.xml
new file mode 100644
index 0000000..b7ee114
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-az/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM MM#2 təmin etmir"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM MM#3 dəstəkləmir"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-b+sr+Latn/strings.xml b/core/res/res/values-mcc310-mnc280-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..0c78b5e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-b+sr+Latn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM kartica nije podešena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-be/strings.xml b/core/res/res/values-mcc310-mnc280-be/strings.xml
new file mode 100644
index 0000000..3ee9ad9
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-be/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM-карты няма MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM-карта не дапускаецца MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-bg/strings.xml b/core/res/res/values-mcc310-mnc280-bg/strings.xml
new file mode 100644
index 0000000..a320898
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-bg/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM картата не е обезпечена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM картата не е разрешена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-bn/strings.xml b/core/res/res/values-mcc310-mnc280-bn/strings.xml
new file mode 100644
index 0000000..dc950a7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-bn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"সিমের জন্য প্রস্তুত নয় MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"সিমের অনুমতি নেই MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-bs/strings.xml b/core/res/res/values-mcc310-mnc280-bs/strings.xml
new file mode 100644
index 0000000..d61fad8
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-bs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM kartica nije dodijeljena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-ca/strings.xml b/core/res/res/values-mcc310-mnc280-ca/strings.xml
new file mode 100644
index 0000000..9a9e309
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-ca/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"La SIM no està proporcionada a MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"La SIM no és compatible a MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-cs/strings.xml b/core/res/res/values-mcc310-mnc280-cs/strings.xml
new file mode 100644
index 0000000..99e2bdb
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-cs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM karta není poskytována (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM karta není povolena (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-da/strings.xml b/core/res/res/values-mcc310-mnc280-da/strings.xml
new file mode 100644
index 0000000..80fd3ab
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-da/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM-kortet er ikke aktiveret MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM-kort er ikke tilladt MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-de/strings.xml b/core/res/res/values-mcc310-mnc280-de/strings.xml
new file mode 100644
index 0000000..063c75b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-de/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM-Karte nicht eingerichtet MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM-Karte nicht zulässig MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-el/strings.xml b/core/res/res/values-mcc310-mnc280-el/strings.xml
new file mode 100644
index 0000000..1161a7d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-el/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Δεν παρέχεται κάρτα SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"Η κάρτα SIM δεν επιτρέπεται MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-en-rAU/strings.xml b/core/res/res/values-mcc310-mnc280-en-rAU/strings.xml
new file mode 100644
index 0000000..e9c9eba
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-en-rAU/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-en-rCA/strings.xml b/core/res/res/values-mcc310-mnc280-en-rCA/strings.xml
new file mode 100644
index 0000000..e9c9eba
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-en-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-en-rGB/strings.xml b/core/res/res/values-mcc310-mnc280-en-rGB/strings.xml
new file mode 100644
index 0000000..e9c9eba
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-en-rGB/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-en-rIN/strings.xml b/core/res/res/values-mcc310-mnc280-en-rIN/strings.xml
new file mode 100644
index 0000000..e9c9eba
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-en-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-en-rXC/strings.xml b/core/res/res/values-mcc310-mnc280-en-rXC/strings.xml
new file mode 100644
index 0000000..83640ae
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-en-rXC/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‏‎‏‏‎SIM not provisioned MM#2‎‏‎‎‏‎"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‎SIM not allowed MM#3‎‏‎‎‏‎"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-es-rUS/strings.xml b/core/res/res/values-mcc310-mnc280-es-rUS/strings.xml
new file mode 100644
index 0000000..86ad4fd
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-es-rUS/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM no provista MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM no permitida MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-es/strings.xml b/core/res/res/values-mcc310-mnc280-es/strings.xml
new file mode 100644
index 0000000..2c7aa93
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-es/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM no proporcionada (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM no admitida (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-et/strings.xml b/core/res/res/values-mcc310-mnc280-et/strings.xml
new file mode 100644
index 0000000..7305d18
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-et/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM-kaart on ette valmistamata MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM-kaart pole lubatud MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-eu/strings.xml b/core/res/res/values-mcc310-mnc280-eu/strings.xml
new file mode 100644
index 0000000..3c7296d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-eu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Ez dago SIM txartelik MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"Ez da onartzen SIM txartela MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-fa/strings.xml b/core/res/res/values-mcc310-mnc280-fa/strings.xml
new file mode 100644
index 0000000..cd7ce85
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-fa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"‏سیم‌کارت مجوز لازم را ندارد MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"‏سیم‌کارت مجاز نیست MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-fi/strings.xml b/core/res/res/values-mcc310-mnc280-fi/strings.xml
new file mode 100644
index 0000000..b2ccc50
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-fi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM-kortti ei käyttäjien hallinnassa MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM-kortti estetty MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-fr-rCA/strings.xml b/core/res/res/values-mcc310-mnc280-fr-rCA/strings.xml
new file mode 100644
index 0000000..29bb9a0
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-fr-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Carte SIM non configurée, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"Carte SIM non autorisée, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-fr/strings.xml b/core/res/res/values-mcc310-mnc280-fr/strings.xml
new file mode 100644
index 0000000..ce2f931
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-fr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Carte SIM non provisionnée MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"Carte SIM non autorisée MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-gl/strings.xml b/core/res/res/values-mcc310-mnc280-gl/strings.xml
new file mode 100644
index 0000000..e941341
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-gl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Non se introduciu ningunha tarxeta SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"Non se admite a tarxeta SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-gu/strings.xml b/core/res/res/values-mcc310-mnc280-gu/strings.xml
new file mode 100644
index 0000000..a3763be
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-gu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIMને MM#2ની જોગવાઈ નથી"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIMને MM#3 કરવાની મંજૂરી નથી"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-hi/strings.xml b/core/res/res/values-mcc310-mnc280-hi/strings.xml
new file mode 100644
index 0000000..ce866af
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-hi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM काम नहीं कर रहा है MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM की अनुमति नहीं है MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-hr/strings.xml b/core/res/res/values-mcc310-mnc280-hr/strings.xml
new file mode 100644
index 0000000..0021474
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-hr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Ne pruža se usluga za SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM nije dopušten MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-hu/strings.xml b/core/res/res/values-mcc310-mnc280-hu/strings.xml
new file mode 100644
index 0000000..864faff
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-hu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Nem engedélyezett SIM-kártya (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"A SIM-kártya nem engedélyezett (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-hy/strings.xml b/core/res/res/values-mcc310-mnc280-hy/strings.xml
new file mode 100644
index 0000000..6d027c3
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-hy/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM քարտը նախապատրաստված չէ (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM քարտի օգտագործումն արգելված է (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-in/strings.xml b/core/res/res/values-mcc310-mnc280-in/strings.xml
new file mode 100644
index 0000000..a4f3486
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-in/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM tidak di-provisioning MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM tidak diizinkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-is/strings.xml b/core/res/res/values-mcc310-mnc280-is/strings.xml
new file mode 100644
index 0000000..30bbea4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-is/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM-korti ekki úthlutað MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM-kort ekki leyft MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-it/strings.xml b/core/res/res/values-mcc310-mnc280-it/strings.xml
new file mode 100644
index 0000000..f83921b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-it/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Scheda SIM non predisposta MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"Scheda SIM non consentita MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-iw/strings.xml b/core/res/res/values-mcc310-mnc280-iw/strings.xml
new file mode 100644
index 0000000..f3f87ff
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-iw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"‏כרטיס ה-SIM לא הופעל MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"‏כרטיס ה-SIM לא מורשה לשימוש ברשת הסלולרית MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-ja/strings.xml b/core/res/res/values-mcc310-mnc280-ja/strings.xml
new file mode 100644
index 0000000..a1cfd8b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-ja/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM には対応していません(MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM は許可されていません(MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-ka/strings.xml b/core/res/res/values-mcc310-mnc280-ka/strings.xml
new file mode 100644
index 0000000..91c434f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-ka/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM ბარათი უზრუნველყოფილი არ არის (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM ბარათი დაუშვებელია (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-kk/strings.xml b/core/res/res/values-mcc310-mnc280-kk/strings.xml
new file mode 100644
index 0000000..44440d3
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-kk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM картасы қарастырылмаған MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM картасына рұқсат етілмеген MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-km/strings.xml b/core/res/res/values-mcc310-mnc280-km/strings.xml
new file mode 100644
index 0000000..a016601
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-km/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"ស៊ីមកាត​មិនត្រូវបានផ្ដល់ជូនទេ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"មិនអនុញ្ញាត​ចំពោះស៊ីមកាតទេ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-kn/strings.xml b/core/res/res/values-mcc310-mnc280-kn/strings.xml
new file mode 100644
index 0000000..1d9e353
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-kn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"MM#2 ಗೆ ಸಿಮ್‌ ಸಿದ್ಧವಾಗಿಲ್ಲ"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"ಸಿಮ್‌ MM#3 ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-ko/strings.xml b/core/res/res/values-mcc310-mnc280-ko/strings.xml
new file mode 100644
index 0000000..e7bb9bb
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-ko/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM이 프로비저닝되지 않음 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM이 허용되지 않음 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-ky/strings.xml b/core/res/res/values-mcc310-mnc280-ky/strings.xml
new file mode 100644
index 0000000..85483c7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-ky/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM карта таанылган жок (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM картаны колдонууга тыюу салынган (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-lo/strings.xml b/core/res/res/values-mcc310-mnc280-lo/strings.xml
new file mode 100644
index 0000000..9415089
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-lo/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM ບໍ່ໄດ້ເປີດໃຊ້ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM ບໍ່ອະນຸຍາດ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-lt/strings.xml b/core/res/res/values-mcc310-mnc280-lt/strings.xml
new file mode 100644
index 0000000..b5ff1b9
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-lt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM kortelė neteikiama (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM kortelė neleidžiama (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-lv/strings.xml b/core/res/res/values-mcc310-mnc280-lv/strings.xml
new file mode 100644
index 0000000..4034bc1
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-lv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM karte netiek nodrošināta: MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM karti nav atļauts izmantot: MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-mk/strings.xml b/core/res/res/values-mcc310-mnc280-mk/strings.xml
new file mode 100644
index 0000000..a93cb79
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-mk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Не е обезбедена SIM-картичка, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"Не е дозволена SIM-картичка, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-ml/strings.xml b/core/res/res/values-mcc310-mnc280-ml/strings.xml
new file mode 100644
index 0000000..4aa7dec
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-ml/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"സിം MM#2 പ്രൊവിഷൻ ചെയ്‌തിട്ടില്ല"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"സിം MM#3 അനുവദിച്ചിട്ടില്ല"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-mn/strings.xml b/core/res/res/values-mcc310-mnc280-mn/strings.xml
new file mode 100644
index 0000000..54b8190
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-mn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM-г идэвхжүүлээгүй байна MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM-г зөвшөөрөөгүй байна MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-mr/strings.xml b/core/res/res/values-mcc310-mnc280-mr/strings.xml
new file mode 100644
index 0000000..cb343cb
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-mr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM ने MM#2 ची तरतूद केलेली नाही"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM ने MM#3 ला परवानगी दिली नाही"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-ms/strings.xml b/core/res/res/values-mcc310-mnc280-ms/strings.xml
new file mode 100644
index 0000000..27da747
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-ms/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM tidak diperuntukkan MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM tidak dibenarkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-my/strings.xml b/core/res/res/values-mcc310-mnc280-my/strings.xml
new file mode 100644
index 0000000..40cdc63
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-my/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-nb/strings.xml b/core/res/res/values-mcc310-mnc280-nb/strings.xml
new file mode 100644
index 0000000..7666c3e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-nb/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM-kortet er ikke klargjort, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM-kortet er ikke tillatt, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-ne/strings.xml b/core/res/res/values-mcc310-mnc280-ne/strings.xml
new file mode 100644
index 0000000..8735605
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-ne/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM को प्रावधान छैन MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM लाई अनुमति छैन MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-nl/strings.xml b/core/res/res/values-mcc310-mnc280-nl/strings.xml
new file mode 100644
index 0000000..7d7bfa7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-nl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Simkaart niet geregistreerd MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"Simkaart niet toegestaan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-pa/strings.xml b/core/res/res/values-mcc310-mnc280-pa/strings.xml
new file mode 100644
index 0000000..3a65866
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-pa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"ਸਿਮ ਦੀ ਵਿਵਸਥਾ ਨਹੀਂ ਹੈ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"ਸਿਮ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-pl/strings.xml b/core/res/res/values-mcc310-mnc280-pl/strings.xml
new file mode 100644
index 0000000..52410f4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-pl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"MM#2 – karta SIM nieobsługiwana"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"MM#3 – niedozwolona karta SIM"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-pt-rBR/strings.xml b/core/res/res/values-mcc310-mnc280-pt-rBR/strings.xml
new file mode 100644
index 0000000..03d0efb
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-pt-rBR/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-pt-rPT/strings.xml b/core/res/res/values-mcc310-mnc280-pt-rPT/strings.xml
new file mode 100644
index 0000000..03d0efb
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-pt-rPT/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-pt/strings.xml b/core/res/res/values-mcc310-mnc280-pt/strings.xml
new file mode 100644
index 0000000..03d0efb
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-pt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-ro/strings.xml b/core/res/res/values-mcc310-mnc280-ro/strings.xml
new file mode 100644
index 0000000..d60ea0c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-ro/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Cardul SIM nu este activat MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"Cardul SIM nu este permis MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-ru/strings.xml b/core/res/res/values-mcc310-mnc280-ru/strings.xml
new file mode 100644
index 0000000..308c353
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-ru/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM-карта не активирована (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"Использование SIM-карты запрещено (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-si/strings.xml b/core/res/res/values-mcc310-mnc280-si/strings.xml
new file mode 100644
index 0000000..5bd6d1f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-si/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM MM#2 ප්‍රතිපාදනය නොකරයි"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM MM#3 ඉඩ නොදේ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-sk/strings.xml b/core/res/res/values-mcc310-mnc280-sk/strings.xml
new file mode 100644
index 0000000..4098ac7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-sk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM karta nie je k dispozícii – MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM karta je zakázaná – MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-sl/strings.xml b/core/res/res/values-mcc310-mnc280-sl/strings.xml
new file mode 100644
index 0000000..faa78ad
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-sl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Kartica SIM ni omogočena za uporabo MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"Kartica SIM ni dovoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-sq/strings.xml b/core/res/res/values-mcc310-mnc280-sq/strings.xml
new file mode 100644
index 0000000..48fba2d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-sq/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Karta SIM nuk është dhënë MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"Karta SIM nuk lejohet MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-sr/strings.xml b/core/res/res/values-mcc310-mnc280-sr/strings.xml
new file mode 100644
index 0000000..30c9df3
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-sr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM картица није подешена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM картица није дозвољена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-sv/strings.xml b/core/res/res/values-mcc310-mnc280-sv/strings.xml
new file mode 100644
index 0000000..cb5b9f32
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-sv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM-kort tillhandahålls inte MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM-kort tillåts inte MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-sw/strings.xml b/core/res/res/values-mcc310-mnc280-sw/strings.xml
new file mode 100644
index 0000000..15a1a36
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-sw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM haitumiki MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM hairuhusiwi MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-ta/strings.xml b/core/res/res/values-mcc310-mnc280-ta/strings.xml
new file mode 100644
index 0000000..c3911d4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-ta/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"சிம் அமைக்கப்படவில்லை MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"சிம் அனுமதிக்கப்படவில்லை MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-te/strings.xml b/core/res/res/values-mcc310-mnc280-te/strings.xml
new file mode 100644
index 0000000..f5cabad
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-te/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM MM#2ని సక్రియం చేయలేదు"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM MM#3ని అనుమతించలేదు"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-th/strings.xml b/core/res/res/values-mcc310-mnc280-th/strings.xml
new file mode 100644
index 0000000..9810ba6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-th/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"ไม่มีการจัดสรรซิม MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"ไม่อนุญาตให้ใช้ซิม MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-tl/strings.xml b/core/res/res/values-mcc310-mnc280-tl/strings.xml
new file mode 100644
index 0000000..600ad05
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-tl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"Hindi na-provision ang SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"Hindi pinapahintulutan ang SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-tr/strings.xml b/core/res/res/values-mcc310-mnc280-tr/strings.xml
new file mode 100644
index 0000000..ea90bdb
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-tr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM, MM#2\'nin temel hazırlığını yapamadı"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM MM#3\'e izin vermiyor"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-uk/strings.xml b/core/res/res/values-mcc310-mnc280-uk/strings.xml
new file mode 100644
index 0000000..68a34fd
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-uk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM-карту не надано (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM-карта заборонена (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-ur/strings.xml b/core/res/res/values-mcc310-mnc280-ur/strings.xml
new file mode 100644
index 0000000..d61a5dc
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-ur/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"‏SIM فراہم کردہ نہیں ہے MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"‏SIM کی اجازت نہیں ہے MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-uz/strings.xml b/core/res/res/values-mcc310-mnc280-uz/strings.xml
new file mode 100644
index 0000000..324d364
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-uz/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM karta ishlatish taqiqlangan (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM karta ishlatish taqiqlangan (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-vi/strings.xml b/core/res/res/values-mcc310-mnc280-vi/strings.xml
new file mode 100644
index 0000000..6806e39
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-vi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"SIM không được cấp phép MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"SIM không được phép MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-zh-rCN/strings.xml b/core/res/res/values-mcc310-mnc280-zh-rCN/strings.xml
new file mode 100644
index 0000000..add3f920
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-zh-rCN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"未配置的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"不被允许的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-zh-rHK/strings.xml b/core/res/res/values-mcc310-mnc280-zh-rHK/strings.xml
new file mode 100644
index 0000000..856297c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-zh-rHK/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-zh-rTW/strings.xml b/core/res/res/values-mcc310-mnc280-zh-rTW/strings.xml
new file mode 100644
index 0000000..856297c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-zh-rTW/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280-zu/strings.xml b/core/res/res/values-mcc310-mnc280-zu/strings.xml
new file mode 100644
index 0000000..6c5147c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280-zu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6638755728961013003">"I-SIM ayinikezelwe MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="5562215652599183258">"I-SIM ayivunyelwe MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc280/strings.xml b/core/res/res/values-mcc310-mnc280/strings.xml
new file mode 100644
index 0000000..a3fea29
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc280/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR 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="mmcc_imsi_unknown_in_hlr">SIM not provisioned MM#2</string>
+    <string name="mmcc_illegal_ms">SIM not allowed MM#3</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380 b/core/res/res/values-mcc310-mnc380
deleted file mode 120000
index cfced17..0000000
--- a/core/res/res/values-mcc310-mnc380
+++ /dev/null
@@ -1 +0,0 @@
-./values-mcc310-mnc150
\ No newline at end of file
diff --git a/core/res/res/values-mcc310-mnc380-af/strings.xml b/core/res/res/values-mcc310-mnc380-af/strings.xml
new file mode 100644
index 0000000..7dfadad
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-af/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM is nie opgestel nie MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM word nie toegelaat nie MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-am/strings.xml b/core/res/res/values-mcc310-mnc380-am/strings.xml
new file mode 100644
index 0000000..dd9dbac
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-am/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"ሲም አልቀረበም MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"ሲም አይፈቀድም MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-ar/strings.xml b/core/res/res/values-mcc310-mnc380-ar/strings.xml
new file mode 100644
index 0000000..381749e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-ar/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"‏لم يتم توفير SIM ‏MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"‏غير مسموح باستخدام SIM ‏MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-az/strings.xml b/core/res/res/values-mcc310-mnc380-az/strings.xml
new file mode 100644
index 0000000..aeb1c79
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-az/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM MM#2 təmin etmir"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM MM#3 dəstəkləmir"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-b+sr+Latn/strings.xml b/core/res/res/values-mcc310-mnc380-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..acc1ff6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-b+sr+Latn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM kartica nije podešena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-be/strings.xml b/core/res/res/values-mcc310-mnc380-be/strings.xml
new file mode 100644
index 0000000..926d2ea
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-be/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM-карты няма MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM-карта не дапускаецца MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-bg/strings.xml b/core/res/res/values-mcc310-mnc380-bg/strings.xml
new file mode 100644
index 0000000..bdce855
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-bg/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM картата не е обезпечена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM картата не е разрешена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-bn/strings.xml b/core/res/res/values-mcc310-mnc380-bn/strings.xml
new file mode 100644
index 0000000..38ba93b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-bn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"সিমের জন্য প্রস্তুত নয় MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"সিমের অনুমতি নেই MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-bs/strings.xml b/core/res/res/values-mcc310-mnc380-bs/strings.xml
new file mode 100644
index 0000000..ce14799
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-bs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM kartica nije dodijeljena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-ca/strings.xml b/core/res/res/values-mcc310-mnc380-ca/strings.xml
new file mode 100644
index 0000000..e30fd81
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-ca/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"La SIM no està proporcionada a MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"La SIM no és compatible a MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-cs/strings.xml b/core/res/res/values-mcc310-mnc380-cs/strings.xml
new file mode 100644
index 0000000..62fe37c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-cs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM karta není poskytována (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM karta není povolena (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-da/strings.xml b/core/res/res/values-mcc310-mnc380-da/strings.xml
new file mode 100644
index 0000000..cd4c796
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-da/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM-kortet er ikke aktiveret MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM-kort er ikke tilladt MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-de/strings.xml b/core/res/res/values-mcc310-mnc380-de/strings.xml
new file mode 100644
index 0000000..ca03926
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-de/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM-Karte nicht eingerichtet MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM-Karte nicht zulässig MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-el/strings.xml b/core/res/res/values-mcc310-mnc380-el/strings.xml
new file mode 100644
index 0000000..07d0db4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-el/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Δεν παρέχεται κάρτα SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"Η κάρτα SIM δεν επιτρέπεται MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-en-rAU/strings.xml b/core/res/res/values-mcc310-mnc380-en-rAU/strings.xml
new file mode 100644
index 0000000..faf6df8
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-en-rAU/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-en-rCA/strings.xml b/core/res/res/values-mcc310-mnc380-en-rCA/strings.xml
new file mode 100644
index 0000000..faf6df8
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-en-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-en-rGB/strings.xml b/core/res/res/values-mcc310-mnc380-en-rGB/strings.xml
new file mode 100644
index 0000000..faf6df8
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-en-rGB/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-en-rIN/strings.xml b/core/res/res/values-mcc310-mnc380-en-rIN/strings.xml
new file mode 100644
index 0000000..faf6df8
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-en-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-en-rXC/strings.xml b/core/res/res/values-mcc310-mnc380-en-rXC/strings.xml
new file mode 100644
index 0000000..a6ef732
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-en-rXC/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‏‏‎‎SIM not provisioned MM#2‎‏‎‎‏‎"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‎‎‎SIM not allowed MM#3‎‏‎‎‏‎"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-es-rUS/strings.xml b/core/res/res/values-mcc310-mnc380-es-rUS/strings.xml
new file mode 100644
index 0000000..2335661
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-es-rUS/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM no provista MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM no permitida MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-es/strings.xml b/core/res/res/values-mcc310-mnc380-es/strings.xml
new file mode 100644
index 0000000..028c265
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-es/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM no proporcionada (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM no admitida (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-et/strings.xml b/core/res/res/values-mcc310-mnc380-et/strings.xml
new file mode 100644
index 0000000..c25b128
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-et/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM-kaart on ette valmistamata MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM-kaart pole lubatud MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-eu/strings.xml b/core/res/res/values-mcc310-mnc380-eu/strings.xml
new file mode 100644
index 0000000..73bcd35
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-eu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Ez dago SIM txartelik MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"Ez da onartzen SIM txartela MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-fa/strings.xml b/core/res/res/values-mcc310-mnc380-fa/strings.xml
new file mode 100644
index 0000000..b2b1126
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-fa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"‏سیم‌کارت مجوز لازم را ندارد MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"‏سیم‌کارت مجاز نیست MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-fi/strings.xml b/core/res/res/values-mcc310-mnc380-fi/strings.xml
new file mode 100644
index 0000000..dfb9b5f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-fi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM-kortti ei käyttäjien hallinnassa MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM-kortti estetty MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-fr-rCA/strings.xml b/core/res/res/values-mcc310-mnc380-fr-rCA/strings.xml
new file mode 100644
index 0000000..432c7a3
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-fr-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Carte SIM non configurée, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"Carte SIM non autorisée, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-fr/strings.xml b/core/res/res/values-mcc310-mnc380-fr/strings.xml
new file mode 100644
index 0000000..2041d89
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-fr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Carte SIM non provisionnée MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"Carte SIM non autorisée MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-gl/strings.xml b/core/res/res/values-mcc310-mnc380-gl/strings.xml
new file mode 100644
index 0000000..f224b92
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-gl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Non se introduciu ningunha tarxeta SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"Non se admite a tarxeta SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-gu/strings.xml b/core/res/res/values-mcc310-mnc380-gu/strings.xml
new file mode 100644
index 0000000..13df8d3
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-gu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIMને MM#2ની જોગવાઈ નથી"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIMને MM#3 કરવાની મંજૂરી નથી"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-hi/strings.xml b/core/res/res/values-mcc310-mnc380-hi/strings.xml
new file mode 100644
index 0000000..76247af
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-hi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM काम नहीं कर रहा है MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM की अनुमति नहीं है MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-hr/strings.xml b/core/res/res/values-mcc310-mnc380-hr/strings.xml
new file mode 100644
index 0000000..21263b2
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-hr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Ne pruža se usluga za SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM nije dopušten MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-hu/strings.xml b/core/res/res/values-mcc310-mnc380-hu/strings.xml
new file mode 100644
index 0000000..bf4a40c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-hu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Nem engedélyezett SIM-kártya (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"A SIM-kártya nem engedélyezett (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-hy/strings.xml b/core/res/res/values-mcc310-mnc380-hy/strings.xml
new file mode 100644
index 0000000..1fbf283
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-hy/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM քարտը նախապատրաստված չէ (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM քարտի օգտագործումն արգելված է (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-in/strings.xml b/core/res/res/values-mcc310-mnc380-in/strings.xml
new file mode 100644
index 0000000..0b0ad54
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-in/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM tidak di-provisioning MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM tidak diizinkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-is/strings.xml b/core/res/res/values-mcc310-mnc380-is/strings.xml
new file mode 100644
index 0000000..9df1007
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-is/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM-korti ekki úthlutað MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM-kort ekki leyft MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-it/strings.xml b/core/res/res/values-mcc310-mnc380-it/strings.xml
new file mode 100644
index 0000000..3800d83
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-it/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Scheda SIM non predisposta MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"Scheda SIM non consentita MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-iw/strings.xml b/core/res/res/values-mcc310-mnc380-iw/strings.xml
new file mode 100644
index 0000000..0602cb3
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-iw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"‏כרטיס ה-SIM לא הופעל MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"‏כרטיס ה-SIM לא מורשה לשימוש ברשת הסלולרית MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-ja/strings.xml b/core/res/res/values-mcc310-mnc380-ja/strings.xml
new file mode 100644
index 0000000..93aeee0
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-ja/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM には対応していません(MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM は許可されていません(MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-ka/strings.xml b/core/res/res/values-mcc310-mnc380-ka/strings.xml
new file mode 100644
index 0000000..773f2ab
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-ka/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM ბარათი უზრუნველყოფილი არ არის (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM ბარათი დაუშვებელია (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-kk/strings.xml b/core/res/res/values-mcc310-mnc380-kk/strings.xml
new file mode 100644
index 0000000..8e003c2
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-kk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM картасы қарастырылмаған MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM картасына рұқсат етілмеген MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-km/strings.xml b/core/res/res/values-mcc310-mnc380-km/strings.xml
new file mode 100644
index 0000000..eaadc8b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-km/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"ស៊ីមកាត​មិនត្រូវបានផ្ដល់ជូនទេ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"មិនអនុញ្ញាត​ចំពោះស៊ីមកាតទេ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-kn/strings.xml b/core/res/res/values-mcc310-mnc380-kn/strings.xml
new file mode 100644
index 0000000..3d43e9a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-kn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"MM#2 ಗೆ ಸಿಮ್‌ ಸಿದ್ಧವಾಗಿಲ್ಲ"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"ಸಿಮ್‌ MM#3 ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-ko/strings.xml b/core/res/res/values-mcc310-mnc380-ko/strings.xml
new file mode 100644
index 0000000..be4f15d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-ko/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM이 프로비저닝되지 않음 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM이 허용되지 않음 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-ky/strings.xml b/core/res/res/values-mcc310-mnc380-ky/strings.xml
new file mode 100644
index 0000000..de6916f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-ky/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM карта таанылган жок (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM картаны колдонууга тыюу салынган (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-lo/strings.xml b/core/res/res/values-mcc310-mnc380-lo/strings.xml
new file mode 100644
index 0000000..01cd13c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-lo/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM ບໍ່ໄດ້ເປີດໃຊ້ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM ບໍ່ອະນຸຍາດ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-lt/strings.xml b/core/res/res/values-mcc310-mnc380-lt/strings.xml
new file mode 100644
index 0000000..e719839
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-lt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM kortelė neteikiama (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM kortelė neleidžiama (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-lv/strings.xml b/core/res/res/values-mcc310-mnc380-lv/strings.xml
new file mode 100644
index 0000000..ecbc518
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-lv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM karte netiek nodrošināta: MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM karti nav atļauts izmantot: MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-mk/strings.xml b/core/res/res/values-mcc310-mnc380-mk/strings.xml
new file mode 100644
index 0000000..0cec5ab
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-mk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Не е обезбедена SIM-картичка, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"Не е дозволена SIM-картичка, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-ml/strings.xml b/core/res/res/values-mcc310-mnc380-ml/strings.xml
new file mode 100644
index 0000000..f986a99
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-ml/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"സിം MM#2 പ്രൊവിഷൻ ചെയ്‌തിട്ടില്ല"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"സിം MM#3 അനുവദിച്ചിട്ടില്ല"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-mn/strings.xml b/core/res/res/values-mcc310-mnc380-mn/strings.xml
new file mode 100644
index 0000000..a0534ce
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-mn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM-г идэвхжүүлээгүй байна MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM-г зөвшөөрөөгүй байна MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-mr/strings.xml b/core/res/res/values-mcc310-mnc380-mr/strings.xml
new file mode 100644
index 0000000..0541893
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-mr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM ने MM#2 ची तरतूद केलेली नाही"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM ने MM#3 ला परवानगी दिली नाही"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-ms/strings.xml b/core/res/res/values-mcc310-mnc380-ms/strings.xml
new file mode 100644
index 0000000..545ff3f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-ms/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM tidak diperuntukkan MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM tidak dibenarkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-my/strings.xml b/core/res/res/values-mcc310-mnc380-my/strings.xml
new file mode 100644
index 0000000..a375b04
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-my/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-nb/strings.xml b/core/res/res/values-mcc310-mnc380-nb/strings.xml
new file mode 100644
index 0000000..7fc96f0
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-nb/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM-kortet er ikke klargjort, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM-kortet er ikke tillatt, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-ne/strings.xml b/core/res/res/values-mcc310-mnc380-ne/strings.xml
new file mode 100644
index 0000000..28cdcba
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-ne/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM को प्रावधान छैन MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM लाई अनुमति छैन MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-nl/strings.xml b/core/res/res/values-mcc310-mnc380-nl/strings.xml
new file mode 100644
index 0000000..33bc4b6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-nl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Simkaart niet geregistreerd MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"Simkaart niet toegestaan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-pa/strings.xml b/core/res/res/values-mcc310-mnc380-pa/strings.xml
new file mode 100644
index 0000000..342c08e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-pa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"ਸਿਮ ਦੀ ਵਿਵਸਥਾ ਨਹੀਂ ਹੈ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"ਸਿਮ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-pl/strings.xml b/core/res/res/values-mcc310-mnc380-pl/strings.xml
new file mode 100644
index 0000000..df5b5d2
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-pl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"MM#2 – karta SIM nieobsługiwana"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"MM#3 – niedozwolona karta SIM"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-pt-rBR/strings.xml b/core/res/res/values-mcc310-mnc380-pt-rBR/strings.xml
new file mode 100644
index 0000000..06bc55a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-pt-rBR/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-pt-rPT/strings.xml b/core/res/res/values-mcc310-mnc380-pt-rPT/strings.xml
new file mode 100644
index 0000000..06bc55a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-pt-rPT/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-pt/strings.xml b/core/res/res/values-mcc310-mnc380-pt/strings.xml
new file mode 100644
index 0000000..06bc55a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-pt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-ro/strings.xml b/core/res/res/values-mcc310-mnc380-ro/strings.xml
new file mode 100644
index 0000000..218dec4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-ro/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Cardul SIM nu este activat MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"Cardul SIM nu este permis MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-ru/strings.xml b/core/res/res/values-mcc310-mnc380-ru/strings.xml
new file mode 100644
index 0000000..ab3bb21
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-ru/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM-карта не активирована (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"Использование SIM-карты запрещено (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-si/strings.xml b/core/res/res/values-mcc310-mnc380-si/strings.xml
new file mode 100644
index 0000000..be471a3
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-si/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM MM#2 ප්‍රතිපාදනය නොකරයි"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM MM#3 ඉඩ නොදේ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-sk/strings.xml b/core/res/res/values-mcc310-mnc380-sk/strings.xml
new file mode 100644
index 0000000..91454e6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-sk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM karta nie je k dispozícii – MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM karta je zakázaná – MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-sl/strings.xml b/core/res/res/values-mcc310-mnc380-sl/strings.xml
new file mode 100644
index 0000000..1d29a78
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-sl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Kartica SIM ni omogočena za uporabo MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"Kartica SIM ni dovoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-sq/strings.xml b/core/res/res/values-mcc310-mnc380-sq/strings.xml
new file mode 100644
index 0000000..c50b1dc
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-sq/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Karta SIM nuk është dhënë MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"Karta SIM nuk lejohet MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-sr/strings.xml b/core/res/res/values-mcc310-mnc380-sr/strings.xml
new file mode 100644
index 0000000..e43d25f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-sr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM картица није подешена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM картица није дозвољена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-sv/strings.xml b/core/res/res/values-mcc310-mnc380-sv/strings.xml
new file mode 100644
index 0000000..213d26e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-sv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM-kort tillhandahålls inte MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM-kort tillåts inte MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-sw/strings.xml b/core/res/res/values-mcc310-mnc380-sw/strings.xml
new file mode 100644
index 0000000..249dcb3
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-sw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM haitumiki MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM hairuhusiwi MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-ta/strings.xml b/core/res/res/values-mcc310-mnc380-ta/strings.xml
new file mode 100644
index 0000000..d673f22
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-ta/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"சிம் அமைக்கப்படவில்லை MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"சிம் அனுமதிக்கப்படவில்லை MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-te/strings.xml b/core/res/res/values-mcc310-mnc380-te/strings.xml
new file mode 100644
index 0000000..cfc800e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-te/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM MM#2ని సక్రియం చేయలేదు"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM MM#3ని అనుమతించలేదు"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-th/strings.xml b/core/res/res/values-mcc310-mnc380-th/strings.xml
new file mode 100644
index 0000000..06bfa56
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-th/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"ไม่มีการจัดสรรซิม MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"ไม่อนุญาตให้ใช้ซิม MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-tl/strings.xml b/core/res/res/values-mcc310-mnc380-tl/strings.xml
new file mode 100644
index 0000000..52e6edb
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-tl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"Hindi na-provision ang SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"Hindi pinapahintulutan ang SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-tr/strings.xml b/core/res/res/values-mcc310-mnc380-tr/strings.xml
new file mode 100644
index 0000000..c59a8b5
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-tr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM, MM#2\'nin temel hazırlığını yapamadı"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM MM#3\'e izin vermiyor"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-uk/strings.xml b/core/res/res/values-mcc310-mnc380-uk/strings.xml
new file mode 100644
index 0000000..c1b5a02
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-uk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM-карту не надано (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM-карта заборонена (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-ur/strings.xml b/core/res/res/values-mcc310-mnc380-ur/strings.xml
new file mode 100644
index 0000000..1e68214
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-ur/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"‏SIM فراہم کردہ نہیں ہے MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"‏SIM کی اجازت نہیں ہے MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-uz/strings.xml b/core/res/res/values-mcc310-mnc380-uz/strings.xml
new file mode 100644
index 0000000..89de07c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-uz/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM karta ishlatish taqiqlangan (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM karta ishlatish taqiqlangan (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-vi/strings.xml b/core/res/res/values-mcc310-mnc380-vi/strings.xml
new file mode 100644
index 0000000..200da73
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-vi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"SIM không được cấp phép MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"SIM không được phép MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-zh-rCN/strings.xml b/core/res/res/values-mcc310-mnc380-zh-rCN/strings.xml
new file mode 100644
index 0000000..b150645
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-zh-rCN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"未配置的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"不被允许的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-zh-rHK/strings.xml b/core/res/res/values-mcc310-mnc380-zh-rHK/strings.xml
new file mode 100644
index 0000000..7a7f225
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-zh-rHK/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-zh-rTW/strings.xml b/core/res/res/values-mcc310-mnc380-zh-rTW/strings.xml
new file mode 100644
index 0000000..7a7f225
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-zh-rTW/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380-zu/strings.xml b/core/res/res/values-mcc310-mnc380-zu/strings.xml
new file mode 100644
index 0000000..e795a46
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380-zu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6933439408719203102">"I-SIM ayinikezelwe MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6367773216941648568">"I-SIM ayivunyelwe MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc380/strings.xml b/core/res/res/values-mcc310-mnc380/strings.xml
new file mode 100644
index 0000000..a3fea29
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc380/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR 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="mmcc_imsi_unknown_in_hlr">SIM not provisioned MM#2</string>
+    <string name="mmcc_illegal_ms">SIM not allowed MM#3</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-af/strings.xml b/core/res/res/values-mcc310-mnc410-af/strings.xml
new file mode 100644
index 0000000..81688f1
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-af/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM is nie opgestel nie MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM word nie toegelaat nie MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-am/strings.xml b/core/res/res/values-mcc310-mnc410-am/strings.xml
new file mode 100644
index 0000000..176a628
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-am/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"ሲም አልቀረበም MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"ሲም አይፈቀድም MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-ar/strings.xml b/core/res/res/values-mcc310-mnc410-ar/strings.xml
new file mode 100644
index 0000000..884e18e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-ar/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"‏لم يتم توفير SIM ‏MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"‏غير مسموح باستخدام SIM ‏MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-az/strings.xml b/core/res/res/values-mcc310-mnc410-az/strings.xml
new file mode 100644
index 0000000..178451c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-az/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM MM#2 təmin etmir"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM MM#3 dəstəkləmir"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-b+sr+Latn/strings.xml b/core/res/res/values-mcc310-mnc410-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..8981a35
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-b+sr+Latn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM kartica nije podešena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-be/strings.xml b/core/res/res/values-mcc310-mnc410-be/strings.xml
new file mode 100644
index 0000000..8ae8639
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-be/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM-карты няма MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM-карта не дапускаецца MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-bg/strings.xml b/core/res/res/values-mcc310-mnc410-bg/strings.xml
new file mode 100644
index 0000000..fc6f3e5
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-bg/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM картата не е обезпечена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM картата не е разрешена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-bn/strings.xml b/core/res/res/values-mcc310-mnc410-bn/strings.xml
new file mode 100644
index 0000000..e42a375
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-bn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"সিমের জন্য প্রস্তুত নয় MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"সিমের অনুমতি নেই MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-bs/strings.xml b/core/res/res/values-mcc310-mnc410-bs/strings.xml
new file mode 100644
index 0000000..4d7da3a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-bs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM kartica nije dodijeljena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-ca/strings.xml b/core/res/res/values-mcc310-mnc410-ca/strings.xml
new file mode 100644
index 0000000..19ab945b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-ca/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"La SIM no està proporcionada a MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"La SIM no és compatible a MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-cs/strings.xml b/core/res/res/values-mcc310-mnc410-cs/strings.xml
new file mode 100644
index 0000000..3e36325
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-cs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM karta není poskytována (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM karta není povolena (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-da/strings.xml b/core/res/res/values-mcc310-mnc410-da/strings.xml
new file mode 100644
index 0000000..26e6e16
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-da/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM-kortet er ikke aktiveret MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM-kort er ikke tilladt MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-de/strings.xml b/core/res/res/values-mcc310-mnc410-de/strings.xml
new file mode 100644
index 0000000..c5f64f4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-de/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM-Karte nicht eingerichtet MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM-Karte nicht zulässig MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-el/strings.xml b/core/res/res/values-mcc310-mnc410-el/strings.xml
new file mode 100644
index 0000000..128d1bf
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-el/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Δεν παρέχεται κάρτα SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"Η κάρτα SIM δεν επιτρέπεται MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-en-rAU/strings.xml b/core/res/res/values-mcc310-mnc410-en-rAU/strings.xml
new file mode 100644
index 0000000..eb56351
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-en-rAU/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-en-rCA/strings.xml b/core/res/res/values-mcc310-mnc410-en-rCA/strings.xml
new file mode 100644
index 0000000..eb56351
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-en-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-en-rGB/strings.xml b/core/res/res/values-mcc310-mnc410-en-rGB/strings.xml
new file mode 100644
index 0000000..eb56351
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-en-rGB/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-en-rIN/strings.xml b/core/res/res/values-mcc310-mnc410-en-rIN/strings.xml
new file mode 100644
index 0000000..eb56351
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-en-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-en-rXC/strings.xml b/core/res/res/values-mcc310-mnc410-en-rXC/strings.xml
new file mode 100644
index 0000000..4799e38
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-en-rXC/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‎‏‎‎‎SIM not provisioned MM#2‎‏‎‎‏‎"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‎‎SIM not allowed MM#3‎‏‎‎‏‎"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-es-rUS/strings.xml b/core/res/res/values-mcc310-mnc410-es-rUS/strings.xml
new file mode 100644
index 0000000..85b0344
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-es-rUS/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM no provista MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM no permitida MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-es/strings.xml b/core/res/res/values-mcc310-mnc410-es/strings.xml
new file mode 100644
index 0000000..248069e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-es/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM no proporcionada (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM no admitida (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-et/strings.xml b/core/res/res/values-mcc310-mnc410-et/strings.xml
new file mode 100644
index 0000000..6ef7802
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-et/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM-kaart on ette valmistamata MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM-kaart pole lubatud MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-eu/strings.xml b/core/res/res/values-mcc310-mnc410-eu/strings.xml
new file mode 100644
index 0000000..966511b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-eu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Ez dago SIM txartelik MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"Ez da onartzen SIM txartela MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-fa/strings.xml b/core/res/res/values-mcc310-mnc410-fa/strings.xml
new file mode 100644
index 0000000..82f6272
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-fa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"‏سیم‌کارت مجوز لازم را ندارد MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"‏سیم‌کارت مجاز نیست MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-fi/strings.xml b/core/res/res/values-mcc310-mnc410-fi/strings.xml
new file mode 100644
index 0000000..c5a4ef6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-fi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM-kortti ei käyttäjien hallinnassa MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM-kortti estetty MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-fr-rCA/strings.xml b/core/res/res/values-mcc310-mnc410-fr-rCA/strings.xml
new file mode 100644
index 0000000..cec2491
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-fr-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Carte SIM non configurée, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"Carte SIM non autorisée, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-fr/strings.xml b/core/res/res/values-mcc310-mnc410-fr/strings.xml
new file mode 100644
index 0000000..f715e71
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-fr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Carte SIM non provisionnée MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"Carte SIM non autorisée MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-gl/strings.xml b/core/res/res/values-mcc310-mnc410-gl/strings.xml
new file mode 100644
index 0000000..c3aba8e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-gl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Non se introduciu ningunha tarxeta SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"Non se admite a tarxeta SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-gu/strings.xml b/core/res/res/values-mcc310-mnc410-gu/strings.xml
new file mode 100644
index 0000000..26898f4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-gu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIMને MM#2ની જોગવાઈ નથી"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIMને MM#3 કરવાની મંજૂરી નથી"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-hi/strings.xml b/core/res/res/values-mcc310-mnc410-hi/strings.xml
new file mode 100644
index 0000000..a01845a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-hi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM काम नहीं कर रहा है MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM की अनुमति नहीं है MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-hr/strings.xml b/core/res/res/values-mcc310-mnc410-hr/strings.xml
new file mode 100644
index 0000000..47062c4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-hr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Ne pruža se usluga za SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM nije dopušten MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-hu/strings.xml b/core/res/res/values-mcc310-mnc410-hu/strings.xml
new file mode 100644
index 0000000..194d865
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-hu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Nem engedélyezett SIM-kártya (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"A SIM-kártya nem engedélyezett (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-hy/strings.xml b/core/res/res/values-mcc310-mnc410-hy/strings.xml
new file mode 100644
index 0000000..85129cc
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-hy/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM քարտը նախապատրաստված չէ (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM քարտի օգտագործումն արգելված է (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-in/strings.xml b/core/res/res/values-mcc310-mnc410-in/strings.xml
new file mode 100644
index 0000000..c065221
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-in/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM tidak di-provisioning MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM tidak diizinkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-is/strings.xml b/core/res/res/values-mcc310-mnc410-is/strings.xml
new file mode 100644
index 0000000..a40a643
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-is/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM-korti ekki úthlutað MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM-kort ekki leyft MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-it/strings.xml b/core/res/res/values-mcc310-mnc410-it/strings.xml
new file mode 100644
index 0000000..ab5c731
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-it/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Scheda SIM non predisposta MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"Scheda SIM non consentita MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-iw/strings.xml b/core/res/res/values-mcc310-mnc410-iw/strings.xml
new file mode 100644
index 0000000..b675f64
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-iw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"‏כרטיס ה-SIM לא הופעל MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"‏כרטיס ה-SIM לא מורשה לשימוש ברשת הסלולרית MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-ja/strings.xml b/core/res/res/values-mcc310-mnc410-ja/strings.xml
new file mode 100644
index 0000000..1961a75b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-ja/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM には対応していません(MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM は許可されていません(MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-ka/strings.xml b/core/res/res/values-mcc310-mnc410-ka/strings.xml
new file mode 100644
index 0000000..5216e8f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-ka/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM ბარათი უზრუნველყოფილი არ არის (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM ბარათი დაუშვებელია (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-kk/strings.xml b/core/res/res/values-mcc310-mnc410-kk/strings.xml
new file mode 100644
index 0000000..137c73a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-kk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM картасы қарастырылмаған MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM картасына рұқсат етілмеген MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-km/strings.xml b/core/res/res/values-mcc310-mnc410-km/strings.xml
new file mode 100644
index 0000000..94babe1
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-km/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"ស៊ីមកាត​មិនត្រូវបានផ្ដល់ជូនទេ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"មិនអនុញ្ញាត​ចំពោះស៊ីមកាតទេ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-kn/strings.xml b/core/res/res/values-mcc310-mnc410-kn/strings.xml
new file mode 100644
index 0000000..b003dcc
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-kn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"MM#2 ಗೆ ಸಿಮ್‌ ಸಿದ್ಧವಾಗಿಲ್ಲ"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"ಸಿಮ್‌ MM#3 ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-ko/strings.xml b/core/res/res/values-mcc310-mnc410-ko/strings.xml
new file mode 100644
index 0000000..7824d1e6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-ko/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM이 프로비저닝되지 않음 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM이 허용되지 않음 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-ky/strings.xml b/core/res/res/values-mcc310-mnc410-ky/strings.xml
new file mode 100644
index 0000000..9e4f23e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-ky/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM карта таанылган жок (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM картаны колдонууга тыюу салынган (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-lo/strings.xml b/core/res/res/values-mcc310-mnc410-lo/strings.xml
new file mode 100644
index 0000000..9684e7a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-lo/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM ບໍ່ໄດ້ເປີດໃຊ້ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM ບໍ່ອະນຸຍາດ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-lt/strings.xml b/core/res/res/values-mcc310-mnc410-lt/strings.xml
new file mode 100644
index 0000000..c4a646a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-lt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM kortelė neteikiama (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM kortelė neleidžiama (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-lv/strings.xml b/core/res/res/values-mcc310-mnc410-lv/strings.xml
new file mode 100644
index 0000000..e95d62b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-lv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM karte netiek nodrošināta: MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM karti nav atļauts izmantot: MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-mk/strings.xml b/core/res/res/values-mcc310-mnc410-mk/strings.xml
new file mode 100644
index 0000000..76bba96
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-mk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Не е обезбедена SIM-картичка, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"Не е дозволена SIM-картичка, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-ml/strings.xml b/core/res/res/values-mcc310-mnc410-ml/strings.xml
new file mode 100644
index 0000000..94436bd
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-ml/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"സിം MM#2 പ്രൊവിഷൻ ചെയ്‌തിട്ടില്ല"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"സിം MM#3 അനുവദിച്ചിട്ടില്ല"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-mn/strings.xml b/core/res/res/values-mcc310-mnc410-mn/strings.xml
new file mode 100644
index 0000000..2667aab
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-mn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM-г идэвхжүүлээгүй байна MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM-г зөвшөөрөөгүй байна MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-mr/strings.xml b/core/res/res/values-mcc310-mnc410-mr/strings.xml
new file mode 100644
index 0000000..e7b0644
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-mr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM ने MM#2 ची तरतूद केलेली नाही"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM ने MM#3 ला परवानगी दिली नाही"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-ms/strings.xml b/core/res/res/values-mcc310-mnc410-ms/strings.xml
new file mode 100644
index 0000000..85b8621
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-ms/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM tidak diperuntukkan MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM tidak dibenarkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-my/strings.xml b/core/res/res/values-mcc310-mnc410-my/strings.xml
new file mode 100644
index 0000000..faa80ec
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-my/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-nb/strings.xml b/core/res/res/values-mcc310-mnc410-nb/strings.xml
new file mode 100644
index 0000000..79be7af
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-nb/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM-kortet er ikke klargjort, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM-kortet er ikke tillatt, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-ne/strings.xml b/core/res/res/values-mcc310-mnc410-ne/strings.xml
new file mode 100644
index 0000000..e270c7c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-ne/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM को प्रावधान छैन MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM लाई अनुमति छैन MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-nl/strings.xml b/core/res/res/values-mcc310-mnc410-nl/strings.xml
new file mode 100644
index 0000000..2995beb
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-nl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Simkaart niet geregistreerd MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"Simkaart niet toegestaan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-pa/strings.xml b/core/res/res/values-mcc310-mnc410-pa/strings.xml
new file mode 100644
index 0000000..70195f1
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-pa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"ਸਿਮ ਦੀ ਵਿਵਸਥਾ ਨਹੀਂ ਹੈ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"ਸਿਮ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-pl/strings.xml b/core/res/res/values-mcc310-mnc410-pl/strings.xml
new file mode 100644
index 0000000..8677ad6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-pl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"MM#2 – karta SIM nieobsługiwana"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"MM#3 – niedozwolona karta SIM"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-pt-rBR/strings.xml b/core/res/res/values-mcc310-mnc410-pt-rBR/strings.xml
new file mode 100644
index 0000000..4f41e5e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-pt-rBR/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-pt-rPT/strings.xml b/core/res/res/values-mcc310-mnc410-pt-rPT/strings.xml
new file mode 100644
index 0000000..4f41e5e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-pt-rPT/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-pt/strings.xml b/core/res/res/values-mcc310-mnc410-pt/strings.xml
new file mode 100644
index 0000000..4f41e5e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-pt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-ro/strings.xml b/core/res/res/values-mcc310-mnc410-ro/strings.xml
new file mode 100644
index 0000000..fea0609
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-ro/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Cardul SIM nu este activat MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"Cardul SIM nu este permis MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-ru/strings.xml b/core/res/res/values-mcc310-mnc410-ru/strings.xml
new file mode 100644
index 0000000..a00e59c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-ru/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM-карта не активирована (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"Использование SIM-карты запрещено (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-si/strings.xml b/core/res/res/values-mcc310-mnc410-si/strings.xml
new file mode 100644
index 0000000..8f66f3d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-si/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM MM#2 ප්‍රතිපාදනය නොකරයි"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM MM#3 ඉඩ නොදේ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-sk/strings.xml b/core/res/res/values-mcc310-mnc410-sk/strings.xml
new file mode 100644
index 0000000..e4d4bc6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-sk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM karta nie je k dispozícii – MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM karta je zakázaná – MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-sl/strings.xml b/core/res/res/values-mcc310-mnc410-sl/strings.xml
new file mode 100644
index 0000000..2d03b04
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-sl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Kartica SIM ni omogočena za uporabo MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"Kartica SIM ni dovoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-sq/strings.xml b/core/res/res/values-mcc310-mnc410-sq/strings.xml
new file mode 100644
index 0000000..51626d7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-sq/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Karta SIM nuk është dhënë MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"Karta SIM nuk lejohet MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-sr/strings.xml b/core/res/res/values-mcc310-mnc410-sr/strings.xml
new file mode 100644
index 0000000..b4a9006
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-sr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM картица није подешена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM картица није дозвољена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-sv/strings.xml b/core/res/res/values-mcc310-mnc410-sv/strings.xml
new file mode 100644
index 0000000..c270b04
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-sv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM-kort tillhandahålls inte MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM-kort tillåts inte MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-sw/strings.xml b/core/res/res/values-mcc310-mnc410-sw/strings.xml
new file mode 100644
index 0000000..a6e6018
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-sw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM haitumiki MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM hairuhusiwi MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-ta/strings.xml b/core/res/res/values-mcc310-mnc410-ta/strings.xml
new file mode 100644
index 0000000..4ac46ce
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-ta/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"சிம் அமைக்கப்படவில்லை MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"சிம் அனுமதிக்கப்படவில்லை MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-te/strings.xml b/core/res/res/values-mcc310-mnc410-te/strings.xml
new file mode 100644
index 0000000..5b56435
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-te/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM MM#2ని సక్రియం చేయలేదు"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM MM#3ని అనుమతించలేదు"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-th/strings.xml b/core/res/res/values-mcc310-mnc410-th/strings.xml
new file mode 100644
index 0000000..cf51029
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-th/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"ไม่มีการจัดสรรซิม MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"ไม่อนุญาตให้ใช้ซิม MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-tl/strings.xml b/core/res/res/values-mcc310-mnc410-tl/strings.xml
new file mode 100644
index 0000000..b2aa68a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-tl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"Hindi na-provision ang SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"Hindi pinapahintulutan ang SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-tr/strings.xml b/core/res/res/values-mcc310-mnc410-tr/strings.xml
new file mode 100644
index 0000000..9e5c38e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-tr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM, MM#2\'nin temel hazırlığını yapamadı"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM MM#3\'e izin vermiyor"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-uk/strings.xml b/core/res/res/values-mcc310-mnc410-uk/strings.xml
new file mode 100644
index 0000000..5d74f80
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-uk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM-карту не надано (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM-карта заборонена (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-ur/strings.xml b/core/res/res/values-mcc310-mnc410-ur/strings.xml
new file mode 100644
index 0000000..8cf16e4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-ur/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"‏SIM فراہم کردہ نہیں ہے MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"‏SIM کی اجازت نہیں ہے MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-uz/strings.xml b/core/res/res/values-mcc310-mnc410-uz/strings.xml
new file mode 100644
index 0000000..4618525
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-uz/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM karta ishlatish taqiqlangan (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM karta ishlatish taqiqlangan (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-vi/strings.xml b/core/res/res/values-mcc310-mnc410-vi/strings.xml
new file mode 100644
index 0000000..e6fc334
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-vi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"SIM không được cấp phép MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"SIM không được phép MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-zh-rCN/strings.xml b/core/res/res/values-mcc310-mnc410-zh-rCN/strings.xml
new file mode 100644
index 0000000..a00316a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-zh-rCN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"未配置的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"不被允许的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-zh-rHK/strings.xml b/core/res/res/values-mcc310-mnc410-zh-rHK/strings.xml
new file mode 100644
index 0000000..66a622e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-zh-rHK/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-zh-rTW/strings.xml b/core/res/res/values-mcc310-mnc410-zh-rTW/strings.xml
new file mode 100644
index 0000000..66a622e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-zh-rTW/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410-zu/strings.xml b/core/res/res/values-mcc310-mnc410-zu/strings.xml
new file mode 100644
index 0000000..a52049f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410-zu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="376893116792604964">"I-SIM ayinikezelwe MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1593063035884873292">"I-SIM ayivunyelwe MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc410/config.xml b/core/res/res/values-mcc310-mnc410/config.xml
index 9accdf0..00ab712 100644
--- a/core/res/res/values-mcc310-mnc410/config.xml
+++ b/core/res/res/values-mcc310-mnc410/config.xml
@@ -20,28 +20,9 @@
 <!-- These resources are around just to allow their values to be customized
      for different hardware and product builds. -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
     <!-- Configure mobile network MTU. Carrier specific value is set here.
     -->
     <integer name="config_mobile_mtu">1410</integer>
-    <!-- Show roaming icon though same named operators. -->
-    <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
-        <item>310110</item>
-        <item>310140</item>
-        <item>310400</item>
-        <item>310470</item>
-        <item>311170</item>
-    </string-array>
-
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>310</item>
-        <item>311</item>
-        <item>312</item>
-        <item>313</item>
-        <item>314</item>
-        <item>315</item>
-        <item>316</item>
-    </string-array>
     <!-- Do not translate. Defines the slots is Two Digit Number for dialing normally not USSD -->
     <string-array name="config_twoDigitNumberPattern">
         <item>"0"</item>
diff --git a/core/res/res/values-mcc310-mnc410/strings.xml b/core/res/res/values-mcc310-mnc410/strings.xml
new file mode 100644
index 0000000..a3fea29
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc410/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR 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="mmcc_imsi_unknown_in_hlr">SIM not provisioned MM#2</string>
+    <string name="mmcc_illegal_ms">SIM not allowed MM#3</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-af/strings.xml b/core/res/res/values-mcc310-mnc560-af/strings.xml
new file mode 100644
index 0000000..ecbb954
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-af/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM is nie opgestel nie MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM word nie toegelaat nie MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-am/strings.xml b/core/res/res/values-mcc310-mnc560-am/strings.xml
new file mode 100644
index 0000000..297c059
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-am/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"ሲም አልቀረበም MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"ሲም አይፈቀድም MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-ar/strings.xml b/core/res/res/values-mcc310-mnc560-ar/strings.xml
new file mode 100644
index 0000000..12a06fa
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-ar/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"‏لم يتم توفير SIM ‏MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"‏غير مسموح باستخدام SIM ‏MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-az/strings.xml b/core/res/res/values-mcc310-mnc560-az/strings.xml
new file mode 100644
index 0000000..9acc2c1
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-az/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM MM#2 təmin etmir"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM MM#3 dəstəkləmir"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-b+sr+Latn/strings.xml b/core/res/res/values-mcc310-mnc560-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..616f871
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-b+sr+Latn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM kartica nije podešena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-be/strings.xml b/core/res/res/values-mcc310-mnc560-be/strings.xml
new file mode 100644
index 0000000..0e70cf2
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-be/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM-карты няма MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM-карта не дапускаецца MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-bg/strings.xml b/core/res/res/values-mcc310-mnc560-bg/strings.xml
new file mode 100644
index 0000000..49c2d2f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-bg/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM картата не е обезпечена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM картата не е разрешена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-bn/strings.xml b/core/res/res/values-mcc310-mnc560-bn/strings.xml
new file mode 100644
index 0000000..438791d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-bn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"সিমের জন্য প্রস্তুত নয় MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"সিমের অনুমতি নেই MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-bs/strings.xml b/core/res/res/values-mcc310-mnc560-bs/strings.xml
new file mode 100644
index 0000000..82046a6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-bs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM kartica nije dodijeljena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-ca/strings.xml b/core/res/res/values-mcc310-mnc560-ca/strings.xml
new file mode 100644
index 0000000..1eac589
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-ca/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"La SIM no està proporcionada a MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"La SIM no és compatible a MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-cs/strings.xml b/core/res/res/values-mcc310-mnc560-cs/strings.xml
new file mode 100644
index 0000000..4701f99
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-cs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM karta není poskytována (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM karta není povolena (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-da/strings.xml b/core/res/res/values-mcc310-mnc560-da/strings.xml
new file mode 100644
index 0000000..0cef64b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-da/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM-kortet er ikke aktiveret MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM-kort er ikke tilladt MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-de/strings.xml b/core/res/res/values-mcc310-mnc560-de/strings.xml
new file mode 100644
index 0000000..e8fec2c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-de/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM-Karte nicht eingerichtet MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM-Karte nicht zulässig MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-el/strings.xml b/core/res/res/values-mcc310-mnc560-el/strings.xml
new file mode 100644
index 0000000..efd81f7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-el/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Δεν παρέχεται κάρτα SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"Η κάρτα SIM δεν επιτρέπεται MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-en-rAU/strings.xml b/core/res/res/values-mcc310-mnc560-en-rAU/strings.xml
new file mode 100644
index 0000000..c218c64
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-en-rAU/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-en-rCA/strings.xml b/core/res/res/values-mcc310-mnc560-en-rCA/strings.xml
new file mode 100644
index 0000000..c218c64
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-en-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-en-rGB/strings.xml b/core/res/res/values-mcc310-mnc560-en-rGB/strings.xml
new file mode 100644
index 0000000..c218c64
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-en-rGB/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-en-rIN/strings.xml b/core/res/res/values-mcc310-mnc560-en-rIN/strings.xml
new file mode 100644
index 0000000..c218c64
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-en-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-en-rXC/strings.xml b/core/res/res/values-mcc310-mnc560-en-rXC/strings.xml
new file mode 100644
index 0000000..67c05b2
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-en-rXC/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‏‎SIM not provisioned MM#2‎‏‎‎‏‎"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎SIM not allowed MM#3‎‏‎‎‏‎"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-es-rUS/strings.xml b/core/res/res/values-mcc310-mnc560-es-rUS/strings.xml
new file mode 100644
index 0000000..62d61ba
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-es-rUS/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM no provista MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM no permitida MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-es/strings.xml b/core/res/res/values-mcc310-mnc560-es/strings.xml
new file mode 100644
index 0000000..dbd71d5
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-es/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM no proporcionada (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM no admitida (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-et/strings.xml b/core/res/res/values-mcc310-mnc560-et/strings.xml
new file mode 100644
index 0000000..b269ace
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-et/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM-kaart on ette valmistamata MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM-kaart pole lubatud MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-eu/strings.xml b/core/res/res/values-mcc310-mnc560-eu/strings.xml
new file mode 100644
index 0000000..cee0106
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-eu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Ez dago SIM txartelik MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"Ez da onartzen SIM txartela MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-fa/strings.xml b/core/res/res/values-mcc310-mnc560-fa/strings.xml
new file mode 100644
index 0000000..b4683c7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-fa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"‏سیم‌کارت مجوز لازم را ندارد MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"‏سیم‌کارت مجاز نیست MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-fi/strings.xml b/core/res/res/values-mcc310-mnc560-fi/strings.xml
new file mode 100644
index 0000000..54c80ed
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-fi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM-kortti ei käyttäjien hallinnassa MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM-kortti estetty MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-fr-rCA/strings.xml b/core/res/res/values-mcc310-mnc560-fr-rCA/strings.xml
new file mode 100644
index 0000000..8b6c4ec
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-fr-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Carte SIM non configurée, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"Carte SIM non autorisée, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-fr/strings.xml b/core/res/res/values-mcc310-mnc560-fr/strings.xml
new file mode 100644
index 0000000..b52eaf7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-fr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Carte SIM non provisionnée MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"Carte SIM non autorisée MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-gl/strings.xml b/core/res/res/values-mcc310-mnc560-gl/strings.xml
new file mode 100644
index 0000000..a8c04d2
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-gl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Non se introduciu ningunha tarxeta SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"Non se admite a tarxeta SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-gu/strings.xml b/core/res/res/values-mcc310-mnc560-gu/strings.xml
new file mode 100644
index 0000000..c3892da
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-gu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIMને MM#2ની જોગવાઈ નથી"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIMને MM#3 કરવાની મંજૂરી નથી"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-hi/strings.xml b/core/res/res/values-mcc310-mnc560-hi/strings.xml
new file mode 100644
index 0000000..4e07e4f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-hi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM काम नहीं कर रहा है MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM की अनुमति नहीं है MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-hr/strings.xml b/core/res/res/values-mcc310-mnc560-hr/strings.xml
new file mode 100644
index 0000000..dc6653e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-hr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Ne pruža se usluga za SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM nije dopušten MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-hu/strings.xml b/core/res/res/values-mcc310-mnc560-hu/strings.xml
new file mode 100644
index 0000000..1a7a6b3
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-hu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Nem engedélyezett SIM-kártya (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"A SIM-kártya nem engedélyezett (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-hy/strings.xml b/core/res/res/values-mcc310-mnc560-hy/strings.xml
new file mode 100644
index 0000000..c398877
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-hy/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM քարտը նախապատրաստված չէ (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM քարտի օգտագործումն արգելված է (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-in/strings.xml b/core/res/res/values-mcc310-mnc560-in/strings.xml
new file mode 100644
index 0000000..c3c7df3
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-in/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM tidak di-provisioning MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM tidak diizinkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-is/strings.xml b/core/res/res/values-mcc310-mnc560-is/strings.xml
new file mode 100644
index 0000000..4a59abd
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-is/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM-korti ekki úthlutað MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM-kort ekki leyft MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-it/strings.xml b/core/res/res/values-mcc310-mnc560-it/strings.xml
new file mode 100644
index 0000000..d2c966c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-it/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Scheda SIM non predisposta MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"Scheda SIM non consentita MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-iw/strings.xml b/core/res/res/values-mcc310-mnc560-iw/strings.xml
new file mode 100644
index 0000000..68f0aa9
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-iw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"‏כרטיס ה-SIM לא הופעל MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"‏כרטיס ה-SIM לא מורשה לשימוש ברשת הסלולרית MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-ja/strings.xml b/core/res/res/values-mcc310-mnc560-ja/strings.xml
new file mode 100644
index 0000000..0429996
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-ja/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM には対応していません(MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM は許可されていません(MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-ka/strings.xml b/core/res/res/values-mcc310-mnc560-ka/strings.xml
new file mode 100644
index 0000000..b0371f0
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-ka/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM ბარათი უზრუნველყოფილი არ არის (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM ბარათი დაუშვებელია (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-kk/strings.xml b/core/res/res/values-mcc310-mnc560-kk/strings.xml
new file mode 100644
index 0000000..2015f8c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-kk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM картасы қарастырылмаған MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM картасына рұқсат етілмеген MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-km/strings.xml b/core/res/res/values-mcc310-mnc560-km/strings.xml
new file mode 100644
index 0000000..a13ca7d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-km/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"ស៊ីមកាត​មិនត្រូវបានផ្ដល់ជូនទេ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"មិនអនុញ្ញាត​ចំពោះស៊ីមកាតទេ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-kn/strings.xml b/core/res/res/values-mcc310-mnc560-kn/strings.xml
new file mode 100644
index 0000000..da75904
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-kn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"MM#2 ಗೆ ಸಿಮ್‌ ಸಿದ್ಧವಾಗಿಲ್ಲ"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"ಸಿಮ್‌ MM#3 ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-ko/strings.xml b/core/res/res/values-mcc310-mnc560-ko/strings.xml
new file mode 100644
index 0000000..ee71a09c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-ko/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM이 프로비저닝되지 않음 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM이 허용되지 않음 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-ky/strings.xml b/core/res/res/values-mcc310-mnc560-ky/strings.xml
new file mode 100644
index 0000000..856bebc
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-ky/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM карта таанылган жок (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM картаны колдонууга тыюу салынган (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-lo/strings.xml b/core/res/res/values-mcc310-mnc560-lo/strings.xml
new file mode 100644
index 0000000..702470e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-lo/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM ບໍ່ໄດ້ເປີດໃຊ້ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM ບໍ່ອະນຸຍາດ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-lt/strings.xml b/core/res/res/values-mcc310-mnc560-lt/strings.xml
new file mode 100644
index 0000000..c3c5a9e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-lt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM kortelė neteikiama (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM kortelė neleidžiama (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-lv/strings.xml b/core/res/res/values-mcc310-mnc560-lv/strings.xml
new file mode 100644
index 0000000..dcf7805
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-lv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM karte netiek nodrošināta: MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM karti nav atļauts izmantot: MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-mk/strings.xml b/core/res/res/values-mcc310-mnc560-mk/strings.xml
new file mode 100644
index 0000000..cf0ae7e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-mk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Не е обезбедена SIM-картичка, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"Не е дозволена SIM-картичка, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-ml/strings.xml b/core/res/res/values-mcc310-mnc560-ml/strings.xml
new file mode 100644
index 0000000..fb506bf
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-ml/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"സിം MM#2 പ്രൊവിഷൻ ചെയ്‌തിട്ടില്ല"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"സിം MM#3 അനുവദിച്ചിട്ടില്ല"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-mn/strings.xml b/core/res/res/values-mcc310-mnc560-mn/strings.xml
new file mode 100644
index 0000000..0bf1599
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-mn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM-г идэвхжүүлээгүй байна MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM-г зөвшөөрөөгүй байна MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-mr/strings.xml b/core/res/res/values-mcc310-mnc560-mr/strings.xml
new file mode 100644
index 0000000..69e81ad
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-mr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM ने MM#2 ची तरतूद केलेली नाही"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM ने MM#3 ला परवानगी दिली नाही"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-ms/strings.xml b/core/res/res/values-mcc310-mnc560-ms/strings.xml
new file mode 100644
index 0000000..cd0aed7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-ms/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM tidak diperuntukkan MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM tidak dibenarkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-my/strings.xml b/core/res/res/values-mcc310-mnc560-my/strings.xml
new file mode 100644
index 0000000..58fba87
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-my/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-nb/strings.xml b/core/res/res/values-mcc310-mnc560-nb/strings.xml
new file mode 100644
index 0000000..bc90ae1
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-nb/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM-kortet er ikke klargjort, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM-kortet er ikke tillatt, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-ne/strings.xml b/core/res/res/values-mcc310-mnc560-ne/strings.xml
new file mode 100644
index 0000000..75c493d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-ne/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM को प्रावधान छैन MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM लाई अनुमति छैन MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-nl/strings.xml b/core/res/res/values-mcc310-mnc560-nl/strings.xml
new file mode 100644
index 0000000..7241627
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-nl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Simkaart niet geregistreerd MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"Simkaart niet toegestaan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-pa/strings.xml b/core/res/res/values-mcc310-mnc560-pa/strings.xml
new file mode 100644
index 0000000..a2b76be
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-pa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"ਸਿਮ ਦੀ ਵਿਵਸਥਾ ਨਹੀਂ ਹੈ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"ਸਿਮ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-pl/strings.xml b/core/res/res/values-mcc310-mnc560-pl/strings.xml
new file mode 100644
index 0000000..f844db6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-pl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"MM#2 – karta SIM nieobsługiwana"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"MM#3 – niedozwolona karta SIM"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-pt-rBR/strings.xml b/core/res/res/values-mcc310-mnc560-pt-rBR/strings.xml
new file mode 100644
index 0000000..4c10ef9
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-pt-rBR/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-pt-rPT/strings.xml b/core/res/res/values-mcc310-mnc560-pt-rPT/strings.xml
new file mode 100644
index 0000000..4c10ef9
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-pt-rPT/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-pt/strings.xml b/core/res/res/values-mcc310-mnc560-pt/strings.xml
new file mode 100644
index 0000000..4c10ef9
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-pt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-ro/strings.xml b/core/res/res/values-mcc310-mnc560-ro/strings.xml
new file mode 100644
index 0000000..e24b74c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-ro/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Cardul SIM nu este activat MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"Cardul SIM nu este permis MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-ru/strings.xml b/core/res/res/values-mcc310-mnc560-ru/strings.xml
new file mode 100644
index 0000000..35bf36f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-ru/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM-карта не активирована (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"Использование SIM-карты запрещено (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-si/strings.xml b/core/res/res/values-mcc310-mnc560-si/strings.xml
new file mode 100644
index 0000000..4c60ce4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-si/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM MM#2 ප්‍රතිපාදනය නොකරයි"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM MM#3 ඉඩ නොදේ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-sk/strings.xml b/core/res/res/values-mcc310-mnc560-sk/strings.xml
new file mode 100644
index 0000000..ad4aba4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-sk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM karta nie je k dispozícii – MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM karta je zakázaná – MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-sl/strings.xml b/core/res/res/values-mcc310-mnc560-sl/strings.xml
new file mode 100644
index 0000000..7855987
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-sl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Kartica SIM ni omogočena za uporabo MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"Kartica SIM ni dovoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-sq/strings.xml b/core/res/res/values-mcc310-mnc560-sq/strings.xml
new file mode 100644
index 0000000..527430e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-sq/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Karta SIM nuk është dhënë MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"Karta SIM nuk lejohet MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-sr/strings.xml b/core/res/res/values-mcc310-mnc560-sr/strings.xml
new file mode 100644
index 0000000..ec5a2b6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-sr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM картица није подешена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM картица није дозвољена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-sv/strings.xml b/core/res/res/values-mcc310-mnc560-sv/strings.xml
new file mode 100644
index 0000000..d113989
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-sv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM-kort tillhandahålls inte MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM-kort tillåts inte MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-sw/strings.xml b/core/res/res/values-mcc310-mnc560-sw/strings.xml
new file mode 100644
index 0000000..4e3df8b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-sw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM haitumiki MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM hairuhusiwi MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-ta/strings.xml b/core/res/res/values-mcc310-mnc560-ta/strings.xml
new file mode 100644
index 0000000..78f8243
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-ta/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"சிம் அமைக்கப்படவில்லை MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"சிம் அனுமதிக்கப்படவில்லை MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-te/strings.xml b/core/res/res/values-mcc310-mnc560-te/strings.xml
new file mode 100644
index 0000000..aeda941
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-te/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM MM#2ని సక్రియం చేయలేదు"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM MM#3ని అనుమతించలేదు"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-th/strings.xml b/core/res/res/values-mcc310-mnc560-th/strings.xml
new file mode 100644
index 0000000..7896973
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-th/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"ไม่มีการจัดสรรซิม MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"ไม่อนุญาตให้ใช้ซิม MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-tl/strings.xml b/core/res/res/values-mcc310-mnc560-tl/strings.xml
new file mode 100644
index 0000000..ac87cb5
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-tl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"Hindi na-provision ang SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"Hindi pinapahintulutan ang SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-tr/strings.xml b/core/res/res/values-mcc310-mnc560-tr/strings.xml
new file mode 100644
index 0000000..5ea1d80
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-tr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM, MM#2\'nin temel hazırlığını yapamadı"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM MM#3\'e izin vermiyor"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-uk/strings.xml b/core/res/res/values-mcc310-mnc560-uk/strings.xml
new file mode 100644
index 0000000..7ee6b88
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-uk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM-карту не надано (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM-карта заборонена (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-ur/strings.xml b/core/res/res/values-mcc310-mnc560-ur/strings.xml
new file mode 100644
index 0000000..609d3e8
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-ur/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"‏SIM فراہم کردہ نہیں ہے MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"‏SIM کی اجازت نہیں ہے MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-uz/strings.xml b/core/res/res/values-mcc310-mnc560-uz/strings.xml
new file mode 100644
index 0000000..4157041
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-uz/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM karta ishlatish taqiqlangan (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM karta ishlatish taqiqlangan (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-vi/strings.xml b/core/res/res/values-mcc310-mnc560-vi/strings.xml
new file mode 100644
index 0000000..b2284e1
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-vi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"SIM không được cấp phép MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"SIM không được phép MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-zh-rCN/strings.xml b/core/res/res/values-mcc310-mnc560-zh-rCN/strings.xml
new file mode 100644
index 0000000..050ea01
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-zh-rCN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"未配置的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"不被允许的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-zh-rHK/strings.xml b/core/res/res/values-mcc310-mnc560-zh-rHK/strings.xml
new file mode 100644
index 0000000..43cfc01
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-zh-rHK/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-zh-rTW/strings.xml b/core/res/res/values-mcc310-mnc560-zh-rTW/strings.xml
new file mode 100644
index 0000000..43cfc01
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-zh-rTW/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560-zu/strings.xml b/core/res/res/values-mcc310-mnc560-zu/strings.xml
new file mode 100644
index 0000000..e1b7abb
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560-zu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="2976453378311251765">"I-SIM ayinikezelwe MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2519618694918727742">"I-SIM ayivunyelwe MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc560/strings.xml b/core/res/res/values-mcc310-mnc560/strings.xml
new file mode 100644
index 0000000..a3fea29
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc560/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR 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="mmcc_imsi_unknown_in_hlr">SIM not provisioned MM#2</string>
+    <string name="mmcc_illegal_ms">SIM not allowed MM#3</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-af/strings.xml b/core/res/res/values-mcc310-mnc950-af/strings.xml
new file mode 100644
index 0000000..19ae78d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-af/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM is nie opgestel nie MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM word nie toegelaat nie MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-am/strings.xml b/core/res/res/values-mcc310-mnc950-am/strings.xml
new file mode 100644
index 0000000..e81745d
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-am/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"ሲም አልቀረበም MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"ሲም አይፈቀድም MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-ar/strings.xml b/core/res/res/values-mcc310-mnc950-ar/strings.xml
new file mode 100644
index 0000000..1aab01c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-ar/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"‏لم يتم توفير SIM ‏MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"‏غير مسموح باستخدام SIM ‏MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-az/strings.xml b/core/res/res/values-mcc310-mnc950-az/strings.xml
new file mode 100644
index 0000000..26d91ef
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-az/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM MM#2 təmin etmir"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM MM#3 dəstəkləmir"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-b+sr+Latn/strings.xml b/core/res/res/values-mcc310-mnc950-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..44c5d19
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-b+sr+Latn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM kartica nije podešena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-be/strings.xml b/core/res/res/values-mcc310-mnc950-be/strings.xml
new file mode 100644
index 0000000..2bae8c4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-be/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM-карты няма MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM-карта не дапускаецца MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-bg/strings.xml b/core/res/res/values-mcc310-mnc950-bg/strings.xml
new file mode 100644
index 0000000..761b439
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-bg/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM картата не е обезпечена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM картата не е разрешена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-bn/strings.xml b/core/res/res/values-mcc310-mnc950-bn/strings.xml
new file mode 100644
index 0000000..32ba8b8
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-bn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"সিমের জন্য প্রস্তুত নয় MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"সিমের অনুমতি নেই MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-bs/strings.xml b/core/res/res/values-mcc310-mnc950-bs/strings.xml
new file mode 100644
index 0000000..b06b586
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-bs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM kartica nije dodijeljena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-ca/strings.xml b/core/res/res/values-mcc310-mnc950-ca/strings.xml
new file mode 100644
index 0000000..9b77ce7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-ca/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"La SIM no està proporcionada a MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"La SIM no és compatible a MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-cs/strings.xml b/core/res/res/values-mcc310-mnc950-cs/strings.xml
new file mode 100644
index 0000000..3f8b8aa
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-cs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM karta není poskytována (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM karta není povolena (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-da/strings.xml b/core/res/res/values-mcc310-mnc950-da/strings.xml
new file mode 100644
index 0000000..b52d13f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-da/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM-kortet er ikke aktiveret MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM-kort er ikke tilladt MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-de/strings.xml b/core/res/res/values-mcc310-mnc950-de/strings.xml
new file mode 100644
index 0000000..70e3068
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-de/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM-Karte nicht eingerichtet MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM-Karte nicht zulässig MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-el/strings.xml b/core/res/res/values-mcc310-mnc950-el/strings.xml
new file mode 100644
index 0000000..1a2542c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-el/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Δεν παρέχεται κάρτα SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"Η κάρτα SIM δεν επιτρέπεται MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-en-rAU/strings.xml b/core/res/res/values-mcc310-mnc950-en-rAU/strings.xml
new file mode 100644
index 0000000..7ef6605
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-en-rAU/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-en-rCA/strings.xml b/core/res/res/values-mcc310-mnc950-en-rCA/strings.xml
new file mode 100644
index 0000000..7ef6605
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-en-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-en-rGB/strings.xml b/core/res/res/values-mcc310-mnc950-en-rGB/strings.xml
new file mode 100644
index 0000000..7ef6605
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-en-rGB/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-en-rIN/strings.xml b/core/res/res/values-mcc310-mnc950-en-rIN/strings.xml
new file mode 100644
index 0000000..7ef6605
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-en-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-en-rXC/strings.xml b/core/res/res/values-mcc310-mnc950-en-rXC/strings.xml
new file mode 100644
index 0000000..243d731
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-en-rXC/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎SIM not provisioned MM#2‎‏‎‎‏‎"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‎SIM not allowed MM#3‎‏‎‎‏‎"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-es-rUS/strings.xml b/core/res/res/values-mcc310-mnc950-es-rUS/strings.xml
new file mode 100644
index 0000000..31a863c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-es-rUS/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM no provista MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM no permitida MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-es/strings.xml b/core/res/res/values-mcc310-mnc950-es/strings.xml
new file mode 100644
index 0000000..ba8c78b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-es/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM no proporcionada (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM no admitida (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-et/strings.xml b/core/res/res/values-mcc310-mnc950-et/strings.xml
new file mode 100644
index 0000000..013243a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-et/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM-kaart on ette valmistamata MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM-kaart pole lubatud MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-eu/strings.xml b/core/res/res/values-mcc310-mnc950-eu/strings.xml
new file mode 100644
index 0000000..097e423
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-eu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Ez dago SIM txartelik MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"Ez da onartzen SIM txartela MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-fa/strings.xml b/core/res/res/values-mcc310-mnc950-fa/strings.xml
new file mode 100644
index 0000000..3281bb5
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-fa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"‏سیم‌کارت مجوز لازم را ندارد MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"‏سیم‌کارت مجاز نیست MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-fi/strings.xml b/core/res/res/values-mcc310-mnc950-fi/strings.xml
new file mode 100644
index 0000000..01e04f7
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-fi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM-kortti ei käyttäjien hallinnassa MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM-kortti estetty MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-fr-rCA/strings.xml b/core/res/res/values-mcc310-mnc950-fr-rCA/strings.xml
new file mode 100644
index 0000000..a310f82
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-fr-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Carte SIM non configurée, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"Carte SIM non autorisée, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-fr/strings.xml b/core/res/res/values-mcc310-mnc950-fr/strings.xml
new file mode 100644
index 0000000..7b0fb2c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-fr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Carte SIM non provisionnée MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"Carte SIM non autorisée MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-gl/strings.xml b/core/res/res/values-mcc310-mnc950-gl/strings.xml
new file mode 100644
index 0000000..55ff461
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-gl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Non se introduciu ningunha tarxeta SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"Non se admite a tarxeta SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-gu/strings.xml b/core/res/res/values-mcc310-mnc950-gu/strings.xml
new file mode 100644
index 0000000..a6e1a83
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-gu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIMને MM#2ની જોગવાઈ નથી"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIMને MM#3 કરવાની મંજૂરી નથી"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-hi/strings.xml b/core/res/res/values-mcc310-mnc950-hi/strings.xml
new file mode 100644
index 0000000..41b9bc9
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-hi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM काम नहीं कर रहा है MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM की अनुमति नहीं है MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-hr/strings.xml b/core/res/res/values-mcc310-mnc950-hr/strings.xml
new file mode 100644
index 0000000..1c39a09
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-hr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Ne pruža se usluga za SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM nije dopušten MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-hu/strings.xml b/core/res/res/values-mcc310-mnc950-hu/strings.xml
new file mode 100644
index 0000000..6b8ee76
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-hu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Nem engedélyezett SIM-kártya (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"A SIM-kártya nem engedélyezett (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-hy/strings.xml b/core/res/res/values-mcc310-mnc950-hy/strings.xml
new file mode 100644
index 0000000..63dfa46
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-hy/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM քարտը նախապատրաստված չէ (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM քարտի օգտագործումն արգելված է (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-in/strings.xml b/core/res/res/values-mcc310-mnc950-in/strings.xml
new file mode 100644
index 0000000..a7c0232
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-in/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM tidak di-provisioning MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM tidak diizinkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-is/strings.xml b/core/res/res/values-mcc310-mnc950-is/strings.xml
new file mode 100644
index 0000000..ceee15a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-is/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM-korti ekki úthlutað MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM-kort ekki leyft MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-it/strings.xml b/core/res/res/values-mcc310-mnc950-it/strings.xml
new file mode 100644
index 0000000..21e2a4a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-it/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Scheda SIM non predisposta MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"Scheda SIM non consentita MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-iw/strings.xml b/core/res/res/values-mcc310-mnc950-iw/strings.xml
new file mode 100644
index 0000000..041408f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-iw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"‏כרטיס ה-SIM לא הופעל MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"‏כרטיס ה-SIM לא מורשה לשימוש ברשת הסלולרית MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-ja/strings.xml b/core/res/res/values-mcc310-mnc950-ja/strings.xml
new file mode 100644
index 0000000..97f697e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-ja/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM には対応していません(MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM は許可されていません(MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-ka/strings.xml b/core/res/res/values-mcc310-mnc950-ka/strings.xml
new file mode 100644
index 0000000..4d8c8a8
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-ka/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM ბარათი უზრუნველყოფილი არ არის (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM ბარათი დაუშვებელია (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-kk/strings.xml b/core/res/res/values-mcc310-mnc950-kk/strings.xml
new file mode 100644
index 0000000..899a9a2
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-kk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM картасы қарастырылмаған MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM картасына рұқсат етілмеген MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-km/strings.xml b/core/res/res/values-mcc310-mnc950-km/strings.xml
new file mode 100644
index 0000000..3c80d9f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-km/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"ស៊ីមកាត​មិនត្រូវបានផ្ដល់ជូនទេ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"មិនអនុញ្ញាត​ចំពោះស៊ីមកាតទេ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-kn/strings.xml b/core/res/res/values-mcc310-mnc950-kn/strings.xml
new file mode 100644
index 0000000..1c7ab20
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-kn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"MM#2 ಗೆ ಸಿಮ್‌ ಸಿದ್ಧವಾಗಿಲ್ಲ"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"ಸಿಮ್‌ MM#3 ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-ko/strings.xml b/core/res/res/values-mcc310-mnc950-ko/strings.xml
new file mode 100644
index 0000000..2419c2a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-ko/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM이 프로비저닝되지 않음 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM이 허용되지 않음 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-ky/strings.xml b/core/res/res/values-mcc310-mnc950-ky/strings.xml
new file mode 100644
index 0000000..2583338
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-ky/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM карта таанылган жок (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM картаны колдонууга тыюу салынган (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-lo/strings.xml b/core/res/res/values-mcc310-mnc950-lo/strings.xml
new file mode 100644
index 0000000..b69536f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-lo/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM ບໍ່ໄດ້ເປີດໃຊ້ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM ບໍ່ອະນຸຍາດ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-lt/strings.xml b/core/res/res/values-mcc310-mnc950-lt/strings.xml
new file mode 100644
index 0000000..8ef0869
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-lt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM kortelė neteikiama (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM kortelė neleidžiama (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-lv/strings.xml b/core/res/res/values-mcc310-mnc950-lv/strings.xml
new file mode 100644
index 0000000..2a491c0
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-lv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM karte netiek nodrošināta: MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM karti nav atļauts izmantot: MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-mk/strings.xml b/core/res/res/values-mcc310-mnc950-mk/strings.xml
new file mode 100644
index 0000000..a1da44b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-mk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Не е обезбедена SIM-картичка, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"Не е дозволена SIM-картичка, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-ml/strings.xml b/core/res/res/values-mcc310-mnc950-ml/strings.xml
new file mode 100644
index 0000000..0079c08
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-ml/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"സിം MM#2 പ്രൊവിഷൻ ചെയ്‌തിട്ടില്ല"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"സിം MM#3 അനുവദിച്ചിട്ടില്ല"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-mn/strings.xml b/core/res/res/values-mcc310-mnc950-mn/strings.xml
new file mode 100644
index 0000000..2d4b5f5
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-mn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM-г идэвхжүүлээгүй байна MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM-г зөвшөөрөөгүй байна MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-mr/strings.xml b/core/res/res/values-mcc310-mnc950-mr/strings.xml
new file mode 100644
index 0000000..eca7dca
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-mr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM ने MM#2 ची तरतूद केलेली नाही"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM ने MM#3 ला परवानगी दिली नाही"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-ms/strings.xml b/core/res/res/values-mcc310-mnc950-ms/strings.xml
new file mode 100644
index 0000000..4f5c781
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-ms/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM tidak diperuntukkan MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM tidak dibenarkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-my/strings.xml b/core/res/res/values-mcc310-mnc950-my/strings.xml
new file mode 100644
index 0000000..ecf9f61
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-my/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-nb/strings.xml b/core/res/res/values-mcc310-mnc950-nb/strings.xml
new file mode 100644
index 0000000..907482e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-nb/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM-kortet er ikke klargjort, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM-kortet er ikke tillatt, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-ne/strings.xml b/core/res/res/values-mcc310-mnc950-ne/strings.xml
new file mode 100644
index 0000000..380f01c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-ne/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM को प्रावधान छैन MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM लाई अनुमति छैन MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-nl/strings.xml b/core/res/res/values-mcc310-mnc950-nl/strings.xml
new file mode 100644
index 0000000..a01896c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-nl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Simkaart niet geregistreerd MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"Simkaart niet toegestaan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-pa/strings.xml b/core/res/res/values-mcc310-mnc950-pa/strings.xml
new file mode 100644
index 0000000..a67b0fb
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-pa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"ਸਿਮ ਦੀ ਵਿਵਸਥਾ ਨਹੀਂ ਹੈ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"ਸਿਮ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-pl/strings.xml b/core/res/res/values-mcc310-mnc950-pl/strings.xml
new file mode 100644
index 0000000..ce40c22
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-pl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"MM#2 – karta SIM nieobsługiwana"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"MM#3 – niedozwolona karta SIM"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-pt-rBR/strings.xml b/core/res/res/values-mcc310-mnc950-pt-rBR/strings.xml
new file mode 100644
index 0000000..1f89e47
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-pt-rBR/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-pt-rPT/strings.xml b/core/res/res/values-mcc310-mnc950-pt-rPT/strings.xml
new file mode 100644
index 0000000..1f89e47
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-pt-rPT/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-pt/strings.xml b/core/res/res/values-mcc310-mnc950-pt/strings.xml
new file mode 100644
index 0000000..1f89e47
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-pt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-ro/strings.xml b/core/res/res/values-mcc310-mnc950-ro/strings.xml
new file mode 100644
index 0000000..7fb3f2e
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-ro/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Cardul SIM nu este activat MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"Cardul SIM nu este permis MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-ru/strings.xml b/core/res/res/values-mcc310-mnc950-ru/strings.xml
new file mode 100644
index 0000000..16deeed
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-ru/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM-карта не активирована (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"Использование SIM-карты запрещено (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-si/strings.xml b/core/res/res/values-mcc310-mnc950-si/strings.xml
new file mode 100644
index 0000000..dd512d9
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-si/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM MM#2 ප්‍රතිපාදනය නොකරයි"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM MM#3 ඉඩ නොදේ"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-sk/strings.xml b/core/res/res/values-mcc310-mnc950-sk/strings.xml
new file mode 100644
index 0000000..6a8e6f0
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-sk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM karta nie je k dispozícii – MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM karta je zakázaná – MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-sl/strings.xml b/core/res/res/values-mcc310-mnc950-sl/strings.xml
new file mode 100644
index 0000000..391ee78
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-sl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Kartica SIM ni omogočena za uporabo MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"Kartica SIM ni dovoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-sq/strings.xml b/core/res/res/values-mcc310-mnc950-sq/strings.xml
new file mode 100644
index 0000000..ebc978c
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-sq/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Karta SIM nuk është dhënë MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"Karta SIM nuk lejohet MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-sr/strings.xml b/core/res/res/values-mcc310-mnc950-sr/strings.xml
new file mode 100644
index 0000000..4f3f86f
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-sr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM картица није подешена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM картица није дозвољена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-sv/strings.xml b/core/res/res/values-mcc310-mnc950-sv/strings.xml
new file mode 100644
index 0000000..4739f06
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-sv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM-kort tillhandahålls inte MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM-kort tillåts inte MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-sw/strings.xml b/core/res/res/values-mcc310-mnc950-sw/strings.xml
new file mode 100644
index 0000000..903b4a5
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-sw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM haitumiki MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM hairuhusiwi MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-ta/strings.xml b/core/res/res/values-mcc310-mnc950-ta/strings.xml
new file mode 100644
index 0000000..8838aed
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-ta/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"சிம் அமைக்கப்படவில்லை MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"சிம் அனுமதிக்கப்படவில்லை MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-te/strings.xml b/core/res/res/values-mcc310-mnc950-te/strings.xml
new file mode 100644
index 0000000..dc9625b
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-te/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM MM#2ని సక్రియం చేయలేదు"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM MM#3ని అనుమతించలేదు"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-th/strings.xml b/core/res/res/values-mcc310-mnc950-th/strings.xml
new file mode 100644
index 0000000..3feb1f6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-th/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"ไม่มีการจัดสรรซิม MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"ไม่อนุญาตให้ใช้ซิม MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-tl/strings.xml b/core/res/res/values-mcc310-mnc950-tl/strings.xml
new file mode 100644
index 0000000..55e0bfd
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-tl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"Hindi na-provision ang SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"Hindi pinapahintulutan ang SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-tr/strings.xml b/core/res/res/values-mcc310-mnc950-tr/strings.xml
new file mode 100644
index 0000000..7a274a4
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-tr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM, MM#2\'nin temel hazırlığını yapamadı"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM MM#3\'e izin vermiyor"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-uk/strings.xml b/core/res/res/values-mcc310-mnc950-uk/strings.xml
new file mode 100644
index 0000000..bf5e6411
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-uk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM-карту не надано (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM-карта заборонена (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-ur/strings.xml b/core/res/res/values-mcc310-mnc950-ur/strings.xml
new file mode 100644
index 0000000..35857cd
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-ur/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"‏SIM فراہم کردہ نہیں ہے MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"‏SIM کی اجازت نہیں ہے MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-uz/strings.xml b/core/res/res/values-mcc310-mnc950-uz/strings.xml
new file mode 100644
index 0000000..e31c7b6
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-uz/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM karta ishlatish taqiqlangan (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM karta ishlatish taqiqlangan (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-vi/strings.xml b/core/res/res/values-mcc310-mnc950-vi/strings.xml
new file mode 100644
index 0000000..b9360b5
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-vi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"SIM không được cấp phép MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"SIM không được phép MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-zh-rCN/strings.xml b/core/res/res/values-mcc310-mnc950-zh-rCN/strings.xml
new file mode 100644
index 0000000..3b4ba0a
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-zh-rCN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"未配置的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"不被允许的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-zh-rHK/strings.xml b/core/res/res/values-mcc310-mnc950-zh-rHK/strings.xml
new file mode 100644
index 0000000..763e498
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-zh-rHK/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-zh-rTW/strings.xml b/core/res/res/values-mcc310-mnc950-zh-rTW/strings.xml
new file mode 100644
index 0000000..763e498
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-zh-rTW/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950-zu/strings.xml b/core/res/res/values-mcc310-mnc950-zu/strings.xml
new file mode 100644
index 0000000..1c29754
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950-zu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="94675382531896663">"I-SIM ayinikezelwe MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2418195136279399212">"I-SIM ayivunyelwe MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc310-mnc950/strings.xml b/core/res/res/values-mcc310-mnc950/strings.xml
new file mode 100644
index 0000000..a3fea29
--- /dev/null
+++ b/core/res/res/values-mcc310-mnc950/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR 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="mmcc_imsi_unknown_in_hlr">SIM not provisioned MM#2</string>
+    <string name="mmcc_illegal_ms">SIM not allowed MM#3</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-af/strings.xml b/core/res/res/values-mcc311-mnc180-af/strings.xml
new file mode 100644
index 0000000..ead8992
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-af/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM is nie opgestel nie MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM word nie toegelaat nie MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-am/strings.xml b/core/res/res/values-mcc311-mnc180-am/strings.xml
new file mode 100644
index 0000000..a7d0d1d
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-am/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"ሲም አልቀረበም MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"ሲም አይፈቀድም MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-ar/strings.xml b/core/res/res/values-mcc311-mnc180-ar/strings.xml
new file mode 100644
index 0000000..f5412bd
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-ar/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"‏لم يتم توفير SIM ‏MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"‏غير مسموح باستخدام SIM ‏MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-az/strings.xml b/core/res/res/values-mcc311-mnc180-az/strings.xml
new file mode 100644
index 0000000..c2c06be
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-az/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM MM#2 təmin etmir"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM MM#3 dəstəkləmir"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-b+sr+Latn/strings.xml b/core/res/res/values-mcc311-mnc180-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..e8b35c3
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-b+sr+Latn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM kartica nije podešena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-be/strings.xml b/core/res/res/values-mcc311-mnc180-be/strings.xml
new file mode 100644
index 0000000..f2c1069
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-be/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM-карты няма MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM-карта не дапускаецца MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-bg/strings.xml b/core/res/res/values-mcc311-mnc180-bg/strings.xml
new file mode 100644
index 0000000..faf5a42
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-bg/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM картата не е обезпечена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM картата не е разрешена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-bn/strings.xml b/core/res/res/values-mcc311-mnc180-bn/strings.xml
new file mode 100644
index 0000000..80efd0f
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-bn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"সিমের জন্য প্রস্তুত নয় MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"সিমের অনুমতি নেই MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-bs/strings.xml b/core/res/res/values-mcc311-mnc180-bs/strings.xml
new file mode 100644
index 0000000..7c3e5b3
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-bs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM kartica nije dodijeljena MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM kartica nije dozvoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-ca/strings.xml b/core/res/res/values-mcc311-mnc180-ca/strings.xml
new file mode 100644
index 0000000..e33a901
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-ca/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"La SIM no està proporcionada a MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"La SIM no és compatible a MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-cs/strings.xml b/core/res/res/values-mcc311-mnc180-cs/strings.xml
new file mode 100644
index 0000000..653a55a
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-cs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM karta není poskytována (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM karta není povolena (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-da/strings.xml b/core/res/res/values-mcc311-mnc180-da/strings.xml
new file mode 100644
index 0000000..10a9818
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-da/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM-kortet er ikke aktiveret MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM-kort er ikke tilladt MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-de/strings.xml b/core/res/res/values-mcc311-mnc180-de/strings.xml
new file mode 100644
index 0000000..8fef081
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-de/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM-Karte nicht eingerichtet MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM-Karte nicht zulässig MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-el/strings.xml b/core/res/res/values-mcc311-mnc180-el/strings.xml
new file mode 100644
index 0000000..795f48f
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-el/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Δεν παρέχεται κάρτα SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"Η κάρτα SIM δεν επιτρέπεται MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-en-rAU/strings.xml b/core/res/res/values-mcc311-mnc180-en-rAU/strings.xml
new file mode 100644
index 0000000..9c972bc
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-en-rAU/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-en-rCA/strings.xml b/core/res/res/values-mcc311-mnc180-en-rCA/strings.xml
new file mode 100644
index 0000000..9c972bc
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-en-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-en-rGB/strings.xml b/core/res/res/values-mcc311-mnc180-en-rGB/strings.xml
new file mode 100644
index 0000000..9c972bc
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-en-rGB/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-en-rIN/strings.xml b/core/res/res/values-mcc311-mnc180-en-rIN/strings.xml
new file mode 100644
index 0000000..9c972bc
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-en-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM not provisioned MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM not allowed MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-en-rXC/strings.xml b/core/res/res/values-mcc311-mnc180-en-rXC/strings.xml
new file mode 100644
index 0000000..f1a6cc7
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-en-rXC/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‎‎SIM not provisioned MM#2‎‏‎‎‏‎"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎‏‎‎‎‏‎SIM not allowed MM#3‎‏‎‎‏‎"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-es-rUS/strings.xml b/core/res/res/values-mcc311-mnc180-es-rUS/strings.xml
new file mode 100644
index 0000000..694cd76
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-es-rUS/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM no provista MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM no permitida MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-es/strings.xml b/core/res/res/values-mcc311-mnc180-es/strings.xml
new file mode 100644
index 0000000..605e314
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-es/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM no proporcionada (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM no admitida (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-et/strings.xml b/core/res/res/values-mcc311-mnc180-et/strings.xml
new file mode 100644
index 0000000..39dfa1b
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-et/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM-kaart on ette valmistamata MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM-kaart pole lubatud MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-eu/strings.xml b/core/res/res/values-mcc311-mnc180-eu/strings.xml
new file mode 100644
index 0000000..84732c9
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-eu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Ez dago SIM txartelik MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"Ez da onartzen SIM txartela MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-fa/strings.xml b/core/res/res/values-mcc311-mnc180-fa/strings.xml
new file mode 100644
index 0000000..902d821
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-fa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"‏سیم‌کارت مجوز لازم را ندارد MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"‏سیم‌کارت مجاز نیست MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-fi/strings.xml b/core/res/res/values-mcc311-mnc180-fi/strings.xml
new file mode 100644
index 0000000..004e645
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-fi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM-kortti ei käyttäjien hallinnassa MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM-kortti estetty MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-fr-rCA/strings.xml b/core/res/res/values-mcc311-mnc180-fr-rCA/strings.xml
new file mode 100644
index 0000000..c0aaf99
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-fr-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Carte SIM non configurée, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"Carte SIM non autorisée, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-fr/strings.xml b/core/res/res/values-mcc311-mnc180-fr/strings.xml
new file mode 100644
index 0000000..b9adf79
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-fr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Carte SIM non provisionnée MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"Carte SIM non autorisée MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-gl/strings.xml b/core/res/res/values-mcc311-mnc180-gl/strings.xml
new file mode 100644
index 0000000..cb59c97
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-gl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Non se introduciu ningunha tarxeta SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"Non se admite a tarxeta SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-gu/strings.xml b/core/res/res/values-mcc311-mnc180-gu/strings.xml
new file mode 100644
index 0000000..556416e
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-gu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIMને MM#2ની જોગવાઈ નથી"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIMને MM#3 કરવાની મંજૂરી નથી"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-hi/strings.xml b/core/res/res/values-mcc311-mnc180-hi/strings.xml
new file mode 100644
index 0000000..da1f9e1
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-hi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM काम नहीं कर रहा है MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM की अनुमति नहीं है MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-hr/strings.xml b/core/res/res/values-mcc311-mnc180-hr/strings.xml
new file mode 100644
index 0000000..a1f0b0e
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-hr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Ne pruža se usluga za SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM nije dopušten MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-hu/strings.xml b/core/res/res/values-mcc311-mnc180-hu/strings.xml
new file mode 100644
index 0000000..917c2ee9
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-hu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Nem engedélyezett SIM-kártya (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"A SIM-kártya nem engedélyezett (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-hy/strings.xml b/core/res/res/values-mcc311-mnc180-hy/strings.xml
new file mode 100644
index 0000000..a832d02
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-hy/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM քարտը նախապատրաստված չէ (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM քարտի օգտագործումն արգելված է (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-in/strings.xml b/core/res/res/values-mcc311-mnc180-in/strings.xml
new file mode 100644
index 0000000..bdc8d20
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-in/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM tidak di-provisioning MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM tidak diizinkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-is/strings.xml b/core/res/res/values-mcc311-mnc180-is/strings.xml
new file mode 100644
index 0000000..35966f7
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-is/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM-korti ekki úthlutað MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM-kort ekki leyft MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-it/strings.xml b/core/res/res/values-mcc311-mnc180-it/strings.xml
new file mode 100644
index 0000000..25f301b
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-it/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Scheda SIM non predisposta MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"Scheda SIM non consentita MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-iw/strings.xml b/core/res/res/values-mcc311-mnc180-iw/strings.xml
new file mode 100644
index 0000000..c6bdc14
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-iw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"‏כרטיס ה-SIM לא הופעל MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"‏כרטיס ה-SIM לא מורשה לשימוש ברשת הסלולרית MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-ja/strings.xml b/core/res/res/values-mcc311-mnc180-ja/strings.xml
new file mode 100644
index 0000000..6d30808
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-ja/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM には対応していません(MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM は許可されていません(MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-ka/strings.xml b/core/res/res/values-mcc311-mnc180-ka/strings.xml
new file mode 100644
index 0000000..b86ce07
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-ka/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM ბარათი უზრუნველყოფილი არ არის (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM ბარათი დაუშვებელია (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-kk/strings.xml b/core/res/res/values-mcc311-mnc180-kk/strings.xml
new file mode 100644
index 0000000..539fbe4
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-kk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM картасы қарастырылмаған MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM картасына рұқсат етілмеген MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-km/strings.xml b/core/res/res/values-mcc311-mnc180-km/strings.xml
new file mode 100644
index 0000000..970532e
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-km/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"ស៊ីមកាត​មិនត្រូវបានផ្ដល់ជូនទេ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"មិនអនុញ្ញាត​ចំពោះស៊ីមកាតទេ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-kn/strings.xml b/core/res/res/values-mcc311-mnc180-kn/strings.xml
new file mode 100644
index 0000000..53a0419
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-kn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"MM#2 ಗೆ ಸಿಮ್‌ ಸಿದ್ಧವಾಗಿಲ್ಲ"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"ಸಿಮ್‌ MM#3 ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-ko/strings.xml b/core/res/res/values-mcc311-mnc180-ko/strings.xml
new file mode 100644
index 0000000..01d6fec
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-ko/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM이 프로비저닝되지 않음 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM이 허용되지 않음 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-ky/strings.xml b/core/res/res/values-mcc311-mnc180-ky/strings.xml
new file mode 100644
index 0000000..7339e40
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-ky/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM карта таанылган жок (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM картаны колдонууга тыюу салынган (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-lo/strings.xml b/core/res/res/values-mcc311-mnc180-lo/strings.xml
new file mode 100644
index 0000000..5cbd1c8
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-lo/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM ບໍ່ໄດ້ເປີດໃຊ້ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM ບໍ່ອະນຸຍາດ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-lt/strings.xml b/core/res/res/values-mcc311-mnc180-lt/strings.xml
new file mode 100644
index 0000000..40a7e4a
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-lt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM kortelė neteikiama (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM kortelė neleidžiama (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-lv/strings.xml b/core/res/res/values-mcc311-mnc180-lv/strings.xml
new file mode 100644
index 0000000..74b6818
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-lv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM karte netiek nodrošināta: MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM karti nav atļauts izmantot: MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-mk/strings.xml b/core/res/res/values-mcc311-mnc180-mk/strings.xml
new file mode 100644
index 0000000..7db80fa
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-mk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Не е обезбедена SIM-картичка, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"Не е дозволена SIM-картичка, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-ml/strings.xml b/core/res/res/values-mcc311-mnc180-ml/strings.xml
new file mode 100644
index 0000000..7cdd126
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-ml/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"സിം MM#2 പ്രൊവിഷൻ ചെയ്‌തിട്ടില്ല"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"സിം MM#3 അനുവദിച്ചിട്ടില്ല"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-mn/strings.xml b/core/res/res/values-mcc311-mnc180-mn/strings.xml
new file mode 100644
index 0000000..1be055c
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-mn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM-г идэвхжүүлээгүй байна MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM-г зөвшөөрөөгүй байна MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-mr/strings.xml b/core/res/res/values-mcc311-mnc180-mr/strings.xml
new file mode 100644
index 0000000..f8e08ae
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-mr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM ने MM#2 ची तरतूद केलेली नाही"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM ने MM#3 ला परवानगी दिली नाही"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-ms/strings.xml b/core/res/res/values-mcc311-mnc180-ms/strings.xml
new file mode 100644
index 0000000..305a10d
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-ms/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM tidak diperuntukkan MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM tidak dibenarkan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-my/strings.xml b/core/res/res/values-mcc311-mnc180-my/strings.xml
new file mode 100644
index 0000000..306c0dd
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-my/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-nb/strings.xml b/core/res/res/values-mcc311-mnc180-nb/strings.xml
new file mode 100644
index 0000000..e1296f4
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-nb/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM-kortet er ikke klargjort, MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM-kortet er ikke tillatt, MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-ne/strings.xml b/core/res/res/values-mcc311-mnc180-ne/strings.xml
new file mode 100644
index 0000000..6177a83
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-ne/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM को प्रावधान छैन MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM लाई अनुमति छैन MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-nl/strings.xml b/core/res/res/values-mcc311-mnc180-nl/strings.xml
new file mode 100644
index 0000000..3f12e64
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-nl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Simkaart niet geregistreerd MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"Simkaart niet toegestaan MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-pa/strings.xml b/core/res/res/values-mcc311-mnc180-pa/strings.xml
new file mode 100644
index 0000000..32f6a7e
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-pa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"ਸਿਮ ਦੀ ਵਿਵਸਥਾ ਨਹੀਂ ਹੈ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"ਸਿਮ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-pl/strings.xml b/core/res/res/values-mcc311-mnc180-pl/strings.xml
new file mode 100644
index 0000000..0744491
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-pl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"MM#2 – karta SIM nieobsługiwana"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"MM#3 – niedozwolona karta SIM"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-pt-rBR/strings.xml b/core/res/res/values-mcc311-mnc180-pt-rBR/strings.xml
new file mode 100644
index 0000000..c4d2240
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-pt-rBR/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-pt-rPT/strings.xml b/core/res/res/values-mcc311-mnc180-pt-rPT/strings.xml
new file mode 100644
index 0000000..c4d2240
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-pt-rPT/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-pt/strings.xml b/core/res/res/values-mcc311-mnc180-pt/strings.xml
new file mode 100644
index 0000000..c4d2240
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-pt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM não aprovisionado MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM não permitido MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-ro/strings.xml b/core/res/res/values-mcc311-mnc180-ro/strings.xml
new file mode 100644
index 0000000..68cab29
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-ro/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Cardul SIM nu este activat MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"Cardul SIM nu este permis MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-ru/strings.xml b/core/res/res/values-mcc311-mnc180-ru/strings.xml
new file mode 100644
index 0000000..90a3a09
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-ru/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM-карта не активирована (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"Использование SIM-карты запрещено (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-si/strings.xml b/core/res/res/values-mcc311-mnc180-si/strings.xml
new file mode 100644
index 0000000..1907d3e
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-si/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM MM#2 ප්‍රතිපාදනය නොකරයි"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM MM#3 ඉඩ නොදේ"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-sk/strings.xml b/core/res/res/values-mcc311-mnc180-sk/strings.xml
new file mode 100644
index 0000000..a456431
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-sk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM karta nie je k dispozícii – MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM karta je zakázaná – MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-sl/strings.xml b/core/res/res/values-mcc311-mnc180-sl/strings.xml
new file mode 100644
index 0000000..454a1cd
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-sl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Kartica SIM ni omogočena za uporabo MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"Kartica SIM ni dovoljena MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-sq/strings.xml b/core/res/res/values-mcc311-mnc180-sq/strings.xml
new file mode 100644
index 0000000..23da1a3
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-sq/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Karta SIM nuk është dhënë MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"Karta SIM nuk lejohet MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-sr/strings.xml b/core/res/res/values-mcc311-mnc180-sr/strings.xml
new file mode 100644
index 0000000..182a7bc
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-sr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM картица није подешена MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM картица није дозвољена MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-sv/strings.xml b/core/res/res/values-mcc311-mnc180-sv/strings.xml
new file mode 100644
index 0000000..fee7a1f
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-sv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM-kort tillhandahålls inte MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM-kort tillåts inte MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-sw/strings.xml b/core/res/res/values-mcc311-mnc180-sw/strings.xml
new file mode 100644
index 0000000..e49b3d1
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-sw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM haitumiki MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM hairuhusiwi MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-ta/strings.xml b/core/res/res/values-mcc311-mnc180-ta/strings.xml
new file mode 100644
index 0000000..6c11c4f
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-ta/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"சிம் அமைக்கப்படவில்லை MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"சிம் அனுமதிக்கப்படவில்லை MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-te/strings.xml b/core/res/res/values-mcc311-mnc180-te/strings.xml
new file mode 100644
index 0000000..5bb9f97
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-te/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM MM#2ని సక్రియం చేయలేదు"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM MM#3ని అనుమతించలేదు"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-th/strings.xml b/core/res/res/values-mcc311-mnc180-th/strings.xml
new file mode 100644
index 0000000..be4b08e
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-th/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"ไม่มีการจัดสรรซิม MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"ไม่อนุญาตให้ใช้ซิม MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-tl/strings.xml b/core/res/res/values-mcc311-mnc180-tl/strings.xml
new file mode 100644
index 0000000..6aacf16
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-tl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"Hindi na-provision ang SIM MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"Hindi pinapahintulutan ang SIM MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-tr/strings.xml b/core/res/res/values-mcc311-mnc180-tr/strings.xml
new file mode 100644
index 0000000..cf4fd77
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-tr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM, MM#2\'nin temel hazırlığını yapamadı"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM MM#3\'e izin vermiyor"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-uk/strings.xml b/core/res/res/values-mcc311-mnc180-uk/strings.xml
new file mode 100644
index 0000000..fae40ac
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-uk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM-карту не надано (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM-карта заборонена (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-ur/strings.xml b/core/res/res/values-mcc311-mnc180-ur/strings.xml
new file mode 100644
index 0000000..ebceb5e
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-ur/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"‏SIM فراہم کردہ نہیں ہے MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"‏SIM کی اجازت نہیں ہے MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-uz/strings.xml b/core/res/res/values-mcc311-mnc180-uz/strings.xml
new file mode 100644
index 0000000..ebcdd3b
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-uz/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM karta ishlatish taqiqlangan (MM#2)"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM karta ishlatish taqiqlangan (MM#3)"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-vi/strings.xml b/core/res/res/values-mcc311-mnc180-vi/strings.xml
new file mode 100644
index 0000000..0d7ff96
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-vi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"SIM không được cấp phép MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM không được phép MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-zh-rCN/strings.xml b/core/res/res/values-mcc311-mnc180-zh-rCN/strings.xml
new file mode 100644
index 0000000..d8ff182
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-zh-rCN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"未配置的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"不被允许的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-zh-rHK/strings.xml b/core/res/res/values-mcc311-mnc180-zh-rHK/strings.xml
new file mode 100644
index 0000000..14332bf
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-zh-rHK/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"SIM 卡不允許 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-zh-rTW/strings.xml b/core/res/res/values-mcc311-mnc180-zh-rTW/strings.xml
new file mode 100644
index 0000000..775a70b
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-zh-rTW/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"未佈建的 SIM 卡 MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"不支援的 SIM 卡 MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180-zu/strings.xml b/core/res/res/values-mcc311-mnc180-zu/strings.xml
new file mode 100644
index 0000000..a66760f
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180-zu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="531930017979728896">"I-SIM ayinikezelwe MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="97745044956236881">"I-SIM ayivunyelwe MM#3"</string>
+</resources>
diff --git a/core/res/res/values-mcc311-mnc180/strings.xml b/core/res/res/values-mcc311-mnc180/strings.xml
new file mode 100644
index 0000000..a3fea29
--- /dev/null
+++ b/core/res/res/values-mcc311-mnc180/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR 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="mmcc_imsi_unknown_in_hlr">SIM not provisioned MM#2</string>
+    <string name="mmcc_illegal_ms">SIM not allowed MM#3</string>
+</resources>
diff --git a/core/res/res/values-mcc340-mnc01/config.xml b/core/res/res/values-mcc340-mnc01/config.xml
index cfc1380..1ca8963 100644
--- a/core/res/res/values-mcc340-mnc01/config.xml
+++ b/core/res/res/values-mcc340-mnc01/config.xml
@@ -38,10 +38,4 @@
     <string-array translatable="false" name="config_tether_apndata">
         <item>Orangeweb,orangeweb,,,orange,orange,,,,,340,01,1,DUN</item>
     </string-array>
-
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>20801</item>
-        <item>20815</item>
-    </string-array>
-
 </resources>
diff --git a/core/res/res/values-mcc404/config.xml b/core/res/res/values-mcc404/config.xml
index d6655f2..4cadef7 100644
--- a/core/res/res/values-mcc404/config.xml
+++ b/core/res/res/values-mcc404/config.xml
@@ -18,11 +18,6 @@
 -->
 
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Show roaming icon though same named operators. -->
-    <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
-        <item>404</item>
-        <item>405</item>
-    </string-array>
     <!-- Whether camera shutter sound is forced or not  (country specific). -->
     <bool name="config_camera_sound_forced">true</bool>
     <!-- Show area update info settings in CellBroadcastReceiver and information in SIM status in Settings app -->
diff --git a/core/res/res/values-mcc405/config.xml b/core/res/res/values-mcc405/config.xml
index 17539d8..6b77e9c 100644
--- a/core/res/res/values-mcc405/config.xml
+++ b/core/res/res/values-mcc405/config.xml
@@ -18,11 +18,6 @@
 -->
 
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Show roaming icon though same named operators. -->
-    <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
-        <item>404</item>
-        <item>405</item>
-    </string-array>
     <!-- Whether camera shutter sound is forced or not  (country specific). -->
     <bool name="config_camera_sound_forced">true</bool>
 </resources>
diff --git a/core/res/res/values-mcc425-mnc07/config.xml b/core/res/res/values-mcc425-mnc07/config.xml
index a092fb9..770cebd 100644
--- a/core/res/res/values-mcc425-mnc07/config.xml
+++ b/core/res/res/values-mcc425-mnc07/config.xml
@@ -39,9 +39,4 @@
     <string-array translatable="false" name="config_tether_apndata">
       <item>PC HOT mobile,pc.hotm,,,,,,,,,425,07,,DUN</item>
     </string-array>
-
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>42503</item>
-    </string-array>
 </resources>
diff --git a/core/res/res/values-mcc425-mnc08/config.xml b/core/res/res/values-mcc425-mnc08/config.xml
deleted file mode 100644
index 8470b86..0000000
--- a/core/res/res/values-mcc425-mnc08/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>42502</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc510-mnc21/config.xml b/core/res/res/values-mcc510-mnc21/config.xml
deleted file mode 100644
index 1fd9dfa..0000000
--- a/core/res/res/values-mcc510-mnc21/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>51001</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc520/config.xml b/core/res/res/values-mcc520/config.xml
deleted file mode 100644
index b2f3efa..0000000
--- a/core/res/res/values-mcc520/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Show roaming icon though same named operators. -->
-    <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
-        <item>520</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc530-mnc24/config.xml b/core/res/res/values-mcc530-mnc24/config.xml
deleted file mode 100644
index 5598e8d..0000000
--- a/core/res/res/values-mcc530-mnc24/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Show roaming icon though same named operators. -->
-    <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
-        <item>53001</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc722-mnc36/config.xml b/core/res/res/values-mcc722-mnc36/config.xml
deleted file mode 100644
index daf5373..0000000
--- a/core/res/res/values-mcc722-mnc36/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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 my obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR 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">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>72234</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc730-mnc01/config.xml b/core/res/res/values-mcc730-mnc01/config.xml
deleted file mode 100644
index 22f4027..0000000
--- a/core/res/res/values-mcc730-mnc01/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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 my obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR 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">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>73010</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc730-mnc07/config.xml b/core/res/res/values-mcc730-mnc07/config.xml
deleted file mode 100644
index 836ddf9..0000000
--- a/core/res/res/values-mcc730-mnc07/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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 my obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR 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">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>73002</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc730-mnc08/config.xml b/core/res/res/values-mcc730-mnc08/config.xml
deleted file mode 100644
index 836ddf9..0000000
--- a/core/res/res/values-mcc730-mnc08/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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 my obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR 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">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>73002</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mcc730-mnc10/config.xml b/core/res/res/values-mcc730-mnc10/config.xml
deleted file mode 100644
index 58b7d78..0000000
--- a/core/res/res/values-mcc730-mnc10/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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 my obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR 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">
-    <!-- Don't use roaming icon for considered operators -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-        <item>73001</item>
-    </string-array>
-</resources>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 77eaeb7..968a7cd 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"Б"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"КБ"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"МБ"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"ГБ"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"ТБ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"ПБ"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> дена"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> ден <xliff:g id="HOURS">%2$d</xliff:g> ч."</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> ден <xliff:g id="HOURS">%2$d</xliff:g> ч."</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ч."</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ч. <xliff:g id="MINUTES">%2$d</xliff:g> мин."</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ч. <xliff:g id="MINUTES">%2$d</xliff:g> мин."</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> мин."</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> мин."</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> мин. <xliff:g id="SECONDS">%2$d</xliff:g> с."</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> мин. <xliff:g id="SECONDS">%2$d</xliff:g> с."</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> сек."</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> сек."</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Без наслов&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Нема телефонски број)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Непознато"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Нема услуга за говорни/итни повици"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Привремено не се нуди од мобилната мрежа на вашата локација"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Не може да се дојде до мрежата"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"За подобрување на приемот, обидете се да го промените избраниот тип во: Систем &gt; Мрежа и интернет &gt; Мобилни мрежи &gt; Претпочитан тип мрежа."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"За подобрување на приемот, обидете се да го промените избраниот тип во „Поставки &gt; Мрежа и интернет &gt; Мобилни мрежи &gt; Претпочитан тип мрежа“."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"„Повикување преку Wi‑Fi“ е активна"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"За итните повици е потребна мобилна мрежа."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Предупредувања"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Проследување повик"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Режим на итен повратен повик"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Предупредувања за мобилен интернет"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Статус на мобилна мрежа"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS-пораки"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Пораки од говорна пошта"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Повикување преку Wi-Fi"</string>
@@ -1782,4 +1768,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Не е обезбедена SIM-картичка"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Не е дозволена SIM-картичка"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Не е дозволен телефон"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Појавен прозорец"</string>
 </resources>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index 7d89ca5..51f68e6 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> ദിവസം"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> ദിവസം <xliff:g id="HOURS">%2$d</xliff:g> മണിക്കൂർ"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> ദിവസം <xliff:g id="HOURS">%2$d</xliff:g> മണിക്കൂർ"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> മണിക്കൂർ"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> മണിക്കൂർ <xliff:g id="MINUTES">%2$d</xliff:g> മിനിറ്റ്"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> മണിക്കൂർ <xliff:g id="MINUTES">%2$d</xliff:g> മിനിറ്റ്"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> മിനിറ്റ്"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> മി."</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> മിനിറ്റ് <xliff:g id="SECONDS">%2$d</xliff:g> സെക്കൻഡ്"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> മിനിറ്റ് <xliff:g id="SECONDS">%2$d</xliff:g> സെക്കൻഡ്"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> സെക്കൻഡ്"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> സെക്കൻഡ്"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;ശീർഷകമില്ലാത്ത&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(ഫോൺ നമ്പറില്ല)"</string>
     <string name="unknownName" msgid="6867811765370350269">"അജ്ഞാതം"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"വോയ്സ്/അടിയന്തിര സേവനമില്ല"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"നിങ്ങളുടെ ലൊക്കേഷനിൽ മൊബൈൽ നെറ്റ്‌വര്‍ക്ക് താൽക്കാലികമായി ലഭ്യമല്ല"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"നെറ്റ്‌വർക്കിലേക്ക് കണക്റ്റുചെയ്യാനാവുന്നില്ല"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"സ്വീകരണം മെച്ചപ്പെടുത്തുന്നതിന് സിസ്റ്റം &gt; നെറ്റ്‌വർക്കും ഇന്റർനെറ്റും &gt; മൊബൈൽ നെറ്റ്‌വർക്കുകൾ &gt; തിരഞ്ഞെടുത്ത നെറ്റ്‌വർക്ക് തരം എന്നതിൽ തിരഞ്ഞെടുത്തിരിക്കുന്ന തരം മാറ്റിക്കൊണ്ട് ശ്രമിച്ചുനോക്കുക."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"സ്വീകരണം മെച്ചപ്പെടുത്തുന്നതിന് സിസ്‌റ്റം &gt; നെറ്റ്‌വർക്കും ഇ‌ന്റെർനെറ്റും &gt; മൊബൈൽ നെറ്റ്‌വർക്കുകൾ &gt; തിരഞ്ഞെടുത്ത നെറ്റ്‌വർക്ക് തരം എന്നതിൽ തിരഞ്ഞെടുത്തിരിക്കുന്ന തരം മാറ്റിക്കൊണ്ട് ശ്രമിച്ചുനോക്കുക."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"വൈ-ഫൈ കോളിംഗ് സജീവമാണ്"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"എമർജൻസി കോളുകൾ ചെയ്യാൻ ഒരു മൊബൈൽ നെറ്റ്‌വർക്ക് ആവശ്യമാണ്."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"അലേർട്ടുകൾ"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"കോൾ ഫോർവേഡിംഗ്"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"അടിയന്തര കോൾബാക്ക് മോഡ്"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"മൊബൈൽ ഡാറ്റ അലേർട്ടുകൾ"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"മൊബൈൽ ഡാറ്റാ നില"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS സന്ദേശങ്ങൾ"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"വോയ്‌സ്‌മെയിൽ സന്ദേശങ്ങൾ"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"വൈഫൈ കോളിംഗ്"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM പ്രൊവിഷൻ ചെയ്തിട്ടില്ല"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM അനുവദനീയമല്ല"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"ഫോൺ അനുവദനീയമല്ല"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"പോപ്പ് അപ്പ് വിൻഡോ"</string>
 </resources>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index c1206ea0..5193200 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"килобайт"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"МБ"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"ГБ"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TБ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"ПБ"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> өдөр"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> өдөр <xliff:g id="HOURS">%2$d</xliff:g> цаг"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> өдөр <xliff:g id="HOURS">%2$d</xliff:g> цаг"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> цаг"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> цаг <xliff:g id="MINUTES">%2$d</xliff:g> минут"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> цаг <xliff:g id="MINUTES">%2$d</xliff:g> мин"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> мин"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> минут"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> мин <xliff:g id="SECONDS">%2$d</xliff:g> секунд"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> мин <xliff:g id="SECONDS">%2$d</xliff:g> сек"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> сек"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> сек"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Гарчиггүй&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Утасны дугаар байхгүй)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Тодорхойгүй"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Дуу хоолой/яаралтай үйлчилгээ алга"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Таны байршилд таны мобайл сүлжээнээс түр хугацаанд блоклосон"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Сүлжээнд холбогдох боломжгүй байна"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Хүлээн авалтыг сайжруулахын тулд систем, сүлжээ, интернэт, мобайл сүлжээнд сонгосон сүлжээний төрлийг өөрчилнө үү."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Хүлээн авалтыг сайжруулахын тулд Тохиргоо &gt; Сүлжээ &amp; Интернэт &gt; Мобайл сүлжээ &gt; Сонгосон сүлжээний төрөл хэсгийг сонгон төрлөө өөрчилнө үү."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi дуудлага идэвхтэй байна"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Яаралтай дуудлага хийхэд мобайл сүлжээнд холбогдсон байх шаардлагатай."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Сануулга"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Дуудлага шилжүүлэх"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Яаралтай дуудлага хийх горим"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Мобайл дата сануулга"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Мобайл датаны төлөв"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS мессеж"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Дуут шуудангийн мессеж"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi дуудлага"</string>
@@ -1778,4 +1764,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM-г хийгээгүй"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM боломжгүй"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Утас боломжгүй"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"гэнэт гарч ирэх цонх"</string>
 </resources>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index 6b5806d..8c8b035 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> दिवस"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> दिवस <xliff:g id="HOURS">%2$d</xliff:g> तास"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> दिवस <xliff:g id="HOURS">%2$d</xliff:g> तास"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> तास"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ता <xliff:g id="MINUTES">%2$d</xliff:g> मि"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ता <xliff:g id="MINUTES">%2$d</xliff:g> मि"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> मिनिटे"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> मिनिट"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> मि <xliff:g id="SECONDS">%2$d</xliff:g> से"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> मि <xliff:g id="SECONDS">%2$d</xliff:g> से"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> सेकंद"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> सेकंद"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;अशीर्षकांकित&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(कोणताही फोन नंबर नाही)"</string>
     <string name="unknownName" msgid="6867811765370350269">"अज्ञात"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"व्हॉइस/आणीबाणी सेवा नाही"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"तुम्‍ही असलेल्‍या स्‍थानी मोबाइल नेटवर्क तात्‍पुरते उपलब्‍ध नाही"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"नेटवर्कवर पोहोचूू शकत नाही"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"रीसेप्शन सुधारण्यासाठी सिस्टम &gt; नेटवर्क आणि इंटरनेट &gt; मोबाइल नेटवर्क &gt; अग्रमानांकित नेटवर्क प्रकार येथे निवडलेला प्रकार बदलून पहा."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"रीसेप्शन सुधारण्यासाठी, सेटिंग्ज &gt; नेटवर्क आणि इंटरनेट &gt; मोबाइल नेटवर्क &gt; अग्रमानांकित नेटवर्क प्रकार बदलून पहा."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"वाय-फाय कॉलिंग चालू आहे"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"आपात्कालीन कॉलसाठी मोबाइल नेटवर्क असणे आवश्यक आहे."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"अलर्ट"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"कॉल फॉरवर्डिंग"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"इमर्जन्सी कॉलबॅक मोड"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"मोबाइल डेटा अलर्ट"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"मोबाइल डेटा स्थिती"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS संदेश"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"व्हॉइसमेल संदेश"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"वाय-फाय कॉलिंग"</string>
@@ -410,7 +396,7 @@
     <string name="permlab_accessImsCallService" msgid="3574943847181793918">"IMS कॉल सेवा अॅक्सेस करा"</string>
     <string name="permdesc_accessImsCallService" msgid="8992884015198298775">"आपल्‍या हस्तक्षेपाशिवाय अ‍ॅपला कॉल करण्‍यासाठी IMS सेवा वापरण्याची अनुमती देते."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"फोन स्थिती आणि ओळख वाचा"</string>
-    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"डिव्हाइस च्या फोन वैशिष्ट्यांवर अॅक्सेस करण्यास अॅपला अनुमती देते. ही परवानगी कॉल अॅक्टिव्हेट असला किंवा नसला तरीही, फोन नंबर आणि डिव्हाइस आयडी आणि कॉलद्वारे कनेक्ट केलेला रीमोट नंबर निर्धारित करण्यासाठी अॅपला अनुमती देते."</string>
+    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"डिव्हाइस च्या फोन वैशिष्ट्यांवर अॅक्सेस करण्यास अॅपला अनुमती देते. ही परवानगी कॉल अॅक्टिव्हेट असला किंवा नसला तरीही, फोन नंबर आणि डिव्हाइस आयडी आणि कॉलद्वारे कनेक्ट केलेला रिमोट नंबर निर्धारित करण्यासाठी अॅपला अनुमती देते."</string>
     <string name="permlab_manageOwnCalls" msgid="1503034913274622244">"प्रणालीच्या माध्यमातून कॉल रूट करा"</string>
     <string name="permdesc_manageOwnCalls" msgid="6552974537554717418">"कॉल करण्याचा अनुभव सुधारण्यासाठी अॅपला त्याचे कॉल प्रणालीच्या माध्यमातून रूट करू देते."</string>
     <string name="permlab_readPhoneNumbers" msgid="6108163940932852440">"फोन नंबर वाचा"</string>
@@ -1588,7 +1574,7 @@
     <string name="write_fail_reason_cancelled" msgid="7091258378121627624">"रद्द केले"</string>
     <string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"आशय लिहिण्‍यात एरर"</string>
     <string name="reason_unknown" msgid="6048913880184628119">"अज्ञात"</string>
-    <string name="reason_service_unavailable" msgid="7824008732243903268">"मुद्रण सेवा सक्षम केली नाही"</string>
+    <string name="reason_service_unavailable" msgid="7824008732243903268">"प्रिंट सेवा सक्षम केली नाही"</string>
     <string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g> सेवा स्‍थापित केली"</string>
     <string name="print_service_installed_message" msgid="5897362931070459152">"सक्षम करण्यासाठी टॅप करा"</string>
     <string name="restr_pin_enter_admin_pin" msgid="8641662909467236832">"प्रशासक पिन एंटर करा"</string>
@@ -1769,7 +1755,7 @@
     <string name="autofill_save_type_address" msgid="4936707762193009542">"पत्ता"</string>
     <string name="autofill_save_type_credit_card" msgid="7127694776265563071">"क्रेडिट कार्ड"</string>
     <string name="autofill_save_type_username" msgid="239040540379769562">"वापरकर्तानाव"</string>
-    <string name="autofill_save_type_email_address" msgid="5752949432129262174">"ईमेल पत्ता"</string>
+    <string name="autofill_save_type_email_address" msgid="5752949432129262174">"ईमेल अॅड्रेस"</string>
     <string name="etws_primary_default_message_earthquake" msgid="5541962250262769193">"शांत रहा आणि जवळपास निवारा शोधा."</string>
     <string name="etws_primary_default_message_tsunami" msgid="1887685943498368548">"किनारपट्टीचे प्रदेश आणि नदीकाठची क्षेत्रे त्वरित रिकामी करून उंच मैदानासारख्या अधिक सुरक्षित ठिकाणी जा."</string>
     <string name="etws_primary_default_message_earthquake_and_tsunami" msgid="998797956848445862">"शांत रहा आणि जवळपास निवारा शोधा."</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"सिमसाठी तरतूद नाही"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"सिमला अनुमती नाही"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"फोनला अनुमती नाही"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"पॉपअप विंडो"</string>
 </resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 2786c43..f42a2e6 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B."</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> hari"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> hari <xliff:g id="HOURS">%2$d</xliff:g> jam"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> hari <xliff:g id="HOURS">%2$d</xliff:g> jam"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> jam"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> jam <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> jam <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> minit"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> minit"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> saat"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> saat"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> saat"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> saat"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Tidak bertajuk&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Tiada nombor telefon)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Tidak diketahui"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Tiada perkhidmatan suara/kecemasan"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Tidak ditawarkan oleh rangkaian mudah alih di lokasi anda untuk sementara waktu"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Tidak dapat mencapai rangkaian"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Untuk memperbaik penerimaan, cuba tukar jenis rangkaian yang dipilih di Sistem &gt; Rangkaian &amp; Internet &gt; Rangkaian mudah alih &gt; Jenis rangkaian pilihan."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Untuk memperbaik penerimaan, cuba tukar jenis rangkaian yang dipilih di Tetapan &gt; Rangkaian &amp; Internet &gt; Rangkaian mudah alih &gt; Jenis rangkaian pilihan."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Panggilan Wi-Fi aktif"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Rangkaian mudah alih diperlukan untuk membuat panggilan kecemasan."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Makluman"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Pemajuan panggilan"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Mod paggil balik kecemasan"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Makluman data mudah alih"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status data mudah alih"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Mesej SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mesej mel suara"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Panggilan Wi-Fi"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM tidak diperuntukkan"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM tidak dibenarkan"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefon tidak dibenarkan"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Tetingkap Timbul"</string>
 </resources>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 40f3ef5..1f6b167 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> ရက်"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> ရက် <xliff:g id="HOURS">%2$d</xliff:g> နာရီ"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> ရက်<xliff:g id="HOURS">%2$d</xliff:g> နာရီ"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> နာရီ"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> နာရီ <xliff:g id="MINUTES">%2$d</xliff:g> မိနစ်"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> နာရီ <xliff:g id="MINUTES">%2$d</xliff:g> မိနစ်"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> မိနစ်"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> မိနစ်"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> မိနစ် <xliff:g id="SECONDS">%2$d</xliff:g> စက္ကန့်"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> မိနစ် <xliff:g id="SECONDS">%2$d</xliff:g> စက္ကန့်"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> စက္ကန့်"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> စက္ကန့်"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;ခေါင်းစဉ်မဲ့&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(ဖုန်းနံပါတ်မရှိပါ)"</string>
     <string name="unknownName" msgid="6867811765370350269">"မသိရ"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"ဖုန်း/အရေးပေါ် ဝန်ဆောင်မှုများမရရှိနိုင်ပါ"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"သင်၏ ဒေသတွင် မိုဘိုင်းကွန်ရက် ယာယီမရရှိနိုင်ပါ"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"ကွန်ရက်ကို ချိတ်ဆက်၍မရပါ"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"လိုင်းဖမ်းယူမှု ကောင်းမွန်စေရန် စနစ် &gt; ကွန်ရက်နှင့် အင်တာနက် &gt; မိုဘိုင်းကွန်ရက်များ &gt; အသုံးပြုလိုသည့် ကွန်ရက်အမျိုးအစားတွင် ရွေးချယ်ထားသည့် အမျိုးအစားကို ပြောင်းကြည့်ပါ။"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"လိုင်းဖမ်းယူမှု ကောင်းမွန်စေရန် ဆက်တင်များ &gt; ကွန်ရက်နှင့် အင်တာနက် &gt; မိုဘိုင်းကွန်ရက်များ &gt; အသုံးပြုလိုသည့် ကွန်ရက်အမျိုးအစားတွင် ရွေးချယ်ထားသည့် အမျိုးအစားကို ပြောင်းကြည့်ပါ။"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi ခေါ်ဆိုမှုကို အသုံးပြုနေပါသည်"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"အရေးပေါ်ဖုန်းခေါ်ဆိုရန် မိုဘိုင်းကွန်ရက်ကို လိုအပ်သည်။"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"သတိပေးချက်များ"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"အဝင်ခေါ်ဆိုမှုအား ထပ်ဆင့်ပို့ခြင်း"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"အရေးပေါ် ပြန်လည်ခေါ်ဆိုနိုင်သောမုဒ်"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"မိုဘိုင်းဒေတာ သတိပေးချက်များ"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"မိုဘိုင်းဒေတာ အခြေအနေ"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS မက်ဆေ့ဂျ်များ"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"အသံမေးလ် မက်ဆေ့ဂျ်များ"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi ခေါ်ဆိုမှု"</string>
@@ -151,7 +137,7 @@
     <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ထပ်ဆင့်မပို့နိုင်ပါ"</string>
     <string name="fcComplete" msgid="3118848230966886575">"ပုံစံကုတ်ပြီးဆုံးသည်"</string>
     <string name="fcError" msgid="3327560126588500777">"ဆက်သွယ်မှုဆိုင်ရာပြသနာ သို့မဟုတ် တရားမဝင်သောပုံစံကုတ်"</string>
-    <string name="httpErrorOk" msgid="1191919378083472204">"အိုကေ"</string>
+    <string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
     <string name="httpError" msgid="7956392511146698522">"ကွန်ရက်အမှားအယွင်း ရှိပါသည်"</string>
     <string name="httpErrorLookup" msgid="4711687456111963163">"URL ကို ရှာဖွေ့ မတွေ့ရှိပါ"</string>
     <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"ဆိုက် မှန်ကန်မှု စိစစ်ရေး စနစ်ကို ပံ့ပိုး မပေးပါ။"</string>
@@ -955,7 +941,7 @@
     <string name="VideoView_error_title" msgid="3534509135438353077">"ဗီဒီယို ပြဿနာ"</string>
     <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"ဒီဗိဒီယိုမှာ ဒီကိရိယာ ပေါ်မှာ ဖွင့်ကြည့်၍ မရနိုင်ပါ။"</string>
     <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"ဒီဗီဒီယိုကို ပြသလို့ မရပါ"</string>
-    <string name="VideoView_error_button" msgid="2822238215100679592">"အိုကေ"</string>
+    <string name="VideoView_error_button" msgid="2822238215100679592">"OK"</string>
     <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
     <string name="noon" msgid="7245353528818587908">"မွန်းတည့်"</string>
     <string name="Noon" msgid="3342127745230013127">"မွန်းတည့်"</string>
@@ -989,9 +975,9 @@
     <string name="low_internal_storage_view_text_no_boot" msgid="6935190099204693424">"စနစ်အတွက် သိုလှောင်ခန်း မလုံလောက်ပါ။ သင့်ဆီမှာ နေရာလွတ် ၂၅၀ MB ရှိတာ စစ်ကြည့်ပြီး စတင်ပါ။"</string>
     <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> က အလုပ်လုပ်နေသည်။"</string>
     <string name="app_running_notification_text" msgid="1197581823314971177">"နောက်ထပ်အချက်အလက်များကို ကြည့်ရန် သို့မဟုတ် အက်ပ်ကိုရပ်တန့်ရန် တို့ပါ။"</string>
-    <string name="ok" msgid="5970060430562524910">"အိုကေ"</string>
+    <string name="ok" msgid="5970060430562524910">"OK"</string>
     <string name="cancel" msgid="6442560571259935130">"မလုပ်တော့"</string>
-    <string name="yes" msgid="5362982303337969312">"အိုကေ"</string>
+    <string name="yes" msgid="5362982303337969312">"OK"</string>
     <string name="no" msgid="5141531044935541497">"မလုပ်တော့"</string>
     <string name="dialog_alert_title" msgid="2049658708609043103">"သတိပြုရန်"</string>
     <string name="loading" msgid="7933681260296021180">"တင်နေ…"</string>
@@ -1039,7 +1025,7 @@
     <string name="anr_activity_process" msgid="1622382268908620314">"<xliff:g id="ACTIVITY">%1$s</xliff:g> သည်တုံ့ပြန်မှုမရှိပါ"</string>
     <string name="anr_application_process" msgid="6417199034861140083">"<xliff:g id="APPLICATION">%1$s</xliff:g> သည်တုံ့ပြန်မှုမရှိပါ"</string>
     <string name="anr_process" msgid="6156880875555921105">"<xliff:g id="PROCESS">%1$s</xliff:g> လုပ်ဆောင်ချက်သည် တုံ့ပြန်မှုမရှိပါ"</string>
-    <string name="force_close" msgid="8346072094521265605">"အိုကေ"</string>
+    <string name="force_close" msgid="8346072094521265605">"OK"</string>
     <string name="report" msgid="4060218260984795706">"သတင်းပို့ပါ"</string>
     <string name="wait" msgid="7147118217226317732">"စောင့်ဆိုင်းရန်"</string>
     <string name="webpage_unresponsive" msgid="3272758351138122503">"စာမျက်နှာမှာ ပြန်လည် တုံ့ပြန်မှု မရှိတော့ပါ။\n\nပိတ်လိုက်ချင်ပါသလား?"</string>
@@ -1154,7 +1140,7 @@
     <string name="sms_control_title" msgid="7296612781128917719">"စာတိုပို့စနစ်(SMS)ဖြင့် စာများ ပို့သည်"</string>
     <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; မှ စာ အမြောက်အများ ပို့နေပါသည်။ ဒီအပလီကေးရှင်းကို ဆက်လက်ပြီး လုပ်ဆောင်ရန် ခွင့်ပြုပါမလား"</string>
     <string name="sms_control_yes" msgid="3663725993855816807">"ခွင့်ပြုရန်"</string>
-    <string name="sms_control_no" msgid="625438561395534982">"ငြင်းပယ်ခြင်း"</string>
+    <string name="sms_control_no" msgid="625438561395534982">"ငြင်းပယ်ရန်"</string>
     <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; မှ &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt; ကို စာတို ပို့ချင်ပါသည်"</string>
     <string name="sms_short_code_details" msgid="5873295990846059400"><b>"ဒါက သင့် မိုဘိုင်း အကောင့် အတွက် "</b>" ကုန်ကျမှု ရှိလာနိုင်သည်။"</string>
     <string name="sms_premium_short_code_details" msgid="7869234868023975"><b>"ဒါက သင့် မိုဘိုင်း အကောင့် အတွက် ကုန်ကျမှု ရှိလာနိုင်သည်။"</b></string>
@@ -1183,7 +1169,7 @@
     <string name="perms_description_app" msgid="5139836143293299417">"<xliff:g id="APP_NAME">%1$s</xliff:g> မှ ထောက်ပံ့သည်"</string>
     <string name="no_permissions" msgid="7283357728219338112">"ခွင့်ပြုချက်မလိုအပ်ပါ"</string>
     <string name="perm_costs_money" msgid="4902470324142151116">"သင့်အတွက် ပိုက်ဆံကုန်ကျနိုင်ပါသည်"</string>
-    <string name="dlg_ok" msgid="7376953167039865701">"အိုကေ"</string>
+    <string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
     <string name="usb_charging_notification_title" msgid="6895185153353640787">"ဤစက်ကို USB ဖြင့် အားသွင်းနေသည်"</string>
     <string name="usb_supplying_notification_title" msgid="5310642257296510271">"ချိတ်ဆက်ထားသည့် စက်ပစ္စည်းကို USB မှတစ်ဆင့် အားသွင်းနေသည်"</string>
     <string name="usb_mtp_notification_title" msgid="8396264943589760855">"ဖိုင်လွှဲပြောင်းရန်အတွက် USB"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"ဆင်းမ်ကို ခွင့်မပြုပါ"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"ဖုန်းကို ခွင့်မပြုပါ"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"ပေါ့ပ်အပ် ဝင်းဒိုး"</string>
 </resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 9a85c79..3b2a842 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dager"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> dag <xliff:g id="HOURS">%2$d</xliff:g> t"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> dag <xliff:g id="HOURS">%2$d</xliff:g> t"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> t"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> t <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> t <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sek"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sek"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> sek"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sek"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Uten navn&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Mangler telefonnummer)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Ukjent"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Ingen tale-/nødtjeneste"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Tilbys midlertidig ikke gjennom mobilnettverket der du er"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Får ikke kontakt med nettverket"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"For å forbedre signalet, prøv å endre valgt nettverkstype i System &gt; Nettverk og Internett &gt; Mobilnettverk &gt; Foretrukket nettverkstype."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"For å forbedre signalet, prøv å endre valgt nettverkstype i Innstillinger &gt; Nettverk og Internett &gt; Mobilnettverk &gt; Foretrukket nettverkstype."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi-anrop er aktivt"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Du trenger et mobilnettverk for å utføre nødanrop."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Varsler"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Viderekobling"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Modusen nødsamtale-tilbakeringing"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Varsler for mobildata"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status for mobildata"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS-meldinger"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Talepostmeldinger"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-anrop"</string>
@@ -1175,7 +1161,7 @@
     <string name="carrier_app_dialog_not_now" msgid="6361378684292268027">"IKKE NÅ"</string>
     <string name="carrier_app_notification_title" msgid="8921767385872554621">"Et nytt SIM-kort er satt inn"</string>
     <string name="carrier_app_notification_text" msgid="1132487343346050225">"Trykk for å konfigurere"</string>
-    <string name="time_picker_dialog_title" msgid="8349362623068819295">"Stille klokken"</string>
+    <string name="time_picker_dialog_title" msgid="8349362623068819295">"Oppgi tidspunkt"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Angi dato"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Lagre"</string>
     <string name="date_time_done" msgid="2507683751759308828">"Ferdig"</string>
@@ -1746,9 +1732,9 @@
     <string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"USB-feilsøking"</string>
     <string name="time_picker_hour_label" msgid="2979075098868106450">"time"</string>
     <string name="time_picker_minute_label" msgid="5168864173796598399">"minutt"</string>
-    <string name="time_picker_header_text" msgid="143536825321922567">"Still klokken"</string>
+    <string name="time_picker_header_text" msgid="143536825321922567">"Oppgi tidspunkt"</string>
     <string name="time_picker_input_error" msgid="7574999942502513765">"Angi et gyldig klokkeslett"</string>
-    <string name="time_picker_prompt_label" msgid="7588093983899966783">"Skriv hva klokken er"</string>
+    <string name="time_picker_prompt_label" msgid="7588093983899966783">"Skriv inn tidspunktet"</string>
     <string name="time_picker_text_input_mode_description" msgid="4148166758173708199">"Bytt til tekstinndatamodus for tidsinndata."</string>
     <string name="time_picker_radial_mode_description" msgid="4953403779779557198">"Bytt til klokkemodus for tidsinndata."</string>
     <string name="autofill_picker_accessibility_title" msgid="8469043291648711535">"Alternativer for autofyll"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM-kortet er ikke klargjort"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM-kortet er ikke tillatt"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefonen er ikke tillatt"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Forgrunnsvindu"</string>
 </resources>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index f8eb056..d2ea2c1 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"के.बि."</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> दिन"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> दिन<xliff:g id="HOURS">%2$d</xliff:g> घन्टा"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> दिन<xliff:g id="HOURS">%2$d</xliff:g> घन्टा"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> घन्टा"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> घन्टा <xliff:g id="MINUTES">%2$d</xliff:g> मि"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> घन्टा <xliff:g id="MINUTES">%2$d</xliff:g> मिनेट"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> मिनेट"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> मिनेट"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> मिनेट <xliff:g id="SECONDS">%2$d</xliff:g> से"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> मिनेट <xliff:g id="SECONDS">%2$d</xliff:g> से"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> सेकेन्ड"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> सेकेन्ड"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;बिना शीर्षक&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(कुनै फोन नम्बर छैन)"</string>
     <string name="unknownName" msgid="6867811765370350269">"अज्ञात"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"कुनै पनि भ्वाइस/आपतकालीन सेवा उपलब्ध छैन"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"तपाईंको स्थानमा सञ्चालन भइरहेको मोबाइल नेटवर्कले अस्थायी रूपमा यो सुविधा प्रदान गर्दैन"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"नेटवर्कमाथि पहुँच राख्न सकिँदैन"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"रिसेप्सनमा सुधार गर्न, प्रणाली &gt; नेटवर्क र इन्टरनेट &gt; मोबाइल नेटवर्कहरू &gt; रुचाइएको नेटवर्कको प्रकार मा गएर चयन गरिएको प्रकार परिवर्तन गरी हेर्नुहोस्।"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"रिसेप्सनमा सुधार गर्न प्रणालीहरू &gt; नेटवर्क तथा इन्टरनेट &gt; मोबाइल नेटवर्कहरू &gt; रुचाइएको नेटवर्कको प्रकारमा गई चयन गरिएको प्रकार परिवर्तन गरी हेर्नुहोस्।"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi कलिङ सक्रिय छ"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"आपतकालीन कलहरू गर्न मोबाइल नेटवर्क अनिवार्य छ।"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"अलर्टहरू"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"कल फर्वार्ड गर्ने सेवा"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"आपतकालीन कलब्याक मोड"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"मोबाइल डेटाका अलर्टहरू"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"मोबाइल डेटाको स्थिति"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS सन्देशहरू"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"भ्वाइस मेल सन्देशहरू"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi कल"</string>
@@ -241,7 +227,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"हवाइजहाज मोड"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"हवाइजहाज मोड खुला छ"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"हवाइजहाज मोड बन्द छ"</string>
-    <string name="global_action_settings" msgid="1756531602592545966">"सेटिङ्हरू"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"सेटिङहरू"</string>
     <string name="global_action_assist" msgid="3892832961594295030">"सहायता दिनुहोस्"</string>
     <string name="global_action_voice_assist" msgid="7751191495200504480">"आवाज सहायता"</string>
     <string name="global_action_lockdown" msgid="8751542514724332873">"अब बन्द गर्नुहोस्"</string>
@@ -380,9 +366,9 @@
     <string name="permlab_bodySensors" msgid="4683341291818520277">"शरीरका सेन्सरहरूमा पहुँच गराउनुहोस् (जस्तै हृदय धड्कन निगरानीहरू)"</string>
     <string name="permdesc_bodySensors" product="default" msgid="4380015021754180431">"तपाईँको हृदय गति जस्तो सेंसर बाट डेटा पहुँचको लागि अनुप्रयोग अनुमति दिन्छ जसले तपाईँको भौतिक अवस्था अनुगमन गर्छ।"</string>
     <string name="permlab_readCalendar" msgid="6716116972752441641">"पात्रोका कार्यक्रम र विवरणहरू पढ्ने"</string>
-    <string name="permdesc_readCalendar" product="tablet" msgid="4993979255403945892">"यस अनुप्रयोगले तपाईंको ट्याब्लेटमा भण्डारण गरिएका पात्रो सम्बन्धी सबै कार्यक्रमहरू पढ्न र तपाईंको पात्रोको डेटा आदान-प्रदान वा सुरक्षित गर्न सक्छ।"</string>
-    <string name="permdesc_readCalendar" product="tv" msgid="8837931557573064315">"यस अनुप्रयोगले तपाईंको TV मा भण्डारण गरिएका पात्रो सम्बन्धी सबै कार्यक्रमहरू पढ्न र तपाईंको पात्रोको डेटा आदान-प्रदान वा सुरक्षित गर्न सक्छ।"</string>
-    <string name="permdesc_readCalendar" product="default" msgid="4373978642145196715">"यस अनुप्रयोगले तपाईंको फोनमा भण्डारण गरिएका पात्रो सम्बन्धी सबै कार्यक्रमहरू पढ्न र तपाईंको पात्रोको डेटा आदान-प्रदान वा सुरक्षित गर्न सक्छ।"</string>
+    <string name="permdesc_readCalendar" product="tablet" msgid="4993979255403945892">"यस अनुप्रयोगले तपाईंको ट्याब्लेटमा भण्डारण गरिएका पात्रो सम्बन्धी सबै कार्यक्रमहरू पढ्न र तपाईंको पात्रोको डेटा आदान प्रदान वा सुरक्षित गर्न सक्छ।"</string>
+    <string name="permdesc_readCalendar" product="tv" msgid="8837931557573064315">"यस अनुप्रयोगले तपाईंको TV मा भण्डारण गरिएका पात्रो सम्बन्धी सबै कार्यक्रमहरू पढ्न र तपाईंको पात्रोको डेटा आदान प्रदान वा सुरक्षित गर्न सक्छ।"</string>
+    <string name="permdesc_readCalendar" product="default" msgid="4373978642145196715">"यस अनुप्रयोगले तपाईंको फोनमा भण्डारण गरिएका पात्रो सम्बन्धी सबै कार्यक्रमहरू पढ्न र तपाईंको पात्रोको डेटा आदान प्रदान वा सुरक्षित गर्न सक्छ।"</string>
     <string name="permlab_writeCalendar" msgid="8438874755193825647">"पात्रो घटनाहरू थप्नुहोस् वा परिमार्जन गर्नुहोस् र मालिकको ज्ञान बिना नै पाहुनाहरूलाई इमेल पठाउनुहोस्"</string>
     <string name="permdesc_writeCalendar" product="tablet" msgid="1675270619903625982">"यस अनुप्रयोगले तपाईंको ट्याब्लेटमा पात्रोका कार्यक्रमहरू थप्न, हटाउन वा परिवर्तन गर्न सक्छ। यस अनुप्रयोगले पात्रोका मालिकहरू मार्फत आएको जस्तो लाग्ने सन्देशहरू पठाउन वा तिनीहरूका मालिकहरूलाई सूचित नगरिकन कार्यक्रमहरू परिवर्तन गर्न सक्छ।"</string>
     <string name="permdesc_writeCalendar" product="tv" msgid="9017809326268135866">"यस अनुप्रयोगले तपाईंको TV मा पात्रोका कार्यक्रमहरू थप्न, हटाउन वा परिवर्तन गर्न सक्छ। यस अनुप्रयोगले पात्रोका मालिकहरू मार्फत आएको जस्तो लाग्ने सन्देशहरू पठाउन वा तिनीहरूका मालिकहरूलाई सूचित नगरिकन कार्यक्रमहरू परिवर्तन गर्न सक्छ।"</string>
@@ -390,13 +376,13 @@
     <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"अधिक स्थान प्रदायक आदेशहरू पहुँच गर्नुहोस्"</string>
     <string name="permdesc_accessLocationExtraCommands" msgid="6078307221056649927">"अनुप्रयोगलाई अतिरिक्त स्थान प्रदायक आदेशहरू पहुँच गर्न अनुमति दिन्छ। यो अनुप्रयोगलाई GPS वा अन्य स्थान स्रोतहरूको संचालन साथै हस्तक्षेप गर्न अनुमति दिन सक्छ।"</string>
     <string name="permlab_accessFineLocation" msgid="251034415460950944">"सटीक स्थान पहुँच गराउनुहोस् (GPS तथा नेटवर्कमा आधारित)"</string>
-    <string name="permdesc_accessFineLocation" msgid="5821994817969957884">"यस अनुप्रयोगले सेलका टावर र Wi-Fi नेटवर्कहरू जस्ता GPS वा नेटवर्कको स्थानका स्रोतहरूको आधारमा तपाईंको स्थान बारे जानकारी प्राप्त गर्न सक्छ। यो अनुप्रयोग ती स्रोतहरूको प्रयोग गर्न सक्षम होस् भन्नका खातिर यी स्थान सम्बन्धी सेवाहरूलाई अनिवार्य रूपमा सक्रिय पार्नुपर्छ र यी तपाईंको फोनमा उपलब्ध हुनुपर्छ। यसले ब्याट्रीको खपत बढाउन सक्छ।"</string>
+    <string name="permdesc_accessFineLocation" msgid="5821994817969957884">"यस अनुप्रयोगले सेलका टावर र Wi-Fi नेटवर्कहरू जस्ता GPS वा नेटवर्कको स्थानका स्रोतहरूको आधारमा तपाईंको स्थान बारे जानकारी प्राप्त गर्न सक्छ। यो अनुप्रयोग ती स्रोतहरूको प्रयोग गर्न सक्षम होस् भन्नका खातिर यी स्थान सम्बन्धी सेवाहरूलाई अनिवार्य रूपमा सक्रिय पार्नुपर्छ र यी तपाईंको फोनमा उपलब्ध हुनु पर्छ। यसले ब्याट्रीको खपत बढाउन सक्छ।"</string>
     <string name="permlab_accessCoarseLocation" msgid="7715277613928539434">"अनुमानित स्थान पहुँच गराउनुहोस् (नेटवर्कमा आधारित)"</string>
-    <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3373266766487862426">"यस अनुप्रयोगले सेलका टावर र Wi-Fi नेटवर्कहरू जस्ता नेटवर्कका स्रोतहरूको आधारमा तपाईंको स्थान बारे जानकारी प्राप्त गर्न सक्छ। यो अनुप्रयोग ती स्रोतहरूको प्रयोग गर्न सक्षम होस् भन्नका खातिर यी स्थान सम्बन्धी सेवाहरूलाई अनिवार्य रूपमा सक्रिय पार्नुपर्छ र यी तपाईंको ट्याब्लेटमा उपलब्ध हुनुपर्छ।"</string>
-    <string name="permdesc_accessCoarseLocation" product="tv" msgid="1884022719818788511">"यस अनुप्रयोगले सेलका टावर र Wi-Fi नेटवर्कहरू जस्ता नेटवर्कका स्रोतहरूको आधारमा तपाईंको स्थान बारे जानकारी प्राप्त गर्न सक्छ। यो अनुप्रयोग ती स्रोतहरूको प्रयोग गर्न सक्षम होस् भन्नका खातिर यी स्थान सम्बन्धी सेवाहरूलाई अनिवार्य रूपमा सक्रिय पार्नुपर्छ र यी तपाईंको TV मा उपलब्ध हुनुपर्छ।"</string>
-    <string name="permdesc_accessCoarseLocation" product="default" msgid="7788009094906196995">"यस अनुप्रयोगले सेलका टावर र Wi-Fi नेटवर्कहरू जस्ता नेटवर्कका स्रोतहरूको आधारमा तपाईंको स्थान बारे जानकारी प्राप्त गर्न सक्छ। यो अनुप्रयोग ती स्रोतहरूको प्रयोग गर्न सक्षम होस् भन्नका खातिर यी स्थान सम्बन्धी सेवाहरूलाई अनिवार्य रूपमा सक्रिय पार्नुपर्छ र यी तपाईंको फोनमा उपलब्ध हुनुपर्छ।"</string>
+    <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3373266766487862426">"यस अनुप्रयोगले सेलका टावर र Wi-Fi नेटवर्कहरू जस्ता नेटवर्कका स्रोतहरूको आधारमा तपाईंको स्थान बारे जानकारी प्राप्त गर्न सक्छ। यो अनुप्रयोग ती स्रोतहरूको प्रयोग गर्न सक्षम होस् भन्नका खातिर यी स्थान सम्बन्धी सेवाहरूलाई अनिवार्य रूपमा सक्रिय पार्नुपर्छ र यी तपाईंको ट्याब्लेटमा उपलब्ध हुनु पर्छ।"</string>
+    <string name="permdesc_accessCoarseLocation" product="tv" msgid="1884022719818788511">"यस अनुप्रयोगले सेलका टावर र Wi-Fi नेटवर्कहरू जस्ता नेटवर्कका स्रोतहरूको आधारमा तपाईंको स्थान बारे जानकारी प्राप्त गर्न सक्छ। यो अनुप्रयोग ती स्रोतहरूको प्रयोग गर्न सक्षम होस् भन्नका खातिर यी स्थान सम्बन्धी सेवाहरूलाई अनिवार्य रूपमा सक्रिय पार्नुपर्छ र यी तपाईंको TV मा उपलब्ध हुनु पर्छ।"</string>
+    <string name="permdesc_accessCoarseLocation" product="default" msgid="7788009094906196995">"यस अनुप्रयोगले सेलका टावर र Wi-Fi नेटवर्कहरू जस्ता नेटवर्कका स्रोतहरूको आधारमा तपाईंको स्थान बारे जानकारी प्राप्त गर्न सक्छ। यो अनुप्रयोग ती स्रोतहरूको प्रयोग गर्न सक्षम होस् भन्नका खातिर यी स्थान सम्बन्धी सेवाहरूलाई अनिवार्य रूपमा सक्रिय पार्नुपर्छ र यी तपाईंको फोनमा उपलब्ध हुनु पर्छ।"</string>
     <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"तपाईँका अडियो सेटिङहरू परिवर्तन गर्नुहोस्"</string>
-    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"अनुप्रयोगलाई ग्लोबल अडियो सेटिङ्हरू परिमार्जन गर्न अनुमति दिन्छ, जस्तै आवाजको मात्रा र आउटपुटको लागि कुन स्पिकर प्रयोग गर्ने।"</string>
+    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"अनुप्रयोगलाई ग्लोबल अडियो सेटिङहरू परिमार्जन गर्न अनुमति दिन्छ, जस्तै आवाजको मात्रा र आउटपुटको लागि कुन स्पिकर प्रयोग गर्ने।"</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"अडियो रेकर्ड गर्नुहोस्"</string>
     <string name="permdesc_recordAudio" msgid="4245930455135321433">"यस अनुप्रयोगले जुनसुकै समय माइक्रोफोनको प्रयोग गरी अडियो रेकर्ड गर्न सक्छ।"</string>
     <string name="permlab_sim_communication" msgid="2935852302216852065">"SIM मा आदेशहरू पठाउन दिनुहोस्"</string>
@@ -577,7 +563,7 @@
     <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"उपकरण विश्वव्यापी प्रोक्सी मिलाउनुहोस्"</string>
     <string name="policydesc_setGlobalProxy" msgid="8459859731153370499">"नीति सक्षम हुँदा प्रयोग गरिनको लागि यन्त्र ग्लोवल प्रोक्सी सेट गर्नुहोस्। केवल यन्त्र मालिकले ग्लोवल प्रोक्सी सेट गर्न सक्नुहुन्छ।"</string>
     <string name="policylab_expirePassword" msgid="5610055012328825874">"स्क्रिन लक पासवर्ड म्याद समाप्ति सेट गर्नुहोस्"</string>
-    <string name="policydesc_expirePassword" msgid="5367525762204416046">"स्क्रिन लक पासवर्ड, PIN, वा ढाँचा परिवर्तन कसरी बारम्बार परिवर्तन हुनुपर्छ परिवर्तन गर्नुहोस्।"</string>
+    <string name="policydesc_expirePassword" msgid="5367525762204416046">"स्क्रिन लक पासवर्ड, PIN, वा ढाँचा परिवर्तन कसरी बारम्बार परिवर्तन हुनु पर्छ परिवर्तन गर्नुहोस्।"</string>
     <string name="policylab_encryptedStorage" msgid="8901326199909132915">"भण्डारण इन्क्रिप्सन मिलाउनुहोस्"</string>
     <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"भण्डार गरिएको डेटा इन्क्रिप्ट हुनु आवश्यक छ।"</string>
     <string name="policylab_disableCamera" msgid="6395301023152297826">"क्यामेरालाई असक्षम गराउनुहोस्"</string>
@@ -1002,7 +988,7 @@
     <!-- no translation found for whichApplicationNamed (8260158865936942783) -->
     <skip />
     <string name="whichApplicationLabel" msgid="7425855495383818784">"पूर्ण कारबाही"</string>
-    <string name="whichViewApplication" msgid="3272778576700572102">"साथमा खोल्नुहोस्"</string>
+    <string name="whichViewApplication" msgid="3272778576700572102">"निम्नमार्फत खोल्नुहोस्"</string>
     <!-- String.format failed for translation -->
     <!-- no translation found for whichViewApplicationNamed (2286418824011249620) -->
     <skip />
@@ -1205,7 +1191,7 @@
     <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"बग रिपोर्ट लिँदै..."</string>
     <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"बग रिपोर्टलाई साझेदारी गर्ने हो?"</string>
     <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"बग रिपोर्टलाई साझेदारी गर्दै ..."</string>
-    <string name="share_remote_bugreport_notification_message_finished" msgid="6029609949340992866">"तपाईंका प्रशासकले यस यन्त्रको समस्या निवारण गर्नमा मद्दत गर्नका लागि एउटा बग रिपोर्टको अनुरोध गर्नुभएको छ। अनुप्रयोगहरू र डेटा आदान-प्रदान गर्न पनि सकिन्छ।"</string>
+    <string name="share_remote_bugreport_notification_message_finished" msgid="6029609949340992866">"तपाईंका प्रशासकले यस यन्त्रको समस्या निवारण गर्नमा मद्दत गर्नका लागि एउटा बग रिपोर्टको अनुरोध गर्नुभएको छ। अनुप्रयोगहरू र डेटा आदान प्रदान गर्न पनि सकिन्छ।"</string>
     <string name="share_remote_bugreport_action" msgid="6249476773913384948">"साझेदारी गर्नुहोस्"</string>
     <string name="decline_remote_bugreport_action" msgid="6230987241608770062">"अस्वीकार गर्नुहोस्"</string>
     <string name="select_input_method" msgid="8547250819326693584">"कुञ्जीपाटी परिवर्तन गर्नुहोस्"</string>
@@ -1423,7 +1409,7 @@
     <string name="launchBrowserDefault" msgid="2057951947297614725">"ब्राउजर सुरु गर्ने हो?"</string>
     <string name="SetupCallDefault" msgid="5834948469253758575">"कल स्वीकार गर्नुहुन्छ?"</string>
     <string name="activity_resolver_use_always" msgid="8017770747801494933">"सधैँ"</string>
-    <string name="activity_resolver_use_once" msgid="2404644797149173758">"एउटा मात्र"</string>
+    <string name="activity_resolver_use_once" msgid="2404644797149173758">"एक पटक मात्र"</string>
     <string name="activity_resolver_work_profiles_support" msgid="185598180676883455">"%1$s  कार्य प्रोफाइल समर्थन गर्दैन"</string>
     <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"ट्याब्लेट"</string>
     <string name="default_audio_route_name" product="tv" msgid="9158088547603019321">"TV"</string>
@@ -1741,7 +1727,7 @@
     <string name="conference_call" msgid="3751093130790472426">"सम्मेलन कल"</string>
     <string name="tooltip_popup_title" msgid="5253721848739260181">"उपकरणको वर्णन"</string>
     <string name="app_category_game" msgid="5431836943981492993">"खेलहरू"</string>
-    <string name="app_category_audio" msgid="1659853108734301647">"संगीत तथा अडियो"</string>
+    <string name="app_category_audio" msgid="1659853108734301647">"सङ्गीत तथा अडियो"</string>
     <string name="app_category_video" msgid="2728726078629384196">"चलचित्र तथा भिडियो"</string>
     <string name="app_category_image" msgid="4867854544519846048">"तस्बिर तथा छविहरू"</string>
     <string name="app_category_social" msgid="5842783057834965912">"सामाजिक तथा सञ्चार"</string>
@@ -1786,4 +1772,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM को प्रावधान छैन"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM लाई अनुमति छैन"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"फोनलाई अनुमति छैन"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"पपअप विन्डो"</string>
 </resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index ff55afe..136f2dd 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">" KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dagen"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> dag <xliff:g id="HOURS">%2$d</xliff:g> uur"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> dag <xliff:g id="HOURS">%2$d</xliff:g> uur"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> uur"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> uur <xliff:g id="MINUTES">%2$d</xliff:g> min."</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> uur <xliff:g id="MINUTES">%2$d</xliff:g> min."</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> minuten"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min."</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sec"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sec"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> seconden"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> seconde"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Naamloos&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Geen telefoonnummer)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Onbekend"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Geen service voor spraak-/noodoproepen"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Tijdelijk niet aangeboden door het mobiele netwerk op je locatie"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Kan netwerk niet bereiken"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Als je de ontvangst wilt verbeteren, kun je het netwerktype wijzigen dat is geselecteerd bij Systeem &gt; Netwerk en internet &gt; Mobiele netwerken &gt; Voorkeursnetwerktype."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Als je de ontvangst wilt verbeteren, kun je het netwerktype wijzigen dat is geselecteerd bij Instellingen &gt; Netwerk en internet &gt; Mobiele netwerken &gt; Voorkeursnetwerktype."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Bellen via wifi is actief"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Voor noodoproepen is een mobiel netwerk vereist."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Meldingen"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Oproep doorschakelen"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Modus voor noodoproepen"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Meldingen voor mobiele data"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status van mobiele data"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Sms\'jes"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Voicemailberichten"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Bellen via wifi"</string>
@@ -837,8 +823,8 @@
     <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"Hiermee kan de app de webgeschiedenis wijzigen in de systeemeigen browser en de bladwijzers die zijn opgeslagen op je tablet. Deze toestemming kan niet worden geforceerd door andere browsers of andere apps met internetmogelijkheden.."</string>
     <string name="permdesc_writeHistoryBookmarks" product="tv" msgid="7007393823197766548">"Hiermee kan de app de webgeschiedenis wijzigen in de systeemeigen browser en de bladwijzers die zijn opgeslagen op je tv. De app kan browsergegevens wissen of aanpassen. Deze toestemming kan niet worden geforceerd door andere browsers of andere apps met internetmogelijkheden."</string>
     <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"Hiermee kan de app de webgeschiedenis wijzigen in de systeemeigen browser en de bladwijzers die zijn opgeslagen op je telefoon. Deze toestemming kan niet worden geforceerd door andere browsers of andere apps met internetmogelijkheden."</string>
-    <string name="permlab_setAlarm" msgid="1379294556362091814">"een alarm instellen"</string>
-    <string name="permdesc_setAlarm" msgid="316392039157473848">"Hiermee kan de app een alarm instellen in een geïnstalleerde wekkerapp. Deze functie wordt door sommige wekkerapps niet geïmplementeerd."</string>
+    <string name="permlab_setAlarm" msgid="1379294556362091814">"een wekker instellen"</string>
+    <string name="permdesc_setAlarm" msgid="316392039157473848">"Hiermee kan de app een wekker instellen in een geïnstalleerde wekker-app. Deze functie wordt door sommige wekker-apps niet geïmplementeerd."</string>
     <string name="permlab_addVoicemail" msgid="5525660026090959044">"voicemail toevoegen"</string>
     <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Hiermee kan de app berichten toevoegen aan de inbox van je voicemail."</string>
     <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"geolocatiemachtigingen voor browser aanpassen"</string>
@@ -1666,7 +1652,7 @@
       <item quantity="one">Gedurende 1 u</item>
     </plurals>
     <string name="zen_mode_until" msgid="7336308492289875088">"Tot <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
-    <string name="zen_mode_alarm" msgid="9128205721301330797">"Tot <xliff:g id="FORMATTEDTIME">%1$s</xliff:g> (volgend alarm)"</string>
+    <string name="zen_mode_alarm" msgid="9128205721301330797">"Tot <xliff:g id="FORMATTEDTIME">%1$s</xliff:g> (volgende wekker)"</string>
     <string name="zen_mode_forever" msgid="1916263162129197274">"Totdat je \'Niet storen\' uitschakelt"</string>
     <string name="zen_mode_forever_dnd" msgid="3792132696572189081">"Totdat u \'Niet storen\' uitschakelt"</string>
     <string name="zen_mode_rule_name_combination" msgid="191109939968076477">"<xliff:g id="FIRST">%1$s</xliff:g>/<xliff:g id="REST">%2$s</xliff:g>"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Simkaart niet geregistreerd"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Simkaart niet toegestaan"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefoon niet toegestaan"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Pop-upvenster"</string>
 </resources>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index b2f4b29..f04b53b 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> ਦਿਨ"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> ਦਿਨ <xliff:g id="HOURS">%2$d</xliff:g> ਘੰਟੇ"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> ਦਿਨ <xliff:g id="HOURS">%2$d</xliff:g> ਘੰਟਾ"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ਘੰਟੇ"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ਘੰਟਾ <xliff:g id="MINUTES">%2$d</xliff:g> ਮਿੰਟ"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ਘੰਟਾ <xliff:g id="MINUTES">%2$d</xliff:g> ਮਿੰਟ"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> ਮਿੰਟ"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> ਮਿੰਟ"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> ਮਿੰਟ <xliff:g id="SECONDS">%2$d</xliff:g> ਸਕਿੰਟ"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> ਮਿੰਟ <xliff:g id="SECONDS">%2$d</xliff:g> ਸਕਿੰਟ"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> ਸਕਿੰਟ"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> ਸਕਿੰਟ"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;ਬਿਨਾਂ ਸਿਰਲੇਖ&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(ਕੋਈ ਫ਼ੋਨ ਨੰਬਰ ਨਹੀਂ)"</string>
     <string name="unknownName" msgid="6867811765370350269">"ਅਗਿਆਤ"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"ਕੋਈ ਆਵਾਜ਼ੀ/ਸੰਕਟਕਾਲੀਨ ਸੇਵਾ ਨਹੀਂ"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"ਤੁਹਾਡੇ ਟਿਕਾਣੇ \'ਤੇ ਅਸਥਾਈ ਤੌਰ \'ਤੇ ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਵੱਲੋਂ ਉਪਲਬਧ ਨਹੀਂ ਕਰਵਾਈ ਗਈ"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"ਨੈੱਟਵਰਕ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"ਸਿਗਨਲ ਪ੍ਰਾਪਤੀ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ, ਸਿਸਟਮ &gt; ਨੈੱਟਵਰਕ ਅਤੇ ਇੰਟਰਨੈੱਟ &gt; ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ &gt; ਤਰਜੀਹੀ ਨੈੱਟਵਰਕ ਦੀ ਕਿਸਮ \'ਤੇ ਚੁਣੀ ਗਈ ਕਿਸਮ ਨੂੰ ਬਦਲਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"ਸਿਗਨਲ ਪ੍ਰਾਪਤੀ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ, ਸੈਟਿੰਗਾਂ &gt; ਨੈੱਟਵਰਕ ਅਤੇ ਇੰਟਰਨੈੱਟ &gt; ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ &gt; ਤਰਜੀਹੀ ਨੈੱਟਵਰਕ ਦੀ ਕਿਸਮ \'ਤੇ ਜਾਓ ਅਤੇ ਚੁਣੀ ਗਈ ਕਿਸਮ ਨੂੰ ਬਦਲਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"ਵਾਈ-ਫਾਈ ਕਾਲਿੰਗ ਕਿਰਿਆਸ਼ੀਲ ਹੈ"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"ਸੰਕਟਕਾਲੀਨ ਕਾਲਾਂ ਲਈ ਕਿਸੇ ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"ਸੁਚੇਤਨਾਵਾਂ"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"ਕਾਲ ਫਾਰਵਰਡਿੰਗ"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"ਸੰਕਟਕਾਲੀਨ ਕਾਲਬੈਕ ਮੋਡ"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"ਮੋਬਾਈਲ ਡਾਟਾ ਸੁਚੇਤਨਾਵਾਂ"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"ਮੋਬਾਈਲ ਡਾਟੇ ਦੀ ਸਥਿਤੀ"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS ਸੁਨੇਹੇ"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ਵੌਇਸਮੇਲ ਸੁਨੇਹੇ"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"ਵਾਈ-ਫਾਈ ਕਾਲਿੰਗ"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM ਦੀ ਵਿਵਸਥਾ ਨਹੀਂ ਹੈ"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"ਫ਼ੋਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"ਪੌਪਅੱਪ ਵਿੰਡੋ"</string>
 </resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 6c6128d..0d77eba 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dni"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> dzień <xliff:g id="HOURS">%2$d</xliff:g> godz."</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> dzień <xliff:g id="HOURS">%2$d</xliff:g> godz."</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> godz."</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> godz. <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> godz. <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Bez nazwy&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Brak numeru telefonu)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Nieznana"</string>
@@ -97,11 +81,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Brak usługi połączeń głosowych/alarmowych"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Usługa tymczasowo nieoferowana przez sieć komórkową w Twojej lokalizacji"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Brak zasięgu sieci"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Aby poprawić odbiór, zmień typ sieci – wybierz System &gt; Sieć i internet &gt; Sieci komórkowe &gt; Preferowany typ sieci."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Aby poprawić odbiór, zmień typ sieci: wybierz Ustawienia &gt; Sieć i internet &gt; Sieci komórkowe &gt; Preferowany typ sieci."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Funkcja Połączenia przez Wi‑Fi jest aktywna"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Połączenia alarmowe wymagają sieci komórkowej."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alerty"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Przekierowanie połączeń"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Tryb alarmowego połączenia zwrotnego"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Alerty o mobilnej transmisji danych"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Stan mobilnej transmisji danych"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS-y"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Wiadomości poczty głosowej"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Połączenia przez Wi-Fi"</string>
@@ -186,10 +172,10 @@
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Przez nieznany podmiot zewnętrzny"</string>
     <string name="ssl_ca_cert_noti_by_administrator" msgid="3541729986326153557">"Przez administratora Twojego profilu do pracy"</string>
     <string name="ssl_ca_cert_noti_managed" msgid="4030263497686867141">"Przez <xliff:g id="MANAGING_DOMAIN">%s</xliff:g>"</string>
-    <string name="work_profile_deleted" msgid="5005572078641980632">"Usunięto profil do pracy"</string>
-    <string name="work_profile_deleted_description" msgid="1100529432509639864">"Profil do pracy został usunięty z powodu braku aplikacji administratora"</string>
-    <string name="work_profile_deleted_details" msgid="6307630639269092360">"Brakuje aplikacji administratora profilu do pracy lub jest ona uszkodzona. Dlatego Twój profil do pracy i związane z nim dane zostały usunięte. Skontaktuj się ze swoim administratorem, by uzyskać pomoc."</string>
-    <string name="work_profile_deleted_description_dpm_wipe" msgid="8823792115612348820">"Twój profil do pracy nie jest już dostępny na tym urządzeniu"</string>
+    <string name="work_profile_deleted" msgid="5005572078641980632">"Usunięto profil służbowy"</string>
+    <string name="work_profile_deleted_description" msgid="1100529432509639864">"Profil służbowy został usunięty z powodu braku aplikacji administratora"</string>
+    <string name="work_profile_deleted_details" msgid="6307630639269092360">"Brakuje aplikacji administratora profilu do pracy lub jest ona uszkodzona. Dlatego Twój profil służbowy i związane z nim dane zostały usunięte. Skontaktuj się ze swoim administratorem, by uzyskać pomoc."</string>
+    <string name="work_profile_deleted_description_dpm_wipe" msgid="8823792115612348820">"Twój profil służbowy nie jest już dostępny na tym urządzeniu"</string>
     <string name="network_logging_notification_title" msgid="6399790108123704477">"Urządzenie jest zarządzane"</string>
     <string name="network_logging_notification_text" msgid="7930089249949354026">"Twoja organizacja zarządza tym urządzeniem i może monitorować ruch w sieci. Kliknij, by dowiedzieć się więcej."</string>
     <string name="factory_reset_warning" msgid="5423253125642394387">"Twoje urządzenie zostanie wyczyszczone"</string>
@@ -276,7 +262,7 @@
     <string name="safeMode" msgid="2788228061547930246">"Tryb awaryjny"</string>
     <string name="android_system_label" msgid="6577375335728551336">"System Android"</string>
     <string name="user_owner_label" msgid="1119010402169916617">"Włącz profil osobisty"</string>
-    <string name="managed_profile_label" msgid="5289992269827577857">"Włącz profil do pracy"</string>
+    <string name="managed_profile_label" msgid="5289992269827577857">"Włącz profil służbowy"</string>
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"Kontakty"</string>
     <string name="permgroupdesc_contacts" msgid="6951499528303668046">"dostęp do kontaktów"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"Lokalizacja"</string>
@@ -394,9 +380,9 @@
     <string name="permdesc_writeCalendar" product="tv" msgid="9017809326268135866">"Ta aplikacja może dodawać, usuwać i zmieniać wydarzenia z kalendarza na telewizorze. Ta aplikacja może wysyłać wiadomości wyglądające jak utworzone przez właścicieli kalendarza lub zmieniać wydarzenia bez wiedzy ich właścicieli."</string>
     <string name="permdesc_writeCalendar" product="default" msgid="7592791790516943173">"Ta aplikacja może dodawać, usuwać i zmieniać wydarzenia z kalendarza na telefonie. Ta aplikacja może wysyłać wiadomości wyglądające jak utworzone przez właścicieli kalendarza lub zmieniać wydarzenia bez wiedzy ich właścicieli."</string>
     <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"dostęp do dodatkowych poleceń dostawcy informacji o lokalizacji"</string>
-    <string name="permdesc_accessLocationExtraCommands" msgid="6078307221056649927">"Pozwala aplikacji na dostęp do dodatkowych poleceń dostawcy informacji o lokalizacji. Aplikacje z tym uprawnieniem mogą wpływać na działanie GPS-u lub innych źródeł lokalizacji."</string>
-    <string name="permlab_accessFineLocation" msgid="251034415460950944">"dostęp do dokładnej lokalizacji (na podstawie GPS-u i sieci)"</string>
-    <string name="permdesc_accessFineLocation" msgid="5821994817969957884">"Ta aplikacja może określać Twoją lokalizację na podstawie GPS-u lub sieciowych źródeł lokalizacji, takich jak stacje bazowe i sieci Wi-Fi. Te usługi lokalizacyjne muszą być włączone i dostępne na telefonie, by aplikacja mogła z nich korzystać. Może to zwiększyć zużycie baterii."</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="6078307221056649927">"Pozwala aplikacji na dostęp do dodatkowych poleceń dostawcy informacji o lokalizacji. Aplikacje z tym uprawnieniem mogą wpływać na działanie GPS-a lub innych źródeł lokalizacji."</string>
+    <string name="permlab_accessFineLocation" msgid="251034415460950944">"dostęp do dokładnej lokalizacji (na podstawie GPS-a i sieci)"</string>
+    <string name="permdesc_accessFineLocation" msgid="5821994817969957884">"Ta aplikacja może określać Twoją lokalizację na podstawie GPS-a lub sieciowych źródeł lokalizacji, takich jak stacje bazowe i sieci Wi-Fi. Te usługi lokalizacyjne muszą być włączone i dostępne na telefonie, by aplikacja mogła z nich korzystać. Może to zwiększyć zużycie baterii."</string>
     <string name="permlab_accessCoarseLocation" msgid="7715277613928539434">"dostęp do przybliżonej lokalizacji (na podstawie sieci)"</string>
     <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3373266766487862426">"Ta aplikacja może określać Twoją lokalizację na podstawie źródeł sieciowych, takich jak stacje bazowe i sieci Wi-Fi. Te usługi lokalizacyjne muszą być włączone i dostępne na tablecie, by aplikacja mogła z nich korzystać."</string>
     <string name="permdesc_accessCoarseLocation" product="tv" msgid="1884022719818788511">"Ta aplikacja może określać Twoją lokalizację na podstawie źródeł sieciowych, takich jak stacje bazowe i sieci Wi-Fi. Te usługi lokalizacyjne muszą być włączone i dostępne na telewizorze, by aplikacja mogła z nich korzystać."</string>
@@ -1256,7 +1242,7 @@
     <string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"Wyświetlanie nad innymi aplikacjami"</string>
     <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"Wyświetlanie aplikacji <xliff:g id="NAME">%s</xliff:g> nad innymi"</string>
     <string name="alert_windows_notification_title" msgid="3697657294867638947">"Aplikacja <xliff:g id="NAME">%s</xliff:g> jest nad innymi"</string>
-    <string name="alert_windows_notification_message" msgid="8917232109522912560">"Jeśli nie chcesz, by aplikacja <xliff:g id="NAME">%s</xliff:g> korzystała z tej funkcji, otwórz ustawienia i ją wyłącz."</string>
+    <string name="alert_windows_notification_message" msgid="8917232109522912560">"Jeśli nie chcesz, by aplikacja <xliff:g id="NAME">%s</xliff:g> korzystała z tej funkcji, otwórz ustawienia i wyłącz ją."</string>
     <string name="alert_windows_notification_turn_off_action" msgid="3367294525884949878">"WYŁĄCZ"</string>
     <string name="ext_media_checking_notification_title" msgid="5734005953288045806">"Przygotowuję: <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="ext_media_checking_notification_message" msgid="4747432538578886744">"Sprawdzanie w poszukiwaniu błędów"</string>
@@ -1749,7 +1735,7 @@
     <string name="stk_cc_ss_to_dial" msgid="2151304435775557162">"Żądanie SS zostało zmienione na żądanie DIAL."</string>
     <string name="stk_cc_ss_to_ussd" msgid="3951862188105305589">"Żądanie SS zostało zmienione na żądanie USSD."</string>
     <string name="stk_cc_ss_to_ss" msgid="5470768854991452695">"Żądanie SS zostało zmienione na nowe żądanie SS."</string>
-    <string name="notification_work_profile_content_description" msgid="4600554564103770764">"Profil do pracy"</string>
+    <string name="notification_work_profile_content_description" msgid="4600554564103770764">"Profil służbowy"</string>
     <string name="expand_button_content_description_collapsed" msgid="3609784019345534652">"Rozwiń"</string>
     <string name="expand_button_content_description_expanded" msgid="8520652707158554895">"Zwiń"</string>
     <string name="expand_action_accessibility" msgid="5307730695723718254">"przełącz rozwijanie"</string>
@@ -1787,7 +1773,7 @@
     <string name="user_encrypted_title" msgid="9054897468831672082">"Niektóre funkcje mogą być niedostępne"</string>
     <string name="user_encrypted_message" msgid="4923292604515744267">"Kliknij, by odblokować"</string>
     <string name="user_encrypted_detail" msgid="5708447464349420392">"Dane użytkownika zablokowane"</string>
-    <string name="profile_encrypted_detail" msgid="3700965619978314974">"Profil do pracy zablokowany"</string>
+    <string name="profile_encrypted_detail" msgid="3700965619978314974">"Profil służbowy zablokowany"</string>
     <string name="profile_encrypted_message" msgid="6964994232310195874">"Kliknij, by odblokować profil"</string>
     <string name="usb_mtp_launch_notification_title" msgid="8359219638312208932">"Połączono z: <xliff:g id="PRODUCT_NAME">%1$s</xliff:g>"</string>
     <string name="usb_mtp_launch_notification_description" msgid="8541876176425411358">"Dotknij, by wyświetlić pliki"</string>
@@ -1848,4 +1834,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Nieobsługiwana karta SIM"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Niedozwolona karta SIM"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Niedozwolony telefon"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Wyskakujące okienko"</string>
 </resources>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 0fb12fb..09521bc 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dias"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> dia <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> dia <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> m"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Sem título&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nenhum número de telefone)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Desconhecido"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Sem serviço de voz/emergência"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Serviço temporariamente bloqueado pela rede móvel no seu local"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Não foi possível acessar a rede"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Para melhorar a recepção, tente alterar o tipo selecionado em Sistema &gt; Rede &amp; Internet &gt; Redes móveis &gt; Tipo de rede preferencial."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Para melhorar a recepção, tente alterar o tipo selecionado em Configurações &gt; Rede &amp; Internet &gt; Redes móveis &gt; Tipo de rede preferencial."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"A chamada no Wi‑Fi está ativa"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"As chamadas de emergência exigem uma rede móvel."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alertas"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Encaminhamento de chamada"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Modo de retorno de chamada de emergência"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Alertas de dados móveis"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status dos dados móveis"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Mensagens SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mensagens do correio de voz"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Chamadas por Wi-Fi"</string>
@@ -213,9 +199,9 @@
     <string name="shutdown_confirm" product="tv" msgid="476672373995075359">"Sua TV será desligada."</string>
     <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Seu relógio será desligado."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"O seu telefone será desligado."</string>
-    <string name="shutdown_confirm_question" msgid="2906544768881136183">"Deseja desligar?"</string>
+    <string name="shutdown_confirm_question" msgid="2906544768881136183">"Quer desligar?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Reiniciar no modo de segurança"</string>
-    <string name="reboot_safemode_confirm" msgid="55293944502784668">"Deseja reiniciar no modo de segurança? Isso desativará todos os apps de terceiros instalados. Eles serão restaurados quando você reiniciar novamente."</string>
+    <string name="reboot_safemode_confirm" msgid="55293944502784668">"Quer reiniciar no modo de segurança? Isso desativará todos os apps de terceiros instalados. Eles serão restaurados quando você reiniciar novamente."</string>
     <string name="recent_tasks_title" msgid="3691764623638127888">"Recente"</string>
     <string name="no_recent_tasks" msgid="8794906658732193473">"Nenhum app recente"</string>
     <string name="global_actions" product="tablet" msgid="408477140088053665">"Opções do tablet"</string>
@@ -810,7 +796,7 @@
     <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"Confirmar navegação"</string>
     <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"Sair desta página"</string>
     <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"Permanecer nesta página"</string>
-    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nTem certeza de que deseja sair desta página?"</string>
+    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nTem certeza que quer sair desta página?"</string>
     <string name="save_password_label" msgid="6860261758665825069">"Confirmar"</string>
     <string name="double_tap_toast" msgid="4595046515400268881">"Dica: toque duas vezes para aumentar e diminuir o zoom."</string>
     <string name="autofill_this_form" msgid="4616758841157816676">"Preench. aut."</string>
@@ -843,7 +829,7 @@
     <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Permite que o app adicione mensagens a sua caixa de entrada do correio de voz."</string>
     <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"Modifique as permissões de geolocalização de seu navegador"</string>
     <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Permite que o app modifique as permissões de geolocalização do navegador. Apps maliciosos podem usar isso para permitir o envio de informações locais para sites arbitrários."</string>
-    <string name="save_password_message" msgid="767344687139195790">"Deseja que o navegador lembre desta senha?"</string>
+    <string name="save_password_message" msgid="767344687139195790">"Quer que o navegador lembre desta senha?"</string>
     <string name="save_password_notnow" msgid="6389675316706699758">"Agora não"</string>
     <string name="save_password_remember" msgid="6491879678996749466">"Lembrar"</string>
     <string name="save_password_never" msgid="8274330296785855105">"Nunca"</string>
@@ -1042,7 +1028,7 @@
     <string name="force_close" msgid="8346072094521265605">"OK"</string>
     <string name="report" msgid="4060218260984795706">"Informar"</string>
     <string name="wait" msgid="7147118217226317732">"Aguardar"</string>
-    <string name="webpage_unresponsive" msgid="3272758351138122503">"A página não responde.\n\nDeseja fechá-la?"</string>
+    <string name="webpage_unresponsive" msgid="3272758351138122503">"A página não responde.\n\nQuer fechá-la?"</string>
     <string name="launch_warning_title" msgid="1547997780506713581">"App redirecionado"</string>
     <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> não está em execução."</string>
     <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> foi iniciado."</string>
@@ -1152,7 +1138,7 @@
     <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"O telefone desconectará temporariamente da rede Wi-Fi enquanto estiver conectado a <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="select_character" msgid="3365550120617701745">"Inserir caractere"</string>
     <string name="sms_control_title" msgid="7296612781128917719">"Enviando mensagens SMS"</string>
-    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; envia uma grande quantidade de mensagens SMS. Deseja permitir que este app continue enviando mensagens?"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; envia uma grande quantidade de mensagens SMS. Quer permitir que este app continue enviando mensagens?"</string>
     <string name="sms_control_yes" msgid="3663725993855816807">"Permitir"</string>
     <string name="sms_control_no" msgid="625438561395534982">"Negar"</string>
     <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; deseja enviar uma mensagem para &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
@@ -1275,7 +1261,7 @@
     <string name="dial_number_using" msgid="5789176425167573586">"Discar número\nusando <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="create_contact_using" msgid="4947405226788104538">"Criar contato \nusando <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"O app a seguir ou outros apps solicitam permissão para acessar sua conta, agora e no futuro."</string>
-    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Deseja permitir essa solicitação?"</string>
+    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Quer permitir essa solicitação?"</string>
     <string name="grant_permissions_header_text" msgid="6874497408201826708">"Solicitação de acesso"</string>
     <string name="allow" msgid="7225948811296386551">"Permitir"</string>
     <string name="deny" msgid="2081879885755434506">"Negar"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM não aprovisionado"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM não permitido"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Smartphone não permitido"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Janela pop-up"</string>
 </resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index dbcd8ac..8b0cafe 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dias"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> dia <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> dia <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> horas"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min."</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> seg"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> seg"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> seg"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> seg"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Sem nome&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nenhum número de telefone)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Desconhecido"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Sem serviço de voz/emergência"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Serviço temporariamente não disponibilizado pela rede móvel na sua localização"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Não é possível ligar à rede"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Para melhorar a receção, experimente alterar o tipo selecionado em Sistema &gt; Rede e Internet &gt; Redes móveis &gt; Tipo de rede preferido."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Para melhorar a receção, experimente alterar o tipo selecionado em Definições &gt; Rede e Internet &gt; Redes móveis &gt; Tipo de rede preferido."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"As chamadas Wi‑Fi estão ativas."</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"As chamadas de emergência necessitam de uma rede móvel."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alertas"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Reencaminhamento de chamadas"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Modo de chamada de retorno de emergência"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Alertas de dados móveis"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Estado dos dados móveis"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Mensagens SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mensagens de correio de voz"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Chamadas Wi-Fi"</string>
@@ -284,7 +270,7 @@
     <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfone"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"gravar áudio"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Câmara"</string>
-    <string name="permgroupdesc_camera" msgid="3250611594678347720">"tirar fotografias e gravar vídeos"</string>
+    <string name="permgroupdesc_camera" msgid="3250611594678347720">"tirar fotos e gravar vídeos"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Telemóvel"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"fazer e gerir chamadas"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Sensores de corpo"</string>
@@ -401,7 +387,7 @@
     <string name="permdesc_recordAudio" msgid="4245930455135321433">"Esta aplicação pode gravar áudio através do microfone a qualquer momento."</string>
     <string name="permlab_sim_communication" msgid="2935852302216852065">"enviar comandos para o SIM"</string>
     <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permite que a aplicação envie comandos para o SIM. Esta ação é muito perigosa."</string>
-    <string name="permlab_camera" msgid="3616391919559751192">"tirar fotografias e vídeos"</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"tirar fotos e vídeos"</string>
     <string name="permdesc_camera" msgid="5392231870049240670">"Esta aplicação pode tirar fotos e gravar vídeos através da câmara a qualquer momento."</string>
     <string name="permlab_vibrate" msgid="7696427026057705834">"controlar vibração"</string>
     <string name="permdesc_vibrate" msgid="6284989245902300945">"Permite à aplicação controlar o vibrador."</string>
@@ -741,12 +727,12 @@
     <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Consulte o Manual de utilizador ou contacte a Assistência a Clientes."</string>
     <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"O cartão SIM está bloqueado."</string>
     <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"A desbloquear cartão SIM..."</string>
-    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Desenhou a sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\nTente novamente dentro de <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Desenhou a sua padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\nTente novamente dentro de <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Escreveu a sua palavra-passe incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\n Tente novamente dentro de <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Escreveu o seu número PIN incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\n Tente novamente dentro de <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Desenhou a sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após outras <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o tablet com as suas credenciais de início de sessão do Google.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"O utilizador desenhou incorretamente a sua sequência de desbloqueio <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem êxito, é-lhe pedido que desbloqueie a sua TV através do seu início de sessão Google.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Desenhou a sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após outras <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o telemóvel com as suas credenciais de início de sessão do Google.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Desenhou o padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após outras <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o tablet com as suas credenciais de início de sessão do Google.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"O utilizador desenhou incorretamente a sua padrão de desbloqueio <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem êxito, é-lhe pedido que desbloqueie a sua TV através do seu início de sessão Google.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Desenhou o padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após outras <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o telemóvel com as suas credenciais de início de sessão do Google.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Tentou desbloquear o tablet <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes de forma incorreta. Após mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativa(s) sem êxito, as definições de origem do tablet serão repostas e todos os dados de utilizador serão perdidos."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="950408382418270260">"O utilizador tentou desbloquear incorretamente a TV <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem êxito, a TV é reposta para as predefinições de fábrica e todos os dados do utilizador são perdidos."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Tentou desbloquear o telemóvel <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes de forma incorreta. Após mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativa(s) sem êxito, as definições de origem do telemóvel serão repostas e todos os dados de utilizador serão perdidos."</string>
@@ -802,8 +788,8 @@
     <string name="granularity_label_link" msgid="5815508880782488267">"link"</string>
     <string name="granularity_label_line" msgid="5764267235026120888">"linha"</string>
     <string name="factorytest_failed" msgid="5410270329114212041">"O teste de fábrica falhou"</string>
-    <string name="factorytest_not_system" msgid="4435201656767276723">"A acção FACTORY_TEST apenas é suportada para pacotes instalados em /system/app."</string>
-    <string name="factorytest_no_action" msgid="872991874799998561">"Não foi localizado qualquer pacote que forneça a acção FACTORY_TEST."</string>
+    <string name="factorytest_not_system" msgid="4435201656767276723">"A ação FACTORY_TEST apenas é suportada para pacotes instalados em /system/app."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"Não foi localizado qualquer pacote que forneça a ação FACTORY_TEST."</string>
     <string name="factorytest_reboot" msgid="6320168203050791643">"Reiniciar"</string>
     <string name="js_dialog_title" msgid="1987483977834603872">"A página em \"<xliff:g id="TITLE">%s</xliff:g>\" indica:"</string>
     <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
@@ -953,7 +939,7 @@
       <item quantity="one">dentro de <xliff:g id="COUNT_0">%d</xliff:g> ano</item>
     </plurals>
     <string name="VideoView_error_title" msgid="3534509135438353077">"Problema com o vídeo"</string>
-    <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"Este vídeo não é válido para transmissão em fluxo contínuo neste aparelho."</string>
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"Este vídeo não é válido para transmissão neste aparelho."</string>
     <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"Não é possível reproduzir este vídeo."</string>
     <string name="VideoView_error_button" msgid="2822238215100679592">"OK"</string>
     <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
@@ -1018,7 +1004,7 @@
     <string name="whichImageCaptureApplication" msgid="3680261417470652882">"Capturar imagem com"</string>
     <string name="whichImageCaptureApplicationNamed" msgid="8619384150737825003">"Capturar imagem com o %1$s"</string>
     <string name="whichImageCaptureApplicationLabel" msgid="6390303445371527066">"Capturar imagem"</string>
-    <string name="alwaysUse" msgid="4583018368000610438">"Utilizar por predefinição para esta acção."</string>
+    <string name="alwaysUse" msgid="4583018368000610438">"Utilizar por predefinição para esta ação."</string>
     <string name="use_a_different_app" msgid="8134926230585710243">"Utilizar outra aplicação"</string>
     <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Limpar a predefinição nas Definições do Sistema &gt; Aplicações &gt; Transferidas."</string>
     <string name="chooseActivity" msgid="7486876147751803333">"Escolha uma ação"</string>
@@ -1472,16 +1458,16 @@
     <string name="kg_login_checking_password" msgid="1052685197710252395">"A verificar a conta…"</string>
     <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Escreveu o PIN incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\nTente novamente dentro de <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Escreveu a palavra-passe incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\nTente novamente dentro de <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
-    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Desenhou a sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\nTente novamente dentro de <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Desenhou a sua padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\nTente novamente dentro de <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Tentou desbloquear o tablet <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes de forma incorreta. Depois de mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem êxito, as definições de origem do telemóvel serão repostas e todos os dados do utilizador serão perdidos."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="5621231220154419413">"O utilizador tentou desbloquear incorretamente a TV <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem êxito, a TV é reposta para as predefinições de fábrica e todos os dados do utilizador são perdidos."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Tentou desbloquear o telemóvel <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes de forma incorreta. Depois de mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem êxito, as definições de origem do telemóvel serão repostas e todos os dados do utilizador serão perdidos."</string>
     <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Tentou desbloquear o tablet <xliff:g id="NUMBER">%d</xliff:g> vezes de forma incorreta, pelo que será reposta a predefinição de fábrica."</string>
     <string name="kg_failed_attempts_now_wiping" product="tv" msgid="4987878286750741463">"O utilizador tentou desbloquear incorretamente a TV <xliff:g id="NUMBER">%d</xliff:g> vezes. A TV será agora reposta para as predefinições de fábrica."</string>
     <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Tentou desbloquear o telemóvel <xliff:g id="NUMBER">%d</xliff:g> vezes de forma incorreta, pelo que será reposta a predefinição de fábrica."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Desenhou a sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Depois de mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o tablet através de uma conta de email.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4224651132862313471">"O utilizador desenhou incorretamente a sua sequência de desbloqueio <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem êxito, é-lhe pedido que desbloqueie a sua TV através de uma conta de email.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Desenhou a sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Depois de mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o telemóvel através de uma conta de email.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Desenhou o padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Depois de mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o tablet através de uma conta de email.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4224651132862313471">"O utilizador desenhou incorretamente a sua padrão de desbloqueio <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem êxito, é-lhe pedido que desbloqueie a sua TV através de uma conta de email.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Desenhou o padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Depois de mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o telemóvel através de uma conta de email.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" - "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Remover"</string>
     <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"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>
@@ -1624,7 +1610,7 @@
     <string name="lock_to_app_start" msgid="6643342070839862795">"Ecrã fixo"</string>
     <string name="lock_to_app_exit" msgid="8598219838213787430">"Ecrã solto"</string>
     <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Pedir PIN antes de soltar"</string>
-    <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Pedir sequência de desbloqueio antes de soltar"</string>
+    <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Pedir padrão de desbloqueio antes de soltar"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Pedir palavra-passe antes de soltar"</string>
     <string name="package_installed_device_owner" msgid="6875717669960212648">"Instalado pelo seu gestor"</string>
     <string name="package_updated_device_owner" msgid="1847154566357862089">"Atualizado pelo seu gestor"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM não ativado"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM não permitido"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telemóvel não permitido"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Janela pop-up"</string>
 </resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 0fb12fb..09521bc 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dias"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> dia <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> dia <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> m"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Sem título&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nenhum número de telefone)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Desconhecido"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Sem serviço de voz/emergência"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Serviço temporariamente bloqueado pela rede móvel no seu local"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Não foi possível acessar a rede"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Para melhorar a recepção, tente alterar o tipo selecionado em Sistema &gt; Rede &amp; Internet &gt; Redes móveis &gt; Tipo de rede preferencial."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Para melhorar a recepção, tente alterar o tipo selecionado em Configurações &gt; Rede &amp; Internet &gt; Redes móveis &gt; Tipo de rede preferencial."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"A chamada no Wi‑Fi está ativa"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"As chamadas de emergência exigem uma rede móvel."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alertas"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Encaminhamento de chamada"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Modo de retorno de chamada de emergência"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Alertas de dados móveis"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status dos dados móveis"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Mensagens SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mensagens do correio de voz"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Chamadas por Wi-Fi"</string>
@@ -213,9 +199,9 @@
     <string name="shutdown_confirm" product="tv" msgid="476672373995075359">"Sua TV será desligada."</string>
     <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Seu relógio será desligado."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"O seu telefone será desligado."</string>
-    <string name="shutdown_confirm_question" msgid="2906544768881136183">"Deseja desligar?"</string>
+    <string name="shutdown_confirm_question" msgid="2906544768881136183">"Quer desligar?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Reiniciar no modo de segurança"</string>
-    <string name="reboot_safemode_confirm" msgid="55293944502784668">"Deseja reiniciar no modo de segurança? Isso desativará todos os apps de terceiros instalados. Eles serão restaurados quando você reiniciar novamente."</string>
+    <string name="reboot_safemode_confirm" msgid="55293944502784668">"Quer reiniciar no modo de segurança? Isso desativará todos os apps de terceiros instalados. Eles serão restaurados quando você reiniciar novamente."</string>
     <string name="recent_tasks_title" msgid="3691764623638127888">"Recente"</string>
     <string name="no_recent_tasks" msgid="8794906658732193473">"Nenhum app recente"</string>
     <string name="global_actions" product="tablet" msgid="408477140088053665">"Opções do tablet"</string>
@@ -810,7 +796,7 @@
     <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"Confirmar navegação"</string>
     <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"Sair desta página"</string>
     <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"Permanecer nesta página"</string>
-    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nTem certeza de que deseja sair desta página?"</string>
+    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nTem certeza que quer sair desta página?"</string>
     <string name="save_password_label" msgid="6860261758665825069">"Confirmar"</string>
     <string name="double_tap_toast" msgid="4595046515400268881">"Dica: toque duas vezes para aumentar e diminuir o zoom."</string>
     <string name="autofill_this_form" msgid="4616758841157816676">"Preench. aut."</string>
@@ -843,7 +829,7 @@
     <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Permite que o app adicione mensagens a sua caixa de entrada do correio de voz."</string>
     <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"Modifique as permissões de geolocalização de seu navegador"</string>
     <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Permite que o app modifique as permissões de geolocalização do navegador. Apps maliciosos podem usar isso para permitir o envio de informações locais para sites arbitrários."</string>
-    <string name="save_password_message" msgid="767344687139195790">"Deseja que o navegador lembre desta senha?"</string>
+    <string name="save_password_message" msgid="767344687139195790">"Quer que o navegador lembre desta senha?"</string>
     <string name="save_password_notnow" msgid="6389675316706699758">"Agora não"</string>
     <string name="save_password_remember" msgid="6491879678996749466">"Lembrar"</string>
     <string name="save_password_never" msgid="8274330296785855105">"Nunca"</string>
@@ -1042,7 +1028,7 @@
     <string name="force_close" msgid="8346072094521265605">"OK"</string>
     <string name="report" msgid="4060218260984795706">"Informar"</string>
     <string name="wait" msgid="7147118217226317732">"Aguardar"</string>
-    <string name="webpage_unresponsive" msgid="3272758351138122503">"A página não responde.\n\nDeseja fechá-la?"</string>
+    <string name="webpage_unresponsive" msgid="3272758351138122503">"A página não responde.\n\nQuer fechá-la?"</string>
     <string name="launch_warning_title" msgid="1547997780506713581">"App redirecionado"</string>
     <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> não está em execução."</string>
     <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> foi iniciado."</string>
@@ -1152,7 +1138,7 @@
     <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"O telefone desconectará temporariamente da rede Wi-Fi enquanto estiver conectado a <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="select_character" msgid="3365550120617701745">"Inserir caractere"</string>
     <string name="sms_control_title" msgid="7296612781128917719">"Enviando mensagens SMS"</string>
-    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; envia uma grande quantidade de mensagens SMS. Deseja permitir que este app continue enviando mensagens?"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; envia uma grande quantidade de mensagens SMS. Quer permitir que este app continue enviando mensagens?"</string>
     <string name="sms_control_yes" msgid="3663725993855816807">"Permitir"</string>
     <string name="sms_control_no" msgid="625438561395534982">"Negar"</string>
     <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; deseja enviar uma mensagem para &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
@@ -1275,7 +1261,7 @@
     <string name="dial_number_using" msgid="5789176425167573586">"Discar número\nusando <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="create_contact_using" msgid="4947405226788104538">"Criar contato \nusando <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"O app a seguir ou outros apps solicitam permissão para acessar sua conta, agora e no futuro."</string>
-    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Deseja permitir essa solicitação?"</string>
+    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Quer permitir essa solicitação?"</string>
     <string name="grant_permissions_header_text" msgid="6874497408201826708">"Solicitação de acesso"</string>
     <string name="allow" msgid="7225948811296386551">"Permitir"</string>
     <string name="deny" msgid="2081879885755434506">"Negar"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM não aprovisionado"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM não permitido"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Smartphone não permitido"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Janela pop-up"</string>
 </resources>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index fe0b329..fe8a9d8 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TO"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PO"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g>   zile"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> zile <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> zi <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g>   min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min."</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sec"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sec"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> sec"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sec"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Fără titlu&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Niciun număr de telefon)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Necunoscut"</string>
@@ -96,11 +80,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Fără servicii vocale/de urgență"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Momentan nu este oferit de rețeaua mobilă în locația dvs."</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Nu se poate stabili conexiunea la rețea"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Pentru o recepție mai bună, încercați să schimbați tipul selectat în Sistem &gt; Rețea și internet &gt; Rețele mobile &gt; Tip preferat de rețea."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Pentru o recepție mai bună, încercați să schimbați tipul selectat în Setări &gt; Rețea și internet &gt; Rețele mobile &gt; Tip preferat de rețea."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Apelarea prin Wi-Fi este activă"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Apelurile de urgență necesită o rețea mobilă."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alerte"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Redirecționarea apelurilor"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Mod de apelare inversă de urgență"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Alerte de date mobile"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Starea datelor mobile"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Mesaje SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mesaje din mesageria vocală"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Apelare prin Wi-Fi"</string>
@@ -1814,4 +1800,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Cardul SIM nu este activat"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Cardul SIM nu este permis"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefonul nu este permis"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Fereastră pop-up"</string>
 </resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index bd79441..bcd77f4 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"Б"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"КБ"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"МБ"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"ГБ"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TБ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"ПБ"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> дн."</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> день <xliff:g id="HOURS">%2$d</xliff:g> ч."</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> день <xliff:g id="HOURS">%2$d</xliff:g> ч."</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ч."</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ч. <xliff:g id="MINUTES">%2$d</xliff:g> мин."</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ч. <xliff:g id="MINUTES">%2$d</xliff:g> мин."</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> мин."</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> мин."</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> мин. <xliff:g id="SECONDS">%2$d</xliff:g> с"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> мин. <xliff:g id="SECONDS">%2$d</xliff:g> с"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> с"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> с"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Без названия&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Нет номера телефона)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Неизвестно"</string>
@@ -97,11 +81,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Голосовые и экстренные вызовы недоступны"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Местная мобильная сеть временно не поддерживает эту функцию."</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Сеть недоступна"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Чтобы улучшить сигнал, попробуйте выбрать другой тип сети в настройках (раздел \"Мобильные сети\")."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Чтобы улучшить сигнал, попробуйте выбрать другой тип сети в настройках (раздел \"Мобильные сети\")."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Включена функция \"Звонки по Wi‑Fi\""</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Для экстренных вызовов требуется мобильная сеть."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Оповещения"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Переадресация вызовов"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Режим экстренных обратных вызовов"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Оповещения, связанные с мобильным Интернетом"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Состояние мобильного Интернета"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Голосовые сообщения"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Звонки по Wi-Fi"</string>
@@ -305,8 +291,8 @@
     <string name="capability_desc_canControlMagnification" msgid="4791858203568383773">"Управлять позиционированием и размером изображения на экране."</string>
     <string name="capability_title_canPerformGestures" msgid="7418984730362576862">"Жесты"</string>
     <string name="capability_desc_canPerformGestures" msgid="8296373021636981249">"Может выполнять жесты нажатия, пролистывания, масштабирования и т. д."</string>
-    <string name="capability_title_canCaptureFingerprintGestures" msgid="6309568287512278670">"Жесты для отпечатков пальцев"</string>
-    <string name="capability_desc_canCaptureFingerprintGestures" msgid="7102111919385702482">"Сохраняет жесты, выполненные на сканере отпечатков пальцев."</string>
+    <string name="capability_title_canCaptureFingerprintGestures" msgid="6309568287512278670">"Регистрировать жесты на сканере отпечатков пальцев"</string>
+    <string name="capability_desc_canCaptureFingerprintGestures" msgid="7102111919385702482">"Использовать сканер отпечатков пальцев для дополнительных жестов."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"Отключение/изменение строки состояния"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Приложение сможет отключать строку состояния, а также добавлять и удалять системные значки."</string>
     <string name="permlab_statusBarService" msgid="4826835508226139688">"Замена строки состояния"</string>
@@ -1848,4 +1834,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM-карта не активирована"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Использование SIM-карты запрещено"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Звонки запрещены"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Всплывающее окно"</string>
 </resources>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index 8b3099d..c522c14 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"දින <xliff:g id="DAYS">%1$d</xliff:g>"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"දින <xliff:g id="DAYS">%1$d</xliff:g> පැය <xliff:g id="HOURS">%2$d</xliff:g>"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"දින <xliff:g id="DAYS">%1$d</xliff:g> පැය <xliff:g id="HOURS">%2$d</xliff:g>"</string>
-    <string name="durationHours" msgid="4266858287167358988">"පැය <xliff:g id="HOURS">%1$d</xliff:g>"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"පැය <xliff:g id="HOURS">%1$d</xliff:g> මිනි <xliff:g id="MINUTES">%2$d</xliff:g>"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"පැය <xliff:g id="HOURS">%1$d</xliff:g> මිනි <xliff:g id="MINUTES">%2$d</xliff:g>"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"මිනි <xliff:g id="MINUTES">%1$d</xliff:g>"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"මිනිත්තු <xliff:g id="MINUTES">%1$d</xliff:g>"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"මිනි <xliff:g id="MINUTES">%1$d</xliff:g> තත් <xliff:g id="SECONDS">%2$d</xliff:g>"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"මිනි <xliff:g id="MINUTES">%1$d</xliff:g> තත් <xliff:g id="SECONDS">%2$d</xliff:g>"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"තත් <xliff:g id="SECONDS">%1$d</xliff:g>"</string>
-    <string name="durationSecond" msgid="985669622276420331">"තත් <xliff:g id="SECONDS">%1$d</xliff:g>"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;නම් යොදා නැත&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(දුරකථන අංකයක් නොමැත)"</string>
     <string name="unknownName" msgid="6867811765370350269">"නොදනී"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"හඬ/හදිසි සේවාව නොමැත"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"ඔබේ ස්ථානයේ ජංගම ජාලය මගින් තාවකාලිකව පිරිනොනමයි"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"ජාලය වෙත ළඟා විය නොහැකිය"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"ප්‍රතිග්‍රහණය වැඩි දියුණු කිරීමට, පද්ධතිය &gt; ජාලය සහ අන්තර්ජාලය &gt; ජංගම ජාල &gt; වඩා කැමති ජාල වර්ගය තුළ තෝරන ලද වර්ගය වෙනස් කිරීම උත්සාහ කරන්න."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"ප්‍රතිග්‍රහණය වැඩි දියුණු කිරීමට, සැකසීම් &gt; ජාලය සහ අන්තර්ජාලය &gt; ජංගම ජාල &gt; වඩා කැමති ජාල වර්ගය තුළ තෝරන ලද වර්ගය වෙනස් කිරීම උත්සාහ කරන්න."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi ඇමතීම සක්‍රියයි"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"හදිසි ඇමතුම්වලට ජංගම ජාලයක් අවශ්‍යයි"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"ඇඟවීම්"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"ඇමතුම ප්‍රතියොමු කිරීම"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"හදිසි අවස්ථා පසු ඇමතුම් ප්‍රකාරය"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"ජංගම දත්ත ඇඟවීම්"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"ජංගම දත්ත තත්ත්වය"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS පණිවිඩ"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"හඬ තැපැල් පණිවිඩ"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi ඇමතීම"</string>
@@ -1782,4 +1768,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM එක සක්‍රීය කර නොමැත"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM එක සඳහා ඉඩ නොදේ"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"දුරකථනය සඳහා ඉඩ නොදේ"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"උත්පතන කවුළුව"</string>
 </resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 2fe25c5..4becf96 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> d."</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> d. <xliff:g id="HOURS">%2$d</xliff:g> hod."</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> d. <xliff:g id="HOURS">%2$d</xliff:g> hod."</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> hod."</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> hod. <xliff:g id="MINUTES">%2$d</xliff:g> min."</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> hod. <xliff:g id="MINUTES">%2$d</xliff:g> min."</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min. <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min. <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Bez mena&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(žiadne telefónne číslo)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Bez názvu"</string>
@@ -97,11 +81,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Hlasové ani tiesňové volania nie sú k dispozícii"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Momentálne nie sú v ponuke mobilnej siete na vašom mieste"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Nepodarilo sa pripojiť k sieti"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Ak chcete vylepšiť príjem, skúste zmeniť vybratý typ siete v časti Systém &gt; Sieť a internet &gt; Mobilné siete &gt; Preferovaný typ siete."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Ak chcete vylepšiť príjem, skúste zmeniť vybraný typ v časti Nastavenia &gt; Sieť a internet &gt; Mobilné siete &gt; Preferovaný typ siete."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Volanie cez Wi‑Fi je aktívne"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Tiesňové volania vyžadujú mobilnú sieť."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Upozornenia"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Presmerovanie hovorov"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Režim tiesňového spätného volania"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Upozornenia na mobilné dáta"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Stav mobilných dát"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Správy SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Správy hlasovej schránky"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Volanie cez Wi‑Fi"</string>
@@ -1848,4 +1834,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM karta nie je k dispozícii"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM karta je zakázaná"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefón je zakázaný"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Automaticky otvárané okno"</string>
 </resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 3526373..800aa77 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"Št. dni: <xliff:g id="DAYS">%1$d</xliff:g>"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> dan <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> dan <xliff:g id="HOURS">%2$d</xliff:g> h"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> h"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> h <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Brez naslova&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Ni telefonske številke)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Neznano"</string>
@@ -97,11 +81,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Ni storitve za glasovne klice / klice v sili"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Ta storitev trenutno ni na voljo v mobilnem omrežju na vaši lokaciji"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Povezave z omrežjem ni mogoče vzpostaviti"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Če želite izboljšati sprejem, poskusite zamenjati vrsto omrežja v možnostih »Sistem« &gt; »Omrežje in internet« &gt; »Mobilna omrežja« &gt; »Prednostna vrsta omrežja«."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Če želite izboljšati sprejem, poskusite zamenjati vrsto omrežja v »Nastavitve« &gt; »Omrežje in internet« &gt; »Mobilna omrežja« &gt; »Prednostna vrsta omrežja«."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Klicanje prek Wi-Fi-ja je aktivno"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Za klice v sili potrebujete mobilno omrežje."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Opozorila"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Preusmerjanje klicev"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Način za povratni klic v sili"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Opozorila o prenosu podatkov v mobilnem omrežju"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Stanje prenosa podatkov v mobilnem omrežju"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Sporočila SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Sporočila v odzivniku"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Klicanje prek Wi-Fi-ja"</string>
@@ -1848,4 +1834,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Kartica SIM ni omogočena za uporabo"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Kartica SIM ni dovoljena"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefon ni dovoljen"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Pojavno okno"</string>
 </resources>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index a853ee3..eaa30cc 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"terabajt"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"petabajt"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> ditë"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> ditë e <xliff:g id="HOURS">%2$d</xliff:g> orë"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> ditë e <xliff:g id="HOURS">%2$d</xliff:g> orë"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> orë"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> orë e <xliff:g id="MINUTES">%2$d</xliff:g> minuta"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> orë e <xliff:g id="MINUTES">%2$d</xliff:g> minuta"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> minuta"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> minuta"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> minuta e <xliff:g id="SECONDS">%2$d</xliff:g> sekonda"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> minuta e <xliff:g id="SECONDS">%2$d</xliff:g> sekonda"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> sekonda"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sekonda"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Pa titull&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Nuk ka numër telefoni)"</string>
     <string name="unknownName" msgid="6867811765370350269">"E panjohur"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Nuk ka shërbim zanor/urgjence"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Përkohësisht nuk ofrohet nga rrjeti celular në vendndodhjen tënde"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Rrjeti i paarritshëm"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Për të përmirësuar marrjen e sinjalit, provo të ndryshosh llojin e zgjedhur te Sistemi &gt; Rrjeti dhe interneti &gt; Lloji i preferuar i rrjetit."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Për të përmirësuar marrjen e sinjalit, provo të ndryshosh llojin e zgjedhur te Cilësimet &gt; Rrjeti dhe interneti &gt; Lloji i preferuar i rrjetit."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Telefonata me Wi‑Fi është aktive"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Telefonatat e urgjencës kërkojnë një rrjet celular."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Sinjalizimet"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Transferimi i telefonatave"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Modaliteti i \"Kthimit të telefonatës së urgjencës\""</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Sinjalizimet për të dhënat celulare"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Statusi i të dhënave celulare"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Mesazhet SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mesazhet e postës zanore"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Telefonata me Wi-Fi"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Karta SIM nuk është dhënë"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Karta SIM nuk lejohet"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefoni nuk lejohet"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Dritare kërcyese"</string>
 </resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 9f3c303..7884b9f 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> дана"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> дан <xliff:g id="HOURS">%2$d</xliff:g> с"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> дан <xliff:g id="HOURS">%2$d</xliff:g> с"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> с"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> с <xliff:g id="MINUTES">%2$d</xliff:g> мин"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> с <xliff:g id="MINUTES">%2$d</xliff:g> мин"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> мин"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> мин"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> мин <xliff:g id="SECONDS">%2$d</xliff:g> сек"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> мин <xliff:g id="SECONDS">%2$d</xliff:g> сек"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> сек"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> сек"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Без наслова&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Нема броја телефона)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Непознато"</string>
@@ -96,11 +80,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Нема гласовне услуге/услуге за хитне позиве"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Привремено је онемогућено на мобилној мрежи на вашој локацији"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Повезивање са мрежом није успело"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Да бисте побољшали пријем, пробајте да промените изабрани тип у одељку Систем &gt; Мрежа и интернет &gt; Мобилне мреже &gt; Жељени тип мреже."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Да бисте побољшали пријем, пробајте да промените изабрани тип у одељку Подешавања &gt; Мрежа и интернет &gt; Мобилне мреже &gt; Жељени тип мреже."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi позивање је активно"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Хитни позиви захтевају мобилну мрежу."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Обавештења"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Преусмеравање позива"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Режим за хитан повратни позив"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Обавештења за мобилне податке"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Статус мобилних података"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS-ови"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Поруке говорне поште"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Позивање преко Wi-Fi мреже"</string>
@@ -1009,7 +995,7 @@
     <string name="low_internal_storage_view_text_no_boot" msgid="6935190099204693424">"Нема довољно меморијског простора за систем. Уверите се да имате 250 MB слободног простора и поново покрените."</string>
     <string name="app_running_notification_title" msgid="8718335121060787914">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> је покренута"</string>
     <string name="app_running_notification_text" msgid="1197581823314971177">"Додирните за више информација или заустављање апликације."</string>
-    <string name="ok" msgid="5970060430562524910">"Потврди"</string>
+    <string name="ok" msgid="5970060430562524910">"У реду"</string>
     <string name="cancel" msgid="6442560571259935130">"Откажи"</string>
     <string name="yes" msgid="5362982303337969312">"Потврди"</string>
     <string name="no" msgid="5141531044935541497">"Откажи"</string>
@@ -1814,4 +1800,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM картица није подешена"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM картица није дозвољена"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Телефон није дозвољен"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Искачући прозор"</string>
 </resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 4662fda..155166f 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> dagar"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> dag <xliff:g id="HOURS">%2$d</xliff:g> tim"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> dag <xliff:g id="HOURS">%2$d</xliff:g> tim"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> timmar"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> tim <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> tim <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> minuter"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sek"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> sek"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> sekunder"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sekund"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Okänd&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Inget telefonnummer)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Okänt"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Tjänster för röst- och nödsamtal har blockerats"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Detta erbjuds för tillfället inte på mobilnätverket där du befinner dig"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Det går inte att nå nätverket"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Testa om du får bättre mottagning genom att ändra till en annan typ under System &gt; Nätverk och internet &gt; Mobila nätverk &gt; Önskad nätverkstyp."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Testa om du får bättre mottagning genom att ändra till en annan typ under Inställningar &gt; Nätverk och internet &gt; Mobila nätverk &gt; Önskad nätverkstyp."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi-Fi-samtal är aktiverat"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Mobilnätverk krävs för att ringa nödsamtal."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Aviseringar"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Vidarekoppla samtal"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Läget Återuppringning vid nödsamtal"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Aviseringar för mobildata"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status för mobildata"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Sms"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Röstmeddelanden"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-samtal"</string>
@@ -1194,7 +1180,7 @@
     <string name="usb_unsupported_audio_accessory_title" msgid="3529881374464628084">"Ett tillbehör med analog ljudutgång hittades"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="6309553946441565215">"Den anslutna enheten är inte kompatibel med mobilen. Tryck här om du vill veta mer."</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-felsökning ansluten"</string>
-    <string name="adb_active_notification_message" msgid="4948470599328424059">"Tryck om du vill inaktivera USB-felsökning."</string>
+    <string name="adb_active_notification_message" msgid="4948470599328424059">"Tryck för att inaktivera USB-felsökning."</string>
     <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"Välj för att inaktivera USB-felsökning."</string>
     <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"Felrapporten överförs …"</string>
     <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Vill du dela felrapporten?"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM-kort tillhandahålls inte"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM-kort tillåts inte"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Mobil tillåts inte"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"popup-fönster"</string>
 </resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index cd2d0a6..d9871ba 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"Siku <xliff:g id="DAYS">%1$d</xliff:g>"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"Siku <xliff:g id="DAYS">%1$d</xliff:g> saa <xliff:g id="HOURS">%2$d</xliff:g>"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"Siku <xliff:g id="DAYS">%1$d</xliff:g> saa <xliff:g id="HOURS">%2$d</xliff:g>"</string>
-    <string name="durationHours" msgid="4266858287167358988">"Saa <xliff:g id="HOURS">%1$d</xliff:g>"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"Saa <xliff:g id="HOURS">%1$d</xliff:g> dak <xliff:g id="MINUTES">%2$d</xliff:g>"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"Saa <xliff:g id="HOURS">%1$d</xliff:g> dak <xliff:g id="MINUTES">%2$d</xliff:g>"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"Dakika <xliff:g id="MINUTES">%1$d</xliff:g>"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"Dak <xliff:g id="MINUTES">%1$d</xliff:g>"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"Dak <xliff:g id="MINUTES">%1$d</xliff:g> sek <xliff:g id="SECONDS">%2$d</xliff:g>"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"Dak <xliff:g id="MINUTES">%1$d</xliff:g> sek <xliff:g id="SECONDS">%2$d</xliff:g>"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"Sekunde <xliff:g id="SECONDS">%1$d</xliff:g>"</string>
-    <string name="durationSecond" msgid="985669622276420331">"Sekunde <xliff:g id="SECONDS">%1$d</xliff:g>"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Haina jina&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Hakuna nambari ya simu)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Isiyojulikana"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Hakuna huduma ya simu za dharura au za sauti"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Kwa sasa, huduma hii haipatikani katika mtandao wa simu mahali ulipo"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Haiwezi kufikia mtandao"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Ili kupata mtandao thabiti, jaribu kubadilisha aina iliyochaguliwa katika Mfumo &gt; Mtandao na Intaneti &gt; Mitandao ya simu &gt; Aina ya mtandao unaopendelea."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Ili kupata mtandao thabiti, jaribu kubadilisha aina uliyochagua katika Mipangilio &gt; Mtandao na Intaneti &gt; Mitandao ya simu &gt; Aina ya mtandao unaopendelea."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Umewasha kipengele cha kupiga simu kupitia Wi‑Fi"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Huduma ya kupiga simu za dharura inahitaji mtandao wa simu."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Arifa"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Kupeleka simu kwenye nambari nyingine"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Hali ya kupiga simu za dharura"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Arifa za matumizi ya data ya simu"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Hali ya data ya mtandao wa simu"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Ujumbe wa SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Ujumbe wa sauti"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Kupiga simu kupitia Wi-Fi"</string>
@@ -1716,7 +1702,7 @@
     <string name="work_mode_turn_on" msgid="2062544985670564875">"Washa"</string>
     <string name="new_sms_notification_title" msgid="8442817549127555977">"Una ujumbe mpya"</string>
     <string name="new_sms_notification_content" msgid="7002938807812083463">"Fungua programu ya SMS ili uweze kuangalia"</string>
-    <string name="user_encrypted_title" msgid="9054897468831672082">"Huenda baadhi ya utendaji ukawa vikwazo"</string>
+    <string name="user_encrypted_title" msgid="9054897468831672082">"Huenda baadhi ya vipengele havifanyi kazi"</string>
     <string name="user_encrypted_message" msgid="4923292604515744267">"Gusa ili ufungue"</string>
     <string name="user_encrypted_detail" msgid="5708447464349420392">"Data ya mtumiaji imefungwa"</string>
     <string name="profile_encrypted_detail" msgid="3700965619978314974">"Wasifu wa kazini umefungwa"</string>
@@ -1778,4 +1764,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM haikubaliwi"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM imekataliwa"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Simu imekataliwa"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Dirisha Ibukizi"</string>
 </resources>
diff --git a/core/res/res/values-sw380dp-land/dimens.xml b/core/res/res/values-sw380dp-land/dimens.xml
deleted file mode 100644
index 20eb1be..0000000
--- a/core/res/res/values-sw380dp-land/dimens.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/assets/res/any/dimens.xml
-**
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources>
-    <!-- Top margin for the clock view --> 
-    <dimen name="kg_clock_top_margin">48dp</dimen>
-</resources>
diff --git a/core/res/res/values-sw380dp/dimens.xml b/core/res/res/values-sw380dp/dimens.xml
deleted file mode 100644
index fc0e85d..0000000
--- a/core/res/res/values-sw380dp/dimens.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<resources>
-    <!-- Width of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) -->
-    <dimen name="keyguard_security_width">340dp</dimen>
-</resources>
\ No newline at end of file
diff --git a/core/res/res/values-sw600dp/dimens.xml b/core/res/res/values-sw600dp/dimens.xml
index 9c45c12..02ed848 100644
--- a/core/res/res/values-sw600dp/dimens.xml
+++ b/core/res/res/values-sw600dp/dimens.xml
@@ -104,9 +104,6 @@
     <dimen name="kg_runway_lights_top_margin">-10dp</dimen>
 
     <!-- Margin around the various security views -->
-    <dimen name="keyguard_security_view_margin">12dp</dimen>
-
-    <!-- Margin around the various security views -->
     <dimen name="keyguard_muliuser_selector_margin">12dp</dimen>
 
     <!-- width of ImmersiveModeConfirmation (-1 for match_parent) -->
diff --git a/core/res/res/values-sw720dp/dimens.xml b/core/res/res/values-sw720dp/dimens.xml
index 2317d1f..ac48ad7 100644
--- a/core/res/res/values-sw720dp/dimens.xml
+++ b/core/res/res/values-sw720dp/dimens.xml
@@ -111,10 +111,4 @@
 
     <!-- Size of the text under the avator on the multiuser lockscreen. -->
     <dimen name="keyguard_avatar_name_size">12sp</dimen>
-
-    <!-- Width of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) -->
-    <dimen name="keyguard_security_width">420dp</dimen>
-
-    <!-- Height of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) -->
-    <dimen name="keyguard_security_height">420dp</dimen>
 </resources>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 452f717..c47fff1 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"பை."</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"கி.பை."</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"மெ.பை."</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"ஜி.பை."</string>
-    <string name="terabyteShort" msgid="231613018159186962">"டெ.பை."</string>
     <string name="petabyteShort" msgid="5637816680144990219">"பெ.பை."</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> நாட்கள்"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> நாள் <xliff:g id="HOURS">%2$d</xliff:g> ம.நே."</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> நாள் <xliff:g id="HOURS">%2$d</xliff:g> ம.நே."</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ம.நே."</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ம.நே. <xliff:g id="MINUTES">%2$d</xliff:g> நிமி."</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> மநே <xliff:g id="MINUTES">%2$d</xliff:g> நிமி"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> நிமிடங்கள்"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> நிமி."</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> நிமி <xliff:g id="SECONDS">%2$d</xliff:g> வி"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> நிமி <xliff:g id="SECONDS">%2$d</xliff:g> வி"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> வினாடிகள்"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> வினாடி"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;பெயரிடப்படாதது&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(தொலைபேசி எண் இல்லை)"</string>
     <string name="unknownName" msgid="6867811765370350269">"அறியப்படாதவர்"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"குரல்/அவசரச் சேவை இல்லை"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"தற்காலிகமாக உங்கள் இருப்பிடத்தில் மொபைல் நெட்வொர்க் வழங்கவில்லை"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"நெட்வொர்க்குடன் இணைக்க முடியவில்லை"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"பெறுதலை மேம்படுத்த, சாதனம் &gt; நெட்வொர்க் &amp; இணையம் &gt; மொபைல் நெட்வொர்க்குகள் &gt; விரும்பும் நெட்வொர்க் வகை என்பதற்குச் சென்று, தேர்ந்தெடுத்த வகையை மாற்றவும்."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"பெறுதலை மேம்படுத்த, அமைப்புகள் &gt; நெட்வொர்க் &amp; இணையம் &gt; மொபைல் நெட்வொர்க்குகள் &gt; விரும்பும் நெட்வொர்க் வகை என்பதற்குச் சென்று, தேர்ந்தெடுத்த வகையை மாற்றவும்."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"வைஃபை அழைப்பு இயக்கத்தில் உள்ளது"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"அவசர அழைப்புகளுக்கு, மொபைல் நெட்வொர்க் தேவை."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"விழிப்பூட்டல்கள்"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"அழைப்புப் பகிர்வு"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"அவசரகாலத் திரும்ப அழைக்கும் பயன்முறை"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"மொபைல் டேட்டா விழிப்பூட்டல்கள்"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"மொபைல் டேட்டாவின் நிலை"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS செய்திகள்"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"குரலஞ்சல் செய்திகள்"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"வைஃபை அழைப்பு"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"சிம் அமைக்கப்படவில்லை"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"சிம் அனுமதிக்கப்படவில்லை"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"ஃபோன் அனுமதிக்கப்படவில்லை"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"பாப்அப் சாளரம்"</string>
 </resources>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index a42bb91..87134dd 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> రోజులు"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> రో <xliff:g id="HOURS">%2$d</xliff:g> గం"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> రో <xliff:g id="HOURS">%2$d</xliff:g> గం"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> గంటలు"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> గం <xliff:g id="MINUTES">%2$d</xliff:g> నిమి"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> గం <xliff:g id="MINUTES">%2$d</xliff:g> నిమి"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> నిమిషాలు"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> నిమి"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> నిమి <xliff:g id="SECONDS">%2$d</xliff:g> సె"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> నిమి <xliff:g id="SECONDS">%2$d</xliff:g> సె"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> సెకన్లు"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> సెకను"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;శీర్షిక లేనిది&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(ఫోన్ నంబర్ లేదు)"</string>
     <string name="unknownName" msgid="6867811765370350269">"తెలియదు"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"వాయిస్/అత్యవసర సేవ లేదు"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"మీ స్థానంలో మొబైల్ నెట్‌వర్క్ ద్వారా తాత్కాలికంగా అందించబడదు"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"నెట్‌వర్క్‌ను చేరుకోలేరు"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"స్వీకరణను మెరుగుపరచాలంటే, సిస్టమ్ &gt; నెట్‌వర్క్ &amp; ఇంటర్నెట్ &gt; మొబైల్ నెట్‌వర్క్‌లు &gt; ప్రాధాన్య నెట్‌వర్క్ రకంలో మీరు ఎంచుకున్న రకాన్ని మార్చి ప్రయత్నించండి."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"స్వీకరణను మెరుగుపరచాలంటే, సెట్టింగ్‌లు &gt; నెట్‌వర్క్ &amp; ఇంటర్నెట్ &gt; మొబైల్ నెట్‌వర్క్‌లు &gt; ప్రాధాన్య నెట్‌వర్క్ రకంలో మీరు ఎంచుకున్న రకాన్ని మార్చి ప్రయత్నించండి."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi-Fi కాలింగ్ సక్రియంగా ఉంది"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"అత్యవసర కాల్‌లకు మొబైల్ నెట్‌వర్క్ అవసరమవుతుంది."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"హెచ్చరికలు"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"కాల్ ఫార్వార్డింగ్"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"అత్యవసర కాల్‌బ్యాక్ మోడ్"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"మొబైల్ డేటా హెచ్చరికలు"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"మొబైల్ డేటా స్థితి"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS సందేశాలు"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"వాయిస్ మెయిల్ సందేశాలు"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi కాలింగ్"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM సక్రియం కాలేదు"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM అనుమతించబడదు"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"ఫోన్ అనుమతించబడదు"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"పాప్అప్ విండో"</string>
 </resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index ff06a00..dead16f 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> วัน"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> วัน <xliff:g id="HOURS">%2$d</xliff:g> ชม."</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> วัน <xliff:g id="HOURS">%2$d</xliff:g> ชม."</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> ชม."</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ชม. <xliff:g id="MINUTES">%2$d</xliff:g> นาที"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ชม. <xliff:g id="MINUTES">%2$d</xliff:g> นาที"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> นาที"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> นาที"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> นาที <xliff:g id="SECONDS">%2$d</xliff:g> วิ."</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> นาที <xliff:g id="SECONDS">%2$d</xliff:g> วิ."</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> วินาที"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> วินาที"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;ไม่มีชื่อ&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(ไม่มีหมายเลขโทรศัพท์)"</string>
     <string name="unknownName" msgid="6867811765370350269">"ไม่ทราบ"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"ไม่มีบริการเสียง/บริการฉุกเฉิน"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"งดให้บริการชั่วคราวโดยเครือข่ายมือถือในตำแหน่งของคุณ"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"เข้าถึงเครือข่ายไม่ได้"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"เพื่อให้การรับสัญญาณดีขึ้น ลองเปลี่ยนประเภทที่เลือกใน \"การตั้งค่า\" &gt; \"เครือข่ายและอินเทอร์เน็ต\" &gt; \"เครือข่ายมือถือ\" &gt; \"ประเภทเครือข่ายที่ต้องการ\""</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"ลองเปลี่ยนประเภทที่เลือกใน \"การตั้งค่า\" &gt; \"เครือข่ายและอินเทอร์เน็ต\" &gt; \"เครือข่ายมือถือ\" &gt; \"ประเภทเครือข่ายที่ต้องการ\" เพื่อให้การรับสัญญาณดีขึ้น"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"กำลังใช้งานการโทรผ่าน Wi-Fi"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"หมายเลขฉุกเฉินต้องใช้เครือข่ายมือถือ"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"การแจ้งเตือน"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"การโอนสาย"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"โหมดติดต่อกลับฉุกเฉิน"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"การแจ้งเตือนอินเทอร์เน็ตมือถือ"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"สถานะเน็ตมือถือ"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"ข้อความ SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ข้อความเสียง"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"การโทรผ่าน Wi-Fi"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"ไม่มีการจัดสรรซิม"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"ไม่อนุญาตให้ใช้ซิม"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"ไม่อนุญาตให้ใช้โทรศัพท์"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"หน้าต่างป๊อปอัป"</string>
 </resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 88db4f6..df85530 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> (na) araw"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> day <xliff:g id="HOURS">%2$d</xliff:g> hr"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> day <xliff:g id="HOURS">%2$d</xliff:g> hr"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> (na) oras"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> oras <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> oras <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> (na) min"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> seg"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> min <xliff:g id="SECONDS">%2$d</xliff:g> seg"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> (na) seg"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> (na) seg"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Walang pamagat&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Walang numero ng telepono)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Hindi alam"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Walang serbisyo para sa voice/emergency"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Pansamantalang hindi inaalok ng mobile network sa iyong lokasyon"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Hindi maabot ang network"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Upang lumakas ang reception, subukang baguhin ang uring napili sa System &gt; Network at Internet &gt; Mga mobile network &gt; Gustong uri ng network."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Upang mapahusay ang reception, subukang baguhin ang uring napili sa Mga Setting &gt; Network at Internet &gt; Mga mobile network &gt; Gustong uri ng network."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Aktibo ang pagtawag sa pamamagitan ng Wi‑Fi"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Nangangailangan ng mobile network ang mga emergency na tawag."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Mga Alerto"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Pagpasa ng tawag"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Emergency callback mode"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Mga alerto ng mobile data"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Status ng mobile data"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Mga mensaheng SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mga mensahe sa voicemail"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Pagtawag gamit ang Wi-Fi"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"Hindi naprobisyon ang SIM"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"Hindi pinahihintulutan ang SIM"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Hindi pinahihintulutan ang telepono"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Window ng Popup"</string>
 </resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 6cf1557..ef7a8c4 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> gün"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> gün <xliff:g id="HOURS">%2$d</xliff:g> sa."</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> gün <xliff:g id="HOURS">%2$d</xliff:g> sa."</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> sa."</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> sa. <xliff:g id="MINUTES">%2$d</xliff:g> dk."</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> sa. <xliff:g id="MINUTES">%2$d</xliff:g> dk."</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> dk."</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> dk."</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> dk. <xliff:g id="SECONDS">%2$d</xliff:g> sn."</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> dk. <xliff:g id="SECONDS">%2$d</xliff:g> sn."</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> sn."</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> sn."</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Adsız&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Telefon numarası yok)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Bilinmiyor"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Ses/acil durum hizmeti yok"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Bulunduğunuz yerdeki mobil ağ tarafından geçici olarak sunulmuyor"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Ağa erişilemiyor"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Sinyal gücünü iyileştirmek için Sistem &gt; Ağ ve İnternet &gt; Mobil ağlar &gt; Tercih edilen ağ türü\'nden seçili türü değiştirmeyi deneyin."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Sinyal gücünü iyileştirmek için Ayarlar &gt; Ağ ve İnternet &gt; Mobil ağlar &gt; Tercih edilen ağ türü bölümünde seçili türü değiştirmeyi deneyin."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Kablosuz çağrı etkin"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Acil durum çağrıları için mobil ağ gereklidir."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Uyarılar"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Çağrı yönlendirme"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Acil geri arama modu"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Mobil veri uyarıları"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Mobil veri durumu"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS mesajları"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Sesli mesajlar"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Kablosuz çağrı"</string>
@@ -278,7 +264,7 @@
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"Takvim"</string>
     <string name="permgroupdesc_calendar" msgid="3889615280211184106">"takviminize erişme"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS iletileri gönderme ve görüntüleme"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS mesajları gönderme ve görüntüleme"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Depolama"</string>
     <string name="permgroupdesc_storage" msgid="637758554581589203">"cihazınızdaki fotoğraflara, medyaya ve dosyalara erişme"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
@@ -286,7 +272,7 @@
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"fotoğraf çekme ve video kaydetme"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string>
-    <string name="permgroupdesc_phone" msgid="6234224354060641055">"telefon aramaları yapma ve çağrıları yönetme"</string>
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"telefon çağrıları yapma ve yönetme"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Vücut Sensörleri"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"hayati belirtilerinizle ilgili sensör verilerine erişme"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Pencere içeriğini alma"</string>
@@ -323,7 +309,7 @@
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Uygulamaya, cihazınız tarafından alınan hücre yayını mesajlarını okuma izni verir. Hücre yayını uyarıları bazı yerlerde acil durumlar konusunda sizi uyarmak için gönderilir. Kötü amaçlı uygulamalar acil hücre yayını alındığında cihazınızın performansına ya da çalışmasına engel olabilir."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"abone olunan yayınları okuma"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Uygulamaya, o anda senkronize olan özet akışları ile ilgili bilgi alma izni verir."</string>
-    <string name="permlab_sendSms" msgid="7544599214260982981">"SMS iletileri gönderme ve görüntüleme"</string>
+    <string name="permlab_sendSms" msgid="7544599214260982981">"SMS mesajları gönderme ve görüntüleme"</string>
     <string name="permdesc_sendSms" msgid="7094729298204937667">"Uygulamaya SMS iletisi gönderme izni verir. Bu durum beklenmeyen ödemelere neden olabilir. Kötü amaçlı uygulamalar onayınız olmadan iletiler göndererek sizi zarara uğratabilir."</string>
     <string name="permlab_readSms" msgid="8745086572213270480">"kısa mesajlarımı (SMS veya MMS) oku"</string>
     <string name="permdesc_readSms" product="tablet" msgid="4741697454888074891">"Bu uygulama, tabletinizde kayıtlı tüm SMS mesajlarını (kısa mesajları) okuyabilir."</string>
@@ -1748,7 +1734,7 @@
     <string name="time_picker_minute_label" msgid="5168864173796598399">"dakika"</string>
     <string name="time_picker_header_text" msgid="143536825321922567">"Saati ayarlayın"</string>
     <string name="time_picker_input_error" msgid="7574999942502513765">"Geçerli bir saat girin"</string>
-    <string name="time_picker_prompt_label" msgid="7588093983899966783">"Zamanı yazın"</string>
+    <string name="time_picker_prompt_label" msgid="7588093983899966783">"Saati yazın"</string>
     <string name="time_picker_text_input_mode_description" msgid="4148166758173708199">"Zaman girişi için metin girişi moduna geçin."</string>
     <string name="time_picker_radial_mode_description" msgid="4953403779779557198">"Zaman girişi için saat moduna geçin."</string>
     <string name="autofill_picker_accessibility_title" msgid="8469043291648711535">"Otomatik doldurma seçenekleri"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM için temel hazırlık yapılmadı"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM\'e izin verilmiyor"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Telefona izin verilmiyor"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Pop-up Pencere"</string>
 </resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 3eb3a37..60193f0 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"б"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"КБ"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"МБ"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"ГБ"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"ТБ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"Пб"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> дн."</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> день <xliff:g id="HOURS">%2$d</xliff:g> год"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> дн. <xliff:g id="HOURS">%2$d</xliff:g> год"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> год"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> год <xliff:g id="MINUTES">%2$d</xliff:g> хв"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> год <xliff:g id="MINUTES">%2$d</xliff:g> хв"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> хв"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> хв"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> хв <xliff:g id="SECONDS">%2$d</xliff:g> с"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> хв <xliff:g id="SECONDS">%2$d</xliff:g> с"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> с"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> с"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Без назви&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Немає номера тел.)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Невідомо"</string>
@@ -97,11 +81,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Немає голосової/екстреної служби"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Тимчасово не пропонується мобільною мережею у вашому місцезнаходженні"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Не вдається під’єднатися до мережі"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Щоб покращити якість сигналу, змініть тип у меню \"Система\" &gt; \"Мережа й Інтернет\" &gt; \"Мобільні мережі\" &gt; \"Тип мережі\"."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Щоб покращити прийняття сигналу, змініть тип у меню \"Налаштування\" &gt; \"Мережа й Інтернет\" &gt; \"Мобільні мережі\" &gt; \"Тип мережі\"."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Виклики через Wi-Fi активовано"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Щоб здійснювати екстрені виклики, потрібне з’єднання з мобільною мережею."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Сповіщення"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Переадресація виклику"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Режим екстреного зворотного виклику"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Сповіщення про мобільне передавання даних"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Статус мобільного передавання даних"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS-повідомлення"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Повідомлення голосової пошти"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Дзвінки через Wi-Fi"</string>
@@ -1080,7 +1066,7 @@
     <string name="anr_application_process" msgid="6417199034861140083">"Додаток <xliff:g id="APPLICATION">%1$s</xliff:g> не відповідає"</string>
     <string name="anr_process" msgid="6156880875555921105">"Процес \"<xliff:g id="PROCESS">%1$s</xliff:g>\" не відповідає"</string>
     <string name="force_close" msgid="8346072094521265605">"OK"</string>
-    <string name="report" msgid="4060218260984795706">"Відгук"</string>
+    <string name="report" msgid="4060218260984795706">"Звіт"</string>
     <string name="wait" msgid="7147118217226317732">"Чекати"</string>
     <string name="webpage_unresponsive" msgid="3272758351138122503">"Сторінка не відповідає.\n\nЗакрити її?"</string>
     <string name="launch_warning_title" msgid="1547997780506713581">"Програму переадресовано"</string>
@@ -1848,4 +1834,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM-карту не затверджено"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM-карта заборонена"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Телефон заборонено"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Спливаюче вікно"</string>
 </resources>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index 06dd427..bfe4a2d 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"بائٹس"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> دن"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> دن <xliff:g id="HOURS">%2$d</xliff:g> گھنٹے"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> دن <xliff:g id="HOURS">%2$d</xliff:g> گھنٹہ"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> گھنٹے"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> گھنٹہ <xliff:g id="MINUTES">%2$d</xliff:g> منٹ"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> گھنٹہ <xliff:g id="MINUTES">%2$d</xliff:g> منٹ"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> منٹ"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> منٹ"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> منٹ <xliff:g id="SECONDS">%2$d</xliff:g> سیکنڈ"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> منٹ <xliff:g id="SECONDS">%2$d</xliff:g> سیکنڈ"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> سیکنڈ"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> سیکنڈ"</string>
     <string name="untitled" msgid="4638956954852782576">"‏‎&gt;‎بلا عنوان‎&lt;‎"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(کوئی فون نمبر نہیں ہے)"</string>
     <string name="unknownName" msgid="6867811765370350269">"نامعلوم"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"کوئی صوتی/ہنگامی سروس نہیں"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"عارضی طور پر آپ کے مقام پر موبائل نیٹ ورک کی طرف سے پیش نہیں ہے"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"نیٹ ورک تک نہیں پہنچا جا سکتا"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"‏ریسپشن کو بہتر بنانے کیلئے، سسٹم ‎&gt; نیٹ ورک اور انٹرنیٹ ‎&gt; موبائل نیٹ ورکس ‎&gt; ترجیحی نیٹ ورک کی قسم تبدیل کرنے کی کوشش کریں۔"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"‏ریسپشن کو بہتر بنانے کیلئے، ترتیبات ‎&gt; نیٹ ورک اور انٹرنیٹ ‎&gt; موبائل نیٹ ورکس ‎&gt; ترجیحی نیٹ ورک کی قسم تبدیل کرنے کی کوشش کریں۔"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"‏Wi-Fi کالنگ فعال ہے"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"ہنگامی کالز کو موبائل نیٹ ورک کی ضرورت ہے۔"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"الرٹس"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"کال آگے منتقل کرنا"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"ہنگامی کال بیک وضع"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"موبائل ڈیٹا الرٹس"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"موبائل ڈیٹا کی صورت حال"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"‏SMS پیغامات"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"صوتی میل پیغامات"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"‏Wi-Fi کالنگ"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"‏SIM فراہم کردہ نہیں ہے"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"‏SIM کی اجازت نہیں ہے"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"فون کی اجازت نہیں ہے"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"پاپ اپ ونڈو"</string>
 </resources>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index 78d1bca..72614b0 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> kun"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> kun <xliff:g id="HOURS">%2$d</xliff:g> soat"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> kun <xliff:g id="HOURS">%2$d</xliff:g> soat"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> soat"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> soat <xliff:g id="MINUTES">%2$d</xliff:g> daq"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> soat <xliff:g id="MINUTES">%2$d</xliff:g> daq"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> daqiqa"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> daqiqa"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> daq <xliff:g id="SECONDS">%2$d</xliff:g> son"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> daq <xliff:g id="SECONDS">%2$d</xliff:g> son"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> soniya"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> soniya"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Nomsiz&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Telefon raqami yo‘q)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Noma’lum"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Ovozli va favqulodda chaqiruvlar ishlamaydi"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Hududingizda mobil tarmoq tomonidan vaqtinchalik taklif etilmayapti"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Tarmoq bilan bog‘lanib bo‘lmadi"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Qabul qilish sifatini yaxshilash uchun Tizim &gt; Tarmoq va Internet &gt; Mobil tarmoqlar > Asosiy tarmoq turi orqali o‘zgartirib ko‘ring."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Qabul qilish sifatini yaxshilash uchun Sozlamalar &gt; Tarmoq va Internet &gt; Mobil tarmoqlar > Asosiy tarmoq turi orqali o‘zgartirib ko‘ring."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi chaqiruv faol"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Favqulodda chaqiruvlar uchun mobil internet zarur."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Ogohlantirishlar"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Chaqiruvlarni uzatish"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Favqulodda qaytarib chaqirish rejimi"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Mobil internetga oid ogohlantirishlar"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Mobil internet holati"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"SMS xabarlar"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Ovozli xabarlar"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi chaqiruv"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM karta yo‘q"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM karta ishlatish taqiqlangan"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Chaqiruvlar taqiqlangan"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Qalqib chiquvchi oyna"</string>
 </resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 767a2f1..cfc2412 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> ngày"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> ngày <xliff:g id="HOURS">%2$d</xliff:g> giờ"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> ngày <xliff:g id="HOURS">%2$d</xliff:g> giờ"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> giờ"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> giờ <xliff:g id="MINUTES">%2$d</xliff:g> phút"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> giờ <xliff:g id="MINUTES">%2$d</xliff:g> phút"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> phút"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> phút"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> phút <xliff:g id="SECONDS">%2$d</xliff:g> giây"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> phút <xliff:g id="SECONDS">%2$d</xliff:g> giây"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> giây"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> giây"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Không có tiêu đề&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Không có số điện thoại nào)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Không xác định"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Không có dịch vụ thoại/khẩn cấp"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Tạm thời không được cung cấp bởi mạng di động tại vị trí của bạn"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Không thể kết nối mạng"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Để cải thiện khả năng thu tín hiệu, hãy thử thay đổi loại mạng được chọn trong Hệ thống &gt; Mạng và Internet &gt; Mạng di động &gt; Loại mạng ưu tiên."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Để cải thiện khả năng thu tín hiệu, hãy thử thay đổi loại mạng được chọn trong Cài đặt &gt; Mạng và Internet &gt; Mạng di động &gt; Loại mạng ưu tiên."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Gọi qua Wi‑Fi đang hoạt động"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Cuộc gọi khẩn cấp yêu cầu có mạng di động."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Thông báo"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Chuyển tiếp cuộc gọi"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Chế độ gọi lại khẩn cấp"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Thông báo dữ liệu di động"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Trạng thái dữ liệu di động"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Tin nhắn SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Thư thoại"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Gọi qua Wi-Fi"</string>
@@ -352,7 +338,7 @@
     <string name="permdesc_persistentActivity" product="tv" msgid="5086862529499103587">"Cho phép ứng dụng làm cho các phần của ứng dụng trở nên ổn định trong bộ nhớ. Việc này có thể hạn chế bộ nhớ đối với các ứng dụng khác đang làm chậm TV."</string>
     <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"Cho phép ứng dụng tạo sự đồng nhất cho các phần của mình trong bộ nhớ. Việc này có thể hạn chế bộ nhớ đối với các ứng dụng khác đang làm chậm điện thoại."</string>
     <string name="permlab_getPackageSize" msgid="7472921768357981986">"đo dung lượng lưu trữ ứng dụng"</string>
-    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Cho phép ứng dụng truy xuất mã, dữ liệu và kích thước bộ nhớ cache của chính ứng dụng"</string>
+    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Cho phép ứng dụng truy xuất mã, dữ liệu và kích thước bộ nhớ đệm của chính ứng dụng"</string>
     <string name="permlab_writeSettings" msgid="2226195290955224730">"sửa đổi cài đặt hệ thống"</string>
     <string name="permdesc_writeSettings" msgid="7775723441558907181">"Cho phép ứng dụng sửa đổi dữ liệu cài đặt của hệ thống. Ứng dụng độc hại có thể làm hỏng cấu hình hệ thống của bạn."</string>
     <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"chạy khi khởi động"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"SIM không được cấp phép"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"SIM không được cho phép"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Điện thoại không được cho phép"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Cửa sổ bật lên"</string>
 </resources>
diff --git a/core/res/res/values-watch/colors_device_defaults.xml b/core/res/res/values-watch/colors_device_defaults.xml
index 15786b4..654e92c 100644
--- a/core/res/res/values-watch/colors_device_defaults.xml
+++ b/core/res/res/values-watch/colors_device_defaults.xml
@@ -17,8 +17,87 @@
 <!-- Colors specific to DeviceDefault themes. These are mostly pass-throughs to enable
      overlaying new theme colors. -->
 <resources>
+
+    <!--
+       primary_device_default_dark
+         > from values/colors_material/primary_material_dark
+         > from values/colors_material/material_grey_900
+         = #ff212121
+         ! replaced with custom color #33ffffff
+    -->
+    <color name="primary_device_default_dark">#33ffffff</color>
+    <!--
+       primary_dark_device_default_dark
+         > from values/colors_material/primary_dark_material_dark
+         = @color/black
+    -->
+    <color name="primary_dark_device_default_dark">@color/black</color>
+    <!--
+       accent_device_default_dark
+         > from values/colors_material/accent_material_dark
+         > from values/colors_material/material_deep_teal_200
+         = #ff80cbc4
+         ! replaced with custom color #5E97F6
+    -->
+    <color name="accent_device_default_dark">#5E97F6</color>
+    <!--
+       background_device_default_dark
+         > from values/colors_material/background_material_dark
+         > from values/colors_material/material_grey_850
+         = #ff303030
+         ! replaced with custom color #232E33
+    -->
+    <color name="background_device_default_dark">#232E33</color>
+    <!--
+       background_floating_device_default_dark
+         > from values/colors_material/background_floating_material_dark
+         > from values/colors_material/material_grey_800
+         = #ff424242
+         ! replaced with custom color #3E5059
+    -->
+    <color name="background_floating_device_default_dark">#3E5059</color>
+
+    <!--
+       background_cache_hint_selector_device_default
+         - note that this is based off of colors/background_cache_hint_selector_device_default
+           xml drawable
+         - uses ?attr/colorBackground and transparency to draw
+         - no color customization required here
+    -->
+
+    <!--
+       button_normal_device_default_dark
+         - uses ?attr/disabledAlpha and button_material_dark to draw
+         - cloned to watch_btn_default.xml drawable
+           (btn_default_material_dark & button_material_dark - see
+           values-watch/colors_material.xml)
+    -->
     <color name="button_normal_device_default_dark">@color/btn_default_material_dark</color>
+
     <!-- Use the same value as for accent_device_default_dark but start with #99,
          i.e. 60% opacity -->
     <color name="accent_device_default_dark_60_percent_opacity">#995E97f6</color>
+
+    <!--
+       foreground_device_default_dark
+         - introduced to avoid coupling to foreground_material_dark
+         - colorForeground typically falls through Theme.DeviceDefault to Theme.Material
+    -->
+    <color name="foreground_device_default_dark">@color/white</color>
+
+    <!--
+       error_color_device_default_dark
+         - introduced to avoid coupling to error_color_material (also #F4511E)
+         - colorError typically falls through Theme.DeviceDefault to Theme.Material
+    -->
+    <color name="error_color_device_default_dark">#F4511E</color>
+
+    <!-- deprecated for Wear
+         these overrides exist only for compatibility with existing
+         WTS theme test heuristics, based on the previous modifications
+         to the material theme, they should not be used for customization
+         as they are not exposed via publicly accessible attributes -->
+    <color name="accent_device_default_700">#5385DB</color>
+    <color name="accent_device_default_light">#75A4F5</color>
+    <color name="accent_device_default_50">#93B7F5</color>
 </resources>
diff --git a/core/res/res/values-watch/colors_material.xml b/core/res/res/values-watch/colors_material.xml
index 72f589b..b19820c 100644
--- a/core/res/res/values-watch/colors_material.xml
+++ b/core/res/res/values-watch/colors_material.xml
@@ -14,15 +14,8 @@
      limitations under the License.
 -->
 <resources>
-    <color name="background_material_dark">#232E33</color>
-    <color name="background_floating_material_dark">#3E5059</color>
 
-    <color name="accent_material_700">#5385DB</color>
-    <color name="accent_material_light">#75A4F5</color>
-    <color name="accent_material_dark">#5E97F6</color>
-    <color name="accent_material_50">#93B7F5</color>
+  <!-- referenced in colors/watch_btn_default.xml selector -->
+  <color name="button_material_dark">#ff919699</color>
 
-    <color name="primary_material_dark">#33ffffff</color>
-
-    <color name="button_material_dark">#ff919699</color>
 </resources>
diff --git a/core/res/res/values-watch/dimens_device_defaults.xml b/core/res/res/values-watch/dimens_device_defaults.xml
new file mode 100644
index 0000000..ac0fcb8
--- /dev/null
+++ b/core/res/res/values-watch/dimens_device_defaults.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources>
+  <!-- Alpha transparency for wigets that set enablement/disablement programmatically
+       transparency is applied in the disabled state -->
+    <dimen name="disabled_alpha_device_default">0.5</dimen>
+  <!-- Alpha transparency applied to elements which are considered primary (e.g. primary text) -->
+    <dimen name="primary_content_alpha_device_default">1.0</dimen>
+  <!-- Alpha transparency applied to elements which are considered secondary (e.g. secondary text) -->
+    <dimen name="secondary_content_alpha_device_default">0.8</dimen>
+</resources>
diff --git a/core/res/res/values-watch/themes_device_defaults.xml b/core/res/res/values-watch/themes_device_defaults.xml
index 4d210f6..f6752c2 100644
--- a/core/res/res/values-watch/themes_device_defaults.xml
+++ b/core/res/res/values-watch/themes_device_defaults.xml
@@ -37,11 +37,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- Variant of {@link #Theme_DeviceDefault} with no action bar -->
@@ -49,11 +54,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- Variant of {@link #Theme_DeviceDefault} with no action bar and no status bar.  This theme
@@ -62,11 +72,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- Variant of {@link #Theme_DeviceDefault} with no action bar and no status bar and
@@ -77,11 +92,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- Variant of {@link #Theme_DeviceDefault} that has no title bar and translucent
@@ -91,11 +111,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- Theme used for the intent picker activity. -->
@@ -134,11 +159,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- DeviceDefault theme for a window that should look like the Settings app.  -->
@@ -156,11 +186,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <style name="Theme.DeviceDefault.Settings.CompactMenu" parent="Theme.Material.CompactMenu">
@@ -168,11 +203,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- Variant of {@link #Theme_DeviceDefault_Dialog} that has a nice minimum width for a
@@ -182,11 +222,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- Variant of {@link #Theme_DeviceDefault_Dialog} without an action bar -->
@@ -195,11 +240,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- Variant of {@link #Theme_DeviceDefault_Dialog_NoActionBar} that has a nice minimum width
@@ -209,11 +259,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
    <!-- DeviceDefault theme for a window that will be displayed either full-screen on smaller
@@ -222,11 +277,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- DeviceDefault theme for a window without an action bar that will be displayed either
@@ -236,11 +296,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- DeviceDefault theme for a presentation window on a secondary display. -->
@@ -248,11 +313,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- DeviceDefault theme for panel windows. This removes all extraneous window
@@ -262,11 +332,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear
@@ -275,11 +350,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear
@@ -288,11 +368,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <!-- DeviceDefault style for input methods, which is used by the
@@ -301,11 +386,16 @@
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <style name="Theme.DeviceDefault.Dialog.Alert" parent="Theme.Material.Dialog.Alert">
@@ -314,22 +404,32 @@
         <!-- Color palette Dialog -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <style name="Theme.DeviceDefault.SearchBar" parent="Theme.Material.SearchBar">
         <!-- Color palette Dark -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">@color/background_device_default_dark</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 
     <style name="Theme.DeviceDefault.Dialog.NoFrame" parent="Theme.Material.Dialog.NoFrame">
@@ -337,10 +437,15 @@
         <!-- Color palette Dialog -->
         <item name="colorPrimary">@color/primary_device_default_dark</item>
         <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item>
+        <item name="colorForeground">@color/foreground_device_default_dark</item>
         <item name="colorAccent">@color/accent_device_default_dark</item>
         <item name="colorBackground">?attr/colorBackgroundFloating</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_dark</item>
         <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_device_default</item>
         <item name="colorButtonNormal">@color/button_normal_device_default_dark</item>
+        <item name="colorError">@color/error_color_device_default_dark</item>
+        <item name="disabledAlpha">@dimen/disabled_alpha_device_default</item>
+        <item name="primaryContentAlpha">@dimen/primary_content_alpha_device_default</item>
+        <item name="secondaryContentAlpha">@dimen/secondary_content_alpha_device_default</item>
     </style>
 </resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index b566f6e..1923b18 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g>天"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g>天<xliff:g id="HOURS">%2$d</xliff:g>小时"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g>天<xliff:g id="HOURS">%2$d</xliff:g>小时"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g>小时"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g>小时<xliff:g id="MINUTES">%2$d</xliff:g>分钟"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g>小时<xliff:g id="MINUTES">%2$d</xliff:g>分钟"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g>分钟"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> 分钟"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g>分钟<xliff:g id="SECONDS">%2$d</xliff:g>秒"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g>分钟<xliff:g id="SECONDS">%2$d</xliff:g>秒"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g>秒"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g>秒"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;未命名&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(无电话号码)"</string>
     <string name="unknownName" msgid="6867811765370350269">"未知"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"无法使用语音通话/紧急呼救服务"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"您所在位置的移动网络暂时不提供这项服务"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"无法连接网络"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"要改善信号情况,请尝试更改在“系统”&gt;“网络和互联网”&gt;“移动网络”&gt;“首选网络类型”中选择的类型。"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"要改善信号情况,请尝试更改在“设置”&gt;“网络和互联网”&gt;“移动网络”&gt;“首选网络类型”中选择的类型。"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"正在进行 WLAN 通话"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"紧急呼救需要使用移动网络。"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"提醒"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"来电转接"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"紧急回拨模式"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"移动数据提醒"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"移动数据状态"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"短信"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"语音邮件"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"WLAN 通话"</string>
@@ -877,7 +863,7 @@
     <string name="preposition_for_year" msgid="5040395640711867177">"年份:<xliff:g id="YEAR">%s</xliff:g>"</string>
     <string name="day" msgid="8144195776058119424">"天"</string>
     <string name="days" msgid="4774547661021344602">"天"</string>
-    <string name="hour" msgid="2126771916426189481">"小时"</string>
+    <string name="hour" msgid="2126771916426189481">"点"</string>
     <string name="hours" msgid="894424005266852993">"小时"</string>
     <string name="minute" msgid="9148878657703769868">"分钟"</string>
     <string name="minutes" msgid="5646001005827034509">"分钟"</string>
@@ -1484,7 +1470,7 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"您已连续 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次画错解锁图案。如果再尝试 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次后仍不成功,系统就会要求您使用自己的电子邮件帐号解锁手机。\n\n请在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒后重试。"</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"删除"</string>
-    <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"要将音量调高到推荐水平以上吗?\n\n长时间保持高音量可能会损伤听力。"</string>
+    <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"要将音量调高到建议的音量以上吗?\n\n长时间保持高音量可能会损伤听力。"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="8404780875025725199">"要使用无障碍快捷方式吗?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="7256507885737444807">"开启快捷方式后,同时按下两个音量按钮 3 秒钟即可启动所设定的无障碍功能。\n\n当前设定的无障碍功能:\n<xliff:g id="SERVICE_NAME">%1$s</xliff:g>\n\n如需更改设定的功能,请依次转到“设置”&gt;“无障碍”。"</string>
     <string name="disable_accessibility_shortcut" msgid="627625354248453445">"关闭快捷方式"</string>
@@ -1744,7 +1730,7 @@
     <string name="app_category_productivity" msgid="3742083261781538852">"办公"</string>
     <string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"设备存储空间"</string>
     <string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"USB 调试"</string>
-    <string name="time_picker_hour_label" msgid="2979075098868106450">"小时"</string>
+    <string name="time_picker_hour_label" msgid="2979075098868106450">"点"</string>
     <string name="time_picker_minute_label" msgid="5168864173796598399">"分钟"</string>
     <string name="time_picker_header_text" msgid="143536825321922567">"设置时间"</string>
     <string name="time_picker_input_error" msgid="7574999942502513765">"请输入有效的时间"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"未配置的 SIM 卡"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"不受允许的 SIM 卡"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"不受允许的手机"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"弹出式窗口"</string>
 </resources>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index c92f7c9..2b2ea49 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> 天"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> 天 <xliff:g id="HOURS">%2$d</xliff:g> 小時"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> 天 <xliff:g id="HOURS">%2$d</xliff:g> 小時"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> 小時"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> 小時 <xliff:g id="MINUTES">%2$d</xliff:g> 分鐘"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> 小時 <xliff:g id="MINUTES">%2$d</xliff:g> 分鐘"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> 分鐘"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> 分鐘"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> 分鐘 <xliff:g id="SECONDS">%2$d</xliff:g> 秒"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> 分鐘 <xliff:g id="SECONDS">%2$d</xliff:g> 秒"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> 秒"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> 秒"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;未命名&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(沒有電話號碼)"</string>
     <string name="unknownName" msgid="6867811765370350269">"不明"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"沒有語音/緊急服務"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"您所在位置的流動網絡暫不提供這項服務"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"無法連接網絡"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"如要改善接收品質,請前往 [系統] &gt; [網絡與互聯網] &gt; [流動網絡] &gt; [偏好的網絡類型],然後變更所選的網絡類型。"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"如要接收更強訊號,請前往 [設定] &gt; [網絡與互聯網] &gt; [流動網絡] &gt; [偏好的網絡類型] 更改網絡類型。"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"正在進行 Wi-Fi 通話"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"撥打緊急電話需要使用流動網絡"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"通知"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"來電轉駁"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"緊急回撥模式"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"流動數據通知"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"流動數據狀態"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"短訊"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"留言訊息"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi 通話"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"無法識別 SIM 卡"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"不允許使用 SIM 卡"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"不允許使用手機"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"彈出式視窗"</string>
 </resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 20732e1..e94fb96 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"位元組"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> 天"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> 天 <xliff:g id="HOURS">%2$d</xliff:g> 小時"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> 天 <xliff:g id="HOURS">%2$d</xliff:g> 小時"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> 小時"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> 小時 <xliff:g id="MINUTES">%2$d</xliff:g> 分鐘"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> 小時 <xliff:g id="MINUTES">%2$d</xliff:g> 分鐘"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> 分鐘"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> 分鐘"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> 分鐘 <xliff:g id="SECONDS">%2$d</xliff:g> 秒"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> 分鐘 <xliff:g id="SECONDS">%2$d</xliff:g> 秒"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> 秒"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> 秒"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;未命名&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(沒有電話號碼)"</string>
     <string name="unknownName" msgid="6867811765370350269">"不明"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"無法使用語音/緊急通話服務"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"你所在位置的行動網路暫時不提供這項服務"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"無法連上網路"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"如要改善收訊狀況,請依序開啟 [系統] &gt; [網路與網際網路] &gt; [行動網路] &gt; [偏好的網路類型],然後選取其他網路類型。"</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"如要改善收訊狀況,請依序開啟 [設定] &gt; [網路與網際網路] &gt; [行動網路] &gt; [偏好的網路類型],然後選取其他網路類型。"</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Wi‑Fi 通話正在進行中"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"撥打緊急電話需要使用行動網路"</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"快訊"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"來電轉接"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"緊急回撥模式"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"行動數據快訊"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"行動數據狀態"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"簡訊"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"語音留言"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi 通話"</string>
@@ -877,7 +863,7 @@
     <string name="preposition_for_year" msgid="5040395640711867177">"於 <xliff:g id="YEAR">%s</xliff:g> 年"</string>
     <string name="day" msgid="8144195776058119424">"天"</string>
     <string name="days" msgid="4774547661021344602">"天"</string>
-    <string name="hour" msgid="2126771916426189481">"小時"</string>
+    <string name="hour" msgid="2126771916426189481">"點"</string>
     <string name="hours" msgid="894424005266852993">"小時"</string>
     <string name="minute" msgid="9148878657703769868">"分鐘"</string>
     <string name="minutes" msgid="5646001005827034509">"分鐘"</string>
@@ -1744,7 +1730,7 @@
     <string name="app_category_productivity" msgid="3742083261781538852">"生產應用"</string>
     <string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"裝置儲存空間"</string>
     <string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"USB 偵錯"</string>
-    <string name="time_picker_hour_label" msgid="2979075098868106450">"小時"</string>
+    <string name="time_picker_hour_label" msgid="2979075098868106450">"點"</string>
     <string name="time_picker_minute_label" msgid="5168864173796598399">"分鐘"</string>
     <string name="time_picker_header_text" msgid="143536825321922567">"設定時間"</string>
     <string name="time_picker_input_error" msgid="7574999942502513765">"請輸入有效的時間"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"未佈建的 SIM 卡"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"不受允許的 SIM 卡"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"不受允許的手機"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"彈出式視窗"</string>
 </resources>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 62c8bb3..57039f8 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -21,24 +21,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="7542884022844556968">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="8897567456150907538">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="durationDays" msgid="6652371460511178259">"<xliff:g id="DAYS">%1$d</xliff:g> izinsuku"</string>
-    <string name="durationDayHours" msgid="2713107458736744435">"<xliff:g id="DAYS">%1$d</xliff:g> usuku <xliff:g id="HOURS">%2$d</xliff:g> amahora"</string>
-    <string name="durationDayHour" msgid="7293789639090958917">"<xliff:g id="DAYS">%1$d</xliff:g> usuku <xliff:g id="HOURS">%2$d</xliff:g> ihora"</string>
-    <string name="durationHours" msgid="4266858287167358988">"<xliff:g id="HOURS">%1$d</xliff:g> amahora"</string>
-    <string name="durationHourMinutes" msgid="9029176248692041549">"<xliff:g id="HOURS">%1$d</xliff:g> ihora <xliff:g id="MINUTES">%2$d</xliff:g> amaminithi"</string>
-    <string name="durationHourMinute" msgid="2741677355177402539">"<xliff:g id="HOURS">%1$d</xliff:g> ihora <xliff:g id="MINUTES">%2$d</xliff:g> iminithi"</string>
-    <string name="durationMinutes" msgid="3134226679883579347">"<xliff:g id="MINUTES">%1$d</xliff:g> amaminithi"</string>
-    <string name="durationMinute" msgid="7155301744174623818">"<xliff:g id="MINUTES">%1$d</xliff:g> iminithi"</string>
-    <string name="durationMinuteSeconds" msgid="1424656185379003751">"<xliff:g id="MINUTES">%1$d</xliff:g> iminithi <xliff:g id="SECONDS">%2$d</xliff:g> amasekhondi"</string>
-    <string name="durationMinuteSecond" msgid="3989228718067466680">"<xliff:g id="MINUTES">%1$d</xliff:g> iminithi <xliff:g id="SECONDS">%2$d</xliff:g> isekhondi"</string>
-    <string name="durationSeconds" msgid="8050088505238241405">"<xliff:g id="SECONDS">%1$d</xliff:g> amasekhondi"</string>
-    <string name="durationSecond" msgid="985669622276420331">"<xliff:g id="SECONDS">%1$d</xliff:g> isekhondi"</string>
     <string name="untitled" msgid="4638956954852782576">"&lt;Akunasihloko&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Ayikho inombolo yefoni)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Akwaziwa"</string>
@@ -95,11 +79,13 @@
     <string name="RestrictedOnAllVoiceTitle" msgid="158800171499150681">"Ayikho isevisi yezwi/yesimo esiphuthumayo"</string>
     <string name="RestrictedStateContent" msgid="4278821484643362350">"Okwesikhashana akunikezwa inethiwekhi yeselula endaweni yakho"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="4008877505368566980">"Ayikwazi ukufinyelela inethiwekhi"</string>
-    <string name="NetworkPreferenceSwitchSummary" msgid="4164230263214915351">"Ukuze kuthuthukiswe ukwamukelwa, zama ukushintsha uhlobo olukhethiwe kusistimu &gt; Inethiwekhi ne-inthanethi &gt; amanethiwekhi eselula &gt; uhlobo oluncanyelwayo lwenethiwekhi."</string>
+    <string name="NetworkPreferenceSwitchSummary" msgid="1203771446683319957">"Ukuze uthuthukise ukwamukelwa, zama ukushintsha uhlobo olukhethiwe kuzilungiselelo &gt; Inethiwekhi ne-inthanethi &gt; amanethiwekhi eselula &gt; Uhlobo oluncanyelwayo lwenethiwekhi."</string>
+    <string name="EmergencyCallWarningTitle" msgid="4790413876281901612">"Ukushaya kwe-Wi-Fi kuyasebenza"</string>
+    <string name="EmergencyCallWarningSummary" msgid="8973232888021643293">"Amakholi aphuthumayo adinga inethiwekhi yeselula."</string>
     <string name="notification_channel_network_alert" msgid="4427736684338074967">"Izexwayiso"</string>
     <string name="notification_channel_call_forward" msgid="2419697808481833249">"Ukudlulisa ikholi"</string>
     <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Imodi yokushayela yesimo esiphuthumayo"</string>
-    <string name="notification_channel_mobile_data_alert" msgid="6130875231721406231">"Izexwayiso zedatha yeselula"</string>
+    <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Isimo sedatha yeselula"</string>
     <string name="notification_channel_sms" msgid="3441746047346135073">"Imilayezo ye-SMS"</string>
     <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Imilayezo yevoyisimeyili"</string>
     <string name="notification_channel_wfc" msgid="2130802501654254801">"Ukushaya kwe-Wi-Fi"</string>
@@ -1780,4 +1766,5 @@
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6321202257374418726">"I-SIM ayinikezelwe"</string>
     <string name="mmcc_illegal_ms" msgid="2769452751852211112">"I-SIM ayivunyelwe"</string>
     <string name="mmcc_illegal_me" msgid="4438696681169345015">"Ifoni ayivunyelwe"</string>
+    <string name="popup_window_default_title" msgid="4874318849712115433">"Iwindi lesigelekeqe"</string>
 </resources>
diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml
index 5baf985..733878b 100644
--- a/core/res/res/values/arrays.xml
+++ b/core/res/res/values/arrays.xml
@@ -22,68 +22,39 @@
     <!-- Do not translate. These are all of the drawable resources that should be preloaded by
          the zygote process before it starts forking application processes. -->
     <array name="preloaded_drawables">
-        <item>@drawable/ab_share_pack_material</item>
-        <item>@drawable/ab_solid_shadow_material</item>
         <item>@drawable/action_bar_item_background_material</item>
         <item>@drawable/activated_background_material</item>
         <item>@drawable/btn_borderless_material</item>
         <item>@drawable/btn_check_material_anim</item>
         <item>@drawable/btn_colored_material</item>
         <item>@drawable/btn_default_material</item>
-        <item>@drawable/btn_group_holo_dark</item>
-        <item>@drawable/btn_group_holo_light</item>
         <item>@drawable/btn_radio_material_anim</item>
-        <item>@drawable/btn_star_material</item>
         <item>@drawable/btn_toggle_material</item>
-        <item>@drawable/button_inset</item>
-        <item>@drawable/cab_background_bottom_material</item>
-        <item>@drawable/cab_background_top_material</item>
         <item>@drawable/control_background_32dp_material</item>
         <item>@drawable/control_background_40dp_material</item>
         <item>@drawable/dialog_background_material</item>
-        <item>@drawable/editbox_dropdown_background_dark</item>
-        <item>@drawable/edit_text_material</item>
-        <item>@drawable/expander_group_material</item>
         <item>@drawable/fastscroll_label_left_material</item>
         <item>@drawable/fastscroll_label_right_material</item>
         <item>@drawable/fastscroll_thumb_material</item>
         <item>@drawable/fastscroll_track_material</item>
         <item>@drawable/floating_popup_background_dark</item>
         <item>@drawable/floating_popup_background_light</item>
-        <item>@drawable/gallery_item_background</item>
         <item>@drawable/ic_ab_back_material</item>
         <item>@drawable/ic_ab_back_material_dark</item>
         <item>@drawable/ic_ab_back_material_light</item>
         <item>@drawable/ic_account_circle</item>
         <item>@drawable/ic_arrow_drop_right_black_24dp</item>
-        <item>@drawable/ic_clear</item>
-        <item>@drawable/ic_clear_disabled</item>
         <item>@drawable/ic_clear_material</item>
-        <item>@drawable/ic_clear_normal</item>
-        <item>@drawable/ic_commit_search_api_material</item>
         <item>@drawable/ic_dialog_alert_material</item>
-        <item>@drawable/ic_find_next_material</item>
-        <item>@drawable/ic_find_previous_material</item>
-        <item>@drawable/ic_go</item>
         <item>@drawable/ic_go_search_api_material</item>
-        <item>@drawable/ic_media_route_connecting_material_dark</item>
-        <item>@drawable/ic_media_route_connecting_material_light</item>
-        <item>@drawable/ic_media_route_material_dark</item>
-        <item>@drawable/ic_media_route_material_light</item>
-        <item>@drawable/ic_menu_close_clear_cancel</item>
         <item>@drawable/ic_menu_copy_material</item>
         <item>@drawable/ic_menu_cut_material</item>
-        <item>@drawable/ic_menu_find_material</item>
-        <item>@drawable/ic_menu_more</item>
         <item>@drawable/ic_menu_moreoverflow_material</item>
         <item>@drawable/ic_menu_paste_material</item>
-        <item>@drawable/ic_menu_search_material</item>
         <item>@drawable/ic_menu_selectall_material</item>
         <item>@drawable/ic_menu_share_material</item>
         <item>@drawable/ic_search_api_material</item>
         <item>@drawable/ic_voice_search_api_material</item>
-        <item>@drawable/indicator_check_mark_dark</item>
-        <item>@drawable/indicator_check_mark_light</item>
         <item>@drawable/item_background_borderless_material</item>
         <item>@drawable/item_background_borderless_material_dark</item>
         <item>@drawable/item_background_borderless_material_light</item>
@@ -92,30 +63,15 @@
         <item>@drawable/item_background_material_light</item>
         <item>@drawable/list_choice_background_material</item>
         <item>@drawable/list_divider_material</item>
-        <item>@drawable/list_section_divider_material</item>
-        <item>@drawable/menu_background_fill_parent_width</item>
         <item>@drawable/notification_material_action_background</item>
         <item>@drawable/notification_material_media_action_background</item>
         <item>@drawable/number_picker_divider_material</item>
         <item>@drawable/popup_background_material</item>
-        <item>@drawable/popup_inline_error_above_holo_dark</item>
-        <item>@drawable/popup_inline_error_above_holo_light</item>
-        <item>@drawable/popup_inline_error_holo_dark</item>
-        <item>@drawable/popup_inline_error_holo_light</item>
         <item>@drawable/progress_horizontal_material</item>
         <item>@drawable/progress_indeterminate_horizontal_material</item>
         <item>@drawable/progress_large_material</item>
         <item>@drawable/progress_medium_material</item>
         <item>@drawable/progress_small_material</item>
-        <item>@drawable/quickcontact_badge_overlay_dark</item>
-        <item>@drawable/quickcontact_badge_overlay_light</item>
-        <item>@drawable/quickcontact_badge_overlay_normal_dark</item>
-        <item>@drawable/quickcontact_badge_overlay_normal_light</item>
-        <item>@drawable/quickcontact_badge_overlay_pressed_dark</item>
-        <item>@drawable/quickcontact_badge_overlay_pressed_light</item>
-        <item>@drawable/ratingbar_indicator_material</item>
-        <item>@drawable/ratingbar_material</item>
-        <item>@drawable/ratingbar_small_material</item>
         <item>@drawable/screen_background_dark</item>
         <item>@drawable/screen_background_dark_transparent</item>
         <item>@drawable/screen_background_light</item>
@@ -127,17 +83,9 @@
         <item>@drawable/seekbar_tick_mark_material</item>
         <item>@drawable/seekbar_track_material</item>
         <item>@drawable/spinner_background_material</item>
-        <item>@drawable/spinner_textfield_background_material</item>
-        <item>@drawable/switch_thumb_material_anim</item>
         <item>@drawable/switch_track_material</item>
         <item>@drawable/tab_indicator_material</item>
         <item>@drawable/text_cursor_material</item>
-        <item>@drawable/text_edit_paste_window</item>
-        <item>@drawable/textfield_search_material</item>
-        <item>@drawable/text_select_handle_left_material</item>
-        <item>@drawable/text_select_handle_middle_material</item>
-        <item>@drawable/text_select_handle_right_material</item>
-        <item>@drawable/toast_frame</item>
     </array>
 
     <!-- Do not translate. These are all of the color state list resources that should be
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index dd840b0..35eb9cd 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -69,6 +69,9 @@
         <!-- Max height of the autofill data set picker as a fraction of the screen height -->
         <attr name="autofillDatasetPickerMaxHeight" format="reference" />
 
+        <!-- Max height of the the autofill save custom subtitle as a fraction of the screen width/height -->
+        <attr name="autofillSaveCustomSubtitleMaxHeight" format="reference" />
+
         <!-- Default disabled alpha for widgets that set enabled/disabled alpha programmatically. -->
         <attr name="disabledAlpha" format="float" />
         <!-- The alpha applied to the foreground color to create the primary text color. -->
@@ -1888,6 +1891,7 @@
         <enum name="KEYCODE_SYSTEM_NAVIGATION_DOWN" value="281" />
         <enum name="KEYCODE_SYSTEM_NAVIGATION_LEFT" value="282" />
         <enum name="KEYCODE_SYSTEM_NAVIGATION_RIGHT" value="283" />
+        <enum name="KEYCODE_ALL_APPS" value="284" />
     </attr>
 
     <!-- ***************************************************************** -->
@@ -2052,6 +2056,14 @@
              Corresponds to {@link android.view.Window#setNavigationBarColor(int)}. -->
         <attr name="navigationBarColor" format="color" />
 
+        <!-- Shows a thin line of the specified color between the navigation bar and the app
+             content.
+             <p>For this to take effect, the window must be drawing the system bar backgrounds with
+             {@link android.R.attr#windowDrawsSystemBarBackgrounds} and the navigation bar must not
+             have been requested to be translucent with
+             {@link android.R.attr#windowTranslucentNavigation}. -->
+        <attr name="navigationBarDividerColor" format="color" />
+
         <!-- The duration, in milliseconds, of the window background fade duration
              when transitioning into or away from an Activity when called with an
              Activity Transition. Corresponds to
@@ -2084,6 +2096,48 @@
              {@link android.R.attr#windowBackground}.
              -->
         <attr name="windowSplashscreenContent" format="reference" />
+
+        <!-- If set, the navigation bar will be drawn such that it is
+             compatible with a light navigation bar background.
+             <p>For this to take effect, the window must be drawing the system bar backgrounds with
+             {@link android.R.attr#windowDrawsSystemBarBackgrounds} and the navigation bar must not
+             have been requested to be translucent with
+             {@link android.R.attr#windowTranslucentNavigation}.
+             Corresponds to setting {@link android.view.View#SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR} on
+             the decor view. -->
+         <attr name="windowLightNavigationBar" format="boolean" />
+
+        <!-- Controls how the window is laid out if there is a {@code DisplayCutout}.
+        <p>
+        Defaults to {@code default}.
+        -->
+        <attr name="windowLayoutInDisplayCutoutMode">
+            <!-- <p>
+            The window is allowed to extend into the <code>DisplayCutout</code> area, only if
+            the <code>DisplayCutout</code> is fully contained within a system bar. Otherwise, the
+            window is laid out such that it does not overlap with the <code>DisplayCutout</code>
+            area.
+            -->
+            <enum name="default" value="0" />
+            <!-- <p>
+            The window is always allowed to extend into the <code>DisplayCutout</code> areas on the
+            short edges of the screen even if fullscreen or in landscape.
+            The window will never extend into a <code>DisplayCutout</code> area on the long edges of
+            the screen.
+            <p>
+            The window must make sure that no important content overlaps with the
+            <code>DisplayCutout</code>.
+            -->
+            <enum name="shortEdges" value="1" />
+            <!-- <p>
+            The window is never allowed to overlap with the <code>DisplayCutout</code> area.
+            <p>
+            This should be used with windows that transiently set
+            <code>SYSTEM_UI_FLAG_FULLSCREEN</code> to avoid a relayout of the window when the
+            flag is set or cleared.
+            -->
+            <enum name="never" value="2" />
+        </attr>
     </declare-styleable>
 
     <!-- The set of attributes that describe a AlertDialog's theme. -->
@@ -3620,7 +3674,7 @@
     </declare-styleable>
 
     <!-- Specify one or more <code>t3tPmm-filter</code> elements inside a
-         <code>host-nfcf-service</code> element to specify a LF_T3T_PMM -->
+         <code>host-nfcf-service</code> element to specify a LF_T3T_PMM. -->
     <declare-styleable name="T3tPmmFilter">
         <attr name="name" />
 
@@ -4496,7 +4550,7 @@
         <attr name="maxHeight" />
         <!-- Makes the TextView be exactly this many lines tall. -->
         <attr name="lines" format="integer" min="0" />
-        <!-- Makes the TextView be exactly this many pixels tall.
+        <!-- Makes the TextView be exactly this tall.
              You could get the same effect by specifying this number in the
              layout parameters. -->
         <attr name="height" format="dimension" />
@@ -4513,7 +4567,7 @@
         <attr name="maxWidth" />
         <!-- Makes the TextView be exactly this many ems wide. -->
         <attr name="ems" format="integer" min="0" />
-        <!-- Makes the TextView be exactly this many pixels wide.
+        <!-- Makes the TextView be exactly this wide.
              You could get the same effect by specifying this number in the
              layout parameters. -->
         <attr name="width" format="dimension" />
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index ced22cc..8aff3b6 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -242,9 +242,9 @@
         <!-- Additional flag from base permission type: this permission can be automatically
             granted to the setup wizard app -->
         <flag name="setup" value="0x800" />
-        <!-- Additional flag from base permission type: this permission can be granted to ephemeral
+        <!-- Additional flag from base permission type: this permission can be granted to instant
              apps -->
-        <flag name="ephemeral" value="0x1000" />
+        <flag name="instant" value="0x1000" />
         <!-- Additional flag from base permission type: this permission can only be granted to apps
              that target runtime permissions ({@link android.os.Build.VERSION_CODES#M} and above)
              -->
@@ -561,6 +561,35 @@
          to be set for all windows of this activity -->
     <attr name="showForAllUsers" format="boolean" />
 
+    <!-- Specifies whether an {@link android.app.Activity} should be shown on top of the the lock screen
+         whenever the lockscreen is up and the activity is resumed. Normally an activity will be
+         transitioned to the stopped state if it is started while the lockscreen is up, but with
+         this flag set the activity will remain in the resumed state visible on-top of the lock
+         screen.
+
+         <p>This should be used instead of {@link android.view.WindowManager.LayoutParams#FLAG_SHOW_WHEN_LOCKED}
+         flag set for Windows. When using the Window flag during activity startup, there may not be
+         time to add it before the system stops your activity for being behind the lock-screen.
+         This leads to a double life-cycle as it is then restarted.</p> -->
+    <attr name="showWhenLocked" format="boolean" />
+
+    <!-- Specifies whether the screen should be turned on when the {@link android.app.Activity} is resumed.
+         Normally an activity will be transitioned to the stopped state if it is started while the
+         screen if off, but with this flag set the activity will cause the screen to turn on if the
+         activity will be visible and resumed due to the screen coming on. The screen will not be
+         turned on if the activity won't be visible after the screen is turned on. This flag is
+         normally used in conjunction with the {@link android.R.attr#showWhenLocked} flag to make
+         sure the activity is visible after the screen is turned on when the lockscreen is up. In
+         addition, if this flag is set and the activity calls
+         {@link android.app.KeyguardManager#requestDismissKeyguard}
+         the screen will turn on.
+
+         <p>This should be used instead of {@link android.view.WindowManager.LayoutParams#FLAG_TURN_SCREEN_ON}
+         flag set for Windows. When using the Window flag during activity startup, there may not be
+         time to add it before the system stops your activity because the screen has not yet turned
+         on. This leads to a double life-cycle as it is then restarted.</p> -->
+    <attr name="turnScreenOn" format="boolean" />
+
     <!-- Specify the authorities under which this content provider can be
          found.  Multiple authorities may be supplied by separating them
          with a semicolon.  Authority names should use a Java-style naming
@@ -1022,6 +1051,22 @@
          <p>The default value of this attribute is <code>false</code>. -->
     <attr name="isolatedSplits" format="boolean" />
 
+    <!-- The classname of the classloader used to load the application's classes
+         from its APK. The APK in question can either be the 'base' APK or any
+         of the application's 'split' APKs if it's using a feature split.
+
+         <p>
+         The supported values for this attribute are
+         <code>dalvik.system.PathClassLoader</code> and
+         <code>dalvik.system.DelegateLastClassLoader</code>. If unspecified,
+         the default value of this attribute is <code>dalvik.system.PathClassLoader</code>.
+
+         If an unknown classloader is provided, a PackageParserException with cause
+         <code>PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED</code> will be
+         thrown and the app will not be installed.
+         -->
+    <attr name="classLoader" format="string" />
+
     <!-- If set to <code>true</code>, indicates to the platform that this APK is
          a 'feature' split and that it implicitly depends on the base APK. This distinguishes
          this split APK from a 'configuration' split, which provides resource overrides
@@ -1456,6 +1501,9 @@
             <enum name="productivity" value="7" />
         </attr>
 
+        <!-- Declares the kind of classloader this application's classes must be loaded with -->
+        <attr name="classLoader" />
+
     </declare-styleable>
     <!-- The <code>permission</code> tag declares a security permission that can be
          used to control access from other packages to specific components or
@@ -1731,6 +1779,11 @@
          the library at build time while it offers apps to share code defined in such
          libraries. Hence, static libraries are strictly required.
 
+         <p>On devices running O MR1 or higher, if the library is singed with multiple
+         signing certificates you must to specify the SHA-256 hashes of the additional
+         certificates via adding
+         {@link #AndroidManifestAdditionalCertificate additional-certificate} tags.
+
          <p>This appears as a child tag of the
          {@link #AndroidManifestApplication application} tag. -->
     <declare-styleable name="AndroidManifestUsesStaticLibrary" parent="AndroidManifestApplication">
@@ -1742,6 +1795,17 @@
         <attr name="certDigest" format="string" />
     </declare-styleable>
 
+    <!-- The <code>additional-certificate</code> specifies the SHA-256 digest of a static
+         shared library's additional signing certificate. You need to use this tag if the
+         library is singed with more than one certificate.
+
+         <p>This appears as a child tag of the
+         {@link #AndroidManifestUsesStaticLibrary uses-static-library} tag. -->
+    <declare-styleable name="AndroidManifestAdditionalCertificate" parent="AndroidManifestUsesStaticLibrary">
+        <!-- The SHA-256 digest of the library signing certificate. -->
+        <attr name="certDigest" />
+    </declare-styleable>
+
     <!-- The <code>supports-screens</code> specifies the screen dimensions an
          application supports.  By default a modern application supports all
          screen sizes and must explicitly disable certain screen sizes here;
@@ -2093,6 +2157,10 @@
         <attr name="maxAspectRatio" />
         <attr name="lockTaskMode" />
         <attr name="showForAllUsers" />
+
+        <attr name="showWhenLocked" />
+        <attr name="turnScreenOn" />
+
         <attr name="directBootAware" />
         <!-- @hide This activity is always focusable regardless of if it is in a task/stack whose
              activities are normally not focusable.
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 536906c..fd78500 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -167,7 +167,7 @@
     <color name="user_icon_default_white">#ffffffff</color><!-- white -->
 
     <!-- Default profile badge colors -->
-    <color name="profile_badge_1">#ffff5722</color><!-- Orange -->
+    <color name="profile_badge_1">#ffff6d00</color><!-- Orange -->
     <color name="profile_badge_2">#ff000000</color><!-- Black -->
     <color name="profile_badge_3">#ff22f033</color><!-- Green -->
 
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 8059fe0..c0a663e 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -44,7 +44,11 @@
         <item><xliff:g id="id">@string/status_bar_zen</xliff:g></item>
         <item><xliff:g id="id">@string/status_bar_mute</xliff:g></item>
         <item><xliff:g id="id">@string/status_bar_volume</xliff:g></item>
+        <item><xliff:g id="id">@string/status_bar_vpn</xliff:g></item>
+        <item><xliff:g id="id">@string/status_bar_ethernet</xliff:g></item>
         <item><xliff:g id="id">@string/status_bar_wifi</xliff:g></item>
+        <item><xliff:g id="id">@string/status_bar_mobile</xliff:g></item>
+        <item><xliff:g id="id">@string/status_bar_airplane</xliff:g></item>
         <item><xliff:g id="id">@string/status_bar_cdma_eri</xliff:g></item>
         <item><xliff:g id="id">@string/status_bar_data_connection</xliff:g></item>
         <item><xliff:g id="id">@string/status_bar_phone_evdo_signal</xliff:g></item>
@@ -81,6 +85,10 @@
     <string translatable="false" name="status_bar_alarm_clock">alarm_clock</string>
     <string translatable="false" name="status_bar_secure">secure</string>
     <string translatable="false" name="status_bar_clock">clock</string>
+    <string translatable="false" name="status_bar_mobile">mobile</string>
+    <string translatable="false" name="status_bar_vpn">vpn</string>
+    <string translatable="false" name="status_bar_ethernet">ethernet</string>
+    <string translatable="false" name="status_bar_airplane">airplane</string>
 
     <!-- Flag indicating whether the surface flinger has limited
          alpha compositing functionality in hardware.  If set, the window
@@ -147,6 +155,11 @@
          fading edges is prohibitively expensive on most GPUs. -->
     <bool name="config_ui_enableFadingMarquee">false</bool>
 
+    <!-- Enables or disables haptic effect when the text insertion/selection handle is moved
+         manually by the user. Off by default, since the expected haptic feedback may not be
+         available on some devices. -->
+    <bool name="config_enableHapticTextHandle">false</bool>
+
     <!-- Whether dialogs should close automatically when the user touches outside
          of them.  This should not normally be modified. -->
     <bool name="config_closeDialogWhenTouchOutside">true</bool>
@@ -411,15 +424,45 @@
      -->
     <integer translatable="false" name="config_wifi_wakeup_available">0</integer>
 
-    <!-- Array of ConnectivityManager.TYPE_xxxx values allowable for tethering -->
-    <!-- Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or
-    <!== [0,1,5,7] for TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI and TYPE_BLUETOOTH -->
+    <!-- Array of ConnectivityManager.TYPE_xxxx values allowable for tethering.
+
+         Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or
+         [1,7,0] for TYPE_WIFI, TYPE_BLUETOOTH, and TYPE_MOBILE.
+
+         This list is also modified by code within the framework, including:
+
+             - TYPE_ETHERNET (9) is prepended to this list, and
+
+             - the return value of TelephonyManager.getTetherApnRequired()
+               determines how the array is further modified:
+
+                   * DUN_REQUIRED
+                     TYPE_MOBILE is removed (if present)
+                     TYPE_MOBILE_HIPRI is removed (if present)
+                     TYPE_MOBILE_DUN is appended (if not already present)
+
+                   * DUN_NOT_REQUIRED
+                     TYPE_MOBILE_DUN is removed (if present)
+                     TYPE_MOBILE is appended (if not already present)
+                     TYPE_MOBILE_HIPRI is appended (if not already present)
+
+                   * DUN_UNSPECIFIED
+                     if any of TYPE_MOBILE{,_DUN,_HIPRI} are present:
+                         change nothing
+                     else:
+                         TYPE_MOBILE is appended
+                         TYPE_MOBILE_HIPRI is appended
+
+         For other changes applied to this list, now and in the future, see
+         com.android.server.connectivity.tethering.TetheringConfiguration.
+
+         Note also: the order of this is important. The first upstream type
+         for which a satisfying network exists is used.
+      -->
     <integer-array translatable="false" name="config_tether_upstream_types">
-        <item>0</item>
         <item>1</item>
-        <item>5</item>
         <item>7</item>
-        <item>9</item>
+        <item>0</item>
     </integer-array>
 
     <!-- If the DUN connection for this CDMA device supports more than just DUN -->
@@ -496,15 +539,18 @@
     <!-- Integer parameters of the wifi to cellular handover feature
          wifi should not stick to bad networks -->
     <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz">-82</integer>
+    <integer translatable="false" name="config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz">-82</integer>
     <integer translatable="false" name="config_wifi_framework_wifi_score_low_rssi_threshold_5GHz">-70</integer>
     <integer translatable="false" name="config_wifi_framework_wifi_score_good_rssi_threshold_5GHz">-57</integer>
     <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz">-85</integer>
+    <integer translatable="false" name="config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz">-85</integer>
     <integer translatable="false" name="config_wifi_framework_wifi_score_low_rssi_threshold_24GHz">-73</integer>
     <integer translatable="false" name="config_wifi_framework_wifi_score_good_rssi_threshold_24GHz">-60</integer>
     <integer translatable="false" name="config_wifi_framework_wifi_score_bad_link_speed_24">6</integer>
     <integer translatable="false" name="config_wifi_framework_wifi_score_bad_link_speed_5">12</integer>
     <integer translatable="false" name="config_wifi_framework_wifi_score_good_link_speed_24">24</integer>
     <integer translatable="false" name="config_wifi_framework_wifi_score_good_link_speed_5">36</integer>
+
     <string  translatable="false" name="config_wifi_random_mac_oui">DA-A1-19</string>
     <string  translatable="false" name="config_wifi_framework_sap_2G_channel_list">1,6,11</string>
 
@@ -591,10 +637,10 @@
     <bool name="config_automatic_brightness_available">false</bool>
 
     <!-- Fast brightness animation ramp rate in brightness units per second-->
-    <integer translatable="false" name="config_brightness_ramp_rate_fast">200</integer>
+    <integer translatable="false" name="config_brightness_ramp_rate_fast">180</integer>
 
     <!-- Slow brightness animation ramp rate in brightness units per second-->
-    <integer translatable="false" name="config_brightness_ramp_rate_slow">40</integer>
+    <integer translatable="false" name="config_brightness_ramp_rate_slow">60</integer>
 
     <!-- Don't name config resources like this.  It should look like config_annoyDianne -->
     <bool name="config_annoy_dianne">true</bool>
@@ -1082,6 +1128,11 @@
     <!-- Is the lock-screen disabled for new users by default -->
     <bool name="config_disableLockscreenByDefault">false</bool>
 
+    <!-- If true, enables verification of the lockscreen credential in the factory reset protection
+        flow. This should be true if gatekeeper / weaver credentials can still be checked after a
+        factory reset. -->
+    <bool name="config_enableCredentialFactoryResetProtection">true</bool>
+
     <!-- Control the behavior when the user long presses the home button.
             0 - Nothing
             1 - Launch all apps intent
@@ -1306,6 +1357,49 @@
     <!-- True if WallpaperService is enabled -->
     <bool name="config_enableWallpaperService">true</bool>
 
+    <!-- Enables the TimeZoneRuleManager service. This is the master switch for the updateable time
+         zone update mechanism. -->
+    <bool name="config_enableUpdateableTimeZoneRules">false</bool>
+
+    <!-- Enables APK-based time zone update triggering. Set this to false when updates are triggered
+         via external events and not by APK updates. For example, if an updater checks with a server
+         on a regular schedule.
+         [This is only used if config_enableUpdateableTimeZoneRules is true.] -->
+    <bool name="config_timeZoneRulesUpdateTrackingEnabled">false</bool>
+
+    <!-- The package of the time zone rules updater application. Expected to be the same
+         for all Android devices that support APK-based time zone rule updates.
+         A package-targeted com.android.intent.action.timezone.TRIGGER_RULES_UPDATE_CHECK intent
+         will be sent to the updater app if the system server detects an update to the updater or
+         data app packages.
+         The package referenced here must have the android.permission.UPDATE_TIME_ZONE_RULES
+         permission.
+         [This is only used if config_enableUpdateableTimeZoneRules and
+         config_timeZoneRulesUpdateTrackingEnabled are true.] -->
+    <string name="config_timeZoneRulesUpdaterPackage" translateable="false">com.android.timezone.updater</string>
+
+    <!-- The package of the time zone rules data application. Expected to be configured
+         by OEMs to reference their own priv-app APK package.
+         A package-targeted com.android.intent.action.timezone.TRIGGER_RULES_UPDATE_CHECK intent
+         will be sent to the updater app if the system server detects an update to the updater or
+         data app packages.
+         [This is only used if config_enableUpdateableTimeZoneRules and
+         config_timeZoneRulesUpdateTrackingEnabled are true.] -->
+    <string name="config_timeZoneRulesDataPackage" translateable="false"></string>
+
+    <!-- The allowed time in milliseconds between an update check intent being broadcast and the
+         response being considered overdue. Reliability triggers will not fire in this time.
+         [This is only used if config_enableUpdateableTimeZoneRules and
+         config_timeZoneRulesUpdateTrackingEnabled are true.] -->
+    <!-- 5 minutes -->
+    <integer name="config_timeZoneRulesCheckTimeMillisAllowed">300000</integer>
+
+    <!-- The number of times a time zone update check is allowed to fail before the system will stop
+         reacting to reliability triggers.
+         [This is only used if config_enableUpdateableTimeZoneRules and
+         config_timeZoneRulesUpdateTrackingEnabled are true.] -->
+    <integer name="config_timeZoneRulesCheckRetryCount">5</integer>
+
     <!-- Whether to enable network location overlay which allows network
          location provider to be replaced by an app at run-time. When disabled,
          only the config_networkLocationProviderPackageName package will be
@@ -1337,6 +1431,7 @@
     <!-- The package name of the default network recommendation app.
          A network recommendation provider must:
              * Be granted the SCORE_NETWORKS permission.
+             * Be granted the ACCESS_COARSE_LOCATION permission.
              * Include a Service for the android.net.scoring.RECOMMEND_NETWORKS action
                protected by the BIND_NETWORK_RECOMMENDATION_SERVICE permission.
 
@@ -1622,6 +1717,10 @@
          The size of the WAL file is also constrained by 'db_journal_size_limit'. -->
     <integer name="db_wal_autocheckpoint">100</integer>
 
+    <!-- The number of milliseconds that SQLite connection is allowed to be idle before it
+         is closed and removed from the pool -->
+    <integer name="db_default_idle_connection_timeout">30000</integer>
+
     <!-- Max space (in MB) allocated to DownloadManager to store the downloaded
          files if they are to be stored in DownloadManager's data dir,
          which typically is /data/data/com.android.providers.downloads/files -->
@@ -1939,6 +2038,10 @@
     <!-- Amount of time in ms the user needs to press the relevant key to bring up the global actions dialog -->
     <integer name="config_globalActionsKeyTimeout">500</integer>
 
+    <!-- Default width of a vertical scrollbar and height of a horizontal scrollbar.
+         Takes effect only if the scrollbar drawables have no intrinsic size. -->
+    <dimen name="config_scrollbarSize">4dp</dimen>
+
     <!-- Distance that should be scrolled, per axis value, in response to a horizontal
          {@link MotionEvent#ACTION_SCROLL} event. -->
     <dimen name="config_horizontalScrollFactor">64dp</dimen>
@@ -2175,11 +2278,19 @@
     <string-array name="config_disabledUntilUsedPreinstalledCarrierApps" translatable="false" />
 
     <!-- The list of classes that should be added to the notification ranking pipline.
-     See {@link com.android.server.notification.NotificationSignalExtractor} -->
+     See {@link com.android.server.notification.NotificationSignalExtractor}
+      If you add a new extractor to this list make sure to update
+      NotificationManagerService.handleRankingSort()-->
     <string-array name="config_notificationSignalExtractors">
+        <!-- many of the following extractors depend on the notification channel, so this
+        extractor must come first -->
+        <item>com.android.server.notification.NotificationChannelExtractor</item>
+        <item>com.android.server.notification.NotificationAdjustmentExtractor</item>
+        <!-- depends on AdjustmentExtractor-->
         <item>com.android.server.notification.ValidateNotificationPeople</item>
         <item>com.android.server.notification.PriorityExtractor</item>
         <item>com.android.server.notification.ImportanceExtractor</item>
+        <!-- depends on ImportanceExtractor-->
         <item>com.android.server.notification.NotificationIntrusivenessExtractor</item>
         <item>com.android.server.notification.VisibilityExtractor</item>
         <item>com.android.server.notification.BadgeExtractor</item>
@@ -2197,15 +2308,6 @@
          when alpha identifier is not provided by the UICC -->
     <bool name="config_stkNoAlphaUsrCnf">true</bool>
 
-    <!-- Don't use roaming icon for considered operators.
-         A match on config_sameNamedOperatorConsideredRoaming supersedes a match on this.
-         Can use mcc or mcc+mnc as item. For example, 302 or 21407.
-         If operators, 21404 and 21407, make roaming agreements, user of 21404 should not see
-         the roaming icon as using 21407 network.
-         To do this, add 21407 item to values-mcc214-mnc04/config.xml -->
-    <string-array translatable="false" name="config_operatorConsideredNonRoaming">
-    </string-array>
-
     <!-- Threshold (in ms) under which a screen off / screen on will be considered a reset of the
          immersive mode confirmation prompt.-->
     <integer name="config_immersive_mode_confirmation_panic">5000</integer>
@@ -2213,17 +2315,6 @@
     <!-- For some operators, PDU has garbages. To fix it, need to use valid index -->
     <integer name="config_valid_wappush_index">-1</integer>
 
-    <!-- This is NOT just for same named operators unlike the name suggests (will blacklist regardless of name).
-         A match on this supersedes a match on config_operatorConsideredNonRoaming.
-         Uses "startsWith" so you can use a leading substring like the mcc or
-         use the complete mcc+mnc string.
-         For a given mcc/mcc-mnc, some operators may want to roam (even if
-         config_operatorConsideredNonRoaming has the mcc/mcc-mnc).
-         user of 40485 should see the roaming icon as using 40483 network
-         though same Reliance network.
-         To do this, add 40483 item to values-mcc404-mnc85/config.xml -->
-    <string-array translatable="false" name="config_sameNamedOperatorConsideredRoaming">
-    </string-array>
     <!-- call barring MMI code from TS 22.030 Annex B -->
     <string-array translatable="false" name="config_callBarringMMI">
         <item>33</item>
@@ -2943,9 +3034,11 @@
     <!-- Handle volume keys directly in Window Manager without passing them to the foreground app -->
     <bool name="config_handleVolumeKeysInWindowManager">false</bool>
 
-    <!-- Volume level of in-call notification tone playback,
-         relative to the overall voice call stream volume [0..100] -->
-    <integer name="config_inCallNotificationVolumeRelative">67</integer>
+    <!-- Volume level of in-call notification tone playback [0..1] -->
+    <item name="config_inCallNotificationVolume" format="float" type="dimen">.10</item>
+
+    <!-- URI for in call notification sound -->
+    <string translatable="false" name="config_inCallNotificationSound">/system/media/audio/ui/InCallNotification.ogg</string>
 
     <!-- The OEM specified sensor type for the lift trigger to launch the camera app. -->
     <integer name="config_cameraLiftTriggerSensorType">-1</integer>
@@ -2973,6 +3066,13 @@
     <!-- An array of packages that need to be treated as type service in battery settings -->
     <string-array translatable="false" name="config_batteryPackageTypeService"/>
 
+    <!-- Flag indicating whether or not to enable night mode detection. -->
+    <bool name="config_enableNightMode">false</bool>
+
+    <!-- Flag indicating that the actions buttons for a notification should be tinted with by the
+         color supplied by the Notification.Builder if present. -->
+    <bool name="config_tintNotificationActionButtons">true</bool>
+
     <!-- Show area update info settings in CellBroadcastReceiver and information in SIM status in Settings app -->
     <bool name="config_showAreaUpdateInfoSettings">false</bool>
 
@@ -2982,6 +3082,12 @@
     <!-- Allow SystemUI to show the shutdown dialog -->
     <bool name="config_showSysuiShutdown">true</bool>
 
+    <!-- The stable device width and height in pixels. If these aren't set to a positive number
+         then the device will use the width and height of the default display the first time it's
+         booted.  -->
+    <integer name="config_stableDeviceDisplayWidth">-1</integer>
+    <integer name="config_stableDeviceDisplayHeight">-1</integer>
+
     <!-- Component name for default assistant on this device -->
     <string name="config_defaultAssistantComponentName">#+UNSET</string>
 
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index b4636a6..16c8578 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -438,15 +438,6 @@
     <!-- Width of the outline stroke used by the accessibility screen magnification indicator -->
     <dimen name="accessibility_magnification_indicator_width">4dip</dimen>
 
-    <!-- Width of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) -->
-    <dimen name="keyguard_security_width">320dp</dimen>
-
-    <!-- Height of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) -->
-    <dimen name="keyguard_security_height">400dp</dimen>
-
-    <!-- Margin around the various security views -->
-    <dimen name="keyguard_security_view_margin">8dp</dimen>
-
     <!-- Margin around the various security views -->
     <dimen name="keyguard_muliuser_selector_margin">8dp</dimen>
 
@@ -592,7 +583,32 @@
     <!-- The size of the right icon -->
     <dimen name="notification_right_icon_size">40dp</dimen>
 
+    <!-- The maximum height of any image in a remote view. This is applied to all images in custom remoteviews. -->
+    <dimen name="notification_custom_view_max_image_height_low_ram">208dp</dimen>
+    <!-- The maximum height of any image in a remote view. This is applied to all images in custom remoteviews. -->
+    <dimen name="notification_custom_view_max_image_width_low_ram">294dp</dimen>
+    <!-- The maximum height of a big picture in a notification. The images will be reduced to that height in case they are bigger. -->
+    <dimen name="notification_big_picture_max_height_low_ram">208dp</dimen>
+    <!-- The maximum width of a big picture in a notification. The images will be reduced to that width in case they are bigger. -->
+    <dimen name="notification_big_picture_max_width_low_ram">294dp</dimen>
+    <!-- The maximum height of a image in a media notification. The images will be reduced to that height in case they are bigger. -->
+    <dimen name="notification_media_image_max_height_low_ram">100dp</dimen>
+    <!-- The maximum width of a image in a media notification. The images will be reduced to that width in case they are bigger.-->
+    <dimen name="notification_media_image_max_width_low_ram">100dp</dimen>
+    <!-- The size of the right icon image when on low ram -->
+    <dimen name="notification_right_icon_size_low_ram">40dp</dimen>
+
     <!-- Max width/height of the autofill data set picker as a fraction of the screen width/height -->
     <dimen name="autofill_dataset_picker_max_size">90%</dimen>
 
+    <!-- Max height of the the autofill save custom subtitle as a fraction of the screen width/height -->
+    <dimen name="autofill_save_custom_subtitle_max_height">20%</dimen>
+
+    <!-- Max (absolute) dimensions (both width and height) of autofill service icon on autofill save affordance.
+      NOTE: the actual displayed size might is actually smaller than this and is hardcoded in the
+      autofill_save.xml layout; this dimension is just used to avoid a crash in the UI (if the icon provided
+      by the autofill service metadata is bigger than these dimentionsit will not be displayed).
+    -->
+    <dimen name="autofill_save_icon_max_size">300dp</dimen>
+
 </resources>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 4868774..10cec79 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2825,17 +2825,31 @@
 
     <public type="string" name="paste_as_plain_text" id="0x01040019" />
 
-    <public-group type="attr" first-id="0x01010569">
-    </public-group>
+  <!-- ===============================================================
+       Resources added in version O MR1 of the platform
 
-    <public-group type="style" first-id="0x010302e0">
-    </public-group>
+       NOTE: add <public> elements within a <public-group> like so:
 
-    <public-group type="id" first-id="0x01020044">
-    </public-group>
+       <public-group type="attr" first-id="0x01010531">
+           <public name="exampleAttr1" />
+           <public name="exampleAttr2" />
+       </public-group>
 
-    <public-group type="string" first-id="0x0104001a">
-    </public-group>
+       To add a new public-group block, choose an id value that is 1 greater
+       than the last of that item above. For example, the last "attr" id
+       value above is 0x01010530, so the public-group of attrs below has
+       the id value of 0x01010531.
+       =============================================================== -->
+    <eat-comment />
+
+    <public type="attr" name="showWhenLocked" id="0x01010569" />
+    <public type="attr" name="turnScreenOn" id="0x0101056a" />
+    <public type="attr" name="classLoader" id="0x0101056b" />
+    <public type="attr" name="windowLightNavigationBar" id="0x0101056c" />
+    <public type="attr" name="navigationBarDividerColor" id="0x0101056d" />
+    <public type="attr" name="windowLayoutInDisplayCutoutMode" id="0x01010586" />
+
+    <public type="string" name="autofill" id="0x0104001a"/>
 
   <!-- ===============================================================
        DO NOT ADD UN-GROUPED ITEMS HERE
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 61d2108..ce6815f 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -20,65 +20,13 @@
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- Suffix added to a number to signify size in bytes. -->
     <string name="byteShort">B</string>
-    <!-- Suffix added to a number to signify size in kilobytes (1000 bytes).
-        If you retain the Latin script for the localization, please use the lowercase
-        'k', as it signifies 1000 bytes as opposed to 1024 bytes. -->
-    <string name="kilobyteShort">kB</string>
-    <!-- Suffix added to a number to signify size in megabytes. -->
-    <string name="megabyteShort">MB</string>
-    <!-- Suffix added to a number to signify size in gigabytes. -->
-    <string name="gigabyteShort">GB</string>
-    <!-- Suffix added to a number to signify size in terabytes. -->
-    <string name="terabyteShort">TB</string>
     <!-- Suffix added to a number to signify size in petabytes. -->
     <string name="petabyteShort">PB</string>
-    <!-- Format string used to add a suffix like "kB" or "MB" to a number
-         to display a size in kilobytes, megabytes, or other size units.
-         Some languages (like French) will want to add a space between
-         the placeholders. -->
-    <string name="fileSizeSuffix"><xliff:g id="number" example="123">%1$s</xliff:g> <xliff:g id="unit" example="MB">%2$s</xliff:g></string>
-
-    <!-- [CHAR_LIMIT=10] Suffix added to signify duration in days -->
-    <string name="durationDays"><xliff:g id="days">%1$d</xliff:g> days</string>
-
-    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one day with hours -->
-    <string name="durationDayHours"><xliff:g id="days">%1$d</xliff:g> day
-            <xliff:g id="hours">%2$d</xliff:g> hrs</string>
-
-    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one day with one hours -->
-    <string name="durationDayHour"><xliff:g id="days">%1$d</xliff:g> day
-            <xliff:g id="hours">%2$d</xliff:g> hr</string>
-
-    <!-- [CHAR_LIMIT=10] Suffix added to signify duration in hours -->
-    <string name="durationHours"><xliff:g id="hours">%1$d</xliff:g> hrs</string>
-
-    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one hour with minutes -->
-    <string name="durationHourMinutes"><xliff:g id="hours">%1$d</xliff:g> hr
-            <xliff:g id="minutes">%2$d</xliff:g> mins</string>
-
-    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one hour with one minute -->
-    <string name="durationHourMinute"><xliff:g id="hours">%1$d</xliff:g> hr
-            <xliff:g id="minutes">%2$d</xliff:g> min</string>
-
-    <!-- [CHAR_LIMIT=10] Suffix added to signify duration in minutes -->
-    <string name="durationMinutes"><xliff:g id="minutes">%1$d</xliff:g> mins</string>
-
-    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one minute -->
-    <string name="durationMinute"><xliff:g id="minutes">%1$d</xliff:g> min</string>
-
-    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one minute with seconds -->
-    <string name="durationMinuteSeconds"><xliff:g id="minutes">%1$d</xliff:g> min
-            <xliff:g id="seconds">%2$d</xliff:g> secs</string>
-
-    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one minute with one second -->
-    <string name="durationMinuteSecond"><xliff:g id="minutes">%1$d</xliff:g> min
-            <xliff:g id="seconds">%2$d</xliff:g> sec</string>
-
-    <!-- [CHAR_LIMIT=10] Suffix added to signify duration in seconds -->
-    <string name="durationSeconds"><xliff:g id="seconds">%1$d</xliff:g> secs</string>
-
-    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one second -->
-    <string name="durationSecond"><xliff:g id="seconds">%1$d</xliff:g> sec</string>
+    <!-- Format string used to add a suffix like "B" or "PB" to a number
+         to display a size in bytes or petabytes.
+         Some languages may want to remove the space between the placeholders
+         or replace it with a non-breaking space. -->
+    <string name="fileSizeSuffix"><xliff:g id="number" example="123">%1$s</xliff:g> <xliff:g id="unit" example="B">%2$s</xliff:g></string>
 
     <!-- Used in Contacts for a field that has no label and in Note Pad
          for a note with no name. -->
@@ -204,7 +152,11 @@
     <!-- Displayed to tell the user that they should switch their network preference. -->
     <string name="NetworkPreferenceSwitchTitle">Can\u2019t reach network</string>
     <!-- Displayed to tell the user that they should switch their network preference. -->
-    <string name="NetworkPreferenceSwitchSummary">To improve reception, try changing the type selected at System &gt; Network &amp; Internet &gt; Mobile networks &gt; Preferred network type."</string>
+    <string name="NetworkPreferenceSwitchSummary">To improve reception, try changing the type selected at Settings &gt; Network &amp; Internet &gt; Mobile networks &gt; Preferred network type."</string>
+    <!-- Displayed to tell the user that emergency calls might not be available. -->
+    <string name="EmergencyCallWarningTitle">Wi\u2011Fi calling is active</string>
+    <!-- Displayed to tell the user that emergency calls might not be available. -->
+    <string name="EmergencyCallWarningSummary">Emergency calls require a mobile network.</string>
 
     <!-- Telephony notification channel name for a channel containing network alert notifications. -->
     <string name="notification_channel_network_alert">Alerts</string>
@@ -212,8 +164,8 @@
     <string name="notification_channel_call_forward">Call forwarding</string>
     <!-- Telephony notification channel name for a channel containing emergency callback mode notifications. -->
     <string name="notification_channel_emergency_callback">Emergency callback mode</string>
-    <!-- Telephony notification channel name for a channel containing mobile data alert notifications. -->
-    <string name="notification_channel_mobile_data_alert">Mobile data alerts</string>
+    <!-- Telephony notification channel name for a channel containing mobile data status notifications. -->
+    <string name="notification_channel_mobile_data_status">Mobile data status</string>
     <!-- Telephony notification channel name for a channel containing sms notifications. -->
     <string name="notification_channel_sms">SMS messages</string>
     <!-- Telephony notification channel name for a channel containing voice mail notifications. -->
@@ -4710,4 +4662,7 @@
     <string name="mmcc_imsi_unknown_in_hlr">SIM not provisioned</string>
     <string name="mmcc_illegal_ms">SIM not allowed</string>
     <string name="mmcc_illegal_me">Phone not allowed</string>
+
+    <!-- Popup window default title to be read by a screen reader-->
+    <string name="popup_window_default_title">Popup Window</string>
 </resources>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 4b0fe3f..e14aa14 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -1493,6 +1493,12 @@
         <item name="background">@drawable/autofill_dataset_picker_background</item>
     </style>
 
+    <!-- @hide -->
+    <style name="AutofillSaveAnimation">
+        <item name="android:windowEnterAnimation">@anim/slide_in_up</item>
+        <item name="android:windowExitAnimation">@anim/slide_out_down</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_material.xml b/core/res/res/values/styles_material.xml
index f39904d..470ac52 100644
--- a/core/res/res/values/styles_material.xml
+++ b/core/res/res/values/styles_material.xml
@@ -1054,7 +1054,7 @@
     </style>
 
     <style name="Widget.Material.MediaRouteButton" parent ="Widget.Material.ActionButton">
-        <item name="externalRouteEnabledDrawable">@drawable/ic_media_route_material_dark</item>
+        <item name="externalRouteEnabledDrawable">@drawable/ic_media_route_dark_material</item>
         <item name="contentDescription">@string/media_route_button_content_description</item>
     </style>
 
@@ -1204,8 +1204,8 @@
     <style name="Widget.Material.Light.ActionBar.Solid" parent="Widget.Material.ActionBar.Solid" />
     <style name="Widget.Material.Light.FastScroll" parent="Widget.Material.FastScroll"/>
 
-    <style name="Widget.Material.Light.MediaRouteButton" parent ="Widget.Material.MediaRouteButton">
-        <item name="externalRouteEnabledDrawable">@drawable/ic_media_route_material_light</item>
+    <style name="Widget.Material.Light.MediaRouteButton" parent="Widget.Material.MediaRouteButton">
+        <item name="externalRouteEnabledDrawable">@drawable/ic_media_route_light_material</item>
     </style>
 
     <!-- Animation Styles -->
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 7c6dc59..7b77330 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -241,6 +241,7 @@
   <java-symbol type="attr" name="autofilledHighlight"/>
   <java-symbol type="attr" name="autofillDatasetPickerMaxWidth"/>
   <java-symbol type="attr" name="autofillDatasetPickerMaxHeight"/>
+  <java-symbol type="attr" name="autofillSaveCustomSubtitleMaxHeight"/>
   <java-symbol type="bool" name="action_bar_embed_tabs" />
   <java-symbol type="bool" name="action_bar_expanded_action_views_exclusive" />
   <java-symbol type="bool" name="config_avoidGfxAccel" />
@@ -273,6 +274,7 @@
   <java-symbol type="bool" name="config_syncstorageengine_masterSyncAutomatically" />
   <java-symbol type="bool" name="config_telephony_use_own_number_for_voicemail" />
   <java-symbol type="bool" name="config_ui_enableFadingMarquee" />
+  <java-symbol type="bool" name="config_enableHapticTextHandle" />
   <java-symbol type="bool" name="config_use_strict_phone_number_comparation" />
   <java-symbol type="bool" name="config_single_volume" />
   <java-symbol type="bool" name="config_voice_capable" />
@@ -284,6 +286,12 @@
   <java-symbol type="bool" name="split_action_bar_is_narrow" />
   <java-symbol type="bool" name="config_useVolumeKeySounds" />
   <java-symbol type="bool" name="config_enableWallpaperService" />
+  <java-symbol type="bool" name="config_enableUpdateableTimeZoneRules" />
+  <java-symbol type="bool" name="config_timeZoneRulesUpdateTrackingEnabled" />
+  <java-symbol type="string" name="config_timeZoneRulesUpdaterPackage" />
+  <java-symbol type="string" name="config_timeZoneRulesDataPackage" />
+  <java-symbol type="integer" name="config_timeZoneRulesCheckTimeMillisAllowed" />
+  <java-symbol type="integer" name="config_timeZoneRulesCheckRetryCount" />
   <java-symbol type="bool" name="config_sendAudioBecomingNoisy" />
   <java-symbol type="bool" name="config_enableScreenshotChord" />
   <java-symbol type="bool" name="config_bluetooth_default_profiles" />
@@ -349,9 +357,11 @@
   <java-symbol type="integer" name="config_wifi_framework_associated_full_scan_max_total_dwell_time" />
   <java-symbol type="integer" name="config_wifi_framework_associated_partial_scan_max_num_active_channels" />
   <java-symbol type="integer" name="config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz" />
+  <java-symbol type="integer" name="config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz" />
   <java-symbol type="integer" name="config_wifi_framework_wifi_score_low_rssi_threshold_24GHz" />
   <java-symbol type="integer" name="config_wifi_framework_wifi_score_good_rssi_threshold_24GHz" />
   <java-symbol type="integer" name="config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz" />
+  <java-symbol type="integer" name="config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz" />
   <java-symbol type="integer" name="config_wifi_framework_wifi_score_low_rssi_threshold_5GHz" />
   <java-symbol type="integer" name="config_wifi_framework_wifi_score_good_rssi_threshold_5GHz" />
   <java-symbol type="integer" name="config_wifi_framework_wifi_score_bad_link_speed_24" />
@@ -422,6 +432,7 @@
   <java-symbol type="integer" name="db_connection_pool_size" />
   <java-symbol type="integer" name="db_journal_size_limit" />
   <java-symbol type="integer" name="db_wal_autocheckpoint" />
+  <java-symbol type="integer" name="db_default_idle_connection_timeout" />
   <java-symbol type="integer" name="config_soundEffectVolumeDb" />
   <java-symbol type="integer" name="config_lockSoundVolumeDb" />
   <java-symbol type="integer" name="config_multiuserMaximumUsers" />
@@ -445,6 +456,7 @@
   <java-symbol type="dimen" name="config_viewConfigurationTouchSlop" />
   <java-symbol type="dimen" name="config_viewMinFlingVelocity" />
   <java-symbol type="dimen" name="config_viewMaxFlingVelocity" />
+  <java-symbol type="dimen" name="config_scrollbarSize" />
   <java-symbol type="dimen" name="config_horizontalScrollFactor" />
   <java-symbol type="dimen" name="config_verticalScrollFactor" />
   <java-symbol type="dimen" name="config_scrollFactor" />
@@ -522,6 +534,8 @@
   <java-symbol type="string" name="PwdMmi" />
   <java-symbol type="string" name="NetworkPreferenceSwitchSummary" />
   <java-symbol type="string" name="NetworkPreferenceSwitchTitle" />
+  <java-symbol type="string" name="EmergencyCallWarningTitle" />
+  <java-symbol type="string" name="EmergencyCallWarningSummary" />
   <java-symbol type="string" name="RestrictedOnAllVoiceTitle" />
   <java-symbol type="string" name="RestrictedOnDataTitle" />
   <java-symbol type="string" name="RestrictedOnEmergencyTitle" />
@@ -530,7 +544,7 @@
   <java-symbol type="string" name="notification_channel_network_alert" />
   <java-symbol type="string" name="notification_channel_call_forward" />
   <java-symbol type="string" name="notification_channel_emergency_callback" />
-  <java-symbol type="string" name="notification_channel_mobile_data_alert" />
+  <java-symbol type="string" name="notification_channel_mobile_data_status" />
   <java-symbol type="string" name="notification_channel_sms" />
   <java-symbol type="string" name="notification_channel_voice_mail" />
   <java-symbol type="string" name="notification_channel_wfc" />
@@ -652,18 +666,6 @@
   <java-symbol type="string" name="display_manager_overlay_display_secure_suffix" />
   <java-symbol type="string" name="display_manager_overlay_display_title" />
   <java-symbol type="string" name="double_tap_toast" />
-  <java-symbol type="string" name="durationDays" />
-  <java-symbol type="string" name="durationDayHours" />
-  <java-symbol type="string" name="durationDayHour" />
-  <java-symbol type="string" name="durationHours" />
-  <java-symbol type="string" name="durationHourMinutes" />
-  <java-symbol type="string" name="durationHourMinute" />
-  <java-symbol type="string" name="durationMinutes" />
-  <java-symbol type="string" name="durationMinute" />
-  <java-symbol type="string" name="durationMinuteSeconds" />
-  <java-symbol type="string" name="durationMinuteSecond" />
-  <java-symbol type="string" name="durationSeconds" />
-  <java-symbol type="string" name="durationSecond" />
   <java-symbol type="string" name="elapsed_time_short_format_h_mm_ss" />
   <java-symbol type="string" name="elapsed_time_short_format_mm_ss" />
   <java-symbol type="string" name="emailTypeCustom" />
@@ -683,7 +685,6 @@
   <java-symbol type="string" name="fileSizeSuffix" />
   <java-symbol type="string" name="force_close" />
   <java-symbol type="string" name="gadget_host_error_inflating" />
-  <java-symbol type="string" name="gigabyteShort" />
   <java-symbol type="string" name="gpsNotifMessage" />
   <java-symbol type="string" name="gpsNotifTicker" />
   <java-symbol type="string" name="gpsNotifTitle" />
@@ -739,7 +740,6 @@
   <java-symbol type="string" name="keyboardview_keycode_enter" />
   <java-symbol type="string" name="keyboardview_keycode_mode_change" />
   <java-symbol type="string" name="keyboardview_keycode_shift" />
-  <java-symbol type="string" name="kilobyteShort" />
   <java-symbol type="string" name="last_month" />
   <java-symbol type="string" name="launchBrowserDefault" />
   <java-symbol type="string" name="lock_to_app_toast" />
@@ -760,7 +760,6 @@
   <java-symbol type="string" name="lockscreen_emergency_call" />
   <java-symbol type="string" name="lockscreen_return_to_call" />
   <java-symbol type="string" name="low_memory" />
-  <java-symbol type="string" name="megabyteShort" />
   <java-symbol type="string" name="midnight" />
   <java-symbol type="string" name="mismatchPin" />
   <java-symbol type="string" name="mmiComplete" />
@@ -963,7 +962,6 @@
   <java-symbol type="string" name="sync_really_delete" />
   <java-symbol type="string" name="sync_too_many_deletes_desc" />
   <java-symbol type="string" name="sync_undo_deletes" />
-  <java-symbol type="string" name="terabyteShort" />
   <java-symbol type="string" name="text_copied" />
   <java-symbol type="string" name="time_of_day" />
   <java-symbol type="string" name="time_picker_decrement_hour_button" />
@@ -1188,8 +1186,6 @@
   <java-symbol type="array" name="config_cdma_dun_supported_types" />
   <java-symbol type="array" name="config_disabledUntilUsedPreinstalledImes" />
   <java-symbol type="array" name="config_disabledUntilUsedPreinstalledCarrierApps" />
-  <java-symbol type="array" name="config_operatorConsideredNonRoaming" />
-  <java-symbol type="array" name="config_sameNamedOperatorConsideredRoaming" />
   <java-symbol type="array" name="config_callBarringMMI" />
   <java-symbol type="array" name="config_globalActionsList" />
   <java-symbol type="array" name="config_telephonyHardware" />
@@ -1741,6 +1737,8 @@
   <java-symbol type="bool" name="config_automatic_brightness_available" />
   <java-symbol type="bool" name="config_autoBrightnessResetAmbientLuxAfterWarmUp" />
   <java-symbol type="bool" name="config_notificationHeaderClickableForExpand" />
+  <java-symbol type="bool" name="config_enableNightMode" />
+  <java-symbol type="bool" name="config_tintNotificationActionButtons" />
   <java-symbol type="bool" name="config_dozeAfterScreenOff" />
   <java-symbol type="bool" name="config_enableActivityRecognitionHardwareOverlay" />
   <java-symbol type="bool" name="config_enableFusedLocationOverlay" />
@@ -2902,11 +2900,11 @@
   <java-symbol type="id" name="autofill_dataset_picker"/>
   <java-symbol type="id" name="autofill_dataset_list"/>
   <java-symbol type="id" name="autofill" />
-  <java-symbol type="id" name="autofill_save_title" />
-  <java-symbol type="id" name="autofill_save_subtitle" />
+  <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" />
+  <java-symbol type="id" name="autofill_save_title" />
   <java-symbol type="id" name="autofill_save_yes" />
-  <java-symbol type="id" name="autofill_save_close" />
   <java-symbol type="string" name="autofill_error_cannot_autofill" />
   <java-symbol type="string" name="autofill_picker_no_suggestions" />
   <java-symbol type="plurals" name="autofill_picker_some_suggestions" />
@@ -2926,7 +2924,10 @@
   <java-symbol type="string" name="autofill_save_type_email_address" />
   <java-symbol type="drawable" name="autofill_dataset_picker_background" />
   <java-symbol type="style" name="AutofillDatasetPicker" />
+  <java-symbol type="style" name="AutofillSaveAnimation" />
   <java-symbol type="dimen" name="autofill_dataset_picker_max_size"/>
+  <java-symbol type="dimen" name="autofill_save_custom_subtitle_max_height"/>
+  <java-symbol type="dimen" name="autofill_save_icon_max_size"/>
 
   <java-symbol type="dimen" name="notification_big_picture_max_height"/>
   <java-symbol type="dimen" name="notification_big_picture_max_width"/>
@@ -2936,6 +2937,14 @@
   <java-symbol type="dimen" name="notification_custom_view_max_image_height"/>
   <java-symbol type="dimen" name="notification_custom_view_max_image_width"/>
 
+  <java-symbol type="dimen" name="notification_big_picture_max_height_low_ram"/>
+  <java-symbol type="dimen" name="notification_big_picture_max_width_low_ram"/>
+  <java-symbol type="dimen" name="notification_media_image_max_width_low_ram"/>
+  <java-symbol type="dimen" name="notification_media_image_max_height_low_ram"/>
+  <java-symbol type="dimen" name="notification_right_icon_size_low_ram"/>
+  <java-symbol type="dimen" name="notification_custom_view_max_image_height_low_ram"/>
+  <java-symbol type="dimen" name="notification_custom_view_max_image_width_low_ram"/>
+
   <!-- Accessibility fingerprint gestures -->
   <java-symbol type="string" name="capability_title_canCaptureFingerprintGestures" />
   <java-symbol type="string" name="capability_desc_canCaptureFingerprintGestures" />
@@ -3011,6 +3020,8 @@
   <java-symbol type="string" name="foreground_service_tap_for_details" />
   <java-symbol type="string" name="foreground_service_multiple_separator" />
 
+  <java-symbol type="bool" name="config_enableCredentialFactoryResetProtection" />
+
   <!-- ETWS primary messages -->
   <java-symbol type="string" name="etws_primary_default_message_earthquake" />
   <java-symbol type="string" name="etws_primary_default_message_tsunami" />
@@ -3043,7 +3054,8 @@
   <java-symbol type="array" name="config_allowedSecureInstantAppSettings" />
 
   <java-symbol type="bool" name="config_handleVolumeKeysInWindowManager" />
-  <java-symbol type="integer" name="config_inCallNotificationVolumeRelative" />
+  <java-symbol type="dimen" name="config_inCallNotificationVolume" />
+  <java-symbol type="string" name="config_inCallNotificationSound" />
   <java-symbol type="bool" name="config_dozeAlwaysOnDisplayAvailable" />
   <java-symbol type="bool" name="config_displayBlanksAfterDoze" />
   <java-symbol type="bool" name="config_displayBrightnessBucketsInDoze" />
@@ -3057,10 +3069,15 @@
 
   <java-symbol type="array" name="config_batteryPackageTypeSystem" />
   <java-symbol type="array" name="config_batteryPackageTypeService" />
+
+  <java-symbol type="string" name="popup_window_default_title" />
   <java-symbol type="bool" name="config_showAreaUpdateInfoSettings" />
   <java-symbol type="layout" name="shutdown_dialog" />
   <java-symbol type="dimen" name="chooser_service_spacing" />
   <java-symbol type="bool" name="config_showSysuiShutdown" />
 
+  <java-symbol type="integer" name="config_stableDeviceDisplayWidth" />
+  <java-symbol type="integer" name="config_stableDeviceDisplayHeight" />
+
   <java-symbol type="string" name="config_defaultAssistantComponentName" />
 </resources>
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 383ae5d..9c3d8eb 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -453,6 +453,9 @@
         <!-- Autofill: max width/height of the dataset picker as a fraction of screen size -->
         <item name="autofillDatasetPickerMaxWidth">@dimen/autofill_dataset_picker_max_size</item>
         <item name="autofillDatasetPickerMaxHeight">@dimen/autofill_dataset_picker_max_size</item>
+
+        <!-- Autofill: max height of custom save subtitle as a fraction of screen size -->
+        <item name="autofillSaveCustomSubtitleMaxHeight">@dimen/autofill_save_custom_subtitle_max_height</item>
     </style>
 
     <!-- Variant of {@link #Theme} with no title bar -->
diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml
index 8755e37..bf0c906 100644
--- a/core/res/res/values/themes_device_defaults.xml
+++ b/core/res/res/values/themes_device_defaults.xml
@@ -745,6 +745,11 @@
         <item name="colorSecondary">@color/secondary_device_default_settings_light</item>
         <item name="colorAccent">@color/accent_device_default_light</item>
         <item name="colorEdgeEffect">@android:color/black</item>
+
+        <!-- Add white nav bar with divider that matches material -->
+        <item name="navigationBarDividerColor">#1f000000</item>
+        <item name="navigationBarColor">@android:color/white</item>
+        <item name="windowLightNavigationBar">true</item>
     </style>
 
     <!-- @hide DeviceDefault theme for a window that should use Settings theme colors
diff --git a/core/res/res/values/themes_material.xml b/core/res/res/values/themes_material.xml
index 86abe97..9dafa7a 100644
--- a/core/res/res/values/themes_material.xml
+++ b/core/res/res/values/themes_material.xml
@@ -214,7 +214,7 @@
         <!-- Scrollbar attributes -->
         <item name="scrollbarFadeDuration">250</item>
         <item name="scrollbarDefaultDelayBeforeFade">400</item>
-        <item name="scrollbarSize">10dp</item>
+        <item name="scrollbarSize">@dimen/config_scrollbarSize</item>
         <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_material</item>
         <item name="scrollbarThumbVertical">@drawable/config_scrollbarThumbVertical</item>
         <item name="scrollbarTrackHorizontal">@null</item>
@@ -582,7 +582,7 @@
         <!-- Scrollbar attributes -->
         <item name="scrollbarFadeDuration">250</item>
         <item name="scrollbarDefaultDelayBeforeFade">400</item>
-        <item name="scrollbarSize">10dp</item>
+        <item name="scrollbarSize">@dimen/config_scrollbarSize</item>
         <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_material</item>
         <item name="scrollbarThumbVertical">@drawable/config_scrollbarThumbVertical</item>
         <item name="scrollbarTrackHorizontal">@null</item>
diff --git a/core/res/res/xml/sms_short_codes.xml b/core/res/res/xml/sms_short_codes.xml
index 644638d..dbc9e51 100644
--- a/core/res/res/xml/sms_short_codes.xml
+++ b/core/res/res/xml/sms_short_codes.xml
@@ -61,7 +61,7 @@
     <shortcode country="bh" pattern="\\d{1,5}" free="81181" />
 
     <!-- Brazil: 1-5 digits (standard system default, not country specific) -->
-    <shortcode country="br" pattern="\\d{1,5}" free="6000[012]\\d" />
+    <shortcode country="br" pattern="\\d{1,5}" free="6000[012]\\d|876|5500|9963" />
 
     <!-- Belarus: 4 digits -->
     <shortcode country="by" pattern="\\d{4}" premium="3336|4161|444[4689]|501[34]|7781" />
@@ -72,10 +72,16 @@
     <!-- Switzerland: 3-5 digits: http://www.swisscom.ch/fxres/kmu/thirdpartybusiness_code_of_conduct_en.pdf -->
     <shortcode country="ch" pattern="[2-9]\\d{2,4}" premium="543|83111|30118" free="98765" />
 
+    <!-- Chile: 4-5 digits (not confirmed), known premium codes listed -->
+    <shortcode country="cl" pattern="\\d{4,5}" free="9963" />
+
     <!-- China: premium shortcodes start with "1066", free shortcodes start with "1065":
          http://clients.txtnation.com/entries/197192-china-premium-sms-short-code-requirements -->
     <shortcode country="cn" premium="1066.*" free="1065.*" />
 
+    <!-- Colombia: 1-6 digits (not confirmed) -->
+    <shortcode country="co" pattern="\\d{1,6}" free="890350" />
+
     <!-- Cyprus: 4-6 digits (not confirmed), known premium codes listed, plus EU -->
     <shortcode country="cy" pattern="\\d{4,6}" premium="7510" free="116\\d{3}" />
 
@@ -84,7 +90,7 @@
     <shortcode country="cz" premium="9\\d{6,7}" free="116\\d{3}" />
 
     <!-- Germany: 4-5 digits plus 1232xxx (premium codes from http://www.vodafone.de/infofaxe/537.pdf and http://premiumdienste.eplus.de/pdf/kodex.pdf), plus EU. To keep the premium regex from being too large, it only includes payment processors that have been used by SMS malware, with the regular pattern matching the other premium short codes. -->
-    <shortcode country="de" pattern="\\d{4,5}|1232\\d{3}" premium="11(?:111|833)|1232(?:013|021|060|075|286|358)|118(?:44|80|86)|20[25]00|220(?:21|22|88|99)|221(?:14|21)|223(?:44|53|77)|224[13]0|225(?:20|59|90)|226(?:06|10|20|26|30|40|56|70)|227(?:07|33|39|66|76|78|79|88|99)|228(?:08|11|66|77)|23300|30030|3[12347]000|330(?:33|55|66)|33(?:233|331|366|533)|34(?:34|567)|37000|40(?:040|123|444|[3568]00)|41(?:010|414)|44(?:000|044|344|44[24]|544)|50005|50100|50123|50555|51000|52(?:255|783)|54(?:100|2542)|55(?:077|[24]00|222|333|55|[12369]55)|56(?:789|886)|60800|6[13]000|66(?:[12348]66|566|766|777|88|999)|68888|70(?:07|123|777)|76766|77(?:007|070|222|444|[567]77)|80(?:008|123|888)|82(?:002|[378]00|323|444|472|474|488|727)|83(?:005|[169]00|333|830)|84(?:141|300|32[34]|343|488|499|777|888)|85888|86(?:188|566|640|644|650|677|868|888)|870[24]9|871(?:23|[49]9)|872(?:1[0-8]|49|99)|87499|875(?:49|55|99)|876(?:0[1367]|1[1245678]|54|99)|877(?:00|99)|878(?:15|25|3[567]|8[12])|87999|880(?:08|44|55|77|99)|88688|888(?:03|10|8|89)|8899|90(?:009|999)|99999" free="116\\d{3}|81214|81215|47529|70296|83782" />
+    <shortcode country="de" pattern="\\d{4,5}|1232\\d{3}" premium="11(?:111|833)|1232(?:013|021|060|075|286|358)|118(?:44|80|86)|20[25]00|220(?:21|22|88|99)|221(?:14|21)|223(?:44|53|77)|224[13]0|225(?:20|59|90)|226(?:06|10|20|26|30|40|56|70)|227(?:07|33|39|66|76|78|79|88|99)|228(?:08|11|66|77)|23300|30030|3[12347]000|330(?:33|55|66)|33(?:233|331|366|533)|34(?:34|567)|37000|40(?:040|123|444|[3568]00)|41(?:010|414)|44(?:000|044|344|44[24]|544)|50005|50100|50123|50555|51000|52(?:255|783)|54(?:100|2542)|55(?:077|[24]00|222|333|55|[12369]55)|56(?:789|886)|60800|6[13]000|66(?:[12348]66|566|766|777|88|999)|68888|70(?:07|123|777)|76766|77(?:007|070|222|444|[567]77)|80(?:008|123|888)|82(?:002|[378]00|323|444|472|474|488|727)|83(?:005|[169]00|333|830)|84(?:141|300|32[34]|343|488|499|777|888)|85888|86(?:188|566|640|644|650|677|868|888)|870[24]9|871(?:23|[49]9)|872(?:1[0-8]|49|99)|87499|875(?:49|55|99)|876(?:0[1367]|1[1245678]|54|99)|877(?:00|99)|878(?:15|25|3[567]|8[12])|87999|880(?:08|44|55|77|99)|88688|888(?:03|10|8|89)|8899|90(?:009|999)|99999" free="116\\d{3}|81214|81215|47529|70296|83782|3011|73240" />
 
     <!-- Denmark: see http://iprs.webspacecommerce.com/Denmark-Premium-Rate-Numbers -->
     <shortcode country="dk" pattern="\\d{4,5}" premium="1\\d{3}" free="116\\d{3}|4665" />
@@ -108,11 +114,14 @@
     <!-- United Kingdom (Great Britain): 4-6 digits, common codes [5-8]xxxx, plus EU:
          http://www.short-codes.com/media/Co-regulatoryCodeofPracticeforcommonshortcodes170206.pdf,
          visual voicemail code for EE: 887 -->
-    <shortcode country="gb" pattern="\\d{4,6}" premium="[5-8]\\d{4}" free="116\\d{3}|2020|35890|61002|61202|887|83669|34664|40406|60174" />
+    <shortcode country="gb" pattern="\\d{4,6}" premium="[5-8]\\d{4}" free="116\\d{3}|2020|35890|61002|61202|887|83669|34664|40406|60174|7726|37726" />
 
     <!-- Georgia: 4 digits, known premium codes listed -->
     <shortcode country="ge" pattern="\\d{4}" premium="801[234]|888[239]" />
 
+    <!-- Ghana: 4 digits, known premium codes listed -->
+    <shortcode country="gh" pattern="\\d{4}" free="5041" />
+
     <!-- Greece: 5 digits (54xxx, 19yxx, x=0-9, y=0-5): http://www.cmtelecom.com/premium-sms/greece -->
     <shortcode country="gr" pattern="\\d{5}" premium="54\\d{3}|19[0-5]\\d{2}" free="116\\d{3}|12115" />
 
@@ -143,6 +152,9 @@
     <!-- Japan: 8083 used by SOFTBANK_DCB_2 -->
     <shortcode country="jp" free="8083" />
 
+    <!-- Kenya: 5 digits, known premium codes listed -->
+    <shortcode country="ke" pattern="\\d{5}" free="21725" />
+
     <!-- Kyrgyzstan: 4 digits, known premium codes listed -->
     <shortcode country="kg" pattern="\\d{4}" premium="415[2367]|444[69]" />
 
@@ -160,13 +172,16 @@
 
     <!-- Luxembourg: 5 digits, 6xxxx, plus EU:
          http://www.luxgsm.lu/assets/files/filepage/file_1253803400.pdf -->
-    <shortcode country="lu" premium="6\\d{4}" free="116\\d{3}|60231" />
+    <shortcode country="lu" premium="6\\d{4}" free="116\\d{3}|60231|64085" />
 
     <!-- Latvia: 4 digits, known premium codes listed, plus EU -->
     <shortcode country="lv" pattern="\\d{4}" premium="18(?:19|63|7[1-4])" free="116\\d{3}|1399" />
 
+    <!-- Macedonia: 1-6 digits (not confirmed), known premium codes listed -->
+    <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" />
+    <shortcode country="mx" pattern="\\d{4,5}" premium="53035|7766" free="46645|5050|26259|50025|50052|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" />
@@ -180,6 +195,9 @@
     <!-- New Zealand: 3-4 digits, known premium codes listed -->
     <shortcode country="nz" pattern="\\d{3,4}" premium="3903|8995|4679" free="3067|3068|4053" />
 
+    <!-- Peru: 4-5 digits (not confirmed), known premium codes listed -->
+    <shortcode country="pe" pattern="\\d{4,5}" free="9963" />
+
     <!-- Philippines -->
     <shortcode country="ph" free="2147|5495|5496" />
 
@@ -196,11 +214,14 @@
     <!-- Qatar: 1-5 digits (standard system default, not country specific) -->
     <shortcode country="qa" pattern="\\d{1,5}" free="92451" />
 
+    <!-- Reunion (French Territory): 1-5 digits (not confirmed) -->
+    <shortcode country="re" pattern="\\d{1,5}" free="38600,36300,36303,959" />
+
     <!-- Romania: 4 digits, plus EU: http://www.simplus.ro/en/resources/glossary-of-terms/ -->
     <shortcode country="ro" pattern="\\d{4}" premium="12(?:63|66|88)|13(?:14|80)" free="116\\d{3}|3654|8360" />
 
     <!-- Russia: 4 digits, known premium codes listed: http://smscoin.net/info/pricing-russia/ -->
-    <shortcode country="ru" pattern="\\d{4}" premium="1(?:1[56]1|899)|2(?:09[57]|322|47[46]|880|990)|3[589]33|4161|44(?:4[3-9]|81)|77(?:33|81)|8424" />
+    <shortcode country="ru" pattern="\\d{4}" premium="1(?:1[56]1|899)|2(?:09[57]|322|47[46]|880|990)|3[589]33|4161|44(?:4[3-9]|81)|77(?:33|81)|8424" free="6954,8501"/>
 
     <!-- Saudi Arabia -->
     <shortcode country="sa" free="8145" />
@@ -237,4 +258,7 @@
     <!-- Vietnam: 1-5 digits (standard system default, not country specific) -->
     <shortcode country="vn" pattern="\\d{1,5}" free="5001|9055" />
 
+    <!-- Mayotte (French Territory): 1-5 digits (not confirmed) -->
+    <shortcode country="yt" pattern="\\d{1,5}" free="38600,36300,36303,959" />
+
 </shortcodes>
diff --git a/core/tests/BroadcastRadioTests/Android.mk b/core/tests/BroadcastRadioTests/Android.mk
new file mode 100644
index 0000000..c409e3a
--- /dev/null
+++ b/core/tests/BroadcastRadioTests/Android.mk
@@ -0,0 +1,35 @@
+# 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_PACKAGE_NAME := BroadcastRadioTests
+
+LOCAL_PRIVILEGED_MODULE := true
+LOCAL_CERTIFICATE := platform
+LOCAL_MODULE_TAGS := tests
+# TODO(b/13282254): uncomment when b/13282254 is fixed
+# LOCAL_SDK_VERSION := current
+
+LOCAL_STATIC_JAVA_LIBRARIES := compatibility-device-util android-support-test testng
+
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_DEX_PREOPT := false
+LOCAL_PROGUARD_ENABLED := disabled
+
+include $(BUILD_PACKAGE)
diff --git a/core/tests/BroadcastRadioTests/AndroidManifest.xml b/core/tests/BroadcastRadioTests/AndroidManifest.xml
new file mode 100644
index 0000000..d9b5522
--- /dev/null
+++ b/core/tests/BroadcastRadioTests/AndroidManifest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.hardware.radio.tests">
+
+    <uses-permission android:name="android.permission.ACCESS_BROADCAST_RADIO" />
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation
+        android:name="android.support.test.runner.AndroidJUnitRunner"
+        android:targetPackage="android.hardware.radio.tests"
+        android:label="Tests for Broadcast Radio APIs" >
+    </instrumentation>
+</manifest>
diff --git a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/functional/RadioTunerTest.java b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/functional/RadioTunerTest.java
new file mode 100644
index 0000000..a8d5164
--- /dev/null
+++ b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/functional/RadioTunerTest.java
@@ -0,0 +1,436 @@
+/*
+ * 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.hardware.radio.tests.functional;
+
+import android.Manifest;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.hardware.radio.ProgramSelector;
+import android.hardware.radio.RadioManager;
+import android.hardware.radio.RadioTuner;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.util.Log;
+
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+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 static org.junit.Assert.*;
+import static org.junit.Assume.*;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.after;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.atMost;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.timeout;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.testng.Assert.assertThrows;
+
+/**
+ * A test for broadcast radio API.
+ */
+@RunWith(AndroidJUnit4.class)
+@MediumTest
+public class RadioTunerTest {
+    private static final String TAG = "BroadcastRadioTests.RadioTuner";
+
+    public final Context mContext = InstrumentationRegistry.getContext();
+
+    private final int kConfigCallbackTimeoutMs = 10000;
+    private final int kCancelTimeoutMs = 1000;
+    private final int kTuneCallbackTimeoutMs = 30000;
+    private final int kFullScanTimeoutMs = 60000;
+
+    private RadioManager mRadioManager;
+    private RadioTuner mRadioTuner;
+    private RadioManager.ModuleProperties mModule;
+    private final List<RadioManager.ModuleProperties> mModules = new ArrayList<>();
+    @Mock private RadioTuner.Callback mCallback;
+
+    RadioManager.AmBandDescriptor mAmBandDescriptor;
+    RadioManager.FmBandDescriptor mFmBandDescriptor;
+
+    RadioManager.BandConfig mAmBandConfig;
+    RadioManager.BandConfig mFmBandConfig;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+
+        // check if radio is supported and skip the test if it's not
+        PackageManager packageManager = mContext.getPackageManager();
+        boolean isRadioSupported = packageManager.hasSystemFeature(
+                PackageManager.FEATURE_BROADCAST_RADIO);
+        assumeTrue(isRadioSupported);
+
+        // Check radio access permission
+        int res = mContext.checkCallingOrSelfPermission(Manifest.permission.ACCESS_BROADCAST_RADIO);
+        assertEquals("ACCESS_BROADCAST_RADIO permission not granted",
+                PackageManager.PERMISSION_GRANTED, res);
+
+        mRadioManager = (RadioManager)mContext.getSystemService(Context.RADIO_SERVICE);
+        assertNotNull(mRadioManager);
+
+        int status = mRadioManager.listModules(mModules);
+        assertEquals(RadioManager.STATUS_OK, status);
+        assertFalse(mModules.isEmpty());
+    }
+
+    @After
+    public void tearDown() {
+        mRadioManager = null;
+        mModules.clear();
+        if (mRadioTuner != null) {
+            mRadioTuner.close();
+            mRadioTuner = null;
+        }
+        resetCallback();
+    }
+
+    private void openTuner() {
+        openTuner(true);
+    }
+
+    private void resetCallback() {
+        verify(mCallback, atLeast(0)).onMetadataChanged(any());
+        verifyNoMoreInteractions(mCallback);
+        Mockito.reset(mCallback);
+    }
+
+    private void openTuner(boolean withAudio) {
+        assertNull(mRadioTuner);
+
+        // find FM band and build its config
+        mModule = mModules.get(0);
+
+        for (RadioManager.BandDescriptor band : mModule.getBands()) {
+            Log.d(TAG, "Band: " + band);
+            int bandType = band.getType();
+            if (bandType == RadioManager.BAND_AM || bandType == RadioManager.BAND_AM_HD) {
+                mAmBandDescriptor = (RadioManager.AmBandDescriptor)band;
+            }
+            if (bandType == RadioManager.BAND_FM || bandType == RadioManager.BAND_FM_HD) {
+                mFmBandDescriptor = (RadioManager.FmBandDescriptor)band;
+            }
+        }
+        assertNotNull(mAmBandDescriptor);
+        assertNotNull(mFmBandDescriptor);
+        mAmBandConfig = new RadioManager.AmBandConfig.Builder(mAmBandDescriptor).build();
+        mFmBandConfig = new RadioManager.FmBandConfig.Builder(mFmBandDescriptor).build();
+
+        mRadioTuner = mRadioManager.openTuner(mModule.getId(),
+                mFmBandConfig, withAudio, mCallback, null);
+        assertNotNull(mRadioTuner);
+        verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any());
+        resetCallback();
+
+        boolean isAntennaConnected = mRadioTuner.isAntennaConnected();
+        assertTrue(isAntennaConnected);
+    }
+
+    @Test
+    public void testOpenTuner() {
+        openTuner();
+    }
+
+    @Test
+    public void testReopenTuner() throws Throwable {
+        openTuner();
+        mRadioTuner.close();
+        mRadioTuner = null;
+        Thread.sleep(100);  // TODO(b/36122635): force reopen
+        openTuner();
+    }
+
+    @Test
+    public void testDoubleClose() {
+        openTuner();
+        mRadioTuner.close();
+        mRadioTuner.close();
+    }
+
+    @Test
+    public void testUseAfterClose() {
+        openTuner();
+        mRadioTuner.close();
+        int ret = mRadioTuner.cancel();
+        assertEquals(RadioManager.STATUS_INVALID_OPERATION, ret);
+    }
+
+    @Test
+    public void testSetAndGetConfiguration() {
+        openTuner();
+
+        // set
+        int ret = mRadioTuner.setConfiguration(mAmBandConfig);
+        assertEquals(RadioManager.STATUS_OK, ret);
+        verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any());
+
+        // get
+        RadioManager.BandConfig[] config = new RadioManager.BandConfig[1];
+        ret = mRadioTuner.getConfiguration(config);
+        assertEquals(RadioManager.STATUS_OK, ret);
+
+        assertEquals(mAmBandConfig, config[0]);
+    }
+
+    @Test
+    public void testSetBadConfiguration() throws Throwable {
+        openTuner();
+
+        // set bad config
+        Constructor<RadioManager.AmBandConfig> configConstr =
+                RadioManager.AmBandConfig.class.getDeclaredConstructor(
+                        int.class, int.class, int.class, int.class, int.class, boolean.class);
+        configConstr.setAccessible(true);
+        RadioManager.AmBandConfig badConfig = configConstr.newInstance(
+                0 /*region*/, RadioManager.BAND_AM /*type*/,
+                10000 /*lowerLimit*/, 1 /*upperLimit*/, 100 /*spacing*/, false /*stereo*/);
+        int ret = mRadioTuner.setConfiguration(badConfig);
+        assertEquals(RadioManager.STATUS_BAD_VALUE, ret);
+        verify(mCallback, never()).onConfigurationChanged(any());
+
+        // set null config
+        ret = mRadioTuner.setConfiguration(null);
+        assertEquals(RadioManager.STATUS_BAD_VALUE, ret);
+        verify(mCallback, never()).onConfigurationChanged(any());
+
+        // setting good config should recover
+        ret = mRadioTuner.setConfiguration(mAmBandConfig);
+        assertEquals(RadioManager.STATUS_OK, ret);
+        verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any());
+    }
+
+    @Test
+    public void testMute() {
+        openTuner();
+
+        boolean isMuted = mRadioTuner.getMute();
+        assertFalse(isMuted);
+
+        int ret = mRadioTuner.setMute(true);
+        assertEquals(RadioManager.STATUS_OK, ret);
+        isMuted = mRadioTuner.getMute();
+        assertTrue(isMuted);
+
+        ret = mRadioTuner.setMute(false);
+        assertEquals(RadioManager.STATUS_OK, ret);
+        isMuted = mRadioTuner.getMute();
+        assertFalse(isMuted);
+    }
+
+    @Test
+    public void testMuteNoAudio() {
+        openTuner(false);
+
+        int ret = mRadioTuner.setMute(false);
+        assertEquals(RadioManager.STATUS_ERROR, ret);
+
+        boolean isMuted = mRadioTuner.getMute();
+        assertTrue(isMuted);
+    }
+
+    @Test
+    public void testStep() {
+        openTuner();
+
+        int ret = mRadioTuner.step(RadioTuner.DIRECTION_DOWN, true);
+        assertEquals(RadioManager.STATUS_OK, ret);
+        verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any());
+
+        resetCallback();
+
+        ret = mRadioTuner.step(RadioTuner.DIRECTION_UP, false);
+        assertEquals(RadioManager.STATUS_OK, ret);
+        verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any());
+    }
+
+    @Test
+    public void testStepLoop() {
+        openTuner();
+
+        for (int i = 0; i < 10; i++) {
+            Log.d(TAG, "step loop iteration " + (i + 1));
+
+            int ret = mRadioTuner.step(RadioTuner.DIRECTION_DOWN, true);
+            assertEquals(RadioManager.STATUS_OK, ret);
+            verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any());
+
+            resetCallback();
+        }
+    }
+
+    @Test
+    public void testTuneAndGetPI() {
+        openTuner();
+
+        int channel = mFmBandConfig.getLowerLimit() + mFmBandConfig.getSpacing();
+
+        // test tune
+        int ret = mRadioTuner.tune(channel, 0);
+        assertEquals(RadioManager.STATUS_OK, ret);
+        ArgumentCaptor<RadioManager.ProgramInfo> infoc =
+                ArgumentCaptor.forClass(RadioManager.ProgramInfo.class);
+        verify(mCallback, timeout(kTuneCallbackTimeoutMs))
+                .onProgramInfoChanged(infoc.capture());
+        assertEquals(channel, infoc.getValue().getChannel());
+
+        // test getProgramInformation
+        RadioManager.ProgramInfo[] info = new RadioManager.ProgramInfo[1];
+        ret = mRadioTuner.getProgramInformation(info);
+        assertEquals(RadioManager.STATUS_OK, ret);
+        assertNotNull(info[0]);
+        assertEquals(channel, info[0].getChannel());
+        Log.d(TAG, "PI: " + info[0].toString());
+    }
+
+    @Test
+    public void testDummyCancel() {
+        openTuner();
+
+        int ret = mRadioTuner.cancel();
+        assertEquals(RadioManager.STATUS_OK, ret);
+    }
+
+    @Test
+    public void testLateCancel() {
+        openTuner();
+
+        int ret = mRadioTuner.step(RadioTuner.DIRECTION_DOWN, false);
+        assertEquals(RadioManager.STATUS_OK, ret);
+        verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any());
+
+        int cancelRet = mRadioTuner.cancel();
+        assertEquals(RadioManager.STATUS_OK, cancelRet);
+    }
+
+    @Test
+    public void testScanAndCancel() {
+        openTuner();
+
+        /* There is a possible race condition between scan and cancel commands - the scan may finish
+         * before cancel command is issued. Thus we accept both outcomes in this test.
+         */
+        int scanRet = mRadioTuner.scan(RadioTuner.DIRECTION_DOWN, true);
+        int cancelRet = mRadioTuner.cancel();
+
+        assertEquals(RadioManager.STATUS_OK, scanRet);
+        assertEquals(RadioManager.STATUS_OK, cancelRet);
+
+        verify(mCallback, after(kCancelTimeoutMs).atMost(1)).onError(RadioTuner.ERROR_CANCELLED);
+        verify(mCallback, atMost(1)).onProgramInfoChanged(any());
+    }
+
+    @Test
+    public void testStartBackgroundScan() {
+        openTuner();
+
+        boolean ret = mRadioTuner.startBackgroundScan();
+        boolean isSupported = mModule.isBackgroundScanningSupported();
+        assertEquals(isSupported, ret);
+    }
+
+    @Test
+    public void testGetProgramList() {
+        openTuner();
+
+        try {
+            Map<String, String> filter = new HashMap<>();
+            filter.put("com.google.dummy", "dummy");
+            List<RadioManager.ProgramInfo> list = mRadioTuner.getProgramList(filter);
+            assertNotNull(list);
+        } catch (IllegalStateException e) {
+            // the list may or may not be ready at this point
+            Log.i(TAG, "Background list is not ready");
+        }
+    }
+
+    @Test
+    public void testTuneFromProgramList() {
+        openTuner();
+
+        List<RadioManager.ProgramInfo> list;
+
+        try {
+            list = mRadioTuner.getProgramList(null);
+            assertNotNull(list);
+        } catch (IllegalStateException e) {
+            Log.i(TAG, "Background list is not ready, trying to fix it");
+
+            boolean success = mRadioTuner.startBackgroundScan();
+            assertTrue(success);
+            verify(mCallback, timeout(kFullScanTimeoutMs)).onBackgroundScanComplete();
+
+            list = mRadioTuner.getProgramList(null);
+            assertNotNull(list);
+        }
+
+        if (list.isEmpty()) {
+            Log.i(TAG, "Program list is empty, can't test tune");
+            return;
+        }
+
+        ProgramSelector sel = list.get(0).getSelector();
+        mRadioTuner.tune(sel);
+        ArgumentCaptor<RadioManager.ProgramInfo> infoc =
+                ArgumentCaptor.forClass(RadioManager.ProgramInfo.class);
+        verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(infoc.capture());
+        assertEquals(sel, infoc.getValue().getSelector());
+    }
+
+    @Test
+    public void testForcedAnalog() {
+        openTuner();
+
+        boolean isSupported = true;
+        boolean isForced;
+        try {
+            isForced = mRadioTuner.isAnalogForced();
+            assertFalse(isForced);
+        } catch (IllegalStateException ex) {
+            Log.i(TAG, "Forced analog switch is not supported by this tuner");
+            isSupported = false;
+        }
+
+        if (isSupported) {
+            mRadioTuner.setAnalogForced(true);
+            isForced = mRadioTuner.isAnalogForced();
+            assertTrue(isForced);
+
+            mRadioTuner.setAnalogForced(false);
+            isForced = mRadioTuner.isAnalogForced();
+            assertFalse(isForced);
+        } else {
+            assertThrows(IllegalStateException.class, () -> mRadioTuner.setAnalogForced(true));
+        }
+    }
+}
diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml
index e127896..ab9912a 100644
--- a/core/tests/coretests/AndroidManifest.xml
+++ b/core/tests/coretests/AndroidManifest.xml
@@ -978,6 +978,13 @@
             </intent-filter>
         </activity>
 
+        <activity android:name="android.view.ViewTransientState" android:label="View Transient State">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+            </intent-filter>
+        </activity>
+
         <activity android:name="android.view.RemoteViewsActivity" android:label="RemoteViewsActicity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
diff --git a/core/tests/coretests/README b/core/tests/coretests/README
index aced441..ea282a0 100644
--- a/core/tests/coretests/README
+++ b/core/tests/coretests/README
@@ -28,7 +28,7 @@
 
 Next, install the resulting APK and run tests as you would normal JUnit tests:
 
-  adb install out/target/product/.../data/app/FrameworksCoreTests/FrameworksCoreTests.apk
+  adb install -r ${ANDROID_PRODUCT_OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
   adb shell am instrument -w \
     com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
 
diff --git a/core/tests/coretests/apks/install_complete_package_info/AndroidManifest.xml b/core/tests/coretests/apks/install_complete_package_info/AndroidManifest.xml
index 4b01736..2c430e0 100644
--- a/core/tests/coretests/apks/install_complete_package_info/AndroidManifest.xml
+++ b/core/tests/coretests/apks/install_complete_package_info/AndroidManifest.xml
@@ -40,15 +40,31 @@
 
     <application
         android:hasCode="true">
+        <meta-data android:name="key1" android:value="value1" />
+        <meta-data android:name="key2" android:value="this_is_app" />
+
         <activity
             android:name="com.android.frameworks.coretests.TestActivity">
+            <meta-data android:name="key1" android:value="value1" />
+            <meta-data android:name="key2" android:value="this_is_activity" />
         </activity>
         <provider
             android:name="com.android.frameworks.coretests.TestProvider"
-            android:authorities="com.android.frameworks.coretests.testprovider" />
+            android:authorities="com.android.frameworks.coretests.testprovider" >
+            <meta-data android:name="key1" android:value="value1" />
+            <meta-data android:name="key2" android:value="this_is_provider" />
+        </provider>
+
         <receiver
-            android:name="com.android.frameworks.coretests.TestReceiver" />
+            android:name="com.android.frameworks.coretests.TestReceiver" >
+            <meta-data android:name="key1" android:value="value1" />
+            <meta-data android:name="key2" android:value="this_is_receiver" />
+        </receiver>
+
         <service
-            android:name="com.android.frameworks.coretests.TestService" />
+            android:name="com.android.frameworks.coretests.TestService" >
+            <meta-data android:name="key1" android:value="value1" />
+            <meta-data android:name="key2" android:value="this_is_service" />
+        </service>
     </application>
 </manifest>
diff --git a/core/tests/coretests/apks/install_multi_package/Android.mk b/core/tests/coretests/apks/install_multi_package/Android.mk
new file mode 100644
index 0000000..2813dad2
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/Android.mk
@@ -0,0 +1,12 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_PACKAGE_NAME := install_multi_package
+
+include $(FrameworkCoreTests_BUILD_PACKAGE)
+#include $(BUILD_PACKAGE)
+
diff --git a/core/tests/coretests/apks/install_multi_package/AndroidManifest.xml b/core/tests/coretests/apks/install_multi_package/AndroidManifest.xml
new file mode 100644
index 0000000..5164cae
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/AndroidManifest.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.frameworks.coretests.install_multi_package">
+
+<!--
+     This manifest is has child packages with components.
+-->
+
+    <uses-feature
+        android:name="com.android.frameworks.coretests.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" />
+    <uses-permission android:name="android.permission.INTERNET" />
+
+<!--
+     NOTE: This declares a child package, application, then another child
+     package, to test potential bugs that are order-dependent. Also, each
+     one varies the order.
+-->
+
+    <package package="com.android.frameworks.coretests.install_multi_package.first_child">
+        <uses-permission android:name="android.permission.NFC" />
+        <!-- NOTE: A declared permission is ignored since the tag is not whitelisted. -->
+        <permission
+            android:label="test permission"
+            android:name="first_child_permission"
+            android:protectionLevel="signature" />
+        <application
+            android:hasCode="true">
+            <activity
+                android:name="com.android.frameworks.coretests.FirstChildTestActivity">
+            </activity>
+            <provider
+                android:name="com.android.frameworks.coretests.FirstChildTestProvider"
+                android:authorities="com.android.frameworks.coretests.testprovider" />
+            <receiver
+                android:name="com.android.frameworks.coretests.FirstChildTestReceiver" />
+            <service
+                android:name="com.android.frameworks.coretests.FirstChildTestService" />
+        </application>
+    </package>
+
+    <application
+        android:hasCode="true">
+        <service
+            android:name="com.android.frameworks.coretests.TestService" />
+        <activity
+            android:name="com.android.frameworks.coretests.TestActivity">
+        </activity>
+        <provider
+            android:name="com.android.frameworks.coretests.TestProvider"
+            android:authorities="com.android.frameworks.coretests.testprovider" />
+        <receiver
+            android:name="com.android.frameworks.coretests.TestReceiver" />
+    </application>
+
+    <package package="com.android.frameworks.coretests.blah.second_child">
+        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+        <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS" />
+        <!-- NOTE: A declared permission is ignored since the tag is not whitelisted. -->
+        <permission
+            android:label="test permission"
+            android:name="second_child_permission"
+            android:protectionLevel="dangerous" />
+        <application
+            android:hasCode="true">
+            <receiver
+                android:name="com.android.frameworks.coretests.SecondChildTestReceiver" />
+            <service
+                android:name="com.android.frameworks.coretests.SecondChildTestService" />
+            <activity
+                android:name="com.android.frameworks.coretests.SecondChildTestActivity">
+            </activity>
+            <provider
+                android:name="com.android.frameworks.coretests.SecondChildTestProvider"
+                android:authorities="com.android.frameworks.coretests.testprovider" />
+        </application>
+    </package>
+</manifest>
diff --git a/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/FirstChildTestActivity.java b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/FirstChildTestActivity.java
new file mode 100644
index 0000000..57afcb0
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/FirstChildTestActivity.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.frameworks.coretests;
+
+import android.app.Activity;
+
+public class FirstChildTestActivity extends Activity {
+
+}
diff --git a/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/FirstChildTestProvider.java b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/FirstChildTestProvider.java
new file mode 100644
index 0000000..2816865
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/FirstChildTestProvider.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.frameworks.coretests;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+
+public class FirstChildTestProvider extends ContentProvider {
+
+    @Override
+    public boolean onCreate() {
+        return false;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        return null;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        return null;
+    }
+
+    @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/apks/install_multi_package/src/com/android/frameworks/coretests/FirstChildTestReceiver.java b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/FirstChildTestReceiver.java
new file mode 100644
index 0000000..ffe84b7
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/FirstChildTestReceiver.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.frameworks.coretests;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+
+public class FirstChildTestReceiver extends ContentProvider {
+
+    @Override
+    public boolean onCreate() {
+        return false;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        return null;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        return null;
+    }
+
+    @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/apks/install_multi_package/src/com/android/frameworks/coretests/FirstChildTestService.java b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/FirstChildTestService.java
new file mode 100644
index 0000000..faa6e9c
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/FirstChildTestService.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.frameworks.coretests;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+public class FirstChildTestService extends Service {
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+}
diff --git a/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/SecondChildTestActivity.java b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/SecondChildTestActivity.java
new file mode 100644
index 0000000..e89f264
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/SecondChildTestActivity.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.frameworks.coretests;
+
+import android.app.Activity;
+
+public class SecondChildTestActivity extends Activity {
+
+}
diff --git a/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/SecondChildTestProvider.java b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/SecondChildTestProvider.java
new file mode 100644
index 0000000..2bd40a5
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/SecondChildTestProvider.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.frameworks.coretests;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+
+public class SecondChildTestProvider extends ContentProvider {
+
+    @Override
+    public boolean onCreate() {
+        return false;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        return null;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        return null;
+    }
+
+    @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/apks/install_multi_package/src/com/android/frameworks/coretests/SecondChildTestReceiver.java b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/SecondChildTestReceiver.java
new file mode 100644
index 0000000..a6c4ddc
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/SecondChildTestReceiver.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.frameworks.coretests;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+
+public class SecondChildTestReceiver extends ContentProvider {
+
+    @Override
+    public boolean onCreate() {
+        return false;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        return null;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        return null;
+    }
+
+    @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/apks/install_multi_package/src/com/android/frameworks/coretests/SecondChildTestService.java b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/SecondChildTestService.java
new file mode 100644
index 0000000..1e721aa
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/SecondChildTestService.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.frameworks.coretests;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+public class SecondChildTestService extends Service {
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+}
diff --git a/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/TestActivity.java b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/TestActivity.java
new file mode 100644
index 0000000..10d0551
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/TestActivity.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.frameworks.coretests;
+
+import android.app.Activity;
+
+public class TestActivity extends Activity {
+
+}
diff --git a/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/TestProvider.java b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/TestProvider.java
new file mode 100644
index 0000000..59f9f10
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/TestProvider.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.frameworks.coretests;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+
+public class TestProvider extends ContentProvider {
+
+    @Override
+    public boolean onCreate() {
+        return false;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        return null;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        return null;
+    }
+
+    @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/apks/install_multi_package/src/com/android/frameworks/coretests/TestReceiver.java b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/TestReceiver.java
new file mode 100644
index 0000000..21f6263
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/TestReceiver.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.frameworks.coretests;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+
+public class TestReceiver extends ContentProvider {
+
+    @Override
+    public boolean onCreate() {
+        return false;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        return null;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        return null;
+    }
+
+    @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/apks/install_multi_package/src/com/android/frameworks/coretests/TestService.java b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/TestService.java
new file mode 100644
index 0000000..b330e75
--- /dev/null
+++ b/core/tests/coretests/apks/install_multi_package/src/com/android/frameworks/coretests/TestService.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.frameworks.coretests;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+public class TestService extends Service {
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+}
diff --git a/core/tests/coretests/assets/fonts/underlineTestFont.ttf b/core/tests/coretests/assets/fonts/underlineTestFont.ttf
new file mode 100644
index 0000000..a46a38e
--- /dev/null
+++ b/core/tests/coretests/assets/fonts/underlineTestFont.ttf
Binary files differ
diff --git a/core/tests/coretests/assets/fonts/underlineTestFont.ttx b/core/tests/coretests/assets/fonts/underlineTestFont.ttx
new file mode 100644
index 0000000..d7376b0
--- /dev/null
+++ b/core/tests/coretests/assets/fonts/underlineTestFont.ttx
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.9">
+
+  <GlyphOrder>
+    <GlyphID id="0" name=".notdef"/>
+    <GlyphID id="1" name="a"/>
+  </GlyphOrder>
+
+  <head>
+    <tableVersion value="1.0"/>
+    <fontRevision value="1.0"/>
+    <checkSumAdjustment value="0"/>
+    <magicNumber value="0x5f0f3cf5"/>
+    <flags value="00000000 00000011"/>
+    <unitsPerEm value="1000"/>
+    <created value="Fri Mar 17 07:26:00 2017"/>
+    <macStyle value="00000000 00000000"/>
+    <lowestRecPPEM value="7"/>
+    <fontDirectionHint value="2"/>
+    <glyphDataFormat value="0"/>
+  </head>
+
+  <hhea>
+    <tableVersion value="0x00010000"/>
+    <ascent value="1000"/>
+    <descent value="-200"/>
+    <lineGap value="0"/>
+    <caretSlopeRise value="1"/>
+    <caretSlopeRun value="0"/>
+    <caretOffset value="0"/>
+    <reserved0 value="0"/>
+    <reserved1 value="0"/>
+    <reserved2 value="0"/>
+    <reserved3 value="0"/>
+    <metricDataFormat value="0"/>
+  </hhea>
+
+  <maxp>
+    <tableVersion value="0x10000"/>
+    <maxZones value="0"/>
+    <maxTwilightPoints value="0"/>
+    <maxStorage value="0"/>
+    <maxFunctionDefs value="0"/>
+    <maxInstructionDefs value="0"/>
+    <maxStackElements value="0"/>
+    <maxSizeOfInstructions value="0"/>
+    <maxComponentElements value="0"/>
+  </maxp>
+
+  <OS_2>
+    <version value="3"/>
+    <xAvgCharWidth value="594"/>
+    <usWeightClass value="400"/>
+    <usWidthClass value="5"/>
+    <fsType value="00000000 00001000"/>
+    <ySubscriptXSize value="650"/>
+    <ySubscriptYSize value="600"/>
+    <ySubscriptXOffset value="0"/>
+    <ySubscriptYOffset value="75"/>
+    <ySuperscriptXSize value="650"/>
+    <ySuperscriptYSize value="600"/>
+    <ySuperscriptXOffset value="0"/>
+    <ySuperscriptYOffset value="350"/>
+    <yStrikeoutSize value="50"/>
+    <yStrikeoutPosition value="300"/>
+    <sFamilyClass value="0"/>
+    <panose>
+      <bFamilyType value="0"/>
+      <bSerifStyle value="0"/>
+      <bWeight value="5"/>
+      <bProportion value="0"/>
+      <bContrast value="0"/>
+      <bStrokeVariation value="0"/>
+      <bArmStyle value="0"/>
+      <bLetterForm value="0"/>
+      <bMidline value="0"/>
+      <bXHeight value="0"/>
+    </panose>
+    <ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
+    <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
+    <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
+    <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
+    <achVendID value="UKWN"/>
+    <fsSelection value="00000000 01000000"/>
+    <sTypoAscender value="800"/>
+    <sTypoDescender value="-200"/>
+    <sTypoLineGap value="200"/>
+    <usWinAscent value="1000"/>
+    <usWinDescent value="200"/>
+    <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
+    <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
+    <sxHeight value="500"/>
+    <sCapHeight value="700"/>
+    <usDefaultChar value="0"/>
+    <usBreakChar value="32"/>
+    <usMaxContext value="0"/>
+  </OS_2>
+
+  <hmtx>
+    <mtx name=".notdef" width="500" lsb="93"/>
+    <mtx name="a" width="500" lsb="93"/>
+  </hmtx>
+
+  <cmap>
+    <tableVersion version="0"/>
+    <cmap_format_4 platformID="3" platEncID="10" language="0">
+      <map code="0x61" name="a"/><!-- LATIN SMALL LETTER A -->
+    </cmap_format_4>
+  </cmap>
+
+  <loca>
+    <!-- The 'loca' table will be calculated by the compiler -->
+  </loca>
+
+  <glyf>
+    <TTGlyph name=".notdef"/><!-- contains no outline data -->
+
+    <TTGlyph name="a"/><!-- contains no outline data -->
+
+  </glyf>
+
+  <name>
+    <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
+      Sample Font
+    </namerecord>
+    <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
+      Regular
+    </namerecord>
+    <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
+      Sample Font
+    </namerecord>
+    <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
+      SampleFont-Regular
+    </namerecord>
+  </name>
+
+  <post>
+    <formatType value="3.0"/>
+    <italicAngle value="0.0"/>
+    <underlinePosition value="-200"/>
+    <underlineThickness value="300"/>
+    <isFixedPitch value="0"/>
+    <minMemType42 value="0"/>
+    <maxMemType42 value="0"/>
+    <minMemType1 value="0"/>
+    <maxMemType1 value="0"/>
+  </post>
+
+</ttFont>
diff --git a/core/tests/coretests/res/layout/activity_editor_cursor_test.xml b/core/tests/coretests/res/layout/activity_editor_cursor_test.xml
new file mode 100644
index 0000000..45a9318
--- /dev/null
+++ b/core/tests/coretests/res/layout/activity_editor_cursor_test.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+             android:layout_width="match_parent"
+             android:layout_height="match_parent">
+
+    <EditText
+        android:id="@+id/edittext"
+        android:layout_width="200px"
+        android:layout_height="wrap_content"
+        android:padding="15px"
+        android:lines="1"
+        android:singleLine="true"
+        android:textSize="30px"/>
+
+</FrameLayout>
diff --git a/core/tests/coretests/res/layout/view_transient_state.xml b/core/tests/coretests/res/layout/view_transient_state.xml
new file mode 100644
index 0000000..8873015
--- /dev/null
+++ b/core/tests/coretests/res/layout/view_transient_state.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<!-- Demonstrates view transient state, See corresponding Java code. -->
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <FrameLayout
+        android:id="@+id/p1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content">
+        <FrameLayout
+            android:id="@+id/p2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content">
+            <TextView
+                android:id="@+id/p3"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content">
+            </TextView>
+
+        </FrameLayout>
+
+    </FrameLayout>
+
+</FrameLayout>
diff --git a/core/tests/coretests/src/android/app/DownloadManagerBaseTest.java b/core/tests/coretests/src/android/app/DownloadManagerBaseTest.java
index 42b06f5..68b9b00 100644
--- a/core/tests/coretests/src/android/app/DownloadManagerBaseTest.java
+++ b/core/tests/coretests/src/android/app/DownloadManagerBaseTest.java
@@ -29,13 +29,15 @@
 import android.net.wifi.WifiManager;
 import android.os.Environment;
 import android.os.ParcelFileDescriptor;
-import android.os.UserHandle;
 import android.os.ParcelFileDescriptor.AutoCloseInputStream;
 import android.os.SystemClock;
+import android.os.UserHandle;
 import android.provider.Settings;
 import android.test.InstrumentationTestCase;
 import android.util.Log;
 
+import libcore.io.Streams;
+
 import com.google.mockwebserver.MockResponse;
 import com.google.mockwebserver.MockWebServer;
 
@@ -54,8 +56,6 @@
 import java.util.Set;
 import java.util.concurrent.TimeoutException;
 
-import libcore.io.Streams;
-
 /**
  * Base class for Instrumented tests for the Download Manager.
  */
@@ -83,9 +83,6 @@
     protected static final int WAIT_FOR_DOWNLOAD_POLL_TIME = 1 * 1000;  // 1 second
     protected static final int MAX_WAIT_FOR_DOWNLOAD_TIME = 30 * 1000; // 30 seconds
 
-    protected static final int DOWNLOAD_TO_SYSTEM_CACHE = 1;
-    protected static final int DOWNLOAD_TO_DOWNLOAD_CACHE_DIR = 2;
-
     // Just a few popular file types used to return from a download
     protected enum DownloadFileType {
         PLAINTEXT,
@@ -923,13 +920,13 @@
      * @param body The body to return in the response from the server
      */
     protected long doStandardEnqueue(byte[] body) throws Exception {
-        return enqueueDownloadRequest(body, DOWNLOAD_TO_DOWNLOAD_CACHE_DIR);
+        return enqueueDownloadRequest(body);
     }
 
-    protected long enqueueDownloadRequest(byte[] body, int location) throws Exception {
+    protected long enqueueDownloadRequest(byte[] body) throws Exception {
         // Prepare the mock server with a standard response
         mServer.enqueue(buildResponse(HTTP_OK, body));
-        return doEnqueue(location);
+        return doEnqueue();
     }
 
     /**
@@ -938,13 +935,13 @@
      * @param body The body to return in the response from the server, contained in the file
      */
     protected long doStandardEnqueue(File body) throws Exception {
-        return enqueueDownloadRequest(body, DOWNLOAD_TO_DOWNLOAD_CACHE_DIR);
+        return enqueueDownloadRequest(body);
     }
 
-    protected long enqueueDownloadRequest(File body, int location) throws Exception {
+    protected long enqueueDownloadRequest(File body) throws Exception {
         // Prepare the mock server with a standard response
         mServer.enqueue(buildResponse(HTTP_OK, body));
-        return doEnqueue(location);
+        return doEnqueue();
     }
 
     /**
@@ -952,16 +949,12 @@
      * doing a standard enqueue request to the server.
      */
     protected long doCommonStandardEnqueue() throws Exception {
-        return doEnqueue(DOWNLOAD_TO_DOWNLOAD_CACHE_DIR);
+        return doEnqueue();
     }
 
-    private long doEnqueue(int location) throws Exception {
+    private long doEnqueue() throws Exception {
         Uri uri = getServerUri(DEFAULT_FILENAME);
         Request request = new Request(uri).setTitle(DEFAULT_FILENAME);
-        if (location == DOWNLOAD_TO_SYSTEM_CACHE) {
-            request.setDestinationToSystemCache();
-        }
-
         return mDownloadManager.enqueue(request);
     }
 
@@ -1026,8 +1019,8 @@
     /**
      * Helper that does the actual basic download verification.
      */
-    protected long doBasicDownload(byte[] blobData, int location) throws Exception {
-        long dlRequest = enqueueDownloadRequest(blobData, location);
+    protected long doBasicDownload(byte[] blobData) throws Exception {
+        long dlRequest = enqueueDownloadRequest(blobData);
 
         // wait for the download to complete
         waitForDownloadOrTimeout(dlRequest);
diff --git a/core/tests/coretests/src/android/app/DownloadManagerFunctionalTest.java b/core/tests/coretests/src/android/app/DownloadManagerFunctionalTest.java
index d1a5d28..c1d4be0 100644
--- a/core/tests/coretests/src/android/app/DownloadManagerFunctionalTest.java
+++ b/core/tests/coretests/src/android/app/DownloadManagerFunctionalTest.java
@@ -23,12 +23,13 @@
 import android.os.Environment;
 import android.os.ParcelFileDescriptor;
 import android.test.suitebuilder.annotation.LargeTest;
+
 import com.google.mockwebserver.MockResponse;
 
 import java.io.File;
-import java.util.concurrent.TimeoutException;
 import java.util.Iterator;
 import java.util.Set;
+import java.util.concurrent.TimeoutException;
 
 /**
  * Integration tests of the DownloadManager API.
@@ -95,11 +96,11 @@
      * Test a basic download of a binary file 500k in size.
      */
     @LargeTest
-    public void testBinaryDownloadToSystemCache() throws Exception {
+    public void testBinaryDownload() throws Exception {
         int fileSize = 1024;
         byte[] blobData = generateData(fileSize, DataType.BINARY);
 
-        long dlRequest = doBasicDownload(blobData, DOWNLOAD_TO_SYSTEM_CACHE);
+        long dlRequest = doBasicDownload(blobData);
         verifyDownload(dlRequest, blobData);
         mDownloadManager.remove(dlRequest);
     }
@@ -108,11 +109,11 @@
      * Tests the basic downloading of a text file 300000 bytes in size.
      */
     @LargeTest
-    public void testTextDownloadToSystemCache() throws Exception {
+    public void testTextDownload() throws Exception {
         int fileSize = 1024;
         byte[] blobData = generateData(fileSize, DataType.TEXT);
 
-        long dlRequest = doBasicDownload(blobData, DOWNLOAD_TO_SYSTEM_CACHE);
+        long dlRequest = doBasicDownload(blobData);
         verifyDownload(dlRequest, blobData);
         mDownloadManager.remove(dlRequest);
     }
@@ -318,7 +319,7 @@
         int fileSize = 1024;
         byte[] blobData = generateData(fileSize, DataType.BINARY);
 
-        long dlRequest = doBasicDownload(blobData, DOWNLOAD_TO_DOWNLOAD_CACHE_DIR);
+        long dlRequest = doBasicDownload(blobData);
         Cursor cursor = mDownloadManager.query(new Query().setFilterById(dlRequest));
         try {
             assertEquals("The count of downloads with this ID is not 1!", 1, cursor.getCount());
diff --git a/core/tests/coretests/src/android/app/DownloadManagerStressTest.java b/core/tests/coretests/src/android/app/DownloadManagerStressTest.java
index 9fa9131..39d9a8e 100644
--- a/core/tests/coretests/src/android/app/DownloadManagerStressTest.java
+++ b/core/tests/coretests/src/android/app/DownloadManagerStressTest.java
@@ -195,7 +195,7 @@
 
             // try to download 1MB file into /cache - and it should succeed
             byte[] blobData = generateData(DOWNLOAD_FILE_SIZE, DataType.TEXT);
-            long dlRequest = doBasicDownload(blobData, DOWNLOAD_TO_SYSTEM_CACHE);
+            long dlRequest = doBasicDownload(blobData);
             verifyAndCleanupSingleFileDownload(dlRequest, blobData);
         } finally {
             if (outFile != null) {
diff --git a/core/tests/coretests/src/android/app/admin/PasswordMetricsTest.java b/core/tests/coretests/src/android/app/admin/PasswordMetricsTest.java
index 2470e87..d289f1f 100644
--- a/core/tests/coretests/src/android/app/admin/PasswordMetricsTest.java
+++ b/core/tests/coretests/src/android/app/admin/PasswordMetricsTest.java
@@ -17,6 +17,7 @@
 package android.app.admin;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
 
 import android.os.Parcel;
 import android.support.test.filters.SmallTest;
@@ -119,4 +120,48 @@
         // ordered, but not composed of alphas or digits
         assertEquals(1, PasswordMetrics.maxLengthSequence(":;<=>"));
     }
+
+    @Test
+    public void testEquals() {
+        PasswordMetrics metrics0 = new PasswordMetrics();
+        PasswordMetrics metrics1 = new PasswordMetrics();
+        assertNotEquals(metrics0, null);
+        assertNotEquals(metrics0, new Object());
+        assertEquals(metrics0, metrics0);
+        assertEquals(metrics0, metrics1);
+
+        assertEquals(new PasswordMetrics(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, 4),
+                new PasswordMetrics(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, 4));
+
+        assertNotEquals(new PasswordMetrics(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, 4),
+                new PasswordMetrics(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, 5));
+
+        assertNotEquals(new PasswordMetrics(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, 4),
+                new PasswordMetrics(DevicePolicyManager.PASSWORD_QUALITY_COMPLEX, 4));
+
+        metrics0 = PasswordMetrics.computeForPassword("1234abcd,./");
+        metrics1 = PasswordMetrics.computeForPassword("1234abcd,./");
+        assertEquals(metrics0, metrics1);
+        metrics1.letters++;
+        assertNotEquals(metrics0, metrics1);
+        metrics1.letters--;
+        metrics1.upperCase++;
+        assertNotEquals(metrics0, metrics1);
+        metrics1.upperCase--;
+        metrics1.lowerCase++;
+        assertNotEquals(metrics0, metrics1);
+        metrics1.lowerCase--;
+        metrics1.numeric++;
+        assertNotEquals(metrics0, metrics1);
+        metrics1.numeric--;
+        metrics1.symbols++;
+        assertNotEquals(metrics0, metrics1);
+        metrics1.symbols--;
+        metrics1.nonLetter++;
+        assertNotEquals(metrics0, metrics1);
+        metrics1.nonLetter--;
+        assertEquals(metrics0, metrics1);
+
+
+    }
 }
diff --git a/core/tests/coretests/src/android/app/timezone/DistroFormatVersionTest.java b/core/tests/coretests/src/android/app/timezone/DistroFormatVersionTest.java
new file mode 100644
index 0000000..70a0877
--- /dev/null
+++ b/core/tests/coretests/src/android/app/timezone/DistroFormatVersionTest.java
@@ -0,0 +1,82 @@
+/*
+ * 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.app.timezone;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.os.Parcel;
+
+import org.junit.Test;
+
+/**
+ * Tests for {@link DistroFormatVersion}.
+ */
+public class DistroFormatVersionTest {
+
+    @Test
+    public void equalsAndHashCode() {
+        DistroFormatVersion one = new DistroFormatVersion(1, 2);
+        assertEqualsContract(one, one);
+
+        DistroFormatVersion two = new DistroFormatVersion(1, 2);
+        assertEqualsContract(one, two);
+
+        DistroFormatVersion three = new DistroFormatVersion(2, 1);
+        assertFalse(one.equals(three));
+    }
+
+    @Test
+    public void parcelable() {
+        DistroFormatVersion version = new DistroFormatVersion(2, 3);
+
+        Parcel parcel = Parcel.obtain();
+        version.writeToParcel(parcel, 0 /* flags */);
+        parcel.setDataPosition(0);
+
+        DistroFormatVersion newVersion = DistroFormatVersion.CREATOR.createFromParcel(parcel);
+
+        assertEquals(version, newVersion);
+    }
+
+    @Test
+    public void supportsVersion() {
+        DistroFormatVersion deviceVersion = new DistroFormatVersion(2, 2);
+        assertTrue(deviceVersion.supports(deviceVersion));
+
+        DistroFormatVersion sameVersion = new DistroFormatVersion(2, 2);
+        assertTrue(deviceVersion.supports(sameVersion));
+
+        // Minor versions are backwards compatible.
+        DistroFormatVersion sameMajorNewerMinor = new DistroFormatVersion(2, 3);
+        assertTrue(deviceVersion.supports(sameMajorNewerMinor));
+        DistroFormatVersion sameMajorOlderMinor = new DistroFormatVersion(2, 1);
+        assertFalse(deviceVersion.supports(sameMajorOlderMinor));
+
+        // Major versions are not backwards compatible.
+        DistroFormatVersion newerMajor = new DistroFormatVersion(1, 2);
+        assertFalse(deviceVersion.supports(newerMajor));
+        DistroFormatVersion olderMajor = new DistroFormatVersion(3, 2);
+        assertFalse(deviceVersion.supports(olderMajor));
+    }
+
+    private static void assertEqualsContract(DistroFormatVersion one, DistroFormatVersion two) {
+        assertEquals(one, two);
+        assertEquals(one.hashCode(), two.hashCode());
+    }
+}
diff --git a/core/tests/coretests/src/android/app/timezone/DistroRulesVersionTest.java b/core/tests/coretests/src/android/app/timezone/DistroRulesVersionTest.java
new file mode 100644
index 0000000..eecae46
--- /dev/null
+++ b/core/tests/coretests/src/android/app/timezone/DistroRulesVersionTest.java
@@ -0,0 +1,82 @@
+/*
+ * 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.app.timezone;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.os.Parcel;
+
+import org.junit.Test;
+
+/**
+ * Tests for {@link DistroRulesVersion}.
+ */
+public class DistroRulesVersionTest {
+
+    @Test
+    public void equalsAndHashCode() {
+        DistroRulesVersion one = new DistroRulesVersion("2016a", 2);
+        assertEqualsContract(one, one);
+
+        DistroRulesVersion two = new DistroRulesVersion("2016a", 2);
+        assertEqualsContract(one, two);
+
+        DistroRulesVersion three = new DistroRulesVersion("2016b", 1);
+        assertFalse(one.equals(three));
+    }
+
+    @Test
+    public void parcelable() {
+        DistroRulesVersion version = new DistroRulesVersion("2016a", 2);
+
+        Parcel parcel = Parcel.obtain();
+        version.writeToParcel(parcel, 0 /* flags */);
+        parcel.setDataPosition(0);
+
+        DistroRulesVersion newVersion = DistroRulesVersion.CREATOR.createFromParcel(parcel);
+
+        assertEquals(version, newVersion);
+    }
+
+    @Test
+    public void isOlderThan() {
+        DistroRulesVersion deviceVersion = new DistroRulesVersion("2016b", 2);
+        assertFalse(deviceVersion.isOlderThan(deviceVersion));
+
+        DistroRulesVersion sameVersion = new DistroRulesVersion("2016b", 2);
+        assertFalse(deviceVersion.isOlderThan(sameVersion));
+
+        DistroRulesVersion sameRulesNewerRevision = new DistroRulesVersion("2016b", 3);
+        assertTrue(deviceVersion.isOlderThan(sameRulesNewerRevision));
+
+        DistroRulesVersion sameRulesOlderRevision = new DistroRulesVersion("2016b", 1);
+        assertFalse(deviceVersion.isOlderThan(sameRulesOlderRevision));
+
+        DistroRulesVersion newerRules = new DistroRulesVersion("2016c", 2);
+        assertTrue(deviceVersion.isOlderThan(newerRules));
+
+        DistroRulesVersion olderRules = new DistroRulesVersion("2016a", 2);
+        assertFalse(deviceVersion.isOlderThan(olderRules));
+    }
+
+    private static void assertEqualsContract(DistroRulesVersion one, DistroRulesVersion two) {
+        assertEquals(one, two);
+        assertEquals(one.hashCode(), two.hashCode());
+    }
+}
diff --git a/core/tests/coretests/src/android/app/timezone/RulesStateTest.java b/core/tests/coretests/src/android/app/timezone/RulesStateTest.java
new file mode 100644
index 0000000..99abe24
--- /dev/null
+++ b/core/tests/coretests/src/android/app/timezone/RulesStateTest.java
@@ -0,0 +1,145 @@
+/*
+ * 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.app.timezone;
+
+import static junit.framework.Assert.fail;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.os.Parcel;
+
+import org.junit.Test;
+
+/**
+ * Tests for {@link RulesState}.
+ */
+public class RulesStateTest {
+
+    @Test
+    public void equalsAndHashCode() {
+        RulesState one = new RulesState(
+                "2016a", formatVersion(1, 2), false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_INSTALL, rulesVersion("2016a", 3),
+                RulesState.DISTRO_STATUS_INSTALLED, rulesVersion("2016b", 2));
+        assertEqualsContract(one, one);
+
+        RulesState two = new RulesState(
+                "2016a", formatVersion(1, 2), false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_INSTALL, rulesVersion("2016a", 3),
+                RulesState.DISTRO_STATUS_INSTALLED, rulesVersion("2016b", 2));
+        assertEqualsContract(one, two);
+
+        RulesState differentSystemRules = new RulesState(
+                "2016b", formatVersion(1, 2), false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_INSTALL, rulesVersion("2016a", 3),
+                RulesState.DISTRO_STATUS_INSTALLED, rulesVersion("2016b", 2));
+        assertFalse(one.equals(differentSystemRules));
+
+        RulesState differentFormatVersion = new RulesState(
+                "2016a", formatVersion(1, 1), false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_INSTALL, rulesVersion("2016a", 3),
+                RulesState.DISTRO_STATUS_INSTALLED, rulesVersion("2016b", 2));
+        assertFalse(one.equals(differentFormatVersion));
+
+        RulesState differentOperationInProgress = new RulesState(
+                "2016a", formatVersion(1, 1), true /* operationInProgress */,
+                RulesState.STAGED_OPERATION_UNKNOWN, null /* stagedDistroRulesVersion */,
+                RulesState.DISTRO_STATUS_UNKNOWN, null /* installedDistroRulesVersion */);
+        assertFalse(one.equals(differentOperationInProgress));
+
+        RulesState differentStagedOperation = new RulesState(
+                "2016a", formatVersion(1, 1), false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_UNINSTALL, null /* stagedDistroRulesVersion */,
+                RulesState.DISTRO_STATUS_INSTALLED, rulesVersion("2016b", 2));
+        assertFalse(one.equals(differentStagedOperation));
+
+        RulesState differentStagedInstallVersion = new RulesState(
+                "2016a", formatVersion(1, 1), false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_INSTALL, rulesVersion("2016a", 4),
+                RulesState.DISTRO_STATUS_INSTALLED, rulesVersion("2016b", 2));
+        assertFalse(one.equals(differentStagedInstallVersion));
+
+        RulesState differentInstalled = new RulesState(
+                "2016a", formatVersion(1, 1), false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_INSTALL, rulesVersion("2016a", 3),
+                RulesState.DISTRO_STATUS_NONE, null /* installedDistroRulesVersion */);
+        assertFalse(one.equals(differentInstalled));
+
+        RulesState differentInstalledVersion = new RulesState(
+                "2016a", formatVersion(1, 1), false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_INSTALL, rulesVersion("2016a", 3),
+                RulesState.DISTRO_STATUS_INSTALLED, rulesVersion("2016b", 3));
+        assertFalse(one.equals(differentInstalledVersion));
+    }
+
+    @Test
+    public void parcelable() {
+        RulesState rulesState1 = new RulesState(
+                "2016a", formatVersion(1, 1), false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_INSTALL, rulesVersion("2016b", 2),
+                RulesState.DISTRO_STATUS_INSTALLED, rulesVersion("2016b", 3));
+        checkParcelableRoundTrip(rulesState1);
+
+        RulesState rulesStateWithNulls = new RulesState(
+                "2016a", formatVersion(1, 1), false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_NONE, null /* stagedDistroRulesVersion */,
+                RulesState.DISTRO_STATUS_NONE, null /* installedDistroRulesVersion */);
+        checkParcelableRoundTrip(rulesStateWithNulls);
+
+        RulesState rulesStateWithUnknowns = new RulesState(
+                "2016a", formatVersion(1, 1), true /* operationInProgress */,
+                RulesState.STAGED_OPERATION_UNKNOWN, null /* stagedDistroRulesVersion */,
+                RulesState.DISTRO_STATUS_UNKNOWN, null /* installedDistroRulesVersion */);
+        checkParcelableRoundTrip(rulesStateWithUnknowns);
+    }
+
+    private static void checkParcelableRoundTrip(RulesState rulesState) {
+        Parcel parcel = Parcel.obtain();
+        rulesState.writeToParcel(parcel, 0 /* flags */);
+        parcel.setDataPosition(0);
+
+        RulesState newVersion = RulesState.CREATOR.createFromParcel(parcel);
+
+        assertEquals(rulesState, newVersion);
+    }
+
+    @Test
+    public void isSystemVersionNewerThan() {
+        RulesState rulesState = new RulesState(
+                "2016b", formatVersion(1, 1), false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_NONE, null /* stagedDistroRulesVersion */,
+                RulesState.DISTRO_STATUS_INSTALLED, rulesVersion("2016b", 3));
+        assertTrue(rulesState.isSystemVersionNewerThan(rulesVersion("2016a", 1)));
+        assertFalse(rulesState.isSystemVersionNewerThan(rulesVersion("2016b", 1)));
+        assertFalse(rulesState.isSystemVersionNewerThan(rulesVersion("2016c", 1)));
+    }
+
+    private static void assertEqualsContract(RulesState one, RulesState two) {
+        assertEquals(one, two);
+        assertEquals(one.hashCode(), two.hashCode());
+    }
+
+    private static DistroRulesVersion rulesVersion(String rulesVersion, int revision) {
+        return new DistroRulesVersion(rulesVersion, revision);
+    }
+
+    private static DistroFormatVersion formatVersion(int majorVersion, int minorVersion) {
+        return new DistroFormatVersion(majorVersion, minorVersion);
+    }
+}
diff --git a/core/tests/coretests/src/android/app/timezone/RulesUpdaterContractTest.java b/core/tests/coretests/src/android/app/timezone/RulesUpdaterContractTest.java
new file mode 100644
index 0000000..91f8ebc
--- /dev/null
+++ b/core/tests/coretests/src/android/app/timezone/RulesUpdaterContractTest.java
@@ -0,0 +1,82 @@
+/*
+ * 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.app.timezone;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.hamcrest.MockitoHamcrest.argThat;
+
+import android.content.Context;
+import android.content.Intent;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.junit.Test;
+
+/**
+ * Tests for {@link RulesUpdaterContract}.
+ */
+public class RulesUpdaterContractTest {
+
+    @Test
+    public void createUpdaterIntent() throws Exception {
+        String packageName = "foobar";
+        Intent intent = RulesUpdaterContract.createUpdaterIntent(packageName);
+
+        assertEquals(RulesUpdaterContract.ACTION_TRIGGER_RULES_UPDATE_CHECK, intent.getAction());
+        assertEquals(packageName, intent.getPackage());
+        assertEquals(Intent.FLAG_INCLUDE_STOPPED_PACKAGES, intent.getFlags());
+    }
+
+    @Test
+    public void sendBroadcast() throws Exception {
+        String packageName = "foobar";
+        byte[] tokenBytes = new byte[] { 1, 2, 3, 4, 5 };
+
+        Intent expectedIntent = RulesUpdaterContract.createUpdaterIntent(packageName);
+        expectedIntent.putExtra(RulesUpdaterContract.EXTRA_CHECK_TOKEN, tokenBytes);
+
+        Context mockContext = mock(Context.class);
+
+        RulesUpdaterContract.sendBroadcast(mockContext, packageName, tokenBytes);
+
+        verify(mockContext).sendBroadcast(
+                filterEquals(expectedIntent),
+                eq(RulesUpdaterContract.UPDATE_TIME_ZONE_RULES_PERMISSION));
+    }
+
+    /**
+     * Registers a mockito parameter matcher that uses {@link Intent#filterEquals(Intent)}. to
+     * check the parameter against the intent supplied.
+     */
+    private static Intent filterEquals(final Intent expected) {
+        final Matcher<Intent> m = new BaseMatcher<Intent>() {
+            @Override
+            public boolean matches(Object actual) {
+                return actual != null && expected.filterEquals((Intent) actual);
+            }
+            @Override
+            public void describeTo(Description description) {
+                description.appendText(expected.toString());
+            }
+        };
+        return argThat(m);
+    }
+}
diff --git a/core/tests/coretests/src/android/content/pm/PackageBackwardCompatibilityTest.java b/core/tests/coretests/src/android/content/pm/PackageBackwardCompatibilityTest.java
new file mode 100644
index 0000000..4d2a047
--- /dev/null
+++ b/core/tests/coretests/src/android/content/pm/PackageBackwardCompatibilityTest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.content.pm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import android.content.pm.PackageParser.Package;
+import android.os.Build;
+import android.support.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+@SmallTest
+@RunWith(JUnit4.class)
+public class PackageBackwardCompatibilityTest {
+
+    private static final String ORG_APACHE_HTTP_LEGACY = "org.apache.http.legacy";
+
+    private static final String ANDROID_TEST_RUNNER = "android.test.runner";
+
+    private static final String ANDROID_TEST_MOCK = "android.test.mock";
+
+    private Package mPackage;
+
+    private static ArrayList<String> arrayList(String... strings) {
+        ArrayList<String> list = new ArrayList<>();
+        Collections.addAll(list, strings);
+        return list;
+    }
+
+    @Before
+    public void setUp() {
+        mPackage = new Package("org.package.name");
+        mPackage.applicationInfo.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
+    }
+
+    @Test
+    public void null_usesLibraries() {
+        PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+        assertNull("usesLibraries not updated correctly", mPackage.usesLibraries);
+    }
+
+    @Test
+    public void null_usesOptionalLibraries() {
+        PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+        assertNull("usesOptionalLibraries not updated correctly", mPackage.usesOptionalLibraries);
+    }
+
+    @Test
+    public void remove_org_apache_http_legacy_from_usesLibraries() {
+        mPackage.usesLibraries = arrayList(ORG_APACHE_HTTP_LEGACY);
+        PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+        assertNull("usesLibraries not updated correctly", mPackage.usesLibraries);
+    }
+
+    @Test
+    public void remove_org_apache_http_legacy_from_usesOptionalLibraries() {
+        mPackage.usesOptionalLibraries = arrayList(ORG_APACHE_HTTP_LEGACY);
+        PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+        assertNull("usesOptionalLibraries not updated correctly", mPackage.usesOptionalLibraries);
+    }
+
+    @Test
+    public void android_test_runner_in_usesLibraries() {
+        mPackage.usesLibraries = arrayList(ANDROID_TEST_RUNNER);
+        PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+        assertEquals("usesLibraries not updated correctly",
+                arrayList(ANDROID_TEST_RUNNER, ANDROID_TEST_MOCK),
+                mPackage.usesLibraries);
+    }
+
+    @Test
+    public void android_test_runner_in_usesOptionalLibraries() {
+        mPackage.usesOptionalLibraries = arrayList(ANDROID_TEST_RUNNER);
+        PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+        assertEquals("usesOptionalLibraries not updated correctly",
+                arrayList(ANDROID_TEST_RUNNER, ANDROID_TEST_MOCK),
+                mPackage.usesOptionalLibraries);
+    }
+
+    @Test
+    public void android_test_runner_in_usesLibraries_android_test_mock_in_usesOptionalLibraries() {
+        mPackage.usesLibraries = arrayList(ANDROID_TEST_RUNNER);
+        mPackage.usesOptionalLibraries = arrayList(ANDROID_TEST_MOCK);
+        PackageBackwardCompatibility.modifySharedLibraries(mPackage);
+        assertEquals("usesLibraries not updated correctly",
+                arrayList(ANDROID_TEST_RUNNER),
+                mPackage.usesLibraries);
+        assertEquals("usesOptionalLibraries not updated correctly",
+                arrayList(ANDROID_TEST_MOCK),
+                mPackage.usesOptionalLibraries);
+    }
+}
diff --git a/core/tests/coretests/src/android/content/pm/PackageHelperTests.java b/core/tests/coretests/src/android/content/pm/PackageHelperTests.java
index 5c497b4..55092fa 100644
--- a/core/tests/coretests/src/android/content/pm/PackageHelperTests.java
+++ b/core/tests/coretests/src/android/content/pm/PackageHelperTests.java
@@ -34,6 +34,7 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.UUID;
 
 import static android.net.TrafficStats.MB_IN_BYTES;
 import static android.os.storage.VolumeInfo.STATE_MOUNTED;
@@ -90,14 +91,20 @@
         File internalFile = new File(sInternalVolPath);
         File adoptedFile = new File(sAdoptedVolPath);
         File publicFile = new File(sPublicVolPath);
+        UUID internalUuid = UUID.randomUUID();
+        UUID adoptedUuid = UUID.randomUUID();
+        UUID publicUuid = UUID.randomUUID();
         Mockito.when(storageManager.getStorageBytesUntilLow(internalFile)).thenReturn(sInternalSize);
         Mockito.when(storageManager.getStorageBytesUntilLow(adoptedFile)).thenReturn(sAdoptedSize);
         Mockito.when(storageManager.getStorageBytesUntilLow(publicFile)).thenReturn(sPublicSize);
-        Mockito.when(storageManager.getAllocatableBytes(Mockito.eq(internalFile), Mockito.anyInt()))
+        Mockito.when(storageManager.getUuidForPath(Mockito.eq(internalFile))).thenReturn(internalUuid);
+        Mockito.when(storageManager.getUuidForPath(Mockito.eq(adoptedFile))).thenReturn(adoptedUuid);
+        Mockito.when(storageManager.getUuidForPath(Mockito.eq(publicFile))).thenReturn(publicUuid);
+        Mockito.when(storageManager.getAllocatableBytes(Mockito.eq(internalUuid), Mockito.anyInt()))
                 .thenReturn(sInternalSize);
-        Mockito.when(storageManager.getAllocatableBytes(Mockito.eq(adoptedFile), Mockito.anyInt()))
+        Mockito.when(storageManager.getAllocatableBytes(Mockito.eq(adoptedUuid), Mockito.anyInt()))
                 .thenReturn(sAdoptedSize);
-        Mockito.when(storageManager.getAllocatableBytes(Mockito.eq(publicFile), Mockito.anyInt()))
+        Mockito.when(storageManager.getAllocatableBytes(Mockito.eq(publicUuid), Mockito.anyInt()))
                 .thenReturn(sPublicSize);
         return storageManager;
     }
diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
index 423d45ea..0a89b74 100644
--- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
+++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
@@ -25,11 +25,14 @@
 import static android.system.OsConstants.S_IXGRP;
 import static android.system.OsConstants.S_IXOTH;
 
-import android.app.PackageInstallObserver;
 import android.content.BroadcastReceiver;
 import android.content.Context;
+import android.content.IIntentReceiver;
+import android.content.IIntentSender;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.IntentSender;
+import android.content.pm.PackageInstaller.SessionParams;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.PackageParser.PackageParserException;
 import android.content.res.Resources;
@@ -46,7 +49,6 @@
 import android.os.ServiceManager;
 import android.os.StatFs;
 import android.os.SystemClock;
-import android.os.UserManager;
 import android.os.storage.IStorageManager;
 import android.os.storage.StorageListener;
 import android.os.storage.StorageManager;
@@ -67,9 +69,13 @@
 
 import dalvik.system.VMRuntime;
 
+import libcore.io.IoUtils;
+
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
@@ -77,6 +83,7 @@
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.SynchronousQueue;
 import java.util.concurrent.TimeUnit;
 
 public class PackageManagerTests extends AndroidTestCase {
@@ -130,29 +137,7 @@
         super.tearDown();
     }
 
-    private class TestInstallObserver extends PackageInstallObserver {
-        public int returnCode;
-
-        private boolean doneFlag = false;
-
-        @Override
-        public void onPackageInstalled(String basePackageName, int returnCode, String msg,
-                Bundle extras) {
-            Log.d(TAG, "onPackageInstalled: code=" + returnCode + ", msg=" + msg + ", extras="
-                    + extras);
-            synchronized (this) {
-                this.returnCode = returnCode;
-                doneFlag = true;
-                notifyAll();
-            }
-        }
-
-        public boolean isDone() {
-            return doneFlag;
-        }
-    }
-
-    abstract class GenericReceiver extends BroadcastReceiver {
+    private abstract static class GenericReceiver extends BroadcastReceiver {
         private boolean doneFlag = false;
 
         boolean received = false;
@@ -184,7 +169,7 @@
         }
     }
 
-    class InstallReceiver extends GenericReceiver {
+    private static class InstallReceiver extends GenericReceiver {
         String pkgName;
 
         InstallReceiver(String pkgName) {
@@ -208,100 +193,152 @@
         }
     }
 
+    private static class LocalIntentReceiver {
+        private final SynchronousQueue<Intent> mResult = new SynchronousQueue<>();
+
+        private IIntentSender.Stub mLocalSender = new IIntentSender.Stub() {
+            @Override
+            public void send(int code, Intent intent, String resolvedType, IBinder whitelistToken,
+                    IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) {
+                try {
+                    mResult.offer(intent, 5, TimeUnit.SECONDS);
+                } catch (InterruptedException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+        };
+
+        public IntentSender getIntentSender() {
+            return new IntentSender((IIntentSender) mLocalSender);
+        }
+
+        public Intent getResult() {
+            try {
+                return mResult.take();
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
     private PackageManager getPm() {
         return mContext.getPackageManager();
     }
 
-    private IPackageManager getIPm() {
-        IPackageManager ipm  = IPackageManager.Stub.asInterface(
-                ServiceManager.getService("package"));
-        return ipm;
+    private PackageInstaller getPi() {
+        return getPm().getPackageInstaller();
     }
 
-    public void invokeInstallPackage(Uri packageURI, int flags, GenericReceiver receiver,
-            boolean shouldSucceed) {
-        TestInstallObserver observer = new TestInstallObserver();
-        mContext.registerReceiver(receiver, receiver.filter);
+    private void writeSplitToInstallSession(PackageInstaller.Session session, String inPath,
+            String splitName) throws RemoteException {
+        long sizeBytes = 0;
+        final File file = new File(inPath);
+        if (file.isFile()) {
+            sizeBytes = file.length();
+        } else {
+            return;
+        }
+
+        InputStream in = null;
+        OutputStream out = null;
         try {
-            // Wait on observer
-            synchronized (observer) {
-                synchronized (receiver) {
-                    getPm().installPackage(packageURI, observer, flags, null);
-                    long waitTime = 0;
-                    while ((!observer.isDone()) && (waitTime < MAX_WAIT_TIME)) {
-                        try {
-                            observer.wait(WAIT_TIME_INCR);
-                            waitTime += WAIT_TIME_INCR;
-                        } catch (InterruptedException e) {
-                            Log.i(TAG, "Interrupted during sleep", e);
-                        }
-                    }
-                    if (!observer.isDone()) {
-                        fail("Timed out waiting for packageInstalled callback");
-                    }
+            in = new FileInputStream(inPath);
+            out = session.openWrite(splitName, 0, sizeBytes);
 
-                    if (shouldSucceed) {
-                        if (observer.returnCode != PackageManager.INSTALL_SUCCEEDED) {
-                            fail("Package installation should have succeeded, but got code "
-                                    + observer.returnCode);
-                        }
-                    } else {
-                        if (observer.returnCode == PackageManager.INSTALL_SUCCEEDED) {
-                            fail("Package installation should fail");
-                        }
-
-                        /*
-                         * We'll never expect get a notification since we
-                         * shouldn't succeed.
-                         */
-                        return;
-                    }
-
-                    // Verify we received the broadcast
-                    waitTime = 0;
-                    while ((!receiver.isDone()) && (waitTime < MAX_WAIT_TIME)) {
-                        try {
-                            receiver.wait(WAIT_TIME_INCR);
-                            waitTime += WAIT_TIME_INCR;
-                        } catch (InterruptedException e) {
-                            Log.i(TAG, "Interrupted during sleep", e);
-                        }
-                    }
-                    if (!receiver.isDone()) {
-                        fail("Timed out waiting for PACKAGE_ADDED notification");
-                    }
-                }
+            int total = 0;
+            byte[] buffer = new byte[65536];
+            int c;
+            while ((c = in.read(buffer)) != -1) {
+                total += c;
+                out.write(buffer, 0, c);
             }
+            session.fsync(out);
+        } catch (IOException e) {
+            fail("Error: failed to write; " + e.getMessage());
         } finally {
-            mContext.unregisterReceiver(receiver);
+            IoUtils.closeQuietly(out);
+            IoUtils.closeQuietly(in);
+            IoUtils.closeQuietly(session);
         }
     }
 
-    public void invokeInstallPackageFail(Uri packageURI, int flags, int expectedResult) {
-        TestInstallObserver observer = new TestInstallObserver();
-        try {
-            // Wait on observer
-            synchronized (observer) {
-                getPm().installPackage(packageURI, observer, flags, null);
+    private void invokeInstallPackage(Uri packageUri, int flags, GenericReceiver receiver,
+            boolean shouldSucceed) {
+        mContext.registerReceiver(receiver, receiver.filter);
+        synchronized (receiver) {
+            final String inPath = packageUri.getPath();
+            PackageInstaller.Session session = null;
+            try {
+                final SessionParams sessionParams =
+                        new SessionParams(SessionParams.MODE_FULL_INSTALL);
+                sessionParams.installFlags = flags;
+                final int sessionId = getPi().createSession(sessionParams);
+                session = getPi().openSession(sessionId);
+                writeSplitToInstallSession(session, inPath, "base.apk");
+                final LocalIntentReceiver localReceiver = new LocalIntentReceiver();
+                session.commit(localReceiver.getIntentSender());
+                final Intent result = localReceiver.getResult();
+                final int status = result.getIntExtra(PackageInstaller.EXTRA_STATUS,
+                        PackageInstaller.STATUS_FAILURE);
+                if (shouldSucceed) {
+                    if (status != PackageInstaller.STATUS_SUCCESS) {
+                        fail("Installation should have succeeded, but got code " + status);
+                    }
+                } else {
+                    if (status == PackageInstaller.STATUS_SUCCESS) {
+                        fail("Installation should have failed");
+                    }
+                    // We'll never get a broadcast since the package failed to install
+                    return;
+                }
+                // Verify we received the broadcast
                 long waitTime = 0;
-                while ((!observer.isDone()) && (waitTime < MAX_WAIT_TIME)) {
+                while ((!receiver.isDone()) && (waitTime < MAX_WAIT_TIME)) {
                     try {
-                        observer.wait(WAIT_TIME_INCR);
+                        receiver.wait(WAIT_TIME_INCR);
                         waitTime += WAIT_TIME_INCR;
                     } catch (InterruptedException e) {
                         Log.i(TAG, "Interrupted during sleep", e);
                     }
                 }
-                if (!observer.isDone()) {
-                    fail("Timed out waiting for packageInstalled callback");
+                if (!receiver.isDone()) {
+                    fail("Timed out waiting for PACKAGE_ADDED notification");
                 }
-                assertEquals(expectedResult, observer.returnCode);
+            } catch (IllegalArgumentException | IOException | RemoteException e) {
+                Log.w(TAG, "Failed to install package; path=" + inPath, e);
+                fail("Failed to install package; path=" + inPath + ", e=" + e);
+            } finally {
+                IoUtils.closeQuietly(session);
+                mContext.unregisterReceiver(receiver);
             }
-        } finally {
         }
     }
 
-    Uri getInstallablePackage(int fileResId, File outFile) {
+    private void invokeInstallPackageFail(Uri packageUri, int flags, int expectedResult) {
+        final String inPath = packageUri.getPath();
+        PackageInstaller.Session session = null;
+        try {
+            final SessionParams sessionParams =
+                    new SessionParams(SessionParams.MODE_FULL_INSTALL);
+            sessionParams.installFlags = flags;
+            final int sessionId = getPi().createSession(sessionParams);
+            session = getPi().openSession(sessionId);
+            writeSplitToInstallSession(session, inPath, "base.apk");
+            final LocalIntentReceiver localReceiver = new LocalIntentReceiver();
+            session.commit(localReceiver.getIntentSender());
+            final Intent result = localReceiver.getResult();
+            final int status = result.getIntExtra(PackageInstaller.EXTRA_STATUS,
+                    PackageInstaller.STATUS_SUCCESS);
+            assertEquals(expectedResult, status);
+        } catch (IllegalArgumentException | IOException | RemoteException e) {
+            Log.w(TAG, "Failed to install package; path=" + inPath, e);
+            fail("Failed to install package; path=" + inPath + ", e=" + e);
+        } finally {
+            IoUtils.closeQuietly(session);
+        }
+    }
+
+    private Uri getInstallablePackage(int fileResId, File outFile) {
         Resources res = mContext.getResources();
         InputStream is = null;
         try {
@@ -430,28 +467,17 @@
 
             int rLoc = getInstallLoc(flags, expInstallLocation, pkgLen);
             if (rLoc == INSTALL_LOC_INT) {
-                if ((flags & PackageManager.INSTALL_FORWARD_LOCK) != 0) {
-                    assertTrue("The application should be installed forward locked",
-                            (info.privateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0);
-                    assertStartsWith("The APK path should point to the ASEC",
-                            SECURE_CONTAINERS_PREFIX, srcPath);
-                    assertStartsWith("The public APK path should point to the ASEC",
-                            SECURE_CONTAINERS_PREFIX, publicSrcPath);
-                    assertStartsWith("The native library path should point to the ASEC",
-                            SECURE_CONTAINERS_PREFIX, info.nativeLibraryDir);
-                } else {
-                    assertFalse(
-                            (info.privateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0);
-                    assertEquals(appInstallPath, srcPath);
-                    assertEquals(appInstallPath, publicSrcPath);
-                    assertStartsWith("Native library should point to shared lib directory",
-                            expectedLibPath, info.nativeLibraryDir);
-                    assertDirOwnerGroupPermsIfExists(
-                            "Native library directory should be owned by system:system and 0755",
-                            Process.SYSTEM_UID, Process.SYSTEM_UID,
-                            S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH,
-                            info.nativeLibraryDir);
-                }
+                assertFalse(
+                        (info.privateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0);
+                assertEquals(appInstallPath, srcPath);
+                assertEquals(appInstallPath, publicSrcPath);
+                assertStartsWith("Native library should point to shared lib directory",
+                        expectedLibPath, info.nativeLibraryDir);
+                assertDirOwnerGroupPermsIfExists(
+                        "Native library directory should be owned by system:system and 0755",
+                        Process.SYSTEM_UID, Process.SYSTEM_UID,
+                        S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH,
+                        info.nativeLibraryDir);
                 assertFalse((info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0);
 
                 // Make sure the native library dir is not a symlink
@@ -465,13 +491,8 @@
                     }
                 }
             } else if (rLoc == INSTALL_LOC_SD) {
-                if ((flags & PackageManager.INSTALL_FORWARD_LOCK) != 0) {
-                    assertTrue("The application should be installed forward locked",
-                            (info.privateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0);
-                } else {
-                    assertFalse("The application should not be installed forward locked",
-                            (info.privateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0);
-                }
+                assertFalse("The application should not be installed forward locked",
+                        (info.privateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0);
                 assertTrue("Application flags (" + info.flags
                         + ") should contain FLAG_EXTERNAL_STORAGE",
                         (info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0);
@@ -598,7 +619,8 @@
         }
     }
 
-    private InstallParams sampleInstallFromRawResource(int flags, boolean cleanUp) throws Exception {
+    private InstallParams sampleInstallFromRawResource(int flags, boolean cleanUp)
+            throws Exception {
         return installFromRawResource("install.apk", R.raw.install, flags, cleanUp, false, -1,
                 PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
     }
@@ -721,7 +743,7 @@
                         PackageManager.MATCH_UNINSTALLED_PACKAGES);
                 GenericReceiver receiver = new DeleteReceiver(pkg.packageName);
                 invokeDeletePackage(pkg.packageName, 0, receiver);
-            } catch (NameNotFoundException e) {
+            } catch (IllegalArgumentException | NameNotFoundException e) {
             }
         }
         try {
@@ -761,11 +783,6 @@
     }
 
     @LargeTest
-    public void testInstallFwdLockedInternal() throws Exception {
-        sampleInstallFromRawResource(PackageManager.INSTALL_FORWARD_LOCK, true);
-    }
-
-    @LargeTest
     public void testInstallSdcard() throws Exception {
         // Do not run on devices with emulated external storage.
         if (Environment.isExternalStorageEmulated()) {
@@ -869,11 +886,6 @@
     }
 
     @LargeTest
-    public void testReplaceFailFwdLockedInternal() throws Exception {
-        sampleReplaceFromRawResource(PackageManager.INSTALL_FORWARD_LOCK);
-    }
-
-    @LargeTest
     public void testReplaceFailSdcard() throws Exception {
         // Do not run on devices with emulated external storage.
         if (Environment.isExternalStorageEmulated()) {
@@ -889,12 +901,6 @@
     }
 
     @LargeTest
-    public void testReplaceFwdLockedInternal() throws Exception {
-        sampleReplaceFromRawResource(PackageManager.INSTALL_REPLACE_EXISTING
-                | PackageManager.INSTALL_FORWARD_LOCK);
-    }
-
-    @LargeTest
     public void testReplaceSdcard() throws Exception {
         // Do not run on devices with emulated external storage.
         if (Environment.isExternalStorageEmulated()) {
@@ -984,10 +990,11 @@
 
         mContext.registerReceiver(receiver, receiver.filter);
         try {
-            DeleteObserver observer = new DeleteObserver(pkgName);
-
-            getPm().deletePackage(pkgName, observer, flags | PackageManager.DELETE_ALL_USERS);
-            observer.waitForCompletion(MAX_WAIT_TIME);
+            final LocalIntentReceiver localReceiver = new LocalIntentReceiver();
+            getPi().uninstall(pkgName,
+                    flags | PackageManager.DELETE_ALL_USERS,
+                    localReceiver.getIntentSender());
+            localReceiver.getResult();
 
             assertUninstalled(info);
 
@@ -1050,11 +1057,6 @@
     }
 
     @LargeTest
-    public void testDeleteFwdLockedInternal() throws Exception {
-        deleteFromRawResource(PackageManager.INSTALL_FORWARD_LOCK, 0);
-    }
-
-    @LargeTest
     public void testDeleteSdcard() throws Exception {
         // Do not run on devices with emulated external storage.
         if (Environment.isExternalStorageEmulated()) {
@@ -1070,11 +1072,6 @@
     }
 
     @LargeTest
-    public void testDeleteFwdLockedInternalRetainData() throws Exception {
-        deleteFromRawResource(PackageManager.INSTALL_FORWARD_LOCK, PackageManager.DELETE_KEEP_DATA);
-    }
-
-    @LargeTest
     public void testDeleteSdcardRetainData() throws Exception {
         // Do not run on devices with emulated external storage.
         if (Environment.isExternalStorageEmulated()) {
@@ -1342,9 +1339,11 @@
             final ApplicationInfo info = getPm().getApplicationInfo(pkgName,
                     PackageManager.MATCH_UNINSTALLED_PACKAGES);
             if (info != null) {
-                DeleteObserver observer = new DeleteObserver(pkgName);
-                getPm().deletePackage(pkgName, observer, PackageManager.DELETE_ALL_USERS);
-                observer.waitForCompletion(MAX_WAIT_TIME);
+                final LocalIntentReceiver localReceiver = new LocalIntentReceiver();
+                getPi().uninstall(pkgName,
+                        PackageManager.DELETE_ALL_USERS,
+                        localReceiver.getIntentSender());
+                localReceiver.getResult();
                 assertUninstalled(info);
             }
         } catch (IllegalArgumentException | NameNotFoundException e) {
@@ -1380,31 +1379,6 @@
                 0, true, false, -1, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
     }
 
-    @LargeTest
-    public void testManifestInstallLocationFwdLockedFlagSdcard() throws Exception {
-        // Do not run on devices with emulated external storage.
-        if (Environment.isExternalStorageEmulated()) {
-            return;
-        }
-
-        installFromRawResource("install.apk", R.raw.install_loc_unspecified,
-                PackageManager.INSTALL_FORWARD_LOCK |
-                PackageManager.INSTALL_EXTERNAL, true, false, -1,
-                PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL);
-    }
-
-    @LargeTest
-    public void testManifestInstallLocationFwdLockedSdcard() throws Exception {
-        // Do not run on devices with emulated external storage.
-        if (Environment.isExternalStorageEmulated()) {
-            return;
-        }
-
-        installFromRawResource("install.apk", R.raw.install_loc_sdcard,
-                PackageManager.INSTALL_FORWARD_LOCK, true, false, -1,
-                PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL);
-    }
-
     /*
      * Install a package on internal flash via PackageManager install flag. Replace
      * the package via flag to install on sdcard. Make sure the new flag overrides
@@ -1704,20 +1678,6 @@
     }
 
     @LargeTest
-    public void testMoveAppForwardLocked() throws Exception {
-        // Do not run on devices with emulated external storage.
-        if (Environment.isExternalStorageEmulated()) {
-            return;
-        }
-
-        int installFlags = PackageManager.INSTALL_FORWARD_LOCK;
-        int moveFlags = PackageManager.MOVE_EXTERNAL_MEDIA;
-        boolean fail = false;
-        int result = PackageManager.MOVE_SUCCEEDED;
-        sampleMoveFromRawResource(installFlags, moveFlags, fail, result);
-    }
-
-    @LargeTest
     public void testMoveAppFailInternalToExternalDelete() throws Exception {
         // Do not run on devices with emulated external storage.
         if (Environment.isExternalStorageEmulated()) {
@@ -1771,7 +1731,7 @@
             // Try to install and make sure an error code is returned.
             installFromRawResource("install.apk", R.raw.install,
                     PackageManager.INSTALL_EXTERNAL, false,
-                    true, PackageManager.INSTALL_FAILED_MEDIA_UNAVAILABLE,
+                    true, PackageInstaller.STATUS_FAILURE_STORAGE,
                     PackageInfo.INSTALL_LOCATION_AUTO);
         } finally {
             // Restore original media state
@@ -1844,63 +1804,6 @@
     }
 
     /*
-     * Install an app forward-locked.
-     */
-    @LargeTest
-    public void testFlagF() throws Exception {
-        sampleInstallFromRawResource(PackageManager.INSTALL_FORWARD_LOCK, true);
-    }
-
-    /*
-     * Install an app with both internal and external flags set. should fail
-     */
-    @LargeTest
-    public void testFlagIE() throws Exception {
-        installFromRawResource("install.apk", R.raw.install,
-                PackageManager.INSTALL_EXTERNAL | PackageManager.INSTALL_INTERNAL,
-                false,
-                true, PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION,
-                PackageInfo.INSTALL_LOCATION_AUTO);
-    }
-
-    /*
-     * Install an app with both internal and forward-lock flags set.
-     */
-    @LargeTest
-    public void testFlagIF() throws Exception {
-        sampleInstallFromRawResource(PackageManager.INSTALL_FORWARD_LOCK
-                | PackageManager.INSTALL_INTERNAL, true);
-    }
-
-    /*
-     * Install an app with both external and forward-lock flags set.
-     */
-    @LargeTest
-    public void testFlagEF() throws Exception {
-        // Do not run on devices with emulated external storage.
-        if (Environment.isExternalStorageEmulated()) {
-            return;
-        }
-
-        sampleInstallFromRawResource(PackageManager.INSTALL_FORWARD_LOCK
-                | PackageManager.INSTALL_EXTERNAL, true);
-    }
-
-    /*
-     * Install an app with both internal and external flags set with forward
-     * lock. Should fail.
-     */
-    @LargeTest
-    public void testFlagIEF() throws Exception {
-        installFromRawResource("install.apk", R.raw.install,
-                PackageManager.INSTALL_FORWARD_LOCK | PackageManager.INSTALL_INTERNAL |
-                PackageManager.INSTALL_EXTERNAL,
-                false,
-                true, PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION,
-                PackageInfo.INSTALL_LOCATION_AUTO);
-    }
-
-    /*
      * Install an app with both internal and manifest option set.
      * should install on internal.
      */
@@ -1991,55 +1894,6 @@
     }
 
     /*
-     * Install an app with fwd locked flag set and install location set to
-     * internal. should install internally.
-     */
-    @LargeTest
-    public void testFlagFManifestI() throws Exception {
-        installFromRawResource("install.apk", R.raw.install_loc_internal,
-                PackageManager.INSTALL_FORWARD_LOCK,
-                true,
-                false, -1,
-                PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY);
-    }
-
-    /*
-     * Install an app with fwd locked flag set and install location set to
-     * preferExternal. Should install externally.
-     */
-    @LargeTest
-    public void testFlagFManifestE() throws Exception {
-        // Do not run on devices with emulated external storage.
-        if (Environment.isExternalStorageEmulated()) {
-            return;
-        }
-
-        installFromRawResource("install.apk", R.raw.install_loc_sdcard,
-                PackageManager.INSTALL_FORWARD_LOCK,
-                true,
-                false, -1,
-                PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL);
-    }
-
-    /*
-     * Install an app with fwd locked flag set and install location set to auto.
-     * should install externally.
-     */
-    @LargeTest
-    public void testFlagFManifestA() throws Exception {
-        // Do not run on devices with emulated external storage.
-        if (Environment.isExternalStorageEmulated()) {
-            return;
-        }
-
-        installFromRawResource("install.apk", R.raw.install_loc_auto,
-                PackageManager.INSTALL_FORWARD_LOCK,
-                true,
-                false, -1,
-                PackageInfo.INSTALL_LOCATION_AUTO);
-    }
-
-    /*
      * The following test functions verify install location for existing apps.
      * ie existing app can be installed internally or externally. If install
      * flag is explicitly set it should override current location. If manifest location
@@ -2134,48 +1988,6 @@
                 -1);
     }
 
-    @Suppress
-    @LargeTest
-    public void testFlagFExistingI() throws Exception {
-        int iFlags = PackageManager.INSTALL_INTERNAL;
-        int rFlags = PackageManager.INSTALL_FORWARD_LOCK | PackageManager.INSTALL_REPLACE_EXISTING;
-        // First install.
-        installFromRawResource("install.apk", R.raw.install,
-                iFlags,
-                false,
-                false, -1,
-                -1);
-        // Replace now
-        installFromRawResource("install.apk", R.raw.install,
-                rFlags,
-                true,
-                false, -1,
-                -1);
-    }
-
-    @LargeTest
-    public void testFlagFExistingE() throws Exception {
-        // Do not run on devices with emulated external storage.
-        if (Environment.isExternalStorageEmulated()) {
-            return;
-        }
-
-        int iFlags = PackageManager.INSTALL_EXTERNAL;
-        int rFlags = PackageManager.INSTALL_FORWARD_LOCK | PackageManager.INSTALL_REPLACE_EXISTING;
-        // First install.
-        installFromRawResource("install.apk", R.raw.install,
-                iFlags,
-                false,
-                false, -1,
-                -1);
-        // Replace now
-        installFromRawResource("install.apk", R.raw.install,
-                rFlags,
-                true,
-                false, -1,
-                -1);
-    }
-
     /*
      * The following set of tests verify the installation of apps with
      * install location attribute set to internalOnly, preferExternal and auto.
@@ -2905,7 +2717,7 @@
     @LargeTest
     public void testReplaceMatchNoCerts1() throws Exception {
         replaceCerts(APP1_CERT1_CERT2, APP1_CERT3, true, true,
-                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
+                PackageInstaller.STATUS_FAILURE_CONFLICT);
     }
 
     /*
@@ -2915,7 +2727,7 @@
     @LargeTest
     public void testReplaceMatchNoCerts2() throws Exception {
         replaceCerts(APP1_CERT1_CERT2, APP1_CERT3_CERT4, true, true,
-                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
+                PackageInstaller.STATUS_FAILURE_CONFLICT);
     }
 
     /*
@@ -2925,7 +2737,7 @@
     @LargeTest
     public void testReplaceMatchSomeCerts1() throws Exception {
         replaceCerts(APP1_CERT1_CERT2, APP1_CERT1, true, true,
-                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
+                PackageInstaller.STATUS_FAILURE_CONFLICT);
     }
 
     /*
@@ -2935,7 +2747,7 @@
     @LargeTest
     public void testReplaceMatchSomeCerts2() throws Exception {
         replaceCerts(APP1_CERT1_CERT2, APP1_CERT2, true, true,
-                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
+                PackageInstaller.STATUS_FAILURE_CONFLICT);
     }
 
     /*
@@ -2945,7 +2757,7 @@
     @LargeTest
     public void testReplaceMatchMoreCerts() throws Exception {
         replaceCerts(APP1_CERT1, APP1_CERT1_CERT2, true, true,
-                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
+                PackageInstaller.STATUS_FAILURE_CONFLICT);
     }
 
     /*
@@ -2956,7 +2768,7 @@
     @LargeTest
     public void testReplaceMatchMoreCertsReplaceSomeCerts() throws Exception {
         InstallParams ip = replaceCerts(APP1_CERT1, APP1_CERT1_CERT2, false, true,
-                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
+                PackageInstaller.STATUS_FAILURE_CONFLICT);
         try {
             int rFlags = PackageManager.INSTALL_REPLACE_EXISTING;
             installFromRawResource("install.apk", APP1_CERT1, rFlags, false,
@@ -2996,7 +2808,7 @@
      */
     public void testUpgradeKSWithWrongKey() throws Exception {
         replaceCerts(R.raw.keyset_sa_ua, R.raw.keyset_sb_ua, true, true,
-                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
+                PackageInstaller.STATUS_FAILURE_CONFLICT);
     }
 
     /*
@@ -3005,7 +2817,7 @@
      */
     public void testUpgradeKSWithWrongSigningKey() throws Exception {
         replaceCerts(R.raw.keyset_sa_ub, R.raw.keyset_sa_ub, true, true,
-                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
+                PackageInstaller.STATUS_FAILURE_CONFLICT);
     }
 
     /*
@@ -3037,7 +2849,7 @@
      */
     public void testMultipleUpgradeKSWithSigningKey() throws Exception {
         replaceCerts(R.raw.keyset_sau_ub, R.raw.keyset_sa_ua, true, true,
-                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
+                PackageInstaller.STATUS_FAILURE_CONFLICT);
     }
 
     /*
@@ -3471,7 +3283,12 @@
             int rawResId = apk2;
             Uri packageURI = getInstallablePackage(rawResId, outFile);
             PackageParser.Package pkg = parsePackage(packageURI);
-            getPm().deletePackage(pkg.packageName, null, PackageManager.DELETE_ALL_USERS);
+            try {
+                getPi().uninstall(pkg.packageName,
+                        PackageManager.DELETE_ALL_USERS,
+                        null /*statusReceiver*/);
+            } catch (IllegalArgumentException ignore) {
+            }
             // Check signatures now
             int match = mContext.getPackageManager().checkSignatures(
                     ip.pkg.packageName, pkg.packageName);
@@ -3487,7 +3304,7 @@
         String apk1Name = "install1.apk";
 
         installFromRawResource(apk1Name, apk1, 0, false,
-                true, PackageManager.INSTALL_PARSE_FAILED_NO_CERTIFICATES,
+                true, PackageInstaller.STATUS_FAILURE_INVALID,
                 PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
     }
 
@@ -3557,7 +3374,7 @@
         int apk1 = SHARED1_CERT1;
         int apk2 = SHARED2_CERT2;
         boolean fail = true;
-        int retCode = PackageManager.INSTALL_FAILED_SHARED_USER_INCOMPATIBLE;
+        int retCode = PackageInstaller.STATUS_FAILURE_CONFLICT;
         int expMatchResult = -1;
         checkSharedSignatures(apk1, apk2, true, fail, retCode, expMatchResult);
     }
@@ -3571,7 +3388,7 @@
         int apk1 = SHARED1_CERT1_CERT2;
         int apk2 = SHARED2_CERT1;
         boolean fail = true;
-        int retCode = PackageManager.INSTALL_FAILED_SHARED_USER_INCOMPATIBLE;
+        int retCode = PackageInstaller.STATUS_FAILURE_CONFLICT;
         int expMatchResult = -1;
         checkSharedSignatures(apk1, apk2, true, fail, retCode, expMatchResult);
     }
@@ -3585,7 +3402,7 @@
         int apk1 = SHARED1_CERT1_CERT2;
         int apk2 = SHARED2_CERT2;
         boolean fail = true;
-        int retCode = PackageManager.INSTALL_FAILED_SHARED_USER_INCOMPATIBLE;
+        int retCode = PackageInstaller.STATUS_FAILURE_CONFLICT;
         int expMatchResult = -1;
         checkSharedSignatures(apk1, apk2, true, fail, retCode, expMatchResult);
     }
@@ -3604,7 +3421,11 @@
             PackageManager pm = mContext.getPackageManager();
             // Delete app2
             PackageParser.Package pkg = getParsedPackage(apk2Name, apk2);
-            getPm().deletePackage(pkg.packageName, null, PackageManager.DELETE_ALL_USERS);
+            try {
+                getPi().uninstall(
+                        pkg.packageName, PackageManager.DELETE_ALL_USERS, null /*statusReceiver*/);
+            } catch (IllegalArgumentException ignore) {
+            }
             // Check signatures now
             int match = mContext.getPackageManager().checkSignatures(
                     ip1.pkg.packageName, pkg.packageName);
@@ -3640,7 +3461,7 @@
         int apk2 = SHARED2_CERT1_CERT2;
         int rapk1 = SHARED1_CERT1;
         boolean fail = true;
-        int retCode = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
+        int retCode = PackageInstaller.STATUS_FAILURE_CONFLICT;
         checkSharedSignatures(apk1, apk2, false, false, -1, PackageManager.SIGNATURE_MATCH);
         installFromRawResource("install.apk", rapk1, PackageManager.INSTALL_REPLACE_EXISTING, true,
                 fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
@@ -3652,7 +3473,7 @@
         int apk2 = SHARED2_CERT1_CERT2;
         int rapk2 = SHARED2_CERT1;
         boolean fail = true;
-        int retCode = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
+        int retCode = PackageInstaller.STATUS_FAILURE_CONFLICT;
         checkSharedSignatures(apk1, apk2, false, false, -1, PackageManager.SIGNATURE_MATCH);
         installFromRawResource("install.apk", rapk2, PackageManager.INSTALL_REPLACE_EXISTING, true,
                 fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
@@ -3664,7 +3485,7 @@
         int apk2 = SHARED2_CERT1;
         int rapk1 = SHARED1_CERT2;
         boolean fail = true;
-        int retCode = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
+        int retCode = PackageInstaller.STATUS_FAILURE_CONFLICT;
         checkSharedSignatures(apk1, apk2, false, false, -1, PackageManager.SIGNATURE_MATCH);
         installFromRawResource("install.apk", rapk1, PackageManager.INSTALL_REPLACE_EXISTING, true,
                 fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
@@ -3676,7 +3497,7 @@
         int apk2 = SHARED2_CERT1;
         int rapk2 = SHARED2_CERT2;
         boolean fail = true;
-        int retCode = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
+        int retCode = PackageInstaller.STATUS_FAILURE_CONFLICT;
         checkSharedSignatures(apk1, apk2, false, false, -1, PackageManager.SIGNATURE_MATCH);
         installFromRawResource("install.apk", rapk2, PackageManager.INSTALL_REPLACE_EXISTING, true,
                 fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
@@ -3688,7 +3509,7 @@
         int apk2 = SHARED2_CERT1;
         int rapk1 = SHARED1_CERT1_CERT2;
         boolean fail = true;
-        int retCode = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
+        int retCode = PackageInstaller.STATUS_FAILURE_CONFLICT;
         checkSharedSignatures(apk1, apk2, false, false, -1, PackageManager.SIGNATURE_MATCH);
         installFromRawResource("install.apk", rapk1, PackageManager.INSTALL_REPLACE_EXISTING, true,
                 fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
@@ -3700,7 +3521,7 @@
         int apk2 = SHARED2_CERT1;
         int rapk2 = SHARED2_CERT1_CERT2;
         boolean fail = true;
-        int retCode = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
+        int retCode = PackageInstaller.STATUS_FAILURE_CONFLICT;
         checkSharedSignatures(apk1, apk2, false, false, -1, PackageManager.SIGNATURE_MATCH);
         installFromRawResource("install.apk", rapk2, PackageManager.INSTALL_REPLACE_EXISTING, true,
                 fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
@@ -3724,7 +3545,7 @@
 
     @LargeTest
     public void testInstallNonexistentFile() throws Exception {
-        int retCode = PackageManager.INSTALL_FAILED_INVALID_URI;
+        int retCode = PackageInstaller.STATUS_FAILURE_INVALID;
         File invalidFile = new File("/nonexistent-file.apk");
         invokeInstallPackageFail(Uri.fromFile(invalidFile), 0, retCode);
     }
@@ -3845,7 +3666,7 @@
 
     @Suppress
     public void testInstall_BadDex_CleanUp() throws Exception {
-        int retCode = PackageManager.INSTALL_FAILED_DEXOPT;
+        int retCode = PackageInstaller.STATUS_FAILURE_INVALID;
         installFromRawResource("install.apk", R.raw.install_bad_dex, 0, true, true, retCode,
                 PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
     }
diff --git a/core/tests/coretests/src/android/content/pm/PackageParserCacheHelperTest.java b/core/tests/coretests/src/android/content/pm/PackageParserCacheHelperTest.java
new file mode 100644
index 0000000..00be822
--- /dev/null
+++ b/core/tests/coretests/src/android/content/pm/PackageParserCacheHelperTest.java
@@ -0,0 +1,69 @@
+/*
+ * 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.content.pm;
+
+import static org.junit.Assert.assertEquals;
+
+import android.content.pm.PackageParserCacheHelper.ReadHelper;
+import android.content.pm.PackageParserCacheHelper.WriteHelper;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.support.test.runner.AndroidJUnit4;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class PackageParserCacheHelperTest {
+    @Test
+    public void testParcelUnparcel() throws Exception {
+        final Bundle source = new Bundle();
+        source.putInt("i1", 123);
+        source.putString("s1", "abcdef");
+        source.putString("s2", "xyz");
+        source.putString("s3", null);
+
+        final Bundle nest = new Bundle();
+        nest.putString("s1", "xyz");
+        source.putBundle("b1", nest);
+
+        final Parcel p = Parcel.obtain();
+        final WriteHelper writeHelper = new WriteHelper(p);
+
+        source.writeToParcel(p, 0);
+        writeHelper.finishAndUninstall();
+
+        p.setDataPosition(0);
+
+        final ReadHelper readHelper = new ReadHelper(p);
+        readHelper.startAndInstall();
+
+        final Bundle dest = new Bundle();
+        dest.readFromParcel(p);
+
+        dest.size(); // Unparcel so that toString() returns the content.
+
+        assertEquals(source.get("i1"), dest.get("i1"));
+        assertEquals(source.get("s1"), dest.get("s1"));
+        assertEquals(source.get("s2"), dest.get("s2"));
+        assertEquals(source.get("s3"), dest.get("s3"));
+        assertEquals(source.getBundle("b1").get("s1"), dest.getBundle("b1").get("s1"));
+        assertEquals(source.keySet().size(), dest.keySet().size());
+    }
+}
diff --git a/core/tests/coretests/src/android/content/pm/PackageParserTest.java b/core/tests/coretests/src/android/content/pm/PackageParserTest.java
index b9bd193..53f4f3a 100644
--- a/core/tests/coretests/src/android/content/pm/PackageParserTest.java
+++ b/core/tests/coretests/src/android/content/pm/PackageParserTest.java
@@ -19,14 +19,30 @@
 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 android.content.Context;
+import android.content.pm.PackageParser.Component;
+import android.content.pm.PackageParser.Package;
+import android.content.pm.PackageParser.Permission;
 import android.os.Build;
+import android.os.Bundle;
+import android.os.FileUtils;
+import android.os.SystemProperties;
+import android.support.test.InstrumentationRegistry;
 import android.support.test.runner.AndroidJUnit4;
 import android.test.suitebuilder.annotation.SmallTest;
 
+import com.android.frameworks.coretests.R;
+
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.io.File;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.function.Function;
+
 @SmallTest
 @RunWith(AndroidJUnit4.class)
 public class PackageParserTest {
@@ -257,4 +273,178 @@
                 PackageParser.getActivityConfigChanges(configChanges, recreateOnConfigChanges);
         assertEquals(0x0083, finalConfigChanges); // Should be 10000011.
     }
+
+    Package parsePackage(String apkFileName, int apkResourceId) throws Exception {
+        return parsePackage(apkFileName, apkResourceId, p -> p);
+    }
+
+    /**
+     * 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
+     */
+    Package parsePackage(String apkFileName, int apkResourceId,
+            Function<Package, Package> converter) throws Exception {
+        // Copy the resource to a file.
+        Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
+        File outFile = new File(context.getFilesDir(), apkFileName);
+        try {
+            InputStream is = context.getResources().openRawResource(apkResourceId);
+            assertTrue(FileUtils.copyToFile(is, outFile));
+            return converter.apply(new PackageParser().parsePackage(outFile, 0 /* flags */));
+        } finally {
+            outFile.delete();
+        }
+    }
+
+    /**
+     * Asserts basic properties about a component.
+     */
+    private void assertComponent(String className, String packageName, int numIntents,
+            Component<?> component) {
+        assertEquals(className, component.className);
+        assertEquals(packageName, component.owner.packageName);
+        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, Package p) {
+        String packageName = p.packageName;
+
+        assertEquals(1, p.activities.size());
+        assertComponent(String.format(template, "Activity"),
+                packageName, 0 /* intents */, p.activities.get(0));
+        assertEquals(1, p.services.size());
+        assertComponent(String.format(template, "Service"),
+                packageName, 0 /* intents */, p.services.get(0));
+        assertEquals(1, p.providers.size());
+        assertComponent(String.format(template, "Provider"),
+                packageName, 0 /* intents */, p.providers.get(0));
+        assertEquals(1, p.receivers.size());
+        assertComponent(String.format(template, "Receiver"),
+                packageName, 0 /* intents */, p.receivers.get(0));
+    }
+
+    private void assertPermission(String name, String packageName, int protectionLevel,
+            Permission permission) {
+        assertEquals(packageName, permission.owner.packageName);
+        assertEquals(name, permission.info.name);
+        assertEquals(protectionLevel, permission.info.protectionLevel);
+    }
+
+    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<Package, Package> converter) throws Exception {
+        Package 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.packageName);
+        assertEquals(1, p.permissions.size());
+        assertPermission(
+                "com.android.frameworks.coretests.install_complete_package_info.test_permission",
+                packageName, PermissionInfo.PROTECTION_NORMAL, p.permissions.get(0));
+
+        assertOneComponentOfEachType("com.android.frameworks.coretests.Test%s", p);
+
+        assertMetadata(p.mAppMetaData,
+                "key1", "value1",
+                "key2", "this_is_app");
+        assertMetadata(p.activities.get(0).metaData,
+                "key1", "value1",
+                "key2", "this_is_activity");
+        assertMetadata(p.services.get(0).metaData,
+                "key1", "value1",
+                "key2", "this_is_service");
+        assertMetadata(p.receivers.get(0).metaData,
+                "key1", "value1",
+                "key2", "this_is_receiver");
+        assertMetadata(p.providers.get(0).metaData,
+                "key1", "value1",
+                "key2", "this_is_provider");
+    }
+
+    /**
+     * Determines if the current device supports multi-package APKs.
+     */
+    private boolean supportsMultiPackageApk() {
+        return SystemProperties.getBoolean("persist.sys.child_packages_enabled", false);
+    }
+
+    @Test
+    public void testMultiPackageComponents() throws Exception {
+        // TODO(gboyer): Remove once we decide to launch multi-package APKs.
+        if (!supportsMultiPackageApk()) {
+            return;
+        }
+        String parentName = "com.android.frameworks.coretests.install_multi_package";
+        String firstChildName =
+                "com.android.frameworks.coretests.install_multi_package.first_child";
+        String secondChildName =  // NOTE: intentionally inconsistent!
+                "com.android.frameworks.coretests.blah.second_child";
+
+        Package parent = parsePackage("install_multi_package.apk", R.raw.install_multi_package);
+        assertEquals(parentName, parent.packageName);
+        assertEquals(2, parent.childPackages.size());
+        assertOneComponentOfEachType("com.android.frameworks.coretests.Test%s", parent);
+        assertEquals(1, parent.permissions.size());
+        assertPermission(parentName + ".test_permission", parentName,
+                PermissionInfo.PROTECTION_NORMAL, parent.permissions.get(0));
+        assertEquals(Arrays.asList("android.permission.INTERNET"),
+                parent.requestedPermissions);
+
+        Package firstChild = parent.childPackages.get(0);
+        assertEquals(firstChildName, firstChild.packageName);
+        assertOneComponentOfEachType(
+                "com.android.frameworks.coretests.FirstChildTest%s", firstChild);
+        assertEquals(0, firstChild.permissions.size());  // Child APKs cannot declare permissions.
+        assertEquals(Arrays.asList("android.permission.NFC"),
+                firstChild.requestedPermissions);
+
+        Package secondChild = parent.childPackages.get(1);
+        assertEquals(secondChildName, secondChild.packageName);
+        assertOneComponentOfEachType(
+                "com.android.frameworks.coretests.SecondChildTest%s", secondChild);
+        assertEquals(0, secondChild.permissions.size());  // Child APKs cannot declare permissions.
+        assertEquals(
+                Arrays.asList(
+                        "android.permission.ACCESS_NETWORK_STATE",
+                        "android.permission.READ_CONTACTS"),
+                secondChild.requestedPermissions);
+    }
 }
diff --git a/core/tests/coretests/src/android/content/pm/ParceledListSliceTest.java b/core/tests/coretests/src/android/content/pm/ParceledListSliceTest.java
index 5dd3c2c..a9d19b4 100644
--- a/core/tests/coretests/src/android/content/pm/ParceledListSliceTest.java
+++ b/core/tests/coretests/src/android/content/pm/ParceledListSliceTest.java
@@ -2,9 +2,11 @@
 
 import android.os.Parcel;
 import android.os.Parcelable;
+
 import junit.framework.TestCase;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 public class ParceledListSliceTest extends TestCase {
@@ -91,15 +93,10 @@
         }
     }
 
-    public void testStringList() throws Exception {
-        final int objectCount = 400;
-        List<String> list = new ArrayList<String>();
-        for (long i = 0; i < objectCount; i++) {
-            list.add(Long.toString(i * (6 - i)));
-        }
-
+    private void sendParcelStringList(List<String> list) {
         StringParceledListSlice slice;
         Parcel parcel = Parcel.obtain();
+
         try {
             parcel.writeParcelable(new StringParceledListSlice(list), 0);
             parcel.setDataPosition(0);
@@ -113,6 +110,26 @@
         assertEquals(list, slice.getList());
     }
 
+    public void testStringList() throws Exception {
+        final int objectCount = 400;
+        List<String> list = new ArrayList<String>();
+        for (long i = 0; i < objectCount; i++) {
+            list.add(Long.toString(i * (6 - i)));
+        }
+
+        sendParcelStringList(list);
+    }
+
+    public void testLargeStringList() throws Exception {
+        final int thresholdBytes = 256 * 1024;
+        final String value = Long.toString(Long.MAX_VALUE);
+        final int objectCount = 2 * thresholdBytes / value.length();
+        final List<String> list = Collections.nCopies(objectCount, value);
+
+        sendParcelStringList(list);
+    }
+
+
     /**
      * Test that only homogeneous elements may be unparceled.
      */
diff --git a/core/tests/coretests/src/android/database/DatabaseGeneralTest.java b/core/tests/coretests/src/android/database/DatabaseGeneralTest.java
index c7cb43d..335cea7 100644
--- a/core/tests/coretests/src/android/database/DatabaseGeneralTest.java
+++ b/core/tests/coretests/src/android/database/DatabaseGeneralTest.java
@@ -18,12 +18,15 @@
 
 import static android.database.DatabaseUtils.InsertHelper.TABLE_INFO_PRAGMA_COLUMNNAME_INDEX;
 import static android.database.DatabaseUtils.InsertHelper.TABLE_INFO_PRAGMA_DEFAULT_INDEX;
+
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDebug;
 import android.database.sqlite.SQLiteException;
-import android.os.Handler;
 import android.os.Parcel;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.uiautomator.UiDevice;
 import android.test.AndroidTestCase;
 import android.test.PerformanceTestCase;
 import android.test.suitebuilder.annotation.LargeTest;
@@ -40,6 +43,9 @@
 import java.util.List;
 import java.util.Locale;
 
+/**
+ * Usage:  bit FrameworksCoreTests:android.database.DatabaseGeneralTest
+ */
 public class DatabaseGeneralTest extends AndroidTestCase implements PerformanceTestCase {
     private static final String TAG = "DatabaseGeneralTest";
 
@@ -68,7 +74,7 @@
     @Override
     protected void tearDown() throws Exception {
         mDatabase.close();
-        mDatabaseFile.delete();
+        SQLiteDatabase.deleteDatabase(mDatabaseFile);
         super.tearDown();
     }
 
@@ -1044,6 +1050,52 @@
         }
     }
 
+    @SmallTest
+    public void testOpenDatabaseLookasideConfig() {
+        // First check that lookaside is active
+        verifyLookasideStats(false);
+        // Reopen test db with lookaside disabled
+        mDatabase.close();
+        SQLiteDatabase.OpenParams params = new SQLiteDatabase.OpenParams.Builder()
+                .setLookasideConfig(0, 0).build();
+        mDatabase = SQLiteDatabase.openDatabase(mDatabaseFile, params);
+        verifyLookasideStats(true);
+    }
+
+    @SmallTest
+    public void testOpenParamsSetLookasideConfigValidation() {
+        try {
+            SQLiteDatabase.OpenParams params = new SQLiteDatabase.OpenParams.Builder()
+                    .setLookasideConfig(-1, 0).build();
+            fail("Negative slot size should be rejected");
+        } catch (IllegalArgumentException expected) {
+        }
+        try {
+            SQLiteDatabase.OpenParams params = new SQLiteDatabase.OpenParams.Builder()
+                    .setLookasideConfig(0, -10).build();
+            fail("Negative slot count should be rejected");
+        } catch (IllegalArgumentException expected) {
+        }
+    }
+
+    void verifyLookasideStats(boolean expectDisabled) {
+        boolean dbStatFound = false;
+        SQLiteDebug.PagerStats info = SQLiteDebug.getDatabaseInfo();
+        for (SQLiteDebug.DbStats dbStat : info.dbStats) {
+            if (dbStat.dbName.endsWith(mDatabaseFile.getName())) {
+                dbStatFound = true;
+                Log.i(TAG, "Lookaside for " + dbStat.dbName + " " + dbStat.lookaside);
+                if (expectDisabled) {
+                    assertTrue("lookaside slots count should be zero", dbStat.lookaside == 0);
+                } else {
+                    assertTrue("lookaside slots count should be greater than zero",
+                            dbStat.lookaside > 0);
+                }
+            }
+        }
+        assertTrue("No dbstat found for " + mDatabaseFile.getName(), dbStatFound);
+    }
+
     @LargeTest
     public void testDefaultDatabaseErrorHandler() {
         DefaultDatabaseErrorHandler errorHandler = new DefaultDatabaseErrorHandler();
@@ -1135,4 +1187,38 @@
             fail("unexpected");
         }
     }
+
+    @MediumTest
+    public void testCloseIdleConnection() throws Exception {
+        mDatabase.close();
+        SQLiteDatabase.OpenParams params = new SQLiteDatabase.OpenParams.Builder()
+                .setIdleConnectionTimeout(1000).build();
+        mDatabase = SQLiteDatabase.openDatabase(mDatabaseFile, params);
+        // Wait a bit and check that connection is still open
+        Thread.sleep(100);
+        String output = executeShellCommand("dumpsys dbinfo " + getContext().getPackageName());
+        assertTrue("Connection #0 should be open. Output: " + output,
+                output.contains("Connection #0:"));
+
+        // Now cause idle timeout and check that connection is closed
+        Thread.sleep(1000);
+        output = executeShellCommand("dumpsys dbinfo " + getContext().getPackageName());
+        assertFalse("Connection #0 should be closed. Output: " + output,
+                output.contains("Connection #0:"));
+    }
+
+    @SmallTest
+    public void testSetIdleConnectionTimeoutValidation() throws Exception {
+        try {
+            new SQLiteDatabase.OpenParams.Builder().setIdleConnectionTimeout(-1).build();
+            fail("Negative timeout should be rejected");
+        } catch (IllegalArgumentException expected) {
+        }
+    }
+
+    private String executeShellCommand(String cmd) throws Exception {
+        return UiDevice.getInstance(
+                InstrumentationRegistry.getInstrumentation()).executeShellCommand(cmd);
+    }
+
 }
diff --git a/core/tests/coretests/src/android/database/DatabasePerformanceTests.java b/core/tests/coretests/src/android/database/DatabasePerformanceTests.java
deleted file mode 100644
index d0e739b..0000000
--- a/core/tests/coretests/src/android/database/DatabasePerformanceTests.java
+++ /dev/null
@@ -1,1354 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.database;
-
-import junit.framework.Assert;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.provider.Contacts;
-import android.provider.Contacts.People;
-import android.test.PerformanceTestCase;
-import android.test.TestCase;
-
-import java.io.File;
-import java.util.Random;
-
-/**
- * Database Performance Tests
- * 
- */
-
-@SuppressWarnings("deprecation")
-public class DatabasePerformanceTests {
-
-    public static String[] children() {
-        return new String[] {
-            ContactReadingTest1.class.getName(),
-            Perf1Test.class.getName(),
-            Perf2Test.class.getName(),
-            Perf3Test.class.getName(),
-            Perf4Test.class.getName(),
-            Perf5Test.class.getName(),
-            Perf6Test.class.getName(),
-            Perf7Test.class.getName(),
-            Perf8Test.class.getName(),
-            Perf9Test.class.getName(),
-            Perf10Test.class.getName(),
-            Perf11Test.class.getName(),
-            Perf12Test.class.getName(),
-            Perf13Test.class.getName(),
-            Perf14Test.class.getName(),
-            Perf15Test.class.getName(),
-            Perf16Test.class.getName(),
-            Perf17Test.class.getName(),
-            Perf18Test.class.getName(),
-            Perf19Test.class.getName(),
-            Perf20Test.class.getName(),
-            Perf21Test.class.getName(),
-            Perf22Test.class.getName(),
-            Perf23Test.class.getName(),
-            Perf24Test.class.getName(),
-            Perf25Test.class.getName(),
-            Perf26Test.class.getName(),
-            Perf27Test.class.getName(),
-            Perf28Test.class.getName(),
-            Perf29Test.class.getName(),
-            Perf30Test.class.getName(),
-            Perf31Test.class.getName(),
-            };
-    }
-       
-    public static abstract class PerformanceBase implements TestCase,
-            PerformanceTestCase {
-        protected static final int CURRENT_DATABASE_VERSION = 42;
-        protected SQLiteDatabase mDatabase;
-        protected File mDatabaseFile;
-        protected Context mContext;
-
-        public void setUp(Context c) {
-            mContext = c;
-            mDatabaseFile = new File("/tmp", "perf_database_test.db");
-            if (mDatabaseFile.exists()) {
-                mDatabaseFile.delete();
-            }
-            mDatabase = SQLiteDatabase.openOrCreateDatabase(mDatabaseFile.getPath(), null);
-            Assert.assertTrue(mDatabase != null);
-            mDatabase.setVersion(CURRENT_DATABASE_VERSION);
-        }
-
-        public void tearDown() {
-            mDatabase.close();
-            mDatabaseFile.delete();
-        }
-
-        public boolean isPerformanceOnly() {
-            return true;
-        }
-
-        // These test can only be run once.
-        public int startPerformance(Intermediates intermediates) {
-            return 0;
-        }
-
-        public void run() {
-        }
-
-        public String numberName(int number) {
-            String result = "";
-
-            if (number >= 1000) {
-                result += numberName((number / 1000)) + " thousand";
-                number = (number % 1000);
-
-                if (number > 0) result += " ";
-            }
-
-            if (number >= 100) {
-                result += ONES[(number / 100)] + " hundred";
-                number = (number % 100);
-
-                if (number > 0) result += " ";
-            }
-
-            if (number >= 20) {
-                result += TENS[(number / 10)];
-                number = (number % 10);
-
-                if (number > 0) result += " ";
-            }
-
-            if (number > 0) {
-                result += ONES[number];
-            }
-
-            return result;
-        }
-    }
-
-    /**
-     * Test reading all contact data.
-     */
-    public static class ContactReadingTest1 implements TestCase, PerformanceTestCase {
-        private static final String[] PEOPLE_PROJECTION = new String[] {
-               Contacts.People._ID, // 0
-               Contacts.People.PRIMARY_PHONE_ID, // 1
-               Contacts.People.TYPE, // 2
-               Contacts.People.NUMBER, // 3
-               Contacts.People.LABEL, // 4
-               Contacts.People.NAME, // 5
-               Contacts.People.PRESENCE_STATUS, // 6
-        };
-
-        private Cursor mCursor;
-
-        public void setUp(Context c) {
-            mCursor = c.getContentResolver().query(People.CONTENT_URI, PEOPLE_PROJECTION, null,
-                    null, People.DEFAULT_SORT_ORDER);
-        }
-        
-        public void tearDown() {
-            mCursor.close();
-        }
-
-        public boolean isPerformanceOnly() {
-            return true;
-        }
-
-        public int startPerformance(Intermediates intermediates) {
-            // This test can only be run once.
-            return 0;
-        }
-
-        public void run() {
-            while (mCursor.moveToNext()) {
-                // Read out all of the data
-                mCursor.getLong(0);
-                mCursor.getLong(1);
-                mCursor.getLong(2);
-                mCursor.getString(3);
-                mCursor.getString(4);
-                mCursor.getString(5);
-                mCursor.getLong(6);
-            }
-        }
-    }
-    
-    /**
-     * Test 1000 inserts
-     */
-    
-    public static class Perf1Test extends PerformanceBase {
-        private static final int SIZE = 1000;
-
-        private String[] statements = new String[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                statements[i] =
-                        "INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                                + numberName(r) + "')";
-            }
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.execSQL(statements[i]);
-            }
-        }
-    }
-
-    /**
-     * Test 1000 inserts into and indexed table
-     */
-    
-    public static class Perf2Test extends PerformanceBase {
-        private static final int SIZE = 1000;
-
-        private String[] statements = new String[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                statements[i] =
-                        "INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                                + numberName(r) + "')";
-            }
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase.execSQL("CREATE INDEX i1c ON t1(c)");
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.execSQL(statements[i]);
-            }
-        }
-    }
-
-    /**
-     * 100 SELECTs without an index
-     */
-      
-    public static class Perf3Test extends PerformanceBase {
-        private static final int SIZE = 100;
-        private static final String[] COLUMNS = {"count(*)", "avg(b)"};
-
-        private String[] where = new String[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                int lower = i * 100;
-                int upper = (i + 10) * 100;
-                where[i] = "b >= " + lower + " AND b < " + upper;
-            }
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase
-                        .query("t1", COLUMNS, where[i], null, null, null, null);
-            }
-        }
-    }
-
-    /**
-     * 100 SELECTs on a string comparison
-     */
-    
-    public static class Perf4Test extends PerformanceBase {
-        private static final int SIZE = 100;
-        private static final String[] COLUMNS = {"count(*)", "avg(b)"};
-
-        private String[] where = new String[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                where[i] = "c LIKE '" + numberName(i) + "'";
-            }
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase
-                        .query("t1", COLUMNS, where[i], null, null, null, null);
-            }
-        }
-    }
-
-    /**
-     * 100 SELECTs with an index
-     */
-    
-    public static class Perf5Test extends PerformanceBase {
-        private static final int SIZE = 100;
-        private static final String[] COLUMNS = {"count(*)", "avg(b)"};
-
-        private String[] where = new String[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                int lower = i * 100;
-                int upper = (i + 10) * 100;
-                where[i] = "b >= " + lower + " AND b < " + upper;
-            }
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase
-                        .query("t1", COLUMNS, where[i], null, null, null, null);
-            }
-        }
-    }
-
-    /**
-     *  INNER JOIN without an index
-     */
-    
-    public static class Perf6Test extends PerformanceBase {
-        private static final int SIZE = 100;
-        private static final String[] COLUMNS = {"t1.a"};
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase
-              .execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-        }
-
-        @Override
-        public void run() {
-            mDatabase.query("t1 INNER JOIN t2 ON t1.b = t2.b", COLUMNS, null,
-                    null, null, null, null);
-        }
-    }
-
-    /**
-     *  INNER JOIN without an index on one side
-     */
-    
-    public static class Perf7Test extends PerformanceBase {
-        private static final int SIZE = 100;
-        private static final String[] COLUMNS = {"t1.a"};
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase
-              .execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
-
-            mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-        }
-
-        @Override
-        public void run() {
-            mDatabase.query("t1 INNER JOIN t2 ON t1.b = t2.b", COLUMNS, null,
-                    null, null, null, null);
-        }
-    }
-
-    /**
-     *  INNER JOIN without an index on one side
-     */
-    
-    public static class Perf8Test extends PerformanceBase {
-        private static final int SIZE = 100;
-        private static final String[] COLUMNS = {"t1.a"};
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase
-              .execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
-
-            mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-        }
-
-        @Override
-        public void run() {
-            mDatabase.query("t1 INNER JOIN t2 ON t1.c = t2.c", COLUMNS, null,
-                    null, null, null, null);
-        }
-    }
-
-    /**
-     *  100 SELECTs with subqueries. Subquery is using an index
-     */
-    
-    public static class Perf9Test extends PerformanceBase {
-        private static final int SIZE = 100;
-        private static final String[] COLUMNS = {"t1.a"};
-
-        private String[] where = new String[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase
-              .execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
-
-            mDatabase.execSQL("CREATE INDEX i2b ON t2(b)");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                int lower = i * 100;
-                int upper = (i + 10) * 100;
-                where[i] =
-                        "t1.b IN (SELECT t2.b FROM t2 WHERE t2.b >= " + lower
-                                + " AND t2.b < " + upper + ")";
-            }
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase
-                        .query("t1", COLUMNS, where[i], null, null, null, null);
-            }
-        }
-    }
-
-    /**
-     *  100 SELECTs on string comparison with Index
-     */
-
-    public static class Perf10Test extends PerformanceBase {
-        private static final int SIZE = 100;
-        private static final String[] COLUMNS = {"count(*)", "avg(b)"};
-
-        private String[] where = new String[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase.execSQL("CREATE INDEX i3c ON t1(c)");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                where[i] = "c LIKE '" + numberName(i) + "'";
-            }
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase
-                        .query("t1", COLUMNS, where[i], null, null, null, null);
-            }
-        }
-    }
-
-    /**
-     *  100 SELECTs on integer 
-     */
-    
-    public static class Perf11Test extends PerformanceBase {
-        private static final int SIZE = 100;
-        private static final String[] COLUMNS = {"b"};
-
-        private String[] where = new String[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.query("t1", COLUMNS, null, null, null, null, null);
-            }
-        }
-    }
-
-    /**
-     *  100 SELECTs on String
-     */
-
-    public static class Perf12Test extends PerformanceBase {
-        private static final int SIZE = 100;
-        private static final String[] COLUMNS = {"c"};
-
-        private String[] where = new String[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.query("t1", COLUMNS, null, null, null, null, null);
-            }
-        }
-    }
-
-    /**
-     *  100 SELECTs on integer with index
-     */
-    
-    public static class Perf13Test extends PerformanceBase {
-        private static final int SIZE = 100;
-        private static final String[] COLUMNS = {"b"};
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase.execSQL("CREATE INDEX i1b on t1(b)");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.query("t1", COLUMNS, null, null, null, null, null);
-            }
-        }
-    }
-
-    /**
-     *  100 SELECTs on String with index
-     */
-
-    public static class Perf14Test extends PerformanceBase {
-        private static final int SIZE = 100;
-        private static final String[] COLUMNS = {"c"};      
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase.execSQL("CREATE INDEX i1c ON t1(c)");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.query("t1", COLUMNS, null, null, null, null, null);
-            }
-        }
-    }
-
-    /**
-     *  100 SELECTs on String with starts with
-     */
-
-    public static class Perf15Test extends PerformanceBase {
-        private static final int SIZE = 100;
-        private static final String[] COLUMNS = {"c"};
-        private String[] where = new String[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase.execSQL("CREATE INDEX i1c ON t1(c)");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                where[i] = "c LIKE '" + numberName(r).substring(0, 1) + "*'";
-
-            }
-
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase
-                        .query("t1", COLUMNS, where[i], null, null, null, null);
-            }
-        }
-    }
-
-    /**
-     *  1000  Deletes on an indexed table
-     */
-    
-    public static class Perf16Test extends PerformanceBase {
-        private static final int SIZE = 1000;
-        private static final String[] COLUMNS = {"c"};
-        
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase.execSQL("CREATE INDEX i3c ON t1(c)");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.delete("t1", null, null);
-            }
-        }
-    }
-
-    /**
-     *  1000  Deletes
-     */
-    
-    public static class Perf17Test extends PerformanceBase {
-        private static final int SIZE = 1000;
-        private static final String[] COLUMNS = {"c"};       
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.delete("t1", null, null);
-            }
-        }
-    }
-
-    /**
-     *  1000 DELETE's without an index with where clause 
-     */
-    
-    public static class Perf18Test extends PerformanceBase {
-        private static final int SIZE = 1000;
-        private String[] where = new String[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                int lower = i * 100;
-                int upper = (i + 10) * 100;
-                where[i] = "b >= " + lower + " AND b < " + upper;
-            }
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.delete("t1", where[i], null);
-            }
-        }
-    }
-
-    /**
-     *  1000 DELETE's with an index with where clause 
-     */
-    
-    public static class Perf19Test extends PerformanceBase {
-        private static final int SIZE = 1000;
-        private String[] where = new String[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                int lower = i * 100;
-                int upper = (i + 10) * 100;
-                where[i] = "b >= " + lower + " AND b < " + upper;
-            }
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.delete("t1", where[i], null);
-            }
-        }
-    }
-
-    /**
-     *  1000 update's with an index with where clause 
-     */
-    
-    public static class Perf20Test extends PerformanceBase {
-        private static final int SIZE = 1000;
-        private String[] where = new String[SIZE];
-        ContentValues[] mValues = new ContentValues[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-
-                int lower = i * 100;
-                int upper = (i + 10) * 100;
-                where[i] = "b >= " + lower + " AND b < " + upper;
-                ContentValues b = new ContentValues(1);
-                b.put("b", upper);
-                mValues[i] = b;
-               
-            }
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.update("t1", mValues[i], where[i], null);
-            }
-        }
-    }
-
-    /**
-     *  1000 update's without an index with where clause 
-     */
-    
-    public static class Perf21Test extends PerformanceBase {
-        private static final int SIZE = 1000;       
-        private String[] where = new String[SIZE];
-        ContentValues[] mValues = new ContentValues[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-           
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-
-                int lower = i * 100;
-                int upper = (i + 10) * 100;
-                where[i] = "b >= " + lower + " AND b < " + upper;
-                ContentValues b = new ContentValues(1);
-                b.put("b", upper);
-                mValues[i] = b;
-            }
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.update("t1", mValues[i], where[i], null);
-            }
-        }
-    }
-    
-    /**
-     *  10000 inserts for an integer 
-     */
-    
-    public static class Perf22Test extends PerformanceBase {
-        private static final int SIZE = 10000;
-        ContentValues[] mValues = new ContentValues[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER)");
-           
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                ContentValues b = new ContentValues(1);
-                b.put("a", r);
-                mValues[i] = b;
-            }
-        }        
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.insert("t1", null, mValues[i]);
-            }
-        }
-    }
-    
-    /**
-     *  10000 inserts for an integer -indexed table
-     */
-    
-    public static class Perf23Test extends PerformanceBase {
-        private static final int SIZE = 10000;
-        ContentValues[] mValues = new ContentValues[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a INTEGER)");
-            mDatabase.execSQL("CREATE INDEX i1a ON t1(a)");
-           
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                ContentValues b = new ContentValues(1);
-                b.put("a", r);
-                mValues[i] = b;
-            }
-        }        
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.insert("t1", null, mValues[i]);
-            }
-        }
-    }
-    
-    /**
-     *  10000 inserts for a String 
-     */
-    
-    public static class Perf24Test extends PerformanceBase {
-        private static final int SIZE = 10000;
-        ContentValues[] mValues = new ContentValues[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a VARCHAR(100))");
-           
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                ContentValues b = new ContentValues(1);
-                b.put("a", numberName(r));
-                mValues[i] = b;
-            }
-        }        
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.insert("t1", null, mValues[i]);
-            }
-        }
-    }
-    
-    /**
-     *  10000 inserts for a String - indexed table 
-     */
-    
-    public static class Perf25Test extends PerformanceBase {
-        private static final int SIZE = 10000;       
-        ContentValues[] mValues = new ContentValues[SIZE];
-
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t1(a VARCHAR(100))");
-            mDatabase.execSQL("CREATE INDEX i1a ON t1(a)");
-                       
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                ContentValues b = new ContentValues(1);
-                b.put("a", numberName(r));
-                mValues[i] = b; 
-            }
-        }
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.insert("t1", null, mValues[i]);
-            }
-        }
-    }
-    
-    
-    /**
-     *  10000 selects for a String -starts with
-     */
-    
-    public static class Perf26Test extends PerformanceBase {
-        private static final int SIZE = 10000;
-        private static final String[] COLUMNS = {"t3.a"};
-        private String[] where = new String[SIZE];
-        
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t3(a VARCHAR(100))");
-                                  
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t3 VALUES('"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                where[i] = "a LIKE '" + numberName(r).substring(0, 1) + "*'";
-
-            }
-        }        
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.query("t3", COLUMNS, where[i], null, null, null, null);
-            }
-        }
-    }
-    
-    /**
-     *  10000 selects for a String - indexed table -starts with
-     */
-    
-    public static class Perf27Test extends PerformanceBase {
-        private static final int SIZE = 10000;
-        private static final String[] COLUMNS = {"t3.a"};
-        private String[] where = new String[SIZE];
-        
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t3(a VARCHAR(100))");
-            mDatabase.execSQL("CREATE INDEX i3a ON t3(a)");
-                       
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t3 VALUES('"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                where[i] = "a LIKE '" + numberName(r).substring(0, 1) + "*'";
-
-            }                              
-           }        
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.query("t3", COLUMNS, where[i], null, null, null, null);
-            }
-        }
-    }
-    
-    /**
-     *  10000 selects for an integer -
-     */
-    
-    public static class Perf28Test extends PerformanceBase {
-        private static final int SIZE = 10000;
-        private static final String[] COLUMNS = {"t4.a"};
-        private String[] where = new String[SIZE];
-        
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t4(a INTEGER)");
-           
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t4 VALUES(" + r + ")");
-                int lower = i * 100;
-                int upper = (i + 10) * 100;
-                where[i] = "a >= " + lower + " AND a < " + upper;
-            }
-           }        
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.query("t4", COLUMNS, where[i], null, null, null, null);
-            }
-        }
-    }
-    
-    /**
-     *  10000 selects for an integer -indexed table
-     */
-    
-    public static class Perf29Test extends PerformanceBase {
-        private static final int SIZE = 10000;
-        private static final String[] COLUMNS = {"t4.a"};
-        private String[] where = new String[SIZE];
-       
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t4(a INTEGER)");
-           mDatabase.execSQL("CREATE INDEX i4a ON t4(a)");
-           
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t4 VALUES(" + r + ")");
-                
-                int lower = i * 100;
-                int upper = (i + 10) * 100;
-                where[i] = "a >= " + lower + " AND a < " + upper;
-            }
-           
-           }        
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.query("t4", COLUMNS, where[i], null, null, null, null);
-            }
-        }
-    }
-    
-    
-    /**
-     *  10000 selects for a String - contains 'e'
-     */
-    
-    public static class Perf30Test extends PerformanceBase {
-        private static final int SIZE = 10000;
-        private static final String[] COLUMNS = {"t3.a"};
-        private String[] where = new String[SIZE];
-        
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t3(a VARCHAR(100))");
-            
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t3 VALUES('"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                 where[i] = "a LIKE '*e*'";
-
-            }                              
-           }        
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.query("t3", COLUMNS, where[i], null, null, null, null);
-            }
-        }
-    }
-    
-    /**
-     *  10000 selects for a String - contains 'e'-indexed table
-     */
-    
-    public static class Perf31Test extends PerformanceBase {
-        private static final int SIZE = 10000;
-        private static final String[] COLUMNS = {"t3.a"};
-        private String[] where = new String[SIZE];
-        
-        @Override
-        public void setUp(Context c) {
-            super.setUp(c);
-            Random random = new Random(42);
-
-            mDatabase
-              .execSQL("CREATE TABLE t3(a VARCHAR(100))");
-            mDatabase.execSQL("CREATE INDEX i3a ON t3(a)");
-            
-            for (int i = 0; i < SIZE; i++) {
-                int r = random.nextInt(100000);
-                mDatabase.execSQL("INSERT INTO t3 VALUES('"
-                        + numberName(r) + "')");
-            }
-
-            for (int i = 0; i < SIZE; i++) {
-                where[i] = "a LIKE '*e*'";
-
-            }                              
-            
-           }        
-
-        @Override
-        public void run() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.query("t3", COLUMNS, where[i], null, null, null, null);
-            }
-        }
-    }
-    
-    public static final String[] ONES =
-            {"zero", "one", "two", "three", "four", "five", "six", "seven",
-                "eight", "nine", "ten", "eleven", "twelve", "thirteen",
-                "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
-                "nineteen"};
-
-    public static final String[] TENS =
-            {"", "ten", "twenty", "thirty", "forty", "fifty", "sixty",
-                "seventy", "eighty", "ninety"};
-}
diff --git a/core/tests/coretests/src/android/database/NewDatabasePerformanceTestSuite.java b/core/tests/coretests/src/android/database/NewDatabasePerformanceTestSuite.java
index c9db034..6156692 100644
--- a/core/tests/coretests/src/android/database/NewDatabasePerformanceTestSuite.java
+++ b/core/tests/coretests/src/android/database/NewDatabasePerformanceTestSuite.java
@@ -23,6 +23,7 @@
         TestSuite suite =
           new TestSuite(NewDatabasePerformanceTestSuite.class.getName());
 
+        suite.addTestSuite(NewDatabasePerformanceTests.CreateTable100.class);
         suite.addTestSuite(NewDatabasePerformanceTests.Insert100.class);
         suite.addTestSuite(NewDatabasePerformanceTests.InsertIndexed100.class);
         suite.addTestSuite(NewDatabasePerformanceTests.Select100.class);
diff --git a/core/tests/coretests/src/android/database/NewDatabasePerformanceTests.java b/core/tests/coretests/src/android/database/NewDatabasePerformanceTests.java
index f8d8e5e..75809c0 100644
--- a/core/tests/coretests/src/android/database/NewDatabasePerformanceTests.java
+++ b/core/tests/coretests/src/android/database/NewDatabasePerformanceTests.java
@@ -18,53 +18,96 @@
 
 import android.content.ContentValues;
 import android.database.sqlite.SQLiteDatabase;
+import android.os.SystemProperties;
 import android.test.PerformanceTestCase;
+import android.util.ArrayMap;
 import android.util.Log;
 
 import junit.framework.TestCase;
 
 import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.List;
+import java.util.Map;
 import java.util.Random;
 
 /**
- * Database Performance Tests
- * 
+ * Database Performance Tests.
+ *
+ * <p>Usage:
+ * <code>./frameworks/base/core/tests/coretests/src/android/database/run_newdb_perf_test.sh</code>
+ * <p>Test with WAL journaling enabled:
+ * <code>setprop debug.NewDatabasePerformanceTests.enable_wal 1</code>
  */
-
 public class NewDatabasePerformanceTests {
     private static final String TAG = "NewDatabasePerformanceTests";
 
-    // Edit this to change the test run times.  The original is 100.
-    private static final int SIZE_MULTIPLIER = 100;
+    private static final boolean DEBUG_ENABLE_WAL = SystemProperties
+            .getBoolean("debug.NewDatabasePerformanceTests.enable_wal", false);
+
+    private static final int DATASET_SIZE = 100; // Size of dataset to use for testing
+    private static final int FAST_OP_MULTIPLIER = 25;
+    private static final int FAST_OP_COUNT = FAST_OP_MULTIPLIER * DATASET_SIZE;
+
+    private static Long sInitialWriteBytes;
+
+    static {
+        sInitialWriteBytes = getIoStats().get("write_bytes");
+        if (DEBUG_ENABLE_WAL) {
+            Log.i(TAG, "Testing with WAL enabled");
+        }
+    }
 
     public static class PerformanceBase extends TestCase
-    implements PerformanceTestCase {
+            implements PerformanceTestCase {
         protected static final int CURRENT_DATABASE_VERSION = 42;
         protected SQLiteDatabase mDatabase;
         protected File mDatabaseFile;
         private long mSetupFinishedTime;
+        private Long mSetupWriteBytes;
 
         public void setUp() {
             long setupStarted = System.currentTimeMillis();
             mDatabaseFile = new File("/sdcard", "perf_database_test.db");
             if (mDatabaseFile.exists()) {
-                mDatabaseFile.delete();
+                SQLiteDatabase.deleteDatabase(mDatabaseFile);
             }
-            mDatabase =
-                    SQLiteDatabase.openOrCreateDatabase(mDatabaseFile.getPath(),
-                            null);
-            assertTrue(mDatabase != null);
+            SQLiteDatabase.OpenParams.Builder params = new SQLiteDatabase.OpenParams.Builder();
+            params.addOpenFlags(SQLiteDatabase.CREATE_IF_NECESSARY);
+            if (DEBUG_ENABLE_WAL) {
+                params.addOpenFlags(SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING);
+            }
+            mDatabase = SQLiteDatabase.openDatabase(mDatabaseFile, params.build());
+            if (DEBUG_ENABLE_WAL) {
+                assertTrue("Cannot enable WAL", mDatabase.isWriteAheadLoggingEnabled());
+            }
             mDatabase.setVersion(CURRENT_DATABASE_VERSION);
+            mDatabase.beginTransactionNonExclusive();
+            prepareForTest();
+            mDatabase.setTransactionSuccessful();
+            mDatabase.endTransaction();
             mSetupFinishedTime = System.currentTimeMillis();
             Log.i(TAG, "Setup for " + getClass().getSimpleName() + " took "
                     + (mSetupFinishedTime - setupStarted) + " ms");
+            mSetupWriteBytes = getIoStats().get("write_bytes");
+        }
+
+        protected void prepareForTest() {
         }
 
         public void tearDown() {
             long duration = System.currentTimeMillis() - mSetupFinishedTime;
             Log.i(TAG, "Test " + getClass().getSimpleName() + " took " + duration + " ms");
             mDatabase.close();
-            mDatabaseFile.delete();
+            SQLiteDatabase.deleteDatabase(mDatabaseFile);
+            Long writeBytes = getIoStats().get("write_bytes");
+            if (writeBytes != null && sInitialWriteBytes != null) {
+                long testWriteBytes = writeBytes - mSetupWriteBytes;
+                long totalWriteBytes = (writeBytes - sInitialWriteBytes);
+                Log.i(TAG, "Test " + getClass().getSimpleName() + " write_bytes=" + testWriteBytes
+                        + ". Since tests started - totalWriteBytes=" + totalWriteBytes);
+            }
         }
 
         public boolean isPerformanceOnly() {
@@ -76,7 +119,7 @@
             return 0;
         }
 
-        public String numberName(int number) {
+        String numberName(int number) {
             String result = "";
 
             if (number >= 1000) {
@@ -106,36 +149,50 @@
 
             return result;
         }
+
+        void checkCursor(Cursor c) {
+            c.getColumnCount();
+            c.close();
+        }
+    }
+
+    /**
+     * Test CREATE SIZE tables with 1 row.
+     */
+    public static class CreateTable100 extends PerformanceBase {
+        public void testRun() {
+            for (int i = 0; i < DATASET_SIZE; i++) {
+                String t = "t" + i;
+                mDatabase.execSQL("CREATE TABLE " + t + "(a INTEGER, b INTEGER, c VARCHAR(100))");
+                mDatabase.execSQL("INSERT INTO " + t + " VALUES(" + i + "," + i + ",'"
+                        + numberName(i) + "')");
+            }
+        }
     }
 
     /**
      * Test 100 inserts.
      */
-
     public static class Insert100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-
-        private String[] statements = new String[SIZE];
+        private String[] mStatements = new String[DATASET_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
-                statements[i] =
+                mStatements[i] =
                         "INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                                 + numberName(r) + "')";
             }
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
         }
 
         public void testRun() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.execSQL(statements[i]);
+            for (int i = 0; i < DATASET_SIZE; i++) {
+                mDatabase.execSQL(mStatements[i]);
             }
         }
     }
@@ -145,30 +202,25 @@
      */
 
     public static class InsertIndexed100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-
-        private String[] statements = new String[SIZE];
+        private String[] mStatements = new String[DATASET_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
-                statements[i] =
-                        "INSERT INTO t1 VALUES(" + i + "," + r + ",'"
-                                + numberName(r) + "')";
+                mStatements[i] = "INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+                        + numberName(r) + "')";
             }
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
             mDatabase.execSQL("CREATE INDEX i1c ON t1(c)");
         }
 
         public void testRun() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.execSQL(statements[i]);
+            for (int i = 0; i < DATASET_SIZE; i++) {
+                mDatabase.execSQL(mStatements[i]);
             }
         }
     }
@@ -176,41 +228,35 @@
     /**
      * 100 SELECTs without an index
      */
-
     public static class Select100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"count(*)", "avg(b)"};
 
-        private String[] where = new String[SIZE];
+        private String[] mWhere = new String[DATASET_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
             mDatabase
             .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int lower = i * 100;
                 int upper = (i + 10) * 100;
-                where[i] = "b >= " + lower + " AND b < " + upper;
+                mWhere[i] = "b >= " + lower + " AND b < " + upper;
             }
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                for (int i = 0; i < SIZE; i++) {
-                    mDatabase
-                            .query("t1", COLUMNS, where[i], null, null, null, null);
-                }
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                checkCursor(mDatabase
+                        .query("t1", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null));
             }
         }
     }
@@ -219,37 +265,32 @@
      * 100 SELECTs on a string comparison
      */
     public static class SelectStringComparison100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"count(*)", "avg(b)"};
 
-        private String[] where = new String[SIZE];
+        private String[] mWhere = new String[DATASET_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
             mDatabase
             .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
-                where[i] = "c LIKE '" + numberName(i) + "'";
+            for (int i = 0; i < DATASET_SIZE; i++) {
+                mWhere[i] = "c LIKE '" + numberName(i) + "'";
             }
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                for (int i = 0; i < SIZE; i++) {
-                    mDatabase
-                            .query("t1", COLUMNS, where[i], null, null, null, null);
-                }
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                checkCursor(mDatabase
+                        .query("t1", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null));
             }
         }
     }
@@ -258,40 +299,35 @@
      * 100 SELECTs with an index
      */
     public static class SelectIndex100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
+        private static final int TABLE_SIZE = 100;
         private static final String[] COLUMNS = {"count(*)", "avg(b)"};
 
-        private String[] where = new String[SIZE];
+        private String[] mWhere = new String[TABLE_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
             mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < TABLE_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < TABLE_SIZE; i++) {
                 int lower = i * 100;
                 int upper = (i + 10) * 100;
-                where[i] = "b >= " + lower + " AND b < " + upper;
+                mWhere[i] = "b >= " + lower + " AND b < " + upper;
             }
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                for (int i = 0; i < SIZE; i++) {
-                    mDatabase
-                            .query("t1", COLUMNS, where[i], null, null, null, null);
-                }
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                checkCursor(mDatabase
+                        .query("t1", COLUMNS, mWhere[i % TABLE_SIZE], null, null, null, null));
             }
         }
     }
@@ -300,27 +336,22 @@
      *  INNER JOIN without an index
      */
     public static class InnerJoin100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"t1.a"};
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase
-            .execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
@@ -328,9 +359,9 @@
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                mDatabase.query("t1 INNER JOIN t2 ON t1.b = t2.b", COLUMNS, null,
-                        null, null, null, null);
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                checkCursor(mDatabase.query("t1 INNER JOIN t2 ON t1.b = t2.b", COLUMNS, null,
+                        null, null, null, null));
             }
         }
     }
@@ -340,29 +371,24 @@
      */
 
     public static class InnerJoinOneSide100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"t1.a"};
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase
-            .execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
 
             mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
@@ -370,9 +396,9 @@
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                mDatabase.query("t1 INNER JOIN t2 ON t1.b = t2.b", COLUMNS, null,
-                        null, null, null, null);
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                checkCursor(mDatabase.query("t1 INNER JOIN t2 ON t1.b = t2.b", COLUMNS, null,
+                        null, null, null, null));
             }
         }
     }
@@ -381,29 +407,24 @@
      *  INNER JOIN without an index on one side
      */
     public static class InnerJoinNoIndex100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"t1.a"};
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase
-            .execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
 
             mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
@@ -411,9 +432,10 @@
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                mDatabase.query("t1 INNER JOIN t2 ON t1.c = t2.c", COLUMNS, null,
-                        null, null, null, null);
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                checkCursor(mDatabase
+                        .query("t1 INNER JOIN t2 ON t1.c = t2.c", COLUMNS, null, null, null, null,
+                                null));
             }
         }
     }
@@ -422,49 +444,44 @@
      *  100 SELECTs with subqueries. Subquery is using an index
      */
     public static class SelectSubQIndex100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"t1.a"};
 
-        private String[] where = new String[SIZE];
+        private String[] mWhere = new String[DATASET_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
-            mDatabase
-            .execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
 
             mDatabase.execSQL("CREATE INDEX i2b ON t2(b)");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int lower = i * 100;
                 int upper = (i + 10) * 100;
-                where[i] =
+                mWhere[i] =
                         "t1.b IN (SELECT t2.b FROM t2 WHERE t2.b >= " + lower
                         + " AND t2.b < " + upper + ")";
             }
         }
 
         public void testRun() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase
-                .query("t1", COLUMNS, where[i], null, null, null, null);
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                checkCursor(mDatabase
+                        .query("t1", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null));
             }
         }
     }
@@ -473,38 +490,32 @@
      *  100 SELECTs on string comparison with Index
      */
     public static class SelectIndexStringComparison100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"count(*)", "avg(b)"};
 
-        private String[] where = new String[SIZE];
+        private String[] mWhere = new String[DATASET_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
             mDatabase.execSQL("CREATE INDEX i3c ON t1(c)");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
-                where[i] = "c LIKE '" + numberName(i) + "'";
+            for (int i = 0; i < DATASET_SIZE; i++) {
+                mWhere[i] = "c LIKE '" + numberName(i) + "'";
             }
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                for (int i = 0; i < SIZE; i++) {
-                    mDatabase
-                            .query("t1", COLUMNS, where[i], null, null, null, null);
-                }
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                checkCursor(mDatabase
+                        .query("t1", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null));
             }
         }
     }
@@ -513,19 +524,15 @@
      *  100 SELECTs on integer
      */
     public static class SelectInteger100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"b"};
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
@@ -534,10 +541,8 @@
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                for (int i = 0; i < SIZE; i++) {
-                    mDatabase.query("t1", COLUMNS, null, null, null, null, null);
-                }
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                checkCursor(mDatabase.query("t1", COLUMNS, null, null, null, null, null));
             }
         }
     }
@@ -546,19 +551,16 @@
      *  100 SELECTs on String
      */
     public static class SelectString100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"c"};
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
             mDatabase
             .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
@@ -566,10 +568,8 @@
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                for (int i = 0; i < SIZE; i++) {
-                    mDatabase.query("t1", COLUMNS, null, null, null, null, null);
-                }
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                mDatabase.query("t1", COLUMNS, null, null, null, null, null);
             }
         }
     }
@@ -578,20 +578,17 @@
      *  100 SELECTs on integer with index
      */
     public static class SelectIntegerIndex100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"b"};
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
             mDatabase
             .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
             mDatabase.execSQL("CREATE INDEX i1b on t1(b)");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
@@ -600,10 +597,8 @@
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                for (int i = 0; i < SIZE; i++) {
-                    mDatabase.query("t1", COLUMNS, null, null, null, null, null);
-                }
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                mDatabase.query("t1", COLUMNS, null, null, null, null, null);
             }
         }
     }
@@ -612,20 +607,16 @@
      *  100 SELECTs on String with index
      */
     public static class SelectIndexString100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"c"};
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
             mDatabase.execSQL("CREATE INDEX i1c ON t1(c)");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
@@ -633,10 +624,8 @@
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                for (int i = 0; i < SIZE; i++) {
-                    mDatabase.query("t1", COLUMNS, null, null, null, null, null);
-                }
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                checkCursor(mDatabase.query("t1", COLUMNS, null, null, null, null, null));
             }
         }
 
@@ -646,40 +635,33 @@
      *  100 SELECTs on String with starts with
      */
     public static class SelectStringStartsWith100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"c"};
-        private String[] where = new String[SIZE];
+        private String[] mWhere = new String[DATASET_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
             mDatabase.execSQL("CREATE INDEX i1c ON t1(c)");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
-                where[i] = "c LIKE '" + numberName(r).substring(0, 1) + "*'";
+                mWhere[i] = "c LIKE '" + numberName(r).substring(0, 1) + "*'";
 
             }
 
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                for (int i = 0; i < SIZE; i++) {
-                    mDatabase
-                            .query("t1", COLUMNS, where[i], null, null, null, null);
-                }
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                mDatabase.query("t1", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null);
             }
         }
     }
@@ -688,18 +670,15 @@
      *  100 Deletes on an indexed table
      */
     public static class DeleteIndexed100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
             mDatabase.execSQL("CREATE INDEX i3c ON t1(c)");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
@@ -708,7 +687,7 @@
         }
 
         public void testRun() {
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 mDatabase.delete("t1", null, null);
             }
         }
@@ -718,17 +697,13 @@
      *  100 Deletes
      */
     public static class Delete100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
@@ -737,7 +712,7 @@
         }
 
         public void testRun() {
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 mDatabase.delete("t1", null, null);
             }
         }
@@ -747,33 +722,30 @@
      *  100 DELETE's without an index with where clause
      */
     public static class DeleteWhere100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private String[] where = new String[SIZE];
+        private String[] mWhere = new String[DATASET_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int lower = i * 100;
                 int upper = (i + 10) * 100;
-                where[i] = "b >= " + lower + " AND b < " + upper;
+                mWhere[i] = "b >= " + lower + " AND b < " + upper;
             }
         }
 
         public void testRun() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.delete("t1", where[i], null);
+            for (int i = 0; i < DATASET_SIZE; i++) {
+                mDatabase.delete("t1", mWhere[i], null);
             }
         }
     }
@@ -782,34 +754,31 @@
      * 100 DELETE's with an index with where clause
      */
     public static class DeleteIndexWhere100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private String[] where = new String[SIZE];
+        private String[] mWhere = new String[DATASET_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
             mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int lower = i * 100;
                 int upper = (i + 10) * 100;
-                where[i] = "b >= " + lower + " AND b < " + upper;
+                mWhere[i] = "b >= " + lower + " AND b < " + upper;
             }
         }
 
         public void testRun() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.delete("t1", where[i], null);
+            for (int i = 0; i < DATASET_SIZE; i++) {
+                mDatabase.delete("t1", mWhere[i], null);
             }
         }
     }
@@ -818,30 +787,26 @@
      * 100 update's with an index with where clause
      */
     public static class UpdateIndexWhere100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private String[] where = new String[SIZE];
-        ContentValues[] mValues = new ContentValues[SIZE];
+        private String[] mWhere = new String[DATASET_SIZE];
+        ContentValues[] mValues = new ContentValues[DATASET_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
             mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
-
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int lower = i * 100;
                 int upper = (i + 10) * 100;
-                where[i] = "b >= " + lower + " AND b < " + upper;
+                mWhere[i] = "b >= " + lower + " AND b < " + upper;
                 ContentValues b = new ContentValues(1);
                 b.put("b", upper);
                 mValues[i] = b;
@@ -850,8 +815,8 @@
         }
 
         public void testRun() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.update("t1", mValues[i], where[i], null);
+            for (int i = 0; i < DATASET_SIZE; i++) {
+                mDatabase.update("t1", mValues[i], mWhere[i], null);
             }
         }
     }
@@ -860,29 +825,26 @@
      * 100 update's without an index with where clause
      */
     public static class UpdateWhere100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private String[] where = new String[SIZE];
-        ContentValues[] mValues = new ContentValues[SIZE];
+        private String[] mWhere = new String[DATASET_SIZE];
+        ContentValues[] mValues = new ContentValues[DATASET_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
 
                 int lower = i * 100;
                 int upper = (i + 10) * 100;
-                where[i] = "b >= " + lower + " AND b < " + upper;
+                mWhere[i] = "b >= " + lower + " AND b < " + upper;
                 ContentValues b = new ContentValues(1);
                 b.put("b", upper);
                 mValues[i] = b;
@@ -890,8 +852,8 @@
         }
 
         public void testRun() {
-            for (int i = 0; i < SIZE; i++) {
-                mDatabase.update("t1", mValues[i], where[i], null);
+            for (int i = 0; i < DATASET_SIZE; i++) {
+                mDatabase.update("t1", mValues[i], mWhere[i], null);
             }
         }
     }
@@ -900,36 +862,31 @@
      * 100 selects for a String - contains 'e'
      */
     public static class SelectStringContains100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"t3.a"};
-        private String[] where = new String[SIZE];
+        private String[] mWhere = new String[DATASET_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t3(a VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t3(a VARCHAR(100))");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t3 VALUES('"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
-                where[i] = "a LIKE '*e*'";
+            for (int i = 0; i < DATASET_SIZE; i++) {
+                mWhere[i] = "a LIKE '*e*'";
 
             }
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                for (int i = 0; i < SIZE; i++) {
-                    mDatabase.query("t3", COLUMNS, where[i], null, null, null, null);
-                }
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                checkCursor(mDatabase
+                        .query("t3", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null));
             }
         }
     }
@@ -938,37 +895,32 @@
      * 100 selects for a String - contains 'e'-indexed table
      */
     public static class SelectStringIndexedContains100 extends PerformanceBase {
-        private static final int SIZE = SIZE_MULTIPLIER;
-        private static final int REPEAT_COUNT = 10;
         private static final String[] COLUMNS = {"t3.a"};
-        private String[] where = new String[SIZE];
+        private String[] mWhere = new String[DATASET_SIZE];
 
         @Override
-        public void setUp() {
-            super.setUp();
+        protected void prepareForTest() {
             Random random = new Random(42);
 
-            mDatabase
-            .execSQL("CREATE TABLE t3(a VARCHAR(100))");
+            mDatabase.execSQL("CREATE TABLE t3(a VARCHAR(100))");
             mDatabase.execSQL("CREATE INDEX i3a ON t3(a)");
 
-            for (int i = 0; i < SIZE; i++) {
+            for (int i = 0; i < DATASET_SIZE; i++) {
                 int r = random.nextInt(100000);
                 mDatabase.execSQL("INSERT INTO t3 VALUES('"
                         + numberName(r) + "')");
             }
 
-            for (int i = 0; i < SIZE; i++) {
-                where[i] = "a LIKE '*e*'";
+            for (int i = 0; i < DATASET_SIZE; i++) {
+                mWhere[i] = "a LIKE '*e*'";
 
             }
         }
 
         public void testRun() {
-            for (int iter = 0; iter < REPEAT_COUNT; iter++) {
-                for (int i = 0; i < SIZE; i++) {
-                    mDatabase.query("t3", COLUMNS, where[i], null, null, null, null);
-                }
+            for (int i = 0; i < FAST_OP_COUNT; i++) {
+                checkCursor(mDatabase
+                        .query("t3", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null));
             }
         }
     }
@@ -982,4 +934,31 @@
     static final String[] TENS =
         {"", "ten", "twenty", "thirty", "forty", "fifty", "sixty",
         "seventy", "eighty", "ninety"};
+
+    static Map<String, Long> getIoStats() {
+        String ioStat = "/proc/self/io";
+        Map<String, Long> results = new ArrayMap<>();
+        try {
+            List<String> lines = Files.readAllLines(new File(ioStat).toPath());
+            for (String line : lines) {
+                line = line.trim();
+                String[] split = line.split(":");
+                if (split.length == 2) {
+                    try {
+                        String key = split[0].trim();
+                        Long value = Long.valueOf(split[1].trim());
+                        results.put(key, value);
+                    } catch (NumberFormatException e) {
+                        Log.e(TAG, "Cannot parse number from " + line);
+                    }
+                } else if (line.isEmpty()) {
+                    Log.e(TAG, "Cannot parse line " + line);
+                }
+            }
+        } catch (IOException e) {
+            Log.e(TAG, "Can't read: " + ioStat, e);
+        }
+        return results;
+    }
+
 }
diff --git a/core/tests/coretests/src/android/database/SQLiteOpenHelperTest.java b/core/tests/coretests/src/android/database/SQLiteOpenHelperTest.java
new file mode 100644
index 0000000..75eeb93
--- /dev/null
+++ b/core/tests/coretests/src/android/database/SQLiteOpenHelperTest.java
@@ -0,0 +1,171 @@
+/*
+ * 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.database;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabaseConfiguration;
+import android.database.sqlite.SQLiteDebug;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.Log;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Tests for {@link SQLiteOpenHelper}
+ *
+ * <p>Run with:  bit FrameworksCoreTests:android.database.SQLiteOpenHelperTest
+ */
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class SQLiteOpenHelperTest {
+    private static final String TAG = "SQLiteOpenHelperTest";
+
+    private TestHelper mTestHelper;
+    private Context mContext;
+    private List<SQLiteOpenHelper> mHelpersToClose;
+
+    private static class TestHelper extends SQLiteOpenHelper {
+        TestHelper(Context context) { // In-memory
+            super(context, null, null, 1);
+        }
+
+        TestHelper(Context context, String name) {
+            super(context, name, null, 1);
+        }
+
+        @Override
+        public void onCreate(SQLiteDatabase db) {
+        }
+
+        @Override
+        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        }
+    }
+
+    @Before
+    public void setup() {
+        mContext = InstrumentationRegistry.getContext();
+        mTestHelper = new TestHelper(mContext, "openhelper_test");
+        mHelpersToClose = new ArrayList<>();
+        mHelpersToClose.add(mTestHelper);
+    }
+
+    @After
+    public void teardown() {
+        for (SQLiteOpenHelper helper : mHelpersToClose) {
+            try {
+                helper.close();
+                if (mTestHelper.getDatabaseName() != null) {
+                    SQLiteDatabase.deleteDatabase(
+                            mContext.getDatabasePath(mTestHelper.getDatabaseName()));
+                }
+            } catch (RuntimeException ex) {
+                Log.w(TAG, "Error occured when closing db helper " + helper, ex);
+            }
+        }
+    }
+
+    @Test
+    public void testLookasideDefault() throws Exception {
+        assertNotNull(mTestHelper.getWritableDatabase());
+        verifyLookasideStats(false);
+    }
+
+    @Test
+    public void testLookasideDisabled() throws Exception {
+        mTestHelper.setLookasideConfig(0, 0);
+        assertNotNull(mTestHelper.getWritableDatabase());
+        verifyLookasideStats(true);
+    }
+
+    @Test
+    public void testInMemoryLookasideDisabled() throws Exception {
+        TestHelper memHelper = new TestHelper(mContext);
+        mHelpersToClose.add(memHelper);
+        memHelper.setLookasideConfig(0, 0);
+        assertNotNull(memHelper.getWritableDatabase());
+        verifyLookasideStats(SQLiteDatabaseConfiguration.MEMORY_DB_PATH, true);
+    }
+
+    @Test
+    public void testInMemoryLookasideDefault() throws Exception {
+        TestHelper memHelper = new TestHelper(mContext);
+        mHelpersToClose.add(memHelper);
+        assertNotNull(memHelper.getWritableDatabase());
+        verifyLookasideStats(SQLiteDatabaseConfiguration.MEMORY_DB_PATH, false);
+    }
+
+    @Test
+    public void testSetLookasideConfigValidation() {
+        try {
+            mTestHelper.setLookasideConfig(-1, 0);
+            fail("Negative slot size should be rejected");
+        } catch (IllegalArgumentException expected) {
+        }
+        try {
+            mTestHelper.setLookasideConfig(0, -10);
+            fail("Negative slot count should be rejected");
+        } catch (IllegalArgumentException expected) {
+        }
+        try {
+            mTestHelper.setLookasideConfig(1, 0);
+            fail("Illegal config should be rejected");
+        } catch (IllegalArgumentException expected) {
+        }
+        try {
+            mTestHelper.setLookasideConfig(0, 1);
+            fail("Illegal config should be rejected");
+        } catch (IllegalArgumentException expected) {
+        }
+    }
+
+    private void verifyLookasideStats(boolean expectDisabled) {
+        verifyLookasideStats(mTestHelper.getDatabaseName(), expectDisabled);
+    }
+
+    private static void verifyLookasideStats(String dbName, boolean expectDisabled) {
+        boolean dbStatFound = false;
+        SQLiteDebug.PagerStats info = SQLiteDebug.getDatabaseInfo();
+        for (SQLiteDebug.DbStats dbStat : info.dbStats) {
+            if (dbStat.dbName.endsWith(dbName)) {
+                dbStatFound = true;
+                Log.i(TAG, "Lookaside for " + dbStat.dbName + " " + dbStat.lookaside);
+                if (expectDisabled) {
+                    assertTrue("lookaside slots count should be zero", dbStat.lookaside == 0);
+                } else {
+                    assertTrue("lookaside slots count should be greater than zero",
+                            dbStat.lookaside > 0);
+                }
+            }
+        }
+        assertTrue("No dbstat found for " + dbName, dbStatFound);
+    }
+}
diff --git a/core/tests/coretests/src/android/database/process_newdb_perf_test_logs.py b/core/tests/coretests/src/android/database/process_newdb_perf_test_logs.py
index 1faeceb..27b20c3 100644
--- a/core/tests/coretests/src/android/database/process_newdb_perf_test_logs.py
+++ b/core/tests/coretests/src/android/database/process_newdb_perf_test_logs.py
@@ -25,7 +25,16 @@
         all_lines = f.readlines()
     timings = {}
     running_sum = 0
+    # If WAL was enabled for the test
+    wal_enabled = False
+    # Number of bytes which test process caused to be sent to the storage layer.
+    # Reported as max value across all runs.
+    max_write_bytes = 0
     for line in all_lines:
+        if "NewDatabasePerformanceTests: Testing with WAL enabled" in line:
+            wal_enabled = True
+            continue
+
         regex = r"NewDatabasePerformanceTests: Test (\w+) took (\d+) ms"
         matches = re.search(regex, line)
         if matches:
@@ -35,16 +44,31 @@
                 timings[test_name] = []
             timings[test_name].append(duration)
             running_sum += duration
+            continue
+
         if ("TestRunner: run finished:" in line) and (running_sum > 0):
-            test_name = '*** TOTAL ALL TESTS (ms) ***'
+            test_name = ('*** TOTAL ALL TESTS [WAL] (ms) ***' if wal_enabled
+                         else '*** TOTAL ALL TESTS (ms) ***')
             if not test_name in timings:
                 timings[test_name] = []
             timings[test_name].append(running_sum)
             running_sum=0
+            continue
+
+        # Determine max from all reported totalWriteBytes
+        regex = r"Test .* totalWriteBytes=(\d+)"
+        matches = re.search(regex, line)
+        if matches:
+            max_write_bytes = max(max_write_bytes, int(matches.group(1)))
+            continue
 
     for k in sorted(timings):
         timings_ar = timings[k]
         print "%s: %s avg: %s" % (k, timings_ar, sum(timings_ar) / float(len(timings_ar)) )
 
+
+    print "\nAdditional stats: "
+    print "    max write_bytes: %d" % max_write_bytes
+
 if __name__ == '__main__':
     main()
diff --git a/core/tests/coretests/src/android/database/run_newdb_perf_test.sh b/core/tests/coretests/src/android/database/run_newdb_perf_test.sh
new file mode 100755
index 0000000..c5b2c97
--- /dev/null
+++ b/core/tests/coretests/src/android/database/run_newdb_perf_test.sh
@@ -0,0 +1,31 @@
+#!/bin/bash -
+# 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.
+
+make -j44 FrameworksCoreTests
+adb install -r -g ${ANDROID_PRODUCT_OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
+adb logcat -c
+
+# by default run 5 times
+RUN_N=${1:-5}
+echo "Running benchmark $RUN_N times"
+
+for (( i=0; i<$RUN_N; i++ ))
+do
+    adb  shell am instrument -e class 'android.database.NewDatabasePerformanceTestSuite' -w 'com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner'
+done
+
+adb logcat -d > /tmp/testlogcat.txt
+
+python frameworks/base/core/tests/coretests/src/android/database/process_newdb_perf_test_logs.py /tmp/testlogcat.txt
\ No newline at end of file
diff --git a/core/tests/coretests/src/android/database/sqlite/SQLiteConnectionPoolTest.java b/core/tests/coretests/src/android/database/sqlite/SQLiteConnectionPoolTest.java
new file mode 100644
index 0000000..ed14a53
--- /dev/null
+++ b/core/tests/coretests/src/android/database/sqlite/SQLiteConnectionPoolTest.java
@@ -0,0 +1,91 @@
+/*
+ * 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.database.sqlite;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import android.content.Context;
+import android.os.HandlerThread;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.Log;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+
+/**
+ * Tests for {@link SQLiteConnectionPool}
+ *
+ * <p>Run with:  bit FrameworksCoreTests:android.database.sqlite.SQLiteConnectionPoolTest
+ */
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class SQLiteConnectionPoolTest {
+    private static final String TAG = "SQLiteConnectionPoolTest";
+
+    private Context mContext;
+    private File mTestDatabase;
+    private SQLiteDatabaseConfiguration mTestConf;
+
+
+    @Before
+    public void setup() {
+        mContext = InstrumentationRegistry.getContext();
+        SQLiteDatabase db = SQLiteDatabase
+                .openOrCreateDatabase(mContext.getDatabasePath("pool_test"), null);
+        mTestDatabase = new File(db.getPath());
+        Log.i(TAG, "setup: created " + mTestDatabase);
+        db.close();
+        mTestConf = new SQLiteDatabaseConfiguration(mTestDatabase.getPath(), 0);
+    }
+
+    @After
+    public void teardown() {
+        if (mTestDatabase != null) {
+            Log.i(TAG, "teardown: deleting " + mTestDatabase);
+            SQLiteDatabase.deleteDatabase(mTestDatabase);
+        }
+    }
+
+    @Test
+    public void testCloseIdleConnections() throws InterruptedException {
+        HandlerThread thread = new HandlerThread("test-close-idle-connections-thread");
+        Log.i(TAG, "Starting " + thread.getName());
+        thread.start();
+        SQLiteConnectionPool pool = SQLiteConnectionPool.open(mTestConf);
+        pool.setupIdleConnectionHandler(thread.getLooper(), 100);
+        SQLiteConnection c1 = pool.acquireConnection("pragma user_version", 0, null);
+        assertEquals("First connection should be returned", 0, c1.getConnectionId());
+        pool.releaseConnection(c1);
+        SQLiteConnection c2 = pool.acquireConnection("pragma user_version", 0, null);
+        assertTrue("Returned connection should be the same", c1 == c2);
+        pool.releaseConnection(c2);
+        Thread.sleep(200);
+        SQLiteConnection c3 = pool.acquireConnection("pragma user_version", 0, null);
+        assertTrue("New connection should be returned", c1 != c3);
+        assertEquals("New connection should be returned", 1, c3.getConnectionId());
+        pool.releaseConnection(c3);
+        pool.close();
+        thread.quit();
+    }
+}
diff --git a/core/tests/coretests/src/android/graphics/PaintTest.java b/core/tests/coretests/src/android/graphics/PaintTest.java
index 5811ca0..2f28606 100644
--- a/core/tests/coretests/src/android/graphics/PaintTest.java
+++ b/core/tests/coretests/src/android/graphics/PaintTest.java
@@ -16,6 +16,8 @@
 
 package android.graphics;
 
+import static org.junit.Assert.assertNotEquals;
+
 import android.graphics.Paint;
 import android.test.InstrumentationTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
@@ -148,7 +150,10 @@
                         " U+" + Integer.toHexString(vs) + ")";
                 final String testString =
                         codePointsToString(new int[] {testCase.mBaseCodepoint, vs});
-                if (testCase.mVariationSelectors.contains(vs)) {
+                if (vs == 0xFE0E // U+FE0E is the text presentation emoji. hasGlyph is expected to
+                                 // return true for that variation selector if the font has the base
+                                 // glyph.
+                             || testCase.mVariationSelectors.contains(vs)) {
                     assertTrue(signature + " is expected to be true", p.hasGlyph(testString));
                 } else {
                     assertFalse(signature + " is expected to be false", p.hasGlyph(testString));
@@ -365,4 +370,31 @@
         p.setWordSpacing(-2.0f);
         assertEquals(-2.0f, p.getWordSpacing());
     }
+
+    public void testGetUnderlinePositionAndThickness() {
+        final Typeface fontTypeface = Typeface.createFromAsset(
+                getInstrumentation().getContext().getAssets(), "fonts/underlineTestFont.ttf");
+        final Paint p = new Paint();
+        final int textSize = 100;
+        p.setTextSize(textSize);
+
+        final float origPosition = p.getUnderlinePosition();
+        final float origThickness = p.getUnderlineThickness();
+
+        p.setTypeface(fontTypeface);
+        assertNotEquals(origPosition, p.getUnderlinePosition());
+        assertNotEquals(origThickness, p.getUnderlineThickness());
+
+        //    -200 (underlinePosition in 'post' table, negative means below the baseline)
+        //    ÷ 1000 (unitsPerEm in 'head' table)
+        //    × 100 (text size)
+        //    × -1 (negated, since we consider below the baseline positive)
+        //    = 20
+        assertEquals(20.0f, p.getUnderlinePosition(), 0.5f);
+        //    300 (underlineThickness in 'post' table)
+        //    ÷ 1000 (unitsPerEm in 'head' table)
+        //    × 100 (text size)
+        //    = 30
+        assertEquals(30.0f, p.getUnderlineThickness(), 0.5f);
+    }
 }
diff --git a/core/tests/coretests/src/android/net/IpPrefixTest.java b/core/tests/coretests/src/android/net/IpPrefixTest.java
deleted file mode 100644
index 4f2387d..0000000
--- a/core/tests/coretests/src/android/net/IpPrefixTest.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import android.net.IpPrefix;
-import android.os.Parcel;
-import android.test.suitebuilder.annotation.SmallTest;
-import java.net.InetAddress;
-import java.util.Random;
-import junit.framework.TestCase;
-
-import static android.test.MoreAsserts.assertNotEqual;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-
-public class IpPrefixTest extends TestCase {
-
-    private static InetAddress Address(String addr) {
-        return InetAddress.parseNumericAddress(addr);
-    }
-
-    // Explicitly cast everything to byte because "error: possible loss of precision".
-    private static final byte[] IPV4_BYTES = { (byte) 192, (byte) 0, (byte) 2, (byte) 4};
-    private static final byte[] IPV6_BYTES = {
-        (byte) 0x20, (byte) 0x01, (byte) 0x0d, (byte) 0xb8,
-        (byte) 0xde, (byte) 0xad, (byte) 0xbe, (byte) 0xef,
-        (byte) 0x0f, (byte) 0x00, (byte) 0x00, (byte) 0x00,
-        (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xa0
-    };
-
-    @SmallTest
-    public void testConstructor() {
-        IpPrefix p;
-        try {
-            p = new IpPrefix((byte[]) null, 9);
-            fail("Expected NullPointerException: null byte array");
-        } catch(RuntimeException expected) {}
-
-        try {
-            p = new IpPrefix((InetAddress) null, 10);
-            fail("Expected NullPointerException: null InetAddress");
-        } catch(RuntimeException expected) {}
-
-        try {
-            p = new IpPrefix((String) null);
-            fail("Expected NullPointerException: null String");
-        } catch(RuntimeException expected) {}
-
-
-        try {
-            byte[] b2 = {1, 2, 3, 4, 5};
-            p = new IpPrefix(b2, 29);
-            fail("Expected IllegalArgumentException: invalid array length");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            p = new IpPrefix("1.2.3.4");
-            fail("Expected IllegalArgumentException: no prefix length");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            p = new IpPrefix("1.2.3.4/");
-            fail("Expected IllegalArgumentException: empty prefix length");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            p = new IpPrefix("foo/32");
-            fail("Expected IllegalArgumentException: invalid address");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            p = new IpPrefix("1/32");
-            fail("Expected IllegalArgumentException: deprecated IPv4 format");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            p = new IpPrefix("1.2.3.256/32");
-            fail("Expected IllegalArgumentException: invalid IPv4 address");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            p = new IpPrefix("foo/32");
-            fail("Expected IllegalArgumentException: non-address");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            p = new IpPrefix("f00:::/32");
-            fail("Expected IllegalArgumentException: invalid IPv6 address");
-        } catch(IllegalArgumentException expected) {}
-    }
-
-    public void testTruncation() {
-        IpPrefix p;
-
-        p = new IpPrefix(IPV4_BYTES, 32);
-        assertEquals("192.0.2.4/32", p.toString());
-
-        p = new IpPrefix(IPV4_BYTES, 29);
-        assertEquals("192.0.2.0/29", p.toString());
-
-        p = new IpPrefix(IPV4_BYTES, 8);
-        assertEquals("192.0.0.0/8", p.toString());
-
-        p = new IpPrefix(IPV4_BYTES, 0);
-        assertEquals("0.0.0.0/0", p.toString());
-
-        try {
-            p = new IpPrefix(IPV4_BYTES, 33);
-            fail("Expected IllegalArgumentException: invalid prefix length");
-        } catch(RuntimeException expected) {}
-
-        try {
-            p = new IpPrefix(IPV4_BYTES, 128);
-            fail("Expected IllegalArgumentException: invalid prefix length");
-        } catch(RuntimeException expected) {}
-
-        try {
-            p = new IpPrefix(IPV4_BYTES, -1);
-            fail("Expected IllegalArgumentException: negative prefix length");
-        } catch(RuntimeException expected) {}
-
-        p = new IpPrefix(IPV6_BYTES, 128);
-        assertEquals("2001:db8:dead:beef:f00::a0/128", p.toString());
-
-        p = new IpPrefix(IPV6_BYTES, 122);
-        assertEquals("2001:db8:dead:beef:f00::80/122", p.toString());
-
-        p = new IpPrefix(IPV6_BYTES, 64);
-        assertEquals("2001:db8:dead:beef::/64", p.toString());
-
-        p = new IpPrefix(IPV6_BYTES, 3);
-        assertEquals("2000::/3", p.toString());
-
-        p = new IpPrefix(IPV6_BYTES, 0);
-        assertEquals("::/0", p.toString());
-
-        try {
-            p = new IpPrefix(IPV6_BYTES, -1);
-            fail("Expected IllegalArgumentException: negative prefix length");
-        } catch(RuntimeException expected) {}
-
-        try {
-            p = new IpPrefix(IPV6_BYTES, 129);
-            fail("Expected IllegalArgumentException: negative prefix length");
-        } catch(RuntimeException expected) {}
-
-    }
-
-    private void assertAreEqual(Object o1, Object o2) {
-        assertTrue(o1.equals(o2));
-        assertTrue(o2.equals(o1));
-    }
-
-    private void assertAreNotEqual(Object o1, Object o2) {
-        assertFalse(o1.equals(o2));
-        assertFalse(o2.equals(o1));
-    }
-
-    @SmallTest
-    public void testEquals() {
-        IpPrefix p1, p2;
-
-        p1 = new IpPrefix("192.0.2.251/23");
-        p2 = new IpPrefix(new byte[]{(byte) 192, (byte) 0, (byte) 2, (byte) 251}, 23);
-        assertAreEqual(p1, p2);
-
-        p1 = new IpPrefix("192.0.2.5/23");
-        assertAreEqual(p1, p2);
-
-        p1 = new IpPrefix("192.0.2.5/24");
-        assertAreNotEqual(p1, p2);
-
-        p1 = new IpPrefix("192.0.4.5/23");
-        assertAreNotEqual(p1, p2);
-
-
-        p1 = new IpPrefix("2001:db8:dead:beef:f00::80/122");
-        p2 = new IpPrefix(IPV6_BYTES, 122);
-        assertEquals("2001:db8:dead:beef:f00::80/122", p2.toString());
-        assertAreEqual(p1, p2);
-
-        p1 = new IpPrefix("2001:db8:dead:beef:f00::bf/122");
-        assertAreEqual(p1, p2);
-
-        p1 = new IpPrefix("2001:db8:dead:beef:f00::8:0/123");
-        assertAreNotEqual(p1, p2);
-
-        p1 = new IpPrefix("2001:db8:dead:beef::/122");
-        assertAreNotEqual(p1, p2);
-
-        // 192.0.2.4/32 != c000:0204::/32.
-        byte[] ipv6bytes = new byte[16];
-        System.arraycopy(IPV4_BYTES, 0, ipv6bytes, 0, IPV4_BYTES.length);
-        p1 = new IpPrefix(ipv6bytes, 32);
-        assertAreEqual(p1, new IpPrefix("c000:0204::/32"));
-
-        p2 = new IpPrefix(IPV4_BYTES, 32);
-        assertAreNotEqual(p1, p2);
-    }
-
-    @SmallTest
-    public void testContains() {
-        IpPrefix p = new IpPrefix("2001:db8:f00::ace:d00d/127");
-        assertTrue(p.contains(Address("2001:db8:f00::ace:d00c")));
-        assertTrue(p.contains(Address("2001:db8:f00::ace:d00d")));
-        assertFalse(p.contains(Address("2001:db8:f00::ace:d00e")));
-        assertFalse(p.contains(Address("2001:db8:f00::bad:d00d")));
-        assertFalse(p.contains(Address("2001:4868:4860::8888")));
-        assertFalse(p.contains(null));
-        assertFalse(p.contains(Address("8.8.8.8")));
-
-        p = new IpPrefix("192.0.2.0/23");
-        assertTrue(p.contains(Address("192.0.2.43")));
-        assertTrue(p.contains(Address("192.0.3.21")));
-        assertFalse(p.contains(Address("192.0.0.21")));
-        assertFalse(p.contains(Address("8.8.8.8")));
-        assertFalse(p.contains(Address("2001:4868:4860::8888")));
-
-        IpPrefix ipv6Default = new IpPrefix("::/0");
-        assertTrue(ipv6Default.contains(Address("2001:db8::f00")));
-        assertFalse(ipv6Default.contains(Address("192.0.2.1")));
-
-        IpPrefix ipv4Default = new IpPrefix("0.0.0.0/0");
-        assertTrue(ipv4Default.contains(Address("255.255.255.255")));
-        assertTrue(ipv4Default.contains(Address("192.0.2.1")));
-        assertFalse(ipv4Default.contains(Address("2001:db8::f00")));
-    }
-
-    @SmallTest
-    public void testHashCode() {
-        IpPrefix p = new IpPrefix(new byte[4], 0);
-        Random random = new Random();
-        for (int i = 0; i < 100; i++) {
-            final IpPrefix oldP = p;
-            if (random.nextBoolean()) {
-                // IPv4.
-                byte[] b = new byte[4];
-                random.nextBytes(b);
-                p = new IpPrefix(b, random.nextInt(33));
-            } else {
-                // IPv6.
-                byte[] b = new byte[16];
-                random.nextBytes(b);
-                p = new IpPrefix(b, random.nextInt(129));
-            }
-            if (p.equals(oldP)) {
-              assertEquals(p.hashCode(), oldP.hashCode());
-            }
-            if (p.hashCode() != oldP.hashCode()) {
-              assertNotEqual(p, oldP);
-            }
-        }
-    }
-
-    @SmallTest
-    public void testHashCodeIsNotConstant() {
-        IpPrefix[] prefixes = {
-            new IpPrefix("2001:db8:f00::ace:d00d/127"),
-            new IpPrefix("192.0.2.0/23"),
-            new IpPrefix("::/0"),
-            new IpPrefix("0.0.0.0/0"),
-        };
-        for (int i = 0; i < prefixes.length; i++) {
-          for (int j = i + 1; j < prefixes.length; j++) {
-            assertNotEqual(prefixes[i].hashCode(), prefixes[j].hashCode());
-          }
-        }
-    }
-
-    @SmallTest
-    public void testMappedAddressesAreBroken() {
-        // 192.0.2.0/24 != ::ffff:c000:0204/120, but because we use InetAddress,
-        // we are unable to comprehend that.
-        byte[] ipv6bytes = {
-            (byte) 0, (byte) 0, (byte) 0, (byte) 0,
-            (byte) 0, (byte) 0, (byte) 0, (byte) 0,
-            (byte) 0, (byte) 0, (byte) 0xff, (byte) 0xff,
-            (byte) 192, (byte) 0, (byte) 2, (byte) 0};
-        IpPrefix p = new IpPrefix(ipv6bytes, 120);
-        assertEquals(16, p.getRawAddress().length);       // Fine.
-        assertArrayEquals(ipv6bytes, p.getRawAddress());  // Fine.
-
-        // Broken.
-        assertEquals("192.0.2.0/120", p.toString());
-        assertEquals(InetAddress.parseNumericAddress("192.0.2.0"), p.getAddress());
-    }
-
-    public IpPrefix passThroughParcel(IpPrefix p) {
-        Parcel parcel = Parcel.obtain();
-        IpPrefix p2 = null;
-        try {
-            p.writeToParcel(parcel, 0);
-            parcel.setDataPosition(0);
-            p2 = IpPrefix.CREATOR.createFromParcel(parcel);
-        } finally {
-            parcel.recycle();
-        }
-        assertNotNull(p2);
-        return p2;
-    }
-
-    public void assertParcelingIsLossless(IpPrefix p) {
-      IpPrefix p2 = passThroughParcel(p);
-      assertEquals(p, p2);
-    }
-
-    public void testParceling() {
-        IpPrefix p;
-
-        p = new IpPrefix("2001:4860:db8::/64");
-        assertParcelingIsLossless(p);
-
-        p = new IpPrefix("192.0.2.0/25");
-        assertParcelingIsLossless(p);
-    }
-}
diff --git a/core/tests/coretests/src/android/net/LinkAddressTest.java b/core/tests/coretests/src/android/net/LinkAddressTest.java
deleted file mode 100644
index adf8d95..0000000
--- a/core/tests/coretests/src/android/net/LinkAddressTest.java
+++ /dev/null
@@ -1,415 +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.
- */
-
-package android.net;
-
-import java.net.Inet4Address;
-import java.net.Inet6Address;
-import java.net.InetAddress;
-import java.net.InterfaceAddress;
-import java.net.NetworkInterface;
-import java.net.SocketException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import android.net.LinkAddress;
-import android.os.Parcel;
-import android.test.AndroidTestCase;
-import static android.test.MoreAsserts.assertNotEqual;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import static android.system.OsConstants.IFA_F_DADFAILED;
-import static android.system.OsConstants.IFA_F_DEPRECATED;
-import static android.system.OsConstants.IFA_F_OPTIMISTIC;
-import static android.system.OsConstants.IFA_F_PERMANENT;
-import static android.system.OsConstants.IFA_F_TEMPORARY;
-import static android.system.OsConstants.IFA_F_TENTATIVE;
-import static android.system.OsConstants.RT_SCOPE_HOST;
-import static android.system.OsConstants.RT_SCOPE_LINK;
-import static android.system.OsConstants.RT_SCOPE_SITE;
-import static android.system.OsConstants.RT_SCOPE_UNIVERSE;
-
-/**
- * Tests for {@link LinkAddress}.
- */
-public class LinkAddressTest extends AndroidTestCase {
-
-    private static final String V4 = "192.0.2.1";
-    private static final String V6 = "2001:db8::1";
-    private static final InetAddress V4_ADDRESS = NetworkUtils.numericToInetAddress(V4);
-    private static final InetAddress V6_ADDRESS = NetworkUtils.numericToInetAddress(V6);
-
-    public void testConstants() {
-        // RT_SCOPE_UNIVERSE = 0, but all the other constants should be nonzero.
-        assertNotEqual(0, RT_SCOPE_HOST);
-        assertNotEqual(0, RT_SCOPE_LINK);
-        assertNotEqual(0, RT_SCOPE_SITE);
-
-        assertNotEqual(0, IFA_F_DEPRECATED);
-        assertNotEqual(0, IFA_F_PERMANENT);
-        assertNotEqual(0, IFA_F_TENTATIVE);
-    }
-
-    public void testConstructors() throws SocketException {
-        LinkAddress address;
-
-        // Valid addresses work as expected.
-        address = new LinkAddress(V4_ADDRESS, 25);
-        assertEquals(V4_ADDRESS, address.getAddress());
-        assertEquals(25, address.getPrefixLength());
-        assertEquals(0, address.getFlags());
-        assertEquals(RT_SCOPE_UNIVERSE, address.getScope());
-
-        address = new LinkAddress(V6_ADDRESS, 127);
-        assertEquals(V6_ADDRESS, address.getAddress());
-        assertEquals(127, address.getPrefixLength());
-        assertEquals(0, address.getFlags());
-        assertEquals(RT_SCOPE_UNIVERSE, address.getScope());
-
-        // Nonsensical flags/scopes or combinations thereof are acceptable.
-        address = new LinkAddress(V6 + "/64", IFA_F_DEPRECATED | IFA_F_PERMANENT, RT_SCOPE_LINK);
-        assertEquals(V6_ADDRESS, address.getAddress());
-        assertEquals(64, address.getPrefixLength());
-        assertEquals(IFA_F_DEPRECATED | IFA_F_PERMANENT, address.getFlags());
-        assertEquals(RT_SCOPE_LINK, address.getScope());
-
-        address = new LinkAddress(V4 + "/23", 123, 456);
-        assertEquals(V4_ADDRESS, address.getAddress());
-        assertEquals(23, address.getPrefixLength());
-        assertEquals(123, address.getFlags());
-        assertEquals(456, address.getScope());
-
-        // InterfaceAddress doesn't have a constructor. Fetch some from an interface.
-        List<InterfaceAddress> addrs = NetworkInterface.getByName("lo").getInterfaceAddresses();
-
-        // We expect to find 127.0.0.1/8 and ::1/128, in any order.
-        LinkAddress ipv4Loopback, ipv6Loopback;
-        assertEquals(2, addrs.size());
-        if (addrs.get(0).getAddress() instanceof Inet4Address) {
-            ipv4Loopback = new LinkAddress(addrs.get(0));
-            ipv6Loopback = new LinkAddress(addrs.get(1));
-        } else {
-            ipv4Loopback = new LinkAddress(addrs.get(1));
-            ipv6Loopback = new LinkAddress(addrs.get(0));
-        }
-
-        assertEquals(NetworkUtils.numericToInetAddress("127.0.0.1"), ipv4Loopback.getAddress());
-        assertEquals(8, ipv4Loopback.getPrefixLength());
-
-        assertEquals(NetworkUtils.numericToInetAddress("::1"), ipv6Loopback.getAddress());
-        assertEquals(128, ipv6Loopback.getPrefixLength());
-
-        // Null addresses are rejected.
-        try {
-            address = new LinkAddress(null, 24);
-            fail("Null InetAddress should cause IllegalArgumentException");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            address = new LinkAddress((String) null, IFA_F_PERMANENT, RT_SCOPE_UNIVERSE);
-            fail("Null string should cause IllegalArgumentException");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            address = new LinkAddress((InterfaceAddress) null);
-            fail("Null string should cause NullPointerException");
-        } catch(NullPointerException expected) {}
-
-        // Invalid prefix lengths are rejected.
-        try {
-            address = new LinkAddress(V4_ADDRESS, -1);
-            fail("Negative IPv4 prefix length should cause IllegalArgumentException");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            address = new LinkAddress(V6_ADDRESS, -1);
-            fail("Negative IPv6 prefix length should cause IllegalArgumentException");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            address = new LinkAddress(V4_ADDRESS, 33);
-            fail("/33 IPv4 prefix length should cause IllegalArgumentException");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            address = new LinkAddress(V4 + "/33", IFA_F_PERMANENT, RT_SCOPE_UNIVERSE);
-            fail("/33 IPv4 prefix length should cause IllegalArgumentException");
-        } catch(IllegalArgumentException expected) {}
-
-
-        try {
-            address = new LinkAddress(V6_ADDRESS, 129, IFA_F_PERMANENT, RT_SCOPE_UNIVERSE);
-            fail("/129 IPv6 prefix length should cause IllegalArgumentException");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            address = new LinkAddress(V6 + "/129", IFA_F_PERMANENT, RT_SCOPE_UNIVERSE);
-            fail("/129 IPv6 prefix length should cause IllegalArgumentException");
-        } catch(IllegalArgumentException expected) {}
-
-        // Multicast addresses are rejected.
-        try {
-            address = new LinkAddress("224.0.0.2/32");
-            fail("IPv4 multicast address should cause IllegalArgumentException");
-        } catch(IllegalArgumentException expected) {}
-
-        try {
-            address = new LinkAddress("ff02::1/128");
-            fail("IPv6 multicast address should cause IllegalArgumentException");
-        } catch(IllegalArgumentException expected) {}
-    }
-
-    public void testAddressScopes() {
-        assertEquals(RT_SCOPE_HOST, new LinkAddress("::/128").getScope());
-        assertEquals(RT_SCOPE_HOST, new LinkAddress("0.0.0.0/32").getScope());
-
-        assertEquals(RT_SCOPE_LINK, new LinkAddress("::1/128").getScope());
-        assertEquals(RT_SCOPE_LINK, new LinkAddress("127.0.0.5/8").getScope());
-        assertEquals(RT_SCOPE_LINK, new LinkAddress("fe80::ace:d00d/64").getScope());
-        assertEquals(RT_SCOPE_LINK, new LinkAddress("169.254.5.12/16").getScope());
-
-        assertEquals(RT_SCOPE_SITE, new LinkAddress("fec0::dead/64").getScope());
-
-        assertEquals(RT_SCOPE_UNIVERSE, new LinkAddress("10.1.2.3/21").getScope());
-        assertEquals(RT_SCOPE_UNIVERSE, new LinkAddress("192.0.2.1/25").getScope());
-        assertEquals(RT_SCOPE_UNIVERSE, new LinkAddress("2001:db8::/64").getScope());
-        assertEquals(RT_SCOPE_UNIVERSE, new LinkAddress("5000::/127").getScope());
-    }
-
-    private void assertIsSameAddressAs(LinkAddress l1, LinkAddress l2) {
-        assertTrue(l1 + " unexpectedly does not have same address as " + l2,
-                l1.isSameAddressAs(l2));
-        assertTrue(l2 + " unexpectedly does not have same address as " + l1,
-                l2.isSameAddressAs(l1));
-    }
-
-    private void assertIsNotSameAddressAs(LinkAddress l1, LinkAddress l2) {
-        assertFalse(l1 + " unexpectedly has same address as " + l2,
-                l1.isSameAddressAs(l2));
-        assertFalse(l2 + " unexpectedly has same address as " + l1,
-                l1.isSameAddressAs(l2));
-    }
-
-    private void assertLinkAddressesEqual(LinkAddress l1, LinkAddress l2) {
-        assertTrue(l1 + " unexpectedly not equal to " + l2, l1.equals(l2));
-        assertTrue(l2 + " unexpectedly not equal to " + l1, l2.equals(l1));
-        assertEquals(l1.hashCode(), l2.hashCode());
-    }
-
-    private void assertLinkAddressesNotEqual(LinkAddress l1, LinkAddress l2) {
-        assertFalse(l1 + " unexpectedly equal to " + l2, l1.equals(l2));
-        assertFalse(l2 + " unexpectedly equal to " + l1, l2.equals(l1));
-    }
-
-    public void testEqualsAndSameAddressAs() {
-        LinkAddress l1, l2, l3;
-
-        l1 = new LinkAddress("2001:db8::1/64");
-        l2 = new LinkAddress("2001:db8::1/64");
-        assertLinkAddressesEqual(l1, l2);
-        assertIsSameAddressAs(l1, l2);
-
-        l2 = new LinkAddress("2001:db8::1/65");
-        assertLinkAddressesNotEqual(l1, l2);
-        assertIsNotSameAddressAs(l1, l2);
-
-        l2 = new LinkAddress("2001:db8::2/64");
-        assertLinkAddressesNotEqual(l1, l2);
-        assertIsNotSameAddressAs(l1, l2);
-
-
-        l1 = new LinkAddress("192.0.2.1/24");
-        l2 = new LinkAddress("192.0.2.1/24");
-        assertLinkAddressesEqual(l1, l2);
-        assertIsSameAddressAs(l1, l2);
-
-        l2 = new LinkAddress("192.0.2.1/23");
-        assertLinkAddressesNotEqual(l1, l2);
-        assertIsNotSameAddressAs(l1, l2);
-
-        l2 = new LinkAddress("192.0.2.2/24");
-        assertLinkAddressesNotEqual(l1, l2);
-        assertIsNotSameAddressAs(l1, l2);
-
-
-        // Check equals() and isSameAddressAs() on identical addresses with different flags.
-        l1 = new LinkAddress(V6_ADDRESS, 64);
-        l2 = new LinkAddress(V6_ADDRESS, 64, 0, RT_SCOPE_UNIVERSE);
-        assertLinkAddressesEqual(l1, l2);
-        assertIsSameAddressAs(l1, l2);
-
-        l2 = new LinkAddress(V6_ADDRESS, 64, IFA_F_DEPRECATED, RT_SCOPE_UNIVERSE);
-        assertLinkAddressesNotEqual(l1, l2);
-        assertIsSameAddressAs(l1, l2);
-
-        // Check equals() and isSameAddressAs() on identical addresses with different scope.
-        l1 = new LinkAddress(V4_ADDRESS, 24);
-        l2 = new LinkAddress(V4_ADDRESS, 24, 0, RT_SCOPE_UNIVERSE);
-        assertLinkAddressesEqual(l1, l2);
-        assertIsSameAddressAs(l1, l2);
-
-        l2 = new LinkAddress(V4_ADDRESS, 24, 0, RT_SCOPE_HOST);
-        assertLinkAddressesNotEqual(l1, l2);
-        assertIsSameAddressAs(l1, l2);
-
-        // Addresses with the same start or end bytes aren't equal between families.
-        l1 = new LinkAddress("32.1.13.184/24");
-        l2 = new LinkAddress("2001:db8::1/24");
-        l3 = new LinkAddress("::2001:db8/24");
-
-        byte[] ipv4Bytes = l1.getAddress().getAddress();
-        byte[] l2FirstIPv6Bytes = Arrays.copyOf(l2.getAddress().getAddress(), 4);
-        byte[] l3LastIPv6Bytes = Arrays.copyOfRange(l3.getAddress().getAddress(), 12, 16);
-        assertTrue(Arrays.equals(ipv4Bytes, l2FirstIPv6Bytes));
-        assertTrue(Arrays.equals(ipv4Bytes, l3LastIPv6Bytes));
-
-        assertLinkAddressesNotEqual(l1, l2);
-        assertIsNotSameAddressAs(l1, l2);
-
-        assertLinkAddressesNotEqual(l1, l3);
-        assertIsNotSameAddressAs(l1, l3);
-
-        // Because we use InetAddress, an IPv4 address is equal to its IPv4-mapped address.
-        // TODO: Investigate fixing this.
-        String addressString = V4 + "/24";
-        l1 = new LinkAddress(addressString);
-        l2 = new LinkAddress("::ffff:" + addressString);
-        assertLinkAddressesEqual(l1, l2);
-        assertIsSameAddressAs(l1, l2);
-    }
-
-    public void testHashCode() {
-        LinkAddress l;
-
-        l = new LinkAddress(V4_ADDRESS, 23);
-        assertEquals(-982787, l.hashCode());
-
-        l = new LinkAddress(V4_ADDRESS, 23, 0, RT_SCOPE_HOST);
-        assertEquals(-971865, l.hashCode());
-
-        l = new LinkAddress(V4_ADDRESS, 27);
-        assertEquals(-982743, l.hashCode());
-
-        l = new LinkAddress(V6_ADDRESS, 64);
-        assertEquals(1076522926, l.hashCode());
-
-        l = new LinkAddress(V6_ADDRESS, 128);
-        assertEquals(1076523630, l.hashCode());
-
-        l = new LinkAddress(V6_ADDRESS, 128, IFA_F_TENTATIVE, RT_SCOPE_UNIVERSE);
-        assertEquals(1076524846, l.hashCode());
-    }
-
-    private LinkAddress passThroughParcel(LinkAddress l) {
-        Parcel p = Parcel.obtain();
-        LinkAddress l2 = null;
-        try {
-            l.writeToParcel(p, 0);
-            p.setDataPosition(0);
-            l2 = LinkAddress.CREATOR.createFromParcel(p);
-        } finally {
-            p.recycle();
-        }
-        assertNotNull(l2);
-        return l2;
-    }
-
-    private void assertParcelingIsLossless(LinkAddress l) {
-      LinkAddress l2 = passThroughParcel(l);
-      assertEquals(l, l2);
-    }
-
-    public void testParceling() {
-        LinkAddress l;
-
-        l = new LinkAddress(V6_ADDRESS, 64, 123, 456);
-        assertParcelingIsLossless(l);
-
-        l = new LinkAddress(V4 + "/28", IFA_F_PERMANENT, RT_SCOPE_LINK);
-        assertParcelingIsLossless(l);
-    }
-
-    private void assertGlobalPreferred(LinkAddress l, String msg) {
-        assertTrue(msg, l.isGlobalPreferred());
-    }
-
-    private void assertNotGlobalPreferred(LinkAddress l, String msg) {
-        assertFalse(msg, l.isGlobalPreferred());
-    }
-
-    public void testIsGlobalPreferred() {
-        LinkAddress l;
-
-        l = new LinkAddress(V4_ADDRESS, 32, 0, RT_SCOPE_UNIVERSE);
-        assertGlobalPreferred(l, "v4,global,noflags");
-
-        l = new LinkAddress("10.10.1.7/23", 0, RT_SCOPE_UNIVERSE);
-        assertGlobalPreferred(l, "v4-rfc1918,global,noflags");
-
-        l = new LinkAddress("10.10.1.7/23", 0, RT_SCOPE_SITE);
-        assertNotGlobalPreferred(l, "v4-rfc1918,site-local,noflags");
-
-        l = new LinkAddress("127.0.0.7/8", 0, RT_SCOPE_HOST);
-        assertNotGlobalPreferred(l, "v4-localhost,node-local,noflags");
-
-        l = new LinkAddress(V6_ADDRESS, 64, 0, RT_SCOPE_UNIVERSE);
-        assertGlobalPreferred(l, "v6,global,noflags");
-
-        l = new LinkAddress(V6_ADDRESS, 64, IFA_F_PERMANENT, RT_SCOPE_UNIVERSE);
-        assertGlobalPreferred(l, "v6,global,permanent");
-
-        // IPv6 ULAs are not acceptable "global preferred" addresses.
-        l = new LinkAddress("fc12::1/64", 0, RT_SCOPE_UNIVERSE);
-        assertNotGlobalPreferred(l, "v6,ula1,noflags");
-
-        l = new LinkAddress("fd34::1/64", 0, RT_SCOPE_UNIVERSE);
-        assertNotGlobalPreferred(l, "v6,ula2,noflags");
-
-        l = new LinkAddress(V6_ADDRESS, 64, IFA_F_TEMPORARY, RT_SCOPE_UNIVERSE);
-        assertGlobalPreferred(l, "v6,global,tempaddr");
-
-        l = new LinkAddress(V6_ADDRESS, 64, (IFA_F_TEMPORARY|IFA_F_DADFAILED),
-                            RT_SCOPE_UNIVERSE);
-        assertNotGlobalPreferred(l, "v6,global,tempaddr+dadfailed");
-
-        l = new LinkAddress(V6_ADDRESS, 64, (IFA_F_TEMPORARY|IFA_F_DEPRECATED),
-                            RT_SCOPE_UNIVERSE);
-        assertNotGlobalPreferred(l, "v6,global,tempaddr+deprecated");
-
-        l = new LinkAddress(V6_ADDRESS, 64, IFA_F_TEMPORARY, RT_SCOPE_SITE);
-        assertNotGlobalPreferred(l, "v6,site-local,tempaddr");
-
-        l = new LinkAddress(V6_ADDRESS, 64, IFA_F_TEMPORARY, RT_SCOPE_LINK);
-        assertNotGlobalPreferred(l, "v6,link-local,tempaddr");
-
-        l = new LinkAddress(V6_ADDRESS, 64, IFA_F_TEMPORARY, RT_SCOPE_HOST);
-        assertNotGlobalPreferred(l, "v6,node-local,tempaddr");
-
-        l = new LinkAddress("::1/128", IFA_F_PERMANENT, RT_SCOPE_HOST);
-        assertNotGlobalPreferred(l, "v6-localhost,node-local,permanent");
-
-        l = new LinkAddress(V6_ADDRESS, 64, (IFA_F_TEMPORARY|IFA_F_TENTATIVE),
-                            RT_SCOPE_UNIVERSE);
-        assertNotGlobalPreferred(l, "v6,global,tempaddr+tentative");
-
-        l = new LinkAddress(V6_ADDRESS, 64,
-                            (IFA_F_TEMPORARY|IFA_F_TENTATIVE|IFA_F_OPTIMISTIC),
-                            RT_SCOPE_UNIVERSE);
-        assertGlobalPreferred(l, "v6,global,tempaddr+optimistic");
-    }
-}
diff --git a/core/tests/coretests/src/android/net/LinkPropertiesTest.java b/core/tests/coretests/src/android/net/LinkPropertiesTest.java
index d5f6321..9686dd9 100644
--- a/core/tests/coretests/src/android/net/LinkPropertiesTest.java
+++ b/core/tests/coretests/src/android/net/LinkPropertiesTest.java
@@ -24,10 +24,15 @@
 import android.system.OsConstants;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.test.suitebuilder.annotation.Suppress;
+import android.util.ArraySet;
+
 import junit.framework.TestCase;
 
 import java.net.InetAddress;
-import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Set;
 
 
 public class LinkPropertiesTest extends TestCase {
@@ -678,4 +683,76 @@
         stacked.addRoute(new RouteInfo((IpPrefix) null, stackedAddress));
         assertTrue(v6lp.isReachable(DNS1));
     }
+
+    @SmallTest
+    public void testLinkPropertiesEnsureDirectlyConnectedRoutes() {
+        // IPv4 case: no route added initially
+        LinkProperties rmnet0 = new LinkProperties();
+        rmnet0.setInterfaceName("rmnet0");
+        rmnet0.addLinkAddress(new LinkAddress("10.0.0.2/8"));
+        RouteInfo directRoute0 = new RouteInfo(new IpPrefix("10.0.0.0/8"), null,
+                rmnet0.getInterfaceName());
+
+        // Since no routes is added explicitly, getAllRoutes() should return empty.
+        assertTrue(rmnet0.getAllRoutes().isEmpty());
+        rmnet0.ensureDirectlyConnectedRoutes();
+        // ensureDirectlyConnectedRoutes() should have added the missing local route.
+        assertEqualRoutes(Collections.singletonList(directRoute0), rmnet0.getAllRoutes());
+
+        // IPv4 case: both direct and default routes added initially
+        LinkProperties rmnet1 = new LinkProperties();
+        rmnet1.setInterfaceName("rmnet1");
+        rmnet1.addLinkAddress(new LinkAddress("10.0.0.3/8"));
+        RouteInfo defaultRoute1 = new RouteInfo((IpPrefix) null,
+                NetworkUtils.numericToInetAddress("10.0.0.1"), rmnet1.getInterfaceName());
+        RouteInfo directRoute1 = new RouteInfo(new IpPrefix("10.0.0.0/8"), null,
+                rmnet1.getInterfaceName());
+        rmnet1.addRoute(defaultRoute1);
+        rmnet1.addRoute(directRoute1);
+
+        // Check added routes
+        assertEqualRoutes(Arrays.asList(defaultRoute1, directRoute1), rmnet1.getAllRoutes());
+        // ensureDirectlyConnectedRoutes() shouldn't change the routes since direct connected
+        // route is already part of the configuration.
+        rmnet1.ensureDirectlyConnectedRoutes();
+        assertEqualRoutes(Arrays.asList(defaultRoute1, directRoute1), rmnet1.getAllRoutes());
+
+        // IPv6 case: only default routes added initially
+        LinkProperties rmnet2 = new LinkProperties();
+        rmnet2.setInterfaceName("rmnet2");
+        rmnet2.addLinkAddress(new LinkAddress("fe80::cafe/64"));
+        rmnet2.addLinkAddress(new LinkAddress("2001:db8::2/64"));
+        RouteInfo defaultRoute2 = new RouteInfo((IpPrefix) null,
+                NetworkUtils.numericToInetAddress("2001:db8::1"), rmnet2.getInterfaceName());
+        RouteInfo directRoute2 = new RouteInfo(new IpPrefix("2001:db8::/64"), null,
+                rmnet2.getInterfaceName());
+        RouteInfo linkLocalRoute2 = new RouteInfo(new IpPrefix("fe80::/64"), null,
+                rmnet2.getInterfaceName());
+        rmnet2.addRoute(defaultRoute2);
+
+        assertEqualRoutes(Arrays.asList(defaultRoute2), rmnet2.getAllRoutes());
+        rmnet2.ensureDirectlyConnectedRoutes();
+        assertEqualRoutes(Arrays.asList(defaultRoute2, directRoute2, linkLocalRoute2),
+                rmnet2.getAllRoutes());
+
+        // Corner case: no interface name
+        LinkProperties rmnet3 = new LinkProperties();
+        rmnet3.addLinkAddress(new LinkAddress("192.168.0.2/24"));
+        RouteInfo directRoute3 = new RouteInfo(new IpPrefix("192.168.0.0/24"), null,
+                rmnet3.getInterfaceName());
+
+        assertTrue(rmnet3.getAllRoutes().isEmpty());
+        rmnet3.ensureDirectlyConnectedRoutes();
+        assertEqualRoutes(Collections.singletonList(directRoute3), rmnet3.getAllRoutes());
+
+    }
+
+    private void assertEqualRoutes(Collection<RouteInfo> expected, Collection<RouteInfo> actual) {
+        Set<RouteInfo> expectedSet = new ArraySet<>(expected);
+        Set<RouteInfo> actualSet = new ArraySet<>(actual);
+        // Duplicated entries in actual routes are considered failures
+        assertEquals(actual.size(), actualSet.size());
+
+        assertEquals(expectedSet, actualSet);
+    }
 }
diff --git a/core/tests/coretests/src/android/net/SSLSessionCacheTest.java b/core/tests/coretests/src/android/net/SSLSessionCacheTest.java
index ec130e0..11d066b 100644
--- a/core/tests/coretests/src/android/net/SSLSessionCacheTest.java
+++ b/core/tests/coretests/src/android/net/SSLSessionCacheTest.java
@@ -44,12 +44,9 @@
 
         try {
             SSLSessionCache.install(new SSLSessionCache(mock), ctx);
-            clientCtx.getSession("www.foogle.com", 443);
-            Mockito.verify(mock).getSessionData(Mockito.anyString(), Mockito.anyInt());
         } finally {
             // Restore cacheless behaviour.
             SSLSessionCache.install(null, ctx);
-            clientCtx.getSession("www.foogle.com", 443);
             Mockito.verifyNoMoreInteractions(mock);
         }
     }
diff --git a/core/tests/coretests/src/android/os/BundleTest.java b/core/tests/coretests/src/android/os/BundleTest.java
new file mode 100644
index 0000000..9fcf96d
--- /dev/null
+++ b/core/tests/coretests/src/android/os/BundleTest.java
@@ -0,0 +1,140 @@
+/*
+ * 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 static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.support.test.runner.AndroidJUnit4;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * 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
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class BundleTest {
+    /**
+     * Create a test bundle, parcel it and return the parcel.
+     */
+    private Parcel createBundleParcel(boolean withFd) throws Exception {
+        final Bundle source = new Bundle();
+        source.putString("string", "abc");
+        source.putInt("int", 1);
+        if (withFd) {
+            ParcelFileDescriptor[] pipe = ParcelFileDescriptor.createPipe();
+            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;
+    }
+
+    /**
+     * Verify a bundle generated by {@link #createBundleParcel(boolean)}.
+     */
+    private void checkBundle(Bundle b, boolean withFd) {
+        // First, do the checks without actually unparceling the bundle.
+        // (Note looking into the contents will unparcel a bundle, so we'll do it later.)
+        assertTrue("mParcelledData shouldn't be null here.", b.isParcelled());
+
+        // Make sure FLAG_HAS_FDS and FLAG_HAS_FDS_KNOWN are set/cleared properly.
+        if (withFd) {
+            // FLAG_HAS_FDS and FLAG_HAS_FDS_KNOWN should both be set.
+            assertEquals(Bundle.FLAG_HAS_FDS | Bundle.FLAG_HAS_FDS_KNOWN,
+                    b.mFlags & (Bundle.FLAG_HAS_FDS | Bundle.FLAG_HAS_FDS_KNOWN));
+        } else {
+            // FLAG_HAS_FDS_KNOWN should be set, bot not FLAG_HAS_FDS.
+            assertEquals(Bundle.FLAG_HAS_FDS_KNOWN,
+                    b.mFlags & (Bundle.FLAG_HAS_FDS | Bundle.FLAG_HAS_FDS_KNOWN));
+        }
+
+        // Then, check the contents.
+        assertEquals("abc", b.getString("string"));
+        assertEquals(1, b.getInt("int"));
+
+        // Make sure FLAG_HAS_FDS and FLAG_HAS_FDS_KNOWN are set/cleared properly.
+        if (withFd) {
+            assertEquals(ParcelFileDescriptor.class, b.getParcelable("fd").getClass());
+            assertEquals(3, b.keySet().size());
+        } else {
+            assertEquals(2, b.keySet().size());
+        }
+        assertFalse(b.isParcelled());
+    }
+
+    @Test
+    public void testCreateFromParcel() throws Exception {
+        boolean withFd;
+        Parcel p;
+        Bundle b;
+        int length;
+
+        withFd = false;
+
+        // new Bundle with p
+        p = createBundleParcel(withFd);
+        checkBundle(new Bundle(p), withFd);
+        p.recycle();
+
+        // new Bundle with p and length
+        p = createBundleParcel(withFd);
+        length = p.readInt();
+        checkBundle(new Bundle(p, length), withFd);
+        p.recycle();
+
+        // readFromParcel()
+        p = createBundleParcel(withFd);
+        b = new Bundle();
+        b.readFromParcel(p);
+        checkBundle(b, withFd);
+        p.recycle();
+
+        // Same test with FDs.
+        withFd = true;
+
+        // new Bundle with p
+        p = createBundleParcel(withFd);
+        checkBundle(new Bundle(p), withFd);
+        p.recycle();
+
+        // new Bundle with p and length
+        p = createBundleParcel(withFd);
+        length = p.readInt();
+        checkBundle(new Bundle(p, length), withFd);
+        p.recycle();
+
+        // readFromParcel()
+        p = createBundleParcel(withFd);
+        b = new Bundle();
+        b.readFromParcel(p);
+        checkBundle(b, withFd);
+        p.recycle();
+    }
+}
diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
index a979ac8..662f20e 100644
--- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
@@ -26,6 +26,7 @@
 import static java.lang.reflect.Modifier.isPublic;
 import static java.lang.reflect.Modifier.isStatic;
 
+import android.platform.test.annotations.Presubmit;
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
 
@@ -37,6 +38,7 @@
 import java.util.Set;
 
 /** Tests that ensure appropriate settings are backed up. */
+@Presubmit
 @RunWith(AndroidJUnit4.class)
 @SmallTest
 public class SettingsBackupTest {
@@ -97,7 +99,9 @@
                     Settings.Global.ALARM_MANAGER_CONSTANTS,
                     Settings.Global.ALLOW_USER_SWITCHING_WHEN_SYSTEM_USER_LOCKED,
                     Settings.Global.ALWAYS_FINISH_ACTIVITIES,
+                    Settings.Global.ALWAYS_ON_DISPLAY_CONSTANTS,
                     Settings.Global.ANIMATOR_DURATION_SCALE,
+                    Settings.Global.ANOMALY_DETECTION_CONSTANTS,
                     Settings.Global.APN_DB_UPDATE_CONTENT_URL,
                     Settings.Global.APN_DB_UPDATE_METADATA_URL,
                     Settings.Global.APP_IDLE_CONSTANTS,
@@ -117,7 +121,6 @@
                     Settings.Global.BLUETOOTH_INTEROPERABILITY_LIST,
                     Settings.Global.BLUETOOTH_MAP_CLIENT_PRIORITY_PREFIX,
                     Settings.Global.BLUETOOTH_MAP_PRIORITY_PREFIX,
-                    Settings.Global.BLUETOOTH_ON, // Candidate for backup?
                     Settings.Global.BLUETOOTH_PAN_PRIORITY_PREFIX,
                     Settings.Global.BLUETOOTH_PBAP_CLIENT_PRIORITY_PREFIX,
                     Settings.Global.BLUETOOTH_SAP_PRIORITY_PREFIX,
@@ -156,6 +159,7 @@
                     Settings.Global.DEBUG_VIEW_ATTRIBUTES,
                     Settings.Global.DEFAULT_DNS_SERVER,
                     Settings.Global.DEFAULT_INSTALL_LOCATION,
+                    Settings.Global.DEFAULT_RESTRICT_BACKGROUND_DATA,
                     Settings.Global.DESK_DOCK_SOUND,
                     Settings.Global.DESK_UNDOCK_SOUND,
                     Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT,
@@ -166,6 +170,7 @@
                     Settings.Global.DEVICE_IDLE_CONSTANTS,
                     Settings.Global.DEVICE_IDLE_CONSTANTS_WATCH,
                     Settings.Global.BATTERY_SAVER_CONSTANTS,
+                    Settings.Global.DEFAULT_SM_DP_PLUS,
                     Settings.Global.DEVICE_NAME,
                     Settings.Global.DEVICE_POLICY_CONSTANTS,
                     Settings.Global.DEVICE_PROVISIONED,
@@ -190,6 +195,7 @@
                     Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED,
                     Settings.Global.ENABLE_CACHE_QUOTA_CALCULATION,
                     Settings.Global.ENABLE_CELLULAR_ON_BOOT,
+                    Settings.Global.ENABLE_DELETION_HELPER_NO_THRESHOLD_TOGGLE,
                     Settings.Global.ENABLE_DISKSTATS_LOGGING,
                     Settings.Global.ENABLE_EPHEMERAL_FEATURE,
                     Settings.Global.ENHANCED_4G_MODE_ENABLED,
@@ -213,6 +219,7 @@
                     Settings.Global.HTTP_PROXY,
                     Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY,
                     Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY,
+                    Settings.Global.INSTANT_APP_DEXOPT_ENABLED,
                     Settings.Global.INTENT_FIREWALL_UPDATE_CONTENT_URL,
                     Settings.Global.INTENT_FIREWALL_UPDATE_METADATA_URL,
                     Settings.Global.JOB_SCHEDULER_CONSTANTS,
@@ -247,6 +254,7 @@
                     Settings.Global.NETSTATS_GLOBAL_ALERT_BYTES,
                     Settings.Global.NETSTATS_POLL_INTERVAL,
                     Settings.Global.NETSTATS_SAMPLE_ENABLED,
+                    Settings.Global.NETSTATS_AUGMENT_ENABLED,
                     Settings.Global.NETSTATS_TIME_CACHE_MAX_AGE,
                     Settings.Global.NETSTATS_UID_BUCKET_DURATION,
                     Settings.Global.NETSTATS_UID_DELETE_AGE,
@@ -269,6 +277,7 @@
                     Settings.Global.NEW_CONTACT_AGGREGATOR,
                     Settings.Global.NITZ_UPDATE_DIFF,
                     Settings.Global.NITZ_UPDATE_SPACING,
+                    Settings.Global.NOTIFICATION_SNOOZE_OPTIONS,
                     Settings.Global.NSD_ON,
                     Settings.Global.NTP_SERVER,
                     Settings.Global.NTP_TIMEOUT,
@@ -320,7 +329,9 @@
                     Settings.Global.SMS_SHORT_CODE_RULE,
                     Settings.Global.SMS_SHORT_CODES_UPDATE_CONTENT_URL,
                     Settings.Global.SMS_SHORT_CODES_UPDATE_METADATA_URL,
+                    Settings.Global.SPEED_LABEL_CACHE_EVICTION_AGE_MILLIS,
                     Settings.Global.STORAGE_BENCHMARK_INTERVAL,
+                    Settings.Global.STORAGE_SETTINGS_CLOBBER_THRESHOLD,
                     Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS,
                     Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL,
                     Settings.Global.SYS_STORAGE_CACHE_MAX_BYTES,
@@ -331,7 +342,9 @@
                     Settings.Global.TCP_DEFAULT_INIT_RWND,
                     Settings.Global.TETHER_DUN_APN,
                     Settings.Global.TETHER_DUN_REQUIRED,
+                    Settings.Global.TETHER_OFFLOAD_DISABLED,
                     Settings.Global.TETHER_SUPPORTED,
+                    Settings.Global.TEXT_CLASSIFIER_CONSTANTS,
                     Settings.Global.THEATER_MODE_ON,
                     Settings.Global.TRANSITION_ANIMATION_SCALE,
                     Settings.Global.TRUSTED_SOUND,
@@ -432,6 +445,7 @@
                  Settings.Secure.DOZE_PULSE_ON_LONG_PRESS,
                  Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION,
                  Settings.Secure.ENABLED_NOTIFICATION_ASSISTANT,
+                 Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,
                  Settings.Secure.ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES,
                  Settings.Secure.ENABLED_PRINT_SERVICES,
                  Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS,
@@ -486,6 +500,7 @@
                  Settings.Secure.TRUST_AGENTS_INITIALIZED,
                  Settings.Secure.TV_INPUT_CUSTOM_LABELS,
                  Settings.Secure.TV_INPUT_HIDDEN_INPUTS,
+                 Settings.Secure.TV_USER_SETUP_COMPLETE,
                  Settings.Secure.UI_NIGHT_MODE, // candidate?
                  Settings.Secure.UNKNOWN_SOURCES_DEFAULT_REVERSED,
                  Settings.Secure.UNSAFE_VOLUME_MUSIC_ACTIVE_MS,
diff --git a/core/tests/coretests/src/android/text/StaticLayoutTest.java b/core/tests/coretests/src/android/text/StaticLayoutTest.java
index 74a6cc6..f1c4e56 100644
--- a/core/tests/coretests/src/android/text/StaticLayoutTest.java
+++ b/core/tests/coretests/src/android/text/StaticLayoutTest.java
@@ -22,10 +22,12 @@
 import static org.junit.Assert.assertTrue;
 
 import android.graphics.Paint.FontMetricsInt;
+import android.os.LocaleList;
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
 import android.text.Layout.Alignment;
 import android.text.method.EditorState;
+import android.text.style.LocaleSpan;
 import android.util.Log;
 
 import org.junit.Before;
@@ -35,6 +37,7 @@
 import java.text.Normalizer;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 
 /**
  * Tests StaticLayout vertical metrics behavior.
@@ -671,4 +674,87 @@
             assertEquals(testLabel, 4, layout.getOffsetToRightOf(5));
         }
     }
+
+    @Test
+    public void testLocaleSpanAffectsHyphenation() {
+        TextPaint paint = new TextPaint();
+        paint.setTextLocale(Locale.US);
+        // Private use language, with no hyphenation rules.
+        final Locale privateLocale = Locale.forLanguageTag("qaa");
+
+        final String longWord = "philanthropic";
+        final float wordWidth = paint.measureText(longWord);
+        // Wide enough that words get hyphenated by default.
+        final int paraWidth = Math.round(wordWidth * 1.8f);
+        final String sentence = longWord + " " + longWord + " " + longWord + " " + longWord + " "
+                + longWord + " " + longWord;
+
+        final int numEnglishLines = StaticLayout.Builder
+                .obtain(sentence, 0, sentence.length(), paint, paraWidth)
+                .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_FULL)
+                .setBreakStrategy(Layout.BREAK_STRATEGY_HIGH_QUALITY)
+                .build()
+                .getLineCount();
+
+        {
+            final SpannableString text = new SpannableString(sentence);
+            text.setSpan(new LocaleSpan(privateLocale), 0, text.length(),
+                    Spanned.SPAN_INCLUSIVE_INCLUSIVE);
+            final int numPrivateLocaleLines = StaticLayout.Builder
+                    .obtain(text, 0, text.length(), paint, paraWidth)
+                    .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_FULL)
+                    .setBreakStrategy(Layout.BREAK_STRATEGY_HIGH_QUALITY)
+                    .build()
+                    .getLineCount();
+
+            // Since the paragraph set to English gets hyphenated, the number of lines would be
+            // smaller than the number of lines when there is a span setting a language that
+            // doesn't get hyphenated.
+            assertTrue(numEnglishLines < numPrivateLocaleLines);
+        }
+        {
+            // Same as the above test, except that the locale span now uses a locale list starting
+            // with the private non-hyphenating locale.
+            final SpannableString text = new SpannableString(sentence);
+            final LocaleList locales = new LocaleList(privateLocale, Locale.US);
+            text.setSpan(new LocaleSpan(locales), 0, text.length(),
+                    Spanned.SPAN_INCLUSIVE_INCLUSIVE);
+            final int numPrivateLocaleLines = StaticLayout.Builder
+                    .obtain(text, 0, text.length(), paint, paraWidth)
+                    .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_FULL)
+                    .setBreakStrategy(Layout.BREAK_STRATEGY_HIGH_QUALITY)
+                    .build()
+                    .getLineCount();
+
+            assertTrue(numEnglishLines < numPrivateLocaleLines);
+        }
+        {
+            final SpannableString text = new SpannableString(sentence);
+            // Apply the private LocaleSpan only to the first word, which is not getting hyphenated
+            // anyway.
+            text.setSpan(new LocaleSpan(privateLocale), 0, longWord.length(),
+                    Spanned.SPAN_INCLUSIVE_INCLUSIVE);
+            final int numPrivateLocaleLines = StaticLayout.Builder
+                    .obtain(text, 0, text.length(), paint, paraWidth)
+                    .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_FULL)
+                    .setBreakStrategy(Layout.BREAK_STRATEGY_HIGH_QUALITY)
+                    .build()
+                    .getLineCount();
+
+            // Since the first word is not hyphenated anyway (there's enough width), the LocaleSpan
+            // should not affect the layout.
+            assertEquals(numEnglishLines, numPrivateLocaleLines);
+        }
+    }
+
+    @Test
+    public void testGetHeight_zeroMaxLines() {
+        final String text = "a\nb";
+        final TextPaint paint = new TextPaint();
+        final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), paint,
+                Integer.MAX_VALUE).setMaxLines(0).build();
+
+        assertEquals(0, layout.getHeight(true));
+        assertEquals(2, layout.getLineCount());
+    }
 }
diff --git a/core/tests/coretests/src/android/text/TextUtilsTest.java b/core/tests/coretests/src/android/text/TextUtilsTest.java
index 312c4fb..472b3e2 100644
--- a/core/tests/coretests/src/android/text/TextUtilsTest.java
+++ b/core/tests/coretests/src/android/text/TextUtilsTest.java
@@ -20,26 +20,28 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import android.support.test.runner.AndroidJUnit4;
-import com.google.android.collect.Lists;
-
 import android.os.Parcel;
 import android.support.test.filters.LargeTest;
 import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
 import android.test.MoreAsserts;
 import android.text.style.StyleSpan;
 import android.text.util.Rfc822Token;
 import android.text.util.Rfc822Tokenizer;
 import android.view.View;
 
+import com.google.android.collect.Lists;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
 /**
  * TextUtilsTest tests {@link TextUtils}.
@@ -361,14 +363,23 @@
     @Test
     public void testCharSequenceCreator() {
         Parcel p = Parcel.obtain();
-        TextUtils.writeToParcel(null, p, 0);
-        CharSequence text = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(p);
-        assertNull("null CharSequence should generate null from parcel", text);
+        CharSequence text;
+        try {
+            TextUtils.writeToParcel(null, p, 0);
+            text = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(p);
+            assertNull("null CharSequence should generate null from parcel", text);
+        } finally {
+            p.recycle();
+        }
         p = Parcel.obtain();
-        TextUtils.writeToParcel("test", p, 0);
-        p.setDataPosition(0);
-        text = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(p);
-        assertEquals("conversion to/from parcel failed", "test", text);
+        try {
+            TextUtils.writeToParcel("test", p, 0);
+            p.setDataPosition(0);
+            text = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(p);
+            assertEquals("conversion to/from parcel failed", "test", text);
+        } finally {
+            p.recycle();
+        }
     }
 
     @Test
@@ -376,10 +387,14 @@
         Parcel p;
         CharSequence text;
         p = Parcel.obtain();
-        TextUtils.writeToParcel(null, p, 0);
-        p.setDataPosition(0);
-        text = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(p);
-        assertNull("null CharSequence should generate null from parcel", text);
+        try {
+            TextUtils.writeToParcel(null, p, 0);
+            p.setDataPosition(0);
+            text = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(p);
+            assertNull("null CharSequence should generate null from parcel", text);
+        } finally {
+            p.recycle();
+        }
     }
 
     @Test
@@ -387,10 +402,14 @@
         Parcel p;
         CharSequence text;
         p = Parcel.obtain();
-        TextUtils.writeToParcel(new SpannableString("test"), p, 0);
-        p.setDataPosition(0);
-        text = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(p);
-        assertEquals("conversion to/from parcel failed", "test", text.toString());
+        try {
+            TextUtils.writeToParcel(new SpannableString("test"), p, 0);
+            p.setDataPosition(0);
+            text = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(p);
+            assertEquals("conversion to/from parcel failed", "test", text.toString());
+        } finally {
+            p.recycle();
+        }
     }
 
     @Test
@@ -398,10 +417,14 @@
         Parcel p;
         CharSequence text;
         p = Parcel.obtain();
-        TextUtils.writeToParcel("test", p, 0);
-        p.setDataPosition(0);
-        text = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(p);
-        assertEquals("conversion to/from parcel failed", "test", text.toString());
+        try {
+            TextUtils.writeToParcel("test", p, 0);
+            p.setDataPosition(0);
+            text = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(p);
+            assertEquals("conversion to/from parcel failed", "test", text.toString());
+        } finally {
+            p.recycle();
+        }
     }
 
     /**
@@ -580,4 +603,84 @@
         assertEquals(View.LAYOUT_DIRECTION_RTL,
                 TextUtils.getLayoutDirectionFromLocale(Locale.forLanguageTag("tr-Arab")));
     }
+
+    @Test
+    public void testToUpperCase() {
+        {
+            final CharSequence result = TextUtils.toUpperCase(null, "abc", false);
+            assertEquals(StringBuilder.class, result.getClass());
+            assertEquals("ABC", result.toString());
+        }
+        {
+            final SpannableString str = new SpannableString("abc");
+            Object span = new Object();
+            str.setSpan(span, 1, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
+
+            final CharSequence result = TextUtils.toUpperCase(null, str, true /* copySpans */);
+            assertEquals(SpannableStringBuilder.class, result.getClass());
+            assertEquals("ABC", result.toString());
+            final Spanned spanned = (Spanned) result;
+            final Object[] resultSpans = spanned.getSpans(0, result.length(), Object.class);
+            assertEquals(1, resultSpans.length);
+            assertSame(span, resultSpans[0]);
+            assertEquals(1, spanned.getSpanStart(span));
+            assertEquals(2, spanned.getSpanEnd(span));
+            assertEquals(Spanned.SPAN_INCLUSIVE_INCLUSIVE, spanned.getSpanFlags(span));
+        }
+        {
+            final Locale turkish = new Locale("tr", "TR");
+            final CharSequence result = TextUtils.toUpperCase(turkish, "i", false);
+            assertEquals(StringBuilder.class, result.getClass());
+            assertEquals("İ", result.toString());
+        }
+        {
+            final String str = "ABC";
+            assertSame(str, TextUtils.toUpperCase(null, str, false));
+        }
+        {
+            final SpannableString str = new SpannableString("ABC");
+            str.setSpan(new Object(), 1, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
+            assertSame(str, TextUtils.toUpperCase(null, str, true /* copySpans */));
+        }
+    }
+
+    // Copied from cts/tests/tests/widget/src/android/widget/cts/TextViewTest.java and modified
+    // for the TextUtils.toUpperCase method.
+    @Test
+    public void testToUpperCase_SpansArePreserved() {
+        final Locale greek = new Locale("el", "GR");
+        final String lowerString = "ι\u0301ριδα";  // ίριδα with first letter decomposed
+        final String upperString = "ΙΡΙΔΑ";  // uppercased
+        // expected lowercase to uppercase index map
+        final int[] indexMap = {0, 1, 1, 2, 3, 4, 5};
+        final int flags = Spanned.SPAN_INCLUSIVE_INCLUSIVE;
+
+        final Spannable source = new SpannableString(lowerString);
+        source.setSpan(new Object(), 0, 1, flags);
+        source.setSpan(new Object(), 1, 2, flags);
+        source.setSpan(new Object(), 2, 3, flags);
+        source.setSpan(new Object(), 3, 4, flags);
+        source.setSpan(new Object(), 4, 5, flags);
+        source.setSpan(new Object(), 5, 6, flags);
+        source.setSpan(new Object(), 0, 2, flags);
+        source.setSpan(new Object(), 1, 3, flags);
+        source.setSpan(new Object(), 2, 4, flags);
+        source.setSpan(new Object(), 0, 6, flags);
+        final Object[] sourceSpans = source.getSpans(0, source.length(), Object.class);
+
+        final CharSequence uppercase = TextUtils.toUpperCase(greek, source, true /* copySpans */);
+        assertEquals(SpannableStringBuilder.class, uppercase.getClass());
+        final Spanned result = (Spanned) uppercase;
+
+        assertEquals(upperString, result.toString());
+        final Object[] resultSpans = result.getSpans(0, result.length(), Object.class);
+        assertEquals(sourceSpans.length, resultSpans.length);
+        for (int i = 0; i < sourceSpans.length; i++) {
+            assertSame(sourceSpans[i], resultSpans[i]);
+            final Object span = sourceSpans[i];
+            assertEquals(indexMap[source.getSpanStart(span)], result.getSpanStart(span));
+            assertEquals(indexMap[source.getSpanEnd(span)], result.getSpanEnd(span));
+            assertEquals(source.getSpanFlags(span), result.getSpanFlags(span));
+        }
+    }
 }
diff --git a/core/tests/coretests/src/android/text/format/FormatterTest.java b/core/tests/coretests/src/android/text/format/FormatterTest.java
index a4ce911..24e3646 100644
--- a/core/tests/coretests/src/android/text/format/FormatterTest.java
+++ b/core/tests/coretests/src/android/text/format/FormatterTest.java
@@ -17,21 +17,26 @@
 package android.text.format;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
 
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
+import android.icu.util.MeasureUnit;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
 import android.text.format.Formatter.BytesResult;
 
-import java.util.Locale;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.util.Locale;
+import java.util.Set;
+
+
 @SmallTest
 @RunWith(AndroidJUnit4.class)
 public class FormatterTest {
@@ -54,7 +59,7 @@
 
     @Test
     public void testFormatBytes() {
-        setLocale(Locale.ENGLISH);
+        setLocale(Locale.US);
 
         checkFormatBytes(0, true, "0", 0);
         checkFormatBytes(0, false, "0", 0);
@@ -99,6 +104,95 @@
         checkFormatBytes(9123000, false, "9,12", 9120000);
     }
 
+    private static final long SECOND = 1000;
+    private static final long MINUTE = 60 * SECOND;
+    private static final long HOUR = 60 * MINUTE;
+    private static final long DAY = 24 * HOUR;
+
+    @Test
+    public void testFormatShortElapsedTime() {
+        setLocale(Locale.US);
+        assertEquals("3 days", Formatter.formatShortElapsedTime(mContext, 2 * DAY + 12 * HOUR));
+        assertEquals("2 days", Formatter.formatShortElapsedTime(mContext, 2 * DAY + 11 * HOUR));
+        assertEquals("2 days", Formatter.formatShortElapsedTime(mContext, 2 * DAY));
+        assertEquals("1 day, 23 hr",
+                Formatter.formatShortElapsedTime(mContext, 1 * DAY + 23 * HOUR + 59 * MINUTE));
+        assertEquals("1 day, 0 hr",
+                Formatter.formatShortElapsedTime(mContext, 1 * DAY + 59 * MINUTE));
+        assertEquals("1 day, 0 hr", Formatter.formatShortElapsedTime(mContext, 1 * DAY));
+        assertEquals("24 hr", Formatter.formatShortElapsedTime(mContext, 23 * HOUR + 30 * MINUTE));
+        assertEquals("3 hr", Formatter.formatShortElapsedTime(mContext, 2 * HOUR + 30 * MINUTE));
+        assertEquals("2 hr", Formatter.formatShortElapsedTime(mContext, 2 * HOUR));
+        assertEquals("1 hr, 0 min", Formatter.formatShortElapsedTime(mContext, 1 * HOUR));
+        assertEquals("60 min",
+                Formatter.formatShortElapsedTime(mContext, 59 * MINUTE + 30 * SECOND));
+        assertEquals("59 min",
+                Formatter.formatShortElapsedTime(mContext, 59 * MINUTE));
+        assertEquals("3 min", Formatter.formatShortElapsedTime(mContext, 2 * MINUTE + 30 * SECOND));
+        assertEquals("2 min", Formatter.formatShortElapsedTime(mContext, 2 * MINUTE));
+        assertEquals("1 min, 59 sec",
+                Formatter.formatShortElapsedTime(mContext, 1 * MINUTE + 59 * SECOND + 999));
+        assertEquals("1 min, 0 sec", Formatter.formatShortElapsedTime(mContext, 1 * MINUTE));
+        assertEquals("59 sec", Formatter.formatShortElapsedTime(mContext, 59 * SECOND + 999));
+        assertEquals("1 sec", Formatter.formatShortElapsedTime(mContext, 1 * SECOND));
+        assertEquals("0 sec", Formatter.formatShortElapsedTime(mContext, 1));
+        assertEquals("0 sec", Formatter.formatShortElapsedTime(mContext, 0));
+
+        // Make sure it works on different locales.
+        setLocale(Locale.FRANCE);
+        assertEquals("2 j", Formatter.formatShortElapsedTime(mContext, 2 * DAY));
+    }
+
+    @Test
+    public void testFormatShortElapsedTimeRoundingUpToMinutes() {
+        setLocale(Locale.US);
+        assertEquals("3 days", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 2 * DAY + 12 * HOUR));
+        assertEquals("2 days", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 2 * DAY + 11 * HOUR));
+        assertEquals("2 days", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 2 * DAY));
+        assertEquals("1 day, 23 hr", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 1 * DAY + 23 * HOUR + 59 * MINUTE));
+        assertEquals("1 day, 0 hr", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 1 * DAY + 59 * MINUTE));
+        assertEquals("1 day, 0 hr", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 1 * DAY));
+        assertEquals("24 hr", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 23 * HOUR + 30 * MINUTE));
+        assertEquals("3 hr", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 2 * HOUR + 30 * MINUTE));
+        assertEquals("2 hr", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 2 * HOUR));
+        assertEquals("1 hr, 0 min", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 1 * HOUR));
+        assertEquals("1 hr, 0 min", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 59 * MINUTE + 30 * SECOND));
+        assertEquals("59 min", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 59 * MINUTE));
+        assertEquals("3 min", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 2 * MINUTE + 30 * SECOND));
+        assertEquals("2 min", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 2 * MINUTE));
+        assertEquals("2 min", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 1 * MINUTE + 59 * SECOND + 999));
+        assertEquals("1 min", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 1 * MINUTE));
+        assertEquals("1 min", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 59 * SECOND + 999));
+        assertEquals("1 min", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 1 * SECOND));
+        assertEquals("1 min", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 1));
+        assertEquals("0 min", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 0));
+
+        // Make sure it works on different locales.
+        setLocale(new Locale("ru", "RU"));
+        assertEquals("1 мин", Formatter.formatShortElapsedTimeRoundingUpToMinutes(
+                mContext, 1 * SECOND));
+    }
+
     private void checkFormatBytes(long bytes, boolean useShort,
             String expectedString, long expectedRounded) {
         BytesResult r = Formatter.formatBytes(mContext.getResources(), bytes,
@@ -115,4 +209,24 @@
 
         Locale.setDefault(locale);
     }
+
+    /**
+     * Verifies that Formatter doesn't "leak" the locally defined petabyte unit into ICU via the
+     * {@link MeasureUnit} registry. This test can fail for two reasons:
+     * 1. we regressed and started leaking again. In this case the code needs to be fixed.
+     * 2. ICU started supporting petabyte as a unit, in which case change one needs to revert this
+     * change (I494fb59a3b3742f35cbdf6b8705817f404a2c6b0), remove Formatter.PETABYTE and replace any
+     * usages of that field with just MeasureUnit.PETABYTE.
+     */
+    // http://b/65632959
+    @Test
+    public void doesNotLeakPetabyte() {
+        // Ensure that the Formatter class is loaded when we call .getAvailable().
+        Formatter.formatFileSize(mContext, Long.MAX_VALUE);
+        Set<MeasureUnit> digitalUnits = MeasureUnit.getAvailable("digital");
+        for (MeasureUnit unit : digitalUnits) {
+            // This assert can fail if we don't leak PETABYTE, but ICU has added it, see #2 above.
+            assertNotEquals("petabyte", unit.getSubtype());
+        }
+    }
 }
diff --git a/core/tests/coretests/src/android/text/util/LinkifyTest.java b/core/tests/coretests/src/android/text/util/LinkifyTest.java
index 73ff046..be3a0be 100644
--- a/core/tests/coretests/src/android/text/util/LinkifyTest.java
+++ b/core/tests/coretests/src/android/text/util/LinkifyTest.java
@@ -80,7 +80,7 @@
 
         tv = new TextView(createUsEnglishContext());
         tv.setAutoLinkMask(Linkify.ALL);
-        tv.setText("Hey, foo@google.com, call 415-555-1212.");
+        tv.setText("Hey, foo@google.com, call +1-415-555-1212.");
 
         assertTrue(tv.getMovementMethod() instanceof LinkMovementMethod);
         assertTrue(tv.getUrls().length == 2);
@@ -93,7 +93,7 @@
         tv = new TextView(createUsEnglishContext());
         tv.setAutoLinkMask(Linkify.ALL);
         tv.setLinksClickable(false);
-        tv.setText("Hey, foo@google.com, call 415-555-1212.");
+        tv.setText("Hey, foo@google.com, call +1-415-555-1212.");
 
         assertFalse(tv.getMovementMethod() instanceof LinkMovementMethod);
         assertTrue(tv.getUrls().length == 2);
diff --git a/core/tests/coretests/src/android/transition/FadeTransitionTest.java b/core/tests/coretests/src/android/transition/FadeTransitionTest.java
index 674b363..22365ba 100644
--- a/core/tests/coretests/src/android/transition/FadeTransitionTest.java
+++ b/core/tests/coretests/src/android/transition/FadeTransitionTest.java
@@ -16,22 +16,24 @@
 
 package android.transition;
 
+import android.animation.Animator;
 import android.animation.AnimatorSetActivity;
 import android.app.Activity;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
 import android.test.ActivityInstrumentationTestCase2;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.transition.Transition.TransitionListener;
-import android.transition.TransitionListenerAdapter;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
 
 import com.android.frameworks.coretests.R;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import static android.support.test.espresso.Espresso.onView;
-
 public class FadeTransitionTest extends ActivityInstrumentationTestCase2<AnimatorSetActivity> {
     Activity mActivity;
     public FadeTransitionTest() {
@@ -129,6 +131,43 @@
         assertEquals(View.INVISIBLE, square1.getVisibility());
     }
 
+    @SmallTest
+    public void testSnapshotView() throws Throwable {
+        final View square1 = mActivity.findViewById(R.id.square1);
+
+        final CountDownLatch disappearCalled = new CountDownLatch(1);
+        final Fade fadeOut = new Fade(Fade.MODE_OUT) {
+            @Override
+            public Animator onDisappear(ViewGroup sceneRoot, View view,
+                    TransitionValues startValues,
+                    TransitionValues endValues) {
+                assertNotSame(square1, view);
+                assertTrue(view instanceof ImageView);
+                ImageView imageView = (ImageView) view;
+                BitmapDrawable background = (BitmapDrawable) imageView.getDrawable();
+                Bitmap bitmap = background.getBitmap();
+                assertEquals(Bitmap.Config.HARDWARE, bitmap.getConfig());
+                Bitmap copy = bitmap.copy(Bitmap.Config.ARGB_8888, false);
+                assertEquals(0xFFFF0000, copy.getPixel(1, 1));
+                disappearCalled.countDown();
+                return super.onDisappear(sceneRoot, view, startValues, endValues);
+            }
+        };
+
+        runTestOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                ViewGroup container = mActivity.findViewById(R.id.container);
+                TransitionManager.beginDelayedTransition(container, fadeOut);
+                container.removeView(square1);
+                FrameLayout parent = new FrameLayout(mActivity);
+                parent.addView(square1);
+            }
+        });
+
+        assertTrue(disappearCalled.await(1, TimeUnit.SECONDS));
+    }
+
     public TransitionLatch setVisibilityInTransition(final Transition transition, int viewId,
             final int visibility) throws Throwable {
         final ViewGroup sceneRoot = (ViewGroup) mActivity.findViewById(R.id.container);
diff --git a/core/tests/coretests/src/android/transition/TransitionTest.java b/core/tests/coretests/src/android/transition/TransitionTest.java
index 7e72e25..ab4320c 100644
--- a/core/tests/coretests/src/android/transition/TransitionTest.java
+++ b/core/tests/coretests/src/android/transition/TransitionTest.java
@@ -28,6 +28,8 @@
 
 import com.android.frameworks.coretests.R;
 
+import java.lang.reflect.Field;
+
 public class TransitionTest extends ActivityInstrumentationTestCase2<AnimatorSetActivity> {
     Activity mActivity;
     public TransitionTest() {
@@ -77,27 +79,47 @@
         fade.setEpicenterCallback(epicenterCallback);
 
         Fade clone = (Fade) fade.clone();
-        assertEquals(fade.mStartDelay, clone.mStartDelay);
-        assertEquals(fade.mDuration, clone.mDuration);
-        assertEquals(fade.mInterpolator, clone.mInterpolator);
-        assertEquals(fade.mPropagation, clone.mPropagation);
+        assertFieldEquals(fade, clone, "mStartDelay");
+        assertFieldEquals(fade, clone, "mDuration");
+        assertFieldEquals(fade, clone, "mInterpolator");
+        assertFieldEquals(fade, clone, "mPropagation");
         assertEquals(fade.getPathMotion(), clone.getPathMotion());
         assertEquals(fade.getEpicenterCallback(), clone.getEpicenterCallback());
-        assertEquals(fade.mNameOverrides, clone.mNameOverrides);
-        assertEquals(fade.mMatchOrder, clone.mMatchOrder);
+        assertFieldEquals(fade, clone, "mNameOverrides");
+        assertFieldEquals(fade, clone, "mMatchOrder");
 
-        assertEquals(fade.mTargets, clone.mTargets);
-        assertEquals(fade.mTargetExcludes, clone.mTargetExcludes);
-        assertEquals(fade.mTargetChildExcludes, clone.mTargetChildExcludes);
+        assertFieldEquals(fade, clone, "mTargets");
+        assertFieldEquals(fade, clone, "mTargetExcludes");
+        assertFieldEquals(fade, clone, "mTargetChildExcludes");
 
-        assertEquals(fade.mTargetIds, clone.mTargetIds);
-        assertEquals(fade.mTargetIdExcludes, clone.mTargetIdExcludes);
-        assertEquals(fade.mTargetIdChildExcludes, clone.mTargetIdChildExcludes);
+        assertFieldEquals(fade, clone, "mTargetIds");
+        assertFieldEquals(fade, clone, "mTargetIdExcludes");
+        assertFieldEquals(fade, clone, "mTargetIdChildExcludes");
 
-        assertEquals(fade.mTargetNames, clone.mTargetNames);
-        assertEquals(fade.mTargetNameExcludes, clone.mTargetNameExcludes);
+        assertFieldEquals(fade, clone, "mTargetNames");
+        assertFieldEquals(fade, clone, "mTargetNameExcludes");
 
-        assertEquals(fade.mTargetTypes, clone.mTargetTypes);
-        assertEquals(fade.mTargetTypeExcludes, clone.mTargetTypeExcludes);
+        assertFieldEquals(fade, clone, "mTargetTypes");
+        assertFieldEquals(fade, clone, "mTargetTypeExcludes");
+    }
+
+    private static void assertFieldEquals(Fade fade1, Fade fade2, String fieldName)
+            throws NoSuchFieldException, IllegalAccessException {
+        Field field = findField(Fade.class, fieldName);
+        field.setAccessible(true);
+        assertEquals("Field '" + fieldName + "' value mismatch", field.get(fade1),
+                field.get(fade2));
+    }
+
+    private static Field findField(Class<?> type, String fieldName) throws NoSuchFieldException {
+        while (type != null) {
+            try {
+                return type.getDeclaredField(fieldName);
+            } catch (NoSuchFieldException e) {
+                // try the parent
+                type = type.getSuperclass();
+            }
+        }
+        throw new NoSuchFieldException(fieldName);
     }
 }
diff --git a/core/tests/coretests/src/android/util/RecurrenceRuleTest.java b/core/tests/coretests/src/android/util/RecurrenceRuleTest.java
new file mode 100644
index 0000000..42b6048
--- /dev/null
+++ b/core/tests/coretests/src/android/util/RecurrenceRuleTest.java
@@ -0,0 +1,146 @@
+/*
+ * 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.util;
+
+import android.support.test.filters.SmallTest;
+
+import junit.framework.TestCase;
+
+import java.time.Clock;
+import java.time.Instant;
+import java.time.Period;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.util.Iterator;
+
+@SmallTest
+public class RecurrenceRuleTest extends TestCase {
+
+    static Clock sOriginalClock;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        sOriginalClock = RecurrenceRule.sClock;
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        RecurrenceRule.sClock = sOriginalClock;
+    }
+
+    private void setClock(Instant instant) {
+        RecurrenceRule.sClock = Clock.fixed(instant, ZoneId.systemDefault());
+    }
+
+    public void testSimpleMonth() throws Exception {
+        setClock(Instant.parse("2015-11-20T10:15:30.00Z"));
+        final RecurrenceRule r = new RecurrenceRule(
+                ZonedDateTime.parse("2010-11-14T00:00:00.000Z"),
+                null,
+                Period.ofMonths(1));
+
+        assertTrue(r.isMonthly());
+
+        final Iterator<Pair<ZonedDateTime, ZonedDateTime>> it = r.cycleIterator();
+        assertTrue(it.hasNext());
+        assertEquals(Pair.create(
+                ZonedDateTime.parse("2015-11-14T00:00:00.00Z"),
+                ZonedDateTime.parse("2015-12-14T00:00:00.00Z")), it.next());
+        assertTrue(it.hasNext());
+        assertEquals(Pair.create(
+                ZonedDateTime.parse("2015-10-14T00:00:00.00Z"),
+                ZonedDateTime.parse("2015-11-14T00:00:00.00Z")), it.next());
+    }
+
+    public void testSimpleDays() throws Exception {
+        setClock(Instant.parse("2015-01-01T10:15:30.00Z"));
+        final RecurrenceRule r = new RecurrenceRule(
+                ZonedDateTime.parse("2010-11-14T00:11:00.000Z"),
+                ZonedDateTime.parse("2010-11-20T00:11:00.000Z"),
+                Period.ofDays(3));
+
+        assertFalse(r.isMonthly());
+
+        final Iterator<Pair<ZonedDateTime, ZonedDateTime>> it = r.cycleIterator();
+        assertTrue(it.hasNext());
+        assertEquals(Pair.create(
+                ZonedDateTime.parse("2010-11-17T00:11:00.00Z"),
+                ZonedDateTime.parse("2010-11-20T00:11:00.00Z")), it.next());
+        assertTrue(it.hasNext());
+        assertEquals(Pair.create(
+                ZonedDateTime.parse("2010-11-14T00:11:00.00Z"),
+                ZonedDateTime.parse("2010-11-17T00:11:00.00Z")), it.next());
+        assertFalse(it.hasNext());
+    }
+
+    public void testNotRecurring() throws Exception {
+        setClock(Instant.parse("2015-01-01T10:15:30.00Z"));
+        final RecurrenceRule r = new RecurrenceRule(
+                ZonedDateTime.parse("2010-11-14T00:11:00.000Z"),
+                ZonedDateTime.parse("2010-11-20T00:11:00.000Z"),
+                null);
+
+        assertFalse(r.isMonthly());
+
+        final Iterator<Pair<ZonedDateTime, ZonedDateTime>> it = r.cycleIterator();
+        assertTrue(it.hasNext());
+        assertEquals(Pair.create(
+                ZonedDateTime.parse("2010-11-14T00:11:00.000Z"),
+                ZonedDateTime.parse("2010-11-20T00:11:00.000Z")), it.next());
+        assertFalse(it.hasNext());
+    }
+
+    public void testNever() throws Exception {
+        setClock(Instant.parse("2015-01-01T10:15:30.00Z"));
+        final RecurrenceRule r = RecurrenceRule.buildNever();
+
+        assertFalse(r.isMonthly());
+
+        final Iterator<Pair<ZonedDateTime, ZonedDateTime>> it = r.cycleIterator();
+        assertFalse(it.hasNext());
+    }
+
+    public void testSane() throws Exception {
+        final RecurrenceRule r = new RecurrenceRule(
+                ZonedDateTime.parse("1980-01-31T00:00:00.000Z"),
+                ZonedDateTime.parse("2030-01-31T00:00:00.000Z"),
+                Period.ofMonths(1));
+
+        final Iterator<Pair<ZonedDateTime, ZonedDateTime>> it = r.cycleIterator();
+        ZonedDateTime lastStart = null;
+        int months = 0;
+        while (it.hasNext()) {
+            final Pair<ZonedDateTime, ZonedDateTime> cycle = it.next();
+
+            // Make sure cycle has reasonable length
+            final long length = cycle.second.toEpochSecond() - cycle.first.toEpochSecond();
+            assertTrue(cycle + " must be more than 4 weeks", length >= 2419200);
+            assertTrue(cycle + " must be less than 5 weeks", length <= 3024000);
+
+            // Make sure we have no gaps
+            if (lastStart != null) {
+                assertEquals(lastStart, cycle.second);
+            }
+            lastStart = cycle.first;
+            months++;
+        }
+
+        assertEquals(600, months);
+    }
+}
diff --git a/core/tests/coretests/src/android/util/SparseLongArrayTest.java b/core/tests/coretests/src/android/util/SparseLongArrayTest.java
new file mode 100644
index 0000000..5a5e893
--- /dev/null
+++ b/core/tests/coretests/src/android/util/SparseLongArrayTest.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import android.support.annotation.NonNull;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Random;
+
+/**
+ * Internal tests for {@link SparseLongArray}.
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class SparseLongArrayTest {
+
+    private static final int TEST_SIZE = 1000;
+
+    private SparseLongArray mSparseLongArray;
+    private int[] mKeys;
+    private long[] mValues;
+    private Random mRandom;
+
+    private static boolean isSame(@NonNull SparseLongArray array1,
+            @NonNull SparseLongArray array2) {
+        if (array1.size() != array2.size()) {
+            return false;
+        }
+        for (int i = 0; i < array1.size(); i++) {
+            if (array1.keyAt(i) != array2.keyAt(i) || array1.valueAt(i) != array2.valueAt(i)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private void assertRemoved(int startIndex, int endIndex) {
+        for (int i = 0; i < TEST_SIZE; i++) {
+            if (i >= startIndex && i <= endIndex) {
+                assertEquals("Entry not removed", Long.MIN_VALUE,
+                        mSparseLongArray.get(mKeys[i], Long.MIN_VALUE));
+            } else {
+                assertEquals("Untouched entry corrupted", mValues[i],
+                        mSparseLongArray.get(mKeys[i]));
+            }
+        }
+    }
+
+    /**
+     * Generates a sorted array of distinct and random keys
+     *
+     * @param size the number of keys to return in the array. Should be < (2^31)/1000.
+     * @return the array of keys
+     */
+    private int[] generateRandomKeys(int size) {
+        final int[] keys = new int[size];
+        keys[0] = -1 * mRandom.nextInt(size * 500);
+        for (int i = 1; i < size; i++) {
+            keys[i] = keys[i - 1] + 1 + mRandom.nextInt(1000);
+            assertTrue(keys[i] > keys[i - 1]);
+        }
+        return keys;
+    }
+
+    @Before
+    public void setUp() {
+        mSparseLongArray = new SparseLongArray();
+        mRandom = new Random(12345);
+        mKeys = generateRandomKeys(TEST_SIZE);
+        mValues = new long[TEST_SIZE];
+        for (int i = 0; i < TEST_SIZE; i++) {
+            mValues[i] = i + 1;
+            mSparseLongArray.put(mKeys[i], mValues[i]);
+        }
+    }
+
+    @Test
+    public void testRemoveAtRange_removeHead() {
+        mSparseLongArray.removeAtRange(0, 100);
+        assertEquals(TEST_SIZE - 100, mSparseLongArray.size());
+        assertRemoved(0, 99);
+    }
+
+    @Test
+    public void testRemoveAtRange_removeTail() {
+        mSparseLongArray.removeAtRange(TEST_SIZE - 200, 200);
+        assertEquals(TEST_SIZE - 200, mSparseLongArray.size());
+        assertRemoved(TEST_SIZE - 200, TEST_SIZE - 1);
+    }
+
+    @Test
+    public void testRemoveAtRange_removeOverflow() {
+        mSparseLongArray.removeAtRange(TEST_SIZE - 100, 200);
+        assertEquals(TEST_SIZE - 100, mSparseLongArray.size());
+        assertRemoved(TEST_SIZE - 100, TEST_SIZE - 1);
+    }
+
+    @Test
+    public void testRemoveAtRange_removeEverything() {
+        mSparseLongArray.removeAtRange(0, TEST_SIZE);
+        assertEquals(0, mSparseLongArray.size());
+        assertRemoved(0, TEST_SIZE - 1);
+    }
+
+    @Test
+    public void testRemoveAtRange_removeMiddle() {
+        mSparseLongArray.removeAtRange(200, 200);
+        assertEquals(TEST_SIZE - 200, mSparseLongArray.size());
+        assertRemoved(200, 399);
+    }
+
+    @Test
+    public void testRemoveAtRange_removeSingle() {
+        mSparseLongArray.removeAtRange(300, 1);
+        assertEquals(TEST_SIZE - 1, mSparseLongArray.size());
+        assertRemoved(300, 300);
+    }
+
+    @Test
+    public void testRemoveAtRange_compareRemoveAt() {
+        final SparseLongArray sparseLongArray2 = mSparseLongArray.clone();
+        assertTrue(isSame(mSparseLongArray, sparseLongArray2));
+
+        final int startIndex = 101;
+        final int endIndex = 200;
+        mSparseLongArray.removeAtRange(startIndex, endIndex - startIndex + 1);
+        for (int i = endIndex; i >= startIndex; i--) {
+            sparseLongArray2.removeAt(i);
+        }
+        assertEquals(TEST_SIZE - (endIndex - startIndex + 1), mSparseLongArray.size());
+        assertRemoved(startIndex, endIndex);
+        assertTrue(isSame(sparseLongArray2, mSparseLongArray));
+    }
+}
diff --git a/core/tests/coretests/src/android/view/PinchZoomAction.java b/core/tests/coretests/src/android/view/PinchZoomAction.java
index 78a4b31..97fe980 100644
--- a/core/tests/coretests/src/android/view/PinchZoomAction.java
+++ b/core/tests/coretests/src/android/view/PinchZoomAction.java
@@ -16,23 +16,23 @@
 
 package android.view;
 
-import static android.support.test.espresso.core.deps.guava.base.Preconditions.checkNotNull;
 import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
 import static android.support.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import static org.hamcrest.Matchers.allOf;
 
 import android.os.SystemClock;
 import android.support.test.espresso.InjectEventSecurityException;
 import android.support.test.espresso.PerformException;
-import android.support.test.espresso.ViewAction;
-import android.support.test.espresso.action.MotionEvents;
-import android.support.test.espresso.action.Swiper;
 import android.support.test.espresso.UiController;
+import android.support.test.espresso.ViewAction;
+import android.support.test.espresso.action.Swiper;
 import android.support.test.espresso.util.HumanReadables;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewConfiguration;
-import javax.annotation.Nullable;
+
 import org.hamcrest.Matcher;
 
 /**
diff --git a/core/tests/coretests/src/android/view/ViewTransientState.java b/core/tests/coretests/src/android/view/ViewTransientState.java
new file mode 100644
index 0000000..206ff81
--- /dev/null
+++ b/core/tests/coretests/src/android/view/ViewTransientState.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import com.android.frameworks.coretests.R;
+
+/**
+ * Exercise set View's transient state
+ */
+public class ViewTransientState extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.view_transient_state);
+    }
+}
diff --git a/core/tests/coretests/src/android/view/ViewTransientStateTest.java b/core/tests/coretests/src/android/view/ViewTransientStateTest.java
new file mode 100644
index 0000000..36ea01d
--- /dev/null
+++ b/core/tests/coretests/src/android/view/ViewTransientStateTest.java
@@ -0,0 +1,98 @@
+/*
+ * 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.view;
+
+import android.app.Activity;
+import android.test.ActivityInstrumentationTestCase;
+import android.test.UiThreadTest;
+import android.test.suitebuilder.annotation.MediumTest;
+
+import com.android.frameworks.coretests.R;
+
+import static org.junit.Assert.assertFalse;
+
+/**
+ * Exercise set View's transient state
+ */
+public class ViewTransientStateTest extends ActivityInstrumentationTestCase<ViewTransientState> {
+
+    View mP1;
+    View mP2;
+    View mP3;
+
+    public ViewTransientStateTest() {
+        super("com.android.frameworks.coretests", ViewTransientState.class);
+    }
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+
+        final Activity a = getActivity();
+        mP1 = a.findViewById(R.id.p1);
+        mP2 = a.findViewById(R.id.p2);
+        mP3 = a.findViewById(R.id.p3);
+    }
+
+    @UiThreadTest
+    @MediumTest
+    public void testSetTransientState1() throws Exception {
+        mP3.setHasTransientState(true);
+        mP2.setHasTransientState(true);
+        mP3.setHasTransientState(false);
+        mP2.setHasTransientState(false);
+        assertFalse(mP3.hasTransientState());
+        assertFalse(mP2.hasTransientState());
+        assertFalse(mP1.hasTransientState());
+    }
+
+    @UiThreadTest
+    @MediumTest
+    public void testSetTransientState2() throws Exception {
+        mP3.setHasTransientState(true);
+        mP2.setHasTransientState(true);
+        mP2.setHasTransientState(false);
+        mP3.setHasTransientState(false);
+        assertFalse(mP3.hasTransientState());
+        assertFalse(mP2.hasTransientState());
+        assertFalse(mP1.hasTransientState());
+    }
+
+    @UiThreadTest
+    @MediumTest
+    public void testSetTransientState3() throws Exception {
+        mP2.setHasTransientState(true);
+        mP3.setHasTransientState(true);
+        mP3.setHasTransientState(false);
+        mP2.setHasTransientState(false);
+        assertFalse(mP3.hasTransientState());
+        assertFalse(mP2.hasTransientState());
+        assertFalse(mP1.hasTransientState());
+    }
+
+    @UiThreadTest
+    @MediumTest
+    public void testSetTransientState4() throws Exception {
+        mP2.setHasTransientState(true);
+        mP3.setHasTransientState(true);
+        mP2.setHasTransientState(false);
+        mP3.setHasTransientState(false);
+        assertFalse(mP3.hasTransientState());
+        assertFalse(mP2.hasTransientState());
+        assertFalse(mP1.hasTransientState());
+    }
+}
diff --git a/core/tests/coretests/src/android/view/inputmethod/InputMethodSubtypeTest.java b/core/tests/coretests/src/android/view/inputmethod/InputMethodSubtypeTest.java
index 0adac4c..d203465 100644
--- a/core/tests/coretests/src/android/view/inputmethod/InputMethodSubtypeTest.java
+++ b/core/tests/coretests/src/android/view/inputmethod/InputMethodSubtypeTest.java
@@ -21,6 +21,7 @@
 import android.test.suitebuilder.annotation.SmallTest;
 import android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder;
 
+import java.util.Locale;
 import java.util.Objects;
 
 public class InputMethodSubtypeTest extends InstrumentationTestCase {
@@ -48,6 +49,38 @@
     }
 
     @SmallTest
+    public void testLocaleObj_locale() {
+        final InputMethodSubtype usSubtype = createDummySubtype("en_US");
+        Locale localeObject = usSubtype.getLocaleObject();
+        assertEquals("en", localeObject.getLanguage());
+        assertEquals("US", localeObject.getCountry());
+
+        // The locale object should be cached.
+        assertTrue(localeObject == usSubtype.getLocaleObject());
+    }
+
+    @SmallTest
+    public void testLocaleObj_languageTag() {
+        final InputMethodSubtype usSubtype = createDummySubtypeUsingLanguageTag("en-US");
+        Locale localeObject = usSubtype.getLocaleObject();
+        assertNotNull(localeObject);
+        assertEquals("en", localeObject.getLanguage());
+        assertEquals("US", localeObject.getCountry());
+
+        // The locale object should be cached.
+        assertTrue(localeObject == usSubtype.getLocaleObject());
+    }
+
+    @SmallTest
+    public void testLocaleObj_emptyLocale() {
+        final InputMethodSubtype emptyLocaleSubtype = createDummySubtype("");
+        assertNull(emptyLocaleSubtype.getLocaleObject());
+        // It should continue returning null when called multiple times.
+        assertNull(emptyLocaleSubtype.getLocaleObject());
+        assertNull(emptyLocaleSubtype.getLocaleObject());
+    }
+
+    @SmallTest
     public void testLocaleString() throws Exception {
         // The locale string in InputMethodSubtype has accepted an arbitrary text actually,
         // regardless of the validity of the text as a locale string.
@@ -94,7 +127,7 @@
         }
     }
 
-    private static final InputMethodSubtype createDummySubtype(final String locale) {
+    private static InputMethodSubtype createDummySubtype(final String locale) {
         final InputMethodSubtypeBuilder builder = new InputMethodSubtypeBuilder();
         return builder.setSubtypeNameResId(0)
                 .setSubtypeIconResId(0)
@@ -102,4 +135,14 @@
                 .setIsAsciiCapable(true)
                 .build();
     }
-}
+
+    private static InputMethodSubtype createDummySubtypeUsingLanguageTag(
+            final String languageTag) {
+        final InputMethodSubtypeBuilder builder = new InputMethodSubtypeBuilder();
+        return builder.setSubtypeNameResId(0)
+                .setSubtypeIconResId(0)
+                .setLanguageTag(languageTag)
+                .setIsAsciiCapable(true)
+                .build();
+    }
+}
\ No newline at end of file
diff --git a/core/tests/coretests/src/android/view/textclassifier/TextClassificationManagerTest.java b/core/tests/coretests/src/android/view/textclassifier/TextClassificationManagerTest.java
index 29447ed..2a6c22e 100644
--- a/core/tests/coretests/src/android/view/textclassifier/TextClassificationManagerTest.java
+++ b/core/tests/coretests/src/android/view/textclassifier/TextClassificationManagerTest.java
@@ -32,9 +32,6 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import java.util.List;
-import java.util.Locale;
-
 @SmallTest
 @RunWith(AndroidJUnit4.class)
 public class TextClassificationManagerTest {
@@ -177,20 +174,6 @@
     }
 
     @Test
-    public void testLanguageDetection() {
-        if (isTextClassifierDisabled()) return;
-
-        String text = "This is a piece of English text";
-        assertThat(mTcm.detectLanguages(text), isDetectedLanguage("en"));
-
-        text = "Das ist ein deutscher Text";
-        assertThat(mTcm.detectLanguages(text), isDetectedLanguage("de"));
-
-        text = "これは日本語のテキストです";
-        assertThat(mTcm.detectLanguages(text), isDetectedLanguage("ja"));
-    }
-
-    @Test
     public void testSetTextClassifier() {
         TextClassifier classifier = mock(TextClassifier.class);
         mTcm.setTextClassifier(classifier);
@@ -270,30 +253,4 @@
             }
         };
     }
-
-    private static Matcher<List<TextLanguage>> isDetectedLanguage(final String language) {
-        return new BaseMatcher<List<TextLanguage>>() {
-            @Override
-            public boolean matches(Object o) {
-                if (o instanceof List) {
-                    List languages = (List) o;
-                    if (!languages.isEmpty()) {
-                        Object o1 = languages.get(0);
-                        if (o1 instanceof TextLanguage) {
-                            TextLanguage lang = (TextLanguage) o1;
-                            return lang.getLanguageCount() > 0
-                                    && new Locale(language).getLanguage()
-                                            .equals(lang.getLanguage(0).getLanguage());
-                        }
-                    }
-                }
-                return false;
-            }
-
-            @Override
-            public void describeTo(Description description) {
-                description.appendValue(String.format("%s", language));
-            }
-        };
-    }
 }
diff --git a/core/tests/coretests/src/android/widget/EditorCursorTest.java b/core/tests/coretests/src/android/widget/EditorCursorTest.java
index 6d650ff..9186827b 100644
--- a/core/tests/coretests/src/android/widget/EditorCursorTest.java
+++ b/core/tests/coretests/src/android/widget/EditorCursorTest.java
@@ -16,71 +16,68 @@
 
 package android.widget;
 
-import android.test.ActivityInstrumentationTestCase2;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.view.Choreographer;
-import android.view.ViewGroup;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
 import static android.support.test.espresso.Espresso.onView;
 import static android.support.test.espresso.action.ViewActions.click;
 import static android.widget.espresso.TextViewAssertions.hasInsertionPointerOnLeft;
 import static android.widget.espresso.TextViewAssertions.hasInsertionPointerOnRight;
+
+import static junit.framework.Assert.fail;
+
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.isEmptyString;
 import static org.hamcrest.Matchers.nullValue;
 import static org.hamcrest.Matchers.sameInstance;
 
-public class EditorCursorTest extends ActivityInstrumentationTestCase2<TextViewActivity> {
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.MediumTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
 
+import com.android.frameworks.coretests.R;
 
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+@RunWith(AndroidJUnit4.class)
+@MediumTest
+public class EditorCursorTest {
     private final static String LTR_STRING = "aaaaaaaaaaaaaaaaaaaaaa";
     private final static String LTR_HINT = "hint";
     private final static String RTL_STRING = "مرحبا الروبوت مرحبا الروبوت مرحبا الروبوت";
     private final static String RTL_HINT = "الروبوت";
     private final static int CURSOR_BLINK_MS = 500;
 
+    @Rule
+    public ActivityTestRule<TextViewActivity> mActivityRule = new ActivityTestRule<>(
+            TextViewActivity.class);
+
+    private Instrumentation mInstrumentation;
+    private Activity mActivity;
     private EditText mEditText;
 
-    public EditorCursorTest() {
-        super(TextViewActivity.class);
-    }
+    @Before
+    public void setUp() throws Throwable {
+        mActivity = mActivityRule.getActivity();
+        mInstrumentation = InstrumentationRegistry.getInstrumentation();
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mEditText = new EditText(getActivity());
-        mEditText.setTextSize(30);
-        mEditText.setSingleLine(true);
-        mEditText.setLines(1);
-        mEditText.setPadding(15, 15, 15, 15);
-        ViewGroup.LayoutParams editTextLayoutParams = new ViewGroup.LayoutParams(200,
-                ViewGroup.LayoutParams.WRAP_CONTENT);
-
-        mEditText.setLayoutParams(editTextLayoutParams);
-
-        final FrameLayout layout = new FrameLayout(getActivity());
-        ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(
-                ViewGroup.LayoutParams.MATCH_PARENT,
-                ViewGroup.LayoutParams.MATCH_PARENT);
-        layout.setLayoutParams(layoutParams);
-        layout.addView(mEditText);
-
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                getActivity().setContentView(layout);
-            }
+        mActivityRule.runOnUiThread(() -> {
+            mActivity.setContentView(R.layout.activity_editor_cursor_test);
+            mEditText = mActivity.findViewById(R.id.edittext);
         });
-        getInstrumentation().waitForIdleSync();
+        mInstrumentation.waitForIdleSync();
         onView(sameInstance(mEditText)).perform(click());
     }
 
-    @SmallTest
-    public void testCursorIsInViewBoundariesWhenOnRightForLtr() {
+    @Test
+    public void testCursorIsInViewBoundariesWhenOnRightForLtr() throws Throwable {
         // Asserts that when an EditText has LTR text, and cursor is at the end (right),
         // cursor is drawn to the right edge of the view
         setEditTextText(LTR_STRING, LTR_STRING.length());
@@ -88,8 +85,8 @@
         onView(sameInstance(mEditText)).check(hasInsertionPointerOnRight());
     }
 
-    @SmallTest
-    public void testCursorIsInViewBoundariesWhenOnLeftForLtr() {
+    @Test
+    public void testCursorIsInViewBoundariesWhenOnLeftForLtr() throws Throwable {
         // Asserts that when an EditText has LTR text, and cursor is at the beginning,
         // cursor is drawn to the left edge of the view
         setEditTextText(LTR_STRING, 0);
@@ -97,8 +94,8 @@
         onView(sameInstance(mEditText)).check(hasInsertionPointerOnLeft());
     }
 
-    @SmallTest
-    public void testCursorIsInViewBoundariesWhenOnRightForRtl() {
+    @Test
+    public void testCursorIsInViewBoundariesWhenOnRightForRtl() throws Throwable {
         // Asserts that when an EditText has RTL text, and cursor is at the end,
         // cursor is drawn to the left edge of the view
         setEditTextText(RTL_STRING, 0);
@@ -106,8 +103,8 @@
         onView(sameInstance(mEditText)).check(hasInsertionPointerOnRight());
     }
 
-    @SmallTest
-    public void testCursorIsInViewBoundariesWhenOnLeftForRtl() {
+    @Test
+    public void testCursorIsInViewBoundariesWhenOnLeftForRtl() throws Throwable {
         // Asserts that when an EditText has RTL text, and cursor is at the beginning,
         // cursor is drawn to the right edge of the view
         setEditTextText(RTL_STRING, RTL_STRING.length());
@@ -116,8 +113,8 @@
     }
 
     /* Tests for cursor positioning with hint */
-    @SmallTest
-    public void testCursorIsOnLeft_withFirstStrongLtrAlgorithm() {
+    @Test
+    public void testCursorIsOnLeft_withFirstStrongLtrAlgorithm() throws Throwable {
         setEditTextHint(null, TextView.TEXT_DIRECTION_FIRST_STRONG_LTR, 0);
         assertThat(mEditText.getText().toString(), isEmptyString());
         assertThat(mEditText.getHint(), nullValue());
@@ -135,8 +132,8 @@
         onView(sameInstance(mEditText)).check(hasInsertionPointerOnLeft());
     }
 
-    @SmallTest
-    public void testCursorIsOnRight_withFirstStrongRtlAlgorithm() {
+    @Test
+    public void testCursorIsOnRight_withFirstStrongRtlAlgorithm() throws Throwable {
         setEditTextHint(null, TextView.TEXT_DIRECTION_FIRST_STRONG_RTL, 0);
         assertThat(mEditText.getText().toString(), isEmptyString());
         assertThat(mEditText.getHint(), nullValue());
@@ -154,8 +151,8 @@
         onView(sameInstance(mEditText)).check(hasInsertionPointerOnRight());
     }
 
-    @SmallTest
-    public void testCursorIsOnLeft_withLtrAlgorithm() {
+    @Test
+    public void testCursorIsOnLeft_withLtrAlgorithm() throws Throwable {
         setEditTextHint(null, TextView.TEXT_DIRECTION_LTR, 0);
         assertThat(mEditText.getText().toString(), isEmptyString());
         assertThat(mEditText.getHint(), nullValue());
@@ -173,8 +170,8 @@
         onView(sameInstance(mEditText)).check(hasInsertionPointerOnLeft());
     }
 
-    @SmallTest
-    public void testCursorIsOnRight_withRtlAlgorithm() {
+    @Test
+    public void testCursorIsOnRight_withRtlAlgorithm() throws Throwable {
         setEditTextHint(null, TextView.TEXT_DIRECTION_RTL, 0);
         assertThat(mEditText.getText().toString(), isEmptyString());
         assertThat(mEditText.getHint(), nullValue());
@@ -193,27 +190,19 @@
     }
 
     private void setEditTextProperties(final String text, final String hint,
-            final Integer textDirection, final Integer selection) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (textDirection != null) mEditText.setTextDirection(textDirection);
-                if (text != null) mEditText.setText(text);
-                if (hint != null) mEditText.setHint(hint);
-                if (selection != null) mEditText.setSelection(selection);
-            }
+            final Integer textDirection, final Integer selection) throws Throwable {
+        mActivityRule.runOnUiThread(() -> {
+            if (textDirection != null) mEditText.setTextDirection(textDirection);
+            if (text != null) mEditText.setText(text);
+            if (hint != null) mEditText.setHint(hint);
+            if (selection != null) mEditText.setSelection(selection);
         });
-        getInstrumentation().waitForIdleSync();
+        mInstrumentation.waitForIdleSync();
 
         // wait for cursor to be drawn. updateCursorPositions function is called during draw() and
         // only when cursor is visible during blink.
         final CountDownLatch latch = new CountDownLatch(1);
-        mEditText.postOnAnimationDelayed(new Runnable() {
-            @Override
-            public void run() {
-                latch.countDown();
-            }
-        }, CURSOR_BLINK_MS);
+        mEditText.postOnAnimationDelayed(latch::countDown, CURSOR_BLINK_MS);
         try {
             assertThat("Problem while waiting for the cursor to blink",
                     latch.await(10, TimeUnit.SECONDS), equalTo(true));
@@ -222,11 +211,12 @@
         }
     }
 
-    private void setEditTextHint(final String hint, final int textDirection, final int selection) {
+    private void setEditTextHint(final String hint, final int textDirection, final int selection)
+            throws Throwable {
         setEditTextProperties(null, hint, textDirection, selection);
     }
 
-    private void setEditTextText(final String text, final Integer selection) {
+    private void setEditTextText(final String text, final Integer selection) throws Throwable {
         setEditTextProperties(text, null, null, selection);
     }
 }
diff --git a/core/tests/coretests/src/android/widget/TextViewActivityMouseTest.java b/core/tests/coretests/src/android/widget/TextViewActivityMouseTest.java
index edb749b95..9124c94 100644
--- a/core/tests/coretests/src/android/widget/TextViewActivityMouseTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewActivityMouseTest.java
@@ -17,58 +17,71 @@
 package android.widget;
 
 
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.Espresso.pressBack;
+import static android.support.test.espresso.action.ViewActions.replaceText;
+import static android.support.test.espresso.action.ViewActions.typeText;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static android.support.test.espresso.matcher.ViewMatchers.withId;
+import static android.support.test.espresso.matcher.ViewMatchers.withText;
 import static android.widget.espresso.ContextMenuUtils.assertContextMenuContainsItemDisabled;
 import static android.widget.espresso.ContextMenuUtils.assertContextMenuContainsItemEnabled;
 import static android.widget.espresso.ContextMenuUtils.assertContextMenuIsNotDisplayed;
 import static android.widget.espresso.DragHandleUtils.assertNoSelectionHandles;
 import static android.widget.espresso.DragHandleUtils.onHandleView;
+import static android.widget.espresso.TextViewActions.mouseClick;
 import static android.widget.espresso.TextViewActions.mouseClickOnTextAtIndex;
-import static android.widget.espresso.TextViewActions.mouseDoubleClickOnTextAtIndex;
-import static android.widget.espresso.TextViewActions.mouseLongClickOnTextAtIndex;
 import static android.widget.espresso.TextViewActions.mouseDoubleClickAndDragOnText;
+import static android.widget.espresso.TextViewActions.mouseDoubleClickOnTextAtIndex;
 import static android.widget.espresso.TextViewActions.mouseDragOnText;
 import static android.widget.espresso.TextViewActions.mouseLongClickAndDragOnText;
+import static android.widget.espresso.TextViewActions.mouseLongClickOnTextAtIndex;
 import static android.widget.espresso.TextViewActions.mouseTripleClickAndDragOnText;
 import static android.widget.espresso.TextViewActions.mouseTripleClickOnTextAtIndex;
 import static android.widget.espresso.TextViewAssertions.hasInsertionPointerAtIndex;
 import static android.widget.espresso.TextViewAssertions.hasSelection;
 
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.Espresso.pressBack;
-import static android.support.test.espresso.action.ViewActions.click;
-import static android.support.test.espresso.action.ViewActions.replaceText;
-import static android.support.test.espresso.action.ViewActions.typeTextIntoFocusedView;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
+import android.app.Activity;
+import android.support.test.filters.MediumTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+import android.view.MotionEvent;
+import android.view.textclassifier.TextClassificationManager;
+import android.view.textclassifier.TextClassifier;
 
 import com.android.frameworks.coretests.R;
 
-import android.test.ActivityInstrumentationTestCase2;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.view.MotionEvent;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
 
 /**
  * Tests mouse interaction of the TextView widget from an Activity
  */
-public class TextViewActivityMouseTest extends ActivityInstrumentationTestCase2<TextViewActivity>{
+@RunWith(AndroidJUnit4.class)
+@MediumTest
+public class TextViewActivityMouseTest {
 
-    public TextViewActivityMouseTest() {
-        super(TextViewActivity.class);
+    @Rule
+    public ActivityTestRule<TextViewActivity> mActivityRule = new ActivityTestRule<>(
+            TextViewActivity.class);
+
+    private Activity mActivity;
+
+    @Before
+    public void setUp() {
+        mActivity = mActivityRule.getActivity();
+        mActivity.getSystemService(TextClassificationManager.class)
+                .setTextClassifier(TextClassifier.NO_OP);
     }
 
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        getActivity();
-    }
-
-    @SmallTest
-    public void testSelectTextByDrag() throws Exception {
+    @Test
+    public void testSelectTextByDrag() {
         final String helloWorld = "Hello world!";
-        onView(withId(R.id.textview)).perform(click());
-        onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(helloWorld));
+        onView(withId(R.id.textview)).perform(mouseClick());
+        onView(withId(R.id.textview)).perform(replaceText(helloWorld));
 
         assertNoSelectionHandles();
 
@@ -88,22 +101,22 @@
         assertNoSelectionHandles();
     }
 
-    @SmallTest
-    public void testSelectTextByDrag_reverse() throws Exception {
+    @Test
+    public void testSelectTextByDrag_reverse() {
         final String helloWorld = "Hello world!";
-        onView(withId(R.id.textview)).perform(click());
-        onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(helloWorld));
+        onView(withId(R.id.textview)).perform(mouseClick());
+        onView(withId(R.id.textview)).perform(replaceText(helloWorld));
         onView(withId(R.id.textview)).perform(
                 mouseDragOnText( helloWorld.indexOf("ld!"), helloWorld.indexOf("llo")));
 
         onView(withId(R.id.textview)).check(hasSelection("llo wor"));
     }
 
-    @SmallTest
-    public void testContextMenu() throws Exception {
+    @Test
+    public void testContextMenu() {
         final String text = "abc def ghi.";
-        onView(withId(R.id.textview)).perform(click());
-        onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(text));
+        onView(withId(R.id.textview)).perform(mouseClick());
+        onView(withId(R.id.textview)).perform(replaceText(text));
 
         assertContextMenuIsNotDisplayed();
 
@@ -111,9 +124,26 @@
                 mouseClickOnTextAtIndex(text.indexOf("d"), MotionEvent.BUTTON_SECONDARY));
 
         assertContextMenuContainsItemDisabled(
-                getActivity().getString(com.android.internal.R.string.copy));
+                mActivity.getString(com.android.internal.R.string.copy));
+        assertContextMenuContainsItemDisabled(
+                mActivity.getString(com.android.internal.R.string.undo));
+
+        // Hide context menu.
+        pressBack();
+        assertContextMenuIsNotDisplayed();
+
+        // type something to enable Undo
+        onView(withId(R.id.textview)).perform(
+                mouseClickOnTextAtIndex(text.indexOf(".")));
+        onView(withId(R.id.textview)).perform(typeText(" "));
+
+        onView(withId(R.id.textview)).perform(
+                mouseClickOnTextAtIndex(text.indexOf("d"), MotionEvent.BUTTON_SECONDARY));
+
+        assertContextMenuContainsItemDisabled(
+                mActivity.getString(com.android.internal.R.string.copy));
         assertContextMenuContainsItemEnabled(
-                getActivity().getString(com.android.internal.R.string.undo));
+                mActivity.getString(com.android.internal.R.string.undo));
 
         // Hide context menu.
         pressBack();
@@ -125,9 +155,9 @@
                 mouseClickOnTextAtIndex(text.indexOf("d"), MotionEvent.BUTTON_SECONDARY));
 
         assertContextMenuContainsItemEnabled(
-                getActivity().getString(com.android.internal.R.string.copy));
+                mActivity.getString(com.android.internal.R.string.copy));
         assertContextMenuContainsItemEnabled(
-                getActivity().getString(com.android.internal.R.string.undo));
+                mActivity.getString(com.android.internal.R.string.undo));
 
         // Hide context menu.
         pressBack();
@@ -137,9 +167,9 @@
         onView(withId(R.id.textview)).perform(
                 mouseClickOnTextAtIndex(text.indexOf("i"), MotionEvent.BUTTON_SECONDARY));
         assertContextMenuContainsItemDisabled(
-                getActivity().getString(com.android.internal.R.string.copy));
+                mActivity.getString(com.android.internal.R.string.copy));
         assertContextMenuContainsItemEnabled(
-                getActivity().getString(com.android.internal.R.string.undo));
+                mActivity.getString(com.android.internal.R.string.undo));
 
         // Hide context menu.
         pressBack();
@@ -150,11 +180,11 @@
         // TODO: Add tests for suggestions
     }
 
-    @SmallTest
-    public void testDragAndDrop() throws Exception {
+    @Test
+    public void testDragAndDrop() {
         final String text = "abc def ghi.";
-        onView(withId(R.id.textview)).perform(click());
-        onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(text));
+        onView(withId(R.id.textview)).perform(mouseClick());
+        onView(withId(R.id.textview)).perform(replaceText(text));
         onView(withId(R.id.textview)).perform(
                 mouseDragOnText(text.indexOf("d"), text.indexOf("f") + 1));
 
@@ -167,11 +197,11 @@
         onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex("abc ghi.def".length()));
     }
 
-    @SmallTest
-    public void testDragAndDrop_longClick() throws Exception {
+    @Test
+    public void testDragAndDrop_longClick() {
         final String text = "abc def ghi.";
-        onView(withId(R.id.textview)).perform(click());
-        onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(text));
+        onView(withId(R.id.textview)).perform(mouseClick());
+        onView(withId(R.id.textview)).perform(replaceText(text));
         onView(withId(R.id.textview)).perform(
                 mouseDragOnText(text.indexOf("d"), text.indexOf("f") + 1));
 
@@ -184,11 +214,11 @@
         onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex("abc ghi.def".length()));
     }
 
-    @SmallTest
-    public void testSelectTextByLongClick() throws Exception {
+    @Test
+    public void testSelectTextByLongClick() {
         final String helloWorld = "Hello world!";
-        onView(withId(R.id.textview)).perform(click());
-        onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(helloWorld));
+        onView(withId(R.id.textview)).perform(mouseClick());
+        onView(withId(R.id.textview)).perform(replaceText(helloWorld));
 
         onView(withId(R.id.textview)).perform(mouseLongClickOnTextAtIndex(0));
         onView(withId(R.id.textview)).check(hasSelection("Hello"));
@@ -209,14 +239,15 @@
         onView(withId(R.id.textview)).check(hasSelection("!"));
     }
 
-    @SmallTest
-    public void testSelectTextByDoubleClick() throws Exception {
-        final String helloWorld = "Hello world!";
-        onView(withId(R.id.textview)).perform(click());
-        onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(helloWorld));
+    @Test
+    public void testSelectTextByDoubleClick() {
+        final String helloWorld = "hello world!";
 
-        onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(0));
-        onView(withId(R.id.textview)).check(hasSelection("Hello"));
+        onView(withId(R.id.textview)).perform(mouseClick());
+        onView(withId(R.id.textview)).perform(replaceText(helloWorld));
+
+        onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(1));
+        onView(withId(R.id.textview)).check(hasSelection("hello"));
 
         onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(
                 helloWorld.indexOf("world")));
@@ -224,7 +255,7 @@
 
         onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(
                 helloWorld.indexOf("llo")));
-        onView(withId(R.id.textview)).check(hasSelection("Hello"));
+        onView(withId(R.id.textview)).check(hasSelection("hello"));
 
         onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(
                 helloWorld.indexOf("rld")));
@@ -234,52 +265,52 @@
         onView(withId(R.id.textview)).check(hasSelection("!"));
     }
 
-    @SmallTest
-    public void testSelectTextByDoubleClickAndDrag() throws Exception {
+    @Test
+    public void testSelectTextByDoubleClickAndDrag() {
         final String text = "abcd efg hijk lmn";
-        onView(withId(R.id.textview)).perform(click());
-        onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(text));
+        onView(withId(R.id.textview)).perform(mouseClick());
+        onView(withId(R.id.textview)).perform(replaceText(text));
 
         onView(withId(R.id.textview)).perform(
                 mouseDoubleClickAndDragOnText(text.indexOf("f"), text.indexOf("j")));
         onView(withId(R.id.textview)).check(hasSelection("efg hijk"));
     }
 
-    @SmallTest
-    public void testSelectTextByDoubleClickAndDrag_reverse() throws Exception {
+    @Test
+    public void testSelectTextByDoubleClickAndDrag_reverse() {
         final String text = "abcd efg hijk lmn";
-        onView(withId(R.id.textview)).perform(click());
-        onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(text));
+        onView(withId(R.id.textview)).perform(mouseClick());
+        onView(withId(R.id.textview)).perform(replaceText(text));
 
         onView(withId(R.id.textview)).perform(
                 mouseDoubleClickAndDragOnText(text.indexOf("j"), text.indexOf("f")));
         onView(withId(R.id.textview)).check(hasSelection("efg hijk"));
     }
 
-    @SmallTest
-    public void testSelectTextByLongPressAndDrag() throws Exception {
+    @Test
+    public void testSelectTextByLongPressAndDrag() {
         final String text = "abcd efg hijk lmn";
-        onView(withId(R.id.textview)).perform(click());
-        onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(text));
+        onView(withId(R.id.textview)).perform(mouseClick());
+        onView(withId(R.id.textview)).perform(replaceText(text));
 
         onView(withId(R.id.textview)).perform(
                 mouseLongClickAndDragOnText(text.indexOf("f"), text.indexOf("j")));
         onView(withId(R.id.textview)).check(hasSelection("efg hijk"));
     }
 
-    @SmallTest
-    public void testSelectTextByLongPressAndDrag_reverse() throws Exception {
+    @Test
+    public void testSelectTextByLongPressAndDrag_reverse() {
         final String text = "abcd efg hijk lmn";
-        onView(withId(R.id.textview)).perform(click());
-        onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(text));
+        onView(withId(R.id.textview)).perform(mouseClick());
+        onView(withId(R.id.textview)).perform(replaceText(text));
 
         onView(withId(R.id.textview)).perform(
                 mouseLongClickAndDragOnText(text.indexOf("j"), text.indexOf("f")));
         onView(withId(R.id.textview)).check(hasSelection("efg hijk"));
     }
 
-    @SmallTest
-    public void testSelectTextByTripleClick() throws Exception {
+    @Test
+    public void testSelectTextByTripleClick() {
         final StringBuilder builder = new StringBuilder();
         builder.append("First paragraph.\n");
         builder.append("Second paragraph.");
@@ -290,7 +321,7 @@
         builder.append("Third paragraph.");
         final String text = builder.toString();
 
-        onView(withId(R.id.textview)).perform(click());
+        onView(withId(R.id.textview)).perform(mouseClick());
         onView(withId(R.id.textview)).perform(replaceText(text));
 
         onView(withId(R.id.textview)).perform(
@@ -312,8 +343,8 @@
                 text.substring(text.indexOf("Second"), text.indexOf("Third"))));
     }
 
-    @SmallTest
-    public void testSelectTextByTripleClickAndDrag() throws Exception {
+    @Test
+    public void testSelectTextByTripleClickAndDrag() {
         final StringBuilder builder = new StringBuilder();
         builder.append("First paragraph.\n");
         builder.append("Second paragraph.");
@@ -324,7 +355,7 @@
         builder.append("Third paragraph.");
         final String text = builder.toString();
 
-        onView(withId(R.id.textview)).perform(click());
+        onView(withId(R.id.textview)).perform(mouseClick());
         onView(withId(R.id.textview)).perform(replaceText(text));
 
         onView(withId(R.id.textview)).perform(
@@ -341,8 +372,8 @@
         onView(withId(R.id.textview)).check(hasSelection(text));
     }
 
-    @SmallTest
-    public void testSelectTextByTripleClickAndDrag_reverse() throws Exception {
+    @Test
+    public void testSelectTextByTripleClickAndDrag_reverse() {
         final StringBuilder builder = new StringBuilder();
         builder.append("First paragraph.\n");
         builder.append("Second paragraph.");
@@ -353,7 +384,7 @@
         builder.append("Third paragraph.");
         final String text = builder.toString();
 
-        onView(withId(R.id.textview)).perform(click());
+        onView(withId(R.id.textview)).perform(mouseClick());
         onView(withId(R.id.textview)).perform(replaceText(text));
 
         onView(withId(R.id.textview)).perform(
diff --git a/core/tests/coretests/src/android/widget/TextViewActivityTest.java b/core/tests/coretests/src/android/widget/TextViewActivityTest.java
index a4f6987..ec8dee6 100644
--- a/core/tests/coretests/src/android/widget/TextViewActivityTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewActivityTest.java
@@ -16,26 +16,6 @@
 
 package android.widget;
 
-import static android.widget.espresso.CustomViewActions.longPressAtRelativeCoordinates;
-import static android.widget.espresso.DragHandleUtils.assertNoSelectionHandles;
-import static android.widget.espresso.DragHandleUtils.onHandleView;
-import static android.widget.espresso.TextViewActions.clickOnTextAtIndex;
-import static android.widget.espresso.TextViewActions.doubleTapAndDragOnText;
-import static android.widget.espresso.TextViewActions.doubleClickOnTextAtIndex;
-import static android.widget.espresso.TextViewActions.dragHandle;
-import static android.widget.espresso.TextViewActions.Handle;
-import static android.widget.espresso.TextViewActions.longPressAndDragOnText;
-import static android.widget.espresso.TextViewActions.longPressOnTextAtIndex;
-import static android.widget.espresso.TextViewAssertions.hasInsertionPointerAtIndex;
-import static android.widget.espresso.TextViewAssertions.hasSelection;
-import static android.widget.espresso.TextViewAssertions.doesNotHaveStyledText;
-import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarItemIndex;
-import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarIsDisplayed;
-import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarIsNotDisplayed;
-import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarContainsItem;
-import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarDoesNotContainItem;
-import static android.widget.espresso.FloatingToolbarEspressoUtils.clickFloatingToolbarItem;
-import static android.widget.espresso.FloatingToolbarEspressoUtils.sleepForFloatingToolbarPopup;
 import static android.support.test.espresso.Espresso.onView;
 import static android.support.test.espresso.action.ViewActions.click;
 import static android.support.test.espresso.action.ViewActions.longClick;
@@ -45,48 +25,84 @@
 import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static android.support.test.espresso.matcher.ViewMatchers.withId;
 import static android.support.test.espresso.matcher.ViewMatchers.withText;
+import static android.widget.espresso.CustomViewActions.longPressAtRelativeCoordinates;
+import static android.widget.espresso.DragHandleUtils.assertNoSelectionHandles;
+import static android.widget.espresso.DragHandleUtils.onHandleView;
+import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarContainsItem;
+import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarDoesNotContainItem;
+import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarIsDisplayed;
+import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarIsNotDisplayed;
+import static android.widget.espresso.FloatingToolbarEspressoUtils.assertFloatingToolbarItemIndex;
+import static android.widget.espresso.FloatingToolbarEspressoUtils.clickFloatingToolbarItem;
+import static android.widget.espresso.FloatingToolbarEspressoUtils.sleepForFloatingToolbarPopup;
+import static android.widget.espresso.TextViewActions.Handle;
+import static android.widget.espresso.TextViewActions.clickOnTextAtIndex;
+import static android.widget.espresso.TextViewActions.doubleClickOnTextAtIndex;
+import static android.widget.espresso.TextViewActions.doubleTapAndDragOnText;
+import static android.widget.espresso.TextViewActions.dragHandle;
+import static android.widget.espresso.TextViewActions.longPressAndDragOnText;
+import static android.widget.espresso.TextViewActions.longPressOnTextAtIndex;
+import static android.widget.espresso.TextViewAssertions.doesNotHaveStyledText;
+import static android.widget.espresso.TextViewAssertions.hasInsertionPointerAtIndex;
+import static android.widget.espresso.TextViewAssertions.hasSelection;
+
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
 import static org.hamcrest.Matchers.anyOf;
 import static org.hamcrest.Matchers.is;
 
+import android.app.Activity;
+import android.app.Instrumentation;
 import android.content.ClipData;
 import android.content.ClipboardManager;
-import android.support.test.espresso.NoMatchingViewException;
-import android.support.test.espresso.ViewAssertion;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.espresso.action.EspressoKey;
+import android.support.test.filters.MediumTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+import android.text.InputType;
+import android.text.Selection;
+import android.text.Spannable;
 import android.view.ActionMode;
+import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.textclassifier.TextClassificationManager;
 import android.view.textclassifier.TextClassifier;
 import android.widget.espresso.CustomViewActions.RelativeCoordinatesProvider;
 
-import android.support.test.espresso.action.EspressoKey;
-import android.test.ActivityInstrumentationTestCase2;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.text.Selection;
-import android.text.Spannable;
-import android.text.InputType;
-import android.view.KeyEvent;
-
 import com.android.frameworks.coretests.R;
 
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
 /**
  * Tests the TextView widget from an Activity
  */
+@RunWith(AndroidJUnit4.class)
 @MediumTest
-public class TextViewActivityTest extends ActivityInstrumentationTestCase2<TextViewActivity>{
+public class TextViewActivityTest {
 
-    public TextViewActivityTest() {
-        super(TextViewActivity.class);
-    }
+    @Rule
+    public ActivityTestRule<TextViewActivity> mActivityRule = new ActivityTestRule<>(
+            TextViewActivity.class);
 
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        getActivity().getSystemService(TextClassificationManager.class)
+    private Activity mActivity;
+    private Instrumentation mInstrumentation;
+
+    @Before
+    public void setUp() {
+        mActivity = mActivityRule.getActivity();
+        mInstrumentation = InstrumentationRegistry.getInstrumentation();
+        mActivity.getSystemService(TextClassificationManager.class)
                 .setTextClassifier(TextClassifier.NO_OP);
     }
 
-    public void testTypedTextIsOnScreen() throws Exception {
+    @Test
+    public void testTypedTextIsOnScreen() {
         final String helloWorld = "Hello world!";
         // We use replaceText instead of typeTextIntoFocusedView to input text to avoid
         // unintentional interactions with software keyboard.
@@ -94,8 +110,8 @@
 
         onView(withId(R.id.textview)).check(matches(withText(helloWorld)));
     }
-
-    public void testPositionCursorAtTextAtIndex() throws Exception {
+    @Test
+    public void testPositionCursorAtTextAtIndex() {
         final String helloWorld = "Hello world!";
         onView(withId(R.id.textview)).perform(replaceText(helloWorld));
         onView(withId(R.id.textview)).perform(clickOnTextAtIndex(helloWorld.indexOf("world")));
@@ -105,7 +121,8 @@
         onView(withId(R.id.textview)).check(matches(withText("Hello orld!")));
     }
 
-    public void testPositionCursorAtTextAtIndex_arabic() throws Exception {
+    @Test
+    public void testPositionCursorAtTextAtIndex_arabic() {
         // Arabic text. The expected cursorable boundary is
         // | \u0623 \u064F | \u067A | \u0633 \u0652 |
         final String text = "\u0623\u064F\u067A\u0633\u0652";
@@ -125,7 +142,8 @@
         onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(5));
     }
 
-    public void testPositionCursorAtTextAtIndex_devanagari() throws Exception {
+    @Test
+    public void testPositionCursorAtTextAtIndex_devanagari() {
         // Devanagari text. The expected cursorable boundary is | \u0915 \u093E |
         final String text = "\u0915\u093E";
         onView(withId(R.id.textview)).perform(replaceText(text));
@@ -138,7 +156,8 @@
         onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(2));
     }
 
-    public void testLongPressToSelect() throws Exception {
+    @Test
+    public void testLongPressToSelect() {
         final String helloWorld = "Hello Kirk!";
         onView(withId(R.id.textview)).perform(click());
         onView(withId(R.id.textview)).perform(replaceText(helloWorld));
@@ -148,7 +167,8 @@
         onView(withId(R.id.textview)).check(hasSelection("Kirk"));
     }
 
-    public void testLongPressEmptySpace() throws Exception {
+    @Test
+    public void testLongPressEmptySpace() {
         final String helloWorld = "Hello big round sun!";
         onView(withId(R.id.textview)).perform(replaceText(helloWorld));
         // Move cursor somewhere else
@@ -161,7 +181,8 @@
         onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(helloWorld.length()));
     }
 
-    public void testLongPressAndDragToSelect() throws Exception {
+    @Test
+    public void testLongPressAndDragToSelect() {
         final String helloWorld = "Hello little handsome boy!";
         onView(withId(R.id.textview)).perform(replaceText(helloWorld));
         onView(withId(R.id.textview)).perform(
@@ -170,7 +191,8 @@
         onView(withId(R.id.textview)).check(hasSelection("little handsome"));
     }
 
-    public void testLongPressAndDragToSelect_emoji() throws Exception {
+    @Test
+    public void testLongPressAndDragToSelect_emoji() {
         final String text = "\uD83D\uDE00\uD83D\uDE01\uD83D\uDE02\uD83D\uDE03";
         onView(withId(R.id.textview)).perform(replaceText(text));
 
@@ -183,7 +205,8 @@
         onView(withId(R.id.textview)).check(hasSelection("\uD83D\uDE01"));
     }
 
-    public void testDragAndDrop() throws Exception {
+    @Test
+    public void testDragAndDrop() {
         final String text = "abc def ghi.";
         onView(withId(R.id.textview)).perform(replaceText(text));
         onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(text.indexOf("e")));
@@ -203,7 +226,8 @@
         onView(withId(R.id.textview)).check(matches(withText(text)));
     }
 
-    public void testDoubleTapToSelect() throws Exception {
+    @Test
+    public void testDoubleTapToSelect() {
         final String helloWorld = "Hello SuetYi!";
         onView(withId(R.id.textview)).perform(replaceText(helloWorld));
 
@@ -213,16 +237,18 @@
         onView(withId(R.id.textview)).check(hasSelection("SuetYi"));
     }
 
-    public void testDoubleTapAndDragToSelect() throws Exception {
-        final String helloWorld = "Hello young beautiful girl!";
+    @Test
+    public void testDoubleTapAndDragToSelect() {
+        final String helloWorld = "Hello young beautiful person!";
         onView(withId(R.id.textview)).perform(replaceText(helloWorld));
-        onView(withId(R.id.textview)).perform(
-                doubleTapAndDragOnText(helloWorld.indexOf("young"), helloWorld.indexOf(" girl!")));
+        onView(withId(R.id.textview)).perform(doubleTapAndDragOnText(helloWorld.indexOf("young"),
+                        helloWorld.indexOf(" person!")));
 
         onView(withId(R.id.textview)).check(hasSelection("young beautiful"));
     }
 
-    public void testDoubleTapAndDragToSelect_multiLine() throws Exception {
+    @Test
+    public void testDoubleTapAndDragToSelect_multiLine() {
         final String helloWorld = "abcd\n" + "efg\n" + "hijklm\n" + "nop";
         onView(withId(R.id.textview)).perform(replaceText(helloWorld));
         onView(withId(R.id.textview)).perform(
@@ -230,7 +256,8 @@
         onView(withId(R.id.textview)).check(hasSelection("abcd\nefg\nhijklm"));
     }
 
-    public void testSelectBackwordsByTouch() throws Exception {
+    @Test
+    public void testSelectBackwordsByTouch() {
         final String helloWorld = "Hello king of the Jungle!";
         onView(withId(R.id.textview)).perform(replaceText(helloWorld));
         onView(withId(R.id.textview)).perform(
@@ -239,7 +266,8 @@
         onView(withId(R.id.textview)).check(hasSelection("king of the"));
     }
 
-    public void testToolbarAppearsAfterSelection() throws Exception {
+    @Test
+    public void testToolbarAppearsAfterSelection() {
         final String text = "Toolbar appears after selection.";
         assertFloatingToolbarIsNotDisplayed();
         onView(withId(R.id.textview)).perform(replaceText(text));
@@ -255,34 +283,32 @@
         assertFloatingToolbarIsNotDisplayed();
     }
 
+    @Test
     public void testToolbarAppearsAfterSelection_withFirstStringLtrAlgorithmAndRtlHint()
-            throws Exception {
+            throws Throwable {
         // after the hint layout change, the floating toolbar was not visible in the case below
         // this test tests that the floating toolbar is displayed on the screen and is visible to
         // user.
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
-        textView.post(new Runnable() {
-            @Override
-            public void run() {
-                textView.setTextDirection(TextView.TEXT_DIRECTION_FIRST_STRONG_LTR);
-                textView.setInputType(InputType.TYPE_CLASS_TEXT);
-                textView.setSingleLine(true);
-                textView.setHint("الروبوت");
-            }
+        mActivityRule.runOnUiThread(() -> {
+            final TextView textView = mActivity.findViewById(R.id.textview);
+            textView.setTextDirection(TextView.TEXT_DIRECTION_FIRST_STRONG_LTR);
+            textView.setInputType(InputType.TYPE_CLASS_TEXT);
+            textView.setSingleLine(true);
+            textView.setHint("الروبوت");
         });
-        getInstrumentation().waitForIdleSync();
+        mInstrumentation.waitForIdleSync();
 
         onView(withId(R.id.textview)).perform(replaceText("test"));
         onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(1));
-        clickFloatingToolbarItem(
-                getActivity().getString(com.android.internal.R.string.cut));
+        clickFloatingToolbarItem(mActivity.getString(com.android.internal.R.string.cut));
         onView(withId(R.id.textview)).perform(longClick());
         sleepForFloatingToolbarPopup();
 
         assertFloatingToolbarIsDisplayed();
     }
 
-    public void testToolbarAndInsertionHandle() throws Exception {
+    @Test
+    public void testToolbarAndInsertionHandle() {
         final String text = "text";
         onView(withId(R.id.textview)).perform(replaceText(text));
         onView(withId(R.id.textview)).perform(clickOnTextAtIndex(text.length()));
@@ -293,14 +319,15 @@
         assertFloatingToolbarIsDisplayed();
 
         assertFloatingToolbarContainsItem(
-                getActivity().getString(com.android.internal.R.string.selectAll));
+                mActivity.getString(com.android.internal.R.string.selectAll));
         assertFloatingToolbarDoesNotContainItem(
-                getActivity().getString(com.android.internal.R.string.copy));
+                mActivity.getString(com.android.internal.R.string.copy));
         assertFloatingToolbarDoesNotContainItem(
-                getActivity().getString(com.android.internal.R.string.cut));
+                mActivity.getString(com.android.internal.R.string.cut));
     }
 
-    public void testToolbarAndSelectionHandle() throws Exception {
+    @Test
+    public void testToolbarAndSelectionHandle() {
         final String text = "abcd efg hijk";
         onView(withId(R.id.textview)).perform(replaceText(text));
 
@@ -309,13 +336,13 @@
         assertFloatingToolbarIsDisplayed();
 
         assertFloatingToolbarContainsItem(
-                getActivity().getString(com.android.internal.R.string.selectAll));
+                mActivity.getString(com.android.internal.R.string.selectAll));
         assertFloatingToolbarContainsItem(
-                getActivity().getString(com.android.internal.R.string.copy));
+                mActivity.getString(com.android.internal.R.string.copy));
         assertFloatingToolbarContainsItem(
-                getActivity().getString(com.android.internal.R.string.cut));
+                mActivity.getString(com.android.internal.R.string.cut));
 
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
+        final TextView textView = mActivity.findViewById(R.id.textview);
         onHandleView(com.android.internal.R.id.selection_start_handle)
                 .perform(dragHandle(textView, Handle.SELECTION_START, text.indexOf('a')));
         sleepForFloatingToolbarPopup();
@@ -327,21 +354,22 @@
         assertFloatingToolbarIsDisplayed();
 
         assertFloatingToolbarDoesNotContainItem(
-                getActivity().getString(com.android.internal.R.string.selectAll));
+                mActivity.getString(com.android.internal.R.string.selectAll));
         assertFloatingToolbarContainsItem(
-                getActivity().getString(com.android.internal.R.string.copy));
+                mActivity.getString(com.android.internal.R.string.copy));
         assertFloatingToolbarContainsItem(
-                getActivity().getString(com.android.internal.R.string.cut));
+                mActivity.getString(com.android.internal.R.string.cut));
     }
 
-    public void testInsertionHandle() throws Exception {
+    @Test
+    public void testInsertionHandle() {
         final String text = "abcd efg hijk ";
         onView(withId(R.id.textview)).perform(replaceText(text));
 
         onView(withId(R.id.textview)).perform(clickOnTextAtIndex(text.length()));
         onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(text.length()));
 
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
+        final TextView textView = mActivity.findViewById(R.id.textview);
 
         onHandleView(com.android.internal.R.id.insertion_handle)
                 .perform(dragHandle(textView, Handle.INSERTION, text.indexOf('a')));
@@ -352,14 +380,15 @@
         onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(text.indexOf("f")));
     }
 
-    public void testInsertionHandle_multiLine() throws Exception {
+    @Test
+    public void testInsertionHandle_multiLine() {
         final String text = "abcd\n" + "efg\n" + "hijk\n";
         onView(withId(R.id.textview)).perform(replaceText(text));
 
         onView(withId(R.id.textview)).perform(clickOnTextAtIndex(text.length()));
         onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(text.length()));
 
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
+        final TextView textView = mActivity.findViewById(R.id.textview);
 
         onHandleView(com.android.internal.R.id.insertion_handle)
                 .perform(dragHandle(textView, Handle.INSERTION, text.indexOf('a')));
@@ -370,7 +399,8 @@
         onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(text.indexOf("f")));
     }
 
-    public void testSelectionHandles() throws Exception {
+    @Test
+    public void testSelectionHandles() {
         final String text = "abcd efg hijk lmn";
         onView(withId(R.id.textview)).perform(replaceText(text));
 
@@ -383,7 +413,7 @@
         onHandleView(com.android.internal.R.id.selection_end_handle)
                 .check(matches(isDisplayed()));
 
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
+        final TextView textView = mActivity.findViewById(R.id.textview);
         onHandleView(com.android.internal.R.id.selection_start_handle)
                 .perform(dragHandle(textView, Handle.SELECTION_START, text.indexOf('a')));
         onView(withId(R.id.textview)).check(hasSelection("abcd efg"));
@@ -393,7 +423,8 @@
         onView(withId(R.id.textview)).check(hasSelection("abcd efg hijk"));
     }
 
-    public void testSelectionHandles_bidi() throws Exception {
+    @Test
+    public void testSelectionHandles_bidi() {
         final String text = "abc \u0621\u0622\u0623 def";
         onView(withId(R.id.textview)).perform(replaceText(text));
 
@@ -408,7 +439,7 @@
 
         onView(withId(R.id.textview)).check(hasSelection("\u0621\u0622\u0623"));
 
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
+        final TextView textView = mActivity.findViewById(R.id.textview);
         onHandleView(com.android.internal.R.id.selection_start_handle)
                 .perform(dragHandle(textView, Handle.SELECTION_START, text.indexOf('f')));
         onView(withId(R.id.textview)).check(hasSelection("\u0621\u0622\u0623"));
@@ -436,12 +467,13 @@
         onView(withId(R.id.textview)).check(hasSelection("abc \u0621\u0622\u0623 def"));
     }
 
-    public void testSelectionHandles_multiLine() throws Exception {
+    @Test
+    public void testSelectionHandles_multiLine() {
         final String text = "abcd\n" + "efg\n" + "hijk\n" + "lmn\n" + "opqr";
         onView(withId(R.id.textview)).perform(replaceText(text));
         onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(text.indexOf('i')));
 
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
+        final TextView textView = mActivity.findViewById(R.id.textview);
         onHandleView(com.android.internal.R.id.selection_start_handle)
                 .perform(dragHandle(textView, Handle.SELECTION_START, text.indexOf('e')));
         onView(withId(R.id.textview)).check(hasSelection("efg\nhijk"));
@@ -459,7 +491,8 @@
         onView(withId(R.id.textview)).check(hasSelection("abcd\nefg\nhijk\nlmn\nopqr"));
     }
 
-    public void testSelectionHandles_multiLine_rtl() throws Exception {
+    @Test
+    public void testSelectionHandles_multiLine_rtl() {
         // Arabic text.
         final String text = "\u062A\u062B\u062C\n" + "\u062D\u062E\u062F\n"
                 + "\u0630\u0631\u0632\n" + "\u0633\u0634\u0635\n" + "\u0636\u0637\u0638\n"
@@ -467,7 +500,7 @@
         onView(withId(R.id.textview)).perform(replaceText(text));
         onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(text.indexOf('\u0634')));
 
-        final TextView textView = (TextView)getActivity().findViewById(R.id.textview);
+        final TextView textView = mActivity.findViewById(R.id.textview);
         onHandleView(com.android.internal.R.id.selection_start_handle)
                 .perform(dragHandle(textView, Handle.SELECTION_START, text.indexOf('\u062E')));
         onView(withId(R.id.textview)).check(hasSelection(
@@ -488,13 +521,13 @@
         onView(withId(R.id.textview)).check(hasSelection(text));
     }
 
-
-    public void testSelectionHandles_doesNotPassAnotherHandle() throws Exception {
+    @Test
+    public void testSelectionHandles_doesNotPassAnotherHandle() {
         final String text = "abcd efg hijk lmn";
         onView(withId(R.id.textview)).perform(replaceText(text));
         onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(text.indexOf('f')));
 
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
+        final TextView textView = mActivity.findViewById(R.id.textview);
         onHandleView(com.android.internal.R.id.selection_start_handle)
                 .perform(dragHandle(textView, Handle.SELECTION_START, text.indexOf('l')));
         onView(withId(R.id.textview)).check(hasSelection("g"));
@@ -505,12 +538,13 @@
         onView(withId(R.id.textview)).check(hasSelection("e"));
     }
 
-    public void testSelectionHandles_doesNotPassAnotherHandle_multiLine() throws Exception {
+    @Test
+    public void testSelectionHandles_doesNotPassAnotherHandle_multiLine() {
         final String text = "abcd\n" + "efg\n" + "hijk\n" + "lmn\n" + "opqr";
         onView(withId(R.id.textview)).perform(replaceText(text));
         onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(text.indexOf('i')));
 
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
+        final TextView textView = mActivity.findViewById(R.id.textview);
         onHandleView(com.android.internal.R.id.selection_start_handle)
                 .perform(dragHandle(textView, Handle.SELECTION_START, text.indexOf('r') + 1));
         onView(withId(R.id.textview)).check(hasSelection("k"));
@@ -521,12 +555,13 @@
         onView(withId(R.id.textview)).check(hasSelection("h"));
     }
 
-    public void testSelectionHandles_snapToWordBoundary() throws Exception {
+    @Test
+    public void testSelectionHandles_snapToWordBoundary() {
         final String text = "abcd efg hijk lmn opqr";
         onView(withId(R.id.textview)).perform(replaceText(text));
         onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(text.indexOf('i')));
 
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
+        final TextView textView = mActivity.findViewById(R.id.textview);
 
         onHandleView(com.android.internal.R.id.selection_start_handle)
                 .perform(dragHandle(textView, Handle.SELECTION_START, text.indexOf('f')));
@@ -573,12 +608,13 @@
         onView(withId(R.id.textview)).check(hasSelection("hijk lmn opq"));
     }
 
-    public void testSelectionHandles_snapToWordBoundary_multiLine() throws Exception {
+    @Test
+    public void testSelectionHandles_snapToWordBoundary_multiLine() {
         final String text = "abcd efg\n" + "hijk lmn\n" + "opqr stu";
         onView(withId(R.id.textview)).perform(replaceText(text));
         onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(text.indexOf('m')));
 
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
+        final TextView textView = mActivity.findViewById(R.id.textview);
 
         onHandleView(com.android.internal.R.id.selection_start_handle)
                 .perform(dragHandle(textView, Handle.SELECTION_START, text.indexOf('c')));
@@ -607,14 +643,16 @@
         onView(withId(R.id.textview)).check(hasSelection("hijk"));
     }
 
-    public void testSetSelectionAndActionMode() throws Exception {
+    @Test
+    public void testSetSelectionAndActionMode() throws Throwable {
         final String text = "abc def";
         onView(withId(R.id.textview)).perform(replaceText(text));
 
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
+        final TextView textView = mActivity.findViewById(R.id.textview);
         assertFloatingToolbarIsNotDisplayed();
-        textView.post(() -> Selection.setSelection((Spannable) textView.getText(), 0, 3));
-        getInstrumentation().waitForIdleSync();
+        mActivityRule.runOnUiThread(
+                () -> Selection.setSelection((Spannable) textView.getText(), 0, 3));
+        mInstrumentation.waitForIdleSync();
         sleepForFloatingToolbarPopup();
         // Don't automatically start action mode.
         assertFloatingToolbarIsNotDisplayed();
@@ -624,25 +662,29 @@
         sleepForFloatingToolbarPopup();
         assertFloatingToolbarIsDisplayed();
         // Changing the selection range by API should not interrupt the selection action mode.
-        textView.post(() -> Selection.setSelection((Spannable) textView.getText(), 0, 3));
-        getInstrumentation().waitForIdleSync();
+        mActivityRule.runOnUiThread(
+                () -> Selection.setSelection((Spannable) textView.getText(), 0, 3));
+        mInstrumentation.waitForIdleSync();
         sleepForFloatingToolbarPopup();
         assertFloatingToolbarIsDisplayed();
         assertFloatingToolbarContainsItem(
-                getActivity().getString(com.android.internal.R.string.selectAll));
+                mActivity.getString(com.android.internal.R.string.selectAll));
         // Make sure that "Select All" is no longer included when the entire text is selected by
         // API.
-        textView.post(
+        mActivityRule.runOnUiThread(
                 () -> Selection.setSelection((Spannable) textView.getText(), 0, text.length()));
-        getInstrumentation().waitForIdleSync();
+        mInstrumentation.waitForIdleSync();
+
         sleepForFloatingToolbarPopup();
         assertFloatingToolbarIsDisplayed();
         assertFloatingToolbarDoesNotContainItem(
-                getActivity().getString(com.android.internal.R.string.selectAll));
+                mActivity.getString(com.android.internal.R.string.selectAll));
         // Make sure that shrinking the selection range to cursor (an empty range) by API
         // terminates selection action mode and does not trigger the insertion action mode.
-        textView.post(() -> Selection.setSelection((Spannable) textView.getText(), 0));
-        getInstrumentation().waitForIdleSync();
+        mActivityRule.runOnUiThread(
+                () -> Selection.setSelection((Spannable) textView.getText(), 0));
+        mInstrumentation.waitForIdleSync();
+
         sleepForFloatingToolbarPopup();
         assertFloatingToolbarIsNotDisplayed();
         // Make sure that user click can trigger the insertion action mode.
@@ -652,28 +694,32 @@
         assertFloatingToolbarIsDisplayed();
         // Make sure that an existing insertion action mode keeps alive after the insertion point is
         // moved by API.
-        textView.post(() -> Selection.setSelection((Spannable) textView.getText(), 0));
-        getInstrumentation().waitForIdleSync();
+        mActivityRule.runOnUiThread(
+                () -> Selection.setSelection((Spannable) textView.getText(), 0));
+        mInstrumentation.waitForIdleSync();
+
         sleepForFloatingToolbarPopup();
         assertFloatingToolbarIsDisplayed();
         assertFloatingToolbarDoesNotContainItem(
-                getActivity().getString(com.android.internal.R.string.copy));
+                mActivity.getString(com.android.internal.R.string.copy));
         // Make sure that selection action mode is started after selection is created by API when
         // insertion action mode is active.
-        textView.post(
+        mActivityRule.runOnUiThread(
                 () -> Selection.setSelection((Spannable) textView.getText(), 1, text.length()));
-        getInstrumentation().waitForIdleSync();
+        mInstrumentation.waitForIdleSync();
+
         sleepForFloatingToolbarPopup();
         assertFloatingToolbarIsDisplayed();
         assertFloatingToolbarContainsItem(
-                getActivity().getString(com.android.internal.R.string.copy));
+                mActivity.getString(com.android.internal.R.string.copy));
     }
 
-    public void testTransientState() throws Exception {
+    @Test
+    public void testTransientState() throws Throwable {
         final String text = "abc def";
         onView(withId(R.id.textview)).perform(replaceText(text));
 
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
+        final TextView textView = mActivity.findViewById(R.id.textview);
         assertFalse(textView.hasTransientState());
 
         onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(text.indexOf('b')));
@@ -682,22 +728,24 @@
         onView(withId(R.id.textview)).perform(clickOnTextAtIndex(text.indexOf('d')));
         // hasTransientState should return false as the selection has been cleared.
         assertFalse(textView.hasTransientState());
-        textView.post(
+        mActivityRule.runOnUiThread(
                 () -> Selection.setSelection((Spannable) textView.getText(), 0, text.length()));
-        getInstrumentation().waitForIdleSync();
+        mInstrumentation.waitForIdleSync();
+
         // hasTransientState should return false when selection is created by API.
         assertFalse(textView.hasTransientState());
     }
 
-    public void testResetMenuItemTitle() throws Exception {
-        getActivity().getSystemService(TextClassificationManager.class).setTextClassifier(null);
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
+    @Test
+    public void testResetMenuItemTitle() throws Throwable {
+        mActivity.getSystemService(TextClassificationManager.class).setTextClassifier(null);
+        final TextView textView = mActivity.findViewById(R.id.textview);
         final int itemId = 1;
         final String title1 = " AFIGBO";
         final int index = title1.indexOf('I');
         final String title2 = title1.substring(index);
         final String[] title = new String[]{title1};
-        textView.post(() -> textView.setCustomSelectionActionModeCallback(
+        mActivityRule.runOnUiThread(() -> textView.setCustomSelectionActionModeCallback(
                 new ActionMode.Callback() {
                     @Override
                     public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
@@ -720,6 +768,8 @@
                     public void onDestroyActionMode(ActionMode actionMode) {
                     }
                 }));
+        mInstrumentation.waitForIdleSync();
+
         onView(withId(R.id.textview)).perform(replaceText(title1));
         onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(index));
         sleepForFloatingToolbarPopup();
@@ -734,10 +784,11 @@
         assertFloatingToolbarContainsItem(title2);
     }
 
-    public void testAssistItemIsAtIndexZero() throws Exception {
-        getActivity().getSystemService(TextClassificationManager.class).setTextClassifier(null);
-        final TextView textView = (TextView) getActivity().findViewById(R.id.textview);
-        textView.post(() -> textView.setCustomSelectionActionModeCallback(
+    @Test
+    public void testAssistItemIsAtIndexZero() throws Throwable {
+        useSystemDefaultTextClassifier();
+        final TextView textView = mActivity.findViewById(R.id.textview);
+        mActivityRule.runOnUiThread(() -> textView.setCustomSelectionActionModeCallback(
                 new ActionMode.Callback() {
                     @Override
                     public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
@@ -761,7 +812,7 @@
                     public void onDestroyActionMode(ActionMode actionMode) {
                     }
                 }));
-        getInstrumentation().waitForIdleSync();
+        mInstrumentation.waitForIdleSync();
         final String text = "droid@android.com";
 
         onView(withId(R.id.textview)).perform(replaceText(text));
@@ -770,32 +821,52 @@
         assertFloatingToolbarItemIndex(android.R.id.textAssist, 0);
     }
 
+    @Test
+    public void testNoAssistItemForPasswordField() throws Throwable {
+        useSystemDefaultTextClassifier();
+        final TextView textView = mActivity.findViewById(R.id.textview);
+        mActivityRule.runOnUiThread(() -> {
+            textView.setInputType(
+                    InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
+        });
+        mInstrumentation.waitForIdleSync();
+        final String password = "afigbo@android.com";
+
+        onView(withId(R.id.textview)).perform(replaceText(password));
+        onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(password.indexOf('@')));
+        sleepForFloatingToolbarPopup();
+        assertFloatingToolbarDoesNotContainItem(android.R.id.textAssist);
+    }
+
+    @Test
     public void testNoAssistItemForTextFieldWithUnsupportedCharacters() throws Throwable {
-        getActivity().getSystemService(TextClassificationManager.class).setTextClassifier(null);
+        useSystemDefaultTextClassifier();
         final String text = "\u202Emoc.diordna.com";
-        final TextView textView = getActivity().findViewById(R.id.textview);
-        textView.post(() -> textView.setText(text));
-        getInstrumentation().waitForIdleSync();
+        final TextView textView = mActivity.findViewById(R.id.textview);
+        mActivityRule.runOnUiThread(() -> textView.setText(text));
+        mInstrumentation.waitForIdleSync();
 
         onView(withId(R.id.textview)).perform(longPressOnTextAtIndex(text.indexOf('.')));
         sleepForFloatingToolbarPopup();
-        assertFloatingToolbarItemIndex(android.R.id.cut, 0);
+        assertFloatingToolbarDoesNotContainItem(android.R.id.textAssist);
     }
 
-    public void testPastePlainText_menuAction() throws Exception {
+    @Test
+    public void testPastePlainText_menuAction() {
         initializeClipboardWithText(TextStyle.STYLED);
 
         onView(withId(R.id.textview)).perform(replaceText(""));
         onView(withId(R.id.textview)).perform(longClick());
         sleepForFloatingToolbarPopup();
         clickFloatingToolbarItem(
-                getActivity().getString(com.android.internal.R.string.paste_as_plain_text));
-        getInstrumentation().waitForIdleSync();
+                mActivity.getString(com.android.internal.R.string.paste_as_plain_text));
+        mInstrumentation.waitForIdleSync();
 
         onView(withId(R.id.textview)).check(matches(withText("styledtext")));
         onView(withId(R.id.textview)).check(doesNotHaveStyledText());
     }
 
+    @Test
     public void testPastePlainText_noMenuItemForPlainText() {
         initializeClipboardWithText(TextStyle.PLAIN);
 
@@ -804,7 +875,11 @@
         sleepForFloatingToolbarPopup();
 
         assertFloatingToolbarDoesNotContainItem(
-                getActivity().getString(com.android.internal.R.string.paste_as_plain_text));
+                mActivity.getString(com.android.internal.R.string.paste_as_plain_text));
+    }
+
+    private void useSystemDefaultTextClassifier() {
+        mActivity.getSystemService(TextClassificationManager.class).setTextClassifier(null);
     }
 
     private void initializeClipboardWithText(TextStyle textStyle) {
@@ -819,9 +894,9 @@
             default:
                 throw new IllegalArgumentException("Invalid text style");
         }
-        getActivity().getWindow().getDecorView().post(() ->
-            getActivity().getSystemService(ClipboardManager.class).setPrimaryClip( clip));
-        getInstrumentation().waitForIdleSync();
+        mActivity.getWindow().getDecorView().post(() ->
+                mActivity.getSystemService(ClipboardManager.class).setPrimaryClip(clip));
+        mInstrumentation.waitForIdleSync();
     }
 
     private enum TextStyle {
diff --git a/core/tests/coretests/src/android/widget/TextViewPerformanceTest.java b/core/tests/coretests/src/android/widget/TextViewPerformanceTest.java
index c25df7c..cf173fb 100644
--- a/core/tests/coretests/src/android/widget/TextViewPerformanceTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewPerformanceTest.java
@@ -20,15 +20,20 @@
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Paint;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.MediumTest;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
 import android.text.SpannedString;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.TextView;
 
-public class TextViewPerformanceTest extends AndroidTestCase {
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class TextViewPerformanceTest {
 
     private String mString = "The quick brown fox";
     private Canvas mCanvas;
@@ -36,16 +41,16 @@
     private Paint mPaint;
     private PerformanceLabelView mLabelView;
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
+    @Before
+    public void setUp() {
         Bitmap mBitmap = Bitmap.createBitmap(320, 240, Bitmap.Config.RGB_565);
         mCanvas = new Canvas(mBitmap);
 
         ViewGroup.LayoutParams p = new ViewGroup.LayoutParams(320, 240);
 
-        mLabelView = new PerformanceLabelView(mContext);
+        final Context context = InstrumentationRegistry.getContext();
+
+        mLabelView = new PerformanceLabelView(context);
         mLabelView.setText(mString);
         mLabelView.measure(View.MeasureSpec.AT_MOST | 320, View.MeasureSpec.AT_MOST | 240);
         mLabelView.mySetFrame(320, 240);
@@ -54,7 +59,7 @@
 
         mPaint = new Paint();
         mCanvas.save();
-        mTextView = new PerformanceTextView(mContext);
+        mTextView = new PerformanceTextView(context);
         mTextView.setLayoutParams(p);
         mTextView.setText(mString);
         mTextView.mySetFrame(320, 240);
@@ -62,7 +67,8 @@
     }
 
     @MediumTest
-    public void testDrawTextViewLine() throws Exception {
+    @Test
+    public void testDrawTextViewLine() {
         mTextView.myDraw(mCanvas);
         mTextView.myDraw(mCanvas);
         mTextView.myDraw(mCanvas);
@@ -76,7 +82,8 @@
     }
 
     @SmallTest
-    public void testSpan() throws Exception {
+    @Test
+    public void testSpan() {
         CharSequence charSeq = new SpannedString(mString);
         mTextView.setText(charSeq);
 
@@ -93,12 +100,14 @@
     }
 
     @SmallTest
-    public void testCanvasDrawText() throws Exception {
+    @Test
+    public void testCanvasDrawText() {
         mCanvas.drawText(mString, 30, 30, mPaint);
     }
 
     @SmallTest
-    public void testLabelViewDraw() throws Exception {
+    @Test
+    public void testLabelViewDraw() {
         mLabelView.myDraw(mCanvas);
     }
 
diff --git a/core/tests/coretests/src/android/widget/TextViewTest.java b/core/tests/coretests/src/android/widget/TextViewTest.java
index 8989462..1a1244f 100644
--- a/core/tests/coretests/src/android/widget/TextViewTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewTest.java
@@ -16,41 +16,57 @@
 
 package android.widget;
 
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
+
 import android.app.Activity;
+import android.app.Instrumentation;
 import android.content.Intent;
 import android.graphics.Paint;
 import android.platform.test.annotations.Presubmit;
-import android.test.ActivityInstrumentationTestCase2;
-import android.test.suitebuilder.annotation.SmallTest;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.annotation.UiThreadTest;
+import android.support.test.filters.MediumTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
 import android.text.GetChars;
 import android.text.Layout;
 import android.text.Selection;
 import android.text.Spannable;
-import android.util.Log;
 import android.view.View;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
 import java.util.Locale;
 
 /**
  * TextViewTest tests {@link TextView}.
  */
-public class TextViewTest extends ActivityInstrumentationTestCase2<TextViewActivity> {
-    private static final String TAG = "TextViewTest";
+@RunWith(AndroidJUnit4.class)
+@MediumTest
+public class TextViewTest {
+    @Rule
+    public ActivityTestRule<TextViewActivity> mActivityRule = new ActivityTestRule<>(
+            TextViewActivity.class);
+    private Instrumentation mInstrumentation;
+    private Activity mActivity;
     private TextView mTextView;
 
-    public TextViewTest() {
-        super(TextViewActivity.class);
+    @Before
+    public void setup() {
+        mActivity = mActivityRule.getActivity();
+        mInstrumentation = InstrumentationRegistry.getInstrumentation();
     }
 
-    @SmallTest
     @Presubmit
-    public void testArray() throws Exception {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mTextView = new TextView(getActivity());
-            }
-        });
-        getInstrumentation().waitForIdleSync();
+    @UiThreadTest
+    @Test
+    public void testArray() {
+        mTextView = new TextView(mActivity);
 
         char[] c = new char[] { 'H', 'e', 'l', 'l', 'o', ' ',
                                 'W', 'o', 'r', 'l', 'd', '!' };
@@ -78,15 +94,10 @@
         assertEquals('\0', c2[5]);
     }
 
-    @SmallTest
-    public void testProcessTextActivityResultNonEditable() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mTextView = new TextView(getActivity());
-            }
-        });
-        getInstrumentation().waitForIdleSync();
+    @Test
+    public void testProcessTextActivityResultNonEditable() throws Throwable {
+        mActivityRule.runOnUiThread(() -> mTextView = new TextView(mActivity));
+        mInstrumentation.waitForIdleSync();
         CharSequence originalText = "This is some text.";
         mTextView.setText(originalText, TextView.BufferType.SPANNABLE);
         assertEquals(originalText, mTextView.getText().toString());
@@ -94,30 +105,23 @@
         Selection.setSelection((Spannable) mTextView.getText(), 0, mTextView.getText().length());
 
         // We need to run this in the UI thread, as it will create a Toast.
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                CharSequence newText = "Text is replaced.";
-                Intent data = new Intent();
-                data.putExtra(Intent.EXTRA_PROCESS_TEXT, newText);
-                mTextView.onActivityResult(TextView.PROCESS_TEXT_REQUEST_CODE, Activity.RESULT_OK, data);
-            }
+        mActivityRule.runOnUiThread(() -> {
+            CharSequence newText = "Text is replaced.";
+            Intent data = new Intent();
+            data.putExtra(Intent.EXTRA_PROCESS_TEXT, newText);
+            mTextView.onActivityResult(TextView.PROCESS_TEXT_REQUEST_CODE, Activity.RESULT_OK,
+                    data);
         });
-        getInstrumentation().waitForIdleSync();
+        mInstrumentation.waitForIdleSync();
 
         // This is a TextView, which can't be modified. Hence no change should have been made.
         assertEquals(originalText, mTextView.getText().toString());
     }
 
-    @SmallTest
-    public void testProcessTextActivityResultEditable() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mTextView = new EditText(getActivity());
-            }
-        });
-        getInstrumentation().waitForIdleSync();
+    @Test
+    public void testProcessTextActivityResultEditable() throws Throwable {
+        mActivityRule.runOnUiThread(() -> mTextView = new EditText(mActivity));
+        mInstrumentation.waitForIdleSync();
         CharSequence originalText = "This is some text.";
         mTextView.setText(originalText, TextView.BufferType.SPANNABLE);
         assertEquals(originalText, mTextView.getText().toString());
@@ -132,15 +136,10 @@
         assertEquals(newText, mTextView.getText().toString());
     }
 
-    @SmallTest
-    public void testProcessTextActivityResultCancel() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mTextView = new EditText(getActivity());
-            }
-        });
-        getInstrumentation().waitForIdleSync();
+    @Test
+    public void testProcessTextActivityResultCancel() throws Throwable {
+        mActivityRule.runOnUiThread(() -> mTextView = new EditText(mActivity));
+        mInstrumentation.waitForIdleSync();
         CharSequence originalText = "This is some text.";
         mTextView.setText(originalText, TextView.BufferType.SPANNABLE);
         assertEquals(originalText, mTextView.getText().toString());
@@ -156,15 +155,10 @@
         assertEquals(originalText, mTextView.getText().toString());
     }
 
-    @SmallTest
-    public void testProcessTextActivityNoData() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mTextView = new EditText(getActivity());
-            }
-        });
-        getInstrumentation().waitForIdleSync();
+    @Test
+    public void testProcessTextActivityNoData() throws Throwable {
+        mActivityRule.runOnUiThread(() -> mTextView = new EditText(mActivity));
+        mInstrumentation.waitForIdleSync();
         CharSequence originalText = "This is some text.";
         mTextView.setText(originalText, TextView.BufferType.SPANNABLE);
         assertEquals(originalText, mTextView.getText().toString());
@@ -176,13 +170,14 @@
         assertEquals(originalText, mTextView.getText().toString());
     }
 
-    @SmallTest
+    @Test
+    @UiThreadTest
     public void testHyphenationWidth() {
-        TextView textView = new TextView(getActivity());
-        textView.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_FULL);
-        textView.setTextLocale(Locale.US);
+        mTextView = new TextView(mActivity);
+        mTextView.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_FULL);
+        mTextView.setTextLocale(Locale.US);
 
-        Paint paint = textView.getPaint();
+        Paint paint = mTextView.getPaint();
 
         String word = "thisissuperlonglongword";
         float wordWidth = paint.measureText(word, 0, word.length());
@@ -192,17 +187,17 @@
             sb.append(word);
             sb.append(" ");
         }
-        textView.setText(sb.toString());
+        mTextView.setText(sb.toString());
 
         int width = (int)(wordWidth * 0.7);
         int height = 4096;  // enough for all text.
 
-        textView.measure(
+        mTextView.measure(
                 View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY),
                 View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY));
-        textView.layout(0, 0, width, height);
+        mTextView.layout(0, 0, width, height);
 
-        Layout layout = textView.getLayout();
+        Layout layout = mTextView.getLayout();
         assertNotNull(layout);
 
         int lineCount = layout.getLineCount();
diff --git a/core/tests/coretests/src/android/widget/espresso/FloatingToolbarEspressoUtils.java b/core/tests/coretests/src/android/widget/espresso/FloatingToolbarEspressoUtils.java
index 5206c9b..3825e3f 100644
--- a/core/tests/coretests/src/android/widget/espresso/FloatingToolbarEspressoUtils.java
+++ b/core/tests/coretests/src/android/widget/espresso/FloatingToolbarEspressoUtils.java
@@ -23,29 +23,31 @@
 import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant;
 import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static android.support.test.espresso.matcher.ViewMatchers.isRoot;
-import static android.support.test.espresso.matcher.ViewMatchers.withTagValue;
 import static android.support.test.espresso.matcher.ViewMatchers.withId;
+import static android.support.test.espresso.matcher.ViewMatchers.withTagValue;
 import static android.support.test.espresso.matcher.ViewMatchers.withText;
+
 import static org.hamcrest.Matchers.allOf;
 import static org.hamcrest.Matchers.is;
 
-import android.view.MenuItem;
-import android.view.ViewGroup;
-import java.util.ArrayList;
-import java.util.List;
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
-
 import android.support.test.espresso.NoMatchingRootException;
 import android.support.test.espresso.NoMatchingViewException;
 import android.support.test.espresso.UiController;
 import android.support.test.espresso.ViewAction;
 import android.support.test.espresso.ViewInteraction;
+import android.view.MenuItem;
 import android.view.View;
+import android.view.ViewGroup;
 
 import com.android.internal.widget.FloatingToolbar;
 
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeMatcher;
+
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Espresso utility methods for the floating toolbar.
  */
@@ -177,6 +179,39 @@
     }
 
     /**
+     * Asserts that the floating toolbar does not contain a menu item with the specified id.
+     *
+     * @param menuItemId id of the menu item
+     * @throws AssertionError if the assertion fails
+     */
+    public static void assertFloatingToolbarDoesNotContainItem(final int menuItemId) {
+        onFloatingToolBar().check(matches(new TypeSafeMatcher<View>() {
+            @Override
+            public boolean matchesSafely(View view) {
+                return !hasMenuItemWithSpecifiedId(view);
+            }
+
+            @Override
+            public void describeTo(Description description) {}
+
+            private boolean hasMenuItemWithSpecifiedId(View view) {
+                if (view.getTag() instanceof MenuItem
+                        && ((MenuItem) view.getTag()).getItemId() == menuItemId) {
+                    return true;
+                } else if (view instanceof ViewGroup) {
+                    ViewGroup viewGroup = (ViewGroup) view;
+                    for (int i = 0; i < viewGroup.getChildCount(); i++) {
+                        if (hasMenuItemWithSpecifiedId(viewGroup.getChildAt(i))) {
+                            return true;
+                        }
+                    }
+                }
+                return false;
+            }
+        }));
+    }
+
+    /**
      * Click specified item on the floating tool bar.
      *
      * @param itemLabel label of the item.
diff --git a/core/tests/coretests/src/android/widget/espresso/MouseClickAction.java b/core/tests/coretests/src/android/widget/espresso/MouseClickAction.java
index bec4180..b50d6f4 100644
--- a/core/tests/coretests/src/android/widget/espresso/MouseClickAction.java
+++ b/core/tests/coretests/src/android/widget/espresso/MouseClickAction.java
@@ -16,8 +16,6 @@
 
 package android.widget.espresso;
 
-import org.hamcrest.Matcher;
-
 import android.support.test.espresso.UiController;
 import android.support.test.espresso.ViewAction;
 import android.support.test.espresso.action.CoordinatesProvider;
@@ -25,10 +23,13 @@
 import android.support.test.espresso.action.MotionEvents.DownResultHolder;
 import android.support.test.espresso.action.Press;
 import android.support.test.espresso.action.Tapper;
+import android.view.InputDevice;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewConfiguration;
 
+import org.hamcrest.Matcher;
+
 /**
  * ViewAction for performing an click on View by a mouse.
  */
@@ -41,8 +42,9 @@
         TRIPLE {
             @Override
             public Tapper.Status sendTap(UiController uiController, float[] coordinates,
-                    float[] precision) {
-                Tapper.Status stat = sendSingleTap(uiController, coordinates, precision);
+                    float[] precision, int inputDevice, int buttonState) {
+                Tapper.Status stat = sendSingleTap(uiController, coordinates, precision,
+                        inputDevice, buttonState);
                 boolean warning = false;
                 if (stat == Tapper.Status.FAILURE) {
                     return Tapper.Status.FAILURE;
@@ -55,7 +57,8 @@
                     if (0 < doubleTapMinimumTimeout) {
                         uiController.loopMainThreadForAtLeast(doubleTapMinimumTimeout);
                     }
-                    stat = sendSingleTap(uiController, coordinates, precision);
+                    stat = sendSingleTap(uiController, coordinates, precision, inputDevice,
+                            buttonState);
                     if (stat == Tapper.Status.FAILURE) {
                         return Tapper.Status.FAILURE;
                     } else if (stat == Tapper.Status.WARNING) {
@@ -69,11 +72,19 @@
                     return Tapper.Status.SUCCESS;
                 }
             }
+
+            @Override
+            public Tapper.Status sendTap(UiController uiController, float[] coordinates,
+                    float[] precision) {
+                return sendTap(uiController, coordinates, precision, InputDevice.SOURCE_UNKNOWN,
+                        MotionEvent.BUTTON_PRIMARY);
+            }
         };
 
         private static Tapper.Status sendSingleTap(UiController uiController,
-                float[] coordinates, float[] precision) {
-            DownResultHolder res = MotionEvents.sendDown(uiController, coordinates, precision);
+                float[] coordinates, float[] precision, int inputDevice, int buttonState) {
+            DownResultHolder res = MotionEvents.sendDown(uiController, coordinates, precision,
+                    inputDevice, buttonState);
             try {
                 if (!MotionEvents.sendUp(uiController, res.down)) {
                     MotionEvents.sendCancel(uiController, res.down);
diff --git a/core/tests/coretests/src/android/widget/espresso/TextViewActions.java b/core/tests/coretests/src/android/widget/espresso/TextViewActions.java
index 335d021..b4c547e 100644
--- a/core/tests/coretests/src/android/widget/espresso/TextViewActions.java
+++ b/core/tests/coretests/src/android/widget/espresso/TextViewActions.java
@@ -17,10 +17,12 @@
 package android.widget.espresso;
 
 import static android.support.test.espresso.action.ViewActions.actionWithAssertions;
+
 import android.graphics.Rect;
 import android.support.test.espresso.PerformException;
 import android.support.test.espresso.ViewAction;
 import android.support.test.espresso.action.CoordinatesProvider;
+import android.support.test.espresso.action.GeneralLocation;
 import android.support.test.espresso.action.Press;
 import android.support.test.espresso.action.Tap;
 import android.support.test.espresso.util.HumanReadables;
@@ -53,6 +55,20 @@
                 new ViewClickAction(Tap.SINGLE, new TextCoordinates(index), Press.FINGER));
     }
 
+
+    /**
+     * Returns an action that single-clicks by mouse on the View.<br>
+     * <br>
+     * View constraints:
+     * <ul>
+     * <li>must be a View displayed on screen
+     * <ul>
+     */
+    public static ViewAction mouseClick() {
+        return actionWithAssertions(new MouseClickAction(Tap.SINGLE, GeneralLocation.VISIBLE_CENTER,
+                MotionEvent.BUTTON_PRIMARY));
+    }
+
     /**
      * Returns an action that clicks by mouse on text at an index on the TextView.<br>
      * <br>
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java
index c21c3be..c611a01 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java
@@ -22,6 +22,7 @@
 import android.os.WorkSource;
 import android.support.test.filters.SmallTest;
 import android.util.ArrayMap;
+import android.view.Display;
 
 import junit.framework.TestCase;
 
@@ -44,7 +45,7 @@
         // Off-battery, non-existent
         clocks.realtime = clocks.uptime = 10;
         cur = clocks.realtime * 1000;
-        bi.updateTimeBasesLocked(false, false, cur, cur); // off battery
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, cur, cur); // off battery
         assertFalse(bgtb.isRunning());
         assertEquals(0, bgtb.computeRealtime(cur, STATS_SINCE_CHARGED));
 
@@ -65,7 +66,7 @@
         // On-battery, background
         clocks.realtime = clocks.uptime = 303;
         cur = clocks.realtime * 1000;
-        bi.updateTimeBasesLocked(true, false, cur, cur); // on battery
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, cur, cur); // on battery
         // still in ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND
         assertTrue(bgtb.isRunning());
         assertEquals(0, bgtb.computeRealtime(cur, STATS_SINCE_CHARGED));
@@ -73,7 +74,7 @@
         // On-battery, background - but change screen state
         clocks.realtime = clocks.uptime = 409;
         cur = clocks.realtime * 1000;
-        bi.updateTimeBasesLocked(true, true, cur, cur); // on battery (again)
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, cur, cur); // on battery (again)
         assertTrue(bgtb.isRunning());
         assertEquals(106_000, bgtb.computeRealtime(cur, STATS_SINCE_CHARGED));
 
@@ -87,7 +88,7 @@
         // Off-battery, foreground
         clocks.realtime = clocks.uptime = 530;
         cur = clocks.realtime * 1000;
-        bi.updateTimeBasesLocked(false, false, cur, cur); // off battery
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, cur, cur); // off battery
         bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
         assertFalse(bgtb.isRunning());
         assertEquals(227_000, bgtb.computeRealtime(cur, STATS_SINCE_CHARGED));
@@ -112,17 +113,17 @@
         // battery=off, screen=off, background=off
         cur = (clocks.realtime = clocks.uptime = 100) * 1000;
         bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
-        bi.updateTimeBasesLocked(false, false, cur, cur);
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, cur, cur);
         assertFalse(bgtb.isRunning());
 
         // battery=on, screen=off, background=off
         cur = (clocks.realtime = clocks.uptime = 200) * 1000;
-        bi.updateTimeBasesLocked(true, false, cur, cur);
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, cur, cur);
         assertFalse(bgtb.isRunning());
 
         // battery=on, screen=on, background=off
         cur = (clocks.realtime = clocks.uptime = 300) * 1000;
-        bi.updateTimeBasesLocked(true, true, cur, cur);
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, cur, cur);
         assertFalse(bgtb.isRunning());
 
         // battery=on, screen=on, background=on
@@ -133,12 +134,12 @@
 
         // battery=on, screen=off, background=on
         cur = (clocks.realtime = clocks.uptime = 550) * 1000;
-        bi.updateTimeBasesLocked(true, false, cur, cur);
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, cur, cur);
         assertFalse(bgtb.isRunning());
 
         // battery=off, screen=off, background=on
         cur = (clocks.realtime = clocks.uptime = 660) * 1000;
-        bi.updateTimeBasesLocked(false, false, cur, cur);
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, cur, cur);
         assertFalse(bgtb.isRunning());
 
         // battery=off, screen=off, background=off
@@ -157,7 +158,7 @@
 
         // On battery
         curr = 1000 * (clocks.realtime = clocks.uptime = 100);
-        bi.updateTimeBasesLocked(true, false, curr, curr); // on battery
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery
         // App in foreground
         bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
 
@@ -171,7 +172,7 @@
 
         // Off battery
         curr = 1000 * (clocks.realtime = clocks.uptime = 305);
-        bi.updateTimeBasesLocked(false, false, curr, curr); // off battery
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // off battery
 
         // Stop timer
         curr = 1000 * (clocks.realtime = clocks.uptime = 409);
@@ -200,7 +201,7 @@
 
         // On battery
         curr = 1000 * (clocks.realtime = clocks.uptime = 100);
-        bi.updateTimeBasesLocked(true, false, curr, curr); // on battery
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery
 
         // App in foreground
         bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
@@ -215,7 +216,7 @@
 
         // Off battery
         curr = 1000 * (clocks.realtime = clocks.uptime = 305);
-        bi.updateTimeBasesLocked(false, false, curr, curr); // off battery
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // off battery
 
         // Start timer (unoptimized)
         curr = 1000 * (clocks.realtime = clocks.uptime = 1000);
@@ -223,7 +224,7 @@
 
         // On battery
         curr = 1000 * (clocks.realtime = clocks.uptime = 2001);
-        bi.updateTimeBasesLocked(true, false, curr, curr); // on battery
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery
 
         // Move to foreground
         curr = 1000 * (clocks.realtime = clocks.uptime = 3004);
@@ -270,7 +271,7 @@
 
         // On battery
         curr = 1000 * (clocks.realtime = clocks.uptime = 100);
-        bi.updateTimeBasesLocked(true, false, curr, curr); // on battery
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery
         // App in foreground
         bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
 
@@ -280,7 +281,7 @@
 
         // Stop timer
         curr = 1000 * (clocks.realtime = clocks.uptime = 161);
-        bi.noteJobFinishLocked(jobName, UID);
+        bi.noteJobFinishLocked(jobName, UID, 0);
 
         // Move to background
         curr = 1000 * (clocks.realtime = clocks.uptime = 202);
@@ -292,11 +293,11 @@
 
         // Off battery
         curr = 1000 * (clocks.realtime = clocks.uptime = 305);
-        bi.updateTimeBasesLocked(false, false, curr, curr); // off battery
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // off battery
 
         // Stop timer
         curr = 1000 * (clocks.realtime = clocks.uptime = 409);
-        bi.noteJobFinishLocked(jobName, UID);
+        bi.noteJobFinishLocked(jobName, UID, 0);
 
         // Test
         curr = 1000 * (clocks.realtime = clocks.uptime = 657);
@@ -319,7 +320,7 @@
         final String jobName2 = "second_job";
         bi.noteJobStartLocked(jobName2, UID);
         assertEquals(2, bi.getUidStats().get(UID).getJobStats().size());
-        bi.noteJobFinishLocked(jobName2, UID);
+        bi.noteJobFinishLocked(jobName2, UID, 0);
     }
 
     @SmallTest
@@ -331,7 +332,7 @@
 
         // On battery
         curr = 1000 * (clocks.realtime = clocks.uptime = 100);
-        bi.updateTimeBasesLocked(true, false, curr, curr); // on battery
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr); // on battery
         // App in foreground
         bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
 
@@ -353,7 +354,7 @@
 
         // Off battery
         curr = 1000 * (clocks.realtime = clocks.uptime = 305);
-        bi.updateTimeBasesLocked(false, false, curr, curr); // off battery
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr); // off battery
 
         // Stop timer
         curr = 1000 * (clocks.realtime = clocks.uptime = 409);
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsDurationTimerTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsDurationTimerTest.java
index a1b05cd..19dab79 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsDurationTimerTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsDurationTimerTest.java
@@ -134,7 +134,8 @@
                 null, BatteryStats.WAKE_TYPE_PARTIAL, null, timeBase);
         summary.startRunningLocked(3100);
         summary.readSummaryFromParcelLocked(summaryParcel);
-        // The new one shouldn't be running, and therefore 0 for current time
+        // The new one shouldn't be running, and therefore 0 for current time if using
+        // summary parcel
         assertFalse(summary.isRunningLocked());
         assertEquals(0, summary.getCurrentDurationMsLocked(6300));
         // The new one should have the max and total durations that we had when we wrote it
@@ -149,10 +150,10 @@
         // Read full - Should be the same as the summary as far as DurationTimer is concerned.
         final BatteryStatsImpl.DurationTimer full = new BatteryStatsImpl.DurationTimer(clocks,
                 null, BatteryStats.WAKE_TYPE_PARTIAL, null, timeBase, fullParcel);
-        // The new one shouldn't be running, and therefore 0 for current time
+        // The new one shouldn't be running
         assertFalse(full.isRunningLocked());
-        assertEquals(0, full.getCurrentDurationMsLocked(6300));
-        // The new one should have the max and total durations that we had when we wrote it
+        // The new one should have the current, max and total durations that we had when we wrote it
+        assertEquals(1200, full.getCurrentDurationMsLocked(6300));
         assertEquals(1200, full.getMaxDurationMsLocked(6301));
         assertEquals(1200, full.getTotalDurationMsLocked(6302));
 
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java
index ed54f53..461d537 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java
@@ -19,14 +19,30 @@
 import static android.os.BatteryStats.WAKE_TYPE_PARTIAL;
 
 import android.app.ActivityManager;
+import android.os.BatteryManager;
 import android.os.BatteryStats;
 import android.os.WorkSource;
 import android.support.test.filters.SmallTest;
+import android.view.Display;
 
 import junit.framework.TestCase;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * Test various BatteryStatsImpl noteStart methods.
+ *
+ * Build/Install/Run: bit FrameworksCoreTests:com.android.internal.os.BatteryStatsNoteTest
+ *
+ * Alternatively,
+ * Build: m FrameworksCoreTests
+ * Install: adb install -r \
+ *      ${ANDROID_PRODUCT_OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
+ * Run: adb shell am instrument -e class com.android.internal.os.BatteryStatsNoteTest -w \
+ *      com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
  */
 public class BatteryStatsNoteTest extends TestCase{
     private static final int UID = 10500;
@@ -36,7 +52,7 @@
     @SmallTest
     public void testNoteBluetoothScanResultLocked() throws Exception {
         MockBatteryStatsImpl bi = new MockBatteryStatsImpl(new MockClocks());
-        bi.updateTimeBasesLocked(true, true, 0, 0);
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
         bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
 
         bi.noteBluetoothScanResultsFromSourceLocked(WS, 1);
@@ -68,7 +84,7 @@
         int pid = 10;
         String name = "name";
 
-        bi.updateTimeBasesLocked(true, true, 0, 0);
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
         bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
         bi.getUidStatsLocked(UID).noteStartWakeLocked(pid, name, WAKE_TYPE_PARTIAL, clocks.realtime);
 
@@ -84,4 +100,137 @@
         assertEquals(220_000, actualTime);
         assertEquals(120_000, bgTime);
     }
+
+
+    /** Test BatteryStatsImpl.noteUidProcessStateLocked. */
+    @SmallTest
+    public void testNoteUidProcessStateLocked() throws Exception {
+        final MockClocks clocks = new MockClocks();
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+
+        // map of ActivityManager process states and how long to simulate run time in each state
+        Map<Integer, Integer> stateRuntimeMap = new HashMap<Integer, Integer>();
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_TOP, 1111);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE, 1234);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE, 2468);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_TOP_SLEEPING, 7531);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND, 4455);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND, 1337);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_BACKUP, 90210);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_HEAVY_WEIGHT, 911);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_SERVICE, 404);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_RECEIVER, 31459);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_HOME, 1123);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_LAST_ACTIVITY, 5813);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY, 867);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT, 5309);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_CACHED_EMPTY, 42);
+
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        for (Map.Entry<Integer, Integer> entry : stateRuntimeMap.entrySet()) {
+            bi.noteUidProcessStateLocked(UID, entry.getKey());
+            clocks.realtime += entry.getValue();
+            clocks.uptime = clocks.realtime;
+        }
+
+        long actualRunTimeUs;
+        long expectedRunTimeMs;
+        long elapsedTimeUs = clocks.realtime * 1000;
+        BatteryStats.Uid uid = bi.getUidStats().get(UID);
+
+        // compare runtime of process states to the Uid process states they map to
+        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_TOP, elapsedTimeUs,
+                STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_TOP);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+
+
+        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE,
+                elapsedTimeUs, STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(
+                ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+
+
+        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_TOP_SLEEPING,
+                elapsedTimeUs, STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_TOP_SLEEPING);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+
+
+        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND,
+                elapsedTimeUs, STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+
+
+        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND,
+                elapsedTimeUs, STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BACKUP)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_HEAVY_WEIGHT)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_SERVICE)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_RECEIVER);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+
+
+        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_CACHED,
+                elapsedTimeUs, STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_HOME)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_LAST_ACTIVITY)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_CACHED_EMPTY);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+
+        // Special check for foreground service timer
+        actualRunTimeUs = uid.getForegroundServiceTimer().getTotalTimeLocked(elapsedTimeUs,
+                STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+    }
+
+    /** Test BatteryStatsImpl.updateTimeBasesLocked. */
+    @SmallTest
+    public void testUpdateTimeBasesLocked() throws Exception {
+        final MockClocks clocks = new MockClocks(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+
+        bi.updateTimeBasesLocked(false, Display.STATE_OFF, 0, 0);
+        assertFalse(bi.getOnBatteryTimeBase().isRunning());
+        bi.updateTimeBasesLocked(false, Display.STATE_DOZE, 10, 10);
+        assertFalse(bi.getOnBatteryTimeBase().isRunning());
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, 20, 20);
+        assertFalse(bi.getOnBatteryTimeBase().isRunning());
+
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, 30, 30);
+        assertTrue(bi.getOnBatteryTimeBase().isRunning());
+        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        bi.updateTimeBasesLocked(true, Display.STATE_DOZE, 40, 40);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 40, 40);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+    }
+
+    /** Test BatteryStatsImpl.noteScreenStateLocked. */
+    @SmallTest
+    public void testNoteScreenStateLocked() throws Exception {
+        final MockClocks clocks = new MockClocks(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+        bi.noteScreenStateLocked(Display.STATE_ON);
+        bi.noteScreenStateLocked(Display.STATE_DOZE);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(bi.getScreenState(), Display.STATE_DOZE);
+        bi.noteScreenStateLocked(Display.STATE_ON);
+        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(bi.getScreenState(), Display.STATE_ON);
+        bi.noteScreenStateLocked(Display.STATE_OFF);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(bi.getScreenState(), Display.STATE_OFF);
+    }
+
 }
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsSensorTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsSensorTest.java
index 8fd4e31..a751f90 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsSensorTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsSensorTest.java
@@ -18,6 +18,7 @@
 import android.app.ActivityManager;
 import android.os.BatteryStats;
 import android.support.test.filters.SmallTest;
+import android.view.Display;
 
 import junit.framework.TestCase;
 
@@ -74,7 +75,7 @@
 
         // Plugged-in (battery=off, sensor=off)
         curr = 1000 * (clocks.realtime = clocks.uptime = 100);
-        bi.updateTimeBasesLocked(false, false, curr, curr);
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr);
 
 
         // Start sensor (battery=off, sensor=on)
@@ -110,7 +111,7 @@
 
         // Unplugged (battery=on, sensor=off)
         curr = 1000 * (clocks.realtime = clocks.uptime = 100);
-        bi.updateTimeBasesLocked(true, false, curr, curr);
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr);
 
         // Start sensor (battery=on, sensor=on)
         curr = 1000 * (clocks.realtime = clocks.uptime = 200);
@@ -145,7 +146,7 @@
 
         // On battery (battery=on, sensor=off)
         curr = 1000 * (clocks.realtime = clocks.uptime = 100);
-        bi.updateTimeBasesLocked(true, false, curr, curr);
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr);
         bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
 
         // Start sensor (battery=on, sensor=on)
@@ -154,7 +155,7 @@
 
         // Off battery (battery=off, sensor=on)
         curr = 1000 * (clocks.realtime = clocks.uptime = 305);
-        bi.updateTimeBasesLocked(false, false, curr, curr);
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr);
 
         // Stop sensor while off battery (battery=off, sensor=off)
         curr = 1000 * (clocks.realtime = clocks.uptime = 409);
@@ -191,7 +192,7 @@
 
         // Plugged-in (battery=off, sensor=off)
         curr = 1000 * (clocks.realtime = clocks.uptime = 100);
-        bi.updateTimeBasesLocked(false, false, curr, curr);
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr);
 
         // Start sensor (battery=off, sensor=on)
         curr = 1000 * (clocks.realtime = clocks.uptime = 200);
@@ -209,7 +210,7 @@
 
         // Unplug (battery=on, sensor=on)
         curr = 1000 * (clocks.realtime = clocks.uptime = 305);
-        bi.updateTimeBasesLocked(true, false, curr, curr);
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr);
 
         //Test situation
         curr = 1000 * (clocks.realtime = clocks.uptime = 410);
@@ -243,7 +244,7 @@
         long curr = 0; // realtime in us
         // Entire test is on-battery
         curr = 1000 * (clocks.realtime = clocks.uptime = 1000);
-        bi.updateTimeBasesLocked(true, false, curr, curr);
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr);
 
         // See below for a diagram of events.
 
@@ -488,7 +489,7 @@
         bi.noteStartSensorLocked(UID, SENSOR_ID);
 
         clocks.realtime += 111;
-        clocks.uptime += 1111;
+        clocks.uptime += 111;
 
         // Timebase and timer was on so times have increased.
         assertEquals(111_000, timer.getTotalTimeLocked(1000*clocks.realtime, which));
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsUserLifecycleTests.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsUserLifecycleTests.java
new file mode 100644
index 0000000..450473d
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsUserLifecycleTests.java
@@ -0,0 +1,167 @@
+/*
+ * 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.internal.os;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeTrue;
+
+import android.app.ActivityManager;
+import android.app.IActivityManager;
+import android.app.IStopUserCallback;
+import android.content.Context;
+import android.content.pm.UserInfo;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.LargeTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.test.uiautomator.UiDevice;
+import android.util.ArraySet;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+@LargeTest
+@RunWith(AndroidJUnit4.class)
+public class BatteryStatsUserLifecycleTests {
+
+    private static final long POLL_INTERVAL_MS = 500;
+    private static final long USER_REMOVE_TIMEOUT_MS = 5_000;
+    private static final long STOP_USER_TIMEOUT_MS = 10_000;
+    private static final long BATTERYSTATS_POLLING_TIMEOUT_MS = 5_000;
+
+    private static final String CPU_DATA_TAG = "cpu";
+    private static final String CPU_FREQ_DATA_TAG = "ctf";
+
+    private int mTestUserId = UserHandle.USER_NULL;
+    private Context mContext;
+    private UserManager mUm;
+    private IActivityManager mIam;
+
+    @BeforeClass
+    public static void setUpOnce() {
+        assumeTrue(UserManager.getMaxSupportedUsers() > 1);
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        mContext = InstrumentationRegistry.getTargetContext();
+        mUm = UserManager.get(mContext);
+        mIam = ActivityManager.getService();
+        final UserInfo user = mUm.createUser("Test_user_" + System.currentTimeMillis() / 1000, 0);
+        assertNotNull("Unable to create test user", user);
+        mTestUserId = user.id;
+        batteryOnScreenOff();
+    }
+
+    @Test
+    public void testNoCpuDataForRemovedUser() throws Exception {
+        mIam.startUserInBackground(mTestUserId);
+        waitUntilTrue("No uids for started user " + mTestUserId,
+                () -> getNumberOfUidsInBatteryStats() > 0, BATTERYSTATS_POLLING_TIMEOUT_MS);
+
+        CountDownLatch stopUserLatch = new CountDownLatch(1);
+        mIam.stopUser(mTestUserId, true, new IStopUserCallback.Stub() {
+            @Override
+            public void userStopped(int userId) throws RemoteException {
+                stopUserLatch.countDown();
+            }
+
+            @Override
+            public void userStopAborted(int userId) throws RemoteException {
+            }
+        });
+        assertTrue("User " + mTestUserId + " could not be stopped",
+                stopUserLatch.await(STOP_USER_TIMEOUT_MS, TimeUnit.MILLISECONDS));
+
+        mUm.removeUser(mTestUserId);
+        waitUntilTrue("Unable to remove user " + mTestUserId, () -> {
+            for (UserInfo user : mUm.getUsers()) {
+                if (user.id == mTestUserId) {
+                    return false;
+                }
+            }
+            return true;
+        }, USER_REMOVE_TIMEOUT_MS);
+        waitUntilTrue("Uids still found for removed user " + mTestUserId,
+                () -> getNumberOfUidsInBatteryStats() == 0, BATTERYSTATS_POLLING_TIMEOUT_MS);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        batteryOffScreenOn();
+        if (mTestUserId != UserHandle.USER_NULL) {
+            mUm.removeUser(mTestUserId);
+        }
+    }
+
+    private int getNumberOfUidsInBatteryStats() throws Exception {
+        ArraySet<Integer> uids = new ArraySet<>();
+        final String dumpsys = executeShellCommand("dumpsys batterystats --checkin");
+        for (String line : dumpsys.split("\n")) {
+            final String[] parts = line.trim().split(",");
+            if (parts.length < 5 ||
+                    (!parts[3].equals(CPU_DATA_TAG) && !parts[3].equals(CPU_FREQ_DATA_TAG))) {
+                continue;
+            }
+            try {
+                final int uid = Integer.parseInt(parts[1]);
+                if (UserHandle.getUserId(uid) == mTestUserId) {
+                    uids.add(uid);
+                }
+            } catch (NumberFormatException nexc) {
+                // ignore
+            }
+        }
+        return uids.size();
+    }
+
+    protected void batteryOnScreenOff() throws Exception {
+        executeShellCommand("dumpsys battery unplug");
+        executeShellCommand("dumpsys batterystats enable pretend-screen-off");
+    }
+
+    protected void batteryOffScreenOn() throws Exception {
+        executeShellCommand("dumpsys battery reset");
+        executeShellCommand("dumpsys batterystats disable pretend-screen-off");
+    }
+
+    private String executeShellCommand(String cmd) throws Exception {
+        return UiDevice.getInstance(
+                InstrumentationRegistry.getInstrumentation()).executeShellCommand(cmd);
+    }
+
+    private void waitUntilTrue(String message, Condition condition, long timeout) throws Exception {
+        final long deadLine = System.currentTimeMillis() + timeout;
+        while (System.currentTimeMillis() <= deadLine && !condition.isTrue()) {
+            Thread.sleep(POLL_INTERVAL_MS);
+        }
+        assertTrue(message, condition.isTrue());
+    }
+
+    private interface Condition {
+        boolean isTrue() throws Exception;
+    }
+}
diff --git a/core/tests/coretests/src/com/android/internal/os/KernelUidCpuFreqTimeReaderTest.java b/core/tests/coretests/src/com/android/internal/os/KernelUidCpuFreqTimeReaderTest.java
index 620acae..7ab9569 100644
--- a/core/tests/coretests/src/com/android/internal/os/KernelUidCpuFreqTimeReaderTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/KernelUidCpuFreqTimeReaderTest.java
@@ -98,6 +98,14 @@
         }
         verifyNoMoreInteractions(mCallback);
 
+        // Verify that there won't be a callback if the proc file values didn't change.
+        Mockito.reset(mCallback, mBufferedReader);
+        when(mBufferedReader.readLine())
+                .thenReturn(getFreqsLine(freqs), getUidTimesLines(uids, newTimes1));
+        mKernelUidCpuFreqTimeReader.readDelta(mBufferedReader, mCallback);
+        verify(mCallback).onCpuFreqs(freqs);
+        verifyNoMoreInteractions(mCallback);
+
         // Verify that calling with a null callback doesn't result in any crashes
         Mockito.reset(mCallback, mBufferedReader);
         final long[][] newTimes2 = new long[uids.length][freqs.length];
@@ -130,6 +138,91 @@
         verifyNoMoreInteractions(mCallback);
     }
 
+    @Test
+    public void testReadDelta_malformedData() throws Exception {
+        final long[] freqs = {1, 12, 123, 1234, 12345, 123456};
+        final int[] uids = {1, 22, 333, 4444, 5555};
+        final long[][] times = new long[uids.length][freqs.length];
+        for (int i = 0; i < uids.length; ++i) {
+            for (int j = 0; j < freqs.length; ++j) {
+                times[i][j] = uids[i] * freqs[j] * 10;
+            }
+        }
+        when(mBufferedReader.readLine())
+                .thenReturn(getFreqsLine(freqs), getUidTimesLines(uids, times));
+        mKernelUidCpuFreqTimeReader.readDelta(mBufferedReader, mCallback);
+        verify(mCallback).onCpuFreqs(freqs);
+        for (int i = 0; i < uids.length; ++i) {
+            verify(mCallback).onUidCpuFreqTime(uids[i], times[i]);
+        }
+        verifyNoMoreInteractions(mCallback);
+
+        // Verify that there is no callback if any value in the proc file is -ve.
+        Mockito.reset(mCallback, mBufferedReader);
+        final long[][] newTimes1 = new long[uids.length][freqs.length];
+        for (int i = 0; i < uids.length; ++i) {
+            for (int j = 0; j < freqs.length; ++j) {
+                newTimes1[i][j] = (times[i][j] + uids[i] + freqs[j]) * 10;
+            }
+        }
+        newTimes1[uids.length - 1][freqs.length - 1] *= -1;
+        when(mBufferedReader.readLine())
+                .thenReturn(getFreqsLine(freqs), getUidTimesLines(uids, newTimes1));
+        mKernelUidCpuFreqTimeReader.readDelta(mBufferedReader, mCallback);
+        verify(mCallback).onCpuFreqs(freqs);
+        for (int i = 0; i < uids.length; ++i) {
+            if (i == uids.length - 1) {
+                continue;
+            }
+            verify(mCallback).onUidCpuFreqTime(uids[i], subtract(newTimes1[i], times[i]));
+        }
+        verifyNoMoreInteractions(mCallback);
+
+        // Verify that the internal state was not modified when the proc file had -ve value.
+        Mockito.reset(mCallback, mBufferedReader);
+        for (int i = 0; i < freqs.length; ++i) {
+            newTimes1[uids.length - 1][i] = times[uids.length - 1][i];
+        }
+        when(mBufferedReader.readLine())
+                .thenReturn(getFreqsLine(freqs), getUidTimesLines(uids, newTimes1));
+        mKernelUidCpuFreqTimeReader.readDelta(mBufferedReader, mCallback);
+        verify(mCallback).onCpuFreqs(freqs);
+        verifyNoMoreInteractions(mCallback);
+
+        // Verify that there is no callback if the values in the proc file are decreased.
+        Mockito.reset(mCallback, mBufferedReader);
+        final long[][] newTimes2 = new long[uids.length][freqs.length];
+        for (int i = 0; i < uids.length; ++i) {
+            for (int j = 0; j < freqs.length; ++j) {
+                newTimes2[i][j] = (newTimes1[i][j] + uids[i] * freqs[j]) * 10;
+            }
+        }
+        newTimes2[uids.length - 1][freqs.length - 1] =
+                newTimes1[uids.length - 1][freqs.length - 1] - 222;
+        when(mBufferedReader.readLine())
+                .thenReturn(getFreqsLine(freqs), getUidTimesLines(uids, newTimes2));
+        mKernelUidCpuFreqTimeReader.readDelta(mBufferedReader, mCallback);
+        verify(mCallback).onCpuFreqs(freqs);
+        for (int i = 0; i < uids.length; ++i) {
+            if (i == uids.length - 1) {
+                continue;
+            }
+            verify(mCallback).onUidCpuFreqTime(uids[i], subtract(newTimes2[i], newTimes1[i]));
+        }
+        verifyNoMoreInteractions(mCallback);
+
+        // Verify that the internal state was not modified when the proc file had decreasing values.
+        Mockito.reset(mCallback, mBufferedReader);
+        for (int i = 0; i < freqs.length; ++i) {
+            newTimes2[uids.length - 1][i] = newTimes1[uids.length - 1][i];
+        }
+        when(mBufferedReader.readLine())
+                .thenReturn(getFreqsLine(freqs), getUidTimesLines(uids, newTimes2));
+        mKernelUidCpuFreqTimeReader.readDelta(mBufferedReader, mCallback);
+        verify(mCallback).onCpuFreqs(freqs);
+        verifyNoMoreInteractions(mCallback);
+    }
+
     private long[] subtract(long[] a1, long[] a2) {
         long[] val = new long[a1.length];
         for (int i = 0; i < val.length; ++i) {
diff --git a/core/tests/coretests/src/com/android/internal/os/LongSamplingCounterArrayTest.java b/core/tests/coretests/src/com/android/internal/os/LongSamplingCounterArrayTest.java
index 4a23f40..27aec56 100644
--- a/core/tests/coretests/src/com/android/internal/os/LongSamplingCounterArrayTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/LongSamplingCounterArrayTest.java
@@ -114,7 +114,7 @@
     public void testOnTimeStarted() {
         initializeCounterArrayWithDefaultValues();
         mCounterArray.onTimeStarted(0, 0, 0);
-        assertArrayEquals(PLUGGED_COUNTS, mCounterArray.mCounts, "Unexpected counts");
+        assertArrayEquals(COUNTS, mCounterArray.mCounts, "Unexpected counts");
         assertArrayEquals(LOADED_COUNTS, mCounterArray.mLoadedCounts, "Unexpected loadedCounts");
         assertArrayEquals(PLUGGED_COUNTS, mCounterArray.mPluggedCounts, "Unexpected pluggedCounts");
         assertArrayEquals(PLUGGED_COUNTS, mCounterArray.mUnpluggedCounts,
@@ -150,6 +150,7 @@
     @Test
     public void testAddCountLocked() {
         final long[] deltas = {123, 234, 345, 456};
+        when(mTimeBase.isRunning()).thenReturn(true);
         mCounterArray.addCountLocked(deltas);
         assertArrayEquals(deltas, mCounterArray.mCounts, "Unexpected counts");
         assertArrayEquals(null, mCounterArray.mLoadedCounts, "Unexpected loadedCounts");
diff --git a/core/tests/coretests/src/com/android/internal/os/MockBatteryStatsImpl.java b/core/tests/coretests/src/com/android/internal/os/MockBatteryStatsImpl.java
index a123fce..ae42f78 100644
--- a/core/tests/coretests/src/com/android/internal/os/MockBatteryStatsImpl.java
+++ b/core/tests/coretests/src/com/android/internal/os/MockBatteryStatsImpl.java
@@ -26,6 +26,10 @@
     MockBatteryStatsImpl(Clocks clocks) {
         super(clocks);
         this.clocks = mClocks;
+        mScreenOnTimer = new BatteryStatsImpl.StopwatchTimer(clocks, null, -1, null,
+                mOnBatteryTimeBase);
+        mScreenDozeTimer = new BatteryStatsImpl.StopwatchTimer(clocks, null, -1, null,
+                mOnBatteryTimeBase);
         mBluetoothScanTimer = new StopwatchTimer(mClocks, null, -14, null, mOnBatteryTimeBase);
     }
 
@@ -37,6 +41,14 @@
         return mOnBatteryTimeBase;
     }
 
+    public TimeBase getOnBatteryScreenOffTimeBase() {
+        return mOnBatteryScreenOffTimeBase;
+    }
+
+    public int getScreenState() {
+        return mScreenState;
+    }
+
     public boolean isOnBattery() {
         return mForceOnBattery ? true : super.isOnBattery();
     }
diff --git a/core/tests/coretests/src/com/android/internal/widget/MessagingLinearLayoutTest.java b/core/tests/coretests/src/com/android/internal/widget/MessagingLinearLayoutTest.java
index 20fd4d3..dfe8511 100644
--- a/core/tests/coretests/src/com/android/internal/widget/MessagingLinearLayoutTest.java
+++ b/core/tests/coretests/src/com/android/internal/widget/MessagingLinearLayoutTest.java
@@ -22,12 +22,12 @@
 
 import android.content.Context;
 import android.support.test.InstrumentationRegistry;
-import android.support.test.espresso.core.deps.guava.base.Function;
 import android.support.test.filters.SmallTest;
 import android.view.LayoutInflater;
 import android.view.View.MeasureSpec;
 
 import com.android.frameworks.coretests.R;
+import com.google.common.base.Function;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/core/tests/utiltests/Android.mk b/core/tests/utiltests/Android.mk
index f2e02e3..233d070 100644
--- a/core/tests/utiltests/Android.mk
+++ b/core/tests/utiltests/Android.mk
@@ -18,7 +18,6 @@
     android-support-test \
     frameworks-base-testutils \
     mockito-target-minus-junit4 \
-    legacy-android-tests
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
diff --git a/core/tests/utiltests/AndroidManifest.xml b/core/tests/utiltests/AndroidManifest.xml
index d6384e7..8db81ca 100644
--- a/core/tests/utiltests/AndroidManifest.xml
+++ b/core/tests/utiltests/AndroidManifest.xml
@@ -30,7 +30,6 @@
 
     <uses-permission android:name="android.permission.MANAGE_NETWORK_POLICY" />
     <uses-permission android:name="android.permission.READ_NETWORK_USAGE_HISTORY" />
-    <uses-permission android:name="android.permission.MODIFY_NETWORK_ACCOUNTING" />
     <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.MANAGE_USERS" />
diff --git a/core/tests/utiltests/res/drawable/image.jpg b/core/tests/utiltests/res/drawable/image.jpg
new file mode 100644
index 0000000..bef1fb1
--- /dev/null
+++ b/core/tests/utiltests/res/drawable/image.jpg
Binary files differ
diff --git a/core/tests/utiltests/res/drawable/png.png b/core/tests/utiltests/res/drawable/png.png
new file mode 100644
index 0000000..b13c865
--- /dev/null
+++ b/core/tests/utiltests/res/drawable/png.png
Binary files differ
diff --git a/core/tests/utiltests/src/android/util/MetadataReaderTest.java b/core/tests/utiltests/src/android/util/MetadataReaderTest.java
new file mode 100644
index 0000000..193fb50
--- /dev/null
+++ b/core/tests/utiltests/src/android/util/MetadataReaderTest.java
@@ -0,0 +1,115 @@
+/*
+ * 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.util;
+
+import android.media.ExifInterface;
+import android.os.Bundle;
+import android.provider.DocumentsContract;
+import android.provider.MetadataReader;
+
+import libcore.io.IoUtils;
+
+import junit.framework.TestCase;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class MetadataReaderTest extends TestCase {
+
+    private InputStream mInputStream;
+    private Bundle mData;
+
+    @Before
+    protected void setUp() throws Exception {
+        mInputStream = getClass().getClassLoader().getResourceAsStream("res/drawable/image.jpg");
+        mData = new Bundle();
+    }
+
+    @After
+    protected void tearDown() throws Exception {
+        IoUtils.closeQuietly(mInputStream);
+    }
+
+    @Test
+    public void testGetMetadata() throws IOException {
+        MetadataReader.getMetadata(mData, mInputStream, "image/jpg", null);
+        Bundle exif = mData.getBundle(DocumentsContract.METADATA_EXIF);
+        assertEquals("3036", String.valueOf(exif.getInt(ExifInterface.TAG_IMAGE_WIDTH)));
+        assertEquals("4048", String.valueOf(exif.getInt(ExifInterface.TAG_IMAGE_LENGTH)));
+        assertEquals("2017:07:17 19:19:28", exif.getString(ExifInterface.TAG_DATETIME));
+        assertEquals(0.0, exif.getDouble(ExifInterface.TAG_GPS_LATITUDE));
+        assertEquals(0.0, exif.getDouble(ExifInterface.TAG_GPS_LONGITUDE));
+        assertEquals("Google", exif.getString(ExifInterface.TAG_MAKE));
+        assertEquals("Pixel", exif.getString(ExifInterface.TAG_MODEL));
+        assertEquals(mData.getStringArray(DocumentsContract.METADATA_TYPES)[0],
+                DocumentsContract.METADATA_EXIF);
+    }
+
+    @Test
+    public void testGetMetadata_JpegOneTag() throws IOException {
+        String[] tags = {ExifInterface.TAG_MAKE};
+        MetadataReader.getMetadata(mData, mInputStream, "image/jpg", tags);
+        assertEquals("Google",
+                mData.getBundle(DocumentsContract.METADATA_EXIF).getString(tags[0]));
+    }
+
+    @Test
+    public void testGetMetadata_JpegNoResults() throws IOException {
+        String[] tags = {ExifInterface.TAG_SPECTRAL_SENSITIVITY};
+        assertEquals(0, mData.size());
+        MetadataReader.getMetadata(mData, mInputStream, "image/jpg", tags);
+        assertEquals(1, mData.size());
+        assertEquals(mData.getStringArray(DocumentsContract.METADATA_TYPES).length, 0);
+    }
+
+    @Test
+    public void testGetMetadata_BadFile() {
+        try {
+            InputStream stream = new FileInputStream("badString");
+            MetadataReader.getMetadata(mData, stream, "image/jpg", null);
+        } catch (IOException e) {
+            assertEquals(FileNotFoundException.class, e.getClass());
+        }
+    }
+
+    @Test
+    public void testGetMetadata_UnsupportedMimeType() throws IOException {
+        MetadataReader.getMetadata(mData, mInputStream, "no/metadata", null);
+        assertEquals(1, mData.size());
+    }
+
+    @Test
+    public void testGetMetadata_NoTags() throws IOException {
+        MetadataReader.getMetadata(mData, mInputStream, "image/jpg", new String[0]);
+        assertEquals(1, mData.size());
+    }
+
+    @Test
+    public void testGetMetadata_Png() throws IOException {
+        InputStream pngStream = getClass().getClassLoader().getResourceAsStream("res/drawable/png.png");
+        MetadataReader.getMetadata(mData, pngStream, "image/png", null);
+        assertEquals(1, mData.size());
+
+    }
+
+}
diff --git a/core/tests/utiltests/src/android/util/RemoteIntArray.java b/core/tests/utiltests/src/android/util/RemoteIntArray.java
index 7dc3400..11d0888 100644
--- a/core/tests/utiltests/src/android/util/RemoteIntArray.java
+++ b/core/tests/utiltests/src/android/util/RemoteIntArray.java
@@ -32,7 +32,7 @@
 
 final class RemoteIntArray implements ServiceConnection, Closeable {
     private static final long BIND_REMOTE_SERVICE_TIMEOUT =
-            ("eng".equals(Build.TYPE)) ? 120000 : 10000;
+            Build.IS_ENG ? 120000 : 10000;
 
     private final Object mLock = new Object();
 
diff --git a/core/tests/utiltests/src/com/android/internal/util/ObjectUtilsTest.java b/core/tests/utiltests/src/com/android/internal/util/ObjectUtilsTest.java
new file mode 100644
index 0000000..443183e
--- /dev/null
+++ b/core/tests/utiltests/src/com/android/internal/util/ObjectUtilsTest.java
@@ -0,0 +1,33 @@
+/*
+ * 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.internal.util;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+@SmallTest
+public class ObjectUtilsTest extends AndroidTestCase {
+    public void testCompare() {
+        assertEquals(0, ObjectUtils.compare(null, null));
+        assertEquals(1, ObjectUtils.compare("a", null));
+        assertEquals(-1, ObjectUtils.compare(null, "a"));
+
+        assertEquals(0, ObjectUtils.compare("a", "a"));
+
+        assertEquals(-1, ObjectUtils.compare("a", "b"));
+        assertEquals(1, ObjectUtils.compare("b", "a"));
+    }
+}
diff --git a/data/etc/framework-sysconfig.xml b/data/etc/framework-sysconfig.xml
index 3a81c13..ae6a7f6 100644
--- a/data/etc/framework-sysconfig.xml
+++ b/data/etc/framework-sysconfig.xml
@@ -22,6 +22,8 @@
     <allow-implicit-broadcast action="android.intent.action.SIM_STATE_CHANGED" />
     <allow-implicit-broadcast action="android.intent.action.PACKAGE_CHANGED" />
     <allow-implicit-broadcast action="android.intent.action.MEDIA_SCANNER_SCAN_FILE" />
+    <allow-implicit-broadcast action="android.media.action.OPEN_AUDIO_EFFECT_CONTROL_SESSION" />
+    <allow-implicit-broadcast action="android.media.action.CLOSE_AUDIO_EFFECT_CONTROL_SESSION" />
 
     <!-- Whitelist of what components are permitted as backup data transports.  The
          'service' attribute here is a flattened ComponentName string. -->
diff --git a/data/etc/platform.xml b/data/etc/platform.xml
index 19d2a31..26741fe 100644
--- a/data/etc/platform.xml
+++ b/data/etc/platform.xml
@@ -93,7 +93,7 @@
     </permission>
 
     <!-- Group that can modify how network statistics are accounted -->
-    <permission name="android.permission.MODIFY_NETWORK_ACCOUNTING">
+    <permission name="android.permission.UPDATE_DEVICE_STATS">
         <group gid="net_bw_acct" />
     </permission>
 
@@ -107,7 +107,7 @@
         <group gid="audio" />
     </permission>
 
-    <permission name="android.permission.ACCESS_FM_RADIO" >
+    <permission name="android.permission.ACCESS_BROADCAST_RADIO" >
         <!-- /dev/fm is gid media, not audio -->
         <group gid="media" />
     </permission>
@@ -163,6 +163,8 @@
     <!-- This is a list of all the libraries available for application
          code to link against. -->
 
+    <library name="android.test.mock"
+            file="/system/framework/android.test.mock.jar" />
     <library name="android.test.runner"
             file="/system/framework/android.test.runner.jar" />
     <library name="javax.obex"
diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml
index 92b6aa3..6a3a973 100644
--- a/data/etc/privapp-permissions-platform.xml
+++ b/data/etc/privapp-permissions-platform.xml
@@ -64,7 +64,7 @@
         <permission name="android.permission.WRITE_MEDIA_STORAGE"/>
     </privapp-permissions>
 
-    <privapp-permissions package="com.android.launcher">
+    <privapp-permissions package="com.android.launcher3">
         <permission name="android.permission.BIND_APPWIDGET"/>
         <permission name="android.permission.GET_ACCOUNTS_PRIVILEGED"/>
     </privapp-permissions>
@@ -147,6 +147,7 @@
         <permission name="android.permission.MANAGE_USERS"/>
         <permission name="android.permission.MODIFY_PHONE_STATE"/>
         <permission name="android.permission.PERFORM_CDMA_PROVISIONING"/>
+        <permission name="android.permission.READ_NETWORK_USAGE_HISTORY"/>
         <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
         <permission name="android.permission.READ_SEARCH_INDEXABLES"/>
         <permission name="android.permission.REBOOT"/>
@@ -185,7 +186,6 @@
         <permission name="android.permission.ACCESS_CACHE_FILESYSTEM"/>
         <permission name="android.permission.CLEAR_APP_CACHE"/>
         <permission name="android.permission.CONNECTIVITY_INTERNAL"/>
-        <permission name="android.permission.MODIFY_NETWORK_ACCOUNTING"/>
         <permission name="android.permission.UPDATE_APP_OPS_STATS"/>
         <permission name="android.permission.UPDATE_DEVICE_STATS"/>
     </privapp-permissions>
@@ -265,6 +265,7 @@
         <permission name="android.permission.DELETE_CACHE_FILES"/>
         <permission name="android.permission.DELETE_PACKAGES"/>
         <permission name="android.permission.DUMP"/>
+        <permission name="android.permission.ACTIVITY_EMBEDDING"/>
         <permission name="android.permission.FORCE_STOP_PACKAGES"/>
         <permission name="android.permission.GET_APP_OPS_STATS"/>
         <permission name="android.permission.INSTALL_LOCATION_PROVIDER"/>
@@ -279,6 +280,7 @@
         <permission name="android.permission.MOUNT_FORMAT_FILESYSTEMS"/>
         <permission name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
         <permission name="android.permission.MOVE_PACKAGE"/>
+        <permission name="android.permission.PACKAGE_USAGE_STATS" />
         <permission name="android.permission.READ_FRAME_BUFFER"/>
         <permission name="android.permission.REAL_GET_TASKS"/>
         <permission name="android.permission.REGISTER_CALL_PROVIDER"/>
@@ -347,11 +349,14 @@
     </privapp-permissions>
 
     <privapp-permissions package="com.android.tv">
-        <permission name="android.permission.DVB_DEVICE" />
-        <permission name="android.permission.GLOBAL_SEARCH" />
-        <permission name="android.permission.MODIFY_PARENTAL_CONTROLS" />
-        <permission name="com.android.providers.tv.permission.ACCESS_ALL_EPG_DATA" />
-        <permission name="com.android.providers.tv.permission.ACCESS_WATCHED_PROGRAMS" />
+        <permission name="android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE"/>
+        <permission name="android.permission.DVB_DEVICE"/>
+        <permission name="android.permission.GLOBAL_SEARCH"/>
+        <permission name="android.permission.HDMI_CEC"/>
+        <permission name="android.permission.MODIFY_PARENTAL_CONTROLS"/>
+        <permission name="android.permission.READ_CONTENT_RATING_SYSTEMS"/>
+        <permission name="com.android.providers.tv.permission.ACCESS_ALL_EPG_DATA"/>
+        <permission name="com.android.providers.tv.permission.ACCESS_WATCHED_PROGRAMS"/>
     </privapp-permissions>
 
     <privapp-permissions package="com.android.vpndialogs">
diff --git a/data/sounds/AudioPackageGo.mk b/data/sounds/AudioPackageGo.mk
new file mode 100644
index 0000000..ae742df
--- /dev/null
+++ b/data/sounds/AudioPackageGo.mk
@@ -0,0 +1,48 @@
+# Copyright 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.
+
+LOCAL_PATH := frameworks/base/data/sounds
+
+# Ring_Classic_02 : Bell Phone
+# Ring_Synth_02 : Chimey Phone
+# Ring_Digital_02 : Digital Phone
+# Ring_Synth_04 : Flutey Phone
+# Alarm_Beep_03 : Beep Beep Beep
+PRODUCT_COPY_FILES += \
+    $(LOCAL_PATH)/notifications/ogg/Alya.ogg:system/media/audio/notifications/Alya.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Argon.ogg:system/media/audio/notifications/Argon.ogg \
+    $(LOCAL_PATH)/notifications/Canopus.ogg:system/media/audio/notifications/Canopus.ogg \
+    $(LOCAL_PATH)/notifications/Deneb.ogg:system/media/audio/notifications/Deneb.ogg \
+    $(LOCAL_PATH)/newwavelabs/Highwire.ogg:system/media/audio/notifications/Highwire.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Iridium.ogg:system/media/audio/notifications/Iridium.ogg \
+    $(LOCAL_PATH)/notifications/pixiedust.ogg:system/media/audio/notifications/pixiedust.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Talitha.ogg:system/media/audio/notifications/Talitha.ogg \
+    $(LOCAL_PATH)/Ring_Classic_02.ogg:system/media/audio/ringtones/Ring_Classic_02.ogg \
+    $(LOCAL_PATH)/Ring_Synth_02.ogg:system/media/audio/ringtones/Ring_Synth_02.ogg \
+    $(LOCAL_PATH)/ringtones/ogg/Cygnus.ogg:system/media/audio/ringtones/Cygnus.ogg \
+    $(LOCAL_PATH)/Ring_Digital_02.ogg:system/media/audio/ringtones/Ring_Digital_02.ogg \
+    $(LOCAL_PATH)/Ring_Synth_04.ogg:system/media/audio/ringtones/Ring_Synth_04.ogg \
+    $(LOCAL_PATH)/ringtones/ogg/Kuma.ogg:system/media/audio/ringtones/Kuma.ogg \
+    $(LOCAL_PATH)/ringtones/ogg/Themos.ogg:system/media/audio/ringtones/Themos.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Argon.ogg:system/media/audio/alarms/Argon.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Platinum.ogg:system/media/audio/alarms/Platinum.ogg \
+    $(LOCAL_PATH)/Alarm_Beep_03.ogg:system/media/audio/alarms/Alarm_Beep_03.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Helium.ogg:system/media/audio/alarms/Helium.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Oxygen.ogg:system/media/audio/alarms/Oxygen.ogg \
+    $(LOCAL_PATH)/effects/ogg/Effect_Tick.ogg:system/media/audio/ui/Effect_Tick.ogg \
+    $(LOCAL_PATH)/effects/ogg/KeypressStandard.ogg:system/media/audio/ui/KeypressStandard.ogg \
+    $(LOCAL_PATH)/effects/ogg/KeypressSpacebar.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
+    $(LOCAL_PATH)/effects/ogg/KeypressDelete.ogg:system/media/audio/ui/KeypressDelete.ogg \
+    $(LOCAL_PATH)/effects/ogg/KeypressInvalid.ogg:system/media/audio/ui/KeypressInvalid.ogg \
+    $(LOCAL_PATH)/effects/ogg/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \
diff --git a/data/sounds/AudioTv.mk b/data/sounds/AudioTv.mk
new file mode 100644
index 0000000..ee37cb9
--- /dev/null
+++ b/data/sounds/AudioTv.mk
@@ -0,0 +1,125 @@
+# Copyright 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.
+
+LOCAL_PATH := frameworks/base/data/sounds
+
+PRODUCT_COPY_FILES += \
+    $(LOCAL_PATH)/Alarm_Beep_01.ogg:system/media/audio/alarms/Alarm_Beep_01.ogg \
+    $(LOCAL_PATH)/Alarm_Beep_02.ogg:system/media/audio/alarms/Alarm_Beep_02.ogg \
+    $(LOCAL_PATH)/Alarm_Beep_03.ogg:system/media/audio/alarms/Alarm_Beep_03.ogg \
+    $(LOCAL_PATH)/Alarm_Buzzer.ogg:system/media/audio/alarms/Alarm_Buzzer.ogg \
+    $(LOCAL_PATH)/Alarm_Classic.ogg:system/media/audio/alarms/Alarm_Classic.ogg \
+    $(LOCAL_PATH)/Alarm_Rooster_02.ogg:system/media/audio/alarms/Alarm_Rooster_02.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Argon.ogg:system/media/audio/alarms/Argon.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Barium.ogg:system/media/audio/alarms/Barium.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Carbon.ogg:system/media/audio/alarms/Carbon.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Cesium.ogg:system/media/audio/alarms/Cesium.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Fermium.ogg:system/media/audio/alarms/Fermium.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Hassium.ogg:system/media/audio/alarms/Hassium.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Helium.ogg:system/media/audio/alarms/Helium.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Krypton.ogg:system/media/audio/alarms/Krypton.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Neon.ogg:system/media/audio/alarms/Neon.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Neptunium.ogg:system/media/audio/alarms/Neptunium.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Nobelium.ogg:system/media/audio/alarms/Nobelium.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Osmium.ogg:system/media/audio/alarms/Osmium.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Oxygen.ogg:system/media/audio/alarms/Oxygen.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Platinum.ogg:system/media/audio/alarms/Platinum.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Plutonium.ogg:system/media/audio/alarms/Plutonium.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Promethium.ogg:system/media/audio/alarms/Promethium.ogg \
+    $(LOCAL_PATH)/alarms/ogg/Scandium.ogg:system/media/audio/alarms/Scandium.ogg \
+    $(LOCAL_PATH)/effects/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg \
+    $(LOCAL_PATH)/effects/ogg/camera_focus.ogg:system/media/audio/ui/camera_focus.ogg \
+    $(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \
+    $(LOCAL_PATH)/effects/ogg/Effect_Tick_48k.ogg:system/media/audio/ui/Effect_Tick.ogg \
+    $(LOCAL_PATH)/effects/ogg/KeypressDelete_120_48k.ogg:system/media/audio/ui/KeypressDelete.ogg \
+    $(LOCAL_PATH)/effects/ogg/KeypressInvalid_120_48k.ogg:system/media/audio/ui/KeypressInvalid.ogg \
+    $(LOCAL_PATH)/effects/ogg/KeypressReturn_120_48k.ogg:system/media/audio/ui/KeypressReturn.ogg \
+    $(LOCAL_PATH)/effects/ogg/KeypressSpacebar_120_48k.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
+    $(LOCAL_PATH)/effects/ogg/KeypressStandard_120_48k.ogg:system/media/audio/ui/KeypressStandard.ogg \
+    $(LOCAL_PATH)/effects/ogg/Lock.ogg:system/media/audio/ui/Lock.ogg \
+    $(LOCAL_PATH)/effects/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \
+    $(LOCAL_PATH)/effects/ogg/Trusted_48k.ogg:system/media/audio/ui/Trusted.ogg \
+    $(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg \
+    $(LOCAL_PATH)/effects/ogg/Unlock.ogg:system/media/audio/ui/Unlock.ogg \
+    $(LOCAL_PATH)/effects/ogg/VideoRecord_48k.ogg:system/media/audio/ui/VideoRecord.ogg \
+    $(LOCAL_PATH)/effects/ogg/VideoStop_48k.ogg:system/media/audio/ui/VideoStop.ogg \
+    $(LOCAL_PATH)/effects/ogg/WirelessChargingStarted.ogg:system/media/audio/ui/WirelessChargingStarted.ogg \
+    $(LOCAL_PATH)/F1_MissedCall.ogg:system/media/audio/notifications/F1_MissedCall.ogg \
+    $(LOCAL_PATH)/F1_New_MMS.ogg:system/media/audio/notifications/F1_New_MMS.ogg \
+    $(LOCAL_PATH)/F1_New_SMS.ogg:system/media/audio/notifications/F1_New_SMS.ogg \
+    $(LOCAL_PATH)/notifications/Aldebaran.ogg:system/media/audio/notifications/Aldebaran.ogg \
+    $(LOCAL_PATH)/notifications/Altair.ogg:system/media/audio/notifications/Altair.ogg \
+    $(LOCAL_PATH)/notifications/Antares.ogg:system/media/audio/notifications/Antares.ogg \
+    $(LOCAL_PATH)/notifications/arcturus.ogg:system/media/audio/notifications/arcturus.ogg \
+    $(LOCAL_PATH)/notifications/Beat_Box_Android.ogg:system/media/audio/notifications/Beat_Box_Android.ogg \
+    $(LOCAL_PATH)/notifications/Betelgeuse.ogg:system/media/audio/notifications/Betelgeuse.ogg \
+    $(LOCAL_PATH)/notifications/Canopus.ogg:system/media/audio/notifications/Canopus.ogg \
+    $(LOCAL_PATH)/notifications/Castor.ogg:system/media/audio/notifications/Castor.ogg \
+    $(LOCAL_PATH)/notifications/Cricket.ogg:system/media/audio/notifications/Cricket.ogg \
+    $(LOCAL_PATH)/notifications/Deneb.ogg:system/media/audio/notifications/Deneb.ogg \
+    $(LOCAL_PATH)/notifications/Doink.ogg:system/media/audio/notifications/Doink.ogg \
+    $(LOCAL_PATH)/notifications/Drip.ogg:system/media/audio/notifications/Drip.ogg \
+    $(LOCAL_PATH)/notifications/Electra.ogg:system/media/audio/notifications/Electra.ogg \
+    $(LOCAL_PATH)/notifications/Fomalhaut.ogg:system/media/audio/notifications/Fomalhaut.ogg \
+    $(LOCAL_PATH)/notifications/Heaven.ogg:system/media/audio/notifications/Heaven.ogg \
+    $(LOCAL_PATH)/notifications/Merope.ogg:system/media/audio/notifications/Merope.ogg \
+    $(LOCAL_PATH)/notifications/moonbeam.ogg:system/media/audio/notifications/moonbeam.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Adara.ogg:system/media/audio/notifications/Adara.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Alya.ogg:system/media/audio/notifications/Alya.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Antimony.ogg:system/media/audio/notifications/Antimony.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Arcturus.ogg:system/media/audio/notifications/Arcturus.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Argon.ogg:system/media/audio/notifications/Argon.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Bellatrix.ogg:system/media/audio/notifications/Bellatrix.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Beryllium.ogg:system/media/audio/notifications/Beryllium.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Capella.ogg:system/media/audio/notifications/Capella.ogg \
+    $(LOCAL_PATH)/notifications/ogg/CetiAlpha.ogg:system/media/audio/notifications/CetiAlpha.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Cobalt.ogg:system/media/audio/notifications/Cobalt.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Fluorine.ogg:system/media/audio/notifications/Fluorine.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Gallium.ogg:system/media/audio/notifications/Gallium.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Helium.ogg:system/media/audio/notifications/Helium.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Hojus.ogg:system/media/audio/notifications/Hojus.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Iridium.ogg:system/media/audio/notifications/Iridium.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Krypton.ogg:system/media/audio/notifications/Krypton.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Lalande.ogg:system/media/audio/notifications/Lalande.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Mira.ogg:system/media/audio/notifications/Mira.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Palladium.ogg:system/media/audio/notifications/Palladium.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Polaris.ogg:system/media/audio/notifications/Polaris.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Pollux.ogg:system/media/audio/notifications/Pollux.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Procyon.ogg:system/media/audio/notifications/Procyon.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Proxima.ogg:system/media/audio/notifications/Proxima.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Radon.ogg:system/media/audio/notifications/Radon.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Rubidium.ogg:system/media/audio/notifications/Rubidium.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Selenium.ogg:system/media/audio/notifications/Selenium.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Shaula.ogg:system/media/audio/notifications/Shaula.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Spica.ogg:system/media/audio/notifications/Spica.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Strontium.ogg:system/media/audio/notifications/Strontium.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Syrma.ogg:system/media/audio/notifications/Syrma.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Talitha.ogg:system/media/audio/notifications/Talitha.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Tejat.ogg:system/media/audio/notifications/Tejat.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Thallium.ogg:system/media/audio/notifications/Thallium.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Upsilon.ogg:system/media/audio/notifications/Upsilon.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Vega.ogg:system/media/audio/notifications/Vega.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Xenon.ogg:system/media/audio/notifications/Xenon.ogg \
+    $(LOCAL_PATH)/notifications/ogg/Zirconium.ogg:system/media/audio/notifications/Zirconium.ogg \
+    $(LOCAL_PATH)/notifications/pixiedust.ogg:system/media/audio/notifications/pixiedust.ogg \
+    $(LOCAL_PATH)/notifications/pizzicato.ogg:system/media/audio/notifications/pizzicato.ogg \
+    $(LOCAL_PATH)/notifications/Plastic_Pipe.ogg:system/media/audio/notifications/Plastic_Pipe.ogg \
+    $(LOCAL_PATH)/notifications/regulus.ogg:system/media/audio/notifications/regulus.ogg \
+    $(LOCAL_PATH)/notifications/sirius.ogg:system/media/audio/notifications/sirius.ogg \
+    $(LOCAL_PATH)/notifications/Sirrah.ogg:system/media/audio/notifications/Sirrah.ogg \
+    $(LOCAL_PATH)/notifications/SpaceSeed.ogg:system/media/audio/notifications/SpaceSeed.ogg \
+    $(LOCAL_PATH)/notifications/TaDa.ogg:system/media/audio/notifications/TaDa.ogg \
+    $(LOCAL_PATH)/notifications/Tinkerbell.ogg:system/media/audio/notifications/Tinkerbell.ogg \
+    $(LOCAL_PATH)/notifications/tweeters.ogg:system/media/audio/notifications/tweeters.ogg \
+    $(LOCAL_PATH)/notifications/vega.ogg:system/media/audio/notifications/vega.ogg
diff --git a/data/sounds/effects/InCallNotification.ogg b/data/sounds/effects/InCallNotification.ogg
new file mode 100644
index 0000000..4481ccb2
--- /dev/null
+++ b/data/sounds/effects/InCallNotification.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/InCallNotification.ogg b/data/sounds/effects/ogg/InCallNotification.ogg
new file mode 100644
index 0000000..4481ccb2
--- /dev/null
+++ b/data/sounds/effects/ogg/InCallNotification.ogg
Binary files differ
diff --git a/docs/html/_shared/_reference-head-tags.html b/docs/html/_shared/_reference-head-tags.html
new file mode 100644
index 0000000..f66a7b7
--- /dev/null
+++ b/docs/html/_shared/_reference-head-tags.html
@@ -0,0 +1,8 @@
+  <!-- Added to Gerrit so we can stage reference docs directly from
+       Android builds; this file should *not* be migrated to Piper -->
+
+  <meta name="top_category" value="develop" />
+  <meta name="subcategory" value="reference" />
+  <meta name="book_path" value="{% if book_path %}{{ book_path }}{% else %}/reference/_book.yaml{% endif %}" />
+  <meta name="project_path" value="/reference/_project.yaml" />
+  <meta name="page_type" value="reference" />
diff --git a/drm/jni/android_drm_DrmManagerClient.cpp b/drm/jni/android_drm_DrmManagerClient.cpp
index 63fe8ac..52ea8e3 100644
--- a/drm/jni/android_drm_DrmManagerClient.cpp
+++ b/drm/jni/android_drm_DrmManagerClient.cpp
@@ -19,8 +19,8 @@
 #include <utils/Log.h>
 
 #include <jni.h>
-#include <JNIHelp.h>
-#include <ScopedLocalRef.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedLocalRef.h>
 #include <android_runtime/AndroidRuntime.h>
 
 #include <drm/DrmInfo.h>
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index d586db4..57c7549 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -21,6 +21,7 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.Size;
+import android.content.res.ResourcesImpl;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.StrictMode;
@@ -82,6 +83,12 @@
 
     private static volatile int sDefaultDensity = -1;
 
+    /** @hide Used only when ResourcesImpl.TRACE_FOR_DETAILED_PRELOAD is true. */
+    public static volatile int sPreloadTracingNumInstantiatedBitmaps;
+
+    /** @hide Used only when ResourcesImpl.TRACE_FOR_DETAILED_PRELOAD is true. */
+    public static volatile long sPreloadTracingTotalBitmapsSize;
+
     /**
      * For backwards compatibility, allows the app layer to change the default
      * density when running old apps.
@@ -128,6 +135,11 @@
         NativeAllocationRegistry registry = new NativeAllocationRegistry(
             Bitmap.class.getClassLoader(), nativeGetNativeFinalizer(), nativeSize);
         registry.registerNativeAllocation(this, nativeBitmap);
+
+        if (ResourcesImpl.TRACE_FOR_DETAILED_PRELOAD) {
+            sPreloadTracingNumInstantiatedBitmaps++;
+            sPreloadTracingTotalBitmapsSize += nativeSize;
+        }
     }
 
     /**
diff --git a/graphics/java/android/graphics/BitmapFactory.java b/graphics/java/android/graphics/BitmapFactory.java
index 3b272c8..ffb39e3 100644
--- a/graphics/java/android/graphics/BitmapFactory.java
+++ b/graphics/java/android/graphics/BitmapFactory.java
@@ -433,10 +433,15 @@
         static void validate(Options opts) {
             if (opts == null) return;
 
-            if (opts.inMutable && opts.inPreferredConfig == Bitmap.Config.HARDWARE) {
+            if (opts.inBitmap != null && opts.inBitmap.getConfig() == Bitmap.Config.HARDWARE) {
                 throw new IllegalArgumentException("Bitmaps with Config.HARWARE are always immutable");
             }
 
+            if (opts.inMutable && opts.inPreferredConfig == Bitmap.Config.HARDWARE) {
+                throw new IllegalArgumentException("Bitmaps with Config.HARDWARE cannot be " +
+                        "decoded into - they are immutable");
+            }
+
             if (opts.inPreferredColorSpace != null) {
                 if (!(opts.inPreferredColorSpace instanceof ColorSpace.Rgb)) {
                     throw new IllegalArgumentException("The destination color space must use the " +
diff --git a/graphics/java/android/graphics/Color.java b/graphics/java/android/graphics/Color.java
index bdd828f..c4bf9d3 100644
--- a/graphics/java/android/graphics/Color.java
+++ b/graphics/java/android/graphics/Color.java
@@ -73,7 +73,7 @@
  * <h4>Encoding</h4>
  * <p>The four components of a color int are encoded in the following way:</p>
  * <pre class="prettyprint">
- * int color = (A & 0xff) << 24 | (R & 0xff) << 16 | (G & 0xff) << 16 | (B & 0xff);
+ * int color = (A & 0xff) << 24 | (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff);
  * </pre>
  *
  * <p>Because of this encoding, color ints can easily be described as an integer
diff --git a/graphics/java/android/graphics/ImageFormat.java b/graphics/java/android/graphics/ImageFormat.java
index e3527e3..43fd270 100644
--- a/graphics/java/android/graphics/ImageFormat.java
+++ b/graphics/java/android/graphics/ImageFormat.java
@@ -658,6 +658,14 @@
      *    float confidence = floatDepthBuffer.get();
      * </pre>
      *
+     * For camera devices that support the
+     * {@link android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT DEPTH_OUTPUT}
+     * capability, DEPTH_POINT_CLOUD coordinates have units of meters, and the coordinate system is
+     * defined by the camera's pose transforms:
+     * {@link android.hardware.camera2.CameraCharacteristics#LENS_POSE_TRANSLATION} and
+     * {@link android.hardware.camera2.CameraCharacteristics#LENS_POSE_ROTATION}. That means the origin is
+     * the optical center of the camera device, and the positive Z axis points along the camera's optical axis,
+     * toward the scene.
      */
     public static final int DEPTH_POINT_CLOUD = 0x101;
 
diff --git a/graphics/java/android/graphics/LeakyTypefaceStorage.java b/graphics/java/android/graphics/LeakyTypefaceStorage.java
new file mode 100644
index 0000000..618e60d
--- /dev/null
+++ b/graphics/java/android/graphics/LeakyTypefaceStorage.java
@@ -0,0 +1,86 @@
+/*
+ * 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.graphics;
+
+import com.android.internal.annotations.GuardedBy;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Process;
+import android.util.ArrayMap;
+
+import java.util.ArrayList;
+
+/**
+ * This class is used for Parceling Typeface object.
+ * Note: Typeface object can not be passed over the process boundary.
+ *
+ * @hide
+ */
+public class LeakyTypefaceStorage {
+    private static final Object sLock = new Object();
+
+    @GuardedBy("sLock")
+    private static final ArrayList<Typeface> sStorage = new ArrayList<>();
+    @GuardedBy("sLock")
+    private static final ArrayMap<Typeface, Integer> sTypefaceMap = new ArrayMap<>();
+
+    /**
+     * Write typeface to parcel.
+     *
+     * You can't transfer Typeface to a different process. {@link readTypefaceFromParcel} will
+     * return {@code null} if the {@link readTypefaceFromParcel} is called in a different process.
+     *
+     * @param typeface A {@link Typeface} to be written.
+     * @param parcel A {@link Parcel} object.
+     */
+    public static void writeTypefaceToParcel(@Nullable Typeface typeface, @NonNull Parcel parcel) {
+        parcel.writeInt(Process.myPid());
+        synchronized (sLock) {
+            final int id;
+            final Integer i = sTypefaceMap.get(typeface);
+            if (i != null) {
+                id = i.intValue();
+            } else {
+                id = sStorage.size();
+                sStorage.add(typeface);
+                sTypefaceMap.put(typeface, id);
+            }
+            parcel.writeInt(id);
+        }
+    }
+
+    /**
+     * Read typeface from parcel.
+     *
+     * If the {@link Typeface} was created in another process, this method returns null.
+     *
+     * @param parcel A {@link Parcel} object
+     * @return A {@link Typeface} object.
+     */
+    public static @Nullable Typeface readTypefaceFromParcel(@NonNull Parcel parcel) {
+        final int pid = parcel.readInt();
+        final int typefaceId = parcel.readInt();
+        if (pid != Process.myPid()) {
+            return null;  // The Typeface was created and written in another process.
+        }
+        synchronized (sLock) {
+            return sStorage.get(typefaceId);
+        }
+    }
+}
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index e1eb69a..aa9227c 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -822,18 +822,14 @@
      * @hide
      */
     public float getUnderlinePosition() {
-        // kStdUnderline_Offset = 1/9, defined in SkTextFormatParams.h
-        // TODO: replace with position from post and MVAR tables (b/62353930).
-        return (1.0f / 9.0f) * getTextSize();
+        return nGetUnderlinePosition(mNativePaint, mNativeTypeface);
     }
 
     /**
      * @hide
      */
     public float getUnderlineThickness() {
-        // kStdUnderline_Thickness = 1/18, defined in SkTextFormatParams.h
-        // TODO: replace with thickness from post and MVAR tables (b/62353930).
-        return (1.0f / 18.0f) * getTextSize();
+        return nGetUnderlineThickness(mNativePaint, mNativeTypeface);
     }
 
     /**
@@ -856,6 +852,23 @@
     }
 
     /**
+     * Distance from top of the strike-through line to the baseline. Negative values mean above the
+     * baseline. This method returns where the strike-through line should be drawn independent of if
+     * the strikeThruText bit is set at the moment.
+     * @hide
+     */
+    public float getStrikeThruPosition() {
+        return nGetStrikeThruPosition(mNativePaint, mNativeTypeface);
+    }
+
+    /**
+     * @hide
+     */
+    public float getStrikeThruThickness() {
+        return nGetStrikeThruThickness(mNativePaint, mNativeTypeface);
+    }
+
+    /**
      * Helper for setFlags(), setting or clearing the STRIKE_THRU_TEXT_FLAG bit
      *
      * @param strikeThruText true to set the strikeThruText bit in the paint's
@@ -2997,5 +3010,13 @@
     @CriticalNative
     private static native float nDescent(long paintPtr, long typefacePtr);
     @CriticalNative
+    private static native float nGetUnderlinePosition(long paintPtr, long typefacePtr);
+    @CriticalNative
+    private static native float nGetUnderlineThickness(long paintPtr, long typefacePtr);
+    @CriticalNative
+    private static native float nGetStrikeThruPosition(long paintPtr, long typefacePtr);
+    @CriticalNative
+    private static native float nGetStrikeThruThickness(long paintPtr, long typefacePtr);
+    @CriticalNative
     private static native void nSetTextSize(long paintPtr, float textSize);
 }
diff --git a/graphics/java/android/graphics/Shader.java b/graphics/java/android/graphics/Shader.java
index 0209cea..40288f5 100644
--- a/graphics/java/android/graphics/Shader.java
+++ b/graphics/java/android/graphics/Shader.java
@@ -159,8 +159,10 @@
         if (mNativeInstance == 0) {
             mNativeInstance = createNativeInstance(mLocalMatrix == null
                     ? 0 : mLocalMatrix.native_instance);
-            mCleaner = NoImagePreloadHolder.sRegistry.registerNativeAllocation(
-                    this, mNativeInstance);
+            if (mNativeInstance != 0) {
+                mCleaner = NoImagePreloadHolder.sRegistry.registerNativeAllocation(
+                        this, mNativeInstance);
+            }
         }
         return mNativeInstance;
     }
diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java
index c3ef450..ceac325 100644
--- a/graphics/java/android/graphics/drawable/VectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/VectorDrawable.java
@@ -31,6 +31,7 @@
 import android.graphics.PorterDuffColorFilter;
 import android.graphics.Rect;
 import android.graphics.Shader;
+import android.os.Trace;
 import android.util.ArrayMap;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
@@ -605,38 +606,44 @@
     public void inflate(@NonNull Resources r, @NonNull XmlPullParser parser,
             @NonNull AttributeSet attrs, @Nullable Theme theme)
             throws XmlPullParserException, IOException {
-        if (mVectorState.mRootGroup != null || mVectorState.mNativeTree != null) {
-            // This VD has been used to display other VD resource content, clean up.
-            if (mVectorState.mRootGroup != null) {
-                // Subtract the native allocation for all the nodes.
-                VMRuntime.getRuntime().registerNativeFree(mVectorState.mRootGroup.getNativeSize());
-                // Remove child nodes' reference to tree
-                mVectorState.mRootGroup.setTree(null);
+        try {
+            Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, "VectorDrawable#inflate");
+            if (mVectorState.mRootGroup != null || mVectorState.mNativeTree != null) {
+                // This VD has been used to display other VD resource content, clean up.
+                if (mVectorState.mRootGroup != null) {
+                    // Subtract the native allocation for all the nodes.
+                    VMRuntime.getRuntime().registerNativeFree(
+                            mVectorState.mRootGroup.getNativeSize());
+                    // Remove child nodes' reference to tree
+                    mVectorState.mRootGroup.setTree(null);
+                }
+                mVectorState.mRootGroup = new VGroup();
+                if (mVectorState.mNativeTree != null) {
+                    // Subtract the native allocation for the tree wrapper, which contains root node
+                    // as well as rendering related data.
+                    VMRuntime.getRuntime().registerNativeFree(mVectorState.NATIVE_ALLOCATION_SIZE);
+                    mVectorState.mNativeTree.release();
+                }
+                mVectorState.createNativeTree(mVectorState.mRootGroup);
             }
-            mVectorState.mRootGroup = new VGroup();
-            if (mVectorState.mNativeTree != null) {
-                // Subtract the native allocation for the tree wrapper, which contains root node
-                // as well as rendering related data.
-                VMRuntime.getRuntime().registerNativeFree(mVectorState.NATIVE_ALLOCATION_SIZE);
-                mVectorState.mNativeTree.release();
-            }
-            mVectorState.createNativeTree(mVectorState.mRootGroup);
+            final VectorDrawableState state = mVectorState;
+            state.setDensity(Drawable.resolveDensity(r, 0));
+
+            final TypedArray a = obtainAttributes(r, theme, attrs, R.styleable.VectorDrawable);
+            updateStateFromTypedArray(a);
+            a.recycle();
+
+            mDpiScaledDirty = true;
+
+            state.mCacheDirty = true;
+            inflateChildElements(r, parser, attrs, theme);
+
+            state.onTreeConstructionFinished();
+            // Update local properties.
+            updateLocalState(r);
+        } finally {
+            Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
         }
-        final VectorDrawableState state = mVectorState;
-        state.setDensity(Drawable.resolveDensity(r, 0));
-
-        final TypedArray a = obtainAttributes(r, theme, attrs, R.styleable.VectorDrawable);
-        updateStateFromTypedArray(a);
-        a.recycle();
-
-        mDpiScaledDirty = true;
-
-        state.mCacheDirty = true;
-        inflateChildElements(r, parser, attrs, theme);
-
-        state.onTreeConstructionFinished();
-        // Update local properties.
-        updateLocalState(r);
     }
 
     private void updateStateFromTypedArray(TypedArray a) throws XmlPullParserException {
diff --git a/keystore/java/android/security/KeyStore.java b/keystore/java/android/security/KeyStore.java
index ccf9de0..7e959a8 100644
--- a/keystore/java/android/security/KeyStore.java
+++ b/keystore/java/android/security/KeyStore.java
@@ -754,6 +754,8 @@
                 // None of the key's SIDs can ever be authenticated
                 return new KeyPermanentlyInvalidatedException();
             }
+            case UNINITIALIZED:
+                return new KeyPermanentlyInvalidatedException();
             default:
                 return new InvalidKeyException("Keystore operation failed", e);
         }
diff --git a/keystore/java/android/security/keystore/KeyGenParameterSpec.java b/keystore/java/android/security/keystore/KeyGenParameterSpec.java
index ed40b77..87677d4 100644
--- a/keystore/java/android/security/keystore/KeyGenParameterSpec.java
+++ b/keystore/java/android/security/keystore/KeyGenParameterSpec.java
@@ -195,7 +195,7 @@
  * <pre> {@code
  * KeyGenerator keyGenerator = KeyGenerator.getInstance(
  *         KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
- * keyGenerator.initialize(
+ * keyGenerator.init(
  *         new KeyGenParameterSpec.Builder("key2",
  *                 KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
  *                 .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
@@ -219,7 +219,7 @@
  * <pre> {@code
  * KeyGenerator keyGenerator = KeyGenerator.getInstance(
  *         KeyProperties.KEY_ALGORITHM_HMAC_SHA256, "AndroidKeyStore");
- * keyGenerator.initialize(
+ * keyGenerator.init(
  *         new KeyGenParameterSpec.Builder("key2", KeyProperties.PURPOSE_SIGN).build());
  * SecretKey key = keyGenerator.generateKey();
  * Mac mac = Mac.getInstance("HmacSHA256");
diff --git a/keystore/tests/Android.mk b/keystore/tests/Android.mk
deleted file mode 100644
index a740b13..0000000
--- a/keystore/tests/Android.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-# We only want this apk build for tests.
-LOCAL_MODULE_TAGS := tests
-LOCAL_CERTIFICATE := platform
-
-LOCAL_JAVA_LIBRARIES := android.test.runner bouncycastle conscrypt
-LOCAL_STATIC_JAVA_LIBRARIES := junit legacy-android-test
-
-# Include all test java files.
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := KeyStoreTests
-
-include $(BUILD_PACKAGE)
diff --git a/keystore/tests/AndroidManifest.xml b/keystore/tests/AndroidManifest.xml
deleted file mode 100644
index 415442f..0000000
--- a/keystore/tests/AndroidManifest.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="android.security.tests"
-          android:sharedUserId="android.uid.system">
-
-    <application>
-        <uses-library android:name="android.test.runner" />
-    </application>
-
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
-        android:targetPackage="android.security.tests"
-        android:label="KeyStore Tests">
-    </instrumentation>
-</manifest>
diff --git a/keystore/tests/src/android/security/KeyPairGeneratorSpecTest.java b/keystore/tests/src/android/security/KeyPairGeneratorSpecTest.java
deleted file mode 100644
index bc8dd13..0000000
--- a/keystore/tests/src/android/security/KeyPairGeneratorSpecTest.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.security;
-
-import android.test.AndroidTestCase;
-
-import java.math.BigInteger;
-import java.util.Date;
-
-import javax.security.auth.x500.X500Principal;
-
-public class KeyPairGeneratorSpecTest extends AndroidTestCase {
-    private static final String TEST_ALIAS_1 = "test1";
-
-    private static final X500Principal TEST_DN_1 = new X500Principal("CN=test1");
-
-    private static final long NOW_MILLIS = System.currentTimeMillis();
-
-    private static final BigInteger SERIAL_1 = BigInteger.ONE;
-
-    /* We have to round this off because X509v3 doesn't store milliseconds. */
-    private static final Date NOW = new Date(NOW_MILLIS - (NOW_MILLIS % 1000L));
-
-    @SuppressWarnings("deprecation")
-    private static final Date NOW_PLUS_10_YEARS = new Date(NOW.getYear() + 10, 0, 1);
-
-    public void testConstructor_Success() throws Exception {
-        KeyPairGeneratorSpec spec =
-                new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1,
-                        SERIAL_1, NOW, NOW_PLUS_10_YEARS, 0);
-
-        assertEquals("Context should be the one specified", getContext(), spec.getContext());
-
-        assertEquals("Alias should be the one specified", TEST_ALIAS_1, spec.getKeystoreAlias());
-
-        assertEquals("Key algorithm should be the one specified", "RSA", spec.getKeyType());
-
-        assertEquals("Key size should be the one specified", 1024, spec.getKeySize());
-
-        assertEquals("subjectDN should be the one specified", TEST_DN_1, spec.getSubjectDN());
-
-        assertEquals("startDate should be the one specified", NOW, spec.getStartDate());
-
-        assertEquals("endDate should be the one specified", NOW_PLUS_10_YEARS, spec.getEndDate());
-    }
-
-    public void testBuilder_Success() throws Exception {
-        KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(getContext())
-                .setAlias(TEST_ALIAS_1)
-                .setKeyType("RSA")
-                .setKeySize(1024)
-                .setSubject(TEST_DN_1)
-                .setSerialNumber(SERIAL_1)
-                .setStartDate(NOW)
-                .setEndDate(NOW_PLUS_10_YEARS)
-                .setEncryptionRequired()
-                .build();
-
-        assertEquals("Context should be the one specified", getContext(), spec.getContext());
-
-        assertEquals("Alias should be the one specified", TEST_ALIAS_1, spec.getKeystoreAlias());
-
-        assertEquals("Key algorithm should be the one specified", "RSA", spec.getKeyType());
-
-        assertEquals("Key size should be the one specified", 1024, spec.getKeySize());
-
-        assertEquals("subjectDN should be the one specified", TEST_DN_1, spec.getSubjectDN());
-
-        assertEquals("startDate should be the one specified", NOW, spec.getStartDate());
-
-        assertEquals("endDate should be the one specified", NOW_PLUS_10_YEARS, spec.getEndDate());
-
-        assertEquals("encryption flag should be on", KeyStore.FLAG_ENCRYPTED, spec.getFlags());
-    }
-
-    public void testConstructor_NullContext_Failure() throws Exception {
-        try {
-            new KeyPairGeneratorSpec(null, TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1, NOW,
-                    NOW_PLUS_10_YEARS, 0);
-            fail("Should throw IllegalArgumentException when context is null");
-        } catch (IllegalArgumentException success) {
-        }
-    }
-
-    public void testConstructor_NullKeystoreAlias_Failure() throws Exception {
-        try {
-            new KeyPairGeneratorSpec(getContext(), null, "RSA", 1024, null, TEST_DN_1, SERIAL_1, NOW,
-                    NOW_PLUS_10_YEARS, 0);
-            fail("Should throw IllegalArgumentException when keystoreAlias is null");
-        } catch (IllegalArgumentException success) {
-        }
-    }
-
-    public void testConstructor_NullSubjectDN_Failure() throws Exception {
-        try {
-            new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, null, SERIAL_1, NOW,
-                    NOW_PLUS_10_YEARS, 0);
-            fail("Should throw IllegalArgumentException when subjectDN is null");
-        } catch (IllegalArgumentException success) {
-        }
-    }
-
-    public void testConstructor_NullSerial_Failure() throws Exception {
-        try {
-            new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, null, NOW,
-                    NOW_PLUS_10_YEARS, 0);
-            fail("Should throw IllegalArgumentException when startDate is null");
-        } catch (IllegalArgumentException success) {
-        }
-    }
-
-    public void testConstructor_NullStartDate_Failure() throws Exception {
-        try {
-            new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1,
-                    null, NOW_PLUS_10_YEARS, 0);
-            fail("Should throw IllegalArgumentException when startDate is null");
-        } catch (IllegalArgumentException success) {
-        }
-    }
-
-    public void testConstructor_NullEndDate_Failure() throws Exception {
-        try {
-            new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1,
-                    NOW, null, 0);
-            fail("Should throw IllegalArgumentException when keystoreAlias is null");
-        } catch (IllegalArgumentException success) {
-        }
-    }
-
-    public void testConstructor_EndBeforeStart_Failure() throws Exception {
-        try {
-            new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1,
-                    NOW_PLUS_10_YEARS, NOW, 0);
-            fail("Should throw IllegalArgumentException when end is before start");
-        } catch (IllegalArgumentException success) {
-        }
-    }
-}
diff --git a/keystore/tests/src/android/security/KeyStoreTest.java b/keystore/tests/src/android/security/KeyStoreTest.java
deleted file mode 100644
index 1d5bf12..0000000
--- a/keystore/tests/src/android/security/KeyStoreTest.java
+++ /dev/null
@@ -1,974 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.security;
-
-import android.app.Activity;
-import android.os.Binder;
-import android.os.IBinder;
-import android.os.Process;
-import android.security.keymaster.ExportResult;
-import android.security.keymaster.KeyCharacteristics;
-import android.security.keymaster.KeymasterArguments;
-import android.security.keymaster.KeymasterBlob;
-import android.security.keymaster.KeymasterDefs;
-import android.security.keymaster.OperationResult;
-import android.test.ActivityUnitTestCase;
-import android.test.AssertionFailedError;
-import android.test.MoreAsserts;
-import android.test.suitebuilder.annotation.MediumTest;
-import com.android.org.conscrypt.NativeConstants;
-import java.nio.charset.StandardCharsets;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.security.spec.RSAKeyGenParameterSpec;
-
-/**
- * Junit / Instrumentation test case for KeyStore class
- *
- * Running the test suite:
- *
- *  runtest keystore-unit
- *
- * Or this individual test case:
- *
- *  runtest --path frameworks/base/keystore/tests/src/android/security/KeyStoreTest.java
- */
-@MediumTest
-public class KeyStoreTest extends ActivityUnitTestCase<Activity> {
-    private static final String TEST_PASSWD = "12345678";
-    private static final String TEST_PASSWD2 = "87654321";
-    private static final String TEST_KEYNAME = "test-key";
-    private static final String TEST_KEYNAME1 = "test-key.1";
-    private static final String TEST_KEYNAME2 = "test-key\02";
-    private static final byte[] TEST_KEYVALUE = "test value".getBytes(StandardCharsets.UTF_8);
-
-    // "Hello, World" in Chinese
-    private static final String TEST_I18N_KEY = "\u4F60\u597D, \u4E16\u754C";
-    private static final byte[] TEST_I18N_VALUE = TEST_I18N_KEY.getBytes(StandardCharsets.UTF_8);
-
-    // Test vector data for signatures
-    private static final int RSA_KEY_SIZE = 1024;
-    private static final byte[] TEST_DATA =  new byte[RSA_KEY_SIZE / 8];
-    static {
-        for (int i = 0; i < TEST_DATA.length; i++) {
-            TEST_DATA[i] = (byte) i;
-        }
-    }
-
-    private KeyStore mKeyStore = null;
-
-    public KeyStoreTest() {
-        super(Activity.class);
-    }
-
-    private static final byte[] PRIVKEY_BYTES = hexToBytes(
-            "308204BE020100300D06092A864886F70D0101010500048204A8308204A4020100028201" +
-            "0100E0473E8AB8F2284FEB9E742FF9748FA118ED98633C92F52AEB7A2EBE0D3BE60329BE" +
-            "766AD10EB6A515D0D2CFD9BEA7930F0C306537899F7958CD3E85B01F8818524D312584A9" +
-            "4B251E3625B54141EDBFEE198808E1BB97FC7CB49B9EAAAF68E9C98D7D0EDC53BBC0FA00" +
-            "34356D6305FBBCC3C7001405386ABBC873CB0F3EF7425F3D33DF7B315AE036D2A0B66AFD" +
-            "47503B169BF36E3B5162515B715FDA83DEAF2C58AEB9ABFB3097C3CC9DD9DBE5EF296C17" +
-            "6139028E8A671E63056D45F40188D2C4133490845DE52C2534E9C6B2478C07BDAE928823" +
-            "B62D066C7770F9F63F3DBA247F530844747BE7AAA85D853B8BD244ACEC3DE3C89AB46453" +
-            "AB4D24C3AC6902030100010282010037784776A5F17698F5AC960DFB83A1B67564E648BD" +
-            "0597CF8AB8087186F2669C27A9ECBDD480F0197A80D07309E6C6A96F925331E57F8B4AC6" +
-            "F4D45EDA45A23269C09FC428C07A4E6EDF738A15DEC97FABD2F2BB47A14F20EA72FCFE4C" +
-            "36E01ADA77BD137CD8D4DA10BB162E94A4662971F175F985FA188F056CB97EE2816F43AB" +
-            "9D3747612486CDA8C16196C30818A995EC85D38467791267B3BF21F273710A6925862576" +
-            "841C5B6712C12D4BD20A2F3299ADB7C135DA5E9515ABDA76E7CAF2A3BE80551D073B78BF" +
-            "1162C48AD2B7F4743A0238EE4D252F7D5E7E6533CCAE64CCB39360075A2FD1E034EC3AE5" +
-            "CE9C408CCBF0E25E4114021687B3DD4754AE8102818100F541884BC3737B2922D4119EF4" +
-            "5E2DEE2CD4CBB75F45505A157AA5009F99C73A2DF0724AC46024306332EA898177634546" +
-            "5DC6DF1E0A6F140AFF3B7396E6A8994AC5DAA96873472FE37749D14EB3E075E629DBEB35" +
-            "83338A6F3649D0A2654A7A42FD9AB6BFA4AC4D481D390BB229B064BDC311CC1BE1B63189" +
-            "DA7C40CDECF2B102818100EA1A742DDB881CEDB7288C87E38D868DD7A409D15A43F445D5" +
-            "377A0B5731DDBFCA2DAF28A8E13CD5C0AFCEC3347D74A39E235A3CD9633F274DE2B94F92" +
-            "DF43833911D9E9F1CF58F27DE2E08FF45964C720D3EC2139DC7CAFC912953CDECB2F355A" +
-            "2E2C35A50FAD754CB3B23166424BA3B6E3112A2B898C38C5C15EDB238693390281805182" +
-            "8F1EC6FD996029901BAF1D7E337BA5F0AF27E984EAD895ACE62BD7DF4EE45A224089F2CC" +
-            "151AF3CD173FCE0474BCB04F386A2CDCC0E0036BA2419F54579262D47100BE931984A3EF" +
-            "A05BECF141574DC079B3A95C4A83E6C43F3214D6DF32D512DE198085E531E616B83FD7DD" +
-            "9D1F4E2607C3333D07C55D107D1D3893587102818100DB4FB50F50DE8EDB53FF34C80931" +
-            "88A0512867DA2CCA04897759E587C244010DAF8664D59E8083D16C164789301F67A9F078" +
-            "060D834A2ADBD367575B68A8A842C2B02A89B3F31FCCEC8A22FE395795C5C6C7422B4E5D" +
-            "74A1E9A8F30E7759B9FC2D639C1F15673E84E93A5EF1506F4315383C38D45CBD1B14048F" +
-            "4721DC82326102818100D8114593AF415FB612DBF1923710D54D07486205A76A3B431949" +
-            "68C0DFF1F11EF0F61A4A337D5FD3741BBC9640E447B8B6B6C47C3AC1204357D3B0C55BA9" +
-            "286BDA73F629296F5FA9146D8976357D3C751E75148696A40B74685C82CE30902D639D72" +
-            "4FF24D5E2E9407EE34EDED2E3B4DF65AA9BCFEB6DF28D07BA6903F165768");
-
-    private static final byte[] AES256_BYTES = hexToBytes(
-            "0CC175B9C0F1B6A831C399E269772661CEC520EA51EA0A47E87295FA3245A605");
-
-    private static byte[] hexToBytes(String s) {
-        int len = s.length();
-        byte[] data = new byte[len / 2];
-        for (int i = 0; i < len; i += 2) {
-            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(
-                    s.charAt(i + 1), 16));
-        }
-        return data;
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        mKeyStore = KeyStore.getInstance();
-        if (mKeyStore.state() != KeyStore.State.UNINITIALIZED) {
-            mKeyStore.reset();
-        }
-        assertEquals("KeyStore should be in an uninitialized state",
-                KeyStore.State.UNINITIALIZED, mKeyStore.state());
-        super.setUp();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mKeyStore.reset();
-        super.tearDown();
-    }
-
-    public void testState() throws Exception {
-        assertEquals(KeyStore.State.UNINITIALIZED, mKeyStore.state());
-    }
-
-    public void testPassword() throws Exception {
-        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-        assertEquals(KeyStore.State.UNLOCKED, mKeyStore.state());
-    }
-
-    public void testGet() throws Exception {
-        assertNull(mKeyStore.get(TEST_KEYNAME));
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        assertNull(mKeyStore.get(TEST_KEYNAME));
-        assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
-                KeyStore.FLAG_ENCRYPTED));
-        assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
-    }
-
-    public void testPut() throws Exception {
-        assertNull(mKeyStore.get(TEST_KEYNAME));
-        assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
-                KeyStore.FLAG_ENCRYPTED));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME));
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
-                KeyStore.FLAG_ENCRYPTED));
-        assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
-    }
-
-    public void testPut_grantedUid_Wifi() throws Exception {
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-        assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.WIFI_UID,
-                KeyStore.FLAG_ENCRYPTED));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.WIFI_UID,
-                KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-    }
-
-    public void testPut_ungrantedUid_Bluetooth() throws Exception {
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
-        assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.BLUETOOTH_UID,
-                KeyStore.FLAG_ENCRYPTED));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.BLUETOOTH_UID,
-                KeyStore.FLAG_ENCRYPTED));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
-    }
-
-    public void testI18n() throws Exception {
-        assertFalse(mKeyStore.put(TEST_I18N_KEY, TEST_I18N_VALUE, KeyStore.UID_SELF,
-                KeyStore.FLAG_ENCRYPTED));
-        assertFalse(mKeyStore.contains(TEST_I18N_KEY));
-        mKeyStore.onUserPasswordChanged(TEST_I18N_KEY);
-        assertTrue(mKeyStore.put(TEST_I18N_KEY, TEST_I18N_VALUE, KeyStore.UID_SELF,
-                KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mKeyStore.contains(TEST_I18N_KEY));
-    }
-
-    public void testDelete() throws Exception {
-        assertFalse(mKeyStore.delete(TEST_KEYNAME));
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        assertFalse(mKeyStore.delete(TEST_KEYNAME));
-
-        assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
-                KeyStore.FLAG_ENCRYPTED));
-        assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
-        assertTrue(mKeyStore.delete(TEST_KEYNAME));
-        assertNull(mKeyStore.get(TEST_KEYNAME));
-    }
-
-    public void testDelete_grantedUid_Wifi() throws Exception {
-        assertFalse(mKeyStore.delete(TEST_KEYNAME, Process.WIFI_UID));
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        assertFalse(mKeyStore.delete(TEST_KEYNAME, Process.WIFI_UID));
-
-        assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.WIFI_UID,
-                KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-        assertTrue(mKeyStore.delete(TEST_KEYNAME, Process.WIFI_UID));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-    }
-
-    public void testDelete_ungrantedUid_Bluetooth() throws Exception {
-        assertFalse(mKeyStore.delete(TEST_KEYNAME, Process.BLUETOOTH_UID));
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        assertFalse(mKeyStore.delete(TEST_KEYNAME, Process.BLUETOOTH_UID));
-
-        assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.BLUETOOTH_UID,
-                KeyStore.FLAG_ENCRYPTED));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
-        assertFalse(mKeyStore.delete(TEST_KEYNAME, Process.BLUETOOTH_UID));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
-    }
-
-    public void testContains() throws Exception {
-        assertFalse(mKeyStore.contains(TEST_KEYNAME));
-
-        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME));
-
-        assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
-                KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME));
-    }
-
-    public void testContains_grantedUid_Wifi() throws Exception {
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-
-        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-
-        assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.WIFI_UID,
-                KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-    }
-
-    public void testContains_grantedUid_Bluetooth() throws Exception {
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
-
-        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
-
-        assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.BLUETOOTH_UID,
-                KeyStore.FLAG_ENCRYPTED));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
-    }
-
-    public void testList() throws Exception {
-        String[] emptyResult = mKeyStore.list(TEST_KEYNAME);
-        assertNotNull(emptyResult);
-        assertEquals(0, emptyResult.length);
-
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
-        mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
-
-        String[] results = mKeyStore.list(TEST_KEYNAME);
-        assertEquals(new HashSet(Arrays.asList(TEST_KEYNAME1.substring(TEST_KEYNAME.length()),
-                                               TEST_KEYNAME2.substring(TEST_KEYNAME.length()))),
-                     new HashSet(Arrays.asList(results)));
-    }
-
-    public void testList_ungrantedUid_Bluetooth() throws Exception {
-        String[] results1 = mKeyStore.list(TEST_KEYNAME, Process.BLUETOOTH_UID);
-        assertEquals(0, results1.length);
-
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
-        mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
-
-        String[] results2 = mKeyStore.list(TEST_KEYNAME, Process.BLUETOOTH_UID);
-        assertEquals(0, results2.length);
-    }
-
-    public void testList_grantedUid_Wifi() throws Exception {
-        String[] results1 = mKeyStore.list(TEST_KEYNAME, Process.WIFI_UID);
-        assertNotNull(results1);
-        assertEquals(0, results1.length);
-
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED);
-        mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED);
-
-        String[] results2 = mKeyStore.list(TEST_KEYNAME, Process.WIFI_UID);
-        assertEquals(new HashSet(Arrays.asList(TEST_KEYNAME1.substring(TEST_KEYNAME.length()),
-                                               TEST_KEYNAME2.substring(TEST_KEYNAME.length()))),
-                     new HashSet(Arrays.asList(results2)));
-    }
-
-    public void testList_grantedUid_Vpn() throws Exception {
-        String[] results1 = mKeyStore.list(TEST_KEYNAME, Process.VPN_UID);
-        assertNotNull(results1);
-        assertEquals(0, results1.length);
-
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, Process.VPN_UID, KeyStore.FLAG_ENCRYPTED);
-        mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, Process.VPN_UID, KeyStore.FLAG_ENCRYPTED);
-
-        String[] results2 = mKeyStore.list(TEST_KEYNAME, Process.VPN_UID);
-        assertEquals(new HashSet(Arrays.asList(TEST_KEYNAME1.substring(TEST_KEYNAME.length()),
-                                               TEST_KEYNAME2.substring(TEST_KEYNAME.length()))),
-                     new HashSet(Arrays.asList(results2)));
-    }
-
-    public void testLock() throws Exception {
-        assertFalse(mKeyStore.lock());
-
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        assertEquals(KeyStore.State.UNLOCKED, mKeyStore.state());
-
-        assertTrue(mKeyStore.lock());
-        assertEquals(KeyStore.State.LOCKED, mKeyStore.state());
-    }
-
-    public void testUnlock() throws Exception {
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        assertEquals(KeyStore.State.UNLOCKED, mKeyStore.state());
-        mKeyStore.lock();
-
-        assertFalse(mKeyStore.unlock(TEST_PASSWD2));
-        assertTrue(mKeyStore.unlock(TEST_PASSWD));
-    }
-
-    public void testIsEmpty() throws Exception {
-        assertTrue(mKeyStore.isEmpty());
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        assertTrue(mKeyStore.isEmpty());
-        mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
-        assertFalse(mKeyStore.isEmpty());
-        mKeyStore.reset();
-        assertTrue(mKeyStore.isEmpty());
-    }
-
-    public void testGenerate_NotInitialized_Fail() throws Exception {
-        assertFalse("Should fail when keystore is not initialized",
-                mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
-                        RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-    }
-
-    public void testGenerate_Locked_Fail() throws Exception {
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        mKeyStore.lock();
-        assertFalse("Should fail when keystore is locked",
-                mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
-                        RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-    }
-
-    public void testGenerate_Success() throws Exception {
-        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertTrue("Should be able to generate key when unlocked",
-                mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
-                        RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-    }
-
-    public void testGenerate_grantedUid_Wifi_Success() throws Exception {
-        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertTrue("Should be able to generate key when unlocked",
-                mKeyStore.generate(TEST_KEYNAME, Process.WIFI_UID, NativeConstants.EVP_PKEY_RSA,
-                        RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME));
-    }
-
-    public void testGenerate_ungrantedUid_Bluetooth_Failure() throws Exception {
-        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertFalse(mKeyStore.generate(TEST_KEYNAME, Process.BLUETOOTH_UID,
-                    NativeConstants.EVP_PKEY_RSA, RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME));
-    }
-
-    public void testImport_Success() throws Exception {
-        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertTrue("Should be able to import key when unlocked", mKeyStore.importKey(TEST_KEYNAME,
-                PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-    }
-
-    public void testImport_grantedUid_Wifi_Success() throws Exception {
-        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertTrue("Should be able to import key when unlocked", mKeyStore.importKey(TEST_KEYNAME,
-                PRIVKEY_BYTES, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME));
-    }
-
-    public void testImport_ungrantedUid_Bluetooth_Failure() throws Exception {
-        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertFalse(mKeyStore.importKey(TEST_KEYNAME, PRIVKEY_BYTES, Process.BLUETOOTH_UID,
-                KeyStore.FLAG_ENCRYPTED));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME));
-    }
-
-    public void testImport_Failure_BadEncoding() throws Exception {
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-
-        assertFalse("Invalid DER-encoded key should not be imported", mKeyStore.importKey(
-                TEST_KEYNAME, TEST_DATA, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-    }
-
-    public void testSign_Success() throws Exception {
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-
-        assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
-                    RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME));
-        final byte[] signature = mKeyStore.sign(TEST_KEYNAME, TEST_DATA);
-
-        assertNotNull("Signature should not be null", signature);
-    }
-
-    public void testVerify_Success() throws Exception {
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-
-        assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
-                    RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME));
-        final byte[] signature = mKeyStore.sign(TEST_KEYNAME, TEST_DATA);
-
-        assertNotNull("Signature should not be null", signature);
-
-        assertTrue("Signature should verify with same data",
-                mKeyStore.verify(TEST_KEYNAME, TEST_DATA, signature));
-    }
-
-    public void testSign_NotInitialized_Failure() throws Exception {
-        assertNull("Should not be able to sign without first initializing the keystore",
-                mKeyStore.sign(TEST_KEYNAME, TEST_DATA));
-    }
-
-    public void testSign_NotGenerated_Failure() throws Exception {
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-
-        assertNull("Should not be able to sign without first generating keys",
-                mKeyStore.sign(TEST_KEYNAME, TEST_DATA));
-    }
-
-    public void testGrant_Generated_Success() throws Exception {
-        assertTrue("Password should work for keystore",
-                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertTrue("Should be able to generate key for testcase",
-                mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
-                        RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-
-        assertNotNull("Should be able to grant key to other user",
-                mKeyStore.grant(TEST_KEYNAME, 0));
-    }
-
-    public void testGrant_Imported_Success() throws Exception {
-        assertTrue("Password should work for keystore", mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertTrue("Should be able to import key for testcase", mKeyStore.importKey(TEST_KEYNAME,
-                PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertNotNull("Should be able to grant key to other user", mKeyStore.grant(TEST_KEYNAME, 0));
-    }
-
-    public void testGrant_NoKey_Failure() throws Exception {
-        assertTrue("Should be able to unlock keystore for test",
-                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertNull("Should not be able to grant without first initializing the keystore",
-                mKeyStore.grant(TEST_KEYNAME, 0));
-    }
-
-    public void testGrant_NotInitialized_Failure() throws Exception {
-        assertNull("Should not be able to grant without first initializing the keystore",
-                mKeyStore.grant(TEST_KEYNAME, 0));
-    }
-
-    public void testUngrant_Generated_Success() throws Exception {
-        assertTrue("Password should work for keystore",
-                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertTrue("Should be able to generate key for testcase",
-                mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
-                        RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-
-        assertNotNull("Should be able to grant key to other user",
-                mKeyStore.grant(TEST_KEYNAME, 0));
-
-        assertTrue("Should be able to ungrant key to other user",
-                mKeyStore.ungrant(TEST_KEYNAME, 0));
-    }
-
-    public void testUngrant_Imported_Success() throws Exception {
-        assertTrue("Password should work for keystore",
-                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertTrue("Should be able to import key for testcase", mKeyStore.importKey(TEST_KEYNAME,
-                PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertNotNull("Should be able to grant key to other user",
-                mKeyStore.grant(TEST_KEYNAME, 0));
-
-        assertTrue("Should be able to ungrant key to other user",
-                mKeyStore.ungrant(TEST_KEYNAME, 0));
-    }
-
-    public void testUngrant_NotInitialized_Failure() throws Exception {
-        assertFalse("Should fail to ungrant key when keystore not initialized",
-                mKeyStore.ungrant(TEST_KEYNAME, 0));
-    }
-
-    public void testUngrant_NoGrant_Failure() throws Exception {
-        assertTrue("Password should work for keystore",
-                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertTrue("Should be able to generate key for testcase",
-                mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
-                        RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-
-        assertFalse("Should not be able to revoke not existent grant",
-                mKeyStore.ungrant(TEST_KEYNAME, 0));
-    }
-
-    public void testUngrant_DoubleUngrant_Failure() throws Exception {
-        assertTrue("Password should work for keystore",
-                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertTrue("Should be able to generate key for testcase",
-                mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
-                        RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-
-        assertNotNull("Should be able to grant key to other user",
-                mKeyStore.grant(TEST_KEYNAME, 0));
-
-        assertTrue("Should be able to ungrant key to other user",
-                mKeyStore.ungrant(TEST_KEYNAME, 0));
-
-        assertFalse("Should fail to ungrant key to other user second time",
-                mKeyStore.ungrant(TEST_KEYNAME, 0));
-    }
-
-    public void testUngrant_DoubleGrantUngrant_Failure() throws Exception {
-        assertTrue("Password should work for keystore",
-                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertTrue("Should be able to generate key for testcase",
-                mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
-                        RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-
-        assertNotNull("Should be able to grant key to other user",
-                mKeyStore.grant(TEST_KEYNAME, 0));
-
-        assertNotNull("Should be able to grant key to other user a second time",
-                mKeyStore.grant(TEST_KEYNAME, 0));
-
-        assertTrue("Should be able to ungrant key to other user",
-                mKeyStore.ungrant(TEST_KEYNAME, 0));
-
-        assertFalse("Should fail to ungrant key to other user second time",
-                mKeyStore.ungrant(TEST_KEYNAME, 0));
-    }
-
-    public void testDuplicate_grantedUid_Wifi_Success() throws Exception {
-        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertFalse(mKeyStore.contains(TEST_KEYNAME));
-
-        assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
-                    RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-
-        assertTrue(mKeyStore.contains(TEST_KEYNAME));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-
-        // source doesn't exist
-        assertFalse(mKeyStore.duplicate(TEST_KEYNAME1, -1, TEST_KEYNAME1, Process.WIFI_UID));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME1, Process.WIFI_UID));
-
-        // Copy from current UID to granted UID
-        assertTrue(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME1, Process.WIFI_UID));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME1));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME1, Process.WIFI_UID));
-        assertFalse(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME1, Process.WIFI_UID));
-
-        // Copy from granted UID to same granted UID
-        assertTrue(mKeyStore.duplicate(TEST_KEYNAME1, Process.WIFI_UID, TEST_KEYNAME2,
-                Process.WIFI_UID));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME1, Process.WIFI_UID));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME2, Process.WIFI_UID));
-        assertFalse(mKeyStore.duplicate(TEST_KEYNAME1, Process.WIFI_UID, TEST_KEYNAME2,
-                Process.WIFI_UID));
-
-        assertTrue(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME2, -1));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME1));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME2));
-        assertFalse(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME2, -1));
-    }
-
-    public void testDuplicate_ungrantedUid_Bluetooth_Failure() throws Exception {
-        assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertFalse(mKeyStore.contains(TEST_KEYNAME));
-
-        assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
-                    RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
-
-        assertTrue(mKeyStore.contains(TEST_KEYNAME));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
-
-        assertFalse(mKeyStore.duplicate(TEST_KEYNAME, -1, TEST_KEYNAME2, Process.BLUETOOTH_UID));
-        assertFalse(mKeyStore.duplicate(TEST_KEYNAME, Process.BLUETOOTH_UID, TEST_KEYNAME2,
-                Process.BLUETOOTH_UID));
-
-        assertTrue(mKeyStore.contains(TEST_KEYNAME));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
-    }
-
-    /**
-     * The amount of time to allow before and after expected time for variance
-     * in timing tests.
-     */
-    private static final long SLOP_TIME_MILLIS = 15000L;
-
-    public void testGetmtime_Success() throws Exception {
-        assertTrue("Password should work for keystore",
-                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertTrue("Should be able to import key when unlocked", mKeyStore.importKey(TEST_KEYNAME,
-                PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        long now = System.currentTimeMillis();
-        long actual = mKeyStore.getmtime(TEST_KEYNAME);
-
-        long expectedAfter = now - SLOP_TIME_MILLIS;
-        long expectedBefore = now + SLOP_TIME_MILLIS;
-
-        assertLessThan("Time should be close to current time", expectedBefore, actual);
-        assertGreaterThan("Time should be close to current time", expectedAfter, actual);
-    }
-
-    private static void assertLessThan(String explanation, long expectedBefore, long actual) {
-        if (actual >= expectedBefore) {
-            throw new AssertionFailedError(explanation + ": actual=" + actual
-                    + ", expected before: " + expectedBefore);
-        }
-    }
-
-    private static void assertGreaterThan(String explanation, long expectedAfter, long actual) {
-        if (actual <= expectedAfter) {
-            throw new AssertionFailedError(explanation + ": actual=" + actual
-                    + ", expected after: " + expectedAfter);
-        }
-    }
-
-    public void testGetmtime_NonExist_Failure() throws Exception {
-        assertTrue("Password should work for keystore",
-                mKeyStore.onUserPasswordChanged(TEST_PASSWD));
-
-        assertTrue("Should be able to import key when unlocked", mKeyStore.importKey(TEST_KEYNAME,
-                PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertEquals("-1 should be returned for non-existent key",
-                -1L, mKeyStore.getmtime(TEST_KEYNAME2));
-    }
-
-    private KeyCharacteristics generateRsaKey(String name) throws Exception {
-        KeymasterArguments args = new KeymasterArguments();
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_ENCRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_DECRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_RSA);
-        args.addEnum(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
-        args.addBoolean(KeymasterDefs.KM_TAG_NO_AUTH_REQUIRED);
-        args.addUnsignedInt(KeymasterDefs.KM_TAG_KEY_SIZE, 2048);
-        args.addUnsignedLong(KeymasterDefs.KM_TAG_RSA_PUBLIC_EXPONENT, RSAKeyGenParameterSpec.F4);
-
-        KeyCharacteristics outCharacteristics = new KeyCharacteristics();
-        int result = mKeyStore.generateKey(name, args, null, 0, outCharacteristics);
-        assertEquals("generateRsaKey should succeed", KeyStore.NO_ERROR, result);
-        return outCharacteristics;
-    }
-
-    public void testGenerateKey() throws Exception {
-        generateRsaKey("test");
-        mKeyStore.delete("test");
-    }
-
-    public void testGenerateRsaWithEntropy() throws Exception {
-        byte[] entropy = new byte[] {1,2,3,4,5};
-        String name = "test";
-        KeymasterArguments args = new KeymasterArguments();
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_ENCRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_DECRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_RSA);
-        args.addEnum(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
-        args.addBoolean(KeymasterDefs.KM_TAG_NO_AUTH_REQUIRED);
-        args.addUnsignedInt(KeymasterDefs.KM_TAG_KEY_SIZE, 2048);
-        args.addUnsignedLong(KeymasterDefs.KM_TAG_RSA_PUBLIC_EXPONENT, RSAKeyGenParameterSpec.F4);
-
-        KeyCharacteristics outCharacteristics = new KeyCharacteristics();
-        int result = mKeyStore.generateKey(name, args, entropy, 0, outCharacteristics);
-        assertEquals("generateKey should succeed", KeyStore.NO_ERROR, result);
-    }
-
-    public void testGenerateAndDelete() throws Exception {
-        generateRsaKey("test");
-        assertTrue("delete should succeed", mKeyStore.delete("test"));
-    }
-
-    public void testGetKeyCharacteristicsSuccess() throws Exception {
-        mKeyStore.onUserPasswordChanged(TEST_PASSWD);
-        String name = "test";
-        KeyCharacteristics gen = generateRsaKey(name);
-        KeyCharacteristics call = new KeyCharacteristics();
-        int result = mKeyStore.getKeyCharacteristics(name, null, null, call);
-        assertEquals("getKeyCharacteristics should succeed", KeyStore.NO_ERROR, result);
-        mKeyStore.delete("test");
-    }
-
-    public void testAppId() throws Exception {
-        String name = "test";
-        byte[] id = new byte[] {0x01, 0x02, 0x03};
-        KeymasterArguments args = new KeymasterArguments();
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_ENCRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_DECRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_RSA);
-        args.addEnum(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
-        args.addUnsignedInt(KeymasterDefs.KM_TAG_KEY_SIZE, 2048);
-        args.addEnum(KeymasterDefs.KM_TAG_BLOCK_MODE, KeymasterDefs.KM_MODE_ECB);
-        args.addBoolean(KeymasterDefs.KM_TAG_NO_AUTH_REQUIRED);
-        args.addBytes(KeymasterDefs.KM_TAG_APPLICATION_ID, id);
-        args.addUnsignedLong(KeymasterDefs.KM_TAG_RSA_PUBLIC_EXPONENT, RSAKeyGenParameterSpec.F4);
-
-        KeyCharacteristics outCharacteristics = new KeyCharacteristics();
-        int result = mKeyStore.generateKey(name, args, null, 0, outCharacteristics);
-        assertEquals("generateRsaKey should succeed", KeyStore.NO_ERROR, result);
-        assertEquals("getKeyCharacteristics should fail without application ID",
-                KeymasterDefs.KM_ERROR_INVALID_KEY_BLOB,
-                mKeyStore.getKeyCharacteristics(name, null, null, outCharacteristics));
-        assertEquals("getKeyCharacteristics should succeed with application ID",
-                KeyStore.NO_ERROR,
-                mKeyStore.getKeyCharacteristics(name, new KeymasterBlob(id), null,
-                    outCharacteristics));
-    }
-
-
-    public void testExportRsa() throws Exception {
-        String name = "test";
-        generateRsaKey(name);
-        ExportResult result = mKeyStore.exportKey(name, KeymasterDefs.KM_KEY_FORMAT_X509, null,
-                null);
-        assertEquals("Export success", KeyStore.NO_ERROR, result.resultCode);
-        // TODO: Verify we have an RSA public key that's well formed.
-    }
-
-    public void testAesGcmEncryptSuccess() throws Exception {
-        String name = "test";
-        KeymasterArguments args = new KeymasterArguments();
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_ENCRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_DECRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_AES);
-        args.addEnum(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
-        args.addUnsignedInt(KeymasterDefs.KM_TAG_KEY_SIZE, 256);
-        args.addEnum(KeymasterDefs.KM_TAG_BLOCK_MODE, KeymasterDefs.KM_MODE_GCM);
-        args.addBoolean(KeymasterDefs.KM_TAG_NO_AUTH_REQUIRED);
-
-        KeyCharacteristics outCharacteristics = new KeyCharacteristics();
-        int rc = mKeyStore.generateKey(name, args, null, 0, outCharacteristics);
-        assertEquals("Generate should succeed", KeyStore.NO_ERROR, rc);
-
-        args = new KeymasterArguments();
-        args.addEnum(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_AES);
-        args.addEnum(KeymasterDefs.KM_TAG_BLOCK_MODE, KeymasterDefs.KM_MODE_GCM);
-        args.addEnum(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
-        args.addUnsignedInt(KeymasterDefs.KM_TAG_MAC_LENGTH, 128);
-        OperationResult result = mKeyStore.begin(name, KeymasterDefs.KM_PURPOSE_ENCRYPT,
-                true, args, null);
-        IBinder token = result.token;
-        assertEquals("Begin should succeed", KeyStore.NO_ERROR, result.resultCode);
-        result = mKeyStore.update(token, null, new byte[] {0x01, 0x02, 0x03, 0x04});
-        assertEquals("Update should succeed", KeyStore.NO_ERROR, result.resultCode);
-        assertEquals("Finish should succeed", KeyStore.NO_ERROR,
-                mKeyStore.finish(token, null, null).resultCode);
-        // TODO: Assert that an AEAD tag was returned by finish
-    }
-
-    public void testBadToken() throws Exception {
-        IBinder token = new Binder();
-        OperationResult result = mKeyStore.update(token, null, new byte[] {0x01});
-        assertEquals("Update with invalid token should fail",
-                KeymasterDefs.KM_ERROR_INVALID_OPERATION_HANDLE, result.resultCode);
-    }
-
-    private int importAesKey(String name, byte[] key, int size, int mode) {
-        KeymasterArguments args = new KeymasterArguments();
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_ENCRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_DECRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_AES);
-        args.addEnum(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
-        args.addEnum(KeymasterDefs.KM_TAG_BLOCK_MODE, mode);
-        args.addUnsignedInt(KeymasterDefs.KM_TAG_KEY_SIZE, size);
-        args.addBoolean(KeymasterDefs.KM_TAG_NO_AUTH_REQUIRED);
-        return mKeyStore.importKey(name, args, KeymasterDefs.KM_KEY_FORMAT_RAW, key, 0,
-                new KeyCharacteristics());
-    }
-    private byte[] doOperation(String name, int purpose, byte[] in, KeymasterArguments beginArgs) {
-        OperationResult result = mKeyStore.begin(name, purpose,
-                true, beginArgs, null);
-        assertEquals("Begin should succeed", KeyStore.NO_ERROR, result.resultCode);
-        IBinder token = result.token;
-        result = mKeyStore.update(token, null, in);
-        assertEquals("Update should succeed", KeyStore.NO_ERROR, result.resultCode);
-        assertEquals("All data should be consumed", in.length, result.inputConsumed);
-        assertEquals("Finish should succeed", KeyStore.NO_ERROR,
-                mKeyStore.finish(token, null, null).resultCode);
-        return result.output;
-    }
-
-    public void testImportAes() throws Exception {
-        int result = importAesKey("aes", AES256_BYTES, 256, KeymasterDefs.KM_MODE_ECB);
-        assertEquals("import should succeed", KeyStore.NO_ERROR, result);
-        mKeyStore.delete("aes");
-    }
-
-    public void testAes256Ecb() throws Exception {
-        byte[] key =
-                hexToBytes("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4");
-        String name = "aes";
-        assertEquals(KeyStore.NO_ERROR, importAesKey(name, key, 256, KeymasterDefs.KM_MODE_ECB));
-        byte[][] testVectors = new byte[][] {
-            hexToBytes("6bc1bee22e409f96e93d7e117393172a"),
-            hexToBytes("ae2d8a571e03ac9c9eb76fac45af8e51"),
-            hexToBytes("30c81c46a35ce411e5fbc1191a0a52ef"),
-            hexToBytes("f69f2445df4f9b17ad2b417be66c3710")};
-        byte[][] cipherVectors = new byte[][] {
-            hexToBytes("f3eed1bdb5d2a03c064b5a7e3db181f8"),
-            hexToBytes("591ccb10d410ed26dc5ba74a31362870"),
-            hexToBytes("b6ed21b99ca6f4f9f153e7b1beafed1d"),
-            hexToBytes("23304b7a39f9f3ff067d8d8f9e24ecc7")};
-        KeymasterArguments beginArgs = new KeymasterArguments();
-        beginArgs.addEnum(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_AES);
-        beginArgs.addEnum(KeymasterDefs.KM_TAG_BLOCK_MODE, KeymasterDefs.KM_MODE_ECB);
-        beginArgs.addEnum(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
-        for (int i = 0; i < testVectors.length; i++) {
-            byte[] cipherText = doOperation(name, KeymasterDefs.KM_PURPOSE_ENCRYPT, testVectors[i],
-                    beginArgs);
-            MoreAsserts.assertEquals(cipherVectors[i], cipherText);
-        }
-        for (int i = 0; i < testVectors.length; i++) {
-            byte[] plainText = doOperation(name, KeymasterDefs.KM_PURPOSE_DECRYPT,
-                    cipherVectors[i], beginArgs);
-            MoreAsserts.assertEquals(testVectors[i], plainText);
-        }
-    }
-
-    // This is a very implementation specific test and should be thrown out eventually, however it
-    // is nice for now to test that keystore is properly pruning operations.
-    public void testOperationPruning() throws Exception {
-        String name = "test";
-        KeymasterArguments args = new KeymasterArguments();
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_ENCRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_DECRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_AES);
-        args.addEnum(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
-        args.addUnsignedInt(KeymasterDefs.KM_TAG_KEY_SIZE, 256);
-        args.addEnum(KeymasterDefs.KM_TAG_BLOCK_MODE, KeymasterDefs.KM_MODE_CTR);
-        args.addBoolean(KeymasterDefs.KM_TAG_NO_AUTH_REQUIRED);
-
-        KeyCharacteristics outCharacteristics = new KeyCharacteristics();
-        int rc = mKeyStore.generateKey(name, args, null, 0, outCharacteristics);
-        assertEquals("Generate should succeed", KeyStore.NO_ERROR, rc);
-
-        args = new KeymasterArguments();
-        args.addEnum(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_AES);
-        args.addEnum(KeymasterDefs.KM_TAG_BLOCK_MODE, KeymasterDefs.KM_MODE_CTR);
-        args.addEnum(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
-        OperationResult result = mKeyStore.begin(name, KeymasterDefs.KM_PURPOSE_ENCRYPT,
-                true, args, null);
-        assertEquals("Begin should succeed", KeyStore.NO_ERROR, result.resultCode);
-        IBinder first = result.token;
-        // Implementation detail: softkeymaster supports 16 concurrent operations
-        for (int i = 0; i < 16; i++) {
-            result = mKeyStore.begin(name, KeymasterDefs.KM_PURPOSE_ENCRYPT, true, args, null);
-            assertEquals("Begin should succeed", KeyStore.NO_ERROR, result.resultCode);
-        }
-        // At this point the first operation should be pruned.
-        assertEquals("Operation should be pruned", KeymasterDefs.KM_ERROR_INVALID_OPERATION_HANDLE,
-                mKeyStore.update(first, null, new byte[] {0x01}).resultCode);
-    }
-
-    public void testAuthNeeded() throws Exception {
-        String name = "test";
-        KeymasterArguments args = new KeymasterArguments();
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_ENCRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_PURPOSE, KeymasterDefs.KM_PURPOSE_DECRYPT);
-        args.addEnum(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_AES);
-        args.addEnum(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_PKCS7);
-        args.addUnsignedInt(KeymasterDefs.KM_TAG_KEY_SIZE, 256);
-        args.addEnum(KeymasterDefs.KM_TAG_BLOCK_MODE, KeymasterDefs.KM_MODE_ECB);
-        args.addEnum(KeymasterDefs.KM_TAG_USER_AUTH_TYPE, 1);
-
-        KeyCharacteristics outCharacteristics = new KeyCharacteristics();
-        int rc = mKeyStore.generateKey(name, args, null, 0, outCharacteristics);
-        assertEquals("Generate should succeed", KeyStore.NO_ERROR, rc);
-        OperationResult result = mKeyStore.begin(name, KeymasterDefs.KM_PURPOSE_ENCRYPT,
-                true, args, null);
-        assertEquals("Begin should expect authorization", KeyStore.OP_AUTH_NEEDED,
-                result.resultCode);
-        IBinder token = result.token;
-        result = mKeyStore.update(token, null, new byte[] {0x01, 0x02, 0x03, 0x04});
-        assertEquals("Update should require authorization",
-                KeymasterDefs.KM_ERROR_KEY_USER_NOT_AUTHENTICATED, result.resultCode);
-    }
-
-    public void testPasswordRemovalEncryptedEntry() throws Exception {
-        mKeyStore.onUserPasswordChanged("test");
-        assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
-                KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME));
-        assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
-        mKeyStore.onUserPasswordChanged("");
-        // Removing the password should have deleted all entries using FLAG_ENCRYPTED
-        assertNull(mKeyStore.get(TEST_KEYNAME));
-        assertFalse(mKeyStore.contains(TEST_KEYNAME));
-    }
-
-    public void testPasswordRemovalUnencryptedEntry() throws Exception {
-        mKeyStore.onUserPasswordChanged("test");
-        assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
-                KeyStore.FLAG_NONE));
-        assertTrue(mKeyStore.contains(TEST_KEYNAME));
-        assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
-        mKeyStore.onUserPasswordChanged("");
-        // Removing the password should not delete unencrypted entries.
-        assertTrue(mKeyStore.contains(TEST_KEYNAME));
-        assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
-    }
-}
diff --git a/keystore/tests/src/android/security/SystemKeyStoreTest.java b/keystore/tests/src/android/security/SystemKeyStoreTest.java
deleted file mode 100644
index ecf7cbc..0000000
--- a/keystore/tests/src/android/security/SystemKeyStoreTest.java
+++ /dev/null
@@ -1,90 +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 android.security;
-
-import android.app.Activity;
-import android.security.SystemKeyStore;
-import android.test.ActivityUnitTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-
-/**
- * Junit / Instrumentation test case for KeyStore class
- *
- * Running the test suite:
- *
- *  runtest keystore-unit
- *
- * Or this individual test case:
- *
- *  runtest --path frameworks/base/keystore/tests/src/android/security/SystemKeyStoreTest.java
- */
-@MediumTest
-public class SystemKeyStoreTest extends ActivityUnitTestCase<Activity> {
-
-    private static final String keyName = "TestKey";
-    private static final String keyName2 = "TestKey2";
-    private SystemKeyStore mSysKeyStore = null;
-
-    public SystemKeyStoreTest() {
-        super(Activity.class);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        mSysKeyStore = SystemKeyStore.getInstance();
-        try {
-            mSysKeyStore.deleteKey(keyName);
-            mSysKeyStore.deleteKey(keyName2);
-        } catch (Exception e) { }
-        super.setUp();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        try {
-            mSysKeyStore.deleteKey(keyName);
-            mSysKeyStore.deleteKey(keyName2);
-        } catch (Exception e) { }
-        super.tearDown();
-    }
-
-    public void testBasicAccess() throws Exception {
-        try {
-            byte[] newKey = mSysKeyStore.generateNewKey(128, "AES", keyName);
-            assertNotNull(newKey);
-            byte[] recKey = mSysKeyStore.retrieveKey(keyName);
-            assertEquals(newKey.length, recKey.length);
-            for (int i = 0; i < newKey.length; i++) {
-                assertEquals(newKey[i], recKey[i]);
-            }
-            mSysKeyStore.deleteKey(keyName);
-            byte[] nullKey = mSysKeyStore.retrieveKey(keyName);
-            assertNull(nullKey);
-
-            String newKeyStr = mSysKeyStore.generateNewKeyHexString(128, "AES", keyName2);
-            assertNotNull(newKeyStr);
-            String recKeyStr = mSysKeyStore.retrieveKeyHexString(keyName2);
-            assertEquals(newKeyStr, recKeyStr);
-
-            mSysKeyStore.deleteKey(keyName2);
-            String nullKey2 = mSysKeyStore.retrieveKeyHexString(keyName2);
-            assertNull(nullKey2);
-        } catch (Exception e) {
-            fail();
-        }
-    }
-}
diff --git a/keystore/tests/src/android/security/keystore/AndroidKeyPairGeneratorTest.java b/keystore/tests/src/android/security/keystore/AndroidKeyPairGeneratorTest.java
deleted file mode 100644
index 1af0b7d..0000000
--- a/keystore/tests/src/android/security/keystore/AndroidKeyPairGeneratorTest.java
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.security.keystore;
-
-import android.security.Credentials;
-import android.security.KeyPairGeneratorSpec;
-import android.security.KeyStore;
-import android.security.keymaster.ExportResult;
-import android.security.keymaster.KeymasterDefs;
-import android.test.AndroidTestCase;
-
-import java.io.ByteArrayInputStream;
-import java.math.BigInteger;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.security.interfaces.ECKey;
-import java.security.interfaces.ECPublicKey;
-import java.security.interfaces.RSAKey;
-import java.security.interfaces.RSAPublicKey;
-import java.security.spec.AlgorithmParameterSpec;
-import java.security.spec.RSAKeyGenParameterSpec;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Date;
-
-import javax.security.auth.x500.X500Principal;
-
-public class AndroidKeyPairGeneratorTest extends AndroidTestCase {
-    private android.security.KeyStore mAndroidKeyStore;
-
-    private java.security.KeyPairGenerator mGenerator;
-
-    private static final String TEST_ALIAS_1 = "test1";
-
-    private static final String TEST_ALIAS_2 = "test2";
-
-    private static final X500Principal TEST_DN_1 = new X500Principal("CN=test1");
-
-    private static final X500Principal TEST_DN_2 = new X500Principal("CN=test2");
-
-    private static final BigInteger TEST_SERIAL_1 = BigInteger.ONE;
-
-    private static final BigInteger TEST_SERIAL_2 = BigInteger.valueOf(2L);
-
-    private static final long NOW_MILLIS = System.currentTimeMillis();
-
-    /* We have to round this off because X509v3 doesn't store milliseconds. */
-    private static final Date NOW = new Date(NOW_MILLIS - (NOW_MILLIS % 1000L));
-
-    @SuppressWarnings("deprecation")
-    private static final Date NOW_PLUS_10_YEARS = new Date(NOW.getYear() + 10, 0, 1);
-
-    @Override
-    protected void setUp() throws Exception {
-        mAndroidKeyStore = android.security.KeyStore.getInstance();
-
-        assertTrue(mAndroidKeyStore.reset());
-
-        assertFalse(mAndroidKeyStore.isUnlocked());
-
-        mGenerator = java.security.KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
-    }
-
-    private void setupPassword() {
-        assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
-        assertTrue(mAndroidKeyStore.isUnlocked());
-
-        String[] aliases = mAndroidKeyStore.list("");
-        assertNotNull(aliases);
-        assertEquals(0, aliases.length);
-    }
-
-    public void testKeyPairGenerator_Initialize_Params_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext())
-                .setAlias(TEST_ALIAS_1)
-                .setSubject(TEST_DN_1)
-                .setSerialNumber(TEST_SERIAL_1)
-                .setStartDate(NOW)
-                .setEndDate(NOW_PLUS_10_YEARS)
-                .setEncryptionRequired()
-                .build());
-    }
-
-    public void testKeyPairGenerator_Initialize_KeySize_Encrypted_Failure() throws Exception {
-        setupPassword();
-
-        try {
-            mGenerator.initialize(1024);
-            fail("KeyPairGenerator should not support setting the key size");
-        } catch (IllegalArgumentException success) {
-        }
-    }
-
-    public void testKeyPairGenerator_Initialize_KeySizeAndSecureRandom_Encrypted_Failure()
-            throws Exception {
-        setupPassword();
-
-        try {
-            mGenerator.initialize(1024, new SecureRandom());
-            fail("KeyPairGenerator should not support setting the key size");
-        } catch (IllegalArgumentException success) {
-        }
-    }
-
-    public void testKeyPairGenerator_Initialize_ParamsAndSecureRandom_Encrypted_Failure()
-            throws Exception {
-        setupPassword();
-
-        mGenerator.initialize(
-                new KeyPairGeneratorSpec.Builder(getContext())
-                        .setAlias(TEST_ALIAS_1)
-                        .setKeyType("RSA")
-                        .setKeySize(1024)
-                        .setSubject(TEST_DN_1)
-                        .setSerialNumber(TEST_SERIAL_1)
-                        .setStartDate(NOW)
-                        .setEndDate(NOW_PLUS_10_YEARS)
-                        .setEncryptionRequired()
-                        .build(),
-                new SecureRandom());
-    }
-
-    public void testKeyPairGenerator_GenerateKeyPair_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext())
-                .setAlias(TEST_ALIAS_1)
-                .setSubject(TEST_DN_1)
-                .setSerialNumber(TEST_SERIAL_1)
-                .setStartDate(NOW)
-                .setEndDate(NOW_PLUS_10_YEARS)
-                .setEncryptionRequired()
-                .build());
-
-        final KeyPair pair = mGenerator.generateKeyPair();
-        assertNotNull("The KeyPair returned should not be null", pair);
-
-        assertKeyPairCorrect(pair, TEST_ALIAS_1, "RSA", 2048, null, TEST_DN_1, TEST_SERIAL_1, NOW,
-                NOW_PLUS_10_YEARS);
-    }
-
-    public void testKeyPairGenerator_GenerateKeyPair_EC_Unencrypted_Success() throws Exception {
-        KeyPairGenerator generator = KeyPairGenerator.getInstance("EC", "AndroidKeyStore");
-        generator.initialize(new KeyGenParameterSpec.Builder(
-                TEST_ALIAS_1,
-                KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
-                .setCertificateSubject(TEST_DN_1)
-                .setCertificateSerialNumber(TEST_SERIAL_1)
-                .setCertificateNotBefore(NOW)
-                .setCertificateNotAfter(NOW_PLUS_10_YEARS)
-                .setDigests(KeyProperties.DIGEST_SHA256)
-                .build());
-
-        final KeyPair pair = generator.generateKeyPair();
-        assertNotNull("The KeyPair returned should not be null", pair);
-
-        assertKeyPairCorrect(pair, TEST_ALIAS_1, "EC", 256, null, TEST_DN_1, TEST_SERIAL_1, NOW,
-                NOW_PLUS_10_YEARS);
-    }
-
-    public void testKeyPairGenerator_Legacy_GenerateKeyPair_EC_Unencrypted_Success()
-            throws Exception {
-        mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext())
-                .setAlias(TEST_ALIAS_1)
-                .setKeyType("EC")
-                .setSubject(TEST_DN_1)
-                .setSerialNumber(TEST_SERIAL_1)
-                .setStartDate(NOW)
-                .setEndDate(NOW_PLUS_10_YEARS)
-                .build());
-
-        final KeyPair pair = mGenerator.generateKeyPair();
-        assertNotNull("The KeyPair returned should not be null", pair);
-
-        assertKeyPairCorrect(pair, TEST_ALIAS_1, "EC", 256, null, TEST_DN_1, TEST_SERIAL_1, NOW,
-                NOW_PLUS_10_YEARS);
-    }
-
-    public void testKeyPairGenerator_GenerateKeyPair_EC_P521_Unencrypted_Success() throws Exception {
-        mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext())
-                .setAlias(TEST_ALIAS_1)
-                .setKeyType("EC")
-                .setKeySize(521)
-                .setSubject(TEST_DN_1)
-                .setSerialNumber(TEST_SERIAL_1)
-                .setStartDate(NOW)
-                .setEndDate(NOW_PLUS_10_YEARS)
-                .build());
-
-        final KeyPair pair = mGenerator.generateKeyPair();
-        assertNotNull("The KeyPair returned should not be null", pair);
-
-        assertKeyPairCorrect(pair, TEST_ALIAS_1, "EC", 521, null, TEST_DN_1, TEST_SERIAL_1, NOW,
-                NOW_PLUS_10_YEARS);
-    }
-
-    public void testKeyPairGenerator_GenerateKeyPair_RSA_Unencrypted_Success() throws Exception {
-        mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext())
-                .setAlias(TEST_ALIAS_1)
-                .setSubject(TEST_DN_1)
-                .setSerialNumber(TEST_SERIAL_1)
-                .setStartDate(NOW)
-                .setEndDate(NOW_PLUS_10_YEARS)
-                .build());
-
-        final KeyPair pair = mGenerator.generateKeyPair();
-        assertNotNull("The KeyPair returned should not be null", pair);
-
-        assertKeyPairCorrect(pair, TEST_ALIAS_1, "RSA", 2048, null, TEST_DN_1, TEST_SERIAL_1, NOW,
-                NOW_PLUS_10_YEARS);
-    }
-
-    public void testKeyPairGenerator_GenerateKeyPair_RSA_WithParams_Unencrypted_Success()
-            throws Exception {
-        AlgorithmParameterSpec spec = new RSAKeyGenParameterSpec(1024, BigInteger.valueOf(3L));
-        mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext())
-                .setAlias(TEST_ALIAS_1)
-                .setKeySize(1024)
-                .setAlgorithmParameterSpec(spec)
-                .setSubject(TEST_DN_1)
-                .setSerialNumber(TEST_SERIAL_1)
-                .setStartDate(NOW)
-                .setEndDate(NOW_PLUS_10_YEARS)
-                .build());
-
-        final KeyPair pair = mGenerator.generateKeyPair();
-        assertNotNull("The KeyPair returned should not be null", pair);
-
-        assertKeyPairCorrect(pair, TEST_ALIAS_1, "RSA", 1024, spec, TEST_DN_1, TEST_SERIAL_1, NOW,
-                NOW_PLUS_10_YEARS);
-    }
-
-    public void testKeyPairGenerator_GenerateKeyPair_Replaced_Success() throws Exception {
-        // Generate the first key
-        {
-            mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext())
-                    .setAlias(TEST_ALIAS_1)
-                    .setSubject(TEST_DN_1)
-                    .setSerialNumber(TEST_SERIAL_1)
-                    .setStartDate(NOW)
-                    .setEndDate(NOW_PLUS_10_YEARS)
-                    .build());
-            final KeyPair pair1 = mGenerator.generateKeyPair();
-            assertNotNull("The KeyPair returned should not be null", pair1);
-            assertKeyPairCorrect(pair1, TEST_ALIAS_1, "RSA", 2048, null, TEST_DN_1, TEST_SERIAL_1,
-                    NOW, NOW_PLUS_10_YEARS);
-        }
-
-        // Replace the original key
-        {
-            mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext())
-                    .setAlias(TEST_ALIAS_2)
-                    .setSubject(TEST_DN_2)
-                    .setSerialNumber(TEST_SERIAL_2)
-                    .setStartDate(NOW)
-                    .setEndDate(NOW_PLUS_10_YEARS)
-                    .build());
-            final KeyPair pair2 = mGenerator.generateKeyPair();
-            assertNotNull("The KeyPair returned should not be null", pair2);
-            assertKeyPairCorrect(pair2, TEST_ALIAS_2, "RSA", 2048, null, TEST_DN_2, TEST_SERIAL_2,
-                    NOW, NOW_PLUS_10_YEARS);
-        }
-    }
-
-    public void testKeyPairGenerator_GenerateKeyPair_Replaced_UnencryptedToEncrypted_Success()
-            throws Exception {
-        // Generate the first key
-        {
-            mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext())
-                    .setAlias(TEST_ALIAS_1)
-                    .setSubject(TEST_DN_1)
-                    .setSerialNumber(TEST_SERIAL_1)
-                    .setStartDate(NOW)
-                    .setEndDate(NOW_PLUS_10_YEARS)
-                    .build());
-            final KeyPair pair1 = mGenerator.generateKeyPair();
-            assertNotNull("The KeyPair returned should not be null", pair1);
-            assertKeyPairCorrect(pair1, TEST_ALIAS_1, "RSA", 2048, null, TEST_DN_1, TEST_SERIAL_1,
-                    NOW, NOW_PLUS_10_YEARS);
-        }
-
-        // Attempt to replace previous key
-        {
-            mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext())
-                    .setAlias(TEST_ALIAS_1)
-                    .setSubject(TEST_DN_2)
-                    .setSerialNumber(TEST_SERIAL_2)
-                    .setStartDate(NOW)
-                    .setEndDate(NOW_PLUS_10_YEARS)
-                    .setEncryptionRequired()
-                    .build());
-            try {
-                mGenerator.generateKeyPair();
-                fail("Should not be able to generate encrypted key while not initialized");
-            } catch (IllegalStateException expected) {
-            }
-
-            assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
-            assertTrue(mAndroidKeyStore.isUnlocked());
-
-            final KeyPair pair2 = mGenerator.generateKeyPair();
-            assertNotNull("The KeyPair returned should not be null", pair2);
-            assertKeyPairCorrect(pair2, TEST_ALIAS_1, "RSA", 2048, null, TEST_DN_2, TEST_SERIAL_2,
-                    NOW, NOW_PLUS_10_YEARS);
-        }
-    }
-
-    private void assertKeyPairCorrect(KeyPair pair, String alias, String keyType, int keySize,
-            AlgorithmParameterSpec spec, X500Principal dn, BigInteger serial, Date start, Date end)
-            throws Exception {
-        final PublicKey pubKey = pair.getPublic();
-        assertNotNull("The PublicKey for the KeyPair should be not null", pubKey);
-        assertEquals(keyType, pubKey.getAlgorithm());
-
-        if ("EC".equalsIgnoreCase(keyType)) {
-            assertEquals("Curve should be what was specified during initialization", keySize,
-                    ((ECPublicKey) pubKey).getParams().getCurve().getField().getFieldSize());
-        } else if ("RSA".equalsIgnoreCase(keyType)) {
-            RSAPublicKey rsaPubKey = (RSAPublicKey) pubKey;
-            assertEquals("Modulus size should be what is specified during initialization",
-                    (keySize + 7) & ~7, (rsaPubKey.getModulus().bitLength() + 7) & ~7);
-            if (spec != null) {
-                RSAKeyGenParameterSpec params = (RSAKeyGenParameterSpec) spec;
-                assertEquals((keySize + 7) & ~7, (params.getKeysize() + 7) & ~7);
-                assertEquals(params.getPublicExponent(), rsaPubKey.getPublicExponent());
-            }
-        }
-
-        final PrivateKey privKey = pair.getPrivate();
-        assertNotNull("The PrivateKey for the KeyPair should be not null", privKey);
-        assertEquals(keyType, privKey.getAlgorithm());
-
-        if ("EC".equalsIgnoreCase(keyType)) {
-            assertTrue("EC private key must be instanceof ECKey: " + privKey.getClass().getName(),
-                    privKey instanceof ECKey);
-            assertEquals("Private and public key must have the same EC parameters",
-                    ((ECKey) pubKey).getParams(), ((ECKey) privKey).getParams());
-        } else if ("RSA".equalsIgnoreCase(keyType)) {
-            assertTrue("RSA private key must be instance of RSAKey: "
-                    + privKey.getClass().getName(),
-                    privKey instanceof RSAKey);
-            assertEquals("Private and public key must have the same RSA modulus",
-                    ((RSAKey) pubKey).getModulus(), ((RSAKey) privKey).getModulus());
-        }
-
-        final byte[] userCertBytes = mAndroidKeyStore.get(Credentials.USER_CERTIFICATE + alias);
-        assertNotNull("The user certificate should exist for the generated entry", userCertBytes);
-
-        final CertificateFactory cf = CertificateFactory.getInstance("X.509");
-        final Certificate userCert =
-                cf.generateCertificate(new ByteArrayInputStream(userCertBytes));
-
-        assertTrue("Certificate should be in X.509 format", userCert instanceof X509Certificate);
-
-        final X509Certificate x509userCert = (X509Certificate) userCert;
-
-        assertEquals(
-                "Public key used to sign certificate should have the same algorithm as in KeyPair",
-                pubKey.getAlgorithm(), x509userCert.getPublicKey().getAlgorithm());
-
-        assertEquals("PublicKey used to sign certificate should match one returned in KeyPair",
-                pubKey,
-                AndroidKeyStoreProvider.getAndroidKeyStorePublicKey(
-                        Credentials.USER_PRIVATE_KEY + alias,
-                        KeyStore.UID_SELF,
-                        x509userCert.getPublicKey().getAlgorithm(),
-                        x509userCert.getPublicKey().getEncoded()));
-
-        assertEquals("The Subject DN should be the one passed into the params", dn,
-                x509userCert.getSubjectDN());
-
-        assertEquals("The Issuer DN should be the same as the Subject DN", dn,
-                x509userCert.getIssuerDN());
-
-        assertEquals("The Serial should be the one passed into the params", serial,
-                x509userCert.getSerialNumber());
-
-        assertDateEquals("The notBefore date should be the one passed into the params", start,
-                x509userCert.getNotBefore());
-
-        assertDateEquals("The notAfter date should be the one passed into the params", end,
-                x509userCert.getNotAfter());
-
-        // Assert that the cert's signature verifies using the public key from generated KeyPair
-        x509userCert.verify(pubKey);
-        // Assert that the cert's signature verifies using the public key from the cert itself.
-        x509userCert.verify(x509userCert.getPublicKey());
-
-        final byte[] caCerts = mAndroidKeyStore.get(Credentials.CA_CERTIFICATE + alias);
-        assertNull("A list of CA certificates should not exist for the generated entry", caCerts);
-
-        ExportResult exportResult = mAndroidKeyStore.exportKey(
-                Credentials.USER_PRIVATE_KEY + alias, KeymasterDefs.KM_KEY_FORMAT_X509, null, null);
-        assertEquals(KeyStore.NO_ERROR, exportResult.resultCode);
-        final byte[] pubKeyBytes = exportResult.exportData;
-        assertNotNull("The keystore should return the public key for the generated key",
-                pubKeyBytes);
-        assertTrue("Public key X.509 format should be as expected",
-                Arrays.equals(pubKey.getEncoded(), pubKeyBytes));
-    }
-
-    private static void assertDateEquals(String message, Date date1, Date date2) throws Exception {
-        SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss");
-
-        String result1 = formatter.format(date1);
-        String result2 = formatter.format(date2);
-
-        assertEquals(message, result1, result2);
-    }
-}
diff --git a/keystore/tests/src/android/security/keystore/AndroidKeyStoreTest.java b/keystore/tests/src/android/security/keystore/AndroidKeyStoreTest.java
deleted file mode 100644
index aa718dc..0000000
--- a/keystore/tests/src/android/security/keystore/AndroidKeyStoreTest.java
+++ /dev/null
@@ -1,2210 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.security.keystore;
-
-import com.android.org.bouncycastle.x509.X509V3CertificateGenerator;
-
-import com.android.org.conscrypt.NativeConstants;
-
-import android.security.Credentials;
-import android.security.KeyStore;
-import android.security.KeyStoreParameter;
-import android.test.AndroidTestCase;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-import java.math.BigInteger;
-import java.security.Key;
-import java.security.KeyFactory;
-import java.security.KeyPair;
-import java.security.KeyStore.Entry;
-import java.security.KeyStore.PrivateKeyEntry;
-import java.security.KeyStore.TrustedCertificateEntry;
-import java.security.KeyStoreException;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.security.interfaces.ECKey;
-import java.security.interfaces.RSAKey;
-import java.security.spec.PKCS8EncodedKeySpec;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.crypto.Cipher;
-import javax.crypto.SecretKey;
-import javax.crypto.spec.SecretKeySpec;
-import javax.security.auth.x500.X500Principal;
-
-public class AndroidKeyStoreTest extends AndroidTestCase {
-    private android.security.KeyStore mAndroidKeyStore;
-
-    private java.security.KeyStore mKeyStore;
-
-    private static final String TEST_ALIAS_1 = "test1";
-
-    private static final String TEST_ALIAS_2 = "test2";
-
-    private static final String TEST_ALIAS_3 = "test3";
-
-    private static final X500Principal TEST_DN_1 = new X500Principal("CN=test1");
-
-    private static final X500Principal TEST_DN_2 = new X500Principal("CN=test2");
-
-    private static final BigInteger TEST_SERIAL_1 = BigInteger.ONE;
-
-    private static final BigInteger TEST_SERIAL_2 = BigInteger.valueOf(2L);
-
-    private static final long NOW_MILLIS = System.currentTimeMillis();
-
-    /* We have to round this off because X509v3 doesn't store milliseconds. */
-    private static final Date NOW = new Date(NOW_MILLIS - (NOW_MILLIS % 1000L));
-
-    @SuppressWarnings("deprecation")
-    private static final Date NOW_PLUS_10_YEARS = new Date(NOW.getYear() + 10, 0, 1);
-
-    /*
-     * The keys and certificates below are generated with:
-     *
-     * openssl req -new -x509 -days 3650 -extensions v3_ca -keyout cakey.pem -out cacert.pem
-     * openssl req -newkey rsa:1024 -keyout userkey.pem -nodes -days 3650 -out userkey.req
-     * mkdir -p demoCA/newcerts
-     * touch demoCA/index.txt
-     * echo "01" > demoCA/serial
-     * openssl ca -out usercert.pem -in userkey.req -cert cacert.pem -keyfile cakey.pem -days 3650
-     */
-
-    /**
-     * Generated from above and converted with:
-     *
-     * openssl x509 -outform d -in cacert.pem | xxd -i | sed 's/0x/(byte) 0x/g'
-     */
-    private static final byte[] FAKE_RSA_CA_1 = {
-            (byte) 0x30, (byte) 0x82, (byte) 0x02, (byte) 0xce, (byte) 0x30, (byte) 0x82,
-            (byte) 0x02, (byte) 0x37, (byte) 0xa0, (byte) 0x03, (byte) 0x02, (byte) 0x01,
-            (byte) 0x02, (byte) 0x02, (byte) 0x09, (byte) 0x00, (byte) 0xe1, (byte) 0x6a,
-            (byte) 0xa2, (byte) 0xf4, (byte) 0x2e, (byte) 0x55, (byte) 0x48, (byte) 0x0a,
-            (byte) 0x30, (byte) 0x0d, (byte) 0x06, (byte) 0x09, (byte) 0x2a, (byte) 0x86,
-            (byte) 0x48, (byte) 0x86, (byte) 0xf7, (byte) 0x0d, (byte) 0x01, (byte) 0x01,
-            (byte) 0x05, (byte) 0x05, (byte) 0x00, (byte) 0x30, (byte) 0x4f, (byte) 0x31,
-            (byte) 0x0b, (byte) 0x30, (byte) 0x09, (byte) 0x06, (byte) 0x03, (byte) 0x55,
-            (byte) 0x04, (byte) 0x06, (byte) 0x13, (byte) 0x02, (byte) 0x55, (byte) 0x53,
-            (byte) 0x31, (byte) 0x0b, (byte) 0x30, (byte) 0x09, (byte) 0x06, (byte) 0x03,
-            (byte) 0x55, (byte) 0x04, (byte) 0x08, (byte) 0x13, (byte) 0x02, (byte) 0x43,
-            (byte) 0x41, (byte) 0x31, (byte) 0x16, (byte) 0x30, (byte) 0x14, (byte) 0x06,
-            (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x07, (byte) 0x13, (byte) 0x0d,
-            (byte) 0x4d, (byte) 0x6f, (byte) 0x75, (byte) 0x6e, (byte) 0x74, (byte) 0x61,
-            (byte) 0x69, (byte) 0x6e, (byte) 0x20, (byte) 0x56, (byte) 0x69, (byte) 0x65,
-            (byte) 0x77, (byte) 0x31, (byte) 0x1b, (byte) 0x30, (byte) 0x19, (byte) 0x06,
-            (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x0a, (byte) 0x13, (byte) 0x12,
-            (byte) 0x41, (byte) 0x6e, (byte) 0x64, (byte) 0x72, (byte) 0x6f, (byte) 0x69,
-            (byte) 0x64, (byte) 0x20, (byte) 0x54, (byte) 0x65, (byte) 0x73, (byte) 0x74,
-            (byte) 0x20, (byte) 0x43, (byte) 0x61, (byte) 0x73, (byte) 0x65, (byte) 0x73,
-            (byte) 0x30, (byte) 0x1e, (byte) 0x17, (byte) 0x0d, (byte) 0x31, (byte) 0x32,
-            (byte) 0x30, (byte) 0x38, (byte) 0x31, (byte) 0x34, (byte) 0x31, (byte) 0x36,
-            (byte) 0x35, (byte) 0x35, (byte) 0x34, (byte) 0x34, (byte) 0x5a, (byte) 0x17,
-            (byte) 0x0d, (byte) 0x32, (byte) 0x32, (byte) 0x30, (byte) 0x38, (byte) 0x31,
-            (byte) 0x32, (byte) 0x31, (byte) 0x36, (byte) 0x35, (byte) 0x35, (byte) 0x34,
-            (byte) 0x34, (byte) 0x5a, (byte) 0x30, (byte) 0x4f, (byte) 0x31, (byte) 0x0b,
-            (byte) 0x30, (byte) 0x09, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04,
-            (byte) 0x06, (byte) 0x13, (byte) 0x02, (byte) 0x55, (byte) 0x53, (byte) 0x31,
-            (byte) 0x0b, (byte) 0x30, (byte) 0x09, (byte) 0x06, (byte) 0x03, (byte) 0x55,
-            (byte) 0x04, (byte) 0x08, (byte) 0x13, (byte) 0x02, (byte) 0x43, (byte) 0x41,
-            (byte) 0x31, (byte) 0x16, (byte) 0x30, (byte) 0x14, (byte) 0x06, (byte) 0x03,
-            (byte) 0x55, (byte) 0x04, (byte) 0x07, (byte) 0x13, (byte) 0x0d, (byte) 0x4d,
-            (byte) 0x6f, (byte) 0x75, (byte) 0x6e, (byte) 0x74, (byte) 0x61, (byte) 0x69,
-            (byte) 0x6e, (byte) 0x20, (byte) 0x56, (byte) 0x69, (byte) 0x65, (byte) 0x77,
-            (byte) 0x31, (byte) 0x1b, (byte) 0x30, (byte) 0x19, (byte) 0x06, (byte) 0x03,
-            (byte) 0x55, (byte) 0x04, (byte) 0x0a, (byte) 0x13, (byte) 0x12, (byte) 0x41,
-            (byte) 0x6e, (byte) 0x64, (byte) 0x72, (byte) 0x6f, (byte) 0x69, (byte) 0x64,
-            (byte) 0x20, (byte) 0x54, (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x20,
-            (byte) 0x43, (byte) 0x61, (byte) 0x73, (byte) 0x65, (byte) 0x73, (byte) 0x30,
-            (byte) 0x81, (byte) 0x9f, (byte) 0x30, (byte) 0x0d, (byte) 0x06, (byte) 0x09,
-            (byte) 0x2a, (byte) 0x86, (byte) 0x48, (byte) 0x86, (byte) 0xf7, (byte) 0x0d,
-            (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x05, (byte) 0x00, (byte) 0x03,
-            (byte) 0x81, (byte) 0x8d, (byte) 0x00, (byte) 0x30, (byte) 0x81, (byte) 0x89,
-            (byte) 0x02, (byte) 0x81, (byte) 0x81, (byte) 0x00, (byte) 0xa3, (byte) 0x72,
-            (byte) 0xab, (byte) 0xd0, (byte) 0xe4, (byte) 0xad, (byte) 0x2f, (byte) 0xe7,
-            (byte) 0xe2, (byte) 0x79, (byte) 0x07, (byte) 0x36, (byte) 0x3d, (byte) 0x0c,
-            (byte) 0x8d, (byte) 0x42, (byte) 0x9a, (byte) 0x0a, (byte) 0x33, (byte) 0x64,
-            (byte) 0xb3, (byte) 0xcd, (byte) 0xb2, (byte) 0xd7, (byte) 0x3a, (byte) 0x42,
-            (byte) 0x06, (byte) 0x77, (byte) 0x45, (byte) 0x29, (byte) 0xe9, (byte) 0xcb,
-            (byte) 0xb7, (byte) 0x4a, (byte) 0xd6, (byte) 0xee, (byte) 0xad, (byte) 0x01,
-            (byte) 0x91, (byte) 0x9b, (byte) 0x0c, (byte) 0x59, (byte) 0xa1, (byte) 0x03,
-            (byte) 0xfa, (byte) 0xf0, (byte) 0x5a, (byte) 0x7c, (byte) 0x4f, (byte) 0xf7,
-            (byte) 0x8d, (byte) 0x36, (byte) 0x0f, (byte) 0x1f, (byte) 0x45, (byte) 0x7d,
-            (byte) 0x1b, (byte) 0x31, (byte) 0xa1, (byte) 0x35, (byte) 0x0b, (byte) 0x00,
-            (byte) 0xed, (byte) 0x7a, (byte) 0xb6, (byte) 0xc8, (byte) 0x4e, (byte) 0xa9,
-            (byte) 0x86, (byte) 0x4c, (byte) 0x7b, (byte) 0x99, (byte) 0x57, (byte) 0x41,
-            (byte) 0x12, (byte) 0xef, (byte) 0x6b, (byte) 0xbc, (byte) 0x3d, (byte) 0x60,
-            (byte) 0xf2, (byte) 0x99, (byte) 0x1a, (byte) 0xcd, (byte) 0xed, (byte) 0x56,
-            (byte) 0xa4, (byte) 0xe5, (byte) 0x36, (byte) 0x9f, (byte) 0x24, (byte) 0x1f,
-            (byte) 0xdc, (byte) 0x89, (byte) 0x40, (byte) 0xc8, (byte) 0x99, (byte) 0x92,
-            (byte) 0xab, (byte) 0x4a, (byte) 0xb5, (byte) 0x61, (byte) 0x45, (byte) 0x62,
-            (byte) 0xff, (byte) 0xa3, (byte) 0x45, (byte) 0x65, (byte) 0xaf, (byte) 0xf6,
-            (byte) 0x27, (byte) 0x30, (byte) 0x51, (byte) 0x0e, (byte) 0x0e, (byte) 0xeb,
-            (byte) 0x79, (byte) 0x0c, (byte) 0xbe, (byte) 0xb3, (byte) 0x0a, (byte) 0x6f,
-            (byte) 0x29, (byte) 0x06, (byte) 0xdc, (byte) 0x2f, (byte) 0x6b, (byte) 0x51,
-            (byte) 0x02, (byte) 0x03, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0xa3,
-            (byte) 0x81, (byte) 0xb1, (byte) 0x30, (byte) 0x81, (byte) 0xae, (byte) 0x30,
-            (byte) 0x1d, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x1d, (byte) 0x0e,
-            (byte) 0x04, (byte) 0x16, (byte) 0x04, (byte) 0x14, (byte) 0x33, (byte) 0x05,
-            (byte) 0xee, (byte) 0xfe, (byte) 0x6f, (byte) 0x60, (byte) 0xc7, (byte) 0xf9,
-            (byte) 0xa9, (byte) 0xd2, (byte) 0x73, (byte) 0x5c, (byte) 0x8f, (byte) 0x6d,
-            (byte) 0xa2, (byte) 0x2f, (byte) 0x97, (byte) 0x8e, (byte) 0x5d, (byte) 0x51,
-            (byte) 0x30, (byte) 0x7f, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x1d,
-            (byte) 0x23, (byte) 0x04, (byte) 0x78, (byte) 0x30, (byte) 0x76, (byte) 0x80,
-            (byte) 0x14, (byte) 0x33, (byte) 0x05, (byte) 0xee, (byte) 0xfe, (byte) 0x6f,
-            (byte) 0x60, (byte) 0xc7, (byte) 0xf9, (byte) 0xa9, (byte) 0xd2, (byte) 0x73,
-            (byte) 0x5c, (byte) 0x8f, (byte) 0x6d, (byte) 0xa2, (byte) 0x2f, (byte) 0x97,
-            (byte) 0x8e, (byte) 0x5d, (byte) 0x51, (byte) 0xa1, (byte) 0x53, (byte) 0xa4,
-            (byte) 0x51, (byte) 0x30, (byte) 0x4f, (byte) 0x31, (byte) 0x0b, (byte) 0x30,
-            (byte) 0x09, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x06,
-            (byte) 0x13, (byte) 0x02, (byte) 0x55, (byte) 0x53, (byte) 0x31, (byte) 0x0b,
-            (byte) 0x30, (byte) 0x09, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04,
-            (byte) 0x08, (byte) 0x13, (byte) 0x02, (byte) 0x43, (byte) 0x41, (byte) 0x31,
-            (byte) 0x16, (byte) 0x30, (byte) 0x14, (byte) 0x06, (byte) 0x03, (byte) 0x55,
-            (byte) 0x04, (byte) 0x07, (byte) 0x13, (byte) 0x0d, (byte) 0x4d, (byte) 0x6f,
-            (byte) 0x75, (byte) 0x6e, (byte) 0x74, (byte) 0x61, (byte) 0x69, (byte) 0x6e,
-            (byte) 0x20, (byte) 0x56, (byte) 0x69, (byte) 0x65, (byte) 0x77, (byte) 0x31,
-            (byte) 0x1b, (byte) 0x30, (byte) 0x19, (byte) 0x06, (byte) 0x03, (byte) 0x55,
-            (byte) 0x04, (byte) 0x0a, (byte) 0x13, (byte) 0x12, (byte) 0x41, (byte) 0x6e,
-            (byte) 0x64, (byte) 0x72, (byte) 0x6f, (byte) 0x69, (byte) 0x64, (byte) 0x20,
-            (byte) 0x54, (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x20, (byte) 0x43,
-            (byte) 0x61, (byte) 0x73, (byte) 0x65, (byte) 0x73, (byte) 0x82, (byte) 0x09,
-            (byte) 0x00, (byte) 0xe1, (byte) 0x6a, (byte) 0xa2, (byte) 0xf4, (byte) 0x2e,
-            (byte) 0x55, (byte) 0x48, (byte) 0x0a, (byte) 0x30, (byte) 0x0c, (byte) 0x06,
-            (byte) 0x03, (byte) 0x55, (byte) 0x1d, (byte) 0x13, (byte) 0x04, (byte) 0x05,
-            (byte) 0x30, (byte) 0x03, (byte) 0x01, (byte) 0x01, (byte) 0xff, (byte) 0x30,
-            (byte) 0x0d, (byte) 0x06, (byte) 0x09, (byte) 0x2a, (byte) 0x86, (byte) 0x48,
-            (byte) 0x86, (byte) 0xf7, (byte) 0x0d, (byte) 0x01, (byte) 0x01, (byte) 0x05,
-            (byte) 0x05, (byte) 0x00, (byte) 0x03, (byte) 0x81, (byte) 0x81, (byte) 0x00,
-            (byte) 0x8c, (byte) 0x30, (byte) 0x42, (byte) 0xfa, (byte) 0xeb, (byte) 0x1a,
-            (byte) 0x26, (byte) 0xeb, (byte) 0xda, (byte) 0x56, (byte) 0x32, (byte) 0xf2,
-            (byte) 0x9d, (byte) 0xa5, (byte) 0x24, (byte) 0xd8, (byte) 0x3a, (byte) 0xda,
-            (byte) 0x30, (byte) 0xa6, (byte) 0x8b, (byte) 0x46, (byte) 0xfe, (byte) 0xfe,
-            (byte) 0xdb, (byte) 0xf1, (byte) 0xe6, (byte) 0xe1, (byte) 0x7c, (byte) 0x1b,
-            (byte) 0xe7, (byte) 0x77, (byte) 0x00, (byte) 0xa1, (byte) 0x1c, (byte) 0x19,
-            (byte) 0x17, (byte) 0x73, (byte) 0xb0, (byte) 0xf0, (byte) 0x9d, (byte) 0xf3,
-            (byte) 0x4f, (byte) 0xb6, (byte) 0xbc, (byte) 0xc7, (byte) 0x47, (byte) 0x85,
-            (byte) 0x2a, (byte) 0x4a, (byte) 0xa1, (byte) 0xa5, (byte) 0x58, (byte) 0xf5,
-            (byte) 0xc5, (byte) 0x1a, (byte) 0x51, (byte) 0xb1, (byte) 0x04, (byte) 0x80,
-            (byte) 0xee, (byte) 0x3a, (byte) 0xec, (byte) 0x2f, (byte) 0xe1, (byte) 0xfd,
-            (byte) 0x58, (byte) 0xeb, (byte) 0xed, (byte) 0x82, (byte) 0x9e, (byte) 0x38,
-            (byte) 0xa3, (byte) 0x24, (byte) 0x75, (byte) 0xf7, (byte) 0x3e, (byte) 0xc2,
-            (byte) 0xc5, (byte) 0x27, (byte) 0xeb, (byte) 0x6f, (byte) 0x7b, (byte) 0x50,
-            (byte) 0xda, (byte) 0x43, (byte) 0xdc, (byte) 0x3b, (byte) 0x0b, (byte) 0x6f,
-            (byte) 0x78, (byte) 0x8f, (byte) 0xb0, (byte) 0x66, (byte) 0xe1, (byte) 0x12,
-            (byte) 0x87, (byte) 0x5f, (byte) 0x97, (byte) 0x7b, (byte) 0xca, (byte) 0x14,
-            (byte) 0x79, (byte) 0xf7, (byte) 0xe8, (byte) 0x6c, (byte) 0x72, (byte) 0xdb,
-            (byte) 0x91, (byte) 0x65, (byte) 0x17, (byte) 0x54, (byte) 0xe0, (byte) 0x74,
-            (byte) 0x1d, (byte) 0xac, (byte) 0x47, (byte) 0x04, (byte) 0x12, (byte) 0xe0,
-            (byte) 0xc3, (byte) 0x66, (byte) 0x19, (byte) 0x05, (byte) 0x2e, (byte) 0x7e,
-            (byte) 0xf1, (byte) 0x61
-    };
-
-    /**
-     * Generated from above and converted with:
-     *
-     * openssl pkcs8 -topk8 -outform d -in userkey.pem -nocrypt | xxd -i | sed 's/0x/(byte) 0x/g'
-     */
-    private static final byte[] FAKE_RSA_KEY_1 = new byte[] {
-            (byte) 0x30, (byte) 0x82, (byte) 0x02, (byte) 0x78, (byte) 0x02, (byte) 0x01,
-            (byte) 0x00, (byte) 0x30, (byte) 0x0d, (byte) 0x06, (byte) 0x09, (byte) 0x2a,
-            (byte) 0x86, (byte) 0x48, (byte) 0x86, (byte) 0xf7, (byte) 0x0d, (byte) 0x01,
-            (byte) 0x01, (byte) 0x01, (byte) 0x05, (byte) 0x00, (byte) 0x04, (byte) 0x82,
-            (byte) 0x02, (byte) 0x62, (byte) 0x30, (byte) 0x82, (byte) 0x02, (byte) 0x5e,
-            (byte) 0x02, (byte) 0x01, (byte) 0x00, (byte) 0x02, (byte) 0x81, (byte) 0x81,
-            (byte) 0x00, (byte) 0xce, (byte) 0x29, (byte) 0xeb, (byte) 0xf6, (byte) 0x5b,
-            (byte) 0x25, (byte) 0xdc, (byte) 0xa1, (byte) 0xa6, (byte) 0x2c, (byte) 0x66,
-            (byte) 0xcb, (byte) 0x20, (byte) 0x90, (byte) 0x27, (byte) 0x86, (byte) 0x8a,
-            (byte) 0x44, (byte) 0x71, (byte) 0x50, (byte) 0xda, (byte) 0xd3, (byte) 0x02,
-            (byte) 0x77, (byte) 0x55, (byte) 0xe9, (byte) 0xe8, (byte) 0x08, (byte) 0xf3,
-            (byte) 0x36, (byte) 0x9a, (byte) 0xae, (byte) 0xab, (byte) 0x04, (byte) 0x6d,
-            (byte) 0x00, (byte) 0x99, (byte) 0xbf, (byte) 0x7d, (byte) 0x0f, (byte) 0x67,
-            (byte) 0x8b, (byte) 0x1d, (byte) 0xd4, (byte) 0x2b, (byte) 0x7c, (byte) 0xcb,
-            (byte) 0xcd, (byte) 0x33, (byte) 0xc7, (byte) 0x84, (byte) 0x30, (byte) 0xe2,
-            (byte) 0x45, (byte) 0x21, (byte) 0xb3, (byte) 0x75, (byte) 0xf5, (byte) 0x79,
-            (byte) 0x02, (byte) 0xda, (byte) 0x50, (byte) 0xa3, (byte) 0x8b, (byte) 0xce,
-            (byte) 0xc3, (byte) 0x8e, (byte) 0x0f, (byte) 0x25, (byte) 0xeb, (byte) 0x08,
-            (byte) 0x2c, (byte) 0xdd, (byte) 0x1c, (byte) 0xcf, (byte) 0xff, (byte) 0x3b,
-            (byte) 0xde, (byte) 0xb6, (byte) 0xaa, (byte) 0x2a, (byte) 0xa9, (byte) 0xc4,
-            (byte) 0x8a, (byte) 0x24, (byte) 0x24, (byte) 0xe6, (byte) 0x29, (byte) 0x0d,
-            (byte) 0x98, (byte) 0x4c, (byte) 0x32, (byte) 0xa1, (byte) 0x7b, (byte) 0x23,
-            (byte) 0x2b, (byte) 0x42, (byte) 0x30, (byte) 0xee, (byte) 0x78, (byte) 0x08,
-            (byte) 0x47, (byte) 0xad, (byte) 0xf2, (byte) 0x96, (byte) 0xd5, (byte) 0xf1,
-            (byte) 0x62, (byte) 0x42, (byte) 0x2d, (byte) 0x35, (byte) 0x19, (byte) 0xb4,
-            (byte) 0x3c, (byte) 0xc9, (byte) 0xc3, (byte) 0x5f, (byte) 0x03, (byte) 0x16,
-            (byte) 0x3a, (byte) 0x23, (byte) 0xac, (byte) 0xcb, (byte) 0xce, (byte) 0x9e,
-            (byte) 0x51, (byte) 0x2e, (byte) 0x6d, (byte) 0x02, (byte) 0x03, (byte) 0x01,
-            (byte) 0x00, (byte) 0x01, (byte) 0x02, (byte) 0x81, (byte) 0x80, (byte) 0x16,
-            (byte) 0x59, (byte) 0xc3, (byte) 0x24, (byte) 0x1d, (byte) 0x33, (byte) 0x98,
-            (byte) 0x9c, (byte) 0xc9, (byte) 0xc8, (byte) 0x2c, (byte) 0x88, (byte) 0xbf,
-            (byte) 0x0a, (byte) 0x01, (byte) 0xce, (byte) 0xfb, (byte) 0x34, (byte) 0x7a,
-            (byte) 0x58, (byte) 0x7a, (byte) 0xb0, (byte) 0xbf, (byte) 0xa6, (byte) 0xb2,
-            (byte) 0x60, (byte) 0xbe, (byte) 0x70, (byte) 0x21, (byte) 0xf5, (byte) 0xfc,
-            (byte) 0x85, (byte) 0x0d, (byte) 0x33, (byte) 0x58, (byte) 0xa1, (byte) 0xe5,
-            (byte) 0x09, (byte) 0x36, (byte) 0x84, (byte) 0xb2, (byte) 0x04, (byte) 0x0a,
-            (byte) 0x02, (byte) 0xd3, (byte) 0x88, (byte) 0x1f, (byte) 0x0c, (byte) 0x2b,
-            (byte) 0x1d, (byte) 0xe9, (byte) 0x3d, (byte) 0xe7, (byte) 0x79, (byte) 0xf9,
-            (byte) 0x32, (byte) 0x5c, (byte) 0x8a, (byte) 0x75, (byte) 0x49, (byte) 0x12,
-            (byte) 0xe4, (byte) 0x05, (byte) 0x26, (byte) 0xd4, (byte) 0x2e, (byte) 0x9e,
-            (byte) 0x1f, (byte) 0xcc, (byte) 0x54, (byte) 0xad, (byte) 0x33, (byte) 0x8d,
-            (byte) 0x99, (byte) 0x00, (byte) 0xdc, (byte) 0xf5, (byte) 0xb4, (byte) 0xa2,
-            (byte) 0x2f, (byte) 0xba, (byte) 0xe5, (byte) 0x62, (byte) 0x30, (byte) 0x6d,
-            (byte) 0xe6, (byte) 0x3d, (byte) 0xeb, (byte) 0x24, (byte) 0xc2, (byte) 0xdc,
-            (byte) 0x5f, (byte) 0xb7, (byte) 0x16, (byte) 0x35, (byte) 0xa3, (byte) 0x98,
-            (byte) 0x98, (byte) 0xa8, (byte) 0xef, (byte) 0xe8, (byte) 0xc4, (byte) 0x96,
-            (byte) 0x6d, (byte) 0x38, (byte) 0xab, (byte) 0x26, (byte) 0x6d, (byte) 0x30,
-            (byte) 0xc2, (byte) 0xa0, (byte) 0x44, (byte) 0xe4, (byte) 0xff, (byte) 0x7e,
-            (byte) 0xbe, (byte) 0x7c, (byte) 0x33, (byte) 0xa5, (byte) 0x10, (byte) 0xad,
-            (byte) 0xd7, (byte) 0x1e, (byte) 0x13, (byte) 0x20, (byte) 0xb3, (byte) 0x1f,
-            (byte) 0x41, (byte) 0x02, (byte) 0x41, (byte) 0x00, (byte) 0xf1, (byte) 0x89,
-            (byte) 0x07, (byte) 0x0f, (byte) 0xe8, (byte) 0xcf, (byte) 0xab, (byte) 0x13,
-            (byte) 0x2a, (byte) 0x8f, (byte) 0x88, (byte) 0x80, (byte) 0x11, (byte) 0x9a,
-            (byte) 0x79, (byte) 0xb6, (byte) 0x59, (byte) 0x3a, (byte) 0x50, (byte) 0x6e,
-            (byte) 0x57, (byte) 0x37, (byte) 0xab, (byte) 0x2a, (byte) 0xd2, (byte) 0xaa,
-            (byte) 0xd9, (byte) 0x72, (byte) 0x73, (byte) 0xff, (byte) 0x8b, (byte) 0x47,
-            (byte) 0x76, (byte) 0xdd, (byte) 0xdc, (byte) 0xf5, (byte) 0x97, (byte) 0x44,
-            (byte) 0x3a, (byte) 0x78, (byte) 0xbe, (byte) 0x17, (byte) 0xb4, (byte) 0x22,
-            (byte) 0x6f, (byte) 0xe5, (byte) 0x23, (byte) 0x70, (byte) 0x1d, (byte) 0x10,
-            (byte) 0x5d, (byte) 0xba, (byte) 0x16, (byte) 0x81, (byte) 0xf1, (byte) 0x45,
-            (byte) 0xce, (byte) 0x30, (byte) 0xb4, (byte) 0xab, (byte) 0x80, (byte) 0xe4,
-            (byte) 0x98, (byte) 0x31, (byte) 0x02, (byte) 0x41, (byte) 0x00, (byte) 0xda,
-            (byte) 0x82, (byte) 0x9d, (byte) 0x3f, (byte) 0xca, (byte) 0x2f, (byte) 0xe1,
-            (byte) 0xd4, (byte) 0x86, (byte) 0x77, (byte) 0x48, (byte) 0xa6, (byte) 0xab,
-            (byte) 0xab, (byte) 0x1c, (byte) 0x42, (byte) 0x5c, (byte) 0xd5, (byte) 0xc7,
-            (byte) 0x46, (byte) 0x59, (byte) 0x91, (byte) 0x3f, (byte) 0xfc, (byte) 0xcc,
-            (byte) 0xec, (byte) 0xc2, (byte) 0x40, (byte) 0x12, (byte) 0x2c, (byte) 0x8d,
-            (byte) 0x1f, (byte) 0xa2, (byte) 0x18, (byte) 0x88, (byte) 0xee, (byte) 0x82,
-            (byte) 0x4a, (byte) 0x5a, (byte) 0x5e, (byte) 0x88, (byte) 0x20, (byte) 0xe3,
-            (byte) 0x7b, (byte) 0xe0, (byte) 0xd8, (byte) 0x3a, (byte) 0x52, (byte) 0x9a,
-            (byte) 0x26, (byte) 0x6a, (byte) 0x04, (byte) 0xec, (byte) 0xe8, (byte) 0xb9,
-            (byte) 0x48, (byte) 0x40, (byte) 0xe1, (byte) 0xe1, (byte) 0x83, (byte) 0xa6,
-            (byte) 0x67, (byte) 0xa6, (byte) 0xfd, (byte) 0x02, (byte) 0x41, (byte) 0x00,
-            (byte) 0x89, (byte) 0x72, (byte) 0x3e, (byte) 0xb0, (byte) 0x90, (byte) 0xfd,
-            (byte) 0x4c, (byte) 0x0e, (byte) 0xd6, (byte) 0x13, (byte) 0x63, (byte) 0xcb,
-            (byte) 0xed, (byte) 0x38, (byte) 0x88, (byte) 0xb6, (byte) 0x79, (byte) 0xc4,
-            (byte) 0x33, (byte) 0x6c, (byte) 0xf6, (byte) 0xf8, (byte) 0xd8, (byte) 0xd0,
-            (byte) 0xbf, (byte) 0x9d, (byte) 0x35, (byte) 0xac, (byte) 0x69, (byte) 0xd2,
-            (byte) 0x2b, (byte) 0xc1, (byte) 0xf9, (byte) 0x24, (byte) 0x7b, (byte) 0xce,
-            (byte) 0xcd, (byte) 0xcb, (byte) 0xa7, (byte) 0xb2, (byte) 0x7a, (byte) 0x0a,
-            (byte) 0x27, (byte) 0x19, (byte) 0xc9, (byte) 0xaf, (byte) 0x0d, (byte) 0x21,
-            (byte) 0x89, (byte) 0x88, (byte) 0x7c, (byte) 0xad, (byte) 0x9e, (byte) 0x8d,
-            (byte) 0x47, (byte) 0x6d, (byte) 0x3f, (byte) 0xce, (byte) 0x7b, (byte) 0xa1,
-            (byte) 0x74, (byte) 0xf1, (byte) 0xa0, (byte) 0xa1, (byte) 0x02, (byte) 0x41,
-            (byte) 0x00, (byte) 0xd9, (byte) 0xa8, (byte) 0xf5, (byte) 0xfe, (byte) 0xce,
-            (byte) 0xe6, (byte) 0x77, (byte) 0x6b, (byte) 0xfe, (byte) 0x2d, (byte) 0xe0,
-            (byte) 0x1e, (byte) 0xb6, (byte) 0x2e, (byte) 0x12, (byte) 0x4e, (byte) 0x40,
-            (byte) 0xaf, (byte) 0x6a, (byte) 0x7b, (byte) 0x37, (byte) 0x49, (byte) 0x2a,
-            (byte) 0x96, (byte) 0x25, (byte) 0x83, (byte) 0x49, (byte) 0xd4, (byte) 0x0c,
-            (byte) 0xc6, (byte) 0x78, (byte) 0x25, (byte) 0x24, (byte) 0x90, (byte) 0x90,
-            (byte) 0x06, (byte) 0x15, (byte) 0x9e, (byte) 0xfe, (byte) 0xf9, (byte) 0xdf,
-            (byte) 0x5b, (byte) 0xf3, (byte) 0x7e, (byte) 0x38, (byte) 0x70, (byte) 0xeb,
-            (byte) 0x57, (byte) 0xd0, (byte) 0xd9, (byte) 0xa7, (byte) 0x0e, (byte) 0x14,
-            (byte) 0xf7, (byte) 0x95, (byte) 0x68, (byte) 0xd5, (byte) 0xc8, (byte) 0xab,
-            (byte) 0x9d, (byte) 0x3a, (byte) 0x2b, (byte) 0x51, (byte) 0xf9, (byte) 0x02,
-            (byte) 0x41, (byte) 0x00, (byte) 0x96, (byte) 0xdf, (byte) 0xe9, (byte) 0x67,
-            (byte) 0x6c, (byte) 0xdc, (byte) 0x90, (byte) 0x14, (byte) 0xb4, (byte) 0x1d,
-            (byte) 0x22, (byte) 0x33, (byte) 0x4a, (byte) 0x31, (byte) 0xc1, (byte) 0x9d,
-            (byte) 0x2e, (byte) 0xff, (byte) 0x9a, (byte) 0x2a, (byte) 0x95, (byte) 0x4b,
-            (byte) 0x27, (byte) 0x74, (byte) 0xcb, (byte) 0x21, (byte) 0xc3, (byte) 0xd2,
-            (byte) 0x0b, (byte) 0xb2, (byte) 0x46, (byte) 0x87, (byte) 0xf8, (byte) 0x28,
-            (byte) 0x01, (byte) 0x8b, (byte) 0xd8, (byte) 0xb9, (byte) 0x4b, (byte) 0xcd,
-            (byte) 0x9a, (byte) 0x96, (byte) 0x41, (byte) 0x0e, (byte) 0x36, (byte) 0x6d,
-            (byte) 0x40, (byte) 0x42, (byte) 0xbc, (byte) 0xd9, (byte) 0xd3, (byte) 0x7b,
-            (byte) 0xbc, (byte) 0xa7, (byte) 0x92, (byte) 0x90, (byte) 0xdd, (byte) 0xa1,
-            (byte) 0x9c, (byte) 0xce, (byte) 0xa1, (byte) 0x87, (byte) 0x11, (byte) 0x51
-    };
-
-    /**
-     * Generated from above and converted with:
-     *
-     * openssl x509 -outform d -in usercert.pem | xxd -i | sed 's/0x/(byte) 0x/g'
-     */
-    private static final byte[] FAKE_RSA_USER_1 = new byte[] {
-            (byte) 0x30, (byte) 0x82, (byte) 0x02, (byte) 0x95, (byte) 0x30, (byte) 0x82,
-            (byte) 0x01, (byte) 0xfe, (byte) 0xa0, (byte) 0x03, (byte) 0x02, (byte) 0x01,
-            (byte) 0x02, (byte) 0x02, (byte) 0x01, (byte) 0x01, (byte) 0x30, (byte) 0x0d,
-            (byte) 0x06, (byte) 0x09, (byte) 0x2a, (byte) 0x86, (byte) 0x48, (byte) 0x86,
-            (byte) 0xf7, (byte) 0x0d, (byte) 0x01, (byte) 0x01, (byte) 0x05, (byte) 0x05,
-            (byte) 0x00, (byte) 0x30, (byte) 0x4f, (byte) 0x31, (byte) 0x0b, (byte) 0x30,
-            (byte) 0x09, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x06,
-            (byte) 0x13, (byte) 0x02, (byte) 0x55, (byte) 0x53, (byte) 0x31, (byte) 0x0b,
-            (byte) 0x30, (byte) 0x09, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04,
-            (byte) 0x08, (byte) 0x13, (byte) 0x02, (byte) 0x43, (byte) 0x41, (byte) 0x31,
-            (byte) 0x16, (byte) 0x30, (byte) 0x14, (byte) 0x06, (byte) 0x03, (byte) 0x55,
-            (byte) 0x04, (byte) 0x07, (byte) 0x13, (byte) 0x0d, (byte) 0x4d, (byte) 0x6f,
-            (byte) 0x75, (byte) 0x6e, (byte) 0x74, (byte) 0x61, (byte) 0x69, (byte) 0x6e,
-            (byte) 0x20, (byte) 0x56, (byte) 0x69, (byte) 0x65, (byte) 0x77, (byte) 0x31,
-            (byte) 0x1b, (byte) 0x30, (byte) 0x19, (byte) 0x06, (byte) 0x03, (byte) 0x55,
-            (byte) 0x04, (byte) 0x0a, (byte) 0x13, (byte) 0x12, (byte) 0x41, (byte) 0x6e,
-            (byte) 0x64, (byte) 0x72, (byte) 0x6f, (byte) 0x69, (byte) 0x64, (byte) 0x20,
-            (byte) 0x54, (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x20, (byte) 0x43,
-            (byte) 0x61, (byte) 0x73, (byte) 0x65, (byte) 0x73, (byte) 0x30, (byte) 0x1e,
-            (byte) 0x17, (byte) 0x0d, (byte) 0x31, (byte) 0x32, (byte) 0x30, (byte) 0x38,
-            (byte) 0x31, (byte) 0x34, (byte) 0x32, (byte) 0x33, (byte) 0x32, (byte) 0x35,
-            (byte) 0x34, (byte) 0x38, (byte) 0x5a, (byte) 0x17, (byte) 0x0d, (byte) 0x32,
-            (byte) 0x32, (byte) 0x30, (byte) 0x38, (byte) 0x31, (byte) 0x32, (byte) 0x32,
-            (byte) 0x33, (byte) 0x32, (byte) 0x35, (byte) 0x34, (byte) 0x38, (byte) 0x5a,
-            (byte) 0x30, (byte) 0x55, (byte) 0x31, (byte) 0x0b, (byte) 0x30, (byte) 0x09,
-            (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x06, (byte) 0x13,
-            (byte) 0x02, (byte) 0x55, (byte) 0x53, (byte) 0x31, (byte) 0x0b, (byte) 0x30,
-            (byte) 0x09, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x08,
-            (byte) 0x13, (byte) 0x02, (byte) 0x43, (byte) 0x41, (byte) 0x31, (byte) 0x1b,
-            (byte) 0x30, (byte) 0x19, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04,
-            (byte) 0x0a, (byte) 0x13, (byte) 0x12, (byte) 0x41, (byte) 0x6e, (byte) 0x64,
-            (byte) 0x72, (byte) 0x6f, (byte) 0x69, (byte) 0x64, (byte) 0x20, (byte) 0x54,
-            (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x20, (byte) 0x43, (byte) 0x61,
-            (byte) 0x73, (byte) 0x65, (byte) 0x73, (byte) 0x31, (byte) 0x1c, (byte) 0x30,
-            (byte) 0x1a, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x03,
-            (byte) 0x13, (byte) 0x13, (byte) 0x73, (byte) 0x65, (byte) 0x72, (byte) 0x76,
-            (byte) 0x65, (byte) 0x72, (byte) 0x31, (byte) 0x2e, (byte) 0x65, (byte) 0x78,
-            (byte) 0x61, (byte) 0x6d, (byte) 0x70, (byte) 0x6c, (byte) 0x65, (byte) 0x2e,
-            (byte) 0x63, (byte) 0x6f, (byte) 0x6d, (byte) 0x30, (byte) 0x81, (byte) 0x9f,
-            (byte) 0x30, (byte) 0x0d, (byte) 0x06, (byte) 0x09, (byte) 0x2a, (byte) 0x86,
-            (byte) 0x48, (byte) 0x86, (byte) 0xf7, (byte) 0x0d, (byte) 0x01, (byte) 0x01,
-            (byte) 0x01, (byte) 0x05, (byte) 0x00, (byte) 0x03, (byte) 0x81, (byte) 0x8d,
-            (byte) 0x00, (byte) 0x30, (byte) 0x81, (byte) 0x89, (byte) 0x02, (byte) 0x81,
-            (byte) 0x81, (byte) 0x00, (byte) 0xce, (byte) 0x29, (byte) 0xeb, (byte) 0xf6,
-            (byte) 0x5b, (byte) 0x25, (byte) 0xdc, (byte) 0xa1, (byte) 0xa6, (byte) 0x2c,
-            (byte) 0x66, (byte) 0xcb, (byte) 0x20, (byte) 0x90, (byte) 0x27, (byte) 0x86,
-            (byte) 0x8a, (byte) 0x44, (byte) 0x71, (byte) 0x50, (byte) 0xda, (byte) 0xd3,
-            (byte) 0x02, (byte) 0x77, (byte) 0x55, (byte) 0xe9, (byte) 0xe8, (byte) 0x08,
-            (byte) 0xf3, (byte) 0x36, (byte) 0x9a, (byte) 0xae, (byte) 0xab, (byte) 0x04,
-            (byte) 0x6d, (byte) 0x00, (byte) 0x99, (byte) 0xbf, (byte) 0x7d, (byte) 0x0f,
-            (byte) 0x67, (byte) 0x8b, (byte) 0x1d, (byte) 0xd4, (byte) 0x2b, (byte) 0x7c,
-            (byte) 0xcb, (byte) 0xcd, (byte) 0x33, (byte) 0xc7, (byte) 0x84, (byte) 0x30,
-            (byte) 0xe2, (byte) 0x45, (byte) 0x21, (byte) 0xb3, (byte) 0x75, (byte) 0xf5,
-            (byte) 0x79, (byte) 0x02, (byte) 0xda, (byte) 0x50, (byte) 0xa3, (byte) 0x8b,
-            (byte) 0xce, (byte) 0xc3, (byte) 0x8e, (byte) 0x0f, (byte) 0x25, (byte) 0xeb,
-            (byte) 0x08, (byte) 0x2c, (byte) 0xdd, (byte) 0x1c, (byte) 0xcf, (byte) 0xff,
-            (byte) 0x3b, (byte) 0xde, (byte) 0xb6, (byte) 0xaa, (byte) 0x2a, (byte) 0xa9,
-            (byte) 0xc4, (byte) 0x8a, (byte) 0x24, (byte) 0x24, (byte) 0xe6, (byte) 0x29,
-            (byte) 0x0d, (byte) 0x98, (byte) 0x4c, (byte) 0x32, (byte) 0xa1, (byte) 0x7b,
-            (byte) 0x23, (byte) 0x2b, (byte) 0x42, (byte) 0x30, (byte) 0xee, (byte) 0x78,
-            (byte) 0x08, (byte) 0x47, (byte) 0xad, (byte) 0xf2, (byte) 0x96, (byte) 0xd5,
-            (byte) 0xf1, (byte) 0x62, (byte) 0x42, (byte) 0x2d, (byte) 0x35, (byte) 0x19,
-            (byte) 0xb4, (byte) 0x3c, (byte) 0xc9, (byte) 0xc3, (byte) 0x5f, (byte) 0x03,
-            (byte) 0x16, (byte) 0x3a, (byte) 0x23, (byte) 0xac, (byte) 0xcb, (byte) 0xce,
-            (byte) 0x9e, (byte) 0x51, (byte) 0x2e, (byte) 0x6d, (byte) 0x02, (byte) 0x03,
-            (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0xa3, (byte) 0x7b, (byte) 0x30,
-            (byte) 0x79, (byte) 0x30, (byte) 0x09, (byte) 0x06, (byte) 0x03, (byte) 0x55,
-            (byte) 0x1d, (byte) 0x13, (byte) 0x04, (byte) 0x02, (byte) 0x30, (byte) 0x00,
-            (byte) 0x30, (byte) 0x2c, (byte) 0x06, (byte) 0x09, (byte) 0x60, (byte) 0x86,
-            (byte) 0x48, (byte) 0x01, (byte) 0x86, (byte) 0xf8, (byte) 0x42, (byte) 0x01,
-            (byte) 0x0d, (byte) 0x04, (byte) 0x1f, (byte) 0x16, (byte) 0x1d, (byte) 0x4f,
-            (byte) 0x70, (byte) 0x65, (byte) 0x6e, (byte) 0x53, (byte) 0x53, (byte) 0x4c,
-            (byte) 0x20, (byte) 0x47, (byte) 0x65, (byte) 0x6e, (byte) 0x65, (byte) 0x72,
-            (byte) 0x61, (byte) 0x74, (byte) 0x65, (byte) 0x64, (byte) 0x20, (byte) 0x43,
-            (byte) 0x65, (byte) 0x72, (byte) 0x74, (byte) 0x69, (byte) 0x66, (byte) 0x69,
-            (byte) 0x63, (byte) 0x61, (byte) 0x74, (byte) 0x65, (byte) 0x30, (byte) 0x1d,
-            (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x1d, (byte) 0x0e, (byte) 0x04,
-            (byte) 0x16, (byte) 0x04, (byte) 0x14, (byte) 0x32, (byte) 0xa1, (byte) 0x1e,
-            (byte) 0x6b, (byte) 0x69, (byte) 0x04, (byte) 0xfe, (byte) 0xb3, (byte) 0xcd,
-            (byte) 0xf8, (byte) 0xbb, (byte) 0x14, (byte) 0xcd, (byte) 0xff, (byte) 0xd4,
-            (byte) 0x16, (byte) 0xc3, (byte) 0xab, (byte) 0x44, (byte) 0x2f, (byte) 0x30,
-            (byte) 0x1f, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x1d, (byte) 0x23,
-            (byte) 0x04, (byte) 0x18, (byte) 0x30, (byte) 0x16, (byte) 0x80, (byte) 0x14,
-            (byte) 0x33, (byte) 0x05, (byte) 0xee, (byte) 0xfe, (byte) 0x6f, (byte) 0x60,
-            (byte) 0xc7, (byte) 0xf9, (byte) 0xa9, (byte) 0xd2, (byte) 0x73, (byte) 0x5c,
-            (byte) 0x8f, (byte) 0x6d, (byte) 0xa2, (byte) 0x2f, (byte) 0x97, (byte) 0x8e,
-            (byte) 0x5d, (byte) 0x51, (byte) 0x30, (byte) 0x0d, (byte) 0x06, (byte) 0x09,
-            (byte) 0x2a, (byte) 0x86, (byte) 0x48, (byte) 0x86, (byte) 0xf7, (byte) 0x0d,
-            (byte) 0x01, (byte) 0x01, (byte) 0x05, (byte) 0x05, (byte) 0x00, (byte) 0x03,
-            (byte) 0x81, (byte) 0x81, (byte) 0x00, (byte) 0x46, (byte) 0x42, (byte) 0xef,
-            (byte) 0x56, (byte) 0x89, (byte) 0x78, (byte) 0x90, (byte) 0x38, (byte) 0x24,
-            (byte) 0x9f, (byte) 0x8c, (byte) 0x7a, (byte) 0xce, (byte) 0x7a, (byte) 0xa5,
-            (byte) 0xb5, (byte) 0x1e, (byte) 0x74, (byte) 0x96, (byte) 0x34, (byte) 0x49,
-            (byte) 0x8b, (byte) 0xed, (byte) 0x44, (byte) 0xb3, (byte) 0xc9, (byte) 0x05,
-            (byte) 0xd7, (byte) 0x48, (byte) 0x55, (byte) 0x52, (byte) 0x59, (byte) 0x15,
-            (byte) 0x0b, (byte) 0xaa, (byte) 0x16, (byte) 0x86, (byte) 0xd2, (byte) 0x8e,
-            (byte) 0x16, (byte) 0x99, (byte) 0xe8, (byte) 0x5f, (byte) 0x11, (byte) 0x71,
-            (byte) 0x42, (byte) 0x55, (byte) 0xd1, (byte) 0xc4, (byte) 0x6f, (byte) 0x2e,
-            (byte) 0xa9, (byte) 0x64, (byte) 0x6f, (byte) 0xd8, (byte) 0xfd, (byte) 0x43,
-            (byte) 0x13, (byte) 0x24, (byte) 0xaa, (byte) 0x67, (byte) 0xe6, (byte) 0xf5,
-            (byte) 0xca, (byte) 0x80, (byte) 0x5e, (byte) 0x3a, (byte) 0x3e, (byte) 0xcc,
-            (byte) 0x4f, (byte) 0xba, (byte) 0x87, (byte) 0xe6, (byte) 0xae, (byte) 0xbf,
-            (byte) 0x8f, (byte) 0xd5, (byte) 0x28, (byte) 0x38, (byte) 0x58, (byte) 0x30,
-            (byte) 0x24, (byte) 0xf6, (byte) 0x53, (byte) 0x5b, (byte) 0x41, (byte) 0x53,
-            (byte) 0xe6, (byte) 0x45, (byte) 0xbc, (byte) 0xbe, (byte) 0xe6, (byte) 0xbb,
-            (byte) 0x5d, (byte) 0xd8, (byte) 0xa7, (byte) 0xf9, (byte) 0x64, (byte) 0x99,
-            (byte) 0x04, (byte) 0x43, (byte) 0x75, (byte) 0xd7, (byte) 0x2d, (byte) 0x32,
-            (byte) 0x0a, (byte) 0x94, (byte) 0xaf, (byte) 0x06, (byte) 0x34, (byte) 0xae,
-            (byte) 0x46, (byte) 0xbd, (byte) 0xda, (byte) 0x00, (byte) 0x0e, (byte) 0x25,
-            (byte) 0xc2, (byte) 0xf7, (byte) 0xc9, (byte) 0xc3, (byte) 0x65, (byte) 0xd2,
-            (byte) 0x08, (byte) 0x41, (byte) 0x0a, (byte) 0xf3, (byte) 0x72
-    };
-
-    /*
-     * The keys and certificates below are generated with:
-     *
-     * openssl req -new -x509 -days 3650 -extensions v3_ca -keyout cakey.pem -out cacert.pem
-     * openssl ecparam -name prime256v1 -out ecparam.pem
-     * openssl req -newkey ec:ecparam.pem -keyout userkey.pem -nodes -days 3650 -out userkey.req
-     * mkdir -p demoCA/newcerts
-     * touch demoCA/index.txt
-     * echo "01" > demoCA/serial
-     * openssl ca -out usercert.pem -in userkey.req -cert cacert.pem -keyfile cakey.pem -days 3650
-     */
-
-    /**
-     * Generated from above and converted with:
-     *
-     * openssl x509 -outform d -in cacert.pem | xxd -i | sed 's/0x/(byte) 0x/g'
-     */
-    private static final byte[] FAKE_EC_CA_1 = {
-            (byte) 0x30, (byte) 0x82, (byte) 0x02, (byte) 0x58, (byte) 0x30, (byte) 0x82,
-            (byte) 0x01, (byte) 0xc1, (byte) 0xa0, (byte) 0x03, (byte) 0x02, (byte) 0x01,
-            (byte) 0x02, (byte) 0x02, (byte) 0x09, (byte) 0x00, (byte) 0xe1, (byte) 0xb2,
-            (byte) 0x8c, (byte) 0x04, (byte) 0x95, (byte) 0xeb, (byte) 0x10, (byte) 0xcb,
-            (byte) 0x30, (byte) 0x0d, (byte) 0x06, (byte) 0x09, (byte) 0x2a, (byte) 0x86,
-            (byte) 0x48, (byte) 0x86, (byte) 0xf7, (byte) 0x0d, (byte) 0x01, (byte) 0x01,
-            (byte) 0x05, (byte) 0x05, (byte) 0x00, (byte) 0x30, (byte) 0x45, (byte) 0x31,
-            (byte) 0x0b, (byte) 0x30, (byte) 0x09, (byte) 0x06, (byte) 0x03, (byte) 0x55,
-            (byte) 0x04, (byte) 0x06, (byte) 0x13, (byte) 0x02, (byte) 0x41, (byte) 0x55,
-            (byte) 0x31, (byte) 0x13, (byte) 0x30, (byte) 0x11, (byte) 0x06, (byte) 0x03,
-            (byte) 0x55, (byte) 0x04, (byte) 0x08, (byte) 0x0c, (byte) 0x0a, (byte) 0x53,
-            (byte) 0x6f, (byte) 0x6d, (byte) 0x65, (byte) 0x2d, (byte) 0x53, (byte) 0x74,
-            (byte) 0x61, (byte) 0x74, (byte) 0x65, (byte) 0x31, (byte) 0x21, (byte) 0x30,
-            (byte) 0x1f, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x0a,
-            (byte) 0x0c, (byte) 0x18, (byte) 0x49, (byte) 0x6e, (byte) 0x74, (byte) 0x65,
-            (byte) 0x72, (byte) 0x6e, (byte) 0x65, (byte) 0x74, (byte) 0x20, (byte) 0x57,
-            (byte) 0x69, (byte) 0x64, (byte) 0x67, (byte) 0x69, (byte) 0x74, (byte) 0x73,
-            (byte) 0x20, (byte) 0x50, (byte) 0x74, (byte) 0x79, (byte) 0x20, (byte) 0x4c,
-            (byte) 0x74, (byte) 0x64, (byte) 0x30, (byte) 0x1e, (byte) 0x17, (byte) 0x0d,
-            (byte) 0x31, (byte) 0x33, (byte) 0x30, (byte) 0x38, (byte) 0x32, (byte) 0x37,
-            (byte) 0x31, (byte) 0x36, (byte) 0x32, (byte) 0x38, (byte) 0x32, (byte) 0x38,
-            (byte) 0x5a, (byte) 0x17, (byte) 0x0d, (byte) 0x32, (byte) 0x33, (byte) 0x30,
-            (byte) 0x38, (byte) 0x32, (byte) 0x35, (byte) 0x31, (byte) 0x36, (byte) 0x32,
-            (byte) 0x38, (byte) 0x32, (byte) 0x38, (byte) 0x5a, (byte) 0x30, (byte) 0x45,
-            (byte) 0x31, (byte) 0x0b, (byte) 0x30, (byte) 0x09, (byte) 0x06, (byte) 0x03,
-            (byte) 0x55, (byte) 0x04, (byte) 0x06, (byte) 0x13, (byte) 0x02, (byte) 0x41,
-            (byte) 0x55, (byte) 0x31, (byte) 0x13, (byte) 0x30, (byte) 0x11, (byte) 0x06,
-            (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x08, (byte) 0x0c, (byte) 0x0a,
-            (byte) 0x53, (byte) 0x6f, (byte) 0x6d, (byte) 0x65, (byte) 0x2d, (byte) 0x53,
-            (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x65, (byte) 0x31, (byte) 0x21,
-            (byte) 0x30, (byte) 0x1f, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04,
-            (byte) 0x0a, (byte) 0x0c, (byte) 0x18, (byte) 0x49, (byte) 0x6e, (byte) 0x74,
-            (byte) 0x65, (byte) 0x72, (byte) 0x6e, (byte) 0x65, (byte) 0x74, (byte) 0x20,
-            (byte) 0x57, (byte) 0x69, (byte) 0x64, (byte) 0x67, (byte) 0x69, (byte) 0x74,
-            (byte) 0x73, (byte) 0x20, (byte) 0x50, (byte) 0x74, (byte) 0x79, (byte) 0x20,
-            (byte) 0x4c, (byte) 0x74, (byte) 0x64, (byte) 0x30, (byte) 0x81, (byte) 0x9f,
-            (byte) 0x30, (byte) 0x0d, (byte) 0x06, (byte) 0x09, (byte) 0x2a, (byte) 0x86,
-            (byte) 0x48, (byte) 0x86, (byte) 0xf7, (byte) 0x0d, (byte) 0x01, (byte) 0x01,
-            (byte) 0x01, (byte) 0x05, (byte) 0x00, (byte) 0x03, (byte) 0x81, (byte) 0x8d,
-            (byte) 0x00, (byte) 0x30, (byte) 0x81, (byte) 0x89, (byte) 0x02, (byte) 0x81,
-            (byte) 0x81, (byte) 0x00, (byte) 0xb5, (byte) 0xf6, (byte) 0x08, (byte) 0x0f,
-            (byte) 0xc4, (byte) 0x4d, (byte) 0xe4, (byte) 0x0d, (byte) 0x34, (byte) 0x1d,
-            (byte) 0xe2, (byte) 0x23, (byte) 0x18, (byte) 0x63, (byte) 0x03, (byte) 0xf7,
-            (byte) 0x14, (byte) 0x0e, (byte) 0x98, (byte) 0xcd, (byte) 0x45, (byte) 0x1f,
-            (byte) 0xfe, (byte) 0xfb, (byte) 0x09, (byte) 0x3f, (byte) 0x5d, (byte) 0x36,
-            (byte) 0x3b, (byte) 0x0f, (byte) 0xf9, (byte) 0x5e, (byte) 0x86, (byte) 0x56,
-            (byte) 0x64, (byte) 0xd7, (byte) 0x3f, (byte) 0xae, (byte) 0x33, (byte) 0x09,
-            (byte) 0xd3, (byte) 0xdd, (byte) 0x06, (byte) 0x17, (byte) 0x26, (byte) 0xdc,
-            (byte) 0xa2, (byte) 0x8c, (byte) 0x3c, (byte) 0x65, (byte) 0xed, (byte) 0x03,
-            (byte) 0x82, (byte) 0x78, (byte) 0x9b, (byte) 0xee, (byte) 0xe3, (byte) 0x98,
-            (byte) 0x58, (byte) 0xe1, (byte) 0xf1, (byte) 0xa0, (byte) 0x85, (byte) 0xae,
-            (byte) 0x63, (byte) 0x84, (byte) 0x41, (byte) 0x46, (byte) 0xa7, (byte) 0x4f,
-            (byte) 0xdc, (byte) 0xbb, (byte) 0x1c, (byte) 0x6e, (byte) 0xec, (byte) 0x7b,
-            (byte) 0xd5, (byte) 0xab, (byte) 0x3d, (byte) 0x6a, (byte) 0x05, (byte) 0x58,
-            (byte) 0x0f, (byte) 0x9b, (byte) 0x6a, (byte) 0x67, (byte) 0x4b, (byte) 0xe9,
-            (byte) 0x2a, (byte) 0x6d, (byte) 0x96, (byte) 0x11, (byte) 0x53, (byte) 0x95,
-            (byte) 0x78, (byte) 0xaa, (byte) 0xd1, (byte) 0x91, (byte) 0x4a, (byte) 0xf8,
-            (byte) 0x54, (byte) 0x52, (byte) 0x6d, (byte) 0xb9, (byte) 0xca, (byte) 0x74,
-            (byte) 0x81, (byte) 0xf8, (byte) 0x99, (byte) 0x64, (byte) 0xd1, (byte) 0x4f,
-            (byte) 0x01, (byte) 0x38, (byte) 0x4f, (byte) 0x08, (byte) 0x5c, (byte) 0x31,
-            (byte) 0xcb, (byte) 0x7c, (byte) 0x5c, (byte) 0x78, (byte) 0x5d, (byte) 0x47,
-            (byte) 0xd9, (byte) 0xf0, (byte) 0x1a, (byte) 0xeb, (byte) 0x02, (byte) 0x03,
-            (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0xa3, (byte) 0x50, (byte) 0x30,
-            (byte) 0x4e, (byte) 0x30, (byte) 0x1d, (byte) 0x06, (byte) 0x03, (byte) 0x55,
-            (byte) 0x1d, (byte) 0x0e, (byte) 0x04, (byte) 0x16, (byte) 0x04, (byte) 0x14,
-            (byte) 0x5f, (byte) 0x5b, (byte) 0x5e, (byte) 0xac, (byte) 0x29, (byte) 0xfa,
-            (byte) 0xa1, (byte) 0x9f, (byte) 0x9e, (byte) 0xad, (byte) 0x46, (byte) 0xe1,
-            (byte) 0xbc, (byte) 0x20, (byte) 0x72, (byte) 0xcf, (byte) 0x4a, (byte) 0xd4,
-            (byte) 0xfa, (byte) 0xe3, (byte) 0x30, (byte) 0x1f, (byte) 0x06, (byte) 0x03,
-            (byte) 0x55, (byte) 0x1d, (byte) 0x23, (byte) 0x04, (byte) 0x18, (byte) 0x30,
-            (byte) 0x16, (byte) 0x80, (byte) 0x14, (byte) 0x5f, (byte) 0x5b, (byte) 0x5e,
-            (byte) 0xac, (byte) 0x29, (byte) 0xfa, (byte) 0xa1, (byte) 0x9f, (byte) 0x9e,
-            (byte) 0xad, (byte) 0x46, (byte) 0xe1, (byte) 0xbc, (byte) 0x20, (byte) 0x72,
-            (byte) 0xcf, (byte) 0x4a, (byte) 0xd4, (byte) 0xfa, (byte) 0xe3, (byte) 0x30,
-            (byte) 0x0c, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x1d, (byte) 0x13,
-            (byte) 0x04, (byte) 0x05, (byte) 0x30, (byte) 0x03, (byte) 0x01, (byte) 0x01,
-            (byte) 0xff, (byte) 0x30, (byte) 0x0d, (byte) 0x06, (byte) 0x09, (byte) 0x2a,
-            (byte) 0x86, (byte) 0x48, (byte) 0x86, (byte) 0xf7, (byte) 0x0d, (byte) 0x01,
-            (byte) 0x01, (byte) 0x05, (byte) 0x05, (byte) 0x00, (byte) 0x03, (byte) 0x81,
-            (byte) 0x81, (byte) 0x00, (byte) 0xa1, (byte) 0x4a, (byte) 0xe6, (byte) 0xfc,
-            (byte) 0x7f, (byte) 0x17, (byte) 0xaa, (byte) 0x65, (byte) 0x4a, (byte) 0x34,
-            (byte) 0xde, (byte) 0x69, (byte) 0x67, (byte) 0x54, (byte) 0x4d, (byte) 0xa2,
-            (byte) 0xc2, (byte) 0x98, (byte) 0x02, (byte) 0x43, (byte) 0x6a, (byte) 0x0e,
-            (byte) 0x0b, (byte) 0x7f, (byte) 0xa4, (byte) 0x46, (byte) 0xaf, (byte) 0xa4,
-            (byte) 0x65, (byte) 0xa0, (byte) 0xdb, (byte) 0xf1, (byte) 0x5b, (byte) 0xd5,
-            (byte) 0x09, (byte) 0xbc, (byte) 0xee, (byte) 0x37, (byte) 0x51, (byte) 0x19,
-            (byte) 0x36, (byte) 0xc0, (byte) 0x90, (byte) 0xd3, (byte) 0x5f, (byte) 0xf3,
-            (byte) 0x4f, (byte) 0xb9, (byte) 0x08, (byte) 0x45, (byte) 0x0e, (byte) 0x01,
-            (byte) 0x8a, (byte) 0x95, (byte) 0xef, (byte) 0x92, (byte) 0x95, (byte) 0x33,
-            (byte) 0x78, (byte) 0xdd, (byte) 0x90, (byte) 0xbb, (byte) 0xf3, (byte) 0x06,
-            (byte) 0x75, (byte) 0xd0, (byte) 0x66, (byte) 0xe6, (byte) 0xd0, (byte) 0x18,
-            (byte) 0x6e, (byte) 0xeb, (byte) 0x1c, (byte) 0x52, (byte) 0xc3, (byte) 0x2e,
-            (byte) 0x57, (byte) 0x7d, (byte) 0xa9, (byte) 0x03, (byte) 0xdb, (byte) 0xf4,
-            (byte) 0x57, (byte) 0x5f, (byte) 0x6c, (byte) 0x7e, (byte) 0x00, (byte) 0x0d,
-            (byte) 0x8f, (byte) 0xe8, (byte) 0x91, (byte) 0xf7, (byte) 0xae, (byte) 0x24,
-            (byte) 0x35, (byte) 0x07, (byte) 0xb5, (byte) 0x48, (byte) 0x2d, (byte) 0x36,
-            (byte) 0x30, (byte) 0x5d, (byte) 0xe9, (byte) 0x49, (byte) 0x2d, (byte) 0xd1,
-            (byte) 0x5d, (byte) 0xc5, (byte) 0xf4, (byte) 0x33, (byte) 0x77, (byte) 0x3c,
-            (byte) 0x71, (byte) 0xad, (byte) 0x90, (byte) 0x65, (byte) 0xa9, (byte) 0xc1,
-            (byte) 0x0b, (byte) 0x5c, (byte) 0x62, (byte) 0x55, (byte) 0x50, (byte) 0x6f,
-            (byte) 0x9b, (byte) 0xc9, (byte) 0x0d, (byte) 0xee
-    };
-
-    /**
-     * Generated from above and converted with:
-     *
-     * openssl pkcs8 -topk8 -outform d -in userkey.pem -nocrypt | xxd -i | sed 's/0x/(byte) 0x/g'
-     */
-    private static final byte[] FAKE_EC_KEY_1 = new byte[] {
-            (byte) 0x30, (byte) 0x81, (byte) 0x87, (byte) 0x02, (byte) 0x01, (byte) 0x00,
-            (byte) 0x30, (byte) 0x13, (byte) 0x06, (byte) 0x07, (byte) 0x2a, (byte) 0x86,
-            (byte) 0x48, (byte) 0xce, (byte) 0x3d, (byte) 0x02, (byte) 0x01, (byte) 0x06,
-            (byte) 0x08, (byte) 0x2a, (byte) 0x86, (byte) 0x48, (byte) 0xce, (byte) 0x3d,
-            (byte) 0x03, (byte) 0x01, (byte) 0x07, (byte) 0x04, (byte) 0x6d, (byte) 0x30,
-            (byte) 0x6b, (byte) 0x02, (byte) 0x01, (byte) 0x01, (byte) 0x04, (byte) 0x20,
-            (byte) 0x3a, (byte) 0x8a, (byte) 0x02, (byte) 0xdc, (byte) 0xde, (byte) 0x70,
-            (byte) 0x84, (byte) 0x45, (byte) 0x34, (byte) 0xaf, (byte) 0xbd, (byte) 0xd5,
-            (byte) 0x02, (byte) 0x17, (byte) 0x69, (byte) 0x90, (byte) 0x65, (byte) 0x1e,
-            (byte) 0x87, (byte) 0xf1, (byte) 0x3d, (byte) 0x17, (byte) 0xb6, (byte) 0xf4,
-            (byte) 0x31, (byte) 0x94, (byte) 0x86, (byte) 0x76, (byte) 0x55, (byte) 0xf7,
-            (byte) 0xcc, (byte) 0xba, (byte) 0xa1, (byte) 0x44, (byte) 0x03, (byte) 0x42,
-            (byte) 0x00, (byte) 0x04, (byte) 0xd9, (byte) 0xcf, (byte) 0xe7, (byte) 0x9b,
-            (byte) 0x23, (byte) 0xc8, (byte) 0xa3, (byte) 0xb8, (byte) 0x33, (byte) 0x14,
-            (byte) 0xa4, (byte) 0x4d, (byte) 0x75, (byte) 0x90, (byte) 0xf3, (byte) 0xcd,
-            (byte) 0x43, (byte) 0xe5, (byte) 0x1b, (byte) 0x05, (byte) 0x1d, (byte) 0xf3,
-            (byte) 0xd0, (byte) 0xa3, (byte) 0xb7, (byte) 0x32, (byte) 0x5f, (byte) 0x79,
-            (byte) 0xdc, (byte) 0x88, (byte) 0xb8, (byte) 0x4d, (byte) 0xb3, (byte) 0xd1,
-            (byte) 0x6d, (byte) 0xf7, (byte) 0x75, (byte) 0xf3, (byte) 0xbf, (byte) 0x50,
-            (byte) 0xa1, (byte) 0xbc, (byte) 0x03, (byte) 0x64, (byte) 0x22, (byte) 0xe6,
-            (byte) 0x1a, (byte) 0xa1, (byte) 0xe1, (byte) 0x06, (byte) 0x68, (byte) 0x3b,
-            (byte) 0xbc, (byte) 0x9f, (byte) 0xd3, (byte) 0xae, (byte) 0x77, (byte) 0x5e,
-            (byte) 0x88, (byte) 0x0c, (byte) 0x5e, (byte) 0x0c, (byte) 0xb2, (byte) 0x38
-    };
-
-    /**
-     * Generated from above and converted with:
-     *
-     * openssl x509 -outform d -in usercert.pem | xxd -i | sed 's/0x/(byte) 0x/g'
-     */
-    private static final byte[] FAKE_EC_USER_1 = new byte[] {
-            (byte) 0x30, (byte) 0x82, (byte) 0x02, (byte) 0x51, (byte) 0x30, (byte) 0x82,
-            (byte) 0x01, (byte) 0xba, (byte) 0xa0, (byte) 0x03, (byte) 0x02, (byte) 0x01,
-            (byte) 0x02, (byte) 0x02, (byte) 0x01, (byte) 0x01, (byte) 0x30, (byte) 0x0d,
-            (byte) 0x06, (byte) 0x09, (byte) 0x2a, (byte) 0x86, (byte) 0x48, (byte) 0x86,
-            (byte) 0xf7, (byte) 0x0d, (byte) 0x01, (byte) 0x01, (byte) 0x05, (byte) 0x05,
-            (byte) 0x00, (byte) 0x30, (byte) 0x45, (byte) 0x31, (byte) 0x0b, (byte) 0x30,
-            (byte) 0x09, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x06,
-            (byte) 0x13, (byte) 0x02, (byte) 0x41, (byte) 0x55, (byte) 0x31, (byte) 0x13,
-            (byte) 0x30, (byte) 0x11, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04,
-            (byte) 0x08, (byte) 0x0c, (byte) 0x0a, (byte) 0x53, (byte) 0x6f, (byte) 0x6d,
-            (byte) 0x65, (byte) 0x2d, (byte) 0x53, (byte) 0x74, (byte) 0x61, (byte) 0x74,
-            (byte) 0x65, (byte) 0x31, (byte) 0x21, (byte) 0x30, (byte) 0x1f, (byte) 0x06,
-            (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x0a, (byte) 0x0c, (byte) 0x18,
-            (byte) 0x49, (byte) 0x6e, (byte) 0x74, (byte) 0x65, (byte) 0x72, (byte) 0x6e,
-            (byte) 0x65, (byte) 0x74, (byte) 0x20, (byte) 0x57, (byte) 0x69, (byte) 0x64,
-            (byte) 0x67, (byte) 0x69, (byte) 0x74, (byte) 0x73, (byte) 0x20, (byte) 0x50,
-            (byte) 0x74, (byte) 0x79, (byte) 0x20, (byte) 0x4c, (byte) 0x74, (byte) 0x64,
-            (byte) 0x30, (byte) 0x1e, (byte) 0x17, (byte) 0x0d, (byte) 0x31, (byte) 0x33,
-            (byte) 0x30, (byte) 0x38, (byte) 0x32, (byte) 0x37, (byte) 0x31, (byte) 0x36,
-            (byte) 0x33, (byte) 0x30, (byte) 0x30, (byte) 0x38, (byte) 0x5a, (byte) 0x17,
-            (byte) 0x0d, (byte) 0x32, (byte) 0x33, (byte) 0x30, (byte) 0x38, (byte) 0x32,
-            (byte) 0x35, (byte) 0x31, (byte) 0x36, (byte) 0x33, (byte) 0x30, (byte) 0x30,
-            (byte) 0x38, (byte) 0x5a, (byte) 0x30, (byte) 0x62, (byte) 0x31, (byte) 0x0b,
-            (byte) 0x30, (byte) 0x09, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04,
-            (byte) 0x06, (byte) 0x13, (byte) 0x02, (byte) 0x41, (byte) 0x55, (byte) 0x31,
-            (byte) 0x13, (byte) 0x30, (byte) 0x11, (byte) 0x06, (byte) 0x03, (byte) 0x55,
-            (byte) 0x04, (byte) 0x08, (byte) 0x0c, (byte) 0x0a, (byte) 0x53, (byte) 0x6f,
-            (byte) 0x6d, (byte) 0x65, (byte) 0x2d, (byte) 0x53, (byte) 0x74, (byte) 0x61,
-            (byte) 0x74, (byte) 0x65, (byte) 0x31, (byte) 0x21, (byte) 0x30, (byte) 0x1f,
-            (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x0a, (byte) 0x0c,
-            (byte) 0x18, (byte) 0x49, (byte) 0x6e, (byte) 0x74, (byte) 0x65, (byte) 0x72,
-            (byte) 0x6e, (byte) 0x65, (byte) 0x74, (byte) 0x20, (byte) 0x57, (byte) 0x69,
-            (byte) 0x64, (byte) 0x67, (byte) 0x69, (byte) 0x74, (byte) 0x73, (byte) 0x20,
-            (byte) 0x50, (byte) 0x74, (byte) 0x79, (byte) 0x20, (byte) 0x4c, (byte) 0x74,
-            (byte) 0x64, (byte) 0x31, (byte) 0x1b, (byte) 0x30, (byte) 0x19, (byte) 0x06,
-            (byte) 0x03, (byte) 0x55, (byte) 0x04, (byte) 0x03, (byte) 0x0c, (byte) 0x12,
-            (byte) 0x73, (byte) 0x65, (byte) 0x72, (byte) 0x76, (byte) 0x65, (byte) 0x72,
-            (byte) 0x2e, (byte) 0x65, (byte) 0x78, (byte) 0x61, (byte) 0x6d, (byte) 0x70,
-            (byte) 0x6c, (byte) 0x65, (byte) 0x2e, (byte) 0x63, (byte) 0x6f, (byte) 0x6d,
-            (byte) 0x30, (byte) 0x59, (byte) 0x30, (byte) 0x13, (byte) 0x06, (byte) 0x07,
-            (byte) 0x2a, (byte) 0x86, (byte) 0x48, (byte) 0xce, (byte) 0x3d, (byte) 0x02,
-            (byte) 0x01, (byte) 0x06, (byte) 0x08, (byte) 0x2a, (byte) 0x86, (byte) 0x48,
-            (byte) 0xce, (byte) 0x3d, (byte) 0x03, (byte) 0x01, (byte) 0x07, (byte) 0x03,
-            (byte) 0x42, (byte) 0x00, (byte) 0x04, (byte) 0xd9, (byte) 0xcf, (byte) 0xe7,
-            (byte) 0x9b, (byte) 0x23, (byte) 0xc8, (byte) 0xa3, (byte) 0xb8, (byte) 0x33,
-            (byte) 0x14, (byte) 0xa4, (byte) 0x4d, (byte) 0x75, (byte) 0x90, (byte) 0xf3,
-            (byte) 0xcd, (byte) 0x43, (byte) 0xe5, (byte) 0x1b, (byte) 0x05, (byte) 0x1d,
-            (byte) 0xf3, (byte) 0xd0, (byte) 0xa3, (byte) 0xb7, (byte) 0x32, (byte) 0x5f,
-            (byte) 0x79, (byte) 0xdc, (byte) 0x88, (byte) 0xb8, (byte) 0x4d, (byte) 0xb3,
-            (byte) 0xd1, (byte) 0x6d, (byte) 0xf7, (byte) 0x75, (byte) 0xf3, (byte) 0xbf,
-            (byte) 0x50, (byte) 0xa1, (byte) 0xbc, (byte) 0x03, (byte) 0x64, (byte) 0x22,
-            (byte) 0xe6, (byte) 0x1a, (byte) 0xa1, (byte) 0xe1, (byte) 0x06, (byte) 0x68,
-            (byte) 0x3b, (byte) 0xbc, (byte) 0x9f, (byte) 0xd3, (byte) 0xae, (byte) 0x77,
-            (byte) 0x5e, (byte) 0x88, (byte) 0x0c, (byte) 0x5e, (byte) 0x0c, (byte) 0xb2,
-            (byte) 0x38, (byte) 0xa3, (byte) 0x7b, (byte) 0x30, (byte) 0x79, (byte) 0x30,
-            (byte) 0x09, (byte) 0x06, (byte) 0x03, (byte) 0x55, (byte) 0x1d, (byte) 0x13,
-            (byte) 0x04, (byte) 0x02, (byte) 0x30, (byte) 0x00, (byte) 0x30, (byte) 0x2c,
-            (byte) 0x06, (byte) 0x09, (byte) 0x60, (byte) 0x86, (byte) 0x48, (byte) 0x01,
-            (byte) 0x86, (byte) 0xf8, (byte) 0x42, (byte) 0x01, (byte) 0x0d, (byte) 0x04,
-            (byte) 0x1f, (byte) 0x16, (byte) 0x1d, (byte) 0x4f, (byte) 0x70, (byte) 0x65,
-            (byte) 0x6e, (byte) 0x53, (byte) 0x53, (byte) 0x4c, (byte) 0x20, (byte) 0x47,
-            (byte) 0x65, (byte) 0x6e, (byte) 0x65, (byte) 0x72, (byte) 0x61, (byte) 0x74,
-            (byte) 0x65, (byte) 0x64, (byte) 0x20, (byte) 0x43, (byte) 0x65, (byte) 0x72,
-            (byte) 0x74, (byte) 0x69, (byte) 0x66, (byte) 0x69, (byte) 0x63, (byte) 0x61,
-            (byte) 0x74, (byte) 0x65, (byte) 0x30, (byte) 0x1d, (byte) 0x06, (byte) 0x03,
-            (byte) 0x55, (byte) 0x1d, (byte) 0x0e, (byte) 0x04, (byte) 0x16, (byte) 0x04,
-            (byte) 0x14, (byte) 0xd5, (byte) 0xc4, (byte) 0x72, (byte) 0xbd, (byte) 0xd2,
-            (byte) 0x4e, (byte) 0x90, (byte) 0x1b, (byte) 0x14, (byte) 0x32, (byte) 0xdb,
-            (byte) 0x03, (byte) 0xae, (byte) 0xfa, (byte) 0x27, (byte) 0x7d, (byte) 0x8d,
-            (byte) 0xe4, (byte) 0x80, (byte) 0x58, (byte) 0x30, (byte) 0x1f, (byte) 0x06,
-            (byte) 0x03, (byte) 0x55, (byte) 0x1d, (byte) 0x23, (byte) 0x04, (byte) 0x18,
-            (byte) 0x30, (byte) 0x16, (byte) 0x80, (byte) 0x14, (byte) 0x5f, (byte) 0x5b,
-            (byte) 0x5e, (byte) 0xac, (byte) 0x29, (byte) 0xfa, (byte) 0xa1, (byte) 0x9f,
-            (byte) 0x9e, (byte) 0xad, (byte) 0x46, (byte) 0xe1, (byte) 0xbc, (byte) 0x20,
-            (byte) 0x72, (byte) 0xcf, (byte) 0x4a, (byte) 0xd4, (byte) 0xfa, (byte) 0xe3,
-            (byte) 0x30, (byte) 0x0d, (byte) 0x06, (byte) 0x09, (byte) 0x2a, (byte) 0x86,
-            (byte) 0x48, (byte) 0x86, (byte) 0xf7, (byte) 0x0d, (byte) 0x01, (byte) 0x01,
-            (byte) 0x05, (byte) 0x05, (byte) 0x00, (byte) 0x03, (byte) 0x81, (byte) 0x81,
-            (byte) 0x00, (byte) 0x43, (byte) 0x99, (byte) 0x9f, (byte) 0x67, (byte) 0x08,
-            (byte) 0x43, (byte) 0xd5, (byte) 0x6b, (byte) 0x6f, (byte) 0xd7, (byte) 0x05,
-            (byte) 0xd6, (byte) 0x75, (byte) 0x34, (byte) 0x30, (byte) 0xca, (byte) 0x20,
-            (byte) 0x47, (byte) 0x61, (byte) 0xa1, (byte) 0x89, (byte) 0xb6, (byte) 0xf1,
-            (byte) 0x49, (byte) 0x7b, (byte) 0xd9, (byte) 0xb9, (byte) 0xe8, (byte) 0x1e,
-            (byte) 0x29, (byte) 0x74, (byte) 0x0a, (byte) 0x67, (byte) 0xc0, (byte) 0x7d,
-            (byte) 0xb8, (byte) 0xe6, (byte) 0x39, (byte) 0xa8, (byte) 0x5e, (byte) 0xc3,
-            (byte) 0xb0, (byte) 0xa1, (byte) 0x30, (byte) 0x6a, (byte) 0x1f, (byte) 0x1d,
-            (byte) 0xfc, (byte) 0x11, (byte) 0x59, (byte) 0x0b, (byte) 0xb9, (byte) 0xad,
-            (byte) 0x3a, (byte) 0x4e, (byte) 0x50, (byte) 0x0a, (byte) 0x61, (byte) 0xdb,
-            (byte) 0x75, (byte) 0x6b, (byte) 0xe5, (byte) 0x3f, (byte) 0x8d, (byte) 0xde,
-            (byte) 0x28, (byte) 0x68, (byte) 0xb1, (byte) 0x29, (byte) 0x9a, (byte) 0x18,
-            (byte) 0x8a, (byte) 0xfc, (byte) 0x3f, (byte) 0x13, (byte) 0x93, (byte) 0x29,
-            (byte) 0xed, (byte) 0x22, (byte) 0x7c, (byte) 0xb4, (byte) 0x50, (byte) 0xd5,
-            (byte) 0x4d, (byte) 0x32, (byte) 0x4d, (byte) 0x42, (byte) 0x2b, (byte) 0x29,
-            (byte) 0x97, (byte) 0x86, (byte) 0xc0, (byte) 0x01, (byte) 0x00, (byte) 0x25,
-            (byte) 0xf6, (byte) 0xd3, (byte) 0x2a, (byte) 0xd8, (byte) 0xda, (byte) 0x13,
-            (byte) 0x94, (byte) 0x12, (byte) 0x78, (byte) 0x14, (byte) 0x0b, (byte) 0x51,
-            (byte) 0xc0, (byte) 0x45, (byte) 0xb4, (byte) 0x02, (byte) 0x37, (byte) 0x98,
-            (byte) 0x42, (byte) 0x3c, (byte) 0xcb, (byte) 0x2e, (byte) 0xe4, (byte) 0x38,
-            (byte) 0x69, (byte) 0x1b, (byte) 0x72, (byte) 0xf0, (byte) 0xaa, (byte) 0x89,
-            (byte) 0x7e, (byte) 0xde, (byte) 0xb2
-    };
-
-    /**
-     * The amount of time to allow before and after expected time for variance
-     * in timing tests.
-     */
-    private static final long SLOP_TIME_MILLIS = 15000L;
-
-    @Override
-    protected void setUp() throws Exception {
-        mAndroidKeyStore = android.security.KeyStore.getInstance();
-
-        assertTrue(mAndroidKeyStore.reset());
-        assertFalse(mAndroidKeyStore.isUnlocked());
-
-        mKeyStore = java.security.KeyStore.getInstance("AndroidKeyStore");
-    }
-
-    private void setupPassword() {
-        assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
-        assertTrue(mAndroidKeyStore.isUnlocked());
-
-        assertEquals(0, mAndroidKeyStore.list("").length);
-    }
-
-    private void assertAliases(final String[] expectedAliases) throws KeyStoreException {
-        final Enumeration<String> aliases = mKeyStore.aliases();
-        int count = 0;
-
-        final Set<String> expectedSet = new HashSet<String>();
-        expectedSet.addAll(Arrays.asList(expectedAliases));
-
-        while (aliases.hasMoreElements()) {
-            count++;
-            final String alias = aliases.nextElement();
-            assertTrue("The alias should be in the expected set", expectedSet.contains(alias));
-            expectedSet.remove(alias);
-        }
-        assertTrue("The expected set and actual set should be exactly equal", expectedSet.isEmpty());
-        assertEquals("There should be the correct number of keystore entries",
-                expectedAliases.length, count);
-    }
-
-    public void testKeyStore_Aliases_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertAliases(new String[] {});
-
-        assertTrue(mAndroidKeyStore.generate(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED,
-                null));
-
-        assertAliases(new String[] { TEST_ALIAS_1 });
-
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_2, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertAliases(new String[] { TEST_ALIAS_1, TEST_ALIAS_2 });
-    }
-
-    public void testKeyStore_Aliases_NotInitialized_Encrypted_Failure() throws Exception {
-        setupPassword();
-
-        try {
-            mKeyStore.aliases();
-            fail("KeyStore should throw exception when not initialized");
-        } catch (KeyStoreException success) {
-        }
-    }
-
-    public void testKeyStore_ContainsAliases_PrivateAndCA_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertAliases(new String[] {});
-
-        assertTrue(mAndroidKeyStore.generate(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED,
-                null));
-
-        assertTrue("Should contain generated private key", mKeyStore.containsAlias(TEST_ALIAS_1));
-
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_2, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertTrue("Should contain added CA certificate", mKeyStore.containsAlias(TEST_ALIAS_2));
-
-        assertFalse("Should not contain unadded certificate alias",
-                mKeyStore.containsAlias(TEST_ALIAS_3));
-    }
-
-    public void testKeyStore_ContainsAliases_CAOnly_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_2, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertTrue("Should contain added CA certificate", mKeyStore.containsAlias(TEST_ALIAS_2));
-    }
-
-    public void testKeyStore_ContainsAliases_NonExistent_Encrypted_Failure() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertFalse("Should contain added CA certificate", mKeyStore.containsAlias(TEST_ALIAS_1));
-    }
-
-    public void testKeyStore_DeleteEntry_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        // TEST_ALIAS_1
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_USER_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        // TEST_ALIAS_2
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_2, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        // TEST_ALIAS_3
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_3, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertAliases(new String[] { TEST_ALIAS_1, TEST_ALIAS_2, TEST_ALIAS_3 });
-
-        mKeyStore.deleteEntry(TEST_ALIAS_1);
-
-        assertAliases(new String[] { TEST_ALIAS_2, TEST_ALIAS_3 });
-
-        mKeyStore.deleteEntry(TEST_ALIAS_3);
-
-        assertAliases(new String[] { TEST_ALIAS_2 });
-
-        mKeyStore.deleteEntry(TEST_ALIAS_2);
-
-        assertAliases(new String[] { });
-    }
-
-    public void testKeyStore_DeleteEntry_EmptyStore_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        // Should not throw when a non-existent entry is requested for delete.
-        mKeyStore.deleteEntry(TEST_ALIAS_1);
-    }
-
-    public void testKeyStore_DeleteEntry_NonExistent_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        // TEST_ALIAS_1
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_USER_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        // Should not throw when a non-existent entry is requested for delete.
-        mKeyStore.deleteEntry(TEST_ALIAS_2);
-    }
-
-    public void testKeyStore_GetCertificate_Single_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertAliases(new String[] { TEST_ALIAS_1 });
-
-        assertNull("Certificate should not exist in keystore",
-                mKeyStore.getCertificate(TEST_ALIAS_2));
-
-        Certificate retrieved = mKeyStore.getCertificate(TEST_ALIAS_1);
-
-        assertNotNull("Retrieved certificate should not be null", retrieved);
-
-        CertificateFactory f = CertificateFactory.getInstance("X.509");
-        Certificate actual = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        assertEquals("Actual and retrieved certificates should be the same", actual, retrieved);
-    }
-
-    public void testKeyStore_GetCertificate_NonExist_Encrypted_Failure() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertNull("Certificate should not exist in keystore",
-                mKeyStore.getCertificate(TEST_ALIAS_1));
-    }
-
-    public void testKeyStore_GetCertificateAlias_CAEntry_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        CertificateFactory f = CertificateFactory.getInstance("X.509");
-        Certificate actual = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        assertEquals("Stored certificate alias should be found", TEST_ALIAS_1,
-                mKeyStore.getCertificateAlias(actual));
-    }
-
-    public void testKeyStore_GetCertificateAlias_PrivateKeyEntry_Encrypted_Success()
-            throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_USER_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        CertificateFactory f = CertificateFactory.getInstance("X.509");
-        Certificate actual = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-
-        assertEquals("Stored certificate alias should be found", TEST_ALIAS_1,
-                mKeyStore.getCertificateAlias(actual));
-    }
-
-    public void testKeyStore_GetCertificateAlias_CAEntry_WithPrivateKeyUsingCA_Encrypted_Success()
-            throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        // Insert TrustedCertificateEntry with CA name
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_2, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        // Insert PrivateKeyEntry that uses the same CA
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_USER_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        CertificateFactory f = CertificateFactory.getInstance("X.509");
-        Certificate actual = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        assertEquals("Stored certificate alias should be found", TEST_ALIAS_2,
-                mKeyStore.getCertificateAlias(actual));
-    }
-
-    public void testKeyStore_GetCertificateAlias_NonExist_Empty_Encrypted_Failure()
-            throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        CertificateFactory f = CertificateFactory.getInstance("X.509");
-        Certificate actual = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        assertNull("Stored certificate alias should not be found",
-                mKeyStore.getCertificateAlias(actual));
-    }
-
-    public void testKeyStore_GetCertificateAlias_NonExist_Encrypted_Failure() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        CertificateFactory f = CertificateFactory.getInstance("X.509");
-        Certificate userCert = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-
-        assertNull("Stored certificate alias should be found",
-                mKeyStore.getCertificateAlias(userCert));
-    }
-
-    public void testKeyStore_GetCertificateChain_SingleLength_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_USER_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        CertificateFactory cf = CertificateFactory.getInstance("X.509");
-        Certificate[] expected = new Certificate[2];
-        expected[0] = cf.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-        expected[1] = cf.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        Certificate[] actual = mKeyStore.getCertificateChain(TEST_ALIAS_1);
-
-        assertNotNull("Returned certificate chain should not be null", actual);
-        assertEquals("Returned certificate chain should be correct size", expected.length,
-                actual.length);
-        assertEquals("First certificate should be user certificate", expected[0], actual[0]);
-        assertEquals("Second certificate should be CA certificate", expected[1], actual[1]);
-
-        // Negative test when keystore is populated.
-        assertNull("Stored certificate alias should not be found",
-                mKeyStore.getCertificateChain(TEST_ALIAS_2));
-    }
-
-    public void testKeyStore_GetCertificateChain_NonExist_Encrypted_Failure() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertNull("Stored certificate alias should not be found",
-                mKeyStore.getCertificateChain(TEST_ALIAS_1));
-    }
-
-    public void testKeyStore_GetCreationDate_PrivateKeyEntry_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_USER_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        Date now = new Date();
-        Date actual = mKeyStore.getCreationDate(TEST_ALIAS_1);
-
-        Date expectedAfter = new Date(now.getTime() - SLOP_TIME_MILLIS);
-        Date expectedBefore = new Date(now.getTime() + SLOP_TIME_MILLIS);
-
-        assertTrue("Time should be close to current time", actual.before(expectedBefore));
-        assertTrue("Time should be close to current time", actual.after(expectedAfter));
-    }
-
-    public void testKeyStore_GetCreationDate_PrivateKeyEntry_Unencrypted_Success() throws Exception {
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_NONE));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_USER_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_NONE));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_NONE));
-
-        Date now = new Date();
-        Date actual = mKeyStore.getCreationDate(TEST_ALIAS_1);
-
-        Date expectedAfter = new Date(now.getTime() - SLOP_TIME_MILLIS);
-        Date expectedBefore = new Date(now.getTime() + SLOP_TIME_MILLIS);
-
-        assertTrue("Time should be close to current time", actual.before(expectedBefore));
-        assertTrue("Time should be close to current time", actual.after(expectedAfter));
-    }
-
-    public void testKeyStore_GetCreationDate_CAEntry_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        Date now = new Date();
-        Date actual = mKeyStore.getCreationDate(TEST_ALIAS_1);
-        assertNotNull("Certificate should be found", actual);
-
-        Date expectedAfter = new Date(now.getTime() - SLOP_TIME_MILLIS);
-        Date expectedBefore = new Date(now.getTime() + SLOP_TIME_MILLIS);
-
-        assertTrue("Time should be close to current time", actual.before(expectedBefore));
-        assertTrue("Time should be close to current time", actual.after(expectedAfter));
-    }
-
-    public void testKeyStore_GetEntry_NullParams_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_USER_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        Entry entry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-        assertNotNull("Entry should exist", entry);
-
-        assertTrue("Should be a PrivateKeyEntry", entry instanceof PrivateKeyEntry);
-
-        PrivateKeyEntry keyEntry = (PrivateKeyEntry) entry;
-
-        assertPrivateKeyEntryEquals(keyEntry, "RSA", FAKE_RSA_KEY_1, FAKE_RSA_USER_1,
-                FAKE_RSA_CA_1);
-    }
-
-    public void testKeyStore_GetEntry_EC_NullParams_Unencrypted_Success() throws Exception {
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_EC_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_NONE));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1,
-                FAKE_EC_USER_1, KeyStore.UID_SELF, KeyStore.FLAG_NONE));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_EC_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_NONE));
-
-        Entry entry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-        assertNotNull("Entry should exist", entry);
-
-        assertTrue("Should be a PrivateKeyEntry", entry instanceof PrivateKeyEntry);
-
-        PrivateKeyEntry keyEntry = (PrivateKeyEntry) entry;
-
-        assertPrivateKeyEntryEquals(keyEntry, "EC", FAKE_EC_KEY_1, FAKE_EC_USER_1, FAKE_EC_CA_1);
-    }
-
-    public void testKeyStore_GetEntry_RSA_NullParams_Unencrypted_Success() throws Exception {
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_NONE));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1,
-                FAKE_RSA_USER_1, KeyStore.UID_SELF, KeyStore.FLAG_NONE));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_NONE));
-
-        Entry entry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-        assertNotNull("Entry should exist", entry);
-
-        assertTrue("Should be a PrivateKeyEntry", entry instanceof PrivateKeyEntry);
-
-        PrivateKeyEntry keyEntry = (PrivateKeyEntry) entry;
-
-        assertPrivateKeyEntryEquals(keyEntry, "RSA", FAKE_RSA_KEY_1, FAKE_RSA_USER_1,
-                FAKE_RSA_CA_1);
-    }
-
-    @SuppressWarnings("unchecked")
-    private void assertPrivateKeyEntryEquals(PrivateKeyEntry keyEntry, String keyType, byte[] key,
-            byte[] cert, byte[] ca) throws Exception {
-        KeyFactory keyFact = KeyFactory.getInstance(keyType);
-        PrivateKey expectedKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(key));
-
-        CertificateFactory certFact = CertificateFactory.getInstance("X.509");
-        Certificate expectedCert = certFact.generateCertificate(new ByteArrayInputStream(cert));
-
-        final Collection<Certificate> expectedChain;
-        if (ca != null) {
-            expectedChain = (Collection<Certificate>) certFact
-                    .generateCertificates(new ByteArrayInputStream(ca));
-        } else {
-            expectedChain = null;
-        }
-
-        assertPrivateKeyEntryEquals(keyEntry, expectedKey, expectedCert, expectedChain);
-    }
-
-    private void assertPrivateKeyEntryEquals(PrivateKeyEntry keyEntry, PrivateKey expectedKey,
-            Certificate expectedCert, Collection<Certificate> expectedChain) throws Exception {
-        if (expectedKey instanceof ECKey) {
-            assertEquals("Returned PrivateKey should be what we inserted",
-                    ((ECKey) expectedKey).getParams().getCurve(),
-                    ((ECKey) keyEntry.getCertificate().getPublicKey()).getParams().getCurve());
-        } else if (expectedKey instanceof RSAKey) {
-            assertEquals("Returned PrivateKey should be what we inserted",
-                    ((RSAKey) expectedKey).getModulus(),
-                    ((RSAKey) keyEntry.getPrivateKey()).getModulus());
-        }
-
-        assertEquals("Returned Certificate should be what we inserted", expectedCert,
-                keyEntry.getCertificate());
-
-        Certificate[] actualChain = keyEntry.getCertificateChain();
-
-        assertEquals("First certificate in chain should be user cert", expectedCert, actualChain[0]);
-
-        if (expectedChain == null) {
-            assertEquals("Certificate chain should not include CAs", 1, actualChain.length);
-        } else {
-            int i = 1;
-            final Iterator<Certificate> it = expectedChain.iterator();
-            while (it.hasNext()) {
-                assertEquals("CA chain certificate should equal what we put in", it.next(),
-                        actualChain[i++]);
-            }
-        }
-    }
-
-    public void testKeyStore_GetEntry_Nonexistent_NullParams_Encrypted_Failure() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertNull("A non-existent entry should return null",
-                mKeyStore.getEntry(TEST_ALIAS_1, null));
-    }
-
-    public void testKeyStore_GetEntry_Nonexistent_NullParams_Unencrypted_Failure() throws Exception {
-        mKeyStore.load(null, null);
-
-        assertNull("A non-existent entry should return null",
-                mKeyStore.getEntry(TEST_ALIAS_1, null));
-    }
-
-    public void testKeyStore_GetKey_NoPassword_Encrypted_Success() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_USER_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        Key key = mKeyStore.getKey(TEST_ALIAS_1, null);
-        assertNotNull("Key should exist", key);
-
-        assertTrue("Should be a PrivateKey", key instanceof PrivateKey);
-        assertTrue("Should be a RSAKey", key instanceof RSAKey);
-
-        KeyFactory keyFact = KeyFactory.getInstance("RSA");
-        PrivateKey expectedKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-
-        assertEquals("Inserted key should be same as retrieved key",
-                ((RSAKey) expectedKey).getModulus(), ((RSAKey) key).getModulus());
-    }
-
-    public void testKeyStore_GetKey_NoPassword_Unencrypted_Success() throws Exception {
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_NONE));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_USER_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_NONE));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_NONE));
-
-        Key key = mKeyStore.getKey(TEST_ALIAS_1, null);
-        assertNotNull("Key should exist", key);
-
-        assertTrue("Should be a PrivateKey", key instanceof PrivateKey);
-        assertTrue("Should be a RSAKey", key instanceof RSAKey);
-
-        KeyFactory keyFact = KeyFactory.getInstance("RSA");
-        PrivateKey expectedKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-
-        assertEquals("Inserted key should be same as retrieved key",
-                ((RSAKey) expectedKey).getModulus(), ((RSAKey) key).getModulus());
-    }
-
-    public void testKeyStore_GetKey_Certificate_Encrypted_Failure() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertNull("Certificate entries should return null", mKeyStore.getKey(TEST_ALIAS_1, null));
-    }
-
-    public void testKeyStore_GetKey_NonExistent_Encrypted_Failure() throws Exception {
-        setupPassword();
-
-        mKeyStore.load(null, null);
-
-        assertNull("A non-existent entry should return null", mKeyStore.getKey(TEST_ALIAS_1, null));
-    }
-
-    public void testKeyStore_GetProvider_Encrypted_Success() throws Exception {
-        assertEquals(AndroidKeyStoreProvider.PROVIDER_NAME, mKeyStore.getProvider().getName());
-        setupPassword();
-        assertEquals(AndroidKeyStoreProvider.PROVIDER_NAME, mKeyStore.getProvider().getName());
-    }
-
-    public void testKeyStore_GetType_Encrypted_Success() throws Exception {
-        assertEquals(AndroidKeyStoreSpi.NAME, mKeyStore.getType());
-        setupPassword();
-        assertEquals(AndroidKeyStoreSpi.NAME, mKeyStore.getType());
-    }
-
-    public void testKeyStore_IsCertificateEntry_CA_Encrypted_Success() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertTrue("Should return true for CA certificate",
-                mKeyStore.isCertificateEntry(TEST_ALIAS_1));
-    }
-
-    public void testKeyStore_IsCertificateEntry_PrivateKey_Encrypted_Failure() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_USER_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertFalse("Should return false for PrivateKeyEntry",
-                mKeyStore.isCertificateEntry(TEST_ALIAS_1));
-    }
-
-    public void testKeyStore_IsCertificateEntry_NonExist_Encrypted_Failure() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        assertFalse("Should return false for non-existent entry",
-                mKeyStore.isCertificateEntry(TEST_ALIAS_1));
-    }
-
-    public void testKeyStore_IsCertificateEntry_NonExist_Unencrypted_Failure() throws Exception {
-        mKeyStore.load(null, null);
-
-        assertFalse("Should return false for non-existent entry",
-                mKeyStore.isCertificateEntry(TEST_ALIAS_1));
-    }
-
-    public void testKeyStore_IsKeyEntry_PrivateKey_Encrypted_Success() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_USER_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertTrue("Should return true for PrivateKeyEntry", mKeyStore.isKeyEntry(TEST_ALIAS_1));
-    }
-
-    public void testKeyStore_IsKeyEntry_CA_Encrypted_Failure() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertFalse("Should return false for CA certificate", mKeyStore.isKeyEntry(TEST_ALIAS_1));
-    }
-
-    public void testKeyStore_IsKeyEntry_NonExist_Encrypted_Failure() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        assertFalse("Should return false for non-existent entry",
-                mKeyStore.isKeyEntry(TEST_ALIAS_1));
-    }
-
-    public void testKeyStore_SetCertificate_CA_Encrypted_Success() throws Exception {
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-        final Certificate actual = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        mKeyStore.setCertificateEntry(TEST_ALIAS_1, actual);
-        assertAliases(new String[] { TEST_ALIAS_1 });
-
-        Certificate retrieved = mKeyStore.getCertificate(TEST_ALIAS_1);
-
-        assertEquals("Retrieved certificate should be the same as the one inserted", actual,
-                retrieved);
-    }
-
-    public void testKeyStore_SetCertificate_CAExists_Overwrite_Encrypted_Success() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertAliases(new String[] { TEST_ALIAS_1 });
-
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-        final Certificate cert = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        // TODO have separate FAKE_CA for second test
-        mKeyStore.setCertificateEntry(TEST_ALIAS_1, cert);
-
-        assertAliases(new String[] { TEST_ALIAS_1 });
-    }
-
-    public void testKeyStore_SetCertificate_PrivateKeyExists_Encrypted_Failure() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.importKey(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
-                FAKE_RSA_KEY_1, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_USER_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertAliases(new String[] { TEST_ALIAS_1 });
-
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-        final Certificate cert = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        try {
-            mKeyStore.setCertificateEntry(TEST_ALIAS_1, cert);
-            fail("Should throw when trying to overwrite a PrivateKey entry with a Certificate");
-        } catch (KeyStoreException success) {
-        }
-    }
-
-    public void testKeyStore_SetEntry_PrivateKeyEntry_Encrypted_Success() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        KeyFactory keyFact = KeyFactory.getInstance("RSA");
-        PrivateKey expectedKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-
-        final Certificate[] expectedChain = new Certificate[2];
-        expectedChain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-        expectedChain[1] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        PrivateKeyEntry expected = new PrivateKeyEntry(expectedKey, expectedChain);
-
-        mKeyStore.setEntry(TEST_ALIAS_1, expected, null);
-
-        Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-        assertNotNull("Retrieved entry should exist", actualEntry);
-
-        assertTrue("Retrieved entry should be of type PrivateKeyEntry",
-                actualEntry instanceof PrivateKeyEntry);
-
-        PrivateKeyEntry actual = (PrivateKeyEntry) actualEntry;
-
-        assertPrivateKeyEntryEquals(actual, "RSA", FAKE_RSA_KEY_1, FAKE_RSA_USER_1, FAKE_RSA_CA_1);
-    }
-
-    public void testKeyStore_SetEntry_PrivateKeyEntry_EC_Unencrypted_Success() throws Exception {
-        mKeyStore.load(null, null);
-
-        KeyFactory keyFact = KeyFactory.getInstance("EC");
-        PrivateKey expectedKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_EC_KEY_1));
-
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-
-        final Certificate[] expectedChain = new Certificate[2];
-        expectedChain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_EC_USER_1));
-        expectedChain[1] = f.generateCertificate(new ByteArrayInputStream(FAKE_EC_CA_1));
-
-        PrivateKeyEntry expected = new PrivateKeyEntry(expectedKey, expectedChain);
-
-        mKeyStore.setEntry(TEST_ALIAS_1, expected, null);
-
-        Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-        assertNotNull("Retrieved entry should exist", actualEntry);
-
-        assertTrue("Retrieved entry should be of type PrivateKeyEntry",
-                actualEntry instanceof PrivateKeyEntry);
-
-        PrivateKeyEntry actual = (PrivateKeyEntry) actualEntry;
-
-        assertPrivateKeyEntryEquals(actual, "EC", FAKE_EC_KEY_1, FAKE_EC_USER_1, FAKE_EC_CA_1);
-    }
-
-    public void testKeyStore_SetEntry_PrivateKeyEntry_RSA_Unencrypted_Success() throws Exception {
-        mKeyStore.load(null, null);
-
-        KeyFactory keyFact = KeyFactory.getInstance("RSA");
-        PrivateKey expectedKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-
-        final Certificate[] expectedChain = new Certificate[2];
-        expectedChain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-        expectedChain[1] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        PrivateKeyEntry expected = new PrivateKeyEntry(expectedKey, expectedChain);
-
-        mKeyStore.setEntry(TEST_ALIAS_1, expected, null);
-
-        Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-        assertNotNull("Retrieved entry should exist", actualEntry);
-
-        assertTrue("Retrieved entry should be of type PrivateKeyEntry",
-                actualEntry instanceof PrivateKeyEntry);
-
-        PrivateKeyEntry actual = (PrivateKeyEntry) actualEntry;
-
-        assertPrivateKeyEntryEquals(actual, "RSA", FAKE_RSA_KEY_1, FAKE_RSA_USER_1, FAKE_RSA_CA_1);
-    }
-
-    public void testKeyStore_SetEntry_PrivateKeyEntry_Params_Unencrypted_Failure() throws Exception {
-        mKeyStore.load(null, null);
-
-        KeyFactory keyFact = KeyFactory.getInstance("RSA");
-        PrivateKey expectedKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-
-        final Certificate[] expectedChain = new Certificate[2];
-        expectedChain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-        expectedChain[1] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        PrivateKeyEntry entry = new PrivateKeyEntry(expectedKey, expectedChain);
-
-        try {
-            mKeyStore.setEntry(TEST_ALIAS_1, entry,
-                    new KeyStoreParameter.Builder(getContext())
-                    .setEncryptionRequired(true)
-                    .build());
-            fail("Shouldn't be able to insert encrypted entry when KeyStore uninitialized");
-        } catch (KeyStoreException expected) {
-        }
-
-        assertNull(mKeyStore.getEntry(TEST_ALIAS_1, null));
-    }
-
-    public void
-            testKeyStore_SetEntry_PrivateKeyEntry_Overwrites_PrivateKeyEntry_Encrypted_Success()
-            throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        final KeyFactory keyFact = KeyFactory.getInstance("RSA");
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-
-        // Start with PrivateKeyEntry
-        {
-            PrivateKey expectedKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-
-            final Certificate[] expectedChain = new Certificate[2];
-            expectedChain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-            expectedChain[1] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-            PrivateKeyEntry expected = new PrivateKeyEntry(expectedKey, expectedChain);
-
-            mKeyStore.setEntry(TEST_ALIAS_1, expected, null);
-
-            Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-            assertNotNull("Retrieved entry should exist", actualEntry);
-
-            assertTrue("Retrieved entry should be of type PrivateKeyEntry",
-                    actualEntry instanceof PrivateKeyEntry);
-
-            PrivateKeyEntry actual = (PrivateKeyEntry) actualEntry;
-
-            assertPrivateKeyEntryEquals(actual, "RSA", FAKE_RSA_KEY_1, FAKE_RSA_USER_1,
-                    FAKE_RSA_CA_1);
-        }
-
-        // TODO make entirely new test vector for the overwrite
-        // Replace with PrivateKeyEntry
-        {
-            PrivateKey expectedKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-
-            final Certificate[] expectedChain = new Certificate[2];
-            expectedChain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-            expectedChain[1] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-            PrivateKeyEntry expected = new PrivateKeyEntry(expectedKey, expectedChain);
-
-            mKeyStore.setEntry(TEST_ALIAS_1, expected, null);
-
-            Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-            assertNotNull("Retrieved entry should exist", actualEntry);
-
-            assertTrue("Retrieved entry should be of type PrivateKeyEntry",
-                    actualEntry instanceof PrivateKeyEntry);
-
-            PrivateKeyEntry actual = (PrivateKeyEntry) actualEntry;
-
-            assertPrivateKeyEntryEquals(actual, "RSA", FAKE_RSA_KEY_1, FAKE_RSA_USER_1,
-                    FAKE_RSA_CA_1);
-        }
-    }
-
-    public void testKeyStore_SetEntry_CAEntry_Overwrites_PrivateKeyEntry_Encrypted_Success()
-            throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-
-        // Start with TrustedCertificateEntry
-        {
-            final Certificate caCert = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-            TrustedCertificateEntry expectedCertEntry = new TrustedCertificateEntry(caCert);
-            mKeyStore.setEntry(TEST_ALIAS_1, expectedCertEntry, null);
-
-            Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-            assertNotNull("Retrieved entry should exist", actualEntry);
-            assertTrue("Retrieved entry should be of type TrustedCertificateEntry",
-                    actualEntry instanceof TrustedCertificateEntry);
-            TrustedCertificateEntry actualCertEntry = (TrustedCertificateEntry) actualEntry;
-            assertEquals("Stored and retrieved certificates should be the same",
-                    expectedCertEntry.getTrustedCertificate(),
-                    actualCertEntry.getTrustedCertificate());
-        }
-
-        // Replace with PrivateKeyEntry
-        {
-            KeyFactory keyFact = KeyFactory.getInstance("RSA");
-            PrivateKey expectedKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-            final Certificate[] expectedChain = new Certificate[2];
-            expectedChain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-            expectedChain[1] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-            PrivateKeyEntry expectedPrivEntry = new PrivateKeyEntry(expectedKey, expectedChain);
-
-            mKeyStore.setEntry(TEST_ALIAS_1, expectedPrivEntry, null);
-
-            Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-            assertNotNull("Retrieved entry should exist", actualEntry);
-            assertTrue("Retrieved entry should be of type PrivateKeyEntry",
-                    actualEntry instanceof PrivateKeyEntry);
-
-            PrivateKeyEntry actualPrivEntry = (PrivateKeyEntry) actualEntry;
-            assertPrivateKeyEntryEquals(actualPrivEntry, "RSA", FAKE_RSA_KEY_1, FAKE_RSA_USER_1,
-                    FAKE_RSA_CA_1);
-        }
-    }
-
-    public void testKeyStore_SetEntry_PrivateKeyEntry_Overwrites_CAEntry_Encrypted_Success()
-            throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-
-        final Certificate caCert = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        // Start with PrivateKeyEntry
-        {
-            KeyFactory keyFact = KeyFactory.getInstance("RSA");
-            PrivateKey expectedKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-            final Certificate[] expectedChain = new Certificate[2];
-            expectedChain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-            expectedChain[1] = caCert;
-
-            PrivateKeyEntry expectedPrivEntry = new PrivateKeyEntry(expectedKey, expectedChain);
-
-            mKeyStore.setEntry(TEST_ALIAS_1, expectedPrivEntry, null);
-
-            Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-            assertNotNull("Retrieved entry should exist", actualEntry);
-            assertTrue("Retrieved entry should be of type PrivateKeyEntry",
-                    actualEntry instanceof PrivateKeyEntry);
-
-            PrivateKeyEntry actualPrivEntry = (PrivateKeyEntry) actualEntry;
-            assertPrivateKeyEntryEquals(actualPrivEntry, "RSA", FAKE_RSA_KEY_1, FAKE_RSA_USER_1,
-                    FAKE_RSA_CA_1);
-        }
-
-        // Replace with TrustedCertificateEntry
-        {
-            TrustedCertificateEntry expectedCertEntry = new TrustedCertificateEntry(caCert);
-            mKeyStore.setEntry(TEST_ALIAS_1, expectedCertEntry, null);
-
-            Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-            assertNotNull("Retrieved entry should exist", actualEntry);
-            assertTrue("Retrieved entry should be of type TrustedCertificateEntry",
-                    actualEntry instanceof TrustedCertificateEntry);
-            TrustedCertificateEntry actualCertEntry = (TrustedCertificateEntry) actualEntry;
-            assertEquals("Stored and retrieved certificates should be the same",
-                    expectedCertEntry.getTrustedCertificate(),
-                    actualCertEntry.getTrustedCertificate());
-        }
-    }
-
-    public
-            void
-            testKeyStore_SetEntry_PrivateKeyEntry_Overwrites_ShortPrivateKeyEntry_Encrypted_Success()
-            throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-
-        final Certificate caCert = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        // Start with PrivateKeyEntry
-        {
-            KeyFactory keyFact = KeyFactory.getInstance("RSA");
-            PrivateKey expectedKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-            final Certificate[] expectedChain = new Certificate[2];
-            expectedChain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-            expectedChain[1] = caCert;
-
-            PrivateKeyEntry expectedPrivEntry = new PrivateKeyEntry(expectedKey, expectedChain);
-
-            mKeyStore.setEntry(TEST_ALIAS_1, expectedPrivEntry, null);
-
-            Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-            assertNotNull("Retrieved entry should exist", actualEntry);
-            assertTrue("Retrieved entry should be of type PrivateKeyEntry",
-                    actualEntry instanceof PrivateKeyEntry);
-
-            PrivateKeyEntry actualPrivEntry = (PrivateKeyEntry) actualEntry;
-            assertPrivateKeyEntryEquals(actualPrivEntry, "RSA", FAKE_RSA_KEY_1, FAKE_RSA_USER_1,
-                    FAKE_RSA_CA_1);
-        }
-
-        // Replace with PrivateKeyEntry that has no chain
-        {
-            KeyFactory keyFact = KeyFactory.getInstance("RSA");
-            PrivateKey expectedKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-            final Certificate[] expectedChain = new Certificate[1];
-            expectedChain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-
-            PrivateKeyEntry expectedPrivEntry = new PrivateKeyEntry(expectedKey, expectedChain);
-
-            mKeyStore.setEntry(TEST_ALIAS_1, expectedPrivEntry, null);
-
-            Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-            assertNotNull("Retrieved entry should exist", actualEntry);
-            assertTrue("Retrieved entry should be of type PrivateKeyEntry",
-                    actualEntry instanceof PrivateKeyEntry);
-
-            PrivateKeyEntry actualPrivEntry = (PrivateKeyEntry) actualEntry;
-            assertPrivateKeyEntryEquals(actualPrivEntry, "RSA", FAKE_RSA_KEY_1, FAKE_RSA_USER_1,
-                    null);
-        }
-    }
-
-    public void testKeyStore_SetEntry_CAEntry_Overwrites_CAEntry_Encrypted_Success()
-            throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-
-        // Insert TrustedCertificateEntry
-        {
-            final Certificate caCert = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-            TrustedCertificateEntry expectedCertEntry = new TrustedCertificateEntry(caCert);
-            mKeyStore.setEntry(TEST_ALIAS_1, expectedCertEntry, null);
-
-            Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-            assertNotNull("Retrieved entry should exist", actualEntry);
-            assertTrue("Retrieved entry should be of type TrustedCertificateEntry",
-                    actualEntry instanceof TrustedCertificateEntry);
-            TrustedCertificateEntry actualCertEntry = (TrustedCertificateEntry) actualEntry;
-            assertEquals("Stored and retrieved certificates should be the same",
-                    expectedCertEntry.getTrustedCertificate(),
-                    actualCertEntry.getTrustedCertificate());
-        }
-
-        // Replace with TrustedCertificateEntry of USER
-        {
-            final Certificate userCert = f
-                    .generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-
-            TrustedCertificateEntry expectedUserEntry = new TrustedCertificateEntry(userCert);
-            mKeyStore.setEntry(TEST_ALIAS_1, expectedUserEntry, null);
-
-            Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-            assertNotNull("Retrieved entry should exist", actualEntry);
-            assertTrue("Retrieved entry should be of type TrustedCertificateEntry",
-                    actualEntry instanceof TrustedCertificateEntry);
-            TrustedCertificateEntry actualUserEntry = (TrustedCertificateEntry) actualEntry;
-            assertEquals("Stored and retrieved certificates should be the same",
-                    expectedUserEntry.getTrustedCertificate(),
-                    actualUserEntry.getTrustedCertificate());
-        }
-    }
-
-    public void testKeyStore_SetKeyEntry_ProtectedKey_Encrypted_Failure() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-
-        final Certificate caCert = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        KeyFactory keyFact = KeyFactory.getInstance("RSA");
-        PrivateKey privKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-        final Certificate[] chain = new Certificate[2];
-        chain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-        chain[1] = caCert;
-
-        try {
-            mKeyStore.setKeyEntry(TEST_ALIAS_1, privKey, "foo".toCharArray(), chain);
-            fail("Should fail when a password is specified");
-        } catch (KeyStoreException success) {
-        }
-    }
-
-    public void testKeyStore_SetKeyEntry_Encrypted_Success() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-
-        final Certificate caCert = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        KeyFactory keyFact = KeyFactory.getInstance("RSA");
-        PrivateKey privKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-        final Certificate[] chain = new Certificate[2];
-        chain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-        chain[1] = caCert;
-
-        mKeyStore.setKeyEntry(TEST_ALIAS_1, privKey, null, chain);
-
-        Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-        assertNotNull("Retrieved entry should exist", actualEntry);
-
-        assertTrue("Retrieved entry should be of type PrivateKeyEntry",
-                actualEntry instanceof PrivateKeyEntry);
-
-        PrivateKeyEntry actual = (PrivateKeyEntry) actualEntry;
-
-        assertPrivateKeyEntryEquals(actual, "RSA", FAKE_RSA_KEY_1, FAKE_RSA_USER_1, FAKE_RSA_CA_1);
-    }
-
-    public void testKeyStore_SetKeyEntry_Replaced_Encrypted_Success() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        final CertificateFactory f = CertificateFactory.getInstance("X.509");
-
-        final Certificate caCert = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_CA_1));
-
-        // Insert initial key
-        {
-            KeyFactory keyFact = KeyFactory.getInstance("RSA");
-            PrivateKey privKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-            final Certificate[] chain = new Certificate[2];
-            chain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-            chain[1] = caCert;
-
-            mKeyStore.setKeyEntry(TEST_ALIAS_1, privKey, null, chain);
-
-            Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-            assertNotNull("Retrieved entry should exist", actualEntry);
-
-            assertTrue("Retrieved entry should be of type PrivateKeyEntry",
-                    actualEntry instanceof PrivateKeyEntry);
-
-            PrivateKeyEntry actual = (PrivateKeyEntry) actualEntry;
-
-            assertPrivateKeyEntryEquals(actual, "RSA", FAKE_RSA_KEY_1, FAKE_RSA_USER_1,
-                    FAKE_RSA_CA_1);
-        }
-
-        // TODO make a separate key
-        // Replace key
-        {
-            KeyFactory keyFact = KeyFactory.getInstance("RSA");
-            PrivateKey privKey = keyFact.generatePrivate(new PKCS8EncodedKeySpec(FAKE_RSA_KEY_1));
-            final Certificate[] chain = new Certificate[2];
-            chain[0] = f.generateCertificate(new ByteArrayInputStream(FAKE_RSA_USER_1));
-            chain[1] = caCert;
-
-            mKeyStore.setKeyEntry(TEST_ALIAS_1, privKey, null, chain);
-
-            Entry actualEntry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-            assertNotNull("Retrieved entry should exist", actualEntry);
-
-            assertTrue("Retrieved entry should be of type PrivateKeyEntry",
-                    actualEntry instanceof PrivateKeyEntry);
-
-            PrivateKeyEntry actual = (PrivateKeyEntry) actualEntry;
-
-            assertPrivateKeyEntryEquals(actual, "RSA", FAKE_RSA_KEY_1, FAKE_RSA_USER_1,
-                    FAKE_RSA_CA_1);
-        }
-    }
-
-    @SuppressWarnings("deprecation")
-    private static X509Certificate generateCertificate(android.security.KeyStore keyStore,
-            String alias, BigInteger serialNumber, X500Principal subjectDN, Date notBefore,
-            Date notAfter) throws Exception {
-        final String privateKeyAlias = Credentials.USER_PRIVATE_KEY + alias;
-
-        KeyPair keyPair = AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore(
-                keyStore, privateKeyAlias, KeyStore.UID_SELF);
-
-        final X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();
-        certGen.setPublicKey(keyPair.getPublic());
-        certGen.setSerialNumber(serialNumber);
-        certGen.setSubjectDN(subjectDN);
-        certGen.setIssuerDN(subjectDN);
-        certGen.setNotBefore(notBefore);
-        certGen.setNotAfter(notAfter);
-        certGen.setSignatureAlgorithm("sha1WithRSA");
-
-        final X509Certificate cert = certGen.generate(keyPair.getPrivate());
-
-        return cert;
-    }
-
-    public void testKeyStore_SetKeyEntry_ReplacedChain_Encrypted_Success() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        // Create key #1
-        {
-            final String privateKeyAlias = Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1;
-            assertTrue(mAndroidKeyStore.generate(privateKeyAlias, KeyStore.UID_SELF,
-                    NativeConstants.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED, null));
-
-            Key key = mKeyStore.getKey(TEST_ALIAS_1, null);
-
-            assertTrue(key instanceof PrivateKey);
-
-            PrivateKey expectedKey = (PrivateKey) key;
-
-            X509Certificate expectedCert = generateCertificate(mAndroidKeyStore, TEST_ALIAS_1,
-                    TEST_SERIAL_1, TEST_DN_1, NOW, NOW_PLUS_10_YEARS);
-
-            assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1,
-                    expectedCert.getEncoded(), KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-            Entry entry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-
-            assertTrue(entry instanceof PrivateKeyEntry);
-
-            PrivateKeyEntry keyEntry = (PrivateKeyEntry) entry;
-
-            assertPrivateKeyEntryEquals(keyEntry, expectedKey, expectedCert, null);
-        }
-
-        // Replace key #1 with new chain
-        {
-            Key key = mKeyStore.getKey(TEST_ALIAS_1, null);
-
-            assertTrue(key instanceof PrivateKey);
-
-            PrivateKey expectedKey = (PrivateKey) key;
-
-            X509Certificate expectedCert = generateCertificate(mAndroidKeyStore, TEST_ALIAS_1,
-                    TEST_SERIAL_2, TEST_DN_2, NOW, NOW_PLUS_10_YEARS);
-
-            mKeyStore.setKeyEntry(TEST_ALIAS_1, expectedKey, null,
-                    new Certificate[] { expectedCert });
-
-            Entry entry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-
-            assertTrue(entry instanceof PrivateKeyEntry);
-
-            PrivateKeyEntry keyEntry = (PrivateKeyEntry) entry;
-
-            assertPrivateKeyEntryEquals(keyEntry, expectedKey, expectedCert, null);
-        }
-    }
-
-    public void testKeyStore_SetKeyEntry_ReplacedChain_DifferentPrivateKey_Encrypted_Failure()
-            throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        // Create key #1
-        {
-            final String privateKeyAlias = Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1;
-            assertTrue(mAndroidKeyStore.generate(privateKeyAlias, KeyStore.UID_SELF,
-                    NativeConstants.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED, null));
-
-            X509Certificate cert = generateCertificate(mAndroidKeyStore, TEST_ALIAS_1,
-                    TEST_SERIAL_1, TEST_DN_1, NOW, NOW_PLUS_10_YEARS);
-
-            assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1,
-                    cert.getEncoded(), KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        }
-
-        // Create key #2
-        {
-            final String privateKeyAlias = Credentials.USER_PRIVATE_KEY + TEST_ALIAS_2;
-            assertTrue(mAndroidKeyStore.generate(privateKeyAlias, KeyStore.UID_SELF,
-                    NativeConstants.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED, null));
-
-            X509Certificate cert = generateCertificate(mAndroidKeyStore, TEST_ALIAS_2,
-                    TEST_SERIAL_2, TEST_DN_2, NOW, NOW_PLUS_10_YEARS);
-
-            assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_2,
-                    cert.getEncoded(), KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-        }
-
-        // Replace key #1 with key #2
-        {
-            Key key1 = mKeyStore.getKey(TEST_ALIAS_2, null);
-
-            X509Certificate cert = generateCertificate(mAndroidKeyStore, TEST_ALIAS_2,
-                    TEST_SERIAL_2, TEST_DN_2, NOW, NOW_PLUS_10_YEARS);
-
-            try {
-                mKeyStore.setKeyEntry(TEST_ALIAS_1, key1, null, new Certificate[] { cert });
-                fail("Should not allow setting of KeyEntry with wrong PrivaetKey");
-            } catch (KeyStoreException success) {
-            }
-        }
-    }
-
-    public void testKeyStore_SetKeyEntry_ReplacedChain_UnencryptedToEncrypted_Failure()
-            throws Exception {
-        mKeyStore.load(null, null);
-
-        // Create key #1
-        {
-            final String privateKeyAlias = Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1;
-            assertTrue(mAndroidKeyStore.generate(privateKeyAlias,
-                    android.security.KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA, 1024,
-                    android.security.KeyStore.FLAG_NONE, null));
-
-            X509Certificate cert =
-                    generateCertificate(mAndroidKeyStore, TEST_ALIAS_1, TEST_SERIAL_1, TEST_DN_1,
-                            NOW, NOW_PLUS_10_YEARS);
-
-            assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1,
-                    cert.getEncoded(), android.security.KeyStore.UID_SELF,
-                    android.security.KeyStore.FLAG_NONE));
-        }
-
-        // Replace with one that requires encryption
-        {
-            Entry entry = mKeyStore.getEntry(TEST_ALIAS_1, null);
-
-            try {
-                mKeyStore.setEntry(TEST_ALIAS_1, entry,
-                        new KeyStoreParameter.Builder(getContext())
-                                .setEncryptionRequired(true)
-                                .build());
-                fail("Should not allow setting of Entry without unlocked keystore");
-            } catch (KeyStoreException success) {
-            }
-
-            assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
-            assertTrue(mAndroidKeyStore.isUnlocked());
-
-            mKeyStore.setEntry(TEST_ALIAS_1, entry,
-                    new KeyStoreParameter.Builder(getContext())
-                            .setEncryptionRequired(true)
-                            .build());
-        }
-    }
-
-    public void testKeyStore_Size_Encrypted_Success() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_1, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertEquals("The keystore size should match expected", 1, mKeyStore.size());
-        assertAliases(new String[] { TEST_ALIAS_1 });
-
-        assertTrue(mAndroidKeyStore.put(Credentials.CA_CERTIFICATE + TEST_ALIAS_2, FAKE_RSA_CA_1,
-                KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-
-        assertEquals("The keystore size should match expected", 2, mKeyStore.size());
-        assertAliases(new String[] { TEST_ALIAS_1, TEST_ALIAS_2 });
-
-        assertTrue(mAndroidKeyStore.generate(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_3,
-                KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED,
-                null));
-
-        assertEquals("The keystore size should match expected", 3, mKeyStore.size());
-        assertAliases(new String[] { TEST_ALIAS_1, TEST_ALIAS_2, TEST_ALIAS_3 });
-
-        assertTrue(mAndroidKeyStore.delete(Credentials.CA_CERTIFICATE + TEST_ALIAS_1));
-
-        assertEquals("The keystore size should match expected", 2, mKeyStore.size());
-        assertAliases(new String[] { TEST_ALIAS_2, TEST_ALIAS_3 });
-
-        assertTrue(mAndroidKeyStore.delete(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_3));
-
-        assertEquals("The keystore size should match expected", 1, mKeyStore.size());
-        assertAliases(new String[] { TEST_ALIAS_2 });
-    }
-
-    public void testKeyStore_Store_LoadStoreParam_Encrypted_Failure() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        try {
-            mKeyStore.store(null);
-            fail("Should throw UnsupportedOperationException when trying to store");
-        } catch (UnsupportedOperationException success) {
-        }
-    }
-
-    public void testKeyStore_Load_InputStreamSupplied_Encrypted_Failure() throws Exception {
-        byte[] buf = "FAKE KEYSTORE".getBytes();
-        ByteArrayInputStream is = new ByteArrayInputStream(buf);
-
-        try {
-            mKeyStore.load(is, null);
-            fail("Should throw IllegalArgumentException when InputStream is supplied");
-        } catch (IllegalArgumentException success) {
-        }
-    }
-
-    public void testKeyStore_Load_PasswordSupplied_Encrypted_Failure() throws Exception {
-        try {
-            mKeyStore.load(null, "password".toCharArray());
-            fail("Should throw IllegalArgumentException when password is supplied");
-        } catch (IllegalArgumentException success) {
-        }
-    }
-
-    public void testKeyStore_Store_OutputStream_Encrypted_Failure() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        OutputStream sink = new ByteArrayOutputStream();
-        try {
-            mKeyStore.store(sink, null);
-            fail("Should throw UnsupportedOperationException when trying to store");
-        } catch (UnsupportedOperationException success) {
-        }
-
-        try {
-            mKeyStore.store(sink, "blah".toCharArray());
-            fail("Should throw UnsupportedOperationException when trying to store");
-        } catch (UnsupportedOperationException success) {
-        }
-    }
-
-    private void setupKey() throws Exception {
-        final String privateKeyAlias = Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1;
-        assertTrue(mAndroidKeyStore
-                .generate(privateKeyAlias, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA, 1024,
-                        KeyStore.FLAG_ENCRYPTED, null));
-
-        X509Certificate cert = generateCertificate(mAndroidKeyStore, TEST_ALIAS_1, TEST_SERIAL_1,
-                TEST_DN_1, NOW, NOW_PLUS_10_YEARS);
-
-        assertTrue(mAndroidKeyStore.put(Credentials.USER_CERTIFICATE + TEST_ALIAS_1,
-                cert.getEncoded(), KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
-    }
-
-    public void testKeyStore_KeyOperations_Wrap_Encrypted_Success() throws Exception {
-        setupPassword();
-        mKeyStore.load(null, null);
-
-        setupKey();
-
-        // Test key usage
-        Entry e = mKeyStore.getEntry(TEST_ALIAS_1, null);
-        assertNotNull(e);
-        assertTrue(e instanceof PrivateKeyEntry);
-
-        PrivateKeyEntry privEntry = (PrivateKeyEntry) e;
-        PrivateKey privKey = privEntry.getPrivateKey();
-        assertNotNull(privKey);
-
-        PublicKey pubKey = privEntry.getCertificate().getPublicKey();
-
-        Cipher c = Cipher.getInstance("RSA/ECB/PKCS1Padding");
-        c.init(Cipher.WRAP_MODE, pubKey);
-
-        byte[] expectedKey = new byte[] {
-                0x00, 0x05, (byte) 0xAA, (byte) 0x0A5, (byte) 0xFF, 0x55, 0x0A
-        };
-
-        SecretKey expectedSecret = new SecretKeySpec(expectedKey, "AES");
-
-        byte[] wrappedExpected = c.wrap(expectedSecret);
-
-        c.init(Cipher.UNWRAP_MODE, privKey);
-        SecretKey actualSecret = (SecretKey) c.unwrap(wrappedExpected, "AES", Cipher.SECRET_KEY);
-
-        assertEquals(Arrays.toString(expectedSecret.getEncoded()),
-                Arrays.toString(actualSecret.getEncoded()));
-    }
-}
diff --git a/legacy-test/Android.mk b/legacy-test/Android.mk
index 8efda2a..0e6b31e 100644
--- a/legacy-test/Android.mk
+++ b/legacy-test/Android.mk
@@ -31,6 +31,109 @@
 
 include $(BUILD_JAVA_LIBRARY)
 
+# Build the repackaged-legacy-test library
+# ========================================
+# This contains repackaged versions of the classes from legacy-test.
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_MODULE := repackaged-legacy-test
+LOCAL_NO_STANDARD_LIBRARIES := true
+LOCAL_JAVA_LIBRARIES := core-oj core-libart framework
+LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+# Generate the stub source files for legacy.test.stubs
+# ====================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := \
+    $(call all-java-files-under, src)
+
+LOCAL_JAVA_LIBRARIES := \
+    core-oj \
+    core-libart \
+    framework \
+
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+LOCAL_DROIDDOC_SOURCE_PATH := $(LOCAL_PATH)/src
+
+LEGACY_TEST_OUTPUT_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/legacy.test.stubs_intermediates/api.txt
+LEGACY_TEST_OUTPUT_REMOVED_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/legacy.test.stubs_intermediates/removed.txt
+
+LEGACY_TEST_API_FILE := $(LOCAL_PATH)/api/legacy-test-current.txt
+LEGACY_TEST_REMOVED_API_FILE := $(LOCAL_PATH)/api/legacy-test-removed.txt
+
+LOCAL_DROIDDOC_OPTIONS:= \
+    -stubpackages android.test:android.test.suitebuilder.annotation:com.android.internal.util:junit.framework \
+    -stubsourceonly \
+    -stubs $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/legacy.test.stubs_intermediates/src \
+    -nodocs \
+    -api $(LEGACY_TEST_OUTPUT_API_FILE) \
+    -removedApi $(LEGACY_TEST_OUTPUT_REMOVED_API_FILE) \
+
+LOCAL_UNINSTALLABLE_MODULE := true
+LOCAL_MODULE := legacy-test-api-stubs-gen
+
+include $(BUILD_DROIDDOC)
+
+# Remember the target that will trigger the code generation.
+legacy_test_api_gen_stamp := $(full_target)
+
+# Add some additional dependencies
+$(LEGACY_TEST_OUTPUT_API_FILE): $(full_target)
+$(LEGACY_TEST_OUTPUT_REMOVED_API_FILE): $(full_target)
+
+# Build the legacy.test.stubs library
+# ===================================
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := legacy.test.stubs
+
+LOCAL_SOURCE_FILES_ALL_GENERATED := true
+
+# Make sure to run droiddoc first to generate the stub source files.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(legacy_test_api_gen_stamp)
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+# Archive a copy of the classes.jar in SDK build.
+$(call dist-for-goals,sdk win_sdk,$(full_classes_jar):legacy.test.stubs.jar)
+
+# Check that the legacy.test.stubs library has not changed
+# ========================================================
+
+# Check that the API we're building hasn't changed from the not-yet-released
+# SDK version.
+$(eval $(call check-api, \
+    check-legacy-test-api-current, \
+    $(LEGACY_TEST_API_FILE), \
+    $(LEGACY_TEST_OUTPUT_API_FILE), \
+    $(LEGACY_TEST_REMOVED_API_FILE), \
+    $(LEGACY_TEST_OUTPUT_REMOVED_API_FILE), \
+    -error 2 -error 3 -error 4 -error 5 -error 6 \
+    -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
+    -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \
+    -error 25 -error 26 -error 27, \
+    cat $(LOCAL_PATH)/api/apicheck_msg_legacy_test.txt, \
+    check-legacy-test-api, \
+    $(call doc-timestamp-for,legacy-test-api-stubs-gen) \
+    ))
+
+.PHONY: check-legacy-test-api
+checkapi: check-legacy-test-api
+
+.PHONY: update-legacy-test-api
+update-api: update-legacy-test-api
+
+update-legacy-test-api: $(LEGACY_TEST_OUTPUT_API_FILE) | $(ACP)
+	@echo Copying current.txt
+	$(hide) $(ACP) $(LEGACY_TEST_OUTPUT_API_FILE) $(LEGACY_TEST_API_FILE)
+	@echo Copying removed.txt
+	$(hide) $(ACP) $(LEGACY_TEST_OUTPUT_REMOVED_API_FILE) $(LEGACY_TEST_REMOVED_API_FILE)
+
 # Build the legacy-android-test library
 # =====================================
 # This contains the android.test classes that were in Android API level 25,
@@ -48,19 +151,6 @@
 
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
-# Build the legacy-android-tests library
-# ======================================
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under, tests)
-LOCAL_MODULE := legacy-android-tests
-LOCAL_NO_STANDARD_LIBRARIES := true
-LOCAL_JAVA_LIBRARIES := core-oj core-libart framework junit
-LOCAL_STATIC_JAVA_LIBRARIES := legacy-android-test
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
 ifeq ($(HOST_OS),linux)
 # Build the legacy-performance-test-hostdex library
 # =================================================
diff --git a/legacy-test/api/apicheck_msg_legacy_test.txt b/legacy-test/api/apicheck_msg_legacy_test.txt
new file mode 100644
index 0000000..ad5f235
--- /dev/null
+++ b/legacy-test/api/apicheck_msg_legacy_test.txt
@@ -0,0 +1,17 @@
+
+******************************
+You have tried to change the API from what has been previously approved.
+
+To make these errors go away, you have two choices:
+   1) You can add "@hide" javadoc comments to the methods, etc. listed in the
+      errors above.
+
+   2) You can update legacy-test-current.txt by executing the following command:
+         make update-legacy-test-api
+
+      To submit the revised legacy-test-current.txt to the main Android repository,
+      you will need approval.
+******************************
+
+
+
diff --git a/legacy-test/api/legacy-test-current.txt b/legacy-test/api/legacy-test-current.txt
new file mode 100644
index 0000000..7ebd6aa
--- /dev/null
+++ b/legacy-test/api/legacy-test-current.txt
@@ -0,0 +1,227 @@
+package android.test {
+
+  public deprecated class AndroidTestCase extends junit.framework.TestCase {
+    ctor public AndroidTestCase();
+    method public void assertActivityRequiresPermission(java.lang.String, java.lang.String, java.lang.String);
+    method public void assertReadingContentUriRequiresPermission(android.net.Uri, java.lang.String);
+    method public void assertWritingContentUriRequiresPermission(android.net.Uri, java.lang.String);
+    method public android.content.Context getContext();
+    method protected void scrubClass(java.lang.Class<?>) throws java.lang.IllegalAccessException;
+    method public void setContext(android.content.Context);
+    method public void testAndroidTestCaseSetupProperly();
+    field protected android.content.Context mContext;
+  }
+
+  public abstract deprecated class FlakyTest implements java.lang.annotation.Annotation {
+  }
+
+  public deprecated class InstrumentationTestCase extends junit.framework.TestCase {
+    ctor public InstrumentationTestCase();
+    method public android.app.Instrumentation getInstrumentation();
+    method public deprecated void injectInsrumentation(android.app.Instrumentation);
+    method public void injectInstrumentation(android.app.Instrumentation);
+    method public final <T extends android.app.Activity> T launchActivity(java.lang.String, java.lang.Class<T>, android.os.Bundle);
+    method public final <T extends android.app.Activity> T launchActivityWithIntent(java.lang.String, java.lang.Class<T>, android.content.Intent);
+    method public void runTestOnUiThread(java.lang.Runnable) throws java.lang.Throwable;
+    method public void sendKeys(java.lang.String);
+    method public void sendKeys(int...);
+    method public void sendRepeatedKeys(int...);
+  }
+
+  public deprecated class InstrumentationTestSuite extends junit.framework.TestSuite {
+    ctor public InstrumentationTestSuite(android.app.Instrumentation);
+    ctor public InstrumentationTestSuite(java.lang.String, android.app.Instrumentation);
+    ctor public InstrumentationTestSuite(java.lang.Class, android.app.Instrumentation);
+    method public void addTestSuite(java.lang.Class);
+  }
+
+  public abstract deprecated interface PerformanceTestCase {
+    method public abstract boolean isPerformanceOnly();
+    method public abstract int startPerformance(android.test.PerformanceTestCase.Intermediates);
+  }
+
+  public static abstract interface PerformanceTestCase.Intermediates {
+    method public abstract void addIntermediate(java.lang.String);
+    method public abstract void addIntermediate(java.lang.String, long);
+    method public abstract void finishTiming(boolean);
+    method public abstract void setInternalIterations(int);
+    method public abstract void startTiming(boolean);
+  }
+
+  public abstract deprecated class UiThreadTest implements java.lang.annotation.Annotation {
+  }
+
+}
+
+package android.test.suitebuilder.annotation {
+
+  public abstract deprecated class LargeTest implements java.lang.annotation.Annotation {
+  }
+
+  public abstract deprecated class MediumTest implements java.lang.annotation.Annotation {
+  }
+
+  public abstract deprecated class SmallTest implements java.lang.annotation.Annotation {
+  }
+
+  public abstract deprecated class Smoke implements java.lang.annotation.Annotation {
+  }
+
+  public abstract deprecated class Suppress implements java.lang.annotation.Annotation {
+  }
+
+}
+
+package com.android.internal.util {
+
+  public abstract deprecated interface Predicate<T> {
+    method public abstract boolean apply(T);
+  }
+
+}
+
+package junit.framework {
+
+  public class Assert {
+    ctor protected Assert();
+    method public static void assertEquals(java.lang.String, java.lang.Object, java.lang.Object);
+    method public static void assertEquals(java.lang.Object, java.lang.Object);
+    method public static void assertEquals(java.lang.String, java.lang.String, java.lang.String);
+    method public static void assertEquals(java.lang.String, java.lang.String);
+    method public static void assertEquals(java.lang.String, double, double, double);
+    method public static void assertEquals(double, double, double);
+    method public static void assertEquals(java.lang.String, float, float, float);
+    method public static void assertEquals(float, float, float);
+    method public static void assertEquals(java.lang.String, long, long);
+    method public static void assertEquals(long, long);
+    method public static void assertEquals(java.lang.String, boolean, boolean);
+    method public static void assertEquals(boolean, boolean);
+    method public static void assertEquals(java.lang.String, byte, byte);
+    method public static void assertEquals(byte, byte);
+    method public static void assertEquals(java.lang.String, char, char);
+    method public static void assertEquals(char, char);
+    method public static void assertEquals(java.lang.String, short, short);
+    method public static void assertEquals(short, short);
+    method public static void assertEquals(java.lang.String, int, int);
+    method public static void assertEquals(int, int);
+    method public static void assertFalse(java.lang.String, boolean);
+    method public static void assertFalse(boolean);
+    method public static void assertNotNull(java.lang.Object);
+    method public static void assertNotNull(java.lang.String, java.lang.Object);
+    method public static void assertNotSame(java.lang.String, java.lang.Object, java.lang.Object);
+    method public static void assertNotSame(java.lang.Object, java.lang.Object);
+    method public static void assertNull(java.lang.Object);
+    method public static void assertNull(java.lang.String, java.lang.Object);
+    method public static void assertSame(java.lang.String, java.lang.Object, java.lang.Object);
+    method public static void assertSame(java.lang.Object, java.lang.Object);
+    method public static void assertTrue(java.lang.String, boolean);
+    method public static void assertTrue(boolean);
+    method public static void fail(java.lang.String);
+    method public static void fail();
+    method public static void failNotEquals(java.lang.String, java.lang.Object, java.lang.Object);
+    method public static void failNotSame(java.lang.String, java.lang.Object, java.lang.Object);
+    method public static void failSame(java.lang.String);
+    method public static java.lang.String format(java.lang.String, java.lang.Object, java.lang.Object);
+  }
+
+  public class AssertionFailedError extends java.lang.AssertionError {
+    ctor public AssertionFailedError();
+    ctor public AssertionFailedError(java.lang.String);
+  }
+
+  public class ComparisonFailure extends junit.framework.AssertionFailedError {
+    ctor public ComparisonFailure(java.lang.String, java.lang.String, java.lang.String);
+    method public java.lang.String getActual();
+    method public java.lang.String getExpected();
+  }
+
+  public abstract interface Protectable {
+    method public abstract void protect() throws java.lang.Throwable;
+  }
+
+  public abstract interface Test {
+    method public abstract int countTestCases();
+    method public abstract void run(junit.framework.TestResult);
+  }
+
+  public abstract class TestCase extends junit.framework.Assert implements junit.framework.Test {
+    ctor public TestCase();
+    ctor public TestCase(java.lang.String);
+    method public int countTestCases();
+    method protected junit.framework.TestResult createResult();
+    method public java.lang.String getName();
+    method public junit.framework.TestResult run();
+    method public void run(junit.framework.TestResult);
+    method public void runBare() throws java.lang.Throwable;
+    method protected void runTest() throws java.lang.Throwable;
+    method public void setName(java.lang.String);
+    method protected void setUp() throws java.lang.Exception;
+    method protected void tearDown() throws java.lang.Exception;
+  }
+
+  public class TestFailure {
+    ctor public TestFailure(junit.framework.Test, java.lang.Throwable);
+    method public java.lang.String exceptionMessage();
+    method public junit.framework.Test failedTest();
+    method public boolean isFailure();
+    method public java.lang.Throwable thrownException();
+    method public java.lang.String trace();
+    field protected junit.framework.Test fFailedTest;
+    field protected java.lang.Throwable fThrownException;
+  }
+
+  public abstract interface TestListener {
+    method public abstract void addError(junit.framework.Test, java.lang.Throwable);
+    method public abstract void addFailure(junit.framework.Test, junit.framework.AssertionFailedError);
+    method public abstract void endTest(junit.framework.Test);
+    method public abstract void startTest(junit.framework.Test);
+  }
+
+  public class TestResult {
+    ctor public TestResult();
+    method public synchronized void addError(junit.framework.Test, java.lang.Throwable);
+    method public synchronized void addFailure(junit.framework.Test, junit.framework.AssertionFailedError);
+    method public synchronized void addListener(junit.framework.TestListener);
+    method public void endTest(junit.framework.Test);
+    method public synchronized int errorCount();
+    method public synchronized java.util.Enumeration<junit.framework.TestFailure> errors();
+    method public synchronized int failureCount();
+    method public synchronized java.util.Enumeration<junit.framework.TestFailure> failures();
+    method public synchronized void removeListener(junit.framework.TestListener);
+    method protected void run(junit.framework.TestCase);
+    method public synchronized int runCount();
+    method public void runProtected(junit.framework.Test, junit.framework.Protectable);
+    method public synchronized boolean shouldStop();
+    method public void startTest(junit.framework.Test);
+    method public synchronized void stop();
+    method public synchronized boolean wasSuccessful();
+    field protected java.util.Vector<junit.framework.TestFailure> fErrors;
+    field protected java.util.Vector<junit.framework.TestFailure> fFailures;
+    field protected java.util.Vector<junit.framework.TestListener> fListeners;
+    field protected int fRunTests;
+  }
+
+  public class TestSuite implements junit.framework.Test {
+    ctor public TestSuite();
+    ctor public TestSuite(java.lang.Class<?>);
+    ctor public TestSuite(java.lang.Class<? extends junit.framework.TestCase>, java.lang.String);
+    ctor public TestSuite(java.lang.String);
+    ctor public TestSuite(java.lang.Class<?>...);
+    ctor public TestSuite(java.lang.Class<? extends junit.framework.TestCase>[], java.lang.String);
+    method public void addTest(junit.framework.Test);
+    method public void addTestSuite(java.lang.Class<? extends junit.framework.TestCase>);
+    method public int countTestCases();
+    method public static junit.framework.Test createTest(java.lang.Class<?>, java.lang.String);
+    method public java.lang.String getName();
+    method public static java.lang.reflect.Constructor<?> getTestConstructor(java.lang.Class<?>) throws java.lang.NoSuchMethodException;
+    method public void run(junit.framework.TestResult);
+    method public void runTest(junit.framework.Test, junit.framework.TestResult);
+    method public void setName(java.lang.String);
+    method public junit.framework.Test testAt(int);
+    method public int testCount();
+    method public java.util.Enumeration<junit.framework.Test> tests();
+    method public static junit.framework.Test warning(java.lang.String);
+  }
+
+}
+
diff --git a/legacy-test/api/legacy-test-removed.txt b/legacy-test/api/legacy-test-removed.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/legacy-test/api/legacy-test-removed.txt
diff --git a/legacy-test/jarjar-rules.txt b/legacy-test/jarjar-rules.txt
new file mode 100644
index 0000000..fd8555c
--- /dev/null
+++ b/legacy-test/jarjar-rules.txt
@@ -0,0 +1,3 @@
+rule junit.** repackaged.junit.@1
+rule android.test.** repackaged.android.test.@1
+rule com.android.internal.util.** repackaged.com.android.internal.util.@1
diff --git a/test-runner/src/android/test/suitebuilder/annotation/package.html b/legacy-test/src/android/test/suitebuilder/annotation/package.html
similarity index 100%
rename from test-runner/src/android/test/suitebuilder/annotation/package.html
rename to legacy-test/src/android/test/suitebuilder/annotation/package.html
diff --git a/legacy-test/src/com/android/internal/util/Predicates.java b/legacy-test/src/com/android/internal/util/Predicates.java
deleted file mode 100644
index fe1ff15..0000000
--- a/legacy-test/src/com/android/internal/util/Predicates.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.util;
-
-import java.util.Arrays;
-
-/**
- * Predicates contains static methods for creating the standard set of
- * {@code Predicate} objects.
- *
- * @hide
- */
-public class Predicates {
-
-    private Predicates() {
-    }
-
-    /**
-     * Returns a Predicate that evaluates to true iff each of its components
-     * evaluates to true.  The components are evaluated in order, and evaluation
-     * will be "short-circuited" as soon as the answer is determined.
-     */
-    public static <T> Predicate<T> and(Predicate<? super T>... components) {
-        return Predicates.<T>and(Arrays.asList(components));
-    }
-
-    /**
-     * Returns a Predicate that evaluates to true iff each of its components
-     * evaluates to true.  The components are evaluated in order, and evaluation
-     * will be "short-circuited" as soon as the answer is determined.  Does not
-     * defensively copy the iterable passed in, so future changes to it will alter
-     * the behavior of this Predicate. If components is empty, the returned
-     * Predicate will always evaluate to true.
-     */
-    public static <T> Predicate<T> and(Iterable<? extends Predicate<? super T>> components) {
-        return new AndPredicate(components);
-    }
-
-    /**
-     * Returns a Predicate that evaluates to true iff any one of its components
-     * evaluates to true.  The components are evaluated in order, and evaluation
-     * will be "short-circuited" as soon as the answer is determined.
-     */
-    public static <T> Predicate<T> or(Predicate<? super T>... components) {
-        return Predicates.<T>or(Arrays.asList(components));
-    }
-
-    /**
-     * Returns a Predicate that evaluates to true iff any one of its components
-     * evaluates to true.  The components are evaluated in order, and evaluation
-     * will be "short-circuited" as soon as the answer is determined.  Does not
-     * defensively copy the iterable passed in, so future changes to it will alter
-     * the behavior of this Predicate. If components is empty, the returned
-     * Predicate will always evaluate to false.
-     */
-    public static <T> Predicate<T> or(Iterable<? extends Predicate<? super T>> components) {
-        return new OrPredicate(components);
-    }
-
-    /**
-     * Returns a Predicate that evaluates to true iff the given Predicate
-     * evaluates to false.
-     */
-    public static <T> Predicate<T> not(Predicate<? super T> predicate) {
-        return new NotPredicate<T>(predicate);
-    }
-
-    private static class AndPredicate<T> implements Predicate<T> {
-        private final Iterable<? extends Predicate<? super T>> components;
-
-        private AndPredicate(Iterable<? extends Predicate<? super T>> components) {
-            this.components = components;
-        }
-
-        public boolean apply(T t) {
-            for (Predicate<? super T> predicate : components) {
-                if (!predicate.apply(t)) {
-                    return false;
-                }
-            }
-            return true;
-        }
-    }
-
-    private static class OrPredicate<T> implements Predicate<T> {
-        private final Iterable<? extends Predicate<? super T>> components;
-
-        private OrPredicate(Iterable<? extends Predicate<? super T>> components) {
-            this.components = components;
-        }
-
-        public boolean apply(T t) {
-            for (Predicate<? super T> predicate : components) {
-                if (predicate.apply(t)) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
-
-    private static class NotPredicate<T> implements Predicate<T> {
-        private final Predicate<? super T> predicate;
-
-        private NotPredicate(Predicate<? super T> predicate) {
-            this.predicate = predicate;
-        }
-
-        public boolean apply(T t) {
-            return !predicate.apply(t);
-        }
-    }
-}
diff --git a/legacy-test/tests/com/android/internal/util/PredicatesTest.java b/legacy-test/tests/com/android/internal/util/PredicatesTest.java
deleted file mode 100644
index c46ff05..0000000
--- a/legacy-test/tests/com/android/internal/util/PredicatesTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.util;
-
-import junit.framework.TestCase;
-
-import java.util.ArrayList;
-import java.util.Collections;
-
-public class PredicatesTest extends TestCase {
-
-    private static final Predicate<Object> TRUE = new Predicate<Object>() {
-        public boolean apply(Object o) {
-            return true;
-        }
-    };
-
-    private static final Predicate<Object> FALSE = new Predicate<Object>() {
-        public boolean apply(Object o) {
-            return false;
-        }
-    };
-
-    public void testAndPredicate_AllConditionsTrue() throws Exception {
-        assertTrue(Predicates.and(newArrayList(TRUE)).apply(null));
-        assertTrue(Predicates.and(newArrayList(TRUE, TRUE)).apply(null));
-    }
-
-    public void testAndPredicate_AtLeastOneConditionIsFalse() throws Exception {
-        assertFalse(Predicates.and(newArrayList(FALSE, TRUE, TRUE)).apply(null));
-        assertFalse(Predicates.and(newArrayList(TRUE, FALSE, TRUE)).apply(null));
-        assertFalse(Predicates.and(newArrayList(TRUE, TRUE, FALSE)).apply(null));
-    }
-
-    public void testOrPredicate_AllConditionsTrue() throws Exception {
-        assertTrue(Predicates.or(newArrayList(TRUE, TRUE, TRUE)).apply(null));
-    }
-
-    public void testOrPredicate_AllConditionsFalse() throws Exception {
-        assertFalse(Predicates.or(newArrayList(FALSE, FALSE, FALSE)).apply(null));
-    }
-
-    public void testOrPredicate_AtLeastOneConditionIsTrue() throws Exception {
-        assertTrue(Predicates.or(newArrayList(TRUE, FALSE, FALSE)).apply(null));
-        assertTrue(Predicates.or(newArrayList(FALSE, TRUE, FALSE)).apply(null));
-        assertTrue(Predicates.or(newArrayList(FALSE, FALSE, TRUE)).apply(null));
-    }
-
-    public void testNotPredicate() throws Exception {
-        assertTrue(Predicates.not(FALSE).apply(null));
-        assertFalse(Predicates.not(TRUE).apply(null));
-    }
-
-    private static <E> ArrayList<E> newArrayList(E... elements) {
-        ArrayList<E> list = new ArrayList<E>();
-        Collections.addAll(list, elements);
-        return list;
-    }
-
-}
diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp
index 13187fa..4813b4c 100644
--- a/libs/androidfw/ResourceTypes.cpp
+++ b/libs/androidfw/ResourceTypes.cpp
@@ -3337,13 +3337,14 @@
         clearBagCache();
         const size_t numTypes = types.size();
         for (size_t i = 0; i < numTypes; i++) {
-            const TypeList& typeList = types[i];
+            TypeList& typeList = types.editItemAt(i);
             const size_t numInnerTypes = typeList.size();
             for (size_t j = 0; j < numInnerTypes; j++) {
                 if (typeList[j]->package->owner == owner) {
                     delete typeList[j];
                 }
             }
+            typeList.clear();
         }
 
         const size_t N = packages.size();
diff --git a/libs/hwui/Android.bp b/libs/hwui/Android.bp
index 303d05f..770a57a 100644
--- a/libs/hwui/Android.bp
+++ b/libs/hwui/Android.bp
@@ -36,6 +36,7 @@
         "external/skia/src/effects",
         "external/skia/src/image",
         "external/skia/src/utils",
+        "external/skia/src/gpu",
     ],
 
     product_variables: {
@@ -133,6 +134,7 @@
         "pipeline/skia/SkiaProfileRenderer.cpp",
         "pipeline/skia/SkiaRecordingCanvas.cpp",
         "pipeline/skia/SkiaVulkanPipeline.cpp",
+        "pipeline/skia/VectorDrawableAtlas.cpp",
         "renderstate/Blend.cpp",
         "renderstate/MeshState.cpp",
         "renderstate/OffscreenBufferPool.cpp",
@@ -201,6 +203,8 @@
         "PathParser.cpp",
         "PathTessellator.cpp",
         "PixelBuffer.cpp",
+        "ProfileData.cpp",
+        "ProfileDataContainer.cpp",
         "ProfileRenderer.cpp",
         "Program.cpp",
         "ProgramCache.cpp",
@@ -300,7 +304,6 @@
         "tests/unit/BakedOpDispatcherTests.cpp",
         "tests/unit/BakedOpRendererTests.cpp",
         "tests/unit/BakedOpStateTests.cpp",
-        "tests/unit/BitmapTests.cpp",
         "tests/unit/CacheManagerTests.cpp",
         "tests/unit/CanvasContextTests.cpp",
         "tests/unit/CanvasStateTests.cpp",
@@ -339,6 +342,7 @@
         "tests/unit/TextureCacheTests.cpp",
 	"tests/unit/TypefaceTests.cpp",
         "tests/unit/VectorDrawableTests.cpp",
+        "tests/unit/VectorDrawableAtlasTests.cpp",
     ],
 }
 
diff --git a/libs/hwui/AnimatorManager.cpp b/libs/hwui/AnimatorManager.cpp
index f5bb821..69ead58 100644
--- a/libs/hwui/AnimatorManager.cpp
+++ b/libs/hwui/AnimatorManager.cpp
@@ -71,9 +71,11 @@
 
 void AnimatorManager::pushStaging() {
     if (mNewAnimators.size()) {
-        LOG_ALWAYS_FATAL_IF(!mAnimationHandle,
-                "Trying to start new animators on %p (%s) without an animation handle!",
-                &mParent, mParent.getName());
+        if (CC_UNLIKELY(!mAnimationHandle)) {
+            ALOGW("Trying to start new animators on %p (%s) without an animation handle!",
+                    &mParent, mParent.getName());
+            return;
+        }
 
         // Only add new animators that are not already in the mAnimators list
         for (auto& anim : mNewAnimators) {
diff --git a/libs/hwui/BakedOpRenderer.cpp b/libs/hwui/BakedOpRenderer.cpp
index df2b35b..3c3b317 100644
--- a/libs/hwui/BakedOpRenderer.cpp
+++ b/libs/hwui/BakedOpRenderer.cpp
@@ -208,7 +208,6 @@
     // TODO: Currently assume full FBO damage, due to FrameInfoVisualizer::unionDirty.
     // Should should scissor/set mHasDrawn safely.
     mRenderState.scissor().setEnabled(false);
-    mHasDrawn = true;
     Glop glop;
     GlopBuilder(mRenderState, mCaches, &glop)
             .setRoundRectClipState(nullptr)
@@ -217,7 +216,8 @@
             .setTransform(Matrix4::identity(), TransformFlags::None)
             .setModelViewIdentityEmptyBounds()
             .build();
-    mRenderState.render(glop, mRenderTarget.orthoMatrix);
+    mRenderState.render(glop, mRenderTarget.orthoMatrix, false);
+    mHasDrawn = true;
 }
 
 // clears and re-fills stencil with provided rendertarget space quads,
@@ -234,7 +234,7 @@
             .setTransform(Matrix4::identity(), TransformFlags::None)
             .setModelViewIdentityEmptyBounds()
             .build();
-    mRenderState.render(glop, mRenderTarget.orthoMatrix);
+    mRenderState.render(glop, mRenderTarget.orthoMatrix, false);
     mRenderState.stencil().enableTest(incrementThreshold);
 }
 
@@ -346,7 +346,16 @@
 void BakedOpRenderer::renderGlopImpl(const Rect* dirtyBounds, const ClipBase* clip,
         const Glop& glop) {
     prepareRender(dirtyBounds, clip);
-    mRenderState.render(glop, mRenderTarget.orthoMatrix);
+    // Disable blending if this is the first draw to the main framebuffer, in case app has defined
+    // transparency where it doesn't make sense - as first draw in opaque window. Note that we only
+    // apply this improvement when the blend mode is SRC_OVER - other modes (e.g. CLEAR) can be
+    // valid draws that affect other content (e.g. draw CLEAR, then draw DST_OVER)
+    bool overrideDisableBlending = !mHasDrawn
+        && mOpaque
+        && !mRenderTarget.frameBufferId
+        && glop.blend.src == GL_ONE
+        && glop.blend.dst == GL_ONE_MINUS_SRC_ALPHA;
+    mRenderState.render(glop, mRenderTarget.orthoMatrix, overrideDisableBlending);
     if (!mRenderTarget.frameBufferId) mHasDrawn = true;
 }
 
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index 2fdfcd4..0700d1f 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -50,9 +50,9 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 Caches::Caches(RenderState& renderState)
-        : gradientCache(mExtensions)
+        : gradientCache(extensions())
         , patchCache(renderState)
-        , programCache(mExtensions)
+        , programCache(extensions())
         , mRenderState(&renderState)
         , mInitialized(false) {
     INIT_LOGD("Creating OpenGL renderer caches");
@@ -80,7 +80,7 @@
 }
 
 void Caches::initExtensions() {
-    if (mExtensions.hasDebugMarker()) {
+    if (extensions().hasDebugMarker()) {
         eventMark = glInsertEventMarkerEXT;
 
         startMark = glPushGroupMarkerEXT;
@@ -93,12 +93,12 @@
 }
 
 void Caches::initConstraints() {
-    glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);
+    maxTextureSize = DeviceInfo::get()->maxTextureSize();
 }
 
 void Caches::initStaticProperties() {
     // OpenGL ES 3.0+ specific features
-    gpuPixelBuffersEnabled = mExtensions.hasPixelBufferObjects()
+    gpuPixelBuffersEnabled = extensions().hasPixelBufferObjects()
             && property_get_bool(PROPERTY_ENABLE_GPU_PIXEL_BUFFERS, true);
 }
 
diff --git a/libs/hwui/Caches.h b/libs/hwui/Caches.h
index 19063e3..29eddde 100644
--- a/libs/hwui/Caches.h
+++ b/libs/hwui/Caches.h
@@ -16,6 +16,7 @@
 
 #pragma once
 
+#include "DeviceInfo.h"
 #include "Extensions.h"
 #include "FboCache.h"
 #include "GammaFontRenderer.h"
@@ -145,10 +146,6 @@
     // Misc
     GLint maxTextureSize;
 
-private:
-    // Declared before gradientCache and programCache which need this to initialize.
-    // TODO: cleanup / move elsewhere
-    Extensions mExtensions;
 public:
     TextureCache textureCache;
     RenderBufferCache renderBufferCache;
@@ -174,7 +171,7 @@
     void setProgram(const ProgramDescription& description);
     void setProgram(Program* program);
 
-    const Extensions& extensions() const { return mExtensions; }
+    const Extensions& extensions() const { return DeviceInfo::get()->extensions(); }
     Program& program() { return *mProgram; }
     PixelBufferState& pixelBufferState() { return *mPixelBufferState; }
     TextureState& textureState() { return *mTextureState; }
diff --git a/libs/hwui/DeviceInfo.cpp b/libs/hwui/DeviceInfo.cpp
index d180ba5..37965da 100644
--- a/libs/hwui/DeviceInfo.cpp
+++ b/libs/hwui/DeviceInfo.cpp
@@ -16,7 +16,8 @@
 
 #include <DeviceInfo.h>
 
-#include "Extensions.h"
+#include <gui/ISurfaceComposer.h>
+#include <gui/SurfaceComposerClient.h>
 
 #include <thread>
 #include <mutex>
@@ -46,13 +47,22 @@
 void DeviceInfo::initialize(int maxTextureSize) {
     std::call_once(sInitializedFlag, [maxTextureSize]() {
         sDeviceInfo = new DeviceInfo();
+        sDeviceInfo->loadDisplayInfo();
         sDeviceInfo->mMaxTextureSize = maxTextureSize;
     });
 }
 
 void DeviceInfo::load() {
+    loadDisplayInfo();
     glGetIntegerv(GL_MAX_TEXTURE_SIZE, &mMaxTextureSize);
 }
 
+void DeviceInfo::loadDisplayInfo() {
+    sp<IBinder> dtoken(SurfaceComposerClient::getBuiltInDisplay(
+            ISurfaceComposer::eDisplayIdMain));
+    status_t status = SurfaceComposerClient::getDisplayInfo(dtoken, &mDisplayInfo);
+    LOG_ALWAYS_FATAL_IF(status, "Failed to get display info, error %d", status);
+}
+
 } /* namespace uirenderer */
 } /* namespace android */
diff --git a/libs/hwui/DeviceInfo.h b/libs/hwui/DeviceInfo.h
index aff84b0..5bd7b14 100644
--- a/libs/hwui/DeviceInfo.h
+++ b/libs/hwui/DeviceInfo.h
@@ -16,7 +16,10 @@
 #ifndef DEVICEINFO_H
 #define DEVICEINFO_H
 
+#include <ui/DisplayInfo.h>
+
 #include "utils/Macros.h"
+#include "Extensions.h"
 
 namespace android {
 namespace uirenderer {
@@ -35,14 +38,24 @@
     static void initialize(int maxTextureSize);
 
     int maxTextureSize() const { return mMaxTextureSize; }
+    const DisplayInfo& displayInfo() const { return mDisplayInfo; }
+    const Extensions& extensions() const { return mExtensions; }
+
+    static uint32_t multiplyByResolution(uint32_t in) {
+        auto di = DeviceInfo::get()->displayInfo();
+        return di.w * di.h * in;
+    }
 
 private:
     DeviceInfo() {}
     ~DeviceInfo() {}
 
     void load();
+    void loadDisplayInfo();
 
     int mMaxTextureSize;
+    DisplayInfo mDisplayInfo;
+    Extensions mExtensions;
 };
 
 } /* namespace uirenderer */
diff --git a/libs/hwui/FboCache.cpp b/libs/hwui/FboCache.cpp
index b2181b6..a39e49f 100644
--- a/libs/hwui/FboCache.cpp
+++ b/libs/hwui/FboCache.cpp
@@ -28,7 +28,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 FboCache::FboCache()
-        : mMaxSize(Properties::fboCacheSize) {}
+        : mMaxSize(0) {}
 
 FboCache::~FboCache() {
     clear();
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index ee99018..8b03468 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -32,7 +32,6 @@
 #include "utils/Timing.h"
 
 #include <algorithm>
-#include <cutils/properties.h>
 #include <RenderScript.h>
 #include <SkGlyph.h>
 #include <SkUtils.h>
@@ -99,22 +98,23 @@
         INIT_LOGD("Creating FontRenderer");
     }
 
-    mSmallCacheWidth = property_get_int32(PROPERTY_TEXT_SMALL_CACHE_WIDTH,
-            DEFAULT_TEXT_SMALL_CACHE_WIDTH);
-    mSmallCacheHeight = property_get_int32(PROPERTY_TEXT_SMALL_CACHE_HEIGHT,
-            DEFAULT_TEXT_SMALL_CACHE_HEIGHT);
+    auto deviceInfo = DeviceInfo::get();
+    auto displayInfo = deviceInfo->displayInfo();
+    int maxTextureSize = deviceInfo->maxTextureSize();
 
-    mLargeCacheWidth = property_get_int32(PROPERTY_TEXT_LARGE_CACHE_WIDTH,
-            DEFAULT_TEXT_LARGE_CACHE_WIDTH);
-    mLargeCacheHeight = property_get_int32(PROPERTY_TEXT_LARGE_CACHE_HEIGHT,
-            DEFAULT_TEXT_LARGE_CACHE_HEIGHT);
+    // Adjust cache size based on Pixel's desnsity.
+    constexpr float PIXEL_DENSITY = 2.6;
+    const float densityRatio = displayInfo.density / PIXEL_DENSITY;
 
-    uint32_t maxTextureSize = (uint32_t) Caches::getInstance().maxTextureSize;
-
-    mSmallCacheWidth = std::min(mSmallCacheWidth, maxTextureSize);
-    mSmallCacheHeight = std::min(mSmallCacheHeight, maxTextureSize);
-    mLargeCacheWidth = std::min(mLargeCacheWidth, maxTextureSize);
-    mLargeCacheHeight = std::min(mLargeCacheHeight, maxTextureSize);
+    // TODO: Most devices are hardcoded with this configuration, does it need to be dynamic?
+    mSmallCacheWidth =
+            OffscreenBuffer::computeIdealDimension(std::min(1024, maxTextureSize) * densityRatio);
+    mSmallCacheHeight =
+            OffscreenBuffer::computeIdealDimension(std::min(1024, maxTextureSize) * densityRatio);
+    mLargeCacheWidth =
+            OffscreenBuffer::computeIdealDimension(std::min(2048, maxTextureSize) * densityRatio);
+    mLargeCacheHeight =
+            OffscreenBuffer::computeIdealDimension(std::min(1024, maxTextureSize) * densityRatio);
 
     if (sLogFontRendererCreate) {
         INIT_LOGD("  Text cache sizes, in pixels: %i x %i, %i x %i, %i x %i, %i x %i",
diff --git a/libs/hwui/GradientCache.cpp b/libs/hwui/GradientCache.cpp
index d4d0c99..2026234 100644
--- a/libs/hwui/GradientCache.cpp
+++ b/libs/hwui/GradientCache.cpp
@@ -20,6 +20,7 @@
 #include "Debug.h"
 #include "GradientCache.h"
 #include "Properties.h"
+#include "DeviceInfo.h"
 
 #include <cutils/properties.h>
 
@@ -62,14 +63,14 @@
 // Constructors/destructor
 ///////////////////////////////////////////////////////////////////////////////
 
-GradientCache::GradientCache(Extensions& extensions)
+GradientCache::GradientCache(const Extensions& extensions)
         : mCache(LruCache<GradientCacheEntry, Texture*>::kUnlimitedCapacity)
         , mSize(0)
-        , mMaxSize(Properties::gradientCacheSize)
+        , mMaxSize(MB(1))
         , mUseFloatTexture(extensions.hasFloatTextures())
         , mHasNpot(extensions.hasNPot())
         , mHasLinearBlending(extensions.hasLinearBlending()) {
-    glGetIntegerv(GL_MAX_TEXTURE_SIZE, &mMaxTextureSize);
+    mMaxTextureSize = DeviceInfo::get()->maxTextureSize();
 
     mCache.setOnEntryRemovedListener(this);
 }
diff --git a/libs/hwui/GradientCache.h b/libs/hwui/GradientCache.h
index f299a40..d95589c 100644
--- a/libs/hwui/GradientCache.h
+++ b/libs/hwui/GradientCache.h
@@ -105,7 +105,7 @@
  */
 class GradientCache: public OnEntryRemoved<GradientCacheEntry, Texture*> {
 public:
-    explicit GradientCache(Extensions& extensions);
+    explicit GradientCache(const Extensions& extensions);
     ~GradientCache();
 
     /**
diff --git a/libs/hwui/JankTracker.cpp b/libs/hwui/JankTracker.cpp
index 028d9f7..9d11828 100644
--- a/libs/hwui/JankTracker.cpp
+++ b/libs/hwui/JankTracker.cpp
@@ -34,14 +34,6 @@
 namespace android {
 namespace uirenderer {
 
-static const char* JANK_TYPE_NAMES[] = {
-        "Missed Vsync",
-        "High input latency",
-        "Slow UI thread",
-        "Slow bitmap uploads",
-        "Slow issue draw commands",
-};
-
 struct Comparison {
     FrameInfoIndex start;
     FrameInfoIndex end;
@@ -68,70 +60,13 @@
  */
 static const int64_t EXEMPT_FRAMES_FLAGS = FrameInfoFlags::SurfaceCanvas;
 
-// The bucketing algorithm controls so to speak
-// If a frame is <= to this it goes in bucket 0
-static const uint32_t kBucketMinThreshold = 5;
-// If a frame is > this, start counting in increments of 2ms
-static const uint32_t kBucket2msIntervals = 32;
-// If a frame is > this, start counting in increments of 4ms
-static const uint32_t kBucket4msIntervals = 48;
-
 // For testing purposes to try and eliminate test infra overhead we will
 // consider any unknown delay of frame start as part of the test infrastructure
 // and filter it out of the frame profile data
 static FrameInfoIndex sFrameStart = FrameInfoIndex::IntendedVsync;
 
-// The interval of the slow frame histogram
-static const uint32_t kSlowFrameBucketIntervalMs = 50;
-// The start point of the slow frame bucket in ms
-static const uint32_t kSlowFrameBucketStartMs = 150;
-
-// This will be called every frame, performance sensitive
-// Uses bit twiddling to avoid branching while achieving the packing desired
-static uint32_t frameCountIndexForFrameTime(nsecs_t frameTime) {
-    uint32_t index = static_cast<uint32_t>(ns2ms(frameTime));
-    // If index > kBucketMinThreshold mask will be 0xFFFFFFFF as a result
-    // of negating 1 (twos compliment, yaay) else mask will be 0
-    uint32_t mask = -(index > kBucketMinThreshold);
-    // If index > threshold, this will essentially perform:
-    // amountAboveThreshold = index - threshold;
-    // index = threshold + (amountAboveThreshold / 2)
-    // However if index is <= this will do nothing. It will underflow, do
-    // a right shift by 0 (no-op), then overflow back to the original value
-    index = ((index - kBucket4msIntervals) >> (index > kBucket4msIntervals))
-            + kBucket4msIntervals;
-    index = ((index - kBucket2msIntervals) >> (index > kBucket2msIntervals))
-            + kBucket2msIntervals;
-    // If index was < minThreshold at the start of all this it's going to
-    // be a pretty garbage value right now. However, mask is 0 so we'll end
-    // up with the desired result of 0.
-    index = (index - kBucketMinThreshold) & mask;
-    return index;
-}
-
-// Only called when dumping stats, less performance sensitive
-int32_t JankTracker::frameTimeForFrameCountIndex(uint32_t index) {
-    index = index + kBucketMinThreshold;
-    if (index > kBucket2msIntervals) {
-        index += (index - kBucket2msIntervals);
-    }
-    if (index > kBucket4msIntervals) {
-        // This works because it was already doubled by the above if
-        // 1 is added to shift slightly more towards the middle of the bucket
-        index += (index - kBucket4msIntervals) + 1;
-    }
-    return index;
-}
-
-int32_t JankTracker::frameTimeForSlowFrameCountIndex(uint32_t index) {
-    return (index * kSlowFrameBucketIntervalMs) + kSlowFrameBucketStartMs;
-}
-
-JankTracker::JankTracker(const DisplayInfo& displayInfo) {
-    // By default this will use malloc memory. It may be moved later to ashmem
-    // if there is shared space for it and a request comes in to do that.
-    mData = new ProfileData;
-    reset();
+JankTracker::JankTracker(ProfileDataContainer* globalData, const DisplayInfo& displayInfo) {
+    mGlobalData = globalData;
     nsecs_t frameIntervalNanos = static_cast<nsecs_t>(1_s / displayInfo.fps);
 #if USE_HWC2
     nsecs_t sfOffset = frameIntervalNanos - (displayInfo.presentationDeadline - 1_ms);
@@ -151,82 +86,6 @@
     setFrameInterval(frameIntervalNanos);
 }
 
-JankTracker::~JankTracker() {
-    freeData();
-}
-
-void JankTracker::freeData() {
-    if (mIsMapped) {
-        munmap(mData, sizeof(ProfileData));
-    } else {
-        delete mData;
-    }
-    mIsMapped = false;
-    mData = nullptr;
-}
-
-void JankTracker::rotateStorage() {
-    // If we are mapped we want to stop using the ashmem backend and switch to malloc
-    // We are expecting a switchStorageToAshmem call to follow this, but it's not guaranteed
-    // If we aren't sitting on top of ashmem then just do a reset() as it's functionally
-    // equivalent do a free, malloc, reset.
-    if (mIsMapped) {
-        freeData();
-        mData = new ProfileData;
-    }
-    reset();
-}
-
-void JankTracker::switchStorageToAshmem(int ashmemfd) {
-    int regionSize = ashmem_get_size_region(ashmemfd);
-    if (regionSize < 0) {
-        int err = errno;
-        ALOGW("Failed to get ashmem region size from fd %d, err %d %s", ashmemfd, err, strerror(err));
-        return;
-    }
-    if (regionSize < static_cast<int>(sizeof(ProfileData))) {
-        ALOGW("Ashmem region is too small! Received %d, required %u",
-                regionSize, static_cast<unsigned int>(sizeof(ProfileData)));
-        return;
-    }
-    ProfileData* newData = reinterpret_cast<ProfileData*>(
-            mmap(NULL, sizeof(ProfileData), PROT_READ | PROT_WRITE,
-            MAP_SHARED, ashmemfd, 0));
-    if (newData == MAP_FAILED) {
-        int err = errno;
-        ALOGW("Failed to move profile data to ashmem fd %d, error = %d",
-                ashmemfd, err);
-        return;
-    }
-
-    // The new buffer may have historical data that we want to build on top of
-    // But let's make sure we don't overflow Just In Case
-    uint32_t divider = 0;
-    if (newData->totalFrameCount > (1 << 24)) {
-        divider = 4;
-    }
-    for (size_t i = 0; i < mData->jankTypeCounts.size(); i++) {
-        newData->jankTypeCounts[i] >>= divider;
-        newData->jankTypeCounts[i] += mData->jankTypeCounts[i];
-    }
-    for (size_t i = 0; i < mData->frameCounts.size(); i++) {
-        newData->frameCounts[i] >>= divider;
-        newData->frameCounts[i] += mData->frameCounts[i];
-    }
-    newData->jankFrameCount >>= divider;
-    newData->jankFrameCount += mData->jankFrameCount;
-    newData->totalFrameCount >>= divider;
-    newData->totalFrameCount += mData->totalFrameCount;
-    if (newData->statStartTime > mData->statStartTime
-            || newData->statStartTime == 0) {
-        newData->statStartTime = mData->statStartTime;
-    }
-
-    freeData();
-    mData = newData;
-    mIsMapped = true;
-}
-
 void JankTracker::setFrameInterval(nsecs_t frameInterval) {
     mFrameInterval = frameInterval;
     mThresholds[kMissedVsync] = 1;
@@ -250,8 +109,7 @@
 
 }
 
-void JankTracker::addFrame(const FrameInfo& frame) {
-    mData->totalFrameCount++;
+void JankTracker::finishFrame(const FrameInfo& frame) {
     // Fast-path for jank-free frames
     int64_t totalDuration = frame.duration(sFrameStart, FrameInfoIndex::FrameCompleted);
     if (mDequeueTimeForgiveness
@@ -271,11 +129,11 @@
         }
     }
     LOG_ALWAYS_FATAL_IF(totalDuration <= 0, "Impossible totalDuration %" PRId64, totalDuration);
-    uint32_t framebucket = frameCountIndexForFrameTime(totalDuration);
-    LOG_ALWAYS_FATAL_IF(framebucket < 0, "framebucket < 0 (%u)", framebucket);
+    mData->reportFrame(totalDuration);
+    (*mGlobalData)->reportFrame(totalDuration);
+
     // Keep the fast path as fast as possible.
     if (CC_LIKELY(totalDuration < mFrameInterval)) {
-        mData->frameCounts[framebucket]++;
         return;
     }
 
@@ -284,22 +142,14 @@
         return;
     }
 
-    if (framebucket <= mData->frameCounts.size()) {
-        mData->frameCounts[framebucket]++;
-    } else {
-        framebucket = (ns2ms(totalDuration) - kSlowFrameBucketStartMs)
-                / kSlowFrameBucketIntervalMs;
-        framebucket = std::min(framebucket,
-                static_cast<uint32_t>(mData->slowFrameCounts.size() - 1));
-        mData->slowFrameCounts[framebucket]++;
-    }
-
-    mData->jankFrameCount++;
+    mData->reportJank();
+    (*mGlobalData)->reportJank();
 
     for (int i = 0; i < NUM_BUCKETS; i++) {
         int64_t delta = frame.duration(COMPARISONS[i].start, COMPARISONS[i].end);
         if (delta >= mThresholds[i] && delta < IGNORE_EXCEEDING) {
-            mData->jankTypeCounts[i]++;
+            mData->reportJankType((JankType) i);
+            (*mGlobalData)->reportJankType((JankType) i);
         }
     }
 }
@@ -320,58 +170,39 @@
     if (sFrameStart != FrameInfoIndex::IntendedVsync) {
         dprintf(fd, "\nNote: Data has been filtered!");
     }
-    dprintf(fd, "\nStats since: %" PRIu64 "ns", data->statStartTime);
-    dprintf(fd, "\nTotal frames rendered: %u", data->totalFrameCount);
-    dprintf(fd, "\nJanky frames: %u (%.2f%%)", data->jankFrameCount,
-            (float) data->jankFrameCount / (float) data->totalFrameCount * 100.0f);
-    dprintf(fd, "\n50th percentile: %ums", findPercentile(data, 50));
-    dprintf(fd, "\n90th percentile: %ums", findPercentile(data, 90));
-    dprintf(fd, "\n95th percentile: %ums", findPercentile(data, 95));
-    dprintf(fd, "\n99th percentile: %ums", findPercentile(data, 99));
-    for (int i = 0; i < NUM_BUCKETS; i++) {
-        dprintf(fd, "\nNumber %s: %u", JANK_TYPE_NAMES[i], data->jankTypeCounts[i]);
-    }
-    dprintf(fd, "\nHISTOGRAM:");
-    for (size_t i = 0; i < data->frameCounts.size(); i++) {
-        dprintf(fd, " %ums=%u", frameTimeForFrameCountIndex(i),
-                data->frameCounts[i]);
-    }
-    for (size_t i = 0; i < data->slowFrameCounts.size(); i++) {
-        dprintf(fd, " %ums=%u", frameTimeForSlowFrameCountIndex(i),
-                data->slowFrameCounts[i]);
-    }
+    data->dump(fd);
     dprintf(fd, "\n");
 }
 
+void JankTracker::dumpFrames(int fd) {
+    FILE* file = fdopen(fd, "a");
+    fprintf(file, "\n\n---PROFILEDATA---\n");
+    for (size_t i = 0; i < static_cast<size_t>(FrameInfoIndex::NumIndexes); i++) {
+        fprintf(file, "%s", FrameInfoNames[i].c_str());
+        fprintf(file, ",");
+    }
+    for (size_t i = 0; i < mFrames.size(); i++) {
+        FrameInfo& frame = mFrames[i];
+        if (frame[FrameInfoIndex::SyncStart] == 0) {
+            continue;
+        }
+        fprintf(file, "\n");
+        for (int i = 0; i < static_cast<int>(FrameInfoIndex::NumIndexes); i++) {
+            fprintf(file, "%" PRId64 ",", frame[i]);
+        }
+    }
+    fprintf(file, "\n---PROFILEDATA---\n\n");
+    fflush(file);
+}
+
 void JankTracker::reset() {
-    mData->jankTypeCounts.fill(0);
-    mData->frameCounts.fill(0);
-    mData->slowFrameCounts.fill(0);
-    mData->totalFrameCount = 0;
-    mData->jankFrameCount = 0;
-    mData->statStartTime = systemTime(CLOCK_MONOTONIC);
+    mFrames.clear();
+    mData->reset();
+    (*mGlobalData)->reset();
     sFrameStart = Properties::filterOutTestOverhead
             ? FrameInfoIndex::HandleInputStart
             : FrameInfoIndex::IntendedVsync;
 }
 
-uint32_t JankTracker::findPercentile(const ProfileData* data, int percentile) {
-    int pos = percentile * data->totalFrameCount / 100;
-    int remaining = data->totalFrameCount - pos;
-    for (int i = data->slowFrameCounts.size() - 1; i >= 0; i--) {
-        remaining -= data->slowFrameCounts[i];
-        if (remaining <= 0) {
-            return (i * kSlowFrameBucketIntervalMs) + kSlowFrameBucketStartMs;
-        }
-    }
-    for (int i = data->frameCounts.size() - 1; i >= 0; i--) {
-        remaining -= data->frameCounts[i];
-        if (remaining <= 0) {
-            return frameTimeForFrameCountIndex(i);
-        }
-    }
-    return 0;
-}
-
 } /* namespace uirenderer */
 } /* namespace android */
diff --git a/libs/hwui/JankTracker.h b/libs/hwui/JankTracker.h
index 6ff5d89..e56c079 100644
--- a/libs/hwui/JankTracker.h
+++ b/libs/hwui/JankTracker.h
@@ -17,6 +17,8 @@
 #define JANKTRACKER_H_
 
 #include "FrameInfo.h"
+#include "ProfileData.h"
+#include "ProfileDataContainer.h"
 #include "renderthread/TimeLord.h"
 #include "utils/RingBuffer.h"
 
@@ -29,31 +31,6 @@
 namespace android {
 namespace uirenderer {
 
-enum JankType {
-    kMissedVsync = 0,
-    kHighInputLatency,
-    kSlowUI,
-    kSlowSync,
-    kSlowRT,
-
-    // must be last
-    NUM_BUCKETS,
-};
-
-// Try to keep as small as possible, should match ASHMEM_SIZE in
-// GraphicsStatsService.java
-struct ProfileData {
-    std::array<uint32_t, NUM_BUCKETS> jankTypeCounts;
-    // See comments on kBucket* constants for what this holds
-    std::array<uint32_t, 57> frameCounts;
-    // Holds a histogram of frame times in 50ms increments from 150ms to 5s
-    std::array<uint16_t, 97> slowFrameCounts;
-
-    uint32_t totalFrameCount;
-    uint32_t jankFrameCount;
-    nsecs_t statStartTime;
-};
-
 enum class JankTrackerType {
     // The default, means there's no description set
     Generic,
@@ -72,31 +49,27 @@
 // TODO: Replace DrawProfiler with this
 class JankTracker {
 public:
-    explicit JankTracker(const DisplayInfo& displayInfo);
-    ~JankTracker();
+    explicit JankTracker(ProfileDataContainer* globalData, const DisplayInfo& displayInfo);
 
     void setDescription(JankTrackerType type, const std::string&& name) {
         mDescription.type = type;
         mDescription.name = name;
     }
 
-    void addFrame(const FrameInfo& frame);
+    FrameInfo* startFrame() { return &mFrames.next(); }
+    void finishFrame(const FrameInfo& frame);
 
-    void dump(int fd) { dumpData(fd, &mDescription, mData); }
+    void dumpStats(int fd) { dumpData(fd, &mDescription, mData.get()); }
+    void dumpFrames(int fd);
     void reset();
 
-    void rotateStorage();
-    void switchStorageToAshmem(int ashmemfd);
-
-    uint32_t findPercentile(int p) { return findPercentile(mData, p); }
-    static int32_t frameTimeForFrameCountIndex(uint32_t index);
-    static int32_t frameTimeForSlowFrameCountIndex(uint32_t index);
+    // Exposed for FrameInfoVisualizer
+    // TODO: Figure out a better way to handle this
+    RingBuffer<FrameInfo, 120>& frames() { return mFrames; }
 
 private:
-    void freeData();
     void setFrameInterval(nsecs_t frameIntervalNanos);
 
-    static uint32_t findPercentile(const ProfileData* data, int p);
     static void dumpData(int fd, const ProfileDataDescription* description, const ProfileData* data);
 
     std::array<int64_t, NUM_BUCKETS> mThresholds;
@@ -109,9 +82,12 @@
     // This is only used if we are in pipelined mode and are using HWC2,
     // otherwise it's 0.
     nsecs_t mDequeueTimeForgiveness = 0;
-    ProfileData* mData;
-    bool mIsMapped = false;
+    ProfileDataContainer mData;
+    ProfileDataContainer* mGlobalData;
     ProfileDataDescription mDescription;
+
+    // Ring buffer large enough for 2 seconds worth of frames
+    RingBuffer<FrameInfo, 120> mFrames;
 };
 
 } /* namespace uirenderer */
diff --git a/libs/hwui/OpenGLReadback.cpp b/libs/hwui/OpenGLReadback.cpp
index 19d5d9d..2687410 100644
--- a/libs/hwui/OpenGLReadback.cpp
+++ b/libs/hwui/OpenGLReadback.cpp
@@ -85,11 +85,6 @@
 
     uint32_t width = graphicBuffer->getWidth();
     uint32_t height = graphicBuffer->getHeight();
-    // If this is a 90 or 270 degree rotation we need to swap width/height
-    // This is a fuzzy way of checking that.
-    if (texTransform[Matrix4::kSkewX] >= 0.5f || texTransform[Matrix4::kSkewX] <= -0.5f) {
-        std::swap(width, height);
-    }
     CopyResult copyResult = copyImageInto(sourceImage, texTransform, width, height,
             srcRect, bitmap);
 
@@ -233,11 +228,12 @@
                 .build();
         Matrix4 ortho;
         ortho.loadOrtho(destWidth, destHeight);
-        renderState.render(glop, ortho);
+        renderState.render(glop, ortho, false);
 
         // TODO: We should convert to linear space when the target is RGBA16F
         glReadPixels(0, 0, bitmap->width(), bitmap->height(), format,
                 type, bitmap->getPixels());
+        bitmap->notifyPixelsChanged();
     }
 
     // Cleanup
@@ -253,6 +249,12 @@
         const Matrix4& imgTransform, int imgWidth, int imgHeight, const Rect& srcRect,
         SkBitmap* bitmap) {
 
+    // If this is a 90 or 270 degree rotation we need to swap width/height
+    // This is a fuzzy way of checking that.
+    if (imgTransform[Matrix4::kSkewX] >= 0.5f || imgTransform[Matrix4::kSkewX] <= -0.5f) {
+        std::swap(imgWidth, imgHeight);
+    }
+
     Caches& caches = Caches::getInstance();
     GLuint sourceTexId;
     // Create a 2D texture to sample from the EGLImage
@@ -278,6 +280,11 @@
 
 bool OpenGLReadbackImpl::copyLayerInto(renderthread::RenderThread& renderThread,
         GlLayer& layer, SkBitmap* bitmap) {
+    if (!layer.isRenderable()) {
+        // layer has never been updated by DeferredLayerUpdater, abort copy
+        return false;
+    }
+
     return CopyResult::Success == copyTextureInto(Caches::getInstance(),
             renderThread.renderState(), layer.getTexture(), layer.getTexTransform(),
             Rect(), bitmap);
diff --git a/libs/hwui/PatchCache.cpp b/libs/hwui/PatchCache.cpp
index 983c17e..78c7eb9 100644
--- a/libs/hwui/PatchCache.cpp
+++ b/libs/hwui/PatchCache.cpp
@@ -32,7 +32,7 @@
 
 PatchCache::PatchCache(RenderState& renderState)
         : mRenderState(renderState)
-        , mMaxSize(Properties::patchCacheSize)
+        , mMaxSize(KB(128))
         , mSize(0)
         , mCache(LruCache<PatchDescription, Patch*>::kUnlimitedCapacity)
         , mMeshBuffer(0)
diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp
index cc96de7..8d4ae1b 100644
--- a/libs/hwui/PathCache.cpp
+++ b/libs/hwui/PathCache.cpp
@@ -38,6 +38,8 @@
 namespace android {
 namespace uirenderer {
 
+static constexpr size_t PATH_CACHE_COUNT_LIMIT = 256;
+
 template <class T>
 static bool compareWidthHeight(const T& lhs, const T& rhs) {
     return (lhs.mWidth == rhs.mWidth) && (lhs.mHeight == rhs.mHeight);
@@ -179,13 +181,9 @@
 PathCache::PathCache()
         : mCache(LruCache<PathDescription, PathTexture*>::kUnlimitedCapacity)
         , mSize(0)
-        , mMaxSize(Properties::pathCacheSize) {
+        , mMaxSize(DeviceInfo::multiplyByResolution(4)) {
     mCache.setOnEntryRemovedListener(this);
-
-    GLint maxTextureSize;
-    glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);
-    mMaxTextureSize = maxTextureSize;
-
+    mMaxTextureSize = DeviceInfo::get()->maxTextureSize();
     mDebugEnabled = Properties::debugLevel & kDebugCaches;
 }
 
@@ -259,12 +257,7 @@
 }
 
 void PathCache::trim() {
-    // 25 is just an arbitrary lower bound to ensure we aren't in weird edge cases
-    // of things like a cap of 0 or 1 as that's going to break things.
-    // It does not represent a reasonable minimum value
-    static_assert(DEFAULT_PATH_TEXTURE_CAP > 25, "Path cache texture cap is too small");
-
-    while (mSize > mMaxSize || mCache.size() > DEFAULT_PATH_TEXTURE_CAP) {
+    while (mSize > mMaxSize || mCache.size() > PATH_CACHE_COUNT_LIMIT) {
         LOG_ALWAYS_FATAL_IF(!mCache.size(), "Inconsistent mSize! Ran out of items to remove!"
                 " mSize = %u, mMaxSize = %u", mSize, mMaxSize);
         mCache.removeOldest();
diff --git a/libs/hwui/ProfileData.cpp b/libs/hwui/ProfileData.cpp
new file mode 100644
index 0000000..a295c5d
--- /dev/null
+++ b/libs/hwui/ProfileData.cpp
@@ -0,0 +1,177 @@
+/*
+ * 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.
+ */
+
+#include "ProfileData.h"
+
+#include <cinttypes>
+
+namespace android {
+namespace uirenderer {
+
+static const char* JANK_TYPE_NAMES[] = {
+        "Missed Vsync",
+        "High input latency",
+        "Slow UI thread",
+        "Slow bitmap uploads",
+        "Slow issue draw commands",
+};
+
+// The bucketing algorithm controls so to speak
+// If a frame is <= to this it goes in bucket 0
+static const uint32_t kBucketMinThreshold = 5;
+// If a frame is > this, start counting in increments of 2ms
+static const uint32_t kBucket2msIntervals = 32;
+// If a frame is > this, start counting in increments of 4ms
+static const uint32_t kBucket4msIntervals = 48;
+
+// The interval of the slow frame histogram
+static const uint32_t kSlowFrameBucketIntervalMs = 50;
+// The start point of the slow frame bucket in ms
+static const uint32_t kSlowFrameBucketStartMs = 150;
+
+// This will be called every frame, performance sensitive
+// Uses bit twiddling to avoid branching while achieving the packing desired
+static uint32_t frameCountIndexForFrameTime(nsecs_t frameTime) {
+    uint32_t index = static_cast<uint32_t>(ns2ms(frameTime));
+    // If index > kBucketMinThreshold mask will be 0xFFFFFFFF as a result
+    // of negating 1 (twos compliment, yaay) else mask will be 0
+    uint32_t mask = -(index > kBucketMinThreshold);
+    // If index > threshold, this will essentially perform:
+    // amountAboveThreshold = index - threshold;
+    // index = threshold + (amountAboveThreshold / 2)
+    // However if index is <= this will do nothing. It will underflow, do
+    // a right shift by 0 (no-op), then overflow back to the original value
+    index = ((index - kBucket4msIntervals) >> (index > kBucket4msIntervals))
+            + kBucket4msIntervals;
+    index = ((index - kBucket2msIntervals) >> (index > kBucket2msIntervals))
+            + kBucket2msIntervals;
+    // If index was < minThreshold at the start of all this it's going to
+    // be a pretty garbage value right now. However, mask is 0 so we'll end
+    // up with the desired result of 0.
+    index = (index - kBucketMinThreshold) & mask;
+    return index;
+}
+
+// Only called when dumping stats, less performance sensitive
+uint32_t ProfileData::frameTimeForFrameCountIndex(uint32_t index) {
+    index = index + kBucketMinThreshold;
+    if (index > kBucket2msIntervals) {
+        index += (index - kBucket2msIntervals);
+    }
+    if (index > kBucket4msIntervals) {
+        // This works because it was already doubled by the above if
+        // 1 is added to shift slightly more towards the middle of the bucket
+        index += (index - kBucket4msIntervals) + 1;
+    }
+    return index;
+}
+
+uint32_t ProfileData::frameTimeForSlowFrameCountIndex(uint32_t index) {
+    return (index * kSlowFrameBucketIntervalMs) + kSlowFrameBucketStartMs;
+}
+
+void ProfileData::mergeWith(const ProfileData& other) {
+    // Make sure we don't overflow Just In Case
+    uint32_t divider = 0;
+    if (mTotalFrameCount > (1 << 24)) {
+        divider = 4;
+    }
+    for (size_t i = 0; i < other.mJankTypeCounts.size(); i++) {
+        mJankTypeCounts[i] >>= divider;
+        mJankTypeCounts[i] += other.mJankTypeCounts[i];
+    }
+    for (size_t i = 0; i < other.mFrameCounts.size(); i++) {
+        mFrameCounts[i] >>= divider;
+        mFrameCounts[i] += other.mFrameCounts[i];
+    }
+    mJankFrameCount >>= divider;
+    mJankFrameCount += other.mJankFrameCount;
+    mTotalFrameCount >>= divider;
+    mTotalFrameCount += other.mTotalFrameCount;
+    if (mStatStartTime > other.mStatStartTime
+            || mStatStartTime == 0) {
+        mStatStartTime = other.mStatStartTime;
+    }
+}
+
+void ProfileData::dump(int fd) const {
+    dprintf(fd, "\nStats since: %" PRIu64 "ns", mStatStartTime);
+    dprintf(fd, "\nTotal frames rendered: %u", mTotalFrameCount);
+    dprintf(fd, "\nJanky frames: %u (%.2f%%)", mJankFrameCount,
+            (float) mJankFrameCount / (float) mTotalFrameCount * 100.0f);
+    dprintf(fd, "\n50th percentile: %ums", findPercentile(50));
+    dprintf(fd, "\n90th percentile: %ums", findPercentile(90));
+    dprintf(fd, "\n95th percentile: %ums", findPercentile(95));
+    dprintf(fd, "\n99th percentile: %ums", findPercentile(99));
+    for (int i = 0; i < NUM_BUCKETS; i++) {
+        dprintf(fd, "\nNumber %s: %u", JANK_TYPE_NAMES[i], mJankTypeCounts[i]);
+    }
+    dprintf(fd, "\nHISTOGRAM:");
+    histogramForEach([fd](HistogramEntry entry) {
+        dprintf(fd, " %ums=%u", entry.renderTimeMs, entry.frameCount);
+    });
+}
+
+uint32_t ProfileData::findPercentile(int percentile) const {
+    int pos = percentile * mTotalFrameCount / 100;
+    int remaining = mTotalFrameCount - pos;
+    for (int i = mSlowFrameCounts.size() - 1; i >= 0; i--) {
+        remaining -= mSlowFrameCounts[i];
+        if (remaining <= 0) {
+            return (i * kSlowFrameBucketIntervalMs) + kSlowFrameBucketStartMs;
+        }
+    }
+    for (int i = mFrameCounts.size() - 1; i >= 0; i--) {
+        remaining -= mFrameCounts[i];
+        if (remaining <= 0) {
+            return frameTimeForFrameCountIndex(i);
+        }
+    }
+    return 0;
+}
+
+void ProfileData::reset() {
+    mJankTypeCounts.fill(0);
+    mFrameCounts.fill(0);
+    mSlowFrameCounts.fill(0);
+    mTotalFrameCount = 0;
+    mJankFrameCount = 0;
+    mStatStartTime = systemTime(CLOCK_MONOTONIC);
+}
+
+void ProfileData::reportFrame(int64_t duration) {
+    mTotalFrameCount++;
+    uint32_t framebucket = frameCountIndexForFrameTime(duration);
+    if (framebucket <= mFrameCounts.size()) {
+        mFrameCounts[framebucket]++;
+    } else {
+        framebucket = (ns2ms(duration) - kSlowFrameBucketStartMs) / kSlowFrameBucketIntervalMs;
+        framebucket = std::min(framebucket, static_cast<uint32_t>(mSlowFrameCounts.size() - 1));
+        mSlowFrameCounts[framebucket]++;
+    }
+}
+
+void ProfileData::histogramForEach(const std::function<void(HistogramEntry)>& callback) const {
+    for (size_t i = 0; i < mFrameCounts.size(); i++) {
+        callback(HistogramEntry{frameTimeForFrameCountIndex(i), mFrameCounts[i]});
+    }
+    for (size_t i = 0; i < mSlowFrameCounts.size(); i++) {
+        callback(HistogramEntry{frameTimeForSlowFrameCountIndex(i), mSlowFrameCounts[i]});
+    }
+}
+
+} /* namespace uirenderer */
+} /* namespace android */
\ No newline at end of file
diff --git a/libs/hwui/ProfileData.h b/libs/hwui/ProfileData.h
new file mode 100644
index 0000000..d53ee29
--- /dev/null
+++ b/libs/hwui/ProfileData.h
@@ -0,0 +1,109 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include "utils/Macros.h"
+
+#include <utils/Timers.h>
+
+#include <array>
+#include <functional>
+#include <tuple>
+
+namespace android {
+namespace uirenderer {
+
+enum JankType {
+    kMissedVsync = 0,
+    kHighInputLatency,
+    kSlowUI,
+    kSlowSync,
+    kSlowRT,
+
+    // must be last
+    NUM_BUCKETS,
+};
+
+// For testing
+class MockProfileData;
+
+// Try to keep as small as possible, should match ASHMEM_SIZE in
+// GraphicsStatsService.java
+class ProfileData {
+    PREVENT_COPY_AND_ASSIGN(ProfileData);
+
+public:
+    ProfileData() { reset(); }
+
+    void reset();
+    void mergeWith(const ProfileData& other);
+    void dump(int fd) const;
+    uint32_t findPercentile(int percentile) const;
+
+    void reportFrame(int64_t duration);
+    void reportJank() { mJankFrameCount++; }
+    void reportJankType(JankType type) { mJankTypeCounts[static_cast<int>(type)]++; }
+
+    uint32_t totalFrameCount() const { return mTotalFrameCount; }
+    uint32_t jankFrameCount() const { return mJankFrameCount; }
+    nsecs_t statsStartTime() const { return mStatStartTime; }
+    uint32_t jankTypeCount(JankType type) const { return mJankTypeCounts[static_cast<int>(type)]; }
+
+    struct HistogramEntry {
+        uint32_t renderTimeMs;
+        uint32_t frameCount;
+    };
+    void histogramForEach(const std::function<void(HistogramEntry)>& callback) const;
+
+    constexpr static int HistogramSize() {
+        return std::tuple_size<decltype(ProfileData::mFrameCounts)>::value
+                + std::tuple_size<decltype(ProfileData::mSlowFrameCounts)>::value;
+    }
+
+    // Visible for testing
+    static uint32_t frameTimeForFrameCountIndex(uint32_t index);
+    static uint32_t frameTimeForSlowFrameCountIndex(uint32_t index);
+
+private:
+    // Open our guts up to unit tests
+    friend class MockProfileData;
+
+    std::array <uint32_t, NUM_BUCKETS> mJankTypeCounts;
+    // See comments on kBucket* constants for what this holds
+    std::array<uint32_t, 57> mFrameCounts;
+    // Holds a histogram of frame times in 50ms increments from 150ms to 5s
+    std::array<uint16_t, 97> mSlowFrameCounts;
+
+    uint32_t mTotalFrameCount;
+    uint32_t mJankFrameCount;
+    nsecs_t mStatStartTime;
+};
+
+// For testing
+class MockProfileData : public ProfileData {
+public:
+    std::array<uint32_t, NUM_BUCKETS>& editJankTypeCounts() { return mJankTypeCounts; }
+    std::array<uint32_t, 57>& editFrameCounts() { return mFrameCounts; }
+    std::array<uint16_t, 97>& editSlowFrameCounts() { return mSlowFrameCounts; }
+    uint32_t& editTotalFrameCount() { return mTotalFrameCount; }
+    uint32_t& editJankFrameCount() { return mJankFrameCount; }
+    nsecs_t& editStatStartTime() { return mStatStartTime; }
+};
+
+} /* namespace uirenderer */
+} /* namespace android */
+
diff --git a/libs/hwui/ProfileDataContainer.cpp b/libs/hwui/ProfileDataContainer.cpp
new file mode 100644
index 0000000..cbf3eb3
--- /dev/null
+++ b/libs/hwui/ProfileDataContainer.cpp
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ */
+
+#include "ProfileDataContainer.h"
+
+#include <log/log.h>
+#include <cutils/ashmem.h>
+
+#include <sys/mman.h>
+
+namespace android {
+namespace uirenderer {
+
+void ProfileDataContainer::freeData() {
+    if (mIsMapped) {
+        munmap(mData, sizeof(ProfileData));
+    } else {
+        delete mData;
+    }
+    mIsMapped = false;
+    mData = nullptr;
+}
+
+void ProfileDataContainer::rotateStorage() {
+    // If we are mapped we want to stop using the ashmem backend and switch to malloc
+    // We are expecting a switchStorageToAshmem call to follow this, but it's not guaranteed
+    // If we aren't sitting on top of ashmem then just do a reset() as it's functionally
+    // equivalent do a free, malloc, reset.
+    if (mIsMapped) {
+        freeData();
+        mData = new ProfileData;
+    }
+    mData->reset();
+}
+
+void ProfileDataContainer::switchStorageToAshmem(int ashmemfd) {
+    int regionSize = ashmem_get_size_region(ashmemfd);
+    if (regionSize < 0) {
+        int err = errno;
+        ALOGW("Failed to get ashmem region size from fd %d, err %d %s", ashmemfd, err, strerror(err));
+        return;
+    }
+    if (regionSize < static_cast<int>(sizeof(ProfileData))) {
+        ALOGW("Ashmem region is too small! Received %d, required %u",
+                regionSize, static_cast<unsigned int>(sizeof(ProfileData)));
+        return;
+    }
+    ProfileData* newData = reinterpret_cast<ProfileData*>(
+            mmap(NULL, sizeof(ProfileData), PROT_READ | PROT_WRITE,
+                    MAP_SHARED, ashmemfd, 0));
+    if (newData == MAP_FAILED) {
+        int err = errno;
+        ALOGW("Failed to move profile data to ashmem fd %d, error = %d",
+                ashmemfd, err);
+        return;
+    }
+
+    newData->mergeWith(*mData);
+    freeData();
+    mData = newData;
+    mIsMapped = true;
+}
+
+} /* namespace uirenderer */
+} /* namespace android */
\ No newline at end of file
diff --git a/libs/hwui/ProfileDataContainer.h b/libs/hwui/ProfileDataContainer.h
new file mode 100644
index 0000000..d2de241
--- /dev/null
+++ b/libs/hwui/ProfileDataContainer.h
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include "ProfileData.h"
+#include "utils/Macros.h"
+
+namespace android {
+namespace uirenderer {
+
+class ProfileDataContainer {
+    PREVENT_COPY_AND_ASSIGN(ProfileDataContainer);
+public:
+    explicit ProfileDataContainer() {}
+
+    ~ProfileDataContainer() { freeData(); }
+
+    void rotateStorage();
+    void switchStorageToAshmem(int ashmemfd);
+
+    ProfileData* get() { return mData; }
+    ProfileData* operator->() { return mData; }
+
+private:
+    void freeData();
+
+    // By default this will use malloc memory. It may be moved later to ashmem
+    // if there is shared space for it and a request comes in to do that.
+    ProfileData* mData = new ProfileData;
+    bool mIsMapped = false;
+};
+
+} /* namespace uirenderer */
+} /* namespace android */
\ No newline at end of file
diff --git a/libs/hwui/ProgramCache.cpp b/libs/hwui/ProgramCache.cpp
index 8cc0aa7..b767046 100644
--- a/libs/hwui/ProgramCache.cpp
+++ b/libs/hwui/ProgramCache.cpp
@@ -505,7 +505,7 @@
 // Constructors/destructors
 ///////////////////////////////////////////////////////////////////////////////
 
-ProgramCache::ProgramCache(Extensions& extensions)
+ProgramCache::ProgramCache(const Extensions& extensions)
         : mHasES3(extensions.getMajorGlVersion() >= 3)
         , mHasLinearBlending(extensions.hasLinearBlending()) {
 }
diff --git a/libs/hwui/ProgramCache.h b/libs/hwui/ProgramCache.h
index cedd854b..ee76f22 100644
--- a/libs/hwui/ProgramCache.h
+++ b/libs/hwui/ProgramCache.h
@@ -40,7 +40,7 @@
  */
 class ProgramCache {
 public:
-    explicit ProgramCache(Extensions& extensions);
+    explicit ProgramCache(const Extensions& extensions);
     ~ProgramCache();
 
     Program* get(const ProgramDescription& description);
diff --git a/libs/hwui/Properties.cpp b/libs/hwui/Properties.cpp
index b587248..acc7539 100644
--- a/libs/hwui/Properties.cpp
+++ b/libs/hwui/Properties.cpp
@@ -16,6 +16,7 @@
 
 #include "Properties.h"
 #include "Debug.h"
+#include "DeviceInfo.h"
 
 #include <algorithm>
 #include <cstdlib>
@@ -36,20 +37,6 @@
 bool Properties::useBufferAge = true;
 bool Properties::enablePartialUpdates = true;
 
-float Properties::textGamma = DEFAULT_TEXT_GAMMA;
-
-int Properties::fboCacheSize = DEFAULT_FBO_CACHE_SIZE;
-int Properties::gradientCacheSize = MB(DEFAULT_GRADIENT_CACHE_SIZE);
-int Properties::layerPoolSize = MB(DEFAULT_LAYER_CACHE_SIZE);
-int Properties::patchCacheSize = KB(DEFAULT_PATCH_CACHE_SIZE);
-int Properties::pathCacheSize = MB(DEFAULT_PATH_CACHE_SIZE);
-int Properties::renderBufferCacheSize = MB(DEFAULT_RENDER_BUFFER_CACHE_SIZE);
-int Properties::tessellationCacheSize = MB(DEFAULT_VERTEX_CACHE_SIZE);
-int Properties::textDropShadowCacheSize = MB(DEFAULT_DROP_SHADOW_CACHE_SIZE);
-int Properties::textureCacheSize = MB(DEFAULT_TEXTURE_CACHE_SIZE);
-
-float Properties::textureCacheFlushRate = DEFAULT_TEXTURE_CACHE_FLUSH_RATE;
-
 DebugLevel Properties::debugLevel = kDebugDisabled;
 OverdrawColorSet Properties::overdrawColorSet = OverdrawColorSet::Default;
 StencilClipDebug Properties::debugStencilClip = StencilClipDebug::Hide;
@@ -80,15 +67,6 @@
     return defaultValue;
 }
 
-static float property_get_float(const char* key, float defaultValue) {
-    char buf[PROPERTY_VALUE_MAX] = {'\0',};
-
-    if (property_get(key, buf, "") > 0) {
-        return atof(buf);
-    }
-    return defaultValue;
-}
-
 bool Properties::load() {
     char property[PROPERTY_VALUE_MAX];
     bool prevDebugLayersUpdates = debugLayersUpdates;
@@ -147,20 +125,6 @@
     useBufferAge = property_get_bool(PROPERTY_USE_BUFFER_AGE, true);
     enablePartialUpdates = property_get_bool(PROPERTY_ENABLE_PARTIAL_UPDATES, true);
 
-    textGamma = property_get_float(PROPERTY_TEXT_GAMMA, DEFAULT_TEXT_GAMMA);
-
-    fboCacheSize = property_get_int(PROPERTY_FBO_CACHE_SIZE, DEFAULT_FBO_CACHE_SIZE);
-    gradientCacheSize = MB(property_get_float(PROPERTY_GRADIENT_CACHE_SIZE, DEFAULT_GRADIENT_CACHE_SIZE));
-    layerPoolSize = MB(property_get_float(PROPERTY_LAYER_CACHE_SIZE, DEFAULT_LAYER_CACHE_SIZE));
-    patchCacheSize = KB(property_get_float(PROPERTY_PATCH_CACHE_SIZE, DEFAULT_PATCH_CACHE_SIZE));
-    pathCacheSize = MB(property_get_float(PROPERTY_PATH_CACHE_SIZE, DEFAULT_PATH_CACHE_SIZE));
-    renderBufferCacheSize = MB(property_get_float(PROPERTY_RENDER_BUFFER_CACHE_SIZE, DEFAULT_RENDER_BUFFER_CACHE_SIZE));
-    tessellationCacheSize = MB(property_get_float(PROPERTY_VERTEX_CACHE_SIZE, DEFAULT_VERTEX_CACHE_SIZE));
-    textDropShadowCacheSize = MB(property_get_float(PROPERTY_DROP_SHADOW_CACHE_SIZE, DEFAULT_DROP_SHADOW_CACHE_SIZE));
-    textureCacheSize = MB(property_get_float(PROPERTY_TEXTURE_CACHE_SIZE, DEFAULT_TEXTURE_CACHE_SIZE));
-    textureCacheFlushRate = std::max(0.0f, std::min(1.0f,
-            property_get_float(PROPERTY_TEXTURE_CACHE_FLUSH_RATE, DEFAULT_TEXTURE_CACHE_FLUSH_RATE)));
-
     filterOutTestOverhead = property_get_bool(PROPERTY_FILTER_TEST_OVERHEAD, false);
 
     return (prevDebugLayersUpdates != debugLayersUpdates)
diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h
index 91b4a2d..47ae9e9 100644
--- a/libs/hwui/Properties.h
+++ b/libs/hwui/Properties.h
@@ -153,81 +153,18 @@
 #define PROPERTY_FILTER_TEST_OVERHEAD "debug.hwui.filter_test_overhead"
 
 /**
+ * Indicates whether PBOs can be used to back pixel buffers.
+ * Accepted values are "true" and "false". Default is true.
+ */
+#define PROPERTY_ENABLE_GPU_PIXEL_BUFFERS "debug.hwui.use_gpu_pixel_buffers"
+
+/**
  * Allows to set rendering pipeline mode to OpenGL (default), Skia OpenGL
  * or Vulkan.
  */
 #define PROPERTY_RENDERER "debug.hwui.renderer"
 
 ///////////////////////////////////////////////////////////////////////////////
-// Runtime configuration properties
-///////////////////////////////////////////////////////////////////////////////
-
-/**
- * Used to enable/disable scissor optimization. The accepted values are
- * "true" and "false". The default value is "false".
- *
- * When scissor optimization is enabled, libhwui will attempt to
- * minimize the use of scissor by selectively enabling and disabling the
- * GL scissor test.
- * When the optimization is disabled, OpenGLRenderer will keep the GL
- * scissor test enabled and change the scissor rect as needed.
- * Some GPUs (for instance the SGX 540) perform better when changing
- * the scissor rect often than when enabling/disabling the scissor test
- * often.
- */
-#define PROPERTY_DISABLE_SCISSOR_OPTIMIZATION "ro.hwui.disable_scissor_opt"
-
-/**
- * Indicates whether PBOs can be used to back pixel buffers.
- * Accepted values are "true" and "false". Default is true.
- */
-#define PROPERTY_ENABLE_GPU_PIXEL_BUFFERS "ro.hwui.use_gpu_pixel_buffers"
-
-// These properties are defined in mega-bytes
-#define PROPERTY_TEXTURE_CACHE_SIZE "ro.hwui.texture_cache_size"
-#define PROPERTY_LAYER_CACHE_SIZE "ro.hwui.layer_cache_size"
-#define PROPERTY_RENDER_BUFFER_CACHE_SIZE "ro.hwui.r_buffer_cache_size"
-#define PROPERTY_GRADIENT_CACHE_SIZE "ro.hwui.gradient_cache_size"
-#define PROPERTY_PATH_CACHE_SIZE "ro.hwui.path_cache_size"
-#define PROPERTY_VERTEX_CACHE_SIZE "ro.hwui.vertex_cache_size"
-#define PROPERTY_PATCH_CACHE_SIZE "ro.hwui.patch_cache_size"
-#define PROPERTY_DROP_SHADOW_CACHE_SIZE "ro.hwui.drop_shadow_cache_size"
-#define PROPERTY_FBO_CACHE_SIZE "ro.hwui.fbo_cache_size"
-
-// These properties are defined in percentage (range 0..1)
-#define PROPERTY_TEXTURE_CACHE_FLUSH_RATE "ro.hwui.texture_cache_flushrate"
-
-// These properties are defined in pixels
-#define PROPERTY_TEXT_SMALL_CACHE_WIDTH "ro.hwui.text_small_cache_width"
-#define PROPERTY_TEXT_SMALL_CACHE_HEIGHT "ro.hwui.text_small_cache_height"
-#define PROPERTY_TEXT_LARGE_CACHE_WIDTH "ro.hwui.text_large_cache_width"
-#define PROPERTY_TEXT_LARGE_CACHE_HEIGHT "ro.hwui.text_large_cache_height"
-
-// Gamma (>= 1.0, <= 3.0)
-#define PROPERTY_TEXT_GAMMA "hwui.text_gamma"
-
-///////////////////////////////////////////////////////////////////////////////
-// Default property values
-///////////////////////////////////////////////////////////////////////////////
-
-#define DEFAULT_TEXTURE_CACHE_SIZE 24.0f
-#define DEFAULT_LAYER_CACHE_SIZE 16.0f
-#define DEFAULT_RENDER_BUFFER_CACHE_SIZE 2.0f
-#define DEFAULT_PATH_CACHE_SIZE 4.0f
-#define DEFAULT_VERTEX_CACHE_SIZE 1.0f
-#define DEFAULT_PATCH_CACHE_SIZE 128.0f // in kB
-#define DEFAULT_GRADIENT_CACHE_SIZE 0.5f
-#define DEFAULT_DROP_SHADOW_CACHE_SIZE 2.0f
-#define DEFAULT_FBO_CACHE_SIZE 0
-
-#define DEFAULT_TEXTURE_CACHE_FLUSH_RATE 0.6f
-
-#define DEFAULT_TEXT_GAMMA 1.45f // Match design tools
-
-// cap to 256 to limite paths in the path cache
-#define DEFAULT_PATH_TEXTURE_CAP 256
-
-///////////////////////////////////////////////////////////////////////////////
 // Misc
 ///////////////////////////////////////////////////////////////////////////////
 
@@ -279,18 +216,8 @@
     static bool useBufferAge;
     static bool enablePartialUpdates;
 
-    static float textGamma;
-
-    static int fboCacheSize;
-    static int gradientCacheSize;
-    static int layerPoolSize;
-    static int patchCacheSize;
-    static int pathCacheSize;
-    static int renderBufferCacheSize;
-    static int tessellationCacheSize;
-    static int textDropShadowCacheSize;
-    static int textureCacheSize;
-    static float textureCacheFlushRate;
+    // TODO: Move somewhere else?
+    static constexpr float textGamma = 1.45f;
 
     static DebugLevel debugLevel;
     static OverdrawColorSet overdrawColorSet;
diff --git a/libs/hwui/RenderBufferCache.cpp b/libs/hwui/RenderBufferCache.cpp
index 1ac57cd..2f8ddfe 100644
--- a/libs/hwui/RenderBufferCache.cpp
+++ b/libs/hwui/RenderBufferCache.cpp
@@ -17,6 +17,7 @@
 #include "Debug.h"
 #include "Properties.h"
 #include "RenderBufferCache.h"
+#include "DeviceInfo.h"
 
 #include <utils/Log.h>
 
@@ -36,13 +37,20 @@
     #define RENDER_BUFFER_LOGD(...)
 #endif
 
+static uint32_t calculateRboCacheSize() {
+    // TODO: Do we need to use extensions().has4BitStencil() here?
+    // The tuning guide recommends it, but all real devices are configured
+    // with a larger cache than necessary by 4x, so keep the 2x for now regardless
+    return DeviceInfo::multiplyByResolution(2);
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 // Constructors/destructor
 ///////////////////////////////////////////////////////////////////////////////
 
 RenderBufferCache::RenderBufferCache()
         : mSize(0)
-        , mMaxSize(Properties::renderBufferCacheSize) {}
+        , mMaxSize(calculateRboCacheSize()) {}
 
 RenderBufferCache::~RenderBufferCache() {
     clear();
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp
index 55eeb7f..61b3876 100644
--- a/libs/hwui/RenderNode.cpp
+++ b/libs/hwui/RenderNode.cpp
@@ -241,7 +241,8 @@
     if (CC_LIKELY(layerType != LayerType::RenderLayer)
             || CC_UNLIKELY(!isRenderable())
             || CC_UNLIKELY(properties().getWidth() == 0)
-            || CC_UNLIKELY(properties().getHeight() == 0)) {
+            || CC_UNLIKELY(properties().getHeight() == 0)
+            || CC_UNLIKELY(!properties().fitsOnLayer())) {
         if (CC_UNLIKELY(hasLayer())) {
             renderthread::CanvasContext::destroyLayer(this);
         }
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp
index 623b496..0a642b6 100644
--- a/libs/hwui/SkiaCanvas.cpp
+++ b/libs/hwui/SkiaCanvas.cpp
@@ -530,33 +530,25 @@
 // ----------------------------------------------------------------------------
 
 void SkiaCanvas::drawBitmap(Bitmap& bitmap, float left, float top, const SkPaint* paint) {
-    SkBitmap skBitmap;
-    bitmap.getSkBitmap(&skBitmap);
-    mCanvas->drawBitmap(skBitmap, left, top, paint);
+    mCanvas->drawImage(bitmap.makeImage(), left, top, paint);
 }
 
 void SkiaCanvas::drawBitmap(Bitmap& hwuiBitmap, const SkMatrix& matrix, const SkPaint* paint) {
-    SkBitmap bitmap;
-    hwuiBitmap.getSkBitmap(&bitmap);
     SkAutoCanvasRestore acr(mCanvas, true);
     mCanvas->concat(matrix);
-    mCanvas->drawBitmap(bitmap, 0, 0, paint);
+    mCanvas->drawImage(hwuiBitmap.makeImage(), 0, 0, paint);
 }
 
 void SkiaCanvas::drawBitmap(Bitmap& hwuiBitmap, float srcLeft, float srcTop,
                             float srcRight, float srcBottom, float dstLeft, float dstTop,
                             float dstRight, float dstBottom, const SkPaint* paint) {
-    SkBitmap bitmap;
-    hwuiBitmap.getSkBitmap(&bitmap);
     SkRect srcRect = SkRect::MakeLTRB(srcLeft, srcTop, srcRight, srcBottom);
     SkRect dstRect = SkRect::MakeLTRB(dstLeft, dstTop, dstRight, dstBottom);
-    mCanvas->drawBitmapRect(bitmap, srcRect, dstRect, paint);
+    mCanvas->drawImageRect(hwuiBitmap.makeImage(), srcRect, dstRect, paint);
 }
 
 void SkiaCanvas::drawBitmapMesh(Bitmap& hwuiBitmap, int meshWidth, int meshHeight,
         const float* vertices, const int* colors, const SkPaint* paint) {
-    SkBitmap bitmap;
-    hwuiBitmap.getSkBitmap(&bitmap);
     const int ptCount = (meshWidth + 1) * (meshHeight + 1);
     const int indexCount = meshWidth * meshHeight * 6;
     uint32_t flags = SkVertices::kHasTexCoords_BuilderFlag;
@@ -573,8 +565,8 @@
 
     // cons up texture coordinates and indices
     {
-        const SkScalar w = SkIntToScalar(bitmap.width());
-        const SkScalar h = SkIntToScalar(bitmap.height());
+        const SkScalar w = SkIntToScalar(hwuiBitmap.width());
+        const SkScalar h = SkIntToScalar(hwuiBitmap.height());
         const SkScalar dx = w / meshWidth;
         const SkScalar dy = h / meshHeight;
 
@@ -635,7 +627,7 @@
         tmpPaint = *paint;
     }
 
-    sk_sp<SkImage> image = SkMakeImageFromRasterBitmap(bitmap, kNever_SkCopyPixelsMode);
+    sk_sp<SkImage> image = hwuiBitmap.makeImage();
     tmpPaint.setShader(image->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode));
 
     mCanvas->drawVertices(builder.detach(), SkBlendMode::kModulate, tmpPaint);
@@ -644,11 +636,8 @@
 void SkiaCanvas::drawNinePatch(Bitmap& hwuiBitmap, const Res_png_9patch& chunk,
         float dstLeft, float dstTop, float dstRight, float dstBottom, const SkPaint* paint) {
 
-    SkBitmap bitmap;
-    hwuiBitmap.getSkBitmap(&bitmap);
-
     SkCanvas::Lattice lattice;
-    NinePatchUtils::SetLatticeDivs(&lattice, chunk, bitmap.width(), bitmap.height());
+    NinePatchUtils::SetLatticeDivs(&lattice, chunk, hwuiBitmap.width(), hwuiBitmap.height());
 
     lattice.fFlags = nullptr;
     int numFlags = 0;
@@ -665,7 +654,7 @@
 
     lattice.fBounds = nullptr;
     SkRect dst = SkRect::MakeLTRB(dstLeft, dstTop, dstRight, dstBottom);
-    mCanvas->drawBitmapLattice(bitmap, lattice, dst, paint);
+    mCanvas->drawImageLattice(hwuiBitmap.makeImage().get(), lattice, dst, paint);
 }
 
 void SkiaCanvas::drawVectorDrawable(VectorDrawableRoot* vectorDrawable) {
diff --git a/libs/hwui/SkiaCanvasProxy.cpp b/libs/hwui/SkiaCanvasProxy.cpp
index 34dddd1..16a19ca 100644
--- a/libs/hwui/SkiaCanvasProxy.cpp
+++ b/libs/hwui/SkiaCanvasProxy.cpp
@@ -151,7 +151,8 @@
 void SkiaCanvasProxy::onDrawImage(const SkImage* image, SkScalar left, SkScalar top,
         const SkPaint* paint) {
     SkBitmap skiaBitmap;
-    if (image->asLegacyBitmap(&skiaBitmap, SkImage::kRO_LegacyBitmapMode)) {
+    SkPixmap pixmap;
+    if (image->peekPixels(&pixmap) && skiaBitmap.installPixels(pixmap)) {
         onDrawBitmap(skiaBitmap, left, top, paint);
     }
 }
@@ -159,7 +160,8 @@
 void SkiaCanvasProxy::onDrawImageRect(const SkImage* image, const SkRect* srcPtr, const SkRect& dst,
         const SkPaint* paint, SrcRectConstraint constraint) {
     SkBitmap skiaBitmap;
-    if (image->asLegacyBitmap(&skiaBitmap, SkImage::kRO_LegacyBitmapMode)) {
+    SkPixmap pixmap;
+    if (image->peekPixels(&pixmap) && skiaBitmap.installPixels(pixmap)) {
         sk_sp<Bitmap> bitmap = Bitmap::createFrom(skiaBitmap.info(), *skiaBitmap.pixelRef());
         SkRect src = (srcPtr) ? *srcPtr : SkRect::MakeWH(image->width(), image->height());
         mCanvas->drawBitmap(*bitmap, src.fLeft, src.fTop, src.fRight, src.fBottom,
diff --git a/libs/hwui/TessellationCache.cpp b/libs/hwui/TessellationCache.cpp
index 91e7ac3..01582ce 100644
--- a/libs/hwui/TessellationCache.cpp
+++ b/libs/hwui/TessellationCache.cpp
@@ -290,7 +290,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 TessellationCache::TessellationCache()
-        : mMaxSize(Properties::tessellationCacheSize)
+        : mMaxSize(MB(1))
         , mCache(LruCache<Description, Buffer*>::kUnlimitedCapacity)
         , mShadowCache(LruCache<ShadowDescription, Task<vertexBuffer_pair_t*>*>::kUnlimitedCapacity) {
     mCache.setOnEntryRemovedListener(&mBufferRemovedListener);
diff --git a/libs/hwui/TextDropShadowCache.cpp b/libs/hwui/TextDropShadowCache.cpp
index e1f0b2a..c521892 100644
--- a/libs/hwui/TextDropShadowCache.cpp
+++ b/libs/hwui/TextDropShadowCache.cpp
@@ -94,7 +94,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 TextDropShadowCache::TextDropShadowCache()
-        : TextDropShadowCache(Properties::textDropShadowCacheSize) {}
+        : TextDropShadowCache(DeviceInfo::multiplyByResolution(2)) {}
 
 TextDropShadowCache::TextDropShadowCache(uint32_t maxByteSize)
         : mCache(LruCache<ShadowText, ShadowTexture*>::kUnlimitedCapacity)
diff --git a/libs/hwui/Texture.cpp b/libs/hwui/Texture.cpp
index 4ef31d5..b7c1e29 100644
--- a/libs/hwui/Texture.cpp
+++ b/libs/hwui/Texture.cpp
@@ -217,9 +217,8 @@
             *outType = GL_UNSIGNED_SHORT_5_6_5;
         }
         break;
-    // ARGB_4444 and Index_8 are both upconverted to RGBA_8888
+    // ARGB_4444 is upconverted to RGBA_8888
     case kARGB_4444_SkColorType:
-    case kIndex_8_SkColorType:
     case kN32_SkColorType:
         *outFormat = GL_RGBA;
         *outInternalFormat = caches.rgbaInternalFormat(needSRGB);
@@ -270,7 +269,6 @@
 
 bool Texture::hasUnsupportedColorType(const SkImageInfo& info, bool hasLinearBlending) {
     return info.colorType() == kARGB_4444_SkColorType
-        || info.colorType() == kIndex_8_SkColorType
         || (info.colorType() == kRGB_565_SkColorType
                 && hasLinearBlending
                 && info.colorSpace()->isSRGB())
@@ -279,11 +277,6 @@
 }
 
 void Texture::upload(Bitmap& bitmap) {
-    if (!bitmap.readyToDraw()) {
-        ALOGE("Cannot generate texture from bitmap");
-        return;
-    }
-
     ATRACE_FORMAT("Upload %ux%u Texture", bitmap.width(), bitmap.height());
 
     // We could also enable mipmapping if both bitmap dimensions are powers
diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp
index 710cdd9..6fe3606 100644
--- a/libs/hwui/TextureCache.cpp
+++ b/libs/hwui/TextureCache.cpp
@@ -24,6 +24,7 @@
 #include "Properties.h"
 #include "utils/TraceUtils.h"
 #include "hwui/Bitmap.h"
+#include "DeviceInfo.h"
 
 namespace android {
 namespace uirenderer {
@@ -35,13 +36,10 @@
 TextureCache::TextureCache()
         : mCache(LruCache<uint32_t, Texture*>::kUnlimitedCapacity)
         , mSize(0)
-        , mMaxSize(Properties::textureCacheSize)
-        , mFlushRate(Properties::textureCacheFlushRate) {
+        , mMaxSize(DeviceInfo::multiplyByResolution(4 * 6)) // 6 screen-sized RGBA_8888 bitmaps
+        , mFlushRate(.4f) {
     mCache.setOnEntryRemovedListener(this);
-
-    glGetIntegerv(GL_MAX_TEXTURE_SIZE, &mMaxTextureSize);
-    INIT_LOGD("    Maximum texture dimension is %d pixels", mMaxTextureSize);
-
+    mMaxTextureSize = DeviceInfo::get()->maxTextureSize();
     mDebugEnabled = Properties::debugLevel & kDebugCaches;
 }
 
diff --git a/libs/hwui/VectorDrawable.cpp b/libs/hwui/VectorDrawable.cpp
index f6b2912..ca179c9 100644
--- a/libs/hwui/VectorDrawable.cpp
+++ b/libs/hwui/VectorDrawable.cpp
@@ -22,6 +22,7 @@
 #include "SkShader.h"
 #include <utils/Log.h>
 #include "utils/Macros.h"
+#include "utils/TraceUtils.h"
 #include "utils/VectorDrawableUtils.h"
 
 #include <math.h>
@@ -491,47 +492,119 @@
     return *mCache.bitmap;
 }
 
-void Tree::updateCache(sk_sp<SkSurface> surface) {
-    if (surface.get()) {
-        mCache.surface = surface;
+void Tree::updateCache(sp<skiapipeline::VectorDrawableAtlas>& atlas, GrContext* context) {
+    SkRect dst;
+    sk_sp<SkSurface> surface = mCache.getSurface(&dst);
+    bool canReuseSurface = surface && dst.width() >= mProperties.getScaledWidth()
+            && dst.height() >= mProperties.getScaledHeight();
+    if (!canReuseSurface) {
+        int scaledWidth = SkScalarCeilToInt(mProperties.getScaledWidth());
+        int scaledHeight = SkScalarCeilToInt(mProperties.getScaledHeight());
+        auto atlasEntry = atlas->requestNewEntry(scaledWidth, scaledHeight, context);
+        if (INVALID_ATLAS_KEY != atlasEntry.key) {
+            dst = atlasEntry.rect;
+            surface = atlasEntry.surface;
+            mCache.setAtlas(atlas, atlasEntry.key);
+        } else {
+            //don't draw, if we failed to allocate an offscreen buffer
+            mCache.clear();
+            surface.reset();
+        }
     }
-    if (surface.get() || mCache.dirty) {
-        SkSurface* vdSurface = mCache.surface.get();
-        SkCanvas* canvas = vdSurface->getCanvas();
-        float scaleX = vdSurface->width() / mProperties.getViewportWidth();
-        float scaleY = vdSurface->height() / mProperties.getViewportHeight();
-        SkAutoCanvasRestore acr(canvas, true);
-        canvas->clear(SK_ColorTRANSPARENT);
-        canvas->scale(scaleX, scaleY);
-        mRootNode->draw(canvas, false);
+    if (!canReuseSurface || mCache.dirty) {
+        draw(surface.get(), dst);
         mCache.dirty = false;
-        canvas->flush();
     }
 }
 
+void Tree::draw(SkSurface* surface, const SkRect& dst) {
+    if (surface) {
+        SkCanvas* canvas = surface->getCanvas();
+        float scaleX = dst.width() / mProperties.getViewportWidth();
+        float scaleY = dst.height() / mProperties.getViewportHeight();
+        SkAutoCanvasRestore acr(canvas, true);
+        canvas->translate(dst.fLeft, dst.fTop);
+        canvas->clipRect(SkRect::MakeWH(dst.width(), dst.height()));
+        canvas->clear(SK_ColorTRANSPARENT);
+        canvas->scale(scaleX, scaleY);
+        mRootNode->draw(canvas, false);
+    }
+}
+
+void Tree::Cache::setAtlas(sp<skiapipeline::VectorDrawableAtlas> newAtlas,
+        skiapipeline::AtlasKey newAtlasKey) {
+    LOG_ALWAYS_FATAL_IF(newAtlasKey == INVALID_ATLAS_KEY);
+    clear();
+    mAtlas = newAtlas;
+    mAtlasKey = newAtlasKey;
+}
+
+sk_sp<SkSurface> Tree::Cache::getSurface(SkRect* bounds) {
+    sk_sp<SkSurface> surface;
+    sp<skiapipeline::VectorDrawableAtlas> atlas = mAtlas.promote();
+    if (atlas.get() && mAtlasKey != INVALID_ATLAS_KEY) {
+        auto atlasEntry = atlas->getEntry(mAtlasKey);
+        *bounds = atlasEntry.rect;
+        surface = atlasEntry.surface;
+        mAtlasKey = atlasEntry.key;
+    }
+
+    return surface;
+}
+
+void Tree::Cache::clear() {
+    sp<skiapipeline::VectorDrawableAtlas> lockAtlas = mAtlas.promote();
+    if (lockAtlas.get()) {
+        lockAtlas->releaseEntry(mAtlasKey);
+    }
+    mAtlas = nullptr;
+    mAtlasKey = INVALID_ATLAS_KEY;
+}
+
 void Tree::draw(SkCanvas* canvas) {
-   /*
-    * TODO address the following...
-    *
-    * 1) figure out how to set path's as volatile during animation
-    * 2) if mRoot->getPaint() != null either promote to layer (during
-    *    animation) or cache in SkSurface (for static content)
-    */
-    canvas->drawImageRect(mCache.surface->makeImageSnapshot().get(),
-        mutateProperties()->getBounds(), getPaint());
+    SkRect src;
+    sk_sp<SkSurface> vdSurface = mCache.getSurface(&src);
+    if (vdSurface) {
+        canvas->drawImageRect(vdSurface->makeImageSnapshot().get(), src,
+                mutateProperties()->getBounds(), getPaint());
+    } else {
+        // Handle the case when VectorDrawableAtlas has been destroyed, because of memory pressure.
+        // We render the VD into a temporary standalone buffer and mark the frame as dirty. Next
+        // frame will be cached into the atlas.
+        int scaledWidth = SkScalarCeilToInt(mProperties.getScaledWidth());
+        int scaledHeight = SkScalarCeilToInt(mProperties.getScaledHeight());
+        SkRect src = SkRect::MakeWH(scaledWidth, scaledHeight);
+#ifndef ANDROID_ENABLE_LINEAR_BLENDING
+        sk_sp<SkColorSpace> colorSpace = nullptr;
+#else
+        sk_sp<SkColorSpace> colorSpace = SkColorSpace::MakeSRGB();
+#endif
+        SkImageInfo info = SkImageInfo::MakeN32(scaledWidth, scaledHeight, kPremul_SkAlphaType,
+                colorSpace);
+        sk_sp<SkSurface> surface = SkSurface::MakeRenderTarget(canvas->getGrContext(),
+                SkBudgeted::kYes, info);
+        draw(surface.get(), src);
+        mCache.clear();
+        canvas->drawImageRect(surface->makeImageSnapshot().get(), mutateProperties()->getBounds(),
+                getPaint());
+        markDirty();
+    }
 }
 
 void Tree::updateBitmapCache(Bitmap& bitmap, bool useStagingData) {
     SkBitmap outCache;
     bitmap.getSkBitmap(&outCache);
+    int cacheWidth = outCache.width();
+    int cacheHeight = outCache.height();
+    ATRACE_FORMAT("VectorDrawable repaint %dx%d", cacheWidth, cacheHeight);
     outCache.eraseColor(SK_ColorTRANSPARENT);
     SkCanvas outCanvas(outCache);
     float viewportWidth = useStagingData ?
             mStagingProperties.getViewportWidth() : mProperties.getViewportWidth();
     float viewportHeight = useStagingData ?
             mStagingProperties.getViewportHeight() : mProperties.getViewportHeight();
-    float scaleX = outCache.width() / viewportWidth;
-    float scaleY = outCache.height() / viewportHeight;
+    float scaleX = cacheWidth / viewportWidth;
+    float scaleY = cacheHeight / viewportHeight;
     outCanvas.scale(scaleX, scaleY);
     mRootNode->draw(&outCanvas, useStagingData);
 }
diff --git a/libs/hwui/VectorDrawable.h b/libs/hwui/VectorDrawable.h
index 22cfe29..efbb695 100644
--- a/libs/hwui/VectorDrawable.h
+++ b/libs/hwui/VectorDrawable.h
@@ -19,6 +19,7 @@
 
 #include "hwui/Canvas.h"
 #include "hwui/Bitmap.h"
+#include "renderthread/CacheManager.h"
 #include "DisplayList.h"
 
 #include <SkBitmap.h>
@@ -687,35 +688,61 @@
     bool getPropertyChangeWillBeConsumed() const { return mWillBeConsumed; }
     void setPropertyChangeWillBeConsumed(bool willBeConsumed) { mWillBeConsumed = willBeConsumed; }
 
-    // Returns true if VD cache surface is big enough. This should always be called from RT and it
-    // works with Skia pipelines only.
-    bool canReuseSurface() {
-        SkSurface* surface = mCache.surface.get();
-        return surface && surface->width() >= mProperties.getScaledWidth()
-              && surface->height() >= mProperties.getScaledHeight();
-    }
-
-    // Draws VD cache into a canvas. This should always be called from RT and it works with Skia
-    // pipelines only.
+    /**
+     * Draws VD cache into a canvas. This should always be called from RT and it works with Skia
+     * pipelines only.
+     */
     void draw(SkCanvas* canvas);
 
-    // Draws VD into a GPU backed surface. If canReuseSurface returns false, then "surface" must
-    // contain a new surface. This should always be called from RT and it works with Skia pipelines
-    // only.
-    void updateCache(sk_sp<SkSurface> surface);
+    /**
+     * Draws VD into a GPU backed surface.
+     * This should always be called from RT and it works with Skia pipeline only.
+     */
+    void updateCache(sp<skiapipeline::VectorDrawableAtlas>& atlas, GrContext* context);
 
 private:
-    struct Cache {
+    class Cache {
+    public:
         sk_sp<Bitmap> bitmap; //used by HWUI pipeline and software
         //TODO: use surface instead of bitmap when drawing in software canvas
-        sk_sp<SkSurface> surface; //used only by Skia pipelines
         bool dirty = true;
+
+        // the rest of the code in Cache is used by Skia pipelines only
+
+        ~Cache() { clear(); }
+
+        /**
+         * Stores a weak pointer to the atlas and a key.
+         */
+        void setAtlas(sp<skiapipeline::VectorDrawableAtlas> atlas,
+                skiapipeline::AtlasKey newAtlasKey);
+
+        /**
+         * Gets a surface and bounds from the atlas.
+         *
+         * @return nullptr if the altas has been deleted.
+         */
+        sk_sp<SkSurface> getSurface(SkRect* bounds);
+
+        /**
+         * Releases atlas key from the atlas, which makes it available for reuse.
+         */
+        void clear();
+    private:
+        wp<skiapipeline::VectorDrawableAtlas> mAtlas;
+        skiapipeline::AtlasKey mAtlasKey = INVALID_ATLAS_KEY;
     };
 
     SkPaint* updatePaint(SkPaint* outPaint, TreeProperties* prop);
     bool allocateBitmapIfNeeded(Cache& cache, int width, int height);
     bool canReuseBitmap(Bitmap*, int width, int height);
     void updateBitmapCache(Bitmap& outCache, bool useStagingData);
+
+    /**
+     * Draws the root node into "surface" at a given "dst" position.
+     */
+    void draw(SkSurface* surface, const SkRect& dst);
+
     // Cap the bitmap size, such that it won't hurt the performance too much
     // and it won't crash due to a very large scale.
     // The drawable will look blurry above this size.
diff --git a/libs/hwui/font/CacheTexture.cpp b/libs/hwui/font/CacheTexture.cpp
index e2844ad..73beba9 100644
--- a/libs/hwui/font/CacheTexture.cpp
+++ b/libs/hwui/font/CacheTexture.cpp
@@ -91,6 +91,9 @@
     CacheBlock* prevBlock = blockToRemove->mPrev;
 
     if (prevBlock) {
+        // If this doesn't hold, we have a use-after-free below.
+        LOG_ALWAYS_FATAL_IF(head == blockToRemove,
+                "removeBlock: head should not have a previous block");
         prevBlock->mNext = nextBlock;
     } else {
         newHead = nextBlock;
diff --git a/libs/hwui/font/FontUtil.h b/libs/hwui/font/FontUtil.h
index 07e8b34..d4b4ff9 100644
--- a/libs/hwui/font/FontUtil.h
+++ b/libs/hwui/font/FontUtil.h
@@ -25,11 +25,6 @@
 // Defines
 ///////////////////////////////////////////////////////////////////////////////
 
-#define DEFAULT_TEXT_SMALL_CACHE_WIDTH 1024
-#define DEFAULT_TEXT_SMALL_CACHE_HEIGHT 512
-#define DEFAULT_TEXT_LARGE_CACHE_WIDTH 2048
-#define DEFAULT_TEXT_LARGE_CACHE_HEIGHT 512
-
 #ifdef TEXTURE_BORDER_SIZE
   #if TEXTURE_BORDER_SIZE != 1
     #error TEXTURE_BORDER_SIZE other than 1 is not currently supported
diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp
index 6dde005..75b6d23 100644
--- a/libs/hwui/hwui/Bitmap.cpp
+++ b/libs/hwui/hwui/Bitmap.cpp
@@ -46,10 +46,10 @@
     return true;
 }
 
-typedef sk_sp<Bitmap> (*AllocPixeRef)(size_t allocSize, const SkImageInfo& info, size_t rowBytes,
-        sk_sp<SkColorTable> ctable);
+typedef sk_sp<Bitmap> (*AllocPixelRef)(size_t allocSize, const SkImageInfo& info,
+        size_t rowBytes);
 
-static sk_sp<Bitmap> allocateBitmap(SkBitmap* bitmap, sk_sp<SkColorTable> ctable, AllocPixeRef alloc) {
+static sk_sp<Bitmap> allocateBitmap(SkBitmap* bitmap, AllocPixelRef alloc) {
     const SkImageInfo& info = bitmap->info();
     if (info.colorType() == kUnknown_SkColorType) {
         LOG_ALWAYS_FATAL("unknown bitmap configuration");
@@ -65,32 +65,31 @@
         return nullptr;
     }
 
-    auto wrapper = alloc(size, info, rowBytes, std::move(ctable));
+    auto wrapper = alloc(size, info, rowBytes);
     if (wrapper) {
         wrapper->getSkBitmap(bitmap);
     }
     return wrapper;
 }
 
-sk_sp<Bitmap> Bitmap::allocateAshmemBitmap(SkBitmap* bitmap, sk_sp<SkColorTable> ctable) {
-   return allocateBitmap(bitmap, std::move(ctable), &Bitmap::allocateAshmemBitmap);
+sk_sp<Bitmap> Bitmap::allocateAshmemBitmap(SkBitmap* bitmap) {
+   return allocateBitmap(bitmap, &Bitmap::allocateAshmemBitmap);
 }
 
-static sk_sp<Bitmap> allocateHeapBitmap(size_t size, const SkImageInfo& info, size_t rowBytes,
-        sk_sp<SkColorTable> ctable) {
+static sk_sp<Bitmap> allocateHeapBitmap(size_t size, const SkImageInfo& info, size_t rowBytes) {
     void* addr = calloc(size, 1);
     if (!addr) {
         return nullptr;
     }
-    return sk_sp<Bitmap>(new Bitmap(addr, size, info, rowBytes, std::move(ctable)));
+    return sk_sp<Bitmap>(new Bitmap(addr, size, info, rowBytes));
 }
 
 sk_sp<Bitmap> Bitmap::allocateHardwareBitmap(SkBitmap& bitmap) {
     return uirenderer::renderthread::RenderProxy::allocateHardwareBitmap(bitmap);
 }
 
-sk_sp<Bitmap> Bitmap::allocateHeapBitmap(SkBitmap* bitmap, sk_sp<SkColorTable> ctable) {
-   return allocateBitmap(bitmap, std::move(ctable), &android::allocateHeapBitmap);
+sk_sp<Bitmap> Bitmap::allocateHeapBitmap(SkBitmap* bitmap) {
+   return allocateBitmap(bitmap, &android::allocateHeapBitmap);
 }
 
 sk_sp<Bitmap> Bitmap::allocateHeapBitmap(const SkImageInfo& info) {
@@ -99,11 +98,11 @@
         LOG_ALWAYS_FATAL("trying to allocate too large bitmap");
         return nullptr;
     }
-    return android::allocateHeapBitmap(size, info, info.minRowBytes(), nullptr);
+    return android::allocateHeapBitmap(size, info, info.minRowBytes());
 }
 
 sk_sp<Bitmap> Bitmap::allocateAshmemBitmap(size_t size, const SkImageInfo& info,
-        size_t rowBytes, sk_sp<SkColorTable> ctable) {
+        size_t rowBytes) {
     // Create new ashmem region with read/write priv
     int fd = ashmem_create_region("bitmap", size);
     if (fd < 0) {
@@ -121,7 +120,7 @@
         close(fd);
         return nullptr;
     }
-    return sk_sp<Bitmap>(new Bitmap(addr, fd, size, info, rowBytes, std::move(ctable)));
+    return sk_sp<Bitmap>(new Bitmap(addr, fd, size, info, rowBytes));
 }
 
 void FreePixelRef(void* addr, void* context) {
@@ -132,7 +131,7 @@
 sk_sp<Bitmap> Bitmap::createFrom(const SkImageInfo& info, SkPixelRef& pixelRef) {
     pixelRef.ref();
     return sk_sp<Bitmap>(new Bitmap((void*) pixelRef.pixels(), (void*) &pixelRef, FreePixelRef,
-            info, pixelRef.rowBytes(), sk_ref_sp(pixelRef.colorTable())));
+            info, pixelRef.rowBytes()));
 }
 
 sk_sp<Bitmap> Bitmap::createFrom(sp<GraphicBuffer> graphicBuffer) {
@@ -161,11 +160,7 @@
     return info.makeAlphaType(alphaType);
 }
 
-void Bitmap::reconfigure(const SkImageInfo& newInfo, size_t rowBytes, sk_sp<SkColorTable> ctable) {
-    if (kIndex_8_SkColorType != newInfo.colorType()) {
-        ctable = nullptr;
-    }
-
+void Bitmap::reconfigure(const SkImageInfo& newInfo, size_t rowBytes) {
     mInfo = validateAlpha(newInfo);
 
     // Dirty hack is dirty
@@ -173,20 +168,11 @@
     // really hard to work with. Skia really, really wants immutable objects,
     // but with the nested-ref-count hackery going on that's just not
     // feasible without going insane trying to figure it out
-    this->android_only_reset(mInfo.width(), mInfo.height(), rowBytes, std::move(ctable));
+    this->android_only_reset(mInfo.width(), mInfo.height(), rowBytes);
 }
 
-static sk_sp<SkColorTable> sanitize(const SkImageInfo& info, sk_sp<SkColorTable> ctable) {
-    if (info.colorType() == kIndex_8_SkColorType) {
-        SkASSERT(ctable);
-        return ctable;
-    }
-    return nullptr; // drop the ctable if we're not indexed
-}
-Bitmap::Bitmap(void* address, size_t size, const SkImageInfo& info, size_t rowBytes,
-        sk_sp<SkColorTable> ctable)
-            : SkPixelRef(info.width(), info.height(), address, rowBytes,
-                    sanitize(info, std::move(ctable)))
+Bitmap::Bitmap(void* address, size_t size, const SkImageInfo& info, size_t rowBytes)
+            : SkPixelRef(info.width(), info.height(), address, rowBytes)
             , mInfo(validateAlpha(info))
             , mPixelStorageType(PixelStorageType::Heap) {
     mPixelStorage.heap.address = address;
@@ -194,9 +180,8 @@
 }
 
 Bitmap::Bitmap(void* address, void* context, FreeFunc freeFunc,
-                const SkImageInfo& info, size_t rowBytes, sk_sp<SkColorTable> ctable)
-            : SkPixelRef(info.width(), info.height(), address, rowBytes,
-                    sanitize(info, std::move(ctable)))
+                const SkImageInfo& info, size_t rowBytes)
+            : SkPixelRef(info.width(), info.height(), address, rowBytes)
             , mInfo(validateAlpha(info))
             , mPixelStorageType(PixelStorageType::External) {
     mPixelStorage.external.address = address;
@@ -205,9 +190,8 @@
 }
 
 Bitmap::Bitmap(void* address, int fd, size_t mappedSize,
-                const SkImageInfo& info, size_t rowBytes, sk_sp<SkColorTable> ctable)
-            : SkPixelRef(info.width(), info.height(), address, rowBytes,
-                    sanitize(info, std::move(ctable)))
+                const SkImageInfo& info, size_t rowBytes)
+            : SkPixelRef(info.width(), info.height(), address, rowBytes)
             , mInfo(validateAlpha(info))
             , mPixelStorageType(PixelStorageType::Ashmem) {
     mPixelStorage.ashmem.address = address;
@@ -217,15 +201,16 @@
 
 Bitmap::Bitmap(GraphicBuffer* buffer, const SkImageInfo& info)
         : SkPixelRef(info.width(), info.height(), nullptr,
-                     bytesPerPixel(buffer->getPixelFormat()) * buffer->getStride(),
-                     nullptr)
+                     bytesPerPixel(buffer->getPixelFormat()) * buffer->getStride())
         , mInfo(validateAlpha(info))
         , mPixelStorageType(PixelStorageType::Hardware) {
     mPixelStorage.hardware.buffer = buffer;
     buffer->incStrong(buffer);
     setImmutable(); // HW bitmaps are always immutable
     if (uirenderer::Properties::isSkiaEnabled()) {
-        // TODO: add color correctness for Skia pipeline - pass null color space for now
+        // GraphicBuffer should be in the display color space (Bitmap::createFrom is always
+        // passing SRGB). The code that uploads into a GraphicBuffer should do color conversion if
+        // needed.
         mImage = SkImage::MakeFromAHardwareBuffer(reinterpret_cast<AHardwareBuffer*>(buffer),
                 mInfo.alphaType(), nullptr);
     }
@@ -295,7 +280,7 @@
 }
 
 void Bitmap::reconfigure(const SkImageInfo& info) {
-    reconfigure(info, info.minRowBytes(), nullptr);
+    reconfigure(info, info.minRowBytes());
 }
 
 void Bitmap::setAlphaType(SkAlphaType alphaType) {
@@ -310,7 +295,6 @@
     outBitmap->setHasHardwareMipMap(mHasHardwareMipMap);
     if (isHardware()) {
         if (uirenderer::Properties::isSkiaEnabled()) {
-            // TODO: add color correctness for Skia pipeline - pass null color space for now
             outBitmap->allocPixels(SkImageInfo::Make(info().width(), info().height(),
                     info().colorType(), info().alphaType(), nullptr));
         } else {
@@ -346,7 +330,12 @@
         // Note we don't cache in this case, because the raster image holds a pointer to this Bitmap
         // internally and ~Bitmap won't be invoked.
         // TODO: refactor Bitmap to not derive from SkPixelRef, which would allow caching here.
-        image = SkMakeImageFromRasterBitmap(skiaBitmap, kNever_SkCopyPixelsMode);
+        if (uirenderer::Properties::isSkiaEnabled()) {
+            image = SkMakeImageInColorSpace(skiaBitmap, SkColorSpace::MakeSRGB(),
+                    skiaBitmap.getGenerationID(), kNever_SkCopyPixelsMode);
+        } else {
+            image = SkMakeImageFromRasterBitmap(skiaBitmap, kNever_SkCopyPixelsMode);
+        }
     }
     return image;
 }
diff --git a/libs/hwui/hwui/Bitmap.h b/libs/hwui/hwui/Bitmap.h
index 364240670..634e764 100644
--- a/libs/hwui/hwui/Bitmap.h
+++ b/libs/hwui/hwui/Bitmap.h
@@ -17,7 +17,6 @@
 
 #include <SkBitmap.h>
 #include <SkColorSpace.h>
-#include <SkColorTable.h>
 #include <SkImage.h>
 #include <SkImageInfo.h>
 #include <SkPixelRef.h>
@@ -46,32 +45,31 @@
 
 class ANDROID_API Bitmap : public SkPixelRef {
 public:
-    static sk_sp<Bitmap> allocateHeapBitmap(SkBitmap* bitmap, sk_sp<SkColorTable> ctable);
+    static sk_sp<Bitmap> allocateHeapBitmap(SkBitmap* bitmap);
     static sk_sp<Bitmap> allocateHeapBitmap(const SkImageInfo& info);
 
     static sk_sp<Bitmap> allocateHardwareBitmap(SkBitmap& bitmap);
 
-    static sk_sp<Bitmap> allocateAshmemBitmap(SkBitmap* bitmap, sk_sp<SkColorTable> ctable);
+    static sk_sp<Bitmap> allocateAshmemBitmap(SkBitmap* bitmap);
     static sk_sp<Bitmap> allocateAshmemBitmap(size_t allocSize, const SkImageInfo& info,
-        size_t rowBytes, sk_sp<SkColorTable> ctable);
+        size_t rowBytes);
 
     static sk_sp<Bitmap> createFrom(sp<GraphicBuffer> graphicBuffer);
 
     static sk_sp<Bitmap> createFrom(const SkImageInfo&, SkPixelRef&);
 
-    Bitmap(void* address, size_t allocSize, const SkImageInfo& info, size_t rowBytes,
-            sk_sp<SkColorTable> ctable);
+    Bitmap(void* address, size_t allocSize, const SkImageInfo& info, size_t rowBytes);
     Bitmap(void* address, void* context, FreeFunc freeFunc,
-            const SkImageInfo& info, size_t rowBytes, sk_sp<SkColorTable> ctable);
+            const SkImageInfo& info, size_t rowBytes);
     Bitmap(void* address, int fd, size_t mappedSize, const SkImageInfo& info,
-            size_t rowBytes, sk_sp<SkColorTable> ctable);
+            size_t rowBytes);
     Bitmap(GraphicBuffer* buffer, const SkImageInfo& info);
 
     int rowBytesAsPixels() const {
         return rowBytes() >> SkColorTypeShiftPerPixel(mInfo.colorType());
     }
 
-    void reconfigure(const SkImageInfo& info, size_t rowBytes, sk_sp<SkColorTable> ctable);
+    void reconfigure(const SkImageInfo& info, size_t rowBytes);
     void reconfigure(const SkImageInfo& info);
     void setColorSpace(sk_sp<SkColorSpace> colorSpace);
     void setAlphaType(SkAlphaType alphaType);
@@ -92,10 +90,6 @@
 
     void getBounds(SkRect* bounds) const;
 
-    bool readyToDraw() const {
-        return this->colorType() != kIndex_8_SkColorType || this->colorTable();
-    }
-
     bool isHardware() const {
         return mPixelStorageType == PixelStorageType::Hardware;
     }
diff --git a/libs/hwui/hwui/Canvas.cpp b/libs/hwui/hwui/Canvas.cpp
index 679cb50..e754daf 100644
--- a/libs/hwui/hwui/Canvas.cpp
+++ b/libs/hwui/hwui/Canvas.cpp
@@ -35,6 +35,13 @@
     return new uirenderer::RecordingCanvas(width, height);
 }
 
+static inline void drawStroke(SkScalar left, SkScalar right, SkScalar top, SkScalar thickness,
+        const SkPaint& paint, Canvas* canvas) {
+    const SkScalar strokeWidth = fmax(thickness, 1.0f);
+    const SkScalar bottom = top + strokeWidth;
+    canvas->drawRect(left, top, right, bottom, paint);
+}
+
 void Canvas::drawTextDecorations(float x, float y, float length, const SkPaint& paint) {
     uint32_t flags;
     SkDrawFilter* drawFilter = getDrawFilter();
@@ -46,24 +53,28 @@
         flags = paint.getFlags();
     }
     if (flags & (SkPaint::kUnderlineText_ReserveFlag | SkPaint::kStrikeThruText_ReserveFlag)) {
-        // Same values used by Skia
-        const float kStdStrikeThru_Offset   = (-6.0f / 21.0f);
-        const float kStdUnderline_Offset    = (1.0f / 9.0f);
-        const float kStdUnderline_Thickness = (1.0f / 18.0f);
-
-        SkScalar left = x;
-        SkScalar right = x + length;
-        float textSize = paint.getTextSize();
-        float strokeWidth = fmax(textSize * kStdUnderline_Thickness, 1.0f);
+        const SkScalar left = x;
+        const SkScalar right = x + length;
         if (flags & SkPaint::kUnderlineText_ReserveFlag) {
-            SkScalar top = y + textSize * kStdUnderline_Offset - 0.5f * strokeWidth;
-            SkScalar bottom = y + textSize * kStdUnderline_Offset + 0.5f * strokeWidth;
-            drawRect(left, top, right, bottom, paint);
+            Paint::FontMetrics metrics;
+            paint.getFontMetrics(&metrics);
+            SkScalar position;
+            if (!metrics.hasUnderlinePosition(&position)) {
+                position = paint.getTextSize() * Paint::kStdUnderline_Top;
+            }
+            SkScalar thickness;
+            if (!metrics.hasUnderlineThickness(&thickness)) {
+                thickness = paint.getTextSize() * Paint::kStdUnderline_Thickness;
+            }
+            const SkScalar top = y + position;
+            drawStroke(left, right, top, thickness, paint, this);
         }
         if (flags & SkPaint::kStrikeThruText_ReserveFlag) {
-            SkScalar top = y + textSize * kStdStrikeThru_Offset - 0.5f * strokeWidth;
-            SkScalar bottom = y + textSize * kStdStrikeThru_Offset + 0.5f * strokeWidth;
-            drawRect(left, top, right, bottom, paint);
+            const float textSize = paint.getTextSize();
+            const float position = textSize * Paint::kStdStrikeThru_Top;
+            const SkScalar thickness = textSize * Paint::kStdStrikeThru_Thickness;
+            const SkScalar top = y + position;
+            drawStroke(left, right, top, thickness, paint, this);
         }
     }
 }
diff --git a/libs/hwui/hwui/Paint.h b/libs/hwui/hwui/Paint.h
index c9b5f00..a5d83a0 100644
--- a/libs/hwui/hwui/Paint.h
+++ b/libs/hwui/hwui/Paint.h
@@ -28,6 +28,19 @@
 
 class ANDROID_API Paint : public SkPaint {
 public:
+    // Default values for underlined and strikethrough text,
+    // as defined by Skia in SkTextFormatParams.h.
+    constexpr static float kStdStrikeThru_Offset   = (-6.0f / 21.0f);
+    constexpr static float kStdUnderline_Offset    = (1.0f / 9.0f);
+    constexpr static float kStdUnderline_Thickness = (1.0f / 18.0f);
+
+    constexpr static float kStdUnderline_Top =
+            kStdUnderline_Offset - 0.5f * kStdUnderline_Thickness;
+
+    constexpr static float kStdStrikeThru_Thickness = kStdUnderline_Thickness;
+    constexpr static float kStdStrikeThru_Top =
+            kStdStrikeThru_Offset - 0.5f * kStdStrikeThru_Thickness;
+
     Paint();
     Paint(const Paint& paint);
     Paint(const SkPaint& paint);  // NOLINT(implicit)
diff --git a/libs/hwui/pipeline/skia/LayerDrawable.cpp b/libs/hwui/pipeline/skia/LayerDrawable.cpp
index 2ebfbcc..4feeb2d 100644
--- a/libs/hwui/pipeline/skia/LayerDrawable.cpp
+++ b/libs/hwui/pipeline/skia/LayerDrawable.cpp
@@ -18,6 +18,7 @@
 #include "LayerDrawable.h"
 #include "VkLayer.h"
 
+#include "GrBackendSurface.h"
 #include "SkColorFilter.h"
 #include "SkSurface.h"
 #include "gl/GrGLTypes.h"
@@ -46,13 +47,10 @@
         GrGLTextureInfo externalTexture;
         externalTexture.fTarget = glLayer->getRenderTarget();
         externalTexture.fID = glLayer->getTextureId();
-        GrBackendTextureDesc textureDescription;
-        textureDescription.fWidth = glLayer->getWidth();
-        textureDescription.fHeight = glLayer->getHeight();
-        textureDescription.fConfig = kRGBA_8888_GrPixelConfig;
-        textureDescription.fOrigin = kTopLeft_GrSurfaceOrigin;
-        textureDescription.fTextureHandle = reinterpret_cast<GrBackendObject>(&externalTexture);
-        layerImage = SkImage::MakeFromTexture(context, textureDescription);
+        GrBackendTexture backendTexture(glLayer->getWidth(), glLayer->getHeight(),
+                kRGBA_8888_GrPixelConfig, externalTexture);
+        layerImage = SkImage::MakeFromTexture(context, backendTexture, kTopLeft_GrSurfaceOrigin,
+                kPremul_SkAlphaType, nullptr);
     } else {
         SkASSERT(layer->getApi() == Layer::Api::Vulkan);
         VkLayer* vkLayer = static_cast<VkLayer*>(layer);
diff --git a/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp b/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp
index 975f849..374d364 100644
--- a/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp
+++ b/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp
@@ -51,8 +51,6 @@
             return aZValue < bZValue;
         });
 
-    SkASSERT(!mChildren.empty());
-
     size_t drawIndex = 0;
     const size_t endIndex = mChildren.size();
     while (drawIndex < endIndex) {
@@ -76,7 +74,6 @@
 
 void EndReorderBarrierDrawable::onDraw(SkCanvas* canvas) {
     auto& zChildren = mStartBarrier->mChildren;
-    SkASSERT(!zChildren.empty());
 
     /**
      * Draw shadows and (potential) casters mostly in order, but allow the shadows of casters
diff --git a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp
index 6d5ef1d..925db30 100644
--- a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp
@@ -27,6 +27,8 @@
 #include "SkiaProfileRenderer.h"
 #include "utils/TraceUtils.h"
 
+#include <GrBackendSurface.h>
+
 #include <cutils/properties.h>
 #include <strings.h>
 
@@ -69,20 +71,17 @@
     mEglManager.damageFrame(frame, dirty);
 
     // setup surface for fbo0
-    GrBackendRenderTargetDesc renderTargetDesc;
-    renderTargetDesc.fWidth = frame.width();
-    renderTargetDesc.fHeight = frame.height();
-    renderTargetDesc.fConfig = kRGBA_8888_GrPixelConfig;
-    renderTargetDesc.fOrigin = kBottomLeft_GrSurfaceOrigin;
-    renderTargetDesc.fSampleCnt = 0;
-    renderTargetDesc.fStencilBits = STENCIL_BUFFER_SIZE;
-    renderTargetDesc.fRenderTargetHandle = 0;
+    GrGLFramebufferInfo fboInfo;
+    fboInfo.fFBOID = 0;
+
+    GrBackendRenderTarget backendRT(frame.width(), frame.height(), 0, STENCIL_BUFFER_SIZE,
+            kRGBA_8888_GrPixelConfig, fboInfo);
 
     SkSurfaceProps props(0, kUnknown_SkPixelGeometry);
 
     SkASSERT(mRenderThread.getGrContext() != nullptr);
     sk_sp<SkSurface> surface(SkSurface::MakeFromBackendRenderTarget(
-            mRenderThread.getGrContext(), renderTargetDesc, &props));
+            mRenderThread.getGrContext(), backendRT, kBottomLeft_GrSurfaceOrigin, nullptr, &props));
 
     SkiaPipeline::updateLighting(lightGeometry, lightInfo);
     renderFrame(*layerUpdateQueue, dirty, renderNodes, opaque, wideColorGamut,
@@ -270,8 +269,7 @@
     switch (info.colorType()) {
     case kRGBA_8888_SkColorType:
         isSupported = true;
-    // ARGB_4444 and Index_8 are both upconverted to RGBA_8888
-    case kIndex_8_SkColorType:
+    // ARGB_4444 is upconverted to RGBA_8888
     case kARGB_4444_SkColorType:
         pixelFormat = PIXEL_FORMAT_RGBA_8888;
         format = GL_RGBA;
@@ -305,6 +303,13 @@
         return nullptr;
     }
 
+    auto colorSpace = info.colorSpace();
+    bool convertToSRGB = false;
+    if (colorSpace && (!colorSpace->isSRGB())) {
+        isSupported = false;
+        convertToSRGB = true;
+    }
+
     SkBitmap bitmap;
     if (isSupported) {
         bitmap = skBitmap;
@@ -312,7 +317,7 @@
         bitmap.allocPixels(SkImageInfo::MakeN32(info.width(), info.height(), info.alphaType(),
                 nullptr));
         bitmap.eraseColor(0);
-        if (info.colorType() == kRGBA_F16_SkColorType) {
+        if (info.colorType() == kRGBA_F16_SkColorType || convertToSRGB) {
             // Drawing RGBA_F16 onto ARGB_8888 is not supported
             skBitmap.readPixels(bitmap.info().makeColorSpace(SkColorSpace::MakeSRGB()),
                     bitmap.getPixels(), bitmap.rowBytes(), 0, 0);
diff --git a/libs/hwui/pipeline/skia/SkiaOpenGLReadback.cpp b/libs/hwui/pipeline/skia/SkiaOpenGLReadback.cpp
index 89697d7..311419d 100644
--- a/libs/hwui/pipeline/skia/SkiaOpenGLReadback.cpp
+++ b/libs/hwui/pipeline/skia/SkiaOpenGLReadback.cpp
@@ -20,6 +20,7 @@
 #include "Properties.h"
 #include <SkCanvas.h>
 #include <SkSurface.h>
+#include <GrBackendSurface.h>
 #include <gl/GrGLInterface.h>
 #include <gl/GrGLTypes.h>
 #include <GLES2/gl2.h>
@@ -53,50 +54,61 @@
     externalTexture.fTarget = GL_TEXTURE_EXTERNAL_OES;
     externalTexture.fID = sourceTexId;
 
-    GrBackendTextureDesc textureDescription;
-    textureDescription.fWidth = imgWidth;
-    textureDescription.fHeight = imgHeight;
-    textureDescription.fConfig = kRGBA_8888_GrPixelConfig;
-    textureDescription.fOrigin = kTopLeft_GrSurfaceOrigin;
-    textureDescription.fTextureHandle = reinterpret_cast<GrBackendObject>(&externalTexture);
+    GrBackendTexture backendTexture(imgWidth, imgHeight, kRGBA_8888_GrPixelConfig, externalTexture);
 
     CopyResult copyResult = CopyResult::UnknownError;
-    sk_sp<SkImage> image(SkImage::MakeFromAdoptedTexture(grContext.get(), textureDescription));
+    sk_sp<SkImage> image(SkImage::MakeFromAdoptedTexture(grContext.get(), backendTexture,
+            kTopLeft_GrSurfaceOrigin));
     if (image) {
-        // convert to Skia data structures
-        const SkRect bufferRect = SkRect::MakeIWH(imgWidth, imgHeight);
-        SkRect skiaSrcRect = srcRect.toSkRect();
         SkMatrix textureMatrix;
         imgTransform.copyTo(textureMatrix);
 
-        // remove the y-flip applied to the matrix so that we can scale the srcRect.
-        // This flip is not needed as we specify the origin of the texture when we
-        // wrap it as an SkImage.
+        // remove the y-flip applied to the matrix
         SkMatrix yFlip = SkMatrix::MakeScale(1, -1);
         yFlip.postTranslate(0,1);
         textureMatrix.preConcat(yFlip);
 
-        // copy the entire src if the rect is empty
-        if (skiaSrcRect.isEmpty()) {
-            skiaSrcRect = bufferRect;
+        // multiply by image size, because textureMatrix maps to [0..1] range
+        textureMatrix[SkMatrix::kMTransX] *= imgWidth;
+        textureMatrix[SkMatrix::kMTransY] *= imgHeight;
+
+        // swap rotation and translation part of the matrix, because we convert from
+        // right-handed Cartesian to left-handed coordinate system.
+        std::swap(textureMatrix[SkMatrix::kMTransX], textureMatrix[SkMatrix::kMTransY]);
+        std::swap(textureMatrix[SkMatrix::kMSkewX], textureMatrix[SkMatrix::kMSkewY]);
+
+        // convert to Skia data structures
+        SkRect skiaSrcRect = srcRect.toSkRect();
+        SkMatrix textureMatrixInv;
+        SkRect skiaDestRect = SkRect::MakeWH(bitmap->width(), bitmap->height());
+        bool srcNotEmpty = false;
+        if (textureMatrix.invert(&textureMatrixInv)) {
+            if (skiaSrcRect.isEmpty()) {
+                skiaSrcRect = SkRect::MakeIWH(imgWidth, imgHeight);
+                srcNotEmpty = !skiaSrcRect.isEmpty();
+            } else {
+                // src and dest rectangles need to be converted into texture coordinates before the
+                // rotation matrix is applied (because drawImageRect preconcat its matrix).
+                textureMatrixInv.mapRect(&skiaSrcRect);
+                srcNotEmpty = skiaSrcRect.intersect(SkRect::MakeIWH(imgWidth, imgHeight));
+            }
+            textureMatrixInv.mapRect(&skiaDestRect);
         }
 
-        // since the y-flip has been removed we can simply scale & translate
-        // the source rectangle
-        textureMatrix.mapRect(&skiaSrcRect);
-
-        if (skiaSrcRect.intersect(bufferRect)) {
+        if (srcNotEmpty) {
             // we render in an offscreen buffer to scale and to avoid an issue b/62262733
             // with reading incorrect data from EGLImage backed SkImage (likely a driver bug)
             sk_sp<SkSurface> scaledSurface = SkSurface::MakeRenderTarget(
                     grContext.get(), SkBudgeted::kYes, bitmap->info());
             SkPaint paint;
             paint.setBlendMode(SkBlendMode::kSrc);
-            scaledSurface->getCanvas()->drawImageRect(image, skiaSrcRect,
-                    SkRect::MakeWH(bitmap->width(), bitmap->height()), &paint);
+            scaledSurface->getCanvas()->concat(textureMatrix);
+            scaledSurface->getCanvas()->drawImageRect(image, skiaSrcRect, skiaDestRect, &paint);
+
             image = scaledSurface->makeImageSnapshot();
 
             if (image->readPixels(bitmap->info(), bitmap->getPixels(), bitmap->rowBytes(), 0, 0)) {
+                bitmap->notifyPixelsChanged();
                 copyResult = CopyResult::Success;
             }
         }
diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
index 0bab793..03792e0 100644
--- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
@@ -95,7 +95,7 @@
             SkASSERT(layerNode->getDisplayList()->isSkiaDL());
             SkiaDisplayList* displayList = (SkiaDisplayList*)layerNode->getDisplayList();
             if (!displayList || displayList->isEmpty()) {
-                SkDEBUGF(("%p drawLayers(%s) : missing drawable", this, layerNode->getName()));
+                SkDEBUGF(("%p drawLayers(%s) : missing drawable", layerNode, layerNode->getName()));
                 return;
             }
 
@@ -183,26 +183,16 @@
 };
 
 void SkiaPipeline::renderVectorDrawableCache() {
-    //render VectorDrawables into offscreen buffers
-    for (auto vd : mVectorDrawables) {
-        sk_sp<SkSurface> surface;
-        if (!vd->canReuseSurface()) {
-#ifndef ANDROID_ENABLE_LINEAR_BLENDING
-            sk_sp<SkColorSpace> colorSpace = nullptr;
-#else
-            sk_sp<SkColorSpace> colorSpace = SkColorSpace::MakeSRGB();
-#endif
-            int scaledWidth = SkScalarCeilToInt(vd->properties().getScaledWidth());
-            int scaledHeight = SkScalarCeilToInt(vd->properties().getScaledHeight());
-            SkImageInfo info = SkImageInfo::MakeN32(scaledWidth, scaledHeight,
-                    kPremul_SkAlphaType, colorSpace);
-            SkASSERT(mRenderThread.getGrContext() != nullptr);
-            surface = SkSurface::MakeRenderTarget(mRenderThread.getGrContext(), SkBudgeted::kYes,
-                    info);
+    if (!mVectorDrawables.empty()) {
+        sp<VectorDrawableAtlas> atlas = mRenderThread.cacheManager().acquireVectorDrawableAtlas();
+        auto grContext = mRenderThread.getGrContext();
+        atlas->prepareForDraw(grContext);
+        for (auto vd : mVectorDrawables) {
+            vd->updateCache(atlas, grContext);
         }
-        vd->updateCache(surface);
+        grContext->flush();
+        mVectorDrawables.clear();
     }
-    mVectorDrawables.clear();
 }
 
 void SkiaPipeline::renderFrame(const LayerUpdateQueue& layers, const SkRect& clip,
diff --git a/libs/hwui/pipeline/skia/VectorDrawableAtlas.cpp b/libs/hwui/pipeline/skia/VectorDrawableAtlas.cpp
new file mode 100644
index 0000000..437653a
--- /dev/null
+++ b/libs/hwui/pipeline/skia/VectorDrawableAtlas.cpp
@@ -0,0 +1,269 @@
+/*
+ * 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.
+ */
+
+#include "VectorDrawableAtlas.h"
+
+#include <GrRectanizer_pow2.h>
+#include <SkCanvas.h>
+#include <cmath>
+#include "utils/TraceUtils.h"
+#include "renderthread/RenderProxy.h"
+
+namespace android {
+namespace uirenderer {
+namespace skiapipeline {
+
+VectorDrawableAtlas::VectorDrawableAtlas(size_t surfaceArea, StorageMode storageMode)
+        : mWidth((int)std::sqrt(surfaceArea))
+        , mHeight((int)std::sqrt(surfaceArea))
+        , mStorageMode(storageMode) {
+}
+
+void VectorDrawableAtlas::prepareForDraw(GrContext* context) {
+    if (StorageMode::allowSharedSurface == mStorageMode) {
+        if (!mSurface) {
+            mSurface = createSurface(mWidth, mHeight, context);
+            mRectanizer = std::make_unique<GrRectanizerPow2>(mWidth, mHeight);
+            mPixelUsedByVDs = 0;
+            mPixelAllocated = 0;
+            mConsecutiveFailures = 0;
+            mFreeRects.clear();
+        } else {
+            if (isFragmented()) {
+                // Invoke repack outside renderFrame to avoid jank.
+                renderthread::RenderProxy::repackVectorDrawableAtlas();
+            }
+        }
+    }
+}
+
+#define MAX_CONSECUTIVE_FAILURES 5
+#define MAX_UNUSED_RATIO 2.0f
+
+bool VectorDrawableAtlas::isFragmented() {
+    return mConsecutiveFailures > MAX_CONSECUTIVE_FAILURES
+            && mPixelUsedByVDs*MAX_UNUSED_RATIO < mPixelAllocated;
+}
+
+void VectorDrawableAtlas::repackIfNeeded(GrContext* context) {
+    // We repackage when atlas failed to allocate space MAX_CONSECUTIVE_FAILURES consecutive
+    // times and the atlas allocated pixels are at least MAX_UNUSED_RATIO times higher than pixels
+    // used by atlas VDs.
+    if (isFragmented() && mSurface) {
+        repack(context);
+    }
+}
+
+// compare to CacheEntry objects based on VD area.
+bool VectorDrawableAtlas::compareCacheEntry(const CacheEntry& first, const CacheEntry& second)
+{
+    return first.VDrect.width()*first.VDrect.height() < second.VDrect.width()*second.VDrect.height();
+}
+
+void VectorDrawableAtlas::repack(GrContext* context) {
+    ATRACE_CALL();
+    sk_sp<SkSurface> newSurface;
+    SkCanvas* canvas = nullptr;
+    if (StorageMode::allowSharedSurface == mStorageMode) {
+        newSurface = createSurface(mWidth, mHeight, context);
+        if (!newSurface) {
+            return;
+        }
+        canvas = newSurface->getCanvas();
+        canvas->clear(SK_ColorTRANSPARENT);
+        mRectanizer = std::make_unique<GrRectanizerPow2>(mWidth, mHeight);
+    } else {
+        if (!mSurface) {
+            return; //nothing to repack
+        }
+        mRectanizer.reset();
+    }
+    mFreeRects.clear();
+    SkImage* sourceImageAtlas = nullptr;
+    if (mSurface) {
+        sourceImageAtlas = mSurface->makeImageSnapshot().get();
+    }
+
+    // Sort the list by VD size, which allows for the smallest VDs to get first in the atlas.
+    // Sorting is safe, because it does not affect iterator validity.
+    if (mRects.size() <= 100) {
+        mRects.sort(compareCacheEntry);
+    }
+
+    for (CacheEntry& entry : mRects) {
+        SkRect currentVDRect = entry.VDrect;
+        SkImage* sourceImage; //copy either from the atlas or from a standalone surface
+        if (entry.surface) {
+            if (!fitInAtlas(currentVDRect.width(), currentVDRect.height())) {
+                continue; //don't even try to repack huge VD
+            }
+            sourceImage = entry.surface->makeImageSnapshot().get();
+        } else {
+            sourceImage = sourceImageAtlas;
+        }
+        size_t VDRectArea = currentVDRect.width()*currentVDRect.height();
+        SkIPoint16 pos;
+        if (canvas && mRectanizer->addRect(currentVDRect.width(), currentVDRect.height(), &pos)) {
+            SkRect newRect = SkRect::MakeXYWH(pos.fX, pos.fY, currentVDRect.width(),
+                    currentVDRect.height());
+            canvas->drawImageRect(sourceImage, currentVDRect, newRect, nullptr);
+            entry.VDrect = newRect;
+            entry.rect = newRect;
+            if (entry.surface) {
+                // A rectangle moved from a standalone surface to the atlas.
+                entry.surface = nullptr;
+                mPixelUsedByVDs += VDRectArea;
+            }
+        } else {
+            // Repack failed for this item. If it is not already, store it in a standalone
+            // surface.
+            if (!entry.surface) {
+                // A rectangle moved from an atlas to a standalone surface.
+                mPixelUsedByVDs -= VDRectArea;
+                SkRect newRect = SkRect::MakeWH(currentVDRect.width(),
+                        currentVDRect.height());
+                entry.surface = createSurface(newRect.width(), newRect.height(), context);
+                auto tempCanvas = entry.surface->getCanvas();
+                tempCanvas->clear(SK_ColorTRANSPARENT);
+                tempCanvas->drawImageRect(sourceImageAtlas, currentVDRect, newRect, nullptr);
+                entry.VDrect = newRect;
+                entry.rect = newRect;
+            }
+        }
+    }
+    mPixelAllocated = mPixelUsedByVDs;
+    context->flush();
+    mSurface = newSurface;
+    mConsecutiveFailures = 0;
+}
+
+AtlasEntry VectorDrawableAtlas::requestNewEntry(int width, int height, GrContext* context) {
+    AtlasEntry result;
+    if (width <= 0 || height <= 0) {
+        return result;
+    }
+
+    if (mSurface) {
+        const size_t area = width*height;
+
+        // Use a rectanizer to allocate unused space from the atlas surface.
+        bool notTooBig = fitInAtlas(width, height);
+        SkIPoint16 pos;
+        if (notTooBig && mRectanizer->addRect(width, height, &pos)) {
+            mPixelUsedByVDs += area;
+            mPixelAllocated += area;
+            result.rect = SkRect::MakeXYWH(pos.fX, pos.fY, width, height);
+            result.surface = mSurface;
+            auto eraseIt = mRects.emplace(mRects.end(), result.rect, result.rect, nullptr);
+            CacheEntry* entry = &(*eraseIt);
+            entry->eraseIt = eraseIt;
+            result.key = reinterpret_cast<AtlasKey>(entry);
+            mConsecutiveFailures = 0;
+            return result;
+        }
+
+        // Try to reuse atlas memory from rectangles freed by "releaseEntry".
+        auto freeRectIt = mFreeRects.lower_bound(area);
+        while (freeRectIt != mFreeRects.end()) {
+            SkRect& freeRect = freeRectIt->second;
+            if (freeRect.width() >= width && freeRect.height() >= height) {
+                result.rect = SkRect::MakeXYWH(freeRect.fLeft, freeRect.fTop, width, height);
+                result.surface = mSurface;
+                auto eraseIt = mRects.emplace(mRects.end(), result.rect, freeRect, nullptr);
+                CacheEntry* entry = &(*eraseIt);
+                entry->eraseIt = eraseIt;
+                result.key = reinterpret_cast<AtlasKey>(entry);
+                mPixelUsedByVDs += area;
+                mFreeRects.erase(freeRectIt);
+                mConsecutiveFailures = 0;
+                return result;
+            }
+            freeRectIt++;
+        }
+
+        if (notTooBig && mConsecutiveFailures <= MAX_CONSECUTIVE_FAILURES) {
+            mConsecutiveFailures++;
+        }
+    }
+
+    // Allocate a surface for a rectangle that is too big or if atlas is full.
+    if (nullptr != context) {
+        result.rect = SkRect::MakeWH(width, height);
+        result.surface = createSurface(width, height, context);
+        auto eraseIt = mRects.emplace(mRects.end(), result.rect, result.rect, result.surface);
+        CacheEntry* entry = &(*eraseIt);
+        entry->eraseIt = eraseIt;
+        result.key = reinterpret_cast<AtlasKey>(entry);
+    }
+
+    return result;
+}
+
+AtlasEntry VectorDrawableAtlas::getEntry(AtlasKey atlasKey) {
+    AtlasEntry result;
+    if (INVALID_ATLAS_KEY != atlasKey) {
+        CacheEntry* entry = reinterpret_cast<CacheEntry*>(atlasKey);
+        result.rect = entry->VDrect;
+        result.surface = entry->surface;
+        if (!result.surface) {
+            result.surface = mSurface;
+        }
+        result.key = atlasKey;
+    }
+    return result;
+}
+
+void VectorDrawableAtlas::releaseEntry(AtlasKey atlasKey) {
+    if (INVALID_ATLAS_KEY != atlasKey) {
+        CacheEntry* entry = reinterpret_cast<CacheEntry*>(atlasKey);
+        if (!entry->surface) {
+            // Store freed atlas rectangles in "mFreeRects" and try to reuse them later, when atlas
+            // is full.
+            SkRect& removedRect = entry->rect;
+            size_t rectArea = removedRect.width()*removedRect.height();
+            mFreeRects.emplace(rectArea, removedRect);
+            SkRect& removedVDRect = entry->VDrect;
+            size_t VDRectArea = removedVDRect.width()*removedVDRect.height();
+            mPixelUsedByVDs -= VDRectArea;
+            mConsecutiveFailures = 0;
+        }
+        auto eraseIt = entry->eraseIt;
+        mRects.erase(eraseIt);
+    }
+}
+
+sk_sp<SkSurface> VectorDrawableAtlas::createSurface(int width, int height, GrContext* context) {
+#ifndef ANDROID_ENABLE_LINEAR_BLENDING
+    sk_sp<SkColorSpace> colorSpace = nullptr;
+#else
+    sk_sp<SkColorSpace> colorSpace = SkColorSpace::MakeSRGB();
+#endif
+    SkImageInfo info = SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType, colorSpace);
+    return SkSurface::MakeRenderTarget(context, SkBudgeted::kYes, info);
+}
+
+void VectorDrawableAtlas::setStorageMode(StorageMode mode) {
+    mStorageMode = mode;
+    if (StorageMode::disallowSharedSurface == mStorageMode && mSurface) {
+        mSurface.reset();
+        mRectanizer.reset();
+        mFreeRects.clear();
+    }
+}
+
+} /* namespace skiapipeline */
+} /* namespace uirenderer */
+} /* namespace android */
diff --git a/libs/hwui/pipeline/skia/VectorDrawableAtlas.h b/libs/hwui/pipeline/skia/VectorDrawableAtlas.h
new file mode 100644
index 0000000..496c557
--- /dev/null
+++ b/libs/hwui/pipeline/skia/VectorDrawableAtlas.h
@@ -0,0 +1,198 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include <map>
+#include <SkSurface.h>
+#include <utils/FatVector.h>
+#include <utils/RefBase.h>
+#include <list>
+
+class GrRectanizer;
+
+namespace android {
+namespace uirenderer {
+namespace skiapipeline {
+
+typedef uintptr_t AtlasKey;
+
+#define INVALID_ATLAS_KEY 0
+
+struct AtlasEntry {
+    sk_sp<SkSurface> surface;
+    SkRect rect;
+    AtlasKey key = INVALID_ATLAS_KEY;
+};
+
+/**
+ * VectorDrawableAtlas provides offscreen buffers used to draw VD and AnimatedVD.
+ * VectorDrawableAtlas can allocate a standalone surface or provide a subrect from a shared surface.
+ * VectorDrawableAtlas is owned by the CacheManager and weak pointers are kept by each
+ * VectorDrawable that is using it. VectorDrawableAtlas and its surface can be deleted at any time,
+ * except during a renderFrame call. VectorDrawable does not contain a pointer to atlas SkSurface
+ * nor any coordinates into the atlas, but instead holds a rectangle "id", which is resolved only
+ * when drawing. This design makes VectorDrawableAtlas free to move the data internally.
+ * At draw time a VectorDrawable may find, that its atlas has been deleted, which will make it
+ * draw in a standalone cache surface not part of an atlas. In this case VD won't use
+ * VectorDrawableAtlas until the next frame.
+ * VectorDrawableAtlas tries to fit VDs in the atlas SkSurface. If there is not enough space in
+ * the atlas, VectorDrawableAtlas creates a standalone surface for each VD.
+ * When a VectorDrawable is deleted, it invokes VectorDrawableAtlas::releaseEntry, which is keeping
+ * track of free spaces and allow to reuse the surface for another VD.
+ */
+ //TODO: Check if not using atlas for AnimatedVD is more efficient.
+ //TODO: For low memory situations, when there are no paint effects in VD, we may render without an
+ //TODO: offscreen surface.
+class VectorDrawableAtlas : public virtual RefBase {
+public:
+    enum class StorageMode {
+        allowSharedSurface,
+        disallowSharedSurface
+    };
+
+    VectorDrawableAtlas(size_t surfaceArea,
+            StorageMode storageMode = StorageMode::allowSharedSurface);
+
+    /**
+     * "prepareForDraw" may allocate a new surface if needed. It may schedule to repack the
+     * atlas at a later time.
+     */
+    void prepareForDraw(GrContext* context);
+
+    /**
+     * Repack the atlas if needed, by moving used rectangles into a new atlas surface.
+     * The goal of repacking is to fix a fragmented atlas.
+     */
+    void repackIfNeeded(GrContext* context);
+
+    /**
+     * Returns true if atlas is fragmented and repack is needed.
+     */
+    bool isFragmented();
+
+    /**
+     * "requestNewEntry" is called by VectorDrawable to allocate a new rectangle area from the atlas
+     * or create a standalone surface if atlas is full.
+     * On success it returns a non-negative unique id, which can be used later with "getEntry" and
+     * "releaseEntry".
+     */
+    AtlasEntry requestNewEntry(int width, int height, GrContext* context);
+
+    /**
+     * "getEntry" extracts coordinates and surface of a previously created rectangle.
+     * "atlasKey" is an unique id created by "requestNewEntry". Passing a non-existing "atlasKey" is
+     * causing an undefined behaviour.
+     * On success it returns a rectangle Id -> may be same or different from "atlasKey" if
+     * implementation decides to move the record internally.
+     */
+    AtlasEntry getEntry(AtlasKey atlasKey);
+
+    /**
+     * "releaseEntry" is invoked when a VectorDrawable is deleted. Passing a non-existing "atlasKey"
+     * is causing an undefined behaviour.
+     */
+    void releaseEntry(AtlasKey atlasKey);
+
+    void setStorageMode(StorageMode mode);
+
+private:
+    struct CacheEntry {
+        CacheEntry(const SkRect& newVDrect, const SkRect& newRect,
+                const sk_sp<SkSurface>& newSurface)
+                : VDrect(newVDrect)
+                , rect(newRect)
+                , surface(newSurface) { }
+
+        /**
+         * size and position of VectorDrawable into the atlas or in "this.surface"
+         */
+        SkRect VDrect;
+
+        /**
+         * rect allocated in atlas surface or "this.surface". It may be bigger than "VDrect"
+         */
+        SkRect rect;
+
+        /**
+         * this surface is used if atlas is full or VD is too big
+         */
+        sk_sp<SkSurface> surface;
+
+        /**
+         * iterator is used to delete self with a constant complexity (without traversing the list)
+         */
+        std::list<CacheEntry>::iterator eraseIt;
+    };
+
+    /**
+     * atlas surface shared by all VDs
+     */
+    sk_sp<SkSurface> mSurface;
+
+    std::unique_ptr<GrRectanizer> mRectanizer;
+    const int mWidth;
+    const int mHeight;
+
+    /**
+     * "mRects" keeps records only for rectangles used by VDs. List has nice properties: constant
+     * complexity to insert and erase and references are not invalidated by insert/erase.
+     */
+    std::list<CacheEntry> mRects;
+
+    /**
+     * Rectangles freed by "releaseEntry" are removed from "mRects" and added to "mFreeRects".
+     * "mFreeRects" is using for an index the rectangle area. There could be more than one free
+     * rectangle with the same area, which is the reason to use "multimap" instead of "map".
+     */
+    std::multimap<size_t, SkRect> mFreeRects;
+
+    /**
+     * area in atlas used by VectorDrawables (area in standalone surface not counted)
+     */
+    int mPixelUsedByVDs = 0;
+
+    /**
+     * area allocated in mRectanizer
+     */
+    int mPixelAllocated = 0;
+
+    /**
+     * Consecutive times we had to allocate standalone surfaces, because atlas was full.
+     */
+    int mConsecutiveFailures = 0;
+
+    /**
+     * mStorageMode allows using a shared surface to store small vector drawables.
+     * Using a shared surface can boost the performance by allowing GL ops to be batched, but may
+     * consume more memory.
+     */
+    StorageMode mStorageMode;
+
+    sk_sp<SkSurface> createSurface(int width, int height, GrContext* context);
+
+    inline bool fitInAtlas(int width, int height) {
+        return 2*width < mWidth && 2*height < mHeight;
+    }
+
+    void repack(GrContext* context);
+
+    static bool compareCacheEntry(const CacheEntry& first, const CacheEntry& second);
+};
+
+} /* namespace skiapipeline */
+} /* namespace uirenderer */
+} /* namespace android */
diff --git a/libs/hwui/renderstate/Blend.cpp b/libs/hwui/renderstate/Blend.cpp
index 8865c6e..b1ca4a2 100644
--- a/libs/hwui/renderstate/Blend.cpp
+++ b/libs/hwui/renderstate/Blend.cpp
@@ -118,7 +118,7 @@
 }
 
 void Blend::setFactors(GLenum srcMode, GLenum dstMode) {
-    if (srcMode == GL_ZERO && dstMode == GL_ZERO) {
+    if ((srcMode == GL_ZERO || srcMode == GL_ONE) && dstMode == GL_ZERO) {
         // disable blending
         if (mEnabled) {
             glDisable(GL_BLEND);
diff --git a/libs/hwui/renderstate/Blend.h b/libs/hwui/renderstate/Blend.h
index ec0e114..a9de246 100644
--- a/libs/hwui/renderstate/Blend.h
+++ b/libs/hwui/renderstate/Blend.h
@@ -40,6 +40,14 @@
             GLenum* outSrc, GLenum* outDst);
     void setFactors(GLenum src, GLenum dst);
 
+    bool  getEnabled() {
+        return mEnabled;
+    }
+    void getFactors(GLenum* src, GLenum* dst) {
+        *src = mSrcMode;
+        *dst = mDstMode;
+    }
+
     void dump();
 private:
     Blend();
diff --git a/libs/hwui/renderstate/OffscreenBufferPool.cpp b/libs/hwui/renderstate/OffscreenBufferPool.cpp
index 90b27c8..ea292d6 100644
--- a/libs/hwui/renderstate/OffscreenBufferPool.cpp
+++ b/libs/hwui/renderstate/OffscreenBufferPool.cpp
@@ -17,7 +17,6 @@
 #include "OffscreenBufferPool.h"
 
 #include "Caches.h"
-#include "Properties.h"
 #include "renderstate/RenderState.h"
 #include "utils/FatVector.h"
 #include "utils/TraceUtils.h"
@@ -118,7 +117,8 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 OffscreenBufferPool::OffscreenBufferPool()
-    : mMaxSize(Properties::layerPoolSize) {
+     // 4 screen-sized RGBA_8888 textures
+    : mMaxSize(DeviceInfo::multiplyByResolution(4 * 4)) {
 }
 
 OffscreenBufferPool::~OffscreenBufferPool() {
@@ -179,8 +179,9 @@
         layer->region.clear();
         return layer;
     }
+    bool wideColorGamut = layer->wideColorGamut;
     putOrDelete(layer);
-    return get(renderState, width, height, layer->wideColorGamut);
+    return get(renderState, width, height, wideColorGamut);
 }
 
 void OffscreenBufferPool::dump() {
diff --git a/libs/hwui/renderstate/RenderState.cpp b/libs/hwui/renderstate/RenderState.cpp
index 2c92924..5fc5cb2 100644
--- a/libs/hwui/renderstate/RenderState.cpp
+++ b/libs/hwui/renderstate/RenderState.cpp
@@ -53,6 +53,11 @@
     mScissor = new Scissor();
     mStencil = new Stencil();
 
+    // Deferred because creation needs GL context for texture limits
+    if (!mLayerPool) {
+        mLayerPool = new OffscreenBufferPool();
+    }
+
     // This is delayed because the first access of Caches makes GL calls
     if (!mCaches) {
         mCaches = &Caches::createInstance(*this);
@@ -67,7 +72,7 @@
 }
 
 void RenderState::onGLContextDestroyed() {
-    mLayerPool.clear();
+    mLayerPool->clear();
 
     // TODO: reset all cached state in state objects
     std::for_each(mActiveLayers.begin(), mActiveLayers.end(), layerLostGlContext);
@@ -100,7 +105,7 @@
 }
 
 void RenderState::onVkContextDestroyed() {
-    mLayerPool.clear();
+    mLayerPool->clear();
     std::for_each(mActiveLayers.begin(), mActiveLayers.end(), layerDestroyedVkContext);
     GpuMemoryTracker::onGpuContextDestroyed();
 }
@@ -116,10 +121,10 @@
         case Caches::FlushMode::Moderate:
             // fall through
         case Caches::FlushMode::Layers:
-            mLayerPool.clear();
+            if (mLayerPool) mLayerPool->clear();
             break;
     }
-    mCaches->flush(mode);
+    if (mCaches) mCaches->flush(mode);
 }
 
 void RenderState::onBitmapDestroyed(uint32_t pixelRefId) {
@@ -257,7 +262,8 @@
 // Render
 ///////////////////////////////////////////////////////////////////////////////
 
-void RenderState::render(const Glop& glop, const Matrix4& orthoMatrix) {
+void RenderState::render(const Glop& glop, const Matrix4& orthoMatrix,
+        bool overrideDisableBlending) {
     const Glop::Mesh& mesh = glop.mesh;
     const Glop::Mesh::Vertices& vertices = mesh.vertices;
     const Glop::Mesh::Indices& indices = mesh.indices;
@@ -412,7 +418,11 @@
     // ------------------------------------
     // ---------- GL state setup ----------
     // ------------------------------------
-    blend().setFactors(glop.blend.src, glop.blend.dst);
+    if (CC_UNLIKELY(overrideDisableBlending)) {
+        blend().setFactors(GL_ZERO, GL_ZERO);
+    } else {
+        blend().setFactors(glop.blend.src, glop.blend.dst);
+    }
 
     GL_CHECKPOINT(MODERATE);
 
diff --git a/libs/hwui/renderstate/RenderState.h b/libs/hwui/renderstate/RenderState.h
index 4b7a865..315fa2d 100644
--- a/libs/hwui/renderstate/RenderState.h
+++ b/libs/hwui/renderstate/RenderState.h
@@ -106,14 +106,14 @@
     // more thinking...
     void postDecStrong(VirtualLightRefBase* object);
 
-    void render(const Glop& glop, const Matrix4& orthoMatrix);
+    void render(const Glop& glop, const Matrix4& orthoMatrix, bool overrideDisableBlending);
 
     Blend& blend() { return *mBlend; }
     MeshState& meshState() { return *mMeshState; }
     Scissor& scissor() { return *mScissor; }
     Stencil& stencil() { return *mStencil; }
 
-    OffscreenBufferPool& layerPool() { return mLayerPool; }
+    OffscreenBufferPool& layerPool() { return *mLayerPool; }
 
     GrContext* getGrContext() const;
 
@@ -136,7 +136,7 @@
     Scissor* mScissor = nullptr;
     Stencil* mStencil = nullptr;
 
-    OffscreenBufferPool mLayerPool;
+    OffscreenBufferPool* mLayerPool = nullptr;
 
     std::set<Layer*> mActiveLayers;
     std::set<DeferredLayerUpdater*> mActiveLayerUpdaters;
diff --git a/libs/hwui/renderstate/Stencil.cpp b/libs/hwui/renderstate/Stencil.cpp
index d25ad51..f594421 100644
--- a/libs/hwui/renderstate/Stencil.cpp
+++ b/libs/hwui/renderstate/Stencil.cpp
@@ -47,7 +47,7 @@
  */
 GLenum Stencil::getLayerStencilFormat() {
 #if !DEBUG_STENCIL
-    const Extensions& extensions = Caches::getInstance().extensions();
+    const Extensions& extensions = DeviceInfo::get()->extensions();
     if (extensions.has4BitStencil()) {
         return GL_STENCIL_INDEX4_OES;
     }
diff --git a/libs/hwui/renderthread/CacheManager.cpp b/libs/hwui/renderthread/CacheManager.cpp
index f0d6b38..55694d0 100644
--- a/libs/hwui/renderthread/CacheManager.cpp
+++ b/libs/hwui/renderthread/CacheManager.cpp
@@ -43,7 +43,8 @@
 
 CacheManager::CacheManager(const DisplayInfo& display)
         : mMaxSurfaceArea(display.w * display.h) {
-    mVectorDrawableAtlas.reset(new VectorDrawableAtlas);
+    mVectorDrawableAtlas = new skiapipeline::VectorDrawableAtlas(mMaxSurfaceArea/2,
+            skiapipeline::VectorDrawableAtlas::StorageMode::allowSharedSurface);
 }
 
 void CacheManager::reset(GrContext* context) {
@@ -61,7 +62,7 @@
 void CacheManager::destroy() {
     // cleanup any caches here as the GrContext is about to go away...
     mGrContext.reset(nullptr);
-    mVectorDrawableAtlas.reset(new VectorDrawableAtlas);
+    mVectorDrawableAtlas = new skiapipeline::VectorDrawableAtlas(mMaxSurfaceArea/2);
 }
 
 void CacheManager::updateContextCacheSizes() {
@@ -104,7 +105,7 @@
 
     switch (mode) {
         case TrimMemoryMode::Complete:
-            mVectorDrawableAtlas.reset(new VectorDrawableAtlas);
+            mVectorDrawableAtlas = new skiapipeline::VectorDrawableAtlas(mMaxSurfaceArea/2);
             mGrContext->freeGpuResources();
             break;
         case TrimMemoryMode::UiHidden:
@@ -121,24 +122,14 @@
     mGrContext->purgeResourcesNotUsedInMs(std::chrono::seconds(30));
 }
 
-VectorDrawableAtlas* CacheManager::acquireVectorDrawableAtlas() {
+sp<skiapipeline::VectorDrawableAtlas> CacheManager::acquireVectorDrawableAtlas() {
     LOG_ALWAYS_FATAL_IF(mVectorDrawableAtlas.get() == nullptr);
     LOG_ALWAYS_FATAL_IF(mGrContext == nullptr);
 
     /**
-     * TODO LIST:
-     *    1) compute the atlas based on the surfaceArea surface
-     *    2) identify a way to reuse cache entries
-     *    3) add ability to repack the cache?
-     *    4) define memory conditions where we clear the cache (e.g. surface->reset())
+     * TODO: define memory conditions where we clear the cache (e.g. surface->reset())
      */
-
-    return mVectorDrawableAtlas.release();
-}
-void CacheManager::releaseVectorDrawableAtlas(VectorDrawableAtlas* atlas) {
-    LOG_ALWAYS_FATAL_IF(mVectorDrawableAtlas.get() != nullptr);
-    mVectorDrawableAtlas.reset(atlas);
-    mVectorDrawableAtlas->isNewAtlas = false;
+    return mVectorDrawableAtlas;
 }
 
 void CacheManager::dumpMemoryUsage(String8& log, const RenderState* renderState) {
diff --git a/libs/hwui/renderthread/CacheManager.h b/libs/hwui/renderthread/CacheManager.h
index 43d58f2..90362f3 100644
--- a/libs/hwui/renderthread/CacheManager.h
+++ b/libs/hwui/renderthread/CacheManager.h
@@ -22,6 +22,7 @@
 #include <ui/DisplayInfo.h>
 #include <utils/String8.h>
 #include <vector>
+#include "pipeline/skia/VectorDrawableAtlas.h"
 
 namespace android {
 
@@ -36,11 +37,6 @@
 class IRenderPipeline;
 class RenderThread;
 
-struct VectorDrawableAtlas {
-    sk_sp<SkSurface> surface;
-    bool isNewAtlas = true;
-};
-
 class CacheManager {
 public:
     enum class TrimMemoryMode {
@@ -53,8 +49,7 @@
     void trimStaleResources();
     void dumpMemoryUsage(String8& log, const RenderState* renderState = nullptr);
 
-    VectorDrawableAtlas* acquireVectorDrawableAtlas();
-    void releaseVectorDrawableAtlas(VectorDrawableAtlas*);
+    sp<skiapipeline::VectorDrawableAtlas> acquireVectorDrawableAtlas();
 
     size_t getCacheSize() const { return mMaxResourceBytes; }
     size_t getBackgroundCacheSize() const { return mBackgroundResourceBytes; }
@@ -81,7 +76,7 @@
         size_t surfaceArea = 0;
     };
 
-    std::unique_ptr<VectorDrawableAtlas> mVectorDrawableAtlas;
+    sp<skiapipeline::VectorDrawableAtlas> mVectorDrawableAtlas;
 };
 
 } /* namespace renderthread */
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index 7799248..5d7f594 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -142,8 +142,8 @@
         : mRenderThread(thread)
         , mOpaque(!translucent)
         , mAnimationContext(contextFactory->createAnimationContext(mRenderThread.timeLord()))
-        , mJankTracker(thread.mainDisplayInfo())
-        , mProfiler(mFrames)
+        , mJankTracker(&thread.globalProfileData(), thread.mainDisplayInfo())
+        , mProfiler(mJankTracker.frames())
         , mContentDrawBounds(0, 0, 0, 0)
         , mRenderPipeline(std::move(renderPipeline)) {
     rootRenderNode->makeRoot();
@@ -321,7 +321,7 @@
     // If the previous frame was dropped we don't need to hold onto it, so
     // just keep using the previous frame's structure instead
     if (!wasSkipped(mCurrentFrameInfo)) {
-        mCurrentFrameInfo = &mFrames.next();
+        mCurrentFrameInfo = mJankTracker.startFrame();
     }
     mCurrentFrameInfo->importUiThreadInfo(uiFrameInfo);
     mCurrentFrameInfo->set(FrameInfoIndex::SyncQueued) = syncQueued;
@@ -485,8 +485,7 @@
     }
 #endif
 
-    mJankTracker.addFrame(*mCurrentFrameInfo);
-    mRenderThread.jankTracker().addFrame(*mCurrentFrameInfo);
+    mJankTracker.finishFrame(*mCurrentFrameInfo);
     if (CC_UNLIKELY(mFrameMetricsReporter.get() != nullptr)) {
         mFrameMetricsReporter->reportFrameMetrics(mCurrentFrameInfo->data());
     }
@@ -625,30 +624,12 @@
 }
 
 void CanvasContext::dumpFrames(int fd) {
-    mJankTracker.dump(fd);
-    FILE* file = fdopen(fd, "a");
-    fprintf(file, "\n\n---PROFILEDATA---\n");
-    for (size_t i = 0; i < static_cast<size_t>(FrameInfoIndex::NumIndexes); i++) {
-        fprintf(file, "%s", FrameInfoNames[i].c_str());
-        fprintf(file, ",");
-    }
-    for (size_t i = 0; i < mFrames.size(); i++) {
-        FrameInfo& frame = mFrames[i];
-        if (frame[FrameInfoIndex::SyncStart] == 0) {
-            continue;
-        }
-        fprintf(file, "\n");
-        for (int i = 0; i < static_cast<int>(FrameInfoIndex::NumIndexes); i++) {
-            fprintf(file, "%" PRId64 ",", frame[i]);
-        }
-    }
-    fprintf(file, "\n---PROFILEDATA---\n\n");
-    fflush(file);
+    mJankTracker.dumpStats(fd);
+    mJankTracker.dumpFrames(fd);
 }
 
 void CanvasContext::resetFrameStats() {
-    mFrames.clear();
-    mRenderThread.jankTracker().reset();
+    mJankTracker.reset();
 }
 
 void CanvasContext::setName(const std::string&& name) {
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
index b1f4050..4a5b2c7 100644
--- a/libs/hwui/renderthread/CanvasContext.h
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -29,7 +29,6 @@
 #include "RenderNode.h"
 #include "thread/Task.h"
 #include "thread/TaskProcessor.h"
-#include "utils/RingBuffer.h"
 #include "renderthread/RenderTask.h"
 #include "renderthread/RenderThread.h"
 
@@ -163,8 +162,8 @@
     void addRenderNode(RenderNode* node, bool placeFront);
     void removeRenderNode(RenderNode* node);
 
-    void setContentDrawBounds(int left, int top, int right, int bottom) {
-        mContentDrawBounds.set(left, top, right, bottom);
+    void setContentDrawBounds(const Rect& bounds) {
+        mContentDrawBounds = bounds;
     }
 
     RenderState& getRenderState() {
@@ -253,8 +252,6 @@
     std::vector< sp<RenderNode> > mRenderNodes;
 
     FrameInfo* mCurrentFrameInfo = nullptr;
-    // Ring buffer large enough for 2 seconds worth of frames
-    RingBuffer<FrameInfo, 120> mFrames;
     std::string mName;
     JankTracker mJankTracker;
     FrameInfoVisualizer mProfiler;
diff --git a/libs/hwui/renderthread/DrawFrameTask.cpp b/libs/hwui/renderthread/DrawFrameTask.cpp
index 7d641d3..a097272 100644
--- a/libs/hwui/renderthread/DrawFrameTask.cpp
+++ b/libs/hwui/renderthread/DrawFrameTask.cpp
@@ -32,6 +32,7 @@
 DrawFrameTask::DrawFrameTask()
         : mRenderThread(nullptr)
         , mContext(nullptr)
+        , mContentDrawBounds(0, 0, 0, 0)
         , mSyncResult(SyncResult::OK) {
 }
 
@@ -123,6 +124,7 @@
         mLayers[i]->apply();
     }
     mLayers.clear();
+    mContext->setContentDrawBounds(mContentDrawBounds);
     mContext->prepareTree(info, mFrameInfo, mSyncQueued, mTargetNode);
 
     // This is after the prepareTree so that any pending operations
diff --git a/libs/hwui/renderthread/DrawFrameTask.h b/libs/hwui/renderthread/DrawFrameTask.h
index fb48062..83ecb98 100644
--- a/libs/hwui/renderthread/DrawFrameTask.h
+++ b/libs/hwui/renderthread/DrawFrameTask.h
@@ -61,6 +61,9 @@
     virtual ~DrawFrameTask();
 
     void setContext(RenderThread* thread, CanvasContext* context, RenderNode* targetNode);
+    void setContentDrawBounds(int left, int top, int right, int bottom) {
+        mContentDrawBounds.set(left, top, right, bottom);
+    }
 
     void pushLayerUpdate(DeferredLayerUpdater* layer);
     void removeLayerUpdate(DeferredLayerUpdater* layer);
@@ -82,6 +85,7 @@
     RenderThread* mRenderThread;
     CanvasContext* mContext;
     RenderNode* mTargetNode = nullptr;
+    Rect mContentDrawBounds;
 
     /*********************************************
      *  Single frame data
diff --git a/libs/hwui/renderthread/EglManager.cpp b/libs/hwui/renderthread/EglManager.cpp
index 0e676ee..16d7736 100644
--- a/libs/hwui/renderthread/EglManager.cpp
+++ b/libs/hwui/renderthread/EglManager.cpp
@@ -114,7 +114,7 @@
         // An Adreno driver bug is causing rendering problems for SkiaGL with
         // buffer age swap behavior (b/31957043).  To temporarily workaround,
         // we will use preserved swap behavior.
-        if (Properties::useBufferAge && EglExtensions.bufferAge && !Properties::isSkiaEnabled()) {
+        if (Properties::useBufferAge && EglExtensions.bufferAge) {
             mSwapBehavior = SwapBehavior::BufferAge;
         } else {
             mSwapBehavior = SwapBehavior::Preserved;
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp
index 80c2955..9048bd1 100644
--- a/libs/hwui/renderthread/RenderProxy.cpp
+++ b/libs/hwui/renderthread/RenderProxy.cpp
@@ -21,6 +21,7 @@
 #include "Properties.h"
 #include "Readback.h"
 #include "Rect.h"
+#include "pipeline/skia/VectorDrawableAtlas.h"
 #include "renderthread/CanvasContext.h"
 #include "renderthread/EglManager.h"
 #include "renderthread/RenderTask.h"
@@ -427,12 +428,12 @@
     if (args->dumpFlags & DumpFlags::FrameStats) {
         args->context->dumpFrames(args->fd);
     }
+    if (args->dumpFlags & DumpFlags::JankStats) {
+        args->thread->globalProfileData()->dump(args->fd);
+    }
     if (args->dumpFlags & DumpFlags::Reset) {
         args->context->resetFrameStats();
     }
-    if (args->dumpFlags & DumpFlags::JankStats) {
-        args->thread->jankTracker().dump(args->fd);
-    }
     return nullptr;
 }
 
@@ -458,7 +459,7 @@
 
 CREATE_BRIDGE2(frameTimePercentile, RenderThread* thread, int percentile) {
     return reinterpret_cast<void*>(static_cast<uintptr_t>(
-        args->thread->jankTracker().findPercentile(args->percentile)));
+        args->thread->globalProfileData()->findPercentile(args->percentile)));
 }
 
 uint32_t RenderProxy::frameTimePercentile(int p) {
@@ -483,7 +484,7 @@
 }
 
 CREATE_BRIDGE2(setProcessStatsBuffer, RenderThread* thread, int fd) {
-    args->thread->jankTracker().switchStorageToAshmem(args->fd);
+    args->thread->globalProfileData().switchStorageToAshmem(args->fd);
     close(args->fd);
     return nullptr;
 }
@@ -497,7 +498,7 @@
 }
 
 CREATE_BRIDGE1(rotateProcessStatsBuffer, RenderThread* thread) {
-    args->thread->jankTracker().rotateStorage();
+    args->thread->globalProfileData().rotateStorage();
     return nullptr;
 }
 
@@ -550,20 +551,8 @@
     staticPostAndWait(task);
 }
 
-CREATE_BRIDGE5(setContentDrawBounds, CanvasContext* context, int left, int top,
-        int right, int bottom) {
-    args->context->setContentDrawBounds(args->left, args->top, args->right, args->bottom);
-    return nullptr;
-}
-
 void RenderProxy::setContentDrawBounds(int left, int top, int right, int bottom) {
-    SETUP_TASK(setContentDrawBounds);
-    args->context = mContext;
-    args->left = left;
-    args->top = top;
-    args->right = right;
-    args->bottom = bottom;
-    staticPostAndWait(task);
+    mDrawFrameTask.setContentDrawBounds(left, top, right, bottom);
 }
 
 CREATE_BRIDGE1(serializeDisplayListTree, CanvasContext* context) {
@@ -718,6 +707,19 @@
     mRenderThread.queue(task);
 }
 
+CREATE_BRIDGE1(repackVectorDrawableAtlas, RenderThread* thread) {
+    args->thread->cacheManager().acquireVectorDrawableAtlas()->repackIfNeeded(
+            args->thread->getGrContext());
+    return nullptr;
+}
+
+void RenderProxy::repackVectorDrawableAtlas() {
+    RenderThread& thread = RenderThread::getInstance();
+    SETUP_TASK(repackVectorDrawableAtlas);
+    args->thread = &thread;
+    thread.queue(task);
+}
+
 void* RenderProxy::postAndWait(MethodInvokeRenderTask* task) {
     void* retval;
     task->setReturnPtr(&retval);
diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h
index 31f0ce6..06eaebd 100644
--- a/libs/hwui/renderthread/RenderProxy.h
+++ b/libs/hwui/renderthread/RenderProxy.h
@@ -140,6 +140,9 @@
     static void onBitmapDestroyed(uint32_t pixelRefId);
 
     ANDROID_API static void disableVsync();
+
+    static void repackVectorDrawableAtlas();
+
 private:
     RenderThread& mRenderThread;
     CanvasContext* mContext;
diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp
index 13af2c4..72a428f 100644
--- a/libs/hwui/renderthread/RenderThread.cpp
+++ b/libs/hwui/renderthread/RenderThread.cpp
@@ -200,13 +200,12 @@
     initializeDisplayEventReceiver();
     mEglManager = new EglManager(*this);
     mRenderState = new RenderState(*this);
-    mJankTracker = new JankTracker(mDisplayInfo);
     mVkManager = new VulkanManager(*this);
     mCacheManager = new CacheManager(mDisplayInfo);
 }
 
 void RenderThread::dumpGraphicsMemory(int fd) {
-    jankTracker().dump(fd);
+    globalProfileData()->dump(fd);
 
     String8 cachesOutput;
     String8 pipeline;
diff --git a/libs/hwui/renderthread/RenderThread.h b/libs/hwui/renderthread/RenderThread.h
index d984257..bef47b3 100644
--- a/libs/hwui/renderthread/RenderThread.h
+++ b/libs/hwui/renderthread/RenderThread.h
@@ -97,7 +97,7 @@
     TimeLord& timeLord() { return mTimeLord; }
     RenderState& renderState() const { return *mRenderState; }
     EglManager& eglManager() const { return *mEglManager; }
-    JankTracker& jankTracker() { return *mJankTracker; }
+    ProfileDataContainer& globalProfileData() { return mGlobalProfileData; }
     Readback& readback();
 
     const DisplayInfo& mainDisplayInfo() { return mDisplayInfo; }
@@ -160,7 +160,7 @@
     RenderState* mRenderState;
     EglManager* mEglManager;
 
-    JankTracker* mJankTracker = nullptr;
+    ProfileDataContainer mGlobalProfileData;
     Readback* mReadback = nullptr;
 
     sk_sp<GrContext> mGrContext;
diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp
index a745320..2195143 100644
--- a/libs/hwui/renderthread/VulkanManager.cpp
+++ b/libs/hwui/renderthread/VulkanManager.cpp
@@ -22,6 +22,7 @@
 #include "renderstate/RenderState.h"
 #include "utils/FatVector.h"
 
+#include <GrBackendSurface.h>
 #include <GrContext.h>
 #include <GrTypes.h>
 #include <vk/GrVkTypes.h>
@@ -297,13 +298,9 @@
 
     SkSurfaceProps props(0, kUnknown_SkPixelGeometry);
 
-    bool wantSRGB = VK_FORMAT_R8G8B8A8_SRGB == format;
-    GrPixelConfig config = wantSRGB ? kSRGBA_8888_GrPixelConfig : kRGBA_8888_GrPixelConfig;
-
     // set up initial image layouts and create surfaces
     surface->mImageInfos = new VulkanSurface::ImageInfo[surface->mImageCount];
     for (uint32_t i = 0; i < surface->mImageCount; ++i) {
-        GrBackendRenderTargetDesc desc;
         GrVkImageInfo info;
         info.fImage = surface->mImages[i];
         info.fAlloc = { VK_NULL_HANDLE, 0, 0, 0 };
@@ -312,17 +309,11 @@
         info.fFormat = format;
         info.fLevelCount = 1;
 
-        desc.fWidth = extent.width;
-        desc.fHeight = extent.height;
-        desc.fConfig = config;
-        desc.fOrigin = kTopLeft_GrSurfaceOrigin;
-        desc.fSampleCnt = 0;
-        desc.fStencilBits = 0;
-        desc.fRenderTargetHandle = (GrBackendObject) &info;
+        GrBackendRenderTarget backendRT(extent.width, extent.height, 0, 0, info);
 
         VulkanSurface::ImageInfo& imageInfo = surface->mImageInfos[i];
         imageInfo.mSurface = SkSurface::MakeFromBackendRenderTarget(mRenderThread.getGrContext(),
-                desc, &props);
+                backendRT, kTopLeft_GrSurfaceOrigin, nullptr, &props);
     }
 
     SkASSERT(mCommandPool != VK_NULL_HANDLE);
diff --git a/libs/hwui/service/GraphicsStatsService.cpp b/libs/hwui/service/GraphicsStatsService.cpp
index 87eaa6a..afb1193 100644
--- a/libs/hwui/service/GraphicsStatsService.cpp
+++ b/libs/hwui/service/GraphicsStatsService.cpp
@@ -38,11 +38,9 @@
 constexpr int32_t sHeaderSize = 4;
 static_assert(sizeof(sCurrentFileVersion) == sHeaderSize, "Header size is wrong");
 
-constexpr int sHistogramSize =
-        std::tuple_size<decltype(ProfileData::frameCounts)>::value +
-        std::tuple_size<decltype(ProfileData::slowFrameCounts)>::value;
+constexpr int sHistogramSize = ProfileData::HistogramSize();
 
-static void mergeProfileDataIntoProto(service::GraphicsStatsProto* proto,
+static bool mergeProfileDataIntoProto(service::GraphicsStatsProto* proto,
         const std::string& package, int versionCode, int64_t startTime, int64_t endTime,
         const ProfileData* data);
 static void dumpAsTextToFd(service::GraphicsStatsProto* proto, int outFd);
@@ -161,7 +159,7 @@
     return success;
 }
 
-void mergeProfileDataIntoProto(service::GraphicsStatsProto* proto, const std::string& package,
+bool mergeProfileDataIntoProto(service::GraphicsStatsProto* proto, const std::string& package,
         int versionCode, int64_t startTime, int64_t endTime, const ProfileData* data) {
     if (proto->stats_start() == 0 || proto->stats_start() > startTime) {
         proto->set_stats_start(startTime);
@@ -172,54 +170,49 @@
     proto->set_package_name(package);
     proto->set_version_code(versionCode);
     auto summary = proto->mutable_summary();
-    summary->set_total_frames(summary->total_frames() + data->totalFrameCount);
-    summary->set_janky_frames(summary->janky_frames() + data->jankFrameCount);
+    summary->set_total_frames(summary->total_frames() + data->totalFrameCount());
+    summary->set_janky_frames(summary->janky_frames() + data->jankFrameCount());
     summary->set_missed_vsync_count(
-            summary->missed_vsync_count() + data->jankTypeCounts[kMissedVsync]);
+            summary->missed_vsync_count() + data->jankTypeCount(kMissedVsync));
     summary->set_high_input_latency_count(
-            summary->high_input_latency_count() + data->jankTypeCounts[kHighInputLatency]);
+            summary->high_input_latency_count() + data->jankTypeCount(kHighInputLatency));
     summary->set_slow_ui_thread_count(
-            summary->slow_ui_thread_count() + data->jankTypeCounts[kSlowUI]);
+            summary->slow_ui_thread_count() + data->jankTypeCount(kSlowUI));
     summary->set_slow_bitmap_upload_count(
-            summary->slow_bitmap_upload_count() + data->jankTypeCounts[kSlowSync]);
+            summary->slow_bitmap_upload_count() + data->jankTypeCount(kSlowSync));
     summary->set_slow_draw_count(
-            summary->slow_draw_count() + data->jankTypeCounts[kSlowRT]);
+            summary->slow_draw_count() + data->jankTypeCount(kSlowRT));
 
     bool creatingHistogram = false;
     if (proto->histogram_size() == 0) {
         proto->mutable_histogram()->Reserve(sHistogramSize);
         creatingHistogram = true;
     } else if (proto->histogram_size() != sHistogramSize) {
-        LOG_ALWAYS_FATAL("Histogram size mismatch, proto is %d expected %d",
+        ALOGE("Histogram size mismatch, proto is %d expected %d",
                 proto->histogram_size(), sHistogramSize);
+        return false;
     }
-    for (size_t i = 0; i < data->frameCounts.size(); i++) {
+    int index = 0;
+    bool hitMergeError = false;
+    data->histogramForEach([&](ProfileData::HistogramEntry entry) {
+        if (hitMergeError) return;
+
         service::GraphicsStatsHistogramBucketProto* bucket;
-        int32_t renderTime = JankTracker::frameTimeForFrameCountIndex(i);
         if (creatingHistogram) {
             bucket = proto->add_histogram();
-            bucket->set_render_millis(renderTime);
+            bucket->set_render_millis(entry.renderTimeMs);
         } else {
-            bucket = proto->mutable_histogram(i);
-            LOG_ALWAYS_FATAL_IF(bucket->render_millis() != renderTime,
-                    "Frame time mistmatch %d vs. %d", bucket->render_millis(), renderTime);
+            bucket = proto->mutable_histogram(index);
+            if (bucket->render_millis() != static_cast<int32_t>(entry.renderTimeMs)) {
+                ALOGW("Frame time mistmatch %d vs. %u", bucket->render_millis(), entry.renderTimeMs);
+                hitMergeError = true;
+                return;
+            }
         }
-        bucket->set_frame_count(bucket->frame_count() + data->frameCounts[i]);
-    }
-    for (size_t i = 0; i < data->slowFrameCounts.size(); i++) {
-        service::GraphicsStatsHistogramBucketProto* bucket;
-        int32_t renderTime = JankTracker::frameTimeForSlowFrameCountIndex(i);
-        if (creatingHistogram) {
-            bucket = proto->add_histogram();
-            bucket->set_render_millis(renderTime);
-        } else {
-            constexpr int offset = std::tuple_size<decltype(ProfileData::frameCounts)>::value;
-            bucket = proto->mutable_histogram(offset + i);
-            LOG_ALWAYS_FATAL_IF(bucket->render_millis() != renderTime,
-                    "Frame time mistmatch %d vs. %d", bucket->render_millis(), renderTime);
-        }
-        bucket->set_frame_count(bucket->frame_count() + data->slowFrameCounts[i]);
-    }
+        bucket->set_frame_count(bucket->frame_count() + entry.frameCount);
+        index++;
+    });
+    return !hitMergeError;
 }
 
 static int32_t findPercentile(service::GraphicsStatsProto* proto, int percentile) {
@@ -236,9 +229,11 @@
 
 void dumpAsTextToFd(service::GraphicsStatsProto* proto, int fd) {
     // This isn't a full validation, just enough that we can deref at will
-    LOG_ALWAYS_FATAL_IF(proto->package_name().empty()
-            || !proto->has_summary(), "package_name() '%s' summary %d",
-            proto->package_name().c_str(), proto->has_summary());
+    if (proto->package_name().empty() || !proto->has_summary()) {
+        ALOGW("Skipping dump, invalid package_name() '%s' or summary %d",
+                proto->package_name().c_str(), proto->has_summary());
+        return;
+    }
     dprintf(fd, "\nPackage: %s", proto->package_name().c_str());
     dprintf(fd, "\nVersion: %d", proto->version_code());
     dprintf(fd, "\nStats since: %lldns", proto->stats_start());
@@ -269,14 +264,20 @@
     if (!parseFromFile(path, &statsProto)) {
         statsProto.Clear();
     }
-    mergeProfileDataIntoProto(&statsProto, package, versionCode, startTime, endTime, data);
+    if (!mergeProfileDataIntoProto(&statsProto, package, versionCode, startTime, endTime, data)) {
+        return;
+    }
     // Although we might not have read any data from the file, merging the existing data
     // should always fully-initialize the proto
-    LOG_ALWAYS_FATAL_IF(!statsProto.IsInitialized(), "%s",
-            statsProto.InitializationErrorString().c_str());
-    LOG_ALWAYS_FATAL_IF(statsProto.package_name().empty()
-            || !statsProto.has_summary(), "package_name() '%s' summary %d",
-            statsProto.package_name().c_str(), statsProto.has_summary());
+    if (!statsProto.IsInitialized()) {
+        ALOGE("proto initialization error %s", statsProto.InitializationErrorString().c_str());
+        return;
+    }
+    if (statsProto.package_name().empty() || !statsProto.has_summary()) {
+        ALOGE("missing package_name() '%s' summary %d",
+                statsProto.package_name().c_str(), statsProto.has_summary());
+        return;
+    }
     int outFd = open(path.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0660);
     if (outFd <= 0) {
         int err = errno;
@@ -327,8 +328,9 @@
     if (!path.empty() && !parseFromFile(path, &statsProto)) {
         statsProto.Clear();
     }
-    if (data) {
-        mergeProfileDataIntoProto(&statsProto, package, versionCode, startTime, endTime, data);
+    if (data && !mergeProfileDataIntoProto(
+            &statsProto, package, versionCode, startTime, endTime, data)) {
+        return;
     }
     if (!statsProto.IsInitialized()) {
         ALOGW("Failed to load profile data from path '%s' and data %p",
diff --git a/libs/hwui/tests/common/BitmapAllocationTestUtils.h b/libs/hwui/tests/common/BitmapAllocationTestUtils.h
index 4892179..2988979 100644
--- a/libs/hwui/tests/common/BitmapAllocationTestUtils.h
+++ b/libs/hwui/tests/common/BitmapAllocationTestUtils.h
@@ -41,7 +41,7 @@
         SkBitmap skBitmap;
         SkImageInfo info = SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType);
         skBitmap.setInfo(info);
-        sk_sp<Bitmap> heapBitmap(Bitmap::allocateHeapBitmap(&skBitmap, nullptr));
+        sk_sp<Bitmap> heapBitmap(Bitmap::allocateHeapBitmap(&skBitmap));
         setup(skBitmap);
         return Bitmap::allocateHardwareBitmap(skBitmap);
     }
@@ -73,4 +73,4 @@
 
 } // namespace test
 } // namespace uirenderer
-} // namespace android
\ No newline at end of file
+} // namespace android
diff --git a/libs/hwui/tests/common/LeakChecker.cpp b/libs/hwui/tests/common/LeakChecker.cpp
index d935382..fe38ec9 100644
--- a/libs/hwui/tests/common/LeakChecker.cpp
+++ b/libs/hwui/tests/common/LeakChecker.cpp
@@ -58,9 +58,8 @@
     if (merged.num_leaks) {
         cout << endl << "Leaked memory!" << endl;
         if (!merged.leaks[0].backtrace.num_frames) {
-            cout << "Re-run with 'setprop libc.debug.malloc.program hwui_unit_test'"
-                    << endl << "and 'setprop libc.debug.malloc.options backtrace=8'"
-                    << " to get backtraces" << endl;
+            cout << "Re-run with 'export LIBC_DEBUG_MALLOC_OPTIONS=backtrace' to get backtraces"
+                    << endl;
         }
         cout << merged.ToString(false);
     }
diff --git a/libs/hwui/tests/common/TestUtils.h b/libs/hwui/tests/common/TestUtils.h
index 98d5fb3..f293631 100644
--- a/libs/hwui/tests/common/TestUtils.h
+++ b/libs/hwui/tests/common/TestUtils.h
@@ -189,7 +189,7 @@
     static sk_sp<Bitmap> createBitmap(int width, int height, SkBitmap* outBitmap) {
         SkImageInfo info = SkImageInfo::Make(width, height, kN32_SkColorType, kPremul_SkAlphaType);
         outBitmap->setInfo(info);
-        return Bitmap::allocateHeapBitmap(outBitmap, nullptr);
+        return Bitmap::allocateHeapBitmap(outBitmap);
     }
 
     static sp<DeferredLayerUpdater> createTextureLayerUpdater(
diff --git a/libs/hwui/tests/common/scenes/TvApp.cpp b/libs/hwui/tests/common/scenes/TvApp.cpp
new file mode 100644
index 0000000..04fc2d4
--- /dev/null
+++ b/libs/hwui/tests/common/scenes/TvApp.cpp
@@ -0,0 +1,274 @@
+/*
+ * 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.
+ */
+
+#include "TestSceneBase.h"
+#include "tests/common/BitmapAllocationTestUtils.h"
+#include "SkBlendMode.h"
+
+class TvApp;
+class TvAppNoRoundedCorner;
+class TvAppColorFilter;
+class TvAppNoRoundedCornerColorFilter;
+
+static bool _TvApp(
+        BitmapAllocationTestUtils::registerBitmapAllocationScene<TvApp>(
+                "tvapp", "A dense grid of cards:"
+                "with rounded corner, using overlay RenderNode for dimming."));
+
+static bool _TvAppNoRoundedCorner(
+        BitmapAllocationTestUtils::registerBitmapAllocationScene<TvAppNoRoundedCorner>(
+                "tvapp_norc", "A dense grid of cards:"
+                "no rounded corner, using overlay RenderNode for dimming"));
+
+static bool _TvAppColorFilter(
+        BitmapAllocationTestUtils::registerBitmapAllocationScene<TvAppColorFilter>(
+                "tvapp_cf", "A dense grid of cards:"
+                "with rounded corner, using ColorFilter for dimming"));
+
+static bool _TvAppNoRoundedCornerColorFilter(
+        BitmapAllocationTestUtils::registerBitmapAllocationScene<TvAppNoRoundedCornerColorFilter>(
+                "tvapp_norc_cf", "A dense grid of cards:"
+                "no rounded corner, using ColorFilter for dimming"));
+
+class TvApp : public TestScene {
+public:
+    TvApp(BitmapAllocationTestUtils::BitmapAllocator allocator)
+        : TestScene()
+        , mAllocator(allocator) { }
+
+    sp<RenderNode> mBg;
+    std::vector<sp<RenderNode>> mCards;
+    std::vector<sp<RenderNode>> mInfoAreas;
+    std::vector<sp<RenderNode>> mImages;
+    std::vector<sp<RenderNode>> mOverlays;
+    std::vector<sk_sp<Bitmap>> mCachedBitmaps;
+    BitmapAllocationTestUtils::BitmapAllocator mAllocator;
+    sk_sp<Bitmap> mSingleBitmap;
+    int mSeed = 0;
+    int mSeed2 = 0;
+
+    void createContent(int width, int height, Canvas& canvas) override {
+        mBg = createBitmapNode(canvas, 0xFF9C27B0, 0, 0, width, height);
+        canvas.drawRenderNode(mBg.get());
+
+        canvas.insertReorderBarrier(true);
+        mSingleBitmap = mAllocator(dp(160), dp(120), kRGBA_8888_SkColorType,
+                 [](SkBitmap& skBitmap) {
+             skBitmap.eraseColor(0xFF0000FF);
+        });
+
+        for (int y = dp(18) - dp(178); y < height - dp(18); y += dp(178)) {
+            bool isFirstCard = true;
+            for (int x = dp(18); x < width - dp(18); x += dp(178)) {
+                sp<RenderNode> card = createCard(x, y, dp(160), dp(160), isFirstCard);
+                isFirstCard = false;
+                canvas.drawRenderNode(card.get());
+                mCards.push_back(card);
+            }
+        }
+        canvas.insertReorderBarrier(false);
+    }
+
+    void doFrame(int frameNr) override {
+        size_t numCards = mCards.size();
+        for (size_t ci = 0; ci < numCards; ci++) {
+            updateCard(ci, frameNr);
+        }
+    }
+
+private:
+    sp<RenderNode> createBitmapNode(Canvas& canvas, SkColor color, int left, int top,
+            int width, int height) {
+        return TestUtils::createNode(left, top, left + width , top + height,
+                [this, width, height, color](RenderProperties& props, Canvas& canvas) {
+            sk_sp<Bitmap> bitmap = mAllocator(width, height, kRGBA_8888_SkColorType,
+                    [color](SkBitmap& skBitmap) {
+                 skBitmap.eraseColor(color);
+            });
+            canvas.drawBitmap(*bitmap, 0, 0, nullptr);
+        });
+    }
+
+    sp<RenderNode> createSharedBitmapNode(Canvas& canvas, int left, int top,
+            int width, int height, sk_sp<Bitmap>bitmap) {
+        return TestUtils::createNode(left, top, left + width , top + height,
+                [bitmap](RenderProperties& props, Canvas& canvas) {
+            canvas.drawBitmap(*bitmap, 0, 0, nullptr);
+        });
+    }
+
+    sp<RenderNode> createInfoNode(Canvas& canvas, int left, int top,
+            int width, int height, const char* text, const char* text2) {
+        return TestUtils::createNode(left, top, left + width , top + height,
+                [text, text2](RenderProperties& props, Canvas& canvas) {
+            canvas.drawColor(0xFFFFEEEE, SkBlendMode::kSrcOver);
+
+            SkPaint paint;
+            paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
+            paint.setAntiAlias(true);
+            paint.setTextSize(24);
+
+            paint.setColor(Color::Black);
+            TestUtils::drawUtf8ToCanvas(&canvas, text, paint, 10, 30);
+            paint.setTextSize(20);
+            TestUtils::drawUtf8ToCanvas(&canvas, text2, paint, 10, 54);
+
+        });
+    }
+
+    sp<RenderNode> createColorNode(Canvas& canvas, int left, int top,
+            int width, int height, SkColor color) {
+        return TestUtils::createNode(left, top, left + width , top + height,
+                [color](RenderProperties& props, Canvas& canvas) {
+            canvas.drawColor(color, SkBlendMode::kSrcOver);
+        });
+    }
+
+    virtual bool useSingleBitmap() {
+        return false;
+    }
+
+    virtual float roundedCornerRadius() {
+        return dp(2);
+    }
+
+    // when true, use overlay RenderNode for dimming, otherwise apply a ColorFilter to dim image
+    virtual bool useOverlay() {
+        return true;
+    }
+
+    sp<RenderNode> createCard(int x, int y, int width, int height, bool selected) {
+        return TestUtils::createNode(x, y, x + width, y + height,
+                [width, height, selected, this](RenderProperties& props, Canvas& canvas) {
+            if (selected) {
+                props.setElevation(dp(16));
+                props.setScaleX(1.2);
+                props.setScaleY(1.2);
+            }
+            props.mutableOutline().setRoundRect(0, 0, width, height, roundedCornerRadius(), 1);
+            props.mutableOutline().setShouldClip(true);
+
+            sk_sp<Bitmap> bitmap = useSingleBitmap() ? mSingleBitmap
+                 : mAllocator(width, dp(120), kRGBA_8888_SkColorType, [this](SkBitmap& skBitmap) {
+                       skBitmap.eraseColor(0xFF000000 | ((mSeed << 3) & 0xFF));
+                   });
+            sp<RenderNode> cardImage = createSharedBitmapNode(canvas, 0, 0, width, dp(120),
+                    bitmap);
+            canvas.drawRenderNode(cardImage.get());
+            mCachedBitmaps.push_back(bitmap);
+            mImages.push_back(cardImage);
+
+            char buffer[128];
+            sprintf(buffer, "Video %d-%d", mSeed, mSeed + 1);
+            mSeed++;
+            char buffer2[128];
+            sprintf(buffer2, "Studio %d", mSeed2++);
+            sp<RenderNode> infoArea = createInfoNode(canvas, 0, dp(120), width, height, buffer, buffer2);
+            canvas.drawRenderNode(infoArea.get());
+            mInfoAreas.push_back(infoArea);
+
+            if (useOverlay()) {
+                sp<RenderNode> overlayColor = createColorNode(canvas, 0, 0, width, height, 0x00000000);
+                canvas.drawRenderNode(overlayColor.get());
+                mOverlays.push_back(overlayColor);
+            }
+        });
+    }
+
+    void updateCard(int ci, int curFrame) {
+        // updating card's translation Y
+        sp<RenderNode> card = mCards[ci];
+        card->setPropertyFieldsDirty(RenderNode::Y);
+        card->mutateStagingProperties().setTranslationY(curFrame % 150);
+
+        // re-recording card's canvas, not necessary but to add some burden to CPU
+        std::unique_ptr<Canvas> cardcanvas(Canvas::create_recording_canvas(
+                card->stagingProperties().getWidth(),
+                card->stagingProperties().getHeight()));
+        sp<RenderNode> image = mImages[ci];
+        sp<RenderNode> infoArea = mInfoAreas[ci];
+        cardcanvas->drawRenderNode(infoArea.get());
+
+        if (useOverlay()) {
+             cardcanvas->drawRenderNode(image.get());
+            // re-recording card overlay's canvas, animating overlay color alpha
+            sp<RenderNode> overlay = mOverlays[ci];
+            std::unique_ptr<Canvas> canvas(Canvas::create_recording_canvas(
+                    overlay->stagingProperties().getWidth(),
+                    overlay->stagingProperties().getHeight()));
+            canvas->drawColor((curFrame % 150) << 24, SkBlendMode::kSrcOver);
+            overlay->setStagingDisplayList(canvas->finishRecording());
+            cardcanvas->drawRenderNode(overlay.get());
+        } else {
+            // re-recording image node's canvas, animating ColorFilter
+            std::unique_ptr<Canvas> canvas(Canvas::create_recording_canvas(
+                    image->stagingProperties().getWidth(),
+                    image->stagingProperties().getHeight()));
+            SkPaint paint;
+            sk_sp<SkColorFilter> filter(SkColorFilter::MakeModeFilter((curFrame % 150) << 24,
+                    SkBlendMode::kSrcATop));
+            paint.setColorFilter(filter);
+            sk_sp<Bitmap> bitmap = mCachedBitmaps[ci];
+            canvas->drawBitmap(*bitmap, 0, 0, &paint);
+            image->setStagingDisplayList(canvas->finishRecording());
+            cardcanvas->drawRenderNode(image.get());
+        }
+
+        card->setStagingDisplayList(cardcanvas->finishRecording());
+    }
+};
+
+class TvAppNoRoundedCorner : public TvApp {
+public:
+    TvAppNoRoundedCorner(BitmapAllocationTestUtils::BitmapAllocator allocator)
+        : TvApp(allocator) { }
+
+private:
+
+    virtual float roundedCornerRadius() override {
+        return dp(0);
+    }
+};
+
+class TvAppColorFilter : public TvApp {
+public:
+    TvAppColorFilter(BitmapAllocationTestUtils::BitmapAllocator allocator)
+        : TvApp(allocator) { }
+
+private:
+
+    virtual bool useOverlay() override {
+        return false;
+    }
+};
+
+class TvAppNoRoundedCornerColorFilter : public TvApp {
+public:
+    TvAppNoRoundedCornerColorFilter(BitmapAllocationTestUtils::BitmapAllocator allocator)
+        : TvApp(allocator) { }
+
+private:
+
+    virtual float roundedCornerRadius() override {
+        return dp(0);
+    }
+
+    virtual bool useOverlay() override {
+        return false;
+    }
+};
+
+
diff --git a/libs/hwui/tests/unit/BakedOpRendererTests.cpp b/libs/hwui/tests/unit/BakedOpRendererTests.cpp
index 603599c..38e106a 100644
--- a/libs/hwui/tests/unit/BakedOpRendererTests.cpp
+++ b/libs/hwui/tests/unit/BakedOpRendererTests.cpp
@@ -17,6 +17,7 @@
 #include <gtest/gtest.h>
 
 #include <BakedOpRenderer.h>
+#include <GlopBuilder.h>
 #include <tests/common/TestUtils.h>
 
 using namespace android::uirenderer;
@@ -53,3 +54,53 @@
         renderer.endLayer();
     }
 }
+
+static void drawFirstOp(RenderState& renderState, int color, SkBlendMode mode) {
+    BakedOpRenderer renderer(Caches::getInstance(), renderState, true, false, sLightInfo);
+
+    renderer.startFrame(100, 100, Rect(100, 100));
+    SkPaint paint;
+    paint.setColor(color);
+    paint.setBlendMode(mode);
+
+    Rect dest(0, 0, 100, 100);
+    Glop glop;
+    GlopBuilder(renderState, Caches::getInstance(), &glop)
+            .setRoundRectClipState(nullptr)
+            .setMeshUnitQuad()
+            .setFillPaint(paint, 1.0f)
+            .setTransform(Matrix4::identity(), TransformFlags::None)
+            .setModelViewMapUnitToRectSnap(dest)
+            .build();
+    renderer.renderGlop(nullptr, nullptr, glop);
+    renderer.endFrame(Rect(100, 100));
+}
+
+static void verifyBlend(RenderState& renderState, GLenum expectedSrc, GLenum expectedDst) {
+    EXPECT_TRUE(renderState.blend().getEnabled());
+    GLenum src;
+    GLenum dst;
+    renderState.blend().getFactors(&src, &dst);
+    EXPECT_EQ(expectedSrc, src);
+    EXPECT_EQ(expectedDst, dst);
+}
+
+static void verifyBlendDisabled(RenderState& renderState) {
+    EXPECT_FALSE(renderState.blend().getEnabled());
+}
+
+RENDERTHREAD_OPENGL_PIPELINE_TEST(BakedOpRenderer, firstDrawBlend_clear) {
+    // initialize blend state to nonsense value
+    renderThread.renderState().blend().setFactors(GL_ONE, GL_ONE);
+
+    drawFirstOp(renderThread.renderState(), 0xfeff0000, SkBlendMode::kClear);
+    verifyBlend(renderThread.renderState(), GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
+}
+
+RENDERTHREAD_OPENGL_PIPELINE_TEST(BakedOpRenderer, firstDrawBlend_srcover) {
+    // initialize blend state to nonsense value
+    renderThread.renderState().blend().setFactors(GL_ONE, GL_ONE);
+
+    drawFirstOp(renderThread.renderState(), 0xfeff0000, SkBlendMode::kSrcOver);
+    verifyBlendDisabled(renderThread.renderState());
+}
diff --git a/libs/hwui/tests/unit/BitmapTests.cpp b/libs/hwui/tests/unit/BitmapTests.cpp
deleted file mode 100644
index ed689bd..0000000
--- a/libs/hwui/tests/unit/BitmapTests.cpp
+++ /dev/null
@@ -1,43 +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.
- */
-
-#include <gtest/gtest.h>
-
-#include "hwui/Bitmap.h"
-
-#include <SkBitmap.h>
-#include <SkColorTable.h>
-#include <SkImageInfo.h>
-
-#include <tests/common/TestUtils.h>
-
-using namespace android;
-using namespace android::uirenderer;
-
-TEST(Bitmap, colorTableRefCounting) {
-    const SkPMColor c[] = { SkPackARGB32(0x80, 0x80, 0, 0) };
-    sk_sp<SkColorTable> ctable = SkColorTable::Make(c, SK_ARRAY_COUNT(c));
-
-    SkBitmap* bm = new SkBitmap();
-    bm->allocPixels(SkImageInfo::Make(1, 1, kIndex_8_SkColorType, kPremul_SkAlphaType),
-            ctable);
-    sk_sp<Bitmap> bitmap = Bitmap::allocateHeapBitmap(bm, ctable);
-    EXPECT_FALSE(ctable->unique());
-    delete bm;
-    bitmap.reset();
-    EXPECT_TRUE(ctable->unique());
-}
-
diff --git a/libs/hwui/tests/unit/GraphicsStatsServiceTests.cpp b/libs/hwui/tests/unit/GraphicsStatsServiceTests.cpp
index f6f7337..fda3a79 100644
--- a/libs/hwui/tests/unit/GraphicsStatsServiceTests.cpp
+++ b/libs/hwui/tests/unit/GraphicsStatsServiceTests.cpp
@@ -61,17 +61,17 @@
 TEST(GraphicsStats, saveLoad) {
     std::string path = findRootPath() + "/test_saveLoad";
     std::string packageName = "com.test.saveLoad";
-    ProfileData mockData;
-    mockData.jankFrameCount = 20;
-    mockData.totalFrameCount = 100;
-    mockData.statStartTime = 10000;
+    MockProfileData mockData;
+    mockData.editJankFrameCount() = 20;
+    mockData.editTotalFrameCount() = 100;
+    mockData.editStatStartTime() = 10000;
     // Fill with patterned data we can recognize but which won't map to a
     // memset or basic for iteration count
-    for (size_t i = 0; i < mockData.frameCounts.size(); i++) {
-        mockData.frameCounts[i] = ((i % 10) + 1) * 2;
+    for (size_t i = 0; i < mockData.editFrameCounts().size(); i++) {
+        mockData.editFrameCounts()[i] = ((i % 10) + 1) * 2;
     }
-    for (size_t i = 0; i < mockData.slowFrameCounts.size(); i++) {
-        mockData.slowFrameCounts[i] = (i % 5) + 1;
+    for (size_t i = 0; i < mockData.editSlowFrameCounts().size(); i++) {
+        mockData.editSlowFrameCounts()[i] = (i % 5) + 1;
     }
     GraphicsStatsService::saveBuffer(path, packageName, 5, 3000, 7000, &mockData);
     service::GraphicsStatsProto loadedProto;
@@ -87,17 +87,17 @@
     ASSERT_TRUE(loadedProto.has_summary());
     EXPECT_EQ(20, loadedProto.summary().janky_frames());
     EXPECT_EQ(100, loadedProto.summary().total_frames());
-    EXPECT_EQ(mockData.frameCounts.size() + mockData.slowFrameCounts.size(),
+    EXPECT_EQ(mockData.editFrameCounts().size() + mockData.editSlowFrameCounts().size(),
             (size_t) loadedProto.histogram_size());
     for (size_t i = 0; i < (size_t) loadedProto.histogram_size(); i++) {
         int expectedCount, expectedBucket;
-        if (i < mockData.frameCounts.size()) {
+        if (i < mockData.editFrameCounts().size()) {
             expectedCount = ((i % 10) + 1) * 2;
-            expectedBucket = JankTracker::frameTimeForFrameCountIndex(i);
+            expectedBucket = ProfileData::frameTimeForFrameCountIndex(i);
         } else {
-            int temp = i - mockData.frameCounts.size();
+            int temp = i - mockData.editFrameCounts().size();
             expectedCount = (temp % 5) + 1;
-            expectedBucket = JankTracker::frameTimeForSlowFrameCountIndex(temp);
+            expectedBucket = ProfileData::frameTimeForSlowFrameCountIndex(temp);
         }
         EXPECT_EQ(expectedCount, loadedProto.histogram().Get(i).frame_count());
         EXPECT_EQ(expectedBucket, loadedProto.histogram().Get(i).render_millis());
@@ -107,26 +107,26 @@
 TEST(GraphicsStats, merge) {
     std::string path = findRootPath() + "/test_merge";
     std::string packageName = "com.test.merge";
-    ProfileData mockData;
-    mockData.jankFrameCount = 20;
-    mockData.totalFrameCount = 100;
-    mockData.statStartTime = 10000;
+    MockProfileData mockData;
+    mockData.editJankFrameCount() = 20;
+    mockData.editTotalFrameCount() = 100;
+    mockData.editStatStartTime() = 10000;
     // Fill with patterned data we can recognize but which won't map to a
     // memset or basic for iteration count
-    for (size_t i = 0; i < mockData.frameCounts.size(); i++) {
-        mockData.frameCounts[i] = ((i % 10) + 1) * 2;
+    for (size_t i = 0; i < mockData.editFrameCounts().size(); i++) {
+        mockData.editFrameCounts()[i] = ((i % 10) + 1) * 2;
     }
-    for (size_t i = 0; i < mockData.slowFrameCounts.size(); i++) {
-        mockData.slowFrameCounts[i] = (i % 5) + 1;
+    for (size_t i = 0; i < mockData.editSlowFrameCounts().size(); i++) {
+        mockData.editSlowFrameCounts()[i] = (i % 5) + 1;
     }
     GraphicsStatsService::saveBuffer(path, packageName, 5, 3000, 7000, &mockData);
-    mockData.jankFrameCount = 50;
-    mockData.totalFrameCount = 500;
-    for (size_t i = 0; i < mockData.frameCounts.size(); i++) {
-        mockData.frameCounts[i] = (i % 5) + 1;
+    mockData.editJankFrameCount() = 50;
+    mockData.editTotalFrameCount() = 500;
+    for (size_t i = 0; i < mockData.editFrameCounts().size(); i++) {
+        mockData.editFrameCounts()[i] = (i % 5) + 1;
     }
-    for (size_t i = 0; i < mockData.slowFrameCounts.size(); i++) {
-        mockData.slowFrameCounts[i] = ((i % 10) + 1) * 2;
+    for (size_t i = 0; i < mockData.editSlowFrameCounts().size(); i++) {
+        mockData.editSlowFrameCounts()[i] = ((i % 10) + 1) * 2;
     }
     GraphicsStatsService::saveBuffer(path, packageName, 5, 7050, 10000, &mockData);
 
@@ -143,19 +143,19 @@
     ASSERT_TRUE(loadedProto.has_summary());
     EXPECT_EQ(20 + 50, loadedProto.summary().janky_frames());
     EXPECT_EQ(100 + 500, loadedProto.summary().total_frames());
-    EXPECT_EQ(mockData.frameCounts.size() + mockData.slowFrameCounts.size(),
+    EXPECT_EQ(mockData.editFrameCounts().size() + mockData.editSlowFrameCounts().size(),
             (size_t) loadedProto.histogram_size());
     for (size_t i = 0; i < (size_t) loadedProto.histogram_size(); i++) {
         int expectedCount, expectedBucket;
-        if (i < mockData.frameCounts.size()) {
+        if (i < mockData.editFrameCounts().size()) {
             expectedCount = ((i % 10) + 1) * 2;
             expectedCount += (i % 5) + 1;
-            expectedBucket = JankTracker::frameTimeForFrameCountIndex(i);
+            expectedBucket = ProfileData::frameTimeForFrameCountIndex(i);
         } else {
-            int temp = i - mockData.frameCounts.size();
+            int temp = i - mockData.editFrameCounts().size();
             expectedCount = (temp % 5) + 1;
             expectedCount += ((temp % 10) + 1) * 2;
-            expectedBucket = JankTracker::frameTimeForSlowFrameCountIndex(temp);
+            expectedBucket = ProfileData::frameTimeForSlowFrameCountIndex(temp);
         }
         EXPECT_EQ(expectedCount, loadedProto.histogram().Get(i).frame_count());
         EXPECT_EQ(expectedBucket, loadedProto.histogram().Get(i).render_millis());
diff --git a/libs/hwui/tests/unit/OffscreenBufferPoolTests.cpp b/libs/hwui/tests/unit/OffscreenBufferPoolTests.cpp
index 919852f..308fef3 100644
--- a/libs/hwui/tests/unit/OffscreenBufferPoolTests.cpp
+++ b/libs/hwui/tests/unit/OffscreenBufferPoolTests.cpp
@@ -74,8 +74,8 @@
     OffscreenBufferPool pool;
     EXPECT_EQ(0u, pool.getCount()) << "pool must be created empty";
     EXPECT_EQ(0u, pool.getSize()) << "pool must be created empty";
-    EXPECT_EQ((uint32_t) Properties::layerPoolSize, pool.getMaxSize())
-            << "pool must read size from Properties";
+    // TODO: Does this really make sense as a test?
+    EXPECT_EQ(DeviceInfo::multiplyByResolution(4 * 4), pool.getMaxSize());
 }
 
 RENDERTHREAD_OPENGL_PIPELINE_TEST(OffscreenBufferPool, getPutClear) {
diff --git a/libs/hwui/tests/unit/SkiaBehaviorTests.cpp b/libs/hwui/tests/unit/SkiaBehaviorTests.cpp
index a3d5079..85b12ba 100644
--- a/libs/hwui/tests/unit/SkiaBehaviorTests.cpp
+++ b/libs/hwui/tests/unit/SkiaBehaviorTests.cpp
@@ -51,8 +51,6 @@
     SkShader::TileMode xy[2];
     ASSERT_TRUE(s->isABitmap(&bitmap, nullptr, xy))
         << "1x1 bitmap shader must query as bitmap shader";
-    EXPECT_EQ(SkShader::kClamp_TileMode, xy[0]);
-    EXPECT_EQ(SkShader::kRepeat_TileMode, xy[1]);
     EXPECT_EQ(origBitmap.pixelRef(), bitmap.pixelRef());
 }
 
diff --git a/libs/hwui/tests/unit/VectorDrawableAtlasTests.cpp b/libs/hwui/tests/unit/VectorDrawableAtlasTests.cpp
new file mode 100644
index 0000000..17f8176
--- /dev/null
+++ b/libs/hwui/tests/unit/VectorDrawableAtlasTests.cpp
@@ -0,0 +1,164 @@
+/*
+ * 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.
+ */
+
+#include <gtest/gtest.h>
+
+#include "tests/common/TestUtils.h"
+#include <GrRectanizer.h>
+#include "pipeline/skia/VectorDrawableAtlas.h"
+
+using namespace android;
+using namespace android::uirenderer;
+using namespace android::uirenderer::renderthread;
+using namespace android::uirenderer::skiapipeline;
+
+RENDERTHREAD_SKIA_PIPELINE_TEST(VectorDrawableAtlas, addGetRemove) {
+    VectorDrawableAtlas atlas(100*100);
+    atlas.prepareForDraw(renderThread.getGrContext());
+    //create 150 rects 10x10, which won't fit in the atlas (atlas can fit no more than 100 rects)
+    const int MAX_RECTS = 150;
+    AtlasEntry VDRects[MAX_RECTS];
+
+    sk_sp<SkSurface> atlasSurface;
+
+    //check we are able to allocate new rects
+    //check that rects in the atlas do not intersect
+    for (uint32_t i = 0; i < MAX_RECTS; i++) {
+        VDRects[i] = atlas.requestNewEntry(10, 10, renderThread.getGrContext());
+        if (0 == i) {
+            atlasSurface = VDRects[0].surface;
+        }
+        ASSERT_TRUE(VDRects[i].key != INVALID_ATLAS_KEY);
+        ASSERT_TRUE(VDRects[i].surface.get() != nullptr);
+        ASSERT_TRUE(VDRects[i].rect.width() == 10 && VDRects[i].rect.height() == 10);
+
+        //nothing in the atlas should intersect
+        if (atlasSurface.get() == VDRects[i].surface.get()) {
+            for (uint32_t j = 0; j < i; j++) {
+                if (atlasSurface.get() == VDRects[j].surface.get()) {
+                    ASSERT_FALSE(VDRects[i].rect.intersect(VDRects[j].rect));
+                }
+            }
+        }
+    }
+
+    //first 1/3 rects should all be in the same surface
+    for (uint32_t i = 1; i < MAX_RECTS/3; i++) {
+        ASSERT_NE(VDRects[i].key, VDRects[0].key);
+        ASSERT_EQ(VDRects[i].surface.get(), atlasSurface.get());
+    }
+
+    //first rect is using atlas and last is a standalone surface
+    ASSERT_NE(VDRects[0].surface.get(), VDRects[MAX_RECTS-1].surface.get());
+
+    //check getEntry returns the same surfaces that we had created
+    for (uint32_t i = 0; i < MAX_RECTS; i++) {
+        auto VDRect = atlas.getEntry(VDRects[i].key);
+        ASSERT_TRUE(VDRect.key != INVALID_ATLAS_KEY);
+        ASSERT_EQ(VDRects[i].key, VDRect.key);
+        ASSERT_EQ(VDRects[i].surface.get(), VDRect.surface.get());
+        ASSERT_EQ(VDRects[i].rect, VDRect.rect);
+        atlas.releaseEntry(VDRect.key);
+    }
+
+    //check that any new rects will be allocated in the atlas, even that rectanizer is full.
+    //rects in the atlas should not intersect.
+    for (uint32_t i = 0; i < MAX_RECTS/3; i++) {
+        VDRects[i] = atlas.requestNewEntry(10, 10, renderThread.getGrContext());
+        ASSERT_TRUE(VDRects[i].key != INVALID_ATLAS_KEY);
+        ASSERT_EQ(VDRects[i].surface.get(), atlasSurface.get());
+        ASSERT_TRUE(VDRects[i].rect.width() == 10 && VDRects[i].rect.height() == 10);
+        for (uint32_t j = 0; j < i; j++) {
+            ASSERT_FALSE(VDRects[i].rect.intersect(VDRects[j].rect));
+        }
+    }
+}
+
+
+RENDERTHREAD_SKIA_PIPELINE_TEST(VectorDrawableAtlas, disallowSharedSurface) {
+    VectorDrawableAtlas atlas(100*100);
+    //don't allow to use a shared surface
+    atlas.setStorageMode(VectorDrawableAtlas::StorageMode::disallowSharedSurface);
+    atlas.prepareForDraw(renderThread.getGrContext());
+    //create 150 rects 10x10, which won't fit in the atlas (atlas can fit no more than 100 rects)
+    const int MAX_RECTS = 150;
+    AtlasEntry VDRects[MAX_RECTS];
+
+    //check we are able to allocate new rects
+    //check that rects in the atlas use unique surfaces
+    for (uint32_t i = 0; i < MAX_RECTS; i++) {
+        VDRects[i] = atlas.requestNewEntry(10, 10, renderThread.getGrContext());
+        ASSERT_TRUE(VDRects[i].key != INVALID_ATLAS_KEY);
+        ASSERT_TRUE(VDRects[i].surface.get() != nullptr);
+        ASSERT_TRUE(VDRects[i].rect.width() == 10 && VDRects[i].rect.height() == 10);
+
+        //nothing in the atlas should use the same surface
+        for (uint32_t j = 0; j < i; j++) {
+            ASSERT_NE(VDRects[i].surface.get(), VDRects[j].surface.get());
+        }
+    }
+}
+
+RENDERTHREAD_SKIA_PIPELINE_TEST(VectorDrawableAtlas, repack) {
+    VectorDrawableAtlas atlas(100*100);
+    ASSERT_FALSE(atlas.isFragmented());
+    atlas.prepareForDraw(renderThread.getGrContext());
+    ASSERT_FALSE(atlas.isFragmented());
+    //create 150 rects 10x10, which won't fit in the atlas (atlas can fit no more than 100 rects)
+    const int MAX_RECTS = 150;
+    AtlasEntry VDRects[MAX_RECTS];
+
+    sk_sp<SkSurface> atlasSurface;
+
+    //fill the atlas with check we are able to allocate new rects
+    for (uint32_t i = 0; i < MAX_RECTS; i++) {
+        VDRects[i] = atlas.requestNewEntry(10, 10, renderThread.getGrContext());
+        if (0 == i) {
+            atlasSurface = VDRects[0].surface;
+        }
+        ASSERT_TRUE(VDRects[i].key != INVALID_ATLAS_KEY);
+    }
+
+    ASSERT_FALSE(atlas.isFragmented());
+
+    //first 1/3 rects should all be in the same surface
+    for (uint32_t i = 1; i < MAX_RECTS/3; i++) {
+        ASSERT_NE(VDRects[i].key, VDRects[0].key);
+        ASSERT_EQ(VDRects[i].surface.get(), atlasSurface.get());
+    }
+
+    //release all entries
+    for (uint32_t i = 0; i < MAX_RECTS; i++) {
+        auto VDRect = atlas.getEntry(VDRects[i].key);
+        ASSERT_TRUE(VDRect.key != INVALID_ATLAS_KEY);
+        atlas.releaseEntry(VDRect.key);
+    }
+
+    ASSERT_FALSE(atlas.isFragmented());
+
+    //allocate 4x4 rects, which will fragment the atlas badly, because each entry occupies a 10x10
+    //area
+    for (uint32_t i = 0; i < 4*MAX_RECTS; i++) {
+        AtlasEntry entry = atlas.requestNewEntry(4, 4, renderThread.getGrContext());
+        ASSERT_TRUE(entry.key != INVALID_ATLAS_KEY);
+    }
+
+    ASSERT_TRUE(atlas.isFragmented());
+
+    atlas.repackIfNeeded(renderThread.getGrContext());
+
+    ASSERT_FALSE(atlas.isFragmented());
+}
\ No newline at end of file
diff --git a/lowpan/java/android/net/lowpan/ILowpanEnergyScanCallback.aidl b/lowpan/java/android/net/lowpan/ILowpanEnergyScanCallback.aidl
new file mode 100644
index 0000000..f09dbe3
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/ILowpanEnergyScanCallback.aidl
@@ -0,0 +1,23 @@
+/*
+ * 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.lowpan;
+
+/** {@hide} */
+interface ILowpanEnergyScanCallback {
+    oneway void onEnergyScanResult(int channel, int rssi);
+    oneway void onEnergyScanFinished();
+}
diff --git a/lowpan/java/android/net/lowpan/ILowpanInterface.aidl b/lowpan/java/android/net/lowpan/ILowpanInterface.aidl
new file mode 100644
index 0000000..603dc3c
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/ILowpanInterface.aidl
@@ -0,0 +1,155 @@
+/*
+ * 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.lowpan;
+
+import android.net.IpPrefix;
+import android.net.lowpan.ILowpanEnergyScanCallback;
+import android.net.lowpan.ILowpanInterfaceListener;
+import android.net.lowpan.ILowpanNetScanCallback;
+import android.net.lowpan.LowpanBeaconInfo;
+import android.net.lowpan.LowpanChannelInfo;
+import android.net.lowpan.LowpanCredential;
+import android.net.lowpan.LowpanIdentity;
+import android.net.lowpan.LowpanProvision;
+
+/** {@hide} */
+interface ILowpanInterface {
+
+    // These are here for the sake of C++ interface implementations.
+
+    const String PERM_ACCESS_LOWPAN_STATE    = "android.permission.ACCESS_LOWPAN_STATE";
+    const String PERM_CHANGE_LOWPAN_STATE    = "android.permission.CHANGE_LOWPAN_STATE";
+    const String PERM_READ_LOWPAN_CREDENTIAL = "android.permission.READ_LOWPAN_CREDENTIAL";
+
+    /**
+     * Channel mask key.
+     * Used for setting a channel mask when starting a scan.
+     * Type: int[]
+     * */
+    const String KEY_CHANNEL_MASK       = "android.net.lowpan.property.CHANNEL_MASK";
+
+    /**
+     * Max Transmit Power Key.
+     * Used for setting the maximum transmit power when starting a network scan.
+     * Type: Integer
+     * */
+    const String KEY_MAX_TX_POWER       = "android.net.lowpan.property.MAX_TX_POWER";
+
+    // Interface States
+
+    const String STATE_OFFLINE = "offline";
+    const String STATE_COMMISSIONING = "commissioning";
+    const String STATE_ATTACHING = "attaching";
+    const String STATE_ATTACHED = "attached";
+    const String STATE_FAULT = "fault";
+
+    // Device Roles
+
+    const String ROLE_END_DEVICE = "end-device";
+    const String ROLE_ROUTER = "router";
+    const String ROLE_SLEEPY_END_DEVICE = "sleepy-end-device";
+    const String ROLE_SLEEPY_ROUTER = "sleepy-router";
+    const String ROLE_LEADER = "leader";
+    const String ROLE_COORDINATOR = "coordinator";
+    const String ROLE_DETACHED = "detached";
+
+    const String NETWORK_TYPE_UNKNOWN = "unknown";
+
+    /**
+     * Network type for Thread 1.x networks.
+     *
+     * @see android.net.lowpan.LowpanIdentity#getType
+     * @see #getLowpanIdentity
+     */
+    const String NETWORK_TYPE_THREAD_V1 = "org.threadgroup.thread.v1";
+
+    // Service-Specific Error Code Constants
+
+    const int ERROR_UNSPECIFIED = 1;
+    const int ERROR_INVALID_ARGUMENT = 2;
+    const int ERROR_DISABLED = 3;
+    const int ERROR_WRONG_STATE = 4;
+    const int ERROR_TIMEOUT = 5;
+    const int ERROR_IO_FAILURE = 6;
+    const int ERROR_NCP_PROBLEM = 7;
+    const int ERROR_BUSY = 8;
+    const int ERROR_ALREADY = 9;
+    const int ERROR_CANCELED = 10;
+    const int ERROR_FEATURE_NOT_SUPPORTED = 11;
+    const int ERROR_JOIN_FAILED_UNKNOWN = 12;
+    const int ERROR_JOIN_FAILED_AT_SCAN = 13;
+    const int ERROR_JOIN_FAILED_AT_AUTH = 14;
+    const int ERROR_FORM_FAILED_AT_SCAN = 15;
+
+    // Methods
+
+    @utf8InCpp String getName();
+
+    @utf8InCpp String getNcpVersion();
+    @utf8InCpp String getDriverVersion();
+    LowpanChannelInfo[] getSupportedChannels();
+    @utf8InCpp String[] getSupportedNetworkTypes();
+    byte[] getMacAddress();
+
+    boolean isEnabled();
+    void setEnabled(boolean enabled);
+
+    boolean isUp();
+    boolean isCommissioned();
+    boolean isConnected();
+    @utf8InCpp String getState();
+
+    @utf8InCpp String getRole();
+    @utf8InCpp String getPartitionId();
+    byte[] getExtendedAddress();
+
+    LowpanIdentity getLowpanIdentity();
+    LowpanCredential getLowpanCredential();
+
+    @utf8InCpp String[] getLinkAddresses();
+    IpPrefix[] getLinkNetworks();
+
+    void join(in LowpanProvision provision);
+    void form(in LowpanProvision provision);
+    void attach(in LowpanProvision provision);
+    void leave();
+    void reset();
+
+    void startCommissioningSession(in LowpanBeaconInfo beaconInfo);
+    void closeCommissioningSession();
+    oneway void sendToCommissioner(in byte[] packet);
+
+    void beginLowPower();
+    oneway void pollForData();
+
+    oneway void onHostWake();
+
+    void addListener(ILowpanInterfaceListener listener);
+    oneway void removeListener(ILowpanInterfaceListener listener);
+
+    void startNetScan(in Map properties, ILowpanNetScanCallback listener);
+    oneway void stopNetScan();
+
+    void startEnergyScan(in Map properties, ILowpanEnergyScanCallback listener);
+    oneway void stopEnergyScan();
+
+    void addOnMeshPrefix(in IpPrefix prefix, int flags);
+    oneway void removeOnMeshPrefix(in IpPrefix prefix);
+
+    void addExternalRoute(in IpPrefix prefix, int flags);
+    oneway void removeExternalRoute(in IpPrefix prefix);
+}
diff --git a/lowpan/java/android/net/lowpan/ILowpanInterfaceListener.aidl b/lowpan/java/android/net/lowpan/ILowpanInterfaceListener.aidl
new file mode 100644
index 0000000..5e4049a
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/ILowpanInterfaceListener.aidl
@@ -0,0 +1,45 @@
+/*
+ * 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.lowpan;
+
+import android.net.IpPrefix;
+import android.net.lowpan.LowpanIdentity;
+
+/** {@hide} */
+interface ILowpanInterfaceListener {
+    oneway void onEnabledChanged(boolean value);
+
+    oneway void onConnectedChanged(boolean value);
+
+    oneway void onUpChanged(boolean value);
+
+    oneway void onRoleChanged(@utf8InCpp String value);
+
+    oneway void onStateChanged(@utf8InCpp String value);
+
+    oneway void onLowpanIdentityChanged(in LowpanIdentity value);
+
+    oneway void onLinkNetworkAdded(in IpPrefix value);
+
+    oneway void onLinkNetworkRemoved(in IpPrefix value);
+
+    oneway void onLinkAddressAdded(@utf8InCpp String value);
+
+    oneway void onLinkAddressRemoved(@utf8InCpp String value);
+
+    oneway void onReceiveFromCommissioner(in byte[] packet);
+}
diff --git a/lowpan/java/android/net/lowpan/ILowpanManager.aidl b/lowpan/java/android/net/lowpan/ILowpanManager.aidl
new file mode 100644
index 0000000..326aa65
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/ILowpanManager.aidl
@@ -0,0 +1,36 @@
+/*
+ * 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.lowpan;
+import android.net.lowpan.ILowpanInterface;
+import android.net.lowpan.ILowpanManagerListener;
+
+/** {@hide} */
+interface ILowpanManager {
+
+    /* Keep this in sync with Context.LOWPAN_SERVICE */
+    const String LOWPAN_SERVICE_NAME = "lowpan";
+
+    ILowpanInterface getInterface(@utf8InCpp String name);
+
+    @utf8InCpp String[] getInterfaceList();
+
+    void addListener(ILowpanManagerListener listener);
+    void removeListener(ILowpanManagerListener listener);
+
+    void addInterface(ILowpanInterface lowpan_interface);
+    void removeInterface(ILowpanInterface lowpan_interface);
+}
diff --git a/lowpan/java/android/net/lowpan/ILowpanManagerListener.aidl b/lowpan/java/android/net/lowpan/ILowpanManagerListener.aidl
new file mode 100644
index 0000000..d4846f6
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/ILowpanManagerListener.aidl
@@ -0,0 +1,25 @@
+/*
+ * 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.lowpan;
+
+import android.net.lowpan.ILowpanInterface;
+
+/** {@hide} */
+interface ILowpanManagerListener {
+    oneway void onInterfaceAdded(ILowpanInterface lowpanInterface);
+    oneway void onInterfaceRemoved(ILowpanInterface lowpanInterface);
+}
diff --git a/lowpan/java/android/net/lowpan/ILowpanNetScanCallback.aidl b/lowpan/java/android/net/lowpan/ILowpanNetScanCallback.aidl
new file mode 100644
index 0000000..9743fce
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/ILowpanNetScanCallback.aidl
@@ -0,0 +1,25 @@
+/*
+ * 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.lowpan;
+
+import android.net.lowpan.LowpanBeaconInfo;
+
+/** {@hide} */
+interface ILowpanNetScanCallback {
+    oneway void onNetScanBeacon(in LowpanBeaconInfo beacon);
+    oneway void onNetScanFinished();
+}
diff --git a/lowpan/java/android/net/lowpan/InterfaceDisabledException.java b/lowpan/java/android/net/lowpan/InterfaceDisabledException.java
new file mode 100644
index 0000000..e917d45
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/InterfaceDisabledException.java
@@ -0,0 +1,41 @@
+/*
+ * 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.lowpan;
+
+/**
+ * Exception indicating this operation requires the interface to be enabled.
+ *
+ * @see LowpanInterface
+ * @hide
+ */
+// @SystemApi
+public class InterfaceDisabledException extends LowpanException {
+
+    public InterfaceDisabledException() {}
+
+    public InterfaceDisabledException(String message) {
+        super(message);
+    }
+
+    public InterfaceDisabledException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    protected InterfaceDisabledException(Exception cause) {
+        super(cause);
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/JoinFailedAtAuthException.java b/lowpan/java/android/net/lowpan/JoinFailedAtAuthException.java
new file mode 100644
index 0000000..7aceb71
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/JoinFailedAtAuthException.java
@@ -0,0 +1,41 @@
+/*
+ * 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.lowpan;
+
+/**
+ * Exception indicating the join operation was unable to find the given network.
+ *
+ * @see LowpanInterface
+ * @hide
+ */
+// @SystemApi
+public class JoinFailedAtAuthException extends JoinFailedException {
+
+    public JoinFailedAtAuthException() {}
+
+    public JoinFailedAtAuthException(String message) {
+        super(message);
+    }
+
+    public JoinFailedAtAuthException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public JoinFailedAtAuthException(Exception cause) {
+        super(cause);
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/JoinFailedAtScanException.java b/lowpan/java/android/net/lowpan/JoinFailedAtScanException.java
new file mode 100644
index 0000000..a4346f98
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/JoinFailedAtScanException.java
@@ -0,0 +1,41 @@
+/*
+ * 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.lowpan;
+
+/**
+ * Exception indicating the join operation was unable to find the given network.
+ *
+ * @see LowpanInterface
+ * @hide
+ */
+// @SystemApi
+public class JoinFailedAtScanException extends JoinFailedException {
+
+    public JoinFailedAtScanException() {}
+
+    public JoinFailedAtScanException(String message) {
+        super(message);
+    }
+
+    public JoinFailedAtScanException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public JoinFailedAtScanException(Exception cause) {
+        super(cause);
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/JoinFailedException.java b/lowpan/java/android/net/lowpan/JoinFailedException.java
new file mode 100644
index 0000000..e51d382
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/JoinFailedException.java
@@ -0,0 +1,41 @@
+/*
+ * 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.lowpan;
+
+/**
+ * Exception indicating the join operation has failed.
+ *
+ * @see LowpanInterface
+ * @hide
+ */
+// @SystemApi
+public class JoinFailedException extends LowpanException {
+
+    public JoinFailedException() {}
+
+    public JoinFailedException(String message) {
+        super(message);
+    }
+
+    public JoinFailedException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    protected JoinFailedException(Exception cause) {
+        super(cause);
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/LowpanBeaconInfo.aidl b/lowpan/java/android/net/lowpan/LowpanBeaconInfo.aidl
new file mode 100644
index 0000000..9464fea
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanBeaconInfo.aidl
@@ -0,0 +1,19 @@
+/**
+ * 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.lowpan;
+
+parcelable LowpanBeaconInfo cpp_header "android/net/lowpan/LowpanBeaconInfo.h";
diff --git a/lowpan/java/android/net/lowpan/LowpanBeaconInfo.java b/lowpan/java/android/net/lowpan/LowpanBeaconInfo.java
new file mode 100644
index 0000000..345a4c5
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanBeaconInfo.java
@@ -0,0 +1,234 @@
+/*
+ * 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.lowpan;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import com.android.internal.util.HexDump;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Objects;
+import java.util.TreeSet;
+
+/**
+ * Describes a LoWPAN Beacon
+ *
+ * @hide
+ */
+// @SystemApi
+public class LowpanBeaconInfo implements Parcelable {
+    public static final int UNKNOWN_RSSI = Integer.MAX_VALUE;
+    public static final int UNKNOWN_LQI = 0;
+
+    private LowpanIdentity mIdentity;
+    private int mRssi = UNKNOWN_RSSI;
+    private int mLqi = UNKNOWN_LQI;
+    private byte[] mBeaconAddress = null;
+    private final TreeSet<Integer> mFlags = new TreeSet<>();
+
+    public static final int FLAG_CAN_ASSIST = 1;
+
+    /** @hide */
+    public static class Builder {
+        final LowpanIdentity.Builder mIdentityBuilder = new LowpanIdentity.Builder();
+        final LowpanBeaconInfo mBeaconInfo = new LowpanBeaconInfo();
+
+        public Builder setLowpanIdentity(LowpanIdentity x) {
+            mIdentityBuilder.setLowpanIdentity(x);
+            return this;
+        }
+
+        public Builder setName(String x) {
+            mIdentityBuilder.setName(x);
+            return this;
+        }
+
+        public Builder setXpanid(byte x[]) {
+            mIdentityBuilder.setXpanid(x);
+            return this;
+        }
+
+        public Builder setPanid(int x) {
+            mIdentityBuilder.setPanid(x);
+            return this;
+        }
+
+        public Builder setChannel(int x) {
+            mIdentityBuilder.setChannel(x);
+            return this;
+        }
+
+        public Builder setType(String x) {
+            mIdentityBuilder.setType(x);
+            return this;
+        }
+
+        public Builder setRssi(int x) {
+            mBeaconInfo.mRssi = x;
+            return this;
+        }
+
+        public Builder setLqi(int x) {
+            mBeaconInfo.mLqi = x;
+            return this;
+        }
+
+        public Builder setBeaconAddress(byte x[]) {
+            mBeaconInfo.mBeaconAddress = (x != null ? x.clone() : null);
+            return this;
+        }
+
+        public Builder setFlag(int x) {
+            mBeaconInfo.mFlags.add(x);
+            return this;
+        }
+
+        public Builder setFlags(Collection<Integer> x) {
+            mBeaconInfo.mFlags.addAll(x);
+            return this;
+        }
+
+        public LowpanBeaconInfo build() {
+            mBeaconInfo.mIdentity = mIdentityBuilder.build();
+            if (mBeaconInfo.mBeaconAddress == null) {
+                mBeaconInfo.mBeaconAddress = new byte[0];
+            }
+            return mBeaconInfo;
+        }
+    }
+
+    private LowpanBeaconInfo() {}
+
+    public LowpanIdentity getLowpanIdentity() {
+        return mIdentity;
+    }
+
+    public int getRssi() {
+        return mRssi;
+    }
+
+    public int getLqi() {
+        return mLqi;
+    }
+
+    public byte[] getBeaconAddress() {
+        return mBeaconAddress.clone();
+    }
+
+    public Collection<Integer> getFlags() {
+        return (Collection<Integer>) mFlags.clone();
+    }
+
+    public boolean isFlagSet(int flag) {
+        return mFlags.contains(flag);
+    }
+
+    @Override
+    public String toString() {
+        StringBuffer sb = new StringBuffer();
+
+        sb.append(mIdentity.toString());
+
+        if (mRssi != UNKNOWN_RSSI) {
+            sb.append(", RSSI:").append(mRssi).append("dBm");
+        }
+
+        if (mLqi != UNKNOWN_LQI) {
+            sb.append(", LQI:").append(mLqi);
+        }
+
+        if (mBeaconAddress.length > 0) {
+            sb.append(", BeaconAddress:").append(HexDump.toHexString(mBeaconAddress));
+        }
+
+        for (Integer flag : mFlags) {
+            switch (flag.intValue()) {
+                case FLAG_CAN_ASSIST:
+                    sb.append(", CAN_ASSIST");
+                    break;
+                default:
+                    sb.append(", FLAG_").append(Integer.toHexString(flag));
+                    break;
+            }
+        }
+
+        return sb.toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mIdentity, mRssi, mLqi, Arrays.hashCode(mBeaconAddress), mFlags);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof LowpanBeaconInfo)) {
+            return false;
+        }
+        LowpanBeaconInfo rhs = (LowpanBeaconInfo) obj;
+        return mIdentity.equals(rhs.mIdentity)
+                && Arrays.equals(mBeaconAddress, rhs.mBeaconAddress)
+                && mRssi == rhs.mRssi
+                && mLqi == rhs.mLqi
+                && mFlags.equals(rhs.mFlags);
+    }
+
+    /** Implement the Parcelable interface. */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /** Implement the Parcelable interface. */
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        mIdentity.writeToParcel(dest, flags);
+        dest.writeInt(mRssi);
+        dest.writeInt(mLqi);
+        dest.writeByteArray(mBeaconAddress);
+
+        dest.writeInt(mFlags.size());
+        for (Integer val : mFlags) {
+            dest.writeInt(val);
+        }
+    }
+
+    /** Implement the Parcelable interface. */
+    public static final Creator<LowpanBeaconInfo> CREATOR =
+            new Creator<LowpanBeaconInfo>() {
+                public LowpanBeaconInfo createFromParcel(Parcel in) {
+                    Builder builder = new Builder();
+
+                    builder.setLowpanIdentity(LowpanIdentity.CREATOR.createFromParcel(in));
+
+                    builder.setRssi(in.readInt());
+                    builder.setLqi(in.readInt());
+
+                    builder.setBeaconAddress(in.createByteArray());
+
+                    for (int i = in.readInt(); i > 0; i--) {
+                        builder.setFlag(in.readInt());
+                    }
+
+                    return builder.build();
+                }
+
+                public LowpanBeaconInfo[] newArray(int size) {
+                    return new LowpanBeaconInfo[size];
+                }
+            };
+}
diff --git a/lowpan/java/android/net/lowpan/LowpanChannelInfo.aidl b/lowpan/java/android/net/lowpan/LowpanChannelInfo.aidl
new file mode 100644
index 0000000..0676deb
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanChannelInfo.aidl
@@ -0,0 +1,19 @@
+/**
+ * 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.lowpan;
+
+parcelable LowpanChannelInfo cpp_header "android/net/lowpan/LowpanChannelInfo.h";
diff --git a/lowpan/java/android/net/lowpan/LowpanChannelInfo.java b/lowpan/java/android/net/lowpan/LowpanChannelInfo.java
new file mode 100644
index 0000000..52b1c6d
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanChannelInfo.java
@@ -0,0 +1,216 @@
+/*
+ * 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.lowpan;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import java.util.Objects;
+
+/**
+ * Provides detailed information about a given channel.
+ *
+ * @hide
+ */
+// @SystemApi
+public class LowpanChannelInfo implements Parcelable {
+
+    public static final int UNKNOWN_POWER = Integer.MAX_VALUE;
+    public static final float UNKNOWN_FREQUENCY = 0.0f;
+    public static final float UNKNOWN_BANDWIDTH = 0.0f;
+
+    private int mIndex = 0;
+    private String mName = null;
+    private float mSpectrumCenterFrequency = UNKNOWN_FREQUENCY;
+    private float mSpectrumBandwidth = UNKNOWN_BANDWIDTH;
+    private int mMaxTransmitPower = UNKNOWN_POWER;
+    private boolean mIsMaskedByRegulatoryDomain = false;
+
+    /** @hide */
+    public static LowpanChannelInfo getChannelInfoForIeee802154Page0(int index) {
+        LowpanChannelInfo info = new LowpanChannelInfo();
+
+        if (index < 0) {
+            info = null;
+
+        } else if (index == 0) {
+            info.mSpectrumCenterFrequency = 868300000.0f;
+            info.mSpectrumBandwidth = 600000.0f;
+
+        } else if (index < 11) {
+            info.mSpectrumCenterFrequency = 906000000.0f - (2000000.0f * 1) + 2000000.0f * (index);
+            info.mSpectrumBandwidth = 0; // Unknown
+
+        } else if (index < 26) {
+            info.mSpectrumCenterFrequency =
+                    2405000000.0f - (5000000.0f * 11) + 5000000.0f * (index);
+            info.mSpectrumBandwidth = 2000000.0f;
+
+        } else {
+            info = null;
+        }
+
+        info.mName = Integer.toString(index);
+
+        return info;
+    }
+
+    private LowpanChannelInfo() {}
+
+    private LowpanChannelInfo(int index, String name, float cf, float bw) {
+        mIndex = index;
+        mName = name;
+        mSpectrumCenterFrequency = cf;
+        mSpectrumBandwidth = bw;
+    }
+
+    public String getName() {
+        return mName;
+    }
+
+    public int getIndex() {
+        return mIndex;
+    }
+
+    public int getMaxTransmitPower() {
+        return mMaxTransmitPower;
+    }
+
+    public boolean isMaskedByRegulatoryDomain() {
+        return mIsMaskedByRegulatoryDomain;
+    }
+
+    public float getSpectrumCenterFrequency() {
+        return mSpectrumCenterFrequency;
+    }
+
+    public float getSpectrumBandwidth() {
+        return mSpectrumBandwidth;
+    }
+
+    @Override
+    public String toString() {
+        StringBuffer sb = new StringBuffer();
+
+        sb.append("Channel ").append(mIndex);
+
+        if (mName != null && !mName.equals(Integer.toString(mIndex))) {
+            sb.append(" (").append(mName).append(")");
+        }
+
+        if (mSpectrumCenterFrequency > 0.0f) {
+            if (mSpectrumCenterFrequency > 1000000000.0f) {
+                sb.append(", SpectrumCenterFrequency: ")
+                        .append(mSpectrumCenterFrequency / 1000000000.0f)
+                        .append("GHz");
+            } else if (mSpectrumCenterFrequency > 1000000.0f) {
+                sb.append(", SpectrumCenterFrequency: ")
+                        .append(mSpectrumCenterFrequency / 1000000.0f)
+                        .append("MHz");
+            } else {
+                sb.append(", SpectrumCenterFrequency: ")
+                        .append(mSpectrumCenterFrequency / 1000.0f)
+                        .append("kHz");
+            }
+        }
+
+        if (mSpectrumBandwidth > 0.0f) {
+            if (mSpectrumBandwidth > 1000000000.0f) {
+                sb.append(", SpectrumBandwidth: ")
+                        .append(mSpectrumBandwidth / 1000000000.0f)
+                        .append("GHz");
+            } else if (mSpectrumBandwidth > 1000000.0f) {
+                sb.append(", SpectrumBandwidth: ")
+                        .append(mSpectrumBandwidth / 1000000.0f)
+                        .append("MHz");
+            } else {
+                sb.append(", SpectrumBandwidth: ")
+                        .append(mSpectrumBandwidth / 1000.0f)
+                        .append("kHz");
+            }
+        }
+
+        if (mMaxTransmitPower != UNKNOWN_POWER) {
+            sb.append(", MaxTransmitPower: ").append(mMaxTransmitPower).append("dBm");
+        }
+
+        return sb.toString();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof LowpanChannelInfo)) {
+            return false;
+        }
+        LowpanChannelInfo rhs = (LowpanChannelInfo) obj;
+        return Objects.equals(mName, rhs.mName)
+                && mIndex == rhs.mIndex
+                && mIsMaskedByRegulatoryDomain == rhs.mIsMaskedByRegulatoryDomain
+                && mSpectrumCenterFrequency == rhs.mSpectrumCenterFrequency
+                && mSpectrumBandwidth == rhs.mSpectrumBandwidth
+                && mMaxTransmitPower == rhs.mMaxTransmitPower;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(
+                mName,
+                mIndex,
+                mIsMaskedByRegulatoryDomain,
+                mSpectrumCenterFrequency,
+                mSpectrumBandwidth,
+                mMaxTransmitPower);
+    }
+
+    /** Implement the Parcelable interface. */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /** Implement the Parcelable interface. */
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(mIndex);
+        dest.writeString(mName);
+        dest.writeFloat(mSpectrumCenterFrequency);
+        dest.writeFloat(mSpectrumBandwidth);
+        dest.writeInt(mMaxTransmitPower);
+        dest.writeBoolean(mIsMaskedByRegulatoryDomain);
+    }
+
+    /** Implement the Parcelable interface. */
+    public static final Creator<LowpanChannelInfo> CREATOR =
+            new Creator<LowpanChannelInfo>() {
+
+                public LowpanChannelInfo createFromParcel(Parcel in) {
+                    LowpanChannelInfo info = new LowpanChannelInfo();
+
+                    info.mIndex = in.readInt();
+                    info.mName = in.readString();
+                    info.mSpectrumCenterFrequency = in.readFloat();
+                    info.mSpectrumBandwidth = in.readFloat();
+                    info.mMaxTransmitPower = in.readInt();
+                    info.mIsMaskedByRegulatoryDomain = in.readBoolean();
+
+                    return info;
+                }
+
+                public LowpanChannelInfo[] newArray(int size) {
+                    return new LowpanChannelInfo[size];
+                }
+            };
+}
diff --git a/lowpan/java/android/net/lowpan/LowpanCommissioningSession.java b/lowpan/java/android/net/lowpan/LowpanCommissioningSession.java
new file mode 100644
index 0000000..8f75e8d
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanCommissioningSession.java
@@ -0,0 +1,223 @@
+/*
+ * 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.lowpan;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.net.IpPrefix;
+import android.os.DeadObjectException;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.RemoteException;
+
+/**
+ * Commissioning Session.
+ *
+ * <p>This class enables a device to learn the credential needed to join a network using a technique
+ * called "in-band commissioning".
+ *
+ * @hide
+ */
+// @SystemApi
+public class LowpanCommissioningSession {
+
+    private final ILowpanInterface mBinder;
+    private final LowpanBeaconInfo mBeaconInfo;
+    private final ILowpanInterfaceListener mInternalCallback = new InternalCallback();
+    private final Looper mLooper;
+    private Handler mHandler;
+    private Callback mCallback = null;
+    private volatile boolean mIsClosed = false;
+
+    /**
+     * Callback base class for {@link LowpanCommissioningSession}
+     *
+     * @hide
+     */
+    // @SystemApi
+    public abstract static class Callback {
+        public void onReceiveFromCommissioner(@NonNull byte[] packet) {};
+
+        public void onClosed() {};
+    }
+
+    private class InternalCallback extends ILowpanInterfaceListener.Stub {
+        @Override
+        public void onStateChanged(String value) {
+            if (!mIsClosed) {
+                switch (value) {
+                    case ILowpanInterface.STATE_OFFLINE:
+                    case ILowpanInterface.STATE_FAULT:
+                        synchronized (LowpanCommissioningSession.this) {
+                            lockedCleanup();
+                        }
+                }
+            }
+        }
+
+        @Override
+        public void onReceiveFromCommissioner(byte[] packet) {
+            mHandler.post(
+                    () -> {
+                        synchronized (LowpanCommissioningSession.this) {
+                            if (!mIsClosed && (mCallback != null)) {
+                                mCallback.onReceiveFromCommissioner(packet);
+                            }
+                        }
+                    });
+        }
+
+        // We ignore all other callbacks.
+        @Override
+        public void onEnabledChanged(boolean value) {}
+
+        @Override
+        public void onConnectedChanged(boolean value) {}
+
+        @Override
+        public void onUpChanged(boolean value) {}
+
+        @Override
+        public void onRoleChanged(String value) {}
+
+        @Override
+        public void onLowpanIdentityChanged(LowpanIdentity value) {}
+
+        @Override
+        public void onLinkNetworkAdded(IpPrefix value) {}
+
+        @Override
+        public void onLinkNetworkRemoved(IpPrefix value) {}
+
+        @Override
+        public void onLinkAddressAdded(String value) {}
+
+        @Override
+        public void onLinkAddressRemoved(String value) {}
+    }
+
+    LowpanCommissioningSession(
+            ILowpanInterface binder, LowpanBeaconInfo beaconInfo, Looper looper) {
+        mBinder = binder;
+        mBeaconInfo = beaconInfo;
+        mLooper = looper;
+
+        if (mLooper != null) {
+            mHandler = new Handler(mLooper);
+        } else {
+            mHandler = new Handler();
+        }
+
+        try {
+            mBinder.addListener(mInternalCallback);
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+    }
+
+    private void lockedCleanup() {
+        // Note: this method is only called from synchronized contexts.
+
+        if (!mIsClosed) {
+            try {
+                mBinder.removeListener(mInternalCallback);
+
+            } catch (DeadObjectException x) {
+                /* We don't care if we receive a DOE at this point.
+                 * DOE is as good as success as far as we are concerned.
+                 */
+
+            } catch (RemoteException x) {
+                throw x.rethrowAsRuntimeException();
+            }
+
+            if (mCallback != null) {
+                mHandler.post(() -> mCallback.onClosed());
+            }
+        }
+
+        mCallback = null;
+        mIsClosed = true;
+    }
+
+    /** TODO: doc */
+    @NonNull
+    public LowpanBeaconInfo getBeaconInfo() {
+        return mBeaconInfo;
+    }
+
+    /** TODO: doc */
+    public void sendToCommissioner(@NonNull byte[] packet) {
+        if (!mIsClosed) {
+            try {
+                mBinder.sendToCommissioner(packet);
+
+            } catch (DeadObjectException x) {
+                /* This method is a best-effort delivery.
+                 * We don't care if we receive a DOE at this point.
+                 */
+
+            } catch (RemoteException x) {
+                throw x.rethrowAsRuntimeException();
+            }
+        }
+    }
+
+    /** TODO: doc */
+    public synchronized void setCallback(@Nullable Callback cb, @Nullable Handler handler) {
+        if (!mIsClosed) {
+            /* This class can be created with or without a default looper.
+             * Also, this method can be called with or without a specific
+             * handler. If a handler is specified, it is to always be used.
+             * Otherwise, if there was a Looper specified when this object
+             * was created, we create a new handle based on that looper.
+             * Otherwise we just create a default handler object. Since we
+             * don't really know how the previous handler was created, we
+             * end up always replacing it here. This isn't a huge problem
+             * because this method should be called infrequently.
+             */
+            if (handler != null) {
+                mHandler = handler;
+            } else if (mLooper != null) {
+                mHandler = new Handler(mLooper);
+            } else {
+                mHandler = new Handler();
+            }
+            mCallback = cb;
+        }
+    }
+
+    /** TODO: doc */
+    public synchronized void close() {
+        if (!mIsClosed) {
+            try {
+                mBinder.closeCommissioningSession();
+
+                lockedCleanup();
+
+            } catch (DeadObjectException x) {
+                /* We don't care if we receive a DOE at this point.
+                 * DOE is as good as success as far as we are concerned.
+                 */
+
+            } catch (RemoteException x) {
+                throw x.rethrowAsRuntimeException();
+            }
+        }
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/LowpanCredential.aidl b/lowpan/java/android/net/lowpan/LowpanCredential.aidl
new file mode 100644
index 0000000..af0c2d6
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanCredential.aidl
@@ -0,0 +1,19 @@
+/**
+ * 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.lowpan;
+
+parcelable LowpanCredential cpp_header "android/net/lowpan/LowpanCredential.h";
diff --git a/lowpan/java/android/net/lowpan/LowpanCredential.java b/lowpan/java/android/net/lowpan/LowpanCredential.java
new file mode 100644
index 0000000..e9126f9
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanCredential.java
@@ -0,0 +1,172 @@
+/*
+ * 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.lowpan;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import com.android.internal.util.HexDump;
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * Describes a credential for a LoWPAN network.
+ *
+ * @hide
+ */
+// @SystemApi
+public class LowpanCredential implements Parcelable {
+
+    public static final int UNSPECIFIED_KEY_INDEX = 0;
+
+    private byte[] mMasterKey = null;
+    private int mMasterKeyIndex = UNSPECIFIED_KEY_INDEX;
+
+    LowpanCredential() {}
+
+    private LowpanCredential(byte[] masterKey, int keyIndex) {
+        setMasterKey(masterKey, keyIndex);
+    }
+
+    private LowpanCredential(byte[] masterKey) {
+        setMasterKey(masterKey);
+    }
+
+    public static LowpanCredential createMasterKey(byte[] masterKey) {
+        return new LowpanCredential(masterKey);
+    }
+
+    public static LowpanCredential createMasterKey(byte[] masterKey, int keyIndex) {
+        return new LowpanCredential(masterKey, keyIndex);
+    }
+
+    void setMasterKey(byte[] masterKey) {
+        if (masterKey != null) {
+            masterKey = masterKey.clone();
+        }
+        mMasterKey = masterKey;
+    }
+
+    void setMasterKeyIndex(int keyIndex) {
+        mMasterKeyIndex = keyIndex;
+    }
+
+    void setMasterKey(byte[] masterKey, int keyIndex) {
+        setMasterKey(masterKey);
+        setMasterKeyIndex(keyIndex);
+    }
+
+    public byte[] getMasterKey() {
+        if (mMasterKey != null) {
+            return mMasterKey.clone();
+        }
+        return null;
+    }
+
+    public int getMasterKeyIndex() {
+        return mMasterKeyIndex;
+    }
+
+    public boolean isMasterKey() {
+        return mMasterKey != null;
+    }
+
+    public String toSensitiveString() {
+        StringBuffer sb = new StringBuffer();
+
+        sb.append("<LowpanCredential");
+
+        if (isMasterKey()) {
+            sb.append(" MasterKey:").append(HexDump.toHexString(mMasterKey));
+            if (mMasterKeyIndex != UNSPECIFIED_KEY_INDEX) {
+                sb.append(", Index:").append(mMasterKeyIndex);
+            }
+        } else {
+            sb.append(" empty");
+        }
+
+        sb.append(">");
+
+        return sb.toString();
+    }
+
+    @Override
+    public String toString() {
+        StringBuffer sb = new StringBuffer();
+
+        sb.append("<LowpanCredential");
+
+        if (isMasterKey()) {
+            // We don't print out the contents of the key here,
+            // we only do that in toSensitiveString.
+            sb.append(" MasterKey");
+            if (mMasterKeyIndex != UNSPECIFIED_KEY_INDEX) {
+                sb.append(", Index:").append(mMasterKeyIndex);
+            }
+        } else {
+            sb.append(" empty");
+        }
+
+        sb.append(">");
+
+        return sb.toString();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof LowpanCredential)) {
+            return false;
+        }
+        LowpanCredential rhs = (LowpanCredential) obj;
+        return Arrays.equals(mMasterKey, rhs.mMasterKey) && mMasterKeyIndex == rhs.mMasterKeyIndex;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(Arrays.hashCode(mMasterKey), mMasterKeyIndex);
+    }
+
+    /** Implement the Parcelable interface. */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /** Implement the Parcelable interface. */
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeByteArray(mMasterKey);
+        dest.writeInt(mMasterKeyIndex);
+    }
+
+    /** Implement the Parcelable interface. */
+    public static final Creator<LowpanCredential> CREATOR =
+            new Creator<LowpanCredential>() {
+
+                public LowpanCredential createFromParcel(Parcel in) {
+                    LowpanCredential credential = new LowpanCredential();
+
+                    credential.mMasterKey = in.createByteArray();
+                    credential.mMasterKeyIndex = in.readInt();
+
+                    return credential;
+                }
+
+                public LowpanCredential[] newArray(int size) {
+                    return new LowpanCredential[size];
+                }
+            };
+}
diff --git a/lowpan/java/android/net/lowpan/LowpanEnergyScanResult.java b/lowpan/java/android/net/lowpan/LowpanEnergyScanResult.java
new file mode 100644
index 0000000..da87752
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanEnergyScanResult.java
@@ -0,0 +1,53 @@
+/*
+ * 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.lowpan;
+
+/**
+ * Describes the result from one channel of an energy scan.
+ *
+ * @hide
+ */
+// @SystemApi
+public class LowpanEnergyScanResult {
+    public static final int UNKNOWN = Integer.MAX_VALUE;
+
+    private int mChannel = UNKNOWN;
+    private int mMaxRssi = UNKNOWN;
+
+    LowpanEnergyScanResult() {}
+
+    public int getChannel() {
+        return mChannel;
+    }
+
+    public int getMaxRssi() {
+        return mMaxRssi;
+    }
+
+    void setChannel(int x) {
+        mChannel = x;
+    }
+
+    void setMaxRssi(int x) {
+        mMaxRssi = x;
+    }
+
+    @Override
+    public String toString() {
+        return "LowpanEnergyScanResult(channel: " + mChannel + ", maxRssi:" + mMaxRssi + ")";
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/LowpanException.java b/lowpan/java/android/net/lowpan/LowpanException.java
new file mode 100644
index 0000000..5dfce48
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanException.java
@@ -0,0 +1,92 @@
+/*
+ * 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.lowpan;
+
+import android.os.ServiceSpecificException;
+import android.util.AndroidException;
+
+/**
+ * <code>LowpanException</code> is thrown if an action to a LoWPAN interface could not be performed
+ * or a LoWPAN interface property could not be fetched or changed.
+ *
+ * @see LowpanInterface
+ * @hide
+ */
+// @SystemApi
+public class LowpanException extends AndroidException {
+    public LowpanException() {}
+
+    public LowpanException(String message) {
+        super(message);
+    }
+
+    public LowpanException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public LowpanException(Exception cause) {
+        super(cause);
+    }
+
+    /* This method returns LowpanException so that the caller
+     * can add "throw" before the invocation of this method.
+     * This might seem superfluous, but it is actually to
+     * help provide a hint to the java compiler that this
+     * function will not return.
+     */
+    static LowpanException rethrowFromServiceSpecificException(ServiceSpecificException e)
+            throws LowpanException {
+        switch (e.errorCode) {
+            case ILowpanInterface.ERROR_DISABLED:
+                throw new InterfaceDisabledException(e);
+
+            case ILowpanInterface.ERROR_WRONG_STATE:
+                throw new WrongStateException(e);
+
+            case ILowpanInterface.ERROR_CANCELED:
+                throw new OperationCanceledException(e);
+
+            case ILowpanInterface.ERROR_JOIN_FAILED_UNKNOWN:
+                throw new JoinFailedException(e);
+
+            case ILowpanInterface.ERROR_JOIN_FAILED_AT_SCAN:
+                throw new JoinFailedAtScanException(e);
+
+            case ILowpanInterface.ERROR_JOIN_FAILED_AT_AUTH:
+                throw new JoinFailedAtAuthException(e);
+
+            case ILowpanInterface.ERROR_FORM_FAILED_AT_SCAN:
+                throw new NetworkAlreadyExistsException(e);
+
+            case ILowpanInterface.ERROR_FEATURE_NOT_SUPPORTED:
+                throw new LowpanException(
+                        e.getMessage() != null ? e.getMessage() : "Feature not supported", e);
+
+            case ILowpanInterface.ERROR_NCP_PROBLEM:
+                throw new LowpanRuntimeException(
+                        e.getMessage() != null ? e.getMessage() : "NCP problem", e);
+
+            case ILowpanInterface.ERROR_INVALID_ARGUMENT:
+                throw new LowpanRuntimeException(
+                        e.getMessage() != null ? e.getMessage() : "Invalid argument", e);
+
+            case ILowpanInterface.ERROR_UNSPECIFIED:
+            default:
+                throw new LowpanRuntimeException(e);
+        }
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/LowpanIdentity.aidl b/lowpan/java/android/net/lowpan/LowpanIdentity.aidl
new file mode 100644
index 0000000..fcef98f
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanIdentity.aidl
@@ -0,0 +1,19 @@
+/**
+ * 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.lowpan;
+
+parcelable LowpanIdentity cpp_header "android/net/lowpan/LowpanIdentity.h";
diff --git a/lowpan/java/android/net/lowpan/LowpanIdentity.java b/lowpan/java/android/net/lowpan/LowpanIdentity.java
new file mode 100644
index 0000000..6cb1f98
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanIdentity.java
@@ -0,0 +1,255 @@
+/*
+ * 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.lowpan;
+
+import android.annotation.NonNull;
+import android.icu.text.StringPrep;
+import android.icu.text.StringPrepParseException;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+import com.android.internal.util.HexDump;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * Describes an instance of a LoWPAN network.
+ *
+ * @hide
+ */
+// @SystemApi
+public class LowpanIdentity implements Parcelable {
+    private static final String TAG = LowpanIdentity.class.getSimpleName();
+
+    // Constants
+    public static final int UNSPECIFIED_CHANNEL = -1;
+    public static final int UNSPECIFIED_PANID = 0xFFFFFFFF;
+    // Builder
+
+    /** @hide */
+    // @SystemApi
+    public static class Builder {
+        private static final StringPrep stringPrep =
+                StringPrep.getInstance(StringPrep.RFC3920_RESOURCEPREP);
+
+        final LowpanIdentity mIdentity = new LowpanIdentity();
+
+        private static String escape(@NonNull byte[] bytes) {
+            StringBuffer sb = new StringBuffer();
+            for (byte b : bytes) {
+                if (b >= 32 && b <= 126) {
+                    sb.append((char) b);
+                } else {
+                    sb.append(String.format("\\0x%02x", b & 0xFF));
+                }
+            }
+            return sb.toString();
+        }
+
+        public Builder setLowpanIdentity(@NonNull LowpanIdentity x) {
+            Objects.requireNonNull(x);
+            setRawName(x.getRawName());
+            setXpanid(x.getXpanid());
+            setPanid(x.getPanid());
+            setChannel(x.getChannel());
+            setType(x.getType());
+            return this;
+        }
+
+        public Builder setName(@NonNull String name) {
+            Objects.requireNonNull(name);
+            try {
+                mIdentity.mName = stringPrep.prepare(name, StringPrep.DEFAULT);
+                mIdentity.mRawName = mIdentity.mName.getBytes(StandardCharsets.UTF_8);
+                mIdentity.mIsNameValid = true;
+            } catch (StringPrepParseException x) {
+                Log.w(TAG, x.toString());
+                setRawName(name.getBytes(StandardCharsets.UTF_8));
+            }
+            return this;
+        }
+
+        public Builder setRawName(@NonNull byte[] name) {
+            Objects.requireNonNull(name);
+            mIdentity.mRawName = name.clone();
+            mIdentity.mName = new String(name, StandardCharsets.UTF_8);
+            try {
+                String nameCheck = stringPrep.prepare(mIdentity.mName, StringPrep.DEFAULT);
+                mIdentity.mIsNameValid =
+                        Arrays.equals(nameCheck.getBytes(StandardCharsets.UTF_8), name);
+            } catch (StringPrepParseException x) {
+                Log.w(TAG, x.toString());
+                mIdentity.mIsNameValid = false;
+            }
+
+            // Non-normal names must be rendered differently to avoid confusion.
+            if (!mIdentity.mIsNameValid) {
+                mIdentity.mName = "«" + escape(name) + "»";
+            }
+
+            return this;
+        }
+
+        public Builder setXpanid(byte x[]) {
+            mIdentity.mXpanid = (x != null ? x.clone() : null);
+            return this;
+        }
+
+        public Builder setPanid(int x) {
+            mIdentity.mPanid = x;
+            return this;
+        }
+
+        public Builder setType(@NonNull String x) {
+            mIdentity.mType = x;
+            return this;
+        }
+
+        public Builder setChannel(int x) {
+            mIdentity.mChannel = x;
+            return this;
+        }
+
+        public LowpanIdentity build() {
+            return mIdentity;
+        }
+    }
+
+    LowpanIdentity() {}
+
+    // Instance Variables
+
+    private String mName = "";
+    private boolean mIsNameValid = true;
+    private byte[] mRawName = new byte[0];
+    private String mType = "";
+    private byte[] mXpanid = new byte[0];
+    private int mPanid = UNSPECIFIED_PANID;
+    private int mChannel = UNSPECIFIED_CHANNEL;
+
+    // Public Getters
+
+    public String getName() {
+        return mName;
+    }
+
+    public boolean isNameValid() {
+        return mIsNameValid;
+    }
+
+    public byte[] getRawName() {
+        return mRawName.clone();
+    }
+
+    public byte[] getXpanid() {
+        return mXpanid.clone();
+    }
+
+    public int getPanid() {
+        return mPanid;
+    }
+
+    public String getType() {
+        return mType;
+    }
+
+    public int getChannel() {
+        return mChannel;
+    }
+
+    @Override
+    public String toString() {
+        StringBuffer sb = new StringBuffer();
+
+        sb.append("Name:").append(getName());
+
+        if (mType.length() > 0) {
+            sb.append(", Type:").append(mType);
+        }
+
+        if (mXpanid.length > 0) {
+            sb.append(", XPANID:").append(HexDump.toHexString(mXpanid));
+        }
+
+        if (mPanid != UNSPECIFIED_PANID) {
+            sb.append(", PANID:").append(String.format("0x%04X", mPanid));
+        }
+
+        if (mChannel != UNSPECIFIED_CHANNEL) {
+            sb.append(", Channel:").append(mChannel);
+        }
+
+        return sb.toString();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof LowpanIdentity)) {
+            return false;
+        }
+        LowpanIdentity rhs = (LowpanIdentity) obj;
+        return Arrays.equals(mRawName, rhs.mRawName)
+                && Arrays.equals(mXpanid, rhs.mXpanid)
+                && mType.equals(rhs.mType)
+                && mPanid == rhs.mPanid
+                && mChannel == rhs.mChannel;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(
+                Arrays.hashCode(mRawName), mType, Arrays.hashCode(mXpanid), mPanid, mChannel);
+    }
+
+    /** Implement the Parcelable interface. */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /** Implement the Parcelable interface. */
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeByteArray(mRawName);
+        dest.writeString(mType);
+        dest.writeByteArray(mXpanid);
+        dest.writeInt(mPanid);
+        dest.writeInt(mChannel);
+    }
+
+    /** Implement the Parcelable interface. */
+    public static final Creator<LowpanIdentity> CREATOR =
+            new Creator<LowpanIdentity>() {
+
+                public LowpanIdentity createFromParcel(Parcel in) {
+                    Builder builder = new Builder();
+
+                    builder.setRawName(in.createByteArray());
+                    builder.setType(in.readString());
+                    builder.setXpanid(in.createByteArray());
+                    builder.setPanid(in.readInt());
+                    builder.setChannel(in.readInt());
+
+                    return builder.build();
+                }
+
+                public LowpanIdentity[] newArray(int size) {
+                    return new LowpanIdentity[size];
+                }
+            };
+}
diff --git a/lowpan/java/android/net/lowpan/LowpanInterface.java b/lowpan/java/android/net/lowpan/LowpanInterface.java
new file mode 100644
index 0000000..57e9135
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanInterface.java
@@ -0,0 +1,824 @@
+/*
+ * 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.lowpan;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.net.IpPrefix;
+import android.net.LinkAddress;
+import android.os.DeadObjectException;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.os.ServiceSpecificException;
+import android.util.Log;
+import java.util.HashMap;
+
+/**
+ * Class for managing a specific Low-power Wireless Personal Area Network (LoWPAN) interface.
+ *
+ * @hide
+ */
+// @SystemApi
+public class LowpanInterface {
+    private static final String TAG = LowpanInterface.class.getSimpleName();
+
+    /** Detached role. The interface is not currently attached to a network. */
+    public static final String ROLE_DETACHED = ILowpanInterface.ROLE_DETACHED;
+
+    /** End-device role. End devices do not route traffic for other nodes. */
+    public static final String ROLE_END_DEVICE = ILowpanInterface.ROLE_END_DEVICE;
+
+    /** Router role. Routers help route traffic around the mesh network. */
+    public static final String ROLE_ROUTER = ILowpanInterface.ROLE_ROUTER;
+
+    /**
+     * Sleepy End-Device role.
+     *
+     * <p>End devices with this role are nominally asleep, waking up periodically to check in with
+     * their parent to see if there are packets destined for them. Such devices are capable of
+     * extraordinarilly low power consumption, but packet latency can be on the order of dozens of
+     * seconds(depending on how the node is configured).
+     */
+    public static final String ROLE_SLEEPY_END_DEVICE = ILowpanInterface.ROLE_SLEEPY_END_DEVICE;
+
+    /**
+     * Sleepy-router role.
+     *
+     * <p>Routers with this role are nominally asleep, waking up periodically to check in with other
+     * routers and their children.
+     */
+    public static final String ROLE_SLEEPY_ROUTER = ILowpanInterface.ROLE_SLEEPY_ROUTER;
+
+    /** TODO: doc */
+    public static final String ROLE_LEADER = ILowpanInterface.ROLE_LEADER;
+
+    /** TODO: doc */
+    public static final String ROLE_COORDINATOR = ILowpanInterface.ROLE_COORDINATOR;
+
+    /**
+     * Offline state.
+     *
+     * <p>This is the initial state of the LoWPAN interface when the underlying driver starts. In
+     * this state the NCP is idle and not connected to any network.
+     *
+     * <p>This state can be explicitly entered by calling {@link #reset()}, {@link #leave()}, or
+     * <code>setUp(false)</code>, with the later two only working if we were not previously in the
+     * {@link #STATE_FAULT} state.
+     *
+     * @see #getState()
+     * @see #STATE_FAULT
+     */
+    public static final String STATE_OFFLINE = ILowpanInterface.STATE_OFFLINE;
+
+    /**
+     * Commissioning state.
+     *
+     * <p>The interface enters this state after a call to {@link #startCommissioningSession()}. This
+     * state may only be entered directly from the {@link #STATE_OFFLINE} state.
+     *
+     * @see #startCommissioningSession()
+     * @see #getState()
+     * @hide
+     */
+    public static final String STATE_COMMISSIONING = ILowpanInterface.STATE_COMMISSIONING;
+
+    /**
+     * Attaching state.
+     *
+     * <p>The interface enters this state when it starts the process of trying to find other nodes
+     * so that it can attach to any pre-existing network fragment, or when it is in the process of
+     * calculating the optimal values for unspecified parameters when forming a new network.
+     *
+     * <p>The interface may stay in this state for a prolonged period of time (or may spontaneously
+     * enter this state from {@link #STATE_ATTACHED}) if the underlying network technology is
+     * heirarchical (like ZigBeeIP) or if the device role is that of an "end-device" ({@link
+     * #ROLE_END_DEVICE} or {@link #ROLE_SLEEPY_END_DEVICE}). This is because such roles cannot
+     * create their own network fragments.
+     *
+     * @see #STATE_ATTACHED
+     * @see #getState()
+     */
+    public static final String STATE_ATTACHING = ILowpanInterface.STATE_ATTACHING;
+
+    /**
+     * Attached state.
+     *
+     * <p>The interface enters this state from {@link #STATE_ATTACHING} once it is actively
+     * participating on a network fragment.
+     *
+     * @see #STATE_ATTACHING
+     * @see #getState()
+     */
+    public static final String STATE_ATTACHED = ILowpanInterface.STATE_ATTACHED;
+
+    /**
+     * Fault state.
+     *
+     * <p>The interface will enter this state when the driver has detected some sort of problem from
+     * which it was not immediately able to recover.
+     *
+     * <p>This state can be entered spontaneously from any other state. Calling {@link #reset} will
+     * cause the device to return to the {@link #STATE_OFFLINE} state.
+     *
+     * @see #getState
+     * @see #STATE_OFFLINE
+     */
+    public static final String STATE_FAULT = ILowpanInterface.STATE_FAULT;
+
+    /**
+     * Network type for Thread 1.x networks.
+     *
+     * @see android.net.lowpan.LowpanIdentity#getType
+     * @see #getLowpanIdentity
+     * @hide
+     */
+    public static final String NETWORK_TYPE_THREAD_V1 = ILowpanInterface.NETWORK_TYPE_THREAD_V1;
+
+    public static final String EMPTY_PARTITION_ID = "";
+
+    /**
+     * Callback base class for LowpanInterface
+     *
+     * @hide
+     */
+    // @SystemApi
+    public abstract static class Callback {
+        public void onConnectedChanged(boolean value) {}
+
+        public void onEnabledChanged(boolean value) {}
+
+        public void onUpChanged(boolean value) {}
+
+        public void onRoleChanged(@NonNull String value) {}
+
+        public void onStateChanged(@NonNull String state) {}
+
+        public void onLowpanIdentityChanged(@NonNull LowpanIdentity value) {}
+
+        public void onLinkNetworkAdded(IpPrefix prefix) {}
+
+        public void onLinkNetworkRemoved(IpPrefix prefix) {}
+
+        public void onLinkAddressAdded(LinkAddress address) {}
+
+        public void onLinkAddressRemoved(LinkAddress address) {}
+    }
+
+    private final ILowpanInterface mBinder;
+    private final Looper mLooper;
+    private final HashMap<Integer, ILowpanInterfaceListener> mListenerMap = new HashMap<>();
+
+    /**
+     * Create a new LowpanInterface instance. Applications will almost always want to use {@link
+     * LowpanManager#getInterface LowpanManager.getInterface()} instead of this.
+     *
+     * @param context the application context
+     * @param service the Binder interface
+     * @param looper the Binder interface
+     * @hide
+     */
+    public LowpanInterface(Context context, ILowpanInterface service, Looper looper) {
+        /* We aren't currently using the context, but if we need
+         * it later on we can easily add it to the class.
+         */
+
+        mBinder = service;
+        mLooper = looper;
+    }
+
+    /**
+     * Returns the ILowpanInterface object associated with this interface.
+     *
+     * @hide
+     */
+    public ILowpanInterface getService() {
+        return mBinder;
+    }
+
+    // Public Actions
+
+    /**
+     * Form a new network with the given network information optional credential. Unspecified fields
+     * in the network information will be filled in with reasonable values. If the network
+     * credential is unspecified, one will be generated automatically.
+     *
+     * <p>This method will block until either the network was successfully formed or an error
+     * prevents the network form being formed.
+     *
+     * <p>Upon success, the interface will be up and attached to the newly formed network.
+     *
+     * @see #join(LowpanProvision)
+     */
+    public void form(@NonNull LowpanProvision provision) throws LowpanException {
+        try {
+            mBinder.form(provision);
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    /**
+     * Attempts to join a new network with the given network information. This method will block
+     * until either the network was successfully joined or an error prevented the network from being
+     * formed. Upon success, the interface will be up and attached to the newly joined network.
+     *
+     * <p>Note that “joining” is distinct from “attaching”: Joining requires at least one other peer
+     * device to be present in order for the operation to complete successfully.
+     */
+    public void join(@NonNull LowpanProvision provision) throws LowpanException {
+        try {
+            mBinder.join(provision);
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    /**
+     * Attaches to the network described by identity and credential. This is similar to {@link
+     * #join}, except that (assuming the identity and credential are valid) it will always succeed
+     * and provision the interface, even if there are no peers nearby.
+     *
+     * <p>This method will block execution until the operation has completed.
+     */
+    public void attach(@NonNull LowpanProvision provision) throws LowpanException {
+        try {
+            mBinder.attach(provision);
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    /**
+     * Bring down the network interface and forget all non-volatile details about the current
+     * network.
+     *
+     * <p>This method will block execution until the operation has completed.
+     */
+    public void leave() throws LowpanException {
+        try {
+            mBinder.leave();
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    /**
+     * Start a new commissioning session. Will fail if the interface is attached to a network or if
+     * the interface is disabled.
+     */
+    public @NonNull LowpanCommissioningSession startCommissioningSession(
+            @NonNull LowpanBeaconInfo beaconInfo) throws LowpanException {
+        try {
+            mBinder.startCommissioningSession(beaconInfo);
+
+            return new LowpanCommissioningSession(mBinder, beaconInfo, mLooper);
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    /**
+     * Reset this network interface as if it has been power cycled. Will bring the network interface
+     * down if it was previously up. Will not erase any non-volatile settings.
+     *
+     * <p>This method will block execution until the operation has completed.
+     *
+     * @hide
+     */
+    public void reset() throws LowpanException {
+        try {
+            mBinder.reset();
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    // Public Getters and Setters
+
+    /** Returns the name of this network interface. */
+    @NonNull
+    public String getName() {
+        try {
+            return mBinder.getName();
+
+        } catch (DeadObjectException x) {
+            return "";
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+    }
+
+    /**
+     * Indicates if the interface is enabled or disabled.
+     *
+     * @see #setEnabled
+     * @see android.net.lowpan.LowpanException#LOWPAN_DISABLED
+     */
+    public boolean isEnabled() {
+        try {
+            return mBinder.isEnabled();
+
+        } catch (DeadObjectException x) {
+            return false;
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+    }
+
+    /**
+     * Enables or disables the LoWPAN interface. When disabled, the interface is put into a
+     * low-power state and all commands that require the NCP to be queried will fail with {@link
+     * android.net.lowpan.LowpanException#LOWPAN_DISABLED}.
+     *
+     * @see #isEnabled
+     * @see android.net.lowpan.LowpanException#LOWPAN_DISABLED
+     * @hide
+     */
+    public void setEnabled(boolean enabled) throws LowpanException {
+        try {
+            mBinder.setEnabled(enabled);
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    /**
+     * Indicates if the network interface is up or down.
+     *
+     * @hide
+     */
+    public boolean isUp() {
+        try {
+            return mBinder.isUp();
+
+        } catch (DeadObjectException x) {
+            return false;
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+    }
+
+    /**
+     * Indicates if there is at least one peer in range.
+     *
+     * @return <code>true</code> if we have at least one other peer in range, <code>false</code>
+     *     otherwise.
+     */
+    public boolean isConnected() {
+        try {
+            return mBinder.isConnected();
+
+        } catch (DeadObjectException x) {
+            return false;
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+    }
+
+    /**
+     * Indicates if this interface is currently commissioned onto an existing network. If the
+     * interface is commissioned, the interface may be brought up using setUp().
+     */
+    public boolean isCommissioned() {
+        try {
+            return mBinder.isCommissioned();
+
+        } catch (DeadObjectException x) {
+            return false;
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+    }
+
+    /**
+     * Get interface state
+     *
+     * <h3>State Diagram</h3>
+     *
+     * <img src="LowpanInterface-1.png" />
+     *
+     * @return The current state of the interface.
+     * @see #STATE_OFFLINE
+     * @see #STATE_COMMISSIONING
+     * @see #STATE_ATTACHING
+     * @see #STATE_ATTACHED
+     * @see #STATE_FAULT
+     */
+    public String getState() {
+        try {
+            return mBinder.getState();
+
+        } catch (DeadObjectException x) {
+            return STATE_FAULT;
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+    }
+
+    /** Get network partition/fragment identifier. */
+    public String getPartitionId() {
+        try {
+            return mBinder.getPartitionId();
+
+        } catch (DeadObjectException x) {
+            return EMPTY_PARTITION_ID;
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+    }
+
+    /** TODO: doc */
+    public LowpanIdentity getLowpanIdentity() {
+        try {
+            return mBinder.getLowpanIdentity();
+
+        } catch (DeadObjectException x) {
+            return new LowpanIdentity();
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+    }
+
+    /** TODO: doc */
+    @NonNull
+    public String getRole() {
+        try {
+            return mBinder.getRole();
+
+        } catch (DeadObjectException x) {
+            return ROLE_DETACHED;
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+    }
+
+    /** TODO: doc */
+    @Nullable
+    public LowpanCredential getLowpanCredential() {
+        try {
+            return mBinder.getLowpanCredential();
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+    }
+
+    public @NonNull String[] getSupportedNetworkTypes() throws LowpanException {
+        try {
+            return mBinder.getSupportedNetworkTypes();
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    public @NonNull LowpanChannelInfo[] getSupportedChannels() throws LowpanException {
+        try {
+            return mBinder.getSupportedChannels();
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    // Listener Support
+
+    /**
+     * Registers a subclass of {@link LowpanInterface.Callback} to receive events.
+     *
+     * @param cb Subclass of {@link LowpanInterface.Callback} which will receive events.
+     * @param handler If not <code>null</code>, events will be dispatched via the given handler
+     *     object. If <code>null</code>, the thread upon which events will be dispatched is
+     *     unspecified.
+     * @see #registerCallback(Callback)
+     * @see #unregisterCallback(Callback)
+     */
+    public void registerCallback(@NonNull Callback cb, @Nullable Handler handler) {
+        ILowpanInterfaceListener.Stub listenerBinder =
+                new ILowpanInterfaceListener.Stub() {
+                    private Handler mHandler;
+
+                    {
+                        if (handler != null) {
+                            mHandler = handler;
+                        } else if (mLooper != null) {
+                            mHandler = new Handler(mLooper);
+                        } else {
+                            mHandler = new Handler();
+                        }
+                    }
+
+                    @Override
+                    public void onEnabledChanged(boolean value) {
+                        mHandler.post(() -> cb.onEnabledChanged(value));
+                    }
+
+                    @Override
+                    public void onConnectedChanged(boolean value) {
+                        mHandler.post(() -> cb.onConnectedChanged(value));
+                    }
+
+                    @Override
+                    public void onUpChanged(boolean value) {
+                        mHandler.post(() -> cb.onUpChanged(value));
+                    }
+
+                    @Override
+                    public void onRoleChanged(String value) {
+                        mHandler.post(() -> cb.onRoleChanged(value));
+                    }
+
+                    @Override
+                    public void onStateChanged(String value) {
+                        mHandler.post(() -> cb.onStateChanged(value));
+                    }
+
+                    @Override
+                    public void onLowpanIdentityChanged(LowpanIdentity value) {
+                        mHandler.post(() -> cb.onLowpanIdentityChanged(value));
+                    }
+
+                    @Override
+                    public void onLinkNetworkAdded(IpPrefix value) {
+                        mHandler.post(() -> cb.onLinkNetworkAdded(value));
+                    }
+
+                    @Override
+                    public void onLinkNetworkRemoved(IpPrefix value) {
+                        mHandler.post(() -> cb.onLinkNetworkRemoved(value));
+                    }
+
+                    @Override
+                    public void onLinkAddressAdded(String value) {
+                        LinkAddress la;
+                        try {
+                            la = new LinkAddress(value);
+                        } catch (IllegalArgumentException x) {
+                            Log.e(
+                                    TAG,
+                                    "onLinkAddressAdded: Bad LinkAddress \"" + value + "\", " + x);
+                            return;
+                        }
+                        mHandler.post(() -> cb.onLinkAddressAdded(la));
+                    }
+
+                    @Override
+                    public void onLinkAddressRemoved(String value) {
+                        LinkAddress la;
+                        try {
+                            la = new LinkAddress(value);
+                        } catch (IllegalArgumentException x) {
+                            Log.e(
+                                    TAG,
+                                    "onLinkAddressRemoved: Bad LinkAddress \""
+                                            + value
+                                            + "\", "
+                                            + x);
+                            return;
+                        }
+                        mHandler.post(() -> cb.onLinkAddressRemoved(la));
+                    }
+
+                    @Override
+                    public void onReceiveFromCommissioner(byte[] packet) {
+                        // This is only used by the LowpanCommissioningSession.
+                    }
+                };
+        try {
+            mBinder.addListener(listenerBinder);
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+
+        synchronized (mListenerMap) {
+            mListenerMap.put(System.identityHashCode(cb), listenerBinder);
+        }
+    }
+
+    /**
+     * Registers a subclass of {@link LowpanInterface.Callback} to receive events.
+     *
+     * <p>The thread upon which events will be dispatched is unspecified.
+     *
+     * @param cb Subclass of {@link LowpanInterface.Callback} which will receive events.
+     * @see #registerCallback(Callback, Handler)
+     * @see #unregisterCallback(Callback)
+     */
+    public void registerCallback(Callback cb) {
+        registerCallback(cb, null);
+    }
+
+    /**
+     * Unregisters a previously registered callback class.
+     *
+     * @param cb Subclass of {@link LowpanInterface.Callback} which was previously registered to
+     *     receive events.
+     * @see #registerCallback(Callback, Handler)
+     * @see #registerCallback(Callback)
+     */
+    public void unregisterCallback(Callback cb) {
+        int hashCode = System.identityHashCode(cb);
+        synchronized (mListenerMap) {
+            ILowpanInterfaceListener listenerBinder = mListenerMap.get(hashCode);
+
+            if (listenerBinder != null) {
+                mListenerMap.remove(hashCode);
+
+                try {
+                    mBinder.removeListener(listenerBinder);
+                } catch (DeadObjectException x) {
+                    // We ignore a dead object exception because that
+                    // pretty clearly means our callback isn't registered.
+                } catch (RemoteException x) {
+                    throw x.rethrowAsRuntimeException();
+                }
+            }
+        }
+    }
+
+    // Active and Passive Scanning
+
+    /**
+     * Creates a new {@link android.net.lowpan.LowpanScanner} object for this interface.
+     *
+     * <p>This method allocates a new unique object for each call.
+     *
+     * @see android.net.lowpan.LowpanScanner
+     */
+    public @NonNull LowpanScanner createScanner() {
+        return new LowpanScanner(mBinder);
+    }
+
+    // Route Management
+
+    /**
+     * Makes a copy of the internal list of LinkAddresses.
+     *
+     * @hide
+     */
+    public LinkAddress[] getLinkAddresses() throws LowpanException {
+        try {
+            String[] linkAddressStrings = mBinder.getLinkAddresses();
+            LinkAddress[] ret = new LinkAddress[linkAddressStrings.length];
+            int i = 0;
+            for (String str : linkAddressStrings) {
+                ret[i++] = new LinkAddress(str);
+            }
+            return ret;
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    /**
+     * Makes a copy of the internal list of networks reachable on via this link.
+     *
+     * @hide
+     */
+    public IpPrefix[] getLinkNetworks() throws LowpanException {
+        try {
+            return mBinder.getLinkNetworks();
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    /**
+     * Advertise the given IP prefix as an on-mesh prefix.
+     *
+     * @hide
+     */
+    public void addOnMeshPrefix(IpPrefix prefix, int flags) throws LowpanException {
+        try {
+            mBinder.addOnMeshPrefix(prefix, flags);
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    /**
+     * Remove an IP prefix previously advertised by this device from the list of advertised on-mesh
+     * prefixes.
+     *
+     * @hide
+     */
+    public void removeOnMeshPrefix(IpPrefix prefix) {
+        try {
+            mBinder.removeOnMeshPrefix(prefix);
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            // Catch and ignore all service exceptions
+            Log.e(TAG, x.toString());
+        }
+    }
+
+    /**
+     * Advertise this device to other devices on the mesh network as having a specific route to the
+     * given network. This device will then receive forwarded traffic for that network.
+     *
+     * @hide
+     */
+    public void addExternalRoute(IpPrefix prefix, int flags) throws LowpanException {
+        try {
+            mBinder.addExternalRoute(prefix, flags);
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    /**
+     * Revoke a previously advertised specific route to the given network.
+     *
+     * @hide
+     */
+    public void removeExternalRoute(IpPrefix prefix) {
+        try {
+            mBinder.removeExternalRoute(prefix);
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            // Catch and ignore all service exceptions
+            Log.e(TAG, x.toString());
+        }
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/LowpanManager.java b/lowpan/java/android/net/lowpan/LowpanManager.java
new file mode 100644
index 0000000..2d974ee
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanManager.java
@@ -0,0 +1,313 @@
+/*
+ * 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.lowpan;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import java.lang.ref.WeakReference;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+/**
+ * Manager object for looking up LoWPAN interfaces.
+ *
+ * @hide
+ */
+// @SystemApi
+public class LowpanManager {
+    private static final String TAG = LowpanManager.class.getSimpleName();
+
+    /** @hide */
+    // @SystemApi
+    public abstract static class Callback {
+        public void onInterfaceAdded(LowpanInterface lowpanInterface) {}
+
+        public void onInterfaceRemoved(LowpanInterface lowpanInterface) {}
+    }
+
+    private final Map<Integer, ILowpanManagerListener> mListenerMap = new HashMap<>();
+    private final Map<String, LowpanInterface> mInterfaceCache = new HashMap<>();
+
+    /* This is a WeakHashMap because we don't want to hold onto
+     * a strong reference to ILowpanInterface, so that it can be
+     * garbage collected if it isn't being used anymore. Since
+     * the value class holds onto this specific ILowpanInterface,
+     * we also need to have a weak reference to the value.
+     * This design pattern allows us to skip removal of items
+     * from this Map without leaking memory.
+     */
+    private final Map<ILowpanInterface, WeakReference<LowpanInterface>> mBinderCache =
+            new WeakHashMap<>();
+
+    private final ILowpanManager mService;
+    private final Context mContext;
+    private final Looper mLooper;
+
+    // Static Methods
+
+    public static LowpanManager from(Context context) {
+        return (LowpanManager) context.getSystemService(Context.LOWPAN_SERVICE);
+    }
+
+    /** @hide */
+    public static LowpanManager getManager() {
+        IBinder binder = ServiceManager.getService(Context.LOWPAN_SERVICE);
+
+        if (binder != null) {
+            ILowpanManager service = ILowpanManager.Stub.asInterface(binder);
+            return new LowpanManager(service);
+        }
+
+        return null;
+    }
+
+    // Constructors
+
+    LowpanManager(ILowpanManager service) {
+        mService = service;
+        mContext = null;
+        mLooper = null;
+    }
+
+    /**
+     * Create a new LowpanManager instance. Applications will almost always want to use {@link
+     * android.content.Context#getSystemService Context.getSystemService()} to retrieve the standard
+     * {@link android.content.Context#LOWPAN_SERVICE Context.LOWPAN_SERVICE}.
+     *
+     * @param context the application context
+     * @param service the Binder interface
+     * @param looper the default Looper to run callbacks on
+     * @hide - hide this because it takes in a parameter of type ILowpanManager, which is a system
+     *     private class.
+     */
+    public LowpanManager(Context context, ILowpanManager service, Looper looper) {
+        mContext = context;
+        mService = service;
+        mLooper = looper;
+    }
+
+    /** @hide */
+    @Nullable
+    public LowpanInterface getInterface(@NonNull ILowpanInterface ifaceService) {
+        LowpanInterface iface = null;
+
+        try {
+            synchronized (mBinderCache) {
+                if (mBinderCache.containsKey(ifaceService)) {
+                    iface = mBinderCache.get(ifaceService).get();
+                }
+
+                if (iface == null) {
+                    String ifaceName = ifaceService.getName();
+
+                    iface = new LowpanInterface(mContext, ifaceService, mLooper);
+
+                    synchronized (mInterfaceCache) {
+                        mInterfaceCache.put(iface.getName(), iface);
+                    }
+
+                    mBinderCache.put(ifaceService, new WeakReference(iface));
+
+                    /* Make sure we remove the object from the
+                     * interface cache if the associated service
+                     * dies.
+                     */
+                    ifaceService
+                            .asBinder()
+                            .linkToDeath(
+                                    new IBinder.DeathRecipient() {
+                                        @Override
+                                        public void binderDied() {
+                                            synchronized (mInterfaceCache) {
+                                                LowpanInterface iface =
+                                                        mInterfaceCache.get(ifaceName);
+
+                                                if ((iface != null)
+                                                        && (iface.getService() == ifaceService)) {
+                                                    mInterfaceCache.remove(ifaceName);
+                                                }
+                                            }
+                                        }
+                                    },
+                                    0);
+                }
+            }
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+
+        return iface;
+    }
+
+    /**
+     * Returns a reference to the requested LowpanInterface object. If the given interface doesn't
+     * exist, or it is not a LoWPAN interface, returns null.
+     */
+    @Nullable
+    public LowpanInterface getInterface(@NonNull String name) {
+        LowpanInterface iface = null;
+
+        try {
+            /* This synchronized block covers both branches of the enclosed
+             * if() statement in order to avoid a race condition. Two threads
+             * calling getInterface() with the same name would race to create
+             * the associated LowpanInterface object, creating two of them.
+             * Having the whole block be synchronized avoids that race.
+             */
+            synchronized (mInterfaceCache) {
+                if (mInterfaceCache.containsKey(name)) {
+                    iface = mInterfaceCache.get(name);
+
+                } else {
+                    ILowpanInterface ifaceService = mService.getInterface(name);
+
+                    if (ifaceService != null) {
+                        iface = getInterface(ifaceService);
+                    }
+                }
+            }
+        } catch (RemoteException x) {
+            throw x.rethrowFromSystemServer();
+        }
+
+        return iface;
+    }
+
+    /**
+     * Returns a reference to the first registered LowpanInterface object. If there are no LoWPAN
+     * interfaces registered, returns null.
+     */
+    @Nullable
+    public LowpanInterface getInterface() {
+        String[] ifaceList = getInterfaceList();
+        if (ifaceList.length > 0) {
+            return getInterface(ifaceList[0]);
+        }
+        return null;
+    }
+
+    /**
+     * Returns a string array containing the names of LoWPAN interfaces. This list may contain fewer
+     * interfaces if the calling process does not have permissions to see individual interfaces.
+     */
+    @NonNull
+    public String[] getInterfaceList() {
+        try {
+            return mService.getInterfaceList();
+        } catch (RemoteException x) {
+            throw x.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Registers a callback object to receive notifications when LoWPAN interfaces are added or
+     * removed.
+     *
+     * @hide
+     */
+    public void registerCallback(@NonNull Callback cb, @Nullable Handler handler)
+            throws LowpanException {
+        ILowpanManagerListener.Stub listenerBinder =
+                new ILowpanManagerListener.Stub() {
+                    private Handler mHandler;
+
+                    {
+                        if (handler != null) {
+                            mHandler = handler;
+                        } else if (mLooper != null) {
+                            mHandler = new Handler(mLooper);
+                        } else {
+                            mHandler = new Handler();
+                        }
+                    }
+
+                    @Override
+                    public void onInterfaceAdded(ILowpanInterface ifaceService) {
+                        Runnable runnable =
+                                () -> {
+                                    LowpanInterface iface = getInterface(ifaceService);
+
+                                    if (iface != null) {
+                                        cb.onInterfaceAdded(iface);
+                                    }
+                                };
+
+                        mHandler.post(runnable);
+                    }
+
+                    @Override
+                    public void onInterfaceRemoved(ILowpanInterface ifaceService) {
+                        Runnable runnable =
+                                () -> {
+                                    LowpanInterface iface = getInterface(ifaceService);
+
+                                    if (iface != null) {
+                                        cb.onInterfaceRemoved(iface);
+                                    }
+                                };
+
+                        mHandler.post(runnable);
+                    }
+                };
+        try {
+            mService.addListener(listenerBinder);
+        } catch (RemoteException x) {
+            throw x.rethrowFromSystemServer();
+        }
+
+        synchronized (mListenerMap) {
+            mListenerMap.put(Integer.valueOf(System.identityHashCode(cb)), listenerBinder);
+        }
+    }
+
+    /** @hide */
+    public void registerCallback(@NonNull Callback cb) throws LowpanException {
+        registerCallback(cb, null);
+    }
+
+    /**
+     * Unregisters a previously registered {@link LowpanManager.Callback} object.
+     *
+     * @hide
+     */
+    public void unregisterCallback(@NonNull Callback cb) {
+        Integer hashCode = Integer.valueOf(System.identityHashCode(cb));
+        ILowpanManagerListener listenerBinder = null;
+
+        synchronized (mListenerMap) {
+            listenerBinder = mListenerMap.get(hashCode);
+            mListenerMap.remove(hashCode);
+        }
+
+        if (listenerBinder != null) {
+            try {
+                mService.removeListener(listenerBinder);
+            } catch (RemoteException x) {
+                throw x.rethrowFromSystemServer();
+            }
+        } else {
+            throw new RuntimeException("Attempt to unregister an unknown callback");
+        }
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/LowpanProperties.java b/lowpan/java/android/net/lowpan/LowpanProperties.java
new file mode 100644
index 0000000..cc45ff85
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanProperties.java
@@ -0,0 +1,56 @@
+/*
+ * 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.lowpan;
+
+/** {@hide} */
+public final class LowpanProperties {
+
+    public static final LowpanProperty<int[]> KEY_CHANNEL_MASK =
+            new LowpanStandardProperty("android.net.lowpan.property.CHANNEL_MASK", int[].class);
+
+    public static final LowpanProperty<Integer> KEY_MAX_TX_POWER =
+            new LowpanStandardProperty("android.net.lowpan.property.MAX_TX_POWER", Integer.class);
+
+    /** @hide */
+    private LowpanProperties() {}
+
+    /** @hide */
+    static final class LowpanStandardProperty<T> extends LowpanProperty<T> {
+        private final String mName;
+        private final Class<T> mType;
+
+        LowpanStandardProperty(String name, Class<T> type) {
+            mName = name;
+            mType = type;
+        }
+
+        @Override
+        public String getName() {
+            return mName;
+        }
+
+        @Override
+        public Class<T> getType() {
+            return mType;
+        }
+
+        @Override
+        public String toString() {
+            return getName();
+        }
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/LowpanProperty.java b/lowpan/java/android/net/lowpan/LowpanProperty.java
new file mode 100644
index 0000000..7f26986
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanProperty.java
@@ -0,0 +1,34 @@
+/*
+ * 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.lowpan;
+
+import java.util.Map;
+
+/** {@hide} */
+public abstract class LowpanProperty<T> {
+    public abstract String getName();
+
+    public abstract Class<T> getType();
+
+    public void putInMap(Map map, T value) {
+        map.put(getName(), value);
+    }
+
+    public T getFromMap(Map map) {
+        return (T) map.get(getName());
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/LowpanProvision.aidl b/lowpan/java/android/net/lowpan/LowpanProvision.aidl
new file mode 100644
index 0000000..100e9dc
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanProvision.aidl
@@ -0,0 +1,19 @@
+/**
+ * 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.lowpan;
+
+parcelable LowpanProvision cpp_header "android/net/lowpan/LowpanProvision.h";
diff --git a/lowpan/java/android/net/lowpan/LowpanProvision.java b/lowpan/java/android/net/lowpan/LowpanProvision.java
new file mode 100644
index 0000000..f126003
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanProvision.java
@@ -0,0 +1,149 @@
+/*
+ * 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.lowpan;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+import java.util.Objects;
+
+/**
+ * Describes the information needed to describe a network
+ *
+ * @hide
+ */
+// @SystemApi
+public class LowpanProvision implements Parcelable {
+
+    // Builder
+
+    /** @hide */
+    // @SystemApi
+    public static class Builder {
+        private final LowpanProvision provision = new LowpanProvision();
+
+        public Builder setLowpanIdentity(@NonNull LowpanIdentity identity) {
+            provision.mIdentity = identity;
+            return this;
+        }
+
+        public Builder setLowpanCredential(@NonNull LowpanCredential credential) {
+            provision.mCredential = credential;
+            return this;
+        }
+
+        public LowpanProvision build() {
+            return provision;
+        }
+    }
+
+    private LowpanProvision() {}
+
+    // Instance Variables
+
+    private LowpanIdentity mIdentity = new LowpanIdentity();
+    private LowpanCredential mCredential = null;
+
+    // Public Getters and Setters
+
+    @NonNull
+    public LowpanIdentity getLowpanIdentity() {
+        return mIdentity;
+    }
+
+    @Nullable
+    public LowpanCredential getLowpanCredential() {
+        return mCredential;
+    }
+
+    @Override
+    public String toString() {
+        StringBuffer sb = new StringBuffer();
+
+        sb.append("LowpanProvision { identity => ").append(mIdentity.toString());
+
+        if (mCredential != null) {
+            sb.append(", credential => ").append(mCredential.toString());
+        }
+
+        sb.append("}");
+
+        return sb.toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mIdentity, mCredential);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof LowpanProvision)) {
+            return false;
+        }
+        LowpanProvision rhs = (LowpanProvision) obj;
+
+        if (!mIdentity.equals(rhs.mIdentity)) {
+            return false;
+        }
+
+        if (!Objects.equals(mCredential, rhs.mCredential)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /** Implement the Parcelable interface. */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /** Implement the Parcelable interface. */
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        mIdentity.writeToParcel(dest, flags);
+        if (mCredential == null) {
+            dest.writeBoolean(false);
+        } else {
+            dest.writeBoolean(true);
+            mCredential.writeToParcel(dest, flags);
+        }
+    }
+
+    /** Implement the Parcelable interface. */
+    public static final Creator<LowpanProvision> CREATOR =
+            new Creator<LowpanProvision>() {
+                public LowpanProvision createFromParcel(Parcel in) {
+                    Builder builder = new Builder();
+
+                    builder.setLowpanIdentity(LowpanIdentity.CREATOR.createFromParcel(in));
+
+                    if (in.readBoolean()) {
+                        builder.setLowpanCredential(LowpanCredential.CREATOR.createFromParcel(in));
+                    }
+
+                    return builder.build();
+                }
+
+                public LowpanProvision[] newArray(int size) {
+                    return new LowpanProvision[size];
+                }
+            };
+};
diff --git a/lowpan/java/android/net/lowpan/LowpanRuntimeException.java b/lowpan/java/android/net/lowpan/LowpanRuntimeException.java
new file mode 100644
index 0000000..71a5a13
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanRuntimeException.java
@@ -0,0 +1,42 @@
+/*
+ * 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.lowpan;
+
+import android.util.AndroidRuntimeException;
+
+/**
+ * Generic runtime exception for LoWPAN operations.
+ *
+ * @hide
+ */
+// @SystemApi
+public class LowpanRuntimeException extends AndroidRuntimeException {
+
+    public LowpanRuntimeException() {}
+
+    public LowpanRuntimeException(String message) {
+        super(message);
+    }
+
+    public LowpanRuntimeException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public LowpanRuntimeException(Exception cause) {
+        super(cause);
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/LowpanScanner.java b/lowpan/java/android/net/lowpan/LowpanScanner.java
new file mode 100644
index 0000000..59156c4
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/LowpanScanner.java
@@ -0,0 +1,326 @@
+/*
+ * 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.lowpan;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Handler;
+import android.os.RemoteException;
+import android.os.ServiceSpecificException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * LoWPAN Scanner
+ *
+ * <p>This class allows performing network (active) scans and energy (passive) scans.
+ *
+ * @see LowpanInterface
+ * @hide
+ */
+// @SystemApi
+public class LowpanScanner {
+    private static final String TAG = LowpanScanner.class.getSimpleName();
+
+    // Public Classes
+
+    /**
+     * Callback base class for LowpanScanner
+     *
+     * @hide
+     */
+    // @SystemApi
+    public abstract static class Callback {
+        public void onNetScanBeacon(LowpanBeaconInfo beacon) {}
+
+        public void onEnergyScanResult(LowpanEnergyScanResult result) {}
+
+        public void onScanFinished() {}
+    }
+
+    // Instance Variables
+
+    private ILowpanInterface mBinder;
+    private Callback mCallback = null;
+    private Handler mHandler = null;
+    private ArrayList<Integer> mChannelMask = null;
+    private int mTxPower = Integer.MAX_VALUE;
+
+    // Constructors/Accessors and Exception Glue
+
+    LowpanScanner(@NonNull ILowpanInterface binder) {
+        mBinder = binder;
+    }
+
+    /** Sets an instance of {@link LowpanScanner.Callback} to receive events. */
+    public synchronized void setCallback(@Nullable Callback cb, @Nullable Handler handler) {
+        mCallback = cb;
+        mHandler = handler;
+    }
+
+    /** Sets an instance of {@link LowpanScanner.Callback} to receive events. */
+    public void setCallback(@Nullable Callback cb) {
+        setCallback(cb, null);
+    }
+
+    /**
+     * Sets the channel mask to use when scanning.
+     *
+     * @param mask The channel mask to use when scanning. If <code>null</code>, any previously set
+     *     channel mask will be cleared and all channels not masked by the current regulatory zone
+     *     will be scanned.
+     */
+    public void setChannelMask(@Nullable Collection<Integer> mask) {
+        if (mask == null) {
+            mChannelMask = null;
+        } else {
+            if (mChannelMask == null) {
+                mChannelMask = new ArrayList<>();
+            } else {
+                mChannelMask.clear();
+            }
+            mChannelMask.addAll(mask);
+        }
+    }
+
+    /**
+     * Gets the current channel mask.
+     *
+     * @return the current channel mask, or <code>null</code> if no channel mask is currently set.
+     */
+    public @Nullable Collection<Integer> getChannelMask() {
+        return (Collection<Integer>) mChannelMask.clone();
+    }
+
+    /**
+     * Adds a channel to the channel mask used for scanning.
+     *
+     * <p>If a channel mask was previously <code>null</code>, a new one is created containing only
+     * this channel. May be called multiple times to add additional channels ot the channel mask.
+     *
+     * @see #setChannelMask
+     * @see #getChannelMask
+     * @see #getTxPower
+     */
+    public void addChannel(int channel) {
+        if (mChannelMask == null) {
+            mChannelMask = new ArrayList<>();
+        }
+        mChannelMask.add(Integer.valueOf(channel));
+    }
+
+    /**
+     * Sets the maximum transmit power to be used for active scanning.
+     *
+     * <p>The actual transmit power used is the lesser of this value and the currently configured
+     * maximum transmit power for the interface.
+     *
+     * @see #getTxPower
+     */
+    public void setTxPower(int txPower) {
+        mTxPower = txPower;
+    }
+
+    /**
+     * Gets the maximum transmit power used for active scanning.
+     *
+     * @see #setTxPower
+     */
+    public int getTxPower() {
+        return mTxPower;
+    }
+
+    private Map<String, Object> createScanOptionMap() {
+        Map<String, Object> map = new HashMap();
+
+        if (mChannelMask != null) {
+            LowpanProperties.KEY_CHANNEL_MASK.putInMap(
+                    map, mChannelMask.stream().mapToInt(i -> i).toArray());
+        }
+
+        if (mTxPower != Integer.MAX_VALUE) {
+            LowpanProperties.KEY_MAX_TX_POWER.putInMap(map, Integer.valueOf(mTxPower));
+        }
+
+        return map;
+    }
+
+    /**
+     * Start a network scan.
+     *
+     * <p>This method will return once the scan has started.
+     *
+     * @see #stopNetScan
+     */
+    public void startNetScan() throws LowpanException {
+        Map<String, Object> map = createScanOptionMap();
+
+        ILowpanNetScanCallback binderListener =
+                new ILowpanNetScanCallback.Stub() {
+                    public void onNetScanBeacon(LowpanBeaconInfo beaconInfo) {
+                        Callback callback;
+                        Handler handler;
+
+                        synchronized (LowpanScanner.this) {
+                            callback = mCallback;
+                            handler = mHandler;
+                        }
+
+                        if (callback == null) {
+                            return;
+                        }
+
+                        Runnable runnable = () -> callback.onNetScanBeacon(beaconInfo);
+
+                        if (handler != null) {
+                            handler.post(runnable);
+                        } else {
+                            runnable.run();
+                        }
+                    }
+
+                    public void onNetScanFinished() {
+                        Callback callback;
+                        Handler handler;
+
+                        synchronized (LowpanScanner.this) {
+                            callback = mCallback;
+                            handler = mHandler;
+                        }
+
+                        if (callback == null) {
+                            return;
+                        }
+
+                        Runnable runnable = () -> callback.onScanFinished();
+
+                        if (handler != null) {
+                            handler.post(runnable);
+                        } else {
+                            runnable.run();
+                        }
+                    }
+                };
+
+        try {
+            mBinder.startNetScan(map, binderListener);
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    /**
+     * Stop a network scan currently in progress.
+     *
+     * @see #startNetScan
+     */
+    public void stopNetScan() {
+        try {
+            mBinder.stopNetScan();
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+    }
+
+    /**
+     * Start an energy scan.
+     *
+     * <p>This method will return once the scan has started.
+     *
+     * @see #stopEnergyScan
+     */
+    public void startEnergyScan() throws LowpanException {
+        Map<String, Object> map = createScanOptionMap();
+
+        ILowpanEnergyScanCallback binderListener =
+                new ILowpanEnergyScanCallback.Stub() {
+                    public void onEnergyScanResult(int channel, int rssi) {
+                        Callback callback = mCallback;
+                        Handler handler = mHandler;
+
+                        if (callback == null) {
+                            return;
+                        }
+
+                        Runnable runnable =
+                                () -> {
+                                    if (callback != null) {
+                                        LowpanEnergyScanResult result =
+                                                new LowpanEnergyScanResult();
+                                        result.setChannel(channel);
+                                        result.setMaxRssi(rssi);
+                                        callback.onEnergyScanResult(result);
+                                    }
+                                };
+
+                        if (handler != null) {
+                            handler.post(runnable);
+                        } else {
+                            runnable.run();
+                        }
+                    }
+
+                    public void onEnergyScanFinished() {
+                        Callback callback = mCallback;
+                        Handler handler = mHandler;
+
+                        if (callback == null) {
+                            return;
+                        }
+
+                        Runnable runnable = () -> callback.onScanFinished();
+
+                        if (handler != null) {
+                            handler.post(runnable);
+                        } else {
+                            runnable.run();
+                        }
+                    }
+                };
+
+        try {
+            mBinder.startEnergyScan(map, binderListener);
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+
+        } catch (ServiceSpecificException x) {
+            throw LowpanException.rethrowFromServiceSpecificException(x);
+        }
+    }
+
+    /**
+     * Stop an energy scan currently in progress.
+     *
+     * @see #startEnergyScan
+     */
+    public void stopEnergyScan() {
+        try {
+            mBinder.stopEnergyScan();
+
+        } catch (RemoteException x) {
+            throw x.rethrowAsRuntimeException();
+        }
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/NetworkAlreadyExistsException.java b/lowpan/java/android/net/lowpan/NetworkAlreadyExistsException.java
new file mode 100644
index 0000000..90ef498
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/NetworkAlreadyExistsException.java
@@ -0,0 +1,41 @@
+/*
+ * 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.lowpan;
+
+/**
+ * Exception indicating the form operation found a network nearby with the same identity.
+ *
+ * @see LowpanInterface
+ * @hide
+ */
+// @SystemApi
+public class NetworkAlreadyExistsException extends LowpanException {
+
+    public NetworkAlreadyExistsException() {}
+
+    public NetworkAlreadyExistsException(String message) {
+        super(message, null);
+    }
+
+    public NetworkAlreadyExistsException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public NetworkAlreadyExistsException(Exception cause) {
+        super(cause);
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/OperationCanceledException.java b/lowpan/java/android/net/lowpan/OperationCanceledException.java
new file mode 100644
index 0000000..fcafe3a
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/OperationCanceledException.java
@@ -0,0 +1,41 @@
+/*
+ * 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.lowpan;
+
+/**
+ * Exception indicating this operation was canceled by the driver before it could finish.
+ *
+ * @see LowpanInterface
+ * @hide
+ */
+// @SystemApi
+public class OperationCanceledException extends LowpanException {
+
+    public OperationCanceledException() {}
+
+    public OperationCanceledException(String message) {
+        super(message);
+    }
+
+    public OperationCanceledException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    protected OperationCanceledException(Exception cause) {
+        super(cause);
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/WrongStateException.java b/lowpan/java/android/net/lowpan/WrongStateException.java
new file mode 100644
index 0000000..3565419
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/WrongStateException.java
@@ -0,0 +1,41 @@
+/*
+ * 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.lowpan;
+
+/**
+ * Exception indicating the interface is the wrong state for an operation.
+ *
+ * @see LowpanInterface
+ * @hide
+ */
+// @SystemApi
+public class WrongStateException extends LowpanException {
+
+    public WrongStateException() {}
+
+    public WrongStateException(String message) {
+        super(message);
+    }
+
+    public WrongStateException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    protected WrongStateException(Exception cause) {
+        super(cause);
+    }
+}
diff --git a/lowpan/java/android/net/lowpan/package.html b/lowpan/java/android/net/lowpan/package.html
new file mode 100644
index 0000000..342e32ee
--- /dev/null
+++ b/lowpan/java/android/net/lowpan/package.html
@@ -0,0 +1,29 @@
+<HTML>
+<BODY>
+<p>@SystemApi</p>
+<!-- @hide -->
+<p>Provides classes to manage Low-power Wireless Personal Area Network (LoWPAN) functionality on the device.
+Examples of such network technologies include <a href="http://threadgroup.org/">Thread</a> and
+<a href="http://www.zigbee.org/zigbee-for-developers/network-specifications/zigbeeip/">ZigBee IP</a>.</p>
+<p>The LoWPAN APIs provide a means by which applications can communicate
+with the lower-level wireless stack that provides LoWPAN network access.</p>
+
+<p>Some APIs may require the following user permissions:</p>
+<ul>
+  <li>{@link android.Manifest.permission#ACCESS_LOWPAN_STATE}</li>
+  <li>{@link android.Manifest.permission#CHANGE_LOWPAN_STATE}</li>
+  <li>TBD</li>
+</ul>
+
+<p class="note"><strong>Note:</strong> Not all Android-powered devices provide LoWPAN functionality.
+If your application uses these APIs, declare so with a <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+element in the manifest file:</p>
+<pre>
+&lt;manifest ...>
+    &lt;uses-feature android:name="android.hardware.lowpan" />
+    ...
+&lt;/manifest>
+</pre>
+</BODY>
+</HTML>
diff --git a/lowpan/tests/Android.mk b/lowpan/tests/Android.mk
new file mode 100644
index 0000000..bb0a944
--- /dev/null
+++ b/lowpan/tests/Android.mk
@@ -0,0 +1,65 @@
+# 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+# Make test APK
+# ============================================================
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+# This list is generated from the java source files in this module
+# The list is a comma separated list of class names with * matching zero or more characters.
+# Example:
+#   Input files: src/com/android/server/lowpan/Test.java src/com/android/server/lowpan/AnotherTest.java
+#   Generated exclude list: com.android.server.lowpan.Test*,com.android.server.lowpan.AnotherTest*
+
+# Filter all src files to just java files
+local_java_files := $(filter %.java,$(LOCAL_SRC_FILES))
+# Transform java file names into full class names.
+# This only works if the class name matches the file name and the directory structure
+# matches the package.
+local_classes := $(subst /,.,$(patsubst src/%.java,%,$(local_java_files)))
+# Utility variables to allow replacing a space with a comma
+comma:= ,
+empty:=
+space:= $(empty) $(empty)
+# Convert class name list to jacoco exclude list
+# This appends a * to all classes and replace the space separators with commas.
+# These patterns will match all classes in this module and their inner classes.
+jacoco_exclude := $(subst $(space),$(comma),$(patsubst %,%*,$(local_classes)))
+
+jacoco_include := android.net.lowpan.*
+
+LOCAL_JACK_COVERAGE_INCLUDE_FILTER := $(jacoco_include)
+LOCAL_JACK_COVERAGE_EXCLUDE_FILTER := $(jacoco_exclude)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+	android-support-test \
+	guava \
+	mockito-target-minus-junit4 \
+	frameworks-base-testutils \
+
+LOCAL_JAVA_LIBRARIES := \
+	android.test.runner \
+
+LOCAL_PACKAGE_NAME := FrameworksLowpanApiTests
+LOCAL_COMPATIBILITY_SUITE := device-tests
+
+LOCAL_CERTIFICATE := platform
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
+include $(BUILD_PACKAGE)
diff --git a/lowpan/tests/AndroidManifest.xml b/lowpan/tests/AndroidManifest.xml
new file mode 100644
index 0000000..a216214
--- /dev/null
+++ b/lowpan/tests/AndroidManifest.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  ~ Copyright (C) 2017 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.net.lowpan.test">
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+        <activity android:label="LowpanTestDummyLabel"
+                  android:name="LowpanTestDummyName">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+    </application>
+
+    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+        android:targetPackage="android.net.lowpan.test"
+        android:label="Frameworks LoWPAN API Tests">
+    </instrumentation>
+
+</manifest>
diff --git a/lowpan/tests/AndroidTest.xml b/lowpan/tests/AndroidTest.xml
new file mode 100644
index 0000000..72ad050
--- /dev/null
+++ b/lowpan/tests/AndroidTest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<configuration description="Runs Frameworks LoWPAN API Tests.">
+    <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
+        <option name="test-file-name" value="FrameworksLowpanApiTests.apk" />
+    </target_preparer>
+
+    <option name="test-suite-tag" value="apct" />
+    <option name="test-tag" value="FrameworksLowpanApiTests" />
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="android.net.lowpan.test" />
+        <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" />
+    </test>
+</configuration>
diff --git a/lowpan/tests/README.md b/lowpan/tests/README.md
new file mode 100644
index 0000000..d0eed95
--- /dev/null
+++ b/lowpan/tests/README.md
@@ -0,0 +1,50 @@
+# LoWPAN Unit Tests
+This package contains unit tests for the android LoWPAN framework System APIs based on the
+[Android Testing Support Library](http://developer.android.com/tools/testing-support-library/index.html).
+The test cases are built using the [JUnit](http://junit.org/) and [Mockito](http://mockito.org/)
+libraries.
+
+## Running Tests
+The easiest way to run tests is simply run
+
+```
+frameworks/base/lowpan/tests/runtests.sh
+```
+
+`runtests.sh` will build the test project and all of its dependencies and push the APK to the
+connected device. It will then run the tests on the device.
+
+To pick up changes in framework/base, you will need to:
+1. rebuild the framework library 'make -j32'
+2. sync over the updated library to the device 'adb sync'
+3. restart framework on the device 'adb shell stop' then 'adb shell start'
+
+To enable syncing data to the device for first time after clean reflash:
+1. adb disable-verity
+2. adb reboot
+3. adb remount
+
+See below for a few example of options to limit which tests are run.
+See the
+[AndroidJUnitRunner Documentation](https://developer.android.com/reference/android/support/test/runner/AndroidJUnitRunner.html)
+for more details on the supported options.
+
+```
+runtests.sh -e package android.net.lowpan
+runtests.sh -e class android.net.lowpan.LowpanManagerTest
+```
+
+If you manually build and push the test APK to the device you can run tests using
+
+```
+adb shell am instrument -w 'android.net.wifi.test/android.support.test.runner.AndroidJUnitRunner'
+```
+
+## Adding Tests
+Tests can be added by adding classes to the src directory. JUnit4 style test cases can
+be written by simply annotating test methods with `org.junit.Test`.
+
+## Debugging Tests
+If you are trying to debug why tests are not doing what you expected, you can add android log
+statements and use logcat to view them. The beginning and end of every tests is automatically logged
+with the tag `TestRunner`.
diff --git a/lowpan/tests/runtests.sh b/lowpan/tests/runtests.sh
new file mode 100755
index 0000000..040f4f0
--- /dev/null
+++ b/lowpan/tests/runtests.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+if [ -z $ANDROID_BUILD_TOP ]; then
+  echo "You need to source and lunch before you can use this script"
+  exit 1
+fi
+
+echo "Running tests"
+
+set -e # fail early
+
+echo "+ mmma -j32 $ANDROID_BUILD_TOP/frameworks/base/lowpan/tests"
+# NOTE Don't actually run the command above since this shell doesn't inherit functions from the
+#      caller.
+make -j32 -C $ANDROID_BUILD_TOP -f build/core/main.mk MODULES-IN-frameworks-base-lowpan-tests
+
+set -x # print commands
+
+adb root
+adb wait-for-device
+
+adb install -r -g "$OUT/data/app/FrameworksLowpanApiTests/FrameworksLowpanApiTests.apk"
+
+adb shell am instrument -w "$@" 'android.net.lowpan.test/android.support.test.runner.AndroidJUnitRunner'
diff --git a/lowpan/tests/src/android/net/lowpan/LowpanInterfaceTest.java b/lowpan/tests/src/android/net/lowpan/LowpanInterfaceTest.java
new file mode 100644
index 0000000..a495d3d
--- /dev/null
+++ b/lowpan/tests/src/android/net/lowpan/LowpanInterfaceTest.java
@@ -0,0 +1,89 @@
+/*
+ * 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.lowpan;
+
+import static org.mockito.Mockito.*;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.test.TestLooper;
+import android.support.test.runner.AndroidJUnit4;
+import android.test.suitebuilder.annotation.SmallTest;
+import java.util.Map;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/** Unit tests for android.net.lowpan.LowpanInterface. */
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class LowpanInterfaceTest {
+    private static final String TEST_PACKAGE_NAME = "TestPackage";
+
+    @Mock Context mContext;
+    @Mock ILowpanInterface mLowpanInterfaceService;
+    @Mock IBinder mLowpanInterfaceBinder;
+    @Mock ApplicationInfo mApplicationInfo;
+    @Mock IBinder mAppBinder;
+    @Mock LowpanInterface.Callback mLowpanInterfaceCallback;
+
+    private Handler mHandler;
+    private final TestLooper mTestLooper = new TestLooper();
+    private ILowpanInterfaceListener mInterfaceListener;
+    private LowpanInterface mLowpanInterface;
+    private Map<String, Object> mPropertyMap;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        when(mContext.getApplicationInfo()).thenReturn(mApplicationInfo);
+        when(mContext.getOpPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(mLowpanInterfaceService.getName()).thenReturn("wpan0");
+        when(mLowpanInterfaceService.asBinder()).thenReturn(mLowpanInterfaceBinder);
+
+        mLowpanInterface =
+                new LowpanInterface(mContext, mLowpanInterfaceService, mTestLooper.getLooper());
+    }
+
+    @Test
+    public void testStateChangedCallback() throws Exception {
+        // Register our callback
+        mLowpanInterface.registerCallback(mLowpanInterfaceCallback);
+
+        // Verify a listener was added
+        verify(mLowpanInterfaceService)
+                .addListener(
+                        argThat(
+                                listener -> {
+                                    mInterfaceListener = listener;
+                                    return listener instanceof ILowpanInterfaceListener;
+                                }));
+
+        // Change some properties
+        mInterfaceListener.onStateChanged(LowpanInterface.STATE_OFFLINE);
+        mTestLooper.dispatchAll();
+
+        // Verify that the property was changed
+        verify(mLowpanInterfaceCallback)
+                .onStateChanged(
+                        argThat(stateString -> stateString.equals(LowpanInterface.STATE_OFFLINE)));
+    }
+}
diff --git a/lowpan/tests/src/android/net/lowpan/LowpanManagerTest.java b/lowpan/tests/src/android/net/lowpan/LowpanManagerTest.java
new file mode 100644
index 0000000..3dd7504
--- /dev/null
+++ b/lowpan/tests/src/android/net/lowpan/LowpanManagerTest.java
@@ -0,0 +1,175 @@
+/*
+ * 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.lowpan;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.*;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.test.TestLooper;
+import android.support.test.runner.AndroidJUnit4;
+import android.test.suitebuilder.annotation.SmallTest;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/** Unit tests for android.net.lowpan.LowpanManager. */
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class LowpanManagerTest {
+    private static final String TEST_PACKAGE_NAME = "TestPackage";
+
+    @Mock Context mContext;
+    @Mock ILowpanManager mLowpanService;
+    @Mock ILowpanInterface mLowpanInterfaceService;
+    @Mock IBinder mLowpanInterfaceBinder;
+    @Mock ApplicationInfo mApplicationInfo;
+    @Mock IBinder mAppBinder;
+    @Mock LowpanManager.Callback mLowpanManagerCallback;
+
+    private Handler mHandler;
+    private final TestLooper mTestLooper = new TestLooper();
+    private LowpanManager mLowpanManager;
+
+    private ILowpanManagerListener mManagerListener;
+    private LowpanInterface mLowpanInterface;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        when(mContext.getApplicationInfo()).thenReturn(mApplicationInfo);
+        when(mContext.getOpPackageName()).thenReturn(TEST_PACKAGE_NAME);
+
+        mLowpanManager = new LowpanManager(mContext, mLowpanService, mTestLooper.getLooper());
+    }
+
+    @Test
+    public void testGetEmptyInterfaceList() throws Exception {
+        when(mLowpanService.getInterfaceList()).thenReturn(new String[0]);
+        assertTrue(mLowpanManager.getInterfaceList().length == 0);
+        assertTrue(mLowpanManager.getInterface() == null);
+    }
+
+    @Test
+    public void testGetInterfaceList() throws Exception {
+        when(mLowpanService.getInterfaceList()).thenReturn(new String[] {"wpan0"});
+        when(mLowpanService.getInterface("wpan0")).thenReturn(mLowpanInterfaceService);
+        when(mLowpanInterfaceService.getName()).thenReturn("wpan0");
+        when(mLowpanInterfaceService.asBinder()).thenReturn(mLowpanInterfaceBinder);
+        assertEquals(mLowpanManager.getInterfaceList().length, 1);
+
+        LowpanInterface iface = mLowpanManager.getInterface();
+        assertNotNull(iface);
+        assertEquals(iface.getName(), "wpan0");
+    }
+
+    @Test
+    public void testRegisterCallback() throws Exception {
+        when(mLowpanInterfaceService.getName()).thenReturn("wpan0");
+        when(mLowpanInterfaceService.asBinder()).thenReturn(mLowpanInterfaceBinder);
+
+        // Register our callback
+        mLowpanManager.registerCallback(mLowpanManagerCallback);
+
+        // Verify a listener was added
+        verify(mLowpanService)
+                .addListener(
+                        argThat(
+                                listener -> {
+                                    mManagerListener = listener;
+                                    return listener instanceof ILowpanManagerListener;
+                                }));
+
+        // Add an interface
+        mManagerListener.onInterfaceAdded(mLowpanInterfaceService);
+        mTestLooper.dispatchAll();
+
+        // Verify that the interface was added
+        verify(mLowpanManagerCallback)
+                .onInterfaceAdded(
+                        argThat(
+                                iface -> {
+                                    mLowpanInterface = iface;
+                                    return iface instanceof LowpanInterface;
+                                }));
+        verifyNoMoreInteractions(mLowpanManagerCallback);
+
+        // This check causes the test to fail with a weird error, but I'm not sure why.
+        assertEquals(mLowpanInterface.getService(), mLowpanInterfaceService);
+
+        // Verify that calling getInterface on the LowpanManager object will yield the same
+        // LowpanInterface object.
+        when(mLowpanService.getInterfaceList()).thenReturn(new String[] {"wpan0"});
+        when(mLowpanService.getInterface("wpan0")).thenReturn(mLowpanInterfaceService);
+        assertEquals(mLowpanManager.getInterface(), mLowpanInterface);
+
+        // Remove the service
+        mManagerListener.onInterfaceRemoved(mLowpanInterfaceService);
+        mTestLooper.dispatchAll();
+
+        // Verify that the interface was removed
+        verify(mLowpanManagerCallback).onInterfaceRemoved(mLowpanInterface);
+    }
+
+    @Test
+    public void testUnregisterCallback() throws Exception {
+        when(mLowpanInterfaceService.getName()).thenReturn("wpan0");
+        when(mLowpanInterfaceService.asBinder()).thenReturn(mLowpanInterfaceBinder);
+
+        // Register our callback
+        mLowpanManager.registerCallback(mLowpanManagerCallback);
+
+        // Verify a listener was added
+        verify(mLowpanService)
+                .addListener(
+                        argThat(
+                                listener -> {
+                                    mManagerListener = listener;
+                                    return listener instanceof ILowpanManagerListener;
+                                }));
+
+        // Add an interface
+        mManagerListener.onInterfaceAdded(mLowpanInterfaceService);
+        mTestLooper.dispatchAll();
+
+        // Verify that the interface was added
+        verify(mLowpanManagerCallback)
+                .onInterfaceAdded(
+                        argThat(
+                                iface -> {
+                                    mLowpanInterface = iface;
+                                    return iface instanceof LowpanInterface;
+                                }));
+        verifyNoMoreInteractions(mLowpanManagerCallback);
+
+        // Unregister our callback
+        mLowpanManager.unregisterCallback(mLowpanManagerCallback);
+
+        // Verify the listener was removed
+        verify(mLowpanService).removeListener(mManagerListener);
+
+        // Verify that the callback wasn't invoked.
+        verifyNoMoreInteractions(mLowpanManagerCallback);
+    }
+}
diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java
index f403988..3b9a5de 100644
--- a/media/java/android/media/AudioAttributes.java
+++ b/media/java/android/media/AudioAttributes.java
@@ -842,8 +842,8 @@
     @Override
     public String toString () {
         return new String("AudioAttributes:"
-                + " usage=" + mUsage
-                + " content=" + mContentType
+                + " usage=" + usageToString()
+                + " content=" + contentTypeToString()
                 + " flags=0x" + Integer.toHexString(mFlags).toUpperCase()
                 + " tags=" + mFormattedTags
                 + " bundle=" + (mBundle == null ? "null" : mBundle.toString()));
@@ -894,6 +894,19 @@
         }
     }
 
+    /** @hide */
+    public String contentTypeToString() {
+        switch(mContentType) {
+            case CONTENT_TYPE_UNKNOWN:
+                return new String("CONTENT_TYPE_UNKNOWN");
+            case CONTENT_TYPE_SPEECH: return new String("CONTENT_TYPE_SPEECH");
+            case CONTENT_TYPE_MUSIC: return new String("CONTENT_TYPE_MUSIC");
+            case CONTENT_TYPE_MOVIE: return new String("CONTENT_TYPE_MOVIE");
+            case CONTENT_TYPE_SONIFICATION: return new String("CONTENT_TYPE_SONIFICATION");
+            default: return new String("unknown content type " + mContentType);
+        }
+    }
+
     private static int usageForStreamType(int streamType) {
         switch(streamType) {
             case AudioSystem.STREAM_VOICE_CALL:
diff --git a/media/java/android/media/AudioFormat.java b/media/java/android/media/AudioFormat.java
index 81cc93d..93fc3da 100644
--- a/media/java/android/media/AudioFormat.java
+++ b/media/java/android/media/AudioFormat.java
@@ -267,6 +267,42 @@
      **/
     public static final int ENCODING_DOLBY_TRUEHD = 14;
 
+    /** @hide */
+    public static String toLogFriendlyEncoding(int enc) {
+        switch(enc) {
+            case ENCODING_INVALID:
+                return "ENCODING_INVALID";
+            case ENCODING_PCM_16BIT:
+                return "ENCODING_PCM_16BIT";
+            case ENCODING_PCM_8BIT:
+                return "ENCODING_PCM_8BIT";
+            case ENCODING_PCM_FLOAT:
+                return "ENCODING_PCM_FLOAT";
+            case ENCODING_AC3:
+                return "ENCODING_AC3";
+            case ENCODING_E_AC3:
+                return "ENCODING_E_AC3";
+            case ENCODING_DTS:
+                return "ENCODING_DTS";
+            case ENCODING_DTS_HD:
+                return "ENCODING_DTS_HD";
+            case ENCODING_MP3:
+                return "ENCODING_MP3";
+            case ENCODING_AAC_LC:
+                return "ENCODING_AAC_LC";
+            case ENCODING_AAC_HE_V1:
+                return "ENCODING_AAC_HE_V1";
+            case ENCODING_AAC_HE_V2:
+                return "ENCODING_AAC_HE_V2";
+            case ENCODING_IEC61937:
+                return "ENCODING_IEC61937";
+            case ENCODING_DOLBY_TRUEHD:
+                return "ENCODING_DOLBY_TRUEHD";
+            default :
+                return "invalid encoding " + enc;
+        }
+    }
+
     /** Invalid audio channel configuration */
     /** @deprecated Use {@link #CHANNEL_INVALID} instead.  */
     @Deprecated    public static final int CHANNEL_CONFIGURATION_INVALID   = 0;
@@ -693,6 +729,12 @@
         return mPropertySetMask;
     }
 
+    /** @hide */
+    public String toLogFriendlyString() {
+        return String.format("%dch %dHz %s",
+                getChannelCount(), mSampleRate, toLogFriendlyEncoding(mEncoding));
+    }
+
     /**
      * Builder class for {@link AudioFormat} objects.
      * Use this class to configure and create an AudioFormat instance. By setting format
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 05be088..3df1706 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -16,12 +16,12 @@
 
 package android.media;
 
-import android.Manifest;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 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.NotificationManager;
@@ -397,6 +397,19 @@
      */
     public static final int ADJUST_TOGGLE_MUTE = 101;
 
+    /** @hide */
+    public static final String adjustToString(int adj) {
+        switch (adj) {
+            case ADJUST_RAISE: return "ADJUST_RAISE";
+            case ADJUST_LOWER: return "ADJUST_LOWER";
+            case ADJUST_SAME: return "ADJUST_SAME";
+            case ADJUST_MUTE: return "ADJUST_MUTE";
+            case ADJUST_UNMUTE: return "ADJUST_UNMUTE";
+            case ADJUST_TOGGLE_MUTE: return "ADJUST_TOGGLE_MUTE";
+            default: return new StringBuilder("unknown adjust mode ").append(adj).toString();
+        }
+    }
+
     // Flags should be powers of 2!
 
     /**
@@ -2364,8 +2377,8 @@
      *      usecases such as voice memo recording, or speech recognition.
      *      Use {@link #AUDIOFOCUS_GAIN} for a focus request of unknown duration such
      *      as the playback of a song or a video.
-     * @param flags 0 or a combination of {link #AUDIOFOCUS_FLAG_DELAY_OK}
-     *     and {@link #AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS}.
+     * @param flags 0 or a combination of {link #AUDIOFOCUS_FLAG_DELAY_OK},
+     *     {@link #AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS} and {@link #AUDIOFOCUS_FLAG_LOCK}.
      *     <br>Use 0 when not using any flags for the request, which behaves like
      *     {@link #requestAudioFocus(OnAudioFocusChangeListener, int, int)}, where either audio
      *     focus is granted immediately, or the grant request fails because the system is in a
@@ -2377,6 +2390,7 @@
      * @throws IllegalArgumentException
      */
     @SystemApi
+    @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
     public int requestAudioFocus(OnAudioFocusChangeListener l,
             @NonNull AudioAttributes requestAttributes,
             int durationHint,
@@ -2416,6 +2430,10 @@
      * @deprecated use {@link #requestAudioFocus(AudioFocusRequest, AudioPolicy)}
      */
     @SystemApi
+    @RequiresPermission(anyOf= {
+            android.Manifest.permission.MODIFY_PHONE_STATE,
+            android.Manifest.permission.MODIFY_AUDIO_ROUTING
+    })
     public int requestAudioFocus(OnAudioFocusChangeListener l,
             @NonNull AudioAttributes requestAttributes,
             int durationHint,
@@ -2474,6 +2492,7 @@
      * @throws IllegalArgumentException when trying to lock focus without an AudioPolicy
      */
     @SystemApi
+    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
     public int requestAudioFocus(@NonNull AudioFocusRequest afr, @Nullable AudioPolicy ap) {
         if (afr == null) {
             throw new NullPointerException("Illegal null AudioFocusRequest");
@@ -2571,6 +2590,7 @@
      * @throws NullPointerException if the {@link AudioFocusInfo} or {@link AudioPolicy} are null.
      */
     @SystemApi
+    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
     public int dispatchAudioFocusChange(@NonNull AudioFocusInfo afi, int focusChange,
             @NonNull AudioPolicy ap) {
         if (afi == null) {
@@ -2622,6 +2642,8 @@
      * @deprecated use {@link #abandonAudioFocusRequest(AudioFocusRequest)}
      */
     @SystemApi
+    @SuppressLint("Doclava125") // no permission enforcement, but only "undoes" what would have been
+                                // done by a matching requestAudioFocus
     public int abandonAudioFocus(OnAudioFocusChangeListener l, AudioAttributes aa) {
         int status = AUDIOFOCUS_REQUEST_FAILED;
         unregisterAudioFocusRequest(l);
@@ -3036,7 +3058,11 @@
 
     private final IPlaybackConfigDispatcher mPlayCb = new IPlaybackConfigDispatcher.Stub() {
         @Override
-        public void dispatchPlaybackConfigChange(List<AudioPlaybackConfiguration> configs) {
+        public void dispatchPlaybackConfigChange(List<AudioPlaybackConfiguration> configs,
+                boolean flush) {
+            if (flush) {
+                Binder.flushPendingCommands();
+            }
             synchronized(mPlaybackCallbackLock) {
                 if (mPlaybackCallbackList != null) {
                     for (int i=0 ; i < mPlaybackCallbackList.size() ; i++) {
@@ -3833,6 +3859,7 @@
      * @hide
      */
     @SystemApi
+    @SuppressLint("Doclava125") // FIXME is this still used?
     public boolean isHdmiSystemAudioSupported() {
         try {
             return getService().isHdmiSystemAudioSupported();
diff --git a/media/java/android/media/AudioManagerInternal.java b/media/java/android/media/AudioManagerInternal.java
index 2b5ac5e..0a1de33 100644
--- a/media/java/android/media/AudioManagerInternal.java
+++ b/media/java/android/media/AudioManagerInternal.java
@@ -59,15 +59,4 @@
 
         int getRingerModeAffectedStreams(int streams);
     }
-
-    /**
-     * Disable or restore the ability to play audio for a given UID.
-     * When a UID isn't meant to be tracked anymore (e.g. client died), re-enable audio for this UID
-     * to prevent disabling audio for future UIDs that would reuse the same value.
-     * This operation is asynchronous.
-     * @param disable when true, prevents playback of audio streams from the given uid. If false,
-     *         restores the ability to play, or no-op if playback hadn't been disabled before.
-     * @param uid the client UID whose ability to play will be affected.
-     */
-    public abstract void disableAudioForUid(boolean disable, int uid);
 }
diff --git a/media/java/android/media/AudioPlaybackConfiguration.java b/media/java/android/media/AudioPlaybackConfiguration.java
index 14bc555..8a36f91 100644
--- a/media/java/android/media/AudioPlaybackConfiguration.java
+++ b/media/java/android/media/AudioPlaybackConfiguration.java
@@ -212,8 +212,10 @@
      * @hide
      */
     public void init() {
-        if (mIPlayerShell != null) {
-            mIPlayerShell.monitorDeath();
+        synchronized (this) {
+            if (mIPlayerShell != null) {
+                mIPlayerShell.monitorDeath();
+            }
         }
     }
 
@@ -322,7 +324,11 @@
      */
     @SystemApi
     public PlayerProxy getPlayerProxy() {
-        return mIPlayerShell == null ? null : new PlayerProxy(this);
+        final IPlayerShell ips;
+        synchronized (this) {
+            ips = mIPlayerShell;
+        }
+        return ips == null ? null : new PlayerProxy(this);
     }
 
     /**
@@ -330,7 +336,11 @@
      * @return the IPlayer interface for the associated player
      */
     IPlayer getIPlayer() {
-        return mIPlayerShell == null ? null : mIPlayerShell.getIPlayer();
+        final IPlayerShell ips;
+        synchronized (this) {
+            ips = mIPlayerShell;
+        }
+        return ips == null ? null : ips.getIPlayer();
     }
 
     /**
@@ -351,10 +361,14 @@
      * @return true if the state changed, false otherwise
      */
     public boolean handleStateEvent(int event) {
-        final boolean changed = (mPlayerState != event);
-        mPlayerState = event;
-        if ((event == PLAYER_STATE_RELEASED) && (mIPlayerShell != null)) {
-            mIPlayerShell.release();
+        final boolean changed;
+        synchronized (this) {
+            changed = (mPlayerState != event);
+            mPlayerState = event;
+            if (changed && (event == PLAYER_STATE_RELEASED) && (mIPlayerShell != null)) {
+                mIPlayerShell.release();
+                mIPlayerShell = null;
+            }
         }
         return changed;
     }
@@ -447,7 +461,11 @@
         dest.writeInt(mClientPid);
         dest.writeInt(mPlayerState);
         mPlayerAttr.writeToParcel(dest, 0);
-        dest.writeStrongInterface(mIPlayerShell == null ? null : mIPlayerShell.getIPlayer());
+        final IPlayerShell ips;
+        synchronized (this) {
+            ips = mIPlayerShell;
+        }
+        dest.writeStrongInterface(ips == null ? null : ips.getIPlayer());
     }
 
     private AudioPlaybackConfiguration(Parcel in) {
@@ -479,14 +497,17 @@
     static final class IPlayerShell implements IBinder.DeathRecipient {
 
         final AudioPlaybackConfiguration mMonitor; // never null
-        private IPlayer mIPlayer;
+        private volatile IPlayer mIPlayer;
 
         IPlayerShell(@NonNull AudioPlaybackConfiguration monitor, @NonNull IPlayer iplayer) {
             mMonitor = monitor;
             mIPlayer = iplayer;
         }
 
-        void monitorDeath() {
+        synchronized void monitorDeath() {
+            if (mIPlayer == null) {
+                return;
+            }
             try {
                 mIPlayer.asBinder().linkToDeath(this, 0);
             } catch (RemoteException e) {
@@ -509,8 +530,13 @@
             } else if (DEBUG) { Log.i(TAG, "IPlayerShell binderDied"); }
         }
 
-        void release() {
+        synchronized void release() {
+            if (mIPlayer == null) {
+                return;
+            }
             mIPlayer.asBinder().unlinkToDeath(this, 0);
+            mIPlayer = null;
+            Binder.flushPendingCommands();
         }
     }
 
@@ -532,7 +558,7 @@
             case PLAYER_TYPE_HW_SOURCE: return "hardware source";
             case PLAYER_TYPE_EXTERNAL_PROXY: return "external proxy";
             default:
-                return "unknown player type - FIXME";
+                return "unknown player type " + type + " - FIXME";
         }
     }
 
diff --git a/media/java/android/media/AudioRecordingConfiguration.java b/media/java/android/media/AudioRecordingConfiguration.java
index 50dbd03..984c554 100644
--- a/media/java/android/media/AudioRecordingConfiguration.java
+++ b/media/java/android/media/AudioRecordingConfiguration.java
@@ -17,10 +17,12 @@
 package android.media;
 
 import android.annotation.IntDef;
+import android.annotation.NonNull;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.Log;
 
+import java.io.PrintWriter;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
@@ -52,18 +54,59 @@
     private final AudioFormat mDeviceFormat;
     private final AudioFormat mClientFormat;
 
+    @NonNull private final String mClientPackageName;
+    private final int mClientUid;
+
     private final int mPatchHandle;
 
     /**
      * @hide
      */
-    public AudioRecordingConfiguration(int session, int source, AudioFormat clientFormat,
-            AudioFormat devFormat, int patchHandle) {
+    public AudioRecordingConfiguration(int uid, int session, int source, AudioFormat clientFormat,
+            AudioFormat devFormat, int patchHandle, String packageName) {
+        mClientUid = uid;
         mSessionId = session;
         mClientSource = source;
         mClientFormat = clientFormat;
         mDeviceFormat = devFormat;
         mPatchHandle = patchHandle;
+        mClientPackageName = packageName;
+    }
+
+    /**
+     * @hide
+     * For AudioService dump
+     * @param pw
+     */
+    public void dump(PrintWriter pw) {
+        pw.println("  " + toLogFriendlyString(this));
+    }
+
+    /**
+     * @hide
+     */
+    public static String toLogFriendlyString(AudioRecordingConfiguration arc) {
+        return new String("session:" + arc.mSessionId
+                + " -- source:" + MediaRecorder.toLogFriendlyAudioSource(arc.mClientSource)
+                + " -- uid:" + arc.mClientUid
+                + " -- patch:" + arc.mPatchHandle
+                + " -- pack:" + arc.mClientPackageName
+                + " -- format client=" + arc.mClientFormat.toLogFriendlyString()
+                    + ", dev=" + arc.mDeviceFormat.toLogFriendlyString());
+    }
+
+    // Note that this method is called server side, so no "privileged" information is ever sent
+    // to a client that is not supposed to have access to it.
+    /**
+     * @hide
+     * Creates a copy of the recording configuration that is stripped of any data enabling
+     * identification of which application it is associated with ("anonymized").
+     * @param in
+     */
+    public static AudioRecordingConfiguration anonymizedCopy(AudioRecordingConfiguration in) {
+        return new AudioRecordingConfiguration( /*anonymized uid*/ -1,
+                in.mSessionId, in.mClientSource, in.mClientFormat,
+                in.mDeviceFormat, in.mPatchHandle, "" /*empty package name*/);
     }
 
     // matches the sources that return false in MediaRecorder.isSystemOnlyAudioSource(source)
@@ -120,6 +163,30 @@
     public AudioFormat getClientFormat() { return mClientFormat; }
 
     /**
+     * @pending for SystemApi
+     * Returns the package name of the application performing the recording.
+     * Where there are multiple packages sharing the same user id through the "sharedUserId"
+     * mechanism, only the first one with that id will be returned
+     * (see {@link PackageManager#getPackagesForUid(int)}).
+     * <p>This information is only available if the caller has the
+     * {@link android.Manifest.permission.MODIFY_AUDIO_ROUTING} permission.
+     * <br>When called without the permission, the result is an empty string.
+     * @return the package name
+     */
+    public String getClientPackageName() { return mClientPackageName; }
+
+    /**
+     * @pending for SystemApi
+     * Returns the user id of the application performing the recording.
+     * <p>This information is only available if the caller has the
+     * {@link android.Manifest.permission.MODIFY_AUDIO_ROUTING}
+     * permission.
+     * <br>The result is -1 without the permission.
+     * @return the user id
+     */
+    public int getClientUid() { return mClientUid; }
+
+    /**
      * Returns information about the audio input device used for this recording.
      * @return the audio recording device or null if this information cannot be retrieved
      */
@@ -185,6 +252,8 @@
         mClientFormat.writeToParcel(dest, 0);
         mDeviceFormat.writeToParcel(dest, 0);
         dest.writeInt(mPatchHandle);
+        dest.writeString(mClientPackageName);
+        dest.writeInt(mClientUid);
     }
 
     private AudioRecordingConfiguration(Parcel in) {
@@ -193,6 +262,8 @@
         mClientFormat = AudioFormat.CREATOR.createFromParcel(in);
         mDeviceFormat = AudioFormat.CREATOR.createFromParcel(in);
         mPatchHandle = in.readInt();
+        mClientPackageName = in.readString();
+        mClientUid = in.readInt();
     }
 
     @Override
@@ -202,10 +273,12 @@
 
         AudioRecordingConfiguration that = (AudioRecordingConfiguration) o;
 
-        return ((mSessionId == that.mSessionId)
+        return ((mClientUid == that.mClientUid)
+                && (mSessionId == that.mSessionId)
                 && (mClientSource == that.mClientSource)
                 && (mPatchHandle == that.mPatchHandle)
                 && (mClientFormat.equals(that.mClientFormat))
-                && (mDeviceFormat.equals(that.mDeviceFormat)));
+                && (mDeviceFormat.equals(that.mDeviceFormat))
+                && (mClientPackageName.equals(that.mClientPackageName)));
     }
 }
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index ea4d802..e56944d 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -113,6 +113,17 @@
     public static final int MODE_IN_COMMUNICATION   = 3;
     public static final int NUM_MODES               = 4;
 
+    public static String modeToString(int mode) {
+        switch (mode) {
+            case MODE_CURRENT: return "MODE_CURRENT";
+            case MODE_IN_CALL: return "MODE_IN_CALL";
+            case MODE_IN_COMMUNICATION: return "MODE_IN_COMMUNICATION";
+            case MODE_INVALID: return "MODE_INVALID";
+            case MODE_NORMAL: return "MODE_NORMAL";
+            case MODE_RINGTONE: return "MODE_RINGTONE";
+            default: return "unknown mode (" + mode + ")";
+        }
+    }
 
     /* Routing bits for the former setRouting/getRouting API */
     /** @deprecated */
@@ -287,6 +298,7 @@
         /**
          * Callback for recording activity notifications events
          * @param event
+         * @param uid uid of the client app performing the recording
          * @param session
          * @param source
          * @param recordingFormat an array of ints containing respectively the client and device
@@ -298,9 +310,10 @@
          *          4: device channel mask
          *          5: device sample rate
          *          6: patch handle
+         * @param packName package name of the client app performing the recording. NOT SUPPORTED
          */
-        void onRecordingConfigurationChanged(int event, int session, int source,
-                int[] recordingFormat);
+        void onRecordingConfigurationChanged(int event, int uid, int session, int source,
+                int[] recordingFormat, String packName);
     }
 
     private static AudioRecordingCallback sRecordingCallback;
@@ -318,17 +331,18 @@
      * @param session
      * @param source
      * @param recordingFormat see
-     *     {@link AudioRecordingCallback#onRecordingConfigurationChanged(int, int, int, int[])} for
-     *     the description of the record format.
+     *     {@link AudioRecordingCallback#onRecordingConfigurationChanged(int, int, int, int, int[])}
+     *     for the description of the record format.
      */
-    private static void recordingCallbackFromNative(int event, int session, int source,
+    private static void recordingCallbackFromNative(int event, int uid, int session, int source,
             int[] recordingFormat) {
         AudioRecordingCallback cb = null;
         synchronized (AudioSystem.class) {
             cb = sRecordingCallback;
         }
         if (cb != null) {
-            cb.onRecordingConfigurationChanged(event, session, source, recordingFormat);
+            // TODO receive package name from native
+            cb.onRecordingConfigurationChanged(event, uid, session, source, recordingFormat, "");
         }
     }
 
@@ -495,6 +509,14 @@
     public static final int DEVICE_STATE_AVAILABLE = 1;
     private static final int NUM_DEVICE_STATES = 1;
 
+    public static String deviceStateToString(int state) {
+        switch (state) {
+            case DEVICE_STATE_UNAVAILABLE: return "DEVICE_STATE_UNAVAILABLE";
+            case DEVICE_STATE_AVAILABLE: return "DEVICE_STATE_AVAILABLE";
+            default: return "unknown state (" + state + ")";
+        }
+    }
+
     public static final String DEVICE_OUT_EARPIECE_NAME = "earpiece";
     public static final String DEVICE_OUT_SPEAKER_NAME = "speaker";
     public static final String DEVICE_OUT_WIRED_HEADSET_NAME = "headset";
@@ -690,6 +712,27 @@
     public static final int NUM_FORCE_CONFIG = 15;
     public static final int FORCE_DEFAULT = FORCE_NONE;
 
+    public static String forceUseConfigToString(int config) {
+        switch (config) {
+            case FORCE_NONE: return "FORCE_NONE";
+            case FORCE_SPEAKER: return "FORCE_SPEAKER";
+            case FORCE_HEADPHONES: return "FORCE_HEADPHONES";
+            case FORCE_BT_SCO: return "FORCE_BT_SCO";
+            case FORCE_BT_A2DP: return "FORCE_BT_A2DP";
+            case FORCE_WIRED_ACCESSORY: return "FORCE_WIRED_ACCESSORY";
+            case FORCE_BT_CAR_DOCK: return "FORCE_BT_CAR_DOCK";
+            case FORCE_BT_DESK_DOCK: return "FORCE_BT_DESK_DOCK";
+            case FORCE_ANALOG_DOCK: return "FORCE_ANALOG_DOCK";
+            case FORCE_DIGITAL_DOCK: return "FORCE_DIGITAL_DOCK";
+            case FORCE_NO_BT_A2DP: return "FORCE_NO_BT_A2DP";
+            case FORCE_SYSTEM_ENFORCED: return "FORCE_SYSTEM_ENFORCED";
+            case FORCE_HDMI_SYSTEM_AUDIO_ENFORCED: return "FORCE_HDMI_SYSTEM_AUDIO_ENFORCED";
+            case FORCE_ENCODED_SURROUND_NEVER: return "FORCE_ENCODED_SURROUND_NEVER";
+            case FORCE_ENCODED_SURROUND_ALWAYS: return "FORCE_ENCODED_SURROUND_ALWAYS";
+            default: return "unknown config (" + config + ")" ;
+        }
+    }
+
     // usage for setForceUse, must match audio_policy_force_use_t
     public static final int FOR_COMMUNICATION = 0;
     public static final int FOR_MEDIA = 1;
@@ -700,6 +743,19 @@
     public static final int FOR_ENCODED_SURROUND = 6;
     private static final int NUM_FORCE_USE = 7;
 
+    public static String forceUseUsageToString(int usage) {
+        switch (usage) {
+            case FOR_COMMUNICATION: return "FOR_COMMUNICATION";
+            case FOR_MEDIA: return "FOR_MEDIA";
+            case FOR_RECORD: return "FOR_RECORD";
+            case FOR_DOCK: return "FOR_DOCK";
+            case FOR_SYSTEM: return "FOR_SYSTEM";
+            case FOR_HDMI_SYSTEM_AUDIO: return "FOR_HDMI_SYSTEM_AUDIO";
+            case FOR_ENCODED_SURROUND: return "FOR_ENCODED_SURROUND";
+            default: return "unknown usage (" + usage + ")" ;
+        }
+    }
+
     // usage for AudioRecord.startRecordingSync(), must match AudioSystem::sync_event_t
     public static final int SYNC_EVENT_NONE = 0;
     public static final int SYNC_EVENT_PRESENTATION_COMPLETE = 1;
diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java
index bf5939f..50145f8 100644
--- a/media/java/android/media/AudioTrack.java
+++ b/media/java/android/media/AudioTrack.java
@@ -276,6 +276,9 @@
     private static final int AUDIO_OUTPUT_FLAG_FAST = 0x4;
     private static final int AUDIO_OUTPUT_FLAG_DEEP_BUFFER = 0x8;
 
+    // Size of HW_AV_SYNC track AV header.
+    private static final float HEADER_V2_SIZE_BYTES = 20.0f;
+
     //--------------------------------------------------------------------------
     // Member variables
     //--------------------
@@ -364,6 +367,10 @@
      * HW_AV_SYNC track audio data bytes remaining to write after current AV sync header
      */
     private int mAvSyncBytesRemaining = 0;
+    /**
+     * Offset of the first sample of the audio in byte from start of HW_AV_SYNC track AV header.
+     */
+    private int mOffset = 0;
 
     //--------------------------------
     // Used exclusively by native code
@@ -603,6 +610,16 @@
         mSampleRate = sampleRate[0];
         mSessionId = session[0];
 
+        if ((mAttributes.getFlags() & AudioAttributes.FLAG_HW_AV_SYNC) != 0) {
+            int frameSizeInBytes;
+            if (AudioFormat.isEncodingLinearFrames(mAudioFormat)) {
+                frameSizeInBytes = mChannelCount * AudioFormat.getBytesPerSample(mAudioFormat);
+            } else {
+                frameSizeInBytes = 1;
+            }
+            mOffset = ((int) Math.ceil(HEADER_V2_SIZE_BYTES / frameSizeInBytes)) * frameSizeInBytes;
+        }
+
         if (mDataLoadMode == MODE_STATIC) {
             mState = STATE_NO_STATIC_DATA;
         } else {
@@ -2520,14 +2537,15 @@
 
         // create timestamp header if none exists
         if (mAvSyncHeader == null) {
-            mAvSyncHeader = ByteBuffer.allocate(16);
+            mAvSyncHeader = ByteBuffer.allocate(mOffset);
             mAvSyncHeader.order(ByteOrder.BIG_ENDIAN);
-            mAvSyncHeader.putInt(0x55550001);
+            mAvSyncHeader.putInt(0x55550002);
         }
 
         if (mAvSyncBytesRemaining == 0) {
             mAvSyncHeader.putInt(4, sizeInBytes);
             mAvSyncHeader.putLong(8, timestamp);
+            mAvSyncHeader.putInt(16, mOffset);
             mAvSyncHeader.position(0);
             mAvSyncBytesRemaining = sizeInBytes;
         }
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java
index 0a61148..bf3a3b9 100644
--- a/media/java/android/media/ExifInterface.java
+++ b/media/java/android/media/ExifInterface.java
@@ -442,6 +442,10 @@
     private static final int RAF_INFO_SIZE = 160;
     private static final int RAF_JPEG_LENGTH_VALUE_SIZE = 4;
 
+    private static final byte[] HEIF_TYPE_FTYP = new byte[] {'f', 't', 'y', 'p'};
+    private static final byte[] HEIF_BRAND_MIF1 = new byte[] {'m', 'i', 'f', '1'};
+    private static final byte[] HEIF_BRAND_HEIC = new byte[] {'h', 'e', 'i', 'c'};
+
     // See http://fileformats.archiveteam.org/wiki/Olympus_ORF
     private static final short ORF_SIGNATURE_1 = 0x4f52;
     private static final short ORF_SIGNATURE_2 = 0x5352;
@@ -1264,6 +1268,7 @@
     private static final int IMAGE_TYPE_RAF = 9;
     private static final int IMAGE_TYPE_RW2 = 10;
     private static final int IMAGE_TYPE_SRW = 11;
+    private static final int IMAGE_TYPE_HEIF = 12;
 
     static {
         sFormatter = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
@@ -1691,6 +1696,10 @@
                     getRafAttributes(inputStream);
                     break;
                 }
+                case IMAGE_TYPE_HEIF: {
+                    getHeifAttributes(inputStream);
+                    break;
+                }
                 case IMAGE_TYPE_ORF: {
                     getOrfAttributes(inputStream);
                     break;
@@ -2101,14 +2110,14 @@
     private int getMimeType(BufferedInputStream in) throws IOException {
         in.mark(SIGNATURE_CHECK_SIZE);
         byte[] signatureCheckBytes = new byte[SIGNATURE_CHECK_SIZE];
-        if (in.read(signatureCheckBytes) != SIGNATURE_CHECK_SIZE) {
-            throw new EOFException();
-        }
+        in.read(signatureCheckBytes);
         in.reset();
         if (isJpegFormat(signatureCheckBytes)) {
             return IMAGE_TYPE_JPEG;
         } else if (isRafFormat(signatureCheckBytes)) {
             return IMAGE_TYPE_RAF;
+        } else if (isHeifFormat(signatureCheckBytes)) {
+            return IMAGE_TYPE_HEIF;
         } else if (isOrfFormat(signatureCheckBytes)) {
             return IMAGE_TYPE_ORF;
         } else if (isRw2Format(signatureCheckBytes)) {
@@ -2147,6 +2156,78 @@
         return true;
     }
 
+    private boolean isHeifFormat(byte[] signatureCheckBytes) throws IOException {
+        ByteOrderedDataInputStream signatureInputStream = null;
+        try {
+            signatureInputStream = new ByteOrderedDataInputStream(signatureCheckBytes);
+            signatureInputStream.setByteOrder(ByteOrder.BIG_ENDIAN);
+
+            long chunkSize = signatureInputStream.readInt();
+            byte[] chunkType = new byte[4];
+            signatureInputStream.read(chunkType);
+
+            if (!Arrays.equals(chunkType, HEIF_TYPE_FTYP)) {
+                return false;
+            }
+
+            long chunkDataOffset = 8;
+            if (chunkSize == 1) {
+                // This indicates that the next 8 bytes represent the chunk size,
+                // and chunk data comes after that.
+                chunkSize = signatureInputStream.readLong();
+                if (chunkSize < 16) {
+                    // The smallest valid chunk is 16 bytes long in this case.
+                    return false;
+                }
+                chunkDataOffset += 8;
+            }
+
+            // only sniff up to signatureCheckBytes.length
+            if (chunkSize > signatureCheckBytes.length) {
+                chunkSize = signatureCheckBytes.length;
+            }
+
+            long chunkDataSize = chunkSize - chunkDataOffset;
+
+            // It should at least have major brand (4-byte) and minor version (4-byte).
+            // The rest of the chunk (if any) is a list of (4-byte) compatible brands.
+            if (chunkDataSize < 8) {
+                return false;
+            }
+
+            byte[] brand = new byte[4];
+            boolean isMif1 = false;
+            boolean isHeic = false;
+            for (long i = 0; i < chunkDataSize / 4;  ++i) {
+                if (signatureInputStream.read(brand) != brand.length) {
+                    return false;
+                }
+                if (i == 1) {
+                    // Skip this index, it refers to the minorVersion, not a brand.
+                    continue;
+                }
+                if (Arrays.equals(brand, HEIF_BRAND_MIF1)) {
+                    isMif1 = true;
+                } else if (Arrays.equals(brand, HEIF_BRAND_HEIC)) {
+                    isHeic = true;
+                }
+                if (isMif1 && isHeic) {
+                    return true;
+                }
+            }
+        } catch (Exception e) {
+            if (DEBUG) {
+                Log.d(TAG, "Exception parsing HEIF file type box.", e);
+            }
+        } finally {
+            if (signatureInputStream != null) {
+                signatureInputStream.close();
+                signatureInputStream = null;
+            }
+        }
+        return false;
+    }
+
     /**
      * ORF has a similar structure to TIFF but it contains a different signature at the TIFF Header.
      * This method looks at the 2 bytes following the Byte Order bytes to determine if this file is
@@ -2439,6 +2520,100 @@
         }
     }
 
+    private void getHeifAttributes(ByteOrderedDataInputStream in) throws IOException {
+        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+        try {
+            if (mSeekableFileDescriptor != null) {
+                retriever.setDataSource(mSeekableFileDescriptor);
+            } else {
+                retriever.setDataSource(new MediaDataSource() {
+                    long mPosition;
+
+                    @Override
+                    public void close() throws IOException {}
+
+                    @Override
+                    public int readAt(long position, byte[] buffer, int offset, int size)
+                            throws IOException {
+                        if (size == 0) {
+                            return 0;
+                        }
+                        if (position < 0) {
+                            return -1;
+                        }
+                        if (mPosition != position) {
+                            in.seek(position);
+                            mPosition = position;
+                        }
+
+                        int bytesRead = in.read(buffer, offset, size);
+                        if (bytesRead < 0) {
+                            mPosition = -1; // need to seek on next read
+                            return -1;
+                        }
+
+                        mPosition += bytesRead;
+                        return bytesRead;
+                    }
+
+                    @Override
+                    public long getSize() throws IOException {
+                        return -1;
+                    }
+                });
+            }
+
+            String hasVideo = retriever.extractMetadata(
+                    MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO);
+
+            final String METADATA_HAS_VIDEO_VALUE_YES = "yes";
+            if (METADATA_HAS_VIDEO_VALUE_YES.equals(hasVideo)) {
+                String width = retriever.extractMetadata(
+                        MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
+                String height = retriever.extractMetadata(
+                        MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
+
+                if (width != null) {
+                    mAttributes[IFD_TYPE_PRIMARY].put(TAG_IMAGE_WIDTH,
+                            ExifAttribute.createUShort(Integer.parseInt(width), mExifByteOrder));
+                }
+
+                if (height != null) {
+                    mAttributes[IFD_TYPE_PRIMARY].put(TAG_IMAGE_LENGTH,
+                            ExifAttribute.createUShort(Integer.parseInt(height), mExifByteOrder));
+                }
+
+                String rotation = retriever.extractMetadata(
+                        MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+                if (rotation != null) {
+                    int orientation = ExifInterface.ORIENTATION_NORMAL;
+
+                    // all rotation angles in CW
+                    switch (Integer.parseInt(rotation)) {
+                        case 90:
+                            orientation = ExifInterface.ORIENTATION_ROTATE_90;
+                            break;
+                        case 180:
+                            orientation = ExifInterface.ORIENTATION_ROTATE_180;
+                            break;
+                        case 270:
+                            orientation = ExifInterface.ORIENTATION_ROTATE_270;
+                            break;
+                    }
+
+                    mAttributes[IFD_TYPE_PRIMARY].put(TAG_ORIENTATION,
+                            ExifAttribute.createUShort(orientation, mExifByteOrder));
+                }
+
+                if (DEBUG) {
+                    Log.d(TAG, "Heif meta: " + width + "x" + height + ", rotation " + rotation);
+                }
+            }
+        } finally {
+            retriever.release();
+        }
+    }
+
     /**
      * ORF files contains a primary image data and a MakerNote data that contains preview/thumbnail
      * images. Both data takes the form of IFDs and can therefore be read with the
@@ -2661,9 +2836,9 @@
     }
 
     private void addDefaultValuesForCompatibility() {
-        // The value of DATETIME tag has the same value of DATETIME_ORIGINAL tag.
+        // If DATETIME tag has no value, then set the value to DATETIME_ORIGINAL tag's.
         String valueOfDateTimeOriginal = getAttribute(TAG_DATETIME_ORIGINAL);
-        if (valueOfDateTimeOriginal != null) {
+        if (valueOfDateTimeOriginal != null && getAttribute(TAG_DATETIME) == null) {
             mAttributes[IFD_TYPE_PRIMARY].put(TAG_DATETIME,
                     ExifAttribute.createString(valueOfDateTimeOriginal));
         }
@@ -2679,7 +2854,7 @@
         }
         if (getAttribute(TAG_ORIENTATION) == null) {
             mAttributes[IFD_TYPE_PRIMARY].put(TAG_ORIENTATION,
-                    ExifAttribute.createULong(0, mExifByteOrder));
+                    ExifAttribute.createUShort(0, mExifByteOrder));
         }
         if (getAttribute(TAG_LIGHT_SOURCE) == null) {
             mAttributes[IFD_TYPE_EXIF].put(TAG_LIGHT_SOURCE,
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index 9c138e3..bb6ae98 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -201,5 +201,7 @@
     int dispatchFocusChange(in AudioFocusInfo afi, in int focusChange,
             in IAudioPolicyCallback pcb);
 
+    oneway void playerHasOpPlayAudio(in int piid, in boolean hasOpPlayAudio);
+
     // WARNING: read warning at top of file, it is recommended to add new methods at the end
 }
diff --git a/media/java/android/media/IPlaybackConfigDispatcher.aidl b/media/java/android/media/IPlaybackConfigDispatcher.aidl
index 3cb5216..150ff26 100644
--- a/media/java/android/media/IPlaybackConfigDispatcher.aidl
+++ b/media/java/android/media/IPlaybackConfigDispatcher.aidl
@@ -25,6 +25,6 @@
  */
 oneway interface IPlaybackConfigDispatcher {
 
-    void dispatchPlaybackConfigChange(in List<AudioPlaybackConfiguration> configs);
+    void dispatchPlaybackConfigChange(in List<AudioPlaybackConfiguration> configs, in boolean flush);
 
 }
diff --git a/media/java/android/media/Image.java b/media/java/android/media/Image.java
index 3e75759..fbe5561 100644
--- a/media/java/android/media/Image.java
+++ b/media/java/android/media/Image.java
@@ -31,7 +31,7 @@
  * {@link java.nio.ByteBuffer ByteBuffers}. Each buffer is encapsulated in a
  * {@link Plane} that describes the layout of the pixel data in that plane. Due
  * to this direct access, and unlike the {@link android.graphics.Bitmap Bitmap} class,
- * Images are not directly usable as as UI resources.</p>
+ * Images are not directly usable as UI resources.</p>
  *
  * <p>Since Images are often directly produced or consumed by hardware
  * components, they are a limited resource shared across the system, and should
diff --git a/media/java/android/media/MediaCas.java b/media/java/android/media/MediaCas.java
index c5873e4..12352e7 100644
--- a/media/java/android/media/MediaCas.java
+++ b/media/java/android/media/MediaCas.java
@@ -18,22 +18,20 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.hardware.cas.V1_0.*;
 import android.media.MediaCasException.*;
 import android.os.Handler;
 import android.os.HandlerThread;
-import android.os.IBinder;
+import android.os.IHwBinder;
 import android.os.Looper;
 import android.os.Message;
-import android.os.Parcel;
-import android.os.Parcelable;
 import android.os.Process;
 import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.ServiceSpecificException;
-import android.util.EventLog;
 import android.util.Log;
 import android.util.Singleton;
 
+import java.util.ArrayList;
+
 /**
  * MediaCas can be used to obtain keys for descrambling protected media streams, in
  * conjunction with {@link android.media.MediaDescrambler}. The MediaCas APIs are
@@ -96,7 +94,6 @@
  */
 public final class MediaCas implements AutoCloseable {
     private static final String TAG = "MediaCas";
-    private final ParcelableCasData mCasData = new ParcelableCasData();
     private ICas mICas;
     private EventListener mListener;
     private HandlerThread mHandlerThread;
@@ -106,8 +103,10 @@
             new Singleton<IMediaCasService>() {
         @Override
         protected IMediaCasService create() {
-            return IMediaCasService.Stub.asInterface(
-                    ServiceManager.getService("media.cas"));
+            try {
+                return IMediaCasService.getService();
+            } catch (RemoteException e) {}
+            return null;
         }
     };
 
@@ -137,14 +136,15 @@
         @Override
         public void handleMessage(Message msg) {
             if (msg.what == MSG_CAS_EVENT) {
-                mListener.onEvent(MediaCas.this, msg.arg1, msg.arg2, (byte[]) msg.obj);
+                mListener.onEvent(MediaCas.this, msg.arg1, msg.arg2,
+                        toBytes((ArrayList<Byte>) msg.obj));
             }
         }
     }
 
     private final ICasListener.Stub mBinder = new ICasListener.Stub() {
         @Override
-        public void onEvent(int event, int arg, @Nullable byte[] data)
+        public void onEvent(int event, int arg, @Nullable ArrayList<Byte> data)
                 throws RemoteException {
             mEventHandler.sendMessage(mEventHandler.obtainMessage(
                     EventHandler.MSG_CAS_EVENT, event, arg, data));
@@ -152,55 +152,6 @@
     };
 
     /**
-     * Class for parceling byte array data over ICas binder.
-     */
-    static class ParcelableCasData implements Parcelable {
-        private byte[] mData;
-        private int mOffset;
-        private int mLength;
-
-        ParcelableCasData() {
-            mData = null;
-            mOffset = mLength = 0;
-        }
-
-        private ParcelableCasData(Parcel in) {
-            EventLog.writeEvent(0x534e4554, "b/73085795", -1, "");
-
-            mData = in.createByteArray();
-            mOffset = 0;
-            mLength = (mData == null) ? 0 : mData.length;
-        }
-
-        void set(@NonNull byte[] data, int offset, int length) {
-            mData = data;
-            mOffset = offset;
-            mLength = length;
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            dest.writeByteArray(mData, mOffset, mLength);
-        }
-
-        public static final Parcelable.Creator<ParcelableCasData> CREATOR
-                = new Parcelable.Creator<ParcelableCasData>() {
-            public ParcelableCasData createFromParcel(Parcel in) {
-                return new ParcelableCasData(in);
-            }
-
-            public ParcelableCasData[] newArray(int size) {
-                return new ParcelableCasData[size];
-            }
-        };
-    }
-
-    /**
      * Describe a CAS plugin with its CA_system_ID and string name.
      *
      * Returned as results of {@link #enumeratePlugins}.
@@ -215,9 +166,9 @@
             mName = null;
         }
 
-        PluginDescriptor(int CA_system_id, String name) {
-            mCASystemId = CA_system_id;
-            mName = name;
+        PluginDescriptor(@NonNull HidlCasPluginDescriptor descriptor) {
+            mCASystemId = descriptor.caSystemId;
+            mName = descriptor.name;
         }
 
         public int getSystemId() {
@@ -235,13 +186,38 @@
         }
     }
 
+    private ArrayList<Byte> toByteArray(@NonNull byte[] data, int offset, int length) {
+        ArrayList<Byte> byteArray = new ArrayList<Byte>(length);
+        for (int i = 0; i < length; i++) {
+            byteArray.add(Byte.valueOf(data[offset + i]));
+        }
+        return byteArray;
+    }
+
+    private ArrayList<Byte> toByteArray(@Nullable byte[] data) {
+        if (data == null) {
+            return new ArrayList<Byte>();
+        }
+        return toByteArray(data, 0, data.length);
+    }
+
+    private byte[] toBytes(@NonNull ArrayList<Byte> byteArray) {
+        byte[] data = null;
+        if (byteArray != null) {
+            data = new byte[byteArray.size()];
+            for (int i = 0; i < data.length; i++) {
+                data[i] = byteArray.get(i);
+            }
+        }
+        return data;
+    }
     /**
      * Class for an open session with the CA system.
      */
     public final class Session implements AutoCloseable {
-        final byte[] mSessionId;
+        final ArrayList<Byte> mSessionId;
 
-        Session(@NonNull byte[] sessionId) {
+        Session(@NonNull ArrayList<Byte> sessionId) {
             mSessionId = sessionId;
         }
 
@@ -259,9 +235,8 @@
             validateInternalStates();
 
             try {
-                mICas.setSessionPrivateData(mSessionId, data);
-            } catch (ServiceSpecificException e) {
-                MediaCasException.throwExceptions(e);
+                MediaCasException.throwExceptionIfNeeded(
+                        mICas.setSessionPrivateData(mSessionId, toByteArray(data, 0, data.length)));
             } catch (RemoteException e) {
                 cleanupAndRethrowIllegalState();
             }
@@ -284,10 +259,8 @@
             validateInternalStates();
 
             try {
-                mCasData.set(data, offset, length);
-                mICas.processEcm(mSessionId, mCasData);
-            } catch (ServiceSpecificException e) {
-                MediaCasException.throwExceptions(e);
+                MediaCasException.throwExceptionIfNeeded(
+                        mICas.processEcm(mSessionId, toByteArray(data, offset, length)));
             } catch (RemoteException e) {
                 cleanupAndRethrowIllegalState();
             }
@@ -319,57 +292,22 @@
             validateInternalStates();
 
             try {
-                mICas.closeSession(mSessionId);
-            } catch (ServiceSpecificException e) {
-                MediaCasStateException.throwExceptions(e);
+                MediaCasStateException.throwExceptionIfNeeded(
+                        mICas.closeSession(mSessionId));
             } catch (RemoteException e) {
                 cleanupAndRethrowIllegalState();
             }
         }
     }
 
-    Session createFromSessionId(byte[] sessionId) {
-        if (sessionId == null || sessionId.length == 0) {
+    Session createFromSessionId(@NonNull ArrayList<Byte> sessionId) {
+        if (sessionId == null || sessionId.size() == 0) {
             return null;
         }
         return new Session(sessionId);
     }
 
     /**
-     * Class for parceling CAS plugin descriptors over IMediaCasService binder.
-     */
-    static class ParcelableCasPluginDescriptor
-        extends PluginDescriptor implements Parcelable {
-
-        private ParcelableCasPluginDescriptor(int CA_system_id, String name) {
-            super(CA_system_id, name);
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            Log.w(TAG, "ParcelableCasPluginDescriptor.writeToParcel shouldn't be called!");
-        }
-
-        public static final Parcelable.Creator<ParcelableCasPluginDescriptor> CREATOR
-                = new Parcelable.Creator<ParcelableCasPluginDescriptor>() {
-            public ParcelableCasPluginDescriptor createFromParcel(Parcel in) {
-                int CA_system_id = in.readInt();
-                String name = in.readString();
-                return new ParcelableCasPluginDescriptor(CA_system_id, name);
-            }
-
-            public ParcelableCasPluginDescriptor[] newArray(int size) {
-                return new ParcelableCasPluginDescriptor[size];
-            }
-        };
-    }
-
-    /**
      * Query if a certain CA system is supported on this device.
      *
      * @param CA_system_id the id of the CA system.
@@ -398,13 +336,14 @@
 
         if (service != null) {
             try {
-                ParcelableCasPluginDescriptor[] descriptors = service.enumeratePlugins();
-                if (descriptors.length == 0) {
+                ArrayList<HidlCasPluginDescriptor> descriptors =
+                        service.enumeratePlugins();
+                if (descriptors.size() == 0) {
                     return null;
                 }
-                PluginDescriptor[] results = new PluginDescriptor[descriptors.length];
+                PluginDescriptor[] results = new PluginDescriptor[descriptors.size()];
                 for (int i = 0; i < results.length; i++) {
-                    results[i] = descriptors[i];
+                    results[i] = new PluginDescriptor(descriptors.get(i));
                 }
                 return results;
             } catch (RemoteException e) {
@@ -435,7 +374,7 @@
         }
     }
 
-    IBinder getBinder() {
+    IHwBinder getBinder() {
         validateInternalStates();
 
         return mICas.asBinder();
@@ -502,14 +441,22 @@
         validateInternalStates();
 
         try {
-            mICas.setPrivateData(data);
-        } catch (ServiceSpecificException e) {
-            MediaCasException.throwExceptions(e);
+            MediaCasException.throwExceptionIfNeeded(
+                    mICas.setPrivateData(toByteArray(data, 0, data.length)));
         } catch (RemoteException e) {
             cleanupAndRethrowIllegalState();
         }
     }
 
+    private class OpenSessionCallback implements ICas.openSessionCallback {
+        public Session mSession;
+        public int mStatus;
+        @Override
+        public void onValues(int status, ArrayList<Byte> sessionId) {
+            mStatus = status;
+            mSession = createFromSessionId(sessionId);
+        }
+    }
     /**
      * Open a session to descramble one or more streams scrambled by the
      * conditional access system.
@@ -524,9 +471,10 @@
         validateInternalStates();
 
         try {
-            return createFromSessionId(mICas.openSession());
-        } catch (ServiceSpecificException e) {
-            MediaCasException.throwExceptions(e);
+            OpenSessionCallback cb = new OpenSessionCallback();
+            mICas.openSession(cb);
+            MediaCasException.throwExceptionIfNeeded(cb.mStatus);
+            return cb.mSession;
         } catch (RemoteException e) {
             cleanupAndRethrowIllegalState();
         }
@@ -549,10 +497,8 @@
         validateInternalStates();
 
         try {
-            mCasData.set(data, offset, length);
-            mICas.processEmm(mCasData);
-        } catch (ServiceSpecificException e) {
-            MediaCasException.throwExceptions(e);
+            MediaCasException.throwExceptionIfNeeded(
+                    mICas.processEmm(toByteArray(data, offset, length)));
         } catch (RemoteException e) {
             cleanupAndRethrowIllegalState();
         }
@@ -590,9 +536,8 @@
         validateInternalStates();
 
         try {
-            mICas.sendEvent(event, arg, data);
-        } catch (ServiceSpecificException e) {
-            MediaCasException.throwExceptions(e);
+            MediaCasException.throwExceptionIfNeeded(
+                    mICas.sendEvent(event, arg, toByteArray(data)));
         } catch (RemoteException e) {
             cleanupAndRethrowIllegalState();
         }
@@ -613,9 +558,8 @@
         validateInternalStates();
 
         try {
-            mICas.provision(provisionString);
-        } catch (ServiceSpecificException e) {
-            MediaCasException.throwExceptions(e);
+            MediaCasException.throwExceptionIfNeeded(
+                    mICas.provision(provisionString));
         } catch (RemoteException e) {
             cleanupAndRethrowIllegalState();
         }
@@ -636,9 +580,8 @@
         validateInternalStates();
 
         try {
-            mICas.refreshEntitlements(refreshType, refreshData);
-        } catch (ServiceSpecificException e) {
-            MediaCasException.throwExceptions(e);
+            MediaCasException.throwExceptionIfNeeded(
+                    mICas.refreshEntitlements(refreshType, toByteArray(refreshData)));
         } catch (RemoteException e) {
             cleanupAndRethrowIllegalState();
         }
@@ -660,4 +603,4 @@
     protected void finalize() {
         close();
     }
-}
+}
\ No newline at end of file
diff --git a/media/java/android/media/MediaCasException.java b/media/java/android/media/MediaCasException.java
index 485f6ee..35fb104 100644
--- a/media/java/android/media/MediaCasException.java
+++ b/media/java/android/media/MediaCasException.java
@@ -16,60 +16,29 @@
 
 package android.media;
 
-import android.os.ServiceSpecificException;
+import android.hardware.cas.V1_0.Status;
 
 /**
  * Base class for MediaCas exceptions
  */
 public class MediaCasException extends Exception {
-
-    /** @hide */
-    public static final int DRM_ERROR_BASE = -2000;
-    /** @hide */
-    public static final int ERROR_DRM_UNKNOWN                        = DRM_ERROR_BASE;
-    /** @hide */
-    public static final int ERROR_DRM_NO_LICENSE                     = DRM_ERROR_BASE - 1;
-    /** @hide */
-    public static final int ERROR_DRM_LICENSE_EXPIRED                = DRM_ERROR_BASE - 2;
-    /** @hide */
-    public static final int ERROR_DRM_SESSION_NOT_OPENED             = DRM_ERROR_BASE - 3;
-    /** @hide */
-    public static final int ERROR_DRM_DECRYPT_UNIT_NOT_INITIALIZED   = DRM_ERROR_BASE - 4;
-    /** @hide */
-    public static final int ERROR_DRM_DECRYPT                        = DRM_ERROR_BASE - 5;
-    /** @hide */
-    public static final int ERROR_DRM_CANNOT_HANDLE                  = DRM_ERROR_BASE - 6;
-    /** @hide */
-    public static final int ERROR_DRM_TAMPER_DETECTED                = DRM_ERROR_BASE - 7;
-    /** @hide */
-    public static final int ERROR_DRM_NOT_PROVISIONED                = DRM_ERROR_BASE - 8;
-    /** @hide */
-    public static final int ERROR_DRM_DEVICE_REVOKED                 = DRM_ERROR_BASE - 9;
-    /** @hide */
-    public static final int ERROR_DRM_RESOURCE_BUSY                  = DRM_ERROR_BASE - 10;
-    /** @hide */
-    public static final int ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION = DRM_ERROR_BASE - 11;
-    /** @hide */
-    public static final int ERROR_DRM_LAST_USED_ERRORCODE            = DRM_ERROR_BASE - 11;
-    /** @hide */
-    public static final int ERROR_DRM_VENDOR_MAX                     = DRM_ERROR_BASE - 500;
-    /** @hide */
-    public static final int ERROR_DRM_VENDOR_MIN                     = DRM_ERROR_BASE - 999;
-
-    /** @hide */
-    public MediaCasException(String detailMessage) {
+    private MediaCasException(String detailMessage) {
         super(detailMessage);
     }
 
-    static void throwExceptions(ServiceSpecificException e) throws MediaCasException {
-        if (e.errorCode == ERROR_DRM_NOT_PROVISIONED) {
-            throw new NotProvisionedException(e.getMessage());
-        } else if (e.errorCode == ERROR_DRM_RESOURCE_BUSY) {
-            throw new ResourceBusyException(e.getMessage());
-        } else if (e.errorCode == ERROR_DRM_DEVICE_REVOKED) {
-            throw new DeniedByServerException(e.getMessage());
+    static void throwExceptionIfNeeded(int error) throws MediaCasException {
+        if (error == Status.OK) {
+            return;
+        }
+
+        if (error == Status.ERROR_CAS_NOT_PROVISIONED) {
+            throw new NotProvisionedException(null);
+        } else if (error == Status.ERROR_CAS_RESOURCE_BUSY) {
+            throw new ResourceBusyException(null);
+        } else if (error == Status.ERROR_CAS_DEVICE_REVOKED) {
+            throw new DeniedByServerException(null);
         } else {
-            MediaCasStateException.throwExceptions(e);
+            MediaCasStateException.throwExceptionIfNeeded(error);
         }
     }
 
diff --git a/media/java/android/media/MediaCasStateException.java b/media/java/android/media/MediaCasStateException.java
index cf05c29..26c5792 100644
--- a/media/java/android/media/MediaCasStateException.java
+++ b/media/java/android/media/MediaCasStateException.java
@@ -18,9 +18,8 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.os.ServiceSpecificException;
 
-import static android.media.MediaCasException.*;
+import android.hardware.cas.V1_0.Status;
 
 /**
  * Base class for MediaCas runtime exceptions
@@ -29,46 +28,62 @@
     private final int mErrorCode;
     private final String mDiagnosticInfo;
 
-    /** @hide */
-    public MediaCasStateException(int err, @Nullable String msg, @Nullable String diagnosticInfo) {
+    private MediaCasStateException(int err, @Nullable String msg, @Nullable String diagnosticInfo) {
         super(msg);
         mErrorCode = err;
         mDiagnosticInfo = diagnosticInfo;
     }
 
-    static void throwExceptions(ServiceSpecificException e) {
+    static void throwExceptionIfNeeded(int err) {
+        throwExceptionIfNeeded(err, null /* msg */);
+    }
+
+    static void throwExceptionIfNeeded(int err, @Nullable String msg) {
+        if (err == Status.OK) {
+            return;
+        }
+        if (err == Status.BAD_VALUE) {
+            throw new IllegalArgumentException();
+        }
+
         String diagnosticInfo = "";
-        switch (e.errorCode) {
-        case ERROR_DRM_UNKNOWN:
+        switch (err) {
+        case Status.ERROR_CAS_UNKNOWN:
             diagnosticInfo = "General CAS error";
             break;
-        case ERROR_DRM_NO_LICENSE:
+        case Status.ERROR_CAS_NO_LICENSE:
             diagnosticInfo = "No license";
             break;
-        case ERROR_DRM_LICENSE_EXPIRED:
+        case Status.ERROR_CAS_LICENSE_EXPIRED:
             diagnosticInfo = "License expired";
             break;
-        case ERROR_DRM_SESSION_NOT_OPENED:
+        case Status.ERROR_CAS_SESSION_NOT_OPENED:
             diagnosticInfo = "Session not opened";
             break;
-        case ERROR_DRM_DECRYPT_UNIT_NOT_INITIALIZED:
-            diagnosticInfo = "Not initialized";
-            break;
-        case ERROR_DRM_DECRYPT:
-            diagnosticInfo = "Decrypt error";
-            break;
-        case ERROR_DRM_CANNOT_HANDLE:
+        case Status.ERROR_CAS_CANNOT_HANDLE:
             diagnosticInfo = "Unsupported scheme or data format";
             break;
-        case ERROR_DRM_TAMPER_DETECTED:
+        case Status.ERROR_CAS_INVALID_STATE:
+            diagnosticInfo = "Invalid CAS state";
+            break;
+        case Status.ERROR_CAS_INSUFFICIENT_OUTPUT_PROTECTION:
+            diagnosticInfo = "Insufficient output protection";
+            break;
+        case Status.ERROR_CAS_TAMPER_DETECTED:
             diagnosticInfo = "Tamper detected";
             break;
+        case Status.ERROR_CAS_DECRYPT_UNIT_NOT_INITIALIZED:
+            diagnosticInfo = "Not initialized";
+            break;
+        case Status.ERROR_CAS_DECRYPT:
+            diagnosticInfo = "Decrypt error";
+            break;
         default:
             diagnosticInfo = "Unknown CAS state exception";
             break;
         }
-        throw new MediaCasStateException(e.errorCode, e.getMessage(),
-                String.format("%s (err=%d)", diagnosticInfo, e.errorCode));
+        throw new MediaCasStateException(err, msg,
+                String.format("%s (err=%d)", diagnosticInfo, err));
     }
 
     /**
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index 9b74656..3d5f6bc 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -26,6 +26,7 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
+import android.os.IHwBinder;
 import android.os.Looper;
 import android.os.Message;
 import android.os.PersistableBundle;
@@ -340,7 +341,8 @@
    </tr>
    <tr>
     <td>FLAC</td>
-    <td>Metadata blocks</td>
+    <td>mandatory metadata block (called the STREAMINFO block),<br>
+        optionally followed by any number of other metadata blocks</td>
     <td class=NA>Not Used</td>
     <td class=NA>Not Used</td>
    </tr>
@@ -1902,7 +1904,7 @@
 
     private void configure(
             @Nullable MediaFormat format, @Nullable Surface surface,
-            @Nullable MediaCrypto crypto, @Nullable IBinder descramblerBinder,
+            @Nullable MediaCrypto crypto, @Nullable IHwBinder descramblerBinder,
             @ConfigureFlag int flags) {
         if (crypto != null && descramblerBinder != null) {
             throw new IllegalArgumentException("Can't use crypto and descrambler together!");
@@ -2017,7 +2019,7 @@
     private native final void native_configure(
             @Nullable String[] keys, @Nullable Object[] values,
             @Nullable Surface surface, @Nullable MediaCrypto crypto,
-            @Nullable IBinder descramblerBinder, @ConfigureFlag int flags);
+            @Nullable IHwBinder descramblerBinder, @ConfigureFlag int flags);
 
     /**
      * Requests a Surface to use as the input to an encoder, in place of input buffers.  This
diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java
index a19726c..f41e33f 100644
--- a/media/java/android/media/MediaCodecInfo.java
+++ b/media/java/android/media/MediaCodecInfo.java
@@ -2095,6 +2095,7 @@
                             errors |= ERROR_UNRECOGNIZED;
                     }
                     switch (profileLevel.profile) {
+                        case CodecProfileLevel.AVCProfileConstrainedHigh:
                         case CodecProfileLevel.AVCProfileHigh:
                             BR *= 1250; break;
                         case CodecProfileLevel.AVCProfileHigh10:
@@ -2107,6 +2108,7 @@
                             errors |= ERROR_UNSUPPORTED;
                             supported = false;
                             // fall through - treat as base profile
+                        case CodecProfileLevel.AVCProfileConstrainedBaseline:
                         case CodecProfileLevel.AVCProfileBaseline:
                         case CodecProfileLevel.AVCProfileMain:
                             BR *= 1000; break;
@@ -2747,8 +2749,8 @@
                 mQualityRange = Utils
                         .parseIntRange(info.getString("quality-range"), mQualityRange);
             }
-            if (info.containsKey("feature-bitrate-control")) {
-                for (String mode: info.getString("feature-bitrate-control").split(",")) {
+            if (info.containsKey("feature-bitrate-modes")) {
+                for (String mode: info.getString("feature-bitrate-modes").split(",")) {
                     mBitControl |= parseBitrateMode(mode);
                 }
             }
@@ -2861,6 +2863,8 @@
         public static final int AVCProfileHigh10   = 0x10;
         public static final int AVCProfileHigh422  = 0x20;
         public static final int AVCProfileHigh444  = 0x40;
+        public static final int AVCProfileConstrainedBaseline = 0x10000;
+        public static final int AVCProfileConstrainedHigh     = 0x80000;
 
         // from OMX_VIDEO_AVCLEVELTYPE
         public static final int AVCLevel1       = 0x01;
@@ -3042,6 +3046,8 @@
         public static final int DolbyVisionProfileDvheStn = 0x20;
         public static final int DolbyVisionProfileDvheDth = 0x40;
         public static final int DolbyVisionProfileDvheDtb = 0x80;
+        public static final int DolbyVisionProfileDvheSt = 0x100;
+        public static final int DolbyVisionProfileDvavSe = 0x200;
 
         // from OMX_VIDEO_DOLBYVISIONLEVELTYPE
         public static final int DolbyVisionLevelHd24    = 0x1;
diff --git a/media/java/android/media/MediaDescrambler.java b/media/java/android/media/MediaDescrambler.java
index b75b7dd..40c837b 100644
--- a/media/java/android/media/MediaDescrambler.java
+++ b/media/java/android/media/MediaDescrambler.java
@@ -17,10 +17,9 @@
 package android.media;
 
 import android.annotation.NonNull;
+import android.hardware.cas.V1_0.*;
 import android.media.MediaCasException.UnsupportedCasException;
-import android.os.IBinder;
-import android.os.Parcel;
-import android.os.Parcelable;
+import android.os.IHwBinder;
 import android.os.RemoteException;
 import android.os.ServiceSpecificException;
 import android.util.Log;
@@ -40,7 +39,7 @@
  */
 public final class MediaDescrambler implements AutoCloseable {
     private static final String TAG = "MediaDescrambler";
-    private IDescrambler mIDescrambler;
+    private IDescramblerBase mIDescrambler;
 
     private final void validateInternalStates() {
         if (mIDescrambler == null) {
@@ -54,39 +53,6 @@
     }
 
     /**
-     * Class for parceling descrambling parameters over IDescrambler binder.
-     */
-    // This class currently is not used by Java binder. descramble() goes through
-    // jni to use shared memory. However, the parcelable is still required for AIDL.
-    static class DescrambleInfo implements Parcelable {
-        private DescrambleInfo() {
-        }
-
-        private DescrambleInfo(Parcel in) {
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-        }
-
-        public static final Parcelable.Creator<DescrambleInfo> CREATOR
-                = new Parcelable.Creator<DescrambleInfo>() {
-            public DescrambleInfo createFromParcel(Parcel in) {
-                return new DescrambleInfo(in);
-            }
-
-            public DescrambleInfo[] newArray(int size) {
-                return new DescrambleInfo[size];
-            }
-        };
-    }
-
-    /**
      * Instantiate a MediaDescrambler.
      *
      * @param CA_system_id The system id of the scrambling scheme.
@@ -107,7 +73,7 @@
         native_setup(mIDescrambler.asBinder());
     }
 
-    IBinder getBinder() {
+    IHwBinder getBinder() {
         validateInternalStates();
 
         return mIDescrambler.asBinder();
@@ -151,9 +117,8 @@
         validateInternalStates();
 
         try {
-            mIDescrambler.setMediaCasSession(session.mSessionId);
-        } catch (ServiceSpecificException e) {
-            MediaCasStateException.throwExceptions(e);
+            MediaCasStateException.throwExceptionIfNeeded(
+                    mIDescrambler.setMediaCasSession(session.mSessionId));
         } catch (RemoteException e) {
             cleanupAndRethrowIllegalState();
         }
@@ -210,7 +175,9 @@
                     srcBuf, srcBuf.position(), srcBuf.limit(),
                     dstBuf, dstBuf.position(), dstBuf.limit());
         } catch (ServiceSpecificException e) {
-            MediaCasStateException.throwExceptions(e);
+            MediaCasStateException.throwExceptionIfNeeded(e.errorCode, e.getMessage());
+        } catch (RemoteException e) {
+            cleanupAndRethrowIllegalState();
         }
         return -1;
     }
@@ -234,12 +201,12 @@
     }
 
     private static native final void native_init();
-    private native final void native_setup(@NonNull IBinder decramblerBinder);
+    private native final void native_setup(@NonNull IHwBinder decramblerBinder);
     private native final void native_release();
     private native final int native_descramble(
             byte key, int numSubSamples, int[] numBytesOfClearData, int[] numBytesOfEncryptedData,
             @NonNull ByteBuffer srcBuf, int srcOffset, int srcLimit,
-            ByteBuffer dstBuf, int dstOffset, int dstLimit);
+            ByteBuffer dstBuf, int dstOffset, int dstLimit) throws RemoteException;
 
     static {
         System.loadLibrary("media_jni");
diff --git a/media/java/android/media/MediaExtractor.java b/media/java/android/media/MediaExtractor.java
index fe461be..2c1b4b3 100644
--- a/media/java/android/media/MediaExtractor.java
+++ b/media/java/android/media/MediaExtractor.java
@@ -26,8 +26,8 @@
 import android.media.MediaFormat;
 import android.media.MediaHTTPService;
 import android.net.Uri;
-import android.os.Bundle;
 import android.os.IBinder;
+import android.os.IHwBinder;
 import android.os.PersistableBundle;
 
 import com.android.internal.util.Preconditions;
@@ -38,9 +38,8 @@
 import java.lang.annotation.RetentionPolicy;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
-import java.util.Collections;
+import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
@@ -263,7 +262,7 @@
         nativeSetMediaCas(mediaCas.getBinder());
     }
 
-    private native final void nativeSetMediaCas(@NonNull IBinder casBinder);
+    private native final void nativeSetMediaCas(@NonNull IHwBinder casBinder);
 
     /**
      * Describes the conditional access system used to scramble a track.
@@ -300,6 +299,14 @@
         }
     }
 
+    private ArrayList<Byte> toByteArray(@NonNull byte[] data) {
+        ArrayList<Byte> byteArray = new ArrayList<Byte>(data.length);
+        for (int i = 0; i < data.length; i++) {
+            byteArray.add(i, Byte.valueOf(data[i]));
+        }
+        return byteArray;
+    }
+
     /**
      * Retrieves the information about the conditional access system used to scramble
      * a track.
@@ -317,7 +324,7 @@
                 buf.rewind();
                 final byte[] sessionId = new byte[buf.remaining()];
                 buf.get(sessionId);
-                session = mMediaCas.createFromSessionId(sessionId);
+                session = mMediaCas.createFromSessionId(toByteArray(sessionId));
             }
             return new CasInfo(systemId, session);
         }
diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java
index 2f48ffb..fc4d15f 100644
--- a/media/java/android/media/MediaFile.java
+++ b/media/java/android/media/MediaFile.java
@@ -80,8 +80,9 @@
     public static final int FILE_TYPE_BMP     = 34;
     public static final int FILE_TYPE_WBMP    = 35;
     public static final int FILE_TYPE_WEBP    = 36;
+    public static final int FILE_TYPE_HEIF    = 37;
     private static final int FIRST_IMAGE_FILE_TYPE = FILE_TYPE_JPEG;
-    private static final int LAST_IMAGE_FILE_TYPE = FILE_TYPE_WEBP;
+    private static final int LAST_IMAGE_FILE_TYPE = FILE_TYPE_HEIF;
 
     // Raw image file types
     public static final int FILE_TYPE_DNG     = 300;
@@ -239,6 +240,8 @@
         addFileType("BMP", FILE_TYPE_BMP, "image/x-ms-bmp", MtpConstants.FORMAT_BMP, true);
         addFileType("WBMP", FILE_TYPE_WBMP, "image/vnd.wap.wbmp", MtpConstants.FORMAT_DEFINED, false);
         addFileType("WEBP", FILE_TYPE_WEBP, "image/webp", MtpConstants.FORMAT_DEFINED, false);
+        addFileType("HEIC", FILE_TYPE_HEIF, "image/heif", MtpConstants.FORMAT_HEIF, true);
+        addFileType("HEIF", FILE_TYPE_HEIF, "image/heif", MtpConstants.FORMAT_HEIF, false);
 
         addFileType("DNG", FILE_TYPE_DNG, "image/x-adobe-dng", MtpConstants.FORMAT_DNG, true);
         addFileType("CR2", FILE_TYPE_CR2, "image/x-canon-cr2", MtpConstants.FORMAT_TIFF, false);
diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java
index 7dd70d4..571b41b 100644
--- a/media/java/android/media/MediaMetadataRetriever.java
+++ b/media/java/android/media/MediaMetadataRetriever.java
@@ -16,6 +16,7 @@
 
 package android.media;
 
+import android.annotation.IntDef;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.res.AssetFileDescriptor;
@@ -27,6 +28,8 @@
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 
 import java.util.Map;
 
@@ -223,9 +226,12 @@
     /**
      * Call this method after setDataSource(). This method finds a
      * representative frame close to the given time position by considering
-     * the given option if possible, and returns it as a bitmap. This is
-     * useful for generating a thumbnail for an input data source or just
-     * obtain and display a frame at the given time position.
+     * the given option if possible, and returns it as a bitmap.
+     *
+     * <p>If you don't need a full-resolution
+     * frame (for example, because you need a thumbnail image), use
+     * {@link #getScaledFrameAtTime getScaledFrameAtTime()} instead of this
+     * method.</p>
      *
      * @param timeUs The time position where the frame will be retrieved.
      * When retrieving the frame at the given time position, there is no
@@ -246,26 +252,81 @@
      * {@link #OPTION_CLOSEST} often has larger performance overhead compared
      * to the other options if there is no sync frame located at timeUs.
      *
-     * @return A Bitmap containing a representative video frame, which 
+     * @return A Bitmap containing a representative video frame, which
      *         can be null, if such a frame cannot be retrieved.
      */
-    public Bitmap getFrameAtTime(long timeUs, int option) {
+    public Bitmap getFrameAtTime(long timeUs, @Option int option) {
         if (option < OPTION_PREVIOUS_SYNC ||
             option > OPTION_CLOSEST) {
             throw new IllegalArgumentException("Unsupported option: " + option);
         }
 
-        return _getFrameAtTime(timeUs, option);
+        return _getFrameAtTime(timeUs, option, -1 /*dst_width*/, -1 /*dst_height*/);
+    }
+
+    /**
+     * Retrieve a video frame near a given timestamp scaled to a desired size.
+     * Call this method after setDataSource(). This method finds a representative
+     * frame close to the given time position by considering the given option
+     * if possible, and returns it as a bitmap with same aspect ratio as the source
+     * while scaling it so that it fits into the desired size of dst_width by dst_height.
+     * This is useful for generating a thumbnail for an input data source or just to
+     * obtain a scaled frame at the given time position.
+     *
+     * @param timeUs The time position in microseconds where the frame will be retrieved.
+     * When retrieving the frame at the given time position, there is no
+     * guarantee that the data source has a frame located at the position.
+     * When this happens, a frame nearby will be returned. If timeUs is
+     * negative, time position and option will ignored, and any frame
+     * that the implementation considers as representative may be returned.
+     *
+     * @param option a hint on how the frame is found. Use
+     * {@link #OPTION_PREVIOUS_SYNC} if one wants to retrieve a sync frame
+     * that has a timestamp earlier than or the same as timeUs. Use
+     * {@link #OPTION_NEXT_SYNC} if one wants to retrieve a sync frame
+     * that has a timestamp later than or the same as timeUs. Use
+     * {@link #OPTION_CLOSEST_SYNC} if one wants to retrieve a sync frame
+     * that has a timestamp closest to or the same as timeUs. Use
+     * {@link #OPTION_CLOSEST} if one wants to retrieve a frame that may
+     * or may not be a sync frame but is closest to or the same as timeUs.
+     * {@link #OPTION_CLOSEST} often has larger performance overhead compared
+     * to the other options if there is no sync frame located at timeUs.
+     *
+     * @param dstWidth expected output bitmap width
+     * @param dstHeight expected output bitmap height
+     * @return A Bitmap of size not larger than dstWidth by dstHeight containing a
+     *         scaled video frame, which can be null, if such a frame cannot be retrieved.
+     * @throws IllegalArgumentException if passed in invalid option or width by height
+     *         is less than or equal to 0.
+     */
+    public Bitmap getScaledFrameAtTime(
+            long timeUs, @Option int option, int dstWidth, int dstHeight) {
+        if (option < OPTION_PREVIOUS_SYNC ||
+            option > OPTION_CLOSEST) {
+            throw new IllegalArgumentException("Unsupported option: " + option);
+        }
+        if (dstWidth <= 0) {
+            throw new IllegalArgumentException("Invalid width: " + dstWidth);
+        }
+        if (dstHeight <= 0) {
+            throw new IllegalArgumentException("Invalid height: " + dstHeight);
+        }
+
+        return _getFrameAtTime(timeUs, option, dstWidth, dstHeight);
     }
 
     /**
      * Call this method after setDataSource(). This method finds a
      * representative frame close to the given time position if possible,
-     * and returns it as a bitmap. This is useful for generating a thumbnail
-     * for an input data source. Call this method if one does not care
+     * and returns it as a bitmap. Call this method if one does not care
      * how the frame is found as long as it is close to the given time;
      * otherwise, please call {@link #getFrameAtTime(long, int)}.
      *
+     * <p>If you don't need a full-resolution
+     * frame (for example, because you need a thumbnail image), use
+     * {@link #getScaledFrameAtTime getScaledFrameAtTime()} instead of this
+     * method.</p>
+     *
      * @param timeUs The time position where the frame will be retrieved.
      * When retrieving the frame at the given time position, there is no
      * guarentee that the data source has a frame located at the position.
@@ -273,8 +334,8 @@
      * negative, time position and option will ignored, and any frame
      * that the implementation considers as representative may be returned.
      *
-     * @return A Bitmap containing a representative video frame, which
-     *         can be null, if such a frame cannot be retrieved.
+     * @return A Bitmap of size dst_widthxdst_height containing a representative
+     *         video frame, which can be null, if such a frame cannot be retrieved.
      *
      * @see #getFrameAtTime(long, int)
      */
@@ -285,11 +346,15 @@
     /**
      * Call this method after setDataSource(). This method finds a
      * representative frame at any time position if possible,
-     * and returns it as a bitmap. This is useful for generating a thumbnail
-     * for an input data source. Call this method if one does not
+     * and returns it as a bitmap. Call this method if one does not
      * care about where the frame is located; otherwise, please call
      * {@link #getFrameAtTime(long)} or {@link #getFrameAtTime(long, int)}
      *
+     * <p>If you don't need a full-resolution
+     * frame (for example, because you need a thumbnail image), use
+     * {@link #getScaledFrameAtTime getScaledFrameAtTime()} instead of this
+     * method.</p>
+     *
      * @return A Bitmap containing a representative video frame, which
      *         can be null, if such a frame cannot be retrieved.
      *
@@ -297,17 +362,16 @@
      * @see #getFrameAtTime(long, int)
      */
     public Bitmap getFrameAtTime() {
-        return getFrameAtTime(-1, OPTION_CLOSEST_SYNC);
+        return _getFrameAtTime(-1, OPTION_CLOSEST_SYNC, -1 /*dst_width*/, -1 /*dst_height*/);
     }
 
-    private native Bitmap _getFrameAtTime(long timeUs, int option);
+    private native Bitmap _getFrameAtTime(long timeUs, int option, int width, int height);
 
-    
     /**
      * Call this method after setDataSource(). This method finds the optional
      * graphic or album/cover art associated associated with the data source. If
      * there are more than one pictures, (any) one of them is returned.
-     * 
+     *
      * @return null if no such graphic is found.
      */
     public byte[] getEmbeddedPicture() {
@@ -377,6 +441,16 @@
      */
     public static final int OPTION_CLOSEST          = 0x03;
 
+    /** @hide */
+    @IntDef(flag = true, prefix = { "OPTION_" }, value = {
+            OPTION_PREVIOUS_SYNC,
+            OPTION_NEXT_SYNC,
+            OPTION_CLOSEST_SYNC,
+            OPTION_CLOSEST,
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Option {}
+
     /*
      * Do not change these metadata key values without updating their
      * counterparts in include/media/mediametadataretriever.h!
diff --git a/media/java/android/media/MediaMuxer.java b/media/java/android/media/MediaMuxer.java
index 832b297..91e57ee 100644
--- a/media/java/android/media/MediaMuxer.java
+++ b/media/java/android/media/MediaMuxer.java
@@ -70,7 +70,7 @@
  <p>
   Per-frame metadata is useful in carrying extra information that correlated with video or audio to
   facilitate offline processing, e.g. gyro signals from the sensor could help video stabilization when
-  doing offline processing. Metaadata track is only supported in MP4 container. When adding a new
+  doing offline processing. Metadata track is only supported in MP4 container. When adding a new
   metadata track, track's mime format must start with prefix "application/", e.g. "applicaton/gyro".
   Metadata's format/layout will be defined by the application. Writing metadata is nearly the same as
   writing video/audio data except that the data will not be from mediacodec. Application just needs
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index 4b1c0e1..f384ea5 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -3408,7 +3408,7 @@
     private static void postEventFromNative(Object mediaplayer_ref,
                                             int what, int arg1, int arg2, Object obj)
     {
-        MediaPlayer mp = (MediaPlayer)((WeakReference)mediaplayer_ref).get();
+        final MediaPlayer mp = (MediaPlayer)((WeakReference)mediaplayer_ref).get();
         if (mp == null) {
             return;
         }
@@ -3416,8 +3416,14 @@
         switch (what) {
         case MEDIA_INFO:
             if (arg1 == MEDIA_INFO_STARTED_AS_NEXT) {
-                // this acquires the wakelock if needed, and sets the client side state
-                mp.start();
+                new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                        // this acquires the wakelock if needed, and sets the client side state
+                        mp.start();
+                    }
+                }).start();
+                Thread.yield();
             }
             break;
 
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
index 33a7c83..59a124f 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -324,6 +324,40 @@
         }
     }
 
+    /** @hide */
+    public static final String toLogFriendlyAudioSource(int source) {
+        switch(source) {
+        case AudioSource.DEFAULT:
+            return "DEFAULT";
+        case AudioSource.MIC:
+            return "MIC";
+        case AudioSource.VOICE_UPLINK:
+            return "VOICE_UPLINK";
+        case AudioSource.VOICE_DOWNLINK:
+            return "VOICE_DOWNLINK";
+        case AudioSource.VOICE_CALL:
+            return "VOICE_CALL";
+        case AudioSource.CAMCORDER:
+            return "CAMCORDER";
+        case AudioSource.VOICE_RECOGNITION:
+            return "VOICE_RECOGNITION";
+        case AudioSource.VOICE_COMMUNICATION:
+            return "VOICE_COMMUNICATION";
+        case AudioSource.REMOTE_SUBMIX:
+            return "REMOTE_SUBMIX";
+        case AudioSource.UNPROCESSED:
+            return "UNPROCESSED";
+        case AudioSource.RADIO_TUNER:
+            return "RADIO_TUNER";
+        case AudioSource.HOTWORD:
+            return "HOTWORD";
+        case AudioSource.AUDIO_SOURCE_INVALID:
+            return "AUDIO_SOURCE_INVALID";
+        default:
+            return "unknown source " + source;
+        }
+    }
+
     /**
      * Defines the video source. These constants are used with
      * {@link MediaRecorder#setVideoSource(int)}.
diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java
index 80a0315..b4fff48 100644
--- a/media/java/android/media/MediaRouter.java
+++ b/media/java/android/media/MediaRouter.java
@@ -88,7 +88,6 @@
         RouteInfo mBluetoothA2dpRoute;
 
         RouteInfo mSelectedRoute;
-        RouteInfo mSystemAudioRoute;
 
         final boolean mCanConfigureWifiDisplays;
         boolean mActivelyScanningWifiDisplays;
@@ -150,7 +149,6 @@
             }
 
             addRouteStatic(mDefaultAudioVideo);
-            mSystemAudioRoute = mDefaultAudioVideo;
 
             // This will select the active wifi display route if there is one.
             updateWifiDisplayStatus(mDisplayService.getWifiDisplayStatus());
@@ -185,28 +183,34 @@
         }
 
         void updateAudioRoutes(AudioRoutesInfo newRoutes) {
-            boolean updated = false;
+            boolean audioRoutesChanged = false;
+            boolean forceUseDefaultRoute = false;
+
             if (newRoutes.mainType != mCurAudioRoutesInfo.mainType) {
                 mCurAudioRoutesInfo.mainType = newRoutes.mainType;
                 int name;
-                if ((newRoutes.mainType&AudioRoutesInfo.MAIN_HEADPHONES) != 0
-                        || (newRoutes.mainType&AudioRoutesInfo.MAIN_HEADSET) != 0) {
+                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) {
+                } 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) {
+                } else if ((newRoutes.mainType & AudioRoutesInfo.MAIN_HDMI) != 0) {
                     name = com.android.internal.R.string.default_media_route_name_hdmi;
                 } else {
                     name = com.android.internal.R.string.default_audio_route_name;
                 }
                 mDefaultAudioVideo.mNameResId = name;
                 dispatchRouteChanged(mDefaultAudioVideo);
-                updated = true;
+
+                if ((newRoutes.mainType & (AudioRoutesInfo.MAIN_HEADSET
+                        | AudioRoutesInfo.MAIN_HEADPHONES | AudioRoutesInfo.MAIN_USB)) != 0) {
+                    forceUseDefaultRoute = true;
+                }
+                audioRoutesChanged = true;
             }
 
-            final int mainType = mCurAudioRoutesInfo.mainType;
-
             if (!TextUtils.equals(newRoutes.bluetoothName, mCurAudioRoutesInfo.bluetoothName)) {
+                forceUseDefaultRoute = false;
                 mCurAudioRoutesInfo.bluetoothName = newRoutes.bluetoothName;
                 if (mCurAudioRoutesInfo.bluetoothName != null) {
                     if (mBluetoothA2dpRoute == null) {
@@ -219,8 +223,6 @@
                         info.mDeviceType = RouteInfo.DEVICE_TYPE_BLUETOOTH;
                         mBluetoothA2dpRoute = info;
                         addRouteStatic(mBluetoothA2dpRoute);
-                        mSystemAudioRoute = mBluetoothA2dpRoute;
-                        selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mSystemAudioRoute, false);
                     } else {
                         mBluetoothA2dpRoute.mName = mCurAudioRoutesInfo.bluetoothName;
                         dispatchRouteChanged(mBluetoothA2dpRoute);
@@ -229,33 +231,26 @@
                     // BT disconnected
                     removeRouteStatic(mBluetoothA2dpRoute);
                     mBluetoothA2dpRoute = null;
-                    mSystemAudioRoute = mDefaultAudioVideo;
-                    selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mSystemAudioRoute, false);
                 }
-                updated = true;
+                audioRoutesChanged = true;
             }
 
-            if (mBluetoothA2dpRoute != null) {
-                final boolean a2dpEnabled = isBluetoothA2dpOn();
-                if (mSelectedRoute == mBluetoothA2dpRoute && !a2dpEnabled) {
-                    // A2DP off
-                    mSystemAudioRoute = mDefaultAudioVideo;
-                    updated = true;
-                } else if ((mSelectedRoute == mDefaultAudioVideo || mSelectedRoute == null) &&
-                        a2dpEnabled) {
-                    // A2DP on or BT connected
-                    mSystemAudioRoute = mBluetoothA2dpRoute;
-                    updated = true;
-                }
-            }
-            if (updated) {
+            if (audioRoutesChanged) {
                 Log.v(TAG, "Audio routes updated: " + newRoutes + ", a2dp=" + isBluetoothA2dpOn());
+                if (mSelectedRoute == null || mSelectedRoute == mDefaultAudioVideo
+                        || mSelectedRoute == mBluetoothA2dpRoute) {
+                    if (forceUseDefaultRoute || mBluetoothA2dpRoute == null) {
+                        selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mDefaultAudioVideo, false);
+                    } else {
+                        selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mBluetoothA2dpRoute, false);
+                    }
+                }
             }
         }
 
         boolean isBluetoothA2dpOn() {
             try {
-                return mAudioService.isBluetoothA2dpOn();
+                return mBluetoothA2dpRoute != null && mAudioService.isBluetoothA2dpOn();
             } catch (RemoteException e) {
                 Log.e(TAG, "Error querying Bluetooth A2DP state", e);
                 return false;
@@ -603,15 +598,20 @@
 
             @Override
             public void onRestoreRoute() {
-                if ((mSelectedRoute != mDefaultAudioVideo && mSelectedRoute != mBluetoothA2dpRoute)
-                        || mSelectedRoute == mSystemAudioRoute) {
-                    return;
-                }
-                try {
-                    sStatic.mAudioService.setBluetoothA2dpOn(mSelectedRoute == mBluetoothA2dpRoute);
-                } catch (RemoteException e) {
-                    Log.e(TAG, "Error changing Bluetooth A2DP state", e);
-                }
+                mHandler.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        // Skip restoring route if the selected route is not a system audio route,
+                        // MediaRouter is initializing, or mClient was changed.
+                        if (Client.this != mClient || mSelectedRoute == null
+                                || (mSelectedRoute != mDefaultAudioVideo
+                                        && mSelectedRoute != mBluetoothA2dpRoute)) {
+                            return;
+                        }
+                        Log.v(TAG, "onRestoreRoute() : route=" + mSelectedRoute);
+                        mSelectedRoute.select();
+                    }
+                });
             }
         }
     }
@@ -943,10 +943,12 @@
         Log.v(TAG, "Selecting route: " + route);
         assert(route != null);
         final RouteInfo oldRoute = sStatic.mSelectedRoute;
+        final RouteInfo currentSystemRoute = sStatic.isBluetoothA2dpOn()
+                ? sStatic.mBluetoothA2dpRoute : sStatic.mDefaultAudioVideo;
         boolean wasDefaultOrBluetoothRoute = (oldRoute == sStatic.mDefaultAudioVideo
                 || oldRoute == sStatic.mBluetoothA2dpRoute);
         if (oldRoute == route
-                && (!wasDefaultOrBluetoothRoute || oldRoute == sStatic.mSystemAudioRoute)) {
+                && (!wasDefaultOrBluetoothRoute || route == currentSystemRoute)) {
             return;
         }
         if (!route.matchesTypes(types)) {
@@ -1017,8 +1019,7 @@
 
     static void selectDefaultRouteStatic() {
         // TODO: Be smarter about the route types here; this selects for all valid.
-        if (sStatic.mSelectedRoute != sStatic.mBluetoothA2dpRoute
-                && sStatic.mBluetoothA2dpRoute != null && sStatic.isBluetoothA2dpOn()) {
+        if (sStatic.mSelectedRoute != sStatic.mBluetoothA2dpRoute && sStatic.isBluetoothA2dpOn()) {
             selectRouteStatic(ROUTE_TYPE_ANY, sStatic.mBluetoothA2dpRoute, false);
         } else {
             selectRouteStatic(ROUTE_TYPE_ANY, sStatic.mDefaultAudioVideo, false);
@@ -1266,7 +1267,9 @@
     }
 
     static void dispatchRouteChanged(RouteInfo info, int oldSupportedTypes) {
-        Log.v(TAG, "Dispatching route change: " + info);
+        if (DEBUG) {
+            Log.d(TAG, "Dispatching route change: " + info);
+        }
         final int newSupportedTypes = info.mSupportedTypes;
         for (CallbackInfo cbi : sStatic.mCallbacks) {
             // Reconstruct some of the history for callbacks that may not have observed
diff --git a/media/java/android/media/PlaybackParams.java b/media/java/android/media/PlaybackParams.java
index 021dbf2..938a953 100644
--- a/media/java/android/media/PlaybackParams.java
+++ b/media/java/android/media/PlaybackParams.java
@@ -174,7 +174,7 @@
      * Sets the pitch factor.
      * @param pitch
      * @return this <code>PlaybackParams</code> instance.
-     * @throws InvalidArgumentException if the pitch is negative
+     * @throws IllegalArgumentException if the pitch is negative.
      */
     public PlaybackParams setPitch(float pitch) {
         if (pitch < 0.f) {
diff --git a/media/java/android/media/PlayerBase.java b/media/java/android/media/PlayerBase.java
index 9bd93aa..09449a1 100644
--- a/media/java/android/media/PlayerBase.java
+++ b/media/java/android/media/PlayerBase.java
@@ -127,8 +127,9 @@
             Log.e(TAG, "Error talking to audio service, STARTED state will not be tracked", e);
         }
         synchronized (mLock) {
+            boolean attributesChanged = (mAttributes != attr);
             mAttributes = attr;
-            updateAppOpsPlayAudio_sync();
+            updateAppOpsPlayAudio_sync(attributesChanged);
         }
     }
 
@@ -200,16 +201,13 @@
     }
 
     void baseSetVolume(float leftVolume, float rightVolume) {
-        final boolean hasAppOpsPlayAudio;
+        final boolean isRestricted;
         synchronized (mLock) {
             mLeftVolume = leftVolume;
             mRightVolume = rightVolume;
-            hasAppOpsPlayAudio = mHasAppOpsPlayAudio;
-            if (isRestricted_sync()) {
-                return;
-            }
+            isRestricted = isRestricted_sync();
         }
-        playerSetVolume(!hasAppOpsPlayAudio/*muting*/,
+        playerSetVolume(isRestricted/*muting*/,
                 leftVolume * mPanMultiplierL, rightVolume * mPanMultiplierR);
     }
 
@@ -250,7 +248,7 @@
 
     private void updateAppOpsPlayAudio() {
         synchronized (mLock) {
-            updateAppOpsPlayAudio_sync();
+            updateAppOpsPlayAudio_sync(false);
         }
     }
 
@@ -258,7 +256,7 @@
      * To be called whenever a condition that might affect audibility of this player is updated.
      * Must be called synchronized on mLock.
      */
-    void updateAppOpsPlayAudio_sync() {
+    void updateAppOpsPlayAudio_sync(boolean attributesChanged) {
         boolean oldHasAppOpsPlayAudio = mHasAppOpsPlayAudio;
         try {
             int mode = AppOpsManager.MODE_IGNORED;
@@ -275,8 +273,10 @@
         // AppsOps alters a player's volume; when the restriction changes, reflect it on the actual
         // volume used by the player
         try {
-            if (oldHasAppOpsPlayAudio != mHasAppOpsPlayAudio) {
-                if (mHasAppOpsPlayAudio) {
+            if (oldHasAppOpsPlayAudio != mHasAppOpsPlayAudio ||
+                    attributesChanged) {
+                getService().playerHasOpPlayAudio(mPlayerIId, mHasAppOpsPlayAudio);
+                if (!isRestricted_sync()) {
                     if (DEBUG_APP_OPS) {
                         Log.v(TAG, "updateAppOpsPlayAudio: unmuting player, vol=" + mLeftVolume
                                 + "/" + mRightVolume);
diff --git a/media/java/android/media/SyncParams.java b/media/java/android/media/SyncParams.java
index 319eacba..9f6bfe1 100644
--- a/media/java/android/media/SyncParams.java
+++ b/media/java/android/media/SyncParams.java
@@ -232,7 +232,7 @@
      *     the maximum deviation of the playback rate from the playback rate
      *     set. ({@code abs(actual_rate - set_rate) / set_rate})
      * @return this <code>SyncParams</code> instance.
-     * @throws InvalidArgumentException if the tolerance is negative, or not less than one
+     * @throws IllegalArgumentException if the tolerance is negative, or not less than one.
      */
     public SyncParams setTolerance(float tolerance) {
         if (tolerance < 0.f || tolerance >= 1.f) {
diff --git a/media/java/android/media/audiofx/AcousticEchoCanceler.java b/media/java/android/media/audiofx/AcousticEchoCanceler.java
index f5f98ef..3a44df4 100644
--- a/media/java/android/media/audiofx/AcousticEchoCanceler.java
+++ b/media/java/android/media/audiofx/AcousticEchoCanceler.java
@@ -20,7 +20,7 @@
 
 /**
  * Acoustic Echo Canceler (AEC).
- * <p>Acoustic Echo Canceler (AEC) is an audio pre-processing which removes the contribution of the
+ * <p>Acoustic Echo Canceler (AEC) is an audio pre-processor which removes the contribution of the
  * signal received from the remote party from the captured audio signal.
  * <p>AEC is used by voice communication applications (voice chat, video conferencing, SIP calls)
  * where the presence of echo with significant delay in the signal received from the remote party
diff --git a/media/java/android/media/audiofx/AutomaticGainControl.java b/media/java/android/media/audiofx/AutomaticGainControl.java
index 4a6b1f3..a76b4de 100644
--- a/media/java/android/media/audiofx/AutomaticGainControl.java
+++ b/media/java/android/media/audiofx/AutomaticGainControl.java
@@ -20,7 +20,7 @@
 
 /**
  * Automatic Gain Control (AGC).
- * <p>Automatic Gain Control (AGC) is an audio pre-processing which automatically normalizes the
+ * <p>Automatic Gain Control (AGC) is an audio pre-processor which automatically normalizes the
  * output of the captured signal by boosting or lowering input from the microphone to match a preset
  * level so that the output signal level is virtually constant.
  * AGC can be used by applications where the input signal dynamic range is not important but where
diff --git a/media/java/android/media/audiofx/NoiseSuppressor.java b/media/java/android/media/audiofx/NoiseSuppressor.java
index bca990f..70cc87c 100644
--- a/media/java/android/media/audiofx/NoiseSuppressor.java
+++ b/media/java/android/media/audiofx/NoiseSuppressor.java
@@ -20,7 +20,7 @@
 
 /**
  * Noise Suppressor (NS).
- * <p>Noise suppression (NS) is an audio pre-processing which removes background noise from the
+ * <p>Noise suppression (NS) is an audio pre-processor which removes background noise from the
  * captured signal. The component of the signal considered as noise can be either stationary
  * (car/airplane engine, AC system) or non-stationary (other peoples conversations, car horn) for
  * more advanced implementations.
diff --git a/media/java/android/media/audiopolicy/AudioPolicy.java b/media/java/android/media/audiopolicy/AudioPolicy.java
index 61d642f..7e88c27 100644
--- a/media/java/android/media/audiopolicy/AudioPolicy.java
+++ b/media/java/android/media/audiopolicy/AudioPolicy.java
@@ -186,9 +186,9 @@
 
         /**
          * Declares whether this policy will grant and deny audio focus through
-         * the {@link AudioPolicy.AudioPolicyStatusListener}.
+         * the {@link AudioPolicy.AudioPolicyFocusListener}.
          * If set to {@code true}, it is mandatory to set an
-         * {@link AudioPolicy.AudioPolicyStatusListener} in order to successfully build
+         * {@link AudioPolicy.AudioPolicyFocusListener} in order to successfully build
          * an {@code AudioPolicy} instance.
          * @param enforce true if the policy will govern audio focus decisions.
          * @return the same Builder instance.
diff --git a/media/java/android/media/browse/MediaBrowser.java b/media/java/android/media/browse/MediaBrowser.java
index ece19e4..c9b096f 100644
--- a/media/java/android/media/browse/MediaBrowser.java
+++ b/media/java/android/media/browse/MediaBrowser.java
@@ -256,7 +256,13 @@
      */
     private void forceCloseConnection() {
         if (mServiceConnection != null) {
-            mContext.unbindService(mServiceConnection);
+            try {
+                mContext.unbindService(mServiceConnection);
+            } catch (IllegalArgumentException e) {
+                if (DBG) {
+                    Log.d(TAG, "unbindService failed", e);
+                }
+            }
         }
         mState = CONNECT_STATE_DISCONNECTED;
         mServiceConnection = null;
@@ -445,6 +451,9 @@
         ResultReceiver receiver = new ResultReceiver(mHandler) {
             @Override
             protected void onReceiveResult(int resultCode, Bundle resultData) {
+                if (!isConnected()) {
+                    return;
+                }
                 if (resultCode != 0 || resultData == null
                         || !resultData.containsKey(MediaBrowserService.KEY_MEDIA_ITEM)) {
                     cb.onError(mediaId);
diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java
index e02a4dc..b215825 100644
--- a/media/java/android/media/session/MediaSessionManager.java
+++ b/media/java/android/media/session/MediaSessionManager.java
@@ -546,18 +546,23 @@
         private final IActiveSessionsListener.Stub mStub = new IActiveSessionsListener.Stub() {
             @Override
             public void onActiveSessionsChanged(final List<MediaSession.Token> tokens) {
-                if (mHandler != null) {
-                    mHandler.post(new Runnable() {
+                final Handler handler = mHandler;
+                if (handler != null) {
+                    handler.post(new Runnable() {
                         @Override
                         public void run() {
-                            if (mListener != null) {
+                            final Context context = mContext;
+                            if (context != null) {
                                 ArrayList<MediaController> controllers
                                         = new ArrayList<MediaController>();
                                 int size = tokens.size();
                                 for (int i = 0; i < size; i++) {
-                                    controllers.add(new MediaController(mContext, tokens.get(i)));
+                                    controllers.add(new MediaController(context, tokens.get(i)));
                                 }
-                                mListener.onActiveSessionsChanged(controllers);
+                                final OnActiveSessionsChangedListener listener = mListener;
+                                if (listener != null) {
+                                    listener.onActiveSessionsChanged(controllers);
+                                }
                             }
                         }
                     });
@@ -566,8 +571,8 @@
         };
 
         private void release() {
-            mContext = null;
             mListener = null;
+            mContext = null;
             mHandler = null;
         }
     }
diff --git a/media/java/android/media/tv/TvContract.java b/media/java/android/media/tv/TvContract.java
index 102e02d..48fb5bf 100644
--- a/media/java/android/media/tv/TvContract.java
+++ b/media/java/android/media/tv/TvContract.java
@@ -731,6 +731,13 @@
     }
 
     /**
+     * Returns {@code true}, if {@code uri} is a recorded program URI.
+     */
+    public static boolean isRecordedProgramUri(Uri uri) {
+        return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_RECORDED_PROGRAM);
+    }
+
+    /**
      * Requests to make a channel browsable.
      *
      * <p>Once called, the system will review the request and make the channel browsable based on
diff --git a/media/java/android/media/tv/TvView.java b/media/java/android/media/tv/TvView.java
index 9264fe4..6b329f8 100644
--- a/media/java/android/media/tv/TvView.java
+++ b/media/java/android/media/tv/TvView.java
@@ -22,6 +22,7 @@
 import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.graphics.Canvas;
 import android.graphics.PorterDuff;
 import android.graphics.Rect;
@@ -199,6 +200,7 @@
      * @hide
      */
     @SystemApi
+    @RequiresPermission(android.Manifest.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE)
     public void setMain() {
         synchronized (sMainTvViewLock) {
             sMainTvView = new WeakReference<>(this);
@@ -679,7 +681,8 @@
         // Other app may have shown its own main TvView.
         // Set main again to regain main session.
         synchronized (sMainTvViewLock) {
-            if (hasFocus && this == sMainTvView.get() && mSession != null) {
+            if (hasFocus && this == sMainTvView.get() && mSession != null
+                    && checkChangeHdmiCecActiveSourcePermission()) {
                 mSession.setMain();
             }
         }
@@ -847,6 +850,12 @@
         return frame;
     }
 
+    private boolean checkChangeHdmiCecActiveSourcePermission() {
+        return getContext().checkSelfPermission(
+                android.Manifest.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE)
+                        == PackageManager.PERMISSION_GRANTED;
+    }
+
     /**
      * Callback used to receive time shift position changes.
      */
@@ -1079,7 +1088,8 @@
                 mPendingAppPrivateCommands.clear();
 
                 synchronized (sMainTvViewLock) {
-                    if (hasWindowFocus() && TvView.this == sMainTvView.get()) {
+                    if (hasWindowFocus() && TvView.this == sMainTvView.get()
+                            && checkChangeHdmiCecActiveSourcePermission()) {
                         mSession.setMain();
                     }
                 }
diff --git a/media/java/android/mtp/MtpConstants.java b/media/java/android/mtp/MtpConstants.java
index 7d078d7..88e287e 100644
--- a/media/java/android/mtp/MtpConstants.java
+++ b/media/java/android/mtp/MtpConstants.java
@@ -211,6 +211,8 @@
     public static final int FORMAT_JPX = 0x3810;
     /** Format code for DNG files */
     public static final int FORMAT_DNG = 0x3811;
+    /** Format code for HEIF files {@hide} */
+    public static final int FORMAT_HEIF = 0x3812;
     /** Format code for firmware files */
     public static final int FORMAT_UNDEFINED_FIRMWARE = 0xB802;
     /** Format code for Windows image files */
diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java
index 698c9c9..80fd5c0 100755
--- a/media/java/android/mtp/MtpDatabase.java
+++ b/media/java/android/mtp/MtpDatabase.java
@@ -52,6 +52,7 @@
 public class MtpDatabase implements AutoCloseable {
     private static final String TAG = "MtpDatabase";
 
+    private final Context mUserContext;
     private final Context mContext;
     private final String mPackageName;
     private final ContentProviderClient mMediaProvider;
@@ -159,13 +160,14 @@
         }
     };
 
-    public MtpDatabase(Context context, String volumeName, String storagePath,
+    public MtpDatabase(Context context, Context userContext, String volumeName, String storagePath,
             String[] subDirectories) {
         native_setup();
 
         mContext = context;
+        mUserContext = userContext;
         mPackageName = context.getPackageName();
-        mMediaProvider = context.getContentResolver()
+        mMediaProvider = userContext.getContentResolver()
                 .acquireContentProviderClient(MediaStore.AUTHORITY);
         mVolumeName = volumeName;
         mMediaStoragePath = storagePath;
@@ -595,6 +597,7 @@
             MtpConstants.FORMAT_XML_DOCUMENT,
             MtpConstants.FORMAT_FLAC,
             MtpConstants.FORMAT_DNG,
+            MtpConstants.FORMAT_HEIF,
         };
     }
 
@@ -705,6 +708,7 @@
             case MtpConstants.FORMAT_PNG:
             case MtpConstants.FORMAT_BMP:
             case MtpConstants.FORMAT_DNG:
+            case MtpConstants.FORMAT_HEIF:
                 return IMAGE_PROPERTIES;
             default:
                 return FILE_PROPERTIES;
@@ -1112,7 +1116,7 @@
 
     private void sessionEnded() {
         if (mDatabaseModified) {
-            mContext.sendBroadcast(new Intent(MediaStore.ACTION_MTP_SESSION_END));
+            mUserContext.sendBroadcast(new Intent(MediaStore.ACTION_MTP_SESSION_END));
             mDatabaseModified = false;
         }
     }
diff --git a/media/java/android/service/media/MediaBrowserService.java b/media/java/android/service/media/MediaBrowserService.java
index b52906d..4fc43ea 100644
--- a/media/java/android/service/media/MediaBrowserService.java
+++ b/media/java/android/service/media/MediaBrowserService.java
@@ -110,12 +110,22 @@
     /**
      * All the info about a connection.
      */
-    private class ConnectionRecord {
+    private class ConnectionRecord implements IBinder.DeathRecipient {
         String pkg;
         Bundle rootHints;
         IMediaBrowserServiceCallbacks callbacks;
         BrowserRoot root;
         HashMap<String, List<Pair<IBinder, Bundle>>> subscriptions = new HashMap<>();
+
+        @Override
+        public void binderDied() {
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    mConnections.remove(callbacks.asBinder());
+                }
+            });
+        }
     }
 
     /**
@@ -207,7 +217,6 @@
                         connection.pkg = pkg;
                         connection.rootHints = rootHints;
                         connection.callbacks = callbacks;
-
                         connection.root = MediaBrowserService.this.onGetRoot(pkg, uid, rootHints);
 
                         // If they didn't return something, don't allow this client.
@@ -223,6 +232,7 @@
                         } else {
                             try {
                                 mConnections.put(b, connection);
+                                b.linkToDeath(connection, 0);
                                 if (mSession != null) {
                                     callbacks.onConnect(connection.root.getRootId(),
                                             mSession, connection.root.getExtras());
@@ -248,6 +258,7 @@
                         final ConnectionRecord old = mConnections.remove(b);
                         if (old != null) {
                             // TODO
+                            old.callbacks.asBinder().unlinkToDeath(old, 0);
                         }
                     }
                 });
@@ -700,6 +711,13 @@
                 new Result<MediaBrowser.MediaItem>(itemId) {
             @Override
             void onResultSent(MediaBrowser.MediaItem item, @ResultFlags int flag) {
+                if (mConnections.get(connection.callbacks.asBinder()) != connection) {
+                    if (DBG) {
+                        Log.d(TAG, "Not sending onLoadItem result for connection that has"
+                                + " been disconnected. pkg=" + connection.pkg + " id=" + itemId);
+                    }
+                    return;
+                }
                 if ((flag & RESULT_FLAG_ON_LOAD_ITEM_NOT_IMPLEMENTED) != 0) {
                     receiver.send(RESULT_ERROR, null);
                     return;
diff --git a/media/jni/Android.bp b/media/jni/Android.bp
index 9686ab5..02667ca 100644
--- a/media/jni/Android.bp
+++ b/media/jni/Android.bp
@@ -50,6 +50,12 @@
         "libexif",
         "libpiex",
         "libandroidfw",
+        "libhidlbase",
+        "libhidltransport",
+        "android.hardware.cas@1.0",
+        "android.hardware.cas.native@1.0",
+        "android.hidl.memory@1.0",
+        "android.hidl.token@1.0-utils",
     ],
 
     header_libs: ["libhardware_headers"],
diff --git a/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp
index ff115f70..885bf03 100644
--- a/media/jni/android_media_ImageReader.cpp
+++ b/media/jni/android_media_ImageReader.cpp
@@ -34,7 +34,7 @@
 #include <grallocusage/GrallocUsageConversion.h>
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 
 #include <stdint.h>
 #include <inttypes.h>
diff --git a/media/jni/android_media_ImageWriter.cpp b/media/jni/android_media_ImageWriter.cpp
index 7c424d9..2c74992 100644
--- a/media/jni/android_media_ImageWriter.cpp
+++ b/media/jni/android_media_ImageWriter.cpp
@@ -26,7 +26,7 @@
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/android_view_Surface.h>
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 
 #include <stdint.h>
 #include <inttypes.h>
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index 2178607..022198b 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -21,15 +21,16 @@
 #include "android_media_MediaCodec.h"
 
 #include "android_media_MediaCrypto.h"
+#include "android_media_MediaDescrambler.h"
 #include "android_media_MediaMetricsJNI.h"
 #include "android_media_Utils.h"
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/android_view_Surface.h"
 #include "android_util_Binder.h"
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
-#include <android/media/IDescrambler.h>
+#include <android/hardware/cas/native/1.0/IDescrambler.h>
 
 #include <cutils/compiler.h>
 
@@ -136,7 +137,7 @@
     mLooper->start(
             false,      // runOnCallingThread
             true,       // canCallJava
-            PRIORITY_FOREGROUND);
+            ANDROID_PRIORITY_VIDEO);
 
     if (nameIsType) {
         mCodec = MediaCodec::CreateByType(mLooper, name, encoder, &mInitStatus);
@@ -1010,8 +1011,7 @@
 
     sp<IDescrambler> descrambler;
     if (descramblerBinderObj != NULL) {
-        sp<IBinder> binder = ibinderForJavaObject(env, descramblerBinderObj);
-        descrambler = interface_cast<IDescrambler>(binder);
+        descrambler = JDescrambler::GetDescrambler(env, descramblerBinderObj);
     }
 
     err = codec->configure(format, bufferProducer, crypto, descrambler, flags);
@@ -1726,7 +1726,7 @@
 
     if (mode != NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW
             && mode != NATIVE_WINDOW_SCALING_MODE_SCALE_CROP) {
-        jniThrowException(env, "java/lang/InvalidArgumentException", NULL);
+        jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
         return;
     }
 
@@ -1952,7 +1952,7 @@
 
     { "native_configure",
       "([Ljava/lang/String;[Ljava/lang/Object;Landroid/view/Surface;"
-      "Landroid/media/MediaCrypto;Landroid/os/IBinder;I)V",
+      "Landroid/media/MediaCrypto;Landroid/os/IHwBinder;I)V",
       (void *)android_media_MediaCodec_native_configure },
 
     { "native_setSurface",
diff --git a/media/jni/android_media_MediaCodec.h b/media/jni/android_media_MediaCodec.h
index c9a1700..2ec8703 100644
--- a/media/jni/android_media_MediaCodec.h
+++ b/media/jni/android_media_MediaCodec.h
@@ -36,10 +36,13 @@
 struct MediaCodec;
 struct PersistentSurface;
 class Surface;
-namespace media {
-class IDescrambler;
-};
-using namespace media;
+namespace hardware {
+namespace cas {
+namespace native {
+namespace V1_0 {
+struct IDescrambler;
+}}}}
+using hardware::cas::native::V1_0::IDescrambler;
 
 struct JMediaCodec : public AHandler {
     JMediaCodec(
diff --git a/media/jni/android_media_MediaCodecList.cpp b/media/jni/android_media_MediaCodecList.cpp
index de9bf1f..8de11ca 100644
--- a/media/jni/android_media_MediaCodecList.cpp
+++ b/media/jni/android_media_MediaCodecList.cpp
@@ -26,7 +26,7 @@
 
 #include "android_runtime/AndroidRuntime.h"
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_media_Utils.h"
 
 using namespace android;
diff --git a/media/jni/android_media_MediaCrypto.cpp b/media/jni/android_media_MediaCrypto.cpp
index cbdb8ce..1b3c24f 100644
--- a/media/jni/android_media_MediaCrypto.cpp
+++ b/media/jni/android_media_MediaCrypto.cpp
@@ -22,7 +22,7 @@
 
 #include "android_runtime/AndroidRuntime.h"
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <binder/IServiceManager.h>
 #include <cutils/properties.h>
diff --git a/media/jni/android_media_MediaDataSource.cpp b/media/jni/android_media_MediaDataSource.cpp
index 2ab7e39..8c38d88 100644
--- a/media/jni/android_media_MediaDataSource.cpp
+++ b/media/jni/android_media_MediaDataSource.cpp
@@ -23,7 +23,7 @@
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/Log.h"
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <binder/MemoryDealer.h>
 #include <drm/drm_framework_common.h>
diff --git a/media/jni/android_media_MediaDescrambler.cpp b/media/jni/android_media_MediaDescrambler.cpp
index 85d33b7..bee5218 100644
--- a/media/jni/android_media_MediaDescrambler.cpp
+++ b/media/jni/android_media_MediaDescrambler.cpp
@@ -20,16 +20,19 @@
 
 #include "android_media_MediaDescrambler.h"
 #include "android_runtime/AndroidRuntime.h"
-#include "android_util_Binder.h"
+#include "android_os_HwRemoteBinder.h"
 #include "JNIHelp.h"
 
-#include <android/media/IDescrambler.h>
+#include <android/hardware/cas/native/1.0/BpHwDescrambler.h>
+#include <android/hardware/cas/native/1.0/BnHwDescrambler.h>
 #include <binder/MemoryDealer.h>
+#include <hidl/HidlSupport.h>
 #include <media/stagefright/foundation/ADebug.h>
 #include <nativehelper/ScopedLocalRef.h>
 
 namespace android {
-using media::MediaDescrambler::DescrambleInfo;
+
+using hardware::hidl_handle;
 
 struct fields_t {
     jfieldID context;
@@ -94,10 +97,9 @@
 }
 
 JDescrambler::JDescrambler(JNIEnv *env, jobject descramblerBinderObj) {
-    sp<IDescrambler> cas;
-    if (descramblerBinderObj != NULL) {
-        sp<IBinder> binder = ibinderForJavaObject(env, descramblerBinderObj);
-        mDescrambler = interface_cast<IDescrambler>(binder);
+    mDescrambler = GetDescrambler(env, descramblerBinderObj);
+    if (mDescrambler == NULL) {
+        jniThrowException(env, "java/lang/NullPointerException", NULL);
     }
 }
 
@@ -108,9 +110,23 @@
     mDealer.clear();
 }
 
-void JDescrambler::ensureBufferCapacity(size_t neededSize) {
+// static
+sp<IDescrambler> JDescrambler::GetDescrambler(JNIEnv *env, jobject obj) {
+    if (obj != NULL) {
+        sp<hardware::IBinder> hwBinder =
+                JHwRemoteBinder::GetNativeContext(env, obj)->getBinder();
+
+        if (hwBinder != NULL) {
+            return hardware::fromBinder<
+                    IDescrambler, BpHwDescrambler, BnHwDescrambler>(hwBinder);
+        }
+    }
+    return NULL;
+}
+
+bool JDescrambler::ensureBufferCapacity(size_t neededSize) {
     if (mMem != NULL && mMem->size() >= neededSize) {
-        return;
+        return true;
     }
 
     ALOGV("ensureBufferCapacity: current size %zu, new size %zu",
@@ -122,49 +138,84 @@
     neededSize = (neededSize + 65535) & ~65535;
     mDealer = new MemoryDealer(neededSize, "JDescrambler");
     mMem = mDealer->allocate(neededSize);
+
+    ssize_t offset;
+    size_t size;
+    sp<IMemoryHeap> heap = mMem->getMemory(&offset, &size);
+    if (heap == NULL) {
+        return false;
+    }
+
+    native_handle_t* nativeHandle = native_handle_create(1, 0);
+    if (!nativeHandle) {
+        ALOGE("ensureBufferCapacity: failed to create native handle");
+        return false;
+    }
+    nativeHandle->data[0] = heap->getHeapID();
+    mDescramblerSrcBuffer.heapBase = hidl_memory("ashmem",
+            hidl_handle(nativeHandle), heap->getSize());
+    mDescramblerSrcBuffer.offset = (uint64_t) offset;
+    mDescramblerSrcBuffer.size = (uint64_t) size;
+    return true;
 }
 
-Status JDescrambler::descramble(
+status_t JDescrambler::descramble(
         jbyte key,
-        size_t numSubSamples,
         ssize_t totalLength,
-        DescramblerPlugin::SubSample *subSamples,
+        const hidl_vec<SubSample>& subSamples,
         const void *srcPtr,
         jint srcOffset,
         void *dstPtr,
         jint dstOffset,
-        ssize_t *result) {
+        Status *status,
+        uint32_t *bytesWritten,
+        hidl_string *detailedError) {
     // TODO: IDescrambler::descramble() is re-entrant, however because we
     // only have 1 shared mem buffer, we can only do 1 descramble at a time.
     // Concurrency might be improved by allowing on-demand allocation of up
     // to 2 shared mem buffers.
     Mutex::Autolock autolock(mSharedMemLock);
 
-    ensureBufferCapacity(totalLength);
+    if (!ensureBufferCapacity(totalLength)) {
+        return NO_MEMORY;
+    }
 
     memcpy(mMem->pointer(),
             (const void*)((const uint8_t*)srcPtr + srcOffset), totalLength);
 
-    DescrambleInfo info;
-    info.dstType = DescrambleInfo::kDestinationTypeVmPointer;
-    info.numSubSamples = numSubSamples;
-    info.scramblingControl = (DescramblerPlugin::ScramblingControl) key;
-    info.subSamples = subSamples;
-    info.srcMem = mMem;
-    info.srcOffset = 0;
-    info.dstPtr = NULL;
-    info.dstOffset = 0;
+    DestinationBuffer dstBuffer;
+    dstBuffer.type = BufferType::SHARED_MEMORY;
+    dstBuffer.nonsecureMemory = mDescramblerSrcBuffer;
 
-    int32_t descrambleResult;
-    Status status = mDescrambler->descramble(info, &descrambleResult);
+    auto err = mDescrambler->descramble(
+            (ScramblingControl) key,
+            subSamples,
+            mDescramblerSrcBuffer,
+            0,
+            dstBuffer,
+            0,
+            [&status, &bytesWritten, &detailedError] (
+                    Status _status, uint32_t _bytesWritten,
+                    const hidl_string& _detailedError) {
+                *status = _status;
+                *bytesWritten = _bytesWritten;
+                *detailedError = _detailedError;
+            });
 
-    if (status.isOk()) {
-        *result = (descrambleResult <= totalLength) ? descrambleResult : -1;
-        if (*result > 0) {
-            memcpy((void*)((uint8_t*)dstPtr + dstOffset), mMem->pointer(), *result);
+    if (!err.isOk()) {
+        return FAILED_TRANSACTION;
+    }
+
+    if (*status == Status::OK) {
+        if (*bytesWritten > 0 && (ssize_t) *bytesWritten <= totalLength) {
+            memcpy((void*)((uint8_t*)dstPtr + dstOffset), mMem->pointer(), *bytesWritten);
+        } else {
+            // status seems OK but bytesWritten is invalid, we really
+            // have no idea what is wrong.
+            *status = Status::ERROR_CAS_UNKNOWN;
         }
     }
-    return status;
+    return OK;
 }
 
 }  // namespace android
@@ -191,10 +242,10 @@
 
 static ssize_t getSubSampleInfo(JNIEnv *env, jint numSubSamples,
         jintArray numBytesOfClearDataObj, jintArray numBytesOfEncryptedDataObj,
-        DescramblerPlugin::SubSample **outSubSamples) {
+        hidl_vec<SubSample> *outSubSamples) {
 
-    if (numSubSamples <= 0 || numSubSamples >=
-            (signed)(INT32_MAX / sizeof(DescramblerPlugin::SubSample)) ) {
+    if (numSubSamples <= 0 ||
+            numSubSamples >= (signed)(INT32_MAX / sizeof(SubSample))) {
         // subSamples array may silently overflow if number of samples are
         // too large.  Use INT32_MAX as maximum allocation size may be less
         // than SIZE_MAX on some platforms.
@@ -215,24 +266,23 @@
             ? NULL
             : env->GetIntArrayElements(numBytesOfEncryptedDataObj, &isCopy);
 
-    DescramblerPlugin::SubSample *subSamples =
-            new(std::nothrow) DescramblerPlugin::SubSample[numSubSamples];
-
+    outSubSamples->resize(numSubSamples);
+    SubSample *subSamples = outSubSamples->data();
     if (subSamples == NULL) {
         ALOGE("Failed to allocate SubSample array!");
         return -1;
     }
 
     for (jint i = 0; i < numSubSamples; ++i) {
-        subSamples[i].mNumBytesOfClearData =
+        subSamples[i].numBytesOfClearData =
             (numBytesOfClearData == NULL) ? 0 : numBytesOfClearData[i];
 
-        subSamples[i].mNumBytesOfEncryptedData =
+        subSamples[i].numBytesOfEncryptedData =
             (numBytesOfEncryptedData == NULL)
                 ? 0 : numBytesOfEncryptedData[i];
 
-        totalSize += subSamples[i].mNumBytesOfClearData +
-                subSamples[i].mNumBytesOfEncryptedData;
+        totalSize += subSamples[i].numBytesOfClearData +
+                subSamples[i].numBytesOfEncryptedData;
     }
 
     if (numBytesOfEncryptedData != NULL) {
@@ -248,12 +298,9 @@
     }
 
     if (totalSize < 0) {
-        delete[] subSamples;
         return -1;
     }
 
-    *outSubSamples = subSamples;
-
     return totalSize;
 }
 
@@ -280,12 +327,6 @@
             clazz.get(), ctor, serviceSpecificError, msgObj.get());
 }
 
-static void throwServiceSpecificException(
-        JNIEnv *env, int serviceSpecificError, const char *msg) {
-    jthrowable exception = createServiceSpecificException(env, serviceSpecificError, msg);
-    env->Throw(exception);
-}
-
 static jint android_media_MediaDescrambler_native_descramble(
         JNIEnv *env, jobject thiz, jbyte key, jint numSubSamples,
         jintArray numBytesOfClearDataObj, jintArray numBytesOfEncryptedDataObj,
@@ -293,11 +334,12 @@
         jobject dstBuf, jint dstOffset, jint dstLimit) {
     sp<JDescrambler> descrambler = getDescrambler(env, thiz);
     if (descrambler == NULL) {
-        jniThrowException(env, "java/lang/IllegalStateException", NULL);
+        jniThrowException(env, "java/lang/IllegalStateException",
+                "Invalid descrambler object!");
         return -1;
     }
 
-    DescramblerPlugin::SubSample *subSamples = NULL;
+    hidl_vec<SubSample> subSamples;
     ssize_t totalLength = getSubSampleInfo(
             env, numSubSamples, numBytesOfClearDataObj,
             numBytesOfEncryptedDataObj, &subSamples);
@@ -307,7 +349,6 @@
         return -1;
     }
 
-    ssize_t result = -1;
     void *srcPtr = NULL, *dstPtr = NULL;
     jbyteArray srcArray = NULL, dstArray = NULL;
     status_t err = getBufferAndSize(
@@ -329,13 +370,15 @@
     }
 
     Status status;
-    if (err == OK) {
-        status = descrambler->descramble(
-                key, numSubSamples, totalLength, subSamples,
-                srcPtr, srcOffset, dstPtr, dstOffset, &result);
-    }
+    uint32_t bytesWritten;
+    hidl_string detailedError;
 
-    delete[] subSamples;
+    err = descrambler->descramble(
+            key, totalLength, subSamples,
+            srcPtr, srcOffset, dstPtr, dstOffset,
+            &status, &bytesWritten, &detailedError);
+
+    // Release byte array before throwing
     if (srcArray != NULL) {
         env->ReleaseByteArrayElements(srcArray, (jbyte *)srcPtr, 0);
     }
@@ -343,51 +386,17 @@
         env->ReleaseByteArrayElements(dstArray, (jbyte *)dstPtr, 0);
     }
 
-    if (!status.isOk()) {
-        switch (status.exceptionCode()) {
-            case Status::EX_SECURITY:
-                jniThrowException(env, "java/lang/SecurityException",
-                        status.exceptionMessage());
-                break;
-            case Status::EX_BAD_PARCELABLE:
-                jniThrowException(env, "java/lang/BadParcelableException",
-                        status.exceptionMessage());
-                break;
-            case Status::EX_ILLEGAL_ARGUMENT:
-                jniThrowException(env, "java/lang/IllegalArgumentException",
-                        status.exceptionMessage());
-                break;
-            case Status::EX_NULL_POINTER:
-                jniThrowException(env, "java/lang/NullPointerException",
-                        status.exceptionMessage());
-                break;
-            case Status::EX_ILLEGAL_STATE:
-                jniThrowException(env, "java/lang/IllegalStateException",
-                        status.exceptionMessage());
-                break;
-            case Status::EX_NETWORK_MAIN_THREAD:
-                jniThrowException(env, "java/lang/NetworkOnMainThreadException",
-                        status.exceptionMessage());
-                break;
-            case Status::EX_UNSUPPORTED_OPERATION:
-                jniThrowException(env, "java/lang/UnsupportedOperationException",
-                        status.exceptionMessage());
-                break;
-            case Status::EX_SERVICE_SPECIFIC:
-                throwServiceSpecificException(env, status.serviceSpecificErrorCode(),
-                        status.exceptionMessage());
-                break;
-            default:
-            {
-                String8 msg;
-                msg.appendFormat("Unknown exception code: %d, msg: %s",
-                        status.exceptionCode(), status.exceptionMessage().string());
-                jniThrowException(env, "java/lang/RuntimeException", msg.string());
-                break;
-            }
-        }
+    if (err == NO_MEMORY) {
+        jniThrowException(env, "java/lang/OutOfMemoryError", NULL);
+    } else if (err == FAILED_TRANSACTION) {
+        jniThrowException(env, "android/os/RemoteException", NULL);
+    } else if (status != Status::OK) {
+        // Throw ServiceSpecific with cas error code and detailed msg,
+        // which will be re-thrown as MediaCasStateException.
+        env->Throw(createServiceSpecificException(
+                env, (int) status, detailedError.c_str()));
     }
-    return result;
+    return bytesWritten;
 }
 
 static const JNINativeMethod gMethods[] = {
@@ -395,7 +404,7 @@
             (void *)android_media_MediaDescrambler_native_release },
     { "native_init", "()V",
             (void *)android_media_MediaDescrambler_native_init },
-    { "native_setup", "(Landroid/os/IBinder;)V",
+    { "native_setup", "(Landroid/os/IHwBinder;)V",
             (void *)android_media_MediaDescrambler_native_setup },
     { "native_descramble", "(BI[I[ILjava/nio/ByteBuffer;IILjava/nio/ByteBuffer;II)I",
             (void *)android_media_MediaDescrambler_native_descramble },
diff --git a/media/jni/android_media_MediaDescrambler.h b/media/jni/android_media_MediaDescrambler.h
index aeef05e..015fad2 100644
--- a/media/jni/android_media_MediaDescrambler.h
+++ b/media/jni/android_media_MediaDescrambler.h
@@ -19,34 +19,37 @@
 
 #include "jni.h"
 
-#include <binder/Status.h>
-#include <media/cas/DescramblerAPI.h>
+#include <android/hardware/cas/native/1.0/IDescrambler.h>
+
 #include <media/stagefright/foundation/ABase.h>
 #include <utils/Mutex.h>
-#include <utils/RefBase.h>
 
 namespace android {
 class IMemory;
 class MemoryDealer;
-namespace media {
-class IDescrambler;
-};
-using namespace media;
-using binder::Status;
+
+using hardware::hidl_memory;
+using hardware::hidl_string;
+using hardware::hidl_vec;
+using namespace hardware::cas::V1_0;
+using namespace hardware::cas::native::V1_0;
 
 struct JDescrambler : public RefBase {
     JDescrambler(JNIEnv *env, jobject descramberBinderObj);
 
-    Status descramble(
+    status_t descramble(
             jbyte key,
-            size_t numSubSamples,
             ssize_t totalLength,
-            DescramblerPlugin::SubSample *subSamples,
+            const hidl_vec<SubSample>& subSamples,
             const void *srcPtr,
             jint srcOffset,
             void *dstPtr,
             jint dstOffset,
-            ssize_t *result);
+            Status *status,
+            uint32_t *bytesWritten,
+            hidl_string *detailedError);
+
+    static sp<IDescrambler> GetDescrambler(JNIEnv *env, jobject obj);
 
 protected:
     virtual ~JDescrambler();
@@ -55,9 +58,11 @@
     sp<IDescrambler> mDescrambler;
     sp<IMemory> mMem;
     sp<MemoryDealer> mDealer;
+    SharedBuffer mDescramblerSrcBuffer;
+
     Mutex mSharedMemLock;
 
-    void ensureBufferCapacity(size_t neededSize);
+    bool ensureBufferCapacity(size_t neededSize);
 
     DISALLOW_EVIL_CONSTRUCTORS(JDescrambler);
 };
diff --git a/media/jni/android_media_MediaDrm.cpp b/media/jni/android_media_MediaDrm.cpp
index ea35f78..d0c2aea 100644
--- a/media/jni/android_media_MediaDrm.cpp
+++ b/media/jni/android_media_MediaDrm.cpp
@@ -24,7 +24,7 @@
 #include "android_runtime/Log.h"
 #include "android_os_Parcel.h"
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <binder/IServiceManager.h>
 #include <binder/Parcel.h>
diff --git a/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp
index 9e5d3d1..c9657b1 100644
--- a/media/jni/android_media_MediaExtractor.cpp
+++ b/media/jni/android_media_MediaExtractor.cpp
@@ -18,16 +18,20 @@
 #define LOG_TAG "MediaExtractor-JNI"
 #include <utils/Log.h>
 
+#include "android_media_MediaDataSource.h"
 #include "android_media_MediaExtractor.h"
 #include "android_media_MediaMetricsJNI.h"
-
 #include "android_media_Utils.h"
+#include "android_os_HwRemoteBinder.h"
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/Log.h"
+#include "android_util_Binder.h"
 #include "jni.h"
 #include "JNIHelp.h"
-#include "android_media_MediaDataSource.h"
 
+#include <android/hardware/cas/1.0/BpHwCas.h>
+#include <android/hardware/cas/1.0/BnHwCas.h>
+#include <hidl/HybridInterface.h>
 #include <media/IMediaHTTPService.h>
 #include <media/hardware/CryptoAPI.h>
 #include <media/stagefright/foundation/ABuffer.h>
@@ -37,14 +41,12 @@
 #include <media/stagefright/MediaErrors.h>
 #include <media/stagefright/MetaData.h>
 #include <media/stagefright/NuMediaExtractor.h>
-#include <android/media/ICas.h>
-
 #include <nativehelper/ScopedLocalRef.h>
 
-#include "android_util_Binder.h"
-
 namespace android {
 
+using namespace hardware::cas::V1_0;
+
 struct fields_t {
     jfieldID context;
 
@@ -89,8 +91,28 @@
     return mImpl->setDataSource(datasource);
 }
 
-status_t JMediaExtractor::setMediaCas(const sp<ICas> &cas) {
-    return mImpl->setMediaCas(cas);
+status_t JMediaExtractor::setMediaCas(JNIEnv *env, jobject casBinderObj) {
+    if (casBinderObj == NULL) {
+        return BAD_VALUE;
+    }
+
+    sp<hardware::IBinder> hwBinder =
+        JHwRemoteBinder::GetNativeContext(env, casBinderObj)->getBinder();
+    if (hwBinder == NULL) {
+        return BAD_VALUE;
+    }
+
+    sp<ICas> cas = hardware::fromBinder<ICas, BpHwCas, BnHwCas>(hwBinder);
+    if (cas == NULL) {
+        return BAD_VALUE;
+    }
+
+    HalToken halToken;
+    if (!createHalToken(cas, &halToken)) {
+        return BAD_VALUE;
+    }
+
+    return mImpl->setMediaCas(halToken);
 }
 
 size_t JMediaExtractor::countTracks() const {
@@ -748,23 +770,13 @@
         return;
     }
 
-    if (casBinderObj == NULL) {
-        jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
-        return;
-    }
-
-    sp<ICas> cas;
-    if (casBinderObj != NULL) {
-        sp<IBinder> binder = ibinderForJavaObject(env, casBinderObj);
-        cas = interface_cast<ICas>(binder);
-    }
-    status_t err = extractor->setMediaCas(cas);
+    status_t err = extractor->setMediaCas(env, casBinderObj);
 
     if (err != OK) {
-        cas.clear();
+        extractor.clear();
         jniThrowException(
                 env,
-                "java/io/IllegalArgumentException",
+                "java/lang/IllegalArgumentException",
                 "Failed to set MediaCas on extractor.");
     }
 }
@@ -896,7 +908,7 @@
     { "setDataSource", "(Landroid/media/MediaDataSource;)V",
       (void *)android_media_MediaExtractor_setDataSourceCallback },
 
-    { "nativeSetMediaCas", "(Landroid/os/IBinder;)V",
+    { "nativeSetMediaCas", "(Landroid/os/IHwBinder;)V",
       (void *)android_media_MediaExtractor_setMediaCas },
 
     { "getCachedDuration", "()J",
diff --git a/media/jni/android_media_MediaExtractor.h b/media/jni/android_media_MediaExtractor.h
index 3d8c50b..94d36f2 100644
--- a/media/jni/android_media_MediaExtractor.h
+++ b/media/jni/android_media_MediaExtractor.h
@@ -28,10 +28,6 @@
 #include "jni.h"
 
 namespace android {
-namespace media {
-class ICas;
-};
-using namespace media;
 
 struct IMediaHTTPService;
 class MetaData;
@@ -48,7 +44,7 @@
     status_t setDataSource(int fd, off64_t offset, off64_t size);
     status_t setDataSource(const sp<DataSource> &source);
 
-    status_t setMediaCas(const sp<ICas> &cas);
+    status_t setMediaCas(JNIEnv *env, jobject casBinderObj);
 
     size_t countTracks() const;
     status_t getTrackFormat(size_t index, jobject *format) const;
diff --git a/media/jni/android_media_MediaHTTPConnection.cpp b/media/jni/android_media_MediaHTTPConnection.cpp
index fa0b43f..365e045 100644
--- a/media/jni/android_media_MediaHTTPConnection.cpp
+++ b/media/jni/android_media_MediaHTTPConnection.cpp
@@ -27,7 +27,7 @@
 
 #include "android_runtime/AndroidRuntime.h"
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 namespace android {
 
diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp
index 0a3ce21..4659ae1 100644
--- a/media/jni/android_media_MediaMetadataRetriever.cpp
+++ b/media/jni/android_media_MediaMetadataRetriever.cpp
@@ -28,7 +28,7 @@
 #include <private/media/VideoFrame.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_runtime/AndroidRuntime.h"
 #include "android_media_MediaDataSource.h"
 #include "android_media_Utils.h"
@@ -244,9 +244,11 @@
     }
 }
 
-static jobject android_media_MediaMetadataRetriever_getFrameAtTime(JNIEnv *env, jobject thiz, jlong timeUs, jint option)
+static jobject android_media_MediaMetadataRetriever_getFrameAtTime(
+        JNIEnv *env, jobject thiz, jlong timeUs, jint option, jint dst_width, jint dst_height)
 {
-    ALOGV("getFrameAtTime: %lld us option: %d", (long long)timeUs, option);
+    ALOGV("getFrameAtTime: %lld us option: %d dst width: %d heigh: %d",
+            (long long)timeUs, option, dst_width, dst_height);
     MediaMetadataRetriever* retriever = getRetriever(env, thiz);
     if (retriever == 0) {
         jniThrowException(env, "java/lang/IllegalStateException", "No retriever available");
@@ -274,15 +276,19 @@
                         fields.createConfigMethod,
                         GraphicsJNI::colorTypeToLegacyBitmapConfig(kRGB_565_SkColorType));
 
-    uint32_t width, height;
+    uint32_t width, height, displayWidth, displayHeight;
     bool swapWidthAndHeight = false;
     if (videoFrame->mRotationAngle == 90 || videoFrame->mRotationAngle == 270) {
         width = videoFrame->mHeight;
         height = videoFrame->mWidth;
         swapWidthAndHeight = true;
+        displayWidth = videoFrame->mDisplayHeight;
+        displayHeight = videoFrame->mDisplayWidth;
     } else {
         width = videoFrame->mWidth;
         height = videoFrame->mHeight;
+        displayWidth = videoFrame->mDisplayWidth;
+        displayHeight = videoFrame->mDisplayHeight;
     }
 
     jobject jBitmap = env->CallStaticObjectMethod(
@@ -308,22 +314,26 @@
            videoFrame->mHeight,
            videoFrame->mRotationAngle);
 
-    if (videoFrame->mDisplayWidth  != videoFrame->mWidth ||
-        videoFrame->mDisplayHeight != videoFrame->mHeight) {
-        uint32_t displayWidth = videoFrame->mDisplayWidth;
-        uint32_t displayHeight = videoFrame->mDisplayHeight;
-        if (swapWidthAndHeight) {
-            displayWidth = videoFrame->mDisplayHeight;
-            displayHeight = videoFrame->mDisplayWidth;
-        }
+    if (dst_width <= 0 || dst_height <= 0) {
+        dst_width = displayWidth;
+        dst_height = displayHeight;
+    } else {
+        float factor = std::min((float)dst_width / (float)displayWidth,
+                (float)dst_height / (float)displayHeight);
+        dst_width = std::round(displayWidth * factor);
+        dst_height = std::round(displayHeight * factor);
+    }
+
+    if ((uint32_t)dst_width != videoFrame->mWidth ||
+        (uint32_t)dst_height != videoFrame->mHeight) {
         ALOGV("Bitmap dimension is scaled from %dx%d to %dx%d",
-                width, height, displayWidth, displayHeight);
+                width, height, dst_width, dst_height);
         jobject scaledBitmap = env->CallStaticObjectMethod(fields.bitmapClazz,
-                                    fields.createScaledBitmapMethod,
-                                    jBitmap,
-                                    displayWidth,
-                                    displayHeight,
-                                    true);
+                                fields.createScaledBitmapMethod,
+                                jBitmap,
+                                dst_width,
+                                dst_height,
+                                true);
         return scaledBitmap;
     }
 
@@ -474,7 +484,7 @@
 
         {"setDataSource",   "(Ljava/io/FileDescriptor;JJ)V", (void *)android_media_MediaMetadataRetriever_setDataSourceFD},
         {"_setDataSource",   "(Landroid/media/MediaDataSource;)V", (void *)android_media_MediaMetadataRetriever_setDataSourceCallback},
-        {"_getFrameAtTime", "(JI)Landroid/graphics/Bitmap;", (void *)android_media_MediaMetadataRetriever_getFrameAtTime},
+        {"_getFrameAtTime", "(JIII)Landroid/graphics/Bitmap;", (void *)android_media_MediaMetadataRetriever_getFrameAtTime},
         {"extractMetadata", "(I)Ljava/lang/String;", (void *)android_media_MediaMetadataRetriever_extractMetadata},
         {"getEmbeddedPicture", "(I)[B", (void *)android_media_MediaMetadataRetriever_getEmbeddedPicture},
         {"release",         "()V", (void *)android_media_MediaMetadataRetriever_release},
diff --git a/media/jni/android_media_MediaMuxer.cpp b/media/jni/android_media_MediaMuxer.cpp
index c3461f0..f11452a 100644
--- a/media/jni/android_media_MediaMuxer.cpp
+++ b/media/jni/android_media_MediaMuxer.cpp
@@ -21,7 +21,7 @@
 #include "android_media_Utils.h"
 #include "android_runtime/AndroidRuntime.h"
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <unistd.h>
 #include <fcntl.h>
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp
index 3711462..c8ec7c4 100644
--- a/media/jni/android_media_MediaPlayer.cpp
+++ b/media/jni/android_media_MediaPlayer.cpp
@@ -32,7 +32,7 @@
 #include <fcntl.h>
 #include <utils/threads.h>
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/android_view_Surface.h"
 #include "android_runtime/Log.h"
diff --git a/media/jni/android_media_MediaProfiles.cpp b/media/jni/android_media_MediaProfiles.cpp
index 5800043..5bc8092 100644
--- a/media/jni/android_media_MediaProfiles.cpp
+++ b/media/jni/android_media_MediaProfiles.cpp
@@ -22,7 +22,7 @@
 #include <utils/threads.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_runtime/AndroidRuntime.h"
 #include <media/MediaProfiles.h>
 
diff --git a/media/jni/android_media_MediaScanner.cpp b/media/jni/android_media_MediaScanner.cpp
index 0f3c61f..3b475b2 100644
--- a/media/jni/android_media_MediaScanner.cpp
+++ b/media/jni/android_media_MediaScanner.cpp
@@ -24,7 +24,7 @@
 #include <private/media/VideoFrame.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/Log.h"
 
diff --git a/media/jni/android_media_MediaSync.cpp b/media/jni/android_media_MediaSync.cpp
index 6de5ea9..f752008 100644
--- a/media/jni/android_media_MediaSync.cpp
+++ b/media/jni/android_media_MediaSync.cpp
@@ -26,7 +26,7 @@
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/android_view_Surface.h"
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include <gui/Surface.h>
 
diff --git a/media/jni/android_media_ResampleInputStream.cpp b/media/jni/android_media_ResampleInputStream.cpp
index fa75524..3d8f517c 100644
--- a/media/jni/android_media_ResampleInputStream.cpp
+++ b/media/jni/android_media_ResampleInputStream.cpp
@@ -27,7 +27,7 @@
 #include <utils/threads.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_runtime/AndroidRuntime.h"
 
 
diff --git a/media/jni/android_media_SyncParams.cpp b/media/jni/android_media_SyncParams.cpp
index d9b2f1d..2d9738d 100644
--- a/media/jni/android_media_SyncParams.cpp
+++ b/media/jni/android_media_SyncParams.cpp
@@ -16,7 +16,7 @@
 
 #include "android_media_SyncParams.h"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 namespace android {
 
diff --git a/media/jni/android_media_Utils.h b/media/jni/android_media_Utils.h
index af2f2d7..821c6b2 100644
--- a/media/jni/android_media_Utils.h
+++ b/media/jni/android_media_Utils.h
@@ -23,7 +23,7 @@
 #include <android_runtime/AndroidRuntime.h>
 #include <gui/CpuConsumer.h>
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <utils/KeyedVector.h>
 #include <utils/String8.h>
 #include <SkStream.h>
diff --git a/media/jni/android_mtp_MtpDatabase.cpp b/media/jni/android_mtp_MtpDatabase.cpp
index 49260ae..47ec464 100644
--- a/media/jni/android_mtp_MtpDatabase.cpp
+++ b/media/jni/android_mtp_MtpDatabase.cpp
@@ -39,7 +39,7 @@
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/Log.h>
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <nativehelper/ScopedLocalRef.h>
 
 #include <assert.h>
@@ -849,6 +849,7 @@
     // read EXIF data for thumbnail information
     switch (info.mFormat) {
         case MTP_FORMAT_EXIF_JPEG:
+        case MTP_FORMAT_HEIF:
         case MTP_FORMAT_JFIF: {
             ExifData *exifdata = exif_data_new_from_file(path);
             if (exifdata) {
@@ -906,6 +907,7 @@
     if (getObjectFilePath(handle, path, length, format) == MTP_RESPONSE_OK) {
         switch (format) {
             case MTP_FORMAT_EXIF_JPEG:
+            case MTP_FORMAT_HEIF:
             case MTP_FORMAT_JFIF: {
                 ExifData *exifdata = exif_data_new_from_file(path);
                 if (exifdata) {
diff --git a/media/jni/android_mtp_MtpDevice.cpp b/media/jni/android_mtp_MtpDevice.cpp
index 768ac1d..d42c39e 100644
--- a/media/jni/android_mtp_MtpDevice.cpp
+++ b/media/jni/android_mtp_MtpDevice.cpp
@@ -29,8 +29,8 @@
 #include <string>
 
 #include "jni.h"
-#include "JNIHelp.h"
-#include "ScopedPrimitiveArray.h"
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
 
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/Log.h"
diff --git a/media/jni/android_mtp_MtpServer.cpp b/media/jni/android_mtp_MtpServer.cpp
index c325f4e..e9e9309 100644
--- a/media/jni/android_mtp_MtpServer.cpp
+++ b/media/jni/android_mtp_MtpServer.cpp
@@ -25,7 +25,7 @@
 #include <utils/threads.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_runtime/AndroidRuntime.h"
 #include "private/android_filesystem_config.h"
 
diff --git a/media/jni/audioeffect/android_media_AudioEffect.cpp b/media/jni/audioeffect/android_media_AudioEffect.cpp
index d4cc3fb..48ddf9a 100644
--- a/media/jni/audioeffect/android_media_AudioEffect.cpp
+++ b/media/jni/audioeffect/android_media_AudioEffect.cpp
@@ -20,12 +20,12 @@
 #define LOG_TAG "AudioEffects-JNI"
 
 #include <utils/Log.h>
-#include <nativehelper/jni.h>
+#include <jni.h>
 #include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include "media/AudioEffect.h"
 
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 
 using namespace android;
 
diff --git a/media/jni/audioeffect/android_media_Visualizer.cpp b/media/jni/audioeffect/android_media_Visualizer.cpp
index 0645543..b7d7b03 100644
--- a/media/jni/audioeffect/android_media_Visualizer.cpp
+++ b/media/jni/audioeffect/android_media_Visualizer.cpp
@@ -20,13 +20,13 @@
 #define LOG_TAG "visualizers-JNI"
 
 #include <utils/Log.h>
-#include <nativehelper/jni.h>
+#include <jni.h>
 #include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/threads.h>
 #include "media/Visualizer.h"
 
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 
 using namespace android;
 
diff --git a/media/jni/midi/android_media_midi_MidiDevice.cpp b/media/jni/midi/android_media_midi_MidiDevice.cpp
index 4df8436..5b35453 100644
--- a/media/jni/midi/android_media_midi_MidiDevice.cpp
+++ b/media/jni/midi/android_media_midi_MidiDevice.cpp
@@ -18,8 +18,8 @@
 #define LOG_TAG "Midi-JNI"
 
 #include <android_util_Binder.h>
+#include <jni.h>
 #include <midi_internal.h>
-#include <nativehelper/jni.h>
 #include <utils/Log.h>
 
 using namespace android;
diff --git a/media/jni/soundpool/android_media_SoundPool.cpp b/media/jni/soundpool/android_media_SoundPool.cpp
index 9d0c1f8..f670636 100644
--- a/media/jni/soundpool/android_media_SoundPool.cpp
+++ b/media/jni/soundpool/android_media_SoundPool.cpp
@@ -20,7 +20,7 @@
 #define LOG_TAG "SoundPool-JNI"
 
 #include <utils/Log.h>
-#include <nativehelper/jni.h>
+#include <jni.h>
 #include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 #include "SoundPool.h"
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java
index fcb861c..cf5882f 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java
@@ -271,7 +271,7 @@
          * @see android.hardware.camera2.ICameraDeviceCallbacks#onRepeatingRequestError()
          */
         @Override
-        public void onRepeatingRequestError(long lastFrameNumber) {
+        public void onRepeatingRequestError(long lastFrameNumber, int repeatingRequestId) {
             // TODO Auto-generated method stub
         }
     }
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java
index 476f016..e628b68 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java
@@ -161,7 +161,7 @@
          * @see android.hardware.camera2.ICameraDeviceCallbacks#onRepeatingRequestError()
          */
         @Override
-        public void onRepeatingRequestError(long lastFrameNumber) {
+        public void onRepeatingRequestError(long lastFrameNumber, int repeatingRequestId) {
             // TODO Auto-generated method stub
         }
     }
diff --git a/native/android/asset_manager.cpp b/native/android/asset_manager.cpp
index 0e5e5c6..98e9a42 100644
--- a/native/android/asset_manager.cpp
+++ b/native/android/asset_manager.cpp
@@ -24,7 +24,7 @@
 #include <utils/threads.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 using namespace android;
 
diff --git a/native/android/include/android/multinetwork.h b/native/android/include/android/multinetwork.h
new file mode 120000
index 0000000..0feab3a
--- /dev/null
+++ b/native/android/include/android/multinetwork.h
@@ -0,0 +1 @@
+../../../../../native/include/android/multinetwork.h
\ No newline at end of file
diff --git a/native/android/include/multinetwork.h b/native/android/include/multinetwork.h
deleted file mode 120000
index f9d051a..0000000
--- a/native/android/include/multinetwork.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../native/include/android/multinetwork.h
\ No newline at end of file
diff --git a/native/android/libandroid.map.txt b/native/android/libandroid.map.txt
index c82a1f6..bbd2783 100644
--- a/native/android/libandroid.map.txt
+++ b/native/android/libandroid.map.txt
@@ -198,6 +198,7 @@
     ASharedMemory_create; # introduced=26
     ASharedMemory_getSize; # introduced=26
     ASharedMemory_setProt; # introduced=26
+    ASharedMemory_dupFromJava; # introduced=27
     AStorageManager_delete;
     AStorageManager_getMountedObbPath;
     AStorageManager_isObbMounted;
diff --git a/native/android/sharedmem.cpp b/native/android/sharedmem.cpp
index 9d029df..757aaec 100644
--- a/native/android/sharedmem.cpp
+++ b/native/android/sharedmem.cpp
@@ -14,10 +14,36 @@
  * limitations under the License.
  */
 
+#include <jni.h>
+
 #include <android/sharedmem.h>
+#include <android/sharedmem_jni.h>
 #include <cutils/ashmem.h>
+#include <log/log.h>
 #include <utils/Errors.h>
 
+#include <mutex>
+#include <unistd.h>
+
+static struct {
+    jclass clazz;
+    jmethodID getFd;
+} sSharedMemory;
+
+static void jniInit(JNIEnv* env) {
+    static std::once_flag sJniInitialized;
+    std::call_once(sJniInitialized, [](JNIEnv* env) {
+        jclass clazz = env->FindClass("android/os/SharedMemory");
+        LOG_ALWAYS_FATAL_IF(clazz == nullptr, "Failed to find android.os.SharedMemory");
+        sSharedMemory.clazz = (jclass) env->NewGlobalRef(clazz);
+        LOG_ALWAYS_FATAL_IF(sSharedMemory.clazz == nullptr,
+                "Failed to create global ref of android.os.SharedMemory");
+        sSharedMemory.getFd = env->GetMethodID(sSharedMemory.clazz, "getFd", "()I");
+        LOG_ALWAYS_FATAL_IF(sSharedMemory.getFd == nullptr,
+                "Failed to find method SharedMemory#getFd()");
+    }, env);
+}
+
 int ASharedMemory_create(const char *name, size_t size) {
     if (size == 0) {
         return android::BAD_VALUE;
@@ -32,3 +58,20 @@
 int ASharedMemory_setProt(int fd, int prot) {
     return ashmem_set_prot_region(fd, prot);
 }
+
+int ASharedMemory_dupFromJava(JNIEnv* env, jobject javaSharedMemory) {
+    if (env == nullptr || javaSharedMemory == nullptr) {
+        return -1;
+    }
+    jniInit(env);
+    if (!env->IsInstanceOf(javaSharedMemory, sSharedMemory.clazz)) {
+        ALOGW("ASharedMemory_dupFromJava called with object "
+                "that's not an instanceof android.os.SharedMemory");
+        return -1;
+    }
+    int fd = env->CallIntMethod(javaSharedMemory, sSharedMemory.getFd);
+    if (fd != -1) {
+        fd = dup(fd);
+    }
+    return fd;
+}
diff --git a/native/webview/Android.mk b/native/webview/Android.mk
new file mode 100644
index 0000000..a2a93d7
--- /dev/null
+++ b/native/webview/Android.mk
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+
+# Include all the makefiles for subdirectories.
+include $(call all-subdir-makefiles)
+
diff --git a/native/webview/OWNERS b/native/webview/OWNERS
new file mode 100644
index 0000000..deee852
--- /dev/null
+++ b/native/webview/OWNERS
@@ -0,0 +1,4 @@
+boliu@google.com
+sgurun@google.com
+tobiasjs@google.com
+torne@google.com
diff --git a/native/webview/loader/Android.mk b/native/webview/loader/Android.mk
new file mode 100644
index 0000000..e8a7d97
--- /dev/null
+++ b/native/webview/loader/Android.mk
@@ -0,0 +1,40 @@
+#
+# 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.
+
+# This package provides the system interfaces required to load WebView.
+
+LOCAL_PATH := $(call my-dir)
+
+# Loader library which handles address space reservation and relro sharing.
+# Does NOT link any native chromium code.
+include $(CLEAR_VARS)
+
+LOCAL_MODULE:= libwebviewchromium_loader
+
+LOCAL_SRC_FILES := \
+        loader.cpp \
+
+LOCAL_CFLAGS := \
+        -Werror \
+
+LOCAL_SHARED_LIBRARIES += \
+        libdl \
+        liblog \
+        libnativeloader \
+
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_SHARED_LIBRARY)
+
diff --git a/native/webview/loader/loader.cpp b/native/webview/loader/loader.cpp
new file mode 100644
index 0000000..376dbb8
--- /dev/null
+++ b/native/webview/loader/loader.cpp
@@ -0,0 +1,259 @@
+/*
+ * 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.
+ */
+
+// Uncomment for verbose logging.
+// #define LOG_NDEBUG 0
+#define LOG_TAG "webviewchromiumloader"
+
+#include <dlfcn.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <jni.h>
+#include <android/dlext.h>
+#include <nativeloader/native_loader.h>
+#include <utils/Log.h>
+
+#define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0])))
+
+namespace android {
+namespace {
+
+void* gReservedAddress = NULL;
+size_t gReservedSize = 0;
+
+jint LIBLOAD_SUCCESS;
+jint LIBLOAD_FAILED_TO_OPEN_RELRO_FILE;
+jint LIBLOAD_FAILED_TO_LOAD_LIBRARY;
+jint LIBLOAD_FAILED_JNI_CALL;
+jint LIBLOAD_FAILED_TO_FIND_NAMESPACE;
+
+jboolean DoReserveAddressSpace(jlong size) {
+  size_t vsize = static_cast<size_t>(size);
+
+  void* addr = mmap(NULL, vsize, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+  if (addr == MAP_FAILED) {
+    ALOGE("Failed to reserve %zd bytes of address space for future load of "
+          "libwebviewchromium.so: %s",
+          vsize, strerror(errno));
+    return JNI_FALSE;
+  }
+  gReservedAddress = addr;
+  gReservedSize = vsize;
+  ALOGV("Reserved %zd bytes at %p", vsize, addr);
+  return JNI_TRUE;
+}
+
+jboolean DoCreateRelroFile(const char* lib, const char* relro) {
+  // Try to unlink the old file, since if this is being called, the old one is
+  // obsolete.
+  if (unlink(relro) != 0 && errno != ENOENT) {
+    // If something went wrong other than the file not existing, log a warning
+    // but continue anyway in the hope that we can successfully overwrite the
+    // existing file with rename() later.
+    ALOGW("Failed to unlink old file %s: %s", relro, strerror(errno));
+  }
+  static const char tmpsuffix[] = ".XXXXXX";
+  char relro_tmp[strlen(relro) + sizeof(tmpsuffix)];
+  strlcpy(relro_tmp, relro, sizeof(relro_tmp));
+  strlcat(relro_tmp, tmpsuffix, sizeof(relro_tmp));
+  int tmp_fd = TEMP_FAILURE_RETRY(mkstemp(relro_tmp));
+  if (tmp_fd == -1) {
+    ALOGE("Failed to create temporary file %s: %s", relro_tmp, strerror(errno));
+    return JNI_FALSE;
+  }
+  android_dlextinfo extinfo;
+  extinfo.flags = ANDROID_DLEXT_RESERVED_ADDRESS | ANDROID_DLEXT_WRITE_RELRO;
+  extinfo.reserved_addr = gReservedAddress;
+  extinfo.reserved_size = gReservedSize;
+  extinfo.relro_fd = tmp_fd;
+  void* handle = android_dlopen_ext(lib, RTLD_NOW, &extinfo);
+  int close_result = close(tmp_fd);
+  if (handle == NULL) {
+    ALOGE("Failed to load library %s: %s", lib, dlerror());
+    unlink(relro_tmp);
+    return JNI_FALSE;
+  }
+  if (close_result != 0 ||
+      chmod(relro_tmp, S_IRUSR | S_IRGRP | S_IROTH) != 0 ||
+      rename(relro_tmp, relro) != 0) {
+    ALOGE("Failed to update relro file %s: %s", relro, strerror(errno));
+    unlink(relro_tmp);
+    return JNI_FALSE;
+  }
+  ALOGV("Created relro file %s for library %s", relro, lib);
+  return JNI_TRUE;
+}
+
+jint DoLoadWithRelroFile(JNIEnv* env, const char* lib, const char* relro,
+                         jobject clazzLoader) {
+  int relro_fd = TEMP_FAILURE_RETRY(open(relro, O_RDONLY));
+  if (relro_fd == -1) {
+    ALOGE("Failed to open relro file %s: %s", relro, strerror(errno));
+    return LIBLOAD_FAILED_TO_OPEN_RELRO_FILE;
+  }
+  android_namespace_t* ns =
+      android::FindNamespaceByClassLoader(env, clazzLoader);
+  if (ns == NULL) {
+    ALOGE("Failed to find classloader namespace");
+    return LIBLOAD_FAILED_TO_FIND_NAMESPACE;
+  }
+  android_dlextinfo extinfo;
+  extinfo.flags = ANDROID_DLEXT_RESERVED_ADDRESS | ANDROID_DLEXT_USE_RELRO |
+                  ANDROID_DLEXT_USE_NAMESPACE;
+  extinfo.reserved_addr = gReservedAddress;
+  extinfo.reserved_size = gReservedSize;
+  extinfo.relro_fd = relro_fd;
+  extinfo.library_namespace = ns;
+  void* handle = android_dlopen_ext(lib, RTLD_NOW, &extinfo);
+  close(relro_fd);
+  if (handle == NULL) {
+    ALOGE("Failed to load library %s: %s", lib, dlerror());
+    return LIBLOAD_FAILED_TO_LOAD_LIBRARY;
+  }
+  ALOGV("Loaded library %s with relro file %s", lib, relro);
+  return LIBLOAD_SUCCESS;
+}
+
+/******************************************************************************/
+/* JNI wrappers - handle string lifetimes and 32/64 ABI choice                */
+/******************************************************************************/
+
+jboolean ReserveAddressSpace(JNIEnv*, jclass, jlong size) {
+  return DoReserveAddressSpace(size);
+}
+
+jboolean CreateRelroFile(JNIEnv* env, jclass, jstring lib32, jstring lib64,
+                         jstring relro32, jstring relro64) {
+#ifdef __LP64__
+  jstring lib = lib64;
+  jstring relro = relro64;
+  (void)lib32; (void)relro32;
+#else
+  jstring lib = lib32;
+  jstring relro = relro32;
+  (void)lib64; (void)relro64;
+#endif
+  jboolean ret = JNI_FALSE;
+  const char* lib_utf8 = env->GetStringUTFChars(lib, NULL);
+  if (lib_utf8 != NULL) {
+    const char* relro_utf8 = env->GetStringUTFChars(relro, NULL);
+    if (relro_utf8 != NULL) {
+      ret = DoCreateRelroFile(lib_utf8, relro_utf8);
+      env->ReleaseStringUTFChars(relro, relro_utf8);
+    }
+    env->ReleaseStringUTFChars(lib, lib_utf8);
+  }
+  return ret;
+}
+
+jint LoadWithRelroFile(JNIEnv* env, jclass, jstring lib, jstring relro32,
+                       jstring relro64, jobject clazzLoader) {
+#ifdef __LP64__
+  jstring relro = relro64;
+  (void)relro32;
+#else
+  jstring relro = relro32;
+  (void)relro64;
+#endif
+  jint ret = LIBLOAD_FAILED_JNI_CALL;
+  const char* lib_utf8 = env->GetStringUTFChars(lib, NULL);
+  if (lib_utf8 != NULL) {
+    const char* relro_utf8 = env->GetStringUTFChars(relro, NULL);
+    if (relro_utf8 != NULL) {
+      ret = DoLoadWithRelroFile(env, lib_utf8, relro_utf8, clazzLoader);
+      env->ReleaseStringUTFChars(relro, relro_utf8);
+    }
+    env->ReleaseStringUTFChars(lib, lib_utf8);
+  }
+  return ret;
+}
+
+const char kWebViewFactoryClassName[] = "android/webkit/WebViewFactory";
+const char kWebViewLibraryLoaderClassName[] =
+    "android/webkit/WebViewLibraryLoader";
+const JNINativeMethod kJniMethods[] = {
+  { "nativeReserveAddressSpace", "(J)Z",
+      reinterpret_cast<void*>(ReserveAddressSpace) },
+  { "nativeCreateRelroFile",
+      "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z",
+      reinterpret_cast<void*>(CreateRelroFile) },
+  { "nativeLoadWithRelroFile",
+      "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)I",
+      reinterpret_cast<void*>(LoadWithRelroFile) },
+};
+
+}  // namespace
+
+void RegisterWebViewFactory(JNIEnv* env) {
+  // If either of these fail, it will set an exception that will be thrown on
+  // return, so no need to handle errors here.
+  jclass clazz = env->FindClass(kWebViewFactoryClassName);
+  if (clazz) {
+    LIBLOAD_SUCCESS = env->GetStaticIntField(
+        clazz,
+        env->GetStaticFieldID(clazz, "LIBLOAD_SUCCESS", "I"));
+
+    LIBLOAD_FAILED_TO_OPEN_RELRO_FILE = env->GetStaticIntField(
+        clazz,
+        env->GetStaticFieldID(clazz, "LIBLOAD_FAILED_TO_OPEN_RELRO_FILE", "I"));
+
+    LIBLOAD_FAILED_TO_LOAD_LIBRARY = env->GetStaticIntField(
+        clazz,
+        env->GetStaticFieldID(clazz, "LIBLOAD_FAILED_TO_LOAD_LIBRARY", "I"));
+
+    LIBLOAD_FAILED_JNI_CALL = env->GetStaticIntField(
+        clazz,
+        env->GetStaticFieldID(clazz, "LIBLOAD_FAILED_JNI_CALL", "I"));
+
+    LIBLOAD_FAILED_TO_FIND_NAMESPACE = env->GetStaticIntField(
+        clazz,
+        env->GetStaticFieldID(clazz, "LIBLOAD_FAILED_TO_FIND_NAMESPACE", "I"));
+  }
+}
+
+void RegisterWebViewLibraryLoader(JNIEnv* env) {
+  // If either of these fail, it will set an exception that will be thrown on
+  // return, so no need to handle errors here.
+  jclass clazz = env->FindClass(kWebViewLibraryLoaderClassName);
+  if (clazz) {
+    env->RegisterNatives(clazz, kJniMethods, NELEM(kJniMethods));
+  }
+}
+
+}  // namespace android
+
+JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void*) {
+  JNIEnv* env = NULL;
+  if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
+    ALOGE("GetEnv failed");
+    return JNI_ERR;
+  }
+  android::RegisterWebViewFactory(env);
+  // Ensure there isn't a pending Java exception before registering methods from
+  // WebViewLibraryLoader
+  if (!env->ExceptionCheck()) {
+    android::RegisterWebViewLibraryLoader(env);
+  }
+  return JNI_VERSION_1_6;
+}
diff --git a/packages/BackupRestoreConfirmation/res/values-ar/strings.xml b/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
index b7a56d1..810b1e7 100644
--- a/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
@@ -21,13 +21,13 @@
     <string name="backup_confirm_text" msgid="1878021282758896593">"تم طلب الاحتفاظ بنسخة احتياطية كاملة من البيانات على كمبيوتر سطح مكتب متصل. هل تريد السماح بإجراء ذلك؟\n\nإذا لم تطلب الاحتفاظ بنسخة احتياطية بنفسك، فلا تسمح بمتابعة العملية."</string>
     <string name="allow_backup_button_label" msgid="4217228747769644068">"الاحتفاظ بنسخة احتياطية من بياناتي"</string>
     <string name="deny_backup_button_label" msgid="6009119115581097708">"عدم النسخ الاحتياطي"</string>
-    <string name="restore_confirm_text" msgid="7499866728030461776">"تم طلب استرداد جميع البيانات بالكامل من كمبيوتر سطح مكتب متصل. هل تريد السماح بإجراء ذلك؟\n\nإذا لم تطلب الاسترداد بنفسك، فلا تسمح بمتابعة العملية. يؤدي لك إلى استبدال أية بيانات حاليًا على الجهاز."</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"تم طلب استرداد جميع البيانات بالكامل من كمبيوتر سطح مكتب متصل. هل تريد السماح بإجراء ذلك؟\n\nإذا لم تطلب الاسترداد بنفسك، فلا تسمح بمتابعة العملية. يؤدي لك إلى استبدال أي بيانات حاليًا على الجهاز."</string>
     <string name="allow_restore_button_label" msgid="3081286752277127827">"استرداد بياناتي"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"عدم الاسترداد"</string>
-    <string name="current_password_text" msgid="8268189555578298067">"الرجاء إدخال كلمة مرور النسخ الاحتياطي أدناه:"</string>
-    <string name="device_encryption_restore_text" msgid="1570864916855208992">"الرجاء إدخال كلمة مرور تشفير جهازك أدناه."</string>
-    <string name="device_encryption_backup_text" msgid="5866590762672844664">"الرجاء إدخال كلمة مرور تشفير الجهاز. سيتم استخدام ذلك أيضًا لتشفير أرشيف النسخ الاحتياطي."</string>
-    <string name="backup_enc_password_text" msgid="4981585714795233099">"الرجاء إدخال كلمة المرور للاستخدام لتشفير بيانات النسخة الاحتياطية بالكامل. إذا تم ترك هذا فارغًا، فسيتم استخدام كلمة مرور النسخ الاحتياطي الحالية:"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"يُرجى إدخال كلمة مرور النسخ الاحتياطي أدناه:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"يُرجى إدخال كلمة مرور تشفير جهازك أدناه."</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"يُرجى إدخال كلمة مرور تشفير الجهاز. سيتم استخدام ذلك أيضًا لتشفير أرشيف النسخ الاحتياطي."</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"يُرجى إدخال كلمة المرور للاستخدام لتشفير بيانات النسخة الاحتياطية بالكامل. إذا تم ترك هذا فارغًا، فسيتم استخدام كلمة مرور النسخ الاحتياطي الحالية:"</string>
     <string name="backup_enc_password_optional" msgid="1350137345907579306">"إذا كنت ترغب في تشفير بيانات النسخة الاحتياطية بالكامل، فأدخل كلمة المرور أدناه:"</string>
     <string name="backup_enc_password_required" msgid="7889652203371654149">"نظرًا لكون جهازك مشفرًا، أنت مطالب بتشفير النسخة الاحتياطية. يُرجى إدخال كلمة المرور أدناه:"</string>
     <string name="restore_enc_password_text" msgid="6140898525580710823">"إذا كانت بيانات الاسترداد مشفرة، فالرجاء إدخال كلمة المرور أدناه:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-bn/strings.xml b/packages/BackupRestoreConfirmation/res/values-bn/strings.xml
index 2b69d5b..afc8c3e 100644
--- a/packages/BackupRestoreConfirmation/res/values-bn/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-bn/strings.xml
@@ -20,13 +20,13 @@
     <string name="restore_confirm_title" msgid="5469365809567486602">"সম্পূর্ণ পুনরুদ্ধার"</string>
     <string name="backup_confirm_text" msgid="1878021282758896593">"একটি সংযুক্ত ডেস্কটপ কম্পিউটার থেকে সমস্ত ডেটার সম্পূর্ণ ব্যাকআপ নেওয়ার অনুরোধ করা হয়েছে৷ আপনি কি এটি করার অনুমতি দিতে চান?\n\nযদি আপনি নিজের থেকে এই ব্যাকআপ নেওয়ার অনুরোধ না করে থাকেন, তবে এটি প্রক্রিয়াটিতে অনুমতি প্রদান করবেন না৷"</string>
     <string name="allow_backup_button_label" msgid="4217228747769644068">"আমার ডেটার ব্যাকআপ রাখুন"</string>
-    <string name="deny_backup_button_label" msgid="6009119115581097708">"ব্যাক আপ করবেন না"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"ব্যাক-আপ করবেন না"</string>
     <string name="restore_confirm_text" msgid="7499866728030461776">"একটি সংযুক্ত ডেস্কটপ কম্পিউটার থেকে সমস্ত ডেটার সম্পূর্ণ ব্যাকআপ নেওয়ার অনুরোধ করা হয়েছে৷ আপনি কি এটি করার অনুমতি দিতে চান?\n\nযদি আপনি নিজের থেকে এই ব্যাকআপ নেওয়ার অনুরোধ না করে থাকেন, তবে এই প্রক্রিয়াটিতে অনুমতি প্রদান করবেন না৷ এটি বর্তমানে ডিভাইসটিতে থাকা সমস্ত ডেটাকে প্রতিস্থাপন করবে!"</string>
     <string name="allow_restore_button_label" msgid="3081286752277127827">"আমার ডেটা পুনরুদ্ধার করুন"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"পুনরুদ্ধার করবেন না"</string>
     <string name="current_password_text" msgid="8268189555578298067">"দয়া করে নিচে আপনার বর্তমান ব্যাকআপের পাসওয়ার্ড দিন:"</string>
     <string name="device_encryption_restore_text" msgid="1570864916855208992">"দয়া করে নিচে আপনার ডিভাইসের এনক্রিপশান পাসওয়ার্ড লিখুন৷"</string>
-    <string name="device_encryption_backup_text" msgid="5866590762672844664">"দয়া করে নিচে আপানার ডিভাইসের এনক্রিপশান পাসওয়ার্ড লিখুন৷ এছাড়াও ব্যাকআপ সংরক্ষণাগার এনক্রিপ্ট করতে এটি ব্যবহার করা হবে৷"</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"অনুগ্রহ করে নিচে আপানার ডিভাইসের এনক্রিপশান পাসওয়ার্ড লিখুন৷ এছাড়াও ব্যাক-আপ আর্কাইভ এনক্রিপ্ট করতে এটি ব্যবহার করা হবে৷"</string>
     <string name="backup_enc_password_text" msgid="4981585714795233099">"সম্পূর্ণ ব্যাকআপ ডেটা এনক্রিপ্ট করতে দয়া করে একটি পাসওয়ার্ড লিখুন৷ যদি এটি খালি রেখে দেওয়া হয় তবে আপনার বর্তমান ব্যাকআপ পাসওয়ার্ডটি ব্যবহার করা হবে:"</string>
     <string name="backup_enc_password_optional" msgid="1350137345907579306">"আপনি যদি সম্পূর্ণ ব্যাকআপ ডেটা এনক্রিপ্ট করতে চান তাহলে নিচে একটি পাসওয়ার্ড লিখুন:"</string>
     <string name="backup_enc_password_required" msgid="7889652203371654149">"আপনার ডিভাইস এনক্রিপ্ট হয়ে থাকার কারণে আপনার ব্যাকআপকে এনক্রিপ্ট করতে হবে। দয়া করে নিচে একটি পাসওয়ার্ড দিন:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-da/strings.xml b/packages/BackupRestoreConfirmation/res/values-da/strings.xml
index 3a74915..94872e2 100644
--- a/packages/BackupRestoreConfirmation/res/values-da/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-da/strings.xml
@@ -16,23 +16,23 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="backup_confirm_title" msgid="827563724209303345">"Fuld sikkerhedskopiering"</string>
+    <string name="backup_confirm_title" msgid="827563724209303345">"Fuld backup"</string>
     <string name="restore_confirm_title" msgid="5469365809567486602">"Fuld genoprettelse"</string>
-    <string name="backup_confirm_text" msgid="1878021282758896593">"Der er anmodet om en fuld sikkerhedskopiering af alle data til en tilsluttet stationær computer. Vil du tillade dette?\n\nHvis du ikke har anmodet om sikkerhedskopiering, skal du ikke tillade denne handling."</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"Der er anmodet om en fuld backup af alle data til en tilsluttet computer. Vil du tillade dette?\n\nHvis du ikke har anmodet om backup, skal du ikke tillade denne handling."</string>
     <string name="allow_backup_button_label" msgid="4217228747769644068">"Sikkerhedskopiér mine data"</string>
     <string name="deny_backup_button_label" msgid="6009119115581097708">"Undlad at sikkerhedskopiere"</string>
-    <string name="restore_confirm_text" msgid="7499866728030461776">"Der er anmodet om en fuld sikkerhedskopiering af alle data til en tilsluttet stationær computer. Vil du tillade dette?\n\nHvis du ikke har anmodet om sikkerhedskopiering, skal du ikke tillade denne handling."</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"Der er anmodet om en fuld backup af alle data til en tilsluttet stationær computer. Vil du tillade dette?\n\nHvis du ikke har anmodet om backup, skal du ikke tillade denne handling."</string>
     <string name="allow_restore_button_label" msgid="3081286752277127827">"Gendan mine data"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"Gendan ikke"</string>
-    <string name="current_password_text" msgid="8268189555578298067">"Indtast din aktuelle adgangskode til sikkerhedskopiering nedenfor:"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"Indtast din aktuelle adgangskode til backup nedenfor:"</string>
     <string name="device_encryption_restore_text" msgid="1570864916855208992">"Indtast adgangskoden til kryptering for din enhed nedenfor."</string>
     <string name="device_encryption_backup_text" msgid="5866590762672844664">"Indtast adgangskoden til kryptering for din enhed nedenfor. Denne bliver også brugt til at kryptere sikkerhedskopien af arkivet."</string>
-    <string name="backup_enc_password_text" msgid="4981585714795233099">"Angiv en adgangskode, som skal bruges til kryptering af alle dine sikkerhedsdata. Hvis dette felt er tomt, bruges din aktuelle adgangskode til sikkerhedskopiering:"</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"Angiv en adgangskode, som skal bruges til kryptering af alle dine sikkerhedsdata. Hvis dette felt er tomt, bruges din aktuelle adgangskode til backup:"</string>
     <string name="backup_enc_password_optional" msgid="1350137345907579306">"Hvis du ønsker at kryptere sikkerhedsdataene, skal du indtaste en adgangskode nedenfor:"</string>
     <string name="backup_enc_password_required" msgid="7889652203371654149">"Eftersom din enhed er krypteret, skal du kryptere din backup. Indtast en adgangskode nedenfor:"</string>
     <string name="restore_enc_password_text" msgid="6140898525580710823">"Hvis gendannelsesdataene er krypteret, skal du angive adgangskoden nedenfor:"</string>
-    <string name="toast_backup_started" msgid="550354281452756121">"Sikkerhedskopiering begynder..."</string>
-    <string name="toast_backup_ended" msgid="3818080769548726424">"Sikkerhedskopiering er færdig"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"Backup begynder..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"Backup er færdig"</string>
     <string name="toast_restore_started" msgid="7881679218971277385">"Gendannelse begynder..."</string>
     <string name="toast_restore_ended" msgid="1764041639199696132">"Gendannelse afsluttet"</string>
     <string name="toast_timeout" msgid="5276598587087626877">"Handling fik timeout"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-en-rCA/strings.xml b/packages/BackupRestoreConfirmation/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..badad60
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-en-rCA/strings.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"Full backup"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"Full restoration"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"A full backup of all data to a connected desktop computer has been requested. Do you want to allow this to happen?\n\nIf you did not request the backup yourself, do not allow the operation to proceed."</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"Back up my data"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"Do not back up"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"A full restore of all data from a connected desktop computer has been requested. Do you want to allow this to happen?\n\nIf you did not request the restore yourself, do not allow the operation to proceed. This will replace any data currently on the device!"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"Restore my data"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"Do not restore"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"Please enter your current backup password below:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"Please enter your device encryption password below."</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"Please enter your device encryption password below. This will also be used to encrypt the backup archive."</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"Please enter a password to use for encrypting the full backup data. If this is left blank, your current backup password will be used:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"If you wish to encrypt the full backup data, enter a password below:"</string>
+    <string name="backup_enc_password_required" msgid="7889652203371654149">"Since your device is encrypted, you are required to encrypt your backup. Please enter a password below:"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"If the restore data is encrypted, please enter the password below:"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"Backup starting..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"Backup finished"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"Restoration starting..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"Restoration ended"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"Operation timed out"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-en-rXC/strings.xml b/packages/BackupRestoreConfirmation/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..c42abe4
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-en-rXC/strings.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎Full backup‎‏‎‎‏‎"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‎‎Full restore‎‏‎‎‏‎"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎A full backup of all data to a connected desktop computer has been requested. Do you want to allow this to happen?‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎If you did not request the backup yourself, do not allow the operation to proceed.‎‏‎‎‏‎"</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‎‎Back up my data‎‏‎‎‏‎"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‎Do not back up‎‏‎‎‏‎"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‎A full restore of all data from a connected desktop computer has been requested. Do you want to allow this to happen?‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎If you did not request the restore yourself, do not allow the operation to proceed. This will replace any data currently on the device!‎‏‎‎‏‎"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎Restore my data‎‏‎‎‏‎"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‎Do not restore‎‏‎‎‏‎"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‎Please enter your current backup password below:‎‏‎‎‏‎"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎Please enter your device encryption password below.‎‏‎‎‏‎"</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎Please enter your device encryption password below. This will also be used to encrypt the backup archive.‎‏‎‎‏‎"</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎Please enter a password to use for encrypting the full backup data. If this is left blank, your current backup password will be used:‎‏‎‎‏‎"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎If you wish to encrypt the full backup data, enter a password below:‎‏‎‎‏‎"</string>
+    <string name="backup_enc_password_required" msgid="7889652203371654149">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎Since your device is encrypted, you are required to encrypt your backup. Please enter a password below:‎‏‎‎‏‎"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎If the restore data is encrypted, please enter the password below:‎‏‎‎‏‎"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‏‎‎‏‎Backup starting...‎‏‎‎‏‎"</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‎‎Backup finished‎‏‎‎‏‎"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‎Restore starting...‎‏‎‎‏‎"</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎Restore ended‎‏‎‎‏‎"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‎Operation timed out‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-hi/strings.xml b/packages/BackupRestoreConfirmation/res/values-hi/strings.xml
index 2578e8f..06f9ebd 100644
--- a/packages/BackupRestoreConfirmation/res/values-hi/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-hi/strings.xml
@@ -18,22 +18,22 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="backup_confirm_title" msgid="827563724209303345">"पूर्ण सुरक्षा"</string>
     <string name="restore_confirm_title" msgid="5469365809567486602">"पूर्ण पुनर्स्‍थापना"</string>
-    <string name="backup_confirm_text" msgid="1878021282758896593">"कनेक्‍ट कि‍ए गए डेस्‍कटॉप कंप्‍यूटर से सभी डेटा के संपूर्ण सुरक्षा का अनुरोध कि‍या गया है. क्‍या आप इसकी अनुमति‍ देना चाहते हैं?\n\nयदि‍ आपने स्‍वयं बैकअप का अनुरोध नहीं कि‍या है, तो प्रक्रि‍या जारी रखने की अनुमति‍ न दें."</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"कनेक्‍ट कि‍ए गए डेस्‍कटॉप कंप्‍यूटर से पूरे डेटा के बैकअप का अनुरोध कि‍या गया है. क्‍या आप इसकी अनुमति‍ देना चाहते हैं?\n\nअगर आपने बैकअप का अनुरोध नहीं कि‍या है, तो इस प्रक्रि‍या को जारी रखने की अनुमति‍ न दें."</string>
     <string name="allow_backup_button_label" msgid="4217228747769644068">"मेरे डेटा का बैकअप लें"</string>
     <string name="deny_backup_button_label" msgid="6009119115581097708">"बैकअप न लें"</string>
-    <string name="restore_confirm_text" msgid="7499866728030461776">"कनेक्‍ट कि‍ए गए डेस्‍कटॉप कंप्‍यूटर से सभी डेटा की पूर्ण पुनर्स्थापना का अनुरोध कि‍या गया है. क्‍या आप इसकी अनुमति‍ देना चाहते हैं?\n\nयदि‍ आपने स्‍वयं पुनर्प्राप्ति‍ का अनुरोध नहीं कि‍या है, तो प्रक्रि‍या जारी रखने की अनुमति‍ न दें. इससे वर्तमान में आपके डिवाइस पर मौजूद डेटा बदल जाएगा!"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"कनेक्‍ट कि‍ए गए डेस्‍कटॉप कंप्‍यूटर से पूरे डेटा को बहाल करने का अनुरोध कि‍या गया है. क्‍या आप इसकी अनुमति‍ देना चाहते हैं?\n\nअगर आपने इसे बहाल करने का अनुरोध नहीं कि‍या है, तो इस प्रक्रि‍या को जारी रखने की अनुमति‍ न दें. इससे आपके डिवाइस पर इस वक्त जो भी डेटा मौजूद है वो बदल जाएगा!"</string>
     <string name="allow_restore_button_label" msgid="3081286752277127827">"मेरा डेटा पुनर्स्थापित करें"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"पुनर्स्‍थापित न करें"</string>
     <string name="current_password_text" msgid="8268189555578298067">"कृपया नीचे अपना वर्तमान सुरक्षित करने का पासवर्ड डालें:"</string>
-    <string name="device_encryption_restore_text" msgid="1570864916855208992">"कृपया नीचे अपना डिवाइस एन्‍क्रिप्शन पासवर्ड डालें."</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"कृपया नीचे अपना डिवाइस सुरक्षित करने का पासवर्ड डालें."</string>
     <string name="device_encryption_backup_text" msgid="5866590762672844664">"कृपया अपना डिवाइस सुरक्षित तरीका पासवर्ड नीचे दर्ज करें. बैकअप मेमोरी को एन्‍क्रिप्‍ट करने के लिए भी इसका उपयोग किया जाएगा."</string>
     <string name="backup_enc_password_text" msgid="4981585714795233099">"कृपया संपूर्ण सुरक्षित डेटा को एन्‍क्रि‍प्‍ट करने में उपयोग के लि‍ए पासवर्ड डालें. यदि‍ यह खाली छोड़ दि‍या जाता है, तो आपके वर्तमान बैकअप पासवर्ड का उपयोग कि‍या जाएगा:"</string>
     <string name="backup_enc_password_optional" msgid="1350137345907579306">"यदि‍ आप संपूर्ण सुरक्षित डेटा को एन्‍क्रि‍प्‍ट करना चाहते हैं, तो नीचे पासवर्ड डालें:"</string>
     <string name="backup_enc_password_required" msgid="7889652203371654149">"चूंकि आपका डिवाइस एन्क्रिप्ट किया हुआ है, इसलिए आपको अपने बैकअप को एन्क्रिप्ट करना आवश्यक है. कृपया नीचे पासवर्ड डालें:"</string>
-    <string name="restore_enc_password_text" msgid="6140898525580710823">"यदि‍ पुनर्स्थापित डेटा को एन्‍क्रि‍प्‍ट कि‍या गया है, तो कृपया नीचे पासवर्ड डालें:"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"अगर रिस्टोर किया गया डेटा सुरक्षित कि‍या गया है, तो कृपया नीचे पासवर्ड डालें:"</string>
     <string name="toast_backup_started" msgid="550354281452756121">"सुरक्षित करना शुरु हो रहा है..."</string>
     <string name="toast_backup_ended" msgid="3818080769548726424">"सुरक्षित करना पूर्ण"</string>
     <string name="toast_restore_started" msgid="7881679218971277385">"पुनर्स्‍थापना प्रारंभ हो रही है..."</string>
     <string name="toast_restore_ended" msgid="1764041639199696132">"पुनर्स्‍थापना समाप्त"</string>
-    <string name="toast_timeout" msgid="5276598587087626877">"कार्यवाही समयबाह्य हो गई"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"काम नहीं हो सका. टाइम आउट हो गया"</string>
 </resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-hy/strings.xml b/packages/BackupRestoreConfirmation/res/values-hy/strings.xml
index 285c15d..ca9834e 100644
--- a/packages/BackupRestoreConfirmation/res/values-hy/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-hy/strings.xml
@@ -32,7 +32,7 @@
     <string name="backup_enc_password_required" msgid="7889652203371654149">"Քանի որ ձեր սարքը գաղտնագրված է, դուք պետք է գաղտնագրեք նաև ձեր պահուստը: Խնդրում ենք ստորև սահմանել գաղտնաբառը՝"</string>
     <string name="restore_enc_password_text" msgid="6140898525580710823">"Եթե ​​վերականգնվող տվյալները գաղտնագրված են, խնդրում ենք մուտքագրել գաղտնաբառը ստորև`"</string>
     <string name="toast_backup_started" msgid="550354281452756121">"Պահուստավորումը սկսվում է..."</string>
-    <string name="toast_backup_ended" msgid="3818080769548726424">"Պահուստավորումն ավարտվեց"</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"Պահուստավորումն ավարտված է"</string>
     <string name="toast_restore_started" msgid="7881679218971277385">"Վերականգնումը մեկնարկեց..."</string>
     <string name="toast_restore_ended" msgid="1764041639199696132">"Վերականգնումն ավարտվեց"</string>
     <string name="toast_timeout" msgid="5276598587087626877">"Գործողության ժամանակը սպառվեց"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-iw/strings.xml b/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
index 3ad7c96..c060403 100644
--- a/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
@@ -21,7 +21,7 @@
     <string name="backup_confirm_text" msgid="1878021282758896593">"הוגשה בקשה לגיבוי מלא של כל הנתונים במחשב שולחני מחובר. האם אתה רוצה לאפשר פעולה זו? \n\nאם לא ביקשת את הגיבוי בעצמך, אל תאפשר לפעולה להמשיך."</string>
     <string name="allow_backup_button_label" msgid="4217228747769644068">"גיבוי הנתונים שלי"</string>
     <string name="deny_backup_button_label" msgid="6009119115581097708">"אל תגבה"</string>
-    <string name="restore_confirm_text" msgid="7499866728030461776">"הוגשה בקשה לשחזור מלא של כל הנתונים ממחשב שולחני מחובר. האם אתה רוצה לאפשר פעולה זו? \n \n אם לא ביקשת את השחזור בעצמך, אל תאפשר לפעולה להמשיך. פעולה זו תחליף את כל הנתונים שנמצאים כעת במכשיר!"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"הוגשה בקשה לשחזור מלא של כל הנתונים ממחשב שולחני מחובר. האם ברצונך לאפשר פעולה זו? \n \n אם לא ביקשת את השחזור בעצמך, אל תאפשר לפעולה להמשיך. פעולה זו תחליף את כל הנתונים שנמצאים כעת במכשיר!"</string>
     <string name="allow_restore_button_label" msgid="3081286752277127827">"שחזר את הנתונים שלי"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"אל תשחזר"</string>
     <string name="current_password_text" msgid="8268189555578298067">"הזן את סיסמת הגיבוי הנוכחית למטה:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-mr/strings.xml b/packages/BackupRestoreConfirmation/res/values-mr/strings.xml
index 121ad00..3ee60ca 100644
--- a/packages/BackupRestoreConfirmation/res/values-mr/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-mr/strings.xml
@@ -18,22 +18,22 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="backup_confirm_title" msgid="827563724209303345">"पूर्ण बॅकअप"</string>
     <string name="restore_confirm_title" msgid="5469365809567486602">"पूर्ण पुनर्संचयन"</string>
-    <string name="backup_confirm_text" msgid="1878021282758896593">"कनेक्‍ट केलेल्‍या डेस्‍कटॉप संगणकावरील सर्व डेटाच्‍या पूर्ण बॅकअपची विनंती केली गेली आहे. आपण असे होण्यासाठी अनुमती देऊ इच्‍छिता?\n\nआपण स्‍वत: बॅकअपची विनंती केली नसल्‍यास, कार्य पुढे सुरु राहण्‍यास अनुमती देऊ नका."</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"कनेक्‍ट केलेल्‍या डेस्‍कटॉप काँप्युटरवरील सर्व डेटाच्‍या पूर्ण बॅकअपची विनंती केली गेली आहे. आपण असे होण्यासाठी अनुमती देऊ इच्‍छिता?\n\nआपण स्‍वत: बॅकअपची विनंती केली नसल्‍यास, कार्य पुढे सुरु राहण्‍यास अनुमती देऊ नका."</string>
     <string name="allow_backup_button_label" msgid="4217228747769644068">"माझ्‍या डेटाचा बॅकअप घ्‍या"</string>
     <string name="deny_backup_button_label" msgid="6009119115581097708">"बॅकअप घेऊ नका"</string>
-    <string name="restore_confirm_text" msgid="7499866728030461776">"कनेक्‍ट केलेल्‍या डेस्‍कटॉप संगणकावरील सर्व डेटाच्या पूर्ण पुनर्संचयनाची विनंती केली गेली आहे. आपण असे होण्यासाठी अनुमती देऊ इच्‍छिता?\n\nआपण स्‍वत: पुनर्संचयनाची विनंती केली नसल्‍यास, कार्य पुढे सुरु राहण्‍यास अनुमती देऊ नका. हे आपल्‍या डिव्‍हाइसवरील कोणत्याही वर्तमान डेटास पुनर्स्‍थित करेल!"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"कनेक्‍ट केलेल्‍या डेस्‍कटॉप काँप्युटरवरील सर्व डेटाच्या पूर्ण पुनर्संचयनाची विनंती केली गेली आहे. आपण असे होण्यासाठी अनुमती देऊ इच्‍छिता?\n\nआपण स्‍वत: पुनर्संचयनाची विनंती केली नसल्‍यास, कार्य पुढे सुरु राहण्‍यास अनुमती देऊ नका. हे आपल्‍या डिव्‍हाइसवरील कोणत्याही वर्तमान डेटास पुनर्स्‍थित करेल!"</string>
     <string name="allow_restore_button_label" msgid="3081286752277127827">"माझा डेटा पुनर्संचयित करा"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"पुनर्संचयित करू नका"</string>
     <string name="current_password_text" msgid="8268189555578298067">"कृपया आपला वर्तमान बॅकअप संकेतशब्‍द खाली प्रविष्‍ट करा:"</string>
-    <string name="device_encryption_restore_text" msgid="1570864916855208992">"कृपया आपला डिव्‍हाइस कूटबद्धीकरण संकेतशब्‍द खाली प्रविष्‍ट करा."</string>
-    <string name="device_encryption_backup_text" msgid="5866590762672844664">"कृपया आपला डिव्‍हाइस कूटबद्धीकरण संकेतशब्‍द खाली प्रविष्‍‍ट करा. हा बॅकअप संग्रह कूटबद्ध करण्‍यासाठी देखील वापरला जाईल."</string>
-    <string name="backup_enc_password_text" msgid="4981585714795233099">"कृपया पूर्ण बॅकअप डेटा कूटबद्ध करण्‍यासाठी वापरण्याकरिता संकेतशब्‍द प्रविष्‍ट करा. हे रिक्त सोडल्‍यास, आपला वर्तमान बॅकअप संकेतशब्‍द वापरला जाईल:"</string>
-    <string name="backup_enc_password_optional" msgid="1350137345907579306">"आपण पूर्ण बॅकअप डेटा कूटबद्ध करू इच्‍छित असल्‍यास, खालील संकेतशब्‍द प्रविष्‍ट करा:"</string>
-    <string name="backup_enc_password_required" msgid="7889652203371654149">"आपले डिव्हाइस कूटबद्ध केले असल्यामुळे, आपल्याला आपला बॅक अप कूटबद्ध करणे आवश्यक आहे. कृपया खाली एक संकेतशब्द प्रविष्ट करा:"</string>
-    <string name="restore_enc_password_text" msgid="6140898525580710823">"पुनर्संचयित डेटा कूटबद्ध केला असल्‍यास, कृपया संकेतशब्‍द खाली प्रविष्‍ट करा:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"कृपया तुमचे डिव्हाइस एंक्रिप्शन पासवर्ड खाली एंटर करा."</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"कृपया तुमचे डिव्हाइस एंक्रिप्शन पासवर्ड खाली एंटर करा. हा बॅकअप संग्रह एंक्रिप्ट करण्‍यासाठी देखील वापरला जाईल."</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"कृपया पूर्ण बॅकअप डेटा एंक्रिप्ट करण्‍यासाठी वापरण्याकरिता पासवर्ड एंटर करा. हे रिक्त सोडल्‍यास, आपला वर्तमान बॅकअप पासवर्ड वापरला जाईल:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"तुम्ही पूर्ण बॅकअप डेटा एंक्रिप्ट करू इच्‍छित असल्‍यास, खालील पासवर्ड एंटर करा:"</string>
+    <string name="backup_enc_password_required" msgid="7889652203371654149">"तुमचे डिव्हाइस एंक्रिप्ट केले असल्यामुळे, तुम्हाला तुमचा बॅक अप एंक्रिप्ट करणे आवश्यक आहे. कृपया खाली एक पासवर्ड एंटर करा:"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"पुनर्स्टोअर केलेला डेटा एंक्रिप्ट केला असल्‍यास, कृपया पासवर्ड खाली एंटर करा:"</string>
     <string name="toast_backup_started" msgid="550354281452756121">"बॅकअप सुरू होत आहे..."</string>
     <string name="toast_backup_ended" msgid="3818080769548726424">"बॅकअप समाप्त झाले"</string>
     <string name="toast_restore_started" msgid="7881679218971277385">"पुनर्संचयन सुरू होत आहे..."</string>
     <string name="toast_restore_ended" msgid="1764041639199696132">"पुनर्संचयन समाप्त झाले"</string>
-    <string name="toast_timeout" msgid="5276598587087626877">"कार्य कालबाह्य झाले"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"कार्य टाइमआउट झाले"</string>
 </resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-pa/strings.xml b/packages/BackupRestoreConfirmation/res/values-pa/strings.xml
index 12dd546..72513ba 100644
--- a/packages/BackupRestoreConfirmation/res/values-pa/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-pa/strings.xml
@@ -16,23 +16,23 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="backup_confirm_title" msgid="827563724209303345">"ਪੂਰਾ ਬੈਕਅਪ"</string>
+    <string name="backup_confirm_title" msgid="827563724209303345">"ਪੂਰਾ ਬੈਕਅੱਪ"</string>
     <string name="restore_confirm_title" msgid="5469365809567486602">"ਪੂਰਾ ਰੀਸਟੋਰ"</string>
-    <string name="backup_confirm_text" msgid="1878021282758896593">"ਇੱਕ ਕਨੈਕਟ ਕੀਤੇ ਡੈਸਕਟੌਪ ਕੰਪਿਊਟਰ ਦੇ ਸਾਰੇ ਡੈਟਾ ਦੇ ਇੱਕ ਪੁੂਰੇ ਬੈਕਅਪ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਗਈ ਹੈ। ਕੀ ਤੁਸੀਂ ਅਜਿਹਾ ਹੋਣ ਦੀ ਆਗਿਆ ਦੇਣਾ ਚਾਹੁੰਦੇ ਹੋ?\n\nਜੇਕਰ ਤੁਸੀਂ ਖੁਦ ਬੈਕਅਪ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ ਸੀ, ਤਾਂ ਓਪਰੇਸ਼ਨ ਜਾਰੀ ਰੱਖਣ ਦੀ ਆਗਿਆ ਨਾ ਦਿਓ।"</string>
-    <string name="allow_backup_button_label" msgid="4217228747769644068">"ਮੇਰਾ ਡੈਟਾ ਬੈਕ ਅਪ ਕਰੋ"</string>
-    <string name="deny_backup_button_label" msgid="6009119115581097708">"ਬੈਕ ਅਪ ਨਾ ਕਰੋ"</string>
-    <string name="restore_confirm_text" msgid="7499866728030461776">"ਇੱਕ ਕਨੈਕਟ ਕੀਤੇ ਡੈਸਕਟੌਪ ਕੰਪਿਊਟਰ ਦੇ ਸਾਰੇ ਡੈਟਾ ਦੇ ਇੱਕ ਪੁੂਰੇ ਰੀਸਟੋਰ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਗਈ ਹੈ। ਕੀ ਤੁਸੀਂ ਅਜਿਹਾ ਹੋਣ ਦੀ ਆਗਿਆ ਦੇਣਾ ਚਾਹੁੰਦੇ ਹੋ?\n\nਜੇਕਰ ਤੁਸੀਂ ਖੁਦ ਰੀਸਟੋਰ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ ਸੀ, ਤਾਂ ਓਪਰੇਸ਼ਨ ਜਾਰੀ ਰੱਖਣ ਦੀ ਆਗਿਆ ਨਾ ਦਿਓ। ਇਹ ਡੀਵਾਈਸ ਤੇ ਇਸ ਵੇਲੇ ਮੌਜੂਦ ਕਿਸੇ ਵੀ ਡੈਟਾ ਨੂੰ ਬਦਲ ਦੇਵੇਗਾ!"</string>
-    <string name="allow_restore_button_label" msgid="3081286752277127827">"ਮੇਰਾ ਡੈਟਾ ਰੀਸਟੋਰ ਕਰੋ"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"ਇੱਕ ਕਨੈਕਟ ਕੀਤੇ ਡੈਸਕਟਾਪ ਕੰਪਿਊਟਰ ਦੇ ਸਾਰੇ ਡਾਟਾ ਦੇ ਇੱਕ ਪੁੂਰੇ ਬੈਕਅੱਪ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਗਈ ਹੈ। ਕੀ ਤੁਸੀਂ ਅਜਿਹਾ ਹੋਣ ਦੀ ਆਗਿਆ ਦੇਣਾ ਚਾਹੁੰਦੇ ਹੋ?\n\nਜੇਕਰ ਤੁਸੀਂ ਖੁਦ ਬੈਕਅੱਪ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ ਸੀ, ਤਾਂ ਓਪਰੇਸ਼ਨ ਜਾਰੀ ਰੱਖਣ ਦੀ ਆਗਿਆ ਨਾ ਦਿਓ।"</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"ਮੇਰਾ ਡਾਟਾ ਬੈਕ ਅੱਪ ਲਓ"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"ਬੈਕ ਅੱਪ ਨਾ ਕਰੋ"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"ਇੱਕ ਕਨੈਕਟ ਕੀਤੇ ਡੈਸਕਟਾਪ ਕੰਪਿਊਟਰ ਦੇ ਸਾਰੇ ਡਾਟਾ ਦੇ ਇੱਕ ਪੁੂਰੇ ਰੀਸਟੋਰ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਗਈ ਹੈ। ਕੀ ਤੁਸੀਂ ਅਜਿਹਾ ਹੋਣ ਦੀ ਆਗਿਆ ਦੇਣਾ ਚਾਹੁੰਦੇ ਹੋ?\n\nਜੇਕਰ ਤੁਸੀਂ ਖੁਦ ਰੀਸਟੋਰ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ ਸੀ, ਤਾਂ ਓਪਰੇਸ਼ਨ ਜਾਰੀ ਰੱਖਣ ਦੀ ਆਗਿਆ ਨਾ ਦਿਓ। ਇਹ ਡੀਵਾਈਸ \'ਤੇ ਇਸ ਵੇਲੇ ਮੌਜੂਦ ਕਿਸੇ ਵੀ ਡਾਟਾ ਨੂੰ ਬਦਲ ਦੇਵੇਗਾ!"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"ਮੇਰਾ  ਡਾਟਾ  ਰੀਸਟੋਰ ਕਰੋ"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"ਰੀਸਟੋਰ ਨਾ ਕਰੋ"</string>
-    <string name="current_password_text" msgid="8268189555578298067">"ਕਿਰਪਾ ਕਰਕੇ ਹੇਠਾਂ ਆਪਣਾ ਮੌਜੂਦਾ ਬੈਕਅਪ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ:"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"ਕਿਰਪਾ ਕਰਕੇ ਹੇਠਾਂ ਆਪਣਾ ਮੌਜੂਦਾ ਬੈਕਅੱਪ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ:"</string>
     <string name="device_encryption_restore_text" msgid="1570864916855208992">"ਕਿਰਪਾ ਕਰਕੇ ਹੇਠਾਂ ਆਪਣਾ ਡੀਵਾਈਸ ਇਨਕ੍ਰਿਪਸ਼ਨ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ।"</string>
-    <string name="device_encryption_backup_text" msgid="5866590762672844664">"ਕਿਰਪਾ ਕਰਕੇ ਹੇਠਾਂ ਆਪਣਾ ਡੀਵਾਈਸ ਇਨਕ੍ਰਿਪਸ਼ਨ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ। ਇਹ ਬੈਕਅਪ ਆਰਕਾਈਵ ਇਨਕ੍ਰਿਪਟ ਕਰਨ ਲਈ ਵੀ ਵਰਤਿਆ ਜਾਏਗਾ।"</string>
-    <string name="backup_enc_password_text" msgid="4981585714795233099">"ਕਿਰਪਾ ਕਰਕੇ ਪੂਰਾ ਬੈਕਅਪ ਡੈਟਾ ਇਨਕ੍ਰਿਪਟ ਕਰਨ ਦੀ ਵਰਤੋਂ ਲਈ ਇੱਕ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ। ਜੇਕਰ ਇਸਨੂੰ ਖਾਲੀ ਛੱਡਿਆ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਤੁਹਾਡਾ ਵਰਤਮਾਨ ਬੈਕਅਪ ਪਾਸਵਰਡ ਵਰਤਿਆ ਜਾਏਗਾ:"</string>
-    <string name="backup_enc_password_optional" msgid="1350137345907579306">"ਜੇਕਰ ਤੁਸੀਂ ਪੂਰਾ ਬੈਕਅਪ ਡੈਟਾ ਇਨਕ੍ਰਿਪਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਹੇਠਾਂ ਇੱਕ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ:"</string>
-    <string name="backup_enc_password_required" msgid="7889652203371654149">"ਕਿਉਂਕਿ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਇਨਕ੍ਰਿਪਟਿਡ ਬੈ, ਇਸਲਈ ਤੁਹਾਡੇ ਤੋਂ ਆਪਣਾ ਬੈਕਅਪ ਇਨਕ੍ਰਿਪਟ ਕਰਨ ਦੀ ਮੰਗ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਹੇਠਾਂ ਇੱਕ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ:"</string>
-    <string name="restore_enc_password_text" msgid="6140898525580710823">"ਜੇਕਰ ਰੀਸਟੋਰ ਡੈਟਾ ਇਨਕ੍ਰਿਪਟ ਕੀਤਾ ਗਿਆ ਹੈ, ਤਾਂ ਹੇਠਾਂ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ:"</string>
-    <string name="toast_backup_started" msgid="550354281452756121">"ਬੈਕਅਪ ਚਾਲੂ ਕਰ ਰਿਹਾ ਹੈ..."</string>
-    <string name="toast_backup_ended" msgid="3818080769548726424">"ਬੈਕਅਪ ਪੂਰਾ ਹੋਇਆ"</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"ਕਿਰਪਾ ਕਰਕੇ ਹੇਠਾਂ ਆਪਣਾ ਡੀਵਾਈਸ ਇਨਕ੍ਰਿਪਸ਼ਨ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ। ਇਹ ਬੈਕਅੱਪ ਪੁਰਾਲੇਖ ਇਨਕ੍ਰਿਪਟ ਕਰਨ ਲਈ ਵੀ ਵਰਤਿਆ ਜਾਏਗਾ।"</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"ਕਿਰਪਾ ਕਰਕੇ ਪੂਰਾ ਬੈਕਅੱਪ ਡਾਟਾ ਇਨਕ੍ਰਿਪਟ ਕਰਨ ਦੀ ਵਰਤੋਂ ਲਈ ਇੱਕ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ। ਜੇਕਰ ਇਸਨੂੰ ਖਾਲੀ ਛੱਡਿਆ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਤੁਹਾਡਾ ਵਰਤਮਾਨ ਬੈਕਅੱਪ ਪਾਸਵਰਡ ਵਰਤਿਆ ਜਾਏਗਾ:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"ਜੇਕਰ ਤੁਸੀਂ ਪੂਰਾ ਬੈਕਅੱਪ ਡਾਟਾ ਇਨਕ੍ਰਿਪਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਹੇਠਾਂ ਇੱਕ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ:"</string>
+    <string name="backup_enc_password_required" msgid="7889652203371654149">"ਕਿਉਂਕਿ ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਇਨਕ੍ਰਿਪਟਡ ਹੈ, ਇਸਲਈ ਤੁਹਾਡੇ ਤੋਂ ਆਪਣਾ ਬੈਕਅੱਪ ਇਨਕ੍ਰਿਪਟ ਕਰਨ ਦੀ ਮੰਗ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਹੇਠਾਂ ਇੱਕ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ:"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"ਜੇਕਰ ਰੀਸਟੋਰ ਡਾਟਾ ਇਨਕ੍ਰਿਪਟ ਕੀਤਾ ਗਿਆ ਹੈ, ਤਾਂ ਹੇਠਾਂ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ:"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"ਬੈਕਅੱਪ ਚਾਲੂ ਕਰ ਰਿਹਾ ਹੈ..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"ਬੈਕਅੱਪ ਪੂਰਾ ਹੋਇਆ"</string>
     <string name="toast_restore_started" msgid="7881679218971277385">"ਰੀਸਟੋਰ ਚਾਲੂ ਹੋ ਰਿਹਾ ਹੈ..."</string>
     <string name="toast_restore_ended" msgid="1764041639199696132">"ਰੀਸਟੋਰ ਖ਼ਤਮ ਹੋਇਆ"</string>
     <string name="toast_timeout" msgid="5276598587087626877">"ਓਪਰੇਸ਼ਨ ਦਾ ਸਮਾਂ ਸਮਾਪਤ"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-pt-rBR/strings.xml b/packages/BackupRestoreConfirmation/res/values-pt-rBR/strings.xml
index cbc579e..baa4867 100644
--- a/packages/BackupRestoreConfirmation/res/values-pt-rBR/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-pt-rBR/strings.xml
@@ -18,10 +18,10 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="backup_confirm_title" msgid="827563724209303345">"Backup completo"</string>
     <string name="restore_confirm_title" msgid="5469365809567486602">"Restauração completa"</string>
-    <string name="backup_confirm_text" msgid="1878021282758896593">"Foi solicitado um backup completo de todos os dados para um computador conectado. Deseja permitir que isso aconteça?\n\nCaso você não tenha solicitado o backup, não permita que a operação prossiga."</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"Foi solicitado um backup completo de todos os dados para um computador conectado. Quer permitir que isso aconteça?\n\nCaso você não tenha solicitado o backup, não permita que a operação prossiga."</string>
     <string name="allow_backup_button_label" msgid="4217228747769644068">"Fazer backup de meus dados"</string>
     <string name="deny_backup_button_label" msgid="6009119115581097708">"Não fazer backup"</string>
-    <string name="restore_confirm_text" msgid="7499866728030461776">"Foi solicitada uma restauração completa de todos os dados de um computador conectado. Deseja permitir que isso ocorra?\n\nCaso você não tenha solicitado a restauração, não permita que a operação prossiga. Isso substituirá todos os dados existentes no dispositivo!"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"Foi solicitada uma restauração completa de todos os dados de um computador conectado. Quer permitir que isso ocorra?\n\nCaso você não tenha solicitado a restauração, não permita que a operação prossiga. Isso substituirá todos os dados existentes no dispositivo!"</string>
     <string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurar meus dados"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"Não restaurar"</string>
     <string name="current_password_text" msgid="8268189555578298067">"Digite sua senha de backup atual abaixo:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-pt/strings.xml b/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
index cbc579e..baa4867 100644
--- a/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
@@ -18,10 +18,10 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="backup_confirm_title" msgid="827563724209303345">"Backup completo"</string>
     <string name="restore_confirm_title" msgid="5469365809567486602">"Restauração completa"</string>
-    <string name="backup_confirm_text" msgid="1878021282758896593">"Foi solicitado um backup completo de todos os dados para um computador conectado. Deseja permitir que isso aconteça?\n\nCaso você não tenha solicitado o backup, não permita que a operação prossiga."</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"Foi solicitado um backup completo de todos os dados para um computador conectado. Quer permitir que isso aconteça?\n\nCaso você não tenha solicitado o backup, não permita que a operação prossiga."</string>
     <string name="allow_backup_button_label" msgid="4217228747769644068">"Fazer backup de meus dados"</string>
     <string name="deny_backup_button_label" msgid="6009119115581097708">"Não fazer backup"</string>
-    <string name="restore_confirm_text" msgid="7499866728030461776">"Foi solicitada uma restauração completa de todos os dados de um computador conectado. Deseja permitir que isso ocorra?\n\nCaso você não tenha solicitado a restauração, não permita que a operação prossiga. Isso substituirá todos os dados existentes no dispositivo!"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"Foi solicitada uma restauração completa de todos os dados de um computador conectado. Quer permitir que isso ocorra?\n\nCaso você não tenha solicitado a restauração, não permita que a operação prossiga. Isso substituirá todos os dados existentes no dispositivo!"</string>
     <string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurar meus dados"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"Não restaurar"</string>
     <string name="current_password_text" msgid="8268189555578298067">"Digite sua senha de backup atual abaixo:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-sw/strings.xml b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
index 530efc0..ed75344 100644
--- a/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
@@ -18,7 +18,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="backup_confirm_title" msgid="827563724209303345">"Kuhifadhi kikamilifu"</string>
     <string name="restore_confirm_title" msgid="5469365809567486602">"Kurejesha kila kitu"</string>
-    <string name="backup_confirm_text" msgid="1878021282758896593">"Ombi la kuhifadhi nakala rudufu kamili za data kwenye eneo kazi la kompyuta iliyounganishwa limewasilishwa. Ungependa shughuli hii ufanyike?\n\n Ikiwa sio wewe uliyewasilisha ombi hili, usikubali shughuli hii iendelee."</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"Ombi la kuhifadhi nakala kamili za data kwenye eneo kazi la kompyuta iliyounganishwa limewasilishwa. Ungependa shughuli hii ufanyike?\n\n Ikiwa si wewe uliyewasilisha ombi hili, usikubali shughuli hii iendelee."</string>
     <string name="allow_backup_button_label" msgid="4217228747769644068">"Hifadhi nakala ya data yangu"</string>
     <string name="deny_backup_button_label" msgid="6009119115581097708">"Usicheleze"</string>
     <string name="restore_confirm_text" msgid="7499866728030461776">"Kurejesha kamili kwa data nzima kutoka kwa eneo kazi la kompyuta lililounganishwa limeombwa. Unataka kuruhusu hii kutendeka?\n\n Ikiwa hukuweza kurejesha upya mwenyewe, usiruhusu uendeshaji huu kuendelea. Hii itaweka upya data yoyote iliyo kwenye kifaa hiki sasa!"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-te/strings.xml b/packages/BackupRestoreConfirmation/res/values-te/strings.xml
index 52916d8..35e9492 100644
--- a/packages/BackupRestoreConfirmation/res/values-te/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-te/strings.xml
@@ -25,8 +25,8 @@
     <string name="allow_restore_button_label" msgid="3081286752277127827">"నా డేటాను పునరుద్ధరించు"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"పునరుద్ధరించవద్దు"</string>
     <string name="current_password_text" msgid="8268189555578298067">"దయచేసి దిగువ మీ ప్రస్తుత బ్యాకప్ పాస్‌వర్డ్‌ను నమోదు చేయండి:"</string>
-    <string name="device_encryption_restore_text" msgid="1570864916855208992">"దయచేసి దిగువ మీ పరికర గుప్తీకరణ పాస్‌వర్డ్‌ను నమోదు చేయండి."</string>
-    <string name="device_encryption_backup_text" msgid="5866590762672844664">"దయచేసి దిగువ మీ పరికర గుప్తీకరణ పాస్‌వర్డ్‌ను నమోదు చేయండి. ఇది బ్యాకప్ ఆర్కైవ్‌ను గుప్తీకరించడానికి కూడా ఉపయోగించబడుతుంది."</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"దయచేసి దిగువ మీ పరికర ఎన్‌క్రిప్షన్ పాస్‌వర్డ్‌ను నమోదు చేయండి."</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"దయచేసి దిగువ మీ పరికర ఎన్‌క్రిప్షన్ పాస్‌వర్డ్‌ను నమోదు చేయండి. ఇది బ్యాకప్ ఆర్కైవ్‌ను ఎన్‌క్రిప్ట్ చేయడానికి కూడా ఉపయోగించబడుతుంది."</string>
     <string name="backup_enc_password_text" msgid="4981585714795233099">"దయచేసి పూర్తి బ్యాకప్ డేటాను గుప్తీకరించడం కోసం ఉపయోగించడానికి పాస్‌వర్డ్‌ను నమోదు చేయండి. దీన్ని ఖాళీగా వదిలిపెడితే, మీ ప్రస్తుత బ్యాకప్ పాస్‌వర్డ్ ఉపయోగించబడుతుంది:"</string>
     <string name="backup_enc_password_optional" msgid="1350137345907579306">"మీరు పూర్తి బ్యాకప్ డేటాను గుప్తీకరించాలని కోరుకుంటున్నట్లయితే, దిగువ పాస్‌వర్డ్‌ను నమోదు చేయండి:"</string>
     <string name="backup_enc_password_required" msgid="7889652203371654149">"మీ పరికరం గుప్తీకరించబడినందున, మీరు మీ బ్యాకప్‌ని గుప్తీకరించాల్సి ఉంటుంది. దయచేసి దిగువ పాస్‌వర్డ్‌ని నమోదు చేయండి:"</string>
diff --git a/packages/CaptivePortalLogin/OWNERS b/packages/CaptivePortalLogin/OWNERS
new file mode 100644
index 0000000..fa26997
--- /dev/null
+++ b/packages/CaptivePortalLogin/OWNERS
@@ -0,0 +1,7 @@
+set noparent
+
+per-file Android.mk = build.master@android.com
+
+ek@google.com
+hugobenichi@google.com
+lorenzo@google.com
diff --git a/packages/CaptivePortalLogin/res/values-af/strings.xml b/packages/CaptivePortalLogin/res/values-af/strings.xml
index 0c48b76..fa6f3fa 100644
--- a/packages/CaptivePortalLogin/res/values-af/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-af/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Gebruik hierdie netwerk nes dit is"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Moenie hierdie netwerk gebruik nie"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Meld by netwerk aan"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Meld aan by %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Die netwerk waarby jy probeer aansluit, het sekuriteitkwessies."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Byvoorbeeld, die aanmeldbladsy behoort dalk nie aan die organisasie wat gewys word nie."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Gaan in elk geval deur blaaier voort"</string>
diff --git a/packages/CaptivePortalLogin/res/values-am/strings.xml b/packages/CaptivePortalLogin/res/values-am/strings.xml
index f126a86..36d5e19 100644
--- a/packages/CaptivePortalLogin/res/values-am/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-am/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"ይህን አውታረ መረብ እንዳለ ተጠቀምበት"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"ይህን አውታረ መረብ አትጠቀምበት"</string>
     <string name="action_bar_label" msgid="917235635415966620">"ወደ አውታረ መረብ በመለያ ይግቡ"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"ወደ %1$s ይግቡ"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"ለመቀላቀል እየሞከሩ ያሉት አውታረ መረብ የደህንነት ችግሮች አሉበት።"</string>
     <string name="ssl_error_example" msgid="647898534624078900">"ለምሳሌ፣ የመግቢያ ገጹ የሚታየው ድርጅት ላይሆን ይችላል።"</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"ለማንኛውም በአሳሽ በኩል ይቀጥሉ"</string>
diff --git a/packages/CaptivePortalLogin/res/values-ar/strings.xml b/packages/CaptivePortalLogin/res/values-ar/strings.xml
index 76ae5f1..3b2fd00 100644
--- a/packages/CaptivePortalLogin/res/values-ar/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ar/strings.xml
@@ -5,6 +5,9 @@
     <string name="action_use_network" msgid="6076184727448466030">"استخدام هذه الشبكة كما هي"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"عدم استخدام هذه الشبكة"</string>
     <string name="action_bar_label" msgid="917235635415966620">"تسجيل الدخول إلى الشبكة"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for action_bar_title (5645564790486983117) -->
+    <skip />
     <string name="ssl_error_warning" msgid="6653188881418638872">"الشبكة التي تحاول الانضمام إليها بها مشكلات أمنية."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"على سبيل المثال، قد لا تنتمي صفحة تسجيل الدخول إلى المنظمة المعروضة."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"المتابعة على أي حال عبر المتصفح"</string>
diff --git a/packages/CaptivePortalLogin/res/values-az/strings.xml b/packages/CaptivePortalLogin/res/values-az/strings.xml
index f723384..44b406d 100644
--- a/packages/CaptivePortalLogin/res/values-az/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-az/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Bu şəbəkəni olduğu kimi istifadə edin"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Bu şəbəkəni istifadə etməyin"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Şəbəkəyə daxil olun"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Daxil olun: %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Qoşulmaq istədiyiniz şəbəkənin təhlükəsizlik problemləri var."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Məsələn, giriş səhifəsi göstərilən təşkilata aid olmaya bilər."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Hər bir halda brazuer ilə davam edin"</string>
diff --git a/packages/CaptivePortalLogin/res/values-b+sr+Latn/strings.xml b/packages/CaptivePortalLogin/res/values-b+sr+Latn/strings.xml
index fb05a9ed..f2a6e07 100644
--- a/packages/CaptivePortalLogin/res/values-b+sr+Latn/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-b+sr+Latn/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Koristi ovu mrežu takvu kakva je"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ne koristi ovu mrežu"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Prijavi me na mrežu"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Prijavite se u: %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Mreža kojoj pokušavate da se pridružite ima bezbednosnih problema."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Na primer, stranica za prijavljivanje možda ne pripada prikazanoj organizaciji."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Ipak nastavi preko pregledača"</string>
diff --git a/packages/CaptivePortalLogin/res/values-be/strings.xml b/packages/CaptivePortalLogin/res/values-be/strings.xml
index 5391946..09ed1de 100644
--- a/packages/CaptivePortalLogin/res/values-be/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-be/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Выкарыстоўваць гэтую сетку як ёсць"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Не выкарыстоўваць гэту сетку"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Увайсці ў сетку"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Увайсці ў %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"У сеткі, да якой вы спрабуеце далучыцца, ёсць праблемы з бяспекай."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Напрыклад, старонка ўваходу можа не належаць указанай арганізацыі."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Усё роўна працягнуць праз браўзер"</string>
diff --git a/packages/CaptivePortalLogin/res/values-bg/strings.xml b/packages/CaptivePortalLogin/res/values-bg/strings.xml
index a85191f..8ce9deb 100644
--- a/packages/CaptivePortalLogin/res/values-bg/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-bg/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Директно използване на тази мрежа"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Без използване на тази мрежа"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Вход в мрежата"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Влезте в/ъв %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Мрежата, към която опитвате да се присъедините, има проблеми със сигурността."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Например страницата за вход може да не принадлежи на показаната организация."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Продължаване през браузър въпреки това"</string>
diff --git a/packages/CaptivePortalLogin/res/values-bn/strings.xml b/packages/CaptivePortalLogin/res/values-bn/strings.xml
index 24cbfbd..b75d76e 100644
--- a/packages/CaptivePortalLogin/res/values-bn/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-bn/strings.xml
@@ -4,8 +4,9 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"যেভাবে আছে সেভাবেই এই নেটওয়ার্ক ব্যবহার করুন"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"এই নেটওয়ার্ক ব্যবহার করবেন না"</string>
-    <string name="action_bar_label" msgid="917235635415966620">"নেটওয়ার্কে প্রবেশ করুন"</string>
+    <string name="action_bar_label" msgid="917235635415966620">"নেটওয়ার্কে সাইন-ইন করুন"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s তে সাইন-ইন করুন"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"আপনি যে নেটওয়ার্কে যোগ দেওয়ার চেষ্টা করছেন তাতে নিরাপত্তার সমস্যা আছে।"</string>
-    <string name="ssl_error_example" msgid="647898534624078900">"উদাহরণস্বরূপ, লগইন পৃষ্ঠাটি প্রদর্শিত প্রতিষ্ঠানের অন্তর্গত নাও হতে পারে৷"</string>
+    <string name="ssl_error_example" msgid="647898534624078900">"উদাহরণস্বরূপ, লগ-ইন পৃষ্ঠাটি প্রদর্শিত প্রতিষ্ঠানের অন্তর্গত নাও হতে পারে৷"</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"যাই হোক না কেন ব্রাউজারের মাধ্যমে অবিরত রাখুন"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-bs/strings.xml b/packages/CaptivePortalLogin/res/values-bs/strings.xml
index 0b36cd0..10be0e5 100644
--- a/packages/CaptivePortalLogin/res/values-bs/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-bs/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Koristi ovu mrežu kakva jeste"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ne koristi ovu mrežu"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Prijava na mrežu"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Prijava na %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Mreža kojoj pokušavate pristupiti ima sigurnosnih problema."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Naprimjer, stranica za prijavu možda ne pripada prikazanoj organizaciji."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Ipak nastavi preko preglednika"</string>
diff --git a/packages/CaptivePortalLogin/res/values-ca/strings.xml b/packages/CaptivePortalLogin/res/values-ca/strings.xml
index 9d8f6cc..fe189ed 100644
--- a/packages/CaptivePortalLogin/res/values-ca/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ca/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Fes servir aquesta xarxa tal com està."</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"No facis servir aquesta xarxa."</string>
     <string name="action_bar_label" msgid="917235635415966620">"Inicia la sessió a la xarxa"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Inicia la sessió a %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"La xarxa a què et vols connectar té problemes de seguretat."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Per exemple, la pàgina d\'inici de sessió podria no pertànyer a l\'organització que es mostra."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continua igualment mitjançant el navegador"</string>
diff --git a/packages/CaptivePortalLogin/res/values-cs/strings.xml b/packages/CaptivePortalLogin/res/values-cs/strings.xml
index aee71d9..09dcc5f 100644
--- a/packages/CaptivePortalLogin/res/values-cs/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-cs/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Použít tuto síť tak, jak je"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Tuto síť nepoužívat"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Přihlásit se k síti"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Přihlaste se k síti %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Síť, ke které se pokoušíte připojit, má bezpečnostní problémy."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Například přihlašovací stránka nemusí patřit do zobrazované organizace."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Přesto pokračovat prostřednictvím prohlížeče"</string>
diff --git a/packages/CaptivePortalLogin/res/values-da/strings.xml b/packages/CaptivePortalLogin/res/values-da/strings.xml
index 712d9a1..dc0dd17 100644
--- a/packages/CaptivePortalLogin/res/values-da/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-da/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Brug dette netværk, som det er"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Brug ikke dette netværk"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Log ind på netværk"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Log ind på %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Der er sikkerhedsproblemer på det netværk, du forsøger at logge ind på."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Det er f.eks. ikke sikkert, at loginsiden tilhører den anførte organisation."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Fortsæt alligevel via browseren"</string>
diff --git a/packages/CaptivePortalLogin/res/values-de/strings.xml b/packages/CaptivePortalLogin/res/values-de/strings.xml
index 52c9dc8..e64fb76 100644
--- a/packages/CaptivePortalLogin/res/values-de/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-de/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Dieses Netzwerk im Istzustand verwenden"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Dieses Netzwerk nicht verwenden"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Im Netzwerk anmelden"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"In %1$s anmelden"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Im Netzwerk, zu dem du eine Verbindung herstellen möchtest, liegen Sicherheitsprobleme vor."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Beispiel: Die Log-in-Seite gehört möglicherweise nicht zur angezeigten Organisation."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Trotzdem in einem Browser fortfahren"</string>
diff --git a/packages/CaptivePortalLogin/res/values-el/strings.xml b/packages/CaptivePortalLogin/res/values-el/strings.xml
index 3e8ea44..cb61710 100644
--- a/packages/CaptivePortalLogin/res/values-el/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-el/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Χρήση αυτού του δικτύου ως έχει"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Να μη χρησιμοποιείται αυτό το δίκτυο"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Σύνδεση στο δίκτυο"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Συνδεθείτε στο %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Παρουσιάζονται προβλήματα ασφάλειας στο δίκτυο στο οποίο προσπαθείτε να συνδεθείτε."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Για παράδειγμα, η σελίδα σύνδεσης ενδέχεται να μην ανήκει στον οργανισμό που εμφανίζεται."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Συνέχεια ούτως ή άλλως μέσω του προγράμματος περιήγησης"</string>
diff --git a/packages/CaptivePortalLogin/res/values-en-rAU/strings.xml b/packages/CaptivePortalLogin/res/values-en-rAU/strings.xml
index 7d599e7..2e8d1f0 100644
--- a/packages/CaptivePortalLogin/res/values-en-rAU/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-en-rAU/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Use this network as is"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Do not use this network"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Sign in to network"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Sign in to %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"The network that you’re trying to join has security issues."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"For example, the login page might not belong to the organisation shown."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continue anyway via browser"</string>
diff --git a/packages/CaptivePortalLogin/res/values-en-rCA/strings.xml b/packages/CaptivePortalLogin/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..2e8d1f0
--- /dev/null
+++ b/packages/CaptivePortalLogin/res/values-en-rCA/strings.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
+    <string name="action_use_network" msgid="6076184727448466030">"Use this network as is"</string>
+    <string name="action_do_not_use_network" msgid="4577366536956516683">"Do not use this network"</string>
+    <string name="action_bar_label" msgid="917235635415966620">"Sign in to network"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Sign in to %1$s"</string>
+    <string name="ssl_error_warning" msgid="6653188881418638872">"The network that you’re trying to join has security issues."</string>
+    <string name="ssl_error_example" msgid="647898534624078900">"For example, the login page might not belong to the organisation shown."</string>
+    <string name="ssl_error_continue" msgid="6492718244923937110">"Continue anyway via browser"</string>
+</resources>
diff --git a/packages/CaptivePortalLogin/res/values-en-rGB/strings.xml b/packages/CaptivePortalLogin/res/values-en-rGB/strings.xml
index 7d599e7..2e8d1f0 100644
--- a/packages/CaptivePortalLogin/res/values-en-rGB/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-en-rGB/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Use this network as is"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Do not use this network"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Sign in to network"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Sign in to %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"The network that you’re trying to join has security issues."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"For example, the login page might not belong to the organisation shown."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continue anyway via browser"</string>
diff --git a/packages/CaptivePortalLogin/res/values-en-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-en-rIN/strings.xml
index 7d599e7..2e8d1f0 100644
--- a/packages/CaptivePortalLogin/res/values-en-rIN/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-en-rIN/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Use this network as is"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Do not use this network"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Sign in to network"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Sign in to %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"The network that you’re trying to join has security issues."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"For example, the login page might not belong to the organisation shown."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continue anyway via browser"</string>
diff --git a/packages/CaptivePortalLogin/res/values-en-rXC/strings.xml b/packages/CaptivePortalLogin/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..9a2051f
--- /dev/null
+++ b/packages/CaptivePortalLogin/res/values-en-rXC/strings.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="5934709770924185752">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‎‎‎CaptivePortalLogin‎‏‎‎‏‎"</string>
+    <string name="action_use_network" msgid="6076184727448466030">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎Use this network as is‎‏‎‎‏‎"</string>
+    <string name="action_do_not_use_network" msgid="4577366536956516683">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‎Do not use this network‎‏‎‎‏‎"</string>
+    <string name="action_bar_label" msgid="917235635415966620">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎Sign in to network‎‏‎‎‏‎"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‎Sign in to %1$s‎‏‎‎‏‎"</string>
+    <string name="ssl_error_warning" msgid="6653188881418638872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‎The network you’re trying to join has security issues.‎‏‎‎‏‎"</string>
+    <string name="ssl_error_example" msgid="647898534624078900">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‎‎For example, the login page may not belong to the organization shown.‎‏‎‎‏‎"</string>
+    <string name="ssl_error_continue" msgid="6492718244923937110">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎Continue anyway via browser‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/CaptivePortalLogin/res/values-es-rUS/strings.xml b/packages/CaptivePortalLogin/res/values-es-rUS/strings.xml
index 55e06ab..5d7ba91 100644
--- a/packages/CaptivePortalLogin/res/values-es-rUS/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-es-rUS/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Usar esta red como está"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"No usar esta red"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Acceder a la red"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Acceder a %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"La red a la que intentas conectarte tiene problemas de seguridad."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Por ejemplo, es posible que la página de acceso no pertenezca a la organización que aparece."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continuar de todos modos desde el navegador"</string>
diff --git a/packages/CaptivePortalLogin/res/values-es/strings.xml b/packages/CaptivePortalLogin/res/values-es/strings.xml
index c7e2d0b..da2eae9 100644
--- a/packages/CaptivePortalLogin/res/values-es/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-es/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Utilizar esta red tal cual"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"No utilizar esta red"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Iniciar sesión en la red"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Inicia sesión en %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"La red a la que intentas unirte tiene problemas de seguridad."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Por ejemplo, es posible que la página de inicio de sesión no pertenezca a la organización mostrada."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continuar de todos modos a través del navegador"</string>
diff --git a/packages/CaptivePortalLogin/res/values-et/strings.xml b/packages/CaptivePortalLogin/res/values-et/strings.xml
index 768a5ec..41fcb9a 100644
--- a/packages/CaptivePortalLogin/res/values-et/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-et/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Kasuta seda võrku olemasoleval kujul"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ära kasuta seda võrku"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Logi võrku sisse"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Logige sisse: %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Võrgul, millega üritate ühenduse luua, on turvaprobleeme."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Näiteks ei pruugi sisselogimisleht kuuluda kuvatavale organisatsioonile."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Jätka siiski brauseris"</string>
diff --git a/packages/CaptivePortalLogin/res/values-eu/strings.xml b/packages/CaptivePortalLogin/res/values-eu/strings.xml
index a46768f..8925aac 100644
--- a/packages/CaptivePortalLogin/res/values-eu/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-eu/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Erabili sare hau bere horretan"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ez erabili sare hau"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Hasi saioa sarean"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Hasi saioa %1$s sarean"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Erabili nahi duzun sareak segurtasun-arazoak ditu."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Adibidez, baliteke saioa hasteko orria adierazitako erakundearena ez izatea."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Jarraitu arakatzailearen bidez, halere"</string>
diff --git a/packages/CaptivePortalLogin/res/values-fa/strings.xml b/packages/CaptivePortalLogin/res/values-fa/strings.xml
index 9408e9b..2e4cc51 100644
--- a/packages/CaptivePortalLogin/res/values-fa/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-fa/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"از این شبکه همانطور که هست استفاده شود"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"از این شبکه استفاده نشود"</string>
     <string name="action_bar_label" msgid="917235635415966620">"ورود به سیستم شبکه"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"‏ورود به سیستم %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"شبکه‌ای که می‌خواهید به آن بپیوندید مشکلات امنیتی دارد."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"به عنوان مثال، صفحه ورود به سیستم ممکن است متعلق به سازمان نشان داده شده نباشد."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"در هر صورت از طریق مرورگر ادامه یابد"</string>
diff --git a/packages/CaptivePortalLogin/res/values-fi/strings.xml b/packages/CaptivePortalLogin/res/values-fi/strings.xml
index 4e6e526..1976f7d 100644
--- a/packages/CaptivePortalLogin/res/values-fi/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-fi/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Käytä tätä verkkoa sellaisenaan"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Älä käytä tätä verkkoa"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Kirjaudu verkkoon"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Kirjaudu sisään kohteeseen %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Verkossa, johon yrität muodostaa yhteyttä, on turvallisuusongelmia."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Kirjautumissivu ei välttämättä kuulu näytetylle organisaatiolle."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Jatka silti selaimen kautta."</string>
diff --git a/packages/CaptivePortalLogin/res/values-fr-rCA/strings.xml b/packages/CaptivePortalLogin/res/values-fr-rCA/strings.xml
index 7cbfd0a..a7525a5 100644
--- a/packages/CaptivePortalLogin/res/values-fr-rCA/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-fr-rCA/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Utiliser ce réseau tel quel"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ne pas utiliser ce réseau"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Connectez-vous au réseau"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Connexion à %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Le réseau que vous essayez de rejoindre présente des problèmes de sécurité."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Par exemple, la page de connexion pourrait ne pas appartenir à l\'organisation représentée."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continuer quand même dans un navigateur"</string>
diff --git a/packages/CaptivePortalLogin/res/values-fr/strings.xml b/packages/CaptivePortalLogin/res/values-fr/strings.xml
index d90f530..8f98bb5 100644
--- a/packages/CaptivePortalLogin/res/values-fr/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-fr/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Utiliser ce réseau tel quel"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ne pas utiliser ce réseau"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Se connecter au réseau"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Se connecter à %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Le réseau que vous essayez de rejoindre présente des problèmes de sécurité."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Par exemple, la page de connexion peut ne pas appartenir à l\'organisation représentée."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continuer quand même dans le navigateur"</string>
diff --git a/packages/CaptivePortalLogin/res/values-gl/strings.xml b/packages/CaptivePortalLogin/res/values-gl/strings.xml
index 10f1f9d..6578285 100644
--- a/packages/CaptivePortalLogin/res/values-gl/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-gl/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Utilizar esta rede tal como está"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Non utilizar esta rede"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Inicia sesión na rede"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Iniciar sesión en %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"A rede á que tentas unirte ten problemas de seguranza."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Por exemplo, é posible que a páxina de inicio de sesión non pertenza á organización que se mostra."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continuar igualmente co navegador"</string>
diff --git a/packages/CaptivePortalLogin/res/values-gu/strings.xml b/packages/CaptivePortalLogin/res/values-gu/strings.xml
index 8214865..c15eca4 100644
--- a/packages/CaptivePortalLogin/res/values-gu/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-gu/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"આ નેટવર્કનો જેમનો તેમ ઉપયોગ કરો"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"આ નેટવર્કનો ઉપયોગ કરશો નહીં"</string>
     <string name="action_bar_label" msgid="917235635415966620">"નેટવર્ક પર સાઇન ઇન કરો"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$sમાં સઇન ઇન કરો"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"તમે જોડાવાનો પ્રયાસ કરી રહ્યાં છો તે નેટવર્કમાં સુરક્ષા સમસ્યાઓ છે."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"ઉદાહરણ તરીકે, લોગિન પૃષ્ઠ દર્શાવેલ સંસ્થાનું હોઈ શકતું નથી."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"બ્રાઉઝર મારફતે કોઈપણ રીતે ચાલુ રાખો"</string>
diff --git a/packages/CaptivePortalLogin/res/values-hi/strings.xml b/packages/CaptivePortalLogin/res/values-hi/strings.xml
index 05fb4f4..1bacc46 100644
--- a/packages/CaptivePortalLogin/res/values-hi/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-hi/strings.xml
@@ -4,7 +4,8 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"इस नेटवर्क का उपयोग जैसा है वैसा ही करें"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"इस नेटवर्क का उपयोग न करें"</string>
-    <string name="action_bar_label" msgid="917235635415966620">"नेटवर्क में प्रवेश करें"</string>
+    <string name="action_bar_label" msgid="917235635415966620">"नेटवर्क में साइन इन करें"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s में साइन इन करें"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"आप जिस नेटवर्क में शामिल होने का प्रयास कर रहे हैं उसमें सुरक्षा समस्‍याएं हैं."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"उदाहरण के लिए, हो सकता है कि लॉगिन पृष्‍ठ दिखाए गए संगठन से संबद्ध ना हो."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"ब्राउज़र के द्वारा फिर जारी रखें"</string>
diff --git a/packages/CaptivePortalLogin/res/values-hr/strings.xml b/packages/CaptivePortalLogin/res/values-hr/strings.xml
index c252b37..e44cd3b 100644
--- a/packages/CaptivePortalLogin/res/values-hr/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-hr/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Upotrebljavaj ovu mrežu u zatečenom stanju"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ne upotrebljavaj ovu mrežu"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Prijava na mrežu"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Prijavite se na %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Mreža kojoj se pokušavate pridružiti ima sigurnosne poteškoće."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Na primjer, stranica za prijavu možda ne pripada prikazanoj organizaciji."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Ipak nastavi putem preglednika"</string>
diff --git a/packages/CaptivePortalLogin/res/values-hu/strings.xml b/packages/CaptivePortalLogin/res/values-hu/strings.xml
index 1f08c52..f15fb49 100644
--- a/packages/CaptivePortalLogin/res/values-hu/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-hu/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Hálózat használata jelen állapotában"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ne használja ezt a hálózatot"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Bejelentkezés a hálózatba"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Bejelentkezés a következőbe: %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Biztonsági problémák vannak azzal a hálózattal, amelyhez csatlakozni szeretne."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Például lehet, hogy a bejelentkezési oldal nem a megjelenített szervezethez tartozik."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Folytatás ennek ellenére böngészőn keresztül"</string>
diff --git a/packages/CaptivePortalLogin/res/values-hy/strings.xml b/packages/CaptivePortalLogin/res/values-hy/strings.xml
index cf79b8c..a0ee862 100644
--- a/packages/CaptivePortalLogin/res/values-hy/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-hy/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Օգտագործել այս ցանցն ինչպես կա"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Չօգտագործել այս ցանցը"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Մուտք գործել ցանց"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Մուտք գործել %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Ցանցը, որին փորձում եք միանալ, անվտանգության խնդիրներ ունի:"</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Օրինակ՝ մուտքի էջը կարող է ցուցադրված կազմակերպության էջը չլինել:"</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Շարունակել այնուամենայնիվ դիտարկիչի միջոցով"</string>
diff --git a/packages/CaptivePortalLogin/res/values-in/strings.xml b/packages/CaptivePortalLogin/res/values-in/strings.xml
index ff957c4..f9f6481 100644
--- a/packages/CaptivePortalLogin/res/values-in/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-in/strings.xml
@@ -5,7 +5,8 @@
     <string name="action_use_network" msgid="6076184727448466030">"Gunakan jaringan ini sebagaimana adanya"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Jangan gunakan jaringan ini"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Masuk ke jaringan"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Login ke %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Jaringan yang ingin Anda masuki mengalami masalah keamanan."</string>
-    <string name="ssl_error_example" msgid="647898534624078900">"Misalnya, laman masuk mungkin bukan milik organisasi yang ditampilkan."</string>
+    <string name="ssl_error_example" msgid="647898534624078900">"Misalnya, halaman masuk mungkin bukan milik organisasi yang ditampilkan."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Tetap lanjutkan melalui browser"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-is/strings.xml b/packages/CaptivePortalLogin/res/values-is/strings.xml
index 8c886d2..8fde24b 100644
--- a/packages/CaptivePortalLogin/res/values-is/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-is/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Nota þetta net óbreytt"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ekki nota þetta net"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Skrá inn á net"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Skrá inn á %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Öryggisvandamál eru á netinu sem þú ert að reyna að tengjast."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Til dæmis getur verið að innskráningarsíðan tilheyri ekki fyrirtækinu sem birtist."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Halda samt áfram í vafra"</string>
diff --git a/packages/CaptivePortalLogin/res/values-it/strings.xml b/packages/CaptivePortalLogin/res/values-it/strings.xml
index 23ed415..a01a553 100644
--- a/packages/CaptivePortalLogin/res/values-it/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-it/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Utilizza questa rete così com\'è"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Non utilizzare questa rete"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Accedi alla rete"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Accedi a %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"La rete a cui stai tentando di accedere presenta problemi di sicurezza."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Ad esempio, la pagina di accesso potrebbe non appartenere all\'organizzazione indicata."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continua comunque dal browser"</string>
diff --git a/packages/CaptivePortalLogin/res/values-iw/strings.xml b/packages/CaptivePortalLogin/res/values-iw/strings.xml
index fe7333f..8e7915d 100644
--- a/packages/CaptivePortalLogin/res/values-iw/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-iw/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"השתמש ברשת זו כפי שהיא"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"אל תשתמש ברשת זו"</string>
     <string name="action_bar_label" msgid="917235635415966620">"היכנס לרשת"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"‏כניסה אל %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"יש בעיות אבטחה ברשת שאליה אתה מנסה להתחבר."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"לדוגמה, ייתכן שדף ההתחברות אינו שייך לארגון המוצג."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"המשך בכל זאת באמצעות דפדפן"</string>
diff --git a/packages/CaptivePortalLogin/res/values-ja/strings.xml b/packages/CaptivePortalLogin/res/values-ja/strings.xml
index b369b65..e275b95 100644
--- a/packages/CaptivePortalLogin/res/values-ja/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ja/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"このネットワークをそのまま使用する"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"このネットワークを使用しない"</string>
     <string name="action_bar_label" msgid="917235635415966620">"ネットワークにログイン"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s にログイン"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"接続しようとしているネットワークにセキュリティの問題があります。"</string>
     <string name="ssl_error_example" msgid="647898534624078900">"たとえば、ログインページが表示されている組織に属していない可能性があります。"</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"ブラウザから続行"</string>
diff --git a/packages/CaptivePortalLogin/res/values-ka/strings.xml b/packages/CaptivePortalLogin/res/values-ka/strings.xml
index 2913178..1ccff12 100644
--- a/packages/CaptivePortalLogin/res/values-ka/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ka/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"ამ ქსელის გამოყენება, როგორც არის"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"ეს ქსელი არ გამოიყენო"</string>
     <string name="action_bar_label" msgid="917235635415966620">"ქსელში შესვლა"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s-ში შესვლა"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"ქსელს, რომელზედაც მიერთებას ცდილობთ, უსაფრთხოების პრობლემები აქვს."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"მაგალითად, სისტემაში შესვლის გვერდი შეიძლება არ ეკუთვნოდეს ნაჩვენებ ორგანიზაციას."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"ბრაუზერში გაგრძელება"</string>
diff --git a/packages/CaptivePortalLogin/res/values-kk/strings.xml b/packages/CaptivePortalLogin/res/values-kk/strings.xml
index d1fb849..a904dea 100644
--- a/packages/CaptivePortalLogin/res/values-kk/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-kk/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Осы желіні бар күйінде пайдалану"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Осы желіні пайдаланбау"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Желіге кіру"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s жүйесіне кіру"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Қосылайын деп жатқан желіңіз қауіпсіз болуы мүмкін."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Мысалы, кіру беті көрсетілген ұйымға тиесілі болмауы мүмкін."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Бәрібір браузер арқылы жалғастыру"</string>
diff --git a/packages/CaptivePortalLogin/res/values-km/strings.xml b/packages/CaptivePortalLogin/res/values-km/strings.xml
index 32098ae..a0497f8 100644
--- a/packages/CaptivePortalLogin/res/values-km/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-km/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"ប្រើ​បណ្ដាញ​នេះ​ជា"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"កុំ​ប្រើ​បណ្ដាញ​នេះ"</string>
     <string name="action_bar_label" msgid="917235635415966620">"ចូលទៅបណ្ដាញ"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"ចូលទៅ %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"បណ្តាញដែលអ្នកកំពុងព្យាយាមចូលមានបញ្ហាសុវត្ថិភាព។"</string>
     <string name="ssl_error_example" msgid="647898534624078900">"ឧបករណ៍៖ ទំព័រចូលនេះអាចនឹងមិនមែនជាកម្មសិទ្ធិរបស់ស្ថាប័នដែលបានបង្ហាញនេះទេ។"</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"យ៉ាងណាក៏ដោយនៅតែបន្តតាមរយៈកម្មវិធីរុករក"</string>
diff --git a/packages/CaptivePortalLogin/res/values-kn/strings.xml b/packages/CaptivePortalLogin/res/values-kn/strings.xml
index b3f937a..3084504 100644
--- a/packages/CaptivePortalLogin/res/values-kn/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-kn/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"ಈ ನೆಟ್‌ವರ್ಕ್ ಅನ್ನು ಹೀಗೆ ಬಳಸಿ"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"ಈ ನೆಟ್‌ವರ್ಕ್ ಬಳಸಬೇಡಿ"</string>
     <string name="action_bar_label" msgid="917235635415966620">"ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"ನೀವು ಸೇರಬೇಕೆಂದಿರುವ ನೆಟ್‌ವರ್ಕ್ ಭದ್ರತೆ ಸಮಸ್ಯೆಗಳನ್ನು ಹೊಂದಿದೆ."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"ಉದಾಹರಣೆಗೆ, ಲಾಗಿನ್ ಪುಟವು ತೋರಿಸಲಾಗಿರುವ ಸಂಸ್ಥೆಗೆ ಸಂಬಂಧಿಸಿರುವುದಿಲ್ಲ."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"ಹೇಗಾದರೂ ಬ್ರೌಸರ್ ಮೂಲಕ ಮುಂದುವರಿಸಿ"</string>
diff --git a/packages/CaptivePortalLogin/res/values-ko/strings.xml b/packages/CaptivePortalLogin/res/values-ko/strings.xml
index 9756042..75f2b48 100644
--- a/packages/CaptivePortalLogin/res/values-ko/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ko/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"현재 상태로 이 네트워크 사용"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"이 네트워크 사용 안함"</string>
     <string name="action_bar_label" msgid="917235635415966620">"네트워크에 로그인"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s에 로그인"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"가입하려는 네트워크에 보안 문제가 있습니다."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"예를 들어 로그인 페이지가 표시된 조직에 속하지 않을 수 있습니다."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"브라우저를 통해 계속하기"</string>
diff --git a/packages/CaptivePortalLogin/res/values-ky/strings.xml b/packages/CaptivePortalLogin/res/values-ky/strings.xml
index ab1c7ff..af81ce3 100644
--- a/packages/CaptivePortalLogin/res/values-ky/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ky/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Бул тармак кандай болсо, ошондой колдонулсун"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Бул тармак колдонулбасын"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Тармакка кирүү"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s каттоо эсебине кириңиз"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Кошулайын деген тармагыңызда коопсуздук көйгөйлөрү бар."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Мисалы, каттоо эсебине кирүү баракчасы көрсөтүлгөн уюмга таандык эмес болушу мүмкүн."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Баары бир серепчи аркылуу улантуу"</string>
diff --git a/packages/CaptivePortalLogin/res/values-lo/strings.xml b/packages/CaptivePortalLogin/res/values-lo/strings.xml
index c50aaa9..ee2b263 100644
--- a/packages/CaptivePortalLogin/res/values-lo/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-lo/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"​ໃຊ້​ເຄືອ​ຂ່າຍ​ນີ້​ຕາມ​ທີ່​ມັນ​ເປັນ"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"ບໍ່​ໃຊ້​ເຄືອ​ຂ່າຍ​ນີ້"</string>
     <string name="action_bar_label" msgid="917235635415966620">"ລົງຊື່ເຂົ້າເຄືອຂ່າຍ"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"ເຂົ້າສູ່ລະບົບ %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"ເຄືອ​ຂ່າຍ​ທີ່​ທ່ານ​ກຳ​ລັງ​ເຂົ້າ​ຮ່ວມ​ມີ​ບັນ​ຫາ​ຄວາມ​ປອດ​ໄພ."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"ຕົວ​ຢ່າງ, ໜ້າ​ລົງ​ຊື່​ເຂົ້າ​ໃຊ້​ອາດ​ຈະ​ບໍ່​ເປັນ​ຂອງ​ອົງ​ການ​ທີ່​ສະ​ແດງ​ຂຶ້ນ."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"ແນວ​ໃດ​ກໍ່​ສືບ​ຕໍ່​ຜ່ານບ​ຣາວ​ເຊີ"</string>
diff --git a/packages/CaptivePortalLogin/res/values-lt/strings.xml b/packages/CaptivePortalLogin/res/values-lt/strings.xml
index 6cdd5ba6..17da83f 100644
--- a/packages/CaptivePortalLogin/res/values-lt/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-lt/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Naudoti šį tinklą tokį, koks yra"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Nenaudoti šio tinklo"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Prisijungti prie tinklo"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Prisijungimas prie „%1$s“"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Kilo tinklo, prie kurio bandote prisijungti, problemų."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Pavyzdžiui, prisijungimo puslapis gali nepriklausyti rodomai organizacijai."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Vis tiek tęsti naudojant naršyklę"</string>
diff --git a/packages/CaptivePortalLogin/res/values-lv/strings.xml b/packages/CaptivePortalLogin/res/values-lv/strings.xml
index b33293f..95b8558 100644
--- a/packages/CaptivePortalLogin/res/values-lv/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-lv/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Izmantot tīklu ar pašreizējiem iestatījumiem"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Neizmantot šo tīklu"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Pierakstīties tīklā"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Pierakstieties produktā %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Tīklam, kuram mēģināt pievienoties, ir drošības problēmas."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Piemēram, pieteikšanās lapa, iespējams, nepieder norādītajai organizācijai."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Tik un tā turpināt, izmantojot pārlūkprogrammu"</string>
diff --git a/packages/CaptivePortalLogin/res/values-mk/strings.xml b/packages/CaptivePortalLogin/res/values-mk/strings.xml
index 63428e7..2ae32c8 100644
--- a/packages/CaptivePortalLogin/res/values-mk/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-mk/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Користи ја мрежата во оваа состојба"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Не ја користи мрежата"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Најавете се на мрежа"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Најавете се на %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Мрежата на која се обидувате да се придружите има проблеми со безбедноста."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"На пример, страницата за најавување може да не припаѓа на организацијата што е прикажана."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Сепак продолжи преку прелистувач"</string>
diff --git a/packages/CaptivePortalLogin/res/values-ml/strings.xml b/packages/CaptivePortalLogin/res/values-ml/strings.xml
index 911b99882..79551f8 100644
--- a/packages/CaptivePortalLogin/res/values-ml/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ml/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"ഈ നെറ്റ്‌വർക്ക് മാറ്റമൊന്നും വരുത്താതെ ഉപയോഗിക്കുക"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"ഈ നെറ്റ്‌വർക്ക് ഉപയോഗിക്കരുത്"</string>
     <string name="action_bar_label" msgid="917235635415966620">"നെറ്റ്‌വർക്കിൽ സൈൻ ഇൻ ചെയ്യുക"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s എന്നതിലേക്ക് സൈൻ ഇൻ ചെയ്യുക"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"നിങ്ങൾ ചേരാൻ ശ്രമിക്കുന്ന നെറ്റ്‌വർക്കിൽ സുരക്ഷാ പ്രശ്‌നങ്ങളുണ്ടായിരിക്കാം."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"ഉദാഹരണത്തിന്, കാണിച്ചിരിക്കുന്ന ഓർഗനൈസേഷന്റേതായിരിക്കില്ല ലോഗിൻ പേജ്."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"എന്തായാലും ബ്രൗസർ വഴി തുടരുക"</string>
diff --git a/packages/CaptivePortalLogin/res/values-mn/strings.xml b/packages/CaptivePortalLogin/res/values-mn/strings.xml
index 2489e9c..67670915 100644
--- a/packages/CaptivePortalLogin/res/values-mn/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-mn/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Энэ сүлжээг ашиглана уу"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Энэ сүлжээг бүү ашиглана уу"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Сүлжээнд нэвтэрнэ үү"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s-д нэвтрэх"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Таны нэгдэх гэж буй сүлжээ аюулгүй байдлын асуудалтай байна."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Жишээлбэл нэвтрэх хуудас нь харагдах байгууллагынх биш байж болзошгүй."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Ямартаа ч хөтчөөр үргэлжлүүлэх"</string>
diff --git a/packages/CaptivePortalLogin/res/values-mr/strings.xml b/packages/CaptivePortalLogin/res/values-mr/strings.xml
index 9521c8d..fac0a08 100644
--- a/packages/CaptivePortalLogin/res/values-mr/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-mr/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"हे नेटवर्क जसेच्या तसे वापरा"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"हे नेटवर्क वापरू नका"</string>
     <string name="action_bar_label" msgid="917235635415966620">"नेटवर्क मध्‍ये साइन इन करा"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$sमध्‍ये साइन इन करा"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"ज्या नेटवर्कमध्‍ये आपण सामील होण्याचा प्रयत्न करीत आहात त्यात सुरक्षितता समस्या आहेत."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"उदाहरणार्थ, लॉगिन पृष्‍ठ कदाचित दर्शविलेल्या संस्थेच्या मालकीचे नसावे."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"ब्राउझरद्वारे तरीही सुरु ठेवा"</string>
diff --git a/packages/CaptivePortalLogin/res/values-ms/strings.xml b/packages/CaptivePortalLogin/res/values-ms/strings.xml
index 829c55a..933721a 100644
--- a/packages/CaptivePortalLogin/res/values-ms/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ms/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Gunakan rangkaian ini"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Jangan gunakan rangkaian ini"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Log masuk ke rangkaian"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Log masuk ke %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Rangkaian yang anda cuba sertai mempunyai isu keselamatan."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Contohnya, halaman log masuk mungkin bukan milik organisasi yang ditunjukkan."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Teruskan juga melalui penyemak imbas"</string>
diff --git a/packages/CaptivePortalLogin/res/values-my/strings.xml b/packages/CaptivePortalLogin/res/values-my/strings.xml
index e25570d..902834b 100644
--- a/packages/CaptivePortalLogin/res/values-my/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-my/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"ဒီကွန်ရက်ကို လက်ရှိအတိုင်း သုံးရန်"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"ဒီကွန်ရက်ကို မသုံးပါနှင့်"</string>
     <string name="action_bar_label" msgid="917235635415966620">"ကွန်ယက်သို့ လက်မှတ်ထိုးဝင်ရန်"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s သို့ လက်မှတ်ထိုးဝင်ပါ"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"သင်ချိတ်ဆက်ရန် ကြိုးစားနေသည့် ကွန်ရက်သည် လုံခြုံရေးပြဿနာ ရှိနေသည်။"</string>
     <string name="ssl_error_example" msgid="647898534624078900">"ဥပမာ၊ ဝင်ရောက်ရန် စာမျက်နှာသည် ပြသထားသည့် အဖွဲ့အစည်းနှင့် သက်ဆိုင်မှု မရှိနိုင်ပါ။"</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"ဘရောက်ဇာမှတစ်ဆင့် ဆက်လုပ်ရန်"</string>
diff --git a/packages/CaptivePortalLogin/res/values-nb/strings.xml b/packages/CaptivePortalLogin/res/values-nb/strings.xml
index b9d3349..0dd5b6c 100644
--- a/packages/CaptivePortalLogin/res/values-nb/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-nb/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Bruk dette nettverket som det er"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ikke bruk dette nettverket"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Logg på nettverk"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Logg på %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Nettverket du prøver å logge på, har sikkerhetsproblemer."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Det er for eksempel mulig at påloggingssiden kanskje ikke tilhører organisasjonen som vises."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Fortsett likevel via nettleseren"</string>
diff --git a/packages/CaptivePortalLogin/res/values-ne/strings.xml b/packages/CaptivePortalLogin/res/values-ne/strings.xml
index 02c2cf3..87a30c0 100644
--- a/packages/CaptivePortalLogin/res/values-ne/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ne/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"यो सञ्जाल जस्तो छ प्रयोग गर्नुहोस्"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"यो सञ्जाल प्रयोग नगर्नुहोस्"</string>
     <string name="action_bar_label" msgid="917235635415966620">"सञ्जालमा साइन इन गर्नुहोस्"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s मा साइन इन गर्नुहोस्"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"तपाईँले सामेल हुन प्रयास गरिरहनु भएको नेटवर्कमा सुरक्षा मुद्दाहरू छन्।"</string>
     <string name="ssl_error_example" msgid="647898534624078900">"उदाहरणका लागि, लग इन पृष्ठ देखाइएको संस्थाको नहुन सक्छ।"</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"जे भए पनि ब्राउजर मार्फत जारी राख्नुहोस्"</string>
diff --git a/packages/CaptivePortalLogin/res/values-nl/strings.xml b/packages/CaptivePortalLogin/res/values-nl/strings.xml
index af1de0a..1c59601 100644
--- a/packages/CaptivePortalLogin/res/values-nl/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-nl/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Dit netwerk in de huidige staat gebruiken"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Dit netwerk niet gebruiken"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Inloggen bij netwerk"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Inloggen bij %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Het netwerk waarmee u verbinding probeert te maken, heeft beveiligingsproblemen."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Zo hoort de weergegeven inlogpagina misschien niet bij de weergegeven organisatie."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Toch doorgaan via browser"</string>
diff --git a/packages/CaptivePortalLogin/res/values-pa/strings.xml b/packages/CaptivePortalLogin/res/values-pa/strings.xml
index 4c188fa..03e252f 100644
--- a/packages/CaptivePortalLogin/res/values-pa/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-pa/strings.xml
@@ -4,8 +4,9 @@
     <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
     <string name="action_use_network" msgid="6076184727448466030">"ਇਸ ਨੈੱਟਵਰਕ ਨੂੰ ਉਵੇਂ ਵਰਤੋ ਜਿਵੇਂ ਇਹ ਹੈ"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"ਇਹ ਨੈੱਟਵਰਕ ਨਾ ਵਰਤੋ"</string>
-    <string name="action_bar_label" msgid="917235635415966620">"ਨੈੱਟਵਰਕ ਤੇ ਸਾਈਨ ਇਨ ਕਰੋ"</string>
+    <string name="action_bar_label" msgid="917235635415966620">"ਨੈੱਟਵਰਕ \'ਤੇ ਸਾਈਨ-ਇਨ ਕਰੋ"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s \'ਤੇ ਸਾਈਨ-ਇਨ ਕਰੋ"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"ਤੁਹਾਡੇ ਦੁਆਰਾ ਸ਼ਾਮਿਲ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੇ ਜਾ ਰਹੇ ਨੈੱਟਵਰਕ ਵਿੱਚ ਸੁਰੱਖਿਆ ਸੰਬੰਧੀ ਸਮੱਸਿਆਵਾਂ ਹਨ।"</string>
-    <string name="ssl_error_example" msgid="647898534624078900">"ਉਦਾਹਰਣ ਵੱਜੋਂ, ਲੌਗਇਨ ਪੰਨਾ ਦਿਖਾਈ ਗਈ ਸੰਸਥਾ ਨਾਲ ਸੰਬੰਧਿਤ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ।"</string>
-    <string name="ssl_error_continue" msgid="6492718244923937110">"ਬ੍ਰਾਉਜ਼ਰ ਰਾਹੀਂ ਫਿਰ ਵੀ ਜਾਰੀ ਰੱਖੋ"</string>
+    <string name="ssl_error_example" msgid="647898534624078900">"ਉਦਾਹਰਣ ਵੱਜੋਂ, ਲੌਗ-ਇਨ ਪੰਨਾ ਦਿਖਾਈ ਗਈ ਸੰਸਥਾ ਨਾਲ ਸੰਬੰਧਿਤ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ।"</string>
+    <string name="ssl_error_continue" msgid="6492718244923937110">"ਬ੍ਰਾਊਜ਼ਰ ਰਾਹੀਂ ਫਿਰ ਵੀ ਜਾਰੀ ਰੱਖੋ"</string>
 </resources>
diff --git a/packages/CaptivePortalLogin/res/values-pl/strings.xml b/packages/CaptivePortalLogin/res/values-pl/strings.xml
index ee39fe5..17f20df 100644
--- a/packages/CaptivePortalLogin/res/values-pl/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-pl/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Używaj tej sieci tak jak jest"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Nie używaj tej sieci"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Zaloguj się do sieci"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Zaloguj się w aplikacji %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"W sieci, z którą próbujesz się połączyć, występują problemy z zabezpieczeniami."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Na przykład strona logowania może nie należeć do wyświetlanej organizacji."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Kontynuuj mimo to w przeglądarce"</string>
diff --git a/packages/CaptivePortalLogin/res/values-pt-rBR/strings.xml b/packages/CaptivePortalLogin/res/values-pt-rBR/strings.xml
index e1d420f..3d1064c 100644
--- a/packages/CaptivePortalLogin/res/values-pt-rBR/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-pt-rBR/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Usar esta rede como está"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Não usar esta rede"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Fazer login na rede"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Fazer login em %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"A rede à qual você está tentando se conectar tem problemas de segurança."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Por exemplo, a página de login pode não pertencer à organização mostrada."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continuar mesmo assim pelo navegador"</string>
diff --git a/packages/CaptivePortalLogin/res/values-pt-rPT/strings.xml b/packages/CaptivePortalLogin/res/values-pt-rPT/strings.xml
index 54e2a8b..94b9d60 100644
--- a/packages/CaptivePortalLogin/res/values-pt-rPT/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-pt-rPT/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Utilizar esta rede como está"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Não utilizar esta rede"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Início de sessão na rede"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Iniciar sessão em %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"A rede à qual está a tentar aceder tem problemas de segurança."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Por exemplo, a página de início de sessão pode não pertencer à entidade apresentada."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continuar mesmo assim através do navegador"</string>
diff --git a/packages/CaptivePortalLogin/res/values-pt/strings.xml b/packages/CaptivePortalLogin/res/values-pt/strings.xml
index e1d420f..3d1064c 100644
--- a/packages/CaptivePortalLogin/res/values-pt/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-pt/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Usar esta rede como está"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Não usar esta rede"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Fazer login na rede"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Fazer login em %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"A rede à qual você está tentando se conectar tem problemas de segurança."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Por exemplo, a página de login pode não pertencer à organização mostrada."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continuar mesmo assim pelo navegador"</string>
diff --git a/packages/CaptivePortalLogin/res/values-ro/strings.xml b/packages/CaptivePortalLogin/res/values-ro/strings.xml
index 3d69e64..cf1b6b5 100644
--- a/packages/CaptivePortalLogin/res/values-ro/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ro/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Utilizați această rețea în starea actuală"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Nu utilizați această rețea"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Conectați-vă la rețea"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Conectați-vă la %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Rețeaua la care încercați să vă conectați are probleme de securitate."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"De exemplu, este posibil ca pagina de conectare să nu aparțină organizației afișate."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Continuați oricum prin browser"</string>
diff --git a/packages/CaptivePortalLogin/res/values-ru/strings.xml b/packages/CaptivePortalLogin/res/values-ru/strings.xml
index c45a8c1..6966bcd 100644
--- a/packages/CaptivePortalLogin/res/values-ru/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ru/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Использовать эту сеть"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Не использовать эту сеть"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Регистрация в сети"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Войти: %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Сеть, к которой вы хотите подключиться, небезопасна."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Например, страница входа в аккаунт может быть фиктивной."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Игнорировать и открыть браузер"</string>
diff --git a/packages/CaptivePortalLogin/res/values-si/strings.xml b/packages/CaptivePortalLogin/res/values-si/strings.xml
index 61fd2b8..a307913 100644
--- a/packages/CaptivePortalLogin/res/values-si/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-si/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"මෙම ජාලය ලෙසම භාවිතා කරන්න"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"මෙම ජාලය භාවිතා කරන්න එපා"</string>
     <string name="action_bar_label" msgid="917235635415966620">"ජාලයට පුරනය වන්න"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s වෙත පුරන්න"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"ඔබ සම්බන්ධ වීමට උත්සහ කරන ජාලයේ ආරක්ෂක ගැටළු ඇත."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"උදාහරණයක් ලෙස, පුරනය වන පිටුව පෙන්වා ඇති සංවිධානයට අයිති නැති විය හැක."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"කෙසේ වුවත් බ්‍රවුසරය හරහා ඉදිරියට යන්න"</string>
diff --git a/packages/CaptivePortalLogin/res/values-sk/strings.xml b/packages/CaptivePortalLogin/res/values-sk/strings.xml
index 76af0ca..54763be 100644
--- a/packages/CaptivePortalLogin/res/values-sk/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-sk/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Použiť túto sieť tak, ako je"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Túto sieť nepoužívať"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Prihlásiť sa do siete"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Prihláste sa do služby %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Sieť, ku ktorej sa pokúšate pripojiť, má problémy so zabezpečením"</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Napríklad prihlasovacia stránka nemusí patriť uvedenej organizácii."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Pokračovať pomocou prehliadača"</string>
diff --git a/packages/CaptivePortalLogin/res/values-sl/strings.xml b/packages/CaptivePortalLogin/res/values-sl/strings.xml
index 158a4d3..7dd0b37 100644
--- a/packages/CaptivePortalLogin/res/values-sl/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-sl/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Uporabljajte to omrežje, »kakršno je«"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ne uporabljajte tega omrežja"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Prijavite se v omrežje"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Prijava v %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Omrežje, ki se mu poskušate pridružiti, ima varnostne težave."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Stran za prijavo na primer morda ne pripada prikazani organizaciji."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Vseeno nadaljuj v brskalniku"</string>
diff --git a/packages/CaptivePortalLogin/res/values-sq/strings.xml b/packages/CaptivePortalLogin/res/values-sq/strings.xml
index 674b809..b06da6d 100644
--- a/packages/CaptivePortalLogin/res/values-sq/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-sq/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Përdore këtë rrjet siç është"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Mos e përdor këtë rrjet"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Identifikohu në rrjet"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Identifikohu në %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Rrjeti në të cilin po përpiqesh të bashkohesh ka probleme sigurie."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"për shembull, faqja e identifikimit mund të mos i përkasë organizatës së shfaqur."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Vazhdo gjithsesi nëpërmjet shfletuesit"</string>
diff --git a/packages/CaptivePortalLogin/res/values-sr/strings.xml b/packages/CaptivePortalLogin/res/values-sr/strings.xml
index 05c1d50..f604289 100644
--- a/packages/CaptivePortalLogin/res/values-sr/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-sr/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Користи ову мрежу такву каква је"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Не користи ову мрежу"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Пријави ме на мрежу"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Пријавите се у: %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Мрежа којој покушавате да се придружите има безбедносних проблема."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"На пример, страница за пријављивање можда не припада приказаној организацији."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Ипак настави преко прегледача"</string>
diff --git a/packages/CaptivePortalLogin/res/values-sv/strings.xml b/packages/CaptivePortalLogin/res/values-sv/strings.xml
index 700713a..8cf7041 100644
--- a/packages/CaptivePortalLogin/res/values-sv/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-sv/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Använd det här nätverket som det är"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Använd inte det här nätverket"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Logga in på nätverket"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Logga in på %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Nätverket du försöker ansluta till har säkerhetsproblem."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Det kan t.ex. hända att inloggningssidan inte tillhör den organisation som visas."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Fortsätt ändå via webbläsaren"</string>
diff --git a/packages/CaptivePortalLogin/res/values-sw/strings.xml b/packages/CaptivePortalLogin/res/values-sw/strings.xml
index d791955..1c8b6e1 100644
--- a/packages/CaptivePortalLogin/res/values-sw/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-sw/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Tumia mtandao huu jinsi ulivyo"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Usitumie mtandao huu"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Ingia katika mtandao"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Ingia katika akaunti ya %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Mtandao unaojaribu kujiunga nao una matatizo ya usalama."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Kwa mfano, ukurasa wa kuingia katika akaunti unaweza usiwe unamilikiwa na shirika lililoonyeshwa."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Endelea hata hivyo kupitia kivinjari"</string>
diff --git a/packages/CaptivePortalLogin/res/values-ta/strings.xml b/packages/CaptivePortalLogin/res/values-ta/strings.xml
index 038f05a..6a60ed7 100644
--- a/packages/CaptivePortalLogin/res/values-ta/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ta/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"இந்த நெட்வொர்க்கைப் பயன்படுத்து"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"இந்த நெட்வொர்க்கைப் பயன்படுத்த வேண்டாம்"</string>
     <string name="action_bar_label" msgid="917235635415966620">"நெட்வொர்க்கில் உள்நுழையவும்"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s இல் உள்நுழைக"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"நீங்கள் சேர முயற்சிக்கும் நெட்வொர்க்கில் பாதுகாப்புச் சிக்கல்கள் உள்ளன."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"எடுத்துக்காட்டாக, உள்நுழைவுப் பக்கமானது காட்டப்படும் அமைப்பிற்குச் சொந்தமானதாக இல்லாமல் இருக்கலாம்."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"பரவாயில்லை, உலாவி வழியாகத் தொடரவும்"</string>
diff --git a/packages/CaptivePortalLogin/res/values-te/strings.xml b/packages/CaptivePortalLogin/res/values-te/strings.xml
index 5d85568..c209d34 100644
--- a/packages/CaptivePortalLogin/res/values-te/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-te/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"ఈ నెట్‌వర్క్‌ని యథావిధిగా ఉపయోగించు"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"ఈ నెట్‌వర్క్‌ని ఉపయోగించవద్దు"</string>
     <string name="action_bar_label" msgid="917235635415966620">"నెట్‌వర్క్‌కి సైన్ ఇన్ చేయండి"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$sకి సైన్ ఇన్ చేయండి"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"మీరు చేరడానికి ప్రయత్నిస్తున్న నెట్‌వర్క్ భద్రతా సమస్యలను కలిగి ఉంది."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"ఉదాహరణకు, లాగిన్ పేజీ చూపిన సంస్థకు చెందినది కాకపోవచ్చు."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"ఏదేమైనా బ్రౌజర్ ద్వారా కొనసాగించు"</string>
diff --git a/packages/CaptivePortalLogin/res/values-th/strings.xml b/packages/CaptivePortalLogin/res/values-th/strings.xml
index cc3ae87..9a3a626 100644
--- a/packages/CaptivePortalLogin/res/values-th/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-th/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"ใช้เครือข่ายนี้ตามที่เป็นอยู่"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"ไม่ใช้เครือข่ายนี้"</string>
     <string name="action_bar_label" msgid="917235635415966620">"ลงชื่อเข้าใช้เครือข่าย"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"ลงชื่อเข้าใช้ %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"เครือข่ายที่คุณพยายามเข้าร่วมมีปัญหาด้านความปลอดภัย"</string>
     <string name="ssl_error_example" msgid="647898534624078900">"ตัวอย่างเช่น หน้าเข้าสู่ระบบอาจไม่ใช่ขององค์กรที่แสดงไว้"</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"ดำเนินการต่อผ่านเบราว์เซอร์"</string>
diff --git a/packages/CaptivePortalLogin/res/values-tl/strings.xml b/packages/CaptivePortalLogin/res/values-tl/strings.xml
index bad5a1a..565ef8f 100644
--- a/packages/CaptivePortalLogin/res/values-tl/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-tl/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Gamitin ang network na ito nang walang pagbabago"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Huwag gamitin ang network na ito"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Mag-sign in sa network"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Mag-sign in sa %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"May mga isyu sa seguridad ang network kung saan mo sinusubukang sumali."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Halimbawa, maaaring hindi sa organisasyong ipinapakita ang page sa pag-log in."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Magpatuloy pa rin sa pamamagitan ng browser"</string>
diff --git a/packages/CaptivePortalLogin/res/values-tr/strings.xml b/packages/CaptivePortalLogin/res/values-tr/strings.xml
index 50ea806..73d2455 100644
--- a/packages/CaptivePortalLogin/res/values-tr/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-tr/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Bu ağı olduğu gibi kullan"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Bu ağı kullanma"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Ağda oturum açın"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s üzerinde oturum açın"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Katılmaya çalıştığınız ağda güvenlik sorunları var."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Örneğin, giriş sayfası, gösterilen kuruluşa ait olmayabilir."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Yine de tarayıcıyla devam et"</string>
diff --git a/packages/CaptivePortalLogin/res/values-uk/strings.xml b/packages/CaptivePortalLogin/res/values-uk/strings.xml
index 5ef5426..0e818d3 100644
--- a/packages/CaptivePortalLogin/res/values-uk/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-uk/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Використовувати цю мережу як є"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Не використовувати цю мережу"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Увійти в мережу"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Увійти в обліковий запис %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"У мережі, до якої ви намагаєтеся під’єднатись, є проблеми з безпекою."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Наприклад, сторінка входу може не належати вказаній організації."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Усе одно продовжити у веб-переглядачі"</string>
diff --git a/packages/CaptivePortalLogin/res/values-ur/strings.xml b/packages/CaptivePortalLogin/res/values-ur/strings.xml
index 7da543f..05d8fb9 100644
--- a/packages/CaptivePortalLogin/res/values-ur/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-ur/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"جوں کا توں اس نیٹ ورک کا استعمال کریں"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"اس نیٹ ورک کا استعمال نہ کریں"</string>
     <string name="action_bar_label" msgid="917235635415966620">"نیٹ ورک میں سائن ان کریں"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"‏%1$s میں سائن ان کریں"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"جس نیٹ ورک میں آپ شامل ہونے کی کوشش کر رہے ہیں اس میں سیکیورٹی کے مسائل ہیں۔"</string>
     <string name="ssl_error_example" msgid="647898534624078900">"مثال کے طور پر ہو سکتا ہے کہ لاگ ان صفحہ دکھائی گئی تنظیم سے تعلق نہ رکھتا ہو۔"</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"براؤزر کے ذریعے بہرحال جاری رکھیں"</string>
diff --git a/packages/CaptivePortalLogin/res/values-uz/strings.xml b/packages/CaptivePortalLogin/res/values-uz/strings.xml
index 0cbef0a..cac96ea 100644
--- a/packages/CaptivePortalLogin/res/values-uz/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-uz/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Ushbu tarmoqdan o‘z holicha foydalanilsin"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ushbu tarmoqdan foydalanilmasin"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Tarmoqqa kirish"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"%1$s hisobiga kirish"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Siz ulanmoqchi bo‘lgan tarmoqda xavfsizlik bilan bog‘liq muammolar mavjud."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Masalan, tizimga kirish sahifasi ko‘rsatilgan tashkilotga tegishli bo‘lmasligi mumkin."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"E’tiborsiz qoldirilsin va brauzer ochilsin"</string>
diff --git a/packages/CaptivePortalLogin/res/values-vi/strings.xml b/packages/CaptivePortalLogin/res/values-vi/strings.xml
index a667283..e51d2aa 100644
--- a/packages/CaptivePortalLogin/res/values-vi/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-vi/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Sử dụng mạng này"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Không sử dụng mạng này"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Đăng nhập vào mạng"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Đăng nhập vào %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Mạng mà bạn đang cố gắng tham gia có vấn đề về bảo mật."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Ví dụ, trang đăng nhập có thể không thuộc về tổ chức được hiển thị."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Vẫn tiếp tục qua trình duyệt"</string>
diff --git a/packages/CaptivePortalLogin/res/values-zh-rCN/strings.xml b/packages/CaptivePortalLogin/res/values-zh-rCN/strings.xml
index b832f6e..ce822e7 100644
--- a/packages/CaptivePortalLogin/res/values-zh-rCN/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-zh-rCN/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"直接使用此网络"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"不要使用此网络"</string>
     <string name="action_bar_label" msgid="917235635415966620">"登录到网络"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"登录%1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"您尝试加入的网络存在安全问题。"</string>
     <string name="ssl_error_example" msgid="647898534624078900">"例如,登录页面可能并不属于页面上显示的单位。"</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"仍然通过浏览器继续操作"</string>
diff --git a/packages/CaptivePortalLogin/res/values-zh-rHK/strings.xml b/packages/CaptivePortalLogin/res/values-zh-rHK/strings.xml
index 1232abb..9010e1e 100644
--- a/packages/CaptivePortalLogin/res/values-zh-rHK/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-zh-rHK/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"依照現況使用這個網絡"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"不要使用這個網絡"</string>
     <string name="action_bar_label" msgid="917235635415966620">"登入網絡"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"登入「%1$s」"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"您正在嘗試加入的網絡有安全性問題。"</string>
     <string name="ssl_error_example" msgid="647898534624078900">"例如,登入頁面並不屬於所顯示的機構。"</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"透過瀏覽器繼續"</string>
diff --git a/packages/CaptivePortalLogin/res/values-zh-rTW/strings.xml b/packages/CaptivePortalLogin/res/values-zh-rTW/strings.xml
index bd0f4b7..5b535e2 100644
--- a/packages/CaptivePortalLogin/res/values-zh-rTW/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-zh-rTW/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"依現況使用這個網路"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"不使用這個網路"</string>
     <string name="action_bar_label" msgid="917235635415966620">"登入網路"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"登入 %1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"你嘗試加入的網路有安全問題。"</string>
     <string name="ssl_error_example" msgid="647898534624078900">"例如,登入網頁中顯示的機構可能並非該網頁實際隸屬的機構。"</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"透過瀏覽器繼續"</string>
diff --git a/packages/CaptivePortalLogin/res/values-zu/strings.xml b/packages/CaptivePortalLogin/res/values-zu/strings.xml
index 3320fd4..866ba18 100644
--- a/packages/CaptivePortalLogin/res/values-zu/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-zu/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network" msgid="6076184727448466030">"Sebenzisa le nethiwekhi njengoba injalo"</string>
     <string name="action_do_not_use_network" msgid="4577366536956516683">"Ungasebenzisi le nethiwekhi"</string>
     <string name="action_bar_label" msgid="917235635415966620">"Ngena ngemvume kunethiwekhi"</string>
+    <string name="action_bar_title" msgid="5645564790486983117">"Ngena ngemvume ku-%1$s"</string>
     <string name="ssl_error_warning" msgid="6653188881418638872">"Inethiwekhi ozama ukuyijoyina inezinkinga zokuvikela."</string>
     <string name="ssl_error_example" msgid="647898534624078900">"Isibonelo, ikhasi lokungena ngemvume kungenzeka lingelenhlangano ebonisiwe."</string>
     <string name="ssl_error_continue" msgid="6492718244923937110">"Qhubeka noma kunjalo ngesiphequluli"</string>
diff --git a/packages/CaptivePortalLogin/res/values/strings.xml b/packages/CaptivePortalLogin/res/values/strings.xml
index b1a3852..f486fe4 100644
--- a/packages/CaptivePortalLogin/res/values/strings.xml
+++ b/packages/CaptivePortalLogin/res/values/strings.xml
@@ -5,6 +5,7 @@
     <string name="action_use_network">Use this network as is</string>
     <string name="action_do_not_use_network">Do not use this network</string>
     <string name="action_bar_label">Sign in to network</string>
+    <string name="action_bar_title">Sign in to %1$s</string>
     <string name="ssl_error_warning">The network you&#8217;re trying to join has security issues.</string>
     <string name="ssl_error_example">For example, the login page may not belong to the organization shown.</string>
     <string name="ssl_error_continue">Continue anyway via browser</string>
diff --git a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
index 7e4f1d0..be87ed2 100644
--- a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
+++ b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
@@ -26,6 +26,7 @@
 import android.net.ConnectivityManager.NetworkCallback;
 import android.net.Network;
 import android.net.NetworkCapabilities;
+import android.net.NetworkInfo;
 import android.net.NetworkRequest;
 import android.net.Proxy;
 import android.net.Uri;
@@ -515,7 +516,15 @@
     }
 
     private String getHeaderTitle() {
-        return getString(R.string.action_bar_label);
+        NetworkInfo info = mCm.getNetworkInfo(mNetwork);
+        if (info == null) {
+            return getString(R.string.action_bar_label);
+        }
+        NetworkCapabilities nc = mCm.getNetworkCapabilities(mNetwork);
+        if (!nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
+            return getString(R.string.action_bar_label);
+        }
+        return getString(R.string.action_bar_title, info.getExtraInfo().replaceAll("^\"|\"$", ""));
     }
 
     private String getHeaderSubtitle(URL url) {
diff --git a/packages/CarrierDefaultApp/res/values-bn/strings.xml b/packages/CarrierDefaultApp/res/values-bn/strings.xml
index 9a0f68c..448c42b 100644
--- a/packages/CarrierDefaultApp/res/values-bn/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-bn/strings.xml
@@ -10,8 +10,8 @@
     <string name="no_mobile_data_connection_title" msgid="7449525772416200578">"কোনও মোবাইল ডেটা সংযোগ নেই"</string>
     <string name="no_mobile_data_connection" msgid="544980465184147010">"%s এর মাধ্যমে ডেটা অথবা রোমিং পরিকল্পনা যোগ করুন"</string>
     <string name="mobile_data_status_notification_channel_name" msgid="833999690121305708">"মোবাইল ডেটার স্ট্যাটাস"</string>
-    <string name="action_bar_label" msgid="4290345990334377177">"মোবাইল নেটওয়ার্কে প্রবেশ করুন"</string>
+    <string name="action_bar_label" msgid="4290345990334377177">"মোবাইল নেটওয়ার্কে সাইন-ইন করুন"</string>
     <string name="ssl_error_warning" msgid="3127935140338254180">"আপনি যে নেটওয়ার্কে যোগ দেওয়ার চেষ্টা করছেন সেটিতে নিরাপত্তাজনিত সমস্যা আছে।"</string>
-    <string name="ssl_error_example" msgid="6188711843183058764">"যেমন, লগইন পৃষ্ঠাটি যে প্রতিষ্ঠানের পৃষ্ঠা বলে দেখানো আছে, আসলে তা নাও হতে পারে৷"</string>
+    <string name="ssl_error_example" msgid="6188711843183058764">"যেমন, লগ-ইন পৃষ্ঠাটি যে প্রতিষ্ঠানের পৃষ্ঠা বলে দেখানো আছে, আসলে তা নাও হতে পারে৷"</string>
     <string name="ssl_error_continue" msgid="1138548463994095584">"যাই হোক, ব্রাউজারের মাধ্যমে চালিয়ে যান"</string>
 </resources>
diff --git a/packages/CarrierDefaultApp/res/values-bs/strings.xml b/packages/CarrierDefaultApp/res/values-bs/strings.xml
index 7edbb11..bc1ff33 100644
--- a/packages/CarrierDefaultApp/res/values-bs/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-bs/strings.xml
@@ -4,12 +4,12 @@
     <string name="app_name" msgid="5247871339820894594">"CarrierDefaultApp"</string>
     <string name="android_system_label" msgid="2797790869522345065">"Mobilni operater"</string>
     <string name="portal_notification_id" msgid="5155057562457079297">"Mobilni internet je potrošen"</string>
-    <string name="no_data_notification_id" msgid="668400731803969521">"Prijenos mobilnih podataka je deaktiviran"</string>
+    <string name="no_data_notification_id" msgid="668400731803969521">"Prijenos podataka na mobilnoj mreži je deaktiviran"</string>
     <string name="portal_notification_detail" msgid="2295729385924660881">"Dodirnite da posjetite %s web lokaciju"</string>
     <string name="no_data_notification_detail" msgid="3112125343857014825">"Obratite se pružaocu usluga %s"</string>
-    <string name="no_mobile_data_connection_title" msgid="7449525772416200578">"Nema mobilnog prijenosa podataka"</string>
+    <string name="no_mobile_data_connection_title" msgid="7449525772416200578">"Nema veze za prijenos podataka na mobilnoj mreži"</string>
     <string name="no_mobile_data_connection" msgid="544980465184147010">"Dodajte plan prijenosa podataka ili rominga putem operatera %s"</string>
-    <string name="mobile_data_status_notification_channel_name" msgid="833999690121305708">"Status mobilnih podataka"</string>
+    <string name="mobile_data_status_notification_channel_name" msgid="833999690121305708">"Status prijenosa podataka na mobilnoj mreži"</string>
     <string name="action_bar_label" msgid="4290345990334377177">"Prijava na mobilnu mrežu"</string>
     <string name="ssl_error_warning" msgid="3127935140338254180">"Mreža kojoj pokušavate pristupiti ima sigurnosnih problema."</string>
     <string name="ssl_error_example" msgid="6188711843183058764">"Naprimjer, stranica za prijavljivanje možda ne pripada prikazanoj organizaciji."</string>
diff --git a/packages/CarrierDefaultApp/res/values-en-rCA/strings.xml b/packages/CarrierDefaultApp/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..a925a30
--- /dev/null
+++ b/packages/CarrierDefaultApp/res/values-en-rCA/strings.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="5247871339820894594">"CarrierDefaultApp"</string>
+    <string name="android_system_label" msgid="2797790869522345065">"Mobile Operator"</string>
+    <string name="portal_notification_id" msgid="5155057562457079297">"Mobile data has run out"</string>
+    <string name="no_data_notification_id" msgid="668400731803969521">"Your mobile data has been deactivated"</string>
+    <string name="portal_notification_detail" msgid="2295729385924660881">"Tap to visit the %s website"</string>
+    <string name="no_data_notification_detail" msgid="3112125343857014825">"Please contact your service provider %s"</string>
+    <string name="no_mobile_data_connection_title" msgid="7449525772416200578">"No mobile data connection"</string>
+    <string name="no_mobile_data_connection" msgid="544980465184147010">"Add data or roaming plan through %s"</string>
+    <string name="mobile_data_status_notification_channel_name" msgid="833999690121305708">"Mobile data status"</string>
+    <string name="action_bar_label" msgid="4290345990334377177">"Sign in to mobile network"</string>
+    <string name="ssl_error_warning" msgid="3127935140338254180">"The network that you’re trying to join has security issues."</string>
+    <string name="ssl_error_example" msgid="6188711843183058764">"For example, the login page might not belong to the organisation shown."</string>
+    <string name="ssl_error_continue" msgid="1138548463994095584">"Continue anyway via browser"</string>
+</resources>
diff --git a/packages/CarrierDefaultApp/res/values-en-rXC/strings.xml b/packages/CarrierDefaultApp/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..e30795d
--- /dev/null
+++ b/packages/CarrierDefaultApp/res/values-en-rXC/strings.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="5247871339820894594">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎CarrierDefaultApp‎‏‎‎‏‎"</string>
+    <string name="android_system_label" msgid="2797790869522345065">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎Mobile Carrier‎‏‎‎‏‎"</string>
+    <string name="portal_notification_id" msgid="5155057562457079297">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎Mobile data has run out‎‏‎‎‏‎"</string>
+    <string name="no_data_notification_id" msgid="668400731803969521">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‏‎Your mobile data has been deactivated‎‏‎‎‏‎"</string>
+    <string name="portal_notification_detail" msgid="2295729385924660881">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‎‎‏‎‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‏‎Tap to visit the %s website‎‏‎‎‏‎"</string>
+    <string name="no_data_notification_detail" msgid="3112125343857014825">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‎Please contact your service provider %s‎‏‎‎‏‎"</string>
+    <string name="no_mobile_data_connection_title" msgid="7449525772416200578">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎No mobile data connection‎‏‎‎‏‎"</string>
+    <string name="no_mobile_data_connection" msgid="544980465184147010">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎Add data or roaming plan through %s‎‏‎‎‏‎"</string>
+    <string name="mobile_data_status_notification_channel_name" msgid="833999690121305708">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‎Mobile data status‎‏‎‎‏‎"</string>
+    <string name="action_bar_label" msgid="4290345990334377177">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‎Sign in to mobile network‎‏‎‎‏‎"</string>
+    <string name="ssl_error_warning" msgid="3127935140338254180">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‎‏‎‎‎The network you’re trying to join has security issues.‎‏‎‎‏‎"</string>
+    <string name="ssl_error_example" msgid="6188711843183058764">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎For example, the login page may not belong to the organization shown.‎‏‎‎‏‎"</string>
+    <string name="ssl_error_continue" msgid="1138548463994095584">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‎‎‎‎‎Continue anyway via browser‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/CarrierDefaultApp/res/values-hi/strings.xml b/packages/CarrierDefaultApp/res/values-hi/strings.xml
index b49022b..b9d6f42 100644
--- a/packages/CarrierDefaultApp/res/values-hi/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-hi/strings.xml
@@ -2,15 +2,15 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5247871339820894594">"CarrierDefaultApp"</string>
-    <string name="android_system_label" msgid="2797790869522345065">"मोबाइल वाहक"</string>
+    <string name="android_system_label" msgid="2797790869522345065">"मोबाइल सेवा देने वाली कंपनी"</string>
     <string name="portal_notification_id" msgid="5155057562457079297">"मोबाइल डेटा खत्म हो गया है"</string>
-    <string name="no_data_notification_id" msgid="668400731803969521">"आपका मोबाइल डेटा निष्क्रिय कर दिया गया है"</string>
+    <string name="no_data_notification_id" msgid="668400731803969521">"आपका मोबाइल डेटा बंद कर दिया गया है"</string>
     <string name="portal_notification_detail" msgid="2295729385924660881">"%s वेबसाइट पर जाने के लिए टैप करें"</string>
-    <string name="no_data_notification_detail" msgid="3112125343857014825">"कृपया अपने सेवा प्रदाता %s से संपर्क करें"</string>
+    <string name="no_data_notification_detail" msgid="3112125343857014825">"कृपया अपने सेवा देने वाले %s से संपर्क करें"</string>
     <string name="no_mobile_data_connection_title" msgid="7449525772416200578">"कोई भी मोबाइल डेटा कनेक्शन नहीं है"</string>
     <string name="no_mobile_data_connection" msgid="544980465184147010">"%s के ज़रिए डेटा या रोमिंग योजना जोड़ें"</string>
     <string name="mobile_data_status_notification_channel_name" msgid="833999690121305708">"मोबाइल डेटा की स्थिति"</string>
-    <string name="action_bar_label" msgid="4290345990334377177">"मोबाइल नेटवर्क में प्रवेश करें"</string>
+    <string name="action_bar_label" msgid="4290345990334377177">"मोबाइल नेटवर्क में साइन इन करें"</string>
     <string name="ssl_error_warning" msgid="3127935140338254180">"आप जिस नेटवर्क में शामिल होने की कोशिश कर रहे हैं उसमें सुरक्षा से जुड़ी समस्‍याएं हैं."</string>
     <string name="ssl_error_example" msgid="6188711843183058764">"उदाहरण के लिए, हो सकता है कि लॉगिन पेज दिखाए गए संगठन का ना हो."</string>
     <string name="ssl_error_continue" msgid="1138548463994095584">"ब्राउज़र के ज़रिए किसी भी तरह जारी रखें"</string>
diff --git a/packages/CarrierDefaultApp/res/values-pa/strings.xml b/packages/CarrierDefaultApp/res/values-pa/strings.xml
index 37aa2ac..f4d4053 100644
--- a/packages/CarrierDefaultApp/res/values-pa/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-pa/strings.xml
@@ -3,15 +3,15 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5247871339820894594">"CarrierDefaultApp"</string>
     <string name="android_system_label" msgid="2797790869522345065">"ਮੋਬਾਈਲ ਕੈਰੀਅਰ"</string>
-    <string name="portal_notification_id" msgid="5155057562457079297">"ਮੋਬਾਈਲ ਡੈਟਾ ਖਤਮ ਹੋ ਗਿਆ ਹੈ"</string>
-    <string name="no_data_notification_id" msgid="668400731803969521">"ਤੁਹਾਡਾ ਮੋਬਾਈਲ ਡੈਟਾ ਅਕਿਰਿਆਸ਼ੀਲ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ"</string>
+    <string name="portal_notification_id" msgid="5155057562457079297">"ਮੋਬਾਈਲ ਡਾਟਾ ਖਤਮ ਹੋ ਗਿਆ ਹੈ"</string>
+    <string name="no_data_notification_id" msgid="668400731803969521">"ਤੁਹਾਡਾ ਮੋਬਾਈਲ ਡਾਟਾ ਅਕਿਰਿਆਸ਼ੀਲ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ"</string>
     <string name="portal_notification_detail" msgid="2295729385924660881">"%s ਵੈੱਬਸਾਈਟ \'ਤੇ ਜਾਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
     <string name="no_data_notification_detail" msgid="3112125343857014825">"ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਸੇਵਾ ਪ੍ਰਦਾਨਕ %s ਨੂੰ ਸੰਪਰਕ ਕਰੋ"</string>
-    <string name="no_mobile_data_connection_title" msgid="7449525772416200578">"ਕੋਈ ਮੋਬਾਈਲ ਡੈਟਾ ਕਨੈਕਸ਼ਨ ਨਹੀਂ"</string>
-    <string name="no_mobile_data_connection" msgid="544980465184147010">"%s ਰਾਹੀਂ ਡੈਟਾ ਜਾਂ ਰੋਮਿੰਗ ਯੋਜਨਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
-    <string name="mobile_data_status_notification_channel_name" msgid="833999690121305708">"ਮੋਬਾਈਲ ਡੈਟੇ ਦੀ ਅਵਸਥਾ"</string>
+    <string name="no_mobile_data_connection_title" msgid="7449525772416200578">"ਕੋਈ ਮੋਬਾਈਲ ਡਾਟਾ ਕਨੈਕਸ਼ਨ ਨਹੀਂ"</string>
+    <string name="no_mobile_data_connection" msgid="544980465184147010">"%s ਰਾਹੀਂ ਡਾਟਾ ਜਾਂ ਰੋਮਿੰਗ ਯੋਜਨਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
+    <string name="mobile_data_status_notification_channel_name" msgid="833999690121305708">"ਮੋਬਾਈਲ ਡਾਟੇ ਦੀ ਸਥਿਤੀ"</string>
     <string name="action_bar_label" msgid="4290345990334377177">"ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰੋ"</string>
     <string name="ssl_error_warning" msgid="3127935140338254180">"ਤੁਸੀਂ ਜਿਸ ਨੈੱਟਵਰਕ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਹੇ ਹੋ ਉਸ ਵਿੱਚ ਸੁਰੱਖਿਆ ਸਬੰਧੀ ਸਮੱਸਿਆਵਾਂ ਹਨ।"</string>
-    <string name="ssl_error_example" msgid="6188711843183058764">"ਉਦਾਹਰਣ ਵਜੋਂ, ਹੋ ਸਕਦਾ ਹੈ ਲੌਗਇਨ ਪੰਨਾ ਦਿਖਾਈ ਗਈ ਸੰਸਥਾ ਨਾਲ ਸਬੰਧਿਤ ਨਾ ਹੋਵੇ।"</string>
-    <string name="ssl_error_continue" msgid="1138548463994095584">"ਫਿਰ ਵੀ ਬ੍ਰਾਊਜ਼ਰ ਰਾਹੀਂ ਜਾਰੀ ਰੱਖੋ"</string>
+    <string name="ssl_error_example" msgid="6188711843183058764">"ਉਦਾਹਰਣ ਵੱਜੋਂ, ਲੌਗ-ਇਨ ਪੰਨਾ ਦਿਖਾਈ ਗਈ ਸੰਸਥਾ ਨਾਲ ਸੰਬੰਧਿਤ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ।"</string>
+    <string name="ssl_error_continue" msgid="1138548463994095584">"ਬ੍ਰਾਊਜ਼ਰ ਰਾਹੀਂ ਫਿਰ ਵੀ ਜਾਰੀ ਰੱਖੋ"</string>
 </resources>
diff --git a/packages/CarrierDefaultApp/res/values-sw/strings.xml b/packages/CarrierDefaultApp/res/values-sw/strings.xml
index c546fcee..a52a733 100644
--- a/packages/CarrierDefaultApp/res/values-sw/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-sw/strings.xml
@@ -5,7 +5,7 @@
     <string name="android_system_label" msgid="2797790869522345065">"Mtoa Huduma za Simu"</string>
     <string name="portal_notification_id" msgid="5155057562457079297">"Data ya mtandao wa simu imekwisha"</string>
     <string name="no_data_notification_id" msgid="668400731803969521">"Data yako ya mtandao wa simu imezimwa"</string>
-    <string name="portal_notification_detail" msgid="2295729385924660881">"Gonga ili utembelee tovuti ya %s"</string>
+    <string name="portal_notification_detail" msgid="2295729385924660881">"Gusa ili utembelee tovuti ya %s"</string>
     <string name="no_data_notification_detail" msgid="3112125343857014825">"Tafadhali wasiliana na mtoa huduma wako %s"</string>
     <string name="no_mobile_data_connection_title" msgid="7449525772416200578">"Hakuna muunganisho wa data kwa simu za mkononi"</string>
     <string name="no_mobile_data_connection" msgid="544980465184147010">"Ongeza mpango wa mitandao mingine au data kupitia %s"</string>
diff --git a/packages/CarrierDefaultApp/res/values-ta/strings.xml b/packages/CarrierDefaultApp/res/values-ta/strings.xml
index 111f8d1..1a786fa 100644
--- a/packages/CarrierDefaultApp/res/values-ta/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ta/strings.xml
@@ -3,13 +3,13 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5247871339820894594">"CarrierDefaultApp"</string>
     <string name="android_system_label" msgid="2797790869522345065">"தொலைத்தொடர்பு நிறுவனம்"</string>
-    <string name="portal_notification_id" msgid="5155057562457079297">"மொபைல் தரவு தீர்ந்துவிட்டது"</string>
-    <string name="no_data_notification_id" msgid="668400731803969521">"மொபைல் தரவு முடக்கப்பட்டது"</string>
+    <string name="portal_notification_id" msgid="5155057562457079297">"மொபைல் டேட்டா தீர்ந்துவிட்டது"</string>
+    <string name="no_data_notification_id" msgid="668400731803969521">"மொபைல் டேட்டா முடக்கப்பட்டது"</string>
     <string name="portal_notification_detail" msgid="2295729385924660881">"%s இணையதளத்திற்குச் செல்ல, தட்டவும்"</string>
     <string name="no_data_notification_detail" msgid="3112125343857014825">"%s எனும் உங்கள் சேவை வழங்குநரைத் தொடர்புகொள்ளவும்"</string>
-    <string name="no_mobile_data_connection_title" msgid="7449525772416200578">"மொபைல் தரவு இணைப்பு இல்லை"</string>
+    <string name="no_mobile_data_connection_title" msgid="7449525772416200578">"மொபைல் டேட்டா இணைப்பு இல்லை"</string>
     <string name="no_mobile_data_connection" msgid="544980465184147010">"%s மூலம் தரவு அல்லது ரோமிங் திட்டத்தைச் சேர்க்கவும்"</string>
-    <string name="mobile_data_status_notification_channel_name" msgid="833999690121305708">"மொபைல் தரவின் நிலை"</string>
+    <string name="mobile_data_status_notification_channel_name" msgid="833999690121305708">"மொபைல் டேட்டாவின் நிலை"</string>
     <string name="action_bar_label" msgid="4290345990334377177">"மொபைல் நெட்வொர்க்கில் உள்நுழையவும்"</string>
     <string name="ssl_error_warning" msgid="3127935140338254180">"நீங்கள் சேர முயலும் நெட்வொர்க்கில் பாதுகாப்புச் சிக்கல்கள் உள்ளன."</string>
     <string name="ssl_error_example" msgid="6188711843183058764">"எடுத்துக்காட்டாக, உள்நுழைவுப் பக்கமானது காட்டப்படும் அமைப்பிற்குச் சொந்தமானதாக இல்லாமல் இருக்கலாம்."</string>
diff --git a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CaptivePortalLoginActivity.java b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CaptivePortalLoginActivity.java
index b0052cc..a61881f 100644
--- a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CaptivePortalLoginActivity.java
+++ b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CaptivePortalLoginActivity.java
@@ -82,6 +82,7 @@
     private MyWebViewClient mWebViewClient;
     private boolean mLaunchBrowser = false;
     private Thread mTestingThread = null;
+    private boolean mReload = false;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -290,9 +291,13 @@
                 mCm.bindProcessToNetwork(network);
                 mNetwork = network;
                 runOnUiThreadIfNotFinishing(() -> {
-                    // Start initial page load so WebView finishes loading proxy settings.
-                    // Actual load of mUrl is initiated by MyWebViewClient.
-                    mWebView.loadData("", "text/html", null);
+                    if (mReload) {
+                        mWebView.reload();
+                    } else {
+                        // Start initial page load so WebView finishes loading proxy settings.
+                        // Actual load of mUrl is initiated by MyWebViewClient.
+                        mWebView.loadData("", "text/html", null);
+                    }
                 });
             }
 
@@ -305,6 +310,12 @@
                     mWebView.loadUrl(mUrl.toString());
                 });
             }
+
+            @Override
+            public void onLost(Network lostNetwork) {
+                if (DBG) logd("Network lost");
+                mReload = true;
+            }
         };
         logd("request Network for captive portal");
         mCm.requestNetwork(request, mNetworkCallback, NETWORK_REQUEST_TIMEOUT_MS);
diff --git a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CarrierActionUtils.java b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CarrierActionUtils.java
index a2bf964..33cb5964 100644
--- a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CarrierActionUtils.java
+++ b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CarrierActionUtils.java
@@ -27,6 +27,7 @@
 import android.os.Bundle;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
+import android.text.TextUtils;
 import android.util.Log;
 import com.android.internal.telephony.PhoneConstants;
 import com.android.carrierdefaultapp.R;
@@ -199,13 +200,19 @@
                                          PendingIntent pendingIntent) {
         final TelephonyManager telephonyMgr = context.getSystemService(TelephonyManager.class);
         final Resources resources = context.getResources();
+        String spn = telephonyMgr.getSimOperatorName();
+        if (TextUtils.isEmpty(spn)) {
+            // There is no consistent way to get the current carrier name as MNOs didn't
+            // bother to set EF_SPN. in the long term, we should display a generic wording if
+            // spn from subscription is not set.
+            spn = telephonyMgr.getNetworkOperatorName();
+        }
         final Bundle extras = Bundle.forPair(Notification.EXTRA_SUBSTITUTE_APP_NAME,
                 resources.getString(R.string.android_system_label));
         createNotificationChannels(context);
         Notification.Builder builder = new Notification.Builder(context)
                 .setContentTitle(resources.getString(titleId))
-                .setContentText(String.format(resources.getString(textId),
-                        telephonyMgr.getNetworkOperatorName()))
+                .setContentText(String.format(resources.getString(textId), spn))
                 .setSmallIcon(R.drawable.ic_sim_card)
                 .setColor(context.getColor(
                         com.android.internal.R.color.system_notification_accent_color))
diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java
index 0cf21d2..7e23ee1 100644
--- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java
+++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java
@@ -62,9 +62,14 @@
                     R.string.confirmation_title,
                     getCallingAppName(),
                     selectedDevice.getDisplayName()), 0));
+            mPairButton = findViewById(R.id.button_pair);
+            mPairButton.setOnClickListener(v -> onDeviceConfirmed(getService().mSelectedDevice));
             getService().mSelectedDevice = selectedDevice;
+            onSelectionUpdate();
         } else {
             setContentView(R.layout.device_chooser);
+            mPairButton = findViewById(R.id.button_pair);
+            mPairButton.setVisibility(View.GONE);
             setTitle(Html.fromHtml(getString(R.string.chooser_title, getCallingAppName()), 0));
             mDeviceListView = findViewById(R.id.device_list);
             final DeviceDiscoveryService.DevicesAdapter adapter = getService().mDevicesAdapter;
@@ -72,16 +77,12 @@
             adapter.registerDataSetObserver(new DataSetObserver() {
                 @Override
                 public void onChanged() {
-                    updatePairButtonEnabled();
+                    onSelectionUpdate();
                 }
             });
             mDeviceListView.addFooterView(getProgressBar(), null, false);
         }
 
-        mPairButton = findViewById(R.id.button_pair);
-        mPairButton.setOnClickListener(v -> onPairTapped(getService().mSelectedDevice));
-        updatePairButtonEnabled();
-
         mCancelButton = findViewById(R.id.button_cancel);
         mCancelButton.setOnClickListener(v -> cancel());
     }
@@ -134,15 +135,20 @@
         return r.getDimensionPixelSize(R.dimen.padding);
     }
 
-    private void updatePairButtonEnabled() {
-        mPairButton.setEnabled(getService().mSelectedDevice != null);
+    private void onSelectionUpdate() {
+        DeviceFilterPair selectedDevice = getService().mSelectedDevice;
+        if (mPairButton.getVisibility() != View.VISIBLE && selectedDevice != null) {
+            onDeviceConfirmed(selectedDevice);
+        } else {
+            mPairButton.setEnabled(selectedDevice != null);
+        }
     }
 
     private DeviceDiscoveryService getService() {
         return DeviceDiscoveryService.sInstance;
     }
 
-   protected void onPairTapped(DeviceFilterPair selectedDevice) {
+   protected void onDeviceConfirmed(DeviceFilterPair selectedDevice) {
         getService().onDeviceSelected(
                 getCallingPackage(), getDeviceMacAddress(selectedDevice.device));
         setResult(RESULT_OK,
diff --git a/packages/CtsShim/Android.mk b/packages/CtsShim/Android.mk
index fa6423e..88b85e0 100644
--- a/packages/CtsShim/Android.mk
+++ b/packages/CtsShim/Android.mk
@@ -30,8 +30,11 @@
 # Make sure the build system doesn't try to resign the APK
 LOCAL_CERTIFICATE := PRESIGNED
 LOCAL_DEX_PREOPT := false
+LOCAL_MODULE_TARGET_ARCH := arm arm64 x86 x86_64
 
-LOCAL_SRC_FILES := CtsShimPriv.apk
+my_archs := arm x86
+my_src_arch := $(call get-prebuilt-src-arch, $(my_archs))
+LOCAL_SRC_FILES := apk/$(my_src_arch)/CtsShimPriv.apk
 
 include $(BUILD_PREBUILT)
 
@@ -48,8 +51,11 @@
 # Make sure the build system doesn't try to resign the APK
 LOCAL_CERTIFICATE := PRESIGNED
 LOCAL_DEX_PREOPT := false
+LOCAL_MODULE_TARGET_ARCH := arm arm64 x86 x86_64
 
-LOCAL_SRC_FILES := CtsShim.apk
+my_archs := arm x86
+my_src_arch := $(call get-prebuilt-src-arch, $(my_archs))
+LOCAL_SRC_FILES := apk/$(my_src_arch)/CtsShim.apk
 
 include $(BUILD_PREBUILT)
 
diff --git a/packages/CtsShim/CtsShim.apk b/packages/CtsShim/CtsShim.apk
deleted file mode 100644
index 2728903..0000000
--- a/packages/CtsShim/CtsShim.apk
+++ /dev/null
Binary files differ
diff --git a/packages/CtsShim/CtsShimPriv.apk b/packages/CtsShim/CtsShimPriv.apk
deleted file mode 100644
index 9a8e75c..0000000
--- a/packages/CtsShim/CtsShimPriv.apk
+++ /dev/null
Binary files differ
diff --git a/packages/CtsShim/apk/arm/CtsShim.apk b/packages/CtsShim/apk/arm/CtsShim.apk
new file mode 100644
index 0000000..a911603
--- /dev/null
+++ b/packages/CtsShim/apk/arm/CtsShim.apk
Binary files differ
diff --git a/packages/CtsShim/apk/arm/CtsShimPriv.apk b/packages/CtsShim/apk/arm/CtsShimPriv.apk
new file mode 100644
index 0000000..845d781
--- /dev/null
+++ b/packages/CtsShim/apk/arm/CtsShimPriv.apk
Binary files differ
diff --git a/packages/CtsShim/apk/x86/CtsShim.apk b/packages/CtsShim/apk/x86/CtsShim.apk
new file mode 100644
index 0000000..a911603
--- /dev/null
+++ b/packages/CtsShim/apk/x86/CtsShim.apk
Binary files differ
diff --git a/packages/CtsShim/apk/x86/CtsShimPriv.apk b/packages/CtsShim/apk/x86/CtsShimPriv.apk
new file mode 100644
index 0000000..2fc9a94
--- /dev/null
+++ b/packages/CtsShim/apk/x86/CtsShimPriv.apk
Binary files differ
diff --git a/packages/CtsShim/build/Android.mk b/packages/CtsShim/build/Android.mk
index 21f0afe..ec14d50 100644
--- a/packages/CtsShim/build/Android.mk
+++ b/packages/CtsShim/build/Android.mk
@@ -32,6 +32,9 @@
 
 LOCAL_MANIFEST_FILE := shim_priv_upgrade/AndroidManifest.xml
 
+LOCAL_MULTILIB := both
+LOCAL_JNI_SHARED_LIBRARIES := libshim_jni
+
 include $(BUILD_PACKAGE)
 my_shim_priv_upgrade_apk := $(LOCAL_BUILT_MODULE)
 
@@ -60,6 +63,9 @@
 
 LOCAL_FULL_MANIFEST_FILE := $(gen)
 
+LOCAL_MULTILIB := both
+LOCAL_JNI_SHARED_LIBRARIES := libshim_jni
+
 include $(BUILD_PACKAGE)
 
 ###########################################################
@@ -80,6 +86,9 @@
 
 LOCAL_MANIFEST_FILE := shim_priv_upgrade/AndroidManifest.xml
 
+LOCAL_MULTILIB := both
+LOCAL_JNI_SHARED_LIBRARIES := libshim_jni
+
 include $(BUILD_PACKAGE)
 
 
@@ -99,3 +108,5 @@
 
 include $(BUILD_PACKAGE)
 
+###########################################################
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/packages/CtsShim/build/README b/packages/CtsShim/build/README
index 9869377..59af068 100644
--- a/packages/CtsShim/build/README
+++ b/packages/CtsShim/build/README
@@ -6,19 +6,34 @@
 NOTE: The need to include a binary on the system image may be deprecated if a
 solution involving a temporarily writable /system partition is implemented.
 
-build:
-    $ tapas CtsShim CtsShimPriv CtsShimPrivUpgrade CtsShimPrivUpgradeWrongSHA
+For local testing, build the apk and put them in the following folders.
+This is for arm:
+    $ tapas CtsShim CtsShimPriv CtsShimPrivUpgrade CtsShimPrivUpgradeWrongSHA arm64
     $ m
-
-local testing:
     $ cp $OUT/system/priv-app/CtsShimPrivUpgrade/CtsShimPrivUpgrade.apk \
-        cts/hostsidetests/appsecurity/test-apps/PrivilegedUpdateApp
+        cts/hostsidetests/appsecurity/test-apps/PrivilegedUpdateApp/apk/arm
+    $ cp $OUT/system/priv-app/CtsShimPrivUpgrade/CtsShimPrivUpgrade.apk \
+        vendor/xts/gts-tests/hostsidetests/packagemanager/app/apk/arm/GtsShimPrivUpgrade.apk
     $ cp $OUT/system/priv-app/CtsShimPrivUpgradeWrongSHA/CtsShimPrivUpgradeWrongSHA.apk \
-        cts/hostsidetests/appsecurity/test-apps/PrivilegedUpdateApp
+        cts/hostsidetests/appsecurity/test-apps/PrivilegedUpdateApp/apk/arm
     $ cp $OUT/system/priv-app/CtsShimPriv/CtsShimPriv.apk \
-        frameworks/base/packages/CtsShim
+        frameworks/base/packages/CtsShim/apk/arm
     $ cp $OUT/system/app/CtsShim/CtsShim.apk \
-        frameworks/base/packages/CtsShim
+        frameworks/base/packages/CtsShim/apk/arm
+
+This is for x86:
+    $ tapas CtsShim CtsShimPriv CtsShimPrivUpgrade CtsShimPrivUpgradeWrongSHA x86_64
+    $ m
+    $ cp $OUT/system/priv-app/CtsShimPrivUpgrade/CtsShimPrivUpgrade.apk \
+        cts/hostsidetests/appsecurity/test-apps/PrivilegedUpdateApp/apk/x86
+    $ cp $OUT/system/priv-app/CtsShimPrivUpgrade/CtsShimPrivUpgrade.apk \
+        vendor/xts/gts-tests/hostsidetests/packagemanager/app/apk/x86/GtsShimPrivUpgrade.apk
+    $ cp $OUT/system/priv-app/CtsShimPrivUpgradeWrongSHA/CtsShimPrivUpgradeWrongSHA.apk \
+        cts/hostsidetests/appsecurity/test-apps/PrivilegedUpdateApp/apk/x86
+    $ cp $OUT/system/priv-app/CtsShimPriv/CtsShimPriv.apk \
+        frameworks/base/packages/CtsShim/apk/x86
+    $ cp $OUT/system/app/CtsShim/CtsShim.apk \
+        frameworks/base/packages/CtsShim/apk/x86
 
 For final submission, the APKs should be downloaded from the build server, then
 submitted to the cts/ and frameworks/base/ repos.
diff --git a/packages/CtsShim/build/jni/Android.mk b/packages/CtsShim/build/jni/Android.mk
new file mode 100644
index 0000000..968fc0b
--- /dev/null
+++ b/packages/CtsShim/build/jni/Android.mk
@@ -0,0 +1,27 @@
+#
+# 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.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libshim_jni
+
+LOCAL_SRC_FILES := Shim.c
+
+LOCAL_SDK_VERSION := 24
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/packages/CtsShim/build/jni/Shim.c b/packages/CtsShim/build/jni/Shim.c
new file mode 100644
index 0000000..44eb316
--- /dev/null
+++ b/packages/CtsShim/build/jni/Shim.c
@@ -0,0 +1,17 @@
+/*
+ * 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.
+ */
+
+#include <jni.h>
\ No newline at end of file
diff --git a/packages/CtsShim/build/shim_priv/AndroidManifest.xml b/packages/CtsShim/build/shim_priv/AndroidManifest.xml
index 5195ef7..9bf454c 100644
--- a/packages/CtsShim/build/shim_priv/AndroidManifest.xml
+++ b/packages/CtsShim/build/shim_priv/AndroidManifest.xml
@@ -27,6 +27,7 @@
 
     <application
         android:hasCode="false"
+        android:multiArch="true"
         tools:ignore="AllowBackup,MissingApplicationIcon" >
 
         <!-- These activities don't actually exist; define them just to test the filters !-->
diff --git a/packages/CtsShim/build/shim_priv_upgrade/AndroidManifest.xml b/packages/CtsShim/build/shim_priv_upgrade/AndroidManifest.xml
index b938e3e..023e93e 100644
--- a/packages/CtsShim/build/shim_priv_upgrade/AndroidManifest.xml
+++ b/packages/CtsShim/build/shim_priv_upgrade/AndroidManifest.xml
@@ -24,6 +24,7 @@
 
     <application
         android:hasCode="false"
+        android:multiArch="true"
         tools:ignore="AllowBackup,MissingApplicationIcon" >
 
         <!-- These activities don't actually exist; define them just to test the filters !-->
diff --git a/packages/DefaultContainerService/jni/com_android_defcontainer_MeasurementUtils.cpp b/packages/DefaultContainerService/jni/com_android_defcontainer_MeasurementUtils.cpp
index 6be4849..53cdc9d 100644
--- a/packages/DefaultContainerService/jni/com_android_defcontainer_MeasurementUtils.cpp
+++ b/packages/DefaultContainerService/jni/com_android_defcontainer_MeasurementUtils.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "DefContainer-JNI"
 
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 
 #include <diskusage/dirsize.h>
 #include <utils/Log.h>
diff --git a/packages/DefaultContainerService/res/values-en-rCA/strings.xml b/packages/DefaultContainerService/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..216d715
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-en-rCA/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"Package Access Helper"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-en-rXC/strings.xml b/packages/DefaultContainerService/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..d062fa8
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-en-rXC/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‏‎Package Access Helper‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-te/strings.xml b/packages/DefaultContainerService/res/values-te/strings.xml
index 58671ea..5be53e5 100644
--- a/packages/DefaultContainerService/res/values-te/strings.xml
+++ b/packages/DefaultContainerService/res/values-te/strings.xml
@@ -20,5 +20,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="service_name" msgid="4841491635055379553">"ప్యాకేజీ ప్రాప్యత సహాయకం"</string>
+    <string name="service_name" msgid="4841491635055379553">"ప్యాకేజీ యాక్సెస్ సహాయకం"</string>
 </resources>
diff --git a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
index 9347877..3800e6f 100644
--- a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
+++ b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
@@ -213,27 +213,6 @@
         }
 
         @Override
-        public long calculateDirectorySize(String path) throws RemoteException {
-            Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
-
-            final File dir = Environment.maybeTranslateEmulatedPathToInternal(new File(path));
-            if (dir.exists() && dir.isDirectory()) {
-                final String targetPath = dir.getAbsolutePath();
-                return MeasurementUtils.measureDirectory(targetPath);
-            } else {
-                return 0L;
-            }
-        }
-
-        @Override
-        public long[] getFileSystemStats(String path) {
-            Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
-
-            final File file = new File(path);
-            return new long[] { file.getTotalSpace(), file.getUsableSpace() };
-        }
-
-        @Override
         public void clearDirectory(String path) throws RemoteException {
             Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
 
diff --git a/packages/EasterEgg/AndroidManifest.xml b/packages/EasterEgg/AndroidManifest.xml
index 14861c26..172490d 100644
--- a/packages/EasterEgg/AndroidManifest.xml
+++ b/packages/EasterEgg/AndroidManifest.xml
@@ -84,5 +84,16 @@
                 <action android:name="android.service.quicksettings.action.QS_TILE" />
             </intent-filter>
         </service>
+
+        <!-- FileProvider for sending pictures -->
+        <provider
+                android:name="android.support.v4.content.FileProvider"
+                android:authorities="com.android.egg.fileprovider"
+                android:grantUriPermissions="true"
+                android:exported="false">
+            <meta-data
+                    android:name="android.support.FILE_PROVIDER_PATHS"
+                    android:resource="@xml/filepaths" />
+        </provider>
     </application>
 </manifest>
diff --git a/packages/EasterEgg/res/drawable/food_cookie.xml b/packages/EasterEgg/res/drawable/food_cookie.xml
new file mode 100644
index 0000000..74dd134
--- /dev/null
+++ b/packages/EasterEgg/res/drawable/food_cookie.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (C) 2017 The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <group>
+        <path
+            android:fillColor="#55FFFFFF"
+            android:fillType="evenOdd"
+            android:pathData="M5.71 18.29A8.99 8.99 0 0 0 22 13c0-3-1.46-5.65-3.71-7.29A8.99 8.99 0 0 0 2 11c0 3 1.46 5.65 3.71 7.29z"/>
+        <path
+            android:fillColor="#FFFFFFFF"
+            android:fillType="evenOdd"
+            android:pathData="M7.25 19.18A8.5 8.5 0 0 0 19.19 7.24 9 9 0 0 1 7.24 19.19z"/>
+        <path
+            android:fillColor="#55FFFFFF"
+            android:pathData="M10.5 3a0.5 0.5 0 1 1 1 0v2.05a0.5 0.5 0 1 1-1 0V3zm3.1 0.42a0.5 0.5 0 0 1 0.93 0.39l-0.8 1.88A0.5 0.5 0 1 1 12.8 5.3l0.8-1.88zm2.7 1.57a0.5 0.5 0 1 1 0.71 0.7l-1.45 1.46a0.5 0.5 0 0 1-0.7-0.71l1.44-1.45zm1.9 2.5a0.5 0.5 0 0 1 0.38 0.92l-1.9 0.77a0.5 0.5 0 0 1-0.37-0.93l1.9-0.77zM19 10.5a0.5 0.5 0 1 1 0 1h-2.05a0.5 0.5 0 0 1 0-1H19zm-0.42 3.1a0.5 0.5 0 0 1-0.39 0.93l-1.88-0.8a0.5 0.5 0 1 1 0.39-0.92l1.88 0.8zm-1.57 2.7a0.5 0.5 0 1 1-0.7 0.71l-1.46-1.45a0.5 0.5 0 0 1 0.71-0.7l1.45 1.44zm-2.5 1.9a0.5 0.5 0 1 1-0.92 0.38l-0.77-1.9a0.5 0.5 0 0 1 0.93-0.37l0.77 1.9zM11.5 19a0.5 0.5 0 1 1-1 0v-2.05a0.5 0.5 0 0 1 1 0V19zm-3.1-0.42a0.5 0.5 0 0 1-0.93-0.39l0.8-1.88A0.5 0.5 0 0 1 9.2 16.7l-0.8 1.88zm-2.7-1.57a0.5 0.5 0 1 1-0.71-0.7l1.45-1.46a0.5 0.5 0 0 1 0.7 0.71L5.7 17.01zm-1.9-2.48a0.5 0.5 0 0 1-0.38-0.92l1.88-0.8a0.5 0.5 0 0 1 0.4 0.92l-1.9 0.8zM3 11.5a0.5 0.5 0 1 1 0-1h2.05a0.5 0.5 0 1 1 0 1H3zm0.42-3.1A0.5 0.5 0 0 1 3.8 7.46l1.88 0.8A0.5 0.5 0 1 1 5.3 9.2L3.42 8.4zm1.57-2.7a0.5 0.5 0 1 1 0.7-0.71l1.46 1.45a0.5 0.5 0 0 1-0.71 0.7L4.99 5.7zm2.5-1.9A0.5 0.5 0 0 1 8.4 3.41l0.77 1.9a0.5 0.5 0 0 1-0.93 0.37L7.48 3.8z"/>
+    </group>
+</vector>
\ No newline at end of file
diff --git a/packages/EasterEgg/res/values/strings.xml b/packages/EasterEgg/res/values/strings.xml
index 8478a43..61e3834 100644
--- a/packages/EasterEgg/res/values/strings.xml
+++ b/packages/EasterEgg/res/values/strings.xml
@@ -17,6 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
     <string name="app_name" translatable="false">Android Easter Egg</string>
     <string name="notification_name" translatable="false">Android Neko</string>
+    <string name="notification_channel_name" translatable="false">New cats</string>
     <string name="default_tile_name" translatable="false">\????</string>
     <string name="notification_title" translatable="false">A cat is here.</string>
     <string name="default_cat_name" translatable="false">Cat #%s</string>
@@ -34,7 +35,7 @@
         <item>@drawable/food_bits</item>
         <item>@drawable/food_sysuituna</item>
         <item>@drawable/food_chicken</item>
-        <item>@drawable/food_donut</item>
+        <item>@drawable/food_cookie</item>
     </array>
     <integer-array name="food_intervals">
         <item>0</item>
diff --git a/packages/EasterEgg/res/xml/filepaths.xml b/packages/EasterEgg/res/xml/filepaths.xml
new file mode 100644
index 0000000..2130025
--- /dev/null
+++ b/packages/EasterEgg/res/xml/filepaths.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (C) 2017 The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<paths>
+    <external-path name="cats" path="Pictures/Cats" />
+</paths>
\ No newline at end of file
diff --git a/packages/EasterEgg/src/com/android/egg/neko/Cat.java b/packages/EasterEgg/src/com/android/egg/neko/Cat.java
index a4df372..dd1bd07 100644
--- a/packages/EasterEgg/src/com/android/egg/neko/Cat.java
+++ b/packages/EasterEgg/src/com/android/egg/neko/Cat.java
@@ -31,6 +31,8 @@
 import com.android.egg.R;
 import com.android.internal.logging.MetricsLogger;
 
+import static com.android.egg.neko.NekoLand.CHAN_ID;
+
 public class Cat extends Drawable {
     public static final long[] PURR = {0, 40, 20, 40, 20, 40, 20, 40, 20, 40, 20, 40};
 
@@ -218,6 +220,7 @@
                 .setContentText(getName())
                 .setContentIntent(PendingIntent.getActivity(context, 0, intent, 0))
                 .setAutoCancel(true)
+                .setChannel(CHAN_ID)
                 .setVibrate(PURR)
                 .addExtras(extras);
     }
diff --git a/packages/EasterEgg/src/com/android/egg/neko/NekoLand.java b/packages/EasterEgg/src/com/android/egg/neko/NekoLand.java
index 689e381..d2e37d8 100644
--- a/packages/EasterEgg/src/com/android/egg/neko/NekoLand.java
+++ b/packages/EasterEgg/src/com/android/egg/neko/NekoLand.java
@@ -31,6 +31,7 @@
 import android.os.Bundle;
 import android.os.Environment;
 import android.provider.MediaStore.Images;
+import android.support.v4.content.FileProvider;
 import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.util.Log;
@@ -56,6 +57,8 @@
 import java.util.List;
 
 public class NekoLand extends Activity implements PrefsListener {
+    public static String CHAN_ID = "EGG";
+
     public static boolean DEBUG = false;
     public static boolean DEBUG_NOTIFICATIONS = false;
 
@@ -289,10 +292,13 @@
                         new String[] {png.toString()},
                         new String[] {"image/png"},
                         null);
-                Uri uri = Uri.fromFile(png);
+                Log.v("Neko", "cat file: " + png);
+                Uri uri = FileProvider.getUriForFile(this, "com.android.egg.fileprovider", png);
+                Log.v("Neko", "cat uri: " + uri);
                 Intent intent = new Intent(Intent.ACTION_SEND);
                 intent.putExtra(Intent.EXTRA_STREAM, uri);
                 intent.putExtra(Intent.EXTRA_SUBJECT, cat.getName());
+                intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                 intent.setType("image/png");
                 startActivity(Intent.createChooser(intent, null));
                 cat.logShare(this);
diff --git a/packages/EasterEgg/src/com/android/egg/neko/NekoService.java b/packages/EasterEgg/src/com/android/egg/neko/NekoService.java
index 808ec36..42506e6 100644
--- a/packages/EasterEgg/src/com/android/egg/neko/NekoService.java
+++ b/packages/EasterEgg/src/com/android/egg/neko/NekoService.java
@@ -15,15 +15,15 @@
 package com.android.egg.neko;
 
 import android.app.Notification;
+import android.app.NotificationChannel;
 import android.app.NotificationManager;
 import android.app.job.JobInfo;
 import android.app.job.JobParameters;
 import android.app.job.JobScheduler;
 import android.app.job.JobService;
-import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
-import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
 
 import java.util.List;
@@ -33,6 +33,9 @@
 
 import java.util.Random;
 
+import static com.android.egg.neko.Cat.PURR;
+import static com.android.egg.neko.NekoLand.CHAN_ID;
+
 public class NekoService extends JobService {
 
     private static final String TAG = "NekoService";
@@ -40,6 +43,7 @@
     public static int JOB_ID = 42;
 
     public static int CAT_NOTIFICATION = 1;
+    public static int DEBUG_NOTIFICATION = 1234;
 
     public static float CAT_CAPTURE_PROB = 1.0f; // generous
 
@@ -50,6 +54,18 @@
 
     public static float INTERVAL_JITTER_FRAC = 0.25f;
 
+    private static void setupNotificationChannels(Context context) {
+        NotificationManager noman = context.getSystemService(NotificationManager.class);
+        NotificationChannel eggChan = new NotificationChannel(CHAN_ID,
+                context.getString(R.string.notification_channel_name),
+                NotificationManager.IMPORTANCE_DEFAULT);
+        eggChan.setSound(Uri.EMPTY, Notification.AUDIO_ATTRIBUTES_DEFAULT); // cats are quiet
+        eggChan.setVibrationPattern(PURR); // not totally quiet though
+        eggChan.setBlockableSystem(true); // unlike a real cat, you can push this one off your lap
+        eggChan.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC); // cats sit in the window
+        noman.createNotificationChannel(eggChan);
+    }
+
     @Override
     public boolean onStartJob(JobParameters params) {
         Log.v(TAG, "Starting job: " + String.valueOf(params));
@@ -64,8 +80,9 @@
             final Notification.Builder builder
                     = cat.buildNotification(this)
                         .setContentTitle("DEBUG")
+                        .setChannel(NekoLand.CHAN_ID)
                         .setContentText("Ran job: " + params);
-            noman.notify(1, builder.build());
+            noman.notify(DEBUG_NOTIFICATION, builder.build());
         }
 
         final PrefState prefs = new PrefState(this);
@@ -111,6 +128,8 @@
     }
 
     public static void registerJob(Context context, long intervalMinutes) {
+        setupNotificationChannels(context);
+
         JobScheduler jss = context.getSystemService(JobScheduler.class);
         jss.cancel(JOB_ID);
         long interval = intervalMinutes * MINUTES;
@@ -126,12 +145,13 @@
 
         if (NekoLand.DEBUG_NOTIFICATIONS) {
             NotificationManager noman = context.getSystemService(NotificationManager.class);
-            noman.notify(500, new Notification.Builder(context)
+            noman.notify(DEBUG_NOTIFICATION, new Notification.Builder(context)
                     .setSmallIcon(R.drawable.stat_icon)
                     .setContentTitle(String.format("Job scheduled in %d min", (interval / MINUTES)))
                     .setContentText(String.valueOf(jobInfo))
                     .setPriority(Notification.PRIORITY_MIN)
                     .setCategory(Notification.CATEGORY_SERVICE)
+                    .setChannel(NekoLand.CHAN_ID)
                     .setShowWhen(true)
                     .build());
         }
diff --git a/packages/ExternalStorageProvider/res/values-bn/strings.xml b/packages/ExternalStorageProvider/res/values-bn/strings.xml
index f1cb2f2..264d82a 100644
--- a/packages/ExternalStorageProvider/res/values-bn/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-bn/strings.xml
@@ -16,8 +16,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="7123375275748530234">"বাহ্যিক সঞ্চয়স্থান"</string>
-    <string name="storage_description" msgid="8541974407321172792">"স্থানীয় সঞ্চয়স্থান"</string>
-    <string name="root_internal_storage" msgid="827844243068584127">"অভ্যন্তরীণ সঞ্চয়স্থান"</string>
+    <string name="app_label" msgid="7123375275748530234">"এক্সটারনাল স্টোরেজ"</string>
+    <string name="storage_description" msgid="8541974407321172792">"স্থানীয় স্টোরেজ"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"ইন্টারনাল স্টোরেজ"</string>
     <string name="root_documents" msgid="4051252304075469250">"দস্তাবেজগুলি"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-en-rCA/strings.xml b/packages/ExternalStorageProvider/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..beaaf0d
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-en-rCA/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"External Storage"</string>
+    <string name="storage_description" msgid="8541974407321172792">"Local storage"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Documents"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-en-rXC/strings.xml b/packages/ExternalStorageProvider/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..e4f1b35
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-en-rXC/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‎External Storage‎‏‎‎‏‎"</string>
+    <string name="storage_description" msgid="8541974407321172792">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎Local storage‎‏‎‎‏‎"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‏‏‏‏‏‎Internal storage‎‏‎‎‏‎"</string>
+    <string name="root_documents" msgid="4051252304075469250">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‎‎‎‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‏‏‎‎‎‎‏‎‎Documents‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-gu/strings.xml b/packages/ExternalStorageProvider/res/values-gu/strings.xml
index 3e8a099..3f59dd3 100644
--- a/packages/ExternalStorageProvider/res/values-gu/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-gu/strings.xml
@@ -18,6 +18,6 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"બાહ્ય સંગ્રહ"</string>
     <string name="storage_description" msgid="8541974407321172792">"સ્થાનિક સ્ટોરેજ"</string>
-    <string name="root_internal_storage" msgid="827844243068584127">"આંતરિક સંગ્રહ"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"આંતરિક સ્ટોરેજ"</string>
     <string name="root_documents" msgid="4051252304075469250">"દસ્તાવેજો"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-mk/strings.xml b/packages/ExternalStorageProvider/res/values-mk/strings.xml
index 83a22d9..5ebf8a6 100644
--- a/packages/ExternalStorageProvider/res/values-mk/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-mk/strings.xml
@@ -18,6 +18,6 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"Надворешна меморија"</string>
     <string name="storage_description" msgid="8541974407321172792">"Локална меморија"</string>
-    <string name="root_internal_storage" msgid="827844243068584127">"Внатрешна меморија"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Внатрешен капацитет"</string>
     <string name="root_documents" msgid="4051252304075469250">"Документи"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-mr/strings.xml b/packages/ExternalStorageProvider/res/values-mr/strings.xml
index 5b81cc5..2bf3000 100644
--- a/packages/ExternalStorageProvider/res/values-mr/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-mr/strings.xml
@@ -18,6 +18,6 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7123375275748530234">"बाह्य संचयन"</string>
     <string name="storage_description" msgid="8541974407321172792">"स्थानिक संचय"</string>
-    <string name="root_internal_storage" msgid="827844243068584127">"अंतर्गत संचयन"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"अंतर्गत स्टोरेज"</string>
     <string name="root_documents" msgid="4051252304075469250">"दस्तऐवज"</string>
 </resources>
diff --git a/packages/FusedLocation/res/values-en-rCA/strings.xml b/packages/FusedLocation/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-en-rCA/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-en-rXC/strings.xml b/packages/FusedLocation/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..b085aba
--- /dev/null
+++ b/packages/FusedLocation/res/values-en-rXC/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎Fused Location‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/InputDevices/res/raw/keyboard_layout_persian.kcm b/packages/InputDevices/res/raw/keyboard_layout_persian.kcm
new file mode 100644
index 0000000..e7dd6c6
--- /dev/null
+++ b/packages/InputDevices/res/raw/keyboard_layout_persian.kcm
@@ -0,0 +1,501 @@
+# 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.
+
+
+
+type FULL
+
+### Basic QWERTY keys ###
+
+key A {
+    label:                              '\u0634'
+    base:                               '\u0634'
+    shift, capslock:                    '\u0624'
+    ctrl, alt, meta:                    none
+}
+
+key B {
+    label:                              '\u0630'
+    base:                               '\u0630'
+    shift, capslock:                    '\u200C'
+    ctrl, alt, meta:                    none
+}
+
+key C {
+    label:                              '\u0632'
+    base:                               '\u0632'
+    shift, capslock:                    '\u0698'
+    ctrl, alt, meta:                    none
+}
+
+key D {
+    label:                              '\u06CC'
+    base:                               '\u06CC'
+    shift, capslock:                    '\u064A'
+    ctrl, alt, meta:                    none
+}
+
+key E {
+    label:                              '\u062B'
+    base:                               '\u062B'
+    shift, capslock:                    '\u064D'
+    ctrl, alt, meta:                    none
+}
+
+key F {
+    label:                              '\u0628'
+    base:                               '\u0628'
+    shift, capslock:                    '\u0625'
+    ctrl, alt, meta:                    none
+}
+
+key G {
+    label:                              '\u0644'
+    base:                               '\u0644'
+    shift, capslock:                    '\u0623'
+    ctrl, alt, meta:                    none
+}
+
+key H {
+    label:                              '\u0627'
+    base:                               '\u0627'
+    shift, capslock:                    '\u0622'
+    ctrl, alt, meta:                    none
+}
+
+key I {
+    label:                              '\u0647'
+    base:                               '\u0647'
+    shift, capslock:                    '\u0651'
+    ctrl, alt, meta:                    none
+}
+
+key J {
+    label:                              '\u062A'
+    base:                               '\u062A'
+    shift, capslock:                    '\u0629'
+    ctrl, alt, meta:                    none
+}
+
+key K {
+    label:                              '\u0646'
+    base:                               '\u0646'
+    shift, capslock:                    '\u00AB'
+    ctrl, alt, meta:                    none
+}
+
+key L {
+    label:                              '\u0645'
+    base:                               '\u0645'
+    shift, capslock:                    '\u00BB'
+    ctrl, alt, meta:                    none
+}
+
+key M {
+    label:                              '\u067E'
+    base:                               '\u067E'
+    shift, capslock:                    '\u0621'
+    ctrl, alt, meta:                    none
+}
+
+key N {
+    label:                              '\u062F'
+    base:                               '\u062F'
+    shift, capslock:                    '\u0654'
+    ctrl, alt, meta:                    none
+}
+
+key O {
+    label:                              '\u062E'
+    base:                               '\u062E'
+    shift, capslock:                    ']'
+    ctrl, alt, meta:                    none
+}
+
+key P {
+    label:                              '\u062D'
+    base:                               '\u062D'
+    shift, capslock:                    '['
+    ctrl, alt, meta:                    none
+}
+
+key Q {
+    label:                              '\u0636'
+    base:                               '\u0636'
+    shift, capslock:                    '\u0652'
+    ctrl, alt, meta:                    none
+}
+
+key R {
+    label:                              '\u0642'
+    base:                               '\u0642'
+    shift, capslock:                    '\u064B'
+    ctrl, alt, meta:                    none
+}
+
+key S {
+    label:                              '\u0633'
+    base:                               '\u0633'
+    shift, capslock:                    '\u0626'
+    ctrl, alt, meta:                    none
+}
+
+key T {
+    label:                              '\u0641'
+    base:                               '\u0641'
+    shift, capslock:                    '\u064F'
+    ctrl, alt, meta:                    none
+}
+
+key U {
+    label:                              '\u0639'
+    base:                               '\u0639'
+    shift, capslock:                    '\u064E'
+    ctrl, alt, meta:                    none
+}
+
+key V {
+    label:                              '\u0631'
+    base:                               '\u0631'
+    shift, capslock:                    '\u0670'
+    ctrl, alt, meta:                    none
+}
+
+key W {
+    label:                              '\u0635'
+    base:                               '\u0635'
+    shift, capslock:                    '\u064C'
+    ctrl, alt, meta:                    none
+}
+
+key X {
+    label:                              '\u0637'
+    base:                               '\u0637'
+    shift, capslock:                    '\u0653'
+    ctrl, alt, meta:                    none
+}
+
+key Y {
+    label:                              '\u063A'
+    base:                               '\u063A'
+    shift, capslock:                    '\u0650'
+    ctrl, alt, meta:                    none
+}
+
+key Z {
+    label:                              '\u0638'
+    base:                               '\u0638'
+    shift, capslock:                    '\u0643'
+    ctrl, alt, meta:                    none
+}
+
+key 0 {
+    label, number:                      '\u06F0'
+    base:                               '\u06F0'
+    shift:                              '('
+    ctrl, alt, meta:                    none
+}
+
+key 1 {
+    label, number:                      '\u06F1'
+    base:                               '\u06F1'
+    shift:                              '!'
+    ctrl, alt, meta:                    none
+}
+
+key 2 {
+    label, number:                      '\u06F2'
+    base:                               '\u06F2'
+    shift:                              '\u066C'
+    ctrl, alt, meta:                    none
+
+}
+key 3 {
+    label, number:                      '\u06F3'
+    base:                               '\u06F3'
+    shift:                              '\u066B'
+    ctrl, alt, meta:                    none
+}
+
+key 4 {
+    label, number:                      '\u06F4'
+    base:                               '\u06F4'
+    shift:                              '\uFDFC'
+    ctrl, alt, meta:                    none
+}
+
+key 5 {
+    label, number:                      '\u06F5'
+    base:                               '\u06F5'
+    shift:                              '\u066A'
+    ctrl, alt, meta:                    none
+}
+
+key 6 {
+    label, number:                      '\u06F6'
+    base:                               '\u06F6'
+    shift:                              '\u00D7'
+    ctrl, alt, meta:                    none
+}
+
+
+key 7 {
+    label, number:                      '\u06F7'
+    base:                               '\u06F7'
+    shift:                              '\u060C'
+    ctrl, alt, meta:                    none
+}
+
+key 8 {
+    label, number:                      '\u06F8'
+    base:                               '\u06F8'
+    shift:                              '*'
+    ctrl, alt, meta:                    none
+}
+
+key 9 {
+    label, number:                      '\u06F9'
+    base:                               '\u06F9'
+    shift:                              ')'
+    ctrl, alt, meta:                    none
+}
+
+key SPACE {
+    label:                              ' '
+    base:                               ' '
+    ctrl, alt, meta:                    none
+}
+
+key ENTER {
+    label:                              '\n'
+    base:                               '\n'
+    ctrl, alt, meta:                    none
+}
+
+key TAB {
+    label:                              '\t'
+    base:                               '\t'
+    ctrl, alt, meta:                    none
+}
+
+key COMMA {
+    label, number:                      '\u0648'
+    base:                               '\u0648'
+    shift:                              '<'
+    ctrl, alt, meta:                    none
+}
+
+key PERIOD {
+    label, number:                      '.'
+    base:                               '.'
+    shift:                              '>'
+    ctrl, alt, meta:                    none
+}
+
+key SLASH {
+    label, number:                      '/'
+    base:                               '/'
+    shift:                              '\u061F'
+    ctrl, alt, meta:                    none
+}
+
+key GRAVE {
+    label, number:                      '`'
+    base:                               '`'
+    shift:                              '\u00F7'
+    ctrl, alt, meta:                    none
+}
+
+
+key MINUS {
+    label, number:                      '-'
+    base:                               '-'
+    shift:                              '_'
+    ctrl, alt, meta:                    none
+}
+
+key EQUALS {
+    label, number:                      '='
+    base:                               '='
+    shift:                              '+'
+    ctrl, alt, meta:                    none
+}
+
+key LEFT_BRACKET {
+    label, number:                      '\u062C'
+    base:                               '\u062C'
+    shift:                              '}'
+    ctrl, alt, meta:                    none
+}
+
+key RIGHT_BRACKET {
+    label, number:                      '\u0686'
+    base:                               '\u0686'
+    shift:                              '{'
+    ctrl, alt, meta:                    none
+}
+
+key BACKSLASH {
+    label, number:                      '\\'
+    base:                               '\\'
+    shift:                              '|'
+    ctrl, alt, meta:                    none
+}
+
+key SEMICOLON {
+    label, number:                      '\u06A9'
+    base:                               '\u06A9'
+    shift:                              ':'
+    ctrl, alt, meta:                    none
+}
+
+key APOSTROPHE {
+    label, number:                      '\''
+    base:                               '\''
+    shift:                              '\"'
+    ctrl, alt, meta:                    none
+}
+
+### Numeric keypad ###
+
+key NUMPAD_0 {
+    label, number:                      '0'
+    base:                               fallback INSERT
+    numlock:                            '0'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_1 {
+    label, number:                      '1'
+    base:                               fallback MOVE_END
+    numlock:                            '1'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_2 {
+    label, number:                      '2'
+    base:                               fallback DPAD_DOWN
+    numlock:                            '2'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_3 {
+    label, number:                      '3'
+    base:                               fallback PAGE_DOWN
+    numlock:                            '3'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_4 {
+    label, number:                      '4'
+    base:                               fallback DPAD_LEFT
+    numlock:                            '4'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_5 {
+    label, number:                      '5'
+    base:                               fallback DPAD_CENTER
+    numlock:                            '5'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_6 {
+    label, number:                      '6'
+    base:                               fallback DPAD_RIGHT
+    numlock:                            '6'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_7 {
+    label, number:                      '7'
+    base:                               fallback MOVE_HOME
+    numlock:                            '7'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_8 {
+    label, number:                      '8'
+    base:                               fallback DPAD_UP
+    numlock:                            '8'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_9 {
+    label, number:                      '9'
+    base:                               fallback PAGE_UP
+    numlock:                            '9'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_LEFT_PAREN {
+    label, number:                      '('
+    base:                               '('
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_RIGHT_PAREN {
+    label, number:                      ')'
+    base:                               ')'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_DIVIDE {
+    label, number:                      '/'
+    base:                               '/'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_MULTIPLY {
+    label, number:                      '*'
+    base:                               '*'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_SUBTRACT {
+    label, number:                      '-'
+    base:                               '-'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_ADD {
+    label, number:                      '+'
+    base:                               '+'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_DOT {
+    label, number:                      '.'
+    base:                               fallback FORWARD_DEL
+    numlock:                            '.'
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_COMMA {
+    label, number:                      ','
+    base:                               ','
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_EQUALS {
+    label, number:                      '='
+    base:                               '='
+    ctrl, alt, meta:                    none
+}
+
+key NUMPAD_ENTER {
+    label:                              '\n'
+    base:                               '\n' fallback ENTER
+    ctrl, alt, meta:                    none fallback ENTER
+}
diff --git a/packages/InputDevices/res/values-af/strings.xml b/packages/InputDevices/res/values-af/strings.xml
index a36d01e..4301019 100644
--- a/packages/InputDevices/res/values-af/strings.xml
+++ b/packages/InputDevices/res/values-af/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litaus"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spaans (Latyn)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letties"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persies"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-am/strings.xml b/packages/InputDevices/res/values-am/strings.xml
index 3186add..ce3659a 100644
--- a/packages/InputDevices/res/values-am/strings.xml
+++ b/packages/InputDevices/res/values-am/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ሊቱዌኒያኛ"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ስፓኒሽ (ላቲን)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ላትቪያኛ"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"ፋርስኛ"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-ar/strings.xml b/packages/InputDevices/res/values-ar/strings.xml
index 1d3d9f5..2b0a6f9 100644
--- a/packages/InputDevices/res/values-ar/strings.xml
+++ b/packages/InputDevices/res/values-ar/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"الليتوانية"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"الإسبانية (اللاتينية)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"اللاتفية"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"الفارسية"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-az/strings.xml b/packages/InputDevices/res/values-az/strings.xml
index 25d7c91..a1f7c1c 100644
--- a/packages/InputDevices/res/values-az/strings.xml
+++ b/packages/InputDevices/res/values-az/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litva"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"İspan (Latın)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latış"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Fars Dili"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-b+sr+Latn/strings.xml b/packages/InputDevices/res/values-b+sr+Latn/strings.xml
index 88a977f..c60b59e 100644
--- a/packages/InputDevices/res/values-b+sr+Latn/strings.xml
+++ b/packages/InputDevices/res/values-b+sr+Latn/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litvanski"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"španski (Latinska Amerika)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"letonski"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"persijska"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-be/strings.xml b/packages/InputDevices/res/values-be/strings.xml
index a552fa5..e93d03a 100644
--- a/packages/InputDevices/res/values-be/strings.xml
+++ b/packages/InputDevices/res/values-be/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Літоўская"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Іспанская (Лацінская Амерыка)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Латышская"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Персідская"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-bg/strings.xml b/packages/InputDevices/res/values-bg/strings.xml
index e5e2c96..ee5cfa8 100644
--- a/packages/InputDevices/res/values-bg/strings.xml
+++ b/packages/InputDevices/res/values-bg/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Литовска клавиатурна подредба"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Исп. клав. подредба (Лат. Америка)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"латвийски"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"персийски"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-bn/strings.xml b/packages/InputDevices/res/values-bn/strings.xml
index a0ce313..945c891 100644
--- a/packages/InputDevices/res/values-bn/strings.xml
+++ b/packages/InputDevices/res/values-bn/strings.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="8016145283189546017">"ইনপুট ডিভাইসগুলি"</string>
+    <string name="app_label" msgid="8016145283189546017">"ইনপুট ডিভাইস"</string>
     <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android কীবোর্ড"</string>
     <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"ইংরেজি (UK)"</string>
     <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"ইংরেজি (US)"</string>
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"লিথুয়ানিয়ান"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"স্প্যানিশ (ল্যাটিন)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"লাটভিও"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"ফার্সী"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-bs/strings.xml b/packages/InputDevices/res/values-bs/strings.xml
index 9672ae8..ca1b8ff 100644
--- a/packages/InputDevices/res/values-bs/strings.xml
+++ b/packages/InputDevices/res/values-bs/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litvanski"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"španski (Latinska Amerika)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"latvijski"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"perzijski"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-ca/strings.xml b/packages/InputDevices/res/values-ca/strings.xml
index ee25a74..3c6ea15 100644
--- a/packages/InputDevices/res/values-ca/strings.xml
+++ b/packages/InputDevices/res/values-ca/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituà"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espanyol (llatí)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letó"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persa"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-cs/strings.xml b/packages/InputDevices/res/values-cs/strings.xml
index 3e7b9c8..a78663b 100644
--- a/packages/InputDevices/res/values-cs/strings.xml
+++ b/packages/InputDevices/res/values-cs/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litevština"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"španělština (Latinská Amerika)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Lotyšská klávesnice"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"perština"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-da/strings.xml b/packages/InputDevices/res/values-da/strings.xml
index 08fdee5..08ff4ca 100644
--- a/packages/InputDevices/res/values-da/strings.xml
+++ b/packages/InputDevices/res/values-da/strings.xml
@@ -3,7 +3,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="8016145283189546017">"Inputenheder"</string>
     <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android-tastatur"</string>
-    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Engelsk (UK)"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Engelsk (Storbritannien)"</string>
     <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"engelsk (USA)"</string>
     <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Engelsk (USA), international stil"</string>
     <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Engelsk (USA), Colemak-stil"</string>
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litauisk"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spansk (latinamerika)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Lettisk"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persisk"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-de/strings.xml b/packages/InputDevices/res/values-de/strings.xml
index 6af0030..1543ef2 100644
--- a/packages/InputDevices/res/values-de/strings.xml
+++ b/packages/InputDevices/res/values-de/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litauisch"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanisch (Lateinisch)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Lettisch"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persisch"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-el/strings.xml b/packages/InputDevices/res/values-el/strings.xml
index da6dca2..e5d1409 100644
--- a/packages/InputDevices/res/values-el/strings.xml
+++ b/packages/InputDevices/res/values-el/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Λιθουανικά"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Ισπανικά (Λατινικής Αμερικής)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Λετονικά"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Περσικά"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-en-rAU/strings.xml b/packages/InputDevices/res/values-en-rAU/strings.xml
index 01c2979..9217bc4 100644
--- a/packages/InputDevices/res/values-en-rAU/strings.xml
+++ b/packages/InputDevices/res/values-en-rAU/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lithuanian"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanish (Latin)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latvian"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persian"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-en-rCA/strings.xml b/packages/InputDevices/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..9217bc4
--- /dev/null
+++ b/packages/InputDevices/res/values-en-rCA/strings.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Input Devices"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android keyboard"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"English (UK)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"English (US)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"English (US), International style"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"English (US), Colemak style"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"English (US), Dvorak style"</string>
+    <string name="keyboard_layout_english_us_workman_label" msgid="2944541595262173111">"English (US), Workman style"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"German"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"French"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"French (Canada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russian"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russian, Mac style"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spanish"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Swiss French"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Swiss German"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgian"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgarian"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italian"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danish"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norwegian"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Swedish"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finnish"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croatian"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Czech"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonian"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hungarian"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Icelandic"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brazilian"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portuguese"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovak"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovenian"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turkish"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainian"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabic"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Greek"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebrew"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lithuanian"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanish (Latin)"</string>
+    <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latvian"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persian"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-en-rGB/strings.xml b/packages/InputDevices/res/values-en-rGB/strings.xml
index 01c2979..9217bc4 100644
--- a/packages/InputDevices/res/values-en-rGB/strings.xml
+++ b/packages/InputDevices/res/values-en-rGB/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lithuanian"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanish (Latin)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latvian"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persian"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-en-rIN/strings.xml b/packages/InputDevices/res/values-en-rIN/strings.xml
index 01c2979..9217bc4 100644
--- a/packages/InputDevices/res/values-en-rIN/strings.xml
+++ b/packages/InputDevices/res/values-en-rIN/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lithuanian"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanish (Latin)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latvian"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persian"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-en-rXC/strings.xml b/packages/InputDevices/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..43d7677
--- /dev/null
+++ b/packages/InputDevices/res/values-en-rXC/strings.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‎Input Devices‎‏‎‎‏‎"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎Android keyboard‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎‎‎‎English (UK)‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎English (US)‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‎English (US), International style‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎English (US), Colemak style‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‎‏‏‏‏‏‎‎‏‎‎English (US), Dvorak style‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_english_us_workman_label" msgid="2944541595262173111">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎English (US), Workman style‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎German‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‏‎French‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎French (Canada)‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‎Russian‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎Russian, Mac style‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎Spanish‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‎Swiss French‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‏‎‎Swiss German‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‎‎Belgian‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎Bulgarian‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‏‏‎‏‎Italian‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‏‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‎Danish‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‎Norwegian‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎Swedish‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‎‎Finnish‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎Croatian‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‎‏‏‏‎‏‏‏‏‎Czech‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎‎Estonian‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎Hungarian‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎Icelandic‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‎‎‏‏‎Brazilian‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎Portuguese‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‎‎Slovak‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‎‎Slovenian‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‏‎‎Turkish‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎Ukrainian‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‎‎Arabic‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎Greek‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎Hebrew‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‏‎‎‏‏‎‎Lithuanian‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎Spanish (Latin)‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_latvian" msgid="4405417142306250595">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎Latvian‎‏‎‎‏‎"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎Persian‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-es-rUS/strings.xml b/packages/InputDevices/res/values-es-rUS/strings.xml
index 6acf07b..68fcfd7 100644
--- a/packages/InputDevices/res/values-es-rUS/strings.xml
+++ b/packages/InputDevices/res/values-es-rUS/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituano"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Español (latino)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letón"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persa"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-es/strings.xml b/packages/InputDevices/res/values-es/strings.xml
index af1492a..86c82ed 100644
--- a/packages/InputDevices/res/values-es/strings.xml
+++ b/packages/InputDevices/res/values-es/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituano"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Español (Latinoamérica)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letón"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persa"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-et/strings.xml b/packages/InputDevices/res/values-et/strings.xml
index d03b82e..8bc5c25 100644
--- a/packages/InputDevices/res/values-et/strings.xml
+++ b/packages/InputDevices/res/values-et/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Leedu"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Hispaania (Ladina-Ameerika)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"läti keel"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"pärsia"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-eu/strings.xml b/packages/InputDevices/res/values-eu/strings.xml
index d18c6f8..4fadb97 100644
--- a/packages/InputDevices/res/values-eu/strings.xml
+++ b/packages/InputDevices/res/values-eu/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituaniera"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espainiera (Latinoamerika)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letoniera"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Pertsiera"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-fa/strings.xml b/packages/InputDevices/res/values-fa/strings.xml
index f2848a9..037e044 100644
--- a/packages/InputDevices/res/values-fa/strings.xml
+++ b/packages/InputDevices/res/values-fa/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"لیتوانیایی"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"اسپانیایی (لاتین)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"لتونیایی"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"فارسی"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-fi/strings.xml b/packages/InputDevices/res/values-fi/strings.xml
index 284efc8..65bd8d3 100644
--- a/packages/InputDevices/res/values-fi/strings.xml
+++ b/packages/InputDevices/res/values-fi/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"liettua"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"espanja (Latinalainen Amerikka)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"latvialainen"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"persia"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-fr-rCA/strings.xml b/packages/InputDevices/res/values-fr-rCA/strings.xml
index b26a0ea..8b132fa 100644
--- a/packages/InputDevices/res/values-fr-rCA/strings.xml
+++ b/packages/InputDevices/res/values-fr-rCA/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituanien"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espagnol (latin)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letton"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persan"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-fr/strings.xml b/packages/InputDevices/res/values-fr/strings.xml
index a428a23..baf749d 100644
--- a/packages/InputDevices/res/values-fr/strings.xml
+++ b/packages/InputDevices/res/values-fr/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituanien"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espagnol (latin)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letton"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persan"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-gl/strings.xml b/packages/InputDevices/res/values-gl/strings.xml
index bb0f2a0..c5bddc5 100644
--- a/packages/InputDevices/res/values-gl/strings.xml
+++ b/packages/InputDevices/res/values-gl/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituano"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Español (América Latina)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letón"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persa"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-gu/strings.xml b/packages/InputDevices/res/values-gu/strings.xml
index e83b0ca..0f8c752 100644
--- a/packages/InputDevices/res/values-gu/strings.xml
+++ b/packages/InputDevices/res/values-gu/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"લિથુનિયન"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"સ્પેનિશ (લેટિન)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"લાતવિયન"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"પર્શિયન"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-hi/strings.xml b/packages/InputDevices/res/values-hi/strings.xml
index 41966e4..c1bbd9d 100644
--- a/packages/InputDevices/res/values-hi/strings.xml
+++ b/packages/InputDevices/res/values-hi/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"लिथुआनियाई"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"स्पेनिश (लैटिन)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"लातवियाई"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"फ़ारसी"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-hr/strings.xml b/packages/InputDevices/res/values-hr/strings.xml
index 27066ad..ec02934 100644
--- a/packages/InputDevices/res/values-hr/strings.xml
+++ b/packages/InputDevices/res/values-hr/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litavski"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"španjolski (Latinska Amerika)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"latvijska"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"perzijski"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-hu/strings.xml b/packages/InputDevices/res/values-hu/strings.xml
index 6fbc3eb..a5412d4 100644
--- a/packages/InputDevices/res/values-hu/strings.xml
+++ b/packages/InputDevices/res/values-hu/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litván"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"spanyol (latin-amerikai)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"lett"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"perzsa"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-hy/strings.xml b/packages/InputDevices/res/values-hy/strings.xml
index 0d11645..b152b0f 100644
--- a/packages/InputDevices/res/values-hy/strings.xml
+++ b/packages/InputDevices/res/values-hy/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Լիտվերեն"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Իսպաներեն (Լատինական)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"լատիշերեն"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"պարսկերեն"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-in/strings.xml b/packages/InputDevices/res/values-in/strings.xml
index b2cbd6e..f2409d4 100644
--- a/packages/InputDevices/res/values-in/strings.xml
+++ b/packages/InputDevices/res/values-in/strings.xml
@@ -25,7 +25,7 @@
     <string name="keyboard_layout_swedish" msgid="732959109088479351">"Swedia"</string>
     <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finlandia"</string>
     <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Kroasia"</string>
-    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Cheska"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Ceko"</string>
     <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonia"</string>
     <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hungaria"</string>
     <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandia"</string>
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lithuania"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanyol (Latin)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latvi"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persia"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-is/strings.xml b/packages/InputDevices/res/values-is/strings.xml
index de91275..0e80bd4 100644
--- a/packages/InputDevices/res/values-is/strings.xml
+++ b/packages/InputDevices/res/values-is/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litháískt"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spænskt (latneskt)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Lettneska"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persneska"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-it/strings.xml b/packages/InputDevices/res/values-it/strings.xml
index c1c7faa..5da935b 100644
--- a/packages/InputDevices/res/values-it/strings.xml
+++ b/packages/InputDevices/res/values-it/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituano"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spagnolo (America Latina)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Lettone"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persiano"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-iw/strings.xml b/packages/InputDevices/res/values-iw/strings.xml
index b3bd576..5cbc4f4 100644
--- a/packages/InputDevices/res/values-iw/strings.xml
+++ b/packages/InputDevices/res/values-iw/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ליטאית"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ספרדית (לטינית)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"לטבית"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"פרסית"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-ja/strings.xml b/packages/InputDevices/res/values-ja/strings.xml
index 2b3daf5..aa77ddc 100644
--- a/packages/InputDevices/res/values-ja/strings.xml
+++ b/packages/InputDevices/res/values-ja/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"リトアニア語"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"スペイン語(中南米)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ラトビア語"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"ペルシャ語"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-ka/strings.xml b/packages/InputDevices/res/values-ka/strings.xml
index 66d147e..0b899c7 100644
--- a/packages/InputDevices/res/values-ka/strings.xml
+++ b/packages/InputDevices/res/values-ka/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ლიტვური"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ესპანური (ლათინური)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ლატვიური"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"სპარსული"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-kk/strings.xml b/packages/InputDevices/res/values-kk/strings.xml
index d253542..659f571 100644
--- a/packages/InputDevices/res/values-kk/strings.xml
+++ b/packages/InputDevices/res/values-kk/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Литван"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Испан (латын)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Латыш"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Парсы"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-km/strings.xml b/packages/InputDevices/res/values-km/strings.xml
index acd01ee..a3a789c 100644
--- a/packages/InputDevices/res/values-km/strings.xml
+++ b/packages/InputDevices/res/values-km/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"លីទុយអានី"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"អេស្ប៉ាញ (ឡាតាំង​)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ឡាតវីយ៉ា"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"ពីស៊ាន"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-kn/strings.xml b/packages/InputDevices/res/values-kn/strings.xml
index 966818d..f07b439 100644
--- a/packages/InputDevices/res/values-kn/strings.xml
+++ b/packages/InputDevices/res/values-kn/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ಲಿಥುವೇನಿಯನ್"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ಸ್ಪ್ಯಾನಿಶ್ (ಲ್ಯಾಟಿನ್)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ಲ್ಯಾಟ್ವಿಯನ್"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"ಪರ್ಶಿಯನ್"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-ko/strings.xml b/packages/InputDevices/res/values-ko/strings.xml
index 7758210..28dde45 100644
--- a/packages/InputDevices/res/values-ko/strings.xml
+++ b/packages/InputDevices/res/values-ko/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"리투아니아어"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"스페인어(라틴)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"라트비아어"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"페르시아어"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-ky/strings.xml b/packages/InputDevices/res/values-ky/strings.xml
index 578f70b..e12b69f 100644
--- a/packages/InputDevices/res/values-ky/strings.xml
+++ b/packages/InputDevices/res/values-ky/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Литвача"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Испанча (Латын)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Латвияча"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Фарсиче"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-lo/strings.xml b/packages/InputDevices/res/values-lo/strings.xml
index 05b1b83..8c040be 100644
--- a/packages/InputDevices/res/values-lo/strings.xml
+++ b/packages/InputDevices/res/values-lo/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"​ລິ​ທົວ​ນຽນ"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"​ສະ​ແປນ​ນິດ (ລາ​ຕິນ)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"​ລັດ​ວຽນ"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"ເປີຊຽນ"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-lt/strings.xml b/packages/InputDevices/res/values-lt/strings.xml
index 1dae850..0cd696f 100644
--- a/packages/InputDevices/res/values-lt/strings.xml
+++ b/packages/InputDevices/res/values-lt/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lietuvių"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Ispanų (Lotynų Amerika)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latvių k."</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persų"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-lv/strings.xml b/packages/InputDevices/res/values-lv/strings.xml
index 96dc53b..52a0751 100644
--- a/packages/InputDevices/res/values-lv/strings.xml
+++ b/packages/InputDevices/res/values-lv/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lietuviešu"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spāņu (latīņu)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latviešu"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persiešu"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-mk/strings.xml b/packages/InputDevices/res/values-mk/strings.xml
index 2fae1cf..2f9befe 100644
--- a/packages/InputDevices/res/values-mk/strings.xml
+++ b/packages/InputDevices/res/values-mk/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"литвански"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"шпански (латиница)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"латвиски"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"персиски"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-ml/strings.xml b/packages/InputDevices/res/values-ml/strings.xml
index 0faa40e..6b5ed06 100644
--- a/packages/InputDevices/res/values-ml/strings.xml
+++ b/packages/InputDevices/res/values-ml/strings.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="8016145283189546017">"ടൈപ്പുചെയ്യൽ ഉപകരണങ്ങൾ"</string>
+    <string name="app_label" msgid="8016145283189546017">"ഇൻപുട്ട് ഉപകരണങ്ങൾ"</string>
     <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android കീബോർഡ്"</string>
     <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"ഇംഗ്ലീഷ് (യുകെ)"</string>
     <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"ഇംഗ്ലീഷ് (യുഎസ്)"</string>
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ലിത്വാനിയന്‍"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"സ്‌പാനിഷ് (ലാറ്റിൻ)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ലാറ്റ്വിയന്‍"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"പേര്‍ഷ്യന്‍"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-mn/strings.xml b/packages/InputDevices/res/values-mn/strings.xml
index f1354fe..82e664e 100644
--- a/packages/InputDevices/res/values-mn/strings.xml
+++ b/packages/InputDevices/res/values-mn/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Литви"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Испани (Латин)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Латви"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Перс"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-mr/strings.xml b/packages/InputDevices/res/values-mr/strings.xml
index 9ffcc70..e8575a8 100644
--- a/packages/InputDevices/res/values-mr/strings.xml
+++ b/packages/InputDevices/res/values-mr/strings.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="8016145283189546017">"इनपुट डिव्‍हाइसेस"</string>
+    <string name="app_label" msgid="8016145283189546017">"इनपुट डिव्हाइस"</string>
     <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android कीबोर्ड"</string>
     <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"इंग्रजी (यूके)"</string>
     <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"इंग्रजी (यूएस)"</string>
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"लिथुआनियन"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"स्पॅनिश (लॅटिन)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ला‍ट्वियन"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"पर्शियन"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-ms/strings.xml b/packages/InputDevices/res/values-ms/strings.xml
index 04983e3..0f402e7 100644
--- a/packages/InputDevices/res/values-ms/strings.xml
+++ b/packages/InputDevices/res/values-ms/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Bahasa Lithuania"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Bahasa Sepanyol (Latin)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Bahasa Latvia"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Bahasa Parsi"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-my/strings.xml b/packages/InputDevices/res/values-my/strings.xml
index f3762b4..2467353 100644
--- a/packages/InputDevices/res/values-my/strings.xml
+++ b/packages/InputDevices/res/values-my/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"လီသွေနီယံ"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"စပိန် (လက်တင်)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"လာတ်ဗီယံ"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"ပါရှန်"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-nb/strings.xml b/packages/InputDevices/res/values-nb/strings.xml
index 37604e3..bd2879e 100644
--- a/packages/InputDevices/res/values-nb/strings.xml
+++ b/packages/InputDevices/res/values-nb/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litauisk"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spansk (latinsk)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latvisk"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persisk"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-ne/strings.xml b/packages/InputDevices/res/values-ne/strings.xml
index 4c3dec3..55969c9 100644
--- a/packages/InputDevices/res/values-ne/strings.xml
+++ b/packages/InputDevices/res/values-ne/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"लिथुआनियन"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"स्पेनेली(ल्याटिन)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"लातभियन"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"फारसी"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-nl/strings.xml b/packages/InputDevices/res/values-nl/strings.xml
index 31ade05..e40248f 100644
--- a/packages/InputDevices/res/values-nl/strings.xml
+++ b/packages/InputDevices/res/values-nl/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litouws"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spaans (Latijns-Amerika)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Lets"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Perzisch"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-pa/strings.xml b/packages/InputDevices/res/values-pa/strings.xml
index 574ce81..951adc8 100644
--- a/packages/InputDevices/res/values-pa/strings.xml
+++ b/packages/InputDevices/res/values-pa/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ਲੀਥੂਨੀਅਨ"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ਸਪੇਨੀ (ਲਾਤੀਨੀ)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ਲਾਤਵੀਅਨ"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"ਫ਼ਾਰਸੀ"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-pl/strings.xml b/packages/InputDevices/res/values-pl/strings.xml
index 2ae815e32..a307940 100644
--- a/packages/InputDevices/res/values-pl/strings.xml
+++ b/packages/InputDevices/res/values-pl/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litewski"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"hiszpański (Ameryka Łacińska)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"łotewski"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Perski"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-pt-rBR/strings.xml b/packages/InputDevices/res/values-pt-rBR/strings.xml
index a1503a4..ad2abe1 100644
--- a/packages/InputDevices/res/values-pt-rBR/strings.xml
+++ b/packages/InputDevices/res/values-pt-rBR/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituano"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espanhol (América Latina)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letão"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persa"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-pt-rPT/strings.xml b/packages/InputDevices/res/values-pt-rPT/strings.xml
index b806fc2..a5beee4 100644
--- a/packages/InputDevices/res/values-pt-rPT/strings.xml
+++ b/packages/InputDevices/res/values-pt-rPT/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituano"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espanhol (América Latina)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letão"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persa"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-pt/strings.xml b/packages/InputDevices/res/values-pt/strings.xml
index a1503a4..ad2abe1 100644
--- a/packages/InputDevices/res/values-pt/strings.xml
+++ b/packages/InputDevices/res/values-pt/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituano"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espanhol (América Latina)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letão"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persa"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-ro/strings.xml b/packages/InputDevices/res/values-ro/strings.xml
index 795e9a2..a933a70 100644
--- a/packages/InputDevices/res/values-ro/strings.xml
+++ b/packages/InputDevices/res/values-ro/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituaniană"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spaniolă (America Latină)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letonă"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persană"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-ru/strings.xml b/packages/InputDevices/res/values-ru/strings.xml
index ac4c81b..127a84d 100644
--- a/packages/InputDevices/res/values-ru/strings.xml
+++ b/packages/InputDevices/res/values-ru/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Литовский"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Испанский (Латинская Америка)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"латышский"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Персидский"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-si/strings.xml b/packages/InputDevices/res/values-si/strings.xml
index 945a097..8192c18 100644
--- a/packages/InputDevices/res/values-si/strings.xml
+++ b/packages/InputDevices/res/values-si/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ලිතුවේනියානු"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ස්පාඤ්ඤය (ලතින්)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ලැට්වියානු"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"පර්සියානු"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-sk/strings.xml b/packages/InputDevices/res/values-sk/strings.xml
index 2e76024f..c631095 100644
--- a/packages/InputDevices/res/values-sk/strings.xml
+++ b/packages/InputDevices/res/values-sk/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litovčina"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Španielčina (Latinská Amerika)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Lotyština"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Perzština"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-sl/strings.xml b/packages/InputDevices/res/values-sl/strings.xml
index a643c8e..c5a19be 100644
--- a/packages/InputDevices/res/values-sl/strings.xml
+++ b/packages/InputDevices/res/values-sl/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litovščina"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"španščina (Latinska Amerika)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"latvijščina"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"perzijščina"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-sq/strings.xml b/packages/InputDevices/res/values-sq/strings.xml
index 8a9000d..dbc5b4d 100644
--- a/packages/InputDevices/res/values-sq/strings.xml
+++ b/packages/InputDevices/res/values-sq/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"lituanisht"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"spanjisht (latine)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"letonisht"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persisht"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-sr/strings.xml b/packages/InputDevices/res/values-sr/strings.xml
index b06f6fc..29eea72 100644
--- a/packages/InputDevices/res/values-sr/strings.xml
+++ b/packages/InputDevices/res/values-sr/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"литвански"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"шпански (Латинска Америка)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"летонски"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"персијска"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-sv/strings.xml b/packages/InputDevices/res/values-sv/strings.xml
index 89cb54e..9954a2b 100644
--- a/packages/InputDevices/res/values-sv/strings.xml
+++ b/packages/InputDevices/res/values-sv/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litauiska"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanska (latinamerikansk)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"lettiska"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"persiska"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-sw/strings.xml b/packages/InputDevices/res/values-sw/strings.xml
index 9051685..13b3954 100644
--- a/packages/InputDevices/res/values-sw/strings.xml
+++ b/packages/InputDevices/res/values-sw/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Kilithuania"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Kihispania (Kilatini)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Kilatvia"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Kiajemi"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-ta/strings.xml b/packages/InputDevices/res/values-ta/strings.xml
index 32efe7b..fec9d8c 100644
--- a/packages/InputDevices/res/values-ta/strings.xml
+++ b/packages/InputDevices/res/values-ta/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"லிதுவேனியன்"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ஸ்பானிஷ் (லத்தீன்)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"லத்வியன்"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"பெர்சியன்"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-te/strings.xml b/packages/InputDevices/res/values-te/strings.xml
index e07d4c8..922868d 100644
--- a/packages/InputDevices/res/values-te/strings.xml
+++ b/packages/InputDevices/res/values-te/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"లిథువేనియన్"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"స్పానిష్ (లాటిన్)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"లాత్వియన్"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"పర్షియన్"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-th/strings.xml b/packages/InputDevices/res/values-th/strings.xml
index 50dc1e4..69d9ddf 100644
--- a/packages/InputDevices/res/values-th/strings.xml
+++ b/packages/InputDevices/res/values-th/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ลิทัวเนีย"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"สเปน (ละติน)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ลัตเวีย"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"เปอร์เซีย"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-tl/strings.xml b/packages/InputDevices/res/values-tl/strings.xml
index 0c3f1ff..4482128 100644
--- a/packages/InputDevices/res/values-tl/strings.xml
+++ b/packages/InputDevices/res/values-tl/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lithuanian"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanish (Latin)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latvian"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persian"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-tr/strings.xml b/packages/InputDevices/res/values-tr/strings.xml
index a8d9a0f..08e5e3e 100644
--- a/packages/InputDevices/res/values-tr/strings.xml
+++ b/packages/InputDevices/res/values-tr/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litvanca"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"İspanyolca (Latin)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letonca"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Farsça"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-uk/strings.xml b/packages/InputDevices/res/values-uk/strings.xml
index c818001..b81f672 100644
--- a/packages/InputDevices/res/values-uk/strings.xml
+++ b/packages/InputDevices/res/values-uk/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Литовська"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Іспанська (латиниця)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Латвійська"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Перська"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-ur/strings.xml b/packages/InputDevices/res/values-ur/strings.xml
index 2f2b84f..2508d5d 100644
--- a/packages/InputDevices/res/values-ur/strings.xml
+++ b/packages/InputDevices/res/values-ur/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"لتھوانیائی"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ہسپانوی (لاطینی)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"لاتویائی"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"فارسی"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-uz/strings.xml b/packages/InputDevices/res/values-uz/strings.xml
index 9c55615..4b9d08b 100644
--- a/packages/InputDevices/res/values-uz/strings.xml
+++ b/packages/InputDevices/res/values-uz/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litvan"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Ispan (lotin)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latish"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Fors"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-vi/strings.xml b/packages/InputDevices/res/values-vi/strings.xml
index 3ca715b..35c5960 100644
--- a/packages/InputDevices/res/values-vi/strings.xml
+++ b/packages/InputDevices/res/values-vi/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Tiếng Lithuania"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Tiếng Tây Ban Nha (La tinh)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Tiếng Latvia"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Tiếng Ba Tư"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-zh-rCN/strings.xml b/packages/InputDevices/res/values-zh-rCN/strings.xml
index c61dccb..5f1fc17 100644
--- a/packages/InputDevices/res/values-zh-rCN/strings.xml
+++ b/packages/InputDevices/res/values-zh-rCN/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"立陶宛语"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"西班牙语(拉丁美洲)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"拉脱维亚语"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"波斯语"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-zh-rHK/strings.xml b/packages/InputDevices/res/values-zh-rHK/strings.xml
index 9385df8..086f966 100644
--- a/packages/InputDevices/res/values-zh-rHK/strings.xml
+++ b/packages/InputDevices/res/values-zh-rHK/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"立陶宛文"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"西班牙文 (拉丁美洲)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"拉脫維亞文"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"波斯文"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-zh-rTW/strings.xml b/packages/InputDevices/res/values-zh-rTW/strings.xml
index 89ef558..5e2890f 100644
--- a/packages/InputDevices/res/values-zh-rTW/strings.xml
+++ b/packages/InputDevices/res/values-zh-rTW/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"立陶宛文"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"西班牙文 (拉丁美洲)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"拉脫維亞文"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"波斯文"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-zu/strings.xml b/packages/InputDevices/res/values-zu/strings.xml
index 0dcffb0..18d26a2 100644
--- a/packages/InputDevices/res/values-zu/strings.xml
+++ b/packages/InputDevices/res/values-zu/strings.xml
@@ -41,4 +41,5 @@
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Isi-Lithuanian"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Isi-Spanish (Latin)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Isi-Latvian"</string>
+    <string name="keyboard_layout_persian" msgid="3920643161015888527">"Isi-Persian"</string>
 </resources>
diff --git a/packages/InputDevices/res/values/strings.xml b/packages/InputDevices/res/values/strings.xml
index 5644c9a..1e26226 100644
--- a/packages/InputDevices/res/values/strings.xml
+++ b/packages/InputDevices/res/values/strings.xml
@@ -119,4 +119,7 @@
 
     <!-- Latvian keyboard layout label. [CHAR LIMIT=35] -->
     <string name="keyboard_layout_latvian">Latvian</string>
+
+    <!-- Persian keyboard layout label. [CHAR LIMIT=35] -->
+    <string name="keyboard_layout_persian">Persian</string>
 </resources>
diff --git a/packages/InputDevices/res/xml/keyboard_layouts.xml b/packages/InputDevices/res/xml/keyboard_layouts.xml
index a302162..c55711a 100644
--- a/packages/InputDevices/res/xml/keyboard_layouts.xml
+++ b/packages/InputDevices/res/xml/keyboard_layouts.xml
@@ -151,4 +151,8 @@
     <keyboard-layout android:name="keyboard_layout_latvian"
             android:label="@string/keyboard_layout_latvian"
             android:keyboardLayout="@raw/keyboard_layout_latvian_qwerty" />
+
+    <keyboard-layout android:name="keyboard_layout_persian"
+            android:label="@string/keyboard_layout_persian"
+            android:keyboardLayout="@raw/keyboard_layout_persian" />
 </keyboard-layouts>
diff --git a/packages/MtpDocumentsProvider/res/values-en-rCA/strings.xml b/packages/MtpDocumentsProvider/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..5f2167e
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-en-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
+    <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
+    <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+    <string name="accessing_notification_title" msgid="3030133609230917944">"Accessing files from <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+    <string name="error_busy_device" msgid="3997316850357386589">"The other device is busy. You can\'t transfer files until it\'s available."</string>
+    <string name="error_locked_device" msgid="7557872102188356147">"No files found. The other device may be locked. If so, unlock it and try again."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-en-rXC/strings.xml b/packages/MtpDocumentsProvider/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..370cca5
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-en-rXC/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="6271216747302322594">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎MTP Host‎‏‎‎‏‎"</string>
+    <string name="downloads_app_label" msgid="7120690641874849726">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎Downloads‎‏‎‎‏‎"</string>
+    <string name="root_name" msgid="5819495383921089536">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="STORAGE_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="accessing_notification_title" msgid="3030133609230917944">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎Accessing files from ‎‏‎‎‏‏‎<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="error_busy_device" msgid="3997316850357386589">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎The other device is busy. You can\'t transfer files until it\'s available.‎‏‎‎‏‎"</string>
+    <string name="error_locked_device" msgid="7557872102188356147">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‏‏‎No files found. The other device may be locked. If so, unlock it and try again.‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-gu/strings.xml b/packages/MtpDocumentsProvider/res/values-gu/strings.xml
index 40ec38d..468bd9d 100644
--- a/packages/MtpDocumentsProvider/res/values-gu/strings.xml
+++ b/packages/MtpDocumentsProvider/res/values-gu/strings.xml
@@ -20,6 +20,6 @@
     <string name="downloads_app_label" msgid="7120690641874849726">"ડાઉનલોડ્સ"</string>
     <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
     <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> ની ફાઇલોને ઍક્સેસ કરી રહ્યાં છે"</string>
-    <string name="error_busy_device" msgid="3997316850357386589">"અન્ય ઉપકરણ વ્યસ્ત છે. તે ઉપલબ્ધ ન થાય ત્યાં સુધી તમે ફાઇલોને સ્થાનાંતરિત કરી શકતાં નથી."</string>
+    <string name="error_busy_device" msgid="3997316850357386589">"અન્ય ઉપકરણ વ્યસ્ત છે. તે ઉપલબ્ધ ન થાય ત્યાં સુધી તમે ફાઇલોને ટ્રાન્સફર કરી શકતાં નથી."</string>
     <string name="error_locked_device" msgid="7557872102188356147">"કોઈ ફાઇલો મળી નહીં. અન્ય ઉપકરણ લૉક કરેલ હોઈ શકે છે. જો આમ હોય, તો તેને અનલૉક કરો અને ફરી પ્રયાસ કરો."</string>
 </resources>
diff --git a/packages/MtpDocumentsProvider/res/values-hi/strings.xml b/packages/MtpDocumentsProvider/res/values-hi/strings.xml
index 1cf1c03..bbd0ae7 100644
--- a/packages/MtpDocumentsProvider/res/values-hi/strings.xml
+++ b/packages/MtpDocumentsProvider/res/values-hi/strings.xml
@@ -20,6 +20,6 @@
     <string name="downloads_app_label" msgid="7120690641874849726">"डाउनलोड"</string>
     <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
     <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> से फ़ाइलें एक्सेस कर रहा है"</string>
-    <string name="error_busy_device" msgid="3997316850357386589">"दूसरा डिवाइस व्यस्त है. आप उसके उपलब्ध हो जाने तक फ़ाइलें स्थानांतरित नहीं कर सकते हैं."</string>
-    <string name="error_locked_device" msgid="7557872102188356147">"कोई फ़ाइल नहीं मिली. हो सकता है कि दूसरा डिवाइस लॉक हो. यदि ऐसा है, तो उसे अनलॉक करें और पुन: प्रयास करें."</string>
+    <string name="error_busy_device" msgid="3997316850357386589">"दूसरा डिवाइस व्यस्त है. आप उसके उपलब्ध हो जाने तक फ़ाइलें ट्रांसफ़र नहीं कर सकते."</string>
+    <string name="error_locked_device" msgid="7557872102188356147">"कोई फ़ाइल नहीं मिली. हो सकता है कि दूसरा डिवाइस लॉक हो. अगर ऐसा है, तो उसे अनलॉक करें और दोबारा कोशिश करें."</string>
 </resources>
diff --git a/packages/MtpDocumentsProvider/res/values-mr/strings.xml b/packages/MtpDocumentsProvider/res/values-mr/strings.xml
index 5b856dc..d581e10 100644
--- a/packages/MtpDocumentsProvider/res/values-mr/strings.xml
+++ b/packages/MtpDocumentsProvider/res/values-mr/strings.xml
@@ -19,7 +19,7 @@
     <string name="app_label" msgid="6271216747302322594">"MTP होस्ट"</string>
     <string name="downloads_app_label" msgid="7120690641874849726">"डाउनलोड"</string>
     <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
-    <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> मधून फायलींंमध्ये प्रवेश करीत आहे"</string>
-    <string name="error_busy_device" msgid="3997316850357386589">"अन्य डिव्हाइस व्यस्त आहे. ते उपलब्‍ध होईपर्यंत आपण फायली हस्तांतरित करू शकत नाही."</string>
-    <string name="error_locked_device" msgid="7557872102188356147">"कोणत्याही फायली आढळल्या नाहीत. अन्य डिव्हाइस कदाचित बंद असू शकते. तसे असल्यास, ते अनलॉक करा आणि पुन्हा प्रयत्न करा."</string>
+    <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> मधून फायलींंमध्ये प्रवेश करत आहे"</string>
+    <string name="error_busy_device" msgid="3997316850357386589">"दुसरे डिव्हाइस व्यस्त आहे. ते उपलब्‍ध होईपर्यंत तुम्ही फायली ट्रांसफर करू शकत नाही."</string>
+    <string name="error_locked_device" msgid="7557872102188356147">"कोणत्याही फायली आढळल्या नाहीत. दुसरे डिव्हाइस कदाचित बंद असू शकते. तसे असल्यास, ते अनलॉक करा आणि पुन्हा प्रयत्न करा."</string>
 </resources>
diff --git a/packages/MtpDocumentsProvider/res/values-pa/strings.xml b/packages/MtpDocumentsProvider/res/values-pa/strings.xml
index ab8ba15..7e3b892 100644
--- a/packages/MtpDocumentsProvider/res/values-pa/strings.xml
+++ b/packages/MtpDocumentsProvider/res/values-pa/strings.xml
@@ -20,6 +20,6 @@
     <string name="downloads_app_label" msgid="7120690641874849726">"ਡਾਊਨਲੋਡ"</string>
     <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
     <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> ਦੀਆਂ ਫ਼ਾਈਲਾਂ \'ਤੇ ਪਹੁੰਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string>
-    <string name="error_busy_device" msgid="3997316850357386589">"ਦੂਜੀ ਡੀਵਾਈਸ ਰੁਝੇਵੇਂ ਵਿੱਚ ਹੈ। ਉਸਦੇ ਉਪਲਬਧ ਹੋਣ ਤੱਕ ਤੁਸੀਂ ਫ਼ਾਈਲਾਂ ਦਾ ਤਬਾਦਲਾ ਨਹੀਂ ਕਰ ਸਕਦੇ।"</string>
-    <string name="error_locked_device" msgid="7557872102188356147">"ਕੋਈ ਫ਼ਾਈਲਾਂ ਨਹੀਂ ਮਿਲੀਆਂ। ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਦੂਜੀ ਡੀਵਾਈਸ ਲੌਕ ਹੋਵੇ। ਜੇਕਰ ਇੰਝ ਹੈ, ਤਾਂ ਉਸਨੂੰ ਅਨਲੌਕ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+    <string name="error_busy_device" msgid="3997316850357386589">"ਦੂਜਾ ਡੀਵਾਈਸ ਰੁਝੇਵੇਂ ਵਿੱਚ ਹੈ। ਉਸਦੇ ਉਪਲਬਧ ਹੋਣ ਤੱਕ ਤੁਸੀਂ ਫ਼ਾਈਲਾਂ ਦਾ ਤਬਾਦਲਾ ਨਹੀਂ ਕਰ ਸਕਦੇ।"</string>
+    <string name="error_locked_device" msgid="7557872102188356147">"ਕੋਈ ਫ਼ਾਈਲਾਂ ਨਹੀਂ ਮਿਲੀਆਂ। ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਦੂਜਾ ਡੀਵਾਈਸ ਲਾਕ ਹੋਵੇ। ਜੇਕਰ ਇੰਝ ਹੈ, ਤਾਂ ਉਸਨੂੰ ਅਣਲਾਕ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
 </resources>
diff --git a/packages/MtpDocumentsProvider/res/values-te/strings.xml b/packages/MtpDocumentsProvider/res/values-te/strings.xml
index 7add858..b3436bf 100644
--- a/packages/MtpDocumentsProvider/res/values-te/strings.xml
+++ b/packages/MtpDocumentsProvider/res/values-te/strings.xml
@@ -19,7 +19,7 @@
     <string name="app_label" msgid="6271216747302322594">"MTP హోస్ట్"</string>
     <string name="downloads_app_label" msgid="7120690641874849726">"డౌన్‌లోడ్‌లు"</string>
     <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
-    <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> నుండి ఫైల్‌లను ప్రాప్యత చేస్తోంది"</string>
+    <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> నుండి ఫైల్‌లను యాక్సెస్ చేస్తోంది"</string>
     <string name="error_busy_device" msgid="3997316850357386589">"ఇతర పరికరం బిజీగా ఉంది. అది అందుబాటులోకి వచ్చే వరకు మీరు ఫైల్‌లను బదిలీ చేయలేరు."</string>
     <string name="error_locked_device" msgid="7557872102188356147">"ఫైల్‍లు ఏవీ కనుగొనబడలేదు. ఇతర పరికరం లాక్ చేయబడి ఉండవచ్చు. అలా జరిగి ఉంటే, దాన్ని అన్‌లాక్ చేసి, ఆపై మళ్లీ ప్రయత్నించండి."</string>
 </resources>
diff --git a/packages/PrintSpooler/AndroidManifest.xml b/packages/PrintSpooler/AndroidManifest.xml
index 4b9415e..91e23dd 100644
--- a/packages/PrintSpooler/AndroidManifest.xml
+++ b/packages/PrintSpooler/AndroidManifest.xml
@@ -36,6 +36,8 @@
     <uses-permission android:name="android.permission.START_PRINT_SERVICE_CONFIG_ACTIVITY"/>
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+    <uses-permission android:name="android.permission.READ_PRINT_SERVICES" />
+    <uses-permission android:name="android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS" />
 
     <application
         android:allowClearUserData="true"
diff --git a/packages/PrintSpooler/jni/com_android_printspooler_util_BitmapSerializeUtils.cpp b/packages/PrintSpooler/jni/com_android_printspooler_util_BitmapSerializeUtils.cpp
index 1ce3949..7ff9ced 100644
--- a/packages/PrintSpooler/jni/com_android_printspooler_util_BitmapSerializeUtils.cpp
+++ b/packages/PrintSpooler/jni/com_android_printspooler_util_BitmapSerializeUtils.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "BitmapSerializeUtils"
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 
 #include <android/bitmap.h>
 #include <android/log.h>
diff --git a/packages/PrintSpooler/res/layout/print_activity.xml b/packages/PrintSpooler/res/layout/print_activity.xml
index 94519d4..774f320 100644
--- a/packages/PrintSpooler/res/layout/print_activity.xml
+++ b/packages/PrintSpooler/res/layout/print_activity.xml
@@ -31,7 +31,7 @@
         android:elevation="@dimen/preview_controls_elevation"
         android:background="?android:attr/colorPrimary">
 
-        <Spinner
+        <com.android.printspooler.widget.ClickInterceptSpinner
             android:id="@+id/destination_spinner"
             android:layout_width="wrap_content"
             android:minWidth="@dimen/preview_destination_spinner_width"
@@ -39,7 +39,7 @@
             android:layout_marginTop="4dip"
             android:dropDownWidth="wrap_content"
             android:minHeight="?android:attr/listPreferredItemHeightSmall">
-        </Spinner>
+        </com.android.printspooler.widget.ClickInterceptSpinner>
 
     </FrameLayout>
 
diff --git a/packages/PrintSpooler/res/values-ar/strings.xml b/packages/PrintSpooler/res/values-ar/strings.xml
index eab784d..f1fd93b 100644
--- a/packages/PrintSpooler/res/values-ar/strings.xml
+++ b/packages/PrintSpooler/res/values-ar/strings.xml
@@ -56,7 +56,7 @@
     <string name="print_select_printer" msgid="7388760939873368698">"حدد الطابعة"</string>
     <string name="print_forget_printer" msgid="5035287497291910766">"تجاهل الطابعة"</string>
     <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868">
-      <item quantity="zero">لم يتم العثور على أية طابعة (<xliff:g id="COUNT_1">%1$s</xliff:g>)</item>
+      <item quantity="zero">لم يتم العثور على أي طابعة (<xliff:g id="COUNT_1">%1$s</xliff:g>)</item>
       <item quantity="two">تم العثور على طابعتين (<xliff:g id="COUNT_1">%1$s</xliff:g>)</item>
       <item quantity="few">تم العثور على <xliff:g id="COUNT_1">%1$s</xliff:g> طابعات</item>
       <item quantity="many">تم العثور على <xliff:g id="COUNT_1">%1$s</xliff:g> طابعة</item>
diff --git a/packages/PrintSpooler/res/values-bn/strings.xml b/packages/PrintSpooler/res/values-bn/strings.xml
index 88ba6ee..cd74d22 100644
--- a/packages/PrintSpooler/res/values-bn/strings.xml
+++ b/packages/PrintSpooler/res/values-bn/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4469836075319831821">"প্রিন্ট স্পোলার"</string>
-    <string name="more_options_button" msgid="2243228396432556771">"আরো বিকল্প"</string>
+    <string name="more_options_button" msgid="2243228396432556771">"আরও বিকল্প"</string>
     <string name="label_destination" msgid="9132510997381599275">"গন্তব্য"</string>
     <string name="label_copies" msgid="3634531042822968308">"প্রতিলিপিগুলি"</string>
     <string name="label_copies_summary" msgid="3861966063536529540">"অনুলিপিগুলি:"</string>
@@ -27,16 +27,16 @@
     <string name="label_duplex" msgid="5370037254347072243">"দ্বিভুজ"</string>
     <string name="label_orientation" msgid="2853142581990496477">"সজ্জা"</string>
     <string name="label_pages" msgid="7768589729282182230">"পৃষ্ঠাগুলি"</string>
-    <string name="destination_default_text" msgid="5422708056807065710">"একটি মুদ্রক নির্বাচন করুন"</string>
+    <string name="destination_default_text" msgid="5422708056807065710">"একটি প্রিন্টার বেছে নিন"</string>
     <string name="template_all_pages" msgid="3322235982020148762">"সমস্ত <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
     <string name="template_page_range" msgid="428638530038286328">"<xliff:g id="PAGE_COUNT">%1$s</xliff:g> এর পরিসর"</string>
     <string name="pages_range_example" msgid="8558694453556945172">"যেমন, ১—৫,৮,১১—১৩"</string>
-    <string name="print_preview" msgid="8010217796057763343">"প্রিন্ট পূর্বরূপ"</string>
-    <string name="install_for_print_preview" msgid="6366303997385509332">"পূর্বরূপ দেখার জন্য PDF ভিউয়ার ইনস্টল করুন"</string>
+    <string name="print_preview" msgid="8010217796057763343">"প্রিন্ট প্রিভিউ"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"প্রিভিউ দেখার জন্য PDF ভিউয়ার ইনস্টল করুন"</string>
     <string name="printing_app_crashed" msgid="854477616686566398">"প্রিন্ট অ্যাপ্লিকেশান ক্র্যাশ করছে"</string>
     <string name="generating_print_job" msgid="3119608742651698916">"প্রিন্ট কার্য তৈরি করা হচ্ছে"</string>
-    <string name="save_as_pdf" msgid="5718454119847596853">"PDF হিসাবে সংরক্ষণ করুন"</string>
-    <string name="all_printers" msgid="5018829726861876202">"সমস্ত মুদ্রক…"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"পিডিএফ হিসাবে সেভ করুন"</string>
+    <string name="all_printers" msgid="5018829726861876202">"সমস্ত প্রিন্টার…"</string>
     <string name="print_dialog" msgid="32628687461331979">"প্রিন্ট ডায়লগ"</string>
     <string name="current_page_template" msgid="5145005201131935302">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
     <string name="page_description_template" msgid="6831239682256197161">"<xliff:g id="PAGE_COUNT">%2$d</xliff:g>টির মধ্যে <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> নম্বর পৃষ্ঠা"</string>
@@ -44,47 +44,47 @@
     <string name="expand_handle" msgid="7282974448109280522">"প্রসারিত করার হ্যান্ডেল"</string>
     <string name="collapse_handle" msgid="6886637989442507451">"সঙ্কুচিত করার হ্যান্ডেল"</string>
     <string name="print_button" msgid="645164566271246268">"প্রিন্ট করুন"</string>
-    <string name="savetopdf_button" msgid="2976186791686924743">"PDF হিসাবে সংরক্ষণ করুন"</string>
+    <string name="savetopdf_button" msgid="2976186791686924743">"পিডিএফ হিসাবে সেভ করুন"</string>
     <string name="print_options_expanded" msgid="6944679157471691859">"প্রিন্ট বিকল্প প্রসারিত হয়েছে"</string>
     <string name="print_options_collapsed" msgid="7455930445670414332">"প্রিন্ট বিকল্প সংকুচিত হয়েছে"</string>
-    <string name="search" msgid="5421724265322228497">"অনুসন্ধান করুন"</string>
-    <string name="all_printers_label" msgid="3178848870161526399">"সমস্ত মুদ্রক"</string>
+    <string name="search" msgid="5421724265322228497">"খুঁজুন"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"সমস্ত প্রিন্টার"</string>
     <string name="add_print_service_label" msgid="5356702546188981940">"পরিষেবা যোগ করুন"</string>
     <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"অনুসন্ধান বাক্স দেখানো হচ্ছে"</string>
     <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"অনুসন্ধান বাক্স লুকানো রয়েছে"</string>
-    <string name="print_add_printer" msgid="1088656468360653455">"মুদ্রক যোগ করুন"</string>
-    <string name="print_select_printer" msgid="7388760939873368698">"মুদ্রক নির্বাচন করুন"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"প্রিন্টার যোগ করুন"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"প্রিন্টার বেছে নিন"</string>
     <string name="print_forget_printer" msgid="5035287497291910766">"মুদ্রকটিকে সরিয়ে দিন"</string>
     <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868">
-      <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g>টি মুদ্রক খুঁজে পাওয়া গেছে</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g>টি মুদ্রক খুঁজে পাওয়া গেছে</item>
+      <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g>টি প্রিন্টার খুঁজে পাওয়া গেছে</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g>টি প্রিন্টার খুঁজে পাওয়া গেছে</item>
     </plurals>
     <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
-    <string name="printer_info_desc" msgid="7181988788991581654">"এই মুদ্রকটির বিষয়ে আরো তথ্য"</string>
+    <string name="printer_info_desc" msgid="7181988788991581654">"এই মুদ্রকটির বিষয়ে আরও তথ্য"</string>
     <string name="notification_channel_progress" msgid="872788690775721436">"এগুলি প্রিন্ট হচ্ছে"</string>
     <string name="notification_channel_failure" msgid="9042250774797916414">"এগুলি প্রিন্ট করা যায়নি"</string>
     <string name="could_not_create_file" msgid="3425025039427448443">"ফাইল তৈরি করা গেল না"</string>
-    <string name="print_services_disabled_toast" msgid="9089060734685174685">"কিছু মুদ্রণ পরিষেবা অক্ষম করা আছে"</string>
+    <string name="print_services_disabled_toast" msgid="9089060734685174685">"কিছু প্রিন্ট পরিষেবা অক্ষম করা আছে"</string>
     <string name="print_searching_for_printers" msgid="6550424555079932867">"মুদ্রকগুলি অনুসন্ধান করা হচ্ছে"</string>
     <string name="print_no_print_services" msgid="8561247706423327966">"প্রিন্ট পরিষেবা সক্ষম নেই"</string>
-    <string name="print_no_printers" msgid="4869403323900054866">"কোনো মুদ্রক পাওয়া যায়নি"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"কোনো প্রিন্টার পাওয়া যায়নি"</string>
     <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="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="recommended_services_title" msgid="3799434882937956924">"প্রস্তাবিত পরিষেবাগুলি"</string>
     <string name="disabled_services_title" msgid="7313253167968363211">"অক্ষম করা পরিষেবাগুলি"</string>
     <string name="all_services_title" msgid="5578662754874906455">"সমস্ত পরিষেবা"</string>
     <plurals name="print_services_recommendation_subtitle" formatted="false" msgid="5678487708807185138">
-      <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g>টি মুদ্রক খুঁজে পেতে ইনস্টল করুন</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g>টি মুদ্রক খুঁজে পেতে ইনস্টল করুন</item>
+      <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g>টি প্রিন্টার খুঁজে পেতে ইনস্টল করুন</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g>টি প্রিন্টার খুঁজে পেতে ইনস্টল করুন</item>
     </plurals>
     <string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> প্রিন্ট করা হচ্ছে"</string>
     <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> বাতিল করা হচ্ছে"</string>
-    <string name="failed_notification_title_template" msgid="2256217208186530973">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> মুদ্রক ত্রুটি"</string>
-    <string name="blocked_notification_title_template" msgid="1175435827331588646">"মুদ্রক <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> অবরুদ্ধ করেছে"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> প্রিন্টার ত্রুটি"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"প্রিন্টার <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> অবরুদ্ধ করেছে"</string>
     <string name="cancel" msgid="4373674107267141885">"বাতিল করুন"</string>
-    <string name="restart" msgid="2472034227037808749">"পুনর্সূচনা"</string>
+    <string name="restart" msgid="2472034227037808749">"রিস্টার্ট করুন"</string>
     <string name="no_connection_to_printer" msgid="2159246915977282728">"মুদ্রকে কোনো সংযোগ নেই"</string>
     <string name="reason_unknown" msgid="5507940196503246139">"অজানা"</string>
     <string name="print_service_security_warning_title" msgid="2160752291246775320">"<xliff:g id="SERVICE">%1$s</xliff:g> ব্যবহার করবেন?"</string>
@@ -99,13 +99,13 @@
     <item msgid="79513688117503758">"সংক্ষিপ্ত প্রান্ত"</item>
   </string-array>
   <string-array name="orientation_labels">
-    <item msgid="4061931020926489228">"প্রতিকৃতি"</item>
-    <item msgid="3199660090246166812">"ভূদৃশ্য"</item>
+    <item msgid="4061931020926489228">"পোর্ট্রেট"</item>
+    <item msgid="3199660090246166812">"ল্যান্ডস্কেপ"</item>
   </string-array>
     <string name="print_write_error_message" msgid="5787642615179572543">"ফাইলে লেখা যায়নি"</string>
     <string name="print_error_default_message" msgid="8602678405502922346">"দুঃখিত, এটি কাজ করেনি৷ আবার চেষ্টা করুন৷"</string>
     <string name="print_error_retry" msgid="1426421728784259538">"আবার চেষ্টা করুন"</string>
     <string name="print_error_printer_unavailable" msgid="8985614415253203381">"এই মূহুর্তে প্রিন্টার উপলব্ধ নয়।"</string>
-    <string name="print_cannot_load_page" msgid="6179560924492912009">"পূর্বরূপ প্রদর্শন করা যাবে না"</string>
-    <string name="print_preparing_preview" msgid="3939930735671364712">"পূর্বরূপ প্রস্তুত করছে..."</string>
+    <string name="print_cannot_load_page" msgid="6179560924492912009">"প্রিভিউ প্রদর্শন করা যাবে না"</string>
+    <string name="print_preparing_preview" msgid="3939930735671364712">"প্রিভিউ প্রস্তুত করা হচ্ছে..."</string>
 </resources>
diff --git a/packages/PrintSpooler/res/values-en-rCA/strings.xml b/packages/PrintSpooler/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..7fbfeb3
--- /dev/null
+++ b/packages/PrintSpooler/res/values-en-rCA/strings.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources 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">"Print Spooler"</string>
+    <string name="more_options_button" msgid="2243228396432556771">"More options"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destination"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Copies"</string>
+    <string name="label_copies_summary" msgid="3861966063536529540">"Copies:"</string>
+    <string name="label_paper_size" msgid="908654383827777759">"Paper size"</string>
+    <string name="label_paper_size_summary" msgid="5668204981332138168">"Paper size:"</string>
+    <string name="label_color" msgid="1108690305218188969">"Colour"</string>
+    <string name="label_duplex" msgid="5370037254347072243">"Two-sided"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientation"</string>
+    <string name="label_pages" msgid="7768589729282182230">"Pages"</string>
+    <string name="destination_default_text" msgid="5422708056807065710">"Select a printer"</string>
+    <string name="template_all_pages" msgid="3322235982020148762">"All <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
+    <string name="template_page_range" msgid="428638530038286328">"Range of <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"e.g. 1–5,8,11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Print preview"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Install PDF viewer for preview"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Printing app crashed"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Generating print job"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Save as PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"All printers…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Print dialogue"</string>
+    <string name="current_page_template" msgid="5145005201131935302">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
+    <string name="page_description_template" msgid="6831239682256197161">"Page <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> of <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
+    <string name="summary_template" msgid="8899734908625669193">"Summary, copies <xliff:g id="COPIES">%1$s</xliff:g>, paper size <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string>
+    <string name="expand_handle" msgid="7282974448109280522">"Expand handle"</string>
+    <string name="collapse_handle" msgid="6886637989442507451">"Collapse handle"</string>
+    <string name="print_button" msgid="645164566271246268">"Print"</string>
+    <string name="savetopdf_button" msgid="2976186791686924743">"Save to PDF"</string>
+    <string name="print_options_expanded" msgid="6944679157471691859">"Print options expanded"</string>
+    <string name="print_options_collapsed" msgid="7455930445670414332">"Print options collapsed"</string>
+    <string name="search" msgid="5421724265322228497">"Search"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"All printers"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Add service"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Search box shown"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Search box hidden"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Add printer"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Select printer"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Forget printer"</string>
+    <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868">
+      <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> printers found</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> printer found</item>
+    </plurals>
+    <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+    <string name="printer_info_desc" msgid="7181988788991581654">"More information about this printer"</string>
+    <string name="notification_channel_progress" msgid="872788690775721436">"Running print jobs"</string>
+    <string name="notification_channel_failure" msgid="9042250774797916414">"Failed print jobs"</string>
+    <string name="could_not_create_file" msgid="3425025039427448443">"Could not create file"</string>
+    <string name="print_services_disabled_toast" msgid="9089060734685174685">"Some print services are disabled"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Searching for printers"</string>
+    <string name="print_no_print_services" msgid="8561247706423327966">"No print services enabled"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"No printers found"</string>
+    <string name="cannot_add_printer" msgid="7840348733668023106">"Cannot add printers"</string>
+    <string name="select_to_add_printers" msgid="3800709038689830974">"Select to add printer"</string>
+    <string name="enable_print_service" msgid="3482815747043533842">"Select to enable"</string>
+    <string name="enabled_services_title" msgid="7036986099096582296">"Enabled services"</string>
+    <string name="recommended_services_title" msgid="3799434882937956924">"Recommended services"</string>
+    <string name="disabled_services_title" msgid="7313253167968363211">"Disabled services"</string>
+    <string name="all_services_title" msgid="5578662754874906455">"All services"</string>
+    <plurals name="print_services_recommendation_subtitle" formatted="false" msgid="5678487708807185138">
+      <item quantity="other">Install to discover <xliff:g id="COUNT_1">%1$s</xliff:g> printers</item>
+      <item quantity="one">Install to discover <xliff:g id="COUNT_0">%1$s</xliff:g> printer</item>
+    </plurals>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Printing <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelling <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Printer error <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printer blocked <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancel" msgid="4373674107267141885">"Cancel"</string>
+    <string name="restart" msgid="2472034227037808749">"Restart"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"No connection to printer"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"unknown"</string>
+    <string name="print_service_security_warning_title" msgid="2160752291246775320">"Use <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
+    <string name="print_service_security_warning_summary" msgid="1427434625361692006">"Your document may pass through one or more servers on its way to the printer."</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Black &amp; White"</item>
+    <item msgid="2762241247228983754">"Colour"</item>
+  </string-array>
+  <string-array name="duplex_mode_labels">
+    <item msgid="3882302912790928315">"None"</item>
+    <item msgid="7296563835355641719">"Long edge"</item>
+    <item msgid="79513688117503758">"Short edge"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Portrait"</item>
+    <item msgid="3199660090246166812">"Landscape"</item>
+  </string-array>
+    <string name="print_write_error_message" msgid="5787642615179572543">"Couldn\'t write to file"</string>
+    <string name="print_error_default_message" msgid="8602678405502922346">"Sorry, that didn\'t work. Try again."</string>
+    <string name="print_error_retry" msgid="1426421728784259538">"Retry"</string>
+    <string name="print_error_printer_unavailable" msgid="8985614415253203381">"This printer isn\'t available right now."</string>
+    <string name="print_cannot_load_page" msgid="6179560924492912009">"Can\'t display preview"</string>
+    <string name="print_preparing_preview" msgid="3939930735671364712">"Preparing preview…"</string>
+</resources>
diff --git a/packages/PrintSpooler/res/values-en-rXC/strings.xml b/packages/PrintSpooler/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..2063889
--- /dev/null
+++ b/packages/PrintSpooler/res/values-en-rXC/strings.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources 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">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎Print Spooler‎‏‎‎‏‎"</string>
+    <string name="more_options_button" msgid="2243228396432556771">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‏‎More options‎‏‎‎‏‎"</string>
+    <string name="label_destination" msgid="9132510997381599275">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎Destination‎‏‎‎‏‎"</string>
+    <string name="label_copies" msgid="3634531042822968308">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎Copies‎‏‎‎‏‎"</string>
+    <string name="label_copies_summary" msgid="3861966063536529540">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‎‎‏‎‎‎‎‏‎‎‎Copies:‎‏‎‎‏‎"</string>
+    <string name="label_paper_size" msgid="908654383827777759">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‏‏‎Paper size‎‏‎‎‏‎"</string>
+    <string name="label_paper_size_summary" msgid="5668204981332138168">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‎Paper size:‎‏‎‎‏‎"</string>
+    <string name="label_color" msgid="1108690305218188969">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‎‏‎Color‎‏‎‎‏‎"</string>
+    <string name="label_duplex" msgid="5370037254347072243">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎Two-sided‎‏‎‎‏‎"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‏‏‎‏‎Orientation‎‏‎‎‏‎"</string>
+    <string name="label_pages" msgid="7768589729282182230">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‎‎‏‎‏‎‏‏‎‎Pages‎‏‎‎‏‎"</string>
+    <string name="destination_default_text" msgid="5422708056807065710">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‎Select a printer‎‏‎‎‏‎"</string>
+    <string name="template_all_pages" msgid="3322235982020148762">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‎All ‎‏‎‎‏‏‎<xliff:g id="PAGE_COUNT">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="template_page_range" msgid="428638530038286328">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎Range of ‎‏‎‎‏‏‎<xliff:g id="PAGE_COUNT">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‎‎‎e.g. 1—5,8,11—13‎‏‎‎‏‎"</string>
+    <string name="print_preview" msgid="8010217796057763343">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎Print preview‎‏‎‎‏‎"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎Install PDF viewer for preview‎‏‎‎‏‎"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎Printing app crashed‎‏‎‎‏‎"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‏‏‎‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎Generating print job‎‏‎‎‏‎"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‎Save as PDF‎‏‎‎‏‎"</string>
+    <string name="all_printers" msgid="5018829726861876202">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎All printers…‎‏‎‎‏‎"</string>
+    <string name="print_dialog" msgid="32628687461331979">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‎Print dialog‎‏‎‎‏‎"</string>
+    <string name="current_page_template" msgid="5145005201131935302">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>‎‏‎‎‏‏‏‎/‎‏‎‎‏‏‎<xliff:g id="PAGE_COUNT">%2$d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="page_description_template" msgid="6831239682256197161">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‎‎‏‎Page ‎‏‎‎‏‏‎<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>‎‏‎‎‏‏‏‎ of ‎‏‎‎‏‏‎<xliff:g id="PAGE_COUNT">%2$d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="summary_template" msgid="8899734908625669193">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‎‏‎Summary, copies ‎‏‎‎‏‏‎<xliff:g id="COPIES">%1$s</xliff:g>‎‏‎‎‏‏‏‎, paper size ‎‏‎‎‏‏‎<xliff:g id="PAPER_SIZE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="expand_handle" msgid="7282974448109280522">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‎Expand handle‎‏‎‎‏‎"</string>
+    <string name="collapse_handle" msgid="6886637989442507451">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎Collapse handle‎‏‎‎‏‎"</string>
+    <string name="print_button" msgid="645164566271246268">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‏‎‎‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎Print‎‏‎‎‏‎"</string>
+    <string name="savetopdf_button" msgid="2976186791686924743">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‏‏‎Save to PDF‎‏‎‎‏‎"</string>
+    <string name="print_options_expanded" msgid="6944679157471691859">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‎Print options expanded‎‏‎‎‏‎"</string>
+    <string name="print_options_collapsed" msgid="7455930445670414332">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎Print options collapsed‎‏‎‎‏‎"</string>
+    <string name="search" msgid="5421724265322228497">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎Search‎‏‎‎‏‎"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‎‏‎‏‎‎‎‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‎All printers‎‏‎‎‏‎"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎Add service‎‏‎‎‏‎"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎‎Search box shown‎‏‎‎‏‎"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‏‏‎Search box hidden‎‏‎‎‏‎"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎Add printer‎‏‎‎‏‎"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‎Select printer‎‏‎‎‏‎"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎Forget printer‎‏‎‎‏‎"</string>
+    <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎ printers found‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%1$s</xliff:g>‎‏‎‎‏‏‏‎ printer found‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="printer_extended_description_template" msgid="1366699227703381874">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎ - ‎‏‎‎‏‏‎<xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="printer_info_desc" msgid="7181988788991581654">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎More information about this printer‎‏‎‎‏‎"</string>
+    <string name="notification_channel_progress" msgid="872788690775721436">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎Running print jobs‎‏‎‎‏‎"</string>
+    <string name="notification_channel_failure" msgid="9042250774797916414">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‏‏‏‏‏‏‏‎‎Failed print jobs‎‏‎‎‏‎"</string>
+    <string name="could_not_create_file" msgid="3425025039427448443">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‏‎‎‏‏‏‏‎‏‏‎Could not create file‎‏‎‎‏‎"</string>
+    <string name="print_services_disabled_toast" msgid="9089060734685174685">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‏‎‏‎Some print services are disabled‎‏‎‎‏‎"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎‏‏‎Searching for printers‎‏‎‎‏‎"</string>
+    <string name="print_no_print_services" msgid="8561247706423327966">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‎‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎No print services enabled‎‏‎‎‏‎"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎No printers found‎‏‎‎‏‎"</string>
+    <string name="cannot_add_printer" msgid="7840348733668023106">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎‎Cannot add printers‎‏‎‎‏‎"</string>
+    <string name="select_to_add_printers" msgid="3800709038689830974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‎Select to add printer‎‏‎‎‏‎"</string>
+    <string name="enable_print_service" msgid="3482815747043533842">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎Select to enable‎‏‎‎‏‎"</string>
+    <string name="enabled_services_title" msgid="7036986099096582296">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎Enabled services‎‏‎‎‏‎"</string>
+    <string name="recommended_services_title" msgid="3799434882937956924">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‎‎Recommended services‎‏‎‎‏‎"</string>
+    <string name="disabled_services_title" msgid="7313253167968363211">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‎Disabled services‎‏‎‎‏‎"</string>
+    <string name="all_services_title" msgid="5578662754874906455">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‏‎‏‎‏‏‏‎All services‎‏‎‎‏‎"</string>
+    <plurals name="print_services_recommendation_subtitle" formatted="false" msgid="5678487708807185138">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‎‎Install to discover ‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎ printers‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‎‎Install to discover ‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%1$s</xliff:g>‎‏‎‎‏‏‏‎ printer‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎Printing ‎‏‎‎‏‏‎<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‎‎‏‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‎Cancelling ‎‏‎‎‏‏‎<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‎Printer error ‎‏‎‎‏‏‎<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎Printer blocked ‎‏‎‎‏‏‎<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="cancel" msgid="4373674107267141885">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎Cancel‎‏‎‎‏‎"</string>
+    <string name="restart" msgid="2472034227037808749">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‎‏‎‎‎‎‏‏‎‏‏‎‏‎Restart‎‏‎‎‏‎"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎No connection to printer‎‏‎‎‏‎"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎unknown‎‏‎‎‏‎"</string>
+    <string name="print_service_security_warning_title" msgid="2160752291246775320">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‏‎‎‎‎‎‏‏‎‎‎‎Use ‎‏‎‎‏‏‎<xliff:g id="SERVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
+    <string name="print_service_security_warning_summary" msgid="1427434625361692006">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‏‎‏‎‏‎‎‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎Your document may pass through one or more servers on its way to the printer.‎‏‎‎‏‎"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‎‏‏‎‎‏‎Black &amp; White‎‏‎‎‏‎"</item>
+    <item msgid="2762241247228983754">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‎‎Color‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="duplex_mode_labels">
+    <item msgid="3882302912790928315">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‏‏‎‏‎‏‏‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‏‎‏‏‎None‎‏‎‎‏‎"</item>
+    <item msgid="7296563835355641719">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‎‏‏‏‎‏‏‏‎Long edge‎‏‎‎‏‎"</item>
+    <item msgid="79513688117503758">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‎Short edge‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‎‎‎‏‏‎‎‎Portrait‎‏‎‎‏‎"</item>
+    <item msgid="3199660090246166812">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎Landscape‎‏‎‎‏‎"</item>
+  </string-array>
+    <string name="print_write_error_message" msgid="5787642615179572543">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‏‎Couldn\'t write to file‎‏‎‎‏‎"</string>
+    <string name="print_error_default_message" msgid="8602678405502922346">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎Sorry, that didn\'t work. Try again.‎‏‎‎‏‎"</string>
+    <string name="print_error_retry" msgid="1426421728784259538">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‏‎‎‏‎‎Retry‎‏‎‎‏‎"</string>
+    <string name="print_error_printer_unavailable" msgid="8985614415253203381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‏‎This printer isn\'t available right now.‎‏‎‎‏‎"</string>
+    <string name="print_cannot_load_page" msgid="6179560924492912009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‎Can\'t display preview‎‏‎‎‏‎"</string>
+    <string name="print_preparing_preview" msgid="3939930735671364712">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎Preparing preview…‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/PrintSpooler/res/values-gu/strings.xml b/packages/PrintSpooler/res/values-gu/strings.xml
index f5d698d..4d035da 100644
--- a/packages/PrintSpooler/res/values-gu/strings.xml
+++ b/packages/PrintSpooler/res/values-gu/strings.xml
@@ -26,7 +26,7 @@
     <string name="label_color" msgid="1108690305218188969">"રંગ"</string>
     <string name="label_duplex" msgid="5370037254347072243">"દ્વિભુજ"</string>
     <string name="label_orientation" msgid="2853142581990496477">"ઓરિએન્ટેશન"</string>
-    <string name="label_pages" msgid="7768589729282182230">"પૃષ્ઠો"</string>
+    <string name="label_pages" msgid="7768589729282182230">"પેજ"</string>
     <string name="destination_default_text" msgid="5422708056807065710">"પ્રિન્ટર પસંદ કરો"</string>
     <string name="template_all_pages" msgid="3322235982020148762">"તમામ <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
     <string name="template_page_range" msgid="428638530038286328">"<xliff:g id="PAGE_COUNT">%1$s</xliff:g> ની શ્રેણી"</string>
@@ -84,7 +84,7 @@
     <string name="failed_notification_title_template" msgid="2256217208186530973">"પ્રિન્ટર ભૂલ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
     <string name="blocked_notification_title_template" msgid="1175435827331588646">"પ્રિન્ટરે <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> અવરોધિત કર્યું"</string>
     <string name="cancel" msgid="4373674107267141885">"રદ કરો"</string>
-    <string name="restart" msgid="2472034227037808749">"પુનઃપ્રારંભ કરો"</string>
+    <string name="restart" msgid="2472034227037808749">"રિસ્ટાર્ટ કરો"</string>
     <string name="no_connection_to_printer" msgid="2159246915977282728">"પ્રિન્ટર માટે કોઈ કનેક્શન નથી"</string>
     <string name="reason_unknown" msgid="5507940196503246139">"અજાણ્યું"</string>
     <string name="print_service_security_warning_title" msgid="2160752291246775320">"<xliff:g id="SERVICE">%1$s</xliff:g> નો ઉપયોગ કરીએ?"</string>
diff --git a/packages/PrintSpooler/res/values-hi/strings.xml b/packages/PrintSpooler/res/values-hi/strings.xml
index 809431d..37777d2 100644
--- a/packages/PrintSpooler/res/values-hi/strings.xml
+++ b/packages/PrintSpooler/res/values-hi/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4469836075319831821">"प्रिंट स्पूलर"</string>
-    <string name="more_options_button" msgid="2243228396432556771">"अधिक विकल्प"</string>
+    <string name="more_options_button" msgid="2243228396432556771">"ज़्यादा विकल्प"</string>
     <string name="label_destination" msgid="9132510997381599275">"गंतव्य"</string>
     <string name="label_copies" msgid="3634531042822968308">"प्रतियां"</string>
     <string name="label_copies_summary" msgid="3861966063536529540">"प्रतियां:"</string>
@@ -25,33 +25,33 @@
     <string name="label_paper_size_summary" msgid="5668204981332138168">"काग़ज़ का आकार:"</string>
     <string name="label_color" msgid="1108690305218188969">"रंग"</string>
     <string name="label_duplex" msgid="5370037254347072243">"दो-तरफ़ा"</string>
-    <string name="label_orientation" msgid="2853142581990496477">"अभिविन्‍यास"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"स्क्रीन की दिशा"</string>
     <string name="label_pages" msgid="7768589729282182230">"पेज"</string>
     <string name="destination_default_text" msgid="5422708056807065710">"कोई प्रिंटर चुनें"</string>
     <string name="template_all_pages" msgid="3322235982020148762">"सभी <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
     <string name="template_page_range" msgid="428638530038286328">"पेज संख्या <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
-    <string name="pages_range_example" msgid="8558694453556945172">"उदा. 1—5,8,11—13"</string>
-    <string name="print_preview" msgid="8010217796057763343">"प्रिंट पूर्वावलोकन"</string>
-    <string name="install_for_print_preview" msgid="6366303997385509332">"पूर्वावलोकन के लिए PDF व्यूअर इंस्टॉल करें"</string>
-    <string name="printing_app_crashed" msgid="854477616686566398">"प्रिंटिंग ऐप्लिकेशन क्रैश हो गया"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"उदाहरण 1—5,8,11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"प्रिंट की झलक"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"झलक देखने के लिए PDF व्यूअर इंस्टॉल करें"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"प्रिंटिंग ऐप बंद हो गया"</string>
     <string name="generating_print_job" msgid="3119608742651698916">"प्रिंट कार्य जनरेट हो रहा है"</string>
-    <string name="save_as_pdf" msgid="5718454119847596853">"PDF के रूप में जोड़ें"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"पीडीएफ़ के तौर पर सेव करें"</string>
     <string name="all_printers" msgid="5018829726861876202">"सभी प्रिंटर..."</string>
     <string name="print_dialog" msgid="32628687461331979">"प्रिंट डॉयलॉग"</string>
     <string name="current_page_template" msgid="5145005201131935302">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
     <string name="page_description_template" msgid="6831239682256197161">"<xliff:g id="PAGE_COUNT">%2$d</xliff:g> में से पेज <xliff:g id="CURRENT_PAGE">%1$d</xliff:g>"</string>
     <string name="summary_template" msgid="8899734908625669193">"सारांश, प्रतियां <xliff:g id="COPIES">%1$s</xliff:g>, काग़ज़ का आकार <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string>
-    <string name="expand_handle" msgid="7282974448109280522">"हैंडल विस्तृत करें"</string>
-    <string name="collapse_handle" msgid="6886637989442507451">"हैंडल संक्षिप्त करें"</string>
+    <string name="expand_handle" msgid="7282974448109280522">"हैंडल का विस्तार करें"</string>
+    <string name="collapse_handle" msgid="6886637989442507451">"हैंडल को छोटा करें"</string>
     <string name="print_button" msgid="645164566271246268">"प्रिंट करें"</string>
-    <string name="savetopdf_button" msgid="2976186791686924743">"PDF में जोड़ें"</string>
+    <string name="savetopdf_button" msgid="2976186791686924743">"पीडीएफ़ में सेव करें"</string>
     <string name="print_options_expanded" msgid="6944679157471691859">"प्रिंट विकल्पों को विस्तृत किया गया"</string>
     <string name="print_options_collapsed" msgid="7455930445670414332">"प्रिंट विकल्पों को संक्षिप्त किया गया"</string>
-    <string name="search" msgid="5421724265322228497">"खोजें"</string>
+    <string name="search" msgid="5421724265322228497">"सर्च करें"</string>
     <string name="all_printers_label" msgid="3178848870161526399">"सभी प्रिंटर"</string>
     <string name="add_print_service_label" msgid="5356702546188981940">"सेवा जोड़ें"</string>
-    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"खोज बॉक्स प्रदर्शित है"</string>
-    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"खोज बॉक्स छिपा हुआ है"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"सर्च बॉक्स दिखाई दे रहा है"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"सर्च बॉक्स छिपा हुआ है"</string>
     <string name="print_add_printer" msgid="1088656468360653455">"प्रिंटर जोड़ें"</string>
     <string name="print_select_printer" msgid="7388760939873368698">"प्रिंटर चुनें"</string>
     <string name="print_forget_printer" msgid="5035287497291910766">"प्रिंटर को भूल जाएं"</string>
@@ -60,12 +60,12 @@
       <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिंटर मिले</item>
     </plurals>
     <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
-    <string name="printer_info_desc" msgid="7181988788991581654">"इस प्रिंटर के बारे में अधिक जानकारी"</string>
+    <string name="printer_info_desc" msgid="7181988788991581654">"इस प्रिंटर के बारे में ज़्यादा जानकारी"</string>
     <string name="notification_channel_progress" msgid="872788690775721436">"चल रहे प्रिंट कार्य"</string>
     <string name="notification_channel_failure" msgid="9042250774797916414">"असफल रहे प्रिंट कार्य"</string>
     <string name="could_not_create_file" msgid="3425025039427448443">"फ़ाइल नहीं बनाई जा सकी"</string>
     <string name="print_services_disabled_toast" msgid="9089060734685174685">"कुछ प्रिंट सेवाएं अक्षम हैं"</string>
-    <string name="print_searching_for_printers" msgid="6550424555079932867">"प्रिंटर खोज रहा है"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"प्रिंटर सर्च कर रहा है"</string>
     <string name="print_no_print_services" msgid="8561247706423327966">"कोई भी प्रिंट सेवा सक्षम नहीं है"</string>
     <string name="print_no_printers" msgid="4869403323900054866">"कोई प्रिंटर नहीं मिले"</string>
     <string name="cannot_add_printer" msgid="7840348733668023106">"प्रिंटर जोड़े नहीं जा सकते"</string>
@@ -83,7 +83,7 @@
     <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> रद्द हो रहा है"</string>
     <string name="failed_notification_title_template" msgid="2256217208186530973">"प्रिंटर गड़बड़ी <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
     <string name="blocked_notification_title_template" msgid="1175435827331588646">"प्रिंटर अवरोधित <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
-    <string name="cancel" msgid="4373674107267141885">"अभी नहीं"</string>
+    <string name="cancel" msgid="4373674107267141885">"रद्द करें"</string>
     <string name="restart" msgid="2472034227037808749">"पुन: आरंभ करें"</string>
     <string name="no_connection_to_printer" msgid="2159246915977282728">"प्रिंटर के लिए कोई कनेक्शन नहीं"</string>
     <string name="reason_unknown" msgid="5507940196503246139">"अज्ञात"</string>
@@ -106,6 +106,6 @@
     <string name="print_error_default_message" msgid="8602678405502922346">"क्षमा करें, उससे बात नहीं बनी. पुन: प्रयास करें."</string>
     <string name="print_error_retry" msgid="1426421728784259538">"फिर से प्रयास करें"</string>
     <string name="print_error_printer_unavailable" msgid="8985614415253203381">"यह प्रिंटर इस समय उपलब्ध नहीं है."</string>
-    <string name="print_cannot_load_page" msgid="6179560924492912009">"पूर्वावलोकन प्रदर्शित नहीं किया जा सकता"</string>
-    <string name="print_preparing_preview" msgid="3939930735671364712">"पूर्वावलोकन तैयार हो रहा है..."</string>
+    <string name="print_cannot_load_page" msgid="6179560924492912009">"झलक नहीं दिखाई जा सकती"</string>
+    <string name="print_preparing_preview" msgid="3939930735671364712">"झलक तैयार हो रही है..."</string>
 </resources>
diff --git a/packages/PrintSpooler/res/values-iw/strings.xml b/packages/PrintSpooler/res/values-iw/strings.xml
index 6000500..22ef612 100644
--- a/packages/PrintSpooler/res/values-iw/strings.xml
+++ b/packages/PrintSpooler/res/values-iw/strings.xml
@@ -47,9 +47,9 @@
     <string name="savetopdf_button" msgid="2976186791686924743">"‏שמור כ-PDF"</string>
     <string name="print_options_expanded" msgid="6944679157471691859">"אפשרויות ההדפסה הורחבו"</string>
     <string name="print_options_collapsed" msgid="7455930445670414332">"אפשרויות ההדפסה כווצו"</string>
-    <string name="search" msgid="5421724265322228497">"חפש"</string>
+    <string name="search" msgid="5421724265322228497">"חיפוש"</string>
     <string name="all_printers_label" msgid="3178848870161526399">"כל המדפסות"</string>
-    <string name="add_print_service_label" msgid="5356702546188981940">"הוסף שירות"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"הוספת שירות"</string>
     <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"תיבת החיפוש מוצגת"</string>
     <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"תיבת החיפוש מוסתרת"</string>
     <string name="print_add_printer" msgid="1088656468360653455">"הוסף מדפסת"</string>
@@ -88,7 +88,7 @@
     <string name="failed_notification_title_template" msgid="2256217208186530973">"שגיאת מדפסת ב-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
     <string name="blocked_notification_title_template" msgid="1175435827331588646">"המדפסת חסמה את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
     <string name="cancel" msgid="4373674107267141885">"ביטול"</string>
-    <string name="restart" msgid="2472034227037808749">"הפעל מחדש"</string>
+    <string name="restart" msgid="2472034227037808749">"הפעלה מחדש"</string>
     <string name="no_connection_to_printer" msgid="2159246915977282728">"אין חיבור למדפסת"</string>
     <string name="reason_unknown" msgid="5507940196503246139">"לא ידוע"</string>
     <string name="print_service_security_warning_title" msgid="2160752291246775320">"האם להשתמש ב-<xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
diff --git a/packages/PrintSpooler/res/values-kn/strings.xml b/packages/PrintSpooler/res/values-kn/strings.xml
index c8eaf6e..2f8e6e0 100644
--- a/packages/PrintSpooler/res/values-kn/strings.xml
+++ b/packages/PrintSpooler/res/values-kn/strings.xml
@@ -99,7 +99,7 @@
     <item msgid="79513688117503758">"ಚಿಕ್ಕದಾದ ಅಂಚು"</item>
   </string-array>
   <string-array name="orientation_labels">
-    <item msgid="4061931020926489228">"ಪೋಟ್ರೇಟ್"</item>
+    <item msgid="4061931020926489228">"ಪೋರ್ಟ್ರೇಟ್"</item>
     <item msgid="3199660090246166812">"ಲ್ಯಾಂಡ್‌ಸ್ಕೇಪ್"</item>
   </string-array>
     <string name="print_write_error_message" msgid="5787642615179572543">"ಫೈಲ್‌ಗೆ ರೈಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
diff --git a/packages/PrintSpooler/res/values-mr/strings.xml b/packages/PrintSpooler/res/values-mr/strings.xml
index 8981cd8..7fe9c8c 100644
--- a/packages/PrintSpooler/res/values-mr/strings.xml
+++ b/packages/PrintSpooler/res/values-mr/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">"स्पूलर मुद्रण"</string>
+    <string name="app_label" msgid="4469836075319831821">"स्पूलर प्रिंट"</string>
     <string name="more_options_button" msgid="2243228396432556771">"अधिक पर्याय"</string>
     <string name="label_destination" msgid="9132510997381599275">"गंतव्यस्‍थान"</string>
     <string name="label_copies" msgid="3634531042822968308">"प्रती"</string>
@@ -25,28 +25,28 @@
     <string name="label_paper_size_summary" msgid="5668204981332138168">"कागद आकार:"</string>
     <string name="label_color" msgid="1108690305218188969">"रंग"</string>
     <string name="label_duplex" msgid="5370037254347072243">"दोन्ही बाजूंनी"</string>
-    <string name="label_orientation" msgid="2853142581990496477">"अभिमुखता"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"ओरिएंटेशन"</string>
     <string name="label_pages" msgid="7768589729282182230">"पृष्ठे"</string>
     <string name="destination_default_text" msgid="5422708056807065710">"प्रिंटर निवडा"</string>
     <string name="template_all_pages" msgid="3322235982020148762">"सर्व <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
     <string name="template_page_range" msgid="428638530038286328">"<xliff:g id="PAGE_COUNT">%1$s</xliff:g> ची श्रेणी"</string>
     <string name="pages_range_example" msgid="8558694453556945172">"उदा. 1—5,8,11—13"</string>
-    <string name="print_preview" msgid="8010217796057763343">"मुद्रण पूर्वावलोकन"</string>
-    <string name="install_for_print_preview" msgid="6366303997385509332">"पूर्वावलोकनासाठी PDF दर्शक स्‍थापित करा"</string>
-    <string name="printing_app_crashed" msgid="854477616686566398">"मुद्रण करण्याचा अ‍ॅप क्रॅश झाला"</string>
-    <string name="generating_print_job" msgid="3119608742651698916">"मुद्रण कार्य व्‍युत्‍पन्न करीत आहे"</string>
-    <string name="save_as_pdf" msgid="5718454119847596853">"PDF म्‍हणून जतन करा"</string>
+    <string name="print_preview" msgid="8010217796057763343">"प्रिंट पूर्वावलोकन"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"पूर्वावलोकनासाठी पीडीएफ व्ह्यूअर इंस्टॉल करा"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"प्रिंटिंग अ‍ॅप क्रॅश झाले"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"प्रिंट कार्य व्‍युत्‍पन्न करत आहे"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"पीडीएफ म्‍हणून सेव्ह करा"</string>
     <string name="all_printers" msgid="5018829726861876202">"सर्व प्रिंटर..."</string>
-    <string name="print_dialog" msgid="32628687461331979">"मुद्रण संवाद"</string>
+    <string name="print_dialog" msgid="32628687461331979">"प्रिंट संवाद"</string>
     <string name="current_page_template" msgid="5145005201131935302">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
     <string name="page_description_template" msgid="6831239682256197161">"<xliff:g id="PAGE_COUNT">%2$d</xliff:g> पैकी <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> पृष्‍ठ"</string>
     <string name="summary_template" msgid="8899734908625669193">"सारांश, प्रती <xliff:g id="COPIES">%1$s</xliff:g>, कागद आकार <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string>
     <string name="expand_handle" msgid="7282974448109280522">"विस्तृत करण्याचे हँडल"</string>
     <string name="collapse_handle" msgid="6886637989442507451">"संक्षिप्त करण्याचे हँडल"</string>
-    <string name="print_button" msgid="645164566271246268">"मुद्रण करा"</string>
-    <string name="savetopdf_button" msgid="2976186791686924743">"PDF वर जतन करा"</string>
-    <string name="print_options_expanded" msgid="6944679157471691859">"मुद्रण पर्याय विस्तृत झाले"</string>
-    <string name="print_options_collapsed" msgid="7455930445670414332">"मुद्रण पर्याय संक्षिप्त झाले"</string>
+    <string name="print_button" msgid="645164566271246268">"प्रिंट करा"</string>
+    <string name="savetopdf_button" msgid="2976186791686924743">"पीडीएफ वर सेव्ह करा"</string>
+    <string name="print_options_expanded" msgid="6944679157471691859">"प्रिंट पर्याय विस्तृत झाले"</string>
+    <string name="print_options_collapsed" msgid="7455930445670414332">"प्रिंट पर्याय संक्षिप्त झाले"</string>
     <string name="search" msgid="5421724265322228497">"शोध"</string>
     <string name="all_printers_label" msgid="3178848870161526399">"सर्व प्रिंटर"</string>
     <string name="add_print_service_label" msgid="5356702546188981940">"सेवा जोडा"</string>
@@ -64,9 +64,9 @@
     <string name="notification_channel_progress" msgid="872788690775721436">"प्रिंट कार्ये चालवणे"</string>
     <string name="notification_channel_failure" msgid="9042250774797916414">"अयशस्वी प्रिंट कार्ये"</string>
     <string name="could_not_create_file" msgid="3425025039427448443">"फाईल तयार करणेे शक्य झाले नाही"</string>
-    <string name="print_services_disabled_toast" msgid="9089060734685174685">"काही मुद्रण सेवा अक्षम केल्या आहेत"</string>
+    <string name="print_services_disabled_toast" msgid="9089060734685174685">"काही प्रिंट सेवा अक्षम केल्या आहेत"</string>
     <string name="print_searching_for_printers" msgid="6550424555079932867">"प्रिंटर शोधत आहे"</string>
-    <string name="print_no_print_services" msgid="8561247706423327966">"कोणत्याही मुद्रण सेवा सक्षम केलेल्या नाहीत"</string>
+    <string name="print_no_print_services" msgid="8561247706423327966">"कोणत्याही प्रिंट सेवा सक्षम केलेल्या नाहीत"</string>
     <string name="print_no_printers" msgid="4869403323900054866">"कोणतेही प्रिंटर आढळले नाही"</string>
     <string name="cannot_add_printer" msgid="7840348733668023106">"प्रिंटर जोडू शकत नाही"</string>
     <string name="select_to_add_printers" msgid="3800709038689830974">"प्रिंटर जोडण्यासाठी निवडा"</string>
@@ -76,12 +76,12 @@
     <string name="disabled_services_title" msgid="7313253167968363211">"अक्षम केलल्या सेवा"</string>
     <string name="all_services_title" msgid="5578662754874906455">"सर्व सेवा"</string>
     <plurals name="print_services_recommendation_subtitle" formatted="false" msgid="5678487708807185138">
-      <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिंटर शोधण्यासाठी स्थापित करा</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिंटर शोधण्यासाठी स्थापित करा</item>
+      <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिंटर शोधण्यासाठी इंस्टॉल करा</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिंटर शोधण्यासाठी इंस्टॉल करा</item>
     </plurals>
-    <string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> मुद्रण करीत आहे"</string>
-    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> रद्द करीत आहे"</string>
-    <string name="failed_notification_title_template" msgid="2256217208186530973">"प्रिंटर त्रुटी <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> प्रिंट करत आहे"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> रद्द करत आहे"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"प्रिंटर एरर <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
     <string name="blocked_notification_title_template" msgid="1175435827331588646">"प्रिंटरने <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> अवरोधित केले"</string>
     <string name="cancel" msgid="4373674107267141885">"रद्द करा"</string>
     <string name="restart" msgid="2472034227037808749">"रीस्टार्ट करा"</string>
@@ -100,7 +100,7 @@
   </string-array>
   <string-array name="orientation_labels">
     <item msgid="4061931020926489228">"पोट्रेट"</item>
-    <item msgid="3199660090246166812">"भूदृश्य"</item>
+    <item msgid="3199660090246166812">"लॅंडस्केप"</item>
   </string-array>
     <string name="print_write_error_message" msgid="5787642615179572543">"फायलीवर लिहू शकलो नाही"</string>
     <string name="print_error_default_message" msgid="8602678405502922346">"क्षमस्व, त्याने कार्य केले नाही. पुन्हा प्रयत्न करा."</string>
diff --git a/packages/PrintSpooler/res/values-my/strings.xml b/packages/PrintSpooler/res/values-my/strings.xml
index c581e59..7c7b03e6 100644
--- a/packages/PrintSpooler/res/values-my/strings.xml
+++ b/packages/PrintSpooler/res/values-my/strings.xml
@@ -49,7 +49,7 @@
     <string name="print_options_collapsed" msgid="7455930445670414332">"ပရင့်ထုတ် ရွေးစရာများကို ခေါက်ထား"</string>
     <string name="search" msgid="5421724265322228497">"ရှာဖွေခြင်း"</string>
     <string name="all_printers_label" msgid="3178848870161526399">"စာထုတ်စက် အားလုံး"</string>
-    <string name="add_print_service_label" msgid="5356702546188981940">"ဆားဗစ် အသစ်ထည့်ရန်"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"ဝန်ဆောင်မှုထည့်ရန်"</string>
     <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"ရှာဖွေစရာ နေရာ မြင်တွေ့ရပါသည်"</string>
     <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"ရှာဖွေရန် နေရာ ပျောက်ကွယ်နေပါသည်"</string>
     <string name="print_add_printer" msgid="1088656468360653455">"စာထုတ်စက်ကို ထည့်ပါ"</string>
diff --git a/packages/PrintSpooler/res/values-ne/strings.xml b/packages/PrintSpooler/res/values-ne/strings.xml
index c5f5978..18f96dd 100644
--- a/packages/PrintSpooler/res/values-ne/strings.xml
+++ b/packages/PrintSpooler/res/values-ne/strings.xml
@@ -84,7 +84,7 @@
     <string name="failed_notification_title_template" msgid="2256217208186530973">"प्रिन्टर त्रुटि <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
     <string name="blocked_notification_title_template" msgid="1175435827331588646">"प्रिन्टर ब्लक गरियो <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
     <string name="cancel" msgid="4373674107267141885">"रद्द गर्नुहोस्"</string>
-    <string name="restart" msgid="2472034227037808749">"पुनःस्टार्ट गर्नुहोस्"</string>
+    <string name="restart" msgid="2472034227037808749">"पुनः सुरु गर्नुहोस्"</string>
     <string name="no_connection_to_printer" msgid="2159246915977282728">"प्रिन्टरमा कुनै जडान छैन"</string>
     <string name="reason_unknown" msgid="5507940196503246139">"अज्ञात"</string>
     <string name="print_service_security_warning_title" msgid="2160752291246775320">"<xliff:g id="SERVICE">%1$s</xliff:g> प्रयोग गर्ने हो?"</string>
diff --git a/packages/PrintSpooler/res/values-pa/strings.xml b/packages/PrintSpooler/res/values-pa/strings.xml
index d7885ad..4ce8f97 100644
--- a/packages/PrintSpooler/res/values-pa/strings.xml
+++ b/packages/PrintSpooler/res/values-pa/strings.xml
@@ -30,12 +30,12 @@
     <string name="destination_default_text" msgid="5422708056807065710">"ਇੱਕ ਪ੍ਰਿੰਟਰ ਚੁਣੋ"</string>
     <string name="template_all_pages" msgid="3322235982020148762">"ਸਾਰੇ <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
     <string name="template_page_range" msgid="428638530038286328">"<xliff:g id="PAGE_COUNT">%1$s</xliff:g> ਦੀ ਰੇਂਜ"</string>
-    <string name="pages_range_example" msgid="8558694453556945172">"ਉਦਾਹਰਨ ਲਈ 1—5,8,11—13"</string>
-    <string name="print_preview" msgid="8010217796057763343">"ਪ੍ਰਿੰਟ ਪ੍ਰੀਵਿਊ"</string>
-    <string name="install_for_print_preview" msgid="6366303997385509332">"ਪ੍ਰੀਵਿਊ ਲਈ PDF ਵਿਊਅਰ ਇੰਸਟੌਲ ਕਰੋ"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"ਉਦਾਹਰਨ ਵਜੋਂ 1—5,8,11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"ਪ੍ਰਿੰਟ ਦੀ ਪੂਰਵ-ਝਲਕ"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"ਪੂਰਵ-ਝਲਕ ਲਈ PDF ਵਿਊਅਰ ਸਥਾਪਤ ਕਰੋ"</string>
     <string name="printing_app_crashed" msgid="854477616686566398">"ਪ੍ਰਿੰਟਿੰਗ ਐਪ ਕ੍ਰੈਸ਼ ਹੋਇਆ"</string>
     <string name="generating_print_job" msgid="3119608742651698916">"ਪ੍ਰਿੰਟ ਜੌਬ ਬਣਾ ਰਿਹਾ ਹੈ"</string>
-    <string name="save_as_pdf" msgid="5718454119847596853">"PDF ਦੇ ਤੌਰ ਤੇ ਰੱਖਿਅਤ ਕਰੋ"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"PDF ਦੇ ਤੌਰ \'ਤੇ ਰੱਖਿਅਤ ਕਰੋ"</string>
     <string name="all_printers" msgid="5018829726861876202">"ਸਾਰੇ ਪ੍ਰਿੰਟਰ…"</string>
     <string name="print_dialog" msgid="32628687461331979">"ਪ੍ਰਿੰਟ ਡਾਇਲੌਗ"</string>
     <string name="current_page_template" msgid="5145005201131935302">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
@@ -43,16 +43,16 @@
     <string name="summary_template" msgid="8899734908625669193">"ਸਾਰ, ਕਾਪੀਆਂ <xliff:g id="COPIES">%1$s</xliff:g>, ਪੇਪਰ ਦਾ ਆਕਾਰ <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string>
     <string name="expand_handle" msgid="7282974448109280522">"ਹੈਂਡਲ ਨੂੰ ਵਿਸਤਾਰ ਦਿਓ"</string>
     <string name="collapse_handle" msgid="6886637989442507451">"ਇਕੱਠਾ ਹੋਣ ਦੀ ਸੰਭਾਲ"</string>
-    <string name="print_button" msgid="645164566271246268">"ਪ੍ਰਿੰਟ"</string>
+    <string name="print_button" msgid="645164566271246268">"ਪ੍ਰਿੰਟ ਕਰੋ"</string>
     <string name="savetopdf_button" msgid="2976186791686924743">"PDF ਵਿੱਚ ਰੱਖਿਅਤ ਕਰੋ"</string>
     <string name="print_options_expanded" msgid="6944679157471691859">"ਪ੍ਰਿੰਟ ਚੋਣਾਂ ਦਾ ਵਿਸਤਾਰ ਕੀਤਾ"</string>
     <string name="print_options_collapsed" msgid="7455930445670414332">"ਪ੍ਰਿੰਟ ਚੋਣਾਂ ਇਕੱਠਾ ਹੋਈਆਂ"</string>
     <string name="search" msgid="5421724265322228497">"ਖੋਜੋ"</string>
     <string name="all_printers_label" msgid="3178848870161526399">"ਸਾਰੇ ਪ੍ਰਿੰਟਰ"</string>
-    <string name="add_print_service_label" msgid="5356702546188981940">"ਸੇਵਾ ਜੋੜੋ"</string>
-    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"ਖੋਜ ਬੌਕਸ ਦਿਖਾਇਆ"</string>
-    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"ਖੋਜ ਬੌਕਸ ਲੁਕਾਇਆ"</string>
-    <string name="print_add_printer" msgid="1088656468360653455">"ਪ੍ਰਿੰਟਰ ਜੋੜੋ"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"ਸੇਵਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"ਖੋਜ ਬਾਕਸ ਦਿਖਾਇਆ"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"ਖੋਜ ਬਾਕਸ ਲੁਕਾਇਆ"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"ਪ੍ਰਿੰਟਰ ਸ਼ਾਮਲ ਕਰੋ"</string>
     <string name="print_select_printer" msgid="7388760939873368698">"ਪ੍ਰਿੰਟਰ ਚੁਣੋ"</string>
     <string name="print_forget_printer" msgid="5035287497291910766">"ਪ੍ਰਿੰਟਰ ਭੁੱਲੋ"</string>
     <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868">
@@ -61,16 +61,16 @@
     </plurals>
     <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="printer_info_desc" msgid="7181988788991581654">"ਇਸ ਪ੍ਰਿੰਟਰ ਬਾਰੇ ਹੋਰ ਜਾਣਕਾਰੀ"</string>
-    <string name="notification_channel_progress" msgid="872788690775721436">"ਚੱਲ ਰਹੇ ਪ੍ਰਿੰਟ ਕਾਰਜ"</string>
-    <string name="notification_channel_failure" msgid="9042250774797916414">"ਅਸਫਲ ਰਹੇ ਪ੍ਰਿੰਟ ਕਾਰਜ"</string>
+    <string name="notification_channel_progress" msgid="872788690775721436">"ਚੱਲ ਰਹੇ ਪ੍ਰਿੰਟ ਜੌਬ"</string>
+    <string name="notification_channel_failure" msgid="9042250774797916414">"ਅਸਫਲ ਰਹੇ ਪ੍ਰਿੰਟ ਜੌਬ"</string>
     <string name="could_not_create_file" msgid="3425025039427448443">"ਫ਼ਾਈਲ ਨੂੰ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ"</string>
-    <string name="print_services_disabled_toast" msgid="9089060734685174685">"ਕੁਝ ਪ੍ਰਿੰਟ ਸੇਵਾਵਾਂ ਅਯੋਗ ਬਣਾਈਆਂ ਗਈਆਂ ਹਨ"</string>
+    <string name="print_services_disabled_toast" msgid="9089060734685174685">"ਕੁਝ ਪ੍ਰਿੰਟ ਸੇਵਾਵਾਂ ਬੰਦ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ"</string>
     <string name="print_searching_for_printers" msgid="6550424555079932867">"ਪ੍ਰਿੰਟਰ ਖੋਜ ਰਿਹਾ ਹੈ"</string>
-    <string name="print_no_print_services" msgid="8561247706423327966">"ਪ੍ਰਿੰਟ ਸੇਵਾਵਾਂ ਯੋਗ ਨਹੀਂ ਬਣਾਈਆਂ ਗਈਆਂ"</string>
+    <string name="print_no_print_services" msgid="8561247706423327966">"ਪ੍ਰਿੰਟ ਸੇਵਾਵਾਂ ਨੂੰ ਚਾਲੂ ਨਹੀਂ ਕੀਤਾ ਗਿਆ"</string>
     <string name="print_no_printers" msgid="4869403323900054866">"ਕੋਈ ਪ੍ਰਿੰਟਰ ਨਹੀਂ ਮਿਲੇ"</string>
     <string name="cannot_add_printer" msgid="7840348733668023106">"ਪ੍ਰਿੰਟਰ ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕਦੇ"</string>
     <string name="select_to_add_printers" msgid="3800709038689830974">"ਪ੍ਰਿੰਟਰ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਚੁਣੋ"</string>
-    <string name="enable_print_service" msgid="3482815747043533842">"ਯੋਗ ਬਣਾਉਣ ਲਈ ਚੁਣੋ"</string>
+    <string name="enable_print_service" msgid="3482815747043533842">"ਚਾਲੂ ਕਰਨ ਲਈ ਚੁਣੋ"</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>
@@ -99,13 +99,13 @@
     <item msgid="79513688117503758">"ਛੋਟਾ ਕਿਨਾਰਾ"</item>
   </string-array>
   <string-array name="orientation_labels">
-    <item msgid="4061931020926489228">"ਤਸਵੀਰ"</item>
+    <item msgid="4061931020926489228">"ਪੋਰਟਰੇਟ"</item>
     <item msgid="3199660090246166812">"ਲੈਂਡਸਕੇਪ"</item>
   </string-array>
     <string name="print_write_error_message" msgid="5787642615179572543">"ਫਾਈਲ ਵਿੱਚ ਨਹੀਂ ਲਿਖ ਸਕਿਆ"</string>
     <string name="print_error_default_message" msgid="8602678405502922346">"ਮਾਫ਼ ਕਰਨਾ, ਉਸਨੇ ਲਾਭਕਾਰੀ ਨਹੀਂ ਹੋਇਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
     <string name="print_error_retry" msgid="1426421728784259538">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
     <string name="print_error_printer_unavailable" msgid="8985614415253203381">"ਇਹ ਪ੍ਰਿੰਟਰ ਇਸ ਵੇਲੇ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"</string>
-    <string name="print_cannot_load_page" msgid="6179560924492912009">"ਝਲਕ ਨਹੀਂ ਵਿਖਾਈ ਜਾ ਸਕਦੀ"</string>
-    <string name="print_preparing_preview" msgid="3939930735671364712">"ਪ੍ਰੀਵਿਊ ਦੀ ਤਿਆਰੀ ਕਰ ਰਿਹਾ ਹੈ…"</string>
+    <string name="print_cannot_load_page" msgid="6179560924492912009">"ਪੂਰਵ-ਝਲਕ ਨਹੀਂ ਦਿਖਾਈ ਜਾ ਸਕਦੀ"</string>
+    <string name="print_preparing_preview" msgid="3939930735671364712">"ਪੂਰਵ-ਝਲਕ ਦੀ ਤਿਆਰੀ ਕਰ ਰਿਹਾ ਹੈ…"</string>
 </resources>
diff --git a/packages/PrintSpooler/res/values-pt-rPT/strings.xml b/packages/PrintSpooler/res/values-pt-rPT/strings.xml
index eac6d36..5da31bd 100644
--- a/packages/PrintSpooler/res/values-pt-rPT/strings.xml
+++ b/packages/PrintSpooler/res/values-pt-rPT/strings.xml
@@ -56,8 +56,8 @@
     <string name="print_select_printer" msgid="7388760939873368698">"Selecionar impressora"</string>
     <string name="print_forget_printer" msgid="5035287497291910766">"Esquecer impressora"</string>
     <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868">
-      <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> impressora encontrada</item>
       <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> impressoras encontradas</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> impressora encontrada</item>
     </plurals>
     <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> – <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="printer_info_desc" msgid="7181988788991581654">"Mais informações acerca desta impressora"</string>
@@ -76,8 +76,8 @@
     <string name="disabled_services_title" msgid="7313253167968363211">"Serviços desativados"</string>
     <string name="all_services_title" msgid="5578662754874906455">"Todos os serviços"</string>
     <plurals name="print_services_recommendation_subtitle" formatted="false" msgid="5678487708807185138">
-      <item quantity="one">Instale para detetar <xliff:g id="COUNT_0">%1$s</xliff:g> impressora</item>
       <item quantity="other">Instale para detetar <xliff:g id="COUNT_1">%1$s</xliff:g> impressoras</item>
+      <item quantity="one">Instale para detetar <xliff:g id="COUNT_0">%1$s</xliff:g> impressora</item>
     </plurals>
     <string name="printing_notification_title_template" msgid="295903957762447362">"A imprimir <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
     <string name="cancelling_notification_title_template" msgid="1821759594704703197">"A cancelar <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-te/strings.xml b/packages/PrintSpooler/res/values-te/strings.xml
index e5a0879..110bd49 100644
--- a/packages/PrintSpooler/res/values-te/strings.xml
+++ b/packages/PrintSpooler/res/values-te/strings.xml
@@ -25,7 +25,7 @@
     <string name="label_paper_size_summary" msgid="5668204981332138168">"కాగితపు పరిమాణం:"</string>
     <string name="label_color" msgid="1108690305218188969">"రంగు"</string>
     <string name="label_duplex" msgid="5370037254347072243">"రెండు వైపుల"</string>
-    <string name="label_orientation" msgid="2853142581990496477">"దృగ్విన్యాసం"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"ఓరియంటేషన్"</string>
     <string name="label_pages" msgid="7768589729282182230">"పేజీలు"</string>
     <string name="destination_default_text" msgid="5422708056807065710">"ప్రింటర్ ఎంచుకోండి"</string>
     <string name="template_all_pages" msgid="3322235982020148762">"మొత్తం <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
@@ -33,7 +33,7 @@
     <string name="pages_range_example" msgid="8558694453556945172">"ఉదా. 1—5,8,11—13"</string>
     <string name="print_preview" msgid="8010217796057763343">"ముద్రణ పరిదృశ్యం"</string>
     <string name="install_for_print_preview" msgid="6366303997385509332">"పరిదృశ్యం చేయడానికి PDF వ్యూయర్‌ను ఇన్‌స్టాల్ చేయండి"</string>
-    <string name="printing_app_crashed" msgid="854477616686566398">"ముద్రణ అనువర్తనం క్రాష్ అయ్యింది"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"ముద్రణ యాప్ క్రాష్ అయ్యింది"</string>
     <string name="generating_print_job" msgid="3119608742651698916">"ముద్రణ జాబ్‌ను ఉత్పన్నం చేస్తోంది"</string>
     <string name="save_as_pdf" msgid="5718454119847596853">"PDF వలె సేవ్ చేయి"</string>
     <string name="all_printers" msgid="5018829726861876202">"అన్ని ప్రింటర్‌లు…"</string>
@@ -47,7 +47,7 @@
     <string name="savetopdf_button" msgid="2976186791686924743">"PDF వలె సేవ్ చేయి"</string>
     <string name="print_options_expanded" msgid="6944679157471691859">"ముద్రణ ఎంపికలు విస్తరించబడ్డాయి"</string>
     <string name="print_options_collapsed" msgid="7455930445670414332">"ముద్రణ ఎంపికలు కుదించబడ్డాయి"</string>
-    <string name="search" msgid="5421724265322228497">"శోధించు"</string>
+    <string name="search" msgid="5421724265322228497">"వెతుకు"</string>
     <string name="all_printers_label" msgid="3178848870161526399">"అన్ని ప్రింటర్‌లు"</string>
     <string name="add_print_service_label" msgid="5356702546188981940">"సేవను జోడించు"</string>
     <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"శోధన పెట్టె చూపబడింది"</string>
@@ -81,7 +81,7 @@
     </plurals>
     <string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ను ముద్రిస్తోంది"</string>
     <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ను రద్దు చేస్తోంది"</string>
-    <string name="failed_notification_title_template" msgid="2256217208186530973">"ప్రింటర్ లోపం <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"ప్రింటర్ ఎర్రర్ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
     <string name="blocked_notification_title_template" msgid="1175435827331588646">"ప్రింటర్ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ను బ్లాక్ చేసింది"</string>
     <string name="cancel" msgid="4373674107267141885">"రద్దు చేయి"</string>
     <string name="restart" msgid="2472034227037808749">"పునఃప్రారంభించు"</string>
diff --git a/packages/PrintSpooler/res/values-vi/strings.xml b/packages/PrintSpooler/res/values-vi/strings.xml
index a181424..6e8c7a8 100644
--- a/packages/PrintSpooler/res/values-vi/strings.xml
+++ b/packages/PrintSpooler/res/values-vi/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
-    <string name="more_options_button" msgid="2243228396432556771">"Thêm tùy chọn"</string>
+    <string name="more_options_button" msgid="2243228396432556771">"Tùy chọn khác"</string>
     <string name="label_destination" msgid="9132510997381599275">"Đích"</string>
     <string name="label_copies" msgid="3634531042822968308">"Bản sao"</string>
     <string name="label_copies_summary" msgid="3861966063536529540">"Bản sao:"</string>
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
index 601491a..1b7a1b8 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
@@ -70,7 +70,6 @@
 import android.util.Log;
 import android.util.TypedValue;
 import android.view.KeyEvent;
-import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.View.OnFocusChangeListener;
@@ -101,6 +100,7 @@
 import com.android.printspooler.util.MediaSizeUtils;
 import com.android.printspooler.util.MediaSizeUtils.MediaSizeComparator;
 import com.android.printspooler.util.PageRangeUtils;
+import com.android.printspooler.widget.ClickInterceptSpinner;
 import com.android.printspooler.widget.PrintContentView;
 import com.android.printspooler.widget.PrintContentView.OptionsStateChangeListener;
 import com.android.printspooler.widget.PrintContentView.OptionsStateController;
@@ -200,7 +200,7 @@
     private TextView mPageRangeTitle;
     private EditText mPageRangeEditText;
 
-    private Spinner mDestinationSpinner;
+    private ClickInterceptSpinner mDestinationSpinner;
     private DestinationAdapter mDestinationSpinnerAdapter;
     private boolean mShowDestinationPrompt;
 
@@ -1383,19 +1383,14 @@
             mSummaryCopies.setEnabled(false);
             mSummaryPaperSize.setEnabled(false);
 
-            mDestinationSpinner.setOnTouchListener(new View.OnTouchListener() {
-                @Override
-                public boolean onTouch(View v, MotionEvent event) {
-                    mShowDestinationPrompt = false;
-                    mSummaryCopies.setEnabled(true);
-                    mSummaryPaperSize.setEnabled(true);
-                    updateOptionsUi();
+            mDestinationSpinner.setPerformClickListener((v) -> {
+                mShowDestinationPrompt = false;
+                mSummaryCopies.setEnabled(true);
+                mSummaryPaperSize.setEnabled(true);
+                updateOptionsUi();
 
-                    mDestinationSpinner.setOnTouchListener(null);
-                    mDestinationSpinnerAdapter.notifyDataSetChanged();
-
-                    return false;
-                }
+                mDestinationSpinner.setPerformClickListener(null);
+                mDestinationSpinnerAdapter.notifyDataSetChanged();
             });
         }
     }
diff --git a/packages/PrintSpooler/src/com/android/printspooler/widget/ClickInterceptSpinner.java b/packages/PrintSpooler/src/com/android/printspooler/widget/ClickInterceptSpinner.java
new file mode 100644
index 0000000..1d3aac9
--- /dev/null
+++ b/packages/PrintSpooler/src/com/android/printspooler/widget/ClickInterceptSpinner.java
@@ -0,0 +1,56 @@
+/*
+ * 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.printspooler.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.Spinner;
+
+/**
+ * Spinner that can intercept {@link Spinner#performClick()}
+ */
+public class ClickInterceptSpinner extends Spinner {
+    private OnClickListener mListener;
+
+    /**
+     * Create a new spinner with the given attributes.
+     *
+     * @param context The context for the spinner
+     * @param attrs Attributes of the spinner
+     */
+    public ClickInterceptSpinner(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    /**
+     * Set a listener invoked on {@link #performClick()}
+     *
+     * @param listener The listener to be invoked
+     */
+    public void setPerformClickListener(OnClickListener listener) {
+        mListener = listener;
+    }
+
+    @Override
+    public boolean performClick() {
+        if (mListener != null) {
+            mListener.onClick(this);
+        }
+
+        return super.performClick();
+    }
+}
diff --git a/packages/SettingsLib/common.mk b/packages/SettingsLib/common.mk
index 0815534..46b66c4 100644
--- a/packages/SettingsLib/common.mk
+++ b/packages/SettingsLib/common.mk
@@ -20,13 +20,42 @@
     SettingsLib
 else
 LOCAL_RESOURCE_DIR += $(call my-dir)/res
+
+
+## Include transitive dependencies below
+
+# Include support-v7-appcompat, if not already included
+ifeq (,$(findstring android-support-v7-appcompat,$(LOCAL_STATIC_JAVA_LIBRARIES)))
+LOCAL_RESOURCE_DIR += frameworks/support/v7/appcompat/res
+LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.appcompat
+LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-appcompat
+endif
+
+# Include support-v7-recyclerview, if not already included
+ifeq (,$(findstring android-support-v7-recyclerview,$(LOCAL_STATIC_JAVA_LIBRARIES)))
+LOCAL_RESOURCE_DIR += frameworks/support/v7/recyclerview/res
+LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.recyclerview
+LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-recyclerview
+endif
+
+# Include android-support-v7-preference, if not already included
+ifeq (,$(findstring android-support-v7-preference,$(LOCAL_STATIC_JAVA_LIBRARIES)))
+LOCAL_RESOURCE_DIR += frameworks/support/v7/preference/res
+LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.preference
+LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-preference
+endif
+
+# Include android-support-v14-preference, if not already included
+ifeq (,$(findstring android-support-v14-preference,$(LOCAL_STATIC_JAVA_LIBRARIES)))
+LOCAL_RESOURCE_DIR += frameworks/support/v14/preference/res
+LOCAL_AAPT_FLAGS += --extra-packages android.support.v14.preference
+LOCAL_STATIC_JAVA_LIBRARIES += android-support-v14-preference
+endif
+
 LOCAL_AAPT_FLAGS += --auto-add-overlay --extra-packages com.android.settingslib
+
 LOCAL_STATIC_JAVA_LIBRARIES += \
     android-support-annotations \
     android-support-v4 \
-    android-support-v7-appcompat \
-    android-support-v7-preference \
-    android-support-v7-recyclerview \
-    android-support-v14-preference \
     SettingsLib
 endif
diff --git a/packages/SettingsLib/res/drawable/ic_expand_more.xml b/packages/SettingsLib/res/drawable/ic_expand_more.xml
new file mode 100644
index 0000000..a8ff539
--- /dev/null
+++ b/packages/SettingsLib/res/drawable/ic_expand_more.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24"
+    android:tint="?android:attr/colorControlNormal">
+
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M16.59,8.59L12.0,13.17 7.41,8.59 6.0,10.0l6.0,6.0 6.0,-6.0z"/>
+
+</vector>
diff --git a/packages/SettingsLib/res/drawable/ic_info_outline_24dp.xml b/packages/SettingsLib/res/drawable/ic_info_outline_24dp.xml
index 3fe1e9e..5a7f954 100644
--- a/packages/SettingsLib/res/drawable/ic_info_outline_24dp.xml
+++ b/packages/SettingsLib/res/drawable/ic_info_outline_24dp.xml
@@ -21,6 +21,12 @@
         android:viewportHeight="24.0"
         android:tint="?android:attr/textColorSecondary">
     <path
-        android:fillColor="#000000"
-        android:pathData="M11,17h2v-6h-2v6zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM11,9h2L13,7h-2v2z"/>
+        android:fillColor="#FF000000"
+        android:pathData="M12,17L12,17c0.55,0 1,-0.45 1,-1v-4c0,-0.55 -0.45,-1 -1,-1l0,0c-0.55,0 -1,0.45 -1,1v4C11,16.55 11.45,17 12,17z"/>
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M12,2c-5.52,0 -10,4.48 -10,10s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8s8,3.59 8,8S16.41,20 12,20z"/>
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M12,9.1L12,9.1c0.61,0 1.1,-0.49 1.1,-1.1l0,0c0,-0.61 -0.49,-1.1 -1.1,-1.1l0,0c-0.61,0 -1.1,0.49 -1.1,1.1l0,0C10.9,8.61 11.39,9.1 12,9.1z"/>
 </vector>
diff --git a/packages/SettingsLib/res/layout/preference_category_divider.xml b/packages/SettingsLib/res/layout/preference_category_divider.xml
new file mode 100644
index 0000000..6644eec
--- /dev/null
+++ b/packages/SettingsLib/res/layout/preference_category_divider.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2017 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/two_target_divider"
+    android:layout_height="wrap_content"
+    android:layout_width="match_parent"
+    android:gravity="start|center_vertical"
+    android:orientation="horizontal">
+    <View
+        android:layout_height="1dp"
+        android:layout_width="match_parent"
+        android:background="?android:attr/dividerHorizontal" />
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SettingsLib/res/layout/preference_category_material_settings.xml b/packages/SettingsLib/res/layout/preference_category_material_settings.xml
index 741435e..245e3b7 100644
--- a/packages/SettingsLib/res/layout/preference_category_material_settings.xml
+++ b/packages/SettingsLib/res/layout/preference_category_material_settings.xml
@@ -51,6 +51,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:textAppearance="@android:style/TextAppearance.Material.Body2"
+            android:textAlignment="viewStart"
             android:textColor="?android:attr/colorAccent"
             android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"/>
         <TextView
diff --git a/packages/SettingsLib/res/layout/preference_category_material_settings_with_divider.xml b/packages/SettingsLib/res/layout/preference_category_material_settings_with_divider.xml
new file mode 100644
index 0000000..70d0898
--- /dev/null
+++ b/packages/SettingsLib/res/layout/preference_category_material_settings_with_divider.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2017 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<!-- Similar to preference_category_material_settings.xml, except that this always adds
+     a divider above category. -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <include layout="@layout/preference_category_divider"/>
+    <include layout="@layout/preference_category_material_settings"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SettingsLib/res/layout/preference_dropdown_material_settings.xml b/packages/SettingsLib/res/layout/preference_dropdown_material_settings.xml
new file mode 100644
index 0000000..a0b8155
--- /dev/null
+++ b/packages/SettingsLib/res/layout/preference_dropdown_material_settings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2017 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+
+<!-- Based off frameworks/base/core/res/res/layout/preference_dropdown_material.xml
+     except that icon space in this layout is always reserved -->
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <Spinner
+        android:id="@+id/spinner"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/preference_no_icon_padding_start"
+        android:visibility="invisible" />
+
+    <include layout="@layout/preference_material"/>
+
+</FrameLayout>
\ No newline at end of file
diff --git a/packages/SettingsLib/res/values-af/arrays.xml b/packages/SettingsLib/res/values-af/arrays.xml
index d656a5b..771abe6 100644
--- a/packages/SettingsLib/res/values-af/arrays.xml
+++ b/packages/SettingsLib/res/values-af/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (verstek)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Gebruik stelselkeuse (verstek)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-oudio"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-oudio"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Aktiveer opsionele kodekke"</item>
+    <item msgid="3304843301758635896">"Deaktiveer opsionele kodekke"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Gebruik stelselkeuse (verstek)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-oudio"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-oudio"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Aktiveer opsionele kodekke"</item>
+    <item msgid="741805482892725657">"Deaktiveer opsionele kodekke"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Gebruik stelselkeuse (verstek)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 5d04cf6..0e0d9ae 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Gekoppel via %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Beskikbaar via %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Gekoppel, geen internet nie"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Toegangspunt is tydelik vol"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Gekoppel via %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Beskikbaar via %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Baie stadig"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Stadig"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Middelmatig"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Vinnig"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Baie vinnig"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Ontkoppel"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Ontkoppel tans…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Verbind tans…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi twee stawe."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi drie stawe."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi-sein vol."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Oop netwerk"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Veilige netwerk"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android-bedryfstelsel"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Verwyderde programme"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Verwyderde programme en gebruikers"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Laat altyd Wi-Fi-swerfskanderings toe"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobiele data is altyd aktief"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardewareversnelling vir verbinding"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Wys Bluetooth-toestelle sonder name"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Deaktiveer absolute volume"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Aktiveer inband-luitoon"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP-weergawe"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Hierdie instellings is bedoel net vir ontwikkelinggebruik. Dit kan jou toestel en die programme daarop breek of vreemde dinge laat doen."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifieer programme oor USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kontroleer programme wat via ADB/ADT geïnstalleer is vir skadelike gedrag."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth-toestelle sonder name (net MAC-adresse) sal gewys word"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Deaktiveer die Bluetooth-kenmerk vir absolute volume indien daar volumeprobleme met afgeleë toestelle is, soos onaanvaarbare harde klank of geen beheer nie."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Laat toe dat luitone op die foon op Bluetooth-kopstukke gespeel word"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Plaaslike terminaal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> oor"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> tot vol gelaai"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Onbekend"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Laai"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"laai tans"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Laai nie"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Laai nie"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Ingeprop; kan nie op die oomblik laai nie"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Vol"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Beheer deur administrateur"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Geaktiveer deur administrateur"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Gepasmaak (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Hulp en terugvoer"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Kieslys"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"MGT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Voer wagwoord in om fabriekterugstelling in demonstrasiemodus uit te voer"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Volgende"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Wagwoord word benodig"</string>
diff --git a/packages/SettingsLib/res/values-am/arrays.xml b/packages/SettingsLib/res/values-am/arrays.xml
index 26ad9ef..a5fb9cf 100644
--- a/packages/SettingsLib/res/values-am/arrays.xml
+++ b/packages/SettingsLib/res/values-am/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (ነባሪ)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"የስርዓቱን ምርጫ (ነባሪ) ተጠቀም"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ኦዲዮ"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ኦዲዮ"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"አማራጭ ኮዴኮችን አንቃ"</item>
+    <item msgid="3304843301758635896">"አማራጭ ኮዴኮችን አሰናክል"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"የስርዓቱን ምርጫ (ነባሪ) ተጠቀም"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ኦዲዮ"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ኦዲዮ"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"አማራጭ ኮዴኮችን አንቃ"</item>
+    <item msgid="741805482892725657">"አማራጭ ኮዴኮችን አሰናክል"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"የስርዓቱን ምርጫ (ነባሪ) ተጠቀም"</item>
     <item msgid="8895532488906185219">"44.1 ኪኸ"</item>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index b42d26a..017722f 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"በ%1$s በኩል መገናኘት"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"በ%1$s በኩል የሚገኝ"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ተገናኝቷል፣ ምንም በይነመረብ የለም"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"የመዳረሻ ነጥብ ለጊዜው ሞልቷል"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"በ%1$s በኩል ተገናኝቷል"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"በ%1$s በኩል የሚገኝ"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"በጣም ቀርፋፋ"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"አዘግይ"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"እሺ"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"መካከለኛ"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"ፈጣን"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"እጅግ በጣም ፈጣን"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ተለያይቷል"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"በመለያየት ላይ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"በማገናኘት ላይ…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"ሁለት የWiFi አሞሌዎች።"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"ሦስት የWiFi አሞሌዎች።"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"የWiFi ምልክት ሙሉ ነው።"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"አውታረ መረብ ክፈት"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"ደህንነቱ የተጠበቀ አውታረ መረብ"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android  ስርዓተ ክወና"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"የተወገዱ መተግበሪያዎች"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"የተወገዱ መተግበሪያዎች እና ተጠቃሚዎች"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ሁልጊዜ የWi‑Fi ማንቀሳቀስ ቅኝቶችን ይፍቀዱ"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"የተንቀሳቃሽ ስልክ ውሂብ ሁልጊዜ ገቢር ነው"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"የሃርድዌር ማቀላጠፊያን በማስተሳሰር ላይ"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"የብሉቱዝ መሣሪያዎችን ያለ ስሞች አሳይ"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ፍጹማዊ ድምፅን አሰናክል"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"የውስጠ-ሞገድ ማስጮህን አንቃ"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"የብሉቱዝ AVRCP ስሪት"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"እነዚህ ቅንብሮች  የታሰቡት ለግንባታ አጠቃቀም ብቻ ናቸው። መሳሪያህን እና በሱ ላይ ያሉትን መተግበሪያዎች እንዲበለሹ ወይም በትክክል እንዳይሰሩ ሊያደርጉ ይችላሉ።"</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"መተግበሪያዎች በUSB በኩል ያረጋግጡ"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"በADB/ADT በኩል የተጫኑ መተግበሪያዎች ጎጂ ባህሪ ካላቸው ያረጋግጡ።"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"የብሉቱዝ መሣሪያዎች ያለ ስሞች (MAC አድራሻዎች ብቻ) ይታያሉ"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"እንደ ተቀባይነት በሌለው ደረጃ ድምፁ ከፍ ማለት ወይም መቆጣጠር አለመቻል ያሉ ከሩቅ መሣሪያዎች ጋር የድምፅ ችግር በሚኖርበት ጊዜ የብሉቱዝ ፍጹማዊ ድምፅን ባሕሪ ያሰናክላል።"</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"በስልኩ ላይ ያሉ የጥሪ ቅላጼዎች በብሉቱዝ ጆሮ ማዳመጫዎች ላይ እንዲጫወቱ ፍቀድ"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"አካባቢያዊ ተርሚናል"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> ይቀራል"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - ሙሉ ለሙሉ እስኪሞላ ድረስ <xliff:g id="TIME">^2</xliff:g>"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"ያልታወቀ"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"ኃይል በመሙላት ላይ"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"ኃይል በመሙላት ላይ"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"ባትሪ እየሞላ አይደለም"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ኃይል  እየሞላ አይደለም"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"ተሰክቷል፣ አሁን ኃይል መሙላት አይቻልም"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"ሙሉነው"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"በአስተዳዳሪ ቁጥጥር የተደረገበት"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"በአስተዳዳሪ ነቅቷል"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ብጁ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"እገዛ እና ግብረመልስ"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"ምናሌ"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"ጂኤምቲ"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"የፋብሪካ ዳግም ማስጀመር በማሳያ ሁነታ ውስጥ ለማከናወን የይለፍ ቃል ያስገቡ"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"ቀጣይ"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"የይለፍ ቃል ያስፈልጋል"</string>
diff --git a/packages/SettingsLib/res/values-ar/arrays.xml b/packages/SettingsLib/res/values-ar/arrays.xml
index dbf35c7..603dcc8 100644
--- a/packages/SettingsLib/res/values-ar/arrays.xml
+++ b/packages/SettingsLib/res/values-ar/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"‏AVRCP 1.4 (الافتراضي)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"استخدام اختيار النظام (افتراضي)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"تمكين برامج الترميز الاختيارية"</item>
+    <item msgid="3304843301758635896">"تعطيل برامج الترميز الاختيارية"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"استخدام اختيار النظام (افتراضي)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"تمكين برامج الترميز الاختيارية"</item>
+    <item msgid="741805482892725657">"تعطيل برامج الترميز الاختيارية"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"استخدام اختيار النظام (افتراضي)"</item>
     <item msgid="8895532488906185219">"44.1 كيلو هرتز"</item>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index 2ac6bb5..db089e5 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -24,7 +24,7 @@
     <string name="wifi_security_none" msgid="7985461072596594400">"لا شيء"</string>
     <string name="wifi_remembered" msgid="4955746899347821096">"تم الحفظ"</string>
     <string name="wifi_disabled_generic" msgid="4259794910584943386">"معطلة"</string>
-    <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"‏أخفقت تهيئة عنوان IP"</string>
+    <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"‏تعذّرت تهيئة عنوان IP"</string>
     <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"الجهاز غير متصل بسبب انخفاض جودة الشبكة"</string>
     <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"‏تعذّر اتصال WiFi"</string>
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"حدثت مشكلة في المصادقة"</string>
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"‏تم الاتصال عبر %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"‏متوفرة عبر %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"متصلة، ولا يتوفر إنترنت"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"نقطة الدخول ممتلئة مؤقتًا"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"‏تم الاتصال عبر %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"‏متوفرة عبر %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"بطيئة جدًا"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"بطيئة"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"موافق"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"متوسطة"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"سريعة"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"سريعة جدًا"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"غير متصل"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"جارٍ قطع الاتصال..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"جارٍ الاتصال…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"‏إشارة Wi-Fi تتكون من شريطين."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"‏إشارة Wi-Fi تتكون من ثلاثة أشرطة."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"‏إشارة Wi-Fi كاملة."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"شبكة مفتوحة"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"شبكة محمية بكلمة مرور"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"‏نظام التشغيل Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"التطبيقات المزالة"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"التطبيقات والمستخدمون الذين تمت إزالتهم"</string>
@@ -110,13 +116,13 @@
     <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"ربط"</string>
     <string name="tether_settings_title_all" msgid="8356136101061143841">"الربط ونقطة الاتصال المحمولة"</string>
     <string name="managed_user_title" msgid="8109605045406748842">"كل تطبيقات العمل"</string>
-    <string name="user_guest" msgid="8475274842845401871">"مدعو"</string>
+    <string name="user_guest" msgid="8475274842845401871">"ضيف"</string>
     <string name="unknown" msgid="1592123443519355854">"غير معروف"</string>
     <string name="running_process_item_user_label" msgid="3129887865552025943">"المستخدم: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="launch_defaults_some" msgid="313159469856372621">"تم تعيين بعض الإعدادات الافتراضية"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"لم يتم تعيين إعدادات تلقائية"</string>
     <string name="tts_settings" msgid="8186971894801348327">"إعدادات تحويل النص إلى كلام"</string>
-    <string name="tts_settings_title" msgid="1237820681016639683">"إخراج تحويل النص إلى كلام"</string>
+    <string name="tts_settings_title" msgid="1237820681016639683">"تحويل النص إلى كلام"</string>
     <string name="tts_default_rate_title" msgid="6030550998379310088">"معدل سرعة الكلام"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"سرعة نطق الكلام"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"درجة الصوت"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"‏السماح دائمًا بعمليات فحص Wi-Fi للتجوال"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"بيانات الجوّال نشطة دائمًا"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"تسريع الأجهزة للتوصيل"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"عرض أجهزة البلوتوث بدون أسماء"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"تعطيل مستوى الصوت المطلق"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"تمكين الرنين ضمن النطاق الأساسي"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"‏إصدار Bluetooth AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"هذه الإعدادات مخصصة لاستخدام التطوير فقط. قد يتسبب هذا في حدوث أعطال أو خلل في أداء الجهاز والتطبيقات المثبتة عليه."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"‏التحقق من التطبيقات عبر USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"‏التحقق من التطبيقات المثبتة عبر ADB/ADT لكشف السلوك الضار"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"‏سيتم عرض أجهزة البلوتوث بدون أسماء (عناوين MAC فقط)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"لتعطيل ميزة مستوى الصوت المطلق للبلوتوث في حالة حدوث مشكلات متعلقة بمستوى الصوت مع الأجهزة البعيدة مثل مستوى صوت عالٍ بشكل غير مقبول أو نقص إمكانية التحكم في الصوت."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"السماح بتشغيل نغمات الرنين على الهاتف من خلال سماعات الرأس البلوتوث"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"تطبيق طرفي محلي"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - يتبقى <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> حتى يكتمل الشحن"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"غير معروف"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"جارٍ الشحن"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"جارٍ الشحن"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"لا يتم الشحن"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"لا يتم الشحن"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"تم التوصيل، ولكن يتعذّر الشحن الآن"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"ممتلئة"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"إعدادات يتحكم فيها المشرف"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"تم تمكين الإعداد بواسطة المشرف"</string>
@@ -368,14 +375,13 @@
     <string name="charge_length_format" msgid="8978516217024434156">"قبل <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="remaining_length_format" msgid="7886337596669190587">"يتبقى <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="screen_zoom_summary_small" msgid="5867245310241621570">"صغير"</string>
-    <string name="screen_zoom_summary_default" msgid="2247006805614056507">"افتراضي"</string>
+    <string name="screen_zoom_summary_default" msgid="2247006805614056507">"تلقائي"</string>
     <string name="screen_zoom_summary_large" msgid="4835294730065424084">"كبير"</string>
     <string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"أكبر"</string>
     <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"أكبر مستوى"</string>
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"مخصص (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"المساعدة والتعليقات"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"القائمة"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"غرينيتش"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"إدخال كلمة المرور لإعادة الضبط بحسب بيانات المصنع في الوضع التجريبي"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"التالي"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"يلزم توفر كلمة مرور"</string>
diff --git a/packages/SettingsLib/res/values-az/arrays.xml b/packages/SettingsLib/res/values-az/arrays.xml
index a20a250..9048d93 100644
--- a/packages/SettingsLib/res/values-az/arrays.xml
+++ b/packages/SettingsLib/res/values-az/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Defolt)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Sistem Seçimini istifadə edin (Defolt)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Şəxsi Kodekləri Aktiv edin"</item>
+    <item msgid="3304843301758635896">"Şəxsi Kodekləri Deaktiv edin"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Sistem Seçimini istifadə edin (Defolt)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Şəxsi Kodekləri Aktiv edin"</item>
+    <item msgid="741805482892725657">"Şəxsi Kodekləri Deaktiv edin"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Sistem Seçimini istifadə edin (Defolt)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index 494ae00..33e9e85 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s vasitəsilə qoşuludur"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s vasitəsilə əlçatandır"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Qoşuludur, internet yoxdur"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Giriş nöqtəsi müvəqqəti olaraq doludur"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ilə qoşuludur"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s vasitəsilə əlçatandır"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Çox Yavaş"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Yavaş"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Orta"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Sürətli"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Çox Sürətli"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Ayrıldı"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Ayrılır..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Qoşulur..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi iki xətdir."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi üç xətdir."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi siqnalı tamdır."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Açıq şəbəkə"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Təhlükəsiz şəbəkə"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Silinmiş tətbiqlər"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Tətbiqləri və istifadəçiləri silin"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi axtarışlarına həmişə icazə verin"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobil data həmişə aktiv"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Birləşmə üçün avadanlıq akselerasiyası"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth cihazlarını adsız göstərin"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Mütləq səs həcmi deaktiv edin"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Diapazon daxili zəngi aktiv edin"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP Versiya"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB üzərindən tətbiqləri yoxlayın"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT vasitəsi ilə quraşdırılmış tətbiqləri zərərli davranış üzrə yoxlayın."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Adsız Bluetooth cihazları (yalnız MAC ünvanları) göstəriləcək"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Uzaqdan idarə olunan cihazlarda dözülməz yüksək səs həcmi və ya nəzarət çatışmazlığı kimi səs problemləri olduqda Bluetooth mütləq səs həcmi xüsusiyyətini deaktiv edir."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Telefondakı bütün melodiyaların Bluetooth qulaqlıqlarında oxudulmasına icazə verin"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Yerli terminal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> qalıb"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> tam enerji yığana kimi"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Naməlum"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Enerji doldurma"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"enerji yığır"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Doldurulmur"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Enerji doldurulmur"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Cihaz hazırda batareya yığa bilmir"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Tam"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Admin tərəfindən nəzarət olunur"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Admin tərəfindən aktiv edildi"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Fərdi (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Yardım və rəy"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menyu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Demo rejimində sıfırlamaq üçün parol daxil edin"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Növbəti"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Parol tələb olunur"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
index efdf34a..aaf67e7d 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (podrazumevano)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Koristi izbor sistema (podrazumevano)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Omogući opcionalne kodeke"</item>
+    <item msgid="3304843301758635896">"Onemogući opcionalne kodeke"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Koristi izbor sistema (podrazumevano)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Omogući opcionalne kodeke"</item>
+    <item msgid="741805482892725657">"Onemogući opcionalne kodeke"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Koristi izbor sistema (podrazumevano)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index fb06a82..48e8e6d 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Veza je uspostavljena preko pristupne tačke %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupna je preko pristupne tačke %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Veza je uspostavljena, nema interneta"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pristupna tačka je privremeno zauzeta"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Povezano preko %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Dostupno preko %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Veoma spora"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Spora"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Potvrdi"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Srednja"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Brza"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Veoma brza"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Veza je prekinuta"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Prekidanje veze..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Povezivanje…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi signal ima dve crte."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi signal ima tri crte."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi signal je najjači."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Otvorena mreža"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Bezbedna mreža"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Uklonjene aplikacije"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Uklonjene aplikacije i korisnici"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Uvek dozvoli skeniranje Wi‑Fi-ja u romingu"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilni podaci su uvek aktivni"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardversko ubrzanje privezivanja"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Prikaži Bluetooth uređaje bez naziva"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogući glavno podešavanje jačine zvuka"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Omogućavanje zvonjave na istom kanalu"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Verzija Bluetooth AVRCP-a"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifikuj aplikacije preko USB-a"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Proverava da li su aplikacije instalirane preko ADB-a/ADT-a štetne."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Biće prikazani Bluetooth uređaji bez naziva (samo sa MAC adresama)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Onemogućava glavno podešavanje jačine zvuka na Bluetooth uređaju u slučaju problema sa jačinom zvuka na daljinskim uređajima, kao što su izuzetno velika jačina zvuka ili nedostatak kontrole."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Omogućite da se melodija zvona na telefonu pušta preko Bluetooth slušalica"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Lokalni terminal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"Preostalo je <xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> do potpunog punjenja"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Nepoznato"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Punjenje"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"puni se"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Ne puni se"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ne puni se"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Priključeno je, ali punjenje trenutno nije moguće"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Puno"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontroliše administrator"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Omogućio je administrator"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Prilagođeni (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Pomoć i povratne informacije"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Meni"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Unesite lozinku da biste obavili resetovanje na fabrička podešavanja u režimu demonstracije"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Dalje"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Potrebna je lozinka"</string>
diff --git a/packages/SettingsLib/res/values-be/arrays.xml b/packages/SettingsLib/res/values-be/arrays.xml
index bf83692..ce5ca02 100644
--- a/packages/SettingsLib/res/values-be/arrays.xml
+++ b/packages/SettingsLib/res/values-be/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (стандартная)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Выбар сістэмы (стандартны)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Аўдыя <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Аўдыя <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Уключыць дадатковыя кодэкі"</item>
+    <item msgid="3304843301758635896">"Адключыць дадатковыя кодэкі"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Выбар сістэмы (стандартны)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Аўдыя <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Аўдыя <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Уключыць дадатковыя кодэкі"</item>
+    <item msgid="741805482892725657">"Адключыць дадатковыя кодэкі"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Выбар сістэмы (стандартны)"</item>
     <item msgid="8895532488906185219">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index f73fd39..551a86d 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Падлучана праз %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Даступна праз %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Падлучана, няма інтэрнэту"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Пункт доступу часова заняты"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Падлучана праз %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Даступна праз %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Вельмі павольная"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Павольная"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ОК"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Сярэдняя"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Хуткая"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Вельмі хуткая"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Адключана"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Адключэнне..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Злучэнне..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Два слупкi Wi-Fi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Тры слупкi Wi-Fi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Поўны сігнал Wi-Fi."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Адкрытая сетка"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Бяспечная сетка"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"АС Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Выдаленыя прыкладанні"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Выдаленыя прыкладанні і карыстальнiкi"</string>
@@ -113,7 +119,7 @@
     <string name="user_guest" msgid="8475274842845401871">"Госць"</string>
     <string name="unknown" msgid="1592123443519355854">"Невядома"</string>
     <string name="running_process_item_user_label" msgid="3129887865552025943">"Карыстальнiк: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
-    <string name="launch_defaults_some" msgid="313159469856372621">"Некат. параметры па змаўч. усталяваныя"</string>
+    <string name="launch_defaults_some" msgid="313159469856372621">"Усталяваны некаторыя стандартныя налады"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"Параметры па змаўчанні не ўсталяваныя"</string>
     <string name="tts_settings" msgid="8186971894801348327">"Налады Text-to-speech"</string>
     <string name="tts_settings_title" msgid="1237820681016639683">"Сінтэз маўлення"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Заўсёды дазваляць роўмінгавае сканіраванне Wi‑Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Мабільная перадача даных заўсёды актыўная"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Апаратнае паскарэнне ў рэжыме мадэма"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Паказваць прылады Bluetooth без назваў"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Адключыць абсалютны гук"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Уключыць унутрыпалосны празвон"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Версія Bluetooth AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Гэтыя налады прызначаны толькi для распрацоўшыкаў. Яны могуць выклікаць збоi прылад i ўсталяваных на iх прыкладанняў, а таксама перашкаджаць iх працы."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Праверце прыкладаннi па USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Праверце прыкладаннi, усталяваныя з дапамогай ADB/ADT, на нестабiльныя паводзiны."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Прылады Bluetooth будуць паказаны без назваў (толькі MAC-адрасы)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Адключыць функцыю абсалютнага гуку Bluetooth у выпадку праблем з гукам на аддаленых прыладах, напр., пры непрымальна высокай гучнасці або адсутнасці кіравання."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Дазволіць прайграванне рынгтонаў на тэлефоне праз гарнітуры Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Лакальны тэрмінал"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – засталося <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> да поўнай зарадкі"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Невядома"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Зарадка"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"ідзе зарадка"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Не зараджаецца"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Не зараджаецца"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Падключана да сеткі сілкавання, зарадзіць зараз немагчыма"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Поўная"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Кантралюецца адміністратарам"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Уключана адміністратарам"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Карыстальніцкі (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Даведка і водгукі"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Каб выканаць скід да заводскіх налад у дэманстрацыйным рэжыме, увядзіце пароль"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Далей"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Патрабуецца пароль"</string>
diff --git a/packages/SettingsLib/res/values-bg/arrays.xml b/packages/SettingsLib/res/values-bg/arrays.xml
index f118c76..7eec6ed 100644
--- a/packages/SettingsLib/res/values-bg/arrays.xml
+++ b/packages/SettingsLib/res/values-bg/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (по подразбиране)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Използване на сист. избор (стандартно)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"Разширено аудиокодиране (AAC)"</item>
+    <item msgid="5254942598247222737">"Аудио: <xliff:g id="APTX">aptX™</xliff:g> от <xliff:g id="QUALCOMM">Qualcomm®</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Аудио: <xliff:g id="APTX_HD">aptX™ HD</xliff:g> от <xliff:g id="QUALCOMM">Qualcomm®</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Активиране на кодеците по избор"</item>
+    <item msgid="3304843301758635896">"Деактивиране на кодеците по избор"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Използване на сист. избор (стандартно)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"Разширено аудиокодиране (AAC)"</item>
+    <item msgid="7848030269621918608">"Аудио: <xliff:g id="APTX">aptX™</xliff:g> от <xliff:g id="QUALCOMM">Qualcomm®</xliff:g>"</item>
+    <item msgid="298198075927343893">"Аудио: <xliff:g id="APTX_HD">aptX™ HD</xliff:g> от <xliff:g id="QUALCOMM">Qualcomm®</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Активиране на кодеците по избор"</item>
+    <item msgid="741805482892725657">"Деактивиране на кодеците по избор"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Използване на сист. избор (стандартно)"</item>
     <item msgid="8895532488906185219">"44,1 кХц"</item>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index aa42cce..802e66e 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Установена е връзка през „%1$s“"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Мрежата е достъпна през „%1$s“"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Установена е връзка – няма достъп до интернет"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Точката за достъп временно е пълна"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Установена е връзка през %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Мрежата е достъпна през %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Много бавна"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Бавна"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ОK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Средна"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Бърза"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Много бърза"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Изкл."</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Изключва се..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Установява се връзка…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi е с две чертички."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi е с три чертички."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Сигналът за Wi-Fi е пълен."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Отворена мрежа"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Защитена мрежа"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android (ОС)"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Премахнати приложения"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Премахнати приложения и потребители"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Сканирането за роуминг на Wi-Fi да е разрешено винаги"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Винаги активни мобилни данни"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Хардуерно ускорение за тетъринга"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Показване на устройствата с Bluetooth без имена"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Деактивиране на пълната сила на звука"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Активиране на звъненето в една и съща честотна лента"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Версия на AVRCP за Bluetooth"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Тези настройки са предназначени само за програмиране. Те могат да доведат до прекъсване на работата или неправилно функциониране на устройството ви и приложенията в него."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Потвържд. на прил. през USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Проверка на инсталираните чрез ADB/ADT приложения за опасно поведение."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Ще бъдат показани устройствата с Bluetooth без имена (само MAC адресите)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Деактивира функцията на Bluetooth за пълна сила на звука в случай на проблеми със звука на отдалечени устройства, като например неприемливо висока сила на звука или липса на управление."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Разрешаване на мелодиите на телефона да се възпроизвеждат на слушалките с Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Локален терминал"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – оставащо време: <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> до пълно зареждане"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Неизвестно"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Зарежда се"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"зарежда се"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Не се зарежда"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Не се зарежда"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Включена в захранването, в момента не се зарежда"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Пълна"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Контролира се от администратор"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Активирано от администратора"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Персонализирано (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Помощ и отзиви"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"Средно време по Гринуич (GMT)"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Въведете парола за възст. на фабр. настройки в демонстр. режим"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Напред"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Изисква се парола"</string>
diff --git a/packages/SettingsLib/res/values-bn/arrays.xml b/packages/SettingsLib/res/values-bn/arrays.xml
index 5e383a7..60869c4 100644
--- a/packages/SettingsLib/res/values-bn/arrays.xml
+++ b/packages/SettingsLib/res/values-bn/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (ডিফল্ট)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"সিস্টেমের নির্বাচন ব্যবহার করুন (ডিফল্ট)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> অডিও"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> অডিও"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"ঐচ্ছিক কোডেক সক্ষম করুন"</item>
+    <item msgid="3304843301758635896">"ঐচ্ছিক কোডেক অক্ষম করুন"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"সিস্টেমের নির্বাচন ব্যবহার করুন (ডিফল্ট)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> অডিও"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> অডিও"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"ঐচ্ছিক কোডেক সক্ষম করুন"</item>
+    <item msgid="741805482892725657">"ঐচ্ছিক কোডেক অক্ষম করুন"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"সিস্টেমের নির্বাচন ব্যবহার করুন (ডিফল্ট)"</item>
     <item msgid="8895532488906185219">"৪৪.১ kHz"</item>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index 62deb12..7c2c925 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -27,33 +27,37 @@
     <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP কনফিগারেশনের ব্যর্থতা"</string>
     <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"খারাপ নেটওয়ার্কের কারণে সংযুক্ত নয়"</string>
     <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"ওয়াই ফাই সংযোগের ব্যর্থতা"</string>
-    <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"প্রমাণীকরণ সমস্যা"</string>
+    <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"যাচাইকরণ সমস্যা"</string>
     <string name="wifi_cant_connect" msgid="5410016875644565884">"সংযোগ স্থাপন করা যাচ্ছে না"</string>
     <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\'এ যোগ করা যায়নি"</string>
     <string name="wifi_check_password_try_again" msgid="516958988102584767">"পাসওয়ার্ড দেখে আবার চেষ্টা করুন"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"পরিসরের মধ্যে নয়"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"স্বয়ংক্রিয়ভাবে সংযোগ করবে না"</string>
     <string name="wifi_no_internet" msgid="3880396223819116454">"কোনো ইন্টারনেট অ্যাক্সেস নেই"</string>
-    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> দ্বারা সংরক্ষিত"</string>
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> দ্বারা সেভ করা"</string>
     <string name="connected_via_network_scorer" msgid="5713793306870815341">"স্বয়ংক্রিয়ভাবে %1$s এর মাধ্যমে সংযুক্ত হয়েছে"</string>
     <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"নেটওয়ার্কের রেটিং প্রদানকারীর মাধ্যমে স্বয়ংক্রিয়ভাবে সংযুক্ত"</string>
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s মাধ্যমে সংযুক্ত হয়েছে"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s এর মাধ্যমে উপলব্ধ"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"সংযুক্ত, ইন্টারনেট নেই"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"এই মুহূর্তে অ্যাক্সেস পয়েন্টের কোনও কানেকশন ফাঁকা নেই"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s এর মাধ্যমে সংযুক্ত হয়েছে"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s এর মাধ্যমে পাওয়া যাচ্ছে"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"খুব ধীরে"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"ধীরে"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ঠিক আছে"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"মাঝারি"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"দ্রুত"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"খুব দ্রুত"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"সংযোগ বিচ্ছিন্ন করা হয়েছে"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"সংযোগ বিচ্ছিন্ন হচ্ছে..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"সংযুক্ত হচ্ছে..."</string>
     <string name="bluetooth_connected" msgid="6038755206916626419">"সংযুক্ত হয়েছে"</string>
-    <string name="bluetooth_pairing" msgid="1426882272690346242">"যুক্ত করা হচ্ছে..."</string>
+    <string name="bluetooth_pairing" msgid="1426882272690346242">"চেনানো হচ্ছে..."</string>
     <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"সংযুক্ত (কোনো ফোন নেই)"</string>
     <string name="bluetooth_connected_no_a2dp" msgid="4576188601581440337">"সংযুক্ত (কোনো মিডিয়া নেই)"</string>
-    <string name="bluetooth_connected_no_map" msgid="6504436917057479986">"সংযুক্ত (কোনো বার্তা অ্যাক্সেস নেই)"</string>
+    <string name="bluetooth_connected_no_map" msgid="6504436917057479986">"সংযুক্ত (কোনো মেসেজ অ্যাক্সেস নেই)"</string>
     <string name="bluetooth_connected_no_headset_no_a2dp" msgid="9195757766755553810">"সংযুক্ত (কোনো ফোন বা মিডিয়া নেই)"</string>
     <string name="bluetooth_connected_battery_level" msgid="7049181126136692368">"সংযুক্ত হয়েছে, ব্যাটারি <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_headset_battery_level" msgid="5504193961248406027">"সংযুক্ত হয়েছে (ফোন ছাড়া), ব্যাটারি <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
@@ -74,7 +78,7 @@
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"মিডিয়া অডিওতে সংযুক্ত রয়েছে"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ফোন অডিওতে সংযুক্ত"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ফাইল স্থানান্তর সার্ভারের সঙ্গে সংযুক্ত"</string>
-    <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"মানচিত্রে সংযুক্ত"</string>
+    <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"ম্যাপে সংযুক্ত"</string>
     <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP -তে সংযুক্ত হয়েছে"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ফাইল স্থানান্তর সার্ভারের সঙ্গে সংযুক্ত নয়"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ইনপুট ডিভাইসে সংযুক্ত"</string>
@@ -90,17 +94,19 @@
     <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"যুক্ত করুন"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"যুক্ত করুন"</string>
     <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"বাতিল করুন"</string>
-    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"যুক্ত করা থাকলে তা সংযুক্ত থাকাকালীন অবস্থায় আপনার পরিচিতিগুলি এবং কলের ইতিহাসকে অ্যাক্সেস করতে অনুমোদিত করে৷"</string>
-    <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> এর সাথে যুক্ত করা যায়নি।"</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"ভুল পিন বা পাস কী দেওয়ার কারণে <xliff:g id="DEVICE_NAME">%1$s</xliff:g> এর সঙ্গে যুক্ত করা যায়নি।"</string>
+    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"চেনানো থাকলে তা সংযুক্ত থাকাকালীন অবস্থায় আপনার পরিচিতিগুলি এবং কলের ইতিহাসকে অ্যাক্সেস করতে অনুমোদিত করে৷"</string>
+    <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> এর সাথে চেনানো যায়নি।"</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"ভুল পিন বা কোড দেওয়ার কারণে <xliff:g id="DEVICE_NAME">%1$s</xliff:g> এর সঙ্গে চেনানো যায়নি।"</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> এর সঙ্গে যোগাযোগ করতে পারবেন না।"</string>
-    <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"যুক্ত করা <xliff:g id="DEVICE_NAME">%1$s</xliff:g> প্রত্যাখ্যান করেছে।"</string>
+    <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"চেনানো <xliff:g id="DEVICE_NAME">%1$s</xliff:g> প্রত্যাখ্যান করেছে।"</string>
     <string name="accessibility_wifi_off" msgid="1166761729660614716">"ওয়াই ফাই বন্ধ৷"</string>
     <string name="accessibility_no_wifi" msgid="8834610636137374508">"ওয়াই ফাই এর সংযোগ বিচ্ছিন্ন হয়েছে৷"</string>
     <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"ওয়াই ফাই এ একটি দণ্ড৷"</string>
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"ওয়াই ফাই এ দুইটি দণ্ড৷"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"ওয়াই ফাই এ তিনটি দণ্ড৷"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"ওয়াই ফাই এ সম্পূর্ণ সিগন্যাল৷"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"খোলা নেটওয়ার্ক"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"সুরক্ষিত নেটওয়ার্ক"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"সরানো অ্যাপ্লিকেশানগুলি"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"সরানো অ্যাপ্লিকেশানগুলি এবং ব্যবহারকারীগণ"</string>
@@ -129,7 +135,7 @@
     <string name="tts_play_example_summary" msgid="8029071615047894486">"কথন সংশ্লেষণের উপর একটি ছোট ডেমো প্লে করুন"</string>
     <string name="tts_install_data_title" msgid="4264378440508149986">"ভয়েস ডেটা ইনস্টল করুন"</string>
     <string name="tts_install_data_summary" msgid="5742135732511822589">"বিবৃতি সংশ্লেষণের জন্য প্রয়োজনীয় ভয়েস ডেটা ইনস্টল করুন"</string>
-    <string name="tts_engine_security_warning" msgid="8786238102020223650">"এই বিবৃতি সংশ্লেষণ ইঞ্জিন হয়তো পাসওয়ার্ড এবং ক্রেডিট কার্ড নম্বর সহ কথ্য সমস্ত পাঠ্য সংগ্রহ করতে সক্ষম হতে পারে। এটি <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> ইঞ্জিন থেকে আসে। এই বিবৃতি সংশ্লেষণ ইঞ্জিন সক্ষম করবেন?"</string>
+    <string name="tts_engine_security_warning" msgid="8786238102020223650">"এই বিবৃতি সংশ্লেষণ ইঞ্জিন হয়ত পাসওয়ার্ড এবং ক্রেডিট কার্ড নম্বর সহ কথ্য সমস্ত টেক্সট সংগ্রহ করতে সক্ষম হতে পারে। এটি <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> ইঞ্জিন থেকে আসে। এই বিবৃতি সংশ্লেষণ ইঞ্জিন সক্রিয় করবেন?"</string>
     <string name="tts_engine_network_required" msgid="1190837151485314743">"পাঠ্য থেকে ভাষ্য আউটপুটের জন্য এই ভাষার একটি কাজ করছে এমন নেটওয়ার্ক সংযোগ প্রয়োজন।"</string>
     <string name="tts_default_sample_string" msgid="4040835213373086322">"এটি হল ভাষ্য সংশ্লেষণের একটি উদাহরণ"</string>
     <string name="tts_status_title" msgid="7268566550242584413">"ডিফল্ট ভাষা স্থিতি"</string>
@@ -142,7 +148,7 @@
     <string name="tts_engine_preference_section_title" msgid="448294500990971413">"পছন্দের ইঞ্জিন"</string>
     <string name="tts_general_section_title" msgid="4402572014604490502">"সাধারণ"</string>
     <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"ভাষ্য়ের শব্দ মাত্রাকে আবার সেট করুন"</string>
-    <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"ডিফল্ট হিসাবে যে মাত্রায় পাঠ্য উচ্চারিত হয়, সেই শব্দ মাত্রাকে আবার সেট করুন৷"</string>
+    <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"ডিফল্ট হিসেবে যে মাত্রায় পাঠ্য উচ্চারিত হয়, সেই শব্দ মাত্রাকে আবার সেট করুন৷"</string>
   <string-array name="tts_rate_entries">
     <item msgid="6695494874362656215">"অত্যন্ত ধীরে"</item>
     <item msgid="4795095314303559268">"ধীর"</item>
@@ -157,10 +163,10 @@
     <string name="choose_profile" msgid="6921016979430278661">"প্রোফাইল বেছে নিন"</string>
     <string name="category_personal" msgid="1299663247844969448">"ব্যক্তিগত"</string>
     <string name="category_work" msgid="8699184680584175622">"কর্মক্ষেত্র"</string>
-    <string name="development_settings_title" msgid="215179176067683667">"বিকাশকারী বিকল্পগুলি"</string>
-    <string name="development_settings_enable" msgid="542530994778109538">"বিকাশকারী বিকল্পগুলি সক্ষম করুন"</string>
+    <string name="development_settings_title" msgid="215179176067683667">"ডেভেলপার বিকল্প"</string>
+    <string name="development_settings_enable" msgid="542530994778109538">"ডেভেলপার বিকল্প সক্ষম করুন"</string>
     <string name="development_settings_summary" msgid="1815795401632854041">"অ্যাপ্লিকেশান উন্নয়নের জন্য বিকল্পগুলি সেট করুন"</string>
-    <string name="development_settings_not_available" msgid="4308569041701535607">"এই ব্যবহারকারীর জন্য বিকাশকারী বিকল্পগুলি উপলব্ধ নয়"</string>
+    <string name="development_settings_not_available" msgid="4308569041701535607">"এই ব্যবহারকারীর জন্য ডেভেলপার বিকল্প উপলব্ধ নয়"</string>
     <string name="vpn_settings_not_available" msgid="956841430176985598">"এই ব্যবহারকারীর জন্য VPN সেটিংস উপলব্ধ নয়"</string>
     <string name="tethering_settings_not_available" msgid="6765770438438291012">"এই ব্যবহারকারীর জন্য টেদারিং সেটিংস উপলব্ধ নয়"</string>
     <string name="apn_settings_not_available" msgid="7873729032165324000">"এই ব্যবহারকারীর জন্য অ্যাক্সেস পয়েন্ট নাম সেটিংস উপলব্ধ নয়"</string>
@@ -177,7 +183,7 @@
     <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"বুট-লোডার আনলক করার অনুমতি দিন"</string>
     <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM আনলক করার অনুমতি দিতে চান?"</string>
     <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"সতর্কতা: এই ডিভাইসে সেটিংটি চালু থাকা অবস্থায় ডিভাইস সুরক্ষা বৈশিষ্ট্যগুলি কাজ করবে না৷"</string>
-    <string name="mock_location_app" msgid="7966220972812881854">"অনুরূপ অবস্থান অ্যাপ্লিকেশান নির্বাচন করুন"</string>
+    <string name="mock_location_app" msgid="7966220972812881854">"অনুরূপ অবস্থান অ্যাপ্লিকেশান বেছে নিন"</string>
     <string name="mock_location_app_not_set" msgid="809543285495344223">"কোনো অনুরূপ অবস্থান অ্যাপ্লিকেশান সেট করা নেই"</string>
     <string name="mock_location_app_set" msgid="8966420655295102685">"অনুরূপ অবস্থান অ্যাপ্লিকেশান: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="7044075693643009662">"নেটওয়ার্কিং"</string>
@@ -187,10 +193,11 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"সর্বদা ওয়াই ফাই রোম স্ক্যানকে অনুমতি দিন"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"মোবাইল ডেটা সব সময় সক্রিয় থাক"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"টিথারিং হার্ডওয়্যার অ্যাক্সিলারেশন"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"নামহীন ব্লুটুথ ডিভাইসগুলি দেখুন"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"চূড়ান্ত ভলিউম অক্ষম করুন"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"ইন-ব্যান্ড রিং করা সক্ষম করুন"</string>
-    <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ব্লুটুথ AVRCP সংস্করণ"</string>
-    <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"ব্লুটুথ AVRCP সংস্করণ বেছে নিন"</string>
+    <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ব্লুটুথ AVRCP ভার্সন"</string>
+    <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"ব্লুটুথ AVRCP ভার্সন বেছে নিন"</string>
     <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ব্লুটুথ অডিও কোডেক"</string>
     <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="4558347981670553665">"ব্লুটুথ অডিও কোডেক বেছে নিন"</string>
     <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ব্লুটুথ অডিওর নমুনা হার"</string>
@@ -207,13 +214,13 @@
     <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"সক্ষম করা থাকলে, ওয়াই ফাই সিগন্যালের মান খারাপ হলে ডেটা সংযোগ মোবাইলের কাছে হস্তান্তর করার জন্য ওয়াই ফাই আরো বেশি তৎপর হবে।"</string>
     <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"ইন্টারফেসে উপস্থিত ডেটা ট্রাফিকের পরিমাণের উপরে ভিত্তি করে ওয়াই-ফাই রোম স্ক্যানকে অনুমোদিত/অননুমোদিত করুন"</string>
     <string name="select_logd_size_title" msgid="7433137108348553508">"লগার বাফারের আকারগুলি"</string>
-    <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"লগ বাফার প্রতি অপেক্ষাকৃত বড় আকারগুলির নির্বাচন করুন"</string>
-    <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"লগারের সঞ্চয়স্থান সাফ করবেন?"</string>
+    <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"লগ বাফার প্রতি অপেক্ষাকৃত বড় আকারগুলির বেছে নিন"</string>
+    <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"লগারের স্টোরেজ সাফ করবেন?"</string>
     <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"যেহেতু আমারা সর্বদা লগার চালু রেখে আর নিরিক্ষণ করছি না, তাই আমাদের আপনার ডিভাইসে থাকা লগার ডেটা মুছে ফেলতে হবে৷"</string>
-    <string name="select_logpersist_title" msgid="7530031344550073166">"ডিভাইসে স্থায়ীভাবে লগার ডেটা সংরক্ষণ করুন"</string>
-    <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"ডিভাইসে স্থায়ীভাবে সঞ্চয় করতে লগ বাফারগুলিকে নির্বাচন করুন"</string>
-    <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB কনফিগারেশন নির্বাচন করুন"</string>
-    <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB কনফিগারেশন নির্বাচন করুন"</string>
+    <string name="select_logpersist_title" msgid="7530031344550073166">"ডিভাইসে স্থায়ীভাবে লগার ডেটা সেভ করুন"</string>
+    <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"ডিভাইসে স্থায়ীভাবে সঞ্চয় করতে লগ বাফারগুলিকে বেছে নিন"</string>
+    <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB কনফিগারেশন বেছে নিন"</string>
+    <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB কনফিগারেশন বেছে নিন"</string>
     <string name="allow_mock_location" msgid="2787962564578664888">"নকল অবস্থানের অনুমতি দিন"</string>
     <string name="allow_mock_location_summary" msgid="317615105156345626">"মক অবস্থানগুলি মঞ্জুর করুন"</string>
     <string name="debug_view_attributes" msgid="6485448367803310384">"অ্যাট্রিবিউট পরিদর্শন দেখা সক্ষম করুন"</string>
@@ -224,8 +231,9 @@
     <string name="adb_keys_warning_message" msgid="5659849457135841625">"আপনি আগে যে সব কম্পিউটার USB ডিবাগিং এর অ্যাক্সেসের অনুমতি দিয়েছিলেন তা প্রত্যাহার করবেন?"</string>
     <string name="dev_settings_warning_title" msgid="7244607768088540165">"উন্নতি সেটিংসের অনুমতি দেবেন?"</string>
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"এইসব সেটিংস কেবলমাত্র উন্নত করার উদ্দেশ্য। সেগুলি কারণে আপনার ডিভাইস ভেঙ্গে এবং অ্যাপ্লিকেশানগুলি ভালো ভাবে কাজ করা নাও কারতে পারে।"</string>
-    <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB এর অ্যাপ্লিকেশানগুলি যাচাই করুন"</string>
+    <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB এর অ্যাপ্লিকেশনগুলি যাচাই করুন"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ক্ষতিকারক ক্রিয়াকলাপ করছে কিনা তার জন্য ADB/ADT মারফত ইনস্টল করা অ্যাপ্লিকেশানগুলি চেক করুন।"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"নামহীন ব্লুটুথ ডিভাইসগুলি দেখানো হবে (শুধুমাত্র MAC ঠিকানা)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"অপ্রত্যাশিত উচ্চ ভলিউম বা নিয়ন্ত্রণের অভাবের মত দূরবর্তী ডিভাইসের ভলিউম সমস্যাগুলির ক্ষেত্রে, ব্লুটুথ চুড়ান্ত ভলিউম বৈশিষ্ট্য অক্ষম করে৷"</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"ফোনের রিংটোন ব্লুটুথ হেডসেটে শোনা সক্ষম করুন"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"স্থানীয় টার্মিনাল"</string>
@@ -233,15 +241,15 @@
     <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP পরীক্ষণ"</string>
     <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP চেক করার আচরণ সেট করুন"</string>
     <string name="debug_debugging_category" msgid="6781250159513471316">"ডিবাগিং"</string>
-    <string name="debug_app" msgid="8349591734751384446">"ডিবাগ অ্যাপ্লিকেশান নির্বাচন করুন"</string>
+    <string name="debug_app" msgid="8349591734751384446">"ডিবাগ অ্যাপ্লিকেশান বেছে নিন"</string>
     <string name="debug_app_not_set" msgid="718752499586403499">"ডিবাগ অ্যাপ্লিকেশান সেট করা নেই"</string>
     <string name="debug_app_set" msgid="2063077997870280017">"ডিবাগিং অ্যাপ্লিকেশান: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
-    <string name="select_application" msgid="5156029161289091703">"অ্যাপ্লিকেশান নির্বাচন করুন"</string>
+    <string name="select_application" msgid="5156029161289091703">"অ্যাপ্লিকেশান বেছে নিন"</string>
     <string name="no_application" msgid="2813387563129153880">"কিছুই না"</string>
     <string name="wait_for_debugger" msgid="1202370874528893091">"ডিবাগারের জন্য অপেক্ষা করুন"</string>
     <string name="wait_for_debugger_summary" msgid="1766918303462746804">"চালানোর আগে সংযুক্ত করতে জন্য ডিবাগ করা অ্যাপ্লিকেশনটি ডিবাগারের জন্য অপেক্ষা করছে"</string>
     <string name="telephony_monitor_switch" msgid="1764958220062121194">"টেলিফোনি মনিটর"</string>
-    <string name="telephony_monitor_switch_summary" msgid="7695552966547975635">"টেলিফোনি মনিটর টেলিফোনি/মোডেমের কার্যকারিতায় কোনো সমস্যা শনাক্ত করলে সমস্যাটি লগ করবে এবং সমস্যাটি জানাতে একটি বাগ ফাইল করার জন্য ব্যবহারকারিকে বিজ্ঞপ্তি পাঠাবে"</string>
+    <string name="telephony_monitor_switch_summary" msgid="7695552966547975635">"টেলিফোনি মনিটর টেলিফোনি/মোডেমের কার্যকারিতায় কোনও সমস্যা শনাক্ত করলে সমস্যাটি লগ করবে এবং সমস্যাটি জানাতে একটি বাগ ফাইল করার জন্য ব্যবহারকারিকে বিজ্ঞপ্তি পাঠাবে"</string>
     <string name="debug_input_category" msgid="1811069939601180246">"ইনপুট"</string>
     <string name="debug_drawing_category" msgid="6755716469267367852">"অঙ্কন"</string>
     <string name="debug_hw_drawing_category" msgid="6220174216912308658">"হার্ডওয়্যার দ্বারা চালিত রেন্ডারিং"</string>
@@ -281,7 +289,7 @@
     <string name="transition_animation_scale_title" msgid="387527540523595875">"ট্র্যানজিশন অ্যানিমেশন স্কেল"</string>
     <string name="animator_duration_scale_title" msgid="3406722410819934083">"অ্যানিমেটর সময়কাল স্কেল"</string>
     <string name="overlay_display_devices_title" msgid="5364176287998398539">"গৌণ প্রদর্শনগুলি নকল করুন"</string>
-    <string name="debug_applications_category" msgid="4206913653849771549">"অ্যাপ্লিকেশানগুলি"</string>
+    <string name="debug_applications_category" msgid="4206913653849771549">"অ্যাপ"</string>
     <string name="immediately_destroy_activities" msgid="1579659389568133959">"কার্যকলাপ রাখবেন না"</string>
     <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ব্যবহারকারী এটি ছেড়ে যাওয়ার পরে যত তাড়াতাড়ি সম্ভব প্রতিটি কার্যকলাপ ধ্বংস করুন"</string>
     <string name="app_process_limit_title" msgid="4280600650253107163">"পশ্চাদপট প্রক্রিয়ার সীমা"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> বাকী আছে"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - সম্পূর্ণ চার্জ হতে <xliff:g id="TIME">^2</xliff:g> লাগবে"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"অজানা"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"চার্জ হচ্ছে"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"চার্জ হচ্ছে"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"চার্জ হচ্ছে না"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"চার্জ হচ্ছে না"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"প্লাগ-ইন করা হয়েছে কিন্তু এখনই চার্জ করা যাবে না"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"পূর্ণ"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"প্রশাসকের দ্বারা নিয়ন্ত্রিত"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"প্রশাসক দ্বারা সক্ষম করা হয়েছে"</string>
@@ -375,13 +382,12 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"কাস্টম (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"সহায়তা ও মতামত"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"মেনু"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"ডেমো মোডে ফ্যাক্টরি রিসেট করতে পাসওয়ার্ড দিন"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"পরবর্তী"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"পাসওয়ার্ড আবশ্যক"</string>
     <string name="active_input_method_subtypes" msgid="3596398805424733238">"সক্রিয় ইনপুট পদ্ধতিগুলি"</string>
     <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"সিস্টেমের ভাষাগুলি ব্যবহার করুন"</string>
     <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"<xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g> জন্য সেটিংস খুলতে ব্যর্থ হয়েছে"</string>
-    <string name="ime_security_warning" msgid="4135828934735934248">"এই ইনপুট পদ্ধতিটি হয়তো পাসওয়ার্ড এবং ক্রেডিট কার্ড নম্বর সহ আপনার টাইপ করা সমস্ত পাঠ্য সংগ্রহ করতে সক্ষম হতে পারে। এটি <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g> অ্যাপ্লিকেশানের। এই ইনপুট পদ্ধতিটি ব্যবহার করবেন?"</string>
+    <string name="ime_security_warning" msgid="4135828934735934248">"এই ইনপুট পদ্ধতিটি হয়ত পাসওয়ার্ড এবং ক্রেডিট কার্ড নম্বর সহ আপনার টাইপ করা সমস্ত টেক্সট সংগ্রহ করতে সক্ষম হতে পারে। এটি <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g> অ্যাপ থেকে এসেছে। এই ইনপুট পদ্ধতিটি ব্যবহার করবেন?"</string>
     <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"দ্রষ্টব্য: পুনরায় চালু করার পরে, আপনি আপনার ফোন আনলক না করা পর্যন্ত এই অ্যাপটিকে চালু করতে পারবেন না"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-bs/arrays.xml b/packages/SettingsLib/res/values-bs/arrays.xml
index 71d0958..af04a04 100644
--- a/packages/SettingsLib/res/values-bs/arrays.xml
+++ b/packages/SettingsLib/res/values-bs/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Zadano)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Koristi odabir sistema (Zadano)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Omogućite opcionalne kodeke"</item>
+    <item msgid="3304843301758635896">"Onemogućite opcionalne kodeke"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Koristi odabir sistema (Zadano)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Omogućite opcionalne kodeke"</item>
+    <item msgid="741805482892725657">"Onemogućite opcionalne kodeke"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Koristi odabir sistema (Zadano)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
@@ -213,7 +231,7 @@
   </string-array>
   <string-array name="debug_hw_overdraw_entries">
     <item msgid="8190572633763871652">"Isključeno"</item>
-    <item msgid="7688197031296835369">"Prikaži overdraw područja"</item>
+    <item msgid="7688197031296835369">"Prikaži područja preklapanja"</item>
     <item msgid="2290859360633824369">"Prikaži područja za Deuteranomaly"</item>
   </string-array>
   <string-array name="debug_hw_renderer_entries">
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index ca187ab..48eab8d 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -34,18 +34,22 @@
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Nije u dometu"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"Neće se automatski povezati"</string>
     <string name="wifi_no_internet" msgid="3880396223819116454">"Nema pristupa internetu"</string>
-    <string name="saved_network" msgid="4352716707126620811">"Sačuvao <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="saved_network" msgid="4352716707126620811">"Sačuvano: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatski povezano koristeći %1$s"</string>
     <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatski povezano putem ocjenjivača mreže"</string>
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Povezani preko %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupan preko %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Povezano. Nema interneta"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pristupna tačka je privremeno puna"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Povezana koristeći %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Dostupna koristeći %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Veoma sporo"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Sporo"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"UREDU"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Srednja brzina"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Brzo"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Veoma brzo"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Isključen"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Prekidanje veze…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Povezivanje…"</string>
@@ -67,7 +71,7 @@
     <string name="bluetooth_profile_pbap" msgid="5372051906968576809">"Dijeljenje kontakta"</string>
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Koristi za dijeljenje kontakta"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Dijeljenje internet veze"</string>
-    <string name="bluetooth_profile_map" msgid="1019763341565580450">"Tekstualne poruke"</string>
+    <string name="bluetooth_profile_map" msgid="1019763341565580450">"SMS-ovi"</string>
     <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Pristup SIM-u"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="5444517801472820055">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="8510588052415438887">"HD audio"</string>
@@ -101,10 +105,12 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi dvije crtice."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi tri crtice."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi puni signal."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Otvorena mreža"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sigurna mreža"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Uklonjene aplikacije"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Uklonjene aplikacije i korisnici"</string>
-    <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB dijeljenje veze"</string>
+    <string name="tether_settings_title_usb" msgid="6688416425801386511">"Povezivanje mobitela USB-om"</string>
     <string name="tether_settings_title_wifi" msgid="3277144155960302049">"Prijenosna pristupna tačka"</string>
     <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Dijeljenje Bluetooth veze"</string>
     <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Dijeljenje veze"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Uvijek dopustiti Wi-Fi lutajuće skeniranje"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilna mreža za prijenos podataka je uvijek aktivna"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardversko ubrzavanje dijeljenja veze"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Prikaži Bluetooth uređaje bez naziva"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogućite apsolutnu jačinu zvuka"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Omogući zvono unutar pojasa"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP verzija"</string>
@@ -205,7 +212,7 @@
     <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Pokaži opcije za certifikaciju Bežičnog prikaza"</string>
     <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećajte nivo Wi-Fi zapisivanja, pokazati po SSID RSSI Wi-Fi Picker"</string>
     <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"Kada je omogućeno, Wi-Fi veza će u slučaju slabog signala agresivnije predavati vezu za prijenos podataka na mobilnu vezu"</string>
-    <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Dozvoli/Zabrani Wi-Fi lutajuće skeniranje na osnovu količine podatkovnog prometa prisutnog na sučelju"</string>
+    <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Dozvoli/Zabrani Wi-Fi lutajuće skeniranje na osnovu količine podatkovnog saobraćaja prisutnog na interfejsu"</string>
     <string name="select_logd_size_title" msgid="7433137108348553508">"Veličine bafera za zapisnik"</string>
     <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Odaberite veličine za Logger prema međumemoriji evidencije"</string>
     <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Želite li izbrisati trajnu pohranu zapisivača?"</string>
@@ -217,7 +224,7 @@
     <string name="allow_mock_location" msgid="2787962564578664888">"Dozvoli lažne lokacije"</string>
     <string name="allow_mock_location_summary" msgid="317615105156345626">"Dozvoli lažne lokacije"</string>
     <string name="debug_view_attributes" msgid="6485448367803310384">"Omogući pregled atributa prikaza"</string>
-    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Uvijek drži mobilne podatke aktivnim, čak i kada je Wi-Fi je aktivan (za brzo prebacivanje između mreža)."</string>
+    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Uvijek drži prijenos podataka na mobilnoj mreži aktivnim, čak i kada je Wi-Fi je aktivan (za brzo prebacivanje između mreža)."</string>
     <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Koristi hardversko ubrzavanje dijeljenja veze, ako je dostupno"</string>
     <string name="adb_warning_title" msgid="6234463310896563253">"Omogućiti otklanjanje grešaka putem uređaja spojenog na USB?"</string>
     <string name="adb_warning_message" msgid="7316799925425402244">"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>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ove postavke su namijenjene samo za svrhe razvoja. Mogu izazvati pogrešno ponašanje uređaja i aplikacija na njemu."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifikuj aplikacije putem USB-a"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Provjerava da li se u aplikacijama instaliranim putem ADB-a/ADT-a javlja zlonamerno ponašanje."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Prikazat će se Bluetooth uređaji bez naziva (samo MAC adrese)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Onemogućava opciju Bluetooth apsolutne jačine zvuka u slučaju problema s jačinom zvuka na udaljenim uređajima, kao što je neprihvatljivo glasan zvuk ili nedostatak kontrole."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Dopusti da se melodije zvona reproduciranju na Bluetooth slušalicama"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Lokalni terminal"</string>
@@ -259,7 +267,7 @@
     <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Prikazi uz treptanje unutar prozora kada se crta koristeći GPU"</string>
     <string name="show_hw_layers_updates" msgid="5645728765605699821">"Prikaži dodatne informacije za ažuriranja za hardver"</string>
     <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Trepći hardverske slojeve zeleno kada se ažuriraju"</string>
-    <string name="debug_hw_overdraw" msgid="2968692419951565417">"Otkl. GPU overdraw greške"</string>
+    <string name="debug_hw_overdraw" msgid="2968692419951565417">"Otkl. greške GPU preklap."</string>
     <string name="debug_hw_renderer" msgid="7568529019431785816">"Postavite GPU renderer"</string>
     <string name="disable_overlays" msgid="2074488440505934665">"Onemog. HW preklapanja"</string>
     <string name="disable_overlays_summary" msgid="3578941133710758592">"Uvijek koristi GPU za kompoziciju ekrana"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - imate još <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> do potpune napunjenosti"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Nepoznato"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Punjenje"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"punjenje"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Ne puni se"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ne puni se"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Priključen, trenutno se ne može puniti"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Puna"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Pod kontrolom administratora"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Omogućio administrator"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Prilagodi (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Pomoć i povratne informacije"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Meni"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Unesite lozinku da izvršite vraćanje na fabričke postavke u načinu demonstracije"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Naprijed"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Potrebna je lozinka"</string>
diff --git a/packages/SettingsLib/res/values-ca/arrays.xml b/packages/SettingsLib/res/values-ca/arrays.xml
index 1382419..3cda6ab 100644
--- a/packages/SettingsLib/res/values-ca/arrays.xml
+++ b/packages/SettingsLib/res/values-ca/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (predeterminada)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Utilitza selecció del sistema (predeterminada)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Àudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Àudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Activa els còdecs opcionals"</item>
+    <item msgid="3304843301758635896">"Desactiva els còdecs opcionals"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Utilitza selecció del sistema (predeterminada)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Àudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Àudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Activa els còdecs opcionals"</item>
+    <item msgid="741805482892725657">"Desactiva els còdecs opcionals"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Utilitza selecció del sistema (predeterminada)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
@@ -213,7 +231,7 @@
   </string-array>
   <string-array name="debug_hw_overdraw_entries">
     <item msgid="8190572633763871652">"Desactiva"</item>
-    <item msgid="7688197031296835369">"Mostra les àrees superposades"</item>
+    <item msgid="7688197031296835369">"Mostra les àrees sobredibuixades"</item>
     <item msgid="2290859360633824369">"Mostra les àrees amb deuteranomalia"</item>
   </string-array>
   <string-array name="debug_hw_renderer_entries">
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 00bb4a9..d0188f4 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Connectada mitjançant %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible mitjançant %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connectada, sense Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"El punt d\'accés està temporalment ple"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Connectat mitjançant %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Disponible mitjançant %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Molt lenta"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Correcta"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Mitjana"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Ràpida"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Molt ràpida"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Desconnectat"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"S\'està desconnectant..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"S\'està connectant…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Senyal Wi-Fi: dues barres."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Senyal Wi-Fi: tres barres."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Senyal Wi-Fi: complet."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Xarxa oberta"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Xarxa segura"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplicacions eliminades"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplicacions i usuaris eliminats"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permet sempre cerca de Wi-Fi en ininerància"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Dades mòbils sempre actives"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Acceleració per maquinari per compartir la xarxa"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostra els dispositius Bluetooth sense el nom"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desactiva el volum absolut"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Activa el so al mateix canal"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versió AVRCP de Bluetooth"</string>
@@ -226,8 +233,9 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifica aplicacions per USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Comprova les aplicacions instal·lades mitjançant ADB/ADT per detectar possibles comportaments perillosos"</string>
-    <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Desactiva la funció de volum absolut de Bluetooth en cas que es produeixin problemes de volum amb dispositius remots, com ara un volum massa alt o una manca de control."</string>
-    <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Permet que els sons de trucada del telèfon es reprodueixin en auriculars amb Bluetooth"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Es mostraran els dispositius Bluetooth sense el nom (només l\'adreça MAC)"</string>
+    <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Desactiva la funció de volum absolut del Bluetooth en cas que es produeixin problemes de volum amb dispositius remots, com ara un volum massa alt o una manca de control."</string>
+    <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Permet que els sons de trucada del telèfon es reprodueixin en auriculars Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
     <string name="enable_terminal_summary" msgid="67667852659359206">"Activa l\'aplicació de terminal que ofereix accés al shell local"</string>
     <string name="hdcp_checking_title" msgid="8605478913544273282">"Comprovació HDCP"</string>
@@ -259,7 +267,7 @@
     <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Actualitza visualitzacions de finestres creades amb GPU"</string>
     <string name="show_hw_layers_updates" msgid="5645728765605699821">"Mostra actualitzacions capes"</string>
     <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Il·lumina capes de maquinari en verd en actualitzar-se"</string>
-    <string name="debug_hw_overdraw" msgid="2968692419951565417">"Depura superposició de GPU"</string>
+    <string name="debug_hw_overdraw" msgid="2968692419951565417">"Depura sobredibuix de GPU"</string>
     <string name="debug_hw_renderer" msgid="7568529019431785816">"Configura renderitzador GPU"</string>
     <string name="disable_overlays" msgid="2074488440505934665">"Desactiva superposicions HW"</string>
     <string name="disable_overlays_summary" msgid="3578941133710758592">"Utilitza sempre GPU per combinar pantalles"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g>; temps restant: <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g>: <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g>: <xliff:g id="TIME">^2</xliff:g> per completar la càrrega"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g>: <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Desconegut"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"S\'està carregant"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"s\'està carregant"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"No s\'està carregant"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"No s\'està carregant"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"El dispositiu està endollat però en aquests moments no es pot carregar"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Plena"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlat per l\'administrador"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Activada per l\'administrador"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalitzat (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Ajuda i suggeriments"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menú"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Introdueix la contrasenya per restablir les dades de fàbrica en mode de demostració"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Següent"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Contrasenya obligatòria"</string>
diff --git a/packages/SettingsLib/res/values-cs/arrays.xml b/packages/SettingsLib/res/values-cs/arrays.xml
index cbb3cc1..9d665a3 100644
--- a/packages/SettingsLib/res/values-cs/arrays.xml
+++ b/packages/SettingsLib/res/values-cs/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (výchozí)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Použít systémový výběr (výchozí)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Zvuk <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Zvuk <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Povolit volitelné kodeky"</item>
+    <item msgid="3304843301758635896">"Zakázat volitelné kodeky"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Použít systémový výběr (výchozí)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Zvuk <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Zvuk <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Povolit volitelné kodeky"</item>
+    <item msgid="741805482892725657">"Zakázat volitelné kodeky"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Použít systémový výběr (výchozí)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index 8dd1c32..daa3015 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Připojeno prostřednictvím %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupné prostřednictvím %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Připojeno, není k dispozici internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Přístupový bod je dočasně zaplněn"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Připojeno prostřednictvím %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Dostupné prostřednictvím %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Velmi pomalá"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Pomalá"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Střední"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Rychlá"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Velmi rychlá"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Odpojeno"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Odpojování..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Připojování..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi – dvě čárky."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi – tři čárky."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi – plný signál."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Nezabezpečená síť"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Zabezpečená síť"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"OS Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Odebrané aplikace"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Odebrané aplikace a odebraní uživatelé"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vždy povolit Wi-Fi roaming"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilní data jsou vždy aktivní"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardwarová akcelerace tetheringu"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Zobrazovat zařízení Bluetooth bez názvů"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Zakázat absolutní hlasitost"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Povolit vyzvánění v hovorovém pásmu"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Verze profilu Bluetooth AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Ověřit aplikace z USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kontrolovat škodlivost aplikací nainstalovaných pomocí nástroje ADB/ADT"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Zařízení Bluetooth se budou zobrazovat bez názvů (pouze adresy MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Zakáže funkci absolutní hlasitosti Bluetooth. Zabrání tak problémům s hlasitostí vzdálených zařízení (jako je příliš vysoká hlasitost nebo nemožnost ovládání)."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Umožňuje přehrávat vyzváněcí tóny z telefonu v náhlavní soupravě Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Místní terminál"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – zbývá <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – plně se nabije za <xliff:g id="TIME">^2</xliff:g>"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Neznámé"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Nabíjí se"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"nabíjení"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Nenabíjí se"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nenabíjí se"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Zapojeno, ale nelze nabíjet"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Nabitá"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Spravováno administrátorem"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Zapnuto administrátorem"</string>
@@ -375,10 +382,9 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Vlastní (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Nápověda a zpětná vazba"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Nabídka"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Chcete-li v ukázkovém režimu obnovit zařízení do továrního nastavení, zadejte heslo"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Další"</string>
-    <string name="retail_demo_reset_title" msgid="696589204029930100">"Je třeba zadat heslo"</string>
+    <string name="retail_demo_reset_title" msgid="696589204029930100">"Zadejte heslo"</string>
     <string name="active_input_method_subtypes" msgid="3596398805424733238">"Aktivní metody zadávání"</string>
     <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Použít systémové jazyky"</string>
     <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"Nastavení aplikace <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g> se nepodařilo otevřít"</string>
diff --git a/packages/SettingsLib/res/values-da/arrays.xml b/packages/SettingsLib/res/values-da/arrays.xml
index 055ee51..0993d31 100644
--- a/packages/SettingsLib/res/values-da/arrays.xml
+++ b/packages/SettingsLib/res/values-da/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (standard)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Brug systemvalg (standard)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-lyd"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-lyd"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Aktivér Optional Codecs"</item>
+    <item msgid="3304843301758635896">"Deaktiver Optional Codecs"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Brug systemvalg (standard)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-lyd"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-lyd"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Aktivér Optional Codecs"</item>
+    <item msgid="741805482892725657">"Deaktiver Optional Codecs"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Brug systemvalg (standard)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 143ad92..25fd5b9 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -28,7 +28,7 @@
     <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"Ingen forbindelse på grund af lav netværkskvalitet"</string>
     <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi-forbindelsesfejl"</string>
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem med godkendelse"</string>
-    <string name="wifi_cant_connect" msgid="5410016875644565884">"Der kan ikke oprettes forbindelse"</string>
+    <string name="wifi_cant_connect" msgid="5410016875644565884">"Kan ikke forbinde"</string>
     <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"Der kan ikke oprettes forbindelse til \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
     <string name="wifi_check_password_try_again" msgid="516958988102584767">"Tjek adgangskoden, og prøv igen"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Ikke inden for rækkevidde"</string>
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Tilsluttet via %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Tilgængelig via %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Tilsluttet – intet internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Adgangspunktet er midlertidigt fuldt"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Tilsluttet via %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Tilgængelig via %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Meget langsom"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Langsom"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Middel"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Hurtig"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Meget hurtig"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> – <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Afbrudt"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Afbryder ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Opretter forbindelse..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi har to bjælker."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi har tre bjælker."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi har fuldt signal."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Åbent netværk"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sikkert netværk"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Fjernede apps"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Fjernede apps og brugere"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Tillad altid scanning af Wi-Fi-roaming"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobildata er altid aktiveret"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardwareacceleration ved netdeling"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Vis Bluetooth-enheder uden navne"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Deaktiver absolut lydstyrke"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Afspil ringetone via Bluetooth"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"AVRCP-version for Bluetooth"</string>
@@ -220,12 +227,13 @@
     <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Hold altid mobildata aktiveret, selv når Wi-Fi er aktiveret (for at skifte hurtigt mellem netværk)."</string>
     <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Brug hardwareacceleration ved netdeling, hvis det er muligt"</string>
     <string name="adb_warning_title" msgid="6234463310896563253">"Vil du tillade USB-fejlretning?"</string>
-    <string name="adb_warning_message" msgid="7316799925425402244">"USB-fejlretning er kun beregnet til udvikling og kan bruges til at kopiere data mellem din computer og enheden, installere apps på enheden uden meddelelser og læse logdata."</string>
+    <string name="adb_warning_message" msgid="7316799925425402244">"USB-fejlretning er kun beregnet til udvikling og kan bruges til at kopiere data mellem din computer og enheden, installere apps på enheden uden underretning og læse logdata."</string>
     <string name="adb_keys_warning_message" msgid="5659849457135841625">"Vil du ophæve adgangen til USB-fejlfinding for alle computere, du tidligere har godkendt?"</string>
     <string name="dev_settings_warning_title" msgid="7244607768088540165">"Vil du tillade udviklingsindstillinger?"</string>
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Disse indstillinger er kun beregnet til brug i forbindelse med udvikling. De kan forårsage, at din enhed og dens applikationer går ned eller ikke fungerer korrekt."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificer apps via USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Tjek apps, der er installeret via ADB/ADT, for skadelig adfærd."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth-enheder uden navne (kun MAC-adresser) vises"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Deaktiverer funktionen til absolut lydstyrke via Bluetooth i tilfælde af problemer med lydstyrken på eksterne enheder, f.eks. uacceptabel høj lyd eller manglende kontrol."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Tillad, at ringetoner på telefonen kan afspilles i Bluetooth-headset"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Lokal terminal"</string>
@@ -297,7 +305,7 @@
     <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Aktivér understøttelse af eksperimentelle vinduer i frit format."</string>
     <string name="local_backup_password_title" msgid="3860471654439418822">"Kode til lokal sikkerhedskopi"</string>
     <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Lokale fuldstændige sikkerhedskopieringer er i øjeblikket ikke beskyttet"</string>
-    <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Tryk for at skifte eller fjerne adgangskoden til fuld lokal sikkerhedskopiering"</string>
+    <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Tryk for at skifte eller fjerne adgangskoden til fuld lokal backup"</string>
     <string name="local_backup_password_toast_success" msgid="582016086228434290">"Ny adgangskode til sikkerhedskopi er angivet"</string>
     <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Ny adgangskode og bekræftelse matcher ikke"</string>
     <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Fejl ved angivelse af adgangskode til sikkerhedskopi"</string>
@@ -323,7 +331,7 @@
     <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Konvertér…"</string>
     <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Allerede filkrypteret"</string>
     <string name="title_convert_fbe" msgid="1263622876196444453">"Konverterer til filbaseret kryptering"</string>
-    <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Konvertér datapartitionen til filbaseret kryptering.\nAdvarsel! Alle dine data vil blive slettet.\n Dette er en alfafunktion, og den fungerer muligvis ikke korrekt.\n Tryk på \"Ryd og konvertér…\" for at fortsætte."</string>
+    <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Konvertér datapartitionen til filbaseret kryptering.\nAdvarsel! Alle dine data vil blive fuldstændigt slettet.\n Dette er en alfafunktion, og den fungerer muligvis ikke korrekt.\n Tryk på \"Ryd og konvertér…\" for at fortsætte."</string>
     <string name="button_convert_fbe" msgid="5152671181309826405">"Ryd og konvertér…"</string>
     <string name="picture_color_mode" msgid="4560755008730283695">"Farvetilstand for billeder"</string>
     <string name="picture_color_mode_desc" msgid="1141891467675548590">"Brug sRGB"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> tilbage"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> til det er fuldt opladet"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Ukendt"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Oplader"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"oplader"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Oplader ikke"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Oplader ikke"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Enheden er tilsluttet en strømkilde. Det er ikke muligt at oplade på nuværende tidspunkt."</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Fuld"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontrolleret af administratoren"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Aktiveret af administratoren"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Tilpasset (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Hjælp og feedback"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Angiv adgangskode for at gendanne fabriksdata i demotilstand"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Næste"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Angiv en adgangskode"</string>
diff --git a/packages/SettingsLib/res/values-de/arrays.xml b/packages/SettingsLib/res/values-de/arrays.xml
index ac61e8d..b5e3491 100644
--- a/packages/SettingsLib/res/values-de/arrays.xml
+++ b/packages/SettingsLib/res/values-de/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Standard)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Systemauswahl verwenden (Standard)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-Audio"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-Audio"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Optionale Codecs aktivieren"</item>
+    <item msgid="3304843301758635896">"Optionale Codecs deaktivieren"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Systemauswahl verwenden (Standard)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-Audio"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-Audio"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Optionale Codecs aktivieren"</item>
+    <item msgid="741805482892725657">"Optionale Codecs deaktivieren"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Systemauswahl verwenden (Standard)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index fda1aa4..7a790aa 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Über %1$s verbunden"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Verfügbar über %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Verbunden, kein Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Zugangspunkt vorübergehend voll belegt"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Über %1$s verbunden"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Verfügbar über %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Sehr langsam"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Langsam"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Mittel"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Schnell"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Sehr schnell"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> – <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Nicht verbunden"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Verbindung wird getrennt..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Verbindung wird hergestellt..."</string>
@@ -59,7 +63,7 @@
     <string name="bluetooth_connected_no_headset_battery_level" msgid="5504193961248406027">"Verbunden (außer Telefon), Akkustand: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_a2dp_battery_level" msgid="4751724026365870779">"Verbunden (außer Medienwiedergabe), Akkustand: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1549265779323455261">"Verbunden (außer Telefon und Medienwiedergabe), Akkustand: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
-    <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Media-Audio"</string>
+    <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Medien-Audio"</string>
     <string name="bluetooth_profile_headset" msgid="7815495680863246034">"Telefonanrufe"</string>
     <string name="bluetooth_profile_opp" msgid="9168139293654233697">"Dateiübertragung"</string>
     <string name="bluetooth_profile_hid" msgid="3680729023366986480">"Eingabegerät"</string>
@@ -71,8 +75,8 @@
     <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Zugriff auf SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="5444517801472820055">"HD-Audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="8510588052415438887">"HD-Audio"</string>
-    <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Verbunden mit  Audiosystem von Medien"</string>
-    <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Verbunden mit Audiosystem des Telefons"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Verbunden mit Medien-Audio"</string>
+    <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Verbunden mit Telefon-Audio"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Mit Dateiübertragungsserver verbunden"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Mit Karte verbunden"</string>
     <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Mit SAP verbunden"</string>
@@ -83,8 +87,8 @@
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Für Internetzugriff verwenden"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Für Karte verwenden"</string>
     <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Für SIM-Zugriff verwenden"</string>
-    <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Für Audiosystem von Medien verwenden"</string>
-    <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Für Audiosystem des Telefons verwenden"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Für Medien-Audio verwenden"</string>
+    <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Für Telefon-Audio verwenden"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Für Dateiübertragung verwenden"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"Für Eingabe verwenden"</string>
     <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Koppeln"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"WLAN: zwei Balken"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"WLAN: drei Balken"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"WLAN: volle Signalstärke"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Offenes Netzwerk"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sicheres Netzwerk"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Entfernte Apps"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Entfernte Apps und Nutzer"</string>
@@ -115,8 +121,8 @@
     <string name="running_process_item_user_label" msgid="3129887865552025943">"Nutzer: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="launch_defaults_some" msgid="313159469856372621">"Einige Standardeinstellungen festgelegt"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"Keine Standardeinstellungen festgelegt"</string>
-    <string name="tts_settings" msgid="8186971894801348327">"Text-in-Sprache"</string>
-    <string name="tts_settings_title" msgid="1237820681016639683">"Text-in-Sprache-Ausgabe"</string>
+    <string name="tts_settings" msgid="8186971894801348327">"Sprachausgabe"</string>
+    <string name="tts_settings_title" msgid="1237820681016639683">"Sprachausgabe-Ausgabe"</string>
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Sprechgeschwindigkeit"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Geschwindigkeit, mit der der Text gesprochen wird"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tonlage"</string>
@@ -130,7 +136,7 @@
     <string name="tts_install_data_title" msgid="4264378440508149986">"Sprachdaten installieren"</string>
     <string name="tts_install_data_summary" msgid="5742135732511822589">"Sprachdaten für Sprachsynthese installieren"</string>
     <string name="tts_engine_security_warning" msgid="8786238102020223650">"Dieses Sprachsynthesemodul kann den gesamten gesprochenen Text erfassen, einschließlich personenbezogener Daten wie Passwörter und Kreditkartennummern. Es ist Teil der App \"<xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>\". Möchtest du dieses Sprachsynthesemodul aktivieren?"</string>
-    <string name="tts_engine_network_required" msgid="1190837151485314743">"Für diese Sprache ist zur Text-in-Sprache-Ausgabe eine aktive Netzwerkverbindung erforderlich."</string>
+    <string name="tts_engine_network_required" msgid="1190837151485314743">"Für diese Sprache ist zur Sprachausgabe-Ausgabe eine aktive Netzwerkverbindung erforderlich."</string>
     <string name="tts_default_sample_string" msgid="4040835213373086322">"Dies ist ein Beispiel für Sprachsynthese."</string>
     <string name="tts_status_title" msgid="7268566550242584413">"Status der Standardsprache"</string>
     <string name="tts_status_ok" msgid="1309762510278029765">"<xliff:g id="LOCALE">%1$s</xliff:g> wird vollständig unterstützt."</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"WLAN-Roamingsuchen immer zulassen"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile Datennutzung immer aktiviert"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardwarebeschleunigung für Tethering"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth-Geräte ohne Namen anzeigen"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Maximallautstärke deaktivieren"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"In-Band-Klingeln aktivieren"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP-Version"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Apps über USB bestätigen"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Überprüft installierte Apps über ADB/ADT auf schädliches Verhalten"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth-Geräte ohne Namen (nur MAC-Adressen) werden angezeigt"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Deaktiviert die Bluetooth-Maximallautstärkefunktion, falls auf Remote-Geräten Probleme mit der Lautstärke auftreten, wie beispielsweise übermäßig laute Wiedergabe oder fehlende Kontrolle bei der Steuerung."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Wiedergabe von Smartphone-Klingeltönen auf Bluetooth-Headsets zulassen"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Lokales Terminal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – noch <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> bis vollständig geladen"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Unbekannt"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Wird aufgeladen"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"wird aufgeladen..."</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Wird nicht geladen"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Wird nicht geladen"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Angeschlossen, kann derzeit nicht geladen werden"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Voll"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Durch den Administrator verwaltet"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Vom Administrator aktiviert"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Benutzerdefiniert (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Hilfe &amp; Feedback"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menü"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Passwort eingeben, um Gerät im Demomodus auf Werkseinstellungen zurückzusetzen"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Weiter"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Passwort erforderlich"</string>
diff --git a/packages/SettingsLib/res/values-el/arrays.xml b/packages/SettingsLib/res/values-el/arrays.xml
index 3a99fd6..1b740e6 100644
--- a/packages/SettingsLib/res/values-el/arrays.xml
+++ b/packages/SettingsLib/res/values-el/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Προεπιλογή)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Χρήση επιλογής συστήματος (Προεπιλογή)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Ήχος <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Ήχος <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Ενεργοποίηση προαιρετικών κωδικοποιητών"</item>
+    <item msgid="3304843301758635896">"Απενεργοποίηση προαιρετικών κωδικοποιητών"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Χρήση επιλογής συστήματος (Προεπιλογή)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Ήχος <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Ήχος <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Ενεργοποίηση προαιρετικών κωδικοποιητών"</item>
+    <item msgid="741805482892725657">"Απενεργοποίηση προαιρετικών κωδικοποιητών"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Χρήση επιλογής συστήματος (Προεπιλογή)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 244af42..cdb9518 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Συνδέθηκε μέσω %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Διαθέσιμο μέσω %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Συνδέθηκε, χωρίς διαδίκτυο"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Το σημείο πρόσβασης είναι προσωρινά πλήρες"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Συνδέθηκε μέσω %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Διαθέσιμο μέσω %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Πολύ αργή"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Αργή"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ΟΚ"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Μέτρια"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Γρήγορη"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Πολύ γρήγορη"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Αποσυνδέθηκε"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Αποσύνδεση..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Σύνδεση..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Δύο γραμμές Wi-Fi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Τρεις γραμμές Wi-Fi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Άριστο σήμα Wi-Fi."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Ανοικτό δίκτυο"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Ασφαλές δίκτυο"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Λειτουργικό σύστημα Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Εφαρμογές που καταργήθηκαν"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Εφαρμογές και χρήστες που έχουν καταργηθεί"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Να επιτρέπεται πάντα η σάρωση Wi-Fi κατά την περιαγωγή"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Πάντα ενεργά δεδομένα κινητής τηλεφωνίας"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Σύνδεση επιτάχυνσης υλικού"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Εμφάνιση συσκευών Bluetooth χωρίς ονόματα"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Απενεργοποίηση απόλυτης έντασης"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Ενεργοποίηση κλήσης εντός εύρους"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Έκδοση AVRCP Bluetooth"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Αυτές οι ρυθμίσεις προορίζονται για χρήση κατά την ανάπτυξη. Μπορούν να προκαλέσουν προβλήματα στη λειτουργία της συσκευής και των εφαρμογών σας."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Επαλήθευση εφαρμογών μέσω USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Έλεγχος εφαρμογών που έχουν εγκατασταθεί μέσω ADB/ADT για επιβλαβή συμπεριφορά."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Θα εμφανιστούν οι συσκευές Bluetooth χωρίς ονόματα (μόνο διευθύνσεις MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Απενεργοποιεί τη δυνατότητα απόλυτης έντασης του Bluetooth σε περίπτωση προβλημάτων έντασης με απομακρυσμένες συσκευές, όπως όταν υπάρχει μη αποδεκτά υψηλή ένταση ή απουσία ελέγχου."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Να επιτρέπεται η αναπαραγωγή των ήχων κλήσης του τηλεφώνου στα ακουστικά Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Τοπική τερματική εφαρμογή"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - απομένει/ουν <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> για πλήρη φόρτιση"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Άγνωστο"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Φόρτιση"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"φόρτιση"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Δεν φορτίζει"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Δεν φορτίζει"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Συνδέθηκε, δεν είναι δυνατή η φόρτιση αυτήν τη στιγμή"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Πλήρης"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Ελέγχονται από το διαχειριστή"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Ενεργοποιήθηκε από τον διαχειριστή"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Προσαρμοσμένη (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Βοήθεια και σχόλια"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Μενού"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Εισαγάγετε κωδικό πρόσβασης για επαναφορά εργοστασιακών ρυθμίσεων στη λειτουργία επίδειξης"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Επόμενο"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Απαιτείται κωδικός πρόσβασης"</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/arrays.xml b/packages/SettingsLib/res/values-en-rAU/arrays.xml
index bb48f2f..f4fceae 100644
--- a/packages/SettingsLib/res/values-en-rAU/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rAU/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Use System Selection (Default)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Enable Optional Codecs"</item>
+    <item msgid="3304843301758635896">"Disable Optional Codecs"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Use System Selection (Default)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Enable Optional Codecs"</item>
+    <item msgid="741805482892725657">"Disable Optional Codecs"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Use System Selection (Default)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index 09ad05c..c964367 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connected, no Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Slow"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Medium"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Fast"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Very fast"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Disconnected"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Disconnecting…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Connecting…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi two bars."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi three bars."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi signal full."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Open network"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Secure network"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Removed apps"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Removed apps and users"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Always allow Wi‑Fi Roam Scans"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disable absolute volume"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Enable in-band ringing"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP Version"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verify apps over USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Check apps installed via ADB/ADT for harmful behaviour."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth devices without names (MAC addresses only) will be displayed"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Disables the Bluetooth absolute volume feature in case of volume issues with remote devices such as unacceptably loud volume or lack of control."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Allow ringtones on the phone to be played on Bluetooth headsets"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Local terminal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> left"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> until fully charged"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Unknown"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Charging"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"charging"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Not charging"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Not charging"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Plugged in, can\'t charge right now"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Full"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlled by admin"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Enabled by admin"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Help &amp; feedback"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Enter password to perform factory reset in demo mode"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Next"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Password required"</string>
diff --git a/packages/SettingsLib/res/values-en-rCA/arrays.xml b/packages/SettingsLib/res/values-en-rCA/arrays.xml
new file mode 100644
index 0000000..f4fceae
--- /dev/null
+++ b/packages/SettingsLib/res/values-en-rCA/arrays.xml
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2015 The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wifi_status">
+    <item msgid="1922181315419294640"></item>
+    <item msgid="8934131797783724664">"Scanning…"</item>
+    <item msgid="8513729475867537913">"Connecting…"</item>
+    <item msgid="515055375277271756">"Authenticating…"</item>
+    <item msgid="1943354004029184381">"Obtaining IP address…"</item>
+    <item msgid="4221763391123233270">"Connected"</item>
+    <item msgid="624838831631122137">"Suspended"</item>
+    <item msgid="7979680559596111948">"Disconnecting…"</item>
+    <item msgid="1634960474403853625">"Disconnected"</item>
+    <item msgid="746097431216080650">"Unsuccessful"</item>
+    <item msgid="6367044185730295334">"Blocked"</item>
+    <item msgid="503942654197908005">"Temporarily avoiding poor connection"</item>
+  </string-array>
+  <string-array name="wifi_status_with_ssid">
+    <item msgid="7714855332363650812"></item>
+    <item msgid="8878186979715711006">"Scanning…"</item>
+    <item msgid="355508996603873860">"Connecting to <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+    <item msgid="554971459996405634">"Authenticating with <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+    <item msgid="7928343808033020343">"Obtaining IP address from <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+    <item msgid="8937994881315223448">"Connected to <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item>
+    <item msgid="1330262655415760617">"Suspended"</item>
+    <item msgid="7698638434317271902">"Disconnecting from <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+    <item msgid="197508606402264311">"Disconnected"</item>
+    <item msgid="8578370891960825148">"Unsuccessful"</item>
+    <item msgid="5660739516542454527">"Blocked"</item>
+    <item msgid="1805837518286731242">"Temporarily avoiding poor connection"</item>
+  </string-array>
+  <string-array name="hdcp_checking_titles">
+    <item msgid="441827799230089869">"Never check"</item>
+    <item msgid="6042769699089883931">"Check for DRM content only"</item>
+    <item msgid="9174900380056846820">"Always check"</item>
+  </string-array>
+  <string-array name="hdcp_checking_summaries">
+    <item msgid="505558545611516707">"Never use HDCP checking"</item>
+    <item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
+    <item msgid="45075631231212732">"Always use HDCP checking"</item>
+  </string-array>
+  <string-array name="bluetooth_avrcp_versions">
+    <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
+  </string-array>
+  <string-array name="bluetooth_avrcp_version_values">
+    <item msgid="2838624067805073303">"avrcp14"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Use System Selection (Default)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Enable Optional Codecs"</item>
+    <item msgid="3304843301758635896">"Disable Optional Codecs"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Use System Selection (Default)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Enable Optional Codecs"</item>
+    <item msgid="741805482892725657">"Disable Optional Codecs"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+    <item msgid="3093023430402746802">"Use System Selection (Default)"</item>
+    <item msgid="8895532488906185219">"44.1 kHz"</item>
+    <item msgid="2909915718994807056">"48.0 kHz"</item>
+    <item msgid="3347287377354164611">"88.2 kHz"</item>
+    <item msgid="1234212100239985373">"96.0 kHz"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+    <item msgid="3214516120190965356">"Use System Selection (Default)"</item>
+    <item msgid="4482862757811638365">"44.1 kHz"</item>
+    <item msgid="354495328188724404">"48.0 kHz"</item>
+    <item msgid="7329816882213695083">"88.2 kHz"</item>
+    <item msgid="6967397666254430476">"96.0 kHz"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+    <item msgid="2684127272582591429">"Use System Selection (Default)"</item>
+    <item msgid="5618929009984956469">"16 bits/sample"</item>
+    <item msgid="3412640499234627248">"24 bits/sample"</item>
+    <item msgid="121583001492929387">"32 bits/sample"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+    <item msgid="1081159789834584363">"Use System Selection (Default)"</item>
+    <item msgid="4726688794884191540">"16 bits/sample"</item>
+    <item msgid="305344756485516870">"24 bits/sample"</item>
+    <item msgid="244568657919675099">"32 bits/sample"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+    <item msgid="5226878858503393706">"Use System Selection (Default)"</item>
+    <item msgid="4106832974775067314">"Mono"</item>
+    <item msgid="5571632958424639155">"Stereo"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+    <item msgid="4118561796005528173">"Use System Selection (Default)"</item>
+    <item msgid="8900559293912978337">"Mono"</item>
+    <item msgid="8883739882299884241">"Stereo"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+    <item msgid="7158319962230727476">"Optimised for Audio Quality (990kbps/909kbps)"</item>
+    <item msgid="2921767058740704969">"Balanced Audio And Connection Quality (660 kbps/606 kbps)"</item>
+    <item msgid="8860982705384396512">"Optimised for Connection Quality (330kbps/303kbps)"</item>
+    <item msgid="4414060457677684127">"Best Effort (Adaptive Bit Rate)"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+    <item msgid="6398189564246596868">"Optimised for Audio Quality"</item>
+    <item msgid="4327143584633311908">"Balanced Audio and Connection Quality"</item>
+    <item msgid="4681409244565426925">"Optimised for Connection Quality"</item>
+    <item msgid="364670732877872677">"Best Effort (Adaptive Bit Rate)"</item>
+  </string-array>
+  <string-array name="select_logd_size_titles">
+    <item msgid="8665206199209698501">"Off"</item>
+    <item msgid="1593289376502312923">"64 K"</item>
+    <item msgid="487545340236145324">"256 K"</item>
+    <item msgid="2423528675294333831">"1 M"</item>
+    <item msgid="180883774509476541">"4 M"</item>
+    <item msgid="2803199102589126938">"16 M"</item>
+  </string-array>
+  <string-array name="select_logd_size_lowram_titles">
+    <item msgid="6089470720451068364">"Off"</item>
+    <item msgid="4622460333038586791">"64 K"</item>
+    <item msgid="2212125625169582330">"256 K"</item>
+    <item msgid="1704946766699242653">"1 M"</item>
+  </string-array>
+  <string-array name="select_logd_size_summaries">
+    <item msgid="6921048829791179331">"Off"</item>
+    <item msgid="2969458029344750262">"64 K per log buffer"</item>
+    <item msgid="1342285115665698168">"256 K per log buffer"</item>
+    <item msgid="1314234299552254621">"1 M per log buffer"</item>
+    <item msgid="3606047780792894151">"4 M per log buffer"</item>
+    <item msgid="5431354956856655120">"16 M per log buffer"</item>
+  </string-array>
+  <string-array name="select_logpersist_titles">
+    <item msgid="1744840221860799971">"Off"</item>
+    <item msgid="3054662377365844197">"All"</item>
+    <item msgid="688870735111627832">"All but radio"</item>
+    <item msgid="2850427388488887328">"kernel only"</item>
+  </string-array>
+  <string-array name="select_logpersist_summaries">
+    <item msgid="2216470072500521830">"Off"</item>
+    <item msgid="172978079776521897">"All log buffers"</item>
+    <item msgid="3873873912383879240">"All but radio log buffers"</item>
+    <item msgid="8489661142527693381">"kernel log buffer only"</item>
+  </string-array>
+  <string-array name="window_animation_scale_entries">
+    <item msgid="8134156599370824081">"Animation off"</item>
+    <item msgid="6624864048416710414">"Animation scale .5x"</item>
+    <item msgid="2219332261255416635">"Animation scale 1x"</item>
+    <item msgid="3544428804137048509">"Animation scale 1.5x"</item>
+    <item msgid="3110710404225974514">"Animation scale 2x"</item>
+    <item msgid="4402738611528318731">"Animation scale 5x"</item>
+    <item msgid="6189539267968330656">"Animation scale 10x"</item>
+  </string-array>
+  <string-array name="transition_animation_scale_entries">
+    <item msgid="8464255836173039442">"Animation off"</item>
+    <item msgid="3375781541913316411">"Animation scale .5x"</item>
+    <item msgid="1991041427801869945">"Animation scale 1x"</item>
+    <item msgid="4012689927622382874">"Animation scale 1.5x"</item>
+    <item msgid="3289156759925947169">"Animation scale 2x"</item>
+    <item msgid="7705857441213621835">"Animation scale 5x"</item>
+    <item msgid="6660750935954853365">"Animation scale 10x"</item>
+  </string-array>
+  <string-array name="animator_duration_scale_entries">
+    <item msgid="6039901060648228241">"Animation off"</item>
+    <item msgid="1138649021950863198">"Animation scale .5x"</item>
+    <item msgid="4394388961370833040">"Animation scale 1x"</item>
+    <item msgid="8125427921655194973">"Animation scale 1.5x"</item>
+    <item msgid="3334024790739189573">"Animation scale 2x"</item>
+    <item msgid="3170120558236848008">"Animation scale 5x"</item>
+    <item msgid="1069584980746680398">"Animation scale 10x"</item>
+  </string-array>
+  <string-array name="overlay_display_devices_entries">
+    <item msgid="1606809880904982133">"None"</item>
+    <item msgid="9033194758688161545">"480 p"</item>
+    <item msgid="1025306206556583600">"480p (secure)"</item>
+    <item msgid="1853913333042744661">"720p"</item>
+    <item msgid="3414540279805870511">"720p (secure)"</item>
+    <item msgid="9039818062847141551">"1080p"</item>
+    <item msgid="4939496949750174834">"1080p (secure)"</item>
+    <item msgid="1833612718524903568">"4K"</item>
+    <item msgid="238303513127879234">"4K (secure)"</item>
+    <item msgid="3547211260846843098">"4K (upscaled)"</item>
+    <item msgid="5411365648951414254">"4K (upscaled, secure)"</item>
+    <item msgid="1311305077526792901">"720p, 1080p (dual screen)"</item>
+  </string-array>
+  <string-array name="enable_opengl_traces_entries">
+    <item msgid="3191973083884253830">"None"</item>
+    <item msgid="9089630089455370183">"Logcat"</item>
+    <item msgid="5397807424362304288">"Systrace (Graphics)"</item>
+    <item msgid="1340692776955662664">"Call stack on glGetError"</item>
+  </string-array>
+  <string-array name="show_non_rect_clip_entries">
+    <item msgid="993742912147090253">"Off"</item>
+    <item msgid="675719912558941285">"Draw non-rectangular clip region in blue"</item>
+    <item msgid="1064373276095698656">"Highlight tested drawing commands in green"</item>
+  </string-array>
+  <string-array name="track_frame_time_entries">
+    <item msgid="2193584639058893150">"Off"</item>
+    <item msgid="2751513398307949636">"On screen as bars"</item>
+    <item msgid="2355151170975410323">"In <xliff:g id="AS_TYPED_COMMAND">adb shell dumpsys gfxinfo</xliff:g>"</item>
+  </string-array>
+  <string-array name="debug_hw_overdraw_entries">
+    <item msgid="8190572633763871652">"Off"</item>
+    <item msgid="7688197031296835369">"Show overdraw areas"</item>
+    <item msgid="2290859360633824369">"Show areas for Deuteranomaly"</item>
+  </string-array>
+  <string-array name="debug_hw_renderer_entries">
+    <item msgid="2578620445459945681">"OpenGL (Default)"</item>
+    <item msgid="2839130076198120436">"OpenGL (Skia)"</item>
+  </string-array>
+  <string-array name="app_process_limit_entries">
+    <item msgid="3401625457385943795">"Standard limit"</item>
+    <item msgid="4071574792028999443">"No background processes"</item>
+    <item msgid="4810006996171705398">"At most, 1 process"</item>
+    <item msgid="8586370216857360863">"At most, 2 processes"</item>
+    <item msgid="836593137872605381">"At most, 3 processes"</item>
+    <item msgid="7899496259191969307">"At most, 4 processes"</item>
+  </string-array>
+  <string-array name="usb_configuration_titles">
+    <item msgid="488237561639712799">"Charging"</item>
+    <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+    <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+    <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+    <item msgid="1718924214939774352">"Audio Source"</item>
+    <item msgid="8126315616613006284">"MIDI"</item>
+  </string-array>
+</resources>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..c964367
--- /dev/null
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -0,0 +1,393 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2015 The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Can\'t scan for networks"</string>
+    <string name="wifi_security_none" msgid="7985461072596594400">"None"</string>
+    <string name="wifi_remembered" msgid="4955746899347821096">"Saved"</string>
+    <string name="wifi_disabled_generic" msgid="4259794910584943386">"Disabled"</string>
+    <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP Configuration Failure"</string>
+    <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"Not connected due to low quality network"</string>
+    <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi Connection Failure"</string>
+    <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentication problem"</string>
+    <string name="wifi_cant_connect" msgid="5410016875644565884">"Can\'t connect"</string>
+    <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"Can\'t connect to \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
+    <string name="wifi_check_password_try_again" msgid="516958988102584767">"Check password and try again"</string>
+    <string name="wifi_not_in_range" msgid="1136191511238508967">"Not in range"</string>
+    <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"Won\'t automatically connect"</string>
+    <string name="wifi_no_internet" msgid="3880396223819116454">"No Internet access"</string>
+    <string name="saved_network" msgid="4352716707126620811">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatically connected via %1$s"</string>
+    <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatically connected via network rating provider"</string>
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connected, no Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string>
+    <string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string>
+    <string name="speed_label_slow" msgid="813109590815810235">"Slow"</string>
+    <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
+    <string name="speed_label_medium" msgid="3175763313268941953">"Medium"</string>
+    <string name="speed_label_fast" msgid="7715732164050975057">"Fast"</string>
+    <string name="speed_label_very_fast" msgid="2265363430784523409">"Very fast"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
+    <string name="bluetooth_disconnected" msgid="6557104142667339895">"Disconnected"</string>
+    <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Disconnecting…"</string>
+    <string name="bluetooth_connecting" msgid="8555009514614320497">"Connecting…"</string>
+    <string name="bluetooth_connected" msgid="6038755206916626419">"Connected"</string>
+    <string name="bluetooth_pairing" msgid="1426882272690346242">"Pairing…"</string>
+    <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"Connected (no phone)"</string>
+    <string name="bluetooth_connected_no_a2dp" msgid="4576188601581440337">"Connected (no media)"</string>
+    <string name="bluetooth_connected_no_map" msgid="6504436917057479986">"Connected (no message access)"</string>
+    <string name="bluetooth_connected_no_headset_no_a2dp" msgid="9195757766755553810">"Connected (no phone or media)"</string>
+    <string name="bluetooth_connected_battery_level" msgid="7049181126136692368">"Connected, battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+    <string name="bluetooth_connected_no_headset_battery_level" msgid="5504193961248406027">"Connected (no phone), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+    <string name="bluetooth_connected_no_a2dp_battery_level" msgid="4751724026365870779">"Connected (no media), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+    <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1549265779323455261">"Connected (no phone or media), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+    <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Media audio"</string>
+    <string name="bluetooth_profile_headset" msgid="7815495680863246034">"Phone calls"</string>
+    <string name="bluetooth_profile_opp" msgid="9168139293654233697">"File transfer"</string>
+    <string name="bluetooth_profile_hid" msgid="3680729023366986480">"Input device"</string>
+    <string name="bluetooth_profile_pan" msgid="3391606497945147673">"Internet access"</string>
+    <string name="bluetooth_profile_pbap" msgid="5372051906968576809">"Contact sharing"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Use for contact sharing"</string>
+    <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internet connection sharing"</string>
+    <string name="bluetooth_profile_map" msgid="1019763341565580450">"Text messages"</string>
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Access"</string>
+    <string name="bluetooth_profile_a2dp_high_quality" msgid="5444517801472820055">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
+    <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="8510588052415438887">"HD audio"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connected to media audio"</string>
+    <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connected to phone audio"</string>
+    <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connected to file-transfer server"</string>
+    <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Connected to map"</string>
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Connected to SAP"</string>
+    <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Not connected to file-transfer server"</string>
+    <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Connected to input device"</string>
+    <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Connected to device for Internet access"</string>
+    <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Sharing local Internet connection with device"</string>
+    <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Use for Internet access"</string>
+    <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Use for map"</string>
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Use for SIM access"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Use for media audio"</string>
+    <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Use for phone audio"</string>
+    <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Use for file transfer"</string>
+    <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"Use for input"</string>
+    <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Pair"</string>
+    <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"PAIR"</string>
+    <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"Cancel"</string>
+    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Pairing grants access to your contacts and call history when connected."</string>
+    <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"Couldn\'t pair with <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Couldn\'t pair with <xliff:g id="DEVICE_NAME">%1$s</xliff:g> because of an incorrect PIN or passkey."</string>
+    <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Can\'t communicate with <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Pairing rejected by <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi off."</string>
+    <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi disconnected."</string>
+    <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wi-Fi one bar."</string>
+    <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi two bars."</string>
+    <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi three bars."</string>
+    <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi signal full."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Open network"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Secure network"</string>
+    <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
+    <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Removed apps"</string>
+    <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Removed apps and users"</string>
+    <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB tethering"</string>
+    <string name="tether_settings_title_wifi" msgid="3277144155960302049">"Portable hotspot"</string>
+    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Bluetooth tethering"</string>
+    <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Tethering"</string>
+    <string name="tether_settings_title_all" msgid="8356136101061143841">"Tethering &amp; portable hotspot"</string>
+    <string name="managed_user_title" msgid="8109605045406748842">"All work apps"</string>
+    <string name="user_guest" msgid="8475274842845401871">"Guest"</string>
+    <string name="unknown" msgid="1592123443519355854">"Unknown"</string>
+    <string name="running_process_item_user_label" msgid="3129887865552025943">"User: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
+    <string name="launch_defaults_some" msgid="313159469856372621">"Some defaults set"</string>
+    <string name="launch_defaults_none" msgid="4241129108140034876">"No defaults set"</string>
+    <string name="tts_settings" msgid="8186971894801348327">"Text-to-speech settings"</string>
+    <string name="tts_settings_title" msgid="1237820681016639683">"Text-to-speech output"</string>
+    <string name="tts_default_rate_title" msgid="6030550998379310088">"Speech rate"</string>
+    <string name="tts_default_rate_summary" msgid="4061815292287182801">"Speed at which the text is spoken"</string>
+    <string name="tts_default_pitch_title" msgid="6135942113172488671">"Pitch"</string>
+    <string name="tts_default_pitch_summary" msgid="1944885882882650009">"Affects the tone of the synthesised speech"</string>
+    <string name="tts_default_lang_title" msgid="8018087612299820556">"Language"</string>
+    <string name="tts_lang_use_system" msgid="2679252467416513208">"Use system language"</string>
+    <string name="tts_lang_not_selected" msgid="7395787019276734765">"Language not selected"</string>
+    <string name="tts_default_lang_summary" msgid="5219362163902707785">"Sets the language-specific voice for the spoken text"</string>
+    <string name="tts_play_example_title" msgid="7094780383253097230">"Listen to an example"</string>
+    <string name="tts_play_example_summary" msgid="8029071615047894486">"Play a short demonstration of speech synthesis"</string>
+    <string name="tts_install_data_title" msgid="4264378440508149986">"Install voice data"</string>
+    <string name="tts_install_data_summary" msgid="5742135732511822589">"Install the voice data required for speech synthesis"</string>
+    <string name="tts_engine_security_warning" msgid="8786238102020223650">"This speech synthesis engine may be able to collect all the text that will be spoken, including personal data like passwords and credit card numbers. It comes from the <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> engine. Enable the use of this speech synthesis engine?"</string>
+    <string name="tts_engine_network_required" msgid="1190837151485314743">"This language requires a working network connection for text-to-speech output."</string>
+    <string name="tts_default_sample_string" msgid="4040835213373086322">"This is an example of speech synthesis"</string>
+    <string name="tts_status_title" msgid="7268566550242584413">"Default language status"</string>
+    <string name="tts_status_ok" msgid="1309762510278029765">"<xliff:g id="LOCALE">%1$s</xliff:g> is fully supported"</string>
+    <string name="tts_status_requires_network" msgid="6042500821503226892">"<xliff:g id="LOCALE">%1$s</xliff:g> requires network connection"</string>
+    <string name="tts_status_not_supported" msgid="4491154212762472495">"<xliff:g id="LOCALE">%1$s</xliff:g> is not supported"</string>
+    <string name="tts_status_checking" msgid="5339150797940483592">"Checking…"</string>
+    <string name="tts_engine_settings_title" msgid="3499112142425680334">"Settings for <xliff:g id="TTS_ENGINE_NAME">%s</xliff:g>"</string>
+    <string name="tts_engine_settings_button" msgid="1030512042040722285">"Launch engine settings"</string>
+    <string name="tts_engine_preference_section_title" msgid="448294500990971413">"Preferred engine"</string>
+    <string name="tts_general_section_title" msgid="4402572014604490502">"General"</string>
+    <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"Reset speech pitch"</string>
+    <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"Reset the pitch at which the text is spoken to default."</string>
+  <string-array name="tts_rate_entries">
+    <item msgid="6695494874362656215">"Very slow"</item>
+    <item msgid="4795095314303559268">"Slow"</item>
+    <item msgid="8903157781070679765">"Normal"</item>
+    <item msgid="164347302621392996">"Fast"</item>
+    <item msgid="5794028588101562009">"Faster"</item>
+    <item msgid="7163942783888652942">"Very fast"</item>
+    <item msgid="7831712693748700507">"Rapid"</item>
+    <item msgid="5194774745031751806">"Very rapid"</item>
+    <item msgid="9085102246155045744">"Fastest"</item>
+  </string-array>
+    <string name="choose_profile" msgid="6921016979430278661">"Choose profile"</string>
+    <string name="category_personal" msgid="1299663247844969448">"Personal"</string>
+    <string name="category_work" msgid="8699184680584175622">"Work"</string>
+    <string name="development_settings_title" msgid="215179176067683667">"Developer options"</string>
+    <string name="development_settings_enable" msgid="542530994778109538">"Enable developer options"</string>
+    <string name="development_settings_summary" msgid="1815795401632854041">"Set options for app development"</string>
+    <string name="development_settings_not_available" msgid="4308569041701535607">"Developer options are not available for this user"</string>
+    <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN settings are not available for this user"</string>
+    <string name="tethering_settings_not_available" msgid="6765770438438291012">"Tethering settings are not available for this user"</string>
+    <string name="apn_settings_not_available" msgid="7873729032165324000">"Access Point Name settings are not available for this user"</string>
+    <string name="enable_adb" msgid="7982306934419797485">"USB debugging"</string>
+    <string name="enable_adb_summary" msgid="4881186971746056635">"Debug mode when USB is connected"</string>
+    <string name="clear_adb_keys" msgid="4038889221503122743">"Revoke USB debugging authorisations"</string>
+    <string name="bugreport_in_power" msgid="7923901846375587241">"Bug report shortcut"</string>
+    <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Show a button in the power menu for taking a bug report"</string>
+    <string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string>
+    <string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string>
+    <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string>
+    <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Capture all Bluetooth HCI packets in a file"</string>
+    <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string>
+    <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string>
+    <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string>
+    <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"WARNING: Device protection features will not work on this device while this setting is turned on."</string>
+    <string name="mock_location_app" msgid="7966220972812881854">"Select mock location app"</string>
+    <string name="mock_location_app_not_set" msgid="809543285495344223">"No mock location app set"</string>
+    <string name="mock_location_app_set" msgid="8966420655295102685">"Mock location app: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string>
+    <string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string>
+    <string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi verbose logging"</string>
+    <string name="wifi_aggressive_handover" msgid="5309131983693661320">"Aggressive Wi‑Fi to mobile handover"</string>
+    <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Always allow Wi‑Fi Roam Scans"</string>
+    <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string>
+    <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string>
+    <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disable absolute volume"</string>
+    <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Enable in-band ringing"</string>
+    <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP Version"</string>
+    <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Select Bluetooth AVRCP Version"</string>
+    <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Codec"</string>
+    <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="4558347981670553665">"Select Bluetooth Audio Codec"</string>
+    <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio Sample Rate"</string>
+    <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="5628790207448471613">"Select Bluetooth Audio Codec:\nSample Rate"</string>
+    <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio Bits Per Sample"</string>
+    <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="4546131401358681321">"Select Bluetooth Audio Codec:\nBits Per Sample"</string>
+    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Channel Mode"</string>
+    <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="9133545781346216071">"Select Bluetooth Audio Codec:\nChannel Mode"</string>
+    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth Audio LDAC Codec: Playback Quality"</string>
+    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"Select Bluetooth Audio LDAC Codec:\nPlayback Quality"</string>
+    <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
+    <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string>
+    <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string>
+    <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"When enabled, Wi‑Fi will be more aggressive in handing over the data connection to mobile, when Wi‑Fi signal is low"</string>
+    <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Allow/Disallow Wi‑Fi Roam Scans based on the amount of data traffic present at the interface"</string>
+    <string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string>
+    <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Select Logger sizes per log buffer"</string>
+    <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Clear logger persistent storage?"</string>
+    <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"When we are no longer monitoring with the persistent logger, we are required to erase the logger data resident on your device."</string>
+    <string name="select_logpersist_title" msgid="7530031344550073166">"Store logger data persistently on device"</string>
+    <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"Select log buffers to store persistently on device"</string>
+    <string name="select_usb_configuration_title" msgid="2649938511506971843">"Select USB Configuration"</string>
+    <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Select USB Configuration"</string>
+    <string name="allow_mock_location" msgid="2787962564578664888">"Allow mock locations"</string>
+    <string name="allow_mock_location_summary" msgid="317615105156345626">"Allow mock locations"</string>
+    <string name="debug_view_attributes" msgid="6485448367803310384">"Enable view attribute inspection"</string>
+    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Always keep mobile data active, even when Wi‑Fi is active (for fast network switching)."</string>
+    <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Use tethering hardware acceleration if available"</string>
+    <string name="adb_warning_title" msgid="6234463310896563253">"Allow USB debugging?"</string>
+    <string name="adb_warning_message" msgid="7316799925425402244">"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="adb_keys_warning_message" msgid="5659849457135841625">"Revoke access to USB debugging from all computers you\'ve previously authorised?"</string>
+    <string name="dev_settings_warning_title" msgid="7244607768088540165">"Allow development settings?"</string>
+    <string name="dev_settings_warning_message" msgid="2298337781139097964">"These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave."</string>
+    <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verify apps over USB"</string>
+    <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Check apps installed via ADB/ADT for harmful behaviour."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth devices without names (MAC addresses only) will be displayed"</string>
+    <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Disables the Bluetooth absolute volume feature in case of volume issues with remote devices such as unacceptably loud volume or lack of control."</string>
+    <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Allow ringtones on the phone to be played on Bluetooth headsets"</string>
+    <string name="enable_terminal_title" msgid="95572094356054120">"Local terminal"</string>
+    <string name="enable_terminal_summary" msgid="67667852659359206">"Enable terminal app that offers local shell access"</string>
+    <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP checking"</string>
+    <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Set HDCP checking behaviour"</string>
+    <string name="debug_debugging_category" msgid="6781250159513471316">"Debugging"</string>
+    <string name="debug_app" msgid="8349591734751384446">"Select debug app"</string>
+    <string name="debug_app_not_set" msgid="718752499586403499">"No debug application set"</string>
+    <string name="debug_app_set" msgid="2063077997870280017">"Debugging application: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="select_application" msgid="5156029161289091703">"Select application"</string>
+    <string name="no_application" msgid="2813387563129153880">"Nothing"</string>
+    <string name="wait_for_debugger" msgid="1202370874528893091">"Wait for debugger"</string>
+    <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Debugged application waits for debugger to attach before executing"</string>
+    <string name="telephony_monitor_switch" msgid="1764958220062121194">"Telephony Monitor"</string>
+    <string name="telephony_monitor_switch_summary" msgid="7695552966547975635">"TelephonyMonitor will collect logs when it detects a problem with telephony/modem functionality and prompt notification to user to file a bug"</string>
+    <string name="debug_input_category" msgid="1811069939601180246">"Input"</string>
+    <string name="debug_drawing_category" msgid="6755716469267367852">"Drawing"</string>
+    <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardware accelerated rendering"</string>
+    <string name="media_category" msgid="4388305075496848353">"Media"</string>
+    <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitoring"</string>
+    <string name="strict_mode" msgid="1938795874357830695">"Strict mode enabled"</string>
+    <string name="strict_mode_summary" msgid="142834318897332338">"Flash screen when apps do long operations on main thread"</string>
+    <string name="pointer_location" msgid="6084434787496938001">"Pointer location"</string>
+    <string name="pointer_location_summary" msgid="840819275172753713">"Screen overlay showing current touch data"</string>
+    <string name="show_touches" msgid="2642976305235070316">"Show taps"</string>
+    <string name="show_touches_summary" msgid="6101183132903926324">"Show visual feedback for taps"</string>
+    <string name="show_screen_updates" msgid="5470814345876056420">"Show surface updates"</string>
+    <string name="show_screen_updates_summary" msgid="2569622766672785529">"Flash entire window surfaces when they update"</string>
+    <string name="show_hw_screen_updates" msgid="5036904558145941590">"Show GPU view updates"</string>
+    <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Flash views inside windows when drawn with the GPU"</string>
+    <string name="show_hw_layers_updates" msgid="5645728765605699821">"Show hardware layers updates"</string>
+    <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Flash hardware layers green when they update"</string>
+    <string name="debug_hw_overdraw" msgid="2968692419951565417">"Debug GPU overdraw"</string>
+    <string name="debug_hw_renderer" msgid="7568529019431785816">"Set GPU Renderer"</string>
+    <string name="disable_overlays" msgid="2074488440505934665">"Disable HW overlays"</string>
+    <string name="disable_overlays_summary" msgid="3578941133710758592">"Always use GPU for screen compositing"</string>
+    <string name="simulate_color_space" msgid="6745847141353345872">"Simulate colour space"</string>
+    <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Enable OpenGL traces"</string>
+    <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Disable USB audio routing"</string>
+    <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Disable automatic routing to USB audio peripherals"</string>
+    <string name="debug_layout" msgid="5981361776594526155">"Show layout bounds"</string>
+    <string name="debug_layout_summary" msgid="2001775315258637682">"Show clip bounds, margins, etc."</string>
+    <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Force RTL layout direction"</string>
+    <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Force screen layout direction to RTL for all locales"</string>
+    <string name="force_hw_ui" msgid="6426383462520888732">"Force GPU rendering"</string>
+    <string name="force_hw_ui_summary" msgid="5535991166074861515">"Force use of GPU for 2D drawing"</string>
+    <string name="force_msaa" msgid="7920323238677284387">"Force 4x MSAA"</string>
+    <string name="force_msaa_summary" msgid="9123553203895817537">"Enable 4x MSAA in OpenGL ES 2.0 apps"</string>
+    <string name="show_non_rect_clip" msgid="505954950474595172">"Debug non-rectangular clip operations"</string>
+    <string name="track_frame_time" msgid="6146354853663863443">"Profile GPU rendering"</string>
+    <string name="window_animation_scale_title" msgid="6162587588166114700">"Window animation scale"</string>
+    <string name="transition_animation_scale_title" msgid="387527540523595875">"Transition animation scale"</string>
+    <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animator duration scale"</string>
+    <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulate secondary displays"</string>
+    <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string>
+    <string name="immediately_destroy_activities" msgid="1579659389568133959">"Don\'t keep activities"</string>
+    <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Destroy every activity as soon as the user leaves it"</string>
+    <string name="app_process_limit_title" msgid="4280600650253107163">"Background process limit"</string>
+    <string name="show_all_anrs" msgid="28462979638729082">"Show all ANRs"</string>
+    <string name="show_all_anrs_summary" msgid="641908614413544127">"Show App Not Responding dialogue for background apps"</string>
+    <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Show notification channel warnings"</string>
+    <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Displays on-screen warning when an app posts a notification without a valid channel"</string>
+    <string name="force_allow_on_external" msgid="3215759785081916381">"Force allow apps on external"</string>
+    <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Makes any app eligible to be written to external storage, regardless of manifest values"</string>
+    <string name="force_resizable_activities" msgid="8615764378147824985">"Force activities to be re-sizable"</string>
+    <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Make all activities resizable for multi-window, regardless of manifest values."</string>
+    <string name="enable_freeform_support" msgid="1461893351278940416">"Enable freeform windows"</string>
+    <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Enable support for experimental freeform windows."</string>
+    <string name="local_backup_password_title" msgid="3860471654439418822">"Desktop backup password"</string>
+    <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Desktop full backups aren\'t currently protected"</string>
+    <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Tap to change or remove the password for desktop full backups"</string>
+    <string name="local_backup_password_toast_success" msgid="582016086228434290">"New backup password set"</string>
+    <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"New password and confirmation don\'t match"</string>
+    <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Failure setting backup password"</string>
+  <string-array name="color_mode_names">
+    <item msgid="2425514299220523812">"Vibrant (default)"</item>
+    <item msgid="8446070607501413455">"Natural"</item>
+    <item msgid="6553408765810699025">"Standard"</item>
+  </string-array>
+  <string-array name="color_mode_descriptions">
+    <item msgid="4979629397075120893">"Enhanced colours"</item>
+    <item msgid="8280754435979370728">"Natural colours as seen by the eye"</item>
+    <item msgid="5363960654009010371">"Colours optimised for digital content"</item>
+  </string-array>
+    <string name="inactive_apps_title" msgid="1317817863508274533">"Inactive apps"</string>
+    <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"Inactive. Tap to toggle."</string>
+    <string name="inactive_app_active_summary" msgid="4174921824958516106">"Active. Tap to toggle."</string>
+    <string name="runningservices_settings_title" msgid="8097287939865165213">"Running services"</string>
+    <string name="runningservices_settings_summary" msgid="854608995821032748">"View and control currently running services"</string>
+    <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView implementation"</string>
+    <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Set WebView implementation"</string>
+    <string name="select_webview_provider_toast_text" msgid="5466970498308266359">"This choice is no longer valid. Try again."</string>
+    <string name="convert_to_file_encryption" msgid="3060156730651061223">"Convert to file encryption"</string>
+    <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Convert…"</string>
+    <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Already file encrypted"</string>
+    <string name="title_convert_fbe" msgid="1263622876196444453">"Converting to file-based encryption"</string>
+    <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Convert data partition to file-based encryption.\n !!Warning!! This will delete all your data.\n This feature is alpha, and may not work correctly.\n Press \'Wipe and convert…\' to continue."</string>
+    <string name="button_convert_fbe" msgid="5152671181309826405">"Wipe and convert…"</string>
+    <string name="picture_color_mode" msgid="4560755008730283695">"Picture colour mode"</string>
+    <string name="picture_color_mode_desc" msgid="1141891467675548590">"Use sRGB"</string>
+    <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Disabled"</string>
+    <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromacy"</string>
+    <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (red-green)"</string>
+    <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (red-green)"</string>
+    <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (blue-yellow)"</string>
+    <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Colour correction"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"This feature is experimental and may affect performance."</string>
+    <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Overridden by <xliff:g id="TITLE">%1$s</xliff:g>"</string>
+    <string name="power_remaining_duration_only" msgid="845431008899029842">"About <xliff:g id="TIME">^1</xliff:g> left"</string>
+    <string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"About <xliff:g id="TIME">^1</xliff:g> left based on your usage"</string>
+    <string name="power_remaining_charging_duration_only" msgid="1421102457410268886">"<xliff:g id="TIME">^1</xliff:g> left until fully charged"</string>
+    <string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">^1</xliff:g> left"</string>
+    <string name="power_remaining_duration_only_short_enhanced" msgid="7450425624026394823">"<xliff:g id="TIME">^1</xliff:g> left based on your usage"</string>
+    <string name="power_discharging_duration" msgid="2843747179907396142">"<xliff:g id="LEVEL">^1</xliff:g> – about <xliff:g id="TIME">^2</xliff:g> left"</string>
+    <string name="power_discharging_duration_enhanced" msgid="4401782117770255046">"<xliff:g id="LEVEL">^1</xliff:g> - about <xliff:g id="TIME">^2</xliff:g> left based on your usage"</string>
+    <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> left"</string>
+    <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
+    <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> until fully charged"</string>
+    <string name="battery_info_status_unknown" msgid="196130600938058547">"Unknown"</string>
+    <string name="battery_info_status_charging" msgid="1705179948350365604">"Charging"</string>
+    <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"charging"</string>
+    <string name="battery_info_status_discharging" msgid="310932812698268588">"Not charging"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Plugged in, can\'t charge right now"</string>
+    <string name="battery_info_status_full" msgid="2824614753861462808">"Full"</string>
+    <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlled by admin"</string>
+    <string name="enabled_by_admin" msgid="5302986023578399263">"Enabled by admin"</string>
+    <string name="disabled_by_admin" msgid="8505398946020816620">"Disabled by admin"</string>
+    <string name="disabled" msgid="9206776641295849915">"Disabled"</string>
+    <string name="external_source_trusted" msgid="2707996266575928037">"Allowed"</string>
+    <string name="external_source_untrusted" msgid="2677442511837596726">"Not allowed"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"Install unknown apps"</string>
+    <string name="home" msgid="3256884684164448244">"Settings Home"</string>
+  <string-array name="battery_labels">
+    <item msgid="8494684293649631252">"0%"</item>
+    <item msgid="8934126114226089439">"50%"</item>
+    <item msgid="1286113608943010849">"100%"</item>
+  </string-array>
+    <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> ago"</string>
+    <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> left"</string>
+    <string name="screen_zoom_summary_small" msgid="5867245310241621570">"Small"</string>
+    <string name="screen_zoom_summary_default" msgid="2247006805614056507">"Default"</string>
+    <string name="screen_zoom_summary_large" msgid="4835294730065424084">"Large"</string>
+    <string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"Larger"</string>
+    <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Largest"</string>
+    <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
+    <string name="help_feedback_label" msgid="6815040660801785649">"Help &amp; feedback"</string>
+    <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
+    <string name="retail_demo_reset_message" msgid="118771671364131297">"Enter password to perform factory reset in demo mode"</string>
+    <string name="retail_demo_reset_next" msgid="8356731459226304963">"Next"</string>
+    <string name="retail_demo_reset_title" msgid="696589204029930100">"Password required"</string>
+    <string name="active_input_method_subtypes" msgid="3596398805424733238">"Active input methods"</string>
+    <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Use system languages"</string>
+    <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"Failed to open settings for <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>"</string>
+    <string name="ime_security_warning" msgid="4135828934735934248">"This input method may be able to collect all the text that you type, including personal data like passwords and credit card numbers. It comes from the app <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Use this input method?"</string>
+    <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"Note: After a reboot, this app can\'t start until you unlock your phone"</string>
+</resources>
diff --git a/packages/SettingsLib/res/values-en-rGB/arrays.xml b/packages/SettingsLib/res/values-en-rGB/arrays.xml
index bb48f2f..f4fceae 100644
--- a/packages/SettingsLib/res/values-en-rGB/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rGB/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Use System Selection (Default)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Enable Optional Codecs"</item>
+    <item msgid="3304843301758635896">"Disable Optional Codecs"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Use System Selection (Default)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Enable Optional Codecs"</item>
+    <item msgid="741805482892725657">"Disable Optional Codecs"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Use System Selection (Default)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index 09ad05c..c964367 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connected, no Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Slow"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Medium"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Fast"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Very fast"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Disconnected"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Disconnecting…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Connecting…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi two bars."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi three bars."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi signal full."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Open network"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Secure network"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Removed apps"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Removed apps and users"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Always allow Wi‑Fi Roam Scans"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disable absolute volume"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Enable in-band ringing"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP Version"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verify apps over USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Check apps installed via ADB/ADT for harmful behaviour."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth devices without names (MAC addresses only) will be displayed"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Disables the Bluetooth absolute volume feature in case of volume issues with remote devices such as unacceptably loud volume or lack of control."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Allow ringtones on the phone to be played on Bluetooth headsets"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Local terminal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> left"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> until fully charged"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Unknown"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Charging"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"charging"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Not charging"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Not charging"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Plugged in, can\'t charge right now"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Full"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlled by admin"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Enabled by admin"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Help &amp; feedback"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Enter password to perform factory reset in demo mode"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Next"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Password required"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/arrays.xml b/packages/SettingsLib/res/values-en-rIN/arrays.xml
index bb48f2f..f4fceae 100644
--- a/packages/SettingsLib/res/values-en-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rIN/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Use System Selection (Default)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Enable Optional Codecs"</item>
+    <item msgid="3304843301758635896">"Disable Optional Codecs"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Use System Selection (Default)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Enable Optional Codecs"</item>
+    <item msgid="741805482892725657">"Disable Optional Codecs"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Use System Selection (Default)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index 09ad05c..c964367 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connected, no Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Slow"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Medium"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Fast"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Very fast"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Disconnected"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Disconnecting…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Connecting…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi two bars."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi three bars."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi signal full."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Open network"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Secure network"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Removed apps"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Removed apps and users"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Always allow Wi‑Fi Roam Scans"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disable absolute volume"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Enable in-band ringing"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP Version"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verify apps over USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Check apps installed via ADB/ADT for harmful behaviour."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth devices without names (MAC addresses only) will be displayed"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Disables the Bluetooth absolute volume feature in case of volume issues with remote devices such as unacceptably loud volume or lack of control."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Allow ringtones on the phone to be played on Bluetooth headsets"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Local terminal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> left"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> until fully charged"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Unknown"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Charging"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"charging"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Not charging"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Not charging"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Plugged in, can\'t charge right now"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Full"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlled by admin"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Enabled by admin"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Help &amp; feedback"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Enter password to perform factory reset in demo mode"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Next"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Password required"</string>
diff --git a/packages/SettingsLib/res/values-en-rXC/arrays.xml b/packages/SettingsLib/res/values-en-rXC/arrays.xml
new file mode 100644
index 0000000..846e314
--- /dev/null
+++ b/packages/SettingsLib/res/values-en-rXC/arrays.xml
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2015 The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="wifi_status">
+    <item msgid="1922181315419294640"></item>
+    <item msgid="8934131797783724664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‎Scanning…‎‏‎‎‏‎"</item>
+    <item msgid="8513729475867537913">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎Connecting…‎‏‎‎‏‎"</item>
+    <item msgid="515055375277271756">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎Authenticating…‎‏‎‎‏‎"</item>
+    <item msgid="1943354004029184381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎Obtaining IP address…‎‏‎‎‏‎"</item>
+    <item msgid="4221763391123233270">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎Connected‎‏‎‎‏‎"</item>
+    <item msgid="624838831631122137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎Suspended‎‏‎‎‏‎"</item>
+    <item msgid="7979680559596111948">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‎Disconnecting…‎‏‎‎‏‎"</item>
+    <item msgid="1634960474403853625">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎Disconnected‎‏‎‎‏‎"</item>
+    <item msgid="746097431216080650">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‎‎Unsuccessful‎‏‎‎‏‎"</item>
+    <item msgid="6367044185730295334">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‎‎Blocked‎‏‎‎‏‎"</item>
+    <item msgid="503942654197908005">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎Temporarily avoiding poor connection‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="wifi_status_with_ssid">
+    <item msgid="7714855332363650812"></item>
+    <item msgid="8878186979715711006">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎Scanning…‎‏‎‎‏‎"</item>
+    <item msgid="355508996603873860">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‎Connecting to ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</item>
+    <item msgid="554971459996405634">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‎Authenticating with ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</item>
+    <item msgid="7928343808033020343">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‏‎Obtaining IP address from ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</item>
+    <item msgid="8937994881315223448">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎Connected to ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</item>
+    <item msgid="1330262655415760617">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎Suspended‎‏‎‎‏‎"</item>
+    <item msgid="7698638434317271902">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‎Disconnecting from ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</item>
+    <item msgid="197508606402264311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎Disconnected‎‏‎‎‏‎"</item>
+    <item msgid="8578370891960825148">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎Unsuccessful‎‏‎‎‏‎"</item>
+    <item msgid="5660739516542454527">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎Blocked‎‏‎‎‏‎"</item>
+    <item msgid="1805837518286731242">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎Temporarily avoiding poor connection‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="hdcp_checking_titles">
+    <item msgid="441827799230089869">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎Never check‎‏‎‎‏‎"</item>
+    <item msgid="6042769699089883931">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‏‏‎Check for DRM content only‎‏‎‎‏‎"</item>
+    <item msgid="9174900380056846820">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‎‎Always check‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="hdcp_checking_summaries">
+    <item msgid="505558545611516707">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎Never use HDCP checking‎‏‎‎‏‎"</item>
+    <item msgid="3878793616631049349">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎Use HDCP checking for DRM content only‎‏‎‎‏‎"</item>
+    <item msgid="45075631231212732">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎Always use HDCP checking‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="bluetooth_avrcp_versions">
+    <item msgid="5347678900838034763">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‎AVRCP 1.4 (Default)‎‏‎‎‏‎"</item>
+    <item msgid="2809759619990248160">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎AVRCP 1.3‎‏‎‎‏‎"</item>
+    <item msgid="6199178154704729352">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎AVRCP 1.5‎‏‎‎‏‎"</item>
+    <item msgid="5172170854953034852">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎AVRCP 1.6‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="bluetooth_avrcp_version_values">
+    <item msgid="2838624067805073303">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎avrcp14‎‏‎‎‏‎"</item>
+    <item msgid="3011533352527449572">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‏‎‎‎avrcp13‎‏‎‎‏‎"</item>
+    <item msgid="8837606198371920819">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎avrcp15‎‏‎‎‏‎"</item>
+    <item msgid="3422726142222090896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‎avrcp16‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+    <item msgid="7539690996561263909">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎SBC‎‏‎‎‏‎"</item>
+    <item msgid="686685526567131661">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎AAC‎‏‎‎‏‎"</item>
+    <item msgid="5254942598247222737">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX">aptX™</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
+    <item msgid="2091430979086738145">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‏‎‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX_HD">aptX™ HD</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
+    <item msgid="6751080638867012696">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‎LDAC‎‏‎‎‏‎"</item>
+    <item msgid="723675059572222462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎Enable Optional Codecs‎‏‎‎‏‎"</item>
+    <item msgid="3304843301758635896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‎Disable Optional Codecs‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+    <item msgid="6898329690939802290">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‏‎‎SBC‎‏‎‎‏‎"</item>
+    <item msgid="6839647709301342559">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‏‏‏‎AAC‎‏‎‎‏‎"</item>
+    <item msgid="7848030269621918608">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX">aptX™</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
+    <item msgid="298198075927343893">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX_HD">aptX™ HD</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
+    <item msgid="7950781694447359344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‎‎LDAC‎‏‎‎‏‎"</item>
+    <item msgid="2209680154067241740">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‎‎‎Enable Optional Codecs‎‏‎‎‏‎"</item>
+    <item msgid="741805482892725657">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‎‏‎Disable Optional Codecs‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
+    <item msgid="3093023430402746802">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+    <item msgid="8895532488906185219">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎44.1 kHz‎‏‎‎‏‎"</item>
+    <item msgid="2909915718994807056">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‎‎48.0 kHz‎‏‎‎‏‎"</item>
+    <item msgid="3347287377354164611">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‎88.2 kHz‎‏‎‎‏‎"</item>
+    <item msgid="1234212100239985373">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‎‏‏‏‎‏‎96.0 kHz‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
+    <item msgid="3214516120190965356">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+    <item msgid="4482862757811638365">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎44.1 kHz‎‏‎‎‏‎"</item>
+    <item msgid="354495328188724404">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎48.0 kHz‎‏‎‎‏‎"</item>
+    <item msgid="7329816882213695083">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎88.2 kHz‎‏‎‎‏‎"</item>
+    <item msgid="6967397666254430476">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‎96.0 kHz‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
+    <item msgid="2684127272582591429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+    <item msgid="5618929009984956469">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎16 bits/sample‎‏‎‎‏‎"</item>
+    <item msgid="3412640499234627248">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‎‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎24 bits/sample‎‏‎‎‏‎"</item>
+    <item msgid="121583001492929387">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎32 bits/sample‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
+    <item msgid="1081159789834584363">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‏‏‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+    <item msgid="4726688794884191540">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‎‎16 bits/sample‎‏‎‎‏‎"</item>
+    <item msgid="305344756485516870">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎24 bits/sample‎‏‎‎‏‎"</item>
+    <item msgid="244568657919675099">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎32 bits/sample‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
+    <item msgid="5226878858503393706">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+    <item msgid="4106832974775067314">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‎‎Mono‎‏‎‎‏‎"</item>
+    <item msgid="5571632958424639155">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‏‎Stereo‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
+    <item msgid="4118561796005528173">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‏‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+    <item msgid="8900559293912978337">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎‏‎Mono‎‏‎‎‏‎"</item>
+    <item msgid="8883739882299884241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‏‎Stereo‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
+    <item msgid="7158319962230727476">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎Optimized for Audio Quality (990kbps/909kbps)‎‏‎‎‏‎"</item>
+    <item msgid="2921767058740704969">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎Balanced Audio And Connection Quality (660kbps/606kbps)‎‏‎‎‏‎"</item>
+    <item msgid="8860982705384396512">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎Optimized for Connection Quality (330kbps/303kbps)‎‏‎‎‏‎"</item>
+    <item msgid="4414060457677684127">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎Best Effort (Adaptive Bit Rate)‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
+    <item msgid="6398189564246596868">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎Optimized for Audio Quality‎‏‎‎‏‎"</item>
+    <item msgid="4327143584633311908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‏‎‏‎‎‏‎‎‎Balanced Audio And Connection Quality‎‏‎‎‏‎"</item>
+    <item msgid="4681409244565426925">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎Optimized for Connection Quality‎‏‎‎‏‎"</item>
+    <item msgid="364670732877872677">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎Best Effort (Adaptive Bit Rate)‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="select_logd_size_titles">
+    <item msgid="8665206199209698501">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎Off‎‏‎‎‏‎"</item>
+    <item msgid="1593289376502312923">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‎64K‎‏‎‎‏‎"</item>
+    <item msgid="487545340236145324">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎256K‎‏‎‎‏‎"</item>
+    <item msgid="2423528675294333831">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎1M‎‏‎‎‏‎"</item>
+    <item msgid="180883774509476541">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎4M‎‏‎‎‏‎"</item>
+    <item msgid="2803199102589126938">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‎‎16M‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="select_logd_size_lowram_titles">
+    <item msgid="6089470720451068364">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎Off‎‏‎‎‏‎"</item>
+    <item msgid="4622460333038586791">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎64K‎‏‎‎‏‎"</item>
+    <item msgid="2212125625169582330">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‎256K‎‏‎‎‏‎"</item>
+    <item msgid="1704946766699242653">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‏‎1M‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="select_logd_size_summaries">
+    <item msgid="6921048829791179331">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎Off‎‏‎‎‏‎"</item>
+    <item msgid="2969458029344750262">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎64K per log buffer‎‏‎‎‏‎"</item>
+    <item msgid="1342285115665698168">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎‎256K per log buffer‎‏‎‎‏‎"</item>
+    <item msgid="1314234299552254621">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‏‎1M per log buffer‎‏‎‎‏‎"</item>
+    <item msgid="3606047780792894151">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎4M per log buffer‎‏‎‎‏‎"</item>
+    <item msgid="5431354956856655120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎16M per log buffer‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="select_logpersist_titles">
+    <item msgid="1744840221860799971">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎Off‎‏‎‎‏‎"</item>
+    <item msgid="3054662377365844197">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎All‎‏‎‎‏‎"</item>
+    <item msgid="688870735111627832">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎All but radio‎‏‎‎‏‎"</item>
+    <item msgid="2850427388488887328">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎kernel only‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="select_logpersist_summaries">
+    <item msgid="2216470072500521830">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎Off‎‏‎‎‏‎"</item>
+    <item msgid="172978079776521897">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎All log buffers‎‏‎‎‏‎"</item>
+    <item msgid="3873873912383879240">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‎All but radio log buffers‎‏‎‎‏‎"</item>
+    <item msgid="8489661142527693381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‎kernel log buffer only‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="window_animation_scale_entries">
+    <item msgid="8134156599370824081">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‎Animation off‎‏‎‎‏‎"</item>
+    <item msgid="6624864048416710414">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‎‎‎‎‏‏‏‎‎Animation scale .5x‎‏‎‎‏‎"</item>
+    <item msgid="2219332261255416635">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‎‏‏‎Animation scale 1x‎‏‎‎‏‎"</item>
+    <item msgid="3544428804137048509">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎Animation scale 1.5x‎‏‎‎‏‎"</item>
+    <item msgid="3110710404225974514">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‎Animation scale 2x‎‏‎‎‏‎"</item>
+    <item msgid="4402738611528318731">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎Animation scale 5x‎‏‎‎‏‎"</item>
+    <item msgid="6189539267968330656">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‎Animation scale 10x‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="transition_animation_scale_entries">
+    <item msgid="8464255836173039442">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎Animation off‎‏‎‎‏‎"</item>
+    <item msgid="3375781541913316411">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‏‎Animation scale .5x‎‏‎‎‏‎"</item>
+    <item msgid="1991041427801869945">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎Animation scale 1x‎‏‎‎‏‎"</item>
+    <item msgid="4012689927622382874">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎Animation scale 1.5x‎‏‎‎‏‎"</item>
+    <item msgid="3289156759925947169">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎Animation scale 2x‎‏‎‎‏‎"</item>
+    <item msgid="7705857441213621835">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‎Animation scale 5x‎‏‎‎‏‎"</item>
+    <item msgid="6660750935954853365">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎Animation scale 10x‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="animator_duration_scale_entries">
+    <item msgid="6039901060648228241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‏‎Animation off‎‏‎‎‏‎"</item>
+    <item msgid="1138649021950863198">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‏‏‎‎Animation scale .5x‎‏‎‎‏‎"</item>
+    <item msgid="4394388961370833040">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎Animation scale 1x‎‏‎‎‏‎"</item>
+    <item msgid="8125427921655194973">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‎Animation scale 1.5x‎‏‎‎‏‎"</item>
+    <item msgid="3334024790739189573">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎Animation scale 2x‎‏‎‎‏‎"</item>
+    <item msgid="3170120558236848008">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎Animation scale 5x‎‏‎‎‏‎"</item>
+    <item msgid="1069584980746680398">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎Animation scale 10x‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="overlay_display_devices_entries">
+    <item msgid="1606809880904982133">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎‏‎None‎‏‎‎‏‎"</item>
+    <item msgid="9033194758688161545">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎480p‎‏‎‎‏‎"</item>
+    <item msgid="1025306206556583600">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎480p (secure)‎‏‎‎‏‎"</item>
+    <item msgid="1853913333042744661">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‎‏‎720p‎‏‎‎‏‎"</item>
+    <item msgid="3414540279805870511">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎720p (secure)‎‏‎‎‏‎"</item>
+    <item msgid="9039818062847141551">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎1080p‎‏‎‎‏‎"</item>
+    <item msgid="4939496949750174834">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎1080p (secure)‎‏‎‎‏‎"</item>
+    <item msgid="1833612718524903568">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎4K‎‏‎‎‏‎"</item>
+    <item msgid="238303513127879234">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‎‎4K (secure)‎‏‎‎‏‎"</item>
+    <item msgid="3547211260846843098">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎4K (upscaled)‎‏‎‎‏‎"</item>
+    <item msgid="5411365648951414254">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎4K (upscaled, secure)‎‏‎‎‏‎"</item>
+    <item msgid="1311305077526792901">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎720p, 1080p (dual screen)‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="enable_opengl_traces_entries">
+    <item msgid="3191973083884253830">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎None‎‏‎‎‏‎"</item>
+    <item msgid="9089630089455370183">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎Logcat‎‏‎‎‏‎"</item>
+    <item msgid="5397807424362304288">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎‎‎‎‎Systrace (Graphics)‎‏‎‎‏‎"</item>
+    <item msgid="1340692776955662664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎Call stack on glGetError‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="show_non_rect_clip_entries">
+    <item msgid="993742912147090253">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎Off‎‏‎‎‏‎"</item>
+    <item msgid="675719912558941285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‏‎‏‎Draw non-rectangular clip region in blue‎‏‎‎‏‎"</item>
+    <item msgid="1064373276095698656">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎Highlight tested drawing commands in green‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="track_frame_time_entries">
+    <item msgid="2193584639058893150">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎Off‎‏‎‎‏‎"</item>
+    <item msgid="2751513398307949636">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‎‎‎‏‎‎‎On screen as bars‎‏‎‎‏‎"</item>
+    <item msgid="2355151170975410323">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎In ‎‏‎‎‏‏‎<xliff:g id="AS_TYPED_COMMAND">adb shell dumpsys gfxinfo</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="debug_hw_overdraw_entries">
+    <item msgid="8190572633763871652">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‎Off‎‏‎‎‏‎"</item>
+    <item msgid="7688197031296835369">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‏‎Show overdraw areas‎‏‎‎‏‎"</item>
+    <item msgid="2290859360633824369">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎Show areas for Deuteranomaly‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="debug_hw_renderer_entries">
+    <item msgid="2578620445459945681">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎OpenGL (Default)‎‏‎‎‏‎"</item>
+    <item msgid="2839130076198120436">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‎‏‎‎‎OpenGL (Skia)‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="app_process_limit_entries">
+    <item msgid="3401625457385943795">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‏‎Standard limit‎‏‎‎‏‎"</item>
+    <item msgid="4071574792028999443">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎No background processes‎‏‎‎‏‎"</item>
+    <item msgid="4810006996171705398">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎At most 1 process‎‏‎‎‏‎"</item>
+    <item msgid="8586370216857360863">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎At most 2 processes‎‏‎‎‏‎"</item>
+    <item msgid="836593137872605381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎At most 3 processes‎‏‎‎‏‎"</item>
+    <item msgid="7899496259191969307">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‎‏‏‎At most 4 processes‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="usb_configuration_titles">
+    <item msgid="488237561639712799">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎Charging‎‏‎‎‏‎"</item>
+    <item msgid="5220695614993094977">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎MTP (Media Transfer Protocol)‎‏‎‎‏‎"</item>
+    <item msgid="2086000968159047375">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎PTP (Picture Transfer Protocol)‎‏‎‎‏‎"</item>
+    <item msgid="7398830860950841822">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‎RNDIS (USB Ethernet)‎‏‎‎‏‎"</item>
+    <item msgid="1718924214939774352">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎Audio Source‎‏‎‎‏‎"</item>
+    <item msgid="8126315616613006284">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎MIDI‎‏‎‎‏‎"</item>
+  </string-array>
+</resources>
diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..9c313ee
--- /dev/null
+++ b/packages/SettingsLib/res/values-en-rXC/strings.xml
@@ -0,0 +1,393 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2015 The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="wifi_fail_to_scan" msgid="1265540342578081461">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎Can\'t scan for networks‎‏‎‎‏‎"</string>
+    <string name="wifi_security_none" msgid="7985461072596594400">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‎None‎‏‎‎‏‎"</string>
+    <string name="wifi_remembered" msgid="4955746899347821096">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎Saved‎‏‎‎‏‎"</string>
+    <string name="wifi_disabled_generic" msgid="4259794910584943386">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎Disabled‎‏‎‎‏‎"</string>
+    <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎IP Configuration Failure‎‏‎‎‏‎"</string>
+    <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‎‎‎Not connected due to low quality network‎‏‎‎‏‎"</string>
+    <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎WiFi Connection Failure‎‏‎‎‏‎"</string>
+    <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎Authentication problem‎‏‎‎‏‎"</string>
+    <string name="wifi_cant_connect" msgid="5410016875644565884">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‎‎Can\'t connect‎‏‎‎‏‎"</string>
+    <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‏‎Can\'t connect to \'‎‏‎‎‏‏‎<xliff:g id="AP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎\'‎‏‎‎‏‎"</string>
+    <string name="wifi_check_password_try_again" msgid="516958988102584767">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‎Check password and try again‎‏‎‎‏‎"</string>
+    <string name="wifi_not_in_range" msgid="1136191511238508967">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‏‏‏‎Not in range‎‏‎‎‏‎"</string>
+    <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎Won\'t automatically connect‎‏‎‎‏‎"</string>
+    <string name="wifi_no_internet" msgid="3880396223819116454">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎No Internet access‎‏‎‎‏‎"</string>
+    <string name="saved_network" msgid="4352716707126620811">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎Saved by ‎‏‎‎‏‏‎<xliff:g id="NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="connected_via_network_scorer" msgid="5713793306870815341">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‏‎‏‎Automatically connected via %1$s‎‏‎‎‏‎"</string>
+    <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‎Automatically connected via network rating provider‎‏‎‎‏‎"</string>
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‎Connected via %1$s‎‏‎‎‏‎"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎Available via %1$s‎‏‎‎‏‎"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎Connected, no Internet‎‏‎‎‏‎"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎Access point temporarily full‎‏‎‎‏‎"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎Connected via %1$s‎‏‎‎‏‎"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎Available via %1$s‎‏‎‎‏‎"</string>
+    <string name="speed_label_very_slow" msgid="1867055264243608530">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎Very Slow‎‏‎‎‏‎"</string>
+    <string name="speed_label_slow" msgid="813109590815810235">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎Slow‎‏‎‎‏‎"</string>
+    <string name="speed_label_okay" msgid="2331665440671174858">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎OK‎‏‎‎‏‎"</string>
+    <string name="speed_label_medium" msgid="3175763313268941953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎Medium‎‏‎‎‏‎"</string>
+    <string name="speed_label_fast" msgid="7715732164050975057">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎Fast‎‏‎‎‏‎"</string>
+    <string name="speed_label_very_fast" msgid="2265363430784523409">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎Very Fast‎‏‎‎‏‎"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="STATE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ / ‎‏‎‎‏‏‎<xliff:g id="DESCRIPTION">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="bluetooth_disconnected" msgid="6557104142667339895">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎Disconnected‎‏‎‎‏‎"</string>
+    <string name="bluetooth_disconnecting" msgid="8913264760027764974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎Disconnecting…‎‏‎‎‏‎"</string>
+    <string name="bluetooth_connecting" msgid="8555009514614320497">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎Connecting…‎‏‎‎‏‎"</string>
+    <string name="bluetooth_connected" msgid="6038755206916626419">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎Connected‎‏‎‎‏‎"</string>
+    <string name="bluetooth_pairing" msgid="1426882272690346242">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎Pairing…‎‏‎‎‏‎"</string>
+    <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‏‎Connected (no phone)‎‏‎‎‏‎"</string>
+    <string name="bluetooth_connected_no_a2dp" msgid="4576188601581440337">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎Connected (no media)‎‏‎‎‏‎"</string>
+    <string name="bluetooth_connected_no_map" msgid="6504436917057479986">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‎‎Connected (no message access)‎‏‎‎‏‎"</string>
+    <string name="bluetooth_connected_no_headset_no_a2dp" msgid="9195757766755553810">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‎‎Connected (no phone or media)‎‏‎‎‏‎"</string>
+    <string name="bluetooth_connected_battery_level" msgid="7049181126136692368">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎Connected, battery ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="bluetooth_connected_no_headset_battery_level" msgid="5504193961248406027">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎Connected (no phone), battery ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="bluetooth_connected_no_a2dp_battery_level" msgid="4751724026365870779">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‏‏‏‎‏‏‎Connected (no media), battery ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1549265779323455261">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‏‏‏‎‏‎Connected (no phone or media), battery ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎Media audio‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_headset" msgid="7815495680863246034">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎Phone calls‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_opp" msgid="9168139293654233697">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‎‏‎File transfer‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_hid" msgid="3680729023366986480">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‎Input device‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_pan" msgid="3391606497945147673">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎Internet access‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_pbap" msgid="5372051906968576809">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎Contact sharing‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎Use for contact sharing‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎Internet connection sharing‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_map" msgid="1019763341565580450">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎Text Messages‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‎SIM Access‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_a2dp_high_quality" msgid="5444517801472820055">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎HD audio: ‎‏‎‎‏‏‎<xliff:g id="CODEC_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="8510588052415438887">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎HD audio‎‏‎‎‏‎"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎Connected to media audio‎‏‎‎‏‎"</string>
+    <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎Connected to phone audio‎‏‎‎‏‎"</string>
+    <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎Connected to file transfer server‎‏‎‎‏‎"</string>
+    <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‎‏‎Connected to map‎‏‎‎‏‎"</string>
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎Connected to SAP‎‏‎‎‏‎"</string>
+    <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎Not connected to file transfer server‎‏‎‎‏‎"</string>
+    <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‎‎‏‎Connected to input device‎‏‎‎‏‎"</string>
+    <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‏‎‎‎‏‎‏‎‏‎‎‎Connected to device for Internet access‎‏‎‎‏‎"</string>
+    <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎Sharing local Internet connection with device‎‏‎‎‏‎"</string>
+    <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‏‎Use for Internet access‎‏‎‎‏‎"</string>
+    <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎Use for map‎‏‎‎‏‎"</string>
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎Use for SIM access‎‏‎‎‏‎"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎Use for media audio‎‏‎‎‏‎"</string>
+    <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‏‏‎Use for phone audio‎‏‎‎‏‎"</string>
+    <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‎‎‎Use for file transfer‎‏‎‎‏‎"</string>
+    <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‎Use for input‎‏‎‎‏‎"</string>
+    <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎Pair‎‏‎‎‏‎"</string>
+    <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎PAIR‎‏‎‎‏‎"</string>
+    <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎Cancel‎‏‎‎‏‎"</string>
+    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎Pairing grants access to your contacts and call history when connected.‎‏‎‎‏‎"</string>
+    <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‎Couldn\'t pair with ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎Couldn\'t pair with ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ because of an incorrect PIN or passkey.‎‏‎‎‏‎"</string>
+    <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎Can\'t communicate with ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‎‎Pairing rejected by ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="accessibility_wifi_off" msgid="1166761729660614716">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‎‎‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎Wifi off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_no_wifi" msgid="8834610636137374508">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎Wifi disconnected.‎‏‎‎‏‎"</string>
+    <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎Wifi one bar.‎‏‎‎‏‎"</string>
+    <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎Wifi two bars.‎‏‎‎‏‎"</string>
+    <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎Wifi three bars.‎‏‎‎‏‎"</string>
+    <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎Wifi signal full.‎‏‎‎‏‎"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‏‏‎Open network‎‏‎‎‏‎"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‎Secure network‎‏‎‎‏‎"</string>
+    <string name="process_kernel_label" msgid="3916858646836739323">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎Android OS‎‏‎‎‏‎"</string>
+    <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‎Removed apps‎‏‎‎‏‎"</string>
+    <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‎‎Removed apps and users‎‏‎‎‏‎"</string>
+    <string name="tether_settings_title_usb" msgid="6688416425801386511">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎USB tethering‎‏‎‎‏‎"</string>
+    <string name="tether_settings_title_wifi" msgid="3277144155960302049">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎Portable hotspot‎‏‎‎‏‎"</string>
+    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎Bluetooth tethering‎‏‎‎‏‎"</string>
+    <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎Tethering‎‏‎‎‏‎"</string>
+    <string name="tether_settings_title_all" msgid="8356136101061143841">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‏‎Tethering &amp; portable hotspot‎‏‎‎‏‎"</string>
+    <string name="managed_user_title" msgid="8109605045406748842">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎All work apps‎‏‎‎‏‎"</string>
+    <string name="user_guest" msgid="8475274842845401871">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‎‎‎‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎Guest‎‏‎‎‏‎"</string>
+    <string name="unknown" msgid="1592123443519355854">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎Unknown‎‏‎‎‏‎"</string>
+    <string name="running_process_item_user_label" msgid="3129887865552025943">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎User: ‎‏‎‎‏‏‎<xliff:g id="USER_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="launch_defaults_some" msgid="313159469856372621">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎Some defaults set‎‏‎‎‏‎"</string>
+    <string name="launch_defaults_none" msgid="4241129108140034876">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎No defaults set‎‏‎‎‏‎"</string>
+    <string name="tts_settings" msgid="8186971894801348327">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎Text-to-speech settings‎‏‎‎‏‎"</string>
+    <string name="tts_settings_title" msgid="1237820681016639683">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎Text-to-speech output‎‏‎‎‏‎"</string>
+    <string name="tts_default_rate_title" msgid="6030550998379310088">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎Speech rate‎‏‎‎‏‎"</string>
+    <string name="tts_default_rate_summary" msgid="4061815292287182801">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‏‎Speed at which the text is spoken‎‏‎‎‏‎"</string>
+    <string name="tts_default_pitch_title" msgid="6135942113172488671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎Pitch‎‏‎‎‏‎"</string>
+    <string name="tts_default_pitch_summary" msgid="1944885882882650009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎Affects the tone of the synthesized speech‎‏‎‎‏‎"</string>
+    <string name="tts_default_lang_title" msgid="8018087612299820556">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎Language‎‏‎‎‏‎"</string>
+    <string name="tts_lang_use_system" msgid="2679252467416513208">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎Use system language‎‏‎‎‏‎"</string>
+    <string name="tts_lang_not_selected" msgid="7395787019276734765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎Language not selected‎‏‎‎‏‎"</string>
+    <string name="tts_default_lang_summary" msgid="5219362163902707785">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‎Sets the language-specific voice for the spoken text‎‏‎‎‏‎"</string>
+    <string name="tts_play_example_title" msgid="7094780383253097230">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎Listen to an example‎‏‎‎‏‎"</string>
+    <string name="tts_play_example_summary" msgid="8029071615047894486">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎Play a short demonstration of speech synthesis‎‏‎‎‏‎"</string>
+    <string name="tts_install_data_title" msgid="4264378440508149986">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‏‎‎Install voice data‎‏‎‎‏‎"</string>
+    <string name="tts_install_data_summary" msgid="5742135732511822589">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎Install the voice data required for speech synthesis‎‏‎‎‏‎"</string>
+    <string name="tts_engine_security_warning" msgid="8786238102020223650">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎This speech synthesis engine may be able to collect all the text that will be spoken, including personal data like passwords and credit card numbers. It comes from the ‎‏‎‎‏‏‎<xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ engine. Enable the use of this speech synthesis engine?‎‏‎‎‏‎"</string>
+    <string name="tts_engine_network_required" msgid="1190837151485314743">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎This language requires a working network connection for text-to-speech output.‎‏‎‎‏‎"</string>
+    <string name="tts_default_sample_string" msgid="4040835213373086322">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‎‎This is an example of speech synthesis‎‏‎‎‏‎"</string>
+    <string name="tts_status_title" msgid="7268566550242584413">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‎Default language status‎‏‎‎‏‎"</string>
+    <string name="tts_status_ok" msgid="1309762510278029765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="LOCALE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is fully supported‎‏‎‎‏‎"</string>
+    <string name="tts_status_requires_network" msgid="6042500821503226892">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="LOCALE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ requires network connection‎‏‎‎‏‎"</string>
+    <string name="tts_status_not_supported" msgid="4491154212762472495">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="LOCALE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is not supported‎‏‎‎‏‎"</string>
+    <string name="tts_status_checking" msgid="5339150797940483592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‎Checking…‎‏‎‎‏‎"</string>
+    <string name="tts_engine_settings_title" msgid="3499112142425680334">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎Settings for ‎‏‎‎‏‏‎<xliff:g id="TTS_ENGINE_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="tts_engine_settings_button" msgid="1030512042040722285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‎‏‎Launch engine settings‎‏‎‎‏‎"</string>
+    <string name="tts_engine_preference_section_title" msgid="448294500990971413">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎Preferred engine‎‏‎‎‏‎"</string>
+    <string name="tts_general_section_title" msgid="4402572014604490502">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‎‎‎‎‏‏‎‎General‎‏‎‎‏‎"</string>
+    <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎Reset speech pitch‎‏‎‎‏‎"</string>
+    <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎Reset the pitch at which the text is spoken to default.‎‏‎‎‏‎"</string>
+  <string-array name="tts_rate_entries">
+    <item msgid="6695494874362656215">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎Very slow‎‏‎‎‏‎"</item>
+    <item msgid="4795095314303559268">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎Slow‎‏‎‎‏‎"</item>
+    <item msgid="8903157781070679765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎Normal‎‏‎‎‏‎"</item>
+    <item msgid="164347302621392996">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‏‎‎‎Fast‎‏‎‎‏‎"</item>
+    <item msgid="5794028588101562009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎Faster‎‏‎‎‏‎"</item>
+    <item msgid="7163942783888652942">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎Very fast‎‏‎‎‏‎"</item>
+    <item msgid="7831712693748700507">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‏‎‏‏‎Rapid‎‏‎‎‏‎"</item>
+    <item msgid="5194774745031751806">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‎Very rapid‎‏‎‎‏‎"</item>
+    <item msgid="9085102246155045744">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎Fastest‎‏‎‎‏‎"</item>
+  </string-array>
+    <string name="choose_profile" msgid="6921016979430278661">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‏‎Choose profile‎‏‎‎‏‎"</string>
+    <string name="category_personal" msgid="1299663247844969448">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎Personal‎‏‎‎‏‎"</string>
+    <string name="category_work" msgid="8699184680584175622">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‎Work‎‏‎‎‏‎"</string>
+    <string name="development_settings_title" msgid="215179176067683667">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‎Developer options‎‏‎‎‏‎"</string>
+    <string name="development_settings_enable" msgid="542530994778109538">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎Enable developer options‎‏‎‎‏‎"</string>
+    <string name="development_settings_summary" msgid="1815795401632854041">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎Set options for app development‎‏‎‎‏‎"</string>
+    <string name="development_settings_not_available" msgid="4308569041701535607">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎Developer options are not available for this user‎‏‎‎‏‎"</string>
+    <string name="vpn_settings_not_available" msgid="956841430176985598">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎VPN settings are not available for this user‎‏‎‎‏‎"</string>
+    <string name="tethering_settings_not_available" msgid="6765770438438291012">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎Tethering settings are not available for this user‎‏‎‎‏‎"</string>
+    <string name="apn_settings_not_available" msgid="7873729032165324000">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‎‎Access Point Name settings are not available for this user‎‏‎‎‏‎"</string>
+    <string name="enable_adb" msgid="7982306934419797485">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‏‎USB debugging‎‏‎‎‏‎"</string>
+    <string name="enable_adb_summary" msgid="4881186971746056635">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‎Debug mode when USB is connected‎‏‎‎‏‎"</string>
+    <string name="clear_adb_keys" msgid="4038889221503122743">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎Revoke USB debugging authorizations‎‏‎‎‏‎"</string>
+    <string name="bugreport_in_power" msgid="7923901846375587241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎Bug report shortcut‎‏‎‎‏‎"</string>
+    <string name="bugreport_in_power_summary" msgid="1778455732762984579">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎Show a button in the power menu for taking a bug report‎‏‎‎‏‎"</string>
+    <string name="keep_screen_on" msgid="1146389631208760344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎Stay awake‎‏‎‎‏‎"</string>
+    <string name="keep_screen_on_summary" msgid="2173114350754293009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎Screen will never sleep while charging‎‏‎‎‏‎"</string>
+    <string name="bt_hci_snoop_log" msgid="3340699311158865670">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎Enable Bluetooth HCI snoop log‎‏‎‎‏‎"</string>
+    <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎‎‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎Capture all bluetooth HCI packets in a file‎‏‎‎‏‎"</string>
+    <string name="oem_unlock_enable" msgid="6040763321967327691">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎OEM unlocking‎‏‎‎‏‎"</string>
+    <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎Allow the bootloader to be unlocked‎‏‎‎‏‎"</string>
+    <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎Allow OEM unlocking?‎‏‎‎‏‎"</string>
+    <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‎‎WARNING: Device protection features will not work on this device while this setting is turned on.‎‏‎‎‏‎"</string>
+    <string name="mock_location_app" msgid="7966220972812881854">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎Select mock location app‎‏‎‎‏‎"</string>
+    <string name="mock_location_app_not_set" msgid="809543285495344223">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎No mock location app set‎‏‎‎‏‎"</string>
+    <string name="mock_location_app_set" msgid="8966420655295102685">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎Mock location app: ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="debug_networking_category" msgid="7044075693643009662">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎Networking‎‏‎‎‏‎"</string>
+    <string name="wifi_display_certification" msgid="8611569543791307533">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎Wireless display certification‎‏‎‎‏‎"</string>
+    <string name="wifi_verbose_logging" msgid="4203729756047242344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎Enable Wi‑Fi Verbose Logging‎‏‎‎‏‎"</string>
+    <string name="wifi_aggressive_handover" msgid="5309131983693661320">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‎‎‎Aggressive Wi‑Fi to mobile handover‎‏‎‎‏‎"</string>
+    <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‏‎‏‎‎Always allow Wi‑Fi Roam Scans‎‏‎‎‏‎"</string>
+    <string name="mobile_data_always_on" msgid="8774857027458200434">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‎Mobile data always active‎‏‎‎‏‎"</string>
+    <string name="tethering_hardware_offload" msgid="7470077827090325814">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‏‏‎‎Tethering hardware acceleration‎‏‎‎‏‎"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎Show Bluetooth devices without names‎‏‎‎‏‎"</string>
+    <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎Disable absolute volume‎‏‎‎‏‎"</string>
+    <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎Enable in-band ringing‎‏‎‎‏‎"</string>
+    <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‎‎‎‎‎‏‎Bluetooth AVRCP Version‎‏‎‎‏‎"</string>
+    <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‎‎Select Bluetooth AVRCP Version‎‏‎‎‏‎"</string>
+    <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‎Bluetooth Audio Codec‎‏‎‎‏‎"</string>
+    <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="4558347981670553665">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‏‎‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎Select Bluetooth Audio Codec‎‏‎‎‏‎"</string>
+    <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎Bluetooth Audio Sample Rate‎‏‎‎‏‎"</string>
+    <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="5628790207448471613">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‏‎Select Bluetooth Audio Codec:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Sample Rate‎‏‎‎‏‎"</string>
+    <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‎‏‏‎‏‎Bluetooth Audio Bits Per Sample‎‏‎‎‏‎"</string>
+    <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="4546131401358681321">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‏‎Select Bluetooth Audio Codec:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Bits Per Sample‎‏‎‎‏‎"</string>
+    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎Bluetooth Audio Channel Mode‎‏‎‎‏‎"</string>
+    <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="9133545781346216071">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‏‏‎Select Bluetooth Audio Codec:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Channel Mode‎‏‎‎‏‎"</string>
+    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎Bluetooth Audio LDAC Codec: Playback Quality‎‏‎‎‏‎"</string>
+    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‎‎‎‎Select Bluetooth Audio LDAC Codec:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Playback Quality‎‏‎‎‏‎"</string>
+    <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‎Streaming: ‎‏‎‎‏‏‎<xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="wifi_display_certification_summary" msgid="1155182309166746973">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎Show options for wireless display certification‎‏‎‎‏‎"</string>
+    <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker‎‏‎‎‏‎"</string>
+    <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‏‎‏‏‎When enabled, Wi‑Fi will be more aggressive in handing over the data connection to mobile, when Wi‑Fi signal is low‎‏‎‎‏‎"</string>
+    <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎Allow/Disallow Wi‑Fi Roam Scans based on the amount of data traffic present at the interface‎‏‎‎‏‎"</string>
+    <string name="select_logd_size_title" msgid="7433137108348553508">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‎Logger buffer sizes‎‏‎‎‏‎"</string>
+    <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‎‎Select Logger sizes per log buffer‎‏‎‎‏‎"</string>
+    <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‎Clear logger persistent storage?‎‏‎‎‏‎"</string>
+    <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎When we no longer are monitoring with the persistent logger, we are required to erase the logger data resident on your device.‎‏‎‎‏‎"</string>
+    <string name="select_logpersist_title" msgid="7530031344550073166">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎‎Store logger data persistently on device‎‏‎‎‏‎"</string>
+    <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎Select log buffers to store persistently on device‎‏‎‎‏‎"</string>
+    <string name="select_usb_configuration_title" msgid="2649938511506971843">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎Select USB Configuration‎‏‎‎‏‎"</string>
+    <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎Select USB Configuration‎‏‎‎‏‎"</string>
+    <string name="allow_mock_location" msgid="2787962564578664888">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‎Allow mock locations‎‏‎‎‏‎"</string>
+    <string name="allow_mock_location_summary" msgid="317615105156345626">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎Allow mock locations‎‏‎‎‏‎"</string>
+    <string name="debug_view_attributes" msgid="6485448367803310384">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‎‎‎‎Enable view attribute inspection‎‏‎‎‏‎"</string>
+    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎Always keep mobile data active, even when Wi‑Fi is active (for fast network switching).‎‏‎‎‏‎"</string>
+    <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎Use tethering hardware acceleration if available‎‏‎‎‏‎"</string>
+    <string name="adb_warning_title" msgid="6234463310896563253">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‎Allow USB debugging?‎‏‎‎‏‎"</string>
+    <string name="adb_warning_message" msgid="7316799925425402244">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‎‎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="adb_keys_warning_message" msgid="5659849457135841625">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‎‎‏‎Revoke access to USB debugging from all computers you’ve previously authorized?‎‏‎‎‏‎"</string>
+    <string name="dev_settings_warning_title" msgid="7244607768088540165">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎Allow development settings?‎‏‎‎‏‎"</string>
+    <string name="dev_settings_warning_message" msgid="2298337781139097964">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave.‎‏‎‎‏‎"</string>
+    <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‎Verify apps over USB‎‏‎‎‏‎"</string>
+    <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎Check apps installed via ADB/ADT for harmful behavior.‎‏‎‎‏‎"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎Bluetooth devices without names (MAC addresses only) will be displayed‎‏‎‎‏‎"</string>
+    <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎Disables the Bluetooth absolute volume feature in case of volume issues with remote devices such as unacceptably loud volume or lack of control.‎‏‎‎‏‎"</string>
+    <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‎‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎Allow ringtones on the phone to be played on Bluetooth headsets‎‏‎‎‏‎"</string>
+    <string name="enable_terminal_title" msgid="95572094356054120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎Local terminal‎‏‎‎‏‎"</string>
+    <string name="enable_terminal_summary" msgid="67667852659359206">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎Enable terminal app that offers local shell access‎‏‎‎‏‎"</string>
+    <string name="hdcp_checking_title" msgid="8605478913544273282">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎HDCP checking‎‏‎‎‏‎"</string>
+    <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎Set HDCP checking behavior‎‏‎‎‏‎"</string>
+    <string name="debug_debugging_category" msgid="6781250159513471316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‎Debugging‎‏‎‎‏‎"</string>
+    <string name="debug_app" msgid="8349591734751384446">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎Select debug app‎‏‎‎‏‎"</string>
+    <string name="debug_app_not_set" msgid="718752499586403499">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‏‎No debug application set‎‏‎‎‏‎"</string>
+    <string name="debug_app_set" msgid="2063077997870280017">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‎Debugging application: ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="select_application" msgid="5156029161289091703">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎Select application‎‏‎‎‏‎"</string>
+    <string name="no_application" msgid="2813387563129153880">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‎‎‎‎Nothing‎‏‎‎‏‎"</string>
+    <string name="wait_for_debugger" msgid="1202370874528893091">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‏‎Wait for debugger‎‏‎‎‏‎"</string>
+    <string name="wait_for_debugger_summary" msgid="1766918303462746804">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎Debugged application waits for debugger to attach before executing‎‏‎‎‏‎"</string>
+    <string name="telephony_monitor_switch" msgid="1764958220062121194">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎‏‎‎Telephony Monitor‎‏‎‎‏‎"</string>
+    <string name="telephony_monitor_switch_summary" msgid="7695552966547975635">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‏‎TelephonyMonitor will collect logs when it detects a problem with telephony/modem functionality and prompt notification to user to file a bug‎‏‎‎‏‎"</string>
+    <string name="debug_input_category" msgid="1811069939601180246">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎Input‎‏‎‎‏‎"</string>
+    <string name="debug_drawing_category" msgid="6755716469267367852">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎Drawing‎‏‎‎‏‎"</string>
+    <string name="debug_hw_drawing_category" msgid="6220174216912308658">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‎Hardware accelerated rendering‎‏‎‎‏‎"</string>
+    <string name="media_category" msgid="4388305075496848353">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎Media‎‏‎‎‏‎"</string>
+    <string name="debug_monitoring_category" msgid="7640508148375798343">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎Monitoring‎‏‎‎‏‎"</string>
+    <string name="strict_mode" msgid="1938795874357830695">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎Strict mode enabled‎‏‎‎‏‎"</string>
+    <string name="strict_mode_summary" msgid="142834318897332338">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎Flash screen when apps do long operations on main thread‎‏‎‎‏‎"</string>
+    <string name="pointer_location" msgid="6084434787496938001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎Pointer location‎‏‎‎‏‎"</string>
+    <string name="pointer_location_summary" msgid="840819275172753713">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‏‏‎‎‎‏‎Screen overlay showing current touch data‎‏‎‎‏‎"</string>
+    <string name="show_touches" msgid="2642976305235070316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‎‎Show taps‎‏‎‎‏‎"</string>
+    <string name="show_touches_summary" msgid="6101183132903926324">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎Show visual feedback for taps‎‏‎‎‏‎"</string>
+    <string name="show_screen_updates" msgid="5470814345876056420">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎Show surface updates‎‏‎‎‏‎"</string>
+    <string name="show_screen_updates_summary" msgid="2569622766672785529">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎Flash entire window surfaces when they update‎‏‎‎‏‎"</string>
+    <string name="show_hw_screen_updates" msgid="5036904558145941590">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎Show GPU view updates‎‏‎‎‏‎"</string>
+    <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎Flash views inside windows when drawn with the GPU‎‏‎‎‏‎"</string>
+    <string name="show_hw_layers_updates" msgid="5645728765605699821">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎Show hardware layers updates‎‏‎‎‏‎"</string>
+    <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎Flash hardware layers green when they update‎‏‎‎‏‎"</string>
+    <string name="debug_hw_overdraw" msgid="2968692419951565417">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎Debug GPU overdraw‎‏‎‎‏‎"</string>
+    <string name="debug_hw_renderer" msgid="7568529019431785816">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‎Set GPU Renderer‎‏‎‎‏‎"</string>
+    <string name="disable_overlays" msgid="2074488440505934665">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‎Disable HW overlays‎‏‎‎‏‎"</string>
+    <string name="disable_overlays_summary" msgid="3578941133710758592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‎‎‎Always use GPU for screen compositing‎‏‎‎‏‎"</string>
+    <string name="simulate_color_space" msgid="6745847141353345872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎Simulate color space‎‏‎‎‏‎"</string>
+    <string name="enable_opengl_traces_title" msgid="6790444011053219871">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‏‎Enable OpenGL traces‎‏‎‎‏‎"</string>
+    <string name="usb_audio_disable_routing" msgid="8114498436003102671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎Disable USB audio routing‎‏‎‎‏‎"</string>
+    <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎Disable automatic routing to USB audio peripherals‎‏‎‎‏‎"</string>
+    <string name="debug_layout" msgid="5981361776594526155">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎Show layout bounds‎‏‎‎‏‎"</string>
+    <string name="debug_layout_summary" msgid="2001775315258637682">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎Show clip bounds, margins, etc.‎‏‎‎‏‎"</string>
+    <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‏‎‎Force RTL layout direction‎‏‎‎‏‎"</string>
+    <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎Force screen layout direction to RTL for all locales‎‏‎‎‏‎"</string>
+    <string name="force_hw_ui" msgid="6426383462520888732">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎Force GPU rendering‎‏‎‎‏‎"</string>
+    <string name="force_hw_ui_summary" msgid="5535991166074861515">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎Force use of GPU for 2d drawing‎‏‎‎‏‎"</string>
+    <string name="force_msaa" msgid="7920323238677284387">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‎‏‎‎‎‏‏‎Force 4x MSAA‎‏‎‎‏‎"</string>
+    <string name="force_msaa_summary" msgid="9123553203895817537">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎Enable 4x MSAA in OpenGL ES 2.0 apps‎‏‎‎‏‎"</string>
+    <string name="show_non_rect_clip" msgid="505954950474595172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎Debug non-rectangular clip operations‎‏‎‎‏‎"</string>
+    <string name="track_frame_time" msgid="6146354853663863443">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‏‎Profile GPU rendering‎‏‎‎‏‎"</string>
+    <string name="window_animation_scale_title" msgid="6162587588166114700">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎‎Window animation scale‎‏‎‎‏‎"</string>
+    <string name="transition_animation_scale_title" msgid="387527540523595875">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎Transition animation scale‎‏‎‎‏‎"</string>
+    <string name="animator_duration_scale_title" msgid="3406722410819934083">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎Animator duration scale‎‏‎‎‏‎"</string>
+    <string name="overlay_display_devices_title" msgid="5364176287998398539">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‎Simulate secondary displays‎‏‎‎‏‎"</string>
+    <string name="debug_applications_category" msgid="4206913653849771549">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‎Apps‎‏‎‎‏‎"</string>
+    <string name="immediately_destroy_activities" msgid="1579659389568133959">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎Don’t keep activities‎‏‎‎‏‎"</string>
+    <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‎Destroy every activity as soon as the user leaves it‎‏‎‎‏‎"</string>
+    <string name="app_process_limit_title" msgid="4280600650253107163">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎Background process limit‎‏‎‎‏‎"</string>
+    <string name="show_all_anrs" msgid="28462979638729082">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‏‏‏‎‏‎‎Show all ANRs‎‏‎‎‏‎"</string>
+    <string name="show_all_anrs_summary" msgid="641908614413544127">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‎‎‏‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‏‎Show App Not Responding dialog for background apps‎‏‎‎‏‎"</string>
+    <string name="show_notification_channel_warnings" msgid="1399948193466922683">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎Show notification channel warnings‎‏‎‎‏‎"</string>
+    <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎Displays on-screen warning when an app posts a notification without a valid channel‎‏‎‎‏‎"</string>
+    <string name="force_allow_on_external" msgid="3215759785081916381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎Force allow apps on external‎‏‎‎‏‎"</string>
+    <string name="force_allow_on_external_summary" msgid="3640752408258034689">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎Makes any app eligible to be written to external storage, regardless of manifest values‎‏‎‎‏‎"</string>
+    <string name="force_resizable_activities" msgid="8615764378147824985">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‎‏‏‎‎‏‎Force activities to be resizable‎‏‎‎‏‎"</string>
+    <string name="force_resizable_activities_summary" msgid="6667493494706124459">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎Make all activities resizable for multi-window, regardless of manifest values.‎‏‎‎‏‎"</string>
+    <string name="enable_freeform_support" msgid="1461893351278940416">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‎‎‎‎‎‎Enable freeform windows‎‏‎‎‏‎"</string>
+    <string name="enable_freeform_support_summary" msgid="8247310463288834487">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎Enable support for experimental freeform windows.‎‏‎‎‏‎"</string>
+    <string name="local_backup_password_title" msgid="3860471654439418822">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎Desktop backup password‎‏‎‎‏‎"</string>
+    <string name="local_backup_password_summary_none" msgid="6951095485537767956">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎Desktop full backups aren’t currently protected‎‏‎‎‏‎"</string>
+    <string name="local_backup_password_summary_change" msgid="5376206246809190364">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎Tap to change or remove the password for desktop full backups‎‏‎‎‏‎"</string>
+    <string name="local_backup_password_toast_success" msgid="582016086228434290">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎New backup password set‎‏‎‎‏‎"</string>
+    <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‎New password and confirmation don’t match‎‏‎‎‏‎"</string>
+    <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎Failure setting backup password‎‏‎‎‏‎"</string>
+  <string-array name="color_mode_names">
+    <item msgid="2425514299220523812">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎Vibrant (default)‎‏‎‎‏‎"</item>
+    <item msgid="8446070607501413455">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‎Natural‎‏‎‎‏‎"</item>
+    <item msgid="6553408765810699025">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎Standard‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="color_mode_descriptions">
+    <item msgid="4979629397075120893">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎Enhanced colors‎‏‎‎‏‎"</item>
+    <item msgid="8280754435979370728">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎Natural colors as seen by the eye‎‏‎‎‏‎"</item>
+    <item msgid="5363960654009010371">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎Colors optimized for digital content‎‏‎‎‏‎"</item>
+  </string-array>
+    <string name="inactive_apps_title" msgid="1317817863508274533">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‎‏‏‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‏‎Inactive apps‎‏‎‎‏‎"</string>
+    <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎Inactive. Tap to toggle.‎‏‎‎‏‎"</string>
+    <string name="inactive_app_active_summary" msgid="4174921824958516106">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎Active. Tap to toggle.‎‏‎‎‏‎"</string>
+    <string name="runningservices_settings_title" msgid="8097287939865165213">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎Running services‎‏‎‎‏‎"</string>
+    <string name="runningservices_settings_summary" msgid="854608995821032748">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎View and control currently running services‎‏‎‎‏‎"</string>
+    <string name="select_webview_provider_title" msgid="4628592979751918907">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎WebView implementation‎‏‎‎‏‎"</string>
+    <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎Set WebView implementation‎‏‎‎‏‎"</string>
+    <string name="select_webview_provider_toast_text" msgid="5466970498308266359">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‏‏‏‎This choice is no longer valid. Try again.‎‏‎‎‏‎"</string>
+    <string name="convert_to_file_encryption" msgid="3060156730651061223">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‏‏‎‎‏‏‏‎Convert to file encryption‎‏‎‎‏‎"</string>
+    <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎Convert…‎‏‎‎‏‎"</string>
+    <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‏‎Already file encrypted‎‏‎‎‏‎"</string>
+    <string name="title_convert_fbe" msgid="1263622876196444453">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎Converting to file based encryption‎‏‎‎‏‎"</string>
+    <string name="convert_to_fbe_warning" msgid="6139067817148865527">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎Convert data partition to file based encryption.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ !!Warning!! This will erase all your data.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ This feature is alpha, and may not work correctly.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Press \'Wipe and convert…\' to continue.‎‏‎‎‏‎"</string>
+    <string name="button_convert_fbe" msgid="5152671181309826405">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎Wipe and convert…‎‏‎‎‏‎"</string>
+    <string name="picture_color_mode" msgid="4560755008730283695">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎Picture color mode‎‏‎‎‏‎"</string>
+    <string name="picture_color_mode_desc" msgid="1141891467675548590">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎Use sRGB‎‏‎‎‏‎"</string>
+    <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎Disabled‎‏‎‎‏‎"</string>
+    <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‎‎‎‏‎Monochromacy‎‏‎‎‏‎"</string>
+    <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎Deuteranomaly (red-green)‎‏‎‎‏‎"</string>
+    <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‏‎Protanomaly (red-green)‎‏‎‎‏‎"</string>
+    <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎Tritanomaly (blue-yellow)‎‏‎‎‏‎"</string>
+    <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎Color correction‎‏‎‎‏‎"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‎This feature is experimental and may affect performance.‎‏‎‎‏‎"</string>
+    <string name="daltonizer_type_overridden" msgid="3116947244410245916">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎Overridden by ‎‏‎‎‏‏‎<xliff:g id="TITLE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="power_remaining_duration_only" msgid="845431008899029842">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‎About ‎‏‎‎‏‏‎<xliff:g id="TIME">^1</xliff:g>‎‏‎‎‏‏‏‎ left‎‏‎‎‏‎"</string>
+    <string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‏‏‎‎About ‎‏‎‎‏‏‎<xliff:g id="TIME">^1</xliff:g>‎‏‎‎‏‏‏‎ left based on your usage‎‏‎‎‏‎"</string>
+    <string name="power_remaining_charging_duration_only" msgid="1421102457410268886">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="TIME">^1</xliff:g>‎‏‎‎‏‏‏‎ left until fully charged‎‏‎‎‏‎"</string>
+    <string name="power_remaining_duration_only_short" msgid="5329694252258605547">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="TIME">^1</xliff:g>‎‏‎‎‏‏‏‎ left‎‏‎‎‏‎"</string>
+    <string name="power_remaining_duration_only_short_enhanced" msgid="7450425624026394823">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="TIME">^1</xliff:g>‎‏‎‎‏‏‏‎ left based on your usage‎‏‎‎‏‎"</string>
+    <string name="power_discharging_duration" msgid="2843747179907396142">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="LEVEL">^1</xliff:g>‎‏‎‎‏‏‏‎ - about ‎‏‎‎‏‏‎<xliff:g id="TIME">^2</xliff:g>‎‏‎‎‏‏‏‎ left‎‏‎‎‏‎"</string>
+    <string name="power_discharging_duration_enhanced" msgid="4401782117770255046">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="LEVEL">^1</xliff:g>‎‏‎‎‏‏‏‎ - about ‎‏‎‎‏‏‎<xliff:g id="TIME">^2</xliff:g>‎‏‎‎‏‏‏‎ left based on your usage‎‏‎‎‏‎"</string>
+    <string name="power_discharging_duration_short" msgid="4192244429001842403">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="LEVEL">^1</xliff:g>‎‏‎‎‏‏‏‎ - ‎‏‎‎‏‏‎<xliff:g id="TIME">^2</xliff:g>‎‏‎‎‏‏‏‎ left‎‏‎‎‏‎"</string>
+    <string name="power_charging" msgid="1779532561355864267">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎ - ‎‏‎‎‏‏‎<xliff:g id="STATE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="power_charging_duration" msgid="4676999980973411875">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="LEVEL">^1</xliff:g>‎‏‎‎‏‏‏‎ - ‎‏‎‎‏‏‎<xliff:g id="TIME">^2</xliff:g>‎‏‎‎‏‏‏‎ until fully charged‎‏‎‎‏‎"</string>
+    <string name="battery_info_status_unknown" msgid="196130600938058547">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎Unknown‎‏‎‎‏‎"</string>
+    <string name="battery_info_status_charging" msgid="1705179948350365604">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎Charging‎‏‎‎‏‎"</string>
+    <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎charging‎‏‎‎‏‎"</string>
+    <string name="battery_info_status_discharging" msgid="310932812698268588">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎Not charging‎‏‎‎‏‎"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‏‎Plugged in, can\'t charge right now‎‏‎‎‏‎"</string>
+    <string name="battery_info_status_full" msgid="2824614753861462808">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎Full‎‏‎‎‏‎"</string>
+    <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‎Controlled by admin‎‏‎‎‏‎"</string>
+    <string name="enabled_by_admin" msgid="5302986023578399263">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‏‎Enabled by admin‎‏‎‎‏‎"</string>
+    <string name="disabled_by_admin" msgid="8505398946020816620">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‎‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‎Disabled by admin‎‏‎‎‏‎"</string>
+    <string name="disabled" msgid="9206776641295849915">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎Disabled‎‏‎‎‏‎"</string>
+    <string name="external_source_trusted" msgid="2707996266575928037">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‏‎‏‎Allowed‎‏‎‎‏‎"</string>
+    <string name="external_source_untrusted" msgid="2677442511837596726">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎Not allowed‎‏‎‎‏‎"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‎‏‎Install unknown apps‎‏‎‎‏‎"</string>
+    <string name="home" msgid="3256884684164448244">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎Settings Home‎‏‎‎‏‎"</string>
+  <string-array name="battery_labels">
+    <item msgid="8494684293649631252">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎0%‎‏‎‎‏‎"</item>
+    <item msgid="8934126114226089439">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎50%‎‏‎‎‏‎"</item>
+    <item msgid="1286113608943010849">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎100%‎‏‎‎‏‎"</item>
+  </string-array>
+    <string name="charge_length_format" msgid="8978516217024434156">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎ ago‎‏‎‎‏‎"</string>
+    <string name="remaining_length_format" msgid="7886337596669190587">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left‎‏‎‎‏‎"</string>
+    <string name="screen_zoom_summary_small" msgid="5867245310241621570">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎Small‎‏‎‎‏‎"</string>
+    <string name="screen_zoom_summary_default" msgid="2247006805614056507">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎‏‏‎Default‎‏‎‎‏‎"</string>
+    <string name="screen_zoom_summary_large" msgid="4835294730065424084">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎Large‎‏‎‎‏‎"</string>
+    <string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎Larger‎‏‎‎‏‎"</string>
+    <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎‎‎‏‏‎Largest‎‏‎‎‏‎"</string>
+    <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎Custom (‎‏‎‎‏‏‎<xliff:g id="DENSITYDPI">%d</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+    <string name="help_feedback_label" msgid="6815040660801785649">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‎Help &amp; feedback‎‏‎‎‏‎"</string>
+    <string name="content_description_menu_button" msgid="8182594799812351266">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‎Menu‎‏‎‎‏‎"</string>
+    <string name="retail_demo_reset_message" msgid="118771671364131297">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎Enter password to perform factory reset in demo mode‎‏‎‎‏‎"</string>
+    <string name="retail_demo_reset_next" msgid="8356731459226304963">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎Next‎‏‎‎‏‎"</string>
+    <string name="retail_demo_reset_title" msgid="696589204029930100">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎Password required‎‏‎‎‏‎"</string>
+    <string name="active_input_method_subtypes" msgid="3596398805424733238">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎Active input methods‎‏‎‎‏‎"</string>
+    <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎Use system languages‎‏‎‎‏‎"</string>
+    <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‎‎Failed to open settings for ‎‏‎‎‏‏‎<xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="ime_security_warning" msgid="4135828934735934248">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‎‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎This input method may be able to collect all the text you type, including personal data like passwords and credit card numbers. It comes from the app ‎‏‎‎‏‏‎<xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Use this input method?‎‏‎‎‏‎"</string>
+    <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‎Note: After a reboot, this app can\'t start until you unlock your phone‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/SettingsLib/res/values-es-rUS/arrays.xml b/packages/SettingsLib/res/values-es-rUS/arrays.xml
index 512591f..16f725a 100644
--- a/packages/SettingsLib/res/values-es-rUS/arrays.xml
+++ b/packages/SettingsLib/res/values-es-rUS/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (predeterminado)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Usar selección del sistema (predeterminado)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Habilitar códecs opcionales"</item>
+    <item msgid="3304843301758635896">"Inhabilitar códecs opcionales"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Usar selección del sistema (predeterminado)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Habilitar códecs opcionales"</item>
+    <item msgid="741805482892725657">"Inhabilitar códecs opcionales"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Usar selección del sistema (predeterminado)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 7e21d6c..0014542 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Conexión a través de %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible a través de %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectado a Wi-Fi, sin conexión a Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"El punto de acceso está completo temporalmente"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Conexión a través de %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Disponible a través de %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Muy lenta"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Aceptar"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Media"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Rápida"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Muy rápida"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Desconectado"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Desconectando…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Conectando…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Dos barras de Wi-Fi"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Tres barras de Wi-Fi"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Señal de Wi-Fi excelente"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Red abierta"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Red segura"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"SO Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplicaciones eliminadas"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplicaciones y usuarios eliminados"</string>
@@ -113,7 +119,7 @@
     <string name="user_guest" msgid="8475274842845401871">"Invitado"</string>
     <string name="unknown" msgid="1592123443519355854">"Desconocido"</string>
     <string name="running_process_item_user_label" msgid="3129887865552025943">"Usuario: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
-    <string name="launch_defaults_some" msgid="313159469856372621">"Hay algunas configuraciones predeterminadas establecidas."</string>
+    <string name="launch_defaults_some" msgid="313159469856372621">"Configuraciones predeterminadas establecidas"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"No hay configuraciones predeterminadas establecidas."</string>
     <string name="tts_settings" msgid="8186971894801348327">"Configuración de texto a voz"</string>
     <string name="tts_settings_title" msgid="1237820681016639683">"Salida de texto a voz"</string>
@@ -157,7 +163,7 @@
     <string name="choose_profile" msgid="6921016979430278661">"Elegir perfil"</string>
     <string name="category_personal" msgid="1299663247844969448">"Personal"</string>
     <string name="category_work" msgid="8699184680584175622">"Trabajo"</string>
-    <string name="development_settings_title" msgid="215179176067683667">"Opciones del programador"</string>
+    <string name="development_settings_title" msgid="215179176067683667">"Opciones para programadores"</string>
     <string name="development_settings_enable" msgid="542530994778109538">"Activar opciones para programador"</string>
     <string name="development_settings_summary" msgid="1815795401632854041">"Establecer opciones para desarrollar aplicaciones"</string>
     <string name="development_settings_not_available" msgid="4308569041701535607">"Las opciones de programador no están disponibles para este usuario."</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir siempre búsquedas de Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Datos móviles siempre activados"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleración de hardware de conexión mediante dispositivo portátil"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sin nombre"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Inhabilitar volumen absoluto"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Habilitar sonido dentro de banda"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versión de AVRCP del Bluetooth"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Estos parámetros de configuración están destinados únicamente a los programadores. Pueden hacer que el dispositivo o sus aplicaciones no funcionen correctamente."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar aplicaciones por USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Comprobar que las aplicaciones instaladas mediante ADB/ADT no ocasionen daños"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Se mostrarán los dispositivos Bluetooth sin nombre (solo direcciones MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Inhabilita la función de volumen absoluto de Bluetooth si se producen problemas de volumen con dispositivos remotos (por ejemplo, volumen demasiado alto o falta de control)."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Permite que los tonos del teléfono suenen en auriculares Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - Tiempo restante: <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g>: <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> (<xliff:g id="TIME">^2</xliff:g> para completar la carga)"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Desconocido"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Cargando"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"cargando"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"No se está cargando."</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"No se realiza la carga"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Conectado. No se puede cargar en este momento"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Cargado"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlada por el administrador"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"El administrador habilitó esta opción"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizado (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Ayuda y comentarios"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menú"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Ingresa contraseña y restablece en demo"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Siguiente"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Contraseña obligatoria"</string>
diff --git a/packages/SettingsLib/res/values-es/arrays.xml b/packages/SettingsLib/res/values-es/arrays.xml
index 55ff28b..a752db9 100644
--- a/packages/SettingsLib/res/values-es/arrays.xml
+++ b/packages/SettingsLib/res/values-es/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Predeterminada)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Usar preferencia del sistema (predeter.)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Habilitar códecs opcionales"</item>
+    <item msgid="3304843301758635896">"Inhabilitar códecs opcionales"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Usar preferencia del sistema (predeter.)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Habilitar códecs opcionales"</item>
+    <item msgid="741805482892725657">"Inhabilitar códecs opcionales"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Usar preferencia del sistema (predeter.)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 4a6f12d..3842b3f 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible a través de %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conexión sin Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punto de acceso temporalmente lleno"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Conectado a través de %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Disponible a través de %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Muy lenta"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
-    <string name="speed_label_okay" msgid="2331665440671174858">"Aceptar"</string>
+    <string name="speed_label_okay" msgid="2331665440671174858">"Aceptable"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Media"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Rápida"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Muy rápida"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Desconectado"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Desconectando…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Estableciendo conexión…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Dos barras de Wi-Fi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Tres barras de Wi-Fi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Señal de Wi-Fi al máximo."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Red abierta"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Red segura"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"SO Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplicaciones eliminadas"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Usuarios y aplicaciones eliminados"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir siempre búsquedas de Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Datos móviles siempre activos"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleración por hardware para conexión compartida"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sin nombre"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Inhabilitar volumen absoluto"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Habilitar tono de llamada por Bluetooth"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versión AVRCP del Bluetooth"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Estos ajustes están destinados únicamente a los desarrolladores. Pueden provocar que el dispositivo o las aplicaciones no funcionen correctamente."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar aplicaciones por USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Comprueba las aplicaciones instaladas mediante ADB/ADT para detectar comportamientos dañinos"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Se mostrarán dispositivos Bluetooth sin nombre (solo direcciones MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Inhabilita la función de volumen absoluto de Bluetooth si se producen problemas de volumen con dispositivos remotos (por ejemplo, volumen demasiado alto o falta de control)."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Permite que los tonos de llamada del teléfono se reproduzcan en auriculares Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - Tiempo restante: <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> para completar la carga"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Desconocido"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Cargando"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"cargando"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"No se está cargando"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"No se está cargando"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Se ha conectado, pero no se puede cargar en este momento"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Completa"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlada por el administrador"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Habilitada por el administrador"</string>
@@ -375,11 +382,10 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizado (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Ayuda y sugerencias"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menú"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
-    <string name="retail_demo_reset_message" msgid="118771671364131297">"Escribe una contraseña para restablecer datos de fábrica en modo demostración"</string>
+    <string name="retail_demo_reset_message" msgid="118771671364131297">"Escribe una contraseña para restablecer estado de fábrica en modo demostración"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Siguiente"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Contraseña obligatoria"</string>
-    <string name="active_input_method_subtypes" msgid="3596398805424733238">"Métodos de introducción activos"</string>
+    <string name="active_input_method_subtypes" msgid="3596398805424733238">"Métodos de introducción de texto activos"</string>
     <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Usar idiomas del sistema"</string>
     <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"Error al abrir los ajustes de <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>"</string>
     <string name="ime_security_warning" msgid="4135828934735934248">"Este método de entrada puede registrar todo lo que escribas, incluidos datos personales, como las contraseñas y los números de las tarjetas de crédito. Procede de la aplicación <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. ¿Quieres usar este método de entrada?"</string>
diff --git a/packages/SettingsLib/res/values-et/arrays.xml b/packages/SettingsLib/res/values-et/arrays.xml
index b4cc90f..db796f1 100644
--- a/packages/SettingsLib/res/values-et/arrays.xml
+++ b/packages/SettingsLib/res/values-et/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (vaikeseade)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Süsteemi valiku kasutamine (vaikeseade)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Heli: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Heli: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Lubatakse valikulised kodekid"</item>
+    <item msgid="3304843301758635896">"Keelatakse valikulised kodekid"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Süsteemi valiku kasutamine (vaikeseade)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Heli: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Heli: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Lubatakse valikulised kodekid"</item>
+    <item msgid="741805482892725657">"Keelatakse valikulised kodekid"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Süsteemi valiku kasutamine (vaikeseade)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index f3748f8..48b7719 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Ühendatud üksuse %1$s kaudu"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Saadaval üksuse %1$s kaudu"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Ühendatud, Interneti-ühendus puudub"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pääsupunkt on ajutiselt täis"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Ühendatud operaatori %1$s kaudu"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Saadaval operaatori %1$s kaudu"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Väga aeglane"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Aeglane"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Hea"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Keskmine"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Kiire"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Väga kiire"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Ühendus katkestatud"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Ühenduse katkestamine ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Ühendamine ..."</string>
@@ -101,14 +105,16 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"WiFi: kaks pulka."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"WiFi: kolm pulka."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"WiFi-signaal on tugev."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Avatud võrk"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Turvaline võrk"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Eemaldatud rakendused"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Eemaldatud rakendused ja kasutajad"</string>
     <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB jagamine"</string>
-    <string name="tether_settings_title_wifi" msgid="3277144155960302049">"Kantav tööpunkt"</string>
+    <string name="tether_settings_title_wifi" msgid="3277144155960302049">"Mobiilne kuumkoht"</string>
     <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Jagamine Bluetoothiga"</string>
     <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Jagamine"</string>
-    <string name="tether_settings_title_all" msgid="8356136101061143841">"Jagam. ja kant. kuumkoht"</string>
+    <string name="tether_settings_title_all" msgid="8356136101061143841">"Jagamine / kantav kuumkoht"</string>
     <string name="managed_user_title" msgid="8109605045406748842">"Kõik töörakendused"</string>
     <string name="user_guest" msgid="8475274842845401871">"Külaline"</string>
     <string name="unknown" msgid="1592123443519355854">"Tundmatu"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Luba alati WiFi-rändluse skannimine"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobiilne andmeside on alati aktiivne"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Jagamise riistvaraline kiirendus"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Kuva Bluetoothi seadmed ilma nimedeta"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Keela absoluutne helitugevus"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Luba ribasisene helisemine"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetoothi AVRCP versioon"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Need seaded on mõeldud ainult arendajatele. Need võivad põhjustada seadme ja seadmes olevate rakenduste rikkeid või valesti toimimist."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Kinnita rakendus USB kaudu"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kontrolli, kas ADB/ADT-ga installitud rakendused on ohtlikud."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Kuvatakse ilma nimedeta (ainult MAC-aadressidega) Bluetoothi seadmed"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Keelatakse Bluetoothi absoluutse helitugevuse funktsioon, kui kaugseadmetega on helitugevuse probleeme (nt liiga vali heli või juhitavuse puudumine)."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Lubab telefonis olevaid helinaid esitada Bluetoothi peakomplektides"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Kohalik terminal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> on jäänud"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> täislaadimiseni"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Tundmatu"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Laadimine"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"laadimine"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Ei lae"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ei lae"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Vooluvõrgus, praegu ei saa laadida"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Täis"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Juhib administraator"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Administraatori lubatud"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Kohandatud (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Abi ja tagasiside"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menüü"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Sisestage parool, et demorežiimis tehaseseadetele lähtestada"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Järgmine"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Parool on kohustuslik"</string>
diff --git a/packages/SettingsLib/res/values-eu/arrays.xml b/packages/SettingsLib/res/values-eu/arrays.xml
index 13912c1..d4a5e6e 100644
--- a/packages/SettingsLib/res/values-eu/arrays.xml
+++ b/packages/SettingsLib/res/values-eu/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (lehenetsia)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Erabili sistema-hautapena (lehenetsia)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audioa"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audioa"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Gaitu aukerako kodekak"</item>
+    <item msgid="3304843301758635896">"Desgaitu aukerako kodekak"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Erabili sistema-hautapena (lehenetsia)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audioa"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audioa"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Gaitu aukerako kodekak"</item>
+    <item msgid="741805482892725657">"Desgaitu aukerako kodekak"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Erabili sistema-hautapena (lehenetsia)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index 9fd8ad8..75598fb 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s bidez konektatuta"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s bidez erabilgarri"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Konektatuta, ez dago Interneteko konexiorik"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Sarbide-puntua beteta dago aldi baterako"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s bidez konektatuta"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s bidez erabilgarri"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Oso motela"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Motela"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Ados"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Tartekoa"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Bizkorra"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Oso bizkorra"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Deskonektatuta"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Deskonektatzen…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Konektatzen…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi sarearen bi barra."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi sarearen hiru barra."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi sarearen seinalea osoa."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Sare irekia"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sare segurua"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android sistema eragilea"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Kendutako aplikazioak"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Kendutako aplikazioak eta erabiltzaileak"</string>
@@ -185,8 +191,9 @@
     <string name="wifi_verbose_logging" msgid="4203729756047242344">"Gaitu Wi-Fi sareetan saioa hasteko modu xehatua"</string>
     <string name="wifi_aggressive_handover" msgid="5309131983693661320">"Behartu Wi-Fi konexiotik datuenera aldatzera"</string>
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Onartu beti ibiltaritzan Wi-Fi sareak bilatzea"</string>
-    <string name="mobile_data_always_on" msgid="8774857027458200434">"Datu mugikorrak beti aktibo"</string>
+    <string name="mobile_data_always_on" msgid="8774857027458200434">"Datu-konexioa beti aktibo"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Konexioa partekatzeko hardwarearen azelerazioa"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Erakutsi Bluetooth gailuak izenik gabe"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desgaitu bolumen absolutua"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Gaitu tonuak audio-kanal berean erreproduzitzeko aukera"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP bertsioa"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ezarpen hauek garapen-xedeetarako pentsatu dira soilik. Baliteke ezarpenen eraginez gailua matxuratzea edo funtzionamendu okerra izatea."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Egiaztatu USBko aplikazioak."</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Egiaztatu ADB/ADT bidez instalatutako aplikazioak portaera kaltegarriak antzemateko."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth gailuak izenik gabe (MAC helbideak soilik) erakutsiko dira"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Desgaitu egiten du Bluetooth bidezko bolumen absolutuaren eginbidea urruneko gailuetan arazoak hautematen badira; esaterako, bolumena ozenegia bada edo ezin bada kontrolatu."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Onartu telefonoko tonuak Bluetooth entzungailuetan erreproduzitzeko aukera"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Tokiko terminala"</string>
@@ -332,7 +340,7 @@
     <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Daltonismoa (gorri-berdeak)"</string>
     <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanopia (gorri-berdeak)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanopia (urdin-horia)"</string>
-    <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Kolore-zuzenketa"</string>
+    <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Koloreen zuzenketa"</string>
     <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Eginbidea esperimentala da eta eragina izan dezake funtzionamenduan."</string>
     <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> hobespena gainjarri zaio"</string>
     <string name="power_remaining_duration_only" msgid="845431008899029842">"<xliff:g id="TIME">^1</xliff:g> inguru gelditzen dira"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> guztiz kargatu arte"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> guztiz kargatu arte"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Ezezaguna"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Kargatzen"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"kargatzen"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Ez da kargatzen ari"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ez da kargatzen ari"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Konektatuta dago. Ezin da kargatu une honetan."</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Beteta"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Administratzaileak kontrolatzen du"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Administratzaileak gaitu du"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Pertsonalizatua (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Laguntza eta iritziak"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menua"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Idatzi pasahitza jatorrizko ezarpenak demo moduan berrezartzeko"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Hurrengoa"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Pasahitza behar da"</string>
diff --git a/packages/SettingsLib/res/values-fa/arrays.xml b/packages/SettingsLib/res/values-fa/arrays.xml
index 711a2e4..2436e79 100644
--- a/packages/SettingsLib/res/values-fa/arrays.xml
+++ b/packages/SettingsLib/res/values-fa/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"‏AVRCP نسخه ۱.۴ (پیش‌فرض)"</item>
-    <item msgid="2089555299377409443">"‏AVRCP نسخه ۱.۵"</item>
-    <item msgid="2895327394279434278">"‏AVRCP نسخه ۱.۶"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"‏avrcp نسخه ۱۴"</item>
-    <item msgid="1913619118958233129">"‏avrcp نسخه ۱۵"</item>
-    <item msgid="7142710449249088270">"‏avrcp نسخه ۱۶"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"استفاده از انتخاب سیستم (پیش‌فرض)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"فعال کردن کدک‌های اختیاری"</item>
+    <item msgid="3304843301758635896">"غیرفعال کردن کدک‌های اختیاری"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"استفاده از انتخاب سیستم (پیش‌فرض)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"فعال کردن کدک‌های اختیاری"</item>
+    <item msgid="741805482892725657">"غیرفعال کردن کدک‌های اختیاری"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"استفاده از انتخاب سیستم (پیش‌فرض)"</item>
     <item msgid="8895532488906185219">"۴۴٫۱ کیلوهرتز"</item>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index 0430592..2500d5d 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"‏متصل از طریق %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"‏در دسترس از طریق %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"متصل، بدون اینترنت"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ظرفیت نقطه دسترسی موقتاً تکمیل شده است"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"‏متصل ازطریق %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"‏در دسترس ازطریق %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"بسیار آهسته"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"آهسته"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"تأیید"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"متوسط"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"سریع"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"خیلی سریع"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"اتصال قطع شد"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"در حال قطع اتصال..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"در حال اتصال…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"‏دو نوار برای Wi‑Fi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"‏سه نوار برای Wi‑Fi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"‏قدرت سیگنال Wi‑Fi کامل است."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"شبکه باز"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"شبکه ایمن"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"‏سیستم عامل Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"برنامه‌های حذف شده"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"برنامه‌ها و کاربران حذف شده"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"‏اسکن‌های رومینگ Wi‑Fi همیشه مجاز است"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"داده تلفن همراه همیشه فعال باشد"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"شتاب سخت‌افزاری اتصال به اینترنت با تلفن همراه"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"نمایش دستگاه‌های بلوتوث بدون نام"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"غیرفعال کردن میزان صدای مطلق"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"فعال کردن زنگ زدن درون باندی"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"‏نسخه AVRCP بلوتوث"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"این تنظیمات فقط برای برنامه‌نویسی در نظر گرفته شده است. ممکن است استفاده از این تنظیمات موجب خرابی یا عملکرد نادرست دستگاه یا برنامه‌های شما شود."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"‏تأیید برنامه‌های نصب شده از طریق USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"‏برنامه‌های نصب شده از طریق ADB/ADT را ازنظر رفتار مخاطره‌آمیز بررسی کنید."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"‏دستگاه‌های بلوتوث بدون نام (فقط نشانی‌های MAC) نشان داده خواهند شد"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"در صورت وجود مشکل میزان صدا با دستگاه‌های راه دور مثل میزان صدای بلند ناخوشایند یا عدم کنترل صدا، قابلیت میزان صدای کامل بلوتوث را غیرفعال کنید."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"اجازه می‌دهد آهنگ‌های زنگ تلفن در هدست‌های بلوتوث پخش شود"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"ترمینال محلی"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> باقی مانده"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - ‏<xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> مانده تا شارژ کامل"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"ناشناس"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"در حال شارژ شدن"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"درحال شارژ شدن"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"شارژ نمی‌شود"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"شارژ نمی‌شود"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"به برق وصل شده‌ است، درحال‌حاضر شارژ نمی‌شود"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"پر"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"توسط سرپرست سیستم کنترل می‌شود"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"فعال‌شده توسط سرپرست"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"سفارشی (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"راهنما و بازخورد"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"منو"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"برای انجام بازنشانی کارخانه‌ای در حالت نمایشی، گذرواژه را وارد کنید"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"بعدی"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"وارد کردن گذرواژه الزامی است"</string>
diff --git a/packages/SettingsLib/res/values-fi/arrays.xml b/packages/SettingsLib/res/values-fi/arrays.xml
index 2caae5b..9ed0c89 100644
--- a/packages/SettingsLib/res/values-fi/arrays.xml
+++ b/packages/SettingsLib/res/values-fi/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (oletus)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Käytä järjestelmän valintaa (oletus)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ‑ääni"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ‑ääni"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Ota valinnaiset koodekit käyttöön"</item>
+    <item msgid="3304843301758635896">"Poista valinnaiset koodekit käytöstä"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Käytä järjestelmän valintaa (oletus)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ‑ääni"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ‑ääni"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Ota valinnaiset koodekit käyttöön"</item>
+    <item msgid="741805482892725657">"Poista valinnaiset koodekit käytöstä"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Käytä järjestelmän valintaa (oletus)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index e3a92e6..414a4c7f 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Yhdistetty seuraavan kautta: %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Käytettävissä seuraavan kautta: %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Yhdistetty, ei internetyhteyttä."</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Yhteyspiste tilapäisesti täynnä"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Yhdistetty, verkko: %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Käytettävissä, verkko: %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Hyvin hidas"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Hidas"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Kohtuullinen"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Nopea"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Hyvin nopea"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Yhteys katkaistu"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Katkaistaan yhteyttä..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Yhdistetään…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi-signaali – kaksi palkkia"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi-signaali – kolme palkkia"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Vahva Wi-Fi-signaali"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Avoin verkko"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Suojattu verkko"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android-käyttöjärjestelmä"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Poistetut sovellukset"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Poistetut sovellukset ja käyttäjät"</string>
@@ -113,7 +119,7 @@
     <string name="user_guest" msgid="8475274842845401871">"Vieras"</string>
     <string name="unknown" msgid="1592123443519355854">"Tuntematon"</string>
     <string name="running_process_item_user_label" msgid="3129887865552025943">"Käyttäjä: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
-    <string name="launch_defaults_some" msgid="313159469856372621">"Joitakin oletuksia on asetettu."</string>
+    <string name="launch_defaults_some" msgid="313159469856372621">"Joitakin oletuksia on asetettu"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"Oletuksia ei asetettu."</string>
     <string name="tts_settings" msgid="8186971894801348327">"Tekstistä puheeksi -asetukset"</string>
     <string name="tts_settings_title" msgid="1237820681016639683">"Tekstistä puheeksi -toisto"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Salli Wi-Fi-verkkovierailuskannaus aina"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobiilidata aina käytössä"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Laitteistokiihdytyksen yhteyden jakaminen"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Näytä nimettömät Bluetooth-laitteet"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Poista yleinen äänenvoimakkuuden säätö käytöstä"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Ota käyttöön kaistalla soitto"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetoothin AVRCP-versio"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Nämä asetukset on tarkoitettu vain kehityskäyttöön, ja ne voivat aiheuttaa haittaa laitteellesi tai sen sovelluksille."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Tarkista USB:n kautta asennetut"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Tarkista ADB:n/ADT:n kautta asennetut sovellukset haitallisen toiminnan varalta."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Näytetään Bluetooth-laitteet, joilla ei ole nimiä (vain MAC-osoitteet)."</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Bluetoothin yleinen äänenvoimakkuuden säätö poistetaan käytöstä ongelmien välttämiseksi esimerkiksi silloin, kun laitteen äänenvoimakkuus on liian kova tai sitä ei voi säätää."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Salli puhelimen soittoäänten toistaminen Bluetooth-kuulokemikrofoneissa"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Paikallinen pääte"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> jäljellä"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> täyteen lataukseen"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Tuntematon"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Ladataan"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"ladataan"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Ei laturissa"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ei laturissa"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Kytketty virtalähteeseen, lataaminen ei onnistu"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Täynnä"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Järjestelmänvalvoja hallinnoi tätä asetusta."</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Järjestelmänvalvojan käyttöön ottama"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Muokattu (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Ohje ja palaute"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Valikko"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Palauta tehdasasetukset antamalla salasana"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Seuraava"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Salasana vaaditaan"</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/arrays.xml b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
index 996e3c2..be568ed 100644
--- a/packages/SettingsLib/res/values-fr-rCA/arrays.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (par défaut)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Utiliser sélect. du système (par défaut)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Activer les codecs optionnels"</item>
+    <item msgid="3304843301758635896">"Désactiver les codecs optionnels"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Utiliser sélect. du système (par défaut)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Activer les codecs optionnels"</item>
+    <item msgid="741805482892725657">"Désactiver les codecs optionnels"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Utiliser sélect. du système (par défaut)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index 99692a6..6306306 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté par %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Accessible par %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connecté, aucun accès à Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Le point d\'accès est temporairement plein"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Connecté par %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Accessible par %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Très lente"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lente"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Moyenne"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Élevée"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Très rapide"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> : <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Déconnecté"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Déconnexion…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Connexion en cours…"</string>
@@ -101,12 +105,14 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi : deux barres."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi : trois barres."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi : signal complet."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Réseau ouvert"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Réseau sécurisé"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Système d\'exploitation Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Applications supprimées"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Applications et utilisateurs supprimés"</string>
     <string name="tether_settings_title_usb" msgid="6688416425801386511">"Partage de connexion par USB"</string>
     <string name="tether_settings_title_wifi" msgid="3277144155960302049">"Point d\'accès Wi-Fi mobile"</string>
-    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Par Bluetooth"</string>
+    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Partage connexion Bluetooth"</string>
     <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Partage de connexion"</string>
     <string name="tether_settings_title_all" msgid="8356136101061143841">"Partage de connexion"</string>
     <string name="managed_user_title" msgid="8109605045406748842">"Toutes les applis profess."</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Toujours autoriser la détection de réseaux Wi-Fi en itinérance"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Données cellulaires toujours actives"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Accélération matérielle pour le partage de connexion"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Afficher les appareils Bluetooth sans nom"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Désactiver le volume absolu"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Activer la signalisation intra-bande"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Version du profil Bluetooth AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Vérifier les applis via USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Vérifiez que les applications installées par ADB/ADT ne présentent pas de comportement dangereux."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Les appareils Bluetooth sans nom (adresses MAC seulement) seront affichés"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Désactive la fonctionnalité de volume absolu par Bluetooth en cas de problème de volume sur les appareils à distance, par exemple si le volume est trop élevé ou s\'il ne peut pas être contrôlé."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Autoriser la lecture des sonneries du téléphone sur les écouteurs Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – Temps restant : <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> : <xliff:g id="TIME">^2</xliff:g> jusqu\'à la charge complète"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Inconnu"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Charge en cours…"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"en cours de charge"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"N\'est pas en charge"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"N\'est pas en charge"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"L\'appareil est branché, mais il ne peut pas être chargé pour le moment"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Pleine"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Contrôlé par l\'administrateur"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Activé par l\'administrateur"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personnalisée (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Aide et commentaires"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Entrez m. passe pour réinit. en mode démo"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Suivant"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Mot de passe obligatoire"</string>
diff --git a/packages/SettingsLib/res/values-fr/arrays.xml b/packages/SettingsLib/res/values-fr/arrays.xml
index 7d77062..995a1ff 100644
--- a/packages/SettingsLib/res/values-fr/arrays.xml
+++ b/packages/SettingsLib/res/values-fr/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (par défaut)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Utiliser sélection système (par défaut)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Activer les codecs facultatifs"</item>
+    <item msgid="3304843301758635896">"Désactiver les codecs facultatifs"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Utiliser sélection système (par défaut)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Activer les codecs facultatifs"</item>
+    <item msgid="741805482892725657">"Désactiver les codecs facultatifs"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Utiliser sélection système (par défaut)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 2593c16..f8cf107 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -34,18 +34,22 @@
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Hors de portée"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"Reconnexion automatique impossible"</string>
     <string name="wifi_no_internet" msgid="3880396223819116454">"Aucun accès à Internet"</string>
-    <string name="saved_network" msgid="4352716707126620811">"Enregistré par : <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="saved_network" msgid="4352716707126620811">"Enregistré lors de : <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_network_scorer" msgid="5713793306870815341">"Connecté automatiquement via %1$s"</string>
     <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Connecté automatiquement via un fournisseur d\'évaluation de l\'état du réseau"</string>
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté via %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible via %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connecté, aucun accès à Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Point d\'accès temporairement plein"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Connecté via %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Disponible via %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Très lente"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lente"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Correct"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Moyenne"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Élevée"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Très élevée"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Déconnecté"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Déconnexion…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Connexion…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Signal Wi-Fi moyen"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Signal Wi-Fi bon"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Signal Wi-Fi excellent"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Réseau ouvert"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Réseau sécurisé"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Plate-forme Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Applications supprimées"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Applications et utilisateurs supprimés"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Toujours autoriser la détection de réseaux Wi-Fi en itinérance"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Données mobiles toujours actives"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Accélération matérielle pour le partage de connexion"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Afficher les appareils Bluetooth sans nom"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Désactiver le volume absolu"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Activer la signalisation intra-bande"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Version Bluetooth AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Vérifier les applis via USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Vérifiez que les applications installées par ADB/ADT ne présentent pas de comportement dangereux."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Les appareils Bluetooth seront affichés sans nom (adresse MAC uniquement)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Désactive la fonctionnalité de volume absolu du Bluetooth en cas de problème de volume sur les appareils à distance, par exemple si le volume est trop élevé ou s\'il ne peut pas être contrôlé."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Autoriser la lecture des sonneries du téléphone sur les casques Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – Temps restant : <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> jusqu\'à la charge complète"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Inconnu"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Batterie en charge"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"chargement…"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Pas en charge"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Débranchée"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Appareil branché, mais impossible de le charger pour le moment"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"pleine"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Contrôlé par l\'administrateur"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Activé par l\'administrateur"</string>
@@ -370,12 +377,11 @@
     <string name="screen_zoom_summary_small" msgid="5867245310241621570">"Petit"</string>
     <string name="screen_zoom_summary_default" msgid="2247006805614056507">"Par défaut"</string>
     <string name="screen_zoom_summary_large" msgid="4835294730065424084">"Grand"</string>
-    <string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"Plus grand"</string>
-    <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Le plus grand"</string>
+    <string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"Très grand"</string>
+    <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Extrêmement grand"</string>
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personnalisé (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Aide et commentaires"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Saisir mot de passe pour rétablir conf. d\'usine en mode démo."</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Suivant"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Veuillez saisir le mot de passe"</string>
diff --git a/packages/SettingsLib/res/values-gl/arrays.xml b/packages/SettingsLib/res/values-gl/arrays.xml
index 162b86b..d06fe9c 100644
--- a/packages/SettingsLib/res/values-gl/arrays.xml
+++ b/packages/SettingsLib/res/values-gl/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (predeterminado)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Usar selección sistema (predeterminado)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Activar códecs opcionais"</item>
+    <item msgid="3304843301758635896">"Desactivar códecs opcionais"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Usa selección sistema (predeterminado)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Activa os códecs opcionais"</item>
+    <item msgid="741805482892725657">"Desactiva os códecs opcionais"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Usar selección sistema (predeterminado)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index fe91f40..a676e68 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Dispoñible a través de %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectado, pero sen Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"O punto de acceso está temporalmente cheo"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Conectado a través de %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Dispoñible a través de %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Moi lenta"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Aceptar"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Media"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Rápida"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Moi rápida"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Desconectado"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Desconectando..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Conectando..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Dúas barras de wifi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Tres barras de wifi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Sinal completo de wifi."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rede aberta"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rede segura"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"SO Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplicacións eliminadas"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplicacións e usuarios eliminados"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir sempre buscas de itinerancia da wifi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Datos móbiles sempre activados"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleración de hardware para conexión compartida"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sen nomes"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desactivar volume absoluto"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Activar a función de soar na mesma banda"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versión AVRCP de Bluetooth"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Esta configuración só está destinada á programación. Esta pode provocar que o dispositivo e as aplicacións fallen ou se comporten incorrectamente."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar aplicacións por USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Comprobar as aplicacións instaladas a través de ADB/ADT para detectar comportamento perigoso."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Mostraranse dispositivos Bluetooth sen nomes (só enderezos MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Desactiva a función do volume absoluto do Bluetooth en caso de que se produzan problemas de volume cos dispositivos remotos, como volume demasiado alto ou falta de control."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Permite que os tons de chamada do teléfono se reproduzan nos auriculares Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> (tempo restante: <xliff:g id="TIME">^2</xliff:g>)"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> ata completar a carga"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> (<xliff:g id="TIME">^2</xliff:g>)"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Descoñecido"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Cargando"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"cargando"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Non se está cargando"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Non está cargando"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Conectouse, pero non se pode cargar neste momento"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Completa"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Opción controlada polo administrador"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Activado polo administrador"</string>
@@ -375,13 +382,12 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizado (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Axuda e comentarios"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menú"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Insire contrasinal para restablec. en demostración"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Seguinte"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"O contrasinal é obrigatorio"</string>
     <string name="active_input_method_subtypes" msgid="3596398805424733238">"Métodos de entrada activos"</string>
     <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Usar idiomas do sistema"</string>
     <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"Non se puido abrir a configuración de <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>"</string>
-    <string name="ime_security_warning" msgid="4135828934735934248">"É posible que este método de entrada poida recompilar todo o texto que escribas, incluídos os datos persoais como os contrasinais e os números de tarxetas de crédito. Provén da aplicación <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Queres usar este método de entrada?"</string>
+    <string name="ime_security_warning" msgid="4135828934735934248">"Este método de introdución de texto pode recompilar todo o que escribas, incluídos os datos persoais como os contrasinais e os números de tarxetas de crédito. Provén da aplicación <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Queres usar este método de introdución de texto?"</string>
     <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"Nota: Tras un reinicio, non se pode iniciar esta aplicación ata que desbloquees o teléfono"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-gu/arrays.xml b/packages/SettingsLib/res/values-gu/arrays.xml
index 0f8b35b..00eb29c 100644
--- a/packages/SettingsLib/res/values-gu/arrays.xml
+++ b/packages/SettingsLib/res/values-gu/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (ડિફૉલ્ટ)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"સિસ્ટમ પસંદગીનો ઉપયોગ કરો (ડિફૉલ્ટ)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ઑડિઓ"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ઑડિઓ"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"વૈકલ્પિક કોડેક સક્ષમ કરો"</item>
+    <item msgid="3304843301758635896">"વૈકલ્પિક કોડેક અક્ષમ કરો"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"સિસ્ટમ પસંદગીનો ઉપયોગ કરો (ડિફૉલ્ટ)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ઑડિઓ"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ઑડિઓ"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"વૈકલ્પિક કોડેક સક્ષમ કરો"</item>
+    <item msgid="741805482892725657">"વૈકલ્પિક કોડેક અક્ષમ કરો"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"સિસ્ટમ પસંદગીનો ઉપયોગ કરો (ડિફૉલ્ટ)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index 674d4c9..fccac47 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s દ્વારા કનેક્ટ થયેલ"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s દ્વારા ઉપલબ્ધ"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"કનેક્ટ કર્યું, કોઈ ઇન્ટરનેટ નથી"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ઍક્સેસ પૉઇન્ટ અસ્થાયીરૂપે ભરાયેલ છે"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s દ્વારા કનેક્ટ થયેલ"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s દ્વારા ઉપલબ્ધ"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"ખૂબ જ ધીમી"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"ધીમી"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ઓકે"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"મધ્યમ"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"ઝડપી"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"ખૂબ ઝડપી"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ડિસ્કનેક્ટ કર્યું"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"ડિસ્કનેક્ટ થઈ રહ્યું છે..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"કનેક્ટ થઈ રહ્યું છે…"</string>
@@ -68,7 +72,7 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"સંપર્ક શેરિંગ માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ઇન્ટરનેટ કનેક્શન શેરિંગ"</string>
     <string name="bluetooth_profile_map" msgid="1019763341565580450">"ટેક્સ્ટ સંદેશા"</string>
-    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM ઍક્સેસ"</string>
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"સિમ ઍક્સેસ"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="5444517801472820055">"HD ઑડિઓ: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="8510588052415438887">"HD ઑડિઓ"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"મીડિયા ઑડિઓ સાથે કનેક્ટ કર્યુ"</string>
@@ -82,17 +86,17 @@
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"ઉપકરણ સાથે સ્થાનિક ઇન્ટરનેટ કનેક્શન શેર કરે છે"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ઇન્ટરનેટ ઍક્સેસ માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"નકશા માટે વાપરો"</string>
-    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM ઍક્સેસ માટે ઉપયોગ કરો"</string>
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"સિમ ઍક્સેસ માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"મીડિયા ઑડિઓ માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ફોન ઑડિઓ માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ફાઇલ સ્થાનાંતર માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"ઇનપુટ માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"જોડી"</string>
-    <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"જોડી કરો"</string>
+    <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"જોડાણ બનાવો"</string>
     <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"રદ કરો"</string>
-    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"જોડી કરવી એ કનેક્ટ કરેલ હોય ત્યારે તમારા સંપર્કો અને કૉલ ઇતિહાસની અ‍ૅક્સેસ આપે છે."</string>
+    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"એ કનેક્ટ કરેલ હોય ત્યારે જોડાણ બનાવવાથી તમારા સંપર્કો અને કૉલ ઇતિહાસનો અ‍ૅક્સેસ મળે છે."</string>
     <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> સાથે જોડી કરી શક્યાં નહીં."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"એક ખોટા PIN અથવા પાસકીને કારણે <xliff:g id="DEVICE_NAME">%1$s</xliff:g> સાથે જોડી બનાવી શકાઈ નથી."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"એક ખોટા પિન અથવા પાસકીને કારણે <xliff:g id="DEVICE_NAME">%1$s</xliff:g> સાથે જોડી બનાવી શકાઈ નથી."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> સાથે સંચાર કરી શકાતો નથી."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> દ્વારા જોડી કરવાનું નકાર્યું."</string>
     <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wifi બંધ."</string>
@@ -101,14 +105,16 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi બે બાર."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi ત્રણ બાર."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"પૂર્ણ Wifi સિગ્નલ."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"નેટવર્ક ખોલો"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"સુરક્ષિત નેટવર્ક"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"દૂર કરેલી ઍપ્લિકેશનો"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"દૂર કરેલી ઍપ્લિકેશનો અને વપરાશકર્તાઓ"</string>
     <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB ટિથરિંગ"</string>
-    <string name="tether_settings_title_wifi" msgid="3277144155960302049">"પોર્ટેબલ હોટસ્પોટ"</string>
-    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Bluetooth ટિથરિંગ"</string>
+    <string name="tether_settings_title_wifi" msgid="3277144155960302049">"પોર્ટેબલ હૉટસ્પૉટ"</string>
+    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"બ્લૂટૂથ ટિથરિંગ"</string>
     <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"ટિથરિંગ"</string>
-    <string name="tether_settings_title_all" msgid="8356136101061143841">"ટિથરિંગ અને પોર્ટેબલ હોટસ્પોટ"</string>
+    <string name="tether_settings_title_all" msgid="8356136101061143841">"ટિથરિંગ અને પોર્ટેબલ હૉટસ્પૉટ"</string>
     <string name="managed_user_title" msgid="8109605045406748842">"તમામ કાર્ય અ‍ૅપ્લિકેશનો"</string>
     <string name="user_guest" msgid="8475274842845401871">"અતિથિ"</string>
     <string name="unknown" msgid="1592123443519355854">"અજાણ્યું"</string>
@@ -169,10 +175,10 @@
     <string name="clear_adb_keys" msgid="4038889221503122743">"USB ડીબગિંગ પ્રમાણીકરણોને રદબાતલ કરો"</string>
     <string name="bugreport_in_power" msgid="7923901846375587241">"બગ રિપોર્ટ શોર્ટકટ"</string>
     <string name="bugreport_in_power_summary" msgid="1778455732762984579">"બગ રિપોર્ટ લેવા માટે પાવર મેનૂમાં એક બટન બતાવો"</string>
-    <string name="keep_screen_on" msgid="1146389631208760344">"જાગૃત રહો"</string>
+    <string name="keep_screen_on" msgid="1146389631208760344">"સક્રિય રાખો"</string>
     <string name="keep_screen_on_summary" msgid="2173114350754293009">"ચાર્જિંગ દરમિયાન સ્ક્રીન ક્યારેય નિષ્ક્રિય થશે નહીં"</string>
-    <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI સ્નૂપ લૉગ સક્ષમ કરો"</string>
-    <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ફાઇલમાં તમામ Bluetooth HCI પૅકેટ્સ કેપ્ચર કરો"</string>
+    <string name="bt_hci_snoop_log" msgid="3340699311158865670">"બ્લૂટૂથ HCI સ્નૂપ લૉગ સક્ષમ કરો"</string>
+    <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ફાઇલમાં તમામ બ્લૂટૂથ HCI પૅકેટ્સ કેપ્ચર કરો"</string>
     <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM અનલૉકિંગ"</string>
     <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"બુટલોડર અનલૉક કરવાની મંજૂરી આપો"</string>
     <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM ને અનલૉક કરવાની મંજૂરી આપીએ?"</string>
@@ -181,31 +187,32 @@
     <string name="mock_location_app_not_set" msgid="809543285495344223">"કોઈ મોક સ્થાન ઍપ્લિકેશન સેટ કરાયેલ નથી"</string>
     <string name="mock_location_app_set" msgid="8966420655295102685">"મોક સ્થાન ઍપ્લિકેશન: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="7044075693643009662">"નેટવર્કિંગ"</string>
-    <string name="wifi_display_certification" msgid="8611569543791307533">"બિનતારી પ્રદર્શન પ્રમાણન"</string>
-    <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi-Fi વર્બોઝ લૉગિંગ સક્ષમ કરો"</string>
+    <string name="wifi_display_certification" msgid="8611569543791307533">"વાયરલેસ ડિસ્પ્લે પ્રમાણન"</string>
+    <string name="wifi_verbose_logging" msgid="4203729756047242344">"વાઇ-ફાઇ વર્બોઝ લૉગિંગ સક્ષમ કરો"</string>
     <string name="wifi_aggressive_handover" msgid="5309131983693661320">"સશક્ત Wi‑Fiથી મોબાઇલ પર હૅન્ડઓવર"</string>
-    <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"હંમેશા Wi‑Fi રોમ સ્કૅન્સને મંજૂરી આપો"</string>
+    <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"હંમેશા વાઇ-ફાઇ રોમ સ્કૅન્સને મંજૂરી આપો"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"મોબાઇલ ડેટા હંમેશાં સક્રિય"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"ટિથરિંગ માટે હાર્ડવેર ગતિવૃદ્ધિ"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"નામ વિનાના બ્લૂટૂથ ઉપકરણો બતાવો"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ચોક્કસ વૉલ્યૂમને અક્ષમ કરો"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"બેંડમાં રિંગ કરવાનું સક્ષમ કરો"</string>
-    <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP સંસ્કરણ"</string>
-    <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Bluetooth AVRCP સંસ્કરણ પસંદ કરો"</string>
-    <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth ઑડિઓ કોડેક"</string>
-    <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="4558347981670553665">"Bluetooth ઑડિઓ LDAC કોડેક પસંદ કરો"</string>
-    <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth ઑડિઓ નમૂના દર"</string>
-    <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="5628790207448471613">"Bluetooth ઑડિઓ LDAC કોડેક પસંદ કરો:\nનમૂના દર"</string>
-    <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"નમૂના દીઠ Bluetooth ઑડિઓ બિટ"</string>
-    <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="4546131401358681321">"Bluetooth ઑડિઓ કોડેક પસંદ કરો:\nનમૂના દીઠ બિટ"</string>
-    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth ઑડિઓ ચેનલ મોડ"</string>
-    <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="9133545781346216071">"Bluetooth ઑડિઓ કોડેક પસંદ કરો:\nચૅનલ મોડ"</string>
-    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth ઑડિઓ LDAC કોડેક: પ્લેબૅક ગુણવત્તા"</string>
-    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"Bluetooth ઑડિઓ LDAC કોડેક પસંદ કરો:\nપ્લેબૅક ગુણવત્તા"</string>
+    <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"બ્લૂટૂથ AVRCP સંસ્કરણ"</string>
+    <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"બ્લૂટૂથ AVRCP સંસ્કરણ પસંદ કરો"</string>
+    <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"બ્લૂટૂથ ઑડિઓ કોડેક"</string>
+    <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="4558347981670553665">"બ્લૂટૂથ ઑડિઓ LDAC કોડેક પસંદ કરો"</string>
+    <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"બ્લૂટૂથ ઑડિઓ નમૂના દર"</string>
+    <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="5628790207448471613">"બ્લૂટૂથ ઑડિઓ LDAC કોડેક પસંદ કરો:\nનમૂના દર"</string>
+    <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"નમૂના દીઠ બ્લૂટૂથ ઑડિઓ બિટ"</string>
+    <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="4546131401358681321">"બ્લૂટૂથ ઑડિઓ કોડેક પસંદ કરો:\nનમૂના દીઠ બિટ"</string>
+    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"બ્લૂટૂથ ઑડિઓ ચેનલ મોડ"</string>
+    <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="9133545781346216071">"બ્લૂટૂથ ઑડિઓ કોડેક પસંદ કરો:\nચૅનલ મોડ"</string>
+    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"બ્લૂટૂથ ઑડિઓ LDAC કોડેક: પ્લેબૅક ગુણવત્તા"</string>
+    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"બ્લૂટૂથ ઑડિઓ LDAC કોડેક પસંદ કરો:\nપ્લેબૅક ગુણવત્તા"</string>
     <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"સ્ટ્રીમિંગ: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
     <string name="wifi_display_certification_summary" msgid="1155182309166746973">"વાયરલેસ ડિસ્પ્લે પ્રમાણપત્ર માટેના વિકલ્પો બતાવો"</string>
-    <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi લોગિંગ સ્તર વધારો, Wi‑Fi પીકરમાં SSID RSSI દીઠ બતાવો"</string>
-    <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"જ્યારે સક્ષમ કરેલ હોય, ત્યારે Wi‑Fi સિગ્નલ નબળું હોવા પર, Wi-Fi વધુ ઝડપથી ડેટા કનેક્શનને મોબાઇલ પર મોકલશે"</string>
-    <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"ઇન્ટરફેસ પર હાજર ડેટા ટ્રાફિકના પ્રમાણનાં આધારે Wi‑Fi રોમ સ્કૅન્સને મંજૂરી આપો/નામંજૂર કરો"</string>
+    <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"વાઇ-ફાઇ લોગિંગ સ્તર વધારો, વાઇ-ફાઇ પીકરમાં SSID RSSI દીઠ બતાવો"</string>
+    <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"જ્યારે સક્ષમ કરેલ હોય, ત્યારે વાઇ-ફાઇ સિગ્નલ નબળું હોવા પર, વાઇ-ફાઇ વધુ ઝડપથી ડેટા કનેક્શનને મોબાઇલ પર મોકલશે"</string>
+    <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"ઇન્ટરફેસ પર હાજર ડેટા ટ્રાફિકના પ્રમાણનાં આધારે વાઇ-ફાઇ રોમ સ્કૅન્સને મંજૂરી આપો/નામંજૂર કરો"</string>
     <string name="select_logd_size_title" msgid="7433137108348553508">"લોગર બફર કદ"</string>
     <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"લૉગ દીઠ લૉગર કદ બફર પસંદ કરો"</string>
     <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"લૉગર નિરંતર સ્ટોરેજ સાફ કરીએ?"</string>
@@ -217,17 +224,18 @@
     <string name="allow_mock_location" msgid="2787962564578664888">"મોક સ્થાનોની મંજૂરી આપો"</string>
     <string name="allow_mock_location_summary" msgid="317615105156345626">"મોક સ્થાનોની મંજૂરી આપો"</string>
     <string name="debug_view_attributes" msgid="6485448367803310384">"લક્ષણ નિરીક્ષણ જોવાનું સક્ષમ કરો"</string>
-    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi‑Fi  સક્રિય હોય ત્યારે પણ, હંમેશા મોબાઇલ ડેટાને સક્રિય રાખો (ઝડપી નેટવર્ક સ્વિચિંગ માટે)."</string>
+    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"વાઇ-ફાઇ  સક્રિય હોય ત્યારે પણ, હંમેશા મોબાઇલ ડેટાને સક્રિય રાખો (ઝડપી નેટવર્ક સ્વિચિંગ માટે)."</string>
     <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"જો ટિથરિંગ માટે હાર્ડવેર ગતિવૃદ્ધિ ઉપલબ્ધ હોય તો તેનો ઉપયોગ કરો"</string>
     <string name="adb_warning_title" msgid="6234463310896563253">"USB ડિબગિંગને મંજૂરી આપીએ?"</string>
-    <string name="adb_warning_message" msgid="7316799925425402244">"USB ડિબગીંગ ફક્ત વિકાસ હેતુઓ માટે જ બનાવાયેલ છે. તેનો ઉપયોગ તમારા કમ્પ્યુટર અને તમારા ઉપકરણ વચ્ચે ડેટાને કૉપિ કરવા, સૂચના વગર તમારા ઉપકરણ પર ઍપ્લિકેશનો ઇન્સ્ટોલ કરવા અને લૉગ ડેટા વાંચવા માટે કરો."</string>
+    <string name="adb_warning_message" msgid="7316799925425402244">"USB ડિબગીંગ ફક્ત વિકાસ હેતુઓ માટે જ બનાવાયેલ છે. તેનો ઉપયોગ તમારા કમ્પ્યુટર અને તમારા ઉપકરણ વચ્ચે ડેટાને કૉપિ કરવા, નોટિફિકેશન વગર તમારા ઉપકરણ પર ઍપ્લિકેશનો ઇન્સ્ટોલ કરવા અને લૉગ ડેટા વાંચવા માટે કરો."</string>
     <string name="adb_keys_warning_message" msgid="5659849457135841625">"તમે અગાઉ અધિકૃત કરેલા તમામ કમ્પ્યુટર્સમાંથી USB ડિબગિંગ પરની અ‍ૅક્સેસ રદબાતલ કરીએ?"</string>
     <string name="dev_settings_warning_title" msgid="7244607768088540165">"વિકાસ સેટિંગ્સને મંજૂરી આપીએ?"</string>
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"આ સેટિંગ્સ ફક્ત વિકાસનાં ઉપયોગ માટે જ હેતુબદ્ધ છે. તે તમારા ઉપકરણ અને તેના પરની એપ્લિકેશન્સનાં ભંગ થવા અથવા ખરાબ વર્તનનું કારણ બની શકે છે."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB પર ઍપ્લિકેશનો ચકાસો"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"હાનિકારક વર્તણૂંક માટે ADB/ADT મારફતે ઇન્સ્ટોલ કરવામાં આવેલી ઍપ્લિકેશનો તપાસો."</string>
-    <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"રિમોટ ઉપકરણોમાં વધુ પડતું ઊંચું વૉલ્યૂમ અથવા નિયંત્રણની કમી જેવી વૉલ્યૂમની સમસ્યાઓની સ્થિતિમાં Bluetooth ચોક્કસ વૉલ્યૂમ સુવિધાને અક્ષમ કરે છે."</string>
-    <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"ફોનનો રિંગટોન Bluetooth હેડસેટ પર વાગવાની મંજૂરી આપો"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"નામ વગરના (ફક્ત MAC ઍડ્રેસવાળા) બ્લૂટૂથ ઉપકરણો બતાવવામાં આવશે"</string>
+    <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"રિમોટ ઉપકરણોમાં વધુ પડતું ઊંચું વૉલ્યૂમ અથવા નિયંત્રણની કમી જેવી વૉલ્યૂમની સમસ્યાઓની સ્થિતિમાં બ્લૂટૂથ ચોક્કસ વૉલ્યૂમ સુવિધાને અક્ષમ કરે છે."</string>
+    <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"ફોનની રિંગટોન બ્લૂટૂથ હૅડસેટ પર વાગવાની મંજૂરી આપો"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"સ્થાનિક ટર્મિનલ"</string>
     <string name="enable_terminal_summary" msgid="67667852659359206">"સ્થાનિક શેલ અ‍ૅક્સેસની ઑફર કરતી ટર્મિનલ એપ્લિકેશનને સક્ષમ કરો"</string>
     <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP તપાસણી"</string>
@@ -284,11 +292,11 @@
     <string name="debug_applications_category" msgid="4206913653849771549">"ઍપ્લિકેશનો"</string>
     <string name="immediately_destroy_activities" msgid="1579659389568133959">"પ્રવૃત્તિઓ રાખશો નહીં"</string>
     <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"જેવો વપરાશકર્તા તેને છોડે, તરત જ દરેક પ્રવૃત્તિ નષ્ટ કરો"</string>
-    <string name="app_process_limit_title" msgid="4280600650253107163">"પૃષ્ઠભૂમિ પ્રક્રિયા સીમા"</string>
+    <string name="app_process_limit_title" msgid="4280600650253107163">"બૅકગ્રાઉન્ડ પ્રક્રિયા સીમા"</string>
     <string name="show_all_anrs" msgid="28462979638729082">"બધા ANR બતાવો"</string>
-    <string name="show_all_anrs_summary" msgid="641908614413544127">"પૃષ્ઠભૂમિ ઍપ્લિકેશનો માટે ઍપ્લિકેશન પ્રતિસાદ આપતી નથી સંવાદ બતાવો"</string>
-    <string name="show_notification_channel_warnings" msgid="1399948193466922683">"સૂચના ચૅનલની ચેતવણી બતાવો"</string>
-    <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"ઍપ્લિકેશન માન્ય ચૅનલ વિના સૂચના પોસ્ટ કરે તો સ્ક્રીન પર ચેતવણી દેખાય છે"</string>
+    <string name="show_all_anrs_summary" msgid="641908614413544127">"બૅકગ્રાઉન્ડ ઍપ્લિકેશનો માટે ઍપ્લિકેશન પ્રતિસાદ આપતી નથી સંવાદ બતાવો"</string>
+    <string name="show_notification_channel_warnings" msgid="1399948193466922683">"નોટિફિકેશન ચૅનલની ચેતવણી બતાવો"</string>
+    <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"ઍપ્લિકેશન માન્ય ચૅનલ વિના નોટિફિકેશન પોસ્ટ કરે તો સ્ક્રીન પર ચેતવણી દેખાય છે"</string>
     <string name="force_allow_on_external" msgid="3215759785081916381">"બાહ્ય પર એપ્લિકેશનોને મંજૂરી આપવાની ફરજ પાડો"</string>
     <string name="force_allow_on_external_summary" msgid="3640752408258034689">"મેનિફેસ્ટ મૂલ્યોને ધ્યાનમાં લીધા સિવાય, કોઈપણ ઍપ્લિકેશનને બાહ્ય સ્ટોરેજ પર લખાવા માટે લાયક બનાવે છે"</string>
     <string name="force_resizable_activities" msgid="8615764378147824985">"પ્રવૃત્તિઓને ફરીથી કદ યોગ્ય થવા માટે ફરજ પાડો"</string>
@@ -309,7 +317,7 @@
   <string-array name="color_mode_descriptions">
     <item msgid="4979629397075120893">"વધારેલ રંગો"</item>
     <item msgid="8280754435979370728">"આંખો વડે જોઈ શકાતાં કુદરતી રંગો"</item>
-    <item msgid="5363960654009010371">"ડિજિટલ સામગ્રી માટે ઓપ્ટિમાઇઝ કરાયેલા રંગો"</item>
+    <item msgid="5363960654009010371">"ડિજિટલ કન્ટેન્ટ માટે ઓપ્ટિમાઇઝ કરાયેલા રંગો"</item>
   </string-array>
     <string name="inactive_apps_title" msgid="1317817863508274533">"નિષ્ક્રિય ઍપ્લિકેશનો"</string>
     <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"નિષ્ક્રિય. ટોગલ કરવા માટે ટૅપ કરો."</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> બાકી"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - સંપૂર્ણપણે ચાર્જ થવા માટે <xliff:g id="TIME">^2</xliff:g>"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"અજાણ્યું"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"ચાર્જ થઈ રહ્યું છે"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"ચાર્જ થઈ રહ્યું છે"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"ચાર્જ થઈ રહ્યું નથી"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ચાર્જ થઈ રહ્યું નથી"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"પ્લગ ઇન કરેલ, હમણાં ચાર્જ કરી શકતા નથી"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"પૂર્ણ"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"વ્યવસ્થાપક દ્વારા નિયંત્રિત"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"વ્યવસ્થાપકે સક્ષમ કરેલ"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"કસ્ટમ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"સહાય અને પ્રતિસાદ"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"મેનુ"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"ડેમો મોડમાં ફેક્ટરી રીસેટ પાસવર્ડ દાખલ કરો"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"આગલું"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"પાસવર્ડ આવશ્યક છે"</string>
diff --git a/packages/SettingsLib/res/values-hi/arrays.xml b/packages/SettingsLib/res/values-hi/arrays.xml
index 6669d3d..1a765b3 100644
--- a/packages/SettingsLib/res/values-hi/arrays.xml
+++ b/packages/SettingsLib/res/values-hi/arrays.xml
@@ -49,29 +49,47 @@
     <item msgid="1805837518286731242">"खराब कनेक्शन को अस्थायी रूप से अनदेखा कर रहा है"</item>
   </string-array>
   <string-array name="hdcp_checking_titles">
-    <item msgid="441827799230089869">"कभी नही जांचें"</item>
-    <item msgid="6042769699089883931">"केवल DRM सामग्री जांचें"</item>
-    <item msgid="9174900380056846820">"हमेशा जांचें"</item>
+    <item msgid="441827799230089869">"कभी नही जाँचें"</item>
+    <item msgid="6042769699089883931">"केवल DRM सामग्री जाँचें"</item>
+    <item msgid="9174900380056846820">"हमेशा जाँचें"</item>
   </string-array>
   <string-array name="hdcp_checking_summaries">
-    <item msgid="505558545611516707">"कभी भी HDCP जांच का उपयोग न करें"</item>
-    <item msgid="3878793616631049349">"HDCP जांच का उपयोग केवल DRM सामग्री के लिए करें"</item>
-    <item msgid="45075631231212732">"हमेशा HDCP जांच का उपयोग करें"</item>
+    <item msgid="505558545611516707">"कभी भी HDCP जाँच का उपयोग न करें"</item>
+    <item msgid="3878793616631049349">"HDCP जाँच का उपयोग केवल DRM सामग्री के लिए करें"</item>
+    <item msgid="45075631231212732">"हमेशा HDCP जाँच का उपयोग करें"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (डिफ़ॉल्ट)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"सिस्टम चयन का उपयोग करें (डिफ़ॉल्ट)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ऑडियो"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ऑडियो"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"वैकल्पिक कोडेक चालू करें"</item>
+    <item msgid="3304843301758635896">"वैकल्पिक कोडेक अक्षम करें"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"सिस्टम चयन का उपयोग करें (डिफ़ॉल्ट)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ऑडियो"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ऑडियो"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"वैकल्पिक कोडेक चालू करें"</item>
+    <item msgid="741805482892725657">"वैकल्पिक कोडेक अक्षम करें"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"सिस्टम चयन का उपयोग करें (डिफ़ॉल्ट)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index 12564b5..4689f616 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -30,22 +30,26 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"प्रमाणीकरण समस्या"</string>
     <string name="wifi_cant_connect" msgid="5410016875644565884">"कनेक्ट नहीं हो पा रहा है"</string>
     <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' से कनेक्ट नहीं हो पा रहा है"</string>
-    <string name="wifi_check_password_try_again" msgid="516958988102584767">"पासवर्ड जांचें और दोबारा कोशिश करें"</string>
+    <string name="wifi_check_password_try_again" msgid="516958988102584767">"पासवर्ड जाँचें और दोबारा कोशिश करें"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"रेंज में नहीं"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"अपने आप कनेक्ट नहीं होगा"</string>
-    <string name="wifi_no_internet" msgid="3880396223819116454">"कोई इंटरनेट एक्सेस नहीं"</string>
+    <string name="wifi_no_internet" msgid="3880396223819116454">"इंटरनेट नहीं है"</string>
     <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> के द्वारा सहेजा गया"</string>
     <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s के ज़रिए ऑटोमैटिक रूप से कनेक्ट है"</string>
     <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"नेटवर्क रेटिंग प्रदाता के ज़रिए अपने आप कनेक्ट है"</string>
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s के द्वारा उपलब्ध"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s के द्वारा उपलब्ध"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"कनेक्ट किया गया, इंटरनेट नहीं"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"एक्सेस प्वाइंट फ़िलहाल भरा हुआ है"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s के ज़रिए कनेक्ट"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s के ज़रिए उपलब्ध"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"अत्‍यधिक धीमी"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"धीमी"</string>
-    <string name="speed_label_okay" msgid="2331665440671174858">"ठीक"</string>
+    <string name="speed_label_okay" msgid="2331665440671174858">"ठीक है"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"मध्यम"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"तेज़"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"अत्‍यधिक तेज़"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"डिस्कनेक्‍ट किया गया"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"डिस्‍कनेक्‍ट हो रहा है..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"कनेक्ट हो रहा है..."</string>
@@ -88,25 +92,27 @@
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"फ़ाइल स्‍थानांतरण के लिए उपयोग करें"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"इनपुट के लिए उपयोग करें"</string>
     <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"युग्‍म बनाएं"</string>
-    <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"युग्‍मित करें"</string>
-    <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"अभी नहीं"</string>
-    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"कनेक्ट रहने पर, पेयरिंग आपको अपने संपर्कों और कॉल इतिहास की एक्सेस प्रदान करता है."</string>
+    <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"दूसरे डिवाइस से जोड़ें"</string>
+    <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"रद्द करें"</string>
+    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"कनेक्ट होने पर, पेयरिंग से आपके संपर्कों और कॉल इतिहास तक पहुंचा जा सकता है."</string>
     <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> के साथ युग्‍मित नहीं हो सका."</string>
     <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"गलत पिन या पासकी के कारण <xliff:g id="DEVICE_NAME">%1$s</xliff:g> के साथ युग्‍मित नहीं हो सका."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> से संचार नहीं कर सकता."</string>
-    <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> द्वारा युग्‍मन अस्‍वीकृत किया गया."</string>
+    <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ने जोड़ने का अनुरोध नहीं माना."</string>
     <string name="accessibility_wifi_off" msgid="1166761729660614716">"वाई-फ़ाई बंद है."</string>
     <string name="accessibility_no_wifi" msgid="8834610636137374508">"वाई-फ़ाई डिसकनेक्ट है."</string>
     <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"वाई-फ़ाई का एक बार है."</string>
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"वाई-फ़ाई की दो पट्टी मिल रही हैं."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"वाई-फ़ाई की एक पट्टी मिल रही है."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"पूरे वाई-फ़ाई सिग्नल मिल रहे हैं."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"खुला नेटवर्क"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"सुरक्षित नेटवर्क"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"निकाले गए ऐप्स"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"ऐप्स  और उपयोगकर्ताओं को निकालें"</string>
-    <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB टेदरिंग"</string>
+    <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB से इंटरनेट पर शेयर करें"</string>
     <string name="tether_settings_title_wifi" msgid="3277144155960302049">"पोर्टेबल हॉटस्‍पॉट"</string>
-    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"ब्लूटूथ टेदरिंग"</string>
+    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"ब्लूटूथ से इंटरनेट पर शेयर करें."</string>
     <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"टेदरिंग"</string>
     <string name="tether_settings_title_all" msgid="8356136101061143841">"टेदरिंग और पोर्टेबल हॉटस्‍पॉट"</string>
     <string name="managed_user_title" msgid="8109605045406748842">"सभी कार्यस्थल ऐप्लिकेशन"</string>
@@ -126,17 +132,17 @@
     <string name="tts_lang_not_selected" msgid="7395787019276734765">"भाषा नहीं चुनी गई है"</string>
     <string name="tts_default_lang_summary" msgid="5219362163902707785">"बोले गए लेख के लिए भाषा-विशिष्ट ध्‍वनि सेट करता है"</string>
     <string name="tts_play_example_title" msgid="7094780383253097230">"एक उदाहरण सुनें"</string>
-    <string name="tts_play_example_summary" msgid="8029071615047894486">"बोली संश्लेषण का एक संक्षिप्त प्रदर्शन चलाएं"</string>
+    <string name="tts_play_example_summary" msgid="8029071615047894486">"लिखे हुए को बोली में बदलने की सुविधा की एक छोटी सी झलक चलाएं"</string>
     <string name="tts_install_data_title" msgid="4264378440508149986">"ध्‍वनि डेटा इंस्टॉल करें"</string>
     <string name="tts_install_data_summary" msgid="5742135732511822589">"बोली-संश्लेषण के लिए आवश्‍यक ध्‍वनि डेटा इंस्‍टॉल करें"</string>
-    <string name="tts_engine_security_warning" msgid="8786238102020223650">"यह बोली संश्लेषण इंजन पासवर्ड और क्रेडिट कार्ड नंबर जैसे निजी डेटा समेत आपके द्वारा बोले जाने वाले सभी लेख को एकत्र कर सकता है. यह <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> इंजन से आता है. इस बोली संश्लेषण इंजन के उपयोग को सक्षम करें?"</string>
+    <string name="tts_engine_security_warning" msgid="8786238102020223650">"यह स्पीच सिंथेसिस (लिखे हुए को मशीन द्वारा बोली में बदलना) इंजन, पासवर्ड और क्रेडिट कार्ड नंबर जैसे निजी डेटा सहित आपके द्वारा बोले जाने वाले सभी लेख इकट्ठा कर सकता है. यह <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> इंजन से आता है. स्पीच सिंथेसिस इंजन के इस्तेमाल को चालू करें?"</string>
     <string name="tts_engine_network_required" msgid="1190837151485314743">"लेख-से-बोली आउटपुट के लिए इस भाषा को क्रियाशील नेटवर्क कनेक्शन की आवश्यकता है."</string>
     <string name="tts_default_sample_string" msgid="4040835213373086322">"यह बोली संश्लेषण का एक उदाहरण है"</string>
     <string name="tts_status_title" msgid="7268566550242584413">"डिफ़ॉल्ट भाषा स्थिति"</string>
     <string name="tts_status_ok" msgid="1309762510278029765">"<xliff:g id="LOCALE">%1$s</xliff:g> पूरी तरह से समर्थित है"</string>
     <string name="tts_status_requires_network" msgid="6042500821503226892">"<xliff:g id="LOCALE">%1$s</xliff:g> के लिए नेटवर्क कनेक्शन की आवश्यकता है"</string>
     <string name="tts_status_not_supported" msgid="4491154212762472495">"<xliff:g id="LOCALE">%1$s</xliff:g> समर्थित नहीं है"</string>
-    <string name="tts_status_checking" msgid="5339150797940483592">"जांच की जा रही है..."</string>
+    <string name="tts_status_checking" msgid="5339150797940483592">"जाँच की जा रही है..."</string>
     <string name="tts_engine_settings_title" msgid="3499112142425680334">"<xliff:g id="TTS_ENGINE_NAME">%s</xliff:g> के लिए सेटिंग"</string>
     <string name="tts_engine_settings_button" msgid="1030512042040722285">"इंजन सेटिंग लॉन्‍च करें"</string>
     <string name="tts_engine_preference_section_title" msgid="448294500990971413">"पसंदीदा इंजन"</string>
@@ -157,38 +163,39 @@
     <string name="choose_profile" msgid="6921016979430278661">"प्रोफ़ाइल चुनें"</string>
     <string name="category_personal" msgid="1299663247844969448">"व्यक्तिगत"</string>
     <string name="category_work" msgid="8699184680584175622">"कार्यालय"</string>
-    <string name="development_settings_title" msgid="215179176067683667">"डेवलपर विकल्प"</string>
-    <string name="development_settings_enable" msgid="542530994778109538">"डेवलपर विकल्‍प सक्षम करें"</string>
+    <string name="development_settings_title" msgid="215179176067683667">"डेवलपर के लिए सेटिंग और टूल"</string>
+    <string name="development_settings_enable" msgid="542530994778109538">"डेवलपर के लिए सेटिंग और टूल चालू करें"</string>
     <string name="development_settings_summary" msgid="1815795401632854041">"ऐप्स विकास के लिए विकल्‍प सेट करें"</string>
-    <string name="development_settings_not_available" msgid="4308569041701535607">"इस उपयोगकर्ता के लिए डेवलपर विकल्प उपलब्ध नहीं हैं"</string>
+    <string name="development_settings_not_available" msgid="4308569041701535607">"यह उपयोगकर्ता, डेवलपर के लिए सेटिंग और टूल का इस्तेमाल नहीं कर सकता"</string>
     <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN सेटिंग इस उपयोगकर्ता के लिए उपलब्ध नहीं हैं"</string>
     <string name="tethering_settings_not_available" msgid="6765770438438291012">"टेदरिंग सेटिंग इस उपयोगकर्ता के लिए उपलब्ध नहीं हैं"</string>
-    <string name="apn_settings_not_available" msgid="7873729032165324000">"एक्सेस पॉइंट नाम सेटिंग इस उपयोगकर्ता के लिए उपलब्ध नहीं हैं"</string>
+    <string name="apn_settings_not_available" msgid="7873729032165324000">"एक्सेस प्वाइंट नाम सेटिंग इस उपयोगकर्ता के लिए मौजूद नहीं हैं"</string>
     <string name="enable_adb" msgid="7982306934419797485">"USB डीबग करना"</string>
     <string name="enable_adb_summary" msgid="4881186971746056635">"डीबग मोड जब USB कनेक्‍ट किया गया हो"</string>
-    <string name="clear_adb_keys" msgid="4038889221503122743">"USB डीबगिंग प्राधिकरणों को निरस्त करें"</string>
-    <string name="bugreport_in_power" msgid="7923901846375587241">"बग रिपोर्ट शॉर्टकट"</string>
-    <string name="bugreport_in_power_summary" msgid="1778455732762984579">"बग रिपोर्ट लेने के लिए पावर मेनू में कोई बटन दिखाएं"</string>
-    <string name="keep_screen_on" msgid="1146389631208760344">"सचेत रहें"</string>
-    <string name="keep_screen_on_summary" msgid="2173114350754293009">"चार्ज होने के दौरान स्‍क्रीन कभी निष्‍क्रिय नहीं होगी"</string>
-    <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ब्लूटूथ HCI स्‍नूप लॉग सक्षम करें"</string>
+    <string name="clear_adb_keys" msgid="4038889221503122743">"USB डीबग करने की मंज़ूरी रद्द करें"</string>
+    <string name="bugreport_in_power" msgid="7923901846375587241">"गड़बड़ी की रिपोर्ट का शॉर्टकट"</string>
+    <string name="bugreport_in_power_summary" msgid="1778455732762984579">"गड़बड़ी की रिपोर्ट लेने के लिए पावर मेन्यू में कोई बटन दिखाएं"</string>
+    <string name="keep_screen_on" msgid="1146389631208760344">"स्क्रीन को चालू रखें"</string>
+    <string name="keep_screen_on_summary" msgid="2173114350754293009">"चार्ज करते समय स्‍क्रीन कभी भी कम बैटरी मोड में नहीं जाएगी"</string>
+    <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ब्लूटूथ HCI स्‍नूप लॉग चालू करें"</string>
     <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"फ़ाइल के सभी ब्लूटूथ HCI पैकेट कैप्‍चर करें"</string>
     <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM अनलॉक करना"</string>
     <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"बूटलोडर को अनलाॅक किए जाने की अनुमति दें"</string>
     <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM अनलॉक करने की अनुमति दें?"</string>
     <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"चेतावनी: इस सेटिंग के चालू रहने पर डिवाइस सुरक्षा सुविधाएं इस डिवाइस पर काम नहीं करेंगी."</string>
-    <string name="mock_location_app" msgid="7966220972812881854">"कृत्रिम स्‍थान वाला ऐप चुनें"</string>
-    <string name="mock_location_app_not_set" msgid="809543285495344223">"कृत्रिम स्‍थान वाला कोई ऐप सेट नहीं है"</string>
-    <string name="mock_location_app_set" msgid="8966420655295102685">"कृत्रिम स्‍थान वाला ऐप: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="mock_location_app" msgid="7966220972812881854">"जगह की नकली जानकारी देने के लिए ऐप चुनें"</string>
+    <string name="mock_location_app_not_set" msgid="809543285495344223">"जगह की नकली जानकारी देने के लिए ऐप सेट नहीं है"</string>
+    <string name="mock_location_app_set" msgid="8966420655295102685">"जगह की नकली जानकारी देने वाला ऐप: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="7044075693643009662">"नेटवर्किंग"</string>
     <string name="wifi_display_certification" msgid="8611569543791307533">"वायरलेस दिखाई देने के लिए प्रमाणन"</string>
-    <string name="wifi_verbose_logging" msgid="4203729756047242344">"वाई-फ़ाई वर्बोस प्रवेश सक्षम करें"</string>
+    <string name="wifi_verbose_logging" msgid="4203729756047242344">"वाई-फ़ाई वर्बोस लॉगिंग चालू करें"</string>
     <string name="wifi_aggressive_handover" msgid="5309131983693661320">"वाई-फ़ाई से मोबाइल पर ज़्यादा तेज़ी से हैंडओवर"</string>
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"हमेशा वाई-फ़ाई रोम स्कैन करने दें"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"मोबाइल डेटा हमेशा सक्रिय"</string>
-    <string name="tethering_hardware_offload" msgid="7470077827090325814">"हार्डवेयर त्‍वरण को टेदर करना"</string>
-    <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"पूर्ण वॉल्यूम अक्षम करें"</string>
-    <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"इन-बैंड रिंग करना सक्षम करें"</string>
+    <string name="tethering_hardware_offload" msgid="7470077827090325814">"हार्डवेयर से तेज़ी लाने के लिए टेदर करें"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"बिना नाम वाले ब्लूटूथ डिवाइस दिखाएं"</string>
+    <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ब्लूटूथ से आवाज़ के नियंत्रण की सुविधा रोकें"</string>
+    <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"इन-बैंड रिंग करना चालू करें"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ब्लूटूथ AVRCP वर्शन"</string>
     <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"ब्लूटूथ AVRCP वर्शन चुनें"</string>
     <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ब्लूटूथ ऑडियो कोडेक"</string>
@@ -201,7 +208,7 @@
     <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="9133545781346216071">"ब्लूटूथ ऑडियो कोडेक चुनें:\nचैनल मोड"</string>
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ब्लूटूथ ऑडियो LDAC कोडेक: प्लेबैक क्वालिटी"</string>
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"ब्लूटूथ ऑडियो LDAC कोडेक चुनें:\nप्लेबैक क्वालिटी"</string>
-    <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"स्ट्रीम हो रहा है: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
+    <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"चलाया जा रहा है: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
     <string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस दिखाई देने के लिए प्रमाणन विकल्प दिखाएं"</string>
     <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाई-फ़ाई प्रवेश स्तर बढ़ाएं, वाई-फ़ाई पिकर में प्रति SSID RSSI दिखाएं"</string>
     <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"इसके सक्षम होने पर, जब वाई-फ़ाई संकेत कमज़ोर हों तो वाई-फ़ाई, डेटा कनेक्शन को मोबाइल पर ज़्यादा तेज़ी से भेजेगा"</string>
@@ -216,22 +223,23 @@
     <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB कॉन्फ़िगरेशन चुनें"</string>
     <string name="allow_mock_location" msgid="2787962564578664888">"कृत्रिम स्‍थानों को अनुमति दें"</string>
     <string name="allow_mock_location_summary" msgid="317615105156345626">"कृत्रिम स्‍थानों को अनुमति दें"</string>
-    <string name="debug_view_attributes" msgid="6485448367803310384">"दृश्य विशेषता निरीक्षण सक्षम करें"</string>
+    <string name="debug_view_attributes" msgid="6485448367803310384">"देखने वाले से जुड़े खास डेटा को रखना चालू करें"</string>
     <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"वाई-फ़ाई के सक्रिय रहने पर भी, हमेशा मोबाइल डेटा सक्रिय रखें (तेज़ी से नेटवर्क स्विच करने के लिए)."</string>
-    <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"हार्डवेयर त्‍वरण को टेदर करना उपलब्ध होने पर उसका उपयोग करें"</string>
+    <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"हार्डवेयर से तेज़ी लाने के लिए टेदर करने की सुविधा मौजूद होने पर उसका इस्तेमाल करें"</string>
     <string name="adb_warning_title" msgid="6234463310896563253">"USB डीबग करने की अनुमति दें?"</string>
-    <string name="adb_warning_message" msgid="7316799925425402244">"USB डीबग करने का उद्देश्‍य केवल विकास है. इसका इस्तेमाल आपके कंप्‍यूटर और आपके डिवाइस के बीच डेटा को कॉपी करने, बिना नोटिफ़िकेशन के आपके डिवाइस पर ऐप इंस्‍टॉल करने और लॉग डेटा पढ़ने के लिए करें."</string>
-    <string name="adb_keys_warning_message" msgid="5659849457135841625">"आपके द्वारा पूर्व में प्राधिकृत सभी कंप्यूटर से USB डीबगिंग की पहुंच निरस्त करें?"</string>
+    <string name="adb_warning_message" msgid="7316799925425402244">"USB डीबग करने का मकसद केवल डेवेलप करना है. इसका इस्तेमाल आपके कंप्‍यूटर और आपके डिवाइस के बीच डेटा को कॉपी करने, बिना सूचना के आपके डिवाइस पर ऐप इंस्‍टॉल करने और लॉग डेटा पढ़ने के लिए करें."</string>
+    <string name="adb_keys_warning_message" msgid="5659849457135841625">"उन सभी कंप्यूटरों से USB डीबग करने की पहुंचर रद्द करें, जिन्हें आपने पहले इसकी मंज़ूरी दी थी?"</string>
     <string name="dev_settings_warning_title" msgid="7244607768088540165">"विकास सेटिंग की अनुमति दें?"</string>
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"ये सेटिंग केवल विकास संबंधी उपयोग के प्रयोजन से हैं. वे आपके डिवाइस और उस पर स्‍थित ऐप्स  को खराब कर सकती हैं या उनके दुर्व्यवहार का कारण हो सकती हैं."</string>
-    <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB पर ऐप्स  सत्यापित करें"</string>
-    <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"नुकसानदेह व्यवहार के लिए ADB/ADT के द्वारा इंस्टॉल किए गए ऐप्स  जांचें."</string>
-    <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"दूरस्थ डिवाइस के साथ वॉल्यूम की समस्याओं जैसे अस्वीकार्य तेज़ वॉल्यूम या नियंत्रण की कमी की स्थिति में ब्लूटूथ पूर्ण वॉल्यूम सुविधा को अक्षम करता है."</string>
-    <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"फ़ोन की रिंगटोन को ब्लूटूथ हैडसेट पर बजने दें"</string>
+    <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB पर ऐप की पुष्टि करें"</string>
+    <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"नुकसानदेह व्यवहार के लिए ADB/ADT के द्वारा इंस्टॉल किए गए ऐप्स  जाँचें."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"बिना नाम वाले ब्लूटूथ डिवाइस (केवल MAC पते वाले) दिखाए जाएंगे"</string>
+    <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"दूर के डिवाइस पर आवाज़ बहुत बढ़ जाने या उससे नियंत्रण हटने जैसी समस्याएं होने पर, यह ब्लूटूथ के ज़रिए आवाज़ के नियंत्रण की सुविधा रोक देता है."</string>
+    <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"फ़ोन की रिंगटोन को ब्लूटूथ हेडसेट पर बजने दें"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"स्थानीय टर्मिनल"</string>
-    <string name="enable_terminal_summary" msgid="67667852659359206">"स्थानीय शेल एक्सेस ऑफ़र करने वाला टर्मिनल ऐप्स  सक्षम करें"</string>
-    <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP जांच"</string>
-    <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP जांच व्‍यवहार सेट करें"</string>
+    <string name="enable_terminal_summary" msgid="67667852659359206">"लोकल शेल तक पहुंचने की सुविधा देने वाले टर्मिनल ऐप को चालू करें"</string>
+    <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP जाँच"</string>
+    <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP जाँच व्‍यवहार सेट करें"</string>
     <string name="debug_debugging_category" msgid="6781250159513471316">"डीबग करना"</string>
     <string name="debug_app" msgid="8349591734751384446">"डीबग ऐप्स  को चुनें"</string>
     <string name="debug_app_not_set" msgid="718752499586403499">"कोई डीबग ऐप्स  सेट नहीं है"</string>
@@ -241,7 +249,7 @@
     <string name="wait_for_debugger" msgid="1202370874528893091">"डीबगर की प्रतीक्षा करें"</string>
     <string name="wait_for_debugger_summary" msgid="1766918303462746804">"डीबग किया गया ऐप्स  निष्पादन के पहले अनुलग्न करने के लिए डीबगर की प्रतीक्षा करता है"</string>
     <string name="telephony_monitor_switch" msgid="1764958220062121194">"टेलीफ़ोनी मॉनिटर"</string>
-    <string name="telephony_monitor_switch_summary" msgid="7695552966547975635">"टेलीफ़ोनी मॉनिटर को जब टेलीफ़ोनी/मॉडेम कार्यक्षमता में कोई समस्या मिलती है तो वह लॉग इकट्ठा करता है और उपयोगकर्ता को एक बग दर्ज करने के लिए नोटिफ़िकेशन देता है"</string>
+    <string name="telephony_monitor_switch_summary" msgid="7695552966547975635">"टेलीफ़ोनी मॉनिटर को जब टेलीफ़ोनी/मॉडेम के फंक्शन में कोई समस्या मिलती है, तो वह लॉग इकट्ठा करता है और उपयोगकर्ता को एक गड़बड़ी दर्ज करने के लिए सूचना देता है"</string>
     <string name="debug_input_category" msgid="1811069939601180246">"हिंदी में लिखें"</string>
     <string name="debug_drawing_category" msgid="6755716469267367852">"ड्रॉइंग"</string>
     <string name="debug_hw_drawing_category" msgid="6220174216912308658">"हार्डवेयर त्वरित रेंडरिंग"</string>
@@ -249,22 +257,22 @@
     <string name="debug_monitoring_category" msgid="7640508148375798343">"निगरानी"</string>
     <string name="strict_mode" msgid="1938795874357830695">"सख्‍त मोड सक्षम किया गया"</string>
     <string name="strict_mode_summary" msgid="142834318897332338">"जब ऐप्स मुख्‍य थ्रेड पर लंबी कार्यवाही करते हैं तो स्‍क्रीन फ़्लैश करें"</string>
-    <string name="pointer_location" msgid="6084434787496938001">"सूचक स्थान"</string>
-    <string name="pointer_location_summary" msgid="840819275172753713">"वर्तमान स्‍पर्श डेटा दिखाने वाला स्‍क्रीन ओवरले"</string>
+    <string name="pointer_location" msgid="6084434787496938001">"पॉइंटर की जगह"</string>
+    <string name="pointer_location_summary" msgid="840819275172753713">"मौजूदा स्‍पर्श डेटा दिखाने वाला स्‍क्रीन ओवरले"</string>
     <string name="show_touches" msgid="2642976305235070316">"टैप दिखाएं"</string>
     <string name="show_touches_summary" msgid="6101183132903926324">"टैप के लिए विज़ुअल फ़ीडबैक दिखाएं"</string>
-    <string name="show_screen_updates" msgid="5470814345876056420">"सतह के नई जानकारी दिखाएं"</string>
-    <string name="show_screen_updates_summary" msgid="2569622766672785529">"विंडो सतहें के नई जानकारी मिलने पर उन सभी को फ़्लैश करें"</string>
-    <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU दृश्य की नई जानकारी दिखाएं"</string>
+    <string name="show_screen_updates" msgid="5470814345876056420">"सर्फ़ेस अपडेट दिखाएं"</string>
+    <string name="show_screen_updates_summary" msgid="2569622766672785529">"अपडेट होने पर पूरे विंडो सर्फ़ेस को फ़्लैश करें"</string>
+    <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU व्यू अपडेट दिखाएं"</string>
     <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU के साथ आरेखित करने पर विंडो में दृश्‍यों को फ़्लैश करें"</string>
-    <string name="show_hw_layers_updates" msgid="5645728765605699821">"हार्डवेयर लेयर की नई जानकारी"</string>
-    <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"हार्डवेयर लेयर की नई जानकारी मिलने पर हरा फ़्लैश होता है"</string>
+    <string name="show_hw_layers_updates" msgid="5645728765605699821">"हार्डवेयर लेयर अपडेट दिखाएं"</string>
+    <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"हार्डवेयर लेयर अपडेट होने पर उनमें हरी रोशनी डालें"</string>
     <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ओवरड्रॉ डीबग करें"</string>
     <string name="debug_hw_renderer" msgid="7568529019431785816">"GPU दाता सेट करें"</string>
-    <string name="disable_overlays" msgid="2074488440505934665">"HW ओवरले अक्षम करें"</string>
+    <string name="disable_overlays" msgid="2074488440505934665">"HW ओवरले बंद करें"</string>
     <string name="disable_overlays_summary" msgid="3578941133710758592">"स्‍क्रीन संयोजन के लिए हमेशा GPU का उपयोग करें"</string>
     <string name="simulate_color_space" msgid="6745847141353345872">"रंग स्पेस सिम्युलेट करें"</string>
-    <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL चिह्न सक्षम करें"</string>
+    <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ट्रेस चालू करें"</string>
     <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ऑडियो रूटिंग अक्षम करें"</string>
     <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ऑडियो पेरिफ़ेरल पर स्‍वत: रूटिंग अक्षम करें"</string>
     <string name="debug_layout" msgid="5981361776594526155">"लेआउट सीमाएं दिखाएं"</string>
@@ -274,30 +282,30 @@
     <string name="force_hw_ui" msgid="6426383462520888732">"बलपूर्वक GPU रेंडर करें"</string>
     <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d ड्रॉइंग के लिए GPU का बलपूर्वक उपयोग करें"</string>
     <string name="force_msaa" msgid="7920323238677284387">"4x MSAA को बाध्य करें"</string>
-    <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 ऐप्स  में 4x MSAA को सक्षम करें"</string>
+    <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 ऐप में 4x MSAA को चालू करें"</string>
     <string name="show_non_rect_clip" msgid="505954950474595172">"गैर-आयताकार क्लिप परिचालनों को डीबग करें"</string>
     <string name="track_frame_time" msgid="6146354853663863443">"प्रोफ़ाइल GPU रेंडरिंग"</string>
     <string name="window_animation_scale_title" msgid="6162587588166114700">"विंडो एनिमेशन स्‍केल"</string>
     <string name="transition_animation_scale_title" msgid="387527540523595875">"संक्रमण एनिमेशन स्‍केल"</string>
     <string name="animator_duration_scale_title" msgid="3406722410819934083">"एनिमेटर अवधि स्केल"</string>
     <string name="overlay_display_devices_title" msgid="5364176287998398539">"द्वितीयक डिस्प्ले अनुरूपित करें"</string>
-    <string name="debug_applications_category" msgid="4206913653849771549">"ऐप्स"</string>
+    <string name="debug_applications_category" msgid="4206913653849771549">"ऐप"</string>
     <string name="immediately_destroy_activities" msgid="1579659389568133959">"गतिविधियों को न रखें"</string>
-    <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"उपयोगकर्ता के छोड़ते ही प्रत्‍येक गतिविधि समाप्त करें"</string>
+    <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"उपयोगकर्ता के छोड़ते ही हर गतिविधि को खत्म करें"</string>
     <string name="app_process_limit_title" msgid="4280600650253107163">"पृष्ठभूमि प्रक्रिया सीमा"</string>
     <string name="show_all_anrs" msgid="28462979638729082">"सभी ANR दिखाएं"</string>
     <string name="show_all_anrs_summary" msgid="641908614413544127">"पृष्ठभूमि ऐप्स के लिए ऐप्स प्रतिसाद नहीं दे रहा डॉयलॉग दिखाएं"</string>
-    <string name="show_notification_channel_warnings" msgid="1399948193466922683">"नोटिफ़िकेशन चैनल चेतावनी दिखाएं"</string>
-    <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"ऐप्लिकेशन मान्य चैनल के बिना नोटिफ़िकेशन पोस्ट करे तो स्क्रीन पर चेतावनी दिखाएं"</string>
+    <string name="show_notification_channel_warnings" msgid="1399948193466922683">"सूचना चैनल चेतावनी दिखाएं"</string>
+    <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"ऐप सही चैनल के बिना सूचना पोस्ट करे तो स्क्रीन पर चेतावनी दिखाएं"</string>
     <string name="force_allow_on_external" msgid="3215759785081916381">"ऐप्स को बाहरी मेमोरी पर बाध्‍य करें"</string>
-    <string name="force_allow_on_external_summary" msgid="3640752408258034689">"इससे कोई भी ऐप्लिकेशन, मेनिफेस्ट मानों को अनदेखा करके, बाहरी मेमोरी पर लिखने योग्य बन जाता है"</string>
+    <string name="force_allow_on_external_summary" msgid="3640752408258034689">"इससे कोई भी ऐप बाहरी मेमोरी में रखने लायक बन जाता है चाहे उसकी मेनिफ़ेस्ट वैल्यू कुछ भी हो"</string>
     <string name="force_resizable_activities" msgid="8615764378147824985">"आकार बदले जाने के लिए गतिविधियों को बाध्य करें"</string>
-    <string name="force_resizable_activities_summary" msgid="6667493494706124459">"सभी गतिविधियों को एकाधिक विंडो के लिए आकार बदलने योग्य बनाएं, चाहे मेनिफेस्ट मान कुछ भी हों."</string>
-    <string name="enable_freeform_support" msgid="1461893351278940416">"फ़्रीफ़ॉर्म विंडो सक्षम करें"</string>
-    <string name="enable_freeform_support_summary" msgid="8247310463288834487">"प्रयोगात्मक फ़्रीफ़ॉर्म विंडो का समर्थन सक्षम करें."</string>
+    <string name="force_resizable_activities_summary" msgid="6667493494706124459">"सभी गतिविधियों को मल्टी-विंडो (एक से ज़्यादा ऐप, एक साथ) के लिए आकार बदलने लायक बनाएं, चाहे उनकी मेनिफ़ेस्ट वैल्यू कुछ भी हो."</string>
+    <string name="enable_freeform_support" msgid="1461893351278940416">"फ़्रीफ़ॉर्म विंडो (एक साथ कई विंडो दिखाना) चालू करें"</string>
+    <string name="enable_freeform_support_summary" msgid="8247310463288834487">"जाँच के लिए बनी फ़्रीफ़ॉर्म विंडो के लिए सहायता चालू करें."</string>
     <string name="local_backup_password_title" msgid="3860471654439418822">"डेस्‍कटॉप बैकअप पासवर्ड"</string>
-    <string name="local_backup_password_summary_none" msgid="6951095485537767956">"डेस्‍कटॉप पूर्ण बैकअप वर्तमान में सुरक्षित नहीं हैं"</string>
-    <string name="local_backup_password_summary_change" msgid="5376206246809190364">"डेस्कटॉप के पूर्ण बैकअप का पासवर्ड बदलने या निकालने के लिए टैप करें"</string>
+    <string name="local_backup_password_summary_none" msgid="6951095485537767956">"डेस्‍कटॉप के पूरे बैक अप फ़िलहाल सुरक्षित नहीं हैं"</string>
+    <string name="local_backup_password_summary_change" msgid="5376206246809190364">"डेस्कटॉप के पूरे बैक अप का पासवर्ड बदलने या हटाने के लिए टैप करें"</string>
     <string name="local_backup_password_toast_success" msgid="582016086228434290">"नया बैकअप पासवर्ड सेट किया गया"</string>
     <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"नया पासवर्ड तथा पुष्टि मेल नही खाते"</string>
     <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"सुरक्षित पासवर्ड सेट करने में विफल रहा"</string>
@@ -311,19 +319,19 @@
     <item msgid="8280754435979370728">"आंखों को दिखाई देने वाले प्राकृतिक रंग"</item>
     <item msgid="5363960654009010371">"डिजिटल सामग्री के लिए ऑप्टिमाइज़़ किए गए रंग"</item>
   </string-array>
-    <string name="inactive_apps_title" msgid="1317817863508274533">"निष्क्रिय ऐप्स"</string>
-    <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"निष्क्रिय. टॉगल करने के लिए टैप करें."</string>
-    <string name="inactive_app_active_summary" msgid="4174921824958516106">"सक्रिय. टॉगल करने पर टैप करें."</string>
+    <string name="inactive_apps_title" msgid="1317817863508274533">"बंद एेप"</string>
+    <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"बंद है. टॉगल करने के लिए टैप करें."</string>
+    <string name="inactive_app_active_summary" msgid="4174921824958516106">"सक्रिय. टॉगल करने के लिए टैप करें."</string>
     <string name="runningservices_settings_title" msgid="8097287939865165213">"चल रही सेवाएं"</string>
     <string name="runningservices_settings_summary" msgid="854608995821032748">"वर्तमान में चल रही सेवाओं को देखें और नियंत्रित करें"</string>
-    <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView कार्यान्वयन"</string>
-    <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView कार्यान्वयन सेट करें"</string>
+    <string name="select_webview_provider_title" msgid="4628592979751918907">"वेबव्यू लागू करें"</string>
+    <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"वेबव्यू सेट करें"</string>
     <string name="select_webview_provider_toast_text" msgid="5466970498308266359">"यह चयन अब मान्य नहीं है. पुनः प्रयास करें."</string>
-    <string name="convert_to_file_encryption" msgid="3060156730651061223">"फ़ाइल एन्क्रिप्शन में रूपांतरित करें"</string>
+    <string name="convert_to_file_encryption" msgid="3060156730651061223">"फ़ाइल आधारित सुरक्षित करने के तरीके में बदलें"</string>
     <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"रूपांतरित करें..."</string>
     <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"फ़ाइल पहले से एन्क्रिप्ट की हुई है"</string>
-    <string name="title_convert_fbe" msgid="1263622876196444453">"फ़ाइल आधारित एन्क्रिप्शन में रूपांतरित कर रहा है"</string>
-    <string name="convert_to_fbe_warning" msgid="6139067817148865527">"डेटा विभाजन को फ़ाइल आधारित एन्क्रिप्शन में रूपांतरित करें.\n !!चेतावनी!! इससे आपका सभी डेटा मिट जाएगा.\n यह सुविधा अल्फ़ा स्थिति में है और ठीक से कार्य नहीं कर सकती.\n जारी रखने के लिए \'वाइप करें और रूपांतरित करें…\' दबाएं."</string>
+    <string name="title_convert_fbe" msgid="1263622876196444453">"फ़ाइल के आधार पर सुरक्षित करने के तरीके में बदल  कर रहा है"</string>
+    <string name="convert_to_fbe_warning" msgid="6139067817148865527">"डेटा विभाजन (डेटा को अलग-अलग हिस्सों में बांटना) को फ़ाइल आधारित सुरक्षित करने के तरीके में बदलें.\n !!चेतावनी!! इससे आपका सभी डेटा मिट जाएगा.\n यह सुविधा अल्फ़ा स्थिति में है और हो सकता है ये ठीक से काम ना करे.\n जारी रखने के लिए \'वाइप करें और बदलें…\' दबाएं."</string>
     <string name="button_convert_fbe" msgid="5152671181309826405">"वाइप करें और रूपांतरित करें…"</string>
     <string name="picture_color_mode" msgid="4560755008730283695">"चित्र रंग मोड"</string>
     <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB का उपयोग करें"</string>
@@ -345,21 +353,20 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> शेष"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> पूरी तरह से चार्ज होने तक"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"अज्ञात"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"चार्ज हो रही है"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"चार्ज किया जा रहा है"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"चार्ज नहीं हो रही है"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"चार्ज नहीं हो रही है"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"प्लग इन है, अभी चार्ज नहीं हो सकती"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"पूरी"</string>
-    <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"व्यवस्थापक द्वारा नियंत्रित"</string>
+    <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"इसका नियंत्रण एडमिन के पास है"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"व्यवस्थापक ने सक्षम किया है"</string>
     <string name="disabled_by_admin" msgid="8505398946020816620">"व्यवस्थापक ने अक्षम किया है"</string>
-    <string name="disabled" msgid="9206776641295849915">"अक्षम किया गया"</string>
+    <string name="disabled" msgid="9206776641295849915">"बंद किया गया"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"अनुमति है"</string>
     <string name="external_source_untrusted" msgid="2677442511837596726">"अनुमति नहीं है"</string>
-    <string name="install_other_apps" msgid="6986686991775883017">"अनजान ऐप्लिकेशन इंस्टॉल करें"</string>
-    <string name="home" msgid="3256884684164448244">"सेटिंग होम"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"अनजान ऐप इंस्टॉल करें"</string>
+    <string name="home" msgid="3256884684164448244">"सेटिंग का होम पेज"</string>
   <string-array name="battery_labels">
     <item msgid="8494684293649631252">"0%"</item>
     <item msgid="8934126114226089439">"50%"</item>
@@ -374,8 +381,7 @@
     <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"सबसे बड़ा"</string>
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"कस्टम (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"सहायता और फ़ीडबैक"</string>
-    <string name="content_description_menu_button" msgid="8182594799812351266">"मेनू"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
+    <string name="content_description_menu_button" msgid="8182594799812351266">"मेन्यू"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"डेमो मोड में फ़ैक्टरी रीसेट के लिए पासवर्ड डालें"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"आगे"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"पासवर्ड आवश्यक"</string>
diff --git a/packages/SettingsLib/res/values-hr/arrays.xml b/packages/SettingsLib/res/values-hr/arrays.xml
index 36ba5c1..ffc76e8 100644
--- a/packages/SettingsLib/res/values-hr/arrays.xml
+++ b/packages/SettingsLib/res/values-hr/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (zadano)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Upotreba odabira sustava (zadano)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Omogućivanje izbornih kodeka"</item>
+    <item msgid="3304843301758635896">"Onemogućivanje izbornih kodeka"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Upotreba odabira sustava (zadano)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Omogućivanje izbornih kodeka"</item>
+    <item msgid="741805482892725657">"Onemogućivanje izbornih kodeka"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Upotreba odabira sustava (zadano)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 8ba4034..a58561a 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -34,18 +34,22 @@
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Nije u rasponu"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"Neće se povezati automatski"</string>
     <string name="wifi_no_internet" msgid="3880396223819116454">"Nema pristupa internetu"</string>
-    <string name="saved_network" msgid="4352716707126620811">"Spremljeno: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="saved_network" msgid="4352716707126620811">"Spremila aplik. <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatski povezan putem %1$s"</string>
     <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatski povezan putem ocjenjivača mreže"</string>
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Povezano putem %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupno putem %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Povezano, bez interneta"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pristupna je točka privremeno puna"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Povezano putem mreže %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Dostupno putem mreže %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Vrlo sporo"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Sporo"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"U redu"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Srednje"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Brzo"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Vrlo brzo"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Niste povezani"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Isključivanje…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Povezivanje…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi signal ima dva stupca."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi signal ima tri stupca."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi signal je pun."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Otvorena mreža"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sigurna mreža"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Uklonjene aplikacije"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Uklonjene aplikacije i korisnici"</string>
@@ -165,7 +171,7 @@
     <string name="tethering_settings_not_available" msgid="6765770438438291012">"Postavke dijeljenja veze nisu dostupne ovom korisniku"</string>
     <string name="apn_settings_not_available" msgid="7873729032165324000">"Postavke pristupne točke nisu dostupne ovom korisniku"</string>
     <string name="enable_adb" msgid="7982306934419797485">"Otklanjanje pogrešaka putem USB-a"</string>
-    <string name="enable_adb_summary" msgid="4881186971746056635">"Otklanjanje pogrešaka s priključenim USB-om"</string>
+    <string name="enable_adb_summary" msgid="4881186971746056635">"Otklanjanje pogrešaka putem USB-a"</string>
     <string name="clear_adb_keys" msgid="4038889221503122743">"Opoziv autorizacija za otklanjanje pogrešaka putem USB-a"</string>
     <string name="bugreport_in_power" msgid="7923901846375587241">"Prečac izvješća o pogreškama"</string>
     <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Prikaži gumb u izborniku napajanja za izradu izvješća o programskim pogreškama"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Uvijek dopusti slobodno traženje Wi-Fi mreže"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilni podaci uvijek aktivni"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardversko ubrzanje za modemsko povezivanje"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Prikaži Bluetooth uređaje bez naziva"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogući apsolutnu glasnoću"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Omogući zvuk zvona unutar pojasne širine"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Verzija AVRCP-a za Bluetooth"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Potvrdi aplikacije putem USB-a"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Provjerite uzrokuju li aplikacije instalirane putem ADB-a/ADT-a poteškoće."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Prikazivat će se Bluetooth uređaji bez naziva (samo MAC adrese)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Onemogućuje Bluetoothovu značajku apsolutne glasnoće ako udaljeni uređaji imaju poteškoća sa zvukom, kao što su, primjerice, neprihvatljiva glasnoća ili nepostojanje kontrole."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Omogući reprodukciju melodija zvona telefona putem Bluetooth slušalica"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Lokalni terminal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – još <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> do potpune napunjenosti"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Nepoznato"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Punjenje"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"punjenje"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Ne puni se"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ne puni se"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Uključen, trenutačno se ne može puniti"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Puna"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontrolira administrator"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Omogućio administrator"</string>
@@ -358,7 +365,7 @@
     <string name="disabled" msgid="9206776641295849915">"Onemogućeno"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"Dopušteno"</string>
     <string name="external_source_untrusted" msgid="2677442511837596726">"Nije dopušteno"</string>
-    <string name="install_other_apps" msgid="6986686991775883017">"Instalacija nepoznatih aplikacija"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"Instalacija nepoznatih apl."</string>
     <string name="home" msgid="3256884684164448244">"Početni zaslon postavki"</string>
   <string-array name="battery_labels">
     <item msgid="8494684293649631252">"0%"</item>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Prilagođeno (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Pomoć i povratne informacije"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Izbornik"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Unesite zaporku za resetiranje u demo načinu"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Dalje"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Potrebna je zaporka"</string>
diff --git a/packages/SettingsLib/res/values-hu/arrays.xml b/packages/SettingsLib/res/values-hu/arrays.xml
index 42e46bb..7ad170a 100644
--- a/packages/SettingsLib/res/values-hu/arrays.xml
+++ b/packages/SettingsLib/res/values-hu/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (alapértelmezett)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Rendszerérték (alapértelmezett)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Hang: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Hang: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Nem kötelező kodekek engedélyezése"</item>
+    <item msgid="3304843301758635896">"Nem kötelező kodekek letiltása"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Rendszerérték (alapértelmezett)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Hang: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Hang: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Engedélyezi a nem kötelező kodekeket"</item>
+    <item msgid="741805482892725657">"Letiltja a nem kötelező kodekeket"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Rendszerérték (alapértelmezett)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index a544125..82e7432 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Csatlakozva a következőn keresztül: %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Elérhető a következőn keresztül: %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Csatlakozva, nincs internetelérés"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"A hozzáférési pont átmenetileg megtelt"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Csatlakozva a következőn keresztül: %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Elérhető a következőn keresztül: %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Nagyon lassú"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lassú"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Rendben"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Közepes"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Gyors"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Nagyon gyors"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Szétkapcsolva"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Szétkapcsolás..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Csatlakozás…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi-jel: két sáv."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi-jel: három sáv."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi-jel: teljes."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Nyílt hálózat"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Biztonságos hálózat"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Eltávolított alkalmazások"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Eltávolított alkalmazások és felhasználók"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi-roaming ellenőrzésének engedélyezése mindig"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"A mobilhálózati kapcsolat mindig aktív"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Internetmegosztás hardveres gyorsítása"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Név nélküli Bluetooth-eszközök megjelenítése"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Abszolút hangerő funkció letiltása"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Sávon belüli csörgetés engedélyezése"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"A Bluetooth AVRCP-verziója"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB-n keresztül telepített alkalmazások ellenőrzése"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Az ADB/ADT útján telepített alkalmazások ellenőrzése kártékony viselkedésre."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Név nélküli Bluetooth-eszközök jelennek meg (csak MAC-címekkel)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Letiltja a Bluetooth abszolút hangerő funkcióját a távoli eszközökkel kapcsolatos hangerőproblémák – például elfogadhatatlanul magas vagy nem vezérelhető hangerő – esetén."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"A telefonon lévő csengőhangok Bluetooth-headseteken való lejátszásának engedélyezése"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Helyi végpont"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> van hátra"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> a teljes feltöltésig"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Ismeretlen"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Töltés"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"töltés"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Nem tölt"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nem töltődik"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Csatlakoztatva, jelenleg nem tölt"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Feltöltve"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Rendszergazda által irányítva"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"A rendszergazda bekapcsolta"</string>
@@ -358,7 +365,7 @@
     <string name="disabled" msgid="9206776641295849915">"Letiltva"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"Engedélyezett"</string>
     <string name="external_source_untrusted" msgid="2677442511837596726">"Nem engedélyezett"</string>
-    <string name="install_other_apps" msgid="6986686991775883017">"Ismeretlen alkalmazások telepítése"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"Új alkalmazások telepítése"</string>
     <string name="home" msgid="3256884684164448244">"Beállítások kezdőlapja"</string>
   <string-array name="battery_labels">
     <item msgid="8494684293649631252">"0%"</item>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Egyéni (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Súgó és visszajelzés"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menü"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Írja be a jelszót a visszaállításhoz"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Következő"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Jelszó szükséges"</string>
diff --git a/packages/SettingsLib/res/values-hy/arrays.xml b/packages/SettingsLib/res/values-hy/arrays.xml
index a445eac..7406554 100644
--- a/packages/SettingsLib/res/values-hy/arrays.xml
+++ b/packages/SettingsLib/res/values-hy/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (կանխադրված)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Օգտագործել համակարգի կարգավորումը (կանխադրված)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> աուդիո"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> աուդիո"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Միացնել լրացուցիչ կոդեկները"</item>
+    <item msgid="3304843301758635896">"Անջատել լրացուցիչ կոդեկները"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Օգտագործել համակարգի կարգավորումը (կանխադրված)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> աուդիո"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> աուդիո"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Միացնել լրացուցիչ կոդեկները"</item>
+    <item msgid="741805482892725657">"Անջատել լրացուցիչ կոդեկները"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Օգտագործել համակարգի կարգավորումը (կանխադրված)"</item>
     <item msgid="8895532488906185219">"44,1 կՀց"</item>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index cb04234..9e6e101 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Կապակցված է %1$s-ի միջոցով"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Հասանելի է %1$s-ի միջոցով"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Կապակցված է առանց համացանցի"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Հասանելիության կետը ժամանակավորապես լիքն է"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Միացված է %1$s-ի միջոցով"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Հասանելի է %1$s-ի միջոցով"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Շատ դանդաղ"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Դանդաղ"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Հաստատել"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Միջին"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Արագ"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Շատ արագ"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Անջատված է"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Անջատվում է..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Միանում է..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi-ի ուժգնությունը՝ երկու գիծ:"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi-ի ուժգնությունը՝ երեք գիծ:"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi-ի ազդանշանը ուժեղ է:"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Բաց ցանց"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Անվտանգ ցանց"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Հեռացված ծրագրեր"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Հեռացված հավելվածներն ու օգտատերերը"</string>
@@ -112,7 +118,7 @@
     <string name="managed_user_title" msgid="8109605045406748842">"Բոլոր աշխատանքային հավելվածները"</string>
     <string name="user_guest" msgid="8475274842845401871">"Հյուր"</string>
     <string name="unknown" msgid="1592123443519355854">"Անհայտ"</string>
-    <string name="running_process_item_user_label" msgid="3129887865552025943">"Օտատեր՝ <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
+    <string name="running_process_item_user_label" msgid="3129887865552025943">"Օգտատեր՝ <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="launch_defaults_some" msgid="313159469856372621">"Որոշ կանխադրված կարգավորումներ կան"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"Կանխադրված կարգավորումներ չկան"</string>
     <string name="tts_settings" msgid="8186971894801348327">"Տեքստի հնչեցման կարգավորումներ"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Միշտ թույլատրել Wi‑Fi ռոումինգի որոնումը"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Բջջային ինտերնետը միշտ ակտիվ է"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Սարքակազմի արագացման միացում"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Ցուցադրել Bluetooth սարքերն առանց անունների"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Անջատել ձայնի բացարձակ ուժգնությունը"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Միացնել ներխմբային զանգը"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP տարբերակը"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Այս կարգավորումները միայն ծրագրավորման նպատակների համար են նախատեսված: Դրանք կարող են խանգարել ձեր սարքի կամ ծրագրի աշխատանքին:"</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Ստուգել հավելվածները USB-ի նկատմամբ"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Ստուգեք տեղադրված հավելվածը ADB/ADT-ի միջոցով կասկածելի աշխատանքի պատճառով:"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth սարքերը կցուցադրվեն առանց անունների (միայն MAC հասցեները)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Կասեցնում է Bluetooth-ի ձայնի բացարձակ ուժգնության գործառույթը՝ հեռավոր սարքերի հետ ձայնի ուժգնությանը վերաբերող խնդիրներ ունենալու դեպքում (օրինակ՝ երբ ձայնի ուժգնությունն անընդունելի է կամ դրա կառավարումը հնարավոր չէ):"</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Ընձեռել հեռախոսի բոլոր զանգերանգների Bluetooth ականջակալներով նվագարկումը"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Տեղային տերմինալ"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - մնացել է <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> մինչև լրիվ լիցքավորումը"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Անհայտ"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Լիցքավորում"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"լիցքավորում"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Չի լիցքավորվում"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Չի լիցքավորվում"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Միացված է հոսանքի աղբյուրին, սակայն այս պահին չի կարող լիցքավորվել"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Լիցքավորված"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Վերահսկվում է ադմինիստրատորի կողմից"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Միացված է ադմինիստրատորի կողմից"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Հատուկ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Օգնություն և հետադարձ կապ"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Ընտրացանկ"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Մուտքագրեք գաղտնաբառը՝ ցուցադրական ռեժիմում գործարանային վերակայում կատարելու համար"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Հաջորդը"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Պահանջվում է գաղտնաբառ"</string>
diff --git a/packages/SettingsLib/res/values-in/arrays.xml b/packages/SettingsLib/res/values-in/arrays.xml
index ec1b6c4..0e2217d 100644
--- a/packages/SettingsLib/res/values-in/arrays.xml
+++ b/packages/SettingsLib/res/values-in/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Gunakan Pilihan Sistem (Default)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Aktifkan Codec Opsional"</item>
+    <item msgid="3304843301758635896">"Nonaktifkan Codec Opsional"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Gunakan Pilihan Sistem (Default)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Aktifkan Codec Opsional"</item>
+    <item msgid="741805482892725657">"Nonaktifkan Codec Opsional"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Gunakan Pilihan Sistem (Default)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index a8dd4c2..4fd0593 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Terhubung melalui %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Tersedia melalui %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Tersambung, tidak ada internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Titik akses penuh untuk sementara"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Tersambung melalui %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Tersedia melalui %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Sangat Lambat"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lambat"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Oke"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Sedang"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Cepat"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Sangat Cepat"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Sambungan terputus"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Memutus sambungan..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Menyambung…"</string>
@@ -90,7 +94,7 @@
     <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Sandingkan"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"SANDINGKAN"</string>
     <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"Batal"</string>
-    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Penyandingan memberi akses ke kontak dan riwayat panggilan saat tersambung"</string>
+    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Penyandingan memberi akses ke kontak dan histori panggilan saat tersambung"</string>
     <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"Tidak dapat menyandingkan dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Tidak dapat menyandingkan dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g> karena PIN atau kode sandi salah."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Tidak dapat berkomunikasi dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi dua baris"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi tiga baris."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Sinyal Wi-Fi penuh."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Jaringan terbuka"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Jaringan aman"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"OS Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplikasi dihapus"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplikasi dan pengguna yang dihapus"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Selalu izinkan Pemindaian Roaming Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Data seluler selalu aktif"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Akselerasi hardware tethering"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Tampilkan perangkat Bluetooth tanpa nama"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Nonaktifkan volume absolut"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Aktifkan dering in-band"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versi AVRCP Bluetooth"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Setelan ini hanya dimaksudkan untuk penggunaan pengembangan. Setelan dapat menyebabkan perangkat dan aplikasi yang menerapkannya rusak atau tidak berfungsi semestinya."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifikasi aplikasi melalui USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Periksa perilaku membahayakan dalam aplikasi yang terpasang melalui ADB/ADT."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Perangkat Bluetooth tanpa nama (hanya alamat MAC) akan ditampilkan"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Menonaktifkan fitur volume absolut Bluetooth jika ada masalah volume dengan perangkat jarak jauh, misalnya volume terlalu keras atau kurangnya kontrol."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Izinkan nada dering di ponsel diputar di headset Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminal lokal"</string>
@@ -271,7 +279,7 @@
     <string name="debug_layout_summary" msgid="2001775315258637682">"Tampilkan batas klip, margin, dll."</string>
     <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Paksa arah tata letak RTL"</string>
     <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Paksa arah tata letak layar RTL untuk semua lokal"</string>
-    <string name="force_hw_ui" msgid="6426383462520888732">"Paksa perenderan GPU"</string>
+    <string name="force_hw_ui" msgid="6426383462520888732">"Paksa rendering GPU"</string>
     <string name="force_hw_ui_summary" msgid="5535991166074861515">"Paksa penggunaan GPU untuk gambar 2d"</string>
     <string name="force_msaa" msgid="7920323238677284387">"Paksa 4x MSAA"</string>
     <string name="force_msaa_summary" msgid="9123553203895817537">"Aktifkan 4x MSAA dalam aplikasi OpenGL ES 2.0"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> tersisa"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> lagi terisi penuh"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Tidak diketahui"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Mengisi daya"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"mengisi daya baterai"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Tidak mengisi daya"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Tidak mengisi daya"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Tercolok, tidak dapat mengisi baterai sekarang"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Penuh"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Dikontrol oleh admin"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Diaktifkan oleh admin"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"(<xliff:g id="DENSITYDPI">%d</xliff:g>) khusus"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Bantuan &amp; masukan"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Masukkan sandi untuk mengembalikan ke setelan pabrik dalam mode demo"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Berikutnya"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Perlu sandi"</string>
diff --git a/packages/SettingsLib/res/values-is/arrays.xml b/packages/SettingsLib/res/values-is/arrays.xml
index 3c3aca0..a8a01a4 100644
--- a/packages/SettingsLib/res/values-is/arrays.xml
+++ b/packages/SettingsLib/res/values-is/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (sjálfgefið)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Nota val kerfisins (sjálfgefið)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> hljóð"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> hljóð"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Gera valfrjálsa kóðara virka"</item>
+    <item msgid="3304843301758635896">"Gera valfrjálsa kóðara óvirka"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Nota val kerfisins (sjálfgefið)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> hljóð"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> hljóð"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Gera valfrjálsa kóðara virka"</item>
+    <item msgid="741805482892725657">"Gera valfrjálsa kóðara óvirka"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Nota val kerfisins (sjálfgefið)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index 7f541ce..c4d6777 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Tengt í gegnum %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Í boði í gegnum %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Tengt, enginn internetaðgangur"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Aðgangsstaður tímabundið fullur"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Tengt í gegnum %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Í boði í gegnum %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Mjög hægt"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Hægt"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Í lagi"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Miðlungshratt"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Hratt"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Mjög hratt"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Aftengt"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Aftengist…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Tengist…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: Tvö strik."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: Þrjú strik."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Fullur Wi-Fi sendistyrkur."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Opið net"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Öruggt net"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android stýrikerfið"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Fjarlægð forrit"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Fjarlægð forrit og notendur"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Leyfa alltaf reikileit með Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Alltaf kveikt á farsímagögnum"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Vélbúnaðarhröðun fyrir tjóðrun"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Sýna Bluetooth-tæki án heita"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Slökkva á samstillingu hljóðstyrks"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Leyfa símtöl á sömu rás"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP-útgáfa"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Þ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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Staðfesta forrit gegnum USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kanna skaðlega hegðun forrita sem sett eru upp frá ADB/ADT."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth-tæki án heita (aðeins MAC-vistfang) verða birt"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Slekkur á samstillingu Bluetooth-hljóðstyrks ef vandamál koma upp með hljóðstyrk hjá fjartengdum tækjum, svo sem of hár hljóðstyrkur eða erfiðleikar við stjórnun."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Leyfa að hringitónar í símanum spilist í Bluetooth-höfuðtólum"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Staðbundin skipanalína"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> eftir"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> þar til fullri hleðslu er náð"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Óþekkt"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Í hleðslu"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"í hleðslu"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Ekki í hleðslu"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ekki í hleðslu"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Í sambandi, ekki hægt að hlaða eins og er"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Fullhlaðin"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Stjórnað af kerfisstjóra"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Gert virkt af kerfisstjóra"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Sérsniðið (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Hjálp og ábendingar"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Valmynd"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Sláðu inn aðgangsorð til að framkvæma núllstillingu í sýnisútgáfu"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Áfram"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Aðgangsorðs krafist"</string>
diff --git a/packages/SettingsLib/res/values-it/arrays.xml b/packages/SettingsLib/res/values-it/arrays.xml
index d30befa..42a246d 100644
--- a/packages/SettingsLib/res/values-it/arrays.xml
+++ b/packages/SettingsLib/res/values-it/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (predefinita)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Usa selezione di sistema (predefinita)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Attiva codec facoltativi"</item>
+    <item msgid="3304843301758635896">"Disattiva codec facoltativi"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Usa selezione di sistema (predefinita)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Attiva codec facoltativi"</item>
+    <item msgid="741805482892725657">"Disattiva codec facoltativi"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Usa selezione di sistema (predefinita)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index 5598d87..85993aa 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Collegato tramite %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Disponibile tramite %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connesso senza Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punto di accesso momentaneamente al completo"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Connesso tramite %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Disponibile tramite %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Molto lenta"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Media"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Veloce"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Molto veloce"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Disconnesso"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Disconnessione..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Connessione..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: due barre."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: tre barre."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Segnale Wi-Fi completo."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rete aperta"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rete protetta"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Sistema operativo Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Applicazioni rimosse"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"App e utenti rimossi"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Consenti sempre scansioni roaming Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Dati mobili sempre attivi"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering accelerazione hardware"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostra dispositivi Bluetooth senza nome"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disattiva volume assoluto"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Attiva suoneria in banda"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versione Bluetooth AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifica app tramite USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Controlla che le app installate tramite ADB/ADT non abbiano un comportamento dannoso."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Verranno mostrati solo dispositivi Bluetooth senza nome (solo indirizzo MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Consente di disattivare la funzione del volume assoluto Bluetooth in caso di problemi con il volume dei dispositivi remoti, ad esempio un volume troppo alto o la mancanza di controllo."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Consenti la riproduzione delle suonerie del telefono tramite gli auricolari Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminale locale"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - Tempo rimanente: <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> alla carica completa"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Sconosciuta"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"In carica"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"in carica"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Non in carica"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Non in carica"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Collegato alla corrente. Impossibile caricare al momento"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Carica"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Gestita dall\'amministratore"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Attivata dall\'amministratore"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizzato (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Guida e feedback"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Inserisci la password per eseguire il ripristino dei dati di fabbrica in modalità demo"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Avanti"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Password obbligatoria"</string>
diff --git a/packages/SettingsLib/res/values-iw/arrays.xml b/packages/SettingsLib/res/values-iw/arrays.xml
index 5d7f220..b8197a8 100644
--- a/packages/SettingsLib/res/values-iw/arrays.xml
+++ b/packages/SettingsLib/res/values-iw/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"‏AVRCP 1.4 (ברירת המחדל)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"שימוש בבחירת המערכת (ברירת המחדל)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"אודיו <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"אודיו <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"‏הפעלה של Codecs אופציונליים"</item>
+    <item msgid="3304843301758635896">"‏השבתה של Codecs אופציונליים"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"השתמש בבחירת המערכת (ברירת המחדל)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"אודיו <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"אודיו <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"‏הפעלה של Codecs אופציונליים"</item>
+    <item msgid="741805482892725657">"‏השבתה של Codecs אופציונליים"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"שימוש בבחירת המערכת (ברירת המחדל)"</item>
     <item msgid="8895532488906185219">"44.1 קילו-הרץ"</item>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index 26ce32e..df690ef 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"‏מחובר דרך %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"‏זמינה דרך %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"מחובר. אין אינטרנט"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"נקודת הגישה מלאה באופן זמני"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"‏מחובר לרשת של %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"‏זמינה דרך %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"איטית מאוד"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"איטית"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"אישור"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"בינונית"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"מהירה"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"מהירה מאוד"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"מנותק"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"מתנתק..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"מתחבר ..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"‏שני פסים של Wi-Fi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"‏שלושה פסים של Wi-Fi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"‏אות Wi-Fi מלא."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"רשת פתוחה"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"רשת מאובטחת"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"אפליקציות שהוסרו"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"אפליקציות ומשתמשים שהוסרו"</string>
@@ -141,8 +147,8 @@
     <string name="tts_engine_settings_button" msgid="1030512042040722285">"השק הגדרות מנוע"</string>
     <string name="tts_engine_preference_section_title" msgid="448294500990971413">"מנוע מועדף"</string>
     <string name="tts_general_section_title" msgid="4402572014604490502">"כללי"</string>
-    <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"אפס את גובה צליל הדיבור"</string>
-    <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"אפס את גובה הצליל שבו מושמע הטקסט לברירת המחדל."</string>
+    <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"איפוס של גובה צליל הדיבור"</string>
+    <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"איפוס גובה הצליל שבו מושמע הטקסט לברירת המחדל."</string>
   <string-array name="tts_rate_entries">
     <item msgid="6695494874362656215">"איטי מאוד"</item>
     <item msgid="4795095314303559268">"איטי"</item>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"‏התר תמיד סריקות נדידה של Wi‑Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"חבילת הגלישה פעילה תמיד"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"שיפור מהירות באמצעות חומרה לצורך שיתוף אינטרנט בין ניידים"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"‏הצגת מכשירי Bluetooth ללא שמות"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"השבת עוצמת קול מוחלטת"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"‏הפעל צלצולים בערוץ ה-Bluetooth‏ (in-band ringing)"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"‏Bluetooth גרסה AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"הגדרות אלה מיועדות לשימוש בפיתוח בלבד. הן עלולות לגרום למכשיר או לאפליקציות המותקנות בו לקרוס או לפעול באופן לא תקין."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"‏אמת אפליקציות באמצעות USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"‏בדוק אפליקציות שהותקנו באמצעות ADB/ADT לאיתור התנהגות מזיקה."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"‏יוצגו מכשירי Bluetooth ללא שמות (כתובות MAC בלבד)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"‏משבית את תכונת עוצמת הקול המוחלטת ב-Bluetooth במקרה של בעיות בעוצמת הקול במכשירים מרוחקים, כגון עוצמת קול רמה מדי או חוסר שליטה ברמת העוצמה."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"‏הפעלת רינגטונים באוזניות Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"מסוף מקומי"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - נותרו <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g>‏ - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> עד לטעינה מלאה"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"לא ידוע"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"טוען"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"בטעינה"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"לא בטעינה"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"לא טוען"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"המכשיר מחובר, אבל לא ניתן לטעון עכשיו"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"מלא"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"נמצא בשליטת מנהל מערכת"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"מופעל על ידי מנהל המכשיר"</string>
@@ -358,7 +365,7 @@
     <string name="disabled" msgid="9206776641295849915">"מושבת"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"מורשה"</string>
     <string name="external_source_untrusted" msgid="2677442511837596726">"לא מורשה"</string>
-    <string name="install_other_apps" msgid="6986686991775883017">"להתקין גם אם לא מוכר?"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"להתקין גם אם לא מוכר לך?"</string>
     <string name="home" msgid="3256884684164448244">"דף הבית של ההגדרות"</string>
   <string-array name="battery_labels">
     <item msgid="8494684293649631252">"0%"</item>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"מותאם אישית (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"עזרה ומשוב"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"תפריט"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"הזן סיסמה כדי לבצע איפוס להגדרות היצרן במצב הדגמה"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"הבא"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"דרושה סיסמה"</string>
diff --git a/packages/SettingsLib/res/values-ja/arrays.xml b/packages/SettingsLib/res/values-ja/arrays.xml
index 3bec570..aa20097 100644
--- a/packages/SettingsLib/res/values-ja/arrays.xml
+++ b/packages/SettingsLib/res/values-ja/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4(デフォルト)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"システムの選択(デフォルト)を使用"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> オーディオ"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> オーディオ"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"オプションのコーデックの有効化"</item>
+    <item msgid="3304843301758635896">"オプションのコーデックの無効化"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"システムの選択(デフォルト)を使用"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> オーディオ"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> オーディオ"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"オプションのコーデックを有効にします"</item>
+    <item msgid="741805482892725657">"オプションのコーデックを無効にします"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"システムの選択(デフォルト)を使用"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 30c7267..44f0b04 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -40,15 +40,19 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s経由で接続"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s経由で使用可能"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"接続済み、インターネットは利用できません"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"アクセス ポイントが一時的にいっぱいです"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s 経由で接続済み"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s 経由で使用可能"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"とても遅い"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"遅い"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"普通"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"速い"</string>
-    <string name="speed_label_very_fast" msgid="2265363430784523409">"とても速い"</string>
+    <string name="speed_label_very_fast" msgid="2265363430784523409">"非常に速い"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"切断"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"切断中..."</string>
-    <string name="bluetooth_connecting" msgid="8555009514614320497">"接続中..."</string>
+    <string name="bluetooth_connecting" msgid="8555009514614320497">"接続処理中..."</string>
     <string name="bluetooth_connected" msgid="6038755206916626419">"接続"</string>
     <string name="bluetooth_pairing" msgid="1426882272690346242">"ペアとして設定中..."</string>
     <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"接続済み(電話を除く)"</string>
@@ -101,10 +105,12 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fiはレベル2です。"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fiはレベル3です。"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fiの電波はフルです。"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"オープンネットワーク"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"保護されたネットワーク"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"削除したアプリケーション"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"削除されたアプリとユーザー"</string>
-    <string name="tether_settings_title_usb" msgid="6688416425801386511">"USBテザリング"</string>
+    <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB テザリング"</string>
     <string name="tether_settings_title_wifi" msgid="3277144155960302049">"ポータブルアクセスポイント"</string>
     <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Bluetoothテザリング"</string>
     <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"テザリング"</string>
@@ -113,7 +119,7 @@
     <string name="user_guest" msgid="8475274842845401871">"ゲスト"</string>
     <string name="unknown" msgid="1592123443519355854">"不明"</string>
     <string name="running_process_item_user_label" msgid="3129887865552025943">"ユーザー: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
-    <string name="launch_defaults_some" msgid="313159469856372621">"一部デフォルトを設定"</string>
+    <string name="launch_defaults_some" msgid="313159469856372621">"一部デフォルトで設定"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"デフォルトの設定なし"</string>
     <string name="tts_settings" msgid="8186971894801348327">"テキスト読み上げの設定"</string>
     <string name="tts_settings_title" msgid="1237820681016639683">"テキスト読み上げの出力"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fiローミングスキャンを常に許可する"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"モバイルデータを常に ON にする"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"テザリング時のハードウェア アクセラレーション"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth デバイスを名前なしで表示"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"絶対音量を無効にする"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"インバンド リンギングを有効にする"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP バージョン"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"これらの設定は開発専用に設計されています。そのため端末や端末上のアプリが故障したり正常に動作しなくなったりするおそれがあります。"</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB経由のアプリを確認"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT経由でインストールされたアプリに不正な動作がないかを確認する"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth デバイスを名前なしで(MAC アドレスのみで)表示します"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"リモート端末で音量に関する問題(音量が大きすぎる、制御できないなど)が発生した場合に、Bluetooth の絶対音量の機能を無効にする。"</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"スマートフォンの着信音が Bluetooth ヘッドセットで再生されることを許可する"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"ローカルターミナル"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>(残り時間)"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - フル充電まで <xliff:g id="TIME">^2</xliff:g>"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"不明"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"充電中"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"充電しています"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"充電していません"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"充電していません"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"接続されていますが、現在、充電できません"</string>
     <!-- String.format failed for translation -->
     <!-- no translation found for battery_info_status_full (2824614753861462808) -->
     <skip />
@@ -377,7 +384,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"カスタム(<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"ヘルプとフィードバック"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"メニュー"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"デモモードで初期状態にリセットするには、パスワードを入力してください"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"次へ"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"パスワード必須"</string>
diff --git a/packages/SettingsLib/res/values-ka/arrays.xml b/packages/SettingsLib/res/values-ka/arrays.xml
index e9cfc61..7e36f86 100644
--- a/packages/SettingsLib/res/values-ka/arrays.xml
+++ b/packages/SettingsLib/res/values-ka/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (ნაგულისხმევი)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"სისტემის არჩეულის გამოყენება (ნაგულისხმევი)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> აუდიო"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> აუდიო"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"არასავალდებულო კოდეკების ჩართვა"</item>
+    <item msgid="3304843301758635896">"არასავალდებულო კოდეკების გათიშვა"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"სისტემის არჩეულის გამოყენება (ნაგულისხმევი)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> აუდიო"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> აუდიო"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"არასავალდებულო კოდეკების ჩართვა"</item>
+    <item msgid="741805482892725657">"არასავალდებულო კოდეკების გათიშვა"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"სისტემის არჩეულის გამოყენება (ნაგულისხმევი)"</item>
     <item msgid="8895532488906185219">"44,1 კჰც"</item>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 553c4a0..49a6902 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-ით დაკავშირებული"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"ხელმისაწვდომია %1$s-ით"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"დაკავშირებულია, ინტერნეტის გარეშე"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"წვდომის წერტილი დროებით გადატვირთულია"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s-ით დაკავშირებული"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"ხელმისაწვდომია %1$s-ით"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"ძალიან ნელი"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"ნელი"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"კარგი"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"საშუალო"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"სწრაფი"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"ძალიან სწრაფი"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"კავშირი გაწყვეტილია"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"მიმდინარეობს გათიშვა…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"მიმდინარეობს დაკავშირება…"</string>
@@ -101,14 +105,16 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"WiFi სიგნალი ორ ზოლზეა."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"WiFi სიგნალი სამ ზოლზეა."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"WiFi სიგნალი სრულია."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"ღია ქსელი"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"დაცული ქსელი"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"აპების წაშლა"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"წაშლილი აპები და მომხმარებლები"</string>
-    <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB მოდემი"</string>
+    <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB ტეტერინგი"</string>
     <string name="tether_settings_title_wifi" msgid="3277144155960302049">"პორტატული უსადენო ქსელი"</string>
-    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Bluetooth-მოდემი"</string>
-    <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"მოდემის რეჟიმი"</string>
-    <string name="tether_settings_title_all" msgid="8356136101061143841">"მოდემი და პორტატული უსადენო ქსელი"</string>
+    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Bluetooth ტეტერინგი"</string>
+    <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"ტეტერინგი"</string>
+    <string name="tether_settings_title_all" msgid="8356136101061143841">"ტეტერინგი და პორტატული უსადენო ქსელი"</string>
     <string name="managed_user_title" msgid="8109605045406748842">"სამსახურის ყველა აპი"</string>
     <string name="user_guest" msgid="8475274842845401871">"სტუმარი"</string>
     <string name="unknown" msgid="1592123443519355854">"უცნობი"</string>
@@ -162,7 +168,7 @@
     <string name="development_settings_summary" msgid="1815795401632854041">"პარამეტრების დაყენება აპების დეველოპერებისთვის"</string>
     <string name="development_settings_not_available" msgid="4308569041701535607">"ამ მომხმარებლისთვის დეველოპერის პარამეტრები არ არის ხელმისაწვდომი"</string>
     <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN პარამეტრები ამ მომხმარებლისათვის მიუწვდომელია"</string>
-    <string name="tethering_settings_not_available" msgid="6765770438438291012">"ტეთერინგის პარამეტრები ამ მომხმარებლისათვის მიუწვდომელია"</string>
+    <string name="tethering_settings_not_available" msgid="6765770438438291012">"ტეტერინგის პარამეტრები ამ მომხმარებლისათვის მიუწვდომელია"</string>
     <string name="apn_settings_not_available" msgid="7873729032165324000">"წვდომის წერტილის (APN) პარამეტრები ამ მომხმარებლისათვის მიუწვდომელია"</string>
     <string name="enable_adb" msgid="7982306934419797485">"USB გამართვა"</string>
     <string name="enable_adb_summary" msgid="4881186971746056635">"გამართვის რეჟიმი, როდესაც USB შეერთებულია"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi Roam სკანირების მუდამ დაშვება"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"მობილური ინტერნეტის ყოველთვის გააქტიურება"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"ტეტერინგის აპარატურული აჩქარება"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth-მოწყობილობების ჩვენება სახელების გარეშე"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ხმის აბსოლუტური სიძლიერის გათიშვა"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"ზოლსშიდა დარეკვის ჩართვა"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth-ის AVRCP-ის ვერსია"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"ამ პარამეტრების გამოყენება დასაშვებია მხოლოდ დეველოპერული მიზნებით. მათმა გამოყენებამ შეიძლება გამოიწვიოს თქვენი მოწყობილობის და მისი აპლიკაციების დაზიანება ან გაუმართავი მუშაობა."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"აპლიკაციების USB-ს საშუალებით შემოწმება"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"შეამოწმეთ, რამდენად უსაფრთხოა ADB/ADT-ის საშუალებით ინსტალირებული აპლიკაციები."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth-მოწყობილობები ნაჩვენები იქნება სახელების გარეშე (მხოლოდ MAC-მისამართები)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"გათიშავს Bluetooth-ის ხმის აბსოლუტური სიძლიერის ფუნქციას დისტანციურ მოწყობილობებზე ხმასთან დაკავშირებული ისეთი პრობლემების არსებობის შემთხვევაში, როგორიცაა ხმის დაუშვებლად მაღალი სიძლიერე ან კონტროლის შეუძლებლობა."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"ტელეფონის ზარების Bluetooth-ყურსაცვამებზე დაკვრის დაშვება"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"ადგილობრივი ტერმინალი"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> — დარჩენილია <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> — სრულ დატენვამდე დარჩა <xliff:g id="TIME">^2</xliff:g>"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> — <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"უცნობი"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"იტენება"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"იტენება"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"არ იტენება"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"არ იტენება"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"მიერთებულია, დატენვა ამჟამად ვერ ხერხდება"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"ბატარეა დატენილია"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"იმართება ადმინისტრატორის მიერ"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"ჩართულია ადმინისტრატორის მიერ"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"მორგებული (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"დახმარება და გამოხმაურება"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"მენიუ"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"შეიყვანეთ პაროლი დემო-რეჟიმში ქარხნულ მდგომარეობაზე დასაბრუნებლად"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"შემდეგი"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"საჭიროა პაროლი"</string>
diff --git a/packages/SettingsLib/res/values-kk/arrays.xml b/packages/SettingsLib/res/values-kk/arrays.xml
index c856439..b0ba2ff 100644
--- a/packages/SettingsLib/res/values-kk/arrays.xml
+++ b/packages/SettingsLib/res/values-kk/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (әдепкі)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Жүйені таңдау (әдепкі)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудиокодегі"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудиокодегі"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Қосымша кодектерді қосу"</item>
+    <item msgid="3304843301758635896">"Қосымша кодектерді өшіру"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Жүйені таңдау (әдепкі)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудиокодегі"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудиокодегі"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Қосымша кодектерді қосу"</item>
+    <item msgid="741805482892725657">"Қосымша кодектерді өшіру"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Жүйені таңдау (әдепкі)"</item>
     <item msgid="8895532488906185219">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index 27622a1..7dea44a 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s арқылы қосылған"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s арқылы қолжетімді"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Қосылған, интернет жоқ"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Кіру нүктесі уақытша бос емес"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s арқылы қосылды"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s арқылы қолжетімді"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Өте баяу"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Баяу"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Жарайды"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Орташа"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Жылдам"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Өте жылдам"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Ажыратылған"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Ажыратылуда…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Жалғауда..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi сигналы — екі жолақ."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi сигналы — үш жолақ."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi сигналы толық."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Ашық желі"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Қауіпсіз желі"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android операциялық жүйесі"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Алынған қолданбалар"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Алынған қолданбалар және пайдаланушылар"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi роумингін іздеулерге әрқашан рұқсат ету"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Мобильдік деректер әрқашан қосулы"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Тетерингтің аппараттық жеделдетуі"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Атаусыз Bluetooth құрылғыларын көрсету"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Абсолютті дыбыс деңгейін өшіру"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Ішкі жолақтағы шылдырлауды қосу"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP нұсқасы"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Бұл параметрлер жетілдіру мақсатында ғана қолданылады. Олар құрылғыңыз бен қолданбаларыңыздың бұзылуына немесе әдеттен тыс әрекеттерге себеп болуы мүмкін."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB арқылы орнатылған қолданбаларды растау"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT арқылы орнатылған қолданбалардың залалды болмауын тексеру."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Атаусыз Bluetooth құрылғылары (тек MAC мекенжайымен) көрсетіледі"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Қолайсыз қатты дыбыс деңгейі немесе басқарудың болмауы сияқты қашықтағы құрылғыларда дыбыс деңгейімен мәселелер жағдайында Bluetooth абсолютті дыбыс деңгейі функциясын өшіреді."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Телефондағы қоңырау әуендерінің Bluetooth құлақаспабында ойнатылуына мүмкіндік беру"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Жергілікті терминал"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> қалды"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – толық зарядталғанға дейін <xliff:g id="TIME">^2</xliff:g>"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Белгісіз"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Зарядталуда"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"зарядталуда"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Зарядталу орындалып жатқан жоқ"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Зарядталып тұрған жоқ"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Қосылған, зарядталмайды"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Толық"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Әкімші басқарады"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Әкімші қосқан"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Арнаулы (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Анықтама және пікір"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Mәзір"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Демо режимде зауыттық мәндерге қайтару үшін құпия сөзді енгізу"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Келесі"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Құпия сөз қажет"</string>
diff --git a/packages/SettingsLib/res/values-km/arrays.xml b/packages/SettingsLib/res/values-km/arrays.xml
index dcdc63a..3cbdc37 100644
--- a/packages/SettingsLib/res/values-km/arrays.xml
+++ b/packages/SettingsLib/res/values-km/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (លំនាំដើម)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"ប្រើ​ការ​ជ្រើសរើស​ប្រព័ន្ធ (លំនាំ​ដើម)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>សំឡេង <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>សំឡេង <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"បើក​កូឌិក​ប្រភេទ​ស្រេច​ចិត្ត"</item>
+    <item msgid="3304843301758635896">"បិទ​កូឌិក​ប្រភេទ​ស្រេច​ចិត្ត"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"ប្រើ​ការ​ជ្រើសរើស​ប្រព័ន្ធ (លំនាំ​ដើម)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>សំឡេង <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>សំឡេង <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"បើក​កូឌិក​ប្រភេទ​ស្រេច​ចិត្ត"</item>
+    <item msgid="741805482892725657">"បិទ​កូឌិក​ប្រភេទ​ស្រេច​ចិត្ត"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"ប្រើ​ការ​ជ្រើសរើស​ប្រព័ន្ធ (លំនាំ​ដើម)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index 5f614f6..4dd298d 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"បានភ្ជាប់តាមរយៈ %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"មានតាមរយៈ %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"បានភ្ជាប់ ប៉ុន្តែគ្មានអ៊ីនធឺណិតទេ"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ចំណុចចូលប្រើពេញជាបណ្តោះអាសន្ន"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"បានភ្ជាប់តាមរយៈ %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"មានតាមរយៈ %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"យឺតណាស់"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"យឺត"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"យល់ព្រម"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"មធ្យម"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"លឿន"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"លឿន​ណាស់"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"បាន​ផ្ដាច់"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"កំពុង​ផ្ដាច់…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"កំពុង​ត​ភ្ជាប់​…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi ពីរកាំ"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi បីកាំ"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"សេវា Wifi ពេញ"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"បើក​បណ្ដាញ"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"បណ្តាញ​ដែល​មានសុវត្ថិភាព"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"ប្រព័ន្ធ​ប្រតិបត្តិការ Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"កម្មវិធី​ដែល​បាន​លុប"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"បាន​លុប​កម្មវិធី និង​អ្នកប្រើ"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"តែងតែ​អនុញ្ញាត​​​ការវិភាគ​រ៉ូម​វ៉ាយហ្វាយ"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"ទិន្នន័យទូរសព្ទចល័តដំណើរការជានិច្ច"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"ការ​បង្កើនល្បឿន​ផ្នែករឹងសម្រាប់​ការភ្ជាប់"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"បង្ហាញ​ឧបករណ៍​ប្ល៊ូធូស​គ្មានឈ្មោះ"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"បិទកម្រិតសំឡេងលឺខ្លាំង"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"បើក​ការ​រោទ៍​ក្នុងបណ្តាញ"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"កំណែប្ល៊ូធូស AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"ការ​កំណត់​ទាំង​នេះ​សម្រាប់​តែ​ការ​ប្រើ​ក្នុង​ការ​អភិវឌ្ឍ​ប៉ុណ្ណោះ។ ពួក​វា​អាច​ធ្វើ​ឲ្យ​ឧបករណ៍ និង​កម្មវិធី​របស់​អ្នក​ខូច ឬ​ដំណើរ​មិន​ត្រឹមត្រូវ។"</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"ផ្ទៀងផ្ទាត់​កម្មវិធី​តាម​យូអេសប៊ី"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ពិនិត្យ​កម្មវិធី​បាន​ដំឡើង​តាម​រយៈ ADB/ADT សម្រាប់​ឥរិយាបថ​ដែល​គ្រោះ​ថ្នាក់។"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"​ឧបករណ៍​ប្ល៊ូធូសគ្មានឈ្មោះ​ (អាសយដ្ឋាន MAC តែប៉ុណ្ណោះ) នឹង​បង្ហាញ"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"បិទលក្ខណៈពិសេសកម្រិតសំឡេងលឺខ្លាំងពេលភ្ជាប់ប៊្លូធូសក្នុងករណីមានបញ្ហាជាមួយឧបករណ៍បញ្ជាពីចម្ងាយ ដូចជាកម្រិតសំឡេងលឺខ្លាំងដែលមិនអាចទទួលយកបាន ឬខ្វះការគ្រប់គ្រង។"</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"អនុញ្ញាត​ឲ្យ​សំឡេង​រោទ៍​នៅ​លើ​ទូរសព្ទ​បញ្ចេញសំឡេង​តាម​រយៈ​កាស​ប្ល៊ូធូស"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"ស្ថានីយ​មូលដ្ឋាន"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - នៅសល់ <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> រហូតដល់សាកពេញ"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"មិន​ស្គាល់"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"កំពុងបញ្ចូល​ថ្ម"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"កំពុង​សាក​ថ្ម"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"មិនកំពុង​បញ្ចូល​ថ្ម"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"មិន​បញ្ចូលថ្ម"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"ដោត​សាកថ្ម​រួចហើយ ប៉ុន្តែ​​សាកថ្ម​មិន​ចូលទេឥឡូវនេះ"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"ពេញ"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"គ្រប់គ្រងដោយអ្នកគ្រប់គ្រង"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"បើកដោយ​អ្នកគ្រប់គ្រង"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ផ្ទាល់ខ្លួន (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"ជំនួយ និងមតិស្ថាបនា"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"ម៉ឺនុយ"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"បញ្ចូល​ពាក្យ​សម្ងាត់ ដើម្បី​កំណត់ឧបករណ៍​​ឡើង​វិញ​ដូចពេលចេញ​ពី​រោងចក្រ នៅក្នុង​មុខងារ​សាកល្បង"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"បន្ទាប់"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"តម្រូវ​ឲ្យ​មានពាក្យ​សម្ងាត់"</string>
diff --git a/packages/SettingsLib/res/values-kn/arrays.xml b/packages/SettingsLib/res/values-kn/arrays.xml
index 2e4db0b..455b0a9 100644
--- a/packages/SettingsLib/res/values-kn/arrays.xml
+++ b/packages/SettingsLib/res/values-kn/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (ಡಿಫಾಲ್ಟ್)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"ಸಿಸ್ಟಂ ಆಯ್ಕೆಯನ್ನು ಬಳಸಿ (ಡಿಫಾಲ್ಟ್)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ಆಡಿಯೋ"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ಆಡಿಯೋ"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"ಐಚ್ಛಿಕ ಕೋಡೆಕ್‌ಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ"</item>
+    <item msgid="3304843301758635896">"ಐಚ್ಛಿಕ ಕೋಡೆಕ್‌ಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"ಸಿಸ್ಟಂ ಆಯ್ಕೆಯನ್ನು ಬಳಸಿ (ಡಿಫಾಲ್ಟ್)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ಆಡಿಯೋ"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ಆಡಿಯೋ"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"ಐಚ್ಛಿಕ ಕೋಡೆಕ್‌ಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ"</item>
+    <item msgid="741805482892725657">"ಐಚ್ಛಿಕ ಕೋಡೆಕ್‌ಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"ಸಿಸ್ಟಂ ಆಯ್ಕೆಯನ್ನು ಬಳಸಿ (ಡಿಫಾಲ್ಟ್)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index c74b7be..a90d111 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -34,18 +34,22 @@
     <string name="wifi_not_in_range" msgid="1136191511238508967">"ವ್ಯಾಪ್ತಿಯಲ್ಲಿಲ್ಲ"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
     <string name="wifi_no_internet" msgid="3880396223819116454">"ಯಾವುದೇ ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶವಿಲ್ಲ"</string>
-    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> ರಿಂದ ಉಳಿಸಲಾಗಿದೆ"</string>
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> ನಿಂದ ಉಳಿಸಲಾಗಿದೆ"</string>
     <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s ಮೂಲಕ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
     <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ನೆಟ್‌ವರ್ಕ್ ರೇಟಿಂಗ್ ಒದಗಿಸುವವರ ಮೂಲಕ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ಮೂಲಕ ಲಭ್ಯವಿದೆ"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ, ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ಪ್ರವೇಶ ಕೇಂದ್ರ ತಾತ್ಕಾಲಿಕವಾಗಿ ಭರ್ತಿಯಾಗಿದೆ"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s ಮೂಲಕ ಲಭ್ಯವಿದೆ"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"ತುಂಬಾ ನಿಧಾನವಾಗಿದೆ"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"ನಿಧಾನ"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ಸರಿ"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"ಮಧ್ಯಮ"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"ವೇಗ"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"ತುಂಬಾ ವೇಗವಾಗಿದೆ"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗುತ್ತಿದೆ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"ಸಂಪರ್ಕಗೊಳಿಸಲಾಗುತ್ತಿದೆ..."</string>
@@ -90,7 +94,7 @@
     <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"ಜೋಡಿ"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"ಜೋಡಿ ಮಾಡು"</string>
     <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"ರದ್ದುಮಾಡಿ"</string>
-    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"ಸಂಪರ್ಕಪಡಿಸಿದಾಗ, ಜೋಡಿಸುವಿಕೆಯು ನಿಮ್ಮ ಸಂಪರ್ಕಗಳು ಮತ್ತು ಕರೆ ಇತಿಹಾಸಕ್ಕೆ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
+    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"ಸಂಪರ್ಕಗೊಳಿಸಿದಾಗ, ಜೋಡಿಸುವಿಕೆಯು ನಿಮ್ಮ ಸಂಪರ್ಕಗಳು ಮತ್ತು ಕರೆ ಇತಿಹಾಸಕ್ಕೆ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
     <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಜೊತೆಗೆ ಜೋಡಣೆ ಮಾಡಲಾಗಲಿಲ್ಲ."</string>
     <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"ತಪ್ಪಾಗಿರುವ ಪಿನ್‌ ಅಥವಾ ಪಾಸ್‌ಕೀ ಕಾರಣದಿಂದಾಗಿ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಜೊತೆಗೆ ಜೋಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಜೊತೆಗೆ ಸಂವಹನ ನಡೆಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"ವೈಫೈ ಎರಡು ಪಟ್ಟಿಗಳು."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"ವೈಫೈ ಮೂರು ಪಟ್ಟಿಗಳು."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"ವೈಫೈ ಸಿಗ್ನಲ್‌‌ ಪೂರ್ತಿ ಇದೆ."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"ನೆಟ್‌ವರ್ಕ್‌ ತೆರೆಯಿರಿ"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"ಸುರಕ್ಷಿತ ನೆಟ್‌ವರ್ಕ್"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"ತೆಗೆದುಹಾಕಲಾದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string>
@@ -115,7 +121,7 @@
     <string name="running_process_item_user_label" msgid="3129887865552025943">"ಬಳಕೆದಾರ: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="launch_defaults_some" msgid="313159469856372621">"ಕೆಲವು ಡೀಫಾಲ್ಟ್‌ಗಳನ್ನು ಹೊಂದಿಸಲಾಗಿದೆ"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"ಡೀಫಾಲ್ಟ್‌ಗಳನ್ನು ಹೊಂದಿಸಲಾಗಿಲ್ಲ"</string>
-    <string name="tts_settings" msgid="8186971894801348327">"ಪಠ್ಯದಿಂದ ಧ್ವನಿಗೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+    <string name="tts_settings" msgid="8186971894801348327">"ಪಠ್ಯದಿಂದ ಧ್ವನಿಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="tts_settings_title" msgid="1237820681016639683">"ಧ್ವನಿಗೆ-ಪಠ್ಯದ ಔಟ್‌ಪುಟ್‌"</string>
     <string name="tts_default_rate_title" msgid="6030550998379310088">"ಧ್ವನಿಯ ಪ್ರಮಾಣ"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"ಪಠ್ಯವನ್ನು ಹೇಳಿದ ವೇಗ"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ವೈ-ಫೈ ರೋಮ್ ಸ್ಕ್ಯಾನ್‌ಗಳನ್ನು ಯಾವಾಗಲೂ ಅನುಮತಿಸಿ"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"ಮೊಬೈಲ್ ಡೇಟಾ ಯಾವಾಗಲೂ ಸಕ್ರಿಯ"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"ಹಾರ್ಡ್‌ವೇರ್‌ನ ವೇಗವರ್ಧನೆಯನ್ನು ಟೆಥರಿಂಗ್ ಮಾಡಿ"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"ಹೆಸರುಗಳಿಲ್ಲದ ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳನ್ನು ತೋರಿಸಿ"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ಸಂಪೂರ್ಣ ವಾಲ್ಯೂಮ್‌ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"ಇನ್ ಬ್ಯಾಂಡ್ ರಿಂಗಿಂಗ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ಬ್ಲೂಟೂತ್ AVRCP ಆವೃತ್ತಿ"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"ಈ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಅಭಿವೃದ್ಧಿಯ ಬಳಕೆಗೆ ಮಾತ್ರ. ಅವುಗಳು ನಿಮ್ಮ ಸಾಧನ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್‌‌ಗಳಿಗೆ ಧಕ್ಕೆ ಮಾಡಬಹುದು ಅಥವಾ ಅವು ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರುವಂತೆ ಮಾಡಬಹುದು."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB ಮೂಲಕ ಆಪ್‌ ಪರಿಶೀಲಿಸಿ"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ಹಾನಿಮಾಡುವಂತಹ ವರ್ತನೆಗಾಗಿ ADB/ADT ಮೂಲಕ ಸ್ಥಾಪಿಸಲಾದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"ಹೆಸರುಗಳಿಲ್ಲದ (ಕೇವಲ MAC ವಿಳಾಸಗಳು ಮಾತ್ರ) ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"ರಿಮೋಟ್ ಸಾಧನಗಳೊಂದಿಗೆ ಒಪ್ಪಲಾಗದ ಜೋರಾದ ವಾಲ್ಯೂಮ್ ಅಥವಾ ನಿಯಂತ್ರಣದ ಕೊರತೆಯಂತಹ ವಾಲ್ಯೂಮ್ ಸಮಸ್ಯೆಗಳಂತಹ ಸಂದರ್ಭದಲ್ಲಿ ಬ್ಲೂಟೂತ್ ಸಂಪೂರ್ಣ ವಾಲ್ಯೂಮ್ ವೈಶಿಷ್ಟ್ಯವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"ಫೋನ್‌ನ ರಿಂಗ್‌ಟೋನ್‌ಗಳನ್ನು ಬ್ಲೂಟೂತ್ ಹೆಡ್‌ಸೆಟ್‌ಗಳಲ್ಲಿ ಪ್ಲೇ ಮಾಡಲು ಅನುಮತಿ ನೀಡಿ"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"ಸ್ಥಳೀಯ ಟರ್ಮಿನಲ್"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> ಉಳಿದಿದೆ"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - ಸಂಪೂರ್ಣ ಚಾರ್ಜ್ ಆಗಲು <xliff:g id="TIME">^2</xliff:g>"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"ಅಪರಿಚಿತ"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"ಚಾರ್ಜ್‌ ಆಗುತ್ತಿಲ್ಲ"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ಚಾರ್ಜ್ ಆಗುತ್ತಿಲ್ಲ"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"ಪ್ಲಗ್ ಇನ್ ಮಾಡಲಾಗಿದೆ, ಇದೀಗ ಚಾರ್ಜ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"ಭರ್ತಿ"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"ನಿರ್ವಾಹಕರ ಮೂಲಕ ನಿಯಂತ್ರಿಸಲಾಗಿದೆ"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"ನಿರ್ವಾಹಕರು ಸಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ಕಸ್ಟಮ್ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"ಸಹಾಯ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆ"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"ಮೆನು"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"ಫ್ಯಾಕ್ಟರಿ ರಿಸೆಟ್‌ಗೆ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"ಮುಂದೆ"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"ಪಾಸ್‌ವರ್ಡ್ ಅಗತ್ಯವಿದೆ"</string>
diff --git a/packages/SettingsLib/res/values-ko/arrays.xml b/packages/SettingsLib/res/values-ko/arrays.xml
index 72ef564..3dbf759 100644
--- a/packages/SettingsLib/res/values-ko/arrays.xml
+++ b/packages/SettingsLib/res/values-ko/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4(기본)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"시스템 설정 사용(기본)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 오디오"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 오디오"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"선택사항 코덱 사용 설정"</item>
+    <item msgid="3304843301758635896">"선택사항 코덱 사용 중지"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"시스템 설정 사용(기본)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 오디오"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 오디오"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"선택사항 코덱 사용 설정"</item>
+    <item msgid="741805482892725657">"선택사항 코덱 사용 중지"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"시스템 설정 사용(기본)"</item>
     <item msgid="8895532488906185219">"44.1kHz"</item>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index b7cf515..0e24630 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s을(를) 통해 연결됨"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s을(를) 통해 사용 가능"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"인터넷을 사용하지 않고 연결됨"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"액세스 포인트가 일시적으로 가득 참"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s을(를) 통해 연결됨"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s을(를) 통해 사용 가능"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"매우 느림"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"느림"</string>
-    <string name="speed_label_okay" msgid="2331665440671174858">"확인"</string>
+    <string name="speed_label_okay" msgid="2331665440671174858">"보통"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"보통"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"빠름"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"매우 빠름"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"연결 끊김"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"연결을 끊는 중…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"연결 중…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi 신호 막대가 두 개입니다."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi 신호 막대가 세 개입니다."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi 신호가 강합니다."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"개방형 네트워크"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"보안 네트워크"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"삭제된 앱"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"삭제된 앱 및 사용자"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi 로밍 스캔 항상 허용"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"항상 모바일 데이터 활성화"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"테더링 하드웨어 가속"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"이름이 없는 블루투스 기기 표시"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"절대 볼륨 사용 안함"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"대역 내 벨소리 사용 설정"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"블루투스 AVRCP 버전"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"이 설정은 개발자용으로만 설계되었습니다. 이 설정을 사용하면 기기 및 애플리케이션에 예기치 않은 중단이나 오류가 발생할 수 있습니다."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB를 통해 설치된 앱 확인"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT을 통해 설치된 앱에 유해한 동작이 있는지 확인"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"이름이 없이 MAC 주소만 있는 블루투스 기기가 표시됩니다."</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"참기 어려울 정도로 볼륨이 크거나 제어가 되지 않는 등 원격 기기에서 볼륨 문제가 발생할 경우 블루투스 절대 볼륨 기능을 사용 중지합니다."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"휴대전화의 벨소리가 블루투스 헤드셋에서 재생되도록 허용"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"로컬 터미널"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> 남음"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - 충전 완료까지 <xliff:g id="TIME">^2</xliff:g> 남음"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"알 수 없음"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"충전 중"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"충전 중"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"충전 안함"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"충전 안함"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"전원이 연결되었지만 현재 충전할 수 없음"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"충전 완료"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"관리자가 제어"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"관리자가 사용 설정함"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"맞춤(<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"고객센터"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"메뉴"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"데모 모드에서 초기화하려면 비밀번호 입력"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"다음"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"비밀번호 입력 필요"</string>
diff --git a/packages/SettingsLib/res/values-ky/arrays.xml b/packages/SettingsLib/res/values-ky/arrays.xml
index ecaa146..721bfaa7 100644
--- a/packages/SettingsLib/res/values-ky/arrays.xml
+++ b/packages/SettingsLib/res/values-ky/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Демейки)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Тутум тандаганды колдонуу (демейки)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Кошумча кодекстер иштетилсин"</item>
+    <item msgid="3304843301758635896">"Кошумча кодекстер өчүрүлсүн"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Тутум тандаганды колдонуу (демейки)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Кошумча кодекстер иштетилсин"</item>
+    <item msgid="741805482892725657">"Кошумча кодекстер өчүрүлсүн"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Тутум тандаганды колдонуу (демейки)"</item>
     <item msgid="8895532488906185219">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index 1fb4b48..e59d3f8 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s аркылуу жеткиликтүү"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s аркылуу жеткиликтүү"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Туташып турат, Интернет жок"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Туташуу түйүнү убактылуу толуп калды"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s аркылуу туташты"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s аркылуу иштейт"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Өтө жай"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Жай"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Жарайт"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Орто"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Ылдам"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Абдан ылдам"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Ажыратылган"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Ажыратылууда…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Туташууда…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi: эки таякча."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi: үч таякча."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi: күчтүү сигнал."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Ачык тармак"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Коопсуз тармак"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Алынып салынган колдонмолор"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Өчүрүлгөн колдонмолор жана колдонуучулар"</string>
@@ -113,10 +119,10 @@
     <string name="user_guest" msgid="8475274842845401871">"Конок"</string>
     <string name="unknown" msgid="1592123443519355854">"Белгисиз"</string>
     <string name="running_process_item_user_label" msgid="3129887865552025943">"Колдонуучу: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
-    <string name="launch_defaults_some" msgid="313159469856372621">"Айрым демейкилер коюлду"</string>
+    <string name="launch_defaults_some" msgid="313159469856372621">"Айрым демейки параметрлер туураланды"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"Демейкилер коюлган жок"</string>
     <string name="tts_settings" msgid="8186971894801348327">"Кеп синтезаторунун жөндөөлөрү"</string>
-    <string name="tts_settings_title" msgid="1237820681016639683">"Текстти-оозекилөө"</string>
+    <string name="tts_settings_title" msgid="1237820681016639683">"Кеп синтезатору"</string>
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Кеп ылдамдыгы"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Текст айтылчу ылдамдык"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Негизги тон"</string>
@@ -130,7 +136,7 @@
     <string name="tts_install_data_title" msgid="4264378440508149986">"Үн дайындарын орнотуу"</string>
     <string name="tts_install_data_summary" msgid="5742135732511822589">"Кеп синтезине керектүү үн дайындарын орнотуңуз"</string>
     <string name="tts_engine_security_warning" msgid="8786238102020223650">"Бул кепти синтездөө каражаты бардык айтыла турган текстти, анын ичинде сырсөздөр жана насыя карточкасынын номери сыяктуу жеке маалыматты, топтошу мүмкүн. Ал <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> каражатынан алынат. Бул кепти синтездөө каражаты колдонулсунбу?"</string>
-    <string name="tts_engine_network_required" msgid="1190837151485314743">"Бул тилде текстти-оозекилөө үчүн иштеп турган интернет-байланыш керек."</string>
+    <string name="tts_engine_network_required" msgid="1190837151485314743">"Бул тилде кеп синтезаторун иштетүү үчүн Интернетке туташуу керек."</string>
     <string name="tts_default_sample_string" msgid="4040835213373086322">"Бул айтылганды синтездөөнүн мисалы"</string>
     <string name="tts_status_title" msgid="7268566550242584413">"Абалкы тилдин абалы"</string>
     <string name="tts_status_ok" msgid="1309762510278029765">"<xliff:g id="LOCALE">%1$s</xliff:g> толук колдоого алынган"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi-Fi Роуминг Скандоо мүмкүнчүлүгүнө ар дайым уруксат берилсин"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Мобилдик Интернет иштей берсин"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Тетерингдин иштешин тездетүү"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Аталышсыз Bluetooth түзмөктөрү көрсөтүлсүн"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Үндүн абсолюттук деңгээли өчүрүлсүн"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Канал аралык чалууну иштетүү"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP версиясы"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Бул орнотуулар өндүрүүчүлөр үчүн гана берилген. Булар түзмөгүңүздүн колдонмолорун бузулушуна же туура эмес иштешине алып келиши мүмкүн."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB аркылуу келген колдонмолорду ырастоо"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT аркылуу орнотулган колдонмолорду зыянкечтикке текшерүү."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Аталышсыз Bluetooth түзмөктөрү (MAC даректери менен гана) көрсөтүлөт"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Алыскы түзмөктөр өтө катуу добуш чыгарып же көзөмөлдөнбөй жатса Bluetooth \"Үндүн абсолюттук деңгээли\" функциясын өчүрөт."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Телефондогу рингтондор Bluetooth гарнитурасында ойнотулсун"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Жергиликтүү терминал"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> калды"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> кийин толук кубатталат"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Белгисиз"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Кубатталууда"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"кубатталууда"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Кубат алган жок"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Кубатталган жок"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Сайылып турат, учурда кубаттоо мүмкүн эмес"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Толук"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Администратор тарабынан көзөмөлдөнөт"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Администратор иштетип койгон"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Ыңгайлаштырылган (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Жардам жана пикир билдирүү"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Демо режиминде демейки жөндөөлөргө кайтаруу үчүн сырсөздү киргизиңиз"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Кийинки"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Сырсөз талап кылынат"</string>
diff --git a/packages/SettingsLib/res/values-lo/arrays.xml b/packages/SettingsLib/res/values-lo/arrays.xml
index 302c803..6aa8ffc 100644
--- a/packages/SettingsLib/res/values-lo/arrays.xml
+++ b/packages/SettingsLib/res/values-lo/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Use System Selection (Default)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"ສຽງ <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"ສຽງ <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"ເປີດໃຊ້ Codecs ແບບເສີມ"</item>
+    <item msgid="3304843301758635896">"ປິດການໃຊ້ Codecs ແບບເສີມ"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Use System Selection (Default)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"ສຽງ <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"ສຽງ <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"ເປີດໃຊ້ Codecs ແບບເສີມ"</item>
+    <item msgid="741805482892725657">"ປິດການໃຊ້ Codecs ແບບເສີມ"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Use System Selection (Default)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index 88bdc41..20869a7 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"​ເຊື່ອມຕໍ່​ຜ່ານ %1$s ​ແລ້ວ"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"ມີ​ໃຫ້​ຜ່ານ %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"​ເຊື່ອມ​ຕໍ່​ແລ້ວ,​ ບໍ່​ມີ​ອິນ​ເຕີ​ເນັດ"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ຈຸດການເຂົ້າເຖິງເຕັມຊົ່ວຄາວ"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"ເຊື່ອມຕໍ່ຜ່ານ %1$s ແລ້ວ"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"ໃຊ້ໄດ້ຜ່ານ %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"ຊ້າຫຼາຍ"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"ຊ້າ"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ຕົກລົງ"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"ປານກາງ"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"ໄວ"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"ໄວຫຼາຍ"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ຕັດການເຊື່ອມຕໍ່ແລ້ວ"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"ກຳລັງຢຸດການເຊື່ອມຕໍ່..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"ກຳລັງເຊື່ອມຕໍ່..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"ສັນຍານ Wi-Fi ສອງຂີດ."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi ສາມຂີດ."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"ສັນຍານ Wi-Fi ເຕັມ"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"ເຄືອຂ່າຍເປີດ"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"ເຄືອຂ່າຍເຂົ້າລະຫັດ"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"ແອັບຯທີ່ຖືກລຶບອອກແລ້ວ"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"ລຶບແອັບຯ ແລະຜູ່ໃຊ້ແລ້ວ"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ອະ​ນຸ​ຍາດ​ການ​ສະ​ແກນ​ການ​ໂຣມ Wi‑Fi ​ສະ​ເໝີ"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"ເປີດໃຊ້ອິນເຕີເນັດມືຖືຕະຫຼອດເວລາ"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"ເປີດໃຊ້ການເລັ່ງຄວາມໄວດ້ວຍຮາດແວ"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"ສະແດງອຸປະກອນ Bluetooth ທີ່ບໍ່ມີຊື່"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ປິດໃຊ້ລະດັບສຽງສົມບູນ"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"ເປີດສຽງເຕືອນແບບອິນແບນ"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ເວີຊັນ Bluetooth AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"ການ​ຕັ້ງຄ່າ​ເຫຼົ່ານີ້​ແມ່ນ​ມີ​ຈຸດປະສົງ​ເພື່ອ​ການ​ພັດທະນາ​ເທົ່ານັ້ນ. ພວກ​ມັນ​ສາມາດ​ເຮັດ​ໃຫ້​ອຸປະກອນ ແລະ​ແອັບພລິເຄຊັນ​ຂອງ​ທ່ານ​ຢຸດ​ເຮັດ​ວຽກ ຫຼື​ເຮັດ​ວຽກ​ຜິດປົກກະຕິ​ໄດ້."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"ຢືນຢັນແອັບຯຜ່ານທາງ USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ກວດສອບແອັບຯທີ່ຕິດຕັ້ງແລ້ວຜ່ານທາງ ADB/ADT ເພື່ອກວດຫາພຶດຕິກຳທີ່ເປັນອັນຕະລາຍ."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"ຈະສະແດງອຸປະກອນ Bluetooth ທີ່ບໍ່ມີຊື່ (ທີ່ຢູ່ MAC ເທົ່ານັ້ນ)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"ປິດໃຊ້ຄຸນສົມບັດລະດັບສຽງສົມບູນຂອງ Bluetooth ໃນກໍລະນີເກີດບັນຫາລະດັບສຽງສົມບູນກັບອຸປະກອນທາງໄກ ເຊັ່ນວ່າ ລະດັບສຽງດັງເກີນຍອມຮັບໄດ້ ຫຼື ຄວບຄຸມບໍ່ໄດ້."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"ເປີດໃຫ້ສຽງຣິງໂທນຢູ່ໂທລະສັບດັງໃນຫູຟັງ Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminal ໃນໂຕເຄື່ອງ"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - ຍັງເຫຼືອ <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> ຈົນກວ່າຈະສາກເຕັມ"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"ບໍ່ຮູ້ຈັກ"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"ກຳລັງສາກໄຟ"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"ກຳລັງສາກໄຟ"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"ບໍ່ໄດ້ສາກໄຟ"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ບໍ່ໄດ້ສາກໄຟ"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"ສຽບສາຍແລ້ວ, ບໍ່ສາມາດສາກໄດ້ໃນຕອນນີ້"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"ເຕັມ"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"ຄວບຄຸມໂດຍຜູ້ເບິ່ງແຍງ"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"ຜູ້ເບິ່ງແຍງລະບົບເປີດໃຫ້ໃຊ້ແລ້ວ"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ປັບແຕ່ງເອງ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"ຊ່ວຍເຫຼືອ &amp; ຄຳຕິຊົມ"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"ເມນູ"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Enter password to perform factory reset in demo mode"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"ຕໍ່ໄປ"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"​ຕ້ອງ​ໃສ່​ລະ​ຫັດ​ຜ່ານ"</string>
diff --git a/packages/SettingsLib/res/values-lt/arrays.xml b/packages/SettingsLib/res/values-lt/arrays.xml
index 6def306..b4407ea 100644
--- a/packages/SettingsLib/res/values-lt/arrays.xml
+++ b/packages/SettingsLib/res/values-lt/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (numatytoji)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Naudoti sistemos pasirink. (numatytasis)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> garsas"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> garsas"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Įgalinti nebūtinus kodekus"</item>
+    <item msgid="3304843301758635896">"Išjungti nebūtinus kodekus"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Naudoti sistemos pasirink. (numatytasis)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> garsas"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> garsas"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Įgalinti nebūtinus kodekus"</item>
+    <item msgid="741805482892725657">"Išjungti nebūtinus kodekus"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Naudoti sistemos pasirink. (numatytasis)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 8ca0d36..8d17a3a 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Prisijungta naudojant „%1$s“"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Pasiekiama naudojant „%1$s“"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Prisijungta, nėra interneto"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Prieigos taškas laikinai visiškai užimtas"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Prisijungta naudojant „%1$s“"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Pasiekiama naudojant „%1$s“"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Labai lėtas"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lėtas"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Gerai"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Vidutinis"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Greitas"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Labai greitas"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Atsijungęs (-usi)"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Atjungiama..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Prisijungiama..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Dvi „Wi-Fi“ signalo juostos."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Trys „Wi-Fi“ signalo juostos."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Stiprus „Wi-Fi“ signalas."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Atviras tinklas"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Saugus tinklas"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"„Android“ OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Pašalintos programos"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Pašalintos programos ir naudotojai"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Visada leisti „Wi-Fi“ tarptiklinio ryšio nuskaitymą"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobiliojo ryšio duomenys visada suaktyvinti"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Įrenginio kaip modemo naudojimo aparatinės įrangos spartinimas"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Rodyti „Bluetooth“ įrenginius be pavadinimų"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Išjungti didžiausią garsą"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Įgalinti diapazono skambėjimą"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"„Bluetooth“ AVRCP versija"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Šie nustatymai skirti tik kūrėjams. Nustačius juos įrenginys ir jame naudojamos programos gali nustoti veikti arba veikti netinkamai."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Patvirtinti progr. naudojant USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Patikrinkite, ar programų, įdiegtų naudojant ADB / ADT, veikimas nėra žalingas."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bus rodomi „Bluetooth“ įrenginiai be pavadinimų (tik MAC adresai)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Išjungiama „Bluetooth“ didžiausio garso funkcija, jei naudojant nuotolinio valdymo įrenginius kyla problemų dėl garso, pvz., garsas yra per didelis arba jo negalima tinkamai valdyti."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Leisti telefono skambėjimo tonus per „Bluetooth“ ausines"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Vietinis terminalas"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – liko <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> iki visiško įkrovimo"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Nežinomas"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Kraunasi..."</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"įkraunama"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Nekraunama"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nekraunama"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Įjungta į maitinimo lizdą, bet šiuo metu įkrauti neįmanoma"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Visiškai įkrautas"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Valdo administratorius"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Įgalino administratorius"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Tinkintas (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Pagalba ir atsiliepimai"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Meniu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Įv. slapt. ir atk. gam. nust. dem. rež."</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Kitas"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Būtina nurodyti slaptažodį"</string>
diff --git a/packages/SettingsLib/res/values-lv/arrays.xml b/packages/SettingsLib/res/values-lv/arrays.xml
index 00b1e6e..09fc613 100644
--- a/packages/SettingsLib/res/values-lv/arrays.xml
+++ b/packages/SettingsLib/res/values-lv/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (noklusējuma)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Sistēmas atlases izmantošana (nokl.)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Iespējot neobligātos kodekus"</item>
+    <item msgid="3304843301758635896">"Atspējot neobligātos kodekus"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Sistēmas atlases izmantošana (nokl.)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Iespējot neobligātos kodekus"</item>
+    <item msgid="741805482892725657">"Atspējot neobligātos kodekus"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Sistēmas atlases izmantošana (nokl.)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index 518eb33..101b30b 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Savienots, izmantojot %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Pieejams, izmantojot %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Savienots, nav piekļuves internetam"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Piekļuves punkts īslaicīgi ir pilns"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Savienojums izveidots, izmantojot %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Pieejams, izmantojot %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Ļoti lēns"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lēns"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Labi"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Vidējs"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Ātrs"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Ļoti ātrs"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Atvienots"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Notiek atvienošana..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Notiek savienojuma izveide…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: divas joslas"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: trīs joslas"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Pilna piekļuve Wi-Fi signālam"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Atvērts tīkls"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Drošs tīkls"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Noņemtās lietotnes"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Noņemtās lietotnes un lietotāji"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vienmēr atļaut Wi‑Fi meklēšanu"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Vienmēr aktīvs mobilo datu savienojums"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Paātrināta aparatūras darbība piesaistei"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Rādīt Bluetooth ierīces bez nosaukumiem"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Atspējot absolūto skaļumu"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Iespējot iekšjoslas zvanīšanu"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP versija"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Š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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificēt, ja instalētas no USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Pārbaudīt, vai lietotņu, kuru instalēšanai izmantots ADB/ADT, darbība nav kaitīga."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Tiks parādītas Bluetooth ierīces bez nosaukumiem (tikai MAC adreses)."</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Atspējo Bluetooth absolūtā skaļuma funkciju skaļuma problēmu gadījumiem attālajās ierīcēs, piemēram, ja ir nepieņemami liels skaļums vai nav iespējas kontrolēt skaļumu."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Atļaut tālrunī esošo zvana signālu atskaņošanu Bluetooth austiņās"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Vietējā beigu lietotne"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> — atlicis: <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> — <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>, kamēr pilnībā uzlādēts"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> — <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Nezināms"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Uzlāde"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"notiek uzlāde"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Nenotiek uzlāde"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nenotiek uzlāde"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Pievienots, taču pašlaik nevar veikt uzlādi"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Pilns"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontrolē administrators"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Iespējoja administrators"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Pielāgots (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Palīdzība un atsauksmes"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Izvēlne"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Iev. paroli, lai atiest. rūpnīcas iest. dem. režīmā"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Tālāk"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Nepieciešama parole"</string>
diff --git a/packages/SettingsLib/res/values-mk/arrays.xml b/packages/SettingsLib/res/values-mk/arrays.xml
index 680184e..2d9d73ce 100644
--- a/packages/SettingsLib/res/values-mk/arrays.xml
+++ b/packages/SettingsLib/res/values-mk/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Стандардно)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Користи избор на системот (стандардно)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Овозможување на „Кодеци по избор“"</item>
+    <item msgid="3304843301758635896">"Оневозможување на „Кодеци по избор“"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Користи избор на системот (стандардно)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Овозможи ја „Кодеци по избор“"</item>
+    <item msgid="741805482892725657">"Оневозможи ја „Кодеци по избор“"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Користи избор на системот (стандардно)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index 3f7ab8c..40feed0 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Поврзано преку %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Достапно преку %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Поврзана, нема интернет"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Пристапната точка привремено е преоптоварена"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Поврзано преку %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Достапно преку %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Многу бавна"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Бавна"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Во ред"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Средна"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Брза"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Многу брза"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Исклучено"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Се исклучува..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Се поврзува..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Две црти на Wi-Fi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Три црти на Wi-Fi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Полн сигнал на Wi-Fi."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Отворена мрежа"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Заклучена мрежа"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Оперативен систем Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Отстранети апликации"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Отстранети апликации и корисници"</string>
@@ -138,7 +144,7 @@
     <string name="tts_status_not_supported" msgid="4491154212762472495">"<xliff:g id="LOCALE">%1$s</xliff:g> не е поддржано"</string>
     <string name="tts_status_checking" msgid="5339150797940483592">"Се проверува..."</string>
     <string name="tts_engine_settings_title" msgid="3499112142425680334">"Поставки на <xliff:g id="TTS_ENGINE_NAME">%s</xliff:g>"</string>
-    <string name="tts_engine_settings_button" msgid="1030512042040722285">"Стартувај подесувања на софтвер"</string>
+    <string name="tts_engine_settings_button" msgid="1030512042040722285">"Стартувај поставки на софтвер"</string>
     <string name="tts_engine_preference_section_title" msgid="448294500990971413">"Претпочитан софтвер"</string>
     <string name="tts_general_section_title" msgid="4402572014604490502">"Општо"</string>
     <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"Ресетирајте ја висината на изговорот"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Секогаш дозволувај Wi‑Fi скенирање во роаминг"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Мобилниот интернет е секогаш активен"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Хардверско забрзување за врзување"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Прикажувај уреди со Bluetooth без имиња"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Оневозможете апсолутна јачина на звук"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Овозможете ѕвонење во појас"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Верзија Bluetooth AVRCP"</string>
@@ -222,10 +229,11 @@
     <string name="adb_warning_title" msgid="6234463310896563253">"Овозможи отстранување грешки на USB?"</string>
     <string name="adb_warning_message" msgid="7316799925425402244">"Отстранувањето грешки на USB е наменето само за целите на развој. Користете го за копирање податоци меѓу вашиот компјутер и вашиот уред, за инсталирање апликации на вашиот уред без известување и за читање евиденција на податоци."</string>
     <string name="adb_keys_warning_message" msgid="5659849457135841625">"Отповикај пристап кон отстранување грешка од USB од сите претходно овластени компјутери?"</string>
-    <string name="dev_settings_warning_title" msgid="7244607768088540165">"Дозволи подесувања за развој?"</string>
-    <string name="dev_settings_warning_message" msgid="2298337781139097964">"Овие подесувања се наменети само за употреба за развој. Тие може да предизвикаат уредот и апликациите во него да се расипат или да се однесуваат необично."</string>
+    <string name="dev_settings_warning_title" msgid="7244607768088540165">"Дозволи поставки за развој?"</string>
+    <string name="dev_settings_warning_message" msgid="2298337781139097964">"Овие поставки се наменети само за употреба за развој. Тие може да предизвикаат уредот и апликациите во него да се расипат или да се однесуваат необично."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Потврди апликации преку USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Провери апликации инсталирани преку ADB/ADT за штетно однесување."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Уредите со Bluetooth без имиња (само MAC-адреси) ќе се прикажуваат"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Ја оневозможува карактеристиката за апсолутна јачина на звук преку Bluetooth во случај кога ќе настанат проблеми со далечинските уреди, како на пр., неприфатливо силен звук или недоволна контрола."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Дозволи мелодиите на телефонот да се пуштаат на Bluetooth слушалките"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Локален терминал"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - уште <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> дури се наполни целосно"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Непознато"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Се полни"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"се полни"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Не се полни"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Не се полни"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Приклучен е, но батеријата не може да се полни во моментов"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Полна"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Контролирано од администраторот"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Овозможено од администраторот"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Приспособен (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Помош и повратни информации"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Мени"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Внесете лозинка за фаб. ресет. во демо"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Следно"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Потребна е лозинка"</string>
diff --git a/packages/SettingsLib/res/values-ml/arrays.xml b/packages/SettingsLib/res/values-ml/arrays.xml
index 624edfe..121c287 100644
--- a/packages/SettingsLib/res/values-ml/arrays.xml
+++ b/packages/SettingsLib/res/values-ml/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (ഡിഫോൾട്ട്)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"സിസ്റ്റം സെലക്ഷൻ ഉപയോഗിക്കൂ ‌(ഡിഫോൾട്ട്)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ഓഡിയോ"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ഓഡിയോ"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"ഓപ്ഷണൽ കോഡെകുകൾ പ്രവർത്തനക്ഷമമാക്കുക"</item>
+    <item msgid="3304843301758635896">"ഓപ്ഷണൽ കോഡെകുകൾ പ്രവർത്തനരഹിതമാക്കുക"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"സിസ്റ്റം സെലക്ഷൻ ഉപയോഗിക്കൂ ‌(ഡിഫോൾട്ട്)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ഓഡിയോ"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ഓഡിയോ"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"ഓപ്ഷണൽ കോഡെകുകൾ പ്രവർത്തനക്ഷമമാക്കുക"</item>
+    <item msgid="741805482892725657">"ഓപ്ഷണൽ കോഡെകുകൾ പ്രവർത്തനരഹിതമാക്കുക"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"സിസ്റ്റം സെലക്ഷൻ ഉപയോഗിക്കൂ ‌(ഡിഫോൾട്ട്)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index 635d8a4..40525ed 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s വഴി ബന്ധിപ്പിച്ചു"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s വഴി ലഭ്യം"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"കണക്റ്റുചെയ്തിരിക്കുന്നു, ഇന്റർനെറ്റില്ല"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ആക്‌സസ് പോയിന്റ് താൽക്കാലികമായി നിറഞ്ഞിരിക്കുന്നു"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s വഴി ബന്ധിപ്പിച്ചു"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s വഴി ലഭ്യം"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"വളരെ കുറഞ്ഞ വേഗത്തിൽ"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"കുറഞ്ഞ വേഗത്തിൽ"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ശരി"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"ഇടത്തരം"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"വേഗത്തിൽ"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"വളരെ വേഗത്തിൽ"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"വിച്ഛേദിച്ചു"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"വിച്‌ഛേദിക്കുന്നു..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"കണക്‌റ്റുചെയ്യുന്നു..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"വൈഫൈ സിഗ്നൽ രണ്ട് ബാറുകൾ."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"വൈഫൈ സിഗ്നൽ മൂന്ന് ബാറുകൾ."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"വൈഫൈ മികച്ച സിഗ്‌നൽ."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"ഓപ്പൺ നെറ്റ്‍വര്‍ക്ക്"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"സുരക്ഷിത നെറ്റ്‍വര്‍ക്ക്"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"നീക്കംചെയ്‌ത അപ്ലിക്കേഷനുകൾ"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"നീക്കംചെയ്‌ത അപ്ലിക്കേഷനുകളും ഉപയോക്താക്കളും"</string>
@@ -113,12 +119,12 @@
     <string name="user_guest" msgid="8475274842845401871">"അതിഥി"</string>
     <string name="unknown" msgid="1592123443519355854">"അജ്ഞാതം"</string>
     <string name="running_process_item_user_label" msgid="3129887865552025943">"ഉപയോക്താവ്: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
-    <string name="launch_defaults_some" msgid="313159469856372621">"സ്ഥിരമായ ചിലവ സജ്ജീകരിച്ചു"</string>
+    <string name="launch_defaults_some" msgid="313159469856372621">"സ്ഥിരമായ ചിലത് സജ്ജീകരിച്ചു"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"സ്ഥിരമായൊന്നും സജ്ജീകരിച്ചിട്ടില്ല"</string>
     <string name="tts_settings" msgid="8186971894801348327">"ടെക്‌സ്റ്റ്-ടു-സ്‌പീച്ച് ക്രമീകരണങ്ങൾ"</string>
     <string name="tts_settings_title" msgid="1237820681016639683">"ടെക്‌സ്റ്റ്-ടു-സ്‌പീച്ച് ഔട്ട്‌പുട്ട്"</string>
     <string name="tts_default_rate_title" msgid="6030550998379310088">"വായന നിരക്ക്"</string>
-    <string name="tts_default_rate_summary" msgid="4061815292287182801">"വാചകം പറയുന്ന വേഗത"</string>
+    <string name="tts_default_rate_summary" msgid="4061815292287182801">"ടെക്സ്റ്റ് ചെയ്യൽ പറയുമ്പോഴുടെക്കുന്ന വേഗത"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"പിച്ച്"</string>
     <string name="tts_default_pitch_summary" msgid="1944885882882650009">"സിന്തസൈസ് ചെയ്ത സംസാരത്തിന്റെ സ്വരഭേദത്തെ ബാധിക്കുന്നു"</string>
     <string name="tts_default_lang_title" msgid="8018087612299820556">"ഭാഷ"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"എപ്പോഴും വൈഫൈ റോം സ്‌‌കാൻ അനുവദിക്കൂ"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"മൊബൈൽ ഡാറ്റ എല്ലായ്‌പ്പോഴും സജീവം"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"ടെതറിംഗ് ഹാർഡ്‌വെയർ ത്വരിതപ്പെടുത്തൽ"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"പേരില്ലാത്ത Bluetooth ഉപകരണങ്ങൾ കാണിക്കുക"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"അബ്‌സൊല്യൂട്ട് വോളിയം പ്രവർത്തനരഹിതമാക്കുക"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"ഇൻ-ബാൻഡ് റിംഗുചെയ്യൽ പ്രവർത്തനക്ഷമമാക്കുക"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP പതിപ്പ്"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"ഈ ക്രമീകരണങ്ങൾ വികസന ഉപയോഗത്തിന് മാത്രമായുള്ളതാണ്. അവ നിങ്ങളുടെ ഉപകരണവും അതിലെ അപ്ലിക്കേഷനുകളും തകരാറിലാക്കുന്നതിനോ തെറ്റായി പ്രവർത്തിക്കുന്നതിനോ ഇടയാക്കാം."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB വഴി ആപ്സ് പരിശോധിച്ചുറപ്പിക്കൂ"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"കേടാക്കുന്ന പ്രവർത്തനരീതിയുള്ള ADB/ADT വഴി ഇൻസ്റ്റാളുചെയ്‌ത അപ്ലിക്കേഷനുകൾ പരിശോധിക്കുക."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"പേരില്ലാത്ത Bluetooth ഉപകരണങ്ങൾ (MAC വിലാസങ്ങൾ മാത്രം) പ്രദർശിപ്പിക്കും"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"അസ്വീകാര്യമായ തരത്തിൽ ഉയർന്ന വോളിയമോ ശബ്ദ നിയന്ത്രണത്തിന്റെ അഭാവമോ പോലെ, വിദൂര ഉപകരണങ്ങളുമായി ബന്ധപ്പെട്ട വോളിയം പ്രശ്നങ്ങൾ ഉണ്ടാകുന്ന സാഹചര്യത്തിൽ, Bluetooth അബ്‌സൊല്യൂട്ട് വോളിയം ഫീച്ചർ പ്രവർത്തനരഹിതമാക്കുന്നു."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"ഫോണിലെ റിംഗ്‌ടോണുകൾ Bluetooth ഹെഡ്‌സെറ്റുകളിൽ പ്ലേ ചെയ്യാനായി അനുവദിക്കുക"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"പ്രാദേശിക ടെർമിനൽ"</string>
@@ -255,7 +263,7 @@
     <string name="show_touches_summary" msgid="6101183132903926324">"ടാപ്പുകൾക്ക് ദൃശ്യ ഫീഡ്ബാക്ക് കാണിക്കുക"</string>
     <string name="show_screen_updates" msgid="5470814345876056420">"സർഫേസ് അപ്‌ഡേറ്റ് കാണിക്കൂ"</string>
     <string name="show_screen_updates_summary" msgid="2569622766672785529">"മുഴുവൻ വിൻഡോ സർഫേസുകളും അപ്‌ഡേറ്റുചെയ്‌തുകഴിയുമ്പോൾ അവ ഫ്ലാഷുചെയ്യുക"</string>
-    <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU കാഴ്ച അപ്‌ഡേറ്റ് കാണിക്കൂ"</string>
+    <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU കാഴ്‌ചയുടെ അപ്‌ഡേറ്റുകൾ കാണിക്കൂ"</string>
     <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU ഉപയോഗിച്ച് വലിക്കുമ്പോൾ വിൻഡോകൾക്കുള്ളിൽ കാഴ്‌ചകൾ ഫ്ലാഷുചെയ്യുക"</string>
     <string name="show_hw_layers_updates" msgid="5645728765605699821">"ഹാർഡ്‌വെയർ ലേയർ അപ്‌ഡേറ്റ് കാണിക്കൂ"</string>
     <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"ഹാർഡ്‌വെയർ ലേയറുകളുടെ അപ്‌ഡേറ്റുകൾ പൂർത്തിയാകുമ്പോൾ അവ പച്ച നിറത്തിൽ പ്രകാശിപ്പിക്കുക"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> ശേഷിക്കുന്നു"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - ഫുൾ ചാർജാകാൻ <xliff:g id="TIME">^2</xliff:g>"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"അജ്ഞാതം"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"ചാർജ്ജുചെയ്യുന്നു"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"ചാർജ് ചെയ്യുന്നു"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"ചാർജ്ജുചെയ്യുന്നില്ല"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ചാർജ്ജുചെയ്യുന്നില്ല"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"പ്ലഗ് ഇൻ ചെയ്‌തു, ഇപ്പോൾ ചാർജ് ചെയ്യാനാവില്ല"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"നിറഞ്ഞു"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"അഡ്‌മിൻ നിയന്ത്രിക്കുന്നത്"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"അഡ്‌മിൻ പ്രവർത്തനക്ഷമമാക്കി"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ഇഷ്ടാനുസൃതം ( <xliff:g id="DENSITYDPI">%d</xliff:g> )"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"സഹായവും പ്രതികരണവും"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"മെനു"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"ഡെമോ ‌മോഡിൽ ഫാക്ടറി റീസെറ്റിന് പാസ്‌വേഡ് നൽകുക"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"അടുത്തത്"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"പാസ്‌വേഡ് ആവശ്യമാണ്"</string>
diff --git a/packages/SettingsLib/res/values-mn/arrays.xml b/packages/SettingsLib/res/values-mn/arrays.xml
index 66806a7..73f4099 100644
--- a/packages/SettingsLib/res/values-mn/arrays.xml
+++ b/packages/SettingsLib/res/values-mn/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Өгөгдмөл)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Системийн сонголтыг ашиглах (Өгөгдмөл)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Нэмэлт кодлогчийг идэвхжүүлэх"</item>
+    <item msgid="3304843301758635896">"Нэмэлт кодлогчийг идэвхгүй болгох"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Системийн сонголтыг ашиглах (Өгөгдмөл)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Нэмэлт кодлогчийг идэвхжүүлэх"</item>
+    <item msgid="741805482892725657">"Нэмэлт кодлогчийг идэвхгүй болгох"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Системийн сонголтыг ашиглах (Өгөгдмөл)"</item>
     <item msgid="8895532488906185219">"44.1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index 1e864da..f6abd54 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-р холбогдсон"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s-р боломжтой"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Холбогдсон, интернэт байхгүй байна"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Хандах цэг түр хугацаанд дүүрсэн байна"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s-р холбогдсон"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s-р боломжтой"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Маш удаан"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Удаан"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ЗА"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Дунд"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Хурдан"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Маш хурдан"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Салгагдсан"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Салгаж байна…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Холбогдож байна..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi сүлжээний дохио хоёр баганатай байна."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi сүлжээний дохио гурван баганатай байна."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi-н дохио дүүрэн байна."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Нээлттэй сүлжээ"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Аюулгүй сүлжээ"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Андройд OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Арилгасан апп-ууд"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Арилгасан апп-ууд болон хэрэглэгчид"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi Роум сканыг байнга зөвшөөрөх"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Мобайл дата байнга идэвхтэй"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Модем болгох хардвер хурдасгуур"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Нэргүй Bluetooth төхөөрөмжийг харуулах"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Үнэмлэхүй дууны түвшинг идэвхгүй болгох"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Сүлжээний хонхны аяыг идэвхжүүлэх"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP хувилбар"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Эдгээр тохиргоо нь зөвхөн хөгжүүлэлтэд ашиглах зорилготой. Эдгээр нь таны төхөөрөмж буюу түүн дээрх аппликейшнүүдийг эвдрэх, буруу ажиллах шалтгаан нь болж болно."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Апп-г USB-р тулгах"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT-р суулгасан апп-уудыг хорлонтой авиртай эсэхийг шалгах."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Нэргүй Bluetooth төхөөрөмжийг (зөвхөн MAC хаяг) харуулна"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Хэт чанга дуугаралт эсвэл муу тохиргоо зэрэг алсын зайн төхөөрөмжийн дуугаралттай холбоотой асуудлын үед Bluetooth-ийн үнэмлэхүй дууны түвшинг идэвхгүй болго."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Утасны хонхны аяыг Bluetooth чихэвчээр тоглуулахыг зөвшөөрөх"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Локал терминал"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> үлдсэн"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"бүрэн цэнэглэх хүртэл <xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Тодорхойгүй"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Цэнэглэж байна"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"цэнэглэж байна"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Цэнэглэхгүй байна"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Цэнэглэхгүй байна"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Залгаастай тул одоо цэнэглэх боломжгүй"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Дүүрэн"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Админ удирдсан"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Админ идэвхжүүлсэн"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Тогтмол утга (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Тусламж, санал хүсэлт"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Цэс"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"Гринвичийн цаг"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Үйлдвэрийн тохиргоог демо горимд ажиллуулахын тулд нууц үг оруулна уу"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Дараагийн"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Нууц үг шаардлагатай"</string>
diff --git a/packages/SettingsLib/res/values-mr/arrays.xml b/packages/SettingsLib/res/values-mr/arrays.xml
index 85e9955..6064949 100644
--- a/packages/SettingsLib/res/values-mr/arrays.xml
+++ b/packages/SettingsLib/res/values-mr/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (डीफॉल्ट)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"प्रणाली निवड वापरा (डीफॉल्ट)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ऑडिओ"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ऑडिओ"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"पर्यायी कोडेक सक्षम करा"</item>
+    <item msgid="3304843301758635896">"पर्यायी कोडेक अक्षम करा"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"प्रणाली निवड वापरा (डीफॉल्ट)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ऑडिओ"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ऑडिओ"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"पर्यायी कोडेक सक्षम करा"</item>
+    <item msgid="741805482892725657">"पर्यायी कोडेक अक्षम करा"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"प्रणाली निवड वापरा (डीफॉल्ट)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index 0d5f90b..91e0b10 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -22,7 +22,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="wifi_fail_to_scan" msgid="1265540342578081461">"नेटवर्कसाठी स्कॅन करू शकत नाही"</string>
     <string name="wifi_security_none" msgid="7985461072596594400">"काहीही नाही"</string>
-    <string name="wifi_remembered" msgid="4955746899347821096">"जतन केले"</string>
+    <string name="wifi_remembered" msgid="4955746899347821096">"सेव्ह केले"</string>
     <string name="wifi_disabled_generic" msgid="4259794910584943386">"अक्षम"</string>
     <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP कॉन्फिगरेशन अयशस्वी"</string>
     <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"कमी दर्जाच्या नेटवर्कमुळे कनेक्ट केलेले नाही"</string>
@@ -33,22 +33,26 @@
     <string name="wifi_check_password_try_again" msgid="516958988102584767">"पासवर्ड तपासा आणि पुन्‍हा प्रयत्‍न करा"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"परिक्षेत्रामध्ये नाही"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"स्वयंचलितपणे कनेक्ट करणार नाही"</string>
-    <string name="wifi_no_internet" msgid="3880396223819116454">"इंटरनेट प्रवेश नाही"</string>
-    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> द्वारे जतन केले"</string>
+    <string name="wifi_no_internet" msgid="3880396223819116454">"इंटरनेट अॅक्सेस नाही"</string>
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> द्वारे सेव्ह केले"</string>
     <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s द्वारे स्वयंचलितपणे कनेक्ट केले"</string>
     <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"नेटवर्क रेटिंग प्रदात्याद्वारे स्वयंचलितपणे कनेक्ट केले"</string>
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s द्वारे कनेक्‍ट केले"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s द्वारे उपलब्‍ध"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"कनेक्‍ट केले, इंटरनेट नाही"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"अॅक्सेस पॉइंट तात्पुरते भरलेले"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ने कनेक्‍ट केले"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s ने उपलब्‍ध"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"खूप हळू"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"हळू"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ठीक आहे"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"मध्‍यम"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"जलद"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"खूप जलद"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"डिस्कनेक्ट केले"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"डिस्कनेक्ट करत आहे..."</string>
-    <string name="bluetooth_connecting" msgid="8555009514614320497">"कनेक्ट करीत आहे..."</string>
+    <string name="bluetooth_connecting" msgid="8555009514614320497">"कनेक्ट करत आहे..."</string>
     <string name="bluetooth_connected" msgid="6038755206916626419">"कनेक्ट केले"</string>
     <string name="bluetooth_pairing" msgid="1426882272690346242">"जोडत आहे…"</string>
     <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"कनेक्ट केले (फोन नाही)"</string>
@@ -63,10 +67,10 @@
     <string name="bluetooth_profile_headset" msgid="7815495680863246034">"फोन कॉल"</string>
     <string name="bluetooth_profile_opp" msgid="9168139293654233697">"फाइल स्थानांतरण"</string>
     <string name="bluetooth_profile_hid" msgid="3680729023366986480">"इनपुट डिव्हाइस"</string>
-    <string name="bluetooth_profile_pan" msgid="3391606497945147673">"इंटरनेट प्रवेश"</string>
+    <string name="bluetooth_profile_pan" msgid="3391606497945147673">"इंटरनेट अॅक्सेस"</string>
     <string name="bluetooth_profile_pbap" msgid="5372051906968576809">"संपर्क सामायिकरण"</string>
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"संपर्क सामायिकरणासाठी वापरा"</string>
-    <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"इंटरनेट कनेक्शन सामायिकरण"</string>
+    <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"इंटरनेट कनेक्शन शेअररण"</string>
     <string name="bluetooth_profile_map" msgid="1019763341565580450">"मजकूर संदेश"</string>
     <string name="bluetooth_profile_sap" msgid="5764222021851283125">"सिम प्रवेश"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="5444517801472820055">"HD ऑडिओ: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
@@ -78,36 +82,38 @@
     <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP शी कनेक्‍ट केले"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"फाइल स्थानांतर सर्व्हरशी कनेक्ट केले नाही"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"इनपुट डिव्हाइसवर कनेक्ट केले"</string>
-    <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"इंटरनेट प्रवेशासाठी डिव्हाइसवर कनेक्ट केले"</string>
-    <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"डिव्हाइससह स्थानिक इंटरनेट कनेक्शन सामायिक करत आहे"</string>
-    <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"इंटरनेट प्रवेशासाठी वापरा"</string>
+    <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"इंटरनेट अॅक्सेससाठी डीव्हाइसवर कनेक्ट केले"</string>
+    <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"डीव्हाइससह स्थानिक इंटरनेट कनेक्शन शेअर करत आहे"</string>
+    <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"इंटरनेट अॅक्सेससाठी वापरा"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"नकाशासाठी वापरा"</string>
     <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM प्रवेशासाठी वापरा"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"मीडिया ऑडिओसाठी वापरा"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"फोन ऑडिओसाठी वापरा"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"फाईल स्थानांतरणासाठी वापरा"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"इनपुट साठी वापरा"</string>
-    <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"जोडा"</string>
-    <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"जोडा"</string>
+    <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"पेअर करा"</string>
+    <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"पेअर करा"</string>
     <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"रद्द करा"</string>
-    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"कनेक्‍ट केल्यावर जोडणी आपले संपर्क आणि कॉल इतिहास यावरील प्रवेशास मंजूरी देते."</string>
+    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"कनेक्‍ट केल्यावर पेअरींग तुमचे संपर्क आणि कॉल इतिहास यामध्ये अॅक्सेस देते."</string>
     <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> शी जोडू शकलो नाही."</string>
     <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"अयोग्य पिन किंवा पासकीमुळे <xliff:g id="DEVICE_NAME">%1$s</xliff:g> सह जोडू शकलो नाही."</string>
-    <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> शी संप्रेषण करू शकत नाही."</string>
-    <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> द्वारे जोडणी नाकारली."</string>
+    <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> शी संवाद प्रस्थापित करू शकत नाही."</string>
+    <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> द्वारे पेअरींग नाकारले."</string>
     <string name="accessibility_wifi_off" msgid="1166761729660614716">"वाय फाय बंद."</string>
     <string name="accessibility_no_wifi" msgid="8834610636137374508">"वाय फाय डिस्कनेक्ट झाले."</string>
     <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"वाय फाय एक बार."</string>
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"वाय फाय दोन बार."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"वाय फाय तीन बार."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"वाय फाय सिग्नल संपूर्ण आहे."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"नेटवर्क उघडा"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"सुरक्षित नेटवर्क"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"काढलेले अॅप्स"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"काढलेले अॅप्स आणि वापरकर्ते"</string>
     <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB टेदरिंग"</string>
     <string name="tether_settings_title_wifi" msgid="3277144155960302049">"पोर्टेबल हॉटस्पॉट"</string>
-    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"ब्लूटुथ टेदरिंग"</string>
-    <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"टिथरिंग"</string>
+    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"ब्लूटूथ टेदरिंग"</string>
+    <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"टेदरिंग"</string>
     <string name="tether_settings_title_all" msgid="8356136101061143841">"टेदरिंग आणि पोर्टेबल हॉटस्पॉट"</string>
     <string name="managed_user_title" msgid="8109605045406748842">"सर्व कार्य अॅप्स"</string>
     <string name="user_guest" msgid="8475274842845401871">"अतिथी"</string>
@@ -127,9 +133,9 @@
     <string name="tts_default_lang_summary" msgid="5219362163902707785">"बोललेल्या मजकुरासाठी भाषा-विशिष्ट आवाज सेट करते"</string>
     <string name="tts_play_example_title" msgid="7094780383253097230">"उदाहरण ऐका"</string>
     <string name="tts_play_example_summary" msgid="8029071615047894486">"उच्चार संश्लेषणाचे एक छोटेसे प्रात्यक्षिक प्ले करा"</string>
-    <string name="tts_install_data_title" msgid="4264378440508149986">"व्हॉइस डेटा स्थापित करा"</string>
-    <string name="tts_install_data_summary" msgid="5742135732511822589">"उच्चार संश्लेषणासाठी आवश्यक आवाज डेटा स्थापित करा"</string>
-    <string name="tts_engine_security_warning" msgid="8786238102020223650">"हे उच्चार संश्लेषण इंजिन संकेतशब्द आणि क्रेडिट कार्ड नंबर यासारख्या वैयक्तिक मजकुरासह, बोलला जाणारा सर्व मजकूर संकलित करण्यात सक्षम होऊ शकते. हे <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> इंजिनवरून येते. या उच्चार संश्लेषण इंजिनचा वापर सक्षम करायचा?"</string>
+    <string name="tts_install_data_title" msgid="4264378440508149986">"व्हॉइस डेटा इंस्टॉल करा"</string>
+    <string name="tts_install_data_summary" msgid="5742135732511822589">"उच्चार संश्लेषणासाठी आवश्यक आवाज डेटा इंस्टॉल करा"</string>
+    <string name="tts_engine_security_warning" msgid="8786238102020223650">"हे उच्चार संश्लेषण इंजिन पासवर्ड आणि क्रेडिट कार्ड नंबर यासारख्या वैयक्तिक मजकुरासह, बोलला जाणारा सर्व मजकूर संकलित करण्यात सक्षम होऊ शकते. हे <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> इंजिनवरून येते. या उच्चार संश्लेषण इंजिनचा वापर सक्षम करायचा?"</string>
     <string name="tts_engine_network_required" msgid="1190837151485314743">"या भाषेस टेक्‍स्‍ट टू स्‍पीचसाठी एका नेटवर्क कनेक्शनची आवश्यकता आहे."</string>
     <string name="tts_default_sample_string" msgid="4040835213373086322">"हे उच्चार संश्लेषणाचे एक उदाहरण आहे"</string>
     <string name="tts_status_title" msgid="7268566550242584413">"डीफॉल्ट भाषा स्थिती"</string>
@@ -157,54 +163,55 @@
     <string name="choose_profile" msgid="6921016979430278661">"प्रोफाइल निवडा"</string>
     <string name="category_personal" msgid="1299663247844969448">"वैयक्तिक"</string>
     <string name="category_work" msgid="8699184680584175622">"कार्य"</string>
-    <string name="development_settings_title" msgid="215179176067683667">"विकासक पर्याय"</string>
-    <string name="development_settings_enable" msgid="542530994778109538">"विकासक पर्याय सक्षम करा"</string>
+    <string name="development_settings_title" msgid="215179176067683667">"डेव्हलपर पर्याय"</string>
+    <string name="development_settings_enable" msgid="542530994778109538">"डेव्हलपर पर्याय सुरू करा"</string>
     <string name="development_settings_summary" msgid="1815795401632854041">"अॅप विकासासाठी पर्याय सेट करा"</string>
-    <string name="development_settings_not_available" msgid="4308569041701535607">"या वापरकर्त्यासाठी विकासक पर्याय उपलब्ध नाहीत"</string>
+    <string name="development_settings_not_available" msgid="4308569041701535607">"या वापरकर्त्यासाठी डेव्हलपर पर्याय उपलब्ध नाहीत"</string>
     <string name="vpn_settings_not_available" msgid="956841430176985598">"या वापरकर्त्यासाठी VPN सेटिंग्ज उपलब्ध नाहीत"</string>
-    <string name="tethering_settings_not_available" msgid="6765770438438291012">"या वापरकर्त्यासाठी टिथरिंग सेटिंग्ज उपलब्ध नाहीत"</string>
-    <string name="apn_settings_not_available" msgid="7873729032165324000">"या वापरकर्त्यासाठी प्रवेश बिंदू नाव सेटिंग्ज उपलब्ध नाहीत"</string>
+    <string name="tethering_settings_not_available" msgid="6765770438438291012">"या वापरकर्त्यासाठी टेदरिंग सेटिंग्ज उपलब्ध नाहीत"</string>
+    <string name="apn_settings_not_available" msgid="7873729032165324000">"या वापरकर्त्यासाठी अॅक्सेस बिंदू नाव सेटिंग्ज उपलब्ध नाहीत"</string>
     <string name="enable_adb" msgid="7982306934419797485">"USB डीबग करणे"</string>
     <string name="enable_adb_summary" msgid="4881186971746056635">"USB कनेक्ट केलेले असताना डीबग मोड"</string>
-    <string name="clear_adb_keys" msgid="4038889221503122743">"USB डीबग करणारी प्रमाणिकरणे पुनर्प्राप्त करा"</string>
-    <string name="bugreport_in_power" msgid="7923901846375587241">"दोष अहवाल शॉर्टकट"</string>
-    <string name="bugreport_in_power_summary" msgid="1778455732762984579">"दोष अहवाल घेण्यासाठी पॉवर मेनूमध्ये एक बटण दर्शवा"</string>
+    <string name="clear_adb_keys" msgid="4038889221503122743">"USB डीबग करणारी प्रमाणीकरणे रीव्होक करा"</string>
+    <string name="bugreport_in_power" msgid="7923901846375587241">"बग रीपोर्ट शॉर्टकट"</string>
+    <string name="bugreport_in_power_summary" msgid="1778455732762984579">"बग रीपोर्ट घेण्यासाठी पॉवर मेनूमध्ये एक बटण दर्शवा"</string>
     <string name="keep_screen_on" msgid="1146389631208760344">"सक्रिय रहा"</string>
     <string name="keep_screen_on_summary" msgid="2173114350754293009">"चार्ज होत असताना स्क्रीन कधीही निष्क्रिय होणार नाही"</string>
-    <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ब्लूटुथ HCI स्नूप लॉग सक्षम करा"</string>
-    <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"सर्व ब्लूटुथ HCI पॅकेट एका फाईलमध्ये कॅप्चर करा"</string>
+    <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ब्लूटूथ HCI स्नूप लॉग सक्षम करा"</string>
+    <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"सर्व ब्लूटूथ HCI पॅकेट एका फाईलमध्ये कॅप्चर करा"</string>
     <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM अनलॉक करणे"</string>
     <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"बूटलोडर अनलॉक करण्यासाठी अनुमती द्या"</string>
     <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM अनलॉक करण्यास अनुमती द्यायची?"</string>
-    <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"चेतावणी: ही सेटिंग चालू असताना या डिव्हाइसवर डिव्हाइस संरक्षण वैशिष्ट्ये कार्य करणार नाहीत."</string>
+    <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"चेतावणी: हे सेटिंग चालू असताना या डिव्हाइस वर डिव्हाइस संरक्षण वैशिष्ट्ये काम करणार नाहीत."</string>
     <string name="mock_location_app" msgid="7966220972812881854">"बनावट स्थान अॅप निवडा"</string>
     <string name="mock_location_app_not_set" msgid="809543285495344223">"कोणताही बनावट स्थान अॅप सेट केला नाही"</string>
     <string name="mock_location_app_set" msgid="8966420655295102685">"बनावट स्थान अॅप: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="7044075693643009662">"नेटवर्किंग"</string>
-    <string name="wifi_display_certification" msgid="8611569543791307533">"वायरलेस प्रदर्शन प्रमाणीकरण"</string>
-    <string name="wifi_verbose_logging" msgid="4203729756047242344">"वाय-फाय शब्दपाल्हाळ लॉगिंग सक्षम करा"</string>
-    <string name="wifi_aggressive_handover" msgid="5309131983693661320">"मोबाइलकडे सोपवण्यासाठी आक्रमक वाय-फाय"</string>
+    <string name="wifi_display_certification" msgid="8611569543791307533">"वायरलेस डिस्प्ले प्रमाणीकरण"</string>
+    <string name="wifi_verbose_logging" msgid="4203729756047242344">"वाय-फाय व्हर्बोझ लॉगिंग सक्षम करा"</string>
+    <string name="wifi_aggressive_handover" msgid="5309131983693661320">"मोबाइलकडे सोपवण्यासाठी अॅग्रेसिव्ह वाय-फाय"</string>
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"वाय-फाय रोम स्‍कॅनला नेहमी अनुमती द्या"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"मोबाइल डेटा नेहमी सक्रिय"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"टेदरिंग हार्डवेअर प्रवेग"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"नावांशिवाय ब्‍लूटूथ डिव्‍हाइस दाखवा"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"संपूर्ण आवाज अक्षम करा"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"इन-बँड रिंगिंग सक्षम करा"</string>
-    <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ब्लूटुथ AVRCP आवृत्ती"</string>
-    <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"ब्लूटुथ AVRCP आवृत्ती निवडा"</string>
+    <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ब्लूटूथ AVRCP आवृत्ती"</string>
+    <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"ब्लूटूथ AVRCP आवृत्ती निवडा"</string>
     <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ब्लूटूथ ऑडिओ कोडेक"</string>
-    <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="4558347981670553665">"ब्लूटुथ ऑडिओ कोडेक निवडा"</string>
-    <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ब्लूटूथ ऑडिओ नमुना दर"</string>
-    <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="5628790207448471613">"ब्लूटुथ ऑडिओ कोडेक निवडा:\nनमुना दर"</string>
-    <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"प्रति नमुना ब्लूटुथ ऑडिओ बिट"</string>
-    <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="4546131401358681321">"ब्लूटुथ ऑडिओ कोडेक निवडा:\nबिट प्रति नमुना"</string>
+    <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="4558347981670553665">"ब्लूटूथ ऑडिओ कोडेक निवडा"</string>
+    <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ब्लूटूथ ऑडिओ पॅटर्न दर"</string>
+    <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="5628790207448471613">"ब्लूटूध ऑडिओ कोडेक निवडा:\nपॅटर्न दर"</string>
+    <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"प्रति पॅटर्न ब्लूटूध ऑडिओ बिट"</string>
+    <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="4546131401358681321">"ब्लूटूध ऑडिओ कोडेक निवडा:\nबिट प्रति पॅटर्न"</string>
     <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ब्लूटूथ ऑडिओ चॅनेल मोड"</string>
-    <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="9133545781346216071">"ब्लूटुथ ऑडिओ कोडेक निवडा:\nचॅनेल मोड"</string>
-    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ब्लूटुथ ऑडिओ LDAC कोडेक: प्लेबॅक गुणवत्ता"</string>
-    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"ब्लूटुथ ऑडिओ LDAC कोडेक निवडा:\nप्लेबॅक गुणवत्ता"</string>
-    <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"धारावाहिक: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
-    <string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस प्रदर्शन प्रमाणिकरणासाठी पर्याय दर्शवा"</string>
-    <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाय-फाय लॉगिंग स्‍तर वाढवा, वाय-फाय निवडकामध्‍ये प्रति SSID RSSI दर्शवा"</string>
-    <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"सक्षम केले असताना, वाय-फाय सिग्‍नल कमी असताना, मोबाइलकडे डेटा कनेक्‍शन सोपवण्यासाठी वाय-फाय अधिक आक्रमक असेल."</string>
+    <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="9133545781346216071">"ब्लूटूथ ऑडिओ कोडेक निवडा:\nचॅनेल मोड"</string>
+    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ब्लूटूथ ऑडिओ LDAC कोडेक: प्लेबॅक गुणवत्ता"</string>
+    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"ब्लूटूथ ऑडिओ LDAC कोडेक निवडा:\nप्लेबॅक गुणवत्ता"</string>
+    <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"स्ट्रीमिंग: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
+    <string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस डिस्प्ले प्रमाणिकरणाचे पर्याय दाखवा"</string>
+    <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाय-फाय लॉगिंग स्‍तर वाढवा, वाय-फाय सिलेक्टरमध्‍ये प्रति SSID RSSI दर्शवा"</string>
+    <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"सक्षम केले असताना, वाय-फाय सिग्‍नल कमी असताना, मोबाइलकडे डेटा कनेक्‍शन सोपवण्यासाठी वाय-फाय अधिक अॅग्रेसिव्ह असेल."</string>
     <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"वाय-फाय रोम स्‍कॅनला इंटरफेसवर उपस्‍थित असलेल्‍या रहदारी डेटाच्या प्रमाणावर आधारित अनुमती द्या/अनुमती देऊ नका"</string>
     <string name="select_logd_size_title" msgid="7433137108348553508">"लॉगर बफर आकार"</string>
     <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"प्रति लॉग बफर लॉगर आकार निवडा"</string>
@@ -217,29 +224,30 @@
     <string name="allow_mock_location" msgid="2787962564578664888">"बनावट स्थानांना अनुमती द्या"</string>
     <string name="allow_mock_location_summary" msgid="317615105156345626">"बनावट स्थानांना अनुमती द्या"</string>
     <string name="debug_view_attributes" msgid="6485448367803310384">"दृश्‍य विशेषता तपासणी सक्षम करा"</string>
-    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"जरी वाय-फाय सक्रिय असले तरीही, नेहमी मोबाईल डेटा सक्रिय ठेवा (जलद नेटवर्क स्विच करण्यासाठी)."</string>
+    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"जरी वाय-फाय चालू असले तरीही, मोबाईल डेटा नेहमी चालू ठेवा (नेटवर्क जलदरीत्या स्विच करण्यासाठी)."</string>
     <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"उपलब्ध असल्यास टेदरिंग हार्डवेअर प्रवेग वापरा"</string>
     <string name="adb_warning_title" msgid="6234463310896563253">"USB डीबग करण्यास अनुमती द्यायची?"</string>
-    <string name="adb_warning_message" msgid="7316799925425402244">"USB डीबग करण्याचा हेतू फक्त विकासाच्या उद्देशांसाठी आहे. याचा वापर आपला संगणक आणि आपले डिव्हाइस यांच्या दरम्यान डेटा कॉपी करण्यासाठी करा, सूचनेशिवाय आपल्या डिव्हाइसवर अॅप्स स्थापित करा आणि लॉग डेटा वाचा."</string>
-    <string name="adb_keys_warning_message" msgid="5659849457135841625">"आपण पूर्वी प्राधिकृत केलेल्या सर्व संगणकांवरुन USB डीबग करण्यासाठी प्रवेश पुनर्प्राप्त करायचा?"</string>
+    <string name="adb_warning_message" msgid="7316799925425402244">"USB डीबग करण्याचा हेतू फक्त विकास उद्देशांसाठी आहे. याचा वापर तुमचा कॉंप्युटर आणि तुमचे डिव्हाइस यांच्या दरम्यान डेटा कॉपी करण्यासाठी करा, सूचनेशिवाय तुमच्या डिव्हाइस वर अॅप्स इंस्टॉल करा आणि लॉग डेटा वाचा."</string>
+    <string name="adb_keys_warning_message" msgid="5659849457135841625">"आपण पूर्वी अॉथोराइझ केलेल्या सर्व संगणकांवरुन USB डीबग करण्यासाठी अॅक्सेस रीव्होक करायचा?"</string>
     <string name="dev_settings_warning_title" msgid="7244607768088540165">"विकास सेटिंग्जला अनुमती द्यायची?"</string>
-    <string name="dev_settings_warning_message" msgid="2298337781139097964">"या सेटिंग्जचा हेतू फक्त विकास करण्याच्या वापरासाठी आहे. त्यामुळे आपले डिव्हाइस आणि त्यावरील अनुप्रयोग विघटित होऊ शकतात किंवा गैरवर्तन करू शकतात."</string>
-    <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB वरील अॅप्स सत्यापित करा"</string>
-    <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"हानिकारक वर्तनासाठी ADB/ADT द्वारे स्थापित अॅप्स तपासा."</string>
-    <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"दूरस्थ डिव्हाइसेसमध्ये सहन न होणारा मोठा आवाज किंवा नियंत्रणचा अभाव यासारखी आवाजाची समस्या असल्यास ब्लूटुथ संपूर्ण आवाज वैशिष्ट्य अक्षम करते."</string>
-    <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"फोनवरील रिंगटोन ब्लूटुथ हेडसेटवर वाजू द्या"</string>
+    <string name="dev_settings_warning_message" msgid="2298337781139097964">"या सेटिंग्जचा हेतू फक्त विकास वापरासाठी आहे. त्यामुळे तुमचे डिव्हाइस आणि त्यावरील अॅप्लिकेशन ब्रेक होऊ शकतात किंवा नेहमीपेक्षा वेगळे वर्तन करू शकतात."</string>
+    <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB वर अॅप्स पडताळून पाहा"</string>
+    <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"हानिकारक वर्तनासाठी ADB/ADT द्वारे इंस्टॉल अॅप्स तपासा."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"नावांशिवाय ब्‍लूटूथ डीव्‍हाइस (फक्‍त MAC पत्‍ते) दाखवले जातील"</string>
+    <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"दूरस्थ डीव्हाइसमध्ये सहन न होणारा मोठा आवाज किंवा नियंत्रणचा अभाव यासारखी आवाजाची समस्या असल्यास ब्लूटूथ संपूर्ण आवाज वैशिष्ट्य अक्षम करते."</string>
+    <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"फोनवरील रिंगटोन ब्लूटूथ हेडसेटवर वाजू द्या"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"स्थानिक टर्मिनल"</string>
     <string name="enable_terminal_summary" msgid="67667852659359206">"स्थानिक शेल प्रवेश देणारा टर्मिनल अॅप सक्षम करा"</string>
     <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP तपासणी"</string>
     <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP तपासणी वर्तन सेट करा"</string>
     <string name="debug_debugging_category" msgid="6781250159513471316">"डीबग करणे"</string>
     <string name="debug_app" msgid="8349591734751384446">"डीबग अॅप निवडा"</string>
-    <string name="debug_app_not_set" msgid="718752499586403499">"कोणताही डीबग अनुप्रयोग सेट नाही"</string>
-    <string name="debug_app_set" msgid="2063077997870280017">"अनुप्रयोग डीबग करीत आहे: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
-    <string name="select_application" msgid="5156029161289091703">"अनुप्रयोग निवडा"</string>
+    <string name="debug_app_not_set" msgid="718752499586403499">"कोणतेही डीबग अॅप्लिकेशन सेट नाही"</string>
+    <string name="debug_app_set" msgid="2063077997870280017">"अॅप्लिकेशन डीबग करत आहे: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="select_application" msgid="5156029161289091703">"अॅप्लिकेशन निवडा"</string>
     <string name="no_application" msgid="2813387563129153880">"काहीही नाही"</string>
     <string name="wait_for_debugger" msgid="1202370874528893091">"डीबगरची प्रतीक्षा करा"</string>
-    <string name="wait_for_debugger_summary" msgid="1766918303462746804">"डीबग केलेला अनुप्रयोग अंमलात आणण्यापूर्वी डीबगर संलग्न करण्याची प्रतीक्षा करतो"</string>
+    <string name="wait_for_debugger_summary" msgid="1766918303462746804">"डीबग केलेले अॅप्लिकेशन अंमलात आणण्यापूर्वी डीबगर संलग्न करण्याची प्रतीक्षा करतो"</string>
     <string name="telephony_monitor_switch" msgid="1764958220062121194">"टेलिफोनी मॉनिटर"</string>
     <string name="telephony_monitor_switch_summary" msgid="7695552966547975635">"टेलिफोनी/मोडेमच्‍या कार्यक्षमतेत समस्‍या आढळल्‍यावर टेलिफोनी मॉनिटर लॉग्‍ज गोळा करेल आणि दोष फाइल करण्‍यासाठी वापरकर्त्याला सूचनेचे संकेत देईल"</string>
     <string name="debug_input_category" msgid="1811069939601180246">"इनपुट"</string>
@@ -250,18 +258,18 @@
     <string name="strict_mode" msgid="1938795874357830695">"कठोर मोड सक्षम"</string>
     <string name="strict_mode_summary" msgid="142834318897332338">"मुख्य थ्रेडवर अॅप्स मोठी कार्ये करतात तेव्हा स्क्रीन फ्लॅश करा"</string>
     <string name="pointer_location" msgid="6084434787496938001">"पॉइंटर स्थान"</string>
-    <string name="pointer_location_summary" msgid="840819275172753713">"वर्तमान स्पर्श डेटा दर्शविणारे स्क्रीन आच्छादन"</string>
+    <string name="pointer_location_summary" msgid="840819275172753713">"वर्तमान स्पर्श डेटा दर्शविणारे स्क्रीन ओव्हरले"</string>
     <string name="show_touches" msgid="2642976305235070316">"टॅप दर्शवा"</string>
     <string name="show_touches_summary" msgid="6101183132903926324">"टॅपसाठी दृश्यमान अभिप्राय दर्शवा"</string>
-    <string name="show_screen_updates" msgid="5470814345876056420">"पृष्ठभाग अद्यतने दर्शवा"</string>
+    <string name="show_screen_updates" msgid="5470814345876056420">"पृष्ठभाग अपडेट दर्शवा"</string>
     <string name="show_screen_updates_summary" msgid="2569622766672785529">"संपूर्ण विंडो पृष्ठभाग अद्ययावत होतात तेव्हा ते फ्‍लॅश करा"</string>
-    <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU दृश्य अद्यतने दर्शवा"</string>
+    <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU दृश्य अपडेट दर्शवा"</string>
     <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU सह रेखांकित करताना विंडोच्या आतील दृश्ये फ्लॅश करा"</string>
-    <string name="show_hw_layers_updates" msgid="5645728765605699821">"हार्डवेअर स्तर अद्यतने दर्शवा"</string>
+    <string name="show_hw_layers_updates" msgid="5645728765605699821">"हार्डवेअर स्तर अपडेट दर्शवा"</string>
     <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"हार्डवेअर स्तर अद्ययावत झाल्यावर ते हिरव्या रंगात फ्लॅश करा"</string>
-    <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU अधोरेखांकित डीबग करा"</string>
+    <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ओव्हरड्रॉ डीबग करा"</string>
     <string name="debug_hw_renderer" msgid="7568529019431785816">"GPU प्रदाता सेट करा"</string>
-    <string name="disable_overlays" msgid="2074488440505934665">"HW आच्छादने अक्षम करा"</string>
+    <string name="disable_overlays" msgid="2074488440505934665">"HW ओव्हरले अक्षम करा"</string>
     <string name="disable_overlays_summary" msgid="3578941133710758592">"स्क्रीन तयार करण्यासाठी नेहमी GPU वापरा"</string>
     <string name="simulate_color_space" msgid="6745847141353345872">"रंग स्थानाची बतावणी करा"</string>
     <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ट्रेस सक्षम करा"</string>
@@ -282,25 +290,25 @@
     <string name="animator_duration_scale_title" msgid="3406722410819934083">"अॅनिमेटर कालावधी स्केल"</string>
     <string name="overlay_display_devices_title" msgid="5364176287998398539">"दुय्यम प्रदर्शनांची बतावणी करा"</string>
     <string name="debug_applications_category" msgid="4206913653849771549">"अॅप्स"</string>
-    <string name="immediately_destroy_activities" msgid="1579659389568133959">"क्रियाकलाप ठेवू नका"</string>
-    <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"वापरकर्त्याने प्रत्येक क्रियाकलाप सोडताच तो नष्ट करा"</string>
+    <string name="immediately_destroy_activities" msgid="1579659389568133959">"अॅक्टिव्हिटी ठेवू नका"</string>
+    <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"वापरकर्त्याने प्रत्येक अॅक्टिव्हिटी सोडताच ती नष्ट करा"</string>
     <string name="app_process_limit_title" msgid="4280600650253107163">"पार्श्वभूमी प्रक्रिया मर्यादा"</string>
     <string name="show_all_anrs" msgid="28462979638729082">"सर्व ANR दर्शवा"</string>
     <string name="show_all_anrs_summary" msgid="641908614413544127">"पार्श्वभूमी अॅप्ससाठी अॅप प्रतिसाद देत नाही संवाद दर्शवा"</string>
     <string name="show_notification_channel_warnings" msgid="1399948193466922683">"सूचना चॅनेल चेतावण्या दाखवा"</string>
     <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"एखादे अ‍ॅप वैध चॅनेलशिवाय सूचना पोस्ट करते तेव्हा स्क्रीनवर चेतावणी देते"</string>
     <string name="force_allow_on_external" msgid="3215759785081916381">"बाह्यवर अॅप्सना अनुमती देण्याची सक्ती करा"</string>
-    <string name="force_allow_on_external_summary" msgid="3640752408258034689">"मॅनिफेस्ट मूल्यांकडे दुर्लक्ष करून, कोणत्याही अॅपला बाह्य संचयनावर लेखन केले जाण्यासाठी पात्र बनविते"</string>
+    <string name="force_allow_on_external_summary" msgid="3640752408258034689">"manifest मूल्यांकडे दुर्लक्ष करून, कोणत्याही अॅपला बाह्य स्टोरेजवर लेखन केले जाण्यासाठी पात्र बनविते"</string>
     <string name="force_resizable_activities" msgid="8615764378147824985">"क्र‍ियाकलापाचा आकार बदलण्यायोग्य होण्याची सक्ती करा"</string>
-    <string name="force_resizable_activities_summary" msgid="6667493494706124459">"मॅनिफेस्ट मूल्यांकडे दुर्लक्ष करून, एकाधिक-विंडोसाठी सर्व क्रियाकलापांचा आकार बदलण्यायोग्य करा."</string>
+    <string name="force_resizable_activities_summary" msgid="6667493494706124459">"manifest मूल्यांकडे दुर्लक्ष करून, एकाधिक-विंडोसाठी सर्व क्रियाकलापांचा आकार बदलण्यायोग्य करा."</string>
     <string name="enable_freeform_support" msgid="1461893351278940416">"freeform विंडो सक्षम करा"</string>
     <string name="enable_freeform_support_summary" msgid="8247310463288834487">"प्रायोगिक मुक्तस्वरूपाच्या विंडोसाठी समर्थन सक्षम करा."</string>
-    <string name="local_backup_password_title" msgid="3860471654439418822">"डेस्कटॉप बॅकअप संकेतशब्द"</string>
+    <string name="local_backup_password_title" msgid="3860471654439418822">"डेस्कटॉप बॅकअप पासवर्ड"</string>
     <string name="local_backup_password_summary_none" msgid="6951095485537767956">"डेस्कटॉप पूर्ण बॅक अप सध्या संरक्षित नाहीत"</string>
-    <string name="local_backup_password_summary_change" msgid="5376206246809190364">"डेस्कटॉपच्या पूर्ण बॅकअपसाठी असलेला संकेतशब्द बदलण्यासाठी किंवा काढण्यासाठी टॅप  करा"</string>
-    <string name="local_backup_password_toast_success" msgid="582016086228434290">"नवीन बॅक अप संकेतशब्द सेट झाला"</string>
-    <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"नवीन संकेतशब्द आणि पुष्टीकरण जुळत नाही"</string>
-    <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"बॅक अप संकेतशब्द सेट करणे अयशस्वी"</string>
+    <string name="local_backup_password_summary_change" msgid="5376206246809190364">"डेस्कटॉपच्या पूर्ण बॅकअपसाठी असलेला पासवर्ड बदलण्यासाठी किंवा काढण्यासाठी टॅप  करा"</string>
+    <string name="local_backup_password_toast_success" msgid="582016086228434290">"नवीन बॅक अप पासवर्ड सेट झाला"</string>
+    <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"नवीन पासवर्ड आणि पुष्टीकरण जुळत नाही"</string>
+    <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"बॅक अप पासवर्ड सेट करणे अयशस्वी"</string>
   <string-array name="color_mode_names">
     <item msgid="2425514299220523812">"सशक्त (डीफॉल्ट)"</item>
     <item msgid="8446070607501413455">"नैसर्गिक"</item>
@@ -321,7 +329,7 @@
     <string name="select_webview_provider_toast_text" msgid="5466970498308266359">"ही निवड यापुढे वैध असणार नाही. पुन्हा प्रयत्न करा."</string>
     <string name="convert_to_file_encryption" msgid="3060156730651061223">"फाईल कूटबद्धीकरणावर रूपांतरित करा"</string>
     <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"रूपांतरित करा..."</string>
-    <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"फाईल आधीपासून कूटबद्ध केली"</string>
+    <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"फाईल आधीपासून एंक्रिप्ट होती"</string>
     <string name="title_convert_fbe" msgid="1263622876196444453">"फाईल आधारित कूटबद्धीकरणावर रूपांतरित करणे"</string>
     <string name="convert_to_fbe_warning" msgid="6139067817148865527">"फाईल आधारित कूटबद्धीकरणावर डेटा विभाजक रूपांतरित करा.\n !!चेतावणी!! हे आपल्‍या सर्व डेटास मिटवेल.\n हे वैशिष्ट्य अल्‍फा आहे आणि कदाचित योग्यरित्या कार्य करू शकत नाही.\n सुरु ठेवण्‍यासाठी \'पुसा आणि रूपांतरित करा...\' दाबा."</string>
     <string name="button_convert_fbe" msgid="5152671181309826405">"पुसा आणि रुपांतरित करा..."</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> शिल्लक"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - पूर्णपणे चार्ज होण्यात <xliff:g id="TIME">^2</xliff:g>"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"अज्ञात"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"चार्ज होत आहे"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"चार्ज होत आहे"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"चार्ज होत नाही"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"चार्ज होत नाही"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"प्लग इन केलेले आहे, आता चार्ज करू शकत नाही"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"पूर्ण"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"प्रशासकाने नियंत्रित केलेले"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"प्रशासकाने सक्षम केलेले"</string>
@@ -358,12 +365,12 @@
     <string name="disabled" msgid="9206776641295849915">"अक्षम"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"अनुमती आहे"</string>
     <string name="external_source_untrusted" msgid="2677442511837596726">"अनुमती नाही"</string>
-    <string name="install_other_apps" msgid="6986686991775883017">"अज्ञात अ‍ॅप्स स्थापित करा"</string>
-    <string name="home" msgid="3256884684164448244">"सेटिंग्ज मुख्यपृष्ठ"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"अज्ञात अ‍ॅप्स इंस्टॉल करा"</string>
+    <string name="home" msgid="3256884684164448244">"सेटिंग्ज होम"</string>
   <string-array name="battery_labels">
-    <item msgid="8494684293649631252">"0%"</item>
-    <item msgid="8934126114226089439">"50%"</item>
-    <item msgid="1286113608943010849">"100%"</item>
+    <item msgid="8494684293649631252">"०%"</item>
+    <item msgid="8934126114226089439">"५०%"</item>
+    <item msgid="1286113608943010849">"१००%"</item>
   </string-array>
     <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> पूर्वी"</string>
     <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> शिल्लक"</string>
@@ -375,13 +382,12 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"सानुकूल करा (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"मदत आणि अभिप्राय"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"मेनू"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
-    <string name="retail_demo_reset_message" msgid="118771671364131297">"डेमो मोडमध्ये फॅक्टरी रीसेट करण्यासाठी संकेतशब्द प्रविष्ट करा"</string>
+    <string name="retail_demo_reset_message" msgid="118771671364131297">"डेमो मोडमध्ये फॅक्टरी रीसेट करण्यासाठी पासवर्ड एंटर करा"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"पुढील"</string>
-    <string name="retail_demo_reset_title" msgid="696589204029930100">"संकेतशब्द आवश्यक"</string>
+    <string name="retail_demo_reset_title" msgid="696589204029930100">"पासवर्ड आवश्यक"</string>
     <string name="active_input_method_subtypes" msgid="3596398805424733238">"सक्रिय इनपुट पद्धती"</string>
-    <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"सिस्टीम भाषा वापरा"</string>
+    <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"सिस्टम भाषा वापरा"</string>
     <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"<xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g> साठी सेटिंग्ज उघडण्यात अयशस्वी"</string>
-    <string name="ime_security_warning" msgid="4135828934735934248">"ही इनपुट पद्धत संकेतशब्द आणि क्रेडिट कार्ड नंबर यासह, आपण टाइप करता तो सर्व मजकूर संकलित करण्यात सक्षम होऊ शकते. ही <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g> अॅपवरून येते. ही इनपुट पद्धत वापरायची?"</string>
-    <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"टीप: रीबूट केल्यानंतर, आपण आपला फोन अनलॉक करे पर्यंत हा अॅप प्रारंभ होऊ शकत नाही"</string>
+    <string name="ime_security_warning" msgid="4135828934735934248">"ही इनपुट पद्धत पासवर्ड आणि क्रेडिट कार्ड नंबर यासह, आपण टाइप करता तो सर्व मजकूर संकलित करण्यात सक्षम होऊ शकते. ही <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g> अॅपवरून येते. ही इनपुट पद्धत वापरायची?"</string>
+    <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"टीप: रीबूट केल्यानंतर, तुम्ही आपला फोन अनलॉक करे पर्यंत हे अॅप सुरू होऊ शकत नाही"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ms/arrays.xml b/packages/SettingsLib/res/values-ms/arrays.xml
index d6fd2ec..915814f 100644
--- a/packages/SettingsLib/res/values-ms/arrays.xml
+++ b/packages/SettingsLib/res/values-ms/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Lalai)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Gunakan Pilihan Sistem (Lalai)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Dayakan Codec Pilihan"</item>
+    <item msgid="3304843301758635896">"Lumpuhkan Codec Pilihan"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Gunakan Pilihan Sistem (Lalai)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Dayakan Codec Pilihan"</item>
+    <item msgid="741805482892725657">"Lumpuhkan Codec Pilihan"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Gunakan Pilihan Sistem (Lalai)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index caa07f9..f252c2a 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Disambungkan melalui %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Tersedia melalui %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Disambungkan, tiada Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Titik akses penuh buat sementara waktu"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Disambungkan melalui %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Tersedia melalui %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Sangat Perlahan"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Perlahan"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Sederhana"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Laju"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Sangat Laju"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Diputuskan sambungan"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Memutuskan sambungan..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Menyambung..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi dua bar."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi tiga bar."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Isyarat Wi-Fi penuh."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rangkaian terbuka"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rangkaian selamat"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"OS Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Apl dialih keluar"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Apl dan pengguna yang dialih keluar"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Sentiasa benarkan Imbasan Perayauan Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Data mudah alih sentiasa aktif"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Pecutan perkakasan penambatan"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Tunjukkan peranti Bluetooth tanpa nama"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Lumpuhkan kelantangan mutlak"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Dayakan dering dalam jalur"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versi AVRCP Bluetooth"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Tetapan ini adalah untuk penggunaan pembangunan sahaja. Peranti dan aplikasi yang terdapat padanya boleh rosak atau tidak berfungsi dengan betul."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Sahkan apl melalui USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Semak apl yang dipasang melalui ADB/ADT untuk tingkah laku yang berbahaya."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Peranti Bluetooth tanpa nama (alamat MAC sahaja) akan dipaparkan"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Lumpuhkan ciri kelantangan mutlak Bluetooth dalam kes isu kelantangan menggunakan peranti kawalan jauh seperti kelantangan yang sangat kuat atau tidak dapat mengawal."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Benarkan nada dering pada telefon dimainkan pada set kepala Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminal setempat"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> lagi"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> sehingga dicas penuh"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Tidak diketahui"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Mengecas"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"mengecas"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Tidak mengecas"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Tidak mengecas"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Dipalamkan, tidak boleh mengecas sekarang"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Penuh"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Dikawal oleh pentadbir"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Didayakan oleh pentadbir"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Tersuai (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Bantuan &amp; maklum balas"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Mskkn kta laluan utk ttpn sml kilang dlm mod demo"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Seterusnya"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Kata laluan diperlukan"</string>
diff --git a/packages/SettingsLib/res/values-my/arrays.xml b/packages/SettingsLib/res/values-my/arrays.xml
index 732599e..8e3ed3f 100644
--- a/packages/SettingsLib/res/values-my/arrays.xml
+++ b/packages/SettingsLib/res/values-my/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (မူလ)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"စနစ်ရွေးချယ်မှုကို အသုံးပြုပါ (မူရင်း)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> အသံ"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> အသံ"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"စိတ်ကြိုက်ထည့်သွင်းနိုင်သော ကိုးဒက်ခ်များကို ဖွင့်ပါ"</item>
+    <item msgid="3304843301758635896">"စိတ်ကြိုက်ထည့်သွင်းနိုင်သော ကိုးဒက်ခ်များကို ပိတ်ပါ"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"စနစ်ရွေးချယ်မှုကို အသုံးပြုပါ (မူရင်း)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> အသံ"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> အသံ"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"စိတ်ကြိုက်ထည့်သွင်းနိုင်သော ကိုးဒက်ခ်များကို ဖွင့်ပါ"</item>
+    <item msgid="741805482892725657">"စိတ်ကြိုက်ထည့်သွင်းနိုင်သော ကိုးဒက်ခ်များကို ပိတ်ပါ"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"စနစ်ရွေးချယ်မှုကို အသုံးပြုပါ (မူရင်း)"</item>
     <item msgid="8895532488906185219">"၄၄.၁ kHz"</item>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index e1f0085..6b737f8 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s မှတစ်ဆင့်ရနိုင်သည်"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ချိတ်ဆက်ထားသည်၊ အင်တာနက်မရှိ"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ကွန်ရက်ချိတ်ဆက်မှု ယာယီပြည့်နေသည်"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s မှတစ်ဆင့် ရနိုင်သည်"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"အလွန်နှေး"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"နှေး"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"အတော်အသင့်"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"မြန်"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"အလွန်မြန်"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ချိတ်ဆက်မှုပြတ်တောက်သည်"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"အဆက်အသွယ်ဖြတ်တောက်သည်"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"ချိတ်ဆက်နေသည်"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi  ၂ ဘား"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi  ၃ ဘား"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi  အပြည့်ရှိ"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"အများသုံး ကွန်ရက်"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"လုံခြုံသည့် ကွန်ရက်"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android စနစ်"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"ဖယ်ရှားထားသော အက်ပ်များ"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"ဖယ်ရှားထားသော အပလီကေးရှင်းနှင့် သုံးစွဲသူများ"</string>
@@ -113,7 +119,7 @@
     <string name="user_guest" msgid="8475274842845401871">"ဧည့်သည်"</string>
     <string name="unknown" msgid="1592123443519355854">"အကြောင်းအရာ မသိရှိ"</string>
     <string name="running_process_item_user_label" msgid="3129887865552025943">"သုံးစွဲသူ၊ <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
-    <string name="launch_defaults_some" msgid="313159469856372621">"တချို့အားပုံမှတ်အဖြစ်သတ်မှတ်"</string>
+    <string name="launch_defaults_some" msgid="313159469856372621">"မူရင်းအချို့ သတ်မှတ်ပြီး"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"ပုံမှန်သတ်မှတ်ထားခြင်းမရှိ"</string>
     <string name="tts_settings" msgid="8186971894801348327">"စာသားမှစကားပြောပြောင်း ဆက်တင်များ"</string>
     <string name="tts_settings_title" msgid="1237820681016639683">"စာသားမှ အသံထွက်စေခြင်း"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi ရွမ်းရှာဖွေမှုကို အမြဲတမ်း ခွင့်ပြုမည်"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"မိုဘိုင်းဒေတာကို အမြဲဖွင့်ထားရန်"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"ဖုန်းကို မိုဒမ်အဖြစ်အသုံးပြုမှု စက်ပစ္စည်းဖြင့် အရှိန်မြှင့်တင်ခြင်း"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"အမည်မရှိသော ဘလူးတုသ်စက်ပစ္စည်းများကို ပြသရန်"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ပကတိ အသံနှုန်း သတ်မှတ်ချက် ပိတ်ရန်"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"သတ်မှတ်ထားသည့်ဖုန်းမြည်သံကို အသုံးပြုခြင်းအား ဖွင့်ရန်"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ဘလူးတုသ် AVRCP ဗားရှင်း"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"ဤဆက်တင်းများကို တည်ဆောက်ပြုပြင်ရာတွင် သုံးရန်အတွက်သာ ရည်ရွယ်သည်။ ၎င်းတို့သည် သင်၏စက်နှင့် အပလီကေးရှင်းများကို ရပ်စေခြင်း သို့ လုပ်ဆောင်ချက်မမှန်ကန်ခြင်းများ ဖြစ်ပေါ်စေနိုင်သည်။"</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USBပေါ်မှ အပလီကေးရှင်းများကို အတည်ပြုစိစစ်ရန်"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT မှတဆင့် ထည့်သွင်းသော အပလီကေးရှင်းများကို အန္တရာယ်ဖြစ်နိုင်ခြင်း ရှိမရှိ စစ်ဆေးရန်။"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"အမည်မရှိသော (MAC လိပ်စာများသာပါသော) ဘလူးတုသ်စက်ပစ္စည်းများကို ပြသပါမည်"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"ချိတ်ဆက်ထားသည့် ကိရိယာတွင် လက်မခံနိုင်လောက်အောင် ဆူညံ သို့မဟုတ် ထိန်းညှိမရနိုင်သော အသံပိုင်းပြဿနာ ရှိခဲ့လျှင် ဘလူးတုသ် ပကတိ အသံနှုန်းကို ပိတ်ပါ။"</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"ဖုန်းတွင်းရှိ ဖုန်းမြည်သံများကို ဘလူးတုသ် မိုက်ခွက်ပါနားကြပ်တွင် ဖွင့်ခွင့်ပြုရန်"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"လိုကယ်တာမီနယ်"</string>
@@ -345,20 +353,19 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> ကျန်သည်"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> − အားပြည့်ရန် <xliff:g id="TIME">^2</xliff:g> ကျန်သည်"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"အကြောင်းအရာ မသိရှိ"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"အားသွင်းနေပါသည်"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"အားသွင်းနေပါသည်"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"အားသွင်းမနေပါ"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"အားသွင်းမနေပါ"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"ပလပ်ထိုးထားသောကြောင့် ယခုအားသွင်း၍ မရသေးပါ"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"အပြည့်"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"စီမံခန့်ခွဲသူမှ ထိန်းချုပ်ပါသည်"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"စီမံခန့်ခွဲသူက ဖွင့်ထားသည်"</string>
     <string name="disabled_by_admin" msgid="8505398946020816620">"စီမံခန့်ခွဲသူက ပိတ်ထားသည်"</string>
     <string name="disabled" msgid="9206776641295849915">"ပိတ်ထားပြီး"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"ခွင့်ပြုထားသည်"</string>
-    <string name="external_source_untrusted" msgid="2677442511837596726">"ခွင့်ပြုမထားပါ"</string>
-    <string name="install_other_apps" msgid="6986686991775883017">"အမျိုးအမည်မသိအက်ပ် ထည့်သွင်းနိုင်ခြင်း"</string>
+    <string name="external_source_untrusted" msgid="2677442511837596726">"ခွင့်မပြုပါ"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"အမည်မသိအက်ပ်"</string>
     <string name="home" msgid="3256884684164448244">"ဆက်တင် ပင်မစာမျက်နှာ"</string>
   <string-array name="battery_labels">
     <item msgid="8494684293649631252">"၀%"</item>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"စိတ်ကြိုက် (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"အကူအညီနှင့် အကြံပြုချက်"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"မီနူး"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"ဂရင်းနစ်စံတော်ချိန်"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"ဒီမိုမုဒ်၌မူလဆက်တင်ထားရန် စကားဝှက်ထည့်ပါ"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"ရှေ့သို့"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"စကားဝှက် လိုအပ်သည်"</string>
diff --git a/packages/SettingsLib/res/values-nb/arrays.xml b/packages/SettingsLib/res/values-nb/arrays.xml
index 86d0c1e..1882e2e 100644
--- a/packages/SettingsLib/res/values-nb/arrays.xml
+++ b/packages/SettingsLib/res/values-nb/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (standard)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Bruk systemvalg (standard)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-lyd"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-lyd"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Slå på valgfrie kodeker"</item>
+    <item msgid="3304843301758635896">"Slå av valgfrie kodeker"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Bruk systemvalg (standard)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-lyd"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-lyd"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Slå på valgfrie kodeker"</item>
+    <item msgid="741805482892725657">"Slå av valgfrie kodeker"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Bruk systemvalg (standard)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 004fcf1e..cc73ef9 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Tilkoblet via %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Tilgjengelig via %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Tilkoblet – ingen Internett-forbindelse"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Tilgangspunktet er midlertidig fullt"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Tilkoblet via %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Tilgjengelig via %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Veldig treg"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Treg"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Ok"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Middels"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Rask"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Veldig rask"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Frakoblet"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Kobler fra…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Kobler til…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi-signal med to stolper."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi-signal med tre stolper."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi-signalet er ved full styrke."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Åpent nettverk"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sikkert nettverk"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android-operativsystem"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Fjernede apper"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Fjernede apper og brukere"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Tillat alltid skanning for Wi-Fi-roaming"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobildata er alltid aktiv"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Maskinvareakselerasjon for internettdeling"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Vis Bluetooth-enheter uten navn"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Slå av funksjonen for absolutt volum"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Slå på innenbåndsringing"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP-versjon"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Disse innstillingene er bare beregnet for bruk under programutvikling. De kan forårsake problemer med enheten din og tilhørende apper."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Bekreft apper via USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Sjekk apper som er installert via ADB/ADT for skadelig adferd."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth-enheter uten navn (bare MAC-adresser) vises"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Slår av funksjonen for absolutt volum via Bluetooth i tilfelle det oppstår volumrelaterte problemer med eksterne enheter, for eksempel uakseptabelt høyt volum eller mangel på kontroll."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Tillater at ringelyder på telefonen spilles av på Bluetooth-hodetelefoner"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Lokal terminal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> gjenstår"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> til det er fulladet"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Ukjent"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Lader"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"lader"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Lader ikke"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Lader ikke"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Laderen er koblet til – kan ikke lade akkurat nå"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Fullt"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontrollert av administratoren"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Slått på av administratoren"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Egendefinert (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Hjelp og tilbakemelding"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Meny"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Skriv inn passordet for å tilbakestille til fabrikkstandard i demomodus"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Neste"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Passord er obligatorisk"</string>
diff --git a/packages/SettingsLib/res/values-ne/arrays.xml b/packages/SettingsLib/res/values-ne/arrays.xml
index 6079a75..de6b86e 100644
--- a/packages/SettingsLib/res/values-ne/arrays.xml
+++ b/packages/SettingsLib/res/values-ne/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP १.४ (पूर्वनिर्धारित)"</item>
-    <item msgid="2089555299377409443">"AVRCP १.५"</item>
-    <item msgid="2895327394279434278">"AVRCP १.६"</item>
+    <item msgid="2809759619990248160">"AVRCP १.३"</item>
+    <item msgid="6199178154704729352">"AVRCP १.५"</item>
+    <item msgid="5172170854953034852">"AVRCP १.६"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp १३"</item>
+    <item msgid="8837606198371920819">"avrcp १५"</item>
+    <item msgid="3422726142222090896">"avrcp १६"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"प्रणालीको चयन प्रयोग गर्नुहोस् (पूर्वनिर्धारित)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> अडियो"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> अडियो"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"वैकल्पिक कोडेकहरूलाई सक्षम पार्नुहोस्"</item>
+    <item msgid="3304843301758635896">"वैकल्पिक कोडेकहरूलाई असक्षम पार्नुहोस्"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"प्रणालीको चयन प्रयोग गर्नुहोस् (पूर्वनिर्धारित)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> अडियो"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> अडियो"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"वैकल्पिक कोडेकहरूलाई सक्षम पार्नुहोस्"</item>
+    <item msgid="741805482892725657">"वैकल्पिक कोडेकहरूलाई असक्षम पार्नुहोस्"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"प्रणालीको चयन प्रयोग गर्नुहोस् (पूर्वनिर्धारित)"</item>
     <item msgid="8895532488906185219">"४४.१ kHz"</item>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index eac1e24..7acdee7 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s मार्फत जडित"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s मार्फत उपलब्ध"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"जडित, इन्टरनेट चलेको छैन"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"पहुँचसम्बन्धी स्थान अस्थायी रूपमा भरिएको छ"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s मार्फत जडान गरियो"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s मार्फत उपलब्ध"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"धेरै ढिलो"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"बिस्तारै"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ठीक छ"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"मध्यम"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"छिटो"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"धेरै छिटो"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"विच्छेदन गरियो"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"जडान हटाइँदै ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"जडान हुँदै..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi दुई पट्टि।"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi तीन बारहरू।"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"पूर्ण Wi-Fi सिंग्नल।"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"खुला नेटवर्क"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"सुरक्षित नेटवर्क"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"एन्ड्रोइड OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"हटाइएका अनुप्रयोगहरू"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"अनुप्रयोगहरू र प्रयोगकर्ताहरू हटाइयो।"</string>
@@ -161,9 +167,9 @@
     <string name="development_settings_enable" msgid="542530994778109538">"विकासकर्ता विकल्प सक्रिया गर्नुहोस्"</string>
     <string name="development_settings_summary" msgid="1815795401632854041">"अनुप्रयोग विकासको लागि विकल्पहरू सेट गर्नुहोस्"</string>
     <string name="development_settings_not_available" msgid="4308569041701535607">"विकासकर्ताका विकल्पहरू यस प्रयोगकर्ताका लागि उपलब्ध छैन"</string>
-    <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN सेटिङ्हरू यो प्रयोगकर्ताको लागि उपलब्ध छैन"</string>
-    <string name="tethering_settings_not_available" msgid="6765770438438291012">"कार्यक्षेत्र सीमा सेटिङ्हरू यो प्रयोगकर्ताको लागि उपलब्ध छैन"</string>
-    <string name="apn_settings_not_available" msgid="7873729032165324000">"पहुँच बिन्दु नामको सेटिङ्हरू यो प्रयोगकर्ताको लागि उपलब्ध छैन"</string>
+    <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN सेटिङहरू यो प्रयोगकर्ताको लागि उपलब्ध छैन"</string>
+    <string name="tethering_settings_not_available" msgid="6765770438438291012">"कार्यक्षेत्र सीमा सेटिङहरू यो प्रयोगकर्ताको लागि उपलब्ध छैन"</string>
+    <string name="apn_settings_not_available" msgid="7873729032165324000">"पहुँच बिन्दु नामको सेटिङहरू यो प्रयोगकर्ताको लागि उपलब्ध छैन"</string>
     <string name="enable_adb" msgid="7982306934419797485">"USB डिबग गर्दै"</string>
     <string name="enable_adb_summary" msgid="4881186971746056635">"USB जडित हुँदा डिबग मोड"</string>
     <string name="clear_adb_keys" msgid="4038889221503122743">"USB डिबग गर्ने प्राधिकरणहरू उल्टाउनुहोस्"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi-Fi घुम्ने स्क्यान गर्न सधैँ अनुमति दिनुहोस्"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"मोबाइल डेटा सधैँ सक्रिय राख्नुहोस्"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"टेदरिङको लागि हार्डवेयरको प्रवेग"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"नामकरण नगरिएका ब्लुटुथ यन्त्रहरू देखाउनुहोस्"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"निरपेक्ष आवाज असक्षम गर्नुहोस्"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"इन-ब्यान्ड घन्टी बज्ने सुविधालाई सक्षम पार्नुहोस्"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ब्लुटुथको AVRCP संस्करण"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"यी सेटिङहरू केवल विकास प्रयोगको लागि विचार गरिएको हो। तिनीहरूले तपाईंको उपकरण र अनुप्रयोगहरूलाई विच्छेदन गर्न वा दुर्व्यवहार गर्न सक्दछ।"</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB मा अनुप्रयोगहरू रुजु गर्नुहोस्"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"हानिकारक व्यवहारको लागि ADB/ADT को माध्यमबाट स्थापित अनुप्रयोगहरूको जाँच गर्नुहोस्।"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"नामकरण नगरिएका ब्लुटुथ यन्त्रहरू (MAC ठेगाना भएका मात्र) देखाइनेछ"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"रिमोट यन्त्रहरूमा अस्वीकार्य चर्को आवाज वा नियन्त्रणमा कमी जस्ता आवाज सम्बन्धी समस्याहरूको अवस्थामा ब्लुटुथ निरपेक्ष आवाज सुविधालाई असक्षम गराउँछ।"</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"उक्त फोनमा भएका रिङटोनहरूलाई ब्लुटुथका हेडसेटहरूमा प्ले गर्न दिनुहोस्"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"स्थानीय टर्मिनल"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"बाँकी समय <xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - पूर्णरूपमा चार्ज हुन <xliff:g id="TIME">^2</xliff:g> बाँकी"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"अज्ञात"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"चार्ज हुँदै"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"चार्ज हुँदै"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"चार्ज भइरहेको छैन"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"चार्ज हुँदै छैन"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"प्लगइन गरिएको छ, अहिले नै चार्ज गर्न सकिँदैन"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"पूर्ण"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"प्रशासकद्वारा नियन्त्रित"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"प्रशासकद्वारा सक्षम पारिएको छ"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"आफू अनुकूल (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"मद्दत र प्रतिक्रिया"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"मेनु"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"डेमो मोडमा फ्याक्ट्री रिसेट गर्न पासवर्ड प्रविष्ट गर्नुहोस्"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"अर्को"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"पासवर्ड आवश्यक छ"</string>
diff --git a/packages/SettingsLib/res/values-nl/arrays.xml b/packages/SettingsLib/res/values-nl/arrays.xml
index 996bb10..ace58fd 100644
--- a/packages/SettingsLib/res/values-nl/arrays.xml
+++ b/packages/SettingsLib/res/values-nl/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (standaard)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Systeemselectie gebruiken (standaard)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Optionele codecs inschakelen"</item>
+    <item msgid="3304843301758635896">"Optionele codecs uitschakelen"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Systeemselectie gebruiken (standaard)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Optionele codecs inschakelen"</item>
+    <item msgid="741805482892725657">"Optionele codecs uitschakelen"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Systeemselectie gebruiken (standaard)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 9ca3bfd..c8d57c7 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Verbonden via %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Beschikbaar via %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Verbonden, geen internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Toegangspunt tijdelijk vol"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Verbonden via %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Beschikbaar via %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Zeer langzaam"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Langzaam"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Redelijk"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Gemiddeld"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Snel"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Zeer snel"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Verbinding verbroken"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Verbinding verbreken..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Verbinding maken..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi: twee streepjes."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi: drie streepjes."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifii-signaal is op volledige sterkte."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Open netwerk"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Beveiligd netwerk"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android-besturingssysteem"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Verwijderde apps"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Verwijderde apps en gebruikers"</string>
@@ -157,7 +163,7 @@
     <string name="choose_profile" msgid="6921016979430278661">"Profiel kiezen"</string>
     <string name="category_personal" msgid="1299663247844969448">"Persoonlijk"</string>
     <string name="category_work" msgid="8699184680584175622">"Werk"</string>
-    <string name="development_settings_title" msgid="215179176067683667">"Opties voor ontwikkelaars"</string>
+    <string name="development_settings_title" msgid="215179176067683667">"Ontwikkelaarsopties"</string>
     <string name="development_settings_enable" msgid="542530994778109538">"Opties voor ontwikkelaars inschakelen"</string>
     <string name="development_settings_summary" msgid="1815795401632854041">"Opties instellen voor appontwikkeling"</string>
     <string name="development_settings_not_available" msgid="4308569041701535607">"Ontwikkelaarsopties zijn niet beschikbaar voor deze gebruiker"</string>
@@ -167,8 +173,8 @@
     <string name="enable_adb" msgid="7982306934419797485">"USB-foutopsporing"</string>
     <string name="enable_adb_summary" msgid="4881186971746056635">"Foutopsporingsmodus bij USB-verbinding"</string>
     <string name="clear_adb_keys" msgid="4038889221503122743">"Autorisatie USB-foutopsporing intrekken"</string>
-    <string name="bugreport_in_power" msgid="7923901846375587241">"Snelle link naar foutenrapport"</string>
-    <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Een knop in het voedingsmenu weergeven om een foutenrapport te maken"</string>
+    <string name="bugreport_in_power" msgid="7923901846375587241">"Snelle link naar bugrapport"</string>
+    <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Een knop in het voedingsmenu weergeven om een bugrapport te maken"</string>
     <string name="keep_screen_on" msgid="1146389631208760344">"Stand-by"</string>
     <string name="keep_screen_on_summary" msgid="2173114350754293009">"Scherm gaat nooit uit tijdens het opladen"</string>
     <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Snoop-logbestand voor Bluetooth-HCI inschakelen"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Altijd roamingscans voor wifi toestaan"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobiele data altijd actief"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardwareversnelling voor tethering"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth-apparaten zonder namen weergeven"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Absoluut volume uitschakelen"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"In-band bellen inschakelen"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth-AVRCP-versie"</string>
@@ -217,7 +224,7 @@
     <string name="allow_mock_location" msgid="2787962564578664888">"Neplocaties toestaan"</string>
     <string name="allow_mock_location_summary" msgid="317615105156345626">"Neplocaties toestaan"</string>
     <string name="debug_view_attributes" msgid="6485448367803310384">"Inspectie van weergavekenmerk inschakelen"</string>
-    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mobiele gegevens altijd actief houden, ook als wifi actief is (voor sneller schakelen tussen netwerken)."</string>
+    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"mobiele data altijd actief houden, ook als wifi actief is (voor sneller schakelen tussen netwerken)."</string>
     <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Hardwareversnelling voor tethering gebruiken indien beschikbaar"</string>
     <string name="adb_warning_title" msgid="6234463310896563253">"USB-foutopsporing toestaan?"</string>
     <string name="adb_warning_message" msgid="7316799925425402244">"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>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Deze instellingen zijn uitsluitend bedoeld voor ontwikkelingsgebruik. Je apparaat en apps kunnen hierdoor vastlopen of anders reageren."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Apps verifiëren via USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Apps die zijn geïnstalleerd via ADB/ADT, controleren op schadelijk gedrag"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth-apparaten zonder namen (alleen MAC-adressen) worden weergegeven"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Hiermee wordt de functie voor absoluut volume van Bluetooth uitgeschakeld in geval van volumeproblemen met externe apparaten, zoals een onacceptabel hoog volume of geen volumeregeling."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Toestaan dat beltonen worden afgespeeld op Bluetooth-headsets"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Lokale terminal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> resterend"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> tot volledig opgeladen"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Onbekend"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Opladen"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"opladen"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Wordt niet opgeladen"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Wordt niet opgeladen"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Aangesloten, kan nu niet opladen"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Volledig"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Ingesteld door beheerder"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Ingeschakeld door beheerder"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Aangepast (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Help en feedback"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Geef wachtwoord op om terug te zetten op fabrieksinstellingen in demomodus"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Volgende"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Wachtwoord vereist"</string>
diff --git a/packages/SettingsLib/res/values-pa/arrays.xml b/packages/SettingsLib/res/values-pa/arrays.xml
index 9f9070e..750aee0 100644
--- a/packages/SettingsLib/res/values-pa/arrays.xml
+++ b/packages/SettingsLib/res/values-pa/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"ਸਿਸਟਮ ਚੋਣ ਦੀ ਵਰਤੋਂ ਕਰੋ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ਆਡੀਓ"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ਆਡੀਓ"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"ਵਿਕਲਪਿਕ ਕੋਡੈਕ ਚਾਲੂ ਕਰੋ"</item>
+    <item msgid="3304843301758635896">"ਵਿਕਲਪਿਕ ਕੋਡੈਕ ਅਯੋਗ ਬਣਾਓ"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"ਸਿਸਟਮ ਚੋਣ ਦੀ ਵਰਤੋਂ ਕਰੋ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ਆਡੀਓ"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ਆਡੀਓ"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"ਵਿਕਲਪਿਕ ਕੋਡੈਕ ਚਾਲੂ ਕਰੋ"</item>
+    <item msgid="741805482892725657">"ਵਿਕਲਪਿਕ ਕੋਡੈਕ ਅਯੋਗ ਬਣਾਓ"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"ਸਿਸਟਮ ਚੋਣ ਦੀ ਵਰਤੋਂ ਕਰੋ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 084b9ed..bdd8927 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -30,69 +30,73 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ਪ੍ਰਮਾਣੀਕਰਨ ਸਮੱਸਿਆ"</string>
     <string name="wifi_cant_connect" msgid="5410016875644565884">"ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
     <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
-    <string name="wifi_check_password_try_again" msgid="516958988102584767">"ਪਾਸਵਰਡ ਜਾਂਚੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
+    <string name="wifi_check_password_try_again" msgid="516958988102584767">"ਪਾਸਵਰਡ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"ਰੇਂਜ ਵਿੱਚ ਨਹੀਂ ਹੈ"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ"</string>
     <string name="wifi_no_internet" msgid="3880396223819116454">"ਕੋਈ ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਨਹੀਂ"</string>
     <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> ਵੱਲੋਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ"</string>
     <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s ਰਾਹੀਂ ਆਪਣੇ-ਆਪ ਕਨੈਕਟ ਹੋਇਆ"</string>
-    <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ਨੈੱਟਵਰਕ ਰੇਟਿੰਗ ਪ੍ਰਦਾਨਕ ਰਾਹੀਂ ਆਪਣੇ-ਆਪ ਕਨੈਕਟ ਹੋਇਆ"</string>
+    <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ਨੈੱਟਵਰਕ ਰੇਟਿੰਗ ਪ੍ਰਦਾਨਕ ਰਾਹੀਂ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਕਨੈਕਟ ਹੋਇਆ"</string>
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ਰਾਹੀਂ ਉਪਲਬਧ"</string>
-    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ਕਨੈਕਟ ਕੀਤਾ, ਕੋਈ ਇੰਟਰਨੈਟ ਨਹੀਂ"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ਕਨੈਕਟ ਕੀਤਾ, ਕੋਈ ਇੰਟਰਨੈੱਟ ਨਹੀਂ"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ਐਕਸੈੱਸ ਪੁਆਇੰਟ ਅਸਥਾਈ ਤੌਰ \'ਤੇ ਸੰਪੂਰਨ ਰੁਝੇਂਵੇਂ ਵਿੱਚ ਹੈ"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s ਰਾਹੀਂ ਉਪਲਬਧ"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"ਬਹੁਤ ਹੌਲੀ"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"ਹੌਲੀ"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ਠੀਕ ਹੈ"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"ਔਸਤ"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"ਤੇਜ਼"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"ਬਹੁਤ ਤੇਜ਼"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ਡਿਸਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"ਡਿਸਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"ਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ…"</string>
     <string name="bluetooth_connected" msgid="6038755206916626419">"ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="bluetooth_pairing" msgid="1426882272690346242">"ਪੇਅਰ ਕਰ ਰਿਹਾ ਹੈ…"</string>
-    <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"ਕਨੈਕਟ ਕੀਤਾ (ਕੋਈ ਫੋਨ ਨਹੀਂ)"</string>
+    <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"ਕਨੈਕਟ ਕੀਤਾ (ਕੋਈ ਫ਼ੋਨ ਨਹੀਂ)"</string>
     <string name="bluetooth_connected_no_a2dp" msgid="4576188601581440337">"ਕਨੈਕਟ ਕੀਤਾ (ਕੋਈ ਮੀਡੀਆ ਨਹੀਂ)"</string>
     <string name="bluetooth_connected_no_map" msgid="6504436917057479986">"ਕਨੈਕਟ ਕੀਤਾ (ਕੋਈ ਸੁਨੇਹਾ ਪਹੁੰਚ ਨਹੀਂ)"</string>
-    <string name="bluetooth_connected_no_headset_no_a2dp" msgid="9195757766755553810">"ਕਨੈਕਟ ਕੀਤਾ (ਕੋਈ ਫੋਨ ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ)"</string>
+    <string name="bluetooth_connected_no_headset_no_a2dp" msgid="9195757766755553810">"ਕਨੈਕਟ ਕੀਤਾ (ਕੋਈ ਫ਼ੋਨ ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ)"</string>
     <string name="bluetooth_connected_battery_level" msgid="7049181126136692368">"ਕਨੈਕਟ ਕੀਤੀ ਗਈ, ਬੈਟਰੀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
-    <string name="bluetooth_connected_no_headset_battery_level" msgid="5504193961248406027">"ਕਨੈਕਟ ਕੀਤੀ ਗਈ (ਕੋਈ ਫ਼ੋਨ ਨਹੀਂ), ਬੈਟਰੀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+    <string name="bluetooth_connected_no_headset_battery_level" msgid="5504193961248406027">"ਕਨੈਕਟ ਕੀਤਾ (ਕੋਈ ਫ਼ੋਨ ਨਹੀਂ), ਬੈਟਰੀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_a2dp_battery_level" msgid="4751724026365870779">"ਕਨੈਕਟ ਕੀਤੀ ਗਈ (ਕੋਈ ਮੀਡੀਆ ਨਹੀਂ), ਬੈਟਰੀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
-    <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1549265779323455261">"ਕਨੈਕਟ ਕੀਤੀ ਗਈ (ਕੋਈ ਫ਼ੋਨ ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ), ਬੈਟਰੀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
-    <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"ਮੀਡੀਆ ਔਡੀਓ"</string>
+    <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1549265779323455261">"ਕਨੈਕਟ ਕੀਤਾ (ਕੋਈ ਫ਼ੋਨ ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ), ਬੈਟਰੀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+    <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"ਮੀਡੀਆ  ਆਡੀਓ"</string>
     <string name="bluetooth_profile_headset" msgid="7815495680863246034">"ਫ਼ੋਨ ਕਾਲਾਂ"</string>
     <string name="bluetooth_profile_opp" msgid="9168139293654233697">"ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ"</string>
-    <string name="bluetooth_profile_hid" msgid="3680729023366986480">"ਇਨਪੁਟ ਡੀਵਾਈਸ"</string>
-    <string name="bluetooth_profile_pan" msgid="3391606497945147673">"ਇੰਟਰਨੈਟ ਪਹੁੰਚ"</string>
+    <string name="bluetooth_profile_hid" msgid="3680729023366986480">"ਇਨਪੁੱਟ ਡੀਵਾਈਸ"</string>
+    <string name="bluetooth_profile_pan" msgid="3391606497945147673">"ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ"</string>
     <string name="bluetooth_profile_pbap" msgid="5372051906968576809">"ਸੰਪਰਕ ਸ਼ੇਅਰਿੰਗ"</string>
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"ਸੰਪਰਕ ਸ਼ੇਅਰਿੰਗ ਲਈ ਵਰਤੋ"</string>
-    <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਸ਼ੇਅਰਿੰਗ"</string>
+    <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਸਾਂਝਾਕਰਨ"</string>
     <string name="bluetooth_profile_map" msgid="1019763341565580450">"ਲਿਖਤ ਸੁਨੇਹੇ"</string>
-    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM ਪਹੁੰਚ"</string>
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"ਸਿਮ ਪਹੁੰਚ"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="5444517801472820055">"HD ਆਡੀਓ: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="8510588052415438887">"HD ਆਡੀਓ"</string>
-    <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"ਮੀਡੀਆ ਔਡੀਓ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
-    <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ਫੋਨ ਔਡੀਓ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
-    <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ ਸਰਵਰ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
+    <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"ਮੀਡੀਆ  ਆਡੀਓ  ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
+    <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ਫ਼ੋਨ ਔਡੀਓ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
+    <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ਫਾਈਲ ਟ੍ਰਾਂਸਫ਼ਰ ਸਰਵਰ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"ਨਕਸ਼ੇ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
-    <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ ਸਰਵਰ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ"</string>
-    <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ਇਨਪੁਟ ਡੀਵਾਈਸ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
-    <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"ਇੰਟਰਨੈਟ ਪਹੁੰਚ ਲਈ ਡੀਵਾਈਸ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
-    <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"ਡੀਵਾਈਸ ਨਾਲ ਸਥਾਨਕ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਸ਼ੇਅਰ ਕਰ ਰਿਹਾ ਹੈ"</string>
-    <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ਇੰਟਰਨੈਟ ਪਹੁੰਚ ਲਈ ਵਰਤੋ"</string>
+    <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ਫਾਈਲ ਟ੍ਰਾਂਸਫ਼ਰ ਸਰਵਰ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ"</string>
+    <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ਇਨਪੁੱਟ ਡੀਵਾਈਸ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
+    <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਲਈ ਡੀਵਾਈਸ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
+    <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"ਡੀਵਾਈਸ ਨਾਲ ਸਥਾਨਕ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਸਾਂਝਾ ਕਰ ਰਿਹਾ ਹੈ"</string>
+    <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਲਈ ਵਰਤੋ"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"ਨਕਸ਼ੇ ਲਈ ਵਰਤੋ"</string>
-    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM ਪਹੁੰਚ ਲਈ ਵਰਤੋ"</string>
-    <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"ਮੀਡੀਆ ਔਡੀਓ ਲਈ ਵਰਤੋ"</string>
-    <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ਫੋਨ ਔਡੀਓ ਲਈ ਵਰਤੋ"</string>
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"ਸਿਮ ਪਹੁੰਚ ਲਈ ਵਰਤੋ"</string>
+    <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"ਮੀਡੀਆ  ਆਡੀਓ  ਲਈ ਵਰਤੋ"</string>
+    <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ਫ਼ੋਨ ਔਡੀਓ ਲਈ ਵਰਤੋ"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ ਲਈ ਵਰਤੋ"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"ਇਨਪੁਟ ਲਈ ਵਰਤੋ"</string>
     <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"ਪੇਅਰ ਕਰੋ"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"ਪੇਅਰ ਕਰੋ"</string>
     <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"ਰੱਦ ਕਰੋ"</string>
-    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"ਪੇਅਰ ਕਰਨਾ ਕਨੈਕਟ ਕੀਤੇ ਜਾਣ ਤੇ ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਅਤੇ ਕਾਲ ਇਤਿਹਾਸ ਤੱਕ ਪਹੁੰਚ ਦੀ ਅਨੁਮਤੀ ਦਿੰਦਾ ਹੈ।"</string>
+    <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"ਜੋੜਾਬੱਧ ਕਰਨਾ ਕਨੈਕਟ ਕੀਤੇ ਜਾਣ ਤੇ ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਅਤੇ ਕਾਲ ਇਤਿਹਾਸ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।"</string>
     <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਨਾਲ ਪੇਅਰ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"ਇੱਕ ਗ਼ਲਤ PIN ਜਾਂ ਪਾਸਕੁੰਜੀ ਦੇ ਕਾਰਨ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਨਾਲ ਪੇਅਰ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"ਇੱਕ ਗਲਤ ਪਿੰਨ ਜਾਂ ਪਾਸਕੁੰਜੀ ਦੇ ਕਾਰਨ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਨਾਲ ਜੋੜਾਬੱਧ ਨਹੀਂ ਹੋ ਸਕਿਆ।"</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਨਾਲ ਸੰਚਾਰ ਨਹੀਂ ਕਰ ਸਕਦਾ।"</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"ਪੇਅਰਿੰਗ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਵੱਲੋਂ ਰੱਦ ਕੀਤੀ ਗਈ।"</string>
     <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wifi ਬੰਦ।"</string>
@@ -101,22 +105,24 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi ਦੋ ਬਾਰ।"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi ਤਿੰਨ ਬਾਰ।"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi ਸਿਗਨਲ ਪੂਰਾ।"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"ਖੁੱਲ੍ਹਾ ਨੈੱਟਵਰਕ"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"ਸੁਰੱਖਿਅਤ ਨੈੱਟਵਰਕ"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"ਹਟਾਏ ਗਏ ਐਪਸ"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"ਹਟਾਏ ਗਏ ਐਪਸ ਅਤੇ ਉਪਭੋਗਤਾ"</string>
     <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB ਟੈਦਰਿੰਗ"</string>
     <string name="tether_settings_title_wifi" msgid="3277144155960302049">"ਪੋਰਟੇਬਲ ਹੌਟਸਪੌਟ"</string>
-    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Bluetooth ਟੈਦਰਿੰਗ"</string>
-    <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"ਟੀਥਰਿੰਗ"</string>
-    <string name="tether_settings_title_all" msgid="8356136101061143841">"ਟੀਥਰਿੰਗ &amp; ਪੋਰਟੇਬਲ ਹੌਟਸਪੌਟ"</string>
+    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"ਬਲੂਟੁੱਥ ਟੈਦਰਿੰਗ"</string>
+    <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"ਟੈਦਰਿੰਗ"</string>
+    <string name="tether_settings_title_all" msgid="8356136101061143841">"ਟੈਦਰਿੰਗ &amp; ਪੋਰਟੇਬਲ ਹੌਟਸਪੌਟ"</string>
     <string name="managed_user_title" msgid="8109605045406748842">"ਸਾਰੀਆਂ ਕੰਮ ਐਪਾਂ"</string>
     <string name="user_guest" msgid="8475274842845401871">"ਮਹਿਮਾਨ"</string>
     <string name="unknown" msgid="1592123443519355854">"ਅਗਿਆਤ"</string>
     <string name="running_process_item_user_label" msgid="3129887865552025943">"ਵਰਤੋਂਕਾਰ: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
-    <string name="launch_defaults_some" msgid="313159469856372621">"ਕੁਝ ਡਿਫੌਲਟਸ ਸੈਟ ਕੀਤੇ"</string>
+    <string name="launch_defaults_some" msgid="313159469856372621">"ਕੁਝ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੈੱਟ ਕੀਤੇ"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"ਕੋਈ ਡਿਫੌਲਟਸ ਸੈਟ ਨਹੀਂ ਕੀਤੇ"</string>
-    <string name="tts_settings" msgid="8186971894801348327">"ਟੈਕਸਟ-ਟੂ-ਸਪੀਚ ਸੈਟਿੰਗਾਂ"</string>
-    <string name="tts_settings_title" msgid="1237820681016639683">"ਲਿਖਤ-ਤੋਂ-ਬੋਲੀ ਆਊਟਪੁਟ"</string>
+    <string name="tts_settings" msgid="8186971894801348327">"ਲਿਖਤ ਤੋਂ ਬੋਲੀ ਸੈਟਿੰਗਾਂ"</string>
+    <string name="tts_settings_title" msgid="1237820681016639683">"ਲਿਖਤ ਤੋਂ ਬੋਲੀ ਆਊਟਪੁਟ"</string>
     <string name="tts_default_rate_title" msgid="6030550998379310088">"ਸਪੀਚ ਰੇਟ"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"ਸਪੀਡ ਜਿਸਤੇ ਟੈਕਸਟ ਬੋਲਿਆ ਜਾਂਦਾ ਹੈ"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"ਪਿਚ"</string>
@@ -127,10 +133,10 @@
     <string name="tts_default_lang_summary" msgid="5219362163902707785">"ਬੋਲੇ ਗਏ ਟੈਕਸਟ ਲਈ ਭਾਸ਼ਾ-ਵਿਸ਼ੇਸ਼ ਵੌਇਸ ਸੈਟ ਕਰਦਾ ਹੈ"</string>
     <string name="tts_play_example_title" msgid="7094780383253097230">"ਇੱਕ ਉਦਾਹਰਨ ਲਈ ਸੁਣੋ"</string>
     <string name="tts_play_example_summary" msgid="8029071615047894486">"ਸਪੀਚ ਸਿੰਥੈਸਿਸ ਦਾ ਇੱਕ ਛੋਟਾ ਪ੍ਰਦਰਸ਼ਨ ਪਲੇ ਕਰੋ"</string>
-    <string name="tts_install_data_title" msgid="4264378440508149986">"ਵੌਇਸ ਡੈਟਾ ਇੰਸਟੌਲ ਕਰੋ"</string>
-    <string name="tts_install_data_summary" msgid="5742135732511822589">"ਸਪੀਚ ਸਿੰਥੈਸਿਸ ਲਈ ਲੁੜੀਂਦਾ ਵੌਇਸ ਡੈਟਾ ਇੰਸਟੌਲ ਕਰੋ"</string>
-    <string name="tts_engine_security_warning" msgid="8786238102020223650">"ਇਹ ਸਪੀਚ ਸਿੰਥੈਸਿਸ ਇੰਜਣ ਉਹ ਸਾਰਾ ਟੈਕਸਟ ਇਕੱਤਰ ਕਰਨ ਵਿੱਚ ਸਮਰੱਥ ਹੋ ਸਕਦਾ ਹੈ, ਜੋ ਬੋਲਿਆ ਜਾਏਗਾ, ਨਿੱਜੀ ਡੈਟਾ ਸਮੇਤ ਜਿਵੇਂ ਪਾਸਵਰਡ ਅਤੇ ਕ੍ਰੈਡਿਟ ਕਾਰਡ ਨੰਬਰ। ਇਹ <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> ਇੰਜਣ ਤੋਂ ਆਉਂਦਾ ਹੈ। ਕੀ ਇਸ ਸਪੀਚ ਸਿੰਥੈਸਿਸ ਇੰਜਣ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਹੈ?"</string>
-    <string name="tts_engine_network_required" msgid="1190837151485314743">"ਇਸ ਭਾਸ਼ਾ ਲਈ ਟੈਕਸਟ-ਟੂ-ਸਪੀਚ ਆਊਟਪੁਟ ਲਈ ਇੱਕ ਚਾਲੂ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਦੀ ਲੋੜ ਹੈ।"</string>
+    <string name="tts_install_data_title" msgid="4264378440508149986">"ਵੌਇਸ ਡਾਟਾ ਸਥਾਪਤ ਕਰੋ"</string>
+    <string name="tts_install_data_summary" msgid="5742135732511822589">"ਸਪੀਚ ਸਿੰਥੈਸਿਸ ਲਈ ਲੋੜੀਂਦਾ ਵੌਇਸ ਡਾਟਾ ਸਥਾਪਤ ਕਰੋ"</string>
+    <string name="tts_engine_security_warning" msgid="8786238102020223650">"ਇਹ ਸਪੀਚ ਸਿੰਥੈਸਿਸ ਇੰਜਣ ਉਹ ਸਭ ਲਿਖਤ ਇਕੱਤਰ ਕਰਨ ਵਿੱਚ ਸਮਰੱਥ ਹੋ ਸਕਦਾ ਹੈ, ਜੋ ਬੋਲਿਆ ਜਾਏਗਾ, ਨਿੱਜੀ ਡਾਟਾ ਸਮੇਤ ਜਿਵੇਂ ਪਾਸਵਰਡ ਅਤੇ ਕ੍ਰੈਡਿਟ ਕਾਰਡ ਨੰਬਰ। ਇਹ <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> ਇੰਜਣ ਤੋਂ ਆਉਂਦਾ ਹੈ। ਕੀ ਇਸ ਸਪੀਚ ਸਿੰਥੈਸਿਸ ਇੰਜਣ ਦੀ ਵਰਤੋਂ ਨੂੰ ਚਾਲੂ ਕਰਨਾ ਹੈੈ?"</string>
+    <string name="tts_engine_network_required" msgid="1190837151485314743">"ਇਸ ਭਾਸ਼ਾ ਲਈ ਲਿਖਤ ਤੋਂ ਬੋਲੀ ਆਊਟਪੁੱਟ ਲਈ ਇੱਕ ਚਾਲੂ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਦੀ ਲੋੜ ਹੈ।"</string>
     <string name="tts_default_sample_string" msgid="4040835213373086322">"ਇਹ ਸਪੀਚ ਸਿੰਥੈਸਿਸ ਦਾ ਇੱਕ ਉਦਾਹਰਨ ਹੈ"</string>
     <string name="tts_status_title" msgid="7268566550242584413">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਭਾਸ਼ਾ ਸਥਿਤੀ"</string>
     <string name="tts_status_ok" msgid="1309762510278029765">"<xliff:g id="LOCALE">%1$s</xliff:g> ਪੂਰੀ ਤਰ੍ਹਾਂ ਸਮਰਥਿਤ ਹੈ"</string>
@@ -138,7 +144,7 @@
     <string name="tts_status_not_supported" msgid="4491154212762472495">"<xliff:g id="LOCALE">%1$s</xliff:g> ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ"</string>
     <string name="tts_status_checking" msgid="5339150797940483592">"ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ..."</string>
     <string name="tts_engine_settings_title" msgid="3499112142425680334">"<xliff:g id="TTS_ENGINE_NAME">%s</xliff:g> ਲਈ ਸੈਟਿੰਗਾਂ"</string>
-    <string name="tts_engine_settings_button" msgid="1030512042040722285">"ਇੰਜਨ ਸੈਟਿੰਗਾਂ ਲੌਂਚ ਕਰੋ"</string>
+    <string name="tts_engine_settings_button" msgid="1030512042040722285">"ਇੰਜਣ ਸੈਟਿੰਗਾਂ ਲਾਂਚ ਕਰੋ"</string>
     <string name="tts_engine_preference_section_title" msgid="448294500990971413">"ਤਰਜੀਹੀ ਇੰਜਣ"</string>
     <string name="tts_general_section_title" msgid="4402572014604490502">"ਸਧਾਰਨ"</string>
     <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"ਬੋਲਣ ਦੀ ਪਿੱਚ ਨੂੰ ਦੁਬਾਰਾ ਮੁੜ-ਸੈੱਟ ਕਰੋ"</string>
@@ -157,125 +163,127 @@
     <string name="choose_profile" msgid="6921016979430278661">"ਪ੍ਰੋਫਾਈਲ ਚੁਣੋ"</string>
     <string name="category_personal" msgid="1299663247844969448">"ਨਿੱਜੀ"</string>
     <string name="category_work" msgid="8699184680584175622">"ਦਫ਼ਤਰ"</string>
-    <string name="development_settings_title" msgid="215179176067683667">"ਵਿਕਾਸਕਾਰ ਚੋਣਾਂ"</string>
-    <string name="development_settings_enable" msgid="542530994778109538">"ਵਿਕਾਸਕਾਰ ਚੋਣਾਂ ਨੂੰ ਯੋਗ ਬਣਾਓ"</string>
+    <string name="development_settings_title" msgid="215179176067683667">"ਵਿਕਾਸਕਾਰ ਵਿਕਲਪ"</string>
+    <string name="development_settings_enable" msgid="542530994778109538">"ਵਿਕਾਸਕਾਰ ਵਿਕਲਪਾਂ ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
     <string name="development_settings_summary" msgid="1815795401632854041">"ਐਪ ਵਿਕਾਸ ਲਈ ਚੋਣਾਂ ਸੈੱਟ ਕਰੋ"</string>
-    <string name="development_settings_not_available" msgid="4308569041701535607">"ਇਸ ਉਪਭੋਗਤਾ ਲਈ ਵਿਕਾਸਕਾਰ ਚੋਣਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
-    <string name="vpn_settings_not_available" msgid="956841430176985598">"ਇਸ ਉਪਭੋਗਤਾ ਲਈ VPN ਸੈਟਿੰਗਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
-    <string name="tethering_settings_not_available" msgid="6765770438438291012">"ਇਸ ਉਪਭੋਗਤਾ ਲਈ ਟੀਥਰਿੰਗ ਸੈਟਿੰਗਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
-    <string name="apn_settings_not_available" msgid="7873729032165324000">"ਪਹੁੰਚ ਬਿੰਦੂ ਨਾਮ ਸੈਟਿੰਗਾਂ ਇਸ ਉਪਭੋਗਤਾ ਲਈ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
+    <string name="development_settings_not_available" msgid="4308569041701535607">"ਇਸ ਵਰਤੋਂਕਾਰ ਲਈ ਵਿਕਾਸਕਾਰ ਵਿਕਲਪ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
+    <string name="vpn_settings_not_available" msgid="956841430176985598">"ਇਸ ਵਰਤੋਂਕਾਰ ਲਈ VPN ਸੈਟਿੰਗਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
+    <string name="tethering_settings_not_available" msgid="6765770438438291012">"ਇਸ ਵਰਤੋਂਕਾਰ ਲਈ ਟੈਦਰਿੰਗ ਸੈਟਿੰਗਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
+    <string name="apn_settings_not_available" msgid="7873729032165324000">"ਐਕਸੈੱਸ ਪੁਆਇੰਟ ਨਾਮ ਸੈਟਿੰਗਾਂ ਇਸ ਵਰਤੋਂਕਾਰ ਲਈ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
     <string name="enable_adb" msgid="7982306934419797485">"USB ਡੀਬਗਿੰਗ"</string>
-    <string name="enable_adb_summary" msgid="4881186971746056635">"ਡੀਬਗ ਮੋਡ ਜਦੋਂ USB ਕਨੈਕਟ ਕੀਤੀ ਜਾਏ"</string>
+    <string name="enable_adb_summary" msgid="4881186971746056635">"ਡੀਬੱਗ ਮੋਡ ਜਦੋਂ USB ਕਨੈਕਟ ਕੀਤੀ ਜਾਏ"</string>
     <string name="clear_adb_keys" msgid="4038889221503122743">"USB ਡੀਬਗਿੰਗ ਅਧਿਕਾਰ ਰੱਦ ਕਰੋ"</string>
-    <string name="bugreport_in_power" msgid="7923901846375587241">"ਬਗ ਰਿਪੋਰਟ ਸ਼ਾਰਟਕੱਟ"</string>
-    <string name="bugreport_in_power_summary" msgid="1778455732762984579">"ਇੱਕ ਬਗ ਰਿਪੋਰਟ ਲੈਣ ਲਈ ਪਾਵਰ ਮੀਨੂ ਵਿੱਚ ਇੱਕ ਬਟਨ ਦਿਖਾਓ"</string>
+    <string name="bugreport_in_power" msgid="7923901846375587241">"ਬੱਗ ਰਿਪੋਰਟ ਸ਼ਾਰਟਕੱਟ"</string>
+    <string name="bugreport_in_power_summary" msgid="1778455732762984579">"ਇੱਕ ਬੱਗ ਰਿਪੋਰਟ ਲੈਣ ਲਈ ਪਾਵਰ ਮੀਨੂ ਵਿੱਚ ਇੱਕ ਬਟਨ ਦਿਖਾਓ"</string>
     <string name="keep_screen_on" msgid="1146389631208760344">"ਸਕਿਰਿਆ ਰੱਖੋ"</string>
     <string name="keep_screen_on_summary" msgid="2173114350754293009">"ਸਕ੍ਰੀਨ ਚਾਰਜਿੰਗ ਦੇ ਸਮੇਂ ਕਦੇ ਵੀ ਸਲੀਪ ਨਹੀਂ ਹੋਵੇਗੀ"</string>
-    <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI ਸਨੂਪ ਲੌਗ ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ"</string>
+    <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ਬਲੂਟੁੱਥ HCI ਸਨੂਪ ਲੌਗ ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
     <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ਇੱਕ ਫਾਈਲ ਵਿੱਚ ਸਾਰੇ bluetooth HCI ਪੈਕੇਟ ਕੈਪਚਰ ਕਰੋ"</string>
-    <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM ਅਨਲੌਕ ਕਰਨਾ"</string>
-    <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ਬੂਟਲੋਡਰ ਨੂੰ ਅਨਲੌਕ ਕੀਤੇ ਜਾਣ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
-    <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"ਕੀ OEM ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
+    <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM ਅਣਲਾਕ ਕਰਨਾ"</string>
+    <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ਬੂਟਲੋਡਰ ਨੂੰ ਅਣਲਾਕ ਕੀਤੇ ਜਾਣ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
+    <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"ਕੀ OEM ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
     <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ਚਿਤਾਵਨੀ: ਡੀਵਾਈਸ ਸੁਰੱਖਿਆ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਉਦੋਂ ਇਸ ਡੀਵਾਈਸ ਤੇ ਕੰਮ ਨਹੀਂ ਕਰਨਗੀਆਂ ਜਦੋਂ ਇਹ ਸੈਟਿੰਗ ਚਾਲੂ ਹੋਵੇਗੀ।"</string>
     <string name="mock_location_app" msgid="7966220972812881854">"ਮੌਕ ਸਥਾਨ ਐਪ ਚੁਣੋ"</string>
     <string name="mock_location_app_not_set" msgid="809543285495344223">"ਕੋਈ ਵੀ ਮੌਕ ਸਥਾਨ ਐਪ ਸੈੱਟ ਨਹੀਂ ਕੀਤੀ ਗਈ"</string>
     <string name="mock_location_app_set" msgid="8966420655295102685">"ਮੌਕ ਸਥਾਨ ਐਪ: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="7044075693643009662">"ਨੈੱਟਵਰਕਿੰਗ"</string>
-    <string name="wifi_display_certification" msgid="8611569543791307533">"ਵਾਇਰਲੈਸ ਡਿਸਪਲੇ ਪ੍ਰਮਾਣੀਕਰਨ"</string>
-    <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi ਵਰਬੋਸ ਲੌਗਿੰਗ ਸਮਰੱਥ ਬਣਾਓ"</string>
-    <string name="wifi_aggressive_handover" msgid="5309131983693661320">"ਆਕਰਮਣਸ਼ੀਲ Wi‑Fi ਤੋਂ ਮੋਬਾਈਲ ਹੈਂਡਓਵਰ"</string>
-    <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ਹਮੇਸ਼ਾਂ Wi‑Fi Roam Scans ਦੀ ਆਗਿਆ ਦਿਓ"</string>
-    <string name="mobile_data_always_on" msgid="8774857027458200434">"ਮੋਬਾਈਲ ਡੈਟਾ ਹਮੇਸ਼ਾਂ ਕਿਰਿਆਸ਼ੀਲ"</string>
-    <string name="tethering_hardware_offload" msgid="7470077827090325814">"ਟੈਦਰਿੰਗ ਹਾਰਡਵੇਅਰ ਐਕਸੇਲਰੇਸ਼ਨ"</string>
+    <string name="wifi_display_certification" msgid="8611569543791307533">"ਵਾਇਰਲੈੱਸ ਡਿਸਪਲੇ ਪ੍ਰਮਾਣੀਕਰਨ"</string>
+    <string name="wifi_verbose_logging" msgid="4203729756047242344">"ਵਾਈ-ਫਾਈ ਵਰਬੋਸ ਲੌਗਿੰਗ ਚਾਲੂ ਕਰੋ"</string>
+    <string name="wifi_aggressive_handover" msgid="5309131983693661320">"ਆਕਰਮਣਸ਼ੀਲ ਵਾਈ‑ਫਾਈ ਤੋਂ ਮੋਬਾਈਲ ਹੈਂਡਓਵਰ"</string>
+    <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ਹਮੇਸ਼ਾਂ ਵਾਈ‑ਫਾਈ ਰੋਮ ਸਕੈਨਾਂ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
+    <string name="mobile_data_always_on" msgid="8774857027458200434">"ਮੋਬਾਈਲ ਡਾਟਾ ਹਮੇਸ਼ਾਂ ਕਿਰਿਆਸ਼ੀਲ"</string>
+    <string name="tethering_hardware_offload" msgid="7470077827090325814">"ਟੈਦਰਿੰਗ ਹਾਰਡਵੇਅਰ ਐਕਸੈੱਲਰੇਸ਼ਨ"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"ਅਨਾਮ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸਾਂ ਦਿਖਾਓ"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ਪੂਰਨ ਵੌਲਿਊਮ ਨੂੰ ਅਯੋਗ ਬਣਾਓ"</string>
-    <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"ਇਨ-ਬੈਂਡ ਘੰਟੀ ਵੱਜਣ ਨੂੰ ਯੋਗ ਬਣਾਓ"</string>
-    <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ਬਲੂਟੁੱਥ AVRCP ਰੂਪ"</string>
-    <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"ਬਲੂਟੁੱਥ AVRCP ਰੂਪ ਚੁਣੋ"</string>
+    <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"ਇਨ-ਬੈਂਡ ਘੰਟੀ ਵੱਜਣ ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
+    <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ਬਲੂਟੁੱਥ AVRCP ਵਰਜਨ"</string>
+    <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"ਬਲੂਟੁੱਥ AVRCP ਵਰਜਨ ਚੁਣੋ"</string>
     <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਕੋਡੇਕ"</string>
     <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="4558347981670553665">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਕੋਡੇਕ ਚੁਣੋ"</string>
-    <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਨਮੂਨਾ ਦਰ"</string>
+    <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ਬਲੂਟੁੱਥ  ਆਡੀਓ  ਨਮੂਨਾ ਦਰ"</string>
     <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="5628790207448471613">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਕੋਡੇਕ ਚੁਣੋ:\nਸੈਂਪਲ ਰੇਟ"</string>
-    <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"ਪ੍ਰਤੀ ਨਮੂਨਾ ਬਲੂਟੁੱਥ ਔਡੀਓ ਬਿਟਾਂ"</string>
+    <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"ਪ੍ਰਤੀ ਨਮੂਨਾ ਬਲੂਟੁੱਥ  ਆਡੀਓ  ਬਿਟਾਂ"</string>
     <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="4546131401358681321">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਕੋਡੇਕ ਚੁਣੋ:\nਬਿਟਾਂ ਪ੍ਰਤੀ ਨਮੂਨਾ"</string>
-    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਚੈਨਲ ਮੋਡ"</string>
+    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ਬਲੂਟੁੱਥ  ਆਡੀਓ  ਚੈਨਲ ਮੋਡ"</string>
     <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="9133545781346216071">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਕੋਡੇਕ ਚੁਣੋ:\nਚੈਨਲ ਮੋਡ"</string>
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"ਬਲੂਟੁੱਥ ਔਡੀਓ LDAC ਕੋਡੇਕ: ਪਲੇਬੈਕ ਗੁਣਵੱਤਾ"</string>
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"ਬਲੂਟੁੱਥ ਔਡੀਓ LDAC ਕੋਡੇਕ ਚੁਣੋ:\nਪਲੇਬੈਕ ਗੁਣਵੱਤਾ"</string>
     <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"ਸਟ੍ਰੀਮਿੰਗ: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
-    <string name="wifi_display_certification_summary" msgid="1155182309166746973">"ਵਾਇਰਲੈਸ ਡਿਸਪਲੇ ਪ੍ਰਮਾਣੀਕਰਨ ਲਈ ਚੋਣਾਂ ਦਿਖਾਓ"</string>
-    <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ਲੌਗਿੰਗ ਪੱਧਰ ਵਧਾਓ, Wi‑Fi Picker ਵਿੱਚ ਪ੍ਰਤੀ SSID RSSI ਦਿਖਾਓ"</string>
-    <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"ਜਦੋਂ ਯੋਗ ਬਣਾਇਆ ਹੋਵੇ, ਤਾਂ Wi‑Fi ਸਿਗਨਲ ਘੱਟ ਹੋਣ \'ਤੇ Wi‑Fi ਡੈਟਾ ਕਨੈਕਸ਼ਨ ਮੋਬਾਈਲ ਨੂੰ ਹੈਂਡ ਓਵਰ ਕਰਨ ਵਿੱਚ ਵੱਧ ਆਕਰਮਣਸ਼ੀਲ ਹੋਵੇਗਾ।"</string>
-    <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"ਇੰਟਰਫੇਸ ਤੇ ਮੌਜੂਦ ਡੈਟਾ ਟ੍ਰੈਫਿਕ ਦੀ ਮਾਤਰਾ ਦੇ ਆਧਾਰ ਤੇ Wi‑Fi ਰੋਮ ਸਕੈਨ ਦੀ ਆਗਿਆ ਦਿਓ/ਅਸਵੀਕਾਰ ਕਰੋ"</string>
-    <string name="select_logd_size_title" msgid="7433137108348553508">"ਲੌਗਰ ਬਫਰ ਆਕਾਰ"</string>
-    <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"ਪ੍ਰਤੀ ਲੌਗ ਬਫਰ ਲੌਗਰ ਆਕਾਰ ਚੁਣੋ"</string>
+    <string name="wifi_display_certification_summary" msgid="1155182309166746973">"ਵਾਇਰਲੈੱਸ ਡਿਸਪਲੇ ਪ੍ਰਮਾਣੀਕਰਨ ਲਈ ਚੋਣਾਂ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰੋ"</string>
+    <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ਵਾਈ‑ਫਾਈ ਲੌਗਿੰਗ ਪੱਧਰ ਵਧਾਓ, ਵਾਈ‑ਫਾਈ Picker ਵਿੱਚ ਪ੍ਰਤੀ SSID RSSI ਦਿਖਾਓ"</string>
+    <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"ਜਦੋਂ ਯੋਗ ਬਣਾਇਆ ਹੋਵੇ, ਤਾਂ ਵਾਈ‑ਫਾਈ ਸਿਗਨਲ ਘੱਟ ਹੋਣ \'ਤੇ ਵਾਈ‑ਫਾਈ ਡਾਟਾ ਕਨੈਕਸ਼ਨ ਮੋਬਾਈਲ ਨੂੰ ਹੈਂਡ ਓਵਰ ਕਰਨ ਵਿੱਚ ਵੱਧ ਆਕਰਮਣਸ਼ੀਲ ਹੋਵੇਗਾ।"</string>
+    <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"ਇੰਟਰਫੇਸ ਤੇ ਮੌਜੂਦ ਡਾਟਾ ਟ੍ਰੈਫਿਕ ਦੀ ਮਾਤਰਾ ਦੇ ਆਧਾਰ ਤੇ ਵਾਈ-ਫਾਈ ਰੋਮ ਸਕੈਨ ਦੀ ਆਗਿਆ ਦਿਓ/ਅਸਵੀਕਾਰ ਕਰੋ"</string>
+    <string name="select_logd_size_title" msgid="7433137108348553508">"ਲੌਗਰ ਬਫ਼ਰ ਆਕਾਰ"</string>
+    <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"ਪ੍ਰਤੀ ਲੌਗ ਬਫ਼ਰ ਲੌਗਰ ਆਕਾਰ ਚੁਣੋ"</string>
     <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"ਕੀ ਲੌਗਰ ਪ੍ਰਸਿੱਸਟੈਂਟ ਸਟੋਰੇਜ ਨੂੰ ਸਾਫ਼ ਕਰਨਾ ਹੈ?"</string>
-    <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"ਜਦੋਂ ਅਸੀਂ ਪ੍ਰਸਿੱਸਟੈਂਟ ਲੌਗਰ ਨਾਲ ਨਿਗਰਾਨੀ ਨਹੀਂ ਕਰ ਰਹੇ ਹੁੰਦੇ ਹਾਂ, ਤਾਂ ਸਾਨੂੰ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਵਿੱਚ ਮੌਜੂਦ ਲੌਗਰ ਡੈਟੇ ਨੂੰ ਮਿਟਾਉਣ ਦੀ ਲੋੜ ਪੈਂਦੀ ਹੈ।"</string>
+    <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"ਜਦੋਂ ਅਸੀਂ ਪ੍ਰਸਿੱਸਟੈਂਟ ਲੌਗਰ ਨਾਲ ਨਿਗਰਾਨੀ ਨਹੀਂ ਕਰ ਰਹੇ ਹੁੰਦੇ ਹਾਂ, ਤਾਂ ਸਾਨੂੰ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਵਿੱਚ ਮੌਜੂਦ ਲੌਗਰ ਡਾਟੇ ਨੂੰ ਮਿਟਾਉਣ ਦੀ ਲੋੜ ਪੈਂਦੀ ਹੈ।"</string>
     <string name="select_logpersist_title" msgid="7530031344550073166">"ਡੀਵਾਈਸ \'ਤੇ ਲੌਗ ਬਫ਼ਰਾਂ ਨੂੰ ਸਥਾਈ ਤੌਰ \'ਤੇ ਸਟੋਰ ਕਰੋ"</string>
     <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"ਡੀਵਾਈਸ \'ਤੇ ਸਥਾਈ ਤੌਰ \'ਤੇ ਸਟੋਰ ਕਰਨ ਲਈ ਲੌਗ ਬਫ਼ਰਾਂ ਨੂੰ ਚੁਣੋ"</string>
     <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB ਕੌਂਫਿਗਰੇਸ਼ਨ ਚੁਣੋ"</string>
     <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB ਕੌਂਫਿਗਰੇਸ਼ਨ ਚੁਣੋ"</string>
     <string name="allow_mock_location" msgid="2787962564578664888">"ਨਕਲੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨਾਂ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
     <string name="allow_mock_location_summary" msgid="317615105156345626">"ਨਕਲੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨਾਂ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
-    <string name="debug_view_attributes" msgid="6485448367803310384">"ਗੁਣ ਛਾਣਬੀਣ ਦੇਖੋ ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ"</string>
-    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"ਹਮੇਸ਼ਾ ਮੋਬਾਈਲ ਡੇਟਾ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਰੱਖੋ ਭਾਵੇਂ Wi‑Fi ਕਿਰਿਆਸ਼ੀਲ ਹੋਵੇ (ਤੇਜ਼ ਨੈੱਟਵਰਕ ਸਵਿੱਚਿੰਗ ਲਈ)।"</string>
-    <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"ਉਪਲਬਧ ਹੋਣ \'ਤੇ ਟੈਦਰਿੰਗ ਹਾਰਡਵੇਅਰ ਐਕਸੇਲਰੇਸ਼ਨ ਵਰਤੋ"</string>
+    <string name="debug_view_attributes" msgid="6485448367803310384">"ਵਿਸ਼ੇਸ਼ਤਾ ਛਾਣਬੀਣ ਦੇਖੋ ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
+    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"ਹਮੇਸ਼ਾਂ ਮੋਬਾਈਲ ਡਾਟਾ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਰੱਖੋ ਭਾਵੇਂ ਵਾਈ‑ਫਾਈ ਕਿਰਿਆਸ਼ੀਲ ਹੋਵੇ (ਤੇਜ਼ ਨੈੱਟਵਰਕ ਸਵਿੱਚਿੰਗ ਲਈ)।"</string>
+    <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"ਉਪਲਬਧ ਹੋਣ \'ਤੇ ਟੈਦਰਿੰਗ ਹਾਰਡਵੇਅਰ ਐਕਸੈੱਲਰੇਸ਼ਨ ਵਰਤੋ"</string>
     <string name="adb_warning_title" msgid="6234463310896563253">"ਕੀ USB ਡੀਬਗਿੰਗ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
-    <string name="adb_warning_message" msgid="7316799925425402244">"USB ਡੀਬਗਿੰਗ ਕੇਵਲ ਵਿਕਾਸ ਮੰਤਵਾਂ ਲਈ ਹੁੰਦੀ ਹੈ। ਇਸਨੂੰ ਆਪਣੇ ਕੰਪਿਊਟਰ ਅਤੇ ਆਪਣੀ ਡੀਵਾਈਸ ਵਿਚਕਾਰ ਡੈਟਾ ਕਾਪੀ ਕਰਨ ਲਈ ਵਰਤੋ, ਸੂਚਨਾ ਦੇ ਬਿਨਾਂ ਆਪਣੀ ਡੀਵਾਈਸ ਤੇ ਐਪਸ ਇੰਸਟੌਲ ਕਰੋ ਅਤੇ ਲੌਗ ਡੈਟਾ ਪੜ੍ਹੋ।"</string>
-    <string name="adb_keys_warning_message" msgid="5659849457135841625">"ਕੀ ਉਹਨਾਂ ਸਾਰੇ ਕੰਪਿਊਟਰਾਂ ਤੋਂ USB ਡੀਬਗਿੰਗ ਤੱਕ ਪਹੁੰਚ ਰੱਦ ਕਰਨੀ ਹੈ, ਜਿਹਨਾਂ ਲਈ ਪਹਿਲਾਂ ਤੁਸੀਂ ਅਧਿਕਾਰਤ ਕੀਤਾ ਹੈ?"</string>
+    <string name="adb_warning_message" msgid="7316799925425402244">"USB ਡੀਬਗਿੰਗ ਸਿਰਫ਼ ਵਿਕਾਸ ਮੰਤਵਾਂ ਲਈ ਹੁੰਦੀ ਹੈ। ਇਸਨੂੰ ਆਪਣੇ ਕੰਪਿਊਟਰ ਅਤੇ ਆਪਣੇ ਡੀਵਾਈਸ ਵਿਚਕਾਰ ਡਾਟਾ ਕਾਪੀ ਕਰਨ ਲਈ ਵਰਤੋ, ਸੂਚਨਾ ਦੇ ਬਿਨਾਂ ਆਪਣੇ ਡੀਵਾਈਸ ਤੇ ਐਪਾਂ ਸਥਾਪਤ ਕਰੋ ਅਤੇ ਲੌਗ ਡਾਟਾ ਪੜ੍ਹੋ।"</string>
+    <string name="adb_keys_warning_message" msgid="5659849457135841625">"ਕੀ ਉਹਨਾਂ ਸਾਰੇ ਕੰਪਿਊਟਰਾਂ ਤੋਂ USB ਡੀਬੱਗਿੰਗ ਤੱਕ ਪਹੁੰਚ ਰੱਦ ਕਰਨੀ ਹੈ, ਜਿਹਨਾਂ ਲਈ ਪਹਿਲਾਂ ਤੁਸੀਂ ਅਧਿਕਾਰਤ ਕੀਤਾ ਹੈ?"</string>
     <string name="dev_settings_warning_title" msgid="7244607768088540165">"ਕੀ ਵਿਕਾਸ ਸੈਟਿੰਗਾਂ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
-    <string name="dev_settings_warning_message" msgid="2298337781139097964">"ਇਹ ਸੈਟਿੰਗਾਂ ਕੇਵਲ ਵਿਕਾਸਕਾਰ ਦੀ ਵਰਤੋਂ ਲਈ ਹਨ। ਇਹ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਅਤੇ ਇਸਤੇ ਮੌਜੂਦ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਬ੍ਰੇਕ ਕਰਨ ਜਾਂ ਦੁਰਵਿਵਹਾਰ ਕਰਨ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦੇ ਹਨ।"</string>
-    <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB ਤੇ ਐਪਸ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰੋ"</string>
-    <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ਹਾਨੀਕਾਰਕ ਵਿਵਹਾਰ ਲਈ ADB/ADT ਰਾਹੀਂ ਇੰਸਟੌਲ ਕੀਤੇ ਐਪਸ ਦੀ ਜਾਂਚ ਕਰੋ।"</string>
+    <string name="dev_settings_warning_message" msgid="2298337781139097964">"ਇਹ ਸੈਟਿੰਗਾਂ ਕੇਵਲ ਵਿਕਾਸਕਾਰ ਦੀ ਵਰਤੋਂ ਲਈ ਹਨ। ਇਹ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਅਤੇ ਇਸਤੇ ਮੌਜੂਦ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਬ੍ਰੇਕ ਕਰਨ ਜਾਂ ਦੁਰਵਿਵਹਾਰ ਕਰਨ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦੇ ਹਨ।"</string>
+    <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB ਤੇ ਐਪਾਂ ਦੀ ਜਾਂਚ ਕਰੋ"</string>
+    <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ਹਾਨੀਕਾਰਕ ਵਿਵਹਾਰ ਲਈ ADB/ADT ਰਾਹੀਂ ਸਥਾਪਤ ਕੀਤੀਆਂ ਐਪਾਂ ਦੀ ਜਾਂਚ ਕਰੋ।"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"ਅਨਾਮ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸਾਂ ਦਿਖਾਈਆਂ ਜਾਣਗੀਆਂ (ਸਿਰਫ਼ MAC ਪਤੇ)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"ਰਿਮੋਟ ਡੀਵਾਈਸਾਂ ਨਾਲ ਵੌਲਿਊਮ ਸਮੱਸਿਆਵਾਂ ਜਿਵੇਂ ਕਿ ਨਾ ਪਸੰਦ ਕੀਤੀ ਜਾਣ ਵਾਲੀ ਉੱਚੀ ਵੌਲਿਊਮ ਜਾਂ ਕੰਟਰੋਲ ਦੀ ਕਮੀ ਵਰਗੀ ਹਾਲਤ ਵਿੱਚ ਬਲੂਟੁੱਥ ਪੂਰਨ ਵੌਲਿਊਮ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਅਯੋਗ ਬਣਾਉਂਦਾ ਹੈ।"</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"ਤੁਹਾਡੇ ਫ਼ੋਨ ਦੀਆਂ ਰਿੰਗਟੋਨਾਂ ਨੂੰ ਬਲੂਟੁੱਥ ਹੈੱਡਸੈੱਟਾਂ \'ਤੇ ਚਲਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"ਸਥਾਨਕ ਟਰਮੀਨਲ"</string>
-    <string name="enable_terminal_summary" msgid="67667852659359206">"ਟਰਮੀਨਲ ਐਪ ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ ਜੋ ਸਥਾਨਕ ਸ਼ੈਲ ਪਹੁੰਚ ਆੱਫਰ ਕਰਦਾ ਹੈ"</string>
+    <string name="enable_terminal_summary" msgid="67667852659359206">"ਟਰਮੀਨਲ ਐਪ ਨੂੰ ਚਾਲੂ ਕਰੋ ਜੋ ਸਥਾਨਕ ਸ਼ੈਲ ਪਹੁੰਚ ਪੇਸ਼ਕਸ਼ ਕਰਦਾ ਹੈ"</string>
     <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP ਜਾਂਚ"</string>
     <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP ਜਾਂਚ ਵਿਵਹਾਰ ਸੈੱਟ ਕਰੋ"</string>
     <string name="debug_debugging_category" msgid="6781250159513471316">"ਡੀਬਗਿੰਗ"</string>
-    <string name="debug_app" msgid="8349591734751384446">"ਡੀਬਗ ਐਪ ਚੁਣੋ"</string>
-    <string name="debug_app_not_set" msgid="718752499586403499">"ਕੋਈ ਡੀਬਗ ਐਪਲੀਕੇਸ਼ਨ ਸੈਟ ਨਹੀਂ ਕੀਤੀ"</string>
+    <string name="debug_app" msgid="8349591734751384446">"ਡੀਬੱਗ ਐਪ ਚੁਣੋ"</string>
+    <string name="debug_app_not_set" msgid="718752499586403499">"ਕੋਈ ਡੀਬੱਗ ਐਪਲੀਕੇਸ਼ਨ ਸੈੱਟ ਨਹੀਂ ਕੀਤੀ"</string>
     <string name="debug_app_set" msgid="2063077997870280017">"ਡੀਬਗਿੰਗ ਐਪਲੀਕੇਸ਼ਨ: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="5156029161289091703">"ਐਪਲੀਕੇਸ਼ਨ ਚੁਣੋ"</string>
     <string name="no_application" msgid="2813387563129153880">"ਕੁਝ ਨਹੀਂ"</string>
-    <string name="wait_for_debugger" msgid="1202370874528893091">"ਡੀਬਗਰ ਦੀ ਉਡੀਕ ਕਰੋ"</string>
-    <string name="wait_for_debugger_summary" msgid="1766918303462746804">"ਡੀਬਗ ਕੀਤੇ ਐਪਲੀਕੇਸ਼ਨ ਐਗਜੀਕਿਊਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਅਟੈਚ ਕਰਨ ਲਈ ਡੀਬਗਰ ਦੀ ਉਡੀਕ ਕਰਦੇ ਹਨ"</string>
+    <string name="wait_for_debugger" msgid="1202370874528893091">"ਡੀਬੱਗਰ ਦੀ ਉਡੀਕ ਕਰੋ"</string>
+    <string name="wait_for_debugger_summary" msgid="1766918303462746804">"ਡੀਬੱਗ ਕੀਤੇ ਐਪਲੀਕੇਸ਼ਨ ਐਗਜੀਕਿਊਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਅਟੈਚ ਕਰਨ ਲਈ ਡੀਬੱਗਰ ਦੀ ਉਡੀਕ ਕਰਦੇ ਹਨ"</string>
     <string name="telephony_monitor_switch" msgid="1764958220062121194">"ਟੈਲੀਫ਼ੋਨੀ ਮੋਨੀਟਰ"</string>
     <string name="telephony_monitor_switch_summary" msgid="7695552966547975635">"ਟੈਲੀਫ਼ੋਨੀ ਮੋਨੀਟਰ ਟੈਲੀਫ਼ੋਨੀ/ਮੌਡਮ ਪ੍ਰਕਾਰਜਾਤਮਕਤਾ ਵਿੱਚ ਕਿਸੇ ਸਮੱਸਿਆ ਦਾ ਪਤਾ ਲੱਗਣ \'ਤੇ ਲੌਗਾਂ ਨੂੰ ਇਕੱਤਰ ਕਰੇਗਾ ਅਤੇ ਵਰਤੋਂਕਾਰ ਨੂੰ ਇੱਕ ਬੱਗ ਦਾਇਰ ਕਰਨ ਲਈ ਸੂਚਨਾ ਦੇਵੇਗਾ"</string>
     <string name="debug_input_category" msgid="1811069939601180246">"ਇਨਪੁਟ"</string>
     <string name="debug_drawing_category" msgid="6755716469267367852">"ਡਰਾਇੰਗ"</string>
-    <string name="debug_hw_drawing_category" msgid="6220174216912308658">"ਹਾਰਡਵੇਅਰ ਤੇਜ਼ ਕੀਤਾ ਪ੍ਰਗਟਾਅ"</string>
+    <string name="debug_hw_drawing_category" msgid="6220174216912308658">"ਹਾਰਡਵੇਅਰ ਐਕਸੇਲਰੇਟਿਡ ਰੈਂਡਰਿੰਗ"</string>
     <string name="media_category" msgid="4388305075496848353">"ਮੀਡੀਆ"</string>
     <string name="debug_monitoring_category" msgid="7640508148375798343">"ਨਿਰੀਖਣ ਕਰ ਰਿਹਾ ਹੈ"</string>
     <string name="strict_mode" msgid="1938795874357830695">"ਸਟ੍ਰਿਕਟ ਮੋਡ ਸਮਰਥਿਤ"</string>
     <string name="strict_mode_summary" msgid="142834318897332338">"ਜਦੋਂ ਐਪਸ ਮੇਨ ਥ੍ਰੈਡ ਤੇ ਲੰਮੇ ਓਪਰੇਸ਼ਨ ਕਰਨ ਤਾਂ ਸਕ੍ਰੀਨ ਫਲੈਸ਼ ਕਰੋ"</string>
     <string name="pointer_location" msgid="6084434787496938001">"ਪੌਇੰਟਰ ਟਿਕਾਣਾ"</string>
-    <string name="pointer_location_summary" msgid="840819275172753713">"ਸਕ੍ਰੀਨ ਓਵਰਲੇ ਮੌਜੂਦਾ ਟਚ ਡੈਟਾ ਦਿਖਾ ਰਿਹਾ ਹੈ"</string>
-    <string name="show_touches" msgid="2642976305235070316">"ਟੈਪਾਂ ਵਿਖਾਓ"</string>
-    <string name="show_touches_summary" msgid="6101183132903926324">"ਟੈਪਾਂ ਲਈ ਨਜ਼ਰ ਸਬੰਧੀ ਪ੍ਰਤੀਕਰਮ ਵਿਖਾਓ"</string>
+    <string name="pointer_location_summary" msgid="840819275172753713">"ਸਕ੍ਰੀਨ ਓਵਰਲੇ ਮੌਜੂਦਾ ਟਚ  ਡਾਟਾ  ਦਿਖਾ ਰਿਹਾ ਹੈ"</string>
+    <string name="show_touches" msgid="2642976305235070316">"ਟੈਪਾਂ  ਦਿਖਾਓ"</string>
+    <string name="show_touches_summary" msgid="6101183132903926324">"ਟੈਪਾਂ ਲਈ ਨਜ਼ਰ ਸਬੰਧੀ ਪ੍ਰਤੀਕਰਮ  ਦਿਖਾਓ"</string>
     <string name="show_screen_updates" msgid="5470814345876056420">"ਸਰਫਸ ਅਪਡੇਟਾਂ ਦਿਖਾਓ"</string>
-    <string name="show_screen_updates_summary" msgid="2569622766672785529">"ਸਮੁੱਚੀ ਵਿੰਡੋ ਸਰਫੇਸਾਂ ਫਲੈਸ਼ ਕਰੋ ਜਦੋਂ ਉਹ ਅਪਡੇਟ ਹੁੰਦੀਆਂ ਹਨ"</string>
-    <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU ਦ੍ਰਿਸ਼ ਅਪਡੇਟਾਂ ਦਿਖਾਓ"</string>
-    <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"ਜਦੋਂ GPU ਨਾਲ ਡ੍ਰਾ ਕੀਤਾ ਜਾਏ ਤਾਂ ਵਿੰਡੋਜ ਦੇ ਅੰਦਰ ਦ੍ਰਿਸ਼ ਫਲੈਸ਼ ਕਰੋ"</string>
-    <string name="show_hw_layers_updates" msgid="5645728765605699821">"ਹਾਰਡਵੇਅਰ ਲੇਅਰਸ ਅਪਡੇਟਾਂ ਦਿਖਾਓ"</string>
-    <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"ਹਾਰਡਵੇਅਰ ਲੇਅਰਾਂ ਨੂੰ ਹਰੀਆਂ ਫਲੈਸ਼ ਕਰੋ ਜਦੋਂ ਉਹ ਅਪਡੇਟ ਹੁੰਦੀਆਂ ਹਨ"</string>
-    <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ਓਵਰਡ੍ਰਾ ਡੀਬਗ ਕਰੋ"</string>
+    <string name="show_screen_updates_summary" msgid="2569622766672785529">"ਵਿੰਡੋ ਦੇ ਸਮੁੱਚੇ ਤਲਾਂ ਦੇ ਅੱਪਡੇਟ ਹੋਣ \'ਤੇ ਉਨ੍ਹਾਂ ਨੂੰ ਰੌਸ਼ਨ ਕਰੋ"</string>
+    <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU ਦ੍ਰਿਸ਼ ਅੱਪਡੇਟਾਂ ਦਿਖਾਓ"</string>
+    <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"ਜਦੋਂ GPU ਨਾਲ ਡ੍ਰਾ ਕੀਤਾ ਜਾਏ ਤਾਂ ਵਿੰਡੋਜ਼ ਦੇ ਅੰਦਰ ਦ੍ਰਿਸ਼ ਫਲੈਸ਼ ਕਰੋ"</string>
+    <string name="show_hw_layers_updates" msgid="5645728765605699821">"ਹਾਰਡਵੇਅਰ ਲੇਅਰਾਂ ਦੇ ਅੱਪਡੇਟਾਂ ਦਿਖਾਓ"</string>
+    <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"ਹਾਰਡਵੇਅਰ ਲੇਅਰਾਂ ਅੱਪਡੇਟ ਹੋਣ \'ਤੇ ਉਨ੍ਹਾਂ ਨੂੰ ਹਰਾ ਕਰੋ"</string>
+    <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ਓਵਰਡ੍ਰਾ ਡੀਬੱਗ ਕਰੋ"</string>
     <string name="debug_hw_renderer" msgid="7568529019431785816">"GPU ਰੈਂਡਰਰ ਸੈੱਟ ਕਰੋ"</string>
     <string name="disable_overlays" msgid="2074488440505934665">"HW ਓਵਰਲੇਜ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
     <string name="disable_overlays_summary" msgid="3578941133710758592">"ਸਕ੍ਰੀਨ ਕੰਪੋਜਿਟਿੰਗ ਲਈ ਹਮੇਸ਼ਾਂ GPU ਵਰਤੋ"</string>
     <string name="simulate_color_space" msgid="6745847141353345872">"ਰੰਗ ਸਪੇਸ ਦੀ ਨਕਲ ਕਰੋ"</string>
-    <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ਟ੍ਰੇਸਿਜ ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ"</string>
-    <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ਔਡੀਓ ਰੂਟਿੰਗ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
-    <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ਔਡੀਓ ਪੈਰੀਫਰਲ ਲਈ ਆਟੋਮੈਟਿਕ ਰੂਟਿੰਗ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
+    <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ਟ੍ਰੇਸਿਜ ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
+    <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB  ਆਡੀਓ  ਰੂਟਿੰਗ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
+    <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB  ਆਡੀਓ  ਪੈਰੀਫਰਲ ਲਈ ਆਟੋਮੈਟਿਕ ਰੂਟਿੰਗ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
     <string name="debug_layout" msgid="5981361776594526155">"ਲੇਆਉਟ ਬਾਊਂਡਸ ਦਿਖਾਓ"</string>
     <string name="debug_layout_summary" msgid="2001775315258637682">"ਕਲਿਪ ਬਾਊਂਡਸ, ਮਾਰਜਿਨ ਆਦਿ ਦਿਖਾਓ"</string>
     <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL ਲੇਆਉਟ ਦਿਸ਼ਾ ਤੇ ਜ਼ੋਰ ਪਾਓ"</string>
     <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"ਸਾਰੇ ਸਥਾਨਾਂ ਲਈ RTL ਵੱਲ ਸਕ੍ਰੀਨ ਲੇਆਉਟ ਦਿਸ਼ਾ ਤੇ ਜ਼ੋਰ ਪਾਓ"</string>
-    <string name="force_hw_ui" msgid="6426383462520888732">"GPU ਪ੍ਰਗਟਾਅ ਤੇ ਜ਼ੋਰ ਪਾਓ"</string>
+    <string name="force_hw_ui" msgid="6426383462520888732">"GPU ਰੈਂਡਰਿੰਗ ਤੇ ਜ਼ੋਰ ਪਾਓ"</string>
     <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d ਡ੍ਰਾਇੰਗ ਲਈ GPU ਦੀ ਵਰਤੋਂ ਤੇ ਜ਼ੋਰ ਪਾਓ"</string>
     <string name="force_msaa" msgid="7920323238677284387">"4x MSAA ਤੇ ਜ਼ੋਰ ਪਾਓ"</string>
-    <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 ਐਪਸ ਵਿੱਚ 4x MSAA ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ"</string>
-    <string name="show_non_rect_clip" msgid="505954950474595172">"ਗ਼ੈਰ-ਆਇਤਾਕਾਰ ਕਲਿਪ ਓਪਰੇਸ਼ਨ ਡੀਬਗ ਕਰੋ"</string>
+    <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 ਐਪਾਂ ਵਿੱਚ 4x MSAA ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
+    <string name="show_non_rect_clip" msgid="505954950474595172">"ਗੈਰ-ਆਇਤਾਕਾਰ ਕਲਿੱਪ ਓਪਰੇਸ਼ਨ ਡੀਬੱਗ ਕਰੋ"</string>
     <string name="track_frame_time" msgid="6146354853663863443">"ਪ੍ਰੋਫਾਈਲ GPU ਰੈਂਡਰਿੰਗ"</string>
     <string name="window_animation_scale_title" msgid="6162587588166114700">"ਵਿੰਡੋ ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ"</string>
     <string name="transition_animation_scale_title" msgid="387527540523595875">"ਟ੍ਰਾਂਜਿਸ਼ਨ ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ"</string>
@@ -286,21 +294,21 @@
     <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ਹਰੇਕ ਗਤੀਵਿਧੀ ਨੂੰ ਨਸ਼ਟ ਕਰੋ ਜਿਵੇਂ ਹੀ ਉਪਭੋਗਤਾ ਇਸਨੂੰ ਛੱਡ ਦੇਵੇ"</string>
     <string name="app_process_limit_title" msgid="4280600650253107163">"ਪਿਛੋਕੜ ਪ੍ਰਕਿਰਿਆ ਸੀਮਾ"</string>
     <string name="show_all_anrs" msgid="28462979638729082">"ਸਾਰੇ ANR ਦਿਖਾਓ"</string>
-    <string name="show_all_anrs_summary" msgid="641908614413544127">"ਪਿਛੋਕੜ ਐਪਸ ਲਈ ਐਪਸ ਜਵਾਬ ਨਹੀਂ ਦੇ ਰਹੇ ਡਾਇਲੌਗ ਦਿਖਾਓ"</string>
-    <string name="show_notification_channel_warnings" msgid="1399948193466922683">"ਸੂਚਨਾ ਚੈਨਲ ਚੇਤਾਵਨੀਆਂ ਦਿਖਾਓ"</string>
-    <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"ਐਪ ਵੱਲੋਂ ਵੈਧ ਚੈਨਲ ਤੋਂ ਬਿਨਾਂ ਸੂਚਨਾ ਪੋਸਟ ਕਰਨ \'ਤੇ ਸਕ੍ਰੀਨ \'ਤੇ ਚੇਤਾਵਨੀ ਦਿਖਾਉਂਦੀ ਹੈ"</string>
+    <string name="show_all_anrs_summary" msgid="641908614413544127">"ਬੈਕਗਰਾਊਂਡ ਐਪਾਂ ਲਈ ਐਪ ਜਵਾਬ ਨਹੀਂ ਦੇ ਰਹੇ ਡਾਇਲੌਗ ਦਿਖਾਓ"</string>
+    <string name="show_notification_channel_warnings" msgid="1399948193466922683">"ਸੂਚਨਾ ਚੈਨਲ ਚਿਤਾਵਨੀਆਂ ਦਿਖਾਓ"</string>
+    <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"ਐਪ ਵੱਲੋਂ ਵੈਧ ਚੈਨਲ ਤੋਂ ਬਿਨਾਂ ਸੂਚਨਾ ਪੋਸਟ ਕਰਨ \'ਤੇ ਸਕ੍ਰੀਨ \'ਤੇ ਚਿਤਾਵਨੀ ਦਿਖਾਉਂਦੀ ਹੈ"</string>
     <string name="force_allow_on_external" msgid="3215759785081916381">"ਐਪਸ ਨੂੰ ਬਾਹਰਲੇ ਤੇ ਜ਼ਬਰਦਸਤੀ ਆਗਿਆ ਦਿਓ"</string>
     <string name="force_allow_on_external_summary" msgid="3640752408258034689">"ਮੈਨੀਫੈਸਟ ਮੁੱਲਾਂ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ, ਕਿਸੇ ਵੀ ਐਪ ਨੂੰ ਬਾਹਰੀ ਸਟੋਰੇਜ \'ਤੇ ਲਿਖਣ ਦੇ ਯੋਗ ਬਣਾਉਂਦੀ ਹੈ"</string>
     <string name="force_resizable_activities" msgid="8615764378147824985">"ਮੁੜ-ਆਕਾਰ ਬਦਲਣ ਲਈ ਸਰਗਰਮੀਆਂ \'ਤੇ ਜ਼ੋਰ ਦਿਓ"</string>
-    <string name="force_resizable_activities_summary" msgid="6667493494706124459">"ਮੈਨੀਫੈਸਟ ਮੁੱਲਾਂ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ, ਮਲਟੀ-ਵਿੰਡੋ ਲਈ ਸਾਰੀਆਂ ਸਰਗਰਮੀਆਂ ਨੂੰ ਆਕਾਰ ਬਦਲਣਯੋਗ ਬਣਾਓ।"</string>
-    <string name="enable_freeform_support" msgid="1461893351278940416">"freeform windows ਨੂੰ ਯੋਗ ਬਣਾਓ"</string>
-    <string name="enable_freeform_support_summary" msgid="8247310463288834487">"ਪ੍ਰਯੋਗਮਈ ਫ੍ਰੀਫਾਰਮ ਵਿੰਡੋਜ਼ ਲਈ ਸਮਰਥਨ ਨੂੰ ਯੋਗ ਬਣਾਓ।"</string>
-    <string name="local_backup_password_title" msgid="3860471654439418822">"ਡੈਸਕਟੌਪ ਬੈਕਅਪ ਪਾਸਵਰਡ"</string>
-    <string name="local_backup_password_summary_none" msgid="6951095485537767956">"ਡੈਸਕਟੌਪ ਪੂਰੇ ਬੈਕਅਪਸ ਇਸ ਵੇਲੇ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਹਨ"</string>
+    <string name="force_resizable_activities_summary" msgid="6667493494706124459">"ਮੈਨੀਫ਼ੈਸਟ ਮੁੱਲਾਂ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ, ਮਲਟੀ-ਵਿੰਡੋ ਲਈ ਸਾਰੀਆਂ ਸਰਗਰਮੀਆਂ ਨੂੰ ਆਕਾਰ ਬਦਲਣਯੋਗ ਬਣਾਓ।"</string>
+    <string name="enable_freeform_support" msgid="1461893351278940416">"freeform windows ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
+    <string name="enable_freeform_support_summary" msgid="8247310463288834487">"ਪ੍ਰਯੋਗਮਈ ਫ੍ਰੀਫਾਰਮ ਵਿੰਡੋਜ਼ ਲਈ ਸਮਰਥਨ ਨੂੰ ਚਾਲੂ ਕਰੋ।"</string>
+    <string name="local_backup_password_title" msgid="3860471654439418822">"ਡੈਸਕਟਾਪ ਬੈਕਅੱਪ ਪਾਸਵਰਡ"</string>
+    <string name="local_backup_password_summary_none" msgid="6951095485537767956">"ਡੈਸਕਟਾਪ ਪੂਰੇ ਬੈਕਅੱਪ ਇਸ ਵੇਲੇ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਹਨ"</string>
     <string name="local_backup_password_summary_change" msgid="5376206246809190364">"ਡੈਸਕਟਾਪ ਦੇ ਮੁਕੰਮਲ ਬੈਕਅੱਪਾਂ ਲਈ ਪਾਸਵਰਡ ਨੂੰ ਬਦਲਣ ਜਾਂ ਹਟਾਉਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
-    <string name="local_backup_password_toast_success" msgid="582016086228434290">"ਨਵਾਂ ਬੈਕਅਪ ਪਾਸਵਰਡ ਸੈੱਟ ਕੀਤਾ ਗਿਆ"</string>
+    <string name="local_backup_password_toast_success" msgid="582016086228434290">"ਨਵਾਂ ਬੈਕਅੱਪ ਪਾਸਵਰਡ ਸੈੱਟ ਕੀਤਾ ਗਿਆ"</string>
     <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"ਨਵਾਂ ਪਾਸਵਰਡ ਅਤੇ ਪੁਸ਼ਟੀ ਮੇਲ ਨਹੀਂ ਖਾਂਦੀ"</string>
-    <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"ਬੈਕਅਪ ਪਾਸਵਰਡ ਸੈਟ ਕਰਨ ਵਿੱਚ ਅਸਫਲਤਾ"</string>
+    <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"ਬੈਕਅੱਪ ਪਾਸਵਰਡ ਸੈੱਟ ਕਰਨ ਵਿੱਚ ਅਸਫਲਤਾ"</string>
   <string-array name="color_mode_names">
     <item msgid="2425514299220523812">"ਚਮਕੀਲਾ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
     <item msgid="8446070607501413455">"ਕੁਦਰਤੀ"</item>
@@ -323,7 +331,7 @@
     <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"ਤਬਦੀਲ ਕਰੋ ..."</string>
     <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"ਫ਼ਾਈਲ ਪਹਿਲਾਂ ਤੋਂ ਇਨਕ੍ਰਿਪਟਡ ਹੈ"</string>
     <string name="title_convert_fbe" msgid="1263622876196444453">"ਫ਼ਾਈਲ ਆਧਾਰਿਤ ਇਨਕ੍ਰਿਪਸ਼ਨ ਵਿੱਚ ਤਬਦੀਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
-    <string name="convert_to_fbe_warning" msgid="6139067817148865527">"ਡੈਟਾ ਪਾਰਟੀਸ਼ਨ ਦਾ ਫ਼ਾਈਲ ਆਧਾਰਿਤ ਇਨਕ੍ਰਿਪਸ਼ਨ ਵਿੱਚ ਰੁਪਾਂਤਰਣ ਕਰੋ\n !!ਚੇਤਾਵਨੀ!! ਇਹ ਤੁਹਾਡੇ ਸਾਰੇ ਡੈਟੇ ਨੂੰ ਮਿਟਾ ਦੇਵੇਗਾ\n ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਪ੍ਰਯੋਗਿਕ ਹੈ, ਅਤੇ ਸ਼ਾਇਦ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਨਾ ਕਰੇ।\n ਜਾਰੀ ਰੱਖਣ ਲਈ \'ਮਿਟਾਓ ਅਤੇ ਰੁਪਾਂਤਰਣ ਕਰੋ...\' ਨੂੰ ਦਬਾਓ।"</string>
+    <string name="convert_to_fbe_warning" msgid="6139067817148865527">" ਡਾਟਾ  ਪਾਰਟੀਸ਼ਨ ਦਾ ਫ਼ਾਈਲ ਆਧਾਰਿਤ ਇਨਕ੍ਰਿਪਸ਼ਨ ਵਿੱਚ ਰੁਪਾਂਤਰਣ ਕਰੋ\n !! ਚਿਤਾਵਨੀ !! ਇਹ ਤੁਹਾਡੇ ਸਾਰੇ  ਡਾਟੇ  ਨੂੰ ਮਿਟਾ ਦੇਵੇਗਾ\n ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਪ੍ਰਯੋਗਿਕ ਹੈ, ਅਤੇ ਸ਼ਾਇਦ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਨਾ ਕਰੇ।\n ਜਾਰੀ ਰੱਖਣ ਲਈ \'ਮਿਟਾਓ ਅਤੇ ਰੁਪਾਂਤਰਣ ਕਰੋ...\' ਨੂੰ ਦਬਾਓ।"</string>
     <string name="button_convert_fbe" msgid="5152671181309826405">"ਮਿਟਾਓ ਅਤੇ ਰੁਪਾਂਤਰਣ ਕਰੋ..."</string>
     <string name="picture_color_mode" msgid="4560755008730283695">"ਤਸਵੀਰ ਰੰਗ ਮੋਡ"</string>
     <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB ਵਰਤੋਂ ਕਰੋ"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> ਬਾਕੀ"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"ਪੂਰੀ ਤਰ੍ਹਾਂ ਚਾਰਜ ਹੋਣ ਤੱਕ <xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"ਅਗਿਆਤ"</string>
-    <string name="battery_info_status_charging" msgid="1705179948350365604">"ਚਾਰਜਿੰਗ"</string>
+    <string name="battery_info_status_charging" msgid="1705179948350365604">"ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"ਚਾਰਜ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"ਚਾਰਜ ਨਹੀਂ ਹੋ ਰਿਹਾ"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ਚਾਰਜ ਨਹੀਂ ਹੋ ਰਿਹਾ"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"ਪਲੱਗ ਲੱਗਾ ਹੋਇਆ ਹੈ, ਇਸ ਸਮੇਂ ਚਾਰਜ ਨਹੀਂ ਹੋ ਸਕਦੀ"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"ਪੂਰੀ"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਕੰਟਰੋਲ ਕੀਤੀ ਗਈ"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"ਪ੍ਰਸ਼ਾਸਕ ਦੁਆਰਾ ਯੋਗ ਬਣਾਇਆ ਗਿਆ"</string>
@@ -358,7 +365,7 @@
     <string name="disabled" msgid="9206776641295849915">"ਅਯੋਗ ਬਣਾਇਆ"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"ਇਜਾਜ਼ਤ ਹੈ"</string>
     <string name="external_source_untrusted" msgid="2677442511837596726">"ਇਜਾਜ਼ਤ ਨਹੀਂ"</string>
-    <string name="install_other_apps" msgid="6986686991775883017">"ਅਗਿਆਤ ਐਪਾਂ ਸਥਾਪਿਤ ਕਰੋ"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"ਅਗਿਆਤ ਐਪਾਂ ਸਥਾਪਤ ਕਰੋ"</string>
     <string name="home" msgid="3256884684164448244">"ਸੈਟਿੰਗਾਂ ਮੁੱਖ ਪੰਨਾ"</string>
   <string-array name="battery_labels">
     <item msgid="8494684293649631252">"0%"</item>
@@ -372,16 +379,15 @@
     <string name="screen_zoom_summary_large" msgid="4835294730065424084">"ਵੱਡੀ"</string>
     <string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"ਥੋੜ੍ਹਾ ਵੱਡੀ"</string>
     <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ਸਭ ਤੋਂ ਵੱਡੀ"</string>
-    <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
-    <string name="help_feedback_label" msgid="6815040660801785649">"ਮਦਦ ਅਤੇ ਪ੍ਰਤੀਕਰਮ"</string>
+    <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ਵਿਉਂਂਤੀ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
+    <string name="help_feedback_label" msgid="6815040660801785649">"ਮਦਦ &amp; ਫੀਡਬੈਕ"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"ਮੀਨੂ"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"ਡੈਮੋ ਮੋਡ \'ਚ ਫੈਕਟਰੀ ਰੀਸੈੱਟ ਲਈ ਪਾਸਵਰਡ ਦਿਓ"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"ਅੱਗੇ"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਹੈ"</string>
     <string name="active_input_method_subtypes" msgid="3596398805424733238">"ਸਰਗਰਮ ਇਨਪੁਟ ਵਿਧੀਆਂ"</string>
     <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"ਸਿਸਟਮ ਭਾਸ਼ਾਵਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
     <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"<xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g> ਲਈ ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹਣ ਵਿੱਚ ਅਸਫਲ"</string>
-    <string name="ime_security_warning" msgid="4135828934735934248">"ਇਹ ਇਨਪੁਟ ਵਿਧੀ ਤੁਹਾਡੇ ਵੱਲੋਂ ਟਾਈਪ ਕੀਤਾ ਜਾਣ ਵਾਲਾ ਸਾਰਾ ਟੈਕਸਟ ਇਕੱਤਰ ਕਰਨ ਵਿੱਚ ਸਮਰੱਥ ਹੋ ਸਕਦਾ ਹੈ, ਨਿੱਜੀ ਡੈਟਾ ਸਮੇਤ ਜਿਵੇਂ ਪਾਸਵਰਡ ਅਤੇ ਕ੍ਰੈਡਿਟ ਕਾਰਡ ਨੰਬਰ। ਇਹ <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>ਐਪ ਤੋਂ ਆਉਂਦਾ ਹੈ। ਕੀ ਇਹ ਸਪੈੱਲ ਚੈਕਰ ਵਰਤਣਾ ਹੈ?"</string>
-    <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"ਨੋਟ ਕਰੋ: ਰੀਬੂਟ ਤੋਂ ਬਾਅਦ, ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਆਪਣਾ ਫ਼ੋਨ ਅਨਲੌਕ ਨਹੀਂ ਕਰਦੇ ਤਦ ਤੱਕ ਇਹ ਐਪ ਚਾਲੂ ਨਹੀਂ ਹੋ ਸਕਦੀ"</string>
+    <string name="ime_security_warning" msgid="4135828934735934248">"ਇਹ ਇਨਪੁੱਟ ਵਿਧੀ ਤੁਹਾਡੇ ਵੱਲੋਂ ਟਾਈਪ ਕੀਤਾ ਜਾਣ ਵਾਲੀ ਸਾਰੀ ਲਿਖਤ ਇਕੱਤਰ ਕਰਨ ਵਿੱਚ ਸਮਰੱਥ ਹੋ ਸਕਦੀ ਹੈ, ਨਿੱਜੀ ਡਾਟਾ ਸਮੇਤ ਜਿਵੇਂ ਪਾਸਵਰਡ ਅਤੇ ਕ੍ਰੈਡਿਟ ਕਾਰਡ ਨੰਬਰ। ਇਹ <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g> ਐਪ ਤੋਂ ਆਉਂਦਾ ਹੈ। ਕੀ ਇਹ ਸਪੈੱਲ ਚੈਕਰ ਵਰਤਣਾ ਹੈ?"</string>
+    <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"ਨੋਟ ਕਰੋ: ਰੀਬੂਟ ਤੋਂ ਬਾਅਦ, ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਆਪਣਾ ਫ਼ੋਨ ਅਣਲਾਕ ਨਹੀਂ ਕਰਦੇ ਤਦ ਤੱਕ ਇਹ ਐਪ ਚਾਲੂ ਨਹੀਂ ਹੋ ਸਕਦੀ"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-pl/arrays.xml b/packages/SettingsLib/res/values-pl/arrays.xml
index 175d11b..c0427c8 100644
--- a/packages/SettingsLib/res/values-pl/arrays.xml
+++ b/packages/SettingsLib/res/values-pl/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (domyślna)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Użyj wyboru systemu (domyślnie)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Włącz opcjonalne kodeki"</item>
+    <item msgid="3304843301758635896">"Wyłącz opcjonalne kodeki"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Użyj wyboru systemu (domyślnie)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Włączenie opcjonalnych kodeków"</item>
+    <item msgid="741805482892725657">"Wyłączenie opcjonalnych kodeków"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Użyj wyboru systemu (domyślnie)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 58454b4..59d4724 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Połączono przez %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Dostępne przez %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Połączono, brak internetu"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punkt dostępu jest tymczasowo zajęty"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Połączono przez: %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Dostępna przez: %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Bardzo wolna"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Wolna"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Średnia"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Szybka"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Bardzo szybka"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Rozłączona"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Rozłączanie..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Łączenie..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: dwa paski."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: trzy paski."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi: pełna moc sygnału."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Sieć otwarta"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sieć zabezpieczona"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"System operacyjny Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Usunięte aplikacje"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Usunięte aplikacje i użytkownicy"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Zawsze szukaj Wi-Fi w roamingu"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilna transmisja danych zawsze aktywna"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Akceleracja sprzętowa tetheringu"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Pokaż urządzenia Bluetooth bez nazw"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Wyłącz głośność bezwzględną"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Włącz dzwonek w kanale dźwiękowym"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Wersja AVRCP Bluetooth"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Zweryfikuj aplikacje przez USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Sprawdź, czy aplikacje zainstalowane przez ADB/ADT nie zachowują się w szkodliwy sposób"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Zostaną wyświetlone urządzenia Bluetooth bez nazw (tylko adresy MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Wyłącza funkcję Głośność bezwzględna Bluetooth, jeśli występują problemy z urządzeniami zdalnymi, np. zbyt duża głośność lub brak kontroli."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Zezwala na odtwarzanie dzwonków telefonu w zestawach słuchawkowych Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminal lokalny"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – zostało <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> do pełnego naładowania"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Nieznane"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Ładowanie"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"ładowanie"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Nie podłączony"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nie podłączony"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Podłączony. Nie można teraz ładować"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Naładowana"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontrolowane przez administratora"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Włączone przez administratora"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Niestandardowe (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Pomoc i opinie"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Wpisz hasło, by przywrócić ustawienia fabryczne w trybie demonstracyjnym"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Dalej"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Wymagane hasło"</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/arrays.xml b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
index 19bd0d3..4695829 100644
--- a/packages/SettingsLib/res/values-pt-rBR/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (padrão)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Usar seleção do sistema (padrão)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Ativar codecs opcionais"</item>
+    <item msgid="3304843301758635896">"Desativar codecs opcionais"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Usar seleção do sistema (padrão)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Ativar codecs opcionais"</item>
+    <item msgid="741805482892725657">"Desativar codecs opcionais"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Usar seleção do sistema (padrão)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index 3b97a7f..4a56f8f 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado via %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Disponível via %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectada, sem Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Ponto de acesso temporariamente cheio"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Conectado via %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Disponível via %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Muito lenta"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Ok"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Média"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Rápida"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Muito rápida"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Desconectado"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Desconectando…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Conectando..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Duas barras de Wi-Fi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Três barras de Wi-Fi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Sinal Wi-Fi cheio."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rede aberta"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rede segura"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Sistema operacional Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Apps removidos"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Apps e usuários removidos"</string>
@@ -119,7 +125,7 @@
     <string name="tts_settings_title" msgid="1237820681016639683">"Conversão de texto em voz"</string>
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Taxa de fala"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocidade em que o texto é falado"</string>
-    <string name="tts_default_pitch_title" msgid="6135942113172488671">"Frequência do som"</string>
+    <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tom da fala"</string>
     <string name="tts_default_pitch_summary" msgid="1944885882882650009">"Afeta o tom da voz sintetizada"</string>
     <string name="tts_default_lang_title" msgid="8018087612299820556">"Idioma"</string>
     <string name="tts_lang_use_system" msgid="2679252467416513208">"Usar idioma do sistema"</string>
@@ -129,7 +135,7 @@
     <string name="tts_play_example_summary" msgid="8029071615047894486">"Reproduzir uma rápida demonstração da voz sintetizada"</string>
     <string name="tts_install_data_title" msgid="4264378440508149986">"Instalar dados de voz"</string>
     <string name="tts_install_data_summary" msgid="5742135732511822589">"É necessário instalar os dados de voz para a sintetização da fala"</string>
-    <string name="tts_engine_security_warning" msgid="8786238102020223650">"Este mecanismo de síntese de fala pode coletar todo texto que será falado, inclusive dados pessoais como senhas e números de cartão de crédito. Ele é proveniente do mecanismo <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>. Deseja ativar o uso desse mecanismo de síntese de fala?"</string>
+    <string name="tts_engine_security_warning" msgid="8786238102020223650">"Este mecanismo de síntese de fala pode coletar todo texto que será falado, inclusive dados pessoais como senhas e números de cartão de crédito. Ele é proveniente do mecanismo <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>. Quer ativar o uso desse mecanismo de síntese de fala?"</string>
     <string name="tts_engine_network_required" msgid="1190837151485314743">"Este idioma requer uma conexão de rede ativa para a conversão de texto em voz."</string>
     <string name="tts_default_sample_string" msgid="4040835213373086322">"Este é um exemplo de sintetização de voz."</string>
     <string name="tts_status_title" msgid="7268566550242584413">"Status de idioma padrão"</string>
@@ -141,7 +147,7 @@
     <string name="tts_engine_settings_button" msgid="1030512042040722285">"Iniciar configurações do mecanismo"</string>
     <string name="tts_engine_preference_section_title" msgid="448294500990971413">"Mecanismo preferencial"</string>
     <string name="tts_general_section_title" msgid="4402572014604490502">"Gerais"</string>
-    <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"Redefinir a frequência do som da fala"</string>
+    <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"Redefinir o tom da fala"</string>
     <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"Redefinir o tom no qual o texto é falado para o padrão."</string>
   <string-array name="tts_rate_entries">
     <item msgid="6695494874362656215">"Muito devagar"</item>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Sempre permitir verif. de roaming de Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Dados móveis sempre ativos"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleração de hardware de tethering"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sem nomes"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desativar volume absoluto"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Ativar o toque em banda"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versão do Bluetooth AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar apps por USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Verificar comportamento nocivo em apps instalados via ADB/ADT."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Dispositivos Bluetooth sem nomes (somente endereços MAC) serão exibidos"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Desativa o recurso Bluetooth de volume absoluto em caso de problemas com o volume em dispositivos remotos, como volume excessivamente alto ou falta de controle."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Permitir que os toques no smartphone sejam reproduzidos em fones de ouvido Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> restante(s)"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> até a carga completa"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Desconhecido"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Carregando"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"carregando"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Não está carregando"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Não está carregando"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Conectado. Não é possível carregar no momento"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Cheio"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlada pelo admin"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Ativado pelo administrador"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizada (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Ajuda e feedback"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Digite a senha para redef. p/ configuração original em modo demo"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Próxima"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Senha necessária"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/arrays.xml b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
index 833c795..78a24c4 100644
--- a/packages/SettingsLib/res/values-pt-rPT/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (predefinição)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Utilizar seleção do sistema (predef.)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Ativar codecs opcionais"</item>
+    <item msgid="3304843301758635896">"Desativar codecs opcionais"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Utilizar seleção do sistema (predef.)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Ativar codecs opcionais"</item>
+    <item msgid="741805482892725657">"Desativar codecs opcionais"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Utilizar seleção do sistema (predef.)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index e2c6b2f..6852f60 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Ligado através de %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Disponível através de %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Ligado, sem Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Ponto de acesso temporariamente cheio"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Ligado através de %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Disponível através de %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Muito lenta"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Média"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Rápida"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Muito rápida"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Desligado"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"A desligar..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"A ligar..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Duas barras de Wi-Fi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Três barras de Wi-Fi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Sinal de Wi-Fi completo."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rede aberta"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rede segura"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"SO Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplicações removidas"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplicações e utilizadores removidos"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir sempre a deteção de Wi-Fi em roaming"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Dados móveis sempre ativos"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleração de hardware para ligação (à Internet) via telemóvel"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sem nomes"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desativar volume absoluto"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Ativar toque dentro da banda"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versão de Bluetooth AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar aplicações de USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Verificar as aplicações instaladas via ADB/ADT para detetar comportamento perigoso."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"São apresentados os dispositivos Bluetooth sem nomes (apenas endereços MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Desativa a funcionalidade de volume absoluto do Bluetooth caso existam problemas de volume com dispositivos remotos, como um volume insuportavelmente alto ou a ausência de controlo."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Permitir que os toques no telemóvel sejam reproduzidos em auscultadores com microfone integrado Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
@@ -345,16 +353,15 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – resta(m) <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> até ficar totalmente carregada"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Desconhecido"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"A carregar"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"a carregar…"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Não está a carregar"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Não está a carregar"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Ligada à corrente, não é possível carregar neste momento"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Completo"</string>
-    <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlado pelo administrador"</string>
-    <string name="enabled_by_admin" msgid="5302986023578399263">"Ativada pelo administrador"</string>
-    <string name="disabled_by_admin" msgid="8505398946020816620">"Desativada pelo administrador"</string>
+    <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlado pelo gestor"</string>
+    <string name="enabled_by_admin" msgid="5302986023578399263">"Ativada pelo gestor"</string>
+    <string name="disabled_by_admin" msgid="8505398946020816620">"Desativada pelo gestor"</string>
     <string name="disabled" msgid="9206776641295849915">"Desativada"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"Autorizada"</string>
     <string name="external_source_untrusted" msgid="2677442511837596726">"Não autorizada"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizado (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Ajuda e comentários"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Introduzir palavra-passe para efetuar a reposição de fábrica no modo demo"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Próximo"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Palavra-passe obrigatória"</string>
diff --git a/packages/SettingsLib/res/values-pt/arrays.xml b/packages/SettingsLib/res/values-pt/arrays.xml
index 19bd0d3..4695829 100644
--- a/packages/SettingsLib/res/values-pt/arrays.xml
+++ b/packages/SettingsLib/res/values-pt/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (padrão)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Usar seleção do sistema (padrão)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Ativar codecs opcionais"</item>
+    <item msgid="3304843301758635896">"Desativar codecs opcionais"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Usar seleção do sistema (padrão)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Ativar codecs opcionais"</item>
+    <item msgid="741805482892725657">"Desativar codecs opcionais"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Usar seleção do sistema (padrão)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 3b97a7f..4a56f8f 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado via %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Disponível via %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectada, sem Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Ponto de acesso temporariamente cheio"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Conectado via %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Disponível via %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Muito lenta"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Ok"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Média"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Rápida"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Muito rápida"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Desconectado"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Desconectando…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Conectando..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Duas barras de Wi-Fi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Três barras de Wi-Fi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Sinal Wi-Fi cheio."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rede aberta"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rede segura"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Sistema operacional Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Apps removidos"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Apps e usuários removidos"</string>
@@ -119,7 +125,7 @@
     <string name="tts_settings_title" msgid="1237820681016639683">"Conversão de texto em voz"</string>
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Taxa de fala"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocidade em que o texto é falado"</string>
-    <string name="tts_default_pitch_title" msgid="6135942113172488671">"Frequência do som"</string>
+    <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tom da fala"</string>
     <string name="tts_default_pitch_summary" msgid="1944885882882650009">"Afeta o tom da voz sintetizada"</string>
     <string name="tts_default_lang_title" msgid="8018087612299820556">"Idioma"</string>
     <string name="tts_lang_use_system" msgid="2679252467416513208">"Usar idioma do sistema"</string>
@@ -129,7 +135,7 @@
     <string name="tts_play_example_summary" msgid="8029071615047894486">"Reproduzir uma rápida demonstração da voz sintetizada"</string>
     <string name="tts_install_data_title" msgid="4264378440508149986">"Instalar dados de voz"</string>
     <string name="tts_install_data_summary" msgid="5742135732511822589">"É necessário instalar os dados de voz para a sintetização da fala"</string>
-    <string name="tts_engine_security_warning" msgid="8786238102020223650">"Este mecanismo de síntese de fala pode coletar todo texto que será falado, inclusive dados pessoais como senhas e números de cartão de crédito. Ele é proveniente do mecanismo <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>. Deseja ativar o uso desse mecanismo de síntese de fala?"</string>
+    <string name="tts_engine_security_warning" msgid="8786238102020223650">"Este mecanismo de síntese de fala pode coletar todo texto que será falado, inclusive dados pessoais como senhas e números de cartão de crédito. Ele é proveniente do mecanismo <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>. Quer ativar o uso desse mecanismo de síntese de fala?"</string>
     <string name="tts_engine_network_required" msgid="1190837151485314743">"Este idioma requer uma conexão de rede ativa para a conversão de texto em voz."</string>
     <string name="tts_default_sample_string" msgid="4040835213373086322">"Este é um exemplo de sintetização de voz."</string>
     <string name="tts_status_title" msgid="7268566550242584413">"Status de idioma padrão"</string>
@@ -141,7 +147,7 @@
     <string name="tts_engine_settings_button" msgid="1030512042040722285">"Iniciar configurações do mecanismo"</string>
     <string name="tts_engine_preference_section_title" msgid="448294500990971413">"Mecanismo preferencial"</string>
     <string name="tts_general_section_title" msgid="4402572014604490502">"Gerais"</string>
-    <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"Redefinir a frequência do som da fala"</string>
+    <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"Redefinir o tom da fala"</string>
     <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"Redefinir o tom no qual o texto é falado para o padrão."</string>
   <string-array name="tts_rate_entries">
     <item msgid="6695494874362656215">"Muito devagar"</item>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Sempre permitir verif. de roaming de Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Dados móveis sempre ativos"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleração de hardware de tethering"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sem nomes"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desativar volume absoluto"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Ativar o toque em banda"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versão do Bluetooth AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar apps por USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Verificar comportamento nocivo em apps instalados via ADB/ADT."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Dispositivos Bluetooth sem nomes (somente endereços MAC) serão exibidos"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Desativa o recurso Bluetooth de volume absoluto em caso de problemas com o volume em dispositivos remotos, como volume excessivamente alto ou falta de controle."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Permitir que os toques no smartphone sejam reproduzidos em fones de ouvido Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> restante(s)"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> até a carga completa"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Desconhecido"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Carregando"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"carregando"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Não está carregando"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Não está carregando"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Conectado. Não é possível carregar no momento"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Cheio"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlada pelo admin"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Ativado pelo administrador"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizada (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Ajuda e feedback"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Digite a senha para redef. p/ configuração original em modo demo"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Próxima"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Senha necessária"</string>
diff --git a/packages/SettingsLib/res/values-ro/arrays.xml b/packages/SettingsLib/res/values-ro/arrays.xml
index d648895..b62014e 100644
--- a/packages/SettingsLib/res/values-ro/arrays.xml
+++ b/packages/SettingsLib/res/values-ro/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (prestabilit)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Folosiți selectarea sist. (prestabilit)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Activați codecurile opționale"</item>
+    <item msgid="3304843301758635896">"Dezactivați codecurile opționale"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Folosiți selectarea sist. (prestabilit)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Activați codecurile opționale"</item>
+    <item msgid="741805482892725657">"Dezactivați codecurile opționale"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Folosiți selectarea sist. (prestabilit)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index a3a2b47..09bcc8f 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectată prin %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Disponibilă prin %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectată, fără internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punctul de acces este temporar plin"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Conectată prin %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Disponibilă prin %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Foarte lentă"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Lentă"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Bine"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Medie"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Rapidă"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Foarte rapidă"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Deconectat"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"În curs de deconectare..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Se conectează..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Semnal Wi-Fi: două bare."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Semnal Wi-Fi: trei bare."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Semnal Wi-Fi: complet."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rețea nesecurizată"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Securizați rețeaua"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Sistem de operare Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplicații eliminate"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplicații și utilizatori eliminați"</string>
@@ -164,9 +170,9 @@
     <string name="vpn_settings_not_available" msgid="956841430176985598">"Setările VPN nu sunt disponibile pentru acest utilizator"</string>
     <string name="tethering_settings_not_available" msgid="6765770438438291012">"Setările pentru tethering nu sunt disponibile pentru acest utilizator"</string>
     <string name="apn_settings_not_available" msgid="7873729032165324000">"Setările pentru „Nume puncte de acces” nu sunt disponibile pentru acest utilizator"</string>
-    <string name="enable_adb" msgid="7982306934419797485">"Depanare USB"</string>
+    <string name="enable_adb" msgid="7982306934419797485">"Remedierea erorilor prin USB"</string>
     <string name="enable_adb_summary" msgid="4881186971746056635">"Mod de depanare când este conectat USB"</string>
-    <string name="clear_adb_keys" msgid="4038889221503122743">"Revoc autorizații depanare USB"</string>
+    <string name="clear_adb_keys" msgid="4038889221503122743">"Revoc autorizații remediere a erorilor prin USB"</string>
     <string name="bugreport_in_power" msgid="7923901846375587241">"Comandă rapidă pentru raportul de erori"</string>
     <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Afișați un buton în meniul de pornire pentru a realiza un raport de erori"</string>
     <string name="keep_screen_on" msgid="1146389631208760344">"Activ permanent"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Se permite întotdeauna scanarea traficului Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Date mobile permanent active"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Accelerare hardware pentru tethering"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Afișați dispozitivele Bluetooth fără nume"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Dezactivați volumul absolut"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Activați soneria în căști"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versiunea AVRCP pentru Bluetooth"</string>
@@ -219,13 +226,14 @@
     <string name="debug_view_attributes" msgid="6485448367803310384">"Activați inspectarea atributelor de vizualizare"</string>
     <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Păstrați întotdeauna conexiunea de date mobile activată, chiar și atunci când funcția Wi‑Fi este activată (pentru comutarea rapidă între rețele)."</string>
     <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Folosiți accelerarea hardware pentru tethering, dacă este disponibilă"</string>
-    <string name="adb_warning_title" msgid="6234463310896563253">"Permiteți depanarea USB?"</string>
-    <string name="adb_warning_message" msgid="7316799925425402244">"Depanarea 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="adb_warning_title" msgid="6234463310896563253">"Permiteți remedierea erorilor prin USB?"</string>
+    <string name="adb_warning_message" msgid="7316799925425402244">"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="adb_keys_warning_message" msgid="5659849457135841625">"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="7244607768088540165">"Permiteți setările pentru dezvoltare?"</string>
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificați aplicațiile prin USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Verificați aplicațiile instalate utilizând ADB/ADT, pentru a detecta un comportament dăunător."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Vor fi afișate dispozitivele Bluetooth fără nume (numai adresele MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Dezactivează funcția Bluetooth de volum absolut în cazul problemelor de volum apărute la dispozitivele la distanță, cum ar fi volumul mult prea ridicat sau lipsa de control asupra acestuia."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Permiteți ca tonurile de sonerie de pe telefon să fie redate prin căștile Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Aplicație terminal locală"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – timp rămas: <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> până la încărcarea completă"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Necunoscut"</string>
-    <string name="battery_info_status_charging" msgid="1705179948350365604">"Încarcă"</string>
+    <string name="battery_info_status_charging" msgid="1705179948350365604">"Se încarcă"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"se încarcă"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Nu se încarcă"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nu încarcă"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Conectat, nu se poate încărca chiar acum"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Complet"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlată de administrator"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Activat de administrator"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizat (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Ajutor și feedback"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Meniu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Introduceți parola pentru a reveni la setările din fabrică în modul demo"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Înainte"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Trebuie să introduceți o parolă"</string>
diff --git a/packages/SettingsLib/res/values-ru/arrays.xml b/packages/SettingsLib/res/values-ru/arrays.xml
index a8315cb..05ccc80 100644
--- a/packages/SettingsLib/res/values-ru/arrays.xml
+++ b/packages/SettingsLib/res/values-ru/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (по умолчанию)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Выбор системы (по умолчанию)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Аудиокодек: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Аудиокодек: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Включить дополнительные кодеки"</item>
+    <item msgid="3304843301758635896">"Отключить дополнительные кодеки"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Выбор системы (по умолчанию)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Аудиокодек: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Аудиокодек: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Включить дополнительные кодеки"</item>
+    <item msgid="741805482892725657">"Отключить дополнительные кодеки"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Выбор системы (по умолчанию)"</item>
     <item msgid="8895532488906185219">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 905195a..2b4917c 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Подключено к %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Доступно через %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Подключено, без Интернета"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"К точке доступа подключено слишком много устройств"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Подключено к %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Доступно через %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Очень медленная"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Медленная"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ОК"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Средняя"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Быстрая"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Очень быстрая"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="DESCRIPTION">%2$s</xliff:g>: <xliff:g id="STATE">%1$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Нет подключения"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Отключение..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Подключение..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: два деления"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: три деления"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi: надежный сигнал"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Открытая сеть"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Защищенная сеть"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"ОС Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Удаленные приложения"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Удаленные приложения и пользователи"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Всегда включать поиск сетей Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Не отключать мобильный Интернет"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Аппаратное ускорение в режиме модема"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Показывать Bluetooth-устройства без названий"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Отключить абсолютный уровень громкости"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Включить внутриполосное воспроизведение"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Версия Bluetooth AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Только для разработчиков. Изменение этих настроек может привести к сбоям или неправильной работе устройства и приложений."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Проверять приложения при установке"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Выполнять проверку безопасности приложений при установке через ADB/ADT"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Показывать Bluetooth-устройства без названий (только с MAC-адресами)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Отключить абсолютный уровень громкости Bluetooth при возникновении проблем на удаленных устройствах, например при слишком громком звучании или невозможности контролировать настройку."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Разрешить воспроизведение рингтонов на телефоне через Bluetooth-гарнитуру"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Локальный терминальный доступ"</string>
@@ -270,12 +278,12 @@
     <string name="debug_layout" msgid="5981361776594526155">"Показывать границы элементов"</string>
     <string name="debug_layout_summary" msgid="2001775315258637682">"Показывать границы обрезки, поля и т. п."</string>
     <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Отразить интерфейс"</string>
-    <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Включить написание справа налево для всех языков"</string>
+    <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Принудительно расположить элементы интерфейса справа налево во всех локалях"</string>
     <string name="force_hw_ui" msgid="6426383462520888732">"GPU-ускорение"</string>
     <string name="force_hw_ui_summary" msgid="5535991166074861515">"Всегда использовать GPU для двухмерного рисования"</string>
     <string name="force_msaa" msgid="7920323238677284387">"Включить 4x MSAA"</string>
     <string name="force_msaa_summary" msgid="9123553203895817537">"Включить 4x MSAA в приложениях OpenGL ES 2.0"</string>
-    <string name="show_non_rect_clip" msgid="505954950474595172">"Отладить операции непрямоугольного усечения"</string>
+    <string name="show_non_rect_clip" msgid="505954950474595172">"Отладка операций усечения сложной формы"</string>
     <string name="track_frame_time" msgid="6146354853663863443">"Профилировать GPU-отрисовку"</string>
     <string name="window_animation_scale_title" msgid="6162587588166114700">"Анимация окон"</string>
     <string name="transition_animation_scale_title" msgid="387527540523595875">"Анимация переходов"</string>
@@ -287,7 +295,7 @@
     <string name="app_process_limit_title" msgid="4280600650253107163">"Лимит фоновых процессов"</string>
     <string name="show_all_anrs" msgid="28462979638729082">"Все ANR"</string>
     <string name="show_all_anrs_summary" msgid="641908614413544127">"Уведомлять о том, что приложение не отвечает"</string>
-    <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Показывать предупреждения канала передачи оповещения"</string>
+    <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Показывать предупреждения канала передачи уведомлений"</string>
     <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Показывать предупреждение о новых уведомлениях приложения вне допустимого канала"</string>
     <string name="force_allow_on_external" msgid="3215759785081916381">"Разрешить сохранение на внешние накопители"</string>
     <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Разрешить сохранение приложений на внешних накопителях (независимо от значений в манифесте)"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g>, осталось: <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> до полной зарядки"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Неизвестно"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Идет зарядка"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"заряжается"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Не заряжается"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Не заряжается"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Подключено, не заряжается"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Батарея заряжена"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Контролируется администратором"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Включено администратором"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Другой (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Справка/отзыв"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Чтобы сбросить настройки в деморежиме, введите пароль."</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Далее"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Требуется пароль"</string>
diff --git a/packages/SettingsLib/res/values-si/arrays.xml b/packages/SettingsLib/res/values-si/arrays.xml
index a3c4934..2808ba3 100644
--- a/packages/SettingsLib/res/values-si/arrays.xml
+++ b/packages/SettingsLib/res/values-si/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (පෙරනිමි)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"පද්ධති තේරීම භාවිත කරන්න (පෙරනිමි)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ශ්‍රව්‍යය"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ශ්‍රව්‍යය"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"විකල්පමය කොඩෙක් සබල කරන්න"</item>
+    <item msgid="3304843301758635896">"විකල්පමය කොඩෙක් අබල කරන්න"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"පද්ධති තේරීම භාවිත කරන්න (පෙරනිමි)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ශ්‍රව්‍යය"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ශ්‍රව්‍යය"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"විකල්පමය කොඩෙක් සබල කරන්න"</item>
+    <item msgid="741805482892725657">"විකල්පමය කොඩෙක් අබල කරන්න"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"පද්ධති තේරීම භාවිත කරන්න (පෙරනිමි)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index 9c75355..3fb05b0 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s හරහා සම්බන්ධ විය"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s හරහා ලබා ගැනීමට හැකිය"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"සම්බන්ධයි, අන්තර්ජාලය නැත"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ප්‍රවේශ ලක්ෂ්‍ය තාවකාලිකව පිරී ඇත"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s හරහා සම්බන්ධ විය"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s හරහා ලබා ගැනීමට හැකිය"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"ඉතා මන්දගාමී"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"මන්දගාමී"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"හරි"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"මධ්‍යම"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"වේගවත්"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"ඉතා වේගවත්"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"විසන්ධි වුණි"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"විසන්ධි වෙමින්…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"සම්බන්ධ වෙමින්…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi තීරු දෙකයි."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"WiFi තීරු තුනයි."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi සංඥාව පිරී ඇත."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"විවෘත ජාලය"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"ආරක්ෂිත ජාලය"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"ඉවත් කළ යෙදුම්"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"යෙදුම් සහ පරිශීලකයින් ඉවත් කරන ලදි"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi රෝම් පරිලෝකන වෙතට සැමවිට අවසර දෙන්න"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"ජංගම දත්ත සැමවිට ක්‍රියාකාරීය"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"ටෙදරින් දෘඪාංග ත්වරණය"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"නම් නොමැති බ්ලූටූත් උපාංග පෙන්වන්න"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"නිරපේක්ෂ හඩ පරිමාව අබල කරන්න"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"කලාපය තුළ නාද වීම සබල කරන්න"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"බ්ලූටූත් AVRCP අනුවාදය"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"මෙම සැකසීම් වර්ධක භාවිතය සඳහා පමණි. ඔබගේ උපාංගයේ සහ යෙදුම්වල අක්‍රිය වීමට හෝ වැරදි ක්‍රියා කෙරුමකට ඒවා බලපෑ හැක."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB ඔස්සේ යෙදුම් සත්‍යාපනය කරගන්න"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT හරහා ස්ථාපනය වූ යෙදුම්, විනාශකාරී ක්‍රියාවන් ඇත්දැයි පරික්ෂාකර බලන්න."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"නම් නොමැති බ්ලූටූත් උපාංග (MAC ලිපින පමණි) සංදර්ශනය කරනු ඇත"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"පිළිගත නොහැකි ලෙස වැඩි හඩ පරිමාව හෝ පාලනය නොමැති වීම යනාදී දුරස්ථ උපාංග සමගින් වන හඬ පරිමා ගැටලුවලදී බ්ලූටූත් නිරපේක්ෂ හඬ පරිමා විශේෂාංගය අබල කරයි."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"දුරකථනයේ නාද රටාවලට බ්ලූටූත් මත වාදනය වීමට ඉඩ දෙන්න"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"අභ්‍යන්තර අන්තය"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - ඉතිරි <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> සම්පූර්ණයෙන් ආරෝපණය වන තෙක්"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"නොදනී"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"ආරෝපණය වෙමින්"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"ආරෝපණය වේ"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"ආරෝපණය නොවේ"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ආරෝපණය නොවෙමින්"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"පේනුගත කර ඇත, මේ අවස්ථාවේදී ආරෝපණය කළ නොහැකිය"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"පූර්ණ"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"පරිපාලක විසින් පාලනය කරන ලදී"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"පරිපාලක විසින් සබල කර ඇත"</string>
@@ -358,7 +365,7 @@
     <string name="disabled" msgid="9206776641295849915">"අබල කර ඇත"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"ඉඩ දුන්"</string>
     <string name="external_source_untrusted" msgid="2677442511837596726">"ඉඩ නොදෙන"</string>
-    <string name="install_other_apps" msgid="6986686991775883017">"නොදන්නා යෙදුම් ස්ථාපනය කරන්න"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"නොදන්නා යෙදුම් ස්ථාප."</string>
     <string name="home" msgid="3256884684164448244">"සැකසීම් මුල් පිටුව"</string>
   <string-array name="battery_labels">
     <item msgid="8494684293649631252">"0%"</item>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"අභිරුචි (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"උදව් සහ ප්‍රතිපෝෂණ"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"මෙනුව"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"ආදර්ශන ප්‍රකාර කර්මාන්තශාලා යළි සැකසීමට මුරපදය ඇ. ක."</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"ඊළඟ"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"මුරපදය අවශ්‍යයි"</string>
diff --git a/packages/SettingsLib/res/values-sk/arrays.xml b/packages/SettingsLib/res/values-sk/arrays.xml
index dbffb0c..f3c25b4 100644
--- a/packages/SettingsLib/res/values-sk/arrays.xml
+++ b/packages/SettingsLib/res/values-sk/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (predvolené)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Použiť voľbu systému (predvolené)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Zvuk: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Zvuk: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Povoliť voliteľné kodeky"</item>
+    <item msgid="3304843301758635896">"Zakázať voliteľné kodeky"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Použiť voľbu systému (predvolené)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Zvuk: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Zvuk: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Povoliť voliteľné kodeky"</item>
+    <item msgid="741805482892725657">"Zakázať voliteľné kodeky"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Použiť voľbu systému (predvolené)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 595fd4c..1ccfda6 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -23,10 +23,10 @@
     <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Siete sa nedajú vyhľadávať"</string>
     <string name="wifi_security_none" msgid="7985461072596594400">"Žiadne"</string>
     <string name="wifi_remembered" msgid="4955746899347821096">"Uložené"</string>
-    <string name="wifi_disabled_generic" msgid="4259794910584943386">"Zakázané"</string>
+    <string name="wifi_disabled_generic" msgid="4259794910584943386">"Vypnuté"</string>
     <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Zlyhanie konfigurácie adresy IP"</string>
     <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"Nepripojené z dôvodu siete nízkej kvality"</string>
-    <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Zlyhanie pripojenia Wi-Fi"</string>
+    <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Zlyhanie pripojenia Wi‑Fi"</string>
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problém s overením totožnosti"</string>
     <string name="wifi_cant_connect" msgid="5410016875644565884">"Nedá sa pripojiť"</string>
     <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"K sieti <xliff:g id="AP_NAME">%1$s</xliff:g> sa nedá pripojiť"</string>
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Pripojené prostredníctvom %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"K dispozícii prostredníctvom %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Pripojené, žiadny internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Prístupový bod je dočasne plný"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Pripojené prostredníctvom operátora %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"K dispozícii prostredníctvom operátora %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Veľmi nízka"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Nízka"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Stredná"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Vysoká"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Veľmi vysoká"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Odpojený"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Prebieha odpájanie..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Prebieha pripájanie…"</string>
@@ -95,12 +99,14 @@
     <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Nepodarilo sa spárovať so zariadením <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, pretože ste zadali nesprávny kód PIN alebo prístupový kľúč."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"So zariadením <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nie je možné komunikovať."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Párovanie odmietnuté zariadením <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="accessibility_wifi_off" msgid="1166761729660614716">"Sieť Wi-Fi je vypnutá."</string>
-    <string name="accessibility_no_wifi" msgid="8834610636137374508">"Sieť Wi-Fi je odpojená."</string>
-    <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Jedna čiarka signálu Wi-Fi."</string>
-    <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Dve čiarky signálu Wi-Fi."</string>
-    <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Tri čiarky signálu Wi-Fi."</string>
-    <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Plný signál Wi-Fi."</string>
+    <string name="accessibility_wifi_off" msgid="1166761729660614716">"Sieť Wi‑Fi je vypnutá."</string>
+    <string name="accessibility_no_wifi" msgid="8834610636137374508">"Sieť Wi‑Fi je odpojená."</string>
+    <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Jedna čiarka signálu Wi‑Fi."</string>
+    <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Dve čiarky signálu Wi‑Fi."</string>
+    <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Tri čiarky signálu Wi‑Fi."</string>
+    <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Plný signál Wi‑Fi."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Otvorená sieť"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Zabezpečená sieť"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"OS Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Odstránené aplikácie"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Odstránené aplikácie a používatelia"</string>
@@ -113,7 +119,7 @@
     <string name="user_guest" msgid="8475274842845401871">"Hosť"</string>
     <string name="unknown" msgid="1592123443519355854">"Neznáme"</string>
     <string name="running_process_item_user_label" msgid="3129887865552025943">"Používateľ: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
-    <string name="launch_defaults_some" msgid="313159469856372621">"Predvolená pre niektoré akcie"</string>
+    <string name="launch_defaults_some" msgid="313159469856372621">"Pre niektoré akcie"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"Nie je predvolená pre žiadne akcie"</string>
     <string name="tts_settings" msgid="8186971894801348327">"Nastavenia prevodu textu na reč"</string>
     <string name="tts_settings_title" msgid="1237820681016639683">"Prevod textu na reč"</string>
@@ -182,11 +188,12 @@
     <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikácia so simulovanou polohou: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="7044075693643009662">"Siete"</string>
     <string name="wifi_display_certification" msgid="8611569543791307533">"Certifikácia bezdrôtového zobrazenia"</string>
-    <string name="wifi_verbose_logging" msgid="4203729756047242344">"Podrobné denníky Wi-Fi"</string>
-    <string name="wifi_aggressive_handover" msgid="5309131983693661320">"Agres. odovzdávať Wi-Fi na mobilnú sieť"</string>
-    <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vždy povoliť funkciu Wi-Fi Roam Scans"</string>
+    <string name="wifi_verbose_logging" msgid="4203729756047242344">"Podrobné denníky Wi‑Fi"</string>
+    <string name="wifi_aggressive_handover" msgid="5309131983693661320">"Agres. odovzdávať Wi‑Fi na mobilnú sieť"</string>
+    <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vždy povoliť funkciu Wi‑Fi Roam Scans"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilné dáta ponechať vždy aktívne"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardvérovú akcelerácia pre tethering"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Zobrazovať zariadenia Bluetooth bez názvov"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Zakázať absolútnu hlasitosť"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Povoliť zvonenie v hovorovom pásme"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Verzia rozhrania Bluetooth AVRCP"</string>
@@ -203,8 +210,8 @@
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"Vybrať kodek LDAC Bluetooth Audio:\nKvalita prehrávania"</string>
     <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streamovanie: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
     <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Zobraziť možnosti certifikácie bezdrôtového zobrazenia"</string>
-    <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zvýšiť úroveň denníkov Wi-Fi, zobrazovať podľa SSID RSSI pri výbere siete Wi-Fi"</string>
-    <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"Keď túto možnosť zapnete, Wi-Fi bude agresívnejšie odovzdávať dátové pripojenie na mobilnú sieť vtedy, keď bude slabý signál Wi-Fi"</string>
+    <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zvýšiť úroveň denníkov Wi‑Fi, zobrazovať podľa SSID RSSI pri výbere siete Wi‑Fi"</string>
+    <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"Keď túto možnosť zapnete, Wi‑Fi bude agresívnejšie odovzdávať dátové pripojenie na mobilnú sieť vtedy, keď bude slabý signál Wi‑Fi"</string>
     <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Povoliť alebo zakázať funkciu Wifi Roam Scans na základe objemu prenosu údajov v rozhraní"</string>
     <string name="select_logd_size_title" msgid="7433137108348553508">"Vyrovnávacia pamäť nástroja denníkov"</string>
     <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Veľkosť vyrovnávacej pamäte nástroja denníkov"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Tieto nastavenia sú určené len pre vývojárov. Môžu spôsobiť poruchu alebo nesprávne fungovanie zariadenia a nainštalovaných aplikácií."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Overovať aplikácie z USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kontrolovať škodlivosť aplikácií nainštalovaných pomocou nástroja ADB alebo ADT"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Zariadenia Bluetooth sa budú zobrazovať bez názvov (iba adresy MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Umožňuje zakázať funkciu absolútnej hlasitosti rozhrania Bluetooth v prípade problémov s hlasitosťou na vzdialených zariadeniach, ako je napríklad neprijateľne vysoká hlasitosť alebo absencia ovládacích prvkov."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Umožňuje prehrávať tóny zvonenia na telefóne v náhlavných súpravách Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Miestny terminál"</string>
@@ -327,7 +335,7 @@
     <string name="button_convert_fbe" msgid="5152671181309826405">"Vymazať a konvertovať…"</string>
     <string name="picture_color_mode" msgid="4560755008730283695">"Farebný režim obrázka"</string>
     <string name="picture_color_mode_desc" msgid="1141891467675548590">"Použije sa sRGB"</string>
-    <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Zakázané"</string>
+    <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Vypnuté"</string>
     <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromázia (úplna farbosleposť)"</string>
     <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomália (červená a zelená)"</string>
     <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomália (červená a zelená)"</string>
@@ -345,17 +353,16 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – zostávajúci čas: <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> do úplného nabitia"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Neznáme"</string>
-    <string name="battery_info_status_charging" msgid="1705179948350365604">"Nabíjanie"</string>
-    <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"nabíjanie"</string>
+    <string name="battery_info_status_charging" msgid="1705179948350365604">"Nabíja sa"</string>
+    <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"nabíja sa"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Nenabíja sa"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nenabíja sa"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Pripojené, ale nie je možné nabíjať"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Nabitá"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Ovládané správcom"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Povolené správcom"</string>
     <string name="disabled_by_admin" msgid="8505398946020816620">"Zakázané správcom"</string>
-    <string name="disabled" msgid="9206776641295849915">"Zakázané"</string>
+    <string name="disabled" msgid="9206776641295849915">"Deaktivované"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"Povolené"</string>
     <string name="external_source_untrusted" msgid="2677442511837596726">"Nie je povolené"</string>
     <string name="install_other_apps" msgid="6986686991775883017">"Inštalácia neznámych aplikácií"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Vlastné (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Pomocník a spätná väzba"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Ponuka"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Zadajte heslo na obnovenie továrenských nastavení v režime ukážky"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Ďalej"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Vyžaduje sa heslo"</string>
diff --git a/packages/SettingsLib/res/values-sl/arrays.xml b/packages/SettingsLib/res/values-sl/arrays.xml
index 6994096..a924bdb 100644
--- a/packages/SettingsLib/res/values-sl/arrays.xml
+++ b/packages/SettingsLib/res/values-sl/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (privzeto)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Uporabi sistemsko izbiro (privzeto)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Zvok <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Zvok <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Omogoči izbirne kodeke"</item>
+    <item msgid="3304843301758635896">"Onemogoči izbirne kodeke"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Uporabi sistemsko izbiro (privzeto)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Zvok <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Zvok <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Omogoči izbirne kodeke"</item>
+    <item msgid="741805482892725657">"Onemogoči izbirne kodeke"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Uporabi sistemsko izbiro (privzeto)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index b8a0514..de13147 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Vzpostavljena povezava prek: %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Na voljo prek: %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Vzpostavljena povezava, brez interneta"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Dostopna točka je trenutno zasedena"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Vzpostavljena povezava prek: %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Na voljo prek: %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Zelo počasna"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Počasna"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"V redu"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Srednje hitra"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Hitra"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Zelo hitra"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Prekinjena povezava"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Prekinjanje povezave ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Vzpostavljanje povezave ..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Dve črtici signala Wi-Fi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Tri črtice signala Wi-Fi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Poln signal Wi-Fi."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Odprto omrežje"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Varno omrežje"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"OS Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Odstranjene aplikacije"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Odstranjene aplikacije in uporabniki"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vedno omogoči iskanje omrežij Wi-Fi za gostovanje"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Prenos podatkov v mobilnem omrežju je vedno aktiven"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Strojno pospeševanje za internetno povezavo prek mobilnega telefona"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Naprave Bluetooth prikaži brez imen"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogočanje absolutnega praga glasnosti"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Omogoči zvonjenje iz telefona"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Različica profila AVRCP za Bluetooth"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Te nastavitve so namenjene samo za razvijanje in lahko povzročijo prekinitev ali napačno delovanje naprave in aplikacij v njej."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Preveri aplikacije prek USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Preveri, ali so aplikacije, nameščene prek ADB/ADT, škodljive."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Naprave Bluetooth bodo prikazane brez imen (samo z naslovi MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Onemogoči funkcijo absolutnega praga glasnosti za Bluetooth, če pride do težav z glasnostjo z oddaljenimi napravami, kot je nesprejemljivo visoka glasnost ali pomanjkanje nadzora."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Omogoči, da se toni zvonjenja v telefonu predvajajo v slušalkah z mikrofonom Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Lokalni terminal"</string>
@@ -345,19 +353,18 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – še <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> do napolnjenosti"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Neznano"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Polnjenje"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"polnjenje"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Se ne polni"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Se ne polni"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Priključeno, trenutno ni mogoče polniti"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Poln"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Nadzira skrbnik"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Omogočil skrbnik"</string>
     <string name="disabled_by_admin" msgid="8505398946020816620">"Onemogočil skrbnik"</string>
     <string name="disabled" msgid="9206776641295849915">"Onemogočeno"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"Dovoljene"</string>
-    <string name="external_source_untrusted" msgid="2677442511837596726">"Nedovoljene"</string>
+    <string name="external_source_untrusted" msgid="2677442511837596726">"Ni dovoljeno"</string>
     <string name="install_other_apps" msgid="6986686991775883017">"Nameščanje neznanih aplikacij"</string>
     <string name="home" msgid="3256884684164448244">"Začetna stran nastavitev"</string>
   <string-array name="battery_labels">
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Po meri (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Pomoč in povratne informacije"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Meni"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Geslo za tovar. nast. v predstav. načinu"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Naprej"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Vnesite geslo"</string>
diff --git a/packages/SettingsLib/res/values-sq/arrays.xml b/packages/SettingsLib/res/values-sq/arrays.xml
index 5f68450..244a534 100644
--- a/packages/SettingsLib/res/values-sq/arrays.xml
+++ b/packages/SettingsLib/res/values-sq/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (I parazgjedhur)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Përdor përzgjedhjen e sistemit (e parazgjedhur)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Audioja e <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Audioja e <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Aktivizo kodekët opsionalë"</item>
+    <item msgid="3304843301758635896">"Çaktivizo kodekët opsionalë"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Përdor përzgjedhjen e sistemit (e parazgjedhur)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Audioja e <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Audioja e <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Aktivizo kodekët opsionalë"</item>
+    <item msgid="741805482892725657">"Çaktivizo kodekët opsionalë"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Përdor përzgjedhjen e sistemit (e parazgjedhur)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index 34d0333..f77818d 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"E lidhur përmes %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"E mundshme përmes %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"U lidh, nuk ka internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pika e qasjes është përkohësisht plot"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"E lidhur përmes %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"E disponueshme përmes %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Shumë e ulët"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"E ngadaltë"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Në rregull"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Mesatare"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"E shpejtë"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Shumë e shpejtë"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Shkëputur"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Po shkëputet..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Po lidhet..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi ka dy vija."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: tre vija."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi ka sinjal të plotë."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rrjet i hapur"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rrjet i sigurt"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Sistemi operativ Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplikacionet e hequra"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplikacionet dhe përdoruesit e hequr"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Lejo gjithmonë skanimet për Wi-Fi edhe kur je në lëvizje"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Të dhënat celulare gjithmonë aktive"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Përshpejtimi i harduerit për ndarjen"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Shfaq pajisjet me Bluetooth pa emra"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Çaktivizo volumin absolut"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Aktivizo zilen brenda të njëjtit brez"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Versioni AVRCP i Bluetooth-it"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifiko apl. përmes USB-së"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kontrollo aplikacionet e instaluara nëpërmjet ADB/ADT për sjellje të dëmshme."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Pajisjet me Bluetooth do të shfaqen pa emra (vetëm adresat MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Çaktivizon funksionin e volumit absolut të Bluetooth në rast të problemeve të volumit me pajisjet në largësi, si p.sh. një volum i lartë i papranueshëm ose mungesa e kontrollit."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Lejo që zilet në telefon të luhen në kufjet me \"Bluetooth\""</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Terminali lokal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> të mbetura"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> derisa të mbushet plotësisht"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"I panjohur"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Po ngarkohet"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"po ngarkohet"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Nuk po ngarkohet"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nuk po ngarkohet"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Në prizë, por nuk mund të ngarkohet për momentin"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"E mbushur"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontrolluar nga administratori"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Aktivizuar nga administratori"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"I personalizuar (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Ndihma dhe komentet"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menyja"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Fut fjalëkalimin për të kryer rivendosje në gjendje fabrike në modalitetin e demonstrimit"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Përpara"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Kërkohet fjalëkalimi"</string>
diff --git a/packages/SettingsLib/res/values-sr/arrays.xml b/packages/SettingsLib/res/values-sr/arrays.xml
index 8c79f56..4486bf1 100644
--- a/packages/SettingsLib/res/values-sr/arrays.xml
+++ b/packages/SettingsLib/res/values-sr/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (подразумевано)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Користи избор система (подразумевано)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Омогући опционалне кодеке"</item>
+    <item msgid="3304843301758635896">"Онемогући опционалне кодеке"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Користи избор система (подразумевано)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Омогући опционалне кодеке"</item>
+    <item msgid="741805482892725657">"Онемогући опционалне кодеке"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Користи избор система (подразумевано)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 2b21d30..2b59fee 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Веза је успостављена преко приступне тачке %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Доступна је преко приступне тачке %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Веза је успостављена, нема интернета"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Приступна тачка је привремено заузета"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Повезано преко %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Доступно преко %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Веома спора"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Спора"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Потврди"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Средња"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Брза"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Веома брза"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Веза је прекинута"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Прекидање везе..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Повезивање…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi сигнал има две црте."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi сигнал има три црте."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi сигнал је најјачи."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Отворена мрежа"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Безбедна мрежа"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android ОС"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Уклоњене апликације"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Уклоњене апликације и корисници"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Увек дозволи скенирање Wi‑Fi-ја у ромингу"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Мобилни подаци су увек активни"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Хардверско убрзање привезивања"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Прикажи Bluetooth уређаје без назива"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Онемогући главно подешавање јачине звука"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Омогућавање звоњаве на истом каналу"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Верзија Bluetooth AVRCP-а"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ова подешавања су намењена само за програмирање. Могу да изазову престанак функционисања или неочекивано понашање уређаја и апликација на њему."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Верификуј апликације преко USB-а"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Проверава да ли су апликације инсталиране преко ADB-а/ADT-а штетне."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Биће приказани Bluetooth уређаји без назива (само са MAC адресама)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Онемогућава главно подешавање јачине звука на Bluetooth уређају у случају проблема са јачином звука на даљинским уређајима, као што су изузетно велика јачина звука или недостатак контроле."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Омогућите да се мелодија звона на телефону пушта преко Bluetooth слушалица"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Локални терминал"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"Преостало је <xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> до потпуног пуњења"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Непознато"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Пуњење"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"пуни се"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Не пуни се"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Не пуни се"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Прикључено је, али пуњење тренутно није могуће"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Пуно"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Контролише администратор"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Омогућио је администратор"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Прилагођени (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Помоћ и повратне информације"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Мени"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Унесите лозинку да бисте обавили ресетовање на фабричка подешавања у режиму демонстрације"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Даље"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Потребна је лозинка"</string>
diff --git a/packages/SettingsLib/res/values-sv/arrays.xml b/packages/SettingsLib/res/values-sv/arrays.xml
index 6fb4a74..de1e54f 100644
--- a/packages/SettingsLib/res/values-sv/arrays.xml
+++ b/packages/SettingsLib/res/values-sv/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (standard)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Använd systemval (standardinställning)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-ljud"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-ljud"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Aktivera valfria kodekar"</item>
+    <item msgid="3304843301758635896">"Inaktivera valfria kodekar"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Använd systemval (standardinställning)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-ljud"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-ljud"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Aktivera valfria kodekar"</item>
+    <item msgid="741805482892725657">"Inaktivera valfria kodekar"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Använd systemval (standardinställning)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
@@ -213,7 +231,7 @@
   </string-array>
   <string-array name="debug_hw_overdraw_entries">
     <item msgid="8190572633763871652">"Av"</item>
-    <item msgid="7688197031296835369">"Visa områden som överskrider gränsen"</item>
+    <item msgid="7688197031296835369">"Visa överritningsområden"</item>
     <item msgid="2290859360633824369">"Visa områden för deuteranomali"</item>
   </string-array>
   <string-array name="debug_hw_renderer_entries">
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index d73ec66..0b84f54 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Anslutet via %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Tillgängligt via %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Ansluten, inget internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Åtkomstpunkten har inga platser över för tillfället"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Anslutet via %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Tillgängligt via %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Mycket långsam"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Långsam"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Okej"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Medelsnabb"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Snabb"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Mycket snabb"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Kopplas ifrån"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Kopplar ifrån…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Ansluter…"</string>
@@ -88,7 +92,7 @@
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Använd för filöverföring"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"Använd för inmatning"</string>
     <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Parkoppling"</string>
-    <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"KOPPLA"</string>
+    <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"PARKOPPLA"</string>
     <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"Avbryt"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Om du kopplar enheten får du tillgång till dina kontakter och din samtalshistorik när du är ansluten."</string>
     <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"Det gick inte att koppla till <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
@@ -101,14 +105,16 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: två staplar."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: tre staplar."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Full signalstyrka för Wi-Fi."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Öppet nätverk"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Säkert nätverk"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Operativsystemet Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Borttagna appar"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Borttagna appar och användare"</string>
     <string name="tether_settings_title_usb" msgid="6688416425801386511">"Internetdelning via USB"</string>
-    <string name="tether_settings_title_wifi" msgid="3277144155960302049">"Mobil surfpunkt"</string>
+    <string name="tether_settings_title_wifi" msgid="3277144155960302049">"Mobil surfzon"</string>
     <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Delning via Bluetooth"</string>
     <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Internetdelning"</string>
-    <string name="tether_settings_title_all" msgid="8356136101061143841">"Internetdelning och surfpunkt"</string>
+    <string name="tether_settings_title_all" msgid="8356136101061143841">"Internetdelning och surfzon"</string>
     <string name="managed_user_title" msgid="8109605045406748842">"Alla jobbappar"</string>
     <string name="user_guest" msgid="8475274842845401871">"Gäst"</string>
     <string name="unknown" msgid="1592123443519355854">"Okänd"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Tillåt alltid sökning efter Wi-Fi-roaming"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobildata alltid aktiverad"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Maskinvaruacceleration för internetdelning"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Visa namnlösa Bluetooth-enheter"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Inaktivera Absolute volume"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Aktivera samtal inom nätverket"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"AVRCP-version för Bluetooth"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifiera appar via USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kontrollera om appar som installeras via ADB/ADT kan vara skadliga."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth-enheter utan namn (enbart MAC-adresser) visas"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Inaktivera Bluetooth-funktionen Absolute volume om det skulle uppstå problem med volymen på fjärrenheter, t.ex. alldeles för hög volym eller brist på kontroll."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Tillåt att ringsignaler på mobilen kan spelas upp i Bluetooth-headset"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Lokal terminal"</string>
@@ -259,7 +267,7 @@
     <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Visningar blinkar i fönster vid GPU-ritningar"</string>
     <string name="show_hw_layers_updates" msgid="5645728765605699821">"Visa maskinvaruskiktuppd."</string>
     <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Låt maskinvaruskikt blinka grönt vid uppdateringar"</string>
-    <string name="debug_hw_overdraw" msgid="2968692419951565417">"Felsök överskriden GPU"</string>
+    <string name="debug_hw_overdraw" msgid="2968692419951565417">"Felsök GPU-överritning"</string>
     <string name="debug_hw_renderer" msgid="7568529019431785816">"Ange GPU-renderare"</string>
     <string name="disable_overlays" msgid="2074488440505934665">"Inaktivera HW-överlagringar"</string>
     <string name="disable_overlays_summary" msgid="3578941133710758592">"Använd alltid GPU för skärmsammansättning"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> kvar"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> tills det är fulladdat"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Okänd"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Laddar"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"laddas"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Laddar inte"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Laddar inte"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Inkopplad, kan inte laddas just nu"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Fullt"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Strys av administratören"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Aktiverad av administratör"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Anpassad (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Hjälp och feedback"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Meny"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Ange lösenord och utför fabriksåterställning i demoläge"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Nästa"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Lösenord krävs"</string>
diff --git a/packages/SettingsLib/res/values-sw/arrays.xml b/packages/SettingsLib/res/values-sw/arrays.xml
index 7055368..b694687 100644
--- a/packages/SettingsLib/res/values-sw/arrays.xml
+++ b/packages/SettingsLib/res/values-sw/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Chaguo-msingi)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Sauti ya <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Sauti ya <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Washa Kodeki Zisizo za Lazima"</item>
+    <item msgid="3304843301758635896">"Zima Kodeki Zisizo za Lazima"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Sauti ya <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Sauti ya <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Washa Kodeki Zisizo za Lazima"</item>
+    <item msgid="741805482892725657">"Zima Kodeki Zisizo za Lazima"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
     <item msgid="8895532488906185219">"kHz 44.1"</item>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index e1fc468..d742082 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Imeunganishwa kupitia %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Inapatikana kupitia %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Imeunganishwa, hakuna Intaneti"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Lango la mtandao lina shughuli nyingi kwa sasa"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Imeunganishwa kupitia %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Inapatikana kupitia %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Polepole Sana"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Polepole"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Sawa"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Wastani"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Haraka"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Haraka Sana"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Haijaunganishwa"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Inatenganisha..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Inaunganisha…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Vipima mtandao viwili vya Wifi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Vipima mtandao vitatu vya Wifi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Nguvu kamili ya mtandao wa Wifi."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Mtandao unaotumiwa na mtu yeyote"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Mtandao salama"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"OS ya Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Programu zilizoondolewa"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Watumiaji na programu ziilizoondolewa"</string>
@@ -116,7 +122,7 @@
     <string name="launch_defaults_some" msgid="313159469856372621">"Baadhi ya chaguo-msingi zimewekwa"</string>
     <string name="launch_defaults_none" msgid="4241129108140034876">"Hakuna chaguo-misingi zilizowekwa"</string>
     <string name="tts_settings" msgid="8186971894801348327">"Mipangilio ya kusoma maandishi kwa sauti"</string>
-    <string name="tts_settings_title" msgid="1237820681016639683">"Kipengele cha kusoma maandishi kwa sauti"</string>
+    <string name="tts_settings_title" msgid="1237820681016639683">"Kusoma maandishi kwa sauti"</string>
     <string name="tts_default_rate_title" msgid="6030550998379310088">"Kasi ya kutamka"</string>
     <string name="tts_default_rate_summary" msgid="4061815292287182801">"Kasi ya kutamkwa kwa maneno"</string>
     <string name="tts_default_pitch_title" msgid="6135942113172488671">"Uzito wa sauti"</string>
@@ -187,8 +193,9 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Ruhusu Uchanganuzi wa Matumizi ya Mitandao mingine"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Iendelee kutumia data ya simu"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Kuongeza kasi kwa kutumia maunzi ili kusambaza mtandao"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Onyesha vifaa vya Bluetooth visivyo na majina"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Zima sauti kamili"</string>
-    <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Washa kipengele cha mlio wa simu katika kituo hicho hicho"</string>
+    <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Washa uchezaji wa mlio unaotumika kwenye simu"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Toleo la Bluetooth AVRCP"</string>
     <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Chagua Toleo la Bluetooth AVRCP"</string>
     <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Kodeki ya Sauti ya Bluetooth"</string>
@@ -226,8 +233,9 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Mipangilio hii imekusudiwa kwa matumizi ya usanidi tu. Inaweza kusababisha kifaa chako na programu zilizoko kuvunjika au kutofanya kazi vizuri."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Thibitisha programu kupitia USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kagua programu zilizosakinishwa kupitia ADB/ADT kwa tabia ya kudhuru."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Itaonyesha vifaa vya Bluetooth bila majina (anwani za MAC pekee)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Huzima kipengele cha Bluetooth cha sauti kamili kunapotokea matatizo ya sauti katika vifaa vya mbali kama vile sauti ya juu mno au inaposhindikana kuidhibiti."</string>
-    <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Ruhusu milio ya simu kwenye simu ichezwe kwenye Vifaa vya sauti vya Bluetooth"</string>
+    <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Ruhusu bluetooth icheze milio iliyo kwenye simu"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Kituo cha karibu"</string>
     <string name="enable_terminal_summary" msgid="67667852659359206">"Washa programu ya mwisho inayotoa ufikiaji mkuu wa karibu"</string>
     <string name="hdcp_checking_title" msgid="8605478913544273282">"Inakagua HDCP"</string>
@@ -297,7 +305,7 @@
     <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Ruhusu uwezo wa kutumia madirisha ya majaribio yenye muundo huru."</string>
     <string name="local_backup_password_title" msgid="3860471654439418822">"Nenosiri la hifadhi rudufu ya eneo kazi"</string>
     <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Hifadhi rudufu kamili za eneo kazi hazijalindwa kwa sasa"</string>
-    <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Gonga ili ubadilishe au uondoe nenosiri la hifadhi rudufu kamili za eneo kazi"</string>
+    <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Gusa ili ubadilishe au uondoe nenosiri la hifadhi rudufu kamili za eneo kazi"</string>
     <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nenosiri jipya la hifadhi rudufu limewekwa"</string>
     <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Nenosiri jipya na uthibitisho havioani"</string>
     <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Imeshindwa kuweka nenosiri la hifadhi rudufu"</string>
@@ -312,8 +320,8 @@
     <item msgid="5363960654009010371">"Rangi zilizoboreshwa kwa ajili ya maudhui dijitali"</item>
   </string-array>
     <string name="inactive_apps_title" msgid="1317817863508274533">"Programu zilizozimwa"</string>
-    <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"Haitumika. Gonga ili ugeuze."</string>
-    <string name="inactive_app_active_summary" msgid="4174921824958516106">"Inatumika. Gonga ili ugeuze."</string>
+    <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"Haitumika. Gusa ili ugeuze."</string>
+    <string name="inactive_app_active_summary" msgid="4174921824958516106">"Inatumika. Gusa ili ugeuze."</string>
     <string name="runningservices_settings_title" msgid="8097287939865165213">"Huduma zinazoendeshwa"</string>
     <string name="runningservices_settings_summary" msgid="854608995821032748">"Onyesha na dhibiti huduma zinazoendeshwa kwa sasa"</string>
     <string name="select_webview_provider_title" msgid="4628592979751918907">"Utekelezaji wa WebView"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"Imechaji <xliff:g id="LEVEL">^1</xliff:g> - Zimesalia <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> hadi ijae chaji"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Haijulikani"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Inachaji"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"inachaji"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Haichaji"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Haichaji"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Haiwezi kuchaji kwa sasa"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Imejaa"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Imedhibitiwa na msimamizi"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Imewashwa na msimamizi"</string>
@@ -358,7 +365,7 @@
     <string name="disabled" msgid="9206776641295849915">"Imezimwa"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"Imeruhusiwa"</string>
     <string name="external_source_untrusted" msgid="2677442511837596726">"Hairuhusiwi"</string>
-    <string name="install_other_apps" msgid="6986686991775883017">"Sakinisha programu ambazo hazijulikani"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"Kuweka programu zisizojulikana"</string>
     <string name="home" msgid="3256884684164448244">"Ukurasa wa Kwanza wa Mipangilio"</string>
   <string-array name="battery_labels">
     <item msgid="8494684293649631252">"0%"</item>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Kiwango maalum (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Usaidizi na maoni"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menyu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Weka nenosiri ili urejeshe mipangilio ya kiwandani ikiwa katika hali ya onyesho."</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Inayofuata"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Nenosiri linahitajika"</string>
diff --git a/packages/SettingsLib/res/values-ta/arrays.xml b/packages/SettingsLib/res/values-ta/arrays.xml
index 9be5384..2d75c01 100644
--- a/packages/SettingsLib/res/values-ta/arrays.xml
+++ b/packages/SettingsLib/res/values-ta/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (இயல்பு)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"சாதனத் தேர்வைப் பயன்படுத்து (இயல்பு)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ஆடியோ"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ஆடியோ"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"கட்டாயமில்லா கோடெக்குகளை இயக்கு"</item>
+    <item msgid="3304843301758635896">"கட்டாயமில்லா கோடெக்குகளை முடக்கு"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"சாதனத் தேர்வைப் பயன்படுத்து (இயல்பு)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ஆடியோ"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ஆடியோ"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"கட்டாயமில்லா கோடெக்குகளை இயக்கு"</item>
+    <item msgid="741805482892725657">"கட்டாயமில்லா கோடெக்குகளை முடக்கு"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"சாதனத் தேர்வைப் பயன்படுத்து (இயல்பு)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index b16a29c..75420bd 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s வழியாக இணைக்கப்பட்டது"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s வழியாகக் கிடைக்கிறது"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"இணைக்கப்பட்டது, இணையம் இல்லை"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"தற்காலிகமாக அணுகல் புள்ளி நிரம்பியுள்ளது"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s வழியாக இணைக்கப்பட்டது"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s வழியாகக் கிடைக்கிறது"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"மிகவும் வேகம் குறைவானது"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"வேகம் குறைவு"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"சரி"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"நடுத்தரம்"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"வேகம்"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"மிகவும் வேகமானது"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"தொடர்பு துண்டிக்கப்பட்டது"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"துண்டிக்கிறது..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"இணைக்கிறது..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"வைஃபை சிக்னல்: இரண்டு கோடுகள்."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"வைஃபை சிக்னல்: மூன்று கோடுகள்."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"வைஃபை சிக்னல் முழுமையாக உள்ளது."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"கடவுச்சொல் தேவைப்படாத திறந்த நெட்வொர்க்"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"கடவுச்சொல் தேவைப்படும் பாதுகாப்பான நெட்வொர்க்"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"அகற்றப்பட்ட பயன்பாடுகள்"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"அகற்றப்பட்ட பயன்பாடுகள் மற்றும் பயனர்கள்"</string>
@@ -110,7 +116,7 @@
     <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"டெதெரிங்"</string>
     <string name="tether_settings_title_all" msgid="8356136101061143841">"டெதெரிங் &amp; போர்டபிள் ஹாட்ஸ்பாட்"</string>
     <string name="managed_user_title" msgid="8109605045406748842">"எல்லா பணிப் பயன்பாடுகளும்"</string>
-    <string name="user_guest" msgid="8475274842845401871">"கெஸ்ட்"</string>
+    <string name="user_guest" msgid="8475274842845401871">"வேறொருவர்"</string>
     <string name="unknown" msgid="1592123443519355854">"அறியப்படாத"</string>
     <string name="running_process_item_user_label" msgid="3129887865552025943">"பயனர்: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="launch_defaults_some" msgid="313159469856372621">"சில இயல்புநிலைகள் அமைக்கப்பட்டன"</string>
@@ -185,8 +191,9 @@
     <string name="wifi_verbose_logging" msgid="4203729756047242344">"வைஃபை அதிவிவர நுழைவை இயக்கு"</string>
     <string name="wifi_aggressive_handover" msgid="5309131983693661320">"ஒத்துழைக்காத வைஃபையிலிருந்து மொபைல் தரவிற்கு மாறு"</string>
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"எப்போதும் வைஃபை ரோமிங் ஸ்கேன்களை அனுமதி"</string>
-    <string name="mobile_data_always_on" msgid="8774857027458200434">"மொபைல் தரவை எப்போதும் இயக்கத்திலேயே வை"</string>
+    <string name="mobile_data_always_on" msgid="8774857027458200434">"மொபைல் டேட்டாவை எப்போதும் இயக்கத்திலேயே வை"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"வன்பொருள் விரைவுப்படுத்துதல் இணைப்பு முறை"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"பெயர்கள் இல்லாத புளூடூத் சாதனங்களைக் காட்டு"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"அப்சல்யூட் ஒலியளவு அம்சத்தை முடக்கு"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"இன்-பேண்ட் ரிங் செய்வதை இயக்கு"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"புளூடூத் AVRCP பதிப்பு"</string>
@@ -217,7 +224,7 @@
     <string name="allow_mock_location" msgid="2787962564578664888">"போலி இருப்பிடங்களை அனுமதி"</string>
     <string name="allow_mock_location_summary" msgid="317615105156345626">"போலி இருப்பிடங்களை அனுமதி"</string>
     <string name="debug_view_attributes" msgid="6485448367803310384">"காட்சி பண்புக்கூறு சோதனையை இயக்கு"</string>
-    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"வைஃபை இயங்கும் போதும் (வேகமான நெட்வொர்க் மாற்றத்திற்கு), மொபைல் தரவை எப்போதும் இயக்கத்தில் வைக்கும்."</string>
+    <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"வைஃபை இயங்கும் போதும் (வேகமான நெட்வொர்க் மாற்றத்திற்கு), மொபைல் டேட்டாவை எப்போதும் இயக்கத்தில் வைக்கும்."</string>
     <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"வன்பொருள் விரைவுப்படுத்துதல் இணைப்பு முறை கிடைக்கும் போது, அதைப் பயன்படுத்தும்"</string>
     <string name="adb_warning_title" msgid="6234463310896563253">"USB பிழைத்திருத்தத்தை அனுமதிக்கவா?"</string>
     <string name="adb_warning_message" msgid="7316799925425402244">"USB பிழைத்திருத்தம் மேம்படுத்தல் நோக்கங்களுக்காக மட்டுமே. அதை உங்கள் கணினி மற்றும் சாதனத்திற்கு இடையில் தரவை நகலெடுக்கவும், அறிவிப்பு இல்லாமல் உங்கள் சாதனத்தில் பயன்பாடுகளை நிறுவவும், பதிவு தரவைப் படிக்கவும் பயன்படுத்தவும்."</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"இந்த அமைப்பு மேம்பட்டப் பயன்பாட்டிற்காக மட்டுமே. உங்கள் சாதனம் மற்றும் அதில் உள்ள பயன்பாடுகளைச் சிதைக்கும் அல்லது தவறாகச் செயல்படும் வகையில் பாதிப்பை ஏற்படுத்தும்."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB பயன்பாடுகளை சரிபார்"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"தீங்கு விளைவிக்கும் செயல்பாட்டை அறிய ADB/ADT மூலம் நிறுவப்பட்டப் பயன்பாடுகளைச் சரிபார்."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"பெயர்கள் இல்லாத புளூடூத் சாதனங்கள் (MAC முகவரிகள் மட்டும்) காட்டப்படும்"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"மிகவும் அதிகமான ஒலியளவு அல்லது கட்டுப்பாடு இழப்பு போன்ற தொலைநிலைச் சாதனங்களில் ஏற்படும் ஒலி தொடர்பான சிக்கல்கள் இருக்கும் சமயங்களில், புளூடூத் அப்சல்யூட் ஒலியளவு அம்சத்தை முடக்கும்."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"ஃபோனில் இருக்கும் ரிங்டோன்களை, புளூடூத் ஹெட்செட்களில் இயக்க அனுமதி"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"அக முனையம்"</string>
@@ -281,7 +289,7 @@
     <string name="transition_animation_scale_title" msgid="387527540523595875">"அனிமேஷன் மாற்றத்தின் அளவு"</string>
     <string name="animator_duration_scale_title" msgid="3406722410819934083">"அனிமேட்டர் கால அளவு"</string>
     <string name="overlay_display_devices_title" msgid="5364176287998398539">"இரண்டாம்நிலைக் காட்சிகளை உருவகப்படுத்து"</string>
-    <string name="debug_applications_category" msgid="4206913653849771549">"பயன்பாடுகள்"</string>
+    <string name="debug_applications_category" msgid="4206913653849771549">"ஆப்ஸ்"</string>
     <string name="immediately_destroy_activities" msgid="1579659389568133959">"செயல்பாடுகளை வைத்திருக்காதே"</string>
     <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"பயனர் வெளியேறியதும் செயல்பாடுகளை நீக்கு"</string>
     <string name="app_process_limit_title" msgid="4280600650253107163">"பின்புலச் செயல்முறை வரம்பு"</string>
@@ -345,20 +353,19 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> மீதமுள்ளது"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - முழு சார்ஜாக <xliff:g id="TIME">^2</xliff:g> ஆகும்"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"அறியப்படாத"</string>
-    <string name="battery_info_status_charging" msgid="1705179948350365604">"சார்ஜ் ஏற்றப்படுகிறது"</string>
-    <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"சார்ஜாகிறது"</string>
+    <string name="battery_info_status_charging" msgid="1705179948350365604">"சார்ஜ் ஆகிறது"</string>
+    <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"சார்ஜ் ஆகிறது"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"சார்ஜ் செய்யப்படவில்லை"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"சார்ஜ் ஏறவில்லை"</string>
-    <string name="battery_info_status_full" msgid="2824614753861462808">"முழுமை"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"செருகப்பட்டது, ஆனால் இப்போது சார்ஜ் செய்ய முடியவில்லை"</string>
+    <string name="battery_info_status_full" msgid="2824614753861462808">"முழுவதும் சார்ஜ் ஆனது"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"நிர்வாகி கட்டுப்படுத்துகிறார்"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"நிர்வாகி இயக்கியுள்ளார்"</string>
     <string name="disabled_by_admin" msgid="8505398946020816620">"நிர்வாகி முடக்கியுள்ளார்"</string>
     <string name="disabled" msgid="9206776641295849915">"முடக்கப்பட்டது"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"அனுமதிக்கப்பட்டது"</string>
     <string name="external_source_untrusted" msgid="2677442511837596726">"அனுமதிக்கப்படவில்லை"</string>
-    <string name="install_other_apps" msgid="6986686991775883017">"அறியப்படாத பயன்பாடுகளை நிறுவு"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"நிறுவுதல் (அறியாதவை)"</string>
     <string name="home" msgid="3256884684164448244">"அமைப்புகள் முகப்பு"</string>
   <string-array name="battery_labels">
     <item msgid="8494684293649631252">"0%"</item>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"தனிப்பயன் (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"உதவி &amp; கருத்து"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"மெனு"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"டெமோ பயன்முறையில் ஆரம்பநிலை மீட்டமைவைச் செயல்படுத்த, கடவுச்சொல்லை உள்ளிடவும்"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"அடுத்து"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"கடவுச்சொல் தேவை"</string>
diff --git a/packages/SettingsLib/res/values-te/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml
index 7061ff1..39d84dd 100644
--- a/packages/SettingsLib/res/values-te/arrays.xml
+++ b/packages/SettingsLib/res/values-te/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (డిఫాల్ట్)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"సిస్టమ్ ఎంపికను ఉపయోగించండి (డిఫాల్ట్)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ఆడియో"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ఆడియో"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"ఐచ్ఛిక కోడెక్‌లను ప్రారంభించు"</item>
+    <item msgid="3304843301758635896">"ఐచ్ఛిక కోడెక్‌లను నిలిపివేయి"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"సిస్టమ్ ఎంపికను ఉపయోగించండి (డిఫాల్ట్)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ఆడియో"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ఆడియో"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"ఐచ్ఛిక కోడెక్‌లను ప్రారంభించు"</item>
+    <item msgid="741805482892725657">"ఐచ్ఛిక కోడెక్‌లను నిలిపివేయి"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"సిస్టమ్ ఎంపికను ఉపయోగించండి (డిఫాల్ట్)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index 921af68..23a98c2 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -33,19 +33,23 @@
     <string name="wifi_check_password_try_again" msgid="516958988102584767">"పాస్‌వర్డ్‌ను తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"పరిధిలో లేదు"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"స్వయంచాలకంగా కనెక్ట్ కాదు"</string>
-    <string name="wifi_no_internet" msgid="3880396223819116454">"ఇంటర్నెట్ ప్రాప్యత లేదు"</string>
+    <string name="wifi_no_internet" msgid="3880396223819116454">"ఇంటర్నెట్ యాక్సెస్ లేదు"</string>
     <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> ద్వారా సేవ్ చేయబడింది"</string>
     <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s ద్వారా స్వయంచాలకంగా కనెక్ట్ చేయబడింది"</string>
     <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"నెట్‌వర్క్ రేటింగ్ ప్రదాత ద్వారా స్వయంచాలకంగా కనెక్ట్ చేయబడింది"</string>
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ద్వారా కనెక్ట్ చేయబడింది"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ద్వారా అందుబాటులో ఉంది"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"కనెక్ట్ చేయబడింది, ఇంటర్నెట్ లేదు"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"యాక్సెస్ పాయింట్ తాత్కాలికంగా నిండుకుంది"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ద్వారా కనెక్ట్ చేయబడింది"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s ద్వారా అందుబాటులో ఉంది"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"చాలా నెమ్మది"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"నెమ్మది"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"సరే"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"మధ్యస్థం"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"వేగవంతం"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"చాలా వేగవంతం"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"డిస్‌కనెక్ట్ చేయబడింది"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"డిస్‌కనెక్ట్ చేస్తోంది..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"కనెక్ట్ చేస్తోంది..."</string>
@@ -53,7 +57,7 @@
     <string name="bluetooth_pairing" msgid="1426882272690346242">"జత చేస్తోంది..."</string>
     <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"కనెక్ట్ చేయబడింది (ఫోన్‌ కాదు)"</string>
     <string name="bluetooth_connected_no_a2dp" msgid="4576188601581440337">"కనెక్ట్ చేయబడింది (మీడియా కాదు)"</string>
-    <string name="bluetooth_connected_no_map" msgid="6504436917057479986">"కనెక్ట్ చేయబడింది (సందేశ ప్రాప్యత లేదు)"</string>
+    <string name="bluetooth_connected_no_map" msgid="6504436917057479986">"కనెక్ట్ చేయబడింది (సందేశ యాక్సెస్ లేదు)"</string>
     <string name="bluetooth_connected_no_headset_no_a2dp" msgid="9195757766755553810">"కనెక్ట్ చేయబడింది (ఫోన్ లేదా మీడియా కాకుండా)"</string>
     <string name="bluetooth_connected_battery_level" msgid="7049181126136692368">"కనెక్ట్ చేయబడింది, బ్యాటరీ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_headset_battery_level" msgid="5504193961248406027">"కనెక్ట్ చేయబడింది (ఫోన్ కాదు), బ్యాటరీ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
@@ -63,12 +67,12 @@
     <string name="bluetooth_profile_headset" msgid="7815495680863246034">"ఫోన్ కాల్‌లు"</string>
     <string name="bluetooth_profile_opp" msgid="9168139293654233697">"ఫైల్ బదిలీ"</string>
     <string name="bluetooth_profile_hid" msgid="3680729023366986480">"ఇన్‌పుట్ పరికరం"</string>
-    <string name="bluetooth_profile_pan" msgid="3391606497945147673">"ఇంటర్నెట్ ప్రాప్యత"</string>
+    <string name="bluetooth_profile_pan" msgid="3391606497945147673">"ఇంటర్నెట్ యాక్సెస్"</string>
     <string name="bluetooth_profile_pbap" msgid="5372051906968576809">"పరిచయ భాగస్వామ్యం"</string>
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"పరిచయ భాగస్వామ్యం కోసం ఉపయోగించు"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ఇంటర్నెట్ కనెక్షన్ భాగస్వామ్యం"</string>
     <string name="bluetooth_profile_map" msgid="1019763341565580450">"వచన సందేశాలు"</string>
-    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM ప్రాప్యత"</string>
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM యాక్సెస్"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="5444517801472820055">"HD ఆడియో: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="8510588052415438887">"HD ఆడియో"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"మీడియా ఆడియోకు కనెక్ట్ చేయబడింది"</string>
@@ -78,11 +82,11 @@
     <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAPకి కనెక్ట్ చేయబడింది"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ఫైల్ బదిలీ సర్వర్‌కు కనెక్ట్ చేయబడలేదు"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ఇన్‌పుట్ పరికరానికి కనెక్ట్ చేయబడింది"</string>
-    <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"ఇంటర్నెట్ ప్రాప్యత కోసం పరికరానికి కనెక్ట్ చేయబడింది"</string>
+    <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"ఇంటర్నెట్ యాక్సెస్ కోసం పరికరానికి కనెక్ట్ చేయబడింది"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"స్థానిక ఇంటర్నెట్ కనెక్షన్‌ను పరికరంతో భాగస్వామ్యం చేయడం"</string>
-    <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ఇంటర్నెట్ ప్రాప్యత కోసం ఉపయోగించు"</string>
+    <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ఇంటర్నెట్ యాక్సెస్ కోసం ఉపయోగించు"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"మ్యాప్ కోసం ఉపయోగించు"</string>
-    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM ప్రాప్యత కోసం ఉపయోగించబడుతుంది"</string>
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM యాక్సెస్ కోసం ఉపయోగించబడుతుంది"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"మీడియా ఆడియో కోసం ఉపయోగించు"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ఫోన్ ఆడియో కోసం ఉపయోగించు"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ఫైల్ బదిలీ కోసం ఉపయోగించు"</string>
@@ -92,7 +96,7 @@
     <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"రద్దు చేయి"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"జత చేయడం వలన కనెక్ట్ చేయబడినప్పుడు మీ పరిచయాలకు మరియు కాల్ చరిత్రకు ప్రాప్యతను మంజూరు చేస్తుంది."</string>
     <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో జత చేయడం సాధ్యపడలేదు."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"పిన్‌ లేదా పాస్‌కీ చెల్లని కారణంగా <xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో జత చేయడం సాధ్యపడలేదు."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"పిన్ లేదా పాస్‌కీ చెల్లని కారణంగా <xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో జత చేయడం సాధ్యపడలేదు."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో కమ్యూనికేట్ చేయడం సాధ్యపడదు."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> జత చేయడాన్ని తిరస్కరించింది."</string>
     <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wifi ఆఫ్‌లో ఉంది."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi సిగ్నల్ రెండు బార్‌లు ఉంది."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi సిగ్నల్ మూడు బార్‌లు ఉంది."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi సిగ్నల్ పూర్తిగా ఉంది."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"ఓపెన్ నెట్‌వర్క్"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"సురక్షిత నెట్‌వర్క్"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"తీసివేయబడిన అనువర్తనాలు"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"తీసివేయబడిన అనువర్తనాలు మరియు వినియోగదారులు"</string>
@@ -163,11 +169,11 @@
     <string name="development_settings_not_available" msgid="4308569041701535607">"ఈ వినియోగదారు కోసం డెవలపర్ ఎంపికలు అందుబాటులో లేవు"</string>
     <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN సెట్టింగ్‌లు ఈ వినియోగదారుకి అందుబాటులో లేవు"</string>
     <string name="tethering_settings_not_available" msgid="6765770438438291012">"టీథరింగ్ సెట్టింగ్‌లు ఈ వినియోగదారుకి అందుబాటులో లేవు"</string>
-    <string name="apn_settings_not_available" msgid="7873729032165324000">"ప్రాప్యత స్థానం పేరు సెట్టింగ్‌లు ఈ వినియోగదారుకి అందుబాటులో లేవు"</string>
+    <string name="apn_settings_not_available" msgid="7873729032165324000">"యాక్సెస్ స్థానం పేరు సెట్టింగ్‌లు ఈ వినియోగదారుకి అందుబాటులో లేవు"</string>
     <string name="enable_adb" msgid="7982306934419797485">"USB డీబగ్గింగ్"</string>
     <string name="enable_adb_summary" msgid="4881186971746056635">"USB కనెక్ట్ చేయబడినప్పుడు డీబగ్ మోడ్"</string>
     <string name="clear_adb_keys" msgid="4038889221503122743">"USB డీబగ్ ప్రామాణీకరణలను ఉపసంహరించు"</string>
-    <string name="bugreport_in_power" msgid="7923901846375587241">"బగ్ నివేదిక సత్వరమార్గం"</string>
+    <string name="bugreport_in_power" msgid="7923901846375587241">"బగ్ నివేదిక షార్ట్‌కట్"</string>
     <string name="bugreport_in_power_summary" msgid="1778455732762984579">"బగ్ నివేదికను తీసుకోవడానికి పవర్ మెనులో బటన్‌ను చూపు"</string>
     <string name="keep_screen_on" msgid="1146389631208760344">"సక్రియంగా ఉంచు"</string>
     <string name="keep_screen_on_summary" msgid="2173114350754293009">"ఛార్జ్ చేస్తున్నప్పుడు స్క్రీన్ ఎప్పటికీ నిద్రావస్థలోకి వెళ్లదు"</string>
@@ -178,18 +184,19 @@
     <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM అన్‌లాకింగ్‌ను అనుమతించాలా?"</string>
     <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"హెచ్చరిక: ఈ సెట్టింగ్ ఆన్ చేయబడినప్పుడు పరికరం రక్షణ లక్షణాలు ఈ పరికరంలో పని చేయవు."</string>
     <string name="mock_location_app" msgid="7966220972812881854">"అనుకృత స్థాన అనువర్తనాన్ని ఎంచుకోండి"</string>
-    <string name="mock_location_app_not_set" msgid="809543285495344223">"అనుకృత స్థాన అనువర్తనం ఏదీ సెట్ చేయబడలేదు"</string>
-    <string name="mock_location_app_set" msgid="8966420655295102685">"అనుకృత స్థాన అనువర్తనం: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="mock_location_app_not_set" msgid="809543285495344223">"అనుకృత స్థాన యాప్ ఏదీ సెట్ చేయబడలేదు"</string>
+    <string name="mock_location_app_set" msgid="8966420655295102685">"అనుకృత స్థాన యాప్: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="7044075693643009662">"నెట్‌వర్కింగ్"</string>
     <string name="wifi_display_certification" msgid="8611569543791307533">"వైర్‌లెస్ ప్రదర్శన ప్రమాణీకరణ"</string>
     <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi విశదీకృత లాగింగ్‌ను ప్రారంభించండి"</string>
     <string name="wifi_aggressive_handover" msgid="5309131983693661320">"మొబైల్‌కి మార్చేలా చురుకైన Wi‑Fi"</string>
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi సంచార స్కాన్‌లను ఎల్లప్పుడూ అనుమతించు"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"మొబైల్ డేటాని ఎల్లప్పుడూ సక్రియంగా ఉంచు"</string>
-    <string name="tethering_hardware_offload" msgid="7470077827090325814">"టీథెరింగ్ హార్డ్‌వేర్ వేగవృద్ధి"</string>
+    <string name="tethering_hardware_offload" msgid="7470077827090325814">"టెథెరింగ్ హార్డ్‌వేర్ వేగవృద్ధి"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"పేర్లు లేని బ్లూటూత్ పరికరాలు  చూపించు"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"సంపూర్ణ వాల్యూమ్‌‍ను నిలిపివేయి"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"ఇన్-బ్యాండ్ రింగింగ్‌ని ప్రారంభించండి"</string>
-    <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"బ్లూటూత్ AVRCP సంస్కరణ"</string>
+    <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"బ్లూటూత్ AVRCP వెర్షన్"</string>
     <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"బ్లూటూత్ AVRCP సంస్కరణను ఎంచుకోండి"</string>
     <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"బ్లూటూత్ ఆడియో కోడెక్"</string>
     <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="4558347981670553665">"బ్లూటూత్ ఆడియో కోడెక్‌ని ఎంచుకోండి"</string>
@@ -202,7 +209,7 @@
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"బ్లూటూత్ ఆడియో LDAC కోడెక్: ప్లేబ్యాక్ నాణ్యత"</string>
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3181967377574368400">"బ్లూటూత్ ఆడియో LDAC కోడెక్‌ని ఎంచుకోండి:\nప్లేబ్యాక్ నాణ్యత"</string>
     <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"ప్రసారం చేస్తోంది: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
-    <string name="wifi_display_certification_summary" msgid="1155182309166746973">"వైర్‌లెస్ ప్రదర్శన ప్రమాణపత్రం కోసం ఎంపికలను చూపు"</string>
+    <string name="wifi_display_certification_summary" msgid="1155182309166746973">"వైర్‌లెస్ ప్రదర్శన సర్టిఫికెట్ కోసం ఎంపికలను చూపు"</string>
     <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ఎంపికలో SSID RSSI ప్రకారం చూపబడే Wi‑Fi లాగింగ్ స్థాయిని పెంచండి"</string>
     <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"ప్రారంభించబడినప్పుడు, Wi‑Fi సిగ్నల్ బలహీనంగా ఉంటే డేటా కనెక్షన్‌ను మొబైల్‌కి మార్చేలా Wi‑Fi చురుగ్గా వ్యవహరిస్తుంది"</string>
     <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"ఇంటర్‌ఫేస్‌లో ఉండే డేటా ట్రాఫిక్ పరిమాణం ఆధారంగా Wi‑Fi సంచార స్కాన్‌లను అనుమతించు/నిరాకరించు"</string>
@@ -218,14 +225,15 @@
     <string name="allow_mock_location_summary" msgid="317615105156345626">"అనుకృత స్థానాలను అనుమతించు"</string>
     <string name="debug_view_attributes" msgid="6485448367803310384">"వీక్షణ లక్షణ పర్యవేక్షణను ప్రారంభించు"</string>
     <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"ఎల్లప్పుడూ మొబైల్ డేటాను సక్రియంగా ఉంచు, Wi‑Fi సక్రియంగా ఉన్నా కూడా (వేగవంతమైన నెట్‌వర్క్ మార్పు కోసం)."</string>
-    <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"అందుబాటులో ఉంటే టీథెరింగ్ హార్డ్‌వేర్ వేగవృద్ధిని ఉపయోగించండి"</string>
+    <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"అందుబాటులో ఉంటే టెథెరింగ్ హార్డ్‌వేర్ వేగవృద్ధిని ఉపయోగించండి"</string>
     <string name="adb_warning_title" msgid="6234463310896563253">"USB డీబగ్గింగ్‌ను అనుమతించాలా?"</string>
     <string name="adb_warning_message" msgid="7316799925425402244">"USB డీబగ్గింగ్ అనేది అభివృద్ధి ప్రయోజనాల కోసం మాత్రమే ఉద్దేశించబడింది. మీ కంప్యూటర్ మరియు మీ పరికరం మధ్య డేటాను కాపీ చేయడానికి, నోటిఫికేషన్ లేకుండా మీ పరికరంలో అనువర్తనాలను ఇన్‌స్టాల్ చేయడానికి మరియు లాగ్ డేటాను చదవడానికి దీన్ని ఉపయోగించండి."</string>
     <string name="adb_keys_warning_message" msgid="5659849457135841625">"మీరు గతంలో ప్రామాణీకరించిన అన్ని కంప్యూటర్‌ల నుండి USB డీబగ్గింగ్‌కు ప్రాప్యతను ఉపసంహరించాలా?"</string>
     <string name="dev_settings_warning_title" msgid="7244607768088540165">"అభివృద్ధి సెట్టింగ్‌లను అనుమతించాలా?"</string>
-    <string name="dev_settings_warning_message" msgid="2298337781139097964">"ఈ సెట్టింగ్‌లు అభివృద్ధి వినియోగం కోసం మాత్రమే ఉద్దేశించబడినవి. వీటి వలన మీ పరికరం మరియు దీనిలోని అనువర్తనాలు విచ్ఛిన్నం కావచ్చు లేదా తప్పుగా ప్రవర్తించవచ్చు."</string>
+    <string name="dev_settings_warning_message" msgid="2298337781139097964">"ఈ సెట్టింగ్‌లు అభివృద్ధి వినియోగం కోసం మాత్రమే ఉద్దేశించబడినవి. వీటి వలన మీ పరికరం మరియు దీనిలోని యాప్‌లు విచ్ఛిన్నం కావచ్చు లేదా తప్పుగా ప్రవర్తించవచ్చు."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB ద్వారా అనువర్తనాలను ధృవీకరించు"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"హానికరమైన ప్రవర్తన కోసం ADB/ADT ద్వారా ఇన్‌స్టాల్ చేయబడిన అనువర్తనాలను తనిఖీ చేయి."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"పేర్లు (MAC చిరునామాలు మాత్రమే) లేని బ్లూటూత్ పరికరాలు ప్రదర్శించబడతాయి"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"రిమోట్ పరికరాల్లో ఆమోదించలేని స్థాయిలో అధిక వాల్యూమ్ ఉండటం లేదా వాల్యూమ్ నియంత్రణ లేకపోవడం వంటి సమస్యలు ఉంటే బ్లూటూత్ సంపూర్ణ వాల్యూమ్ లక్షణాన్ని నిలిపివేస్తుంది."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"బ్లూటూత్ హెడ్‌సెట్‌లలో ప్లే చేయడానికి ఫోన్‌లో రింగ్‌టోన్‌లను అనుమతించండి"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"స్థానిక టెర్మినల్"</string>
@@ -234,12 +242,12 @@
     <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP తనిఖీ ప్రవర్తనను సెట్ చేయండి"</string>
     <string name="debug_debugging_category" msgid="6781250159513471316">"డీబగ్గింగ్"</string>
     <string name="debug_app" msgid="8349591734751384446">"డీబగ్ అనువర్తనాన్ని ఎంచుకోండి"</string>
-    <string name="debug_app_not_set" msgid="718752499586403499">"డీబగ్ అనువర్తనం సెట్ చేయబడలేదు"</string>
-    <string name="debug_app_set" msgid="2063077997870280017">"డీబగ్గింగ్ అనువర్తనం: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="debug_app_not_set" msgid="718752499586403499">"డీబగ్ యాప్ సెట్ చేయబడలేదు"</string>
+    <string name="debug_app_set" msgid="2063077997870280017">"డీబగ్గింగ్ యాప్: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="5156029161289091703">"అనువర్తనాన్ని ఎంచుకోండి"</string>
     <string name="no_application" msgid="2813387563129153880">"ఏదీ వద్దు"</string>
     <string name="wait_for_debugger" msgid="1202370874528893091">"డీబగ్గర్ కోసం వేచి ఉండండి"</string>
-    <string name="wait_for_debugger_summary" msgid="1766918303462746804">"డీబగ్ చేయబడిన అనువర్తనం అమలు కావడానికి ముందు జోడించాల్సిన డీబగ్గర్ కోసం వేచి ఉంటుంది"</string>
+    <string name="wait_for_debugger_summary" msgid="1766918303462746804">"డీబగ్ చేయబడిన యాప్ అమలు కావడానికి ముందు జోడించాల్సిన డీబగ్గర్ కోసం వేచి ఉంటుంది"</string>
     <string name="telephony_monitor_switch" msgid="1764958220062121194">"టెలిఫోనీ మానిటర్"</string>
     <string name="telephony_monitor_switch_summary" msgid="7695552966547975635">"టెలిఫోనీ/మోడెమ్ కార్యాచరణలో సమస్యను గుర్తించినప్పుడు TelephonyMonitor లాగ్‌లను సేకరిస్తుంది మరియు బగ్‌ని ఫైల్ చేయమని వినియోగదారును ప్రోత్సహిస్తుంది"</string>
     <string name="debug_input_category" msgid="1811069939601180246">"ఇన్‌పుట్"</string>
@@ -253,11 +261,11 @@
     <string name="pointer_location_summary" msgid="840819275172753713">"ప్రస్తుత స్పర్శ డేటాను చూపేలా స్క్రీన్ అతివ్యాప్తి చేయండి"</string>
     <string name="show_touches" msgid="2642976305235070316">"నొక్కినవి చూపు"</string>
     <string name="show_touches_summary" msgid="6101183132903926324">"నొక్కినవాటికి సంబంధించిన దృశ్య అభిప్రాయాన్ని చూపు"</string>
-    <string name="show_screen_updates" msgid="5470814345876056420">"సర్ఫేస్ నవీకరణలను చూపండి"</string>
+    <string name="show_screen_updates" msgid="5470814345876056420">"సర్ఫేస్ అప్‌డేట్‌లను చూపండి"</string>
     <string name="show_screen_updates_summary" msgid="2569622766672785529">"పూర్తి విండో ఉపరితలాలు నవీకరించబడినప్పుడు వాటిని ఫ్లాష్ చేయండి"</string>
-    <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU వీక్షణ నవీకరణలను చూపండి"</string>
+    <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU వీక్షణ అప్‌డేట్‌లను చూపండి"</string>
     <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPUతో గీసినప్పుడు విండోల లోపల వీక్షణలను ఫ్లాష్ చేయండి"</string>
-    <string name="show_hw_layers_updates" msgid="5645728765605699821">"హార్డ్‌వేర్ లేయర్‌ల నవీకరణలను చూపండి"</string>
+    <string name="show_hw_layers_updates" msgid="5645728765605699821">"హార్డ్‌వేర్ లేయర్‌ల అప్‌డేట్‌లను చూపండి"</string>
     <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"హార్డ్‌వేర్ లేయర్‌లు నవీకరించబడినప్పుడు వాటిని ఆకుపచ్చ రంగులో ఫ్లాష్ చేయండి"</string>
     <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ఓవర్‌డ్రాను డీబగ్ చేయండి"</string>
     <string name="debug_hw_renderer" msgid="7568529019431785816">"GPU Rendererని సెట్ చేయండి"</string>
@@ -281,14 +289,14 @@
     <string name="transition_animation_scale_title" msgid="387527540523595875">"పరివర్తన యానిమేషన్ ప్రమాణం"</string>
     <string name="animator_duration_scale_title" msgid="3406722410819934083">"యానిమేటర్ వ్యవధి ప్రమాణం"</string>
     <string name="overlay_display_devices_title" msgid="5364176287998398539">"ప్రత్యామ్నాయ ప్రదర్శనలను అనుకరించండి"</string>
-    <string name="debug_applications_category" msgid="4206913653849771549">"అనువర్తనాలు"</string>
+    <string name="debug_applications_category" msgid="4206913653849771549">"యాప్‌లు"</string>
     <string name="immediately_destroy_activities" msgid="1579659389568133959">"కార్యాచరణలను ఉంచవద్దు"</string>
     <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ప్రతి కార్యాచరణను వినియోగదారు నిష్క్రమించిన వెంటనే తొలగించండి"</string>
     <string name="app_process_limit_title" msgid="4280600650253107163">"నేపథ్య ప్రాసెస్ పరిమితి"</string>
     <string name="show_all_anrs" msgid="28462979638729082">"అన్ని ANRలను చూపు"</string>
-    <string name="show_all_anrs_summary" msgid="641908614413544127">"నేపథ్య అనువర్తనాల కోసం అనువర్తనం ప్రతిస్పందించడం లేదు డైలాగ్‌ను చూపు"</string>
+    <string name="show_all_anrs_summary" msgid="641908614413544127">"నేపథ్య యాప్‌ల కోసం యాప్ ప్రతిస్పందించడం లేదు డైలాగ్‌ను చూపు"</string>
     <string name="show_notification_channel_warnings" msgid="1399948193466922683">"ఛానెల్ హెచ్చరికల నోటిఫికేషన్‌‌ను చూపు"</string>
-    <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"చెల్లుబాటు అయ్యే ఛానెల్ లేకుండా అనువర్తనం నోటిఫికేషన్‌ను పోస్ట్ చేస్తున్నప్పుడు స్క్రీన్‌పై హెచ్చరికను చూపిస్తుంది"</string>
+    <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"చెల్లుబాటు అయ్యే ఛానెల్ లేకుండా యాప్ నోటిఫికేషన్‌ను పోస్ట్ చేస్తున్నప్పుడు స్క్రీన్‌పై హెచ్చరికను చూపిస్తుంది"</string>
     <string name="force_allow_on_external" msgid="3215759785081916381">"అనువర్తనాలను బాహ్య నిల్వలో నిర్బంధంగా అనుమతించు"</string>
     <string name="force_allow_on_external_summary" msgid="3640752408258034689">"ఏ అనువర్తనాన్ని అయినా మానిఫెస్ట్ విలువలతో సంబంధం లేకుండా బాహ్య నిల్వలో వ్రాయడానికి అనుమతిస్తుంది"</string>
     <string name="force_resizable_activities" msgid="8615764378147824985">"కార్యాచరణలను పరిమాణం మార్చగలిగేలా నిర్బంధించు"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> మిగిలి ఉంది"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>లో పూర్తిగా ఛార్జ్ అవుతుంది"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"తెలియదు"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"ఛార్జ్ అవుతోంది"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"ఛార్జ్ అవుతోంది"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"ఛార్జ్ కావడం లేదు"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ఛార్జ్ కావడం లేదు"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"ప్లగ్ ఇన్ చేయబడింది, ప్రస్తుతం ఛార్జ్ చేయడం సాధ్యం కాదు"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"నిండింది"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"నిర్వాహకుని ద్వారా నియంత్రించబడింది"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"నిర్వాహకులు ప్రారంభించారు"</string>
@@ -358,7 +365,7 @@
     <string name="disabled" msgid="9206776641295849915">"నిలిపివేయబడింది"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"అనుమతించినవి"</string>
     <string name="external_source_untrusted" msgid="2677442511837596726">"అనుమతించబడలేదు"</string>
-    <string name="install_other_apps" msgid="6986686991775883017">"తెలియని అనువర్తనాలను ఇన్‌స్టాల్ చేయండి"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"తెలియని యాప్‌లను ఇన్‌స్టాల్ చేయండి"</string>
     <string name="home" msgid="3256884684164448244">"సెట్టింగ్‌ల హోమ్"</string>
   <string-array name="battery_labels">
     <item msgid="8494684293649631252">"0%"</item>
@@ -375,13 +382,12 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"అనుకూలం (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"సహాయం &amp; అభిప్రాయం"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"మెను"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"డెమో మోడ్‌లో ఫ్యాక్టరీ రీసెట్‌ను నిర్వహించడానికి పాస్‌వర్డ్‌ను నమోదు చేయండి"</string>
-    <string name="retail_demo_reset_next" msgid="8356731459226304963">"తదుపరి"</string>
+    <string name="retail_demo_reset_next" msgid="8356731459226304963">"తర్వాత"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"పాస్‌వర్డ్ అవసరం"</string>
     <string name="active_input_method_subtypes" msgid="3596398805424733238">"సక్రియ ఇన్‌పుట్ పద్ధతులు"</string>
     <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"సిస్టమ్ భాషలను ఉపయోగించు"</string>
     <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"<xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g> యొక్క సెట్టింగ్‌లను తెరవడం విఫలమైంది"</string>
     <string name="ime_security_warning" msgid="4135828934735934248">"ఈ ఇన్‌పుట్ పద్ధతి మీరు టైప్ చేసే మొత్తం వచనాన్ని అలాగే పాస్‌వర్డ్‌లు మరియు క్రెడిట్ కార్డు నంబర్‌ల వంటి వ్యక్తిగత డేటాను సేకరించగలదు. ఇది <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g> అనువర్తనంలో అందించబడుతుంది. ఈ ఇన్‌పుట్ పద్ధతిని ఉపయోగించాలా?"</string>
-    <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"గమనిక: రీబూట్ చేసాక, మీరు మీ ఫోన్‌ను అన్‌లాక్ చేసే వరకు ఈ అనువర్తనం ప్రారంభం కాదు"</string>
+    <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"గమనిక: రీబూట్ చేసాక, మీరు మీ ఫోన్‌ను అన్‌లాక్ చేసే వరకు ఈ యాప్ ప్రారంభం కాదు"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-th/arrays.xml b/packages/SettingsLib/res/values-th/arrays.xml
index 4d42934..6d1c5d7 100644
--- a/packages/SettingsLib/res/values-th/arrays.xml
+++ b/packages/SettingsLib/res/values-th/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (ค่าเริ่มต้น)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"ใช้การเลือกระบบ (ค่าเริ่มต้น)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"เสียง <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"เสียง <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"เปิดใช้ตัวแปลงรหัสที่ไม่บังคับ"</item>
+    <item msgid="3304843301758635896">"ปิดใช้ตัวแปลงรหัสที่ไม่บังคับ"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"ใช้การเลือกระบบ (ค่าเริ่มต้น)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"เสียง <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"เสียง <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"เปิดใช้ตัวแปลงรหัสที่ไม่บังคับ"</item>
+    <item msgid="741805482892725657">"ปิดใช้ตัวแปลงรหัสที่ไม่บังคับ"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"ใช้การเลือกระบบ (ค่าเริ่มต้น)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index 4f31238..8608ac4 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"เชื่อมต่อผ่าน %1$s แล้ว"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"พร้อมใช้งานผ่านทาง %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"เชื่อมต่อแล้ว ไม่พบอินเทอร์เน็ต"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"จุดเข้าใช้งานเต็มชั่วคราว"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"เชื่อมต่อผ่าน %1$s แล้ว"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"พร้อมใช้งานผ่านทาง %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"ช้ามาก"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"ช้า"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ตกลง"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"ปานกลาง"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"เร็ว"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"เร็วมาก"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ตัดการเชื่อมต่อ"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"กำลังตัดการเชื่อมต่อ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"กำลังเชื่อมต่อ…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"สัญญาณ Wi-Fi 2 ขีด"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"สัญญาณ Wi-Fi 3 ขีด"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"สัญญาณ Wi-Fi เต็ม"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"เครือข่ายแบบเปิด"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"เครือข่ายที่ปลอดภัย"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"ระบบปฏิบัติการของ Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"แอปพลิเคชันที่นำออก"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"แอปพลิเคชันและผู้ใช้ที่นำออก"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ใช้การสแกน Wi-Fi ข้ามเครือข่ายเสมอ"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"เปิดใช้อินเทอร์เน็ตมือถือเสมอ"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"การเร่งฮาร์ดแวร์การเชื่อมต่ออินเทอร์เน็ตผ่านมือถือ"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"แสดงอุปกรณ์บลูทูธที่ไม่มีชื่อ"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ปิดใช้การควบคุมระดับเสียงของอุปกรณ์อื่น"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"เปิดใช้การส่งเสียงในช่องสัญญาณเดียวกัน"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"เวอร์ชันของบลูทูธ AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"การตั้งค่านี้มีไว้เพื่อการพัฒนาเท่านั้น จึงอาจทำให้อุปกรณ์และแอปพลิเคชันที่มีอยู่เสียหายหรือทำงานผิดพลาดได้"</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"ยืนยันแอปพลิเคชันผ่าน USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ตรวจสอบแอปพลิเคชันที่ติดตั้งผ่าน ADB/ADT เพื่อตรวจดูพฤติกรรมที่เป็นอันตราย"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"ระบบจะแสดงอุปกรณ์บลูทูธที่ไม่มีชื่อ (มีเฉพาะที่อยู่ MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"ปิดใช้ฟีเจอร์การควบคุมระดับเสียงของอุปกรณ์อื่นผ่านบลูทูธในกรณีที่มีปัญหาเกี่ยวกับระดับเสียงของอุปกรณ์ระยะไกล เช่น ระดับเสียงที่ดังเกินไปหรือระดับเสียงที่ไม่มีการควบคุม"</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"ให้เสียงเรียกเข้าในโทรศัพท์เล่นในชุดหูฟังบลูทูธ"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"เทอร์มินัลในตัวเครื่อง"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - เหลืออีก <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> จนกว่าจะชาร์จเต็ม"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"ไม่ทราบ"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"กำลังชาร์จ"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"กำลังชาร์จ"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"ไม่ได้ชาร์จ"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ไม่ได้ชาร์จ"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"เสียบอยู่ ไม่สามารถชาร์จได้ในขณะนี้"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"เต็ม"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"ผู้ดูแลระบบเป็นผู้ควบคุม"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"เปิดใช้โดยผู้ดูแลระบบ"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"กำหนดเอง (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"ความช่วยเหลือและความคิดเห็น"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"เมนู"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"ป้อนรหัสผ่านเพื่อรีเซ็ตค่าในโหมดสาธิต"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"ถัดไป"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"ต้องป้อนรหัสผ่าน"</string>
diff --git a/packages/SettingsLib/res/values-tl/arrays.xml b/packages/SettingsLib/res/values-tl/arrays.xml
index e6c47da..7a3fd30 100644
--- a/packages/SettingsLib/res/values-tl/arrays.xml
+++ b/packages/SettingsLib/res/values-tl/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Gamitin ang Pagpili ng System (Default)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> na audio"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> na audio"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"I-enable ang Mga Opsyonal na Codec"</item>
+    <item msgid="3304843301758635896">"I-disable ang Mga Opsyonal na Codec"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Gamitin ang Pagpili ng System (Default)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> na audio"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> na audio"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"I-enable ang Mga Opsyonal na Codec"</item>
+    <item msgid="741805482892725657">"I-disable ang Mga Opsyonal na Codec"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Gamitin ang Pagpili ng System (Default)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index 984030d..cc6121e 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -34,18 +34,22 @@
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Wala sa sakop"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"Hindi awtomatikong kokonekta"</string>
     <string name="wifi_no_internet" msgid="3880396223819116454">"Walang access sa Internet"</string>
-    <string name="saved_network" msgid="4352716707126620811">"Na-save ni <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="saved_network" msgid="4352716707126620811">"Na-save ng <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_network_scorer" msgid="5713793306870815341">"Awtomatikong nakakonekta sa pamamagitan ng %1$s"</string>
     <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Awtomatikong nakakonekta sa pamamagitan ng provider ng rating ng network"</string>
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Nakakonekta sa pamamagitan ng %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Available sa pamamagitan ng %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Nakakonekta, walang Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pansamantalang puno ang access point"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Nakakonekta sa pamamagitan ng %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Available sa pamamagitan ng %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Napakabagal"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Mabagal"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Katamtaman"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Mabilis"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Napakabilis"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Hindi nakakonekta"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Nadidiskonekta..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Kumukonekta…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"May dalawang bar ang Wifi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"May tatlong bar ang Wifi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Puno ang signal ng Wifi."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Bukas na network"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Ligtas na network"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Mga inalis na app"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Mga inalis na apps at user"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Palaging payagan ang Mga Pag-scan sa Roaming ng Wi‑Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Palaging aktibo ang mobile data"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardware acceleration para sa pag-tether"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Ipakita ang mga Bluetooth device na walang pangalan"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"I-disable ang absolute volume"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"I-enable ang pag-ring na nasa band"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bersyon ng AVRCP ng Bluetooth"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"I-verify ang mga app sa USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Tingnan kung may nakakahamak na pagkilos sa apps na na-install sa pamamagitan ng ADB/ADT."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Ipapakita ang mga Bluetooth device na walang pangalan (mga MAC address lang)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Dini-disable ang absolute volume feature ng Bluetooth kung may mga isyu sa volume ang mga malayong device gaya ng hindi katanggap-tanggap na malakas na volume o kawalan ng kontrol."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Payagan ang pag-play ng mga ringtone sa telepono sa mga headset na gumagamit ng Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Lokal na terminal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> pa"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> hanggang sa makumpleto ang charge"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Hindi Kilala"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Nagcha-charge"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"nagcha-charge"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Hindi nagcha-charge"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Hindi nagkakarga"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Nakasaksak, hindi makapag-charge sa ngayon"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Puno"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Pinapamahalaan ng admin"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Na-enable ng admin"</string>
@@ -358,7 +365,7 @@
     <string name="disabled" msgid="9206776641295849915">"Naka-disable"</string>
     <string name="external_source_trusted" msgid="2707996266575928037">"Pinapayagan"</string>
     <string name="external_source_untrusted" msgid="2677442511837596726">"Hindi pinapayagan"</string>
-    <string name="install_other_apps" msgid="6986686991775883017">"Mag-install ng mga hindi alam na app"</string>
+    <string name="install_other_apps" msgid="6986686991775883017">"Mag-install ng di-kilalang app"</string>
     <string name="home" msgid="3256884684164448244">"Home ng Mga Setting"</string>
   <string-array name="battery_labels">
     <item msgid="8494684293649631252">"0%"</item>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Tulong at feedback"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Ilagay ang password upang mag-factory reset sa demo mode"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Susunod"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Kinakailangan ang password"</string>
diff --git a/packages/SettingsLib/res/values-tr/arrays.xml b/packages/SettingsLib/res/values-tr/arrays.xml
index a76f0f1..2a70fda 100644
--- a/packages/SettingsLib/res/values-tr/arrays.xml
+++ b/packages/SettingsLib/res/values-tr/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Varsayılan)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Sistem Seçimini Kullan (Varsayılan)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ses"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ses"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"İsteğe Bağlı Codec\'leri Etkinleştir"</item>
+    <item msgid="3304843301758635896">"İsteğe Bağlı Codec\'leri Devre Dışı Bırak"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Sistem Seçimini Kullan (Varsayılan)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ses"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ses"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"İsteğe Bağlı Codec\'leri Etkinleştir"</item>
+    <item msgid="741805482892725657">"İsteğe Bağlı Codec\'leri Devre Dışı Bırak"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Sistem Seçimini Kullan (Varsayılan)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index b0c60f5..fda52ef 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s üzerinden bağlı"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s üzerinden kullanılabilir"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Bağlı, İnternet yok"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Erişim noktası geçici olarak dolu"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s üzerinden bağlı"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s üzerinden kullanılabilir"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Çok Yavaş"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Yavaş"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Tamam"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Orta"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Hızlı"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Çok Hızlı"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Bağlantı kesildi"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Bağlantı kesiliyor…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Bağlanıyor…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Kablosuz sinyal gücü iki çubuk."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Kablosuz sinyal gücü üç çubuk."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Kablosuz sinyal gücü tam."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Açık ağ"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Güvenli ağ"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Kaldırılan uygulamalar"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Kaldırılmış kullanıcılar ve uygulamalar"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Kablosuz Dolaşım Taramalarına daima izin ver"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobil veri her zaman etkin"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering donanım hızlandırıcısı"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Adsız Bluetooth cihazlarını göster"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Mutlak sesi iptal et"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Bant içi zil çaldırmayı etkinleştir"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP Sürümü"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB\'den yüklenen uygulamaları doğrula"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT üzerinden yüklenen uygulamaları zararlı davranışlara karşı denetle."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Adsız Bluetooth cihazları (yalnızca MAC adresleri) gösterilecek"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Uzak cihazda sesin aşırı yüksek olması veya kontrol edilememesi gibi ses sorunları olması ihtimaline karşı Bluetooh mutlak ses özelliğini iptal eder."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Telefondaki zil seslerinin Bluetooth kulaklıklarda çalınmasına olanak tanır"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Yerel terminal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> kaldı"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - Tam şarj olmasına <xliff:g id="TIME">^2</xliff:g> kaldı"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Bilinmiyor"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Şarj oluyor"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"şarj oluyor"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Şarj olmuyor"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Şarj etmiyor"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Prize takıldı, şu anda şarj olamıyor"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Dolu"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Yönetici tarafından denetleniyor"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Yönetici tarafından etkinleştirildi"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Özel (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Yardım ve geri bildirim"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menü"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Demo modunda sıfırlamak için şifreyi girin"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Sonraki"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Şifre gerekli"</string>
diff --git a/packages/SettingsLib/res/values-uk/arrays.xml b/packages/SettingsLib/res/values-uk/arrays.xml
index aac2357..e3f21ad 100644
--- a/packages/SettingsLib/res/values-uk/arrays.xml
+++ b/packages/SettingsLib/res/values-uk/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (за умовчанням)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"acrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Використовувати вибір системи (за умовчанням)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Аудіо <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Аудіо <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Увімкнути додаткові кодеки"</item>
+    <item msgid="3304843301758635896">"Вимкнути додаткові кодеки"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Використовувати вибір системи (за умовчанням)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Аудіо <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Аудіо <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Увімкнути додаткові кодеки"</item>
+    <item msgid="741805482892725657">"Вимкнути додаткові кодеки"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Використовувати вибір системи (за умовчанням)"</item>
     <item msgid="8895532488906185219">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 28c5276..6d86a8d 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Під’єднано через %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Доступ через %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Під’єднано, але немає доступу до Інтернету"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Точка доступу тимчасово переповнена"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Під’єднано через мережу %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Доступ через мережу %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Дуже повільна"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Повільна"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ОК"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Середня"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Швидка"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Дуже швидка"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>: <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Роз’єднано"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Відключення..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Підключення…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Дві смужки сигналу Wi-Fi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Три смужки сигналу Wi-Fi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Максимальний сигнал Wi-Fi."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Відкрита мережа"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Захищена мережа"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"ОС Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Видалені програми"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Видалені програми та користувачі"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Завжди шукати мережі Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Не вимикати мобільне передавання даних"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Апаратне прискорення під час використання телефона в режимі модема"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Показувати пристрої Bluetooth без назв"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Вимкнути абсолютну гучність"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Увімкнути внутрішньосмугові сигнали"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Версія Bluetooth AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ці налаштування застосовуються лише з метою розробки. Вони можуть спричиняти вихід з ладу або неправильне функціонування вашого пристрою чи програм у ньому."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Встановлення через USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Перевіряти безпеку додатків, установлених через ADB/ADT."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Пристрої Bluetooth відображатимуться без назв (лише MAC-адреси)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Функція абсолютної гучності Bluetooth вимикається, якщо на віддалених пристроях виникають проблеми, як-от надто висока гучність або втрата контролю."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Дозволити відтворювати сигнали дзвінка на телефоні через гарнітуру Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Локальний термінал"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – залишилося <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> до повного заряду"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Невідомо"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Заряджається"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"заряджається"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Не заряджається"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Не заряджається"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Підключено. Не вдається зарядити"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Акумулятор заряджено"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Керується адміністратором"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Увімкнено адміністратором"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Спеціальний масштаб (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Довідка й відгуки"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Введіть пароль, щоб скинути налаштування в демо-режимі"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Далі"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Потрібен пароль"</string>
diff --git a/packages/SettingsLib/res/values-ur/arrays.xml b/packages/SettingsLib/res/values-ur/arrays.xml
index 631d87e..8d46582 100644
--- a/packages/SettingsLib/res/values-ur/arrays.xml
+++ b/packages/SettingsLib/res/values-ur/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"‏AVRCP 1.4 (ڈیفالٹ)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"سسٹم انتخاب کا استعمال کریں (ڈیفالٹ)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> آڈیو"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> آڈیو"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"اختیاری کوڈیکز کو فعال کریں"</item>
+    <item msgid="3304843301758635896">"اختیاری کوڈیکز کو غیر فعال کریں"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"سسٹم انتخاب کا استعمال کریں (ڈیفالٹ)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> آڈیو"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> آڈیو"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"اختیاری کوڈیکز کو فعال کریں"</item>
+    <item msgid="741805482892725657">"اختیاری کوڈیکز کو غیر فعال کریں"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"سسٹم انتخاب کا استعمال کریں (ڈیفالٹ)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index 3aec6aee..6bd893d 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"‏منسلک بذریعہ ‎%1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"‏دستیاب بذریعہ ‎%1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"منسلک، انٹرنیٹ نہیں ہے"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"رسائی پوائنٹ عارضی طور پر فُل ہے"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"‏منسلک بذریعہ ‎%1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"‏دستیاب بذریعہ ‎%1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"بہت سست"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"سست"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"ٹھیک ہے"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"متوسط"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"تیز"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"بہت تیز"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"منقطع"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"منقطع کیا جارہا ہے…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"مربوط ہو رہا ہے…"</string>
@@ -101,14 +105,16 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"‏Wifi دو بارز۔"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"‏Wifi تین بارز۔"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"‏Wifi سگنل پورا ہے۔"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"اوپن نیٹ ورک"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"محفوظ نیٹ ورک"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"ہٹائی گئی ایپس"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"ہٹائی گئی ایپس اور صارفین"</string>
-    <string name="tether_settings_title_usb" msgid="6688416425801386511">"‏USB ٹیتھرنگ"</string>
+    <string name="tether_settings_title_usb" msgid="6688416425801386511">"‏USB ٹیدرنگ"</string>
     <string name="tether_settings_title_wifi" msgid="3277144155960302049">"پورٹیبل ہاٹ اسپاٹ"</string>
-    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"بلوٹوتھ ٹیتھرنگ"</string>
-    <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"ٹیتھرنگ"</string>
-    <string name="tether_settings_title_all" msgid="8356136101061143841">"ٹیتھرنگ و پورٹیبل ہاٹ اسپاٹ"</string>
+    <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"بلوٹوتھ ٹیدرنگ"</string>
+    <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"ٹیدرنگ"</string>
+    <string name="tether_settings_title_all" msgid="8356136101061143841">"ٹیدرنگ و پورٹیبل ہاٹ اسپاٹ"</string>
     <string name="managed_user_title" msgid="8109605045406748842">"تمام کام کی ایپس"</string>
     <string name="user_guest" msgid="8475274842845401871">"مہمان"</string>
     <string name="unknown" msgid="1592123443519355854">"نامعلوم"</string>
@@ -162,7 +168,7 @@
     <string name="development_settings_summary" msgid="1815795401632854041">"ایپ ڈویلپمنٹ کیلئے اختیارات سیٹ کریں"</string>
     <string name="development_settings_not_available" msgid="4308569041701535607">"اس صارف کیلئے ڈیولپر کے اختیارات دستیاب نہیں ہیں"</string>
     <string name="vpn_settings_not_available" msgid="956841430176985598">"‏VPN ترتیبات اس صارف کیلئے دستیاب نہیں ہیں"</string>
-    <string name="tethering_settings_not_available" msgid="6765770438438291012">"ٹیتھرنگ ترتیبات اس صارف کیلئے دستیاب نہیں ہیں"</string>
+    <string name="tethering_settings_not_available" msgid="6765770438438291012">"ٹیدرنگ ترتیبات اس صارف کیلئے دستیاب نہیں ہیں"</string>
     <string name="apn_settings_not_available" msgid="7873729032165324000">"رسائی کی جگہ کے نام کی ترتیبات اس صارف کیلئے دستیاب نہیں ہیں"</string>
     <string name="enable_adb" msgid="7982306934419797485">"‏USB ڈیبگ کرنا"</string>
     <string name="enable_adb_summary" msgid="4881186971746056635">"‏USB مربوط ہونے پر ڈيبگ کرنے کی وضع"</string>
@@ -186,7 +192,8 @@
     <string name="wifi_aggressive_handover" msgid="5309131983693661320">"‏Wi‑Fi سے موبائل کو جارحانہ ہینڈ اوور"</string>
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"‏ہمیشہ Wi‑Fi روم اسکینز کی اجازت دیں"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"موبائل ڈیٹا ہمیشہ فعال رکھیں"</string>
-    <string name="tethering_hardware_offload" msgid="7470077827090325814">"ہارڈویئر کی سرعت کاری میں ربط بنایا جا رہا ہے"</string>
+    <string name="tethering_hardware_offload" msgid="7470077827090325814">"ٹیدرنگ ہارڈویئر سرعت کاری"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"بغیر نام والے بلوٹوتھ آلات دکھائیں"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"مطلق والیوم کو غیر فعال کریں"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"ان بینڈ رنگنگ فعال کریں"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"‏بلوٹوتھ AVRCP ورژن"</string>
@@ -218,7 +225,7 @@
     <string name="allow_mock_location_summary" msgid="317615105156345626">"فرضی مقامات کی اجازت دیں"</string>
     <string name="debug_view_attributes" msgid="6485448367803310384">"منظر انتساب کے معائنہ کو فعال کریں"</string>
     <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"‏Wi‑Fi فعال ہونے پر بھی موبائل ڈیٹا کو ہمیشہ فعال رکھیں (تیزی سے نیٹ ورک سوئچ کرنے کیلئے)۔"</string>
-    <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"اگر دستیاب ہو، تو ہارڈویئر کی سرعت کاری میں ربط کاری کا استعمال کریں"</string>
+    <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"اگر دستیاب ہو تو ٹیدرنگ ہارڈویئر سرعت کاری کا استعمال کریں"</string>
     <string name="adb_warning_title" msgid="6234463310896563253">"‏USB ڈیبگ کرنے کی اجازت دیں؟"</string>
     <string name="adb_warning_message" msgid="7316799925425402244">"‏USB ڈیبگ کرنا صرف ڈیولپمنٹ کے مقاصد کیلئے ہے۔ اپنے کمپیوٹر اور اپنے آلہ کے درمیان ڈیٹا کاپی کرنے کیلئے اسے استعمال کریں، بغیر اطلاع کے اپنے آلہ پر ایپس انسٹال کریں اور لاگ ڈیٹا پڑھیں۔"</string>
     <string name="adb_keys_warning_message" msgid="5659849457135841625">"‏اپنے ذریعہ پہلے سے اجازت یافتہ سبھی کمپیوٹرز سے USB ڈیبگ کرنے کی رسائی کو کالعدم کریں؟"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"یہ ترتیبات صرف ڈویلپمنٹ استعمال کے ارادے سے ہیں۔ ان سے آپ کا آلہ اور اس پر موجود ایپلیکیشنز بریک ہو سکتی یا غلط برتاؤ کر سکتی ہیں۔"</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"‏USB پر ایپس کی توثیق کریں"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"‏نقصان دہ رویے کے مدنظر ADB/ADT کی معرفت انسٹال شدہ ایپس کی جانچ کریں۔"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"‏بغیر نام والے بلوٹوتھ آلات (صرف MAC پتے) ڈسپلے کئے جائیں گے"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"ریموٹ آلات کے ساتھ والیوم کے مسائل مثلاً نا قابل قبول حد تک بلند والیوم یا کنٹرول نہ ہونے کی صورت میں بلو ٹوتھ مطلق والیوم والی خصوصیت کو غیر فعال کریں۔"</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"فون پر موجود رنگ ٹونز کو بلوٹوتھ ہیڈ سیٹز پر چلنے دیں"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"مقامی ٹرمینل"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> باقی ہے"</string>
     <string name="power_charging" msgid="1779532561355864267">"‎<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>‎"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> پوری طرح چارج ہونے تک"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"نامعلوم"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"چارج ہو رہا ہے"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"چارج ہو رہا ہے"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"چارج نہیں ہو رہا ہے"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"چارج نہیں ہو رہا ہے"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"پلگ ان ہے، ابھی چارج نہیں کر سکتے"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"مکمل"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"کنٹرول کردہ بذریعہ منتظم"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"منتظم کی طرف سے فعال کردہ"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"حسب ضرورت (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"مدد اور تاثرات"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"مینو"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"ڈیمو موڈ میں فیکٹری ری سیٹ کیلئے پاس ورڈ درج کریں"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"اگلا"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"پاس ورڈ درکار ہے"</string>
diff --git a/packages/SettingsLib/res/values-uz/arrays.xml b/packages/SettingsLib/res/values-uz/arrays.xml
index 08b4112..16d325fe 100644
--- a/packages/SettingsLib/res/values-uz/arrays.xml
+++ b/packages/SettingsLib/res/values-uz/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (asosiy)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Tizim tanlovi (birlamchi)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audiokodeki"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audiokodeki"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Boshqa kodeklarni yoqish"</item>
+    <item msgid="3304843301758635896">"Boshqa kodeklarni o‘chirib qo‘yish"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Tizim tanlovi (birlamchi)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audiokodeki"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audiokodeki"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Boshqa kodeklarni yoqish"</item>
+    <item msgid="741805482892725657">"Boshqa kodeklarni o‘chirib qo‘yish"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Tizim tanlovi (birlamchi)"</item>
     <item msgid="8895532488906185219">"44.1 kGs"</item>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index 5c4d3bd..dbdcb1c 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s orqali ulangan"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s orqali ishlaydi"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Ulangan, lekin internet aloqasi yo‘q"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Internet kirish nuqtasi vaqtinchalik to‘lgan"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s orqali ulangan"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"%1$s orqali ishlaydi"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Juda sekin"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Sekin"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"O‘rtacha"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Tez"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Juda tez"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Uzildi"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Uzilyapti…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Ulanmoqda…"</string>
@@ -61,7 +65,7 @@
     <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1549265779323455261">"Ulangan (HSP/HFP/A2DP dan tashqari), batareya quvvati: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Media audio"</string>
     <string name="bluetooth_profile_headset" msgid="7815495680863246034">"Telefon chaqiruvlari"</string>
-    <string name="bluetooth_profile_opp" msgid="9168139293654233697">"Fayl o‘tkazish"</string>
+    <string name="bluetooth_profile_opp" msgid="9168139293654233697">"Fayl uzatish"</string>
     <string name="bluetooth_profile_hid" msgid="3680729023366986480">"Kiritish qurilmasi"</string>
     <string name="bluetooth_profile_pan" msgid="3391606497945147673">"Internetga kirish"</string>
     <string name="bluetooth_profile_pbap" msgid="5372051906968576809">"Kontaktlarni ulashish"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: ikkita ustun"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: uchta ustun"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi: signal to‘liq"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Ochiq tarmoq"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Xavfsiz tarmoq"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"O‘chirilgan ilovalar"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"O‘chirib tashlangan ilova va foydalanuvchilar"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi-Fi tarmoqlarini qidirishga doim ruxsat"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobil internet doim yoniq tursin"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Modem rejimida apparatli tezlashtirish"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth qurilmalarini nomlarisiz ko‘rsatish"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Ovoz balangligining mutlaq darajasini o‘chirib qo‘yish"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Bitta liniyada jiringlashni yoqish"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP versiyasi"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB orqali o‘rnatish"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT orqali o‘rnatilgan ilovalar xavfsizligini tekshiring"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth qurilmalari nomsiz (faqat MAC manzillari) ko‘rsatiladi"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Masofadan ulanadigan qurilmalar bilan muammolar yuz berganda, jumladan, juda baland ovoz yoki sozlamalarni boshqarib bo‘lmaydigan holatlarda Bluetooth ovozi balandligining mutlaq darajasini o‘chirib qo‘yadi."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Bluetooth quloqliklarda ijro etish uchun telefonda ringtonlarga ruxsat bering"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Mahalliy terminal"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> qoldi"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> ichida to‘ladi"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Noma’lum"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Quvvat olmoqda"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"quvvat olmoqda"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Quvvat olmayapti"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Quvvatlanmayapti"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Ulangan, lekin quvvat olmayapti"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"To‘la"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Administrator tomonidan boshqariladi"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Administrator tomonidan yoqilgan"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Moslashtirilgan (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Yordam va fikr-mulohaza"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menyu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Demo rejimda zavod holatiga qaytarish uchun parolni kiriting"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Keyingisi"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Parolni kiritish zarur"</string>
diff --git a/packages/SettingsLib/res/values-vi/arrays.xml b/packages/SettingsLib/res/values-vi/arrays.xml
index 966fcea..57e749f 100644
--- a/packages/SettingsLib/res/values-vi/arrays.xml
+++ b/packages/SettingsLib/res/values-vi/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (Mặc định)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"Âm thanh <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="2091430979086738145">"Âm thanh <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"Bật codec tùy chọn"</item>
+    <item msgid="3304843301758635896">"Tắt codec tùy chọn"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"Âm thanh <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
+    <item msgid="298198075927343893">"Âm thanh <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"Bật codec tùy chọn"</item>
+    <item msgid="741805482892725657">"Tắt codec tùy chọn"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
     <item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index db2b29d..3b23cbf 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Được kết nối qua %1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Có sẵn qua %1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Đã kết nối, không có Internet"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Điểm truy cập tạm thời đã đạt đến giới hạn số lượng thiết bị truy cập."</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Được kết nối qua %1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Có sẵn qua %1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Rất chậm"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Chậm"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"Khá tốt"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Trung bình"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Nhanh"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Rất nhanh"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Đã ngắt kết nối"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Đang ngắt kết nối…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Đang kết nối…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Tín hiệu Wi-Fi hai vạch."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Tín hiệu Wi-Fi ba vạch."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Tín hiệu Wi-Fi đủ."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Mạng mở"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Mạng bảo mật"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Hệ điều hành Android"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Ứng dụng đã xóa"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Ứng dụng và người dùng bị xóa"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Luôn cho phép quét chuyển vùng Wi‑Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Dữ liệu di động luôn hiện hoạt"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tăng tốc phần cứng cho chia sẻ kết nối"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Hiển thị các thiết bị Bluetooth không có tên"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Vô hiệu hóa âm lượng tuyệt đối"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Bật đổ chuông trong dải"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth phiên bản AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"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>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Xác minh ứng dụng qua USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kiểm tra các ứng dụng được cài đặt qua ADB/ADT để xem có hoạt động gây hại hay không."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Các thiết bị Bluetooth không có tên (chỉ có địa chỉ MAC) sẽ được hiển thị"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Vô hiệu hóa tính năng âm lượng tuyệt đối qua Bluetooth trong trường hợp xảy ra sự cố về âm lượng với các thiết bị từ xa, chẳng hạn như âm lượng lớn không thể chấp nhận được hoặc thiếu kiểm soát."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Cho phép nhạc chuông trên điện thoại được phát trên tai nghe Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Dòng lệnh cục bộ"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - còn lại <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> cho tới khi được sạc đầy"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Không xác định"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Đang sạc"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"đang sạc"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Hiện không sạc"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Hiện không sạc"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Đã cắm nhưng không thể sạc ngay"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Đầy"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Do quản trị viên kiểm soát"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Kích hoạt bởi quản trị viên"</string>
@@ -375,11 +382,10 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Tùy chỉnh (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Trợ giúp và phản hồi"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Nhập mật khẩu để tiến hành khôi phục cài đặt gốc ở chế độ trình diễn"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Tiếp theo"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Yêu cầu mật khẩu"</string>
-    <string name="active_input_method_subtypes" msgid="3596398805424733238">"Phương pháp nhập liệu hoạt động"</string>
+    <string name="active_input_method_subtypes" msgid="3596398805424733238">"Phương thức nhập đang hoạt động"</string>
     <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Sử dụng ngôn ngữ hệ thống"</string>
     <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"Không thể mở cài đặt cho <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>"</string>
     <string name="ime_security_warning" msgid="4135828934735934248">"Phương thức nhập này có thể thu thập tất cả văn bản bạn nhập, bao gồm dữ liệu cá nhân như mật khẩu và số thẻ tín dụng. Phương thức nhập này đến từ ứng dụng <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Sử dụng phương thức nhập này?"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/arrays.xml b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
index f53b8ff..dc24afd 100644
--- a/packages/SettingsLib/res/values-zh-rCN/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
@@ -24,7 +24,7 @@
     <item msgid="1922181315419294640"></item>
     <item msgid="8934131797783724664">"正在扫描..."</item>
     <item msgid="8513729475867537913">"正在连接..."</item>
-    <item msgid="515055375277271756">"正在进行身份验证..."</item>
+    <item msgid="515055375277271756">"正在验证身份…"</item>
     <item msgid="1943354004029184381">"正在获取IP地址..."</item>
     <item msgid="4221763391123233270">"已连接"</item>
     <item msgid="624838831631122137">"已暂停"</item>
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4(默认)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"使用系统选择(默认)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 音频"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 音频"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"启用可选编解码器"</item>
+    <item msgid="3304843301758635896">"停用可选编解码器"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"使用系统选择(默认)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 音频"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 音频"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"启用可选编解码器"</item>
+    <item msgid="741805482892725657">"停用可选编解码器"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"使用系统选择(默认)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index 1fe8778..45d9835 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"已通过%1$s连接"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"可通过%1$s连接"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"已连接,但无法访问互联网"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"接入点暂时满载"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"已通过%1$s连接"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"可通过%1$s连接"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"很慢"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"慢"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"良好"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"适中"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"快"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"很快"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"已断开连接"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"正在断开连接..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"正在连接..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"WLAN 信号强度为两格。"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"WLAN 信号强度为三格。"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"WLAN 信号满格。"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"开放网络"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"安全网络"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android 操作系统"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"已删除的应用"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"已删除的应用和用户"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"一律允许WLAN漫游扫描"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"始终开启移动数据网络"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"网络共享硬件加速"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"显示没有名称的蓝牙设备"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"停用绝对音量功能"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"启用手机默认铃声"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"蓝牙 AVRCP 版本"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"这些设置仅适用于开发工作。一旦启用,会导致您的设备以及设备上的应用崩溃或出现异常。"</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"通过USB验证应用"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"通过 ADB/ADT 检查安装的应用是否存在有害行为。"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"系统将显示没有名称(只有 MAC 地址)的蓝牙设备"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"停用蓝牙绝对音量功能,即可避免在连接到远程设备时出现音量问题(例如音量高得让人无法接受或无法控制音量等)。"</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"允许手机铃声通过蓝牙耳机播放"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"本地终端"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - 还可用 <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - 还需 <xliff:g id="TIME">^2</xliff:g>充满"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"未知"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"正在充电"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"正在充电"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"未在充电"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"未在充电"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"已插入电源,但是现在无法充电"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"电量充足"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"由管理员控制"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"已被管理员启用"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"自定义 (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"帮助和反馈"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"菜单"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"输入密码即可在演示模式下恢复出厂设置"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"下一步"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"需要输入密码"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/arrays.xml b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
index b234806..85c151e 100644
--- a/packages/SettingsLib/res/values-zh-rHK/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (預設)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"使用系統選擇 (預設)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 音訊"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 音訊"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"啟用選用的編解碼器"</item>
+    <item msgid="3304843301758635896">"停用選用的編解碼器"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"使用系統選擇 (預設)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 音訊"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 音訊"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"啟用選用的編解碼器"</item>
+    <item msgid="741805482892725657">"停用選用的編解碼器"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"使用系統選擇 (預設)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index 080a417..a47e1e8 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -20,7 +20,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="wifi_fail_to_scan" msgid="1265540342578081461">"無法掃瞄網絡"</string>
+    <string name="wifi_fail_to_scan" msgid="1265540342578081461">"無法掃描網絡"</string>
     <string name="wifi_security_none" msgid="7985461072596594400">"無"</string>
     <string name="wifi_remembered" msgid="4955746899347821096">"已儲存"</string>
     <string name="wifi_disabled_generic" msgid="4259794910584943386">"已停用"</string>
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"可透過 %1$s 連線"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"已連線,沒有互聯網"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"存取點暫時已滿"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"已透過 %1$s 連線"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"可透過 %1$s 連線"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"非常慢"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"慢"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"良好"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"適中"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"快"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"非常快"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"已中斷連線"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"正在中斷連線..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"正在連線..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi 訊號兩格。"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi 訊號三格。"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi 訊號滿格。"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"開放式網絡"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"安全網絡"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android 作業系統"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"已移除的應用程式"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"已移除的應用程式和使用者"</string>
@@ -184,9 +190,10 @@
     <string name="wifi_display_certification" msgid="8611569543791307533">"無線螢幕分享認證"</string>
     <string name="wifi_verbose_logging" msgid="4203729756047242344">"啟用 Wi‑Fi 詳細記錄"</string>
     <string name="wifi_aggressive_handover" msgid="5309131983693661320">"加強 Wi-Fi 至流動數據轉換"</string>
-    <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"永遠允許 Wi-Fi 漫遊掃瞄"</string>
+    <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"永遠允許 Wi-Fi 漫遊掃描"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"一律保持啟用流動數據"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"網絡共享硬件加速"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"顯示沒有名稱的藍牙裝置"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"停用絕對音量功能"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"啟用頻內鈴聲"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"藍牙 AVRCP 版本"</string>
@@ -205,7 +212,7 @@
     <string name="wifi_display_certification_summary" msgid="1155182309166746973">"顯示無線螢幕分享認證的選項"</string>
     <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"讓 Wi‑Fi 記錄功能升級,在 Wi‑Fi 選擇器中依每個 SSID RSSI 顯示 Wi‑Fi 詳細紀錄"</string>
     <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"啟用後,Wi-Fi 連線會在訊號不穩定的情況下更積極轉換成流動數據連線"</string>
-    <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"根據介面中目前的數據流量允許/禁止 WiFi 漫遊掃瞄"</string>
+    <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"根據介面中目前的數據流量允許/禁止 WiFi 漫遊掃描"</string>
     <string name="select_logd_size_title" msgid="7433137108348553508">"記錄器緩衝區空間"</string>
     <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"選取每個記錄緩衝區的記錄器空間"</string>
     <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"要清除記錄器的持久儲存空間嗎?"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"這些設定僅供開發用途,可能會導致您的裝置及應用程式損毀或運作不正常。"</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"透過 USB 驗證應用程式"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"透過 ADB/ADT 檢查安裝的應用程式有否有害的行為。"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"系統將顯示沒有名稱 (只有 MAC 位址) 的藍牙裝置"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"連線至遠端裝置時,如發生音量過大或無法控制音量等問題,請停用藍牙絕對音量功能。"</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"允許藍牙耳機播放手機鈴聲"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"本機終端機"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - 尚餘 <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - 還需 <xliff:g id="TIME">^2</xliff:g>才能充滿電"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"未知"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"充電中"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"正在充電"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"非充電中"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"未開始充電"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"已插入電源插座,但目前無法充電"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"電量已滿"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"已由管理員停用"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"已由管理員啟用"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"自訂 (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"說明和意見反映"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"選單"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"輸入密碼即可在示範模式下重設原廠設定"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"下一步"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"請輸入密碼"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/arrays.xml b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
index 915fbd8..ce2e89fd 100644
--- a/packages/SettingsLib/res/values-zh-rTW/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"AVRCP 1.4 (預設)"</item>
-    <item msgid="2089555299377409443">"AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"avrcp14"</item>
-    <item msgid="1913619118958233129">"avrcp15"</item>
-    <item msgid="7142710449249088270">"avrcp16"</item>
+    <item msgid="3011533352527449572">"avrcp13"</item>
+    <item msgid="8837606198371920819">"avrcp15"</item>
+    <item msgid="3422726142222090896">"avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"使用系統選擇 (預設)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 音訊"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 音訊"</item>
+    <item msgid="6751080638867012696">"LDAC"</item>
+    <item msgid="723675059572222462">"啟用選用的轉碼器"</item>
+    <item msgid="3304843301758635896">"停用選用的轉碼器"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"使用系統選擇 (預設)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 音訊"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 音訊"</item>
+    <item msgid="7950781694447359344">"LDAC"</item>
+    <item msgid="2209680154067241740">"啟用選用的轉碼器"</item>
+    <item msgid="741805482892725657">"停用選用的轉碼器"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"使用系統選擇 (預設)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index b3c5212..d13a4f6 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -34,18 +34,22 @@
     <string name="wifi_not_in_range" msgid="1136191511238508967">"不在有效範圍內"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"無法自動連線"</string>
     <string name="wifi_no_internet" msgid="3880396223819116454">"沒有可用的網際網路連線"</string>
-    <string name="saved_network" msgid="4352716707126620811">"由<xliff:g id="NAME">%1$s</xliff:g>儲存"</string>
+    <string name="saved_network" msgid="4352716707126620811">"由「<xliff:g id="NAME">%1$s</xliff:g>」儲存"</string>
     <string name="connected_via_network_scorer" msgid="5713793306870815341">"已透過 %1$s 自動連線"</string>
     <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"已透過網路評分供應商自動連線"</string>
     <string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"可透過 %1$s 使用"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"已連線,沒有網際網路"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"存取點暫時滿載"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"已透過 %1$s 連線"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"可透過 %1$s 使用"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"非常慢"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"慢"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"確定"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"適中"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"快"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"非常快"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"已中斷連線"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"正在中斷連線…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"連線中…"</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi 訊號強度兩格。"</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi 訊號強度三格。"</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi 訊號強度滿格。"</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"開放式網路"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"安全網路"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"Android 作業系統"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"移除的應用程式"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"已移除的應用程式和使用者"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"一律允許 Wi-Fi 漫遊掃描"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"行動數據連線一律保持啟用狀態"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"數據連線硬體加速"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"顯示沒有名稱的藍牙裝置"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"停用絕對音量功能"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"啟用藍牙同步鈴聲功能"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"藍牙 AVRCP 版本"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"這些設定僅供開發之用,可能導致你的裝置及裝置中的應用程式毀損或運作異常。"</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"透過 USB 驗證應用程式"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"檢查透過 ADB/ADT 安裝的應用程式是否具有有害行為。"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"系統會顯示沒有名稱 (僅具有 MAC 位址) 的藍牙裝置"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"只要停用藍牙絕對音量功能,即可避免在連線到遠端裝置時,發生音量過大或無法控制音量等問題。"</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"允許手機鈴聲透過藍牙耳機播放"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"本機終端機"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - 還剩 <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>後充飽"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"不明"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"充電中"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"充電中"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"非充電中"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"非充電中"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"已接上電源,但現在無法充電"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"電力充足"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"已由管理員停用"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"已由管理員啟用"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"自訂 (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"說明與意見回饋"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"選單"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"如要在示範模式中恢復原廠設定,請輸入密碼"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"下一步"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"請輸入密碼"</string>
diff --git a/packages/SettingsLib/res/values-zu/arrays.xml b/packages/SettingsLib/res/values-zu/arrays.xml
index 98a1bf9..3d0de36 100644
--- a/packages/SettingsLib/res/values-zu/arrays.xml
+++ b/packages/SettingsLib/res/values-zu/arrays.xml
@@ -60,18 +60,36 @@
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
     <item msgid="5347678900838034763">"I-AVRCP 1.4 (Okuzenzakalelayo)"</item>
-    <item msgid="2089555299377409443">"I-AVRCP 1.5"</item>
-    <item msgid="2895327394279434278">"I-AVRCP 1.6"</item>
+    <item msgid="2809759619990248160">"I-AVRCP 1.3"</item>
+    <item msgid="6199178154704729352">"I-AVRCP 1.5"</item>
+    <item msgid="5172170854953034852">"I-AVRCP 1.6"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_version_values">
     <item msgid="2838624067805073303">"I-avrcp14"</item>
-    <item msgid="1913619118958233129">"I-avrcp15"</item>
-    <item msgid="7142710449249088270">"I-avrcp16"</item>
+    <item msgid="3011533352527449572">"I-avrcp13"</item>
+    <item msgid="8837606198371920819">"I-avrcp15"</item>
+    <item msgid="3422726142222090896">"I-avrcp16"</item>
   </string-array>
-    <!-- no translation found for bluetooth_a2dp_codec_titles:3 (965655874372831982) -->
-    <!-- no translation found for bluetooth_a2dp_codec_titles:4 (1736964107585972103) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3558743545747527853) -->
-    <!-- no translation found for bluetooth_a2dp_codec_summaries:4 (9167103241281353659) -->
+  <string-array name="bluetooth_a2dp_codec_titles">
+    <item msgid="7065842274271279580">"Sebenzisa ukukhetha kwesistimu (Okuzenzakalelayo)"</item>
+    <item msgid="7539690996561263909">"SBC"</item>
+    <item msgid="686685526567131661">"I-AAC"</item>
+    <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> umsindo"</item>
+    <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> umsindo"</item>
+    <item msgid="6751080638867012696">"I-LDAC"</item>
+    <item msgid="723675059572222462">"Nika amandla amakhodekhi akhethekayo"</item>
+    <item msgid="3304843301758635896">"Khubaza amakhodekhi akhethekayo"</item>
+  </string-array>
+  <string-array name="bluetooth_a2dp_codec_summaries">
+    <item msgid="5062108632402595000">"Sebenzisa ukukhetha kwesistimu (Okuzenzakalelayo)"</item>
+    <item msgid="6898329690939802290">"SBC"</item>
+    <item msgid="6839647709301342559">"I-AAC"</item>
+    <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> umsindo"</item>
+    <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> umsindo"</item>
+    <item msgid="7950781694447359344">"I-LDAC"</item>
+    <item msgid="2209680154067241740">"Nika amandla amakhodekhi akhethekayo"</item>
+    <item msgid="741805482892725657">"Khubaza amakhodekhi akhethekayo"</item>
+  </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="3093023430402746802">"Sebenzisa ukukhetha kwesistimu (Okuzenzakalelayo)"</item>
     <item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index f3c27a1..35d84a2 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -40,12 +40,16 @@
     <string name="connected_via_passpoint" msgid="2826205693803088747">"Kuxhumeke nge-%1$s"</string>
     <string name="available_via_passpoint" msgid="1617440946846329613">"Iyatholakala nge-%1$s"</string>
     <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Kuxhumekile, ayikho i-inthanethi"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Iphoyinti lokufinyelela ligcwele okwesikhashana"</string>
+    <string name="connected_via_carrier" msgid="7583780074526041912">"Kuxhumeke nge-%1$s"</string>
+    <string name="available_via_carrier" msgid="1469036129740799053">"Iyatholakala nge-%1$s"</string>
     <string name="speed_label_very_slow" msgid="1867055264243608530">"Phansi kakhulu"</string>
     <string name="speed_label_slow" msgid="813109590815810235">"Phansi"</string>
     <string name="speed_label_okay" msgid="2331665440671174858">"KULUNGILE"</string>
     <string name="speed_label_medium" msgid="3175763313268941953">"Okumaphakathi"</string>
     <string name="speed_label_fast" msgid="7715732164050975057">"Sheshayo"</string>
     <string name="speed_label_very_fast" msgid="2265363430784523409">"Kushesha kakhulu"</string>
+    <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Ayixhunyiwe"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Inqamula uxhumano kwi-inthanethi..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Iyaxhuma..."</string>
@@ -101,6 +105,8 @@
     <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Amabha amabili we-Wifi."</string>
     <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Amabha amathathu we-Wifi."</string>
     <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Isiginali ye-Wifi igcwele."</string>
+    <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Vula inethiwekhi"</string>
+    <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Inethiwekhi evikelekile"</string>
     <string name="process_kernel_label" msgid="3916858646836739323">"I-Android OS"</string>
     <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Izinhlelo zokusebenza zisusiwe"</string>
     <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Izinhelo zokusebenza nabasebenzisi abasusiwe"</string>
@@ -187,6 +193,7 @@
     <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vumela njalo ukuskena kokuzula kwe-Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8774857027458200434">"Idatha yeselula ihlala isebenza"</string>
     <string name="tethering_hardware_offload" msgid="7470077827090325814">"I-Tethering hardware acceleration"</string>
+    <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bonisa amadivayisi e-Bluetooth ngaphandle kwamagama"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Khubaza ivolumu ngokuphelele"</string>
     <string name="bluetooth_enable_inband_ringing" msgid="3291686366721786740">"Nika amandla ukukhala okuphakathi nomkhiqizo"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Inguqulo ye-Bluetooth ye-AVRCP"</string>
@@ -226,6 +233,7 @@
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"Lezi zilungiselelo zenzelwe ukusetshenziswa ukuthuthukisa kuphela. Zingadala ukuthi idivayisi yakho kanye nensiza ekuyona ukuthi iphuke noma iziphathe kabi."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Qiniseka izinhlelo zokusebenza nge-USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Hlola izinhlelo zokusebenza ezifakiwe nge-ADB/ADT ngokuziphatha okuyingozi."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Amadivayisi e-Bluetooth anganawo amagama (Amakheli e-MAC kuphela) azoboniswa"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Ikhubaza isici esiphelele sevolumu ye-Bluetooth uma kuba nezinkinga zevolumu ngamadivayisi esilawuli kude ezifana nevolumu ephezulu noma eshoda ngokulawuleka."</string>
     <string name="bluetooth_enable_inband_ringing_summary" msgid="2787866074741784975">"Vumela amathoni okukhala efonini ukuthi adlalwe kuma-earphone e-Bluetooth"</string>
     <string name="enable_terminal_title" msgid="95572094356054120">"Itheminali yasendaweni"</string>
@@ -345,12 +353,11 @@
     <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> okusele"</string>
     <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> kuze ligcwale ngokuphelele"</string>
-    <string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g>"</string>
     <string name="battery_info_status_unknown" msgid="196130600938058547">"Akwaziwa"</string>
     <string name="battery_info_status_charging" msgid="1705179948350365604">"Iyashaja"</string>
     <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"iyashaja"</string>
     <string name="battery_info_status_discharging" msgid="310932812698268588">"Ayishaji"</string>
-    <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ayishaji"</string>
+    <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Kuxhunyiwe, ayikwazi ukushaja khona manje"</string>
     <string name="battery_info_status_full" msgid="2824614753861462808">"Kugcwele"</string>
     <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kulawulwa umqondisi"</string>
     <string name="enabled_by_admin" msgid="5302986023578399263">"Kunikwe amandla umlawuli"</string>
@@ -375,7 +382,6 @@
     <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Ngokwezifiso (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
     <string name="help_feedback_label" msgid="6815040660801785649">"Usizo nempendulo"</string>
     <string name="content_description_menu_button" msgid="8182594799812351266">"Imenyu"</string>
-    <string name="time_zone_gmt" msgid="2587097992671450782">"I-GMT"</string>
     <string name="retail_demo_reset_message" msgid="118771671364131297">"Faka iphasiwedi ukuze wenze ukusetha kwefekthri kumodi yedemo"</string>
     <string name="retail_demo_reset_next" msgid="8356731459226304963">"Okulandelayo"</string>
     <string name="retail_demo_reset_title" msgid="696589204029930100">"Iphasiwedi iyadingeka"</string>
diff --git a/packages/SettingsLib/res/values/arrays.xml b/packages/SettingsLib/res/values/arrays.xml
index 1f1b67e..77df02b 100644
--- a/packages/SettingsLib/res/values/arrays.xml
+++ b/packages/SettingsLib/res/values/arrays.xml
@@ -105,6 +105,7 @@
     <!-- Titles for Bluetooth AVRCP Versions -->
     <string-array name="bluetooth_avrcp_versions">
         <item>AVRCP 1.4 (Default)</item>
+        <item>AVRCP 1.3</item>
         <item>AVRCP 1.5</item>
         <item>AVRCP 1.6</item>
     </string-array>
@@ -112,6 +113,7 @@
     <!-- Values for Bluetooth AVRCP Versions -->
     <string-array name="bluetooth_avrcp_version_values">
         <item>avrcp14</item>
+        <item>avrcp13</item>
         <item>avrcp15</item>
         <item>avrcp16</item>
     </string-array>
@@ -121,8 +123,8 @@
         <item>Use System Selection (Default)</item>
         <item>SBC</item>
         <item>AAC</item>
-        <item><xliff:g id="aptx">Qualcomm(R) aptX(TM) audio</xliff:g></item>
-        <item><xliff:g id="aptx_hd">Qualcomm(R) aptX(TM) HD audio</xliff:g></item>
+        <item><xliff:g id="qualcomm">Qualcomm®</xliff:g> <xliff:g id="aptx">aptX™</xliff:g> audio</item>
+        <item><xliff:g id="qualcomm">Qualcomm®</xliff:g> <xliff:g id="aptx_hd">aptX™ HD</xliff:g> audio</item>
         <item>LDAC</item>
         <item>Enable Optional Codecs</item>
         <item>Disable Optional Codecs</item>
@@ -145,8 +147,8 @@
         <item>Use System Selection (Default)</item>
         <item>SBC</item>
         <item>AAC</item>
-        <item><xliff:g id="aptx">Qualcomm(R) aptX(TM) audio</xliff:g></item>
-        <item><xliff:g id="aptx_hd">Qualcomm(R) aptX(TM) HD audio</xliff:g></item>
+        <item><xliff:g id="qualcomm">Qualcomm®</xliff:g> <xliff:g id="aptx">aptX™</xliff:g> audio</item>
+        <item><xliff:g id="qualcomm">Qualcomm®</xliff:g> <xliff:g id="aptx_hd">aptX™ HD</xliff:g> audio</item>
         <item>LDAC</item>
         <item>Enable Optional Codecs</item>
         <item>Disable Optional Codecs</item>
diff --git a/packages/SettingsLib/res/values/attrs.xml b/packages/SettingsLib/res/values/attrs.xml
index 6d852df..a8a1793 100644
--- a/packages/SettingsLib/res/values/attrs.xml
+++ b/packages/SettingsLib/res/values/attrs.xml
@@ -48,9 +48,4 @@
 
     <attr name="footerPreferenceStyle" format="reference" />
 
-    <declare-styleable name="PreferenceImageView">
-        <attr name="maxWidth" format="dimension" />
-        <attr name="maxHeight" format="dimension" />
-    </declare-styleable>
-
 </resources>
diff --git a/packages/SettingsLib/res/values/dimens.xml b/packages/SettingsLib/res/values/dimens.xml
index 3322839..e261570 100644
--- a/packages/SettingsLib/res/values/dimens.xml
+++ b/packages/SettingsLib/res/values/dimens.xml
@@ -55,9 +55,20 @@
     <dimen name="battery_height">14.5dp</dimen>
     <dimen name="battery_width">9.5dp</dimen>
 
+    <dimen name="bt_battery_padding">2dp</dimen>
+
     <!-- Margin on the right side of the system icon group on Keyguard. -->
     <fraction name="battery_button_height_fraction">10.5%</fraction>
 
+    <!-- Ratio between height of button part and height of total -->
+    <fraction name="bt_battery_button_height_fraction">7.8%</fraction>
+
+    <!-- Ratio between width and height -->
+    <fraction name="bt_battery_ratio_fraction">35%</fraction>
+
+    <!-- Ratio of height between battery icon and bluetooth icon -->
+    <fraction name="bt_battery_scale_fraction">75%</fraction>
+
     <!-- Fraction value to smooth the edges of the battery icon. The path will be inset by this
          fraction of a pixel.-->
     <fraction name="battery_subpixel_smoothing_left">0%</fraction>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index 064cc84..bd884a3 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -97,6 +97,14 @@
     <!-- Summary for Connected wifi network without internet -->
     <string name="wifi_connected_no_internet">Connected, no Internet</string>
 
+    <!-- Summary for networks failing to connect due to association rejection status 17, AP full -->
+    <string name="wifi_ap_unable_to_handle_new_sta">Access point temporarily full</string>
+
+    <!-- Status message of Wi-Fi when it is connected to a Carrier Network. [CHAR LIMIT=NONE] -->
+    <string name="connected_via_carrier">Connected via %1$s</string>
+    <!-- Status message of Wi-Fi when an available network is a carrier network. [CHAR LIMIT=NONE] -->
+    <string name="available_via_carrier">Available via %1$s</string>
+
     <!-- Speed label for very slow network speed -->
     <string name="speed_label_very_slow">Very Slow</string>
     <!-- Speed label for slow network speed -->
@@ -110,6 +118,9 @@
     <!-- Speed label for very fast network speed -->
     <string name="speed_label_very_fast">Very Fast</string>
 
+    <!-- Summary text separator for preferences including a short description (eg. "Fast / Connected"). -->
+    <string name="preference_summary_default_combination"><xliff:g id="state" example="ON">%1$s</xliff:g> / <xliff:g id="description" example="High accuracy mode">%2$s</xliff:g></string>
+
     <!-- Bluetooth settings.  Message when a device is disconnected -->
     <string name="bluetooth_disconnected">Disconnected</string>
     <!-- Bluetooth settings.  Message when disconnecting from a device -->
@@ -237,6 +248,12 @@
     <!-- Content description of the WIFI signal when it is full for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
     <string name="accessibility_wifi_signal_full">Wifi signal full.</string>
 
+    <!-- Content description of the Wi-Fi security type. This message indicates this is an open Wi-Fi (no password needed) [CHAR LIMIT=NONE] -->
+    <string name="accessibility_wifi_security_type_none">Open network</string>
+
+    <!-- Content description of the Wi-Fi security type. This message indicates this is a secured Wi-Fi (password needed) [CHAR LIMIT=NONE] -->
+    <string name="accessibility_wifi_security_type_secured">Secure network</string>
+
     <!-- Label for kernel threads in battery usage -->
     <string name="process_kernel_label">Android OS</string>
     <!-- Title of data usage item that represents all uninstalled applications. [CHAR LIMIT=48] -->
@@ -467,6 +484,8 @@
     <string name="mobile_data_always_on">Mobile data always active</string>
     <!-- Setting Checkbox title whether to enable hardware acceleration for tethering. [CHAR LIMIT=80] -->
     <string name="tethering_hardware_offload">Tethering hardware acceleration</string>
+    <!-- Setting Checkbox title for showing Bluetooth devices without names -->
+    <string name="bluetooth_show_devices_without_names">Show Bluetooth devices without names</string>
     <!-- Setting Checkbox title for disabling Bluetooth absolute volume -->
     <string name="bluetooth_disable_absolute_volume">Disable absolute volume</string>
     <!-- Setting Checkbox title for enabling Bluetooth inband ringing -->
@@ -551,12 +570,13 @@
     <string name="verify_apps_over_usb_title">Verify apps over USB</string>
     <!-- Summary of checkbox setting to perform package verification on apps installed over USB/ADT/ADB [CHAR LIMIT=NONE] -->
     <string name="verify_apps_over_usb_summary">Check apps installed via ADB/ADT for harmful behavior.</string>
+    <!-- Summary of checkbox for showing Bluetooth devices without names -->
+    <string name="bluetooth_show_devices_without_names_summary">Bluetooth devices without names (MAC addresses only) will be displayed</string>
     <!-- Summary of checkbox for disabling Bluetooth absolute volume -->
     <string name="bluetooth_disable_absolute_volume_summary">Disables the Bluetooth absolute volume feature in case of volume issues with remote devices such as unacceptably loud volume or lack of control.</string>
     <!-- Summary of checkbox for enabling Bluetooth inband ringing -->
     <string name="bluetooth_enable_inband_ringing_summary">Allow ringtones on the phone to be played on Bluetooth headsets</string>
 
-
     <!-- Title of checkbox setting that enables the terminal app. [CHAR LIMIT=32] -->
     <string name="enable_terminal_title">Local terminal</string>
     <!-- Summary of checkbox setting that enables the terminal app. [CHAR LIMIT=64] -->
@@ -850,8 +870,6 @@
     <string name="power_charging"><xliff:g id="level">%1$s</xliff:g> - <xliff:g id="state">%2$s</xliff:g></string>
     <!-- [CHAR_LIMIT=40] Label for battery level chart when charging with duration -->
     <string name="power_charging_duration"><xliff:g id="level">^1</xliff:g> - <xliff:g id="time">^2</xliff:g> until fully charged</string>
-    <!-- [CHAR_LIMIT=40] Short label for battery level chart when charging with duration -->
-    <string name="power_charging_duration_short"><xliff:g id="level">^1</xliff:g> - <xliff:g id="time">^2</xliff:g></string>
 
     <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="battery_info_status_unknown">Unknown</string>
@@ -862,7 +880,7 @@
     <!-- 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 -->
-    <string name="battery_info_status_not_charging">Not charging</string>
+    <string name="battery_info_status_not_charging">Plugged in, can\'t charge right now</string>
     <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="battery_info_status_full">Full</string>
 
@@ -938,9 +956,6 @@
     <!-- Content description for drawer menu button [CHAR_LIMIT=30]-->
     <string name="content_description_menu_button">Menu</string>
 
-    <!-- Label for Greenwich mean time, used in a string like GMT+05:00. [CHAR LIMIT=NONE] -->
-    <string name="time_zone_gmt">GMT</string>
-
     <!-- Label for carrier demo mode factory reset confirmation dialog. [CHAR LIMIT=NONE] -->
     <string name="retail_demo_reset_message">Enter password to perform factory reset in demo mode</string>
     <!-- Label for positive button on carrier demo  mode factory reset confirmation dialog [CHAR LIMIT=40] -->
diff --git a/packages/SettingsLib/res/values/styles_support_preference.xml b/packages/SettingsLib/res/values/styles_support_preference.xml
new file mode 100644
index 0000000..cf9f3c6
--- /dev/null
+++ b/packages/SettingsLib/res/values/styles_support_preference.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2017 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<!-- Common style for support lib preference to look like Settings app UI -->
+<resources>
+
+    <dimen name="preference_no_icon_padding_start">72dp</dimen>
+
+    <!-- Fragment style -->
+    <style name="PreferenceFragmentStyle.SettingsBase" parent="@*android:style/PreferenceFragment.Material">
+        <item name="allowDividerAfterLastItem">false</item>
+    </style>
+
+    <!-- Preferences -->
+    <style name="Preference.SettingsBase" parent="@style/Preference.Material">
+        <item name="allowDividerAbove">false</item>
+        <item name="allowDividerBelow">true</item>
+        <item name="singleLineTitle">false</item>
+        <item name="iconSpaceReserved">true</item>
+    </style>
+
+    <!-- Preference category -->
+    <style name="Preference.Category.SettingsBase" parent="@style/Preference.Category.Material">
+        <item name="allowDividerAbove">true</item>
+        <item name="allowDividerBelow">true</item>
+        <item name="android:layout">@layout/preference_category_material_settings</item>
+    </style>
+
+    <!-- Preference screen -->
+    <style name="Preference.Screen.SettingsBase" parent="@style/Preference.PreferenceScreen.Material">
+        <item name="allowDividerAbove">false</item>
+        <item name="allowDividerBelow">true</item>
+        <item name="iconSpaceReserved">true</item>
+    </style>
+
+    <!-- Footer Preferences -->
+    <style name="Preference.FooterPreference.SettingsBase" parent="Preference.SettingsBase">
+        <item name="android:layout">@layout/preference_footer</item>
+        <item name="allowDividerAbove">true</item>
+    </style>
+
+    <!-- Dropdown Preferences -->
+    <style name="Preference.DropdownPreference.SettingsBase" parent="Preference.SettingsBase">
+        <item name="android:layout">@layout/preference_dropdown_material_settings</item>
+    </style>
+
+    <!-- Switch Preferences -->
+    <style name="Preference.SwitchPreference.SettingsBase" parent="@style/Preference.SwitchPreference.Material">
+        <item name="allowDividerAbove">false</item>
+        <item name="allowDividerBelow">true</item>
+        <item name="iconSpaceReserved">true</item>
+        <item name="singleLineTitle">false</item>
+    </style>
+
+    <!-- EditText Preferences -->
+    <style name="Preference.EditTextPreference.SettingsBase"
+           parent="@style/Preference.DialogPreference.EditTextPreference.Material">
+        <item name="allowDividerAbove">false</item>
+        <item name="allowDividerBelow">true</item>
+        <item name="iconSpaceReserved">true</item>
+        <item name="singleLineTitle">false</item>
+    </style>
+
+    <style name="PreferenceThemeOverlay.SettingsBase" parent="@style/PreferenceThemeOverlay.v14.Material">
+        <!-- Parent path frameworks/support/v14/preference/res/values/themes.xml -->
+        <item name="android:scrollbars">vertical</item>
+        <item name="preferenceFragmentStyle">@style/PreferenceFragmentStyle.SettingsBase</item>
+        <item name="preferenceCategoryStyle">@style/Preference.Category.SettingsBase</item>
+        <item name="preferenceScreenStyle">@style/Preference.Screen.SettingsBase</item>
+        <item name="preferenceStyle">@style/Preference.SettingsBase</item>
+        <item name="dialogPreferenceStyle">@style/Preference.SettingsBase</item>
+        <item name="editTextPreferenceStyle">@style/Preference.EditTextPreference.SettingsBase</item>
+        <item name="footerPreferenceStyle">@style/Preference.FooterPreference.SettingsBase</item>
+        <item name="switchPreferenceStyle">@style/Preference.SwitchPreference.SettingsBase</item>
+        <item name="dropdownPreferenceStyle">@style/Preference.DropdownPreference.SettingsBase</item>
+    </style>
+
+</resources>
\ No newline at end of file
diff --git a/packages/SettingsLib/src/com/android/settingslib/CustomEditTextPreference.java b/packages/SettingsLib/src/com/android/settingslib/CustomEditTextPreference.java
index 692d211..253ca11 100644
--- a/packages/SettingsLib/src/com/android/settingslib/CustomEditTextPreference.java
+++ b/packages/SettingsLib/src/com/android/settingslib/CustomEditTextPreference.java
@@ -30,8 +30,7 @@
 
     private CustomPreferenceDialogFragment mFragment;
 
-    public CustomEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr,
-            int defStyleRes) {
+    public CustomEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
         super(context, attrs, defStyleAttr, defStyleRes);
     }
 
diff --git a/packages/SettingsLib/src/com/android/settingslib/DeviceInfoUtils.java b/packages/SettingsLib/src/com/android/settingslib/DeviceInfoUtils.java
index ebb5d19..78a9064 100644
--- a/packages/SettingsLib/src/com/android/settingslib/DeviceInfoUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/DeviceInfoUtils.java
@@ -76,16 +76,17 @@
 
     public static String formatKernelVersion(String rawKernelVersion) {
         // Example (see tests for more):
-        // Linux version 3.0.31-g6fb96c9 (android-build@xxx.xxx.xxx.xxx.com) \
-        //     (gcc version 4.6.x-xxx 20120106 (prerelease) (GCC) ) #1 SMP PREEMPT \
-        //     Thu Jun 28 11:02:39 PDT 2012
-
+        // Linux version 4.9.29-g958411d (android-build@xyz) (Android clang version 3.8.256229 \
+        //       (based on LLVM 3.8.256229)) #1 SMP PREEMPT Wed Jun 7 00:06:03 CST 2017
+        // Linux version 4.9.29-geb63318482a7 (android-build@xyz) (gcc version 4.9.x 20150123 \
+        //       (prerelease) (GCC) ) #1 SMP PREEMPT Thu Jun 1 03:41:57 UTC 2017
         final String PROC_VERSION_REGEX =
                 "Linux version (\\S+) " + /* group 1: "3.0.31-g6fb96c9" */
-                "\\((\\S+)\\)" +          /* group 2: "x@y.com" (kernel builder) */
-                ".*(#\\d+)" +             /* group 3: "#1" */
-                /* group 4: "Thu Jun 28 11:02:39 PDT 2012" */
-                ".*((?:Sun|Mon|Tue|Wed|Thu|Fri|Sat).+)";
+                "\\((\\S+?)\\) " +        /* group 2: "(x@y.com) " */
+                "\\((.+?)\\) " +          /* group 3:  kernel toolchain version information */
+                "(#\\d+) " +              /* group 4: "#1" */
+                "(?:.*?)?" +              /* ignore: optional SMP, PREEMPT, and any CONFIG_FLAGS */
+                "((Sun|Mon|Tue|Wed|Thu|Fri|Sat).+)"; /* group 5: "Thu Jun 28 11:02:39 PDT 2012" */
 
         Matcher m = Pattern.compile(PROC_VERSION_REGEX).matcher(rawKernelVersion);
         if (!m.matches()) {
@@ -96,9 +97,9 @@
                     + " groups");
             return "Unavailable";
         }
-        return m.group(1) + "\n" +                 // 3.0.31-g6fb96c9
-                m.group(2) + " " + m.group(3) + "\n" + // x@y.com #1
-                m.group(4);                            // Thu Jun 28 11:02:39 PDT 2012
+        return m.group(1) + " ("+ m.group(3) + ")\n" +   // 3.0.31-g6fb96c9 (toolchain version)
+                m.group(2) + " " + m.group(4) + "\n" +   // x@y.com #1
+                m.group(5);                              // Thu Jun 28 11:02:39 PDT 2012
     }
 
     /**
diff --git a/packages/SettingsLib/src/com/android/settingslib/NetworkPolicyEditor.java b/packages/SettingsLib/src/com/android/settingslib/NetworkPolicyEditor.java
index 2e77f42..b01fc85 100644
--- a/packages/SettingsLib/src/com/android/settingslib/NetworkPolicyEditor.java
+++ b/packages/SettingsLib/src/com/android/settingslib/NetworkPolicyEditor.java
@@ -21,6 +21,7 @@
 import static android.net.NetworkPolicy.SNOOZE_NEVER;
 import static android.net.NetworkPolicy.WARNING_DISABLED;
 import static android.net.NetworkTemplate.MATCH_WIFI;
+
 import static com.android.internal.util.Preconditions.checkNotNull;
 
 import android.net.NetworkPolicy;
@@ -29,10 +30,12 @@
 import android.net.wifi.WifiInfo;
 import android.os.AsyncTask;
 import android.text.TextUtils;
-import android.text.format.Time;
+import android.util.RecurrenceRule;
 
 import com.google.android.collect.Lists;
 
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.util.ArrayList;
 
 /**
@@ -128,35 +131,36 @@
     @Deprecated
     private static NetworkPolicy buildDefaultPolicy(NetworkTemplate template) {
         // TODO: move this into framework to share with NetworkPolicyManagerService
-        final int cycleDay;
-        final String cycleTimezone;
+        final RecurrenceRule cycleRule;
         final boolean metered;
 
         if (template.getMatchRule() == MATCH_WIFI) {
-            cycleDay = CYCLE_NONE;
-            cycleTimezone = Time.TIMEZONE_UTC;
+            cycleRule = RecurrenceRule.buildNever();
             metered = false;
         } else {
-            final Time time = new Time();
-            time.setToNow();
-            cycleDay = time.monthDay;
-            cycleTimezone = time.timezone;
+            cycleRule = RecurrenceRule.buildRecurringMonthly(ZonedDateTime.now().getDayOfMonth(),
+                    ZoneId.systemDefault());
             metered = true;
         }
 
-        return new NetworkPolicy(template, cycleDay, cycleTimezone, WARNING_DISABLED,
+        return new NetworkPolicy(template, cycleRule, WARNING_DISABLED,
                 LIMIT_DISABLED, SNOOZE_NEVER, SNOOZE_NEVER, metered, true);
     }
 
+    @Deprecated
     public int getPolicyCycleDay(NetworkTemplate template) {
         final NetworkPolicy policy = getPolicy(template);
-        return (policy != null) ? policy.cycleDay : -1;
+        if (policy != null && policy.cycleRule.isMonthly()) {
+            return policy.cycleRule.start.getDayOfMonth();
+        } else {
+            return CYCLE_NONE;
+        }
     }
 
+    @Deprecated
     public void setPolicyCycleDay(NetworkTemplate template, int cycleDay, String cycleTimezone) {
         final NetworkPolicy policy = getOrCreatePolicy(template);
-        policy.cycleDay = cycleDay;
-        policy.cycleTimezone = cycleTimezone;
+        policy.cycleRule = NetworkPolicy.buildRule(cycleDay, ZoneId.of(cycleTimezone));
         policy.inferred = false;
         policy.clearSnooze();
         writeAsync();
@@ -204,53 +208,6 @@
         writeAsync();
     }
 
-    public boolean getPolicyMetered(NetworkTemplate template) {
-        NetworkPolicy policy = getPolicy(template);
-        if (policy != null) {
-            return policy.metered;
-        } else {
-            return false;
-        }
-    }
-
-    public void setPolicyMetered(NetworkTemplate template, boolean metered) {
-        boolean modified = false;
-
-        NetworkPolicy policy = getPolicy(template);
-        if (metered) {
-            if (policy == null) {
-                policy = buildDefaultPolicy(template);
-                policy.metered = true;
-                policy.inferred = false;
-                mPolicies.add(policy);
-                modified = true;
-            } else if (!policy.metered) {
-                policy.metered = true;
-                policy.inferred = false;
-                modified = true;
-            }
-
-        } else {
-            if (policy == null) {
-                // ignore when policy doesn't exist
-            } else if (policy.metered) {
-                policy.metered = false;
-                policy.inferred = false;
-                modified = true;
-            }
-        }
-
-        // Remove legacy unquoted policies while we're here
-        final NetworkTemplate unquoted = buildUnquotedNetworkTemplate(template);
-        final NetworkPolicy unquotedPolicy = getPolicy(unquoted);
-        if (unquotedPolicy != null) {
-            mPolicies.remove(unquotedPolicy);
-            modified = true;
-        }
-
-        if (modified) writeAsync();
-    }
-
     /**
      * Build a revised {@link NetworkTemplate} that matches the same rule, but
      * with an unquoted {@link NetworkTemplate#getNetworkId()}. Used to work
diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java
index dee5a93..64ec16a 100644
--- a/packages/SettingsLib/src/com/android/settingslib/Utils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java
@@ -14,6 +14,7 @@
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Color;
+import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
 import android.net.ConnectivityManager;
@@ -95,13 +96,12 @@
     /**
      * Returns a circular icon for a user.
      */
-    public static UserIconDrawable getUserIcon(Context context, UserManager um, UserInfo user) {
+    public static Drawable getUserIcon(Context context, UserManager um, UserInfo user) {
         final int iconSize = UserIconDrawable.getSizeForList(context);
         if (user.isManagedProfile()) {
-            // We use predefined values for managed profiles
-            Bitmap b = BitmapFactory.decodeResource(context.getResources(),
-                    com.android.internal.R.drawable.ic_corp_icon);
-            return new UserIconDrawable(iconSize).setIcon(b).bake();
+            Drawable drawable = context.getDrawable(com.android.internal.R.drawable.ic_corp_icon);
+            drawable.setBounds(0, 0, iconSize, iconSize);
+            return drawable;
         }
         if (user.iconPath != null) {
             Bitmap icon = um.getUserIcon(user.id);
diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java
index 443f1ee..40c2b1f 100644
--- a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java
+++ b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java
@@ -339,26 +339,35 @@
         synchronized (mEntriesMap) {
             AppEntry entry = mEntriesMap.get(userId).get(packageName);
             if (entry != null && (entry.info.flags & ApplicationInfo.FLAG_INSTALLED) != 0) {
-                mBackgroundHandler.post(() -> {
-                    try {
-                        final StorageStats stats = mStats.queryStatsForPackage(
-                                entry.info.storageUuid, packageName, UserHandle.of(userId));
-                        final PackageStats legacy = new PackageStats(packageName, userId);
-                        legacy.codeSize = stats.getCodeBytes();
-                        legacy.dataSize = stats.getDataBytes();
-                        legacy.cacheSize = stats.getCacheBytes();
-                        try {
-                            mBackgroundHandler.mStatsObserver.onGetStatsCompleted(legacy, true);
-                        } catch (RemoteException ignored) {
-                        }
-                    } catch (NameNotFoundException | IOException e) {
-                        Log.w(TAG, "Failed to query stats: " + e);
-                        try {
-                            mBackgroundHandler.mStatsObserver.onGetStatsCompleted(null, false);
-                        } catch (RemoteException ignored) {
-                        }
-                    }
-                });
+                mBackgroundHandler.post(
+                        () -> {
+                            try {
+                                final StorageStats stats =
+                                        mStats.queryStatsForPackage(
+                                                entry.info.storageUuid,
+                                                packageName,
+                                                UserHandle.of(userId));
+                                final long cacheQuota =
+                                        mStats.getCacheQuotaBytes(
+                                                entry.info.storageUuid.toString(), entry.info.uid);
+                                final PackageStats legacy = new PackageStats(packageName, userId);
+                                legacy.codeSize = stats.getCodeBytes();
+                                legacy.dataSize = stats.getDataBytes();
+                                legacy.cacheSize = Math.min(stats.getCacheBytes(), cacheQuota);
+                                try {
+                                    mBackgroundHandler.mStatsObserver.onGetStatsCompleted(
+                                            legacy, true);
+                                } catch (RemoteException ignored) {
+                                }
+                            } catch (NameNotFoundException | IOException e) {
+                                Log.w(TAG, "Failed to query stats: " + e);
+                                try {
+                                    mBackgroundHandler.mStatsObserver.onGetStatsCompleted(
+                                            null, false);
+                                } catch (RemoteException ignored) {
+                                }
+                            }
+                        });
             }
             if (DEBUG_LOCKING) Log.v(TAG, "...requestSize releasing lock");
         }
@@ -1638,6 +1647,21 @@
         }
     };
 
+    public static final AppFilter FILTER_PHOTOS =
+            new AppFilter() {
+                @Override
+                public void init() {}
+
+                @Override
+                public boolean filterApp(AppEntry entry) {
+                    boolean isPhotosApp;
+                    synchronized (entry) {
+                        isPhotosApp = entry.info.category == ApplicationInfo.CATEGORY_IMAGE;
+                    }
+                    return isPhotosApp;
+                }
+            };
+
     public static final AppFilter FILTER_OTHER_APPS =
             new AppFilter() {
                 @Override
@@ -1650,7 +1674,8 @@
                         isCategorized =
                                 FILTER_AUDIO.filterApp(entry)
                                         || FILTER_GAMES.filterApp(entry)
-                                        || FILTER_MOVIES.filterApp(entry);
+                                        || FILTER_MOVIES.filterApp(entry)
+                                        || FILTER_PHOTOS.filterApp(entry);
                     }
                     return !isCategorized;
                 }
diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/StorageStatsSource.java b/packages/SettingsLib/src/com/android/settingslib/applications/StorageStatsSource.java
index 8fc9fa6..9fbadee 100644
--- a/packages/SettingsLib/src/com/android/settingslib/applications/StorageStatsSource.java
+++ b/packages/SettingsLib/src/com/android/settingslib/applications/StorageStatsSource.java
@@ -131,7 +131,7 @@
         }
 
         public long getTotalBytes() {
-            return mStats.getCacheBytes() + mStats.getCodeBytes() + mStats.getDataBytes();
+            return mStats.getAppBytes() + mStats.getDataBytes();
         }
     }
 }
\ No newline at end of file
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java
index 7268d00..0946181 100755
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java
@@ -233,8 +233,8 @@
 
     public String getHighQualityAudioOptionLabel(BluetoothDevice device) {
         int unknownCodecId = R.string.bluetooth_profile_a2dp_high_quality_unknown_codec;
-        if (!supportsHighQualityAudio(device) ||
-                getConnectionStatus(device) != BluetoothProfile.STATE_CONNECTED) {
+        if (!supportsHighQualityAudio(device)
+                || getConnectionStatus(device) != BluetoothProfile.STATE_CONNECTED) {
             return mContext.getString(unknownCodecId);
         }
         // We want to get the highest priority codec, since that's the one that will be used with
@@ -248,11 +248,36 @@
                         return b.getCodecPriority() - a.getCodecPriority();
                     });
         }
-        if (selectable == null || selectable.length < 1 || selectable[0].isMandatoryCodec()) {
+
+        final BluetoothCodecConfig codecConfig = (selectable == null || selectable.length < 1)
+                ? null : selectable[0];
+        final int codecType = (codecConfig == null || codecConfig.isMandatoryCodec())
+                ? BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID : codecConfig.getCodecType();
+
+        int index = -1;
+        switch (codecType) {
+           case BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC:
+               index = 1;
+               break;
+           case BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC:
+               index = 2;
+               break;
+           case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX:
+               index = 3;
+               break;
+           case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD:
+               index = 4;
+               break;
+           case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC:
+               index = 5;
+               break;
+           }
+
+        if (index < 0) {
             return mContext.getString(unknownCodecId);
         }
         return mContext.getString(R.string.bluetooth_profile_a2dp_high_quality,
-                selectable[0].getCodecName());
+                mContext.getResources().getStringArray(R.array.bluetooth_a2dp_codec_titles)[index]);
     }
 
     public String toString() {
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
index 7d4bc83..28105e2 100755
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
@@ -200,7 +200,7 @@
             cachedDevice.setRssi(rssi);
             cachedDevice.setBtClass(btClass);
             cachedDevice.setNewName(name);
-            cachedDevice.setVisible(true);
+            cachedDevice.setJustDiscovered(true);
         }
     }
 
@@ -352,7 +352,7 @@
                 if (device != null && device.getBondState() == BluetoothDevice.BOND_NONE) {
                     CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device);
                     if (cachedDevice != null) {
-                        cachedDevice.setVisible(false);
+                        cachedDevice.setJustDiscovered(false);
                     }
                 }
             }
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
index 761a83b..60c42d0 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
@@ -51,8 +51,11 @@
     private final LocalBluetoothAdapter mLocalAdapter;
     private final LocalBluetoothProfileManager mProfileManager;
     private final BluetoothDevice mDevice;
+    //TODO: consider remove, BluetoothDevice.getName() is already cached
     private String mName;
+    // Need this since there is no method for getting RSSI
     private short mRssi;
+    //TODO: consider remove, BluetoothDevice.getBluetoothClass() is already cached
     private BluetoothClass mBtClass;
     private HashMap<LocalBluetoothProfile, Integer> mProfileConnectionState;
 
@@ -66,7 +69,7 @@
     // Device supports PANU but not NAP: remove PanProfile after device disconnects from NAP
     private boolean mLocalNapRoleConnected;
 
-    private boolean mVisible;
+    private boolean mJustDiscovered;
 
     private int mMessageRejectionCount;
 
@@ -361,7 +364,6 @@
         migrateMessagePermissionChoice();
         fetchMessageRejectionCount();
 
-        mVisible = false;
         dispatchAttributesChanged();
     }
 
@@ -396,10 +398,12 @@
     }
 
     /**
-     * user changes the device name
+     * User changes the device name
+     * @param name new alias name to be set, should never be null
      */
     public void setName(String name) {
-        if (!mName.equals(name)) {
+        // Prevent mName to be set to null if setName(null) is called
+        if (name != null && !TextUtils.equals(name, mName)) {
             mName = name;
             mDevice.setAlias(name);
             dispatchAttributesChanged();
@@ -421,6 +425,14 @@
     }
 
     /**
+     * Checks if device has a human readable name besides MAC address
+     * @return true if device's alias name is not null nor empty, false otherwise
+     */
+    public boolean hasHumanReadableName() {
+        return !TextUtils.isEmpty(mDevice.getAliasName());
+    }
+
+    /**
      * Get battery level from remote device
      * @return battery level in percentage [0-100], or {@link BluetoothDevice#BATTERY_LEVEL_UNKNOWN}
      */
@@ -432,13 +444,9 @@
         dispatchAttributesChanged();
     }
 
-    public boolean isVisible() {
-        return mVisible;
-    }
-
-    public void setVisible(boolean visible) {
-        if (mVisible != visible) {
-            mVisible = visible;
+    public void setJustDiscovered(boolean justDiscovered) {
+        if (mJustDiscovered != justDiscovered) {
+            mJustDiscovered = justDiscovered;
             dispatchAttributesChanged();
         }
     }
@@ -501,7 +509,7 @@
         ParcelUuid[] localUuids = mLocalAdapter.getUuids();
         if (localUuids == null) return false;
 
-        /**
+        /*
          * Now we know if the device supports PBAP, update permissions...
          */
         processPhonebookAccess();
@@ -662,8 +670,8 @@
             (getBondState() == BluetoothDevice.BOND_BONDED ? 1 : 0);
         if (comparison != 0) return comparison;
 
-        // Visible above not visible
-        comparison = (another.mVisible ? 1 : 0) - (mVisible ? 1 : 0);
+        // Just discovered above discovered in the past
+        comparison = (another.mJustDiscovered ? 1 : 0) - (mJustDiscovered ? 1 : 0);
         if (comparison != 0) return comparison;
 
         // Stronger signal above weaker signal
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java
index abd4e29..5b39ee4 100755
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java
@@ -47,7 +47,7 @@
     }
 
     public static boolean onDeviceDisappeared(CachedBluetoothDevice cachedDevice) {
-        cachedDevice.setVisible(false);
+        cachedDevice.setJustDiscovered(false);
         return cachedDevice.getBondState() == BluetoothDevice.BOND_NONE;
     }
 
@@ -131,7 +131,7 @@
         // Iterate in reverse order since devices may be removed.
         for (int i = mCachedDevices.size() - 1; i >= 0; i--) {
             CachedBluetoothDevice cachedDevice = mCachedDevices.get(i);
-            cachedDevice.setVisible(false);
+            cachedDevice.setJustDiscovered(false);
         }
     }
 
@@ -156,7 +156,7 @@
             for (int i = mCachedDevices.size() - 1; i >= 0; i--) {
                 CachedBluetoothDevice cachedDevice = mCachedDevices.get(i);
                 if (cachedDevice.getBondState() != BluetoothDevice.BOND_BONDED) {
-                    cachedDevice.setVisible(false);
+                    cachedDevice.setJustDiscovered(false);
                     mCachedDevices.remove(i);
                 } else {
                     // For bonded devices, we need to clear the connection status so that
diff --git a/packages/SettingsLib/src/com/android/settingslib/core/AbstractPreferenceController.java b/packages/SettingsLib/src/com/android/settingslib/core/AbstractPreferenceController.java
index fc1a3a9..38fe879 100644
--- a/packages/SettingsLib/src/com/android/settingslib/core/AbstractPreferenceController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/core/AbstractPreferenceController.java
@@ -4,7 +4,6 @@
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceGroup;
 import android.support.v7.preference.PreferenceScreen;
-import java.util.List;
 
 /**
  * A controller that manages event for preference.
@@ -40,17 +39,6 @@
   }
 
   /**
-   * Updates non-indexable keys for search provider.
-   *
-   * Called by SearchIndexProvider#getNonIndexableKeys
-   */
-  public void updateNonIndexableKeys(List<String> keys) {
-      if (!isAvailable()) {
-          keys.add(getPreferenceKey());
-      }
-  }
-
-  /**
    * Returns true if preference is available (should be displayed)
    */
   public abstract boolean isAvailable();
diff --git a/packages/SettingsLib/src/com/android/settingslib/datetime/ZoneGetter.java b/packages/SettingsLib/src/com/android/settingslib/datetime/ZoneGetter.java
index 1cbb745..1771208 100644
--- a/packages/SettingsLib/src/com/android/settingslib/datetime/ZoneGetter.java
+++ b/packages/SettingsLib/src/com/android/settingslib/datetime/ZoneGetter.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.content.res.XmlResourceParser;
+import android.icu.text.TimeZoneFormat;
 import android.icu.text.TimeZoneNames;
 import android.support.v4.text.BidiFormatter;
 import android.support.v4.text.TextDirectionHeuristicsCompat;
@@ -88,8 +89,9 @@
     private static final String XMLTAG_TIMEZONE = "timezone";
 
     public static CharSequence getTimeZoneOffsetAndName(Context context, TimeZone tz, Date now) {
-        Locale locale = Locale.getDefault();
-        CharSequence gmtText = getGmtOffsetText(context, locale, tz, now);
+        Locale locale = context.getResources().getConfiguration().locale;
+        TimeZoneFormat tzFormatter = TimeZoneFormat.getInstance(locale);
+        CharSequence gmtText = getGmtOffsetText(tzFormatter, locale, tz, now);
         TimeZoneNames timeZoneNames = TimeZoneNames.getInstance(locale);
         String zoneNameString = getZoneLongName(timeZoneNames, tz, now);
         if (zoneNameString == null) {
@@ -101,7 +103,7 @@
     }
 
     public static List<Map<String, Object>> getZonesList(Context context) {
-        final Locale locale = Locale.getDefault();
+        final Locale locale = context.getResources().getConfiguration().locale;
         final Date now = new Date();
         final TimeZoneNames timeZoneNames = TimeZoneNames.getInstance(locale);
         final ZoneGetterData data = new ZoneGetterData(context);
@@ -243,12 +245,15 @@
         builder.setSpan(span, start, builder.length(), 0);
     }
 
-    private static String twoDigits(int input) {
-        StringBuilder builder = new StringBuilder(3);
-        if (input < 0) builder.append('-');
-        String string = Integer.toString(Math.abs(input));
-        if (string.length() == 1) builder.append("0");
-        builder.append(string);
+    // Input must be positive. minDigits must be 1 or 2.
+    private static String formatDigits(int input, int minDigits, String localizedDigits) {
+        final int tens = input / 10;
+        final int units = input % 10;
+        StringBuilder builder = new StringBuilder(minDigits);
+        if (input >= 10 || minDigits == 2) {
+            builder.append(localizedDigits.charAt(tens));
+        }
+        builder.append(localizedDigits.charAt(units));
         return builder.toString();
     }
 
@@ -256,36 +261,83 @@
      * Get the GMT offset text label for the given time zone, in the format "GMT-08:00". This will
      * also add TTS spans to give hints to the text-to-speech engine for the type of data it is.
      *
-     * @param context The context which the string is displayed in.
+     * @param tzFormatter The timezone formatter to use.
      * @param locale The locale which the string is displayed in. This should be the same as the
-     *               locale of the context.
+     *               locale of the time zone formatter.
      * @param tz Time zone to get the GMT offset from.
      * @param now The current time, used to tell whether daylight savings is active.
      * @return A CharSequence suitable for display as the offset label of {@code tz}.
      */
-    private static CharSequence getGmtOffsetText(Context context, Locale locale, TimeZone tz,
-            Date now) {
-        SpannableStringBuilder builder = new SpannableStringBuilder();
+    private static CharSequence getGmtOffsetText(TimeZoneFormat tzFormatter, Locale locale,
+            TimeZone tz, Date now) {
+        final SpannableStringBuilder builder = new SpannableStringBuilder();
 
-        appendWithTtsSpan(builder, "GMT",
-                new TtsSpan.TextBuilder(context.getString(R.string.time_zone_gmt)).build());
-
-        int offsetMillis = tz.getOffset(now.getTime());
-        if (offsetMillis >= 0) {
-            appendWithTtsSpan(builder, "+", new TtsSpan.VerbatimBuilder("+").build());
+        final String gmtPattern = tzFormatter.getGMTPattern();
+        final int placeholderIndex = gmtPattern.indexOf("{0}");
+        final String gmtPatternPrefix, gmtPatternSuffix;
+        if (placeholderIndex == -1) {
+            // Bad pattern. Replace with defaults.
+            gmtPatternPrefix = "GMT";
+            gmtPatternSuffix = "";
+        } else {
+            gmtPatternPrefix = gmtPattern.substring(0, placeholderIndex);
+            gmtPatternSuffix = gmtPattern.substring(placeholderIndex + 3); // After the "{0}".
         }
 
+        if (!gmtPatternPrefix.isEmpty()) {
+            appendWithTtsSpan(builder, gmtPatternPrefix,
+                    new TtsSpan.TextBuilder(gmtPatternPrefix).build());
+        }
+
+        int offsetMillis = tz.getOffset(now.getTime());
+        final boolean negative = offsetMillis < 0;
+        final TimeZoneFormat.GMTOffsetPatternType patternType;
+        if (negative) {
+            offsetMillis = -offsetMillis;
+            patternType = TimeZoneFormat.GMTOffsetPatternType.NEGATIVE_HM;
+        } else {
+            patternType = TimeZoneFormat.GMTOffsetPatternType.POSITIVE_HM;
+        }
+        final String gmtOffsetPattern = tzFormatter.getGMTOffsetPattern(patternType);
+        final String localizedDigits = tzFormatter.getGMTOffsetDigits();
+
         final int offsetHours = (int) (offsetMillis / DateUtils.HOUR_IN_MILLIS);
-        appendWithTtsSpan(builder, twoDigits(offsetHours),
-                new TtsSpan.MeasureBuilder().setNumber(offsetHours).setUnit("hour").build());
-
-        builder.append(":");
-
         final int offsetMinutes = (int) (offsetMillis / DateUtils.MINUTE_IN_MILLIS);
         final int offsetMinutesRemaining = Math.abs(offsetMinutes) % 60;
-        appendWithTtsSpan(builder, twoDigits(offsetMinutesRemaining),
-                new TtsSpan.MeasureBuilder().setNumber(offsetMinutesRemaining)
-                        .setUnit("minute").build());
+
+        for (int i = 0; i < gmtOffsetPattern.length(); i++) {
+            char c = gmtOffsetPattern.charAt(i);
+            if (c == '+' || c == '-' || c == '\u2212' /* MINUS SIGN */) {
+                final String sign = String.valueOf(c);
+                appendWithTtsSpan(builder, sign, new TtsSpan.VerbatimBuilder(sign).build());
+            } else if (c == 'H' || c == 'm') {
+                final int numDigits;
+                if (i + 1 < gmtOffsetPattern.length() && gmtOffsetPattern.charAt(i + 1) == c) {
+                    numDigits = 2;
+                    i++; // Skip the next formatting character.
+                } else {
+                    numDigits = 1;
+                }
+                final int number;
+                final String unit;
+                if (c == 'H') {
+                    number = offsetHours;
+                    unit = "hour";
+                } else { // c == 'm'
+                    number = offsetMinutesRemaining;
+                    unit = "minute";
+                }
+                appendWithTtsSpan(builder, formatDigits(number, numDigits, localizedDigits),
+                        new TtsSpan.MeasureBuilder().setNumber(number).setUnit(unit).build());
+            } else {
+                builder.append(c);
+            }
+        }
+
+        if (!gmtPatternSuffix.isEmpty()) {
+            appendWithTtsSpan(builder, gmtPatternSuffix,
+                    new TtsSpan.TextBuilder(gmtPatternSuffix).build());
+        }
 
         CharSequence gmtText = new SpannableString(builder);
 
@@ -305,7 +357,8 @@
         public final int zoneCount;
 
         public ZoneGetterData(Context context) {
-            final Locale locale = Locale.getDefault();
+            final Locale locale = context.getResources().getConfiguration().locale;
+            final TimeZoneFormat tzFormatter = TimeZoneFormat.getInstance(locale);
             final Date now = new Date();
             final List<String> olsonIdsToDisplayList = readTimezonesToDisplay(context);
 
@@ -319,7 +372,7 @@
                 olsonIdsToDisplay[i] = olsonId;
                 final TimeZone tz = TimeZone.getTimeZone(olsonId);
                 timeZones[i] = tz;
-                gmtOffsetTexts[i] = getGmtOffsetText(context, locale, tz, now);
+                gmtOffsetTexts[i] = getGmtOffsetText(tzFormatter, locale, tz, now);
             }
 
             // Create a lookup of local zone IDs.
diff --git a/packages/SettingsLib/src/com/android/settingslib/development/AbstractEnableAdbPreferenceController.java b/packages/SettingsLib/src/com/android/settingslib/development/AbstractEnableAdbPreferenceController.java
new file mode 100644
index 0000000..75b6696
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/development/AbstractEnableAdbPreferenceController.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 com.android.settingslib.development;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v4.content.LocalBroadcastManager;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.support.v7.preference.TwoStatePreference;
+import android.text.TextUtils;
+
+import com.android.settingslib.core.AbstractPreferenceController;
+
+public abstract class AbstractEnableAdbPreferenceController extends AbstractPreferenceController {
+    private static final String KEY_ENABLE_ADB = "enable_adb";
+    public static final String ACTION_ENABLE_ADB_STATE_CHANGED =
+            "com.android.settingslib.development.AbstractEnableAdbController."
+                    + "ENABLE_ADB_STATE_CHANGED";
+
+    private SwitchPreference mPreference;
+
+    public AbstractEnableAdbPreferenceController(Context context) {
+        super(context);
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        if (isAvailable()) {
+            mPreference = (SwitchPreference) screen.findPreference(KEY_ENABLE_ADB);
+        }
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return mContext.getSystemService(UserManager.class).isAdminUser();
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_ENABLE_ADB;
+    }
+
+    private boolean isAdbEnabled() {
+        final ContentResolver cr = mContext.getContentResolver();
+        return Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) != 0;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        ((TwoStatePreference)preference).setChecked(isAdbEnabled());
+    }
+
+    public void enablePreference(boolean enabled) {
+        if (isAvailable()) {
+            mPreference.setEnabled(enabled);
+        }
+    }
+
+    public void resetPreference() {
+        if (mPreference.isChecked()) {
+            mPreference.setChecked(false);
+            handlePreferenceTreeClick(mPreference);
+        }
+    }
+
+    public boolean haveDebugSettings() {
+        return isAdbEnabled();
+    }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (TextUtils.equals(KEY_ENABLE_ADB, preference.getKey())) {
+            if (!isAdbEnabled()) {
+                showConfirmationDialog((SwitchPreference) preference);
+            } else {
+                writeAdbSetting(false);
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    protected void writeAdbSetting(boolean enabled) {
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.ADB_ENABLED, enabled ? 1 : 0);
+        notifyStateChanged();
+    }
+
+    protected void notifyStateChanged() {
+        LocalBroadcastManager.getInstance(mContext)
+                .sendBroadcast(new Intent(ACTION_ENABLE_ADB_STATE_CHANGED));
+    }
+
+    public abstract void showConfirmationDialog(SwitchPreference preference);
+}
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java b/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java
index e067de1..b04bd5a 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java
@@ -37,6 +37,8 @@
     public static final String CATEGORY_SECURITY_LOCKSCREEN =
             "com.android.settings.category.ia.lockscreen";
     public static final String CATEGORY_ACCOUNT = "com.android.settings.category.ia.accounts";
+    public static final String CATEGORY_ACCOUNT_DETAIL =
+            "com.android.settings.category.ia.account_detail";
     public static final String CATEGORY_SYSTEM = "com.android.settings.category.ia.system";
     public static final String CATEGORY_SYSTEM_LANGUAGE =
             "com.android.settings.category.ia.language";
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
index a0eadd0..190f5e6 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
@@ -169,7 +169,10 @@
         finish();
     }
 
-    public void setTileEnabled(ComponentName component, boolean enabled) {
+    /**
+     * @return whether or not the enabled state actually changed.
+     */
+    public boolean setTileEnabled(ComponentName component, boolean enabled) {
         PackageManager pm = getPackageManager();
         int state = pm.getComponentEnabledSetting(component);
         boolean isEnabled = state == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
@@ -183,7 +186,9 @@
                             ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                             : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                     PackageManager.DONT_KILL_APP);
+            return true;
         }
+        return false;
     }
 
     /**
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
index 9620a91..6e676bc 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
@@ -326,6 +326,15 @@
             Context context, UserHandle user, Intent intent,
             Map<Pair<String, String>, Tile> addedCache, String defaultCategory, List<Tile> outTiles,
             boolean usePriority, boolean checkCategory, boolean forceTintExternalIcon) {
+        getTilesForIntent(context, user, intent, addedCache, defaultCategory, outTiles,
+                usePriority, checkCategory, forceTintExternalIcon, false /* shouldUpdateTiles */);
+    }
+
+    public static void getTilesForIntent(
+            Context context, UserHandle user, Intent intent,
+            Map<Pair<String, String>, Tile> addedCache, String defaultCategory, List<Tile> outTiles,
+            boolean usePriority, boolean checkCategory, boolean forceTintExternalIcon,
+            boolean shouldUpdateTiles) {
         PackageManager pm = context.getPackageManager();
         List<ResolveInfo> results = pm.queryIntentActivitiesAsUser(intent,
                 PackageManager.GET_META_DATA, user.getIdentifier());
@@ -363,9 +372,11 @@
                 updateTileData(context, tile, activityInfo, activityInfo.applicationInfo,
                         pm, providerMap, forceTintExternalIcon);
                 if (DEBUG) Log.d(LOG_TAG, "Adding tile " + tile.title);
-
                 addedCache.put(key, tile);
+            } else if (shouldUpdateTiles) {
+                updateSummaryAndTitle(context, providerMap, tile);
             }
+
             if (!tile.userHandle.contains(user)) {
                 tile.userHandle.add(user);
             }
@@ -386,7 +397,6 @@
             String summary = null;
             String keyHint = null;
             boolean isIconTintable = false;
-            RemoteViews remoteViews = null;
 
             // Get the activity's meta-data
             try {
@@ -441,16 +451,8 @@
                     }
                     if (metaData.containsKey(META_DATA_PREFERENCE_CUSTOM_VIEW)) {
                         int layoutId = metaData.getInt(META_DATA_PREFERENCE_CUSTOM_VIEW);
-                        remoteViews = new RemoteViews(applicationInfo.packageName, layoutId);
-                        if (metaData.containsKey(META_DATA_PREFERENCE_SUMMARY_URI)) {
-                            String uriString = metaData.getString(
-                                    META_DATA_PREFERENCE_SUMMARY_URI);
-                            String overrideSummary = getTextFromUri(context, uriString, providerMap,
-                                    META_DATA_PREFERENCE_SUMMARY);
-                            if (overrideSummary != null) {
-                                remoteViews.setTextViewText(android.R.id.summary, overrideSummary);
-                            }
-                        }
+                        tile.remoteViews = new RemoteViews(applicationInfo.packageName, layoutId);
+                        updateSummaryAndTitle(context, providerMap, tile);
                     }
                 }
             } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) {
@@ -482,7 +484,6 @@
             // Suggest a key for this tile
             tile.key = keyHint;
             tile.isIconTintable = isIconTintable;
-            tile.remoteViews = remoteViews;
 
             return true;
         }
@@ -490,6 +491,26 @@
         return false;
     }
 
+    private static void updateSummaryAndTitle(
+            Context context, Map<String, IContentProvider> providerMap, Tile tile) {
+        if (tile == null || tile.metaData == null
+                || !tile.metaData.containsKey(META_DATA_PREFERENCE_SUMMARY_URI)) {
+            return;
+        }
+
+        String uriString = tile.metaData.getString(META_DATA_PREFERENCE_SUMMARY_URI);
+        Bundle bundle = getBundleFromUri(context, uriString, providerMap);
+        String overrideSummary = getString(bundle, META_DATA_PREFERENCE_SUMMARY);
+        String overrideTitle = getString(bundle, META_DATA_PREFERENCE_TITLE);
+        if (overrideSummary != null) {
+            tile.remoteViews.setTextViewText(android.R.id.summary, overrideSummary);
+        }
+
+        if (overrideTitle != null) {
+            tile.remoteViews.setTextViewText(android.R.id.title, overrideTitle);
+        }
+    }
+
     /**
      * Gets the icon package name and resource id from content provider.
      * @param Context context
@@ -555,6 +576,10 @@
         }
     }
 
+    private static String getString(Bundle bundle, String key) {
+        return bundle == null ? null : bundle.getString(key);
+    }
+
     private static IContentProvider getProviderFromUri(Context context, Uri uri,
             Map<String, IContentProvider> providerMap) {
         if (uri == null) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java b/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java
index 426dc7c..ec45b7e 100755
--- a/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java
+++ b/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java
@@ -50,6 +50,7 @@
     protected final Paint mTextPaint;
     protected final Paint mBoltPaint;
     protected final Paint mPlusPaint;
+    protected float mButtonHeightFraction;
 
     private int mLevel = -1;
     private boolean mCharging;
@@ -66,7 +67,6 @@
     private final int mIntrinsicWidth;
     private final int mIntrinsicHeight;
 
-    private float mButtonHeightFraction;
     private float mSubpixelSmoothingLeft;
     private float mSubpixelSmoothingRight;
     private float mTextHeight, mWarningTextHeight;
@@ -293,16 +293,19 @@
     @Override
     public void draw(Canvas c) {
         final int level = mLevel;
+        final Rect bounds = getBounds();
 
         if (level == -1) return;
 
         float drawFrac = (float) level / 100f;
         final int height = mHeight;
-        final int width = (int) (ASPECT_RATIO * mHeight);
+        final int width = (int) (getAspectRatio() * mHeight);
         final int px = (mWidth - width) / 2;
         final int buttonHeight = Math.round(height * mButtonHeightFraction);
+        final int left = mPadding.left + bounds.left;
+        final int top = bounds.bottom - mPadding.bottom - height;
 
-        mFrame.set(mPadding.left, mPadding.top, width + mPadding.left, height + mPadding.top);
+        mFrame.set(left, top, width + left, height + top);
         mFrame.offset(px, 0);
 
         // button-frame: area above the battery body
@@ -329,7 +332,7 @@
 
         // define the battery shape
         mShapePath.reset();
-        final float radius = RADIUS_RATIO * (mFrame.height() + buttonHeight);
+        final float radius = getRadiusRatio() * (mFrame.height() + buttonHeight);
         mShapePath.setFillType(FillType.WINDING);
         mShapePath.addRoundRect(mFrame, radius, radius, Direction.CW);
         mShapePath.addRect(mButtonFrame, Direction.CW);
@@ -469,4 +472,12 @@
     public int getCriticalLevel() {
         return mCriticalLevel;
     }
+
+    protected float getAspectRatio() {
+        return ASPECT_RATIO;
+    }
+
+    protected float getRadiusRatio() {
+        return RADIUS_RATIO;
+    }
 }
diff --git a/packages/SettingsLib/src/com/android/settingslib/graph/BluetoothDeviceLayerDrawable.java b/packages/SettingsLib/src/com/android/settingslib/graph/BluetoothDeviceLayerDrawable.java
new file mode 100644
index 0000000..3c5ac8d
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/graph/BluetoothDeviceLayerDrawable.java
@@ -0,0 +1,165 @@
+/*
+ * 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.settingslib.graph;
+
+import android.annotation.NonNull;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Matrix;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
+import android.graphics.Rect;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
+import android.support.annotation.VisibleForTesting;
+import android.view.Gravity;
+import android.view.View;
+
+import com.android.settingslib.R;
+import com.android.settingslib.Utils;
+
+/**
+ * LayerDrawable contains the bluetooth device icon and battery gauge icon
+ */
+public class BluetoothDeviceLayerDrawable extends LayerDrawable {
+
+    private BluetoothDeviceLayerDrawableState mState;
+
+    private BluetoothDeviceLayerDrawable(@NonNull Drawable[] layers) {
+        super(layers);
+    }
+
+    /**
+     * Create the {@link LayerDrawable} that contains bluetooth device icon and battery icon.
+     * This is a horizontal layout drawable while bluetooth icon at start and battery icon at end.
+     *
+     * @param context      used to get the spec for icon
+     * @param resId        represents the bluetooth device drawable
+     * @param batteryLevel the battery level for bluetooth device
+     */
+    public static BluetoothDeviceLayerDrawable createLayerDrawable(Context context, int resId,
+            int batteryLevel) {
+        return createLayerDrawable(context, resId, batteryLevel, 1 /*iconScale*/);
+    }
+
+    /**
+     * Create the {@link LayerDrawable} that contains bluetooth device icon and battery icon.
+     * This is a horizontal layout drawable while bluetooth icon at start and battery icon at end.
+     *
+     * @param context      used to get the spec for icon
+     * @param resId        represents the bluetooth device drawable
+     * @param batteryLevel the battery level for bluetooth device
+     * @param iconScale    the ratio of height between battery icon and bluetooth icon
+     */
+    public static BluetoothDeviceLayerDrawable createLayerDrawable(Context context, int resId,
+            int batteryLevel, float iconScale) {
+        final Drawable deviceDrawable = context.getDrawable(resId);
+
+        final BatteryMeterDrawable batteryDrawable = new BatteryMeterDrawable(context,
+                context.getColor(R.color.meter_background_color), batteryLevel);
+        final int pad = context.getResources().getDimensionPixelSize(R.dimen.bt_battery_padding);
+        batteryDrawable.setPadding(pad, pad, pad, pad);
+
+        final BluetoothDeviceLayerDrawable drawable = new BluetoothDeviceLayerDrawable(
+                new Drawable[]{deviceDrawable, batteryDrawable});
+        // Set the bluetooth icon at the left
+        drawable.setLayerGravity(0 /* index of deviceDrawable */, Gravity.START);
+        // Set battery icon to the right of the bluetooth icon
+        drawable.setLayerInsetStart(1 /* index of batteryDrawable */,
+                deviceDrawable.getIntrinsicWidth());
+        drawable.setLayerInsetTop(1 /* index of batteryDrawable */,
+                (int) (deviceDrawable.getIntrinsicHeight() * (1 - iconScale)));
+
+        drawable.setConstantState(context, resId, batteryLevel, iconScale);
+
+        return drawable;
+    }
+
+    public void setConstantState(Context context, int resId, int batteryLevel, float iconScale) {
+        mState = new BluetoothDeviceLayerDrawableState(context, resId, batteryLevel, iconScale);
+    }
+
+    @Override
+    public ConstantState getConstantState() {
+        return mState;
+    }
+
+    /**
+     * Battery gauge icon with new spec.
+     */
+    @VisibleForTesting
+    static class BatteryMeterDrawable extends BatteryMeterDrawableBase {
+        private final float mAspectRatio;
+        @VisibleForTesting
+        int mFrameColor;
+
+        public BatteryMeterDrawable(Context context, int frameColor, int batteryLevel) {
+            super(context, frameColor);
+            final Resources resources = context.getResources();
+            mButtonHeightFraction = resources.getFraction(
+                    R.fraction.bt_battery_button_height_fraction, 1, 1);
+            mAspectRatio = resources.getFraction(R.fraction.bt_battery_ratio_fraction, 1, 1);
+
+            final int tintColor = Utils.getColorAttr(context, android.R.attr.colorControlNormal);
+            setColorFilter(new PorterDuffColorFilter(tintColor, PorterDuff.Mode.SRC_IN));
+            setBatteryLevel(batteryLevel);
+            mFrameColor = frameColor;
+        }
+
+        @Override
+        protected float getAspectRatio() {
+            return mAspectRatio;
+        }
+
+        @Override
+        protected float getRadiusRatio() {
+            // Remove the round edge
+            return 0;
+        }
+    }
+
+    /**
+     * {@link ConstantState} to restore the {@link BluetoothDeviceLayerDrawable}
+     */
+    private static class BluetoothDeviceLayerDrawableState extends ConstantState {
+        Context context;
+        int resId;
+        int batteryLevel;
+        float iconScale;
+
+        public BluetoothDeviceLayerDrawableState(Context context, int resId,
+                int batteryLevel, float iconScale) {
+            this.context = context;
+            this.resId = resId;
+            this.batteryLevel = batteryLevel;
+            this.iconScale = iconScale;
+        }
+
+        @Override
+        public Drawable newDrawable() {
+            return createLayerDrawable(context, resId, batteryLevel, iconScale);
+        }
+
+        @Override
+        public int getChangingConfigurations() {
+            return 0;
+        }
+    }
+}
diff --git a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
index b69232c..ed3696c 100644
--- a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
@@ -16,6 +16,14 @@
 
 package com.android.settingslib.net;
 
+import static android.net.ConnectivityManager.TYPE_MOBILE;
+import static android.net.NetworkStatsHistory.FIELD_RX_BYTES;
+import static android.net.NetworkStatsHistory.FIELD_TX_BYTES;
+import static android.net.TrafficStats.MB_IN_BYTES;
+import static android.telephony.TelephonyManager.SIM_STATE_READY;
+import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
+import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
+
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.INetworkStatsService;
@@ -29,22 +37,15 @@
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 import android.text.format.DateUtils;
-import android.text.format.Time;
 import android.util.Log;
+import android.util.Pair;
 
 import com.android.internal.R;
 
+import java.time.ZonedDateTime;
 import java.util.Date;
 import java.util.Locale;
 
-import static android.net.ConnectivityManager.TYPE_MOBILE;
-import static android.net.NetworkStatsHistory.FIELD_RX_BYTES;
-import static android.net.NetworkStatsHistory.FIELD_TX_BYTES;
-import static android.telephony.TelephonyManager.SIM_STATE_READY;
-import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
-import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
-import static android.net.TrafficStats.MB_IN_BYTES;
-
 public class DataUsageController {
 
     private static final String TAG = "DataUsageController";
@@ -107,13 +108,6 @@
         return null;
     }
 
-    private static Time addMonth(Time t, int months) {
-        final Time rt = new Time(t);
-        rt.set(t.monthDay, t.month + months, t.year);
-        rt.normalize(false);
-        return rt;
-    }
-
     public DataUsageInfo getDataUsageInfo() {
         final String subscriberId = getActiveSubscriberId(mContext);
         if (subscriberId == null) {
@@ -140,22 +134,11 @@
             final NetworkStatsHistory history = session.getHistoryForNetwork(template, FIELDS);
             final long now = System.currentTimeMillis();
             final long start, end;
-            if (policy != null && policy.cycleDay > 0) {
-                // period = determined from cycleDay
-                if (DEBUG) Log.d(TAG, "Cycle day=" + policy.cycleDay + " tz="
-                        + policy.cycleTimezone);
-                final Time nowTime = new Time(policy.cycleTimezone);
-                nowTime.setToNow();
-                final Time policyTime = new Time(nowTime);
-                policyTime.set(policy.cycleDay, policyTime.month, policyTime.year);
-                policyTime.normalize(false);
-                if (nowTime.after(policyTime)) {
-                    start = policyTime.toMillis(false);
-                    end = addMonth(policyTime, 1).toMillis(false);
-                } else {
-                    start = addMonth(policyTime, -1).toMillis(false);
-                    end = policyTime.toMillis(false);
-                }
+            if (policy != null) {
+                final Pair<ZonedDateTime, ZonedDateTime> cycle = NetworkPolicyManager
+                        .cycleIterator(policy).next();
+                start = cycle.first.toInstant().toEpochMilli();
+                end = cycle.second.toInstant().toEpochMilli();
             } else {
                 // period = last 4 wks
                 end = now;
diff --git a/packages/SettingsLib/src/com/android/settingslib/suggestions/SuggestionParser.java b/packages/SettingsLib/src/com/android/settingslib/suggestions/SuggestionParser.java
index 7f82a1ca..56b8441 100644
--- a/packages/SettingsLib/src/com/android/settingslib/suggestions/SuggestionParser.java
+++ b/packages/SettingsLib/src/com/android/settingslib/suggestions/SuggestionParser.java
@@ -91,30 +91,25 @@
 
     // Shared prefs keys for storing dismissed state.
     // Index into current dismissed state.
-    @VisibleForTesting
-    static final String DISMISS_INDEX = "_dismiss_index";
-    private static final String SETUP_TIME = "_setup_time";
+    public static final String SETUP_TIME = "_setup_time";
     private static final String IS_DISMISSED = "_is_dismissed";
 
-    private static final long MILLIS_IN_DAY = 24 * 60 * 60 * 1000;
-
     // Default dismiss control for smart suggestions.
-    private static final String DEFAULT_SMART_DISMISS_CONTROL = "0,10";
+    private static final String DEFAULT_SMART_DISMISS_CONTROL = "0";
 
     private final Context mContext;
     private final List<SuggestionCategory> mSuggestionList;
     private final ArrayMap<Pair<String, String>, Tile> mAddCache = new ArrayMap<>();
     private final SharedPreferences mSharedPrefs;
-    private final String mSmartDismissControl;
-
+    private final String mDefaultDismissControl;
 
     public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml,
-            String smartDismissControl) {
+            String defaultDismissControl) {
         this(
                 context,
                 sharedPrefs,
                 (List<SuggestionCategory>) new SuggestionOrderInflater(context).parse(orderXml),
-                smartDismissControl);
+                defaultDismissControl);
     }
 
     public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml) {
@@ -126,11 +121,11 @@
             Context context,
             SharedPreferences sharedPrefs,
             List<SuggestionCategory> suggestionList,
-            String smartDismissControl) {
+            String defaultDismissControl) {
         mContext = context;
         mSuggestionList = suggestionList;
         mSharedPrefs = sharedPrefs;
-        mSmartDismissControl = smartDismissControl;
+        mDefaultDismissControl = defaultDismissControl;
     }
 
     public SuggestionList getSuggestions(boolean isSmartSuggestionEnabled) {
@@ -163,25 +158,16 @@
         return suggestionList;
     }
 
-    public boolean dismissSuggestion(Tile suggestion) {
-        return dismissSuggestion(suggestion, false);
-    }
-
     /**
      * Dismisses a suggestion, returns true if the suggestion has no more dismisses left and should
      * be disabled.
      */
-    public boolean dismissSuggestion(Tile suggestion, boolean isSmartSuggestionEnabled) {
-        String keyBase = suggestion.intent.getComponent().flattenToShortString();
-        int index = mSharedPrefs.getInt(keyBase + DISMISS_INDEX, 0);
-        String dismissControl = getDismissControl(suggestion, isSmartSuggestionEnabled);
-        if (dismissControl == null || parseDismissString(dismissControl).length == index) {
-            return true;
-        }
+    public boolean dismissSuggestion(Tile suggestion) {
+        final String keyBase = suggestion.intent.getComponent().flattenToShortString();
         mSharedPrefs.edit()
                 .putBoolean(keyBase + IS_DISMISSED, true)
                 .commit();
-        return false;
+        return true;
     }
 
     @VisibleForTesting
@@ -209,7 +195,7 @@
             intent.setPackage(category.pkg);
         }
         TileUtils.getTilesForIntent(mContext, new UserHandle(UserHandle.myUserId()), intent,
-                mAddCache, null, suggestions, true, false, false);
+                mAddCache, null, suggestions, true, false, false, true /* shouldUpdateTiles */);
         filterSuggestions(suggestions, countBefore, isSmartSuggestionEnabled);
         if (!category.multiple && suggestions.size() > (countBefore + 1)) {
             // If there are too many, remove them all and only re-add the one with the highest
@@ -359,32 +345,29 @@
     @VisibleForTesting
     boolean isDismissed(Tile suggestion, boolean isSmartSuggestionEnabled) {
         String dismissControl = getDismissControl(suggestion, isSmartSuggestionEnabled);
-        if (dismissControl == null) {
-            return false;
-        }
         String keyBase = suggestion.intent.getComponent().flattenToShortString();
         if (!mSharedPrefs.contains(keyBase + SETUP_TIME)) {
             mSharedPrefs.edit()
                     .putLong(keyBase + SETUP_TIME, System.currentTimeMillis())
                     .commit();
         }
-        // Default to dismissed, so that we can have suggestions that only first appear after
-        // some number of days.
-        if (!mSharedPrefs.getBoolean(keyBase + IS_DISMISSED, true)) {
-            return false;
-        }
-        int index = mSharedPrefs.getInt(keyBase + DISMISS_INDEX, 0);
-        int[] dismissRules = parseDismissString(dismissControl);
-        if (dismissRules.length <= index) {
+        // Check if it's already manually dismissed
+        final boolean isDismissed = mSharedPrefs.getBoolean(keyBase + IS_DISMISSED, false);
+        if (isDismissed) {
             return true;
         }
-        int currentDismiss = dismissRules[index];
-        long time = getEndTime(mSharedPrefs.getLong(keyBase + SETUP_TIME, 0), currentDismiss);
-        if (System.currentTimeMillis() >= time) {
+        if (dismissControl == null) {
+            return false;
+        }
+        // Parse when suggestion should first appear. return true to artificially hide suggestion
+        // before then.
+        int firstAppearDay = parseDismissString(dismissControl);
+        long firstAppearDayInMs = getEndTime(mSharedPrefs.getLong(keyBase + SETUP_TIME, 0),
+                firstAppearDay);
+        if (System.currentTimeMillis() >= firstAppearDayInMs) {
             // Dismiss timeout has passed, undismiss it.
             mSharedPrefs.edit()
                     .putBoolean(keyBase + IS_DISMISSED, false)
-                    .putInt(keyBase + DISMISS_INDEX, index + 1)
                     .commit();
             return false;
         }
@@ -392,22 +375,22 @@
     }
 
     private long getEndTime(long startTime, int daysDelay) {
-        long days = daysDelay * MILLIS_IN_DAY;
+        long days = daysDelay * DateUtils.DAY_IN_MILLIS;
         return startTime + days;
     }
 
-    private int[] parseDismissString(String dismissControl) {
-        String[] dismissStrs = dismissControl.split(",");
-        int[] dismisses = new int[dismissStrs.length];
-        for (int i = 0; i < dismissStrs.length; i++) {
-            dismisses[i] = Integer.parseInt(dismissStrs[i]);
-        }
-        return dismisses;
+    /**
+     * Parse the first int from a string formatted as "0,1,2..."
+     * The value means suggestion should first appear on Day X.
+     */
+    private int parseDismissString(String dismissControl) {
+        final String[] dismissStrs = dismissControl.split(",");
+        return Integer.parseInt(dismissStrs[0]);
     }
 
     private String getDismissControl(Tile suggestion, boolean isSmartSuggestionEnabled) {
         if (isSmartSuggestionEnabled) {
-            return mSmartDismissControl;
+            return mDefaultDismissControl;
         } else {
             return suggestion.metaData.getString(META_DATA_DISMISS_CONTROL);
         }
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index 306f9ac..682b85e 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -28,13 +28,16 @@
 import android.net.NetworkInfo;
 import android.net.NetworkInfo.DetailedState;
 import android.net.NetworkInfo.State;
+import android.net.NetworkKey;
 import android.net.NetworkScoreManager;
 import android.net.NetworkScorerAppData;
 import android.net.ScoredNetwork;
+import android.net.WifiKey;
 import android.net.wifi.IWifiManager;
 import android.net.wifi.ScanResult;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiConfiguration.KeyMgmt;
+import android.net.wifi.WifiEnterpriseConfig;
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.net.wifi.WifiNetworkScoreCache;
@@ -57,7 +60,9 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -118,19 +123,33 @@
      */
     private final ConcurrentHashMap<String, ScanResult> mScanResultCache =
             new ConcurrentHashMap<String, ScanResult>(32);
+
+    /**
+     * Map of BSSIDs to scored networks for individual bssids.
+     *
+     * <p>This cache should not be evicted with scan results, as the values here are used to
+     * generate a fallback in the absence of scores for the visible APs.
+     */
+    private final Map<String, TimestampedScoredNetwork> mScoredNetworkCache = new HashMap<>();
+
     /** Maximum age of scan results to hold onto while actively scanning. **/
-    private static final long MAX_SCAN_RESULT_AGE_MS = 15000;
+    private static final long MAX_SCAN_RESULT_AGE_MILLIS = 25000;
 
     static final String KEY_NETWORKINFO = "key_networkinfo";
     static final String KEY_WIFIINFO = "key_wifiinfo";
     static final String KEY_SCANRESULT = "key_scanresult";
     static final String KEY_SSID = "key_ssid";
     static final String KEY_SECURITY = "key_security";
+    static final String KEY_SPEED = "key_speed";
     static final String KEY_PSKTYPE = "key_psktype";
     static final String KEY_SCANRESULTCACHE = "key_scanresultcache";
+    static final String KEY_SCOREDNETWORKCACHE = "key_scorednetworkcache";
     static final String KEY_CONFIG = "key_config";
     static final String KEY_FQDN = "key_fqdn";
     static final String KEY_PROVIDER_FRIENDLY_NAME = "key_provider_friendly_name";
+    static final String KEY_IS_CARRIER_AP = "key_is_carrier_ap";
+    static final String KEY_CARRIER_AP_EAP_TYPE = "key_carrier_ap_eap_type";
+    static final String KEY_CARRIER_NAME = "key_carrier_name";
     static final AtomicInteger sLastId = new AtomicInteger(0);
 
     /**
@@ -175,8 +194,7 @@
 
     private Object mTag;
 
-    private int mRankingScore = Integer.MIN_VALUE;
-    private int mSpeed = Speed.NONE;
+    @Speed private int mSpeed = Speed.NONE;
     private boolean mIsScoredNetworkMetered = false;
 
     // used to co-relate internal vs returned accesspoint.
@@ -189,6 +207,13 @@
     private String mFqdn;
     private String mProviderFriendlyName;
 
+    private boolean mIsCarrierAp = false;
+    /**
+     * The EAP type {@link WifiEnterpriseConfig.Eap} associated with this AP if it is a carrier AP.
+     */
+    private int mCarrierApEapType = WifiEnterpriseConfig.Eap.NONE;
+    private String mCarrierName = null;
+
     public AccessPoint(Context context, Bundle savedState) {
         mContext = context;
         mConfig = savedState.getParcelable(KEY_CONFIG);
@@ -201,10 +226,13 @@
         if (savedState.containsKey(KEY_SECURITY)) {
             security = savedState.getInt(KEY_SECURITY);
         }
+        if (savedState.containsKey(KEY_SPEED)) {
+            mSpeed = savedState.getInt(KEY_SPEED);
+        }
         if (savedState.containsKey(KEY_PSKTYPE)) {
             pskType = savedState.getInt(KEY_PSKTYPE);
         }
-        mInfo = (WifiInfo) savedState.getParcelable(KEY_WIFIINFO);
+        mInfo = savedState.getParcelable(KEY_WIFIINFO);
         if (savedState.containsKey(KEY_NETWORKINFO)) {
             mNetworkInfo = savedState.getParcelable(KEY_NETWORKINFO);
         }
@@ -216,12 +244,28 @@
                 mScanResultCache.put(result.BSSID, result);
             }
         }
+        if (savedState.containsKey(KEY_SCOREDNETWORKCACHE)) {
+            ArrayList<TimestampedScoredNetwork> scoredNetworkArrayList =
+                    savedState.getParcelableArrayList(KEY_SCOREDNETWORKCACHE);
+            for (TimestampedScoredNetwork timedScore : scoredNetworkArrayList) {
+                mScoredNetworkCache.put(timedScore.getScore().networkKey.wifiKey.bssid, timedScore);
+            }
+        }
         if (savedState.containsKey(KEY_FQDN)) {
             mFqdn = savedState.getString(KEY_FQDN);
         }
         if (savedState.containsKey(KEY_PROVIDER_FRIENDLY_NAME)) {
             mProviderFriendlyName = savedState.getString(KEY_PROVIDER_FRIENDLY_NAME);
         }
+        if (savedState.containsKey(KEY_IS_CARRIER_AP)) {
+            mIsCarrierAp = savedState.getBoolean(KEY_IS_CARRIER_AP);
+        }
+        if (savedState.containsKey(KEY_CARRIER_AP_EAP_TYPE)) {
+            mCarrierApEapType = savedState.getInt(KEY_CARRIER_AP_EAP_TYPE);
+        }
+        if (savedState.containsKey(KEY_CARRIER_NAME)) {
+            mCarrierName = savedState.getString(KEY_CARRIER_NAME);
+        }
         update(mConfig, mInfo, mNetworkInfo);
 
         // Do not evict old scan results on initial creation
@@ -277,10 +321,14 @@
         this.mNetworkInfo = that.mNetworkInfo;
         this.mScanResultCache.clear();
         this.mScanResultCache.putAll(that.mScanResultCache);
+        this.mScoredNetworkCache.clear();
+        this.mScoredNetworkCache.putAll(that.mScoredNetworkCache);
         this.mId = that.mId;
         this.mSpeed = that.mSpeed;
         this.mIsScoredNetworkMetered = that.mIsScoredNetworkMetered;
-        this.mRankingScore = that.mRankingScore;
+        this.mIsCarrierAp = that.mIsCarrierAp;
+        this.mCarrierApEapType = that.mCarrierApEapType;
+        this.mCarrierName = that.mCarrierName;
     }
 
     /**
@@ -291,7 +339,7 @@
     *   1. Active before inactive
     *   2. Reachable before unreachable
     *   3. Saved before unsaved
-    *   4. (Internal only) Network ranking score
+    *   4. Network speed value
     *   5. Stronger signal before weaker signal
     *   6. SSID alphabetically
     *
@@ -312,9 +360,9 @@
         if (isSaved() && !other.isSaved()) return -1;
         if (!isSaved() && other.isSaved()) return 1;
 
-        // Higher scores go before lower scores
-        if (getRankingScore() != other.getRankingScore()) {
-            return (getRankingScore() > other.getRankingScore()) ? -1 : 1;
+        // Faster speeds go before slower speeds - but only if visible change in speed label
+        if (getSpeed() != other.getSpeed()) {
+            return other.getSpeed() - getSpeed();
         }
 
         // Sort by signal strength, bucketed by level
@@ -373,14 +421,16 @@
             builder.append(',').append(securityToString(security, pskType));
         }
         builder.append(",level=").append(getLevel());
-        if (mRankingScore != Integer.MIN_VALUE) {
-            builder.append(",rankingScore=").append(mRankingScore);
-        }
         if (mSpeed != Speed.NONE) {
             builder.append(",speed=").append(mSpeed);
         }
         builder.append(",metered=").append(isMetered());
 
+        if (WifiTracker.sVerboseLogging) {
+            builder.append(",rssi=").append(mRssi);
+            builder.append(",scan cache size=").append(mScanResultCache.size());
+        }
+
         return builder.append(')').toString();
     }
 
@@ -388,13 +438,18 @@
      * Updates the AccessPoint rankingScore, metering, and speed, returning true if the data has
      * changed.
      *
-     * @param scoreCache The score cache to use to retrieve scores.
-     * @param scoringUiEnabled Whether to show scoring and badging UI.
+     * @param scoreCache The score cache to use to retrieve scores
+     * @param scoringUiEnabled Whether to show scoring and badging UI
+     * @param maxScoreCacheAgeMillis the maximum age in milliseconds of scores to consider when
+     *         generating speed labels
      */
-    boolean update(WifiNetworkScoreCache scoreCache, boolean scoringUiEnabled) {
+    boolean update(
+            WifiNetworkScoreCache scoreCache,
+            boolean scoringUiEnabled,
+            long maxScoreCacheAgeMillis) {
         boolean scoreChanged = false;
         if (scoringUiEnabled) {
-            scoreChanged = updateScores(scoreCache);
+            scoreChanged = updateScores(scoreCache, maxScoreCacheAgeMillis);
         }
         return updateMetered(scoreCache) || scoreChanged;
     }
@@ -402,28 +457,89 @@
     /**
      * Updates the AccessPoint rankingScore and speed, returning true if the data has changed.
      *
-     * @param scoreCache The score cache to use to retrieve scores.
+     * <p>Any cached {@link TimestampedScoredNetwork} objects older than the given max age in millis
+     * will be removed when this method is invoked.
+     *
+     * <p>Precondition: {@link #mRssi} is up to date before invoking this method.
+     *
+     * @param scoreCache The score cache to use to retrieve scores
+     * @param maxScoreCacheAgeMillis the maximum age in milliseconds of scores to consider when
+     *         generating speed labels
+     *
+     * @return true if the set speed has changed
      */
-    private boolean updateScores(WifiNetworkScoreCache scoreCache) {
-        int oldSpeed = mSpeed;
-        int oldRankingScore = mRankingScore;
-        mSpeed = Speed.NONE;
-        mRankingScore = Integer.MIN_VALUE;
-
+    private boolean updateScores(WifiNetworkScoreCache scoreCache, long maxScoreCacheAgeMillis) {
+        long nowMillis = SystemClock.elapsedRealtime();
         for (ScanResult result : mScanResultCache.values()) {
             ScoredNetwork score = scoreCache.getScoredNetwork(result);
             if (score == null) {
                 continue;
             }
-
-            if (score.hasRankingScore()) {
-                mRankingScore = Math.max(mRankingScore, score.calculateRankingScore(result.level));
+            TimestampedScoredNetwork timedScore = mScoredNetworkCache.get(result.BSSID);
+            if (timedScore == null) {
+                mScoredNetworkCache.put(
+                        result.BSSID, new TimestampedScoredNetwork(score, nowMillis));
+            } else {
+                // Update data since the has been seen in the score cache
+                timedScore.update(score, nowMillis);
             }
-            // TODO(sghuman): Rename calculateBadge API
-            mSpeed = Math.max(mSpeed, score.calculateBadge(result.level));
         }
 
-        return (oldSpeed != mSpeed || oldRankingScore != mRankingScore);
+        // Remove old cached networks
+        long evictionCutoff = nowMillis - maxScoreCacheAgeMillis;
+        Iterator<TimestampedScoredNetwork> iterator = mScoredNetworkCache.values().iterator();
+        iterator.forEachRemaining(timestampedScoredNetwork -> {
+            if (timestampedScoredNetwork.getUpdatedTimestampMillis() < evictionCutoff) {
+                iterator.remove();
+            }
+        });
+
+        return updateSpeed();
+    }
+
+    /**
+     * Updates the internal speed, returning true if the update resulted in a speed label change.
+     */
+    private boolean updateSpeed() {
+        int oldSpeed = mSpeed;
+        mSpeed = generateAverageSpeedForSsid();
+
+        boolean changed = oldSpeed != mSpeed;
+        if(WifiTracker.sVerboseLogging && changed) {
+            Log.i(TAG, String.format("%s: Set speed to %d", ssid, mSpeed));
+        }
+        return changed;
+    }
+
+    /** Creates a speed value for the current {@link #mRssi} by averaging all non zero badges. */
+    @Speed private int generateAverageSpeedForSsid() {
+        if (mScoredNetworkCache.isEmpty()) {
+            return Speed.NONE;
+        }
+
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, String.format("Generating fallbackspeed for %s using cache: %s",
+                    getSsidStr(), mScoredNetworkCache));
+        }
+
+        // TODO(b/63073866): If flickering issues persist, consider mapping using getLevel rather
+        // than specific rssi value so score doesn't change without a visible wifi bar change. This
+        // issue is likely to be more evident for the active AP whose RSSI value is not half-lifed.
+
+        int count = 0;
+        int totalSpeed = 0;
+        for (TimestampedScoredNetwork timedScore : mScoredNetworkCache.values()) {
+            int speed = timedScore.getScore().calculateBadge(mRssi);
+            if (speed != Speed.NONE) {
+                count++;
+                totalSpeed += speed;
+            }
+        }
+        int speed = count == 0 ? Speed.NONE : totalSpeed / count;
+        if (WifiTracker.sVerboseLogging) {
+            Log.i(TAG, String.format("%s generated fallback speed is: %d", getSsidStr(), speed));
+        }
+        return roundToClosestSpeedEnum(speed);
     }
 
     /**
@@ -433,12 +549,22 @@
     private boolean updateMetered(WifiNetworkScoreCache scoreCache) {
         boolean oldMetering = mIsScoredNetworkMetered;
         mIsScoredNetworkMetered = false;
-        for (ScanResult result : mScanResultCache.values()) {
-            ScoredNetwork score = scoreCache.getScoredNetwork(result);
-            if (score == null) {
-                continue;
+
+        if (isActive() && mInfo != null) {
+            NetworkKey key = new NetworkKey(new WifiKey(
+                    AccessPoint.convertToQuotedString(ssid), mInfo.getBSSID()));
+            ScoredNetwork score = scoreCache.getScoredNetwork(key);
+            if (score != null) {
+                mIsScoredNetworkMetered |= score.meteredHint;
             }
-            mIsScoredNetworkMetered |= score.meteredHint;
+        } else {
+            for (ScanResult result : mScanResultCache.values()) {
+                ScoredNetwork score = scoreCache.getScoredNetwork(result);
+                if (score == null) {
+                    continue;
+                }
+                mIsScoredNetworkMetered |= score.meteredHint;
+            }
         }
         return oldMetering == mIsScoredNetworkMetered;
     }
@@ -448,7 +574,7 @@
         for (Iterator<ScanResult> iter = mScanResultCache.values().iterator(); iter.hasNext(); ) {
             ScanResult result = iter.next();
             // result timestamp is in microseconds
-            if (nowMs - result.timestamp / 1000 > MAX_SCAN_RESULT_AGE_MS) {
+            if (nowMs - result.timestamp / 1000 > MAX_SCAN_RESULT_AGE_MILLIS) {
                 iter.remove();
             }
         }
@@ -529,8 +655,6 @@
 
     /** Updates {@link #mSeen} based on the scan result cache. */
     private void updateSeen() {
-        // TODO(sghuman): Set to now if connected
-
         long seen = 0;
         for (ScanResult result : mScanResultCache.values()) {
             if (result.timestamp > seen) {
@@ -545,15 +669,11 @@
     }
 
     /**
-     * Returns if the network is marked metered. Metering can be marked through its config in
-     * {@link WifiConfiguration}, after connection in {@link WifiInfo}, or from a score config in
-     * {@link ScoredNetwork}.
+     * Returns if the network should be considered metered.
      */
     public boolean isMetered() {
         return mIsScoredNetworkMetered
-                || (mConfig != null && mConfig.meteredHint)
-                || (mInfo != null && mInfo.getMeteredHint()
-                || (mNetworkInfo != null && mNetworkInfo.isMetered()));
+                || WifiConfiguration.isMetered(mConfig, mInfo);
     }
 
     public NetworkInfo getNetworkInfo() {
@@ -566,7 +686,7 @@
 
     public String getSecurityString(boolean concise) {
         Context context = mContext;
-        if (mConfig != null && mConfig.isPasspoint()) {
+        if (isPasspoint() || isPasspointConfig()) {
             return concise ? context.getString(R.string.wifi_security_short_eap) :
                 context.getString(R.string.wifi_security_eap);
         }
@@ -632,6 +752,18 @@
         return null;
     }
 
+    public boolean isCarrierAp() {
+        return mIsCarrierAp;
+    }
+
+    public int getCarrierApEapType() {
+        return mCarrierApEapType;
+    }
+
+    public String getCarrierName() {
+        return mCarrierName;
+    }
+
     public String getSavedNetworkSummary() {
         WifiConfiguration config = mConfig;
         if (config != null) {
@@ -670,17 +802,13 @@
         // Update to new summary
         StringBuilder summary = new StringBuilder();
 
-        // TODO(b/62354743): Standardize and international delimiter usage
-        final String concatenator = " / ";
-
-        if (mSpeed != Speed.NONE) {
-            summary.append(getSpeedLabel() + concatenator);
-        }
-
         if (isActive() && config != null && config.isPasspoint()) {
             // This is the active connection on passpoint
             summary.append(getSummary(mContext, getDetailedState(),
                     false, config.providerFriendlyName));
+        } else if (isActive() && config != null && getDetailedState() == DetailedState.CONNECTED
+                && mIsCarrierAp) {
+            summary.append(String.format(mContext.getString(R.string.connected_via_carrier), mCarrierName));
         } else if (isActive()) {
             // This is the active connection on non-passpoint network
             summary.append(getSummary(mContext, getDetailedState(),
@@ -714,18 +842,30 @@
             }
         } else if (config != null && config.getNetworkSelectionStatus().isNotRecommended()) {
             summary.append(mContext.getString(R.string.wifi_disabled_by_recommendation_provider));
+        } else if (mIsCarrierAp) {
+            summary.append(String.format(mContext.getString(R.string.available_via_carrier), mCarrierName));
         } else if (!isReachable()) { // Wifi out of range
             summary.append(mContext.getString(R.string.wifi_not_in_range));
         } else { // In range, not disabled.
             if (config != null) { // Is saved network
-                summary.append(mContext.getString(R.string.wifi_remembered));
+                // Last attempt to connect to this failed. Show reason why
+                switch (config.recentFailure.getAssociationStatus()) {
+                    case WifiConfiguration.RecentFailure.STATUS_AP_UNABLE_TO_HANDLE_NEW_STA:
+                        summary.append(mContext.getString(
+                                R.string.wifi_ap_unable_to_handle_new_sta));
+                        break;
+                    default:
+                        // "Saved"
+                        summary.append(mContext.getString(R.string.wifi_remembered));
+                        break;
+                }
             }
         }
 
-        if (WifiTracker.sVerboseLogging > 0) {
+        if (WifiTracker.sVerboseLogging) {
             // Add RSSI/band information for this config, what was seen up to 6 seconds ago
             // verbose WiFi Logging is only turned on thru developers settings
-            if (mInfo != null && mNetworkInfo != null) { // This is the active connection
+            if (isActive() && mInfo != null) {
                 summary.append(" f=" + Integer.toString(mInfo.getFrequency()));
             }
             summary.append(" " + getVisibilityStatus());
@@ -760,14 +900,18 @@
             }
         }
 
-        // Strip trailing delimiter if applicable
-        int concatLength = concatenator.length();
-        if (summary.length() >= concatLength && summary.substring(
-                summary.length() - concatLength, summary.length()).equals(concatenator)) {
-            summary.delete(summary.length() - concatLength, summary.length());
+        // If Speed label and summary are both present, use the preference combination to combine
+        // the two, else return the non-null one.
+        if (getSpeedLabel() != null && summary.length() != 0) {
+            return mContext.getResources().getString(
+                    R.string.preference_summary_default_combination,
+                    getSpeedLabel(),
+                    summary.toString());
+        } else if (getSpeedLabel() != null) {
+            return getSpeedLabel();
+        } else {
+            return summary.toString();
         }
-
-        return summary.toString();
     }
 
     /**
@@ -780,13 +924,13 @@
      */
     private String getVisibilityStatus() {
         StringBuilder visibility = new StringBuilder();
-        StringBuilder scans24GHz = null;
-        StringBuilder scans5GHz = null;
+        StringBuilder scans24GHz = new StringBuilder();
+        StringBuilder scans5GHz = new StringBuilder();
         String bssid = null;
 
         long now = System.currentTimeMillis();
 
-        if (mInfo != null) {
+        if (isActive() && mInfo != null) {
             bssid = mInfo.getBSSID();
             if (bssid != null) {
                 visibility.append(" ").append(bssid);
@@ -794,9 +938,6 @@
             visibility.append(" rssi=").append(mInfo.getRssi());
             visibility.append(" ");
             visibility.append(" score=").append(mInfo.score);
-            if (mRankingScore != Integer.MIN_VALUE) {
-                visibility.append(" rankingScore=").append(getRankingScore());
-            }
             if (mSpeed != Speed.NONE) {
                 visibility.append(" speed=").append(getSpeedLabel());
             }
@@ -806,87 +947,56 @@
             visibility.append(String.format("rx=%.1f", mInfo.rxSuccessRate));
         }
 
-        int rssi5 = WifiConfiguration.INVALID_RSSI;
-        int rssi24 = WifiConfiguration.INVALID_RSSI;
-        int num5 = 0;
-        int num24 = 0;
+        int maxRssi5 = WifiConfiguration.INVALID_RSSI;
+        int maxRssi24 = WifiConfiguration.INVALID_RSSI;
+        final int maxDisplayedScans = 4;
+        int num5 = 0; // number of scanned BSSID on 5GHz band
+        int num24 = 0; // number of scanned BSSID on 2.4Ghz band
         int numBlackListed = 0;
-        int n24 = 0; // Number scan results we included in the string
-        int n5 = 0; // Number scan results we included in the string
         evictOldScanResults();
-        // TODO: sort list by RSSI or age
-        for (ScanResult result : mScanResultCache.values()) {
 
+        // TODO: sort list by RSSI or age
+        long nowMs = SystemClock.elapsedRealtime();
+        for (ScanResult result : mScanResultCache.values()) {
             if (result.frequency >= LOWER_FREQ_5GHZ
                     && result.frequency <= HIGHER_FREQ_5GHZ) {
                 // Strictly speaking: [4915, 5825]
-                // number of known BSSID on 5GHz band
-                num5 = num5 + 1;
+                num5++;
+
+                if (result.level > maxRssi5) {
+                    maxRssi5 = result.level;
+                }
+                if (num5 <= maxDisplayedScans) {
+                    scans5GHz.append(verboseScanResultSummary(result, bssid, nowMs));
+                }
             } else if (result.frequency >= LOWER_FREQ_24GHZ
                     && result.frequency <= HIGHER_FREQ_24GHZ) {
                 // Strictly speaking: [2412, 2482]
-                // number of known BSSID on 2.4Ghz band
-                num24 = num24 + 1;
-            }
+                num24++;
 
-
-            if (result.frequency >= LOWER_FREQ_5GHZ
-                    && result.frequency <= HIGHER_FREQ_5GHZ) {
-                if (result.level > rssi5) {
-                    rssi5 = result.level;
+                if (result.level > maxRssi24) {
+                    maxRssi24 = result.level;
                 }
-                if (n5 < 4) {
-                    if (scans5GHz == null) scans5GHz = new StringBuilder();
-                    scans5GHz.append(" \n{").append(result.BSSID);
-                    if (bssid != null && result.BSSID.equals(bssid)) scans5GHz.append("*");
-                    scans5GHz.append("=").append(result.frequency);
-                    scans5GHz.append(",").append(result.level);
-                    scans5GHz.append("}");
-                    n5++;
-                }
-            } else if (result.frequency >= LOWER_FREQ_24GHZ
-                    && result.frequency <= HIGHER_FREQ_24GHZ) {
-                if (result.level > rssi24) {
-                    rssi24 = result.level;
-                }
-                if (n24 < 4) {
-                    if (scans24GHz == null) scans24GHz = new StringBuilder();
-                    scans24GHz.append(" \n{").append(result.BSSID);
-                    if (bssid != null && result.BSSID.equals(bssid)) scans24GHz.append("*");
-                    scans24GHz.append("=").append(result.frequency);
-                    scans24GHz.append(",").append(result.level);
-                    scans24GHz.append("}");
-                    n24++;
+                if (num24 <= maxDisplayedScans) {
+                    scans24GHz.append(verboseScanResultSummary(result, bssid, nowMs));
                 }
             }
         }
         visibility.append(" [");
         if (num24 > 0) {
             visibility.append("(").append(num24).append(")");
-            if (n24 <= 4) {
-                if (scans24GHz != null) {
-                    visibility.append(scans24GHz.toString());
-                }
-            } else {
-                visibility.append("max=").append(rssi24);
-                if (scans24GHz != null) {
-                    visibility.append(",").append(scans24GHz.toString());
-                }
+            if (num24 > maxDisplayedScans) {
+                visibility.append("max=").append(maxRssi24).append(",");
             }
+            visibility.append(scans24GHz.toString());
         }
         visibility.append(";");
         if (num5 > 0) {
             visibility.append("(").append(num5).append(")");
-            if (n5 <= 4) {
-                if (scans5GHz != null) {
-                    visibility.append(scans5GHz.toString());
-                }
-            } else {
-                visibility.append("max=").append(rssi5);
-                if (scans5GHz != null) {
-                    visibility.append(",").append(scans5GHz.toString());
-                }
+            if (num5 > maxDisplayedScans) {
+                visibility.append("max=").append(maxRssi5).append(",");
             }
+            visibility.append(scans5GHz.toString());
         }
         if (numBlackListed > 0)
             visibility.append("!").append(numBlackListed);
@@ -895,6 +1005,36 @@
         return visibility.toString();
     }
 
+    @VisibleForTesting
+    /* package */ String verboseScanResultSummary(ScanResult result, String bssid, long nowMs) {
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(" \n{").append(result.BSSID);
+        if (result.BSSID.equals(bssid)) {
+            stringBuilder.append("*");
+        }
+        stringBuilder.append("=").append(result.frequency);
+        stringBuilder.append(",").append(result.level);
+        int speed = getSpecificApSpeed(result);
+        if (speed != Speed.NONE) {
+            stringBuilder.append(",")
+                    .append(getSpeedLabel(speed));
+        }
+        int ageSeconds = (int) (nowMs - result.timestamp / 1000) / 1000;
+        stringBuilder.append(",").append(ageSeconds).append("s");
+        stringBuilder.append("}");
+        return stringBuilder.toString();
+    }
+
+    @Speed private int getSpecificApSpeed(ScanResult result) {
+        TimestampedScoredNetwork timedScore = mScoredNetworkCache.get(result.BSSID);
+        if (timedScore == null) {
+            return Speed.NONE;
+        }
+        // For debugging purposes we may want to use mRssi rather than result.level as the average
+        // speed wil be determined by mRssi
+        return timedScore.getScore().calculateBadge(result.level);
+    }
+
     /**
      * Return whether this is the active connection.
      * For ephemeral connections (networkId is invalid), this returns false if the network is
@@ -992,17 +1132,23 @@
         mScanResultCache.put(result.BSSID, result);
         updateRssi();
         mSeen = result.timestamp; // even if the timestamp is old it is still valid
+        mIsCarrierAp = result.isCarrierAp;
+        mCarrierApEapType = result.carrierApEapType;
+        mCarrierName = result.carrierName;
     }
 
     public void saveWifiState(Bundle savedState) {
         if (ssid != null) savedState.putString(KEY_SSID, getSsidStr());
         savedState.putInt(KEY_SECURITY, security);
+        savedState.putInt(KEY_SPEED, mSpeed);
         savedState.putInt(KEY_PSKTYPE, pskType);
         if (mConfig != null) savedState.putParcelable(KEY_CONFIG, mConfig);
         savedState.putParcelable(KEY_WIFIINFO, mInfo);
         evictOldScanResults();
         savedState.putParcelableArrayList(KEY_SCANRESULTCACHE,
                 new ArrayList<ScanResult>(mScanResultCache.values()));
+        savedState.putParcelableArrayList(KEY_SCOREDNETWORKCACHE,
+                new ArrayList<>(mScoredNetworkCache.values()));
         if (mNetworkInfo != null) {
             savedState.putParcelable(KEY_NETWORKINFO, mNetworkInfo);
         }
@@ -1012,6 +1158,9 @@
         if (mProviderFriendlyName != null) {
             savedState.putString(KEY_PROVIDER_FRIENDLY_NAME, mProviderFriendlyName);
         }
+        savedState.putBoolean(KEY_IS_CARRIER_AP, mIsCarrierAp);
+        savedState.putInt(KEY_CARRIER_AP_EAP_TYPE, mCarrierApEapType);
+        savedState.putString(KEY_CARRIER_NAME, mCarrierName);
     }
 
     public void setListener(AccessPointListener listener) {
@@ -1038,8 +1187,12 @@
             updateRssi();
             int newLevel = getLevel();
 
-            if (newLevel > 0 && newLevel != oldLevel && mAccessPointListener != null) {
-                mAccessPointListener.onLevelChanged(this);
+            if (newLevel > 0 && newLevel != oldLevel) {
+                // Only update labels on visible rssi changes
+                updateSpeed();
+                if (mAccessPointListener != null) {
+                    mAccessPointListener.onLevelChanged(this);
+                }
             }
             // This flag only comes from scans, is not easily saved in config
             if (security == SECURITY_PSK) {
@@ -1050,6 +1203,12 @@
                 mAccessPointListener.onAccessPointChanged(this);
             }
 
+            // The carrier info in the ScanResult is set by the platform based on the SSID and will
+            // always be the same for all matching scan results.
+            mIsCarrierAp = result.isCarrierAp;
+            mCarrierApEapType = result.carrierApEapType;
+            mCarrierName = result.carrierName;
+
             return true;
         }
         return false;
@@ -1058,6 +1217,7 @@
     /** Attempt to update the AccessPoint and return true if an update occurred. */
     public boolean update(
             @Nullable WifiConfiguration config, WifiInfo info, NetworkInfo networkInfo) {
+
         boolean updated = false;
         final int oldLevel = getLevel();
         if (info != null && isInfoForThisAccessPoint(config, info)) {
@@ -1089,6 +1249,7 @@
                 mAccessPointListener.onLevelChanged(this);
             }
         }
+
         return updated;
     }
 
@@ -1110,15 +1271,32 @@
         setRssi(AccessPoint.UNREACHABLE_RSSI);
     }
 
-    int getRankingScore() {
-        return mRankingScore;
-    }
-
     int getSpeed() { return mSpeed;}
 
     @Nullable
     String getSpeedLabel() {
-        switch (mSpeed) {
+        return getSpeedLabel(mSpeed);
+    }
+
+    @Nullable
+    @Speed
+    private int roundToClosestSpeedEnum(int speed) {
+        if (speed < Speed.SLOW) {
+            return Speed.NONE;
+        } else if (speed < (Speed.SLOW + Speed.MODERATE) / 2) {
+            return Speed.SLOW;
+        } else if (speed < (Speed.MODERATE + Speed.FAST) / 2) {
+            return Speed.MODERATE;
+        } else if (speed < (Speed.FAST + Speed.VERY_FAST) / 2) {
+            return Speed.FAST;
+        } else {
+            return Speed.VERY_FAST;
+        }
+    }
+
+    @Nullable
+    private String getSpeedLabel(@Speed int speed) {
+        switch (speed) {
             case Speed.VERY_FAST:
                 return mContext.getString(R.string.speed_label_very_fast);
             case Speed.FAST:
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java
index 92995a8..9ed8de0 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java
@@ -25,6 +25,7 @@
 import android.net.wifi.WifiConfiguration;
 import android.os.Looper;
 import android.os.UserHandle;
+import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceViewHolder;
 import android.text.TextUtils;
@@ -47,7 +48,17 @@
             R.attr.state_metered
     };
 
-    private static final int[] wifi_friction_attributes = { R.attr.wifi_friction };
+    private static final int[] FRICTION_ATTRS = {
+            R.attr.wifi_friction
+    };
+
+    private static final int[] WIFI_CONNECTION_STRENGTH = {
+            R.string.accessibility_no_wifi,
+            R.string.accessibility_wifi_one_bar,
+            R.string.accessibility_wifi_two_bars,
+            R.string.accessibility_wifi_three_bars,
+            R.string.accessibility_wifi_signal_full
+    };
 
     private final StateListDrawable mFrictionSld;
     private final int mBadgePadding;
@@ -62,21 +73,13 @@
     private int mDefaultIconResId;
     private int mWifiSpeed = NetworkBadging.BADGING_NONE;
 
-    static final int[] WIFI_CONNECTION_STRENGTH = {
-            R.string.accessibility_no_wifi,
-            R.string.accessibility_wifi_one_bar,
-            R.string.accessibility_wifi_two_bars,
-            R.string.accessibility_wifi_three_bars,
-            R.string.accessibility_wifi_signal_full
-    };
-
     public static String generatePreferenceKey(AccessPoint accessPoint) {
         StringBuilder builder = new StringBuilder();
 
-        if (TextUtils.isEmpty(accessPoint.getBssid())) {
-            builder.append(accessPoint.getSsidStr());
-        } else {
+        if (TextUtils.isEmpty(accessPoint.getSsidStr())) {
             builder.append(accessPoint.getBssid());
+        } else {
+            builder.append(accessPoint.getSsidStr());
         }
 
         builder.append(',').append(accessPoint.getSecurity());
@@ -103,7 +106,7 @@
 
         TypedArray frictionSld;
         try {
-            frictionSld = context.getTheme().obtainStyledAttributes(wifi_friction_attributes);
+            frictionSld = context.getTheme().obtainStyledAttributes(FRICTION_ATTRS);
         } catch (Resources.NotFoundException e) {
             // Fallback for platforms that do not need friction icon resources.
             frictionSld = null;
@@ -129,7 +132,7 @@
 
         TypedArray frictionSld;
         try {
-            frictionSld = context.getTheme().obtainStyledAttributes(wifi_friction_attributes);
+            frictionSld = context.getTheme().obtainStyledAttributes(FRICTION_ATTRS);
         } catch (Resources.NotFoundException e) {
             // Fallback for platforms that do not need friction icon resources.
             frictionSld = null;
@@ -157,7 +160,7 @@
             drawable.setLevel(mLevel);
         }
 
-        mTitleView = (TextView) view.findViewById(com.android.internal.R.id.title);
+        mTitleView = (TextView) view.findViewById(android.R.id.title);
         if (mTitleView != null) {
             // Attach to the end of the title view
             mTitleView.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, mBadge, null);
@@ -228,12 +231,7 @@
      * Updates the title and summary; may indirectly call notifyChanged().
      */
     public void refresh() {
-        if (mForSavedNetworks) {
-            setTitle(mAccessPoint.getConfigName());
-        } else {
-            setTitle(mAccessPoint.getSsid());
-        }
-
+        setTitle(this, mAccessPoint, mForSavedNetworks);
         final Context context = getContext();
         int level = mAccessPoint.getLevel();
         int wifiSpeed = mAccessPoint.getSpeed();
@@ -249,14 +247,7 @@
         setSummary(mForSavedNetworks ? mAccessPoint.getSavedNetworkSummary()
                 : mAccessPoint.getSettingsSummary());
 
-        mContentDescription = getTitle();
-        if (getSummary() != null) {
-            mContentDescription = TextUtils.concat(mContentDescription, ",", getSummary());
-        }
-        if (level >= 0 && level < WIFI_CONNECTION_STRENGTH.length) {
-            mContentDescription = TextUtils.concat(mContentDescription, ",",
-                    getContext().getString(WIFI_CONNECTION_STRENGTH[level]));
-        }
+        mContentDescription = buildContentDescription(getContext(), this /* pref */, mAccessPoint);
     }
 
     @Override
@@ -269,6 +260,36 @@
         }
     }
 
+    @VisibleForTesting
+    static void setTitle(AccessPointPreference preference, AccessPoint ap, boolean savedNetworks) {
+        if (savedNetworks) {
+            preference.setTitle(ap.getConfigName());
+        } else {
+            preference.setTitle(ap.getSsidStr());
+        }
+    }
+
+    /**
+     * Helper method to generate content description string.
+     */
+    @VisibleForTesting
+    static CharSequence buildContentDescription(Context context, Preference pref, AccessPoint ap) {
+        CharSequence contentDescription = pref.getTitle();
+        final CharSequence summary = pref.getSummary();
+        if (!TextUtils.isEmpty(summary)) {
+            contentDescription = TextUtils.concat(contentDescription, ",", summary);
+        }
+        int level = ap.getLevel();
+        if (level >= 0 && level < WIFI_CONNECTION_STRENGTH.length) {
+            contentDescription = TextUtils.concat(contentDescription, ",",
+                    context.getString(WIFI_CONNECTION_STRENGTH[level]));
+        }
+        return TextUtils.concat(contentDescription, ",",
+                ap.getSecurity() == AccessPoint.SECURITY_NONE
+                        ? context.getString(R.string.accessibility_wifi_security_type_none)
+                        : context.getString(R.string.accessibility_wifi_security_type_secured));
+    }
+
     public void onLevelChanged() {
         postNotifyChanged();
     }
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java b/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java
index 3413f24..3dec1d3 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java
@@ -19,11 +19,16 @@
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
+import android.net.wifi.ScanResult;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiInfo;
 import android.os.Bundle;
 import android.support.annotation.Keep;
 
+import com.android.settingslib.wifi.AccessPoint.Speed;
+
+import java.util.ArrayList;
+
 /**
 * Build and return a valid AccessPoint.
 *
@@ -39,6 +44,7 @@
 
     // set some sensible defaults
     private String mBssid = null;
+    private int mSpeed = Speed.NONE;
     private int mRssi = AccessPoint.UNREACHABLE_RSSI;
     private int mNetworkId = WifiConfiguration.INVALID_NETWORK_ID;
     private String ssid = "TestSsid";
@@ -48,8 +54,12 @@
     private int mSecurity = AccessPoint.SECURITY_NONE;
     private WifiConfiguration mWifiConfig;
     private WifiInfo mWifiInfo;
+    private boolean mIsCarrierAp = false;
+    private String mCarrierName = null;
 
     Context mContext;
+    private ArrayList<ScanResult> mScanResultCache;
+    private ArrayList<TimestampedScoredNetwork> mScoredNetworkCache;
 
     @Keep
     public TestAccessPointBuilder(Context context) {
@@ -74,7 +84,18 @@
         if (mProviderFriendlyName != null) {
             bundle.putString(AccessPoint.KEY_PROVIDER_FRIENDLY_NAME, mProviderFriendlyName);
         }
+        if (mScanResultCache != null) {
+            bundle.putParcelableArrayList(AccessPoint.KEY_SCANRESULTCACHE, mScanResultCache);
+        }
+        if (mScoredNetworkCache != null) {
+            bundle.putParcelableArrayList(AccessPoint.KEY_SCOREDNETWORKCACHE, mScoredNetworkCache);
+        }
         bundle.putInt(AccessPoint.KEY_SECURITY, mSecurity);
+        bundle.putInt(AccessPoint.KEY_SPEED, mSpeed);
+        bundle.putBoolean(AccessPoint.KEY_IS_CARRIER_AP, mIsCarrierAp);
+        if (mCarrierName != null) {
+            bundle.putString(AccessPoint.KEY_CARRIER_NAME, mCarrierName);
+        }
 
         AccessPoint ap = new AccessPoint(mContext, bundle);
         ap.setRssi(mRssi);
@@ -128,6 +149,11 @@
         return this;
     }
 
+    public TestAccessPointBuilder setSpeed(int speed) {
+        mSpeed = speed;
+        return this;
+    }
+
     /**
     * Set whether the AccessPoint is reachable.
     * Side effect: if the signal level was not previously set,
@@ -202,4 +228,25 @@
         mBssid = bssid;
         return this;
     }
+
+    public TestAccessPointBuilder setScanResultCache(ArrayList<ScanResult> scanResultCache) {
+        mScanResultCache = scanResultCache;
+        return this;
+    }
+
+    public TestAccessPointBuilder setIsCarrierAp(boolean isCarrierAp) {
+        mIsCarrierAp = isCarrierAp;
+        return this;
+    }
+
+    public TestAccessPointBuilder setCarrierName(String carrierName) {
+        mCarrierName = carrierName;
+        return this;
+    }
+
+    public TestAccessPointBuilder setScoredNetworkCache(
+            ArrayList<TimestampedScoredNetwork> scoredNetworkCache) {
+        mScoredNetworkCache = scoredNetworkCache;
+        return this;
+    }
 }
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/TimestampedScoredNetwork.java b/packages/SettingsLib/src/com/android/settingslib/wifi/TimestampedScoredNetwork.java
new file mode 100644
index 0000000..1286d57
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/TimestampedScoredNetwork.java
@@ -0,0 +1,76 @@
+/*
+ * 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.settingslib.wifi;
+
+import android.net.ScoredNetwork;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Data encapsulation object to associate a time with a {@link ScoredNetwork}
+ */
+class TimestampedScoredNetwork implements Parcelable {
+    private ScoredNetwork mScore;
+    private long mUpdatedTimestampMillis;
+
+    TimestampedScoredNetwork(ScoredNetwork score, long updatedTimestampMillis) {
+        mScore = score;
+        mUpdatedTimestampMillis = updatedTimestampMillis;
+    }
+
+    protected TimestampedScoredNetwork(Parcel in) {
+        mScore = in.readParcelable(ScoredNetwork.class.getClassLoader());
+        mUpdatedTimestampMillis = in.readLong();
+    }
+
+    public void update(ScoredNetwork score, long updatedTimestampMillis) {
+        mScore = score;
+        mUpdatedTimestampMillis = updatedTimestampMillis;
+    }
+
+    public ScoredNetwork getScore() {
+        return mScore;
+    }
+
+    public long getUpdatedTimestampMillis() {
+        return mUpdatedTimestampMillis;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeParcelable(mScore, flags);
+        dest.writeLong(mUpdatedTimestampMillis);
+    }
+
+    public static final Creator<TimestampedScoredNetwork> CREATOR =
+            new Creator<TimestampedScoredNetwork>() {
+                @Override
+                public TimestampedScoredNetwork createFromParcel(Parcel in) {
+                    return new TimestampedScoredNetwork(in);
+                }
+
+                @Override
+                public TimestampedScoredNetwork[] newArray(int size) {
+                    return new TimestampedScoredNetwork[size];
+                }
+            };
+}
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
index f8e2f8b..3c664b0 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
@@ -20,7 +20,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.database.ContentObserver;
 import android.net.ConnectivityManager;
 import android.net.Network;
 import android.net.NetworkCapabilities;
@@ -41,6 +40,7 @@
 import android.os.Message;
 import android.provider.Settings;
 import android.support.annotation.GuardedBy;
+import android.text.format.DateUtils;
 import android.util.ArraySet;
 import android.util.Log;
 import android.util.SparseArray;
@@ -65,14 +65,22 @@
  * Tracks saved or available wifi networks and their state.
  */
 public class WifiTracker {
-    // TODO(b/36733768): Remove flag includeSaved and includePasspoints.
+    /**
+     * Default maximum age in millis of cached scored networks in
+     * {@link AccessPoint#mScoredNetworkCache} to be used for speed label generation.
+     */
+    private static final long DEFAULT_MAX_CACHED_SCORE_AGE_MILLIS = 20 * DateUtils.MINUTE_IN_MILLIS;
 
     private static final String TAG = "WifiTracker";
-    private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
+    private static final boolean DBG() {
+        return Log.isLoggable(TAG, Log.DEBUG);
+    }
 
     /** verbose logging flag. this flag is set thru developer debugging options
      * and used so as to assist with in-the-field WiFi connectivity debugging  */
-    public static int sVerboseLogging = 0;
+    public static boolean sVerboseLogging;
+
+    // TODO(b/36733768): Remove flag includeSaved and includePasspoints.
 
     // TODO: Allow control of this?
     // Combo scans can take 5-6s to complete - set to 10s.
@@ -136,7 +144,7 @@
     private final NetworkScoreManager mNetworkScoreManager;
     private final WifiNetworkScoreCache mScoreCache;
     private boolean mNetworkScoringUiEnabled;
-    private final ContentObserver mObserver;
+    private long mMaxSpeedLabelScoreCacheAge;
 
     @GuardedBy("mLock")
     private final Set<NetworkKey> mRequestedScores = new ArraySet<>();
@@ -195,7 +203,7 @@
         mConnectivityManager = connectivityManager;
 
         // check if verbose logging has been turned on or off
-        sVerboseLogging = mWifiManager.getVerboseLoggingLevel();
+        sVerboseLogging = (mWifiManager.getVerboseLoggingLevel() > 0);
 
         mFilter = new IntentFilter();
         mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
@@ -227,16 +235,6 @@
                 updateNetworkScores();
             }
         });
-
-        mObserver = new ContentObserver(mWorkHandler) {
-            @Override
-            public void onChange(boolean selfChange) {
-                mNetworkScoringUiEnabled =
-                        Settings.Global.getInt(
-                                mContext.getContentResolver(),
-                                Settings.Global.NETWORK_SCORING_UI_ENABLED, 0) == 1;
-            }
-        };
     }
 
     /** Synchronously update the list of access points with the latest information. */
@@ -248,20 +246,20 @@
             mLastNetworkInfo = mConnectivityManager.getNetworkInfo(mWifiManager.getCurrentNetwork());
 
             final List<ScanResult> newScanResults = mWifiManager.getScanResults();
+            if (sVerboseLogging) {
+                Log.i(TAG, "Fetched scan results: " + newScanResults);
+            }
+
             List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks();
             mInternalAccessPoints.clear();
             updateAccessPointsLocked(newScanResults, configs);
 
-            if (DBG) {
-                Log.d(TAG, "force update - internal access point list:\n" + mInternalAccessPoints);
-            }
-
             // Synchronously copy access points
             mMainHandler.removeMessages(MainHandler.MSG_ACCESS_POINT_CHANGED);
             mMainHandler.handleMessage(
                     Message.obtain(mMainHandler, MainHandler.MSG_ACCESS_POINT_CHANGED));
-            if (DBG) {
-                Log.d(TAG, "force update - external access point list:\n" + mAccessPoints);
+            if (sVerboseLogging) {
+                Log.i(TAG, "force update - external access point list:\n" + mAccessPoints);
             }
         }
     }
@@ -312,11 +310,16 @@
         synchronized (mLock) {
             registerScoreCache();
 
-            mContext.getContentResolver().registerContentObserver(
-                    Settings.Global.getUriFor(Settings.Global.NETWORK_SCORING_UI_ENABLED),
-                    false /* notifyForDescendants */,
-                    mObserver);
-            mObserver.onChange(false /* selfChange */); // Set mScoringUiEnabled
+            mNetworkScoringUiEnabled =
+                    Settings.Global.getInt(
+                            mContext.getContentResolver(),
+                            Settings.Global.NETWORK_SCORING_UI_ENABLED, 0) == 1;
+
+            mMaxSpeedLabelScoreCacheAge =
+                    Settings.Global.getLong(
+                            mContext.getContentResolver(),
+                            Settings.Global.SPEED_LABEL_CACHE_EVICTION_AGE_MILLIS,
+                            DEFAULT_MAX_CACHED_SCORE_AGE_MILLIS);
 
             resumeScanning();
             if (!mRegistered) {
@@ -339,7 +342,7 @@
     private void requestScoresForNetworkKeys(Collection<NetworkKey> keys) {
         if (keys.isEmpty()) return;
 
-        if (DBG) {
+        if (DBG()) {
             Log.d(TAG, "Requesting scores for Network Keys: " + keys);
         }
         mNetworkScoreManager.requestScores(keys.toArray(new NetworkKey[keys.size()]));
@@ -368,7 +371,6 @@
             }
             unregisterScoreCache();
             pauseScanning();
-            mContext.getContentResolver().unregisterContentObserver(mObserver);
 
             mWorkHandler.removePendingMessages();
             mMainHandler.removePendingMessages();
@@ -444,19 +446,19 @@
         }
 
         if (mScanId > NUM_SCANS_TO_CONFIRM_AP_LOSS) {
-            if (DBG) Log.d(TAG, "------ Dumping SSIDs that were expired on this scan ------");
+            if (DBG()) Log.d(TAG, "------ Dumping SSIDs that were expired on this scan ------");
             Integer threshold = mScanId - NUM_SCANS_TO_CONFIRM_AP_LOSS;
             for (Iterator<Map.Entry<String, Integer>> it = mSeenBssids.entrySet().iterator();
                     it.hasNext(); /* nothing */) {
                 Map.Entry<String, Integer> e = it.next();
                 if (e.getValue() < threshold) {
                     ScanResult result = mScanResultCache.get(e.getKey());
-                    if (DBG) Log.d(TAG, "Removing " + e.getKey() + ":(" + result.SSID + ")");
+                    if (DBG()) Log.d(TAG, "Removing " + e.getKey() + ":(" + result.SSID + ")");
                     mScanResultCache.remove(e.getKey());
                     it.remove();
                 }
             }
-            if (DBG) Log.d(TAG, "---- Done Dumping SSIDs that were expired on this scan ----");
+            if (DBG()) Log.d(TAG, "---- Done Dumping SSIDs that were expired on this scan ----");
         }
 
         return mScanResultCache.values();
@@ -483,6 +485,9 @@
     private void updateAccessPoints() {
         List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks();
         final List<ScanResult> newScanResults = mWifiManager.getScanResults();
+        if (sVerboseLogging) {
+            Log.i(TAG, "Fetched scan results: " + newScanResults);
+        }
 
         synchronized (mLock) {
             if(!mStaleScanResults) {
@@ -604,14 +609,14 @@
 
         requestScoresForNetworkKeys(scoresToRequest);
         for (AccessPoint ap : accessPoints) {
-            ap.update(mScoreCache, mNetworkScoringUiEnabled);
+            ap.update(mScoreCache, mNetworkScoringUiEnabled, mMaxSpeedLabelScoreCacheAge);
         }
 
         // Pre-sort accessPoints to speed preference insertion
         Collections.sort(accessPoints);
 
         // Log accesspoints that were deleted
-        if (DBG) {
+        if (DBG()) {
             Log.d(TAG, "------ Dumping SSIDs that were not seen on this scan ------");
             for (AccessPoint prevAccessPoint : mInternalAccessPoints) {
                 if (prevAccessPoint.getSsid() == null)
@@ -619,7 +624,7 @@
                 String prevSsid = prevAccessPoint.getSsidStr();
                 boolean found = false;
                 for (AccessPoint newAccessPoint : accessPoints) {
-                    if (newAccessPoint.getSsid() != null && newAccessPoint.getSsid()
+                    if (newAccessPoint.getSsidStr() != null && newAccessPoint.getSsidStr()
                             .equals(prevSsid)) {
                         found = true;
                         break;
@@ -671,24 +676,23 @@
     private void updateNetworkInfo(NetworkInfo networkInfo) {
         /* sticky broadcasts can call this when wifi is disabled */
         if (!mWifiManager.isWifiEnabled()) {
-            mMainHandler.sendEmptyMessage(MainHandler.MSG_PAUSE_SCANNING);
             clearAccessPointsAndConditionallyUpdate();
             return;
         }
 
-        if (networkInfo != null &&
-                networkInfo.getDetailedState() == DetailedState.OBTAINING_IPADDR) {
-            mMainHandler.sendEmptyMessage(MainHandler.MSG_PAUSE_SCANNING);
-        } else {
-            mMainHandler.sendEmptyMessage(MainHandler.MSG_RESUME_SCANNING);
-        }
-
         if (networkInfo != null) {
             mLastNetworkInfo = networkInfo;
+            if (DBG()) {
+                Log.d(TAG, "mLastNetworkInfo set: " + mLastNetworkInfo);
+            }
         }
 
         WifiConfiguration connectionConfig = null;
+
         mLastInfo = mWifiManager.getConnectionInfo();
+        if (DBG()) {
+            Log.d(TAG, "mLastInfo set as: " + mLastInfo);
+        }
         if (mLastInfo != null) {
             connectionConfig = getWifiConfigurationForNetworkId(mLastInfo.getNetworkId(),
                     mWifiManager.getConfiguredNetworks());
@@ -705,14 +709,13 @@
                     updated = true;
                     if (previouslyConnected != ap.isActive()) reorder = true;
                 }
-                if (ap.update(mScoreCache, mNetworkScoringUiEnabled)) {
+                if (ap.update(mScoreCache, mNetworkScoringUiEnabled, mMaxSpeedLabelScoreCacheAge)) {
                     reorder = true;
                     updated = true;
                 }
             }
 
             if (reorder) Collections.sort(mInternalAccessPoints);
-
             if (updated) mMainHandler.sendEmptyMessage(MainHandler.MSG_ACCESS_POINT_CHANGED);
         }
     }
@@ -739,7 +742,8 @@
         synchronized (mLock) {
             boolean updated = false;
             for (int i = 0; i < mInternalAccessPoints.size(); i++) {
-                if (mInternalAccessPoints.get(i).update(mScoreCache, mNetworkScoringUiEnabled)) {
+                if (mInternalAccessPoints.get(i).update(
+                        mScoreCache, mNetworkScoringUiEnabled, mMaxSpeedLabelScoreCacheAge)) {
                     updated = true;
                 }
             }
@@ -860,6 +864,9 @@
                     if (mScanner != null) {
                         mScanner.pause();
                     }
+                    synchronized (mLock) {
+                        mStaleScanResults = true;
+                    }
                     break;
             }
         }
@@ -922,6 +929,9 @@
                         if (mScanner != null) {
                             mScanner.pause();
                         }
+                        synchronized (mLock) {
+                            mStaleScanResults = true;
+                        }
                     }
                     mMainHandler.obtainMessage(MainHandler.MSG_WIFI_STATE_CHANGED, msg.arg1, 0)
                             .sendToTarget();
@@ -976,7 +986,7 @@
                 }
                 return;
             }
-            sendEmptyMessageDelayed(0, WIFI_RESCAN_INTERVAL_MS);
+            sendEmptyMessageDelayed(MSG_SCAN, WIFI_RESCAN_INTERVAL_MS);
         }
     }
 
@@ -1069,10 +1079,12 @@
             oldAccessPoints.put(accessPoint.mId, accessPoint);
         }
 
-        if (DBG) {
-            Log.d(TAG, "Starting to copy AP items on the MainHandler");
-        }
         synchronized (mLock) {
+            if (DBG()) {
+                Log.d(TAG, "Starting to copy AP items on the MainHandler. Internal APs: "
+                        + mInternalAccessPoints);
+            }
+
             if (notifyListeners) {
                 notificationMap = mAccessPointListenerAdapter.mPendingNotifications.clone();
             }
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/applications/ApplicationsStateTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/applications/ApplicationsStateTest.java
index fed18fa..d9ac262 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/applications/ApplicationsStateTest.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/applications/ApplicationsStateTest.java
@@ -103,6 +103,13 @@
     }
 
     @Test
+    public void testOtherAppsRejectsImageApp() {
+        mEntry.info.category = ApplicationInfo.CATEGORY_IMAGE;
+
+        assertThat(ApplicationsState.FILTER_OTHER_APPS.filterApp(mEntry)).isFalse();
+    }
+
+    @Test
     public void testOtherAppsAcceptsDefaultCategory() {
         mEntry.info.category = ApplicationInfo.CATEGORY_UNDEFINED;
 
@@ -110,6 +117,27 @@
     }
 
     @Test
+    public void testPhotosFilterAcceptsFilter() {
+        mEntry.info.category = ApplicationInfo.CATEGORY_IMAGE;
+
+        assertThat(ApplicationsState.FILTER_PHOTOS.filterApp(mEntry)).isTrue();
+    }
+
+    @Test
+    public void testPhotosFilterRejectsNotPhotos() {
+        mEntry.info.category = ApplicationInfo.CATEGORY_VIDEO;
+
+        assertThat(ApplicationsState.FILTER_PHOTOS.filterApp(mEntry)).isFalse();
+    }
+
+    @Test
+    public void testPhotosFilterRejectsDefaultCategory() {
+        mEntry.info.category = ApplicationInfo.CATEGORY_UNDEFINED;
+
+        assertThat(ApplicationsState.FILTER_PHOTOS.filterApp(mEntry)).isFalse();
+    }
+
+    @Test
     public void testDownloadAndLauncherAndInstantAcceptsCorrectApps() {
         // should include instant apps
         mEntry.isHomeApp = false;
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/applications/StorageStatsSourceTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/applications/StorageStatsSourceTest.java
new file mode 100644
index 0000000..3dabe99
--- /dev/null
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/applications/StorageStatsSourceTest.java
@@ -0,0 +1,41 @@
+/*
+ * 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.settingslib.applications;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.usage.StorageStats;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public class StorageStatsSourceTest {
+    @Test
+    public void AppStorageStatsImpl_totalCorrectly() {
+        StorageStats storageStats = new StorageStats();
+        storageStats.cacheBytes = 1;
+        storageStats.codeBytes = 10;
+        storageStats.dataBytes = 100;
+        StorageStatsSource.AppStorageStatsImpl stats = new StorageStatsSource.AppStorageStatsImpl(
+                storageStats);
+
+        // Note that this does not double add the cache (111).
+        assertThat(stats.getTotalBytes()).isEqualTo(110);
+    }
+}
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/utils/ZoneGetterTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/utils/ZoneGetterTest.java
index a3345ee..0ec75ec 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/utils/ZoneGetterTest.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/utils/ZoneGetterTest.java
@@ -36,6 +36,8 @@
 public class ZoneGetterTest {
     private static final String TIME_ZONE_LONDON_ID = "Europe/London";
     private static final String TIME_ZONE_LA_ID = "America/Los_Angeles";
+    private static final String TIME_ZONE_ALGIERS_ID = "Africa/Algiers";
+    private static final String TIME_ZONE_CEUTA_ID = "Africa/Ceuta";
     private Locale mLocaleEnUs;
     private Calendar mCalendar;
 
@@ -59,6 +61,16 @@
     }
 
     @Test
+    public void getTimeZoneOffsetAndName_setAlgiers_returnCentralEuropeanStandardTime() {
+        testTimeZoneOffsetAndNameInner(TIME_ZONE_ALGIERS_ID, "Central European Standard Time");
+    }
+
+    @Test
+    public void getTimeZoneOffsetAndName_setCeuta_returnCentralEuropeanSummerTime() {
+        testTimeZoneOffsetAndNameInner(TIME_ZONE_CEUTA_ID, "Central European Summer Time");
+    }
+
+    @Test
     public void getZonesList_checkTypes() {
         final List<Map<String, Object>> zones =
                 ZoneGetter.getZonesList(InstrumentationRegistry.getContext());
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
index 88d3a32..230b200 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
@@ -33,6 +33,7 @@
 import android.net.WifiKey;
 import android.net.wifi.ScanResult;
 import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiEnterpriseConfig;
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiNetworkScoreCache;
 import android.net.wifi.WifiSsid;
@@ -44,9 +45,11 @@
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
 import android.text.SpannableString;
+import android.text.format.DateUtils;
 import android.text.style.TtsSpan;
 
 import com.android.settingslib.R;
+import com.android.settingslib.wifi.AccessPoint.Speed;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -55,21 +58,43 @@
 import org.mockito.MockitoAnnotations;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 
 @SmallTest
 @RunWith(AndroidJUnit4.class)
 public class AccessPointTest {
 
-    private static final String TEST_SSID = "test_ssid";
+    private static final String TEST_SSID = "\"test_ssid\"";
+    private static final int NUM_SCAN_RESULTS = 5;
+
+    private static final ArrayList<ScanResult> SCAN_RESULTS = buildScanResultCache();
+
+    private static final RssiCurve FAST_BADGE_CURVE =
+            new RssiCurve(-150, 10, new byte[]{Speed.FAST});
+    public static final String TEST_BSSID = "00:00:00:00:00:00";
+    private static final long MAX_SCORE_CACHE_AGE_MILLIS =
+            20 * DateUtils.MINUTE_IN_MILLIS;;
+
     private Context mContext;
     @Mock private RssiCurve mockBadgeCurve;
     @Mock private WifiNetworkScoreCache mockWifiNetworkScoreCache;
 
+    private static ScanResult createScanResult(String ssid, String bssid, int rssi) {
+        ScanResult scanResult = new ScanResult();
+        scanResult.SSID = ssid;
+        scanResult.level = rssi;
+        scanResult.BSSID = bssid;
+        scanResult.timestamp = SystemClock.elapsedRealtime() * 1000;
+        scanResult.capabilities = "";
+        return scanResult;
+    }
+
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = InstrumentationRegistry.getTargetContext();
+        WifiTracker.sVerboseLogging = false;
     }
 
     @Test
@@ -143,7 +168,13 @@
         assertSortingWorks(savedAp, notSavedAp);
     }
 
-    //TODO: add tests for mRankingScore sort order if ranking is exposed
+    @Test
+    public void testCompareTo_GivesHighSpeedBeforeLowSpeed() {
+        AccessPoint fastAp = new TestAccessPointBuilder(mContext).setSpeed(Speed.FAST).build();
+        AccessPoint slowAp = new TestAccessPointBuilder(mContext).setSpeed(Speed.SLOW).build();
+
+        assertSortingWorks(fastAp, slowAp);
+    }
 
     @Test
     public void testCompareTo_GivesHighLevelBeforeLowLevel() {
@@ -298,23 +329,6 @@
     }
 
     @Test
-    public void testIsMetered_returnTrueWhenNetworkInfoIsMetered() {
-        WifiConfiguration configuration = createWifiConfiguration();
-
-        NetworkInfo networkInfo =
-                new NetworkInfo(ConnectivityManager.TYPE_WIFI, 2, "WIFI", "WIFI_SUBTYPE");
-        networkInfo.setMetered(true);
-        AccessPoint accessPoint = new AccessPoint(mContext, configuration);
-        WifiInfo wifiInfo = new WifiInfo();
-        wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(configuration.SSID));
-        wifiInfo.setBSSID(configuration.BSSID);
-        wifiInfo.setNetworkId(configuration.networkId);
-        accessPoint.update(configuration, wifiInfo, networkInfo);
-
-        assertThat(accessPoint.isMetered()).isTrue();
-    }
-
-    @Test
     public void testIsMetered_returnTrueWhenScoredNetworkIsMetered() {
         AccessPoint ap = createAccessPointWithScanResultCache();
 
@@ -324,7 +338,8 @@
                                 null /* NetworkKey */,
                                 null /* rssiCurve */,
                                 true /* metered */));
-        ap.update(mockWifiNetworkScoreCache, false /* scoringUiEnabled */);
+        ap.update(mockWifiNetworkScoreCache, false /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
 
         assertThat(ap.isMetered()).isTrue();
     }
@@ -353,7 +368,8 @@
                 .thenReturn(buildScoredNetworkWithMockBadgeCurve());
         when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.VERY_FAST);
 
-        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */);
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
 
         assertThat(ap.getSpeed()).isEqualTo(AccessPoint.Speed.VERY_FAST);
         assertThat(ap.getSpeedLabel())
@@ -368,7 +384,9 @@
                 .thenReturn(buildScoredNetworkWithMockBadgeCurve());
         when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.FAST);
 
-        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */);
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
+
 
         assertThat(ap.getSpeed()).isEqualTo(AccessPoint.Speed.FAST);
         assertThat(ap.getSpeedLabel())
@@ -383,7 +401,8 @@
                 .thenReturn(buildScoredNetworkWithMockBadgeCurve());
         when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.MODERATE);
 
-        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */);
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
 
         assertThat(ap.getSpeed()).isEqualTo(AccessPoint.Speed.MODERATE);
         assertThat(ap.getSpeedLabel())
@@ -398,7 +417,8 @@
                 .thenReturn(buildScoredNetworkWithMockBadgeCurve());
         when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.SLOW);
 
-        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */);
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
 
         assertThat(ap.getSpeed()).isEqualTo(AccessPoint.Speed.SLOW);
         assertThat(ap.getSpeedLabel())
@@ -413,12 +433,33 @@
                 .thenReturn(buildScoredNetworkWithMockBadgeCurve());
         when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.VERY_FAST);
 
-        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */);
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
 
         assertThat(ap.getSummary()).isEqualTo(mContext.getString(R.string.speed_label_very_fast));
     }
 
     @Test
+    public void testVerboseSummaryString_showsScanResultSpeedLabel() {
+        WifiTracker.sVerboseLogging = true;
+
+        Bundle bundle = new Bundle();
+        ArrayList<ScanResult> scanResults = buildScanResultCache();
+        bundle.putParcelableArrayList(AccessPoint.KEY_SCANRESULTCACHE, scanResults);
+        AccessPoint ap = new AccessPoint(mContext, bundle);
+
+        when(mockWifiNetworkScoreCache.getScoredNetwork(any(ScanResult.class)))
+                .thenReturn(buildScoredNetworkWithMockBadgeCurve());
+        when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.VERY_FAST);
+
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
+        String summary = ap.verboseScanResultSummary(scanResults.get(0), null, 0);
+
+        assertThat(summary.contains(mContext.getString(R.string.speed_label_very_fast))).isTrue();
+    }
+
+    @Test
     public void testSummaryString_concatenatesSpeedLabel() {
         AccessPoint ap = createAccessPointWithScanResultCache();
         ap.update(new WifiConfiguration());
@@ -427,7 +468,8 @@
                 .thenReturn(buildScoredNetworkWithMockBadgeCurve());
         when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.VERY_FAST);
 
-        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */);
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
 
         String expectedString = mContext.getString(R.string.speed_label_very_fast) + " / "
                 + mContext.getString(R.string.wifi_remembered);
@@ -447,12 +489,86 @@
                 R.string.wifi_check_password_try_again));
     }
 
+    @Test
+    public void testSummaryString_showsAvaiableViaCarrier() {
+        String carrierName = "Test Carrier";
+        ScanResult result = new ScanResult();
+        result.BSSID = "00:11:22:33:44:55";
+        result.capabilities = "EAP";
+        result.isCarrierAp = true;
+        result.carrierApEapType = WifiEnterpriseConfig.Eap.SIM;
+        result.carrierName = carrierName;
+
+        AccessPoint ap = new AccessPoint(mContext, result);
+        assertThat(ap.getSummary()).isEqualTo(String.format(mContext.getString(
+                R.string.available_via_carrier), carrierName));
+        assertThat(ap.isCarrierAp()).isEqualTo(true);
+        assertThat(ap.getCarrierApEapType()).isEqualTo(WifiEnterpriseConfig.Eap.SIM);
+        assertThat(ap.getCarrierName()).isEqualTo(carrierName);
+    }
+
+    @Test
+    public void testSummaryString_showsConnectedViaCarrier() {
+        int networkId = 123;
+        int rssi = -55;
+        String carrierName = "Test Carrier";
+        WifiConfiguration config = new WifiConfiguration();
+        config.networkId = networkId;
+        WifiInfo wifiInfo = new WifiInfo();
+        wifiInfo.setNetworkId(networkId);
+        wifiInfo.setRssi(rssi);
+
+        NetworkInfo networkInfo =
+                new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
+        networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", "");
+
+        AccessPoint ap = new TestAccessPointBuilder(mContext)
+                .setNetworkInfo(networkInfo)
+                .setNetworkId(networkId)
+                .setRssi(rssi)
+                .setWifiInfo(wifiInfo)
+                .setIsCarrierAp(true)
+                .setCarrierName(carrierName)
+                .build();
+        assertThat(ap.getSummary()).isEqualTo(String.format(mContext.getString(
+                R.string.connected_via_carrier), carrierName));
+    }
+
+    @Test
+    public void testUpdateScanResultWithCarrierInfo() {
+        String ssid = "ssid";
+        AccessPoint ap = new TestAccessPointBuilder(mContext).setSsid(ssid).build();
+        assertThat(ap.isCarrierAp()).isEqualTo(false);
+        assertThat(ap.getCarrierApEapType()).isEqualTo(WifiEnterpriseConfig.Eap.NONE);
+        assertThat(ap.getCarrierName()).isEqualTo(null);
+
+        int carrierApEapType = WifiEnterpriseConfig.Eap.SIM;
+        String carrierName = "Test Carrier";
+        ScanResult scanResult = new ScanResult();
+        scanResult.SSID = ssid;
+        scanResult.BSSID = "00:11:22:33:44:55";
+        scanResult.capabilities = "";
+        scanResult.isCarrierAp = true;
+        scanResult.carrierApEapType = carrierApEapType;
+        scanResult.carrierName = carrierName;
+        assertThat(ap.update(scanResult, true /* evictOldScanresults */)).isTrue();
+
+        assertThat(ap.isCarrierAp()).isEqualTo(true);
+        assertThat(ap.getCarrierApEapType()).isEqualTo(carrierApEapType);
+        assertThat(ap.getCarrierName()).isEqualTo(carrierName);
+    }
+
     private ScoredNetwork buildScoredNetworkWithMockBadgeCurve() {
+        return buildScoredNetworkWithGivenBadgeCurve(mockBadgeCurve);
+
+    }
+
+    private ScoredNetwork buildScoredNetworkWithGivenBadgeCurve(RssiCurve badgeCurve) {
         Bundle attr1 = new Bundle();
-        attr1.putParcelable(ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE, mockBadgeCurve);
+        attr1.putParcelable(ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE, badgeCurve);
         return new ScoredNetwork(
-                new NetworkKey(new WifiKey("\"ssid\"", "00:00:00:00:00:00")),
-                mockBadgeCurve,
+                new NetworkKey(new WifiKey(TEST_SSID, TEST_BSSID)),
+                badgeCurve,
                 false /* meteredHint */,
                 attr1);
 
@@ -460,18 +576,17 @@
 
     private AccessPoint createAccessPointWithScanResultCache() {
         Bundle bundle = new Bundle();
+        bundle.putParcelableArrayList(AccessPoint.KEY_SCANRESULTCACHE, SCAN_RESULTS);
+        return new AccessPoint(mContext, bundle);
+    }
+
+    private static ArrayList<ScanResult> buildScanResultCache() {
         ArrayList<ScanResult> scanResults = new ArrayList<>();
         for (int i = 0; i < 5; i++) {
-            ScanResult scanResult = new ScanResult();
-            scanResult.level = i;
-            scanResult.BSSID = "bssid-" + i;
-            scanResult.timestamp = SystemClock.elapsedRealtime() * 1000;
-            scanResult.capabilities = "";
+            ScanResult scanResult = createScanResult(TEST_SSID, "bssid-" + i, i);
             scanResults.add(scanResult);
         }
-
-        bundle.putParcelableArrayList(AccessPoint.KEY_SCANRESULTCACHE, scanResults);
-        return new AccessPoint(mContext, bundle);
+        return scanResults;
     }
 
     private WifiConfiguration createWifiConfiguration() {
@@ -482,8 +597,20 @@
         return configuration;
     }
 
+    private AccessPoint createApWithFastTimestampedScoredNetworkCache(
+            long elapsedTimeMillis) {
+        TimestampedScoredNetwork recentScore = new TimestampedScoredNetwork(
+                buildScoredNetworkWithGivenBadgeCurve(FAST_BADGE_CURVE),
+                elapsedTimeMillis);
+        return new TestAccessPointBuilder(mContext)
+                .setSsid(TEST_SSID)
+                .setScoredNetworkCache(
+                        new ArrayList<>(Arrays.asList(recentScore)))
+                .build();
+    }
+
     /**
-    * Assert that the first AccessPoint appears after the second AccessPoint
+    * Assert that the first AccessPoint appears before the second AccessPoint
     * once sorting has been completed.
     */
     private void assertSortingWorks(AccessPoint first, AccessPoint second) {
@@ -731,4 +858,202 @@
 
         ap.update(null, wifiInfo, networkInfo);
     }
+
+    @Test
+    public void testSpeedLabelAveragesAllBssidScores() {
+        AccessPoint ap = createAccessPointWithScanResultCache();
+
+        int speed1 = Speed.MODERATE;
+        RssiCurve badgeCurve1 = mock(RssiCurve.class);
+        when(badgeCurve1.lookupScore(anyInt())).thenReturn((byte) speed1);
+        when(mockWifiNetworkScoreCache.getScoredNetwork(SCAN_RESULTS.get(0)))
+                .thenReturn(buildScoredNetworkWithGivenBadgeCurve(badgeCurve1));
+        int speed2 = Speed.VERY_FAST;
+        RssiCurve badgeCurve2 = mock(RssiCurve.class);
+        when(badgeCurve2.lookupScore(anyInt())).thenReturn((byte) speed2);
+        when(mockWifiNetworkScoreCache.getScoredNetwork(SCAN_RESULTS.get(1)))
+                .thenReturn(buildScoredNetworkWithGivenBadgeCurve(badgeCurve2));
+
+        int expectedSpeed = (speed1 + speed2) / 2;
+
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
+
+        assertThat(ap.getSpeed()).isEqualTo(expectedSpeed);
+    }
+
+    @Test
+    public void testSpeedLabelAverageIgnoresNoSpeedScores() {
+        AccessPoint ap = createAccessPointWithScanResultCache();
+
+        int speed1 = Speed.VERY_FAST;
+        RssiCurve badgeCurve1 = mock(RssiCurve.class);
+        when(badgeCurve1.lookupScore(anyInt())).thenReturn((byte) speed1);
+        when(mockWifiNetworkScoreCache.getScoredNetwork(SCAN_RESULTS.get(0)))
+                .thenReturn(buildScoredNetworkWithGivenBadgeCurve(badgeCurve1));
+        int speed2 = Speed.NONE;
+        RssiCurve badgeCurve2 = mock(RssiCurve.class);
+        when(badgeCurve2.lookupScore(anyInt())).thenReturn((byte) speed2);
+        when(mockWifiNetworkScoreCache.getScoredNetwork(SCAN_RESULTS.get(1)))
+                .thenReturn(buildScoredNetworkWithGivenBadgeCurve(badgeCurve2));
+
+        ap.update(
+        mockWifiNetworkScoreCache, true /* scoringUiEnabled */, MAX_SCORE_CACHE_AGE_MILLIS);
+
+        assertThat(ap.getSpeed()).isEqualTo(speed1);
+    }
+
+    @Test
+    public void testSpeedLabelFallbackScoreIgnoresNullCurves() {
+        int rssi = -55;
+        String bssid = "00:00:00:00:00:00";
+        int networkId = 123;
+
+        WifiInfo info = new WifiInfo();
+        info.setRssi(rssi);
+        info.setSSID(WifiSsid.createFromAsciiEncoded(TEST_SSID));
+        info.setBSSID(bssid);
+        info.setNetworkId(networkId);
+
+        ArrayList<ScanResult> scanResults = new ArrayList<>();
+        ScanResult scanResultUnconnected = createScanResult(TEST_SSID, "11:11:11:11:11:11", rssi);
+        scanResults.add(scanResultUnconnected);
+
+        ScanResult scanResultConnected = createScanResult(TEST_SSID, bssid, rssi);
+        scanResults.add(scanResultConnected);
+
+        AccessPoint ap =
+                new TestAccessPointBuilder(mContext)
+                        .setActive(true)
+                        .setNetworkId(networkId)
+                        .setSsid(TEST_SSID)
+                        .setScanResultCache(scanResults)
+                        .setWifiInfo(info)
+                        .build();
+
+        int fallbackSpeed = Speed.SLOW;
+        when(mockWifiNetworkScoreCache.getScoredNetwork(scanResultUnconnected))
+                .thenReturn(buildScoredNetworkWithMockBadgeCurve());
+        when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) fallbackSpeed);
+
+        when(mockWifiNetworkScoreCache.getScoredNetwork(scanResultConnected))
+                .thenReturn(null);
+
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
+
+        assertThat(ap.getSpeed()).isEqualTo(fallbackSpeed);
+    }
+
+    @Test
+    public void testScoredNetworkCacheBundling() {
+        long timeMillis = SystemClock.elapsedRealtime();
+        AccessPoint ap = createApWithFastTimestampedScoredNetworkCache(timeMillis);
+        Bundle bundle = new Bundle();
+        ap.saveWifiState(bundle);
+
+        ArrayList<TimestampedScoredNetwork> list =
+                bundle.getParcelableArrayList(AccessPoint.KEY_SCOREDNETWORKCACHE);
+        assertThat(list).hasSize(1);
+        assertThat(list.get(0).getUpdatedTimestampMillis()).isEqualTo(timeMillis);
+
+        RssiCurve curve = list.get(0).getScore().attributes.getParcelable(
+                ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE);
+        assertThat(curve).isEqualTo(FAST_BADGE_CURVE);
+    }
+
+    @Test
+    public void testRecentNetworkScoresAreUsedForSpeedLabelGeneration() {
+        AccessPoint ap =
+                createApWithFastTimestampedScoredNetworkCache(SystemClock.elapsedRealtime());
+
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
+
+        assertThat(ap.getSpeed()).isEqualTo(Speed.FAST);
+    }
+
+    @Test
+    public void testNetworkScoresAreUsedForSpeedLabelGenerationWhenWithinAgeRange() {
+        long withinRangeTimeMillis =
+                SystemClock.elapsedRealtime() - (MAX_SCORE_CACHE_AGE_MILLIS - 10000);
+        AccessPoint ap =
+                createApWithFastTimestampedScoredNetworkCache(withinRangeTimeMillis);
+
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
+
+        assertThat(ap.getSpeed()).isEqualTo(Speed.FAST);
+    }
+
+    @Test
+    public void testOldNetworkScoresAreNotUsedForSpeedLabelGeneration() {
+        long tooOldTimeMillis =
+                SystemClock.elapsedRealtime() - (MAX_SCORE_CACHE_AGE_MILLIS + 1);
+        AccessPoint ap =
+                createApWithFastTimestampedScoredNetworkCache(tooOldTimeMillis);
+
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
+
+        assertThat(ap.getSpeed()).isEqualTo(Speed.NONE);
+    }
+
+    @Test
+    public void testUpdateScoresRefreshesScoredNetworkCacheTimestamps () {
+        long tooOldTimeMillis =
+                SystemClock.elapsedRealtime() - (MAX_SCORE_CACHE_AGE_MILLIS + 1);
+
+        ScoredNetwork scoredNetwork = buildScoredNetworkWithGivenBadgeCurve(FAST_BADGE_CURVE);
+        TimestampedScoredNetwork recentScore = new TimestampedScoredNetwork(
+                scoredNetwork,
+                tooOldTimeMillis);
+        AccessPoint ap = new TestAccessPointBuilder(mContext)
+                .setSsid(TEST_SSID)
+                .setBssid(TEST_BSSID)
+                .setActive(true)
+                .setScoredNetworkCache(
+                        new ArrayList(Arrays.asList(recentScore)))
+                .setScanResultCache(SCAN_RESULTS)
+                .build();
+
+        when(mockWifiNetworkScoreCache.getScoredNetwork(any(ScanResult.class)))
+                .thenReturn(scoredNetwork);
+
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
+
+        // Fast should still be returned since cache was updated with recent time
+        assertThat(ap.getSpeed()).isEqualTo(Speed.FAST);
+    }
+
+    @Test
+    public void testUpdateScoresRefreshesScoredNetworkCacheWithNewSpeed () {
+        long tooOldTimeMillis =
+                SystemClock.elapsedRealtime() - (MAX_SCORE_CACHE_AGE_MILLIS + 1);
+
+        ScoredNetwork scoredNetwork = buildScoredNetworkWithGivenBadgeCurve(FAST_BADGE_CURVE);
+        TimestampedScoredNetwork recentScore = new TimestampedScoredNetwork(
+                scoredNetwork,
+                tooOldTimeMillis);
+        AccessPoint ap = new TestAccessPointBuilder(mContext)
+                .setSsid(TEST_SSID)
+                .setBssid(TEST_BSSID)
+                .setActive(true)
+                .setScoredNetworkCache(
+                        new ArrayList(Arrays.asList(recentScore)))
+                .setScanResultCache(SCAN_RESULTS)
+                .build();
+
+        int newSpeed = Speed.MODERATE;
+        when(mockWifiNetworkScoreCache.getScoredNetwork(any(ScanResult.class)))
+                .thenReturn(buildScoredNetworkWithMockBadgeCurve());
+        when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) newSpeed);
+
+        ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */,
+                MAX_SCORE_CACHE_AGE_MILLIS);
+
+        // Fast should still be returned since cache was updated with recent time
+        assertThat(ap.getSpeed()).isEqualTo(newSpeed);
+    }
 }
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
index df6587e..7cce648 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
@@ -105,15 +105,30 @@
     private static final byte SCORE_2 = 15;
     private static final int BADGE_2 = AccessPoint.Speed.FAST;
 
-    private static final int CONNECTED_NETWORK_ID = 123;
+    // TODO(b/65594609): Convert mutable Data objects to instance variables / builder pattern
+    private static final int NETWORK_ID_1 = 123;
     private static final int CONNECTED_RSSI = -50;
     private static final WifiInfo CONNECTED_AP_1_INFO = new WifiInfo();
     static {
         CONNECTED_AP_1_INFO.setSSID(WifiSsid.createFromAsciiEncoded(SSID_1));
         CONNECTED_AP_1_INFO.setBSSID(BSSID_1);
-        CONNECTED_AP_1_INFO.setNetworkId(CONNECTED_NETWORK_ID);
+        CONNECTED_AP_1_INFO.setNetworkId(NETWORK_ID_1);
         CONNECTED_AP_1_INFO.setRssi(CONNECTED_RSSI);
     }
+    private static final WifiConfiguration CONFIGURATION_1 = new WifiConfiguration();
+    static {
+        CONFIGURATION_1.SSID = SSID_1;
+        CONFIGURATION_1.BSSID = BSSID_1;
+        CONFIGURATION_1.networkId = NETWORK_ID_1;
+    }
+
+    private static final int NETWORK_ID_2 = 2;
+    private static final WifiConfiguration CONFIGURATION_2 = new WifiConfiguration();
+    static {
+        CONFIGURATION_2.SSID = SSID_2;
+        CONFIGURATION_2.BSSID = BSSID_2;
+        CONFIGURATION_2.networkId = NETWORK_ID_2;
+    }
 
     @Captor ArgumentCaptor<WifiNetworkScoreCache> mScoreCacheCaptor;
     @Mock private ConnectivityManager mockConnectivityManager;
@@ -159,6 +174,8 @@
         when(mockWifiManager.isWifiEnabled()).thenReturn(true);
         when(mockWifiManager.getScanResults())
                 .thenReturn(Arrays.asList(buildScanResult1(), buildScanResult2()));
+        when(mockWifiManager.getConfiguredNetworks())
+                .thenReturn(Arrays.asList(CONFIGURATION_1, CONFIGURATION_2));
 
 
         when(mockCurve1.lookupScore(RSSI_1)).thenReturn(SCORE_1);
@@ -333,8 +350,7 @@
         WifiConfiguration configuration = new WifiConfiguration();
         configuration.SSID = SSID_1;
         configuration.BSSID = BSSID_1;
-        configuration.networkId = CONNECTED_NETWORK_ID;
-        when(mockWifiManager.getConfiguredNetworks()).thenReturn(Arrays.asList(configuration));
+        configuration.networkId = NETWORK_ID_1;
 
         NetworkInfo networkInfo = new NetworkInfo(
                 ConnectivityManager.TYPE_WIFI, 0, "Type Wifi", "subtype");
@@ -365,6 +381,24 @@
                 mainLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS));
     }
 
+    private void switchToNetwork2(WifiTracker tracker) throws InterruptedException {
+        NetworkInfo networkInfo = new NetworkInfo(
+                ConnectivityManager.TYPE_WIFI, 0, "Type Wifi", "subtype");
+        networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTING, "connecting", "test");
+
+        WifiInfo info = new WifiInfo();
+        info.setSSID(WifiSsid.createFromAsciiEncoded(SSID_2));
+        info.setBSSID(BSSID_2);
+        info.setRssi(CONNECTED_RSSI);
+        info.setNetworkId(NETWORK_ID_2);
+        when(mockWifiManager.getConnectionInfo()).thenReturn(info);
+
+        Intent intent = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+        intent.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo);
+        tracker.mReceiver.onReceive(mContext, intent);
+        waitForHandlersToProcessCurrentlyEnqueuedMessages(tracker);
+    }
+
     @Test
     public void testAccessPointListenerSetWhenLookingUpUsingScanResults() {
         ScanResult scanResult = new ScanResult();
@@ -722,12 +756,6 @@
 
         when(mockWifiManager.getConnectionInfo()).thenReturn(CONNECTED_AP_1_INFO);
 
-        WifiConfiguration configuration = new WifiConfiguration();
-        configuration.SSID = SSID_1;
-        configuration.BSSID = BSSID_1;
-        configuration.networkId = CONNECTED_NETWORK_ID;
-        when(mockWifiManager.getConfiguredNetworks()).thenReturn(Arrays.asList(configuration));
-
         NetworkInfo networkInfo = new NetworkInfo(
                 ConnectivityManager.TYPE_WIFI, 0, "Type Wifi", "subtype");
         networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "connected", "test");
@@ -881,4 +909,17 @@
         assertThat(tracker.isConnected()).isFalse();
         verify(mockWifiListener, times(2)).onConnectedChanged();
     }
+
+    @Test
+    public void updateNetworkInfoWithNewConnectedNetwork_switchesNetworks() throws Exception {
+        WifiTracker tracker = createTrackerWithScanResultsAndAccessPoint1Connected();
+
+        switchToNetwork2(tracker);
+
+        List<AccessPoint> aps = tracker.getAccessPoints();
+        assertThat(aps.get(0).getSsidStr()).isEqualTo(SSID_2);
+
+        assertThat(aps.get(0).isReachable()).isTrue();
+        assertThat(aps.get(1).isReachable()).isTrue();
+    }
 }
diff --git a/packages/SettingsLib/tests/robotests/Android.mk b/packages/SettingsLib/tests/robotests/Android.mk
index eca2052..55b635e 100644
--- a/packages/SettingsLib/tests/robotests/Android.mk
+++ b/packages/SettingsLib/tests/robotests/Android.mk
@@ -41,7 +41,7 @@
 
 # Include the testing libraries (JUnit4 + Robolectric libs).
 LOCAL_STATIC_JAVA_LIBRARIES := \
-    platform-system-robolectric \
+    mockito-robolectric-prebuilt \
     truth-prebuilt
 
 LOCAL_JAVA_LIBRARIES := \
diff --git a/packages/SettingsLib/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java b/packages/SettingsLib/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java
index 656ab86..14b0d59 100644
--- a/packages/SettingsLib/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java
+++ b/packages/SettingsLib/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java
@@ -21,5 +21,6 @@
  */
 public class BluetoothCodecConfig {
     public boolean isMandatoryCodec() { return true; }
-    public String getCodecName() { return null;}
+    public String getCodecName() { return null; }
+    public int getCodecType() { return -1; }
 }
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/SettingLibRobolectricTestRunner.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/SettingLibRobolectricTestRunner.java
index fd3b1dc6..482b788 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/SettingLibRobolectricTestRunner.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/SettingLibRobolectricTestRunner.java
@@ -20,6 +20,9 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.manifest.AndroidManifest;
 import org.robolectric.res.Fs;
+import org.robolectric.res.ResourcePath;
+
+import java.util.List;
 
 public class SettingLibRobolectricTestRunner extends RobolectricTestRunner {
 
@@ -36,10 +39,31 @@
         final String assetsDir = appRoot + config.assetDir();
 
         final AndroidManifest manifest = new AndroidManifest(Fs.fileFromPath(manifestPath),
-                Fs.fileFromPath(resDir), Fs.fileFromPath(assetsDir));
-
+                Fs.fileFromPath(resDir), Fs.fileFromPath(assetsDir)) {
+            @Override
+            public List<ResourcePath> getIncludedResourcePaths() {
+                List<ResourcePath> paths = super.getIncludedResourcePaths();
+                SettingLibRobolectricTestRunner.getIncludedResourcePaths(getPackageName(), paths);
+                return paths;
+            }
+        };
         manifest.setPackageName("com.android.settingslib");
         return manifest;
     }
 
+    static void getIncludedResourcePaths(String packageName, List<ResourcePath> paths) {
+        paths.add(new ResourcePath(
+                packageName,
+                Fs.fileFromPath("./frameworks/base/packages/SettingsLib/res"),
+                null));
+        paths.add(new ResourcePath(
+                packageName,
+                Fs.fileFromPath("./frameworks/base/core/res/res"),
+                null));
+        paths.add(new ResourcePath(
+                packageName,
+                Fs.fileFromPath("./frameworks/support/v7/appcompat/res"),
+                null));
+    }
+
 }
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java
index 07a0e11..4a73c1b 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java
@@ -21,6 +21,7 @@
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothProfile;
 import android.content.Context;
+import android.content.res.Resources;
 
 import com.android.settingslib.R;
 import com.android.settingslib.TestConfig;
@@ -133,6 +134,8 @@
     // Strings to use in fake resource lookups.
     private static String KNOWN_CODEC_LABEL = "Use high quality audio: %1$s";
     private static String UNKNOWN_CODEC_LABEL = "Use high quality audio";
+    private static String[] CODEC_NAMES =
+            new String[] { "Default", "SBC", "AAC", "aptX", "aptX HD", "LDAC" };
 
     /**
      * Helper for setting up several tests of getHighQualityAudioOptionLabel
@@ -147,6 +150,11 @@
         when(mContext.getString(eq(R.string.bluetooth_profile_a2dp_high_quality_unknown_codec)))
                 .thenReturn(UNKNOWN_CODEC_LABEL);
 
+        final Resources res = mock(Resources.class);
+        when(mContext.getResources()).thenReturn(res);
+        when(res.getStringArray(eq(R.array.bluetooth_a2dp_codec_titles)))
+                .thenReturn(CODEC_NAMES);
+
         // Most tests want to simulate optional codecs being supported by the device, so do that
         // by default here.
         when(mBluetoothA2dpWrapper.supportsOptionalCodecs(any())).thenReturn(
@@ -196,7 +204,8 @@
         when(status.getCodecsSelectableCapabilities()).thenReturn(configs);
 
         when(config.isMandatoryCodec()).thenReturn(false);
-        when(config.getCodecName()).thenReturn("PiedPiper");
+        when(config.getCodecType()).thenReturn(4);
+        when(config.getCodecName()).thenReturn("LDAC");
         assertThat(mProfile.getHighQualityAudioOptionLabel(mDevice)).isEqualTo(
                 String.format(KNOWN_CODEC_LABEL, config.getCodecName()));
     }
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java
index e2ebbeb..b1dbb0a 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java
@@ -17,8 +17,12 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.bluetooth.BluetoothAdapter;
@@ -42,6 +46,10 @@
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, resourceDir =
         "../../res")
 public class CachedBluetoothDeviceTest {
+    private final static String DEVICE_NAME = "TestName";
+    private final static String DEVICE_ALIAS = "TestAlias";
+    private final static String DEVICE_ADDRESS = "AA:BB:CC:DD:EE:FF";
+    private final static String DEVICE_ALIAS_NEW = "TestAliasNew";
     @Mock
     private LocalBluetoothAdapter mAdapter;
     @Mock
@@ -62,6 +70,7 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
+        when(mDevice.getAddress()).thenReturn(DEVICE_ADDRESS);
         when(mAdapter.getBluetoothState()).thenReturn(BluetoothAdapter.STATE_ON);
         when(mHfpProfile.isProfileReady()).thenReturn(true);
         when(mA2dpProfile.isProfileReady()).thenReturn(true);
@@ -152,4 +161,49 @@
         mCachedDevice.onProfileStateChanged(mHidProfile, BluetoothProfile.STATE_DISCONNECTED);
         assertThat(mCachedDevice.getConnectionSummary()).isNull();
     }
+
+    @Test
+    public void testDeviceName_testAliasNameAvailable() {
+        when(mDevice.getAliasName()).thenReturn(DEVICE_ALIAS);
+        when(mDevice.getName()).thenReturn(DEVICE_NAME);
+        CachedBluetoothDevice cachedBluetoothDevice =
+                new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice);
+        // Verify alias is returned on getName
+        assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ALIAS);
+        // Verify device is visible
+        assertThat(cachedBluetoothDevice.hasHumanReadableName()).isTrue();
+    }
+
+    @Test
+    public void testDeviceName_testNameNotAvailable() {
+        CachedBluetoothDevice cachedBluetoothDevice =
+                new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice);
+        // Verify device address is returned on getName
+        assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ADDRESS);
+        // Verify device is not visible
+        assertThat(cachedBluetoothDevice.hasHumanReadableName()).isFalse();
+    }
+
+    @Test
+    public void testDeviceName_testRenameDevice() {
+        final String[] alias = {DEVICE_ALIAS};
+        doAnswer(invocation -> alias[0]).when(mDevice).getAliasName();
+        doAnswer(invocation -> {
+            alias[0] = (String) invocation.getArguments()[0];
+            return true;
+        }).when(mDevice).setAlias(anyString());
+        when(mDevice.getName()).thenReturn(DEVICE_NAME);
+        CachedBluetoothDevice cachedBluetoothDevice =
+                new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice);
+        // Verify alias is returned on getName
+        assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ALIAS);
+        // Verify null name does not get set
+        cachedBluetoothDevice.setName(null);
+        verify(mDevice, never()).setAlias(any());
+        // Verify new name is set properly
+        cachedBluetoothDevice.setName(DEVICE_ALIAS_NEW);
+        verify(mDevice).setAlias(DEVICE_ALIAS_NEW);
+        // Verify new alias is returned on getName
+        assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ALIAS_NEW);
+    }
 }
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java
new file mode 100644
index 0000000..0778b27
--- /dev/null
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java
@@ -0,0 +1,158 @@
+/*
+ * 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.settingslib.development;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Answers.RETURNS_DEEP_STUBS;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settingslib.SettingLibRobolectricTestRunner;
+import com.android.settingslib.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+@RunWith(SettingLibRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class EnableAdbPreferenceControllerTest {
+    @Mock(answer = RETURNS_DEEP_STUBS)
+    private PreferenceScreen mScreen;
+    @Mock
+    private UserManager mUserManager;
+    @Mock
+    private PackageManager mPackageManager;
+
+    private Context mContext;
+    private SwitchPreference mPreference;
+    private ConcreteEnableAdbPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        ShadowApplication shadowContext = ShadowApplication.getInstance();
+        shadowContext.setSystemService(Context.USER_SERVICE, mUserManager);
+        mContext = spy(shadowContext.getApplicationContext());
+        when(mContext.getPackageManager()).thenReturn(mPackageManager);
+        mPreference = new SwitchPreference(mContext);
+        when(mScreen.findPreference(anyString())).thenReturn(mPreference);
+        mController = new ConcreteEnableAdbPreferenceController(mContext);
+        mPreference.setKey(mController.getPreferenceKey());
+    }
+
+    @Test
+    public void displayPreference_isNotAdmin_shouldRemovePreference() {
+        when(mUserManager.isAdminUser()).thenReturn(false);
+        when(mScreen.getPreferenceCount()).thenReturn(1);
+        when(mScreen.getPreference(0)).thenReturn(mPreference);
+
+        mController.displayPreference(mScreen);
+
+        verify(mScreen).removePreference(any(Preference.class));
+    }
+
+    @Test
+    public void displayPreference_isAdmin_shouldNotRemovePreference() {
+        when(mUserManager.isAdminUser()).thenReturn(true);
+
+        mController.displayPreference(mScreen);
+
+        verify(mScreen, never()).removePreference(any(Preference.class));
+    }
+
+
+    @Test
+    public void resetPreference_shouldUncheck() {
+        when(mUserManager.isAdminUser()).thenReturn(true);
+        mController.displayPreference(mScreen);
+        mPreference.setChecked(true);
+
+        mController.resetPreference();
+
+        assertThat(mPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void handlePreferenceTreeClick_shouldUpdateSettings() {
+        when(mUserManager.isAdminUser()).thenReturn(true);
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Global.ADB_ENABLED, 1);
+        mPreference.setChecked(true);
+        mController.displayPreference(mScreen);
+
+        mController.handlePreferenceTreeClick(mPreference);
+
+        assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
+                Settings.Global.ADB_ENABLED, 0)).isEqualTo(0);
+    }
+
+    @Test
+    public void updateState_settingsOn_shouldCheck() {
+        when(mUserManager.isAdminUser()).thenReturn(true);
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Global.ADB_ENABLED, 1);
+        mPreference.setChecked(false);
+        mController.displayPreference(mScreen);
+
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.isChecked()).isTrue();
+    }
+
+    @Test
+    public void updateState_settingsOff_shouldUncheck() {
+        when(mUserManager.isAdminUser()).thenReturn(true);
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Global.ADB_ENABLED, 0);
+        mPreference.setChecked(true);
+        mController.displayPreference(mScreen);
+
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.isChecked()).isFalse();
+    }
+
+    class ConcreteEnableAdbPreferenceController extends AbstractEnableAdbPreferenceController {
+        public ConcreteEnableAdbPreferenceController(Context context) {
+            super(context);
+        }
+
+        @Override
+        public void showConfirmationDialog(SwitchPreference preference) {
+            // Don't show a dialog, just set setting.
+            writeAdbSetting(true);
+        }
+    }
+}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java
index 9fc8a96..6be44cc 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java
@@ -56,12 +56,13 @@
         allKeys.add(CategoryKey.CATEGORY_SECURITY);
         allKeys.add(CategoryKey.CATEGORY_SECURITY_LOCKSCREEN);
         allKeys.add(CategoryKey.CATEGORY_ACCOUNT);
+        allKeys.add(CategoryKey.CATEGORY_ACCOUNT_DETAIL);
         allKeys.add(CategoryKey.CATEGORY_SYSTEM);
         allKeys.add(CategoryKey.CATEGORY_SYSTEM_LANGUAGE);
         allKeys.add(CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
         // DO NOT REMOVE ANYTHING ABOVE
 
-        assertThat(allKeys.size()).isEqualTo(14);
+        assertThat(allKeys.size()).isEqualTo(15);
     }
 
 }
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java
index 0364418..e9ca753 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java
@@ -18,11 +18,12 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.argThat;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
@@ -59,7 +60,6 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
-import org.mockito.ArgumentMatcher;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
@@ -100,6 +100,7 @@
         MockitoAnnotations.initMocks(this);
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
         when(mPackageManager.getResourcesForApplication(anyString())).thenReturn(mResources);
+        when(mPackageManager.getResourcesForApplication((String) isNull())).thenReturn(mResources);
         when(mPackageManager.getApplicationInfo(eq("abc"), anyInt()))
                 .thenReturn(application.getApplicationInfo());
         mContentResolver = spy(application.getContentResolver());
@@ -115,7 +116,6 @@
         List<Tile> outTiles = new ArrayList<>();
         List<ResolveInfo> info = new ArrayList<>();
         info.add(newInfo(true, testCategory));
-        Map<Pair<String, String>, Tile> cache = new ArrayMap<>();
         when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt()))
                 .thenReturn(info);
 
@@ -169,7 +169,6 @@
 
     @Test
     public void getTilesForIntent_shouldSkipFilteredApps() {
-        final String testCategory = "category1";
         Intent intent = new Intent();
         Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();
         List<Tile> outTiles = new ArrayList<>();
@@ -210,11 +209,9 @@
         userHandleList.add(UserHandle.CURRENT);
         when(mUserManager.getUserProfiles()).thenReturn(userHandleList);
 
-        when(mPackageManager.queryIntentActivitiesAsUser(argThat(new ArgumentMatcher<Intent>() {
-            public boolean matches(Object event) {
-                return testAction.equals(((Intent) event).getAction());
-            }
-        }), anyInt(), anyInt())).thenReturn(info);
+        when(mPackageManager.queryIntentActivitiesAsUser(argThat(
+                event -> testAction.equals(event.getAction())), anyInt(), anyInt()))
+                .thenReturn(info);
 
         List<DashboardCategory> categoryList = TileUtils.getCategories(
                 mContext, cache, false /* categoryDefinedInManifest */, testAction,
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/graph/BluetoothDeviceLayerDrawableTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/graph/BluetoothDeviceLayerDrawableTest.java
new file mode 100644
index 0000000..adec402
--- /dev/null
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/graph/BluetoothDeviceLayerDrawableTest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.settingslib.graph;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.VectorDrawable;
+
+import com.android.settingslib.R;
+import com.android.settingslib.SettingLibRobolectricTestRunner;
+import com.android.settingslib.TestConfig;
+import com.android.settingslib.testutils.shadow.SettingsLibShadowResources;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingLibRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+        shadows = SettingsLibShadowResources.class)
+public class BluetoothDeviceLayerDrawableTest {
+    private static final int RES_ID = R.drawable.ic_bt_cellphone;
+    private static final int BATTERY_LEVEL = 15;
+    private static final float BATTERY_ICON_SCALE = 0.75f;
+    private static final int BATTERY_ICON_PADDING_TOP = 6;
+    private static final float TOLERANCE = 0.001f;
+
+    private Context mContext;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+    }
+
+    @Test
+    public void testCreateLayerDrawable_configCorrect() {
+        BluetoothDeviceLayerDrawable drawable = BluetoothDeviceLayerDrawable.createLayerDrawable(
+                mContext, RES_ID, BATTERY_LEVEL);
+
+        assertThat(drawable.getDrawable(0)).isInstanceOf(VectorDrawable.class);
+        assertThat(drawable.getDrawable(1)).isInstanceOf(
+                BluetoothDeviceLayerDrawable.BatteryMeterDrawable.class);
+        assertThat(drawable.getLayerInsetStart(1)).isEqualTo(
+                drawable.getDrawable(0).getIntrinsicWidth());
+        assertThat(drawable.getLayerInsetTop(1)).isEqualTo(0);
+    }
+
+    @Test
+    public void testCreateLayerDrawable_withIconScale_configCorrect() {
+        BluetoothDeviceLayerDrawable drawable = BluetoothDeviceLayerDrawable.createLayerDrawable(
+                mContext, RES_ID, BATTERY_LEVEL, BATTERY_ICON_SCALE);
+
+        assertThat(drawable.getDrawable(0)).isInstanceOf(VectorDrawable.class);
+        assertThat(drawable.getDrawable(1)).isInstanceOf(
+                BluetoothDeviceLayerDrawable.BatteryMeterDrawable.class);
+        assertThat(drawable.getLayerInsetStart(1)).isEqualTo(
+                drawable.getDrawable(0).getIntrinsicWidth());
+        assertThat(drawable.getLayerInsetTop(1)).isEqualTo(BATTERY_ICON_PADDING_TOP);
+    }
+
+    @Test
+    public void testBatteryMeterDrawable_configCorrect() {
+        BluetoothDeviceLayerDrawable.BatteryMeterDrawable batteryDrawable =
+                new BluetoothDeviceLayerDrawable.BatteryMeterDrawable(mContext,
+                        R.color.meter_background_color, BATTERY_LEVEL);
+
+        assertThat(batteryDrawable.getAspectRatio()).isWithin(TOLERANCE).of(0.35f);
+        assertThat(batteryDrawable.getRadiusRatio()).isWithin(TOLERANCE).of(0f);
+        assertThat(batteryDrawable.getBatteryLevel()).isEqualTo(BATTERY_LEVEL);
+    }
+
+    @Test
+    public void testConstantState_returnTwinBluetoothLayerDrawable() {
+        BluetoothDeviceLayerDrawable drawable = BluetoothDeviceLayerDrawable.createLayerDrawable(
+                mContext, RES_ID, BATTERY_LEVEL);
+
+        BluetoothDeviceLayerDrawable twinDrawable =
+                (BluetoothDeviceLayerDrawable) drawable.getConstantState().newDrawable();
+
+        assertThat(twinDrawable.getDrawable(0)).isEqualTo(drawable.getDrawable(0));
+        assertThat(twinDrawable.getDrawable(1)).isEqualTo(drawable.getDrawable(1));
+        assertThat(twinDrawable.getLayerInsetTop(1)).isEqualTo(
+                drawable.getLayerInsetTop(1));
+    }
+
+    @Test
+    public void testCreateLayerDrawable_bluetoothDrawable_hasCorrectFrameColor() {
+        BluetoothDeviceLayerDrawable drawable = BluetoothDeviceLayerDrawable.createLayerDrawable(
+                mContext, RES_ID, BATTERY_LEVEL);
+        BluetoothDeviceLayerDrawable.BatteryMeterDrawable batteryMeterDrawable =
+                (BluetoothDeviceLayerDrawable.BatteryMeterDrawable) drawable.getDrawable(1);
+
+        assertThat(batteryMeterDrawable.mFrameColor).isEqualTo(
+                mContext.getColor(R.color.meter_background_color));
+    }
+}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java
index 8391136..f6404a2 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java
@@ -83,7 +83,7 @@
 
         mSuggestionParser = new SuggestionParser(mContext, mPrefs,
                 Arrays.asList(mMultipleCategory, mExclusiveCategory, mExpiredExclusiveCategory),
-                "0,0");
+                "0");
 
         ResolveInfo info1 = TileUtilsTest.newInfo(true, null);
         info1.activityInfo.packageName = "pkg";
@@ -109,17 +109,12 @@
     }
 
     @Test
-    public void testDismissSuggestion_withoutSmartSuggestion() {
-        assertThat(mSuggestionParser.dismissSuggestion(mSuggestion, false)).isTrue();
+    public void dismissSuggestion_shouldDismiss() {
+        assertThat(mSuggestionParser.dismissSuggestion(mSuggestion)).isTrue();
     }
 
     @Test
-    public void testDismissSuggestion_withSmartSuggestion() {
-        assertThat(mSuggestionParser.dismissSuggestion(mSuggestion, true)).isFalse();
-    }
-
-    @Test
-    public void testGetSuggestions_withoutSmartSuggestions() {
+    public void testGetSuggestions_withoutSmartSuggestions_shouldDismiss() {
         readAndDismissSuggestion(false);
         mSuggestionParser.readSuggestions(mMultipleCategory, mSuggestionsAfterDismiss, false);
         assertThat(mSuggestionsBeforeDismiss).hasSize(2);
@@ -128,11 +123,10 @@
     }
 
     @Test
-    public void testGetSuggestions_withSmartSuggestions() {
+    public void testGetSuggestions_withSmartSuggestions_shouldDismiss() {
         readAndDismissSuggestion(true);
         assertThat(mSuggestionsBeforeDismiss).hasSize(2);
-        assertThat(mSuggestionsAfterDismiss).hasSize(2);
-        assertThat(mSuggestionsBeforeDismiss).isEqualTo(mSuggestionsAfterDismiss);
+        assertThat(mSuggestionsAfterDismiss).hasSize(1);
     }
 
     @Test
@@ -191,19 +185,15 @@
     }
 
     @Test
-    public void isSuggestionDismissed_mismatchRule_shouldDismiss() {
+    public void isSuggestionDismissed_dismissedSuggestion_shouldReturnTrue() {
         final Tile suggestion = new Tile();
         suggestion.metaData = new Bundle();
         suggestion.metaData.putString(SuggestionParser.META_DATA_DISMISS_CONTROL, "1,2,3");
         suggestion.intent = new Intent().setComponent(new ComponentName("pkg", "cls"));
 
         // Dismiss suggestion when smart suggestion is not enabled.
-        mSuggestionParser.dismissSuggestion(suggestion, false /* isSmartSuggestionEnabled */);
-        final String suggestionKey = suggestion.intent.getComponent().flattenToShortString();
-        // And point to last rule in dismiss control
-        mPrefs.edit().putInt(suggestionKey + SuggestionParser.DISMISS_INDEX, 2).apply();
+        mSuggestionParser.dismissSuggestion(suggestion);
 
-        // Turn on smart suggestion, and check if suggestion is enabled.
         assertThat(mSuggestionParser.isDismissed(suggestion, true /* isSmartSuggestionEnabled */))
                 .isTrue();
     }
@@ -215,7 +205,7 @@
                 mMultipleCategory, mSuggestionsBeforeDismiss, isSmartSuggestionEnabled);
 
         final Tile suggestion = mSuggestionsBeforeDismiss.get(0);
-        if (mSuggestionParser.dismissSuggestion(suggestion, isSmartSuggestionEnabled)) {
+        if (mSuggestionParser.dismissSuggestion(suggestion)) {
             RuntimeEnvironment.getRobolectricPackageManager().removeResolveInfosForIntent(
                     new Intent(Intent.ACTION_MAIN).addCategory(mMultipleCategory.category),
                     suggestion.intent.getComponent().getPackageName());
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/SettingsLibShadowResources.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/SettingsLibShadowResources.java
new file mode 100644
index 0000000..a376dcd
--- /dev/null
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/SettingsLibShadowResources.java
@@ -0,0 +1,49 @@
+/*
+ * 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.settingslib.testutils.shadow;
+
+import static org.robolectric.internal.Shadow.directlyOn;
+
+import android.content.res.Resources;
+import android.content.res.Resources.NotFoundException;
+import android.support.annotation.ArrayRes;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+import org.robolectric.annotation.RealObject;
+import org.robolectric.shadows.ShadowResources;
+
+/**
+ * Shadow Resources to handle resource references that Robolectric shadows cannot
+ * handle because they are too new or private.
+ */
+@Implements(Resources.class)
+public class SettingsLibShadowResources extends ShadowResources {
+
+    @RealObject
+    public Resources realResources;
+
+    @Implementation
+    public int[] getIntArray(@ArrayRes int id) throws NotFoundException {
+        // The Robolectric has resource mismatch for these values, so we need to stub it here
+        if (id == com.android.settingslib.R.array.batterymeter_bolt_points
+                || id == com.android.settingslib.R.array.batterymeter_plus_points) {
+            return new int[2];
+        }
+        return directlyOn(realResources, Resources.class).getIntArray(id);
+    }
+}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/AccessPointPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/AccessPointPreferenceTest.java
index 335653b..af0b69c 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/AccessPointPreferenceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/AccessPointPreferenceTest.java
@@ -16,6 +16,9 @@
 package com.android.settingslib.wifi;
 
 import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.content.Context;
 
@@ -34,28 +37,63 @@
     private Context mContext = RuntimeEnvironment.application;
 
     @Test
-    public void generatePreferenceKey_shouldReturnSsidPlusSecurity() {
+    public void generatePreferenceKey_returnsSsidPlusSecurity() {
         String ssid = "ssid";
+        String bssid = "00:00:00:00:00:00";
         int security = AccessPoint.SECURITY_WEP;
         String expectedKey = ssid + ',' + security;
 
         TestAccessPointBuilder builder = new TestAccessPointBuilder(mContext);
-        builder.setSsid(ssid).setSecurity(security);
+        builder.setBssid(bssid).setSsid(ssid).setSecurity(security);
 
         assertThat(AccessPointPreference.generatePreferenceKey(builder.build()))
                 .isEqualTo(expectedKey);
     }
 
     @Test
-    public void generatePreferenceKey_shouldReturnBssidPlusSecurity() {
-        String bssid = "bssid";
+    public void generatePreferenceKey_emptySsidReturnsBssidPlusSecurity() {
+        String ssid = "";
+        String bssid = "00:00:00:00:00:00";
         int security = AccessPoint.SECURITY_WEP;
         String expectedKey = bssid + ',' + security;
 
         TestAccessPointBuilder builder = new TestAccessPointBuilder(mContext);
-        builder.setBssid(bssid).setSecurity(security);
+        builder.setBssid(bssid).setSsid(ssid).setSecurity(security);
 
         assertThat(AccessPointPreference.generatePreferenceKey(builder.build()))
                 .isEqualTo(expectedKey);
     }
+
+    @Test
+    public void refresh_openNetwork_updateContentDescription() {
+        final String ssid = "ssid";
+        final String summary = "connected";
+        final int security = AccessPoint.SECURITY_WEP;
+        final AccessPoint ap = new TestAccessPointBuilder(mContext)
+                .setSsid(ssid)
+                .setSecurity(security)
+                .build();
+        final AccessPointPreference pref = mock(AccessPointPreference.class);
+        when(pref.getTitle()).thenReturn(ssid);
+        when(pref.getSummary()).thenReturn(summary);
+
+        assertThat(AccessPointPreference.buildContentDescription(
+                RuntimeEnvironment.application, pref, ap))
+                .isEqualTo("ssid,connected,Wifi signal full.,Secure network");
+    }
+
+    @Test
+    public void refresh_setTitle_shouldUseSsidString() {
+        final String ssid = "ssid";
+        final String summary = "connected";
+        final int security = AccessPoint.SECURITY_WEP;
+        final AccessPoint ap = new TestAccessPointBuilder(mContext)
+                .setSsid(ssid)
+                .setSecurity(security)
+                .build();
+        final AccessPointPreference preference = mock(AccessPointPreference.class);
+
+        AccessPointPreference.setTitle(preference, ap, false /* savedNetwork */);
+        verify(preference).setTitle(ssid);
+    }
 }
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/TimestampedScoredNetworkTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/TimestampedScoredNetworkTest.java
new file mode 100644
index 0000000..639d51c
--- /dev/null
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/TimestampedScoredNetworkTest.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.settingslib.wifi;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.net.NetworkKey;
+import android.net.ScoredNetwork;
+import android.net.WifiKey;
+import android.os.Parcel;
+
+import com.android.settingslib.SettingLibRobolectricTestRunner;
+import com.android.settingslib.TestConfig;
+import java.util.Date;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingLibRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class TimestampedScoredNetworkTest {
+  private TimestampedScoredNetwork impl;
+
+  private ScoredNetwork createTestScoredNetwork(String ssid) {
+    return new ScoredNetwork(
+        new NetworkKey(new WifiKey("\"" + ssid + "\"", "00:00:00:00:00:00")), null);
+  }
+
+  @Before
+  public void setUp() {
+    impl = new TimestampedScoredNetwork(createTestScoredNetwork("test"),
+        0 /* updatedTimestampMillis */);
+  }
+
+  @Test
+  public void testUpdate() {
+    long time = new Date().getTime();
+    ScoredNetwork updated = createTestScoredNetwork("updated");
+    impl.update(updated, time);
+
+    assertThat(impl.getScore()).isEqualTo(updated);
+    assertThat(impl.getUpdatedTimestampMillis()).isEqualTo(time);
+  }
+
+  @Test
+  public void testParcel() {
+    Parcel parcel = Parcel.obtain();
+    impl.writeToParcel(parcel, 0);
+    parcel.setDataPosition(0);
+
+    TimestampedScoredNetwork fromParcel = TimestampedScoredNetwork.CREATOR.createFromParcel(parcel);
+
+    assertThat(fromParcel.getScore()).isEqualTo(impl.getScore());
+    assertThat(fromParcel.getUpdatedTimestampMillis()).isEqualTo(impl.getUpdatedTimestampMillis());
+  }
+}
diff --git a/packages/SettingsProvider/res/values-bn/strings.xml b/packages/SettingsProvider/res/values-bn/strings.xml
index 95cb73a..7e72dfb 100644
--- a/packages/SettingsProvider/res/values-bn/strings.xml
+++ b/packages/SettingsProvider/res/values-bn/strings.xml
@@ -19,5 +19,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="4567566098528588863">"সেটিংস সঞ্চয়স্থান"</string>
+    <string name="app_label" msgid="4567566098528588863">"সেটিংস স্টোরেজ"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values-en-rCA/defaults.xml b/packages/SettingsProvider/res/values-en-rCA/defaults.xml
new file mode 100644
index 0000000..4a87a12
--- /dev/null
+++ b/packages/SettingsProvider/res/values-en-rCA/defaults.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string>
+    <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string>
+    <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-en-rCA/strings.xml b/packages/SettingsProvider/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..c19fdd7
--- /dev/null
+++ b/packages/SettingsProvider/res/values-en-rCA/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources 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>
+</resources>
diff --git a/packages/SettingsProvider/res/values-en-rXC/defaults.xml b/packages/SettingsProvider/res/values-en-rXC/defaults.xml
new file mode 100644
index 0000000..b32199f3
--- /dev/null
+++ b/packages/SettingsProvider/res/values-en-rXC/defaults.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="def_device_name" msgid="6309317409634339402">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎%1$s %2$s‎‏‎‎‏‎"</string>
+    <string name="def_device_name_simple" msgid="9037785625140748221">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎%1$s‎‏‎‎‏‎"</string>
+    <string name="def_nfc_payment_component" msgid="5861297439873026958"></string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-en-rXC/strings.xml b/packages/SettingsProvider/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..e7abd48
--- /dev/null
+++ b/packages/SettingsProvider/res/values-en-rXC/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at 
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0 
+ *
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ -->
+
+<resources 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>
+</resources>
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index e9dadc5..4007cc9 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -187,4 +187,7 @@
 
     <!--  default setting for Settings.System.END_BUTTON_BEHAVIOR : END_BUTTON_BEHAVIOR_SLEEP -->
     <integer name="def_end_button_behavior">0x2</integer>
+
+    <!-- default setting for Settings.Global.DEFAULT_RESTRICT_BACKGROUND_DATA -->
+    <bool name="def_restrict_background_data">false</bool>
 </resources>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index f8701c4..f1fb208 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -16,6 +16,7 @@
 
 package com.android.providers.settings;
 
+import android.annotation.Nullable;
 import android.annotation.UserIdInt;
 import android.app.backup.BackupAgentHelper;
 import android.app.backup.BackupDataInput;
@@ -30,10 +31,10 @@
 import android.net.Uri;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
-import android.os.Handler;
 import android.os.ParcelFileDescriptor;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.util.ArrayMap;
 import android.util.BackupUtils;
 import android.util.Log;
 
@@ -62,6 +63,9 @@
     private static final boolean DEBUG = false;
     private static final boolean DEBUG_BACKUP = DEBUG || false;
 
+    private static final byte[] NULL_VALUE = new byte[0];
+    private static final int NULL_SIZE = -1;
+
     private static final String KEY_SYSTEM = "system";
     private static final String KEY_SECURE = "secure";
     private static final String KEY_GLOBAL = "global";
@@ -597,21 +601,25 @@
             Log.i(TAG, "restoreSettings: " + contentUri);
         }
 
-        // Figure out the white list and redirects to the global table.
+        // Figure out the white list and redirects to the global table.  We restore anything
+        // in either the backup whitelist or the legacy-restore whitelist for this table.
         final String[] whitelist;
         if (contentUri.equals(Settings.Secure.CONTENT_URI)) {
-            whitelist = Settings.Secure.SETTINGS_TO_BACKUP;
+            whitelist = concat(Settings.Secure.SETTINGS_TO_BACKUP,
+                    Settings.Secure.LEGACY_RESTORE_SETTINGS);
         } else if (contentUri.equals(Settings.System.CONTENT_URI)) {
-            whitelist = Settings.System.SETTINGS_TO_BACKUP;
+            whitelist = concat(Settings.System.SETTINGS_TO_BACKUP,
+                    Settings.System.LEGACY_RESTORE_SETTINGS);
         } else if (contentUri.equals(Settings.Global.CONTENT_URI)) {
-            whitelist = Settings.Global.SETTINGS_TO_BACKUP;
+            whitelist = concat(Settings.Global.SETTINGS_TO_BACKUP,
+                    Settings.Global.LEGACY_RESTORE_SETTINGS);
         } else {
             throw new IllegalArgumentException("Unknown URI: " + contentUri);
         }
 
         // Restore only the white list data.
         int pos = 0;
-        Map<String, String> cachedEntries = new HashMap<String, String>();
+        final ArrayMap<String, String> cachedEntries = new ArrayMap<>();
         ContentValues contentValues = new ContentValues(2);
         SettingsHelper settingsHelper = mSettingsHelper;
         ContentResolver cr = getContentResolver();
@@ -619,28 +627,36 @@
         final int whiteListSize = whitelist.length;
         for (int i = 0; i < whiteListSize; i++) {
             String key = whitelist[i];
-            String value = cachedEntries.remove(key);
 
-            // If the value not cached, let us look it up.
-            if (value == null) {
+            String value = null;
+            boolean hasValueToRestore = false;
+            if (cachedEntries.indexOfKey(key) >= 0) {
+                value = cachedEntries.remove(key);
+                hasValueToRestore = true;
+            } else {
+                // If the value not cached, let us look it up.
                 while (pos < bytes) {
                     int length = readInt(settings, pos);
                     pos += INTEGER_BYTE_COUNT;
-                    String dataKey = length > 0 ? new String(settings, pos, length) : null;
+                    String dataKey = length >= 0 ? new String(settings, pos, length) : null;
                     pos += length;
                     length = readInt(settings, pos);
                     pos += INTEGER_BYTE_COUNT;
-                    String dataValue = length > 0 ? new String(settings, pos, length) : null;
-                    pos += length;
+                    String dataValue = null;
+                    if (length >= 0) {
+                        dataValue = new String(settings, pos, length);
+                        pos += length;
+                    }
                     if (key.equals(dataKey)) {
                         value = dataValue;
+                        hasValueToRestore = true;
                         break;
                     }
                     cachedEntries.put(dataKey, dataValue);
                 }
             }
 
-            if (value == null) {
+            if (!hasValueToRestore) {
                 continue;
             }
 
@@ -656,6 +672,18 @@
         }
     }
 
+    private final String[] concat(String[] first, @Nullable String[] second) {
+        if (second == null || second.length == 0) {
+            return first;
+        }
+        final int firstLen = first.length;
+        final int secondLen = second.length;
+        String[] both = new String[firstLen + secondLen];
+        System.arraycopy(first, 0, both, 0, firstLen);
+        System.arraycopy(second, 0, both, firstLen, secondLen);
+        return both;
+    }
+
     /**
      * Restores the owner info enabled and other settings in LockSettings.
      *
@@ -716,50 +744,56 @@
      * @return The byte array of extracted values.
      */
     private byte[] extractRelevantValues(Cursor cursor, String[] settings) {
-        final int settingsCount = settings.length;
-        byte[][] values = new byte[settingsCount * 2][]; // keys and values
         if (!cursor.moveToFirst()) {
             Log.e(TAG, "Couldn't read from the cursor");
             return new byte[0];
         }
 
+        final int nameColumnIndex = cursor.getColumnIndex(Settings.NameValueTable.NAME);
+        final int valueColumnIndex = cursor.getColumnIndex(Settings.NameValueTable.VALUE);
+
         // Obtain the relevant data in a temporary array.
         int totalSize = 0;
         int backedUpSettingIndex = 0;
-        Map<String, String> cachedEntries = new HashMap<String, String>();
+        final int settingsCount = settings.length;
+        final byte[][] values = new byte[settingsCount * 2][]; // keys and values
+        final ArrayMap<String, String> cachedEntries = new ArrayMap<>();
         for (int i = 0; i < settingsCount; i++) {
-            String key = settings[i];
-            String value = cachedEntries.remove(key);
-
-            final int nameColumnIndex = cursor.getColumnIndex(Settings.NameValueTable.NAME);
-            final int valueColumnIndex = cursor.getColumnIndex(Settings.NameValueTable.VALUE);
+            final String key = settings[i];
 
             // If the value not cached, let us look it up.
-            if (value == null) {
+            String value = null;
+            boolean hasValueToBackup = false;
+            if (cachedEntries.indexOfKey(key) >= 0) {
+                value = cachedEntries.remove(key);
+                hasValueToBackup = true;
+            } else {
                 while (!cursor.isAfterLast()) {
-                    String cursorKey = cursor.getString(nameColumnIndex);
-                    String cursorValue = cursor.getString(valueColumnIndex);
+                    final String cursorKey = cursor.getString(nameColumnIndex);
+                    final String cursorValue = cursor.getString(valueColumnIndex);
                     cursor.moveToNext();
                     if (key.equals(cursorKey)) {
                         value = cursorValue;
+                        hasValueToBackup = true;
                         break;
                     }
                     cachedEntries.put(cursorKey, cursorValue);
                 }
             }
 
+            if (!hasValueToBackup) {
+                continue;
+            }
+
             // Intercept the keys and see if they need special handling
             value = mSettingsHelper.onBackupValue(key, value);
 
-            if (value == null) {
-                continue;
-            }
             // Write the key and value in the intermediary array.
-            byte[] keyBytes = key.getBytes();
+            final byte[] keyBytes = key.getBytes();
             totalSize += INTEGER_BYTE_COUNT + keyBytes.length;
             values[backedUpSettingIndex * 2] = keyBytes;
 
-            byte[] valueBytes = value.getBytes();
+            final byte[] valueBytes = (value != null) ? value.getBytes() : NULL_VALUE;
             totalSize += INTEGER_BYTE_COUNT + valueBytes.length;
             values[backedUpSettingIndex * 2 + 1] = valueBytes;
 
@@ -775,8 +809,13 @@
         int pos = 0;
         final int keyValuePairCount = backedUpSettingIndex * 2;
         for (int i = 0; i < keyValuePairCount; i++) {
-            pos = writeInt(result, pos, values[i].length);
-            pos = writeBytes(result, pos, values[i]);
+            final byte[] value = values[i];
+            if (value != NULL_VALUE) {
+                pos = writeInt(result, pos, value.length);
+                pos = writeBytes(result, pos, value);
+            } else {
+                pos = writeInt(result, pos, NULL_SIZE);
+            }
         }
         return result;
     }
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index 344cd8f..fc765f4 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -16,6 +16,11 @@
 
 package com.android.providers.settings;
 
+import com.android.internal.R;
+import com.android.internal.app.LocalePicker;
+import com.android.internal.annotations.VisibleForTesting;
+
+import android.annotation.NonNull;
 import android.app.ActivityManager;
 import android.app.IActivityManager;
 import android.app.backup.IBackupManager;
@@ -24,11 +29,13 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Configuration;
+import android.icu.util.ULocale;
 import android.location.LocationManager;
 import android.media.AudioManager;
 import android.media.RingtoneManager;
 import android.net.Uri;
 import android.os.IPowerManager;
+import android.os.LocaleList;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
@@ -39,6 +46,9 @@
 import android.util.ArraySet;
 import android.util.Slog;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Locale;
 
 public class SettingsHelper {
@@ -306,59 +316,106 @@
         }
     }
 
-    byte[] getLocaleData() {
+    /* package */ byte[] getLocaleData() {
         Configuration conf = mContext.getResources().getConfiguration();
-        final Locale loc = conf.locale;
-        String localeString = loc.getLanguage();
-        String country = loc.getCountry();
-        if (!TextUtils.isEmpty(country)) {
-            localeString += "-" + country;
+        return conf.getLocales().toLanguageTags().getBytes();
+    }
+
+    private static Locale toFullLocale(@NonNull Locale locale) {
+        if (locale.getScript().isEmpty() || locale.getCountry().isEmpty()) {
+            return ULocale.addLikelySubtags(ULocale.forLocale(locale)).toLocale();
         }
-        return localeString.getBytes();
+        return locale;
     }
 
     /**
-     * Sets the locale specified. Input data is the byte representation of a
-     * BCP-47 language tag. For backwards compatibility, strings of the form
+     * Merging the locale came from backup server and current device locale.
+     *
+     * Merge works with following rules.
+     * - The backup locales are appended to the current locale with keeping order.
+     *   e.g. current locale "en-US,zh-CN" and backup locale "ja-JP,ko-KR" are merged to
+     *   "en-US,zh-CH,ja-JP,ko-KR".
+     *
+     * - Duplicated locales are dropped.
+     *   e.g. current locale "en-US,zh-CN" and backup locale "ja-JP,zh-Hans-CN,en-US" are merged to
+     *   "en-US,zh-CN,ja-JP".
+     *
+     * - Unsupported locales are dropped.
+     *   e.g. current locale "en-US" and backup locale "ja-JP,zh-CN" but the supported locales
+     *   are "en-US,zh-CN", the merged locale list is "en-US,zh-CN".
+     *
+     * - The final result locale list only contains the supported locales.
+     *   e.g. current locale "en-US" and backup locale "zh-Hans-CN" and supported locales are
+     *   "en-US,zh-CN", the merged locale list is "en-US,zh-CN".
+     *
+     * @param restore The locale list that came from backup server.
+     * @param current The device's locale setting.
+     * @param supportedLocales The list of language tags supported by this device.
+     */
+    @VisibleForTesting
+    public static LocaleList resolveLocales(LocaleList restore, LocaleList current,
+            String[] supportedLocales) {
+        final HashMap<Locale, Locale> allLocales = new HashMap<>(supportedLocales.length);
+        for (String supportedLocaleStr : supportedLocales) {
+            final Locale locale = Locale.forLanguageTag(supportedLocaleStr);
+            allLocales.put(toFullLocale(locale), locale);
+        }
+
+        final ArrayList<Locale> filtered = new ArrayList<>(current.size());
+        for (int i = 0; i < current.size(); i++) {
+            final Locale locale = current.get(i);
+            allLocales.remove(toFullLocale(locale));
+            filtered.add(locale);
+        }
+
+        for (int i = 0; i < restore.size(); i++) {
+            final Locale locale = allLocales.remove(toFullLocale(restore.get(i)));
+            if (locale != null) {
+                filtered.add(locale);
+            }
+        }
+
+        if (filtered.size() == current.size()) {
+            return current;  // Nothing added to current locale list.
+        }
+
+        return new LocaleList(filtered.toArray(new Locale[filtered.size()]));
+    }
+
+    /**
+     * Sets the locale specified. Input data is the byte representation of comma separated
+     * multiple BCP-47 language tags. For backwards compatibility, strings of the form
      * {@code ll_CC} are also accepted, where {@code ll} is a two letter language
      * code and {@code CC} is a two letter country code.
      *
-     * @param data the locale string in bytes.
+     * @param data the comma separated BCP-47 language tags in bytes.
      */
-    void setLocaleData(byte[] data, int size) {
-        // Check if locale was set by the user:
-        final ContentResolver cr = mContext.getContentResolver();
-        final boolean userSetLocale = mContext.getResources().getConfiguration().userSetLocale;
-        final boolean provisioned = Settings.Global.getInt(cr,
-                Settings.Global.DEVICE_PROVISIONED, 0) != 0;
-        if (userSetLocale || provisioned) {
-            // Don't change if user set it in the SetupWizard, or if this is a post-setup
-            // deferred restore operation
-            Slog.i(TAG, "Not applying restored locale; "
-                    + (userSetLocale ? "user already specified" : "device already provisioned"));
+    /* package */ void setLocaleData(byte[] data, int size) {
+        final Configuration conf = mContext.getResources().getConfiguration();
+
+        // Replace "_" with "-" to deal with older backups.
+        final String localeCodes = new String(data, 0, size).replace('_', '-');
+        final LocaleList localeList = LocaleList.forLanguageTags(localeCodes);
+        if (localeList.isEmpty()) {
             return;
         }
 
-        final String[] availableLocales = mContext.getAssets().getLocales();
-        // Replace "_" with "-" to deal with older backups.
-        String localeCode = new String(data, 0, size).replace('_', '-');
-        Locale loc = null;
-        for (int i = 0; i < availableLocales.length; i++) {
-            if (availableLocales[i].equals(localeCode)) {
-                loc = Locale.forLanguageTag(localeCode);
-                break;
-            }
+        final String[] supportedLocales = LocalePicker.getSupportedLocales(mContext);
+        final LocaleList currentLocales = conf.getLocales();
+
+        final LocaleList merged = resolveLocales(localeList, currentLocales, supportedLocales);
+        if (merged.equals(currentLocales)) {
+            return;
         }
-        if (loc == null) return; // Couldn't find the saved locale in this version of the software
 
         try {
             IActivityManager am = ActivityManager.getService();
             Configuration config = am.getConfiguration();
-            config.locale = loc;
+            config.setLocales(merged);
             // indicate this isn't some passing default - the user wants this remembered
             config.userSetLocale = true;
 
-            am.updateConfiguration(config);
+            am.updatePersistentConfiguration(config);
         } catch (RemoteException e) {
             // Intentionally left blank
         }
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index d22d0b36..04be92e 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -32,8 +32,6 @@
 import android.content.pm.IPackageManager;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.pm.ServiceInfo;
 import android.content.pm.UserInfo;
 import android.content.res.Resources;
 import android.database.Cursor;
@@ -61,7 +59,7 @@
 import android.os.UserManager;
 import android.os.UserManagerInternal;
 import android.provider.Settings;
-import android.service.notification.NotificationListenerService;
+import android.provider.Settings.Global;
 import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
@@ -82,7 +80,6 @@
 import java.io.FileDescriptor;
 import java.io.FileNotFoundException;
 import java.io.PrintWriter;
-import java.nio.charset.StandardCharsets;
 import java.nio.ByteBuffer;
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
@@ -1690,18 +1687,9 @@
     }
 
     private List<String> getSettingsNamesLocked(int settingsType, int userId) {
-        boolean instantApp;
-        if (UserHandle.getAppId(Binder.getCallingUid()) < Process.FIRST_APPLICATION_UID) {
-            instantApp = false;
-        } else {
-            ApplicationInfo ai = getCallingApplicationInfoOrThrow();
-            instantApp = ai.isInstantApp();
-        }
-        if (instantApp) {
-            return new ArrayList<String>(getInstantAppAccessibleSettings(settingsType));
-        } else {
-            return mSettingsRegistry.getSettingsNamesLocked(settingsType, userId);
-        }
+        // Don't enforce the instant app whitelist for now -- its too prone to unintended breakage
+        // in the current form.
+        return mSettingsRegistry.getSettingsNamesLocked(settingsType, userId);
     }
 
     private void enforceSettingReadable(String settingName, int settingsType, int userId) {
@@ -1714,8 +1702,10 @@
         }
         if (!getInstantAppAccessibleSettings(settingsType).contains(settingName)
                 && !getOverlayInstantAppAccessibleSettings(settingsType).contains(settingName)) {
-            throw new SecurityException("Setting " + settingName + " is not accessible from"
-                    + " ephemeral package " + getCallingPackage());
+            // Don't enforce the instant app whitelist for now -- its too prone to unintended
+            // breakage in the current form.
+            Slog.w(LOG_TAG, "Instant App " + ai.packageName
+                    + " trying to access unexposed setting, this will be an error in the future.");
         }
     }
 
@@ -2881,7 +2871,11 @@
                     case MSG_NOTIFY_URI_CHANGED: {
                         final int userId = msg.arg1;
                         Uri uri = (Uri) msg.obj;
-                        getContext().getContentResolver().notifyChange(uri, null, true, userId);
+                        try {
+                            getContext().getContentResolver().notifyChange(uri, null, true, userId);
+                        } catch (SecurityException e) {
+                            Slog.w(LOG_TAG, "Failed to notify for " + userId + ": " + uri, e);
+                        }
                         if (DEBUG) {
                             Slog.v(LOG_TAG, "Notifying for " + userId + ": " + uri);
                         }
@@ -2895,7 +2889,7 @@
         }
 
         private final class UpgradeController {
-            private static final int SETTINGS_VERSION = 146;
+            private static final int SETTINGS_VERSION = 148;
 
             private final int mUserId;
 
@@ -3166,33 +3160,7 @@
                 }
 
                 if (currentVersion == 128) {
-                    // Version 128: Allow OEMs to grant DND access to default apps. Note that
-                    // the new apps are appended to the list of already approved apps.
-                    final SettingsState systemSecureSettings =
-                            getSecureSettingsLocked(userId);
-
-                    final Setting policyAccess = systemSecureSettings.getSettingLocked(
-                            Settings.Secure.ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES);
-                    String defaultPolicyAccess = getContext().getResources().getString(
-                            com.android.internal.R.string.config_defaultDndAccessPackages);
-                    if (!TextUtils.isEmpty(defaultPolicyAccess)) {
-                        if (policyAccess.isNull()) {
-                            systemSecureSettings.insertSettingLocked(
-                                    Settings.Secure.ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES,
-                                    defaultPolicyAccess, null, true,
-                                    SettingsState.SYSTEM_PACKAGE_NAME);
-                        } else {
-                            StringBuilder currentSetting =
-                                    new StringBuilder(policyAccess.getValue());
-                            currentSetting.append(":");
-                            currentSetting.append(defaultPolicyAccess);
-                            systemSecureSettings.updateSettingLocked(
-                                    Settings.Secure.ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES,
-                                    currentSetting.toString(), null, true,
-                                    SettingsState.SYSTEM_PACKAGE_NAME);
-                        }
-                    }
-
+                    // Version 128: Removed
                     currentVersion = 129;
                 }
 
@@ -3365,58 +3333,7 @@
                 }
 
                 if (currentVersion == 140) {
-                    // Version 141: One-time grant of notification listener privileges
-                    // to packages specified in overlay.
-                    String defaultListenerAccess = getContext().getResources().getString(
-                            com.android.internal.R.string.config_defaultListenerAccessPackages);
-                    if (defaultListenerAccess != null) {
-                        StringBuffer newListeners = new StringBuffer();
-                        for (String whitelistPkg : defaultListenerAccess.split(":")) {
-                            // Gather all notification listener components for candidate pkgs.
-                            Intent serviceIntent =
-                                    new Intent(NotificationListenerService.SERVICE_INTERFACE)
-                                            .setPackage(whitelistPkg);
-                            List<ResolveInfo> installedServices =
-                                    getContext().getPackageManager().queryIntentServicesAsUser(
-                                            serviceIntent,
-                                            PackageManager.GET_SERVICES
-                                                    | PackageManager.GET_META_DATA
-                                                    | PackageManager.MATCH_DIRECT_BOOT_AWARE
-                                                    | PackageManager.MATCH_DIRECT_BOOT_UNAWARE,
-                                            userId);
-
-                            for (int i = 0, count = installedServices.size(); i < count; i++) {
-                                ResolveInfo resolveInfo = installedServices.get(i);
-                                ServiceInfo info = resolveInfo.serviceInfo;
-                                if (!android.Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE
-                                        .equals(info.permission)) {
-                                    continue;
-                                }
-                                newListeners.append(":")
-                                        .append(info.getComponentName().flattenToString());
-                            }
-                        }
-
-                        if (newListeners.length() > 0) {
-                            final SettingsState secureSetting = getSecureSettingsLocked(userId);
-                            final Setting existingSetting = secureSetting.getSettingLocked(
-                                    Settings.Secure.ENABLED_NOTIFICATION_LISTENERS);
-                            if (existingSetting.isNull()) {
-                                secureSetting.insertSettingLocked(
-                                        Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,
-                                        newListeners.toString(), null, true,
-                                        SettingsState.SYSTEM_PACKAGE_NAME);
-                            } else {
-                                StringBuilder currentSetting =
-                                        new StringBuilder(existingSetting.getValue());
-                                currentSetting.append(newListeners.toString());
-                                secureSetting.updateSettingLocked(
-                                        Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,
-                                        currentSetting.toString(), null, true,
-                                        SettingsState.SYSTEM_PACKAGE_NAME);
-                            }
-                        }
-                    }
+                    // Version 141: Removed
                     currentVersion = 141;
                 }
 
@@ -3467,21 +3384,7 @@
                 }
 
                 if (currentVersion == 144) {
-                    // Version 145: Set the default value for WIFI_WAKEUP_AVAILABLE.
-                    if (userId == UserHandle.USER_SYSTEM) {
-                        final SettingsState globalSettings = getGlobalSettingsLocked();
-                        final Setting currentSetting = globalSettings.getSettingLocked(
-                                Settings.Global.WIFI_WAKEUP_AVAILABLE);
-                        if (currentSetting.isNull()) {
-                            final int defaultValue = getContext().getResources().getInteger(
-                                    com.android.internal.R.integer.config_wifi_wakeup_available);
-                            globalSettings.insertSettingLocked(
-                                    Settings.Global.WIFI_WAKEUP_AVAILABLE,
-                                    String.valueOf(defaultValue),
-                                    null, true, SettingsState.SYSTEM_PACKAGE_NAME);
-                        }
-                    }
-
+                    // Version 145: Removed
                     currentVersion = 145;
                 }
 
@@ -3510,6 +3413,42 @@
                     currentVersion = 146;
                 }
 
+                if (currentVersion == 146) {
+                    // Version 147: Set the default value for WIFI_WAKEUP_AVAILABLE.
+                    if (userId == UserHandle.USER_SYSTEM) {
+                        final SettingsState globalSettings = getGlobalSettingsLocked();
+                        final Setting currentSetting = globalSettings.getSettingLocked(
+                                Settings.Global.WIFI_WAKEUP_AVAILABLE);
+                        if (currentSetting.getValue() == null) {
+                            final int defaultValue = getContext().getResources().getInteger(
+                                    com.android.internal.R.integer.config_wifi_wakeup_available);
+                            globalSettings.insertSettingLocked(
+                                    Settings.Global.WIFI_WAKEUP_AVAILABLE,
+                                    String.valueOf(defaultValue),
+                                    null, true, SettingsState.SYSTEM_PACKAGE_NAME);
+                        }
+                    }
+
+                    currentVersion = 147;
+                }
+
+                if (currentVersion == 147) {
+                    // Version 148: Set the default value for DEFAULT_RESTRICT_BACKGROUND_DATA.
+                    if (userId == UserHandle.USER_SYSTEM) {
+                        final SettingsState globalSettings = getGlobalSettingsLocked();
+                        final Setting currentSetting = globalSettings.getSettingLocked(
+                                Global.DEFAULT_RESTRICT_BACKGROUND_DATA);
+                        if (currentSetting.isNull()) {
+                            globalSettings.insertSettingLocked(
+                                    Global.DEFAULT_RESTRICT_BACKGROUND_DATA,
+                                    getContext().getResources().getBoolean(
+                                            R.bool.def_restrict_background_data) ? "1" : "0",
+                                    null, true, SettingsState.SYSTEM_PACKAGE_NAME);
+                        }
+                    }
+                    currentVersion = 148;
+                }
+
                 // vXXX: Add new settings above this point.
 
                 if (currentVersion != newVersion) {
diff --git a/packages/SettingsProvider/test/Android.mk b/packages/SettingsProvider/test/Android.mk
index a4cbf34..a9707d4 100644
--- a/packages/SettingsProvider/test/Android.mk
+++ b/packages/SettingsProvider/test/Android.mk
@@ -4,12 +4,15 @@
 
 LOCAL_MODULE_TAGS := tests
 
-# Note we statically link SettingsState to do some unit tests.  It's not accessible otherwise
+# Note we statically link several classes to do some unit tests.  It's not accessible otherwise
 # because this test is not an instrumentation test. (because the target runs in the system process.)
 LOCAL_SRC_FILES := $(call all-subdir-java-files) \
-    ../src/com/android/providers/settings/SettingsState.java
+    ../src/com/android/providers/settings/SettingsState.java \
+    ../src/com/android/providers/settings/SettingsHelper.java
 
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-test legacy-android-test
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
+
+LOCAL_JAVA_LIBRARIES := legacy-android-test
 
 LOCAL_PACKAGE_NAME := SettingsProviderTest
 
diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java
new file mode 100644
index 0000000..6fa014d
--- /dev/null
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java
@@ -0,0 +1,135 @@
+/*
+ * 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.providers.settings;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertSame;
+import static junit.framework.Assert.assertNull;
+import static junit.framework.Assert.fail;
+
+import com.android.internal.app.LocalePicker;
+import com.android.providers.settings.SettingsHelper;
+
+import android.os.LocaleList;
+import android.support.test.runner.AndroidJUnit4;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Tests for the SettingsHelperTest
+ */
+@RunWith(AndroidJUnit4.class)
+public class SettingsHelperTest {
+    @Test
+    public void testResolveLocales() throws Exception {
+        // Empty string from backup server
+        assertEquals(LocaleList.forLanguageTags("en-US"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags(""),  // restore
+                        LocaleList.forLanguageTags("en-US"),  // current
+                        new String[] { "en-US" }));  // supported
+
+        // Same as current settings
+        assertEquals(LocaleList.forLanguageTags("en-US"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("en-US"),  // restore
+                        LocaleList.forLanguageTags("en-US"),  // current
+                        new String[] { "en-US" }));  // supported
+
+        assertEquals(LocaleList.forLanguageTags("en-US,ja-JP"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("en-US,ja-JP"),  // restore
+                        LocaleList.forLanguageTags("en-US,ja-JP"),  // current
+                        new String[] { "en-US", "ja-JP" }));  // supported
+
+        // Current locale must be kept at the first place.
+        assertEquals(LocaleList.forLanguageTags("ja-JP,en-US"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("en-US"),  // restore
+                        LocaleList.forLanguageTags("ja-JP"),  // current
+                        new String[] { "en-US", "ja-JP" }));  // supported
+
+        assertEquals(LocaleList.forLanguageTags("ja-JP,ko-KR,en-US"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("en-US"),  // restore
+                        LocaleList.forLanguageTags("ja-JP,ko-KR"),  // current
+                        new String[] { "en-US", "ja-JP", "ko-KR" }));  // supported
+
+        assertEquals(LocaleList.forLanguageTags("ja-JP,en-US,ko-KR"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("en-US,ko-KR"),  // restore
+                        LocaleList.forLanguageTags("ja-JP"),  // current
+                        new String[] { "en-US", "ja-JP", "ko-KR" }));  // supported
+
+        // Duplicated entries must be removed.
+        assertEquals(LocaleList.forLanguageTags("ja-JP,ko-KR,en-US"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("en-US,ko-KR"),  // restore
+                        LocaleList.forLanguageTags("ja-JP,ko-KR"),  // current
+                        new String[] { "en-US", "ja-JP", "ko-KR" }));  // supported
+
+        // Drop unsupported locales.
+        assertEquals(LocaleList.forLanguageTags("en-US"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("en-US,zh-CN"),  // restore
+                        LocaleList.forLanguageTags("en-US"),  // current
+                        new String[] { "en-US" }));  // supported
+
+        // Comparison happens on fully-expanded locale.
+        assertEquals(LocaleList.forLanguageTags("en-US,sr-Latn-SR,sr-Cryl-SR"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("sr-Cryl-SR"),  // restore
+                        LocaleList.forLanguageTags("en-US,sr-Latn-SR"),  // current
+                        new String[] { "en-US", "sr-Latn-SR", "sr-Cryl-SR" }));  // supported
+
+        assertEquals(LocaleList.forLanguageTags("en-US"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("kk-Cryl-KZ"),  // restore
+                        LocaleList.forLanguageTags("en-US"),  // current
+                        new String[] { "en-US", "kk-Latn-KZ" }));  // supported
+
+        assertEquals(LocaleList.forLanguageTags("en-US,kk-Cryl-KZ"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("kk-Cryl-KZ"),  // restore
+                        LocaleList.forLanguageTags("en-US"),  // current
+                        new String[] { "en-US", "kk-Cryl-KZ" }));  // supported
+
+        assertEquals(LocaleList.forLanguageTags("en-US,zh-CN"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("zh-Hans-CN"),  // restore
+                        LocaleList.forLanguageTags("en-US"),  // current
+                        new String[] { "en-US", "zh-CN" }));  // supported
+
+        assertEquals(LocaleList.forLanguageTags("en-US,zh-Hans-CN"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("zh-CN"),  // restore
+                        LocaleList.forLanguageTags("en-US"),  // current
+                        new String[] { "en-US", "zh-Hans-CN" }));  // supported
+
+        // Old langauge code should be updated.
+        assertEquals(LocaleList.forLanguageTags("en-US,he-IL,id-ID,yi"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("iw-IL,in-ID,ji"),  // restore
+                        LocaleList.forLanguageTags("en-US"),  // current
+                        new String[] { "he-IL", "id-ID", "yi" }));  // supported
+    }
+}
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index e6d9a9a..b758e7f5 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -62,6 +62,7 @@
     <!-- Internal permissions granted to the shell. -->
     <uses-permission android:name="android.permission.FORCE_BACK" />
     <uses-permission android:name="android.permission.BATTERY_STATS" />
+    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
     <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
     <uses-permission android:name="android.permission.INJECT_EVENTS" />
     <uses-permission android:name="android.permission.RETRIEVE_WINDOW_CONTENT" />
@@ -114,9 +115,12 @@
     <uses-permission android:name="android.permission.GET_APP_OPS_STATS" />
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
+    <uses-permission android:name="android.permission.ACTIVITY_EMBEDDING" />
     <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
     <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
     <uses-permission android:name="android.permission.MANAGE_AUTO_FILL" />
+    <uses-permission android:name="android.permission.NETWORK_SETTINGS" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
     <!-- Permission needed to rename bugreport notifications (so they're not shown as Shell) -->
     <uses-permission android:name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME" />
     <!-- Permission needed to hold a wakelock in dumpstate.cpp (drop_root_user()) -->
diff --git a/packages/Shell/res/layout/dialog_bugreport_info.xml b/packages/Shell/res/layout/dialog_bugreport_info.xml
index bb3084f..4bd8711 100644
--- a/packages/Shell/res/layout/dialog_bugreport_info.xml
+++ b/packages/Shell/res/layout/dialog_bugreport_info.xml
@@ -19,39 +19,51 @@
     android:paddingTop="15dp"
     android:paddingStart="24dp"
     android:paddingEnd="24dp"
-    android:focusableInTouchMode="true"
+    android:focusableInTouchMode="false"
+    android:focusable="false"
+    android:importantForAutofill="noExcludeDescendants"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content">
     <TextView
+        android:focusableInTouchMode="false"
+        android:focusable="false"
         android:inputType="textNoSuggestions"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="@string/bugreport_info_name"/>
     <EditText
         android:id="@+id/name"
+        android:nextFocusDown="@+id/title"
         android:maxLength="30"
         android:singleLine="true"
         android:inputType="textNoSuggestions"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"/>
     <TextView
+        android:focusableInTouchMode="false"
+        android:focusable="false"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="@string/bugreport_info_title"/>
     <EditText
         android:id="@+id/title"
+        android:nextFocusUp="@+id/name"
+        android:nextFocusDown="@+id/description"
         android:maxLength="80"
         android:singleLine="true"
         android:inputType="textAutoCorrect|textCapSentences"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"/>
     <TextView
+        android:focusableInTouchMode="false"
+        android:focusable="false"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:editable="false"
         android:text="@string/bugreport_info_description"/>
     <EditText
         android:id="@+id/description"
+        android:nextFocusUp="@+id/title"
         android:singleLine="false"
         android:inputType="textMultiLine|textAutoCorrect|textCapSentences"
         android:layout_width="match_parent"
diff --git a/packages/Shell/res/values-ar/strings.xml b/packages/Shell/res/values-ar/strings.xml
index 1d64c99..b81a904 100644
--- a/packages/Shell/res/values-ar/strings.xml
+++ b/packages/Shell/res/values-ar/strings.xml
@@ -21,7 +21,7 @@
     <string name="bugreport_in_progress_title" msgid="4311705936714972757">"جارٍ إنشاء تقرير الخطأ <xliff:g id="ID">#%d</xliff:g>."</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"تم تسجيل تقرير الخطأ <xliff:g id="ID">#%d</xliff:g>."</string>
     <string name="bugreport_updating_title" msgid="4423539949559634214">"إضافة تفاصيل إلى تقرير الخطأ"</string>
-    <string name="bugreport_updating_wait" msgid="3322151947853929470">"الرجاء الانتظار…"</string>
+    <string name="bugreport_updating_wait" msgid="3322151947853929470">"يُرجى الانتظار…"</string>
     <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"سيظهر تقرير الخطأ على الهاتف بعد قليل"</string>
     <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"اختر لمشاركة تقرير الخطأ"</string>
     <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"انقر لمشاركة تقرير الخطأ."</string>
diff --git a/packages/Shell/res/values-bn/strings.xml b/packages/Shell/res/values-bn/strings.xml
index 07a9df3..56a608d 100644
--- a/packages/Shell/res/values-bn/strings.xml
+++ b/packages/Shell/res/values-bn/strings.xml
@@ -26,8 +26,8 @@
     <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"ত্রুটির প্রতিবেদনটি শেয়ার করতে এটি বেছে নিন"</string>
     <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"আপনার ত্রুটির প্রতিবেদন শেয়ার করতে আলতো চাপ দিন"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"কোনো স্ক্রিনশট ছাড়াই ত্রুটির প্রতিবেদনটি শেয়ার করতে এটি বেছে নিন, বা স্ক্রিনশটের জন্য অপেক্ষা করুন"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"কোনো স্ক্রীনশট ছাড়াই ত্রুটির প্রতিবেদন শেয়ার করতে আলতো চাপ দিন বা সম্পন্ন করতে স্ক্রীনশটের জন্য অপেক্ষা করুন"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"কোনো স্ক্রীনশট ছাড়াই ত্রুটির প্রতিবেদন শেয়ার করতে আলতো চাপ দিন বা সম্পন্ন করতে স্ক্রীনশটের জন্য অপেক্ষা করুন"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"কোনও স্ক্রিনশট ছাড়াই ত্রুটির প্রতিবেদন শেয়ার করতে আলতো চাপ দিন বা সম্পন্ন করতে স্ক্রিনশটের জন্য অপেক্ষা করুন"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"কোনও স্ক্রিনশট ছাড়াই ত্রুটির প্রতিবেদন শেয়ার করতে আলতো চাপ দিন বা সম্পন্ন করতে স্ক্রিনশটের জন্য অপেক্ষা করুন"</string>
     <string name="bugreport_confirm" msgid="5917407234515812495">"ত্রুটির প্রতিবেদনগুলিতে থাকা ডেটা, সিস্টেমের বিভিন্ন লগ ফাইলগুলি থেকে আসে, যাতে আপনার বিবেচনা অনুযায়ী সংবেদনশীল ডেটা (যেমন, অ্যাপ্লিকেশানের ব্যবহার এবং অবস্থান ডেটা) থাকতে পারে৷ আপনি বিশ্বাস করেন শুধুমাত্র এমন অ্যাপ্লিকেশান এবং ব্যক্তিদের সাথেই ত্রুটির প্রতিবেদনগুলিকে শেয়ার করুন৷"</string>
     <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"আর দেখাবেন না"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"ত্রুটির প্রতিবেদনগুলি"</string>
@@ -35,13 +35,13 @@
     <string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"জিপ ফাইলে ত্রুটি প্রতিবেদনের বিশদ বিবরণ যোগ করা যায়নি"</string>
     <string name="bugreport_unnamed" msgid="2800582406842092709">"নামবিহীন"</string>
     <string name="bugreport_info_action" msgid="2158204228510576227">"বিশদ বিবরণ"</string>
-    <string name="bugreport_screenshot_action" msgid="8677781721940614995">"স্ক্রীনশট"</string>
-    <string name="bugreport_screenshot_taken" msgid="5684211273096253120">"স্ক্রীনশট সফলভাবে নেওয়া হয়েছে৷"</string>
-    <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"স্ক্রীনশট নেওয়া যায়নি৷"</string>
+    <string name="bugreport_screenshot_action" msgid="8677781721940614995">"স্ক্রিনশট"</string>
+    <string name="bugreport_screenshot_taken" msgid="5684211273096253120">"স্ক্রিনশট সফলভাবে নেওয়া হয়েছে৷"</string>
+    <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"স্ক্রিনশট নেওয়া যায়নি৷"</string>
     <string name="bugreport_info_dialog_title" msgid="1355948594292983332">"ত্রুটির প্রতিবেদন <xliff:g id="ID">#%d</xliff:g> এর বিশদ বিবরণ"</string>
     <string name="bugreport_info_name" msgid="4414036021935139527">"ফাইলের নাম"</string>
     <string name="bugreport_info_title" msgid="2306030793918239804">"ত্রুটির শীর্ষক"</string>
     <string name="bugreport_info_description" msgid="5072835127481627722">"ত্রুটির সারাংশ"</string>
-    <string name="save" msgid="4781509040564835759">"সংরক্ষণ করুন"</string>
+    <string name="save" msgid="4781509040564835759">"সেভ করুন"</string>
     <string name="bugreport_intent_chooser_title" msgid="7605709494790894076">"ত্রুটির প্রতিবেদন শেয়ার করুন"</string>
 </resources>
diff --git a/packages/Shell/res/values-en-rCA/strings.xml b/packages/Shell/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..5462813
--- /dev/null
+++ b/packages/Shell/res/values-en-rCA/strings.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
+    <string name="bugreport_notification_channel" msgid="2574150205913861141">"Bug reports"</string>
+    <string name="bugreport_in_progress_title" msgid="4311705936714972757">"Bug report <xliff:g id="ID">#%d</xliff:g> is being generated"</string>
+    <string name="bugreport_finished_title" msgid="4429132808670114081">"Bug report <xliff:g id="ID">#%d</xliff:g> captured"</string>
+    <string name="bugreport_updating_title" msgid="4423539949559634214">"Adding details to the bug report"</string>
+    <string name="bugreport_updating_wait" msgid="3322151947853929470">"Please wait…"</string>
+    <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"The bug report will appear on the phone shortly"</string>
+    <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"Select to share your bug report"</string>
+    <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"Tap to share your bug report"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"Select to share your bug report without a screenshot or wait for the screenshot to finish"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"Tap to share your bug report without a screenshot or wait for the screenshot to finish"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"Tap to share your bug report without a screenshot or wait for the screenshot to finish"</string>
+    <string name="bugreport_confirm" msgid="5917407234515812495">"Bug reports contain data from the system\'s various log files, which may include data that you consider sensitive (such as app-usage and location data). Only share bug reports with people and apps that you trust."</string>
+    <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"Don\'t show again"</string>
+    <string name="bugreport_storage_title" msgid="5332488144740527109">"Bug reports"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"Bug report file could not be read"</string>
+    <string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"Couldn\'t add bug report details to zip file"</string>
+    <string name="bugreport_unnamed" msgid="2800582406842092709">"unnamed"</string>
+    <string name="bugreport_info_action" msgid="2158204228510576227">"Details"</string>
+    <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Screenshot"</string>
+    <string name="bugreport_screenshot_taken" msgid="5684211273096253120">"Screenshot taken successfully."</string>
+    <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Screenshot could not be taken."</string>
+    <string name="bugreport_info_dialog_title" msgid="1355948594292983332">"Bug report <xliff:g id="ID">#%d</xliff:g> details"</string>
+    <string name="bugreport_info_name" msgid="4414036021935139527">"Filename"</string>
+    <string name="bugreport_info_title" msgid="2306030793918239804">"Bug title"</string>
+    <string name="bugreport_info_description" msgid="5072835127481627722">"Bug summary"</string>
+    <string name="save" msgid="4781509040564835759">"Save"</string>
+    <string name="bugreport_intent_chooser_title" msgid="7605709494790894076">"Share Bug report"</string>
+</resources>
diff --git a/packages/Shell/res/values-en-rXC/strings.xml b/packages/Shell/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..9e891f4
--- /dev/null
+++ b/packages/Shell/res/values-en-rXC/strings.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‏‏‏‎‎Shell‎‏‎‎‏‎"</string>
+    <string name="bugreport_notification_channel" msgid="2574150205913861141">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‎‎‎‏‎‏‎‏‎Bug reports‎‏‎‎‏‎"</string>
+    <string name="bugreport_in_progress_title" msgid="4311705936714972757">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎Bug report ‎‏‎‎‏‏‎<xliff:g id="ID">#%d</xliff:g>‎‏‎‎‏‏‏‎ is being generated‎‏‎‎‏‎"</string>
+    <string name="bugreport_finished_title" msgid="4429132808670114081">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎Bug report ‎‏‎‎‏‏‎<xliff:g id="ID">#%d</xliff:g>‎‏‎‎‏‏‏‎ captured‎‏‎‎‏‎"</string>
+    <string name="bugreport_updating_title" msgid="4423539949559634214">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‎‎‏‏‎‎Adding details to the bug report‎‏‎‎‏‎"</string>
+    <string name="bugreport_updating_wait" msgid="3322151947853929470">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎Please wait…‎‏‎‎‏‎"</string>
+    <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‎‎‎‏‎The bug report will appear on the phone shortly‎‏‎‎‏‎"</string>
+    <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎Select to share your bug report‎‏‎‎‏‎"</string>
+    <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎Tap to share your bug report‎‏‎‎‏‎"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎Select to share your bug report without a screenshot or wait for the screenshot to finish‎‏‎‎‏‎"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‎Tap to share your bug report without a screenshot or wait for the screenshot to finish‎‏‎‎‏‎"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‎Tap to share your bug report without a screenshot or wait for the screenshot to finish‎‏‎‎‏‎"</string>
+    <string name="bugreport_confirm" msgid="5917407234515812495">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‎Bug reports contain data from the system\'s various log files, which may include data you consider sensitive (such as app-usage and location data). Only share bug reports with people and apps you trust.‎‏‎‎‏‎"</string>
+    <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‎Don\'t show again‎‏‎‎‏‎"</string>
+    <string name="bugreport_storage_title" msgid="5332488144740527109">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎Bug reports‎‏‎‎‏‎"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‎Bug report file could not be read‎‏‎‎‏‎"</string>
+    <string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‏‎Couldn\'t add bug report details to zip file‎‏‎‎‏‎"</string>
+    <string name="bugreport_unnamed" msgid="2800582406842092709">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‏‎‎‏‎‏‎unnamed‎‏‎‎‏‎"</string>
+    <string name="bugreport_info_action" msgid="2158204228510576227">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎Details‎‏‎‎‏‎"</string>
+    <string name="bugreport_screenshot_action" msgid="8677781721940614995">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎Screenshot‎‏‎‎‏‎"</string>
+    <string name="bugreport_screenshot_taken" msgid="5684211273096253120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‎‏‎‏‏‎‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎Screenshot taken successfully.‎‏‎‎‏‎"</string>
+    <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎Screenshot could not be taken.‎‏‎‎‏‎"</string>
+    <string name="bugreport_info_dialog_title" msgid="1355948594292983332">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎‎‏‎‎‎Bug report ‎‏‎‎‏‏‎<xliff:g id="ID">#%d</xliff:g>‎‏‎‎‏‏‏‎ details‎‏‎‎‏‎"</string>
+    <string name="bugreport_info_name" msgid="4414036021935139527">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‏‎Filename‎‏‎‎‏‎"</string>
+    <string name="bugreport_info_title" msgid="2306030793918239804">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‎Bug title‎‏‎‎‏‎"</string>
+    <string name="bugreport_info_description" msgid="5072835127481627722">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎Bug summary‎‏‎‎‏‎"</string>
+    <string name="save" msgid="4781509040564835759">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎Save‎‏‎‎‏‎"</string>
+    <string name="bugreport_intent_chooser_title" msgid="7605709494790894076">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‏‎‎‎Share Bug report‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/Shell/res/values-eu/strings.xml b/packages/Shell/res/values-eu/strings.xml
index 78295e6..9695e41 100644
--- a/packages/Shell/res/values-eu/strings.xml
+++ b/packages/Shell/res/values-eu/strings.xml
@@ -28,7 +28,7 @@
     <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"Hautatu hau akatsen txostena argazkirik gabe partekatzeko edo itxaron pantaila-argazkia atera arte"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"Sakatu akatsen txostena argazkirik gabe partekatzeko edo itxaron pantaila-argazkia atera arte"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"Sakatu akatsen txostena argazkirik gabe partekatzeko edo itxaron pantaila-argazkia atera arte"</string>
-    <string name="bugreport_confirm" msgid="5917407234515812495">"Errore-txostenek sistemaren erregistro-fitxategietako datuak dauzkate eta, haietan, isilpekotzat jotzen duzun informazioa ager daiteke (adibidez, aplikazioen erabilera eta kokapen-datuak). Errore-txostenak partekatzen badituzu, partekatu soilik pertsona eta aplikazio fidagarriekin."</string>
+    <string name="bugreport_confirm" msgid="5917407234515812495">"Errore-txostenek sistemaren erregistro-fitxategietako datuak dauzkate eta, haietan, kontuzkotzat jotzen duzun informazioa ager daiteke (adibidez, aplikazioen erabilera eta kokapen-datuak). Errore-txostenak partekatzen badituzu, partekatu soilik pertsona eta aplikazio fidagarriekin."</string>
     <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"Ez erakutsi berriro"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Akatsen txostenak"</string>
     <string name="bugreport_unreadable_text" msgid="586517851044535486">"Ezin izan da irakurri akatsen txostena"</string>
diff --git a/packages/Shell/res/values-fa/strings.xml b/packages/Shell/res/values-fa/strings.xml
index 75e7760..d4bb3c6 100644
--- a/packages/Shell/res/values-fa/strings.xml
+++ b/packages/Shell/res/values-fa/strings.xml
@@ -23,8 +23,8 @@
     <string name="bugreport_updating_title" msgid="4423539949559634214">"اضافه کردن جزئیات به گزارش اشکال"</string>
     <string name="bugreport_updating_wait" msgid="3322151947853929470">"لطفاً منتظر بمانید..."</string>
     <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"گزارش مشکل به‌زودی در تلفن نشان داده می‌شود"</string>
-    <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"برای به اشتراک گذاشتن گزارش اشکالتان، انتخاب کنید"</string>
-    <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"برای به اشتراک گذاشتن گزارش اشکال، ضربه بزنید"</string>
+    <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"برای هم‌رسانی گزارش اشکالتان، انتخاب کنید"</string>
+    <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"برای هم‌رسانی گزارش اشکال، ضربه بزنید"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"انتخاب کنید تا گزارش اشکالتان بدون عکس صفحه‌نمایش به اشتراک گذاشته شود یا منتظر بمانید گرفتن عکس از صفحه‌نمایش تمام شود"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"برای اشتراک‌گذاری گزارش مشکل بدون عکس صفحه‌نمایش، ضربه بزنید یا صبر کنید تا عکس صفحه‌نمایش گرفته شود."</string>
     <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"برای اشتراک‌گذاری گزارش مشکل بدون عکس صفحه‌نمایش، ضربه بزنید یا صبر کنید تا عکس صفحه‌نمایش گرفته شود."</string>
diff --git a/packages/Shell/res/values-hi/strings.xml b/packages/Shell/res/values-hi/strings.xml
index 66ad35c..666d254 100644
--- a/packages/Shell/res/values-hi/strings.xml
+++ b/packages/Shell/res/values-hi/strings.xml
@@ -17,31 +17,31 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="3701846017049540910">"शेल"</string>
-    <string name="bugreport_notification_channel" msgid="2574150205913861141">"बग रिपोर्ट"</string>
-    <string name="bugreport_in_progress_title" msgid="4311705936714972757">"बग रिपोर्ट <xliff:g id="ID">#%d</xliff:g> जेनरेट की जा रही है"</string>
-    <string name="bugreport_finished_title" msgid="4429132808670114081">"बग रिपोर्ट <xliff:g id="ID">#%d</xliff:g> कैप्चर की गई"</string>
-    <string name="bugreport_updating_title" msgid="4423539949559634214">"बग रिपोर्ट में विवरण जोड़े जा रहे हैं"</string>
+    <string name="bugreport_notification_channel" msgid="2574150205913861141">"गड़बड़ी की रिपोर्ट"</string>
+    <string name="bugreport_in_progress_title" msgid="4311705936714972757">"गड़बड़ी की रिपोर्ट <xliff:g id="ID">#%d</xliff:g> तैयार की जा रही है"</string>
+    <string name="bugreport_finished_title" msgid="4429132808670114081">"गड़बड़ी की रिपोर्ट <xliff:g id="ID">#%d</xliff:g> कैप्चर की गई"</string>
+    <string name="bugreport_updating_title" msgid="4423539949559634214">"गड़बड़ी की रिपोर्ट में पूरी जानकारी जोड़ी जा रही है"</string>
     <string name="bugreport_updating_wait" msgid="3322151947853929470">"कृपया प्रतीक्षा करें…"</string>
-    <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"बग रिपोर्ट थोड़ी ही देर में फ़ोन पर दिखाई देगी"</string>
-    <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"अपनी बग रिपोर्ट साझा करना चुनें"</string>
-    <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"अपनी बग रिपोर्ट साझा करने के लिए टैप करें"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"किसी स्क्रीनशॉट के बिना अपनी बग रिपोर्ट साझा करना चुनें या स्क्रीनशॉट पूरा होने तक इंतज़ार करें"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"अपनी बग रिपोर्ट को बिना स्क्रीनशॉट साझा करने हेतु टैप करें या स्क्रीनशॉट पूरा होने की प्रतीक्षा करें"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"अपनी बग रिपोर्ट को बिना स्क्रीनशॉट साझा करने हेतु टैप करें या स्क्रीनशॉट पूरा होने की प्रतीक्षा करें"</string>
-    <string name="bugreport_confirm" msgid="5917407234515812495">"बग रिपोर्ट में सिस्टम की विभिन्न लॉग फ़ाइलों का डेटा शामिल होता है, जिसमें ऐसा डेटा शामिल हो सकता है जिसे आप संवेदनशील मानते हैं (जैसे कि ऐप्लिकेशन का उपयोग और स्थान डेटा). बग रिपोर्ट केवल अपने विश्वसनीय लोगों और ऐप्लिकेशन से साझा करें."</string>
+    <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"गड़बड़ी की रिपोर्ट थोड़ी ही देर में फ़ोन पर दिखाई देगी"</string>
+    <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"अपनी गड़बड़ी की रिपोर्ट शेयर करने के लिए टैप करें"</string>
+    <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"अपनी गड़बड़ी की रिपोर्ट शेयर करने के लिए टैप करें"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"स्क्रीनशॉट के बिना अपनी गड़बड़ी की रिपोर्ट शेयर करना चुनें या स्क्रीनशॉट पूरा होने तक इंतज़ार करें"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"अपनी गड़बड़ी की रिपोर्ट को बिना स्क्रीनशॉट के शेयर करने के लिए टैप करें या स्क्रीनशॉट पूरा होने की इंतज़ार करें"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"अपनी गड़बड़ी की रिपोर्ट को बिना स्क्रीनशॉट के शेयर करने के लिए टैप करें या स्क्रीनशॉट पूरा होने की इंतज़ार करें"</string>
+    <string name="bugreport_confirm" msgid="5917407234515812495">"गड़बड़ी की रिपोर्ट में सिस्टम की अलग-अलग लॉग फ़ाइलों का डेटा शामिल होता है, जिसमें ऐसा डेटा शामिल हो सकता है जिसे आप संवेदनशील मानते हैं (जैसे कि ऐप्लिकेशन का उपयोग और जगह डेटा). गड़बड़ी की रिपोर्ट केवल अपने भरोसेमंद लोगों और ऐप्लिकेशन से शेयर करें."</string>
     <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"फिर से ना दिखाएं"</string>
-    <string name="bugreport_storage_title" msgid="5332488144740527109">"बग रिपोर्ट"</string>
-    <string name="bugreport_unreadable_text" msgid="586517851044535486">"बग रिपोर्ट फ़ाइल नहीं पढ़ी जा सकी"</string>
-    <string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"बग रिपोर्ट को ज़िप फ़ाइल में नहीं जोड़ा जा सका"</string>
+    <string name="bugreport_storage_title" msgid="5332488144740527109">"गड़बड़ी की रिपोर्ट"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"गड़बड़ी की रिपोर्ट फ़ाइल नहीं पढ़ी जा सकी"</string>
+    <string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"गड़बड़ी की रिपोर्ट को ज़िप फ़ाइल में नहीं जोड़ा जा सका"</string>
     <string name="bugreport_unnamed" msgid="2800582406842092709">"अनामांकित"</string>
     <string name="bugreport_info_action" msgid="2158204228510576227">"विवरण"</string>
     <string name="bugreport_screenshot_action" msgid="8677781721940614995">"स्क्रीनशॉट"</string>
     <string name="bugreport_screenshot_taken" msgid="5684211273096253120">"स्क्रीनशॉट सफलतापूर्वक लिया गया."</string>
     <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"स्क्रीनशॉट नहीं लिया जा सका."</string>
-    <string name="bugreport_info_dialog_title" msgid="1355948594292983332">"बग रिपोर्ट <xliff:g id="ID">#%d</xliff:g> के विवरण"</string>
+    <string name="bugreport_info_dialog_title" msgid="1355948594292983332">"गड़बड़ी की रिपोर्ट <xliff:g id="ID">#%d</xliff:g> की पूरी जानकारी"</string>
     <string name="bugreport_info_name" msgid="4414036021935139527">"फ़ाइल नाम"</string>
-    <string name="bugreport_info_title" msgid="2306030793918239804">"बग शीर्षक"</string>
-    <string name="bugreport_info_description" msgid="5072835127481627722">"बग सारांश"</string>
-    <string name="save" msgid="4781509040564835759">"सहेजें"</string>
-    <string name="bugreport_intent_chooser_title" msgid="7605709494790894076">"बग रिपोर्ट साझा करें"</string>
+    <string name="bugreport_info_title" msgid="2306030793918239804">"गड़बड़ी का शीर्षक"</string>
+    <string name="bugreport_info_description" msgid="5072835127481627722">"गड़बड़ी का सारांश"</string>
+    <string name="save" msgid="4781509040564835759">"सेव करें"</string>
+    <string name="bugreport_intent_chooser_title" msgid="7605709494790894076">"गड़बड़ी की रिपोर्ट शेयर करें"</string>
 </resources>
diff --git a/packages/Shell/res/values-iw/strings.xml b/packages/Shell/res/values-iw/strings.xml
index 5accb77..c99e69e 100644
--- a/packages/Shell/res/values-iw/strings.xml
+++ b/packages/Shell/res/values-iw/strings.xml
@@ -42,6 +42,6 @@
     <string name="bugreport_info_name" msgid="4414036021935139527">"שם קובץ"</string>
     <string name="bugreport_info_title" msgid="2306030793918239804">"כותרת הבאג"</string>
     <string name="bugreport_info_description" msgid="5072835127481627722">"סיכום הבאג"</string>
-    <string name="save" msgid="4781509040564835759">"שמור"</string>
+    <string name="save" msgid="4781509040564835759">"שמירה"</string>
     <string name="bugreport_intent_chooser_title" msgid="7605709494790894076">"שיתוף דוח על באג"</string>
 </resources>
diff --git a/packages/Shell/res/values-mr/strings.xml b/packages/Shell/res/values-mr/strings.xml
index 7e66436..7cab9d7 100644
--- a/packages/Shell/res/values-mr/strings.xml
+++ b/packages/Shell/res/values-mr/strings.xml
@@ -17,31 +17,31 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="3701846017049540910">"शेल"</string>
-    <string name="bugreport_notification_channel" msgid="2574150205913861141">"दोष अहवाल"</string>
-    <string name="bugreport_in_progress_title" msgid="4311705936714972757">"दोष अहवाल <xliff:g id="ID">#%d</xliff:g> तयार केला जात आहे"</string>
-    <string name="bugreport_finished_title" msgid="4429132808670114081">"दोष अहवाल <xliff:g id="ID">#%d</xliff:g> कॅप्चर केला"</string>
+    <string name="bugreport_notification_channel" msgid="2574150205913861141">"बग रीपोर्ट"</string>
+    <string name="bugreport_in_progress_title" msgid="4311705936714972757">"बग रीपोर्ट <xliff:g id="ID">#%d</xliff:g> तयार केला जात आहे"</string>
+    <string name="bugreport_finished_title" msgid="4429132808670114081">"बग रीपोर्ट <xliff:g id="ID">#%d</xliff:g> कॅप्चर केला"</string>
     <string name="bugreport_updating_title" msgid="4423539949559634214">"दोष अहवालामध्‍ये तपशील जोडत आहे"</string>
     <string name="bugreport_updating_wait" msgid="3322151947853929470">"कृपया प्रतीक्षा करा..."</string>
-    <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"फोनवर दोष अहवाल लवकरच दिसेल"</string>
-    <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"आपला दोष अहवाल शेअर करण्यासाठी निवडा"</string>
-    <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"आपला दोष अहवाल सामायिक करण्यासाठी टॅप करा"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"आपला दोष अहवाल स्क्रीनशॉटशिवाय शेअर करण्यासाठी टॅप करा किंवा स्क्रीनशॉट पूर्ण होण्याची प्रतीक्षा करा"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"स्क्रीनशॉट शिवाय आपला दोष अहवाल सामायिक करण्यासाठी टॅप करा किंवा समाप्त करण्यासाठी स्क्रीनशॉटची प्रतीक्षा करा"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"स्क्रीनशॉट शिवाय आपला दोष अहवाल सामायिक करण्यासाठी टॅप करा किंवा समाप्त करण्यासाठी स्क्रीनशॉटची प्रतीक्षा करा"</string>
-    <string name="bugreport_confirm" msgid="5917407234515812495">"दोष अहवालांमध्ये आपण संवेदनशील (अॅप-वापर आणि स्थान डेटा यासारखा) डेटा म्हणून विचार करता त्या डेटाच्या समावेशासह सिस्टीमच्या विविध लॉग फायलींमधील डेटा असतो. ज्या लोकांवर आणि अॅपवर आपला विश्वास आहे केवळ त्यांच्यासह हा दोष अहवाल सामायिक करा."</string>
+    <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"फोनवर बग रीपोर्ट लवकरच दिसेल"</string>
+    <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"आपला बग रीपोर्ट शेअर करण्यासाठी निवडा"</string>
+    <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"आपला बग रीपोर्ट शेअर करण्यासाठी टॅप करा"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"आपला बग रीपोर्ट स्क्रीनशॉटशिवाय शेअर करण्यासाठी टॅप करा किंवा स्क्रीनशॉट पूर्ण होण्याची प्रतीक्षा करा"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"स्क्रीनशॉट शिवाय आपला बग रीपोर्ट शेअर करण्यासाठी टॅप करा किंवा समाप्त करण्यासाठी स्क्रीनशॉटची प्रतीक्षा करा"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"स्क्रीनशॉट शिवाय आपला बग रीपोर्ट शेअर करण्यासाठी टॅप करा किंवा समाप्त करण्यासाठी स्क्रीनशॉटची प्रतीक्षा करा"</string>
+    <string name="bugreport_confirm" msgid="5917407234515812495">"बग रीपोर्टांमध्ये आपण संवेदनशील (अॅप-वापर आणि स्थान डेटा यासारखा) डेटा म्हणून विचार करता त्या डेटाच्या समावेशासह सिस्टीमच्या विविध लॉग फायलींमधील डेटा असतो. ज्या लोकांवर आणि अॅपवर आपला विश्वास आहे केवळ त्यांच्यासह हा बग रीपोर्ट शेअर करा."</string>
     <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"पुन्हा दर्शवू नका"</string>
-    <string name="bugreport_storage_title" msgid="5332488144740527109">"दोष अहवाल"</string>
-    <string name="bugreport_unreadable_text" msgid="586517851044535486">"दोष अहवाल फाईल वाचणे शक्य झाले नाही"</string>
-    <string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"झिप फाईल मध्ये दोष अहवाल तपशील जोडणे शक्य झाले नाही"</string>
+    <string name="bugreport_storage_title" msgid="5332488144740527109">"बग रीपोर्ट"</string>
+    <string name="bugreport_unreadable_text" msgid="586517851044535486">"बग रीपोर्ट फाईल वाचणे शक्य झाले नाही"</string>
+    <string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"झिप फाईल मध्ये बग रीपोर्ट तपशील जोडणे शक्य झाले नाही"</string>
     <string name="bugreport_unnamed" msgid="2800582406842092709">"अनामित"</string>
     <string name="bugreport_info_action" msgid="2158204228510576227">"तपशील"</string>
     <string name="bugreport_screenshot_action" msgid="8677781721940614995">"स्क्रीनशॉट"</string>
     <string name="bugreport_screenshot_taken" msgid="5684211273096253120">"स्क्रीनशॉट यशस्वीरित्या घेतला."</string>
     <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"स्क्रीनशॉट घेणे शक्य झाले नाही."</string>
-    <string name="bugreport_info_dialog_title" msgid="1355948594292983332">"दोष अहवाल <xliff:g id="ID">#%d</xliff:g> तपशील"</string>
+    <string name="bugreport_info_dialog_title" msgid="1355948594292983332">"बग रीपोर्ट <xliff:g id="ID">#%d</xliff:g> तपशील"</string>
     <string name="bugreport_info_name" msgid="4414036021935139527">"फाईलनाव"</string>
     <string name="bugreport_info_title" msgid="2306030793918239804">"दोष शीर्षक"</string>
     <string name="bugreport_info_description" msgid="5072835127481627722">"दोष सारांश"</string>
-    <string name="save" msgid="4781509040564835759">"जतन करा"</string>
-    <string name="bugreport_intent_chooser_title" msgid="7605709494790894076">"दोष अहवाल सामायिक करा"</string>
+    <string name="save" msgid="4781509040564835759">"सेव्ह करा"</string>
+    <string name="bugreport_intent_chooser_title" msgid="7605709494790894076">"बग रीपोर्ट शेअर करा"</string>
 </resources>
diff --git a/packages/Shell/res/values-ne/strings.xml b/packages/Shell/res/values-ne/strings.xml
index 8079210..eadfeb9 100644
--- a/packages/Shell/res/values-ne/strings.xml
+++ b/packages/Shell/res/values-ne/strings.xml
@@ -23,9 +23,9 @@
     <string name="bugreport_updating_title" msgid="4423539949559634214">"बग रिपोर्टमा विवरणहरू थप्दै"</string>
     <string name="bugreport_updating_wait" msgid="3322151947853929470">"कृपया प्रतीक्षा गर्नुहोला..."</string>
     <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"उक्त बग सम्बन्धी रिपोर्ट चाँडै नै यस फोनमा देखा पर्नेछ"</string>
-    <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"तपाईंको बग रिपोर्ट आदान-प्रदान गर्न चयन गर्नुहोस्"</string>
+    <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"तपाईंको बग रिपोर्ट आदान प्रदान गर्न चयन गर्नुहोस्"</string>
     <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"तपाईंको बग रिपोर्टलाई साझेदारी गर्न ट्याप गर्नुहोस्"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"तपाईंको बग रिपोर्ट स्क्रिनसट बिना आदान-प्रदान गर्नका लागि चयन गर्नुहोस् वा स्क्रिनसट लिने प्रक्रिया पूरा हुने प्रतीक्षा गर्नुहोस्"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"तपाईंको बग रिपोर्ट स्क्रिनसट बिना आदान प्रदान गर्नका लागि चयन गर्नुहोस् वा स्क्रिनसट लिने प्रक्रिया पूरा हुने प्रतीक्षा गर्नुहोस्"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"तपाईँको बग रिपोर्टलाई स्क्रिनसट बिना साझेदारी गर्नका लागि ट्याप गर्नुहोस् वा स्क्रिनसट लिने प्रक्रिया पूरा हुन प्रतीक्षा गर्नुहोस्"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"तपाईँको बग रिपोर्टलाई स्क्रिनसट बिना साझेदारी गर्नका लागि ट्याप गर्नुहोस् वा स्क्रिनसट लिने प्रक्रिया पूरा हुन प्रतीक्षा गर्नुहोस्"</string>
     <string name="bugreport_confirm" msgid="5917407234515812495">"बग रिपोर्टहरूमा प्रणालीका विभिन्न लग फाइलहरूको डेटा हुन्छ जसमा तपाईँले संवेदनशील मानेको डेटा समावेश हुन सक्छ (जस्तै अनुप्रयोगको प्रयोग र स्थान सम्बन्धी डेटा)। तपाईँले विश्वास गर्ने व्यक्ति र अनुप्रयोगहरूसँग मात्र बग रिपोर्टहरूलाई साझेदारी गर्नुहोस्।"</string>
diff --git a/packages/Shell/res/values-pa/strings.xml b/packages/Shell/res/values-pa/strings.xml
index 56a2bea..cdf3769 100644
--- a/packages/Shell/res/values-pa/strings.xml
+++ b/packages/Shell/res/values-pa/strings.xml
@@ -22,14 +22,14 @@
     <string name="bugreport_finished_title" msgid="4429132808670114081">"ਬੱਗ ਰਿਪੋਰਟ <xliff:g id="ID">#%d</xliff:g> ਕੈਪਚਰ ਕੀਤੀ ਗਈ"</string>
     <string name="bugreport_updating_title" msgid="4423539949559634214">"ਬੱਗ ਰਿਪੋਰਟ ਵਿੱਚ ਵੇਰਵਿਆਂ ਨੂੰ ਸ਼ਾਮਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
     <string name="bugreport_updating_wait" msgid="3322151947853929470">"ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕ ਕਰੋ..."</string>
-    <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"ਬੱਗ ਰਿਪੋਰਟ ਜਲਦ ਹੀ ਫ਼ੋਨ \'ਤੇ ਵਿਖਾਈ ਦੇਵੇਗੀ"</string>
+    <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"ਬੱਗ ਰਿਪੋਰਟ ਜਲਦ ਹੀ ਫ਼ੋਨ \'ਤੇ ਦਿਖਾਈ ਦੇਵੇਗੀ"</string>
     <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"ਆਪਣੀ ਬੱਗ ਰਿਪੋਰਟ ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਲਈ ਚੁਣੋ"</string>
     <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"ਆਪਣੀ ਬੱਗ ਰਿਪੋਰਟ ਸਾਂਝੀ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਦੇ ਬਿਨਾਂ ਆਪਣੀ ਬੱਗ ਰਿਪੋਰਟ ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਲਈ ਚੁਣੋ ਜਾਂ ਸਕ੍ਰੀਨਸ਼ਾਟ ਦੇ ਪੂਰੇ ਹੋਣ ਦੀ ਉਡੀਕ ਕਰੋ"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਦੇ ਬਿਨਾਂ ਆਪਣੀ ਬੱਗ ਰਿਪੋਰਟ ਨੂੰ ਸਾਂਝੀ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ ਜਾਂ ਸਕ੍ਰੀਨਸ਼ਾਟ ਦੇ ਪੂਰੇ ਹੋਣ ਦੀ ਉਡੀਕ ਕਰੋ"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਦੇ ਬਿਨਾਂ ਆਪਣੀ ਬੱਗ ਰਿਪੋਰਟ ਨੂੰ ਸਾਂਝੀ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ ਜਾਂ ਸਕ੍ਰੀਨਸ਼ਾਟ ਦੇ ਪੂਰੇ ਹੋਣ ਦੀ ਉਡੀਕ ਕਰੋ"</string>
-    <string name="bugreport_confirm" msgid="5917407234515812495">"ਬੱਗ ਰਿਪੋਰਟਾਂ ਵਿੱਚ ਸਿਸਟਮ ਦੀਆਂ ਵੱਖ-ਵੱਖ ਲੌਗ ਫ਼ਾਈਲਾਂ ਦਾ ਡੈਟਾ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਉਹ ਡੈਟਾ ਸ਼ਾਮਲ ਹੋ ਸਕਦਾ ਹੈ ਜਿਸ ਨੂੰ ਤੁਸੀਂ ਸੰਵੇਦਨਸ਼ੀਲ ਮੰਨਦੇ ਹੋ (ਜਿਵੇਂ ਕਿ ਐਪ-ਵਰਤੋਂ ਅਤੇ ਟਿਕਾਣਾ ਡੈਟਾ)। ਬੱਗ ਰਿਪੋਰਟਾਂ ਨੂੰ ਸਿਰਫ਼ ਆਪਣੇ ਭਰੋਸੇਯੋਗ ਲੋਕਾਂ ਅਤੇ ਐਪਾਂ ਨਾਲ ਸਾਂਝਾ ਕਰੋ।"</string>
-    <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"ਦੁਬਾਰਾ ਨਾ ਵਿਖਾਓ"</string>
+    <string name="bugreport_confirm" msgid="5917407234515812495">"ਬੱਗ ਰਿਪੋਰਟਾਂ ਵਿੱਚ ਸਿਸਟਮ ਦੀਆਂ ਵੱਖ-ਵੱਖ ਲੌਗ ਫ਼ਾਈਲਾਂ ਦਾ ਡਾਟਾ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਉਹ ਡਾਟਾ ਸ਼ਾਮਲ ਹੋ ਸਕਦਾ ਹੈ ਜਿਸ ਨੂੰ ਤੁਸੀਂ ਸੰਵੇਦਨਸ਼ੀਲ ਮੰਨਦੇ ਹੋ (ਜਿਵੇਂ ਕਿ ਐਪ-ਵਰਤੋਂ ਅਤੇ ਟਿਕਾਣਾ ਡਾਟਾ)। ਬੱਗ ਰਿਪੋਰਟਾਂ ਨੂੰ ਸਿਰਫ਼ ਆਪਣੇ ਭਰੋਸੇਯੋਗ ਲੋਕਾਂ ਅਤੇ ਐਪਾਂ ਨਾਲ ਸਾਂਝਾ ਕਰੋ।"</string>
+    <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"ਦੁਬਾਰਾ ਨਾ  ਦਿਖਾਓ"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"ਬਗ ਰਿਪੋਰਟਾਂ"</string>
     <string name="bugreport_unreadable_text" msgid="586517851044535486">"ਬਗ ਰਿਪੋਰਟ ਫ਼ਾਈਲ ਪੜ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕੀ"</string>
     <string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"ਬੱਗ ਰਿਪੋਰਟ ਵੇਰਵਿਆਂ ਨੂੰ ਜ਼ਿਪ ਫ਼ਾਈਲ ਵਿੱਚ ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
diff --git a/packages/Shell/res/values-sw/strings.xml b/packages/Shell/res/values-sw/strings.xml
index 3f3dd2a..e4dcbee 100644
--- a/packages/Shell/res/values-sw/strings.xml
+++ b/packages/Shell/res/values-sw/strings.xml
@@ -24,10 +24,10 @@
     <string name="bugreport_updating_wait" msgid="3322151947853929470">"Tafadhali subiri…"</string>
     <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"Tutatuma ripoti ya hitilafu kwenye simu baada ya muda mfupi"</string>
     <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"Chagua kushiriki ripoti ya hitilafu"</string>
-    <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"Gonga ili ushiriki ripoti yako ya hitilafu"</string>
+    <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"Gusa ili ushiriki ripoti yako ya hitilafu"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"Chagua kushiriki ripoti yako ya hitilafu bila picha ya skrini au usubiri picha ya skrini itayarishwe"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"Gonga ili ushiriki ripoti yako ya hitilafu bila picha ya skrini au usubiri picha ya skrini itayarishwe"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"Gonga ili ushiriki ripoti yako ya hitilafu bila picha ya skrini au usubiri picha ya skrini itayarishwe"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"Gusa ili ushiriki ripoti yako ya hitilafu bila picha ya skrini au usubiri picha ya skrini itayarishwe"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"Gusa ili ushiriki ripoti yako ya hitilafu bila picha ya skrini au usubiri picha ya skrini itayarishwe"</string>
     <string name="bugreport_confirm" msgid="5917407234515812495">"Ripoti za hitilafu zinajumuisha data kutoka faili za kumbukumbu mbalimbali zilizo kwenye mfumo, ambazo huenda zinajumuisha data ambayo unachukulia kuwa nyeti (kama vile matumizi ya programu na maelezo kuhusu data ilipo). Shiriki ripoti za hitilafu na watu na programu unazoamini pekee."</string>
     <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"Usionyeshe tena"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Ripoti za hitilafu"</string>
diff --git a/packages/Shell/res/values-te/strings.xml b/packages/Shell/res/values-te/strings.xml
index dd2d910..bed7367 100644
--- a/packages/Shell/res/values-te/strings.xml
+++ b/packages/Shell/res/values-te/strings.xml
@@ -24,11 +24,11 @@
     <string name="bugreport_updating_wait" msgid="3322151947853929470">"దయచేసి వేచి ఉండండి..."</string>
     <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"బగ్ నివేదిక త్వరలో ఫోన్‌లో కనిపిస్తుంది"</string>
     <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"మీ బగ్ నివేదికను భాగస్వామ్యం చేయడానికి ఎంచుకోండి"</string>
-    <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"మీ బగ్ నివేదికను భాగస్వామ్యం చేయడానికి నొక్కండి"</string>
+    <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"మీ బగ్ నివేదికను షేర్ చేయడానికి నొక్కండి"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"స్క్రీన్‌షాట్ లేకుండా మీ బగ్ నివేదికను భాగస్వామ్యం చేయడానికి ఎంచుకోండి లేదా స్క్రీన్‌షాట్ ముగిసేదాకా వేచి ఉండండి"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"స్క్రీన్‌షాట్ లేకుండా మీ బగ్ నివే. భాగ. చేయడానికి నొక్కండి లేదా స్క్రీన్‌షాట్ ముగిసేదాకా వేచి ఉండండి"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"స్క్రీన్‌షాట్ లేకుండా మీ బగ్ నివే. భాగ. చేయడానికి నొక్కండి లేదా స్క్రీన్‌షాట్ ముగిసేదాకా వేచి ఉండండి"</string>
-    <string name="bugreport_confirm" msgid="5917407234515812495">"బగ్ నివేదికల్లో మీరు గోప్యమైనదిగా పరిగణించే (అనువర్తన వినియోగం మరియు స్థాన డేటా వంటి) డేటాతో సహా సిస్టమ్‌కు సంబంధించిన విభిన్న లాగ్ ఫైల్‌ల డేటా ఉంటుంది. బగ్ నివేదికలను మీరు విశ్వసించే అనువర్తనాలు మరియు వ్యక్తులతో మాత్రమే భాగస్వామ్యం చేయండి."</string>
+    <string name="bugreport_confirm" msgid="5917407234515812495">"బగ్ నివేదికల్లో మీరు గోప్యమైనదిగా పరిగణించే (యాప్ వినియోగం మరియు స్థాన డేటా వంటి) డేటాతో సహా సిస్టమ్‌కు సంబంధించిన విభిన్న లాగ్ ఫైల్‌ల డేటా ఉంటుంది. బగ్ నివేదికలను మీరు విశ్వసించే యాప్‌లు మరియు వ్యక్తులతో మాత్రమే షేర్ చేయండి."</string>
     <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"మళ్లీ చూపవద్దు"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"బగ్ నివేదికలు"</string>
     <string name="bugreport_unreadable_text" msgid="586517851044535486">"బగ్ నివేదిక ఫైల్‌ను చదవడం సాధ్యపడలేదు"</string>
diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java
index 988b986..a8b184c 100644
--- a/packages/Shell/src/com/android/shell/BugreportProgressService.java
+++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java
@@ -1060,7 +1060,6 @@
         }
         return new Notification.Builder(context, NOTIFICATION_CHANNEL_ID)
                 .addExtras(sNotificationBundle)
-                .setCategory(Notification.CATEGORY_SYSTEM)
                 .setSmallIcon(
                         isTv(context) ? R.drawable.ic_bug_report_black_24dp
                                 : com.android.internal.R.drawable.stat_sys_adb)
diff --git a/packages/Shell/src/com/android/shell/BugreportWarningActivity.java b/packages/Shell/src/com/android/shell/BugreportWarningActivity.java
index bdf4171..2191d93 100644
--- a/packages/Shell/src/com/android/shell/BugreportWarningActivity.java
+++ b/packages/Shell/src/com/android/shell/BugreportWarningActivity.java
@@ -64,7 +64,7 @@
 
         final int state = getWarningState(this, STATE_UNKNOWN);
         final boolean checked;
-        if (Build.TYPE.equals("user")) {
+        if (Build.IS_USER) {
             checked = state == STATE_HIDE; // Only checks if specifically set to.
         } else {
             checked = state != STATE_SHOW; // Checks by default.
diff --git a/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.java b/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.java
index 8bfcc74..e69b0a8 100644
--- a/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.java
+++ b/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.java
@@ -577,7 +577,7 @@
                 mUiBot.getVisibleObject(mContext.getString(R.string.bugreport_confirm_dont_repeat));
         final boolean firstTime = propertyState == null || propertyState == STATE_UNKNOWN;
         if (firstTime) {
-            if (Build.TYPE.equals("user")) {
+            if (Build.IS_USER) {
                 assertFalse("Checkbox should NOT be checked by default on user builds",
                         dontShowAgain.isChecked());
                 mUiBot.click(dontShowAgain, "dont-show-again");
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 47ffa5c..2f7f0bb 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -108,6 +108,7 @@
     <uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
 
     <!-- Keyguard -->
+    <uses-permission android:name="com.android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS" />
     <uses-permission android:name="android.permission.CONTROL_KEYGUARD" />
     <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
@@ -198,6 +199,9 @@
     <!-- to change themes - light or dark -->
     <uses-permission android:name="android.permission.CHANGE_OVERLAY_PACKAGES" />
 
+    <!-- permission necessary to hide non-system overlay windows from covering up the SystemUI -->
+    <uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS" />
+
     <application
         android:name=".SystemUIApplication"
         android:persistent="true"
@@ -271,21 +275,9 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
             <meta-data android:name="com.android.settings.category"
-                    android:value="com.android.settings.category.system" />
+                    android:value="com.android.settings.category.ia.system" />
         </activity>
 
-        <activity-alias android:name=".tuner.TunerSettingLink"
-                        android:targetActivity=".tuner.TunerActivity"
-                        android:enabled="false"
-                        android:process=":tuner">
-            <intent-filter android:priority="1">
-                <action android:name="com.android.settings.action.EXTRA_SETTINGS" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.category"
-                       android:value="com.android.settings.category.ia.system" />
-        </activity-alias>
-
         <activity-alias android:name=".DemoMode"
                   android:targetActivity=".tuner.TunerActivity"
                   android:icon="@drawable/tuner"
@@ -329,15 +321,20 @@
             android:exported="false">
         </activity>
 
+        <!-- Springboard for launching the share activity -->
+        <receiver android:name=".screenshot.GlobalScreenshot$ShareReceiver"
+            android:process=":screenshot"
+            android:exported="false" />
+
         <!-- Callback for dismissing screenshot notification after a share target is picked -->
         <receiver android:name=".screenshot.GlobalScreenshot$TargetChosenReceiver"
-                  android:process=":screenshot"
-                  android:exported="false" />
+            android:process=":screenshot"
+            android:exported="false" />
 
         <!-- Callback for deleting screenshot notification -->
         <receiver android:name=".screenshot.GlobalScreenshot$DeleteScreenshotReceiver"
-                  android:process=":screenshot"
-                  android:exported="false" />
+            android:process=":screenshot"
+            android:exported="false" />
 
         <!-- started from UsbDeviceSettingsManager -->
         <activity android:name=".usb.UsbConfirmActivity"
@@ -411,7 +408,8 @@
         <!-- started from PipUI -->
         <activity
             android:name=".pip.tv.PipMenuActivity"
-            android:exported="true"
+            android:permission="com.android.systemui.permission.SELF"
+            android:exported="false"
             android:theme="@style/PipTheme"
             android:launchMode="singleTop"
             android:taskAffinity=""
@@ -420,24 +418,10 @@
             android:supportsPictureInPicture="true"
             androidprv:alwaysFocusable="true"
             android:excludeFromRecents="true" />
-        <activity
-            android:name=".pip.tv.PipOverlayActivity"
-            android:exported="true"
-            android:theme="@style/PipTheme"
-            android:taskAffinity=""
-            android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|locale|layoutDirection"
-            android:resizeableActivity="true"
-            android:supportsPictureInPicture="true"
-            android:excludeFromRecents="true" />
-        <activity
-            android:name=".pip.tv.PipOnboardingActivity"
-            android:exported="true"
-            android:theme="@style/PipTheme"
-            android:launchMode="singleTop"
-            android:excludeFromRecents="true" />
 
         <activity
             android:name=".pip.phone.PipMenuActivity"
+            android:permission="com.android.systemui.permission.SELF"
             android:theme="@style/PipPhoneOverlayControlTheme"
             android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout"
             android:excludeFromRecents="true"
@@ -455,7 +439,6 @@
             android:exported="true"
             android:label="@string/dessert_case"
             android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
-            android:hardwareAccelerated="true"
             android:launchMode="singleInstance"
             android:screenOrientation="locked"
             android:process=":sweetsweetdesserts"
@@ -471,7 +454,6 @@
                   android:exported="true"
                   android:icon="@drawable/icon"
                   android:label="@string/mland"
-                  android:hardwareAccelerated="true"
                   android:launchMode="singleInstance"
                   android:screenOrientation="locked"
                   android:process=":sweetsweetdesserts"
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginActivity.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginActivity.java
deleted file mode 100644
index 925214e..0000000
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginActivity.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.plugins;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.res.Resources;
-import android.os.Bundle;
-
-import com.android.systemui.plugins.annotations.ProvidesInterface;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * A PluginActivity is an activity that replaces another full activity (e.g. RecentsActivity)
- * at runtime within the sysui process.
- */
-@ProvidesInterface(version = PluginActivity.VERSION)
-public abstract class PluginActivity extends Activity implements Plugin {
-
-    public static final int VERSION = 1;
-
-    public static final String ACTION_RECENTS = "com.android.systemui.action.PLUGIN_RECENTS";
-
-    private Context mSysuiContext;
-    private boolean mSettingActionBar;
-
-    @Override
-    public final void onCreate(Context sysuiContext, Context pluginContext) {
-        mSysuiContext = sysuiContext;
-        super.attachBaseContext(pluginContext);
-    }
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        Theme theme = getClass().getDeclaredAnnotation(Theme.class);
-        if (theme != null && theme.value() != 0) {
-            setTheme(theme.value());
-        }
-        mSettingActionBar = true;
-        getActionBar();
-        mSettingActionBar = false;
-    }
-
-    @Override
-    public Resources getResources() {
-        return mSettingActionBar ? mSysuiContext.getResources() : super.getResources();
-    }
-
-    @Override
-    protected void attachBaseContext(Context newBase) {
-        mSysuiContext = newBase;
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-    }
-
-    public Context getSysuiContext() {
-        return mSysuiContext;
-    }
-
-    public Context getPluginContext() {
-        return getBaseContext();
-    }
-
-    /**
-     * Since PluginActivities are declared as services instead of activities (since they
-     * are plugins), they can't have a theme attached to them. Instead a PluginActivity
-     * can annotate itself with @Theme to specify the resource of the style it wants
-     * to be themed with.
-     */
-    @Retention(RetentionPolicy.RUNTIME)
-    public @interface Theme {
-        int value();
-    }
-}
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginDependency.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginDependency.java
index db2e376..25ce3dd 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginDependency.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/PluginDependency.java
@@ -21,11 +21,6 @@
     public static final int VERSION = 1;
     static DependencyProvider sProvider;
 
-    /**
-     * Allows a plugin to get a hold of static dependencies if they have declared dependence
-     * on their interface. For one-shot plugins this will only work during onCreate and will
-     * not work afterwards.
-     */
     public static <T> T get(Plugin p, Class<T> cls) {
         return sProvider.get(p, cls);
     }
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QS.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QS.java
index d571243..a648345e 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QS.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QS.java
@@ -31,9 +31,9 @@
 @DependsOn(target = HeightListener.class)
 public interface QS extends FragmentBase {
 
-    public static final String ACTION = "com.android.systemui.action.PLUGIN_QS";
+    String ACTION = "com.android.systemui.action.PLUGIN_QS";
 
-    public static final int VERSION = 6;
+    int VERSION = 6;
 
     String TAG = "QS";
 
@@ -66,8 +66,8 @@
     }
 
     @ProvidesInterface(version = HeightListener.VERSION)
-    public interface HeightListener {
-        public static final int VERSION = 1;
+    interface HeightListener {
+        int VERSION = 1;
         void onQsHeightChanged();
     }
 
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 b4b4e19..c52c0aa 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
@@ -26,6 +26,7 @@
 import com.android.systemui.plugins.qs.QSTile.State;
 
 import java.util.Objects;
+import java.util.function.Supplier;
 
 @ProvidesInterface(version = QSTile.VERSION)
 @DependsOn(target = QSIconView.class)
@@ -104,6 +105,7 @@
     public static class State {
         public static final int VERSION = 1;
         public Icon icon;
+        public Supplier<Icon> iconSupplier;
         public int state = Tile.STATE_ACTIVE;
         public CharSequence label;
         public CharSequence contentDescription;
@@ -118,6 +120,7 @@
             if (other == null) throw new IllegalArgumentException();
             if (!other.getClass().equals(getClass())) throw new IllegalArgumentException();
             final boolean changed = !Objects.equals(other.icon, icon)
+                    || !Objects.equals(other.iconSupplier, iconSupplier)
                     || !Objects.equals(other.label, label)
                     || !Objects.equals(other.contentDescription, contentDescription)
                     || !Objects.equals(other.dualLabelContentDescription,
@@ -130,6 +133,7 @@
                     || !Objects.equals(other.dualTarget, dualTarget)
                     || !Objects.equals(other.slash, slash);
             other.icon = icon;
+            other.iconSupplier = iconSupplier;
             other.label = label;
             other.contentDescription = contentDescription;
             other.dualLabelContentDescription = dualLabelContentDescription;
@@ -150,6 +154,7 @@
         protected StringBuilder toStringBuilder() {
             final StringBuilder sb = new StringBuilder(getClass().getSimpleName()).append('[');
             sb.append(",icon=").append(icon);
+            sb.append(",iconSupplier=").append(iconSupplier);
             sb.append(",label=").append(label);
             sb.append(",contentDescription=").append(contentDescription);
             sb.append(",dualLabelContentDescription=").append(dualLabelContentDescription);
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/phone/NavBarButtonProvider.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/phone/NavBarButtonProvider.java
index 5243228..56a3ee3 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/phone/NavBarButtonProvider.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/phone/NavBarButtonProvider.java
@@ -46,7 +46,8 @@
 
         void setVertical(boolean vertical);
 
-        void setCarMode(boolean carMode);
+        default void setCarMode(boolean carMode) {
+        }
 
         void setDarkIntensity(float intensity);
     }
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_esim_area.xml b/packages/SystemUI/res-keyguard/layout/keyguard_esim_area.xml
index 8cbd94b..db508c9 100644
--- a/packages/SystemUI/res-keyguard/layout/keyguard_esim_area.xml
+++ b/packages/SystemUI/res-keyguard/layout/keyguard_esim_area.xml
@@ -25,8 +25,7 @@
     android:id="@+id/keyguard_disable_esim"
     android:visibility="gone"
     android:text="@string/disable_carrier_button_text"
-    style="?android:attr/buttonBarButtonStyle"
+    style="@style/Keyguard.TextView"
     android:textAppearance="?android:attr/textAppearanceMedium"
     android:textSize="@dimen/kg_status_line_font_size"
-    android:textColor="?android:attr/textColorSecondary"
     android:textAllCaps="@bool/kg_use_all_caps" />
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_host_view.xml b/packages/SystemUI/res-keyguard/layout/keyguard_host_view.xml
index 7291cd4..29376ce0 100644
--- a/packages/SystemUI/res-keyguard/layout/keyguard_host_view.xml
+++ b/packages/SystemUI/res-keyguard/layout/keyguard_host_view.xml
@@ -45,7 +45,9 @@
             android:layout_height="match_parent"
             android:clipChildren="false"
             android:clipToPadding="false"
-            android:paddingTop="@dimen/keyguard_security_view_margin"
+            android:paddingTop="@dimen/keyguard_security_view_top_margin"
+            android:paddingStart="@dimen/keyguard_security_view_lateral_margin"
+            android:paddingEnd="@dimen/keyguard_security_view_lateral_margin"
             android:gravity="center">
         </com.android.keyguard.KeyguardSecurityViewFlipper>
     </com.android.keyguard.KeyguardSecurityContainer>
diff --git a/packages/SystemUI/res-keyguard/values-ar/strings.xml b/packages/SystemUI/res-keyguard/values-ar/strings.xml
index 7aab70f..4846cfd 100644
--- a/packages/SystemUI/res-keyguard/values-ar/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ar/strings.xml
@@ -93,7 +93,7 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="8364140853305528449">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%1$d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%2$d</xliff:g> من المحاولات غير الناجحة الأخرى، ستُطالب بإلغاء تأمين الهاتف باستخدام حساب بريد إلكتروني لإلغاء تأمين الهاتف.\n\n أعد المحاولة خلال <xliff:g id="NUMBER_2">%3$d</xliff:g> ثانية."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="3389829202093674267">"‏رمز \"رقم التعريف الشخصي\" لشريحة SIM غير صحيح، ويلزمك الاتصال الآن بمشغّل شبكة الجوّال لإلغاء قفل الجهاز."</string>
     <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="4314341367727055967">
-      <item quantity="zero">‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح، ولم تتبق لديك أية محاولات (<xliff:g id="NUMBER_1">%d</xliff:g>).</item>
+      <item quantity="zero">‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح، ولم تتبق لديك أي محاولات (<xliff:g id="NUMBER_1">%d</xliff:g>).</item>
       <item quantity="two">‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح، ويتبقى لديك محاولتان (<xliff:g id="NUMBER_1">%d</xliff:g>).</item>
       <item quantity="few">‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولات.</item>
       <item quantity="many">‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولة.</item>
@@ -102,15 +102,15 @@
     </plurals>
     <string name="kg_password_wrong_puk_code_dead" msgid="3329017604125179374">"‏شريحة SIM غير صالحة للاستخدام. يُرجى الاتصال بمشغّل شبكة الجوّال."</string>
     <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="2287504898931957513">
-      <item quantity="zero">‏رمز PUK لشريحة SIM غير صحيح، ولم تتبق لديك أية محاولات (<xliff:g id="NUMBER_1">%d</xliff:g>) تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item>
+      <item quantity="zero">‏رمز PUK لشريحة SIM غير صحيح، ولم تتبق لديك أي محاولات (<xliff:g id="NUMBER_1">%d</xliff:g>) تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item>
       <item quantity="two">‏رمز PUK لشريحة SIM غير صحيح، ويتبقى لديك محاولتان (<xliff:g id="NUMBER_1">%d</xliff:g>) تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item>
       <item quantity="few">‏رمز PUK لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولات تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item>
       <item quantity="many">‏رمز PUK لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولة تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item>
       <item quantity="other">‏رمز PUK لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item>
       <item quantity="one">‏رمز PUK لشريحة SIM غير صالح، ويتبقى لديك محاولة واحدة (<xliff:g id="NUMBER_0">%d</xliff:g>)، تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item>
     </plurals>
-    <string name="kg_password_pin_failed" msgid="8769990811451236223">"‏أخفقت عملية \"رقم التعريف الشخصي\" لشريحة SIM"</string>
-    <string name="kg_password_puk_failed" msgid="1331621440873439974">"‏أخفقت عملية PUK لشريحة SIM"</string>
+    <string name="kg_password_pin_failed" msgid="8769990811451236223">"‏تعذّر إتمام عملية \"رقم التعريف الشخصي\" لشريحة SIM"</string>
+    <string name="kg_password_puk_failed" msgid="1331621440873439974">"‏تعذّر إتمام عملية PUK لشريحة SIM"</string>
     <string name="kg_pin_accepted" msgid="7637293533973802143">"تم قبول الرمز"</string>
     <string name="keyguard_carrier_default" msgid="4274828292998453695">"لا تتوفر خدمة."</string>
     <string name="accessibility_ime_switch_button" msgid="2695096475319405612">"تبديل أسلوب الإدخال"</string>
diff --git a/packages/SystemUI/res-keyguard/values-bn/strings.xml b/packages/SystemUI/res-keyguard/values-bn/strings.xml
index 2c58f77..24d00cc 100644
--- a/packages/SystemUI/res-keyguard/values-bn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bn/strings.xml
@@ -77,20 +77,20 @@
     <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8637788033282252027">"আপনি আপনার পিন টাইপ করতে <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুল করেছেন৷ \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন৷"</string>
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7724148763268377734">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে আপনার পাসওয়ার্ড লিখেছেন।\n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন।"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4820967667848302092">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে আপনার আনলকের প্যাটার্ন এঁকেছেন।\n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন।"</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1629351522209932316">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে ট্যাবলেটটি আনলক করার চেষ্টা করেছেন। আরো <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর এই ট্যাবলেটটিকে রিসেট করা হবে, যার ফলে এর সমস্ত ডেটা মুছে যাবে।"</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="3921998703529189931">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে ফোনটি আনলক করার চেষ্টা করেছেন। আরো <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর এই ফোনটিকে রিসেট করা হবে, যার ফলে এর সমস্ত ডেটা মুছে যাবে।"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1629351522209932316">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে ট্যাবলেটটি আনলক করার চেষ্টা করেছেন। আরও <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর এই ট্যাবলেটটিকে রিসেট করা হবে, যার ফলে এর সমস্ত ডেটা মুছে যাবে।"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="3921998703529189931">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে ফোনটি আনলক করার চেষ্টা করেছেন। আরও <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর এই ফোনটিকে রিসেট করা হবে, যার ফলে এর সমস্ত ডেটা মুছে যাবে।"</string>
     <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="4694232971224663735">"আপনি <xliff:g id="NUMBER">%d</xliff:g> বার ভুলভাবে ট্যাবলেটটি আনলক করার চেষ্টা করেছেন। এই ফোনটিকে রিসেট করা হবে, যার ফলে এর সমস্ত ডেটা মুছে যাবে।"</string>
     <string name="kg_failed_attempts_now_wiping" product="default" msgid="2365964340830006961">"আপনি <xliff:g id="NUMBER">%d</xliff:g> বার ভুলভাবে ফোনটি আনলক করার চেষ্টা করেছেন। এই ফোনটিকে রিসেট করা হবে, যার ফলে এর সমস্ত ডেটা মুছে যাবে।"</string>
-    <string name="kg_failed_attempts_almost_at_erase_user" product="tablet" msgid="1365418870560228936">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে ট্যাবলেটটি আনলক করার চেষ্টা করেছেন। আরো <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর এই ব্যবহারকারীকে সরিয়ে দেওয়া হবে, যার ফলে ব্যবহারকারীর সমস্ত ডেটা মুছে যাবে।"</string>
-    <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="2151286957817486128">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে ফোনটি আনলক করার চেষ্টা করেছেন। আরো <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর এই ব্যবহারকারীকে সরিয়ে দেওয়া হবে, যার ফলে ব্যবহারকারীর সমস্ত ডেটা মুছে যাবে।"</string>
+    <string name="kg_failed_attempts_almost_at_erase_user" product="tablet" msgid="1365418870560228936">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে ট্যাবলেটটি আনলক করার চেষ্টা করেছেন। আরও <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর এই ব্যবহারকারীকে সরিয়ে দেওয়া হবে, যার ফলে ব্যবহারকারীর সমস্ত ডেটা মুছে যাবে।"</string>
+    <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="2151286957817486128">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে ফোনটি আনলক করার চেষ্টা করেছেন। আরও <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর এই ব্যবহারকারীকে সরিয়ে দেওয়া হবে, যার ফলে ব্যবহারকারীর সমস্ত ডেটা মুছে যাবে।"</string>
     <string name="kg_failed_attempts_now_erasing_user" product="tablet" msgid="5464020754932560928">"আপনি <xliff:g id="NUMBER">%d</xliff:g> বার ভুলভাবে ট্যাবলেটটি আনলক করার চেষ্টা করেছেন। এই ব্যবহারকারীকে সরিয়ে দেওয়া হবে, যার ফলে ব্যবহারকারীর সমস্ত ডেটা মুছে যাবে।"</string>
     <string name="kg_failed_attempts_now_erasing_user" product="default" msgid="6171564974118059">"আপনি <xliff:g id="NUMBER">%d</xliff:g> বার ভুলভাবে ফোনটি আনলক করার চেষ্টা করেছেন। এই ব্যবহারকারীকে সরিয়ে দেওয়া হবে, যার ফলে ব্যবহারকারীর সমস্ত ডেটা মুছে যাবে।"</string>
-    <string name="kg_failed_attempts_almost_at_erase_profile" product="tablet" msgid="9154513795928824239">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে ট্যাবলেটটি আনলক করার চেষ্টা করেছেন। আরো <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর কাজের প্রোফাইলটি সরিয়ে দেওয়া হবে, যার ফলে প্রোফাইলের সমস্ত ডেটা মুছে যাবে।"</string>
-    <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="2162434417489128282">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে ফোনটি আনলক করার চেষ্টা করেছেন। আরো <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর কাজের প্রোফাইলটি সরিয়ে দেওয়া হবে, যার ফলে প্রোফাইলের সমস্ত ডেটা মুছে যাবে।"</string>
+    <string name="kg_failed_attempts_almost_at_erase_profile" product="tablet" msgid="9154513795928824239">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে ট্যাবলেটটি আনলক করার চেষ্টা করেছেন। আরও <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর কাজের প্রোফাইলটি সরিয়ে দেওয়া হবে, যার ফলে প্রোফাইলের সমস্ত ডেটা মুছে যাবে।"</string>
+    <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="2162434417489128282">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে ফোনটি আনলক করার চেষ্টা করেছেন। আরও <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর কাজের প্রোফাইলটি সরিয়ে দেওয়া হবে, যার ফলে প্রোফাইলের সমস্ত ডেটা মুছে যাবে।"</string>
     <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="8966727588974691544">"আপনি <xliff:g id="NUMBER">%d</xliff:g> বার ভুলভাবে ট্যাবলেটটি আনলক করার চেষ্টা করেছেন। কাজের প্রোফাইলটি সরিয়ে দেওয়া হবে, যার ফলে প্রোফাইলের সমস্ত ডেটা মুছে যাবে।"</string>
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="8476407539834855">"আপনি <xliff:g id="NUMBER">%d</xliff:g> বার ভুলভাবে ফোনটি আনলক করার চেষ্টা করেছেন। কাজের প্রোফাইলটি সরিয়ে দেওয়া হবে, যার ফলে প্রোফাইলের সমস্ত ডেটা মুছে যাবে।"</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="956706236554092172">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে আনলকের প্যাটার্ন এঁকেছেন। আরো <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর আপনাকে একটি ইমেল অ্যাকাউন্টের মাধ্যমে আপনার ট্যাবলেটটি আনলক করতে বলা হবে।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন।"</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="8364140853305528449">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে আনলকের প্যাটার্ন এঁকেছেন। আরো <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর আপনাকে একটি ইমেল অ্যাকাউন্টের মাধ্যমে আপনার ফোনটি আনলক করতে বলা হবে।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন।"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="956706236554092172">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে আনলকের প্যাটার্ন এঁকেছেন। আরও <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর আপনাকে একটি ইমেল অ্যাকাউন্টের মাধ্যমে আপনার ট্যাবলেটটি আনলক করতে বলা হবে।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন।"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="8364140853305528449">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে আনলকের প্যাটার্ন এঁকেছেন। আরও <xliff:g id="NUMBER_1">%2$d</xliff:g> বার অসফল প্রচেষ্টার পর আপনাকে একটি ইমেল অ্যাকাউন্টের মাধ্যমে আপনার ফোনটি আনলক করতে বলা হবে।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন।"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="3389829202093674267">"ভুল সিম পিন কোড দিয়েছেন, আপনার ডিভাইসটি আনলক করতে এখন আপনাকে অবশ্যই আপনার পরিষেবা প্রদানকারীর সাথে যোগাযোগ করতে হবে।"</string>
     <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="4314341367727055967">
       <item quantity="one">সিমের পিন কোডটি ভুল, আপনি আর <xliff:g id="NUMBER_1">%d</xliff:g> বার চেষ্টা করতে পারেন।</item>
diff --git a/packages/SystemUI/res-keyguard/values-bs/strings.xml b/packages/SystemUI/res-keyguard/values-bs/strings.xml
index 0ec4ad5..839100c 100644
--- a/packages/SystemUI/res-keyguard/values-bs/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bs/strings.xml
@@ -21,14 +21,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="3171996292755059205">"Zaključavanje tastature"</string>
-    <string name="keyguard_password_enter_pin_code" msgid="3420548423949593123">"Upišite PIN kôd"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="670683628782925409">"Upišite PUK kôd za SIM karticu i novi PIN kôd"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3420548423949593123">"Upišite PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="670683628782925409">"Upišite PUK kôd za SIM karticu i novi PIN"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="3747778500166059332">"PUK kôd za SIM karticu"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8188243197504453830">"Novi PIN kôd za SIM karticu"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8188243197504453830">"Novi PIN za SIM karticu"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Dodirnite da upišete lozinku"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Upišite lozinku za otključavanje"</string>
-    <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Upišite PIN kôd za otključavanje"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Pogrešan PIN kôd."</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Upišite PIN za otključavanje"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Pogrešan PIN."</string>
     <string name="keyguard_charged" msgid="2222329688813033109">"Napunjeno"</string>
     <string name="keyguard_plugged_in" msgid="89308975354638682">"Punjenje"</string>
     <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Brzo punjenje"</string>
@@ -46,8 +46,8 @@
     <string name="keyguard_sim_locked_message" msgid="953766009432168127">"SIM kartica je zaključana."</string>
     <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM kartica je zaključana PUK kodom."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Otključavanje SIM kartice…"</string>
-    <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Prostor za PIN kôd"</string>
-    <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Prostor za PIN kôd za SIM karticu"</string>
+    <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Prostor za PIN"</string>
+    <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Prostor za PIN za SIM karticu"</string>
     <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Prostor za PUK kôd za SIM karticu"</string>
     <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Naredni alarm je podešen za <xliff:g id="ALARM">%1$s</xliff:g>"</string>
     <string name="keyboardview_keycode_delete" msgid="6883116827512721630">"Izbriši"</string>
@@ -56,25 +56,25 @@
     <string name="kg_forgot_pattern_button_text" msgid="534245177645252620">"Zaboravili ste uzorak?"</string>
     <string name="kg_wrong_pattern" msgid="7620081431514773802">"Pogrešan uzorak"</string>
     <string name="kg_wrong_password" msgid="4580683060277329277">"Pogrešna lozinka"</string>
-    <string name="kg_wrong_pin" msgid="4785660766909463466">"Pogrešan PIN kôd"</string>
+    <string name="kg_wrong_pin" msgid="4785660766909463466">"Pogrešan PIN"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="527455490371878356">"Pokušajte ponovo za <xliff:g id="NUMBER">%d</xliff:g> sek."</string>
     <string name="kg_pattern_instructions" msgid="5547646893001491340">"Nacrtajte uzorak"</string>
-    <string name="kg_sim_pin_instructions" msgid="6389000973113699187">"Unesite PIN kôd SIM kartice."</string>
-    <string name="kg_sim_pin_instructions_multi" msgid="1643757228644271861">"Unesite PIN kôd SIM kartice operatera \"<xliff:g id="CARRIER">%1$s</xliff:g>\""</string>
+    <string name="kg_sim_pin_instructions" msgid="6389000973113699187">"Unesite PIN SIM kartice."</string>
+    <string name="kg_sim_pin_instructions_multi" msgid="1643757228644271861">"Unesite PIN SIM kartice operatera \"<xliff:g id="CARRIER">%1$s</xliff:g>\""</string>
     <string name="kg_sim_lock_instructions_esim" msgid="4957650659201013804">"Onemogućite eSIM karticu za korištenje uređaja bez mobilne usluge."</string>
-    <string name="kg_pin_instructions" msgid="4069609316644030034">"Unesite PIN kôd"</string>
+    <string name="kg_pin_instructions" msgid="4069609316644030034">"Unesite PIN"</string>
     <string name="kg_password_instructions" msgid="136952397352976538">"Unesite lozinku"</string>
     <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"SIM kartica je sada onemogućena. Unesite PUK kôd da nastavite. Za više informacija obratite se operateru."</string>
     <string name="kg_puk_enter_puk_hint_multi" msgid="1373131883510840794">"Operater SIM kartice \"<xliff:g id="CARRIER">%1$s</xliff:g>\" sada je onemogućen. Unesite PUK kôd da nastavite. Za više informacija obratite se operateru."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="3137789674920391087">"Unesite željeni PIN kôd"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="3089485999116759671">"Potvrdite željeni PIN kôd"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="3137789674920391087">"Unesite željeni PIN"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="3089485999116759671">"Potvrdite željeni PIN"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="4471738151810900114">"Otključavanje SIM kartice…"</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="3057533256729513335">"Unesite PIN kôd koji sadrži 4 do 8 brojeva."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="3057533256729513335">"Unesite PIN koji sadrži 4 do 8 brojeva."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="6003602401368264144">"PUK kôd treba sadržavati najmanje 8 brojeva."</string>
     <string name="kg_invalid_puk" msgid="5399287873762592502">"Ponovo unesite ispravan PUK kôd. Ponovljeni pokušaji će trajno onemogućiti SIM karticu."</string>
-    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="5672736555427444330">"PIN kodovi se ne poklapaju"</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="5672736555427444330">"PIN-ovi se ne poklapaju"</string>
     <string name="kg_login_too_many_attempts" msgid="6604574268387867255">"Previše puta ste pokušali otključati uređaj crtanjem uzorka"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8637788033282252027">"Pogrešno ste unijeli PIN kôd <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nPokušajte ponovo za <xliff:g id="NUMBER_1">%2$d</xliff:g> sek."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8637788033282252027">"Pogrešno ste unijeli PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nPokušajte ponovo za <xliff:g id="NUMBER_1">%2$d</xliff:g> sek."</string>
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7724148763268377734">"Pogrešno ste unijeli lozinku <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nPokušajte ponovo za <xliff:g id="NUMBER_1">%2$d</xliff:g> sek."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4820967667848302092">"Pogrešno ste nacrtali svoj uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nPokušajte ponovo za <xliff:g id="NUMBER_1">%2$d</xliff:g> sek."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1629351522209932316">"Pokušali ste <xliff:g id="NUMBER_0">%1$d</xliff:g> puta neispravno otključati tablet. U slučaju još <xliff:g id="NUMBER_1">%2$d</xliff:g> pokušaja bez uspjeha, tablet će se vratiti na fabričke postavke i svi podaci će se izbrisati."</string>
@@ -91,11 +91,11 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="8476407539834855">"Pokušali ste <xliff:g id="NUMBER">%d</xliff:g> puta neispravno otključati telefon. Poslovni profil će se ukloniti i svi podaci s profila će se izbrisati."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="956706236554092172">"Pogrešno ste nacrtali uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. U slučaju još <xliff:g id="NUMBER_1">%2$d</xliff:g> pokušaja bez uspjeha, od vas će se tražiti da tablet otključate koristeći račun e-pošte.\n\n Pokušajte ponovo za <xliff:g id="NUMBER_2">%3$d</xliff:g> sek."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="8364140853305528449">"Pogrešno ste nacrtali uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. U slučaju još <xliff:g id="NUMBER_1">%2$d</xliff:g> pokušaja bez uspjeha, od vas će se tražiti da telefon otključate koristeći račun e-pošte.\n\n Pokušajte ponovo za <xliff:g id="NUMBER_2">%3$d</xliff:g> sek."</string>
-    <string name="kg_password_wrong_pin_code_pukked" msgid="3389829202093674267">"PIN kôd za SIM karticu je netačan. Za otključavanje uređaja sada se morate obratiti svom operateru."</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="3389829202093674267">"PIN za SIM karticu je netačan. Za otključavanje uređaja sada se morate obratiti svom operateru."</string>
     <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="4314341367727055967">
-      <item quantity="one">PIN kôd za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item>
-      <item quantity="few">PIN kôd za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
-      <item quantity="other">PIN kôd za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
+      <item quantity="one">PIN za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item>
+      <item quantity="few">PIN za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
+      <item quantity="other">PIN za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
     </plurals>
     <string name="kg_password_wrong_puk_code_dead" msgid="3329017604125179374">"SIM kartica je neupotrebljiva. Obratite se svom operateru."</string>
     <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="2287504898931957513">
@@ -103,20 +103,20 @@
       <item quantity="few">PUK kôd za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja prije nego što SIM kartica postane trajno neupotrebljiva.</item>
       <item quantity="other">PUK kôd za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja prije nego što SIM kartica postane trajno neupotrebljiva.</item>
     </plurals>
-    <string name="kg_password_pin_failed" msgid="8769990811451236223">"Korištenje PIN koda za SIM karticu nije uspjelo!"</string>
+    <string name="kg_password_pin_failed" msgid="8769990811451236223">"Korištenje PIN-a za SIM karticu nije uspjelo!"</string>
     <string name="kg_password_puk_failed" msgid="1331621440873439974">"Korištenje PUK koda za SIM karticu nije uspjelo!"</string>
     <string name="kg_pin_accepted" msgid="7637293533973802143">"Kôd je prihvaćen"</string>
     <string name="keyguard_carrier_default" msgid="4274828292998453695">"Nema mreže."</string>
     <string name="accessibility_ime_switch_button" msgid="2695096475319405612">"Promjena načina unosa"</string>
     <string name="airplane_mode" msgid="3807209033737676010">"Način rada u avionu"</string>
     <string name="kg_prompt_reason_restart_pattern" msgid="7246972020562621506">"Potreban je uzorak nakon što se uređaj ponovo pokrene"</string>
-    <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"Potreban je PIN kôd nakon što se uređaj ponovo pokrene"</string>
+    <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"Potreban je PIN nakon što se uređaj ponovo pokrene"</string>
     <string name="kg_prompt_reason_restart_password" msgid="6984641181515902406">"Potrebna je lozinka nakon što se uređaj ponovo pokrene"</string>
     <string name="kg_prompt_reason_timeout_pattern" msgid="5304487696073914063">"Uzorak je potreban radi dodatne sigurnosti"</string>
-    <string name="kg_prompt_reason_timeout_pin" msgid="8851462864335757813">"PIN kôd je potreban radi dodatne sigurnosti"</string>
+    <string name="kg_prompt_reason_timeout_pin" msgid="8851462864335757813">"PIN je potreban radi dodatne sigurnosti"</string>
     <string name="kg_prompt_reason_timeout_password" msgid="6563904839641583441">"Lozinka je potrebna radi dodatne sigurnosti"</string>
     <string name="kg_prompt_reason_switch_profiles_pattern" msgid="3398054847288438444">"Potreban je uzorak nakon prelaska na drugi profil"</string>
-    <string name="kg_prompt_reason_switch_profiles_pin" msgid="7426368139226961699">"Potreban je PIN kôd nakon prelaska na drugi profil"</string>
+    <string name="kg_prompt_reason_switch_profiles_pin" msgid="7426368139226961699">"Potreban je PIN nakon prelaska na drugi profil"</string>
     <string name="kg_prompt_reason_switch_profiles_password" msgid="8383831046318421845">"Potrebna je lozinka nakon prelaska na drugi profil"</string>
     <string name="kg_prompt_reason_device_admin" msgid="3452168247888906179">"Uređaj je zaključao administrator"</string>
     <string name="kg_prompt_reason_user_request" msgid="8236951765212462286">"Uređaj je ručno zaključan"</string>
@@ -126,9 +126,9 @@
       <item quantity="other">Uređaj nije otključavan <xliff:g id="NUMBER_1">%d</xliff:g> sati. Potvrdite uzorak.</item>
     </plurals>
     <plurals name="kg_prompt_reason_time_pin" formatted="false" msgid="34586942088144385">
-      <item quantity="one">Uređaj nije otključavan <xliff:g id="NUMBER_1">%d</xliff:g> sat. Potvrdite PIN kôd.</item>
-      <item quantity="few">Uređaj nije otključavan <xliff:g id="NUMBER_1">%d</xliff:g> sata. Potvrdite PIN kôd.</item>
-      <item quantity="other">Uređaj nije otključavan <xliff:g id="NUMBER_1">%d</xliff:g> sati. Potvrdite PIN kôd.</item>
+      <item quantity="one">Uređaj nije otključavan <xliff:g id="NUMBER_1">%d</xliff:g> sat. Potvrdite PIN.</item>
+      <item quantity="few">Uređaj nije otključavan <xliff:g id="NUMBER_1">%d</xliff:g> sata. Potvrdite PIN.</item>
+      <item quantity="other">Uređaj nije otključavan <xliff:g id="NUMBER_1">%d</xliff:g> sati. Potvrdite PIN.</item>
     </plurals>
     <plurals name="kg_prompt_reason_time_password" formatted="false" msgid="257297696215346527">
       <item quantity="one">Uređaj nije otključavan <xliff:g id="NUMBER_1">%d</xliff:g> sat. Potvrdite lozinku.</item>
diff --git a/packages/SystemUI/res-keyguard/values-ca/strings.xml b/packages/SystemUI/res-keyguard/values-ca/strings.xml
index e5c8d71..3d364e9 100644
--- a/packages/SystemUI/res-keyguard/values-ca/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ca/strings.xml
@@ -71,7 +71,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="4471738151810900114">"S\'està desbloquejant la targeta SIM…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="3057533256729513335">"Escriu un PIN que tingui entre 4 i 8 números."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="6003602401368264144">"El codi PUK ha de tenir 8 números o més."</string>
-    <string name="kg_invalid_puk" msgid="5399287873762592502">"Torna a introduir el codi PUK correcte. Si ho intentes diverses vegades, es desactivarà la SIM de manera permanent."</string>
+    <string name="kg_invalid_puk" msgid="5399287873762592502">"Torna a introduir el codi PUK correcte. Si ho intentes diverses vegades, es desactivarà la SIM permanentment."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="5672736555427444330">"Els codis PIN no coincideixen"</string>
     <string name="kg_login_too_many_attempts" msgid="6604574268387867255">"Has intentat dibuixar el patró massa vegades"</string>
     <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8637788033282252027">"Has escrit el PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades de manera incorrecta. \n\nTorna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%2$d</xliff:g> segons."</string>
diff --git a/packages/SystemUI/res-keyguard/values-el/strings.xml b/packages/SystemUI/res-keyguard/values-el/strings.xml
index d195c87..6b9f47c 100644
--- a/packages/SystemUI/res-keyguard/values-el/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-el/strings.xml
@@ -56,7 +56,7 @@
     <string name="kg_forgot_pattern_button_text" msgid="534245177645252620">"Ξεχάσατε το μοτίβο"</string>
     <string name="kg_wrong_pattern" msgid="7620081431514773802">"Λάθος μοτίβο"</string>
     <string name="kg_wrong_password" msgid="4580683060277329277">"Λανθασμένος κωδικός πρόσβασης"</string>
-    <string name="kg_wrong_pin" msgid="4785660766909463466">"Λανθασμένος αριθμός PIN"</string>
+    <string name="kg_wrong_pin" msgid="4785660766909463466">"Λανθασμένο PIN"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="527455490371878356">"Δοκιμάστε ξανά σε <xliff:g id="NUMBER">%d</xliff:g> δευτερόλεπτα."</string>
     <string name="kg_pattern_instructions" msgid="5547646893001491340">"Σχεδιάστε το μοτίβο σας"</string>
     <string name="kg_sim_pin_instructions" msgid="6389000973113699187">"Εισαγωγή αριθμού PIN κάρτας SIM"</string>
@@ -108,13 +108,13 @@
     <string name="accessibility_ime_switch_button" msgid="2695096475319405612">"Εναλλαγή μεθόδου εισαγωγής"</string>
     <string name="airplane_mode" msgid="3807209033737676010">"Λειτουργία πτήσης"</string>
     <string name="kg_prompt_reason_restart_pattern" msgid="7246972020562621506">"Απαιτείται μοτίβο μετά από την επανεκκίνηση της συσκευής"</string>
-    <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"Απαιτείται αριθμός PIN μετά από την επανεκκίνηση της συσκευής"</string>
+    <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"Απαιτείται PIN μετά από την επανεκκίνηση της συσκευής"</string>
     <string name="kg_prompt_reason_restart_password" msgid="6984641181515902406">"Απαιτείται κωδικός πρόσβασης μετά από την επανεκκίνηση της συσκευής"</string>
     <string name="kg_prompt_reason_timeout_pattern" msgid="5304487696073914063">"Απαιτείται μοτίβο για πρόσθετη ασφάλεια"</string>
-    <string name="kg_prompt_reason_timeout_pin" msgid="8851462864335757813">"Απαιτείται αριθμός PIN για πρόσθετη ασφάλεια"</string>
+    <string name="kg_prompt_reason_timeout_pin" msgid="8851462864335757813">"Απαιτείται PIN για πρόσθετη ασφάλεια"</string>
     <string name="kg_prompt_reason_timeout_password" msgid="6563904839641583441">"Απαιτείται κωδικός πρόσβασης για πρόσθετη ασφάλεια"</string>
     <string name="kg_prompt_reason_switch_profiles_pattern" msgid="3398054847288438444">"Απαιτείται μοτίβο κατά την εναλλαγή προφίλ"</string>
-    <string name="kg_prompt_reason_switch_profiles_pin" msgid="7426368139226961699">"Απαιτείται αριθμός PIN κατά την εναλλαγή προφίλ"</string>
+    <string name="kg_prompt_reason_switch_profiles_pin" msgid="7426368139226961699">"Απαιτείται PIN κατά την εναλλαγή προφίλ"</string>
     <string name="kg_prompt_reason_switch_profiles_password" msgid="8383831046318421845">"Απαιτείται κωδικός πρόσβασης κατά την εναλλαγή προφίλ"</string>
     <string name="kg_prompt_reason_device_admin" msgid="3452168247888906179">"Η συσκευή κλειδώθηκε από τον διαχειριστή"</string>
     <string name="kg_prompt_reason_user_request" msgid="8236951765212462286">"Η συσκευή κλειδώθηκε με μη αυτόματο τρόπο"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml
new file mode 100644
index 0000000..35bae2e
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="3171996292755059205">"Keyguard"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3420548423949593123">"Type PIN code"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="670683628782925409">"Type SIM PUK and new PIN code"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="3747778500166059332">"SIM PUK code"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8188243197504453830">"New SIM PIN code"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"Touch to type password"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"Type password to unlock"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"Type PIN to unlock"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"Incorrect PIN code."</string>
+    <string name="keyguard_charged" msgid="2222329688813033109">"Charged"</string>
+    <string name="keyguard_plugged_in" msgid="89308975354638682">"Charging"</string>
+    <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"Charging rapidly"</string>
+    <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"Charging slowly"</string>
+    <string name="keyguard_low_battery" msgid="9218432555787624490">"Connect your charger."</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"Press Menu to unlock."</string>
+    <string name="keyguard_network_locked_message" msgid="6743537524631420759">"Network locked"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="6327533369959764518">"No SIM card"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="4550152848200783542">"No SIM card in tablet."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="6585414237800161146">"No SIM card in phone."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="7350295932015220392">"Insert a SIM card."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="589889372883904477">"The SIM card is missing or not readable. Insert a SIM card."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="654102080186420706">"Unusable SIM card."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="4683178224791318347">"Your SIM card has been permanently disabled.\n Contact your wireless service provider for another SIM card."</string>
+    <string name="keyguard_sim_locked_message" msgid="953766009432168127">"SIM card is locked."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM card is PUK-locked."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"Unlocking SIM card…"</string>
+    <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"PIN area"</string>
+    <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM PIN area"</string>
+    <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK area"</string>
+    <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Next alarm set for <xliff:g id="ALARM">%1$s</xliff:g>"</string>
+    <string name="keyboardview_keycode_delete" msgid="6883116827512721630">"Delete"</string>
+    <string name="disable_carrier_button_text" msgid="6914341927421916114">"Disable eSIM"</string>
+    <string name="keyboardview_keycode_enter" msgid="4505833604411016668">"Enter"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="534245177645252620">"Forgotten Pattern"</string>
+    <string name="kg_wrong_pattern" msgid="7620081431514773802">"Wrong Pattern"</string>
+    <string name="kg_wrong_password" msgid="4580683060277329277">"Wrong Password"</string>
+    <string name="kg_wrong_pin" msgid="4785660766909463466">"Wrong PIN"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="527455490371878356">"Try again in <xliff:g id="NUMBER">%d</xliff:g> seconds."</string>
+    <string name="kg_pattern_instructions" msgid="5547646893001491340">"Draw your pattern"</string>
+    <string name="kg_sim_pin_instructions" msgid="6389000973113699187">"Enter SIM PIN."</string>
+    <string name="kg_sim_pin_instructions_multi" msgid="1643757228644271861">"Enter SIM PIN for \'<xliff:g id="CARRIER">%1$s</xliff:g>\'."</string>
+    <string name="kg_sim_lock_instructions_esim" msgid="4957650659201013804">"Disable eSIM to use device without mobile service."</string>
+    <string name="kg_pin_instructions" msgid="4069609316644030034">"Enter PIN"</string>
+    <string name="kg_password_instructions" msgid="136952397352976538">"Enter Password"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"SIM is now disabled. Enter PUK code to continue. Contact carrier for details."</string>
+    <string name="kg_puk_enter_puk_hint_multi" msgid="1373131883510840794">"SIM \"<xliff:g id="CARRIER">%1$s</xliff:g>\" is now disabled. Enter PUK code to continue. Contact operator for details."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="3137789674920391087">"Enter desired PIN code"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="3089485999116759671">"Confirm desired PIN code"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="4471738151810900114">"Unlocking SIM card…"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="3057533256729513335">"Type a PIN that is 4 to 8 numbers."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6003602401368264144">"PUK code should be 8 numbers or more."</string>
+    <string name="kg_invalid_puk" msgid="5399287873762592502">"Re-enter the correct PUK code. Repeated attempts will permanently disable the SIM."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="5672736555427444330">"PIN codes do not match"</string>
+    <string name="kg_login_too_many_attempts" msgid="6604574268387867255">"Too many pattern attempts"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8637788033282252027">"You have incorrectly typed your PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7724148763268377734">"You have incorrectly typed your password <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4820967667848302092">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1629351522209932316">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, this tablet will be reset, which will delete all its data."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="3921998703529189931">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, this phone will be reset, which will delete all its data."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="4694232971224663735">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER">%d</xliff:g> times. This tablet will be reset, which will delete all its data."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="2365964340830006961">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. This phone will be reset, which will delete all its data."</string>
+    <string name="kg_failed_attempts_almost_at_erase_user" product="tablet" msgid="1365418870560228936">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, this user will be removed, which will delete all user data."</string>
+    <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="2151286957817486128">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, this user will be removed, which will delete all user data."</string>
+    <string name="kg_failed_attempts_now_erasing_user" product="tablet" msgid="5464020754932560928">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER">%d</xliff:g> times. This user will be removed, which will delete all user data."</string>
+    <string name="kg_failed_attempts_now_erasing_user" product="default" msgid="6171564974118059">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. This user will be removed, which will delete all user data."</string>
+    <string name="kg_failed_attempts_almost_at_erase_profile" product="tablet" msgid="9154513795928824239">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, the work profile will be removed, which will delete all profile data."</string>
+    <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="2162434417489128282">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, the work profile will be removed, which will delete all profile data."</string>
+    <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="8966727588974691544">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER">%d</xliff:g> times. The work profile will be removed, which will delete all profile data."</string>
+    <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="8476407539834855">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. The work profile will be removed, which will delete all profile data."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="956706236554092172">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="8364140853305528449">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="3389829202093674267">"Incorrect SIM PIN code; you must now contact your operator to unlock your device."</string>
+    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="4314341367727055967">
+      <item quantity="other">Incorrect SIM PIN code. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item>
+      <item quantity="one">Incorrect SIM PIN code. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your provider to unlock your device.</item>
+    </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="3329017604125179374">"SIM is unusable. Contact your operator."</string>
+    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="2287504898931957513">
+      <item quantity="other">Incorrect SIM PUK code. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts before SIM becomes permanently unusable.</item>
+      <item quantity="one">Incorrect SIM PUK code. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before SIM becomes permanently unusable.</item>
+    </plurals>
+    <string name="kg_password_pin_failed" msgid="8769990811451236223">"SIM PIN operation failed!"</string>
+    <string name="kg_password_puk_failed" msgid="1331621440873439974">"SIM PUK operation failed!"</string>
+    <string name="kg_pin_accepted" msgid="7637293533973802143">"Code accepted"</string>
+    <string name="keyguard_carrier_default" msgid="4274828292998453695">"No service"</string>
+    <string name="accessibility_ime_switch_button" msgid="2695096475319405612">"Switch input method"</string>
+    <string name="airplane_mode" msgid="3807209033737676010">"Aeroplane mode"</string>
+    <string name="kg_prompt_reason_restart_pattern" msgid="7246972020562621506">"Pattern required after device restarts"</string>
+    <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"PIN required after device restarts"</string>
+    <string name="kg_prompt_reason_restart_password" msgid="6984641181515902406">"Password required after device restarts"</string>
+    <string name="kg_prompt_reason_timeout_pattern" msgid="5304487696073914063">"Pattern required for additional security"</string>
+    <string name="kg_prompt_reason_timeout_pin" msgid="8851462864335757813">"PIN required for additional security"</string>
+    <string name="kg_prompt_reason_timeout_password" msgid="6563904839641583441">"Password required for additional security"</string>
+    <string name="kg_prompt_reason_switch_profiles_pattern" msgid="3398054847288438444">"Pattern required when you switch profiles"</string>
+    <string name="kg_prompt_reason_switch_profiles_pin" msgid="7426368139226961699">"PIN required when you switch profiles"</string>
+    <string name="kg_prompt_reason_switch_profiles_password" msgid="8383831046318421845">"Password required when you switch profiles"</string>
+    <string name="kg_prompt_reason_device_admin" msgid="3452168247888906179">"Device locked by admin"</string>
+    <string name="kg_prompt_reason_user_request" msgid="8236951765212462286">"Device was locked manually"</string>
+    <plurals name="kg_prompt_reason_time_pattern" formatted="false" msgid="71299470072448533">
+      <item quantity="other">Device hasn\'t been unlocked for <xliff:g id="NUMBER_1">%d</xliff:g> hours. Confirm pattern.</item>
+      <item quantity="one">Device hasn\'t been unlocked for <xliff:g id="NUMBER_0">%d</xliff:g> hour. Confirm pattern.</item>
+    </plurals>
+    <plurals name="kg_prompt_reason_time_pin" formatted="false" msgid="34586942088144385">
+      <item quantity="other">Device hasn\'t been unlocked for <xliff:g id="NUMBER_1">%d</xliff:g> hours. Confirm PIN.</item>
+      <item quantity="one">Device hasn\'t been unlocked for <xliff:g id="NUMBER_0">%d</xliff:g> hour. Confirm PIN.</item>
+    </plurals>
+    <plurals name="kg_prompt_reason_time_password" formatted="false" msgid="257297696215346527">
+      <item quantity="other">Device hasn\'t been unlocked for <xliff:g id="NUMBER_1">%d</xliff:g> hours. Confirm password.</item>
+      <item quantity="one">Device hasn\'t been unlocked for <xliff:g id="NUMBER_0">%d</xliff:g> hour. Confirm password.</item>
+    </plurals>
+    <string name="fingerprint_not_recognized" msgid="348813995267914625">"Not recognised"</string>
+</resources>
diff --git a/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml
new file mode 100644
index 0000000..2ae7212
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="3171996292755059205">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‎Keyguard‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3420548423949593123">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‎‎‏‏‎Type PIN code‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="670683628782925409">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‏‏‏‎‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‏‎Type SIM PUK and new PIN code‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="3747778500166059332">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‏‎‎‎SIM PUK code‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8188243197504453830">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‎New SIM PIN code‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‏‏‎"<font size="17">"‎‏‎‎‏‏‏‎Touch to type password‎‏‎‎‏‏‎"</font>"‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‎‎‎Type password to unlock‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‎‎‏‏‎‎Type PIN to unlock‎‏‎‎‏‎"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎Incorrect PIN code.‎‏‎‎‏‎"</string>
+    <string name="keyguard_charged" msgid="2222329688813033109">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‏‎Charged‎‏‎‎‏‎"</string>
+    <string name="keyguard_plugged_in" msgid="89308975354638682">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‏‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎Charging‎‏‎‎‏‎"</string>
+    <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‏‎Charging rapidly‎‏‎‎‏‎"</string>
+    <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎‎‎‎‏‏‏‎Charging slowly‎‏‎‎‏‎"</string>
+    <string name="keyguard_low_battery" msgid="9218432555787624490">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‏‎‎Connect your charger.‎‏‎‎‏‎"</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‎‏‏‎Press Menu to unlock.‎‏‎‎‏‎"</string>
+    <string name="keyguard_network_locked_message" msgid="6743537524631420759">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎Network locked‎‏‎‎‏‎"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="6327533369959764518">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‏‎‎‏‏‎‎No SIM card‎‏‎‎‏‎"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="4550152848200783542">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎No SIM card in tablet.‎‏‎‎‏‎"</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="6585414237800161146">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎No SIM card in phone.‎‏‎‎‏‎"</string>
+    <string name="keyguard_missing_sim_instructions" msgid="7350295932015220392">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎Insert a SIM card.‎‏‎‎‏‎"</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="589889372883904477">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎The SIM card is missing or not readable. Insert a SIM card.‎‏‎‎‏‎"</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="654102080186420706">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎Unusable SIM card.‎‏‎‎‏‎"</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="4683178224791318347">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‏‎Your SIM card has been permanently disabled.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Contact your wireless service provider for another SIM card.‎‏‎‎‏‎"</string>
+    <string name="keyguard_sim_locked_message" msgid="953766009432168127">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‏‏‏‎SIM card is locked.‎‏‎‎‏‎"</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎SIM card is PUK-locked.‎‏‎‎‏‎"</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎Unlocking SIM card…‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎PIN area‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎SIM PIN area‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‏‏‏‎‎‎‏‎SIM PUK area‎‏‎‎‏‎"</string>
+    <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‏‏‎Next alarm set for ‎‏‎‎‏‏‎<xliff:g id="ALARM">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="keyboardview_keycode_delete" msgid="6883116827512721630">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎Delete‎‏‎‎‏‎"</string>
+    <string name="disable_carrier_button_text" msgid="6914341927421916114">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‎‎Disable eSIM‎‏‎‎‏‎"</string>
+    <string name="keyboardview_keycode_enter" msgid="4505833604411016668">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎Enter‎‏‎‎‏‎"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="534245177645252620">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‎‎Forgot Pattern‎‏‎‎‏‎"</string>
+    <string name="kg_wrong_pattern" msgid="7620081431514773802">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‎‎Wrong Pattern‎‏‎‎‏‎"</string>
+    <string name="kg_wrong_password" msgid="4580683060277329277">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎Wrong Password‎‏‎‎‏‎"</string>
+    <string name="kg_wrong_pin" msgid="4785660766909463466">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎Wrong PIN‎‏‎‎‏‎"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="527455490371878356">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="kg_pattern_instructions" msgid="5547646893001491340">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‎‏‏‏‎‏‎‎‎‎‏‏‏‎‎‎‏‏‎‎‎Draw your pattern‎‏‎‎‏‎"</string>
+    <string name="kg_sim_pin_instructions" msgid="6389000973113699187">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‏‏‎Enter SIM PIN.‎‏‎‎‏‎"</string>
+    <string name="kg_sim_pin_instructions_multi" msgid="1643757228644271861">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‏‎‏‎Enter SIM PIN for \"‎‏‎‎‏‏‎<xliff:g id="CARRIER">%1$s</xliff:g>‎‏‎‎‏‏‏‎\".‎‏‎‎‏‎"</string>
+    <string name="kg_sim_lock_instructions_esim" msgid="4957650659201013804">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎Disable eSIM to use device without mobile service.‎‏‎‎‏‎"</string>
+    <string name="kg_pin_instructions" msgid="4069609316644030034">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‏‎‎‏‎‎Enter PIN‎‏‎‎‏‎"</string>
+    <string name="kg_password_instructions" msgid="136952397352976538">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‎‎Enter Password‎‏‎‎‏‎"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎SIM is now disabled. Enter PUK code to continue. Contact carrier for details.‎‏‎‎‏‎"</string>
+    <string name="kg_puk_enter_puk_hint_multi" msgid="1373131883510840794">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎SIM \"‎‏‎‎‏‏‎<xliff:g id="CARRIER">%1$s</xliff:g>‎‏‎‎‏‏‏‎\" is now disabled. Enter PUK code to continue. Contact carrier for details.‎‏‎‎‏‎"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="3137789674920391087">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‏‎‏‏‏‏‎Enter desired PIN code‎‏‎‎‏‎"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="3089485999116759671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‏‎Confirm desired PIN code‎‏‎‎‏‎"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="4471738151810900114">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‎‎‏‎‎Unlocking SIM card…‎‏‎‎‏‎"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="3057533256729513335">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‎‏‏‏‎Type a PIN that is 4 to 8 numbers.‎‏‎‎‏‎"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6003602401368264144">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‎‎PUK code should be 8 numbers or more.‎‏‎‎‏‎"</string>
+    <string name="kg_invalid_puk" msgid="5399287873762592502">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‏‎‎Re-enter the correct PUK code. Repeated attempts will permanently disable the SIM.‎‏‎‎‏‎"</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="5672736555427444330">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎PIN codes does not match‎‏‎‎‏‎"</string>
+    <string name="kg_login_too_many_attempts" msgid="6604574268387867255">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‏‎Too many pattern attempts‎‏‎‎‏‎"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8637788033282252027">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎You have incorrectly typed your PIN ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7724148763268377734">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‎‎‎‏‏‎‎You have incorrectly typed your password ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4820967667848302092">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‎‏‎‎‎‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‎‎‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1629351522209932316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‏‏‎‎‎You have incorrectly attempted to unlock the tablet ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, this tablet will be reset, which will delete all its data.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="3921998703529189931">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‏‎‏‎‏‏‎You have incorrectly attempted to unlock the phone ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, this phone will be reset, which will delete all its data.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="4694232971224663735">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎You have incorrectly attempted to unlock the tablet ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ times. This tablet will be reset, which will delete all its data.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="2365964340830006961">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎You have incorrectly attempted to unlock the phone ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ times. This phone will be reset, which will delete all its data.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_erase_user" product="tablet" msgid="1365418870560228936">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‎‎You have incorrectly attempted to unlock the tablet ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, this user will be removed, which will delete all user data.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="2151286957817486128">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎You have incorrectly attempted to unlock the phone ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, this user will be removed, which will delete all user data.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_now_erasing_user" product="tablet" msgid="5464020754932560928">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎You have incorrectly attempted to unlock the tablet ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ times. This user will be removed, which will delete all user data.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_now_erasing_user" product="default" msgid="6171564974118059">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‎You have incorrectly attempted to unlock the phone ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ times. This user will be removed, which will delete all user data.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_erase_profile" product="tablet" msgid="9154513795928824239">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎You have incorrectly attempted to unlock the tablet ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, the work profile will be removed, which will delete all profile data.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="2162434417489128282">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎You have incorrectly attempted to unlock the phone ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, the work profile will be removed, which will delete all profile data.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="8966727588974691544">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‎‎You have incorrectly attempted to unlock the tablet ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ times. The work profile will be removed, which will delete all profile data.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="8476407539834855">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎You have incorrectly attempted to unlock the phone ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ times. The work profile will be removed, which will delete all profile data.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="956706236554092172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‎‎‎‏‏‏‏‎‏‎‎‎‏‏‎‎‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, you will be asked to unlock your tablet using an email account.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_2">%3$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="8364140853305528449">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‏‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, you will be asked to unlock your phone using an email account.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_2">%3$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="3389829202093674267">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‎‏‏‎Incorrect SIM PIN code you must now contact your carrier to unlock your device.‎‏‎‎‏‎"</string>
+    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="4314341367727055967">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎Incorrect SIM PIN code, you have ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempts.‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎Incorrect SIM PIN code, you have ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempt before you must contact your carrier to unlock your device.‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="3329017604125179374">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎SIM is unusable. Contact your carrier.‎‏‎‎‏‎"</string>
+    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="2287504898931957513">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‎Incorrect SIM PUK code, you have ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempts before SIM becomes permanently unusable.‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‎Incorrect SIM PUK code, you have ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempt before SIM becomes permanently unusable.‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="kg_password_pin_failed" msgid="8769990811451236223">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎SIM PIN operation failed!‎‏‎‎‏‎"</string>
+    <string name="kg_password_puk_failed" msgid="1331621440873439974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎SIM PUK operation failed!‎‏‎‎‏‎"</string>
+    <string name="kg_pin_accepted" msgid="7637293533973802143">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‎‎‏‎‏‎‎‏‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎Code Accepted!‎‏‎‎‏‎"</string>
+    <string name="keyguard_carrier_default" msgid="4274828292998453695">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎No service.‎‏‎‎‏‎"</string>
+    <string name="accessibility_ime_switch_button" msgid="2695096475319405612">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎Switch input method‎‏‎‎‏‎"</string>
+    <string name="airplane_mode" msgid="3807209033737676010">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‏‎‎Airplane mode‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_reason_restart_pattern" msgid="7246972020562621506">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‎‎‏‎‎Pattern required after device restarts‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎PIN required after device restarts‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_reason_restart_password" msgid="6984641181515902406">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‎‏‏‎‎Password required after device restarts‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_reason_timeout_pattern" msgid="5304487696073914063">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎Pattern required for additional security‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_reason_timeout_pin" msgid="8851462864335757813">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‏‎PIN required for additional security‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_reason_timeout_password" msgid="6563904839641583441">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‏‎‎‎‏‎Password required for additional security‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_reason_switch_profiles_pattern" msgid="3398054847288438444">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‏‏‏‎‎‎‎‏‎‏‎‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‎Pattern required when you switch profiles‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_reason_switch_profiles_pin" msgid="7426368139226961699">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎PIN required when you switch profiles‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_reason_switch_profiles_password" msgid="8383831046318421845">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‏‎‏‎‏‎‏‎‏‎Password required when you switch profiles‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_reason_device_admin" msgid="3452168247888906179">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‎‎‏‏‎Device locked by admin‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_reason_user_request" msgid="8236951765212462286">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‎Device was locked manually‎‏‎‎‏‎"</string>
+    <plurals name="kg_prompt_reason_time_pattern" formatted="false" msgid="71299470072448533">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‎Device hasn\'t been unlocked for ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%d</xliff:g>‎‏‎‎‏‏‏‎ hours. Confirm pattern.‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‎Device hasn\'t been unlocked for ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%d</xliff:g>‎‏‎‎‏‏‏‎ hour. Confirm pattern.‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="kg_prompt_reason_time_pin" formatted="false" msgid="34586942088144385">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎Device hasn\'t been unlocked for ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%d</xliff:g>‎‏‎‎‏‏‏‎ hours. Confirm PIN.‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎Device hasn\'t been unlocked for ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%d</xliff:g>‎‏‎‎‏‏‏‎ hour. Confirm PIN.‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="kg_prompt_reason_time_password" formatted="false" msgid="257297696215346527">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‎‏‏‏‏‏‎Device hasn\'t been unlocked for ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%d</xliff:g>‎‏‎‎‏‏‏‎ hours. Confirm password.‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‎‏‏‏‏‏‎Device hasn\'t been unlocked for ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%d</xliff:g>‎‏‎‎‏‏‏‎ hour. Confirm password.‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="fingerprint_not_recognized" msgid="348813995267914625">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎Not recognized‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/SystemUI/res-keyguard/values-gl/strings.xml b/packages/SystemUI/res-keyguard/values-gl/strings.xml
index 348af67..4f37570 100644
--- a/packages/SystemUI/res-keyguard/values-gl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-gl/strings.xml
@@ -105,7 +105,7 @@
     <string name="kg_password_puk_failed" msgid="1331621440873439974">"Produciuse un erro ao tentar desbloquear a tarxeta SIM co código PUK."</string>
     <string name="kg_pin_accepted" msgid="7637293533973802143">"Código válido"</string>
     <string name="keyguard_carrier_default" msgid="4274828292998453695">"Non hai servizo."</string>
-    <string name="accessibility_ime_switch_button" msgid="2695096475319405612">"Cambia o método de entrada"</string>
+    <string name="accessibility_ime_switch_button" msgid="2695096475319405612">"Cambia o método de introdución"</string>
     <string name="airplane_mode" msgid="3807209033737676010">"Modo avión"</string>
     <string name="kg_prompt_reason_restart_pattern" msgid="7246972020562621506">"É necesario o padrón despois do reinicio do dispositivo"</string>
     <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"É necesario o PIN despois do reinicio do dispositivo"</string>
diff --git a/packages/SystemUI/res-keyguard/values-gu/strings.xml b/packages/SystemUI/res-keyguard/values-gu/strings.xml
index 8e5a7d29..c04dad8 100644
--- a/packages/SystemUI/res-keyguard/values-gu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-gu/strings.xml
@@ -23,7 +23,7 @@
     <string name="app_name" msgid="3171996292755059205">"કીગાર્ડ"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3420548423949593123">"પિન કોડ લખો"</string>
     <string name="keyguard_password_enter_puk_code" msgid="670683628782925409">"સિમ PUK અને નવો પિન કોડ લખો"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="3747778500166059332">"SIM PUK કોડ"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="3747778500166059332">"સિમ PUK કોડ"</string>
     <string name="keyguard_password_enter_pin_prompt" msgid="8188243197504453830">"નવો સિમ પિન કોડ"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"પાસવર્ડ લખવા માટે સ્પર્શ કરો"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"અનલૉક કરવા માટે પાસવર્ડ લખો"</string>
@@ -48,7 +48,7 @@
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"સિમ કાર્ડ અનલૉક કરી રહ્યાં છીએ…"</string>
     <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"પિન ક્ષેત્ર"</string>
     <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"સિમ પિન ક્ષેત્ર"</string>
-    <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK ક્ષેત્ર"</string>
+    <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"સિમ PUK ક્ષેત્ર"</string>
     <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"<xliff:g id="ALARM">%1$s</xliff:g> માટે આગલું એલાર્મ સેટ કર્યું"</string>
     <string name="keyboardview_keycode_delete" msgid="6883116827512721630">"કાઢી નાખો"</string>
     <string name="disable_carrier_button_text" msgid="6914341927421916114">"eSIMને અક્ષમ કરો"</string>
@@ -64,14 +64,14 @@
     <string name="kg_sim_lock_instructions_esim" msgid="4957650659201013804">"મોબાઇલ સેવા વગર ઉપકરણનો ઉપયોગ કરવા eSIMને અક્ષમ કરો."</string>
     <string name="kg_pin_instructions" msgid="4069609316644030034">"પિન દાખલ કરો"</string>
     <string name="kg_password_instructions" msgid="136952397352976538">"પાસવર્ડ દાખલ કરો"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"SIM હમણાં અક્ષમ કરેલ છે. ચાલુ રાખવા માટે PUK કોડ દાખલ કરો. વિગતો માટે કૅરિઅરનો સંપર્ક કરો."</string>
-    <string name="kg_puk_enter_puk_hint_multi" msgid="1373131883510840794">"SIM \"<xliff:g id="CARRIER">%1$s</xliff:g>\" હમણાં અક્ષમ કરેલ છે. ચાલુ રાખવા માટે PUK કોડ દાખલ કરો. વિગતો માટે કૅરિઅરનો સંપર્ક કરો."</string>
+    <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"સિમ હમણાં અક્ષમ કરેલ છે. ચાલુ રાખવા માટે PUK કોડ દાખલ કરો. વિગતો માટે કૅરિઅરનો સંપર્ક કરો."</string>
+    <string name="kg_puk_enter_puk_hint_multi" msgid="1373131883510840794">"સિમ \"<xliff:g id="CARRIER">%1$s</xliff:g>\" હમણાં અક્ષમ કરેલ છે. ચાલુ રાખવા માટે PUK કોડ દાખલ કરો. વિગતો માટે કૅરિઅરનો સંપર્ક કરો."</string>
     <string name="kg_puk_enter_pin_hint" msgid="3137789674920391087">"જોઈતો પિન કોડ દાખલ કરો"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="3089485999116759671">"જોઈતા પિન કોડની પુષ્ટિ કરો"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="4471738151810900114">"સિમ કાર્ડ અનલૉક કરી રહ્યાં છીએ…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="3057533256729513335">"4 થી 8 સંખ્યાનો હોય તેવો એક પિન લખો."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="6003602401368264144">"PUK કોડ 8 કે તેનાથી વધુ સંખ્યાનો હોવો જોઈએ."</string>
-    <string name="kg_invalid_puk" msgid="5399287873762592502">"સાચો PUK કોડ ફરીથી દાખલ કરો. પુનરાવર્તિત પ્રયાસો SIM ને કાયમી રીતે અક્ષમ કરશે."</string>
+    <string name="kg_invalid_puk" msgid="5399287873762592502">"સાચો PUK કોડ ફરીથી દાખલ કરો. પુનરાવર્તિત પ્રયાસો સિમ ને કાયમી રીતે અક્ષમ કરશે."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="5672736555427444330">"પિન કોડ મેળ ખાતા નથી"</string>
     <string name="kg_login_too_many_attempts" msgid="6604574268387867255">"ઘણા બધા પૅટર્ન પ્રયાસો"</string>
     <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8637788033282252027">"તમારો પિન તમે <xliff:g id="NUMBER_0">%1$d</xliff:g> વખત ખોટી રીતે લખ્યો છે. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> સેકન્ડમાં ફરીથી પ્રયાસ કરો."</string>
@@ -96,13 +96,13 @@
       <item quantity="one">ખોટો સિમ પિન કોડ, તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસ બાકી છે.</item>
       <item quantity="other">ખોટો સિમ પિન કોડ, તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસ બાકી છે.</item>
     </plurals>
-    <string name="kg_password_wrong_puk_code_dead" msgid="3329017604125179374">"SIM અનુપયોગી છે. તમારા કૅરિઅરનો સંપર્ક કરો."</string>
+    <string name="kg_password_wrong_puk_code_dead" msgid="3329017604125179374">"સિમ અનુપયોગી છે. તમારા કૅરિઅરનો સંપર્ક કરો."</string>
     <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="2287504898931957513">
-      <item quantity="one">ખોટો SIM PUK કોડ, SIM કાયમી રૂપે અનુપયોગી બની જાય તે પહેલા તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસ બાકી છે.</item>
-      <item quantity="other">ખોટો SIM PUK કોડ, SIM કાયમી રૂપે અનુપયોગી બની જાય તે પહેલા તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસ બાકી છે.</item>
+      <item quantity="one">ખોટો સિમ PUK કોડ, સિમ કાયમી રૂપે અનુપયોગી બની જાય તે પહેલા તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસ બાકી છે.</item>
+      <item quantity="other">ખોટો સિમ PUK કોડ, સિમ કાયમી રૂપે અનુપયોગી બની જાય તે પહેલા તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસ બાકી છે.</item>
     </plurals>
     <string name="kg_password_pin_failed" msgid="8769990811451236223">"સિમ પિન ઑપરેશન નિષ્ફળ થયું!"</string>
-    <string name="kg_password_puk_failed" msgid="1331621440873439974">"SIM PUK ઓપરેશન નિષ્ફળ થયું!"</string>
+    <string name="kg_password_puk_failed" msgid="1331621440873439974">"સિમ PUK ઓપરેશન નિષ્ફળ થયું!"</string>
     <string name="kg_pin_accepted" msgid="7637293533973802143">"કોડ સ્વીકાર્યો!"</string>
     <string name="keyguard_carrier_default" msgid="4274828292998453695">"કોઈ સેવા નથી."</string>
     <string name="accessibility_ime_switch_button" msgid="2695096475319405612">"ઇનપુટ પદ્ધતિ સ્વિચ કરો"</string>
diff --git a/packages/SystemUI/res-keyguard/values-hi/strings.xml b/packages/SystemUI/res-keyguard/values-hi/strings.xml
index 97d628b..dec2c6f 100644
--- a/packages/SystemUI/res-keyguard/values-hi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hi/strings.xml
@@ -34,7 +34,7 @@
     <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"तेज़ी से चार्ज हो रही है"</string>
     <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"धीरे चार्ज हो रही है"</string>
     <string name="keyguard_low_battery" msgid="9218432555787624490">"अपना चार्जर कनेक्‍ट करें."</string>
-    <string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"अनलॉक करने के लिए मेनू दबाएं."</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"लॉक खोलने के लिए मेन्यू दबाएं."</string>
     <string name="keyguard_network_locked_message" msgid="6743537524631420759">"नेटवर्क लॉक किया हुआ है"</string>
     <string name="keyguard_missing_sim_message_short" msgid="6327533369959764518">"कोई SIM कार्ड नहीं है"</string>
     <string name="keyguard_missing_sim_message" product="tablet" msgid="4550152848200783542">"टैबलेट में कोई SIM कार्ड नहीं है."</string>
@@ -42,7 +42,7 @@
     <string name="keyguard_missing_sim_instructions" msgid="7350295932015220392">"SIM कार्ड लगाएं."</string>
     <string name="keyguard_missing_sim_instructions_long" msgid="589889372883904477">"SIM कार्ड मौजूद नहीं है या उसे पढ़ा नहीं जा सकता है. कोई SIM कार्ड लगाएं."</string>
     <string name="keyguard_permanent_disabled_sim_message_short" msgid="654102080186420706">"बेकार SIM कार्ड."</string>
-    <string name="keyguard_permanent_disabled_sim_instructions" msgid="4683178224791318347">"आपका SIM कार्ड हमेशा के लिए अक्षम कर दिया गया है.\n दूसरे SIM कार्ड के लिए अपने वायरलेस सेवा प्रदाता से संपर्क करें."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="4683178224791318347">"आपका सिम कार्ड हमेशा के लिए बंद कर दिया गया है.\n दूसरे सिम कार्ड के लिए अपने वायरलेस सेवा देने वाले से संपर्क करें."</string>
     <string name="keyguard_sim_locked_message" msgid="953766009432168127">"SIM कार्ड लॉक किया हुआ है."</string>
     <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM कार्ड को PUK के ज़रिए लॉक किया हुआ है."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM कार्ड अनलॉक हो रहा है…"</string>
@@ -50,7 +50,7 @@
     <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM पिन क्षेत्र"</string>
     <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK क्षेत्र"</string>
     <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"अगला अलार्म <xliff:g id="ALARM">%1$s</xliff:g> बजे के लिए सेट किया गया है"</string>
-    <string name="keyboardview_keycode_delete" msgid="6883116827512721630">"हटाएं"</string>
+    <string name="keyboardview_keycode_delete" msgid="6883116827512721630">"मिटाएं"</string>
     <string name="disable_carrier_button_text" msgid="6914341927421916114">"eSIM अक्षम करें"</string>
     <string name="keyboardview_keycode_enter" msgid="4505833604411016668">"Enter"</string>
     <string name="kg_forgot_pattern_button_text" msgid="534245177645252620">"पैटर्न भूल गए हैं"</string>
@@ -64,8 +64,8 @@
     <string name="kg_sim_lock_instructions_esim" msgid="4957650659201013804">"मोबाइल सेवा के बिना डिवाइस का उपयोग करने के लिए eSIM अक्षम करें."</string>
     <string name="kg_pin_instructions" msgid="4069609316644030034">"पिन डालें"</string>
     <string name="kg_password_instructions" msgid="136952397352976538">"पासवर्ड डालें"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"SIM अब काम नहीं करेगा. जारी रखने के लिए PUK कोड डालें. ज़्यादा जानकारी के लिए अपनी मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें."</string>
-    <string name="kg_puk_enter_puk_hint_multi" msgid="1373131883510840794">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" का SIM अब काम नहीं करेगा. जारी रखने के लिए PUK कोड डालें. ज़्यादा जानकारी के लिए अपनी मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें."</string>
+    <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"सिम अब काम नहीं करेगा. जारी रखने के लिए PUK कोड डालें. ज़्यादा जानकारी के लिए अपनी मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें."</string>
+    <string name="kg_puk_enter_puk_hint_multi" msgid="1373131883510840794">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" का सिम अब काम नहीं करेगा. जारी रखने के लिए PUK कोड डालें. ज़्यादा जानकारी के लिए अपनी मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें."</string>
     <string name="kg_puk_enter_pin_hint" msgid="3137789674920391087">"मनचाहा पिन कोड डालें"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="3089485999116759671">"मनचाहे पिन कोड की पुष्टि करें"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="4471738151810900114">"SIM कार्ड अनलॉक हो रहा है…"</string>
@@ -81,10 +81,10 @@
     <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="3921998703529189931">"आपने फ़ोन को अनलॉक करने के लिए <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से कोशिश की है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल कोशिशों के बाद, इस फ़ोन को रीसेट कर दिया जाएगा, जिससे इसका सारा डेटा हट जाएगा."</string>
     <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="4694232971224663735">"आपने टैबलेट को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से कोशिश की है. इस टैबलेट को रीसेट कर दिया जाएगा, जिससे इसका सारा डेटा हट जाएगा."</string>
     <string name="kg_failed_attempts_now_wiping" product="default" msgid="2365964340830006961">"आपने फ़ोन को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से कोशिश की है. इस फ़ोन को रीसेट कर दिया जाएगा, जिससे इसका सारा डेटा हट जाएगा."</string>
-    <string name="kg_failed_attempts_almost_at_erase_user" product="tablet" msgid="1365418870560228936">"आपने टैबलेट को अनलॉक करने के लिए <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से कोशिश की है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल कोशिशों के बाद, इस उपयोगकर्ता को निकाल दिया जाएगा, जिससे सभी उपयोगकर्ता डेटा हट जाएगा."</string>
-    <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="2151286957817486128">"आपने फ़ोन को अनलॉक करने के लिए <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से कोशिश की है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल कोशिशों के बाद, इस उपयोगकर्ता को निकाल दिया जाएगा, जिससे सभी उपयोगकर्ता डेटा हट जाएगा."</string>
-    <string name="kg_failed_attempts_now_erasing_user" product="tablet" msgid="5464020754932560928">"आपने टैबलेट को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से कोशिश की है. इस उपयोगकर्ता को निकाल दिया जाएगा, जिससे सभी उपयोगकर्ता डेटा हट जाएगा."</string>
-    <string name="kg_failed_attempts_now_erasing_user" product="default" msgid="6171564974118059">"आपने फ़ोन को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से कोशिश की है. इस उपयोगकर्ता को निकाल दिया जाएगा, जिससे सभी उपयोगकर्ता डेटा हट जाएगा."</string>
+    <string name="kg_failed_attempts_almost_at_erase_user" product="tablet" msgid="1365418870560228936">"आपने टैबलेट का लॉक खोलने के लिए <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से कोशिश की है. <xliff:g id="NUMBER_1">%2$d</xliff:g> बार और गलत कोशिश करने पर, इस उपयोगकर्ता को निकाल दिया जाएगा, जिससे सभी उपयोगकर्ता डेटा मिट जाएगा."</string>
+    <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="2151286957817486128">"आपने फ़ोन का लॉक खोलने के लिए <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से कोशिश की है. <xliff:g id="NUMBER_1">%2$d</xliff:g> बार और गलत कोशिश करने पर, इस उपयोगकर्ता को निकाल दिया जाएगा, जिससे सभी उपयोगकर्ता डेटा मिट जाएगा."</string>
+    <string name="kg_failed_attempts_now_erasing_user" product="tablet" msgid="5464020754932560928">"आपने टैबलेट का लॉक खोलने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से कोशिश की है. इस उपयोगकर्ता को निकाल दिया जाएगा, जिससे सभी उपयोगकर्ता डेटा हट जाएगा."</string>
+    <string name="kg_failed_attempts_now_erasing_user" product="default" msgid="6171564974118059">"आपने फ़ोन का लॉक खोलने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से कोशिश की है. इस उपयोगकर्ता को निकाल दिया जाएगा, जिससे सभी उपयोगकर्ता डेटा हट जाएगा."</string>
     <string name="kg_failed_attempts_almost_at_erase_profile" product="tablet" msgid="9154513795928824239">"आपने टैबलेट को अनलॉक करने के लिए <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से कोशिश की है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल कोशिशों के बाद, कार्य प्रोफ़ाइल को निकाल दिया जाएगा, जिससे सभी प्रोफ़ाइल डेटा हट जाएगा."</string>
     <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="2162434417489128282">"आपने फ़ोन को अनलॉक करने के लिए <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से कोशिश की है. <xliff:g id="NUMBER_1">%2$d</xliff:g> और असफल कोशिशों के बाद, कार्य प्रोफ़ाइल को निकाल दिया जाएगा, जिससे सभी प्रोफ़ाइल डेटा हट जाएगा."</string>
     <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="8966727588974691544">"आपने टैबलेट को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से कोशिश की है. कार्य प्रोफ़ाइल को निकाल दिया जाएगा, जिससे सभी प्रोफ़ाइल डेटा हट जाएगा."</string>
@@ -105,7 +105,7 @@
     <string name="kg_password_puk_failed" msgid="1331621440873439974">"SIM PUK की कार्यवाही विफल रही!"</string>
     <string name="kg_pin_accepted" msgid="7637293533973802143">"कोड स्वीकार किया गया!"</string>
     <string name="keyguard_carrier_default" msgid="4274828292998453695">"कोई सेवा नहीं."</string>
-    <string name="accessibility_ime_switch_button" msgid="2695096475319405612">"इनपुट पद्धति‍ बदलें"</string>
+    <string name="accessibility_ime_switch_button" msgid="2695096475319405612">"इनपुट का तरीका बदलें"</string>
     <string name="airplane_mode" msgid="3807209033737676010">"हवाई जहाज़ मोड"</string>
     <string name="kg_prompt_reason_restart_pattern" msgid="7246972020562621506">"डिवाइस फिर से चालू होने के बाद पैटर्न ज़रूरी है"</string>
     <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"डिवाइस फिर से चालू होने के बाद पिन ज़रूरी है"</string>
@@ -130,5 +130,5 @@
       <item quantity="one">डिवाइस को <xliff:g id="NUMBER_1">%d</xliff:g> घंटों से अनलॉक नहीं किया गया है. पासवर्ड की पुष्टि करें.</item>
       <item quantity="other">डिवाइस को <xliff:g id="NUMBER_1">%d</xliff:g> घंटों से अनलॉक नहीं किया गया है. पासवर्ड की पुष्टि करें.</item>
     </plurals>
-    <string name="fingerprint_not_recognized" msgid="348813995267914625">"अंगुली की पहचान नहीं हो सकी"</string>
+    <string name="fingerprint_not_recognized" msgid="348813995267914625">"उंगली की पहचान नहीं हो सकी"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-mr/strings.xml b/packages/SystemUI/res-keyguard/values-mr/strings.xml
index 596d41a..c6bb82e 100644
--- a/packages/SystemUI/res-keyguard/values-mr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mr/strings.xml
@@ -25,8 +25,8 @@
     <string name="keyguard_password_enter_puk_code" msgid="670683628782925409">"सिम PUK आणि नवीन पिन कोड टाइप करा"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="3747778500166059332">"सिम PUK कोड"</string>
     <string name="keyguard_password_enter_pin_prompt" msgid="8188243197504453830">"नवीन सिम पिन कोड"</string>
-    <string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"संकेतशब्द टाइप करण्यासाठी स्पर्श करा"</font></string>
-    <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"अनलॉक करण्यासाठी संकेतशब्द टाइप करा"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"पासवर्ड टाइप करण्यासाठी स्पर्श करा"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"अनलॉक करण्यासाठी पासवर्ड टाइप करा"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"अनलॉक करण्यासाठी पिन टाइप करा"</string>
     <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"चुकीचा पिन कोड."</string>
     <string name="keyguard_charged" msgid="2222329688813033109">"चार्ज झाली"</string>
@@ -52,30 +52,30 @@
     <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"पुढील अलार्म <xliff:g id="ALARM">%1$s</xliff:g> साठी सेट केला"</string>
     <string name="keyboardview_keycode_delete" msgid="6883116827512721630">"हटवा"</string>
     <string name="disable_carrier_button_text" msgid="6914341927421916114">"eSIM बंद करा"</string>
-    <string name="keyboardview_keycode_enter" msgid="4505833604411016668">"प्रविष्ट करा"</string>
+    <string name="keyboardview_keycode_enter" msgid="4505833604411016668">"एंटर करा"</string>
     <string name="kg_forgot_pattern_button_text" msgid="534245177645252620">"पॅटर्न विसरलात"</string>
     <string name="kg_wrong_pattern" msgid="7620081431514773802">"चुकीचा पॅटर्न"</string>
-    <string name="kg_wrong_password" msgid="4580683060277329277">"चुकीचा संकेतशब्द"</string>
+    <string name="kg_wrong_password" msgid="4580683060277329277">"चुकीचा पासवर्ड"</string>
     <string name="kg_wrong_pin" msgid="4785660766909463466">"चुकीचा पिन"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="527455490371878356">"<xliff:g id="NUMBER">%d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string>
-    <string name="kg_pattern_instructions" msgid="5547646893001491340">"आपला पॅटर्न काढा"</string>
+    <string name="kg_pattern_instructions" msgid="5547646893001491340">"तुमचा पॅटर्न काढा"</string>
     <string name="kg_sim_pin_instructions" msgid="6389000973113699187">"सिम पिन एंटर करा"</string>
     <string name="kg_sim_pin_instructions_multi" msgid="1643757228644271861">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" साठी सिम पिन एंटर करा"</string>
-    <string name="kg_sim_lock_instructions_esim" msgid="4957650659201013804">"मोबाइल सेवांशिवाय डीव्हाइस वापरण्यासाठी eSIM बंद करा."</string>
-    <string name="kg_pin_instructions" msgid="4069609316644030034">"पिन प्रविष्ट करा"</string>
-    <string name="kg_password_instructions" msgid="136952397352976538">"संकेतशब्द प्रविष्ट करा"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"सिम आता अक्षम केले आहे. सुरू ठेवण्यासाठी PUK कोड प्रविष्ट करा. तपशीलांसाठी वाहकाशी संपर्क साधा."</string>
-    <string name="kg_puk_enter_puk_hint_multi" msgid="1373131883510840794">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" सिम आता अक्षम केले आहे. सुरू ठेवण्यासाठी PUK कोड प्रविष्ट करा. तपशीलांसाठी वाहकाशी संपर्क साधा."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="3137789674920391087">"इच्छित पिन कोड प्रविष्ट करा"</string>
+    <string name="kg_sim_lock_instructions_esim" msgid="4957650659201013804">"मोबाइल सेवांशिवाय डिव्हाइस वापरण्यासाठी eSIM बंद करा."</string>
+    <string name="kg_pin_instructions" msgid="4069609316644030034">"पिन एंटर करा"</string>
+    <string name="kg_password_instructions" msgid="136952397352976538">"पासवर्ड एंटर करा"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"सिम आता अक्षम केले आहे. सुरू ठेवण्यासाठी PUK कोड एंटर करा. तपशीलांसाठी वाहकाशी संपर्क साधा."</string>
+    <string name="kg_puk_enter_puk_hint_multi" msgid="1373131883510840794">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" सिम आता अक्षम केले आहे. सुरू ठेवण्यासाठी PUK कोड एंटर करा. तपशीलांसाठी वाहकाशी संपर्क साधा."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="3137789674920391087">"इच्छित पिन कोड एंटर करा"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="3089485999116759671">"इच्छित पिन कोड ची पुष्टी करा"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="4471738151810900114">"सिम कार्ड अनलॉक करत आहे…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="3057533256729513335">"4 ते 8 अंकांचा पिन टाईप करा."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="6003602401368264144">"PUK कोड 8 अंकी किंवा त्यापेक्षा अधिकचा असावा."</string>
-    <string name="kg_invalid_puk" msgid="5399287873762592502">"योग्य PUK कोड पुन्हा प्रविष्ट करा. पुनःपुन्हा प्रयत्न करणे सिम कायमचे अक्षम करेल."</string>
+    <string name="kg_invalid_puk" msgid="5399287873762592502">"योग्य PUK कोड पुन्हा एंटर करा. पुनःपुन्हा प्रयत्न करणे सिम कायमचे अक्षम करेल."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="5672736555427444330">"पिन कोड जुळत नाहीत"</string>
     <string name="kg_login_too_many_attempts" msgid="6604574268387867255">"खूप जास्त पॅटर्न प्रयत्न"</string>
     <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8637788033282252027">"आपण आपला PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा चुकीच्या पद्धतीने टाइप केला आहे. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string>
-    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7724148763268377734">"आपण आपला संकेतशब्द <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा चुकीच्या पद्धतीने टाइप केला आहे. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7724148763268377734">"आपण आपला पासवर्ड <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा चुकीच्या पद्धतीने टाइप केला आहे. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4820967667848302092">"तुम्ही आपला अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने काढला. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1629351522209932316">"आपण टॅबलेट अनलॉक करण्याचा <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा चुकीच्या पद्धतीने प्रयत्न केला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, हे टॅबलेट रीसेट केला जाईल, जे त्याचा सर्व डेटा हटवेल."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="3921998703529189931">"आपण फोन अनलॉक करण्याचा <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा चुकीच्या पद्धतीने प्रयत्न केला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, हा फोन रीसेट केला जाईल, जे त्याचा सर्व डेटा हटवेल."</string>
@@ -91,7 +91,7 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="8476407539834855">"आपण फोन अनलॉक करण्याचा <xliff:g id="NUMBER">%d</xliff:g> वेळा चुकीच्या पद्धतीने प्रयत्न केला आहे. कार्य प्रोफाइल काढली जाईल, जे सर्व प्रोफाइल डेटा हटवेल."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="956706236554092172">"तुम्ही आपला अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यपणे काढला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, तुमच्याला ईमेल खाते वापरून आपला टॅब्लेट अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="8364140853305528449">"तुम्ही आपला अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यपणे काढला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, तुमच्याला ईमेल खाते वापरून आपला फोन अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string>
-    <string name="kg_password_wrong_pin_code_pukked" msgid="3389829202093674267">"सिम पिन कोड चुकीचा आहे तुम्ही आता तुमचे डीव्हाइस अनलॉक करण्‍यासाठी तुमच्या वाहकाशी संपर्क साधावा."</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="3389829202093674267">"सिम पिन कोड चुकीचा आहे तुम्ही आता तुमचे डिव्हाइस अनलॉक करण्‍यासाठी तुमच्या वाहकाशी संपर्क साधावा."</string>
     <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="4314341367727055967">
       <item quantity="one">चुकीचा सिम पिन कोड, तुमच्याकडे <xliff:g id="NUMBER_1">%d</xliff:g> प्रयत्न शिल्लक आहेत.</item>
       <item quantity="other">चुकीचा सिम पिन कोड, तुमच्याकडे <xliff:g id="NUMBER_1">%d</xliff:g> प्रयत्न शिल्लक आहेत.</item>
@@ -107,28 +107,28 @@
     <string name="keyguard_carrier_default" msgid="4274828292998453695">"सेवा नाही."</string>
     <string name="accessibility_ime_switch_button" msgid="2695096475319405612">"इनपुट पद्धत स्विच करा"</string>
     <string name="airplane_mode" msgid="3807209033737676010">"विमान मोड"</string>
-    <string name="kg_prompt_reason_restart_pattern" msgid="7246972020562621506">"डीव्हाइस रीस्टार्ट झाल्यावर पॅटर्न आवश्यक आहे"</string>
-    <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"डीव्हाइस रीस्टार्ट झाल्यावर पिन आवश्यक आहे"</string>
-    <string name="kg_prompt_reason_restart_password" msgid="6984641181515902406">"डीव्हाइस रीस्टार्ट झाल्यावर पासवर्ड आवश्यक आहे"</string>
+    <string name="kg_prompt_reason_restart_pattern" msgid="7246972020562621506">"डिव्हाइस रीस्टार्ट झाल्यावर पॅटर्न आवश्यक आहे"</string>
+    <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"डिव्हाइस रीस्टार्ट झाल्यावर पिन आवश्यक आहे"</string>
+    <string name="kg_prompt_reason_restart_password" msgid="6984641181515902406">"डिव्हाइस रीस्टार्ट झाल्यावर पासवर्ड आवश्यक आहे"</string>
     <string name="kg_prompt_reason_timeout_pattern" msgid="5304487696073914063">"अतिरिक्त सुरक्षिततेसाठी पॅटर्न आवश्‍यक आहे"</string>
     <string name="kg_prompt_reason_timeout_pin" msgid="8851462864335757813">"अतिरिक्त सुरक्षिततेसाठी पिन आवश्‍यक आहे"</string>
-    <string name="kg_prompt_reason_timeout_password" msgid="6563904839641583441">"अतिरिक्त सुरक्षिततेसाठी संकेतशब्द आवश्‍यक आहे"</string>
+    <string name="kg_prompt_reason_timeout_password" msgid="6563904839641583441">"अतिरिक्त सुरक्षिततेसाठी पासवर्ड आवश्‍यक आहे"</string>
     <string name="kg_prompt_reason_switch_profiles_pattern" msgid="3398054847288438444">"तुम्ही प्रोफाईल स्विच करता तेव्‍हा पॅटर्न आवश्‍यक आहे"</string>
     <string name="kg_prompt_reason_switch_profiles_pin" msgid="7426368139226961699">"आपण प्रोफाईल स्विच करता तेव्‍हा पिन आवश्‍यक आहे"</string>
-    <string name="kg_prompt_reason_switch_profiles_password" msgid="8383831046318421845">"आपण प्रोफाईल स्विच करता तेव्‍हा संकेतशब्द आवश्‍यक आहे"</string>
-    <string name="kg_prompt_reason_device_admin" msgid="3452168247888906179">"प्रशासकाद्वारे लॉक केलेले डीव्हाइस"</string>
-    <string name="kg_prompt_reason_user_request" msgid="8236951765212462286">"डीव्हाइस मॅन्युअली लॉक केले होते"</string>
+    <string name="kg_prompt_reason_switch_profiles_password" msgid="8383831046318421845">"आपण प्रोफाईल स्विच करता तेव्‍हा पासवर्ड आवश्‍यक आहे"</string>
+    <string name="kg_prompt_reason_device_admin" msgid="3452168247888906179">"प्रशासकाद्वारे लॉक केलेले डिव्हाइस"</string>
+    <string name="kg_prompt_reason_user_request" msgid="8236951765212462286">"डिव्हाइस मॅन्युअली लॉक केले होते"</string>
     <plurals name="kg_prompt_reason_time_pattern" formatted="false" msgid="71299470072448533">
-      <item quantity="one">डीव्हाइस <xliff:g id="NUMBER_1">%d</xliff:g> तासासाठी अनलॉक केले गेले नाही. पॅटर्नची खात्री करा.</item>
-      <item quantity="other">डीव्हाइस <xliff:g id="NUMBER_1">%d</xliff:g> तासांसाठी अनलॉक केले गेले नाही. पॅटर्नची खात्री करा.</item>
+      <item quantity="one">डिव्हाइस <xliff:g id="NUMBER_1">%d</xliff:g> तासासाठी अनलॉक केले गेले नाही. पॅटर्नची खात्री करा.</item>
+      <item quantity="other">डिव्हाइस <xliff:g id="NUMBER_1">%d</xliff:g> तासांसाठी अनलॉक केले गेले नाही. पॅटर्नची खात्री करा.</item>
     </plurals>
     <plurals name="kg_prompt_reason_time_pin" formatted="false" msgid="34586942088144385">
-      <item quantity="one">डीव्हाइस <xliff:g id="NUMBER_1">%d</xliff:g> तासासाठी अनलॉक केले गेले नाही. पिनची खात्री करा.</item>
-      <item quantity="other">डीव्हाइस <xliff:g id="NUMBER_1">%d</xliff:g> तासांसाठी अनलॉक केले गेले नाही. पिन ची खात्री करा.</item>
+      <item quantity="one">डिव्हाइस <xliff:g id="NUMBER_1">%d</xliff:g> तासासाठी अनलॉक केले गेले नाही. पिनची खात्री करा.</item>
+      <item quantity="other">डिव्हाइस <xliff:g id="NUMBER_1">%d</xliff:g> तासांसाठी अनलॉक केले गेले नाही. पिन ची खात्री करा.</item>
     </plurals>
     <plurals name="kg_prompt_reason_time_password" formatted="false" msgid="257297696215346527">
-      <item quantity="one">डीव्हाइस <xliff:g id="NUMBER_1">%d</xliff:g> तासासाठी अनलॉक केले गेले नाही. पासवर्डची खात्री करा.</item>
-      <item quantity="other">डीव्हाइस <xliff:g id="NUMBER_1">%d</xliff:g> तासांसाठी अनलॉक केले गेले नाही. पासवर्डची खात्री करा.</item>
+      <item quantity="one">डिव्हाइस <xliff:g id="NUMBER_1">%d</xliff:g> तासासाठी अनलॉक केले गेले नाही. पासवर्डची खात्री करा.</item>
+      <item quantity="other">डिव्हाइस <xliff:g id="NUMBER_1">%d</xliff:g> तासांसाठी अनलॉक केले गेले नाही. पासवर्डची खात्री करा.</item>
     </plurals>
     <string name="fingerprint_not_recognized" msgid="348813995267914625">"ओळखले नाही"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-nl/strings.xml b/packages/SystemUI/res-keyguard/values-nl/strings.xml
index eb27c2b..f5942f4 100644
--- a/packages/SystemUI/res-keyguard/values-nl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-nl/strings.xml
@@ -49,7 +49,7 @@
     <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"Gebied voor pincode"</string>
     <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"Gebied voor pincode van simkaart"</string>
     <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"Gebied voor pukcode van simkaart"</string>
-    <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Volgende alarm ingesteld voor <xliff:g id="ALARM">%1$s</xliff:g>"</string>
+    <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Volgende wekker ingesteld voor <xliff:g id="ALARM">%1$s</xliff:g>"</string>
     <string name="keyboardview_keycode_delete" msgid="6883116827512721630">"Delete"</string>
     <string name="disable_carrier_button_text" msgid="6914341927421916114">"Simkaart uitschakelen"</string>
     <string name="keyboardview_keycode_enter" msgid="4505833604411016668">"Enter"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml
index 96d124d..a80498d 100644
--- a/packages/SystemUI/res-keyguard/values-pa/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml
@@ -23,29 +23,29 @@
     <string name="app_name" msgid="3171996292755059205">"ਕੀ-ਗਾਰਡ"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3420548423949593123">"ਪਿੰਨ ਕੋਡ ਟਾਈਪ ਕਰੋ"</string>
     <string name="keyguard_password_enter_puk_code" msgid="670683628782925409">"ਸਿਮ PUK ਅਤੇ ਨਵਾਂ ਪਿੰਨ ਕੋਡ ਟਾਈਪ ਕਰੋ"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="3747778500166059332">"SIM PUK ਕੋਡ"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="3747778500166059332">"ਸਿਮ PUK ਕੋਡ"</string>
     <string name="keyguard_password_enter_pin_prompt" msgid="8188243197504453830">"ਨਵਾਂ ਸਿਮ ਪਿੰਨ ਕੋਡ"</string>
-    <string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"ਪਾਸਵਰਡ ਟਾਈਪ ਕਰਨ ਲਈ ਸਪੱਰਸ਼ ਕਰੋ"</font></string>
-    <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"ਅਨਲੌਕ ਕਰਨ ਲਈ ਪਾਸਵਰਡ ਟਾਈਪ ਕਰੋ"</string>
-    <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"ਅਨਲੌਕ ਕਰਨ ਲਈ ਪਿੰਨ ਟਾਈਪ ਕਰੋ"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"ਗ਼ਲਤ ਪਿੰਨ ਕੋਡ।"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="5790410752696806482"><font size="17">"ਪਾਸਵਰਡ ਟਾਈਪ ਕਰਨ ਲਈ ਸਪਰਸ਼ ਕਰੋ"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="595980919238127672">"ਅਣਲਾਕ ਕਰਨ ਲਈ ਪਾਸਵਰਡ ਟਾਈਪ ਕਰੋ"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"ਅਣਲਾਕ ਕਰਨ ਲਈ ਪਿੰਨ ਟਾਈਪ ਕਰੋ"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"ਗਲਤ ਪਿੰਨ ਕੋਡ।"</string>
     <string name="keyguard_charged" msgid="2222329688813033109">"ਚਾਰਜ ਹੋ ਗਿਆ"</string>
     <string name="keyguard_plugged_in" msgid="89308975354638682">"ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
     <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"ਤੇਜ਼ੀ ਨਾਲ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
     <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"ਹੌਲੀ-ਹੌਲੀ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
     <string name="keyguard_low_battery" msgid="9218432555787624490">"ਆਪਣਾ ਚਾਰਜਰ ਕਨੈਕਟ ਕਰੋ।"</string>
-    <string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"ਅਨਲੌਕ ਕਰਨ ਲਈ \"ਮੀਨੂ\" ਦਬਾਓ।"</string>
-    <string name="keyguard_network_locked_message" msgid="6743537524631420759">"ਨੈੱਟਵਰਕ ਲੌਕ ਕੀਤਾ ਗਿਆ"</string>
-    <string name="keyguard_missing_sim_message_short" msgid="6327533369959764518">"ਕੋਈ SIM ਕਾਰਡ ਮੌਜੂਦ ਨਹੀਂ"</string>
-    <string name="keyguard_missing_sim_message" product="tablet" msgid="4550152848200783542">"ਟੈਬਲੈੱਟ ਵਿੱਚ ਕੋਈ SIM ਕਾਰਡ ਮੌਜੂਦ ਨਹੀਂ।"</string>
-    <string name="keyguard_missing_sim_message" product="default" msgid="6585414237800161146">"ਫ਼ੋਨ ਵਿੱਚ ਕੋਈ SIM ਕਾਰਡ ਮੌਜੂਦ ਨਹੀਂ।"</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="8566679946700751371">"ਅਣਲਾਕ ਕਰਨ ਲਈ \"ਮੀਨੂ\" ਦਬਾਓ।"</string>
+    <string name="keyguard_network_locked_message" msgid="6743537524631420759">"ਨੈੱਟਵਰਕ  ਲਾਕ  ਕੀਤਾ ਗਿਆ"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="6327533369959764518">"ਕੋਈ ਸਿਮ ਕਾਰਡ ਨਹੀਂ"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="4550152848200783542">"ਟੈਬਲੈੱਟ ਵਿੱਚ ਕੋਈ ਸਿਮ ਕਾਰਡ ਮੌਜੂਦ ਨਹੀਂ।"</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="6585414237800161146">"ਫ਼ੋਨ ਵਿੱਚ ਕੋਈ ਸਿਮ ਕਾਰਡ ਮੌਜੂਦ ਨਹੀਂ।"</string>
     <string name="keyguard_missing_sim_instructions" msgid="7350295932015220392">"ਇੱਕ SIM ਕਾਰਡ ਪਾਓ।"</string>
     <string name="keyguard_missing_sim_instructions_long" msgid="589889372883904477">"SIM ਕਾਰਡ ਮੌਜੂਦ ਨਹੀਂ ਜਾਂ ਪੜ੍ਹਨਯੋਗ ਨਹੀਂ ਹੈ। ਇੱਕ SIM ਕਾਰਡ ਪਾਓ।"</string>
     <string name="keyguard_permanent_disabled_sim_message_short" msgid="654102080186420706">"ਨਾ-ਵਰਤਣਯੋਗ SIM ਕਾਰਡ।"</string>
-    <string name="keyguard_permanent_disabled_sim_instructions" msgid="4683178224791318347">"ਤੁਹਾਡਾ SIM ਕਾਰਡ ਸਥਾਈ ਤੌਰ \'ਤੇ ਅਯੋਗ ਬਣਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।\n ਇੱਕ ਹੋਰ SIM ਕਾਰਡ ਲਈ ਆਪਣੇ ਵਾਇਰਲੈੱਸ ਸੇਵਾ ਪ੍ਰਦਾਨਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
-    <string name="keyguard_sim_locked_message" msgid="953766009432168127">"SIM ਕਾਰਡ ਲੌਕ ਕੀਤਾ ਹੋਇਆ ਹੈ।"</string>
-    <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM ਕਾਰਡ PUK-ਲੌਕ ਕੀਤਾ ਹੋਇਆ ਹੈ।"</string>
-    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM ਕਾਰਡ ਨੂੰ ਅਨਲੌਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="4683178224791318347">"ਤੁਹਾਡਾ ਸਿਮ ਕਾਰਡ ਸਥਾਈ ਤੌਰ \'ਤੇ ਅਯੋਗ ਬਣਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।\n ਇੱਕ ਹੋਰ ਸਿਮ ਕਾਰਡ ਲਈ ਆਪਣੇ ਵਾਇਰਲੈੱਸ ਸੇਵਾ ਪ੍ਰਦਾਨਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+    <string name="keyguard_sim_locked_message" msgid="953766009432168127">"SIM ਕਾਰਡ  ਲਾਕ  ਕੀਤਾ ਹੋਇਆ ਹੈ।"</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="1772789643694942073">"SIM ਕਾਰਡ PUK- ਲਾਕ  ਕੀਤਾ ਹੋਇਆ ਹੈ।"</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="3586601150825821675">"SIM ਕਾਰਡ ਨੂੰ ਅਣਲਾਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
     <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"ਪਿੰਨ ਖੇਤਰ"</string>
     <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"ਸਿਮ ਪਿੰਨ ਖੇਤਰ"</string>
     <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK ਖੇਤਰ"</string>
@@ -56,56 +56,56 @@
     <string name="kg_forgot_pattern_button_text" msgid="534245177645252620">"ਪੈਟਰਨ ਭੁੱਲ ਗਏ"</string>
     <string name="kg_wrong_pattern" msgid="7620081431514773802">"ਗਲਤ ਪੈਟਰਨ"</string>
     <string name="kg_wrong_password" msgid="4580683060277329277">"ਗਲਤ ਪਾਸਵਰਡ"</string>
-    <string name="kg_wrong_pin" msgid="4785660766909463466">"ਗ਼ਲਤ ਪਿੰਨ"</string>
+    <string name="kg_wrong_pin" msgid="4785660766909463466">"ਗਲਤ ਪਿੰਨ"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="527455490371878356">"<xliff:g id="NUMBER">%d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
     <string name="kg_pattern_instructions" msgid="5547646893001491340">"ਆਪਣਾ ਪੈਟਰਨ ਉਲੀਕੋ"</string>
     <string name="kg_sim_pin_instructions" msgid="6389000973113699187">"ਸਿਮ ਪਿੰਨ ਦਾਖਲ ਕਰੋ।"</string>
     <string name="kg_sim_pin_instructions_multi" msgid="1643757228644271861">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" ਲਈ ਸਿਮ ਪਿੰਨ ਦਾਖਲ ਕਰੋ।"</string>
-    <string name="kg_sim_lock_instructions_esim" msgid="4957650659201013804">"ਮੋਬਾਈਲ ਸੇਵਾ ਤੋਂ ਬਿਨਾਂ ਡੀਵਾਈਸ ਨੂੰ ਵਰਤਣ ਲਈ eSIM ਅਯੋਗ ਬਣਾਓ।"</string>
+    <string name="kg_sim_lock_instructions_esim" msgid="4957650659201013804">"ਮੋਬਾਈਲ ਸੇਵਾ ਤੋਂ ਬਿਨਾਂ ਡੀਵਾਈਸ ਨੂੰ ਵਰਤਣ ਲਈ eSIM ਬੰਦ ਕਰੋ।"</string>
     <string name="kg_pin_instructions" msgid="4069609316644030034">"ਪਿੰਨ ਦਾਖਲ ਕਰੋ"</string>
     <string name="kg_password_instructions" msgid="136952397352976538">"ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"SIM ਹੁਣ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ PUK ਕੋਡ ਦਾਖਲ ਕਰੋ। ਵੇਰਵਿਆਂ ਲਈ ਕੈਰੀਅਰ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
-    <string name="kg_puk_enter_puk_hint_multi" msgid="1373131883510840794">"SIM \"<xliff:g id="CARRIER">%1$s</xliff:g>\" ਹੁਣ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ PUK ਕੋਡ ਦਾਖਲ ਕਰੋ। ਵੇਰਵਿਆਂ ਲਈ ਕੈਰੀਅਰ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"ਸਿਮ ਹੁਣ ਬੰਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ PUK ਕੋਡ ਦਾਖਲ ਕਰੋ। ਵੇਰਵਿਆਂ ਲਈ ਕੈਰੀਅਰ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
+    <string name="kg_puk_enter_puk_hint_multi" msgid="1373131883510840794">"ਸਿਮ \"<xliff:g id="CARRIER">%1$s</xliff:g>\" ਹੁਣ ਬੰਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ PUK ਕੋਡ ਦਾਖਲ ਕਰੋ। ਵੇਰਵਿਆਂ ਲਈ ਕੈਰੀਅਰ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
     <string name="kg_puk_enter_pin_hint" msgid="3137789674920391087">"ਇੱਛਤ ਪਿੰਨ ਕੋਡ ਦਾਖਲ ਕਰੋ"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="3089485999116759671">"ਇੱਛਤ ਪਿੰਨ ਕੋਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="4471738151810900114">"SIM ਕਾਰਡ ਨੂੰ ਅਨਲੌਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="4471738151810900114">"SIM ਕਾਰਡ ਨੂੰ ਅਣਲਾਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="3057533256729513335">"ਕੋਈ ਪਿੰਨ ਟਾਈਪ ਕਰੋ ਜੋ 4 ਤੋਂ 8 ਨੰਬਰਾਂ ਦਾ ਹੋਵੇ।"</string>
     <string name="kg_invalid_sim_puk_hint" msgid="6003602401368264144">"PUK ਕੋਡ 8 ਜਾਂ ਵੱਧ ਨੰਬਰਾਂ ਦਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।"</string>
-    <string name="kg_invalid_puk" msgid="5399287873762592502">"ਸਹੀ PUK ਕੋਡ ਮੁੜ-ਦਾਖਲ ਕਰੋ। ਬਾਰ-ਬਾਰ ਕੀਤੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ SIM ਨੂੰ ਸਥਾਈ ਤੌਰ \'ਤੇ ਅਯੋਗ ਬਣਾ ਦੇਣਗੀਆਂ।"</string>
+    <string name="kg_invalid_puk" msgid="5399287873762592502">"ਸਹੀ PUK ਕੋਡ ਮੁੜ-ਦਾਖਲ ਕਰੋ। ਬਾਰ-ਬਾਰ ਕੀਤੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਸਿਮ ਨੂੰ ਸਥਾਈ ਤੌਰ \'ਤੇ ਬੰਦ ਕਰ ਦੇਣਗੀਆਂ।"</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="5672736555427444330">"ਪਿੰਨ ਕੋਡ ਮੇਲ ਨਹੀਂ ਖਾਂਦੇ"</string>
     <string name="kg_login_too_many_attempts" msgid="6604574268387867255">"ਬਹੁਤ ਜ਼ਿਆਦਾ ਪੈਟਰਨ ਕੋਸ਼ਿਸ਼ਾਂ"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8637788033282252027">"ਤੁਸੀਂ ਆਪਣਾ ਪਿੰਨ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗ਼ਲਤ ਢੰਗ ਨਾਲ ਟਾਈਪ ਕੀਤਾ ਹੈ। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8637788033282252027">"ਤੁਸੀਂ ਆਪਣਾ ਪਿੰਨ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਟਾਈਪ ਕੀਤਾ ਹੈ। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7724148763268377734">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਆਪਣਾ ਪਾਸਵਰਡ ਗਲਤ ਢੰਗ ਨਾਲ ਟਾਈਪ ਕੀਤਾ ਹੈ।\n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4820967667848302092">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਆਪਣਾ ਅਨਲੌਕ ਪੈਟਰਨ ਗਲਤ ਢੰਗ ਨਾਲ ਉਲੀਕਿਆ ਹੈ। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1629351522209932316">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਟੈਬਲੈੱਟ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਇਹ ਟੈਬਲੈੱਟ ਰੀਸੈੱਟ ਕੀਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਇਸਦਾ ਸਾਰਾ ਡੈਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="3921998703529189931">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਫ਼ੋਨ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਇਹ ਫ਼ੋਨ ਰੀਸੈੱਟ ਕੀਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਇਸਦਾ ਸਾਰਾ ਡੈਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
-    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="4694232971224663735">"ਤੁਸੀਂ <xliff:g id="NUMBER">%d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਟੈਬਲੈੱਟ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। ਇਹ ਟੈਬਲੈੱਟ ਰੀਸੈੱਟ ਕੀਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਇਸਦਾ ਸਾਰਾ ਡੈਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
-    <string name="kg_failed_attempts_now_wiping" product="default" msgid="2365964340830006961">"ਤੁਸੀਂ <xliff:g id="NUMBER">%d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਫ਼ੋਨ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। ਇਹ ਫ਼ੋਨ ਰੀਸੈੱਟ ਕੀਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਇਸਦਾ ਸਾਰਾ ਡੈਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
-    <string name="kg_failed_attempts_almost_at_erase_user" product="tablet" msgid="1365418870560228936">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਟੈਬਲੈੱਟ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਸਾਰਾ ਵਰਤੋਂਕਾਰ ਡੈਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
-    <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="2151286957817486128">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਫ਼ੋਨ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਸਾਰਾ ਵਰਤੋਂਕਾਰ ਡੈਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
-    <string name="kg_failed_attempts_now_erasing_user" product="tablet" msgid="5464020754932560928">"ਤੁਸੀਂ <xliff:g id="NUMBER">%d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਟੈਬਲੈੱਟ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਸਾਰਾ ਵਰਤੋਂਕਾਰ ਡੈਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
-    <string name="kg_failed_attempts_now_erasing_user" product="default" msgid="6171564974118059">"ਤੁਸੀਂ <xliff:g id="NUMBER">%d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਫ਼ੋਨ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਸਾਰਾ ਵਰਤੋਂਕਾਰ ਡੈਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
-    <string name="kg_failed_attempts_almost_at_erase_profile" product="tablet" msgid="9154513795928824239">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਟੈਬਲੈੱਟ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਪ੍ਰੋਫਾਈਲ ਦਾ ਸਾਰਾ ਡੈਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
-    <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="2162434417489128282">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਫ਼ੋਨ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਪ੍ਰੋਫਾਈਲ ਦਾ ਸਾਰਾ ਡੈਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
-    <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="8966727588974691544">"ਤੁਸੀਂ <xliff:g id="NUMBER">%d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਟੈਬਲੈੱਟ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਸਾਰਾ ਪ੍ਰੋਫਾਈਲ ਡੈਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
-    <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="8476407539834855">"ਤੁਸੀਂ <xliff:g id="NUMBER">%d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਫ਼ੋਨ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਸਾਰਾ ਪ੍ਰੋਫਾਈਲ ਡੈਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="956706236554092172">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਆਪਣਾ ਅਨਲੌਕ ਪੈਟਰਨ ਗਲਤ ਢੰਗ ਨਾਲ ਉਲੀਕਿਆ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਨੂੰ ਇੱਕ ਈਮੇਲ ਖਾਤਾ ਵਰਤਦੇ ਹੋਏ ਆਪਣੇ ਟੈਬਲੈੱਟ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਲਈ ਕਿਹਾ ਜਾਵੇਗਾ।\n\n<xliff:g id="NUMBER_2">%3$d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="8364140853305528449">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਆਪਣਾ ਅਨਲੌਕ ਪੈਟਰਨ ਗਲਤ ਢੰਗ ਨਾਲ ਉਲੀਕਿਆ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਨੂੰ ਇੱਕ ਈਮੇਲ ਖਾਤਾ ਵਰਤਦੇ ਹੋਏ ਆਪਣਾ ਫ਼ੋਨ ਅਨਲੌਕ ਕਰਨ ਲਈ ਕਿਹਾ ਜਾਵੇਗਾ।\n\n<xliff:g id="NUMBER_2">%3$d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="kg_password_wrong_pin_code_pukked" msgid="3389829202093674267">"ਗ਼ਲਤ ਸਿਮ ਪਿੰਨ ਕੋਡ, ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਲਈ ਹੁਣ ਤੁਹਾਨੂੰ ਲਾਜ਼ਮੀ ਤੌਰ \'ਤੇ ਆਪਣੇ ਕੈਰੀਅਰ ਨਾਲ ਸੰਪਰਕ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ।"</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4820967667848302092">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਆਪਣਾ ਅਣਲਾਕ ਪੈਟਰਨ ਗਲਤ ਢੰਗ ਨਾਲ ਉਲੀਕਿਆ ਹੈ। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1629351522209932316">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਟੈਬਲੈੱਟ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਇਹ ਟੈਬਲੈੱਟ ਰੀਸੈੱਟ ਕੀਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਇਸਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="3921998703529189931">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਇਹ ਫ਼ੋਨ ਰੀਸੈੱਟ ਕੀਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਇਸਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="4694232971224663735">"ਤੁਸੀਂ <xliff:g id="NUMBER">%d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਟੈਬਲੈੱਟ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। ਇਹ ਟੈਬਲੈੱਟ ਰੀਸੈੱਟ ਕੀਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਇਸਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="2365964340830006961">"ਤੁਸੀਂ <xliff:g id="NUMBER">%d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। ਇਹ ਫ਼ੋਨ ਰੀਸੈੱਟ ਕੀਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਇਸਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
+    <string name="kg_failed_attempts_almost_at_erase_user" product="tablet" msgid="1365418870560228936">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਟੈਬਲੈੱਟ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਸਾਰਾ ਵਰਤੋਂਕਾਰ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
+    <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="2151286957817486128">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਸਾਰਾ ਵਰਤੋਂਕਾਰ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
+    <string name="kg_failed_attempts_now_erasing_user" product="tablet" msgid="5464020754932560928">"ਤੁਸੀਂ <xliff:g id="NUMBER">%d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਟੈਬਲੈੱਟ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਸਾਰਾ ਵਰਤੋਂਕਾਰ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
+    <string name="kg_failed_attempts_now_erasing_user" product="default" msgid="6171564974118059">"ਤੁਸੀਂ <xliff:g id="NUMBER">%d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਸਾਰਾ ਵਰਤੋਂਕਾਰ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
+    <string name="kg_failed_attempts_almost_at_erase_profile" product="tablet" msgid="9154513795928824239">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਟੈਬਲੈੱਟ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਪ੍ਰੋਫਾਈਲ ਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
+    <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="2162434417489128282">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਪ੍ਰੋਫਾਈਲ ਦਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
+    <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="8966727588974691544">"ਤੁਸੀਂ <xliff:g id="NUMBER">%d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਟੈਬਲੈੱਟ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਸਾਰਾ ਪ੍ਰੋਫਾਈਲ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
+    <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="8476407539834855">"ਤੁਸੀਂ <xliff:g id="NUMBER">%d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਸਾਰਾ ਪ੍ਰੋਫਾਈਲ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="956706236554092172">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਆਪਣਾ ਅਣਲਾਕ ਪੈਟਰਨ ਗਲਤ ਢੰਗ ਨਾਲ ਉਲੀਕਿਆ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਨੂੰ ਇੱਕ ਈਮੇਲ ਖਾਤਾ ਵਰਤਦੇ ਹੋਏ ਆਪਣੇ ਟੈਬਲੈੱਟ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ ਕਿਹਾ ਜਾਵੇਗਾ।\n\n<xliff:g id="NUMBER_2">%3$d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="8364140853305528449">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਆਪਣਾ ਅਣਲਾਕ ਪੈਟਰਨ ਗਲਤ ਢੰਗ ਨਾਲ ਡ੍ਰਾ ਕੀਤਾ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਨੂੰ ਇੱਕ ਈਮੇਲ ਖਾਤਾ ਵਰਤਦੇ ਹੋਏ ਆਪਣਾ ਫ਼ੋਨ ਅਣਲਾਕ ਕਰਨ ਲਈ ਕਿਹਾ ਜਾਏਗਾ।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="3389829202093674267">"ਗਲਤ ਸਿਮ ਪਿੰਨ ਕੋਡ, ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ ਹੁਣ ਤੁਹਾਨੂੰ ਲਾਜ਼ਮੀ ਤੌਰ \'ਤੇ ਆਪਣੇ ਕੈਰੀਅਰ ਨਾਲ ਸੰਪਰਕ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ।"</string>
     <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="4314341367727055967">
-      <item quantity="one">ਗ਼ਲਤ ਸਿਮ ਪਿੰਨ ਕੋਡ, ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।</item>
-      <item quantity="other">ਗ਼ਲਤ ਸਿਮ ਪਿੰਨ ਕੋਡ, ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ।</item>
+      <item quantity="one">ਗਲਤ ਸਿਮ ਪਿੰਨ ਕੋਡ, ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।</item>
+      <item quantity="other">ਗਲਤ ਸਿਮ ਪਿੰਨ ਕੋਡ, ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।</item>
     </plurals>
     <string name="kg_password_wrong_puk_code_dead" msgid="3329017604125179374">"SIM ਨਾ-ਵਰਤਣਯੋਗ ਹੈ। ਆਪਣੇ ਕੈਰੀਅਰ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
     <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="2287504898931957513">
-      <item quantity="one">ਗਲਤ SIM PUK ਕੋਡ, ਇਸਤੋਂ ਪਹਿਲਾਂ ਕਿ SIM ਸਥਾਈ ਤੌਰ \'ਤੇ ਵਰਤਣਯੋਗ ਨਾ ਰਹੇ, ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।</item>
-      <item quantity="other">ਗਲਤ SIM PUK ਕੋਡ, ਇਸਤੋਂ ਪਹਿਲਾਂ ਕਿ SIM ਸਥਾਈ ਤੌਰ \'ਤੇ ਵਰਤਣਯੋਗ ਨਾ ਰਹੇ, ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ।</item>
+      <item quantity="one">ਗਲਤ ਸਿਮ PUK ਕੋਡ, ਇਸਤੋਂ ਪਹਿਲਾਂ ਕਿ ਸਿਮ ਸਥਾਈ ਤੌਰ \'ਤੇ ਵਰਤਣਯੋਗ ਨਾ ਰਹੇ, ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।</item>
+      <item quantity="other">ਗਲਤ ਸਿਮ PUK ਕੋਡ, ਇਸਤੋਂ ਪਹਿਲਾਂ ਕਿ ਸਿਮ ਸਥਾਈ ਤੌਰ \'ਤੇ ਵਰਤਣਯੋਗ ਨਾ ਰਹੇ, ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ।</item>
     </plurals>
     <string name="kg_password_pin_failed" msgid="8769990811451236223">"ਸਿਮ ਪਿੰਨ ਕਾਰਵਾਈ ਅਸਫਲ ਰਹੀ!"</string>
     <string name="kg_password_puk_failed" msgid="1331621440873439974">"SIM PUK ਕਾਰਵਾਈ ਅਸਫਲ ਰਹੀ!"</string>
     <string name="kg_pin_accepted" msgid="7637293533973802143">"ਕੋਡ ਸਵੀਕਾਰ ਕੀਤਾ ਗਿਆ!"</string>
     <string name="keyguard_carrier_default" msgid="4274828292998453695">"ਕੋਈ ਸੇਵਾ ਨਹੀਂ।"</string>
-    <string name="accessibility_ime_switch_button" msgid="2695096475319405612">"ਇਨਪੁੱਟ ਵਿਧੀ ਬਦਲੋ"</string>
+    <string name="accessibility_ime_switch_button" msgid="2695096475319405612">"ਇਨਪੁੱਟ ਵਿਧੀ ਸਵਿੱਚ ਕਰੋ"</string>
     <string name="airplane_mode" msgid="3807209033737676010">"ਹਵਾਈ-ਜਹਾਜ਼ ਮੋਡ"</string>
     <string name="kg_prompt_reason_restart_pattern" msgid="7246972020562621506">"ਡੀਵਾਈਸ ਦੇ ਮੁੜ-ਚਾਲੂ ਹੋਣ \'ਤੇ ਪੈਟਰਨ ਦੀ ਲੋੜ ਹੈ"</string>
     <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"ਡੀਵਾਈਸ ਦੇ ਮੁੜ-ਚਾਲੂ ਹੋਣ \'ਤੇ ਪਿੰਨ ਦੀ ਲੋੜ ਹੈ"</string>
@@ -113,22 +113,22 @@
     <string name="kg_prompt_reason_timeout_pattern" msgid="5304487696073914063">"ਵਧੀਕ ਸੁਰੱਖਿਆ ਲਈ ਪੈਟਰਨ ਦੀ ਲੋੜ ਹੈ"</string>
     <string name="kg_prompt_reason_timeout_pin" msgid="8851462864335757813">"ਵਧੀਕ ਸੁਰੱਖਿਆ ਲਈ ਪਿੰਨ ਦੀ ਲੋੜ ਹੈ"</string>
     <string name="kg_prompt_reason_timeout_password" msgid="6563904839641583441">"ਵਧੀਕ ਸੁਰੱਖਿਆ ਲਈ ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਹੈ"</string>
-    <string name="kg_prompt_reason_switch_profiles_pattern" msgid="3398054847288438444">"ਜਦ ਤੁਸੀਂ ਇੱਕ ਪ੍ਰੋਫਾਈਲ ਤੋਂ ਦੂਜੇ \'ਤੇ ਜਾਂਦੇ ਹੋ ਤਾਂ ਪੈਟਰਨ ਦੀ ਲੋੜ ਹੈ"</string>
-    <string name="kg_prompt_reason_switch_profiles_pin" msgid="7426368139226961699">"ਜਦ ਤੁਸੀਂ ਇੱਕ ਪ੍ਰੋਫਾਈਲ ਤੋਂ ਦੂਜੇ \'ਤੇ ਜਾਂਦੇ ਹੋ ਤਾਂ ਪਿੰਨ ਦੀ ਲੋੜ ਹੈ"</string>
+    <string name="kg_prompt_reason_switch_profiles_pattern" msgid="3398054847288438444">"ਜਦ ਤੁਸੀਂ ਪ੍ਰੋਫਾਈਲਾਂ ਨੂੰ ਸਵਿੱਚ ਕਰਦੇ ਹੋ ਤਾਂ ਪੈਟਰਨ ਦੀ ਲੋੜ ਹੈ"</string>
+    <string name="kg_prompt_reason_switch_profiles_pin" msgid="7426368139226961699">"ਜਦ ਤੁਸੀਂ ਪ੍ਰੋਫਾਈਲਾਂ ਨੂੰ ਸਵਿੱਚ ਕਰਦੇ ਹੋ ਤਾਂ ਪਿੰਨ ਦੀ ਲੋੜ ਹੈ"</string>
     <string name="kg_prompt_reason_switch_profiles_password" msgid="8383831046318421845">"ਜਦ ਤੁਸੀਂ ਇੱਕ ਪ੍ਰੋਫਾਈਲ ਤੋਂ ਦੂਜੇ \'ਤੇ ਜਾਂਦੇ ਹੋ ਤਾਂ ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਹੈ"</string>
-    <string name="kg_prompt_reason_device_admin" msgid="3452168247888906179">"ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਡੀਵਾਈਸ ਨੂੰ ਲੌਕ ਕੀਤਾ ਗਿਆ"</string>
-    <string name="kg_prompt_reason_user_request" msgid="8236951765212462286">"ਡੀਵਾਈਸ ਨੂੰ ਹੱਥੀਂ ਲੌਕ ਕੀਤਾ ਗਿਆ"</string>
+    <string name="kg_prompt_reason_device_admin" msgid="3452168247888906179">"ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਡੀਵਾਈਸ ਨੂੰ ਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
+    <string name="kg_prompt_reason_user_request" msgid="8236951765212462286">"ਡੀਵਾਈਸ ਨੂੰ ਹੱਥੀਂ ਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
     <plurals name="kg_prompt_reason_time_pattern" formatted="false" msgid="71299470072448533">
-      <item quantity="one">ਡੀਵਾਈਸ <xliff:g id="NUMBER_1">%d</xliff:g> ਘੰਟੇ ਤੋਂ ਅਨਲੌਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। ਪੈਟਰਨ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ।</item>
-      <item quantity="other">ਡੀਵਾਈਸ <xliff:g id="NUMBER_1">%d</xliff:g> ਘੰਟਿਆਂ ਤੋਂ ਅਨਲੌਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। ਪੈਟਰਨ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ।</item>
+      <item quantity="one">ਡੀਵਾਈਸ <xliff:g id="NUMBER_1">%d</xliff:g> ਘੰਟੇ ਤੋਂ ਅਣਲਾਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। ਪੈਟਰਨ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ।</item>
+      <item quantity="other">ਡੀਵਾਈਸ <xliff:g id="NUMBER_1">%d</xliff:g> ਘੰਟਿਆਂ ਤੋਂ ਅਣਲਾਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। ਪੈਟਰਨ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ।</item>
     </plurals>
     <plurals name="kg_prompt_reason_time_pin" formatted="false" msgid="34586942088144385">
-      <item quantity="one">ਡੀਵਾਈਸ <xliff:g id="NUMBER_1">%d</xliff:g> ਘੰਟੇ ਤੋਂ ਅਨਲੌਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। ਪਿੰਨ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ।</item>
-      <item quantity="other">ਡੀਵਾਈਸ <xliff:g id="NUMBER_1">%d</xliff:g> ਘੰਟਿਆਂ ਤੋਂ ਅਨਲੌਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। ਪਿੰਨ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ।</item>
+      <item quantity="one">ਡੀਵਾਈਸ <xliff:g id="NUMBER_1">%d</xliff:g> ਘੰਟੇ ਤੋਂ ਅਣਲਾਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। ਪਿੰਨ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ।</item>
+      <item quantity="other">ਡੀਵਾਈਸ <xliff:g id="NUMBER_1">%d</xliff:g> ਘੰਟਿਆਂ ਤੋਂ ਅਣਲਾਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। ਪਿੰਨ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ।</item>
     </plurals>
     <plurals name="kg_prompt_reason_time_password" formatted="false" msgid="257297696215346527">
-      <item quantity="one">ਡੀਵਾਈਸ <xliff:g id="NUMBER_1">%d</xliff:g> ਘੰਟੇ ਤੋਂ ਅਨਲੌਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। ਪਾਸਵਰਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ</item>
-      <item quantity="other">ਡੀਵਾਈਸ <xliff:g id="NUMBER_1">%d</xliff:g> ਘੰਟਿਆਂ ਤੋਂ ਅਨਲੌਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। ਪਾਸਵਰਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ</item>
+      <item quantity="one">ਡੀਵਾਈਸ <xliff:g id="NUMBER_1">%d</xliff:g> ਘੰਟੇ ਤੋਂ ਅਣਲਾਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। ਪਾਸਵਰਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ</item>
+      <item quantity="other">ਡੀਵਾਈਸ <xliff:g id="NUMBER_1">%d</xliff:g> ਘੰਟਿਆਂ ਤੋਂ ਅਣਲਾਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। ਪਾਸਵਰਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ</item>
     </plurals>
     <string name="fingerprint_not_recognized" msgid="348813995267914625">"ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
index 6bdf2d9..d2d4a10 100644
--- a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
@@ -93,13 +93,13 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="8364140853305528449">"Desenhou a sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem êxito, ser-lhe-á pedido para desbloquear o telemóvel através de uma conta de email.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="3389829202093674267">"Código PIN do cartão SIM incorreto. Tem de contactar o seu operador para desbloquear o dispositivo."</string>
     <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="4314341367727055967">
-      <item quantity="one">Código PIN do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_0">%d</xliff:g> tentativa antes de precisar de contactar o seu operador para desbloquear o dispositivo.</item>
       <item quantity="other">Código PIN do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas.</item>
+      <item quantity="one">Código PIN do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_0">%d</xliff:g> tentativa antes de precisar de contactar o seu operador para desbloquear o dispositivo.</item>
     </plurals>
     <string name="kg_password_wrong_puk_code_dead" msgid="3329017604125179374">"Cartão SIM inutilizável. Contacte o seu operador."</string>
     <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="2287504898931957513">
-      <item quantity="one">Código PUK do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_0">%d</xliff:g> tentativa antes de o cartão SIM ficar permanentemente inutilizável.</item>
       <item quantity="other">Código PUK do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas antes de o cartão SIM ficar permanentemente inutilizável.</item>
+      <item quantity="one">Código PUK do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_0">%d</xliff:g> tentativa antes de o cartão SIM ficar permanentemente inutilizável.</item>
     </plurals>
     <string name="kg_password_pin_failed" msgid="8769990811451236223">"Falha ao introduzir o PIN do cartão SIM!"</string>
     <string name="kg_password_puk_failed" msgid="1331621440873439974">"Falha ao introduzir o PUK do cartão SIM!"</string>
@@ -116,19 +116,19 @@
     <string name="kg_prompt_reason_switch_profiles_pattern" msgid="3398054847288438444">"É necessário um padrão quando muda de perfil"</string>
     <string name="kg_prompt_reason_switch_profiles_pin" msgid="7426368139226961699">"É necessário um PIN quando muda de perfil"</string>
     <string name="kg_prompt_reason_switch_profiles_password" msgid="8383831046318421845">"É necessária uma palavra-passe quando muda de perfil"</string>
-    <string name="kg_prompt_reason_device_admin" msgid="3452168247888906179">"Dispositivo bloqueado pelo administrador"</string>
+    <string name="kg_prompt_reason_device_admin" msgid="3452168247888906179">"Dispositivo bloqueado pelo gestor"</string>
     <string name="kg_prompt_reason_user_request" msgid="8236951765212462286">"O dispositivo foi bloqueado manualmente"</string>
     <plurals name="kg_prompt_reason_time_pattern" formatted="false" msgid="71299470072448533">
-      <item quantity="one">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_0">%d</xliff:g> hora. Confirme o padrão.</item>
       <item quantity="other">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_1">%d</xliff:g> horas. Confirme o padrão.</item>
+      <item quantity="one">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_0">%d</xliff:g> hora. Confirme o padrão.</item>
     </plurals>
     <plurals name="kg_prompt_reason_time_pin" formatted="false" msgid="34586942088144385">
-      <item quantity="one">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_0">%d</xliff:g> hora. Confirme o PIN.</item>
       <item quantity="other">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_1">%d</xliff:g> horas. Confirme o PIN.</item>
+      <item quantity="one">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_0">%d</xliff:g> hora. Confirme o PIN.</item>
     </plurals>
     <plurals name="kg_prompt_reason_time_password" formatted="false" msgid="257297696215346527">
-      <item quantity="one">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_0">%d</xliff:g> hora. Confirme a palavra-passe.</item>
       <item quantity="other">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_1">%d</xliff:g> horas. Confirme a palavra-passe.</item>
+      <item quantity="one">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_0">%d</xliff:g> hora. Confirme a palavra-passe.</item>
     </plurals>
     <string name="fingerprint_not_recognized" msgid="348813995267914625">"Não reconhecido"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-sw320dp/dimens.xml b/packages/SystemUI/res-keyguard/values-sw320dp/dimens.xml
index 2c209e2..38d2ecc3 100644
--- a/packages/SystemUI/res-keyguard/values-sw320dp/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values-sw320dp/dimens.xml
@@ -19,7 +19,8 @@
 -->
 <resources>
 
-    <!-- Height of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) -->
+    <!-- Height of the sliding KeyguardSecurityContainer
+         (includes 2x keyguard_security_view_top_margin) -->
     <dimen name="keyguard_security_height">345dp</dimen>
 
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-sw360dp/dimens.xml b/packages/SystemUI/res-keyguard/values-sw360dp/dimens.xml
index 38658ca..90c4795 100644
--- a/packages/SystemUI/res-keyguard/values-sw360dp/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values-sw360dp/dimens.xml
@@ -20,6 +20,6 @@
 <resources>
 
     <!-- Height of the sliding KeyguardSecurityContainer (includes 2x
-         keyguard_security_view_margin) -->
+         keyguard_security_view_top_margin) -->
     <dimen name="keyguard_security_height">400dp</dimen>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-sw380dp/dimens.xml b/packages/SystemUI/res-keyguard/values-sw380dp/dimens.xml
deleted file mode 100644
index fc0e85d..0000000
--- a/packages/SystemUI/res-keyguard/values-sw380dp/dimens.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<resources>
-    <!-- Width of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) -->
-    <dimen name="keyguard_security_width">340dp</dimen>
-</resources>
\ No newline at end of file
diff --git a/packages/SystemUI/res-keyguard/values-sw540dp-port/dimens.xml b/packages/SystemUI/res-keyguard/values-sw540dp-port/dimens.xml
index de3106f..9ea04dc 100644
--- a/packages/SystemUI/res-keyguard/values-sw540dp-port/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values-sw540dp-port/dimens.xml
@@ -19,6 +19,6 @@
 -->
 <resources>
     <!-- Height of the sliding KeyguardSecurityContainer
-        (includes 2x keyguard_security_view_margin) -->
+        (includes 2x keyguard_security_view_top_margin) -->
     <dimen name="keyguard_security_height">500dp</dimen>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-sw600dp/dimens.xml b/packages/SystemUI/res-keyguard/values-sw600dp/dimens.xml
index 9e788be..4ae7cb9 100644
--- a/packages/SystemUI/res-keyguard/values-sw600dp/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values-sw600dp/dimens.xml
@@ -23,7 +23,7 @@
     <dimen name="kg_status_line_font_size">16sp</dimen>
 
     <!-- Margin around the various security views -->
-    <dimen name="keyguard_security_view_margin">12dp</dimen>
+    <dimen name="keyguard_security_view_top_margin">12dp</dimen>
 
     <!-- Overload default clock widget parameters -->
     <dimen name="widget_big_font_size">100dp</dimen>
diff --git a/packages/SystemUI/res-keyguard/values-sw720dp/dimens.xml b/packages/SystemUI/res-keyguard/values-sw720dp/dimens.xml
index 7eb63d7..9157822 100644
--- a/packages/SystemUI/res-keyguard/values-sw720dp/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values-sw720dp/dimens.xml
@@ -18,10 +18,8 @@
 -->
 <resources>
 
-    <!-- Width of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) -->
-    <dimen name="keyguard_security_width">420dp</dimen>
-
-    <!-- Height of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) -->
+    <!-- Height of the sliding KeyguardSecurityContainer
+         (includes 2x keyguard_security_view_top_margin) -->
     <dimen name="keyguard_security_height">420dp</dimen>
 
     <dimen name="widget_big_font_size">100dp</dimen>
diff --git a/packages/SystemUI/res-keyguard/values-ta/strings.xml b/packages/SystemUI/res-keyguard/values-ta/strings.xml
index 5f2db2c..9820173 100644
--- a/packages/SystemUI/res-keyguard/values-ta/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ta/strings.xml
@@ -30,7 +30,7 @@
     <string name="keyguard_password_enter_pin_password_code" msgid="7504123374204446086">"திறக்க, பின்னை உள்ளிடவும்"</string>
     <string name="keyguard_password_wrong_pin_code" msgid="6535018036285012028">"தவறான பின் குறியீடு."</string>
     <string name="keyguard_charged" msgid="2222329688813033109">"சார்ஜ் செய்யப்பட்டது"</string>
-    <string name="keyguard_plugged_in" msgid="89308975354638682">"சார்ஜாகிறது"</string>
+    <string name="keyguard_plugged_in" msgid="89308975354638682">"சார்ஜ் ஆகிறது"</string>
     <string name="keyguard_plugged_in_charging_fast" msgid="8869226755413795173">"வேகமாகச் சார்ஜாகிறது"</string>
     <string name="keyguard_plugged_in_charging_slowly" msgid="6637043106038550407">"மெதுவாகச் சார்ஜாகிறது"</string>
     <string name="keyguard_low_battery" msgid="9218432555787624490">"சார்ஜரை இணைக்கவும்."</string>
diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml
index e2d3af2..2282366 100644
--- a/packages/SystemUI/res-keyguard/values-te/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-te/strings.xml
@@ -49,7 +49,7 @@
     <string name="keyguard_accessibility_pin_area" msgid="703175752097279029">"పిన్ ప్రాంతం"</string>
     <string name="keyguard_accessibility_sim_pin_area" msgid="912702510825058921">"SIM పిన్ ప్రాంతం"</string>
     <string name="keyguard_accessibility_sim_puk_area" msgid="136979425761438705">"SIM PUK ప్రాంతం"</string>
-    <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"తదుపరి అలారం <xliff:g id="ALARM">%1$s</xliff:g>కి సెట్ చేయబడింది"</string>
+    <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"తర్వాత అలారం <xliff:g id="ALARM">%1$s</xliff:g>కి సెట్ చేయబడింది"</string>
     <string name="keyboardview_keycode_delete" msgid="6883116827512721630">"తొలగించు"</string>
     <string name="disable_carrier_button_text" msgid="6914341927421916114">"eSIMని నిలిపివేయండి"</string>
     <string name="keyboardview_keycode_enter" msgid="4505833604411016668">"Enter"</string>
diff --git a/packages/SystemUI/res-keyguard/values/dimens.xml b/packages/SystemUI/res-keyguard/values/dimens.xml
index a721dd0..bcac072 100644
--- a/packages/SystemUI/res-keyguard/values/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values/dimens.xml
@@ -22,17 +22,20 @@
     <!-- Size of the generic status lines keyguard's status view  -->
     <dimen name="kg_status_line_font_size">14sp</dimen>
 
-    <!-- Width of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) -->
-    <dimen name="keyguard_security_width">320dp</dimen>
+    <!-- Maximum width of the sliding KeyguardSecurityContainer -->
+    <dimen name="keyguard_security_width">420dp</dimen>
 
-    <!-- Height of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) -->
+    <!-- Height of the sliding KeyguardSecurityContainer
+         (includes 2x keyguard_security_view_top_margin) -->
     <dimen name="keyguard_security_height">400dp</dimen>
 
-    <!-- Max Height of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) -->
+    <!-- Max Height of the sliding KeyguardSecurityContainer
+         (includes 2x keyguard_security_view_top_margin) -->
     <dimen name="keyguard_security_max_height">450dp</dimen>
 
     <!-- Margin around the various security views -->
-    <dimen name="keyguard_security_view_margin">8dp</dimen>
+    <dimen name="keyguard_security_view_top_margin">8dp</dimen>
+    <dimen name="keyguard_security_view_lateral_margin">36dp</dimen>
 
     <!-- EmergencyCarrierArea overlap - amount to overlap the emergency button and carrier text.
          Should be 0 on devices with plenty of room (e.g. tablets) -->
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_left_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_left_animation.xml
new file mode 100644
index 0000000..d6054c4
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_disable_left_animation.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <objectAnimator
+        android:duration="250"
+        android:propertyName="scaleX"
+        android:valueFrom="1.0"
+        android:valueTo="1.8"
+        android:valueType="floatType"
+        android:interpolator="@android:interpolator/linear" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_mask_1_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_mask_1_animation.xml
new file mode 100644
index 0000000..282170c
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_disable_mask_1_animation.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="83"
+            android:propertyName="pathData"
+            android:valueFrom="M 366.5,-269.5 c 0.0,0.0 -578.0,2.0 -578.0,2.0 c 0.0,0.0 65.7498321533,68.2501220703 65.7498321533,68.2501220703 c 0.0,0.0 -20.7500457764,20.7500610352 -20.7500457764,20.7500610352 c 0.0,0.0 -65.749786377,-68.2501983643 -65.749786377,-68.2501983643 c 0.0,0.0 -7.25,539.250015259 -7.25,539.250015259 c 0.0,0.0 606.0,0.0 606.0,0.0 c 0.0,0.0 0.0,-562.0 0.0,-562.0 Z"
+            android:valueTo="M 366.5,-269.5 c 0.0,0.0 -578.0,2.0 -578.0,2.0 c 0.0,0.0 65.7498321533,68.2501220703 65.7498321533,68.2501220703 c 0.0,0.0 -20.7500457764,20.7500610352 -20.7500457764,20.7500610352 c 0.0,0.0 -65.749786377,-68.2501983643 -65.749786377,-68.2501983643 c 0.0,0.0 -7.25,539.250015259 -7.25,539.250015259 c 0.0,0.0 606.0,0.0 606.0,0.0 c 0.0,0.0 0.0,-562.0 0.0,-562.0 Z"
+            android:valueType="pathType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="250"
+            android:propertyName="pathData"
+            android:valueFrom="M 366.5,-269.5 c 0.0,0.0 -578.0,2.0 -578.0,2.0 c 0.0,0.0 65.7498321533,68.2501220703 65.7498321533,68.2501220703 c 0.0,0.0 -20.7500457764,20.7500610352 -20.7500457764,20.7500610352 c 0.0,0.0 -65.749786377,-68.2501983643 -65.749786377,-68.2501983643 c 0.0,0.0 -7.25,539.250015259 -7.25,539.250015259 c 0.0,0.0 606.0,0.0 606.0,0.0 c 0.0,0.0 0.0,-562.0 0.0,-562.0 Z"
+            android:valueTo="M 366.5,-269.5 c 0.0,0.0 -578.0,2.0 -578.0,2.0 c 0.0,0.0 480.0,480.0 480.0,480.0 c 0.0,0.0 -20.7500915527,20.75 -20.7500915527,20.75 c 0.0,0.0 -479.999908447,-480.000015259 -479.999908447,-480.000015259 c 0.0,0.0 -7.25,539.250015259 -7.25,539.250015259 c 0.0,0.0 606.0,0.0 606.0,0.0 c 0.0,0.0 0.0,-562.0 0.0,-562.0 Z"
+            android:valueType="pathType"
+            android:interpolator="@interpolator/ic_signal_workmode_disable_animation_interpolator_2" />
+    </set>
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_rectangle_path_3_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_rectangle_path_3_animation.xml
new file mode 100644
index 0000000..b59c664
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_disable_rectangle_path_3_animation.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="133"
+            android:propertyName="pathData"
+            android:valueFrom="M -143.0,-40.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,16.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-16.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueTo="M -143.0,-40.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,16.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-16.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueType="pathType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="116"
+            android:propertyName="pathData"
+            android:valueFrom="M -143.0,-40.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,16.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-16.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueTo="M -143.0,-65.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,66.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-66.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueType="pathType"
+            android:interpolator="@android:interpolator/linear" />
+    </set>
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_rectangle_path_3_position_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_rectangle_path_3_position_animation.xml
new file mode 100644
index 0000000..60d2396
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_disable_rectangle_path_3_position_animation.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <objectAnimator
+        android:duration="250"
+        android:propertyXName="translateX"
+        android:propertyYName="translateY"
+        android:pathData="M 0.0,0.0 c 0.0,4.16667 0.0,20.83333 0.0,25.0"
+        android:interpolator="@interpolator/ic_signal_workmode_disable_animation_interpolator_1" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_rectangle_path_4_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_rectangle_path_4_animation.xml
new file mode 100644
index 0000000..ef442e9
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_disable_rectangle_path_4_animation.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="33"
+            android:propertyName="pathData"
+            android:valueFrom="M -143.0,-40.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,16.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-16.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueTo="M -143.0,-40.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,16.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-16.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueType="pathType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="200"
+            android:propertyName="pathData"
+            android:valueFrom="M -143.0,-40.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,16.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-16.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueTo="M -143.0,-65.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,66.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-66.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueType="pathType"
+            android:interpolator="@android:interpolator/linear" />
+    </set>
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_rectangle_path_4_position_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_rectangle_path_4_position_animation.xml
new file mode 100644
index 0000000..97782be
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_disable_rectangle_path_4_position_animation.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <objectAnimator
+        android:duration="233"
+        android:propertyXName="translateX"
+        android:propertyYName="translateY"
+        android:pathData="M 0.0,0.0 c 0.0,-4.16667 0.0,-20.83333 0.0,-25.0"
+        android:interpolator="@interpolator/ic_signal_workmode_disable_animation_interpolator_0" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_right_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_right_animation.xml
new file mode 100644
index 0000000..d6054c4
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_disable_right_animation.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <objectAnimator
+        android:duration="250"
+        android:propertyName="scaleX"
+        android:valueFrom="1.0"
+        android:valueTo="1.8"
+        android:valueType="floatType"
+        android:interpolator="@android:interpolator/linear" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_stick_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_stick_animation.xml
new file mode 100644
index 0000000..573205f
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_disable_stick_animation.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <objectAnimator
+        android:duration="250"
+        android:propertyName="scaleY"
+        android:valueFrom="0.0"
+        android:valueTo="1.0"
+        android:valueType="floatType"
+        android:interpolator="@interpolator/ic_signal_workmode_disable_animation_interpolator_3" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_stickito_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_stickito_animation.xml
new file mode 100644
index 0000000..4b038b9
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_disable_stickito_animation.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <objectAnimator
+        android:duration="333"
+        android:propertyName="alpha"
+        android:valueFrom="1.0"
+        android:valueTo="0.54"
+        android:valueType="floatType"
+        android:interpolator="@interpolator/ic_signal_workmode_disable_animation_interpolator_4" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_whole_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_whole_animation.xml
new file mode 100644
index 0000000..562985a8
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_disable_whole_animation.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="83"
+            android:propertyName="scaleX"
+            android:valueFrom="1.0"
+            android:valueTo="1.15667"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_signal_workmode_disable_animation_interpolator_5" />
+        <objectAnimator
+            android:duration="166"
+            android:propertyName="scaleX"
+            android:valueFrom="1.15667"
+            android:valueTo="0.0"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_signal_workmode_disable_animation_interpolator_5" />
+    </set>
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="83"
+            android:propertyName="scaleY"
+            android:valueFrom="1.0"
+            android:valueTo="1.15667"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_signal_workmode_disable_animation_interpolator_5" />
+        <objectAnimator
+            android:duration="166"
+            android:propertyName="scaleY"
+            android:valueFrom="1.15667"
+            android:valueTo="0.0"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_signal_workmode_disable_animation_interpolator_5" />
+    </set>
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_cross_1.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_cross_1.xml
new file mode 100644
index 0000000..6c7e751
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_cross_1.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2015 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android" >
+    <objectAnimator
+        android:duration="350"
+        android:propertyName="pathData"
+        android:valueFrom="M 7.54049682617,3.9430847168 c 0.0,0.0 31.5749816895,31.4499664307 31.5749816895,31.4499664307 "
+        android:valueTo="M 7.54049682617,3.9430847168 c 0.0,0.0 0.324981689453,0.399978637695 0.324981689453,0.399978637695 "
+        android:valueType="pathType"
+        android:interpolator="@interpolator/ic_signal_workmode_enable_cross_1_pathdata_interpolator" />
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="333"
+            android:propertyName="strokeAlpha"
+            android:valueFrom="1"
+            android:valueTo="1"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="17"
+            android:propertyName="strokeAlpha"
+            android:valueFrom="1"
+            android:valueTo="0"
+            android:interpolator="@android:interpolator/linear" />
+    </set>
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_ic_signal_briefcase.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_ic_signal_briefcase.xml
new file mode 100644
index 0000000..c699fe2
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_ic_signal_briefcase.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2015 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android" >
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="200"
+            android:propertyName="alpha"
+            android:valueFrom="0.5"
+            android:valueTo="0.5"
+            android:interpolator="@android:interpolator/fast_out_slow_in" />
+        <objectAnimator
+            android:duration="350"
+            android:propertyName="alpha"
+            android:valueFrom="0.5"
+            android:valueTo="1"
+            android:interpolator="@android:interpolator/fast_out_slow_in" />
+    </set>
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_mask.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_mask.xml
new file mode 100644
index 0000000..5595e5c
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_mask.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2015 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android" >
+    <objectAnimator
+        android:duration="350"
+        android:propertyName="pathData"
+        android:valueFrom="M 37.8337860107,-40.3974914551 c 0.0,0.0 -35.8077850342,31.5523681641 -35.8077850342,31.5523681641 c 0.0,0.0 40.9884796143,40.9278411865 40.9884796143,40.9278411865 c 0.0,0.0 -2.61700439453,2.0938873291 -2.61700439453,2.0938873291 c 0.0,0.0 -41.1884460449,-40.9392852783 -41.1884460449,-40.9392852783 c 0.0,0.0 -34.6200408936,25.4699249268 -34.6200408936,25.4699249268 c 0.0,0.0 55.9664764404,69.742401123 55.9664764404,69.742401123 c 0.0,0.0 73.2448120117,-59.1047973633 73.2448120117,-59.1047973633 c 0.0,0.0 -55.9664916992,-69.7423400879 -55.9664916992,-69.7423400879 Z"
+        android:valueTo="M 37.8337860107,-40.4599914551 c 0.0,0.0 -35.8077850342,31.5523681641 -35.8077850342,31.5523681641 c 0.0,0.0 9.55097961426,9.55285644531 9.55097961426,9.55285644531 c 0.0,0.0 -2.61698913574,2.09387207031 -2.61698913574,2.09387207031 c 0.0,0.0 -9.75096130371,-9.56428527832 -9.75096130371,-9.56428527832 c 0.0,0.0 -34.6200408936,25.4699249268 -34.6200408936,25.4699249268 c 0.0,0.0 55.9664764404,69.742401123 55.9664764404,69.742401123 c 0.0,0.0 73.2448120117,-59.1047973633 73.2448120117,-59.1047973633 c 0.0,0.0 -55.9664916992,-69.7423400879 -55.9664916992,-69.7423400879 Z"
+        android:valueType="pathType"
+        android:interpolator="@interpolator/ic_signal_workmode_enable_mask_pathdata_interpolator" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_left_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_left_animation.xml
new file mode 100644
index 0000000..4614bfc
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_left_animation.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="83"
+            android:propertyName="scaleX"
+            android:valueFrom="1.8"
+            android:valueTo="1.8"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="250"
+            android:propertyName="scaleX"
+            android:valueFrom="1.8"
+            android:valueTo="1.0"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+    </set>
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_mask_1_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_mask_1_animation.xml
new file mode 100644
index 0000000..f5cfcf9
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_mask_1_animation.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <objectAnimator
+        android:duration="250"
+        android:propertyName="pathData"
+        android:valueFrom="M 366.5,-269.5 c 0.0,0.0 -578.0,2.0 -578.0,2.0 c 0.0,0.0 480.0,480.0 480.0,480.0 c 0.0,0.0 -20.7500915527,20.75 -20.7500915527,20.75 c 0.0,0.0 -479.999908447,-480.000015259 -479.999908447,-480.000015259 c 0.0,0.0 -7.25,539.250015259 -7.25,539.250015259 c 0.0,0.0 606.0,0.0 606.0,0.0 c 0.0,0.0 0.0,-562.0 0.0,-562.0 Z"
+        android:valueTo="M 366.5,-269.5 c 0.0,0.0 -578.0,2.0 -578.0,2.0 c 0.0,0.0 65.7498321533,68.2501220703 65.7498321533,68.2501220703 c 0.0,0.0 -20.7500457764,20.7500610352 -20.7500457764,20.7500610352 c 0.0,0.0 -65.749786377,-68.2501983643 -65.749786377,-68.2501983643 c 0.0,0.0 -7.25,539.250015259 -7.25,539.250015259 c 0.0,0.0 606.0,0.0 606.0,0.0 c 0.0,0.0 0.0,-562.0 0.0,-562.0 Z"
+        android:valueType="pathType"
+        android:interpolator="@interpolator/ic_signal_workmode_enable_animation_interpolator_1" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_rectangle_path_3_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_rectangle_path_3_animation.xml
new file mode 100644
index 0000000..0b74b3a
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_rectangle_path_3_animation.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="83"
+            android:propertyName="pathData"
+            android:valueFrom="M -143.0,-65.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,66.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-66.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueTo="M -143.0,-65.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,66.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-66.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueType="pathType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="133"
+            android:propertyName="pathData"
+            android:valueFrom="M -143.0,-65.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,66.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-66.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueTo="M -143.0,-40.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,16.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-16.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueType="pathType"
+            android:interpolator="@android:interpolator/linear" />
+    </set>
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_rectangle_path_3_position_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_rectangle_path_3_position_animation.xml
new file mode 100644
index 0000000..ba10224
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_rectangle_path_3_position_animation.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <objectAnimator
+        android:duration="216"
+        android:propertyXName="translateX"
+        android:propertyYName="translateY"
+        android:pathData="M 0.0,25.0 c 0.0,-4.16667 0.0,-20.83333 0.0,-25.0"
+        android:interpolator="@interpolator/ic_signal_workmode_enable_animation_interpolator_2" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_rectangle_path_4_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_rectangle_path_4_animation.xml
new file mode 100644
index 0000000..395bbf4
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_rectangle_path_4_animation.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="100"
+            android:propertyName="pathData"
+            android:valueFrom="M -143.0,-65.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,66.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-66.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueTo="M -143.0,-65.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,66.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-66.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueType="pathType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="199"
+            android:propertyName="pathData"
+            android:valueFrom="M -143.0,-65.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,66.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-66.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueTo="M -143.0,-40.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,16.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-16.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z"
+            android:valueType="pathType"
+            android:interpolator="@android:interpolator/linear" />
+    </set>
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_rectangle_path_4_position_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_rectangle_path_4_position_animation.xml
new file mode 100644
index 0000000..0115759
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_rectangle_path_4_position_animation.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <objectAnimator
+        android:duration="300"
+        android:propertyXName="translateX"
+        android:propertyYName="translateY"
+        android:pathData="M 0.0,-25.0 c 0.0,4.16667 0.0,20.83333 0.0,25.0"
+        android:interpolator="@interpolator/ic_signal_workmode_enable_animation_interpolator_4" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_right_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_right_animation.xml
new file mode 100644
index 0000000..4614bfc
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_right_animation.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="83"
+            android:propertyName="scaleX"
+            android:valueFrom="1.8"
+            android:valueTo="1.8"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="250"
+            android:propertyName="scaleX"
+            android:valueFrom="1.8"
+            android:valueTo="1.0"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+    </set>
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_stick_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_stick_animation.xml
new file mode 100644
index 0000000..6b182be
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_stick_animation.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="83"
+            android:propertyName="scaleY"
+            android:valueFrom="1.0"
+            android:valueTo="1.0"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="250"
+            android:propertyName="scaleY"
+            android:valueFrom="1.0"
+            android:valueTo="0.0"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/fast_out_slow_in" />
+    </set>
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_stickito_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_stickito_animation.xml
new file mode 100644
index 0000000..828f7a2
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_stickito_animation.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <objectAnimator
+        android:duration="333"
+        android:propertyName="alpha"
+        android:valueFrom="0.54"
+        android:valueTo="1.0"
+        android:valueType="floatType"
+        android:interpolator="@interpolator/ic_signal_workmode_enable_animation_interpolator_3" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_whole_animation.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_whole_animation.xml
new file mode 100644
index 0000000..89ab580
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_whole_animation.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="66"
+            android:propertyName="scaleX"
+            android:valueFrom="0.0"
+            android:valueTo="0.0"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="166"
+            android:propertyName="scaleX"
+            android:valueFrom="0.0"
+            android:valueTo="1.15667"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_signal_workmode_enable_animation_interpolator_5" />
+        <objectAnimator
+            android:duration="83"
+            android:propertyName="scaleX"
+            android:valueFrom="1.15667"
+            android:valueTo="1.0"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_signal_workmode_enable_animation_interpolator_0" />
+    </set>
+    <set
+        android:ordering="sequentially" >
+        <objectAnimator
+            android:duration="66"
+            android:propertyName="scaleY"
+            android:valueFrom="0.0"
+            android:valueTo="0.0"
+            android:valueType="floatType"
+            android:interpolator="@android:interpolator/linear" />
+        <objectAnimator
+            android:duration="166"
+            android:propertyName="scaleY"
+            android:valueFrom="0.0"
+            android:valueTo="1.15667"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_signal_workmode_enable_animation_interpolator_5" />
+        <objectAnimator
+            android:duration="83"
+            android:propertyName="scaleY"
+            android:valueFrom="1.15667"
+            android:valueTo="1.0"
+            android:valueType="floatType"
+            android:interpolator="@interpolator/ic_signal_workmode_enable_animation_interpolator_0" />
+    </set>
+</set>
diff --git a/packages/SystemUI/res/color/qs_background_dark.xml b/packages/SystemUI/res/color/qs_background_dark.xml
index 62e4959..c19fa08 100644
--- a/packages/SystemUI/res/color/qs_background_dark.xml
+++ b/packages/SystemUI/res/color/qs_background_dark.xml
@@ -15,6 +15,6 @@
 -->
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:alpha="0.93"
+    <item android:alpha="0.87"
           android:color="?android:attr/colorBackgroundFloating"/>
 </selector>
diff --git a/packages/SystemUI/res/color/qs_detail_progress_track.xml b/packages/SystemUI/res/color/qs_detail_progress_track.xml
index c56382e..d86119f 100644
--- a/packages/SystemUI/res/color/qs_detail_progress_track.xml
+++ b/packages/SystemUI/res/color/qs_detail_progress_track.xml
@@ -16,5 +16,5 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- I really don't want to define this, but the View that uses this asset uses both the
          light and dark accent colors. -->
-    <item android:alpha="0.6" android:drawable="@*android:color/accent_device_default_light" />
+    <item android:alpha="0.6" android:drawable="@*android:color/accent_device_default_dark" />
 </selector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_bluetooth_connected.xml b/packages/SystemUI/res/drawable/ic_qs_bluetooth_connected.xml
index 3eb81f8..b673e4f 100644
--- a/packages/SystemUI/res/drawable/ic_qs_bluetooth_connected.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_bluetooth_connected.xml
@@ -14,8 +14,8 @@
     limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="64dp"
-    android:height="64dp"
+    android:width="24dp"
+    android:height="24dp"
     android:viewportWidth="24.0"
     android:viewportHeight="24.0"
     android:tint="?android:attr/colorControlNormal" >
diff --git a/packages/SystemUI/res/drawable/ic_qs_no_sim.xml b/packages/SystemUI/res/drawable/ic_qs_no_sim.xml
index 69869fe..5dcd9f7 100644
--- a/packages/SystemUI/res/drawable/ic_qs_no_sim.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_no_sim.xml
@@ -1,5 +1,5 @@
 <!--
-Copyright (C) 2014 The Android Open Source Project
+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.
@@ -16,10 +16,14 @@
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="32dp"
         android:height="32dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
+        android:viewportWidth="18.4"
+        android:viewportHeight="18.4">
 
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M19.0,5.0c0.0,-1.1 -0.9,-2.0 -2.0,-2.0l-7.0,0.0L7.7,5.3L19.0,16.7L19.0,5.0zM3.7,3.9L2.4,5.2L5.0,7.8L5.0,19.0c0.0,1.1 0.9,2.0 2.0,2.0l10.0,0.0c0.4,0.0 0.7,-0.1 1.0,-0.3l1.9,1.9l1.3,-1.3L3.7,3.9z"/>
+    <group
+        android:translateX="0.7"
+        android:translateY="1.0">
+        <path
+            android:fillColor="#FFFFFFFF"
+            android:pathData="M13.91,11.84L5.14,3.08l1.81,-1.81h5.41c0.85,0 1.54,0.69 1.54,1.54l0.01,9.03zM15.06,14.95L2.54,2.44c-0.28,-0.28 -0.71,-0.28 -0.99,0s-0.28,0.71 0,0.98l1.53,1.53v8.67c0,0.85 0.69,1.54 1.54,1.54h7.74c0.27,0 0.52,-0.07 0.74,-0.2l0.96,0.96c0.28,0.28 0.71,0.28 0.99,0 0.28,-0.26 0.28,-0.69 0.01,-0.97z"/>
+    </group>
 </vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_3g.xml b/packages/SystemUI/res/drawable/ic_qs_signal_3g.xml
index c84ac8f..546a96f 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_3g.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_3g.xml
@@ -14,9 +14,9 @@
     limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="12dp"
+        android:width="15dp"
         android:height="24dp"
-        android:viewportWidth="12.0"
+        android:viewportWidth="15.0"
         android:viewportHeight="24.0"
         android:tint="?android:attr/colorControlNormal">
     <path
diff --git a/packages/SystemUI/res/drawable/ic_signal_workmode_disable.xml b/packages/SystemUI/res/drawable/ic_signal_workmode_disable.xml
index 1feb49c..96d8484 100644
--- a/packages/SystemUI/res/drawable/ic_signal_workmode_disable.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_workmode_disable.xml
@@ -1,63 +1,121 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:name="root"
-    android:alpha="1.0"
-    android:height="42dp"
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:name="ic_signal_workmode_disable"
     android:width="42dp"
-    android:viewportHeight="42"
-    android:viewportWidth="42" >
+    android:viewportWidth="42"
+    android:height="42dp"
+    android:viewportHeight="42" >
     <group
-        android:name="ic_signal_briefcase"
-        android:translateX="21.9995"
-        android:translateY="25.73401" >
+        android:name="suitcase"
+        android:translateX="21"
+        android:translateY="36.9375"
+        android:scaleX="0.1"
+        android:scaleY="0.1" >
         <group
-            android:name="ic_signal_briefcase_pivot"
-            android:translateX="-23.21545"
-            android:translateY="-18.86649" >
+            android:name="suitcase_pivot"
+            android:translateY="-158" >
             <clip-path
-                android:name="mask"
-                android:pathData="M 37.8337860107,-40.4599914551 c 0.0,0.0 -35.8077850342,31.5523681641 -35.8077850342,31.5523681641 c 0.0,0.0 9.55097961426,9.55285644531 9.55097961426,9.55285644531 c 0.0,0.0 -2.61698913574,2.09387207031 -2.61698913574,2.09387207031 c 0.0,0.0 -9.75096130371,-9.56428527832 -9.75096130371,-9.56428527832 c 0.0,0.0 -34.6200408936,25.4699249268 -34.6200408936,25.4699249268 c 0.0,0.0 55.9664764404,69.742401123 55.9664764404,69.742401123 c 0.0,0.0 73.2448120117,-59.1047973633 73.2448120117,-59.1047973633 c 0.0,0.0 -55.9664916992,-69.7423400879 -55.9664916992,-69.7423400879 Z" />
+                android:name="mask_1"
+                android:pathData="M 366.5,-269.5 c 0.0,0.0 -578.0,2.0 -578.0,2.0 c 0.0,0.0 65.7498321533,68.2501220703 65.7498321533,68.2501220703 c 0.0,0.0 -20.7500457764,20.7500610352 -20.7500457764,20.7500610352 c 0.0,0.0 -65.749786377,-68.2501983643 -65.749786377,-68.2501983643 c 0.0,0.0 -7.25,539.250015259 -7.25,539.250015259 c 0.0,0.0 606.0,0.0 606.0,0.0 c 0.0,0.0 0.0,-562.0 0.0,-562.0 Z" />
             <group
-                android:name="cross" >
+                android:name="whole"
+                android:translateX="-1.11523"
+                android:translateY="32.0918" >
                 <path
-                    android:name="cross_1"
-                    android:pathData="M 7.54049682617,3.9430847168 c 0.0,0.0 0.324981689453,0.399978637695 0.324981689453,0.399978637695 "
+                    android:name="rectangle_path_1"
                     android:strokeColor="#FFFFFFFF"
-                    android:strokeAlpha="0"
-                    android:strokeWidth="3.5"
-                    android:fillColor="#00000000" />
+                    android:strokeWidth="65"
+                    android:pathData="M 0.0,-66.5 l 0.0,0.0 c 36.7269358617,0.0 66.5,29.7730641383 66.5,66.5 l 0.0,0.0 c 0.0,36.7269358617 -29.7730641383,66.5 -66.5,66.5 l 0.0,0.0 c -36.7269358617,0.0 -66.5,-29.7730641383 -66.5,-66.5 l 0.0,0.0 c 0.0,-36.7269358617 29.7730641383,-66.5 66.5,-66.5 Z" />
             </group>
             <group
-                android:name="briefcase"
-                android:translateX="23.481"
-                android:translateY="18.71151" >
+                android:name="handle"
+                android:translateY="-100" >
                 <path
-                    android:fillColor="#FFFFFFFF"
-                    android:fillAlpha="1"
-                    android:pathData="M-4.83333,-14.3333 L-7.16667,-11.8333 L-7.16667,-9.5 L-4.83333,-9.5 L-4.83333,-11.8333 L4.83333,-11.8333 L4.83333,-9.5 L7.16667,-9.5 L7.16667,-11.8333 L4.83333,-14.3333 Z" />
-                <path
-                    android:fillColor="#FFFFFFFF"
-                    android:fillAlpha="1"
-                    android:pathData="M13.1667,-9.5 L-13.1667,-9.5 C-14.5,-9.5,-15.5,-8.5,-15.5,-7.16666 L-15.5,0.00000286102 C-15.5,1.33334,-14.5,2.33334,-13.1667,2.33334 L-3.66667,2.33334 L-3.66667,0.00000286102 L3.5,0.00000286102 L3.5,2.33334 L13,2.33334 C14.3333,2.33334,15.3333,1.33334,15.3333,0 L15.3333,-7.16666 C15.5,-8.5,14.3333,-9.5,13.1667,-9.5 Z" />
-                <path
-                    android:fillColor="#FFFFFFFF"
-                    android:fillAlpha="1"
-                    android:pathData="M-3.5,7.16667 L-3.5,4.83334 L-14.3333,4.83334 L-14.3333,10.8333 C-14.3333,12.1667,-13.3333,13.1667,-12,13.1667 L11.8333,13.1667 C13.1667,13.1667,14.1667,12.1667,14.1667,10.8333 L14.1667,4.83334 L3.5,4.83334 L3.5,7.16667 L-3.5,7.16667 Z" />
+                    android:name="rectangle_path_2"
+                    android:strokeColor="#FFFFFFFF"
+                    android:strokeWidth="35"
+                    android:pathData="M -34.0,-50.0 l 68.0,0.0 c 8.8365559968,0.0 16.0,7.1634440032 16.0,16.0 l 0.0,68.0 c 0.0,8.8365559968 -7.1634440032,16.0 -16.0,16.0 l -68.0,0.0 c -8.8365559968,0.0 -16.0,-7.1634440032 -16.0,-16.0 l 0.0,-68.0 c 0.0,-8.8365559968 7.1634440032,-16.0 16.0,-16.0 Z" />
+            </group>
+            <group
+                android:name="case"
+                android:translateY="32.68518" >
+                <group
+                    android:name="case_pivot"
+                    android:translateY="-32.68518" >
+                    <group
+                        android:name="bottom"
+                        android:translateY="-97.62964" >
+                        <group
+                            android:name="bottom_pivot"
+                            android:translateY="40" >
+                            <group
+                                android:name="rectangle_path_3_position" >
+                                <path
+                                    android:name="rectangle_path_3"
+                                    android:fillColor="#FFFFFFFF"
+                                    android:pathData="M -143.0,-40.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,16.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-16.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z" />
+                            </group>
+                        </group>
+                    </group>
+                    <group
+                        android:name="top"
+                        android:translateY="163" >
+                        <group
+                            android:name="top_pivot"
+                            android:translateY="-40" >
+                            <group
+                                android:name="rectangle_path_4_position" >
+                                <path
+                                    android:name="rectangle_path_4"
+                                    android:fillColor="#FFFFFFFF"
+                                    android:pathData="M -143.0,-40.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,16.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-16.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z" />
+                            </group>
+                        </group>
+                    </group>
+                    <group
+                        android:name="left"
+                        android:translateX="-175.00635"
+                        android:translateY="30" >
+                        <group
+                            android:name="left_pivot"
+                            android:translateX="50.00635" >
+                            <path
+                                android:name="rectangle_path_5"
+                                android:fillColor="#FFFFFFFF"
+                                android:pathData="M -50.0,-88.0 l 100.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,176.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l -100.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,-176.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z" />
+                        </group>
+                    </group>
+                    <group
+                        android:name="right"
+                        android:translateX="174.97778"
+                        android:translateY="30" >
+                        <group
+                            android:name="right_pivot"
+                            android:translateX="-49.97778" >
+                            <path
+                                android:name="rectangle_path_6"
+                                android:fillColor="#FFFFFFFF"
+                                android:pathData="M -50.0,-88.0 l 100.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,176.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l -100.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,-176.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z" />
+                        </group>
+                    </group>
+                </group>
+            </group>
+            <group
+                android:name="stick"
+                android:translateX="-166.59082"
+                android:translateY="-156.51367"
+                android:scaleY="0"
+                android:rotation="-45" >
+                <group
+                    android:name="stick_pivot"
+                    android:translateX="0.18161"
+                    android:translateY="243.8158" >
+                    <path
+                        android:name="stickito"
+                        android:fillColor="#FFFFFFFF"
+                        android:pathData="M -16.5,-243.999885 l 33.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,487.99977 c 0.0,0.0 0.0,0.0 0.0,0.0 l -33.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,-487.99977 c 0.0,0.0 0.0,0.0 0.0,0.0 Z" />
+                </group>
             </group>
         </group>
     </group>
diff --git a/packages/SystemUI/res/drawable/ic_signal_workmode_disable_animation.xml b/packages/SystemUI/res/drawable/ic_signal_workmode_disable_animation.xml
new file mode 100644
index 0000000..4a2bd54
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_signal_workmode_disable_animation.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<animated-vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:drawable="@drawable/ic_signal_workmode_disable" >
+    <target
+        android:name="mask_1"
+        android:animation="@anim/ic_signal_workmode_disable_mask_1_animation" />
+    <target
+        android:name="whole"
+        android:animation="@anim/ic_signal_workmode_disable_whole_animation" />
+    <target
+        android:name="rectangle_path_3_position"
+        android:animation="@anim/ic_signal_workmode_disable_rectangle_path_3_position_animation" />
+    <target
+        android:name="rectangle_path_3"
+        android:animation="@anim/ic_signal_workmode_disable_rectangle_path_3_animation" />
+    <target
+        android:name="rectangle_path_4_position"
+        android:animation="@anim/ic_signal_workmode_disable_rectangle_path_4_position_animation" />
+    <target
+        android:name="rectangle_path_4"
+        android:animation="@anim/ic_signal_workmode_disable_rectangle_path_4_animation" />
+    <target
+        android:name="left"
+        android:animation="@anim/ic_signal_workmode_disable_left_animation" />
+    <target
+        android:name="right"
+        android:animation="@anim/ic_signal_workmode_disable_right_animation" />
+    <target
+        android:name="stick"
+        android:animation="@anim/ic_signal_workmode_disable_stick_animation" />
+    <target
+        android:name="ic_signal_workmode_disable"
+        android:animation="@anim/ic_signal_workmode_disable_stickito_animation" />
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/ic_signal_workmode_enable.xml b/packages/SystemUI/res/drawable/ic_signal_workmode_enable.xml
index f962594..2d4f0b5 100644
--- a/packages/SystemUI/res/drawable/ic_signal_workmode_enable.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_workmode_enable.xml
@@ -1,62 +1,127 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:name="root"
-    android:height="42dp"
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:name="ic_signal_workmode_enable"
     android:width="42dp"
-    android:viewportHeight="42"
-    android:viewportWidth="42" >
+    android:viewportWidth="42"
+    android:height="42dp"
+    android:viewportHeight="42" >
     <group
-        android:name="ic_signal_briefcase"
-        android:translateX="21.9995"
-        android:translateY="25.73401" >
+        android:name="suitcase"
+        android:translateX="21"
+        android:translateY="36.9375"
+        android:scaleX="0.1"
+        android:scaleY="0.1" >
         <group
-            android:name="ic_signal_briefcase_pivot"
-            android:translateX="-23.21545"
-            android:translateY="-18.86649" >
+            android:name="suitcase_pivot"
+            android:translateY="-158" >
             <clip-path
-                android:name="mask"
-                android:pathData="M 37.8337860107,-40.3974914551 c 0.0,0.0 -35.8077850342,31.5523681641 -35.8077850342,31.5523681641 c 0.0,0.0 40.9884796143,40.9278411865 40.9884796143,40.9278411865 c 0.0,0.0 -2.61700439453,2.0938873291 -2.61700439453,2.0938873291 c 0.0,0.0 -41.1884460449,-40.9392852783 -41.1884460449,-40.9392852783 c 0.0,0.0 -34.6200408936,25.4699249268 -34.6200408936,25.4699249268 c 0.0,0.0 55.9664764404,69.742401123 55.9664764404,69.742401123 c 0.0,0.0 73.2448120117,-59.1047973633 73.2448120117,-59.1047973633 c 0.0,0.0 -55.9664916992,-69.7423400879 -55.9664916992,-69.7423400879 Z" />
+                android:name="mask_1"
+                android:pathData="M 366.5,-269.5 c 0.0,0.0 -578.0,2.0 -578.0,2.0 c 0.0,0.0 480.0,480.0 480.0,480.0 c 0.0,0.0 -20.7500915527,20.75 -20.7500915527,20.75 c 0.0,0.0 -479.999908447,-480.000015259 -479.999908447,-480.000015259 c 0.0,0.0 -7.25,539.250015259 -7.25,539.250015259 c 0.0,0.0 606.0,0.0 606.0,0.0 c 0.0,0.0 0.0,-562.0 0.0,-562.0 Z" />
             <group
-                android:name="cross" >
+                android:name="whole"
+                android:translateX="-1.11523"
+                android:translateY="32.0918"
+                android:scaleX="0"
+                android:scaleY="0" >
                 <path
-                    android:name="cross_1"
-                    android:pathData="M 7.54049682617,3.9430847168 c 0.0,0.0 31.5749816895,31.4499664307 31.5749816895,31.4499664307 "
+                    android:name="rectangle_path_1"
                     android:strokeColor="#FFFFFFFF"
-                    android:strokeAlpha="1"
-                    android:strokeWidth="3.5"
-                    android:fillColor="#00000000" />
+                    android:strokeWidth="65"
+                    android:pathData="M 0.0,-66.5 l 0.0,0.0 c 36.7269358617,0.0 66.5,29.7730641383 66.5,66.5 l 0.0,0.0 c 0.0,36.7269358617 -29.7730641383,66.5 -66.5,66.5 l 0.0,0.0 c -36.7269358617,0.0 -66.5,-29.7730641383 -66.5,-66.5 l 0.0,0.0 c 0.0,-36.7269358617 29.7730641383,-66.5 66.5,-66.5 Z" />
             </group>
             <group
-                android:name="briefcase"
-                android:translateX="23.481"
-                android:translateY="18.71151" >
+                android:name="handle"
+                android:translateY="-100" >
                 <path
-                    android:fillColor="#FFFFFFFF"
-                    android:fillAlpha="1"
-                    android:pathData="M-4.83333,-14.3333 L-7.16667,-11.8333 L-7.16667,-9.5 L-4.83333,-9.5 L-4.83333,-11.8333 L4.83333,-11.8333 L4.83333,-9.5 L7.16667,-9.5 L7.16667,-11.8333 L4.83333,-14.3333 Z" />
-                <path
-                    android:fillColor="#FFFFFFFF"
-                    android:fillAlpha="1"
-                    android:pathData="M13.1667,-9.5 L-13.1667,-9.5 C-14.5,-9.5,-15.5,-8.5,-15.5,-7.16666 L-15.5,0.00000286102 C-15.5,1.33334,-14.5,2.33334,-13.1667,2.33334 L-3.66667,2.33334 L-3.66667,0.00000286102 L3.5,0.00000286102 L3.5,2.33334 L13,2.33334 C14.3333,2.33334,15.3333,1.33334,15.3333,0 L15.3333,-7.16666 C15.5,-8.5,14.3333,-9.5,13.1667,-9.5 Z" />
-                <path
-                    android:fillColor="#FFFFFFFF"
-                    android:fillAlpha="1"
-                    android:pathData="M-3.5,7.16667 L-3.5,4.83334 L-14.3333,4.83334 L-14.3333,10.8333 C-14.3333,12.1667,-13.3333,13.1667,-12,13.1667 L11.8333,13.1667 C13.1667,13.1667,14.1667,12.1667,14.1667,10.8333 L14.1667,4.83334 L3.5,4.83334 L3.5,7.16667 L-3.5,7.16667 Z" />
+                    android:name="rectangle_path_2"
+                    android:strokeColor="#FFFFFFFF"
+                    android:strokeWidth="35"
+                    android:pathData="M -34.0,-50.0 l 68.0,0.0 c 8.8365559968,0.0 16.0,7.1634440032 16.0,16.0 l 0.0,68.0 c 0.0,8.8365559968 -7.1634440032,16.0 -16.0,16.0 l -68.0,0.0 c -8.8365559968,0.0 -16.0,-7.1634440032 -16.0,-16.0 l 0.0,-68.0 c 0.0,-8.8365559968 7.1634440032,-16.0 16.0,-16.0 Z" />
+            </group>
+            <group
+                android:name="case"
+                android:translateY="32.68518" >
+                <group
+                    android:name="case_pivot"
+                    android:translateY="-32.68518" >
+                    <group
+                        android:name="bottom"
+                        android:translateY="-97.62964" >
+                        <group
+                            android:name="bottom_pivot"
+                            android:translateY="40" >
+                            <group
+                                android:name="rectangle_path_3_position"
+                                android:translateY="25" >
+                                <path
+                                    android:name="rectangle_path_3"
+                                    android:fillColor="#FFFFFFFF"
+                                    android:pathData="M -143.0,-65.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,66.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-66.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z" />
+                            </group>
+                        </group>
+                    </group>
+                    <group
+                        android:name="top"
+                        android:translateY="163" >
+                        <group
+                            android:name="top_pivot"
+                            android:translateY="-40" >
+                            <group
+                                android:name="rectangle_path_4_position"
+                                android:translateY="-25" >
+                                <path
+                                    android:name="rectangle_path_4"
+                                    android:fillColor="#FFFFFFFF"
+                                    android:pathData="M -143.0,-65.0 l 286.0,0.0 c 17.6731119936,0.0 32.0,14.3268880064 32.0,32.0 l 0.0,66.0 c 0.0,17.6731119936 -14.3268880064,32.0 -32.0,32.0 l -286.0,0.0 c -17.6731119936,0.0 -32.0,-14.3268880064 -32.0,-32.0 l 0.0,-66.0 c 0.0,-17.6731119936 14.3268880064,-32.0 32.0,-32.0 Z" />
+                            </group>
+                        </group>
+                    </group>
+                    <group
+                        android:name="left"
+                        android:translateX="-175.00635"
+                        android:translateY="30"
+                        android:scaleX="1.8" >
+                        <group
+                            android:name="left_pivot"
+                            android:translateX="50.00635" >
+                            <path
+                                android:name="rectangle_path_5"
+                                android:fillColor="#FFFFFFFF"
+                                android:pathData="M -50.0,-88.0 l 100.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,176.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l -100.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,-176.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z" />
+                        </group>
+                    </group>
+                    <group
+                        android:name="right"
+                        android:translateX="174.97778"
+                        android:translateY="30"
+                        android:scaleX="1.8" >
+                        <group
+                            android:name="right_pivot"
+                            android:translateX="-49.97778" >
+                            <path
+                                android:name="rectangle_path_6"
+                                android:fillColor="#FFFFFFFF"
+                                android:pathData="M -50.0,-88.0 l 100.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,176.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l -100.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,-176.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z" />
+                        </group>
+                    </group>
+                </group>
+            </group>
+            <group
+                android:name="stick"
+                android:translateX="-166.59082"
+                android:translateY="-156.51367"
+                android:rotation="-45" >
+                <group
+                    android:name="stick_pivot"
+                    android:translateX="0.18161"
+                    android:translateY="243.8158" >
+                    <path
+                        android:name="stickito"
+                        android:fillColor="#FFFFFFFF"
+                        android:fillAlpha="1"
+                        android:pathData="M -16.5,-243.999885 l 33.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,487.99977 c 0.0,0.0 0.0,0.0 0.0,0.0 l -33.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,-487.99977 c 0.0,0.0 0.0,0.0 0.0,0.0 Z" />
+                </group>
             </group>
         </group>
     </group>
diff --git a/packages/SystemUI/res/drawable/ic_signal_workmode_enable_animation.xml b/packages/SystemUI/res/drawable/ic_signal_workmode_enable_animation.xml
new file mode 100644
index 0000000..c98f800
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_signal_workmode_enable_animation.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<animated-vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:drawable="@drawable/ic_signal_workmode_enable" >
+    <target
+        android:name="mask_1"
+        android:animation="@anim/ic_signal_workmode_enable_mask_1_animation" />
+    <target
+        android:name="whole"
+        android:animation="@anim/ic_signal_workmode_enable_whole_animation" />
+    <target
+        android:name="rectangle_path_3_position"
+        android:animation="@anim/ic_signal_workmode_enable_rectangle_path_3_position_animation" />
+    <target
+        android:name="rectangle_path_3"
+        android:animation="@anim/ic_signal_workmode_enable_rectangle_path_3_animation" />
+    <target
+        android:name="rectangle_path_4_position"
+        android:animation="@anim/ic_signal_workmode_enable_rectangle_path_4_position_animation" />
+    <target
+        android:name="rectangle_path_4"
+        android:animation="@anim/ic_signal_workmode_enable_rectangle_path_4_animation" />
+    <target
+        android:name="left"
+        android:animation="@anim/ic_signal_workmode_enable_left_animation" />
+    <target
+        android:name="right"
+        android:animation="@anim/ic_signal_workmode_enable_right_animation" />
+    <target
+        android:name="stick"
+        android:animation="@anim/ic_signal_workmode_enable_stick_animation" />
+    <target
+        android:name="ic_signal_workmode_enable"
+        android:animation="@anim/ic_signal_workmode_enable_stickito_animation" />
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/recents_low_ram_stack_button_background.xml b/packages/SystemUI/res/drawable/recents_low_ram_stack_button_background.xml
new file mode 100644
index 0000000..bff97f6
--- /dev/null
+++ b/packages/SystemUI/res/drawable/recents_low_ram_stack_button_background.xml
@@ -0,0 +1,22 @@
+<!--
+  ~ 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.
+  -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android" >
+
+      <corners android:radius="@dimen/borderless_button_radius" />
+
+      <solid android:color="?attr/clearAllBackgroundColor" />
+
+</shape>
diff --git a/packages/SystemUI/res/drawable/stat_sys_managed_profile_disable_animation.xml b/packages/SystemUI/res/drawable/stat_sys_managed_profile_disable_animation.xml
deleted file mode 100644
index 1e41a31..0000000
--- a/packages/SystemUI/res/drawable/stat_sys_managed_profile_disable_animation.xml
+++ /dev/null
@@ -1,46 +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.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="27.0dp"
-        android:height="22.0dp"
-        android:viewportWidth="27.0"
-        android:viewportHeight="22.0">
-    <clip-path
-        android:name="mask"
-        android:pathData="M 38.8337860107,-40.3974914551 c 0.0,0.0 -35.8077850342,31.5523681641 -35.8077850342,31.5523681641 c 0.0,0.0 40.9884796143,41.1153411865 40.9884796143,41.1153411865 c 0.0,0.0 -2.61700439453,2.0938873291 -2.61700439453,2.0938873291 c 0.0,0.0 -41.1884460449,-41.1267852783 -41.1884460449,-41.1267852783 c 0.0,0.0 -34.6200408936,25.4699249268 -34.6200408936,25.4699249268 c 0.0,0.0 55.9664764404,69.742401123 55.9664764404,69.742401123 c 0.0,0.0 73.2448120117,-59.1047973633 73.2448120117,-59.1047973633 c 0.0,0.0 -55.9664916992,-69.7423400879 -55.9664916992,-69.7423400879 Z" />
-    <group
-        android:name="cross" >
-        <path
-            android:name="cross_1"
-            android:pathData="M 7.54049682617,3.9430847168 c 0.0,0.0 31.5749816895,31.4499664307 31.5749816895,31.4499664307 "
-            android:strokeColor="#FFFFFFFF"
-            android:strokeAlpha="1"
-            android:strokeWidth="3.5"
-            android:fillColor="#00000000" />
-    </group>
-    <group
-        android:name="work_badge"
-        android:translateX="3.0"
-        android:scaleX="1.4"
-        android:scaleY="1.4">
-        <path
-            android:fillColor="@android:color/white"
-            android:pathData="M9.9,11.6H7v-1.1H2.1v2.8c0,0.8,0.6,1.4,1.4,1.4h9.9c0.8,0,1.4,-0.6,1.4,-1.4v-2.8H9.9V11.6z"/>
-        <path
-            android:fillColor="@android:color/white"
-            android:pathData="M14.1,4.2h-2.5V3.2l-1.1,-1.1H6.3L5.3,3.2v1H2.8C2,4.2,1.4,4.9,1.4,5.6v2.8c0,0.8,0.6,1.4,1.4,1.4H7V8.8h2.8v1.1h4.2     c0.8,0,1.4,-0.6,1.4,-1.4V5.6C15.5,4.9,14.8,4.2,14.1,4.2z M10.6,4.2H6.3V3.2h4.2V4.2z"/>
-    </group>
-</vector>
diff --git a/packages/SystemUI/res/drawable/stat_sys_managed_profile_enable_animation.xml b/packages/SystemUI/res/drawable/stat_sys_managed_profile_enable_animation.xml
deleted file mode 100644
index d67c89ac..0000000
--- a/packages/SystemUI/res/drawable/stat_sys_managed_profile_enable_animation.xml
+++ /dev/null
@@ -1,34 +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.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="27.0dp"
-        android:height="22.0dp"
-        android:alpha="1.0"
-        android:viewportWidth="27.0"
-        android:viewportHeight="22.0">
-    <group
-        android:name="work_badge"
-        android:translateX="3.0"
-        android:scaleX="1.4"
-        android:scaleY="1.4">
-        <path
-            android:fillColor="@android:color/white"
-            android:pathData="M9.9,11.6H7v-1.1H2.1v2.8c0,0.8,0.6,1.4,1.4,1.4h9.9c0.8,0,1.4,-0.6,1.4,-1.4v-2.8H9.9V11.6z"/>
-        <path
-            android:fillColor="@android:color/white"
-            android:pathData="M14.1,4.2h-2.5V3.2l-1.1,-1.1H6.3L5.3,3.2v1H2.8C2,4.2,1.4,4.9,1.4,5.6v2.8c0,0.8,0.6,1.4,1.4,1.4H7V8.8h2.8v1.1h4.2     c0.8,0,1.4,-0.6,1.4,-1.4V5.6C15.5,4.9,14.8,4.2,14.1,4.2z M10.6,4.2H6.3V3.2h4.2V4.2z"/>
-    </group>
-</vector>
diff --git a/packages/SystemUI/res/drawable/stat_sys_managed_profile_status.xml b/packages/SystemUI/res/drawable/stat_sys_managed_profile_status.xml
index d73e2a4..e38b482 100644
--- a/packages/SystemUI/res/drawable/stat_sys_managed_profile_status.xml
+++ b/packages/SystemUI/res/drawable/stat_sys_managed_profile_status.xml
@@ -1,42 +1,12 @@
-<!--
-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.
--->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="23dp"
-    android:height="18dp"
-    android:viewportWidth="23"
-    android:viewportHeight="18">
-<!--
-    The asset contains a briefcase symbol of 15.26dp x 13.6dp in the center.
--->
+        android:width="23dp"
+        android:height="18dp"
+        android:viewportWidth="23.0"
+        android:viewportHeight="18.0">
+    <!--
+       The asset contains a briefcase symbol of 14.551dp x 13.824dp in the center.
+   -->
     <path
-        android:fillColor="#ff000000"
-        android:pathData="M15.0815,4.5903 L15.0815,3.43636 L13.9276,2.2 L9.14696,2.2 L7.99302,3.43636
-L7.99302,4.5903 L9.14696,4.5903 L9.14696,3.43636 L13.9276,3.43636
-L13.9276,4.5903 Z" />
-    <path
-        android:fillColor="#ff000000"
-        android:pathData="M18.0488,4.5903 L5.02575,4.5903 C4.36635,4.5903,3.87181,5.08485,3.87181,5.74424
-L3.87181,9.28848 C3.87181,9.94788,4.36635,10.4424,5.02575,10.4424
-L9.72393,10.4424 L9.72393,9.28848 L13.2682,9.28848 L13.2682,10.4424
-L17.9664,10.4424 C18.6257,10.4424,19.1203,9.94788,19.1203,9.28848
-L19.1203,5.74424 C19.2027,5.08485,18.6257,4.5903,18.0488,4.5903 Z" />
-    <path
-        android:fillColor="#ff000000"
-        android:pathData="M9.80635,12.8327 L9.80635,11.6788 L4.44878,11.6788 L4.44878,14.6461
-C4.44878,15.3055,4.94332,15.8,5.60272,15.8 L17.3894,15.8
-C18.0488,15.8,18.5433,15.3055,18.5433,14.6461 L18.5433,11.6788 L13.2682,11.6788
-L13.2682,12.8327 L9.80635,12.8327 Z" />
+        android:pathData="M17.32,5.06h-2.91V3.6c0,-0.81 -0.65,-1.46 -1.46,-1.46h-2.91c-0.81,0 -1.46,0.65 -1.46,1.46v1.46H5.68c-0.81,0 -1.45,0.65 -1.45,1.46l-0.01,8c0,0.81 0.65,1.46 1.46,1.46h11.64c0.81,0 1.46,-0.65 1.46,-1.46v-8C18.78,5.7 18.13,5.06 17.32,5.06zM11.5,11.6c-0.8,0 -1.46,-0.65 -1.46,-1.46c0,-0.8 0.65,-1.46 1.46,-1.46s1.46,0.65 1.46,1.46C12.96,10.95 12.3,11.6 11.5,11.6zM12.96,5.06h-2.91V3.6h2.91V5.06z"
+        android:fillColor="#FF000000"/>
 </vector>
diff --git a/packages/SystemUI/res/drawable/stat_sys_managed_profile_status_off.xml b/packages/SystemUI/res/drawable/stat_sys_managed_profile_status_off.xml
index 35602b6..1dedd5d 100644
--- a/packages/SystemUI/res/drawable/stat_sys_managed_profile_status_off.xml
+++ b/packages/SystemUI/res/drawable/stat_sys_managed_profile_status_off.xml
@@ -1,5 +1,5 @@
 <!--
-Copyright (C) 2015 The Android Open Source Project
+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.
@@ -14,40 +14,11 @@
     limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="23dp"
-    android:height="18dp"
-    android:viewportWidth="23"
-    android:viewportHeight="18">
-<!--
-    The asset contains a briefcase symbol of 15.26dp x 13.6dp in the center.
--->
-    <path
-        android:pathData="M0,-6 L24,-6 L24,18 L0,18 L0,-6 Z" />
+        android:width="23dp"
+        android:height="18dp"
+        android:viewportWidth="23.0"
+        android:viewportHeight="18.0">
     <path
         android:fillColor="@android:color/white"
-        android:pathData="M13.9892,11.6542 L13.4088,11.6542 L13.4088,12.8152 L9.843,12.8152 L9.843,11.6542
-L4.4529,11.6542 L4.4529,14.6395 C4.4529,15.3029,4.95045,15.8005,5.61384,15.8005
-L17.4721,15.8005 C17.6379,15.8005,17.8038,15.8005,17.9696,15.7175
-L13.9892,11.6542 Z" />
-    <path
-        android:fillColor="@android:color/white"
-        android:pathData="M18.7159,13.8932 L18.7159,11.6542 L16.477,11.6542
-C17.3062,12.4835,18.1355,13.3127,18.7159,13.8932 Z" />
-    <path
-        android:fillColor="@android:color/white"
-        android:pathData="M6.85771,4.52272 L5.03337,4.52272
-C4.36998,4.52272,3.87243,5.02027,3.87243,5.68366 L3.87243,9.24942
-C3.87243,9.91282,4.36998,10.4104,5.03337,10.4104 L9.76008,10.4104
-L9.76008,9.24942 L11.5844,9.24942 L6.85771,4.52272 Z" />
-    <path
-        android:fillColor="@android:color/white"
-        android:pathData="M9.1796,4.35687 L9.1796,3.36177 L13.9063,3.36177 L13.9063,4.52272
-L9.34545,4.52272 C11.1698,6.34706,13.3258,8.5031,15.2331,10.4104
-L18.0525,10.4104 C18.7159,10.4104,19.2135,9.91282,19.2135,9.24942
-L19.2135,5.68366 C19.2135,5.02027,18.7159,4.52272,18.0525,4.52272
-L15.0673,4.52272 L15.0673,3.36177 L13.9063,2.20083 L9.1796,2.20083
-L8.10158,3.27885 C8.43328,3.61055,8.84791,4.02517,9.1796,4.35687 Z" />
-    <path
-        android:fillColor="@android:color/white"
-        android:pathData="M3.281,3.42136 L4.51236,2.19 L18.585,16.2626 L17.3536,17.494 L3.281,3.42136 Z" />
-</vector>
\ No newline at end of file
+        android:pathData="M19.4,16.6l-1.1,-1.1L8,5L5.1,2.2L4.2,3.1l2,2H5.7c-0.8,0 -1.4,0.6 -1.4,1.4v8c0,0.8 0.6,1.4 1.4,1.4h11.4l1.5,1.5L19.4,16.6zM18.7,6.5c0,-0.8 -0.6,-1.4 -1.4,-1.4h-2.9V3.6c0,-0.8 -0.6,-1.4 -1.4,-1.4h-3C9.2,2.1 8.6,2.8 8.6,3.6v0.2L18.7,14C18.7,14 18.7,6.5 18.7,6.5zM12.9,5.1H10V3.6h2.9V5.1z"/>
+</vector>
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_0.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_0.xml
new file mode 100644
index 0000000..5009c6b
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_0.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pathInterpolator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0.0,0.0 l 0.144628099174,0.0 l 0.855371900826,1.0 L 1.0,1.0" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_1.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_1.xml
new file mode 100644
index 0000000..678b90b
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_1.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pathInterpolator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0.0,0.0 l 0.534759358289,0.0 l 0.465240641711,1.0" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_2.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_2.xml
new file mode 100644
index 0000000..6c6df60
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_2.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pathInterpolator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0.0,0.0 c 0.313385868073,0.330828523695 0.125984191895,0.661170632677 1.0,1.0" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_3.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_3.xml
new file mode 100644
index 0000000..b1eec48
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_3.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pathInterpolator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0.0,0.0 c 0.4,0.0 0.2,0.2 1.0,1.0" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_4.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_4.xml
new file mode 100644
index 0000000..17ff65a
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_4.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pathInterpolator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0.0,0.0 c 0.4,0.4 0.2,0.2 1.0,1.0" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_5.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_5.xml
new file mode 100644
index 0000000..aee48dc
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_animation_interpolator_5.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pathInterpolator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0.0,0.0 c 0.33333333,0.0 0.66666667,1.0 1.0,1.0" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_cross_1_pathdata_interpolator.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_cross_1_pathdata_interpolator.xml
new file mode 100644
index 0000000..66cfaff
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_cross_1_pathdata_interpolator.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2015 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0,0 c 0.166666667,0 0.2,1 1,1" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_0.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_0.xml
new file mode 100644
index 0000000..4a5fde9
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_0.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pathInterpolator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0.0,0.0 c 0.33333333,0.0 0.83333333333,1.0 1.0,1.0" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_1.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_1.xml
new file mode 100644
index 0000000..0f35e5d
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_1.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pathInterpolator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0.0,0.0 c 0.714960628748,0.0 0.678740215302,1.0 1.0,1.0" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_2.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_2.xml
new file mode 100644
index 0000000..626f9ef
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_2.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pathInterpolator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0.0,0.0 l 0.392038600724,0.0 l 0.607961399276,1.0" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_3.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_3.xml
new file mode 100644
index 0000000..17ff65a
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_3.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pathInterpolator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0.0,0.0 c 0.4,0.4 0.2,0.2 1.0,1.0" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_4.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_4.xml
new file mode 100644
index 0000000..96bdb48
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_4.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pathInterpolator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0.0,0.0 l 0.337078651685,0.0 l 0.662921348315,1.0 L 1.0,1.0" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_5.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_5.xml
new file mode 100644
index 0000000..a91610d
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_animation_interpolator_5.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pathInterpolator
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0.0,0.0 c 0.16666666667,0.0 0.66666667,1.0 1.0,1.0" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_cross_1_pathdata_interpolator.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_cross_1_pathdata_interpolator.xml
new file mode 100644
index 0000000..a0118d70
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_cross_1_pathdata_interpolator.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2015 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0,0 c 0.8,0 0.833333333,1 1,1" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_mask_pathdata_interpolator.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_mask_pathdata_interpolator.xml
new file mode 100644
index 0000000..1820bab
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_mask_pathdata_interpolator.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2015 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+    android:pathData="M 0,0 c 0.8,0 0.6,1 1,1" />
diff --git a/packages/SystemUI/res/layout/battery_percentage_view.xml b/packages/SystemUI/res/layout/battery_percentage_view.xml
index deb494f..59c0957 100644
--- a/packages/SystemUI/res/layout/battery_percentage_view.xml
+++ b/packages/SystemUI/res/layout/battery_percentage_view.xml
@@ -26,4 +26,5 @@
         android:textColor="?android:attr/textColorPrimary"
         android:gravity="center_vertical|start"
         android:paddingEnd="@dimen/battery_level_padding_start"
+        android:importantForAccessibility="no"
         />
diff --git a/packages/SystemUI/res/layout/car_fullscreen_user_pod.xml b/packages/SystemUI/res/layout/car_fullscreen_user_pod.xml
index bc29012..2f16516 100644
--- a/packages/SystemUI/res/layout/car_fullscreen_user_pod.xml
+++ b/packages/SystemUI/res/layout/car_fullscreen_user_pod.xml
@@ -20,10 +20,7 @@
     android:orientation="vertical"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:layout_marginLeft="@dimen/car_fullscreen_user_pod_margin_side"
-    android:layout_marginRight="@dimen/car_fullscreen_user_pod_margin_side"
-    android:gravity="center"
-    android:layout_weight="1" >
+    android:gravity="center" >
 
     <ImageView android:id="@+id/user_avatar"
         android:layout_gravity="center"
@@ -31,10 +28,14 @@
         android:layout_height="@dimen/car_fullscreen_user_pod_image_avatar_height" />
 
     <TextView android:id="@+id/user_name"
-        android:layout_width="wrap_content"
+        android:layout_width="@dimen/car_fullscreen_user_pod_width"
         android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/car_fullscreen_user_pod_margin_above_text"
+        android:layout_marginTop="@dimen/car_fullscreen_user_pod_margin_name_top"
+        android:layout_marginBottom="@dimen/car_fullscreen_user_pod_margin_name_bottom"
         android:textSize="@dimen/car_fullscreen_user_pod_text_size"
         android:textColor="@color/qs_user_detail_name"
+        android:ellipsize="end"
+        android:singleLine="true"
+        android:gravity="center_horizontal"
         android:layout_gravity="center_horizontal" />
 </LinearLayout>
diff --git a/packages/SystemUI/res/layout/car_fullscreen_user_pod_container.xml b/packages/SystemUI/res/layout/car_fullscreen_user_pod_container.xml
index 8c55680..99d010f 100644
--- a/packages/SystemUI/res/layout/car_fullscreen_user_pod_container.xml
+++ b/packages/SystemUI/res/layout/car_fullscreen_user_pod_container.xml
@@ -18,7 +18,8 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:layout_gravity="center">
+    android:gravity="center"
+    android:layout_gravity="center" >
 
     <!-- car_fullscreen_user_pods will be dynamically added here. -->
 </LinearLayout>
diff --git a/packages/SystemUI/res/layout/car_fullscreen_user_switcher.xml b/packages/SystemUI/res/layout/car_fullscreen_user_switcher.xml
index c82eddc..257e281 100644
--- a/packages/SystemUI/res/layout/car_fullscreen_user_switcher.xml
+++ b/packages/SystemUI/res/layout/car_fullscreen_user_switcher.xml
@@ -35,6 +35,10 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent">
 
+        <include layout="@layout/car_status_bar_header"
+            android:theme="@android:style/Theme"
+            android:layout_alignParentTop="true"/>
+
         <!-- This progress bar is the countdown timer. -->
         <ProgressBar
             android:id="@+id/countdown_progress"
diff --git a/packages/SystemUI/res/layout/car_qs_footer.xml b/packages/SystemUI/res/layout/car_qs_footer.xml
new file mode 100644
index 0000000..044090b
--- /dev/null
+++ b/packages/SystemUI/res/layout/car_qs_footer.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<!-- extends RelativeLayout -->
+<com.android.systemui.qs.car.CarQSFooter
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/qs_footer"
+    android:layout_width="match_parent"
+    android:layout_height="@dimen/car_qs_footer_height"
+    android:baselineAligned="false"
+    android:clickable="false"
+    android:clipChildren="false"
+    android:clipToPadding="false"
+    android:paddingBottom="@dimen/car_qs_footer_padding_bottom"
+    android:paddingTop="@dimen/car_qs_footer_padding_top"
+    android:paddingEnd="@dimen/car_qs_footer_padding_end"
+    android:paddingStart="@dimen/car_qs_footer_padding_start"
+    android:gravity="center_vertical">
+
+    <com.android.systemui.statusbar.phone.MultiUserSwitch
+        android:id="@+id/multi_user_switch"
+        android:layout_alignParentStart="true"
+        android:layout_centerVertical="true"
+        android:layout_width="@dimen/car_qs_footer_icon_width"
+        android:layout_height="@dimen/car_qs_footer_icon_height"
+        android:layout_marginRight="@dimen/car_qs_footer_user_switch_margin_right"
+        android:background="@drawable/ripple_drawable"
+        android:focusable="true">
+
+        <ImageView
+            android:id="@+id/multi_user_avatar"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_gravity="center"
+            android:scaleType="fitCenter"/>
+    </com.android.systemui.statusbar.phone.MultiUserSwitch>
+
+    <TextView android:id="@+id/user_name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="@dimen/car_qs_footer_user_name_text_size"
+        android:textColor="@color/car_qs_footer_user_name_color"
+        android:gravity="start|center_vertical"
+        android:layout_centerVertical="true"
+        android:layout_toEndOf="@id/multi_user_switch" />
+
+    <com.android.systemui.statusbar.phone.SettingsButton
+        android:id="@+id/settings_button"
+        android:layout_alignParentEnd="true"
+        android:layout_centerVertical="true"
+        android:layout_width="@dimen/car_qs_footer_icon_width"
+        android:layout_height="@dimen/car_qs_footer_icon_height"
+        android:background="@drawable/ripple_drawable"
+        android:contentDescription="@string/accessibility_quick_settings_settings"
+        android:scaleType="centerCrop"
+        android:src="@drawable/ic_settings_16dp"
+        android:tint="?android:attr/colorForeground"
+        style="@android:style/Widget.Material.Button.Borderless" />
+
+</com.android.systemui.qs.car.CarQSFooter>
diff --git a/packages/SystemUI/res/layout/car_qs_panel.xml b/packages/SystemUI/res/layout/car_qs_panel.xml
new file mode 100644
index 0000000..4cb0fd5
--- /dev/null
+++ b/packages/SystemUI/res/layout/car_qs_panel.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/quick_settings_container"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/car_qs_background_primary"
+    android:orientation="vertical"
+    android:elevation="4dp"
+    android:theme="@android:style/Theme">
+
+    <include layout="@layout/car_status_bar_header"/>
+    <include layout="@layout/car_qs_footer"/>
+
+    <com.android.systemui.statusbar.car.UserGridView
+        android:id="@+id/user_grid"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="@dimen/car_margin"
+        android:layout_marginRight="@dimen/car_margin" />
+</LinearLayout>
diff --git a/packages/SystemUI/res/layout/car_status_bar_header.xml b/packages/SystemUI/res/layout/car_status_bar_header.xml
new file mode 100644
index 0000000..158907e
--- /dev/null
+++ b/packages/SystemUI/res/layout/car_status_bar_header.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<!-- Extends RelativeLayout -->
+<com.android.systemui.qs.car.CarStatusBarHeader
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:systemui="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/header"
+    android:layout_width="match_parent"
+    android:layout_height="@dimen/car_qs_header_system_icons_area_height"
+    android:paddingStart="8dp"
+    android:paddingEnd="8dp" >
+
+    <include
+        layout="@layout/system_icons"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:layout_alignParentStart="true"
+        android:layout_centerVertical="true" />
+
+    <com.android.systemui.statusbar.policy.Clock
+        android:id="@+id/clock"
+        android:textAppearance="@style/TextAppearance.StatusBar.Clock"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:layout_alignParentEnd="true"
+        android:layout_centerVertical="true"
+        android:singleLine="true"
+        android:paddingStart="@dimen/status_bar_clock_starting_padding"
+        android:paddingEnd="@dimen/status_bar_clock_end_padding"
+        systemui:showDark="false" />
+</com.android.systemui.qs.car.CarStatusBarHeader>
diff --git a/packages/SystemUI/res/layout/global_actions_item.xml b/packages/SystemUI/res/layout/global_actions_item.xml
index e3a488c..0d735e7 100644
--- a/packages/SystemUI/res/layout/global_actions_item.xml
+++ b/packages/SystemUI/res/layout/global_actions_item.xml
@@ -25,8 +25,8 @@
     android:minHeight="92dp"
     android:gravity="center"
     android:orientation="vertical"
-    android:paddingEnd="8dip"
-    android:paddingStart="8dip">
+    android:paddingEnd="0dip"
+    android:paddingStart="0dip">
 
     <ImageView
         android:id="@*android:id/icon"
diff --git a/packages/SystemUI/res/layout/global_actions_wrapped.xml b/packages/SystemUI/res/layout/global_actions_wrapped.xml
index ec357d2..43aa8ab 100644
--- a/packages/SystemUI/res/layout/global_actions_wrapped.xml
+++ b/packages/SystemUI/res/layout/global_actions_wrapped.xml
@@ -9,11 +9,12 @@
     android:theme="@style/qs_theme"
     android:clipChildren="false">
 
+    <!-- Global actions is right-aligned to be physically near power button -->
     <LinearLayout
         android:id="@android:id/list"
         android:layout_width="@dimen/global_actions_panel_width"
         android:layout_height="wrap_content"
-        android:layout_gravity="top|end"
+        android:layout_gravity="top|right"
         android:gravity="center"
         android:orientation="vertical"
         android:padding="12dp"
diff --git a/packages/SystemUI/res/layout/home.xml b/packages/SystemUI/res/layout/home.xml
index 53ef2ab..7b67b79 100644
--- a/packages/SystemUI/res/layout/home.xml
+++ b/packages/SystemUI/res/layout/home.xml
@@ -23,8 +23,8 @@
     systemui:keyCode="3"
     android:scaleType="fitCenter"
     android:contentDescription="@string/accessibility_home"
-    android:paddingTop="13dp"
-    android:paddingBottom="13dp"
+    android:paddingTop="@dimen/home_padding"
+    android:paddingBottom="@dimen/home_padding"
     android:paddingStart="@dimen/navigation_key_padding"
     android:paddingEnd="@dimen/navigation_key_padding"
     />
diff --git a/packages/SystemUI/res/layout/navigation_layout.xml b/packages/SystemUI/res/layout/navigation_layout.xml
index 53f5dfe..3e60794 100644
--- a/packages/SystemUI/res/layout/navigation_layout.xml
+++ b/packages/SystemUI/res/layout/navigation_layout.xml
@@ -21,8 +21,8 @@
     android:layout_height="match_parent"
     android:layout_marginStart="@dimen/rounded_corner_content_padding"
     android:layout_marginEnd="@dimen/rounded_corner_content_padding"
-    android:paddingStart="8dp"
-    android:paddingEnd="8dp">
+    android:paddingStart="@dimen/nav_content_padding"
+    android:paddingEnd="@dimen/nav_content_padding">
 
     <com.android.systemui.statusbar.phone.NearestTouchFrame
         android:id="@+id/nav_buttons"
diff --git a/packages/SystemUI/res/layout/notification_info.xml b/packages/SystemUI/res/layout/notification_info.xml
index bbd315e..6df1657 100644
--- a/packages/SystemUI/res/layout/notification_info.xml
+++ b/packages/SystemUI/res/layout/notification_info.xml
@@ -62,7 +62,9 @@
             android:layout_height="wrap_content"
             android:textAppearance="@*android:style/TextAppearance.Material.Notification.Info"
             android:layout_marginStart="2dp"
-            android:layout_marginEnd="2dp"/>
+            android:layout_marginEnd="2dp"
+            android:ellipsize="end"
+            android:maxLines="1"/>
     </LinearLayout>
 
     <!-- Channel Info Block -->
diff --git a/packages/SystemUI/res/layout/preference_widget_switch.xml b/packages/SystemUI/res/layout/preference_widget_switch.xml
deleted file mode 100644
index 49610de..0000000
--- a/packages/SystemUI/res/layout/preference_widget_switch.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="wrap_content"
-    android:layout_width="wrap_content">
-
-    <RadioButton
-        android:id="@+id/radio_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:clickable="false"
-        android:focusable="false"
-        android:layout_marginEnd="4dp" />
-
-    <View
-        android:layout_width="1dp"
-        android:layout_height="match_parent"
-        android:background="?android:attr/listDivider" />
-
-    <Switch
-        android:id="@*android:id/switch_widget"
-        android:layout_width="50dp"
-        android:layout_height="wrap_content"
-        android:focusable="false"
-        android:clickable="false"
-        android:background="@null" />
-
-</LinearLayout>
diff --git a/packages/SystemUI/res/layout/qs_detail_item.xml b/packages/SystemUI/res/layout/qs_detail_item.xml
index 97e82ff..0844bb4 100644
--- a/packages/SystemUI/res/layout/qs_detail_item.xml
+++ b/packages/SystemUI/res/layout/qs_detail_item.xml
@@ -26,7 +26,7 @@
 
     <ImageView
         android:id="@android:id/icon"
-        android:layout_width="@dimen/qs_detail_item_icon_size"
+        android:layout_width="@dimen/qs_detail_item_icon_width"
         android:layout_height="@dimen/qs_detail_item_icon_size"
         android:layout_marginStart="@dimen/qs_detail_item_icon_marginStart"
         android:layout_marginEnd="@dimen/qs_detail_item_icon_marginEnd"
diff --git a/packages/SystemUI/res/layout/qs_footer.xml b/packages/SystemUI/res/layout/qs_footer.xml
deleted file mode 100644
index db39905..0000000
--- a/packages/SystemUI/res/layout/qs_footer.xml
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
--->
-
-<!-- Extends RelativeLayout -->
-<com.android.systemui.qs.QSFooter
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/header"
-    android:layout_width="match_parent"
-    android:layout_height="48dp"
-    android:baselineAligned="false"
-    android:clickable="false"
-    android:clipChildren="false"
-    android:clipToPadding="false"
-    android:paddingTop="0dp"
-    android:gravity="center_vertical"
-    android:orientation="horizontal">
-
-    <include
-        android:id="@+id/date_time_alarm_group"
-        layout="@layout/status_bar_alarm_group"
-        android:layout_marginStart="16dp"
-        android:layout_marginEnd="8dp"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent" />
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="16dp"
-        android:layout_marginEnd="8dp"
-        android:gravity="end">
-
-        <com.android.systemui.statusbar.phone.MultiUserSwitch
-            android:id="@+id/multi_user_switch"
-            android:layout_width="48dp"
-            android:layout_height="48dp"
-            android:layout_alignParentEnd="true"
-            android:background="@drawable/ripple_drawable"
-            android:focusable="true">
-
-            <ImageView
-                android:id="@+id/multi_user_avatar"
-                android:layout_width="@dimen/multi_user_avatar_expanded_size"
-                android:layout_height="@dimen/multi_user_avatar_expanded_size"
-                android:layout_gravity="center"
-                android:scaleType="centerInside"/>
-        </com.android.systemui.statusbar.phone.MultiUserSwitch>
-
-        <com.android.systemui.statusbar.AlphaOptimizedImageView
-            android:id="@android:id/edit"
-            android:layout_width="48dp"
-            android:layout_height="48dp"
-            android:background="?android:attr/selectableItemBackgroundBorderless"
-            android:clickable="true"
-            android:clipToPadding="false"
-            android:contentDescription="@string/accessibility_quick_settings_edit"
-            android:focusable="true"
-            android:padding="16dp"
-            android:src="@drawable/ic_mode_edit"
-            android:tint="?android:attr/colorForeground"/>
-
-        <com.android.systemui.statusbar.AlphaOptimizedFrameLayout
-            android:id="@+id/settings_button_container"
-            android:layout_width="48dp"
-            android:layout_height="48dp"
-            android:clipChildren="false"
-            android:clipToPadding="false">
-
-            <com.android.systemui.statusbar.phone.SettingsButton
-                android:id="@+id/settings_button"
-                style="@android:style/Widget.Material.Button.Borderless"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:background="@drawable/ripple_drawable"
-                android:contentDescription="@string/accessibility_quick_settings_settings"
-                android:src="@drawable/ic_settings_16dp"
-                android:tint="?android:attr/colorForeground"/>
-
-            <com.android.systemui.statusbar.AlphaOptimizedImageView
-                android:id="@+id/tuner_icon"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:paddingStart="36dp"
-                android:paddingEnd="4dp"
-                android:src="@drawable/tuner"
-                android:tint="?android:attr/textColorTertiary"
-                android:visibility="invisible"/>
-
-        </com.android.systemui.statusbar.AlphaOptimizedFrameLayout>
-
-        <com.android.systemui.statusbar.phone.ExpandableIndicator
-            android:id="@+id/expand_indicator"
-            android:layout_width="48dp"
-            android:layout_height="48dp"
-            android:clipToPadding="false"
-            android:clickable="true"
-            android:focusable="true"
-            android:background="?android:attr/selectableItemBackgroundBorderless"
-            android:contentDescription="@string/accessibility_quick_settings_expand"
-            android:padding="14dp" />
-    </LinearLayout>
-
-</com.android.systemui.qs.QSFooter>
diff --git a/packages/SystemUI/res/layout/qs_footer_impl.xml b/packages/SystemUI/res/layout/qs_footer_impl.xml
new file mode 100644
index 0000000..43e88ba
--- /dev/null
+++ b/packages/SystemUI/res/layout/qs_footer_impl.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+-->
+
+<!-- Extends FrameLayout -->
+<com.android.systemui.qs.QSFooterImpl
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/qs_footer"
+    android:layout_width="match_parent"
+    android:layout_height="48dp"
+    android:baselineAligned="false"
+    android:clickable="false"
+    android:clipChildren="false"
+    android:clipToPadding="false"
+    android:paddingTop="0dp"
+    android:gravity="center_vertical"
+    android:orientation="horizontal">
+
+    <include
+        android:id="@+id/date_time_alarm_group"
+        layout="@layout/status_bar_alarm_group"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="8dp"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="16dp"
+        android:layout_marginEnd="8dp"
+        android:gravity="end">
+
+        <com.android.systemui.statusbar.phone.MultiUserSwitch
+            android:id="@+id/multi_user_switch"
+            android:layout_width="48dp"
+            android:layout_height="48dp"
+            android:layout_alignParentEnd="true"
+            android:background="@drawable/ripple_drawable"
+            android:focusable="true">
+
+            <ImageView
+                android:id="@+id/multi_user_avatar"
+                android:layout_width="@dimen/multi_user_avatar_expanded_size"
+                android:layout_height="@dimen/multi_user_avatar_expanded_size"
+                android:layout_gravity="center"
+                android:scaleType="centerInside"/>
+        </com.android.systemui.statusbar.phone.MultiUserSwitch>
+
+        <com.android.systemui.statusbar.AlphaOptimizedImageView
+            android:id="@android:id/edit"
+            android:layout_width="48dp"
+            android:layout_height="48dp"
+            android:background="?android:attr/selectableItemBackgroundBorderless"
+            android:clickable="true"
+            android:clipToPadding="false"
+            android:contentDescription="@string/accessibility_quick_settings_edit"
+            android:focusable="true"
+            android:padding="16dp"
+            android:src="@drawable/ic_mode_edit"
+            android:tint="?android:attr/colorForeground"/>
+
+        <com.android.systemui.statusbar.AlphaOptimizedFrameLayout
+            android:id="@+id/settings_button_container"
+            android:layout_width="48dp"
+            android:layout_height="48dp"
+            android:clipChildren="false"
+            android:clipToPadding="false">
+
+            <com.android.systemui.statusbar.phone.SettingsButton
+                android:id="@+id/settings_button"
+                style="@android:style/Widget.Material.Button.Borderless"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@drawable/ripple_drawable"
+                android:contentDescription="@string/accessibility_quick_settings_settings"
+                android:src="@drawable/ic_settings_16dp"
+                android:tint="?android:attr/colorForeground"/>
+
+            <com.android.systemui.statusbar.AlphaOptimizedImageView
+                android:id="@+id/tuner_icon"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:paddingStart="36dp"
+                android:paddingEnd="4dp"
+                android:src="@drawable/tuner"
+                android:tint="?android:attr/textColorTertiary"
+                android:visibility="invisible"/>
+
+        </com.android.systemui.statusbar.AlphaOptimizedFrameLayout>
+
+        <com.android.systemui.statusbar.phone.ExpandableIndicator
+            android:id="@+id/expand_indicator"
+            android:layout_width="48dp"
+            android:layout_height="48dp"
+            android:clipToPadding="false"
+            android:clickable="true"
+            android:focusable="true"
+            android:background="?android:attr/selectableItemBackgroundBorderless"
+            android:contentDescription="@string/accessibility_quick_settings_expand"
+            android:padding="14dp" />
+    </LinearLayout>
+
+</com.android.systemui.qs.QSFooterImpl>
diff --git a/packages/SystemUI/res/layout/qs_panel.xml b/packages/SystemUI/res/layout/qs_panel.xml
index 87101e4..5541f3d 100644
--- a/packages/SystemUI/res/layout/qs_panel.xml
+++ b/packages/SystemUI/res/layout/qs_panel.xml
@@ -32,8 +32,7 @@
 
     <include layout="@layout/quick_status_bar_expanded_header" />
 
-    <include android:id="@+id/qs_footer"
-        layout="@layout/qs_footer" />
+    <include layout="@layout/qs_footer_impl" />
 
     <include android:id="@+id/qs_detail" layout="@layout/qs_detail" />
 
diff --git a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml
index f8b7b8a..e8b418c 100644
--- a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml
+++ b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml
@@ -18,7 +18,6 @@
 <!-- Extends RelativeLayout -->
 <com.android.systemui.qs.QuickStatusBarHeader
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:systemui="http://schemas.android.com/apk/res-auto"
     android:id="@+id/header"
     android:layout_width="match_parent"
     android:layout_height="@dimen/status_bar_header_height"
@@ -31,46 +30,7 @@
     android:paddingEnd="0dp"
     android:paddingStart="0dp">
 
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="40dp"
-        android:layout_alignParentEnd="true"
-        android:clipChildren="false"
-        android:clipToPadding="false"
-        android:gravity="center"
-        android:paddingStart="8dp"
-        android:paddingEnd="8dp"
-        android:orientation="horizontal">
-
-
-        <com.android.keyguard.CarrierText
-            android:id="@+id/qs_carrier_text"
-            android:layout_width="0dp"
-            android:layout_height="match_parent"
-            android:layout_weight="1"
-            android:gravity="center_vertical|start"
-            android:ellipsize="marquee"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:textColor="?android:attr/textColorPrimary"
-            android:singleLine="true" />
-
-        <com.android.systemui.BatteryMeterView android:id="@+id/battery"
-            android:layout_height="match_parent"
-            android:layout_width="wrap_content"
-            />
-
-        <com.android.systemui.statusbar.policy.Clock
-            android:id="@+id/clock"
-            android:textAppearance="@style/TextAppearance.StatusBar.Clock"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:singleLine="true"
-            android:paddingStart="@dimen/status_bar_clock_starting_padding"
-            android:paddingEnd="@dimen/status_bar_clock_end_padding"
-            android:gravity="center_vertical|start"
-            systemui:showDark="false"
-            />
-    </LinearLayout>
+    <include layout="@layout/quick_status_bar_header_system_icons" />
 
     <com.android.systemui.qs.QuickQSPanel
         android:id="@+id/quick_qs_panel"
diff --git a/packages/SystemUI/res/layout/quick_status_bar_header_system_icons.xml b/packages/SystemUI/res/layout/quick_status_bar_header_system_icons.xml
new file mode 100644
index 0000000..2cf3e4a
--- /dev/null
+++ b/packages/SystemUI/res/layout/quick_status_bar_header_system_icons.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+** Copyright 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.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:systemui="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="@dimen/qs_header_system_icons_area_height"
+    android:layout_alignParentEnd="true"
+    android:clipChildren="false"
+    android:clipToPadding="false"
+    android:gravity="center"
+    android:paddingStart="8dp"
+    android:paddingEnd="8dp"
+    android:orientation="horizontal">
+
+
+    <com.android.keyguard.CarrierText
+        android:id="@+id/qs_carrier_text"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:gravity="center_vertical|start"
+        android:ellipsize="marquee"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textColor="?android:attr/textColorPrimary"
+        android:textDirection="locale"
+        android:singleLine="true" />
+
+    <com.android.systemui.BatteryMeterView android:id="@+id/battery"
+        android:layout_height="match_parent"
+        android:layout_width="wrap_content"
+        />
+
+    <com.android.systemui.statusbar.policy.Clock
+        android:id="@+id/clock"
+        android:textAppearance="@style/TextAppearance.StatusBar.Clock"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:singleLine="true"
+        android:paddingStart="@dimen/status_bar_clock_starting_padding"
+        android:paddingEnd="@dimen/status_bar_clock_end_padding"
+        android:gravity="center_vertical|start"
+        systemui:showDark="false"
+        />
+</LinearLayout>
diff --git a/packages/SystemUI/res/layout/recents_low_ram_stack_action_button.xml b/packages/SystemUI/res/layout/recents_low_ram_stack_action_button.xml
new file mode 100644
index 0000000..dca8911
--- /dev/null
+++ b/packages/SystemUI/res/layout/recents_low_ram_stack_action_button.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/button"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:paddingStart="26dp"
+    android:paddingEnd="26dp"
+    android:paddingTop="17dp"
+    android:paddingBottom="17dp"
+    android:text="@string/recents_stack_action_button_label"
+    android:textSize="14sp"
+    android:textColor="#FFFFFF"
+    android:textAllCaps="true"
+    android:fontFamily="sans-serif-medium"
+    android:background="@drawable/recents_low_ram_stack_button_background"
+    android:visibility="invisible"
+    android:forceHasOverlappingRendering="false"
+    style="?attr/clearAllStyle" />
diff --git a/packages/SystemUI/res/layout/volume_zen_footer.xml b/packages/SystemUI/res/layout/volume_zen_footer.xml
index 7ffcb1e..df79c5f 100644
--- a/packages/SystemUI/res/layout/volume_zen_footer.xml
+++ b/packages/SystemUI/res/layout/volume_zen_footer.xml
@@ -25,18 +25,15 @@
         android:id="@+id/zen_embedded_divider"
         android:layout_width="match_parent"
         android:layout_height="1dp"
-        android:layout_marginBottom="12dp"
         android:layout_marginTop="8dp"
         android:background="@color/qs_tile_divider" />
 
-
     <RelativeLayout
         android:id="@+id/zen_introduction"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginStart="16dp"
         android:layout_marginEnd="16dp"
-        android:paddingTop="8dp"
         android:paddingBottom="8dp"
         android:background="@drawable/zen_introduction_message_background"
         android:theme="@*android:style/ThemeOverlay.DeviceDefault.Accent.Light">
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 131214d..8296a1c 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Die rekenaar se RSA-sleutel-vingerafdruk is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Laat altyd toe van hierdie rekenaar af"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB-ontfouting word nie toegelaat nie"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Die gebruiker wat tans by hierdie toestel aangemeld is, kan nie USB-ontfouting aanskakel nie. Skakel asseblief na \'n administrasiegebruiker oor om hierdie kenmerk te gebruik."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Die gebruiker wat tans by hierdie toestel aangemeld is, kan nie USB-ontfouting aanskakel nie. Skakel na die primêre gebruiker toe oor om hierdie kenmerk te gebruik."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoem om skerm te vul"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Strek om skerm te vul"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Stoor tans skermkiekie..."</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Soek"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Gly op vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Gly links vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Jy sal nie deur geluide en vibrasies gepla word nie, behalwe deur wekkers, herinneringe, geleenthede en bellers wat jy spesifiseer. Jy sal steeds enigiets hoor wat jy kies om te speel, insluitend musiek, video\'s en speletjies."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Jy sal nie deur geluide en vibrasies gepla word nie, behalwe deur wekkers. Jy sal steeds enigiets hoor wat jy kies om te speel, insluitend musiek, video\'s en speletjies."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Jy sal nie deur geluide en vibrasies gepla word nie, behalwe deur wekkers, herinneringe, geleenthede en bellers wat jy spesifiseer. Jy sal steeds enigiets hoor wat jy kies om te speel, insluitend musiek, video\'s en speletjies."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Jy sal nie deur geluide en vibrasies gepla word nie, behalwe deur wekkers. Jy sal steeds enigiets hoor wat jy kies om te speel, insluitend musiek, video\'s en speletjies."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Pasmaak"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Dit blokkeer ALLE klanke en vibrasies, insluitend van wekkers, musiek, video\'s en speletjies af. Jy sal steeds foonoproepe kan maak."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Dit blokkeer ALLE klanke en vibrasies, insluitend van wekkers, musiek, video\'s en speletjies af. Jy sal steeds foonoproepe kan maak."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Dit blokkeer ALLE klanke en vibrasies, insluitend van wekkers, musiek, video\'s en speletjies af."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Minder dringende kennisgewings hieronder"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Kom meer te wete"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Jy is gekoppel aan <xliff:g id="VPN_APP">%1$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Maak VPN-instellings oop"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Maak VPN-instellings oop"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Maak vertroude eiebewyse oop"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Jou administrateur het netwerkloglêers aangeskakel wat verkeer op jou toestel monitor.\n\nKontak jou administrateur vir meer inligting."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Hierdie program het nie kennisgewingkategorieë nie"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Kennisgewings van hierdie program af kan nie afgeskakel word nie"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 uit <xliff:g id="NUMBER_1">%d</xliff:g> kennisgewingkategorieë van hierdie program</item>
-      <item quantity="one">1 uit <xliff:g id="NUMBER_0">%d</xliff:g> kennisgewingkategorie van hierdie program</item>
+      <item quantity="other">1 uit <xliff:g id="NUMBER_1">%s</xliff:g> kennisgewingkategorieë van hierdie program</item>
+      <item quantity="one">1 uit <xliff:g id="NUMBER_0">%s</xliff:g> kennisgewingkategorie van hierdie program</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d minuut</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Batterygebruik"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Batterybespaarder is nie beskikbaar wanneer gelaai word nie"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Batterybespaarder"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Batterybespaarder is nie beskikbaar wanneer gelaai word nie"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Batterybespaarder"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Verminder werkverrigting en agtergronddata"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Knoppie <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimeer"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Maak toe"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Sleep af om toe te maak"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Prent op prent-kieslys"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Kieslys"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> is in beeld-in-beeld"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"As jy nie wil hê dat <xliff:g id="NAME">%s</xliff:g> hierdie kenmerk gebruik nie, tik om instellings oop te maak en skakel dit af."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"As jy nie wil hê dat <xliff:g id="NAME">%s</xliff:g> hierdie kenmerk moet gebruik nie, tik om instellings oop te maak en skakel dit af."</string>
     <string name="pip_play" msgid="1417176722760265888">"Speel"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Laat wag"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Slaan oor na volgende"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Kieslys"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g>-program"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Opletberigte"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Battery"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Skermkiekies"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Algemene boodskappe"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Berging"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Programme wat op die agtergrond loop"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tik vir besonderhede oor battery- en datagebruik"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Skakel mobiele data af?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Instellings kan nie jou antwoord verifieer nie omdat \'n program \'n toestemmingversoek verberg."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 8105b89..324c9ff 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"የኮምፒውተሩ RSA ቁልፍ ጣት አሻራ ይሄ ነው፦\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"ሁልጊዜ ከዚህ ኮምፒውተር ፍቀድ"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"የዩኤስቢ እርማት አይፈቀድም"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"አሁን ወደዚህ መሣሪያ የገባው ተጠቃሚ የዩ ኤስ ቢ እርማትን ማብራት አይችልም። ይህን ባህሪ ለመጠቀም እባክዎ ወደ የአስተዳዳሪ ተጠቃሚ ይቀይሩ።"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"አሁን ወደዚህ መሣሪያ የገባው ተጠቃሚ የዩኤስቢ እርማትን ማብራት አይችልም። ይህን ባህሪ ለመጠቀም ወደ ዋና ተጠቃሚ ይቀይሩ።"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"ማያ እንዲሞላ አጉላ"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"ማያ ለመሙለት ሳብ"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"ቅጽበታዊ ገጽ እይታ በማስቀመጥ ላይ..."</string>
@@ -298,7 +298,7 @@
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ጠፍቷል"</string>
     <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi በርቷል"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"ምንም የWi-Fi  አውታረ መረቦች የሉም"</string>
-    <string name="quick_settings_cast_title" msgid="7709016546426454729">"ውሰድ"</string>
+    <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string>
     <string name="quick_settings_casting" msgid="6601710681033353316">"በመውሰድ ላይ"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ያልተሰየመ መሳሪያ"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ለመውሰድ ዝግጁ"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"ፍለጋ"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ላይ አንሸራትት።"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ግራ አንሸራትት።"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"እርስዎ ከወሰንዋቸው ማንቂያዎች፣ አስታዋሾች፣ ክስተቶች እና ደዋዮች በስተቀር፣ በድምጾች እና ንዝረቶች አይረበሹም። ሙዚቃ፣ ቪዲዮዎች እና ጨዋታዎች ጨምሮ ለመጫወት የሚመርጡትን ማንኛውም ነገር አሁንም ይሰማሉ።"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"ከማንቂያዎች በስተቀር፣ በድምጾች እና ንዝረቶች አይረበሹም። ሙዚቃ፣ ቪዲዮዎች እና ጨዋታዎች ጨምሮ ለመጫወት የሚመርጡትን ማንኛውም ነገር አሁንም ይሰማሉ።"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"እርስዎ ከወሰንዋቸው ማንቂያዎች፣ አስታዋሾች፣ ክስተቶች እና ደዋዮች በስተቀር፣ በድምጾች እና ንዝረቶች አይረበሹም። ሙዚቃ፣ ቪዲዮዎች እና ጨዋታዎች ጨምሮ ለመጫወት የሚመርጡትን ማንኛውም ነገር አሁንም ይሰማሉ።"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"ከማንቂያዎች በስተቀር፣ በድምጾች እና ንዝረቶች አይረበሹም። ሙዚቃ፣ ቪዲዮዎች እና ጨዋታዎች ጨምሮ ለመጫወት የሚመርጡትን ማንኛውም ነገር አሁንም ይሰማሉ።"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"አብጅ"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"ይሄ ማንቂያዎችን፣ ሙዚቃን፣ ቪዲዮዎችን እና ጨዋታዎችንም ጨምሮ ሁሉንም ድምጾች እና ንዝረቶች ያጠፋል። አሁንም የድምጽ ጥሪዎችን ማድረግ ይችላሉ።"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"ይሄ ማንቂያዎችን፣ ሙዚቃን፣ ቪዲዮዎችን እና ጨዋታዎችንም ጨምሮ ሁሉንም ድምጾች እና ንዝረቶች ያጠፋል። አሁንም የድምጽ ጥሪዎችን ማድረግ ይችላሉ።"</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"ይሄ ማንቂያዎችን፣ ሙዚቃን፣ ቪዲዮዎችን እና ጨዋታዎችንም ጨምሮ ሁሉንም ድምጾች እና ንዝረቶች ያጠፋል።"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"በጣም አስቸካይ ያልሆኑ ማሳወቂያዎች ከታች"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"የበለጠ ለመረዳት"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"እርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የግል የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="VPN_APP">%1$s</xliff:g> ጋር ተገናኝተዋል።"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"የVPN ቅንብሮችን ይክፈቱ"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"የቪፒኤን ቅንብሮችን ይክፈቱ"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"የታመኑ ምስክርነቶችን ክፈት"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"የእርስዎ አስተዳዳሪ የአውታረ መረብ ምዝግብ ማስታወሻ መያዝን አብርተዋል፣ ይህም በመሣሪያዎ ላይ ያለውን ትራፊክ ይከታተላል።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"ይህ መተግበሪያ የማሳወቂያ ምድቦች የሉትም"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"ከዚህ መተግበሪያ የሚመጡ ማሳወቂያዎች ሊጠፉ አይችሉም"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 ከ<xliff:g id="NUMBER_1">%d</xliff:g> የማሳወቂያ ምድቦች ከዚህ መተግበሪያ</item>
-      <item quantity="other">1 <xliff:g id="NUMBER_1">%d</xliff:g> የማሳወቂያ ምድቦች ከዚህ መተግበሪያ</item>
+      <item quantity="one">1 ከ<xliff:g id="NUMBER_1">%s</xliff:g> የማሳወቂያ ምድቦች ከዚህ መተግበሪያ</item>
+      <item quantity="other">1 <xliff:g id="NUMBER_1">%s</xliff:g> የማሳወቂያ ምድቦች ከዚህ መተግበሪያ</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>፣ <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="other"> %d ደቂቃዎች</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"የባትሪ አጠቃቀም"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ኃይል በሚሞላበት ጊዜ ባትሪ ቆጣቢ አይገኝም"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"ባትሪ ቆጣቢ"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"ኃይል በሚሞላበት ጊዜ ባትሪ ቆጣቢ አይገኝም"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"የባትሪ ኃይል ቆጣቢ"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"አፈጻጸምን እና የጀርባ ውሂብን ይቀንሳል"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"አዝራር <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"መነሻ"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"አሳንስ"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"ዝጋ"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"ለማሰናበት ወደ ታች ይጎትቱ"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"በስዕል ምናሌ ውስጥ ያለ ስዕል"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"ምናሌ"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> በስዕል-ላይ-ስዕል ውስጥ ነው"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> ይህን ባህሪ እንዲጠቀም ካልፈለጉ ቅንብሮችን ለመክፈት መታ ያድርጉና ያጥፉት።"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> ይህን ባህሪ እንዲጠቀም ካልፈለጉ ቅንብሮችን ለመክፈት መታ ያድርጉና ያጥፉት።"</string>
     <string name="pip_play" msgid="1417176722760265888">"አጫውት"</string>
     <string name="pip_pause" msgid="8881063404466476571">"ባለበት አቁም"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"ወደ ቀጣይ ዝለል"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"ምናሌ"</string>
     <string name="tuner_app" msgid="3507057938640108777">"የ<xliff:g id="APP">%1$s</xliff:g> መተግበሪያ"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"ማንቂያዎች"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"ባትሪ"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"ቅጽበታዊ ገጽ እይታዎች"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"አጠቃላይ መልዕክቶች"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"ማከማቻ"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"በጀርባ ውስጥ የሚያሄዱ መተግበሪያዎች"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"በባትሪ እና ውሂብ አጠቃቀም ላይ ዝርዝሮችን ለማግኘት መታ ያድርጉ"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"የተንቀሳቃሽ ስልክ ውሂብ ይጥፋ?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"አንድ መተግበሪያ የፍቃድ ጥያቄ እያገደ ስለሆነ ቅንብሮች ጥያቄዎን ማረጋገጥ አይችሉም።"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 021294a..8f5ba1a 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -26,7 +26,7 @@
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"تظهر شاشاتك المعروضة مؤخرًا هنا"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"إزالة التطبيقات الحديثة"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
-      <item quantity="zero">‏ لا توجد أية شاشات (%d) في النظرة العامة</item>
+      <item quantity="zero">‏ لا توجد أي شاشات (%d) في النظرة العامة</item>
       <item quantity="two">‏شاشتان (%d) في النظرة العامة</item>
       <item quantity="few">‏%d شاشات في النظرة العامة</item>
       <item quantity="many">‏%d شاشة في النظرة العامة</item>
@@ -68,7 +68,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"‏الملف المرجعي الرئيسي لـ RSA في هذا الكمبيوتر هو:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"السماح دائمًا من هذا الكمبيوتر"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"‏لا يُسمح بتصحيح أخطاء USB"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"‏لا يمكن للمستخدم الذي يسجّل دخوله حاليًا إلى هذا الجهاز تشغيل تصحيح أخطاء USB. لاستخدام هذه الميزة، يمكنك التبديل إلى مستخدم مشرف."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"‏لا يمكن للمستخدم الذي يسجّل دخوله حاليًا إلى هذا الجهاز تشغيل تصحيح أخطاء USB. لاستخدام هذه الميزة، يمكنك التبديل إلى المستخدم الأساسي."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"تكبير/تصغير لملء الشاشة"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"توسيع بملء الشاشة"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"جارٍ حفظ لقطة الشاشة..."</string>
@@ -156,7 +156,7 @@
     <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
     <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
     <string name="accessibility_no_sim" msgid="8274017118472455155">"‏ليست هناك شريحة SIM."</string>
-    <string name="accessibility_cell_data" msgid="5326139158682385073">"بيانات الجوال"</string>
+    <string name="accessibility_cell_data" msgid="5326139158682385073">"بيانات الجوّال"</string>
     <string name="accessibility_cell_data_on" msgid="5927098403452994422">"تشغيل بيانات الجوال"</string>
     <string name="accessibility_cell_data_off" msgid="443267573897409704">"إيقاف بيانات الجوال"</string>
     <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ربط البلوتوث."</string>
@@ -169,7 +169,7 @@
     <string name="accessibility_battery_level_charging" msgid="1147587904439319646">"جارٍ شحن البطارية، <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> بالمائة."</string>
     <string name="accessibility_settings_button" msgid="799583911231893380">"إعدادات النظام."</string>
     <string name="accessibility_notifications_button" msgid="4498000369779421892">"الإشعارات."</string>
-    <string name="accessibility_overflow_action" msgid="5681882033274783311">"الاطلاع على جميع الإشعارات"</string>
+    <string name="accessibility_overflow_action" msgid="5681882033274783311">"الاطّلاع على جميع الإشعارات"</string>
     <string name="accessibility_remove_notification" msgid="3603099514902182350">"محو الإشعار."</string>
     <string name="accessibility_gps_enabled" msgid="3511469499240123019">"‏تم تمكين GPS."</string>
     <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"‏الحصول على GPS."</string>
@@ -244,7 +244,7 @@
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"جارٍ الشحن"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"بيانات شبكات الجيل الثاني والثالث متوقفة مؤقتًا"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"تم إيقاف بيانات شبكة الجيل الرابع مؤقتًا"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"تم إيقاف بيانات الجوال مؤقتًا"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"تم إيقاف بيانات الجوّال مؤقتًا"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"تم إيقاف البيانات مؤقتًا"</string>
     <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"تم الوصول إلى حد البيانات الذي عيَّنته. لم يُعد بإمكانك استخدام بيانات الجوال.\n\nفي حالة الاستئناف، قد يتم تطبيق الرسوم لاستخدام البيانات."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"استئناف"</string>
@@ -305,7 +305,7 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"لا تتوفر شبكة"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"‏إيقاف Wi-Fi"</string>
     <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"‏تم تشغيل Wi-Fi"</string>
-    <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"‏لا تتوفر أية شبكة Wi-Fi"</string>
+    <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"‏لا تتوفر أي شبكة Wi-Fi"</string>
     <string name="quick_settings_cast_title" msgid="7709016546426454729">"إرسال"</string>
     <string name="quick_settings_casting" msgid="6601710681033353316">"جارٍ الإرسال"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"جهاز لا يحمل اسمًا"</string>
@@ -328,7 +328,7 @@
     <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"استخدام البيانات"</string>
     <string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"البيانات المتبقية"</string>
     <string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"فوق القيد"</string>
-    <string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> مستخدم"</string>
+    <string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> مستخدَمة"</string>
     <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"قيد <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
     <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"تحذير <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
     <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"وضع العمل"</string>
@@ -361,10 +361,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"بحث"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"تمرير لأعلى لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"تمرير لليسار لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"لن يتم إزعاجك بالأصوات والاهتزاز، عدا من التنبيهات والتذكيرات والأحداث والمتصلين الذين تحددهم. وسيظل بإمكانك سماع أي عناصر أخرى تختار تشغيلها، بما في ذلك الموسيقى ومقاطع الفيديو والألعاب."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"لن يتم إزعاجك بالأصوات والاهتزاز، عدا من التنبيهات. وسيظل بإمكانك سماع أي عناصر أخرى تختار تشغيلها، بما في ذلك الموسيقى ومقاطع الفيديو والألعاب."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"لن يتم إزعاجك بالأصوات والاهتزاز، باستثناء المُنبِّهات والتذكيرات والأحداث والمتصلين الذين تحددهم. وسيظل بإمكانك سماع أي عناصر أخرى تختار تشغيلها، بما في ذلك الموسيقى ومقاطع الفيديو والألعاب."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"لن يتم إزعاجك بالأصوات والاهتزاز، باستثناء المُنبِّهات. وسيظل بإمكانك سماع أي عناصر أخرى تختار تشغيلها، بما في ذلك الموسيقى ومقاطع الفيديو والألعاب."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"تخصيص"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"سيؤدي هذا إلى حظر جميع الأصوات والاهتزازات، بما في ذلك ما يرد من التنبيهات والموسيقى والفيديو والألعاب. إلا أنه سيظل بإمكانك إجراء مكالمات هاتفية."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"سيؤدي هذا إلى منع صدور جميع الأصوات والاهتزازات، بما في ذلك المُنبِّهات والموسيقى ومقاطع الفيديو والألعاب. وسيظل بإمكانك إجراء مكالمات هاتفية."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"سيؤدي هذا إلى حظر جميع الأصوات والاهتزازات، بما في ذلك ما يرد من التنبيهات والموسيقى والفيديو والألعاب."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"الإشعارات الأقل إلحاحًا أدناه"</string>
@@ -464,7 +464,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"مزيد من المعلومات"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"لقد اتصلت بتطبيق <xliff:g id="VPN_APP">%1$s</xliff:g>، الذي يمكن أن يراقب نشاط الشبكة، بما في ذلك رسائل البريد الإلكتروني والتطبيقات والمواقع الإلكترونية."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"‏فتح إعدادات الشبكة الافتراضية الخاصة (VPN)"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"‏فتح إعدادات الشبكة الافتراضية الخاصة (VPN)"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"فتح بيانات الاعتماد الموثوق بها"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"شغَّل المشرف ميزة تسجيل بيانات الشبكة، والتي يتم من خلالها مراقبة حركة البيانات على جهازك.\n\nللحصول على المزيد من المعلومات، اتصل بالمشرف."</string>
@@ -480,7 +480,7 @@
     <string name="keyguard_indication_trust_managed" msgid="8319646760022357585">"<xliff:g id="TRUST_AGENT">%1$s</xliff:g> قيد التشغيل"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"سيظل الجهاز مقفلاً إلى أن يتم إلغاء قفله يدويًا"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"الحصول على الإشعارات بشكل أسرع"</string>
-    <string name="hidden_notifications_text" msgid="2326409389088668981">"الاطلاع عليها قبل إلغاء القفل"</string>
+    <string name="hidden_notifications_text" msgid="2326409389088668981">"الاطّلاع عليها قبل إلغاء القفل"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"لا، شكرًا"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"إعداد"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
@@ -564,12 +564,12 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"لا يحتوي هذا التطبيق على فئات إشعار"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"لا يمكن إيقاف الإشعارات من هذا التطبيق"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="zero">1 من إجمالي <xliff:g id="NUMBER_1">%d</xliff:g> فئة إشعار من هذا التطبيق</item>
-      <item quantity="two">1 من إجمالي فئتي إشعار (<xliff:g id="NUMBER_1">%d</xliff:g>) من هذا التطبيق</item>
-      <item quantity="few">1 من إجمالي <xliff:g id="NUMBER_1">%d</xliff:g> فئات إشعار من هذا التطبيق</item>
-      <item quantity="many">1 من إجمالي <xliff:g id="NUMBER_1">%d</xliff:g> فئة إشعار من هذا التطبيق</item>
-      <item quantity="other">1 من إجمالي <xliff:g id="NUMBER_1">%d</xliff:g> فئة إشعار من هذا التطبيق</item>
-      <item quantity="one">1 من إجمالي <xliff:g id="NUMBER_0">%d</xliff:g> فئة إشعار من هذا التطبيق</item>
+      <item quantity="zero">1 من إجمالي <xliff:g id="NUMBER_1">%s</xliff:g> فئة إشعار من هذا التطبيق</item>
+      <item quantity="two">1 من إجمالي فئتي إشعار (<xliff:g id="NUMBER_1">%s</xliff:g>) من هذا التطبيق</item>
+      <item quantity="few">1 من إجمالي <xliff:g id="NUMBER_1">%s</xliff:g> فئات إشعار من هذا التطبيق</item>
+      <item quantity="many">1 من إجمالي <xliff:g id="NUMBER_1">%s</xliff:g> فئة إشعار من هذا التطبيق</item>
+      <item quantity="other">1 من إجمالي <xliff:g id="NUMBER_1">%s</xliff:g> فئة إشعار من هذا التطبيق</item>
+      <item quantity="one">1 من إجمالي <xliff:g id="NUMBER_0">%s</xliff:g> فئة إشعار من هذا التطبيق</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>، <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -609,8 +609,8 @@
       <item quantity="one">دقيقة واحدة</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"استخدام البطارية"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"وضع توفير شحن البطارية غير متاح أثناء الشحن."</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"توفير شحن البطارية"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"توفير شحن البطارية غير متاح أثناء الشحن"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"توفير شحن البطارية"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"لخفض مستوى الأداء وبيانات الخلفية"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"الزر <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -659,7 +659,7 @@
     <string name="volume_dnd_silent" msgid="4363882330723050727">"اختصار أزرار مستوى الصوت"</string>
     <string name="volume_up_silent" msgid="7141255269783588286">"تعطيل \"عدم الإزعاج\" عند رفع مستوى الصوت"</string>
     <string name="battery" msgid="7498329822413202973">"البطارية"</string>
-    <string name="clock" msgid="7416090374234785905">"ساعة"</string>
+    <string name="clock" msgid="7416090374234785905">"الساعة"</string>
     <string name="headset" msgid="4534219457597457353">"سماعة الرأس"</string>
     <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"تم توصيل سماعات رأس"</string>
     <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"تم توصيل سماعات رأس"</string>
@@ -750,9 +750,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"تصغير"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"إغلاق"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"اسحب لأسفل للإلغاء"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"قائمة صورة داخل صورة"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"القائمة"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> يظهر في صورة داخل صورة"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"إذا كنت لا تريد أن يستخدم <xliff:g id="NAME">%s</xliff:g> هذه الميزة، فانقر لفتح الإعدادات، ثم اختر تعطيلها."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"إذا كنت لا تريد أن يستخدم <xliff:g id="NAME">%s</xliff:g> هذه الميزة، فانقر لفتح الإعدادات، ثم أوقِف تشغيل هذه الميزة."</string>
     <string name="pip_play" msgid="1417176722760265888">"تشغيل"</string>
     <string name="pip_pause" msgid="8881063404466476571">"إيقاف مؤقت"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"التخطي إلى التالي"</string>
@@ -778,6 +778,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"القائمة"</string>
     <string name="tuner_app" msgid="3507057938640108777">"تطبيق <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"التنبيهات"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"البطارية"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"لقطات الشاشة"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"رسائل عامة"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"سعة التخزين"</string>
@@ -798,4 +799,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"التطبيقات التي تعمل في الخلفية"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"انقر للحصول على تفاصيل حول البطارية واستخدام البيانات"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"هل تريد إيقاف تشغيل بيانات الجوال؟"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"لا يمكن للإعدادات التحقق من ردك لأن هناك تطبيقًا يحجب طلب الإذن."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 3e3d331..9e49466 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Kompüterin RSA barmaq izi: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Bu kompüterdən həmişə icazə verilsin"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB debaq prosesinə icazə verilmir"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Hazırda bu cihaza daxil olmuş istifadəçi USB debaq prosesini deaktiv edə bilməz. Bu funksiyanı istifadə etmək üçün Admin istifadəçiyə keçin."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Hazırda bu cihaza daxil olmuş istifadəçi USB sazlama prosesini aktiv edə bilməz. Bu funksiyadan istifadə etmək üçün əsas istifadəçi hesaba daxil olmalıdır."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Ekranı doldurmaq üçün yaxınlaşdır"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Ekranı doldurmaq üçün uzat"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Skrinşot yadda saxlanılır..."</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Axtar"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün yuxarı sürüşdürün."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün sola sürüşdür."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Seçdiyiniz siqnal, xatırladıcı, tədbir və zənglər istisna olmaqla səslər və vibrasiyalar Sizi narahat etməyəcək. Musiqi, video və oyunlar da daxil olmaqla oxutmaq istədiyiniz hər şeyi eşidəcəksiniz."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Siqnallar istisna olmaqla səslər və vibrasiyalar Sizi narahat etməyəcək. Musiqi, video və oyunlar da daxil olmaqla oxutmaq istədiyiniz hər şeyi eşidəcəksiniz."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Seçdiyiniz siqnal, xatırladıcı, tədbir və zənglər istisna olmaqla səslər və vibrasiyalar Sizi narahat etməyəcək. Musiqi, video və oyunlar da daxil olmaqla oxutmaq istədiyiniz hər şeyi eşidəcəksiniz."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Siqnallar istisna olmaqla səslər və vibrasiyalar Sizi narahat etməyəcək. Musiqi, video və oyunlar da daxil olmaqla oxutmaq istədiyiniz hər şeyi eşidəcəksiniz."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Fərdiləşdirin"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Bu, zəng, musiqi, video və oyunlar daxil olmaqla BÜTÜN səs və vibrasiyanı bloklayır. Yenə də telefon zəngi edə bilərsiniz."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Bu, zəng, musiqi, video və oyunlar daxil olmaqla BÜTÜN səs və vibrasiyanı blok edir. Hələ də telefon zəngi edə biləcəksiniz."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Bu, zəng, musiqi, video və oyunlar daxil olmaqla BÜTÜN səs və vibrasiyanı bloklayır."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Daha az təcili bildirişlər aşağıdadır"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Ətraflı məlumat"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g> tətbiqinə qoşulmusunuz və o, e-məktublar, tətbiq və veb saytlar daxil olmaqla şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" ("</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN Ayarlarını açın"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN ayarlarını açın"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Etibarlı kredensialları açın"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Admin, cihazdakı trafikə nəzarət edən şəbəkə loqlarını aktiv etdi.\n\nƏtraflı məlumat üçün administrator ilə əlaqə saxlayın."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Bu tətbiqin bildiriş kateqoriyası yoxdur"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Bu tətbiqin bildirişləri deaktiv edilə bilməz"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">Bu tətbiqin <xliff:g id="NUMBER_1">%d</xliff:g> bildiriş kateqoriyasından 1 kanal</item>
-      <item quantity="one">Bu tətbiqin <xliff:g id="NUMBER_0">%d</xliff:g> bildiriş kateqoriyasından 1 kanal</item>
+      <item quantity="other">Bu tətbiqin <xliff:g id="NUMBER_1">%s</xliff:g> bildiriş kateqoriyasından 1 kanal</item>
+      <item quantity="one">Bu tətbiqin <xliff:g id="NUMBER_0">%s</xliff:g> bildiriş kateqoriyasından 1 kanal</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d dəqiqə</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Batareya istifadəsi"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Enerji Qənaəti doldurulma zamanı əlçatan deyil"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Enerji Qənaəti"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Batareya qənaəti doldurulma zamanı əlçatan deyil"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Batareya qənaəti"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Performansı azaldır və arxa fon datasını məhdudlaşdırır"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Düymə <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Əsas səhifə"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Kiçildin"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Bağlayın"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Rədd etmək üçün aşağı çəkin"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Şəkil-içində-şəkil menyusu"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menyu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> şəkil içində şəkildədir"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> adlı şəxsin bu funksiyadan istifadə etməyini istəmirsinizsə, ayarları açmaq və deaktiv etmək üçün klikləyin."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> tətbiqinin bu funksiyadan istifadə etməyini istəmirsinizsə, ayarları açmaq və deaktiv etmək üçün klikləyin."</string>
     <string name="pip_play" msgid="1417176722760265888">"Oxudun"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Fasilə verin"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Növbətiyə keçin"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menyu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> tətbiqi"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Siqnallar"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Batareya"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Skrinşotlar"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Ümumi Mesajlar"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Yaddaş"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Arxa fonda işləyən tətbiqlər"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Batareya və data istifadəsi haqqında ətraflı məlumat üçün klikləyin"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobil data söndürülsün?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Tətbiq icazə sorğusunu gizlətdiyi üçün Ayarlar cavabınızı doğrulaya bilməz."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index 6d41dab..bf2ff90 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -65,7 +65,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Digitalni otisak RSA ključa ovog računara je:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Uvek dozvoli sa ovog računara"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Otklanjanje grešaka na USB-u nije dozvoljeno"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Korisnik koji je trenutno prijavljen na ovaj uređaj ne može da uključi otklanjanje grešaka na USB-u. Da biste koristili ovu funkciju, prebacite na korisnika sa administratorskim pravima."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Korisnik koji je trenutno prijavljen na ovaj uređaj ne može da uključi otklanjanje grešaka na USB-u. Da biste koristili ovu funkciju, prebacite na primarnog korisnika."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zumiraj na celom ekranu"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Razvuci na ceo ekran"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Čuvanje snimka ekrana..."</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Pretraga"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Prevucite nagore za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Prevucite ulevo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Neće vas uznemiravati zvukovi i vibracije osim za alarme, podsetnike, događaje i pozivaoce koje navedete. I dalje ćete čuti sve što odaberete da pustite, uključujući muziku, video snimke i igre."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Neće vas uznemiravati zvukovi i vibracije osim za alarme. I dalje ćete čuti sve što odaberete da pustite, uključujući muziku, video snimke i igre."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Neće vas uznemiravati zvukovi i vibracije osim za alarme, podsetnike, događaje i pozivaoce koje navedete. I dalje ćete čuti sve što odaberete da pustite, uključujući muziku, video snimke i igre."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Neće vas uznemiravati zvukovi i vibracije osim za alarme. I dalje ćete čuti sve što odaberete da pustite, uključujući muziku, video snimke i igre."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Prilagodi"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Ovo blokira SVE zvukove i vibracije uključujući alarme, muziku, video snimke i igre. I dalje ćete moći da upućujete pozive."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Ovo blokira SVE zvukove i vibracije uključujući alarme, muziku, video snimke i igre. I dalje ćete moći da upućujete pozive."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Ovo blokira SVE zvukove i vibracije uključujući alarme, muziku, video snimke i igre."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Manje hitna obaveštenja su u nastavku"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saznajte više"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Povezani ste sa aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>, koja može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otvorite podešavanja VPN-a"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Otvori podešavanja VPN-a"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Otvorite pouzdane akreditive"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Administrator je uključio evidentiranje mreže, koje prati saobraćaj na uređaju.\n\nKontaktirajte administratora za više informacija."</string>
@@ -558,9 +558,9 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Ova aplikacija nema kategorije obaveštenja"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Obaveštenja iz ove aplikacije ne mogu da se isključe"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 od <xliff:g id="NUMBER_1">%d</xliff:g> kategorije obaveštenja za ovu aplikaciju</item>
-      <item quantity="few">1 od <xliff:g id="NUMBER_1">%d</xliff:g> kategorije obaveštenja za ovu aplikaciju</item>
-      <item quantity="other">1 od <xliff:g id="NUMBER_1">%d</xliff:g> kategorija obaveštenja za ovu aplikaciju</item>
+      <item quantity="one">1 od <xliff:g id="NUMBER_1">%s</xliff:g> kategorije obaveštenja za ovu aplikaciju</item>
+      <item quantity="few">1 od <xliff:g id="NUMBER_1">%s</xliff:g> kategorije obaveštenja za ovu aplikaciju</item>
+      <item quantity="other">1 od <xliff:g id="NUMBER_1">%s</xliff:g> kategorija obaveštenja za ovu aplikaciju</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -591,8 +591,8 @@
       <item quantity="other">%d minuta</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Potrošnja baterije"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Ušteda baterije nije dostupna tokom punjenja"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Ušteda baterije"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Ušteda baterije nije dostupna tokom punjenja"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Ušteda baterije"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Smanjuje performanse i pozadinske podatke"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Dugme <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Taster Početna"</string>
@@ -732,9 +732,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Umanji"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Zatvori"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Prevucite nadole da biste odbili"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Meni Slika u slici"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Meni"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> je slika u slici"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Ako ne želite da <xliff:g id="NAME">%s</xliff:g> koristi ovu funkciju, dodirnite da biste otvorili podešavanja i isključili je."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Ako ne želite da <xliff:g id="NAME">%s</xliff:g> koristi ovu funkciju, dodirnite da biste otvorili podešavanja i isključili je."</string>
     <string name="pip_play" msgid="1417176722760265888">"Pusti"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pauziraj"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Pređi na sledeće"</string>
@@ -760,6 +760,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Meni"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplikacija <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Obaveštenja"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Baterija"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Snimci ekrana"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Opšte poruke"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Memorijski prostor"</string>
@@ -780,4 +781,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacije pokrenute u pozadini"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Dodirnite za detalje o bateriji i potrošnji podataka"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Želite da onemogućite mobilne podatke?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Podešavanja ne mogu da verifikuju vaš odgovor jer aplikacija skriva zahtev za dozvolu."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index f1bf417..9006a5e 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -66,7 +66,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Адбiтак ключа RSA на гэтым камп\'ютары:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Заўсёды дазваляць з гэтага камп\'ютара"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Адладка USB не дапускаецца"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Карыстальнік, які зараз увайшоў на гэту прыладу, не можа ўключыць адладку USB. Каб выкарыстоўваць гэту функцыю, пераключыцеся на карыстальніка-адміністратара."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Карыстальнік, які зараз увайшоў у гэту прыладу, не можа ўключыць адладку USB. Каб выкарыстоўваць гэту функцыю, пераключыцеся на асноўнага карыстальніка."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Павял. на ўвесь экран"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Расцягн. на ўвесь экран"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Захаванне скрыншота..."</string>
@@ -359,10 +359,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Пошук"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Правядзіце пальцам уверх, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Правядзіце пальцам улева, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Вас не будуць турбаваць гукі і вібрацыя, за выключэннем будзільнікаў, напамінаў, падзей і выбраных вамі абанентаў. Вы будзеце чуць усё, што ўключыце, у тым ліку музыку, відэа і гульні."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Вас не будуць турбаваць гукі і вібрацыя, за выключэннем будзільнікаў. Вы будзеце чуць усё, што ўключыце, у тым ліку музыку, відэа і гульні."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Вас не будуць турбаваць гукі і вібрацыя, за выключэннем будзільнікаў, напамінаў, падзей і выбраных вамі абанентаў. Вы будзеце чуць усё, што ўключыце, у тым ліку музыку, відэа і гульні."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Вас не будуць турбаваць гукі і вібрацыя, за выключэннем будзільнікаў. Вы будзеце чуць усё, што ўключыце, у тым ліку музыку, відэа і гульні."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Дапасаваць"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Гэта заблакіруе ЎСЕ гукі і вібрацыі, у тым ліку ад будзільнікаў, музыкі, відэа і гульняў. Вы па-ранейшаму зможаце тэлефанаваць."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Гэта заблакіруе ЎСЕ гукі і вібрацыю, у тым ліку ад будзільнікаў, музыкі, відэа і гульняў. Вы па-ранейшаму зможаце рабіць тэлефонныя выклікі."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Гэта заблакіруе ЎСЕ гукі і вібрацыі, у тым ліку ад будзільнікаў, музыкі, відэа і гульняў."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Менш тэрміновыя апавяшчэнні ніжэй"</string>
@@ -462,7 +462,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Даведацца больш"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Вы падключаны да праграмы <xliff:g id="VPN_APP">%1$s</xliff:g>, якая можа сачыць за вашай сеткавай дзейнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" ,"</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Адкрыйце налады VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Адкрыйце налады VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Адкрыць давераныя ўліковыя даныя"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Ваш адміністратар уключыў вядзенне журнала сеткі, з дапамогай якога адсочваецца трафік на вашай прыладзе.\n\nДля атрымання дадатковай інфармацыі звярніцеся да адміністратара."</string>
@@ -562,10 +562,10 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"У гэтай праграме няма катэгорый апавяшчэнняў"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Апавяшчэнні ад гэтай праграмы нельга адключыць"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 з <xliff:g id="NUMBER_1">%d</xliff:g> катэгорыі апавяшчэнняў у гэтай праграме</item>
-      <item quantity="few">1 з <xliff:g id="NUMBER_1">%d</xliff:g> катэгорый апавяшчэнняў у гэтай праграме</item>
-      <item quantity="many">1 з <xliff:g id="NUMBER_1">%d</xliff:g> катэгорый апавяшчэнняў у гэтай праграме</item>
-      <item quantity="other">1 з <xliff:g id="NUMBER_1">%d</xliff:g> катэгорыі апавяшчэнняў у гэтай праграме</item>
+      <item quantity="one">1 з <xliff:g id="NUMBER_1">%s</xliff:g> катэгорыі апавяшчэнняў у гэтай праграме</item>
+      <item quantity="few">1 з <xliff:g id="NUMBER_1">%s</xliff:g> катэгорый апавяшчэнняў у гэтай праграме</item>
+      <item quantity="many">1 з <xliff:g id="NUMBER_1">%s</xliff:g> катэгорый апавяшчэнняў у гэтай праграме</item>
+      <item quantity="other">1 з <xliff:g id="NUMBER_1">%s</xliff:g> катэгорыі апавяшчэнняў у гэтай праграме</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -599,8 +599,8 @@
       <item quantity="other">%d хвіліны</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Выкарыстанне зараду"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Эканомія зараду акумулятара недаступная падчас зарадкі"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Эканомія зараду"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Эканомія зараду акумулятара недаступная падчас зарадкі"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Эканомія зараду акумулятара"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Памяншае прадукцыйнасць і фонавую перадачу даных"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Кнопка <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -740,9 +740,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Згарнуць"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Закрыць"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Перацягніце ўніз, каб адхіліць"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Меню \"Відарыс у відарысе\""</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Меню"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> з’яўляецца відарысам у відарысе"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Калі вы не хочаце, каб праграма <xliff:g id="NAME">%s</xliff:g> выкарыстоўвала гэту функцыю, дакраніцеся, каб адкрыць налады і адключыць яе."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Калі вы не хочаце, каб праграма <xliff:g id="NAME">%s</xliff:g> выкарыстоўвала гэту функцыю, дакраніцеся, каб адкрыць налады і адключыць яе."</string>
     <string name="pip_play" msgid="1417176722760265888">"Прайграць"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Прыпыніць"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Перайсці да наступнага"</string>
@@ -768,6 +768,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Меню"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Праграма <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Абвесткi"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Акумулятар"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Здымкі экрана"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Агульныя паведамленні"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Захоўванне"</string>
@@ -788,4 +789,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Праграмы, якія працуюць у фонавым рэжыме"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Дакраніцеся, каб даведацца пра выкарыстанне трафіка і акумулятара"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Выключыць мабільную перадачу даных?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Праграма хавае запыт на дазвол, таму ваш адказ немагчыма спраўдзіць у Наладах."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 974b875..c79b527 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Отпечатъкът на RSA ключа на компютъра е:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Винаги да се разрешава от този компютър"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Отстраняването на грешки през USB не е разрешено"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Потребителят, който понастоящем е влязъл в това устройство, не може да включи функцията за отстраняване на грешки през USB. За да я използвате, моля, превключете към администратор."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Потребителят, който понастоящем е влязъл в това устройство, не може да включи функцията за отстраняване на грешки през USB. За да я използвате, превключете към основния потребител."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Мащаб – запълва екрана"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Разпъване – запълва екрана"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Екранната снимка се запазва..."</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Търсене"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Плъзнете нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Плъзнете наляво за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Няма да бъдете обезпокоявани от звуци и вибрирания освен от будилници, напомняния, събития и обаждания от посочени от вас контакти. Пак ще чувате всичко, което изберете да се пусне, включително музика, видеоклипове и игри."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Няма да бъдете обезпокоявани от звуци и вибрирания освен от будилници. Пак ще чувате всичко, което изберете да се пусне, включително музика, видеоклипове и игри."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Няма да бъдете обезпокоявани от звуци и вибрирания освен от будилници, напомняния, събития и обаждания от посочени от вас контакти. Пак ще чувате всичко, което изберете да се пусне, включително музика, видеоклипове и игри."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Няма да бъдете обезпокоявани от звуци и вибрирания освен от будилници. Ще чувате обаче всичко, което изберете пуснете, включително музика, видеоклипове и игри."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Персонализиране"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Този режим блокира ВСИЧКИ звуци и вибрирания, включително от будилници, музика, видеоклипове и игри. Пак ще можете да извършвате телефонни обаждания."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Този режим блокира ВСИЧКИ звуци и вибрирания, включително от будилници, музика, видеоклипове и игри. Пак ще можете да извършвате телефонни обаждания."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Този режим блокира ВСИЧКИ звуци и вибрирания, включително от будилници, музика, видеоклипове и игри."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Ппоказване на по-малко спешните известия по-долу"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Научете повече"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Установена е връзка с приложението <xliff:g id="VPN_APP">%1$s</xliff:g>, което може да наблюдава активността ви в мрежата, вкл. имейли, приложения и уебсайтове."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Отваряне на настройките за VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Отваряне на настройките за VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Отваряне на надеждните идентификационни данни"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Администраторът ви е включил функцията за регистриране на мрежовата активност, която следи трафика на устройството ви.\n\nЗа повече информация се свържете с администратора си."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"За това приложение няма категории на известията"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Известията от това приложение не могат да бъдат изключени"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 от <xliff:g id="NUMBER_1">%d</xliff:g> категории известия от това приложение</item>
-      <item quantity="one">1 от <xliff:g id="NUMBER_0">%d</xliff:g> категория известия от това приложение</item>
+      <item quantity="other">1 от <xliff:g id="NUMBER_1">%s</xliff:g> категории известия от това приложение</item>
+      <item quantity="one">1 от <xliff:g id="NUMBER_0">%s</xliff:g> категория известия от това приложение</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"„<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>“, „<xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>“"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d минута</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Ползв. на батерията"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Режимът за запазване на батерията не е налице при зареждане"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Режим за запазване на батерията"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Режимът за запазване на батерията не работи при зареждане"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Режим за запазване на батерията"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Намалява ефективността и данните на заден план"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Бутон „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Начало"</string>
@@ -614,7 +614,7 @@
     <string name="keyboard_key_insert" msgid="8530501581636082614">"Insert"</string>
     <string name="keyboard_key_num_lock" msgid="5052537581246772117">"Num Lock"</string>
     <string name="keyboard_key_numpad_template" msgid="8729216555174634026">"Цифрова клавиатура – <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="keyboard_shortcut_group_system" msgid="6472647649616541064">"Системни"</string>
+    <string name="keyboard_shortcut_group_system" msgid="6472647649616541064">"Системни настройки"</string>
     <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Начало"</string>
     <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Скорошни"</string>
     <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Назад"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Намаляване"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Затваряне"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Преместете надолу с плъзгане, за да отхвърлите"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Меню за режима „Картина в картината“"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Меню"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> е в режима „Картина в картината“"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Ако не искате <xliff:g id="NAME">%s</xliff:g> да използва тази функция, докоснете, за да отворите настройките, и я изключете."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Ако не искате <xliff:g id="NAME">%s</xliff:g> да използва тази функция, докоснете, за да отворите настройките, и я изключете."</string>
     <string name="pip_play" msgid="1417176722760265888">"Пускане"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Поставяне на пауза"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Към следващия елемент"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Меню"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Приложение <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Сигнали"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Батерия"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Екранни снимки"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Общи съобщения"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Хранилище"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Приложения, работещи на заден план"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Докоснете за информация относно използването на батерията и преноса на данни"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Да се изключат ли мобилните данни?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"От Настройки не може да се получи потвърждение за отговора ви, защото заявката за разрешение се прикрива от приложение."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-bn-land/strings.xml b/packages/SystemUI/res/values-bn-land/strings.xml
index ac873fa..bf53a77 100644
--- a/packages/SystemUI/res/values-bn-land/strings.xml
+++ b/packages/SystemUI/res/values-bn-land/strings.xml
@@ -19,5 +19,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="toast_rotation_locked" msgid="7609673011431556092">"এখন ভূদৃশ্য সজ্জাতে স্ক্রীণ লক করা হয়েছে৷"</string>
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"এখন ল্যান্ডস্কেপ সজ্জাতে স্ক্রিন লক করা হয়েছে৷"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index d2d29eb..de8f0cf 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -22,7 +22,7 @@
     <string name="app_label" msgid="7164937344850004466">"সিস্টেম UI"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"সাফ করুন"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"তালিকা থেকে সরান"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"অ্যাপ্লিকেশানের তথ্য"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"অ্যাপের তথ্য"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"আপনার সাম্প্রতিক স্ক্রীনগুলো এখানে দেখা যাবে"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"সাম্প্রতিক অ্যাপ্লিকেশানগুলি খারিজ করুন"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
@@ -55,7 +55,7 @@
     <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"এই <xliff:g id="APPLICATION">%1$s</xliff:g> অ্যাপ্লিকেশানটিকে কি USB যন্ত্রাংশ অ্যাক্সেস করার অনুমতি দেবেন?"</string>
     <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"যখন এই USB ডিভাইসটি সংযুক্ত থাকে তখন কি <xliff:g id="ACTIVITY">%1$s</xliff:g> খুলবেন?"</string>
     <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"যখন এই USB যন্ত্রাংশটি সংযুক্ত থাকে তখন কি <xliff:g id="ACTIVITY">%1$s</xliff:g> খুলবেন?"</string>
-    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ইনস্টল থাকা কোনো অ্যাপ্লিকেশান এই USB যন্ত্রাংশের সাথে কাজ করে না৷ <xliff:g id="URL">%1$s</xliff:g> এ এই যন্ত্রাংশের সম্পর্কে আরো জানুন৷"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ইনস্টল থাকা কোনো অ্যাপ্লিকেশান এই USB যন্ত্রাংশের সাথে কাজ করে না৷ <xliff:g id="URL">%1$s</xliff:g> এ এই যন্ত্রাংশের সম্পর্কে আরও জানুন৷"</string>
     <string name="title_usb_accessory" msgid="4966265263465181372">"USB যন্ত্রাংশ"</string>
     <string name="label_view" msgid="6304565553218192990">"দেখুন"</string>
     <string name="always_use_device" msgid="1450287437017315906">"এই USB ডিভাইসের জন্য এটি ডিফল্টরুপে ব্যবহার করুন"</string>
@@ -64,28 +64,28 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"কম্পিউটারের RSA কী আঙ্গুলের ছাপ হল:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"এই কম্পিউটার থেকে সর্বদা অনুমতি দিন"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB ডিবাগিং অনুমোদিত নয়"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"ব্যবহারকারী বর্তমানে এই ডিভাইসটিতে প্রবেশ করেছেন তাই USB ডিবাগিং চালু করা যাবে না। এই বৈশিষ্ট্যটি ব্যবহার করতে, অনুগ্রহ করে প্রশাসক ব্যবহারকারীতে পাল্টান।"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"ব্যবহারকারী এখন এই ডিভাইসে সাইন-ইন করেছেন তাই USB ডিবাগিং চালু করা যাবে না। এই বৈশিষ্ট্যটি ব্যবহার করতে, প্রাথমিক ব্যবহারকারীতে পাল্টে নিন।"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"স্ক্রীণ পূরণ করতে জুম করুন"</string>
-    <string name="compat_mode_off" msgid="4434467572461327898">"পূর্ণ স্ক্রীণে প্রসারিত করুন"</string>
-    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"স্ক্রীনশট সংরক্ষণ করা হচ্ছে..."</string>
-    <string name="screenshot_saving_title" msgid="8242282144535555697">"স্ক্রীনশট সংরক্ষণ করা হচ্ছে..."</string>
-    <string name="screenshot_saving_text" msgid="2419718443411738818">"স্ক্রীনশট সংরক্ষণ করা হচ্ছে৷"</string>
-    <string name="screenshot_saved_title" msgid="6461865960961414961">"স্ক্রীনশট নেওয়া হযেছে৷"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"ফুল স্ক্রিন করুন"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"স্ক্রিনশট সেভ করা হচ্ছে..."</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"স্ক্রিনশট সেভ করা হচ্ছে..."</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"স্ক্রিনশট সেভ করা হচ্ছে৷"</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"স্ক্রিনশট নেওয়া হযেছে৷"</string>
     <string name="screenshot_saved_text" msgid="2685605830386712477">"আপনার স্ক্রিনশট দেখতে আলতো চাপ দিন৷"</string>
-    <string name="screenshot_failed_title" msgid="705781116746922771">"স্ক্রীনশট নেওয়া যায়নি৷"</string>
-    <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"স্ক্রীনশট সংরক্ষণের সময়ে সমস্যা হয়েছে৷"</string>
-    <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"সঞ্চয়স্থান সীমিত থাকায় স্ক্রীনশটটি সংরক্ষণ করা যাবে না৷"</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"স্ক্রিনশট নেওয়া যায়নি৷"</string>
+    <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"স্ক্রিনশট সেভের সময়ে সমস্যা হয়েছে৷"</string>
+    <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"স্টোরেজ সীমিত থাকায় স্ক্রিনশটটি সেভ করা যাবে না৷"</string>
     <string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"এই অ্যাপ বা আপনার প্রতিষ্ঠান স্ক্রিনশট নেওয়ার অনুমতি দেয়নি"</string>
     <string name="usb_preference_title" msgid="6551050377388882787">"USB ফাইল স্থানান্তরের বিকল্পগুলি"</string>
-    <string name="use_mtp_button_title" msgid="4333504413563023626">"একটি মিডিয়া প্লেয়ার হিসাবে মাউন্ট করুন (MTP)"</string>
-    <string name="use_ptp_button_title" msgid="7517127540301625751">"একটি ক্যামেরা হিসাবে মাউন্ট করুন (PTP)"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"একটি মিডিয়া প্লেয়ার হিসেবে মাউন্ট করুন (MTP)"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"একটি ক্যামেরা হিসেবে মাউন্ট করুন (PTP)"</string>
     <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac এর জন্য Android এর ফাইল স্তানান্তর অ্যাপ্লিকেশান ইনস্টল করুন"</string>
     <string name="accessibility_back" msgid="567011538994429120">"ফিরুন"</string>
     <string name="accessibility_home" msgid="8217216074895377641">"হোম"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"মেনু"</string>
     <string name="accessibility_accessibility_button" msgid="7601252764577607915">"অ্যাক্সেসযোগ্যতা"</string>
     <string name="accessibility_recent" msgid="5208608566793607626">"এক নজরে"</string>
-    <string name="accessibility_search_light" msgid="1103867596330271848">"অনুসন্ধান করুন"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"খুঁজুন"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"ক্যামেরা"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"ফোন"</string>
     <string name="accessibility_voice_assist_button" msgid="487611083884852965">"ভয়েস সহায়তা"</string>
@@ -96,7 +96,7 @@
     <string name="phone_label" msgid="2320074140205331708">"ফোন খুলুন"</string>
     <string name="voice_assist_label" msgid="3956854378310019854">"ভয়েস সহায়তা খুলুন"</string>
     <string name="camera_label" msgid="7261107956054836961">"ক্যামেরা খুলুন"</string>
-    <string name="recents_caption_resize" msgid="3517056471774958200">"নতুন কার্য লেআউট নির্বাচন করুন"</string>
+    <string name="recents_caption_resize" msgid="3517056471774958200">"নতুন কার্য লেআউট বেছে নিন"</string>
     <string name="cancel" msgid="6442560571259935130">"বাতিল করুন"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"সামঞ্জস্যের জুম বোতাম৷"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ছোট থেকে বৃহৎ স্ক্রীণে জুম করুন৷"</string>
@@ -258,13 +258,13 @@
     <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"বিজ্ঞপ্তির সেটিংস"</string>
     <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> সেটিংস"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"স্ক্রীন স্বয়ংক্রিয়ভাবে ঘুরে যাবে৷"</string>
-    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"ভূদৃশ্য সজ্জাতে স্ক্রিন লক করা আছে৷"</string>
-    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"প্রতিকৃতি সজ্জাতে স্ক্রিন লক করা আছে৷"</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"ল্যান্ডস্কেপ সজ্জাতে স্ক্রিন লক করা আছে৷"</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"পোর্ট্রেট অবস্থায় স্ক্রিন লক করা আছে৷"</string>
     <string name="accessibility_rotation_lock_off_changed" msgid="8134601071026305153">"স্ক্রিন এখন স্বয়ংক্রিয়ভাবে ঘুরবে।"</string>
-    <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"এখন ভূদৃশ্য সজ্জাতে স্ক্রিন লক হয়েছে।"</string>
-    <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"এখন প্রতিকৃতি সজ্জাতে স্ক্রিন লক হয়েছে।"</string>
+    <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"এখন ল্যান্ডস্কেপ সজ্জাতে স্ক্রিন লক হয়েছে।"</string>
+    <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"এখন পোর্ট্রেট অবস্থায় স্ক্রিন লক হয়েছে।"</string>
     <string name="dessert_case" msgid="1295161776223959221">"ডেজার্ট কেস"</string>
-    <string name="start_dreams" msgid="5640361424498338327">"স্ক্রীন সেভার"</string>
+    <string name="start_dreams" msgid="5640361424498338327">"স্ক্রিন সেভার"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"ইথারনেট"</string>
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"বিরক্ত করবেন না"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"শুধুমাত্র অগ্রাধিকার"</string>
@@ -279,8 +279,8 @@
     <string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"স্বতঃ-ঘূর্ণায়মান স্ক্রিন"</string>
     <string name="accessibility_quick_settings_rotation_value" msgid="8187398200140760213">"<xliff:g id="ID_1">%s</xliff:g> মোড"</string>
     <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"ঘূর্ণন লক করা হয়েছে"</string>
-    <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"প্রতিকৃতি"</string>
-    <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"ভূদৃশ্য"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"পোর্ট্রেট"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"ল্যান্ডস্কেপ"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"ইনপুট পদ্ধতি"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"অবস্থান"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"অবস্থান বন্ধ করা আছে"</string>
@@ -307,7 +307,7 @@
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"স্বয়ং"</string>
     <string name="quick_settings_inversion_label" msgid="8790919884718619648">"বিপরীত কোনো রং দিন"</string>
     <string name="quick_settings_color_space_label" msgid="853443689745584770">"রঙ সংশোধন মোড"</string>
-    <string name="quick_settings_more_settings" msgid="326112621462813682">"আরো সেটিংস"</string>
+    <string name="quick_settings_more_settings" msgid="326112621462813682">"আরও সেটিংস"</string>
     <string name="quick_settings_done" msgid="3402999958839153376">"সম্পন্ন হয়েছে"</string>
     <string name="quick_settings_connected" msgid="1722253542984847487">"সংযুক্ত হয়েছে"</string>
     <string name="quick_settings_connected_battery_level" msgid="4136051440381328892">"সংযুক্ত হয়েছে, ব্যাটারি <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
@@ -350,13 +350,13 @@
     <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"পূর্ণ হতে <xliff:g id="CHARGING_TIME">%s</xliff:g> সময় লাগবে"</string>
     <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"চার্জ হচ্ছে না"</string>
     <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"নেটওয়ার্ক নিরীক্ষণ\nকরা হতে পারে"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"অনুসন্ধান করুন"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"খুঁজুন"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> এর জন্য উপরের দিকে স্লাইড করুন৷"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> এর জন্য বাঁ দিকে স্লাইড করুন৷"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"অ্যালার্ম, রিমাইন্ডার, ইভেন্ট, এবং আপনার নির্দিষ্ট করে দেওয়া ব্যক্তিদের কল ছাড়া অন্য কোনও আওয়াজ বা ভাইব্রেশন হবে না। তবে সঙ্গীত, ভিডিও, এবং গেমের আওয়াজ শুনতে পাবেন।"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"অ্যালার্ম ছাড়া অন্য কোনও আওয়াজ বা ভাইব্রেশন হবে না। তবে সঙ্গীত, ভিডিও, এবং গেমের আওয়াজ শুনতে পাবেন।"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"অ্যালার্ম, রিমাইন্ডার, ইভেন্ট, এবং আপনার নির্দিষ্ট করে দেওয়া ব্যক্তিদের কল ছাড়া অন্য কোনও আওয়াজ বা ভাইব্রেশন হবে না। তবে সঙ্গীত, ভিডিও, এবং গেম সহ আপনি যা কিছু চালাবেন তার আওয়াজ শুনতে পাবেন।"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"অ্যালার্ম ছাড়া অন্য কোনও আওয়াজ বা ভাইব্রেশন হবে না। তবে সঙ্গীত, ভিডিও, এবং গেম সহ আপনি যা কিছু চালাবেন তার আওয়াজ শুনতে পাবেন।"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"কাস্টমাইজ করুন"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"এটি অ্যালার্ম, সংগীত, ভিডিও এবং গেমগুলি থেকে আসা সমস্ত রকমের ধ্বনি এবং কম্পনগুলিকে বন্ধ করে৷ আপনি এখনও ফোন কলগুলি করতে পারবেন৷"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"এটি অ্যালার্ম, সংগীত, ভিডিও এবং গেম থেকে আসা সমস্ত রকমের আওয়াজ এবং ভাইব্রেশনকে ব্লক করে দেয়। তবুও আপনি ফোন করতে পারবেন।"</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"এটি অ্যালার্ম, সংগীত, ভিডিও এবং গেমগুলি থেকে আসা সমস্ত রকমের ধ্বনি এবং কম্পনগুলিকে বন্ধ করে৷"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"নিচে অপেক্ষাকৃত কম জরুরী বিজ্ঞপ্তিগুলি"</string>
@@ -397,7 +397,7 @@
     <string name="guest_notification_text" msgid="335747957734796689">"অ্যাপ্লিকেশান এবং ডেটা মুছে ফেলার জন্য অতিথি ব্যবহারকারী সরান।"</string>
     <string name="guest_notification_remove_action" msgid="8820670703892101990">"অতিথি সরান"</string>
     <string name="user_logout_notification_title" msgid="1453960926437240727">"ব্যবহারকারীকে লগ-আউট করুন"</string>
-    <string name="user_logout_notification_text" msgid="3350262809611876284">"বর্তমান ব্যবহারকারীকে লগ আউট করুন"</string>
+    <string name="user_logout_notification_text" msgid="3350262809611876284">"বর্তমান ব্যবহারকারীকে লগ-আউট করুন"</string>
     <string name="user_logout_notification_action" msgid="1195428991423425062">"ব্যবহারকারীকে লগ-আউট করুন"</string>
     <string name="user_add_user_title" msgid="4553596395824132638">"নতুন ব্যবহারকারীকে যোগ করবেন?"</string>
     <string name="user_add_user_message_short" msgid="2161624834066214559">"আপনি একজন নতুন ব্যবহারকারী যোগ করলে তাকে তার জায়গা সেট আপ করে নিতে হবে৷\n\nযেকোনো ব্যবহারকারী অন্য সব ব্যবহারকারীর জন্য অ্যাপ্লিকেশান আপডেট করতে পারবেন৷"</string>
@@ -435,15 +435,15 @@
     <string name="monitoring_title" msgid="169206259253048106">"নেটওয়ার্ক নিরীক্ষণ"</string>
     <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
     <string name="monitoring_subtitle_network_logging" msgid="3341264304793193386">"নেটওয়ার্ক লগিং"</string>
-    <string name="monitoring_subtitle_ca_certificate" msgid="3874151893894355988">"CA শংসাপত্র"</string>
+    <string name="monitoring_subtitle_ca_certificate" msgid="3874151893894355988">"CA সার্টিফিকেট"</string>
     <string name="disable_vpn" msgid="4435534311510272506">"VPN অক্ষম করুন"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN এর সংযোগ বিচ্ছিন্ন করুন"</string>
     <string name="monitoring_button_view_policies" msgid="100913612638514424">"নীতিগুলি দেখুন"</string>
     <string name="monitoring_description_named_management" msgid="5281789135578986303">"আপনার ডিভাইসটি <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> এর দ্বারা পরিচালিত হয়।\n\nআপনার প্রশাসক এই ডিভাইসের সেটিংস, কর্পোরেট অ্যাক্সেস, অ্যাপ, ডিভাইসের সাথে সম্পর্কিত ডেটা এবং ডিভাইসের অবস্থান তথ্য নিরীক্ষণ ও পরিচালনা করতে পারেন।\n\nআরও তথ্যের জন্য আপনার প্রশাসকের সাথে যোগাযোগ করুন।"</string>
     <string name="monitoring_description_management" msgid="4573721970278370790">"আপনার ডিভাইসটি আপনার প্রতিষ্ঠানের দ্বারা পরিচালিত হয়।\n\nআপনার প্রশাসক এই ডিভাইসের সেটিংস, কর্পোরেট অ্যাক্সেস, অ্যাপ, ডিভাইসের সাথে সম্পর্কিত ডেটা এবং ডিভাইসের অবস্থান তথ্য নিরীক্ষণ ও পরিচালনা করতে পারেন।\n\nআরও তথ্যের জন্য আপনার প্রশাসকের সাথে যোগাযোগ করুন।"</string>
-    <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"আপনার প্রতিষ্ঠান আপনার কর্মস্থলের প্রোফাইলে একটি শংসাপত্র কর্তৃপক্ষ ইনস্টল করেছে।আপনার সুরক্ষিত নেটওয়ার্ক ট্রাফিক নিরীক্ষণ বা পরিবর্তন করা হতে পারে।"</string>
-    <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"আপনার প্রতিষ্ঠান আপনার কর্মস্থলের প্রোফাইলে একটি শংসাপত্র কর্তৃপক্ষ ইনস্টল করেছে। আপনার নিরাপদ নেটওয়ার্ক ট্রাফিকে নজর রাখা হতে পারে বা তাতে পরিবর্তন করা হতে পারে।"</string>
-    <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"এই ডিভাইসে একটি শংসাপত্র কর্তৃপক্ষ ইনস্টল করা আছে। আপনার নিরাপদ নেটওয়ার্ক ট্রাফিকে নজর রাখা হতে পারে বা তাতে পরিবর্তন করা হতে পারে।"</string>
+    <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"আপনার প্রতিষ্ঠান আপনার অফিস প্রোফাইলে একটি সার্টিফিকেট কর্তৃপক্ষ ইনস্টল করেছে।আপনার সুরক্ষিত নেটওয়ার্ক ট্রাফিক নিরীক্ষণ বা পরিবর্তন করা হতে পারে।"</string>
+    <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"আপনার প্রতিষ্ঠান আপনার অফিস প্রোফাইলে একটি সার্টিফিকেট কর্তৃপক্ষ ইনস্টল করেছে। আপনার নিরাপদ নেটওয়ার্ক ট্রাফিকে নজর রাখা হতে পারে বা তাতে পরিবর্তন করা হতে পারে।"</string>
+    <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"এই ডিভাইসে একটি সার্টিফিকেট কর্তৃপক্ষ ইনস্টল করা আছে। আপনার নিরাপদ নেটওয়ার্ক ট্রাফিকে নজর রাখা হতে পারে বা তাতে পরিবর্তন করা হতে পারে।"</string>
     <string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"আপনার প্রশাসক নেটওয়ার্ক লগিং চালু করেছেন, যা আপনার ডিভাইসের ট্রাফিকের উপরে নজর রাখে।"</string>
     <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"আপনি <xliff:g id="VPN_APP">%1$s</xliff:g> এ সংযুক্ত রয়েছেন, যা আপনার ইমেল, অ্যাপ, এবং ওয়েবসাইট সহ আপনার নেটওয়ার্ক কার্যকলাপের উপর নজর রাখতে পারে।"</string>
     <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"আপনি <xliff:g id="VPN_APP_0">%1$s</xliff:g> এবং <xliff:g id="VPN_APP_1">%2$s</xliff:g> এর সাথে সংযুক্ত রয়েছেন, যেগুলি আপনার ইমেল, অ্যাপ, এবং ওয়েবসাইট সহ আপনার নেটওয়ার্ক কার্যকলাপের উপর নজর রাখতে পারে।"</string>
@@ -453,31 +453,31 @@
     <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> আপনার ডিভাইস পরিচালনা করার জন্য <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ব্যবহার করে৷"</string>
     <string name="monitoring_description_do_body" msgid="3639594537660975895">"আপনার প্রশাসক আপনার ডিভাইসের অবস্থান তথ্য সহ এই ডিভাইসের সেটিংস, কর্পোরেট অ্যাক্সেস, অ্যাপ্স, ডেটা নিরীক্ষণ ও পরিচালনা করতে পারেন।"</string>
     <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
-    <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"আরো জানুন"</string>
+    <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"আরও জানুন"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"আপনি <xliff:g id="VPN_APP">%1$s</xliff:g> এ সংযুক্ত হয়েছেন, যা ইমেল, অ্যাপ এবং ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্ক কার্যকলাপ নিরীক্ষণ করবে৷"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN সেটিংস খুলুন"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN সেটিংস খুলুন"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"বিশ্বস্ত শংসাপত্রগুলি খুলুন"</string>
-    <string name="monitoring_description_network_logging" msgid="7223505523384076027">"আপনার প্রশাসক নেটওয়ার্ক লগিং চালু করেছেন, যা আপনার ডিভাইসের ট্রাফিক নিরীক্ষণ করে।\n\nআরো তথ্যের জন্য আপনার প্রশাসকের সাথে যোগাযোগ করুন।"</string>
+    <string name="monitoring_description_network_logging" msgid="7223505523384076027">"আপনার প্রশাসক নেটওয়ার্ক লগিং চালু করেছেন, যা আপনার ডিভাইসের ট্রাফিক নিরীক্ষণ করে।\n\nআরও তথ্যের জন্য আপনার প্রশাসকের সাথে যোগাযোগ করুন।"</string>
     <string name="monitoring_description_vpn" msgid="4445150119515393526">"আপনি VPN সংযোগ সেট আপ করার জন্য একটি অ্যাপ্লিকেশানকে অনুমতি দিন৷\n\nএই অ্যাপ্লিকেশানটি ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার ডিভাইস এবং নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে।"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"আপনার কর্মস্থলের প্রোফাইলটি <xliff:g id="ORGANIZATION">%1$s</xliff:g> দ্বারা পরিচালিত হয়।\n\nআপনার প্রশাসক আপনার ইমেল, অ্যাপ্স ও ওয়েবসাইট সহ কর্মস্থলের নেটওয়ার্ক কার্যকলাপ নিরীক্ষণ করতে পারেন।\n\nআরো তথ্যের জন্য আপনার প্রশাসকের সঙ্গে যোগাযোগ করুন।\n\nএছাড়া আপনি একটি VPN এর সাথেও সংযুক্ত যা আপনার নেটওয়ার্ক কার্যকলাপ নিরীক্ষণ করতে পারে।"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"আপনার কর্মস্থলের প্রোফাইলটি <xliff:g id="ORGANIZATION">%1$s</xliff:g> দ্বারা পরিচালিত হয়।\n\nআপনার প্রশাসক আপনার ইমেল, অ্যাপ্স ও ওয়েবসাইট সহ কর্মস্থলের নেটওয়ার্ক কার্যকলাপ নিরীক্ষণ করতে পারেন।\n\nআরও তথ্যের জন্য আপনার প্রশাসকের সঙ্গে যোগাযোগ করুন।\n\nএছাড়া আপনি একটি VPN এর সাথেও সংযুক্ত যা আপনার নেটওয়ার্ক কার্যকলাপ নিরীক্ষণ করতে পারে।"</string>
     <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
     <string name="monitoring_description_app" msgid="1828472472674709532">"আপনি <xliff:g id="APPLICATION">%1$s</xliff:g> এর সাথে সংযুক্ত রয়েছেন, যেটি ইমেল, অ্যাপ, এবং ওয়েবসাইট সহ আপনার নেটওয়ার্ক কার্যকলাপে নজর রাখতে পারে৷"</string>
     <string name="monitoring_description_app_personal" msgid="484599052118316268">"আপনি <xliff:g id="APPLICATION">%1$s</xliff:g> -এ সংযুক্ত হয়েছেন, যা ইমেল, অ্যাপ্লিকেশান এবং ওয়েবসাইটগুলি সমেত আপনার ব্যক্তিগত নেটওয়ার্ক কার্যকলাপ নিরীক্ষণ করতে পারে৷"</string>
     <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"আপনি <xliff:g id="APPLICATION">%1$s</xliff:g> এর সাথে সংযুক্ত হয়েছেন, যা ইমেল, অ্যাপ এবং ওয়েবসাইটগুলি সহ আপনার ব্যক্তিগত নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করবে৷"</string>
-    <string name="monitoring_description_app_work" msgid="4612997849787922906">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার কর্মস্থলের প্রোফাইল পরিচালনা করে। প্রোফাইলটি <xliff:g id="APPLICATION">%2$s</xliff:g> এর সাথে সংযুক্ত, যেটি ইমেল, অ্যাপ, ও ওয়েবসাইট সহ আপনার কর্মস্থলের নেটওয়ার্ক কার্যকলাপের উপরে নজর রাখতে পারে।\n\nআরো তথ্যের জন্য প্রশাসকের সাথে যোগাযোগ করুন।"</string>
+    <string name="monitoring_description_app_work" msgid="4612997849787922906">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার কর্মস্থলের প্রোফাইল পরিচালনা করে। প্রোফাইলটি <xliff:g id="APPLICATION">%2$s</xliff:g> এর সাথে সংযুক্ত, যেটি ইমেল, অ্যাপ, ও ওয়েবসাইট সহ আপনার কর্মস্থলের নেটওয়ার্ক কার্যকলাপের উপরে নজর রাখতে পারে।\n\nআরও তথ্যের জন্য প্রশাসকের সাথে যোগাযোগ করুন।"</string>
     <string name="monitoring_description_app_personal_work" msgid="5664165460056859391">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার কর্মস্থলের প্রোফাইল পরিচালনা করে। প্রোফাইলটি <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> এর সাথে সংযুক্ত, যেটি ইমেল অ্যাপ, ও ওয়েবসাইট সহ আপনার কর্মস্থলের নেটওয়ার্ক কার্যকলাপের উপরে নজর রাখতে পারে।\n\n এ ছাড়াও আপনি <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> এর সাথে সংযুক্ত, যেটি আপনার ব্যক্তিগত নেটওয়ার্কে নজর রাখে।"</string>
     <string name="keyguard_indication_trust_granted" msgid="4985003749105182372">"<xliff:g id="USER_NAME">%1$s</xliff:g> এর জন্য আনলক করা হয়েছে"</string>
     <string name="keyguard_indication_trust_managed" msgid="8319646760022357585">"<xliff:g id="TRUST_AGENT">%1$s</xliff:g> চালু আছে"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"আপনি নিজে আনলক না করা পর্যন্ত ডিভাইসটি লক হয়ে থাকবে"</string>
-    <string name="hidden_notifications_title" msgid="7139628534207443290">"বিজ্ঞপ্তিগুলি আরো দ্রুত পান"</string>
+    <string name="hidden_notifications_title" msgid="7139628534207443290">"বিজ্ঞপ্তিগুলি আরও দ্রুত পান"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"আপনি আনলক করার আগে ওগুলো দেখুন"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"না থাক"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"সেট আপ"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
     <string name="volume_zen_end_now" msgid="6930243045593601084">"এখনই বন্ধ করুন"</string>
-    <string name="accessibility_volume_expand" msgid="5946812790999244205">"প্রসারিত করুন"</string>
+    <string name="accessibility_volume_expand" msgid="5946812790999244205">"বড় করুন"</string>
     <string name="accessibility_volume_collapse" msgid="3609549593031810875">"সঙ্কুচিত করুন"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"স্ক্রিন পিন করা হয়েছে"</string>
     <string name="screen_pinning_description" msgid="8909878447196419623">"এটি আপনি আনপিন না করা পর্যন্ত এটিকে প্রদর্শিত করবে৷ আনপিন করতে ফিরুন এবং ওভারভিউ স্পর্শ করে ধরে থাকুন।"</string>
@@ -556,19 +556,19 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"এই অ্যাপটিতে বিজ্ঞপ্তির বিভাগ নেই"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"এই অ্যাপ থেকে আসা বিজ্ঞপ্তি বন্ধ করা যাবে না"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">এই অ্যাপের <xliff:g id="NUMBER_1">%d</xliff:g>টি বিজ্ঞপ্তির বিভাগের মধ্যে ১টি</item>
-      <item quantity="other">এই অ্যাপের <xliff:g id="NUMBER_1">%d</xliff:g>টি বিজ্ঞপ্তির বিভাগের মধ্যে ১টি</item>
+      <item quantity="one">এই অ্যাপের <xliff:g id="NUMBER_1">%s</xliff:g>টি বিজ্ঞপ্তির বিভাগের মধ্যে ১টি</item>
+      <item quantity="other">এই অ্যাপের <xliff:g id="NUMBER_1">%s</xliff:g>টি বিজ্ঞপ্তির বিভাগের মধ্যে ১টি</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
-      <item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, এবং আরো <xliff:g id="NUMBER_5">%3$d</xliff:g>টি</item>
-      <item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, এবং আরো <xliff:g id="NUMBER_5">%3$d</xliff:g>টি</item>
+      <item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, এবং আরও <xliff:g id="NUMBER_5">%3$d</xliff:g>টি</item>
+      <item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, এবং আরও <xliff:g id="NUMBER_5">%3$d</xliff:g>টি</item>
     </plurals>
     <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> খোলা থাকলে বিজ্ঞপ্তি নিয়ন্ত্রণ"</string>
     <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> বন্ধ থাকলে বিজ্ঞপ্তি নিয়ন্ত্রণ"</string>
     <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"এই চ্যানেল থেকে বিজ্ঞপ্তি আসতে দেয়"</string>
     <string name="notification_all_categories" msgid="5407190218055113282">"সকল বিভাগ"</string>
-    <string name="notification_more_settings" msgid="816306283396553571">"আরো সেটিংস"</string>
+    <string name="notification_more_settings" msgid="816306283396553571">"আরও সেটিংস"</string>
     <string name="notification_app_settings" msgid="3743278649182392015">"কাস্টমাইজ করুন: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
     <string name="notification_done" msgid="5279426047273930175">"সম্পন্ন"</string>
     <string name="notification_menu_accessibility" msgid="2046162834248888553">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
@@ -585,8 +585,8 @@
       <item quantity="other">%d মিনিট</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"ব্যাটারির ব্যবহার"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"চার্জ করার সময় ব্যাটারি সেভার উপলব্ধ নয়"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"ব্যাটারি সেভার"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"চার্জ করার সময় ব্যাটারি সেভার কাজ করে না"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"ব্যাটারি সেভার"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"কার্য-সম্পাদনা ও পশ্চাদপট ডেটাকে কমিয়ে দেয়"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> বোতাম"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"হোম"</string>
@@ -633,7 +633,7 @@
     <string name="tuner_full_zen_title" msgid="4540823317772234308">"ভলিউম নিয়ন্ত্রণ সহ দেখান"</string>
     <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"বিরক্ত করবেন না"</string>
     <string name="volume_dnd_silent" msgid="4363882330723050727">"ভলিউম বোতামের শর্টকাট"</string>
-    <string name="volume_up_silent" msgid="7141255269783588286">"ভলিউম বাড়ানোর মাধ্যেমে \'বিরক্ত করবেন না\' থেকে প্রস্থান করুন"</string>
+    <string name="volume_up_silent" msgid="7141255269783588286">"ভলিউম বাড়ানোর মাধ্যেমে \'বিরক্ত করবেন না\' থেকে বেরিয়ে আসুন"</string>
     <string name="battery" msgid="7498329822413202973">"ব্যাটারি"</string>
     <string name="clock" msgid="7416090374234785905">"ঘড়ি"</string>
     <string name="headset" msgid="4534219457597457353">"হেডসেট"</string>
@@ -644,7 +644,7 @@
     <string name="accessibility_data_saver_off" msgid="8841582529453005337">"ডেটা সেভার বন্ধ আছে"</string>
     <string name="switch_bar_on" msgid="1142437840752794229">"চালু আছে"</string>
     <string name="switch_bar_off" msgid="8803270596930432874">"বন্ধ আছে"</string>
-    <string name="nav_bar" msgid="1993221402773877607">"নেভিগেশন দন্ড"</string>
+    <string name="nav_bar" msgid="1993221402773877607">"নেভিগেশন বার"</string>
     <string name="nav_bar_layout" msgid="3664072994198772020">"লেআউট"</string>
     <string name="left_nav_bar_button_type" msgid="8555981238887546528">"অতিরিক্ত বাঁদিকের বোতামের ধরণ"</string>
     <string name="right_nav_bar_button_type" msgid="2481056627065649656">"অতিরিক্ত ডানদিকের বোতামের ধরণ"</string>
@@ -657,16 +657,16 @@
   </string-array>
   <string-array name="nav_bar_layouts">
     <item msgid="8077901629964902399">"সাধারণ"</item>
-    <item msgid="8256205964297588988">"নিবিড়"</item>
+    <item msgid="8256205964297588988">"অবিস্তৃত"</item>
     <item msgid="8719936228094005878">"বাঁদিক ঘেঁষা"</item>
     <item msgid="586019486955594690">"ডানদিক ঘেঁষা"</item>
   </string-array>
     <string name="menu_ime" msgid="4998010205321292416">"কিবোর্ড স্যুইচার"</string>
-    <string name="save" msgid="2311877285724540644">"সংরক্ষণ করুন"</string>
+    <string name="save" msgid="2311877285724540644">"সেভ করুন"</string>
     <string name="reset" msgid="2448168080964209908">"আবার সেট করুন"</string>
     <string name="adjust_button_width" msgid="6138616087197632947">"বোতামের প্রস্থ সমন্বয় করুন"</string>
     <string name="clipboard" msgid="1313879395099896312">"ক্লিপবোর্ড"</string>
-    <string name="accessibility_key" msgid="5701989859305675896">"কাস্টম নেভিগেশান বোতাম"</string>
+    <string name="accessibility_key" msgid="5701989859305675896">"কাস্টম নেভিগেশন বোতাম"</string>
     <string name="left_keycode" msgid="2010948862498918135">"বাঁদিকের কিকোড"</string>
     <string name="right_keycode" msgid="708447961000848163">"ডানদিকের কিকোড"</string>
     <string name="left_icon" msgid="3096287125959387541">"বাঁ দিকের আইকন"</string>
@@ -722,23 +722,23 @@
     <string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ক্রম বা সেটিংস সম্পাদনা করুন৷"</string>
     <string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g>টির মধ্যে <xliff:g id="ID_1">%1$d</xliff:g> নং পৃষ্ঠা"</string>
     <string name="tuner_lock_screen" msgid="5755818559638850294">"লক স্ক্রিন"</string>
-    <string name="pip_phone_expand" msgid="5889780005575693909">"প্রসারিত করুন"</string>
+    <string name="pip_phone_expand" msgid="5889780005575693909">"বড় করুন"</string>
     <string name="pip_phone_minimize" msgid="1079119422589131792">"ছোটো করুন"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"বন্ধ করুন"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"খারিজ করতে নিচের দিকে টেনে আনুন"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"পিকচার ইন পিকচার মেনু"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"মেনু"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"ছবির-মধ্যে-ছবি তে <xliff:g id="NAME">%s</xliff:g> আছেন"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> কে এই বৈশিষ্ট্যটি ব্যবহার করতে দিতে না চাইলে ট্যাপ করে সেটিংসে গিয়ে সেটি বন্ধ করে দিন।"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> কে এই বৈশিষ্ট্যটি ব্যবহার করতে দিতে না চাইলে ট্যাপ করে সেটিংসে গিয়ে সেটি বন্ধ করে দিন।"</string>
     <string name="pip_play" msgid="1417176722760265888">"চালান"</string>
     <string name="pip_pause" msgid="8881063404466476571">"বিরাম দিন"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"এগিয়ে যাওয়ার জন্য এড়িয়ে যান"</string>
     <string name="pip_skip_to_prev" msgid="1955311326688637914">"পিছনে যাওয়ার জন্য এড়িয়ে যান"</string>
     <string name="thermal_shutdown_title" msgid="4458304833443861111">"আপনার ফোন গরম হওয়ার জন্য বন্ধ হয়ে গেছে"</string>
     <string name="thermal_shutdown_message" msgid="9006456746902370523">"আপনার ফোন এখন ঠিক-ঠাক চলছে"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"আপনার ফোন খুব বেশি গরম হয়েছিল বলে ঠান্ডা হওয়ার জন্য বন্ধ হয়ে গেছে। আপনার ফোন ঠিক-ঠাক ভাবে চলছে না।\n\nআপনার ফোন খুব বেশি গরম হয়ে যাবে যদি আপনি:\n	•এমন অ্যাপ ব্যবহার করলে যেটি আপনার ডিভাইসের রিসোর্স বেশি ব্যবহার করে (যেমন গেমিং, ভিডিও বা নেভিগেশন অ্যাপ)\n	• বড় ফাইল ডাউনলোড বা আপলোড করলে\n	• বেশি তাপমাত্রায় আপনার ফোন ব্যবহার করলে"</string>
+    <string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"আপনার ফোন খুব বেশি গরম হয়েছিল বলে ঠাণ্ডা হওয়ার জন্য বন্ধ হয়ে গেছে। আপনার ফোন ঠিক-ঠাক ভাবে চলছে না।\n\nআপনার ফোন খুব বেশি গরম হয়ে যাবে যদি আপনি:\n	•এমন অ্যাপ ব্যবহার করলে যেটি আপনার ডিভাইসের রিসোর্স বেশি ব্যবহার করে (যেমন গেমিং, ভিডিও বা নেভিগেশন অ্যাপ)\n	• বড় ফাইল ডাউনলোড বা আপলোড করলে\n	• বেশি তাপমাত্রায় আপনার ফোন ব্যবহার করলে"</string>
     <string name="high_temp_title" msgid="4589508026407318374">"ফোনটি গরম হচ্ছে"</string>
-    <string name="high_temp_notif_message" msgid="5642466103153429279">"ফোনটি ঠান্ডা হওয়ার সময় কিছু বৈশিষ্ট্য সীমিত হতে পারে"</string>
-    <string name="high_temp_dialog_message" msgid="6840700639374113553">"আপনার ফোনটি নিজে থেকেই ঠান্ডা হওয়ার চেষ্টা করবে৷ আপনি তবুও আপনার ফোন ব্যবহার করতে পারেন, কিন্তু এটি একটু ধীরে চলতে পারে৷\n\nআপনার ফোনটি পুরোপুরি ঠান্ডা হয়ে গেলে এটি স্বাভাবিকভাবে চলবে৷"</string>
+    <string name="high_temp_notif_message" msgid="5642466103153429279">"ফোনটি ঠাণ্ডা হওয়ার সময় কিছু বৈশিষ্ট্য সীমিত হতে পারে"</string>
+    <string name="high_temp_dialog_message" msgid="6840700639374113553">"আপনার ফোনটি নিজে থেকেই ঠাণ্ডা হওয়ার চেষ্টা করবে৷ আপনি তবুও আপনার ফোন ব্যবহার করতে পারেন, কিন্তু এটি একটু ধীরে চলতে পারে৷\n\nআপনার ফোনটি পুরোপুরি ঠাণ্ডা হয়ে গেলে এটি স্বাভাবিকভাবে চলবে৷"</string>
     <string name="lockscreen_shortcut_left" msgid="2182769107618938629">"বাঁদিকের শর্টকাট"</string>
     <string name="lockscreen_shortcut_right" msgid="3328683699505226536">"ডানদিকের শর্টকাট"</string>
     <string name="lockscreen_unlock_left" msgid="2043092136246951985">"বাঁদিকের শর্টকাট দিয়েও আনলক করা যায়"</string>
@@ -753,13 +753,14 @@
     <string name="tuner_right" msgid="6222734772467850156">"ডান"</string>
     <string name="tuner_menu" msgid="191640047241552081">"মেনু"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> অ্যাপ"</string>
-    <string name="notification_channel_alerts" msgid="4496839309318519037">"সতর্কতাগুলি"</string>
+    <string name="notification_channel_alerts" msgid="4496839309318519037">"সতর্কতা"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"ব্যাটারি"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"স্ক্রীনশটস"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"সাধারণ বার্তাগুলি"</string>
-    <string name="notification_channel_storage" msgid="3077205683020695313">"সঞ্চয়স্থান"</string>
+    <string name="notification_channel_storage" msgid="3077205683020695313">"স্টোরেজ"</string>
     <string name="instant_apps" msgid="6647570248119804907">"ঝটপট অ্যাপ"</string>
     <string name="instant_apps_message" msgid="8116608994995104836">"ঝটপট অ্যাপ ইনস্টল করার প্রয়োজন হয় না।"</string>
-    <string name="app_info" msgid="6856026610594615344">"অ্যাপ্লিকেশানের তথ্য"</string>
+    <string name="app_info" msgid="6856026610594615344">"অ্যাপের তথ্য"</string>
     <string name="go_to_web" msgid="1106022723459948514">"ওয়েবে যান"</string>
     <string name="mobile_data" msgid="7094582042819250762">"মোবাইল ডেটা"</string>
     <string name="wifi_is_off" msgid="1838559392210456893">"ওয়াই ফাই বন্ধ আছে"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"পটভূমিতে অ্যাপ চালু আছে"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"ব্যাটারি এবং ডেটার ব্যবহারের বিশদ বিবরণের জন্য ট্যাপ করুন"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"মোবাইল ডেটা বন্ধ করবেন?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"একটি অ্যাপ কোনও অনুমোদনের অনুরোধকে ঢেকে দিচ্ছে, তাই সেটিংস থেকে আপনার প্রতিক্রিয়া যাচাই করা যাচ্ছে না।"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index 1f0d6bd..93c31a5 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -65,7 +65,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"RSA otisak prsta za otključavanje računara je: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Uvijek dozvoli sa ovog računara"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Otklanjanje grešaka putem uređaja spojenog na USB nije dozvoljeno"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Korisnik koji je trenutno prijavljen na uređaju ne može uključiti opciju za otklanjanje grešaka putem uređaja spojenog na USB. Da biste koristili ovu funkciju prebacite se na korisnika administratora."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Korisnik koji je trenutno prijavljen na ovaj uređaj ne može uključiti opciju za otklanjanje grešaka koristeći USB. Da koristite tu funkciju, prebacite se na primarnog korisnika."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Uvećaj prikaz na ekran"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Razvuci prikaz na ekran"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Spašavanje snimka ekrana..."</string>
@@ -153,9 +153,9 @@
     <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
     <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
     <string name="accessibility_no_sim" msgid="8274017118472455155">"Nema SIM kartice."</string>
-    <string name="accessibility_cell_data" msgid="5326139158682385073">"Mobilni podaci"</string>
-    <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobilni podaci su uključeni"</string>
-    <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobilni podaci su isključeni"</string>
+    <string name="accessibility_cell_data" msgid="5326139158682385073">"Prijenos podataka na mobilnoj mreži"</string>
+    <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Prijenos podataka na mobilnoj mreži je uključen"</string>
+    <string name="accessibility_cell_data_off" msgid="443267573897409704">"Prijenos podataka na mobilnoj mreži je isključen"</string>
     <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Dijeljenje Bluetooth veze."</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"Način rada u avionu."</string>
     <string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN uključen."</string>
@@ -241,9 +241,9 @@
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Punjenje"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G prijenos podataka je pauzirano"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G prijenos podataka je pauzirano"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobilni podaci su pauzirani"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Prijenos podataka je pauziran"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Prijenos podataka je pauziran"</string>
-    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Dostigli ste ograničenje za prijenos podataka koje ste postavili. Više ne koristite mobilne podatke.\n\nUkoliko nastavite koristiti mobilne podatke, mogući su troškovi za prijenos podataka."</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Dostigli ste ograničenje za prijenos podataka koje ste postavili. Više ne koristite prijenos podataka na mobilnoj mreži.\n\nUkoliko nastavite koristiti prijenos podataka na mobilnoj mreži, mogući su troškovi za prijenos podataka."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Nastavi"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Niste povezani na internet"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi veza aktivna"</string>
@@ -318,7 +318,7 @@
     <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Pristupna tačka"</string>
     <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Obavještenja"</string>
     <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Svjetiljka"</string>
-    <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Mobilni podaci"</string>
+    <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Prijenos podataka na mobilnoj mreži"</string>
     <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Prijenos podataka"</string>
     <string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Preostala količina podataka"</string>
     <string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Prekoračeno"</string>
@@ -334,7 +334,7 @@
     <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Sve ste obrisali"</string>
     <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacije o aplikaciji"</string>
     <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"kačenje ekrana"</string>
-    <string name="recents_search_bar_label" msgid="8074997400187836677">"pretraga"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"pretraživanje"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikacija <xliff:g id="APP">%s</xliff:g> nije pokrenuta."</string>
     <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> je onemogućena u sigurnom načinu rada."</string>
     <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Obriši sve"</string>
@@ -342,9 +342,9 @@
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podjela po horizontali"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podjela po vertikali"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Prilagođena podjela"</string>
-    <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Podijeli ekran nagore"</string>
-    <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Podijeli ekran nalijevo"</string>
-    <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Podijeli ekran nadesno"</string>
+    <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Dijeli ekran nagore"</string>
+    <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Dijeli ekran nalijevo"</string>
+    <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Dijeli ekran nadesno"</string>
   <string-array name="recents_blacklist_array">
   </string-array>
     <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Napunjeno"</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Pretraživanje"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Povucite gore za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Povucite lijevo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Neće vas ometati zvukovi i vibracije, osim alarma, podsjetnika, događaja i pozivalaca koje odredite. I dalje ćete čuti sve što ste odabrali za reprodukciju, uključujući muziku, videozapise i igre."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Neće vas ometati zvukovi i vibracije, osim alarma. I dalje ćete čuti sve što ste odabrali za reprodukciju, uključujući muziku, videozapise i igre."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Neće vas ometati zvukovi i vibracije, osim alarma, podsjetnika, događaja i pozivalaca koje odredite. I dalje ćete čuti sve što ste odabrali za reprodukciju, uključujući muziku, videozapise i igre."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Neće vas ometati zvukovi i vibracije, osim alarma. I dalje ćete čuti sve što izaberete za reprodukciju, uključujući muziku, videozapise i igre."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Prilagodi"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Ovim se blokiraju SVI zvukovi i vibracije, uključujući alarme, muziku, videozapise i igre. I dalje ćete moći obavljati pozive."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Ovim se blokiraju SVI zvukovi i vibracije, uključujući alarme, muziku, videozapise i igre. I dalje ćete moći obavljati pozive."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Ovim se blokiraju SVI zvukovi i vibracije, uključujući alarme, muziku, video zapise i igre."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Prikaži manje važna obavještenja ispod"</string>
@@ -417,16 +417,16 @@
     <string name="profile_owned_footer" msgid="8021888108553696069">"Profil može biti nadziran"</string>
     <string name="vpn_footer" msgid="2388611096129106812">"Mreža može biti nadzirana"</string>
     <string name="branded_vpn_footer" msgid="2168111859226496230">"Mreža može biti nadzirana"</string>
-    <string name="quick_settings_disclosure_management_monitoring" msgid="6645176135063957394">"Vaša organizacija upravlja ovim uređajem i može pratiti mrežni promet."</string>
-    <string name="quick_settings_disclosure_named_management_monitoring" msgid="370622174777570853">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> upravlja ovim uređajem i može pratiti vaš mrežni promet"</string>
+    <string name="quick_settings_disclosure_management_monitoring" msgid="6645176135063957394">"Vaša organizacija upravlja ovim uređajem i može pratiti mrežni saobraćaj."</string>
+    <string name="quick_settings_disclosure_named_management_monitoring" msgid="370622174777570853">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> upravlja ovim uređajem i može pratiti vaš mrežni saobraćaj"</string>
     <string name="quick_settings_disclosure_management_named_vpn" msgid="1085137869053332307">"Uređajem upravlja vaša organizacija i povezan je s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
     <string name="quick_settings_disclosure_named_management_named_vpn" msgid="6290456493852584017">"Uređajem upravlja <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> i povezan je s aplikacijom <xliff:g id="VPN_APP">%2$s</xliff:g>"</string>
     <string name="quick_settings_disclosure_management" msgid="3294967280853150271">"Uređajem upravlja vaša organizacija"</string>
     <string name="quick_settings_disclosure_named_management" msgid="1059403025094542908">"Ovim uređajem upravlja <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>."</string>
     <string name="quick_settings_disclosure_management_vpns" msgid="3698767349925266482">"Uređajem upravlja vaša organizacija i povezan je s VPN-ovima"</string>
     <string name="quick_settings_disclosure_named_management_vpns" msgid="7777821385318891527">"Uređajem upravlja <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> i povezan je s VPN-ovima"</string>
-    <string name="quick_settings_disclosure_managed_profile_monitoring" msgid="5125463987558278215">"Vaša organizacija može pratiti mrežni promet na vašem profilu."</string>
-    <string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8973606847896650284">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> može pratiti mrežni promet na vašem radnom profilu"</string>
+    <string name="quick_settings_disclosure_managed_profile_monitoring" msgid="5125463987558278215">"Vaša organizacija može pratiti mrežni saobraćaj na vašem profilu."</string>
+    <string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8973606847896650284">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> može pratiti mrežni saobraćaj na vašem radnom profilu"</string>
     <string name="quick_settings_disclosure_monitoring" msgid="679658227269205728">"Mreža može biti nadzirana"</string>
     <string name="quick_settings_disclosure_vpns" msgid="8170318392053156330">"Uređaj je povezan s VPN-ovima"</string>
     <string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Radni profil je povezan s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -443,10 +443,10 @@
     <string name="monitoring_button_view_policies" msgid="100913612638514424">"Prikaži pravila"</string>
     <string name="monitoring_description_named_management" msgid="5281789135578986303">"Vašim uređajem upravlja organizacija <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nVaš administrator može nadgledati i upravljati vašim postavkama, korporativnom pristupu, aplikacijama, podacima koji su povezani s vašim uređajem i informacijama o lokaciji vašeg uređaja.\n\nZa više informacija, obratite se svom administratoru."</string>
     <string name="monitoring_description_management" msgid="4573721970278370790">"Vašim uređajem upravlja vaša organizacija.\n\nVaš administrator može nadgledati i upravljati vašim postavkama, korporativnom pristupu, aplikacijama, podacima koji su povezani s vašim uređajem i informacijama o lokaciji vašeg uređaja.\n\nZa više informacija, obratite se svom administratoru."</string>
-    <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Vaša organizacija je instalirala CA certifikat na ovom uređaju. Vaš promet preko sigurne mreže može se pratiti."</string>
-    <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Vaša organizacija je instalirala CA certifikat na vašem radnom profilu. Vaš promet preko sigurne mreže može se pratiti."</string>
-    <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"CA certifikat je instaliran na ovom uređaju. Vaš promet preko sigurne mreže može se pratiti."</string>
-    <string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Vaš administrator je uključio zapisivanje na mreži, čime se prati promet na vašem uređaju."</string>
+    <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Vaša organizacija je instalirala CA certifikat na ovom uređaju. Vaš saobraćaj preko sigurne mreže može se pratiti."</string>
+    <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Vaša organizacija je instalirala CA certifikat na vašem radnom profilu. Vaš saobraćaj preko sigurne mreže može se pratiti."</string>
+    <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"CA certifikat je instaliran na ovom uređaju. Vaš saobraćaj preko sigurne mreže može se pratiti."</string>
+    <string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Vaš administrator je uključio zapisivanje na mreži, čime se prati saobraćaj na vašem uređaju."</string>
     <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Povezani ste s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g> koja može pratiti vašu aktivnost na mreži, uključujući e-poštu i web lokacije."</string>
     <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Povezani ste s aplikacijama <xliff:g id="VPN_APP_0">%1$s</xliff:g> i <xliff:g id="VPN_APP_1">%2$s</xliff:g> koje mogu pratiti vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web lokacije."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Vaš radni profil je povezan s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>, koja može pratiti vašu aktivnost na mreži, uključujući e-poruke i web lokacije."</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saznajte više"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Povezani ste s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>, koja može pratiti vašu aktivnost na mreži, uključujući e-poruke i web lokacije."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Postavke otvorene VPN mreže"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Otvorite postavke VPN mreže"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Otvorite pouzdane akreditive"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Vaš administrator je uključio zapisivanje na mreži, čime se prati saobraćaj na vašem uređaju.\n\nZa više informacija, obratite se administratoru."</string>
@@ -467,7 +467,7 @@
     <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
     <string name="monitoring_description_app" msgid="1828472472674709532">"Povezani ste s aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može pratiti vašu aktivnost na mreži, uključujući e-poruke, aplikacije i web lokacije."</string>
     <string name="monitoring_description_app_personal" msgid="484599052118316268">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može pratiti vašu aktivnost na privatnoj mreži, uključujući e-mailove, aplikacije i web-lokacije."</string>
-    <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste na aplikaciju <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može pratiti vaše privatne aktivnosti na mreži, uključujući e-poštu, aplikacije i web stranice."</string>
+    <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste na aplikaciju <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može pratiti vaše privatne aktivnosti na mreži, uključujući e-poštu, aplikacije i web lokacije."</string>
     <string name="monitoring_description_app_work" msgid="4612997849787922906">"Vašim radnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil je povezan s aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g>, koja može pratiti vašu aktivnost na radnoj mreži, uključujući e-poruke, aplikacije i web lokacije.\n\nZa više informacija, obratite se svom administratoru."</string>
     <string name="monitoring_description_app_personal_work" msgid="5664165460056859391">"Radnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil je povezan s aplikacijom <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, koja može pratiti vašu aktivnost na radnoj mreži, uključujući e-poruke, aplikacije i web lokacije.\n\nPovezani ste i sa aplikacijom <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, koja može pratiti vašu aktivnost na privatnoj mreži."</string>
     <string name="keyguard_indication_trust_granted" msgid="4985003749105182372">"Otključano za korisnika <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
@@ -508,7 +508,7 @@
     <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Dodirnite da isključite zvuk."</string>
     <string name="volume_dialog_accessibility_shown_message" msgid="1834631467074259998">"Prikazane kontrole jačine zvuka za: %s. Prevucite prema gore za odbacivanje."</string>
     <string name="volume_dialog_accessibility_dismissed_message" msgid="51543526013711399">"Kontrole jačine zvuka sakrivene"</string>
-    <string name="system_ui_tuner" msgid="708224127392452018">"Podešavač za korisničko sučelje sistema"</string>
+    <string name="system_ui_tuner" msgid="708224127392452018">"Podešavač za korisnički interfejs sistema"</string>
     <string name="show_battery_percentage" msgid="5444136600512968798">"Prikaži ugrađeni postotak baterije"</string>
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Prikazuje postotak nivoa baterije unutar ikone na statusnoj traci kada se baterija ne puni"</string>
     <string name="quick_settings" msgid="10042998191725428">"Brze postavke"</string>
@@ -531,12 +531,12 @@
     <string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"Pristupna tačka"</string>
     <string name="accessibility_managed_profile" msgid="6613641363112584120">"Profil za posao"</string>
     <string name="tuner_warning_title" msgid="7094689930793031682">"Zabava za neke, ali ne za sve"</string>
-    <string name="tuner_warning" msgid="8730648121973575701">"Podešavač za korisničko sučelje sistema vam omogućava dodatne načine da podesite i prilagodite Androidovo sučelje. Ove eksperimentalne funkcije se u budućim verzijama mogu mijenjati, kvariti ili nestati. Budite oprezni."</string>
+    <string name="tuner_warning" msgid="8730648121973575701">"Podešavač za korisnički interfejs sistema vam omogućava dodatne načine da podesite i prilagodite Androidov interfejs. Ove eksperimentalne funkcije se u budućim verzijama mogu mijenjati, kvariti ili nestati. Budite oprezni."</string>
     <string name="tuner_persistent_warning" msgid="8597333795565621795">"Ove eksperimentalne funkcije se u budućim verzijama mogu mijenjati, kvariti ili nestati. Budite oprezni."</string>
     <string name="got_it" msgid="2239653834387972602">"Razumijem"</string>
-    <string name="tuner_toast" msgid="603429811084428439">"Čestitamo! Podešavač za korisničko sučelje sistema je dodan u Postavke"</string>
+    <string name="tuner_toast" msgid="603429811084428439">"Čestitamo! Podešavač za korisnički interfejs sistema je dodan u Postavke"</string>
     <string name="remove_from_settings" msgid="8389591916603406378">"Ukloni iz Postavki"</string>
-    <string name="remove_from_settings_prompt" msgid="6069085993355887748">"Želite li ukloniti Podešavač za korisničko sučelje sistema iz Postavki i prestati koristiti sve njegove funkcije?"</string>
+    <string name="remove_from_settings_prompt" msgid="6069085993355887748">"Želite li ukloniti Podešavač za korisnički interfejs sistema iz Postavki i prestati koristiti sve njegove funkcije?"</string>
     <string name="activity_not_found" msgid="348423244327799974">"Aplikacija nije instalirana na uređaju"</string>
     <string name="clock_seconds" msgid="7689554147579179507">"Prikaži sekunde"</string>
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Prikaži sekunde na statusnoj traci. Može skratiti trajanje baterije."</string>
@@ -560,9 +560,9 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Ova aplikacija nema kategorije obavještenja"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Obavještenja iz ove aplikacije nije moguće isključiti"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 od <xliff:g id="NUMBER_1">%d</xliff:g> kategorije obavještenja iz ove aplikacije</item>
-      <item quantity="few">1 od <xliff:g id="NUMBER_1">%d</xliff:g> kategorije obavještenja iz ove aplikacije</item>
-      <item quantity="other">1 od <xliff:g id="NUMBER_1">%d</xliff:g> kategorija obavještenja iz ove aplikacije</item>
+      <item quantity="one">1 od <xliff:g id="NUMBER_1">%s</xliff:g> kategorije obavještenja iz ove aplikacije</item>
+      <item quantity="few">1 od <xliff:g id="NUMBER_1">%s</xliff:g> kategorije obavještenja iz ove aplikacije</item>
+      <item quantity="other">1 od <xliff:g id="NUMBER_1">%s</xliff:g> kategorija obavještenja iz ove aplikacije</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -593,8 +593,8 @@
       <item quantity="other">%d minuta</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Potrošnja baterije"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Ušteda baterije je isključena prilikom punjenja"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Ušteda baterije"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Ušteda baterije je isključena za vrijeme punjenja"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Ušteda baterije"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Ograničava rad i prijenos podataka u pozadini"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Dugme <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Tipka za početak"</string>
@@ -628,7 +628,7 @@
     <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Nazad"</string>
     <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"Obavještenja"</string>
     <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"Prečice tastature"</string>
-    <string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"Promijeni način unosa"</string>
+    <string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"Promjena načina unosa"</string>
     <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"Aplikacije"</string>
     <string name="keyboard_shortcut_group_applications_assist" msgid="9095441910537146013">"Pomoć"</string>
     <string name="keyboard_shortcut_group_applications_browser" msgid="6465985474000766533">"Preglednik"</string>
@@ -704,7 +704,7 @@
     <string name="accessibility_action_divider_top_70" msgid="5090779195650364522">"Gore 70%"</string>
     <string name="accessibility_action_divider_top_50" msgid="6385859741925078668">"Gore 50%"</string>
     <string name="accessibility_action_divider_top_30" msgid="6201455163864841205">"Gore 30%"</string>
-    <string name="accessibility_action_divider_bottom_full" msgid="301433196679548001">"Dole cijeli ekran"</string>
+    <string name="accessibility_action_divider_bottom_full" msgid="301433196679548001">"Donji ekran kao cijeli ekran"</string>
     <string name="accessibility_qs_edit_tile_label" msgid="8374924053307764245">"Pozicija <xliff:g id="POSITION">%1$d</xliff:g>, <xliff:g id="TILE_NAME">%2$s</xliff:g>. Dvaput dodirnite za uređivanje."</string>
     <string name="accessibility_qs_edit_add_tile_label" msgid="8133209638023882667">"<xliff:g id="TILE_NAME">%1$s</xliff:g> Dvaput dodirnite za dodavanje."</string>
     <string name="accessibility_qs_edit_position_label" msgid="5055306305919289819">"Pozicija <xliff:g id="POSITION">%1$d</xliff:g>. Dvaput dodirnite za odabir."</string>
@@ -734,9 +734,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Umanji"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Zatvori"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Povucite prema dolje da odbacite"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Meni za način rada Slika u slici"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Meni"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> je u načinu priakza Slika u slici"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Ako ne želite da <xliff:g id="NAME">%s</xliff:g> koristi ovu funkciju, dodirnite da otvorite postavke i isključite je."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Ako ne želite da <xliff:g id="NAME">%s</xliff:g> koristi ovu funkciju, dodirnite da otvorite postavke i isključite je."</string>
     <string name="pip_play" msgid="1417176722760265888">"Reproduciraj"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pauziraj"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Preskoči na sljedeći"</string>
@@ -762,6 +762,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Meni"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplikacija <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Upozorenja"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Baterija"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Snimci ekrana"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Opće poruke"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Pohrana"</string>
@@ -769,7 +770,7 @@
     <string name="instant_apps_message" msgid="8116608994995104836">"Za instant aplikacije nije potrebna instalacija"</string>
     <string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string>
     <string name="go_to_web" msgid="1106022723459948514">"Idite na internet"</string>
-    <string name="mobile_data" msgid="7094582042819250762">"Mobilni podaci"</string>
+    <string name="mobile_data" msgid="7094582042819250762">"Prijenos podataka na mobilnoj mreži"</string>
     <string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi veza je isključena"</string>
     <string name="bt_is_off" msgid="2640685272289706392">"Bluetooth je isključen"</string>
     <string name="dnd_is_off" msgid="6167780215212497572">"Opcija Ne ometaj je isključena"</string>
@@ -781,5 +782,6 @@
     <string name="qs_dnd_replace" msgid="8019520786644276623">"Zamijeni"</string>
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacije koje rade u pozadini"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Dodirnite za detalje o potrošnji baterije i prijenosa podataka"</string>
-    <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Želite li isključiti prijenos mobilnih podataka?"</string>
+    <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Želite li isključiti prijenos podataka na mobilnoj mreži?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Postavke ne mogu potvrditi vaš odgovor jer aplikacija zaklanja zahtjev za odobrenje."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 11f3fc0..1aed910 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -35,8 +35,8 @@
     <string name="battery_low_title" msgid="6456385927409742437">"Queda poca bateria"</string>
     <string name="battery_low_percent_format" msgid="2900940511201380775">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g>."</string>
     <string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g>. L\'estalvi de bateria està activat."</string>
-    <string name="invalid_charger" msgid="4549105996740522523">"Càrrega d\'USB no admesa.\nUtilitza només el carregador proporcionat."</string>
-    <string name="invalid_charger_title" msgid="3515740382572798460">"La càrrega per USB no és compatible."</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"Pujada d\'USB no admesa.\nUtilitza només el carregador proporcionat."</string>
+    <string name="invalid_charger_title" msgid="3515740382572798460">"La pujada per USB no és compatible."</string>
     <string name="invalid_charger_text" msgid="5474997287953892710">"Fes servir només el carregador proporcionat amb el dispositiu."</string>
     <string name="battery_low_why" msgid="4553600287639198111">"Configuració"</string>
     <string name="battery_saver_confirmation_title" msgid="5299585433050361634">"Vols activar l\'estalvi de bateria?"</string>
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"L\'empremta digital de la clau de l\'RSA de l\'equip és:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Dona sempre permís des d\'aquest equip"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"No es permet la depuració USB"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"L\'usuari que té iniciada la sessió al dispositiu en aquest moment no pot activar la depuració USB. Per utilitzar aquesta funció, cal canviar a l\'usuari administrador."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"L\'usuari que té iniciada la sessió al dispositiu en aquest moment no pot activar la depuració per USB. Per utilitzar aquesta funció, cal canviar a l\'usuari principal."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom per omplir pantalla"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Estira per omplir pant."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"S\'està desant captura de pantalla..."</string>
@@ -347,16 +347,16 @@
   </string-array>
     <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string>
     <string name="expanded_header_battery_charging" msgid="205623198487189724">"S\'està carregant"</string>
-    <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> per completar la càrrega"</string>
+    <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> per completar la pujada"</string>
     <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"No s\'està carregant"</string>
     <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"És possible que la xarxa\nestigui controlada"</string>
     <string name="description_target_search" msgid="3091587249776033139">"Cerca"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Llisca cap amunt per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Llisca cap a l\'esquerra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"No t\'interromprà cap so ni cap vibració, tret dels de les alarmes, recordatoris, esdeveniments i trucades de les persones que especifiquis. Continuaràs sentint tot allò que decideixis reproduir, com ara música, vídeos i jocs."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"No t\'interromprà cap so ni cap vibració, tret dels de les alarmes. Continuaràs sentint tot allò que decideixis reproduir, com ara música, vídeos i jocs."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"No t\'interromprà cap so ni cap vibració, tret dels de les alarmes, recordatoris, esdeveniments i trucades de les persones que especifiquis. Continuaràs sentint tot allò que decideixis reproduir, com ara música, vídeos i jocs."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"No t\'interromprà cap so ni cap vibració, tret dels de les alarmes. Continuaràs sentint tot allò que decideixis reproduir, com ara música, vídeos i jocs."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalitza"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Es bloquejaran TOTS els sons i totes les vibracions, inclosos els de vídeos, jocs, alarmes i música. Encara podràs fer trucades."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Es bloquejaran TOTS els sons i totes les vibracions, inclosos els de vídeos, jocs, alarmes i música. Encara podràs fer trucades."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Es bloquejaran TOTS els sons i totes les vibracions, inclosos els de vídeos, jocs, alarmes i música."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificacions menys urgents a continuació"</string>
@@ -374,9 +374,9 @@
     <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silenci\ntotal"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Només\ninterr. prior."</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Només\nalarmes"</string>
-    <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Carregant (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar la càrrega)"</string>
-    <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Càrrega ràpida (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar-se)"</string>
-    <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Càrrega lenta (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar-se)"</string>
+    <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Carregant (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar la pujada)"</string>
+    <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Pujada ràpida (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar-se)"</string>
+    <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Pujada lenta (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar-se)"</string>
     <string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Canvia d\'usuari"</string>
     <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Canvia d\'usuari. Usuari actual: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Usuari actual: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
@@ -407,7 +407,7 @@
     <string name="battery_saver_notification_title" msgid="237918726750955859">"Estalvi de bateria activat"</string>
     <string name="battery_saver_notification_text" msgid="820318788126672692">"Redueix el rendiment i l\'ús de les dades en segon pla."</string>
     <string name="battery_saver_notification_action_text" msgid="109158658238110382">"Desactiva l\'estalvi de bateria"</string>
-    <string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> començarà a enregistrar tot el que es mostri a la pantalla."</string>
+    <string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> començarà a gravar tot el que es mostri a la pantalla."</string>
     <string name="media_projection_remember_text" msgid="3103510882172746752">"No ho tornis a mostrar"</string>
     <string name="clear_all_notifications_text" msgid="814192889771462828">"Esborra-ho tot"</string>
     <string name="media_projection_action_text" msgid="8470872969457985954">"Comença ara"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Més informació"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Estàs connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pot supervisar la teva activitat a la xarxa, com els correus electrònics, les aplicacions i els llocs web."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Obre la configuració de la VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Obre la configuració de la VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Obre les credencials de confiança"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"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>
@@ -536,8 +536,8 @@
     <string name="activity_not_found" msgid="348423244327799974">"L\'aplicació no està instal·lada al dispositiu"</string>
     <string name="clock_seconds" msgid="7689554147579179507">"Mostra els segons del rellotge"</string>
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostra els segons del rellotge a la barra d\'estat. Això pot afectar la durada de la bateria."</string>
-    <string name="qs_rearrange" msgid="8060918697551068765">"Reorganitza Configuració ràpida"</string>
-    <string name="show_brightness" msgid="6613930842805942519">"Mostra la brillantor a Configuració ràpida"</string>
+    <string name="qs_rearrange" msgid="8060918697551068765">"Reorganitza la configuració ràpida"</string>
+    <string name="show_brightness" msgid="6613930842805942519">"Mostra la brillantor a configuració ràpida"</string>
     <string name="experimental" msgid="6198182315536726162">"Experimental"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vols activar el Bluetooth?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"Per connectar el teclat amb la tauleta, primer has d\'activar el Bluetooth."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Aquesta aplicació no té categories de notificació"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Les notificacions d\'aquesta aplicació no es poden desactivar"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 de <xliff:g id="NUMBER_1">%d</xliff:g> categories de notificació d\'aquesta aplicació</item>
-      <item quantity="one">1 de <xliff:g id="NUMBER_0">%d</xliff:g> categoria de notificació d\'aquesta aplicació</item>
+      <item quantity="other">1 de <xliff:g id="NUMBER_1">%s</xliff:g> categories de notificació d\'aquesta aplicació</item>
+      <item quantity="one">1 de <xliff:g id="NUMBER_0">%s</xliff:g> categoria de notificació d\'aquesta aplicació</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -584,9 +584,9 @@
       <item quantity="other">%d minuts</item>
       <item quantity="one">%d minut</item>
     </plurals>
-    <string name="battery_panel_title" msgid="7944156115535366613">"Ús de la bateria"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"La funció Estalvi de bateria no està disponible durant la càrrega"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Estalvi de bateria"</string>
+    <string name="battery_panel_title" msgid="7944156115535366613">"Consum de la bateria"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"La funció Estalvi de bateria no està disponible durant la pujada"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Estalvi de bateria"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Redueix el rendiment i les dades en segon pla"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Botó <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Inici"</string>
@@ -705,7 +705,7 @@
     <string name="accessibility_qs_edit_tile_added" msgid="8050200862063548309">"<xliff:g id="TILE_NAME">%1$s</xliff:g> s\'ha afegit a la posició <xliff:g id="POSITION">%2$d</xliff:g>"</string>
     <string name="accessibility_qs_edit_tile_removed" msgid="8584304916627913440">"<xliff:g id="TILE_NAME">%1$s</xliff:g> s\'ha suprimit"</string>
     <string name="accessibility_qs_edit_tile_moved" msgid="4343693412689365038">"<xliff:g id="TILE_NAME">%1$s</xliff:g> s\'ha mogut a la posició <xliff:g id="POSITION">%2$d</xliff:g>"</string>
-    <string name="accessibility_desc_quick_settings_edit" msgid="8073587401747016103">"Editor de la configuració ràpida."</string>
+    <string name="accessibility_desc_quick_settings_edit" msgid="8073587401747016103">"Editor de configuració ràpida."</string>
     <string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"Notificació de <xliff:g id="ID_1">%1$s</xliff:g>: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
     <string name="dock_forced_resizable" msgid="5914261505436217520">"És possible que l\'aplicació no funcioni amb la pantalla dividida."</string>
     <string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"L\'aplicació no admet la pantalla dividida."</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimitza"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Tanca"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Arrossega cap avall per ignorar-ho"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menú per a Pantalla en pantalla"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menú"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> està en pantalla en pantalla"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Si no vols que <xliff:g id="NAME">%s</xliff:g> utilitzi aquesta funció, toca per obrir la configuració i desactiva-la."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Si no vols que <xliff:g id="NAME">%s</xliff:g> utilitzi aquesta funció, toca per obrir la configuració i desactiva-la."</string>
     <string name="pip_play" msgid="1417176722760265888">"Reprodueix"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Posa en pausa"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Ves al següent"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menú"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplicació <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alertes"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Captures de pantalla"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Missatges generals"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Emmagatzematge"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplicacions que s\'estan executant en segon pla"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Toca per obtenir informació sobre l\'ús de dades i de bateria"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vols desactivar les dades mòbils?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Com que hi ha una aplicació que oculta una sol·licitud de permís, no es pot verificar la teva resposta des de la configuració."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ca/strings_tv.xml b/packages/SystemUI/res/values-ca/strings_tv.xml
index 6e9fae5..a6c17f8 100644
--- a/packages/SystemUI/res/values-ca/strings_tv.xml
+++ b/packages/SystemUI/res/values-ca/strings_tv.xml
@@ -19,7 +19,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_channel_tv_pip" msgid="134047986446577723">"Imatge en imatge"</string>
+    <string name="notification_channel_tv_pip" msgid="134047986446577723">"Pantalla en pantalla"</string>
     <string name="pip_notification_unknown_title" msgid="6289156118095849438">"(Programa sense títol)"</string>
     <string name="pip_close" msgid="3480680679023423574">"Tanca PIP"</string>
     <string name="pip_fullscreen" msgid="8604643018538487816">"Pantalla completa"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index d529a7a..726e560 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -22,7 +22,7 @@
     <string name="app_label" msgid="7164937344850004466">"UI systému"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Vymazat"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Odebrat ze seznamu"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informace o aplikaci"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"O aplikaci"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Zde budou zobrazeny vaše poslední obrazovky"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Zavřít nové aplikace"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
@@ -66,7 +66,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Digitální otisk RSA počítače je:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Vždy povolit z tohoto počítače"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Ladění USB není povoleno"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Uživatel aktuálně přihlášený k tomuto zařízení nemůže zapnout ladění USB. Chcete-li tuto funkci používat, přepněte na uživatele s oprávněním administrátora."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Uživatel aktuálně přihlášený k tomuto zařízení nemůže zapnout ladění USB. Chcete-li tuto funkci použít, přepněte na primárního uživatele."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Přiblížit na celou obrazovku"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Na celou obrazovku"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Ukládání snímku obrazovky..."</string>
@@ -359,10 +359,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Vyhledávání"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Přejeďte prstem nahoru: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Přejeďte prstem doleva: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Nebudou vás rušit zvuky ani vibrace s výjimkou budíků, upozornění, událostí a vybraných volajících. Nadále uslyšíte veškerý obsah, který si sami pustíte (např. hudba, videa nebo hry)."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Nebudou vás rušit zvuky ani vibrace s výjimkou budíků. Nadále uslyšíte veškerý obsah, který si sami pustíte (např. hudba, videa nebo hry)."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Nebudou vás rušit zvuky ani vibrace s výjimkou budíků, upozornění, událostí a volajících, které zadáte. Nadále uslyšíte veškerý obsah, který si sami pustíte (např. hudba, videa nebo hry)."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Nebudou vás rušit zvuky ani vibrace s výjimkou budíků. Nadále uslyšíte veškerý obsah, který si sami pustíte (např. hudba, videa nebo hry)."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Přizpůsobit"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"V tomto režimu budou blokovány VŠECHNY zvuky a vibrace, včetně těch z budíků, hudby, videí a her. Telefonovat budete moci i nadále."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"V tomto režimu budou blokovány VŠECHNY zvuky a vibrace, včetně těch z budíků, hudby, videí a her. Telefonovat budete moci i nadále."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"V tomto režimu budou blokovány VŠECHNY zvuky a vibrace, včetně těch z budíků, hudby, videí a her."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Méně urgentní oznámení níže"</string>
@@ -462,7 +462,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Další informace"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Jste připojeni k aplikaci <xliff:g id="VPN_APP">%1$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otevřít nastavení VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Otevřít nastavení VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Otevřít důvěryhodná oprávnění"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Administrátor zapnul protokolování sítě, které monitoruje síťový provoz v zařízení.\n\nDalší informace vám poskytne administrátor."</string>
@@ -562,10 +562,10 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Tato aplikace nemá kategorie oznámení"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Oznámení této aplikace nelze vypnout"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="few">1 ze <xliff:g id="NUMBER_1">%d</xliff:g> kategorií oznámení z této aplikace</item>
-      <item quantity="many">1 z <xliff:g id="NUMBER_1">%d</xliff:g> kategorie oznámení z této aplikace</item>
-      <item quantity="other">1 z <xliff:g id="NUMBER_1">%d</xliff:g> kategorií oznámení z této aplikace</item>
-      <item quantity="one">1 z <xliff:g id="NUMBER_0">%d</xliff:g> kategorie oznámení z této aplikace</item>
+      <item quantity="few">1 ze <xliff:g id="NUMBER_1">%s</xliff:g> kategorií oznámení z této aplikace</item>
+      <item quantity="many">1 z <xliff:g id="NUMBER_1">%s</xliff:g> kategorie oznámení z této aplikace</item>
+      <item quantity="other">1 z <xliff:g id="NUMBER_1">%s</xliff:g> kategorií oznámení z této aplikace</item>
+      <item quantity="one">1 z <xliff:g id="NUMBER_0">%s</xliff:g> kategorie oznámení z této aplikace</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -599,8 +599,8 @@
       <item quantity="one">%d minuta</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Využití baterie"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Spořič baterie při nabíjení není k dispozici."</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Spořič baterie"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Spořič baterie při nabíjení není k dispozici"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Spořič baterie"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Omezuje výkon a data na pozadí"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Tlačítko <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -650,9 +650,9 @@
     <string name="volume_up_silent" msgid="7141255269783588286">"Při zvýšení hlasitosti ukončit režim Nerušit"</string>
     <string name="battery" msgid="7498329822413202973">"Baterie"</string>
     <string name="clock" msgid="7416090374234785905">"Hodiny"</string>
-    <string name="headset" msgid="4534219457597457353">"Náhlavní souprava"</string>
+    <string name="headset" msgid="4534219457597457353">"Sluchátka"</string>
     <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Sluchátka připojena"</string>
-    <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Náhlavní souprava připojena"</string>
+    <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Sluchátka připojena"</string>
     <string name="data_saver" msgid="5037565123367048522">"Spořič dat"</string>
     <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Spořič dat je zapnutý"</string>
     <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Spořič dat je vypnutý"</string>
@@ -740,9 +740,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimalizovat"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Zavřít"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Nápovědu zavřete přetažením dolů"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Nabídka režimu obraz v obraze"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Nabídka"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"Aplikace <xliff:g id="NAME">%s</xliff:g> je v režimu obraz v obraze"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Pokud nechcete, aby aplikace <xliff:g id="NAME">%s</xliff:g> tuto funkci používala, klepnutím otevřete nastavení a funkci vypněte."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Pokud nechcete, aby aplikace <xliff:g id="NAME">%s</xliff:g> tuto funkci používala, klepnutím otevřete nastavení a funkci vypněte."</string>
     <string name="pip_play" msgid="1417176722760265888">"Přehrát"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pozastavit"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Přeskočit na další"</string>
@@ -758,7 +758,7 @@
     <string name="lockscreen_unlock_left" msgid="2043092136246951985">"Zkratka vlevo také odemyká"</string>
     <string name="lockscreen_unlock_right" msgid="1529992940510318775">"Zkratka vpravo také odemyká"</string>
     <string name="lockscreen_none" msgid="4783896034844841821">"Žádné"</string>
-    <string name="tuner_launch_app" msgid="1527264114781925348">"Spustit aplikaci <xliff:g id="APP">%1$s</xliff:g>"</string>
+    <string name="tuner_launch_app" msgid="1527264114781925348">"Do aplikace <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="tuner_other_apps" msgid="4726596850501162493">"Další aplikace"</string>
     <string name="tuner_circle" msgid="2340998864056901350">"Kruh"</string>
     <string name="tuner_plus" msgid="6792960658533229675">"Plus"</string>
@@ -768,12 +768,13 @@
     <string name="tuner_menu" msgid="191640047241552081">"Nabídka"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplikace <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Upozornění"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Baterie"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Snímky obrazovek"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Všeobecné zprávy"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Úložiště"</string>
     <string name="instant_apps" msgid="6647570248119804907">"Okamžité aplikace"</string>
     <string name="instant_apps_message" msgid="8116608994995104836">"Okamžité aplikace není třeba instalovat."</string>
-    <string name="app_info" msgid="6856026610594615344">"Informace o aplikaci"</string>
+    <string name="app_info" msgid="6856026610594615344">"O aplikaci"</string>
     <string name="go_to_web" msgid="1106022723459948514">"Přejít na web"</string>
     <string name="mobile_data" msgid="7094582042819250762">"Mobilní data"</string>
     <string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi je vypnuta"</string>
@@ -788,4 +789,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikace běžící na pozadí"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Klepnutím zobrazíte podrobnosti o využití baterie a dat"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vypnout mobilní data?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Žádost o oprávnění je blokována jinou aplikací. Nastavení proto vaši odpověď nemůže ověřit."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index a3884ac..1411fe8 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -22,7 +22,7 @@
     <string name="app_label" msgid="7164937344850004466">"System-UI"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ryd"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Fjern fra listen"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Oplysninger om appen"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Appinfo"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Dine seneste skærme vises her"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Luk de seneste apps"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Fingeraftrykket for computerens RSA-nøgle er:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Tillad altid fra denne computer"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB-fejlretning er ikke tilladt"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Den bruger, der i øjeblikket er logget ind på denne enhed, kan ikke aktivere USB-fejlretning. Skift til en administratorbruger for at bruge denne funktion."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Den bruger, der i øjeblikket er logget ind på denne enhed, kan ikke aktivere USB-fejlretning. Skift til den primære bruger for at bruge denne funktion."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom til fuld skærm"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Stræk til fuld skærm"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Gemmer screenshot..."</string>
@@ -279,7 +279,7 @@
     <string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Roter skærmen automatisk"</string>
     <string name="accessibility_quick_settings_rotation_value" msgid="8187398200140760213">"Tilstanden <xliff:g id="ID_1">%s</xliff:g>"</string>
     <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotationen er låst"</string>
-    <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Stående format"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Stående"</string>
     <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Liggende"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Inputmetode"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Placering"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Søgning"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Glid op for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Glid til venstre for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Du bliver ikke forstyrret af lyde eller vibrationer, undtagen fra alarmer, påmindelser, begivenheder og opkald fra personer, du angiver. Du kan stadig høre alt, du vælger at afspille, bl.a. musik samt lyd i videoer og spil."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Du bliver ikke forstyrret af lyde eller vibrationer, undtagen fra alarmer. Du kan stadig høre alt, du vælger at afspille, bl.a. musik samt lyd i videoer og spil."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Du bliver ikke forstyrret af lyde eller vibrationer, undtagen fra alarmer, påmindelser, begivenheder og opkald fra udvalgte personer, du selv angiver. Du kan stadig høre alt, du vælger at afspille, f.eks. musik, videoer og spil."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Du bliver ikke forstyrret af lyde eller vibrationer, undtagen fra alarmer. Du kan stadig høre alt, du vælger at afspille, f.eks. musik, videoer og spil."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Tilpas"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Dette blokerer ALLE lyde og vibrationer, bl.a. fra alarmer, musik, videoer og spil. Du vil stadig kunne foretage telefonopkald."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Dette blokerer ALLE lyde og vibrationer, bl.a. fra alarmer, musik, videoer og spil. Du vil stadig kunne foretage telefonopkald."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Dette blokerer ALLE lyde og vibrationer, bl.a. fra alarmer, musik, videoer og spil."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Mindre presserende underretninger nedenfor"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Få flere oplysninger"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Du har forbindelse til <xliff:g id="VPN_APP">%1$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. e-mails, apps og websites."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Åbn VPN-indstillinger"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Åbn VPN-indstillinger"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Åbn pålidelige loginoplysninger"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Din administrator har aktiveret netværksregistrering, som overvåger trafik på din enhed.\n\nKontakt din administrator for at få flere oplysninger."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Denne app har ingen underretningskategorier"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Underretninger fra denne app kan ikke deaktiveres"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 ud af <xliff:g id="NUMBER_1">%d</xliff:g> underretningskategori fra denne app</item>
-      <item quantity="other">1 ud af <xliff:g id="NUMBER_1">%d</xliff:g> underretningskategorier fra denne app</item>
+      <item quantity="one">1 ud af <xliff:g id="NUMBER_1">%s</xliff:g> underretningskategori fra denne app</item>
+      <item quantity="other">1 ud af <xliff:g id="NUMBER_1">%s</xliff:g> underretningskategorier fra denne app</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="other">%d minutter</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Batteriforbrug"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Batterisparefunktionen er ikke tilgængelig under opladning"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Batterisparefunktion"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Batterisparefunktionen er ikke tilgængelig under opladning"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Batterisparefunktion"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reducerer ydeevne og baggrundsdata"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g>-knap"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimer"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Luk"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Træk nedad for at afvise"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menu for integreret billede"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> vises som integreret billede"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Hvis du ikke ønsker, at <xliff:g id="NAME">%s</xliff:g> skal benytte denne funktion, kan du åbne indstillingerne og deaktivere den."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Hvis du ikke ønsker, at <xliff:g id="NAME">%s</xliff:g> skal benytte denne funktion, kan du åbne indstillingerne og deaktivere den."</string>
     <string name="pip_play" msgid="1417176722760265888">"Afspil"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Sæt på pause"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Gå videre til næste"</string>
@@ -754,12 +754,13 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Appen <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Underretninger"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Batteri"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Screenshots"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Generelle meddelelser"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Lagerplads"</string>
     <string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
     <string name="instant_apps_message" msgid="8116608994995104836">"Instant apps kræver ingen installation."</string>
-    <string name="app_info" msgid="6856026610594615344">"Oplysninger om appen"</string>
+    <string name="app_info" msgid="6856026610594615344">"Appinfo"</string>
     <string name="go_to_web" msgid="1106022723459948514">"Gå til website"</string>
     <string name="mobile_data" msgid="7094582042819250762">"Mobildata"</string>
     <string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi er slået fra"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Apps, der kører i baggrunden"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tryk for at se oplysninger om batteri- og dataforbrug"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vil du deaktivere mobildata?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Indstillinger kan ikke bekræfte dit svar, da en app dækker for en anmodning om tilladelse."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index b0afce8..46dcf3e 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Der Fingerabdruck des RSA-Schlüssels für diesen Computer lautet: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Von diesem Computer immer zulassen"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB-Debugging nicht zulässig"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Der momentan auf diesem Gerät angemeldete Nutzer kann das USB-Debugging nicht aktivieren. Wechsle zu einem Administratorkonto, um diese Funktion nutzen zu können."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Der momentan auf diesem Gerät angemeldete Nutzer kann das USB-Debugging nicht aktivieren. Um diese Funktion verwenden zu können, wechsle zum primären Nutzer."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom auf Bildschirmgröße"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Auf Bildschirmgröße anpassen"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Screenshot wird gespeichert..."</string>
@@ -357,10 +357,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Suche"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach oben schieben"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach links schieben"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Klingeltöne und die Vibration werden deaktiviert, außer für Weckrufe, Erinnerungen, Termine sowie Anrufe von zuvor von dir festgelegten Personen. Du hörst jedoch weiterhin Sound, wenn du Musik und Videos wiedergibst oder Spiele spielst."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Klingeltöne und die Vibration werden deaktiviert, außer für Weckrufe. Du hörst jedoch weiterhin Sound, wenn du Musik und Videos wiedergibst oder Spiele spielst."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Klingeltöne und die Vibration werden deaktiviert, außer für Weckrufe, Erinnerungen, Termine sowie Anrufe von zuvor von dir festgelegten Personen. Du hörst jedoch weiterhin Sound, wenn du dir Musik anhörst, Videos ansiehst oder Spiele spielst."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Klingeltöne und die Vibration werden deaktiviert, außer für Weckrufe. Du hörst jedoch weiterhin Sound, wenn du dir Musik anhörst, Videos ansiehst oder Spiele spielst."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Anpassen"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Hierdurch werden alle Klingeltöne und Vibrationsalarme stummgeschaltet, auch für Weckrufe, Musik, Videos und Spiele. Anrufe kannst du jedoch weiterhin tätigen."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Hierdurch werden ALLE Klingeltöne und die Vibration deaktiviert, auch für Weckrufe, Musik, Videos und Spiele. Du kannst aber weiterhin selbst anrufen."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Hierdurch werden alle Klingeltöne und Vibrationsalarme stummgeschaltet, auch für Weckrufe, Musik, Videos und Spiele."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Weniger dringende Benachrichtigungen unten"</string>
@@ -460,7 +460,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Weitere Informationen"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Du bist mit <xliff:g id="VPN_APP">%1$s</xliff:g> verbunden. Die VPN-App kann deine Netzwerkaktivitäten (E-Mails, Apps und Websites) erfassen."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN-Einstellungen öffnen"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN-Einstellungen öffnen"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Vertrauenswürdige Anmeldedaten öffnen"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Dein Administrator hat die Netzwerkprotokollierung aktiviert. Damit wird der Verkehr auf deinem Gerät erfasst.\n\nWeitere Informationen erhältst du von deinem Administrator."</string>
@@ -560,8 +560,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Diese App hat keine Benachrichtigungskategorien"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Benachrichtigungen von dieser App können nicht deaktiviert werden"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 von <xliff:g id="NUMBER_1">%d</xliff:g> Benachrichtigungskategorien von dieser App</item>
-      <item quantity="one">1 von <xliff:g id="NUMBER_0">%d</xliff:g> Benachrichtigungskategorie von dieser App</item>
+      <item quantity="other">1 von <xliff:g id="NUMBER_1">%s</xliff:g> Benachrichtigungskategorien von dieser App</item>
+      <item quantity="one">1 von <xliff:g id="NUMBER_0">%s</xliff:g> Benachrichtigungskategorie von dieser App</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -589,8 +589,8 @@
       <item quantity="one">%d Minute</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Akkunutzung"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Der Energiesparmodus ist beim Aufladen nicht verfügbar."</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Energiesparmodus"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Der Energiesparmodus ist beim Aufladen nicht verfügbar"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Energiesparmodus"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduzierung der Leistung und Hintergrunddaten"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Taste <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Pos1"</string>
@@ -730,9 +730,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimieren"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Schließen"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Zum Schließen nach unten ziehen"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menü \"Bild im Bild\""</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menü"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ist in Bild im Bild"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Wenn du nicht möchtest, dass <xliff:g id="NAME">%s</xliff:g> diese Funktion verwendet, tippe, um die Einstellungen zu öffnen und die Funktion zu deaktivieren."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Wenn du nicht möchtest, dass <xliff:g id="NAME">%s</xliff:g> diese Funktion verwendet, tippe, um die Einstellungen zu öffnen und die Funktion zu deaktivieren."</string>
     <string name="pip_play" msgid="1417176722760265888">"Wiedergeben"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pausieren"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Vorwärts springen"</string>
@@ -758,6 +758,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menü"</string>
     <string name="tuner_app" msgid="3507057938640108777">"App \"<xliff:g id="APP">%1$s</xliff:g>\""</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Warnmeldungen"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Akku"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Screenshots"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Nachrichten"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Speicher"</string>
@@ -778,4 +779,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Apps, die im Hintergrund ausgeführt werden"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Für Details zur Akku- und Datennutzung tippen"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobile Daten deaktivieren?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Deine Eingabe wird von \"Einstellungen\" nicht erkannt, weil die Berechtigungsanfrage von einer App verdeckt wird."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 7d890a3..b2716a6 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -51,8 +51,8 @@
     <string name="bluetooth_tethered" msgid="7094101612161133267">"Έγινε σύνδεση μέσω Bluetooth"</string>
     <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Ρύθμιση μεθόδων εισαγωγής"</string>
     <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Φυσικό πληκτρολόγιο"</string>
-    <string name="usb_device_permission_prompt" msgid="834698001271562057">"Να επιτρέπεται στο <xliff:g id="APPLICATION">%1$s</xliff:g> η πρόσβαση στη συσκευή USB;"</string>
-    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Να επιτρέπεται στο <xliff:g id="APPLICATION">%1$s</xliff:g> η πρόσβαση στο αξεσουάρ USB;"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"Να επιτρέπεται στην εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g> η πρόσβαση στη συσκευή USB;"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Να επιτρέπεται στην εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g> η πρόσβαση στο αξεσουάρ USB;"</string>
     <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Άνοιγμα του <xliff:g id="ACTIVITY">%1$s</xliff:g> κατά τη σύνδεση αυτής της συσκευής USB;"</string>
     <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Άνοιγμα του <xliff:g id="ACTIVITY">%1$s</xliff:g> κατά τη σύνδεση αυτού του αξεσουάρ USB;"</string>
     <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Δεν έχετε εφαρμογή που να συνεργάζεται με το αξεσουάρ USB. Για περισσότερα: <xliff:g id="URL">%1$s</xliff:g>"</string>
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Το μοναδικό χαρακτηριστικό του κλειδιού RSA είναι:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Να επιτρέπεται πάντα από αυτόν τον υπολογιστή"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Δεν επιτρέπεται ο εντοπισμός σφαλμάτων USB"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Ο χρήστης που είναι συνδεδεμένος αυτήν τη στιγμή σε αυτήν τη συσκευή δεν μπορεί να ενεργοποιήσει τον εντοπισμό σφαλμάτων USB. Για να χρησιμοποιήσετε αυτήν τη λειτουργία, κάντε εναλλαγή στον χρήστη Διαχειριστή."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Ο χρήστης που είναι συνδεδεμένος αυτήν τη στιγμή σε αυτήν τη συσκευή δεν μπορεί να ενεργοποιήσει τον εντοπισμό σφαλμάτων USB. Για να χρησιμοποιήσετε αυτήν τη λειτουργία, κάντε εναλλαγή στον κύριο χρήστη."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Ζουμ σε πλήρη οθόνη"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Προβoλή σε πλήρη οθ."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Αποθήκ. στιγμιότυπου οθόνης..."</string>
@@ -184,7 +184,7 @@
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Η ειδοποίηση έχει απορριφθεί."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Πλαίσιο σκίασης ειδοποιήσεων."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Γρήγορες ρυθμίσεις."</string>
-    <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Κλείδωμα οθόνης."</string>
+    <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Οθόνη κλειδώματος"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"Ρυθμίσεις"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Επισκόπηση."</string>
     <string name="accessibility_desc_work_lock" msgid="4288774420752813383">"Οθόνη κλειδωμένης εργασίας"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Αναζήτηση"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Κύλιση προς τα επάνω για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Κύλιση προς τα αριστερά για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Δεν θα ενοχλείστε από ήχους και δονήσεις, παρά μόνο από ξυπνητήρια, υπενθυμίσεις, συμβάντα και καλούντες που έχετε καθορίσει. Θα εξακολουθείτε να ακούτε όλο το περιεχόμενο που επιλέγετε να αναπαραγάγετε, συμπεριλαμβανομένων μουσικής, βίντεο και παιχνιδιών."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Δεν θα ενοχλείστε από ήχους και δονήσεις, παρά μόνο από ξυπνητήρια. Θα εξακολουθείτε να ακούτε όλο το περιεχόμενο που επιλέγετε να αναπαραγάγετε, συμπεριλαμβανομένων μουσικής, βίντεο και παιχνιδιών."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Δεν θα ενοχλείστε από ήχους και δονήσεις, παρά μόνο από ξυπνητήρια, υπενθυμίσεις, συμβάντα και καλούντες που έχετε καθορίσει. Θα εξακολουθείτε να ακούτε όλο το περιεχόμενο που επιλέγετε να αναπαραγάγετε, συμπεριλαμβανομένης της μουσικής, των βίντεο και των παιχνιδιών."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Δεν θα ενοχλείστε από ήχους και δονήσεις, παρά μόνο από ξυπνητήρια. Θα εξακολουθείτε να ακούτε όλο το περιεχόμενο που επιλέγετε να αναπαραγάγετε, συμπεριλαμβανομένης της μουσικής, των βίντεο και των παιχνιδιών."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Προσαρμογή"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Αυτή η επιλογή αποκλείει όλους τους ήχους και τις δονήσεις, μεταξύ των οποίων των ξυπνητηριών, της μουσικής, των βίντεο και των παιχνιδιών. Θα εξακολουθείτε να είστε σε θέση να πραγματοποιήσετε τηλεφωνικές κλήσεις."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Αυτή η επιλογή αποκλείει όλους τους ήχους και τις δονήσεις, όπως είναι οι ήχοι και οι δονήσεις από ξυπνητήρια, μουσική, βίντεο και παιχνίδια. Θα μπορείτε ακόμη να κάνετε τηλεφωνικές κλήσεις."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Αυτή η επιλογή αποκλείει όλους τους ήχους και τις δονήσεις, μεταξύ των οποίων των ξυπνητηριών, της μουσικής, των βίντεο και των παιχνιδιών."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Λιγότερο επείγουσες ειδοποιήσεις παρακάτω"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Μάθετε περισσότερα"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Έχετε συνδεθεί στην εφαρμογή <xliff:g id="VPN_APP">%1$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστοτόπων."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Άνοιγμα Ρυθμίσεων VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Άνοιγμα Ρυθμίσεων VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Άνοιγμα αξιόπιστων διαπιστευτηρίων"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Ο διαχειριστής σας έχει ενεργοποιήσει την καταγραφή δικτύου, η οποία παρακολουθεί την επισκεψιμότητα στη συσκευή σας.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με τον διαχειριστή σας."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Αυτή η εφαρμογή δεν διαθέτει κατηγορίες ειδοποιήσεων"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Οι ειδοποιήσεις από αυτήν την εφαρμογή δεν μπορούν να απενεργοποιηθούν"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 από <xliff:g id="NUMBER_1">%d</xliff:g> κατηγορίες ειδοποιήσεων από αυτή την εφαρμογή</item>
-      <item quantity="one">1 από <xliff:g id="NUMBER_0">%d</xliff:g> κατηγορία ειδοποιήσεων από αυτή την εφαρμογή</item>
+      <item quantity="other">1 από <xliff:g id="NUMBER_1">%s</xliff:g> κατηγορίες ειδοποιήσεων από αυτή την εφαρμογή</item>
+      <item quantity="one">1 από <xliff:g id="NUMBER_0">%s</xliff:g> κατηγορία ειδοποιήσεων από αυτή την εφαρμογή</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d λεπτό</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Χρήση της μπαταρίας"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Η εξοικονόμηση μπαταρίας δεν είναι διαθέσιμη κατά τη διάρκεια της φόρτισης"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Εξοικονόμηση μπαταρίας"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Η Εξοικονόμηση μπαταρίας δεν είναι διαθέσιμη κατά τη διάρκεια της φόρτισης"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Εξοικονόμηση μπαταρίας"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Μειώνει την απόδοση και τα δεδομένα παρασκηνίου"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Κουμπί <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -721,14 +721,14 @@
     <string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Άνοιγμα ρυθμίσεων <xliff:g id="ID_1">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Επεξεργασία σειράς ρυθμίσεων."</string>
     <string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Σελίδα <xliff:g id="ID_1">%1$d</xliff:g> από <xliff:g id="ID_2">%2$d</xliff:g>"</string>
-    <string name="tuner_lock_screen" msgid="5755818559638850294">"Κλείδωμα οθόνης"</string>
+    <string name="tuner_lock_screen" msgid="5755818559638850294">"Οθόνη κλειδώματος"</string>
     <string name="pip_phone_expand" msgid="5889780005575693909">"Ανάπτυξη"</string>
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Ελαχιστοποίηση"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Κλείσιμο"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Σύρετε προς τα κάτω για παράβλεψη"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Μενού λειτουργίας Picture in picture"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Μενού"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"Η λειτουργία picture-in-picture είναι ενεργή σε <xliff:g id="NAME">%s</xliff:g>."</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Εάν δεν θέλετε να χρησιμοποιείται αυτή η λειτουργία από την εφαρμογή <xliff:g id="NAME">%s</xliff:g>, πατήστε για να ανοίξετε τις ρυθμίσεις και απενεργοποιήστε την."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Εάν δεν θέλετε να χρησιμοποιείται αυτή η λειτουργία από την εφαρμογή <xliff:g id="NAME">%s</xliff:g>, πατήστε για να ανοίξετε τις ρυθμίσεις και απενεργοποιήστε την."</string>
     <string name="pip_play" msgid="1417176722760265888">"Αναπαραγωγή"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Παύση"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Μετάβαση στο επόμενο"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Μενού"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Εφαρμογή <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Ειδοποιήσεις"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Μπαταρία"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Στιγμιότυπα οθόνης"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Γενικά μηνύματα"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Αποθηκευτικός χώρος"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Εφαρμογές που εκτελούνται στο παρασκήνιο"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Πατήστε για λεπτομέρειες σχετικά με τη χρήση μπαταρίας και δεδομένων"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Απενεργοποίηση δεδομένων κινητής τηλεφωνίας;"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Επειδή μια εφαρμογή αποκρύπτει ένα αίτημα άδειας, δεν είναι δυνατή η επαλήθευση της απάντησής σας από τις Ρυθμίσεις."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 4d90d5b..fe17a2d 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"The computer\'s RSA key fingerprint is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB debugging not allowed"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"The user currently signed in to this device can\'t turn on USB debugging. To use this feature, please switch to an Admin user."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"The user currently signed in to this device can\'t turn on USB debugging. To use this feature, switch to the primary user."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom to fill screen"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Stretch to fill screen"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Saving screenshot…"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Search"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"You won’t be disturbed by sounds and vibrations, except from alarms, reminders, events and callers that you specify. You\'ll still hear anything that you choose to play, including music, videos and games."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"You won’t be disturbed by sounds and vibrations, except from alarms. You\'ll still hear anything that you choose to play, including music, videos and games."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"You won\'t be disturbed by sounds and vibrations, except from alarms, reminders, events and callers you specify. You\'ll still hear anything you choose to play including music, videos and games."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"You won\'t be disturbed by sounds and vibrations, except from alarms. You\'ll still hear anything you choose to play including music, videos and games."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Customise"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"This blocks ALL sounds and vibrations, including from alarms, music, videos and games. You’ll still be able to make phone calls."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"This blocks ALL sounds and vibrations, including from alarms, music, videos, and games. You\'ll still be able to make phone calls."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"This blocks ALL sounds and vibrations, including from alarms, music, videos and games."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Less urgent notifications below"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Find out more"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Open VPN Settings"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Open VPN settings"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Open trusted credentials"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Your admin has turned on network logging, which monitors traffic on your device.\n\nFor more information, contact your admin."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"This app doesn\'t have notification categories"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Notifications from this app can\'t be turned off"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 out of <xliff:g id="NUMBER_1">%d</xliff:g> notification categories from this app</item>
-      <item quantity="one">1 out of <xliff:g id="NUMBER_0">%d</xliff:g> notification category from this app</item>
+      <item quantity="other">1 out of <xliff:g id="NUMBER_1">%s</xliff:g> notification categories from this app</item>
+      <item quantity="one">1 out of <xliff:g id="NUMBER_0">%s</xliff:g> notification category from this app</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d minute</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Battery usage"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Battery Saver not available during charging"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Battery Saver"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Battery Saver not available during charging"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Battery Saver"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduces performance and background data"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Button <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimise"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Close"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Drag down to dismiss"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Picture in picture menu"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> is in picture-in-picture"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"If you don’t want <xliff:g id="NAME">%s</xliff:g> to use this feature, tap to open settings and turn it off."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"If you don\'t want <xliff:g id="NAME">%s</xliff:g> to use this feature, tap to open settings and turn it off."</string>
     <string name="pip_play" msgid="1417176722760265888">"Play"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pause"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Skip to next"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> app"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alerts"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Battery"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Screenshots"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"General Messages"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Storage"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Apps running in background"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap for details on battery and data usage"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Turn off mobile data?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Because an app is obscuring a permission request, Settings can’t verify your response."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rCA-land/strings.xml b/packages/SystemUI/res/values-en-rCA-land/strings.xml
new file mode 100644
index 0000000..ba773b8
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rCA-land/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"Screen is now locked in landscape orientation."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-en-rCA/config.xml b/packages/SystemUI/res/values-en-rCA/config.xml
new file mode 100644
index 0000000..5309563
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rCA/config.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string>
+</resources>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..1ff0ee4
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -0,0 +1,779 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"System UI"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Clear"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remove from list"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App info"</string>
+    <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Your recent screens appear here"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dismiss recent apps"</string>
+    <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
+      <item quantity="other">%d screens in Overview</item>
+      <item quantity="one">1 screen in Overview</item>
+    </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
+    <string name="battery_low_title" msgid="6456385927409742437">"Battery is low"</string>
+    <string name="battery_low_percent_format" msgid="2900940511201380775">"<xliff:g id="PERCENTAGE">%s</xliff:g> remaining"</string>
+    <string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"<xliff:g id="PERCENTAGE">%s</xliff:g> remaining. Battery saver is on."</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"USB charging not supported.\nUse only the supplied charger."</string>
+    <string name="invalid_charger_title" msgid="3515740382572798460">"USB charging not supported."</string>
+    <string name="invalid_charger_text" msgid="5474997287953892710">"Use only the supplied charger."</string>
+    <string name="battery_low_why" msgid="4553600287639198111">"Settings"</string>
+    <string name="battery_saver_confirmation_title" msgid="5299585433050361634">"Turn on battery saver?"</string>
+    <string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Turn on"</string>
+    <string name="battery_saver_start_action" msgid="5576697451677486320">"Turn on battery saver"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Settings"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Auto-rotate screen"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"MUTE"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Notifications"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tethered"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Set up input methods"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Physical keyboard"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB device?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB accessory?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB device is connected?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB accessory is connected?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"No installed apps work with this USB accessory. Learn more about this accessory at <xliff:g id="URL">%1$s</xliff:g>"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"USB accessory"</string>
+    <string name="label_view" msgid="6304565553218192990">"View"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"Use by default for this USB device"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"Use by default for this USB accessory"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"Allow USB debugging?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"The computer\'s RSA key fingerprint is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string>
+    <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB debugging not allowed"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"The user currently signed in to this device can\'t turn on USB debugging. To use this feature, switch to the primary user."</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"Zoom to fill screen"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"Stretch to fill screen"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Saving screenshot…"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"Saving screenshot…"</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"Screenshot is being saved."</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"Screenshot captured."</string>
+    <string name="screenshot_saved_text" msgid="2685605830386712477">"Tap to view your screenshot."</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"Couldn\'t capture screenshot."</string>
+    <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"Problem encountered while saving screenshot."</string>
+    <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"Can\'t save screenshot due to limited storage space."</string>
+    <string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Taking screenshots isn\'t allowed by the app or your organisation"</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB file transfer options"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"Mount as a media player (MTP)"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"Mount as a camera (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Install Android File Transfer application for Mac"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"Back"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
+    <string name="accessibility_accessibility_button" msgid="7601252764577607915">"Accessibility"</string>
+    <string name="accessibility_recent" msgid="5208608566793607626">"Overview"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Search"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Camera"</string>
+    <string name="accessibility_phone_button" msgid="6738112589538563574">"Phone"</string>
+    <string name="accessibility_voice_assist_button" msgid="487611083884852965">"Voice Assist"</string>
+    <string name="accessibility_unlock_button" msgid="128158454631118828">"Unlock"</string>
+    <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"Waiting for fingerprint"</string>
+    <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"Unlock without using your fingerprint"</string>
+    <string name="unlock_label" msgid="8779712358041029439">"unlock"</string>
+    <string name="phone_label" msgid="2320074140205331708">"open phone"</string>
+    <string name="voice_assist_label" msgid="3956854378310019854">"open voice assist"</string>
+    <string name="camera_label" msgid="7261107956054836961">"open camera"</string>
+    <string name="recents_caption_resize" msgid="3517056471774958200">"Select new task layout"</string>
+    <string name="cancel" msgid="6442560571259935130">"Cancel"</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Compatibility zoom button."</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom smaller to larger screen."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth connected."</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth disconnected."</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"No battery."</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Battery one bar."</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Battery two bars."</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Battery three bars."</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"Battery full."</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"No phone."</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Phone one bar."</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Phone two bars."</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Phone three bars."</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Phone signal full."</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"No data."</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data one bar."</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data two bars."</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data three bars."</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Data signal full."</string>
+    <string name="accessibility_wifi_name" msgid="7202151365171148501">"Connected to <xliff:g id="WIFI">%s</xliff:g>."</string>
+    <string name="accessibility_bluetooth_name" msgid="8441517146585531676">"Connected to <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
+    <string name="accessibility_cast_name" msgid="4026393061247081201">"Connected to <xliff:g id="CAST">%s</xliff:g>."</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"No WiMAX."</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX one bar."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX two bars."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX three bars."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX signal full."</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Ethernet disconnected."</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Ethernet connected."</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"No signal."</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"Not connected."</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"Zero bars."</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"One bar."</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"Two bars."</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"Three bars."</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"Signal full."</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"On."</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"Off."</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"Connected."</string>
+    <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connecting."</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"4G+"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"LTE+"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"No SIM."</string>
+    <string name="accessibility_cell_data" msgid="5326139158682385073">"Mobile data"</string>
+    <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobile data on"</string>
+    <string name="accessibility_cell_data_off" msgid="443267573897409704">"Mobile data off"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering"</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Aeroplane mode"</string>
+    <string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN on."</string>
+    <string name="accessibility_no_sims" msgid="3957997018324995781">"No SIM card."</string>
+    <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Carrier network changing."</string>
+    <string name="accessibility_battery_details" msgid="7645516654955025422">"Open battery details"</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"Battery <xliff:g id="NUMBER">%d</xliff:g> per cent."</string>
+    <string name="accessibility_battery_level_charging" msgid="1147587904439319646">"Battery charging, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> percent."</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"System settings"</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifications."</string>
+    <string name="accessibility_overflow_action" msgid="5681882033274783311">"See all notifications"</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Clear notification."</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS enabled."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS acquiring."</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter enabled."</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Ringer vibrate."</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ringer silent."</string>
+    <!-- no translation found for accessibility_casting (6887382141726543668) -->
+    <skip />
+    <string name="accessibility_work_mode" msgid="2478631941714607225">"Work mode"</string>
+    <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
+    <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string>
+    <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Open <xliff:g id="APP">%s</xliff:g> application info."</string>
+    <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string>
+    <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lock screen."</string>
+    <string name="accessibility_desc_settings" msgid="3417884241751434521">"Settings"</string>
+    <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Overview."</string>
+    <string name="accessibility_desc_work_lock" msgid="4288774420752813383">"Work lock screen"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"Close"</string>
+    <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi turned off."</string>
+    <string name="accessibility_quick_settings_wifi_changed_on" msgid="6440117170789528622">"Wi-Fi turned on."</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Mobile <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Battery <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_airplane_off" msgid="7786329360056634412">"Aeroplane mode off."</string>
+    <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Aeroplane mode on."</string>
+    <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Aeroplane mode turned off."</string>
+    <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Aeroplane mode turned on."</string>
+    <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\'Do not disturb\' on, priority only."</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Do not disturb on, total silence."</string>
+    <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Do not disturb on, alarms only."</string>
+    <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Do not disturb"</string>
+    <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\'Do not disturb\' off."</string>
+    <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\'Do not disturb\' turned off."</string>
+    <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\'Do not disturb\' turned on."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"Bluetooth"</string>
+    <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth off."</string>
+    <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth on."</string>
+    <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth connecting."</string>
+    <string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"Bluetooth connected."</string>
+    <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="2730003763480934529">"Bluetooth turned off."</string>
+    <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="8722351798763206577">"Bluetooth turned on."</string>
+    <string name="accessibility_quick_settings_location_off" msgid="5119080556976115520">"Location reporting off."</string>
+    <string name="accessibility_quick_settings_location_on" msgid="5809937096590102036">"Location reporting on."</string>
+    <string name="accessibility_quick_settings_location_changed_off" msgid="8526845571503387376">"Location reporting turned off."</string>
+    <string name="accessibility_quick_settings_location_changed_on" msgid="339403053079338468">"Location reporting turned on."</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm set for <xliff:g id="TIME">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_close" msgid="3115847794692516306">"Close panel."</string>
+    <string name="accessibility_quick_settings_more_time" msgid="3659274935356197708">"More time."</string>
+    <string name="accessibility_quick_settings_less_time" msgid="2404728746293515623">"Less time."</string>
+    <string name="accessibility_quick_settings_flashlight_off" msgid="4936432000069786988">"Flashlight off."</string>
+    <string name="accessibility_quick_settings_flashlight_unavailable" msgid="8012811023312280810">"Flashlight unavailable."</string>
+    <string name="accessibility_quick_settings_flashlight_on" msgid="2003479320007841077">"Flashlight on."</string>
+    <string name="accessibility_quick_settings_flashlight_changed_off" msgid="3303701786768224304">"Flashlight turned off."</string>
+    <string name="accessibility_quick_settings_flashlight_changed_on" msgid="6531793301533894686">"Flashlight turned on."</string>
+    <string name="accessibility_quick_settings_color_inversion_changed_off" msgid="4406577213290173911">"Colour inversion turned off."</string>
+    <string name="accessibility_quick_settings_color_inversion_changed_on" msgid="6897462320184911126">"Colour inversion turned on."</string>
+    <string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobile hotspot turned off."</string>
+    <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobile hotspot turned on."</string>
+    <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Screen casting stopped."</string>
+    <string name="accessibility_quick_settings_work_mode_off" msgid="7045417396436552890">"Work mode off."</string>
+    <string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"Work mode on."</string>
+    <string name="accessibility_quick_settings_work_mode_changed_off" msgid="5605534876107300711">"Work mode turned off."</string>
+    <string name="accessibility_quick_settings_work_mode_changed_on" msgid="249840330756998612">"Work mode turned on."</string>
+    <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"Data Saver turned off."</string>
+    <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"Data Saver turned on."</string>
+    <string name="accessibility_brightness" msgid="8003681285547803095">"Display brightness"</string>
+    <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Charging"</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G data is paused"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G data is paused"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobile data is paused"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data is paused"</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"The data limit that you set has been reached. You are no longer using mobile data.\n\nIf you resume, charges may apply for data usage."</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Resume"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"No Internet connection"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi connected"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"Searching for GPS"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"Location set by GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Location requests active"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"Clear all notifications."</string>
+    <string name="notification_group_overflow_indicator" msgid="1863231301642314183">"+<xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <plurals name="notification_group_overflow_description" formatted="false" msgid="4579313201268495404">
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> more notifications inside.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> more notification inside.</item>
+    </plurals>
+    <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"Notification settings"</string>
+    <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> settings"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Screen will rotate automatically."</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Screen is locked in landscape orientation."</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Screen is locked in portrait orientation."</string>
+    <string name="accessibility_rotation_lock_off_changed" msgid="8134601071026305153">"Screen will now rotate automatically."</string>
+    <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"Screen is now locked in landscape orientation."</string>
+    <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"Screen is now locked in portrait orientation."</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
+    <string name="start_dreams" msgid="5640361424498338327">"Screen saver"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
+    <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Do not disturb"</string>
+    <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priority only"</string>
+    <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarms only"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Total silence"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Devices)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Off"</string>
+    <string name="quick_settings_bluetooth_detail_empty_text" msgid="4910015762433302860">"No paired devices available"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brightness"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Auto-rotate"</string>
+    <string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Auto-rotate screen"</string>
+    <string name="accessibility_quick_settings_rotation_value" msgid="8187398200140760213">"<xliff:g id="ID_1">%s</xliff:g> mode"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotation locked"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portrait"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Landscape"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Input Method"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Location"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Location Off"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Media device"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Emergency Calls Only"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"Settings"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"Time"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"Me"</string>
+    <string name="quick_settings_user_title" msgid="4467690427642392403">"User"</string>
+    <string name="quick_settings_user_new_user" msgid="9030521362023479778">"New user"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Not Connected"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Off"</string>
+    <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi On"</string>
+    <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"No Wi-Fi networks available"</string>
+    <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string>
+    <string name="quick_settings_casting" msgid="6601710681033353316">"Casting"</string>
+    <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Unnamed device"</string>
+    <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Ready to cast"</string>
+    <string name="quick_settings_cast_detail_empty_text" msgid="311785821261640623">"No devices available"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brightness"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
+    <string name="quick_settings_inversion_label" msgid="8790919884718619648">"Invert colours"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Colour correction mode"</string>
+    <string name="quick_settings_more_settings" msgid="326112621462813682">"More settings"</string>
+    <string name="quick_settings_done" msgid="3402999958839153376">"Done"</string>
+    <string name="quick_settings_connected" msgid="1722253542984847487">"Connected"</string>
+    <string name="quick_settings_connected_battery_level" msgid="4136051440381328892">"Connected, battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+    <string name="quick_settings_connecting" msgid="47623027419264404">"Connecting..."</string>
+    <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string>
+    <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string>
+    <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Notifications"</string>
+    <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Flashlight"</string>
+    <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Mobile data"</string>
+    <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Data usage"</string>
+    <string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Remaining data"</string>
+    <string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Over limit"</string>
+    <string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> used"</string>
+    <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> limit"</string>
+    <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> warning"</string>
+    <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work mode"</string>
+    <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Night Light"</string>
+    <string name="quick_settings_nfc_label" msgid="9012153754816969325">"NFC"</string>
+    <string name="quick_settings_nfc_off" msgid="6883274004315134333">"NFC is disabled"</string>
+    <string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC is enabled"</string>
+    <string name="recents_empty_message" msgid="808480104164008572">"No recent items"</string>
+    <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"You\'ve cleared everything"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
+    <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"screen pinning"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string>
+    <string name="recents_launch_error_message" msgid="2969287838120550506">"Could not start <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> is disabled in safe-mode."</string>
+    <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Clear all"</string>
+    <string name="recents_drag_hint_message" msgid="2649739267073203985">"Drag here to use split screen"</string>
+    <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
+    <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
+    <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string>
+    <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Split screen to the top"</string>
+    <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Split screen to the left"</string>
+    <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Split screen to the right"</string>
+  <string-array name="recents_blacklist_array">
+  </string-array>
+    <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string>
+    <string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string>
+    <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> until full"</string>
+    <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"Not charging"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Network may\nbe monitored"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Search"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"You won\'t be disturbed by sounds and vibrations, except from alarms, reminders, events and callers you specify. You\'ll still hear anything you choose to play including music, videos and games."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"You won\'t be disturbed by sounds and vibrations, except from alarms. You\'ll still hear anything you choose to play including music, videos and games."</string>
+    <string name="zen_priority_customize_button" msgid="7948043278226955063">"Customise"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"This blocks ALL sounds and vibrations, including from alarms, music, videos, and games. You\'ll still be able to make phone calls."</string>
+    <string name="zen_silence_introduction" msgid="3137882381093271568">"This blocks ALL sounds and vibrations, including from alarms, music, videos and games."</string>
+    <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
+    <string name="speed_bump_explanation" msgid="1288875699658819755">"Less urgent notifications below"</string>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Tap again to open"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Swipe up to unlock"</string>
+    <string name="do_disclosure_generic" msgid="5615898451805157556">"This device is managed by your organization"</string>
+    <string name="do_disclosure_with_name" msgid="5640615509915445501">"This device is managed by <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"Swipe from icon for phone"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"Swipe from icon for voice assist"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"Swipe from icon for camera"</string>
+    <string name="interruption_level_none_with_warning" msgid="5114872171614161084">"Total silence. This will also silence screen readers."</string>
+    <string name="interruption_level_none" msgid="6000083681244492992">"Total silence"</string>
+    <string name="interruption_level_priority" msgid="6426766465363855505">"Priority only"</string>
+    <string name="interruption_level_alarms" msgid="5226306993448328896">"Alarms only"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Total\nsilence"</string>
+    <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priority\nonly"</string>
+    <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarms\nonly"</string>
+    <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charging (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string>
+    <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Charging rapidly (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string>
+    <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Charging slowly (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string>
+    <string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Switch user"</string>
+    <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Switch user, current user <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
+    <string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Current user <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
+    <string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"Show profile"</string>
+    <string name="user_add_user" msgid="5110251524486079492">"Add user"</string>
+    <string name="user_new_user_name" msgid="426540612051178753">"New user"</string>
+    <string name="guest_nickname" msgid="8059989128963789678">"Guest"</string>
+    <string name="guest_new_guest" msgid="600537543078847803">"Add guest"</string>
+    <string name="guest_exit_guest" msgid="7187359342030096885">"Remove guest"</string>
+    <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"Remove guest?"</string>
+    <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"All apps and data in this session will be deleted."</string>
+    <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"Remove"</string>
+    <string name="guest_wipe_session_title" msgid="6419439912885956132">"Welcome back, guest!"</string>
+    <string name="guest_wipe_session_message" msgid="8476238178270112811">"Do you want to continue your session?"</string>
+    <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"Start again"</string>
+    <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"Yes, continue"</string>
+    <string name="guest_notification_title" msgid="1585278533840603063">"Guest user"</string>
+    <string name="guest_notification_text" msgid="335747957734796689">"To delete apps and data, remove guest user"</string>
+    <string name="guest_notification_remove_action" msgid="8820670703892101990">"REMOVE GUEST"</string>
+    <string name="user_logout_notification_title" msgid="1453960926437240727">"Logout user"</string>
+    <string name="user_logout_notification_text" msgid="3350262809611876284">"Log out current user"</string>
+    <string name="user_logout_notification_action" msgid="1195428991423425062">"LOGOUT USER"</string>
+    <string name="user_add_user_title" msgid="4553596395824132638">"Add new user?"</string>
+    <string name="user_add_user_message_short" msgid="2161624834066214559">"When you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users."</string>
+    <string name="user_remove_user_title" msgid="4681256956076895559">"Remove user?"</string>
+    <string name="user_remove_user_message" msgid="1453218013959498039">"All apps and data of this user will be deleted."</string>
+    <string name="user_remove_user_remove" msgid="7479275741742178297">"Remove"</string>
+    <string name="battery_saver_notification_title" msgid="237918726750955859">"Battery saver is on"</string>
+    <string name="battery_saver_notification_text" msgid="820318788126672692">"Reduces performance and background data"</string>
+    <string name="battery_saver_notification_action_text" msgid="109158658238110382">"Turn off battery saver"</string>
+    <string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> will start capturing everything that\'s displayed on your screen."</string>
+    <string name="media_projection_remember_text" msgid="3103510882172746752">"Don\'t show again"</string>
+    <string name="clear_all_notifications_text" msgid="814192889771462828">"Clear all"</string>
+    <string name="media_projection_action_text" msgid="8470872969457985954">"Start now"</string>
+    <string name="empty_shade_text" msgid="708135716272867002">"No notifications"</string>
+    <string name="profile_owned_footer" msgid="8021888108553696069">"Profile may be monitored"</string>
+    <string name="vpn_footer" msgid="2388611096129106812">"Network may be monitored"</string>
+    <string name="branded_vpn_footer" msgid="2168111859226496230">"Network may be monitored"</string>
+    <string name="quick_settings_disclosure_management_monitoring" msgid="6645176135063957394">"Your organisation manages this device and may monitor network traffic"</string>
+    <string name="quick_settings_disclosure_named_management_monitoring" msgid="370622174777570853">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> manages this device and may monitor network traffic"</string>
+    <string name="quick_settings_disclosure_management_named_vpn" msgid="1085137869053332307">"Device is managed by your organisation and connected to <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
+    <string name="quick_settings_disclosure_named_management_named_vpn" msgid="6290456493852584017">"Device is managed by <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> and connected to <xliff:g id="VPN_APP">%2$s</xliff:g>"</string>
+    <string name="quick_settings_disclosure_management" msgid="3294967280853150271">"Device is managed by your organisation"</string>
+    <string name="quick_settings_disclosure_named_management" msgid="1059403025094542908">"Device is managed by <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>"</string>
+    <string name="quick_settings_disclosure_management_vpns" msgid="3698767349925266482">"Device is managed by your organisation and connected to VPNs"</string>
+    <string name="quick_settings_disclosure_named_management_vpns" msgid="7777821385318891527">"Device is managed by <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> and connected to VPNs"</string>
+    <string name="quick_settings_disclosure_managed_profile_monitoring" msgid="5125463987558278215">"Your organisation may monitor network traffic in your work profile"</string>
+    <string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8973606847896650284">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> may monitor network traffic in your work profile"</string>
+    <string name="quick_settings_disclosure_monitoring" msgid="679658227269205728">"Network may be monitored"</string>
+    <string name="quick_settings_disclosure_vpns" msgid="8170318392053156330">"Device connected to VPNs"</string>
+    <string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"Work profile connected to <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
+    <string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"Personal profile connected to <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
+    <string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"Device connected to <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
+    <string name="monitoring_title_device_owned" msgid="1652495295941959815">"Device management"</string>
+    <string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profile monitoring"</string>
+    <string name="monitoring_title" msgid="169206259253048106">"Network monitoring"</string>
+    <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
+    <string name="monitoring_subtitle_network_logging" msgid="3341264304793193386">"Network logging"</string>
+    <string name="monitoring_subtitle_ca_certificate" msgid="3874151893894355988">"CA certificates"</string>
+    <string name="disable_vpn" msgid="4435534311510272506">"Disable VPN"</string>
+    <string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string>
+    <string name="monitoring_button_view_policies" msgid="100913612638514424">"View Policies"</string>
+    <string name="monitoring_description_named_management" msgid="5281789135578986303">"Your device is managed by <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nYour admin can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nFor more information, contact your admin."</string>
+    <string name="monitoring_description_management" msgid="4573721970278370790">"Your device is managed by your organisation.\n\nYour admin can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nFor more information, contact your admin."</string>
+    <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"Your organisation installed a certificate authority on this device. Your secure network traffic may be monitored or modified."</string>
+    <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"Your organisation installed a certificate authority in your work profile. Your secure network traffic may be monitored or modified."</string>
+    <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"A certificate authority is installed on this device. Your secure network traffic may be monitored or modified."</string>
+    <string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"Your admin has turned on network logging, which monitors traffic on your device."</string>
+    <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
+    <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"You\'re connected to <xliff:g id="VPN_APP_0">%1$s</xliff:g> and <xliff:g id="VPN_APP_1">%2$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
+    <string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"Your work profile is connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
+    <string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"Your personal profile is connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
+    <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Your device is managed by <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
+    <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> uses <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> to manage your device."</string>
+    <string name="monitoring_description_do_body" msgid="3639594537660975895">"Your admin can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information."</string>
+    <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
+    <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Find out more"</string>
+    <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
+    <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Open VPN settings"</string>
+    <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
+    <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Open trusted credentials"</string>
+    <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Your admin has turned on network logging, which monitors traffic on your device.\n\nFor more information, contact your admin."</string>
+    <string name="monitoring_description_vpn" msgid="4445150119515393526">"You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and websites."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour admin is capable of monitoring your network activity including emails, apps and websites.\n\nFor more information, contact your admin.\n\nYou\'re also connected to a VPN, which can monitor your network activity."</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
+    <string name="monitoring_description_app" msgid="1828472472674709532">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
+    <string name="monitoring_description_app_personal" msgid="484599052118316268">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
+    <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
+    <string name="monitoring_description_app_work" msgid="4612997849787922906">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. The profile is connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your admin."</string>
+    <string name="monitoring_description_app_personal_work" msgid="5664165460056859391">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. The profile is connected to <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, which can monitor your personal network activity."</string>
+    <string name="keyguard_indication_trust_granted" msgid="4985003749105182372">"Unlocked for <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
+    <string name="keyguard_indication_trust_managed" msgid="8319646760022357585">"<xliff:g id="TRUST_AGENT">%1$s</xliff:g> is running"</string>
+    <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
+    <string name="hidden_notifications_title" msgid="7139628534207443290">"Get notifications faster"</string>
+    <string name="hidden_notifications_text" msgid="2326409389088668981">"See them before you unlock"</string>
+    <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No, thanks"</string>
+    <string name="hidden_notifications_setup" msgid="41079514801976810">"Setup"</string>
+    <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
+    <string name="volume_zen_end_now" msgid="6930243045593601084">"Turn off now"</string>
+    <string name="accessibility_volume_expand" msgid="5946812790999244205">"Expand"</string>
+    <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Collapse"</string>
+    <string name="screen_pinning_title" msgid="3273740381976175811">"Screen is pinned"</string>
+    <string name="screen_pinning_description" msgid="8909878447196419623">"This keeps it in view until you unpin. Touch &amp; hold Back and Overview to unpin."</string>
+    <string name="screen_pinning_description_accessible" msgid="426190689254018656">"This keeps it in view until you unpin. Touch &amp; hold Overview to unpin."</string>
+    <string name="screen_pinning_positive" msgid="3783985798366751226">"Got it"</string>
+    <string name="screen_pinning_negative" msgid="3741602308343880268">"No, thanks"</string>
+    <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Hide <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
+    <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"It will reappear the next time you turn it on in settings."</string>
+    <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Hide"</string>
+    <string name="managed_profile_foreground_toast" msgid="5421487114739245972">"You\'re using your work profile"</string>
+    <string name="stream_voice_call" msgid="4410002696470423714">"Call"</string>
+    <string name="stream_system" msgid="7493299064422163147">"System"</string>
+    <string name="stream_ring" msgid="8213049469184048338">"Ring"</string>
+    <string name="stream_music" msgid="9086982948697544342">"Media"</string>
+    <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+    <string name="stream_notification" msgid="2563720670905665031">"Notification"</string>
+    <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+    <string name="stream_dtmf" msgid="2447177903892477915">"Dual multi-tone frequency"</string>
+    <string name="stream_accessibility" msgid="301136219144385106">"Accessibility"</string>
+    <string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Tap to unmute."</string>
+    <string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Tap to set to vibrate. Accessibility services may be muted."</string>
+    <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Tap to mute. Accessibility services may be muted."</string>
+    <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap to set to vibrate."</string>
+    <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap to mute."</string>
+    <string name="volume_dialog_accessibility_shown_message" msgid="1834631467074259998">"%s volume controls shown. Swipe up to dismiss."</string>
+    <string name="volume_dialog_accessibility_dismissed_message" msgid="51543526013711399">"Volume controls hidden"</string>
+    <string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
+    <string name="show_battery_percentage" msgid="5444136600512968798">"Show embedded battery percentage"</string>
+    <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Show battery level percentage inside the status bar icon when not charging"</string>
+    <string name="quick_settings" msgid="10042998191725428">"Quick Settings"</string>
+    <string name="status_bar" msgid="4877645476959324760">"Status bar"</string>
+    <string name="overview" msgid="4018602013895926956">"Overview"</string>
+    <string name="demo_mode" msgid="2532177350215638026">"System UI demo mode"</string>
+    <string name="enable_demo_mode" msgid="4844205668718636518">"Enable demo mode"</string>
+    <string name="show_demo_mode" msgid="2018336697782464029">"Show demo mode"</string>
+    <string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
+    <string name="status_bar_alarm" msgid="8536256753575881818">"Alarm"</string>
+    <string name="status_bar_work" msgid="6022553324802866373">"Work profile"</string>
+    <string name="status_bar_airplane" msgid="7057575501472249002">"Aeroplane mode"</string>
+    <string name="add_tile" msgid="2995389510240786221">"Add tile"</string>
+    <string name="broadcast_tile" msgid="3894036511763289383">"Broadcast Tile"</string>
+    <string name="zen_alarm_warning_indef" msgid="3482966345578319605">"You won\'t hear your next alarm <xliff:g id="WHEN">%1$s</xliff:g> unless you turn this off before then"</string>
+    <string name="zen_alarm_warning" msgid="444533119582244293">"You won\'t hear your next alarm <xliff:g id="WHEN">%1$s</xliff:g>"</string>
+    <string name="alarm_template" msgid="3980063409350522735">"at <xliff:g id="WHEN">%1$s</xliff:g>"</string>
+    <string name="alarm_template_far" msgid="4242179982586714810">"on <xliff:g id="WHEN">%1$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_detail" msgid="2579369091672902101">"Quick Settings, <xliff:g id="TITLE">%s</xliff:g>."</string>
+    <string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"Hotspot"</string>
+    <string name="accessibility_managed_profile" msgid="6613641363112584120">"Work profile"</string>
+    <string name="tuner_warning_title" msgid="7094689930793031682">"Fun for some but not for all"</string>
+    <string name="tuner_warning" msgid="8730648121973575701">"System UI Tuner gives you extra ways to tweak and customise the Android user interface. These experimental features may change, break or disappear in future releases. Proceed with caution."</string>
+    <string name="tuner_persistent_warning" msgid="8597333795565621795">"These experimental features may change, break or disappear in future releases. Proceed with caution."</string>
+    <string name="got_it" msgid="2239653834387972602">"Got it"</string>
+    <string name="tuner_toast" msgid="603429811084428439">"Congrats! System UI Tuner has been added to Settings"</string>
+    <string name="remove_from_settings" msgid="8389591916603406378">"Remove from settings"</string>
+    <string name="remove_from_settings_prompt" msgid="6069085993355887748">"Remove System UI Tuner from Settings and stop using all of its features?"</string>
+    <string name="activity_not_found" msgid="348423244327799974">"Application is not installed on your device"</string>
+    <string name="clock_seconds" msgid="7689554147579179507">"Show clock seconds"</string>
+    <string name="clock_seconds_desc" msgid="6282693067130470675">"Show clock seconds in the status bar. May impact battery life."</string>
+    <string name="qs_rearrange" msgid="8060918697551068765">"Rearrange Quick Settings"</string>
+    <string name="show_brightness" msgid="6613930842805942519">"Show brightness in Quick Settings"</string>
+    <string name="experimental" msgid="6198182315536726162">"Experimental"</string>
+    <string name="enable_bluetooth_title" msgid="5027037706500635269">"Turn on Bluetooth?"</string>
+    <string name="enable_bluetooth_message" msgid="9106595990708985385">"To connect your keyboard with your tablet, you first have to turn on Bluetooth."</string>
+    <string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"Turn on"</string>
+    <string name="show_silently" msgid="6841966539811264192">"Show notifications silently"</string>
+    <string name="block" msgid="2734508760962682611">"Block all notifications"</string>
+    <string name="do_not_silence" msgid="6878060322594892441">"Don\'t silence"</string>
+    <string name="do_not_silence_block" msgid="4070647971382232311">"Don\'t silence or block"</string>
+    <string name="tuner_full_importance_settings" msgid="3207312268609236827">"Power notification controls"</string>
+    <string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"On"</string>
+    <string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Off"</string>
+    <string name="power_notification_controls_description" msgid="4372459941671353358">"With power notification controls, you can set an importance level from 0 to 5 for an app\'s notifications. \n\n"<b>"Level 5"</b>" \n- Show at the top of the notification list \n- Allow full screen interruption \n- Always peek \n\n"<b>"Level 4"</b>" \n- Prevent full screen interruption \n- Always peek \n\n"<b>"Level 3"</b>" \n- Prevent full screen interruption \n- Never peek \n\n"<b>"Level 2"</b>" \n- Prevent full screen interruption \n- Never peek \n- Never make sound and vibration \n\n"<b>"Level 1"</b>" \n- Prevent full screen interruption \n- Never peek \n- Never make sound or vibrate \n- Hide from lock screen and status bar \n- Show at the bottom of the notification list \n\n"<b>"Level 0"</b>" \n- Block all notifications from the app"</string>
+    <string name="notification_header_default_channel" msgid="7506845022070889909">"Notifications"</string>
+    <string name="notification_channel_disabled" msgid="2139193533791840539">"You won\'t get these notifications anymore"</string>
+    <string name="notification_num_channels" msgid="2048144408999179471">"<xliff:g id="NUMBER">%d</xliff:g> notification categories"</string>
+    <string name="notification_default_channel_desc" msgid="2506053815870808359">"This app doesn\'t have notification categories"</string>
+    <string name="notification_unblockable_desc" msgid="3561016061737896906">"Notifications from this app can\'t be turned off"</string>
+    <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
+      <item quantity="other">1 out of <xliff:g id="NUMBER_1">%s</xliff:g> notification categories from this app</item>
+      <item quantity="one">1 out of <xliff:g id="NUMBER_0">%s</xliff:g> notification category from this app</item>
+    </plurals>
+    <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
+    <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
+      <item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>, and <xliff:g id="NUMBER_5">%3$d</xliff:g> others</item>
+      <item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g>, and <xliff:g id="NUMBER_2">%3$d</xliff:g> other</item>
+    </plurals>
+    <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Notification controls for <xliff:g id="APP_NAME">%1$s</xliff:g> opened"</string>
+    <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Notification controls for <xliff:g id="APP_NAME">%1$s</xliff:g> closed"</string>
+    <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"Allow notifications from this channel"</string>
+    <string name="notification_all_categories" msgid="5407190218055113282">"All Categories"</string>
+    <string name="notification_more_settings" msgid="816306283396553571">"More settings"</string>
+    <string name="notification_app_settings" msgid="3743278649182392015">"Customise: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
+    <string name="notification_done" msgid="5279426047273930175">"Done"</string>
+    <string name="notification_menu_accessibility" msgid="2046162834248888553">"<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="2204480013726775108">"notification controls"</string>
+    <string name="notification_menu_snooze_description" msgid="3653669438131034525">"notification snooze options"</string>
+    <string name="snooze_undo" msgid="6074877317002985129">"UNDO"</string>
+    <string name="snoozed_for_time" msgid="2390718332980204462">"Snoozed for <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
+    <plurals name="snoozeHourOptions" formatted="false" msgid="2124335842674413030">
+      <item quantity="other">%d hours</item>
+      <item quantity="one">%d hour</item>
+    </plurals>
+    <plurals name="snoozeMinuteOptions" formatted="false" msgid="4127251700591510196">
+      <item quantity="other">%d minutes</item>
+      <item quantity="one">%d minute</item>
+    </plurals>
+    <string name="battery_panel_title" msgid="7944156115535366613">"Battery usage"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Battery Saver not available during charging"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Battery Saver"</string>
+    <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduces performance and background data"</string>
+    <string name="keyboard_key_button_template" msgid="6230056639734377300">"Button <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
+    <string name="keyboard_key_back" msgid="2337450286042721351">"Back"</string>
+    <string name="keyboard_key_dpad_up" msgid="5584144111755734686">"Up"</string>
+    <string name="keyboard_key_dpad_down" msgid="7331518671788337815">"Down"</string>
+    <string name="keyboard_key_dpad_left" msgid="1346446024676962251">"Left"</string>
+    <string name="keyboard_key_dpad_right" msgid="3317323247127515341">"Right"</string>
+    <string name="keyboard_key_dpad_center" msgid="2566737770049304658">"Centre"</string>
+    <string name="keyboard_key_tab" msgid="3871485650463164476">"Tab"</string>
+    <string name="keyboard_key_space" msgid="2499861316311153293">"Space"</string>
+    <string name="keyboard_key_enter" msgid="5739632123216118137">"Enter"</string>
+    <string name="keyboard_key_backspace" msgid="1559580097512385854">"Backspace"</string>
+    <string name="keyboard_key_media_play_pause" msgid="3861975717393887428">"Play/Pause"</string>
+    <string name="keyboard_key_media_stop" msgid="2859963958595908962">"Stop"</string>
+    <string name="keyboard_key_media_next" msgid="1894394911630345607">"Next"</string>
+    <string name="keyboard_key_media_previous" msgid="4256072387192967261">"Previous"</string>
+    <string name="keyboard_key_media_rewind" msgid="2654808213360820186">"Rewind"</string>
+    <string name="keyboard_key_media_fast_forward" msgid="3849417047738200605">"Fast-Forward"</string>
+    <string name="keyboard_key_page_up" msgid="5654098530106845603">"Page Up"</string>
+    <string name="keyboard_key_page_down" msgid="8720502083731906136">"Page Down"</string>
+    <string name="keyboard_key_forward_del" msgid="1391451334716490176">"Delete"</string>
+    <string name="keyboard_key_move_home" msgid="2765693292069487486">"Home"</string>
+    <string name="keyboard_key_move_end" msgid="5901174332047975247">"End"</string>
+    <string name="keyboard_key_insert" msgid="8530501581636082614">"Insert"</string>
+    <string name="keyboard_key_num_lock" msgid="5052537581246772117">"Num Lock"</string>
+    <string name="keyboard_key_numpad_template" msgid="8729216555174634026">"Numpad <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="keyboard_shortcut_group_system" msgid="6472647649616541064">"System"</string>
+    <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Home"</string>
+    <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recent"</string>
+    <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Back"</string>
+    <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"Notifications"</string>
+    <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"Keyboard shortcuts"</string>
+    <string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"Switch input method"</string>
+    <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"Applications"</string>
+    <string name="keyboard_shortcut_group_applications_assist" msgid="9095441910537146013">"Assist"</string>
+    <string name="keyboard_shortcut_group_applications_browser" msgid="6465985474000766533">"Browser"</string>
+    <string name="keyboard_shortcut_group_applications_contacts" msgid="2064197111278436375">"Contacts"</string>
+    <string name="keyboard_shortcut_group_applications_email" msgid="6257036897441939004">"Email"</string>
+    <string name="keyboard_shortcut_group_applications_sms" msgid="638701213803242744">"SMS"</string>
+    <string name="keyboard_shortcut_group_applications_music" msgid="4775559515850922780">"Music"</string>
+    <string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"YouTube"</string>
+    <string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"Calendar"</string>
+    <string name="tuner_full_zen_title" msgid="4540823317772234308">"Show with volume controls"</string>
+    <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Do not disturb"</string>
+    <string name="volume_dnd_silent" msgid="4363882330723050727">"Volume buttons shortcut"</string>
+    <string name="volume_up_silent" msgid="7141255269783588286">"Exit Do Not Disturb on volume up"</string>
+    <string name="battery" msgid="7498329822413202973">"Battery"</string>
+    <string name="clock" msgid="7416090374234785905">"Clock"</string>
+    <string name="headset" msgid="4534219457597457353">"Headset"</string>
+    <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Headphones connected"</string>
+    <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset connected"</string>
+    <string name="data_saver" msgid="5037565123367048522">"Data Saver"</string>
+    <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Data Saver is on"</string>
+    <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Data Saver is off"</string>
+    <string name="switch_bar_on" msgid="1142437840752794229">"On"</string>
+    <string name="switch_bar_off" msgid="8803270596930432874">"Off"</string>
+    <string name="nav_bar" msgid="1993221402773877607">"Navigation bar"</string>
+    <string name="nav_bar_layout" msgid="3664072994198772020">"Layout"</string>
+    <string name="left_nav_bar_button_type" msgid="8555981238887546528">"Extra left button type"</string>
+    <string name="right_nav_bar_button_type" msgid="2481056627065649656">"Extra right button type"</string>
+    <string name="nav_bar_default" msgid="8587114043070993007">"(default)"</string>
+  <string-array name="nav_bar_buttons">
+    <item msgid="1545641631806817203">"Clipboard"</item>
+    <item msgid="5742013440802239414">"Keycode"</item>
+    <item msgid="8802889973626281575">"Keyboard switcher"</item>
+    <item msgid="8175437057325747277">"None"</item>
+  </string-array>
+  <string-array name="nav_bar_layouts">
+    <item msgid="8077901629964902399">"Normal"</item>
+    <item msgid="8256205964297588988">"Compact"</item>
+    <item msgid="8719936228094005878">"Left-leaning"</item>
+    <item msgid="586019486955594690">"Right-leaning"</item>
+  </string-array>
+    <string name="menu_ime" msgid="4998010205321292416">"Keyboard switcher"</string>
+    <string name="save" msgid="2311877285724540644">"Save"</string>
+    <string name="reset" msgid="2448168080964209908">"Reset"</string>
+    <string name="adjust_button_width" msgid="6138616087197632947">"Adjust button width"</string>
+    <string name="clipboard" msgid="1313879395099896312">"Clipboard"</string>
+    <string name="accessibility_key" msgid="5701989859305675896">"Customised navigation button"</string>
+    <string name="left_keycode" msgid="2010948862498918135">"Left keycode"</string>
+    <string name="right_keycode" msgid="708447961000848163">"Right keycode"</string>
+    <string name="left_icon" msgid="3096287125959387541">"Left icon"</string>
+    <string name="right_icon" msgid="3952104823293824311">"Right icon"</string>
+    <string name="drag_to_add_tiles" msgid="7058945779098711293">"Drag to add tiles"</string>
+    <string name="drag_to_remove_tiles" msgid="3361212377437088062">"Drag here to remove"</string>
+    <string name="qs_edit" msgid="2232596095725105230">"Edit"</string>
+    <string name="tuner_time" msgid="6572217313285536011">"Time"</string>
+  <string-array name="clock_options">
+    <item msgid="5965318737560463480">"Show hours, minutes and seconds"</item>
+    <item msgid="1427801730816895300">"Show hours and minutes (default)"</item>
+    <item msgid="3830170141562534721">"Don\'t show this icon"</item>
+  </string-array>
+  <string-array name="battery_options">
+    <item msgid="3160236755818672034">"Always show percentage"</item>
+    <item msgid="2139628951880142927">"Show percentage when charging (default)"</item>
+    <item msgid="3327323682209964956">"Don\'t show this icon"</item>
+  </string-array>
+    <string name="other" msgid="4060683095962566764">"Other"</string>
+    <string name="accessibility_divider" msgid="5903423481953635044">"Split screen divider"</string>
+    <string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"Left full screen"</string>
+    <string name="accessibility_action_divider_left_70" msgid="3612060638991687254">"Left 70%"</string>
+    <string name="accessibility_action_divider_left_50" msgid="1248083470322193075">"Left 50%"</string>
+    <string name="accessibility_action_divider_left_30" msgid="543324403127069386">"Left 30%"</string>
+    <string name="accessibility_action_divider_right_full" msgid="4639381073802030463">"Right full screen"</string>
+    <string name="accessibility_action_divider_top_full" msgid="5357010904067731654">"Top full screen"</string>
+    <string name="accessibility_action_divider_top_70" msgid="5090779195650364522">"Top 70%"</string>
+    <string name="accessibility_action_divider_top_50" msgid="6385859741925078668">"Top 50%"</string>
+    <string name="accessibility_action_divider_top_30" msgid="6201455163864841205">"Top 30%"</string>
+    <string name="accessibility_action_divider_bottom_full" msgid="301433196679548001">"Bottom full screen"</string>
+    <string name="accessibility_qs_edit_tile_label" msgid="8374924053307764245">"Position <xliff:g id="POSITION">%1$d</xliff:g>, <xliff:g id="TILE_NAME">%2$s</xliff:g>. Double tap to edit."</string>
+    <string name="accessibility_qs_edit_add_tile_label" msgid="8133209638023882667">"<xliff:g id="TILE_NAME">%1$s</xliff:g>. Double tap to add."</string>
+    <string name="accessibility_qs_edit_position_label" msgid="5055306305919289819">"Position <xliff:g id="POSITION">%1$d</xliff:g>. Double tap to select."</string>
+    <string name="accessibility_qs_edit_move_tile" msgid="2461819993780159542">"Move <xliff:g id="TILE_NAME">%1$s</xliff:g>"</string>
+    <string name="accessibility_qs_edit_remove_tile" msgid="7484493384665907197">"Remove <xliff:g id="TILE_NAME">%1$s</xliff:g>"</string>
+    <string name="accessibility_qs_edit_tile_added" msgid="8050200862063548309">"<xliff:g id="TILE_NAME">%1$s</xliff:g> is added to position <xliff:g id="POSITION">%2$d</xliff:g>"</string>
+    <string name="accessibility_qs_edit_tile_removed" msgid="8584304916627913440">"<xliff:g id="TILE_NAME">%1$s</xliff:g> is removed"</string>
+    <string name="accessibility_qs_edit_tile_moved" msgid="4343693412689365038">"<xliff:g id="TILE_NAME">%1$s</xliff:g> moved to position <xliff:g id="POSITION">%2$d</xliff:g>"</string>
+    <string name="accessibility_desc_quick_settings_edit" msgid="8073587401747016103">"Quick settings editor."</string>
+    <string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> notification: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
+    <string name="dock_forced_resizable" msgid="5914261505436217520">"App may not work with split-screen."</string>
+    <string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"App does not support split-screen."</string>
+    <string name="forced_resizable_secondary_display" msgid="4230857851756391925">"App may not work on a secondary display."</string>
+    <string name="activity_launch_on_secondary_display_failed_text" msgid="7793821742158306742">"App does not support launch on secondary displays."</string>
+    <string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Open settings."</string>
+    <string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Open quick settings."</string>
+    <string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Close quick settings."</string>
+    <string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Alarm set."</string>
+    <string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Signed in as <xliff:g id="ID_1">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"No Internet."</string>
+    <string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Open details."</string>
+    <string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"Open <xliff:g id="ID_1">%s</xliff:g> settings."</string>
+    <string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"Edit order of settings."</string>
+    <string name="accessibility_quick_settings_page" msgid="5032979051755200721">"Page <xliff:g id="ID_1">%1$d</xliff:g> of <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="tuner_lock_screen" msgid="5755818559638850294">"Lock screen"</string>
+    <string name="pip_phone_expand" msgid="5889780005575693909">"Expand"</string>
+    <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimise"</string>
+    <string name="pip_phone_close" msgid="8416647892889710330">"Close"</string>
+    <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Drag down to dismiss"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
+    <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> is in picture-in-picture"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"If you don\'t want <xliff:g id="NAME">%s</xliff:g> to use this feature, tap to open settings and turn it off."</string>
+    <string name="pip_play" msgid="1417176722760265888">"Play"</string>
+    <string name="pip_pause" msgid="8881063404466476571">"Pause"</string>
+    <string name="pip_skip_to_next" msgid="1948440006726306284">"Skip to next"</string>
+    <string name="pip_skip_to_prev" msgid="1955311326688637914">"Skip to previous"</string>
+    <string name="thermal_shutdown_title" msgid="4458304833443861111">"Phone turned off due to heat"</string>
+    <string name="thermal_shutdown_message" msgid="9006456746902370523">"Your phone is now running normally"</string>
+    <string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Your phone was too hot, so it turned off to cool down. Your phone is now running normally.\n\nYour phone may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video or navigation apps)\n	• Download or upload large files\n	• Use your phone in high temperatures"</string>
+    <string name="high_temp_title" msgid="4589508026407318374">"Phone is getting warm"</string>
+    <string name="high_temp_notif_message" msgid="5642466103153429279">"Some features limited while phone cools down"</string>
+    <string name="high_temp_dialog_message" msgid="6840700639374113553">"Your phone will automatically try to cool down. You can still use your phone, but it may run more slowly.\n\nOnce your phone has cooled down, it will run normally."</string>
+    <string name="lockscreen_shortcut_left" msgid="2182769107618938629">"Left shortcut"</string>
+    <string name="lockscreen_shortcut_right" msgid="3328683699505226536">"Right shortcut"</string>
+    <string name="lockscreen_unlock_left" msgid="2043092136246951985">"Left shortcut also unlocks"</string>
+    <string name="lockscreen_unlock_right" msgid="1529992940510318775">"Right shortcut also unlocks"</string>
+    <string name="lockscreen_none" msgid="4783896034844841821">"None"</string>
+    <string name="tuner_launch_app" msgid="1527264114781925348">"Launch <xliff:g id="APP">%1$s</xliff:g>"</string>
+    <string name="tuner_other_apps" msgid="4726596850501162493">"Other apps"</string>
+    <string name="tuner_circle" msgid="2340998864056901350">"Circle"</string>
+    <string name="tuner_plus" msgid="6792960658533229675">"Plus"</string>
+    <string name="tuner_minus" msgid="4806116839519226809">"Minus"</string>
+    <string name="tuner_left" msgid="8404287986475034806">"Left"</string>
+    <string name="tuner_right" msgid="6222734772467850156">"Right"</string>
+    <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
+    <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> app"</string>
+    <string name="notification_channel_alerts" msgid="4496839309318519037">"Alerts"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Battery"</string>
+    <string name="notification_channel_screenshot" msgid="6314080179230000938">"Screenshots"</string>
+    <string name="notification_channel_general" msgid="4525309436693914482">"General Messages"</string>
+    <string name="notification_channel_storage" msgid="3077205683020695313">"Storage"</string>
+    <string name="instant_apps" msgid="6647570248119804907">"Instant Apps"</string>
+    <string name="instant_apps_message" msgid="8116608994995104836">"Instant apps don\'t require installation."</string>
+    <string name="app_info" msgid="6856026610594615344">"App info"</string>
+    <string name="go_to_web" msgid="1106022723459948514">"Go to web"</string>
+    <string name="mobile_data" msgid="7094582042819250762">"Mobile data"</string>
+    <string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi is off"</string>
+    <string name="bt_is_off" msgid="2640685272289706392">"Bluetooth is off"</string>
+    <string name="dnd_is_off" msgid="6167780215212497572">"Do Not Disturb is off"</string>
+    <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"Do Not Disturb was turned on by an automatic rule (<xliff:g id="ID_1">%s</xliff:g>)."</string>
+    <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"Do Not Disturb was turned on by an app (<xliff:g id="ID_1">%s</xliff:g>)."</string>
+    <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"Do Not Disturb was turned on by an automatic rule or app."</string>
+    <string name="qs_dnd_until" msgid="3469471136280079874">"Until <xliff:g id="ID_1">%s</xliff:g>"</string>
+    <string name="qs_dnd_keep" msgid="1825009164681928736">"Keep"</string>
+    <string name="qs_dnd_replace" msgid="8019520786644276623">"Replace"</string>
+    <string name="running_foreground_services_title" msgid="381024150898615683">"Apps running in background"</string>
+    <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap for details on battery and data usage"</string>
+    <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Turn off mobile data?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Because an app is obscuring a permission request, Settings can’t verify your response."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-en-rCA/strings_car.xml b/packages/SystemUI/res/values-en-rCA/strings_car.xml
new file mode 100644
index 0000000..27b916e
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rCA/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2016, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="unknown_user_label" msgid="4323896111737677955">"Unknown"</string>
+    <string name="start_driving" msgid="864023351402918991">"Start Driving"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-en-rCA/strings_tv.xml b/packages/SystemUI/res/values-en-rCA/strings_tv.xml
new file mode 100644
index 0000000..31cbd83
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rCA/strings_tv.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2016, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="notification_channel_tv_pip" msgid="134047986446577723">"Picture-in-picture"</string>
+    <string name="pip_notification_unknown_title" msgid="6289156118095849438">"(No title program)"</string>
+    <string name="pip_close" msgid="3480680679023423574">"Close PIP"</string>
+    <string name="pip_fullscreen" msgid="8604643018538487816">"Full screen"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 4d90d5b..fe17a2d 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"The computer\'s RSA key fingerprint is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB debugging not allowed"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"The user currently signed in to this device can\'t turn on USB debugging. To use this feature, please switch to an Admin user."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"The user currently signed in to this device can\'t turn on USB debugging. To use this feature, switch to the primary user."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom to fill screen"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Stretch to fill screen"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Saving screenshot…"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Search"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"You won’t be disturbed by sounds and vibrations, except from alarms, reminders, events and callers that you specify. You\'ll still hear anything that you choose to play, including music, videos and games."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"You won’t be disturbed by sounds and vibrations, except from alarms. You\'ll still hear anything that you choose to play, including music, videos and games."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"You won\'t be disturbed by sounds and vibrations, except from alarms, reminders, events and callers you specify. You\'ll still hear anything you choose to play including music, videos and games."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"You won\'t be disturbed by sounds and vibrations, except from alarms. You\'ll still hear anything you choose to play including music, videos and games."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Customise"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"This blocks ALL sounds and vibrations, including from alarms, music, videos and games. You’ll still be able to make phone calls."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"This blocks ALL sounds and vibrations, including from alarms, music, videos, and games. You\'ll still be able to make phone calls."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"This blocks ALL sounds and vibrations, including from alarms, music, videos and games."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Less urgent notifications below"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Find out more"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Open VPN Settings"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Open VPN settings"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Open trusted credentials"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Your admin has turned on network logging, which monitors traffic on your device.\n\nFor more information, contact your admin."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"This app doesn\'t have notification categories"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Notifications from this app can\'t be turned off"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 out of <xliff:g id="NUMBER_1">%d</xliff:g> notification categories from this app</item>
-      <item quantity="one">1 out of <xliff:g id="NUMBER_0">%d</xliff:g> notification category from this app</item>
+      <item quantity="other">1 out of <xliff:g id="NUMBER_1">%s</xliff:g> notification categories from this app</item>
+      <item quantity="one">1 out of <xliff:g id="NUMBER_0">%s</xliff:g> notification category from this app</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d minute</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Battery usage"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Battery Saver not available during charging"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Battery Saver"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Battery Saver not available during charging"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Battery Saver"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduces performance and background data"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Button <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimise"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Close"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Drag down to dismiss"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Picture in picture menu"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> is in picture-in-picture"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"If you don’t want <xliff:g id="NAME">%s</xliff:g> to use this feature, tap to open settings and turn it off."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"If you don\'t want <xliff:g id="NAME">%s</xliff:g> to use this feature, tap to open settings and turn it off."</string>
     <string name="pip_play" msgid="1417176722760265888">"Play"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pause"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Skip to next"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> app"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alerts"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Battery"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Screenshots"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"General Messages"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Storage"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Apps running in background"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap for details on battery and data usage"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Turn off mobile data?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Because an app is obscuring a permission request, Settings can’t verify your response."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 4d90d5b..fe17a2d 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"The computer\'s RSA key fingerprint is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB debugging not allowed"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"The user currently signed in to this device can\'t turn on USB debugging. To use this feature, please switch to an Admin user."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"The user currently signed in to this device can\'t turn on USB debugging. To use this feature, switch to the primary user."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom to fill screen"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Stretch to fill screen"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Saving screenshot…"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Search"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"You won’t be disturbed by sounds and vibrations, except from alarms, reminders, events and callers that you specify. You\'ll still hear anything that you choose to play, including music, videos and games."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"You won’t be disturbed by sounds and vibrations, except from alarms. You\'ll still hear anything that you choose to play, including music, videos and games."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"You won\'t be disturbed by sounds and vibrations, except from alarms, reminders, events and callers you specify. You\'ll still hear anything you choose to play including music, videos and games."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"You won\'t be disturbed by sounds and vibrations, except from alarms. You\'ll still hear anything you choose to play including music, videos and games."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Customise"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"This blocks ALL sounds and vibrations, including from alarms, music, videos and games. You’ll still be able to make phone calls."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"This blocks ALL sounds and vibrations, including from alarms, music, videos, and games. You\'ll still be able to make phone calls."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"This blocks ALL sounds and vibrations, including from alarms, music, videos and games."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Less urgent notifications below"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Find out more"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Open VPN Settings"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Open VPN settings"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Open trusted credentials"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Your admin has turned on network logging, which monitors traffic on your device.\n\nFor more information, contact your admin."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"This app doesn\'t have notification categories"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Notifications from this app can\'t be turned off"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 out of <xliff:g id="NUMBER_1">%d</xliff:g> notification categories from this app</item>
-      <item quantity="one">1 out of <xliff:g id="NUMBER_0">%d</xliff:g> notification category from this app</item>
+      <item quantity="other">1 out of <xliff:g id="NUMBER_1">%s</xliff:g> notification categories from this app</item>
+      <item quantity="one">1 out of <xliff:g id="NUMBER_0">%s</xliff:g> notification category from this app</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d minute</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Battery usage"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Battery Saver not available during charging"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Battery Saver"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Battery Saver not available during charging"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Battery Saver"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduces performance and background data"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Button <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimise"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Close"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Drag down to dismiss"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Picture in picture menu"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> is in picture-in-picture"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"If you don’t want <xliff:g id="NAME">%s</xliff:g> to use this feature, tap to open settings and turn it off."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"If you don\'t want <xliff:g id="NAME">%s</xliff:g> to use this feature, tap to open settings and turn it off."</string>
     <string name="pip_play" msgid="1417176722760265888">"Play"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pause"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Skip to next"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> app"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alerts"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Battery"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Screenshots"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"General Messages"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Storage"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Apps running in background"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap for details on battery and data usage"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Turn off mobile data?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Because an app is obscuring a permission request, Settings can’t verify your response."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rXC-land/strings.xml b/packages/SystemUI/res/values-en-rXC-land/strings.xml
new file mode 100644
index 0000000..957164f
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rXC-land/strings.xml
@@ -0,0 +1,23 @@
+<?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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎Screen is now locked in landscape orientation.‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-en-rXC/config.xml b/packages/SystemUI/res/values-en-rXC/config.xml
new file mode 100644
index 0000000..5309563
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rXC/config.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<!--  These resources are around just to allow their values to be customized
+     for different hardware and product builds.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="doze_pickup_subtype_performs_proximity_check" msgid="533127617385956583"></string>
+</resources>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..39af7ec
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -0,0 +1,779 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‏‏‎‎‏‎‎System UI‎‏‎‎‏‎"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎Clear‎‏‎‎‏‎"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎Remove from list‎‏‎‎‏‎"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‎‎‏‎‏‏‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎‎‎‏‎‎‏‎App info‎‏‎‎‏‎"</string>
+    <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎Your recent screens appear here‎‏‎‎‏‎"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‏‎Dismiss recent apps‎‏‎‎‏‎"</string>
+    <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‎%d screens in Overview‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‎1 screen in Overview‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎No notifications‎‏‎‎‏‎"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎Ongoing‎‏‎‎‏‎"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎Notifications‎‏‎‎‏‎"</string>
+    <string name="battery_low_title" msgid="6456385927409742437">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‎Battery is low‎‏‎‎‏‎"</string>
+    <string name="battery_low_percent_format" msgid="2900940511201380775">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="PERCENTAGE">%s</xliff:g>‎‏‎‎‏‏‏‎ remaining‎‏‎‎‏‎"</string>
+    <string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‏‎‎‏‏‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="PERCENTAGE">%s</xliff:g>‎‏‎‎‏‏‏‎ remaining. Battery saver is on.‎‏‎‎‏‎"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‎‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‎USB charging not supported.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Use only the supplied charger.‎‏‎‎‏‎"</string>
+    <string name="invalid_charger_title" msgid="3515740382572798460">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎USB charging not supported.‎‏‎‎‏‎"</string>
+    <string name="invalid_charger_text" msgid="5474997287953892710">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‎‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎Use only the supplied charger.‎‏‎‎‏‎"</string>
+    <string name="battery_low_why" msgid="4553600287639198111">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‎‎‏‏‏‏‏‎Settings‎‏‎‎‏‎"</string>
+    <string name="battery_saver_confirmation_title" msgid="5299585433050361634">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎Turn on battery saver?‎‏‎‎‏‎"</string>
+    <string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎‎‎‎‏‎‎‎‏‏‎‎‎‏‏‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎Turn on‎‏‎‎‏‎"</string>
+    <string name="battery_saver_start_action" msgid="5576697451677486320">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎Turn on battery saver‎‏‎‎‏‎"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎Settings‎‏‎‎‏‎"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎Wi-Fi‎‏‎‎‏‎"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎Auto-rotate screen‎‏‎‎‏‎"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎MUTE‎‏‎‎‏‎"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎AUTO‎‏‎‎‏‎"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎Notifications‎‏‎‎‏‎"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‎Bluetooth tethered‎‏‎‎‏‎"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎Set up input methods‎‏‎‎‏‎"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‏‎‎Physical keyboard‎‏‎‎‏‎"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎Allow the app ‎‏‎‎‏‏‎<xliff:g id="APPLICATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎ to access the USB device?‎‏‎‎‏‎"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎Allow the app ‎‏‎‎‏‏‎<xliff:g id="APPLICATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎ to access the USB accessory?‎‏‎‎‏‎"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎‏‏‎‎Open ‎‏‎‎‏‏‎<xliff:g id="ACTIVITY">%1$s</xliff:g>‎‏‎‎‏‏‏‎ when this USB device is connected?‎‏‎‎‏‎"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‎‎Open ‎‏‎‎‏‏‎<xliff:g id="ACTIVITY">%1$s</xliff:g>‎‏‎‎‏‏‏‎ when this USB accessory is connected?‎‏‎‎‏‎"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‎No installed apps work with this USB accessory. Learn more about this accessory at ‎‏‎‎‏‏‎<xliff:g id="URL">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎‎‎USB accessory‎‏‎‎‏‎"</string>
+    <string name="label_view" msgid="6304565553218192990">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎View‎‏‎‎‏‎"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‎Use by default for this USB device‎‏‎‎‏‎"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎Use by default for this USB accessory‎‏‎‎‏‎"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‎‏‎Allow USB debugging?‎‏‎‎‏‎"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‎‎‎‎The computer\'s RSA key fingerprint is:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="FINGERPRINT">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎Always allow from this computer‎‏‎‎‏‎"</string>
+    <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎USB debugging not allowed‎‏‎‎‏‎"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‎‏‎The user currently signed in to this device can\'t turn on USB debugging. To use this feature, switch to the primary user.‎‏‎‎‏‎"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎Zoom to fill screen‎‏‎‎‏‎"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‎Stretch to fill screen‎‏‎‎‏‎"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎Saving screenshot…‎‏‎‎‏‎"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‎‎‏‎Saving screenshot…‎‏‎‎‏‎"</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎‎Screenshot is being saved.‎‏‎‎‏‎"</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎Screenshot captured.‎‏‎‎‏‎"</string>
+    <string name="screenshot_saved_text" msgid="2685605830386712477">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎Tap to view your screenshot.‎‏‎‎‏‎"</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎Couldn\'t capture screenshot.‎‏‎‎‏‎"</string>
+    <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎Problem encountered while saving screenshot.‎‏‎‎‏‎"</string>
+    <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‏‏‏‏‎‎‎‎Can\'t save screenshot due to limited storage space.‎‏‎‎‏‎"</string>
+    <string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‏‏‎‎Taking screenshots isn\'t allowed by the app or your organization‎‏‎‎‏‎"</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎USB file transfer options‎‏‎‎‏‎"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‎Mount as a media player (MTP)‎‏‎‎‏‎"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‏‎Mount as a camera (PTP)‎‏‎‎‏‎"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎Install Android File Transfer app for Mac‎‏‎‎‏‎"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‎Back‎‏‎‎‏‎"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‎‏‎Home‎‏‎‎‏‎"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎Menu‎‏‎‎‏‎"</string>
+    <string name="accessibility_accessibility_button" msgid="7601252764577607915">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‎‏‎‏‏‎‎‎‎‏‏‏‎‏‎‏‏‎Accessibility‎‏‎‎‏‎"</string>
+    <string name="accessibility_recent" msgid="5208608566793607626">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎Overview‎‏‎‎‏‎"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‎Search‎‏‎‎‏‎"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‏‎‎‎‎Camera‎‏‎‎‏‎"</string>
+    <string name="accessibility_phone_button" msgid="6738112589538563574">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‎‎Phone‎‏‎‎‏‎"</string>
+    <string name="accessibility_voice_assist_button" msgid="487611083884852965">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‎Voice Assist‎‏‎‎‏‎"</string>
+    <string name="accessibility_unlock_button" msgid="128158454631118828">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎Unlock‎‏‎‎‏‎"</string>
+    <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎‏‎Waiting for fingerprint‎‏‎‎‏‎"</string>
+    <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‎‏‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎Unlock without using your fingerprint‎‏‎‎‏‎"</string>
+    <string name="unlock_label" msgid="8779712358041029439">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‏‏‎unlock‎‏‎‎‏‎"</string>
+    <string name="phone_label" msgid="2320074140205331708">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎open phone‎‏‎‎‏‎"</string>
+    <string name="voice_assist_label" msgid="3956854378310019854">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎open voice assist‎‏‎‎‏‎"</string>
+    <string name="camera_label" msgid="7261107956054836961">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‏‎‏‎‎‎‏‏‎‎‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‎‎‎‎‏‎open camera‎‏‎‎‏‎"</string>
+    <string name="recents_caption_resize" msgid="3517056471774958200">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‏‏‎‎‎‎Select new task layout‎‏‎‎‏‎"</string>
+    <string name="cancel" msgid="6442560571259935130">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎Cancel‎‏‎‎‏‎"</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎Compatibility zoom button.‎‏‎‎‏‎"</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎Zoom smaller to larger screen.‎‏‎‎‏‎"</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‎‎‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎Bluetooth connected.‎‏‎‎‏‎"</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎Bluetooth disconnected.‎‏‎‎‏‎"</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‎No battery.‎‏‎‎‏‎"</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎Battery one bar.‎‏‎‎‏‎"</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎Battery two bars.‎‏‎‎‏‎"</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‎Battery three bars.‎‏‎‎‏‎"</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‎Battery full.‎‏‎‎‏‎"</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‎‏‎No phone.‎‏‎‎‏‎"</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎Phone one bar.‎‏‎‎‏‎"</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‎‎‎‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎Phone two bars.‎‏‎‎‏‎"</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‏‎‏‎Phone three bars.‎‏‎‎‏‎"</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎Phone signal full.‎‏‎‎‏‎"</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‎No data.‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎Data one bar.‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‏‎Data two bars.‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎Data three bars.‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎Data signal full.‎‏‎‎‏‎"</string>
+    <string name="accessibility_wifi_name" msgid="7202151365171148501">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‎‏‎‏‏‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎Connected to ‎‏‎‎‏‏‎<xliff:g id="WIFI">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="accessibility_bluetooth_name" msgid="8441517146585531676">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎Connected to ‎‏‎‎‏‏‎<xliff:g id="BLUETOOTH">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="accessibility_cast_name" msgid="4026393061247081201">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‏‎Connected to ‎‏‎‎‏‏‎<xliff:g id="CAST">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‎‎‏‎‎‎‎‎‎No WiMAX.‎‏‎‎‏‎"</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‏‎‎‎‎‎‎WiMAX one bar.‎‏‎‎‏‎"</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‏‎‎‎‎‎WiMAX two bars.‎‏‎‎‏‎"</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‎WiMAX three bars.‎‏‎‎‏‎"</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‎‎‎‏‎‏‎‎‏‏‎‎WiMAX signal full.‎‏‎‎‏‎"</string>
+    <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎Ethernet disconnected.‎‏‎‎‏‎"</string>
+    <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎Ethernet connected.‎‏‎‎‏‎"</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎No signal.‎‏‎‎‏‎"</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎Not connected.‎‏‎‎‏‎"</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‏‏‎Zero bars.‎‏‎‎‏‎"</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎One bar.‎‏‎‎‏‎"</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‎Two bars.‎‏‎‎‏‎"</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‎‏‎‎‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎Three bars.‎‏‎‎‏‎"</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎Signal full.‎‏‎‎‏‎"</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎On.‎‏‎‎‏‎"</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‏‎Off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‎‎‎‏‎Connected.‎‏‎‎‏‎"</string>
+    <string name="accessibility_desc_connecting" msgid="3812924520316280149">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎Connecting.‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎GPRS‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎1 X‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‎‎‏‏‏‎‎HSPA‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‎3G‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‎‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎3.5G‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎4G‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_connection_4g_plus" msgid="3032226872470658661">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎4G+‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‎LTE‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_connection_lte_plus" msgid="361876866906946007">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‎LTE+‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‏‎‎‎‏‎‏‏‎‏‏‏‏‎CDMA‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎Roaming‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‎‎Edge‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‏‎Wi-Fi‎‏‎‎‏‎"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎No SIM.‎‏‎‎‏‎"</string>
+    <string name="accessibility_cell_data" msgid="5326139158682385073">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎Mobile Data‎‏‎‎‏‎"</string>
+    <string name="accessibility_cell_data_on" msgid="5927098403452994422">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎Mobile Data On‎‏‎‎‏‎"</string>
+    <string name="accessibility_cell_data_off" msgid="443267573897409704">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‎‎‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‎‎Mobile Data Off‎‏‎‎‏‎"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎Bluetooth tethering.‎‏‎‎‏‎"</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‏‎‎‏‎‎‏‎‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‎‏‎‎‎Airplane mode.‎‏‎‎‏‎"</string>
+    <string name="accessibility_vpn_on" msgid="5993385083262856059">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎VPN on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_no_sims" msgid="3957997018324995781">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎No SIM card.‎‏‎‎‏‎"</string>
+    <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‎‎‎‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‎Carrier network changing.‎‏‎‎‏‎"</string>
+    <string name="accessibility_battery_details" msgid="7645516654955025422">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎Open battery details‎‏‎‎‏‎"</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‏‎‏‎Battery ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ percent.‎‏‎‎‏‎"</string>
+    <string name="accessibility_battery_level_charging" msgid="1147587904439319646">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎Battery charging, ‎‏‎‎‏‏‎<xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g>‎‏‎‎‏‏‏‎ percent.‎‏‎‎‏‎"</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎‎‎System settings.‎‏‎‎‏‎"</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‎‎‎‎‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎Notifications.‎‏‎‎‏‎"</string>
+    <string name="accessibility_overflow_action" msgid="5681882033274783311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‏‏‎See all notifications‎‏‎‎‏‎"</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎Clear notification.‎‏‎‎‏‎"</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‎‏‏‎GPS enabled.‎‏‎‎‏‎"</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‏‏‎‎GPS acquiring.‎‏‎‎‏‎"</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‎‎‎‎‎‎‏‎TeleTypewriter enabled.‎‏‎‎‏‎"</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‏‏‎Ringer vibrate.‎‏‎‎‏‎"</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎Ringer silent.‎‏‎‎‏‎"</string>
+    <!-- no translation found for accessibility_casting (6887382141726543668) -->
+    <skip />
+    <string name="accessibility_work_mode" msgid="2478631941714607225">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎Work mode‎‏‎‎‏‎"</string>
+    <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎Dismiss ‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎ dismissed.‎‏‎‎‏‎"</string>
+    <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‎‎‎All recent applications dismissed.‎‏‎‎‏‎"</string>
+    <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‎Open ‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎ application info.‎‏‎‎‏‎"</string>
+    <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎Starting ‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="accessibility_recents_task_header" msgid="1437183540924535457">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎Notification dismissed.‎‏‎‎‏‎"</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎Notification shade.‎‏‎‎‏‎"</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‎‎Quick settings.‎‏‎‎‏‎"</string>
+    <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎Lock screen.‎‏‎‎‏‎"</string>
+    <string name="accessibility_desc_settings" msgid="3417884241751434521">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‏‎Settings‎‏‎‎‏‎"</string>
+    <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‏‎‎‎‎‏‎‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‎‎‎‏‏‎‎‎Overview.‎‏‎‎‏‎"</string>
+    <string name="accessibility_desc_work_lock" msgid="4288774420752813383">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‎Work lock screen‎‏‎‎‏‎"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‎‎‎‏‎‎‏‎Close‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎‎‎‎‏‎‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="SIGNAL">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎Wifi turned off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_wifi_changed_on" msgid="6440117170789528622">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‏‎‎Wifi turned on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‏‏‎‏‎Mobile ‎‏‎‎‏‏‎<xliff:g id="SIGNAL">%1$s</xliff:g>‎‏‎‎‏‏‏‎. ‎‏‎‎‏‏‎<xliff:g id="TYPE">%2$s</xliff:g>‎‏‎‎‏‏‏‎. ‎‏‎‎‏‏‎<xliff:g id="NETWORK">%3$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎Battery ‎‏‎‎‏‏‎<xliff:g id="STATE">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_airplane_off" msgid="7786329360056634412">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎Airplane mode off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎Airplane mode on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‎‎Airplane mode turned off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎‏‏‏‏‎‎‎‎‎Airplane mode turned on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎Do not disturb on, priority only.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‎‏‎Do not disturb on, total silence.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎Do not disturb on, alarms only.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎Do not disturb.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎Do not disturb off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‏‏‎Do not disturb turned off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎Do not disturb turned on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‎Bluetooth.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎Bluetooth off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‎Bluetooth on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‏‏‏‏‎Bluetooth connecting.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‎‏‏‎‏‏‎Bluetooth connected.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="2730003763480934529">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎Bluetooth turned off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="8722351798763206577">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‏‏‎‎‎‏‎Bluetooth turned on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_location_off" msgid="5119080556976115520">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‏‎‎‎‎‎‎‎Location reporting off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_location_on" msgid="5809937096590102036">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‏‎‎‎‎‏‎‏‏‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‏‎‎‎Location reporting on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_location_changed_off" msgid="8526845571503387376">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‎Location reporting turned off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_location_changed_on" msgid="339403053079338468">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎Location reporting turned on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎Alarm set for ‎‏‎‎‏‏‎<xliff:g id="TIME">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_close" msgid="3115847794692516306">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎‎Close panel.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_more_time" msgid="3659274935356197708">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‎‎More time.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_less_time" msgid="2404728746293515623">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‎‏‏‏‎Less time.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_flashlight_off" msgid="4936432000069786988">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‎Flashlight off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_flashlight_unavailable" msgid="8012811023312280810">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‎‎Flashlight unavailable.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_flashlight_on" msgid="2003479320007841077">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‎‎‏‏‎‏‎‏‎Flashlight on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_flashlight_changed_off" msgid="3303701786768224304">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‎‎‎‎‎Flashlight turned off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_flashlight_changed_on" msgid="6531793301533894686">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‎‎‏‎‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎‎Flashlight turned on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_color_inversion_changed_off" msgid="4406577213290173911">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‏‎‏‎‏‏‏‎Color inversion turned off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_color_inversion_changed_on" msgid="6897462320184911126">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎‎Color inversion turned on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‎‏‎‎Mobile hotspot turned off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎Mobile hotspot turned on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‎‎‎Screen casting stopped.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_work_mode_off" msgid="7045417396436552890">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‏‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‏‎‏‎‎Work mode off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‎‏‎Work mode on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_work_mode_changed_off" msgid="5605534876107300711">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎Work mode turned off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_work_mode_changed_on" msgid="249840330756998612">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎Work mode turned on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‏‎‏‎‎‏‎Data Saver turned off.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‏‎‎‎‏‏‏‎Data Saver turned on.‎‏‎‎‏‎"</string>
+    <string name="accessibility_brightness" msgid="8003681285547803095">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎Display brightness‎‏‎‎‏‎"</string>
+    <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎Charging‎‏‎‎‏‎"</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‎‎‏‎2G-3G data is paused‎‏‎‎‏‎"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎4G data is paused‎‏‎‎‏‎"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎Mobile data is paused‎‏‎‎‏‎"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‏‏‏‎Data is paused‎‏‎‎‏‎"</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎The data limit you set has been reached. You are no longer using mobile data.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎If you resume, charges may apply for data usage.‎‏‎‎‏‎"</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎Resume‎‏‎‎‏‎"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‏‎No Internet connection‎‏‎‎‏‎"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎Wi-Fi connected‎‏‎‎‏‎"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‏‎‎‎Searching for GPS‎‏‎‎‏‎"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‎Location set by GPS‎‏‎‎‏‎"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎Location requests active‎‏‎‎‏‎"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‎Clear all notifications.‎‏‎‎‏‎"</string>
+    <string name="notification_group_overflow_indicator" msgid="1863231301642314183">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‏‏‏‎+ ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <plurals name="notification_group_overflow_description" formatted="false" msgid="4579313201268495404">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%s</xliff:g>‎‏‎‎‏‏‏‎ more notifications inside.‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%s</xliff:g>‎‏‎‎‏‏‏‎ more notification inside.‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‏‏‎‏‏‎Notification settings‎‏‎‎‏‎"</string>
+    <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ settings‎‏‎‎‏‎"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎Screen will rotate automatically.‎‏‎‎‏‎"</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎Screen is locked in landscape orientation.‎‏‎‎‏‎"</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎Screen is locked in portrait orientation.‎‏‎‎‏‎"</string>
+    <string name="accessibility_rotation_lock_off_changed" msgid="8134601071026305153">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎Screen will now rotate automatically.‎‏‎‎‏‎"</string>
+    <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‎‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‏‏‎Screen is now locked in landscape orientation.‎‏‎‎‏‎"</string>
+    <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‏‎‎Screen is now locked in portrait orientation.‎‏‎‎‏‎"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎Dessert Case‎‏‎‎‏‎"</string>
+    <string name="start_dreams" msgid="5640361424498338327">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎Screen saver‎‏‎‎‏‎"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‎Ethernet‎‏‎‎‏‎"</string>
+    <string name="quick_settings_dnd_label" msgid="8735855737575028208">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎Do not disturb‎‏‎‎‏‎"</string>
+    <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‎Priority only‎‏‎‎‏‎"</string>
+    <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‎Alarms only‎‏‎‎‏‎"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‎Total silence‎‏‎‎‏‎"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‏‎‎‏‎Bluetooth‎‏‎‎‏‎"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎Bluetooth (‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ Devices)‎‏‎‎‏‎"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‎‏‎Bluetooth Off‎‏‎‎‏‎"</string>
+    <string name="quick_settings_bluetooth_detail_empty_text" msgid="4910015762433302860">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎No paired devices available‎‏‎‎‏‎"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎Brightness‎‏‎‎‏‎"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‏‏‎Auto-rotate‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‎‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎Auto-rotate screen‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_rotation_value" msgid="8187398200140760213">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="ID_1">%s</xliff:g>‎‏‎‎‏‏‏‎ mode‎‏‎‎‏‎"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‏‎Rotation locked‎‏‎‎‏‎"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‏‎Portrait‎‏‎‎‏‎"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‎Landscape‎‏‎‎‏‎"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‏‎Input Method‎‏‎‎‏‎"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‎‏‎Location‎‏‎‎‏‎"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‏‏‏‏‏‏‎‎‎‎‎‏‏‎Location Off‎‏‎‎‏‎"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‏‎‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‏‎‎Media device‎‏‎‎‏‎"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎RSSI‎‏‎‎‏‎"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‎Emergency Calls Only‎‏‎‎‏‎"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎Settings‎‏‎‎‏‎"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‏‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‏‎‎‎‎Time‎‏‎‎‏‎"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎Me‎‏‎‎‏‎"</string>
+    <string name="quick_settings_user_title" msgid="4467690427642392403">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‎‎‏‏‎User‎‏‎‎‏‎"</string>
+    <string name="quick_settings_user_new_user" msgid="9030521362023479778">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‎‎New user‎‏‎‎‏‎"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎Wi-Fi‎‏‎‎‏‎"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‎Not Connected‎‏‎‎‏‎"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎No Network‎‏‎‎‏‎"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎‎Wi-Fi Off‎‏‎‎‏‎"</string>
+    <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‎Wi-Fi On‎‏‎‎‏‎"</string>
+    <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‎‎No Wi-Fi networks available‎‏‎‎‏‎"</string>
+    <string name="quick_settings_cast_title" msgid="7709016546426454729">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‎Cast‎‏‎‎‏‎"</string>
+    <string name="quick_settings_casting" msgid="6601710681033353316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎Casting‎‏‎‎‏‎"</string>
+    <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎Unnamed device‎‏‎‎‏‎"</string>
+    <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎Ready to cast‎‏‎‎‏‎"</string>
+    <string name="quick_settings_cast_detail_empty_text" msgid="311785821261640623">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‏‎No devices available‎‏‎‎‏‎"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‏‏‏‏‏‎‎‎‎Brightness‎‏‎‎‏‎"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‎AUTO‎‏‎‎‏‎"</string>
+    <string name="quick_settings_inversion_label" msgid="8790919884718619648">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎Invert colors‎‏‎‎‏‎"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎Color correction mode‎‏‎‎‏‎"</string>
+    <string name="quick_settings_more_settings" msgid="326112621462813682">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎More settings‎‏‎‎‏‎"</string>
+    <string name="quick_settings_done" msgid="3402999958839153376">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‎‎‎‎‎Done‎‏‎‎‏‎"</string>
+    <string name="quick_settings_connected" msgid="1722253542984847487">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‎‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎Connected‎‏‎‎‏‎"</string>
+    <string name="quick_settings_connected_battery_level" msgid="4136051440381328892">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎Connected, battery ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="quick_settings_connecting" msgid="47623027419264404">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎Connecting...‎‏‎‎‏‎"</string>
+    <string name="quick_settings_tethering_label" msgid="7153452060448575549">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎Tethering‎‏‎‎‏‎"</string>
+    <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‏‎Hotspot‎‏‎‎‏‎"</string>
+    <string name="quick_settings_notifications_label" msgid="4818156442169154523">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎Notifications‎‏‎‎‏‎"</string>
+    <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎‎Flashlight‎‏‎‎‏‎"</string>
+    <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‏‎Mobile data‎‏‎‎‏‎"</string>
+    <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎Data usage‎‏‎‎‏‎"</string>
+    <string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‏‎Remaining data‎‏‎‎‏‎"</string>
+    <string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‏‎‏‏‎‏‏‎Over limit‎‏‎‎‏‎"</string>
+    <string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="DATA_USED">%s</xliff:g>‎‏‎‎‏‏‏‎ used‎‏‎‎‏‎"</string>
+    <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="DATA_LIMIT">%s</xliff:g>‎‏‎‎‏‏‏‎ limit‎‏‎‎‏‎"</string>
+    <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="DATA_LIMIT">%s</xliff:g>‎‏‎‎‏‏‏‎ warning‎‏‎‎‏‎"</string>
+    <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‏‎Work mode‎‏‎‎‏‎"</string>
+    <string name="quick_settings_night_display_label" msgid="3577098011487644395">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‏‏‎‏‎‏‏‎Night Light‎‏‎‎‏‎"</string>
+    <string name="quick_settings_nfc_label" msgid="9012153754816969325">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎NFC‎‏‎‎‏‎"</string>
+    <string name="quick_settings_nfc_off" msgid="6883274004315134333">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎NFC is disabled‎‏‎‎‏‎"</string>
+    <string name="quick_settings_nfc_on" msgid="6680317193676884311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‏‏‏‎NFC is enabled‎‏‎‎‏‎"</string>
+    <string name="recents_empty_message" msgid="808480104164008572">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‎‎‎No recent items‎‏‎‎‏‎"</string>
+    <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‎You\'ve cleared everything‎‏‎‎‏‎"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎Application Info‎‏‎‎‏‎"</string>
+    <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎screen pinning‎‏‎‎‏‎"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‏‎search‎‏‎‎‏‎"</string>
+    <string name="recents_launch_error_message" msgid="2969287838120550506">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‎‏‎‏‎‎Could not start ‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="recents_launch_disabled_message" msgid="1624523193008871793">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎ is disabled in safe-mode.‎‏‎‎‏‎"</string>
+    <string name="recents_stack_action_button_label" msgid="6593727103310426253">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎Clear all‎‏‎‎‏‎"</string>
+    <string name="recents_drag_hint_message" msgid="2649739267073203985">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎Drag here to use split screen‎‏‎‎‏‎"</string>
+    <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‎‎‏‎‎‎Split Horizontal‎‏‎‎‏‎"</string>
+    <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‎‏‎‎‏‎‎‏‏‎‏‎Split Vertical‎‏‎‎‏‎"</string>
+    <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎Split Custom‎‏‎‎‏‎"</string>
+    <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎Split screen to the top‎‏‎‎‏‎"</string>
+    <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎Split screen to the left‎‏‎‎‏‎"</string>
+    <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎Split screen to the right‎‏‎‎‏‎"</string>
+  <string-array name="recents_blacklist_array">
+  </string-array>
+    <string name="expanded_header_battery_charged" msgid="5945855970267657951">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‎Charged‎‏‎‎‏‎"</string>
+    <string name="expanded_header_battery_charging" msgid="205623198487189724">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‏‏‎‎‎Charging‎‏‎‎‏‎"</string>
+    <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="CHARGING_TIME">%s</xliff:g>‎‏‎‎‏‏‏‎ until full‎‏‎‎‏‎"</string>
+    <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‎‎Not charging‎‏‎‎‏‎"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎Network may‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎be monitored‎‏‎‎‏‎"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎Search‎‏‎‎‏‎"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎Slide up for ‎‏‎‎‏‏‎<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‎Slide left for ‎‏‎‎‏‏‎<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‎You won\'t be disturbed by sounds and vibrations, except from alarms, reminders, events, and callers you specify. You\'ll still hear anything you choose to play including music, videos, and games.‎‏‎‎‏‎"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎‎‏‎You won\'t be disturbed by sounds and vibrations, except from alarms. You\'ll still hear anything you choose to play including music, videos, and games.‎‏‎‎‏‎"</string>
+    <string name="zen_priority_customize_button" msgid="7948043278226955063">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎Customize‎‏‎‎‏‎"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎‎‏‎‎‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎This blocks ALL sounds and vibrations, including from alarms, music, videos, and games. You\'ll still be able to make phone calls.‎‏‎‎‏‎"</string>
+    <string name="zen_silence_introduction" msgid="3137882381093271568">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‎‎‎‎‏‎‎‎‎‎This blocks ALL sounds and vibrations, including from alarms, music, videos, and games.‎‏‎‎‏‎"</string>
+    <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎+‎‏‎‎‏‏‎<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="speed_bump_explanation" msgid="1288875699658819755">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‎‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎Less urgent notifications below‎‏‎‎‏‎"</string>
+    <string name="notification_tap_again" msgid="7590196980943943842">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‎Tap again to open‎‏‎‎‏‎"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‏‏‏‎‎Swipe up to unlock‎‏‎‎‏‎"</string>
+    <string name="do_disclosure_generic" msgid="5615898451805157556">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‏‎‎‎This device is managed by your organization‎‏‎‎‏‎"</string>
+    <string name="do_disclosure_with_name" msgid="5640615509915445501">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎This device is managed by ‎‏‎‎‏‏‎<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎Swipe from icon for phone‎‏‎‎‏‎"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎‎‏‏‎‏‏‏‏‎‏‎‎‏‎‎‏‎‎‏‎Swipe from icon for voice assist‎‏‎‎‏‎"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‎‎‏‎‎‏‏‎‏‎‎‏‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎Swipe from icon for camera‎‏‎‎‏‎"</string>
+    <string name="interruption_level_none_with_warning" msgid="5114872171614161084">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎Total silence. This will also silence screen readers.‎‏‎‎‏‎"</string>
+    <string name="interruption_level_none" msgid="6000083681244492992">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‎‎‎Total silence‎‏‎‎‏‎"</string>
+    <string name="interruption_level_priority" msgid="6426766465363855505">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‏‎Priority only‎‏‎‎‏‎"</string>
+    <string name="interruption_level_alarms" msgid="5226306993448328896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎Alarms only‎‏‎‎‏‎"</string>
+    <string name="interruption_level_none_twoline" msgid="3957581548190765889">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‎‎‏‎Total‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎silence‎‏‎‎‏‎"</string>
+    <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎Priority‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎only‎‏‎‎‏‎"</string>
+    <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‎‎‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‎‏‎‎‎‏‎‎Alarms‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎only‎‏‎‎‏‎"</string>
+    <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎‎Charging (‎‏‎‎‏‏‎<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>‎‏‎‎‏‏‏‎ until full)‎‏‎‎‏‎"</string>
+    <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‎‏‎‎Charging rapidly (‎‏‎‎‏‏‎<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>‎‏‎‎‏‏‏‎ until full)‎‏‎‎‏‎"</string>
+    <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎Charging slowly (‎‏‎‎‏‏‎<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>‎‏‎‎‏‏‏‎ until full)‎‏‎‎‏‎"</string>
+    <string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‎Switch user‎‏‎‎‏‎"</string>
+    <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎‏‏‎‏‏‎‎‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎Switch user, current user ‎‏‎‎‏‏‎<xliff:g id="CURRENT_USER_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎Current user ‎‏‎‎‏‏‎<xliff:g id="CURRENT_USER_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎Show profile‎‏‎‎‏‎"</string>
+    <string name="user_add_user" msgid="5110251524486079492">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎Add user‎‏‎‎‏‎"</string>
+    <string name="user_new_user_name" msgid="426540612051178753">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎New user‎‏‎‎‏‎"</string>
+    <string name="guest_nickname" msgid="8059989128963789678">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‏‏‎‎Guest‎‏‎‎‏‎"</string>
+    <string name="guest_new_guest" msgid="600537543078847803">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‎‏‎‎‏‏‏‎‏‏‎Add guest‎‏‎‎‏‎"</string>
+    <string name="guest_exit_guest" msgid="7187359342030096885">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‏‏‏‏‎‏‎‏‎Remove guest‎‏‎‎‏‎"</string>
+    <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‏‏‎‎‏‎‎‎‎‎‎Remove guest?‎‏‎‎‏‎"</string>
+    <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‎All apps and data in this session will be deleted.‎‏‎‎‏‎"</string>
+    <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎Remove‎‏‎‎‏‎"</string>
+    <string name="guest_wipe_session_title" msgid="6419439912885956132">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎Welcome back, guest!‎‏‎‎‏‎"</string>
+    <string name="guest_wipe_session_message" msgid="8476238178270112811">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‎‏‎‏‏‎Do you want to continue your session?‎‏‎‎‏‎"</string>
+    <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‎‎‎Start over‎‏‎‎‏‎"</string>
+    <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‏‎‎‎Yes, continue‎‏‎‎‏‎"</string>
+    <string name="guest_notification_title" msgid="1585278533840603063">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎Guest user‎‏‎‎‏‎"</string>
+    <string name="guest_notification_text" msgid="335747957734796689">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‎To delete apps and data, remove guest user‎‏‎‎‏‎"</string>
+    <string name="guest_notification_remove_action" msgid="8820670703892101990">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎REMOVE GUEST‎‏‎‎‏‎"</string>
+    <string name="user_logout_notification_title" msgid="1453960926437240727">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‏‎Logout user‎‏‎‎‏‎"</string>
+    <string name="user_logout_notification_text" msgid="3350262809611876284">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎Logout current user‎‏‎‎‏‎"</string>
+    <string name="user_logout_notification_action" msgid="1195428991423425062">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎‏‏‎‎LOGOUT USER‎‏‎‎‏‎"</string>
+    <string name="user_add_user_title" msgid="4553596395824132638">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‏‎‎‎‎‏‏‏‏‎‎Add new user?‎‏‎‎‏‎"</string>
+    <string name="user_add_user_message_short" msgid="2161624834066214559">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‏‎When you add a new user, that person needs to set up their space.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Any user can update apps for all other users.‎‏‎‎‏‎"</string>
+    <string name="user_remove_user_title" msgid="4681256956076895559">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎‏‏‏‎Remove user?‎‏‎‎‏‎"</string>
+    <string name="user_remove_user_message" msgid="1453218013959498039">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‎‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‎All apps and data of this user will be deleted.‎‏‎‎‏‎"</string>
+    <string name="user_remove_user_remove" msgid="7479275741742178297">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎Remove‎‏‎‎‏‎"</string>
+    <string name="battery_saver_notification_title" msgid="237918726750955859">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‎‎‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‏‏‎Battery saver is on‎‏‎‎‏‎"</string>
+    <string name="battery_saver_notification_text" msgid="820318788126672692">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎‎Reduces performance and background data‎‏‎‎‏‎"</string>
+    <string name="battery_saver_notification_action_text" msgid="109158658238110382">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎Turn off battery saver‎‏‎‎‏‎"</string>
+    <string name="media_projection_dialog_text" msgid="3071431025448218928">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‎‏‎‎‏‏‏‎ will start capturing everything that\'s displayed on your screen.‎‏‎‎‏‎"</string>
+    <string name="media_projection_remember_text" msgid="3103510882172746752">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎Don\'t show again‎‏‎‎‏‎"</string>
+    <string name="clear_all_notifications_text" msgid="814192889771462828">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‏‎‏‎‏‏‎‎‎Clear all‎‏‎‎‏‎"</string>
+    <string name="media_projection_action_text" msgid="8470872969457985954">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎Start now‎‏‎‎‏‎"</string>
+    <string name="empty_shade_text" msgid="708135716272867002">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‎No notifications‎‏‎‎‏‎"</string>
+    <string name="profile_owned_footer" msgid="8021888108553696069">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎Profile may be monitored‎‏‎‎‏‎"</string>
+    <string name="vpn_footer" msgid="2388611096129106812">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‎Network may be monitored‎‏‎‎‏‎"</string>
+    <string name="branded_vpn_footer" msgid="2168111859226496230">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‎Network may be monitored‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_management_monitoring" msgid="6645176135063957394">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎Your organization manages this device and may monitor network traffic‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_named_management_monitoring" msgid="370622174777570853">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‎‎‏‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ manages this device and may monitor network traffic‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_management_named_vpn" msgid="1085137869053332307">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‎Device is managed by your organization and connected to ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_named_management_named_vpn" msgid="6290456493852584017">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‏‎Device is managed by ‎‏‎‎‏‏‎<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ and connected to ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_management" msgid="3294967280853150271">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‎Device is managed by your organization‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_named_management" msgid="1059403025094542908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‎‎Device is managed by ‎‏‎‎‏‏‎<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_management_vpns" msgid="3698767349925266482">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‏‎‎‏‎‎Device is managed by your organization and connected to VPNs‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_named_management_vpns" msgid="7777821385318891527">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎Device is managed by ‎‏‎‎‏‏‎<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ and connected to VPNs‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_managed_profile_monitoring" msgid="5125463987558278215">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎Your organization may monitor network traffic in your work profile‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8973606847896650284">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ may monitor network traffic in your work profile‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_monitoring" msgid="679658227269205728">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎Network may be monitored‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_vpns" msgid="8170318392053156330">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‎‏‎‎Device connected to VPNs‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‎Work profile connected to ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‏‎‎Personal profile connected to ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎Device connected to ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="monitoring_title_device_owned" msgid="1652495295941959815">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‏‎Device management‎‏‎‎‏‎"</string>
+    <string name="monitoring_title_profile_owned" msgid="6790109874733501487">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎Profile monitoring‎‏‎‎‏‎"</string>
+    <string name="monitoring_title" msgid="169206259253048106">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‏‎‎Network monitoring‎‏‎‎‏‎"</string>
+    <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎VPN‎‏‎‎‏‎"</string>
+    <string name="monitoring_subtitle_network_logging" msgid="3341264304793193386">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎Network logging‎‏‎‎‏‎"</string>
+    <string name="monitoring_subtitle_ca_certificate" msgid="3874151893894355988">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‎‎‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎CA certificates‎‏‎‎‏‎"</string>
+    <string name="disable_vpn" msgid="4435534311510272506">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎Disable VPN‎‏‎‎‏‎"</string>
+    <string name="disconnect_vpn" msgid="1324915059568548655">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎Disconnect VPN‎‏‎‎‏‎"</string>
+    <string name="monitoring_button_view_policies" msgid="100913612638514424">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‎‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎View Policies‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_named_management" msgid="5281789135578986303">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‏‎Your device is managed by ‎‏‎‎‏‏‎<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Your admin can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎For more information, contact your admin.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_management" msgid="4573721970278370790">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‏‎‎Your device is managed by your organization.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Your admin can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎For more information, contact your admin.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎Your organization installed a certificate authority on this device. Your secure network traffic may be monitored or modified.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎Your organization installed a certificate authority in your work profile. Your secure network traffic may be monitored or modified.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎A certificate authority is installed on this device. Your secure network traffic may be monitored or modified.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‎‎Your admin has turned on network logging, which monitors traffic on your device.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎You\'re connected to ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎, which can monitor your network activity, including emails, apps, and websites.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‎‏‎‎You\'re connected to ‎‏‎‎‏‏‎<xliff:g id="VPN_APP_0">%1$s</xliff:g>‎‏‎‎‏‏‏‎ and ‎‏‎‎‏‏‎<xliff:g id="VPN_APP_1">%2$s</xliff:g>‎‏‎‎‏‏‏‎, which can monitor your network activity, including emails, apps, and websites.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎Your work profile is connected to ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎, which can monitor your network activity, including emails, apps, and websites.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‏‎Your personal profile is connected to ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎, which can monitor your network activity, including emails, apps, and websites.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎Your device is managed by ‎‏‎‎‏‏‎<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ uses ‎‏‎‎‏‏‎<xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>‎‏‎‎‏‏‏‎ to manage your device.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_do_body" msgid="3639594537660975895">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎Your admin can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎ ‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‎Learn more‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‎‎‏‎‎‎You\'re connected to ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎, which can monitor your network activity, including emails, apps, and websites.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎ ‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‏‏‎‏‎‏‎Open VPN settings‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‎‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‎‎ ‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎‎‎Open trusted credentials‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_network_logging" msgid="7223505523384076027">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‏‎Your admin has turned on network logging, which monitors traffic on your device.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎For more information, contact your admin.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_vpn" msgid="4445150119515393526">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‎‏‏‎‎You gave an app permission to set up a VPN connection.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎This app can monitor your device and network activity, including emails, apps, and websites.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‎‎Your work profile is managed by ‎‏‎‎‏‏‎<xliff:g id="ORGANIZATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Your admin is capable of monitoring your network activity including emails, apps, and websites.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎For more information, contact your admin.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎You\'re also connected to a VPN, which can monitor your network activity.‎‏‎‎‏‎"</string>
+    <string name="legacy_vpn_name" msgid="6604123105765737830">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎VPN‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_app" msgid="1828472472674709532">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‎‎You\'re connected to ‎‏‎‎‏‏‎<xliff:g id="APPLICATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎, which can monitor your network activity, including emails, apps, and websites.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_app_personal" msgid="484599052118316268">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‎‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎You\'re connected to ‎‏‎‎‏‏‎<xliff:g id="APPLICATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎, which can monitor your personal network activity, including emails, apps, and websites.‎‏‎‎‏‎"</string>
+    <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎You\'re connected to ‎‏‎‎‏‏‎<xliff:g id="APPLICATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎, which can monitor your personal network activity, including emails, apps, and websites.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_app_work" msgid="4612997849787922906">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎Your work profile is managed by ‎‏‎‎‏‏‎<xliff:g id="ORGANIZATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎. The profile is connected to ‎‏‎‎‏‏‎<xliff:g id="APPLICATION">%2$s</xliff:g>‎‏‎‎‏‏‏‎, which can monitor your work network activity, including emails, apps, and websites.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎For more information, contact your admin.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_app_personal_work" msgid="5664165460056859391">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎Your work profile is managed by ‎‏‎‎‏‏‎<xliff:g id="ORGANIZATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎. The profile is connected to ‎‏‎‎‏‏‎<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>‎‏‎‎‏‏‏‎, which can monitor your work network activity, including emails, apps, and websites.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎You\'re also connected to ‎‏‎‎‏‏‎<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>‎‏‎‎‏‏‏‎, which can monitor your personal network activity.‎‏‎‎‏‎"</string>
+    <string name="keyguard_indication_trust_granted" msgid="4985003749105182372">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‏‎‏‎‏‎‎‏‎‎‎Unlocked for ‎‏‎‎‏‏‎<xliff:g id="USER_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="keyguard_indication_trust_managed" msgid="8319646760022357585">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="TRUST_AGENT">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is running‎‏‎‎‏‎"</string>
+    <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‎Device will stay locked until you manually unlock‎‏‎‎‏‎"</string>
+    <string name="hidden_notifications_title" msgid="7139628534207443290">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎Get notifications faster‎‏‎‎‏‎"</string>
+    <string name="hidden_notifications_text" msgid="2326409389088668981">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‎See them before you unlock‎‏‎‎‏‎"</string>
+    <string name="hidden_notifications_cancel" msgid="3690709735122344913">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‎‎‎‏‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎No thanks‎‏‎‎‏‎"</string>
+    <string name="hidden_notifications_setup" msgid="41079514801976810">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‎‎Set up‎‏‎‎‏‎"</string>
+    <string name="zen_mode_and_condition" msgid="4462471036429759903">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="ZEN_MODE">%1$s</xliff:g>‎‏‎‎‏‏‏‎. ‎‏‎‎‏‏‎<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="volume_zen_end_now" msgid="6930243045593601084">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‎Turn off now‎‏‎‎‏‎"</string>
+    <string name="accessibility_volume_expand" msgid="5946812790999244205">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎Expand‎‏‎‎‏‎"</string>
+    <string name="accessibility_volume_collapse" msgid="3609549593031810875">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎Collapse‎‏‎‎‏‎"</string>
+    <string name="screen_pinning_title" msgid="3273740381976175811">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎Screen is pinned‎‏‎‎‏‎"</string>
+    <string name="screen_pinning_description" msgid="8909878447196419623">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎This keeps it in view until you unpin. Touch &amp; hold Back and Overview to unpin.‎‏‎‎‏‎"</string>
+    <string name="screen_pinning_description_accessible" msgid="426190689254018656">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎This keeps it in view until you unpin. Touch &amp; hold Overview to unpin.‎‏‎‎‏‎"</string>
+    <string name="screen_pinning_positive" msgid="3783985798366751226">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎Got it‎‏‎‎‏‎"</string>
+    <string name="screen_pinning_negative" msgid="3741602308343880268">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‏‎‎‎No thanks‎‏‎‎‏‎"</string>
+    <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎Hide ‎‏‎‎‏‏‎<xliff:g id="TILE_LABEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
+    <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎It will reappear the next time you turn it on in settings.‎‏‎‎‏‎"</string>
+    <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎Hide‎‏‎‎‏‎"</string>
+    <string name="managed_profile_foreground_toast" msgid="5421487114739245972">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‏‏‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎‎‎You\'re using your work profile‎‏‎‎‏‎"</string>
+    <string name="stream_voice_call" msgid="4410002696470423714">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎Call‎‏‎‎‏‎"</string>
+    <string name="stream_system" msgid="7493299064422163147">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‏‎‏‏‎System‎‏‎‎‏‎"</string>
+    <string name="stream_ring" msgid="8213049469184048338">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎Ring‎‏‎‎‏‎"</string>
+    <string name="stream_music" msgid="9086982948697544342">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‎Media‎‏‎‎‏‎"</string>
+    <string name="stream_alarm" msgid="5209444229227197703">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‏‏‏‎Alarm‎‏‎‎‏‎"</string>
+    <string name="stream_notification" msgid="2563720670905665031">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎Notification‎‏‎‎‏‎"</string>
+    <string name="stream_bluetooth_sco" msgid="2055645746402746292">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎Bluetooth‎‏‎‎‏‎"</string>
+    <string name="stream_dtmf" msgid="2447177903892477915">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‏‎Dual multi tone frequency‎‏‎‎‏‎"</string>
+    <string name="stream_accessibility" msgid="301136219144385106">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‏‎‏‎‎‏‎‎Accessibility‎‏‎‎‏‎"</string>
+    <string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‎%1$s. Tap to unmute.‎‏‎‎‏‎"</string>
+    <string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎‏‎‏‎‎‎‏‎‏‎‎%1$s. Tap to set to vibrate. Accessibility services may be muted.‎‏‎‎‏‎"</string>
+    <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‏‎‎%1$s. Tap to mute. Accessibility services may be muted.‎‏‎‎‏‎"</string>
+    <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎%1$s. Tap to set to vibrate.‎‏‎‎‏‎"</string>
+    <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‎‎%1$s. Tap to mute.‎‏‎‎‏‎"</string>
+    <string name="volume_dialog_accessibility_shown_message" msgid="1834631467074259998">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎%s volume controls shown. Swipe up to dismiss.‎‏‎‎‏‎"</string>
+    <string name="volume_dialog_accessibility_dismissed_message" msgid="51543526013711399">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎Volume controls hidden‎‏‎‎‏‎"</string>
+    <string name="system_ui_tuner" msgid="708224127392452018">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‎System UI Tuner‎‏‎‎‏‎"</string>
+    <string name="show_battery_percentage" msgid="5444136600512968798">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‏‏‎‎Show embedded battery percentage‎‏‎‎‏‎"</string>
+    <string name="show_battery_percentage_summary" msgid="3215025775576786037">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‏‎‏‎‏‎Show battery level percentage inside the status bar icon when not charging‎‏‎‎‏‎"</string>
+    <string name="quick_settings" msgid="10042998191725428">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‎Quick Settings‎‏‎‎‏‎"</string>
+    <string name="status_bar" msgid="4877645476959324760">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‎‎‎Status bar‎‏‎‎‏‎"</string>
+    <string name="overview" msgid="4018602013895926956">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‎Overview‎‏‎‎‏‎"</string>
+    <string name="demo_mode" msgid="2532177350215638026">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‎‎‎‏‎‏‎‎System UI demo mode‎‏‎‎‏‎"</string>
+    <string name="enable_demo_mode" msgid="4844205668718636518">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‎Enable demo mode‎‏‎‎‏‎"</string>
+    <string name="show_demo_mode" msgid="2018336697782464029">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎Show demo mode‎‏‎‎‏‎"</string>
+    <string name="status_bar_ethernet" msgid="5044290963549500128">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‎‎Ethernet‎‏‎‎‏‎"</string>
+    <string name="status_bar_alarm" msgid="8536256753575881818">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎Alarm‎‏‎‎‏‎"</string>
+    <string name="status_bar_work" msgid="6022553324802866373">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‎Work profile‎‏‎‎‏‎"</string>
+    <string name="status_bar_airplane" msgid="7057575501472249002">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‏‏‎‎‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‏‎‏‎‏‎‏‎‎Airplane mode‎‏‎‎‏‎"</string>
+    <string name="add_tile" msgid="2995389510240786221">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‏‏‎‏‎Add tile‎‏‎‎‏‎"</string>
+    <string name="broadcast_tile" msgid="3894036511763289383">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‏‎Broadcast Tile‎‏‎‎‏‎"</string>
+    <string name="zen_alarm_warning_indef" msgid="3482966345578319605">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎You won\'t hear your next alarm ‎‏‎‎‏‏‎<xliff:g id="WHEN">%1$s</xliff:g>‎‏‎‎‏‏‏‎ unless you turn this off before then‎‏‎‎‏‎"</string>
+    <string name="zen_alarm_warning" msgid="444533119582244293">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‎You won\'t hear your next alarm ‎‏‎‎‏‏‎<xliff:g id="WHEN">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="alarm_template" msgid="3980063409350522735">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‎‏‎‏‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‎‏‏‎‏‏‏‏‎at ‎‏‎‎‏‏‎<xliff:g id="WHEN">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="alarm_template_far" msgid="4242179982586714810">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎‎on ‎‏‎‎‏‏‎<xliff:g id="WHEN">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_detail" msgid="2579369091672902101">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‎Quick Settings, ‎‏‎‎‏‏‎<xliff:g id="TITLE">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎Hotspot‎‏‎‎‏‎"</string>
+    <string name="accessibility_managed_profile" msgid="6613641363112584120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎Work profile‎‏‎‎‏‎"</string>
+    <string name="tuner_warning_title" msgid="7094689930793031682">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎Fun for some but not for all‎‏‎‎‏‎"</string>
+    <string name="tuner_warning" msgid="8730648121973575701">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‏‎System UI Tuner gives you extra ways to tweak and customize the Android user interface. These experimental features may change, break, or disappear in future releases. Proceed with caution.‎‏‎‎‏‎"</string>
+    <string name="tuner_persistent_warning" msgid="8597333795565621795">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎These experimental features may change, break, or disappear in future releases. Proceed with caution.‎‏‎‎‏‎"</string>
+    <string name="got_it" msgid="2239653834387972602">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎Got it‎‏‎‎‏‎"</string>
+    <string name="tuner_toast" msgid="603429811084428439">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎Congrats! System UI Tuner has been added to Settings‎‏‎‎‏‎"</string>
+    <string name="remove_from_settings" msgid="8389591916603406378">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎Remove from Settings‎‏‎‎‏‎"</string>
+    <string name="remove_from_settings_prompt" msgid="6069085993355887748">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‎Remove System UI Tuner from Settings and stop using all of its features?‎‏‎‎‏‎"</string>
+    <string name="activity_not_found" msgid="348423244327799974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‎Application is not installed on your device‎‏‎‎‏‎"</string>
+    <string name="clock_seconds" msgid="7689554147579179507">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‏‎Show clock seconds‎‏‎‎‏‎"</string>
+    <string name="clock_seconds_desc" msgid="6282693067130470675">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎Show clock seconds in the status bar. May impact battery life.‎‏‎‎‏‎"</string>
+    <string name="qs_rearrange" msgid="8060918697551068765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎Rearrange Quick Settings‎‏‎‎‏‎"</string>
+    <string name="show_brightness" msgid="6613930842805942519">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎Show brightness in Quick Settings‎‏‎‎‏‎"</string>
+    <string name="experimental" msgid="6198182315536726162">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‏‎‎Experimental‎‏‎‎‏‎"</string>
+    <string name="enable_bluetooth_title" msgid="5027037706500635269">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎Turn on Bluetooth?‎‏‎‎‏‎"</string>
+    <string name="enable_bluetooth_message" msgid="9106595990708985385">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‎‎‏‎To connect your keyboard with your tablet, you first have to turn on Bluetooth.‎‏‎‎‏‎"</string>
+    <string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎Turn on‎‏‎‎‏‎"</string>
+    <string name="show_silently" msgid="6841966539811264192">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‎‎‏‏‏‏‎‎‎‏‎‏‏‎‏‏‎‎‎‎‎‎‎Show notifications silently‎‏‎‎‏‎"</string>
+    <string name="block" msgid="2734508760962682611">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‏‏‎Block all notifications‎‏‎‎‏‎"</string>
+    <string name="do_not_silence" msgid="6878060322594892441">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎Don\'t silence‎‏‎‎‏‎"</string>
+    <string name="do_not_silence_block" msgid="4070647971382232311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎Don\'t silence or block‎‏‎‎‏‎"</string>
+    <string name="tuner_full_importance_settings" msgid="3207312268609236827">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‏‎‏‏‏‏‎‏‎‏‏‎‏‏‎Power notification controls‎‏‎‎‏‎"</string>
+    <string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎On‎‏‎‎‏‎"</string>
+    <string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‎‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‎Off‎‏‎‎‏‎"</string>
+    <string name="power_notification_controls_description" msgid="4372459941671353358">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎With power notification controls, you can set an importance level from 0 to 5 for an app\'s notifications. ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎"<b>"‎‏‎‎‏‏‏‎Level 5‎‏‎‎‏‏‎"</b>"‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Show at the top of the notification list ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Allow full screen interruption ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Always peek ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎"<b>"‎‏‎‎‏‏‏‎Level 4‎‏‎‎‏‏‎"</b>"‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Prevent full screen interruption ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Always peek ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎"<b>"‎‏‎‎‏‏‏‎Level 3‎‏‎‎‏‏‎"</b>"‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Prevent full screen interruption ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Never peek ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎"<b>"‎‏‎‎‏‏‏‎Level 2‎‏‎‎‏‏‎"</b>"‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Prevent full screen interruption ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Never peek ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Never make sound and vibration ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎"<b>"‎‏‎‎‏‏‏‎Level 1‎‏‎‎‏‏‎"</b>"‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Prevent full screen interruption ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Never peek ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Never make sound or vibrate ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Hide from lock screen and status bar ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Show at the bottom of the notification list ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎"<b>"‎‏‎‎‏‏‏‎Level 0‎‏‎‎‏‏‎"</b>"‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎- Block all notifications from the app‎‏‎‎‏‎"</string>
+    <string name="notification_header_default_channel" msgid="7506845022070889909">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‏‎Notifications‎‏‎‎‏‎"</string>
+    <string name="notification_channel_disabled" msgid="2139193533791840539">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‏‏‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‎‏‏‎You won\'t get these notifications anymore‎‏‎‎‏‎"</string>
+    <string name="notification_num_channels" msgid="2048144408999179471">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‎‎‏‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ notification categories‎‏‎‎‏‎"</string>
+    <string name="notification_default_channel_desc" msgid="2506053815870808359">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‏‏‎This app doesn\'t have notification categories‎‏‎‎‏‎"</string>
+    <string name="notification_unblockable_desc" msgid="3561016061737896906">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎Notifications from this app can\'t be turned off‎‏‎‎‏‎"</string>
+    <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎1 out of ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%s</xliff:g>‎‏‎‎‏‏‏‎ notification categories from this app‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎1 out of ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%s</xliff:g>‎‏‎‎‏‏‏‎ notification category from this app‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎, ‎‏‎‎‏‏‎<xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>‎‏‎‎‏‏‏‎, ‎‏‎‎‏‏‎<xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g>‎‏‎‎‏‏‏‎, and ‎‏‎‎‏‏‎<xliff:g id="NUMBER_5">%3$d</xliff:g>‎‏‎‎‏‏‏‎ others‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>‎‏‎‎‏‏‏‎, ‎‏‎‎‏‏‎<xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g>‎‏‎‎‏‏‏‎, and ‎‏‎‎‏‏‎<xliff:g id="NUMBER_2">%3$d</xliff:g>‎‏‎‎‏‏‏‎ other‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‎Notification controls for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ opened‎‏‎‎‏‎"</string>
+    <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‏‏‎‎‎‎Notification controls for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ closed‎‏‎‎‏‎"</string>
+    <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎Allow notifications from this channel‎‏‎‎‏‎"</string>
+    <string name="notification_all_categories" msgid="5407190218055113282">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‏‎‎All Categories‎‏‎‎‏‎"</string>
+    <string name="notification_more_settings" msgid="816306283396553571">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‎More settings‎‏‎‎‏‎"</string>
+    <string name="notification_app_settings" msgid="3743278649182392015">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎Customize: ‎‏‎‎‏‏‎<xliff:g id="SUB_CATEGORY">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="notification_done" msgid="5279426047273930175">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‏‏‎Done‎‏‎‎‏‎"</string>
+    <string name="notification_menu_accessibility" msgid="2046162834248888553">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‎<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="2204480013726775108">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎‏‎‎‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎notification controls‎‏‎‎‏‎"</string>
+    <string name="notification_menu_snooze_description" msgid="3653669438131034525">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‏‎notification snooze options‎‏‎‎‏‎"</string>
+    <string name="snooze_undo" msgid="6074877317002985129">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎UNDO‎‏‎‎‏‎"</string>
+    <string name="snoozed_for_time" msgid="2390718332980204462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎Snoozed for ‎‏‎‎‏‏‎<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <plurals name="snoozeHourOptions" formatted="false" msgid="2124335842674413030">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎‏‏‎‎%d hours‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎‏‏‎‎%d hour‎‏‎‎‏‎</item>
+    </plurals>
+    <plurals name="snoozeMinuteOptions" formatted="false" msgid="4127251700591510196">
+      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎%d minutes‎‏‎‎‏‎</item>
+      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎%d minute‎‏‎‎‏‎</item>
+    </plurals>
+    <string name="battery_panel_title" msgid="7944156115535366613">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‎Battery usage‎‏‎‎‏‎"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‎‏‏‎‎‎‏‎‏‏‏‏‏‎Battery saver not available during charging‎‏‎‎‏‎"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎Battery saver‎‏‎‎‏‎"</string>
+    <string name="battery_detail_switch_summary" msgid="9049111149407626804">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎Reduces performance and background data‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_button_template" msgid="6230056639734377300">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎Button ‎‏‎‎‏‏‎<xliff:g id="NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_home" msgid="2243500072071305073">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎Home‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_back" msgid="2337450286042721351">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎Back‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_dpad_up" msgid="5584144111755734686">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‏‏‎‏‎‎‏‏‏‏‎‎Up‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_dpad_down" msgid="7331518671788337815">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‏‎‏‎‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎Down‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_dpad_left" msgid="1346446024676962251">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎Left‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_dpad_right" msgid="3317323247127515341">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‎Right‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_dpad_center" msgid="2566737770049304658">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‎‎Center‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_tab" msgid="3871485650463164476">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‏‎‎‎Tab‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_space" msgid="2499861316311153293">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎Space‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_enter" msgid="5739632123216118137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‎‎‏‎Enter‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_backspace" msgid="1559580097512385854">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‎Backspace‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_media_play_pause" msgid="3861975717393887428">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‎‎‎Play/Pause‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_media_stop" msgid="2859963958595908962">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‎‎‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎Stop‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_media_next" msgid="1894394911630345607">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‎‏‎‎‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‎Next‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_media_previous" msgid="4256072387192967261">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎Previous‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_media_rewind" msgid="2654808213360820186">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎Rewind‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_media_fast_forward" msgid="3849417047738200605">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‏‎Fast Forward‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_page_up" msgid="5654098530106845603">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‎‏‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‎‎‏‏‎Page Up‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_page_down" msgid="8720502083731906136">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‎‎Page Down‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_forward_del" msgid="1391451334716490176">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‎‎‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‎‎‎‎Delete‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_move_home" msgid="2765693292069487486">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‎‎Home‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_move_end" msgid="5901174332047975247">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎End‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_insert" msgid="8530501581636082614">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎Insert‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_num_lock" msgid="5052537581246772117">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‎Num Lock‎‏‎‎‏‎"</string>
+    <string name="keyboard_key_numpad_template" msgid="8729216555174634026">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‎Numpad ‎‏‎‎‏‏‎<xliff:g id="NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_system" msgid="6472647649616541064">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎System‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎Home‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‎‎Recents‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎‏‎‏‎‎Back‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‎‎‎Notifications‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎Keyboard Shortcuts‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎Switch input method‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‎‏‏‎‎Applications‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_applications_assist" msgid="9095441910537146013">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎‎‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‎Assist‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_applications_browser" msgid="6465985474000766533">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‎Browser‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_applications_contacts" msgid="2064197111278436375">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎Contacts‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_applications_email" msgid="6257036897441939004">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎Email‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_applications_sms" msgid="638701213803242744">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎SMS‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_applications_music" msgid="4775559515850922780">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‎Music‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎YouTube‎‏‎‎‏‎"</string>
+    <string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‎Calendar‎‏‎‎‏‎"</string>
+    <string name="tuner_full_zen_title" msgid="4540823317772234308">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‎‎Show with volume controls‎‏‎‎‏‎"</string>
+    <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‎‎Do not disturb‎‏‎‎‏‎"</string>
+    <string name="volume_dnd_silent" msgid="4363882330723050727">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‎‎‏‏‏‎Volume buttons shortcut‎‏‎‎‏‎"</string>
+    <string name="volume_up_silent" msgid="7141255269783588286">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‏‏‏‏‎‎Exit do not disturb on volume up‎‏‎‎‏‎"</string>
+    <string name="battery" msgid="7498329822413202973">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎Battery‎‏‎‎‏‎"</string>
+    <string name="clock" msgid="7416090374234785905">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‏‎Clock‎‏‎‎‏‎"</string>
+    <string name="headset" msgid="4534219457597457353">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎Headset‎‏‎‎‏‎"</string>
+    <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎Headphones connected‎‏‎‎‏‎"</string>
+    <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎Headset connected‎‏‎‎‏‎"</string>
+    <string name="data_saver" msgid="5037565123367048522">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‏‎‏‎‎Data Saver‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_saver_on" msgid="8454111686783887148">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‏‎‎‎Data Saver is on‎‏‎‎‏‎"</string>
+    <string name="accessibility_data_saver_off" msgid="8841582529453005337">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎Data Saver is off‎‏‎‎‏‎"</string>
+    <string name="switch_bar_on" msgid="1142437840752794229">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‎On‎‏‎‎‏‎"</string>
+    <string name="switch_bar_off" msgid="8803270596930432874">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎Off‎‏‎‎‏‎"</string>
+    <string name="nav_bar" msgid="1993221402773877607">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‎Navigation bar‎‏‎‎‏‎"</string>
+    <string name="nav_bar_layout" msgid="3664072994198772020">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎Layout‎‏‎‎‏‎"</string>
+    <string name="left_nav_bar_button_type" msgid="8555981238887546528">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎Extra left button type‎‏‎‎‏‎"</string>
+    <string name="right_nav_bar_button_type" msgid="2481056627065649656">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎Extra right button type‎‏‎‎‏‎"</string>
+    <string name="nav_bar_default" msgid="8587114043070993007">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎(default)‎‏‎‎‏‎"</string>
+  <string-array name="nav_bar_buttons">
+    <item msgid="1545641631806817203">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‎‎‏‏‎Clipboard‎‏‎‎‏‎"</item>
+    <item msgid="5742013440802239414">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎‎‏‏‏‎‏‏‎‏‏‎‎Keycode‎‏‎‎‏‎"</item>
+    <item msgid="8802889973626281575">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‎‏‏‏‎Keyboard switcher‎‏‎‎‏‎"</item>
+    <item msgid="8175437057325747277">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‎‏‎None‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="nav_bar_layouts">
+    <item msgid="8077901629964902399">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎Normal‎‏‎‎‏‎"</item>
+    <item msgid="8256205964297588988">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‎‎‎Compact‎‏‎‎‏‎"</item>
+    <item msgid="8719936228094005878">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‏‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‎Left-leaning‎‏‎‎‏‎"</item>
+    <item msgid="586019486955594690">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎Right-leaning‎‏‎‎‏‎"</item>
+  </string-array>
+    <string name="menu_ime" msgid="4998010205321292416">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎Keyboard switcher‎‏‎‎‏‎"</string>
+    <string name="save" msgid="2311877285724540644">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‎‏‎‎‎Save‎‏‎‎‏‎"</string>
+    <string name="reset" msgid="2448168080964209908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‏‎‎‎Reset‎‏‎‎‏‎"</string>
+    <string name="adjust_button_width" msgid="6138616087197632947">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‏‏‎Adjust button width‎‏‎‎‏‎"</string>
+    <string name="clipboard" msgid="1313879395099896312">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‎Clipboard‎‏‎‎‏‎"</string>
+    <string name="accessibility_key" msgid="5701989859305675896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎Custom navigation button‎‏‎‎‏‎"</string>
+    <string name="left_keycode" msgid="2010948862498918135">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‏‎Left keycode‎‏‎‎‏‎"</string>
+    <string name="right_keycode" msgid="708447961000848163">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎Right keycode‎‏‎‎‏‎"</string>
+    <string name="left_icon" msgid="3096287125959387541">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‏‎‎‏‎‏‎‏‎Left icon‎‏‎‎‏‎"</string>
+    <string name="right_icon" msgid="3952104823293824311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‏‏‎‏‏‏‎Right icon‎‏‎‎‏‎"</string>
+    <string name="drag_to_add_tiles" msgid="7058945779098711293">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‏‎‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎Drag to add tiles‎‏‎‎‏‎"</string>
+    <string name="drag_to_remove_tiles" msgid="3361212377437088062">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‎Drag here to remove‎‏‎‎‏‎"</string>
+    <string name="qs_edit" msgid="2232596095725105230">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‎‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‎Edit‎‏‎‎‏‎"</string>
+    <string name="tuner_time" msgid="6572217313285536011">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎Time‎‏‎‎‏‎"</string>
+  <string-array name="clock_options">
+    <item msgid="5965318737560463480">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‎‎‎Show hours, minutes, and seconds‎‏‎‎‏‎"</item>
+    <item msgid="1427801730816895300">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‎‎‎‏‎‎‎Show hours and minutes (default)‎‏‎‎‏‎"</item>
+    <item msgid="3830170141562534721">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‎‎‏‎‎‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎Don\'t show this icon‎‏‎‎‏‎"</item>
+  </string-array>
+  <string-array name="battery_options">
+    <item msgid="3160236755818672034">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎Always show percentage‎‏‎‎‏‎"</item>
+    <item msgid="2139628951880142927">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‎‎‎‏‎‎‏‏‏‏‎Show percentage when charging (default)‎‏‎‎‏‎"</item>
+    <item msgid="3327323682209964956">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎Don\'t show this icon‎‏‎‎‏‎"</item>
+  </string-array>
+    <string name="other" msgid="4060683095962566764">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‏‏‎‎‎‎‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‎Other‎‏‎‎‏‎"</string>
+    <string name="accessibility_divider" msgid="5903423481953635044">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‎‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‏‎‎‎Split-screen divider‎‏‎‎‏‎"</string>
+    <string name="accessibility_action_divider_left_full" msgid="2801570521881574972">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎Left full screen‎‏‎‎‏‎"</string>
+    <string name="accessibility_action_divider_left_70" msgid="3612060638991687254">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‎‎‏‏‏‏‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎Left 70%‎‏‎‎‏‎"</string>
+    <string name="accessibility_action_divider_left_50" msgid="1248083470322193075">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎Left 50%‎‏‎‎‏‎"</string>
+    <string name="accessibility_action_divider_left_30" msgid="543324403127069386">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎Left 30%‎‏‎‎‏‎"</string>
+    <string name="accessibility_action_divider_right_full" msgid="4639381073802030463">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎Right full screen‎‏‎‎‏‎"</string>
+    <string name="accessibility_action_divider_top_full" msgid="5357010904067731654">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‎Top full screen‎‏‎‎‏‎"</string>
+    <string name="accessibility_action_divider_top_70" msgid="5090779195650364522">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎Top 70%‎‏‎‎‏‎"</string>
+    <string name="accessibility_action_divider_top_50" msgid="6385859741925078668">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‎Top 50%‎‏‎‎‏‎"</string>
+    <string name="accessibility_action_divider_top_30" msgid="6201455163864841205">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎Top 30%‎‏‎‎‏‎"</string>
+    <string name="accessibility_action_divider_bottom_full" msgid="301433196679548001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‎Bottom full screen‎‏‎‎‏‎"</string>
+    <string name="accessibility_qs_edit_tile_label" msgid="8374924053307764245">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎Position ‎‏‎‎‏‏‎<xliff:g id="POSITION">%1$d</xliff:g>‎‏‎‎‏‏‏‎, ‎‏‎‎‏‏‎<xliff:g id="TILE_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎. Double tap to edit.‎‏‎‎‏‎"</string>
+    <string name="accessibility_qs_edit_add_tile_label" msgid="8133209638023882667">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="TILE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Double tap to add.‎‏‎‎‏‎"</string>
+    <string name="accessibility_qs_edit_position_label" msgid="5055306305919289819">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‏‎‏‏‎‏‏‎Position ‎‏‎‎‏‏‎<xliff:g id="POSITION">%1$d</xliff:g>‎‏‎‎‏‏‏‎. Double tap to select.‎‏‎‎‏‎"</string>
+    <string name="accessibility_qs_edit_move_tile" msgid="2461819993780159542">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎Move ‎‏‎‎‏‏‎<xliff:g id="TILE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="accessibility_qs_edit_remove_tile" msgid="7484493384665907197">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎Remove ‎‏‎‎‏‏‎<xliff:g id="TILE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="accessibility_qs_edit_tile_added" msgid="8050200862063548309">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="TILE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is added to position ‎‏‎‎‏‏‎<xliff:g id="POSITION">%2$d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="accessibility_qs_edit_tile_removed" msgid="8584304916627913440">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="TILE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is removed‎‏‎‎‏‎"</string>
+    <string name="accessibility_qs_edit_tile_moved" msgid="4343693412689365038">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="TILE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ moved to position ‎‏‎‎‏‏‎<xliff:g id="POSITION">%2$d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="accessibility_desc_quick_settings_edit" msgid="8073587401747016103">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎Quick settings editor.‎‏‎‎‏‎"</string>
+    <string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎ notification: ‎‏‎‎‏‏‎<xliff:g id="ID_2">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="dock_forced_resizable" msgid="5914261505436217520">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‎‎App may not work with split-screen.‎‏‎‎‏‎"</string>
+    <string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‎‏‏‎App does not support split-screen.‎‏‎‎‏‎"</string>
+    <string name="forced_resizable_secondary_display" msgid="4230857851756391925">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎App may not work on a secondary display.‎‏‎‎‏‎"</string>
+    <string name="activity_launch_on_secondary_display_failed_text" msgid="7793821742158306742">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‏‎‎App does not support launch on secondary displays.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎Open settings.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‎Open quick settings.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‎Close quick settings.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‎‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‎Alarm set.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_user" msgid="1567445362870421770">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎Signed in as ‎‏‎‎‏‏‎<xliff:g id="ID_1">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‏‏‎No internet.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎Open details.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎Open ‎‏‎‎‏‏‎<xliff:g id="ID_1">%s</xliff:g>‎‏‎‎‏‏‏‎ settings.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‏‎‎‏‎Edit order of settings.‎‏‎‎‏‎"</string>
+    <string name="accessibility_quick_settings_page" msgid="5032979051755200721">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎Page ‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$d</xliff:g>‎‏‎‎‏‏‏‎ of ‎‏‎‎‏‏‎<xliff:g id="ID_2">%2$d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="tuner_lock_screen" msgid="5755818559638850294">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‏‎‎Lock screen‎‏‎‎‏‎"</string>
+    <string name="pip_phone_expand" msgid="5889780005575693909">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‎‏‎‏‎Expand‎‏‎‎‏‎"</string>
+    <string name="pip_phone_minimize" msgid="1079119422589131792">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎Minimize‎‏‎‎‏‎"</string>
+    <string name="pip_phone_close" msgid="8416647892889710330">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‎‎Close‎‏‎‎‏‎"</string>
+    <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‎Drag down to dismiss‎‏‎‎‏‎"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎Menu‎‏‎‎‏‎"</string>
+    <string name="pip_notification_title" msgid="3204024940158161322">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ is in picture-in-picture‎‏‎‎‏‎"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‎If you don\'t want ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ to use this feature, tap to open settings and turn it off.‎‏‎‎‏‎"</string>
+    <string name="pip_play" msgid="1417176722760265888">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‎Play‎‏‎‎‏‎"</string>
+    <string name="pip_pause" msgid="8881063404466476571">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‎‏‏‎Pause‎‏‎‎‏‎"</string>
+    <string name="pip_skip_to_next" msgid="1948440006726306284">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎Skip to next‎‏‎‎‏‎"</string>
+    <string name="pip_skip_to_prev" msgid="1955311326688637914">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‏‎‎‏‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‎‎Skip to previous‎‏‎‎‏‎"</string>
+    <string name="thermal_shutdown_title" msgid="4458304833443861111">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‏‏‏‎‏‏‏‎Phone turned off due to heat‎‏‎‎‏‎"</string>
+    <string name="thermal_shutdown_message" msgid="9006456746902370523">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎Your phone is now running normally‎‏‎‎‏‎"</string>
+    <string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‏‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎Your phone was too hot, so it turned off to cool down. Your phone is now running normally.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Your phone may get too hot if you:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Use resource-intensive apps (such as gaming, video, or navigation apps)‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Download or upload large files‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Use your phone in high temperatures‎‏‎‎‏‎"</string>
+    <string name="high_temp_title" msgid="4589508026407318374">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‎Phone is getting warm‎‏‎‎‏‎"</string>
+    <string name="high_temp_notif_message" msgid="5642466103153429279">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‎‎‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‏‏‎Some features limited while phone cools down‎‏‎‎‏‎"</string>
+    <string name="high_temp_dialog_message" msgid="6840700639374113553">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‎Your phone will automatically try to cool down. You can still use your phone, but it may run slower.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Once your phone has cooled down, it will run normally.‎‏‎‎‏‎"</string>
+    <string name="lockscreen_shortcut_left" msgid="2182769107618938629">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎Left shortcut‎‏‎‎‏‎"</string>
+    <string name="lockscreen_shortcut_right" msgid="3328683699505226536">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‎‎‎Right shortcut‎‏‎‎‏‎"</string>
+    <string name="lockscreen_unlock_left" msgid="2043092136246951985">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‎‎‎‏‎Left shortcut also unlocks‎‏‎‎‏‎"</string>
+    <string name="lockscreen_unlock_right" msgid="1529992940510318775">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‎‏‏‎‏‏‏‎Right shortcut also unlocks‎‏‎‎‏‎"</string>
+    <string name="lockscreen_none" msgid="4783896034844841821">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎None‎‏‎‎‏‎"</string>
+    <string name="tuner_launch_app" msgid="1527264114781925348">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎Launch ‎‏‎‎‏‏‎<xliff:g id="APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="tuner_other_apps" msgid="4726596850501162493">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‏‏‏‎‏‎Other apps‎‏‎‎‏‎"</string>
+    <string name="tuner_circle" msgid="2340998864056901350">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‎‎Circle‎‏‎‎‏‎"</string>
+    <string name="tuner_plus" msgid="6792960658533229675">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‎‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‏‎Plus‎‏‎‎‏‎"</string>
+    <string name="tuner_minus" msgid="4806116839519226809">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‎‎‏‎‏‏‎‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‎Minus‎‏‎‎‏‎"</string>
+    <string name="tuner_left" msgid="8404287986475034806">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‎Left‎‏‎‎‏‎"</string>
+    <string name="tuner_right" msgid="6222734772467850156">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‎Right‎‏‎‎‏‎"</string>
+    <string name="tuner_menu" msgid="191640047241552081">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎Menu‎‏‎‎‏‎"</string>
+    <string name="tuner_app" msgid="3507057938640108777">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎ app‎‏‎‎‏‎"</string>
+    <string name="notification_channel_alerts" msgid="4496839309318519037">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎Alerts‎‏‎‎‏‎"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‎Battery‎‏‎‎‏‎"</string>
+    <string name="notification_channel_screenshot" msgid="6314080179230000938">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‎‏‎‎Screenshots‎‏‎‎‏‎"</string>
+    <string name="notification_channel_general" msgid="4525309436693914482">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎General Messages‎‏‎‎‏‎"</string>
+    <string name="notification_channel_storage" msgid="3077205683020695313">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‎‎‏‎Storage‎‏‎‎‏‎"</string>
+    <string name="instant_apps" msgid="6647570248119804907">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎Instant Apps‎‏‎‎‏‎"</string>
+    <string name="instant_apps_message" msgid="8116608994995104836">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎Instant apps don\'t require installation.‎‏‎‎‏‎"</string>
+    <string name="app_info" msgid="6856026610594615344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎‎App info‎‏‎‎‏‎"</string>
+    <string name="go_to_web" msgid="1106022723459948514">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎Go to web‎‏‎‎‏‎"</string>
+    <string name="mobile_data" msgid="7094582042819250762">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎Mobile data‎‏‎‎‏‎"</string>
+    <string name="wifi_is_off" msgid="1838559392210456893">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎Wi-Fi is off‎‏‎‎‏‎"</string>
+    <string name="bt_is_off" msgid="2640685272289706392">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎‎‎‎‏‏‎‎‏‏‎‎‎‎Bluetooth is off‎‏‎‎‏‎"</string>
+    <string name="dnd_is_off" msgid="6167780215212497572">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎Do Not Disturb is off‎‏‎‎‏‎"</string>
+    <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎Do Not Disturb was turned on by an automatic rule (‎‏‎‎‏‏‎<xliff:g id="ID_1">%s</xliff:g>‎‏‎‎‏‏‏‎).‎‏‎‎‏‎"</string>
+    <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‏‎‎Do Not Disturb was turned on by an app (‎‏‎‎‏‏‎<xliff:g id="ID_1">%s</xliff:g>‎‏‎‎‏‏‏‎).‎‏‎‎‏‎"</string>
+    <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‏‎‎‎‎‏‏‏‏‎Do Not Disturb was turned on by an automatic rule or app.‎‏‎‎‏‎"</string>
+    <string name="qs_dnd_until" msgid="3469471136280079874">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‎Until ‎‏‎‎‏‏‎<xliff:g id="ID_1">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="qs_dnd_keep" msgid="1825009164681928736">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎Keep‎‏‎‎‏‎"</string>
+    <string name="qs_dnd_replace" msgid="8019520786644276623">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‎Replace‎‏‎‎‏‎"</string>
+    <string name="running_foreground_services_title" msgid="381024150898615683">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‎‎‎‎‎‏‏‎Apps running in background‎‏‎‎‏‎"</string>
+    <string name="running_foreground_services_msg" msgid="6326247670075574355">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‏‏‎Tap for details on battery and data usage‎‏‎‎‏‎"</string>
+    <string name="data_usage_disable_mobile" msgid="5116269981510015864">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‎‎‎‎Turn off mobile data?‎‏‎‎‏‎"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‏‏‎‎‏‏‏‏‏‏‎Because an app is obscuring a permission request, Settings can’t verify your response.‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-en-rXC/strings_car.xml b/packages/SystemUI/res/values-en-rXC/strings_car.xml
new file mode 100644
index 0000000..0aff34a
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rXC/strings_car.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2016, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="unknown_user_label" msgid="4323896111737677955">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎‏‎‎‎‎‎‏‏‎Unknown‎‏‎‎‏‎"</string>
+    <string name="start_driving" msgid="864023351402918991">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎Start Driving‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-en-rXC/strings_tv.xml b/packages/SystemUI/res/values-en-rXC/strings_tv.xml
new file mode 100644
index 0000000..c1c7adf
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rXC/strings_tv.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2016, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="notification_channel_tv_pip" msgid="134047986446577723">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎Picture-in-Picture‎‏‎‎‏‎"</string>
+    <string name="pip_notification_unknown_title" msgid="6289156118095849438">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‎‎(No title program)‎‏‎‎‏‎"</string>
+    <string name="pip_close" msgid="3480680679023423574">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎Close PIP‎‏‎‎‏‎"</string>
+    <string name="pip_fullscreen" msgid="8604643018538487816">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‎‏‎‎‎‎Full screen‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index d6c97b7..8db0a99 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"La huella digital de tu clave RSA es:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Permitir siempre desde esta computadora"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"No tienes permitida la depuración por USB"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"El usuario conectado con este dispositivo en este momento no puede activar la depuración por USB. Para usar esta función, debes cambiar a un usuario administrador."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"El usuario al que accediste en este dispositivo no puede activar la depuración por USB. Para usar esta función, debes cambiar al usuario principal."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom para ocupar la pantalla"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Estirar p/ ocupar la pantalla"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Guardando captura de pantalla"</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Desliza el dedo hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"No te molestarán los sonidos ni las vibraciones, excepto las alarmas, los recordatorios, los eventos y las llamadas de los emisores que especifiques. Seguirás escuchando el contenido que reproduzcas, como música, videos y juegos."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"No te molestarán los sonidos ni las vibraciones, excepto las alarmas. Seguirás escuchando el contenido que reproduzcas, como música, videos y juegos."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"No te molestarán los sonidos ni las vibraciones, excepto las alarmas, los recordatorios, los eventos y las llamadas de los emisores que especifiques. Podrás escuchar el contenido que reproduzcas, como música, videos y juegos."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"No te molestarán los sonidos ni las vibraciones, excepto las alarmas. Podrás escuchar el contenido que reproduzcas, como música, videos y juegos."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizar"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Esta acción bloquea TODOS los sonidos y las vibraciones, incluidas las que provienen de alarmas, videos y juegos. Podrás realizar llamadas telefónicas."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Esta acción bloquea TODOS los sonidos y las vibraciones, incluso las alarmas, los videos y los juegos. Podrás realizar llamadas telefónicas."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Esta acción bloquea TODOS los sonidos y las vibraciones, incluso los que provienen de alarmas, música, videos y juegos."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificaciones menos urgentes abajo"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Más información"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Estás conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que puede controlar la actividad de tu red, incluidos los correos electrónicos, las apps y los sitios web."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir configuración de VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Abrir configuración de VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Abrir credenciales de confianza"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Tu administrador activó el registro de red, que controla el tráfico en tu dispositivo.\n\nComunícate con él para obtener más información."</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Esta app no tiene categorías de notificación"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"No es posible desactivar las notificaciones de esta app"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 de <xliff:g id="NUMBER_1">%d</xliff:g> categorías de notificación de esta app</item>
-      <item quantity="one">1 de <xliff:g id="NUMBER_0">%d</xliff:g> categoría de notificación de esta app</item>
+      <item quantity="other">1 de <xliff:g id="NUMBER_1">%s</xliff:g> categorías de notificación de esta app</item>
+      <item quantity="one">1 de <xliff:g id="NUMBER_0">%s</xliff:g> categoría de notificación de esta app</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="one">%d minuto</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Uso de la batería"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Ahorro de batería no está disponible durante la carga"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Ahorro de batería"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"El Ahorro de batería no está disponible durante la carga"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Ahorro de batería"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduce el rendimiento y el uso de datos en segundo plano"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Botón <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Página principal"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizar"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Cerrar"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Arrastra hacia abajo para descartar"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menú de Imagen en imagen"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menú"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> está en modo de imagen en imagen"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Si no quieres que <xliff:g id="NAME">%s</xliff:g> use esta función, presiona para abrir la configuración y desactivarla."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Si no quieres que <xliff:g id="NAME">%s</xliff:g> use esta función, presiona para abrir la configuración y desactivarla."</string>
     <string name="pip_play" msgid="1417176722760265888">"Reproducir"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pausar"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Siguiente"</string>
@@ -756,6 +756,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menú"</string>
     <string name="tuner_app" msgid="3507057938640108777">"App de <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alertas"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Batería"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Capturas de pantalla"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Mensajes generales"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Almacenamiento"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Apps que se ejecutan en segundo plano"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Presiona para obtener información sobre el uso de datos y de la batería"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"¿Deseas desactivar los datos móviles?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Como una app está bloqueando una solicitud de permiso, Configuración no puede verificar tu respuesta."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 9b4705a..6eabfc0 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -34,14 +34,14 @@
     <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificaciones"</string>
     <string name="battery_low_title" msgid="6456385927409742437">"Nivel de batería bajo"</string>
     <string name="battery_low_percent_format" msgid="2900940511201380775">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g> de batería"</string>
-    <string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g> de batería. La función de ahorro de energía está activada."</string>
+    <string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"Queda un <xliff:g id="PERCENTAGE">%s</xliff:g> de batería. La función de ahorro de batería está activada."</string>
     <string name="invalid_charger" msgid="4549105996740522523">"No se admite la carga por USB.\nUtiliza solo el cargador proporcionado."</string>
     <string name="invalid_charger_title" msgid="3515740382572798460">"No se admite la carga por USB."</string>
     <string name="invalid_charger_text" msgid="5474997287953892710">"Utiliza solo el cargador proporcionado."</string>
     <string name="battery_low_why" msgid="4553600287639198111">"Ajustes"</string>
     <string name="battery_saver_confirmation_title" msgid="5299585433050361634">"¿Activar ahorro de batería?"</string>
     <string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Activar"</string>
-    <string name="battery_saver_start_action" msgid="5576697451677486320">"Activar ahorro de energía"</string>
+    <string name="battery_saver_start_action" msgid="5576697451677486320">"Activar ahorro de batería"</string>
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Ajustes"</string>
     <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
     <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Girar pantalla automáticamente"</string>
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"La huella digital de tu clave RSA es:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Permitir siempre desde este ordenador"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Depuración USB no permitida"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"El usuario que ha iniciado sesión en este dispositivo no puede activar la depuración USB. Para hacerlo, debes utilizar una cuenta de administrador."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"El usuario con el que se ha iniciado sesión en este dispositivo no puede activar la depuración USB. Para utilizar esta función, inicia sesión con la cuenta de usuario principal."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom para ajustar"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Expandir para ajustar"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Guardando captura..."</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Desliza el dedo hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"No te molestarán los sonidos ni las vibraciones, excepto las alarmas, los recordatorios, los eventos y las llamadas que especifiques. Seguirás escuchando el contenido que quieras reproducir, como música, vídeos y juegos."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"No te molestarán los sonidos ni las vibraciones, excepto las alarmas. Seguirás escuchando el contenido que quieras reproducir, como música, vídeos y juegos."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"No te molestarán los sonidos ni las vibraciones, excepto las alarmas, los recordatorios, los eventos y las llamadas que especifiques. Seguirás escuchando el contenido que quieras reproducir, como música, vídeos y juegos."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"No te molestarán los sonidos ni las vibraciones, excepto las alarmas. Seguirás escuchando el contenido que quieras reproducir, como música, vídeos y juegos."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizar"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Este modo permite bloquear TODOS los sonidos y todas las vibraciones (p. ej., los de alarmas, música, vídeos y juegos). Seguirás pudiendo hacer llamadas de teléfono."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Esta opción bloqueará TODOS los sonidos y todas las vibraciones, por ejemplo, los vídeos, los juegos, las alarmas y la música. Seguirás pudiendo hacer llamadas."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Este modo permite bloquear TODOS los sonidos y todas las vibraciones (p. ej., los de alarmas, música, vídeos y juegos)."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificaciones menos urgente abajo"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Más información"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Te has conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que puede controlar tu actividad de red, como los correos electrónicos, las aplicaciones y los sitios web."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir Ajustes de red VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Abrir ajustes de VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Abrir credenciales de confianza"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Tu administrador ha activado el registro de la red para supervisar el tráfico en tu dispositivo.\n\nPonte en contacto con él para obtener más información."</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Esta aplicación no tiene categorías de notificación"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"No se pueden desactivar las notificaciones de esta aplicación"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 de <xliff:g id="NUMBER_1">%d</xliff:g> categorías de notificación de esta aplicación</item>
-      <item quantity="one">1 de <xliff:g id="NUMBER_0">%d</xliff:g> categoría de notificación de esta aplicación</item>
+      <item quantity="other">1 de <xliff:g id="NUMBER_1">%s</xliff:g> categorías de notificación de esta aplicación</item>
+      <item quantity="one">1 de <xliff:g id="NUMBER_0">%s</xliff:g> categoría de notificación de esta aplicación</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="one">%d minuto</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Uso de la batería"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Ahorro de batería no disponible mientras se carga el dispositivo"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Ahorro de batería"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"La función Ahorro de batería no está disponible mientras se carga el dispositivo"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Ahorro de batería"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduce el rendimiento y los datos en segundo plano"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Botón <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Inicio"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizar"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Cerrar"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Arrastra hacia abajo para ignorar"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menú del modo Imagen en imagen"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menú"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> está en imagen en imagen"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Si no quieres que <xliff:g id="NAME">%s</xliff:g> utilice esta función, toca la notificación para abrir los ajustes y desactivarla."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Si no quieres que <xliff:g id="NAME">%s</xliff:g> utilice esta función, toca la notificación para abrir los ajustes y desactivarla."</string>
     <string name="pip_play" msgid="1417176722760265888">"Reproducir"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pausar"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Saltar al siguiente"</string>
@@ -756,6 +756,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menú"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplicación <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alertas"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Batería"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Capturas de pantalla"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Mensajes generales"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Almacenamiento"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplicaciones que se están ejecutando en segundo plano"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Toca para ver información detallada sobre el uso de datos y de la batería"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"¿Desactivar los datos móviles?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Una aplicación impide ver una solicitud de permiso, por lo que Ajustes no puede verificar tu respuesta."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 763d6e7..2fc49ff 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Arvuti RSA-võtme sõrmejälg:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Luba alati sellest arvutist"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB-silumine pole lubatud"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Sellesse seadmesse praegu sisse logitud kasutaja ei saa USB-silumist sisse lülitada. Selle funktsiooni kasutamiseks lülitage administraatorile."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Sellesse seadmesse praegu sisse logitud kasutaja ei saa USB-silumist sisse lülitada. Selle funktsiooni kasutamiseks vahetage peamisele kasutajale."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Suumi ekraani täitmiseks"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Venita ekraani täitmiseks"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Kuvatõmmise salvestamine ..."</string>
@@ -229,8 +229,8 @@
     <string name="accessibility_quick_settings_flashlight_changed_on" msgid="6531793301533894686">"Taskulamp on sisse lülitatud."</string>
     <string name="accessibility_quick_settings_color_inversion_changed_off" msgid="4406577213290173911">"Värvi ümberpööramine on välja lülitatud."</string>
     <string name="accessibility_quick_settings_color_inversion_changed_on" msgid="6897462320184911126">"Värvi ümberpööramine on sisse lülitatud."</string>
-    <string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobiilside leviala on välja lülitatud."</string>
-    <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobiilside leviala on sisse lülitatud."</string>
+    <string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobiilside kuumkoht on välja lülitatud."</string>
+    <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobiilside kuumkoht on sisse lülitatud."</string>
     <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ekraanikuva ülekandmine on peatatud."</string>
     <string name="accessibility_quick_settings_work_mode_off" msgid="7045417396436552890">"Töörežiim on väljas."</string>
     <string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"Töörežiim on sees."</string>
@@ -315,7 +315,7 @@
     <string name="quick_settings_connected_battery_level" msgid="4136051440381328892">"Ühendatud, aku <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="quick_settings_connecting" msgid="47623027419264404">"Ühenduse loomine ..."</string>
     <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Jagamine"</string>
-    <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Leviala"</string>
+    <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Kuumkoht"</string>
     <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Märguanded"</string>
     <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Taskulamp"</string>
     <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Mobiilne andmeside"</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Otsing"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Lohistage üles: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Lohistage vasakule: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Helid ja vibratsioonid ei sega teid. Kuulete siiski enda määratud alarme, meeldetuletusi, sündmusi ja helistajaid. Samuti kuulete kõike, mille esitamise ise valite, sh muusika, videod ja mängud."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Helid ja vibratsioonid ei sega teid. Kuulete siiski alarme. Samuti kuulete kõike, mille esitamise ise valite, sh muusika, videod ja mängud."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Helid ja värinad ei sega teid. Kuulete siiski enda määratud äratusi, meeldetuletusi, sündmusi ja helistajaid. Samuti kuulete kõike, mille esitamise ise valite, sh muusika, videod ja mängud."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Helid ja värinad ei sega teid. Kuulete siiski äratusi. Samuti kuulete kõike, mille esitamise ise valite, sh muusika, videod ja mängud."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Kohanda"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"See blokeerib KÕIK – sealhulgas alarmide, muusika, videote ja mängude – helid ja värinad. Saate siiski helistada."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"See blokeerib KÕIK helid ja vibratsioonid, sh alarmid, muusika, videod ja mängud. Siiski saate helistada."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"See blokeerib KÕIK – sealhulgas alarmide, muusika, videote ja mängude – helid ja vibratsioonid."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Vähem kiireloomulised märguanded on allpool"</string>
@@ -383,7 +383,7 @@
     <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Kasutaja vahetamine, praegune kasutaja: <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Praegune kasutaja <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"Kuva profiil"</string>
-    <string name="user_add_user" msgid="5110251524486079492">"Kasutaja lisamine"</string>
+    <string name="user_add_user" msgid="5110251524486079492">"Lisa kasutaja"</string>
     <string name="user_new_user_name" msgid="426540612051178753">"Uus kasutaja"</string>
     <string name="guest_nickname" msgid="8059989128963789678">"Külaline"</string>
     <string name="guest_new_guest" msgid="600537543078847803">"Lisa külaline"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Lisateave"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Olete ühendatud rakendusega <xliff:g id="VPN_APP">%1$s</xliff:g>, mis saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Ava VPN-i seaded"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN-i seadete avamine"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Ava usaldusväärsed mandaadid"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Teie administraator on sisse lülitanud võrgu logimise funktsiooni, mis jälgib teie seadmes liiklust.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
@@ -526,7 +526,7 @@
     <string name="alarm_template" msgid="3980063409350522735">"kell <xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="alarm_template_far" msgid="4242179982586714810">"kell <xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_detail" msgid="2579369091672902101">"Kiirseaded, <xliff:g id="TITLE">%s</xliff:g>."</string>
-    <string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"Leviala"</string>
+    <string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"Kuumkoht"</string>
     <string name="accessibility_managed_profile" msgid="6613641363112584120">"Tööprofiil"</string>
     <string name="tuner_warning_title" msgid="7094689930793031682">"Kõik ei pruugi sellest rõõmu tunda"</string>
     <string name="tuner_warning" msgid="8730648121973575701">"Süsteemi kasutajaliidese tuuner pakub täiendavaid võimalusi Androidi kasutajaliidese muutmiseks ja kohandamiseks. Need katselised funktsioonid võivad muutuda, rikki minna või tulevastest versioonidest kaduda. Olge jätkamisel ettevaatlik."</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Sellel rakendusel ei ole märguannete kategooriaid"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Selle rakenduse märguandeid ei saa välja lülitada"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 <xliff:g id="NUMBER_1">%d</xliff:g>-st märguannete kategooriast sellelt rakenduselt</item>
-      <item quantity="one">1 <xliff:g id="NUMBER_0">%d</xliff:g>-st märguannete kategooriast sellelt rakenduselt</item>
+      <item quantity="other">1 <xliff:g id="NUMBER_1">%s</xliff:g>-st märguannete kategooriast sellelt rakenduselt</item>
+      <item quantity="one">1 <xliff:g id="NUMBER_0">%s</xliff:g>-st märguannete kategooriast sellelt rakenduselt</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="one">%d minut</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Akukasutus"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Akusäästja pole laadimise ajal saadaval"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Akusäästja"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Akusäästja pole laadimise ajal saadaval"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Akusäästja"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Vähendab jõudlust ja taustaandmeid"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Nupp <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Avaekraan"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimeeri"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Sule"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Loobumiseks lohistage alla"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menüü Pilt pildis"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menüü"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> on režiimis Pilt pildis"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Kui te ei soovi, et rakendus <xliff:g id="NAME">%s</xliff:g> seda funktsiooni kasutaks, puudutage seadete avamiseks ja lülitage see välja."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Kui te ei soovi, et rakendus <xliff:g id="NAME">%s</xliff:g> seda funktsiooni kasutaks, puudutage seadete avamiseks ja lülitage see välja."</string>
     <string name="pip_play" msgid="1417176722760265888">"Esita"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Peata"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Järgmise juurde"</string>
@@ -756,6 +756,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menüü"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Rakendus <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Teatised"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Aku"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Ekraanipildid"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Üldised sõnumid"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Salvestusruum"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Rakendusi käitatakse taustal"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Aku ja andmekasutuse üksikasjade nägemiseks puudutage"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Kas lülitada mobiilne andmeside välja?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Seaded ei saa teie vastust kinnitada, sest rakendus varjab loataotlust."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 52fc08a..ff0c575 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Ordenagailuaren RSA gakoaren hatz-marka hau da:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Onartu beti ordenagailu honetatik"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Ez da onartzen USB arazketa"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Gailu honetan saioa hasita duen erabiltzaileak ezin du USB arazketa aktibatu. Eginbide hori erabiltzeko, aldatu administratzaile-erabiltzailera."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Gailu honetan saioa hasita duen erabiltzaileak ezin du aktibatu USB arazketa. Eginbide hori erabiltzeko, aldatu erabiltzaile nagusira."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Handiagotu pantaila betetzeko"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Luzatu pantaila betetzeko"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Pantaila-argazkia gordetzen…"</string>
@@ -227,8 +227,8 @@
     <string name="accessibility_quick_settings_flashlight_on" msgid="2003479320007841077">"Flasha aktibatuta dago."</string>
     <string name="accessibility_quick_settings_flashlight_changed_off" msgid="3303701786768224304">"Flasha desaktibatu egin da."</string>
     <string name="accessibility_quick_settings_flashlight_changed_on" msgid="6531793301533894686">"Flasha aktibatu egin da."</string>
-    <string name="accessibility_quick_settings_color_inversion_changed_off" msgid="4406577213290173911">"Koloreak alderantzikatzeko aukera desaktibatu egin da."</string>
-    <string name="accessibility_quick_settings_color_inversion_changed_on" msgid="6897462320184911126">"Koloreak alderantzikatzeko aukera aktibatu egin da."</string>
+    <string name="accessibility_quick_settings_color_inversion_changed_off" msgid="4406577213290173911">"Koloreen alderantzikatzea desaktibatu egin da."</string>
+    <string name="accessibility_quick_settings_color_inversion_changed_on" msgid="6897462320184911126">"Koloreen alderantzikatzea aktibatu egin da."</string>
     <string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Konexioa partekatzeko aukera desaktibatu egin da."</string>
     <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Konexioa partekatzeko aukera aktibatu egin da."</string>
     <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Pantaila igortzeari utzi zaio."</string>
@@ -242,7 +242,7 @@
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Kargatzen"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G datuen erabilera eten da"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G datuen erabilera eten da"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Datu mugikorrak pausatu egin dira"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Datu-konexioa pausatu egin da"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Datuen erabilera eten da"</string>
     <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Iritsi zara ezarri zenuen datu-mugara. Datu mugikorrak erabiltzeari utzi diozu.\n\nDatu mugikorrak erabiltzeari berrekiten badiozu, datuen erabileragatiko gastuak izango dituzu."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Jarraitu erabiltzen"</string>
@@ -300,7 +300,7 @@
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi konexioa desaktibatuta"</string>
     <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Aktibatuta dago Wi-Fi konexioa"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Ez dago Wi-Fi sarerik erabilgarri"</string>
-    <string name="quick_settings_cast_title" msgid="7709016546426454729">"Igorri"</string>
+    <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string>
     <string name="quick_settings_casting" msgid="6601710681033353316">"Igortzen"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Izenik gabeko gailua"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Igortzeko prest"</string>
@@ -342,9 +342,9 @@
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Zatitze horizontala"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Zatitze bertikala"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Zatitze pertsonalizatua"</string>
-    <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Banandu pantaila eta ezarri goian"</string>
-    <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Banandu pantaila eta ezarri ezkerrean"</string>
-    <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Banandu pantaila eta ezarri eskuinean"</string>
+    <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"Zatitu pantaila eta ezarri goian"</string>
+    <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"Zatitu pantaila eta ezarri ezkerrean"</string>
+    <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"Zatitu pantaila eta ezarri eskuinean"</string>
   <string-array name="recents_blacklist_array">
   </string-array>
     <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Kargatuta"</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Bilatu"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Lerratu gora hau egiteko: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Lerratu ezkerrera hau egiteko: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Gailuak ez du egingo ez soinurik ez dardararik, baina alarmak, gertaeren abisu-tonuak eta aukeratzen dituzun deitzaileen dei-tonuak joko ditu. Bestalde, zuk erreproduzitutako guztia entzungo duzu, besteak beste, musika, bideoak eta jokoak."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Gailuak ez du egingo ez soinurik ez dardararik, baina alarmak joko ditu. Hala ere, zuk erreproduzitutako guztia entzun ahal izango duzu, besteak beste, musika, bideoak eta jokoak."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Gailuak ez du egingo ez soinurik ez dardararik, baina alarmak, gertaera eta abisuen tonuak, eta aukeratzen dituzun deitzaileen dei-tonuak joko ditu. Bestalde, zuk erreproduzitutako guztia entzungo duzu, besteak beste, musika, bideoak eta jokoak."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Gailuak ez du egingo ez soinurik ez dardararik, baina alarmak joko ditu. Hala ere, zuk erreproduzitutako guztia entzun ahal izango duzu, besteak beste, musika, bideoak eta jokoak."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Pertsonalizatu"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Soinu eta dardara GUZTIAK blokeatuko dira, besteak beste, alarmak, musika, bideoak eta jokoak. Telefono-deiak egiteko aukera izaten jarraituko duzu."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Soinu eta dardara GUZTIAK blokeatuko dira, besteak beste, alarmak, musika, bideoak eta jokoak. Telefono-deiak egiteko aukera izaten jarraituko duzu."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Soinu eta dardara GUZTIAK blokeatuko dira, besteak beste, alarmak, musika, bideoak eta jokoak."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Horren premiazkoak ez diren jakinarazpenak daude behean"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Informazio gehiago"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g> aplikaziora konektatuta zaude eta hark sareko jarduerak gainbegira ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Ireki VPN ezarpenak"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Ireki VPN ezarpenak"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Ireki kredentzial fidagarriak"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Administratzaileak sare-erregistroak aktibatu ditu; horrela, zure gailuko trafikoa gainbegira dezake.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Aplikazio honek ez du jakinarazpen-kategoriarik"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Ezin dira desaktibatu aplikazio honen jakinarazpenak"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">Aplikazio honen 1/<xliff:g id="NUMBER_1">%d</xliff:g> jakinarazpen-kategoria</item>
-      <item quantity="one">Aplikazio honen 1/<xliff:g id="NUMBER_0">%d</xliff:g> jakinarazpen-kategoria</item>
+      <item quantity="other">Aplikazio honen 1/<xliff:g id="NUMBER_1">%s</xliff:g> jakinarazpen-kategoria</item>
+      <item quantity="one">Aplikazio honen 1/<xliff:g id="NUMBER_0">%s</xliff:g> jakinarazpen-kategoria</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="one">%d minutu</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Bateriaren erabilera"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Bateria-aurrezlea ez dago erabilgarri gailua kargatzen ari denean"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Bateria-aurrezlea"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Bateria-aurrezlea ez dago erabilgarri gailua kargatzen ari denean"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Bateria-aurrezlea"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Errendimendua eta atzeko planoko datuen erabilera murrizten ditu"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> botoia"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Hasiera"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizatu"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Itxi"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Baztertzeko, arrastatu behera"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Pantaila txiki gainjarriaren menua"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menua"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"Pantaila txiki gainjarrian dago <xliff:g id="NAME">%s</xliff:g>"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Ez baduzu nahi <xliff:g id="NAME">%s</xliff:g> zerbitzuak eginbide hori erabiltzea, sakatu hau ezarpenak ireki eta aukera desaktibatzeko."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Ez baduzu nahi <xliff:g id="NAME">%s</xliff:g> zerbitzuak eginbide hori erabiltzea, sakatu hau ezarpenak ireki eta aukera desaktibatzeko."</string>
     <string name="pip_play" msgid="1417176722760265888">"Erreproduzitu"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pausatu"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Saltatu hurrengora"</string>
@@ -755,7 +755,8 @@
     <string name="tuner_right" msgid="6222734772467850156">"Eskuinera"</string>
     <string name="tuner_menu" msgid="191640047241552081">"Menua"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> aplikazioa"</string>
-    <string name="notification_channel_alerts" msgid="4496839309318519037">"Abisuak"</string>
+    <string name="notification_channel_alerts" msgid="4496839309318519037">"Alertak"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Pantaila-argazkiak"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Mezu orokorrak"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Memoria"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikazioak exekutatzen ari dira atzeko planoan"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Sakatu bateria eta datuen erabilerari buruzko xehetasunak ikusteko"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Datu-konexioa desaktibatu nahi duzu?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Aplikazio bat baimen-eskaera oztopatzen ari denez, ezarpenek ezin dute egiaztatu erantzuna."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 75495fe..b3e1b4e 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"‏اثر انگشت کلید RSA رایانه: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"همیشه از این رایانه انجام شود"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"‏اشکال‌زدایی USB مجاز نیست"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"‏کاربری که درحال‌حاضر در این دستگاه وارد سیستم شده نمی‌تواند اشکال‌زدای USB را روشن کند. برای استفاده از این ویژگی، لطفاً به کاربر «سرپرست» تغییر حالت دهید."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"‏کاربری که درحال حاضر در این دستگاه وارد سیستم شده است نمی‌تواند اشکال‌زدایی USB را روشن کند. برای استفاده از این قابلیت، به کاربر اصلی تغییر وضعیت دهید."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"بزرگ‌نمایی برای پر کردن صفحه"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"گسترده کردن برای پر کردن صفحه"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"در حال ذخیره عکس صفحه‌نمایش..."</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"جستجو"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"لغزاندن به بالا برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"لغزاندن به چپ برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"بجز هشدارها، یادآوری‌ها، رویدادها و تماس‌گیرندگانی که خودتان مشخص می‌کنید، هیچ صدا و لرزشی نخواهید داشت. همچنان صدای مواردی را که پخش می‌کنید می‌شنوید از جمله صدای موسیقی، ویدیو و بازی."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"بجز هشدارها، هیچ صدا و لرزشی نخواهید داشت. همچنان صدای مواردی را که پخش می‌کنید می‌شنوید از جمله صدای موسیقی، ویدیو و بازی."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"به‌جز هشدارها، یادآوری‌ها، رویدادها و تماس‌گیرندگانی که خودتان مشخص می‌کنید، هیچ صدا و لرزشی نخواهید داشت. همچنان صدای مواردی را که پخش می‌کنید می‌شنوید (ازجمله صدای موسیقی، ویدیو و بازی)."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"به‌جز هشدارها، هیچ صدا و لرزشی نخواهید داشت. همچنان صدای مواردی را که پخش می‌کنید می‌شنوید (ازجمله صدای موسیقی، ویدیو و بازی)."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"سفارشی کردن"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"این کار «همه» صداها و لرزش‌ها از جمله هشدارها، موسیقی، ویدئوها و بازی‌ها را مسدود می‌کند. همچنان می‌توانید تماس تلفنی برقرار کنید."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"این کار «همه» صداها و لرزش‌ها (شامل هشدار، موسیقی، ویدیو و بازی) را مسدود می‌کند. همچنان می‌توانید تماس تلفنی برقرار کنید."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"این کار «همه» صداها و لرزش‌ها از جمله هشدارها، موسیقی، ویدئوها و بازی‌ها را مسدود می‌کند."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"اعلان‌های کمتر فوری در زیر"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"بیشتر بدانید"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"به <xliff:g id="VPN_APP">%1$s</xliff:g> وصل شده‌اید، که می‌تواند فعالیت شبکه شما را (ازجمله رایانامه‌‌ها، برنامه‌‌ها و وب‌سایت‌ها) کنترل کند."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"‏باز کردن تنظیمات VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"‏باز کردن تنظیمات VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"باز کردن اعتبارنامه مورداعتماد"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"سرپرست سیستم شما گزارش‌گیری شبکه را (که بر ترافیک دستگاهتان نظارت می‌کند) روشن کرده است.\n\nبرای اطلاعات بیشتر، با سرپرست خود تماس بگیرید."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"این برنامه دسته اعلان ندارد"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"نمی‌توان اعلان‌های این برنامه را خاموش کرد"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">۱ از <xliff:g id="NUMBER_1">%d</xliff:g> دسته اعلان این برنامه</item>
-      <item quantity="other">۱ از <xliff:g id="NUMBER_1">%d</xliff:g> دسته اعلان این برنامه</item>
+      <item quantity="one">۱ از <xliff:g id="NUMBER_1">%s</xliff:g> دسته اعلان این برنامه</item>
+      <item quantity="other">۱ از <xliff:g id="NUMBER_1">%s</xliff:g> دسته اعلان این برنامه</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>، <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="other">‏%d دقیقه</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"مصرف باتری"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"هنگام شارژ شدن، «بهینه‌سازی باتری» در دسترس نیست"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"بهینه‌سازی باتری"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"«بهینه‌سازی باتری» در هنگام شارژ شدن در دسترس نیست"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"بهینه‌سازی باتری"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"عملکرد و اطلاعات پس‌زمینه را کاهش می‌دهد"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"دکمه <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"ابتدا"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"کوچک کردن"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"بستن"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"برای نپذیرفتن، به پایین بکشید"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"منوی تصویر در تصویر"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"منو"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> درحالت تصویر در تصویر است"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"اگر نمی‌خواهید <xliff:g id="NAME">%s</xliff:g> از این قابلیت استفاده کند، با ضربه زدن، تنظیمات را باز کنید و قابلیت را خاموش کنید."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"اگر نمی‌خواهید <xliff:g id="NAME">%s</xliff:g> از این قابلیت استفاده کند، با ضربه زدن، تنظیمات را باز کنید و آن را خاموش کنید."</string>
     <string name="pip_play" msgid="1417176722760265888">"پخش"</string>
     <string name="pip_pause" msgid="8881063404466476571">"توقف موقت"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"رد شدن به بعدی"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"منو"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> برنامه"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"هشدارها"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"باتری"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"عکس‌های صفحه‌نمایش"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"پیام‌های عمومی"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"فضای ذخیره‌سازی"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"برنامه‌هایی که در پس‌زمینه اجرا می‌شوند"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"برای جزئیات مربوط به مصرف باتری و داده، ضربه بزنید"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"داده شبکه تلفن همراه خاموش شود؟"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"چون برنامه‌ای درحال ایجاد تداخل در درخواست مجوز است، «تنظیمات» نمی‌تواند پاسخ شما را تأیید کند."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 0223373..d195a4c 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -64,14 +64,14 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Tietokoneen RSA-avaintunnistetiedosto on:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Salli aina tällä tietokoneella"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB-vianetsintää ei sallita"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Laitteelle tällä hetkellä kirjautunut käyttäjä ei voi ottaa USB-vianetsintää käyttöön. Vaihda käyttäjäksi järjestelmänvalvoja käyttääksesi tätä ominaisuutta."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Laitteelle tällä hetkellä kirjautunut käyttäjä ei voi ottaa USB-vianetsintää käyttöön. Vaihda käyttäjäksi ensisijainen käyttäjä, jotta voit käyttää tätä ominaisuutta."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoomaa koko näyttöön"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Venytä koko näyttöön"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Tallennetaan kuvakaappausta..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Tallennetaan kuvakaappausta..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Kuvakaappausta tallennetaan."</string>
     <string name="screenshot_saved_title" msgid="6461865960961414961">"Kuvakaappaus tallennettu"</string>
-    <string name="screenshot_saved_text" msgid="2685605830386712477">"Tarkastele kuvakaappausta napauttamalla."</string>
+    <string name="screenshot_saved_text" msgid="2685605830386712477">"Tarkastele kuvakaappausta napauttamalla"</string>
     <string name="screenshot_failed_title" msgid="705781116746922771">"Kuvakaappausta ei voitu tallentaa"</string>
     <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"Kuvakaappausta tallennettaessa tapahtui virhe."</string>
     <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"Kuvakaappauksen tallentaminen epäonnistui, sillä tallennustilaa ei ole riittävästi."</string>
@@ -240,7 +240,7 @@
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Ladataan"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G-tiedonsiirto keskeytettiin"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-tiedonsiirto keskeytettiin"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobiilidatan käyttö on keskeytetty."</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobiilidatan käyttö on keskeytetty"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Tiedonsiirto keskeytettiin"</string>
     <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Asettamasi dataraja on saavutettu. Et enää käytä mobiilidataa.\n\nJos jatkat käyttöä, datan käytöstä saatetaan periä maksuja."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Jatka"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Haku"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Liu\'uta ylös ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Liu\'uta vasemmalle ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Äänet ja värinät eivät häiritse sinua, paitsi jos ne ovat hälytyksiä, muistutuksia, tapahtumia tai määrittämiäsi soittajia. Kuulet edelleen kaiken valitsemasi sisällön, kuten musiikin, videot ja pelit."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Äänet ja värinät eivät häiritse sinua, paitsi jos ne ovat hälytyksiä. Kuulet edelleen kaiken valitsemasi sisällön, kuten musiikin, videot ja pelit."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Äänet ja värinät eivät häiritse sinua, paitsi jos ne ovat hälytyksiä, muistutuksia, tapahtumia tai määrittämiäsi soittajia. Kuulet edelleen kaiken valitsemasi sisällön, kuten musiikin, videot ja pelit."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Äänet ja värinät eivät häiritse sinua, paitsi jos ne ovat hälytyksiä. Kuulet edelleen kaiken valitsemasi sisällön, kuten musiikin, videot ja pelit."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Muokkaa"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Tämä estää KAIKKI äänet ja värinät, mukaan lukien hälytysten, musiikin, videoiden ja pelien äänet ja värinät. Voit kuitenkin soittaa puheluita."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Tämä estää kaikki äänet ja värinät, mukaan lukien hälytysten, musiikin, videoiden ja pelien äänet ja värinät. Voit kuitenkin soittaa puheluita."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Tämä estää KAIKKI äänet ja värinät, mukaan lukien hälytysten, musiikin, videoiden ja pelien äänet ja värinät."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Vähemmän kiireelliset ilmoitukset ovat alla"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Lisätietoja"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Olet yhteydessä sovellukseen <xliff:g id="VPN_APP">%1$s</xliff:g>, joka voi valvoa verkkotoimintaasi, esimerkiksi sähköposteja, sovelluksia ja verkkosivustoja."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Avaa VPN-asetukset"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Avaa VPN-asetukset"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Avaa luotetut todennustiedot"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Järjestelmänvalvoja on ottanut käyttöön verkkolokitietojen tallentamisen. Sen avulla seurataan laitteellasi tapahtuvaa liikennettä.\n\nPyydä lisätietoja järjestelmänvalvojalta."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Tällä sovelluksella ei ole ilmoitusluokkia."</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Tämän sovelluksen ilmoituksia ei voi poistaa käytöstä."</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">Tämä sovellus: 1/<xliff:g id="NUMBER_1">%d</xliff:g> ilmoitusluokkaa</item>
-      <item quantity="one">Tämä sovellus: 1/<xliff:g id="NUMBER_0">%d</xliff:g> ilmoitusluokkaa</item>
+      <item quantity="other">Tämä sovellus: 1/<xliff:g id="NUMBER_1">%s</xliff:g> ilmoitusluokkaa</item>
+      <item quantity="one">Tämä sovellus: 1/<xliff:g id="NUMBER_0">%s</xliff:g> ilmoitusluokkaa</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d minuutti</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Akun käyttö"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Virransäästö ei ole käytettävissä latauksen aikana."</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Virransäästö"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Virransäästö ei ole käytettävissä latauksen aikana."</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Virransäästö"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Rajoittaa suorituskykyä ja taustatiedonsiirtoa."</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Painike <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Pienennä"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Sulje"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Hylkää vetämällä alas."</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Kuva kuvassa ‑valikko"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Valikko"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> on kuva kuvassa ‑tilassa"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Jos et halua, että <xliff:g id="NAME">%s</xliff:g> voi käyttää tätä ominaisuutta, avaa asetukset napauttamalla ja poista se käytöstä."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Jos et halua, että <xliff:g id="NAME">%s</xliff:g> voi käyttää tätä ominaisuutta, avaa asetukset napauttamalla ja poista se käytöstä."</string>
     <string name="pip_play" msgid="1417176722760265888">"Toista"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Keskeytä"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Siirry seuraavaan"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Valikko"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> sovellus"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Ilmoitukset"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Akku"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Kuvakaappaukset"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Yleiset viestit"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Tallennustila"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Sovelluksia käynnissä taustalla"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Katso lisätietoja akun ja datan käytöstä napauttamalla"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Poistetaanko mobiilidata käytöstä?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Sovellus peittää käyttöoikeuspyynnön, joten Asetukset ei voi vahvistaa valintaasi."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index e60afb6..4645eb4 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -64,14 +64,14 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Empreinte numérique de la clé RSA de l\'ordinateur : \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Toujours autoriser sur cet ordinateur"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Débogage USB non autorisé"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"L\'utilisateur actuellement connecté sur cet appareil ne peut pas activer le débogage USB. Pour utiliser cette fonctionnalité, connectez-vous à l\'aide d\'un compte d\'administrateur."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"L\'utilisateur actuellement connecté sur cet appareil ne peut pas activer le débogage USB. Pour utiliser cette fonctionnalité, l\'utilisateur principal doit se connecter."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoomer pour remplir l\'écran"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Étirer pour remplir l\'écran"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Enregistrement capture écran…"</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Enregistrement capture écran…"</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Enregistrement de la capture d\'écran en cours…"</string>
     <string name="screenshot_saved_title" msgid="6461865960961414961">"Capture d\'écran réussie"</string>
-    <string name="screenshot_saved_text" msgid="2685605830386712477">"Touchez pour afficher votre saisie d\'écran."</string>
+    <string name="screenshot_saved_text" msgid="2685605830386712477">"Touchez pour afficher votre capture d\'écran."</string>
     <string name="screenshot_failed_title" msgid="705781116746922771">"Impossible de réaliser une capture d\'écran"</string>
     <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"Une erreur s\'est produite lors de l\'enregistrement de la saisie d\'écran."</string>
     <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"Impossible d\'enregistrer la saisie d\'écran, car l\'espace de stockage est limité."</string>
@@ -269,8 +269,8 @@
     <string name="start_dreams" msgid="5640361424498338327">"Écran de veille"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne pas déranger"</string>
-    <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priorités seulement"</string>
-    <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarmes uniquement"</string>
+    <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Prioritaires seulement"</string>
+    <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alarmes seulement"</string>
     <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Aucune interruption"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> appareils)"</string>
@@ -336,7 +336,7 @@
     <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"épinglage d\'écran"</string>
     <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossible de lancer <xliff:g id="APP">%s</xliff:g>."</string>
-    <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> est désactivée en mode sécurisé."</string>
+    <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> est désactivée en mode sans échec."</string>
     <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Effacer tout"</string>
     <string name="recents_drag_hint_message" msgid="2649739267073203985">"Glissez l\'élément ici pour utiliser l\'écran partagé"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string>
@@ -352,13 +352,13 @@
     <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Chargée dans <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string>
     <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"N\'est pas en charge"</string>
     <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Le réseau peut\nêtre surveillé."</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Recherche"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Rechercher"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Faire glisser le doigt vers le haut : <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Faites glisser votre doigt vers la gauche pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Vous ne serez pas dérangé par les sons et les vibrations, sauf pour les alarmes, les rappels, les événements et les appelants. Vous entendrez tout ce que vous choisissez d\'écouter, y compris la musique, les vidéos et les jeux."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Vous ne serez pas dérangé par les sons et les vibrations, sauf pour les alarmes. Vous entendrez tout ce que vous choisissez d\'écouter, y compris la musique, les vidéos et les jeux."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Vous ne serez pas dérangé par les sons et les vibrations, sauf pour les alarmes, les rappels, les événements et les appelants que vous sélectionnez. Vous entendrez tout ce que vous choisissez d\'écouter, y compris la musique, les vidéos et les jeux."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Vous ne serez pas dérangé par les sons et les vibrations, sauf pour les alarmes. Vous entendrez tout ce que vous choisissez d\'écouter, y compris la musique, les vidéos et les jeux."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personnaliser"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Cette option permet de bloquer TOUS les sons et vibrations, y compris pour les alarmes, la musique, les vidéos et les jeux. Vous pourrez quand même faire des appels téléphoniques."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Cette option permet de bloquer TOUS les sons et vibrations, y compris pour les alarmes, la musique, les vidéos et les jeux. Vous pourrez quand même faire des appels téléphoniques."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Cette option permet de bloquer TOUS les sons et vibrations, y compris pour les alarmes, la musique, les vidéos et les jeux."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notifications moins urgentes affichées ci-dessous"</string>
@@ -372,7 +372,7 @@
     <string name="interruption_level_none_with_warning" msgid="5114872171614161084">"Aucune interruption : le son des lecteurs d\'écran sera également désactivé."</string>
     <string name="interruption_level_none" msgid="6000083681244492992">"Aucune interruption"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Priorités seulement"</string>
-    <string name="interruption_level_alarms" msgid="5226306993448328896">"Alarmes uniquement"</string>
+    <string name="interruption_level_alarms" msgid="5226306993448328896">"Alarmes seulement"</string>
     <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Aucune\ninterruption"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priorités\nuniquement"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarmes\nuniquement"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"En savoir plus"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Vous êtes connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>, qui peut contrôler votre activité réseau, y compris les courriels, les applications et les sites Web."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Paramètres RPV ouverts"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Ouvrir les paramètres RPV"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Ouvrir les authentifiants de confiance"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Votre administrateur a activé la journalisation réseau, qui surveille le trafic sur votre appareil.\n\nPour en savoir plus, communiquez avec lui."</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Cette application n\'a pas de catégories de notification"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Les notifications de cette application ne peuvent pas être désactivées"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 catégorie de notification sur <xliff:g id="NUMBER_1">%d</xliff:g> provenant de cette application</item>
-      <item quantity="other">1 catégorie de notification sur <xliff:g id="NUMBER_1">%d</xliff:g> provenant de cette application</item>
+      <item quantity="one">1 catégorie de notification sur <xliff:g id="NUMBER_1">%s</xliff:g> provenant de cette application</item>
+      <item quantity="other">1 catégorie de notification sur <xliff:g id="NUMBER_1">%s</xliff:g> provenant de cette application</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="other">%d minutes</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Utilisation de la pile"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Le mode Économie d\'énergie n\'est pas accessible pendant la charge"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Économie d\'énergie"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Le mode Économie d\'énergie n\'est pas accessible pendant la recharge"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Économie d\'énergie"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Réduit les performances et les données en arrière-plan"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Bouton <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Accueil"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Réduire"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Fermer"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Faire glisser vers le bas pour ignorer"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menu d\'incrustation d\'image"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> est en mode d\'incrustation d\'image"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Si vous ne voulez pas que <xliff:g id="NAME">%s</xliff:g> utilise cette fonctionnalité, touchez l\'écran pour ouvrir les paramètres, puis désactivez-la."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Si vous ne voulez pas que <xliff:g id="NAME">%s</xliff:g> utilise cette fonctionnalité, touchez l\'écran pour ouvrir les paramètres, puis désactivez-la."</string>
     <string name="pip_play" msgid="1417176722760265888">"Lire"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Interrompre"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Passer au suivant"</string>
@@ -756,6 +756,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Application <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alertes"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Pile"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Saisies d\'écran"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Messages généraux"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Stockage"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Applications qui fonctionnent en arrière-plan"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Touchez pour afficher des détails sur l\'utilisation de la pile et des données"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Désactiver les données cellulaires?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Une application obscurcit une demande d\'autorisation, alors Paramètres ne peut pas vérifier votre réponse."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 1f61c09..e14f8be 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Empreinte numérique de la clé RSA de l\'ordinateur : \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Toujours autoriser sur cet ordinateur"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Débogage USB non autorisé"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"L\'utilisateur actuellement connecté à son compte sur cet appareil ne peut pas activer le débogage USB. Pour utiliser cette fonctionnalité, un administrateur doit se connecter."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"L\'utilisateur actuellement connecté sur cet appareil ne peut pas activer le débogage USB. Pour utiliser cette fonctionnalité, l\'utilisateur principal doit se connecter."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoomer pour remplir l\'écran"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Étirer pour remplir l\'écran"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Enregistrement capture écran…"</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Rechercher"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Faites glisser vers le haut pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Faites glisser vers la gauche pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Vous ne serez pas dérangé par des sons ou des vibrations, hormis ceux des alarmes, des rappels, des événements et des appelants de votre choix. Vous entendrez toujours les sons que vous choisirez de jouer, notamment la musique, les vidéos et les jeux."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Vous ne serez pas dérangé par des sons ou des vibrations, hormis ceux des alarmes. Vous entendrez toujours les sons que vous choisirez de jouer, notamment la musique, les vidéos et les jeux."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Vous ne serez dérangé par aucun son ni aucune vibration, hormis ceux des alarmes, des rappels, des événements et des appels des contacts de votre choix. Le son continuera de fonctionner notamment pour la musique, les vidéos et les jeux."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Vous ne serez dérangé par aucun son ni aucune vibration, hormis ceux des alarmes. Le son continuera de fonctionner notamment pour la musique, les vidéos et les jeux."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personnaliser"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Cette option permet de bloquer TOUS les sons et les vibrations, y compris pour les alarmes, la musique, les vidéos et les jeux. Vous pourrez toujours passer des appels téléphoniques."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Cette option permet de bloquer TOUS les sons et les vibrations, y compris pour les alarmes, la musique, les vidéos et les jeux. Vous pourrez encore passer des appels téléphoniques."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Cette option permet de bloquer TOUS les sons et les vibrations, y compris pour les alarmes, la musique, les vidéos et les jeux."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notifications moins urgentes ci-dessous"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"En savoir plus"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Vous êtes connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>, qui peut contrôler votre activité sur le réseau, y compris les e-mails, les applications et les sites Web."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Ouvrir les paramètres VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Ouvrir les paramètres VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Ouvrir les certificats de confiance"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Votre administrateur a activé la journalisation réseau, qui surveille le trafic sur votre appareil.\n\nPour en savoir plus, contactez-le."</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Cette application n\'a pas de catégories de notification"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Impossible de désactiver les notifications de cette application"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 catégorie de notification sur <xliff:g id="NUMBER_1">%d</xliff:g> provenant de cette application</item>
-      <item quantity="other">1 catégorie de notification sur <xliff:g id="NUMBER_1">%d</xliff:g> provenant de cette application</item>
+      <item quantity="one">1 catégorie de notification sur <xliff:g id="NUMBER_1">%s</xliff:g> provenant de cette application</item>
+      <item quantity="other">1 catégorie de notification sur <xliff:g id="NUMBER_1">%s</xliff:g> provenant de cette application</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="other">%d minutes</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Utilisation batterie"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"L\'économiseur de batterie n\'est pas disponible lorsque l\'appareil est en charge."</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Économiseur de batterie"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"L\'économiseur de batterie n\'est pas disponible lorsque l\'appareil est en charge"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Économiseur de batterie"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Limite les performances et les données en arrière-plan."</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Bouton <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Accueil"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Réduire"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Fermer"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Faire glisser vers le bas pour ignorer"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menu Picture-in-picture"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> est en mode Picture-in-picture"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Si vous ne voulez pas que l\'application <xliff:g id="NAME">%s</xliff:g> utilise cette fonctionnalité, appuyez ici pour ouvrir les paramètres et la désactiver."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Si vous ne voulez pas que l\'application <xliff:g id="NAME">%s</xliff:g> utilise cette fonctionnalité, appuyez ici pour ouvrir les paramètres et la désactiver."</string>
     <string name="pip_play" msgid="1417176722760265888">"Lecture"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Suspendre"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Passer au contenu suivant"</string>
@@ -756,6 +756,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Application <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alertes"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Batterie"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Captures d\'écran"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Nouveaux messages"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Espace de stockage"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Applications en cours d\'exécution en arrière-plan"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Appuyer pour obtenir des informations sur l\'utilisation de la batterie et des données"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Désactiver les données mobiles ?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"L\'application Paramètres ne peut pas valider votre réponse, car une application masque la demande d\'autorisation."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index c7f13bb..6eea61e 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -43,7 +43,7 @@
     <string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Activar"</string>
     <string name="battery_saver_start_action" msgid="5576697451677486320">"Activar o aforro de batería"</string>
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Configuración"</string>
-    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wifi"</string>
     <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Xirar pantalla automaticamente"</string>
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"APAGAR"</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"A impresión dixital da clave de RSA do ordenador é:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Permitir sempre desde este ordenador"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Non se permite a depuración por USB"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"O usuario coa sesión iniciada actualmente neste dispositivo non pode activar a depuración por USB. Para usar esta función, cambia a un usuario administrador."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"O usuario coa sesión iniciada actualmente neste dispositivo non pode activar a depuración por USB. Para utilizar esta función, cambia ao usuario principal."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Ampliar ata ocupar todo"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Estirar ata ocupar todo"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Gardando captura de pantalla…"</string>
@@ -252,7 +252,7 @@
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Localización establecida polo GPS"</string>
     <string name="accessibility_location_active" msgid="2427290146138169014">"Solicitudes de localización activas"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Eliminar todas as notificacións."</string>
-    <string name="notification_group_overflow_indicator" msgid="1863231301642314183">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
+    <string name="notification_group_overflow_indicator" msgid="1863231301642314183">"<xliff:g id="NUMBER">%s</xliff:g> máis"</string>
     <plurals name="notification_group_overflow_description" formatted="false" msgid="4579313201268495404">
       <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> notificacións máis no grupo.</item>
       <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> notificación máis no grupo.</item>
@@ -283,12 +283,12 @@
     <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotación bloqueada"</string>
     <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Vertical"</string>
     <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Horizontal"</string>
-    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Método de entrada"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Método de introdución de texto"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Localización"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Localización desactivada"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Dispositivo multimedia"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
-    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Só chamadas de emerxencia"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Só chamadas de urxencia"</string>
     <string name="quick_settings_settings_label" msgid="5326556592578065401">"Configuración"</string>
     <string name="quick_settings_time_label" msgid="4635969182239736408">"Hora"</string>
     <string name="quick_settings_user_label" msgid="5238995632130897840">"Eu"</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Pasa o dedo cara arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Pasa o dedo cara a esquerda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Non te molestará ningún son nin vibración, agás os procedentes de alarmas, recordatorios, eventos e os emisores de chamada especificados. Seguirás escoitando todo aquilo que decidas reproducir, mesmo a música, os vídeos e os xogos."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Non te molestará ningún son nin vibración, agás os procedentes de alarmas. Seguirás escoitando todo aquilo que decidas reproducir, mesmo a música, os vídeos e os xogos."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Non te molestará ningún son nin vibración, agás os procedentes de alarmas, recordatorios, eventos e os emisores de chamada especificados. Seguirás escoitando todo aquilo que decidas reproducir, mesmo a música, os vídeos e os xogos."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Non te molestará ningún son nin vibración, agás os procedentes de alarmas. Seguirás escoitando todo aquilo que decidas reproducir, mesmo a música, os vídeos e os xogos."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizar"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Esta acción bloquea TODOS os sons e vibracións, incluídos os das alarmas, música, vídeos e xogos. Aínda podes facer chamadas de teléfono."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Esta acción bloquea TODOS os sons e vibracións, mesmo os das alarmas, música, vídeos e xogos. Podes seguir facendo chamadas de teléfono."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Esta acción bloquea TODOS os sons e vibracións, incluídos os das alarmas, música, vídeos e xogos."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificacións menos urxentes abaixo"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Máis información"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Estás conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode controlar a túa actividade na rede, mesmo os correos electrónicos, as aplicacións e os sitios web."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir configuración da VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Abrir configuración da VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Abrir credenciais de confianza"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"O administrador activou o rexistro na rede, que controla o tráfico do teu dispositivo.\n\nPara obter máis información, contacta co administrador."</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Esta aplicación non ten categorías de notificacións"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Non se poden desactivar as notificacións desta aplicación"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 de <xliff:g id="NUMBER_1">%d</xliff:g> categorías de notificacións desta aplicación</item>
-      <item quantity="one">1 de <xliff:g id="NUMBER_0">%d</xliff:g> categoría de notificación desta aplicación</item>
+      <item quantity="other">1 de <xliff:g id="NUMBER_1">%s</xliff:g> categorías de notificacións desta aplicación</item>
+      <item quantity="one">1 de <xliff:g id="NUMBER_0">%s</xliff:g> categoría de notificación desta aplicación</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="one">%d minuto</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Uso de batería"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"A función de aforro da batería non está dispoñible durante a carga"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Aforro de batería"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"A función Aforro de batería non está dispoñible durante a carga"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Aforro de batería"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduce o rendemento e os datos en segundo plano"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Botón <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Inicio"</string>
@@ -622,7 +622,7 @@
     <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Volver"</string>
     <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"Notificacións"</string>
     <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"Atallos de teclado"</string>
-    <string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"Cambiar de método de entrada"</string>
+    <string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"Cambiar de método de introdución"</string>
     <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"Aplicacións"</string>
     <string name="keyboard_shortcut_group_applications_assist" msgid="9095441910537146013">"Asistente"</string>
     <string name="keyboard_shortcut_group_applications_browser" msgid="6465985474000766533">"Navegador"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizar"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Pechar"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Arrastra cara abaixo para ignorar"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menú de pantalla superposta"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menú"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> está na pantalla superposta"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Se non queres que <xliff:g id="NAME">%s</xliff:g> utilice esta función, toca para abrir a configuración e desactivala."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Se non queres que <xliff:g id="NAME">%s</xliff:g> utilice esta función, toca a configuración para abrir as opcións e desactivar a función."</string>
     <string name="pip_play" msgid="1417176722760265888">"Reproducir"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pausar"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Ir ao seguinte"</string>
@@ -756,12 +756,13 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menú"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplicación <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alertas"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Batería"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Capturas de pantalla"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Mensaxes xerais"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Almacenamento"</string>
     <string name="instant_apps" msgid="6647570248119804907">"Aplicacións instantáneas"</string>
     <string name="instant_apps_message" msgid="8116608994995104836">"As aplicacións instantáneas non precisan instalación."</string>
-    <string name="app_info" msgid="6856026610594615344">"Información de aplicacións"</string>
+    <string name="app_info" msgid="6856026610594615344">"Info. da aplicación"</string>
     <string name="go_to_web" msgid="1106022723459948514">"Acceder á web"</string>
     <string name="mobile_data" msgid="7094582042819250762">"Datos móbiles"</string>
     <string name="wifi_is_off" msgid="1838559392210456893">"A wifi está desactivada"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplicacións que se executan en segundo plano"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Toca para obter información sobre o uso de datos e a batería"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Queres desactivar os datos móbiles?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Dado que unha aplicación se superpón sobre unha solicitude de permiso, a configuración non pode verificar a túa resposta."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index cc6afe8..c04da24 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -31,7 +31,7 @@
     </plurals>
     <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"કોઈ સૂચનાઓ નથી"</string>
     <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ચાલુ"</string>
-    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"સૂચનાઓ"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"નોટિફિકેશનો"</string>
     <string name="battery_low_title" msgid="6456385927409742437">"બૅટરી ઓછી છે"</string>
     <string name="battery_low_percent_format" msgid="2900940511201380775">"<xliff:g id="PERCENTAGE">%s</xliff:g> બાકી"</string>
     <string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"<xliff:g id="PERCENTAGE">%s</xliff:g> બાકી. બૅટરી સેવર ચાલુ છે."</string>
@@ -43,12 +43,12 @@
     <string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"ચાલુ કરો"</string>
     <string name="battery_saver_start_action" msgid="5576697451677486320">"બૅટરી સેવર ચાલુ કરો"</string>
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"સેટિંગ્સ"</string>
-    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"વાઇ-ફાઇ"</string>
     <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"સ્ક્રીનને આપમેળે ફેરવો"</string>
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"મ્યૂટ કરો"</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"સ્વતઃ"</string>
-    <string name="status_bar_settings_notifications" msgid="397146176280905137">"સૂચનાઓ"</string>
-    <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth ટિથર કર્યું"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"નોટિફિકેશનો"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"બ્લૂટૂથ ટિથર કર્યું"</string>
     <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ઇનપુટ પદ્ધતિઓ સેટ કરો"</string>
     <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"ભૌતિક કીબોર્ડ"</string>
     <string name="usb_device_permission_prompt" msgid="834698001271562057">"<xliff:g id="APPLICATION">%1$s</xliff:g> એપ્લિકેશનને USB ઉપકરણ અ‍ૅક્સેસ કરવાની મંજૂરી આપીએ?"</string>
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"કમ્પ્યુટરની RSA મુખ્ય ફિંગરપ્રિંટ આ છે:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"હંમેશા આ કમ્પ્યુટરથી મંજૂરી આપો"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB ડીબગિંગની મંજૂરી નથી"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"આ ઉપકરણમાં હાલમાં સાઇન ઇન થયેલ વપરાશકર્તા USB ડીબગિંગ ચાલુ કરી શકતાં નથી. આ સુવિધાનો ઉપયોગ કરવા માટે, એડમિન વપરાશકર્તા પર સ્વિચ કરો."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"હાલમાં આ ઉપકરણમાં સાઇન ઇન થયેલ વપરાશકર્તા USB ડિબગીંગ ચાલુ કરી શકતા નથી. આ સુવિધાનો ઉપયોગ કરવા માટે પ્રાથમિક વપરાશકર્તા પર સ્વિચ કરો."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"સ્ક્રીન ભરવા માટે ઝૂમ કરો"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"સ્ક્રીન ભરવા માટે ખેંચો"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"સ્ક્રીનશોટ સાચવી રહ્યું છે…"</string>
@@ -100,7 +100,7 @@
     <string name="cancel" msgid="6442560571259935130">"રદ કરો"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"સુસંગતતા ઝૂમ બટન."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"નાનીથી મોટી સ્ક્રીન પર ઝૂમ કરો."</string>
-    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth કનેક્ટ થયું."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"બ્લૂટૂથ કનેક્ટ થયું."</string>
     <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"બ્લૂટૂથ ડિસ્કનેક્ટ થયું."</string>
     <string name="accessibility_no_battery" msgid="358343022352820946">"બૅટરી નથી."</string>
     <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"બૅટરી એક બાર."</string>
@@ -150,12 +150,12 @@
     <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
     <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"રોમિંગ"</string>
     <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
-    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
-    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM નથી."</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"વાઇ-ફાઇ"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"સિમ નથી."</string>
     <string name="accessibility_cell_data" msgid="5326139158682385073">"મોબાઇલ ડેટા"</string>
     <string name="accessibility_cell_data_on" msgid="5927098403452994422">"મોબાઇલ ડેટા ચાલુ છે"</string>
     <string name="accessibility_cell_data_off" msgid="443267573897409704">"મોબાઇલ ડેટા બંધ છે"</string>
-    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth ટિથરિંગ."</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"બ્લૂટૂથ ટિથરિંગ."</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"એરપ્લેન મોડ."</string>
     <string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ચાલુ છે."</string>
     <string name="accessibility_no_sims" msgid="3957997018324995781">"કોઈ સિમ કાર્ડ નથી."</string>
@@ -164,7 +164,7 @@
     <string name="accessibility_battery_level" msgid="7451474187113371965">"બૅટરી <xliff:g id="NUMBER">%d</xliff:g> ટકા."</string>
     <string name="accessibility_battery_level_charging" msgid="1147587904439319646">"બૅટરી ચાર્જ થઈ રહી છે, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> ટકા."</string>
     <string name="accessibility_settings_button" msgid="799583911231893380">"સિસ્ટમ સેટિંગ્સ."</string>
-    <string name="accessibility_notifications_button" msgid="4498000369779421892">"સૂચનાઓ."</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"નોટિફિકેશનો."</string>
     <string name="accessibility_overflow_action" msgid="5681882033274783311">"બધી સૂચના જુઓ"</string>
     <string name="accessibility_remove_notification" msgid="3603099514902182350">"સૂચના સાફ કરો."</string>
     <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS સક્ષમ."</string>
@@ -205,13 +205,13 @@
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"ખલેલ પાડશો નહીં બંધ."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"ખલેલ પાડશો નહીં બંધ કર્યું."</string>
     <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"ખલેલ પાડશો નહીં ચાલુ કર્યું."</string>
-    <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"Bluetooth."</string>
-    <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth બંધ."</string>
-    <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth ચાલુ."</string>
-    <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth કનેક્ટ કરી રહ્યું છે."</string>
-    <string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"Bluetooth કનેક્ટ થયું."</string>
-    <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="2730003763480934529">"Bluetooth બંધ કરી."</string>
-    <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="8722351798763206577">"Bluetooth ચાલુ કર્યું."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"બ્લૂટૂથ."</string>
+    <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"બ્લૂટૂથ બંધ."</string>
+    <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"બ્લૂટૂથ ચાલુ."</string>
+    <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"બ્લૂટૂથ કનેક્ટ કરી રહ્યું છે."</string>
+    <string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"બ્લૂટૂથ કનેક્ટ થયું."</string>
+    <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="2730003763480934529">"બ્લૂટૂથ બંધ કરી."</string>
+    <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="8722351798763206577">"બ્લૂટૂથ ચાલુ કર્યું."</string>
     <string name="accessibility_quick_settings_location_off" msgid="5119080556976115520">"સ્થાનની જાણ કરવી બંધ."</string>
     <string name="accessibility_quick_settings_location_on" msgid="5809937096590102036">"સ્થાનની જાણ કરવી ચાલુ."</string>
     <string name="accessibility_quick_settings_location_changed_off" msgid="8526845571503387376">"સ્થાનની જાણ કરવી બંધ કર્યું."</string>
@@ -242,10 +242,10 @@
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ડેટા થોભાવ્યો છે"</string>
     <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"મોબાઇલ ડેટા થોભાવ્યો છે"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ડેટા થોભાવ્યો છે"</string>
-    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"તમે સેટ કરેલી ડેટા મર્યાદા પહોંચી ગઇ છે. તમે હવે મોબાઇલ ડેટાનો ઉપયોગ નથી કરી રહ્યાં.\n\nજો હવે તમે ફરી શરૂ કરો, તો ડેટા વપરાશ માટે શુલ્ક લાગુ થઇ શકે છે."</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"તમારા દ્વારા સેટ કરેલ ડેટા મર્યાદા પર તમે પહોંચી ગયાં છો. તમે હવે મોબાઇલ ડેટાનો ઉપયોગ કરી રહ્યાં નથી.\n\nજો તમે ફરી શરૂ કરો છો, તો ડેટા વપરાશ માટે શુલ્ક લાગુ થઈ શકે છે."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ફરી શરૂ કરો"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"કોઈ ઇન્ટરનેટ કનેક્શન નથી"</string>
-    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi કનેક્ટ કર્યું"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"વાઇ-ફાઇ કનેક્ટ કર્યું"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS માટે શોધી રહ્યાં છે"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS દ્વારા સ્થાન સેટ કરાયું"</string>
     <string name="accessibility_location_active" msgid="2427290146138169014">"સ્થાન વિનંતીઓ સક્રિય"</string>
@@ -270,9 +270,9 @@
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ફક્ત પ્રાધાન્યતા"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"ફક્ત એલાર્મ્સ"</string>
     <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"સાવ શાંતિ"</string>
-    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
-    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> ઉપકરણો)"</string>
-    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth બંધ"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"બ્લૂટૂથ"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"બ્લૂટૂથ (<xliff:g id="NUMBER">%d</xliff:g> ઉપકરણો)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"બ્લૂટૂથ બંધ"</string>
     <string name="quick_settings_bluetooth_detail_empty_text" msgid="4910015762433302860">"કોઈ જોડી કરેલ ઉપકરણો ઉપલબ્ધ નથી"</string>
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"તેજ"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"આપમેળે ફેરવો"</string>
@@ -292,12 +292,12 @@
     <string name="quick_settings_user_label" msgid="5238995632130897840">"હું"</string>
     <string name="quick_settings_user_title" msgid="4467690427642392403">"વપરાશકર્તા"</string>
     <string name="quick_settings_user_new_user" msgid="9030521362023479778">"નવો વપરાશકર્તા"</string>
-    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"વાઇ-ફાઇ"</string>
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"કનેક્ટ થયેલ નથી"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"કોઈ નેટવર્ક નથી"</string>
-    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi બંધ"</string>
-    <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi ચાલુ"</string>
-    <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"કોઈ Wi-Fi નેટવર્ક્સ ઉપલબ્ધ નથી"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"વાઇ-ફાઇ બંધ"</string>
+    <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"વાઇ-ફાઇ ચાલુ"</string>
+    <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"કોઈ વાઇ-ફાઇ નેટવર્ક્સ ઉપલબ્ધ નથી"</string>
     <string name="quick_settings_cast_title" msgid="7709016546426454729">"કાસ્ટ કરો"</string>
     <string name="quick_settings_casting" msgid="6601710681033353316">"કાસ્ટ કરી રહ્યાં છે"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"અનામાંકિત ઉપકરણ"</string>
@@ -314,7 +314,7 @@
     <string name="quick_settings_connecting" msgid="47623027419264404">"કનેક્ટ કરી રહ્યું છે..."</string>
     <string name="quick_settings_tethering_label" msgid="7153452060448575549">"ટિથરિંગ"</string>
     <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"હૉટસ્પૉટ"</string>
-    <string name="quick_settings_notifications_label" msgid="4818156442169154523">"સૂચનાઓ"</string>
+    <string name="quick_settings_notifications_label" msgid="4818156442169154523">"નોટિફિકેશનો"</string>
     <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ફ્લેશલાઇટ"</string>
     <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"મોબાઇલ ડેટા"</string>
     <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"ડેટા વપરાશ"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"શોધો"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> માટે ઉપર સ્લાઇડ કરો."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> માટે ડાબે સ્લાઇડ કરો."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"તમને ધ્વનિ કે વાઇબ્રેશનો દ્વારા ખલેલ પહોંચાડવામાં આવશે નહીં, સિવાય કે અલાર્મ, સ્મૃતિપત્રો, ઇવેન્ટ અને તમે ઉલ્લેખ કરો તે કૉલર. તમે સંગીત, વીડિયો અને રમતો સહિત તમે જે કંઈપણ ચલાવવાનું પસંદ કરો તે હજુ પણ સંભળાશે."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"તમને ધ્વનિ કે વાઇબ્રેશનો દ્વારા ખલેલ પહોંચાડવામાં આવશે નહીં, સિવાય કે અલાર્મ. તમે સંગીત, વીડિયો અને રમતો સહિત તમે જે કંઈપણ ચલાવવાનું પસંદ કરો તે હજુ પણ સંભળાશે."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"અલાર્મ, રિમાઇન્ડર, ઇવેન્ટ અને તમે ઉલ્લેખ કરો તે કૉલર સિવાય તમને ધ્વનિ કે વાઇબ્રેશન દ્વારા ખલેલ પહોંચાડવામાં આવશે નહીં. સંગીત, વીડિઓ અને રમતો સહિત તમે જે કંઈપણ ચલાવવાનું પસંદ કરશો તે સંભળાતું રહેશે."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"અલાર્મ સિવાય તમને ધ્વનિ કે વાઇબ્રેશન દ્વારા ખલેલ પહોંચાડવામાં આવશે નહીં. સંગીત, વીડિઓ અને રમતો સહિત તમે જે કંઈપણ ચલાવવાનું પસંદ કરશો તે સંભળાતું રહેશે."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"કસ્ટમાઇઝ કરો"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"આ એલાર્મ્સ, સંગીત, વિડિઓઝ અને રમતો સહિત તમામ ધ્વનિઓ અને વાઇબ્રેશન્સને અવરોધિત કરે છે.  તમે હજુ પણ ફોન કૉલ્સ કરવા માટે સમર્થ હશો."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"આ અલાર્મ, સંગીત, વીડિઓ અને રમતો સહિત બધા ધ્વનિ કે વાઇબ્રેશનને અવરોધિત કરે છે. ફોન કૉલ કરવા માટે તમે હજી પણ સમર્થ રહેશો."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"એલાર્મ્સ, સંગીત, વિડિઓઝ અને રમતો સહિત તમામ ધ્વનિઓ અને વાઇબ્રેશન્સને આ અવરોધિત કરે છે."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"નીચે ઓછી તાકીદની સૂચનાઓ"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"વધુ જાણો"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"તમે <xliff:g id="VPN_APP">%1$s</xliff:g> સાથે કનેક્ટ થયાં છો, જે ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિત તમારી નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN સેટિંગ્સ ખોલો"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPNની સેટિંગ્સ ખોલો"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"વિશ્વસનીય ઓળખપત્ર ખોલો"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"તમારા વ્યવસ્થાપકે નેટવર્ક લૉગિંગ ચાલુ કર્યુ છે, જે તમારા ઉપકરણ પર ટ્રાફિકનું નિરીક્ષણ કરે છે.\n\nવધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો."</string>
@@ -473,7 +473,7 @@
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"તમે ઉપકરણને મેન્યુઅલી અનલૉક કરશો નહીં ત્યાં સુધી તે લૉક રહેશે"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"વધુ ઝડપથી સૂચનાઓ મેળવો"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"તમે અનલૉક કરો તે પહેલાં તેમને જુઓ"</string>
-    <string name="hidden_notifications_cancel" msgid="3690709735122344913">"નહીં આભાર"</string>
+    <string name="hidden_notifications_cancel" msgid="3690709735122344913">"ના, આભાર"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"સેટ અપ"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
     <string name="volume_zen_end_now" msgid="6930243045593601084">"હમણાં બંધ કરો"</string>
@@ -483,7 +483,7 @@
     <string name="screen_pinning_description" msgid="8909878447196419623">"તમે જ્યાં સુધી અનપિન કરશો નહીં ત્યાં સુધી આ તેને દૃશ્યક્ષમ રાખે છે. અનપિન કરવા માટે પાછળ અને ઝલકને સ્પર્શ કરી રાખો."</string>
     <string name="screen_pinning_description_accessible" msgid="426190689254018656">"તમે જ્યાં સુધી અનપિન કરશો નહીં ત્યાં સુધી આ તેને દૃશ્યક્ષમ રાખે છે. અનપિન કરવા માટે ઝલકને સ્પર્શ કરી રાખો."</string>
     <string name="screen_pinning_positive" msgid="3783985798366751226">"સમજાઈ ગયું"</string>
-    <string name="screen_pinning_negative" msgid="3741602308343880268">"નહીં આભાર"</string>
+    <string name="screen_pinning_negative" msgid="3741602308343880268">"ના, આભાર"</string>
     <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> ને છુપાવીએ?"</string>
     <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"તે સેટિંગ્સમાં તમે તેને ચાલુ કરશો ત્યારે આગલી વખતે ફરીથી દેખાશે."</string>
     <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"છુપાવો"</string>
@@ -493,8 +493,8 @@
     <string name="stream_ring" msgid="8213049469184048338">"રિંગ વગાડો"</string>
     <string name="stream_music" msgid="9086982948697544342">"મીડિયા"</string>
     <string name="stream_alarm" msgid="5209444229227197703">"એલાર્મ"</string>
-    <string name="stream_notification" msgid="2563720670905665031">"સૂચના"</string>
-    <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
+    <string name="stream_notification" msgid="2563720670905665031">"નોટિફિકેશન"</string>
+    <string name="stream_bluetooth_sco" msgid="2055645746402746292">"બ્લૂટૂથ"</string>
     <string name="stream_dtmf" msgid="2447177903892477915">"દ્વિ બહુ ટોન આવર્તન"</string>
     <string name="stream_accessibility" msgid="301136219144385106">"ઍક્સેસિબિલિટી"</string>
     <string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. અનમ્યૂટ કરવા માટે ટૅપ કરો."</string>
@@ -539,8 +539,8 @@
     <string name="qs_rearrange" msgid="8060918697551068765">"ઝડપી સેટિંગ્સને ફરીથી ગોઠવો"</string>
     <string name="show_brightness" msgid="6613930842805942519">"ઝડપી સેટિંગ્સમાં તેજ બતાવો"</string>
     <string name="experimental" msgid="6198182315536726162">"પ્રાયોગિક"</string>
-    <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth ચાલુ કરવુ છે?"</string>
-    <string name="enable_bluetooth_message" msgid="9106595990708985385">"તમારા ટેબ્લેટ સાથે કીબોર્ડ કનેક્ટ કરવા માટે, તમારે પહેલાં Bluetooth ચાલુ કરવાની જરૂર પડશે."</string>
+    <string name="enable_bluetooth_title" msgid="5027037706500635269">"બ્લૂટૂથ ચાલુ કરવુ છે?"</string>
+    <string name="enable_bluetooth_message" msgid="9106595990708985385">"તમારા ટેબ્લેટ સાથે કીબોર્ડ કનેક્ટ કરવા માટે, તમારે પહેલાં બ્લૂટૂથ ચાલુ કરવાની જરૂર પડશે."</string>
     <string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"ચાલુ કરો"</string>
     <string name="show_silently" msgid="6841966539811264192">"સૂચનાઓ ચુપચાપ બતાવો"</string>
     <string name="block" msgid="2734508760962682611">"તમામ સૂચનાઓને બ્લૉક કરો"</string>
@@ -550,14 +550,14 @@
     <string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"ચાલુ"</string>
     <string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"બંધ"</string>
     <string name="power_notification_controls_description" msgid="4372459941671353358">"પાવર સૂચના નિયંત્રણો સાથે, તમે ઍપની સૂચનાઓ માટે 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="7506845022070889909">"સૂચનાઓ"</string>
+    <string name="notification_header_default_channel" msgid="7506845022070889909">"નોટિફિકેશનો"</string>
     <string name="notification_channel_disabled" msgid="2139193533791840539">"તમને હવે આ સૂચનાઓ મળશે નહીં"</string>
     <string name="notification_num_channels" msgid="2048144408999179471">"<xliff:g id="NUMBER">%d</xliff:g> સૂચના કૅટેગરીઓ"</string>
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"આ ઍપ્લિકેશનમાં સૂચના કૅટેગરી નથી"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"આ ઍપ્લિકેશનની સૂચનાઓ બંધ કરી શકાતી નથી"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">આ ઍપ્લિકેશનમાંની <xliff:g id="NUMBER_1">%d</xliff:g> સૂચના કૅટેગરીમાંથી 1</item>
-      <item quantity="other">આ ઍપ્લિકેશનમાંની <xliff:g id="NUMBER_1">%d</xliff:g> સૂચના કૅટેગરીમાંથી 1</item>
+      <item quantity="one">આ ઍપ્લિકેશનમાંની <xliff:g id="NUMBER_1">%s</xliff:g> સૂચના કૅટેગરીમાંથી 1</item>
+      <item quantity="other">આ ઍપ્લિકેશનમાંની <xliff:g id="NUMBER_1">%s</xliff:g> સૂચના કૅટેગરીમાંથી 1</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="other">%d મિનિટ</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"બૅટરી વપરાશ"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ચાર્જિંગ દરમિયાન બૅટરી સેવર ઉપલબ્ધ નથી"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"બૅટરી સેવર"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"ચાર્જિંગ દરમિયાન બૅટરી સેવર ઉપલબ્ધ હોતું નથી"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"બૅટરી સેવર"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"પ્રદર્શન અને બૅકગ્રાઉન્ડ ડેટા ઘટાડે છે"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"બટન <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -618,7 +618,7 @@
     <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"હોમ"</string>
     <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"તાજેતરના"</string>
     <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"પાછળ"</string>
-    <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"સૂચનાઓ"</string>
+    <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"નોટિફિકેશનો"</string>
     <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"કીબોર્ડ શૉર્ટકટ્સ"</string>
     <string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"ઇનપુટ પદ્ધતિ સ્વિચ કરો"</string>
     <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"ઍપ્લિકેશનો"</string>
@@ -676,7 +676,7 @@
     <string name="qs_edit" msgid="2232596095725105230">"સંપાદિત કરો"</string>
     <string name="tuner_time" msgid="6572217313285536011">"સમય"</string>
   <string-array name="clock_options">
-    <item msgid="5965318737560463480">"કલાક, મિનિટ અને સેકંડ બતાવો"</item>
+    <item msgid="5965318737560463480">"કલાક, મિનિટ અને સેકન્ડ બતાવો"</item>
     <item msgid="1427801730816895300">"કલાક અને મિનિટ બતાવો (ડિફોલ્ટ)"</item>
     <item msgid="3830170141562534721">"આ આઇકન બતાવશો નહીં"</item>
   </string-array>
@@ -706,7 +706,7 @@
     <string name="accessibility_qs_edit_tile_removed" msgid="8584304916627913440">"<xliff:g id="TILE_NAME">%1$s</xliff:g> દૂર કરવામાં આવ્યું છે"</string>
     <string name="accessibility_qs_edit_tile_moved" msgid="4343693412689365038">"<xliff:g id="TILE_NAME">%1$s</xliff:g> ને <xliff:g id="POSITION">%2$d</xliff:g> સ્થિતિ પર ખસેડ્યું"</string>
     <string name="accessibility_desc_quick_settings_edit" msgid="8073587401747016103">"ઝડપી સેટિંગ્સ સંપાદક."</string>
-    <string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> સૂચના: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
+    <string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> નોટિફિકેશન: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
     <string name="dock_forced_resizable" msgid="5914261505436217520">"વિભાજિત-સ્ક્રીન સાથે ઍપ્લિકેશન કદાચ કામ ન કરે."</string>
     <string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"ઍપ્લિકેશન સ્ક્રીન-વિભાજનનું સમર્થન કરતી નથી."</string>
     <string name="forced_resizable_secondary_display" msgid="4230857851756391925">"ઍપ્લિકેશન ગૌણ ડિસ્પ્લે પર કદાચ કામ ન કરે."</string>
@@ -726,16 +726,16 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"નાનું કરો"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"બંધ કરો"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"છોડી દેવા માટે નીચે ખેંચો"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"ચિત્રમાં ચિત્ર મેનૂ"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"મેનૂ"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ચિત્રમાં-ચિત્રની અંદર છે"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"જો તમે નથી ઇચ્છતા કે <xliff:g id="NAME">%s</xliff:g> આ સુવિધાનો ઉપયોગ કરે, તો સેટિંગ્સ ખોલવા માટે ટૅપ કરો અને તેને બંધ કરો."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"જો તમે નથી ઈચ્છતા કે <xliff:g id="NAME">%s</xliff:g> આ સુવિધાનો ઉપયોગ કરે, તો સેટિંગ્સ ખોલવા માટે ટૅપ કરો અને તે સુવિધાને બંધ કરો."</string>
     <string name="pip_play" msgid="1417176722760265888">"ચલાવો"</string>
     <string name="pip_pause" msgid="8881063404466476571">"થોભાવો"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"આગલા પર જાઓ"</string>
     <string name="pip_skip_to_prev" msgid="1955311326688637914">"પહેલાંના પર જાઓ"</string>
     <string name="thermal_shutdown_title" msgid="4458304833443861111">"ફોન વધુ પડતી ગરમીને લીધે બંધ થઇ ગયો છે"</string>
     <string name="thermal_shutdown_message" msgid="9006456746902370523">"તમારો ફોન હવે સામાન્યપણે કાર્ય કરી રહ્યો છે"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"તમારો ફોન અત્યંત ગરમ હતો, તેથી તે ઠંડો થવા આપમેળે બંધ થઇ ગયો છે. તમારો ફોન હવે સામાન્યપણે કાર્ય કરી રહ્યો છે.\n\nતમારો ફોન અત્યંત ગરમ થઇ શકે છે, જો તમે:\n • એવી ઍપ્લિકેશન વાપરતા હો જે સંસાધન સઘન રીતે વાપરતી હોય (જેમ કે ગેમિંગ, વિડિઓ, અથવા નેવિગેટ કરતી ઍપ્લિકેશનો)\n • મોટી ફાઇલો અપલોડ અથવા ડાઉનલોડ કરતા હો\n • તમારા ફોનનો ઉપયોગ ઉચ્ચ તાપમાનમાં કરતા હો"</string>
+    <string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"તમારો ફોન અત્યંત ગરમ હતો, તેથી તે ઠંડો થવા આપમેળે બંધ થઇ ગયો છે. તમારો ફોન હવે સામાન્યપણે કાર્ય કરી રહ્યો છે.\n\nતમારો ફોન અત્યંત ગરમ થઇ શકે છે, જો તમે:\n • એવી ઍપ્લિકેશન વાપરતા હો જે સંસાધન સઘન રીતે વાપરતી હોય (જેમ કે ગેમિંગ, વીડિઓ, અથવા નેવિગેટ કરતી ઍપ્લિકેશનો)\n • મોટી ફાઇલો અપલોડ અથવા ડાઉનલોડ કરતા હો\n • તમારા ફોનનો ઉપયોગ ઉચ્ચ તાપમાનમાં કરતા હો"</string>
     <string name="high_temp_title" msgid="4589508026407318374">"ફોન ગરમ થઈ રહ્યો છે"</string>
     <string name="high_temp_notif_message" msgid="5642466103153429279">"ફોન ઠંડો થાય ત્યાં સુધી કેટલીક સુવિધાઓ મર્યાદિત હોય છે"</string>
     <string name="high_temp_dialog_message" msgid="6840700639374113553">"તમારો ફોન આપમેળે ઠંડો થવાનો પ્રયાસ કરશે. તમે હજી પણ તમારા ફોનનો ઉપયોગ કરી શકો છો, પરંતુ તે કદાચ થોડો ધીમો ચાલે.\n\nતમારો ફોન ઠંડો થઈ જવા પર, તે સામાન્ય રીતે ચાલશે."</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"મેનૂ"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> ઍપ્લિકેશન"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"ચેતવણીઓ"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"બૅટરી"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"સ્ક્રીનશૉટ"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"સામાન્ય સંદેશા"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"સ્ટોરેજ"</string>
@@ -762,8 +763,8 @@
     <string name="app_info" msgid="6856026610594615344">"ઍપ્લિકેશન માહિતી"</string>
     <string name="go_to_web" msgid="1106022723459948514">"વેબ પર જાઓ"</string>
     <string name="mobile_data" msgid="7094582042819250762">"મોબાઇલ ડેટા"</string>
-    <string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi બંધ છે"</string>
-    <string name="bt_is_off" msgid="2640685272289706392">"Bluetooth બંધ છે"</string>
+    <string name="wifi_is_off" msgid="1838559392210456893">"વાઇ-ફાઇ બંધ છે"</string>
+    <string name="bt_is_off" msgid="2640685272289706392">"બ્લૂટૂથ બંધ છે"</string>
     <string name="dnd_is_off" msgid="6167780215212497572">"ખલેલ પાડશો નહીં બંધ છે"</string>
     <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"ખલેલ પાડશો નહીં એક સ્વચાલિત નિયમ દ્વારા ચાલુ કરાયું હતું (<xliff:g id="ID_1">%s</xliff:g>)."</string>
     <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"ખલેલ પાડશો નહીં એક ઍપ્લિકેશન દ્વારા ચાલુ કરાયું હતું (<xliff:g id="ID_1">%s</xliff:g>)."</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"પૃષ્ઠભૂમિમાં ચાલી રહેલ ઍપ્લિકેશનો"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"બૅટરી અને ડેટા વપરાશ વિશેની વિગતો માટે ટૅપ કરો"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"મોબાઇલ ડેટા બંધ કરીએ?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"એક ઍપ પરવાનગી વિનંતીને અસ્પષ્ટ કરતી હોવાને કારણે, સેટિંગ્સ તમારા પ્રતિસાદને ચકાસી શકતી નથી."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-h600dp/dimens_car.xml b/packages/SystemUI/res/values-h600dp/dimens_car.xml
new file mode 100644
index 0000000..c3e62c8
--- /dev/null
+++ b/packages/SystemUI/res/values-h600dp/dimens_car.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2017, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+-->
+<resources>
+    <dimen name="car_body2_size">32sp</dimen> <!-- B2 -->
+</resources>
diff --git a/packages/SystemUI/res/values-hi-land/strings.xml b/packages/SystemUI/res/values-hi-land/strings.xml
index de6a6c9..ed0070d 100644
--- a/packages/SystemUI/res/values-hi-land/strings.xml
+++ b/packages/SystemUI/res/values-hi-land/strings.xml
@@ -19,5 +19,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="toast_rotation_locked" msgid="7609673011431556092">"स्‍क्रीन को अभी भूदृश्य अभिविन्यास में लॉक किया गया है."</string>
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"स्क्रीन अभी लैंडस्केप दिशा में लॉक है."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 0ff214c..bf78a72 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -19,17 +19,17 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="7164937344850004466">"सिस्‍टम UI"</string>
+    <string name="app_label" msgid="7164937344850004466">"सिस्‍टम यूआई"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"साफ़ करें"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"सूची से निकालें"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ऐप्स की जानकारी"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ऐप की जानकारी"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"आपकी हाल की स्‍क्रीन यहां दिखाई देती हैं"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"हाल ही के ऐप्स  खारिज करें"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
-      <item quantity="one">स्क्रीन की खास जानकारी</item>
-      <item quantity="other">स्क्रीन की खास जानकारी</item>
+      <item quantity="one">%d स्क्रीन की खास जानकारी</item>
+      <item quantity="other">%d स्क्रीन की खास जानकारी</item>
     </plurals>
-    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"कोई नोटिफ़िकेशन नहीं"</string>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"कोई सूचना नहीं है"</string>
     <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ऑनगोइंग"</string>
     <string name="status_bar_latest_events_title" msgid="6594767438577593172">"सूचनाएं"</string>
     <string name="battery_low_title" msgid="6456385927409742437">"बैटरी कम है"</string>
@@ -44,13 +44,13 @@
     <string name="battery_saver_start_action" msgid="5576697451677486320">"बैटरी बचाएँ"</string>
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"सेटिंग"</string>
     <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"वाई-फ़ाई"</string>
-    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"स्‍क्रीन अपनेआप घुमाएं"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"स्‍क्रीन अपने आप घुमाएं"</string>
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"म्यूट करें"</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"स्वत:"</string>
     <string name="status_bar_settings_notifications" msgid="397146176280905137">"सूचनाएं"</string>
     <string name="bluetooth_tethered" msgid="7094101612161133267">"ब्लूटूथ टीदर किया गया"</string>
-    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"इनपुट पद्धति सेट करें"</string>
-    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"भौतिक कीबोर्ड"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"इनपुट का तरीका सेट करें"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"सामान्य कीबोर्ड"</string>
     <string name="usb_device_permission_prompt" msgid="834698001271562057">"ऐप्स  <xliff:g id="APPLICATION">%1$s</xliff:g> को USB डिवाइस तक पहुंचने दें?"</string>
     <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"ऐप्स  <xliff:g id="APPLICATION">%1$s</xliff:g> को USB सहायक डिवाइस तक पहुंचने दें?"</string>
     <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"जब यह USB डिवाइस कनेक्ट किया जाए, तब <xliff:g id="ACTIVITY">%1$s</xliff:g> को खोलें?"</string>
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"कंप्यूटर का RSA कुंजी फ़िंगरप्रिंट है:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"इस कंप्यूटर से हमेशा अनुमति दें"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB डीबगिंग की अनुमति नहीं है"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"वर्तमान में इस डिवाइस में प्रवेश किया हुआ उपयोगकर्ता USB डीबगिंग चालू नहीं कर सकता. इस सुविधा का उपयोग करने के लिए, कृपया किसी नियंत्रक उपयोगकर्ता में स्‍विच करें."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"अभी इस डिवाइस में जिस उपयोगकर्ता ने साइन इन किया है, वो USB डीबगिंग चालू नहीं कर सकता. इस सुविधा का इस्तेमाल करने के लिए, प्राथमिक उपयोगकर्ता में बदलें."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"स्‍क्रीन भरने के लिए ज़ूम करें"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"स्‍क्रीन भरने के लिए खींचें"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"स्क्रीनशॉट सहेजा जा रहा है..."</string>
@@ -74,7 +74,7 @@
     <string name="screenshot_saved_text" msgid="2685605830386712477">"अपना स्क्रीनशॉट देखने के लिए टैप करें."</string>
     <string name="screenshot_failed_title" msgid="705781116746922771">"स्क्रीनशॉट को कैप्चर नहीं किया जा सका."</string>
     <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"स्क्रीनशॉट सहेजने में समस्या आई"</string>
-    <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"सीमित मेमोरी स्थान के कारण स्क्रीनशॉट सहेजा नहीं जा सकता."</string>
+    <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"मेमोरी में जगह कम होने की वजह से स्क्रीनशॉट सेव नहीं किया जा सकता."</string>
     <string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ऐप्लिकेशन या आपका संगठन स्क्रीनशॉट लेने की अनुमति नहीं देता"</string>
     <string name="usb_preference_title" msgid="6551050377388882787">"USB फ़ाइल स्थानांतरण विकल्प"</string>
     <string name="use_mtp_button_title" msgid="4333504413563023626">"मीडिया प्लेयर के रूप में माउंट करें (MTP)"</string>
@@ -82,10 +82,10 @@
     <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac के लिए Android File Transfer ऐप्स इंस्टॉल करें"</string>
     <string name="accessibility_back" msgid="567011538994429120">"वापस जाएं"</string>
     <string name="accessibility_home" msgid="8217216074895377641">"होम"</string>
-    <string name="accessibility_menu" msgid="316839303324695949">"मेनू"</string>
-    <string name="accessibility_accessibility_button" msgid="7601252764577607915">"एक्सेस-योग्यता"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"मेन्यू"</string>
+    <string name="accessibility_accessibility_button" msgid="7601252764577607915">"सुलभता"</string>
     <string name="accessibility_recent" msgid="5208608566793607626">"खास जानकारी"</string>
-    <string name="accessibility_search_light" msgid="1103867596330271848">"खोजें"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"सर्च करें"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"कैमरा"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"फ़ोन"</string>
     <string name="accessibility_voice_assist_button" msgid="487611083884852965">"आवाज़ से डिवाइस का इस्तेमाल"</string>
@@ -97,7 +97,7 @@
     <string name="voice_assist_label" msgid="3956854378310019854">"आवाज़ से डिवाइस को इस्तेमाल करें"</string>
     <string name="camera_label" msgid="7261107956054836961">"कैमरा खोलें"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"नया कार्य लेआउट चुनें"</string>
-    <string name="cancel" msgid="6442560571259935130">"अभी नहीं"</string>
+    <string name="cancel" msgid="6442560571259935130">"रद्द करें"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"संगतता ज़ूम बटन."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"छोटी से बड़ी स्‍क्रीन पर ज़ूम करें."</string>
     <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ब्लूटूथ कनेक्ट किया गया."</string>
@@ -155,7 +155,7 @@
     <string name="accessibility_cell_data" msgid="5326139158682385073">"मोबाइल डेटा"</string>
     <string name="accessibility_cell_data_on" msgid="5927098403452994422">"मोबाइल डेटा चालू है"</string>
     <string name="accessibility_cell_data_off" msgid="443267573897409704">"मोबाइल डेटा बंद है"</string>
-    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ब्लूटूथ टेदरिंग."</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ब्लूटूथ से इंटरनेट पर शेयर करें."</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"हवाई जहाज मोड."</string>
     <string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN चालू."</string>
     <string name="accessibility_no_sims" msgid="3957997018324995781">"कोई सिम कार्ड नहीं है."</string>
@@ -165,12 +165,12 @@
     <string name="accessibility_battery_level_charging" msgid="1147587904439319646">"बैटरी चार्ज हो रही है, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> प्रतिशत."</string>
     <string name="accessibility_settings_button" msgid="799583911231893380">"सिस्टम सेटिंग."</string>
     <string name="accessibility_notifications_button" msgid="4498000369779421892">"सूचनाएं."</string>
-    <string name="accessibility_overflow_action" msgid="5681882033274783311">"सभी नोटिफ़िकेशन देखें"</string>
-    <string name="accessibility_remove_notification" msgid="3603099514902182350">"नोटिफ़िकेशन साफ़ करें"</string>
+    <string name="accessibility_overflow_action" msgid="5681882033274783311">"पूरी सूचनाएं देखें"</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"सूचना साफ़ करें"</string>
     <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS सक्षम."</string>
     <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS प्राप्त करना."</string>
     <string name="accessibility_tty_enabled" msgid="4613200365379426561">"टेलीटाइपराइटर सक्षम."</string>
-    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"रिंगर कंपन."</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"रिंगर कंपन (वाइब्रेशन)."</string>
     <string name="accessibility_ringer_silent" msgid="9061243307939135383">"रिंगर मौन."</string>
     <!-- no translation found for accessibility_casting (6887382141726543668) -->
     <skip />
@@ -178,11 +178,11 @@
     <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> को ख़ारिज करें."</string>
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> खा़रिज कर दिया गया."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"हाल ही के सभी ऐप्लिकेशन ख़ारिज कर दिए गए."</string>
-    <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> ऐप्लिकेशन जानकारी खोलें."</string>
+    <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> ऐप्लिकेशन की जानकारी खोलें."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> प्रारंभ हो रहा है."</string>
     <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
-    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"नोटिफ़िकेशन खारिज की गई."</string>
-    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"नोटिफ़िकेशन शेड."</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"सूचना खारिज की गई."</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"सूचना शेड."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"त्वरित सेटिंग."</string>
     <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"लॉक स्क्रीन."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"सेटिंग"</string>
@@ -198,9 +198,9 @@
     <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"हवाई जहाज़ मोड चालू है."</string>
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"हवाई जहाज़ मोड को बंद किया गया."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"हवाई जहाज़ मोड को चालू किया गया."</string>
-    <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"परेशान ना करें चालू, केवल प्राथमिकता."</string>
+    <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"परेशान ना करें चालू, सिर्फ़ प्राथमिकता."</string>
     <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"परेशान ना करें चालू है, पूरी तरह शांत."</string>
-    <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"परेशान ना करें चालू, केवल अलार्म."</string>
+    <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"परेशान ना करें चालू, सिर्फ़ अलार्म."</string>
     <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"परेशान ना करें."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"परेशान ना करें बंद."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"परेशान ना करें बंद किया गया."</string>
@@ -212,12 +212,12 @@
     <string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"ब्लूटूथ कनेक्ट है."</string>
     <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="2730003763480934529">"ब्लूटूथ को बंद किया गया."</string>
     <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="8722351798763206577">"ब्लूटूथ को चालू किया गया."</string>
-    <string name="accessibility_quick_settings_location_off" msgid="5119080556976115520">"स्‍थान रिपोर्टिंग बंद है."</string>
-    <string name="accessibility_quick_settings_location_on" msgid="5809937096590102036">"स्‍थान रिपोर्टिंग चालू है."</string>
-    <string name="accessibility_quick_settings_location_changed_off" msgid="8526845571503387376">"स्‍थान रिपोर्टिंग को बंद किया गया."</string>
-    <string name="accessibility_quick_settings_location_changed_on" msgid="339403053079338468">"स्‍थान रिपोर्टिंग को चालू किया गया."</string>
+    <string name="accessibility_quick_settings_location_off" msgid="5119080556976115520">"जगह की रिपोर्ट बंद है."</string>
+    <string name="accessibility_quick_settings_location_on" msgid="5809937096590102036">"जगह की रिपोर्ट चालू है."</string>
+    <string name="accessibility_quick_settings_location_changed_off" msgid="8526845571503387376">"जगह की रिपोर्ट को बंद किया गया."</string>
+    <string name="accessibility_quick_settings_location_changed_on" msgid="339403053079338468">"जगह की रिपोर्ट को चालू किया गया."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"<xliff:g id="TIME">%s</xliff:g> के लिए अलार्म सेट किया गया."</string>
-    <string name="accessibility_quick_settings_close" msgid="3115847794692516306">"फलक बंद करें."</string>
+    <string name="accessibility_quick_settings_close" msgid="3115847794692516306">"पैनल बंद करें."</string>
     <string name="accessibility_quick_settings_more_time" msgid="3659274935356197708">"अधिक समय."</string>
     <string name="accessibility_quick_settings_less_time" msgid="2404728746293515623">"कम समय."</string>
     <string name="accessibility_quick_settings_flashlight_off" msgid="4936432000069786988">"फ़्लैशलाइट बंद है."</string>
@@ -247,15 +247,15 @@
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"कोई इंटरनेट कनेक्शन नहीं"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"वाई-फ़ाई  कनेक्‍ट किया गया"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS को खोजा जा रहा है"</string>
-    <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS द्वारा सेट किया गया स्‍थान"</string>
-    <string name="accessibility_location_active" msgid="2427290146138169014">"स्थान अनुरोध सक्रिय"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"जीपीएस ने यह जगह सेट की है"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"जगह का अनुरोध किया जा रहा है"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"सभी सूचनाएं साफ़ करें."</string>
     <string name="notification_group_overflow_indicator" msgid="1863231301642314183">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <plurals name="notification_group_overflow_description" formatted="false" msgid="4579313201268495404">
-      <item quantity="one">इसमें <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_1">%s</xliff:g> और सूचनाएं हैं.</item>
+      <item quantity="other">इसमें <xliff:g id="NUMBER_1">%s</xliff:g> और सूचनाएं हैं.</item>
     </plurals>
-    <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"नोटिफ़िकेशन सेटिंग"</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"सूचना सेटिंग"</string>
     <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> सेटिंग"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"स्‍क्रीन स्‍वचालित रूप से घूमेगी."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"स्क्रीन लैंडस्केप दिशा में लॉक है."</string>
@@ -267,8 +267,8 @@
     <string name="start_dreams" msgid="5640361424498338327">"स्क्रीन सेवर"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"ईथरनेट"</string>
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"परेशान ना करें"</string>
-    <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"केवल प्राथमिकता"</string>
-    <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"केवल अलार्म"</string>
+    <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"सिर्फ़ प्राथमिकता"</string>
+    <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"सिर्फ़ अलार्म"</string>
     <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"पूरी तरह शांत"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ब्लूटूथ"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ब्लूटूथ (<xliff:g id="NUMBER">%d</xliff:g> डिवाइस)"</string>
@@ -282,8 +282,8 @@
     <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"पोर्ट्रेट"</string>
     <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"लैंडस्केप"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"इनपुट विधि"</string>
-    <string name="quick_settings_location_label" msgid="5011327048748762257">"स्थान"</string>
-    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"स्थान बंद"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"जगह"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"जगह की जानकारी बंद है"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"मीडिया डिवाइस"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"केवल आपातकालीन कॉल"</string>
@@ -308,7 +308,7 @@
     <string name="quick_settings_inversion_label" msgid="8790919884718619648">"रंग उलटें"</string>
     <string name="quick_settings_color_space_label" msgid="853443689745584770">"रंग सुधार मोड"</string>
     <string name="quick_settings_more_settings" msgid="326112621462813682">"और सेटिंग"</string>
-    <string name="quick_settings_done" msgid="3402999958839153376">"पूर्ण"</string>
+    <string name="quick_settings_done" msgid="3402999958839153376">"हो गया"</string>
     <string name="quick_settings_connected" msgid="1722253542984847487">"कनेक्ट है"</string>
     <string name="quick_settings_connected_battery_level" msgid="4136051440381328892">"कनेक्ट किया गया, बैटरी <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> है"</string>
     <string name="quick_settings_connecting" msgid="47623027419264404">"कनेक्ट हो रहा है..."</string>
@@ -330,16 +330,16 @@
     <string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC चालू है"</string>
     <string name="recents_empty_message" msgid="808480104164008572">"हाल ही का कोई आइटम नहीं"</string>
     <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"आपने सब कुछ साफ़ कर दिया है"</string>
-    <string name="recents_app_info_button_label" msgid="2890317189376000030">"एप्‍लिकेशन जानकारी"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"ऐप्लिकेशन की जानकारी"</string>
     <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"स्क्रीन पिन करना"</string>
-    <string name="recents_search_bar_label" msgid="8074997400187836677">"खोज"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"सर्च"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> प्रारंभ नहीं किया जा सका."</string>
-    <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> को सुरक्षित-मोड में अक्षम किया गया."</string>
+    <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> को सुरक्षित-मोड में बंद किया गया."</string>
     <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Clear all"</string>
     <string name="recents_drag_hint_message" msgid="2649739267073203985">"स्क्रीन के दो हिस्से में बंट जाने, स्पिल्ट स्क्रीन, का इस्तेमाल करने के लिए यहां खींचें और छोडें"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"क्षैतिज रूप से विभाजित करें"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"लम्बवत रूप से विभाजित करें"</string>
-    <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"कस्‍टम रूप से विभाजित करें"</string>
+    <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"अपने मुताबिक बांटें"</string>
     <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ऊपर की ओर दो स्क्रीन बनाएं"</string>
     <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"बाईं ओर दो स्क्रीन बनाएं"</string>
     <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"दाईं ओर दो स्क्रीन बनाएं"</string>
@@ -350,36 +350,36 @@
     <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"पूर्ण होने में <xliff:g id="CHARGING_TIME">%s</xliff:g> शेष"</string>
     <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"चार्ज नहीं हो रही है"</string>
     <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"नेटवर्क को\nमॉनीटर किया जा सकता है"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"खोजें"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"सर्च करें"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए ऊपर स्‍लाइड करें."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए बाएं स्‍लाइड करें."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"आपको अलार्म, रिमाइंडर, इवेंट और चुनिंदा कॉल करने वालों के अलावा किसी और तरह से (आवाज़ करके और थरथरा कर ) परेशान नहीं किया जाएगा. आप फिर भी संगीत, वीडियो और गेम सहित अपना चुना हुआ सब कुछ सुन सकते हैं."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"आपको अलार्म छोड़कर दूसरी ध्‍वनियों और कंपनों से परेशान नहीं किया जाएगा. आपको अभी भी संगीत, वीडियो और गेम सहित वह सब कुछ सुनाई देगा जो आपने चलाने के लिए चुना है."</string>
-    <string name="zen_priority_customize_button" msgid="7948043278226955063">"कस्टमाइज़ करें"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"इससे अलार्म, संगीत, वीडियो और गेम सहित सभी ध्‍वनियां और कंपन अवरुद्ध हो जाते हैं. आप अभी भी फ़ोन काॅल कर सकेंगे."</string>
-    <string name="zen_silence_introduction" msgid="3137882381093271568">"इससे अलार्म, संगीत, वीडियो और गेम सहित सभी ध्वनियां और कंपन अवरुद्ध हो जाते हैं."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"आपको अलार्म, रिमाइंडर, इवेंट और चुनिंदा कॉल करने वालों के अलावा किसी और तरह से (आवाज़ करके और थरथरा कर ) परेशान नहीं किया जाएगा. आप फिर भी संगीत, वीडियो और गेम सहित अपना चुना हुआ सब कुछ सुन सकते हैं."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"आपको अलार्म छोड़कर दूसरी आवाज़ों और कंपनों से परेशान नहीं किया जाएगा. आपको अभी भी संगीत, वीडियो और गेम सहित वह सब कुछ सुनाई देगा जो आपने चलाने के लिए चुना है."</string>
+    <string name="zen_priority_customize_button" msgid="7948043278226955063">"अपनी पसंद के मुताबिक बनाएं"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"इससे अलार्म, संगीत, वीडियो और गेम सहित सभी आवाज़ और कंपन (वाइब्रेशन) रोक दिए जाते हैं. आप तब भी फ़ोन काॅल कर सकेंगे."</string>
+    <string name="zen_silence_introduction" msgid="3137882381093271568">"इससे अलार्म, संगीत, वीडियो और गेम सहित सभी आवाज़ और कंपन (वाइब्रेशन) रोक दिए जाते हैं."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"कम अत्यावश्यक सूचनाएं नीचे दी गई हैं"</string>
     <string name="notification_tap_again" msgid="7590196980943943842">"खोलने के लिए पुन: टैप करें"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"अनलॉक करने के लिए ऊपर स्वाइप करें"</string>
     <string name="do_disclosure_generic" msgid="5615898451805157556">"इस डिवाइस का प्रबंधन आपका संगठन करता है"</string>
     <string name="do_disclosure_with_name" msgid="5640615509915445501">"इस डिवाइस के प्रबंधक <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> हैं"</string>
-    <string name="phone_hint" msgid="4872890986869209950">"फ़ोन के लिए आइकन से स्वाइप करें"</string>
-    <string name="voice_hint" msgid="8939888732119726665">"\'आवाज़ से डिवाइस का इस्तेमाल\' आइकन से स्वाइप करें"</string>
-    <string name="camera_hint" msgid="7939688436797157483">"कैमरे के लिए आइकन से स्वाइप करें"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"फ़ोन के लिए आइकॉन से स्वाइप करें"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"\'आवाज़ से डिवाइस का इस्तेमाल\' आइकॉन से स्वाइप करें"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"कैमरे के लिए आइकॉन से स्वाइप करें"</string>
     <string name="interruption_level_none_with_warning" msgid="5114872171614161084">"संपूर्ण मौन. इससे स्‍क्रीन रीडर भी मौन हो जाएंगे."</string>
     <string name="interruption_level_none" msgid="6000083681244492992">"पूरी तरह शांत"</string>
-    <string name="interruption_level_priority" msgid="6426766465363855505">"केवल प्राथमिकता"</string>
-    <string name="interruption_level_alarms" msgid="5226306993448328896">"केवल अलार्म"</string>
+    <string name="interruption_level_priority" msgid="6426766465363855505">"सिर्फ़ प्राथमिकता"</string>
+    <string name="interruption_level_alarms" msgid="5226306993448328896">"सिर्फ़ अलार्म"</string>
     <string name="interruption_level_none_twoline" msgid="3957581548190765889">"पूरी तरह\nशांत"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"केवल\nप्राथमिकता"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"केवल\nअलार्म"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"चार्ज हो रहा है (पूरा होने में <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> बाकी)"</string>
     <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"तेज़ी से चार्ज हो रहा है (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> में हो जाएगा)"</string>
     <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"धीरे चार्ज हो रहा है (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> में पूरा हो जाएगा)"</string>
-    <string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"उपयोगकर्ता स्विच करें"</string>
-    <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"उपयोगकर्ता स्विच करें, वर्तमान उपयोगकर्ता <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
-    <string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"वर्तमान उपयोगकर्ता <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
+    <string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"उपयोगकर्ता बदलें"</string>
+    <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"उपयोगकर्ता बदलें, मौजूदा उपयोगकर्ता <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
+    <string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"मौजूदा उपयोगकर्ता <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"प्रोफ़ाइल दिखाएं"</string>
     <string name="user_add_user" msgid="5110251524486079492">"उपयोगकर्ता जोड़ें"</string>
     <string name="user_new_user_name" msgid="426540612051178753">"नया उपयोगकर्ता"</string>
@@ -391,27 +391,27 @@
     <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"निकालें"</string>
     <string name="guest_wipe_session_title" msgid="6419439912885956132">"अतिथि, आपका पुन: स्वागत है!"</string>
     <string name="guest_wipe_session_message" msgid="8476238178270112811">"क्‍या आप अपना सत्र जारी रखना चाहते हैं?"</string>
-    <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"पुन: प्रारंभ करें"</string>
+    <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"फिर से शुरू करें"</string>
     <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"हां, जारी रखें"</string>
     <string name="guest_notification_title" msgid="1585278533840603063">"अतिथि उपयोगकर्ता"</string>
-    <string name="guest_notification_text" msgid="335747957734796689">"ऐप्‍स और डेटा हटाने के लिए, अतिथि उपयोगकर्ता को निकालें"</string>
+    <string name="guest_notification_text" msgid="335747957734796689">"ऐप और डेटा हटाने के लिए, अतिथि उपयोगकर्ता को निकालें"</string>
     <string name="guest_notification_remove_action" msgid="8820670703892101990">"अतिथि को निकालें"</string>
     <string name="user_logout_notification_title" msgid="1453960926437240727">"उपयोगकर्ता को प्रस्थान करवाना"</string>
-    <string name="user_logout_notification_text" msgid="3350262809611876284">"वर्तमान उपयोगकर्ता से प्रस्थान करें"</string>
+    <string name="user_logout_notification_text" msgid="3350262809611876284">"मौजूदा उपयोगकर्ता से प्रस्थान करें"</string>
     <string name="user_logout_notification_action" msgid="1195428991423425062">"उपयोगकर्ता को प्रस्थान करवाएं"</string>
     <string name="user_add_user_title" msgid="4553596395824132638">"नया उपयोगकर्ता जोड़ें?"</string>
-    <string name="user_add_user_message_short" msgid="2161624834066214559">"जब आप कोई नया उपयोगकर्ता जोड़ते हैं तो उस व्यक्ति को अपना स्थान सेट करना होता है.\n\nकोई भी उपयोगकर्ता अन्य सभी उपयोगकर्ताओं के लिए ऐप्स अपडेट कर सकता है."</string>
+    <string name="user_add_user_message_short" msgid="2161624834066214559">"जब आप कोई नया उपयोगकर्ता जोड़ते हैं तो उस व्यक्ति को अपनी जगह सेट करनी होती है.\n\nकोई भी उपयोगकर्ता बाकी सभी उपयोगकर्ताओं के लिए ऐप अपडेट कर सकता है."</string>
     <string name="user_remove_user_title" msgid="4681256956076895559">"उपयोगकर्ता निकालें?"</string>
-    <string name="user_remove_user_message" msgid="1453218013959498039">"इस उपयोगकर्ता के सभी ऐप्स और डेटा को हटा दिया जाएगा."</string>
+    <string name="user_remove_user_message" msgid="1453218013959498039">"इस उपयोगकर्ता के सभी ऐप और डेटा को हटा दिया जाएगा."</string>
     <string name="user_remove_user_remove" msgid="7479275741742178297">"निकालें"</string>
     <string name="battery_saver_notification_title" msgid="237918726750955859">"बैटरी सेवर चालू है"</string>
     <string name="battery_saver_notification_text" msgid="820318788126672692">"निष्‍पादन और पृष्ठभूमि डेटा को कम करता है"</string>
     <string name="battery_saver_notification_action_text" msgid="109158658238110382">"बैटरी बचतकर्ता को बंद करें"</string>
-    <string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> आपके स्क्रीन पर प्रदर्शित प्रत्येक सामग्री को कैप्चर करना प्रारंभ कर देगी."</string>
+    <string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> आपके स्क्रीन पर दिखाई देने वाली हर सामग्री को कैप्चर करना शुरू कर देगी."</string>
     <string name="media_projection_remember_text" msgid="3103510882172746752">"फिर से न दिखाएं"</string>
-    <string name="clear_all_notifications_text" msgid="814192889771462828">"सभी साफ करें"</string>
-    <string name="media_projection_action_text" msgid="8470872969457985954">"अब प्रारंभ करें"</string>
-    <string name="empty_shade_text" msgid="708135716272867002">"कोई नोटिफ़िकेशन नहीं"</string>
+    <string name="clear_all_notifications_text" msgid="814192889771462828">"सभी साफ़ करें"</string>
+    <string name="media_projection_action_text" msgid="8470872969457985954">"अब शुरू करें"</string>
+    <string name="empty_shade_text" msgid="708135716272867002">"कोई सूचना नहीं मिली"</string>
     <string name="profile_owned_footer" msgid="8021888108553696069">"प्रोफ़ाइल को मॉनीटर किया जा सकता है"</string>
     <string name="vpn_footer" msgid="2388611096129106812">"नेटवर्क को मॉनीटर किया जा सकता है"</string>
     <string name="branded_vpn_footer" msgid="2168111859226496230">"नेटवर्क को मॉनिटर किया जा सकता है"</string>
@@ -439,11 +439,11 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN अक्षम करें"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN डिस्‍कनेक्‍ट करें"</string>
     <string name="monitoring_button_view_policies" msgid="100913612638514424">"नीतियां देखें"</string>
-    <string name="monitoring_description_named_management" msgid="5281789135578986303">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> आपके डिवाइस का प्रबंधन करता है.\n\nआपका व्यवस्थापक सेटिंग, कॉर्पोरेट एक्सेस, ऐप्लिकेशन, आपके डिवाइस से संबद्ध डेटा और आपके डिवाइस की स्थान की जानकारी की निगरानी कर सकता है और उन्हें प्रबंधित कर सकता है.\n\nअधिक जानकारी के लिए, अपने व्यवस्थापक से संपर्क करें."</string>
-    <string name="monitoring_description_management" msgid="4573721970278370790">"आपका संगठन आपके डिवाइस का प्रबंधन करता है.\n\nआपका व्यवस्थापक सेटिंग, कॉर्पोरेट एक्सेस, ऐप्लिकेशन, आपके डिवाइस से संबद्ध डेटा और आपके डिवाइस की स्थान की जानकारी की निगरानी कर सकता है और उन्हें प्रबंधित कर सकता है.\n\nअधिक जानकारी के लिए, अपने व्यवस्थापक से संपर्क करें."</string>
-    <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"आपके संगठन ने इस डिवाइस पर एक प्रमाणपत्र प्राधिकरण इंस्टॉल किया है. आपके सुरक्षित नेटवर्क की निगरानी या उसमें बदलाव किया जा सकता है."</string>
-    <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"आपके संगठन ने आपकी कार्य प्रोफ़ाइल में एक प्रमाणपत्र प्राधिकरण इंस्टॉल किया है. आपके सुरक्षित नेटवर्क ट्रैफ़िक की निगरानी या उसमें बदलाव किया जा सकता है."</string>
-    <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"इस डिवाइस पर एक प्रमाणपत्र प्राधिकरण इंस्टॉल किया गया है. आपके सुरक्षित नेटवर्क ट्रैफ़िक की निगरानी या उसमें बदलाव किया जा सकता है."</string>
+    <string name="monitoring_description_named_management" msgid="5281789135578986303">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> आपके डिवाइस का प्रबंधन करता है.\n\nआपका एडमिन सेटिंग, कॉर्पोरेट पहुंच, ऐप्लिकेशन, आपके डिवाइस से जुड़े डेटा और आपके डिवाइस की जगह की जानकारी की निगरानी कर सकता है और उन्हें प्रबंधित कर सकता है.\n\n और जानकारी के लिए, अपने एडमिन से संपर्क करें."</string>
+    <string name="monitoring_description_management" msgid="4573721970278370790">"आपका संगठन आपके डिवाइस का प्रबंधन करता है.\n\nआपका एडमिन सेटिंग, कॉर्पोरेट पहुंच, ऐप्लिकेशन, आपके डिवाइस से जुड़े डेटा और आपके डिवाइस की जगह की जानकारी की निगरानी कर सकता है और उन्हें प्रबंधित कर सकता है.\n\nऔर जानकारी के लिए, अपने एडमिन से संपर्क करें."</string>
+    <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"आपके संगठन ने इस डिवाइस पर एक प्रमाणपत्र अनुमति इंस्टॉल की है. आपके सुरक्षित नेटवर्क पर ट्रेफ़िक की निगरानी या उसमें बदलाव किया जा सकता है."</string>
+    <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"आपके संगठन ने आपकी कार्य प्रोफ़ाइल में एक प्रमाणपत्र अनुमति इंस्टॉल की है. आपके सुरक्षित नेटवर्क ट्रैफ़िक की निगरानी या उसमें बदलाव किया जा सकता है."</string>
+    <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"इस डिवाइस पर एक प्रमाणपत्र अनुमति इंस्टॉल की है. आपके सुरक्षित नेटवर्क ट्रैफ़िक की निगरानी या उसमें बदलाव किया जा सकता है."</string>
     <string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"आपके व्यवस्थापक ने नेटवर्क लॉगिंग चालू किया है, जो आपके डिवाइस पर ट्रैफ़िक की निगरानी करता है."</string>
     <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"आप <xliff:g id="VPN_APP">%1$s</xliff:g> से कनेक्‍ट हैं, जो ईमेल, ऐप्लिकेशन और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकते हैं."</string>
     <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"आप <xliff:g id="VPN_APP_0">%1$s</xliff:g> और <xliff:g id="VPN_APP_1">%2$s</xliff:g> से कनेक्ट हैं, जो ईमेल, ऐप्लिकेशन और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकते हैं."</string>
@@ -451,38 +451,38 @@
     <string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"आपकी व्यक्तिगत प्रोफ़ाइल <xliff:g id="VPN_APP">%1$s</xliff:g> से कनेक्ट है, जो ईमेल, ऐप्लिकेशन और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
     <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> आपका डिवाइस प्रबंधित करता है."</string>
     <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> आपका डिवाइस प्रबंधित करने के लिए <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> का उपयोग करता है."</string>
-    <string name="monitoring_description_do_body" msgid="3639594537660975895">"आपका व्यवस्थापक आपके डिवाइस से जुड़ी सेटिंग, कॉर्पोरेट एक्सेस, ऐप्लिकेशन, डेटा और आपके डिवाइस की स्थान जानकारी की निगरानी और उसका प्रबंधन कर सकता है."</string>
+    <string name="monitoring_description_do_body" msgid="3639594537660975895">"आपका एडमिन आपके डिवाइस से जुड़ी सेटिंग, कॉर्पोरेट पहुंच, ऐप्लिकेशन, डेटा और आपके डिवाइस की जगह की जानकारी की निगरानी और उसका प्रबंधन कर सकता है."</string>
     <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
-    <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"अधिक जानें"</string>
+    <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ज़्यादा जानें"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"आप <xliff:g id="VPN_APP">%1$s</xliff:g> से कनेक्‍ट हैं, जो ईमेल, ऐप्लिकेशन और वेबसाइट सहित आपकी नेटवर्क गतिविधि को मॉनिटर कर सकता है."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN सेटिंग खोलें"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN सेटिंग खोलें"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
-    <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"विश्वसनीय क्रेडेंशियल खोलें"</string>
-    <string name="monitoring_description_network_logging" msgid="7223505523384076027">"आपके व्‍यवस्‍थापक ने नेटवर्क लॉग करना चालू कर दिया है, जो आपके डिवाइस पर ट्रैफ़िक की निगरानी करता है.\n\nअधिक जानकारी के लिए अपने व्‍यवस्‍थापक से संपर्क करें."</string>
+    <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"भरोसेमंद क्रेडेंशियल खोलें"</string>
+    <string name="monitoring_description_network_logging" msgid="7223505523384076027">"आपके एडमिन ने नेटवर्क लॉग करना चालू कर दिया है, जो आपके डिवाइस पर ट्रैफ़िक की निगरानी करता है.\n\nअधिक जानकारी के लिए अपने एडमिन से संपर्क करें."</string>
     <string name="monitoring_description_vpn" msgid="4445150119515393526">"आपने किसी ऐप को VPN कनेक्‍शन सेट करने की अनुमति दी है.\n\nयह ऐप ईमेल, ऐप्‍स और सुरक्षित वेबसाइटों सहित आपके डिवाइस और नेटवर्क की गतिविधि की निगरानी कर सकता है."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> आपकी कार्य प्रोफ़ाइल को प्रबंधित करता है.\n\nआपका व्‍यवस्‍थापक ईमेल, ऐप्लिकेशन और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nअधिक जानकारी के लिए अपने व्‍यवस्‍थापक से संपर्क करें.\n\nआप ऐसे VPN से भी कनेक्‍ट हैं, जो आपकी नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> आपकी वर्क प्रोफ़ाइल को प्रबंधित करता है.\n\n आपका एडमिन ईमेल, ऐप्लिकेशन और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nऔर जानकारी के लिए अपने एडमिन से संपर्क करें.\n\nआप ऐसे VPN से भी कनेक्‍ट हैं, जो आपकी नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
     <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
     <string name="monitoring_description_app" msgid="1828472472674709532">"आप <xliff:g id="APPLICATION">%1$s</xliff:g> से कनेक्ट हैं, जो ईमेल, ऐप्लिकेशन और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
     <string name="monitoring_description_app_personal" msgid="484599052118316268">"आप <xliff:g id="APPLICATION">%1$s</xliff:g> से कनेक्‍ट हैं, जो ईमेल, ऐप्‍स और वेबसाइटों सहित आपकी व्‍यक्‍तिगत नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
     <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"आप <xliff:g id="APPLICATION">%1$s</xliff:g> से कनेक्‍ट हैं, जो ईमेल, ऐप्लिकेशन और वेबसाइट सहित आपकी व्‍यक्‍तिगत नेटवर्क गतिविधि को मॉनिटर कर सकता है."</string>
-    <string name="monitoring_description_app_work" msgid="4612997849787922906">"आपकी कार्य प्रोफ़ाइल का प्रबंधन <xliff:g id="ORGANIZATION">%1$s</xliff:g> करता है. प्रोफ़ाइल <xliff:g id="APPLICATION">%2$s</xliff:g> से कनेक्ट है, जो ईमेल, ऐप्लिकेशन और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nअधिक जानकारी के लिए, अपने व्यवस्थापक से संपर्क करें."</string>
+    <string name="monitoring_description_app_work" msgid="4612997849787922906">"आपकी वर्क प्रोफ़ाइल का प्रबंधन <xliff:g id="ORGANIZATION">%1$s</xliff:g> करता है. प्रोफ़ाइल <xliff:g id="APPLICATION">%2$s</xliff:g> से कनेक्ट है, जो ईमेल, ऐप्लिकेशन और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nऔर जानकारी के लिए, अपने एडमिन से संपर्क करें."</string>
     <string name="monitoring_description_app_personal_work" msgid="5664165460056859391">"आपकी कार्य प्रोफ़ाइल का प्रबंधन <xliff:g id="ORGANIZATION">%1$s</xliff:g> करता है. प्रोफ़ाइल <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> से कनेक्ट है, जो ईमेल, ऐप्लिकेशन और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nआप <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> से भी कनेक्ट हैं, जो आपकी व्यक्तिगत नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
     <string name="keyguard_indication_trust_granted" msgid="4985003749105182372">"<xliff:g id="USER_NAME">%1$s</xliff:g> के लिए अनलॉक किया गया"</string>
     <string name="keyguard_indication_trust_managed" msgid="8319646760022357585">"<xliff:g id="TRUST_AGENT">%1$s</xliff:g> चल रहा है"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"जब तक कि आप मैन्‍युअल रूप से अनलॉक नहीं करते तब तक डिवाइस लॉक रहेगा"</string>
-    <string name="hidden_notifications_title" msgid="7139628534207443290">"सूचनाएं अधिक तेज़ी से प्राप्त करें"</string>
+    <string name="hidden_notifications_title" msgid="7139628534207443290">"सूचनाएं ज़्यादा तेज़ी से पाएं"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"आपके द्वारा उन्हें अनलॉक किए जाने से पहले देखें"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"रहने दें"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"सेट करें"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
     <string name="volume_zen_end_now" msgid="6930243045593601084">"अभी बंद करें"</string>
-    <string name="accessibility_volume_expand" msgid="5946812790999244205">"विस्तृत करें"</string>
-    <string name="accessibility_volume_collapse" msgid="3609549593031810875">"संक्षिप्त करें"</string>
+    <string name="accessibility_volume_expand" msgid="5946812790999244205">"विस्तार करें"</string>
+    <string name="accessibility_volume_collapse" msgid="3609549593031810875">"छोटा करें"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"स्‍क्रीन पिन कर दी गई है"</string>
     <string name="screen_pinning_description" msgid="8909878447196419623">"इससे वह तब तक दिखता रहता है जब तक कि आप उसे अनपिन नहीं कर देते. अनपिन करने के लिए, \'वापस जाएं\' और \'खास जानकारी\' को दबाकर रखें."</string>
     <string name="screen_pinning_description_accessible" msgid="426190689254018656">"इससे वह तब तक दिखता रहता है जब तक कि आप उसे अनपिन नहीं कर देते. अनपिन करने के लिए, \'खास जानकारी\' को दबाकर रखें."</string>
-    <string name="screen_pinning_positive" msgid="3783985798366751226">"समझ लिया"</string>
+    <string name="screen_pinning_positive" msgid="3783985798366751226">"ठीक है"</string>
     <string name="screen_pinning_negative" msgid="3741602308343880268">"नहीं, रहने दें"</string>
     <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> को छिपाएं?"</string>
     <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"जब आप उसे अगली बार सेटिंग में चालू करेंगे तो वह फिर से दिखाई देगी."</string>
@@ -493,25 +493,25 @@
     <string name="stream_ring" msgid="8213049469184048338">"घंटी बजाएं"</string>
     <string name="stream_music" msgid="9086982948697544342">"मीडिया"</string>
     <string name="stream_alarm" msgid="5209444229227197703">"अलार्म"</string>
-    <string name="stream_notification" msgid="2563720670905665031">"नोटिफ़िकेशन"</string>
+    <string name="stream_notification" msgid="2563720670905665031">"सूचना"</string>
     <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ब्लूटूथ"</string>
     <string name="stream_dtmf" msgid="2447177903892477915">"दोहरी बहु टोन आवृत्ति"</string>
-    <string name="stream_accessibility" msgid="301136219144385106">"एक्सेस-योग्यता"</string>
+    <string name="stream_accessibility" msgid="301136219144385106">"सुलभता"</string>
     <string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. अनम्यूट करने के लिए टैप करें."</string>
-    <string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. कंपन पर सेट करने के लिए टैप करें. एक्सेस-योग्यता सेवाएं म्यूट हो सकती हैं."</string>
-    <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. म्यूट करने के लिए टैप करें. एक्सेस-योग्यता सेवाएं म्यूट हो सकती हैं."</string>
-    <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. कंपन पर सेट करने के लिए टैप करें."</string>
+    <string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. कंपन पर सेट करने के लिए टैप करें. सुलभता सेवाएं म्यूट हो सकती हैं."</string>
+    <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. म्यूट करने के लिए टैप करें. सुलभता सेवाएं म्यूट हो सकती हैं."</string>
+    <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. कंपन (वाइब्रेशन) पर सेट करने के लिए छूएं."</string>
     <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. म्यूट करने के लिए टैप करें."</string>
     <string name="volume_dialog_accessibility_shown_message" msgid="1834631467074259998">"%s वॉल्यूम नियंत्रण दिखाए गए हैं. खारिज करने के लिए स्वाइप करें."</string>
     <string name="volume_dialog_accessibility_dismissed_message" msgid="51543526013711399">"वॉल्यूम नियंत्रण छिपे हुए हैं"</string>
-    <string name="system_ui_tuner" msgid="708224127392452018">"सिस्टम UI ट्यूनर"</string>
+    <string name="system_ui_tuner" msgid="708224127392452018">"सिस्टम यूज़र इंटरफ़ेस (यूआई) ट्यूनर"</string>
     <string name="show_battery_percentage" msgid="5444136600512968798">"एम्बेड किया गया बैटरी प्रतिशत दिखाएं"</string>
-    <string name="show_battery_percentage_summary" msgid="3215025775576786037">"जब चार्ज नहीं किया जा रहा हो तब स्टेटस बार आइकन में बैटरी लेवल का प्रतिशत दिखाएं"</string>
+    <string name="show_battery_percentage_summary" msgid="3215025775576786037">"जब चार्ज नहीं किया जा रहा हो तब स्टेटस बार आइकॉन में बैटरी लेवल का प्रतिशत दिखाएं"</string>
     <string name="quick_settings" msgid="10042998191725428">"तेज़ सेटिंग"</string>
     <string name="status_bar" msgid="4877645476959324760">"स्टेटस बार"</string>
     <string name="overview" msgid="4018602013895926956">"खास जानकारी"</string>
-    <string name="demo_mode" msgid="2532177350215638026">"सिस्टम UI डेमो मोड"</string>
-    <string name="enable_demo_mode" msgid="4844205668718636518">"डेमो मोड सक्षम करें"</string>
+    <string name="demo_mode" msgid="2532177350215638026">"सिस्टम यूज़र इंटरफ़ेस (यूआई) डेमो मोड"</string>
+    <string name="enable_demo_mode" msgid="4844205668718636518">"डेमो मोड चालू करें"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"डेमो मोड दिखाएं"</string>
     <string name="status_bar_ethernet" msgid="5044290963549500128">"ईथरनेट"</string>
     <string name="status_bar_alarm" msgid="8536256753575881818">"अलार्म"</string>
@@ -527,12 +527,12 @@
     <string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"हॉटस्पॉट"</string>
     <string name="accessibility_managed_profile" msgid="6613641363112584120">"कार्य प्रोफ़ाइल"</string>
     <string name="tuner_warning_title" msgid="7094689930793031682">"कुछ के लिए मज़ेदार लेकिन सबके लिए नहीं"</string>
-    <string name="tuner_warning" msgid="8730648121973575701">"सिस्टम UI ट्यूनर, आपको Android उपयोगकर्ता इंटरफ़ेस में सुधार लाने और उसे अपनी पसंद के हिसाब से बदलने के कुछ और तरीके देता है. प्रयोग के तौर पर इस्तेमाल हो रहीं ये सुविधाएं आगे चल कर रिलीज़ की जा सकती हैं, रोकी जा सकती हैं या दिखाई देना बंद हो सकती हैं. सावधानी से आगे बढ़ें."</string>
+    <string name="tuner_warning" msgid="8730648121973575701">"सिस्टम यूज़र इंटरफ़ेस (यूआई) ट्यूनर, आपको Android यूज़र इंटरफ़ेस में सुधार लाने और उसे अपनी पसंद के हिसाब से बदलने के कुछ और तरीके देता है. प्रयोग के तौर पर इस्तेमाल हो रहीं ये सुविधाएं आगे चल कर रिलीज़ की जा सकती हैं, रोकी जा सकती हैं या दिखाई देना बंद हो सकती हैं. सावधानी से आगे बढ़ें."</string>
     <string name="tuner_persistent_warning" msgid="8597333795565621795">"ये प्रयोगात्मक सुविधाएं आगामी रिलीज़ में बदल सकती हैं, रुक सकती हैं या दिखाई देना बंद हो सकती हैं. सावधानी से आगे बढ़ें."</string>
-    <string name="got_it" msgid="2239653834387972602">"समझ लिया"</string>
-    <string name="tuner_toast" msgid="603429811084428439">"बधाई हो! सिस्टम UI ट्यूनर को सेटिंग में जोड़ दिया गया है"</string>
+    <string name="got_it" msgid="2239653834387972602">"ठीक है"</string>
+    <string name="tuner_toast" msgid="603429811084428439">"बधाई हो! सिस्टम यूज़र इंटरफ़ेस (यूआई) ट्यूनर को सेटिंग में जोड़ दिया गया है"</string>
     <string name="remove_from_settings" msgid="8389591916603406378">"सेटिंग से निकालें"</string>
-    <string name="remove_from_settings_prompt" msgid="6069085993355887748">"सेटिंग से सिस्टम UI ट्यूनर निकालें और इसकी सभी सुविधाओं का उपयोग रोक दें?"</string>
+    <string name="remove_from_settings_prompt" msgid="6069085993355887748">"सेटिंग से सिस्टम यूज़र इंटरफ़ेस (यूआई) ट्यूनर निकालें और इसकी सभी सुविधाओं का इस्तेमाल रोक दें?"</string>
     <string name="activity_not_found" msgid="348423244327799974">"ऐप्लिकेशन आपके डिवाइस पर इंस्टॉल नहीं है"</string>
     <string name="clock_seconds" msgid="7689554147579179507">"घड़ी के सेकंड दिखाएं"</string>
     <string name="clock_seconds_desc" msgid="6282693067130470675">"स्टेटस बार में सेकंड में समय दिखाएं. इससे बैटरी लाइफ़ पर असर पड़ सकता है."</string>
@@ -542,38 +542,38 @@
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"ब्लूटूथ चालू करें?"</string>
     <string name="enable_bluetooth_message" msgid="9106595990708985385">"अपने कीबोर्ड को अपने टैबलेट से कनेक्ट करने के लिए, आपको पहले ब्लूटूथ चालू करना होगा."</string>
     <string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"चालू करें"</string>
-    <string name="show_silently" msgid="6841966539811264192">"नोटिफ़िकेशन मौन रूप से दिखाएं"</string>
+    <string name="show_silently" msgid="6841966539811264192">"सूचना बिना आवाज़ के दिखाएं"</string>
     <string name="block" msgid="2734508760962682611">"सभी सूचनाएं रोकें"</string>
     <string name="do_not_silence" msgid="6878060322594892441">"मौन ना करें"</string>
     <string name="do_not_silence_block" msgid="4070647971382232311">"मौन या अवरुद्ध ना करें"</string>
-    <string name="tuner_full_importance_settings" msgid="3207312268609236827">"पावर नोटिफ़िकेशन नियंत्रण"</string>
+    <string name="tuner_full_importance_settings" msgid="3207312268609236827">"पावर सूचना नियंत्रण"</string>
     <string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"चालू"</string>
     <string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"बंद"</string>
-    <string name="power_notification_controls_description" msgid="4372459941671353358">"पावर नोटिफ़िकेशन नियंत्रण के ज़रिये, आप किसी ऐप के नोटिफ़िकेशन को उसकी अहमियत के हिसाब से 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="7506845022070889909">"नोटिफ़िकेशन"</string>
-    <string name="notification_channel_disabled" msgid="2139193533791840539">"अब आपको ये नोटिफ़िकेशन नहीं मिलेंगे"</string>
-    <string name="notification_num_channels" msgid="2048144408999179471">"नोटिफ़िकेशन की <xliff:g id="NUMBER">%d</xliff:g> श्रेणियां"</string>
-    <string name="notification_default_channel_desc" msgid="2506053815870808359">"इस ऐप्लिकेशन में नोटिफ़िकेशन श्रेणियां नहीं हैं"</string>
-    <string name="notification_unblockable_desc" msgid="3561016061737896906">"इस ऐप्लिकेशन के नोटिफ़िकेशन बंद नहीं किए जा सकते"</string>
+    <string name="power_notification_controls_description" msgid="4372459941671353358">"पावर सूचना नियंत्रण के ज़रिये, आप किसी ऐप की सूचना को उसकी अहमियत के हिसाब से 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="7506845022070889909">"सूचना"</string>
+    <string name="notification_channel_disabled" msgid="2139193533791840539">"अब आपको ये सूचनाएं नहीं मिलेंगी"</string>
+    <string name="notification_num_channels" msgid="2048144408999179471">"सूचना की <xliff:g id="NUMBER">%d</xliff:g> श्रेणियां"</string>
+    <string name="notification_default_channel_desc" msgid="2506053815870808359">"इस ऐप्लिकेशन में सूचना श्रेणियां नहीं हैं"</string>
+    <string name="notification_unblockable_desc" msgid="3561016061737896906">"इस ऐप की सूचनाएं बंद नहीं की जा सकती"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">इस ऐप्लिकेशन की <xliff:g id="NUMBER_1">%d</xliff:g> नोटिफ़िकेशन श्रेणियों में से 1 श्रेणी</item>
-      <item quantity="other">इस ऐप्लिकेशन की <xliff:g id="NUMBER_1">%d</xliff:g> नोटिफ़िकेशन श्रेणियों में से 1 श्रेणी</item>
+      <item quantity="one">इस ऐप की <xliff:g id="NUMBER_1">%s</xliff:g> सूचना श्रेणियों में से 1 श्रेणी</item>
+      <item quantity="other">इस ऐप की <xliff:g id="NUMBER_1">%s</xliff:g> सूचना श्रेणियों में से 1 श्रेणी</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
       <item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> और <xliff:g id="NUMBER_5">%3$d</xliff:g> अन्य</item>
       <item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> और <xliff:g id="NUMBER_5">%3$d</xliff:g> अन्य</item>
     </plurals>
-    <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए नोटिफ़िकेशन नियंत्रण चालू हैं"</string>
-    <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए नोटिफ़िकेशन नियंत्रण बंद हैं"</string>
-    <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"इस चैनल से नोटिफ़िकेशन की अनुमति दें"</string>
+    <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए सूचना नियंत्रण चालू हैं"</string>
+    <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए सूचना नियंत्रण बंद हैं"</string>
+    <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"इस चैनल से सूचना की पाने की मंज़ूरी दें"</string>
     <string name="notification_all_categories" msgid="5407190218055113282">"सभी श्रेणियां"</string>
     <string name="notification_more_settings" msgid="816306283396553571">"और सेटिंग"</string>
-    <string name="notification_app_settings" msgid="3743278649182392015">"कस्टमाइज़ करें: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
+    <string name="notification_app_settings" msgid="3743278649182392015">"अपनी पसंद के मुताबिक बनाएं: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
     <string name="notification_done" msgid="5279426047273930175">"हो गया"</string>
     <string name="notification_menu_accessibility" msgid="2046162834248888553">"<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="2204480013726775108">"नोटिफ़िकेशन नियंत्रण"</string>
-    <string name="notification_menu_snooze_description" msgid="3653669438131034525">"नोटिफ़िकेशन की याद दिलाने के विकल्प"</string>
+    <string name="notification_menu_gear_description" msgid="2204480013726775108">"सूचना नियंत्रण"</string>
+    <string name="notification_menu_snooze_description" msgid="3653669438131034525">"सूचना को स्नूज़ (थोड़ी देर के लिए चुप करना) करने के विकल्प"</string>
     <string name="snooze_undo" msgid="6074877317002985129">"पहले जैसा करें"</string>
     <string name="snoozed_for_time" msgid="2390718332980204462">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> के लिए याद दिलाया गया"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2124335842674413030">
@@ -585,8 +585,8 @@
       <item quantity="other">%d मिनट</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"बैटरी उपयोग"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"चार्ज किए जाने के दौरान बैटरी सेवर उपलब्ध नहीं है"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"बैटरी सेवर"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"चार्ज करते समय बैटरी सेवर उपलब्ध नहीं होता"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"बैटरी सेवर"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"निष्‍पादन और पृष्ठभूमि डेटा को कम करता है"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"बटन <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -615,18 +615,18 @@
     <string name="keyboard_key_num_lock" msgid="5052537581246772117">"Num Lock"</string>
     <string name="keyboard_key_numpad_template" msgid="8729216555174634026">"Numpad <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_shortcut_group_system" msgid="6472647649616541064">"सिस्टम"</string>
-    <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"होम"</string>
+    <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"होम पेज"</string>
     <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"हाल ही के"</string>
     <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"वापस जाएं"</string>
-    <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"नोटिफ़िकेशन"</string>
+    <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"सूचनाएं"</string>
     <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"कीबोर्ड शॉर्टकट"</string>
-    <string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"इनपुट पद्धति‍ बदलें"</string>
+    <string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"इनपुट का तरीका बदलें"</string>
     <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"ऐप्लिकेशन"</string>
     <string name="keyboard_shortcut_group_applications_assist" msgid="9095441910537146013">"सहायक"</string>
     <string name="keyboard_shortcut_group_applications_browser" msgid="6465985474000766533">"ब्राउज़र"</string>
     <string name="keyboard_shortcut_group_applications_contacts" msgid="2064197111278436375">"संपर्क"</string>
     <string name="keyboard_shortcut_group_applications_email" msgid="6257036897441939004">"ईमेल"</string>
-    <string name="keyboard_shortcut_group_applications_sms" msgid="638701213803242744">"SMS करें"</string>
+    <string name="keyboard_shortcut_group_applications_sms" msgid="638701213803242744">"मैसेज (एसएमएस) करें"</string>
     <string name="keyboard_shortcut_group_applications_music" msgid="4775559515850922780">"संगीत"</string>
     <string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"YouTube"</string>
     <string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"कैलेंडर"</string>
@@ -662,28 +662,28 @@
     <item msgid="586019486955594690">"दाएं झुका हुआ"</item>
   </string-array>
     <string name="menu_ime" msgid="4998010205321292416">"कीबोर्ड स्विचर"</string>
-    <string name="save" msgid="2311877285724540644">"सहेजें"</string>
+    <string name="save" msgid="2311877285724540644">"सेव करें"</string>
     <string name="reset" msgid="2448168080964209908">"रीसेट करें"</string>
     <string name="adjust_button_width" msgid="6138616087197632947">"बटन की चौड़ाई समायोजित करें"</string>
     <string name="clipboard" msgid="1313879395099896312">"क्लिपबोर्ड"</string>
-    <string name="accessibility_key" msgid="5701989859305675896">"कस्‍टम मार्गदर्शक बटन"</string>
+    <string name="accessibility_key" msgid="5701989859305675896">"आपके मुताबिक नेविगेट करने के लिए बटन"</string>
     <string name="left_keycode" msgid="2010948862498918135">"बायां कुंजी कोड"</string>
     <string name="right_keycode" msgid="708447961000848163">"दायां कुंजी कोड"</string>
-    <string name="left_icon" msgid="3096287125959387541">"बायां आइकन"</string>
-    <string name="right_icon" msgid="3952104823293824311">"दायां आइकन"</string>
+    <string name="left_icon" msgid="3096287125959387541">"बायां आइकॉन"</string>
+    <string name="right_icon" msgid="3952104823293824311">"दायां आइकॉन"</string>
     <string name="drag_to_add_tiles" msgid="7058945779098711293">"टाइलों को जोड़ने के लिए खींचें और छोड़ें"</string>
     <string name="drag_to_remove_tiles" msgid="3361212377437088062">"हटाने के लिए यहां खींचें और छोड़ें"</string>
-    <string name="qs_edit" msgid="2232596095725105230">"संपादित करें"</string>
+    <string name="qs_edit" msgid="2232596095725105230">"बदलाव करें"</string>
     <string name="tuner_time" msgid="6572217313285536011">"समय"</string>
   <string-array name="clock_options">
     <item msgid="5965318737560463480">"घंटे, मिनट और सेकंड दिखाएं"</item>
     <item msgid="1427801730816895300">"घंटे और मिनट दिखाएं (डिफ़ॉल्ट)"</item>
-    <item msgid="3830170141562534721">"यह आइकन ना दिखाएं"</item>
+    <item msgid="3830170141562534721">"इस आइकॉन को ना दिखाएं"</item>
   </string-array>
   <string-array name="battery_options">
     <item msgid="3160236755818672034">"हमेशा प्रतिशत दिखाएं"</item>
     <item msgid="2139628951880142927">"चार्ज होते समय प्रतिशत दिखाएं (डिफ़ॉल्ट)"</item>
-    <item msgid="3327323682209964956">"यह आइकन ना दिखाएं"</item>
+    <item msgid="3327323682209964956">"इस आइकॉन को ना दिखाएं"</item>
   </string-array>
     <string name="other" msgid="4060683095962566764">"अन्य"</string>
     <string name="accessibility_divider" msgid="5903423481953635044">"विभाजित स्क्रीन विभाजक"</string>
@@ -697,16 +697,16 @@
     <string name="accessibility_action_divider_top_50" msgid="6385859741925078668">"ऊपर की स्क्रीन को 50% बनाएं"</string>
     <string name="accessibility_action_divider_top_30" msgid="6201455163864841205">"ऊपर की स्क्रीन को 30% बनाएं"</string>
     <string name="accessibility_action_divider_bottom_full" msgid="301433196679548001">"नीचे की स्क्रीन को पूर्ण स्क्रीन बनाएं"</string>
-    <string name="accessibility_qs_edit_tile_label" msgid="8374924053307764245">"स्थिति <xliff:g id="POSITION">%1$d</xliff:g>, <xliff:g id="TILE_NAME">%2$s</xliff:g>. संपादित करने के लिए डबल टैप करें."</string>
-    <string name="accessibility_qs_edit_add_tile_label" msgid="8133209638023882667">"<xliff:g id="TILE_NAME">%1$s</xliff:g>. जोड़ने के लिए डबल टैप करें."</string>
-    <string name="accessibility_qs_edit_position_label" msgid="5055306305919289819">"स्थिति <xliff:g id="POSITION">%1$d</xliff:g>. चुनने के लिए डबल टैप करें."</string>
+    <string name="accessibility_qs_edit_tile_label" msgid="8374924053307764245">"स्थिति <xliff:g id="POSITION">%1$d</xliff:g>, <xliff:g id="TILE_NAME">%2$s</xliff:g>. में बदलाव करने के लिए दो बार छूएं."</string>
+    <string name="accessibility_qs_edit_add_tile_label" msgid="8133209638023882667">"<xliff:g id="TILE_NAME">%1$s</xliff:g>. जोड़ने के लिए दो बार छूएं."</string>
+    <string name="accessibility_qs_edit_position_label" msgid="5055306305919289819">"स्थिति <xliff:g id="POSITION">%1$d</xliff:g>. चुनने के लिए दो बार छूएं."</string>
     <string name="accessibility_qs_edit_move_tile" msgid="2461819993780159542">"<xliff:g id="TILE_NAME">%1$s</xliff:g> को ले जाएं"</string>
     <string name="accessibility_qs_edit_remove_tile" msgid="7484493384665907197">"<xliff:g id="TILE_NAME">%1$s</xliff:g> निकालें"</string>
     <string name="accessibility_qs_edit_tile_added" msgid="8050200862063548309">"<xliff:g id="TILE_NAME">%1$s</xliff:g> को <xliff:g id="POSITION">%2$d</xliff:g> स्थिति में जोड़ा गया"</string>
     <string name="accessibility_qs_edit_tile_removed" msgid="8584304916627913440">"<xliff:g id="TILE_NAME">%1$s</xliff:g> निकाल दिया गया है"</string>
     <string name="accessibility_qs_edit_tile_moved" msgid="4343693412689365038">"<xliff:g id="TILE_NAME">%1$s</xliff:g> को <xliff:g id="POSITION">%2$d</xliff:g> स्थिति में ले जाया गया"</string>
     <string name="accessibility_desc_quick_settings_edit" msgid="8073587401747016103">"त्वरित सेटिंग संपादक."</string>
-    <string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> नोटिफ़िकेशन: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
+    <string name="accessibility_desc_notification_icon" msgid="8352414185263916335">"<xliff:g id="ID_1">%1$s</xliff:g> सूचना: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
     <string name="dock_forced_resizable" msgid="5914261505436217520">"हो सकता है कि ऐप्लिकेशन विभाजित स्क्रीन के साथ काम ना करे."</string>
     <string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"ऐप विभाजित स्‍क्रीन का समर्थन नहीं करता है."</string>
     <string name="forced_resizable_secondary_display" msgid="4230857851756391925">"हो सकता है कि ऐप प्राइमरी (मुख्य) डिस्प्ले के अलावा बाकी दूसरे डिस्प्ले पर काम न करे."</string>
@@ -719,16 +719,16 @@
     <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"कोई इंटरनेट नहीं."</string>
     <string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"विवरण खोलें."</string>
     <string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> सेटिंग खोलें."</string>
-    <string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"सेटिंग का क्रम संपादित करें."</string>
+    <string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"सेटिंग के क्रम को बदलें"</string>
     <string name="accessibility_quick_settings_page" msgid="5032979051755200721">"पेज <xliff:g id="ID_2">%2$d</xliff:g> में से <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="5755818559638850294">"लॉक स्‍क्रीन"</string>
-    <string name="pip_phone_expand" msgid="5889780005575693909">"विस्तृत करें"</string>
+    <string name="pip_phone_expand" msgid="5889780005575693909">"विस्तार करें"</string>
     <string name="pip_phone_minimize" msgid="1079119422589131792">"छोटा करें"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"बंद करें"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"खारिज करने के लिए नीचे खींचें और छोड़ें"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"चित्र में चित्र मेनू"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"मेन्यू"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> पिक्चर में पिक्चर के अंदर है"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"अगर आप नहीं चाहते कि <xliff:g id="NAME">%s</xliff:g> इस सुविधा का उपयोग करे, तो सेटिंग खोलने और उसे बंद करने के लिए टैप करें."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"अगर आप नहीं चाहते कि <xliff:g id="NAME">%s</xliff:g> इस सुविधा का उपयोग करे, तो सेटिंग खोलने के लिए टैप करें और उसे बंद करें ."</string>
     <string name="pip_play" msgid="1417176722760265888">"चलाएं"</string>
     <string name="pip_pause" msgid="8881063404466476571">"रोकें"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"अगले पर जाएं"</string>
@@ -751,9 +751,10 @@
     <string name="tuner_minus" msgid="4806116839519226809">"घटाने का चिह्न"</string>
     <string name="tuner_left" msgid="8404287986475034806">"बायां"</string>
     <string name="tuner_right" msgid="6222734772467850156">"दायां"</string>
-    <string name="tuner_menu" msgid="191640047241552081">"मेनू"</string>
+    <string name="tuner_menu" msgid="191640047241552081">"मेन्यू"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> ऐप"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"सूचनाएं"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"बैटरी"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"स्‍क्रीनशॉट"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"सामान्य संदेश"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"जगह"</string>
@@ -772,6 +773,7 @@
     <string name="qs_dnd_keep" msgid="1825009164681928736">"रखें"</string>
     <string name="qs_dnd_replace" msgid="8019520786644276623">"बदलें"</string>
     <string name="running_foreground_services_title" msgid="381024150898615683">"बैकग्राउंड में चल रहे ऐप्लिकेशन"</string>
-    <string name="running_foreground_services_msg" msgid="6326247670075574355">"बैटरी और डेटा खर्च की जानकारी के लिए टैप करें"</string>
+    <string name="running_foreground_services_msg" msgid="6326247670075574355">"बैटरी और डेटा खर्च की जानकारी के लिए छूएं"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"मोबाइल डेटा बंद करना चाहते हैं?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"ऐप की वजह से मंज़ूरी के अनुरोध को समझने में दिक्कत हो रही है, इसलिए सेटिंग से आपके जवाब की पुष्टि नहीं हो पा रही है."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hi/strings_tv.xml b/packages/SystemUI/res/values-hi/strings_tv.xml
index 5e65e46..357f7a6 100644
--- a/packages/SystemUI/res/values-hi/strings_tv.xml
+++ b/packages/SystemUI/res/values-hi/strings_tv.xml
@@ -19,7 +19,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_channel_tv_pip" msgid="134047986446577723">"स्क्रीन में स्क्रीन"</string>
+    <string name="notification_channel_tv_pip" msgid="134047986446577723">"पिक्चर में पिक्चर"</string>
     <string name="pip_notification_unknown_title" msgid="6289156118095849438">"(कोई शीर्षक कार्यक्रम नहीं)"</string>
     <string name="pip_close" msgid="3480680679023423574">"PIP बंद करें"</string>
     <string name="pip_fullscreen" msgid="8604643018538487816">"पूर्ण स्‍क्रीन"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 9f187bd..adb41b3 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -65,7 +65,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Otisak prsta RSA ključa računala je: \n <xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Uvijek dopusti s ovog računala"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Otklanjanje pogrešaka putem USB-a nije dopušteno"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Korisnik koji je trenutačno prijavljen na ovaj uređaj ne može uključiti otklanjanje pogrešaka putem USB-a. Da biste upotrebljavali tu značajku, prijeđite na korisnika koji je administrator."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Korisnik koji je trenutačno prijavljen na ovaj uređaj ne može uključiti otklanjanje pogrešaka putem USB-a. Da biste upotrebljavali tu značajku, prijeđite na primarnog korisnika."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zumiraj i ispuni zaslon"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Rastegni i ispuni zaslon"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Spremanje snimke zaslona..."</string>
@@ -235,8 +235,8 @@
     <string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"Način rada uključen."</string>
     <string name="accessibility_quick_settings_work_mode_changed_off" msgid="5605534876107300711">"Način rada isključen."</string>
     <string name="accessibility_quick_settings_work_mode_changed_on" msgid="249840330756998612">"Način rada uključen."</string>
-    <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"Ušteda podataka isključena."</string>
-    <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"Ušteda podataka uključena."</string>
+    <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"Štednja podatkovnog prometa isključena."</string>
+    <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"Štednja podatkovnog prometa uključena."</string>
     <string name="accessibility_brightness" msgid="8003681285547803095">"Svjetlina zaslona"</string>
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Punjenje"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G – 3G podaci pauzirani"</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Pretraživanje"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Kliznite prema gore za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Kliznite lijevo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Neće vas ometati zvukovi i vibracije, osim alarma, podsjetnika, događaja i pozivatelja koje navedete. I dalje ćete čuti sve što želite reproducirati, uključujući glazbu, videozapise i igre."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Neće vas ometati zvukovi i vibracije, osim alarma. I dalje ćete čuti sve što želite reproducirati, uključujući glazbu, videozapise i igre."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Neće vas ometati zvukovi i vibracije, osim alarma, podsjetnika, događaja i pozivatelja koje navedete. I dalje ćete čuti sve što želite reproducirati, uključujući glazbu, videozapise i igre."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Neće vas ometati zvukovi i vibracije, osim alarma. I dalje ćete čuti sve što želite reproducirati, uključujući glazbu, videozapise i igre."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Prilagodi"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"To blokira SVE zvukove i vibracije, uključujući alarme, glazbu, videozapise i igre. I dalje ćete moći telefonirati."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"To blokira SVE zvukove i vibracije, uključujući alarme, glazbu, videozapise i igre. I dalje ćete moći telefonirati."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"To blokira SVE zvukove i vibracije, uključujući alarme, glazbu, videozapise i igre."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Manje hitne obavijesti pri dnu"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saznajte više"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Povezani ste s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g> koja može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otvorite postavke VPN-a"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Otvorite postavke VPN-a"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Otvorite pouzdane vjerodajnice"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Administrator je uključio mrežni zapisnik koji prati promet na vašem uređaju.\n\nViše informacija možete saznati od administratora."</string>
@@ -558,9 +558,9 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Ova aplikacija nema kategorije obavijesti"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Obavijesti ove aplikacije ne mogu se isključiti"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 od <xliff:g id="NUMBER_1">%d</xliff:g> kategorije obavijesti iz ove aplikacije</item>
-      <item quantity="few">1 od <xliff:g id="NUMBER_1">%d</xliff:g> kategorije obavijesti iz ove aplikacije</item>
-      <item quantity="other">1 od <xliff:g id="NUMBER_1">%d</xliff:g> kategorija obavijesti iz ove aplikacije</item>
+      <item quantity="one">1 od <xliff:g id="NUMBER_1">%s</xliff:g> kategorije obavijesti iz ove aplikacije</item>
+      <item quantity="few">1 od <xliff:g id="NUMBER_1">%s</xliff:g> kategorije obavijesti iz ove aplikacije</item>
+      <item quantity="other">1 od <xliff:g id="NUMBER_1">%s</xliff:g> kategorija obavijesti iz ove aplikacije</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -591,8 +591,8 @@
       <item quantity="other">%d minuta</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Potrošnja baterije"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Štednja baterije nije dostupna tijekom punjenja"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Štednja baterije"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Štednja baterije nije dostupna tijekom punjenja"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Štednja baterije"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Smanjuje količinu rada i pozadinske podatke"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Tipka <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Početak"</string>
@@ -645,9 +645,9 @@
     <string name="headset" msgid="4534219457597457353">"Slušalice"</string>
     <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Slušalice su povezane"</string>
     <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Slušalice su povezane"</string>
-    <string name="data_saver" msgid="5037565123367048522">"Ušteda podataka"</string>
-    <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Ušteda podataka je uključena"</string>
-    <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Ušteda podataka je isključena"</string>
+    <string name="data_saver" msgid="5037565123367048522">"Štednja podatkovnog prometa"</string>
+    <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Štednja podatkovnog prometa je uključena"</string>
+    <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Štednja podatkovnog prometa je isključena"</string>
     <string name="switch_bar_on" msgid="1142437840752794229">"Uključeno"</string>
     <string name="switch_bar_off" msgid="8803270596930432874">"Isključeno"</string>
     <string name="nav_bar" msgid="1993221402773877607">"Navigacijska traka"</string>
@@ -732,9 +732,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimiziraj"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Zatvori"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Povucite prema dolje da biste odbacili"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Izbornik slike u slici"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Izbornik"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> jest na slici u slici"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Ako ne želite da aplikacija <xliff:g id="NAME">%s</xliff:g> upotrebljava tu značajku, dodirnite da biste otvorili postavke i isključili je."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Ako ne želite da aplikacija <xliff:g id="NAME">%s</xliff:g> upotrebljava tu značajku, dodirnite da biste otvorili postavke i isključili je."</string>
     <string name="pip_play" msgid="1417176722760265888">"Reproduciraj"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pauziraj"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Preskoči na sljedeće"</string>
@@ -760,6 +760,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Izbornik"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplikacija <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Upozorenja"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Baterija"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Snimke zaslona"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Općenite poruke"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Pohrana"</string>
@@ -780,4 +781,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Izvođenje aplikacija u pozadini"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Dodirnite da biste vidjeli pojedinosti o potrošnji baterije i podatkovnom prometu"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Isključiti mobilne podatke?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Budući da aplikacija prekriva zahtjev za dopuštenje, Postavke ne mogu potvrditi vaš odgovor."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 2aeaeca..609992f 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"A számítógép RSA kulcs ujjlenyomata:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Mindig engedélyezze erről a számítógépről"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Az USB hibakeresése nem engedélyezett"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Az eszközre jelenleg bejelentkezett felhasználó nem kapcsolhatja be az USB hibakeresését. A funkció használatához váltson rendszergazda felhasználóra."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Az eszközre jelenleg bejelentkezett felhasználó nem engedélyezheti az USB-hibakeresést. A funkció használatához váltson az elsődleges felhasználóra."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Nagyítás a kitöltéshez"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Nyújtás kitöltéshez"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Képernyőkép mentése..."</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Keresés"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa felfelé."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa balra."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Az Ön által meghatározott ébresztéseken, emlékeztetőkön, eseményeken és hívókon kívül nem fogja Önt más hang vagy rezgés megzavarni. Továbbra is lesz hangjuk azoknak a tartalmaknak, amelyeket Ön elindít, például zenék, videók és játékok."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Az ébresztéseken kívül nem fogja Önt más hang és rezgés megzavarni. Továbbra is lesz hangjuk azoknak a tartalmaknak, amelyeket Ön elindít, például zenék, videók és játékok."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Az Ön által meghatározott ébresztéseken, emlékeztetőkön, eseményeken és hívókon kívül nem fogja Önt más hang vagy rezgés megzavarni. Továbbra is lesz hangjuk azoknak a tartalmaknak, amelyeket Ön elindít, például zenék, videók és játékok."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Az ébresztéseken kívül nem fogja Önt más hang és rezgés megzavarni. Továbbra is lesz hangjuk azoknak a tartalmaknak, amelyeket Ön elindít, például zenék, videók és játékok."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Személyre szabás"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Ez letiltja az ÖSSZES hanghatást és rezgést, beleértve az ébresztések, zeneszámok, videók és játékok hangjait is. Telefonhívást továbbra is indíthat majd."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Ez letiltja az ÖSSZES hangot és rezgést, beleértve az ébresztések, zeneszámok, videók és játékok hangjait is. Telefonhívást továbbra is indíthat majd."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Ez letiltja az ÖSSZES hanghatást és rezgést, beleértve az ébresztések, zeneszámok, videók és játékok hangjait is."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"A kevésbé sürgős értesítések lentebb vannak"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"További információ"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Ön kapcsolódik ehhez: <xliff:g id="VPN_APP">%1$s</xliff:g>, amely figyelheti hálózati tevékenységét, köztük a levelezést, az alkalmazás- és webhelyhasználatot."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN-beállítások megnyitása"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN-beállítások megnyitása"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Megbízható hitelesítési adatok megnyitása"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"A rendszergazda bekapcsolta az eszköz forgalmát figyelő hálózati naplózást.\n\nHa további információra van szüksége, forduljon a rendszergazdához."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Az alkalmazás nem rendelkezik értesítési kategóriákkal"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Az alkalmazástól érkező értesítések nem kapcsolhatók ki"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other"><xliff:g id="NUMBER_1">%d</xliff:g>/1 értesítési kategória az alkalmazásból</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g>/1 értesítési kategória az alkalmazásból</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g>/1 értesítési kategória az alkalmazásból</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g>/1 értesítési kategória az alkalmazásból</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d perc</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Akkumulátorhasználat"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Az Akkumulátorkímélő módot töltés közben nem lehet használni"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Akkumulátorkímélő mód"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Az Akkumulátorkímélő módot töltés közben nem lehet használni"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Akkumulátorkímélő mód"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Csökkenti a teljesítményt és a háttéradatok használatát"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> gomb"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Kezdőképernyő"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Kis méret"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Bezárás"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Elvetéshez húzza lefelé"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Kép a képben menü"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menü"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"A(z) <xliff:g id="NAME">%s</xliff:g> kép a képben funkciót használ"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Ha nem szeretné, hogy a(z) <xliff:g id="NAME">%s</xliff:g> használja ezt a funkciót, koppintson a beállítások megnyitásához, és kapcsolja ki."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Ha nem szeretné, hogy a(z) <xliff:g id="NAME">%s</xliff:g> használja ezt a funkciót, koppintson a beállítások megnyitásához, és kapcsolja ki."</string>
     <string name="pip_play" msgid="1417176722760265888">"Lejátszás"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Szüneteltetés"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Ugrás a következőre"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menü"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> alkalmazás"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Értesítések"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Akkumulátor"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Képernyőképek"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Általános üzenetek"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Tárhely"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"A háttérben még futnak alkalmazások"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Koppintson az akkumulátor- és adathasználat részleteinek megtekintéséhez"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Kikapcsolja a mobiladatokat?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Mivel az egyik alkalmazás eltakarja az engedélykérést, a Beállítások alkalmazás nem tudja ellenőrizni az Ön válaszát."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index 28af5b3..bca615e 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -64,11 +64,11 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Համակարգչի RSA-ի բանալի մատնահետքն է`\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Միշտ թույլատրել այս համակարգչից"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB վրիպազերծումը արգելված է"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Սարքի վրա այս պահին մուտք գործած օգտատերը չի կարող միացնել USB վրիպազերծումը: Այս գործառույթից օգտվելու համար մուտք գործեք ադմինիստրատորի հաշվով:"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Ընթացիկ հաշվի օգտատերը չի կարող միացնել USB վրիպազերծումը: Այս գործառույթը միացնելու համար մուտք գործեք հիմնական օգտատիրոջ հաշվով:"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Խոշորացնել` էկրանը լցնելու համար"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Ձգել` էկրանը լցնելու համար"</string>
-    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Պահում է էկրանի պատկերը…"</string>
-    <string name="screenshot_saving_title" msgid="8242282144535555697">"Պահում է էկրանի պատկերը..."</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Էկրանի պատկերը պահվում է…"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"Էկրանի պատկերը պահվում է..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Էկրանի պատկերը պահվում է:"</string>
     <string name="screenshot_saved_title" msgid="6461865960961414961">"Էկրանի պատկերը լուսանկարվել է:"</string>
     <string name="screenshot_saved_text" msgid="2685605830386712477">"Հպեք՝ էկրանի պատկերը տեսնելու համար:"</string>
@@ -290,7 +290,7 @@
     <string name="quick_settings_settings_label" msgid="5326556592578065401">"Կարգավորումներ"</string>
     <string name="quick_settings_time_label" msgid="4635969182239736408">"Ժամանակը"</string>
     <string name="quick_settings_user_label" msgid="5238995632130897840">"Ես"</string>
-    <string name="quick_settings_user_title" msgid="4467690427642392403">"Օտատեր"</string>
+    <string name="quick_settings_user_title" msgid="4467690427642392403">"Օգտատեր"</string>
     <string name="quick_settings_user_new_user" msgid="9030521362023479778">"Նոր օգտատեր"</string>
     <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Միացված չէ"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Որոնել"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Սահեցրեք վերև <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Սահեցրեք ձախ` <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Ձայները և թրթռոցները չեն անհանգստացնի ձեզ, բացի ձեր կողմից նշված զարթուցիչները, հիշեցումները, միջոցառումների ծանուցումները և զանգերը։ Դուք կլսեք ձեր ընտրածի նվագարկումը, այդ թվում՝ երաժշտություն, տեսանյութեր և խաղեր:"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Ձայները և թրթռոցները, բացի զարթուցիչներից, չեն անհանգստացնի ձեզ: Դուք կլսեք ձեր ընտրածի նվագարկումը, այդ թվում՝ երաժշտություն, տեսանյութեր և խաղեր:"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Ձայները և թրթռոցները չեն անհանգստացնի ձեզ, բացի ձեր կողմից նշված զարթուցիչները, հիշեցումները, միջոցառումների ծանուցումները և զանգերը։ Դուք կլսեք ձեր ընտրածի նվագարկումը, այդ թվում՝ երաժշտություն, տեսանյութեր և խաղեր:"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Ձայները և թրթռոցները, բացի զարթուցիչներից, չեն անհանգստացնի ձեզ: Դուք կլսեք ձեր ընտրածի նվագարկումը, այդ թվում՝ երաժշտություն, տեսանյութեր և խաղեր:"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Հարմարեցնել"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Այս գործողությունն արգելափակում է ԲՈԼՈՐ ձայներն ու թրթռոցները, այդ թվում զարթուցիչները, երաժշտությունը, տեսանյութերի և խաղերի ձայները: Դուք կկարողանաք հեռախոսազանգեր անել։"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Այս գործողությունն արգելափակում է ԲՈԼՈՐ ձայներն ու թրթռոցները, այդ թվում զարթուցիչները, երաժշտությունը, տեսանյութերի և խաղերի ձայները: Դուք կկարողանաք հեռախոսազանգեր անել։"</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Այս գործողությունն արգելափակում է ԲՈԼՈՐ ձայներն ու թրթռոցները, այդ թվում նաև զարթուցիչների, երաժշտության, տեսանյութերի և խաղերի ձայներն ու թրթռոցները:"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Պակաս հրատապ ծանուցումները ստորև"</string>
@@ -384,7 +384,7 @@
     <string name="user_add_user" msgid="5110251524486079492">"Ավելացնել օգտատեր"</string>
     <string name="user_new_user_name" msgid="426540612051178753">"Նոր օգտատեր"</string>
     <string name="guest_nickname" msgid="8059989128963789678">"Հյուր"</string>
-    <string name="guest_new_guest" msgid="600537543078847803">"Հյուր ավելացնել"</string>
+    <string name="guest_new_guest" msgid="600537543078847803">"Ավելացնել հյուր"</string>
     <string name="guest_exit_guest" msgid="7187359342030096885">"Հեռացնել հյուրին"</string>
     <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"Հեռացնե՞լ հյուրին:"</string>
     <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"Այս աշխատաշրջանի բոլոր ծրագրերն ու տվյալները կջնջվեն:"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Իմանալ ավելին"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Դուք կապակցված եք <xliff:g id="VPN_APP">%1$s</xliff:g> հավելվածին, որը կարող է վերահսկել ձեր ցանցային գործողությունը, այդ թվում նաև էլփոստը, հավելվածները և կայքերը:"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Բացել VPN-ի կարգավորումները"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Բացել VPN-ի կարգավորումները"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Բացել վստահելի հավատարմագրերը"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Ձեր ադմինիստրատորը միացրել է ցանցային իրադարձությունների գրանցումը, որը վերահսկում է ձեր սարքի թրաֆիկը։\n\nԼրացուցիչ տեղեկություններ ստանալու համար դիմեք ձեր ադմինիստրատորին։"</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Այս հավելվածը ծանուցման կատեգորիաներ չունի"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Այս հավելվածի ծանուցումները հնարավոր չէ անջատել"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 out of <xliff:g id="NUMBER_1">%d</xliff:g> notification categories from this app</item>
-      <item quantity="other">1 ալիք` այս հավելվածի <xliff:g id="NUMBER_1">%d</xliff:g> կատեգորիաներից</item>
+      <item quantity="one">1 out of <xliff:g id="NUMBER_1">%s</xliff:g> notification categories from this app</item>
+      <item quantity="other">1 ալիք` այս հավելվածի <xliff:g id="NUMBER_1">%s</xliff:g> կատեգորիաներից</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="other">%d րոպե</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Մարտկոցի օգտագործում"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Մարտկոցի տնտեսումը լիցքավորման ժամանակ հասանելի չէ"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Մարտկոցի տնտեսում"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Մարտկոցի էներգախնայիչը լիցքավորման ժամանակ հասանելի չէ"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Մարտկոցի էներգախնայիչ"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Նվազեցնում է ծանրաբեռնվածությունը և ֆոնային տվյալները"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> կոճակ"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Գլխավոր էջ"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Ծալել"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Փակել"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Քաշեք վար՝ փակելու համար"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"«Նկար նկարի մեջ» ռեժիմի ընտրացանկ"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Ընտրացանկ"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g>-ը «Նկար նկարի մեջ» ռեժիմում է"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Եթե չեք ցանկանում, որ <xliff:g id="NAME">%s</xliff:g>-ն օգտագործի այս գործառույթը, հպեք՝ կարգավորումները բացելու և այն անջատելու համար։"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Եթե չեք ցանկանում, որ <xliff:g id="NAME">%s</xliff:g>-ն օգտագործի այս գործառույթը, հպեք՝ կարգավորումները բացելու և այն անջատելու համար։"</string>
     <string name="pip_play" msgid="1417176722760265888">"Նվագարկել"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Դադարեցնել"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Անցնել հաջորդին"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Ընտրացանկ"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> հավելված"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Ծանուցումներ"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Մարտկոց"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Էկրանի պատկերներ"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Ընդհանուր հաղորդագրություններ"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Տարածք"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Ֆոնային ռեժիմում աշխատող հավելվածներ"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Հպեք՝ մարտկոցի և թրաֆիկի մանրամասները տեսնելու համար"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Անջատե՞լ բջջային ինտերնետը։"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Քանի որ ներածումն արգելափակված է ինչ-որ հավելվածի կողմից, Կարգավորումները չեն կարող հաստատել ձեր պատասխանը:"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index a66591a..af047fb 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Sidik jari kunci RSA komputer adalah:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Selalu izinkan dari komputer ini"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Debug USB tidak diizinkan"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Pengguna yang saat ini masuk ke perangkat ini tidak dapat mengaktifkan debug USB. Untuk menggunakan fitur ini, beralih ke pengguna Admin."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Pengguna yang sedang login ke perangkat ini tidak dapat mengaktifkan proses debug USB. Beralihlah ke pengguna utama untuk menggunakan fitur ini."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Perbesar utk mengisi layar"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Rentangkn utk mngisi layar"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Menyimpan screenshot..."</string>
@@ -234,8 +234,8 @@
     <string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"Mode kerja aktif."</string>
     <string name="accessibility_quick_settings_work_mode_changed_off" msgid="5605534876107300711">"Mode kerja dinonaktifkan."</string>
     <string name="accessibility_quick_settings_work_mode_changed_on" msgid="249840330756998612">"Mode kerja diaktifkan."</string>
-    <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"Penghemat Data nonaktif."</string>
-    <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"Penghemat Data diaktifkan."</string>
+    <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"Penghemat Kuota Internet nonaktif."</string>
+    <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"Penghemat Kuota Internet diaktifkan."</string>
     <string name="accessibility_brightness" msgid="8003681285547803095">"Kecerahan tampilan"</string>
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Mengisi daya"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Data 2G-3G dijeda"</string>
@@ -298,7 +298,7 @@
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Mati"</string>
     <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi Aktif"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Tidak ada jaringan Wi-Fi yang tersedia"</string>
-    <string name="quick_settings_cast_title" msgid="7709016546426454729">"Transmisi"</string>
+    <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string>
     <string name="quick_settings_casting" msgid="6601710681033353316">"Melakukan transmisi"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Perangkat tanpa nama"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Siap melakukan transmisi"</string>
@@ -336,7 +336,7 @@
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Tidak dapat memulai <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> dinonaktifkan dalam mode aman."</string>
     <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Hapus semua"</string>
-    <string name="recents_drag_hint_message" msgid="2649739267073203985">"Seret ke sini untuk menggunakan layar terpisah"</string>
+    <string name="recents_drag_hint_message" msgid="2649739267073203985">"Tarik ke sini untuk menggunakan layar terpisah"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Pisahkan Horizontal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Pisahkan Vertikal"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Pisahkan Khusus"</string>
@@ -353,20 +353,20 @@
     <string name="description_target_search" msgid="3091587249776033139">"Telusuri"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Geser ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Geser ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Anda tidak akan terganggu oleh suara dan getaran, kecuali dari alarm, pengingat, acara, dan penelepon yang Anda tentukan. Anda akan tetap mendengar apa pun yang telah dipilih untuk diputar, termasuk musik, video, dan game."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Anda tidak akan terganggu oleh suara dan getaran, kecuali dari alarm. Anda akan tetap mendengar apa pun yang telah dipilih untuk diputar, termasuk musik, video, dan game."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Anda tidak akan terganggu oleh suara dan getaran, kecuali dari alarm, pengingat, acara, dan penelepon yang Anda tentukan. Anda akan tetap mendengar apa pun yang telah dipilih untuk diputar, termasuk musik, video, dan game."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Anda tidak akan terganggu oleh suara dan getaran, kecuali dari alarm. Anda akan tetap mendengar apa pun yang telah dipilih untuk diputar, termasuk musik, video, dan game."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Sesuaikan"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"SEMUA suara dan getaran, termasuk dari alarm, musik, video, dan game akan diblokir. Anda tetap dapat melakukan panggilan telepon."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"SEMUA suara dan getaran, termasuk dari alarm, musik, video, dan game akan diblokir. Anda tetap dapat melakukan panggilan telepon."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"SEMUA suara dan getaran, termasuk dari alarm, musik, video, dan game akan diblokir."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notifikasi kurang darurat di bawah"</string>
     <string name="notification_tap_again" msgid="7590196980943943842">"Tap lagi untuk membuka"</string>
-    <string name="keyguard_unlock" msgid="8043466894212841998">"Gesek ke atas untuk membuka kunci"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Geser ke atas untuk membuka kunci"</string>
     <string name="do_disclosure_generic" msgid="5615898451805157556">"Perangkat ini dikelola oleh organisasi"</string>
     <string name="do_disclosure_with_name" msgid="5640615509915445501">"Perangkat ini dikelola oleh <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
-    <string name="phone_hint" msgid="4872890986869209950">"Gesek dari ikon untuk telepon"</string>
-    <string name="voice_hint" msgid="8939888732119726665">"Gesek dari ikon untuk mengaktifkan bantuan suara"</string>
-    <string name="camera_hint" msgid="7939688436797157483">"Gesek dari ikon untuk kamera"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"Geser dari ikon untuk telepon"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"Geser dari ikon untuk bantuan suara"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"Geser dari ikon untuk kamera"</string>
     <string name="interruption_level_none_with_warning" msgid="5114872171614161084">"Senyap total. Tindakan ini juga akan mensenyapkan pembaca layar."</string>
     <string name="interruption_level_none" msgid="6000083681244492992">"Senyap total"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Hanya untuk prioritas"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Pelajari lebih lanjut"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Anda tersambung ke <xliff:g id="VPN_APP">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Buka Setelan VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Buka setelan VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Buka kredensial terpercaya"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Admin telah mengaktifkan pencatatan log jaringan, yang memantau traffic di perangkat.\n\nUntuk informasi selengkapnya, hubungi admin."</string>
@@ -502,7 +502,7 @@
     <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Ketuk untuk membisukan. Layanan aksesibilitas mungkin dibisukan."</string>
     <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Tap untuk menyetel agar bergetar."</string>
     <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tap untuk menonaktifkan."</string>
-    <string name="volume_dialog_accessibility_shown_message" msgid="1834631467074259998">"Kontrol volume %s ditampilkan. Gesek ke atas untuk menutup."</string>
+    <string name="volume_dialog_accessibility_shown_message" msgid="1834631467074259998">"Kontrol volume %s ditampilkan. Geser ke atas untuk menutup."</string>
     <string name="volume_dialog_accessibility_dismissed_message" msgid="51543526013711399">"Kontrol volume disembunyikan"</string>
     <string name="system_ui_tuner" msgid="708224127392452018">"Penyetel Antarmuka Pengguna Sistem"</string>
     <string name="show_battery_percentage" msgid="5444136600512968798">"Tampilkan persentase baterai yang tersemat"</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Aplikasi ini tidak memiliki kategori notifikasi"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Notifikasi dari aplikasi ini tidak dapat dinonaktifkan"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 dari <xliff:g id="NUMBER_1">%d</xliff:g> kategori notifikasi dari aplikasi ini</item>
-      <item quantity="one">1 dari <xliff:g id="NUMBER_0">%d</xliff:g> kategori notifikasi dari aplikasi ini</item>
+      <item quantity="other">1 dari <xliff:g id="NUMBER_1">%s</xliff:g> kategori notifikasi dari aplikasi ini</item>
+      <item quantity="one">1 dari <xliff:g id="NUMBER_0">%s</xliff:g> kategori notifikasi dari aplikasi ini</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -574,7 +574,7 @@
     <string name="notification_menu_accessibility" msgid="2046162834248888553">"<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="2204480013726775108">"kontrol notifikasi"</string>
     <string name="notification_menu_snooze_description" msgid="3653669438131034525">"opsi tunda notifikasi"</string>
-    <string name="snooze_undo" msgid="6074877317002985129">"URUNG"</string>
+    <string name="snooze_undo" msgid="6074877317002985129">"URUNGKAN"</string>
     <string name="snoozed_for_time" msgid="2390718332980204462">"Ditunda selama <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2124335842674413030">
       <item quantity="other">%d jam</item>
@@ -585,8 +585,8 @@
       <item quantity="one">%d menit</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Pemakaian baterai"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Penghemat Baterai tidak tersedia selama pengisian daya"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Penghemat Baterai"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Penghemat baterai tidak tersedia selama mengisi daya"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Penghemat baterai"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Mengurangi performa dan data latar belakang"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Tombol <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -639,9 +639,9 @@
     <string name="headset" msgid="4534219457597457353">"Headset"</string>
     <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Headphone terhubung"</string>
     <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset terhubung"</string>
-    <string name="data_saver" msgid="5037565123367048522">"Penghemat Data"</string>
-    <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Penghemat Data aktif"</string>
-    <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Penghemat Data nonaktif"</string>
+    <string name="data_saver" msgid="5037565123367048522">"Penghemat Kuota Internet"</string>
+    <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Penghemat Kuota Internet aktif"</string>
+    <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Penghemat Kuota Internet nonaktif"</string>
     <string name="switch_bar_on" msgid="1142437840752794229">"Aktif"</string>
     <string name="switch_bar_off" msgid="8803270596930432874">"Nonaktif"</string>
     <string name="nav_bar" msgid="1993221402773877607">"Bilah navigasi"</string>
@@ -671,8 +671,8 @@
     <string name="right_keycode" msgid="708447961000848163">"Kode tombol kanan"</string>
     <string name="left_icon" msgid="3096287125959387541">"Ikon kiri"</string>
     <string name="right_icon" msgid="3952104823293824311">"Ikon kanan"</string>
-    <string name="drag_to_add_tiles" msgid="7058945779098711293">"Seret untuk menambahkan ubin"</string>
-    <string name="drag_to_remove_tiles" msgid="3361212377437088062">"Seret ke sini untuk menghapus"</string>
+    <string name="drag_to_add_tiles" msgid="7058945779098711293">"Tarik untuk menambahkan ubin"</string>
+    <string name="drag_to_remove_tiles" msgid="3361212377437088062">"Tarik ke sini untuk menghapus"</string>
     <string name="qs_edit" msgid="2232596095725105230">"Edit"</string>
     <string name="tuner_time" msgid="6572217313285536011">"Waktu"</string>
   <string-array name="clock_options">
@@ -725,10 +725,10 @@
     <string name="pip_phone_expand" msgid="5889780005575693909">"Luaskan"</string>
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimalkan"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Tutup"</string>
-    <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Seret ke bawah untuk menutup"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menu picture in picture"</string>
+    <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Tarik ke bawah untuk menutup"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> adalah picture-in-picture"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Jika Anda tidak ingin <xliff:g id="NAME">%s</xliff:g> menggunakan fitur ini, tap untuk membuka setelan dan menonaktifkannya."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Jika Anda tidak ingin <xliff:g id="NAME">%s</xliff:g> menggunakan fitur ini, tap untuk membuka setelan dan menonaktifkannya."</string>
     <string name="pip_play" msgid="1417176722760265888">"Putar"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Jeda"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Lewati ke berikutnya"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplikasi <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Notifikasi"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Baterai"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Screenshot"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Pesan Umum"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Penyimpanan"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikasi yang sedang berjalan di latar belakang"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap untuk melihat detail penggunaan baterai dan data"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Nonaktifkan data seluler?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Karena sebuah aplikasi menghalangi permintaan izin, Setelan tidak dapat memverifikasi respons Anda."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index b0b77df..eefb363 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Fingrafar RSA-lykils tölvunnar er:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Leyfa alltaf úr þessari tölvu"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB-villuleit ekki leyfð"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Notandinn sem er skráður inn í þetta tæki núna getur ekki kveikt á USB-villuleit. Til þess að nota þennan eiginleika skaltu skipta yfir í notanda með stjórnandaheimildir."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Notandinn sem er skráður inn í þetta tæki núna getur ekki kveikt á USB-villuleit. Til þess að nota þennan eiginleika skaltu skipta yfir í aðalnotandann."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Fylla skjá með aðdrætti"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Teygja yfir allan skjáinn"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Vistar skjámynd…"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Leita"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Strjúktu upp til að <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Strjúktu til vinstri til að <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Þú verður ekki fyrir truflunum frá hljóðmerkjum og titringi, fyrir utan vekjara, áminningar, viðburði og símtöl frá þeim sem þú leyfir fyrirfram. Þú heyrir áfram í öllu sem þú velur að spila, svo sem tónlist, myndskeiðum og leikjum."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Þú verður ekki fyrir truflunum frá hljóðmerkjum og titringi, fyrir utan vekjara. Þú heyrir áfram í öllu sem þú velur að spila, svo sem tónlist, myndskeiðum og leikjum."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Þú verður ekki fyrir truflunum frá hljóðmerkjum og titringi, fyrir utan vekjara, áminningar, viðburði og símtöl frá þeim sem þú leyfir fyrirfram. Þú heyrir áfram í öllu sem þú velur að spila, svo sem tónlist, myndskeiðum og leikjum."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Þú verður ekki fyrir truflunum frá hljóðmerkjum og titringi, fyrir utan vekjara. Þú heyrir áfram í öllu sem þú velur að spila, svo sem tónlist, myndskeiðum og leikjum."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Sérsníða"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Þetta lokar á ÖLL hljóðmerki og titring, þ.m.t. frá vekjurum, tónlist, myndskeiðum og leikjum. Þú getur áfram hringt símtöl."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Þetta lokar á ÖLL hljóðmerki og titring, þ.m.t. frá vekjurum, tónlist, myndskeiðum og leikjum. Þú getur áfram hringt símtöl."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Þetta lokar á ÖLL hljóðmerki og titring, þ.m.t. frá vekjurum, tónlist, myndskeiðum og leikjum."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Minna áríðandi tilkynningar fyrir neðan"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Frekari upplýsingar"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Þú ert með tengingu við <xliff:g id="VPN_APP">%1$s</xliff:g>, sem getur fylgst með netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Opna VPN-stillingar"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Opna VPN-stillingar"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Opna traust skilríki"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Kerfisstjóri hefur kveikt á eftirliti netkerfa, sem fylgist með netumferð á tækinu þínu.\n\nHafðu samband við kerfisstjóra til að fá frekari upplýsingar."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Þetta forrit er ekki með tilkynningaflokka"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Ekki er hægt að slökkva á tilkynningum frá þessu forriti"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 af <xliff:g id="NUMBER_1">%d</xliff:g> tilkynningaflokki frá þessu forriti</item>
-      <item quantity="other">1 af <xliff:g id="NUMBER_1">%d</xliff:g> tilkynningaflokkum frá þessu forriti</item>
+      <item quantity="one">1 af <xliff:g id="NUMBER_1">%s</xliff:g> tilkynningaflokki frá þessu forriti</item>
+      <item quantity="other">1 af <xliff:g id="NUMBER_1">%s</xliff:g> tilkynningaflokkum frá þessu forriti</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="other">%d mínútur</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Rafhlöðunotkun"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Ekki er hægt að nota rafhlöðusparnað meðan á hleðslu stendur"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Rafhlöðusparnaður"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Ekki er hægt að nota rafhlöðusparnað meðan á hleðslu stendur"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Rafhlöðusparnaður"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Dregur úr afköstum og bakgrunnsgögnum"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Hnappur <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minnka"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Loka"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Draga niður til að hunsa"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Valmynd fyrir mynd í mynd"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Valmynd"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> er með mynd í mynd"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Ef þú vilt ekki að <xliff:g id="NAME">%s</xliff:g> noti þennan eiginleika skaltu ýta til að opna stillingarnar og slökkva á því."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Ef þú vilt ekki að <xliff:g id="NAME">%s</xliff:g> noti þennan eiginleika skaltu ýta til að opna stillingarnar og slökkva á því."</string>
     <string name="pip_play" msgid="1417176722760265888">"Spila"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Gera hlé"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Fara á næsta"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Valmynd"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Forritið <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Tilkynningar"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Rafhlaða"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Skjámyndir"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Almenn skilaboð"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Geymslurými"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Forrit sem keyra í bakgrunni"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Ýttu til að fá upplýsingar um rafhlöðu- og gagnanotkun"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Slökkva á farsímagögnum?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Stillingar geta ekki staðfest svarið þitt vegna þess að forrit er að fela heimildarbeiðni."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 92d0cdc..fefc9d3 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Fingerprint della chiave RSA del computer: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Consenti sempre da questo computer"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Debug USB non consentito"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"L\'utente che ha eseguito l\'accesso a questo dispositivo non può attivare il debug USB. Per utilizzare questa funzione, passa a un utente amministratore."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"L\'utente che ha eseguito l\'accesso a questo dispositivo non può attivare il debug USB. Per utilizzare questa funzione, passa all\'utente principale."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom per riempire schermo"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Estendi per riemp. schermo"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Salvataggio screenshot..."</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Ricerca"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Su per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"A sinistra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Non verrai disturbato da suoni e vibrazioni, ad eccezione di sveglie, promemoria, eventi, chiamate da contatti da te specificati ed elementi che hai scelto di continuare a riprodurre, inclusi video, musica e giochi."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Non verrai disturbato da suoni e vibrazioni, ad eccezione delle sveglie e degli elementi che hai scelto di continuare a riprodurre, inclusi video, musica e giochi."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Non verrai disturbato da suoni e vibrazioni, ad eccezione di sveglie, promemoria, eventi, chiamate da contatti da te specificati ed elementi che hai scelto di continuare a riprodurre, inclusi video, musica e giochi."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Non verrai disturbato da suoni e vibrazioni, ad eccezione delle sveglie e degli elementi che hai scelto di continuare a riprodurre, inclusi video, musica e giochi."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizza"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Verranno bloccati TUTTI i suoni e le vibrazioni, anche di sveglie, musica, video e giochi. Potrai ancora telefonare."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Verranno bloccati TUTTI i suoni e le vibrazioni, anche di sveglie, musica, video e giochi. Potrai ancora telefonare."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Verranno bloccati TUTTI i suoni e le vibrazioni, anche di sveglie, musica, video e giochi."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notifiche meno urgenti in basso"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Ulteriori informazioni"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Sei connesso a <xliff:g id="VPN_APP">%1$s</xliff:g>, che consente di monitorare le attività di rete, inclusi siti web, email e app."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Apri impostazioni VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Apri impostazioni VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Apri credenziali attendibili"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"L\'amministratore ha attivato i log di rete, che consentono di monitorare il traffico sul dispositivo.\n\nPer ulteriori informazioni, contatta l\'amministratore."</string>
@@ -481,9 +481,9 @@
     <string name="volume_zen_end_now" msgid="6930243045593601084">"Disattiva ora"</string>
     <string name="accessibility_volume_expand" msgid="5946812790999244205">"Espandi"</string>
     <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Comprimi"</string>
-    <string name="screen_pinning_title" msgid="3273740381976175811">"La schermata è bloccata"</string>
-    <string name="screen_pinning_description" msgid="8909878447196419623">"La schermata rimane visibile finché non viene disattivato il blocco su schermo. Per disattivarlo, tieni premuto Indietro e Panoramica."</string>
-    <string name="screen_pinning_description_accessible" msgid="426190689254018656">"La schermata rimane visibile finché non viene disattivato il blocco su schermo. Per disattivarlo, tieni premuto Panoramica."</string>
+    <string name="screen_pinning_title" msgid="3273740381976175811">"La schermata è fissata"</string>
+    <string name="screen_pinning_description" msgid="8909878447196419623">"La schermata rimane visibile finché non viene sganciata. Per sganciarla, tieni premuto Indietro e Panoramica."</string>
+    <string name="screen_pinning_description_accessible" msgid="426190689254018656">"La schermata rimane visibile finché non viene sganciata. Per sganciarla, tieni premuto Panoramica."</string>
     <string name="screen_pinning_positive" msgid="3783985798366751226">"OK"</string>
     <string name="screen_pinning_negative" msgid="3741602308343880268">"No, grazie"</string>
     <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Nascondere <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string>
@@ -506,7 +506,7 @@
     <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Tocca per disattivare l\'audio."</string>
     <string name="volume_dialog_accessibility_shown_message" msgid="1834631467074259998">"%s comandi del volume mostrati. Fai scorrere verso l\'alto per ignorare."</string>
     <string name="volume_dialog_accessibility_dismissed_message" msgid="51543526013711399">"Comandi del volume nascosti"</string>
-    <string name="system_ui_tuner" msgid="708224127392452018">"Sintetizzatore interfaccia utente di sistema"</string>
+    <string name="system_ui_tuner" msgid="708224127392452018">"Ottimizzatore UI di sistema"</string>
     <string name="show_battery_percentage" msgid="5444136600512968798">"Mostra percentuale batteria incorporata"</string>
     <string name="show_battery_percentage_summary" msgid="3215025775576786037">"Mostra la percentuale di carica della batteria nell\'icona della barra di stato quando non è in carica"</string>
     <string name="quick_settings" msgid="10042998191725428">"Impostazioni rapide"</string>
@@ -529,12 +529,12 @@
     <string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"Hotspot"</string>
     <string name="accessibility_managed_profile" msgid="6613641363112584120">"Profilo di lavoro"</string>
     <string name="tuner_warning_title" msgid="7094689930793031682">"Il divertimento riservato a pochi eletti"</string>
-    <string name="tuner_warning" msgid="8730648121973575701">"Il sintetizzatore interfaccia utente di sistema mette a disposizione altri metodi per modificare e personalizzare l\'interfaccia utente di Android. Queste funzioni sperimentali potrebbero cambiare, interrompersi o scomparire nelle versioni successive. Procedi con cautela."</string>
+    <string name="tuner_warning" msgid="8730648121973575701">"L\'Ottimizzatore UI di sistema mette a disposizione altri metodi per modificare e personalizzare l\'interfaccia utente di Android. Queste funzioni sperimentali potrebbero cambiare, interrompersi o scomparire nelle versioni successive. Procedi con cautela."</string>
     <string name="tuner_persistent_warning" msgid="8597333795565621795">"Queste funzioni sperimentali potrebbero cambiare, interrompersi o scomparire nelle versioni successive. Procedi con cautela."</string>
     <string name="got_it" msgid="2239653834387972602">"OK"</string>
-    <string name="tuner_toast" msgid="603429811084428439">"Complimenti! Il sintetizzatore interfaccia utente di sistema è stato aggiunto alle impostazioni."</string>
+    <string name="tuner_toast" msgid="603429811084428439">"Complimenti! L\'Ottimizzatore UI di sistema è stato aggiunto alle impostazioni."</string>
     <string name="remove_from_settings" msgid="8389591916603406378">"Rimuovi dalle impostazioni"</string>
-    <string name="remove_from_settings_prompt" msgid="6069085993355887748">"Vuoi rimuovere il sintetizzatore interfaccia utente di sistema dalle impostazioni e smettere di utilizzare tutte le sue funzioni?"</string>
+    <string name="remove_from_settings_prompt" msgid="6069085993355887748">"Vuoi rimuovere l\'Ottimizzatore UI di sistema dalle impostazioni e smettere di utilizzare tutte le sue funzioni?"</string>
     <string name="activity_not_found" msgid="348423244327799974">"Applicazione non installata sul dispositivo"</string>
     <string name="clock_seconds" msgid="7689554147579179507">"Mostra i secondi nell\'orologio"</string>
     <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostra i secondi nell\'orologio nella barra di stato. Ciò potrebbe ridurre la durata della carica della batteria."</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Questa app non ha categorie di notifica"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Le notifiche di quest\'app non possono essere disattivate"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 categoria di notifica su <xliff:g id="NUMBER_1">%d</xliff:g> di questa app</item>
-      <item quantity="one">1 categoria di notifica su <xliff:g id="NUMBER_0">%d</xliff:g> di questa app</item>
+      <item quantity="other">1 categoria di notifica su <xliff:g id="NUMBER_1">%s</xliff:g> di questa app</item>
+      <item quantity="one">1 categoria di notifica su <xliff:g id="NUMBER_0">%s</xliff:g> di questa app</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="one">%d minuto</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Utilizzo batteria"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Risparmio energetico non disponibile durante la ricarica"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Risparmio energetico"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Risparmio energetico non disponibile durante la ricarica"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Risparmio energetico"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Riduce le prestazioni e i dati in background"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Pulsante <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home page"</string>
@@ -598,7 +598,7 @@
     <string name="keyboard_key_dpad_left" msgid="1346446024676962251">"Sinistra"</string>
     <string name="keyboard_key_dpad_right" msgid="3317323247127515341">"Destra"</string>
     <string name="keyboard_key_dpad_center" msgid="2566737770049304658">"Al centro"</string>
-    <string name="keyboard_key_tab" msgid="3871485650463164476">"Scheda"</string>
+    <string name="keyboard_key_tab" msgid="3871485650463164476">"Tab"</string>
     <string name="keyboard_key_space" msgid="2499861316311153293">"Spazio"</string>
     <string name="keyboard_key_enter" msgid="5739632123216118137">"Invio"</string>
     <string name="keyboard_key_backspace" msgid="1559580097512385854">"Backspace"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Riduci a icona"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Chiudi"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Trascina verso il basso per ignorare"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menu Picture in picture"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> è in Picture in picture"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Se non desideri che l\'app <xliff:g id="NAME">%s</xliff:g> utilizzi questa funzione, tocca per aprire le impostazioni e disattivarla."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Se non desideri che l\'app <xliff:g id="NAME">%s</xliff:g> utilizzi questa funzione, tocca per aprire le impostazioni e disattivarla."</string>
     <string name="pip_play" msgid="1417176722760265888">"Riproduci"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Metti in pausa"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Passa ai contenuti successivi"</string>
@@ -756,6 +756,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"App <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Avvisi"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Batteria"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Screenshot"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Messaggi generali"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Spazio di archiviazione"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"App in esecuzione in background"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tocca per conoscere i dettagli sull\'utilizzo dei dati e della batteria"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Disattivare i dati mobili?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Un\'app sta oscurando una richiesta di autorizzazione, pertanto Impostazioni non può verificare la tua risposta."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 8eb05a0..a8e24b8 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -20,7 +20,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7164937344850004466">"ממשק משתמש של המערכת"</string>
-    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"נקה"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"ניקוי"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"הסר מהרשימה"</string>
     <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"פרטי אפליקציה"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"המסכים האחרונים מופיעים כאן"</string>
@@ -31,9 +31,9 @@
       <item quantity="other">‏%d מסכים ב’סקירה‘</item>
       <item quantity="one">מסך אחד ב’סקירה‘</item>
     </plurals>
-    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"אין התראות"</string>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"אין הודעות"</string>
     <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"מתמשך"</string>
-    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"התראות"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"הודעות"</string>
     <string name="battery_low_title" msgid="6456385927409742437">"עוצמת הסוללה נמוכה"</string>
     <string name="battery_low_percent_format" msgid="2900940511201380775">"נותרו <xliff:g id="PERCENTAGE">%s</xliff:g>"</string>
     <string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"נותרו <xliff:g id="PERCENTAGE">%s</xliff:g>. הופעל שירות חיסכון בסוללה."</string>
@@ -49,7 +49,7 @@
     <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"סיבוב אוטומטי של המסך"</string>
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"השתק"</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"אוטומטי"</string>
-    <string name="status_bar_settings_notifications" msgid="397146176280905137">"התראות"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"הודעות"</string>
     <string name="bluetooth_tethered" msgid="7094101612161133267">"‏Bluetooth קשור"</string>
     <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"הגדר שיטות קלט"</string>
     <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"מקלדת פיזית"</string>
@@ -66,7 +66,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"‏טביעת האצבע של מפתח ה-RSA של המחשב היא:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"אפשר תמיד ממחשב זה"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"‏לא ניתן לבצע ניפוי באגים ב-USB"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"‏המשתמש הנוכחי שמחובר למערכת במכשיר לא יכול להפעיל ניפוי באגים ב-USB. כדי להשתמש בתכונה זו, יש להיכנס כמנהל מערכת."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"‏למשתמש המחובר לחשבון במכשיר הזה אין אפשרות להפעיל ניפוי באגים ב-USB. כדי להשתמש בתכונה הזו יש לעבור אל המשתמש הראשי."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"הגדל תצוגה כדי למלא את המסך"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"מתח כדי למלא את המסך"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"שומר צילום מסך..."</string>
@@ -87,7 +87,7 @@
     <string name="accessibility_menu" msgid="316839303324695949">"תפריט"</string>
     <string name="accessibility_accessibility_button" msgid="7601252764577607915">"נגישות"</string>
     <string name="accessibility_recent" msgid="5208608566793607626">"סקירה"</string>
-    <string name="accessibility_search_light" msgid="1103867596330271848">"חפש"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"חיפוש"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"מצלמה"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"טלפון"</string>
     <string name="accessibility_voice_assist_button" msgid="487611083884852965">"מסייע קולי"</string>
@@ -166,7 +166,7 @@
     <string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> אחוזים של סוללה."</string>
     <string name="accessibility_battery_level_charging" msgid="1147587904439319646">"טעינת סוללה, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> אחוז."</string>
     <string name="accessibility_settings_button" msgid="799583911231893380">"הגדרות מערכת"</string>
-    <string name="accessibility_notifications_button" msgid="4498000369779421892">"התראות"</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"הודעות"</string>
     <string name="accessibility_overflow_action" msgid="5681882033274783311">"הצגת כל ההודעות"</string>
     <string name="accessibility_remove_notification" msgid="3603099514902182350">"נקה התראה"</string>
     <string name="accessibility_gps_enabled" msgid="3511469499240123019">"‏GPS מופעל."</string>
@@ -251,7 +251,7 @@
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"‏מחפש GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"‏מיקום מוגדר על ידי GPS"</string>
     <string name="accessibility_location_active" msgid="2427290146138169014">"בקשות מיקום פעילות"</string>
-    <string name="accessibility_clear_all" msgid="5235938559247164925">"נקה את כל ההתראות."</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"נקה את כל ההודעות."</string>
     <string name="notification_group_overflow_indicator" msgid="1863231301642314183">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <plurals name="notification_group_overflow_description" formatted="false" msgid="4579313201268495404">
       <item quantity="two">יש בפנים עוד <xliff:g id="NUMBER_1">%s</xliff:g> הודעות.</item>
@@ -336,7 +336,7 @@
     <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"מחקת הכול"</string>
     <string name="recents_app_info_button_label" msgid="2890317189376000030">"מידע על האפליקציה"</string>
     <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"הצמדת מסך"</string>
-    <string name="recents_search_bar_label" msgid="8074997400187836677">"חפש"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"חיפוש"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"לא ניתן היה להפעיל את <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> מושבת במצב בטוח."</string>
     <string name="recents_stack_action_button_label" msgid="6593727103310426253">"נקה הכל"</string>
@@ -357,10 +357,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"חיפוש"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"הסט למעלה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"הסט שמאלה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"כדי לא להפריע לך, המכשיר לא ירטוט ולא ישמיע שום צליל, חוץ מהתראות, תזכורות, אירועים ושיחות ממתקשרים מסוימים לבחירתך. המצב הזה לא ישפיע על צלילים שהם חלק מתוכן שבחרת להפעיל, כמו מוזיקה, סרטונים ומשחקים."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"כדי לא להפריע לך, המכשיר לא ירטוט ולא ישמיע שום צליל, חוץ מהתראות. המצב הזה לא ישפיע על צלילים שהם חלק מתוכן שבחרת להפעיל, כמו מוזיקה, סרטונים ומשחקים."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"כדי לא להפריע לך, המכשיר לא ירטוט ולא ישמיע שום צליל, חוץ מהתראות, תזכורות, אירועים ושיחות ממתקשרים מסוימים לבחירתך. המצב הזה לא ישפיע על צלילים שהם חלק מתוכן שבחרת להפעיל, כמו מוזיקה, סרטונים ומשחקים."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"כדי לא להפריע לך, המכשיר לא ירטוט ולא ישמיע שום צליל, חוץ מהתראות. המצב הזה לא ישפיע על צלילים שהם חלק מתוכן שבחרת להפעיל, כמו מוזיקה, סרטונים ומשחקים."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"התאמה אישית"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"פעולה זו מבטלת את כל הצלילים והרטט, כולל צלילים ורטט שמקורם בהתראות, מוזיקה, סרטונים ומשחקים. בכל מקרה, עדיין אפשר להתקשר."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"פעולה זו מבטלת את כל הצלילים והרטט, כולל צלילים ורטט שמקורם בהתראות, מוזיקה, סרטונים ומשחקים. בכל מקרה, עדיין אפשר להתקשר."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"פעולה זו מבטלת את כל הצלילים והרטט, כולל בהתראות, מוזיקה, סרטונים ומשחקים."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"הודעות בדחיפות נמוכה יותר בהמשך"</string>
@@ -376,7 +376,7 @@
     <string name="interruption_level_priority" msgid="6426766465363855505">"עדיפות בלבד"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"התראות בלבד"</string>
     <string name="interruption_level_none_twoline" msgid="3957581548190765889">"שקט\nמוחלט"</string>
-    <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"התראות בעדיפות\nבלבד"</string>
+    <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"הודעות בעדיפות\nבלבד"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"התראות\nבלבד"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"טוען (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> עד לסיום)"</string>
     <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"בטעינה מהירה (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> עד למילוי)"</string>
@@ -388,7 +388,7 @@
     <string name="user_add_user" msgid="5110251524486079492">"הוספת משתמש"</string>
     <string name="user_new_user_name" msgid="426540612051178753">"משתמש חדש"</string>
     <string name="guest_nickname" msgid="8059989128963789678">"אורח"</string>
-    <string name="guest_new_guest" msgid="600537543078847803">"הוסף אורח"</string>
+    <string name="guest_new_guest" msgid="600537543078847803">"הוספת אורח"</string>
     <string name="guest_exit_guest" msgid="7187359342030096885">"הסר אורח"</string>
     <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"להסיר אורח?"</string>
     <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"כל האפליקציות והנתונים בפעילות זו באתר יימחקו."</string>
@@ -460,7 +460,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"למידע נוסף"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"אתה מחובר לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"‏פתח את הגדרות ה-VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"‏להגדרות ה-VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"פתח את פרטי הכניסה המהימנים"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"מנהל המערכת הפעיל את תכונת רישום התנועה ברשת, שמנטרת את תנועת הנתונים במכשיר.\n\nלמידע נוסף, צור קשר עם מנהל המערכת."</string>
@@ -475,7 +475,7 @@
     <string name="keyguard_indication_trust_granted" msgid="4985003749105182372">"הנעילה בוטלה על ידי <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="keyguard_indication_trust_managed" msgid="8319646760022357585">"<xliff:g id="TRUST_AGENT">%1$s</xliff:g> פועל"</string>
     <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"המכשיר יישאר נעול עד שתבטל את נעילתו באופן ידני"</string>
-    <string name="hidden_notifications_title" msgid="7139628534207443290">"קבל התראות מהר יותר"</string>
+    <string name="hidden_notifications_title" msgid="7139628534207443290">"קבל הודעות מהר יותר"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"צפה בהן לפני שתבטל נעילה"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"לא, תודה"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"הגדר"</string>
@@ -556,14 +556,14 @@
     <string name="power_notification_controls_description" msgid="4372459941671353358">"בעזרת פקדים של הודעות הפעלה, תוכל להגדיר רמת חשיבות מ-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="7506845022070889909">"הודעות"</string>
     <string name="notification_channel_disabled" msgid="2139193533791840539">"לא תקבל את ההודעות האלה יותר"</string>
-    <string name="notification_num_channels" msgid="2048144408999179471">"<xliff:g id="NUMBER">%d</xliff:g> קטגוריות של התראות"</string>
+    <string name="notification_num_channels" msgid="2048144408999179471">"<xliff:g id="NUMBER">%d</xliff:g> קטגוריות של הודעות"</string>
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"האפליקציה הזו לא תומכת בקטגוריות של הודעות"</string>
-    <string name="notification_unblockable_desc" msgid="3561016061737896906">"לא ניתן לכבות התראות של האפליקציה הזאת"</string>
+    <string name="notification_unblockable_desc" msgid="3561016061737896906">"לא ניתן לכבות הודעות של האפליקציה הזאת"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="two">קטגוריית הודעות אחת מתוך <xliff:g id="NUMBER_1">%d</xliff:g> מאפליקציה זו</item>
-      <item quantity="many">קטגוריית הודעות אחת מתוך <xliff:g id="NUMBER_1">%d</xliff:g> מאפליקציה זו</item>
-      <item quantity="other">קטגוריית הודעות אחת מתוך <xliff:g id="NUMBER_1">%d</xliff:g> מאפליקציה זו</item>
-      <item quantity="one">קטגוריית הודעות אחת מתוך <xliff:g id="NUMBER_0">%d</xliff:g> מאפליקציה זו</item>
+      <item quantity="two">קטגוריית הודעות אחת מתוך <xliff:g id="NUMBER_1">%s</xliff:g> מאפליקציה זו</item>
+      <item quantity="many">קטגוריית הודעות אחת מתוך <xliff:g id="NUMBER_1">%s</xliff:g> מאפליקציה זו</item>
+      <item quantity="other">קטגוריית הודעות אחת מתוך <xliff:g id="NUMBER_1">%s</xliff:g> מאפליקציה זו</item>
+      <item quantity="one">קטגוריית הודעות אחת מתוך <xliff:g id="NUMBER_0">%s</xliff:g> מאפליקציה זו</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -597,8 +597,8 @@
       <item quantity="one">דקה</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"שימוש בסוללה"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"תכונת החיסכון בסוללה אינה זמינה בעת טעינת המכשיר"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"חיסכון בסוללה"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"תכונת החיסכון בסוללה לא זמינה כשהמכשיר בטעינה"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"חיסכון בסוללה"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"מפחית את רמת הביצועים ואת נתוני הרקע"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"לחצן <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"דף הבית"</string>
@@ -674,7 +674,7 @@
     <item msgid="586019486955594690">"נטייה ימינה"</item>
   </string-array>
     <string name="menu_ime" msgid="4998010205321292416">"מחליף מקלדת"</string>
-    <string name="save" msgid="2311877285724540644">"שמור"</string>
+    <string name="save" msgid="2311877285724540644">"שמירה"</string>
     <string name="reset" msgid="2448168080964209908">"איפוס"</string>
     <string name="adjust_button_width" msgid="6138616087197632947">"שינוי של רוחב לחצן"</string>
     <string name="clipboard" msgid="1313879395099896312">"לוח"</string>
@@ -685,7 +685,7 @@
     <string name="right_icon" msgid="3952104823293824311">"סמל ימני"</string>
     <string name="drag_to_add_tiles" msgid="7058945779098711293">"ניתן לגרור כדי להוסיף או להסיר משבצות"</string>
     <string name="drag_to_remove_tiles" msgid="3361212377437088062">"גרור לכאן כדי להסיר"</string>
-    <string name="qs_edit" msgid="2232596095725105230">"ערוך"</string>
+    <string name="qs_edit" msgid="2232596095725105230">"עריכה"</string>
     <string name="tuner_time" msgid="6572217313285536011">"שעה"</string>
   <string-array name="clock_options">
     <item msgid="5965318737560463480">"הצג שעות, דקות ושניות"</item>
@@ -738,9 +738,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"מזער"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"סגור"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"גרור למטה כדי לסגור"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"תפריט \'תמונה בתוך תמונה\'"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"תפריט"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> במצב תמונה בתוך תמונה"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"אם אינך רוצה שהתכונה הזו תשמש את <xliff:g id="NAME">%s</xliff:g>, הקש כדי לפתוח את ההגדרות ולכבות את התכונה."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"אם אינך רוצה שהתכונה הזו תשמש את <xliff:g id="NAME">%s</xliff:g>, יש להקיש כדי לפתוח את ההגדרות ולכבות את התכונה."</string>
     <string name="pip_play" msgid="1417176722760265888">"הפעל"</string>
     <string name="pip_pause" msgid="8881063404466476571">"השהה"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"ברצוני לדלג אל הבא"</string>
@@ -766,6 +766,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"תפריט"</string>
     <string name="tuner_app" msgid="3507057938640108777">"האפליקציה <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"התראות"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"סוללה"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"צילומי מסך"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"הודעות כלליות"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"אחסון"</string>
@@ -781,9 +782,10 @@
     <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"מצב \'נא לא להפריע\' הופעל על ידי אפליקציה (<xliff:g id="ID_1">%s</xliff:g>)."</string>
     <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"מצב \'נא לא להפריע להפריע\' הופעל על ידי אפליקציה או על ידי כלל אוטומטי."</string>
     <string name="qs_dnd_until" msgid="3469471136280079874">"עד <xliff:g id="ID_1">%s</xliff:g>"</string>
-    <string name="qs_dnd_keep" msgid="1825009164681928736">"שמור"</string>
+    <string name="qs_dnd_keep" msgid="1825009164681928736">"שמירה"</string>
     <string name="qs_dnd_replace" msgid="8019520786644276623">"החלף"</string>
     <string name="running_foreground_services_title" msgid="381024150898615683">"אפליקציות שפועלות ברקע"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"הקש לקבלת פרטים על צריכה של נתונים וסוללה"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"לכבות את חבילת הגלישה?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"יש אפליקציה שמסתירה את בקשת ההרשאה, ולכן להגדרות אין אפשרות לאמת את התשובה."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index ebf3121..e400fff 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"このパソコンのRSAキーのフィンガープリント:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"このパソコンからのUSBデバッグを常に許可する"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USBデバッグは許可されていません"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"この端末に現在ログインしているユーザーはUSBデバッグをONにすることはできません。この機能を使用するには管理者ユーザーに切り替えてください。"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"この端末に現在ログインしているユーザーでは、USB デバッグを ON にすることはできません。この機能を使用するには、メインユーザーに切り替えてください。"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"画面サイズに合わせて拡大"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"画面サイズに合わせて拡大"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"スクリーンショットを保存中..."</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"検索します"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"上にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"左にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"アラーム、リマインダー、予定、指定した人からの着信以外の音やバイブレーションに煩わされることはありません。音楽、動画、ゲームなど再生対象として選択したコンテンツは引き続き再生されます。"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"アラーム以外の音やバイブレーションに煩わされることはありません。音楽、動画、ゲームなど再生対象として選択したコンテンツは引き続き再生されます。"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"アラーム、リマインダー、予定、指定した人からの着信以外の音やバイブレーションに煩わされることはありません。音楽、動画、ゲームなど再生対象として選択したコンテンツは引き続き再生されます。"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"アラーム以外の音やバイブレーションに煩わされることはありません。音楽、動画、ゲームなど再生対象として選択したコンテンツは引き続き再生されます。"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"カスタマイズ"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"アラーム、音楽、動画、ゲームを含むすべての音とバイブレーションがブロックされます。電話をかけることはできます。"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"アラーム、音楽、動画、ゲームを含むすべての音とバイブレーションがブロックされます。電話をかけることはできます。"</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"アラーム、音楽、動画、ゲームを含むすべての音とバイブレーションがブロックされます。"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"緊急度の低い通知を下に表示"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"詳細"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"「<xliff:g id="VPN_APP">%1$s</xliff:g>」に接続しています。このアプリはあなたのネットワーク アクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN 設定を開く"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN 設定を開く"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"信頼できる認証情報を開く"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"管理者がネットワーク ログを有効にしているため、この端末のトラフィックは監視されています。\n\n詳しくは管理者にお問い合わせください。"</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"このアプリでは通知カテゴリが設定されていません"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"このアプリの通知を OFF にすることはできません"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">このアプリの通知カテゴリ <xliff:g id="NUMBER_1">%d</xliff:g> 件中 1 件</item>
-      <item quantity="one">このアプリの通知カテゴリ <xliff:g id="NUMBER_0">%d</xliff:g> 件中 1 件</item>
+      <item quantity="other">このアプリの通知カテゴリ <xliff:g id="NUMBER_1">%s</xliff:g> 件中 1 件</item>
+      <item quantity="one">このアプリの通知カテゴリ <xliff:g id="NUMBER_0">%s</xliff:g> 件中 1 件</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>、<xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="one">%d分</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"電池の使用状況"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"充電中はバッテリー セーバーは利用できません"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"バッテリー セーバー"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"充電中はバッテリー セーバーは利用できません"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"バッテリー セーバー"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"パフォーマンスとバックグラウンド データを制限します"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> ボタン"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"最小化"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"閉じる"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"下にドラッグして閉じる"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"ピクチャー イン ピクチャー メニュー"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"メニュー"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g>はピクチャー イン ピクチャーで表示中です"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g>でこの機能を使用しない場合は、タップして設定を開いて OFF にしてください。"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g>でこの機能を使用しない場合は、タップして設定を開いて OFF にしてください。"</string>
     <string name="pip_play" msgid="1417176722760265888">"再生"</string>
     <string name="pip_pause" msgid="8881063404466476571">"一時停止"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"次へスキップ"</string>
@@ -756,6 +756,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"メニュー"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> アプリ"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"通知"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"電池"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"スクリーンショット"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"一般メッセージ"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"ストレージ"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"バックグラウンドで実行中のアプリ"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"タップして電池やデータの使用量を確認"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"モバイルデータを OFF にしますか?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"アプリが許可リクエストを隠しているため、設定側でユーザーの応答を確認できません。"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index 7197ad3..55a0b5f 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"კომპიუტერის RSA გასაღების თითის ანაბეჭდია:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"ყოველთვის დართე ნება ამ კომპიუტერიდან."</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB ხარვეზების გამართვა ნებადართული არაა"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"ამ მოწყობილობაზე ამჟამად შესულ მომხმარებელს არ შეუძლია USB ხარვეზების გამართვის ფუნქციის ჩართვა. ამ ფუნქციის გამოსაყენებლად შედით როგორც ადმინისტრატორი მომხმარებელი."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"ამ მოწყობილობაზე ამჟამად შესულ მომხმარებელს არ შეუძლია USB ხარვეზების გამართვის ფუნქციის ჩართვა. ამ ფუნქციის გამოსაყენებლად, მიუერთდით მთავარ მომხმარებელს."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"მასშტაბი შეცვალეთ ეკრანის შესავსებად."</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"გაწიეთ ეკრანის შესავსებად."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"სკრინშოტის შენახვა…"</string>
@@ -155,7 +155,7 @@
     <string name="accessibility_cell_data" msgid="5326139158682385073">"მობილური ინტერნეტი"</string>
     <string name="accessibility_cell_data_on" msgid="5927098403452994422">"მობილური ინტერნეტი ჩართულია"</string>
     <string name="accessibility_cell_data_off" msgid="443267573897409704">"მობილური ინტერნეტი გამორთულია"</string>
-    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-ის ჩართვა"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth ტეტერინგის ჩართვა"</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"თვითმფრინავის რეჟიმი"</string>
     <string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ჩართულია."</string>
     <string name="accessibility_no_sims" msgid="3957997018324995781">"SIM ბარათი არ არის."</string>
@@ -312,7 +312,7 @@
     <string name="quick_settings_connected" msgid="1722253542984847487">"დაკავშირებულია"</string>
     <string name="quick_settings_connected_battery_level" msgid="4136051440381328892">"დაკავშირებულია. ბატარეის დონე: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="quick_settings_connecting" msgid="47623027419264404">"დაკავშირება..."</string>
-    <string name="quick_settings_tethering_label" msgid="7153452060448575549">"მოდემის რეჟიმი"</string>
+    <string name="quick_settings_tethering_label" msgid="7153452060448575549">"ტეტერინგი"</string>
     <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"წვდომის წერტილი"</string>
     <string name="quick_settings_notifications_label" msgid="4818156442169154523">"შეტყობინებები"</string>
     <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ფანარი"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"ძიება"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"გაასრიალეთ ზემოთ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"გაასრიალეთ მარცხნივ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"თქვენ მიერ მითითებული მაღვიძარების, შეხსენებების, ღონისძიებებისა და ზარების გარდა, არავითარი ხმა და ვიბრაცია არ შეგაწუხებთ. თქვენ მაინც შეგეძლებათ ნებისმიერი სასურველი რამის, მაგალითად, მუსიკის, ვიდეოებისა და თამაშების მოსმენა."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"მაღვიძარების გარდა, არავითარი ხმა და ვიბრაცია არ შეგაწუხებთ. თქვენ მაინც შეგეძლებათ ნებისმიერი სასურველი რამის, მაგალითად, მუსიკის, ვიდეოებისა და თამაშების მოსმენა."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"თქვენ მიერ მითითებული მაღვიძარების, შეხსენებების, მოვლენებისა და ზარების გარდა, არავითარი ხმა და ვიბრაცია არ შეგაწუხებთ. თქვენ მაინც შეძლებთ სასურველი კონტენტის, მაგალითად, მუსიკის, ვიდეოებისა და თამაშების აუდიოს მოსმენა."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"მაღვიძარების გარდა, არავითარი ხმა და ვიბრაცია არ შეგაწუხებთ. თქვენ მაინც შეძლებთ სასურველი კონტენტის, მაგალითად, მუსიკის, ვიდეოებისა და თამაშების აუდიოს მოსმენა."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"მორგება"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"ეს ბლოკავს ყველა ხმასა და ვიბრაციას, მათ შორის, მაღვიძარების, მუსიკის, ვიდეოებისა და თამაშების. მიუხედავად ამისა, თქვენ მაინც შეძლებთ სატელეფონო ზარების განხორციელებას."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"ეს ვარიანტი დაბლოკავს ნებისმიერ ხმასა და ვიბრაციას, მათ შორის, მაღვიძარების, მუსიკის, ვიდეოებისა და თამაშების. მიუხედავად ამისა, თქვენ მაინც შეძლებთ სატელეფონო ზარების განხორციელებას."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"ეს ბლოკავს ყველა ხმასა და ვიბრაციას, მათ შორის, მაღვიძარების, მუსიკის, ვიდეოებისა და თამაშების."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"ქვემოთ მითითებულია ნაკლებად სასწრაფო შეტყობინებები"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"შეიტყვეთ მეტი"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"თქვენ დაუკავშირდით <xliff:g id="VPN_APP">%1$s</xliff:g>-ს, რომელსაც თქვენი ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებსაიტების, მონიტორინგი შეუძლია."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN-ის პარამეტრების გახსნა"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN-ის პარამეტრების გახსნა"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"ავტორიზაციის სანდო მონაცემების გახსნა"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"თქვენმა ადმინისტრატორმა ქსელის ჟურნალირება ჩართო, რომელიც თქვენი მოწყობილობის ტრაფიკის მონიტორინგს ახორციელებს.\n\nდამატებითი ინფორმაციისთვის დაუკავშირდით თქვენს ადმინისტრატორს."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"ამ აპს შეტყობინებების კატეგორიები არ აქვს"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"ამ აპიდან შეტყობინებების გამორთვა ვერ მოხერხდება"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">ამ აპის შეტყობინებების <xliff:g id="NUMBER_1">%d</xliff:g> კატეგორიიდან 1</item>
-      <item quantity="one">ამ აპის შეტყობინებების <xliff:g id="NUMBER_0">%d</xliff:g> კატეგორიიდან 1</item>
+      <item quantity="other">ამ აპის შეტყობინებების <xliff:g id="NUMBER_1">%s</xliff:g> კატეგორიიდან 1</item>
+      <item quantity="one">ამ აპის შეტყობინებების <xliff:g id="NUMBER_0">%s</xliff:g> კატეგორიიდან 1</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d წუთი</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"ბატარეის მოხმარება"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ბატარეის დამზოგი დატენვისას მიწვდომელია"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"ბატარეის დამზოგი"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"ბატარეის დამზოგი დატენვისას მიუწვდომელია"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"ბატარეის დამზოგი"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"ამცირებს წარმადობას და ფონურ მონაცემებს"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"ღილაკი „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"ჩაკეცვა"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"დახურვა"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"დასახურად ჩავლებით ჩამოიტანეთ ქვემოთ"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"მენიუ „ეკრანი ეკრანში“"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"მენიუ"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> იყენებს რეჟიმს „ეკრანი ეკრანში“"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"თუ არ გსურთ, რომ <xliff:g id="NAME">%s</xliff:g> ამ ფუნქციას იყენებდეს, აქ შეხებით შეგიძლიათ გახსნათ პარამეტრები და გამორთოთ."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"თუ არ გსურთ, რომ <xliff:g id="NAME">%s</xliff:g> ამ ფუნქციას იყენებდეს, აქ შეხებით შეგიძლიათ გახსნათ პარამეტრები და გამორთოთ ის."</string>
     <string name="pip_play" msgid="1417176722760265888">"დაკვრა"</string>
     <string name="pip_pause" msgid="8881063404466476571">"დაპაუზება"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"შემდეგზე გადასვლა"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"მენიუ"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> აპი"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"გაფრთხილებები"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"ბატარეა"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"ეკრანის ანაბეჭდები"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"ზოგადი შეტყობინებები"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"მეხსიერება"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"ფონურ რეჟიმში გაშვებული აპები"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"შეეხეთ ბატარეისა და მონაცემების მოხმარების შესახებ დეტალური ინფორმაციისთვის"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"გსურთ მობილური ინტერნეტის გამორთვა?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"ვინაიდან აპი ფარავს ნებართვის მოთხოვნას, პარამეტრების მიერ თქვენი პასუხი ვერ დასტურდება."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index f8c28d0..8937b7f 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Бұл компьютердің  RSA перне саусақ таңбасы:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Осы компьютерден әрқашан рұқсат беру"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB жөндеу рұқсат етілмеген"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Осы құрылғыға қазір кірген пайдаланушы USB жөндеу мүмкіндігін қоса алмайды. Бұл мүмкіндікті пайдалану үшін әкімші пайдаланушыға ауысыңыз."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Бұл құрылғыға жаңа кірген пайдаланушы USB түзетуін іске қосылмайды. Бұл мүмкіндікті пайдалану үшін негізгі пайдаланушыға ауысыңыз."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Экранды толтыру үшін ұлғайту"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Экранды толтыру үшін созу"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Скриншотты сақтауда…"</string>
@@ -298,7 +298,7 @@
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi өшірулі"</string>
     <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi қосулы"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Қолжетімді Wi-Fi желілері жоқ"</string>
-    <string name="quick_settings_cast_title" msgid="7709016546426454729">"Трансляциялау"</string>
+    <string name="quick_settings_cast_title" msgid="7709016546426454729">"Трансляция"</string>
     <string name="quick_settings_casting" msgid="6601710681033353316">"Трансляциялануда"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Атаусыз құрылғы"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Трансляциялауға дайын"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Іздеу"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> үшін жоғары сырғыту."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> үшін солға сырғыту."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Дабылдар, еске салғыштар, оқиғалар мен өзіңіз көрсеткен контактілердің қоңырауларынан басқа дыбыстар мен дірілдер мазаламайтын болады. Музыка, бейне және ойындар сияқты ойнатылатын мазмұндардың дыбысы өшірілмейді."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Дабылдардан басқа ешқандай дыбыстар мен дірілдер мазаламайтын болады. Музыка, бейне және ойындар сияқты ойнатылатын мазмұндардың дыбысы өшірілмейді."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Дабылдар, еске салғыштар, оқиғалар мен өзіңіз көрсеткен контактілердің қоңырауларынан басқа дыбыстар мен дірілдер мазаламайтын болады. Музыка, бейне және ойындар сияқты ойнатылатын мазмұндарды ести алатын боласыз."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Дабылдардан басқа ешқандай дыбыстар мен дірілдер мазаламайтын болады. Музыка, бейне және ойындар сияқты ойнатылатын мазмұндарды ести алатын боласыз."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Реттеу"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"БАРЛЫҚ, соның ішінде дабылдардың, музыканың, бейнелердің және ойындардың дыбыстары мен дірілдері өшіріледі. Бірақ телефон қоңыраулары шалына береді."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Дабыл, музыка, бейнелер мен ойындарды қоса алғанда, барлық дыбыстар мен дірілдер бөгелетін болады. Қоңырау шала беруіңізге болады."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"БАРЛЫҚ, соның ішінде дабылдардың, музыканың, бейнелердің және ойындардың дыбыстары мен дірілдері өшіріледі."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Шұғылдығы азырақ хабарландырулар төменде"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Толығырақ"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Желідегі әрекеттерді, соның ішінде электрондық хабарларды, қолданбаларды және вебсайттарды бақылайтын <xliff:g id="VPN_APP">%1$s</xliff:g> қолданбасына қосылдыңыз."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN параметрлерін ашу"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN параметрлерін ашу"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Сенімді тіркелу деректерін ашу"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Әкімші құрылғыдағы трафикті қадағалау үшін желі журналын жүргізуді қосып қойған.\n\nТолығырақ ақпарат алу үшін әкімшімен хабарласыңыз."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Бұл қолданбада хабарландыру санаттары жоқ"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Бұл қолданбаның хабарландырулары өшірілмейді"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">Осы қолданбадан <xliff:g id="NUMBER_1">%d</xliff:g> ішінен 1 хабарландыру санаты</item>
-      <item quantity="one">Осы қолданбадан <xliff:g id="NUMBER_0">%d</xliff:g> ішінен 1 хабарландыру санаты</item>
+      <item quantity="other">Осы қолданбадан <xliff:g id="NUMBER_1">%s</xliff:g> ішінен 1 хабарландыру санаты</item>
+      <item quantity="one">Осы қолданбадан <xliff:g id="NUMBER_0">%s</xliff:g> ішінен 1 хабарландыру санаты</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d минут</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Батареяны пайдалану"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Зарядтау кезінде Батарея үнемдегіш қол жетімді емес"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Батарея үнемдегіш"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Зарядтау кезінде \"Battery saver\" функциясы қол жетімді емес"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Battery saver"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Өнімділікті және фондық деректерді азайтады"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> түймесі"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Кішірейту"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Жабу"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Жабу үшін төмен қарай сүйреңіз"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"\"Сурет ішіндегі сурет\" мәзірі"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Mәзір"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> \"сурет ішіндегі сурет\" режимінде"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> деген пайдаланушының бұл функцияны пайдалануына жол бермеу үшін параметрлерді түртіп ашыңыз да, оларды өшіріңіз."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> деген пайдаланушының бұл мүмкіндікті пайдалануын қаламасаңыз, параметрлерді түртіп ашыңыз да, оларды өшіріңіз."</string>
     <string name="pip_play" msgid="1417176722760265888">"Ойнату"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Кідірту"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Келесіге өту"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Mәзір"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> қолданбасы"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Дабылдар"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Батарея"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Скриншоттар"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Жалпы хабарлар"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Жад"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Фонда жұмыс істеп тұрған қолданбалар"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Батарея мен деректер трафигі туралы білу үшін түртіңіз"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Мобильдік деректер өшірілсін бе?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Басқа қолданба рұқсат сұрауын жасырып тұрғандықтан, параметрлер жауабыңызды растай алмайды."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index d12c619..f50003c 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"ស្នាម​ម្រាម​ដៃ​ RSA របស់​កុំព្យូទ័រ​គឺ៖ \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"អនុញ្ញាត​ជា​និច្ច​សម្រាប់​កុំព្យូទ័រ​នេះ"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"មិនអនុញ្ញាតការកែកំហុសតាមរយៈយូអេសប៊ីទេ"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"អ្នកប្រើដែលបានចូលទៅឧបករណ៍នេះនាពេលបច្ចុប្បន្នមិនអាចបើកការកែកំហុសតាមរយៈយូអេសប៊ីបានទេ។ ដើម្បីប្រើលក្ខណៈពិសេសនេះ សូមប្តូរទៅរបៀបអ្នកប្រើជា អ្នកគ្រប់គ្រង។"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"អ្នកប្រើ​ដែលបច្ចុប្បន្ន​បានចូលគណនី​នៅលើឧបករណ៍នេះ​មិនអាចបើកការកែកំហុស USB បានទេ។ ដើម្បីប្រើមុខងារនេះ សូមប្តូរទៅអ្នកប្រើចម្បង។"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"ពង្រីក​​ដើម្បី​ឲ្យ​ពេញ​អេក្រង់"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"ទាញ​ដើម្បី​ឲ្យ​ពេញ​អេក្រង់"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"កំពុង​រក្សាទុក​រូបថត​អេក្រង់…"</string>
@@ -150,7 +150,7 @@
     <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
     <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"រ៉ូ​មីង"</string>
     <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
-    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"វ៉ាយហ្វាយ"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
     <string name="accessibility_no_sim" msgid="8274017118472455155">"គ្មាន​ស៊ីម​កាត។"</string>
     <string name="accessibility_cell_data" msgid="5326139158682385073">"ទិន្នន័យ​ទូរសព្ទចល័ត"</string>
     <string name="accessibility_cell_data_on" msgid="5927098403452994422">"ទិន្នន័យទូរសព្ទចល័តបានបើក"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"ស្វែងរក"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"រុញ​ឡើង​លើ​ដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"រុញ​ទៅ​ឆ្វេង​ដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"សំឡេង និងរំញ័រមិន​រំខានដល់អ្នកឡើយ លើកលែងតែសំឡេងរោទ៍ ការរំលឹក ព្រឹត្តិការណ៍ និងអ្នកហៅទូរសព្ទដែលអ្នកបញ្ជាក់។ អ្នកនៅតែឮអ្វីគ្រប់យ៉ាងដែលអ្នកជ្រើសរើសឲ្យលេង រួមទាំងតន្រ្តី វីដេអូ និងហ្គេមផងដែរ។"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"សំឡេង និងរំញ័រមិន​រំខានដល់អ្នកឡើយ លើកលែងតែសំឡេងរោទ៍។ អ្នកនៅតែឮអ្វីគ្រប់យ៉ាងដែលអ្នកជ្រើសរើសឲ្យលេង រួមទាំងតន្រ្តី វីដេអូ និងហ្គេមផងដែរ។"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"សំឡេង និងរំញ័រនឹងមិន​រំខានដល់អ្នកឡើយ លើកលែងតែម៉ោងរោទ៍ ការរំលឹក ព្រឹត្តិការណ៍ និងអ្នកហៅទូរសព្ទដែលអ្នកបញ្ជាក់ប៉ុណ្ណោះ។ អ្នកនឹងនៅតែឮសំឡេងសកម្មភាពគ្រប់យ៉ាងដែលអ្នកលេងដដែល រួមទាំងតន្រ្តី វីដេអូ និងហ្គេម។"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"សំឡេង និងរំញ័រនឹងមិន​រំខានដល់អ្នកឡើយ លើកលែងតែម៉ោងរោទ៍ប៉ុណ្ណោះ។ អ្នកនឹងនៅតែឮសំឡេងសកម្មភាពគ្រប់យ៉ាងដែលអ្នកលេងដដែល រួមទាំងតន្រ្តី វីដេអូ និងហ្គេម។"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"ប្ដូរតាមបំណង"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"វារារាំងសំឡេង និងរំញ័រទាំងអស់ ដោយរួមបញ្ចូលទាំងសំឡេងរោទ៍ តន្ត្រី វីដេអូ និងហ្គេម។ អ្នកនឹងនៅតែអាចធ្វើការហៅទូរសព្ទបានដដែល។"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"សកម្មភាពនេះ​ទប់ស្កាត់​សំឡេង និងរំញ័រទាំងអស់ រួមទាំងម៉ោងរោទ៍ តន្ត្រី វីដេអូ និងហ្គេមផងដែរ។ អ្នកនឹងនៅតែអាចធ្វើការហៅទូរសព្ទបានដដែល។"</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"វារារាំងសំឡេង និងរំញ័រទាំងអស់ដែលចេញពីម៉ោងរោទិ៍ តន្ត្រី វីដេអូ និងហ្គេម។"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"ការ​ជូន​ដំណឹង​​មិន​សូវ​បន្ទាន់​ខាង​ក្រោម"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ស្វែងយល់បន្ថែម"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"អ្នកបានភ្ជាប់ទៅ <xliff:g id="VPN_APP">%1$s</xliff:g> ដែលអាចតាមដានសកម្មភាពក្នុងបណ្តាញរបស់អ្នក រួមទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រផងដែរ។"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"បើក​ការ​កំណត់​ VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"បើក​ការកំណត់ VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"បើក​ព័ត៌មាន​សម្គាល់ខ្លួន​ដែល​ទុក​ចិត្ត"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"អ្នក​គ្រប់គ្រង​របស់អ្នក​បាន​បើក​ការ​ធ្វើ​កំណត់ហេតុ​បណ្តាញ​ ដែល​នឹង​តាមដាន​ចរាចរណ៍​នៅលើ​ឧបករណ៍​របស់អ្នក។\n\nសម្រាប់​ព័ត៌មាន​បន្ថែម​ សូម​ទាក់ទង​អ្នក​គ្រប់គ្រង​របស់អ្នក។"</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"កម្មវិធីនេះ​មិនមាន​ប្រភេទនៃ​ការជូនដំណឹង​ទេ"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"ការជូនដំណឹងពី​កម្មវិធីនេះមិនអាចបិទបានទេ"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">ប្រភេទនៃការ​ជូនដំណឹង 1 ក្នុង​ចំណោម <xliff:g id="NUMBER_1">%d</xliff:g> ដែលបានពី​កម្មវិធី​នេះ</item>
-      <item quantity="one">ប្រភេទនៃការ​ជូនដំណឹង 1 ក្នុង​ចំណោម <xliff:g id="NUMBER_0">%d</xliff:g> ដែលបានពី​កម្មវិធី​នេះ</item>
+      <item quantity="other">ប្រភេទនៃការ​ជូនដំណឹង 1 ក្នុង​ចំណោម <xliff:g id="NUMBER_1">%s</xliff:g> ដែលបានពី​កម្មវិធី​នេះ</item>
+      <item quantity="one">ប្រភេទនៃការ​ជូនដំណឹង 1 ក្នុង​ចំណោម <xliff:g id="NUMBER_0">%s</xliff:g> ដែលបានពី​កម្មវិធី​នេះ</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d នាទី</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"ការប្រើប្រាស់ថ្ម"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"កម្មវិធីសន្សំថ្មមិនអាចប្រើបានអំឡុងពេលសាកថ្មទេ"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"កម្មវិធីសន្សំថ្ម"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"កម្មវិធី​សន្សំថ្ម​មិនអាច​ប្រើបាន​អំឡុង​ពេល​សាកថ្ម​ទេ"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"កម្មវិធី​សន្សំ​ថ្ម"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"កាត់បន្ថយប្រតិបត្តិការ និងទិន្នន័យផ្ទៃខាងក្រោយ"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"ប៊ូតុង <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"បង្រួម"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"បិទ"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"អូស​ចុះក្រោម​ដើម្បី​បដិសេធ"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"ម៉ឺនុយ​រូប​ក្នុងរូប"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"ម៉ឺនុយ"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ស្ថិតក្នុងមុខងាររូបក្នុងរូប"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"ប្រសិនបើ​អ្នក​មិន​ចង់​ឲ្យ <xliff:g id="NAME">%s</xliff:g> ប្រើ​មុខងារ​នេះ​ទេ សូមចុច​ដើម្បី​បើក​ការកំណត់ រួច​បិទ​វា។"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"ប្រសិនបើ​អ្នក​មិន​ចង់​ឲ្យ <xliff:g id="NAME">%s</xliff:g> ប្រើ​មុខងារ​នេះ​ សូមចុច​​បើក​ការកំណត់ រួច​បិទ​វា។"</string>
     <string name="pip_play" msgid="1417176722760265888">"លេង"</string>
     <string name="pip_pause" msgid="8881063404466476571">"ផ្អាក"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"រំលងទៅបន្ទាប់"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"ម៉ឺនុយ"</string>
     <string name="tuner_app" msgid="3507057938640108777">"កម្មវិធី <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"ការ​ជូនដំណឹង"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"ថ្ម"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"រូបថត​អេក្រង់"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"សារ​ទូទៅ"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"ទំហំផ្ទុក"</string>
@@ -761,7 +762,7 @@
     <string name="instant_apps_message" msgid="8116608994995104836">"កម្មវិធី​ប្រើ​ភ្លាមៗ​មិន​តម្រូវ​ឲ្យ​មានការ​ដំឡើង​ទេ។"</string>
     <string name="app_info" msgid="6856026610594615344">"ព័ត៌មាន​កម្មវិធី"</string>
     <string name="go_to_web" msgid="1106022723459948514">"ចូលទៅកាន់បណ្តាញ"</string>
-    <string name="mobile_data" msgid="7094582042819250762">"ទិន្នន័យ​ចល័ត"</string>
+    <string name="mobile_data" msgid="7094582042819250762">"ទិន្នន័យ​ទូរសព្ទចល័ត"</string>
     <string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi បាន​បិទ"</string>
     <string name="bt_is_off" msgid="2640685272289706392">"ប៊្លូធូស​បាន​បិទ"</string>
     <string name="dnd_is_off" msgid="6167780215212497572">"មុខងារ​កុំរំខាន​បាន​បិទ"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"កម្មវិធីដែលកំពុងដំណើរការនៅផ្ទៃខាងក្រោយ"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"ចុចដើម្បីមើលព័ត៌មានលម្អិតអំពីការប្រើប្រាស់ទិន្នន័យ និងថ្ម"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"បិទទិន្នន័យ​ចល័ត?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"ការកំណត់​មិនអាច​ផ្ទៀងផ្ទាត់​ការឆ្លើយតប​របស់អ្នក​បាន​ទេ ដោយសារ​កម្មវិធី​កំពុង​បាំងសំណើ​សុំការ​អនុញ្ញាត។"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index 48efc3b..087da86 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"ಕಂಪ್ಯೂಟರ್‌ನ RSA ಕೀ ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಹೀಗಿದೆ :\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"ಈ ಕಂಪ್ಯೂಟರ್‌ನಿಂದ ಯಾವಾಗಲೂ ಅನುಮತಿಸಿ"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯನ್ನು ಅನುಮತಿಸಲಾಗಿಲ್ಲ"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"ಈ ಸಾಧನಕ್ಕೆ ಬಳಕೆದಾರರು ಪ್ರಸ್ತುತ ಸೈನ್ ಇನ್ ಮಾಡಿದ್ದಾರೆ USB ಡೀಬಗ್ ಮಾಡುವುದನ್ನು ಆನ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಬಳಸಲು, ದಯವಿಟ್ಟು ನಿರ್ವಾಹಕ ಬಳಕೆದಾರರಿಗೆ ಬದಲಾಯಿಸಿ."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"ಬಳಕೆದಾರರು ಪ್ರಸ್ತುತ ಈ ಸಾಧನಕ್ಕೆ ಸೈನ್ ಇನ್ ಮಾಡಿದ್ದಾರೆ USB ಡೀಬಗ್ ಮಾಡುವುದನ್ನು ಆನ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಬಳಸಲು, ಪ್ರಾಥಮಿಕ ಬಳಕೆದಾರರಿಗೆ ಬದಲಾಯಿಸಿ."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"ಪರದೆ ತುಂಬಿಸಲು ಝೂಮ್ ಮಾಡು"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"ಪರದೆ ತುಂಬಿಸಲು ವಿಸ್ತಾರಗೊಳಿಸು"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಉಳಿಸಲಾಗುತ್ತಿದೆ…"</string>
@@ -259,10 +259,10 @@
     <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"ಪರದೆಯು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತಿರುಗುತ್ತದೆ."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"ಪರದೆಯನ್ನು ಲ್ಯಾಂಡ್‌ಸ್ಕೇಪ್ ಓರಿಯಂಟೇಶನ್‍ನಲ್ಲಿ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ."</string>
-    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"ಪರದೆಯನ್ನು ಪೋಟ್ರೇಟ್ ಓರಿಯಂಟೇಶನ್‍ನಲ್ಲಿ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ."</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"ಪರದೆಯನ್ನು ಪೋರ್ಟ್ರೇಟ್ ಓರಿಯಂಟೇಶನ್‍ನಲ್ಲಿ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ."</string>
     <string name="accessibility_rotation_lock_off_changed" msgid="8134601071026305153">"ಪರದೆಯು ಈಗ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತಿರುಗುತ್ತದೆ."</string>
     <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"ಪರದೆಯು ಇದೀಗ ಲ್ಯಾಂಡ್‌ಸ್ಕೇಪ್ ಒರಿಯಂಟೇಶನ್‌ನಲ್ಲಿ ಲಾಕ್ ಆಗಿದೆ."</string>
-    <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"ಪರದೆಯು ಇದೀಗ ಪೋಟ್ರೇಟ್ ಒರಿಯಂಟೇಶನ್‌ನಲ್ಲಿ ಲಾಕ್ ಆಗಿದೆ."</string>
+    <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"ಪರದೆಯು ಇದೀಗ ಪೋರ್ಟ್ರೇಟ್ ಒರಿಯಂಟೇಶನ್‌ನಲ್ಲಿ ಲಾಕ್ ಆಗಿದೆ."</string>
     <string name="dessert_case" msgid="1295161776223959221">"ಡೆಸರ್ಟ್ ಕೇಸ್"</string>
     <string name="start_dreams" msgid="5640361424498338327">"ಸ್ಕ್ರೀನ್ ಸೇವರ್"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"ಇಥರ್ನೆಟ್"</string>
@@ -279,7 +279,7 @@
     <string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"ಪರದೆಯನ್ನು ಸ್ವಯಂ-ತಿರುಗಿಸಿ"</string>
     <string name="accessibility_quick_settings_rotation_value" msgid="8187398200140760213">"<xliff:g id="ID_1">%s</xliff:g> ಮೋಡ್"</string>
     <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"ತಿರುಗುವಿಕೆ ಲಾಕ್ ಆಗಿದೆ"</string>
-    <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"ಪೋಟ್ರೇಟ್"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"ಪೋರ್ಟ್ರೇಟ್"</string>
     <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"ಲ್ಯಾಂಡ್‌ಸ್ಕೇಪ್"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"ಇನ್‌ಪುಟ್ ವಿಧಾನ"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"ಸ್ಥಳ"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"ಹುಡುಕಿ"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ಗಾಗಿ ಮೇಲಕ್ಕೆ ಸ್ಲೈಡ್ ಮಾಡಿ."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ಗಾಗಿ ಎಡಕ್ಕೆ ಸ್ಲೈಡ್ ಮಾಡಿ."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"ಅಲಾರಾಂಗಳು, ಜ್ಞಾಪನೆಗಳು, ಈವೆಂಟ್‌ಗಳು ಹಾಗೂ ನೀವು ಸೂಚಿಸಿರುವ ಕರೆದಾರರನ್ನು ಹೊರತುಪಡಿಸಿ ಬೇರಾವುದೇ ಸದ್ದುಗಳು ಅಥವಾ ವೈಬ್ರೇಶನ್‌ಗಳು ನಿಮಗೆ ತೊಂದರೆ ನೀಡುವುದಿಲ್ಲ. ಹಾಗಿದ್ದರೂ, ನೀವು ಪ್ಲೇ ಮಾಡುವ ಸಂಗೀತ, ವೀಡಿಯೊಗಳು ಮತ್ತು ಆಟಗಳ ಆಡಿಯೊ ನಿಮಗೆ ಕೇಳಿಸುತ್ತದೆ."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"ಅಲಾರಾಂಗಳನ್ನು ಹೊರತುಪಡಿಸಿ, ಬೇರಾವುದೇ ಸದ್ದುಗಳು ಅಥವಾ ವೈಬ್ರೇಶನ್‌ಗಳು ನಿಮಗೆ ತೊಂದರೆ ನೀಡುವುದಿಲ್ಲ. ಹಾಗಿದ್ದರೂ, ನೀವು ಪ್ಲೇ ಮಾಡುವ ಸಂಗೀತ, ವೀಡಿಯೊಗಳು ಮತ್ತು ಆಟಗಳ ಆಡಿಯೊ ನಿಮಗೆ ಕೇಳಿಸುತ್ತದೆ."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"ಅಲಾರಾಂಗಳು, ಜ್ಞಾಪನೆಗಳು, ಈವೆಂಟ್‌ಗಳು ಹಾಗೂ ನೀವು ಸೂಚಿಸಿರುವ ಕರೆದಾರರನ್ನು ಹೊರತುಪಡಿಸಿ ಬೇರಾವುದೇ ಸದ್ದುಗಳು ಅಥವಾ ವೈಬ್ರೇಶನ್‌ಗಳು ನಿಮಗೆ ತೊಂದರೆ ನೀಡುವುದಿಲ್ಲ. ಹಾಗಿದ್ದರೂ, ನೀವು ಪ್ಲೇ ಮಾಡುವ ಸಂಗೀತ, ವೀಡಿಯೊಗಳು ಮತ್ತು ಆಟಗಳ ಆಡಿಯೊವನ್ನು ನೀವು ಕೇಳಿಸಿಕೊಳ್ಳುತ್ತೀರಿ."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"ಅಲಾರಾಂಗಳನ್ನು ಹೊರತುಪಡಿಸಿ, ಬೇರಾವುದೇ ಸದ್ದುಗಳು ಅಥವಾ ವೈಬ್ರೇಶನ್‌ಗಳು ನಿಮಗೆ ತೊಂದರೆ ನೀಡುವುದಿಲ್ಲ. ಹಾಗಿದ್ದರೂ, ನೀವು ಪ್ಲೇ ಮಾಡುವ ಸಂಗೀತ, ವೀಡಿಯೊಗಳು ಮತ್ತು ಆಟಗಳ ಆಡಿಯೊವನ್ನು ಕೇಳಿಸಿಕೊಳ್ಳುತ್ತೀರಿ."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"ಕಸ್ಟಮೈಸ್ ಮಾಡು"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"ಇದು ಅಲಾರಮ್‌ಗಳು, ಸಂಗೀತ, ವೀಡಿಯೊಗಳು, ಮತ್ತು ಗೇಮ್‌ಗಳು ಸೇರಿದಂತೆ ಎಲ್ಲಾ ಧ್ವನಿಗಳು ಮತ್ತು ವೈಬ್ರೇಶನ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ. ನಿಮಗೆ ಈಗಲೂ ಫೋನ್ ಕರೆಗಳನ್ನು ಮಾಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"ಇದು ಅಲಾರಮ್‌ಗಳು, ಸಂಗೀತ, ವೀಡಿಯೊಗಳು, ಮತ್ತು ಗೇಮ್‌ಗಳು ಸೇರಿದಂತೆ ಎಲ್ಲಾ ಧ್ವನಿಗಳು ಮತ್ತು ವೈಬ್ರೇಶನ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ. ನಿಮಗೆ ಈಗಲೂ ಫೋನ್ ಕರೆಗಳನ್ನು ಮಾಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"ಇದು ಅಲಾರಮ್‌ಗಳು, ಸಂಗೀತ, ವೀಡಿಯೊಗಳು, ಮತ್ತು ಗೇಮ್‌ಗಳು ಸೇರಿದಂತೆ ಎಲ್ಲಾ ಧ್ವನಿಗಳು ಮತ್ತು ವೈಬ್ರೇಶನ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"ಕೆಳಗೆ ಕಡಿಮೆ ಅವಸರದ ಅಧಿಸೂಚನೆಗಳು"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"ನೀವು ಇಮೇಲ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ, <xliff:g id="VPN_APP">%1$s</xliff:g> ಗೆ ನೀವು ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"ವಿಶ್ವಾಸಾರ್ಹ ರುಜುವಾತುಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ನೆಟ್‌ವರ್ಕ್ ಲಾಗಿಂಗ್ ಆನ್ ಮಾಡಿದ್ದಾರೆ. ಇದು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿನ ಟ್ರಾಫಿಕ್ ಮೇಲೆ ನಿಗಾ ಇರಿಸುತ್ತದೆ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗೆ ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
@@ -497,7 +497,7 @@
     <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ಬ್ಲೂಟೂತ್‌"</string>
     <string name="stream_dtmf" msgid="2447177903892477915">"ಡ್ಯುಯಲ್‌ ಬಹು ಟೋನ್ ಆವರ್ತನೆ"</string>
     <string name="stream_accessibility" msgid="301136219144385106">"ಪ್ರವೇಶಿಸುವಿಕೆ"</string>
-    <string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. ಅನ್‌ಮ್ಯೂಟ್‌ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
+    <string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. ಅನ್‌ಮ್ಯೂಟ್‌ ಮಾಡುವುದಕ್ಕಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
     <string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. ಕಂಪನಕ್ಕೆ ಹೊಂದಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ. ಪ್ರವೇಶಿಸುವಿಕೆ ಸೇವೆಗಳನ್ನು ಮ್ಯೂಟ್‌ ಮಾಡಬಹುದು."</string>
     <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. ಮ್ಯೂಟ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ. ಪ್ರವೇಶಿಸುವಿಕೆ ಸೇವೆಗಳನ್ನು ಮ್ಯೂಟ್‌ ಮಾಡಬಹುದು."</string>
     <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. ವೈಬ್ರೇಟ್ ಮಾಡಲು ಹೊಂದಿಸುವುದಕ್ಕಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"ಈ ಅಪ್ಲಿಕೇಶನ್ ಅಧಿಸೂಚನೆ ವರ್ಗಗಳನ್ನು ಹೊಂದಿಲ್ಲ"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"ಈ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">ಈ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ <xliff:g id="NUMBER_1">%d</xliff:g> ಅಧಿಸೂಚನೆ ವರ್ಗಗಳಲ್ಲಿ 1 ವರ್ಗ</item>
-      <item quantity="other">ಈ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ <xliff:g id="NUMBER_1">%d</xliff:g> ಅಧಿಸೂಚನೆ ವರ್ಗಗಳಲ್ಲಿ 1 ವರ್ಗ</item>
+      <item quantity="one">ಈ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ <xliff:g id="NUMBER_1">%s</xliff:g> ಅಧಿಸೂಚನೆ ವರ್ಗಗಳಲ್ಲಿ 1 ವರ್ಗ</item>
+      <item quantity="other">ಈ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ <xliff:g id="NUMBER_1">%s</xliff:g> ಅಧಿಸೂಚನೆ ವರ್ಗಗಳಲ್ಲಿ 1 ವರ್ಗ</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="other">%d ನಿಮಿಷಗಳು</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"ಬ್ಯಾಟರಿ ಬಳಕೆ"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ಚಾರ್ಜಿಂಗ್ ಸಮಯದಲ್ಲಿ ಬ್ಯಾಟರಿ ಸೇವರ್‌‌ ಲಭ್ಯವಿರುವುದಿಲ್ಲ"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"ಬ್ಯಾಟರಿ ಸೇವರ್‌‌"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"ಚಾರ್ಜಿಂಗ್ ಸಮಯದಲ್ಲಿ ಬ್ಯಾಟರಿ ಸೇವರ್‌‌ ಲಭ್ಯವಿರುವುದಿಲ್ಲ"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"ಬ್ಯಾಟರಿ ಸೇವರ್‌‌"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಹಿನ್ನೆಲೆ ಡೇಟಾವನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> ಬಟನ್"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"ಕುಗ್ಗಿಸಿ"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"ಮುಚ್ಚಿ"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"ವಜಾಗೊಳಿಸಲು ಕೆಳಕ್ಕೆ ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರ ಮೆನು"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"ಮೆನು"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ಚಿತ್ರದಲ್ಲಿನ ಚಿತ್ರದಲ್ಲಿದೆ"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> ಈ ವೈಶಿಷ್ಟ್ಯ ಬಳಸುವುದನ್ನು ನೀವು ಬಯಸದಿದ್ದರೆ, ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆದು, ಅದನ್ನು ಆಫ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> ಈ ವೈಶಿಷ್ಟ್ಯ ಬಳಸುವುದನ್ನು ನೀವು ಬಯಸದಿದ್ದರೆ, ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಲು ಮತ್ತು ಅದನ್ನು ಆಫ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
     <string name="pip_play" msgid="1417176722760265888">"ಪ್ಲೇ"</string>
     <string name="pip_pause" msgid="8881063404466476571">"ವಿರಾಮಗೊಳಿಸಿ"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"ಮುಂದಕ್ಕೆ ಸ್ಕಿಪ್‌ ಮಾಡಿ"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"ಮೆನು"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> ಅಪ್ಲಿಕೇಶನ್"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"ಎಚ್ಚರಿಕೆಗಳು"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"ಬ್ಯಾಟರಿ"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳು"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"ಸಾಮಾನ್ಯ ಸಂದೇಶಗಳು"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"ಸಂಗ್ರಹಣೆ"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಹಿನ್ನೆಲೆಯಲ್ಲಿ ರನ್ ಆಗುತ್ತಿವೆ"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"ಬ್ಯಾಟರಿ,ಡೇಟಾ ಬಳಕೆಯ ವಿವರಗಳಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ಮೊಬೈಲ್ ಡೇಟಾ ಆಫ್ ಮಾಡಬೇಕೆ?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"ಅನುಮತಿ ವಿನಂತಿಯನ್ನು ಅಪ್ಲಿಕೇಶನ್ ಮರೆಮಾಚುತ್ತಿರುವ ಕಾರಣ, ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 3d63cb7..ff3100b 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"컴퓨터 RSA 키 지문:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"이 컴퓨터에서 항상 허용"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB 디버깅이 허용되지 않음"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"현재 이 기기에 로그인한 사용자는 USB 디버깅을 사용할 수 없습니다. 이 기능을 사용하려면 관리자로 전환하세요."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"현재 이 기기에 로그인한 사용자는 USB 디버깅을 사용 설정할 수 없습니다. 이 기능을 사용하려면 기본 사용자로 전환하세요."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"전체화면 모드로 확대"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"전체화면 모드로 확대"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"캡쳐화면 저장 중..."</string>
@@ -242,9 +242,9 @@
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"충전 중"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G 데이터 사용 중지됨"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G 데이터 사용 중지됨"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"모바일 데이터가 일시 중지됨"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"모바일 데이터가 일시중지됨"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"데이터 사용 중지됨"</string>
-    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"설정한 데이터 한도에 도달했습니다. 더 이상 모바일 데이터를 사용하지 않습니다.\n\n계속하면 데이터 사용량에 따른 요금이 부과될 수 있습니다."</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"설정한 데이터 한도에 도달했습니다. 더 이상 모바일 데이터를 사용하지 않습니다.\n\n계속하면 데이터 사용량에 따라 요금이 부과될 수 있습니다."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"재개"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"인터넷에 연결되지 않음"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 연결됨"</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"검색"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 위로 슬라이드"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 왼쪽으로 슬라이드"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"알람, 알림, 일정 및 지정한 발신자부터 받은 연락을 제외하고 소리와 진동을 끕니다. 음악, 동영상, 게임 등에서 재생하도록 선택한 소리는 정상적으로 들립니다."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"알람을 제외하고 소리와 진동을 끕니다. 음악, 동영상, 게임 등에서 재생하도록 선택한 소리는 정상적으로 들립니다."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"알람, 알림, 일정 및 지정한 발신자로부터 받은 전화를 제외한 소리와 진동을 끕니다. 음악, 동영상, 게임 등 재생하도록 선택한 소리는 정상적으로 들립니다."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"알람을 제외한 소리와 진동을 끕니다. 음악, 동영상, 게임 등 재생하도록 선택한 소리는 정상적으로 들립니다."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"맞춤설정"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"알람, 음악, 동영상, 게임을 포함하여 모든 소리와 진동을 끕니다. 전화는 걸 수 있습니다."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"알람, 음악, 동영상, 게임을 비롯한 모든 소리와 진동을 끕니다. 이 경우에도 전화는 걸 수 있습니다."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"알람, 음악, 동영상, 게임을 포함하여 모든 소리와 진동을 끕니다."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"아래에 덜 급한 알림 표시"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"자세히 알아보기"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 네트워크 활동을 모니터링할 수 있습니다."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"공개 VPN 설정"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"공개 VPN 설정"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"신뢰할 수 있는 사용자 인증 정보 열기"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"관리자가 기기에서 발생하는 트래픽을 모니터링하는 네트워크 로깅을 사용 설정했습니다.\n\n자세한 정보는 관리자에게 문의하세요."</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"이 앱에는 알림 카테고리가 없습니다."</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"이 앱의 알림을 사용 중지할 수 없습니다."</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">이 앱에서 <xliff:g id="NUMBER_1">%d</xliff:g>개의 알림 카테고리 중 1개가 정의됨</item>
-      <item quantity="one">이 앱에서 <xliff:g id="NUMBER_0">%d</xliff:g>개의 알림 카테고리 중 1개가 정의됨</item>
+      <item quantity="other">이 앱에서 <xliff:g id="NUMBER_1">%s</xliff:g>개의 알림 카테고리 중 1개가 정의됨</item>
+      <item quantity="one">이 앱에서 <xliff:g id="NUMBER_0">%s</xliff:g>개의 알림 카테고리 중 1개가 정의됨</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="one">%d분</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"배터리 사용량"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"충전하는 동안 배터리 세이버는 사용할 수 없습니다."</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"배터리 세이버"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"충전 중에는 배터리 세이버를 사용할 수 없습니다."</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"배터리 세이버"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"성능 및 백그라운드 데이터를 줄입니다."</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> 버튼"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"최소화"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"닫기"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"아래로 드래그하여 닫기"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"PIP 메뉴"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"메뉴"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g>에서 PIP 사용 중"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g>에서 이 기능이 사용되는 것을 원하지 않는 경우 탭하여 설정을 열고 기능을 사용 중지하세요."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g>에서 이 기능이 사용되는 것을 원하지 않는 경우 탭하여 설정을 열고 기능을 사용 중지하세요."</string>
     <string name="pip_play" msgid="1417176722760265888">"재생"</string>
     <string name="pip_pause" msgid="8881063404466476571">"일시중지"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"다음으로 건너뛰기"</string>
@@ -756,6 +756,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"메뉴"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> 앱"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"알림"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"배터리"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"스크린샷"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"일반 메시지"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"저장공간"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"백그라운드에서 실행 중인 앱"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"탭하여 배터리 및 데이터 사용량 확인"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"모바일 데이터를 사용 중지하시겠습니까?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"앱이 권한 요청을 가리고 있기 때문에 설정에서 내 응답을 확인할 수 없습니다."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 93619a3..4a9f65a 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Компүтердин RSA ачкычынын контролдук суммасы:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Бул компүтерден дайыма уруксат берилсин"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB мүчүлүштүктөрүн оңдоого уруксат жок"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Учурда ушул түзмөккө кирген колдонуучу USB мүчүлүштүктөрүн оңдоо функциясын күйгүзө албайт. Бул функцияны урунуу үчүн, администратордун каттоо эсебине которулуңуз."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Учурда бул аккаунтта USB аркылуу мүчүлүштүктөрдү оңдоо функциясын иштетүүгө болбойт. Негизги колдонуучунун аккаунтуна кириңиз."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Экрнд тлтр ү. чен өлч өзг"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Экранды толтуруу ү-н чоюу"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Скриншот сакталууда…"</string>
@@ -193,7 +193,7 @@
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi өчүрүлдү."</string>
     <string name="accessibility_quick_settings_wifi_changed_on" msgid="6440117170789528622">"Wifi күйгүзүлдү."</string>
     <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Мобилдик түйүн <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Батарей: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Батарея: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane_off" msgid="7786329360056634412">"Учак режими өчүк."</string>
     <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Учак режими күйүк."</string>
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Учак режими өчүрүлдү."</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Издөө"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> үчүн жогору жылмыштырыңыз."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> үчүн солго жылмыштырыңыз."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Ойготкучтардан, эскертүүлөрдөн, жылнаамадагы иш-чараларды эстеткичтерден жана белгиленген байланыштардын чалууларынан тышкары башка үндөр жана дирилдөөлөр тынчыңызды албайт. Бирок ойнотулуп жаткан музыканы, видеолорду жана оюндарды мурдагыдай эле уга бересиз."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Ойготкучтардан башка үндөр жана дирилдөөлөр тынчыңызды албайт. Бирок ойнотулуп жаткан музыканы, видеолорду жана оюндарды мурдагыдай эле уга бересиз."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Ойготкучтардан, эскертүүлөрдөн, жылнаамадагы иш-чараларды эстеткичтерден жана белгиленген байланыштардын чалууларынан тышкары башка үндөр жана дирилдөөлөр тынчыңызды албайт. Бирок ойнотулуп жаткан музыканы, видеолорду жана оюндарды мурдагыдай эле уга бересиз."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Ойготкучтардан башка үндөр жана дирилдөөлөр тынчыңызды албайт. Бирок ойнотулуп жаткан музыканы, видеолорду жана оюндарды мурдагыдай эле уга бересиз."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Ыңгайлаштыруу"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Ушуну менен эскертүүлөрдүн, музыканын, видеолордун жана оюндардын үндөрү жана дирилдөөлөрү өчүрүлөт. Бирок телефон менен сүйлөшө бересиз."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Ушуну менен эскертүүлөрдүн, музыканын, видеолордун жана оюндардын үндөрү жана дирилдөөлөрү өчүрүлөт. Бирок телефон менен сүйлөшө бересиз."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Ушуну менен эскертүүлөрдүн, музыканын, видеолордун жана оюндардын үндөрү жана дирилдөөлөрү өчүрүлөт."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Анчейин шашылыш эмес эскертмелер төмөндө"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Кеңири маалымат"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди тескей турган <xliff:g id="VPN_APP">%1$s</xliff:g> колдонмосуна туташып турасыз."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN жөндөөлөрүн ачуу"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN жөндөөлөрүн ачуу"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Ишенимдүү эсептик дайындар баракчасын ачыңыз"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Администраторуңуз тармактын таржымалын алууну иштетти, андыктан түзмөгүңүздөгү трафик көзөмөлгө алынды.\n\nКеңири маалымат алуу үчүн администраторуңузга кайрылыңыз."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Бул колдонмонун эскертме категориялары жок"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Бул колдонмонун эскертмелерин өчүрүүгө болбойт"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">Бул колдонмодогу <xliff:g id="NUMBER_1">%d</xliff:g> эскертме категориянын ичинен 1 категория</item>
-      <item quantity="one">Бул колдонмодогу <xliff:g id="NUMBER_0">%d</xliff:g> эскертме категориянын ичинен 1 категория</item>
+      <item quantity="other">Бул колдонмодогу <xliff:g id="NUMBER_1">%s</xliff:g> эскертме категориянын ичинен 1 категория</item>
+      <item quantity="one">Бул колдонмодогу <xliff:g id="NUMBER_0">%s</xliff:g> эскертме категориянын ичинен 1 категория</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d мүнөт</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Батарея колдонулушу"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Батареяны үнөмдөгүч түзмөк кубатталып жатканда иштебейт"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Батареяны үнөмдөгүч"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Батареяны үнөмдөгүч түзмөк кубатталып жатканда иштебейт"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Батареяны үнөмдөгүч"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Иштин майнаптуулугун начарлатып, фондук дайындарды чектейт"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> баскычы"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Башкы бет"</string>
@@ -715,7 +715,7 @@
     <string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Ыкчам жөндөөлөрдү ачуу."</string>
     <string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Ыкчам жөндөөлөрдү жабуу."</string>
     <string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Ойготкуч коюлду."</string>
-    <string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g> каттоо эсеби аркылуу кирди"</string>
+    <string name="accessibility_quick_settings_user" msgid="1567445362870421770">"<xliff:g id="ID_1">%s</xliff:g> аккаунту менен кирди"</string>
     <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Интернет жок."</string>
     <string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Чоо-жайын ачуу."</string>
     <string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> жөндөөлөрүн ачуу."</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Кичирейтүү"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Жабуу"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Четке кагуу үчүн төмөн сүйрөңүз"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Сүрөт ичиндеги сүрөт менюсу"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Меню"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> – сүрөт ичиндеги сүрөт"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Эгер <xliff:g id="NAME">%s</xliff:g> колдонмосу бул функцияны пайдаланбасын десеңиз, жөндөөлөрдү ачып туруп, аны өчүрүп коюңуз."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Эгер <xliff:g id="NAME">%s</xliff:g> колдонмосу бул функцияны пайдаланбасын десеңиз, жөндөөлөрдү ачып туруп, аны өчүрүп коюңуз."</string>
     <string name="pip_play" msgid="1417176722760265888">"Ойнотуу"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Тындыруу"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Кийинкисине өткөрүп жиберүү"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Меню"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> колдонмосу"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Эскертүүлөр"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Батарея"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Скриншоттор"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Жалпы билдирүүлөр"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Сактагыч"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Фондо иштеп жаткан колдонмолор"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Батареянын кубаты жана трафиктин көлөмү жөнүндө билүү үчүн таптап коюңуз"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Мобилдик Интернетти өчүрөсүзбү?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Уруксат берүү сурамыңыз көрүнбөй калгандыктан, Жөндөөлөр жообуңузду ырастай албай жатат."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ldrtl/config.xml b/packages/SystemUI/res/values-ldrtl/config.xml
index 40604c1..884c95f 100644
--- a/packages/SystemUI/res/values-ldrtl/config.xml
+++ b/packages/SystemUI/res/values-ldrtl/config.xml
@@ -17,5 +17,5 @@
 <resources>
     <!-- Bounds [left top right bottom] on screen for picture-in-picture (PIP) windows,
          when the PIP menu is shown with settings. -->
-    <string translatable="false" name="pip_settings_bounds">"778 54 1258 324"</string>
+    <string translatable="false" name="pip_settings_bounds">"778 756 1258 1026"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index 3b792ed..941ef71 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"ລາຍນິ້ມື RSA ຂອງຄອມພິວເຕີແມ່ນ:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"ອະນຸຍາດຈາກຄອມພິວເຕີນີ້ຕະຫຼອດ"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"ບໍ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ມີ​ການ​ແກ້​ໄຂ​ບັນ​ຫາ USB"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"ຜູ້​ໃຊ້ເຂົ້າ​ສູ່​ລະ​ບົບ​ຫາອຸ​ປະ​ກອນ​ນີ້ຢູ່​ໃນ​ເວ​ລາ​ນີ້​ບໍ່​ສາ​ມາດ​ເປີດການ​ແກ້​ໄຂ​ບັນ​ຫາ USB ໄດ້. ເພື່ອ​ໃຊ້ຟີ​ເຈີ​ນີ້, ກະ​ລຸ​ນາຍ້າຍ​ໄປ​ຫາ​ຜູ້​ໃຊ້ຄວບ​ຄຸມ."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"ຜູ້ໃຊ້ທີ່ກຳລັງເຂົ້າສູ່ລະບົບອຸປະກອນຢູ່ໃນຕອນນີ້ບໍ່ສາມາດເປີດໃຊ້ການດີບັກ USB ໄດ້. ເພື່ອໃຊ້ຄຸນສົມບັດນີ້, ໃຫ້ສະຫຼັບໄປໃຊ້ຜູ້ໃຊ້ຫຼັກ."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"ຊູມໃຫ້ເຕັມໜ້າຈໍ"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"ປັບໃຫ້ເຕັມໜ້າຈໍ"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"ກຳລັງບັນທຶກຮູບໜ້າຈໍ"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"ຊອກຫາ"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"ເລື່ອນຂຶ້ນເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"ເລື່ອນໄປທາງຊ້າຍເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"ທ່ານຈະບໍ່ໄດ້ຮັບການລົບກວນຈາກສຽງ ຫຼື ການສັ່ງເຕືອນ, ຍົກເວັ້ນໃນເວລາໂມງ, ການແຈ້ງເຕືອນ, ນັດໝາຍ ແລະປະຕິທິນທີ່ທ່ານບຸ . ທ່ານອາດຍັງຄົງໄດ້ຍິນຫາກທ່ານເລືອກຫຼິ້ນເພລງ, ວິດີໂອ ລລະ ເກມ."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"ທ່ານຈະບໍ່ໄດ້ຮັບການລົບກວນຈາກສຽງ ຫຼື ການສັ່ງເຕືອນ, ຍົກເວັ້ນໃນເວລາໂມງປຸກດັງ. ທ່ານອາດຍັງຄົງໄດ້ຍິນຫາກທ່ານເລືອກຫຼິ້ນເພລງ, ວິດີໂອ ລລະ ເກມ."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"ທ່ານຈະບໍ່ໄດ້ຮັບການລົບກວນຈາກສຽງ ແລະ ການສັ່ນເຕືອນ, ຍົກເວັ້ນໃນເວລາໂມງປຸກດັງ, ມີການແຈ້ງເຕືອນ ຫຼື ມີສາຍໂທເຂົ້າຈາກຜູ້ໂທທີ່ທ່ານລະບຸໄວ້. ທ່ານອາດຍັງຄົງໄດ້ຍິນຫາກທ່ານເລືອກຫຼິ້ນເພງ, ວິດີໂອ ແລະ ເກມ."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"ທ່ານຈະບໍ່ໄດ້ຮັບການລົບກວນຈາກສຽງ ແລະ ການສັ່ນເຕືອນ, ຍົກເວັ້ນໃນເວລາໂມງປຸກດັງ. ທ່ານອາດຍັງຄົງໄດ້ຍິນຫາກທ່ານເລືອກຫຼິ້ນເພງ, ວິດີໂອ ແລະ ເກມ."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"ປັບແຕ່ງ"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"ນີ້ຈະເປັນການປິດສຽງ ແລະ ການສັ່ນທັງໝົດ ຮວມທັງສຽງໂມງປຸກ, ເພງ, ວິດີໂອ ແລະ ເກມນຳ. ແຕ່ທ່ານຍັງສາມາດໂທລະສັບໄດ້ປົກກະຕິ."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"ນີ້ຈະເປັນການປິດສຽງ ແລະ ການສັ່ນເຕືອນທັງໝົດໄວ້ ຮວມທັງໂມງປຸກ, ເພງ, ວິດີໂອ ແລະ ເກມ. ທ່ານຈະຍັງສາມາດໄດ້ຍິນສຽງໃນເວລາໂທໄດ້ຢູ່."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"ອັນ​ນີ້ບ​ລັອກ​ທຸກ​ສຽງ ແລະ​ການ​ສັ່ນ, ລວມ​ທັງ​ຈາກ​ໂມງ​ປຸກ, ເພງ, ວິ​ດີ​ໂອ, ແລະ​ເກມ."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"ການ​ແຈ້ງເຕືອນ​ທີ່​ສຳຄັນ​ໜ້ອຍ​ກວ່າ​ຢູ່​ດ້ານ​ລຸ່ມ"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ສຶກສາເພີ່ມເຕີມ"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"ທ່ານເຊື່ອມຕໍ່ກັບ <xliff:g id="VPN_APP">%1$s</xliff:g> ແລ້ວ, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍ, ຮວມທັງອີເມວ, ແອັບ ແລະ ເວັບໄຊຕ່າງໆໄດ້."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"ເປີດການຕັ້ງຄ່າ VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"ເປີດການຕັ້ງຄ່າ VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"ເປີດຂໍ້ມູນການຮັບຮອງທີ່ເຊື່ອຖືໄດ້"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Your admin has turned on network logging, which monitors traffic on your device.\n\nFor more information, contact your admin."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"ແອັບນີ້ບໍ່ມີໝວດໝູ່ການແຈ້ງເຕືອນ"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"ການແຈ້ງເຕືອນຈາກແອັບນີ້ບໍ່ສາມາດປິດໄວ້ໄດ້"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 ຈາກທັງໝົດ <xliff:g id="NUMBER_1">%d</xliff:g> ໝວດໝູ່ການແຈ້ງເຕືອນຈາກແອັບນີ້</item>
-      <item quantity="one">1 ຈາກທັງໝົດ <xliff:g id="NUMBER_0">%d</xliff:g> ໝວດໝູ່ການແຈ້ງເຕືອນຈາກແອັບນີ້</item>
+      <item quantity="other">1 ຈາກທັງໝົດ <xliff:g id="NUMBER_1">%s</xliff:g> ໝວດໝູ່ການແຈ້ງເຕືອນຈາກແອັບນີ້</item>
+      <item quantity="one">1 ຈາກທັງໝົດ <xliff:g id="NUMBER_0">%s</xliff:g> ໝວດໝູ່ການແຈ້ງເຕືອນຈາກແອັບນີ້</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d ນາທີ</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"ການໃຊ້ແບັດເຕີຣີ"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ຕົວປະຢັດແບັດເຕີຣີບໍ່ມີໃຫ້ນຳໃຊ້ໃນລະຫວ່າງການສາກ"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"ຕົວປະຢັດ​ແບັດເຕີຣີ"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"ບໍ່ສາມາດໃຊ້ຕົວປະຢັດແບັດເຕີຣີໃນຂະນະທີ່ກຳລັງສາກໄຟໄດ້"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"ຕົວປະຢັດ​ແບັດເຕີຣີ"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"ຫຼຸດ​ປະ​ສິ​ທິ​ພາບ​ການໃຊ້ງານ ແລະ ​ຂໍ້​ມູນ​ພື້ນຫຼັງ"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"ປຸ່ມ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"ຫຍໍ້"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"ປິດ"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"ລາກລົງເພື່ອປິດໄວ້"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"ເມນູຊ້ອນຮູບພາບ"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"ເມນູ"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ແມ່ນເປັນການສະແດງຜົນຫຼາຍຢ່າງພ້ອມກັນ"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"ຫາກທ່ານບໍ່ຕ້ອງການ <xliff:g id="NAME">%s</xliff:g> ໃຫ້ໃຊ້ຄຸນສົມບັດນີ້, ໃຫ້ແຕະເພື່ອເປີດການຕັ້ງຄ່າ ແລ້ວປິດມັນໄວ້."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"ຫາກທ່ານບໍ່ຕ້ອງການ <xliff:g id="NAME">%s</xliff:g> ໃຫ້ໃຊ້ຄຸນສົມບັດນີ້, ໃຫ້ແຕະເພື່ອເປີດການຕັ້ງຄ່າ ແລ້ວປິດມັນໄວ້."</string>
     <string name="pip_play" msgid="1417176722760265888">"ຫຼິ້ນ"</string>
     <string name="pip_pause" msgid="8881063404466476571">"ຢຸດຊົ່ວຄາວ"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"ຂ້າມໄປລາຍການໜ້າ"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"ເມນູ"</string>
     <string name="tuner_app" msgid="3507057938640108777">"ແອັບ <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"ການເຕືອນ"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"ແບັດເຕີຣີ"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"ຮູບຖ່າຍໜ້າຈໍ"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"ຂໍ້ຄວາມທົ່ວໄປ"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"ບ່ອນເກັບຂໍ້ມູນ"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"ແອັບທີ່ກຳລັງເຮັດວຽກໃນພື້ນຫຼັງ"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"ແຕະເພື່ອເບິ່ງລາຍລະອຽດການນຳໃຊ້ແບັດເຕີຣີ ແລະ ອິນເຕີເນັດ"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ປິດອິນເຕີເນັດມືຖືໄວ້ບໍ?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"ເນື່ອງຈາກມີແອັບໃດໜຶ່ງກຳລັງຂັດຂວາງການຂໍອະນຸຍາດ, ການຕັ້ງຄ່າຈຶ່ງບໍ່ສາມາດຢັ້ງຢືນການຕອບຮັບຂອງທ່ານໄດ້."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index a072976..ee627d7 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -66,7 +66,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Šio kompiuterio RSA rakto kontrolinis kodas yra:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Visada leisti iš šio kompiuterio"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB derinimas neleidžiamas"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Šiuo metu prie įrenginio prisijungęs naudotojas negali įjungti USB derinimo. Norėdami naudoti šią funkciją, perjunkite į pagrindinį administratoriaus naudotoją."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Šiuo metu prie įrenginio prisijungęs naudotojas negali įjungti USB derinimo. Kad galėtumėte naudoti šią funkciją, perjunkite į pagrindinį naudotoją."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Keisti mast., kad atit. ekr."</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Ištempti, kad atit. ekr."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Išsaugoma ekrano kopija..."</string>
@@ -357,10 +357,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Paieška"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Slyskite aukštyn link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Slyskite į kairę link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Jūsų netrikdys garsai ir vibravimas, išskyrus nurodytų signalų, priminimų, įvykių ir skambintojų garsus. Vis tiek girdėsite viską, ką pasirinksite leisti, įskaitant muziką, vaizdo įrašus ir žaidimus."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Jūsų netrikdys garsai ir vibravimas, išskyrus signalus. Vis tiek girdėsite viską, ką pasirinksite leisti, įskaitant muziką, vaizdo įrašus ir žaidimus."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Jūsų netrikdys garsai ir vibravimas, išskyrus nurodytų signalų, priminimų, įvykių ir skambintojų garsus. Vis tiek girdėsite viską, ką pasirinksite leisti, įskaitant muziką, vaizdo įrašus ir žaidimus."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Jūsų netrikdys garsai ir vibravimas, išskyrus signalus. Vis tiek girdėsite viską, ką pasirinksite leisti, įskaitant muziką, vaizdo įrašus ir žaidimus."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Tinkinti"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Taip bus užblokuoti VISI garsai ir vibravimas, įskaitant signalų, muzikos, vaizdo įrašų ir žaidimų garsus ir vibravimą. Vis tiek galėsite skambinti telefonu."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Taip bus užblokuoti VISI garsai ir vibravimas, įskaitant signalų, muzikos, vaizdo įrašų bei žaidimų garsus ir vibravimą. Vis tiek galėsite skambinti telefonu."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Taip bus užblokuoti VISI garsai ir vibravimas, įskaitant signalų, muzikos, vaizdo įrašų ir žaidimų garsus ir vibravimą."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Mažiau skubūs pranešimai toliau"</string>
@@ -385,7 +385,7 @@
     <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Perjungti naudotoją, dabartinis naudotojas <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Dabartinis naudotojas <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"Rodyti profilį"</string>
-    <string name="user_add_user" msgid="5110251524486079492">"Naudotojo pridėjimas"</string>
+    <string name="user_add_user" msgid="5110251524486079492">"Pridėti naudotoją"</string>
     <string name="user_new_user_name" msgid="426540612051178753">"Naujas naudotojas"</string>
     <string name="guest_nickname" msgid="8059989128963789678">"Svečias"</string>
     <string name="guest_new_guest" msgid="600537543078847803">"Pridėti svečią"</string>
@@ -460,7 +460,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Sužinoti daugiau"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Esate prisijungę prie programos „<xliff:g id="VPN_APP">%1$s</xliff:g>“, kuri gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Atidaryti VPN nustatymus"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Atidaryti VPN nustatymus"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Atidaryti patikimų prisijungimo duomenų puslapį"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Administratorius įjungė tinklo duomenų įrašymą į žurnalą. Įjungus šią funkciją stebimas srautas jūsų įrenginyje.\n\nJei reikia daugiau informacijos, susisiekite su administratoriumi."</string>
@@ -560,10 +560,10 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Šioje programoje nėra pranešimų kategorijų"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Šios programos pranešimų negalima išjungti"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 iš <xliff:g id="NUMBER_1">%d</xliff:g> šios programos pranešimų kategorijos</item>
-      <item quantity="few">1 iš <xliff:g id="NUMBER_1">%d</xliff:g> šios programos pranešimų kategorijų</item>
-      <item quantity="many">1 iš <xliff:g id="NUMBER_1">%d</xliff:g> šios programos pranešimų kategorijos</item>
-      <item quantity="other">1 iš <xliff:g id="NUMBER_1">%d</xliff:g> šios programos pranešimų kategorijų</item>
+      <item quantity="one">1 iš <xliff:g id="NUMBER_1">%s</xliff:g> šios programos pranešimų kategorijos</item>
+      <item quantity="few">1 iš <xliff:g id="NUMBER_1">%s</xliff:g> šios programos pranešimų kategorijų</item>
+      <item quantity="many">1 iš <xliff:g id="NUMBER_1">%s</xliff:g> šios programos pranešimų kategorijos</item>
+      <item quantity="other">1 iš <xliff:g id="NUMBER_1">%s</xliff:g> šios programos pranešimų kategorijų</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"„<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>“, „<xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>“"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -597,8 +597,8 @@
       <item quantity="other">%d minučių</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Akum. energ. vartoj."</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Akumuliatoriaus tausojimo priemonė nepasiekiama įkraunant"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Akumuliatoriaus tausojimo priemonė"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Akumuliatoriaus tausojimo priemonė nepasiekiama įkraunant"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Akumuliatoriaus tausojimo priemonė"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Sumažinamas našumas ir foninių duomenų naudojimas"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Mygtukas <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Pagrindinis"</string>
@@ -738,9 +738,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Sumažinti"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Uždaryti"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Nuvilkite žemyn, kad atsisakytumėte"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Vaizdo vaizde meniu"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Meniu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> rodom. vaizdo vaizde"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Jei nenorite, kad <xliff:g id="NAME">%s</xliff:g> naudotų šią funkciją, palietę atidarykite nustatymus ir išjunkite ją."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Jei nenorite, kad „<xliff:g id="NAME">%s</xliff:g>“ naudotų šią funkciją, palietę atidarykite nustatymus ir išjunkite ją."</string>
     <string name="pip_play" msgid="1417176722760265888">"Leisti"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pristabdyti"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Praleisti ir eiti į kitą"</string>
@@ -766,6 +766,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Meniu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Programa „<xliff:g id="APP">%1$s</xliff:g>“"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Įspėjimai"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Akumuliatorius"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Ekrano kopijos"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Bendrieji pranešimai"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Saugykla"</string>
@@ -786,4 +787,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Programos, veikiančios fone"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Palieskite ir sužinokite išsamios informacijos apie akumuliatoriaus bei duomenų naudojimą"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Išjungti mobiliojo ryšio duomenis?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Kadangi programa užstoja leidimo užklausą, nustatymuose negalima patvirtinti jūsų atsakymo."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 0fac57f..e101ff0 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -65,7 +65,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Datora RSA atslēgas ciparfails: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Vienmēr atļaut no šī datora"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB atkļūdošana nav atļauta"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Lietotājs, kurš pašlaik ir pierakstījies šajā ierīcē, nevar iespējot USB atkļūdošanu. Lai izmantotu šo funkciju, pārslēdzieties uz lietotāju, kam ir administratora tiesības."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Lietotājs, kurš pašlaik ir pierakstījies šajā ierīcē, nevar iespējot USB atkļūdošanu. Lai izmantotu šo funkciju, pārslēdzieties uz galveno lietotāju."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Tālumm., lai aizp. ekr."</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Stiepiet, lai aizp. ekr."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Saglabā ekrānuzņēmumu…"</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Meklēt"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Velciet uz augšu, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Velciet pa kreisi, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Jūs netraucēs skaņas un vibrācija, izņemot signālus, atgādinājumus, pasākumus un zvanītājus, ko būsiet norādījis. Jūs joprojām dzirdēsiet atskaņošanai izvēlētos vienumus, tostarp mūziku, videoklipus un spēles."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Jūs netraucēs skaņas un vibrācija, izņemot signālus. Jūs joprojām dzirdēsiet atskaņošanai izvēlētos vienumus, tostarp mūziku, videoklipus un spēles."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Jūs netraucēs skaņas un vibrācija, izņemot signālus, atgādinājumus, pasākumus un zvanītājus, ko būsiet norādījis. Jūs joprojām dzirdēsiet atskaņošanai izvēlētos vienumus, tostarp mūziku, videoklipus un spēles."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Jūs netraucēs skaņas un vibrācija, izņemot signālus. Jūs joprojām dzirdēsiet atskaņošanai izvēlētos vienumus, tostarp mūziku, videoklipus un spēles."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Pielāgot"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Tiks bloķētas VISAS skaņas un vibrosignāli, tostarp modinātāja, mūzikas, videoklipu un spēļu skaņas un signāli. Jūs joprojām varēsiet veikt tālruņa zvanus."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Tiks bloķētas VISAS skaņas un vibrosignāli, tostarp modinātāja, mūzikas, videoklipu un spēļu skaņas un signāli. Jūs joprojām varēsiet veikt tālruņa zvanus."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Tiks bloķētas VISAS skaņas un vibrosignāli, tostarp modinātāja, mūzikas, videoklipu un spēļu skaņas un signāli."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Mazāk steidzami paziņojumi tiek rādīti tālāk"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Uzzināt vairāk"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Ir izveidots savienojums ar lietotni <xliff:g id="VPN_APP">%1$s</xliff:g>, kas var pārraudzīt jūsu darbības tīklā, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Atvērt VPN iestatījumus"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Atvērt VPN iestatījumus"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Atvērt uzticamo akreditācijas datu sadaļu"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Administrators ir ieslēdzis tīkla reģistrēšanu, kuru izmanto, lai pārraudzītu datplūsmu jūsu ierīcē.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
@@ -558,9 +558,9 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Paziņojumu kategorijas šajā lietotnē nav pieejamas."</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Paziņojumus no šīs lietotnes nevar izslēgt"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="zero">1 no <xliff:g id="NUMBER_1">%d</xliff:g> šīs lietotnes paziņojumu kategorijām.</item>
-      <item quantity="one">1 no <xliff:g id="NUMBER_1">%d</xliff:g> šīs lietotnes paziņojumu kategorijas.</item>
-      <item quantity="other">1 no <xliff:g id="NUMBER_1">%d</xliff:g> šīs lietotnes paziņojumu kategorijām.</item>
+      <item quantity="zero">1 no <xliff:g id="NUMBER_1">%s</xliff:g> šīs lietotnes paziņojumu kategorijām.</item>
+      <item quantity="one">1 no <xliff:g id="NUMBER_1">%s</xliff:g> šīs lietotnes paziņojumu kategorijas.</item>
+      <item quantity="other">1 no <xliff:g id="NUMBER_1">%s</xliff:g> šīs lietotnes paziņojumu kategorijām.</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -591,8 +591,8 @@
       <item quantity="other">%d minūtes</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Akumulatora lietojums"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Akumulatora jaudas taupīšanas režīms uzlādes laikā nav pieejams."</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Akumulatora jaudas taupīšanas režīms"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Akumulatora jaudas taupīšanas režīms nav pieejams uzlādes laikā."</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Akumulatora jaudas taupīšanas režīms"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Samazina veiktspēju un fona datus."</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Poga <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Sākumvietas taustiņš"</string>
@@ -732,9 +732,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizēt"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Aizvērt"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Velciet lejup, lai noraidītu"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Izvēlne attēlam attēlā"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Izvēlne"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ir attēlā attēlā"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Ja nevēlaties lietotnē <xliff:g id="NAME">%s</xliff:g> izmantot šo funkciju, pieskarieties, lai atvērtu iestatījumus un funkciju izslēgtu."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Ja nevēlaties lietotnē <xliff:g id="NAME">%s</xliff:g> izmantot šo funkciju, pieskarieties, lai atvērtu iestatījumus un izslēgtu funkciju."</string>
     <string name="pip_play" msgid="1417176722760265888">"Atskaņot"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Apturēt"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Pāriet uz nākamo"</string>
@@ -760,6 +760,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Izvēlne"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> lietotne"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Brīdinājumi"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Akumulators"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Ekrānuzņēmumi"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Vispārīgi ziņojumi"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Krātuve"</string>
@@ -780,4 +781,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Lietotnes, kas darbojas fonā"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Pieskarieties, lai skatītu detalizētu informāciju par akumulatora un datu lietojumu"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vai izslēgt mobilos datus?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Lietotne Iestatījumi nevar verificēt jūsu atbildi, jo cita lietotne aizsedz atļaujas pieprasījumu."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index cabe81e..11673fd 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Клучниот отпечаток на RSA на компјутерот е:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Секогаш дозволувај од овој компјутер"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Отстранувањето грешки на USB не е дозволено"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Корисникот што моментално е најавен на уредов не може да вклучи отстранување грешки на USB. За да ја користите функцијата, префрлете се на корисникот Администратор."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Корисникот што моментално е најавен на уредов не може да вклучи отстранување грешки на USB. За да ја користите функцијава, префрлете се на примарниот корисник."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Зумирај да се исполни екранот"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Растегни да се исполни екранот"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Сликата на екранот се зачувува..."</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Пребарај"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Лизгај нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Лизгај налево за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Нема да ве вознемируваат звуци и вибрации, освен од аларми, потсетници, настани и повикувачи што ќе ги наведете. Сѐ уште ќе слушате сѐ што ќе изберете да пуштите, што опфаќа музика, видеа и игри."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Нема да ве вознемируваат звуци и вибрации, освен од аларми. Сѐ уште ќе слушате сѐ што ќе изберете да пуштите, што опфаќа музика, видеа и игри."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Нема да ве вознемируваат звуци и вибрации, освен од аларми, потсетници, настани и повикувачи што ќе ги наведете. Сѐ уште ќе слушате сѐ што ќе изберете да пуштите, како музика, видеа и игри."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Нема да ве вознемируваат звуци и вибрации, освен од аларми. Сѐ уште ќе слушате сѐ што ќе изберете да пуштите, како музика, видеа и игри."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Приспособи"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Ова ги блокира СИТЕ звуци и вибрации, вклучувајќи ги и оние од алармите, музиката, видеата и игрите. Сѐ уште ќе може да воспоставувате телефонски повици."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Ова ги блокира СИТЕ звуци и вибрации, заедно со алармите, музиката, видеата и игрите. Сѐ уште ќе може да воспоставувате телефонски повици."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Ова ги блокира СИТЕ звуци и вибрации, вклучувајќи ги и оние од алармите, музиката, видеата и игрите."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Долу се помалку итни известувања"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Дознајте повеќе"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Поврзани сте на <xliff:g id="VPN_APP">%1$s</xliff:g>, којашто може да ја следи вашата активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-сајтовите."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Отворете „Поставки за VPN“"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Отворете „Поставки за VPN“"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Отворете ги доверливите акредитиви"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Вашиот администратор вклучил евиденција на мрежата, што подразбира следење на сообраќајот на вашиот уред.\n\nЗа повеќе информации, контактирајте со администраторот."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Апликацијава нема катерии известувања"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Известувањата од апликацијава не може да се исклучат"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 од <xliff:g id="NUMBER_1">%d</xliff:g> категорија известувања од апликацијава</item>
-      <item quantity="other">1 од <xliff:g id="NUMBER_1">%d</xliff:g> категории известувања од апликацијава</item>
+      <item quantity="one">1 од <xliff:g id="NUMBER_1">%s</xliff:g> категорија известувања од апликацијава</item>
+      <item quantity="other">1 од <xliff:g id="NUMBER_1">%s</xliff:g> категории известувања од апликацијава</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="other">%d минути</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Користење батерија"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Штедачот на батерија не е достапен при полнење"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Штедач на батерија"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Штедачот на батерија не е достапен при полнење"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Штедач на батерија"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Ја намалува изведбата и податоците во заднина"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Копче <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home-копче"</string>
@@ -596,8 +596,8 @@
     <string name="keyboard_key_dpad_left" msgid="1346446024676962251">"Стрелка налево"</string>
     <string name="keyboard_key_dpad_right" msgid="3317323247127515341">"Стрелка надесно"</string>
     <string name="keyboard_key_dpad_center" msgid="2566737770049304658">"Центар"</string>
-    <string name="keyboard_key_tab" msgid="3871485650463164476">"Картичка"</string>
-    <string name="keyboard_key_space" msgid="2499861316311153293">"Празно место"</string>
+    <string name="keyboard_key_tab" msgid="3871485650463164476">"Tab"</string>
+    <string name="keyboard_key_space" msgid="2499861316311153293">"Space"</string>
     <string name="keyboard_key_enter" msgid="5739632123216118137">"Внеси"</string>
     <string name="keyboard_key_backspace" msgid="1559580097512385854">"Бришење наназад"</string>
     <string name="keyboard_key_media_play_pause" msgid="3861975717393887428">"Пушти/Паузирај"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Минимизирај"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Затвори"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Повлечете надолу за да отфрлите"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Мени слика во слика"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Мени"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> е во слика во слика"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Ако не сакате <xliff:g id="NAME">%s</xliff:g> да ја користи функцијава, допрете за да ги отворите поставките и исклучете ја."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Ако не сакате <xliff:g id="NAME">%s</xliff:g> да ја користи функцијава, допрете за да ги отворите поставките и да ја исклучите."</string>
     <string name="pip_play" msgid="1417176722760265888">"Пушти"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Паузирај"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Прескокни до следната"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Мени"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Апликација <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Предупредувања"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Батерија"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Слики од екранот"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Општи пораки"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Капацитет"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Апликациите се извршуваат во заднина"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Допрете за детали за батеријата и потрошениот сообраќај"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Да се исклучи мобилниот интернет?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Бидејќи апликацијата го прикрива барањето за дозвола, „Поставките“ не може да го потврдат вашиот одговор."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index 24a1bad..e30dbcb 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"ഈ കമ്പ്യൂട്ടറിന്റെ RSA കീ ഫിംഗർപ്രിന്റ് ഇതാണ്:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"ഈ കമ്പ്യൂട്ടറിൽ നിന്ന് എല്ലായ്പ്പോഴും അനുവദിക്കുക"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB ഡീബഗ്ഗിംഗ് അനുവദനീയമല്ല"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"ഈ ഉപകരണത്തിൽ ഇപ്പോൾ സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്ന ഉപയോക്താവിന് USB ഡീബഗ്ഗിംഗ് ഓണാക്കാനാകില്ല. ഈ ഫീച്ചർ ഉപയോഗിക്കാൻ, അഡ്‌മിൻ ഉപയോക്താവിലേക്ക് മാറുക."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"ഉപകരണത്തിൽ ഇപ്പോൾ സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്ന ഉപയോക്താവിന് USB ഡീബഗ്ഗിംഗ് ഓണാക്കാനാകില്ല. ഈ ഫീച്ചർ ഉപയോഗിക്കാൻ പ്രാഥമിക ഉപയോക്താവിലേക്ക് മാറുക."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"സ്‌ക്രീനിൽ ഉൾക്കൊള്ളിക്കാൻ സൂം ചെയ്യുക"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"സ്‌ക്രീനിൽ ഉൾക്കൊള്ളിക്കാൻ വലിച്ചുനീട്ടുക"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"സ്‌ക്രീൻഷോട്ട് സംരക്ഷിക്കുന്നു..."</string>
@@ -188,7 +188,7 @@
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"ക്രമീകരണം"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"അവലോകനം."</string>
     <string name="accessibility_desc_work_lock" msgid="4288774420752813383">"ഔദ്യോഗിക ലോക്ക് സ്ക്രീൻ"</string>
-    <string name="accessibility_desc_close" msgid="7479755364962766729">"അടയ്‌ക്കുക"</string>
+    <string name="accessibility_desc_close" msgid="7479755364962766729">"അവസാനിപ്പിക്കുക"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"വൈഫൈ ഓഫാക്കി."</string>
     <string name="accessibility_quick_settings_wifi_changed_on" msgid="6440117170789528622">"വൈഫൈ ഓണാക്കി."</string>
@@ -293,7 +293,7 @@
     <string name="quick_settings_user_title" msgid="4467690427642392403">"ഉപയോക്താവ്"</string>
     <string name="quick_settings_user_new_user" msgid="9030521362023479778">"പുതിയ ഉപയോക്താവ്"</string>
     <string name="quick_settings_wifi_label" msgid="9135344704899546041">"വൈഫൈ"</string>
-    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"കണ‌ക്റ്റുചെയ്‌തിട്ടില്ല"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"കണ‌ക്റ്റ് ചെയ്‌തിട്ടില്ല"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"നെറ്റ്‌വർക്ക് ഒന്നുമില്ല"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"വൈഫൈ ഓഫുചെയ്യുക"</string>
     <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"വൈഫൈ ഓണാണ്"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"തിരയൽ"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> എന്നതിനായി മുകളിലേയ്‌ക്ക് സ്ലൈഡുചെയ്യുക."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> എന്നതിനായി ഇടത്തേയ്‌ക്ക് സ്ലൈഡുചെയ്യുക."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"നിങ്ങൾ സജ്ജീകരിച്ച അലാറങ്ങൾ, റിമൈൻഡറുകൾ, ഇവന്റുകൾ, കോളർമാർ എന്നിവയിൽ നിന്നുള്ള ശബ്‌ദങ്ങളും വൈബ്രേഷനുകളുമൊഴികെ മറ്റൊന്നും നിങ്ങളെ ശല്യപ്പെടുത്തുകയില്ല. സംഗീതം, വീഡിയോകൾ, ഗെയിമുകൾ എന്നിവയുൾപ്പെടെ പ്ലേ ചെയ്യുന്നതെന്തും നിങ്ങൾക്ക് ‌തുടർന്നും കേൾക്കാൻ കഴിയും."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"അലാറങ്ങളിൽ നിന്നുള്ള ശബ്‌ദങ്ങളും വൈബ്രേഷനുകളുമൊഴികെ മറ്റൊന്നും നിങ്ങളെ ശല്യപ്പെടുത്തുകയില്ല. സംഗീതം, വീഡിയോകൾ, ഗെയിമുകൾ എന്നിവയുൾപ്പെടെ പ്ലേ ചെയ്യുന്നതെന്തും നിങ്ങൾക്ക് ‌തുടർന്നും കേൾക്കാൻ കഴിയും."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"നിങ്ങൾ സജ്ജീകരിച്ച അലാറങ്ങൾ, റിമൈൻഡറുകൾ, ഇവന്റുകൾ, കോളർമാർ എന്നിവയിൽ നിന്നുള്ള ശബ്‌ദങ്ങളും വൈബ്രേഷനുകളുമൊഴികെ മറ്റൊന്നും നിങ്ങളെ ശല്യപ്പെടുത്തുകയില്ല. സംഗീതം, വീഡിയോകൾ, ഗെയിമുകൾ എന്നിവയുൾപ്പെടെ പ്ലേ ചെയ്യുന്നതെന്തും നിങ്ങൾക്ക് ‌തുടർന്നും കേൾക്കാൻ കഴിയും."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"അലാറങ്ങളിൽ നിന്നുള്ള ശബ്‌ദങ്ങളും വൈബ്രേഷനുകളുമൊഴികെ മറ്റൊന്നും നിങ്ങളെ ശല്യപ്പെടുത്തുകയില്ല. സംഗീതം, വീഡിയോകൾ, ഗെയിമുകൾ എന്നിവയുൾപ്പെടെ പ്ലേ ചെയ്യുന്നതെന്തും നിങ്ങൾക്ക് ‌തുടർന്നും കേൾക്കാൻ കഴിയും."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"ഇഷ്‌ടാനുസൃതമാക്കുക"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"ഇത് അലാറങ്ങൾ, സംഗീതം, വീഡിയോകൾ, ഗെയിമുകൾ എന്നിവയിൽ നിന്നുൾപ്പെടെ എല്ലാ ശബ്‌ദങ്ങളും വൈബ്രേഷനുകളും തടയുന്നു. നിങ്ങൾക്ക് തുടർന്നും ഫോൺ വിളിക്കാനാകും."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"അലാറങ്ങൾ, സംഗീതം, വീഡിയോകൾ, ഗെയിമുകൾ എന്നിവയിൽ നിന്നുൾപ്പെടെ എല്ലാ ശബ്‌ദങ്ങളും വൈബ്രേഷനുകളും ഇത് തടയുന്നു. നിങ്ങൾക്ക് തുടർന്നും ഫോൺ കോളുകൾ ചെയ്യാനാകും."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"ഇത് അലാറങ്ങൾ, സംഗീതം, വീഡിയോകൾ, ഗെയിമുകൾ എന്നിവയിൽ നിന്നുൾപ്പെടെ എല്ലാ ശബ്‌ദങ്ങളും വൈബ്രേഷനുകളും തടയുന്നു."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"ആവശ്യം കുറഞ്ഞ അറിയിപ്പുകൾ ചുവടെ നൽകിയിരിക്കുന്നു"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"കൂടുതലറിയുക"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"നിങ്ങൾ <xliff:g id="VPN_APP">%1$s</xliff:g> ആപ്പിലേക്ക് കണക്റ്റുചെയ്‌തിരിക്കുന്നു, ഇമെയിലുകൾ, ആപ്‌സ്, വെബ്‌സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ നെറ്റ്‌വർക്ക് ആക്റ്റിവിറ്റി നിരീക്ഷിക്കാൻ ഈ ആപ്പിന് കഴിയും."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" 5"</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN ക്രമീകരണം തുറക്കുക"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN ക്രമീകരണം തുറക്കുക"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" 5"</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"പരിചിത ക്രെഡൻഷ്യലുകൾ തുറക്കുക"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"നിങ്ങളുടെ ഉപകരണത്തിലെ ട്രാഫിക്ക് നിരീക്ഷിക്കുന്ന നെറ്റ്‌വർക്ക് ലോഗിംഗ് അഡ്‌മിൻ ഓണാക്കിയിട്ടുണ്ട്.\n\nകൂടുതൽ ‌വിവരങ്ങൾക്ക് അഡ്‌മിനുമായി‌ ബന്ധപ്പെടുക."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"ഈ ആപ്പിന് അറിയിപ്പ് വിഭാഗങ്ങളില്ല"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"ഈ ആപ്പിൽ നിന്നുള്ള അറിയിപ്പുകൾ ഓഫാക്കാൻ കഴിയില്ല"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">ഈ ആപ്പിൽ നിന്ന് 1 / <xliff:g id="NUMBER_1">%d</xliff:g> അറിയിപ്പ് വിഭാഗങ്ങൾ</item>
-      <item quantity="one">ഈ ആപ്പിൽ നിന്ന് 1 / <xliff:g id="NUMBER_0">%d</xliff:g> അറിയിപ്പ് വിഭാഗം</item>
+      <item quantity="other">ഈ ആപ്പിൽ നിന്ന് 1 / <xliff:g id="NUMBER_1">%s</xliff:g> അറിയിപ്പ് വിഭാഗങ്ങൾ</item>
+      <item quantity="one">ഈ ആപ്പിൽ നിന്ന് 1 / <xliff:g id="NUMBER_0">%s</xliff:g> അറിയിപ്പ് വിഭാഗം</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d മിനിറ്റ്</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"ബാറ്ററി ഉപയോഗം"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ചാർജുചെയ്യുന്ന സമയത്ത് ബാറ്ററി ലാഭിക്കൽ നടക്കില്ല"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"ബാറ്ററി ലാഭിക്കൽ"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"ചാർജുചെയ്യുന്ന സമയത്ത് ബാറ്ററി ലാഭിക്കൽ നടക്കില്ല"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"ബാറ്ററി ലാഭിക്കൽ"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"പ്രവർത്തനവും പശ്ചാത്തല ഡാറ്റയും കുറയ്‌ക്കുന്നു"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"ബട്ടൺ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"ഹോം"</string>
@@ -724,11 +724,11 @@
     <string name="tuner_lock_screen" msgid="5755818559638850294">"ലോക്ക് സ്‌ക്രീൻ"</string>
     <string name="pip_phone_expand" msgid="5889780005575693909">"വികസിപ്പിക്കുക"</string>
     <string name="pip_phone_minimize" msgid="1079119422589131792">"ചെറുതാക്കുക‍"</string>
-    <string name="pip_phone_close" msgid="8416647892889710330">"അടയ്‌ക്കുക"</string>
+    <string name="pip_phone_close" msgid="8416647892889710330">"അവസാനിപ്പിക്കുക"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"തള്ളിക്കളയാൻ താഴേക്ക് വലിച്ചിടുക"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"\'ചിത്രത്തിനുള്ളിൽ ചിത്രം\' മെനു"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"മെനു"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ചിത്രത്തിനുള്ളിലെ ചിത്രത്തിലാണ്"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> ഈ ഫീച്ചർ ഉപയോഗിക്കുന്നതിൽ നിങ്ങൾക്ക് താൽപ്പര്യമില്ലെങ്കിൽ, ടാപ്പുചെയ്‌ത് ക്രമീകരണം തുറന്ന് അത് ഓഫാക്കുക."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> ഈ ഫീച്ചർ ഉപയോഗിക്കുന്നതിൽ നിങ്ങൾക്ക് താൽപ്പര്യമില്ലെങ്കിൽ, ടാപ്പുചെയ്‌ത് ക്രമീകരണം തുറന്ന് അത് ഓഫാക്കുക."</string>
     <string name="pip_play" msgid="1417176722760265888">"പ്ലേ ചെയ്യുക"</string>
     <string name="pip_pause" msgid="8881063404466476571">"താൽക്കാലികമായി നിർത്തുക"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"അടുത്തതിലേക്ക് പോകുക"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"മെനു"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> ആപ്പ്"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"അലേർട്ടുകൾ"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"ബാറ്ററി"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"സ്‌ക്രീൻഷോട്ടുകൾ"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"പൊതുവായ സന്ദേശങ്ങൾ"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"സ്റ്റോറേജ്"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"ആപ്പുകൾ പശ്ചാത്തലത്തിൽ റൺ ചെയ്യുന്നു"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"ബാറ്ററി, ഡാറ്റ ഉപയോഗം എന്നിവയുടെ വിശദാംശങ്ങളറിയാൻ ടാപ്പുചെയ്യുക"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"മൊബൈൽ ഡാറ്റ ഓഫാക്കണോ?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"അനുമതി അഭ്യർത്ഥനയെ ഒരു ആപ്പ് മറയ്‌ക്കുന്നതിനാൽ, ക്രമീകരണത്തിന് നിങ്ങളുടെ പ്രതികരണം പരിശോധിച്ചുറപ്പിക്കാനാകില്ല."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index f59046a..8455c5a 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -62,7 +62,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Компьютерийн RSA түлхүүрийн хурууны хээ :\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Энэ компьютерээс орохыг байнга зөвшөөрөх"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB алдаа засалт хийх боломжгүй"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Энэ төхөөрөмжид нэвтэрсэн хэрэглэгч USB алдаа засалтыг асаах боломжгүй байна. Энэ функцийг ашиглахын тулд хэрэглэгчийг админ хэрэглэгч рүү шилжүүлнэ үү."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Энэ төхөөрөмжид нэвтэрсэн хэрэглэгч USB дебаг хийх онцлогийг асаах боломжгүй байна. Энэ онцлогийг ашиглахын тулд үндсэн хэрэглэгч рүү сэлгэнэ үү."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Дэлгэц дүүргэх бол өсгөнө үү"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Дэлгэц дүүргэх бол татна уу"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Дэлгэцийн агшинг хадгалж байна…"</string>
@@ -351,10 +351,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Хайх"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-г гулсуулах."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> хийх зүүнлүү гулсуулах."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Танд сэрүүлэг, сануулга, үйл ажиллагаа, таны сонгосон дуудлага илгээгчээс бусад дуу, чичиргээ саад болохгүй. Та хөгжим, видео, тоглоом зэрэг тоглуулахыг хүссэн бүх зүйлээ сонсох боломжтой хэвээр байна."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Танд сэрүүлгээс бусад дуу, чичиргээ саад болохгүй. Та хөгжим, видео, тоглоом зэрэг тоглуулахыг хүссэн бүх зүйлээ сонсох боломжтой хэвээр байна."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Танд сэрүүлэг, сануулга, арга хэмжээ, таны сонгосон дуудлага илгээгчээс бусад дуу, чичиргээ саад болохгүй. Та хөгжим, видео, тоглоом зэрэг тоглуулахыг хүссэн бүх зүйлээ сонсох боломжтой хэвээр байна."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Танд сэрүүлгээс бусад дуу, чичиргээ саад болохгүй. Та хөгжим, видео, тоглоом зэрэг тоглуулахыг хүссэн бүх зүйлээ сонсох боломжтой хэвээр байна."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Тохируулах"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Энэ нь сэрүүлэг, хөгжим, видео, тоглоом зэргийг оруулаад зэрэг БҮХ дуу, чичиргээг блоклодог. Та дуудлага хийх боломжтой хэвээр байна."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Энэ нь сэрүүлэг, хөгжим, видео, тоглоом зэрэг БҮХ дуу, чичиргээг блоклодог. Та дуудлага хийх боломжтой хэвээр байна."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Энэ нь сэрүүлэг, хөгжим, видео, тоглоом зэргийг оруулаад зэрэг БҮХ дуу, чичиргээг блоклодог."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Яаралтай биш мэдэгдлүүдийг доор"</string>
@@ -454,7 +454,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Дэлгэрэнгүй үзэх"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Таны имэйл, апп, вэб хуудас зэрэг сүлжээний үйл ажиллагааг хянах боломжтой <xliff:g id="VPN_APP">%1$s</xliff:g>-д холбогдсон байна."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN тохиргоог нээх"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN тохиргоог нээх"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Итгэмжлэгдсэн мандат үнэмлэхийг нээх"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Таны админ төхөөрөмжийн ачааллыг хянадаг сүлжээний логийг асаасан байна.\n\nДэлгэрэнгүй мэдээлэл авах бол админтайгаа холбогдоно уу."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Энэ апп-д мэдэгдлийн категори алга"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Энэ аппын мэдэгдлийг унтраах боломжгүй"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">Энэ аппын <xliff:g id="NUMBER_1">%d</xliff:g> мэдэгдлийн категорийн 1</item>
-      <item quantity="one">Энэ аппын <xliff:g id="NUMBER_0">%d</xliff:g> мэдэгдлийн категорийн 1</item>
+      <item quantity="other">Энэ аппын <xliff:g id="NUMBER_1">%s</xliff:g> мэдэгдлийн категорийн 1</item>
+      <item quantity="one">Энэ аппын <xliff:g id="NUMBER_0">%s</xliff:g> мэдэгдлийн категорийн 1</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d минут</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Тэжээл ашиглалт"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Цэнэглэх үед тэжээл хэмнэгч ажиллахгүй"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Тэжээл хэмнэгч"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Цэнэглэх үед тэжээл хэмнэгч ажиллахгүй"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Тэжээл хэмнэгч"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Гүйцэтгэл болон дэвсгэрийн датаг багасгадаг"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> товчлуур"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Нүүр хуудас"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Багасгах"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Хаах"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Хаахын тулд доош чирэх"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Дэлгэцэн доторх дэлгэцийн цэс"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Цэс"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> дэлгэцэн доторх дэлгэцэд байна"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Та <xliff:g id="NAME">%s</xliff:g>-г энэ онцлогийг ашиглахыг хүсэхгүй байвал тохиргоог нээгээд, үүнийг унтраана уу."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Та <xliff:g id="NAME">%s</xliff:g>-д энэ онцлогийг ашиглуулахыг хүсэхгүй байвал тохиргоог нээгээд, үүнийг унтраана уу."</string>
     <string name="pip_play" msgid="1417176722760265888">"Тоглуулах"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Түр зогсоох"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Дараагийн медиад очих"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Цэс"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> апп"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Сануулга"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Батерей"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Дэлгэцийн зураг дарах"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Энгийн зурвас"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Хадгалах сан"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Цаана ажиллаж буй апп"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Батерей, дата ашиглалтын талаар дэлгэрэнгүйг харахын тулд товшино уу"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Мобайл датаг унтраах уу?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Апп нь зөвшөөрлийн хүсэлтийг танихгүй байгаа тул Тохиргооноос таны хариултыг баталгаажуулах боломжгүй байна."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-mr-land/strings.xml b/packages/SystemUI/res/values-mr-land/strings.xml
index fd3ba77..01728d3 100644
--- a/packages/SystemUI/res/values-mr-land/strings.xml
+++ b/packages/SystemUI/res/values-mr-land/strings.xml
@@ -19,5 +19,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="toast_rotation_locked" msgid="7609673011431556092">"स्‍क्रीन आता भूदृश्य अभिमुखतेत लॉक केली आहे."</string>
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"स्‍क्रीन आता लॅंडस्केप ओरिएंटेशनमध्ये लॉक केली आहे."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 9d08636..34064f3 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -45,26 +45,26 @@
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"सेटिंग्ज"</string>
     <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"वाय-फाय"</string>
     <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"स्वयं-फिरणारी स्क्रीन"</string>
-    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"नि:शब्द करा"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"म्युट करा"</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"स्वयं"</string>
     <string name="status_bar_settings_notifications" msgid="397146176280905137">"सूचना"</string>
-    <string name="bluetooth_tethered" msgid="7094101612161133267">"ब्लूटुथ टिथर केले"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"ब्लूटूथ टेदर केले"</string>
     <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"इनपुट पद्धती सेट करा"</string>
     <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"वास्तविक कीबोर्ड"</string>
     <string name="usb_device_permission_prompt" msgid="834698001271562057">"USB डिव्हाइसवर प्रवेश करण्यासाठी <xliff:g id="APPLICATION">%1$s</xliff:g> अॅप ला अनुमती द्यायची?"</string>
     <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"अ‍ॅप <xliff:g id="APPLICATION">%1$s</xliff:g> ला USB उपसाधनात प्रवेश करण्‍याची अनुमती द्यायची?"</string>
-    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"हे USB डीव्हाइस कनेक्ट केलेले असते तेव्हा <xliff:g id="ACTIVITY">%1$s</xliff:g> उघडायचे?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"हे USB डिव्हाइस कनेक्ट केलेले असते तेव्हा <xliff:g id="ACTIVITY">%1$s</xliff:g> उघडायचे?"</string>
     <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"हे USB उपसाधन कनेक्ट केलेले असते तेव्हा <xliff:g id="ACTIVITY">%1$s</xliff:g> उघडायचे?"</string>
-    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"स्थापित केलेले अॅप्स या USB उपसाधनासह कार्य करत नाहीत. <xliff:g id="URL">%1$s</xliff:g> येथे या उपसाधनाविषयी अधिक जाणून घ्या"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"इंस्टॉल केलेले अॅप्स या USB उपसाधनासह कार्य करत नाहीत. <xliff:g id="URL">%1$s</xliff:g> येथे या उपसाधनाविषयी अधिक जाणून घ्या"</string>
     <string name="title_usb_accessory" msgid="4966265263465181372">"USB उपसाधन"</string>
     <string name="label_view" msgid="6304565553218192990">"पहा"</string>
-    <string name="always_use_device" msgid="1450287437017315906">"या USB डिव्‍हाइससाठी डीफॉल्‍टनुसार वापरा"</string>
-    <string name="always_use_accessory" msgid="1210954576979621596">"या USB उपसाधनासाठी डीफॉल्‍टनुसार वापरा"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"या USB डीव्‍हाइससाठी डीफॉल्‍टनुसार वापरा"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"या USB अॅक्सेसरीसाठी डीफॉल्‍टनुसार वापरा"</string>
     <string name="usb_debugging_title" msgid="4513918393387141949">"USB डीबग करण्यास अनुमती द्यायची?"</string>
     <string name="usb_debugging_message" msgid="2220143855912376496">"संगणकाची RSA की फिंगरप्रिंट ही आहे:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"या संगणकावरून नेहमी अनुमती द्या"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB डीबग करण्‍यास अनुमती नाही"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"या डिव्‍हाइसमध्‍ये सध्‍या साइन इन केलेला वापरकर्ता USB डीबग करणे चालू करू शकत नाही. हे वैशिष्ट्य वापरण्‍यासाठी, कृपया एका प्रशासक वापरकर्त्यावर स्विच करा."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"सध्‍या या डीव्हाइसमध्‍ये साइन इन केलेला वापरकर्ता USB डीबग करणे चालू करू शकत नाही. हे वैशिष्‍ट्य वापरण्‍यासाठी, प्राथमिक वापरकर्त्‍यावर स्विच करा."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"स्क्रीन भरण्यासाठी झूम करा"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"स्क्रीन भरण्यासाठी ताणा"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"स्क्रीनशॉट जतन करत आहे…"</string>
@@ -79,9 +79,9 @@
     <string name="usb_preference_title" msgid="6551050377388882787">"USB फाईल स्थानांतरण पर्याय"</string>
     <string name="use_mtp_button_title" msgid="4333504413563023626">"मीडिया प्लेअर म्हणून माउंट करा (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7517127540301625751">"कॅमेरा म्हणून माउंट करा (PTP)"</string>
-    <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac साठी Android फाईल स्थानांतर अॅप स्थापित करा"</string>
-    <string name="accessibility_back" msgid="567011538994429120">"परत"</string>
-    <string name="accessibility_home" msgid="8217216074895377641">"होम स्क्रीन"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac साठी Android फाईल स्थानांतर अॅप इंस्टॉल करा"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"मागे"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"होम"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"मेनू"</string>
     <string name="accessibility_accessibility_button" msgid="7601252764577607915">"प्रवेशयोग्यता"</string>
     <string name="accessibility_recent" msgid="5208608566793607626">"अवलोकन"</string>
@@ -100,8 +100,8 @@
     <string name="cancel" msgid="6442560571259935130">"रद्द करा"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"सुसंगतता झूम बटण."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"लहानपासून मोठ्‍या स्‍क्रीनवर झूम करा."</string>
-    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ब्लूटुथ कनेक्‍ट केले."</string>
-    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"ब्लूटुथ डिस्कनेक्ट केले."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ब्लूटूथ कनेक्‍ट केले."</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"ब्लूटूथ डिस्कनेक्ट केले."</string>
     <string name="accessibility_no_battery" msgid="358343022352820946">"बॅटरी नाही."</string>
     <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"बॅटरी एक बार."</string>
     <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"बॅटरी दोन बार."</string>
@@ -137,7 +137,7 @@
     <string name="accessibility_desc_on" msgid="2385254693624345265">"चालू."</string>
     <string name="accessibility_desc_off" msgid="6475508157786853157">"बंद."</string>
     <string name="accessibility_desc_connected" msgid="8366256693719499665">"कनेक्‍ट केले."</string>
-    <string name="accessibility_desc_connecting" msgid="3812924520316280149">"कनेक्ट करीत आहे."</string>
+    <string name="accessibility_desc_connecting" msgid="3812924520316280149">"कनेक्ट करत आहे."</string>
     <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
     <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
     <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
@@ -155,7 +155,7 @@
     <string name="accessibility_cell_data" msgid="5326139158682385073">"मोबाइल डेटा"</string>
     <string name="accessibility_cell_data_on" msgid="5927098403452994422">"मोबाइल डेटा चालू आहे"</string>
     <string name="accessibility_cell_data_off" msgid="443267573897409704">"मोबाइल डेटा बंद आहे"</string>
-    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ब्लूटुथ टिथरिंग."</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ब्लूटूथ टेदरिंग."</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"विमान मोड."</string>
     <string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN चालू."</string>
     <string name="accessibility_no_sims" msgid="3957997018324995781">"सिम कार्ड नाही."</string>
@@ -168,7 +168,7 @@
     <string name="accessibility_overflow_action" msgid="5681882033274783311">"सर्व सूचना पहा"</string>
     <string name="accessibility_remove_notification" msgid="3603099514902182350">"सूचना साफ करा."</string>
     <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS सक्षम केले."</string>
-    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS प्राप्त करीत आहे."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS प्राप्त करत आहे."</string>
     <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter सक्षम केले."</string>
     <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"रिंगर कंपन."</string>
     <string name="accessibility_ringer_silent" msgid="9061243307939135383">"रिंगर मूक."</string>
@@ -177,9 +177,9 @@
     <string name="accessibility_work_mode" msgid="2478631941714607225">"कार्य मोड"</string>
     <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> डिसमिस करा."</string>
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> डिसमिस केला."</string>
-    <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"अलीकडील सर्व अनुप्रयोग डिसमिस झाले."</string>
-    <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> अनुप्रयोग माहिती उघडा."</string>
-    <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> प्रारंभ करीत आहे."</string>
+    <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"अलीकडील सर्व अॅप्लिकेशन डिसमिस झाले."</string>
+    <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> अॅप्लिकेशन माहिती उघडा."</string>
+    <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"<xliff:g id="APP">%s</xliff:g> प्रारंभ करत आहे."</string>
     <string name="accessibility_recents_task_header" msgid="1437183540924535457">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACTIVITY_LABEL">%2$s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"सूचना डिसमिस केल्या."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"सूचना शेड."</string>
@@ -205,13 +205,13 @@
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"व्यत्यय आणू नका बंद."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"व्यत्यय आणू नका बंद करा"</string>
     <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"व्यत्यय आणू नका चालू करा"</string>
-    <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"ब्लूटुथ."</string>
-    <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"ब्लूटुथ बंद."</string>
-    <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"ब्लूटुथ चालू."</string>
-    <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"ब्लूटुथ कनेक्ट करत आहे."</string>
-    <string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"ब्लूटुथ कनेक्‍ट केले."</string>
-    <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="2730003763480934529">"ब्लूटुथ बंद केले."</string>
-    <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="8722351798763206577">"ब्लूटुथ चालू केले."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"ब्लूटूथ."</string>
+    <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"ब्लूटूथ बंद."</string>
+    <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"ब्लूटूथ चालू."</string>
+    <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"ब्लूटूथ कनेक्ट करत आहे."</string>
+    <string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"ब्लूटूथ कनेक्‍ट केले."</string>
+    <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="2730003763480934529">"ब्लूटूथ बंद केले."</string>
+    <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="8722351798763206577">"ब्लूटूथ चालू केले."</string>
     <string name="accessibility_quick_settings_location_off" msgid="5119080556976115520">"स्थान अहवाल बंद."</string>
     <string name="accessibility_quick_settings_location_on" msgid="5809937096590102036">"स्थान अहवाल चालू."</string>
     <string name="accessibility_quick_settings_location_changed_off" msgid="8526845571503387376">"स्थान अहवाल बंद केला."</string>
@@ -236,7 +236,7 @@
     <string name="accessibility_quick_settings_work_mode_changed_on" msgid="249840330756998612">"कार्य मोड चालू केला."</string>
     <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"डेटा सर्व्हर बंद केला."</string>
     <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"डेटा सर्व्हर चालू केला."</string>
-    <string name="accessibility_brightness" msgid="8003681285547803095">"प्रदर्शन चमक"</string>
+    <string name="accessibility_brightness" msgid="8003681285547803095">"डिस्प्ले चमक"</string>
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"चार्ज होत आहे"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G डेटास विराम दिला आहे"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G डेटास विराम दिला आहे"</string>
@@ -258,10 +258,10 @@
     <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"सूचना सेटिंग्ज"</string>
     <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> सेटिंग्ज"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"स्क्रीन स्वयंचलितपणे फिरेल."</string>
-    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"भूदृश्य अभिमुखतेमध्ये स्क्रीन लॉक केली आहे."</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"लॅंडस्केप ओरिएंटेशनमध्ये स्क्रीन लॉक केली आहे."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"पोर्ट्रेट अभिमुखतेमध्ये स्क्रीन लॉक केली आहे."</string>
     <string name="accessibility_rotation_lock_off_changed" msgid="8134601071026305153">"स्क्रीन आता स्वयंचलितपणे फिरेल."</string>
-    <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"स्‍क्रीन आता भूदृश्य अभिमुखतेत लॉक केली आहे."</string>
+    <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"स्‍क्रीन आता लॅंडस्केप ओरिएंटेशनमध्ये लॉक केली आहे."</string>
     <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"स्क्रीन आता पोर्ट्रेट अभिमुखतेत लॉक केली आहे."</string>
     <string name="dessert_case" msgid="1295161776223959221">"मिष्ठान्न प्रकरण"</string>
     <string name="start_dreams" msgid="5640361424498338327">"स्क्रीन सेव्हर"</string>
@@ -270,9 +270,9 @@
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"केवळ प्राधान्य"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"केवळ अलार्म"</string>
     <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"संपूर्ण शांतता"</string>
-    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ब्लूटुथ"</string>
-    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ब्लूटुथ (<xliff:g id="NUMBER">%d</xliff:g> डिव्हाइसेस)"</string>
-    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ब्लूटुथ बंद"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ब्लूटूथ"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ब्लूटूथ (<xliff:g id="NUMBER">%d</xliff:g> डिव्हाइस)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ब्लूटूथ बंद"</string>
     <string name="quick_settings_bluetooth_detail_empty_text" msgid="4910015762433302860">"कोणतेही जोडलेले डिव्हाइसेस उपलब्ध नाहीत"</string>
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"चमक"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"स्वयं-फिरवा"</string>
@@ -280,11 +280,11 @@
     <string name="accessibility_quick_settings_rotation_value" msgid="8187398200140760213">"<xliff:g id="ID_1">%s</xliff:g> मोड"</string>
     <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"फिरविणे लॉक केले"</string>
     <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"पोर्ट्रेट"</string>
-    <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"भूदृश्य"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"लॅंडस्केप"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"इनपुट पद्धत"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"स्थान"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"स्थान बंद"</string>
-    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"मीडिया डीव्हाइस"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"मीडिया डिव्हाइस"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"फक्त आणीबाणीचे कॉल"</string>
     <string name="quick_settings_settings_label" msgid="5326556592578065401">"सेटिंग्ज"</string>
@@ -297,10 +297,10 @@
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"नेटवर्क नाही"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"वाय-फाय बंद"</string>
     <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"वाय-फाय चालू"</string>
-    <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Wi-Fi नेटवर्क उपलब्‍ध नाहीत"</string>
+    <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"वाय-फाय नेटवर्क उपलब्‍ध नाहीत"</string>
     <string name="quick_settings_cast_title" msgid="7709016546426454729">"कास्‍ट करा"</string>
     <string name="quick_settings_casting" msgid="6601710681033353316">"कास्ट करत आहे"</string>
-    <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"निनावी डीव्हाइस"</string>
+    <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"निनावी डिव्हाइस"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"कास्ट करण्यास तयार"</string>
     <string name="quick_settings_cast_detail_empty_text" msgid="311785821261640623">"कोणतेही डिव्हाइसेस उपलब्ध नाहीत"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"चमक"</string>
@@ -311,7 +311,7 @@
     <string name="quick_settings_done" msgid="3402999958839153376">"पूर्ण झाले"</string>
     <string name="quick_settings_connected" msgid="1722253542984847487">"कनेक्ट केलेले"</string>
     <string name="quick_settings_connected_battery_level" msgid="4136051440381328892">"कनेक्ट केलेले आहे, बॅटरी <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
-    <string name="quick_settings_connecting" msgid="47623027419264404">"कनेक्ट करीत आहे..."</string>
+    <string name="quick_settings_connecting" msgid="47623027419264404">"कनेक्ट करत आहे..."</string>
     <string name="quick_settings_tethering_label" msgid="7153452060448575549">"टेदरिंग"</string>
     <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"हॉटस्पॉट"</string>
     <string name="quick_settings_notifications_label" msgid="4818156442169154523">"सूचना"</string>
@@ -330,7 +330,7 @@
     <string name="quick_settings_nfc_on" msgid="6680317193676884311">"NFC सक्षम केले आहे"</string>
     <string name="recents_empty_message" msgid="808480104164008572">"अलीकडील कोणतेही आयटम नाहीत"</string>
     <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"आपण सर्वकाही साफ केले"</string>
-    <string name="recents_app_info_button_label" msgid="2890317189376000030">"अनुप्रयोग माहिती"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"अॅप्लिकेशन माहिती"</string>
     <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"स्‍क्रीन पिन करणे"</string>
     <string name="recents_search_bar_label" msgid="8074997400187836677">"शोधा"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> प्रारंभ करणे शक्य झाले नाही."</string>
@@ -353,17 +353,17 @@
     <string name="description_target_search" msgid="3091587249776033139">"शोध"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> साठी वर स्लाइड करा."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> साठी डावीकडे स्लाइड करा."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"अलार्म, रिमाइंडर्स, इव्‍हेंट आणि तुम्ही निश्चित केलेल्या कॉलरचा अपवाद वगळता तुम्हाला कोणत्याही आवाज आणि कंपनांचा व्यत्त्यय आणला जाणार नाही. तसे असले तरीही तुम्ही प्ले करायचे ठरवलेले कोणतेही संगीत, व्हिडिओ आणि गेमचे आवाज चालू ठेवले जातील."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"अलार्मचा अपवाद सोडल्यास तुम्हाला कोणत्याही आवाज आणि कंपनांचा व्यत्त्यय आणला जाणार नाही. तसे असले तरीही तुम्ही प्ले करायचे ठरवलेले कोणतेही संगीत, व्हिडिओ आणि गेमचे आवाज चालू ठेवले जातील."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"अलार्म, रिमाइंडर, इव्‍हेंट आणि तुम्ही निश्चित केलेल्या कॉलर व्यतिरिक्त तुम्हाला कोणत्याही आवाज आणि कंपनांचा व्यत्त्यय आणला जाणार नाही. तरीही तुम्ही प्ले करायचे ठरवलेले कोणतेही संगीत, व्हिडिओ आणि गेमचे आवाज ऐकू शकतात."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"अलार्म व्यतिरिक्त तुम्हाला कोणत्याही आवाज आणि कंपनांचा व्यत्त्यय आणला जाणार नाही. तरीही तुम्ही प्ले करायचे ठरवलेले कोणतेही संगीत, व्हिडिओ आणि गेमचे आवाज ऐकू शकतात."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"सानुकूलित करा"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"हे अलार्म, संगीत, व्हिडिओ आणि गेम यासह, सर्व आवाज आणि कंपने अवरोधित करते. आपण तरीही फोन कॉल करण्यात सक्षम व्हाल."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"हे अलार्म, संगीत, व्हिडिओ आणि गेमसह, सर्व आवाज आणि कंपने ब्लॉक करते. तरीही तुम्ही फोन कॉल करू शकतात."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"हे अलार्म, संगीत, व्हिडिओ आणि गेम यासह, सर्व आवाज आणि कंपने अवरोधित करते."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"खाली कमी तातडीच्या सूचना"</string>
     <string name="notification_tap_again" msgid="7590196980943943842">"उघडण्यासाठी पुन्हा टॅप करा"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"अनलॉक करण्यासाठी स्वाइप करा"</string>
-    <string name="do_disclosure_generic" msgid="5615898451805157556">"हे डीव्हाइस तुमची संस्था व्यवस्थापित करते"</string>
-    <string name="do_disclosure_with_name" msgid="5640615509915445501">"हे डीव्हाइस <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> ने व्यवस्थापित केले आहे"</string>
+    <string name="do_disclosure_generic" msgid="5615898451805157556">"हे डिव्हाइस तुमची संस्था व्यवस्थापित करते"</string>
+    <string name="do_disclosure_with_name" msgid="5640615509915445501">"हे डिव्हाइस <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> ने व्यवस्थापित केले आहे"</string>
     <string name="phone_hint" msgid="4872890986869209950">"फोनसाठी चिन्हावरून स्वाइप करा"</string>
     <string name="voice_hint" msgid="8939888732119726665">"व्हॉइस सहाय्यासाठी चिन्हावरून स्वाइप करा"</string>
     <string name="camera_hint" msgid="7939688436797157483">"कॅमेर्‍यासाठी चिन्हावरून स्वाइप करा"</string>
@@ -391,7 +391,7 @@
     <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"काढा"</string>
     <string name="guest_wipe_session_title" msgid="6419439912885956132">"अतिथी, आपले पुन्‍हा स्‍वागत आहे!"</string>
     <string name="guest_wipe_session_message" msgid="8476238178270112811">"आपण आपले सत्र सुरु ठेवू इच्छिता?"</string>
-    <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"येथून प्रारंभ करा"</string>
+    <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"येथून सुरू करा"</string>
     <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"होय, सुरु ठेवा"</string>
     <string name="guest_notification_title" msgid="1585278533840603063">"अतिथी वापरकर्ता"</string>
     <string name="guest_notification_text" msgid="335747957734796689">"अ‍ॅप्स आणि डेटा हटविण्‍यासाठी, अतिथी वापरकर्ता काढा"</string>
@@ -400,7 +400,7 @@
     <string name="user_logout_notification_text" msgid="3350262809611876284">"वर्तमान वापरकर्ता लॉगआउट करा"</string>
     <string name="user_logout_notification_action" msgid="1195428991423425062">"वापरकर्त्यास लॉगआउट करा"</string>
     <string name="user_add_user_title" msgid="4553596395824132638">"नवीन वापरकर्ता जोडायचा?"</string>
-    <string name="user_add_user_message_short" msgid="2161624834066214559">"आपण एक नवीन वापरकर्ता जोडता तेव्हा, त्या व्यक्तीने त्यांचे स्थान सेट करणे आवश्यक असते.\n\nकोणताही वापरकर्ता इतर सर्व वापरकर्त्यांसाठी अॅप्स अद्यतनित करू शकतो."</string>
+    <string name="user_add_user_message_short" msgid="2161624834066214559">"आपण एक नवीन वापरकर्ता जोडता तेव्हा, त्या व्यक्तीने त्यांचे स्थान सेट करणे आवश्यक असते.\n\nकोणताही वापरकर्ता इतर सर्व वापरकर्त्यांसाठी अॅप्स अपडेट करू शकतो."</string>
     <string name="user_remove_user_title" msgid="4681256956076895559">"वापरकर्त्यास काढायचे?"</string>
     <string name="user_remove_user_message" msgid="1453218013959498039">"या वापरकर्त्याचे सर्व अॅप्स आणि डेटा काढून टाकला जाईल."</string>
     <string name="user_remove_user_remove" msgid="7479275741742178297">"काढा"</string>
@@ -410,27 +410,27 @@
     <string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> आपल्‍या स्‍क्रीनवर प्रदर्शित होणारी प्रत्‍येक गोष्‍ट कॅप्‍चर करणे प्रारंभ करेल."</string>
     <string name="media_projection_remember_text" msgid="3103510882172746752">"पुन्हा दर्शवू नका"</string>
     <string name="clear_all_notifications_text" msgid="814192889771462828">"सर्व साफ करा"</string>
-    <string name="media_projection_action_text" msgid="8470872969457985954">"आता प्रारंभ करा"</string>
+    <string name="media_projection_action_text" msgid="8470872969457985954">"आता सुरू करा"</string>
     <string name="empty_shade_text" msgid="708135716272867002">"सूचना नाहीत"</string>
     <string name="profile_owned_footer" msgid="8021888108553696069">"प्रोफाईलचे परीक्षण केले जाऊ शकते"</string>
     <string name="vpn_footer" msgid="2388611096129106812">"नेटवर्कचे परीक्षण केले जाऊ शकते"</string>
     <string name="branded_vpn_footer" msgid="2168111859226496230">"नेटवर्कचे परीक्षण केले जाऊ शकते"</string>
-    <string name="quick_settings_disclosure_management_monitoring" msgid="6645176135063957394">"आपली संस्था हे डीव्हाइस व्यवस्थापित करते आणि नेटवर्क रहदारीचे परीक्षण करू शकते"</string>
-    <string name="quick_settings_disclosure_named_management_monitoring" msgid="370622174777570853">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> हे डीव्हाइस व्यवस्थापित करते आणि नेटवर्क रहदारीचे परीक्षण करू शकते"</string>
-    <string name="quick_settings_disclosure_management_named_vpn" msgid="1085137869053332307">"डीव्हाइस तुमच्या संस्थेद्वारे व्यवस्थापित केले जाते आणि ते <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्ट केलेले आहे"</string>
-    <string name="quick_settings_disclosure_named_management_named_vpn" msgid="6290456493852584017">"डीव्हाइस <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> द्वारे व्यवस्थापित केले जाते आणि ते <xliff:g id="VPN_APP">%2$s</xliff:g> शी कनेक्ट केलेले आहे"</string>
-    <string name="quick_settings_disclosure_management" msgid="3294967280853150271">"डीव्हाइस तुमच्या संस्थेद्वारे व्यवस्थापित आहे"</string>
-    <string name="quick_settings_disclosure_named_management" msgid="1059403025094542908">"डीव्हाइस <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> द्वारे व्यवस्थापित केले जाते"</string>
-    <string name="quick_settings_disclosure_management_vpns" msgid="3698767349925266482">"डीव्हाइस तुमच्या संस्थेद्वारे व्यवस्थापित केले जाते आणि ते VPN शी कनेक्ट केलेले आहे"</string>
-    <string name="quick_settings_disclosure_named_management_vpns" msgid="7777821385318891527">"डीव्हाइस <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> द्वारे व्यवस्थापित केले जाते आणि ते VPN शी कनेक्ट केलेले आहे"</string>
+    <string name="quick_settings_disclosure_management_monitoring" msgid="6645176135063957394">"आपली संस्था हे डिव्हाइस व्यवस्थापित करते आणि नेटवर्क रहदारीचे परीक्षण करू शकते"</string>
+    <string name="quick_settings_disclosure_named_management_monitoring" msgid="370622174777570853">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> हे डिव्हाइस व्यवस्थापित करते आणि नेटवर्क रहदारीचे परीक्षण करू शकते"</string>
+    <string name="quick_settings_disclosure_management_named_vpn" msgid="1085137869053332307">"डिव्हाइस तुमच्या संस्थेद्वारे व्यवस्थापित केले जाते आणि ते <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्ट केलेले आहे"</string>
+    <string name="quick_settings_disclosure_named_management_named_vpn" msgid="6290456493852584017">"डिव्हाइस <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> द्वारे व्यवस्थापित केले जाते आणि ते <xliff:g id="VPN_APP">%2$s</xliff:g> शी कनेक्ट केलेले आहे"</string>
+    <string name="quick_settings_disclosure_management" msgid="3294967280853150271">"डिव्हाइस तुमच्या संस्थेद्वारे व्यवस्थापित आहे"</string>
+    <string name="quick_settings_disclosure_named_management" msgid="1059403025094542908">"डिव्हाइस <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> द्वारे व्यवस्थापित केले जाते"</string>
+    <string name="quick_settings_disclosure_management_vpns" msgid="3698767349925266482">"डिव्हाइस तुमच्या संस्थेद्वारे व्यवस्थापित केले जाते आणि ते VPN शी कनेक्ट केलेले आहे"</string>
+    <string name="quick_settings_disclosure_named_management_vpns" msgid="7777821385318891527">"डिव्हाइस <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> द्वारे व्यवस्थापित केले जाते आणि ते VPN शी कनेक्ट केलेले आहे"</string>
     <string name="quick_settings_disclosure_managed_profile_monitoring" msgid="5125463987558278215">"आपली संस्था आपल्या कार्य प्रोफाइलमधील नेटवर्क रहदारीचे परीक्षण करू शकते"</string>
     <string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8973606847896650284">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> आपल्या कार्य प्रोफाइलमधील नेटवर्क रहदारीचे परीक्षण करू शकते"</string>
     <string name="quick_settings_disclosure_monitoring" msgid="679658227269205728">"नेटवर्कचे परीक्षण केले जाऊ शकते"</string>
-    <string name="quick_settings_disclosure_vpns" msgid="8170318392053156330">"डीव्हाइस VPN शी कनेक्ट केलेले आहे"</string>
+    <string name="quick_settings_disclosure_vpns" msgid="8170318392053156330">"डिव्हाइस VPN शी कनेक्ट केलेले आहे"</string>
     <string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="3494535754792751741">"कार्य प्रोफाइल <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्ट केलेले आहे"</string>
     <string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="4467456202486569906">"वैयक्तिक प्रोफाइल <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्ट केलेले आहे"</string>
-    <string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"डीव्हाइस <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्ट केलेले आहे"</string>
-    <string name="monitoring_title_device_owned" msgid="1652495295941959815">"डीव्हाइस व्‍यवस्‍थापन"</string>
+    <string name="quick_settings_disclosure_named_vpn" msgid="6943724064780847080">"डिव्हाइस <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्ट केलेले आहे"</string>
+    <string name="monitoring_title_device_owned" msgid="1652495295941959815">"डिव्हाइस व्‍यवस्‍थापन"</string>
     <string name="monitoring_title_profile_owned" msgid="6790109874733501487">"प्रोफाईल परीक्षण"</string>
     <string name="monitoring_title" msgid="169206259253048106">"नेटवर्क परीक्षण"</string>
     <string name="monitoring_subtitle_vpn" msgid="876537538087857300">"VPN"</string>
@@ -439,29 +439,29 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPN अक्षम करा"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN डिस्कनेक्ट करा"</string>
     <string name="monitoring_button_view_policies" msgid="100913612638514424">"धोरणे पहा"</string>
-    <string name="monitoring_description_named_management" msgid="5281789135578986303">"तुमचे डीव्हाइस <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> व्‍यवस्‍थापित करते.\n\nतुमचा प्रशासक सेटिंग्ज, कॉर्पोरेट अॅक्सेस, अॅप्स, तुमच्या डीव्हाइस शी संबंधित डेटा आणि तुमच्या डीव्हाइस च्या ठिकाणाची माहिती मॉनिटर करू शकते आणि ती व्‍यवस्‍थापित करू शकतो.\n\n3आणखी माहितीसाठी, तुमच्या प्रशासकाशी संपर्क साधा."</string>
-    <string name="monitoring_description_management" msgid="4573721970278370790">"तुमचे डीव्हाइस तुमची संस्‍था व्‍यवस्‍थापित करते.\n\nतुमचा प्रशासक सेटिंग्ज, कॉर्पोरेट अॅक्सेस, अॅप्स, तुमच्या डीव्हाइस शी संबंधित डेटा आणि तुमच्या डीव्हाइस च्या ठिकाणाची माहिती मॉनिटर करू शकतो आणि ती व्‍यवस्‍थापित करू शकतो.\n\nआणखी माहितीसाठी, तुमच्या प्रशासकाशी संपर्क साधा."</string>
-    <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"आपल्या संस्थेने या डिव्हाइसवर प्रमाणपत्र अधिकार स्थापित केला आहे. आपल्या सुरक्षित नेटवर्क रहदारीचे परीक्षण केले जाऊ शकते किंवा ती सुधारली जाऊ शकते."</string>
-    <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"आपल्या संस्थेने आपल्या कार्य प्रोफाइलवर प्रमाणपत्र अधिकार स्थापित केला आहे. आपल्या सुरक्षित नेटवर्क रहदारीचे परीक्षण केले जाऊ शकते किंवा ती सुधारली जाऊ शकते."</string>
-    <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"या डिव्हाइसवर प्रमाणपत्र अधिकार स्थापित केला आहे. आपल्या सुरक्षित नेटवर्क रहदारीचे परीक्षण केले जाऊ शकते किंवा ती सुधारली जाऊ शकते."</string>
+    <string name="monitoring_description_named_management" msgid="5281789135578986303">"तुमचे डिव्हाइस <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> व्यवस्थापित करते.\n\nतुमचा प्रशासक सेटिंग्ज, कॉर्पोरेट अॅक्सेस, अॅप्स, तुमच्या डिव्हाइस शी संबंधित डेटा आणि तुमच्या डिव्हाइस च्या ठिकाणाची माहिती मॉनिटर करू शकते आणि ती व्यवस्थापित करू शकतो.\n\nआणखी माहितीसाठी, तुमच्या प्रशासकाशी संपर्क साधा."</string>
+    <string name="monitoring_description_management" msgid="4573721970278370790">"तुमचे डिव्हाइस तुमची संस्‍था व्यवस्थापित करते.\n\nतुमचा प्रशासक सेटिंग्ज, कॉर्पोरेट अॅक्सेस, अॅप्स, तुमच्या डिव्हाइस शी संबंधित डेटा आणि तुमच्या डिव्हाइस च्या ठिकाणाची माहिती मॉनिटर करू शकतो आणि ती व्यवस्थापित करू शकतो.\n\nआणखी माहितीसाठी, तुमच्या प्रशासकाशी संपर्क साधा."</string>
+    <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"आपल्या संस्थेने या डिव्हाइसवर प्रमाणपत्र अधिकार इंस्टॉल केला आहे. आपल्या सुरक्षित नेटवर्क रहदारीचे परीक्षण केले जाऊ शकते किंवा ती सुधारली जाऊ शकते."</string>
+    <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"आपल्या संस्थेने आपल्या कार्य प्रोफाइलवर प्रमाणपत्र अधिकार इंस्टॉल केला आहे. आपल्या सुरक्षित नेटवर्क रहदारीचे परीक्षण केले जाऊ शकते किंवा ती सुधारली जाऊ शकते."</string>
+    <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"या डिव्हाइसवर प्रमाणपत्र अधिकार इंस्टॉल केला आहे. आपल्या सुरक्षित नेटवर्क रहदारीचे परीक्षण केले जाऊ शकते किंवा ती सुधारली जाऊ शकते."</string>
     <string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"आपल्या प्रशासकाने नेटवर्क लॉगिंग चालू केले आहे, जे आपल्या डिव्हाइसवरील रहदारीचे परीक्षण करते."</string>
     <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"तुम्‍ही <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्‍ट केले आहे, जे ईमेल, अ‍ॅप्स आणि वेबसाइटसहित आपल्‍या नेटवर्क क्रिया मॉनिटर करू शकते."</string>
     <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"तुम्‍ही <xliff:g id="VPN_APP_0">%1$s</xliff:g> आणि <xliff:g id="VPN_APP_1">%2$s</xliff:g> शी कनेक्‍ट केले आहे, जे ईमेल, अ‍ॅप्स आणि वेबसाइटसहित आपल्‍या नेटवर्क क्रिया मॉनिटर करू शकते."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"आपले कार्य प्रोफाइल <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्‍ट केले आहे, जे ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्‍या नेटवर्क क्रियाकलापाचे परीक्षण करू शकते."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"आपले वैयक्तिक प्रोफाइल <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्‍ट केले आहे, जे ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्‍या नेटवर्क क्रियाकलापाचे परीक्षण करू शकते."</string>
-    <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"तुमचे डीव्हाइस <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ने व्यवस्थापित केले आहे."</string>
-    <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"तुमचे डीव्हाइस व्यवस्थापित करण्यासाठी <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> वापरते."</string>
+    <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"तुमचे डिव्हाइस <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ने व्यवस्थापित केले आहे."</string>
+    <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"तुमचे डिव्हाइस व्यवस्थापित करण्यासाठी <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> वापरते."</string>
     <string name="monitoring_description_do_body" msgid="3639594537660975895">"आपला प्रशासक सेटिंग्ज, कॉर्पोरेट प्रवेश, अॅप्स, आपल्या डिव्हाइशी संबंधित डेटा आणि डिव्हाइसच्या स्थान माहितीचे निरीक्षण आणि व्यवस्थापन करू शकतो."</string>
     <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"अधिक जाणून घ्या"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"आपण <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्‍ट केले आहे, जो ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्‍या नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN सेटिंग्ज उघडा"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN सेटिंग्ज उघडा"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
-    <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"विश्वासू क्रेडेन्शियल उघडा"</string>
+    <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"विश्वासू क्रेडेंशियल उघडा"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"आपल्या प्रशासकाने नेटवर्क लॉगिंग चालू केले आहे, जे आपल्या डिव्हाइसवरील रहदारीचे निरीक्षण करते.\n\nअधिक माहितीसाठी आपल्या प्रशासकाशी संपर्क साधा."</string>
-    <string name="monitoring_description_vpn" msgid="4445150119515393526">"तुम्ही VPN कनेक्शन सेट करण्यासाठी अ‍ॅपला परवानगी दिली.\n\nहा अ‍ॅप ईमेल, अ‍ॅप्स आणि वेबसाइटसह, तुमच्या डीव्हाइस आणि नेटवर्क अॅक्टिव्हिटीचे परीक्षण करू शकतो."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"आपले कार्य प्रोफाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केले जाते.\n\nआपला प्रशासक ईमेल, अॅप्स आणि वेबसाइटसह आपल्या नेटवर्क क्रियाकलापाचे निरीक्षण करण्यास सक्षम आहे.\n\nअधिक माहितीसाठी आपल्या प्रशासकाशी संपर्क साधा.\n\nआपण VPN शी देखील कनेक्ट आहात, जे आपल्या नेटवर्क क्रियाकलापाचे निरीक्षण करू शकते."</string>
+    <string name="monitoring_description_vpn" msgid="4445150119515393526">"तुम्ही VPN कनेक्शन सेट करण्यासाठी अ‍ॅपला परवानगी दिली.\n\nहा अ‍ॅप ईमेल, अ‍ॅप्स आणि वेबसाइटसह, तुमच्या डिव्हाइस आणि नेटवर्क अॅक्टिव्हिटीचे परीक्षण करू शकतो."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"आपले कार्य प्रोफाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केले जाते.\n\nआपला प्रशासक ईमेल, अॅप्स आणि वेबसाइटसह आपल्या नेटवर्क अॅक्टिव्हिटीचे निरीक्षण करण्यास सक्षम आहे.\n\nअधिक माहितीसाठी आपल्या प्रशासकाशी संपर्क साधा.\n\nआपण VPN शी देखील कनेक्ट आहात, जे आपल्या नेटवर्क अॅक्टिव्हिटीचे निरीक्षण करू शकते."</string>
     <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
     <string name="monitoring_description_app" msgid="1828472472674709532">"आपण <xliff:g id="APPLICATION">%1$s</xliff:g> शी कनेक्‍ट केले आहे, जे ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्‍या नेटवर्क क्रियाकलापाचे परीक्षण करू शकते."</string>
     <string name="monitoring_description_app_personal" msgid="484599052118316268">"आपण <xliff:g id="APPLICATION">%1$s</xliff:g> शी कनेक्‍ट केले आहे, जो ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्‍या वैयक्तिक नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
@@ -470,10 +470,10 @@
     <string name="monitoring_description_app_personal_work" msgid="5664165460056859391">"आपले कार्य प्रोफाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केले जाते. प्रोफाइल <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> शी कनेक्‍ट केले आहे, जे ईमेल, अ‍ॅप्स आणि वेबसाइटसह आपल्‍या कार्य नेटवर्क क्रियाकलापाचे परीक्षण करू शकते.\n\nआपण <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> शीदेखील कनेक्‍ट केले आहे, जे आपल्या वैयक्तिक नेटवर्क क्रियाकलापाचे परीक्षण करू शकते."</string>
     <string name="keyguard_indication_trust_granted" msgid="4985003749105182372">"<xliff:g id="USER_NAME">%1$s</xliff:g> साठी अनलॉक केले"</string>
     <string name="keyguard_indication_trust_managed" msgid="8319646760022357585">"<xliff:g id="TRUST_AGENT">%1$s</xliff:g> चालू आहे"</string>
-    <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"तुम्ही मॅन्युअली अनलॉक करेपर्यंत डीव्हाइस लॉक राहील"</string>
+    <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"तुम्ही मॅन्युअली अनलॉक करेपर्यंत डिव्हाइस लॉक राहील"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"सूचना अधिक जलद मिळवा"</string>
     <string name="hidden_notifications_text" msgid="2326409389088668981">"आपण अनलॉक करण्‍यापूर्वी त्यांना पहा"</string>
-    <string name="hidden_notifications_cancel" msgid="3690709735122344913">"नाही धन्यवाद"</string>
+    <string name="hidden_notifications_cancel" msgid="3690709735122344913">"नाही, नको"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"सेट अप"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
     <string name="volume_zen_end_now" msgid="6930243045593601084">"आता बंद करा"</string>
@@ -483,18 +483,18 @@
     <string name="screen_pinning_description" msgid="8909878447196419623">"आपण अनपिन करेर्यंत हे यास दृश्यामध्ये ठेवते. अनपिन करण्‍यासाठी परत आणि विहंगावलोकनास स्पर्श करा आणि धरून ठेवा."</string>
     <string name="screen_pinning_description_accessible" msgid="426190689254018656">"आपण अनपिन करेर्यंत हे यास दृश्यामध्ये ठेवते. अनपिन करण्‍यासाठी विहंगावलोकनास स्पर्श करा आणि धरून ठेवा."</string>
     <string name="screen_pinning_positive" msgid="3783985798366751226">"समजले"</string>
-    <string name="screen_pinning_negative" msgid="3741602308343880268">"नाही धन्यवाद"</string>
+    <string name="screen_pinning_negative" msgid="3741602308343880268">"नाही, नको"</string>
     <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> लपवायचे?"</string>
     <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"आपण सेटिंग्जमध्ये ते पुढील वेळी चालू कराल तेव्हा ते पुन्हा दिसेल."</string>
     <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"लपवा"</string>
     <string name="managed_profile_foreground_toast" msgid="5421487114739245972">"आपण आपले कार्य प्रोफाईल वापरत आहात"</string>
     <string name="stream_voice_call" msgid="4410002696470423714">"कॉल करा"</string>
-    <string name="stream_system" msgid="7493299064422163147">"सिस्टीम"</string>
+    <string name="stream_system" msgid="7493299064422163147">"सिस्टम"</string>
     <string name="stream_ring" msgid="8213049469184048338">"रिंग करा"</string>
     <string name="stream_music" msgid="9086982948697544342">"मीडिया"</string>
     <string name="stream_alarm" msgid="5209444229227197703">"अलार्म"</string>
     <string name="stream_notification" msgid="2563720670905665031">"सूचना"</string>
-    <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ब्लूटुथ"</string>
+    <string name="stream_bluetooth_sco" msgid="2055645746402746292">"ब्लूटूथ"</string>
     <string name="stream_dtmf" msgid="2447177903892477915">"दुहेरी एकाधिक टोन वारंंवारता"</string>
     <string name="stream_accessibility" msgid="301136219144385106">"प्रवेशयोग्यता"</string>
     <string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. सशब्द करण्यासाठी टॅप करा."</string>
@@ -510,8 +510,8 @@
     <string name="quick_settings" msgid="10042998191725428">"द्रुत सेटिंग्ज"</string>
     <string name="status_bar" msgid="4877645476959324760">"स्टेटस बार"</string>
     <string name="overview" msgid="4018602013895926956">"अवलोकन"</string>
-    <string name="demo_mode" msgid="2532177350215638026">"सिस्टीम UI डेमो मोड"</string>
-    <string name="enable_demo_mode" msgid="4844205668718636518">"डेमो मोड सक्षम करा"</string>
+    <string name="demo_mode" msgid="2532177350215638026">"सिस्टम UI डेमो मोड"</string>
+    <string name="enable_demo_mode" msgid="4844205668718636518">"डेमो मोड सुरू करा"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"डेमो मोड दर्शवा"</string>
     <string name="status_bar_ethernet" msgid="5044290963549500128">"इथरनेट"</string>
     <string name="status_bar_alarm" msgid="8536256753575881818">"अलार्म"</string>
@@ -533,14 +533,14 @@
     <string name="tuner_toast" msgid="603429811084428439">"अभिनंदन! सिस्टम UI ट्युनर सेटिंग्जमध्‍ये जोडले गेले आहे"</string>
     <string name="remove_from_settings" msgid="8389591916603406378">"सेटिंग्ज मधून काढा"</string>
     <string name="remove_from_settings_prompt" msgid="6069085993355887748">"सेटिंग्ज मधून सिस्टम UI ट्युनर काढून त्याची सर्व वैशिष्ट्‍ये वापरणे थांबवायचे?"</string>
-    <string name="activity_not_found" msgid="348423244327799974">"अनुप्रयोग आपल्या डिव्हाइसवर स्थापित केलेला नाही"</string>
+    <string name="activity_not_found" msgid="348423244327799974">"अॅप्लिकेशन आपल्या डिव्हाइसवर इंस्टॉल केलेला नाही"</string>
     <string name="clock_seconds" msgid="7689554147579179507">"घड्याळाचे सेकंद दर्शवा"</string>
     <string name="clock_seconds_desc" msgid="6282693067130470675">"स्टेटस बारमध्‍ये घड्याळाचे सेकंद दर्शवा. कदाचित बॅटरी आयुष्‍य प्रभावित होऊ शकते."</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"द्रुत सेटिंग्जची पुनर्रचना करा"</string>
     <string name="show_brightness" msgid="6613930842805942519">"द्रुत सेटिंग्जमध्‍ये चमक दर्शवा"</string>
     <string name="experimental" msgid="6198182315536726162">"प्रायोगिक"</string>
-    <string name="enable_bluetooth_title" msgid="5027037706500635269">"ब्लूटुथ सुरू करायचे?"</string>
-    <string name="enable_bluetooth_message" msgid="9106595990708985385">"आपला कीबोर्ड आपल्या टॅब्लेटसह कनेक्ट करण्यासाठी, आपल्याला प्रथम ब्लूटुथ चालू करणे आवश्यक आहे."</string>
+    <string name="enable_bluetooth_title" msgid="5027037706500635269">"ब्लूटूथ सुरू करायचे?"</string>
+    <string name="enable_bluetooth_message" msgid="9106595990708985385">"आपला कीबोर्ड तुमच्या टॅबलेटसह कनेक्ट करण्यासाठी, तुम्ही प्रथम ब्लूटूथ चालू करणे आवश्यक आहे."</string>
     <string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"चालू करा"</string>
     <string name="show_silently" msgid="6841966539811264192">"सूचना शांतपणे दर्शवा"</string>
     <string name="block" msgid="2734508760962682611">"सर्व सूचना ब्लॉक करा"</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"या अ‍ॅपला सूचना श्रेण्या नाहीत"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"या अ‍ॅपकडून येणार्‍या सूचना बंद ठेवता येणार नाहीत"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">या अॅपकडील <xliff:g id="NUMBER_1">%d</xliff:g> पैकी 1 सूचना श्रेणी</item>
-      <item quantity="other">या अॅपकडील <xliff:g id="NUMBER_1">%d</xliff:g> पैकी 1 सूचना श्रेणी</item>
+      <item quantity="one">या अॅपकडील <xliff:g id="NUMBER_1">%s</xliff:g> पैकी 1 सूचना श्रेणी</item>
+      <item quantity="other">या अॅपकडील <xliff:g id="NUMBER_1">%s</xliff:g> पैकी 1 सूचना श्रेणी</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="other"> %d मिनिटे</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"बॅटरी वापर"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"चार्ज करताना बॅटरी बचतकर्ता उपलब्ध नाही"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"बॅटरी बचतकर्ता"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"चार्ज करताना बॅटरी सेव्‍हर उपलब्ध नाही"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"बॅटरी सेव्हर"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"कामगिरी आणि पार्श्वभूमीवरील डेटा कमी करते"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"बटण <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -614,14 +614,14 @@
     <string name="keyboard_key_insert" msgid="8530501581636082614">"घाला"</string>
     <string name="keyboard_key_num_lock" msgid="5052537581246772117">"Num Lock"</string>
     <string name="keyboard_key_numpad_template" msgid="8729216555174634026">"Numpad <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="keyboard_shortcut_group_system" msgid="6472647649616541064">"सिस्टीम"</string>
-    <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"होम स्क्रीन"</string>
+    <string name="keyboard_shortcut_group_system" msgid="6472647649616541064">"सिस्टम"</string>
+    <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"होम"</string>
     <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"अलीकडील"</string>
     <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"परत"</string>
     <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"सूचना"</string>
     <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"कीबोर्ड शॉर्टकट"</string>
     <string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"इनपुट पद्धत स्विच करा"</string>
-    <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"अनुप्रयोग"</string>
+    <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"अॅप्लिकेशन"</string>
     <string name="keyboard_shortcut_group_applications_assist" msgid="9095441910537146013">"सहाय्य"</string>
     <string name="keyboard_shortcut_group_applications_browser" msgid="6465985474000766533">"ब्राउझर"</string>
     <string name="keyboard_shortcut_group_applications_contacts" msgid="2064197111278436375">"संपर्क"</string>
@@ -662,15 +662,15 @@
     <item msgid="586019486955594690">"उजवीकडे कललेले"</item>
   </string-array>
     <string name="menu_ime" msgid="4998010205321292416">"कीबोर्ड स्विचर"</string>
-    <string name="save" msgid="2311877285724540644">"जतन करा"</string>
+    <string name="save" msgid="2311877285724540644">"सेव्ह करा"</string>
     <string name="reset" msgid="2448168080964209908">"रीसेट करा"</string>
     <string name="adjust_button_width" msgid="6138616087197632947">"बटण रूंदी समायोजित करा"</string>
     <string name="clipboard" msgid="1313879395099896312">"क्लिपबोर्ड"</string>
     <string name="accessibility_key" msgid="5701989859305675896">"सानुकूल नेव्हिगेशन बटण"</string>
     <string name="left_keycode" msgid="2010948862498918135">"डावा कीकोड"</string>
     <string name="right_keycode" msgid="708447961000848163">"उजवा कीकोड"</string>
-    <string name="left_icon" msgid="3096287125959387541">"डावे चिन्ह"</string>
-    <string name="right_icon" msgid="3952104823293824311">"उजवे चिन्ह"</string>
+    <string name="left_icon" msgid="3096287125959387541">"डावे आयकन"</string>
+    <string name="right_icon" msgid="3952104823293824311">"उजवे आयकन"</string>
     <string name="drag_to_add_tiles" msgid="7058945779098711293">"टाइल जोडण्यासाठी ड्रॅग करा"</string>
     <string name="drag_to_remove_tiles" msgid="3361212377437088062">"काढण्यासाठी येथे ड्रॅग करा"</string>
     <string name="qs_edit" msgid="2232596095725105230">"संपादित करा"</string>
@@ -678,12 +678,12 @@
   <string-array name="clock_options">
     <item msgid="5965318737560463480">"तास, मिनिटे आणि सेकंद दर्शवा"</item>
     <item msgid="1427801730816895300">"तास आणि मिनिटे दर्शवा (डीफॉल्ट)"</item>
-    <item msgid="3830170141562534721">"हे चिन्ह दर्शवू नका"</item>
+    <item msgid="3830170141562534721">"हे आयकन दाखवू नका"</item>
   </string-array>
   <string-array name="battery_options">
     <item msgid="3160236755818672034">"नेहमी टक्केवारी दर्शवा"</item>
     <item msgid="2139628951880142927">"चार्ज करताना टक्केवारी दर्शवा (डीफॉल्ट)"</item>
-    <item msgid="3327323682209964956">"हे चिन्ह दर्शवू नका"</item>
+    <item msgid="3327323682209964956">"हे आयकन दाखवू नका"</item>
   </string-array>
     <string name="other" msgid="4060683095962566764">"अन्य"</string>
     <string name="accessibility_divider" msgid="5903423481953635044">"विभाजित-स्क्रीन विभाजक"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"लहान करा"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"बंद करा"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"डिसमिस करण्यासाठी खाली ड्रॅग करा"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"चित्र मेनूमधील चित्र"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"मेनू"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> चित्रामध्ये चित्र मध्ये आहे"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> ने हे वैशिष्ट्य वापरू नये असे आपल्याला वाटत असल्यास, टॅप करून सेटिंग्ज उघडा आणि ते बंद करा."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g>ने हे वैशिष्ट्य वापरू नये असे तुम्हाला वाटत असल्यास, सेटिंग्ज उघडण्यासाठी टॅप करा आणि ते बंद करा."</string>
     <string name="pip_play" msgid="1417176722760265888">"प्ले करा"</string>
     <string name="pip_pause" msgid="8881063404466476571">"थांबवा"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"डावलून पुढे जा"</string>
@@ -747,13 +747,14 @@
     <string name="tuner_launch_app" msgid="1527264114781925348">"<xliff:g id="APP">%1$s</xliff:g> लाँच करा"</string>
     <string name="tuner_other_apps" msgid="4726596850501162493">"इतर अॅप्स"</string>
     <string name="tuner_circle" msgid="2340998864056901350">"मंडळ"</string>
-    <string name="tuner_plus" msgid="6792960658533229675">"अधिक चिन्ह"</string>
-    <string name="tuner_minus" msgid="4806116839519226809">"उणे चिन्ह"</string>
+    <string name="tuner_plus" msgid="6792960658533229675">"अधिक आयकन"</string>
+    <string name="tuner_minus" msgid="4806116839519226809">"उणे आयकन"</string>
     <string name="tuner_left" msgid="8404287986475034806">"डावा"</string>
     <string name="tuner_right" msgid="6222734772467850156">"उजवा"</string>
     <string name="tuner_menu" msgid="191640047241552081">"मेनू"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> अ‍ॅप"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"सूचना"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"बॅटरी"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"स्क्रीनशॉट"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"सर्वसाधारण संदेश"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"संचय"</string>
@@ -763,7 +764,7 @@
     <string name="go_to_web" msgid="1106022723459948514">"वेबवर जा"</string>
     <string name="mobile_data" msgid="7094582042819250762">"मोबाइल डेटा"</string>
     <string name="wifi_is_off" msgid="1838559392210456893">"वाय-फाय बंद आहे"</string>
-    <string name="bt_is_off" msgid="2640685272289706392">"ब्लूटुथ बंद आहे"</string>
+    <string name="bt_is_off" msgid="2640685272289706392">"ब्लूटूथ बंद आहे"</string>
     <string name="dnd_is_off" msgid="6167780215212497572">"व्यत्यय आणू नका बंद आहे"</string>
     <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"व्यत्यय आणू नका एका <xliff:g id="ID_1">%s</xliff:g> स्वयंचलित नियमाने चालू केले."</string>
     <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"व्यत्यय आणू नका (<xliff:g id="ID_1">%s</xliff:g>) अॅपने चालू केले."</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"अॅप्‍स बॅकग्राउंडमध्‍ये चालू आहेत"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"बॅटरी आणि डेटा वापराच्‍या तपशीलांसाठी टॅप करा"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"मोबाइल डेटा बंद करायचा?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"अ‍ॅप परवानगी विनंती अस्पष्‍ट करत असल्‍याने, सेटिंग्ज तुमचा प्रतिसाद पडताळू शकत नाहीत."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index b1592d6..1a1d337 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Cap jari kekunci RSA komputer ialah:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Sentiasa benarkan komputer ini"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Penyahpepijatan USB tidak dibenarkan"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Pengguna yang sedang dilog masuk ke peranti ini tidak boleh menghidupkan penyahpepijatan USB. Untuk menggunakan ciri ini, sila beralih kepada pengguna Pentadbir."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Pengguna yang log masuk ke peranti ini pada masa ini tidak boleh menghidupkan penyahpepijatan USB. Untuk menggunakan ciri ini, tukar kepada pengguna utama."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zum untuk memenuhi skrin"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Regang utk memenuhi skrin"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Menyimpan tangkapan skrin..."</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Carian"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Luncurkan ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Luncurkan ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Anda tidak akan diganggu oleh bunyi dan getaran, kecuali daripada penggera, peringatan, acara dan pemanggil yang anda tetapkan. Anda masih mendengar item lain yang anda pilih untuk dimainkan termasuk muzik, video dan permainan."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Anda tidak akan diganggu oleh bunyi dan getaran, kecuali daripada penggera. Anda masih mendengar item lain yang anda pilih untuk dimainkan termasuk muzik, video dan permainan."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Anda tidak akan diganggu oleh bunyi dan getaran, kecuali daripada penggera, peringatan, acara dan pemanggil yang anda tetapkan. Anda masih mendengar item lain yang anda pilih untuk dimainkan termasuk muzik, video dan permainan."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Anda tidak akan diganggu oleh bunyi dan getaran, kecuali daripada penggera. Anda masih mendengar item lain yang anda pilih untuk dimainkan termasuk muzik, video dan permainan."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Peribadikan"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Mod ini menyekat SEMUA bunyi dan getaran, termasuk daripada penggera, muzik, video dan permainan. Anda masih boleh membuat panggilan telefon."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Mesej ini menyekat SEMUA bunyi dan getaran, termasuk daripada penggera, muzik, video dan permainan. Anda masih dapat membuat panggilan telefon."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Mod ini menyekat SEMUA bunyi dan getaran, termasuk daripada penggera, muzik, video dan permainan."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Pemberitahuan kurang penting di bawah"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Ketahui lebih lanjut"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Anda disambungkan ke <xliff:g id="VPN_APP">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Buka Tetapan VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Buka tetapan VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Buka bukti kelayakan yang dipercayai"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Pentadbir anda telah menghidupkan pengelogan rangkaian yang memantau trafik pada peranti anda.\n\nUntuk mendapatkan maklumat lanjut, hubungi pentadbir anda."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Apl ini tiada kategori pemberitahuan"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Pemberitahuan daripada apl ini tidak boleh dimatikan"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 daripada <xliff:g id="NUMBER_1">%d</xliff:g> kategori pemberitahuan daripada apl ini</item>
-      <item quantity="one">1 daripada <xliff:g id="NUMBER_0">%d</xliff:g> kategori pemberitahuan daripada apl ini</item>
+      <item quantity="other">1 daripada <xliff:g id="NUMBER_1">%s</xliff:g> kategori pemberitahuan daripada apl ini</item>
+      <item quantity="one">1 daripada <xliff:g id="NUMBER_0">%s</xliff:g> kategori pemberitahuan daripada apl ini</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d minit</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Penggunaan bateri"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Penjimat Bateri tidak tersedia semasa mengecas"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Penjimat Bateri"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Penjimat bateri tidak tersedia semasa mengecas"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Penjimat bateri"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Mengurangkan prestasi dan data latar belakang"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Butang <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Skrin Utama"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimumkan"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Tutup"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Seret ke bawah untuk mengetepikan"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menu gambar dalam gambar"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> terdapat dalam gambar dalam gambar"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Jika anda tidak mahu <xliff:g id="NAME">%s</xliff:g> menggunakan ciri ini, ketik untuk membuka tetapan dan matikan ciri."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Jika anda tidak mahu <xliff:g id="NAME">%s</xliff:g> menggunakan ciri ini, ketik untuk membuka tetapan dan matikan ciri."</string>
     <string name="pip_play" msgid="1417176722760265888">"Main"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Jeda"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Langkau ke seterusnya"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Apl <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Makluman"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Bateri"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Tangkapan skrin"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Mesej Am"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Storan"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Apl yang berjalan di latar belakang"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Ketik untuk mendapatkan butiran tentang penggunaan kuasa bateri dan data"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Matikan data mudah alih?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Oleh sebab apl melindungi permintaan kebenaran, Tetapan tidak dapat mengesahkan jawapan anda."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index cabbb49..6b79e33 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"ဒီကွန်ပျူတာရဲ့ RSA key fingerprint ကတော့:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g> ဖြစ်ပါသည်"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"ဒီကွန်ပျူတာမှ အမြဲခွင့်ပြုရန်"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB အမှားပြင်ဆင်ခြင်း ခွင့်မပြုပါ"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"ဤစက်ပစ္စည်းသို့ လက်ရှိဝင်ရောက်ထားသည့် အသုံးပြုသူသည် USB အမှားပြင်ဆင်ခြင်း ဖွင့်၍မရပါ။ ဤအင်္ဂါရပ်ကို အသုံးပြုရန်၊ ကျေးဇူးပြု၍ ကြီးကြပ်သူသို့ပြောင်းပါ။"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"ဤစက်ပစ္စည်းသို့ လက်ရှိဝင်ရောက်ထားသည့် အသုံးပြုသူသည် USB အမှားပြင်ဆင်ခြင်းကို ဖွင့်၍မရပါ။ ဤဝန်ဆောင်မှုကို အသုံးပြုရန် အဓိကအသုံးပြုသူအဖြစ်သို့ ပြောင်းပါ။"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"ဇူးမ်အပြည့်ဆွဲခြင်း"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"ဖန်သားပြင်အပြည့်ဆန့်ခြင်း"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"ဖန်သားပြင်ဓါတ်ပုံသိမ်းစဉ်.."</string>
@@ -79,7 +79,7 @@
     <string name="usb_preference_title" msgid="6551050377388882787">"USB ဖိုင်ပြောင်း ရွေးမှုများ"</string>
     <string name="use_mtp_button_title" msgid="4333504413563023626">"မီဒီယာပလေရာအနေဖြင့် တပ်ဆင်ရန် (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7517127540301625751">"ကင်မရာအနေဖြင့် တပ်ဆင်ရန် (PTP)"</string>
-    <string name="installer_cd_button_title" msgid="2312667578562201583">"Macအတွက်Andriodဖိုင်ပြောင်းအပ်ပလီကေးရှင်းထည့်ခြင်း"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac အတွက် Android File Transfer အက်ပ်ထည့်ခြင်း"</string>
     <string name="accessibility_back" msgid="567011538994429120">"နောက်သို့"</string>
     <string name="accessibility_home" msgid="8217216074895377641">"ပင်မစာမျက်နှာ"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"မီနူး"</string>
@@ -308,14 +308,14 @@
     <string name="quick_settings_inversion_label" msgid="8790919884718619648">"အရောင်များ ပြောင်းပြန်လုပ်ရန်"</string>
     <string name="quick_settings_color_space_label" msgid="853443689745584770">"အရောင် မှန်ကန်စေခြင်း အခြေအနေ"</string>
     <string name="quick_settings_more_settings" msgid="326112621462813682">"နောက်ထပ် ဆက်တင်များ"</string>
-    <string name="quick_settings_done" msgid="3402999958839153376">"လုပ်ပြီး"</string>
+    <string name="quick_settings_done" msgid="3402999958839153376">"ပြီးပါပြီ"</string>
     <string name="quick_settings_connected" msgid="1722253542984847487">"ချိတ်ဆက်ထား"</string>
     <string name="quick_settings_connected_battery_level" msgid="4136051440381328892">"ချိတ်ဆက်ပြီးပါပြီ၊ ဘက်ထရီ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="quick_settings_connecting" msgid="47623027419264404">"ဆက်သွယ်နေ..."</string>
     <string name="quick_settings_tethering_label" msgid="7153452060448575549">"တွဲချီပေးခြင်း"</string>
     <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ဟော့စပေါ့"</string>
     <string name="quick_settings_notifications_label" msgid="4818156442169154523">"အကြောင်းကြားချက်များ"</string>
-    <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ဖလက်ရှမီး"</string>
+    <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ဖလက်ရှ်မီး"</string>
     <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"မိုဘိုင်းဒေတာ"</string>
     <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"ဒေတာ သုံးစွဲမှု"</string>
     <string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"ကျန်ရှိ ဒေတာ"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"ရှာဖွေရန်"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> အတွက် အပေါ်ကို ပွတ်ဆွဲပါ"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> အတွက် ဖယ်ဘက်ကို ပွတ်ဆွဲပါ"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"နှိုးစက်သံ၊ သတိပေးချက်အသံများ၊ ပွဲစဉ်သတိပေးသံများနှင့် သင်ခွင့်ပြုထားသူများထံမှ ဖုန်းခေါ်မှုများမှလွဲ၍ အခြားအသံများနှင့် တုန်ခါမှုများက သင့်ကို အနှောင့်အယှက်ပြုမည် မဟုတ်ပါ။ သို့သော်လည်း သီချင်း၊ ဗီဒီယိုနှင့် ဂိမ်းများအပါအဝင် သင်ကရွေးချယ်ဖွင့်ထားသည့် အရာတိုင်း၏ အသံကိုမူ ကြားနေရဆဲဖြစ်ပါလိမ့်မည်။"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"နှိုးစက်သံမှလွဲ၍ အခြားအသံများနှင့် တုန်ခါမှုများက သင့်ကို အနှောင့်အယှက်ပြုမည် မဟုတ်ပါ။ သို့သော်လည်း သီချင်း၊ ဗီဒီယိုနှင့် ဂိမ်းများအပါအဝင် သင်ကရွေးချယ်ဖွင့်ထားသည့် အရာတိုင်း၏ အသံကိုမူ ကြားနေရဆဲဖြစ်ပါလိမ့်မည်။"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"နှိုးစက်သံ၊ သတိပေးချက်အသံများ၊ ပွဲစဉ်သတိပေးသံများနှင့် သင်ခွင့်ပြုထားသူများထံမှ ဖုန်းခေါ်မှုများမှလွဲ၍ အခြားအသံများနှင့် တုန်ခါမှုများက သင့်ကို အနှောင့်အယှက်ပြုမည် မဟုတ်ပါ။ သို့သော်လည်း သီချင်း၊ ဗီဒီယိုနှင့် ဂိမ်းများအပါအဝင် သင်ကရွေးချယ်ဖွင့်ထားသည့် အရာတိုင်း၏ အသံကိုမူ ကြားနေရဆဲဖြစ်ပါလိမ့်မည်။"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"နှိုးစက်သံမှလွဲ၍ အခြားအသံများနှင့် တုန်ခါမှုများက သင့်ကို အနှောင့်အယှက်ပြုမည် မဟုတ်ပါ။ သို့သော်လည်း သီချင်း၊ ဗီဒီယိုနှင့် ဂိမ်းများအပါအဝင် သင်ကရွေးချယ်ဖွင့်ထားသည့် အရာတိုင်း၏ အသံကိုမူ ကြားနေရဆဲဖြစ်ပါလိမ့်မည်။"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"စိတ်ကြိုက် ပြုလုပ်ရန်"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"ဤအရာမှ နှိုးစက်၊ ဂီတ၊ ဗွီဒီယိုများနှင့် ဂိမ်းများ အပါအဝင်၊ အသံအားလုံးနှင့် တုန်ခါမှုများအား တားဆီးပေးသည်။ ဖုန်းခေါ်ဆိုမှုများ ပြုလုပ်နိုင်ဆဲဖြစ်မည်။"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"၎င်းသည် နှိုးစက်သံ၊ သီချင်း၊ ဗွီဒီယိုများနှင့် ဂိမ်းများ အပါအဝင် အသံများနှင့် တုန်ခါမှုအားလုံးကို တားဆီးပေးသည်။ ဖုန်းခေါ်ဆိုမှုများကိုမူ ပြုလုပ်နိုင်ဆဲဖြစ်ပါလိမ့်မည်။"</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"နှိုးစက်၊ ဂီတ၊ ဗွီဒီယိုများနှင့် ဂိမ်းများ အပါအဝင်၊ အသံအားလုံးနှင့် တုန်ခါမှုများအား ဤအရာမှ တားဆီးပေး၏။"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"အရေးပါမှု နည်းသည့် အကြောင်းကြားချက်များ အောက်မှာ"</string>
@@ -381,10 +381,10 @@
     <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"အသုံးပြုသူကို ပြောင်းရန်၊ လက်ရှိ အသုံးပြုသူ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"လတ်တလော သုံးစွဲသူ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"ပရိုဖိုင်ကို ပြရန်"</string>
-    <string name="user_add_user" msgid="5110251524486079492">"သုံးသူ ထပ်ထည့်ရန်"</string>
+    <string name="user_add_user" msgid="5110251524486079492">"အသုံးပြုသူ ထည့်ရန်"</string>
     <string name="user_new_user_name" msgid="426540612051178753">"အသုံးပြုသူ အသစ်"</string>
     <string name="guest_nickname" msgid="8059989128963789678">"ဧည့်သည်"</string>
-    <string name="guest_new_guest" msgid="600537543078847803">"ဧည့်သည့်ကို ထည့်ပေးရန်"</string>
+    <string name="guest_new_guest" msgid="600537543078847803">"ဧည့်သည့် ထည့်ရန်"</string>
     <string name="guest_exit_guest" msgid="7187359342030096885">"ဧည့်သည်ကို ဖယ်ထုတ်ရန်"</string>
     <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"ဧည့်သည်ကို ဖယ်ထုတ်လိုက်ရမလား?"</string>
     <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"ဒီချိတ်ဆက်မှု ထဲက အက်ပ်များ အားလုံး နှင့် ဒေတာကို ဖျက်ပစ်မည်။"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ပိုမိုလေ့လာရန်"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"အီးမေးလ်၊ အက်ပ်နှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည့် <xliff:g id="VPN_APP">%1$s</xliff:g> သို့ သင်သည် ချိတ်ဆက်ထားပါသည်။"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Open VPN ဆက်တင်များ"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN ဆက်တင်များကို ဖွင့်ရန်"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"ယုံကြည်စိတ်ချရသော အထောက်အထားများကို ဖွင့်ရန်"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"သင့်စီမံခန့်ခွဲသူသည် စက်ပစ္စည်းပေါ်ရှိ ဒေတာအသွားအလာကို စောင့်ကြည့်နိုင်သည့် ကွန်ရက်အတွက် မှတ်တမ်းတင်ခြင်းကို ဖွင့်ထားပါသည်။\n\nနောက်ထပ် အချက်အလက်များအတွက် သင့်စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။"</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"ဤအက်ပ်တွင် အကြောင်းကြားချက် အမျိုးအစားများ မရှိပါ"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"ဤအက်ပ်မှပို့သော အကြောင်းကြားချက်များကို ပိတ်ထား၍မရပါ"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">ဤအက်ပ်ရှိ အကြောင်းကြားချက်အမျိုးအစား <xliff:g id="NUMBER_1">%d</xliff:g> ခု အနက်မှ ၁ ခု</item>
-      <item quantity="one">ဤအက်ပ်ရှိ အကြောင်းကြားချက်အမျိုးအစား <xliff:g id="NUMBER_0">%d</xliff:g> ခု အနက်မှ ၁ ခု</item>
+      <item quantity="other">ဤအက်ပ်ရှိ အကြောင်းကြားချက်အမျိုးအစား <xliff:g id="NUMBER_1">%s</xliff:g> ခု အနက်မှ ၁ ခု</item>
+      <item quantity="one">ဤအက်ပ်ရှိ အကြောင်းကြားချက်အမျိုးအစား <xliff:g id="NUMBER_0">%s</xliff:g> ခု အနက်မှ ၁ ခု</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>၊ <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d မိနစ်</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"ဘက်ထရီ အသုံးပြုမှု"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"အားသွင်းနေချိန်မှာ Battery Saver ကို သုံးမရပါ"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Battery Saver"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"အားသွင်းနေစဉ် ဘက်ထရီချွေတာမှုစနစ်ကို သုံး၍ မရပါ"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"ဘက်ထရီ ချွေတာမှုစနစ်"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"လုပ်ဆောင်မှု နှင့် နောက်ခံ ​ဒေတာကို လျော့နည်းစေပါသည်"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"ခလုတ် <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"ပင်မ"</string>
@@ -597,7 +597,7 @@
     <string name="keyboard_key_dpad_right" msgid="3317323247127515341">"ညာ"</string>
     <string name="keyboard_key_dpad_center" msgid="2566737770049304658">"ဌာန"</string>
     <string name="keyboard_key_tab" msgid="3871485650463164476">"တဘ်"</string>
-    <string name="keyboard_key_space" msgid="2499861316311153293">"နေရာခြားပါ"</string>
+    <string name="keyboard_key_space" msgid="2499861316311153293">"Space"</string>
     <string name="keyboard_key_enter" msgid="5739632123216118137">"Enter ခလုတ်"</string>
     <string name="keyboard_key_backspace" msgid="1559580097512385854">"နောက်ပြန်ဖျက်ပါ"</string>
     <string name="keyboard_key_media_play_pause" msgid="3861975717393887428">"ဖွင့်ပါ/ခဏရပ်ပါ"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"ချုံ့ရန်"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"ပိတ်ရန်"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"ပယ်ရန်အတွက် အောက်သို့ ပွတ်ဆွဲပါ"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"တစ်ခုပေါ်တစ်ခု ထပ်၍ ဖွင့်ခြင်းမီနူး"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"မီနူး"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> သည် တစ်ခုပေါ် တစ်ခုထပ်၍ ဖွင့်ထားသည်"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> အား ဤဝန်ဆောင်မှုကို အသုံးမပြုစေလိုလျှင် ဆက်တင်ကိုဖွင့်ရန် တို့ပြီး ၎င်းဝန်ဆောင်မှုကို ပိတ်လိုက်ပါ။"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> အား ဤဝန်ဆောင်မှုကို အသုံးမပြုစေလိုလျှင် ဆက်တင်ကိုဖွင့်ရန် တို့ပြီး ၎င်းဝန်ဆောင်မှုကို ပိတ်လိုက်ပါ။"</string>
     <string name="pip_play" msgid="1417176722760265888">"ဖွင့်ရန်"</string>
     <string name="pip_pause" msgid="8881063404466476571">"ခေတ္တရပ်ရန်"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"နောက်တစ်ခုသို့ ကျော်ရန်"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"မီနူး"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> အက်ပ်"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"သတိပေးချက်များ"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"ဘက်ထရီ"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"မျက်နှာပြင်ဓာတ်ပုံများ"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"အထွေထွေ မက်ဆေ့ဂျ်များ"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"သိုလှောင်မှုများ"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"နောက်ခံတွင် ပွင့်နေသော အက်ပ်များ"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"ဘက်ထရီနှင့် ဒေတာအသုံးပြုမှု အသေးစိတ်ကို ကြည့်ရန် တို့ပါ"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"မိုဘိုင်းဒေတာကို ပိတ်လိုပါသလား။"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"အပလီကေးရှင်းတစ်ခုက ခွင့်ပြုချက်တောင်းခံမှုကို ပိတ်ထားသောကြောင့် ဆက်တင်များသည် သင်၏ လုပ်ဆောင်ကို တုံ့ပြန်နိုင်ခြင်းမရှိပါ။"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 3dc5436..4dd8c03 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -24,7 +24,7 @@
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Fjern fra listen"</string>
     <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info om appen"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"De sist brukte skjermene dine vises her"</string>
-    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Avvis nylige apper"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Avvis nylig brukte apper"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
       <item quantity="other">%d skjermer i oversikten</item>
       <item quantity="one">1 skjerm i oversikten</item>
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Datamaskinens nøkkelfingeravtrykk for RSA er:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Tillat alltid fra denne datamaskinen"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB-feilsøking er ikke tillatt"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Brukeren som for øyeblikket er logget på denne enheten, kan ikke slå på USB-feilsøking. For å bruke denne funksjonen, bytt til en administratorbruker."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Brukeren som for øyeblikket er logget på denne enheten, kan ikke slå på USB-feilsøking. For å bruke denne funksjonen, bytt til hovedbrukeren."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom for å fylle skjermen"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Strekk for å fylle skjerm"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Lagrer skjermdumpen …"</string>
@@ -240,7 +240,7 @@
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Lader"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G- og 3G-data er satt på pause"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-data er satt på pause"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobildata er satt på pause"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobildatabruk er satt på pause"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data er satt på pause"</string>
     <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Datagrensen du har angitt, er nådd. Du bruker ikke lenger mobildata.\n\nHvis du fortsetter, kan avgifter for databruk påløpe."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Gjenoppta"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Søk"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Dra opp for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Dra til venstre for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Du blir ikke forstyrret av lyder og vibrasjoner, med unntak av alarmer, påminnelser, aktiviteter og oppringere du angir. Du kan fremdeles høre alt du velger å spille av, for eksempel musikk, videoer og spill."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Du blir ikke forstyrret av lyder og vibrasjoner, med unntak av alarmer. Du kan fremdeles høre alt du velger å spille av, for eksempel musikk, videoer og spill."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Du blir ikke forstyrret av lyder og vibrasjoner, med unntak av alarmer, påminnelser, aktiviteter og oppringere du angir. Du kan fremdeles høre alt du velger å spille av, for eksempel musikk, videoer og spill."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Du blir ikke forstyrret av lyder og vibrasjoner, med unntak av alarmer. Du kan fremdeles høre alt du velger å spille av, for eksempel musikk, videoer og spill."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Tilpass"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Dette blokkerer ALLE lyder og vibrasjoner, inkludert fra alarmer, musikk, videoer og spill. Du kan fremdeles ringe."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Dette blokkerer ALLE lyder og vibrasjoner, inkludert fra alarmer, musikk, videoer og spill. Du kan fremdeles ringe."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Dette blokkerer ALLE lyder og vibrasjoner, inkludert fra alarmer, musikk, videoer og spill."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Mindre presserende varsler nedenfor"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Finn ut mer"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Enheten er koblet til <xliff:g id="VPN_APP">%1$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Åpne VPN-innstillingene"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Åpne VPN-innstillingene"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Åpne pålitelig legitimasjon"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Administratoren din har slått på loggføring av nettverk, som overvåker trafikken på enheten din.\n\nKontakt administratoren for mer informasjon."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Denne appen har ikke varselkategorier"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Varsler fra denne appen kan ikke slås av"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 av <xliff:g id="NUMBER_1">%d</xliff:g> varselkategorier fra denne appen</item>
-      <item quantity="one">1 av <xliff:g id="NUMBER_0">%d</xliff:g> varselkategori fra denne appen</item>
+      <item quantity="other">1 av <xliff:g id="NUMBER_1">%s</xliff:g> varselkategorier fra denne appen</item>
+      <item quantity="one">1 av <xliff:g id="NUMBER_0">%s</xliff:g> varselkategori fra denne appen</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d minutt</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Batteribruk"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Batterisparing er ikke tilgjengelig under lading"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Batterisparing"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Batterisparing er ikke tilgjengelig under lading"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Batterisparing"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduserer ytelsen og begrenser bakgrunnsdataene"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g>-knappen"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Startskjerm"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimer"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Lukk"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Dra ned for å avvise"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Bilde-i-bilde-meny"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Meny"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> er i bilde-i-bilde"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Hvis du ikke vil at <xliff:g id="NAME">%s</xliff:g> skal bruke denne funksjonen, kan du trykke for å åpne innstillingene og slå den av."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Hvis du ikke vil at <xliff:g id="NAME">%s</xliff:g> skal bruke denne funksjonen, kan du trykke for å åpne innstillingene og slå den av."</string>
     <string name="pip_play" msgid="1417176722760265888">"Spill av"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Sett på pause"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Hopp til neste"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Meny"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g>-appen"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Varsler"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Batteri"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Skjermdumper"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Generelle meldinger"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Lagring"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Apper kjører i bakgrunnen"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Trykk for detaljer om batteri- og databruk"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vil du slå av mobildata?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Fordi en app skjuler tillatelsesforespørselen, kan ikke Innstillinger bekrefte svaret ditt."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index e37cde6..b62c48f 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -64,12 +64,12 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"कम्प्युटरको RSA कुञ्जी औंलाछाप:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"यो कम्प्युटरबाट सधैँ अनुमति दिनुहोस्"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB डिबग गर्न अनुमति छैन"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"हालैमा यस यन्त्रमा साइन इन भएको प्रयोगकर्ताले USB डिबगिङ सक्रिय गर्न सक्दैन। यो सुविधा प्रयोग गर्न, कृपया अर्को प्रबन्ध प्रयोगकर्तामा स्विच गर्नुहोस्।"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"हाल यस यन्त्रमा साइन इन हुनुभएको प्रयोगकर्ताले USB डिबग सक्रिय गर्न सक्नुहुन्न। यो सुविधाको प्रयोग गर्न प्राथमिक प्रयोगकर्तामा बदल्नुहोस्‌।"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"स्क्रिन भर्न जुम गर्नुहोस्"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"स्क्रिन भर्न तन्काउनुहोस्"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"स्क्रिनसट बचत गर्दै…"</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"स्क्रिनसट बचत गर्दै…"</string>
-    <string name="screenshot_saving_text" msgid="2419718443411738818">"स्क्रिनसट बचत हुँदै छ।"</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"स्क्रिनसट बचत हुँदैछ।"</string>
     <string name="screenshot_saved_title" msgid="6461865960961414961">"स्क्रिनसट क्याप्चर गरियो।"</string>
     <string name="screenshot_saved_text" msgid="2685605830386712477">"आफ्नो स्क्रिनसट हेर्न ट्याप गर्नुहोस्।"</string>
     <string name="screenshot_failed_title" msgid="705781116746922771">"स्क्रिनसट क्याप्चर गर्न सकिएन।"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"खोज्नुहोस्"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि माथि धिसार्नुहोस्"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"स्लाइड <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि बायाँ।"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"तपाईंलाई अलार्म, रिमाइन्डर, कार्यक्रम र तपाईंले निर्दिष्ट गर्नुभएका कलरहरू बाहेकका ध्वनि र कम्पनहरूले बाधा पुऱ्याउने छैनन्। तपाईंले अझै संगीत, भिडियो र खेलहरू लगायत आफूले प्ले गर्न छनौट गरेका जुनसुकै कुरा सुन्न सक्नुहुन्छ।"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"तपाईंलाई अलार्म बाहेकका ध्वनि र कम्पनहरूले बाधा पुऱ्याउने छैनन्। तपाईंले अझै संगीत, भिडियो र खेलहरू लगायत आफूले प्ले गर्न छनौट गरेका जुनसुकै कुरा पनि सुन्न सक्नुहुन्छ।"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"तपाईंलाई अलार्म, रिमाइन्डर, कार्यक्रम र तपाईंले निर्दिष्ट गर्नुभएका कलरहरू बाहेकका ध्वनि र कम्पनहरूले बाधा पुऱ्याउने छैनन्। तपाईंले अझै संगीत, भिडियो र खेलहरू लगायत आफूले प्ले गर्न छनौट गरेका जुनसुकै कुरा सुन्न सक्नुहुनेछ।"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"तपाईंलाई अलार्महरू बाहेकका ध्वनि र कम्पनहरूले बाधा पुऱ्याउने छैनन्। तपाईंले अझै संगीत, भिडियो र खेलहरू लगायत आफूले प्ले गर्न छनौट गरेका जुनसुकै कुरा सुन्न सक्नुहुनेछ।"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"आफू अनुकूल बनाउनुहोस्"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"यसले अलार्म, संगीत, भिडियो, र खेलहरू लगायतका सबै ध्वनि र कम्पन रोक्छ। तपाईं अझै पनि फोन कल गर्न सक्षम हुनुहुन्छ।"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"यसले अलार्म, संगीत, भिडियो, र खेलहरू लगायत सबैका ध्वनि र कम्पनहरूमाथि रोक लगाउँछ। तपाईं अझै पनि फोन कलहरू गर्न सक्नुहुनेछ।"</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"यसले अलार्म, संगीत, भिडियोहरू र खेलहरूसहित सबै ध्वनिहरू र कम्पनहरूलाई रोक्छ।"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"तल कम जरुरी सूचनाहरू"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"थप जान्नुहोस्"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"तपाईं <xliff:g id="VPN_APP">%1$s</xliff:g> मा जोडिनुभएको छ जसले इमेल, अनुप्रयोग र वेबसाइटहरू लगायत तपाईंको नेटवर्क सम्बन्धी गतिविधिको अनुगमन गर्न सक्छ।"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN सम्बन्धी सेटिङहरू खोल्नुहोस्"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN सम्बन्धी सेटिङहरू खोल्नुहोस्"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"खुला विश्वसनीय प्रमाणहरू"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"तपाईँको प्रशासकले तपाईँको यन्त्रमा ट्राफिकको अनुगमन गर्ने नेटवर्कको लगिङलाई सक्रिय पार्नुभएको छ।\n\nथप जानकारीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।"</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"यस अनुप्रयोगमा सूचना सम्बन्धी कोटीहरू छैनन्"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"यस अनुप्रयोगका सूचनाहरूलाई निष्क्रिय पार्न सकिँदैन"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">यस अनुप्रयोगका <xliff:g id="NUMBER_1">%d</xliff:g> सूचना कोटिहरू मध्ये १</item>
-      <item quantity="one"> यस अनुप्रयोगको <xliff:g id="NUMBER_0">%d</xliff:g> सूचना कोटी मध्ये १</item>
+      <item quantity="other">यस अनुप्रयोगका <xliff:g id="NUMBER_1">%s</xliff:g> सूचना कोटिहरू मध्ये १</item>
+      <item quantity="one"> यस अनुप्रयोगको <xliff:g id="NUMBER_0">%s</xliff:g> सूचना कोटी मध्ये १</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d मिनेट</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"ब्याट्री उपयोग"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"चार्ज गर्ने समयमा ब्याट्री सेभर उपलब्ध छैन"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"ब्याट्री सेभर"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"चार्ज गर्ने समयमा ब्याट्री सेवर उपलब्ध छैन"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"ब्याट्री सेवर"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"कार्यसम्पादन र पृष्ठभूमि डेटा घटाउँछ"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> बटन"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"सानो बनाउनुहोस्"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"बन्द गर्नुहोस्"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"खारेज गर्न तल तान्नुहोस्"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"तस्बिर मेनुमा तस्बिर"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"मेनु"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> Picture-in-picture मा छ"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"तपाईं <xliff:g id="NAME">%s</xliff:g> ले यो सुविधा प्रयोग नगरोस् भन्ने चाहनुहुन्छ भने ट्याप गरेर सेटिङहरू खोल्नुहोस् र यसलाई निष्क्रिय पार्नुहोस्।"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"तपाईं <xliff:g id="NAME">%s</xliff:g> ले सुविधा प्रयोग नगरोस् भन्ने चाहनुहुन्छ भने ट्याप गरेर सेटिङहरू खोल्नुहोस् र यसलाई निष्क्रिय पार्नुहोस्।"</string>
     <string name="pip_play" msgid="1417176722760265888">"प्ले गर्नुहोस्"</string>
     <string name="pip_pause" msgid="8881063404466476571">"पज गर्नुहोस्"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"अर्कोमा जानुहोस्"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"मेनु"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> अनुप्रयोग"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"अलर्टहरू"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"ब्याट्री"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"स्क्रिनशटहरू"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"सामान्य सन्देशहरू"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"भण्डारण"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"पृष्ठभूमिमा चल्ने अनुप्रयोगहरू"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"ब्याट्री र डेटाका प्रयोग सम्बन्धी विवरणहरूका लागि ट्याप गर्नुहोस्"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"मोबाइल डेटा निष्क्रिय पार्ने हो?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"कुनै अनुप्रयोगको कारणले अनुमतिसम्बन्धी अनुरोध बुझ्न गाह्रो भइरहेकोले सेटिङहरूले तपाईंको प्रतिक्रिया प्रमाणित गर्न सक्दैनन्।"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ne/strings_car.xml b/packages/SystemUI/res/values-ne/strings_car.xml
index d81a488..d4d7d0b 100644
--- a/packages/SystemUI/res/values-ne/strings_car.xml
+++ b/packages/SystemUI/res/values-ne/strings_car.xml
@@ -20,5 +20,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="unknown_user_label" msgid="4323896111737677955">"अज्ञात"</string>
-    <string name="start_driving" msgid="864023351402918991">"ड्राइभिङ सुरू गर्नुहोस्"</string>
+    <string name="start_driving" msgid="864023351402918991">"ड्राइभिङ सुरु गर्नुहोस्"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 84c534e..ed343d9 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"De vingerafdruk voor de RSA-sleutel van de computer is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Altijd toestaan vanaf deze computer"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB-foutopsporing niet toegestaan"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"De gebruiker die momenteel is ingelogd op dit apparaat, kan USB-foutopsporing niet inschakelen. Als u deze functie wilt gebruiken, schakelt u naar een beheerdersgebruiker."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"De gebruiker die momenteel is ingelogd op dit apparaat, kan USB-foutopsporing niet inschakelen. Als je deze functie wilt gebruiken, schakel je naar de primaire gebruiker."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom om scherm te vullen"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Rek uit v. schermvulling"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Screenshot opslaan..."</string>
@@ -200,7 +200,7 @@
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Vliegtuigmodus ingeschakeld."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Niet storen aan, alleen prioriteit."</string>
     <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Niet storen aan, totale stilte."</string>
-    <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Niet storen aan, alleen alarmen."</string>
+    <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Niet storen aan, alleen wekkers."</string>
     <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Niet storen."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Niet storen uit."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Niet storen uitgeschakeld."</string>
@@ -216,7 +216,7 @@
     <string name="accessibility_quick_settings_location_on" msgid="5809937096590102036">"Locatiemelding aan."</string>
     <string name="accessibility_quick_settings_location_changed_off" msgid="8526845571503387376">"Locatiemelding uitgeschakeld."</string>
     <string name="accessibility_quick_settings_location_changed_on" msgid="339403053079338468">"Locatiemelding ingeschakeld."</string>
-    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm is ingesteld op <xliff:g id="TIME">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Wekker is ingesteld op <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_close" msgid="3115847794692516306">"Paneel sluiten."</string>
     <string name="accessibility_quick_settings_more_time" msgid="3659274935356197708">"Meer tijd."</string>
     <string name="accessibility_quick_settings_less_time" msgid="2404728746293515623">"Minder tijd."</string>
@@ -268,7 +268,7 @@
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Niet storen"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Alleen prioriteit"</string>
-    <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alleen alarmen"</string>
+    <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Alleen wekkers"</string>
     <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Totale stilte"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> apparaten)"</string>
@@ -353,11 +353,11 @@
     <string name="description_target_search" msgid="3091587249776033139">"Zoeken"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Veeg omhoog voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Veeg naar links voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Je wordt niet gestoord door geluiden en trillingen, behalve bij alarmen, herinneringen, afspraken en specifieke bellers die je selecteert. Je kunt nog steeds alles horen wat je wilt afspelen, waaronder muziek, video\'s en games."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Je wordt niet gestoord door geluiden en trillingen, behalve bij alarmen. Je kunt nog steeds alles horen wat je wilt afspelen, waaronder muziek, video\'s en games."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Je wordt niet gestoord door geluiden en trillingen, behalve bij wekkers, herinneringen, afspraken en specifieke bellers die je selecteert. Je kunt nog steeds alles horen wat je wilt afspelen, waaronder muziek, video\'s en games."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Je wordt niet gestoord door geluiden en trillingen, behalve bij wekkers. Je kunt nog steeds alles horen wat je wilt afspelen, waaronder muziek, video\'s en games."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Aanpassen"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Hiermee worden ALLE geluiden en trillingen geblokkeerd, waaronder die voor alarmen, muziek, video\'s en games. U kunt wel nog steeds bellen."</string>
-    <string name="zen_silence_introduction" msgid="3137882381093271568">"Hiermee worden ALLE geluiden en trillingen geblokkeerd, waaronder die voor alarmen, muziek, video\'s en games."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Hiermee worden ALLE geluiden en trillingen geblokkeerd, waaronder die voor wekkers, muziek, video\'s en games. Je kunt wel nog steeds bellen."</string>
+    <string name="zen_silence_introduction" msgid="3137882381093271568">"Hiermee worden ALLE geluiden en trillingen geblokkeerd, waaronder die voor wekkers, muziek, video\'s en games."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Minder urgente meldingen onderaan"</string>
     <string name="notification_tap_again" msgid="7590196980943943842">"Tik nog eens om te openen"</string>
@@ -370,7 +370,7 @@
     <string name="interruption_level_none_with_warning" msgid="5114872171614161084">"Totale stilte. Hiermee worden schermlezers ook op stil gezet."</string>
     <string name="interruption_level_none" msgid="6000083681244492992">"Totale stilte"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"Alleen prioriteit"</string>
-    <string name="interruption_level_alarms" msgid="5226306993448328896">"Alleen alarmen"</string>
+    <string name="interruption_level_alarms" msgid="5226306993448328896">"Alleen wekkers"</string>
     <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Totale\nstilte"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Alleen\nprioriteit"</string>
     <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alleen\nalarmen"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Meer informatie"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Je bent verbonden met <xliff:g id="VPN_APP">%1$s</xliff:g>, waarmee je netwerkactiviteit (waaronder e-mails, apps en websites) kan worden gecontroleerd."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN-instellingen openen"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN-instellingen openen"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Vertrouwde gegevens openen"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Je beheerder heeft netwerkregistratie ingeschakeld, waarmee verkeer op je apparaat wordt bijgehouden.\n\nNeem contact op met je beheerder voor meer informatie."</string>
@@ -492,7 +492,7 @@
     <string name="stream_system" msgid="7493299064422163147">"Systeem"</string>
     <string name="stream_ring" msgid="8213049469184048338">"Bellen"</string>
     <string name="stream_music" msgid="9086982948697544342">"Media"</string>
-    <string name="stream_alarm" msgid="5209444229227197703">"Alarm"</string>
+    <string name="stream_alarm" msgid="5209444229227197703">"Wekker"</string>
     <string name="stream_notification" msgid="2563720670905665031">"Melding"</string>
     <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
     <string name="stream_dtmf" msgid="2447177903892477915">"Frequentie voor tweevoudige multitoon"</string>
@@ -514,13 +514,13 @@
     <string name="enable_demo_mode" msgid="4844205668718636518">"Demomodus inschakelen"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"Demomodus weergeven"</string>
     <string name="status_bar_ethernet" msgid="5044290963549500128">"Ethernet"</string>
-    <string name="status_bar_alarm" msgid="8536256753575881818">"Alarm"</string>
+    <string name="status_bar_alarm" msgid="8536256753575881818">"Wekker"</string>
     <string name="status_bar_work" msgid="6022553324802866373">"Werkprofiel"</string>
     <string name="status_bar_airplane" msgid="7057575501472249002">"Vliegtuigmodus"</string>
     <string name="add_tile" msgid="2995389510240786221">"Tegel toevoegen"</string>
     <string name="broadcast_tile" msgid="3894036511763289383">"Tegel \'Uitzenden\'"</string>
-    <string name="zen_alarm_warning_indef" msgid="3482966345578319605">"U hoort je volgende alarm niet <xliff:g id="WHEN">%1$s</xliff:g> tenzij u dit voor die tijd uitschakelt"</string>
-    <string name="zen_alarm_warning" msgid="444533119582244293">"U hoort je volgende alarm niet <xliff:g id="WHEN">%1$s</xliff:g>"</string>
+    <string name="zen_alarm_warning_indef" msgid="3482966345578319605">"Je hoort je volgende wekker niet <xliff:g id="WHEN">%1$s</xliff:g> tenzij je dit voor die tijd uitschakelt"</string>
+    <string name="zen_alarm_warning" msgid="444533119582244293">"Je hoort je volgende wekker niet <xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="alarm_template" msgid="3980063409350522735">"om <xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="alarm_template_far" msgid="4242179982586714810">"op <xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_detail" msgid="2579369091672902101">"Snelle instellingen, <xliff:g id="TITLE">%s</xliff:g>."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Deze app heeft geen meldingscategorieën"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Meldingen van deze app kunnen niet worden uitgeschakeld"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 van <xliff:g id="NUMBER_1">%d</xliff:g> meldingscategorieën van deze app</item>
-      <item quantity="one">1 van <xliff:g id="NUMBER_0">%d</xliff:g> meldingscategorie van deze app</item>
+      <item quantity="other">1 van <xliff:g id="NUMBER_1">%s</xliff:g> meldingscategorieën van deze app</item>
+      <item quantity="one">1 van <xliff:g id="NUMBER_0">%s</xliff:g> meldingscategorie van deze app</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d minuut</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Accugebruik"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Batterijbesparing niet beschikbaar tijdens opladen"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Batterijbesparing"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Batterijbesparing niet beschikbaar tijdens opladen"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Batterijbesparing"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Vermindert de prestaties en achtergrondgegevens"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Knop <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -714,7 +714,7 @@
     <string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"Instellingen openen."</string>
     <string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"Snelle instellingen openen."</string>
     <string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"Snelle instellingen sluiten."</string>
-    <string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Alarm is ingesteld."</string>
+    <string name="accessibility_quick_settings_alarm_set" msgid="1863000242431528676">"Wekker is ingesteld."</string>
     <string name="accessibility_quick_settings_user" msgid="1567445362870421770">"Ingelogd als <xliff:g id="ID_1">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_no_internet" msgid="31890692343084075">"Geen internet."</string>
     <string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"Details openen."</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimaliseren"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Sluiten"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Sleep omlaag om te sluiten"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Scherm-in-scherm-menu"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> is in scherm-in-scherm"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Als je niet wilt dat <xliff:g id="NAME">%s</xliff:g> deze functie gebruikt, tik je om de instellingen te openen en schakel je de functie uit."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Als je niet wilt dat <xliff:g id="NAME">%s</xliff:g> deze functie gebruikt, tik je om de instellingen te openen en schakel je de functie uit."</string>
     <string name="pip_play" msgid="1417176722760265888">"Afspelen"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Onderbreken"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Doorgaan naar volgende"</string>
@@ -752,8 +752,9 @@
     <string name="tuner_left" msgid="8404287986475034806">"Links"</string>
     <string name="tuner_right" msgid="6222734772467850156">"Rechts"</string>
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
-    <string name="tuner_app" msgid="3507057938640108777">"Apps <xliff:g id="APP">%1$s</xliff:g>"</string>
+    <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g>-app"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Meldingen"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Batterij"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Screenshots"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Algemene berichten"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Opslag"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Apps uitgevoerd op achtergrond"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tik voor batterij- en datagebruik"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobiele data uitschakelen?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Aangezien een app een toestemmingsverzoek afdekt, kan Instellingen je reactie niet verifiëren."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pa-land/strings.xml b/packages/SystemUI/res/values-pa-land/strings.xml
index fef122a..dfe2a5d 100644
--- a/packages/SystemUI/res/values-pa-land/strings.xml
+++ b/packages/SystemUI/res/values-pa-land/strings.xml
@@ -19,5 +19,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="toast_rotation_locked" msgid="7609673011431556092">"ਸਕ੍ਰੀਨ ਹੁਣ ਲੈਂਡਸਕੇਪ ਅਨੁਕੂਲਨ ਵਿੱਚ ਲੌਕ ਕੀਤੀ ਗਈ ਹੈ।"</string>
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"ਸਕ੍ਰੀਨ ਹੁਣ ਲੈਂਡਸਕੇਪ ਅਨੁਕੂਲਨ ਵਿੱਚ  ਲਾਕ  ਕੀਤੀ ਗਈ ਹੈ।"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index a5bfcba..d38d1ee 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -24,7 +24,7 @@
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ਸੂਚੀ ਵਿੱਚੋਂ ਹਟਾਓ"</string>
     <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ਐਪ ਜਾਣਕਾਰੀ"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"ਤੁਹਾਡੀਆਂ ਹਾਲੀਆ ਸਕ੍ਰੀਨਾਂ ਇੱਥੇ ਪ੍ਰਗਟ ਹੋਣਗੀਆਂ"</string>
-    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ਹਾਲੀਆ ਐਪਸ ਰੱਦ ਕਰੋ"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ਹਾਲੀਆ ਐਪਾਂ ਨੂੰ ਖਾਰਜ ਕਰੋ"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
       <item quantity="one">ਰੂਪ-ਰੇਖਾ ਵਿੱਚ %d ਸਕ੍ਰੀਨਾਂ</item>
       <item quantity="other">ਰੂਪ-ਰੇਖਾ ਵਿੱਚ %d ਸਕ੍ਰੀਨਾਂ</item>
@@ -43,7 +43,7 @@
     <string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"ਚਾਲੂ ਕਰੋ"</string>
     <string name="battery_saver_start_action" msgid="5576697451677486320">"ਬੈਟਰੀ ਸੇਵਰ ਚਾਲੂ ਕਰੋ"</string>
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"ਸੈਟਿੰਗਾਂ"</string>
-    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"ਵਾਈ-ਫਾਈ"</string>
     <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"ਸਕ੍ਰੀਨ ਆਪਣੇ-ਆਪ ਘੁੰਮਾਓ"</string>
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"ਮਿਊਟ ਕਰੋ"</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"ਆਟੋ"</string>
@@ -52,34 +52,34 @@
     <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ਇਨਪੁਟ ਵਿਧੀਆਂ ਸੈਟ ਅਪ ਕਰੋ"</string>
     <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"ਫਿਜੀਕਲ ਕੀ-ਬੋਰਡ"</string>
     <string name="usb_device_permission_prompt" msgid="834698001271562057">"ਕੀ ਐਪ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨੂੰ USB ਡੀਵਾਈਸ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
-    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"ਕੀ ਐਪ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨੂੰ USB ਐਕਸੈਸਰੀ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"ਕੀ ਐਪ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨੂੰ USB ਐਕਸੈੱਸਰੀ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
     <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"ਕੀ ਜਦੋਂ ਇਹ USB ਡੀਵਾਈਸ ਕਨੈਕਟ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਤਾਂ <xliff:g id="ACTIVITY">%1$s</xliff:g> ਨੂੰ ਖੋਲ੍ਹਣਾ ਹੈ?"</string>
     <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"ਕੀ ਜਦੋਂ ਇਹ USB ਐਕਸੈਸਰੀ ਕਨੈਕਟ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਤਾਂ <xliff:g id="ACTIVITY">%1$s</xliff:g> ਨੂੰ ਖੋਲ੍ਹਣਾ ਹੈ?"</string>
     <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ਕੋਈ ਇੰਸਟੌਲ ਕੀਤੇ ਐਪਸ ਇਸ USB ਐਕਸੈਸਰੀ ਨਾਲ ਕੰਮ ਨਹੀਂ ਕਰਦੇ। <xliff:g id="URL">%1$s</xliff:g> ਤੇ ਇਸ ਐਕਸੈਸਰੀ ਬਾਰੇ ਹੋਰ ਜਾਣੋ"</string>
     <string name="title_usb_accessory" msgid="4966265263465181372">"USB ਐਕਸੈਸਰੀ"</string>
     <string name="label_view" msgid="6304565553218192990">"ਦੇਖੋ"</string>
     <string name="always_use_device" msgid="1450287437017315906">"ਇਸ USB ਡੀਵਾਈਸ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਤੌਰ \'ਤੇ ਵਰਤੋ"</string>
-    <string name="always_use_accessory" msgid="1210954576979621596">"ਇਸ USB ਐਕਸਸੈਰੀ ਲਈ ਬਾਇ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਵਰਤੋ"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"ਇਸ USB ਐਕਸਸੈਰੀ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਤੌਰ \'ਤੇ ਵਰਤੋ"</string>
     <string name="usb_debugging_title" msgid="4513918393387141949">"ਕੀ USB ਡੀਬਗਿੰਗ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
-    <string name="usb_debugging_message" msgid="2220143855912376496">"ਕੰਪਿਊਟਰ ਦਾ RSA ਕੁੰਜੀ ਫਿੰਗਰਪ੍ਰਿੰਟ ਹੈ:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"ਕੰਪਿਊਟਰ ਦਾ RSA ਕੁੰਜੀ ਫਿੰਗਰਪ੍ਰਿੰਟ \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"ਹਮੇਸ਼ਾਂ ਇਸ ਕੰਪਿਊਟਰ ਤੋਂ ਆਗਿਆ ਦਿਓ"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB ਡਿਬੱਗਿੰਗ ਦੀ ਆਗਿਆ ਨਹੀਂ"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"ਇਸ ਡੀਵਾਈਸ ਵਿੱਚ ਵਰਤਮਾਨ ਵਿੱਚ ਸਾਈਨ ਇਨ ਕੀਤਾ ਵਰਤੋਂਕਾਰ USB ਡਿਬੱਗਿੰਗ ਨੂੰ ਚਾਲੂ ਨਹੀਂ ਕਰ ਸਕਦਾ ਹੈ। ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ, ਕਿਰਪਾ ਕਰਕੇ ਕਿਸੇ ਪ੍ਰਸ਼ਾਸਕ ਵਰਤੋਂਕਾਰ ਵਿੱਚ ਸਵਿੱਚ ਕਰੋ।"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"The user currently signed in to this device can\'t turn on USB debugging. To use this feature, switch to the primary user."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"ਸਕ੍ਰੀਨ ਭਰਨ ਲਈ ਜ਼ੂਮ ਕਰੋ"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"ਸਕ੍ਰੀਨ ਭਰਨ ਲਈ ਸਟ੍ਰੈਚ ਕਰੋ"</string>
-    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"ਸਕ੍ਰੀਨਸ਼ੌਟ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…"</string>
-    <string name="screenshot_saving_title" msgid="8242282144535555697">"ਸਕ੍ਰੀਨਸ਼ੌਟ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…"</string>
-    <string name="screenshot_saving_text" msgid="2419718443411738818">"ਸਕ੍ਰੀਨਸ਼ੌਟ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…"</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।"</string>
     <string name="screenshot_saved_title" msgid="6461865960961414961">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਕੈਪਚਰ ਕੀਤਾ।"</string>
-    <string name="screenshot_saved_text" msgid="2685605830386712477">"ਆਪਣਾ ਸਕ੍ਰੀਨਸ਼ਾਟ ਵੇਖਣ ਲਈ ਟੈਪ ਕਰੋ।"</string>
-    <string name="screenshot_failed_title" msgid="705781116746922771">"ਸਕ੍ਰੀਨਸ਼ੌਟ ਕੈਪਚਰ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
+    <string name="screenshot_saved_text" msgid="2685605830386712477">"ਆਪਣਾ ਸਕ੍ਰੀਨਸ਼ਾਟ ਦੇਖਣ ਲਈ ਟੈਪ ਕਰੋ।"</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਕੈਪਚਰ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
     <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਰੱਖਿਅਤ ਕਰਨ ਦੌਰਾਨ ਸਮੱਸਿਆ ਆਈ।"</string>
-    <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"ਸੀਮਿਤ ਸਟੋਰੇਜ ਥਾਂ ਦੇ ਕਾਰਨ ਸਕ੍ਰੀਨਸ਼ਾਟ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਸਕਦਾ।"</string>
+    <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"ਸੀਮਿਤ ਸਟੋਰੇਜ ਹੋਣ ਕਾਰਨ ਸਕ੍ਰੀਨਸ਼ਾਟ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।"</string>
     <string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"ਐਪ ਜਾਂ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਸਕ੍ਰੀਨਸ਼ਾਟ ਲੈਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੱਤੀ ਗਈ ਹੈ"</string>
     <string name="usb_preference_title" msgid="6551050377388882787">"USB ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ ਚੋਣਾਂ"</string>
     <string name="use_mtp_button_title" msgid="4333504413563023626">"ਇੱਕ ਮੀਡੀਆ ਪਲੇਅਰ (MTP) ਦੇ ਤੌਰ ਤੇ ਮਾਊਂਟ ਕਰੋ"</string>
     <string name="use_ptp_button_title" msgid="7517127540301625751">"ਇੱਕ ਕੈਮਰੇ (PTP) ਦੇ ਤੌਰ ਤੇ ਮਾਊਂਟ ਕਰੋ"</string>
-    <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac ਲਈ Android ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ ਐਪ ਇੰਸਟੌਲ ਕਰੋ"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac ਲਈ Android ਫ਼ਾਈਲ ਟ੍ਰਾਂਸਫਰ ਐਪ ਸਥਾਪਤ ਕਰੋ"</string>
     <string name="accessibility_back" msgid="567011538994429120">"ਪਿੱਛੇ"</string>
     <string name="accessibility_home" msgid="8217216074895377641">"ਘਰ"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"ਮੀਨੂ"</string>
@@ -87,18 +87,18 @@
     <string name="accessibility_recent" msgid="5208608566793607626">"ਰੂਪ-ਰੇਖਾ"</string>
     <string name="accessibility_search_light" msgid="1103867596330271848">"ਖੋਜੋ"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"ਕੈਮਰਾ"</string>
-    <string name="accessibility_phone_button" msgid="6738112589538563574">"ਫੋਨ"</string>
+    <string name="accessibility_phone_button" msgid="6738112589538563574">"ਫ਼ੋਨ ਕਰੋ"</string>
     <string name="accessibility_voice_assist_button" msgid="487611083884852965">"ਅਵਾਜ਼ੀ ਸਹਾਇਕ"</string>
-    <string name="accessibility_unlock_button" msgid="128158454631118828">"ਅਨਲੌਕ ਕਰੋ"</string>
+    <string name="accessibility_unlock_button" msgid="128158454631118828">"ਅਣਲਾਕ ਕਰੋ"</string>
     <string name="accessibility_waiting_for_fingerprint" msgid="4808860050517462885">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਉਡੀਕ ਹੋ ਰਹੀ ਹੈ"</string>
-    <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"ਆਪਣਾ ਫਿੰਗਰਪ੍ਰਿੰਟ ਵਰਤੇ ਬਿਨਾਂ ਅਨਲੌਕ ਕਰੋ"</string>
-    <string name="unlock_label" msgid="8779712358041029439">"ਅਨਲੌਕ ਕਰੋ"</string>
-    <string name="phone_label" msgid="2320074140205331708">"ਫੋਨ ਖੋਲ੍ਹੋ"</string>
+    <string name="accessibility_unlock_without_fingerprint" msgid="7541705575183694446">"ਆਪਣਾ ਫਿੰਗਰਪ੍ਰਿੰਟ ਵਰਤੇ ਬਿਨਾਂ ਅਣਲਾਕ ਕਰੋ"</string>
+    <string name="unlock_label" msgid="8779712358041029439">"ਅਣਲਾਕ ਕਰੋ"</string>
+    <string name="phone_label" msgid="2320074140205331708">"ਫ਼ੋਨ ਖੋਲ੍ਹੋ"</string>
     <string name="voice_assist_label" msgid="3956854378310019854">"ਅਵਾਜ਼ੀ ਸਹਾਇਕ ਖੋਲ੍ਹੋ"</string>
     <string name="camera_label" msgid="7261107956054836961">"ਕੈਮਰਾ ਖੋਲ੍ਹੋ"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"ਨਵਾਂ ਕੰਮ ਲੇਆਉਟ ਚੁਣੋ"</string>
     <string name="cancel" msgid="6442560571259935130">"ਰੱਦ ਕਰੋ"</string>
-    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ਅਨੁਕੂਲਤਾ ਜ਼ੂਮ ਬਟਨ।"</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ਅਨੁਰੂਪਤਾ ਜ਼ੂਮ ਬਟਨ।"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ਵੱਡੀ ਸਕ੍ਰੀਨ ਤੇ ਛੋਟਾ ਜ਼ੂਮ ਕਰੋ।"</string>
     <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth ਕਨੈਕਟ ਕੀਤੀ।"</string>
     <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth ਡਿਸਕਨੈਕਟ ਕੀਤਾ।"</string>
@@ -107,16 +107,16 @@
     <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"ਬੈਟਰੀ ਦੋ ਬਾਰਸ।"</string>
     <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"ਬੈਟਰੀ ਤਿੰਨ ਬਾਰਸ।"</string>
     <string name="accessibility_battery_full" msgid="8909122401720158582">"ਬੈਟਰੀ ਪੂਰੀ।"</string>
-    <string name="accessibility_no_phone" msgid="4894708937052611281">"ਕੋਈ ਫੋਨ ਨਹੀਂ।"</string>
-    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"ਫੋਨ ਇੱਕ ਬਾਰ।"</string>
-    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"ਫੋਨ ਦੋ ਬਾਰਸ।"</string>
-    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"ਫੋਨ ਤਿੰਨ ਬਾਰਸ।"</string>
-    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"ਫੋਨ ਸਿਗਨਲ ਪੂਰਾ।"</string>
-    <string name="accessibility_no_data" msgid="4791966295096867555">"ਕੋਈ ਡੈਟਾ ਨਹੀਂ।"</string>
-    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"ਡੈਟਾ ਇੱਕ ਬਾਰ।"</string>
-    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"ਡੈਟਾ ਦੋ ਬਾਰਸ।"</string>
-    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"ਡੈਟਾ ਤਿੰਨ ਬਾਰ।"</string>
-    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"ਡੈਟਾ ਸਿਗਨਲ ਪੂਰਾ।"</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"ਕੋਈ ਫ਼ੋਨ ਨਹੀਂ।"</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"ਫ਼ੋਨ ਇੱਕ ਬਾਰ।"</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"ਫ਼ੋਨ ਦੋ ਬਾਰਸ।"</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"ਫ਼ੋਨ ਤਿੰਨ ਬਾਰਸ।"</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"ਫ਼ੋਨ ਸਿਗਨਲ ਪੂਰਾ।"</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"ਕੋਈ  ਡਾਟਾ  ਨਹੀਂ।"</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">" ਡਾਟਾ  ਇੱਕ ਬਾਰ।"</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">" ਡਾਟਾ  ਦੋ ਬਾਰਸ।"</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">" ਡਾਟਾ  ਤਿੰਨ ਬਾਰ।"</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">" ਡਾਟਾ  ਸਿਗਨਲ ਪੂਰਾ।"</string>
     <string name="accessibility_wifi_name" msgid="7202151365171148501">"<xliff:g id="WIFI">%s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ।"</string>
     <string name="accessibility_bluetooth_name" msgid="8441517146585531676">"<xliff:g id="BLUETOOTH">%s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ।"</string>
     <string name="accessibility_cast_name" msgid="4026393061247081201">"<xliff:g id="CAST">%s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ।"</string>
@@ -150,15 +150,15 @@
     <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
     <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"ਰੋਮਿੰਗ"</string>
     <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"ਕਿਨਾਰਾ"</string>
-    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"ਵਾਈ-ਫਾਈ"</string>
     <string name="accessibility_no_sim" msgid="8274017118472455155">"ਕੋਈ SIM ਨਹੀਂ।"</string>
-    <string name="accessibility_cell_data" msgid="5326139158682385073">"ਮੋਬਾਈਲ ਡੈਟਾ"</string>
-    <string name="accessibility_cell_data_on" msgid="5927098403452994422">"ਮੋਬਾਈਲ ਡੈਟਾ ਚਾਲੂ ਹੈ"</string>
-    <string name="accessibility_cell_data_off" msgid="443267573897409704">"ਮੋਬਾਈਲ ਡੈਟਾ ਬੰਦ ਹੈ"</string>
-    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth ਟੈਦਰਿੰਗ।"</string>
+    <string name="accessibility_cell_data" msgid="5326139158682385073">"ਮੋਬਾਈਲ ਡਾਟਾ"</string>
+    <string name="accessibility_cell_data_on" msgid="5927098403452994422">"ਮੋਬਾਈਲ ਡਾਟਾ ਚਾਲੂ"</string>
+    <string name="accessibility_cell_data_off" msgid="443267573897409704">"ਮੋਬਾਈਲ ਡਾਟਾ ਬੰਦ"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ਬਲੂਟੁੱਥ ਟੈਦਰਿੰਗ।"</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"ਏਅਰਪਲੇਨ ਮੋਡ।"</string>
     <string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN ਚਾਲੂ ਹੈ।"</string>
-    <string name="accessibility_no_sims" msgid="3957997018324995781">"ਕੋਈ SIM ਕਾਰਡ ਨਹੀਂ।"</string>
+    <string name="accessibility_no_sims" msgid="3957997018324995781">"ਕੋਈ ਸਿਮ ਕਾਰਡ ਨਹੀਂ।"</string>
     <string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"ਕੈਰੀਅਰ ਨੈੱਟਵਰਕ ਪਰਿਵਰਤਨ।"</string>
     <string name="accessibility_battery_details" msgid="7645516654955025422">"ਬੈਟਰੀ ਵੇਰਵੇ ਖੋਲ੍ਹੋ"</string>
     <string name="accessibility_battery_level" msgid="7451474187113371965">"ਬੈਟਰੀ <xliff:g id="NUMBER">%d</xliff:g> ਪ੍ਰਤੀਸ਼ਤ ਹੈ।"</string>
@@ -175,7 +175,7 @@
     <!-- no translation found for accessibility_casting (6887382141726543668) -->
     <skip />
     <string name="accessibility_work_mode" msgid="2478631941714607225">"ਕੰਮ ਮੋਡ"</string>
-    <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ਨੂੰ ਰੱਦ ਕਰੋ।"</string>
+    <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ਨੂੰ ਖਾਰਜ ਕਰੋ।"</string>
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ਰੱਦ ਕੀਤਾ।"</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ਸਾਰੀਆਂ ਹਾਲੀਆ ਐਪਲੀਕੇਸ਼ਨਾਂ ਰੱਦ ਕੀਤੀਆਂ।"</string>
     <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"<xliff:g id="APP">%s</xliff:g> ਐਪਲੀਕੇਸ਼ਨਾਂ ਜਾਣਕਾਰੀ ਖੋਲ੍ਹੋ।"</string>
@@ -184,10 +184,10 @@
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"ਸੂਚਨਾ ਰੱਦ ਕੀਤੀ।"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"ਸੂਚਨਾ ਸ਼ੇਡ।"</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ।"</string>
-    <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ਲੌਕ ਸਕ੍ਰੀਨ।"</string>
+    <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">" ਲਾਕ  ਸਕ੍ਰੀਨ।"</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"ਸੈਟਿੰਗਾਂ"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"ਰੂਪ-ਰੇਖਾ।"</string>
-    <string name="accessibility_desc_work_lock" msgid="4288774420752813383">"ਕਾਰਜ-ਸਥਾਨ ਲੌਕ ਸਕ੍ਰੀਨ"</string>
+    <string name="accessibility_desc_work_lock" msgid="4288774420752813383">"ਕਾਰਜ-ਸਥਾਨ  ਲਾਕ  ਸਕ੍ਰੀਨ"</string>
     <string name="accessibility_desc_close" msgid="7479755364962766729">"ਬੰਦ ਕਰੋ"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>।"</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi ਬੰਦ ਕੀਤਾ।"</string>
@@ -199,7 +199,7 @@
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ਏਅਰਪਲੇਨ ਮੋਡ ਬੰਦ ਹੈ।"</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ਏਅਰਪਲੇਨ ਮੋਡ ਚਾਲੂ ਹੋਇਆ"</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਚਾਲੂ, ਕੇਵਲ ਤਰਜੀਹੀ।"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਚਾਲੂ ਕਰੋ, ਕੁਲ ਚੁੱਪੀ।"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਚਾਲੂ ਕਰੋ, ਪੂਰਾ ਸ਼ਾਂਤ।"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਚਾਲੂ, ਕੇਵਲ ਅਲਾਰਮ।"</string>
     <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ।"</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਬੰਦ।"</string>
@@ -227,8 +227,8 @@
     <string name="accessibility_quick_settings_flashlight_changed_on" msgid="6531793301533894686">"ਫਲੈਸ਼ਲਾਈਟ ਚਾਲੂ ਕੀਤੀ।"</string>
     <string name="accessibility_quick_settings_color_inversion_changed_off" msgid="4406577213290173911">"ਰੰਗ ਦੀ ਉਲਟੀ ਤਰਤੀਬ ਬੰਦ ਕੀਤੀ।"</string>
     <string name="accessibility_quick_settings_color_inversion_changed_on" msgid="6897462320184911126">"ਰੰਗ ਦੀ ਉਲਟੀ ਤਰਤੀਬ ਚਾਲੂ ਕੀਤੀ।"</string>
-    <string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"ਮੋਬਾਈਲ ਹੌਟਸਪੌਟ ਬੰਦ ਕੀਤੀ।"</string>
-    <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"ਮੋਬਾਈਲ ਹੌਟਸਪੌਟ ਚਾਲੂ ਕੀਤੀ।"</string>
+    <string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"ਮੋਬਾਈਲ ਹੌਟਸਪੌਟ ਬੰਦ ਕੀਤਾ।"</string>
+    <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"ਮੋਬਾਈਲ ਹੌਟਸਪੌਟ ਚਾਲੂ ਕੀਤਾ।"</string>
     <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"ਸਕ੍ਰੀਨ ਜੋੜਨਾ ਬੰਦ ਹੋਇਆ।"</string>
     <string name="accessibility_quick_settings_work_mode_off" msgid="7045417396436552890">"ਕੰਮ ਮੋਡ ਬੰਦ ਹੈ।"</string>
     <string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"ਕੰਮ ਮੋਡ ਚਾਲੂ ਹੈ।"</string>
@@ -238,14 +238,14 @@
     <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"ਡਾਟਾ ਸੇਵਰ ਚਾਲੂ ਕੀਤਾ ਗਿਆ।"</string>
     <string name="accessibility_brightness" msgid="8003681285547803095">"ਡਿਸਪਲੇ ਚਮਕ"</string>
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
-    <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ਡੈਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
-    <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ਡੈਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"ਮੋਬਾਈਲ ਡੈਟਾ ਰੋਕ ਦਿੱਤਾ ਗਿਆ ਹੈ"</string>
-    <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ਡੈਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
-    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"ਤੁਸੀਂ ਤੁਹਾਡੇ ਵੱਲੋਂ ਸੈੱਟ ਕੀਤੀ ਗਈ ਡੈਟਾ ਸੀਮਾ \'ਤੇ ਪਹੁੰਚ ਚੁੱਕੇ ਹੋ। ਤੁਸੀਂ ਹੁਣ ਮੋਬਾਈਲ ਡੈਟੇ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਰਹੇ ਹੋ।\n\nਜੇਕਰ ਤੁਸੀਂ ਮੁੜ-ਸ਼ੁਰੂ ਕਰਦੇ ਹੋ, ਤਾਂ ਡੈਟਾ ਵਰਤੋਂ ਲਈ ਖਰਚੇ ਲਾਗੂ ਹੋ ਸਕਦੇ ਹਨ।"</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ਡਾਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G  ਡਾਟਾ  ਰੁਕ ਗਿਆ ਹੈ"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"ਮੋਬਾਈਲ ਡਾਟਾ ਰੋਕ ਦਿੱਤਾ ਗਿਆ ਹੈ"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">" ਡਾਟਾ  ਰੁਕ ਗਿਆ ਹੈ"</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"ਤੁਸੀਂ ਤੁਹਾਡੇ ਵੱਲੋਂ ਸੈੱਟ ਕੀਤੀ ਗਈ ਡਾਟਾ ਸੀਮਾ \'ਤੇ ਪਹੁੰਚ ਚੁੱਕੇ ਹੋ। ਤੁਸੀਂ ਹੁਣ ਮੋਬਾਈਲ ਡਾਟੇ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਰਹੇ ਹੋ।\n\nਜੇਕਰ ਤੁਸੀਂ ਮੁੜ-ਸ਼ੁਰੂ ਕਰਦੇ ਹੋ, ਤਾਂ ਡਾਟਾ ਵਰਤੋਂ ਲਈ ਖਰਚੇ ਲਾਗੂ ਹੋ ਸਕਦੇ ਹਨ।"</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰੋ"</string>
-    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ਕੋਈ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਨਹੀਂ"</string>
-    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi ਕਨੈਕਟ ਕੀਤਾ"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ਕੋਈ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਨਹੀਂ"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"ਵਾਈ-ਫਾਈ ਕਨੈਕਟ ਹੈ"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS ਦੀ ਖੋਜ ਕਰ ਰਿਹਾ ਹੈ"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS ਵੱਲੋਂ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਟਿਕਾਣਾ"</string>
     <string name="accessibility_location_active" msgid="2427290146138169014">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਸੇਵਾ ਬੇਨਤੀਆਂ ਸਕਿਰਿਆ"</string>
@@ -258,19 +258,19 @@
     <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"ਸੂਚਨਾ ਸੈਟਿੰਗਾਂ"</string>
     <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> ਸੈਟਿੰਗਾਂ"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"ਸਕ੍ਰੀਨ ਆਟੋਮੈਟਿਕਲੀ ਰੋਟੇਟ ਕਰੇਗੀ।"</string>
-    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"ਸਕ੍ਰੀਨ ਲੈਂਡਸਕੇਪ ਅਨੁਕੂਲਨ ਵਿੱਚ ਲੌਕ ਕੀਤੀ ਹੈ।"</string>
-    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"ਸਕ੍ਰੀਨ ਤਸਵੀਰ ਅਨੁਕੂਲਨ ਵਿੱਚ ਲੌਕ ਕੀਤੀ ਗਈ ਹੈ।"</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"ਸਕ੍ਰੀਨ ਲੈਂਡਸਕੇਪ ਅਨੁਕੂਲਨ ਵਿੱਚ  ਲਾਕ  ਕੀਤੀ ਹੈ।"</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"ਸਕ੍ਰੀਨ ਪੋਰਟਰੇਟ ਅਨੁਕੂਲਨ ਵਿੱਚ  ਲਾਕ  ਕੀਤੀ ਗਈ ਹੈ।"</string>
     <string name="accessibility_rotation_lock_off_changed" msgid="8134601071026305153">"ਸਕ੍ਰੀਨ ਹੁਣ ਆਟੋਮੈਟਿਕਲੀ ਰੋਟੇਟ ਕਰੇਗੀ।"</string>
-    <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"ਸਕ੍ਰੀਨ ਹੁਣ ਲੈਂਡਸਕੇਪ ਅਨੁਕੂਲਨ ਵਿੱਚ ਲੌਕ ਕੀਤੀ ਗਈ ਹੈ।"</string>
-    <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"ਸਕ੍ਰੀਨ ਹੁਣ ਤਸਵੀਰ ਅਨੁਕੂਲਨ ਵਿੱਚ ਲੌਕ ਕੀਤੀ ਗਈ ਹੈ।"</string>
+    <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"ਸਕ੍ਰੀਨ ਹੁਣ ਲੈਂਡਸਕੇਪ ਅਨੁਕੂਲਨ ਵਿੱਚ  ਲਾਕ  ਕੀਤੀ ਗਈ ਹੈ।"</string>
+    <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"ਸਕ੍ਰੀਨ ਹੁਣ ਪੋਰਟਰੇਟ ਅਨੁਕੂਲਨ ਵਿੱਚ  ਲਾਕ  ਕੀਤੀ ਗਈ ਹੈ।"</string>
     <string name="dessert_case" msgid="1295161776223959221">"ਡੈਜ਼ਰਟ ਕੇਸ"</string>
     <string name="start_dreams" msgid="5640361424498338327">"ਸਕ੍ਰੀਨ ਸੇਵਰ"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"ਈਥਰਨੈਟ"</string>
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ਕੇਵਲ ਤਰਜੀਹੀ"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"ਕੇਵਲ ਅਲਾਰਮ"</string>
-    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"ਸੰਪੂਰਨ ਖਾਮੋਸ਼ੀ"</string>
-    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"ਪੂਰਾ ਸ਼ਾਂਤ"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ਬਲੂਟੁੱਥ"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> ਡਿਵਾਈਸਾਂ)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth ਬੰਦ"</string>
     <string name="quick_settings_bluetooth_detail_empty_text" msgid="4910015762433302860">"ਕੋਈ ਜੋੜਾਬੱਧ ਕੀਤੀਆਂ ਡੀਵਾਈਸਾਂ ਉਪਲਬਧ ਨਹੀਂ"</string>
@@ -278,10 +278,10 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"ਆਟੋ-ਰੋਟੇਟ"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"ਸਕ੍ਰੀਨ ਨੂੰ ਆਪਣੇ ਆਪ ਘੁੰਮਾਓ"</string>
     <string name="accessibility_quick_settings_rotation_value" msgid="8187398200140760213">"<xliff:g id="ID_1">%s</xliff:g> ਮੋਡ"</string>
-    <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"ਰੋਟੇਸ਼ਨ ਲੌਕ ਕੀਤੀ"</string>
-    <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"ਤਸਵੀਰ"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"ਰੋਟੇਸ਼ਨ  ਲਾਕ  ਕੀਤੀ"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"ਪੋਰਟਰੇਟ"</string>
     <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"ਲੈਂਡਸਕੇਪ"</string>
-    <string name="quick_settings_ime_label" msgid="7073463064369468429">"ਇਨਪੁਟ ਵਿਧੀ"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"ਇਨਪੁੱਟ ਵਿਧੀ"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"ਟਿਕਾਣਾ"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਬੰਦ"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"ਮੀਡੀਆ ਡੀਵਾਈਸ"</string>
@@ -292,12 +292,12 @@
     <string name="quick_settings_user_label" msgid="5238995632130897840">"ਮੈਂ"</string>
     <string name="quick_settings_user_title" msgid="4467690427642392403">"ਵਰਤੋਂਕਾਰ"</string>
     <string name="quick_settings_user_new_user" msgid="9030521362023479778">"ਨਵਾਂ ਵਰਤੋਂਕਾਰ"</string>
-    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"ਵਾਈ-ਫਾਈ"</string>
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ਕੋਈ ਨੈੱਟਵਰਕ ਨਹੀਂ"</string>
-    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ਬੰਦ"</string>
-    <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi ਚਾਲੂ"</string>
-    <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"ਕੋਈ Wi-Fi ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"ਵਾਈ-ਫਾਈ ਬੰਦ"</string>
+    <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"ਵਾਈ-ਫਾਈ ਚਾਲੂ"</string>
+    <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"ਕੋਈ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ"</string>
     <string name="quick_settings_cast_title" msgid="7709016546426454729">"ਕਾਸਟ"</string>
     <string name="quick_settings_casting" msgid="6601710681033353316">"ਕਾਸਟਿੰਗ"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ਬਿਨਾਂ ਨਾਮ ਦਾ ਡੀਵਾਈਸ"</string>
@@ -312,13 +312,13 @@
     <string name="quick_settings_connected" msgid="1722253542984847487">"ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="quick_settings_connected_battery_level" msgid="4136051440381328892">"ਕਨੈਕਟ ਕੀਤੀ ਗਈ, ਬੈਟਰੀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="quick_settings_connecting" msgid="47623027419264404">"ਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ..."</string>
-    <string name="quick_settings_tethering_label" msgid="7153452060448575549">"ਟੀਥਰਿੰਗ"</string>
+    <string name="quick_settings_tethering_label" msgid="7153452060448575549">"ਟੈਦਰਿੰਗ"</string>
     <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ਹੌਟਸਪੌਟ"</string>
     <string name="quick_settings_notifications_label" msgid="4818156442169154523">"ਸੂਚਨਾਵਾਂ"</string>
     <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ਫਲੈਸ਼ਲਾਈਟ"</string>
-    <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"ਮੋਬਾਈਲ ਡੈਟਾ"</string>
+    <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"ਮੋਬਾਈਲ ਡਾਟਾ"</string>
     <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"ਡਾਟਾ ਵਰਤੋਂ"</string>
-    <string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"ਬਾਕੀ ਡੈਟਾ"</string>
+    <string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"ਬਾਕੀ  ਡਾਟਾ"</string>
     <string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"ਸੀਮਾ ਤੋਂ ਵੱਧ"</string>
     <string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> ਵਰਤਿਆ"</string>
     <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ਸੀਮਾ"</string>
@@ -339,7 +339,7 @@
     <string name="recents_drag_hint_message" msgid="2649739267073203985">"ਸਪਲਿਟ ਸਕ੍ਰੀਨ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਇੱਥੇ ਘਸੀਟੋ"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ਹੌਰੀਜ਼ੌਂਟਲ ਸਪਲਿਟ"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ਵਰਟੀਕਲ ਸਪਲਿਟ"</string>
-    <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ਕਸਟਮ ਸਪਲਿਟ"</string>
+    <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ਵਿਉਂਂਤੀ ਸਪਲਿਟ"</string>
     <string name="recents_accessibility_split_screen_top" msgid="9056056469282256287">"ਸਕ੍ਰੀਨ ਨੂੰ ਉੱਪਰ ਵੱਲ ਵਿਭਾਜਿਤ ਕਰੋ"</string>
     <string name="recents_accessibility_split_screen_left" msgid="8987144699630620019">"ਸਕ੍ਰੀਨ ਨੂੰ ਖੱਬੇ ਪਾਸੇ ਵਿਭਾਜਿਤ ਕਰੋ"</string>
     <string name="recents_accessibility_split_screen_right" msgid="275069779299592867">"ਸਕ੍ਰੀਨ ਨੂੰ ਸੱਜੇ ਪਾਸੇ ਵਿਭਾਜਿਤ ਕਰੋ"</string>
@@ -353,22 +353,22 @@
     <string name="description_target_search" msgid="3091587249776033139">"ਖੋਜੋ"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ਲਈ ਉੱਪਰ ਸਲਾਈਡ ਕਰੋ।"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ਤੱਕ ਖੱਬੇ ਪਾਸੇ ਸਲਾਈਡ ਕਰੋ।"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"ਧੁਨੀਆਂ ਅਤੇ ਥਰਥਰਾਹਟਾਂ ਤੁਹਾਨੂੰ ਪਰੇਸ਼ਾਨ ਨਹੀਂ ਕਰਨਗੀਆਂ, ਸਿਵਾਏ ਅਲਾਰਮਾਂ, ਯਾਦ-ਦਹਾਨੀਆਂ, ਵਰਤਾਰਿਆਂ, ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਨਿਰਧਾਰਤ ਕੀਤੇ ਕਾਲਰਾਂ ਦੀ ਸੂਰਤ ਵਿੱਚ। ਤੁਸੀਂ ਅਜੇ ਵੀ ਸੰਗੀਤ, ਵੀਡੀਓ ਅਤੇ ਗੇਮਾਂ ਸਮੇਤ ਆਪਣੀ ਚੋਣ ਅਨੁਸਾਰ ਕੁਝ ਵੀ ਸੁਣ ਸਕਦੇ ਹੋ।"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"ਧੁਨੀਆਂ ਅਤੇ ਥਰਥਰਾਹਟਾਂ ਤੁਹਾਨੂੰ ਪਰੇਸ਼ਾਨ ਨਹੀਂ ਕਰਨਗੀਆਂ, ਸਿਵਾਏ ਅਲਾਰਮਾਂ ਦੀ ਸੂਰਤ ਵਿੱਚ। ਤੁਸੀਂ ਅਜੇ ਵੀ ਸੰਗੀਤ, ਵੀਡੀਓ ਅਤੇ ਗੇਮਾਂ ਸਮੇਤ ਆਪਣੀ ਚੋਣ ਅਨੁਸਾਰ ਕੁਝ ਵੀ ਸੁਣ ਸਕਦੇ ਹੋ।"</string>
-    <string name="zen_priority_customize_button" msgid="7948043278226955063">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਕਰੋ"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"ਇਹ ਅਲਾਰਮ, ਸੰਗੀਤ, ਵੀਡੀਓ, ਅਤੇ ਗੇਮਾਂ ਸਮੇਤ, ਸਾਰੀਆਂ ਧੁਨੀਆਂ ਅਤੇ ਥਰਥਰਾਹਟ ਨੂੰ ਬਲੌਕ ਕਰਦਾ ਹੈ। ਤੁਸੀਂ ਅਜੇ ਵੀ ਫ਼ੋਨ ਕਾਲ ਕਰਨ ਦੇ ਯੋਗ ਹੋਵੋਂਗੇ।"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"ਧੁਨੀਆਂ ਅਤੇ ਥਰਥਰਾਹਟਾਂ ਤੁਹਾਨੂੰ ਪਰੇਸ਼ਾਨ ਨਹੀਂ ਕਰਨਗੀਆਂ, ਸਿਵਾਏ ਅਲਾਰਮਾਂ, ਯਾਦ-ਦਹਾਨੀਆਂ, ਵਰਤਾਰਿਆਂ, ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਨਿਰਧਾਰਤ ਕੀਤੇ ਕਾਲਰਾਂ ਦੀ ਸੂਰਤ ਵਿੱਚ। ਤੁਸੀਂ ਅਜੇ ਵੀ ਸੰਗੀਤ, ਵੀਡੀਓ ਅਤੇ ਗੇਮਾਂ ਸਮੇਤ ਆਪਣੀ ਚੋਣ ਅਨੁਸਾਰ ਕੁਝ ਵੀ ਸੁਣ ਸਕਦੇ ਹੋ।"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"ਧੁਨੀਆਂ ਅਤੇ ਥਰਥਰਾਹਟਾਂ ਤੁਹਾਨੂੰ ਪਰੇਸ਼ਾਨ ਨਹੀਂ ਕਰਨਗੀਆਂ, ਸਿਵਾਏ ਅਲਾਰਮਾਂ ਦੀ ਸੂਰਤ ਵਿੱਚ। ਤੁਸੀਂ ਅਜੇ ਵੀ ਸੰਗੀਤ, ਵੀਡੀਓ ਅਤੇ ਗੇਮਾਂ ਸਮੇਤ ਆਪਣੀ ਚੋਣ ਅਨੁਸਾਰ ਕੁਝ ਵੀ ਸੁਣ ਸਕਦੇ ਹੋ।"</string>
+    <string name="zen_priority_customize_button" msgid="7948043278226955063">"ਵਿਉਂਤਬੱਧ ਕਰੋ"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"ਇਹ ਅਲਾਰਮ, ਸੰਗੀਤ, ਵੀਡੀਓ, ਅਤੇ ਗੇਮਾਂ ਸਮੇਤ, ਸਾਰੀਆਂ ਧੁਨੀਆਂ ਅਤੇ ਥਰਥਰਾਹਟਾਂ ਨੂੰ ਬਲਾਕ ਕਰਦਾ ਹੈ। ਤੁਸੀਂ ਅਜੇ ਵੀ ਫ਼ੋਨ ਕਾਲ ਕਰਨ ਦੇ ਯੋਗ ਹੋਵੋਂਗੇ।"</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"ਇਹ ਅਲਾਰਮ, ਸੰਗੀਤ, ਵੀਡੀਓਜ਼, ਅਤੇ ਗੇਮਸ ਸਮੇਤ, ਸਾਰੀਆਂ ਧੁਨੀਆਂ ਅਤੇ ਵਾਇਬ੍ਰੇਸ਼ਨ ਨੂੰ ਬਲੌਕ ਕਰਦਾ ਹੈ।"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"ਹੇਠਾਂ ਘੱਟ ਲਾਜ਼ਮੀ ਸੂਚਨਾਵਾਂ"</string>
     <string name="notification_tap_again" msgid="7590196980943943842">"ਖੋਲ੍ਹਣ ਲਈ ਦੁਬਾਰਾ ਟੈਪ ਕਰੋ"</string>
-    <string name="keyguard_unlock" msgid="8043466894212841998">"ਅਨਲੌਕ ਕਰਨ ਲਈ ਉੱਪਰ ਸਵਾਈਪ ਕਰੋ।"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"ਅਣਲਾਕ ਕਰਨ ਲਈ ਉੱਪਰ ਸਵਾਈਪ ਕਰੋ।"</string>
     <string name="do_disclosure_generic" msgid="5615898451805157556">"ਇਸ ਡੀਵਾਈਸ ਦਾ ਪ੍ਰਬੰਧਨ ਤੁਹਾਡੇ ਸੰਗਠਨ ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ"</string>
     <string name="do_disclosure_with_name" msgid="5640615509915445501">"ਇਹ ਡੀਵਾਈਸ <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤਾ ਗਿਆ ਹੈ"</string>
-    <string name="phone_hint" msgid="4872890986869209950">"ਫ਼ੋਨ ਲਈ ਆਈਕਨ ਤੋਂ ਸਵਾਈਪ ਕਰੋ"</string>
-    <string name="voice_hint" msgid="8939888732119726665">"ਅਵਾਜ਼ੀ ਸਹਾਇਕ ਲਈ ਆਈਕਨ ਤੋਂ ਸਵਾਈਪ ਕਰੋ"</string>
-    <string name="camera_hint" msgid="7939688436797157483">"ਕੈਮਰੇ ਲਈ ਆਈਕਨ ਤੋਂ ਸਵਾਈਪ ਕਰੋ"</string>
-    <string name="interruption_level_none_with_warning" msgid="5114872171614161084">"ਕੁੱਲ ਸਾਈਲੈਂਟ। ਇਹ ਸਕ੍ਰੀਨ ਰੀਡਰਾਂ ਨੂੰ ਵੀ ਸਾਈਲੈਂਸ ਕਰ ਦੇਵੇਗਾ।"</string>
-    <string name="interruption_level_none" msgid="6000083681244492992">"ਸੰਪੂਰਨ ਖਾਮੋਸ਼ੀ"</string>
+    <string name="phone_hint" msgid="4872890986869209950">"ਫ਼ੋਨ ਲਈ ਪ੍ਰਤੀਕ ਤੋਂ ਸਵਾਈਪ ਕਰੋ"</string>
+    <string name="voice_hint" msgid="8939888732119726665">"ਅਵਾਜ਼ੀ ਸਹਾਇਕ ਲਈ ਪ੍ਰਤੀਕ ਤੋਂ ਸਵਾਈਪ ਕਰੋ"</string>
+    <string name="camera_hint" msgid="7939688436797157483">"ਕੈਮਰੇ ਲਈ ਪ੍ਰਤੀਕ ਤੋਂ ਸਵਾਈਪ ਕਰੋ"</string>
+    <string name="interruption_level_none_with_warning" msgid="5114872171614161084">"ਪੂਰਾ ਸ਼ਾਂਤ। ਇਹ ਸਕ੍ਰੀਨ ਰੀਡਰਾਂ ਨੂੰ ਵੀ ਸ਼ਾਂਤ ਕਰ ਦੇਵੇਗਾ।"</string>
+    <string name="interruption_level_none" msgid="6000083681244492992">"ਪੂਰਾ ਸ਼ਾਂਤ"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"ਕੇਵਲ ਤਰਜੀਹੀ"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"ਕੇਵਲ ਅਲਾਰਮ"</string>
     <string name="interruption_level_none_twoline" msgid="3957581548190765889">"ਕੁਲ \n ਚੁੱਪੀ"</string>
@@ -377,35 +377,35 @@
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ਚਾਰਜਿੰਗ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ਪੂਰਾ ਹੋਣ ਤੱਕ)"</string>
     <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"ਤੇਜ਼ੀ ਨਾਲ ਚਾਰਜ ਹੋ ਰਹੀ ਹੈ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ਪੂਰੀ ਹੋਣ ਤੱਕ)"</string>
     <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"ਹੌਲੀ-ਹੌਲੀ ਚਾਰਜ ਹੋ ਰਹੀ ਹੈ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ਪੂਰੀ ਹੋਣ ਤੱਕ)"</string>
-    <string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"ਉਪਭੋਗਤਾ ਸਵਿਚ ਕਰੋ"</string>
-    <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"ਉਪਭੋਗਤਾ, ਵਰਤਮਾਨ ਉਪਭੋਗਤਾ ਸਵਿਚ ਕਰੋ<xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
+    <string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"ਵਰਤੋਂਕਾਰ ਸਵਿੱਚ ਕਰੋ"</string>
+    <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"ਵਰਤੋਂਕਾਰ, ਵਰਤਮਾਨ ਵਰਤੋਂਕਾਰ ਸਵਿੱਚ ਕਰੋ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"ਮੌਜੂਦਾ ਉਪਭੋਗਤਾ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"ਪ੍ਰੋਫਾਈਲ ਦਿਖਾਓ"</string>
     <string name="user_add_user" msgid="5110251524486079492">"ਵਰਤੋਂਕਾਰ ਸ਼ਾਮਲ ਕਰੋ"</string>
     <string name="user_new_user_name" msgid="426540612051178753">"ਨਵਾਂ ਵਰਤੋਂਕਾਰ"</string>
     <string name="guest_nickname" msgid="8059989128963789678">"ਮਹਿਮਾਨ"</string>
-    <string name="guest_new_guest" msgid="600537543078847803">"ਮਹਿਮਾਨ ਜੋੜੋ"</string>
+    <string name="guest_new_guest" msgid="600537543078847803">"ਮਹਿਮਾਨ ਸ਼ਾਮਲ ਕਰੋ"</string>
     <string name="guest_exit_guest" msgid="7187359342030096885">"ਮਹਿਮਾਨ ਹਟਾਓ"</string>
     <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"ਕੀ ਮਹਿਮਾਨ ਹਟਾਉਣਾ ਹੈ?"</string>
-    <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"ਇਸ ਸੈਸ਼ਨ ਵਿੱਚ ਸਾਰੇ ਐਪਸ ਅਤੇ ਡੈਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਏਗਾ।"</string>
+    <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"ਇਸ ਸੈਸ਼ਨ ਵਿੱਚ ਸਾਰੀਆਂ ਐਪਾਂ ਅਤੇ ਡਾਟਾ ਨੂੰ ਮਿਟਾ ਦਿੱਤਾ ਜਾਏਗਾ।"</string>
     <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"ਹਟਾਓ"</string>
     <string name="guest_wipe_session_title" msgid="6419439912885956132">"ਮਹਿਮਾਨ, ਫਿਰ ਤੁਹਾਡਾ ਸੁਆਗਤ ਹੈ!"</string>
     <string name="guest_wipe_session_message" msgid="8476238178270112811">"ਕੀ ਤੁਸੀਂ ਆਪਣਾ ਸੈਸ਼ਨ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?"</string>
     <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"ਸ਼ੁਰੂ ਕਰੋ"</string>
     <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"ਹਾਂ, ਜਾਰੀ ਰੱਖੋ"</string>
     <string name="guest_notification_title" msgid="1585278533840603063">"ਮਹਿਮਾਨ ਉਪਭੋਗਤਾ"</string>
-    <string name="guest_notification_text" msgid="335747957734796689">"ਐਪਸ ਅਤੇ ਡੈਟਾ ਮਿਟਾਉਣ ਲਈ, ਮਹਿਮਾਨ ਉਪਭੋਗਤਾ ਹਟਾਓ"</string>
-    <string name="guest_notification_remove_action" msgid="8820670703892101990">"ਮਹਿਮਾਨ ਨੂੰ ਹਟਾਓ"</string>
+    <string name="guest_notification_text" msgid="335747957734796689">"ਐਪਾਂ ਅਤੇ ਡਾਟਾ ਮਿਟਾਉਣ ਲਈ, ਮਹਿਮਾਨ ਵਰਤੋਂਕਾਰ ਹਟਾਓ"</string>
+    <string name="guest_notification_remove_action" msgid="8820670703892101990">"ਮਹਿਮਾਨ ਹਟਾਓ"</string>
     <string name="user_logout_notification_title" msgid="1453960926437240727">"ਉਪਭੋਗਤਾ ਨੂੰ ਲੌਗ ਆਉਟ ਕਰੋ"</string>
     <string name="user_logout_notification_text" msgid="3350262809611876284">"ਵਰਤਮਾਨ ਉਪਭੋਗਤਾ ਨੂੰ ਲੌਗਆਉਟ ਕਰੋ"</string>
     <string name="user_logout_notification_action" msgid="1195428991423425062">"ਉਪਭੋਗਤਾ ਨੂੰ ਲੌਗ ਆਉਟ ਕਰੋ"</string>
     <string name="user_add_user_title" msgid="4553596395824132638">"ਕੀ ਨਵਾਂ ਵਰਤੋਂਕਾਰ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ?"</string>
     <string name="user_add_user_message_short" msgid="2161624834066214559">"ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਨਵਾਂ ਵਰਤੋਂਕਾਰ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋ, ਉਸ ਵਿਅਕਤੀ ਨੂੰ ਆਪਣੀ ਜਗ੍ਹਾ ਸਥਾਪਤ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।\n\nਕੋਈ ਵੀ ਵਰਤੋਂਕਾਰ ਹੋਰ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਦੀਆਂ ਐਪਾਂ ਨੂੰ ਅੱਪਡੇਟ ਕਰ ਸਕਦਾ ਹੈ।"</string>
     <string name="user_remove_user_title" msgid="4681256956076895559">"ਕੀ ਵਰਤੋਂਕਾਰ ਹਟਾਉਣਾ ਹੈ?"</string>
-    <string name="user_remove_user_message" msgid="1453218013959498039">"ਇਸ ਉਪਭੋਗਤਾ ਦੇ ਸਾਰੇ ਐਪਸ ਅਤੇ ਡੈਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਏਗਾ।"</string>
+    <string name="user_remove_user_message" msgid="1453218013959498039">"ਇਸ ਉਪਭੋਗਤਾ ਦੇ ਸਾਰੇ ਐਪਸ ਅਤੇ  ਡਾਟਾ  ਮਿਟਾ ਦਿੱਤਾ ਜਾਏਗਾ।"</string>
     <string name="user_remove_user_remove" msgid="7479275741742178297">"ਹਟਾਓ"</string>
     <string name="battery_saver_notification_title" msgid="237918726750955859">"ਬੈਟਰੀ ਸੇਵਰ ਚਾਲੂ ਹੈ"</string>
-    <string name="battery_saver_notification_text" msgid="820318788126672692">"ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਪਿਛੋਕੜ ਡੈਟਾ ਘੱਟ ਕਰਦਾ ਹੈ"</string>
+    <string name="battery_saver_notification_text" msgid="820318788126672692">"ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਪਿਛੋਕੜ  ਡਾਟਾ  ਘੱਟ ਕਰਦਾ ਹੈ"</string>
     <string name="battery_saver_notification_action_text" msgid="109158658238110382">"ਬੈਟਰੀ ਸੇਵਰ ਬੰਦ ਕਰੋ"</string>
     <string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਉਹ ਸਭ ਕੁਝ ਕੈਪਚਰ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰ ਦੇਵੇਗਾ, ਜੋ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਤੇ ਡਿਸਪਲੇ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।"</string>
     <string name="media_projection_remember_text" msgid="3103510882172746752">"ਦੁਬਾਰਾ ਨਾ ਦਿਖਾਓ"</string>
@@ -438,17 +438,17 @@
     <string name="monitoring_subtitle_ca_certificate" msgid="3874151893894355988">"CA ਪ੍ਰਮਾਣ-ਪੱਤਰ"</string>
     <string name="disable_vpn" msgid="4435534311510272506">"VPN ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPN ਨੂੰ ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
-    <string name="monitoring_button_view_policies" msgid="100913612638514424">"ਨੀਤੀਆਂ ਵੇਖੋ"</string>
-    <string name="monitoring_description_named_management" msgid="5281789135578986303">"ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਪ੍ਰਬੰਧਨ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨਾਲ ਸਬੰਧਿਤ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਾਂ, ਡਾਟਾ ਅਤੇ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਦੀ ਨਿਗਰਾਨੀ ਅਤੇ ਉਹਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
-    <string name="monitoring_description_management" msgid="4573721970278370790">"ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਪ੍ਰਬੰਧਨ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨਾਲ ਸਬੰਧਿਤ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਾਂ, ਡਾਟਾ ਅਤੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦਾ ਹੈ ਅਤੇ ਉਹਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
+    <string name="monitoring_button_view_policies" msgid="100913612638514424">"ਨੀਤੀਆਂ ਦੇਖੋ"</string>
+    <string name="monitoring_description_named_management" msgid="5281789135578986303">"ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਪ੍ਰਬੰਧਨ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨਾਲ ਸਬੰਧਿਤ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਾਂ, ਡਾਟਾ ਅਤੇ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਦੀ ਨਿਗਰਾਨੀ ਅਤੇ ਉਹਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+    <string name="monitoring_description_management" msgid="4573721970278370790">"ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਪ੍ਰਬੰਧਨ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨਾਲ ਸਬੰਧਿਤ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਾਂ, ਡਾਟਾ ਅਤੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦਾ ਹੈ ਅਤੇ ਉਹਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
     <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਇਸ ਡੀਵਾਈਸ \'ਤੇ ਇੱਕ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਅਥਾਰਟੀ ਸਥਾਪਤ ਕੀਤੀ ਗਈ ਹੈ। ਤੁਹਾਡੇ ਸੁਰੱਖਿਅਤ ਨੈੱਟਵਰਕ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ ਜਾਂ ਉਸਨੂੰ ਸੋਧਿਆ ਜਾ ਸਕਦਾ ਹੈ।"</string>
     <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਤੁਹਾਡੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਵਿੱਚ ਇੱਕ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਅਥਾਰਟੀ ਸਥਾਪਤ ਕੀਤੀ ਗਈ ਹੈ। ਤੁਹਾਡੇ ਸੁਰੱਖਿਅਤ ਨੈੱਟਵਰਕ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ ਜਾਂ ਉਸਨੂੰ ਸੋਧਿਆ ਜਾ ਸਕਦਾ ਹੈ।"</string>
     <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"ਇੱਕ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਅਥਾਰਟੀ ਇਸ ਡੀਵਾਈਸ \'ਤੇ ਸਥਾਪਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਤੁਹਾਡੇ ਸੁਰੱਖਿਅਤ ਨੈੱਟਵਰਕ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ ਜਾਂ ਉਸਨੂੰ ਸੋਧਿਆ ਜਾ ਸਕਦਾ ਹੈ।"</string>
     <string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਨੈੱਟਵਰਕ ਲੌਗਿੰਗ ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਹੋਇਆ ਹੈ, ਜੋ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰਦਾ ਹੈ।"</string>
     <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"ਤੁਸੀਂ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
     <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"ਤੁਸੀਂ <xliff:g id="VPN_APP_0">%1$s</xliff:g> ਅਤੇ <xliff:g id="VPN_APP_1">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀਆਂ ਹਨ।"</string>
-    <string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"ਤੁਹਾਡਾ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
-    <string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"ਤੁਹਾਡਾ ਨਿੱਜੀ ਪ੍ਰੋਫਾਈਲ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
+    <string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"ਤੁਹਾਡੀ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
+    <string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"ਤੁਹਾਡੀ ਨਿੱਜੀ ਪ੍ਰੋਫਾਈਲ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
     <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ਤੁਹਾਡਾ ਡੀਵਾਈਸ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।"</string>
     <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦੇ ਪ੍ਰਬੰਧਨ ਲਈ <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ।"</string>
     <string name="monitoring_description_do_body" msgid="3639594537660975895">"ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਾਂ, ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨਾਲ ਜੁੜੇ ਡਾਟੇ ਅਤੇ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਦੀ ਨਿਗਰਾਨੀ ਅਤੇ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ।"</string>
@@ -456,23 +456,23 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ਹੋਰ ਜਾਣੋ"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"ਤੁਸੀਂ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"ਭਰੋਸੇਯੋਗ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਖੋਲ੍ਹੋ"</string>
-    <string name="monitoring_description_network_logging" msgid="7223505523384076027">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਨੈੱਟਵਰਕ ਲੌਗਿੰਗ ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਹੋਇਆ ਹੈ, ਜੋ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
-    <string name="monitoring_description_vpn" msgid="4445150119515393526">"ਤੁਸੀਂ ਕਿਸੇ ਐਪ ਨੂੰ ਇੱਕ VPN ਕਨੈਕਸ਼ਨ ਸੈੱਟ ਅੱਪ ਕਰਨ ਦੀ ਅਨੁਮਤੀ ਦਿੱਤੀ ਹੈ।\n\nਇਹ ਐਪ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਅਤੇ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ, ਈਮੇਲਾਂ, ਐਪਾਂ ਅਤੇ ਸੁਰੱਖਿਅਤ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ।"</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"ਤੁਹਾਡੇ ਕਾਰਜ-ਸਥਾਨ ਪ੍ਰੋਫ਼ਾਈਲ ਦਾ ਪ੍ਰਬੰਧਨ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਈਮੇਲ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰਨ ਦੇ ਸਮਰੱਥ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।\n\nਤੁਸੀਂ ਇੱਕ VPN ਨਾਲ ਵੀ ਕਨੈਕਟ ਹੋਂ, ਜੋ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦਾ ਹੈ।"</string>
+    <string name="monitoring_description_network_logging" msgid="7223505523384076027">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਨੈੱਟਵਰਕ ਲੌਗਿੰਗ ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਹੋਇਆ ਹੈ, ਜੋ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+    <string name="monitoring_description_vpn" msgid="4445150119515393526">"ਤੁਸੀਂ ਕਿਸੇ ਐਪ ਨੂੰ ਇੱਕ VPN ਕਨੈਕਸ਼ਨ ਸੈੱਟ ਅੱਪ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੱਤੀ ਹੈ।\n\nਇਹ ਐਪ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਅਤੇ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ, ਈਮੇਲਾਂ, ਐਪਾਂ ਅਤੇ ਸੁਰੱਖਿਅਤ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ।"</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"ਤੁਹਾਡੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਦਾ ਪ੍ਰਬੰਧਨ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਈਮੇਲ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰਨ ਦੇ ਸਮਰੱਥ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।\n\nਤੁਸੀਂ ਇੱਕ VPN ਨਾਲ ਵੀ ਕਨੈਕਟ ਹੋਂ, ਜੋ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦਾ ਹੈ।"</string>
     <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
     <string name="monitoring_description_app" msgid="1828472472674709532">"ਤੁਸੀਂ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
     <string name="monitoring_description_app_personal" msgid="484599052118316268">"ਤੁਸੀਂ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।"</string>
     <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"ਤੁਸੀਂ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨਿੱਜੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
-    <string name="monitoring_description_app_work" msgid="4612997849787922906">"ਤੁਹਾਡੇ ਕਾਰਜ ਪ੍ਰੋਫ਼ਾਈਲ ਦਾ ਪ੍ਰਬੰਧਨ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਇਹ ਪ੍ਰੋਫ਼ਾਈਲ <xliff:g id="APPLICATION">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਕਾਰਜ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
+    <string name="monitoring_description_app_work" msgid="4612997849787922906">"ਤੁਹਾਡੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਦਾ ਪ੍ਰਬੰਧਨ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਇਹ ਪ੍ਰੋਫਾਈਲ <xliff:g id="APPLICATION">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਕਾਰਜ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
     <string name="monitoring_description_app_personal_work" msgid="5664165460056859391">"ਤੁਹਾਡੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਦਾ ਪ੍ਰਬੰਧਨ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਪ੍ਰੋਫਾਈਲ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ ਹੈ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਕਾਰਜ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।\n\nਤੁਸੀਂ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ਨਾਲ ਵੀ ਕਨੈਕਟ ਹੋਂ, ਜੋ ਤੁਹਾਡੀ ਨਿੱਜੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
-    <string name="keyguard_indication_trust_granted" msgid="4985003749105182372">"<xliff:g id="USER_NAME">%1$s</xliff:g> ਲਈ ਅਨਲੌਕ ਕੀਤੀ ਗਈ"</string>
+    <string name="keyguard_indication_trust_granted" msgid="4985003749105182372">"<xliff:g id="USER_NAME">%1$s</xliff:g> ਲਈ ਅਣਲਾਕ ਕੀਤੀ ਗਈ"</string>
     <string name="keyguard_indication_trust_managed" msgid="8319646760022357585">"<xliff:g id="TRUST_AGENT">%1$s</xliff:g> ਚੱਲ ਰਿਹਾ ਹੈ"</string>
-    <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"ਡੀਵਾਈਸ ਲੌਕ ਰਹੇਗਾ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਮੈਨੂਅਲੀ ਅਨਲੌਕ ਨਹੀਂ ਕਰਦੇ"</string>
+    <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"ਡੀਵਾਈਸ ਲਾਕ ਰਹੇਗਾ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਮੈਨੂਅਲੀ ਅਣਲਾਕ ਨਹੀਂ ਕਰਦੇ"</string>
     <string name="hidden_notifications_title" msgid="7139628534207443290">"ਤੇਜ਼ੀ ਨਾਲ ਸੂਚਨਾਵਾਂ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
-    <string name="hidden_notifications_text" msgid="2326409389088668981">"ਅਨਲੌਕ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਹਨਾਂ ਨੂੰ ਦੇਖੋ"</string>
+    <string name="hidden_notifications_text" msgid="2326409389088668981">"ਅਣਲਾਕ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਹਨਾਂ ਨੂੰ ਦੇਖੋ"</string>
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"ਨਹੀਂ ਧੰਨਵਾਦ"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"ਸਥਾਪਤ ਕਰੋ"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
@@ -487,8 +487,8 @@
     <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"ਕੀ <xliff:g id="TILE_LABEL">%1$s</xliff:g> ਨੂੰ ਲੁਕਾਉਣਾ ਹੈ?"</string>
     <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"ਇਹ ਅਗਲੀ ਵਾਰ ਮੁੜ ਪ੍ਰਗਟ ਹੋਵੇਗਾ ਜਦੋਂ ਤੁਸੀਂ ਇਸਨੂੰ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਚਾਲੂ ਕਰਦੇ ਹੋ।"</string>
     <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"ਲੁਕਾਓ"</string>
-    <string name="managed_profile_foreground_toast" msgid="5421487114739245972">"ਤੁਸੀਂ ਆਪਣੀ ਕੰਮ ਪ੍ਰੋਫਾਈਲ ਵਰਤ ਰਹੇ ਹੋ"</string>
-    <string name="stream_voice_call" msgid="4410002696470423714">"ਕਾਲ"</string>
+    <string name="managed_profile_foreground_toast" msgid="5421487114739245972">"ਤੁਸੀਂ ਆਪਣੀ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਵਰਤ ਰਹੇ ਹੋ"</string>
+    <string name="stream_voice_call" msgid="4410002696470423714">"ਕਾਲ ਕਰੋ"</string>
     <string name="stream_system" msgid="7493299064422163147">"ਸਿਸਟਮ"</string>
     <string name="stream_ring" msgid="8213049469184048338">"ਘੰਟੀ ਵਜਾਓ"</string>
     <string name="stream_music" msgid="9086982948697544342">"ਮੀਡੀਆ"</string>
@@ -502,22 +502,22 @@
     <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s। ਮਿਊਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ। ਪਹੁੰਚਯੋਗਤਾ ਸੇਵਾਵਾਂ ਮਿਊਟ ਹੋ ਸਕਦੀਆਂ ਹਨ।"</string>
     <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s। ਥਰਥਰਾਹਟ \'ਤੇ ਸੈੱਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
     <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s। ਮਿਊਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
-    <string name="volume_dialog_accessibility_shown_message" msgid="1834631467074259998">"%s ਵੌਲਿਊਮ ਕੰਟਰੋਲ ਵਿਖਾਏ ਗਏ ਹਨ। ਬਰਖ਼ਾਸਤ ਕਰਨ ਲਈ ਉੱਪਰ ਸਵਾਈਪ ਕਰੋ।"</string>
+    <string name="volume_dialog_accessibility_shown_message" msgid="1834631467074259998">"%s ਅਵਾਜ਼ ਕੰਟਰੋਲ ਦਿਖਾਏ ਗਏ ਹਨ। ਖਾਰਜ ਕਰਨ ਲਈ ਉੱਪਰ ਸਵਾਈਪ ਕਰੋ।"</string>
     <string name="volume_dialog_accessibility_dismissed_message" msgid="51543526013711399">"ਵੌਲਿਊਮ ਕੰਟਰੋਲ ਲੁਕਾਏ ਗਏ ਹਨ"</string>
     <string name="system_ui_tuner" msgid="708224127392452018">"System UI ਟਿਊਨਰ"</string>
     <string name="show_battery_percentage" msgid="5444136600512968798">"ਜੋਡ਼ੀ ਗਈ ਬੈਟਰੀ ਪ੍ਰਤਿਸ਼ਤਤਾ ਦਿਖਾਓ"</string>
-    <string name="show_battery_percentage_summary" msgid="3215025775576786037">"ਜਦੋਂ ਚਾਰਜ ਨਾ ਹੋ ਰਹੀ ਹੋਵੇ ਤਾਂ ਸਥਿਤੀ ਬਾਰ ਦੇ ਅੰਦਰ ਬੈਟਰੀ ਪੱਧਰ ਪ੍ਰਤਿਸ਼ਤਤਾ ਦਿਖਾਓ"</string>
-    <string name="quick_settings" msgid="10042998191725428">"ਤਤਕਾਲ ਸੈੱਟਿੰਗਜ਼"</string>
-    <string name="status_bar" msgid="4877645476959324760">"ਸਥਿਤੀ ਬਾਰ"</string>
+    <string name="show_battery_percentage_summary" msgid="3215025775576786037">"ਜਦੋਂ ਚਾਰਜ ਨਾ ਹੋ ਰਹੀ ਹੋਵੇ ਤਾਂ ਸਥਿਤੀ ਪੱਟੀ ਪ੍ਰਤੀਕ ਦੇ ਅੰਦਰ ਬੈਟਰੀ ਪੱਧਰ ਪ੍ਰਤਿਸ਼ਤਤਾ ਦਿਖਾਓ"</string>
+    <string name="quick_settings" msgid="10042998191725428">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ"</string>
+    <string name="status_bar" msgid="4877645476959324760">"ਸਥਿਤੀ ਪੱਟੀ"</string>
     <string name="overview" msgid="4018602013895926956">"ਰੂਪ-ਰੇਖਾ"</string>
     <string name="demo_mode" msgid="2532177350215638026">"ਸਿਸਟਮ UI ਡੈਮੋ ਮੋਡ"</string>
-    <string name="enable_demo_mode" msgid="4844205668718636518">"ਡੈਮੋ ਮੋਡ ਸਮਰੱਥ ਬਣਾਓ"</string>
+    <string name="enable_demo_mode" msgid="4844205668718636518">"ਡੈਮੋ ਮੋਡ ਚਾਲੂ ਕਰੋ"</string>
     <string name="show_demo_mode" msgid="2018336697782464029">"ਡੈਮੋ ਮੋਡ ਦੇਖੋ"</string>
     <string name="status_bar_ethernet" msgid="5044290963549500128">"ਈਥਰਨੈਟ"</string>
     <string name="status_bar_alarm" msgid="8536256753575881818">"ਅਲਾਰਮ"</string>
-    <string name="status_bar_work" msgid="6022553324802866373">"ਕੰਮ ਪ੍ਰੋਫਾਈਲ"</string>
+    <string name="status_bar_work" msgid="6022553324802866373">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ"</string>
     <string name="status_bar_airplane" msgid="7057575501472249002">"ਜਹਾਜ਼ ਮੋਡ"</string>
-    <string name="add_tile" msgid="2995389510240786221">"ਟਾਇਲ ਜੋੜੋ"</string>
+    <string name="add_tile" msgid="2995389510240786221">"ਟਾਇਲ ਸ਼ਾਮਲ ਕਰੋ"</string>
     <string name="broadcast_tile" msgid="3894036511763289383">"ਪ੍ਰਸਾਰਨ ਟਾਇਲ"</string>
     <string name="zen_alarm_warning_indef" msgid="3482966345578319605">"ਤੁਸੀਂ <xliff:g id="WHEN">%1$s</xliff:g> ਵਜੇ ਆਪਣਾ ਅਗਲਾ ਅਲਾਰਮ ਨਹੀਂ ਸੁਣੋਗੇ ਜਦੋਂ ਤੱਕ ਉਸਤੋਂ ਪਹਿਲਾਂ ਤੁਸੀਂ ਇਸਨੂੰ ਬੰਦ ਨਹੀਂ ਕਰਦੇ"</string>
     <string name="zen_alarm_warning" msgid="444533119582244293">"ਤੁਸੀਂ <xliff:g id="WHEN">%1$s</xliff:g> ਵਜੇ ਆਪਣਾ ਅਗਲਾ ਅਲਾਰਮ ਨਹੀਂ ਸੁਣੋਗੇ"</string>
@@ -525,39 +525,39 @@
     <string name="alarm_template_far" msgid="4242179982586714810">"<xliff:g id="WHEN">%1$s</xliff:g> ਵਜੇ"</string>
     <string name="accessibility_quick_settings_detail" msgid="2579369091672902101">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ, <xliff:g id="TITLE">%s</xliff:g>।"</string>
     <string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"ਹੌਟਸਪੌਟ"</string>
-    <string name="accessibility_managed_profile" msgid="6613641363112584120">"ਕੰਮ ਪ੍ਰੋਫਾਈਲ"</string>
+    <string name="accessibility_managed_profile" msgid="6613641363112584120">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ"</string>
     <string name="tuner_warning_title" msgid="7094689930793031682">"ਕੁਝ ਵਾਸਤੇ ਤਾਂ ਮਜ਼ੇਦਾਰ ਹੈ ਲੇਕਿਨ ਸਾਰਿਆਂ ਵਾਸਤੇ ਨਹੀਂ"</string>
-    <string name="tuner_warning" msgid="8730648121973575701">"ਸਿਸਟਮ UI ਟਿਊਨਰ ਤੁਹਾਨੂੰ Android ਉਪਭੋਗਤਾ ਇੰਟਰਫੇਸ ਤਬਦੀਲ ਕਰਨ ਅਤੇ ਅਨੁਕੂਲਿਤ ਕਰਨ ਲਈ ਵਾਧੂ ਤਰੀਕੇ ਦਿੰਦਾ ਹੈ। ਇਹ ਪ੍ਰਯੋਗਾਤਮਿਕ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਭਵਿੱਖ ਦੀ ਰੀਲੀਜ਼ ਵਿੱਚ ਬਦਲ ਸਕਦੀਆਂ ਹਨ, ਟੁੱਟ ਸਕਦੀਆਂ ਹਨ, ਜਾਂ ਅਲੋਪ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਸਾਵਧਾਨੀ ਨਾਲ ਅੱਗੇ ਵੱਧੋ।"</string>
+    <string name="tuner_warning" msgid="8730648121973575701">"ਸਿਸਟਮ UI ਟਿਊਨਰ ਤੁਹਾਨੂੰ Android ਵਰਤੋਂਕਾਰ ਇੰਟਰਫੇਸ ਤਬਦੀਲ ਕਰਨ ਅਤੇ ਵਿਉਂਤਬੱਧ ਕਰਨ ਲਈ ਵਾਧੂ ਤਰੀਕੇ ਦਿੰਦਾ ਹੈ। ਇਹ ਪ੍ਰਯੋਗਾਤਮਿਕ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਭਵਿੱਖ ਦੀ ਰੀਲੀਜ਼ ਵਿੱਚ ਬਦਲ ਸਕਦੀਆਂ ਹਨ, ਟੁੱਟ ਸਕਦੀਆਂ ਹਨ, ਜਾਂ ਅਲੋਪ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਸਾਵਧਾਨੀ ਨਾਲ ਅੱਗੇ ਵੱਧੋ।"</string>
     <string name="tuner_persistent_warning" msgid="8597333795565621795">"ਇਹ ਪ੍ਰਯੋਗਾਤਮਿਕ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਭਵਿੱਖ ਦੀ ਰੀਲੀਜ਼ ਵਿੱਚ ਬਦਲ ਸਕਦੀਆਂ ਹਨ, ਟੁੱਟ ਸਕਦੀਆਂ ਹਨ, ਜਾਂ ਅਲੋਪ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਸਾਵਧਾਨੀ ਨਾਲ ਅੱਗੇ ਵੱਧੋ।"</string>
     <string name="got_it" msgid="2239653834387972602">"ਸਮਝ ਲਿਆ"</string>
-    <string name="tuner_toast" msgid="603429811084428439">"ਵਧਾਈਆਂ! ਸਿਸਟਮ UI ਟਿਊਨਰ ਨੂੰ ਸੈਟਿੰਗਜ਼ ਵਿੱਚ ਜੋੜਿਆ ਗਿਆ ਹੈ"</string>
-    <string name="remove_from_settings" msgid="8389591916603406378">"ਸੈਟਿੰਗਜ਼ ਤੋਂ ਹਟਾਓ"</string>
-    <string name="remove_from_settings_prompt" msgid="6069085993355887748">"ਕੀ ਸੈਟਿੰਗਜ਼ ਤੋਂ ਸਿਸਟਮ UI ਟਿਊਨਰ ਨੂੰ ਹਟਾਉਣਾ ਹੈ ਅਤੇ ਇਸਦੀਆਂ ਸਾਰੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਉਪਯੋਗ ਕਰਨ ਤੋਂ ਰੋਕਣਾ ਹੈ?"</string>
+    <string name="tuner_toast" msgid="603429811084428439">"ਵਧਾਈਆਂ! ਸਿਸਟਮ UI ਟਿਊਨਰ ਨੂੰ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜੋੜਿਆ ਗਿਆ ਹੈ"</string>
+    <string name="remove_from_settings" msgid="8389591916603406378">"ਸੈਟਿੰਗਾਂ ਤੋਂ ਹਟਾਓ"</string>
+    <string name="remove_from_settings_prompt" msgid="6069085993355887748">"ਕੀ ਸੈਟਿੰਗਾਂ ਤੋਂ ਸਿਸਟਮ UI ਟਿਊਨਰ ਨੂੰ ਹਟਾਉਣਾ ਹੈ ਅਤੇ ਇਸਦੀਆਂ ਸਾਰੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਵਰਤੋਂ ਕਰਨ ਤੋਂ ਰੋਕਣਾ ਹੈ?"</string>
     <string name="activity_not_found" msgid="348423244327799974">"ਐਪਲੀਕੇਸ਼ਨ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਤੇ ਸਥਾਪਤ ਨਹੀਂ ਕੀਤੀ ਗਈ ਹੈ"</string>
     <string name="clock_seconds" msgid="7689554147579179507">"ਘੜੀ ਸਕਿੰਟ ਦਿਖਾਓ"</string>
-    <string name="clock_seconds_desc" msgid="6282693067130470675">"ਸਥਿਤੀ ਬਾਰ ਵਿੱਚ ਘੜੀ ਸਕਿੰਟ ਦਿਖਾਓ। ਬੈਟਰੀ ਸਮਰੱਥਾ ਤੇ ਅਸਰ ਪੈ ਸਕਦਾ ਹੈ।"</string>
+    <string name="clock_seconds_desc" msgid="6282693067130470675">"ਸਥਿਤੀ ਪੱਟੀ ਵਿੱਚ ਘੜੀ ਸਕਿੰਟ ਦਿਖਾਓ। ਬੈਟਰੀ ਸਮਰੱਥਾ ਤੇ ਅਸਰ ਪੈ ਸਕਦਾ ਹੈ।"</string>
     <string name="qs_rearrange" msgid="8060918697551068765">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਨੂੰ ਦੁਬਾਰਾ ਕ੍ਰਮ ਦਿਓ"</string>
     <string name="show_brightness" msgid="6613930842805942519">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਚਮਕ ਦਿਖਾਓ"</string>
     <string name="experimental" msgid="6198182315536726162">"ਪ੍ਰਯੋਗਾਤਮਿਕ"</string>
     <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth ਚਾਲੂ ਕਰੋ?"</string>
-    <string name="enable_bluetooth_message" msgid="9106595990708985385">"ਆਪਣੇ ਟੈਬਲੇਟ ਨਾਲ ਆਪਣਾ ਕੀ-ਬੋਰਡ ਕਨੈਕਟ ਕਰਨ ਲਈ, ਤੁਹਾਨੂੰ ਪਹਿਲਾਂ Bluetooth ਚਾਲੂ ਕਰਨ ਦੀ ਜ਼ਰੂਰਤ ਹੈ।"</string>
+    <string name="enable_bluetooth_message" msgid="9106595990708985385">"ਆਪਣੇ ਟੈਬਲੈੱਟ ਨਾਲ ਆਪਣਾ ਕੀ-ਬੋਰਡ ਕਨੈਕਟ ਕਰਨ ਲਈ, ਤੁਹਾਨੂੰ ਪਹਿਲਾਂ ਬਲੂਟੁੱਥ ਚਾਲੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।"</string>
     <string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"ਚਾਲੂ ਕਰੋ"</string>
-    <string name="show_silently" msgid="6841966539811264192">"ਸੂਚਨਾਵਾਂ ਚੁੱਪਚਾਪ ਢੰਗ ਨਾਲ ਵਿਖਾਓ"</string>
+    <string name="show_silently" msgid="6841966539811264192">"ਸੂਚਨਾਵਾਂ ਚੁੱਪਚਾਪ ਢੰਗ ਨਾਲ  ਦਿਖਾਓ"</string>
     <string name="block" msgid="2734508760962682611">"ਸਾਰੀਆਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਬਲਾਕ ਕਰੋ"</string>
     <string name="do_not_silence" msgid="6878060322594892441">"ਚੁੱਪ ਨਾ ਕਰਵਾਓ"</string>
     <string name="do_not_silence_block" msgid="4070647971382232311">"ਚੁੱਪ ਨਾ ਕਰਵਾਓ ਜਾਂ ਬਲੌਕ ਨਾ ਕਰੋ"</string>
     <string name="tuner_full_importance_settings" msgid="3207312268609236827">"ਪਾਵਰ ਸੂਚਨਾ ਕੰਟਰੋਲ"</string>
     <string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"ਚਾਲੂ"</string>
     <string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"ਬੰਦ"</string>
-    <string name="power_notification_controls_description" msgid="4372459941671353358">"ਪਾਵਰ ਸੂਚਨਾ ਕੰਟਰੋਲਾਂ ਨਾਲ, ਤੁਸੀਂ ਕਿਸੇ ਐਪ ਦੀਆਂ ਸੂਚਨਾਵਾਂ ਲਈ ਮਹੱਤਤਾ ਪੱਧਰ ਨੂੰ 0 ਤੋਂ 5 ਤੱਕ ਸੈੱਟ ਕਰ ਸਕਦੇ ਹੋ। \n\n"<b>"ਪੱਧਰ 5"</b>" \n- ਸੂਚਨਾ ਸੂਚੀ ਦੇ ਸਿਖਰ \'ਤੇ ਦਿਖਾਓ \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਦੀ ਆਗਿਆ ਦਿਓ \n- ਹਮੇਸ਼ਾਂ ਝਲਕ ਦਿਖਾਓ \n\n"<b>"ਪੱਧਰ 4"</b>" \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਨੂੰ ਰੋਕੋ \n- ਹਮੇਸ਼ਾਂ ਝਲਕ ਦਿਖਾਓ \n\n"<b>"ਪੱਧਰ 3"</b>" \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਨੂੰ ਰੋਕੋ \n- ਕਦੇ ਝਲਕ ਨਾ ਦਿਖਾਓ \n\n"<b>"ਪੱਧਰ 2"</b>" \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਨੂੰ ਰੋਕੋ \n- ਕਦੇ ਝਲਕ ਨਾ ਦਿਖਾਓ \n- ਕਦੇ ਵੀ ਧੁਨੀ ਜਾਂ ਥਰਥਰਾਹਟ ਨਾ ਕਰੋ \n\n"<b>"ਪੱਧਰ 1"</b>" \n- ਪੂਰੀ ਸਕ੍ਰੀਨ ਰੁਕਾਵਟ ਨੂੰ ਰੋਕੋ \n- ਕਦੇ ਝਲਕ ਨਾ ਦਿਖਾਓ \n- ਕਦੇ ਧੁਨੀ ਜਾਂ ਥਰਥਰਾਹਟ ਨਾ ਕਰੋ \n- ਲੌਕ ਸਕ੍ਰੀਨ ਅਤੇ ਸਥਿਤੀ ਪੱਟੀ ਤੋਂ ਲੁਕਾਓ \n- ਸੂਚਨਾ ਸੂਚੀ ਦੇ ਹੇਠਾਂ ਦਿਖਾਓ \n\n"<b>"ਪੱਧਰ 0"</b>" \n- ਐਪ ਤੋਂ ਸਾਰੀਆਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਬਲਾਕ ਕਰੋ"</string>
+    <string name="power_notification_controls_description" msgid="4372459941671353358">"ਪਾਵਰ ਸੂਚਨਾ ਕੰਟਰੋਲਾਂ ਨਾਲ, ਤੁਸੀਂ ਕਿਸੇ ਐਪ ਦੀਆਂ ਸੂਚਨਾਵਾਂ ਲਈ ਮਹੱਤਤਾ ਪੱਧਰ ਨੂੰ 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="7506845022070889909">"ਸੂਚਨਾਵਾਂ"</string>
     <string name="notification_channel_disabled" msgid="2139193533791840539">"ਤੁਹਾਨੂੰ ਹੁਣ ਇਹ ਸੂਚਨਾਵਾਂ ਪ੍ਰਾਪਤ ਨਹੀਂ ਹੋਣਗੀਆਂ"</string>
     <string name="notification_num_channels" msgid="2048144408999179471">"<xliff:g id="NUMBER">%d</xliff:g> ਸੂਚਨਾ ਸ਼੍ਰੇਣੀਆਂ"</string>
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"ਇਸ ਐਪ ਵਿੱਚ ਸੂਚਨਾ ਸ਼੍ਰੇਣੀਆਂ ਨਹੀਂ ਹਨ"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"ਇਸ ਐਪ ਤੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਬੰਦ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">ਇਸ ਐਪ ਤੋਂ <xliff:g id="NUMBER_1">%d</xliff:g> ਸੂਚਨਾ ਸ਼੍ਰੇਣੀ ਵਿੱਚੋਂ 1</item>
-      <item quantity="other">ਇਸ ਐਪ ਤੋਂ <xliff:g id="NUMBER_1">%d</xliff:g> ਸੂਚਨਾ ਸ਼੍ਰੇਣੀਆਂ ਵਿੱਚੋਂ 1</item>
+      <item quantity="one">ਇਸ ਐਪ ਤੋਂ <xliff:g id="NUMBER_1">%s</xliff:g> ਸੂਚਨਾ ਸ਼੍ਰੇਣੀ ਵਿੱਚੋਂ 1</item>
+      <item quantity="other">ਇਸ ਐਪ ਤੋਂ <xliff:g id="NUMBER_1">%s</xliff:g> ਸੂਚਨਾ ਸ਼੍ਰੇਣੀ ਵਿੱਚੋਂ 1</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -569,7 +569,7 @@
     <string name="notification_channel_switch_accessibility" msgid="3420796005601900717">"ਇਸ ਚੈਨਲ ਤੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਇਜਾਜ਼ਤ ਦਿਓ"</string>
     <string name="notification_all_categories" msgid="5407190218055113282">"ਸਭ ਸ਼੍ਰੇਣੀਆਂ"</string>
     <string name="notification_more_settings" msgid="816306283396553571">"ਹੋਰ ਸੈਟਿੰਗਾਂ"</string>
-    <string name="notification_app_settings" msgid="3743278649182392015">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਕਰੋ: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
+    <string name="notification_app_settings" msgid="3743278649182392015">"ਵਿਉਂਤਬੱਧ ਕਰੋ: <xliff:g id="SUB_CATEGORY">%1$s</xliff:g>"</string>
     <string name="notification_done" msgid="5279426047273930175">"ਹੋ ਗਿਆ"</string>
     <string name="notification_menu_accessibility" msgid="2046162834248888553">"<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="2204480013726775108">"ਸੂਚਨਾ ਕੰਟਰੋਲ"</string>
@@ -585,9 +585,9 @@
       <item quantity="other"> %d ਮਿੰਟ</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"ਬੈਟਰੀ ਵਰਤੋਂ"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ਬੈਟਰੀ ਸੇਵਰ ਚਾਰਜਿੰਗ ਦੌਰਾਨ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"ਬੈਟਰੀ ਸੇਵਰ"</string>
-    <string name="battery_detail_switch_summary" msgid="9049111149407626804">"ਕਾਰਗੁਜ਼ਾਰੀ ਅਤੇ ਬੈਕਗ੍ਰਾਊਂਡ ਡੈਟੇ ਨੂੰ ਘਟਾਉਂਦਾ ਹੈ"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"ਬੈਟਰੀ ਸੇਵਰ ਚਾਰਜਿੰਗ ਦੌਰਾਨ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"ਬੈਟਰੀ ਸੇਵਰ"</string>
+    <string name="battery_detail_switch_summary" msgid="9049111149407626804">"ਕਾਰਗੁਜ਼ਾਰੀ ਅਤੇ ਬੈਕਗ੍ਰਾਊਂਡ  ਡਾਟੇ  ਨੂੰ ਘਟਾਉਂਦਾ ਹੈ"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"ਬਟਨ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
     <string name="keyboard_key_back" msgid="2337450286042721351">"Back"</string>
@@ -596,31 +596,31 @@
     <string name="keyboard_key_dpad_left" msgid="1346446024676962251">"Left"</string>
     <string name="keyboard_key_dpad_right" msgid="3317323247127515341">"Right"</string>
     <string name="keyboard_key_dpad_center" msgid="2566737770049304658">"Center"</string>
-    <string name="keyboard_key_tab" msgid="3871485650463164476">"Tab"</string>
+    <string name="keyboard_key_tab" msgid="3871485650463164476">"ਟੈਬ"</string>
     <string name="keyboard_key_space" msgid="2499861316311153293">"Space"</string>
     <string name="keyboard_key_enter" msgid="5739632123216118137">"Enter"</string>
     <string name="keyboard_key_backspace" msgid="1559580097512385854">"Backspace"</string>
     <string name="keyboard_key_media_play_pause" msgid="3861975717393887428">"Play/Pause"</string>
     <string name="keyboard_key_media_stop" msgid="2859963958595908962">"Stop"</string>
-    <string name="keyboard_key_media_next" msgid="1894394911630345607">"Next"</string>
-    <string name="keyboard_key_media_previous" msgid="4256072387192967261">"Previous"</string>
+    <string name="keyboard_key_media_next" msgid="1894394911630345607">"ਅੱਗੇ"</string>
+    <string name="keyboard_key_media_previous" msgid="4256072387192967261">"ਪਿਛਲਾ"</string>
     <string name="keyboard_key_media_rewind" msgid="2654808213360820186">"Rewind"</string>
-    <string name="keyboard_key_media_fast_forward" msgid="3849417047738200605">"Fast Forward"</string>
+    <string name="keyboard_key_media_fast_forward" msgid="3849417047738200605">"ਤੇਜ਼ੀ ਨਾਲ ਅੱਗੇ ਭੇਜੋ"</string>
     <string name="keyboard_key_page_up" msgid="5654098530106845603">"Page Up"</string>
     <string name="keyboard_key_page_down" msgid="8720502083731906136">"Page Down"</string>
-    <string name="keyboard_key_forward_del" msgid="1391451334716490176">"Delete"</string>
+    <string name="keyboard_key_forward_del" msgid="1391451334716490176">"ਮਿਟਾਓ"</string>
     <string name="keyboard_key_move_home" msgid="2765693292069487486">"Home"</string>
     <string name="keyboard_key_move_end" msgid="5901174332047975247">"End"</string>
     <string name="keyboard_key_insert" msgid="8530501581636082614">"Insert"</string>
     <string name="keyboard_key_num_lock" msgid="5052537581246772117">"Num Lock"</string>
     <string name="keyboard_key_numpad_template" msgid="8729216555174634026">"Numpad <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_shortcut_group_system" msgid="6472647649616541064">"ਸਿਸਟਮ"</string>
-    <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ਮੁੱਖ ਸਕ੍ਰੀਨ"</string>
+    <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ਹੋਮ ਸਕ੍ਰੀਨ"</string>
     <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ਹਾਲੀਆ"</string>
     <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"ਪਿੱਛੇ"</string>
     <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"ਸੂਚਨਾਵਾਂ"</string>
     <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"ਕੀ-ਬੋਰਡ ਸ਼ਾਰਟਕੱਟ"</string>
-    <string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"ਇਨਪੁੱਟ ਵਿਧੀ ਬਦਲੋ"</string>
+    <string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"ਇਨਪੁੱਟ ਵਿਧੀ ਸਵਿੱਚ ਕਰੋ"</string>
     <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"ਐਪਲੀਕੇਸ਼ਨਾਂ"</string>
     <string name="keyboard_shortcut_group_applications_assist" msgid="9095441910537146013">"ਸਹਾਇਕ"</string>
     <string name="keyboard_shortcut_group_applications_browser" msgid="6465985474000766533">"ਬ੍ਰਾਊਜ਼ਰ"</string>
@@ -630,21 +630,21 @@
     <string name="keyboard_shortcut_group_applications_music" msgid="4775559515850922780">"ਸੰਗੀਤ"</string>
     <string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"YouTube"</string>
     <string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"ਕੈਲੰਡਰ"</string>
-    <string name="tuner_full_zen_title" msgid="4540823317772234308">"ਵੌਲਿਊਮ ਕੰਟਰੋਲਾਂ ਨਾਲ ਵਿਖਾਓ"</string>
+    <string name="tuner_full_zen_title" msgid="4540823317772234308">"ਵੌਲਿਊਮ ਕੰਟਰੋਲਾਂ ਨਾਲ  ਦਿਖਾਓ"</string>
     <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ"</string>
     <string name="volume_dnd_silent" msgid="4363882330723050727">"ਵੌਲਿਊਮ ਬਟਨ ਸ਼ਾਰਟਕੱਟ"</string>
     <string name="volume_up_silent" msgid="7141255269783588286">"ਅਵਾਜ਼ ਉੱਚੀ ਹੋਣ \'ਤੇ ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਤੋਂ ਬਾਹਰ ਜਾਓ"</string>
     <string name="battery" msgid="7498329822413202973">"ਬੈਟਰੀ"</string>
     <string name="clock" msgid="7416090374234785905">"ਘੜੀ"</string>
     <string name="headset" msgid="4534219457597457353">"ਹੈੱਡਸੈੱਟ"</string>
-    <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ਹੈੱਡਫੋਨਾਂ ਨੂੰ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
+    <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ਹੈੱਡਫ਼ੋਨ ਨੂੰ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
     <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ਹੈੱਡਸੈੱਟ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
     <string name="data_saver" msgid="5037565123367048522">"ਡਾਟਾ ਸੇਵਰ"</string>
     <string name="accessibility_data_saver_on" msgid="8454111686783887148">"ਡਾਟਾ ਸੇਵਰ ਚਾਲੂ ਹੈ"</string>
     <string name="accessibility_data_saver_off" msgid="8841582529453005337">"ਡਾਟਾ ਸੇਵਰ ਬੰਦ ਹੈ"</string>
     <string name="switch_bar_on" msgid="1142437840752794229">"ਚਾਲੂ"</string>
     <string name="switch_bar_off" msgid="8803270596930432874">"ਬੰਦ"</string>
-    <string name="nav_bar" msgid="1993221402773877607">"ਆਵਾਗੌਣ ਪੱਟੀ"</string>
+    <string name="nav_bar" msgid="1993221402773877607">"ਦਿਸ਼ਾ-ਨਿਰਦੇਸ਼ ਪੱਟੀ"</string>
     <string name="nav_bar_layout" msgid="3664072994198772020">"ਖਾਕਾ"</string>
     <string name="left_nav_bar_button_type" msgid="8555981238887546528">"ਵਧੇਰੇ ਖੱਬੇ ਬਟਨ ਕਿਸਮ"</string>
     <string name="right_nav_bar_button_type" msgid="2481056627065649656">"ਵਧੇਰੇ ਸੱਜੇ ਬਟਨ ਕਿਸਮ"</string>
@@ -657,7 +657,7 @@
   </string-array>
   <string-array name="nav_bar_layouts">
     <item msgid="8077901629964902399">"ਸਧਾਰਨ"</item>
-    <item msgid="8256205964297588988">"ਸੰਖੇਪ"</item>
+    <item msgid="8256205964297588988">"ਸੰਖਿਪਤ"</item>
     <item msgid="8719936228094005878">"ਖੱਬੇ-ਉਲਾਰ"</item>
     <item msgid="586019486955594690">"ਸੱਜੇ-ਉਲਾਰ"</item>
   </string-array>
@@ -666,7 +666,7 @@
     <string name="reset" msgid="2448168080964209908">"ਰੀਸੈੱਟ ਕਰੋ"</string>
     <string name="adjust_button_width" msgid="6138616087197632947">"ਬਟਨ ਚੁੜਾਈ ਵਿਵਸਥਿਤ ਕਰੋ"</string>
     <string name="clipboard" msgid="1313879395099896312">"ਕਲਿੱਪਬੋਰਡ"</string>
-    <string name="accessibility_key" msgid="5701989859305675896">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਆਵਾਗੌਣ ਬਟਨ"</string>
+    <string name="accessibility_key" msgid="5701989859305675896">"ਵਿਉਂਂਤੀ ਨੈਵੀਗੇਟ ਬਟਨ"</string>
     <string name="left_keycode" msgid="2010948862498918135">"ਖੱਬਾ ਕੀ-ਕੋਡ"</string>
     <string name="right_keycode" msgid="708447961000848163">"ਸੱਜਾ ਕੀ-ਕੋਡ"</string>
     <string name="left_icon" msgid="3096287125959387541">"ਖੱਬਾ ਪ੍ਰਤੀਕ"</string>
@@ -676,14 +676,14 @@
     <string name="qs_edit" msgid="2232596095725105230">"ਸੰਪਾਦਨ ਕਰੋ"</string>
     <string name="tuner_time" msgid="6572217313285536011">"ਸਮਾਂ"</string>
   <string-array name="clock_options">
-    <item msgid="5965318737560463480">"ਘੰਟੇ, ਮਿੰਟ, ਅਤੇ ਸਕਿੰਟ ਵਿਖਾਓ"</item>
-    <item msgid="1427801730816895300">"ਘੰਟੇ ਅਤੇ ਮਿੰਟ ਵਿਖਾਓ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
-    <item msgid="3830170141562534721">"ਇਸ ਚਿੰਨ੍ਹ ਨੂੰ ਨਾ ਵਿਖਾਓ"</item>
+    <item msgid="5965318737560463480">"ਘੰਟੇ, ਮਿੰਟ, ਅਤੇ ਸਕਿੰਟ  ਦਿਖਾਓ"</item>
+    <item msgid="1427801730816895300">"ਘੰਟੇ ਅਤੇ ਮਿੰਟ ਦਿਖਾਓ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
+    <item msgid="3830170141562534721">"ਇਸ ਪ੍ਰਤੀਕ ਨੂੰ ਨਾ ਦਿਖਾਓ"</item>
   </string-array>
   <string-array name="battery_options">
-    <item msgid="3160236755818672034">"ਹਮੇਸ਼ਾਂ ਪ੍ਰਤੀਸ਼ਤਤਾ ਵਿਖਾਓ"</item>
-    <item msgid="2139628951880142927">"ਚਾਰਜਿੰਗ ਦੌਰਾਨ ਪ੍ਰਤੀਸ਼ਤਤਾ ਵਿਖਾਓ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
-    <item msgid="3327323682209964956">"ਇਸ ਚਿੰਨ੍ਹ ਨੂੰ ਨਾ ਵਿਖਾਓ"</item>
+    <item msgid="3160236755818672034">"ਹਮੇਸ਼ਾਂ ਪ੍ਰਤੀਸ਼ਤਤਾ  ਦਿਖਾਓ"</item>
+    <item msgid="2139628951880142927">"ਚਾਰਜਿੰਗ ਦੌਰਾਨ ਪ੍ਰਤੀਸ਼ਤਤਾ ਦਿਖਾਓ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
+    <item msgid="3327323682209964956">"ਇਸ ਪ੍ਰਤੀਕ ਨੂੰ ਨਾ ਦਿਖਾਓ"</item>
   </string-array>
     <string name="other" msgid="4060683095962566764">"ਹੋਰ"</string>
     <string name="accessibility_divider" msgid="5903423481953635044">"ਸਪਲਿਟ-ਸਕ੍ਰੀਨ ਡਿਵਾਈਡਰ"</string>
@@ -699,7 +699,7 @@
     <string name="accessibility_action_divider_bottom_full" msgid="301433196679548001">"ਹੇਠਾਂ ਪੂਰੀ ਸਕ੍ਰੀਨ"</string>
     <string name="accessibility_qs_edit_tile_label" msgid="8374924053307764245">"ਸਥਿਤੀ <xliff:g id="POSITION">%1$d</xliff:g>, <xliff:g id="TILE_NAME">%2$s</xliff:g>। ਸੰਪਾਦਨ ਲਈ ਦੋ ਵਾਰ ਟੈਪ ਕਰੋ।"</string>
     <string name="accessibility_qs_edit_add_tile_label" msgid="8133209638023882667">"<xliff:g id="TILE_NAME">%1$s</xliff:g>। ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਦੋ ਵਾਰ ਟੈਪ ਕਰੋ।"</string>
-    <string name="accessibility_qs_edit_position_label" msgid="5055306305919289819">"ਸਥਿਤੀ <xliff:g id="POSITION">%1$d</xliff:g>। ਚੁਣਨ ਲਈ ਦੋ ਵਾਰ ਟੈਪ ਕਰੋ।"</string>
+    <string name="accessibility_qs_edit_position_label" msgid="5055306305919289819">"ਸਥਿਤੀ <xliff:g id="POSITION">%1$d</xliff:g>। ਚੁਣਨ ਲਈ ਡਬਲ ਟੈਪ ਕਰੋ।"</string>
     <string name="accessibility_qs_edit_move_tile" msgid="2461819993780159542">"<xliff:g id="TILE_NAME">%1$s</xliff:g> ਨੂੰ ਤਬਦੀਲ ਕਰੋ"</string>
     <string name="accessibility_qs_edit_remove_tile" msgid="7484493384665907197">"<xliff:g id="TILE_NAME">%1$s</xliff:g> ਹਟਾਓ"</string>
     <string name="accessibility_qs_edit_tile_added" msgid="8050200862063548309">"<xliff:g id="TILE_NAME">%1$s</xliff:g> ਨੂੰ <xliff:g id="POSITION">%2$d</xliff:g> ਸਥਿਤੀ \'ਤੇ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ"</string>
@@ -710,7 +710,7 @@
     <string name="dock_forced_resizable" msgid="5914261505436217520">"ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਐਪ ਸਪਲਿਟ-ਸਕ੍ਰੀਨ ਨਾਲ ਕੰਮ ਨਾ ਕਰੇ।"</string>
     <string name="dock_non_resizeble_failed_to_dock_text" msgid="3871617304250207291">"ਐਪ ਸਪਲਿਟ-ਸਕ੍ਰੀਨ ਨੂੰ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੀ।"</string>
     <string name="forced_resizable_secondary_display" msgid="4230857851756391925">"ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਐਪ ਸੈਕੰਡਰੀ ਡਿਸਪਲੇ \'ਤੇ ਕੰਮ ਨਾ ਕਰੇ।"</string>
-    <string name="activity_launch_on_secondary_display_failed_text" msgid="7793821742158306742">"ਐਪ ਸੈਕੰਡਰੀ ਡਿਸਪਲੇਆਂ \'ਤੇ ਲਾਂਚ ਕਰਨ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੀ।"</string>
+    <string name="activity_launch_on_secondary_display_failed_text" msgid="7793821742158306742">"ਐਪ ਸੈਕੰਡਰੀ ਡਿਸਪਲੇਆਂ \'ਤੇ ਲਾਂਚ ਕਰਨ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੀ"</string>
     <string name="accessibility_quick_settings_settings" msgid="6132460890024942157">"ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ।"</string>
     <string name="accessibility_quick_settings_expand" msgid="2375165227880477530">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਨੂੰ ਖੋਲ੍ਹੋ।"</string>
     <string name="accessibility_quick_settings_collapse" msgid="1792625797142648105">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਨੂੰ ਬੰਦ ਕਰੋ।"</string>
@@ -721,28 +721,28 @@
     <string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ।"</string>
     <string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"ਸੈਟਿੰਗਾਂ ਦੇ ਕ੍ਰਮ ਦਾ ਸੰਪਾਦਨ ਕਰੋ।"</string>
     <string name="accessibility_quick_settings_page" msgid="5032979051755200721">"<xliff:g id="ID_2">%2$d</xliff:g> ਦਾ <xliff:g id="ID_1">%1$d</xliff:g> ਪੰਨਾ"</string>
-    <string name="tuner_lock_screen" msgid="5755818559638850294">"ਲੌਕ ਸਕ੍ਰੀਨ"</string>
+    <string name="tuner_lock_screen" msgid="5755818559638850294">" ਲਾਕ  ਸਕ੍ਰੀਨ"</string>
     <string name="pip_phone_expand" msgid="5889780005575693909">"ਵਿਸਤਾਰ ਕਰੋ"</string>
     <string name="pip_phone_minimize" msgid="1079119422589131792">"ਛੋਟਾ ਕਰੋ"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"ਬੰਦ ਕਰੋ"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"ਖਾਰਜ ਕਰਨ ਲਈ ਹੇਠਾਂ ਘਸੀਟੋ"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"ਤਸਵੀਰ-ਵਿੱਚ-ਤਸਵੀਰ ਮੀਨੂ"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"ਮੀਨੂ"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ਤਸਵੀਰ-ਵਿੱਚ-ਤਸਵੀਰ \'ਚ ਹੈ"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"ਜੇ ਤੁਸੀਂ ਨਹੀਂ ਚਾਹੁੰਦੇ ਕਿ <xliff:g id="NAME">%s</xliff:g> ਐਪ ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦੀ ਵਰਤੋਂ ਕਰੇ, ਤਾਂ ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹਣ ਲਈ ਟੈਪ ਕਰੋ ਅਤੇ ਇਸਨੂੰ ਬੰਦ ਕਰੋ।"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"ਜੇਕਰ ਤੁਸੀਂ ਨਹੀਂ ਚਾਹੁੰਦੇ ਕਿ <xliff:g id="NAME">%s</xliff:g> ਐਪ ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦੀ ਵਰਤੋਂ ਕਰੇ, ਤਾਂ ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹਣ ਲਈ ਟੈਪ ਕਰੋ ਅਤੇ ਇਸਨੂੰ ਬੰਦ ਕਰੋ।"</string>
     <string name="pip_play" msgid="1417176722760265888">"ਚਲਾਓ"</string>
     <string name="pip_pause" msgid="8881063404466476571">"ਵਿਰਾਮ ਦਿਓ"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"ਅਗਲੇ \'ਤੇ ਜਾਓ"</string>
     <string name="pip_skip_to_prev" msgid="1955311326688637914">"ਪਿਛਲੇ \'ਤੇ ਜਾਓ"</string>
     <string name="thermal_shutdown_title" msgid="4458304833443861111">"ਗਰਮ ਹੋਣ ਕਾਰਨ ਫ਼ੋਨ ਬੰਦ ਹੋ ਗਿਆ"</string>
     <string name="thermal_shutdown_message" msgid="9006456746902370523">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਹੁਣ ਸਹੀ ਚੱਲ ਰਿਹਾ ਹੈ"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਬਹੁਤ ਗਰਮ ਸੀ, ਇਸ ਲਈ ਇਹ ਠੰਡਾ ਹੋਣ ਵਾਸਤੇ ਬੰਦ ਹੋ ਗਿਆ ਸੀ। ਤੁਹਾਡਾ ਫ਼ੋਨ ਹੁਣ ਸਹੀ ਚੱਲ ਰਿਹਾ ਹੈ।\n\nਤੁਹਾਡਾ ਫ਼ੋਨ ਬਹੁਤ ਗਰਮ ਹੋ ਸਕਦਾ ਹੈ ਜੇ:\n	• ਤੁਸੀਂ ਸਰੋਤਾਂ ਦੀ ਵੱਧ ਵਰਤੋਂ ਵਾਲੀਆਂ ਐਪਾਂ (ਜਿਵੇਂ ਗੇਮਿੰਗ, ਵੀਡੀਓ, ਜਾਂ ਆਵਾਗੌਣ ਐਪਾਂ) ਵਰਤਦੇ ਹੋ \n	• ਵੱਡੀਆਂ ਫ਼ਾਈਲਾਂ ਡਾਊਨਲੋਡ ਜਾਂ ਅੱਪਲੋਡ ਕਰਦੇ ਹੋ\n	• ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਉੱਚ ਤਾਪਮਾਨਾਂ ਵਿੱਚ ਵਰਤਦੇ ਹੋ"</string>
+    <string name="thermal_shutdown_dialog_message" msgid="566347880005304139">\n"ਤੁਹਾਡਾ ਫ਼ੋਨ ਬਹੁਤ ਗਰਮ ਸੀ, ਇਸ ਲਈ ਇਹ ਠੰਡਾ ਹੋਣ ਵਾਸਤੇ ਬੰਦ ਹੋ ਗਿਆ ਸੀ। ਤੁਹਾਡਾ ਫ਼ੋਨ ਹੁਣ ਸਹੀ ਚੱਲ ਰਿਹਾ ਹੈ।\n\nਤੁਹਾਡਾ ਫ਼ੋਨ ਬਹੁਤ ਗਰਮ ਹੋ ਸਕਦਾ ਹੈ ਜੇ:\n	• ਤੁਸੀਂ ਸਰੋਤਾਂ ਦੀ ਵੱਧ ਵਰਤੋਂ ਵਾਲੀਆਂ ਐਪਾਂ (ਜਿਵੇਂ ਗੇਮਿੰਗ, ਵੀਡੀਓ, ਜਾਂ ਦਿਸ਼ਾ-ਨਿਰਦੇਸ਼ ਐਪਾਂ) ਵਰਤਦੇ ਹੋ 	• ਵੱਡੀਆਂ ਫ਼ਾਈਲਾਂ ਡਾਊਨਲੋਡ ਜਾਂ ਅੱਪਲੋਡ ਕਰਦੇ ਹੋ\n	• ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਉੱਚ ਤਾਪਮਾਨਾਂ ਵਿੱਚ ਵਰਤਦੇ ਹੋ"</string>
     <string name="high_temp_title" msgid="4589508026407318374">"ਫ਼ੋਨ ਗਰਮ ਹੋ ਰਿਹਾ ਹੈ"</string>
     <string name="high_temp_notif_message" msgid="5642466103153429279">"ਫ਼ੋਨ ਦੇ ਠੰਡਾ ਹੋਣ ਦੇ ਦੌਰਾਨ ਕੁਝ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਸੀਮਿਤ ਹੁੰਦੀਆਂ ਹਨ"</string>
     <string name="high_temp_dialog_message" msgid="6840700639374113553">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਸਵੈਚਲਿਤ ਰੂਪ ਵਿੱਚ ਠੰਡਾ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੇਗਾ। ਤੁਸੀਂ ਹਾਲੇ ਵੀ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਵਰਤ ਸਕਦੇ ਹੋ, ਪਰੰਤੂ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਇਹ ਵਧੇਰੇ ਹੌਲੀ ਚੱਲੇ।\n\nਇੱਕ ਵਾਰ ਠੰਡਾ ਹੋਣ ਤੋਂ ਬਾਅਦ ਤੁਹਾਡਾ ਫ਼ੋਨ ਸਧਾਰਨ ਤੌਰ \'ਤੇ ਚੱਲੇਗਾ।"</string>
     <string name="lockscreen_shortcut_left" msgid="2182769107618938629">"ਖੱਬਾ ਸ਼ਾਰਟਕੱਟ"</string>
     <string name="lockscreen_shortcut_right" msgid="3328683699505226536">"ਸੱਜਾ ਸ਼ਾਰਟਕੱਟ"</string>
-    <string name="lockscreen_unlock_left" msgid="2043092136246951985">"ਖੱਬੇ ਸ਼ਾਰਟਕੱਟ ਨਾਲ ਵੀ ਅਨਲੌਕ ਹੁੰਦੀ ਹੈ"</string>
-    <string name="lockscreen_unlock_right" msgid="1529992940510318775">"ਸੱਜੇ ਸ਼ਾਰਟਕੱਟ ਨਾਲ ਵੀ ਅਨਲੌਕ ਹੁੰਦੀ ਹੈ"</string>
+    <string name="lockscreen_unlock_left" msgid="2043092136246951985">"ਖੱਬੇ ਸ਼ਾਰਟਕੱਟ ਨਾਲ ਵੀ ਅਣਲਾਕ ਹੁੰਦੀ ਹੈ"</string>
+    <string name="lockscreen_unlock_right" msgid="1529992940510318775">"ਸੱਜੇ ਸ਼ਾਰਟਕੱਟ ਨਾਲ ਵੀ ਅਣਲਾਕ ਹੁੰਦੀ ਹੈ"</string>
     <string name="lockscreen_none" msgid="4783896034844841821">"ਕੋਈ ਨਹੀਂ"</string>
     <string name="tuner_launch_app" msgid="1527264114781925348">"<xliff:g id="APP">%1$s</xliff:g> ਲਾਂਚ ਕਰੋ"</string>
     <string name="tuner_other_apps" msgid="4726596850501162493">"ਹੋਰ ਐਪਾਂ"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"ਮੀਨੂ"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> ਐਪ"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"ਸੁਚੇਤਨਾਵਾਂ"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"ਬੈਟਰੀ"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"ਸਕ੍ਰੀਨਸ਼ਾਟ"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"ਆਮ ਸੁਨੇਹੇ"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"ਸਟੋਰੇਜ"</string>
@@ -761,8 +762,8 @@
     <string name="instant_apps_message" msgid="8116608994995104836">"ਤਤਕਾਲ ਐਪਾਂ ਨੂੰ ਸਥਾਪਨਾ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ।"</string>
     <string name="app_info" msgid="6856026610594615344">"ਐਪ ਜਾਣਕਾਰੀ"</string>
     <string name="go_to_web" msgid="1106022723459948514">"ਵੈੱਬ \'ਤੇ ਜਾਓ"</string>
-    <string name="mobile_data" msgid="7094582042819250762">"ਮੋਬਾਈਲ ਡੈਟਾ"</string>
-    <string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi ਬੰਦ ਹੈ"</string>
+    <string name="mobile_data" msgid="7094582042819250762">"ਮੋਬਾਈਲ ਡਾਟਾ"</string>
+    <string name="wifi_is_off" msgid="1838559392210456893">"ਵਾਈ-ਫਾਈ ਬੰਦ ਹੈ"</string>
     <string name="bt_is_off" msgid="2640685272289706392">"ਬਲੂਟੁੱਥ ਬੰਦ ਹੈ"</string>
     <string name="dnd_is_off" msgid="6167780215212497572">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਬੰਦ ਹੈ"</string>
     <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"ਸਵੈਚਲਿਤ ਨਿਯਮ (<xliff:g id="ID_1">%s</xliff:g>) ਦੁਆਰਾ \'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਚਾਲੂ ਕੀਤਾ ਗਿਆ ਸੀ।"</string>
@@ -773,5 +774,6 @@
     <string name="qs_dnd_replace" msgid="8019520786644276623">"ਬਦਲੋ"</string>
     <string name="running_foreground_services_title" msgid="381024150898615683">"ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲ ਰਹੀਆਂ ਐਪਾਂ"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"ਬੈਟਰੀ ਅਤੇ ਡਾਟਾ ਵਰਤੋਂ ਸਬੰਧੀ ਵੇਰਵਿਆਂ ਲਈ ਟੈਪ ਕਰੋ"</string>
-    <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ਮੋਬਾਈਲ ਡੈਟਾ ਬੰਦ ਕਰੀਏ?"</string>
+    <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ਮੋਬਾਈਲ ਡਾਟਾ ਬੰਦ ਕਰਨਾ ਹੈ?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"ਕਿਸੇ ਐਪ ਵੱਲੋਂ ਇਜਾਜ਼ਤ ਬੇਨਤੀ ਨੂੰ ਢਕੇ ਜਾਣ ਕਾਰਨ ਸੈਟਿੰਗਾਂ ਤੁਹਾਡੇ ਜਵਾਬ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ।"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 93ee86a..fb96c35 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -66,7 +66,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Odcisk cyfrowy klucza RSA komputera to:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Zawsze zezwalaj z tego komputera"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Debugowanie USB jest niedozwolone"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Użytkownik obecnie zalogowany na tym urządzeniu nie może włączyć debugowania USB. Aby użyć tej funkcji, przełącz się na użytkownika będącego administratorem."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Użytkownik obecnie zalogowany na tym urządzeniu nie może włączyć debugowania USB. Aby użyć tej funkcji, przełącz się na użytkownika głównego."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Powiększ, aby wypełnić ekran"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Rozciągnij, aby wypełnić ekran"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Zapisywanie zrzutu ekranu..."</string>
@@ -244,7 +244,7 @@
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Transmisja danych 4G została wstrzymana"</string>
     <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobilna transmisja danych jest wstrzymana"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Transmisja danych została wstrzymana"</string>
-    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Osiągnięto ustawiony limit danych. Nie korzystasz już z komórkowej transmisji danych.\n\nJeśli włączysz ją ponownie, może zostać naliczona opłata za transmisję danych."</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Osiągnięto ustawiony limit danych. Nie korzystasz już z mobilnej transmisji danych.\n\nJeśli włączysz ją ponownie, może zostać naliczona opłata za użycie danych."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Wznów"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Brak internetu"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: połączono"</string>
@@ -357,10 +357,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Szukaj"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Przesuń w górę: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Przesuń w lewo: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Nie będą Cię niepokoić żadne dźwięki ani wibracje z wyjątkiem alarmów, przypomnień, wydarzeń i połączeń od wybranych osób. Będziesz słyszeć wszystkie odtwarzane treści, takie jak muzyka, filmy czy gry."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Nie będą Cię niepokoić żadne dźwięki ani wibracje z wyjątkiem alarmów. Będziesz słyszeć wszystkie odtwarzane treści, takie jak muzyka, filmy czy gry."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Nie będą Cię niepokoić żadne dźwięki ani wibracje z wyjątkiem alarmów, przypomnień, wydarzeń i połączeń od wybranych osób. Będziesz słyszeć wszystkie odtwarzane treści, takie jak muzyka, filmy czy gry."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Nie będą Cię niepokoić żadne dźwięki ani wibracje z wyjątkiem alarmów. Będziesz słyszeć wszystkie odtwarzane treści, takie jak muzyka, filmy czy gry."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Dostosuj"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"To zablokuje WSZYSTKIE dźwięki i wibracje, w tym alarmy, muzykę, filmy i gry. Nadal będzie można wykonywać połączenia."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"To zablokuje WSZYSTKIE dźwięki i wibracje, w tym alarmy, muzykę, filmy i gry. Nadal będzie można wykonywać połączenia."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"To zablokuje WSZYSTKIE dźwięki i wibracje – w tym alarmy, muzykę, filmy i gry."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Poniżej widać mniej pilne powiadomienia"</string>
@@ -460,7 +460,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Więcej informacji"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Łączysz się z aplikacją <xliff:g id="VPN_APP">%1$s</xliff:g>, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">"  "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otwórz ustawienia VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Otwórz ustawienia VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Otwórz zaufane dane logowania"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Administrator włączył rejestrowanie sieciowe, które pozwala monitorować ruch na Twoim urządzeniu.\n\nAby dowiedzieć się więcej, skontaktuj się z administratorem."</string>
@@ -560,10 +560,10 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Ta aplikacja nie ma kategorii powiadomień"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Powiadomień z tej aplikacji nie można wyłączyć"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="few">1 z <xliff:g id="NUMBER_1">%d</xliff:g> kategorii powiadomień z tej aplikacji</item>
-      <item quantity="many">1 z <xliff:g id="NUMBER_1">%d</xliff:g> kategorii powiadomień z tej aplikacji</item>
-      <item quantity="other">1 z <xliff:g id="NUMBER_1">%d</xliff:g> kategorii powiadomień z tej aplikacji</item>
-      <item quantity="one">1 z <xliff:g id="NUMBER_0">%d</xliff:g> kategorii powiadomień z tej aplikacji</item>
+      <item quantity="few">1 z <xliff:g id="NUMBER_1">%s</xliff:g> kategorii powiadomień z tej aplikacji</item>
+      <item quantity="many">1 z <xliff:g id="NUMBER_1">%s</xliff:g> kategorii powiadomień z tej aplikacji</item>
+      <item quantity="other">1 z <xliff:g id="NUMBER_1">%s</xliff:g> kategorii powiadomień z tej aplikacji</item>
+      <item quantity="one">1 z <xliff:g id="NUMBER_0">%s</xliff:g> kategorii powiadomień z tej aplikacji</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -597,8 +597,8 @@
       <item quantity="one">]%d minuta</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Wykorzystanie baterii"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Oszczędzanie baterii nie jest dostępne podczas ładowania"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Oszczędzanie baterii"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Oszczędzanie baterii nie jest dostępne podczas ładowania"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Oszczędzanie baterii"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Zmniejsza wydajność i ogranicza dane w tle"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Przycisk <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -738,9 +738,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimalizuj"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Zamknij"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Przeciągnij w dół, by zamknąć"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menu funkcji Obraz w obrazie"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"Aplikacja <xliff:g id="NAME">%s</xliff:g> działa w trybie obraz w obrazie"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Jeśli nie chcesz, by aplikacja <xliff:g id="NAME">%s</xliff:g> korzystała z tej funkcji, otwórz ustawienia i ją wyłącz."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Jeśli nie chcesz, by aplikacja <xliff:g id="NAME">%s</xliff:g> korzystała z tej funkcji, otwórz ustawienia i wyłącz ją."</string>
     <string name="pip_play" msgid="1417176722760265888">"Odtwórz"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Wstrzymaj"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Dalej"</string>
@@ -766,6 +766,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplikacja <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alerty"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Zrzuty ekranu"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Wiadomości"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Pamięć wewnętrzna"</string>
@@ -784,6 +785,7 @@
     <string name="qs_dnd_keep" msgid="1825009164681928736">"Zachowaj"</string>
     <string name="qs_dnd_replace" msgid="8019520786644276623">"Zastąp"</string>
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacje działające w tle"</string>
-    <string name="running_foreground_services_msg" msgid="6326247670075574355">"Kliknij, by wyświetlić szczegóły wykorzystania baterii i transmisji danych"</string>
+    <string name="running_foreground_services_msg" msgid="6326247670075574355">"Kliknij, by wyświetlić szczegóły wykorzystania baterii i użycia danych"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Wyłączyć mobilną transmisję danych?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Aplikacja Ustawienia nie może zweryfikować Twojej odpowiedzi, ponieważ inna aplikacja zasłania prośbę o udzielenie uprawnień."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 0614849..2469751 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -22,7 +22,7 @@
     <string name="app_label" msgid="7164937344850004466">"Interf sist"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Limpar"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remover da lista"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informações do app"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Inform. do app"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Suas telas recentes aparecem aqui"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dispensar apps recentes"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"A impressão digital da chave RSA deste computador é:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Sempre permitir a partir deste computador"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Depuração USB não permitida"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"O usuário conectado a este dispositivo no momento não pode ativar a depuração USB. Para usar esse recurso, alterne para o usuário administrador."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"O usuário conectado a este dispositivo não pode ativar a depuração USB. Para usar esse recurso, mude para o usuário principal \"NAME\"."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom p/ preencher a tela"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Ampliar p/ preencher tela"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Salvando captura de tela..."</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para cima."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para a esquerda."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Você não será perturbado por sons e vibrações, exceto alarmes, lembretes, eventos e chamadas de pessoas especificadas. No entanto, você ouvirá tudo o que decidir reproduzir, como músicas, vídeos e jogos."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Você não será perturbado por sons e vibrações, exceto alarmes. No entanto, você ouvirá tudo o que decidir reproduzir, como músicas, vídeos e jogos."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Você não será perturbado por sons e vibrações, exceto alarmes, lembretes, eventos e chamadas de pessoas especificadas. No entanto, você ouvirá tudo o que decidir reproduzir, como músicas, vídeos e jogos."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Você não será perturbado por sons e vibrações, exceto alarmes. No entanto, você ouvirá tudo o que decidir reproduzir, como músicas, vídeos e jogos."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizar"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Isso bloqueia TODOS os sons e vibrações, incluindo alarmes, músicas, vídeos e jogos. Você ainda poderá fazer chamadas telefônicas."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Isso bloqueia TODOS os sons e vibrações, incluindo alarmes, músicas, vídeos e jogos. Você ainda poderá fazer chamadas telefônicas."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Isso bloqueia TODOS os sons e vibrações, incluindo alarmes, músicas, vídeos e jogos."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificações menos urgentes abaixo"</string>
@@ -392,7 +392,7 @@
     <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"Todos os apps e dados nesta sessão serão excluídos."</string>
     <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"Remover"</string>
     <string name="guest_wipe_session_title" msgid="6419439912885956132">"Bem-vindo, convidado."</string>
-    <string name="guest_wipe_session_message" msgid="8476238178270112811">"Deseja continuar a sessão?"</string>
+    <string name="guest_wipe_session_message" msgid="8476238178270112811">"Quer continuar a sessão?"</string>
     <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"Recomeçar"</string>
     <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"Sim, continuar"</string>
     <string name="guest_notification_title" msgid="1585278533840603063">"Usuário convidado"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saber mais"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Você está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir configurações de VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Abrir configurações de VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Abrir credenciais confiáveis"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Seu administrador ativou o registro de rede, que monitora o tráfego no seu dispositivo.\n\nPara ver mais informações, entre em contato com o administrador."</string>
@@ -478,7 +478,7 @@
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Não, obrigado"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
-    <string name="volume_zen_end_now" msgid="6930243045593601084">"Desligar agora"</string>
+    <string name="volume_zen_end_now" msgid="6930243045593601084">"Desativar agora"</string>
     <string name="accessibility_volume_expand" msgid="5946812790999244205">"Expandir"</string>
     <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Recolher"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"A tela está fixada"</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Este app não tem categorias de notificação"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Notificações deste app não podem ser desativadas"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 de <xliff:g id="NUMBER_1">%d</xliff:g> categoria de notificação deste app</item>
-      <item quantity="other">1 de <xliff:g id="NUMBER_1">%d</xliff:g> categorias de notificação deste app</item>
+      <item quantity="one">1 de <xliff:g id="NUMBER_1">%s</xliff:g> categoria de notificação deste app</item>
+      <item quantity="other">1 de <xliff:g id="NUMBER_1">%s</xliff:g> categorias de notificação deste app</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="other">%d minutos</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Uso da bateria"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"A Economia de bateria não fica disponível durante o carregamento"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Economia de bateria"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"O recurso \"Economia de bateria\" não fica disponível durante o carregamento"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Economia de bateria"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduz o desempenho e os dados em segundo plano"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Botão <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizar"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Fechar"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Arraste para baixo para dispensar"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menu Picture-in-picture"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> está em picture-in-picture"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Se você não deseja que o <xliff:g id="NAME">%s</xliff:g> use este recurso, toque para abrir as configurações e desativá-lo."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Se você não deseja que o app <xliff:g id="NAME">%s</xliff:g> use este recurso, toque para abrir as configurações e desativá-lo."</string>
     <string name="pip_play" msgid="1417176722760265888">"Reproduzir"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pausar"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Pular para a próxima"</string>
@@ -756,6 +756,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"App <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alertas"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Capturas de tela"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Mensagens gerais"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Armazenamento"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Apps sendo executados em segundo plano"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tocar para ver detalhes sobre a bateria e o uso de dados"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Desativar os dados móveis?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Como um app está ocultando uma solicitação de permissão, as configurações não podem verificar sua resposta."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 65bed3c..65648d5 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -26,8 +26,8 @@
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Os ecrãs recentes aparecem aqui"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignorar aplicações recentes"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
-      <item quantity="one">1 ecrã na Vista geral</item>
       <item quantity="other">%d ecrãs na Vista geral</item>
+      <item quantity="one">1 ecrã na Vista geral</item>
     </plurals>
     <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Sem notificações"</string>
     <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Em curso"</string>
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"A impressão digital da chave RSA do computador é:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Permitir sempre a partir deste computador"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Depuração USB não permitida"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"O utilizador com sessão iniciada atualmente neste dispositivo não pode ativar a depuração USB. Para utilizar esta funcionalidade, mude para um utilizador Administrador."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"O utilizador com sessão iniciada atualmente neste dispositivo não pode ativar a depuração USB. Para utilizar esta funcionalidade, mude para o utilizador principal."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom para preencher o ecrã"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Esticar p. caber em ec. int."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"A guardar captura de ecrã..."</string>
@@ -252,8 +252,8 @@
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Limpar todas as notificações."</string>
     <string name="notification_group_overflow_indicator" msgid="1863231301642314183">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <plurals name="notification_group_overflow_description" formatted="false" msgid="4579313201268495404">
-      <item quantity="one">Mais <xliff:g id="NUMBER_0">%s</xliff:g> notificação no grupo.</item>
       <item quantity="other">Mais <xliff:g id="NUMBER_1">%s</xliff:g> notificações no grupo.</item>
+      <item quantity="one">Mais <xliff:g id="NUMBER_0">%s</xliff:g> notificação no grupo.</item>
     </plurals>
     <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"Definições de notificação"</string>
     <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"Definições do <xliff:g id="APP_NAME">%s</xliff:g>"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Deslize para cima para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Deslize para a esquerda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Não é incomodado por sons e vibrações, exceto de alarmes, lembretes, eventos e autores de chamadas que especificar. Continua a ouvir tudo o que optar por reproduzir, incluindo música, vídeos e jogos."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Não é incomodado por sons e vibrações, exceto de alarmes. Continua a ouvir tudo o que optar por reproduzir, incluindo música, vídeos e jogos."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Não é incomodado por sons e vibrações, exceto de alarmes, lembretes, eventos e autores de chamadas que especificar. Continua a ouvir tudo o que optar por reproduzir, incluindo música, vídeos e jogos."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Não é incomodado por sons e vibrações, exceto de alarmes. Continua a ouvir tudo o que optar por reproduzir, incluindo música, vídeos e jogos."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizar"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Esta ação bloqueia TODOS os sons e as vibrações, incluindo de alarmes, de músicas, de vídeos e de jogos. Continua a ser possível telefonar."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Esta ação bloqueia TODOS os sons e as vibrações, incluindo de alarmes, música, vídeos e jogos. Continua a poder telefonar."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Esta ação bloqueia TODOS os sons e as vibrações, incluindo de alarmes, de músicas, de vídeos e de jogos."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificações menos urgentes abaixo"</string>
@@ -439,12 +439,12 @@
     <string name="disable_vpn" msgid="4435534311510272506">"Desativar a VPN"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"Desligar VPN"</string>
     <string name="monitoring_button_view_policies" msgid="100913612638514424">"Ver Políticas"</string>
-    <string name="monitoring_description_named_management" msgid="5281789135578986303">"O dispositivo é gerido pela <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nO administrador pode monitorizar e gerir definições, acesso empresarial, aplicações, dados associados ao dispositivo e informações de localização do dispositivo.\n\nContacte o administrador para obter mais informações."</string>
-    <string name="monitoring_description_management" msgid="4573721970278370790">"O dispositivo é gerido pela sua entidade.\n\nO administrador pode monitorizar e gerir definições, acesso empresarial, aplicações, dados associados ao dispositivo e informações de localização do dispositivo.\n\nContacte o administrador para obter mais informações."</string>
+    <string name="monitoring_description_named_management" msgid="5281789135578986303">"O dispositivo é gerido pela <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nO gestor pode monitorizar e gerir definições, acesso empresarial, aplicações, dados associados ao dispositivo e informações de localização do dispositivo.\n\nContacte o gestor para obter mais informações."</string>
+    <string name="monitoring_description_management" msgid="4573721970278370790">"O dispositivo é gerido pela sua entidade.\n\nO gestor pode monitorizar e gerir definições, acesso empresarial, aplicações, dados associados ao dispositivo e informações de localização do dispositivo.\n\nContacte o gestor para obter mais informações."</string>
     <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"A sua entidade instalou uma autoridade de certificação neste dispositivo. O tráfego da sua rede segura pode ser monitorizado ou alterado."</string>
     <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"A sua entidade instalou uma autoridade de certificação no seu perfil de trabalho. O tráfego da sua rede segura pode ser monitorizado ou alterado."</string>
     <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"Está instalada uma autoridade de certificação neste dispositivo. O tráfego da sua rede segura pode ser monitorizado ou alterado."</string>
-    <string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"O administrador ativou os registos de rede, que monitorizam o tráfego no seu dispositivo."</string>
+    <string name="monitoring_description_management_network_logging" msgid="7184005419733060736">"O gestor ativou os registos de rede, que monitorizam o tráfego no seu dispositivo."</string>
     <string name="monitoring_description_named_vpn" msgid="7403457334088909254">"Está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string>
     <string name="monitoring_description_two_named_vpns" msgid="4198511413729213802">"Está ligado às redes <xliff:g id="VPN_APP_0">%1$s</xliff:g> e <xliff:g id="VPN_APP_1">%2$s</xliff:g>, que podem monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="1427905889862420559">"O seu perfil de trabalho está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string>
@@ -456,17 +456,17 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saiba mais"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir as definições de VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Abrir as definições de VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Abrir credenciais fidedignas"</string>
-    <string name="monitoring_description_network_logging" msgid="7223505523384076027">"O seu administrador ativou os registos de rede, que monitorizam o tráfego no seu dispositivo.\n\nPara obter mais informações, contacte o administrador."</string>
+    <string name="monitoring_description_network_logging" msgid="7223505523384076027">"O seu gestor ativou os registos de rede, que monitorizam o tráfego no seu dispositivo.\n\nPara obter mais informações, contacte o gestor."</string>
     <string name="monitoring_description_vpn" msgid="4445150119515393526">"Concedeu autorização a uma aplicação para configurar uma ligação VPN.\n\nEsta aplicação pode monitorizar a atividade do dispositivo e da rede, incluindo emails, aplicações e Sites."</string>
-    <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador tem a capacidade de monitorizar a sua atividade da rede, incluindo emails, aplicações e Sites.\n\nPara obter mais informações, contacte o administrador.\n\nAlém disso, está ligado a uma VPN, que pode monitorizar a sua atividade da rede."</string>
+    <string name="monitoring_description_vpn_profile_owned" msgid="2958019119161161530">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu gestor tem a capacidade de monitorizar a sua atividade da rede, incluindo emails, aplicações e Sites.\n\nPara obter mais informações, contacte o gestor.\n\nAlém disso, está ligado a uma VPN, que pode monitorizar a sua atividade da rede."</string>
     <string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
     <string name="monitoring_description_app" msgid="1828472472674709532">"Está associado à aplicação <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string>
     <string name="monitoring_description_app_personal" msgid="484599052118316268">"Está ligado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede pessoal, incluindo emails, aplicações e Sites."</string>
     <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Está ligado ao <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede pessoal, incluindo emails, aplicações e Sites."</string>
-    <string name="monitoring_description_app_work" msgid="4612997849787922906">"O seu perfil de trabalho é gerido pela <xliff:g id="ORGANIZATION">%1$s</xliff:g>. O perfil está associado à aplicação <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Sites.\n\nContacte o administrador para obter mais informações."</string>
+    <string name="monitoring_description_app_work" msgid="4612997849787922906">"O seu perfil de trabalho é gerido pela <xliff:g id="ORGANIZATION">%1$s</xliff:g>. O perfil está associado à aplicação <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Sites.\n\nContacte o gestor para obter mais informações."</string>
     <string name="monitoring_description_app_personal_work" msgid="5664165460056859391">"O seu perfil de trabalho é gerido pela <xliff:g id="ORGANIZATION">%1$s</xliff:g>. O perfil está associado à aplicação <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Sites.\n\nTambém está associado à aplicação <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorizar a atividade da rede pessoal."</string>
     <string name="keyguard_indication_trust_granted" msgid="4985003749105182372">"Desbloqueado para <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="keyguard_indication_trust_managed" msgid="8319646760022357585">"<xliff:g id="TRUST_AGENT">%1$s</xliff:g> em execução"</string>
@@ -556,13 +556,13 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Esta aplicação não tem categorias de notificação"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Não é possível desativar as notificações desta aplicação"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 de <xliff:g id="NUMBER_0">%d</xliff:g> categoria de notificação desta aplicação</item>
-      <item quantity="other">1 de <xliff:g id="NUMBER_1">%d</xliff:g> categorias de notificação desta aplicação</item>
+      <item quantity="other">1 de <xliff:g id="NUMBER_1">%s</xliff:g> categorias de notificação desta aplicação</item>
+      <item quantity="one">1 de <xliff:g id="NUMBER_0">%s</xliff:g> categoria de notificação desta aplicação</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
-      <item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> e mais <xliff:g id="NUMBER_2">%3$d</xliff:g></item>
       <item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> e mais <xliff:g id="NUMBER_5">%3$d</xliff:g></item>
+      <item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> e mais <xliff:g id="NUMBER_2">%3$d</xliff:g></item>
     </plurals>
     <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Controlos de notificações da aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> abertos"</string>
     <string name="notification_channel_controls_closed_accessibility" msgid="7521619812603693144">"Controlos de notificações da aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> fechados"</string>
@@ -577,16 +577,16 @@
     <string name="snooze_undo" msgid="6074877317002985129">"ANULAR"</string>
     <string name="snoozed_for_time" msgid="2390718332980204462">"Suspensa por <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
     <plurals name="snoozeHourOptions" formatted="false" msgid="2124335842674413030">
-      <item quantity="one">%d hora</item>
       <item quantity="other">%d horas</item>
+      <item quantity="one">%d hora</item>
     </plurals>
     <plurals name="snoozeMinuteOptions" formatted="false" msgid="4127251700591510196">
-      <item quantity="one">%d minuto</item>
       <item quantity="other">%d minutos</item>
+      <item quantity="one">%d minuto</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Utiliz. da bateria"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Poupança de bateria não disponível durante o carregamento"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Poupança de bateria"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Poupança de bateria não disponível durante o carregamento"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Poupança de bateria"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduz o desempenho e os dados de segundo plano"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Botão <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Início"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizar"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Fechar"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Arrastar para baixo para ignorar"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menu de ecrã no ecrã"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"A aplicação <xliff:g id="NAME">%s</xliff:g> está no modo de ecrã no ecrã"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Se não pretende que a aplicação <xliff:g id="NAME">%s</xliff:g> utilize esta funcionalidade, toque para abrir as definições e desative-a."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Se não pretende que a aplicação <xliff:g id="NAME">%s</xliff:g> utilize esta funcionalidade, toque para abrir as definições e desative-a."</string>
     <string name="pip_play" msgid="1417176722760265888">"Reproduzir"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Colocar em pausa"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Mudar para o seguinte"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplicação <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alertas"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Capturas de ecrã"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Mensagens gerais"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Armazenamento"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplicações em execução em segundo plano"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Toque para obter detalhes acerca da utilização da bateria e dos dados"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Pretende desativar os dados móveis?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Uma vez que uma aplicação está a ocultar um pedido de autorização, as Definições não conseguem validar a sua resposta."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 0614849..2469751 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -22,7 +22,7 @@
     <string name="app_label" msgid="7164937344850004466">"Interf sist"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Limpar"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remover da lista"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informações do app"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Inform. do app"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Suas telas recentes aparecem aqui"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dispensar apps recentes"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"A impressão digital da chave RSA deste computador é:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Sempre permitir a partir deste computador"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Depuração USB não permitida"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"O usuário conectado a este dispositivo no momento não pode ativar a depuração USB. Para usar esse recurso, alterne para o usuário administrador."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"O usuário conectado a este dispositivo não pode ativar a depuração USB. Para usar esse recurso, mude para o usuário principal \"NAME\"."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom p/ preencher a tela"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Ampliar p/ preencher tela"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Salvando captura de tela..."</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para cima."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para a esquerda."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Você não será perturbado por sons e vibrações, exceto alarmes, lembretes, eventos e chamadas de pessoas especificadas. No entanto, você ouvirá tudo o que decidir reproduzir, como músicas, vídeos e jogos."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Você não será perturbado por sons e vibrações, exceto alarmes. No entanto, você ouvirá tudo o que decidir reproduzir, como músicas, vídeos e jogos."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Você não será perturbado por sons e vibrações, exceto alarmes, lembretes, eventos e chamadas de pessoas especificadas. No entanto, você ouvirá tudo o que decidir reproduzir, como músicas, vídeos e jogos."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Você não será perturbado por sons e vibrações, exceto alarmes. No entanto, você ouvirá tudo o que decidir reproduzir, como músicas, vídeos e jogos."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizar"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Isso bloqueia TODOS os sons e vibrações, incluindo alarmes, músicas, vídeos e jogos. Você ainda poderá fazer chamadas telefônicas."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Isso bloqueia TODOS os sons e vibrações, incluindo alarmes, músicas, vídeos e jogos. Você ainda poderá fazer chamadas telefônicas."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Isso bloqueia TODOS os sons e vibrações, incluindo alarmes, músicas, vídeos e jogos."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificações menos urgentes abaixo"</string>
@@ -392,7 +392,7 @@
     <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"Todos os apps e dados nesta sessão serão excluídos."</string>
     <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"Remover"</string>
     <string name="guest_wipe_session_title" msgid="6419439912885956132">"Bem-vindo, convidado."</string>
-    <string name="guest_wipe_session_message" msgid="8476238178270112811">"Deseja continuar a sessão?"</string>
+    <string name="guest_wipe_session_message" msgid="8476238178270112811">"Quer continuar a sessão?"</string>
     <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"Recomeçar"</string>
     <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"Sim, continuar"</string>
     <string name="guest_notification_title" msgid="1585278533840603063">"Usuário convidado"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saber mais"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Você está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir configurações de VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Abrir configurações de VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Abrir credenciais confiáveis"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Seu administrador ativou o registro de rede, que monitora o tráfego no seu dispositivo.\n\nPara ver mais informações, entre em contato com o administrador."</string>
@@ -478,7 +478,7 @@
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Não, obrigado"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
-    <string name="volume_zen_end_now" msgid="6930243045593601084">"Desligar agora"</string>
+    <string name="volume_zen_end_now" msgid="6930243045593601084">"Desativar agora"</string>
     <string name="accessibility_volume_expand" msgid="5946812790999244205">"Expandir"</string>
     <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Recolher"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"A tela está fixada"</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Este app não tem categorias de notificação"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Notificações deste app não podem ser desativadas"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 de <xliff:g id="NUMBER_1">%d</xliff:g> categoria de notificação deste app</item>
-      <item quantity="other">1 de <xliff:g id="NUMBER_1">%d</xliff:g> categorias de notificação deste app</item>
+      <item quantity="one">1 de <xliff:g id="NUMBER_1">%s</xliff:g> categoria de notificação deste app</item>
+      <item quantity="other">1 de <xliff:g id="NUMBER_1">%s</xliff:g> categorias de notificação deste app</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="other">%d minutos</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Uso da bateria"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"A Economia de bateria não fica disponível durante o carregamento"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Economia de bateria"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"O recurso \"Economia de bateria\" não fica disponível durante o carregamento"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Economia de bateria"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduz o desempenho e os dados em segundo plano"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Botão <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizar"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Fechar"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Arraste para baixo para dispensar"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menu Picture-in-picture"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> está em picture-in-picture"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Se você não deseja que o <xliff:g id="NAME">%s</xliff:g> use este recurso, toque para abrir as configurações e desativá-lo."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Se você não deseja que o app <xliff:g id="NAME">%s</xliff:g> use este recurso, toque para abrir as configurações e desativá-lo."</string>
     <string name="pip_play" msgid="1417176722760265888">"Reproduzir"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pausar"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Pular para a próxima"</string>
@@ -756,6 +756,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"App <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alertas"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Capturas de tela"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Mensagens gerais"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Armazenamento"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Apps sendo executados em segundo plano"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tocar para ver detalhes sobre a bateria e o uso de dados"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Desativar os dados móveis?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Como um app está ocultando uma solicitação de permissão, as configurações não podem verificar sua resposta."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index ddbf5a3..47771366 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -22,7 +22,7 @@
     <string name="app_label" msgid="7164937344850004466">"UI sistem"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ștergeți"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminați din listă"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informații despre aplicație"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info aplicație"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ecranele dvs. recente apar aici"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Renunțați la aplicațiile recente"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
@@ -61,11 +61,11 @@
     <string name="label_view" msgid="6304565553218192990">"Afișați"</string>
     <string name="always_use_device" msgid="1450287437017315906">"Utilizați în mod prestabilit pt. acest dispoz. USB"</string>
     <string name="always_use_accessory" msgid="1210954576979621596">"Utiliz. în mod prestabilit pt. acest accesoriu USB"</string>
-    <string name="usb_debugging_title" msgid="4513918393387141949">"Permiteți depanarea USB?"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"Permiteți remedierea erorilor prin USB?"</string>
     <string name="usb_debugging_message" msgid="2220143855912376496">"Amprenta digitală din cheia RSA a computerului este:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Permiteți întotdeauna de pe acest computer"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Remedierea erorilor prin USB nu este permisă"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Utilizatorul conectat momentan pe acest dispozitiv nu poate activa remedierea erorilor prin USB. Pentru a folosi această funcție, comutați la utilizatorul Administrator."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Utilizatorul conectat momentan pe acest dispozitiv nu poate activa remedierea erorilor prin USB. Pentru a folosi această funcție, comutați la utilizatorul principal."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom pt. a umple ecranul"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Înt. pt. a umple ecranul"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Se salv. captura de ecran..."</string>
@@ -357,10 +357,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Căutați"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Glisați în sus pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Glisați spre stânga pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Se vor anunța prin sunete și vibrații numai alarmele, mementourile, evenimentele și apelanții specificați de dvs. Totuși, veți auzi tot ce alegeți să redați, inclusiv muzică, videoclipuri și jocuri."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Se vor anunța prin sunete și vibrații numai alarmele. Totuși, veți auzi tot ce alegeți să redați, inclusiv muzică, videoclipuri și jocuri."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Se vor anunța prin sunete și vibrații numai alarmele, mementourile, evenimentele și apelanții specificați de dvs. Totuși, veți auzi tot ce alegeți să redați, inclusiv muzică, videoclipuri și jocuri."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Se vor anunța prin sunete și vibrații numai alarmele. Totuși, veți auzi tot ce alegeți să redați, inclusiv muzică, videoclipuri și jocuri."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizați"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Această opțiune blochează TOATE sunetele și vibrațiile, inclusiv cele ale alarmelor, muzicii, videoclipurilor și jocurilor. Totuși, veți putea iniția apeluri."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Această opțiune blochează TOATE sunetele și vibrațiile, inclusiv cele ale alarmelor, muzicii, videoclipurilor și jocurilor. Totuși, veți putea iniția apeluri."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Această opțiune blochează TOATE sunetele și vibrațiile, inclusiv cele ale alarmelor, muzicii, videoclipurilor și jocurilor."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificările mai puțin urgente mai jos"</string>
@@ -388,7 +388,7 @@
     <string name="user_add_user" msgid="5110251524486079492">"Adăugați un utilizator"</string>
     <string name="user_new_user_name" msgid="426540612051178753">"Utilizator nou"</string>
     <string name="guest_nickname" msgid="8059989128963789678">"Invitat"</string>
-    <string name="guest_new_guest" msgid="600537543078847803">"Adăugați un oaspete"</string>
+    <string name="guest_new_guest" msgid="600537543078847803">"Adăugați un invitat"</string>
     <string name="guest_exit_guest" msgid="7187359342030096885">"Eliminați invitatul"</string>
     <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"Ștergeți invitatul?"</string>
     <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"Toate aplicațiile și datele din această sesiune vor fi șterse."</string>
@@ -460,7 +460,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Aflați mai multe"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"V-ați conectat la aplicația <xliff:g id="VPN_APP">%1$s</xliff:g>, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile accesate."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Deschideți Setări VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Deschideți Setări VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Deschideți datele de conectare de încredere"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Administratorul dvs. a activat înregistrarea în jurnal pentru rețea, funcție ce monitorizează traficul de pe dispozitivul dvs.\n\nPentru mai multe informații, contactați administratorul."</string>
@@ -560,9 +560,9 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Această aplicație nu are categorii de notificare"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Notificările din această aplicație nu pot fi dezactivate"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="few">1 din <xliff:g id="NUMBER_1">%d</xliff:g> categorii de notificare din această aplicație</item>
-      <item quantity="other">1 din <xliff:g id="NUMBER_1">%d</xliff:g> de categorii de notificare din această aplicație</item>
-      <item quantity="one">1 din <xliff:g id="NUMBER_0">%d</xliff:g> categorie de notificare din această aplicație</item>
+      <item quantity="few">1 din <xliff:g id="NUMBER_1">%s</xliff:g> categorii de notificare din această aplicație</item>
+      <item quantity="other">1 din <xliff:g id="NUMBER_1">%s</xliff:g> de categorii de notificare din această aplicație</item>
+      <item quantity="one">1 din <xliff:g id="NUMBER_0">%s</xliff:g> categorie de notificare din această aplicație</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -593,8 +593,8 @@
       <item quantity="one">%d minut</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Utilizarea bateriei"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Economisirea bateriei nu este disponibilă pe durata încărcării"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Economisirea bateriei"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Economisirea bateriei nu este disponibilă pe durata încărcării"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Economisirea energiei"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduce performanța și datele de fundal"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Butonul <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"La început"</string>
@@ -734,9 +734,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizați"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Închideți"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Trageți în jos pentru a închide"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Meniul picture-in-picture"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Meniu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> este în modul picture-in-picture"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Dacă nu doriți ca <xliff:g id="NAME">%s</xliff:g> să utilizeze această funcție, atingeți pentru a deschide setările și dezactivați-o."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Dacă nu doriți ca <xliff:g id="NAME">%s</xliff:g> să utilizeze această funcție, atingeți pentru a deschide setările și dezactivați-o."</string>
     <string name="pip_play" msgid="1417176722760265888">"Redați"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Întrerupeți"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Treceți la următorul"</string>
@@ -762,6 +762,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Meniu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplicația <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Alerte"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Baterie"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Capturi de ecran"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Mesaje generale"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Stocare"</string>
@@ -782,4 +783,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplicațiile rulează în fundal"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Atingeți pentru mai multe detalii privind bateria și utilizarea datelor"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Dezactivați datele mobile?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Deoarece o aplicație acoperă o solicitare de permisiune, Setările nu vă pot verifica răspunsul."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 4f5ffdc5..e73cbe2 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -66,7 +66,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Цифровой отпечаток ключа RSA:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Всегда разрешать отладку с этого компьютера"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Отладка по USB запрещена"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"В текущем аккаунте нельзя включить отладку по USB. Перейдите в аккаунт администратора."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"В этом аккаунте нельзя включить отладку по USB. Перейдите в аккаунт основного пользователя."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Подогнать по размерам экрана"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Растянуть на весь экран"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Сохранение..."</string>
@@ -202,7 +202,7 @@
     <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Режим полета включен."</string>
     <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Режим полета отключен."</string>
     <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Режим полета включен."</string>
-    <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Режим \"Не беспокоить\" включен. Будут показаны только важные оповещения."</string>
+    <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Режим \"Не беспокоить\" включен. Будут показаны только важные уведомления."</string>
     <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"Не беспокоить, полная тишина."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"Не беспокоить – только будильник."</string>
     <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Не беспокоить."</string>
@@ -244,9 +244,9 @@
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Зарядка батареи"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Передача данных 2G и 3G приостановлена"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Передача данных 4G приостановлена"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Передача данных по моб. сети приостановлена"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Передача данных остановлена"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Передача данных приостановлена"</string>
-    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Достигнут лимит мобильного трафика, и вы больше его не расходуете.\n\nЕсли вы продолжите, возможно, начнет взиматься плата за передачу данных."</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Достигнут лимит мобильного трафика, и передача данных остановлена.\n\nЕсли вы возобновите передачу данных по мобильной сети, может взиматься плата."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Возобновить"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Нет интернет-подключения"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi подключено"</string>
@@ -359,13 +359,13 @@
     <string name="description_target_search" msgid="3091587249776033139">"Поиск"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Проведите вверх, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Проведите влево, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Вас не будут отвлекать звуки и вибрация, за исключением сигналов будильника, напоминаний, уведомлений о мероприятиях и звонков от помеченных контактов. Вы по-прежнему будете слышать включенную вами музыку, видео, игры и т. д."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Вас не будут отвлекать звуки и вибрация, за исключением сигналов будильника. Вы по-прежнему будете слышать включенную вами музыку, видео, игры и т. д."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Вас не будут отвлекать звуки и вибрация, за исключением сигналов будильника, напоминаний, уведомлений о мероприятиях и звонков от помеченных контактов. Вы по-прежнему будете слышать включенную вами музыку, видео, игры и т. д."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Вас не будут отвлекать звуки и вибрация, за исключением сигналов будильника. Вы по-прежнему будете слышать включенную вами музыку, видео, игры и т. д."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Настроить"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"В этом режиме будут отключены вибросигнал и все звуки (в том числе для будильника, музыкального проигрывателя, игр и видео). При этом вы сможете разговаривать по телефону."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Этот режим заблокирует все звуки и вибрацию, в том числе для будильника, музыки, видео и игр. Вы сможете разговаривать по телефону."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"В этом режиме будут отключены вибросигнал и все звуки (в том числе для будильника, музыкального проигрывателя, игр и видео)."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
-    <string name="speed_bump_explanation" msgid="1288875699658819755">"Показать менее важные оповещения"</string>
+    <string name="speed_bump_explanation" msgid="1288875699658819755">"Показать менее важные уведомления"</string>
     <string name="notification_tap_again" msgid="7590196980943943842">"Нажмите ещё раз, чтобы открыть"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Проведите вверх, чтобы разблокировать"</string>
     <string name="do_disclosure_generic" msgid="5615898451805157556">"Этим устройством управляет ваша организация"</string>
@@ -462,7 +462,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Подробнее…"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Запущено приложение \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Оно может отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и сайтами."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Открыть настройки VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Открыть настройки VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Открыть надежные сертификаты"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Администратор включил ведение сетевого журнала, чтобы отслеживать трафик на вашем устройстве.\n\nДля получения подробной информации обращайтесь к администратору."</string>
@@ -558,14 +558,14 @@
     <string name="power_notification_controls_description" msgid="4372459941671353358">"С помощью этой функции вы можете устанавливать уровень важности уведомлений от 0 до 5 для каждого приложения.\n\n"<b>"Уровень 5"</b>\n"‒ Помещать уведомления в начало списка.\n‒ Показывать полноэкранные уведомления.\n‒ Показывать всплывающие уведомления.\nУровень 4\n"<b></b>\n"‒ Не показывать полноэкранные уведомления.\n‒ Показывать всплывающие уведомления.\nУровень 3\n"<b></b>\n"‒ Не показывать полноэкранные уведомления.\n‒ Не показывать всплывающие уведомления.\nУровень 2\n"<b></b>\n"‒ Не показывать полноэкранные уведомления.\n‒ Не показывать всплывающие уведомления.\n‒ Не использовать звук и вибрацию.\nУровень 1\n"<b></b>\n"‒ Не показывать полноэкранные уведомления.\n‒ Не показывать всплывающие уведомления.\n‒ Не использовать звук и вибрацию.\n‒ Не показывать на экране блокировки и в строке состояния.\n‒ Помещать уведомления в конец списка.\nУровень 0\n"<b></b>\n"‒ Блокировать все уведомления приложения."</string>
     <string name="notification_header_default_channel" msgid="7506845022070889909">"Уведомления"</string>
     <string name="notification_channel_disabled" msgid="2139193533791840539">"Вы больше не будете получать эти уведомления"</string>
-    <string name="notification_num_channels" msgid="2048144408999179471">"Категорий оповещений: <xliff:g id="NUMBER">%d</xliff:g>"</string>
+    <string name="notification_num_channels" msgid="2048144408999179471">"Категорий уведомлений: <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"В приложении нет категорий уведомлений"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Уведомления этого приложения нельзя отключить"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 из <xliff:g id="NUMBER_1">%d</xliff:g> категории уведомлений этого приложения</item>
-      <item quantity="few">1 из <xliff:g id="NUMBER_1">%d</xliff:g> категорий уведомлений этого приложения</item>
-      <item quantity="many">1 из <xliff:g id="NUMBER_1">%d</xliff:g> категорий уведомлений этого приложения</item>
-      <item quantity="other">1 из <xliff:g id="NUMBER_1">%d</xliff:g> категории уведомлений этого приложения</item>
+      <item quantity="one">1 из <xliff:g id="NUMBER_1">%s</xliff:g> категории уведомлений этого приложения</item>
+      <item quantity="few">1 из <xliff:g id="NUMBER_1">%s</xliff:g> категорий уведомлений этого приложения</item>
+      <item quantity="many">1 из <xliff:g id="NUMBER_1">%s</xliff:g> категорий уведомлений этого приложения</item>
+      <item quantity="other">1 из <xliff:g id="NUMBER_1">%s</xliff:g> категории уведомлений этого приложения</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -599,8 +599,8 @@
       <item quantity="other">%d минуты</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Уровень заряда"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Режим энергосбережения нельзя включить во время зарядки"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Режим энергосбережения"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Режим энергосбережения нельзя включить во время зарядки"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Режим энергосбережения"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Ограничивает производительность и фоновую передачу данных"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Кнопка <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Главный экран"</string>
@@ -740,9 +740,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Свернуть"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Закрыть"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Чтобы закрыть, потяните вниз"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Меню \"Картинка в картинке\""</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Меню"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> находится в режиме \"Картинка в картинке\""</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Чтобы отключить эту функцию для приложения \"<xliff:g id="NAME">%s</xliff:g>\", перейдите в настройки."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Чтобы отключить эту функцию для приложения \"<xliff:g id="NAME">%s</xliff:g>\", перейдите в настройки."</string>
     <string name="pip_play" msgid="1417176722760265888">"Воспроизвести"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Приостановить"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Перейти к следующему"</string>
@@ -768,6 +768,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Меню"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Приложение \"<xliff:g id="APP">%1$s</xliff:g>\""</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Уведомления"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Батарея"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Скриншоты"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Сообщения"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Хранилище"</string>
@@ -788,4 +789,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Приложения, работающие в фоновом режиме"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Нажмите, чтобы проверить энергопотребление и трафик"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Отключить мобильный Интернет?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Невозможно принять ваше согласие, поскольку запрос скрыт другим приложением."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index 2d3ce16..5343bb3 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"මෙම පරිගණකයේ RSA යතුරු ඇඟිලි සටහන වන්නේ:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"සැම විටම මෙම පරිගණකයෙන් ඉඩ ලබා දෙන්න"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB නිදොස්කරණය වෙත අවසර නැහැ"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"දැනට මෙම උපාංගයට පුරනය වී ඇති පරිශීලකයා හට USB නිදොස්කරණය සක්‍රිය කළ නොහැක. මෙම අංගය භාවිතා කිරීම සඳහා, කරුණාකර පරිපාලක පරිශීලකයෙකු වෙත මාරු වෙන්න."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"දැනට මෙම උපාංගයට පුරා ඇති පරිශීලකයාට USB නිදොස්කරණය ක්‍රියාත්මක කළ නොහැක. මෙම විශේෂාංගය භාවිතා කිරීම සඳහා, මූලික පරිශීලකයා වෙත මාරු වෙන්න."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"තිරය පිරවීමට විශාලනය කරන්න"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"තිරය පිරවීමට අදින්න"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"තිර රුව සුරකිමින්…"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"සෙවීම"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා උඩට සර්පණය කරන්න."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා වමට සර්පණය කරන්න."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"එලාම සිහිකැඳවීම්, සිදුවීම්, සහ ඔබ සඳහන් කළ අමතන්නන් හැර, ශබ්ද සහ කම්පනවලින් ඔබට බාධා නොවනු ඇත. සංගීතය, වීඩියෝ, සහ ක්‍රීඩා ඇතුළු ඔබ වාදනය කිරීමට තෝරන ලද සියලු දේ ඔබට තවම ඇසෙනු ඇත."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"එලාම හැර, ශබ්ද සහ කම්පනවලින් ඔබට බාධා නොවනු ඇත. සංගීතය, වීඩියෝ, සහ ක්‍රීඩා ඇතුළු ඔබ වාදනය කිරීමට තෝරන ලද සියලු දේ ඔබට තවම ඇසෙනු ඇත."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"එලාම සිහිකැඳවීම්, සිදුවීම්, සහ ඔබ සඳහන් කළ අමතන්නන් හැර, ශබ්ද සහ කම්පනවලින් ඔබට බාධා නොවනු ඇත. සංගීතය, වීඩියෝ, සහ ක්‍රීඩා ඇතුළු ඔබ වාදනය කිරීමට තෝරන ලද සියලු දේ ඔබට තවම ඇසෙනු ඇත."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"එලාම හැර, ශබ්ද සහ කම්පනවලින් ඔබට බාධා නොවනු ඇත. සංගීතය, වීඩියෝ, සහ ක්‍රීඩා ඇතුළු ඔබ වාදනය කිරීමට තෝරන ලද සියලු දේ ඔබට තවම ඇසෙනු ඇත."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"අභිරුචිකරණය"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"මෙය එලාම්, සංගීතය, වීඩියෝ, සහ ක්‍රීඩා ඇතුළු, සියලු ශබ්ද සහ කම්පන අවහිර කරයි. ඔබට තවමත් දුරකථන ඇමතුම් ගැනීමට හැකියාව ඇත."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"මෙය එලාම්, සංගීතය, වීඩියෝ, සහ ක්‍රීඩා ඇතුළු, සියලු ශබ්ද සහ කම්පන අවහිර කරයි. ඔබට තවම දුරකථන ඇමතුම් ගැනීමට හැකි වනු ඇත."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"මෙය එලාම්, සංගීතය, වීඩියෝ, සහ ක්‍රීඩා ඇතුළු, සියලු ශබ්ද සහ කම්පන අවහිර කරයි."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"හදිසිය අඩු දැනුම් දීම් පහත"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"තව දැන ගන්න"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කළ හැකි <xliff:g id="VPN_APP">%1$s</xliff:g>, වෙත ඔබ සම්බන්ධ වී ඇත."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN සැකසීම් විවෘත කරන්න"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN සැකසීම් විවෘත කරන්න"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"විශ්වාසි අක්තපත්‍ර විවෘත කරන්න"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"ඔබගේ පරිපාලක ඔබගේ උපාංගය මත තදබදය නිරීක්ෂණය කරන, ජාල ඇතුළු වීම ක්‍රියාත්මක කර ඇත.\n\nවැඩිදුර තොරතුරු සඳහා ඔබේ පරිපාලක අමතන්න."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"මෙම යෙදුම හට දැනුම්දීම් ප්‍රවර්ග නොමැත"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"මෙම යෙදුම වෙතින් වන දැනුම්දීම් ක්‍රියාවිරහිත කළ නොහැකිය"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">මෙම යෙදුමෙන් දැනුම්දීම් ප්‍රවර්ග <xliff:g id="NUMBER_1">%d</xliff:g>න් 1ක්</item>
-      <item quantity="other">මෙම යෙදුමෙන් දැනුම්දීම් ප්‍රවර්ග <xliff:g id="NUMBER_1">%d</xliff:g>න් 1ක්</item>
+      <item quantity="one">මෙම යෙදුමෙන් දැනුම්දීම් ප්‍රවර්ග <xliff:g id="NUMBER_1">%s</xliff:g>න් 1ක්</item>
+      <item quantity="other">මෙම යෙදුමෙන් දැනුම්දීම් ප්‍රවර්ග <xliff:g id="NUMBER_1">%s</xliff:g>න් 1ක්</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="other">මිනිත්තු %d</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"බැටරි භාවිතය"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ආරෝපණය අතරතුර බැටරි සුරැකුම ලබා ගත නොහැකිය."</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"බැටරි සුරැකුම"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"ආරෝපණය අතරතුර බැටරි සුරැකුම ලබා ගත නොහැකිය"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"බැටරිය සුරකින්නා"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"ක්‍රියාකාරිත්වය සහ පසුබිම් දත්ත අඩු කරන්න"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> බොත්තම"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home යතුර"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"කුඩා කරන්න"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"වසන්න"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"ඉවත ලෑමට පහළට ඇදගෙන යන්න"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"පින්තූරය තුළ පින්තූරය මෙනුව"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"මෙනුව"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> පින්තූරය-තුළ-පින්තූරය තුළ වේ"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"ඔබට <xliff:g id="NAME">%s</xliff:g> මෙම විශේෂාංගය භාවිත කිරීමට අවශ්‍ය නැති නම්, සැකසීම් විවෘත කිරීමට තට්ටු කර එය ක්‍රියාවිරහිත කරන්න."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"ඔබට <xliff:g id="NAME">%s</xliff:g> මෙම විශේෂාංගය භාවිත කිරීමට අවශ්‍ය නැති නම්, සැකසීම් විවෘත කිරීමට තට්ටු කර එය ක්‍රියාවිරහිත කරන්න."</string>
     <string name="pip_play" msgid="1417176722760265888">"ධාවනය කරන්න"</string>
     <string name="pip_pause" msgid="8881063404466476571">"විරාම කරන්න"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"ඊළඟ එකට පනින්න"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"මෙනුව"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> යෙදුම"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"ඇඟවීම්"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"බැටරිය"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"තිර රු"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"පොදු පණිවිඩ"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"ගබඩාව"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"පසුබිමින් ධාවනය වන යෙදුම්"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"බැටරි හා දත්ත භාවිතය පිළිබඳව විස්තර සඳහා තට්ටු කරන්න"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ජංගම දත්ත ක්‍රියාවිරහිත කරන්නද?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"යෙදුමක් අවසර ඉල්ලීමක් කරන නිසා, සැකසීම්වලට ඔබගේ ප්‍රතිචාරය සත්‍යාපනය කළ නොහැකිය."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 51b9361..db7ea81 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -45,7 +45,7 @@
     <string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Zapnúť"</string>
     <string name="battery_saver_start_action" msgid="5576697451677486320">"Zapnúť šetrič batérie"</string>
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Nastavenia"</string>
-    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi‑Fi"</string>
     <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Automatické otočenie obrazovky"</string>
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"STLMIŤ"</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
@@ -66,7 +66,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Digitálny odtlačok RSA počítača je:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Vždy povoliť z tohto počítača"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Ladenie cez USB nie je povolené"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Používateľ, ktorý je práve prihlásený na tomto zariadení, nemôže zapnúť ladenie cez USB. Ak chcete použiť túto funkciu, prepnite na používateľa s oprávneniami správcu."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Používateľ, ktorý je práve prihlásený v tomto zariadení, nemôže zapnúť ladenie USB. Ak chcete použiť túto funkciu, prepnite na hlavného používateľa."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Priblížiť na celú obrazovku"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Na celú obrazovku"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Prebieha ukladanie snímky obrazovky..."</string>
@@ -152,7 +152,7 @@
     <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
     <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string>
     <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
-    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi‑Fi"</string>
     <string name="accessibility_no_sim" msgid="8274017118472455155">"Žiadna SIM karta."</string>
     <string name="accessibility_cell_data" msgid="5326139158682385073">"Mobilné dáta"</string>
     <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Mobilné dáta sú zapnuté"</string>
@@ -194,8 +194,8 @@
     <string name="accessibility_desc_work_lock" msgid="4288774420752813383">"Uzamknutá obrazovka pracovného profilu"</string>
     <string name="accessibility_desc_close" msgid="7479755364962766729">"Zavrieť"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>"</string>
-    <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Pripojenie Wi-Fi je vypnuté."</string>
-    <string name="accessibility_quick_settings_wifi_changed_on" msgid="6440117170789528622">"Pripojenie Wi-Fi je zapnuté."</string>
+    <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Pripojenie Wi‑Fi je vypnuté."</string>
+    <string name="accessibility_quick_settings_wifi_changed_on" msgid="6440117170789528622">"Pripojenie Wi‑Fi je zapnuté."</string>
     <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Mobil: <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batéria: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane_off" msgid="7786329360056634412">"Režim v lietadle je vypnutý."</string>
@@ -246,10 +246,10 @@
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Dátové prenosy 4G sú pozastavené"</string>
     <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobilné dáta sú pozastavené"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Dáta sú pozastavené"</string>
-    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Dosiahli ste nastavený dátový limit. Už nepoužívate mobilné dáta.\n\nAk budete pokračovať, môžu vám byť účtované poplatky za spotrebu dát."</string>
-    <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Znova spustiť"</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Dosiahli ste nastavený dátový limit. Už nepoužívate mobilné dátové pripojenie.\n\nAk ho znovu zapnete, môžu vám byť účtované poplatky za spotrebu dát."</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Znova zapnúť"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Bez prip. na Internet"</string>
-    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: pripojené"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi‑Fi: pripojené"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Vyhľadávanie satelitov GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Poloha nastavená pomocou GPS"</string>
     <string name="accessibility_location_active" msgid="2427290146138169014">"Žiadosti o polohu sú aktívne"</string>
@@ -298,12 +298,12 @@
     <string name="quick_settings_user_label" msgid="5238995632130897840">"Ja"</string>
     <string name="quick_settings_user_title" msgid="4467690427642392403">"Používateľ"</string>
     <string name="quick_settings_user_new_user" msgid="9030521362023479778">"Nový používateľ"</string>
-    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi‑Fi"</string>
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nepripojené"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Žiadna sieť"</string>
-    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Sieť Wi-Fi je vypnutá"</string>
-    <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi je zapnuté"</string>
-    <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"K dispozícii nie sú žiadne siete Wi-Fi"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Sieť Wi‑Fi je vypnutá"</string>
+    <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi‑Fi je zapnuté"</string>
+    <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"K dispozícii nie sú žiadne siete Wi‑Fi"</string>
     <string name="quick_settings_cast_title" msgid="7709016546426454729">"Prenos"</string>
     <string name="quick_settings_casting" msgid="6601710681033353316">"Prenáša sa"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nepomenované zariadenie"</string>
@@ -311,7 +311,7 @@
     <string name="quick_settings_cast_detail_empty_text" msgid="311785821261640623">"Nie sú k dispozícii žiadne zariadenia"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Jas"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATICKY"</string>
-    <string name="quick_settings_inversion_label" msgid="8790919884718619648">"Invertovať farby"</string>
+    <string name="quick_settings_inversion_label" msgid="8790919884718619648">"Inverzia farieb"</string>
     <string name="quick_settings_color_space_label" msgid="853443689745584770">"Režim korekcie farieb"</string>
     <string name="quick_settings_more_settings" msgid="326112621462813682">"Ďalšie nastavenia"</string>
     <string name="quick_settings_done" msgid="3402999958839153376">"Hotovo"</string>
@@ -359,10 +359,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Vyhľadávanie"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Prejdite prstom nahor: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Prejdite prstom doľava: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Nebudú vás vyrušovať zvuky ani vibrácie, iba budíky, pripomenutia, udalosti a volajúci, ktorých určíte. Budete naďalej počuť všetko, čo sa rozhodnete prehrať, ako napríklad hudbu, videá a hry."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Nebudú vás vyrušovať zvuky ani vibrácie, iba budíky. Budete naďalej počuť všetko, čo sa rozhodnete prehrať, ako napríklad hudbu, videá a hry."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Nebudú vás vyrušovať zvuky ani vibrácie, iba budíky, pripomenutia, udalosti a volajúci, ktorých určíte. Budete naďalej počuť všetko, čo sa rozhodnete prehrať, ako napríklad hudbu, videá a hry."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Nebudú vás vyrušovať zvuky ani vibrácie, iba budíky. Budete naďalej počuť všetko, čo sa rozhodnete prehrať, ako napríklad hudbu, videá a hry."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Prispôsobiť"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Budú zablokované všetky zvuky a vibrácie vrátane budíkov, hudby, videí a hier. Stále však budete môcť telefonovať."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Zablokujú sa VŠETKY zvuky a vibrácie vrátane budíkov, hudby, videí a hier. Stále však budete môcť telefonovať."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Zablokujú sa tým VŠETKY zvuky a vibrácie vrátane zvukov budíkov, hudby, videí a hier."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Menej naliehavé upozornenia sa nachádzajú nižšie"</string>
@@ -462,7 +462,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Ďalšie informácie"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Ste pripojený/-á k aplikácii <xliff:g id="VPN_APP">%1$s</xliff:g>, ktorá môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otvoriť Nastavenia pripojenia VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Otvoriť nastavenia pripojenia VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Otvoriť dôveryhodné poverenia"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Správca aktivoval zapisovanie do denníka siete, ktoré sleduje premávku na vašom zariadení.\n\nĎalšie informácie vám poskytne správca."</string>
@@ -562,10 +562,10 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Táto aplikácia nemá kategórie upozornení"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Upozornenia z tejto aplikácie sa nedajú vypnúť"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="few">1 z <xliff:g id="NUMBER_1">%d</xliff:g> kategórií upozornení z tejto aplikácie</item>
-      <item quantity="many">1 z <xliff:g id="NUMBER_1">%d</xliff:g> kategórie upozornení z tejto aplikácie</item>
-      <item quantity="other">1 z <xliff:g id="NUMBER_1">%d</xliff:g> kategórií upozornení z tejto aplikácie</item>
-      <item quantity="one">1 z <xliff:g id="NUMBER_0">%d</xliff:g> kategórie upozornení z tejto aplikácie</item>
+      <item quantity="few">1 z <xliff:g id="NUMBER_1">%s</xliff:g> kategórií upozornení z tejto aplikácie</item>
+      <item quantity="many">1 z <xliff:g id="NUMBER_1">%s</xliff:g> kategórie upozornení z tejto aplikácie</item>
+      <item quantity="other">1 z <xliff:g id="NUMBER_1">%s</xliff:g> kategórií upozornení z tejto aplikácie</item>
+      <item quantity="one">1 z <xliff:g id="NUMBER_0">%s</xliff:g> kategórie upozornení z tejto aplikácie</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -599,8 +599,8 @@
       <item quantity="one">%d minúta</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Využitie batérie"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Počas nabíjania nie je Šetrič batérie k dispozícii"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Šetrič batérie"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Počas nabíjania nie je Šetrič batérie k dispozícii"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Šetrič batérie"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Obmedzí výkonnosť a údaje na pozadí"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Tlačidlo <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Domov"</string>
@@ -616,7 +616,7 @@
     <string name="keyboard_key_backspace" msgid="1559580097512385854">"Backspace"</string>
     <string name="keyboard_key_media_play_pause" msgid="3861975717393887428">"Prehrať/pozastaviť"</string>
     <string name="keyboard_key_media_stop" msgid="2859963958595908962">"Zastaviť"</string>
-    <string name="keyboard_key_media_next" msgid="1894394911630345607">"Nasledujúce"</string>
+    <string name="keyboard_key_media_next" msgid="1894394911630345607">"Ďalej"</string>
     <string name="keyboard_key_media_previous" msgid="4256072387192967261">"Predchádzajúce"</string>
     <string name="keyboard_key_media_rewind" msgid="2654808213360820186">"Pretočiť späť"</string>
     <string name="keyboard_key_media_fast_forward" msgid="3849417047738200605">"Pretočiť dopredu"</string>
@@ -740,9 +740,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimalizovať"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Zavrieť"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Zrušíte presunutím nadol"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Ponuka režimu obraz v obraze"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Ponuka"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> je v režime obraz v obraze"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Ak nechcete, aby aplikácia <xliff:g id="NAME">%s</xliff:g> používala túto funkciu, klepnutím otvorte nastavenia a vypnite ju."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Ak nechcete, aby aplikácia <xliff:g id="NAME">%s</xliff:g> používala túto funkciu, klepnutím otvorte nastavenia a vypnite ju."</string>
     <string name="pip_play" msgid="1417176722760265888">"Prehrať"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pozastaviť"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Preskočiť na ďalšie"</string>
@@ -768,6 +768,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Ponuka"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplikácia <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Upozornenia"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Batéria"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Snímky obrazovky"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Všeobecné správy"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Úložisko"</string>
@@ -776,7 +777,7 @@
     <string name="app_info" msgid="6856026610594615344">"Info o aplikácii"</string>
     <string name="go_to_web" msgid="1106022723459948514">"Prejsť na internet"</string>
     <string name="mobile_data" msgid="7094582042819250762">"Mobilné dáta"</string>
-    <string name="wifi_is_off" msgid="1838559392210456893">"Pripojenie Wi-Fi je vypnuté"</string>
+    <string name="wifi_is_off" msgid="1838559392210456893">"Pripojenie Wi‑Fi je vypnuté"</string>
     <string name="bt_is_off" msgid="2640685272289706392">"Rozhranie Bluetooth je vypnuté"</string>
     <string name="dnd_is_off" msgid="6167780215212497572">"Nastavenie Nerušiť je vypnuté"</string>
     <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"Režim Nerušiť bol zapnutý automatickým pravidlom (<xliff:g id="ID_1">%s</xliff:g>)."</string>
@@ -788,4 +789,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikácie sú spustené na pozadí"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Klepnutím zobrazíte podrobnosti o batérii a spotrebe dát"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vypnúť mobilné dáta?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Nastavenia nemôžu overiť vašu odpoveď, pretože určitá aplikácia blokuje žiadosť o povolenie."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 16f830e06..a50d301 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -66,7 +66,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Računalnikov prstni odtis ključa RSA je:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Vedno dovoli iz tega računalnika"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Odpravljanje napak s povezavo USB ni dovoljeno"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Uporabnik, trenutno prijavljen v napravo, ne more vklopiti odpravljanja napak s povezavo USB. Če želite uporabljati to funkcijo, preklopite na skrbniškega uporabnika."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Uporabnik, trenutno prijavljen v napravo, ne more vklopiti odpravljanja napak s povezavo USB. Če želite uporabljati to funkcijo, preklopite na primarnega uporabnika."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Povečava čez cel zaslon"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Raztegnitev čez zaslon"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Shranjev. posnetka zaslona ..."</string>
@@ -359,10 +359,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Iskanje"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Povlecite navzgor za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Povlecite v levo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Ne bodo vas motili zvoki ali tresenje, razen od alarmov, opomnikov, dogodkov in klicateljev, ki jih določite. Še vedno pa boste slišali vse, kar se boste odločili predvajati, vključno z glasbo, videoposnetki in igrami."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Ne bodo vas motili zvoki ali tresenje, razen alarmov. Še vedno pa boste slišali vse, kar se boste odločili predvajati, vključno z glasbo, videoposnetki in igrami."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Ne bodo vas motili zvoki ali vibriranje, razen v primeru alarmov, opomnikov, dogodkov in klicateljev, ki jih določite. Še vedno pa boste slišali vse, kar se boste odločili predvajati, vključno z glasbo, videoposnetki in igrami."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Ne bodo vas motili zvoki ali vibriranje, razen v primeru alarmov. Še vedno pa boste slišali vse, kar se boste odločili predvajati, vključno z glasbo, videoposnetki in igrami."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Prilagodi"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"S tem so blokirani VSI zvoki in vibriranje – tudi od alarmov, glasbe, videoposnetkov in iger. Še vedno boste lahko opravljali telefonske klice."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"S tem so onemogočeni VSI zvoki in vibriranje – tudi v primeru alarmov, glasbe, videoposnetkov in iger. Še vedno pa boste lahko opravljali telefonske klice."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"S tem so blokirani VSI zvoki in vibriranje – tudi od alarmov, glasbe, videoposnetkov in iger."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Manj nujna obvestila spodaj"</string>
@@ -462,7 +462,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Več o tem"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Povezani ste z aplikacijo <xliff:g id="VPN_APP">%1$s</xliff:g>, ki lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Odpri nastavitve omrežja VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Odpri nastavitve omrežja VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Odpri zaupanja vredne poverilnice"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Skrbnik je vklopil beleženje omrežnega prometa, ki nadzoruje promet v napravi.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
@@ -562,10 +562,10 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Ta aplikacija nima kategorij obvestil"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Obvestil te aplikacije ni mogoče izklopiti"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 od <xliff:g id="NUMBER_1">%d</xliff:g> kategorije obvestil iz te aplikacije</item>
-      <item quantity="two">1 od <xliff:g id="NUMBER_1">%d</xliff:g> kategorij obvestil iz te aplikacije</item>
-      <item quantity="few">1 od <xliff:g id="NUMBER_1">%d</xliff:g> kategorij obvestil iz te aplikacije</item>
-      <item quantity="other">1 od <xliff:g id="NUMBER_1">%d</xliff:g> kategorij obvestil iz te aplikacije</item>
+      <item quantity="one">1 od <xliff:g id="NUMBER_1">%s</xliff:g> kategorije obvestil iz te aplikacije</item>
+      <item quantity="two">1 od <xliff:g id="NUMBER_1">%s</xliff:g> kategorij obvestil iz te aplikacije</item>
+      <item quantity="few">1 od <xliff:g id="NUMBER_1">%s</xliff:g> kategorij obvestil iz te aplikacije</item>
+      <item quantity="other">1 od <xliff:g id="NUMBER_1">%s</xliff:g> kategorij obvestil iz te aplikacije</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -599,8 +599,8 @@
       <item quantity="other">%d minut</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Poraba akumulatorja"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Varčevanje z energijo akumulatorja med polnjenjem ni na voljo"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Varčevanje z energijo akumulatorja"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Varčevanje z energijo akumulatorja med polnjenjem ni na voljo"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Varčevanje z energijo akumulatorja"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Omeji zmogljivost delovanja in prenos podatkov v ozadju"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Gumb <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Začetek"</string>
@@ -740,9 +740,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimiraj"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Zapri"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Povlecite navzdol, da opustite"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Meni za sliko v sliki"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Meni"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> je v načinu slika v sliki"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Če ne želite, da aplikacija <xliff:g id="NAME">%s</xliff:g> uporablja to funkcijo, se dotaknite, da odprete nastavitve, in funkcijo izklopite."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Če ne želite, da aplikacija <xliff:g id="NAME">%s</xliff:g> uporablja to funkcijo, se dotaknite, da odprete nastavitve, in funkcijo izklopite."</string>
     <string name="pip_play" msgid="1417176722760265888">"Predvajaj"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Začasno ustavi"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Preskoči na naslednjega"</string>
@@ -768,6 +768,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Meni"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplikacija <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Opozorila"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Akumulator"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Posnetki zaslona"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Splošna sporočila"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Shramba"</string>
@@ -788,4 +789,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacije, ki se izvajajo v ozadju"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Dotaknite se za prikaz podrobnosti porabe akumulatorja in prenosa podatkov"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Želite izklopiti prenos podatkov v mobilnih omrežjih?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Ker aplikacija zakriva zahtevo za dovoljenje, z nastavitvami ni mogoče preveriti vašega odziva."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index f0a7e45..e1f2567 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Shenja e gishtit të tastit \"RSA\" së kompjuterit është:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Lejo gjithmonë nga ky kompjuter"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Korrigjimi i USB-së nuk lejohet"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Përdoruesi i identifikuar aktualisht në këtë pajisje nuk mund ta aktivizojë korrigjimin e USB-së. Për ta përdorur këtë funksion, kalo te përdoruesi Administrator."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Përdoruesi i identifikuar aktualisht në këtë pajisje nuk mund ta aktivizojë korrigjimin e USB-së. Për ta përdorur këtë funksion, kalo te përdoruesi parësor."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zmadho për të mbushur ekranin"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Shtrije për të mbushur ekranin"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Po ruan pamjen e ekranit..."</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Kërko"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Rrëshqit lart për <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Rrëshqit majtas për <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Nuk do të shqetësohesh nga tingujt dhe dridhjet, përveç alarmeve, alarmeve rikujtuese, ngjarjeve dhe telefonuesve që specifikon. Do të vazhdosh të dëgjosh gjithçka që zgjedh të luash duke përfshirë muzikën, videot dhe lojërat."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Nuk do të shqetësohesh nga tingujt dhe dridhjet, përveç alarmeve. Do të vazhdosh të dëgjosh gjithçka që zgjedh të luash duke përfshirë muzikën, videot dhe lojërat."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Nuk do të shqetësohesh nga tingujt dhe dridhjet, përveç alarmeve, alarmeve rikujtuese, ngjarjeve dhe telefonuesve që specifikon. Do të vazhdosh të dëgjosh çdo gjë që zgjedh të luash duke përfshirë muzikën, videot dhe lojërat."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Nuk do të shqetësohesh nga tingujt dhe dridhjet, përveç alarmeve. Do të vazhdosh të dëgjosh çdo gjë që zgjedh të luash duke përfshirë muzikën, videot dhe lojërat."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizo"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Kjo bllokon TË GJITHË tingujt dhe dridhjet, duke përfshirë edhe nga alarmet, muzika, videot dhe lojërat. Përsëri do të mund të bësh telefonata."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Kjo bllokon TË GJITHË tingujt dhe dridhjet, duke përfshirë edhe nga alarmet, muzika, videot dhe lojërat. Përsëri do të mund të bësh telefonata."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Kjo bllokon TË GJITHË tingujt dhe dridhjet, duke përfshirë edhe nga alarmet, muzika, videot dhe lojërat."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Njoftimet më pak urgjente, më poshtë!"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Mëso më shumë"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Je i lidhur me aplikacionin <xliff:g id="VPN_APP">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd në rrjet, duke përfshirë mail-et, aplikacionet dhe sajtet e uebit."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Hap cilësimet e VPN-së"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Hap cilësimet e VPN-së"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Hap kredencialet e besuara"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Administratori yt ka aktivizuar regjistrimin e rrjetit, i cili monitoron trafikun në pajisjen tënde.\n\nPër më shumë informacione, kontakto me administratorin."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Ky aplikacion nuk ka kategori njoftimesh"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Njoftimet nga ky aplikacion nuk mund të çaktivizohen"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 nga <xliff:g id="NUMBER_1">%d</xliff:g> kategori njoftimi nga ky aplikacion</item>
-      <item quantity="one">1 nga <xliff:g id="NUMBER_0">%d</xliff:g> kategori njoftimi nga ky aplikacion</item>
+      <item quantity="other">1 nga <xliff:g id="NUMBER_1">%s</xliff:g> kategori njoftimi nga ky aplikacion</item>
+      <item quantity="one">1 nga <xliff:g id="NUMBER_0">%s</xliff:g> kategori njoftimi nga ky aplikacion</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d minutë</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Përdorimi i baterisë"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"\"Kursyesi i baterisë\" nuk është i disponueshëm gjatë karikimit"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Kursyesi i baterisë"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"\"Kursyesi i baterisë\" nuk është i disponueshëm gjatë ngarkimit"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Kursyesi i baterisë"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Pakëson veprimtarinë dhe të dhënat në sfond"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Butoni <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Kreu"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimizo"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Mbyll"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Zvarrit poshtë për të larguar"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menyja e \"Figurës brenda figurës\""</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menyja"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> është në figurë brenda figurës"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Nëse nuk dëshiron që <xliff:g id="NAME">%s</xliff:g> ta përdorë këtë funksion, trokit për të hapur cilësimet dhe për ta çaktivizuar."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Nëse nuk dëshiron që <xliff:g id="NAME">%s</xliff:g> ta përdorë këtë funksion, trokit për të hapur cilësimet dhe për ta çaktivizuar."</string>
     <string name="pip_play" msgid="1417176722760265888">"Luaj"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Ndërprit"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Kalo te tjetra"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menyja"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Aplikacioni <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Sinjalizimet"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Pamjet e ekranit"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Mesazhe të përgjithshme"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Hapësira ruajtëse"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacionet që ekzekutohen në sfond"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Trokit për detaje mbi baterinë dhe përdorimin e të dhënave"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Të çaktivizohen të dhënat celulare?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Duke qenë se një aplikacion po bllokon një kërkesë për leje, \"Cilësimet\" nuk mund të verifikojnë përgjigjen tënde."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 94a5909..b31eb96 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -65,7 +65,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Дигитални отисак RSA кључа овог рачунара је:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Увек дозволи са овог рачунара"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Отклањање грешака на USB-у није дозвољено"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Корисник који је тренутно пријављен на овај уређај не може да укључи отклањање грешака на USB-у. Да бисте користили ову функцију, пребаците на корисника са администраторским правима."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Корисник који је тренутно пријављен на овај уређај не може да укључи отклањање грешака на USB-у. Да бисте користили ову функцију, пребаците на примарног корисника."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Зумирај на целом екрану"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Развуци на цео екран"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Чување снимка екрана..."</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Претрага"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Превуците нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Превуците улево за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Неће вас узнемиравати звукови и вибрације осим за аларме, подсетнике, догађаје и позиваоце које наведете. И даље ћете чути све што одаберете да пустите, укључујући музику, видео снимке и игре."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Неће вас узнемиравати звукови и вибрације осим за аларме. И даље ћете чути све што одаберете да пустите, укључујући музику, видео снимке и игре."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Неће вас узнемиравати звукови и вибрације осим за аларме, подсетнике, догађаје и позиваоце које наведете. И даље ћете чути све што одаберете да пустите, укључујући музику, видео снимке и игре."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Неће вас узнемиравати звукови и вибрације осим за аларме. И даље ћете чути све што одаберете да пустите, укључујући музику, видео снимке и игре."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Прилагоди"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Ово блокира СВЕ звукове и вибрације укључујући аларме, музику, видео снимке и игре. И даље ћете моћи да упућујете позиве."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Ово блокира СВЕ звукове и вибрације укључујући аларме, музику, видео снимке и игре. И даље ћете моћи да упућујете позиве."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Ово блокира СВЕ звукове и вибрације укључујући аларме, музику, видео снимке и игре."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Мање хитна обавештења су у наставку"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Сазнајте више"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Повезани сте са апликацијом <xliff:g id="VPN_APP">%1$s</xliff:g>, која може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Отворите подешавања VPN-а"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Отвори подешавања VPN-а"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Отворите поуздане акредитиве"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Администратор је укључио евидентирање мреже, које прати саобраћај на уређају.\n\nКонтактирајте администратора за више информација."</string>
@@ -558,9 +558,9 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Ова апликација нема категорије обавештења"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Обавештења из ове апликације не могу да се искључе"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 од <xliff:g id="NUMBER_1">%d</xliff:g> категорије обавештења за ову апликацију</item>
-      <item quantity="few">1 од <xliff:g id="NUMBER_1">%d</xliff:g> категорије обавештења за ову апликацију</item>
-      <item quantity="other">1 од <xliff:g id="NUMBER_1">%d</xliff:g> категорија обавештења за ову апликацију</item>
+      <item quantity="one">1 од <xliff:g id="NUMBER_1">%s</xliff:g> категорије обавештења за ову апликацију</item>
+      <item quantity="few">1 од <xliff:g id="NUMBER_1">%s</xliff:g> категорије обавештења за ову апликацију</item>
+      <item quantity="other">1 од <xliff:g id="NUMBER_1">%s</xliff:g> категорија обавештења за ову апликацију</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -591,8 +591,8 @@
       <item quantity="other">%d минута</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Потрошња батерије"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Уштеда батерије није доступна током пуњења"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Уштеда батерије"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Уштеда батерије није доступна током пуњења"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Уштеда батерије"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Смањује перформансе и позадинске податке"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Дугме <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Тастер Почетна"</string>
@@ -732,9 +732,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Умањи"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Затвори"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Превуците надоле да бисте одбили"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Мени Слика у слици"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Мени"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> је слика у слици"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Ако не желите да <xliff:g id="NAME">%s</xliff:g> користи ову функцију, додирните да бисте отворили подешавања и искључили је."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Ако не желите да <xliff:g id="NAME">%s</xliff:g> користи ову функцију, додирните да бисте отворили подешавања и искључили је."</string>
     <string name="pip_play" msgid="1417176722760265888">"Пусти"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Паузирај"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Пређи на следеће"</string>
@@ -760,6 +760,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Мени"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Апликација <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Обавештења"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Батерија"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Снимци екрана"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Опште поруке"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Меморијски простор"</string>
@@ -780,4 +781,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Апликације покренуте у позадини"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Додирните за детаље о батерији и потрошњи података"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Желите да онемогућите мобилне податке?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Подешавања не могу да верификују ваш одговор јер апликација скрива захтев за дозволу."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 664825b..c67ab8c 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -31,7 +31,7 @@
     </plurals>
     <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Inga aviseringar"</string>
     <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Pågående"</string>
-    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Meddelanden"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Aviseringar"</string>
     <string name="battery_low_title" msgid="6456385927409742437">"Lågt batteri"</string>
     <string name="battery_low_percent_format" msgid="2900940511201380775">"<xliff:g id="PERCENTAGE">%s</xliff:g> kvar"</string>
     <string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"<xliff:g id="PERCENTAGE">%s</xliff:g> kvar. Batterisparläget är aktiverat."</string>
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Fingeravtrycket för datorns RSA-nyckel är:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Tillåt alltid på den här datorn"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB-felsökning är inte tillåtet"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Användaren som är inloggad på enheten för närvarande kan inte aktivera USB-felsökning. Logga in som administratör om du vill använda den här funktionen."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Användaren som är inloggad på enheten för närvarande kan inte aktivera USB-felsökning. Byt till den primära användaren om du vill använda den här funktionen."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zooma för att fylla skärm"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Dra för att fylla skärmen"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Skärmdumpen sparas ..."</string>
@@ -227,8 +227,8 @@
     <string name="accessibility_quick_settings_flashlight_changed_on" msgid="6531793301533894686">"Ficklampan har aktiverats."</string>
     <string name="accessibility_quick_settings_color_inversion_changed_off" msgid="4406577213290173911">"Färginverteringen har inaktiverats."</string>
     <string name="accessibility_quick_settings_color_inversion_changed_on" msgid="6897462320184911126">"Färginverteringen har aktiverats."</string>
-    <string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Den mobila trådlösa surfzonen har inaktiverats."</string>
-    <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Den mobila trådlösa surfzonen har aktiverats."</string>
+    <string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Den mobila surfzonen har inaktiverats."</string>
+    <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Den mobila surfzonen har aktiverats."</string>
     <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Castningen av skärmen har stoppats."</string>
     <string name="accessibility_quick_settings_work_mode_off" msgid="7045417396436552890">"Arbetsläget är inaktiverat."</string>
     <string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"Arbetsläget aktiverat."</string>
@@ -313,7 +313,7 @@
     <string name="quick_settings_connected_battery_level" msgid="4136051440381328892">"Ansluten, batterinivå <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="quick_settings_connecting" msgid="47623027419264404">"Ansluter ..."</string>
     <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Internetdelning"</string>
-    <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Trådlös surfzon"</string>
+    <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Surfzon"</string>
     <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Aviseringar"</string>
     <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Ficklampa"</string>
     <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Mobildata"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Sök"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Dra uppåt för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Dra åt vänster för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Du blir inte störd av ljud och vibrationer, förutom från alarm, påminnelser, event och specifika samtal. Ljudet är fortfarande på för sådant du väljer att spela upp, till exempel musik, videor och spel."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Du blir inte störd av ljud och vibrationer, förutom från alarm. Ljudet är fortfarande på för sådant du väljer att spela upp, till exempel musik, videor och spel."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Du blir inte störd av ljud och vibrationer, förutom från alarm, påminnelser, händelser och specifika samtal. Ljudet är fortfarande på för sådant du väljer att spela upp, till exempel musik, videor och spel."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Du blir inte störd av ljud och vibrationer, förutom från alarm. Ljudet är fortfarande på för sådant du väljer att spela upp, till exempel musik, videor och spel."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Anpassa"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Detta blockerar ALLA ljud och vibrationer, inklusive alarm, musik, videor och spel. Du kan fortfarande ringa."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"ALLA ljud och vibrationer blockeras, inklusive alarm, musik, videor och spel. Du kan fortfarande ringa."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Detta blockerar ALLA ljud och vibrationer, inklusive alarm, musik, videor och spel."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Mindre brådskande aviseringar nedan"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Läs mer"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Du är ansluten till <xliff:g id="VPN_APP">%1$s</xliff:g> som kan övervaka din aktivitet på nätverket, inklusive e-postmeddelanden, appar och webbplatser."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Öppna VPN-inställningar"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Öppna VPN-inställningarna"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Öppna betrodda användaruppgifter"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Administratören har aktiverat nätverksloggning som övervakar trafik på enheten.\n\nKontakta administratören om du vill veta mer."</string>
@@ -524,7 +524,7 @@
     <string name="alarm_template" msgid="3980063409350522735">"kl. <xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="alarm_template_far" msgid="4242179982586714810">"kl. <xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_detail" msgid="2579369091672902101">"Snabbinställningar, <xliff:g id="TITLE">%s</xliff:g>."</string>
-    <string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"Trådlös surfzon"</string>
+    <string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"Surfzon"</string>
     <string name="accessibility_managed_profile" msgid="6613641363112584120">"Jobbprofil"</string>
     <string name="tuner_warning_title" msgid="7094689930793031682">"Kul för vissa, inte för alla"</string>
     <string name="tuner_warning" msgid="8730648121973575701">"Du kan använda inställningarna för systemgränssnitt för att justera användargränssnittet i Android. Dessa experimentfunktioner kan när som helst ändras, sluta fungera eller försvinna. Använd med försiktighet."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Det finns inga aviseringskategorier i appen"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Det går inte att inaktivera aviseringar från den här appen"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 av <xliff:g id="NUMBER_1">%d</xliff:g> aviseringskategorier från denna app</item>
-      <item quantity="one">1 av <xliff:g id="NUMBER_0">%d</xliff:g> aviseringskategorier från denna app</item>
+      <item quantity="other">1 av <xliff:g id="NUMBER_1">%s</xliff:g> aviseringskategorier från denna app</item>
+      <item quantity="one">1 av <xliff:g id="NUMBER_0">%s</xliff:g> aviseringskategorier från denna app</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d minut</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Batteriförbrukning"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Batterisparläget är inte tillgängligt vid laddning"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Batterisparläge"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Batterisparläget är inte tillgängligt vid laddning"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Batterisparläge"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Minskar prestanda och bakgrundsdata"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Knappen <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Start"</string>
@@ -725,10 +725,10 @@
     <string name="pip_phone_expand" msgid="5889780005575693909">"Utöka"</string>
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Minimera"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Stäng"</string>
-    <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Tryck och dra nedåt för att ignorera"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Bild-i-bild-meny"</string>
+    <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Tryck och dra nedåt för att avvisa"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Meny"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> visas i bild-i-bild"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Om du inte vill att den här funktionen används för <xliff:g id="NAME">%s</xliff:g> öppnar du inställningarna genom att trycka. Sedan inaktiverar du funktionen."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Om du inte vill att den här funktionen används i <xliff:g id="NAME">%s</xliff:g> öppnar du inställningarna genom att trycka. Sedan inaktiverar du funktionen."</string>
     <string name="pip_play" msgid="1417176722760265888">"Spela upp"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pausa"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Hoppa till nästa"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Meny"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Appen <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Varningar"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Batteri"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Skärmdumpar"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Allmänna meddelanden"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Lagring"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Appar körs i bakgrunden"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tryck för information om batteri- och dataanvändning"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vill du inaktivera mobildatan?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Svaret kan inte verifieras av Inställningar eftersom en app skymmer en begäran om behörighet."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index cbc1980..18a248d 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -64,22 +64,22 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Alama ya kidole ya kitufe cha RSA ya kompyuta ni:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Ruhusu kutoka kwenye kompyuta hii kila wakati"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Utatuzi wa USB hauruhusiwi"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Mtumiaji aliyeingia katika kifaa hiki kwa sasa hawezi kuwasha utatuzi wa USB. Ili uweze kutumia kipengele hiki, tafadhali badili utumie mtumiaji Msimamizi."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Mtumiaji aliyeingia katika akaunti kwa kutumia kifaa hiki kwa sasa hawezi kuwasha utatuzi wa USB. Ili utumie kipengele hiki, tumia akaunti ya mtumiaji wa msingi."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Kuza ili kujaza skrini"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Tanua ili kujaza skrini"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Inahifadhi picha ya skrini..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Inahifadhi picha ya skrini..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Picha ya skrini inahifadhiwa"</string>
     <string name="screenshot_saved_title" msgid="6461865960961414961">"Picha ya skrini imenaswa."</string>
-    <string name="screenshot_saved_text" msgid="2685605830386712477">"Gonga ili utazame picha ya skrini uliyohifadhi."</string>
+    <string name="screenshot_saved_text" msgid="2685605830386712477">"Gusa ili utazame picha ya skrini uliyohifadhi."</string>
     <string name="screenshot_failed_title" msgid="705781116746922771">"Haikuweza kunasa picha ya skrini"</string>
     <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"Hitilafu imetokea wakati wa kuhifadhi picha ya skrini."</string>
     <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"Haina nafasi ya kutosha kuhifadhi picha ya skrini."</string>
     <string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"Programu au shirika lako halikuruhusu kupiga picha za skrini"</string>
     <string name="usb_preference_title" msgid="6551050377388882787">"Machaguo ya uhamisho wa faili la USB"</string>
-    <string name="use_mtp_button_title" msgid="4333504413563023626">"Angika kama kichezeshi cha midia (MTP)"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"Angika kama kichezaji cha maudhui (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7517127540301625751">"Angika kama kamera (PTP)"</string>
-    <string name="installer_cd_button_title" msgid="2312667578562201583">"Sakinisha programu ya Kuhamisha Faili ya Android ya Mac"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Weka programu ya Kuhamisha Faili inayotumika kwenye Mac"</string>
     <string name="accessibility_back" msgid="567011538994429120">"Nyuma"</string>
     <string name="accessibility_home" msgid="8217216074895377641">"Nyumbani"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menyu"</string>
@@ -284,7 +284,7 @@
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Mbinu ya uingizaji"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Kutambua Eneo"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Kitambua eneo kimezimwa"</string>
-    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Kifaa cha midia"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Kifaa cha faili"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Simu za Dharura Pekee"</string>
     <string name="quick_settings_settings_label" msgid="5326556592578065401">"Mipangilio"</string>
@@ -353,14 +353,14 @@
     <string name="description_target_search" msgid="3091587249776033139">"Tafuta"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Sogeza juu kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Sogeza kushoto kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Hutasumbuliwa na sauti na mitetemo, isipokuwa kengele, vikumbusho, matukio na watu wanaokupigia simu ambao umechagua. Bado utasikia chochote utakachochagua kucheza, ikiwa ni pamoja na muziki, video na michezo."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Hutasumbuliwa na sauti na mitetemo, isipokuwa kengele. Bado utasikia chochote utakachochagua kucheza, ikiwa ni pamoja na muziki, video na michezo."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Hutasumbuliwa na sauti na mitetemo, isipokuwa kengele, vikumbusho, matukio na simu zinazopigwa na watu uliobainisha. Bado utasikia chochote utakachochagua kucheza, ikiwa ni pamoja na muziki, video na michezo."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Hutasumbuliwa na sauti na mitetemo, isipokuwa kengele. Bado utasikia chochote utakachochagua kucheza, ikiwa ni pamoja na muziki, video na michezo."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Badilisha upendavyo"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Hatua hii huzuia sauti na mitetemo YOTE, ikiwa ni pamoja na ile inayotokana na kengele, muziki, video na michezo. Bado utaweza kupiga simu."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Hatua hii huzuia mitetemo na sauti ZOTE, ikiwa ni pamoja na inayotokana na kengele, muziki video na michezo. Bado utaweza kupiga simu."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Hatua hii huzuia sauti na mitetemo YOTE, ikiwa ni pamoja na ile inayotokana na kengele, muziki, video na michezo."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>+"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Arifa zisizo za dharura sana ziko hapo chini"</string>
-    <string name="notification_tap_again" msgid="7590196980943943842">"Gonga tena ili ufungue"</string>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Gusa tena ili ufungue"</string>
     <string name="keyguard_unlock" msgid="8043466894212841998">"Telezesha kidole ili ufungue"</string>
     <string name="do_disclosure_generic" msgid="5615898451805157556">"Kifaa hiki kinasimamiwa na shirika lako"</string>
     <string name="do_disclosure_with_name" msgid="5640615509915445501">"Kifaa hiki kinadhibitiwa na <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -384,7 +384,7 @@
     <string name="user_add_user" msgid="5110251524486079492">"Ongeza mtumiaji"</string>
     <string name="user_new_user_name" msgid="426540612051178753">"Mtumiaji mpya"</string>
     <string name="guest_nickname" msgid="8059989128963789678">"Aliyealikwa"</string>
-    <string name="guest_new_guest" msgid="600537543078847803">"Ongeza aliyealikwa"</string>
+    <string name="guest_new_guest" msgid="600537543078847803">"Ongeza mgeni"</string>
     <string name="guest_exit_guest" msgid="7187359342030096885">"Ondoa aliyealikwa"</string>
     <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"Ungependa kumwondoa aliyealikwa?"</string>
     <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"Data na programu zote katika kipindi hiki zitafutwa."</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Pata maelezo zaidi"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Umeunganishwa kwenye <xliff:g id="VPN_APP">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Fungua Mipangilio ya VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Fungua mipangilio ya VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Fungua vitambulisho vinavyoaminika"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Msimamizi wako amewasha kumbukumbu ya kuingia mtandaoni ambayo hufuatilia shughuli kwenye kifaa chako.\n\nKwa maelezo zaidi, wasiliana na msimamizi wako."</string>
@@ -476,7 +476,7 @@
     <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Hapana, asante"</string>
     <string name="hidden_notifications_setup" msgid="41079514801976810">"Sanidi"</string>
     <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
-    <string name="volume_zen_end_now" msgid="6930243045593601084">"Zima sasa"</string>
+    <string name="volume_zen_end_now" msgid="6930243045593601084">"Izime sasa"</string>
     <string name="accessibility_volume_expand" msgid="5946812790999244205">"Panua"</string>
     <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Kunja"</string>
     <string name="screen_pinning_title" msgid="3273740381976175811">"Skrini imebandikwa"</string>
@@ -497,11 +497,11 @@
     <string name="stream_bluetooth_sco" msgid="2055645746402746292">"Bluetooth"</string>
     <string name="stream_dtmf" msgid="2447177903892477915">"Masafa ya ishara ya kampuni ya simu"</string>
     <string name="stream_accessibility" msgid="301136219144385106">"Zana za walio na matatizo ya kuona au kusikia"</string>
-    <string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Gonga ili urejeshe."</string>
-    <string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Gonga ili uweke mtetemo. Huenda ikakomesha huduma za zana za walio na matatizo ya kuona au kusikia."</string>
-    <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Gonga ili ukomeshe. Huenda ikakomesha huduma za zana za walio na matatizo ya kuona au kusikia."</string>
-    <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Gonga ili uweke mtetemo."</string>
-    <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Gonga ili usitishe."</string>
+    <string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. Gusa ili urejeshe."</string>
+    <string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. Gusa ili uweke mtetemo. Huenda ikakomesha huduma za zana za walio na matatizo ya kuona au kusikia."</string>
+    <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. Gusa ili ukomeshe. Huenda ikakomesha huduma za zana za walio na matatizo ya kuona au kusikia."</string>
+    <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. Gusa ili uweke mtetemo."</string>
+    <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. Gusa ili usitishe."</string>
     <string name="volume_dialog_accessibility_shown_message" msgid="1834631467074259998">"Inaonyesha %s ya vidhibiti vya sauti. Telezesha kidole juu ili uondoe."</string>
     <string name="volume_dialog_accessibility_dismissed_message" msgid="51543526013711399">"Imeficha vidhibiti vya sauti"</string>
     <string name="system_ui_tuner" msgid="708224127392452018">"Kirekebishi cha kiolesura cha mfumo"</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Programu hii haina aina za arifa"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Arifa kutoka kwenye programu hii haziwezi kuzimwa"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">Aina 1 ya arifa kati ya <xliff:g id="NUMBER_1">%d</xliff:g> kutoka kwenye kifaa hiki</item>
-      <item quantity="one">Aina 1 ya arifa kati ya <xliff:g id="NUMBER_0">%d</xliff:g> kutoka kwenye kifaa hiki</item>
+      <item quantity="other">Aina 1 ya arifa kati ya <xliff:g id="NUMBER_1">%s</xliff:g> kutoka kwenye kifaa hiki</item>
+      <item quantity="one">Aina 1 ya arifa kati ya <xliff:g id="NUMBER_0">%s</xliff:g> kutoka kwenye kifaa hiki</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">Dakika %d</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Matumizi ya betri"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Kiokoa Betri hakipatikani unapochaji betri"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Kiokoa Betri"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Kiokoa betri hakipatikani unapochaji betri"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Kiokoa betri"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Hupunguza data ya chini chini na utendaji"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Kitufe cha <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Mwanzo"</string>
@@ -596,8 +596,8 @@
     <string name="keyboard_key_dpad_left" msgid="1346446024676962251">"Kushoto"</string>
     <string name="keyboard_key_dpad_right" msgid="3317323247127515341">"Kulia"</string>
     <string name="keyboard_key_dpad_center" msgid="2566737770049304658">"Katikati"</string>
-    <string name="keyboard_key_tab" msgid="3871485650463164476">"Sogeza"</string>
-    <string name="keyboard_key_space" msgid="2499861316311153293">"Nafasi"</string>
+    <string name="keyboard_key_tab" msgid="3871485650463164476">"Tab"</string>
+    <string name="keyboard_key_space" msgid="2499861316311153293">"Space"</string>
     <string name="keyboard_key_enter" msgid="5739632123216118137">"Enter"</string>
     <string name="keyboard_key_backspace" msgid="1559580097512385854">"Nafasinyuma"</string>
     <string name="keyboard_key_media_play_pause" msgid="3861975717393887428">"Cheza/Sitisha"</string>
@@ -697,9 +697,9 @@
     <string name="accessibility_action_divider_top_50" msgid="6385859741925078668">"Juu 50%"</string>
     <string name="accessibility_action_divider_top_30" msgid="6201455163864841205">"Juu 30%"</string>
     <string name="accessibility_action_divider_bottom_full" msgid="301433196679548001">"Skrini nzima ya chini"</string>
-    <string name="accessibility_qs_edit_tile_label" msgid="8374924053307764245">"Nafasi ya <xliff:g id="POSITION">%1$d</xliff:g>, <xliff:g id="TILE_NAME">%2$s</xliff:g>. Gonga mara mbili ili ubadilishe."</string>
-    <string name="accessibility_qs_edit_add_tile_label" msgid="8133209638023882667">"<xliff:g id="TILE_NAME">%1$s</xliff:g>. Gonga mara mbili ili uongeze."</string>
-    <string name="accessibility_qs_edit_position_label" msgid="5055306305919289819">"Nafasi ya <xliff:g id="POSITION">%1$d</xliff:g>. Gonga mara mbili ili uchague."</string>
+    <string name="accessibility_qs_edit_tile_label" msgid="8374924053307764245">"Nafasi ya <xliff:g id="POSITION">%1$d</xliff:g>, <xliff:g id="TILE_NAME">%2$s</xliff:g>. Gusa mara mbili ili ubadilishe."</string>
+    <string name="accessibility_qs_edit_add_tile_label" msgid="8133209638023882667">"<xliff:g id="TILE_NAME">%1$s</xliff:g>. Gusa mara mbili ili uongeze."</string>
+    <string name="accessibility_qs_edit_position_label" msgid="5055306305919289819">"Nafasi ya <xliff:g id="POSITION">%1$d</xliff:g>. Gusa mara mbili ili uchague."</string>
     <string name="accessibility_qs_edit_move_tile" msgid="2461819993780159542">"Hamisha <xliff:g id="TILE_NAME">%1$s</xliff:g>"</string>
     <string name="accessibility_qs_edit_remove_tile" msgid="7484493384665907197">"Ondoa <xliff:g id="TILE_NAME">%1$s</xliff:g>"</string>
     <string name="accessibility_qs_edit_tile_added" msgid="8050200862063548309">"<xliff:g id="TILE_NAME">%1$s</xliff:g> imeongezwa kwenye nafasi ya <xliff:g id="POSITION">%2$d</xliff:g>"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Punguza"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Funga"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Buruta ili uondoe"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menyu ya picha ndani ya picha"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menyu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> iko katika hali ya picha ndani ya picha nyingine"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Ikiwa hutaki <xliff:g id="NAME">%s</xliff:g> kutumia kipengele hiki, gonga ili ufungue mipangilio na ukizime."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Ikiwa hutaki <xliff:g id="NAME">%s</xliff:g> itumie kipengele hiki, gusa ili ufungue mipangilio na uizime."</string>
     <string name="pip_play" msgid="1417176722760265888">"Cheza"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Sitisha"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Ruka ufikie inayofuata"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menyu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Programu ya <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Arifa"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Betri"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Picha za skrini"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Ujumbe wa Jumla"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Hifadhi"</string>
@@ -772,6 +773,7 @@
     <string name="qs_dnd_keep" msgid="1825009164681928736">"Usibadilishe"</string>
     <string name="qs_dnd_replace" msgid="8019520786644276623">"Badilisha"</string>
     <string name="running_foreground_services_title" msgid="381024150898615683">"Programu zinatumika chinichini"</string>
-    <string name="running_foreground_services_msg" msgid="6326247670075574355">"Gonga ili upate maelezo kuhusu betri na matumizi ya data"</string>
+    <string name="running_foreground_services_msg" msgid="6326247670075574355">"Gusa ili upate maelezo kuhusu betri na matumizi ya data"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Ungependa kuzima data ya mtandao wa simu?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Kwa sababu programu nyingine inazuia ombi la ruhusa, hatuwezi kuthibitisha jibu lako katika Mipangilio."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sw372dp/dimens.xml b/packages/SystemUI/res/values-sw372dp/dimens.xml
new file mode 100644
index 0000000..635185d
--- /dev/null
+++ b/packages/SystemUI/res/values-sw372dp/dimens.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2006, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+-->
+<resources>
+    <dimen name="nav_content_padding">8dp</dimen>
+    <dimen name="rounded_corner_content_padding">8dp</dimen>
+</resources>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index 7054740..a46facf 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -19,10 +19,10 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="7164937344850004466">"UI அமைப்பு"</string>
+    <string name="app_label" msgid="7164937344850004466">"சாதனத்தின் UI"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"அழி"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"பட்டியலில் இருந்து அகற்று"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"பயன்பாட்டுத் தகவல்"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ஆப்ஸ் தகவல்"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"சமீபத்திய திரைகள் இங்கு தோன்றும்"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"சமீபத்திய பயன்பாடுகளை நிராகரி"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"பின்வருவது கணினியின் RSA விசை கைரேகையாகும்:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"இந்தக் கணினியிலிருந்து எப்போதும் அனுமதி"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB பிழைத்திருத்தம் அனுமதிக்கப்படவில்லை"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"தற்போது இந்தச் சாதனத்தில் உள்நுழைந்துள்ள பயனரால் USB பிழைத்திருத்தத்தை இயக்க முடியாது. இந்த அம்சத்தைப் பயன்படுத்த, நிர்வாகிப் பயனருக்கு மாறவும்."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"தற்போது இந்தச் சாதனத்தில் உள்நுழைந்துள்ள பயனரால் USB பிழைத்திருத்தத்தை இயக்க முடியாது. இந்த அம்சத்தை இயக்க, முதன்மைப் பயனருக்கு மாறவும்."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"திரையை நிரப்ப அளவை மாற்று"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"திரையை நிரப்ப இழு"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"ஸ்க்ரீன் ஷாட்டைச் சேமிக்கிறது…"</string>
@@ -152,9 +152,9 @@
     <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
     <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"வைஃபை"</string>
     <string name="accessibility_no_sim" msgid="8274017118472455155">"சிம் இல்லை."</string>
-    <string name="accessibility_cell_data" msgid="5326139158682385073">"மொபைல் தரவு"</string>
-    <string name="accessibility_cell_data_on" msgid="5927098403452994422">"மொபைல் தரவு இயக்கப்பட்டது"</string>
-    <string name="accessibility_cell_data_off" msgid="443267573897409704">"மொபைல் தரவு முடக்கப்பட்டது"</string>
+    <string name="accessibility_cell_data" msgid="5326139158682385073">"மொபைல் டேட்டா"</string>
+    <string name="accessibility_cell_data_on" msgid="5927098403452994422">"மொபைல் டேட்டா இயக்கப்பட்டது"</string>
+    <string name="accessibility_cell_data_off" msgid="443267573897409704">"மொபைல் டேட்டா முடக்கப்பட்டது"</string>
     <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"புளூடூத் டெதெரிங்."</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"விமானப் பயன்முறை."</string>
     <string name="accessibility_vpn_on" msgid="5993385083262856059">"VPN இயக்கத்தில் உள்ளது."</string>
@@ -184,10 +184,10 @@
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"அறிவிப்பு நிராகரிக்கப்பட்டது."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"அறிவிப்பு விவரம்."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"உடனடி அமைப்பு."</string>
-    <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"பூட்டுத் திரை."</string>
+    <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"லாக் ஸ்கிரீன்."</string>
     <string name="accessibility_desc_settings" msgid="3417884241751434521">"அமைப்பு"</string>
     <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"மேலோட்டப் பார்வை."</string>
-    <string name="accessibility_desc_work_lock" msgid="4288774420752813383">"பணிப் பூட்டுத் திரை"</string>
+    <string name="accessibility_desc_work_lock" msgid="4288774420752813383">"பணி லாக் ஸ்கிரீன்"</string>
     <string name="accessibility_desc_close" msgid="7479755364962766729">"மூடு"</string>
     <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"வைஃபை முடக்கப்பட்டது."</string>
@@ -201,7 +201,7 @@
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது, முதன்மை மட்டும்."</string>
     <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது, அறிவிப்புகள் வேண்டாம்."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது, அலாரங்கள் மட்டும்."</string>
-    <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"தொந்தரவு செய்ய வேண்டாம்."</string>
+    <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"தொந்தரவு செய்யாதே."</string>
     <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"தொந்தரவு செய்ய வேண்டாம் என்பது முடக்கப்பட்டது."</string>
     <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"தொந்தரவு செய்ய வேண்டாம் என்பது முடக்கப்பட்டது."</string>
     <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது."</string>
@@ -234,15 +234,15 @@
     <string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"பணிப் பயன்முறை இயக்கப்பட்டுள்ளது."</string>
     <string name="accessibility_quick_settings_work_mode_changed_off" msgid="5605534876107300711">"பணிப் பயன்முறை முடக்கப்பட்டது."</string>
     <string name="accessibility_quick_settings_work_mode_changed_on" msgid="249840330756998612">"பணிப் பயன்முறை இயக்கப்பட்டது."</string>
-    <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"தரவுச் சேமிப்பான் முடக்கப்பட்டது."</string>
-    <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"தரவுச் சேமிப்பான் இயக்கப்பட்டது."</string>
+    <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"டேட்டா சேமிப்பான் முடக்கப்பட்டது."</string>
+    <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"டேட்டா சேமிப்பான் இயக்கப்பட்டது."</string>
     <string name="accessibility_brightness" msgid="8003681285547803095">"திரை பிரகாசம்"</string>
-    <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"சார்ஜ் ஏறுகிறது"</string>
+    <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"சார்ஜ் ஆகிறது"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G டேட்டா இடைநிறுத்தப்பட்டது"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G டேட்டா இடைநிறுத்தப்பட்டது"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"மொபைல் தரவு இடைநிறுத்தப்பட்டுள்ளது"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"மொபைல் டேட்டா இடைநிறுத்தப்பட்டுள்ளது"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"தரவு இடைநிறுத்தப்பட்டது"</string>
-    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"நீங்கள் அமைத்த தரவு வரம்பை அடைந்துவிட்டீர்கள். இப்போது மொபைல் தரவைப் பயன்படுத்தவில்லை.\n\nபயன்படுத்தத் தொடங்கினால், தரவு உபயோகத்திற்குக் கட்டணங்கள் விதிக்கப்படலாம்."</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"நீங்கள் அமைத்த டேட்டா வரம்பை அடைந்துவிட்டீர்கள். இப்போது மொபைல் டேட்டாவைப் பயன்படுத்தவில்லை.\n\nமீண்டும் மொபைல் டேட்டாவைப் பயன்படுத்தத் தொடங்கினால், டேட்டா பயன்பாட்டிற்குக் கட்டணம் விதிக்கப்படலாம்."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"மீண்டும் தொடங்கு"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"இணைய இணைப்பு இல்லை"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"வைஃபை இணைக்கப்பட்டது"</string>
@@ -266,7 +266,7 @@
     <string name="dessert_case" msgid="1295161776223959221">"இனிப்பு வடிவங்கள்"</string>
     <string name="start_dreams" msgid="5640361424498338327">"ஸ்கிரீன் சேவர்"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"ஈதர்நெட்"</string>
-    <string name="quick_settings_dnd_label" msgid="8735855737575028208">"தொந்தரவு செய்ய வேண்டாம்"</string>
+    <string name="quick_settings_dnd_label" msgid="8735855737575028208">"தொந்தரவு செய்யாதே"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"முதன்மை மட்டும்"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"அலாரங்கள் மட்டும்"</string>
     <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"அறிவிப்புகள் வேண்டாம்"</string>
@@ -298,7 +298,7 @@
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"வைஃபையை முடக்கு"</string>
     <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"வைஃபை இயக்கத்தில்"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"வைஃபை நெட்வொர்க்குகள் இல்லை"</string>
-    <string name="quick_settings_cast_title" msgid="7709016546426454729">"திரையிடு"</string>
+    <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string>
     <string name="quick_settings_casting" msgid="6601710681033353316">"அனுப்புகிறது"</string>
     <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"பெயரிடப்படாத சாதனம்"</string>
     <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"திரையிடத் தயார்"</string>
@@ -316,8 +316,8 @@
     <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ஹாட்ஸ்பாட்"</string>
     <string name="quick_settings_notifications_label" msgid="4818156442169154523">"அறிவிப்புகள்"</string>
     <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"டார்ச் லைட்"</string>
-    <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"மொபைல் தரவு"</string>
-    <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"தரவுப் பயன்பாடு"</string>
+    <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"மொபைல் டேட்டா"</string>
+    <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"டேட்டா பயன்பாடு"</string>
     <string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"மீதமுள்ள தரவு"</string>
     <string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"வரம்பைக் கடந்தது"</string>
     <string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"பயன்படுத்தியது - <xliff:g id="DATA_USED">%s</xliff:g>"</string>
@@ -346,18 +346,18 @@
   <string-array name="recents_blacklist_array">
   </string-array>
     <string name="expanded_header_battery_charged" msgid="5945855970267657951">"சார்ஜ் செய்யப்பட்டது"</string>
-    <string name="expanded_header_battery_charging" msgid="205623198487189724">"சார்ஜாகிறது"</string>
+    <string name="expanded_header_battery_charging" msgid="205623198487189724">"சார்ஜ் ஆகிறது"</string>
     <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"முழுவதும் சார்ஜாக <xliff:g id="CHARGING_TIME">%s</xliff:g> ஆகும்"</string>
     <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"சார்ஜ் ஏறவில்லை"</string>
     <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"பிணையம்\nகண்காணிக்கப்படலாம்"</string>
     <string name="description_target_search" msgid="3091587249776033139">"தேடு"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> க்கு மேலாக இழுக்கவும்."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> க்கு இடதுபக்கமாக இழுக்கவும்."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"அலாரங்கள், நினைவூட்டல்கள், நிகழ்வுகள் மற்றும் குறிப்பிட்ட அழைப்பாளர்களைத் தவிர்த்து, பிற ஒலிகள் மற்றும் அதிர்வுகளின் தொந்தரவு இருக்காது. எனினும், நீங்கள் எதையேனும் (இசை, வீடியோக்கள் மற்றும் கேம்கள் உட்பட) ஒலிக்கும்படி தேர்ந்தெடுத்திருந்தால், அவை வழக்கம் போல் ஒலிக்கும்."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"அலாரங்களைத் தவிர்த்து, பிற ஒலிகள் மற்றும் அதிர்வுகளின் தொந்தரவு இருக்காது. எனினும், நீங்கள் எதையேனும் (இசை, வீடியோக்கள் மற்றும் கேம்கள் உட்பட) ஒலிக்கும்படி தேர்ந்தெடுத்திருந்தால், அவை வழக்கம் போல் ஒலிக்கும்."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"அலாரங்கள், நினைவூட்டல்கள், நிகழ்வுகள் மற்றும் குறிப்பிட்ட அழைப்பாளர்களைத் தவிர்த்து, பிற ஒலிகள் மற்றும் அதிர்வுகளின் தொந்தரவு இருக்காது. எனினும், நீங்கள் எதையேனும் (இசை, வீடியோக்கள், கேம்ஸ் போன்றவை) ஒலிக்கும்படி தேர்ந்தெடுத்திருந்தால், அவை வழக்கம் போல் ஒலிக்கும்."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"அலாரங்களைத் தவிர்த்து, பிற ஒலிகள் மற்றும் அதிர்வுகளின் தொந்தரவு இருக்காது. எனினும், நீங்கள் எதையேனும் (இசை, வீடியோக்கள், கேம்ஸ் போன்றவை) ஒலிக்கும்படி தேர்ந்தெடுத்திருந்தால், அவை வழக்கம் போல் ஒலிக்கும்."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"தனிப்பயனாக்கு"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"இது அலாரங்கள், இசை, வீடியோக்கள் மற்றும் கேம்கள் உட்பட எல்லா ஒலிகளையும் அதிர்வுகளையும் தடுக்கும். இருப்பினும் நீங்கள் அழைப்புகளைச் செய்யலாம்."</string>
-    <string name="zen_silence_introduction" msgid="3137882381093271568">"இது அலாரங்கள், இசை, வீடியோக்கள் மற்றும் கேம்கள் உட்பட எல்லா ஒலிகளையும் அதிர்வுகளையும் தடுக்கும்."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"இது அலாரங்கள், இசை, வீடியோக்கள் மற்றும் கேம்ஸ் உட்பட எல்லா ஒலிகளையும் அதிர்வுகளையும் தடுக்கும். எனினும், உங்களால் ஃபோன் அழைப்புகளைச் செய்ய முடியும்."</string>
+    <string name="zen_silence_introduction" msgid="3137882381093271568">"இது அலாரங்கள், இசை, வீடியோக்கள் மற்றும் கேம்ஸ் உட்பட எல்லா ஒலிகளையும் அதிர்வுகளையும் தடுக்கும்."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"அவசர நிலைக் குறைவான அறிவிப்புகள் கீழே உள்ளன"</string>
     <string name="notification_tap_again" msgid="7590196980943943842">"திறக்க, மீண்டும் தட்டவும்"</string>
@@ -383,8 +383,8 @@
     <string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"சுயவிவரத்தைக் காட்டு"</string>
     <string name="user_add_user" msgid="5110251524486079492">"பயனரைச் சேர்"</string>
     <string name="user_new_user_name" msgid="426540612051178753">"புதியவர்"</string>
-    <string name="guest_nickname" msgid="8059989128963789678">"கெஸ்ட்"</string>
-    <string name="guest_new_guest" msgid="600537543078847803">"அழைக்கப்பட்டவரைச் சேர்"</string>
+    <string name="guest_nickname" msgid="8059989128963789678">"வேறொருவர்"</string>
+    <string name="guest_new_guest" msgid="600537543078847803">"வேறொருவரைச் சேர்"</string>
     <string name="guest_exit_guest" msgid="7187359342030096885">"அழைக்கப்பட்டவரை அகற்று"</string>
     <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"அழைக்கப்பட்டவரை அகற்றவா?"</string>
     <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"இந்த அமர்வின் எல்லா பயன்பாடுகளும், தரவும் நீக்கப்படும்."</string>
@@ -393,7 +393,7 @@
     <string name="guest_wipe_session_message" msgid="8476238178270112811">"உங்கள் அமர்வைத் தொடர விருப்பமா?"</string>
     <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"மீண்டும் தொடங்கு"</string>
     <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"தொடரவும்"</string>
-    <string name="guest_notification_title" msgid="1585278533840603063">"கெஸ்ட்"</string>
+    <string name="guest_notification_title" msgid="1585278533840603063">"வேறொருவர்"</string>
     <string name="guest_notification_text" msgid="335747957734796689">"பயன்பாடுகளையும் தரவையும் நீக்க, விருந்தினர் பயனரை அகற்றவும்"</string>
     <string name="guest_notification_remove_action" msgid="8820670703892101990">"அழைக்கப்பட்டவரை அகற்றவா?"</string>
     <string name="user_logout_notification_title" msgid="1453960926437240727">"பயனரை வெளியேற்று"</string>
@@ -439,8 +439,8 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPNஐ முடக்கு"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPNஐத் துண்டி"</string>
     <string name="monitoring_button_view_policies" msgid="100913612638514424">"கொள்கைகளைக் காட்டு"</string>
-    <string name="monitoring_description_named_management" msgid="5281789135578986303">"சாதனத்தை <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> நிர்வகிக்கிறது.\n\nஉங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், பயன்பாடுகள், உங்கள் சாதனத்துடன் தொடர்புடைய தரவு, சாதனங்களின் இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்.\n\nமேலும் தகவலுக்கு, உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
-    <string name="monitoring_description_management" msgid="4573721970278370790">"சாதனத்தை உங்கள் நிறுவனம் நிர்வகிக்கிறது.\n\nஉங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், பயன்பாடுகள், உங்கள் சாதனத்துடன் தொடர்புடைய தரவு, சாதனங்களின் இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்.\n\nமேலும் தகவலுக்கு, உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
+    <string name="monitoring_description_named_management" msgid="5281789135578986303">"சாதனத்தை <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> நிர்வகிக்கிறது.\n\nஉங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், ஆப்ஸ், உங்கள் சாதனத்துடன் தொடர்புடைய டேட்டா, சாதனங்களின் இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்.\n\nமேலும் தகவலுக்கு, உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
+    <string name="monitoring_description_management" msgid="4573721970278370790">"சாதனத்தை உங்கள் நிறுவனம் நிர்வகிக்கிறது.\n\nஉங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், ஆப்ஸ், உங்கள் சாதனத்துடன் தொடர்புடைய டேட்டா, சாதனங்களின் இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்.\n\nமேலும் தகவலுக்கு, உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
     <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"உங்கள் நிறுவனம் இந்தச் சாதனத்தில் சான்றிதழ் அங்கீகாரத்தை நிறுவியுள்ளது. உங்களின் பாதுகாப்பான நெட்வொர்க் ட்ராஃபிக் கண்காணிக்கப்படலாம் அல்லது மாற்றப்படலாம்."</string>
     <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"உங்கள் நிறுவனம், பணி விவரத்தில் சான்றிதழ் அங்கீகாரத்தை நிறுவியுள்ளது. உங்களின் பாதுகாப்பான நெட்வொர்க் ட்ராஃபிக் கண்காணிக்கப்படலாம் அல்லது மாற்றப்படலாம்."</string>
     <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"இந்தச் சாதனத்தில் சான்றிதழ் அங்கீகாரம் நிறுவப்பட்டுள்ளது. உங்களின் பாதுகாப்பான நெட்வொர்க் ட்ராஃபிக் கண்காணிக்கப்படலாம் அல்லது மாற்றப்படலாம்."</string>
@@ -451,12 +451,12 @@
     <string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"மின்னஞ்சல்கள், பயன்பாடுகள், இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்கக்கூடிய <xliff:g id="VPN_APP">%1$s</xliff:g> உடன் உங்களின் தனிப்பட்ட சுயவிவரம் இணைக்கப்பட்டுள்ளது."</string>
     <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"உங்கள் சாதனத்தை நிர்வகிப்பது: <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
     <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"உங்கள் சாதனத்தை நிர்வகிக்க, <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> பயன்பாட்டை <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> பயன்படுத்தும்."</string>
-    <string name="monitoring_description_do_body" msgid="3639594537660975895">"உங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், பயன்பாடுகள், சாதனத்துடன் தொடர்புடைய தரவு, சாதன இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்."</string>
+    <string name="monitoring_description_do_body" msgid="3639594537660975895">"உங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், ஆப்ஸ், சாதனத்துடன் தொடர்புடைய டேட்டா, சாதன இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்."</string>
     <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"மேலும் அறிக"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளீர்கள். இந்தப் பயன்பாட்டால் மின்னஞ்சல்கள், பயன்பாடுகள், இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்க முடியும்."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN அமைப்புகளைத் திற"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN அமைப்புகளைத் திற"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"நம்பகமான அனுமதிச் சான்றுகளைத் திற"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"உங்கள் நிர்வாகி நெட்வொர்க் பதிவெடுத்தலை இயக்கியுள்ளார், இது சாதனத்தில் ட்ராஃபிக்கைக் கண்காணிக்கும்.\n\nமேலும் தகவலுக்கு, உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
@@ -489,7 +489,7 @@
     <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"மறை"</string>
     <string name="managed_profile_foreground_toast" msgid="5421487114739245972">"பணி சுயவிவரத்தைப் பயன்படுத்துகிறீர்கள்"</string>
     <string name="stream_voice_call" msgid="4410002696470423714">"அழைப்பு"</string>
-    <string name="stream_system" msgid="7493299064422163147">"அமைப்பு"</string>
+    <string name="stream_system" msgid="7493299064422163147">"சிஸ்டம்"</string>
     <string name="stream_ring" msgid="8213049469184048338">"ரிங் செய்"</string>
     <string name="stream_music" msgid="9086982948697544342">"மீடியா"</string>
     <string name="stream_alarm" msgid="5209444229227197703">"அலாரம்"</string>
@@ -547,8 +547,8 @@
     <string name="do_not_silence" msgid="6878060322594892441">"ஒலியை அனுமதி"</string>
     <string name="do_not_silence_block" msgid="4070647971382232311">"ஒலி அல்லது அறிவிப்பைத் தடுக்காதே"</string>
     <string name="tuner_full_importance_settings" msgid="3207312268609236827">"ஆற்றல்மிக்க அறிவிப்புக் கட்டுப்பாடுகள்"</string>
-    <string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"இயக்கத்தில்"</string>
-    <string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"முடக்கத்தில்"</string>
+    <string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"ஆன்"</string>
+    <string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"ஆஃப்"</string>
     <string name="power_notification_controls_description" msgid="4372459941671353358">"ஆற்றல்மிக்க அறிவிப்புக் கட்டுப்பாடுகள் மூலம், பயன்பாட்டின் அறிவிப்புகளுக்கு முக்கியத்துவ நிலையை (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="7506845022070889909">"அறிவிப்புகள்"</string>
     <string name="notification_channel_disabled" msgid="2139193533791840539">"இந்த அறிவிப்புகளை இனி பெறமாட்டீர்கள்"</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"இந்தப் பயன்பாட்டில் அறிவிப்பு வகைகள் இல்லை"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"இந்தப் பயன்பாட்டிலிருந்து அறிவிப்புகளைப் பெறுவதை முடக்க முடியாது"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">இந்தப் பயன்பாடு வழங்கும் <xliff:g id="NUMBER_1">%d</xliff:g> அறிவிப்பு வகைகளில் ஒரு அறிவிப்பு வகை</item>
-      <item quantity="one">இந்தப் பயன்பாடு வழங்கும் <xliff:g id="NUMBER_0">%d</xliff:g> அறிவிப்பு வகையில் ஒரு அறிவிப்பு வகை</item>
+      <item quantity="other">இந்தப் பயன்பாடு வழங்கும் <xliff:g id="NUMBER_1">%s</xliff:g> அறிவிப்பு வகைகளில் ஒரு அறிவிப்பு வகை</item>
+      <item quantity="one">இந்தப் பயன்பாடு வழங்கும் <xliff:g id="NUMBER_0">%s</xliff:g> அறிவிப்பு வகையில் ஒரு அறிவிப்பு வகை</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -584,9 +584,9 @@
       <item quantity="other">%d நிமிடங்கள்</item>
       <item quantity="one">%d நிமிடம்</item>
     </plurals>
-    <string name="battery_panel_title" msgid="7944156115535366613">"பேட்டரி உபயோகம்"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"சார்ஜ் செய்யும் போது பேட்டரி சேமிப்பானைப் பயன்படுத்த முடியாது"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"பேட்டரி சேமிப்பான்"</string>
+    <string name="battery_panel_title" msgid="7944156115535366613">"பேட்டரி பயன்பாடு"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"சார்ஜ் செய்யும் போது பேட்டரி சேமிப்பானைப் பயன்படுத்த முடியாது"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"பேட்டரி சேமிப்பான்"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"செயல்திறனையும் பின்புலத்தில் தரவு செயலாக்கப்படுவதையும் குறைக்கும்"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> பொத்தான்"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"ஹோம்"</string>
@@ -614,7 +614,7 @@
     <string name="keyboard_key_insert" msgid="8530501581636082614">"இன்சர்ட்"</string>
     <string name="keyboard_key_num_lock" msgid="5052537581246772117">"நம்பர் லாக்"</string>
     <string name="keyboard_key_numpad_template" msgid="8729216555174634026">"நம்பர் பேடு <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="keyboard_shortcut_group_system" msgid="6472647649616541064">"முறைமை"</string>
+    <string name="keyboard_shortcut_group_system" msgid="6472647649616541064">"சிஸ்டம்"</string>
     <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"முகப்பு"</string>
     <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"சமீபத்தியவை"</string>
     <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"முந்தையது"</string>
@@ -631,7 +631,7 @@
     <string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"YouTube"</string>
     <string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"கேலெண்டர்"</string>
     <string name="tuner_full_zen_title" msgid="4540823317772234308">"ஒலிக் கட்டுப்பாடுகளுடன் காட்டு"</string>
-    <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"தொந்தரவு செய்ய வேண்டாம்"</string>
+    <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"தொந்தரவு செய்யாதே"</string>
     <string name="volume_dnd_silent" msgid="4363882330723050727">"ஒலியளவுப் பொத்தான்களுக்கான குறுக்குவழி"</string>
     <string name="volume_up_silent" msgid="7141255269783588286">"ஒலியைக் கூட்டும் போது தொந்தரவு செய்ய வேண்டாம் என்பதை முடக்கு"</string>
     <string name="battery" msgid="7498329822413202973">"பேட்டரி"</string>
@@ -639,11 +639,11 @@
     <string name="headset" msgid="4534219457597457353">"ஹெட்செட்"</string>
     <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ஹெட்ஃபோன்கள் இணைக்கப்பட்டன"</string>
     <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ஹெட்செட் இணைக்கப்பட்டது"</string>
-    <string name="data_saver" msgid="5037565123367048522">"தரவுச்சேமிப்பான்"</string>
-    <string name="accessibility_data_saver_on" msgid="8454111686783887148">"தரவு சேமிப்பான் இயக்கப்பட்டது"</string>
-    <string name="accessibility_data_saver_off" msgid="8841582529453005337">"தரவு சேமிப்பான் முடக்கப்பட்டது"</string>
-    <string name="switch_bar_on" msgid="1142437840752794229">"இயக்கு"</string>
-    <string name="switch_bar_off" msgid="8803270596930432874">"முடக்கு"</string>
+    <string name="data_saver" msgid="5037565123367048522">"டேட்டா சேமிப்பான்"</string>
+    <string name="accessibility_data_saver_on" msgid="8454111686783887148">"டேட்டா சேமிப்பான் இயக்கப்பட்டது"</string>
+    <string name="accessibility_data_saver_off" msgid="8841582529453005337">"டேட்டா சேமிப்பான் முடக்கப்பட்டது"</string>
+    <string name="switch_bar_on" msgid="1142437840752794229">"ஆன்"</string>
+    <string name="switch_bar_off" msgid="8803270596930432874">"ஆஃப்"</string>
     <string name="nav_bar" msgid="1993221402773877607">"வழிசெலுத்தல் பட்டி"</string>
     <string name="nav_bar_layout" msgid="3664072994198772020">"தளவமைப்பு"</string>
     <string name="left_nav_bar_button_type" msgid="8555981238887546528">"கூடுதல் இடப்புறப் பொத்தான் வகை"</string>
@@ -721,14 +721,14 @@
     <string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> அமைப்புகளைத் திற."</string>
     <string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"அமைப்புகளின் வரிசை முறையைத் திருத்து."</string>
     <string name="accessibility_quick_settings_page" msgid="5032979051755200721">"பக்கம் <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>"</string>
-    <string name="tuner_lock_screen" msgid="5755818559638850294">"பூட்டுத் திரை"</string>
+    <string name="tuner_lock_screen" msgid="5755818559638850294">"லாக் ஸ்கிரீன்"</string>
     <string name="pip_phone_expand" msgid="5889780005575693909">"விரி"</string>
     <string name="pip_phone_minimize" msgid="1079119422589131792">"சிறிதாக்கு"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"மூடு"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"நிராகரிக்க, கீழே இழுக்கவும்"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"பிக்ச்சர்-இன்-பிக்ச்சர் மெனு"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"மெனு"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> தற்போது பிக்ச்சர்-இன்-பிக்ச்சரில் உள்ளது"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> இந்த அம்சத்தைப் பயன்படுத்த வேண்டாம் என நினைத்தால், அமைப்புகளைத் திறந்து அதை முடக்க, தட்டவும்."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> இந்த அம்சத்தைப் பயன்படுத்த வேண்டாம் என நினைத்தால், அமைப்புகளைத் திறந்து அதை முடக்க, தட்டவும்."</string>
     <string name="pip_play" msgid="1417176722760265888">"இயக்கு"</string>
     <string name="pip_pause" msgid="8881063404466476571">"இடைநிறுத்து"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"அடுத்ததற்குச் செல்"</string>
@@ -745,7 +745,7 @@
     <string name="lockscreen_unlock_right" msgid="1529992940510318775">"வலப்புறக் குறுக்குவழி மூலமாகவும் திறக்கும்"</string>
     <string name="lockscreen_none" msgid="4783896034844841821">"ஏதுமில்லை"</string>
     <string name="tuner_launch_app" msgid="1527264114781925348">"<xliff:g id="APP">%1$s</xliff:g>ஐத் துவக்கு"</string>
-    <string name="tuner_other_apps" msgid="4726596850501162493">"பிற பயன்பாடுகள்"</string>
+    <string name="tuner_other_apps" msgid="4726596850501162493">"பிற ஆப்ஸ்"</string>
     <string name="tuner_circle" msgid="2340998864056901350">"வட்டம்"</string>
     <string name="tuner_plus" msgid="6792960658533229675">"பிளஸ்"</string>
     <string name="tuner_minus" msgid="4806116839519226809">"மைனஸ்"</string>
@@ -754,14 +754,15 @@
     <string name="tuner_menu" msgid="191640047241552081">"மெனு"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> பயன்பாடு"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"விழிப்பூட்டல்கள்"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"பேட்டரி"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"ஸ்கிரீன் ஷாட்டுகள்"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"பொதுச் செய்திகள்"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"சேமிப்பிடம்"</string>
     <string name="instant_apps" msgid="6647570248119804907">"இன்ஸ்டண்ட் பயன்பாடுகள்"</string>
     <string name="instant_apps_message" msgid="8116608994995104836">"இன்ஸ்டண்ட் பயன்பாடுகளுக்கு நிறுவல் தேவையில்லை."</string>
-    <string name="app_info" msgid="6856026610594615344">"பயன்பாட்டுத் தகவல்"</string>
+    <string name="app_info" msgid="6856026610594615344">"ஆப்ஸ் தகவல்"</string>
     <string name="go_to_web" msgid="1106022723459948514">"இணையத்திற்குச் செல்"</string>
-    <string name="mobile_data" msgid="7094582042819250762">"மொபைல் தரவு"</string>
+    <string name="mobile_data" msgid="7094582042819250762">"மொபைல் டேட்டா"</string>
     <string name="wifi_is_off" msgid="1838559392210456893">"வைஃபை முடக்கத்தில் உள்ளது"</string>
     <string name="bt_is_off" msgid="2640685272289706392">"புளூடூத் முடக்கத்தில் உள்ளது"</string>
     <string name="dnd_is_off" msgid="6167780215212497572">"\"தொந்தரவு செய்ய வேண்டாம்\" முடக்கத்தில் உள்ளது"</string>
@@ -773,5 +774,6 @@
     <string name="qs_dnd_replace" msgid="8019520786644276623">"மாற்று"</string>
     <string name="running_foreground_services_title" msgid="381024150898615683">"பின்னணியில் இயங்கும் பயன்பாடுகள்"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"பேட்டரி மற்றும் தரவு உபயோக விவரங்களைக் காண, தட்டவும்"</string>
-    <string name="data_usage_disable_mobile" msgid="5116269981510015864">"மொபைல் தரவை முடக்கவா?"</string>
+    <string name="data_usage_disable_mobile" msgid="5116269981510015864">"மொபைல் டேட்டாவை முடக்கவா?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"அனுமதிக் கோரிக்கையைப் பயன்பாடு மறைப்பதால், அமைப்புகளால் உங்கள் பதிலைச் சரிபார்க்க முடியாது."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index 119e2e5..2c32fab 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -22,7 +22,7 @@
     <string name="app_label" msgid="7164937344850004466">"సిస్టమ్ UI"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"క్లియర్ చేయండి"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"జాబితా నుండి తీసివేయండి"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"అనువర్తన సమాచారం"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"యాప్ సమాచారం"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"మీ ఇటీవలి స్క్రీన్‌లు ఇక్కడ కనిపిస్తాయి"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ఇటీవలి అనువర్తనాలను తీసివేయండి"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
@@ -51,7 +51,7 @@
     <string name="bluetooth_tethered" msgid="7094101612161133267">"బ్లూటూత్ టీథర్ చేయబడింది"</string>
     <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ఇన్‌పుట్ పద్ధతులను సెటప్ చేయండి"</string>
     <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"భౌతిక కీబోర్డ్"</string>
-    <string name="usb_device_permission_prompt" msgid="834698001271562057">"USB పరికరాన్ని ప్రాప్యత చేయడానికి అనువర్తనాన్ని <xliff:g id="APPLICATION">%1$s</xliff:g> అనుమతించాలా?"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"USB పరికరాన్ని యాక్సెస్ చేయడానికి యాప్‌ <xliff:g id="APPLICATION">%1$s</xliff:g> అనుమతించాలా?"</string>
     <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"USB ఉపకరణాన్ని యాక్సెస్ చేయడానికి యాప్ <xliff:g id="APPLICATION">%1$s</xliff:g>ను అనుమతించాలా?"</string>
     <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"ఈ USB పరికరం కనెక్ట్ చేయబడినప్పుడు <xliff:g id="ACTIVITY">%1$s</xliff:g>ని తెరవాలా?"</string>
     <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"ఈ USB ఉపకరణం కనెక్ట్ చేయబడినప్పుడు <xliff:g id="ACTIVITY">%1$s</xliff:g>ని తెరవాలా?"</string>
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"ఇది కంప్యూటర్ యొక్క RSA కీ వేలిముద్ర:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"ఈ కంప్యూటర్ నుండి ఎల్లప్పుడూ అనుమతించు"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB డీబగ్గింగ్‌కి అనుమతి లేదు"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"ప్రస్తుతం ఈ పరికరంలో సైన్ ఇన్ చేసిన వినియోగదారు USB డీబగ్గింగ్‌ను ఆన్ చేయలేరు. ఈ లక్షణాన్ని ఉపయోగించడానికి, దయచేసి నిర్వాహక వినియోగదారుగా మారండి."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"ఈ పరికరానికి ప్రస్తుతం సైన్ ఇన్ చేసిన వినియోగదారు USB డీబగ్గింగ్ ఆన్ చేయలేరు. ఈ ఫీచర్ ఉపయోగించడానికి, ప్రాథమిక వినియోగదారుకి మారాలి."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"స్క్రీన్‌కు నింపేలా జూమ్ చేయండి"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"స్క్రీన్‌కు నింపేలా విస్తరించండి"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"స్క్రీన్‌షాట్‌ను సేవ్ చేస్తోంది…"</string>
@@ -83,9 +83,9 @@
     <string name="accessibility_back" msgid="567011538994429120">"వెనుకకు"</string>
     <string name="accessibility_home" msgid="8217216074895377641">"హోమ్"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"మెను"</string>
-    <string name="accessibility_accessibility_button" msgid="7601252764577607915">"ప్రాప్యత"</string>
+    <string name="accessibility_accessibility_button" msgid="7601252764577607915">"యాక్సెస్ సామర్థ్యం"</string>
     <string name="accessibility_recent" msgid="5208608566793607626">"అవలోకనం"</string>
-    <string name="accessibility_search_light" msgid="1103867596330271848">"శోధించు"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"వెతుకు"</string>
     <string name="accessibility_camera_button" msgid="8064671582820358152">"కెమెరా"</string>
     <string name="accessibility_phone_button" msgid="6738112589538563574">"ఫోన్"</string>
     <string name="accessibility_voice_assist_button" msgid="487611083884852965">"వాయిస్ అసిస్టెంట్"</string>
@@ -97,7 +97,7 @@
     <string name="voice_assist_label" msgid="3956854378310019854">"వాయిస్ అసిస్టెంట్‌ను తెరువు"</string>
     <string name="camera_label" msgid="7261107956054836961">"కెమెరాను తెరువు"</string>
     <string name="recents_caption_resize" msgid="3517056471774958200">"కొత్త విధి లేఅవుట్‌ను ఎంచుకోండి"</string>
-    <string name="cancel" msgid="6442560571259935130">"రద్దు చేయండి"</string>
+    <string name="cancel" msgid="6442560571259935130">"రద్దు చేయి"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"అనుకూలత జూమ్ బటన్."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"చిన్న స్క్రీన్ నుండి పెద్దదానికి జూమ్ చేయండి."</string>
     <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"బ్లూటూత్ కనెక్ట్ చేయబడింది."</string>
@@ -194,10 +194,10 @@
     <string name="accessibility_quick_settings_wifi_changed_on" msgid="6440117170789528622">"వైఫై ఆన్ చేయబడింది."</string>
     <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"మొబైల్ <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"బ్యాటరీ <xliff:g id="STATE">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_airplane_off" msgid="7786329360056634412">"ఎయిర్‌ప్లైన్ మోడ్ ఆఫ్‌లో ఉంది."</string>
-    <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"ఎయిర్‌ప్లైన్ మోడ్ ఆన్‌లో ఉంది."</string>
-    <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ఎయిర్‌ప్లైన్ మోడ్ ఆఫ్ చేయబడింది."</string>
-    <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ఎయిర్‌ప్లైన్ మోడ్ ఆన్ చేయబడింది."</string>
+    <string name="accessibility_quick_settings_airplane_off" msgid="7786329360056634412">"ఎయిర్‌ప్లేన్ మోడ్ ఆఫ్‌లో ఉంది."</string>
+    <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"ఎయిర్‌ప్లేన్ మోడ్ ఆన్‌లో ఉంది."</string>
+    <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ఎయిర్‌ప్లేన్ మోడ్ ఆఫ్ చేయబడింది."</string>
+    <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ఎయిర్‌ప్లేన్ మోడ్ ఆన్ చేయబడింది."</string>
     <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"అంతరాయం కలిగించవద్దు ఆన్‌లో ఉంది, ప్రాధాన్యత మాత్రమే."</string>
     <string name="accessibility_quick_settings_dnd_none_on" msgid="6882582132662613537">"అంతరాయం కలిగించవద్దు ఆన్‌లో ఉంది, మొత్తం నిశ్శబ్దం."</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="9152834845587554157">"అంతరాయం కలిగించవద్దు ఆన్‌లో ఉంది, అలారాలు మాత్రమే."</string>
@@ -332,7 +332,7 @@
     <string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"మీరు అన్నింటినీ తీసివేసారు"</string>
     <string name="recents_app_info_button_label" msgid="2890317189376000030">"అనువర్తన సమాచారం"</string>
     <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"స్క్రీన్ పిన్నింగ్"</string>
-    <string name="recents_search_bar_label" msgid="8074997400187836677">"శోధించు"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"వెతుకు"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>ని ప్రారంభించడం సాధ్యపడలేదు."</string>
     <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> సురక్షిత-మోడ్‌లో నిలిపివేయబడింది."</string>
     <string name="recents_stack_action_button_label" msgid="6593727103310426253">"అన్నీ తీసివేయి"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"శోధించండి"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> కోసం పైకి స్లైడ్ చేయండి."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> కోసం ఎడమవైపుకు స్లైడ్ చేయండి."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"మీరు పేర్కొనే అలారాలు, రిమైండర్‌లు, ఈవెంట్‌లు మరియు కాలర్‌ల నుండి మినహా మరే ఇతర ధ్వనులు మరియు వైబ్రేషన్‌లతో మీకు అంతరాయం కలగదు. మీరు ఇప్పటికీ సంగీతం, వీడియోలు మరియు గేమ్‌లతో సహా మీరు ప్లే చేయడానికి ఎంచుకున్నవి ఏవైనా వింటారు."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"అలారాలు నుండి మినహా మరే ఇతర ధ్వనులు మరియు వైబ్రేషన్‌లతో మీకు అంతరాయం కలగదు. మీరు ఇప్పటికీ సంగీతం, వీడియోలు మరియు గేమ్‌లతో సహా మీరు ప్లే చేయడానికి ఎంచుకున్నవి ఏవైనా వింటారు."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"మీరు పేర్కొనే అలారాలు, రిమైండర్‌లు, ఈవెంట్‌లు మరియు కాలర్‌ల నుండి మినహా మరే ఇతర ధ్వనులు మరియు వైబ్రేషన్‌లతో మీకు అంతరాయం కలగదు. మీరు ఇప్పటికీ సంగీతం, వీడియోలు మరియు గేమ్‌లతో సహా మీరు ప్లే చేయడానికి ఎంచుకున్నవి ఏవైనా వింటారు."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"అలారాలు నుండి మినహా మరే ఇతర ధ్వనులు మరియు వైబ్రేషన్‌లతో మీకు అంతరాయం కలగదు. మీరు ఇప్పటికీ సంగీతం, వీడియోలు మరియు గేమ్‌లతో సహా మీరు ప్లే చేయడానికి ఎంచుకున్నవి ఏవైనా వింటారు."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"అనుకూలీకరించు"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"ఇది అలారాలు, సంగీతం, వీడియోలు మరియు గేమ్‌లతో సహా అన్ని ధ్వనులు మరియు వైబ్రేషన్‌లను బ్లాక్ చేస్తుంది. మీరు ఇప్పటికీ ఫోన్ కాల్‌లు చేయగలుగుతారు."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"ఇది అలారాలు, సంగీతం, వీడియోలు మరియు గేమ్‌లతో సహా అన్ని ధ్వనులు మరియు వైబ్రేషన్‌లను బ్లాక్ చేస్తుంది. మీరు ఇప్పటికీ ఫోన్ కాల్‌లు చేయగలుగుతారు."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"ఇది అలారాలు, సంగీతం, వీడియోలు మరియు గేమ్‌లతో సహా అన్ని ధ్వనులు మరియు వైబ్రేషన్‌లను బ్లాక్ చేస్తుంది."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"తక్కువ అత్యవసర నోటిఫికేషన్‌లు దిగువన"</string>
@@ -439,8 +439,8 @@
     <string name="disable_vpn" msgid="4435534311510272506">"VPNని నిలిపివేయి"</string>
     <string name="disconnect_vpn" msgid="1324915059568548655">"VPNను డిస్‌కనెక్ట్ చేయి"</string>
     <string name="monitoring_button_view_policies" msgid="100913612638514424">"విధానాలను వీక్షించండి"</string>
-    <string name="monitoring_description_named_management" msgid="5281789135578986303">"మీ పరికరం <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> నిర్వహణలో ఉంది.\n\nమీ నిర్వాహకులు మీ పరికరం అనుబంధిత సెట్టింగ్‌లు, కార్పొరేట్ ప్రాప్యత, అనువర్తనాలు, డేటా మరియు మీ పరికర స్థాన సమాచారం పర్యవేక్షించగలరు మరియు నిర్వహించగలరు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకులను సంప్రదించండి."</string>
-    <string name="monitoring_description_management" msgid="4573721970278370790">"మీ పరికరం మీ సంస్థ నిర్వహణలో ఉంది.\n\nమీ నిర్వాహకులు మీ పరికరం అనుబంధిత సెట్టింగ్‌లు, కార్పొరేట్ ప్రాప్యత, అనువర్తనాలు, డేటాను మరియు మీ పరికర స్థాన సమాచారాన్ని పర్యవేక్షించగలరు మరియు నిర్వహించగలరు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకులను సంప్రదించండి."</string>
+    <string name="monitoring_description_named_management" msgid="5281789135578986303">"మీ పరికరం <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> నిర్వహణలో ఉంది.\n\nమీ నిర్వాహకులు మీ పరికరం అనుబంధిత సెట్టింగ్‌లు, కార్పొరేట్ యాక్సెస్, యాప్‌లు, డేటా మరియు మీ పరికర స్థాన సమాచారం పర్యవేక్షించగలరు మరియు నిర్వహించగలరు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకులను సంప్రదించండి."</string>
+    <string name="monitoring_description_management" msgid="4573721970278370790">"మీ పరికరం మీ సంస్థ నిర్వహణలో ఉంది.\n\nమీ నిర్వాహకులు మీ పరికరం అనుబంధిత సెట్టింగ్‌లు, కార్పొరేట్ యాక్సెస్, యాప్‌లు, డేటాను మరియు మీ పరికర స్థాన సమాచారాన్ని పర్యవేక్షించగలరు మరియు నిర్వహించగలరు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకులను సంప్రదించండి."</string>
     <string name="monitoring_description_management_ca_certificate" msgid="5202023784131001751">"ఈ పరికరంలో మీ సంస్థ ఒక ప్రమాణపత్ర అధికారాన్ని ఇన్‌స్టాల్ చేసింది. మీ సురక్షిత నెట్‌వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు."</string>
     <string name="monitoring_description_managed_profile_ca_certificate" msgid="4683248196789897964">"మీ కార్యాలయ ప్రొఫైల్‌లో మీ సంస్థ ఒక ప్రమాణపత్ర అధికారాన్ని ఇన్‌స్టాల్ చేసింది. మీ సురక్షిత నెట్‌వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు."</string>
     <string name="monitoring_description_ca_certificate" msgid="7886985418413598352">"ఈ పరికరంలో ప్రమాణపత్ర అధికారం ఇన్‌స్టాల్ చేయబడింది. మీ సురక్షిత నెట్‌వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు."</string>
@@ -451,12 +451,12 @@
     <string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"మీ వ్యక్తిగత ప్రొఫైల్ ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల <xliff:g id="VPN_APP">%1$s</xliff:g>కి కనెక్ట్ చేయబడింది."</string>
     <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"మీ పరికరం <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ద్వారా నిర్వహించబడుతోంది."</string>
     <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> మీ పరికరాన్ని నిర్వహించడానికి <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>ని ఉపయోగిస్తుంది."</string>
-    <string name="monitoring_description_do_body" msgid="3639594537660975895">"మీ పరికరంతో అనుబంధించబడిన సెట్టింగ్‌లు, కార్పొరేట్ ప్రాప్యత, అనువర్తనాలు, డేటా మరియు మీ పరికరం యొక్క స్థాన సమాచారాన్ని మీ నిర్వాహకులు పర్యవేక్షించగలరు మరియు నిర్వహించగలరు."</string>
+    <string name="monitoring_description_do_body" msgid="3639594537660975895">"మీ పరికరంతో అనుబంధించబడిన సెట్టింగ్‌లు, కార్పొరేట్ యాక్సెస్, యాప్‌లు, డేటా మరియు మీ పరికరం యొక్క స్థాన సమాచారాన్ని మీ నిర్వాహకులు పర్యవేక్షించగలరు మరియు నిర్వహించగలరు."</string>
     <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"మరింత తెలుసుకోండి"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"మీరు <xliff:g id="VPN_APP">%1$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN సెట్టింగ్‌లను తెరవండి"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN సెట్టింగ్‌లను తెరవండి"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"విశ్వసనీయ ఆధారాలను తెరువు"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్‌ని పర్యవేక్షించగల నెట్‌వర్క్ లాగింగ్‌ని ఆన్ చేసారు.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి."</string>
@@ -496,10 +496,10 @@
     <string name="stream_notification" msgid="2563720670905665031">"నోటిఫికేషన్"</string>
     <string name="stream_bluetooth_sco" msgid="2055645746402746292">"బ్లూటూత్"</string>
     <string name="stream_dtmf" msgid="2447177903892477915">"డ్యూయల్ మల్టీ టోన్ ఫ్రీక్వెన్సీ"</string>
-    <string name="stream_accessibility" msgid="301136219144385106">"ప్రాప్యత"</string>
+    <string name="stream_accessibility" msgid="301136219144385106">"యాక్సెస్ సామర్థ్యం"</string>
     <string name="volume_stream_content_description_unmute" msgid="4436631538779230857">"%1$s. అన్‌మ్యూట్ చేయడానికి నొక్కండి."</string>
-    <string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. వైబ్రేషన్‌కు సెట్ చేయడానికి నొక్కండి. ప్రాప్యత సేవలు మ్యూట్ చేయబడవచ్చు."</string>
-    <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. మ్యూట్ చేయడానికి నొక్కండి. ప్రాప్యత సేవలు మ్యూట్ చేయబడవచ్చు."</string>
+    <string name="volume_stream_content_description_vibrate" msgid="1187944970457807498">"%1$s. వైబ్రేషన్‌కు సెట్ చేయడానికి నొక్కండి. యాక్సెస్ సామర్థ్య సేవలు మ్యూట్ చేయబడవచ్చు."</string>
+    <string name="volume_stream_content_description_mute" msgid="3625049841390467354">"%1$s. మ్యూట్ చేయడానికి నొక్కండి. యాక్సెస్ సామర్థ్య సేవలు మ్యూట్ చేయబడవచ్చు."</string>
     <string name="volume_stream_content_description_vibrate_a11y" msgid="6427727603978431301">"%1$s. వైబ్రేట్ అయ్యేలా సెట్ చేయడం కోసం నొక్కండి."</string>
     <string name="volume_stream_content_description_mute_a11y" msgid="8995013018414535494">"%1$s. మ్యూట్ చేయడానికి నొక్కండి."</string>
     <string name="volume_dialog_accessibility_shown_message" msgid="1834631467074259998">"%s వాల్యూమ్ నియంత్రణలు చూపబడ్డాయి. తీసివేయడానికి పైకి స్వైప్ చేయండి."</string>
@@ -516,11 +516,11 @@
     <string name="status_bar_ethernet" msgid="5044290963549500128">"ఈథర్‌నెట్"</string>
     <string name="status_bar_alarm" msgid="8536256753575881818">"అలారం"</string>
     <string name="status_bar_work" msgid="6022553324802866373">"కార్యాలయ ప్రొఫైల్‌"</string>
-    <string name="status_bar_airplane" msgid="7057575501472249002">"ఎయిర్‌ప్లైన్ మోడ్"</string>
+    <string name="status_bar_airplane" msgid="7057575501472249002">"ఎయిర్‌ప్లేన్ మోడ్"</string>
     <string name="add_tile" msgid="2995389510240786221">"టైల్‌ను జోడించండి"</string>
     <string name="broadcast_tile" msgid="3894036511763289383">"ప్రసార టైల్"</string>
-    <string name="zen_alarm_warning_indef" msgid="3482966345578319605">"మీరు <xliff:g id="WHEN">%1$s</xliff:g> సెట్ చేసిన మీ తదుపరి అలారం మీరు ఆ లోపల దీన్ని ఆఫ్ చేయకుంటే వినిపించదు"</string>
-    <string name="zen_alarm_warning" msgid="444533119582244293">"మీరు <xliff:g id="WHEN">%1$s</xliff:g> సెట్ చేసిన మీ తదుపరి అలారం మీకు వినిపించదు"</string>
+    <string name="zen_alarm_warning_indef" msgid="3482966345578319605">"మీరు <xliff:g id="WHEN">%1$s</xliff:g> సెట్ చేసిన మీ తర్వాత అలారం మీరు ఆ లోపల దీన్ని ఆఫ్ చేయకుంటే వినిపించదు"</string>
+    <string name="zen_alarm_warning" msgid="444533119582244293">"మీరు <xliff:g id="WHEN">%1$s</xliff:g> సెట్ చేసిన మీ తర్వాత అలారం మీకు వినిపించదు"</string>
     <string name="alarm_template" msgid="3980063409350522735">"<xliff:g id="WHEN">%1$s</xliff:g>కి"</string>
     <string name="alarm_template_far" msgid="4242179982586714810">"<xliff:g id="WHEN">%1$s</xliff:g>కి"</string>
     <string name="accessibility_quick_settings_detail" msgid="2579369091672902101">"శీఘ్ర సెట్టింగ్‌లు, <xliff:g id="TITLE">%s</xliff:g>."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"ఈ అనువర్తనానికి నోటిఫికేషన్ వర్గాలు లేవు"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"ఈ యాప్ నుండి వచ్చే నోటిఫికేషన్‌లను ఆఫ్ చేయలేరు"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">ఈ యాప్ నుంచి <xliff:g id="NUMBER_1">%d</xliff:g> నోటిఫికేషన్ వర్గాలలో 1</item>
-      <item quantity="one">ఈ యాప్ నుంచి <xliff:g id="NUMBER_0">%d</xliff:g> నోటిఫికేషన్ వర్గంలో 1</item>
+      <item quantity="other">ఈ యాప్ నుంచి <xliff:g id="NUMBER_1">%s</xliff:g> నోటిఫికేషన్ వర్గాలలో 1</item>
+      <item quantity="one">ఈ యాప్ నుంచి <xliff:g id="NUMBER_0">%s</xliff:g> నోటిఫికేషన్ వర్గంలో 1</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d నిమిషం</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"బ్యాటరీ వినియోగం"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ఛార్జ్ అవుతున్న సమయంలో బ్యాటరీ సేవర్ అందుబాటులో ఉండదు"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"బ్యాటరీ సేవర్"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"ఛార్జ్ అవుతున్న సమయంలో బ్యాటరీ సేవర్ అందుబాటులో లేదు"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"బ్యాటరీ సేవర్"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"పనితీరుని మరియు నేపథ్య డేటాను తగ్గిస్తుంది"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"బటన్ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -602,7 +602,7 @@
     <string name="keyboard_key_backspace" msgid="1559580097512385854">"Backspace"</string>
     <string name="keyboard_key_media_play_pause" msgid="3861975717393887428">"ప్లే చేయి/పాజ్ చేయి"</string>
     <string name="keyboard_key_media_stop" msgid="2859963958595908962">"ఆపివేయి"</string>
-    <string name="keyboard_key_media_next" msgid="1894394911630345607">"తదుపరి"</string>
+    <string name="keyboard_key_media_next" msgid="1894394911630345607">"తర్వాత"</string>
     <string name="keyboard_key_media_previous" msgid="4256072387192967261">"మునుపటి"</string>
     <string name="keyboard_key_media_rewind" msgid="2654808213360820186">"రివైండ్ చేయి"</string>
     <string name="keyboard_key_media_fast_forward" msgid="3849417047738200605">"వేగంగా ఫార్వార్డ్ చేయి"</string>
@@ -632,7 +632,7 @@
     <string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"క్యాలెండర్"</string>
     <string name="tuner_full_zen_title" msgid="4540823317772234308">"వాల్యూమ్ నియంత్రణలతో చూపు"</string>
     <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"అంతరాయం కలిగించవద్దు"</string>
-    <string name="volume_dnd_silent" msgid="4363882330723050727">"వాల్యూమ్ బటన్‌ల సత్వరమార్గం"</string>
+    <string name="volume_dnd_silent" msgid="4363882330723050727">"వాల్యూమ్ బటన్‌ల షార్ట్‌కట్"</string>
     <string name="volume_up_silent" msgid="7141255269783588286">"వాల్యూమ్ పెంచితే అంతరాయం కలిగించవద్దు నుండి నిష్క్రమిస్తుంది"</string>
     <string name="battery" msgid="7498329822413202973">"బ్యాటరీ"</string>
     <string name="clock" msgid="7416090374234785905">"గడియారం"</string>
@@ -726,12 +726,12 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"కనిష్టీకరించు"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"మూసివేయి"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"తీసివేయడానికి కిందికి లాగండి"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"చిత్రంలో చిత్రం మెను"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"మెను"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> చిత్రంలో చిత్రం రూపంలో ఉంది"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> ఈ లక్షణాన్ని ఉపయోగించకూడదు అని మీరు అనుకుంటే, సెట్టింగ్‌లను తెరవడానికి నొక్కి, దీన్ని ఆఫ్ చేయండి."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> ఈ లక్షణాన్ని ఉపయోగించకూడదు అని మీరు అనుకుంటే, సెట్టింగ్‌లను తెరవడానికి నొక్కి, దీన్ని ఆఫ్ చేయండి."</string>
     <string name="pip_play" msgid="1417176722760265888">"ప్లే చేయి"</string>
     <string name="pip_pause" msgid="8881063404466476571">"పాజ్ చేయి"</string>
-    <string name="pip_skip_to_next" msgid="1948440006726306284">"దాటవేసి తదుపరి దానికి వెళ్లు"</string>
+    <string name="pip_skip_to_next" msgid="1948440006726306284">"దాటవేసి తర్వాత దానికి వెళ్లు"</string>
     <string name="pip_skip_to_prev" msgid="1955311326688637914">"దాటవేసి మునుపటి దానికి వెళ్లు"</string>
     <string name="thermal_shutdown_title" msgid="4458304833443861111">"వేడెక్కినందుకు ఫోన్ ఆఫ్ చేయబడింది"</string>
     <string name="thermal_shutdown_message" msgid="9006456746902370523">"మీ ఫోన్ ఇప్పుడు సాధారణంగా పని చేస్తుంది"</string>
@@ -739,13 +739,13 @@
     <string name="high_temp_title" msgid="4589508026407318374">"ఫోన్ వేడెక్కుతోంది"</string>
     <string name="high_temp_notif_message" msgid="5642466103153429279">"ఫోన్‌ను చల్లబరిచే క్రమంలో కొన్ని లక్షణాలు పరిమితం చేయబడ్డాయి"</string>
     <string name="high_temp_dialog_message" msgid="6840700639374113553">"మీ ఫోన్ స్వయంచాలకంగా చల్లబడటానికి ప్రయత్నిస్తుంది. మీరు ఇప్పటికీ మీ ఫోన్‌ను ఉపయోగించవచ్చు, కానీ దాని పనితీరు నెమ్మదిగా ఉండవచ్చు.\n\nమీ ఫోన్ చల్లబడిన తర్వాత, అది సాధారణ రీతిలో పని చేస్తుంది."</string>
-    <string name="lockscreen_shortcut_left" msgid="2182769107618938629">"ఎడమవైపు సత్వరమార్గం"</string>
-    <string name="lockscreen_shortcut_right" msgid="3328683699505226536">"కుడివైపు సత్వరమార్గం"</string>
-    <string name="lockscreen_unlock_left" msgid="2043092136246951985">"ఎడమవైపు సత్వరమార్గం కూడా అన్‌లాక్ చేస్తుంది"</string>
-    <string name="lockscreen_unlock_right" msgid="1529992940510318775">"కుడివైపు సత్వరమార్గం కూడా అన్‌లాక్ చేస్తుంది"</string>
+    <string name="lockscreen_shortcut_left" msgid="2182769107618938629">"ఎడమవైపు షార్ట్‌కట్"</string>
+    <string name="lockscreen_shortcut_right" msgid="3328683699505226536">"కుడివైపు షార్ట్‌కట్"</string>
+    <string name="lockscreen_unlock_left" msgid="2043092136246951985">"ఎడమవైపు షార్ట్‌కట్ కూడా అన్‌లాక్ చేస్తుంది"</string>
+    <string name="lockscreen_unlock_right" msgid="1529992940510318775">"కుడివైపు షార్ట్‌కట్ కూడా అన్‌లాక్ చేస్తుంది"</string>
     <string name="lockscreen_none" msgid="4783896034844841821">"ఏదీ వద్దు"</string>
     <string name="tuner_launch_app" msgid="1527264114781925348">"<xliff:g id="APP">%1$s</xliff:g>ని ప్రారంభించండి"</string>
-    <string name="tuner_other_apps" msgid="4726596850501162493">"ఇతర అనువర్తనాలు"</string>
+    <string name="tuner_other_apps" msgid="4726596850501162493">"ఇతర యాప్‌లు"</string>
     <string name="tuner_circle" msgid="2340998864056901350">"సర్కిల్"</string>
     <string name="tuner_plus" msgid="6792960658533229675">"కూడిక చిహ్నం"</string>
     <string name="tuner_minus" msgid="4806116839519226809">"తీసివేత చిహ్నం"</string>
@@ -754,12 +754,13 @@
     <string name="tuner_menu" msgid="191640047241552081">"మెను"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> అనురవర్తనం"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"హెచ్చరికలు"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"బ్యాటరీ"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"స్క్రీన్‌షాట్‌లు"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"సాధారణ సందేశాలు"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"నిల్వ"</string>
     <string name="instant_apps" msgid="6647570248119804907">"తక్షణ అనువర్తనాలు"</string>
     <string name="instant_apps_message" msgid="8116608994995104836">"తక్షణ అనువర్తనాలకు ఇన్‌స్టాలేషన్ అవసరం లేదు."</string>
-    <string name="app_info" msgid="6856026610594615344">"అనువర్తన సమాచారం"</string>
+    <string name="app_info" msgid="6856026610594615344">"యాప్ సమాచారం"</string>
     <string name="go_to_web" msgid="1106022723459948514">"వెబ్‌కు వెళ్లు"</string>
     <string name="mobile_data" msgid="7094582042819250762">"మొబైల్ డేటా"</string>
     <string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi ఆఫ్‌లో ఉంది"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"నేపథ్యంలో అమలు అవుతున్న ఆప్‌లు"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"బ్యాటరీ మరియు డేటా వినియోగ వివరాల కోసం నొక్కండి"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"మొబైల్ డేటాని ఆఫ్ చేయాలా?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"అనుమతి అభ్యర్థనకు ఒక యాప్ అడ్డు తగులుతున్నందున సెట్టింగ్‌లు మీ ప్రతిస్పందనను ధృవీకరించలేకపోయాయి."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index a5f07c3..ad39fea 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"ลายนิ้วมือหลัก RSA ของคอมพิวเตอร์คือ:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"อนุญาตจากคอมพิวเตอร์เครื่องนี้เสมอ"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"ไม่อนุญาตให้แก้ไขข้อบกพร่องผ่าน USB"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"ผู้ใช้ที่ลงชื่อเข้าใช้อุปกรณ์นี้อยู่ในขณะนี้ไม่สามารถเปิดการแก้ปัญหาผ่าน USB ได้ หากต้องการใช้ฟีเจอร์นี้ โปรดเปลี่ยนไปเป็นผู้ใช้ที่เป็นผู้ดูแลระบบ"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"ผู้ใช้ที่ลงชื่อเข้าใช้อุปกรณ์อยู่ในขณะนี้ไม่สามารถเปิดการแก้ไขข้อบกพร่องผ่าน USB ได้ หากต้องการใช้ฟีเจอร์นี้ ให้เปลี่ยนไปเป็นผู้ใช้หลัก"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"ขยายจนเต็มหน้าจอ"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"ยืดจนเต็มหน้าจอ"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"กำลังบันทึกภาพหน้าจอ..."</string>
@@ -243,7 +243,7 @@
     <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"หยุดการใช้อินเทอร์เน็ตมือถือชั่วคราว"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"หยุดการใช้ข้อมูลชั่วคราวแล้ว"</string>
     <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"คุณใช้อินเทอร์เน็ตถึงปริมาณที่กำหนดไว้แล้ว คุณไม่ได้ใช้อินเทอร์เน็ตมือถือแล้วในขณะนี้\n\nหากใช้ต่อ อาจมีการเรียกเก็บค่าบริการอินเทอร์เน็ต"</string>
-    <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ทำต่อ"</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ใช้ต่อ"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ไม่มีอินเทอร์เน็ต"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"เชื่อมต่อ WiFi แล้ว"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"กำลังค้นหา GPS"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"ค้นหา"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"เลื่อนขึ้นเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"เลื่อนไปทางซ้ายเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"คุณจะไม่ถูกรบกวนจากเสียงและการสั่น ยกเว้นเสียงนาฬิกาปลุก การช่วยเตือน กิจกรรม และผู้โทรที่ระบุไว้ คุณจะยังคงได้ยินสิ่งที่คุณเลือกเล่น เช่น เพลง วิดีโอ และเกม"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"คุณจะไม่ถูกรบกวนจากเสียงและการสั่น ยกเว้นเสียงนาฬิกาปลุก คุณจะยังคงได้ยินสิ่งที่คุณเลือกเล่น เช่น เพลง วิดีโอ และเกม"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"คุณจะไม่ถูกรบกวนจากเสียงและการสั่น ยกเว้นเสียงนาฬิกาปลุก การช่วยเตือน กิจกรรม และผู้โทรที่ระบุไว้ คุณจะยังคงได้ยินสิ่งที่คุณเลือกเล่น เช่น เพลง วิดีโอ และเกม"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"คุณจะไม่ถูกรบกวนจากเสียงและการสั่น ยกเว้นเสียงนาฬิกาปลุก คุณจะยังคงได้ยินสิ่งที่คุณเลือกเล่น เช่น เพลง วิดีโอ และเกม"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"กำหนดค่า"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"การใช้โหมดนี้จะบล็อกเสียงและการสั่นทั้งหมด ซึ่งรวมถึงเสียงปลุก เพลง วิดีโอ และเกม คุณจะยังโทรออกได้อยู่"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"การตั้งค่านี้จะบล็อกเสียงและการสั่นทั้งหมด ซึ่งรวมถึงเสียงปลุก เพลง วิดีโอ และเกม คุณจะยังสามารถโทรออกได้อยู่"</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"การใช้โหมดนี้จะบล็อกเสียงและการสั่นทั้งหมด ซึ่งรวมถึงเสียงปลุก เพลง วิดีโอ และเกม"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"การแจ้งเตือนที่เร่งด่วนน้อยด้านล่าง"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"เรียนรู้เพิ่มเติม"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"คุณเชื่อมต่อกับ <xliff:g id="VPN_APP">%1$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายของคุณ รวมถึงอีเมล แอป และเว็บไซต์ได้"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"เปิดการตั้งค่า VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"เปิดการตั้งค่า VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"เปิดข้อมูลรับรองที่เชื่อถือได้"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"ผู้ดูแลระบบได้เปิดการทำบันทึกเครือข่าย ซึ่งจะติดตามดูการรับส่งข้อมูลบนอุปกรณ์ของคุณ\n\nโปรดติดต่อผู้ดูแลระบบสำหรับข้อมูลเพิ่มเติม"</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"แอปนี้ไม่มีหมวดหมู่การแจ้งเตือน"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"ไม่สามารถปิดการแจ้งเตือนจากแอปนี้"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">การแจ้งเตือน 1 ใน <xliff:g id="NUMBER_1">%d</xliff:g> หมวดหมู่จากแอปนี้</item>
-      <item quantity="one">การแจ้งเตือน 1 ใน <xliff:g id="NUMBER_0">%d</xliff:g> หมวดหมู่จากแอปนี้</item>
+      <item quantity="other">การแจ้งเตือน 1 ใน <xliff:g id="NUMBER_1">%s</xliff:g> หมวดหมู่จากแอปนี้</item>
+      <item quantity="one">การแจ้งเตือน 1 ใน <xliff:g id="NUMBER_0">%s</xliff:g> หมวดหมู่จากแอปนี้</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d นาที</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"การใช้งานแบตเตอรี่"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ไม่สามารถใช้โหมดประหยัดแบตเตอรี่ระหว่างการชาร์จ"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"โหมดประหยัดแบตเตอรี่"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"ไม่สามารถใช้โหมดประหยัดแบตเตอรี่ระหว่างการชาร์จ"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"โหมดประหยัดแบตเตอรี่"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"ลดประสิทธิภาพการทำงานและข้อมูลแบ็กกราวด์"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"ปุ่ม <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"ย่อเล็กสุด"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"ปิด"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"ลากลงเพื่อปิด"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"เมนูการแสดงภาพซ้อนภาพ"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"เมนู"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> ใช้การแสดงภาพซ้อนภาพ"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"หากคุณไม่ต้องการให้ <xliff:g id="NAME">%s</xliff:g> ใช้ฟีเจอร์นี้ ให้แตะเพื่อเปิดการตั้งค่าแล้วปิดฟีเจอร์"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"หากคุณไม่ต้องการให้ <xliff:g id="NAME">%s</xliff:g> ใช้ฟีเจอร์นี้ ให้แตะเพื่อเปิดการตั้งค่าแล้วปิดฟีเจอร์"</string>
     <string name="pip_play" msgid="1417176722760265888">"เล่น"</string>
     <string name="pip_pause" msgid="8881063404466476571">"หยุดชั่วคราว"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"ข้ามไปรายการถัดไป"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"เมนู"</string>
     <string name="tuner_app" msgid="3507057938640108777">"แอป <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"การแจ้งเตือน"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"แบตเตอรี"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"ภาพหน้าจอ"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"ข้อความทั่วไป"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"พื้นที่เก็บข้อมูล"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"แอปที่กำลังทำงานในเบื้องหลัง"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"แตะเพื่อดูรายละเอียดเกี่ยวกับแบตเตอรี่และปริมาณการใช้อินเทอร์เน็ต"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ปิดอินเทอร์เน็ตมือถือไหม"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"เนื่องจากแอปหนึ่งได้บดบังคำขอสิทธิ์ ระบบจึงไม่สามารถยืนยันคำตอบของคุณสำหรับการตั้งค่าได้"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-th/strings_tv.xml b/packages/SystemUI/res/values-th/strings_tv.xml
index 3a5eba1..5c49291 100644
--- a/packages/SystemUI/res/values-th/strings_tv.xml
+++ b/packages/SystemUI/res/values-th/strings_tv.xml
@@ -19,7 +19,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_channel_tv_pip" msgid="134047986446577723">"การแสดงผลหลายแหล่งพร้อมกัน"</string>
+    <string name="notification_channel_tv_pip" msgid="134047986446577723">"การแสดงภาพซ้อนภาพ"</string>
     <string name="pip_notification_unknown_title" msgid="6289156118095849438">"(ไม่มีชื่อรายการ)"</string>
     <string name="pip_close" msgid="3480680679023423574">"ปิด PIP"</string>
     <string name="pip_fullscreen" msgid="8604643018538487816">"เต็มหน้าจอ"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 3a49fc7..261bccf 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Ang RSA key fingerprint ng computer ay:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Palaging payagan mula sa computer na ito"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Hindi pinapayagan ang pagde-debug sa pamamagitan ng USB"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Hindi maaaring i-on ng user na kasalukuyang naka-sign in sa device na ito ang pagde-debug sa pamamagitan ng USB. Upang magamit ang feature na ito, mangyaring lumipat sa isang user na Admin."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Hindi mao-on ng user na kasalukuyang naka-sign in sa device na ito ang pag-debug ng USB. Upang magamit ang feature na ito, lumipat sa pangunahing user."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"I-zoom upang punan screen"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"I-stretch upang mapuno screen"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Sine-save ang screenshot…"</string>
@@ -242,7 +242,7 @@
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Naka-pause ang 4G data"</string>
     <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Naka-pause ang mobile data"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Naka-pause ang data"</string>
-    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Naabot na ang itinakda mong limitasyon sa data. Hindi ka na gumagamit ng mobile data.\n\nKung magpapatuloy ka, maaaring may mga singil sa paggamit ng data."</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Naabot na ang itinakda mong limitasyon ng data. Hindi ka na gumagamit ng mobile data.\n\nKung magpapatuloy ka, maaaring may mga singil sa paggamit ng data."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Ipagpatuloy"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Walang koneksyon sa Internet"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"nakakonekta ang Wi-Fi"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Maghanap"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Mag-slide pataas para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Mag-slide pakaliwa para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Hindi ka maiistorbo ng mga tunog at pag-vibrate, maliban sa mga alarm, paalala, kaganapan, at tumatawag na tutukuyin mo. Maririnig mo pa rin ang anumang pipiliin mong i-play kabilang ang musika, mga video, at mga laro."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Hindi ka maiistorbo ng mga tunog at pag-vibrate, maliban sa mga alarm. Maririnig mo pa rin ang anumang pipiliin mong i-play kabilang ang musika, mga video, at mga laro."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Hindi ka maiistorbo ng mga tunog at pag-vibrate, maliban mula sa mga alarm, paalala, kaganapan, at tumatawag na tutukuyin mo. Maririnig mo pa rin ang kahit na anong piliin mong i-play kabilang ang mga musika, video, at laro."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Hindi ka maiistorbo ng mga tunog at pag-vibrate, maliban sa mga alarm. Maririnig mo pa rin ang anumang pipiliin mong i-play kabilang ang mga musika, video, at laro."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"I-customize"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Bina-block nito ang LAHAT ng tunog at pag-vibrate, kabilang ang mula sa mga alarm, musika, video at laro. Magagawa mo pa ring tumawag."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Bina-block nito ang LAHAT ng tunog at pag-vibrate, kabilang ang mula sa mga alarm, musika, video, at laro. Makakatawag ka pa rin."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Bina-block nito ang LAHAT ng tunog at pag-vibrate, kabilang ang mula sa mga alarm, musika, video at laro."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Nasa ibaba ang mga notification na hindi masyadong mahalaga"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Matuto pa"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Kumonekta ka sa <xliff:g id="VPN_APP">%1$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network, kasama ang mga email, app at website."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Buksan ang Mga Setting ng VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Buksan ang mga setting ng VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Buksan ang mga pinagkakatiwalaang kredensyal"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Na-on ng iyong admin ang pag-log sa network, na sumusubaybay sa trapiko ng device mo.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong admin."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Walang kategorya ng notification ang app na ito"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Hindi maaaring i-off ang mga notification mula sa app na ito"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 sa <xliff:g id="NUMBER_1">%d</xliff:g> kategorya ng notification mula sa app na ito</item>
-      <item quantity="other">1 sa <xliff:g id="NUMBER_1">%d</xliff:g> na kategorya ng notification mula sa app na ito</item>
+      <item quantity="one">1 sa <xliff:g id="NUMBER_1">%s</xliff:g> kategorya ng notification mula sa app na ito</item>
+      <item quantity="other">1 sa <xliff:g id="NUMBER_1">%s</xliff:g> na kategorya ng notification mula sa app na ito</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="other">%d na minuto</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Paggamit ng baterya"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Hindi available ang Pangtipid sa Baterya kapag nagcha-charge"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Pangtipid sa Baterya"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Hindi available ang pangtipid sa baterya kapag nagcha-charge"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Pangtipid sa baterya"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Binabawasan ang performance at data sa background"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Button na <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"I-minimize"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Isara"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"I-drag pababa upang i-dismiss"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menu ng picture in picture"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"Nasa picture-in-picture ang <xliff:g id="NAME">%s</xliff:g>"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Kung ayaw mong gamitin ng <xliff:g id="NAME">%s</xliff:g> ang feature na ito, i-tap upang buksan ang mga setting at i-off ito."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Kung ayaw mong magamit ni <xliff:g id="NAME">%s</xliff:g> ang feature na ito, i-tap upang buksan ang mga setting at i-off ito."</string>
     <string name="pip_play" msgid="1417176722760265888">"I-play"</string>
     <string name="pip_pause" msgid="8881063404466476571">"I-pause"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Lumaktaw sa susunod"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> app"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Mga Alerto"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Baterya"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Mga Screenshot"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Mga Pangkalahatang Mensahe"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Storage"</string>
@@ -761,7 +762,7 @@
     <string name="instant_apps_message" msgid="8116608994995104836">"Hindi kailangang i-install ang mga instant na app."</string>
     <string name="app_info" msgid="6856026610594615344">"Impormasyon ng app"</string>
     <string name="go_to_web" msgid="1106022723459948514">"Pumunta sa web"</string>
-    <string name="mobile_data" msgid="7094582042819250762">"Data ng mobile"</string>
+    <string name="mobile_data" msgid="7094582042819250762">"Mobile data"</string>
     <string name="wifi_is_off" msgid="1838559392210456893">"Naka-off ang Wi-Fi"</string>
     <string name="bt_is_off" msgid="2640685272289706392">"Naka-off ang Bluetooth"</string>
     <string name="dnd_is_off" msgid="6167780215212497572">"Naka-off ang Huwag Istorbohin"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Tumatakbo ang mga app sa background"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"I-tap para sa mga detalye tungkol sa paggamit ng baterya at data"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"I-off ang mobile data?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Hindi ma-verify ng Mga Setting ang iyong tugon dahil may app na tumatakip sa isang kahilingan sa pagpapahintulot."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index a451b90..450a310 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Bilgisayarın RSA anahtarı parmak izi:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Bu bilgisayardan her zaman izin ver"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB hata ayıklama işlevine izin verilmiyor"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Şu anda bu cihazda oturum açan kullanıcı, USB hata ayıklamayı açamaz. Bu özelliği kullanabilmek için lütfen Yönetici olan kullanıcıya geçin."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Bu cihazda geçerli olarak oturum açmış olan kullanıcı, USB hata ayıklama özelliğini açamaz. Bu özelliği kullanmak için birincil kullanıcıya geçin."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Yakınlaştır (ekranı kaplasın)"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Genişlet (ekran kapansın)"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Ekran görüntüsü kaydediliyor..."</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Ara"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için yukarı kaydırın."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için sola kaydırın."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Alarmlar, hatırlatıcılar, etkinlikler ve sizin seçtiğiniz arayan kişiler dışında hiçbir ses ve titreşimle rahatsız edilmeyeceksiniz. O sırada çaldığınız, seyrettiğiniz ya da oynadığınız müzik, video ve oyunların sesini duymaya devam edeceksiniz"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Alarmlar dışında hiçbir ses ve titreşimle rahatsız edilmeyeceksiniz. O sırada çaldığınız, seyrettiğiniz ya da oynadığınız müzik, video ve oyunların sesini duymaya devam edeceksiniz."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Alarmlar, hatırlatıcılar, etkinlikler ve sizin seçtiğiniz kişilerden gelen çağrılar dışında hiçbir ses ve titreşimle rahatsız edilmeyeceksiniz. O sırada çaldığınız müzik, seyrettiğiniz video ya da oynadığınız oyunların sesini duymaya devam edeceksiniz."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Alarmlar dışında hiçbir ses ve titreşimle rahatsız edilmeyeceksiniz. O sırada çaldığınız müzik, seyrettiğiniz video ya da oynadığınız oyunların sesini duymaya devam edeceksiniz."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Özelleştir"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Bu seçenek TÜM sesleri ve titreşimleri engeller. Buna alarmlar, müzik, videolar ve oyunlar dahildir. Telefon aramaları yapmaya devam edebileceksiniz."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Bu seçenek TÜM sesleri ve titreşimleri engeller. Buna alarmlar, müzik, videolar ve oyunlar dahildir. Telefon aramaları yapmaya devam edebilirsiniz."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Bu seçenek TÜM sesleri ve titreşimleri engeller. Buna alarmlar, müzik, videolar ve oyunlar dahildir."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Daha az acil bildirimler aşağıdadır"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Daha fazla bilgi"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"E-postalarınız, uygulamalarınız ve web siteleriniz de dahil olmak üzere ağ etkinliğinizi takip edebilen <xliff:g id="VPN_APP">%1$s</xliff:g> ağına bağlısınız."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN Ayarlarını aç"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN ayarlarını aç"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Güvenilir kimlik bilgilerini aç"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Yöneticiniz,cihazınızdaki trafiği izleyen ağ günlük kaydını açtı.\n\nDaha fazla bilgi için yöneticinizle iletişim kurun."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Bu uygulamanın bildirim kategorisi yok"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Bu uygulamanın bildirimleri kapatılamaz"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">Bu uygulamadaki <xliff:g id="NUMBER_1">%d</xliff:g> bildirim kategorisinden 1 tanesi</item>
-      <item quantity="one">Bu uygulamadaki <xliff:g id="NUMBER_0">%d</xliff:g> bildirim kategorisinden 1 tanesi</item>
+      <item quantity="other">Bu uygulamadaki <xliff:g id="NUMBER_1">%s</xliff:g> bildirim kategorisinden 1 tanesi</item>
+      <item quantity="one">Bu uygulamadaki <xliff:g id="NUMBER_0">%s</xliff:g> bildirim kategorisinden 1 tanesi</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d dakika</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Pil kullanımı"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Şarj sırasında Pil Tasarrufu özelliği kullanılamaz"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Pil Tasarrufu"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Şarj sırasında Pil tasarrufu özelliği kullanılamaz"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Pil tasarrufu"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Performansı ve arka plan verilerini azaltır"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> düğmesi"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Simge durumuna getir"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Kapat"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Kapatmak için aşağıya sürükleyin"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Pencere içinde pencere menüsü"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menü"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g>, pencere içinde pencere özelliğini kullanıyor"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> uygulamasının bu özelliği kullanmasını istemiyorsanız dokunarak ayarları açın ve özelliği kapatın."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> uygulamasının bu özelliği kullanmasını istemiyorsanız dokunarak ayarları açın ve söz konusu özelliği kapatın."</string>
     <string name="pip_play" msgid="1417176722760265888">"Oynat"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Duraklat"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Sonrakine atla"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menü"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> uygulaması"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Uyarılar"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Pil"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Ekran görüntüleri"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Genel Mesajlar"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Depolama alanı"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Arka planda çalışan uygulamalar"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Pil ve veri kullanımı ile ilgili ayrıntılar için dokunun"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobil veri kapatılsın mı?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Bir uygulama bir izin isteğinin anlaşılmasını engellediğinden, Ayarlar, yanıtınızı doğrulayamıyor."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index cf9698f..cc14af6 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -66,7 +66,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Цифровий відбиток ключа RSA комп’ютера:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Завжди дозволяти з цього комп’ютера"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Ви не можете вмикати налагодження USB"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Користувач поточного облікового запису не може вмикати налагодження USB. Щоб увімкнути цю функцію, увійдіть в обліковий запис адміністратора."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Користувач поточного облікового запису не може вмикати налагодження USB. Щоб увімкнути цю функцію, увійдіть в обліковий запис основного користувача."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Масштабув. на весь екран"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Розтягнути на весь екран"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Збереження знімка екрана..."</string>
@@ -246,7 +246,7 @@
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Передавання даних 4G призупинено"</string>
     <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Мобільне передавання даних призупинено"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Передавання даних призупинено"</string>
-    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Досягнуто вказаного обмеження обсягу даних. Мобільне передавання даних вимкнено.\n\nЯкщо ввімкнути його, може стягуватися плата за використання трафіку."</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Досягнуто ліміту мобільного трафіку. Ви його більше не витрачаєте.\n\nЯкщо ви продовжите, може стягуватися плата за використання трафіку."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Відновити"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Немає з’єднання"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi під’єднано"</string>
@@ -359,10 +359,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Пошук"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Проведіть пальцем угору, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Проведіть пальцем ліворуч, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Ви отримуватиме звукові та вібросигнали лише для вибраних будильників, нагадувань, подій і абонентів. Однак ви чутимете все, що захочете відтворити, зокрема музику, відео й ігри."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Ви отримуватиме звукові та вібросигнали лише для будильників. Однак ви чутимете все, що захочете відтворити, зокрема музику, відео й ігри."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Ви отримуватиме звукові та вібросигнали лише для вибраних будильників, нагадувань, подій і абонентів. Однак ви чутимете все, що захочете відтворити, зокрема музику, відео й ігри."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Ви отримуватиме звукові та вібросигнали лише для будильників. Однак ви чутимете все, що захочете відтворити, зокрема музику, відео й ігри."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Налаштувати"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Блокуватимуться ВСІ звукові та вібросигнали, зокрема будильники, музика, відео й ігри. Ви зможете телефонувати."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Блокуватимуться ВСІ звукові та вібросигнали, зокрема будильники, музика, відео й ігри. Однак ви зможете телефонувати."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Блокуватимуться ВСІ звукові та вібросигнали, зокрема будильники, музика, відео й ігри."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Менше термінових сповіщень нижче"</string>
@@ -462,7 +462,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Докладніше"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Під’єднано додаток <xliff:g id="VPN_APP">%1$s</xliff:g>, який може відстежувати вашу активність у мережі, як-от доступ до електронної пошти, додатків і веб-сайтів."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Відкрити налаштування мережі VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Відкрити налаштування мережі VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Відкрити надійні облікові дані"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Ваш адміністратор увімкнув реєстрацію в мережі, під час якої на вашому пристрої відстежується трафік.\n\nЩоб дізнатися більше, зв’яжіться з адміністратором."</string>
@@ -562,10 +562,10 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"У цьому додатку немає категорій сповіщень"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Сповіщення з цього додатка не можна вимкнути"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 з <xliff:g id="NUMBER_1">%d</xliff:g> категорії сповіщень із цього додатка</item>
-      <item quantity="few">1 з <xliff:g id="NUMBER_1">%d</xliff:g> категорій сповіщень із цього додатка</item>
-      <item quantity="many">1 з <xliff:g id="NUMBER_1">%d</xliff:g> категорій сповіщень із цього додатка</item>
-      <item quantity="other">1 з <xliff:g id="NUMBER_1">%d</xliff:g> категорії сповіщень із цього додатка</item>
+      <item quantity="one">1 з <xliff:g id="NUMBER_1">%s</xliff:g> категорії сповіщень із цього додатка</item>
+      <item quantity="few">1 з <xliff:g id="NUMBER_1">%s</xliff:g> категорій сповіщень із цього додатка</item>
+      <item quantity="many">1 з <xliff:g id="NUMBER_1">%s</xliff:g> категорій сповіщень із цього додатка</item>
+      <item quantity="other">1 з <xliff:g id="NUMBER_1">%s</xliff:g> категорії сповіщень із цього додатка</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -599,8 +599,8 @@
       <item quantity="other">%d хвилини</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Використання заряду"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Режим енергозбереження не можна ввімкнути під час заряджання"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Режим енергозбереження"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Режим економії заряду акумулятора не працює під час заряджання"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Режим економії заряду акумулятора"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Знижується продуктивність і обмежується обмін даними у фоновому режимі"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Кнопка <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -740,9 +740,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Згорнути"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Закрити"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Перетягніть униз, щоб закрити"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Меню \"Картинка в картинці\""</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Меню"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"У додатку <xliff:g id="NAME">%s</xliff:g> є функція \"Картинка в картинці\""</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Щоб у додатку <xliff:g id="NAME">%s</xliff:g> не працювала ця функція, вимкніть її в налаштуваннях."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Щоб додаток <xliff:g id="NAME">%s</xliff:g> не використовував цю функцію, вимкніть її в налаштуваннях."</string>
     <string name="pip_play" msgid="1417176722760265888">"Відтворити"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Призупинити"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Перейти далі"</string>
@@ -768,6 +768,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Меню"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Додаток <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Сповіщення"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Акумулятор"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Знімки екрана"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Загальні повідомлення"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Пам’ять"</string>
@@ -788,4 +789,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Додатки, які працюють у фоновому режимі"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Торкніться, щоб перевірити використання акумулятора й трафік"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Вимкнути мобільний трафік?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Не вдається підтвердити вашу відповідь у налаштуваннях, оскільки інший додаток заступає запит на дозвіл."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index 475d163..aa2eee4 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"‏کمپیوٹر کے RSA کا کلیدی فنگر پرنٹ ہے:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"اس کمپیوٹر سے ہمیشہ اجازت دیں"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"‏USB ڈیبگ کرنے کی اجازت نہیں ہے"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"‏اس آلہ پر فی الحال سائن ان کردہ صارف USB ڈیبگ کرنا آن نہیں کر سکتا۔ اس خصوصیت کو استعمال کرنے کیلئے ایڈمن صارف پر سوئچ کریں۔"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"‏اس آلہ پر فی الحال سائن ان کردہ صارف USB ڈیبگنگ آن نہیں کر سکتا۔ اس خصوصیت کا استعمال کرنے کیلئے، ابتدائی صارف پر سوئچ کریں۔"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"پوری سکرین پر زوم کریں"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"پوری سکرین پر پھیلائیں"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"اسکرین شاٹ محفوظ ہو رہا ہے…"</string>
@@ -155,7 +155,7 @@
     <string name="accessibility_cell_data" msgid="5326139158682385073">"موبائل ڈیٹا"</string>
     <string name="accessibility_cell_data_on" msgid="5927098403452994422">"موبائل ڈیٹا آن ہے"</string>
     <string name="accessibility_cell_data_off" msgid="443267573897409704">"موبائل ڈیٹا آف ہے"</string>
-    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"بلوٹوتھ ٹیتھرنگ۔"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"بلوٹوتھ ٹیدرنگ۔"</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"ہوائی جہاز وضع۔"</string>
     <string name="accessibility_vpn_on" msgid="5993385083262856059">"‏VPN آن ہے۔"</string>
     <string name="accessibility_no_sims" msgid="3957997018324995781">"‏کوئی SIM کارڈ نہیں ہے۔"</string>
@@ -312,7 +312,7 @@
     <string name="quick_settings_connected" msgid="1722253542984847487">"مربوط"</string>
     <string name="quick_settings_connected_battery_level" msgid="4136051440381328892">"منسلک ہے، بیٹری <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="quick_settings_connecting" msgid="47623027419264404">"مربوط ہو رہا ہے…"</string>
-    <string name="quick_settings_tethering_label" msgid="7153452060448575549">"ٹیتھرنگ"</string>
+    <string name="quick_settings_tethering_label" msgid="7153452060448575549">"ٹیدرنگ"</string>
     <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ہاٹ اسپاٹ"</string>
     <string name="quick_settings_notifications_label" msgid="4818156442169154523">"اطلاعات"</string>
     <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"فلیش لائٹ"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"تلاش کریں"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> کیلئے اوپر سلائیڈ کریں۔"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> کیلئے بائیں سلائیڈ کریں۔"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"الارمز، یاد دہانیوں، ایونٹس اور آپ کے متعین کردہ کالرز کے علاوہ، آپ آوازوں اور وائبریشنز سے ڈسٹرب نہیں ہوں گے۔ موسیقی، ویڈیوز اور گیمز سمیت آپ ابھی بھی ہر وہ چیز سنیں گے جسے چلانے کا آپ انتخاب کرتے ہیں۔"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"الارمز کے علاوہ، آپ آوازوں اور وائبریشنز سے ڈسٹرب نہیں ہوں گے۔ موسیقی، ویڈیوز اور گیمز سمیت آپ ہر وہ چیز سنیں گے جسے چلانے کا آپ انتخاب کرتے ہیں۔"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"الارمز، یاددہانیوں، ایونٹس اور آپ کے متعین کردہ کالرز کے علاوہ، آپ آوازوں اور وائبریشنز سے ڈسٹرب نہیں ہوں گے۔ موسیقی، ویڈیوز اور گیمز سمیت آپ ابھی بھی ہر وہ چیز سنیں گے جسے چلانے کا آپ انتخاب کرتے ہیں۔"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"الارمز کے علاوہ، آپ آوازوں اور وائبریشنز سے ڈسٹرب نہیں ہوں گے۔ موسیقی، ویڈیوز اور گیمز سمیت آپ ہر وہ چیز سنیں گے جسے چلانے کا آپ انتخاب کرتے ہیں۔"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"حسب ضرورت بنائیں"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"یہ الارمز، موسیقی، ویڈیوز اور گیمز کی آوازوں اور وائبریشنز سمیت سبھی آوازیں اور وائبریشنز مسدود کر دیتا ہے۔ آپ ابھی بھی فون کالز کر سکیں گے۔"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"یہ الارمز، موسیقی، ویڈیوز اور گیمز کی آوازوں اور وائبریشنز سمیت سبھی آوازیں اور وائبریشنز مسدود کر دیتا ہے۔ آپ ابھی بھی فون کالز کر سکیں گے۔"</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"یہ الارمز، موسیقی، ویڈیوز اور گیمز کی آوازوں اور وائبریشنز سمیت سبھی آوازیں اور وائبریشنز مسدود کر دیتا ہے۔"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"‎+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>‎"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"کم اہم اطلاعات ذیل میں ہیں"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"مزید جانیں"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"آپ <xliff:g id="VPN_APP">%1$s</xliff:g> سے منسلک ہیں جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"‏VPN کی ترتیبات کھولیں"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"‏VPN کی ترتیبات کھولیں"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"بھروسے مند استناد کھولیں"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"آپ کے ایڈمن نے نیٹ ورک لاگنگ آن کر دی ہے، جو آپ کے آلہ پر ٹریفک کو مانیٹر کرتی ہے۔\n\nمزید معلومات کیلئے اپنے ایڈمن سے رابطہ کریں۔"</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"اس ایپ میں اطلاعاتی زمرے نہیں ہیں"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"اس ایپ کی اطلاعات کو آف نہیں کیا جا سکتا"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">اس ایپ کے <xliff:g id="NUMBER_1">%d</xliff:g> اطلاعاتی زمروں میں سے 1</item>
-      <item quantity="one">اس ایپ کے <xliff:g id="NUMBER_0">%d</xliff:g> اطلاعاتی زمرے میں سے 1</item>
+      <item quantity="other">اس ایپ کے <xliff:g id="NUMBER_1">%s</xliff:g> اطلاعاتی زمروں میں سے 1</item>
+      <item quantity="one">اس ایپ کے <xliff:g id="NUMBER_0">%s</xliff:g> اطلاعاتی زمرے میں سے 1</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>، <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">‏‎%d منٹ</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"بیٹری کا استعمال"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"چارجنگ کے دوران بیٹری سیور دستیاب نہیں ہے"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"بیٹری سیور"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"چارجنگ کے دوران بیٹری سیور دستیاب نہیں ہے"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"بیٹری سیور"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"کارکردگی اور پس منظر کا ڈیٹا کم کر دیتا ہے"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"بٹن <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"چھوٹی کریں"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"بند کریں"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"برخاست کرنے کیلئے نیچے گھسیٹیں"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"تصویر کے مینو میں تصویر"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"مینو"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> تصویر میں تصویر میں ہے"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"اگر آپ نہیں چاہتے ہیں کہ <xliff:g id="NAME">%s</xliff:g> اس خصوصیت کا استعمال کرے تو ترتیبات کھولنے کیلئے تھپتھپائیں اور اسے آف کر دیں۔"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"اگر آپ نہیں چاہتے ہیں کہ <xliff:g id="NAME">%s</xliff:g> اس خصوصیت کا استعمال کرے تو ترتیبات کھولنے کے لیے تھپتھپا کر اسے آف کرے۔"</string>
     <string name="pip_play" msgid="1417176722760265888">"چلائیں"</string>
     <string name="pip_pause" msgid="8881063404466476571">"موقوف کریں"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"نظرانداز کرکے اگلے پر جائیں"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"مینو"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> ایپ"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"الرٹس"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"بیٹری"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"اسکرین شاٹس"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"عمومی پیغامات"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"اسٹوریج"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"ایپس پس منظر میں چل رہی ہیں"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"بیٹری اور ڈیٹا استعمال کے بارے میں تفصیلات کے لیے تھپتھپائیں"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"موبائل ڈیٹا آف کریں؟"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"چونکہ ایک ایپ اجازت کی درخواست کو مبہم کر رہی ہے، لہذا ترتیبات آپ کے جواب کی توثیق نہیں کر سکتی ہیں۔"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index 092499d..11be064 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -44,7 +44,7 @@
     <string name="battery_saver_start_action" msgid="5576697451677486320">"Quvvat tejash funksiyasini yoqing"</string>
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Sozlamalar"</string>
     <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
-    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Ekranni avtomatik burish"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Ekranning avtomatik burilishi"</string>
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"MUTE"</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
     <string name="status_bar_settings_notifications" msgid="397146176280905137">"Eslatmalar"</string>
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Kompyuterning RSA tugmasi barmoq izlari:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Doimo ushbu kompyuterdan ruxsat berilsin"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB orqali nosozliklarni tuzatishga ruxsat berilmagan"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Bu qurilmaga ayni paytda o‘z hisobi bilan kirgan foydalanuvchi USB orqali tuzatish funksiyasini faollashtira olmaydi. Undan foydalanish uchun administrator profiliga o‘ting."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Ayni paytda ushbu qurilmaga o‘z hisobi bilan kirgan foydalanuvchi USB orqali nosozliklarni tuzatish funksiyasini yoqa olmaydi. Bu funksiyadan foydalanish uchun asosiy foydalanuvchi profiliga o‘ting."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Ekranga moslashtirish"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Ekran hajmida cho‘zish"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Skrinshot saqlanmoqda…"</string>
@@ -242,7 +242,7 @@
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Quvvat olmoqda"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G internet to‘xtatib qo‘yildi"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G internet to‘xtatib qo‘yildi"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobil internet pauza qilingan"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Mobil internet pauza qilindi"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Internetdan foydalanish to‘xtatib qo‘yildi"</string>
     <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Belgilangan trafik sarflab bo‘lindi. Endi mobil internetdan foydalana olmaysiz.\n\nDavom ettiradigan bo‘lsangiz, trafik uchun to‘lov olinishi mumkin."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Davom etish"</string>
@@ -278,7 +278,7 @@
     <string name="quick_settings_bluetooth_detail_empty_text" msgid="4910015762433302860">"Ulangan qurilmalar topilmadi"</string>
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Yorqinlik"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Avtomatik burilish"</string>
-    <string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Ekranni avtomatik burish"</string>
+    <string name="accessibility_quick_settings_rotation" msgid="4231661040698488779">"Ekranning avtomatik burilishi"</string>
     <string name="accessibility_quick_settings_rotation_value" msgid="8187398200140760213">"<xliff:g id="ID_1">%s</xliff:g> rejimi"</string>
     <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Aylanmaydigan qilingan"</string>
     <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Tik holat"</string>
@@ -338,7 +338,7 @@
     <string name="recents_launch_error_message" msgid="2969287838120550506">"“<xliff:g id="APP">%s</xliff:g>” ilovasini ishga tushirib bo‘lmadi."</string>
     <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Xavfsiz rejimda <xliff:g id="APP">%s</xliff:g> ilovasi o‘chirib qo‘yildi."</string>
     <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Hammasini tozalash"</string>
-    <string name="recents_drag_hint_message" msgid="2649739267073203985">"Ekranni bo‘lish xususiyatidan foydalanish uchun uchun bu yerga torting"</string>
+    <string name="recents_drag_hint_message" msgid="2649739267073203985">"Ekranni bo‘lish xususiyatidan foydalanish uchun bu yerga torting"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Gorizontal yo‘nalishda bo‘lish"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikal yo‘nalishda bo‘lish"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Boshqa usulda bo‘lish"</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Qidirish"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> uchun yuqoriga suring."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> uchun chapga suring."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Turli ovoz va tebranishlar endi sizni bezovta qilmaydi. Biroq, signallar, eslatmalar, tadbirlar haqidagi bildirishnomalar va siz tanlagan abonentlardan kelgan chaqiruvlar bundan mustasno. Lekin, ijro etiladigan barcha narsalar, jumladan, musiqa, video va o‘yinlar eshitiladi."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Turli ovoz va tebranishlar endi sizni bezovta qilmaydi. Biroq, signallar bundan mustasno. Lekin, ijro etiladigan barcha narsalar, jumladan, musiqa, video va o‘yinlar eshitiladi."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Turli ovoz va tebranishlar endi sizni bezovta qilmaydi. Biroq, signallar, eslatmalar, tadbirlar haqidagi bildirishnomalar va siz tanlagan abonentlardan kelgan chaqiruvlar bundan mustasno. Lekin, ijro etiladigan barcha narsalar, jumladan, musiqa, video va o‘yinlar ovozi eshitiladi."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Turli ovoz va tebranishlar endi sizni bezovta qilmaydi. Biroq, signallar bundan mustasno. Lekin, ijro etiladigan barcha narsalar, jumladan, musiqa, video va o‘yinlar ovozi eshitiladi."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Sozlash"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Bu BARCHA, jumladan signallar, musiqa, videolar va o‘yinlardan keladigan tovush va tebranishlarni to‘sib qo‘yadi. Siz telefon qo‘ng‘iroqlarini bemalol amalga oshirishingiz mumkin."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Bu rejimda BARCHA ovoz va tebranishlar, jumladan, signal, musiqa va o‘yinlar ovozi ham o‘chirib qo‘yiladi. Shunday bo‘lsa-da, chaqiruvlarni bemalol amalga oshirishingiz mumkin."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Bu BARCHA, jumladan, signallar, musiqa, videolar va o‘yinlardan keladigan tovush va tebranishlarni to‘sib qo‘yadi."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Kam ahamiyatli bildirishnomalarni pastda ko‘rsatish"</string>
@@ -383,10 +383,10 @@
     <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Foydalanuvchini o‘zgartirish. Joriy foydalanuvchi – <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"Joriy foydalanuvchi <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"Profilni ko‘rsatish"</string>
-    <string name="user_add_user" msgid="5110251524486079492">"Foydalanuvchi qo‘shish"</string>
+    <string name="user_add_user" msgid="5110251524486079492">"Foydalanuvchi"</string>
     <string name="user_new_user_name" msgid="426540612051178753">"Yangi foydalanuvchi"</string>
     <string name="guest_nickname" msgid="8059989128963789678">"Mehmon"</string>
-    <string name="guest_new_guest" msgid="600537543078847803">"Mehmon qo‘shish"</string>
+    <string name="guest_new_guest" msgid="600537543078847803">"Mehmon"</string>
     <string name="guest_exit_guest" msgid="7187359342030096885">"Mehmon rejimini o‘chirish"</string>
     <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"Mehmon hisobi o‘chirib tashlansinmi?"</string>
     <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"Ushbu seansdagi barcha ilovalar va ma’lumotlar o‘chirib tashlanadi."</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Batafsil"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g> ilovasi ishga tushirilgan. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN sozlamalarini ochish"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"VPN sozlamalarini ochish"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Ishonchli sertifikatlarni ochish"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Administrator qurilmangizdagi trafikni nazorat qiluvchi tarmoq jurnalini yoqdi.\n\nBatafsil ma’lumot olish uchun administratoringizga murojaat qiling."</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Bu ilovada bildirishnomalar turkumi yo‘q"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Bu ilova bildirishnomalarini o‘chirib bo‘lmaydi"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">Bu ilovadagi <xliff:g id="NUMBER_1">%d</xliff:g> ta bildirishnomalar turkumidan 1 tasi</item>
-      <item quantity="one">Bu ilovadagi <xliff:g id="NUMBER_0">%d</xliff:g> ta bildirishnomalar turkumidan 1 tasi</item>
+      <item quantity="other">Bu ilovadagi <xliff:g id="NUMBER_1">%s</xliff:g> ta bildirishnomalar turkumidan 1 tasi</item>
+      <item quantity="one">Bu ilovadagi <xliff:g id="NUMBER_0">%s</xliff:g> ta bildirishnomalar turkumidan 1 tasi</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="one">%d daqiqa</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Batareya sarfi"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Quvvat tejash rejimidan quvvatlash vaqtida foydalanib bo‘lmaydi"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Quvvat tejash rejimi"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Quvvat tejash rejimidan quvvatlash vaqtida foydalanib bo‘lmaydi"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Quvvat tejash rejimi"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Unumdorlik pasayadi va fonda internetdan foydalanish cheklanadi"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> tugmasi"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Bosh ekran"</string>
@@ -673,7 +673,7 @@
     <string name="right_keycode" msgid="708447961000848163">"O‘ngga tugmasi kodi"</string>
     <string name="left_icon" msgid="3096287125959387541">"Chapga belgisi"</string>
     <string name="right_icon" msgid="3952104823293824311">"O‘ngga belgisi"</string>
-    <string name="drag_to_add_tiles" msgid="7058945779098711293">"Kerakli elementni tortib qo‘shing"</string>
+    <string name="drag_to_add_tiles" msgid="7058945779098711293">"Keraklisini tepaga torting"</string>
     <string name="drag_to_remove_tiles" msgid="3361212377437088062">"O‘chirish uchun bu yerga torting"</string>
     <string name="qs_edit" msgid="2232596095725105230">"Tahrirlash"</string>
     <string name="tuner_time" msgid="6572217313285536011">"Vaqt"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Yig‘ish"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Yopish"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Yopish uchun pastga torting"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Tasvir ustida tasvir menyusi"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menyu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> tasvir ustida tasvir rejimida"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"<xliff:g id="NAME">%s</xliff:g> ilovasi uchun bu funksiyani sozlamalar orqali o‘chirib qo‘yish mumkin."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"<xliff:g id="NAME">%s</xliff:g> ilovasi uchun bu funksiyani sozlamalar orqali faolsizlantirish mumkin."</string>
     <string name="pip_play" msgid="1417176722760265888">"Ijro"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Pauza"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Keyingisiga o‘tish"</string>
@@ -756,6 +756,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menyu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> ilovasi"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Ogohlantirishlar"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Batareya"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Skrinshotlar"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Umumiy xabarlar"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Xotira"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Fonda ishlayotgan ilovalar"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Batareya va trafik sarfi tafsilotlari uchun ustiga bosing"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobil internet o‘chirib qo‘yilsinmi?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Ilova ruxsatnoma so‘roviga xalaqit qilayotgani tufayli, “Sozlamalar” ilovasi javobingizni tekshira olmaydi."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index f7be891..5b5cc61 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Tệp tham chiếu khóa RSA của máy tính là:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Luôn cho phép từ máy tính này"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Tính năng gỡ lỗi USB không được phép"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Người dùng hiện đã đăng nhập vào thiết bị này không thể bật gỡ lỗi USB. Để sử dụng tính năng này, vui lòng chuyển đổi sang người dùng Quản trị."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Người dùng hiện đã đăng nhập vào thiết bị này không thể bật tính năng gỡ lỗi USB. Để sử dụng tính năng này, hãy chuyển sang người dùng chính."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"T.phóng để lấp đầy m.hình"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Giãn ra để lấp đầy m.hình"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Đang lưu ảnh chụp màn hình..."</string>
@@ -240,9 +240,9 @@
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Đang sạc"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Đã tạm dừng dữ liệu 2G-3G"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Đã tạm dừng dữ liệu 4G"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Dữ liệu di động bị tạm dừng"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Dữ liệu di động đã bị tạm dừng"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Đã tạm dừng dữ liệu"</string>
-    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Đã đạt đến giới hạn dữ liệu mà bạn đặt. Bạn hiện không còn sử dụng dữ liệu di động.\n\nNếu tiếp tục, bạn có thể phải trả phí sử dụng dữ liệu."</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Dữ liệu đã đạt đến mức giới hạn mà bạn đã đặt. Bạn hiện không sử dụng dữ liệu di động nữa.\n\nNếu tiếp tục, bạn có thể bị tính phí sử dụng dữ liệu."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Tiếp tục"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ko có k.nối Internet"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Đã kết nối Wi-Fi"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Tìm kiếm"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Trượt lên để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Trượt sang trái để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Bạn sẽ không bị làm phiền bởi âm thanh và tiếng rung, ngoại trừ báo thức, nhắc nhở, sự kiện và người gọi mà bạn chỉ định. Bạn sẽ vẫn nghe thấy mọi thứ bạn chọn phát, bao gồm nhạc, video và trò chơi."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Bạn sẽ không bị làm phiền bởi âm thanh và tiếng rung, ngoại trừ báo thức. Bạn sẽ vẫn nghe thấy mọi thứ bạn chọn phát, bao gồm nhạc, video và trò chơi."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Bạn sẽ không bị làm phiền bởi âm thanh và tiếng rung, ngoại trừ báo thức, lời nhắc, sự kiện và người gọi mà bạn chỉ định. Bạn sẽ vẫn nghe thấy mọi thứ bạn chọn phát, bao gồm nhạc, video và trò chơi."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Bạn sẽ không bị làm phiền bởi âm thanh và tiếng rung, ngoại trừ báo thức. Bạn sẽ vẫn nghe thấy mọi thứ bạn chọn phát, bao gồm nhạc, video và trò chơi."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Tùy chỉnh"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Chế độ này sẽ chặn TẤT CẢ âm thanh và tiếng rung, bao gồm báo thức, âm nhạc, video và trò chơi. Bạn vẫn có thể gọi điện thoại."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Chế độ này sẽ chặn TẤT CẢ âm thanh và tiếng rung, bao gồm báo thức, nhạc, video và trò chơi. Bạn vẫn có thể gọi điện thoại."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Chế độ này sẽ chặn TẤT CẢ âm thanh và tiếng rung, bao gồm báo thức, âm nhạc, video và trò chơi."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Thông báo ít khẩn cấp hơn bên dưới"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Tìm hiểu thêm"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Bạn đang kết nối với <xliff:g id="VPN_APP">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng của bạn, bao gồm email, ứng dụng và trang web."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Mở cài đặt VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Mở cài đặt VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Mở thông tin xác thực tin cậy"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Quản trị viên đã bật tính năng ghi nhật ký mạng. Tính năng này giám sát lưu lượng truy cập trên thiết bị của bạn.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Ứng dụng này không có loại thông báo"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Không thể tắt thông báo từ ứng dụng này"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">1 trên tổng số <xliff:g id="NUMBER_1">%d</xliff:g> loại thông báo từ ứng dụng này</item>
-      <item quantity="one">1 trên tổng số <xliff:g id="NUMBER_0">%d</xliff:g> loại thông báo từ ứng dụng này</item>
+      <item quantity="other">1 trên tổng số <xliff:g id="NUMBER_1">%s</xliff:g> loại thông báo từ ứng dụng này</item>
+      <item quantity="one">1 trên tổng số <xliff:g id="NUMBER_0">%s</xliff:g> loại thông báo từ ứng dụng này</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="one">%d phút</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Mức sử dụng pin"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Trình tiết kiệm pin không khả dụng trong khi sạc"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Trình tiết kiệm pin"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Không sử dụng được trình tiết kiệm pin trong khi sạc"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Trình tiết kiệm pin"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Giảm hiệu suất và dữ liệu nền"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Nút <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Thu nhỏ"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Đóng"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Kéo xuống để loại bỏ"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Menu ảnh trong ảnh"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Menu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g> đang ở chế độ ảnh trong ảnh"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Nếu bạn không muốn <xliff:g id="NAME">%s</xliff:g> sử dụng tính năng này, hãy nhấn để mở cài đặt và tắt tính năng này."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Nếu bạn không muốn <xliff:g id="NAME">%s</xliff:g> sử dụng tính năng này, hãy nhấn để mở cài đặt và tắt tính năng này."</string>
     <string name="pip_play" msgid="1417176722760265888">"Phát"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Tạm dừng"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Chuyển tới mục tiếp theo"</string>
@@ -756,6 +756,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Menu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"Ứng dụng <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Cảnh báo"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Pin"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Ảnh chụp màn hình"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Thông báo chung"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Bộ nhớ"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Ứng dụng đang chạy trong nền"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Nhấn để biết chi tiết về mức sử dụng dữ liệu và pin"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Tắt dữ liệu di động?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Vì ứng dụng đang che khuất yêu cầu cấp quyền nên Cài đặt không thể xác minh câu trả lời của bạn."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 3c5bc2a..38c501b 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"这台计算机的 RSA 密钥指纹如下:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"一律允许使用这台计算机进行调试"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"不允许使用 USB 调试功能"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"当前登录了此设备的用户无法开启 USB 调试功能。要使用此功能,请切换为管理员用户。"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"目前已登录此设备的用户无法开启 USB 调试功能。要使用此功能,请切换为主要用户的帐号。"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"缩放以填满屏幕"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"拉伸以填满屏幕"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"正在保存屏幕截图..."</string>
@@ -240,9 +240,9 @@
     <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"正在充电"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G 数据网络已暂停使用"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G 数据网络已暂停使用"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"移动数据已暂停使用"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"已暂停使用移动数据网络"</string>
     <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"数据网络已暂停使用"</string>
-    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"您的数据用量已达到所设置的用量上限,因此系统已停用移动数据。\n\n如果您要继续使用移动数据,则可能需要支付相应的数据流量费用。"</string>
+    <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"您的数据流量消耗已达到所设置的上限,因此已停用移动数据网络。\n\n如果您要继续使用移动数据网络,则可能需要支付相应的流量费用。"</string>
     <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"恢复"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"未连接互联网"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"已连接到WLAN网络"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"搜索"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"向上滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"向左滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"您将不会受到声音和振动的打扰(闹钟、提醒、活动和所指定来电者的相关提示音除外)。您依然可以听到您选择播放的任何内容(包括音乐、视频和游戏)的相关音效。"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"您将不会受到声音和振动的打扰(闹钟提示音除外)。您依然可以听到您选择播放的任何内容(包括音乐、视频和游戏)的相关音效。"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"您将不会受到声音和振动的打扰(闹钟、提醒、活动和所指定来电者的相关提示音除外)。您依然可以听到您选择播放的任何内容(包括音乐、视频和游戏)的相关音效。"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"您将不会受到声音和振动的打扰(闹钟提示音除外)。您依然可以听到您选择播放的任何内容(包括音乐、视频和游戏)的相关音效。"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"自定义"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"这会阻止所有声音和振动(包括闹钟、音乐、视频和游戏)打扰您。您仍然可以拨打电话。"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"这会阻止所有声音和振动(包括闹钟、音乐、视频和游戏)打扰您。您仍然可以拨打电话。"</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"这会阻止所有声音和振动(包括闹钟、音乐、视频和游戏)打扰您。"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"不太紧急的通知会显示在下方"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"了解详情"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"您已连接到<xliff:g id="VPN_APP">%1$s</xliff:g>,该应用可以监控您的网络活动,包括收发电子邮件、使用应用和浏览网站。"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"打开 VPN 设置"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"打开 VPN 设置"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"打开可信凭据列表"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"您的管理员已开启网络日志功能,该功能会监控您设备上的流量。\n\n如需更多信息,请与您的管理员联系。"</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"此应用没有通知类别"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"无法关闭来自此应用的通知"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">此应用指定的 1 个通知类别(共 <xliff:g id="NUMBER_1">%d</xliff:g> 个)</item>
-      <item quantity="one">此应用指定的 1 个通知类别(共 <xliff:g id="NUMBER_0">%d</xliff:g> 个)</item>
+      <item quantity="other">此应用指定的 1 个通知类别(共 <xliff:g id="NUMBER_1">%s</xliff:g> 个)</item>
+      <item quantity="one">此应用指定的 1 个通知类别(共 <xliff:g id="NUMBER_0">%s</xliff:g> 个)</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>、<xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d 分钟</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"电池使用情况"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"充电过程中无法使用省电模式"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"省电模式"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"充电过程中无法使用省电模式"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"省电模式"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"降低性能并限制后台流量"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g>按钮"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"最小化"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"关闭"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"向下拖动即可关闭"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"画中画菜单"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"菜单"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"<xliff:g id="NAME">%s</xliff:g>目前位于“画中画”中"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"如果您不想让<xliff:g id="NAME">%s</xliff:g>使用此功能,请点按以打开设置,然后关闭此功能。"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"如果您不想让“<xliff:g id="NAME">%s</xliff:g>”使用此功能,请点按以打开设置,然后关闭此功能。"</string>
     <string name="pip_play" msgid="1417176722760265888">"播放"</string>
     <string name="pip_pause" msgid="8881063404466476571">"暂停"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"跳到下一个"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"菜单"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g>应用"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"提醒"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"电池"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"屏幕截图"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"常规消息"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"存储空间"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"在后台运行的应用"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"点按即可详细了解电量和流量消耗情况"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"要关闭移动数据网络吗?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"由于某个应用遮挡了权限请求界面,因此“设置”应用无法验证您的回应。"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index beffd22..3a42827 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"這部電腦的 RSA 密鑰指紋如下:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"一律允許透過這部電腦進行"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"不允許 USB 偵錯"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"目前登入到此裝置的使用者無法啟用 USB 偵錯功能。要使用此功能,請切換為管理員使用者。"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"目前登入此裝置的使用者無法啟用 USB 偵錯功能。如要使用此功能,請切換至主要使用者。"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"放大為全螢幕"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"放大為全螢幕"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"正在儲存螢幕擷取畫面..."</string>
@@ -355,10 +355,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"搜尋"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"向左滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"您不會受音效和震動騷擾 (鬧鐘、提醒、活動,以及您指定的來電者鈴聲除外)。如果您選擇播放特定音樂、影片和遊戲等內容,仍可以聽到相關音訊。"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"您不會受音效和震動騷擾 (鬧鐘除外)。如果您選擇播放特定音樂、影片和遊戲等內容,仍可以聽到相關音訊。"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"您不會受到聲音和震動騷擾 (鬧鐘、提醒、活動和您指定的來電者鈴聲除外)。當您選擇播放音樂、影片和遊戲等,仍可以聽到該內容的聲音。"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"您不會受到聲音和震動騷擾 (鬧鐘除外)。當您選擇播放音樂、影片和遊戲等,仍可以聽到該內容的聲音。"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"自訂"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"這會封鎖所有聲音和震動,包括鬧鐘、音樂、影片和遊戲,但您仍可撥打電話。"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"這會封鎖所有聲音和震動 (包括鬧鐘、音樂、影片及遊戲),但您仍可以撥打電話。"</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"這會封鎖所有聲音和震動,包括鬧鐘、音樂、影片和遊戲。"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"還有 <xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g> 則通知"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"不太緊急的通知會在下方顯示"</string>
@@ -458,7 +458,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"瞭解詳情"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"您已連接至「<xliff:g id="VPN_APP">%1$s</xliff:g>」,此應用程式可以監控您的網絡活動,包括電郵、應用程式及網站。"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"開啟 VPN 設定"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"開啟 VPN 設定"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"開啟信任的憑證"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"您的管理員已開啟網絡記錄功能,以監控您裝置上的流量。\n\n如需瞭解詳情,請聯絡您的管理員。"</string>
@@ -558,8 +558,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"此應用程式沒有通知類別"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"無法關閉此應用程式的通知"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">此應用程式的 1 個通知類別 (共 <xliff:g id="NUMBER_1">%d</xliff:g> 個)</item>
-      <item quantity="one">此應用程式的 1 個通知類別 (共 <xliff:g id="NUMBER_0">%d</xliff:g> 個)</item>
+      <item quantity="other">此應用程式的 1 個通知類別 (共 <xliff:g id="NUMBER_1">%s</xliff:g> 個)</item>
+      <item quantity="one">此應用程式的 1 個通知類別 (共 <xliff:g id="NUMBER_0">%s</xliff:g> 個)</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>、<xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -587,8 +587,8 @@
       <item quantity="one">%d 分鐘</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"電池用量"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"充電時無法使用「省電模式」"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"省電模式"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"充電時無法使用省電模式"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"省電模式"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"降低效能並限制背景數據傳輸"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> 鍵"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
@@ -728,9 +728,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"最小化"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"關閉"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"向下拖曳即可關閉"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"畫中畫選單"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"選單"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"「<xliff:g id="NAME">%s</xliff:g>」目前在畫中畫模式"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"如果您不想「<xliff:g id="NAME">%s</xliff:g>」使用此功能,請輕按以開啟設定,然後停用此功能。"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"如果您不想「<xliff:g id="NAME">%s</xliff:g>」使用此功能,請輕按以開啟設定,然後停用此功能。"</string>
     <string name="pip_play" msgid="1417176722760265888">"播放"</string>
     <string name="pip_pause" msgid="8881063404466476571">"暫停"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"跳到下一個"</string>
@@ -756,6 +756,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"選單"</string>
     <string name="tuner_app" msgid="3507057938640108777">"「<xliff:g id="APP">%1$s</xliff:g>」應用程式"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"通知"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"電池"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"螢幕擷取畫面"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"一般訊息"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"儲存空間"</string>
@@ -776,4 +777,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"正在背景中執行的應用程式"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"輕按即可查看電池和數據用量詳情"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"要關閉流動數據嗎?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"由於某個應用程式已阻擋權限要求畫面,因此「設定」應用程式無法驗證您的回應。"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 87bc6d3..2152ae3 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"這台電腦的 RSA 金鑰指紋如下:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"一律允許透過這台電腦進行"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"無權使用 USB 偵錯功能"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"這部裝置目前的登入者無法啟用 USB 偵錯功能。如要使用這項功能,請切換成管理員使用者。"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"目前登入這個裝置的使用者無法啟用 USB 偵錯功能。如要使用這項功能,請切換到主要使用者。"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"放大為全螢幕"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"放大為全螢幕"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"正在儲存螢幕擷取畫面…"</string>
@@ -73,7 +73,7 @@
     <string name="screenshot_saved_title" msgid="6461865960961414961">"已拍攝螢幕擷取畫面。"</string>
     <string name="screenshot_saved_text" msgid="2685605830386712477">"輕觸即可查看螢幕擷圖。"</string>
     <string name="screenshot_failed_title" msgid="705781116746922771">"無法拍攝螢幕擷取畫面。"</string>
-    <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"儲存螢幕擷圖時發生問題。"</string>
+    <string name="screenshot_failed_to_save_unknown_text" msgid="7887826345701753830">"儲存螢幕擷取畫面時發生問題。"</string>
     <string name="screenshot_failed_to_save_text" msgid="2592658083866306296">"由於儲存空間有限,因此無法儲存螢幕擷取畫面。"</string>
     <string name="screenshot_failed_to_capture_text" msgid="173674476457581486">"這個應用程式或貴機構不允許擷取螢幕畫面"</string>
     <string name="usb_preference_title" msgid="6551050377388882787">"USB 檔案傳輸選項"</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"搜尋"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
     <string name="description_direction_left" msgid="7207478719805562165">"向左滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"裝置不會發出音效或震動造成干擾,但會保留鬧鐘、提醒、活動和你指定的來電者響鈴。如果你選擇播放特定音樂、影片和遊戲等內容,還是可以聽見相關音訊。"</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"裝置不會發出音效或震動造成干擾,但會保留鬧鐘響鈴。如果你選擇播放特定音樂、影片和遊戲等內容,還是可以聽見相關音訊。"</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"裝置不會發出音效或震動造成干擾,但是會保留與鬧鐘、提醒、活動和指定來電者有關的設定。如果你選擇播放音樂、影片和遊戲等內容,還是可以聽見相關音訊。"</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"裝置不會發出音效或震動造成干擾,但是會保留鬧鐘響鈴。如果你選擇播放音樂、影片和遊戲等內容,還是可以聽見相關音訊。"</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"自訂"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"這會封鎖「所有」聲音和震動干擾,包括鬧鐘、音樂、影片和遊戲在內,但你仍然可以撥打電話。"</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"這會封鎖「所有」音效和震動干擾,包括鬧鐘、音樂、影片和遊戲在內,但你仍然可以撥打電話。"</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"這會封鎖「所有」聲音和震動干擾,包括鬧鐘、音樂、影片和遊戲在內。"</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"還有 <xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g> 則通知"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"較不緊急的通知會顯示在下方"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"瞭解詳情"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"由於你已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」,你的網路活動 (包括收發電子郵件、使用應用程式及瀏覽網站) 可能會受到這個應用程式監控。"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"開啟 VPN 設定"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"開啟 VPN 設定"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"開啟信任的憑證"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"你的管理員已啟用網路紀錄功能,可監控你裝置的流量。\n\n如需詳細資訊,請與你的管理員聯絡。"</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"這個應用程式沒有通知類別"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"無法關閉這個應用程式發出的通知"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="other">在 <xliff:g id="NUMBER_1">%d</xliff:g> 個通知類別中,有 1 個類別是來自這個應用程式</item>
-      <item quantity="one">在 <xliff:g id="NUMBER_0">%d</xliff:g> 個通知類別中,有 1 個類別是來自這個應用程式</item>
+      <item quantity="other">在 <xliff:g id="NUMBER_1">%s</xliff:g> 個通知類別中,有 1 個類別是來自這個應用程式</item>
+      <item quantity="one">在 <xliff:g id="NUMBER_0">%s</xliff:g> 個通知類別中,有 1 個類別是來自這個應用程式</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>、<xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="one">%d 分鐘</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"電池用量"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"充電時無法使用節約耗電量模式"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"節約耗電量"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"充電時無法使用節約耗電量模式"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"節約耗電量"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"降低效能並限制背景資料傳輸"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"<xliff:g id="NAME">%1$s</xliff:g> 按鈕"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Home 鍵"</string>
@@ -616,7 +616,7 @@
     <string name="keyboard_key_numpad_template" msgid="8729216555174634026">"數字鍵 <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_shortcut_group_system" msgid="6472647649616541064">"系統"</string>
     <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"主畫面"</string>
-    <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"近期活動"</string>
+    <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"最近"</string>
     <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"返回"</string>
     <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"通知"</string>
     <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"鍵盤快速鍵"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"最小化"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"關閉"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"向下拖曳即可關閉"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"子母畫面選單"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"選單"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"「<xliff:g id="NAME">%s</xliff:g>」目前在子母畫面中"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"如果你不想讓「<xliff:g id="NAME">%s</xliff:g>」使用這項功能,請輕觸開啟設定頁面,然後停用此功能。"</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"如果你不想讓「<xliff:g id="NAME">%s</xliff:g>」使用這項功能,請輕觸開啟設定頁面,然後停用此功能。"</string>
     <string name="pip_play" msgid="1417176722760265888">"播放"</string>
     <string name="pip_pause" msgid="8881063404466476571">"暫停"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"跳到下一個"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"選單"</string>
     <string name="tuner_app" msgid="3507057938640108777">"「<xliff:g id="APP">%1$s</xliff:g>」應用程式"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"快訊"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"電池"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"螢幕擷取畫面"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"一般訊息"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"儲存空間"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"在背景執行的應用程式"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"輕觸即可查看電池和數據用量詳情"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"要關閉行動數據嗎?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"由於某個應用程式覆蓋了權限要求畫面,因此「設定」應用程式無法驗證你的回應。"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index bd54208..de61bf5 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -64,7 +64,7 @@
     <string name="usb_debugging_message" msgid="2220143855912376496">"Izigxivizo zeminwe zokhiye we-RSA wekhompyutha ngu:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Hlala uvumela njalo kusuka kule khompyutha"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Ukususa iphutha kwe-USB akuvunyelwe"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"Umsebenzisi manje ongene ngemvume kule divayisi akakwazi ukuvula ukususa iphutha kwe-USB. Ukuze usebenzise lesi sici, sicela ushintshele kumsebenzisi ongumlawuli."</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"Umsebenzisi manje ongene ngemvume kule divayisi entsha akakwazi ukuvula ukulungisa amaphutha ku-USB. Ukuze usebenzise lesi sici, shintshela kumsebenzisi oyinhloko."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Sondeza ukugcwalisa isikrini"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Nweba ukugcwalisa isikrini"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Ilondoloz umfanekiso weskrini..."</string>
@@ -353,10 +353,10 @@
     <string name="description_target_search" msgid="3091587249776033139">"Sesha"</string>
     <string name="description_direction_up" msgid="7169032478259485180">"Shelelisela ngenhla ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
     <string name="description_direction_left" msgid="7207478719805562165">"Shelelisela ngakwesokunxele ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="zen_priority_introduction" msgid="7577965386868311310">"Ngeke uphazanyiswe yimisindo nokudlidliza, ngaphandle kwama-alamu, izikhumbuzi, izehlakalo, nabashayi obacacisayo. Usazokuzwa okuthile okhetha ukudlala kufaka phakathi umculo, amavidiyo, namageyimu."</string>
-    <string name="zen_alarms_introduction" msgid="7034415210361973827">"Ngeke uphazanyiswe yimisindo nokudlidliza, ngaphandle kwama-alamu. Usazokuzwa okuthile okhetha ukudlala kufaka phakathi umculo, amavidiyo, namageyimu."</string>
+    <string name="zen_priority_introduction" msgid="1149025108714420281">"Ngeke uphazanyiswe imisindo nokudlidliza, ngaphandle kusukela kuma-alamu, izikhumbuzi, imicimbi, nabafonayo obacacisayo. Usazozwa noma yini okhetha ukuyidlala okufaka umculo, amavidiyo, namageyimu."</string>
+    <string name="zen_alarms_introduction" msgid="4934328096749380201">"Ngeke uze uphazanyiswe imisindo nokudlidliza, ngaphandle kusukela kuma-alamu. Usazozwa noma yini okhetha ukuyidlala okufaka umculo, amavidiyo, namageyimu."</string>
     <string name="zen_priority_customize_button" msgid="7948043278226955063">"Enza ngendlela oyifisayo"</string>
-    <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Lokhu kuvimbela YONKE imisindo nokudludliza, kufaka phakathi ama-alamu, umculo, amavidiyo, namageyimu. Usazokwazi ukwenza amkholi wefoni."</string>
+    <string name="zen_silence_introduction_voice" msgid="3948778066295728085">"Lokhu kuvimbela YONKE imisindo nokudlidliza, okufaka kusukela kuma-alamu, umculo, amavidiyo, namageyimu. Usazokwazi ukwenza amakholi efoni."</string>
     <string name="zen_silence_introduction" msgid="3137882381093271568">"Lokhu kuvimbela YONKE imisindo nokudlidliza, kufaka phakathi kusuka kuma-alamu, umculo, amavidiyo, namageyimu."</string>
     <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string>
     <string name="speed_bump_explanation" msgid="1288875699658819755">"Izaziso ezingasheshi kakhulu ezingezansi"</string>
@@ -456,7 +456,7 @@
     <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Funda kabanzi"</string>
     <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Uxhumeke ku-<xliff:g id="VPN_APP">%1$s</xliff:g>, engaqapha umsebenzi wenethiwekhi yakho, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
-    <string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Vula izilungiselelo ze-VPN"</string>
+    <string name="monitoring_description_vpn_settings" msgid="6434859242636063861">"Vula izilungiselelo ze-VPN"</string>
     <string name="monitoring_description_ca_cert_settings_separator" msgid="4987350385906393626">" "</string>
     <string name="monitoring_description_ca_cert_settings" msgid="5489969458872997092">"Vula ukuqinisekisa okuthenjiwe"</string>
     <string name="monitoring_description_network_logging" msgid="7223505523384076027">"Umlawuli wakho uvule ukungena kwenethiwekhi, okuhlola ithrafikhi kudivayisi yakho.\n\nNgolwazi olubanzi xhumana nomlawuli wakho."</string>
@@ -556,8 +556,8 @@
     <string name="notification_default_channel_desc" msgid="2506053815870808359">"Lolu hlelo lokusebenza alunazo izigaba zesaziso"</string>
     <string name="notification_unblockable_desc" msgid="3561016061737896906">"Izaziso kusuka kulolu hlelo lokusebenza azikwazi ukuvalwa"</string>
     <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663">
-      <item quantity="one">1 isigaba kwezingu-<xliff:g id="NUMBER_1">%d</xliff:g> sezaziso kusukela kulolu hlelo lokusebenza</item>
-      <item quantity="other">1 isigaba kwezingu-<xliff:g id="NUMBER_1">%d</xliff:g> sezaziso kusukela kulolu hlelo lokusebenza</item>
+      <item quantity="one">1 isigaba kwezingu-<xliff:g id="NUMBER_1">%s</xliff:g> sezaziso kusukela kulolu hlelo lokusebenza</item>
+      <item quantity="other">1 isigaba kwezingu-<xliff:g id="NUMBER_1">%s</xliff:g> sezaziso kusukela kulolu hlelo lokusebenza</item>
     </plurals>
     <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string>
     <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157">
@@ -585,8 +585,8 @@
       <item quantity="other">%d amaminithi</item>
     </plurals>
     <string name="battery_panel_title" msgid="7944156115535366613">"Ukusetshenziswa kwebhethri"</string>
-    <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Isilondolozi sebhethri asitholakali ngesikhathi sokushaja"</string>
-    <string name="battery_detail_switch_title" msgid="6285872470260795421">"Isilondolozi sebhethri"</string>
+    <string name="battery_detail_charging_summary" msgid="4055327085770378335">"Isilondolozi sebhethri asitholakali ngesikhathi sokushaja"</string>
+    <string name="battery_detail_switch_title" msgid="8763441006881907058">"Isilondolozi sebhethri"</string>
     <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Sehlisa ukusebenza nedatha yasemuva"</string>
     <string name="keyboard_key_button_template" msgid="6230056639734377300">"Inkinobho <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="2243500072071305073">"Ekhaya"</string>
@@ -726,9 +726,9 @@
     <string name="pip_phone_minimize" msgid="1079119422589131792">"Nciphisa"</string>
     <string name="pip_phone_close" msgid="8416647892889710330">"Vala"</string>
     <string name="pip_phone_dismiss_hint" msgid="6351678169095923899">"Hudulela phansi ukuze ucashise"</string>
-    <string name="pip_menu_title" msgid="3328510504196964712">"Isithombe ngemenyu yesithombe ngesithombe"</string>
+    <string name="pip_menu_title" msgid="4707292089961887657">"Imenyu"</string>
     <string name="pip_notification_title" msgid="3204024940158161322">"U-<xliff:g id="NAME">%s</xliff:g> ungaphakathi kwesithombe esiphakathi kwesithombe"</string>
-    <string name="pip_notification_message" msgid="4171698133469539591">"Uma ungafuni ukuthi i-<xliff:g id="NAME">%s</xliff:g> isebenzise lesi sici, thepha ukuze uvule izilungiselelo bese usivale."</string>
+    <string name="pip_notification_message" msgid="5619512781514343311">"Uma ungafuni i-<xliff:g id="NAME">%s</xliff:g> ukuthi isebenzise lesi sici, thepha ukuze uvule izilungiselelo uphinde uyivale."</string>
     <string name="pip_play" msgid="1417176722760265888">"Dlala"</string>
     <string name="pip_pause" msgid="8881063404466476571">"Misa isikhashana"</string>
     <string name="pip_skip_to_next" msgid="1948440006726306284">"Yeqela kokulandelayo"</string>
@@ -754,6 +754,7 @@
     <string name="tuner_menu" msgid="191640047241552081">"Imenyu"</string>
     <string name="tuner_app" msgid="3507057938640108777">"<xliff:g id="APP">%1$s</xliff:g> uhlelo lokusebenza"</string>
     <string name="notification_channel_alerts" msgid="4496839309318519037">"Izexwayiso"</string>
+    <string name="notification_channel_battery" msgid="5786118169182888462">"Ibhethri"</string>
     <string name="notification_channel_screenshot" msgid="6314080179230000938">"Izithombe-skrini"</string>
     <string name="notification_channel_general" msgid="4525309436693914482">"Imilayezo ejwayelekile"</string>
     <string name="notification_channel_storage" msgid="3077205683020695313">"Isitoreji"</string>
@@ -774,4 +775,5 @@
     <string name="running_foreground_services_title" msgid="381024150898615683">"Izinhlelo zokusebenza zisebenza ngasemuva"</string>
     <string name="running_foreground_services_msg" msgid="6326247670075574355">"Thepha ngemininingwane ekusetshenzisweni kwebhethri nedatha"</string>
     <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vala idatha yeselula?"</string>
+    <string name="touch_filtered_warning" msgid="8671693809204767551">"Ngoba uhlelo lokusebenza lusitha isicelo semvume, Izilungiselelo azikwazi ukuqinisekisa impendulo yakho."</string>
 </resources>
diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml
index 745d6015..a923f0b 100644
--- a/packages/SystemUI/res/values/attrs.xml
+++ b/packages/SystemUI/res/values/attrs.xml
@@ -34,6 +34,7 @@
         <attr name="recentItemLayout" format="reference" />
         <!-- Style for the "Clear all" button. -->
         <attr name="clearAllStyle" format="reference" />
+        <attr name="clearAllBackgroundColor" format="reference" />
     </declare-styleable>
     <declare-styleable name="DeadZone">
         <attr name="minSize" format="dimension" />
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index f72f379..f244d88 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -60,6 +60,11 @@
     <!-- The background color for the freeform workspace. -->
     <color name="recents_freeform_workspace_bg_color">#33FFFFFF</color>
 
+    <!-- The background color for clear all button on light backgrounds if not transparent. -->
+    <color name="recents_clear_all_button_bg_light_color">#CCFFFFFF</color>
+    <!-- The background color for clear all button on dark backgrounds if not transparent. -->
+    <color name="recents_clear_all_button_bg_dark_color">#CC000000</color>
+
     <color name="keyguard_affordance">#ffffffff</color>
 
     <!-- The color of the legacy notification background -->
diff --git a/packages/SystemUI/res/values/colors_car.xml b/packages/SystemUI/res/values/colors_car.xml
index 4faf252..710b3e0 100644
--- a/packages/SystemUI/res/values/colors_car.xml
+++ b/packages/SystemUI/res/values/colors_car.xml
@@ -17,8 +17,15 @@
  */
 -->
 <resources>
+    <color name="car_qs_background_primary">#263238</color> <!-- Blue Gray 900 -->
     <color name="car_user_switcher_progress_bgcolor">#00000000</color> <!-- Transparent -->
     <color name="car_user_switcher_progress_fgcolor">#80CBC4</color> <!-- Teal 200 -->
-    <color name="car_start_driving_background">#FAFAFA</color> <!-- Grey 50 -->
-    <color name="car_start_driving_text">#212121</color> <!-- Grey 900 -->
+    <color name="car_user_switcher_no_user_image_bgcolor">@color/car_grey_50</color>
+    <color name="car_user_switcher_no_user_image_fgcolor">@color/car_grey_900</color>
+    <color name="car_start_driving_background">@color/car_grey_50</color>
+    <color name="car_start_driving_text">@color/car_grey_900</color>
+    <color name="car_qs_footer_user_name_color">@color/car_grey_50</color>
+
+    <color name="car_grey_50">#FAFAFA</color>
+    <color name="car_grey_900">#212121</color>
 </resources>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index a077fdb..8a1e0b9 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -347,26 +347,6 @@
     <!-- Whether or not a background should be drawn behind a notification. -->
     <bool name="config_drawNotificationBackground">true</bool>
 
-    <!-- Whether or not the edit icon on the quick settings header is shown. -->
-    <bool name="config_showQuickSettingsEditingIcon">true</bool>
-
-    <!-- Whether or not the multi-user switcher should be visible even if the quick settings are
-         not expanded. If there are not multiple users on the system, the switcher will still
-         hide itself. -->
-    <bool name="config_alwaysShowMultiUserSwitcher">false</bool>
-
-    <!-- Whether or not the expand indicator is visible for manually expanding the quick settings
-         panel. -->
-    <bool name="config_showQuickSettingsExpandIndicator">true</bool>
-
-    <!-- Whether or not to display the row of quick settings icons separate from the full quick
-         settings panel. -->
-    <bool name="config_showQuickSettingsRow">true</bool>
-
-    <!-- Whether or not the quick settings should be revealed on an overscroll of the
-         notifications panel. -->
-    <bool name="config_enableQuickSettingsOverscrollExpansion">true</bool>
-
     <!-- Whether or the notifications can be shown and dismissed with a drag. -->
     <bool name="config_enableNotificationShadeDrag">true</bool>
 
@@ -433,4 +413,23 @@
          one bar higher than they actually are -->
     <bool name="config_inflateSignalStrength">false</bool>
 
+    <!-- Should we vibrate on an icon animation of the shelf. This should only be active if the
+     vibrator is capable of subtle vibrations -->
+    <bool name="config_vibrateOnIconAnimation">false</bool>
+
+    <!-- If true, enable the advance anti-falsing classifier on the lockscreen. On some devices it
+         does not work well, particularly with noisy touchscreens. Note that disabling it may
+         increase the rate of unintentional unlocks. -->
+    <bool name="config_lockscreenAntiFalsingClassifierEnabled">true</bool>
+
+    <!-- Snooze: default notificaiton snooze time. -->
+    <integer name="config_notification_snooze_time_default">60</integer>
+
+    <!-- Snooze: List of snooze values in integer minutes. -->
+    <integer-array name="config_notification_snooze_times">
+        <item>15</item>
+        <item>30</item>
+        <item>60</item>
+        <item>120</item>
+    </integer-array>
 </resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 94687de..9901f6f 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -192,6 +192,23 @@
     <!-- Height of the status bar header bar -->
     <dimen name="status_bar_header_height">124dp</dimen>
 
+    <!-- Height of the status bar header bar in the car setting. -->
+    <dimen name="car_status_bar_header_height">128dp</dimen>
+
+    <!-- The bottom padding of the status bar header. -->
+    <dimen name="status_bar_header_padding_bottom">48dp</dimen>
+
+    <!-- The height of the container that holds the system icons in the quick settings header. -->
+    <dimen name="qs_header_system_icons_area_height">40dp</dimen>
+
+    <!-- The height of the container that holds the system icons in the quick settings header in the
+         car setting. -->
+    <dimen name="car_qs_header_system_icons_area_height">54dp</dimen>
+
+    <!-- The height of the quick settings footer that holds the user switcher, settings icon,
+         etc. -->
+    <dimen name="qs_footer_height">48dp</dimen>
+
     <!-- Height of the status bar header bar when expanded -->
     <dimen name="status_bar_header_height_expanded">124dp</dimen>
 
@@ -281,6 +298,7 @@
     <dimen name="qs_detail_padding_start">16dp</dimen>
     <dimen name="qs_detail_items_padding_top">4dp</dimen>
     <dimen name="qs_detail_item_icon_size">24dp</dimen>
+    <dimen name="qs_detail_item_icon_width">32dp</dimen>
     <dimen name="qs_detail_item_icon_marginStart">0dp</dimen>
     <dimen name="qs_detail_item_icon_marginEnd">20dp</dimen>
     <dimen name="qs_footer_padding_start">16dp</dimen>
@@ -829,11 +847,15 @@
     <dimen name="edge_margin">16dp</dimen>
 
     <dimen name="rounded_corner_radius">0dp</dimen>
-    <dimen name="rounded_corner_content_padding">8dp</dimen>
+    <dimen name="rounded_corner_content_padding">0dp</dimen>
+    <dimen name="nav_content_padding">0dp</dimen>
 
     <!-- Intended corner radius when drawing the mobile signal -->
     <dimen name="stat_sys_mobile_signal_corner_radius">0.75dp</dimen>
     <!-- How far to inset the rounded edges -->
     <dimen name="stat_sys_mobile_signal_circle_inset">0.9dp</dimen>
 
+    <!-- Home button padding for sizing -->
+    <dimen name="home_padding">15dp</dimen>
+
 </resources>
diff --git a/packages/SystemUI/res/values/dimens_car.xml b/packages/SystemUI/res/values/dimens_car.xml
index d5d4e10..8853587 100644
--- a/packages/SystemUI/res/values/dimens_car.xml
+++ b/packages/SystemUI/res/values/dimens_car.xml
@@ -18,10 +18,13 @@
 <resources>
     <dimen name="car_margin">148dp</dimen>
 
-    <dimen name="car_fullscreen_user_pod_margin_side">44dp</dimen>
-    <dimen name="car_fullscreen_user_pod_margin_above_text">24dp</dimen>
+    <dimen name="car_fullscreen_user_pod_margin_name_top">24dp</dimen>
+    <dimen name="car_fullscreen_user_pod_margin_name_bottom">64dp</dimen>
+    <dimen name="car_fullscreen_user_pod_margin_between">24dp</dimen>
+    <dimen name="car_fullscreen_user_pod_icon_text_size">96dp</dimen>
     <dimen name="car_fullscreen_user_pod_image_avatar_width">192dp</dimen>
     <dimen name="car_fullscreen_user_pod_image_avatar_height">192dp</dimen>
+    <dimen name="car_fullscreen_user_pod_width">264dp</dimen>
     <dimen name="car_fullscreen_user_pod_text_size">40sp</dimen> <!-- B1 -->
 
     <dimen name="car_navigation_button_width">64dp</dimen>
@@ -35,5 +38,17 @@
     <dimen name="car_start_driving_corner_radius">16dp</dimen>
     <dimen name="car_start_driving_padding_side">30dp</dimen>
     <dimen name="car_start_driving_height">80dp</dimen>
-    <dimen name="car_start_driving_text_size">32sp</dimen> <!-- B2 -->
+    <dimen name="car_start_driving_text_size">@dimen/car_body2_size</dimen>
+
+    <dimen name="car_qs_footer_height">112dp</dimen>
+    <dimen name="car_qs_footer_padding_bottom">16dp</dimen>
+    <dimen name="car_qs_footer_padding_top">16dp</dimen>
+    <dimen name="car_qs_footer_padding_end">46dp</dimen>
+    <dimen name="car_qs_footer_padding_start">46dp</dimen>
+    <dimen name="car_qs_footer_icon_width">56dp</dimen>
+    <dimen name="car_qs_footer_icon_height">56dp</dimen>
+    <dimen name="car_qs_footer_user_switch_margin_right">46dp</dimen>
+    <dimen name="car_qs_footer_user_name_text_size">@dimen/car_body2_size</dimen>
+
+    <dimen name="car_body2_size">26sp</dimen>
 </resources>
diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml
index b27dedd..e5f8029 100644
--- a/packages/SystemUI/res/values/ids.xml
+++ b/packages/SystemUI/res/values/ids.xml
@@ -59,6 +59,7 @@
     <item type="id" name="transformation_start_y_tag"/>
     <item type="id" name="transformation_start_scale_x_tag"/>
     <item type="id" name="transformation_start_scale_y_tag"/>
+    <item type="id" name="continuous_clipping_tag"/>
 
     <!-- Whether the icon is from a notification for which targetSdk < L -->
     <item type="id" name="icon_is_pre_L"/>
@@ -81,10 +82,10 @@
 
     <!-- Accessibility actions for the notification menu -->
     <item type="id" name="action_snooze_undo"/>
-    <item type="id" name="action_snooze_15_min"/>
-    <item type="id" name="action_snooze_30_min"/>
-    <item type="id" name="action_snooze_1_hour"/>
-    <item type="id" name="action_snooze_2_hours"/>
+    <item type="id" name="action_snooze_shorter"/>
+    <item type="id" name="action_snooze_short"/>
+    <item type="id" name="action_snooze_long"/>
+    <item type="id" name="action_snooze_longer"/>
     <item type="id" name="action_snooze_assistant_suggestion_1"/>
 </resources>
 
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 6202d13..7ccb6b0 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -163,7 +163,7 @@
     <string name="usb_debugging_secondary_user_title">USB debugging not allowed</string>
 
     <!-- Message of notification shown when trying to enable USB debugging but a secondary user is the current foreground user. -->
-    <string name="usb_debugging_secondary_user_message">The user currently signed in to this device can\'t turn on USB debugging. To use this feature, please switch to an Admin user.</string>
+    <string name="usb_debugging_secondary_user_message">The user currently signed in to this device can\'t turn on USB debugging. To use this feature, switch to the primary user.</string>
 
     <!-- Checkbox label for application compatibility mode ON (zooming app to look like it's running
          on a phone).  [CHAR LIMIT=25] -->
@@ -840,16 +840,16 @@
     <string name="description_direction_left">"Slide left for <xliff:g id="target_description" example="Unlock">%s</xliff:g>.</string>
 
     <!-- Zen mode: Priority only introduction message on first use -->
-    <string name="zen_priority_introduction">You won’t be disturbed by sounds and vibrations, except from alarms, reminders, events, and callers you specify. You'll still hear anything you choose to play including music, videos, and games.</string>
+    <string name="zen_priority_introduction">You won\'t be disturbed by sounds and vibrations, except from alarms, reminders, events, and callers you specify. You\'ll still hear anything you choose to play including music, videos, and games.</string>
 
     <!-- Zen mode: Alarms only introduction message on first use -->
-    <string name="zen_alarms_introduction">You won’t be disturbed by sounds and vibrations, except from alarms. You'll still hear anything you choose to play including music, videos, and games.</string>
+    <string name="zen_alarms_introduction">You won\'t be disturbed by sounds and vibrations, except from alarms. You\'ll still hear anything you choose to play including music, videos, and games.</string>
 
     <!-- Zen mode: Priority only customization button label -->
     <string name="zen_priority_customize_button">Customize</string>
 
     <!-- Zen mode: Total silence introduction message on first use (voice capable devices) -->
-    <string name="zen_silence_introduction_voice">This blocks ALL sounds and vibrations, including from alarms, music, videos, and games. You’ll still be able to make phone calls.</string>
+    <string name="zen_silence_introduction_voice">This blocks ALL sounds and vibrations, including from alarms, music, videos, and games. You\'ll still be able to make phone calls.</string>
 
     <!-- Zen mode: Total silence introduction message on first use (non-voice capable devices) -->
     <string name="zen_silence_introduction">This blocks ALL sounds and vibrations, including from alarms, music, videos, and games.</string>
@@ -1152,7 +1152,7 @@
     <string name="monitoring_description_vpn_settings_separator">" "</string>
 
     <!-- Monitoring dialog: Link to open the VPN settings page [CHAR LIMIT=60] -->
-    <string name="monitoring_description_vpn_settings">Open VPN Settings</string>
+    <string name="monitoring_description_vpn_settings">Open VPN settings</string>
 
     <!-- Monitoring dialog: Space that separates the CA certs body text and the "Open trusted credentials" link that follows it. [CHAR LIMIT=5] -->
     <string name="monitoring_description_ca_cert_settings_separator">" "</string>
@@ -1466,8 +1466,8 @@
     <!-- Notification: Control panel: Label that shows how many channels this application has
         defined, describing the current notification channel as "1 out of n notification categories from this app". -->
     <plurals name="notification_num_channels_desc">
-        <item quantity="one">1 out of <xliff:g id="number">%d</xliff:g> notification category from this app</item>
-        <item quantity="other">1 out of <xliff:g id="number">%d</xliff:g> notification categories from this app</item>
+        <item quantity="one">1 out of <xliff:g id="number">%s</xliff:g> notification category from this app</item>
+        <item quantity="other">1 out of <xliff:g id="number">%s</xliff:g> notification categories from this app</item>
     </plurals>
 
     <!-- Notification: Control panel: For bundles of notifications, this label that lists the
@@ -1538,10 +1538,10 @@
     <string name="battery_panel_title">Battery usage</string>
 
     <!-- Summary of battery saver not available [CHAR LIMIT=NONE] -->
-    <string name="battery_detail_charging_summary">Battery Saver not available during charging</string>
+    <string name="battery_detail_charging_summary">Battery saver not available during charging</string>
 
     <!-- Title of switch for battery saver [CHAR LIMIT=NONE] -->
-    <string name="battery_detail_switch_title">Battery Saver</string>
+    <string name="battery_detail_switch_title">Battery saver</string>
 
     <!-- Summary of switch for battery saver [CHAR LIMIT=NONE] -->
     <string name="battery_detail_switch_summary">Reduces performance and background data</string>
@@ -1904,13 +1904,13 @@
     <string name="pip_phone_dismiss_hint">Drag down to dismiss</string>
 
     <!-- Title of menu shown over picture-in-picture. Used for accessibility. -->
-    <string name="pip_menu_title">Picture in picture menu</string>
+    <string name="pip_menu_title">Menu</string>
 
     <!-- PiP BTW notification title. [CHAR LIMIT=50] -->
     <string name="pip_notification_title"><xliff:g id="name" example="Google Maps">%s</xliff:g> is in picture-in-picture</string>
 
     <!-- PiP BTW notification description. [CHAR LIMIT=NONE] -->
-    <string name="pip_notification_message">If you don’t want <xliff:g id="name" example="Google Maps">%s</xliff:g> to use this feature, tap to open settings and turn it off.</string>
+    <string name="pip_notification_message">If you don\'t want <xliff:g id="name" example="Google Maps">%s</xliff:g> to use this feature, tap to open settings and turn it off.</string>
 
     <!-- Button to play the current media on picture-in-picture (PIP) [CHAR LIMIT=30] -->
     <string name="pip_play">Play</string>
@@ -1987,8 +1987,10 @@
     <!-- SysUI Tuner: App subheading for shortcut selection [CHAR LIMIT=60] -->
     <string name="tuner_app"><xliff:g id="app">%1$s</xliff:g> app</string>
 
-    <!-- Title for the notification channel containing important alerts like low battery. [CHAR LIMIT=NONE] -->
+    <!-- Title for the notification channel containing important alerts. [CHAR LIMIT=NONE] -->
     <string name="notification_channel_alerts">Alerts</string>
+    <!-- Title for the notification channel for battery warnings (i.e. < 15%). [CHAR LIMIT=NONE] -->
+    <string name="notification_channel_battery">Battery</string>
     <!-- Title for the notification channel dedicated to screenshot progress. [CHAR LIMIT=NONE] -->
     <string name="notification_channel_screenshot">Screenshots</string>
     <!-- Title for the notification channel for miscellaneous notices. [CHAR LIMIT=NONE] -->
@@ -2049,4 +2051,10 @@
     <!-- Prompt to turn off data usage [CHAR LIMIT=NONE] -->
     <string name="data_usage_disable_mobile" msgid="8656552431969276305">Turn off mobile data?</string>
 
+    <!-- Warning shown when user input has been blocked due to another app overlaying screen
+     content. Since we don't know what the app is showing on top of the input target, we
+     can't verify user consent. [CHAR LIMIT=NONE] -->
+    <string name="touch_filtered_warning">Because an app is obscuring a permission request, Settings
+        can’t verify your response.</string>
+
 </resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index aacb4aa..90c5977 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -34,11 +34,13 @@
         <item name="android:windowShowWallpaper">true</item>
         <item name="android:windowDisablePreview">true</item>
         <item name="clearAllStyle">@style/ClearAllButtonDefaultMargins</item>
+        <item name="clearAllBackgroundColor">@color/recents_clear_all_button_bg_dark_color</item>
         <item name="wallpaperTextColor">@*android:color/primary_text_material_dark</item>
         <item name="wallpaperTextColorSecondary">@*android:color/secondary_text_material_dark</item>
     </style>
 
     <style name="RecentsTheme.Wallpaper.Light">
+        <item name="clearAllBackgroundColor">@color/recents_clear_all_button_bg_light_color</item>
         <item name="wallpaperTextColor">@*android:color/primary_text_material_light</item>
         <item name="wallpaperTextColorSecondary">@*android:color/secondary_text_material_light</item>
     </style>
@@ -443,8 +445,7 @@
         <item name="preferenceTheme">@style/TunerPreferenceTheme</item>
     </style>
 
-    <style name="TunerPreferenceTheme" parent="@android:style/Theme.DeviceDefault.Settings">
-        <item name="dropdownPreferenceStyle">@style/Preference.DropDown.Material</item>
+    <style name="TunerPreferenceTheme" parent="@style/PreferenceThemeOverlay.SettingsBase">
     </style>
 
     <style name="TextAppearance.NotificationInfo">
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardDisplayManager.java b/packages/SystemUI/src/com/android/keyguard/KeyguardDisplayManager.java
index 8de1d31..2bc0e45c 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardDisplayManager.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardDisplayManager.java
@@ -15,6 +15,8 @@
  */
 package com.android.keyguard;
 
+import static android.view.Display.INVALID_DISPLAY;
+
 import android.app.Presentation;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -28,16 +30,21 @@
 import android.view.View;
 import android.view.WindowManager;
 
+// TODO(multi-display): Support multiple external displays
 public class KeyguardDisplayManager {
     protected static final String TAG = "KeyguardDisplayManager";
     private static boolean DEBUG = KeyguardConstants.DEBUG;
+
+    private final ViewMediatorCallback mCallback;
+    private final MediaRouter mMediaRouter;
+    private final Context mContext;
+
     Presentation mPresentation;
-    private MediaRouter mMediaRouter;
-    private Context mContext;
     private boolean mShowing;
 
-    public KeyguardDisplayManager(Context context) {
+    public KeyguardDisplayManager(Context context, ViewMediatorCallback callback) {
         mContext = context;
+        mCallback = callback;
         mMediaRouter = (MediaRouter) mContext.getSystemService(Context.MEDIA_ROUTER_SERVICE);
     }
 
@@ -90,6 +97,7 @@
     };
 
     protected void updateDisplays(boolean showing) {
+        Presentation originalPresentation = mPresentation;
         if (showing) {
             MediaRouter.RouteInfo route = mMediaRouter.getSelectedRoute(
                     MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY);
@@ -121,6 +129,13 @@
                 mPresentation = null;
             }
         }
+
+        // mPresentation is only updated when the display changes
+        if (mPresentation != originalPresentation) {
+            final int displayId = mPresentation != null
+                    ? mPresentation.getDisplay().getDisplayId() : INVALID_DISPLAY;
+            mCallback.onSecondaryDisplayShowingChanged(displayId);
+        }
     }
 
     private final static class KeyguardPresentation extends Presentation {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardEsimArea.java b/packages/SystemUI/src/com/android/keyguard/KeyguardEsimArea.java
index ce3068d..cb5afec 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardEsimArea.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardEsimArea.java
@@ -72,6 +72,7 @@
     public KeyguardEsimArea(Context context, AttributeSet attrs, int defStyleAttr,
             int defStyleRes) {
         super(context, attrs, defStyleAttr, defStyleRes);
+        mEuiccManager = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);
         setOnClickListener(this);
     }
 
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java
index 4c7b48d..432b406 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinView.java
@@ -60,9 +60,23 @@
     KeyguardUpdateMonitorCallback mUpdateMonitorCallback = new KeyguardUpdateMonitorCallback() {
         @Override
         public void onSimStateChanged(int subId, int slotId, State simState) {
-           if (DEBUG) Log.v(TAG, "onSimStateChanged(subId=" + subId + ",state=" + simState + ")");
-           resetState();
-       };
+            if (DEBUG) Log.v(TAG, "onSimStateChanged(subId=" + subId + ",state=" + simState + ")");
+            switch(simState) {
+                // If the SIM is removed, then we must remove the keyguard. It will be put up
+                // again when the PUK locked SIM is re-entered.
+                case ABSENT: {
+                    KeyguardUpdateMonitor.getInstance(getContext()).reportSimUnlocked(mSubId);
+                    // onSimStateChanged callback can fire when the SIM PIN lock is not currently
+                    // active and mCallback is null.
+                    if (mCallback != null) {
+                        mCallback.dismiss(true, KeyguardUpdateMonitor.getCurrentUser());
+                    }
+                    break;
+                }
+                default:
+                    resetState();
+            }
+        }
     };
 
     public KeyguardSimPinView(Context context) {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java
index d8163ba..7f79008 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java
@@ -62,9 +62,27 @@
     KeyguardUpdateMonitorCallback mUpdateMonitorCallback = new KeyguardUpdateMonitorCallback() {
         @Override
         public void onSimStateChanged(int subId, int slotId, State simState) {
-           if (DEBUG) Log.v(TAG, "onSimStateChanged(subId=" + subId + ",state=" + simState + ")");
-           resetState();
-       };
+            if (DEBUG) Log.v(TAG, "onSimStateChanged(subId=" + subId + ",state=" + simState + ")");
+            switch(simState) {
+                // If the SIM is removed, then we must remove the keyguard. It will be put up
+                // again when the PUK locked SIM is re-entered.
+                case ABSENT:
+                // intentional fall-through
+                // If the SIM is unlocked via a key sequence through the emergency dialer, it will
+                // move into the READY state and the PUK lock keyguard should be removed.
+                case READY: {
+                    KeyguardUpdateMonitor.getInstance(getContext()).reportSimUnlocked(mSubId);
+                    // mCallback can be null if onSimStateChanged callback is called when keyguard
+                    // isn't active.
+                    if (mCallback != null) {
+                        mCallback.dismiss(true, KeyguardUpdateMonitor.getCurrentUser());
+                    }
+                    break;
+                }
+                default:
+                    resetState();
+            }
+        }
     };
 
     public KeyguardSimPukView(Context context) {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 32775fe..cd23c97 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -38,6 +38,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.pm.IPackageManager;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.database.ContentObserver;
@@ -49,13 +50,17 @@
 import android.os.BatteryManager;
 import android.os.CancellationSignal;
 import android.os.Handler;
+import android.os.IBinder;
 import android.os.IRemoteCallback;
 import android.os.Message;
 import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.os.Trace;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
+import android.service.dreams.DreamService;
+import android.service.dreams.IDreamManager;
 import android.telephony.ServiceState;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
@@ -65,8 +70,6 @@
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
 
-import com.google.android.collect.Lists;
-
 import com.android.internal.telephony.IccCardConstants;
 import com.android.internal.telephony.IccCardConstants.State;
 import com.android.internal.telephony.PhoneConstants;
@@ -75,6 +78,8 @@
 import com.android.systemui.recents.misc.SystemServicesProxy;
 import com.android.systemui.recents.misc.SystemServicesProxy.TaskStackListener;
 
+import com.google.android.collect.Lists;
+
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.lang.ref.WeakReference;
@@ -157,6 +162,21 @@
     private static final ComponentName FALLBACK_HOME_COMPONENT = new ComponentName(
             "com.android.settings", "com.android.settings.FallbackHome");
 
+
+    /**
+     * If true, the system is in the half-boot-to-decryption-screen state.
+     * Prudently disable lockscreen.
+     */
+    public static final boolean CORE_APPS_ONLY;
+    static {
+        try {
+            CORE_APPS_ONLY = IPackageManager.Stub.asInterface(
+                    ServiceManager.getService("package")).isOnlyCoreApps();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
     private static KeyguardUpdateMonitor sInstance;
 
     private final Context mContext;
@@ -200,6 +220,8 @@
     private UserManager mUserManager;
     private int mFingerprintRunningState = FINGERPRINT_STATE_STOPPED;
     private LockPatternUtils mLockPatternUtils;
+    private final IDreamManager mDreamManager;
+    private boolean mIsDreaming;
 
     /**
      * Short delay before restarting fingerprint authentication after a successful try
@@ -441,6 +463,26 @@
         updateFingerprintListeningState();
     }
 
+    /**
+     * @return a cached version of DreamManager.isDreaming()
+     */
+    public boolean isDreaming() {
+        return mIsDreaming;
+    }
+
+    /**
+     * If the device is dreaming, awakens the device
+     */
+    public void awakenFromDream() {
+        if (mIsDreaming && mDreamManager != null) {
+            try {
+                mDreamManager.awaken();
+            } catch (RemoteException e) {
+                Log.e(TAG, "Unable to awaken from dream");
+            }
+        }
+    }
+
     private void onFingerprintAuthenticated(int userId) {
         Trace.beginSection("KeyGuardUpdateMonitor#onFingerPrintAuthenticated");
         mUserFingerprintAuthenticated.put(userId, true);
@@ -646,13 +688,6 @@
         return mStrongAuthTracker;
     }
 
-    public void reportSuccessfulStrongAuthUnlockAttempt() {
-        if (mFpm != null) {
-            byte[] token = null; /* TODO: pass real auth token once fp HAL supports it */
-            mFpm.resetTimeout(token);
-        }
-    }
-
     private void notifyStrongAuthStateChanged(int userId) {
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
@@ -1027,13 +1062,14 @@
 
     private void handleDreamingStateChanged(int dreamStart) {
         final int count = mCallbacks.size();
-        boolean showingDream = dreamStart == 1;
+        mIsDreaming = dreamStart == 1;
         for (int i = 0; i < count; i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
-                cb.onDreamingStateChanged(showingDream);
+                cb.onDreamingStateChanged(mIsDreaming);
             }
         }
+        updateFingerprintListeningState();
     }
 
     /**
@@ -1136,6 +1172,9 @@
         mLockPatternUtils = new LockPatternUtils(context);
         mLockPatternUtils.registerStrongAuthTracker(mStrongAuthTracker);
 
+        mDreamManager = IDreamManager.Stub.asInterface(
+                ServiceManager.getService(DreamService.DREAM_SERVICE));
+
         if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
             mFpm = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
         }
@@ -1164,10 +1203,16 @@
         }
     }
 
+    private boolean shouldListenForFingerprintAssistant() {
+        return mAssistantVisible && mKeyguardOccluded
+                && !mUserFingerprintAuthenticated.get(getCurrentUser(), false)
+                && !mUserHasTrust.get(getCurrentUser(), false);
+    }
+
     private boolean shouldListenForFingerprint() {
         return (mKeyguardIsVisible || !mDeviceInteractive ||
                 (mBouncer && !mKeyguardGoingAway) || mGoingToSleep ||
-                (mAssistantVisible && mKeyguardOccluded))
+                shouldListenForFingerprintAssistant() || (mKeyguardOccluded && mIsDreaming))
                 && !mSwitchingUser && !isFingerprintDisabled(getCurrentUser())
                 && !mKeyguardGoingAway;
     }
diff --git a/packages/SystemUI/src/com/android/keyguard/ViewMediatorCallback.java b/packages/SystemUI/src/com/android/keyguard/ViewMediatorCallback.java
index 327d218..b194de4 100644
--- a/packages/SystemUI/src/com/android/keyguard/ViewMediatorCallback.java
+++ b/packages/SystemUI/src/com/android/keyguard/ViewMediatorCallback.java
@@ -88,4 +88,9 @@
      *         {@link KeyguardSecurityView#PROMPT_REASON_TIMEOUT}.
      */
     int getBouncerPromptReason();
+
+    /**
+     * Invoked when the secondary display showing a keyguard window changes.
+     */
+    void onSecondaryDisplayShowingChanged(int displayId);
 }
diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
index c4de63b..2b31967 100644
--- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
+++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
@@ -18,6 +18,7 @@
 import static android.provider.Settings.System.SHOW_BATTERY_PERCENT;
 
 import android.animation.ArgbEvaluator;
+import android.app.ActivityManager;
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
@@ -40,6 +41,7 @@
 
 import com.android.settingslib.Utils;
 import com.android.settingslib.graph.BatteryMeterDrawableBase;
+import com.android.systemui.settings.CurrentUserTracker;
 import com.android.systemui.statusbar.phone.StatusBarIconController;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
@@ -47,6 +49,7 @@
 import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
 import com.android.systemui.statusbar.policy.DarkIconDispatcher;
 import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver;
+import com.android.systemui.statusbar.policy.IconLogger;
 import com.android.systemui.tuner.TunerService;
 import com.android.systemui.tuner.TunerService.Tunable;
 
@@ -58,6 +61,7 @@
     private final BatteryMeterDrawableBase mDrawable;
     private final String mSlotBattery;
     private final ImageView mBatteryIconView;
+    private final CurrentUserTracker mUserTracker;
     private TextView mBatteryPercentView;
 
     private BatteryController mBatteryController;
@@ -72,6 +76,7 @@
     private int mLightModeBackgroundColor;
     private int mLightModeFillColor;
     private float mDarkIntensity;
+    private int mUser;
 
     public BatteryMeterView(Context context) {
         this(context, null, 0);
@@ -120,6 +125,16 @@
 
         // Init to not dark at all.
         onDarkChanged(new Rect(), 0, DarkIconDispatcher.DEFAULT_ICON_TINT);
+        mUserTracker = new CurrentUserTracker(mContext) {
+            @Override
+            public void onUserSwitched(int newUserId) {
+                mUser = newUserId;
+                getContext().getContentResolver().unregisterContentObserver(mSettingObserver);
+                getContext().getContentResolver().registerContentObserver(
+                        Settings.System.getUriFor(SHOW_BATTERY_PERCENT), false, mSettingObserver,
+                        newUserId);
+            }
+        };
     }
 
     public void setForceShowPercent(boolean show) {
@@ -136,7 +151,9 @@
     public void onTuningChanged(String key, String newValue) {
         if (StatusBarIconController.ICON_BLACKLIST.equals(key)) {
             ArraySet<String> icons = StatusBarIconController.getIconBlacklist(newValue);
-            setVisibility(icons.contains(mSlotBattery) ? View.GONE : View.VISIBLE);
+            boolean hidden = icons.contains(mSlotBattery);
+            Dependency.get(IconLogger.class).onIconVisibility(mSlotBattery, !hidden);
+            setVisibility(hidden ? View.GONE : View.VISIBLE);
         }
     }
 
@@ -145,16 +162,19 @@
         super.onAttachedToWindow();
         mBatteryController = Dependency.get(BatteryController.class);
         mBatteryController.addCallback(this);
+        mUser = ActivityManager.getCurrentUser();
         getContext().getContentResolver().registerContentObserver(
-                Settings.System.getUriFor(SHOW_BATTERY_PERCENT), false, mSettingObserver);
+                Settings.System.getUriFor(SHOW_BATTERY_PERCENT), false, mSettingObserver, mUser);
         updateShowPercent();
         Dependency.get(TunerService.class).addTunable(this, StatusBarIconController.ICON_BLACKLIST);
         Dependency.get(ConfigurationController.class).addCallback(this);
+        mUserTracker.startTracking();
     }
 
     @Override
     public void onDetachedFromWindow() {
         super.onDetachedFromWindow();
+        mUserTracker.stopTracking();
         mBatteryController.removeCallback(this);
         getContext().getContentResolver().unregisterContentObserver(mSettingObserver);
         Dependency.get(TunerService.class).removeTunable(this);
@@ -191,8 +211,8 @@
 
     private void updateShowPercent() {
         final boolean showing = mBatteryPercentView != null;
-        if (0 != Settings.System.getInt(getContext().getContentResolver(),
-                SHOW_BATTERY_PERCENT, 0) || mForceShowPercent) {
+        if (0 != Settings.System.getIntForUser(getContext().getContentResolver(),
+                SHOW_BATTERY_PERCENT, 0, mUser) || mForceShowPercent) {
             if (!showing) {
                 mBatteryPercentView = loadPercentView();
                 if (mTextColor != 0) mBatteryPercentView.setTextColor(mTextColor);
diff --git a/packages/SystemUI/src/com/android/systemui/ChargingView.java b/packages/SystemUI/src/com/android/systemui/ChargingView.java
index 555cc74..33f8b06 100644
--- a/packages/SystemUI/src/com/android/systemui/ChargingView.java
+++ b/packages/SystemUI/src/com/android/systemui/ChargingView.java
@@ -19,9 +19,11 @@
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.TypedArray;
+import android.os.UserHandle;
 import android.util.AttributeSet;
 import android.widget.ImageView;
 
+import com.android.internal.hardware.AmbientDisplayConfiguration;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 
@@ -34,14 +36,28 @@
         BatteryController.BatteryStateChangeCallback,
         ConfigurationController.ConfigurationListener {
 
+    private static final long CHARGING_INDICATION_DELAY_MS = 1000;
+
+    private final AmbientDisplayConfiguration mConfig;
+    private final Runnable mClearSuppressCharging = this::clearSuppressCharging;
     private BatteryController mBatteryController;
     private int mImageResource;
     private boolean mCharging;
     private boolean mDark;
+    private boolean mSuppressCharging;
+
+
+    private void clearSuppressCharging() {
+        mSuppressCharging = false;
+        removeCallbacks(mClearSuppressCharging);
+        updateVisibility();
+    }
 
     public ChargingView(Context context, @Nullable AttributeSet attrs) {
         super(context, attrs);
 
+        mConfig = new AmbientDisplayConfiguration(context);
+
         TypedArray a = context.obtainStyledAttributes(attrs, new int[]{android.R.attr.src});
         int srcResId = a.getResourceId(0, 0);
 
@@ -67,14 +83,30 @@
         super.onDetachedFromWindow();
         mBatteryController.removeCallback(this);
         Dependency.get(ConfigurationController.class).removeCallback(this);
+        removeCallbacks(mClearSuppressCharging);
     }
 
     @Override
     public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
+        boolean startCharging = charging && !mCharging;
+        if (startCharging && deviceWillWakeUpWhenPluggedIn() && mDark) {
+            // We're about to wake up, and thus don't want to show the indicator just for it to be
+            // hidden again.
+            clearSuppressCharging();
+            mSuppressCharging = true;
+            postDelayed(mClearSuppressCharging, CHARGING_INDICATION_DELAY_MS);
+        }
         mCharging = charging;
         updateVisibility();
     }
 
+    private boolean deviceWillWakeUpWhenPluggedIn() {
+        boolean plugTurnsOnScreen = getResources().getBoolean(
+                com.android.internal.R.bool.config_unplugTurnsOnScreen);
+        boolean aod = mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT);
+        return !aod && plugTurnsOnScreen;
+    }
+
     @Override
     public void onDensityOrFontScaleChanged() {
         setImageResource(mImageResource);
@@ -82,10 +114,13 @@
 
     public void setDark(boolean dark) {
         mDark = dark;
+        if (!dark) {
+            clearSuppressCharging();
+        }
         updateVisibility();
     }
 
     private void updateVisibility() {
-        setVisibility(mCharging && mDark ? VISIBLE : INVISIBLE);
+        setVisibility(mCharging && !mSuppressCharging && mDark ? VISIBLE : INVISIBLE);
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java
index c2467c6..b25719b 100644
--- a/packages/SystemUI/src/com/android/systemui/Dependency.java
+++ b/packages/SystemUI/src/com/android/systemui/Dependency.java
@@ -36,7 +36,6 @@
 import com.android.systemui.keyguard.ScreenLifecycle;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 import com.android.systemui.plugins.ActivityStarter;
-import com.android.systemui.plugins.PluginActivityManager;
 import com.android.systemui.plugins.PluginDependencyProvider;
 import com.android.systemui.plugins.PluginManager;
 import com.android.systemui.plugins.PluginManagerImpl;
@@ -45,6 +44,7 @@
 import com.android.systemui.power.PowerUI;
 import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
 import com.android.systemui.statusbar.phone.DarkIconDispatcherImpl;
+import com.android.systemui.statusbar.phone.LightBarController;
 import com.android.systemui.statusbar.phone.ManagedProfileController;
 import com.android.systemui.statusbar.phone.ManagedProfileControllerImpl;
 import com.android.systemui.statusbar.phone.StatusBarIconController;
@@ -69,6 +69,8 @@
 import com.android.systemui.statusbar.policy.FlashlightControllerImpl;
 import com.android.systemui.statusbar.policy.HotspotController;
 import com.android.systemui.statusbar.policy.HotspotControllerImpl;
+import com.android.systemui.statusbar.policy.IconLogger;
+import com.android.systemui.statusbar.policy.IconLoggerImpl;
 import com.android.systemui.statusbar.policy.KeyguardMonitor;
 import com.android.systemui.statusbar.policy.KeyguardMonitorImpl;
 import com.android.systemui.statusbar.policy.LocationController;
@@ -297,11 +299,13 @@
 
         mProviders.put(UiOffloadThread.class, UiOffloadThread::new);
 
-        mProviders.put(PluginActivityManager.class,
-                () -> new PluginActivityManager(mContext, getDependency(PluginManager.class)));
-
         mProviders.put(PowerUI.WarningsUI.class, () -> new PowerNotificationWarnings(mContext));
 
+        mProviders.put(IconLogger.class, () -> new IconLoggerImpl(mContext,
+                getDependency(BG_LOOPER), getDependency(MetricsLogger.class)));
+
+        mProviders.put(LightBarController.class, () -> new LightBarController(mContext));
+
         mProviders.put(IWindowManager.class, () -> WindowManagerGlobal.getWindowManagerService());
 
         // Put all dependencies above here so the factory can override them if it wants.
diff --git a/packages/SystemUI/src/com/android/systemui/DockedStackExistsListener.java b/packages/SystemUI/src/com/android/systemui/DockedStackExistsListener.java
index 9fe730a..81e4db3 100644
--- a/packages/SystemUI/src/com/android/systemui/DockedStackExistsListener.java
+++ b/packages/SystemUI/src/com/android/systemui/DockedStackExistsListener.java
@@ -33,6 +33,7 @@
     private static final String TAG = "DockedStackExistsListener";
 
     private static ArrayList<WeakReference<Consumer<Boolean>>> sCallbacks = new ArrayList<>();
+    private static boolean mLastExists;
 
     static {
         try {
@@ -73,6 +74,7 @@
 
 
     private static void onDockedStackExistsChanged(boolean exists) {
+        mLastExists = exists;
         synchronized (sCallbacks) {
             sCallbacks.removeIf(wf -> {
                 Consumer<Boolean> l = wf.get();
@@ -83,6 +85,7 @@
     }
 
     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/ForegroundServiceControllerImpl.java b/packages/SystemUI/src/com/android/systemui/ForegroundServiceControllerImpl.java
index c930d56..3714c4e 100644
--- a/packages/SystemUI/src/com/android/systemui/ForegroundServiceControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/ForegroundServiceControllerImpl.java
@@ -34,6 +34,10 @@
  */
 public class ForegroundServiceControllerImpl
         implements ForegroundServiceController {
+  
+    // shelf life of foreground services before they go bad
+    public static final long FG_SERVICE_GRACE_MILLIS = 5000;
+
     private static final String TAG = "FgServiceController";
     private static final boolean DBG = false;
 
@@ -72,7 +76,7 @@
             if (isDungeonNotification(sbn)) {
                 // if you remove the dungeon entirely, we take that to mean there are
                 // no running services
-                userServices.setRunningServices(null);
+                userServices.setRunningServices(null, 0);
                 return true;
             } else {
                 // this is safe to call on any notification, not just FLAG_FOREGROUND_SERVICE
@@ -94,7 +98,7 @@
                 final Bundle extras = sbn.getNotification().extras;
                 if (extras != null) {
                     final String[] svcs = extras.getStringArray(Notification.EXTRA_FOREGROUND_APPS);
-                    userServices.setRunningServices(svcs); // null ok
+                    userServices.setRunningServices(svcs, sbn.getNotification().when);
                 }
             } else {
                 userServices.removeNotification(sbn.getPackageName(), sbn.getKey());
@@ -118,9 +122,11 @@
      */
     private static class UserServices {
         private String[] mRunning = null;
+        private long mServiceStartTime = 0;
         private ArrayMap<String, ArraySet<String>> mNotifications = new ArrayMap<>(1);
-        public void setRunningServices(String[] pkgs) {
+        public void setRunningServices(String[] pkgs, long serviceStartTime) {
             mRunning = pkgs != null ? Arrays.copyOf(pkgs, pkgs.length) : null;
+            mServiceStartTime = serviceStartTime;
         }
         public void addNotification(String pkg, String key) {
             if (mNotifications.get(pkg) == null) {
@@ -142,7 +148,9 @@
             return found;
         }
         public boolean isDungeonNeeded() {
-            if (mRunning != null) {
+            if (mRunning != null
+                && System.currentTimeMillis() - mServiceStartTime >= FG_SERVICE_GRACE_MILLIS) {
+
                 for (String pkg : mRunning) {
                     final ArraySet<String> set = mNotifications.get(pkg);
                     if (set == null || set.size() == 0) {
diff --git a/packages/SystemUI/src/com/android/systemui/RoundedCorners.java b/packages/SystemUI/src/com/android/systemui/RoundedCorners.java
index f7936b6..b15b79f 100644
--- a/packages/SystemUI/src/com/android/systemui/RoundedCorners.java
+++ b/packages/SystemUI/src/com/android/systemui/RoundedCorners.java
@@ -134,16 +134,17 @@
     private void setupPadding(int padding) {
         // Add some padding to all the content near the edge of the screen.
         StatusBar sb = getComponent(StatusBar.class);
-        View statusBar = sb.getStatusBarWindow();
+        View statusBar = (sb != null ? sb.getStatusBarWindow() : null);
+        if (statusBar != null) {
+            TunablePadding.addTunablePadding(statusBar.findViewById(R.id.keyguard_header), PADDING,
+                    padding, FLAG_END);
 
-        TunablePadding.addTunablePadding(statusBar.findViewById(R.id.keyguard_header), PADDING,
-                padding, FLAG_END);
-
-        FragmentHostManager fragmentHostManager = FragmentHostManager.get(statusBar);
-        fragmentHostManager.addTagListener(CollapsedStatusBarFragment.TAG,
-                new TunablePaddingTagListener(padding, R.id.status_bar));
-        fragmentHostManager.addTagListener(QS.TAG,
-                new TunablePaddingTagListener(padding, R.id.header));
+            FragmentHostManager fragmentHostManager = FragmentHostManager.get(statusBar);
+            fragmentHostManager.addTagListener(CollapsedStatusBarFragment.TAG,
+                    new TunablePaddingTagListener(padding, R.id.status_bar));
+            fragmentHostManager.addTagListener(QS.TAG,
+                    new TunablePaddingTagListener(padding, R.id.header));
+        }
     }
 
     private WindowManager.LayoutParams getWindowLayoutParams() {
@@ -151,15 +152,12 @@
                 ViewGroup.LayoutParams.MATCH_PARENT,
                 LayoutParams.WRAP_CONTENT,
                 WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL,
-                0
-                    | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
-                    | 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
-                    | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
-                ,
+                WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
+                        | 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.PRIVATE_FLAG_SHOW_FOR_ALL_USERS
                 | WindowManager.LayoutParams.PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY;
diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
index 699fdef..4b37715 100644
--- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
@@ -25,6 +25,7 @@
 import android.content.res.Resources;
 import android.graphics.RectF;
 import android.os.Handler;
+import android.util.ArrayMap;
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.VelocityTracker;
@@ -37,8 +38,6 @@
 import com.android.systemui.statusbar.ExpandableNotificationRow;
 import com.android.systemui.statusbar.FlingAnimationUtils;
 
-import java.util.HashMap;
-
 public class SwipeHelper implements Gefingerpoken {
     static final String TAG = "com.android.systemui.SwipeHelper";
     private static final boolean DEBUG = false;
@@ -51,10 +50,10 @@
     public static final int X = 0;
     public static final int Y = 1;
 
-    private float SWIPE_ESCAPE_VELOCITY = 500f; // dp/sec
-    private int DEFAULT_ESCAPE_ANIMATION_DURATION = 200; // ms
-    private int MAX_ESCAPE_ANIMATION_DURATION = 400; // ms
-    private int MAX_DISMISS_VELOCITY = 4000; // dp/sec
+    private static final float SWIPE_ESCAPE_VELOCITY = 500f; // dp/sec
+    private static final int DEFAULT_ESCAPE_ANIMATION_DURATION = 200; // ms
+    private static final int MAX_ESCAPE_ANIMATION_DURATION = 400; // ms
+    private static final int MAX_DISMISS_VELOCITY = 4000; // dp/sec
     private static final int SNAP_ANIM_LEN = SLOW_ANIMATIONS ? 1000 : 150; // ms
 
     static final float SWIPE_PROGRESS_FADE_END = 0.5f; // fraction of thumbnail width
@@ -65,13 +64,13 @@
     private float mMinSwipeProgress = 0f;
     private float mMaxSwipeProgress = 1f;
 
-    private FlingAnimationUtils mFlingAnimationUtils;
+    private final FlingAnimationUtils mFlingAnimationUtils;
     private float mPagingTouchSlop;
-    private Callback mCallback;
-    private Handler mHandler;
-    private int mSwipeDirection;
-    private VelocityTracker mVelocityTracker;
-    private FalsingManager mFalsingManager;
+    private final Callback mCallback;
+    private final Handler mHandler;
+    private final int mSwipeDirection;
+    private final VelocityTracker mVelocityTracker;
+    private final FalsingManager mFalsingManager;
 
     private float mInitialTouchPos;
     private float mPerpendicularInitialTouchPos;
@@ -86,16 +85,16 @@
     private boolean mLongPressSent;
     private LongPressListener mLongPressListener;
     private Runnable mWatchLongPress;
-    private long mLongPressTimeout;
+    private final long mLongPressTimeout;
 
     final private int[] mTmpPos = new int[2];
-    private int mFalsingThreshold;
+    private final int mFalsingThreshold;
     private boolean mTouchAboveFalsingThreshold;
     private boolean mDisableHwLayers;
-    private boolean mFadeDependingOnAmountSwiped;
-    private Context mContext;
+    private final boolean mFadeDependingOnAmountSwiped;
+    private final Context mContext;
 
-    private HashMap<View, Animator> mDismissPendingMap = new HashMap<>();
+    private final ArrayMap<View, Animator> mDismissPendingMap = new ArrayMap<>();
 
     public SwipeHelper(int swipeDirection, Callback callback, Context context) {
         mContext = context;
@@ -204,7 +203,7 @@
             return Math.max(1 - progress, 0);
         }
 
-        return Math.min(0, Math.max(1, progress / SWIPE_PROGRESS_FADE_END));
+        return 1f - Math.max(0, Math.min(1, progress / SWIPE_PROGRESS_FADE_END));
     }
 
     private void updateSwipeProgressFromOffset(View animView, boolean dismissable) {
@@ -440,7 +439,12 @@
             public void onAnimationEnd(Animator animation) {
                 updateSwipeProgressFromOffset(animView, canBeDismissed);
                 mDismissPendingMap.remove(animView);
-                if (!mCancelled) {
+                boolean wasRemoved = false;
+                if (animView instanceof ExpandableNotificationRow) {
+                    ExpandableNotificationRow row = (ExpandableNotificationRow) animView;
+                    wasRemoved = row.isRemoved();
+                }
+                if (!mCancelled || wasRemoved) {
                     mCallback.onChildDismissed(animView);
                 }
                 if (endAction != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
index 9f2dcd9..9adafda 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
@@ -16,7 +16,6 @@
 
 package com.android.systemui;
 
-import android.app.Activity;
 import android.app.ActivityThread;
 import android.app.Application;
 import android.content.BroadcastReceiver;
@@ -27,11 +26,12 @@
 import android.content.res.Configuration;
 import android.os.Process;
 import android.os.SystemProperties;
+import android.os.Trace;
 import android.os.UserHandle;
 import android.util.ArraySet;
+import android.util.TimingsTraceLog;
 import android.util.Log;
 
-import com.android.systemui.fragments.FragmentService;
 import com.android.systemui.globalactions.GlobalActionsComponent;
 import com.android.systemui.keyboard.KeyboardUI;
 import com.android.systemui.keyguard.KeyguardViewMediator;
@@ -40,7 +40,6 @@
 import com.android.systemui.plugins.GlobalActions;
 import com.android.systemui.plugins.OverlayPlugin;
 import com.android.systemui.plugins.Plugin;
-import com.android.systemui.plugins.PluginActivityManager;
 import com.android.systemui.plugins.PluginListener;
 import com.android.systemui.plugins.PluginManager;
 import com.android.systemui.power.PowerUI;
@@ -50,7 +49,6 @@
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.phone.StatusBar;
 import com.android.systemui.statusbar.phone.StatusBarWindowManager;
-import com.android.systemui.tuner.TunerService;
 import com.android.systemui.usb.StorageNotification;
 import com.android.systemui.util.NotificationChannels;
 import com.android.systemui.util.leak.GarbageMonitor;
@@ -192,11 +190,17 @@
 
         Log.v(TAG, "Starting SystemUI services for user " +
                 Process.myUserHandle().getIdentifier() + ".");
+        TimingsTraceLog log = new TimingsTraceLog("SystemUIBootTiming",
+                Trace.TRACE_TAG_APP);
+        log.traceBegin("StartServices");
         final int N = services.length;
         for (int i = 0; i < N; i++) {
             Class<?> cl = services[i];
             if (DEBUG) Log.d(TAG, "loading: " + cl);
+            log.traceBegin("StartServices" + cl.getSimpleName());
+            long ti = System.currentTimeMillis();
             try {
+
                 Object newService = SystemUIFactory.getInstance().createInstance(cl);
                 mServices[i] = (SystemUI) ((newService == null) ? cl.newInstance() : newService);
             } catch (IllegalAccessException ex) {
@@ -209,11 +213,18 @@
             mServices[i].mComponents = mComponents;
             if (DEBUG) Log.d(TAG, "running: " + mServices[i]);
             mServices[i].start();
+            log.traceEnd();
 
+            // Warn if initialization of component takes too long
+            ti = System.currentTimeMillis() - ti;
+            if (ti > 1000) {
+                Log.w(TAG, "Initialization of " + cl.getName() + " took " + ti + " ms");
+            }
             if (mBootCompleted) {
                 mServices[i].onBootCompleted();
             }
         }
+        log.traceEnd();
         Dependency.get(PluginManager.class).addPluginListener(
                 new PluginListener<OverlayPlugin>() {
                     private ArraySet<OverlayPlugin> mOverlays;
@@ -268,10 +279,4 @@
     public SystemUI[] getServices() {
         return mServices;
     }
-
-    @Override
-    public Activity instantiateActivity(ClassLoader cl, String className, Intent intent) {
-        if (!mServicesStarted) return null;
-        return Dependency.get(PluginActivityManager.class).instantiate(cl, className, intent);
-    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistDisclosure.java b/packages/SystemUI/src/com/android/systemui/assist/AssistDisclosure.java
index 8bd38db..4bd095d 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistDisclosure.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistDisclosure.java
@@ -66,7 +66,6 @@
             WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
                     WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY,
                     WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
-                            | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
                             | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                             | WindowManager.LayoutParams.FLAG_FULLSCREEN
                             | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED,
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
index 3b81cc4..8a8bafa 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
@@ -61,6 +61,7 @@
     private AssistOrbContainer mView;
     private final DeviceProvisionedController mDeviceProvisionedController;
     protected final AssistUtils mAssistUtils;
+    private final boolean mShouldEnableOrb;
 
     private IVoiceInteractionSessionShowCallback mShowCallback =
             new IVoiceInteractionSessionShowCallback.Stub() {
@@ -96,6 +97,7 @@
                 | ActivityInfo.CONFIG_LOCALE | ActivityInfo.CONFIG_UI_MODE
                 | ActivityInfo.CONFIG_SCREEN_LAYOUT | ActivityInfo.CONFIG_ASSETS_PATHS);
         onConfigurationChanged(context.getResources().getConfiguration());
+        mShouldEnableOrb = !ActivityManager.isLowRamDeviceStatic();
     }
 
     protected void registerVoiceInteractionSessionListener() {
@@ -170,9 +172,6 @@
                         | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                 PixelFormat.TRANSLUCENT);
         lp.token = new Binder();
-        if (ActivityManager.isHighEndGfx()) {
-            lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
-        }
         lp.gravity = Gravity.BOTTOM | Gravity.START;
         lp.setTitle("AssistPreviewPanel");
         lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED
@@ -182,7 +181,9 @@
 
     private void showOrb(@NonNull ComponentName assistComponent, boolean isService) {
         maybeSwapSearchIcon(assistComponent, isService);
-        mView.show(true /* show */, true /* animate */);
+        if (mShouldEnableOrb) {
+            mView.show(true /* show */, true /* animate */);
+        }
     }
 
     private void startAssistInternal(Bundle args, @NonNull ComponentName assistComponent,
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/HumanInteractionClassifier.java b/packages/SystemUI/src/com/android/systemui/classifier/HumanInteractionClassifier.java
index 2e9ba56..592a275 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/HumanInteractionClassifier.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/HumanInteractionClassifier.java
@@ -27,6 +27,8 @@
 import android.util.Log;
 import android.view.MotionEvent;
 
+import com.android.systemui.R;
+
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 
@@ -37,9 +39,6 @@
     private static final String HIC_ENABLE = "HIC_enable";
     private static final float FINGER_DISTANCE = 0.1f;
 
-    /** Default value for the HIC_ENABLE setting: 1 - enabled, 0 - disabled */
-    private static final int HIC_ENABLE_DEFAULT = 1;
-
     private static HumanInteractionClassifier sInstance = null;
 
     private final Handler mHandler = new Handler(Looper.getMainLooper());
@@ -106,9 +105,12 @@
     }
 
     private void updateConfiguration() {
+        boolean defaultValue = mContext.getResources().getBoolean(
+                R.bool.config_lockscreenAntiFalsingClassifierEnabled);
+
         mEnableClassifier = 0 != Settings.Global.getInt(
                 mContext.getContentResolver(),
-                HIC_ENABLE, HIC_ENABLE_DEFAULT);
+                HIC_ENABLE, defaultValue ? 1 : 0);
     }
 
     public void setType(int type) {
diff --git a/packages/SystemUI/src/com/android/systemui/doze/AlwaysOnDisplayPolicy.java b/packages/SystemUI/src/com/android/systemui/doze/AlwaysOnDisplayPolicy.java
new file mode 100644
index 0000000..debda21
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/doze/AlwaysOnDisplayPolicy.java
@@ -0,0 +1,166 @@
+/*
+ * 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.doze;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.res.Resources;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.text.format.DateUtils;
+import android.util.KeyValueListParser;
+import android.util.Log;
+
+import com.android.systemui.R;
+
+import java.util.Arrays;
+
+/**
+ * Class to store the policy for AOD, which comes from
+ * {@link android.provider.Settings.Global}
+ */
+public class AlwaysOnDisplayPolicy {
+    public static final String TAG = "AlwaysOnDisplayPolicy";
+
+    private static final long DEFAULT_PROX_SCREEN_OFF_DELAY_MS = 10 * DateUtils.SECOND_IN_MILLIS;
+    private static final long DEFAULT_PROX_COOLDOWN_TRIGGER_MS = 2 * DateUtils.SECOND_IN_MILLIS;
+    private static final long DEFAULT_PROX_COOLDOWN_PERIOD_MS = 5 * DateUtils.SECOND_IN_MILLIS;
+
+    static final String KEY_SCREEN_BRIGHTNESS_ARRAY = "screen_brightness_array";
+    static final String KEY_DIMMING_SCRIM_ARRAY = "dimming_scrim_array";
+    static final String KEY_PROX_SCREEN_OFF_DELAY_MS = "prox_screen_off_delay";
+    static final String KEY_PROX_COOLDOWN_TRIGGER_MS = "prox_cooldown_trigger";
+    static final String KEY_PROX_COOLDOWN_PERIOD_MS = "prox_cooldown_period";
+
+    /**
+     * Integer array to map ambient brightness type to real screen brightness.
+     *
+     * @see Settings.Global#ALWAYS_ON_DISPLAY_CONSTANTS
+     * @see #KEY_SCREEN_BRIGHTNESS_ARRAY
+     */
+    public int[] screenBrightnessArray;
+
+    /**
+     * Integer array to map ambient brightness type to dimming scrim.
+     *
+     * @see Settings.Global#ALWAYS_ON_DISPLAY_CONSTANTS
+     * @see #KEY_DIMMING_SCRIM_ARRAY
+     */
+    public int[] dimmingScrimArray;
+
+    /**
+     * Delay time(ms) from covering the prox to turning off the screen.
+     *
+     * @see Settings.Global#ALWAYS_ON_DISPLAY_CONSTANTS
+     * @see #KEY_PROX_SCREEN_OFF_DELAY_MS
+     */
+    public long proxScreenOffDelayMs;
+
+    /**
+     * The threshold time(ms) to trigger the cooldown timer, which will
+     * turn off prox sensor for a period.
+     *
+     * @see Settings.Global#ALWAYS_ON_DISPLAY_CONSTANTS
+     * @see #KEY_PROX_COOLDOWN_TRIGGER_MS
+     */
+    public long proxCooldownTriggerMs;
+
+    /**
+     * The period(ms) to turning off the prox sensor if
+     * {@link #KEY_PROX_COOLDOWN_TRIGGER_MS} is triggered.
+     *
+     * @see Settings.Global#ALWAYS_ON_DISPLAY_CONSTANTS
+     * @see #KEY_PROX_COOLDOWN_PERIOD_MS
+     */
+    public long proxCooldownPeriodMs;
+
+    private final KeyValueListParser mParser;
+    private final Context mContext;
+    private SettingsObserver mSettingsObserver;
+
+    public AlwaysOnDisplayPolicy(Context context) {
+        mContext = context;
+        mParser = new KeyValueListParser(',');
+        mSettingsObserver = new SettingsObserver(context.getMainThreadHandler());
+        mSettingsObserver.observe();
+    }
+
+    private int[] parseIntArray(final String key, final int[] defaultArray) {
+        final String value = mParser.getString(key, null);
+        if (value != null) {
+            try {
+                return Arrays.stream(value.split(":")).map(String::trim).mapToInt(
+                        Integer::parseInt).toArray();
+            } catch (NumberFormatException e) {
+                return defaultArray;
+            }
+        } else {
+            return defaultArray;
+        }
+    }
+
+    private final class SettingsObserver extends ContentObserver {
+        private final Uri ALWAYS_ON_DISPLAY_CONSTANTS_URI
+                = Settings.Global.getUriFor(Settings.Global.ALWAYS_ON_DISPLAY_CONSTANTS);
+
+        SettingsObserver(Handler handler) {
+            super(handler);
+        }
+
+        void observe() {
+            ContentResolver resolver = mContext.getContentResolver();
+            resolver.registerContentObserver(ALWAYS_ON_DISPLAY_CONSTANTS_URI,
+                    false, this, UserHandle.USER_ALL);
+            update(null);
+        }
+
+        @Override
+        public void onChange(boolean selfChange, Uri uri) {
+            update(uri);
+        }
+
+        public void update(Uri uri) {
+            if (uri == null || ALWAYS_ON_DISPLAY_CONSTANTS_URI.equals(uri)) {
+                final Resources resources = mContext.getResources();
+                final String value = Settings.Global.getString(mContext.getContentResolver(),
+                        Settings.Global.ALWAYS_ON_DISPLAY_CONSTANTS);
+
+                try {
+                    mParser.setString(value);
+                } catch (IllegalArgumentException e) {
+                    Log.e(TAG, "Bad AOD constants");
+                }
+
+                proxScreenOffDelayMs = mParser.getLong(KEY_PROX_SCREEN_OFF_DELAY_MS,
+                        DEFAULT_PROX_SCREEN_OFF_DELAY_MS);
+                proxCooldownTriggerMs = mParser.getLong(KEY_PROX_COOLDOWN_TRIGGER_MS,
+                        DEFAULT_PROX_COOLDOWN_TRIGGER_MS);
+                proxCooldownPeriodMs = mParser.getLong(KEY_PROX_COOLDOWN_PERIOD_MS,
+                        DEFAULT_PROX_COOLDOWN_PERIOD_MS);
+                screenBrightnessArray = parseIntArray(KEY_SCREEN_BRIGHTNESS_ARRAY,
+                        resources.getIntArray(
+                                R.array.config_doze_brightness_sensor_to_brightness));
+                dimmingScrimArray = parseIntArray(KEY_DIMMING_SCRIM_ARRAY,
+                        resources.getIntArray(
+                                R.array.config_doze_brightness_sensor_to_scrim_opacity));
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java b/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java
index d374d68..6f8bcff 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java
@@ -59,7 +59,7 @@
 
         DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock);
         machine.setParts(new DozeMachine.Part[]{
-                new DozePauser(handler, machine, alarmManager),
+                new DozePauser(handler, machine, alarmManager, new AlwaysOnDisplayPolicy(context)),
                 new DozeFalsingManagerAdapter(FalsingManager.getInstance(context)),
                 createDozeTriggers(context, sensorManager, host, alarmManager, config, params,
                         handler, wakeLock, machine),
@@ -76,7 +76,8 @@
             Handler handler) {
         Sensor sensor = DozeSensors.findSensorWithType(sensorManager,
                 context.getString(R.string.doze_brightness_sensor_type));
-        return new DozeScreenBrightness(context, service, sensorManager, sensor, host, handler);
+        return new DozeScreenBrightness(context, service, sensorManager, sensor, host, handler,
+                new AlwaysOnDisplayPolicy(context));
     }
 
     private DozeTriggers createDozeTriggers(Context context, SensorManager sensorManager,
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozePauser.java b/packages/SystemUI/src/com/android/systemui/doze/DozePauser.java
index a33b454c..58f1448 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozePauser.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozePauser.java
@@ -26,20 +26,23 @@
  */
 public class DozePauser implements DozeMachine.Part {
     public static final String TAG = DozePauser.class.getSimpleName();
-    private static final long TIMEOUT = 10 * 1000;
     private final AlarmTimeout mPauseTimeout;
     private final DozeMachine mMachine;
+    private final AlwaysOnDisplayPolicy mPolicy;
 
-    public DozePauser(Handler handler, DozeMachine machine, AlarmManager alarmManager) {
+    public DozePauser(Handler handler, DozeMachine machine, AlarmManager alarmManager,
+            AlwaysOnDisplayPolicy policy) {
         mMachine = machine;
         mPauseTimeout = new AlarmTimeout(alarmManager, this::onTimeout, TAG, handler);
+        mPolicy = policy;
     }
 
     @Override
     public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) {
         switch (newState) {
             case DOZE_AOD_PAUSING:
-                mPauseTimeout.schedule(TIMEOUT, AlarmTimeout.MODE_IGNORE_IF_SCHEDULED);
+                mPauseTimeout.schedule(mPolicy.proxScreenOffDelayMs,
+                        AlarmTimeout.MODE_IGNORE_IF_SCHEDULED);
                 break;
             default:
                 mPauseTimeout.cancel();
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
index 30420529..4bb4e79 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
@@ -22,9 +22,9 @@
 import android.hardware.SensorEventListener;
 import android.hardware.SensorManager;
 import android.os.Handler;
+import android.os.Trace;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.systemui.R;
 
 /**
  * Controls the screen brightness when dozing.
@@ -38,11 +38,16 @@
     private final Sensor mLightSensor;
     private final int[] mSensorToBrightness;
     private final int[] mSensorToScrimOpacity;
+
     private boolean mRegistered;
+    private int mDefaultDozeBrightness;
+    private boolean mPaused = false;
+    private int mLastSensorValue = -1;
 
     public DozeScreenBrightness(Context context, DozeMachine.Service service,
             SensorManager sensorManager, Sensor lightSensor, DozeHost host,
-            Handler handler) {
+            Handler handler, int defaultDozeBrightness, int[] sensorToBrightness,
+            int[] sensorToScrimOpacity) {
         mContext = context;
         mDozeService = service;
         mSensorManager = sensorManager;
@@ -50,10 +55,19 @@
         mDozeHost = host;
         mHandler = handler;
 
-        mSensorToBrightness = context.getResources().getIntArray(
-                R.array.config_doze_brightness_sensor_to_brightness);
-        mSensorToScrimOpacity = context.getResources().getIntArray(
-                R.array.config_doze_brightness_sensor_to_scrim_opacity);
+        mDefaultDozeBrightness = defaultDozeBrightness;
+        mSensorToBrightness = sensorToBrightness;
+        mSensorToScrimOpacity = sensorToScrimOpacity;
+    }
+
+    @VisibleForTesting
+    public DozeScreenBrightness(Context context, DozeMachine.Service service,
+            SensorManager sensorManager, Sensor lightSensor, DozeHost host,
+            Handler handler, AlwaysOnDisplayPolicy policy) {
+        this(context, service, sensorManager, lightSensor, host, handler,
+                context.getResources().getInteger(
+                        com.android.internal.R.integer.config_screenBrightnessDoze),
+                policy.screenBrightnessArray, policy.dimmingScrimArray);
     }
 
     @Override
@@ -67,7 +81,6 @@
                 setLightSensorEnabled(true);
                 break;
             case DOZE:
-            case DOZE_AOD_PAUSED:
                 setLightSensorEnabled(false);
                 resetBrightnessToDefault();
                 break;
@@ -75,18 +88,43 @@
                 setLightSensorEnabled(false);
                 break;
         }
+        if (newState != DozeMachine.State.FINISH) {
+            setPaused(newState == DozeMachine.State.DOZE_AOD_PAUSED);
+        }
     }
 
     @Override
     public void onSensorChanged(SensorEvent event) {
+        Trace.beginSection("DozeScreenBrightness.onSensorChanged" + event.values[0]);
+        try {
+            if (mRegistered) {
+                mLastSensorValue = (int) event.values[0];
+                updateBrightnessAndReady();
+            }
+        } finally {
+            Trace.endSection();
+        }
+    }
+
+    private void updateBrightnessAndReady() {
         if (mRegistered) {
-            int sensorValue = (int) event.values[0];
-            int brightness = computeBrightness(sensorValue);
-            if (brightness > 0) {
+            int brightness = computeBrightness(mLastSensorValue);
+            boolean brightnessReady = brightness > 0;
+            if (brightnessReady) {
                 mDozeService.setDozeScreenBrightness(brightness);
             }
 
-            int scrimOpacity = computeScrimOpacity(sensorValue);
+            int scrimOpacity = -1;
+            if (mPaused) {
+                // If AOD is paused, force the screen black until the
+                // sensor reports a new brightness. This ensures that when the screen comes on
+                // again, it will only show after the brightness sensor has stabilized,
+                // avoiding a potential flicker.
+                scrimOpacity = 255;
+            } else if (brightnessReady) {
+                // Only unblank scrim once brightness is ready.
+                scrimOpacity = computeScrimOpacity(mLastSensorValue);
+            }
             if (scrimOpacity >= 0) {
                 mDozeHost.setAodDimmingScrim(scrimOpacity / 255f);
             }
@@ -112,17 +150,29 @@
     }
 
     private void resetBrightnessToDefault() {
-        mDozeService.setDozeScreenBrightness(mContext.getResources().getInteger(
-                com.android.internal.R.integer.config_screenBrightnessDoze));
+        mDozeService.setDozeScreenBrightness(mDefaultDozeBrightness);
+        mDozeHost.setAodDimmingScrim(0f);
     }
 
     private void setLightSensorEnabled(boolean enabled) {
         if (enabled && !mRegistered && mLightSensor != null) {
+            // Wait until we get an event from the sensor until indicating ready.
             mRegistered = mSensorManager.registerListener(this, mLightSensor,
                     SensorManager.SENSOR_DELAY_NORMAL, mHandler);
+            mLastSensorValue = -1;
         } else if (!enabled && mRegistered) {
             mSensorManager.unregisterListener(this);
             mRegistered = false;
+            mLastSensorValue = -1;
+            // Sensor is not enabled, hence we use the default brightness and are always ready.
         }
     }
+
+    private void setPaused(boolean paused) {
+        if (mPaused != paused) {
+            mPaused = paused;
+            updateBrightnessAndReady();
+        }
+    }
+
 }
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java
index 63f5d97..bef9cb3 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java
@@ -25,8 +25,9 @@
 public class DozeScreenState implements DozeMachine.Part {
     private final DozeMachine.Service mDozeService;
     private final Handler mHandler;
+    private final Runnable mApplyPendingScreenState = this::applyPendingScreenState;
+
     private int mPendingScreenState = Display.STATE_UNKNOWN;
-    private Runnable mApplyPendingScreenState = this::applyPendingScreenState;
 
     public DozeScreenState(DozeMachine.Service service, Handler handler) {
         mDozeService = service;
@@ -36,10 +37,21 @@
     @Override
     public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) {
         int screenState = newState.screenState();
+
+        if (newState == DozeMachine.State.FINISH) {
+            // Make sure not to apply the screen state after DozeService was destroyed.
+            mPendingScreenState = Display.STATE_UNKNOWN;
+            mHandler.removeCallbacks(mApplyPendingScreenState);
+
+            applyScreenState(screenState);
+            return;
+        }
+
         if (screenState == Display.STATE_UNKNOWN) {
             // We'll keep it in the existing state
             return;
         }
+
         boolean messagePending = mHandler.hasCallbacks(mApplyPendingScreenState);
         if (messagePending || oldState == DozeMachine.State.INITIALIZED) {
             // During initialization, we hide the navigation bar. That is however only applied after
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
index 566353c..91cde37 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
@@ -72,7 +72,7 @@
     public DozeSensors(Context context, AlarmManager alarmManager, SensorManager sensorManager,
             DozeParameters dozeParameters,
             AmbientDisplayConfiguration config, WakeLock wakeLock, Callback callback,
-            Consumer<Boolean> proxCallback) {
+            Consumer<Boolean> proxCallback, AlwaysOnDisplayPolicy policy) {
         mContext = context;
         mAlarmManager = alarmManager;
         mSensorManager = sensorManager;
@@ -112,7 +112,7 @@
                         true /* touchscreen */),
         };
 
-        mProxSensor = new ProxSensor();
+        mProxSensor = new ProxSensor(policy);
         mCallback = callback;
     }
 
@@ -206,17 +206,16 @@
 
     private class ProxSensor implements SensorEventListener {
 
-        static final long COOLDOWN_TRIGGER = 2 * 1000;
-        static final long COOLDOWN_PERIOD = 5 * 1000;
-
         boolean mRequested;
         boolean mRegistered;
         Boolean mCurrentlyFar;
         long mLastNear;
         final AlarmTimeout mCooldownTimer;
+        final AlwaysOnDisplayPolicy mPolicy;
 
 
-        public ProxSensor() {
+        public ProxSensor(AlwaysOnDisplayPolicy policy) {
+            mPolicy = policy;
             mCooldownTimer = new AlarmTimeout(mAlarmManager, this::updateRegistered,
                     "prox_cooldown", mHandler);
         }
@@ -264,11 +263,12 @@
                 // Sensor has been unregistered by the proxCallback. Do nothing.
             } else if (!mCurrentlyFar) {
                 mLastNear = now;
-            } else if (mCurrentlyFar && now - mLastNear < COOLDOWN_TRIGGER) {
+            } else if (mCurrentlyFar && now - mLastNear < mPolicy.proxCooldownTriggerMs) {
                 // If the last near was very recent, we might be using more power for prox
                 // wakeups than we're saving from turning of the screen. Instead, turn it off
                 // for a while.
-                mCooldownTimer.schedule(COOLDOWN_PERIOD, AlarmTimeout.MODE_IGNORE_IF_SCHEDULED);
+                mCooldownTimer.schedule(mPolicy.proxCooldownPeriodMs,
+                        AlarmTimeout.MODE_IGNORE_IF_SCHEDULED);
                 updateRegistered();
             }
         }
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
index 4583160..f7a258a 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
@@ -84,7 +84,8 @@
         mWakeLock = wakeLock;
         mAllowPulseTriggers = allowPulseTriggers;
         mDozeSensors = new DozeSensors(context, alarmManager, mSensorManager, dozeParameters,
-                config, wakeLock, this::onSensor, this::onProximityFar);
+                config, wakeLock, this::onSensor, this::onProximityFar,
+                new AlwaysOnDisplayPolicy(context));
         mUiModeManager = mContext.getSystemService(UiModeManager.class);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java
index dc626fb..851b78c 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java
@@ -84,9 +84,6 @@
             case DOZE_REQUEST_PULSE:
                 pulseWhileDozing(mMachine.getPulseReason());
                 break;
-            case DOZE_PULSE_DONE:
-                mHost.abortPulsing();
-                break;
             case INITIALIZED:
                 mHost.startDozing();
                 break;
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index d132e76..28adca9 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -17,6 +17,7 @@
 package com.android.systemui.keyguard;
 
 import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+import static android.view.Display.INVALID_DISPLAY;
 
 import static com.android.internal.telephony.IccCardConstants.State.ABSENT;
 import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST;
@@ -239,6 +240,9 @@
     // answer whether the input should be restricted)
     private boolean mShowing;
 
+    // display id of the secondary display on which we have put a keyguard window
+    private int mSecondaryDisplayShowing = INVALID_DISPLAY;
+
     /** Cached value of #isInputRestricted */
     private boolean mInputRestricted;
 
@@ -560,9 +564,6 @@
             }
 
             tryKeyguardDone();
-            if (strongAuth) {
-                mUpdateMonitor.reportSuccessfulStrongAuthUnlockAttempt();
-            }
         }
 
         @Override
@@ -591,9 +592,6 @@
             mStatusBarKeyguardViewManager.startPreHideAnimation(mHideAnimationFinishedRunnable);
             mHandler.sendEmptyMessageDelayed(KEYGUARD_DONE_PENDING_TIMEOUT,
                     KEYGUARD_DONE_PENDING_TIMEOUT_MS);
-            if (strongAuth) {
-                mUpdateMonitor.reportSuccessfulStrongAuthUnlockAttempt();
-            }
             Trace.endSection();
         }
 
@@ -652,6 +650,13 @@
             }
             return KeyguardSecurityView.PROMPT_REASON_NONE;
         }
+
+        @Override
+        public void onSecondaryDisplayShowingChanged(int displayId) {
+            synchronized (KeyguardViewMediator.this) {
+                setShowingLocked(mShowing, displayId, false);
+            }
+        }
     };
 
     public void userActivity() {
@@ -676,7 +681,7 @@
         filter.addAction(Intent.ACTION_SHUTDOWN);
         mContext.registerReceiver(mBroadcastReceiver, filter);
 
-        mKeyguardDisplayManager = new KeyguardDisplayManager(mContext);
+        mKeyguardDisplayManager = new KeyguardDisplayManager(mContext, mViewMediatorCallback);
 
         mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
 
@@ -691,7 +696,8 @@
                 com.android.keyguard.R.bool.config_enableKeyguardService)) {
             setShowingLocked(!shouldWaitForProvisioning()
                     && !mLockPatternUtils.isLockScreenDisabled(
-                            KeyguardUpdateMonitor.getCurrentUser()), true /* forceCallbacks */);
+                            KeyguardUpdateMonitor.getCurrentUser()),
+                    mSecondaryDisplayShowing, true /* forceCallbacks */);
         }
 
         mStatusBarKeyguardViewManager =
@@ -1234,6 +1240,12 @@
      * Enable the keyguard if the settings are appropriate.
      */
     private void doKeyguardLocked(Bundle options) {
+        if (KeyguardUpdateMonitor.CORE_APPS_ONLY) {
+            // Don't show keyguard during half-booted cryptkeeper stage.
+            if (DEBUG) Log.d(TAG, "doKeyguard: not showing because booting to cryptkeeper");
+            return;
+        }
+
         // if another app is disabling us, don't show
         if (!mExternallyEnabled) {
             if (DEBUG) Log.d(TAG, "doKeyguard: not showing because externally disabled");
@@ -1288,7 +1300,6 @@
                 // Without this, settings is not enabled until the lock screen first appears
                 setShowingLocked(false);
                 hideLocked();
-                mUpdateMonitor.reportSuccessfulStrongAuthUnlockAttempt();
                 return;
             }
         }
@@ -1695,10 +1706,10 @@
         playSound(mTrustedSoundId);
     }
 
-    private void updateActivityLockScreenState(boolean showing) {
+    private void updateActivityLockScreenState(boolean showing, int secondaryDisplayShowing) {
         mUiOffloadThread.submit(() -> {
             try {
-                ActivityManager.getService().setLockScreenShown(showing);
+                ActivityManager.getService().setLockScreenShown(showing, secondaryDisplayShowing);
             } catch (RemoteException e) {
             }
         });
@@ -2061,30 +2072,39 @@
     }
 
     private void setShowingLocked(boolean showing) {
-        setShowingLocked(showing, false /* forceCallbacks */);
+        setShowingLocked(showing, mSecondaryDisplayShowing, false /* forceCallbacks */);
     }
 
-    private void setShowingLocked(boolean showing, boolean forceCallbacks) {
-        if (showing != mShowing || forceCallbacks) {
+    private void setShowingLocked(
+            boolean showing, int secondaryDisplayShowing, boolean forceCallbacks) {
+        final boolean notifyDefaultDisplayCallbacks = showing != mShowing || forceCallbacks;
+        if (notifyDefaultDisplayCallbacks || secondaryDisplayShowing != mSecondaryDisplayShowing) {
             mShowing = showing;
-            int size = mKeyguardStateCallbacks.size();
-            for (int i = size - 1; i >= 0; i--) {
-                IKeyguardStateCallback callback = mKeyguardStateCallbacks.get(i);
-                try {
-                    callback.onShowingStateChanged(showing);
-                } catch (RemoteException e) {
-                    Slog.w(TAG, "Failed to call onShowingStateChanged", e);
-                    if (e instanceof DeadObjectException) {
-                        mKeyguardStateCallbacks.remove(callback);
-                    }
+            mSecondaryDisplayShowing = secondaryDisplayShowing;
+            if (notifyDefaultDisplayCallbacks) {
+                notifyDefaultDisplayCallbacks(showing);
+            }
+            updateActivityLockScreenState(showing, secondaryDisplayShowing);
+        }
+    }
+
+    private void notifyDefaultDisplayCallbacks(boolean showing) {
+        int size = mKeyguardStateCallbacks.size();
+        for (int i = size - 1; i >= 0; i--) {
+            IKeyguardStateCallback callback = mKeyguardStateCallbacks.get(i);
+            try {
+                callback.onShowingStateChanged(showing);
+            } catch (RemoteException e) {
+                Slog.w(TAG, "Failed to call onShowingStateChanged", e);
+                if (e instanceof DeadObjectException) {
+                    mKeyguardStateCallbacks.remove(callback);
                 }
             }
-            updateInputRestrictedLocked();
-            mUiOffloadThread.submit(() -> {
-                mTrustManager.reportKeyguardShowingChanged();
-            });
-            updateActivityLockScreenState(showing);
         }
+        updateInputRestrictedLocked();
+        mUiOffloadThread.submit(() -> {
+            mTrustManager.reportKeyguardShowingChanged();
+        });
     }
 
     private void notifyTrustedChangedLocked(boolean trusted) {
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java
index b2a80f4..4a67868 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java
@@ -16,6 +16,8 @@
 
 package com.android.systemui.media;
 
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.DialogInterface;
@@ -36,6 +38,7 @@
 import android.text.TextUtils;
 import android.text.style.StyleSpan;
 import android.util.Log;
+import android.view.Window;
 import android.view.WindowManager;
 import android.widget.CheckBox;
 import android.widget.CompoundButton;
@@ -146,7 +149,9 @@
         mDialog.getButton(DialogInterface.BUTTON_POSITIVE).setFilterTouchesWhenObscured(true);
 
         ((CheckBox) mDialog.findViewById(R.id.remember)).setOnCheckedChangeListener(this);
-        mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+        final Window w = mDialog.getWindow();
+        w.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+        w.addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
 
         mDialog.show();
     }
diff --git a/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java b/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java
index 50720e9..b5c0d53 100644
--- a/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java
+++ b/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java
@@ -29,6 +29,8 @@
 import android.os.SystemClock;
 import android.util.Log;
 
+import com.android.internal.annotations.GuardedBy;
+
 import java.util.LinkedList;
 
 /**
@@ -57,8 +59,12 @@
         }
     }
 
-    private LinkedList<Command> mCmdQueue = new LinkedList();
+    private final LinkedList<Command> mCmdQueue = new LinkedList<Command>();
 
+    private final Object mCompletionHandlingLock = new Object();
+    @GuardedBy("mCompletionHandlingLock")
+    private CreationAndCompletionThread mCompletionThread;
+    @GuardedBy("mCompletionHandlingLock")
     private Looper mLooper;
 
     /*
@@ -76,7 +82,10 @@
 
         public void run() {
             Looper.prepare();
+            // ok to modify mLooper as here we are
+            // synchronized on mCompletionHandlingLock due to the Object.wait() in startSound(cmd)
             mLooper = Looper.myLooper();
+            if (DEBUG) Log.d(mTag, "in run: new looper " + mLooper);
             synchronized(this) {
                 AudioManager audioManager =
                     (AudioManager) mCmd.context.getSystemService(Context.AUDIO_SERVICE);
@@ -97,7 +106,7 @@
                     if ((mCmd.uri != null) && (mCmd.uri.getEncodedPath() != null)
                             && (mCmd.uri.getEncodedPath().length() > 0)) {
                         if (!audioManager.isMusicActiveRemotely()) {
-                            synchronized(mQueueAudioFocusLock) {
+                            synchronized (mQueueAudioFocusLock) {
                                 if (mAudioManagerWithAudioFocus == null) {
                                     if (DEBUG) Log.d(mTag, "requesting AudioFocus");
                                     int focusGain = AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK;
@@ -129,7 +138,9 @@
                         Log.e(mTag, "Exception while sleeping to sync notification playback"
                                 + " with ducking", e);
                     }
+                    if (DEBUG) { Log.d(mTag, "player.start"); }
                     if (mPlayer != null) {
+                        if (DEBUG) { Log.d(mTag, "mPlayer.release"); }
                         mPlayer.release();
                     }
                     mPlayer = player;
@@ -148,7 +159,7 @@
         // is playing, let it continue until we're done, so there
         // is less of a glitch.
         try {
-            if (DEBUG) Log.d(mTag, "Starting playback");
+            if (DEBUG) { Log.d(mTag, "startSound()"); }
             //-----------------------------------
             // This is were we deviate from the AsyncPlayer implementation and create the
             // MediaPlayer in a new thread with which we're synchronized
@@ -158,10 +169,11 @@
                 // matters
                 if((mLooper != null)
                         && (mLooper.getThread().getState() != Thread.State.TERMINATED)) {
+                    if (DEBUG) { Log.d(mTag, "in startSound quitting looper " + mLooper); }
                     mLooper.quit();
                 }
                 mCompletionThread = new CreationAndCompletionThread(cmd);
-                synchronized(mCompletionThread) {
+                synchronized (mCompletionThread) {
                     mCompletionThread.start();
                     mCompletionThread.wait();
                 }
@@ -209,13 +221,18 @@
                         mPlayer = null;
                         synchronized(mQueueAudioFocusLock) {
                             if (mAudioManagerWithAudioFocus != null) {
+                                if (DEBUG) { Log.d(mTag, "in STOP: abandonning AudioFocus"); }
                                 mAudioManagerWithAudioFocus.abandonAudioFocus(null);
                                 mAudioManagerWithAudioFocus = null;
                             }
                         }
-                        if((mLooper != null)
-                                && (mLooper.getThread().getState() != Thread.State.TERMINATED)) {
-                            mLooper.quit();
+                        synchronized (mCompletionHandlingLock) {
+                            if ((mLooper != null) &&
+                                    (mLooper.getThread().getState() != Thread.State.TERMINATED))
+                            {
+                                if (DEBUG) { Log.d(mTag, "in STOP: quitting looper "+ mLooper); }
+                                mLooper.quit();
+                            }
                         }
                     } else {
                         Log.w(mTag, "STOP command without a player");
@@ -250,9 +267,11 @@
         }
         // if there are no more sounds to play, end the Looper to listen for media completion
         synchronized (mCmdQueue) {
-            if (mCmdQueue.size() == 0) {
-                synchronized(mCompletionHandlingLock) {
-                    if(mLooper != null) {
+            synchronized(mCompletionHandlingLock) {
+                if (DEBUG) { Log.d(mTag, "onCompletion queue size=" + mCmdQueue.size()); }
+                if ((mCmdQueue.size() == 0)) {
+                    if (mLooper != null) {
+                        if (DEBUG) { Log.d(mTag, "in onCompletion quitting looper " + mLooper); }
                         mLooper.quit();
                     }
                     mCompletionThread = null;
@@ -269,13 +288,20 @@
     }
 
     private String mTag;
+
+    @GuardedBy("mCmdQueue")
     private CmdThread mThread;
-    private CreationAndCompletionThread mCompletionThread;
-    private final Object mCompletionHandlingLock = new Object();
+
     private MediaPlayer mPlayer;
+
+
+    @GuardedBy("mCmdQueue")
     private PowerManager.WakeLock mWakeLock;
+
     private final Object mQueueAudioFocusLock = new Object();
-    private AudioManager mAudioManagerWithAudioFocus; // synchronized on mQueueAudioFocusLock
+    @GuardedBy("mQueueAudioFocusLock")
+    private AudioManager mAudioManagerWithAudioFocus;
+
     private int mNotificationRampTimeMs = 0;
 
     // The current state according to the caller.  Reality lags behind
@@ -311,6 +337,7 @@
      */
     @Deprecated
     public void play(Context context, Uri uri, boolean looping, int stream) {
+        if (DEBUG) { Log.d(mTag, "play uri=" + uri.toString()); }
         PlayerBase.deprecateStreamTypeForPlayback(stream, "NotificationPlayer", "play");
         Command cmd = new Command();
         cmd.requestTime = SystemClock.uptimeMillis();
@@ -339,6 +366,7 @@
      *          (see {@link MediaPlayer#setAudioAttributes(AudioAttributes)})
      */
     public void play(Context context, Uri uri, boolean looping, AudioAttributes attributes) {
+        if (DEBUG) { Log.d(mTag, "play uri=" + uri.toString()); }
         Command cmd = new Command();
         cmd.requestTime = SystemClock.uptimeMillis();
         cmd.code = PLAY;
@@ -357,6 +385,7 @@
      * at this point.  Calling this multiple times has no ill effects.
      */
     public void stop() {
+        if (DEBUG) { Log.d(mTag, "stop"); }
         synchronized (mCmdQueue) {
             // This check allows stop to be called multiple times without starting
             // a thread that ends up doing nothing.
@@ -370,6 +399,7 @@
         }
     }
 
+    @GuardedBy("mCmdQueue")
     private void enqueueLocked(Command cmd) {
         mCmdQueue.add(cmd);
         if (mThread == null) {
@@ -393,22 +423,26 @@
      * @hide
      */
     public void setUsesWakeLock(Context context) {
-        if (mWakeLock != null || mThread != null) {
-            // if either of these has happened, we've already played something.
-            // and our releases will be out of sync.
-            throw new RuntimeException("assertion failed mWakeLock=" + mWakeLock
-                    + " mThread=" + mThread);
+        synchronized (mCmdQueue) {
+            if (mWakeLock != null || mThread != null) {
+                // if either of these has happened, we've already played something.
+                // and our releases will be out of sync.
+                throw new RuntimeException("assertion failed mWakeLock=" + mWakeLock
+                        + " mThread=" + mThread);
+            }
+            PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
+            mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, mTag);
         }
-        PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
-        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, mTag);
     }
 
+    @GuardedBy("mCmdQueue")
     private void acquireWakeLock() {
         if (mWakeLock != null) {
             mWakeLock.acquire();
         }
     }
 
+    @GuardedBy("mCmdQueue")
     private void releaseWakeLock() {
         if (mWakeLock != null) {
             mWakeLock.release();
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java
index e1a7e3b..5547e2d 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java
@@ -90,8 +90,7 @@
                     LayoutParams.TYPE_NAVIGATION_BAR_PANEL,
                     LayoutParams.FLAG_LAYOUT_IN_SCREEN
                             | LayoutParams.FLAG_NOT_TOUCHABLE
-                            | LayoutParams.FLAG_NOT_FOCUSABLE
-                            | LayoutParams.FLAG_HARDWARE_ACCELERATED,
+                            | LayoutParams.FLAG_NOT_FOCUSABLE,
                     PixelFormat.TRANSLUCENT);
             lp.setTitle("pip-dismiss-overlay");
             lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
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 b3f992d..bae9ef8a 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java
@@ -30,6 +30,7 @@
 import android.os.Handler;
 import android.os.RemoteException;
 import android.util.Log;
+import android.util.Pair;
 import android.view.IPinnedStackController;
 import android.view.IPinnedStackListener;
 import android.view.IWindowManager;
@@ -70,11 +71,11 @@
      */
     TaskStackListener mTaskStackListener = new TaskStackListener() {
         @Override
-        public void onActivityPinned(String packageName, int taskId) {
+        public void onActivityPinned(String packageName, int userId, int taskId) {
             mTouchHandler.onActivityPinned();
             mMediaController.onActivityPinned();
             mMenuController.onActivityPinned();
-            mNotificationController.onActivityPinned(packageName,
+            mNotificationController.onActivityPinned(packageName, userId,
                     true /* deferUntilAnimationEnds */);
 
             SystemServicesProxy.getInstance(mContext).setPipVisibility(true);
@@ -82,13 +83,15 @@
 
         @Override
         public void onActivityUnpinned() {
-            ComponentName topPipActivity = PipUtils.getTopPinnedActivity(mContext,
-                    mActivityManager);
-            mMenuController.onActivityUnpinned(topPipActivity);
-            mTouchHandler.onActivityUnpinned(topPipActivity);
-            mNotificationController.onActivityUnpinned(topPipActivity);
+            final Pair<ComponentName, Integer> topPipActivityInfo = PipUtils.getTopPinnedActivity(
+                    mContext, mActivityManager);
+            final ComponentName topActivity = topPipActivityInfo.first;
+            final int userId = topActivity != null ? topPipActivityInfo.second : 0;
+            mMenuController.onActivityUnpinned();
+            mTouchHandler.onActivityUnpinned(topActivity);
+            mNotificationController.onActivityUnpinned(topActivity, userId);
 
-            SystemServicesProxy.getInstance(mContext).setPipVisibility(topPipActivity != null);
+            SystemServicesProxy.getInstance(mContext).setPipVisibility(topActivity != null);
         }
 
         @Override
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMediaController.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMediaController.java
index b3a0794..174a7ef 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMediaController.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMediaController.java
@@ -230,7 +230,7 @@
     private void resolveActiveMediaController(List<MediaController> controllers) {
         if (controllers != null) {
             final ComponentName topActivity = PipUtils.getTopPinnedActivity(mContext,
-                    mActivityManager);
+                    mActivityManager).first;
             if (topActivity != null) {
                 for (int i = 0; i < controllers.size(); i++) {
                     final MediaController controller = controllers.get(i);
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
index a5ee198..90f7b8d 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
@@ -19,6 +19,7 @@
 import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_ACTIONS;
 import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_ALLOW_TIMEOUT;
 import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_CONTROLLER_MESSENGER;
+import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_WILL_RESIZE_MENU;
 import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_DISMISS_FRACTION;
 import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_MOVEMENT_BOUNDS;
 import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_MENU_STATE;
@@ -54,6 +55,7 @@
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.View.OnTouchListener;
 import android.view.ViewConfiguration;
 import android.view.ViewGroup;
 import android.view.WindowManager.LayoutParams;
@@ -118,6 +120,7 @@
                 }
             };
 
+    private PipTouchState mTouchState;
     private PointF mDownPosition = new PointF();
     private PointF mDownDelta = new PointF();
     private ViewConfiguration mViewConfig;
@@ -132,7 +135,8 @@
                     showMenu(data.getInt(EXTRA_MENU_STATE),
                             data.getParcelable(EXTRA_STACK_BOUNDS),
                             data.getParcelable(EXTRA_MOVEMENT_BOUNDS),
-                            data.getBoolean(EXTRA_ALLOW_TIMEOUT));
+                            data.getBoolean(EXTRA_ALLOW_TIMEOUT),
+                            data.getBoolean(EXTRA_WILL_RESIZE_MENU));
                     break;
                 }
                 case MESSAGE_POKE_MENU:
@@ -173,6 +177,13 @@
         // Set the flags to allow us to watch for outside touches and also hide the menu and start
         // manipulating the PIP in the same touch gesture
         mViewConfig = ViewConfiguration.get(this);
+        mTouchState = new PipTouchState(mViewConfig, mHandler, () -> {
+            if (mMenuState == MENU_STATE_CLOSE) {
+                showPipMenu();
+            } else {
+                expandPip();
+            }
+        });
         getWindow().addFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | LayoutParams.FLAG_SLIPPERY);
 
         super.onCreate(savedInstanceState);
@@ -184,12 +195,28 @@
         mViewRoot.setBackground(mBackgroundDrawable);
         mMenuContainer = findViewById(R.id.menu_container);
         mMenuContainer.setAlpha(0);
-        mMenuContainer.setOnClickListener((v) -> {
-            if (mMenuState == MENU_STATE_CLOSE) {
-                showPipMenu();
-            } else {
-                expandPip();
+        mMenuContainer.setOnTouchListener((v, event) -> {
+            mTouchState.onTouchEvent(event);
+            switch (event.getAction()) {
+                case MotionEvent.ACTION_UP:
+                    if (mTouchState.isDoubleTap() || mMenuState == MENU_STATE_FULL) {
+                        // Expand to fullscreen if this is a double tap or we are already expanded
+                        expandPip();
+                    } else if (!mTouchState.isWaitingForDoubleTap()) {
+                        // User has stalled long enough for this not to be a drag or a double tap,
+                        // just expand the menu if necessary
+                        if (mMenuState == MENU_STATE_CLOSE) {
+                            showPipMenu();
+                        }
+                    } else {
+                        // Next touch event _may_ be the second tap for the double-tap, schedule a
+                        // fallback runnable to trigger the menu if no touch event occurs before the
+                        // next tap
+                        mTouchState.scheduleDoubleTapTimeoutCallback();
+                    }
+                    break;
             }
+            return true;
         });
         mDismissButton = findViewById(R.id.dismiss);
         mDismissButton.setAlpha(0);
@@ -307,12 +334,14 @@
     }
 
     private void showMenu(int menuState, Rect stackBounds, Rect movementBounds,
-            boolean allowMenuTimeout) {
+            boolean allowMenuTimeout, boolean resizeMenuOnShow) {
         mAllowMenuTimeout = allowMenuTimeout;
         if (mMenuState != menuState) {
-            boolean deferTouchesUntilAnimationEnds = (mMenuState == MENU_STATE_FULL) ||
-                    (menuState == MENU_STATE_FULL);
-            mAllowTouches = !deferTouchesUntilAnimationEnds;
+            // Disallow touches if the menu needs to resize while showing, and we are transitioning
+            // to/from a full menu state.
+            boolean disallowTouchesUntilAnimationEnd = resizeMenuOnShow &&
+                    (mMenuState == MENU_STATE_FULL || menuState == MENU_STATE_FULL);
+            mAllowTouches = !disallowTouchesUntilAnimationEnd;
             cancelDelayedFinish();
             updateActionViews(stackBounds);
             if (mMenuContainerAnimator != null) {
@@ -388,6 +417,11 @@
 
     private void updateFromIntent(Intent intent) {
         mToControllerMessenger = intent.getParcelableExtra(EXTRA_CONTROLLER_MESSENGER);
+        if (mToControllerMessenger == null) {
+            Log.w(TAG, "Controller messenger is null. Stopping.");
+            finish();
+            return;
+        }
         notifyActivityCallback(mMessenger);
 
         // Register for HidePipMenuEvents once we notify the controller of this activity
@@ -404,7 +438,8 @@
             Rect stackBounds = intent.getParcelableExtra(EXTRA_STACK_BOUNDS);
             Rect movementBounds = intent.getParcelableExtra(EXTRA_MOVEMENT_BOUNDS);
             boolean allowMenuTimeout = intent.getBooleanExtra(EXTRA_ALLOW_TIMEOUT, true);
-            showMenu(menuState, stackBounds, movementBounds, allowMenuTimeout);
+            boolean willResizeMenu = intent.getBooleanExtra(EXTRA_WILL_RESIZE_MENU, false);
+            showMenu(menuState, stackBounds, movementBounds, allowMenuTimeout, willResizeMenu);
         }
     }
 
@@ -567,6 +602,9 @@
     }
 
     private void sendMessage(Message m, String errorMsg) {
+        if (mToControllerMessenger == null) {
+            return;
+        }
         try {
             mToControllerMessenger.send(m);
         } catch (RemoteException e) {
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 c558056..68743b3 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java
@@ -63,6 +63,7 @@
     public static final String EXTRA_STACK_BOUNDS = "stack_bounds";
     public static final String EXTRA_MOVEMENT_BOUNDS = "movement_bounds";
     public static final String EXTRA_ALLOW_TIMEOUT = "allow_timeout";
+    public static final String EXTRA_WILL_RESIZE_MENU = "resize_menu_on_show";
     public static final String EXTRA_DISMISS_FRACTION = "dismiss_fraction";
     public static final String EXTRA_MENU_STATE = "menu_state";
 
@@ -210,6 +211,10 @@
         EventBus.getDefault().register(this);
     }
 
+    public boolean isMenuActivityVisible() {
+        return mToActivityMessenger != null;
+    }
+
     public void onActivityPinned() {
         if (mMenuState == MENU_STATE_NONE) {
             // If the menu is not visible, then re-register the input consumer if it is not already
@@ -218,7 +223,7 @@
         }
     }
 
-    public void onActivityUnpinned(ComponentName topPipActivity) {
+    public void onActivityUnpinned() {
         hideMenu();
         setStartActivityRequested(false);
     }
@@ -268,7 +273,8 @@
             // If we haven't requested the start activity, or if it previously took too long to
             // start, then start it
             startMenuActivity(MENU_STATE_NONE, null /* stackBounds */,
-                    null /* movementBounds */, false /* allowMenuTimeout */);
+                    null /* movementBounds */, false /* allowMenuTimeout */,
+                    false /* resizeMenuOnShow */);
         }
     }
 
@@ -276,18 +282,20 @@
      * Shows the menu activity.
      */
     public void showMenu(int menuState, Rect stackBounds, Rect movementBounds,
-            boolean allowMenuTimeout) {
+            boolean allowMenuTimeout, boolean willResizeMenu) {
         if (DEBUG) {
             Log.d(TAG, "showMenu() state=" + menuState
                     + " hasActivity=" + (mToActivityMessenger != null)
                     + " callers=\n" + Debug.getCallers(5, "    "));
         }
+
         if (mToActivityMessenger != null) {
             Bundle data = new Bundle();
             data.putInt(EXTRA_MENU_STATE, menuState);
             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);
             Message m = Message.obtain();
             m.what = PipMenuActivity.MESSAGE_SHOW_MENU;
             m.obj = data;
@@ -299,7 +307,8 @@
         } else if (!mStartActivityRequested || isStartActivityRequestedElapsed()) {
             // If we haven't requested the start activity, or if it previously took too long to
             // start, then start it
-            startMenuActivity(menuState, stackBounds, movementBounds, allowMenuTimeout);
+            startMenuActivity(menuState, stackBounds, movementBounds, allowMenuTimeout,
+                    willResizeMenu);
         }
     }
 
@@ -372,7 +381,7 @@
      * Starts the menu activity on the top task of the pinned stack.
      */
     private void startMenuActivity(int menuState, Rect stackBounds, Rect movementBounds,
-            boolean allowMenuTimeout) {
+            boolean allowMenuTimeout, boolean willResizeMenu) {
         try {
             StackInfo pinnedStackInfo = mActivityManager.getStackInfo(PINNED_STACK_ID);
             if (pinnedStackInfo != null && pinnedStackInfo.taskIds != null &&
@@ -388,6 +397,7 @@
                 }
                 intent.putExtra(EXTRA_MENU_STATE, menuState);
                 intent.putExtra(EXTRA_ALLOW_TIMEOUT, allowMenuTimeout);
+                intent.putExtra(EXTRA_WILL_RESIZE_MENU, willResizeMenu);
                 ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext, 0, 0);
                 options.setLaunchTaskId(
                         pinnedStackInfo.taskIds[pinnedStackInfo.taskIds.length - 1]);
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipNotificationController.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipNotificationController.java
index 696fdbc..6d083e9 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipNotificationController.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipNotificationController.java
@@ -35,10 +35,15 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
-import android.graphics.drawable.Icon;
+import android.graphics.Bitmap;
+import android.graphics.Bitmap.Config;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
+import android.os.UserHandle;
+import android.util.IconDrawableFactory;
 import android.util.Log;
+import android.util.Pair;
 
 import com.android.systemui.R;
 import com.android.systemui.SystemUI;
@@ -57,22 +62,29 @@
     private IActivityManager mActivityManager;
     private AppOpsManager mAppOpsManager;
     private NotificationManager mNotificationManager;
+    private IconDrawableFactory mIconDrawableFactory;
 
     private PipMotionHelper mMotionHelper;
 
     // Used when building a deferred notification
     private String mDeferredNotificationPackageName;
+    private int mDeferredNotificationUserId;
 
     private AppOpsManager.OnOpChangedListener mAppOpsChangedListener = new OnOpChangedListener() {
         @Override
         public void onOpChanged(String op, String packageName) {
             try {
                 // Dismiss the PiP once the user disables the app ops setting for that package
-                final ApplicationInfo appInfo = mContext.getPackageManager().getApplicationInfo(
-                        packageName, 0);
-                if (mAppOpsManager.checkOpNoThrow(OP_PICTURE_IN_PICTURE, appInfo.uid, packageName)
-                        != MODE_ALLOWED) {
-                    mMotionHelper.dismissPip();
+                final Pair<ComponentName, Integer> topPipActivityInfo =
+                        PipUtils.getTopPinnedActivity(mContext, mActivityManager);
+                if (topPipActivityInfo.first != null) {
+                    final ApplicationInfo appInfo = mContext.getPackageManager()
+                            .getApplicationInfoAsUser(packageName, 0, topPipActivityInfo.second);
+                    if (appInfo.packageName.equals(topPipActivityInfo.first.getPackageName()) &&
+                                mAppOpsManager.checkOpNoThrow(OP_PICTURE_IN_PICTURE, appInfo.uid,
+                                        packageName) != MODE_ALLOWED) {
+                        mMotionHelper.dismissPip();
+                    }
                 }
             } catch (NameNotFoundException e) {
                 // Unregister the listener if the package can't be found
@@ -88,16 +100,18 @@
         mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
         mNotificationManager = NotificationManager.from(context);
         mMotionHelper = motionHelper;
+        mIconDrawableFactory = IconDrawableFactory.newInstance(context);
     }
 
-    public void onActivityPinned(String packageName, boolean deferUntilAnimationEnds) {
+    public void onActivityPinned(String packageName, int userId, boolean deferUntilAnimationEnds) {
         // Clear any existing notification
         mNotificationManager.cancel(NOTIFICATION_TAG, NOTIFICATION_ID);
 
         if (deferUntilAnimationEnds) {
             mDeferredNotificationPackageName = packageName;
+            mDeferredNotificationUserId = userId;
         } else {
-            showNotificationForApp(mDeferredNotificationPackageName);
+            showNotificationForApp(packageName, userId);
         }
 
         // Register for changes to the app ops setting for this package while it is in PiP
@@ -106,22 +120,25 @@
 
     public void onPinnedStackAnimationEnded() {
         if (mDeferredNotificationPackageName != null) {
-            showNotificationForApp(mDeferredNotificationPackageName);
+            showNotificationForApp(mDeferredNotificationPackageName, mDeferredNotificationUserId);
             mDeferredNotificationPackageName = null;
+            mDeferredNotificationUserId = 0;
         }
     }
 
-    public void onActivityUnpinned(ComponentName topPipActivity) {
+    public void onActivityUnpinned(ComponentName topPipActivity, int userId) {
         // Unregister for changes to the previously PiP'ed package
         unregisterAppOpsListener();
 
         // Reset the deferred notification package
         mDeferredNotificationPackageName = null;
+        mDeferredNotificationUserId = 0;
 
         if (topPipActivity != null) {
             // onActivityUnpinned() is only called after the transition is complete, so we don't
             // need to defer until the animation ends to update the notification
-            onActivityPinned(topPipActivity.getPackageName(), false /* deferUntilAnimationEnds */);
+            onActivityPinned(topPipActivity.getPackageName(), userId,
+                    false /* deferUntilAnimationEnds */);
         } else {
             mNotificationManager.cancel(NOTIFICATION_TAG, NOTIFICATION_ID);
         }
@@ -130,20 +147,27 @@
     /**
      * Builds and shows the notification for the given app.
      */
-    private void showNotificationForApp(String packageName) {
+    private void showNotificationForApp(String packageName, int userId) {
         // Build a new notification
-        final Notification.Builder builder =
-                new Notification.Builder(mContext, NotificationChannels.GENERAL)
-                        .setLocalOnly(true)
-                        .setOngoing(true)
-                        .setSmallIcon(R.drawable.pip_notification_icon)
-                        .setColor(mContext.getColor(
-                                com.android.internal.R.color.system_notification_accent_color));
-        if (updateNotificationForApp(builder, packageName)) {
-            SystemUI.overrideNotificationAppName(mContext, builder);
+        try {
+            final UserHandle user = UserHandle.of(userId);
+            final Context userContext = mContext.createPackageContextAsUser(
+                    mContext.getPackageName(), 0, user);
+            final Notification.Builder builder =
+                    new Notification.Builder(userContext, NotificationChannels.GENERAL)
+                            .setLocalOnly(true)
+                            .setOngoing(true)
+                            .setSmallIcon(R.drawable.pip_notification_icon)
+                            .setColor(mContext.getColor(
+                                    com.android.internal.R.color.system_notification_accent_color));
+            if (updateNotificationForApp(builder, packageName, user)) {
+                SystemUI.overrideNotificationAppName(mContext, builder);
 
-            // Show the new notification
-            mNotificationManager.notify(NOTIFICATION_TAG, NOTIFICATION_ID, builder.build());
+                // Show the new notification
+                mNotificationManager.notify(NOTIFICATION_TAG, NOTIFICATION_ID, builder.build());
+            }
+        } catch (NameNotFoundException e) {
+            Log.e(TAG, "Could not show notification for application", e);
         }
     }
 
@@ -151,33 +175,33 @@
      * Updates the notification builder with app-specific information, returning whether it was
      * successful.
      */
-    private boolean updateNotificationForApp(Notification.Builder builder, String packageName) {
+    private boolean updateNotificationForApp(Notification.Builder builder, String packageName,
+            UserHandle user) throws NameNotFoundException {
         final PackageManager pm = mContext.getPackageManager();
         final ApplicationInfo appInfo;
         try {
-            appInfo = pm.getApplicationInfo(packageName, 0);
+            appInfo = pm.getApplicationInfoAsUser(packageName, 0, user.getIdentifier());
         } catch (NameNotFoundException e) {
             Log.e(TAG, "Could not update notification for application", e);
             return false;
         }
 
         if (appInfo != null) {
-            final String appName = pm.getApplicationLabel(appInfo).toString();
+            final String appName = pm.getUserBadgedLabel(pm.getApplicationLabel(appInfo), user)
+                    .toString();
             final String message = mContext.getString(R.string.pip_notification_message, appName);
             final Intent settingsIntent = new Intent(ACTION_PICTURE_IN_PICTURE_SETTINGS,
                     Uri.fromParts("package", packageName, null));
+            settingsIntent.putExtra(Intent.EXTRA_USER_HANDLE, user);
             settingsIntent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK);
-            final Icon appIcon = appInfo.icon != 0
-                    ? Icon.createWithResource(packageName, appInfo.icon)
-                    : Icon.createWithResource(Resources.getSystem(),
-                            com.android.internal.R.drawable.sym_def_app_icon);
 
+            final Drawable iconDrawable = mIconDrawableFactory.getBadgedIcon(appInfo);
             builder.setContentTitle(mContext.getString(R.string.pip_notification_title, appName))
                     .setContentText(message)
-                    .setContentIntent(PendingIntent.getActivity(mContext, packageName.hashCode(),
-                            settingsIntent, FLAG_CANCEL_CURRENT))
+                    .setContentIntent(PendingIntent.getActivityAsUser(mContext, packageName.hashCode(),
+                            settingsIntent, FLAG_CANCEL_CURRENT, null, user))
                     .setStyle(new Notification.BigTextStyle().bigText(message))
-                    .setLargeIcon(appIcon);
+                    .setLargeIcon(createBitmap(iconDrawable).createAshmemBitmap());
             return true;
         }
         return false;
@@ -191,4 +215,17 @@
     private void unregisterAppOpsListener() {
         mAppOpsManager.stopWatchingMode(mAppOpsChangedListener);
     }
+
+    /**
+     * Bakes a drawable into a bitmap.
+     */
+    private Bitmap createBitmap(Drawable d) {
+        Bitmap bitmap = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(),
+                Config.ARGB_8888);
+        Canvas c = new Canvas(bitmap);
+        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
+        d.draw(c);
+        c.setBitmap(null);
+        return bitmap;
+    }
 }
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 9b48320..2b48e0f 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
@@ -31,7 +31,6 @@
 import android.graphics.Point;
 import android.graphics.PointF;
 import android.graphics.Rect;
-import android.graphics.RectF;
 import android.os.Handler;
 import android.os.RemoteException;
 import android.util.Log;
@@ -47,10 +46,8 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.policy.PipSnapAlgorithm;
-import com.android.systemui.Dependency;
 import com.android.systemui.R;
 import com.android.systemui.statusbar.FlingAnimationUtils;
-import com.android.systemui.tuner.TunerService;
 
 import java.io.PrintWriter;
 
@@ -90,6 +87,8 @@
     // The current movement bounds
     private Rect mMovementBounds = new Rect();
 
+    // The reference inset bounds, used to determine the dismiss fraction
+    private Rect mInsetBounds = new Rect();
     // The reference bounds used to calculate the normal/expanded target bounds
     private Rect mNormalBounds = new Rect();
     private Rect mNormalMovementBounds = new Rect();
@@ -171,7 +170,7 @@
         @Override
         public void onPipShowMenu() {
             mMenuController.showMenu(MENU_STATE_FULL, mMotionHelper.getBounds(),
-                    mMovementBounds, true /* allowMenuTimeout */);
+                    mMovementBounds, true /* allowMenuTimeout */, willResizeMenu());
         }
     }
 
@@ -188,13 +187,15 @@
         mMenuController.addListener(mMenuListener);
         mDismissViewController = new PipDismissViewController(context);
         mSnapAlgorithm = new PipSnapAlgorithm(mContext);
-        mTouchState = new PipTouchState(mViewConfig);
         mFlingAnimationUtils = new FlingAnimationUtils(context, 2.5f);
         mGestures = new PipTouchGesture[] {
                 mDefaultMovementGesture
         };
         mMotionHelper = new PipMotionHelper(mContext, mActivityManager, mMenuController,
                 mSnapAlgorithm, mFlingAnimationUtils);
+        mTouchState = new PipTouchState(mViewConfig, mHandler,
+                () -> mMenuController.showMenu(MENU_STATE_FULL, mMotionHelper.getBounds(),
+                        mMovementBounds, true /* allowMenuTimeout */, willResizeMenu()));
 
         Resources res = context.getResources();
         mExpandedShortestEdgeSize = res.getDimensionPixelSize(
@@ -215,7 +216,7 @@
         // Only show the menu if the user isn't currently interacting with the PiP
         if (!mTouchState.isUserInteracting()) {
             mMenuController.showMenu(MENU_STATE_FULL, mMotionHelper.getBounds(),
-                    mMovementBounds, false /* allowMenuTimeout */);
+                    mMovementBounds, false /* allowMenuTimeout */, willResizeMenu());
         }
     }
 
@@ -237,7 +238,7 @@
 
         if (mShowPipMenuOnAnimationEnd) {
             mMenuController.showMenu(MENU_STATE_CLOSE, mMotionHelper.getBounds(),
-                    mMovementBounds, true /* allowMenuTimeout */);
+                    mMovementBounds, true /* allowMenuTimeout */, false /* willResizeMenu */);
             mShowPipMenuOnAnimationEnd = false;
         }
     }
@@ -311,6 +312,7 @@
         mNormalMovementBounds = normalMovementBounds;
         mExpandedMovementBounds = expandedMovementBounds;
         mDisplayRotation = displayRotation;
+        mInsetBounds.set(insetBounds);
         updateMovementBounds(mMenuState);
 
         // If we have a deferred resize, apply it now
@@ -337,7 +339,7 @@
 
     private void onAccessibilityShowMenu() {
         mMenuController.showMenu(MENU_STATE_FULL, mMotionHelper.getBounds(),
-                mMovementBounds, false /* allowMenuTimeout */);
+                mMovementBounds, false /* allowMenuTimeout */, willResizeMenu());
     }
 
     private boolean handleTouchEvent(MotionEvent ev) {
@@ -385,7 +387,7 @@
             }
             case MotionEvent.ACTION_HOVER_ENTER:
             case MotionEvent.ACTION_HOVER_MOVE: {
-                if (!mSendingHoverAccessibilityEvents) {
+                if (mAccessibilityManager.isEnabled() && !mSendingHoverAccessibilityEvents) {
                     AccessibilityEvent event = AccessibilityEvent.obtain(
                             AccessibilityEvent.TYPE_VIEW_HOVER_ENTER);
                     event.setImportantForAccessibility(true);
@@ -398,7 +400,7 @@
                 break;
             }
             case MotionEvent.ACTION_HOVER_EXIT: {
-                if (mSendingHoverAccessibilityEvents) {
+                if (mAccessibilityManager.isEnabled() && mSendingHoverAccessibilityEvents) {
                     AccessibilityEvent event = AccessibilityEvent.obtain(
                             AccessibilityEvent.TYPE_VIEW_HOVER_EXIT);
                     event.setImportantForAccessibility(true);
@@ -418,15 +420,18 @@
      * Updates the appearance of the menu and scrim on top of the PiP while dismissing.
      */
     private void updateDismissFraction() {
-        if (mMenuController != null) {
+        // Skip updating the dismiss fraction when the IME is showing. This is to work around an
+        // issue where starting the menu activity for the dismiss overlay will steal the window
+        // focus, which closes the IME.
+        if (mMenuController != null && !mIsImeShowing) {
             Rect bounds = mMotionHelper.getBounds();
-            final float target = mMovementBounds.bottom + bounds.height();
+            final float target = mInsetBounds.bottom;
             float fraction = 0f;
             if (bounds.bottom > target) {
                 final float distance = bounds.bottom - target;
                 fraction = Math.min(distance / bounds.height(), 1f);
             }
-            if (Float.compare(fraction, 0f) != 0 || mMenuState != MENU_STATE_NONE) {
+            if (Float.compare(fraction, 0f) != 0 || mMenuController.isMenuActivityVisible()) {
                 // Update if the fraction > 0, or if fraction == 0 and the menu was already visible
                 mMenuController.setDismissFraction(fraction);
             }
@@ -701,7 +706,7 @@
                     // If the menu is still visible, and we aren't minimized, then just poke the
                     // menu so that it will timeout after the user stops touching it
                     mMenuController.showMenu(mMenuState, mMotionHelper.getBounds(),
-                            mMovementBounds, true /* allowMenuTimeout */);
+                            mMovementBounds, true /* allowMenuTimeout */, willResizeMenu());
                 } else {
                     // If the menu is not visible, then we can still be showing the activity for the
                     // dismiss overlay, so just finish it after the animation completes
@@ -727,8 +732,20 @@
                         null /* animatorListener */);
                 setMinimizedStateInternal(false);
             } else if (mMenuState != MENU_STATE_FULL) {
-                mMenuController.showMenu(MENU_STATE_FULL, mMotionHelper.getBounds(),
-                        mMovementBounds, true /* allowMenuTimeout */);
+                if (mTouchState.isDoubleTap()) {
+                    // Expand to fullscreen if this is a double tap
+                    mMotionHelper.expandPip();
+                } else if (!mTouchState.isWaitingForDoubleTap()) {
+                    // User has stalled long enough for this not to be a drag or a double tap, just
+                    // expand the menu
+                    mMenuController.showMenu(MENU_STATE_FULL, mMotionHelper.getBounds(),
+                            mMovementBounds, true /* allowMenuTimeout */, willResizeMenu());
+                } else {
+                    // Next touch event _may_ be the second tap for the double-tap, schedule a
+                    // fallback runnable to trigger the menu if no touch event occurs before the
+                    // next tap
+                    mTouchState.scheduleDoubleTapTimeoutCallback();
+                }
             } else {
                 mMenuController.hideMenu();
                 mMotionHelper.expandPip();
@@ -770,6 +787,14 @@
         cleanUpDismissTarget();
     }
 
+    /**
+     * @return whether the menu will resize as a part of showing the full menu.
+     */
+    private boolean willResizeMenu() {
+        return mExpandedBounds.width() != mNormalBounds.width() ||
+                mExpandedBounds.height() != mNormalBounds.height();
+    }
+
     public void dump(PrintWriter pw, String prefix) {
         final String innerPrefix = prefix + "  ";
         pw.println(prefix + TAG);
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchState.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchState.java
index 686b3bb..b9369d3 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchState.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchState.java
@@ -17,11 +17,15 @@
 package com.android.systemui.pip.phone;
 
 import android.graphics.PointF;
+import android.os.Handler;
+import android.os.SystemClock;
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.VelocityTracker;
 import android.view.ViewConfiguration;
 
+import com.android.internal.annotations.VisibleForTesting;
+
 import java.io.PrintWriter;
 
 /**
@@ -31,9 +35,17 @@
     private static final String TAG = "PipTouchHandler";
     private static final boolean DEBUG = false;
 
-    private ViewConfiguration mViewConfig;
+    @VisibleForTesting
+    static final long DOUBLE_TAP_TIMEOUT = 200;
+
+    private final Handler mHandler;
+    private final ViewConfiguration mViewConfig;
+    private final Runnable mDoubleTapTimeoutCallback;
 
     private VelocityTracker mVelocityTracker;
+    private long mDownTouchTime = 0;
+    private long mLastDownTouchTime = 0;
+    private long mUpTouchTime = 0;
     private final PointF mDownTouch = new PointF();
     private final PointF mDownDelta = new PointF();
     private final PointF mLastTouch = new PointF();
@@ -41,13 +53,22 @@
     private final PointF mVelocity = new PointF();
     private boolean mAllowTouches = true;
     private boolean mIsUserInteracting = false;
+    // Set to true only if the multiple taps occur within the double tap timeout
+    private boolean mIsDoubleTap = false;
+    // Set to true only if a gesture
+    private boolean mIsWaitingForDoubleTap = false;
     private boolean mIsDragging = false;
+    // The previous gesture was a drag
+    private boolean mPreviouslyDragging = false;
     private boolean mStartedDragging = false;
     private boolean mAllowDraggingOffscreen = false;
     private int mActivePointerId;
 
-    public PipTouchState(ViewConfiguration viewConfig) {
+    public PipTouchState(ViewConfiguration viewConfig, Handler handler,
+            Runnable doubleTapTimeoutCallback) {
         mViewConfig = viewConfig;
+        mHandler = handler;
+        mDoubleTapTimeoutCallback = doubleTapTimeoutCallback;
     }
 
     /**
@@ -81,6 +102,14 @@
                 mDownTouch.set(mLastTouch);
                 mAllowDraggingOffscreen = true;
                 mIsUserInteracting = true;
+                mDownTouchTime = ev.getEventTime();
+                mIsDoubleTap = !mPreviouslyDragging &&
+                        (mDownTouchTime - mLastDownTouchTime) < DOUBLE_TAP_TIMEOUT;
+                mIsWaitingForDoubleTap = false;
+                mLastDownTouchTime = mDownTouchTime;
+                if (mDoubleTapTimeoutCallback != null) {
+                    mHandler.removeCallbacks(mDoubleTapTimeoutCallback);
+                }
                 break;
             }
             case MotionEvent.ACTION_MOVE: {
@@ -155,7 +184,11 @@
                     break;
                 }
 
+                mUpTouchTime = ev.getEventTime();
                 mLastTouch.set(ev.getX(pointerIndex), ev.getY(pointerIndex));
+                mPreviouslyDragging = mIsDragging;
+                mIsWaitingForDoubleTap = !mIsDoubleTap && !mIsDragging &&
+                        (mUpTouchTime - mDownTouchTime) < DOUBLE_TAP_TIMEOUT;
 
                 // Fall through to clean up
             }
@@ -251,6 +284,39 @@
         return mAllowDraggingOffscreen;
     }
 
+    /**
+     * @return whether this gesture is a double-tap.
+     */
+    public boolean isDoubleTap() {
+        return mIsDoubleTap;
+    }
+
+    /**
+     * @return whether this gesture will potentially lead to a following double-tap.
+     */
+    public boolean isWaitingForDoubleTap() {
+        return mIsWaitingForDoubleTap;
+    }
+
+    /**
+     * Schedules the callback to run if the next double tap does not occur.  Only runs if
+     * isWaitingForDoubleTap() is true.
+     */
+    public void scheduleDoubleTapTimeoutCallback() {
+        if (mIsWaitingForDoubleTap) {
+            long delay = getDoubleTapTimeoutCallbackDelay();
+            mHandler.removeCallbacks(mDoubleTapTimeoutCallback);
+            mHandler.postDelayed(mDoubleTapTimeoutCallback, delay);
+        }
+    }
+
+    @VisibleForTesting long getDoubleTapTimeoutCallbackDelay() {
+        if (mIsWaitingForDoubleTap) {
+            return Math.max(0, DOUBLE_TAP_TIMEOUT - (mUpTouchTime - mDownTouchTime));
+        }
+        return -1;
+    }
+
     private void initOrResetVelocityTracker() {
         if (mVelocityTracker == null) {
             mVelocityTracker = VelocityTracker.obtain();
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipUtils.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipUtils.java
index a8cdd1b..56275fd 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipUtils.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipUtils.java
@@ -24,16 +24,17 @@
 import android.content.Context;
 import android.os.RemoteException;
 import android.util.Log;
+import android.util.Pair;
 
 public class PipUtils {
 
     private static final String TAG = "PipUtils";
 
     /**
-     * @return the ComponentName of the top non-SystemUI activity in the pinned stack, or null if
-     *         none exists.
+     * @return the ComponentName and user id of the top non-SystemUI activity in the pinned stack.
+     *         The component name may be null if no such activity exists.
      */
-    public static ComponentName getTopPinnedActivity(Context context,
+    public static Pair<ComponentName, Integer> getTopPinnedActivity(Context context,
             IActivityManager activityManager) {
         try {
             final String sysUiPackageName = context.getPackageName();
@@ -44,13 +45,13 @@
                     ComponentName cn = ComponentName.unflattenFromString(
                             pinnedStackInfo.taskNames[i]);
                     if (cn != null && !cn.getPackageName().equals(sysUiPackageName)) {
-                        return cn;
+                        return new Pair<>(cn, pinnedStackInfo.taskUserIds[i]);
                     }
                 }
             }
         } catch (RemoteException e) {
             Log.w(TAG, "Unable to get pinned stack.");
         }
-        return null;
+        return new Pair<>(null, 0);
     }
 }
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 ca58080..186de5c4 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
@@ -127,6 +127,10 @@
     private PipNotification mPipNotification;
     private ParceledListSlice mCustomActions;
 
+    // Keeps track of the IME visibility to adjust the PiP when the IME is visible
+    private boolean mImeVisible;
+    private int mImeHeightAdjustment;
+
     private final PinnedStackListener mPinnedStackListener = new PinnedStackListener();
 
     private final Runnable mResizePinnedStackRunnable = new Runnable() {
@@ -175,7 +179,22 @@
         public void onListenerRegistered(IPinnedStackController controller) {}
 
         @Override
-        public void onImeVisibilityChanged(boolean imeVisible, int imeHeight) {}
+        public void onImeVisibilityChanged(boolean imeVisible, int imeHeight) {
+            if (mState == STATE_PIP) {
+                if (mImeVisible != imeVisible) {
+                    if (imeVisible) {
+                        // Save the IME height adjustment, and offset to not occlude the IME
+                        mPipBounds.offset(0, -imeHeight);
+                        mImeHeightAdjustment = imeHeight;
+                    } else {
+                        // Apply the inverse adjustment when the IME is hidden
+                        mPipBounds.offset(0, mImeHeightAdjustment);
+                    }
+                    mImeVisible = imeVisible;
+                    resizePinnedStack(STATE_PIP);
+                }
+            }
+        }
 
         @Override
         public void onMinimizedStateChanged(boolean isMinimized) {}
@@ -635,7 +654,7 @@
         }
 
         @Override
-        public void onActivityPinned(String packageName, int taskId) {
+        public void onActivityPinned(String packageName, int userId, int taskId) {
             if (DEBUG) Log.d(TAG, "onActivityPinned()");
             if (!checkCurrentUserId(mContext, DEBUG)) {
                 return;
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 82018ce..e437eff 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipMenuActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipMenuActivity.java
@@ -45,6 +45,9 @@
     @Override
     protected void onCreate(Bundle bundle) {
         super.onCreate(bundle);
+        if (!mPipManager.isPipShown()) {
+            finish();
+        }
         setContentView(R.layout.tv_pip_menu);
         mPipManager.addListener(this);
 
diff --git a/packages/SystemUI/src/com/android/systemui/plugins/PluginActivityManager.java b/packages/SystemUI/src/com/android/systemui/plugins/PluginActivityManager.java
deleted file mode 100644
index 9becc38..0000000
--- a/packages/SystemUI/src/com/android/systemui/plugins/PluginActivityManager.java
+++ /dev/null
@@ -1,43 +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.plugins;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.text.TextUtils;
-import android.util.ArrayMap;
-
-public class PluginActivityManager {
-
-    private final Context mContext;
-    private final PluginManager mPluginManager;
-    private final ArrayMap<String, String> mActionLookup = new ArrayMap<>();
-
-    public PluginActivityManager(Context context, PluginManager pluginManager) {
-        mContext = context;
-        mPluginManager = pluginManager;
-    }
-
-    public void addActivityPlugin(String className, String action) {
-        mActionLookup.put(className, action);
-    }
-
-    public Activity instantiate(ClassLoader cl, String className, Intent intent) {
-        String action = mActionLookup.get(className);
-        if (TextUtils.isEmpty(action)) return null;
-        return mPluginManager.getOneShotPlugin(action, PluginActivity.class);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/plugins/PluginInstanceManager.java b/packages/SystemUI/src/com/android/systemui/plugins/PluginInstanceManager.java
index f663315..82c0128 100644
--- a/packages/SystemUI/src/com/android/systemui/plugins/PluginInstanceManager.java
+++ b/packages/SystemUI/src/com/android/systemui/plugins/PluginInstanceManager.java
@@ -136,11 +136,12 @@
         return disableAny;
     }
 
-    public void disableAll() {
+    public boolean disableAll() {
         ArrayList<PluginInfo> plugins = new ArrayList<>(mPluginHandler.mPlugins);
         for (int i = 0; i < plugins.size(); i++) {
             disable(plugins.get(i));
         }
+        return plugins.size() != 0;
     }
 
     private void disable(PluginInfo info) {
@@ -182,6 +183,7 @@
                     if (DEBUG) Log.d(TAG, "onPluginConnected");
                     PluginPrefs.setHasPlugins(mContext);
                     PluginInfo<T> info = (PluginInfo<T>) msg.obj;
+                    mManager.handleWtfs();
                     if (!(msg.obj instanceof PluginFragment)) {
                         // Only call onDestroy for plugins that aren't fragments, as fragments
                         // will get the onCreate as part of the fragment lifecycle.
diff --git a/packages/SystemUI/src/com/android/systemui/plugins/PluginManagerImpl.java b/packages/SystemUI/src/com/android/systemui/plugins/PluginManagerImpl.java
index a968399..03747d5 100644
--- a/packages/SystemUI/src/com/android/systemui/plugins/PluginManagerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/plugins/PluginManagerImpl.java
@@ -36,12 +36,16 @@
 import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
+import android.util.Log;
+import android.util.Log.TerribleFailure;
+import android.util.Log.TerribleFailureHandler;
 import android.widget.Toast;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
 import com.android.systemui.Dependency;
 import com.android.systemui.plugins.PluginInstanceManager.PluginContextWrapper;
+import com.android.systemui.plugins.PluginInstanceManager.PluginInfo;
 import com.android.systemui.plugins.annotations.ProvidesInterface;
 
 import dalvik.system.PathClassLoader;
@@ -70,10 +74,11 @@
     private boolean mListening;
     private boolean mHasOneShot;
     private Looper mLooper;
+    private boolean mWtfsSet;
 
     public PluginManagerImpl(Context context) {
         this(context, new PluginInstanceManagerFactory(),
-                Build.IS_DEBUGGABLE, Thread.getDefaultUncaughtExceptionHandler());
+                Build.IS_DEBUGGABLE, Thread.getUncaughtExceptionPreHandler());
     }
 
     @VisibleForTesting
@@ -87,7 +92,7 @@
 
         PluginExceptionHandler uncaughtExceptionHandler = new PluginExceptionHandler(
                 defaultHandler);
-        Thread.setDefaultUncaughtExceptionHandler(uncaughtExceptionHandler);
+        Thread.setUncaughtExceptionPreHandler(uncaughtExceptionHandler);
         if (isDebuggable) {
             new Handler(mLooper).post(() -> {
                 // Plugin dependencies that don't have another good home can go here, but
@@ -119,21 +124,14 @@
         }
         PluginInstanceManager<T> p = mFactory.createPluginInstanceManager(mContext, action, null,
                 false, mLooper, cls, this);
-        PluginListener<Plugin> listener = new PluginListener<Plugin>() {
-            @Override
-            public void onPluginConnected(Plugin plugin, Context pluginContext) { }
-        };
-        mPluginMap.put(listener, p);
         mPluginPrefs.addAction(action);
-        PluginInstanceManager.PluginInfo<T> info = p.getPlugin();
+        PluginInfo<T> info = p.getPlugin();
         if (info != null) {
             mOneShotPackages.add(info.mPackage);
             mHasOneShot = true;
             startListening();
-            mPluginMap.remove(listener);
             return info.mPlugin;
         }
-        mPluginMap.remove(listener);
         return null;
     }
 
@@ -296,6 +294,15 @@
         return false;
     }
 
+    public void handleWtfs() {
+        if (!mWtfsSet) {
+            mWtfsSet = true;
+            Log.setWtfHandler((tag, what, system) -> {
+                throw new CrashWhilePluginActiveException(what);
+            });
+        }
+    }
+
     @VisibleForTesting
     public static class PluginInstanceManagerFactory {
         public <T extends Plugin> PluginInstanceManager createPluginInstanceManager(Context context,
@@ -345,9 +352,12 @@
                 // disable all the plugins, so we can be sure that SysUI is running as
                 // best as possible.
                 for (PluginInstanceManager manager : mPluginMap.values()) {
-                    manager.disableAll();
+                    disabledAny |= manager.disableAll();
                 }
             }
+            if (disabledAny) {
+                throwable = new CrashWhilePluginActiveException(throwable);
+            }
 
             // Run the normal exception handler so we can crash and cleanup our state.
             mHandler.uncaughtException(thread, throwable);
@@ -364,4 +374,10 @@
             return disabledAny | checkStack(throwable.getCause());
         }
     }
+
+    private class CrashWhilePluginActiveException extends RuntimeException {
+        public CrashWhilePluginActiveException(Throwable throwable) {
+            super(throwable);
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
index b007f92..c29b362 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
@@ -17,6 +17,7 @@
 package com.android.systemui.power;
 
 import android.app.Notification;
+import android.app.NotificationChannel;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
@@ -40,6 +41,7 @@
 import android.util.Slog;
 
 import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
+import com.android.internal.notification.SystemNotificationChannels;
 import com.android.settingslib.Utils;
 import com.android.systemui.R;
 import com.android.systemui.SystemUI;
@@ -172,8 +174,9 @@
     private void showWarningNotification() {
         final int textRes = R.string.battery_low_percent_format;
         final String percentage = NumberFormat.getPercentInstance().format((double) mBatteryLevel / 100.0);
+
         final Notification.Builder nb =
-                new Notification.Builder(mContext, NotificationChannels.ALERTS)
+                new Notification.Builder(mContext, NotificationChannels.BATTERY)
                         .setSmallIcon(R.drawable.ic_power_low)
                         // Bump the notification when the bucket dropped.
                         .setWhen(mBucketDroppedNegativeTimeMs)
@@ -190,10 +193,8 @@
         nb.addAction(0,
                 mContext.getString(R.string.battery_saver_start_action),
                 pendingBroadcast(ACTION_START_SAVER));
-        if (mPlaySound) {
-            attachLowBatterySound(nb);
-            mPlaySound = false;
-        }
+        nb.setOnlyAlertOnce(!mPlaySound);
+        mPlaySound = false;
         SystemUI.overrideNotificationAppName(mContext, nb);
         final Notification n = nb.build();
         mNoMan.cancelAsUser(TAG_BATTERY, SystemMessage.NOTE_BAD_CHARGER, UserHandle.ALL);
@@ -334,43 +335,12 @@
     public void showLowBatteryWarning(boolean playSound) {
         Slog.i(TAG,
                 "show low battery warning: level=" + mBatteryLevel
-                + " [" + mBucket + "] playSound=" + playSound);
+                        + " [" + mBucket + "] playSound=" + playSound);
         mPlaySound = playSound;
         mWarning = true;
         updateNotification();
     }
 
-    private void attachLowBatterySound(Notification.Builder b) {
-        final ContentResolver cr = mContext.getContentResolver();
-
-        final int silenceAfter = Settings.Global.getInt(cr,
-                Settings.Global.LOW_BATTERY_SOUND_TIMEOUT, 0);
-        final long offTime = SystemClock.elapsedRealtime() - mScreenOffTime;
-        if (silenceAfter > 0
-                && mScreenOffTime > 0
-                && offTime > silenceAfter) {
-            Slog.i(TAG, "screen off too long (" + offTime + "ms, limit " + silenceAfter
-                    + "ms): not waking up the user with low battery sound");
-            return;
-        }
-
-        if (DEBUG) {
-            Slog.d(TAG, "playing low battery sound. pick-a-doop!"); // WOMP-WOMP is deprecated
-        }
-
-        if (Settings.Global.getInt(cr, Settings.Global.POWER_SOUNDS_ENABLED, 1) == 1) {
-            final String soundPath = Settings.Global.getString(cr,
-                    Settings.Global.LOW_BATTERY_SOUND);
-            if (soundPath != null) {
-                final Uri soundUri = Uri.parse("file://" + soundPath);
-                if (soundUri != null) {
-                    b.setSound(soundUri, AUDIO_ATTRIBUTES);
-                    if (DEBUG) Slog.d(TAG, "playing sound " + soundUri);
-                }
-            }
-        }
-    }
-
     @Override
     public void dismissInvalidChargerWarning() {
         dismissInvalidChargerNotification();
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
index beb7712..f378268 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
@@ -230,6 +230,7 @@
                         && (bucket < oldBucket || oldPlugged)
                         && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN
                         && bucket < 0) {
+
                     // only play SFX when the dialog comes up or the bucket changes
                     final boolean playSound = bucket != oldBucket || oldPlugged;
                     mWarnings.showLowBatteryWarning(playSound);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/AlphaControlledSignalTileView.java b/packages/SystemUI/src/com/android/systemui/qs/AlphaControlledSignalTileView.java
new file mode 100644
index 0000000..2c7ec70
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/AlphaControlledSignalTileView.java
@@ -0,0 +1,86 @@
+/*
+ * 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.qs;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.graphics.drawable.Drawable;
+import com.android.systemui.qs.tileimpl.SlashImageView;
+
+
+/**
+ * Creates AlphaControlledSlashImageView instead of SlashImageView
+ */
+public class AlphaControlledSignalTileView extends SignalTileView {
+    public AlphaControlledSignalTileView(Context context) {
+        super(context);
+    }
+
+    @Override
+    protected SlashImageView createSlashImageView(Context context) {
+        return new AlphaControlledSlashImageView(context);
+    }
+
+    /**
+     * Creates AlphaControlledSlashDrawable instead of regular SlashDrawables
+     */
+    public static class AlphaControlledSlashImageView extends SlashImageView {
+        public AlphaControlledSlashImageView(Context context) {
+            super(context);
+        }
+
+        public void setFinalImageTintList(ColorStateList tint) {
+            super.setImageTintList(tint);
+            final SlashDrawable slash = getSlash();
+            if (slash != null) {
+                ((AlphaControlledSlashDrawable)slash).setFinalTintList(tint);
+            }
+        }
+
+        @Override
+        protected void ensureSlashDrawable() {
+            if (getSlash() == null) {
+                final SlashDrawable slash = new AlphaControlledSlashDrawable(getDrawable());
+                setSlash(slash);
+                slash.setAnimationEnabled(getAnimationEnabled());
+                setImageViewDrawable(slash);
+            }
+        }
+    }
+
+    /**
+     * SlashDrawable that disobeys orders to change its drawable's tint except when you tell
+     * it not to disobey. The slash still will animate its alpha.
+     */
+    public static class AlphaControlledSlashDrawable extends SlashDrawable {
+        AlphaControlledSlashDrawable(Drawable d) {
+            super(d);
+        }
+
+        @Override
+        protected void setDrawableTintList(ColorStateList tint) {
+        }
+
+        /**
+         * Set a target tint list instead of
+         */
+        public void setFinalTintList(ColorStateList tint) {
+            super.setDrawableTintList(tint);
+        }
+    }
+}
+
diff --git a/packages/SystemUI/src/com/android/systemui/qs/CellTileView.java b/packages/SystemUI/src/com/android/systemui/qs/CellTileView.java
index 3d8f9ff..5f26093 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/CellTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/CellTileView.java
@@ -44,7 +44,10 @@
     }
 
     protected void updateIcon(ImageView iv, State state) {
-        if (!Objects.equals(state.icon, iv.getTag(R.id.qs_icon_tag))) {
+        if (!(state.icon instanceof SignalIcon)) {
+            super.updateIcon(iv, state);
+            return;
+        } else if (!Objects.equals(state.icon, iv.getTag(R.id.qs_icon_tag))) {
             mSignalDrawable.setLevel(((SignalIcon) state.icon).getState());
             iv.setImageDrawable(mSignalDrawable);
             iv.setTag(R.id.qs_icon_tag, state.icon);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
index ed57c04..33b5268 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
@@ -38,7 +38,7 @@
     protected View mHeader;
     protected float mQsExpansion;
     private QSCustomizer mQSCustomizer;
-    private QSFooter mQSFooter;
+    private View mQSFooter;
     private float mFullElevation;
 
     public QSContainerImpl(Context context, AttributeSet attrs) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
index 10514a7..8b434a5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
@@ -323,7 +323,7 @@
             post(new Runnable() {
                 @Override
                 public void run() {
-                    handleShowingDetail(detail, x, y, true /* toggleQs */);
+                    handleShowingDetail(detail, x, y, false /* toggleQs */);
                 }
             });
         }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDetailItems.java b/packages/SystemUI/src/com/android/systemui/qs/QSDetailItems.java
index f91aa9a..8869e8d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSDetailItems.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSDetailItems.java
@@ -34,6 +34,7 @@
 import android.widget.TextView;
 import com.android.systemui.FontSizeUtils;
 import com.android.systemui.R;
+import com.android.systemui.plugins.qs.QSTile;
 
 /**
  * Quick settings common detail view with line items.
@@ -184,7 +185,11 @@
             }
             view.setVisibility(mItemsVisible ? VISIBLE : INVISIBLE);
             final ImageView iv = (ImageView) view.findViewById(android.R.id.icon);
-            iv.setImageResource(item.icon);
+            if (item.iconDrawable != null) {
+                iv.setImageDrawable(item.iconDrawable.getDrawable(iv.getContext()));
+            } else {
+                iv.setImageResource(item.icon);
+            }
             iv.getOverlay().clear();
             if (item.overlay != null) {
                 item.overlay.setBounds(0, 0, mQsDetailIconOverlaySize, mQsDetailIconOverlaySize);
@@ -254,6 +259,7 @@
 
     public static class Item {
         public int icon;
+        public QSTile.Icon iconDrawable;
         public Drawable overlay;
         public CharSequence line1;
         public CharSequence line2;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
index 67c115c..3f3cea2 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015 The Android Open Source Project
+ * 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.
@@ -13,427 +13,60 @@
  * See the License for the specific language governing permissions and
  * limitations under the License
  */
-
 package com.android.systemui.qs;
 
-import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_DATE;
-
-import android.app.ActivityManager;
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.PorterDuff.Mode;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.RippleDrawable;
-import android.os.UserManager;
-import android.provider.AlarmClock;
 import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
-import android.util.AttributeSet;
 import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-import android.widget.Toast;
 
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto;
-import com.android.keyguard.KeyguardStatusView;
-import com.android.settingslib.Utils;
-import com.android.systemui.Dependency;
-import com.android.systemui.FontSizeUtils;
-import com.android.systemui.R;
-import com.android.systemui.R.dimen;
-import com.android.systemui.R.id;
-import com.android.systemui.plugins.ActivityStarter;
-import com.android.systemui.qs.TouchAnimator.Builder;
-import com.android.systemui.qs.TouchAnimator.Listener;
-import com.android.systemui.qs.TouchAnimator.ListenerAdapter;
-import com.android.systemui.statusbar.phone.ExpandableIndicator;
-import com.android.systemui.statusbar.phone.MultiUserSwitch;
-import com.android.systemui.statusbar.phone.SettingsButton;
-import com.android.systemui.statusbar.policy.DeviceProvisionedController;
-import com.android.systemui.statusbar.policy.NetworkController;
-import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
-import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
-import com.android.systemui.statusbar.policy.NextAlarmController;
-import com.android.systemui.statusbar.policy.NextAlarmController.NextAlarmChangeCallback;
-import com.android.systemui.statusbar.policy.UserInfoController;
-import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener;
-import com.android.systemui.tuner.TunerService;
+/**
+ * The bottom footer of the quick settings panel.
+ */
+public interface QSFooter {
+    /**
+     * Sets the given {@link QSPanel} to be the one that will display the quick settings.
+     */
+    void setQSPanel(@Nullable QSPanel panel);
 
-public class QSFooter extends FrameLayout implements
-        NextAlarmChangeCallback, OnClickListener, OnUserInfoChangedListener, EmergencyListener,
-        SignalCallback {
-    private static final float EXPAND_INDICATOR_THRESHOLD = .93f;
+    /**
+     * Sets whether or not the footer should be visible.
+     *
+     * @param visibility One of {@link View#VISIBLE}, {@link View#INVISIBLE} or {@link View#GONE}.
+     * @see View#setVisibility(int)
+     */
+    void setVisibility(int visibility);
 
-    private ActivityStarter mActivityStarter;
-    private NextAlarmController mNextAlarmController;
-    private UserInfoController mUserInfoController;
-    private SettingsButton mSettingsButton;
-    protected View mSettingsContainer;
+    /**
+     * Sets whether the footer is in an expanded state.
+     */
+    void setExpanded(boolean expanded);
 
-    private TextView mAlarmStatus;
-    private View mAlarmStatusCollapsed;
-    private View mDate;
+    /**
+     * Returns the full height of the footer.
+     */
+    int getHeight();
 
-    private QSPanel mQsPanel;
+    /**
+     * Sets the percentage amount that the quick settings has been expanded.
+     *
+     * @param expansion A value from 1 to 0 that indicates how much the quick settings have been
+     *                  expanded. 1 is fully expanded.
+     */
+    void setExpansion(float expansion);
 
-    private boolean mExpanded;
-    private boolean mAlarmShowing;
+    /**
+     * Sets whether or not this footer should set itself to listen for changes in any callbacks
+     * that it has implemented.
+     */
+    void setListening(boolean listening);
 
-    protected ExpandableIndicator mExpandIndicator;
+    /**
+     * Sets whether or not the keyguard is currently being shown.
+     */
+    void setKeyguardShowing(boolean keyguardShowing);
 
-    private boolean mListening;
-    private AlarmManager.AlarmClockInfo mNextAlarm;
-
-    private boolean mShowEmergencyCallsOnly;
-    protected MultiUserSwitch mMultiUserSwitch;
-    private ImageView mMultiUserAvatar;
-    private boolean mAlwaysShowMultiUserSwitch;
-
-    protected TouchAnimator mSettingsAlpha;
-    private float mExpansionAmount;
-
-    protected View mEdit;
-    private boolean mShowEditIcon;
-    private TouchAnimator mAnimator;
-    private View mDateTimeGroup;
-    private boolean mKeyguardShowing;
-    private TouchAnimator mAlarmAnimator;
-
-    public QSFooter(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        Resources res = getResources();
-
-        mShowEditIcon = res.getBoolean(R.bool.config_showQuickSettingsEditingIcon);
-
-        mEdit = findViewById(android.R.id.edit);
-        mEdit.setVisibility(mShowEditIcon ? VISIBLE : GONE);
-
-        if (mShowEditIcon) {
-            findViewById(android.R.id.edit).setOnClickListener(view ->
-                    Dependency.get(ActivityStarter.class).postQSRunnableDismissingKeyguard(() ->
-                            mQsPanel.showEdit(view)));
-        }
-
-        mDateTimeGroup = findViewById(id.date_time_alarm_group);
-        mDate = findViewById(R.id.date);
-
-        mExpandIndicator = findViewById(R.id.expand_indicator);
-        mExpandIndicator.setVisibility(
-                res.getBoolean(R.bool.config_showQuickSettingsExpandIndicator)
-                        ? VISIBLE : GONE);
-
-        mSettingsButton = findViewById(R.id.settings_button);
-        mSettingsContainer = findViewById(R.id.settings_button_container);
-        mSettingsButton.setOnClickListener(this);
-
-        mAlarmStatusCollapsed = findViewById(R.id.alarm_status_collapsed);
-        mAlarmStatus = findViewById(R.id.alarm_status);
-        mDateTimeGroup.setOnClickListener(this);
-
-        mMultiUserSwitch = findViewById(R.id.multi_user_switch);
-        mMultiUserAvatar = mMultiUserSwitch.findViewById(R.id.multi_user_avatar);
-        mAlwaysShowMultiUserSwitch = res.getBoolean(R.bool.config_alwaysShowMultiUserSwitcher);
-
-        // RenderThread is doing more harm than good when touching the header (to expand quick
-        // settings), so disable it for this view
-        ((RippleDrawable) mSettingsButton.getBackground()).setForceSoftware(true);
-        ((RippleDrawable) mExpandIndicator.getBackground()).setForceSoftware(true);
-
-        updateResources();
-
-        mNextAlarmController = Dependency.get(NextAlarmController.class);
-        mUserInfoController = Dependency.get(UserInfoController.class);
-        mActivityStarter = Dependency.get(ActivityStarter.class);
-        addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight,
-                oldBottom) -> updateAnimator(right - left));
-    }
-
-    private void updateAnimator(int width) {
-        int numTiles = QuickQSPanel.getNumQuickTiles(mContext);
-        int size = mContext.getResources().getDimensionPixelSize(R.dimen.qs_quick_tile_size)
-                - mContext.getResources().getDimensionPixelSize(dimen.qs_quick_tile_padding);
-        int remaining = (width - numTiles * size) / (numTiles - 1);
-        int defSpace = mContext.getResources().getDimensionPixelOffset(R.dimen.default_gear_space);
-
-        mAnimator = new Builder()
-                .addFloat(mSettingsContainer, "translationX", -(remaining - defSpace), 0)
-                .addFloat(mSettingsButton, "rotation", -120, 0)
-                .build();
-        if (mAlarmShowing) {
-            int translate = isLayoutRtl() ? mDate.getWidth() : -mDate.getWidth();
-            mAlarmAnimator = new Builder().addFloat(mDate, "alpha", 1, 0)
-                    .addFloat(mDateTimeGroup, "translationX", 0, translate)
-                    .addFloat(mAlarmStatus, "alpha", 0, 1)
-                    .setListener(new ListenerAdapter() {
-                        @Override
-                        public void onAnimationAtStart() {
-                            mAlarmStatus.setVisibility(View.GONE);
-                        }
-
-                        @Override
-                        public void onAnimationStarted() {
-                            mAlarmStatus.setVisibility(View.VISIBLE);
-                        }
-                    }).build();
-        } else {
-            mAlarmAnimator = null;
-            mAlarmStatus.setVisibility(View.GONE);
-            mDate.setAlpha(1);
-            mDateTimeGroup.setTranslationX(0);
-        }
-        setExpansion(mExpansionAmount);
-    }
-
-    @Override
-    protected void onConfigurationChanged(Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-        updateResources();
-    }
-
-    @Override
-    public void onRtlPropertiesChanged(int layoutDirection) {
-        super.onRtlPropertiesChanged(layoutDirection);
-        updateResources();
-    }
-
-    private void updateResources() {
-        FontSizeUtils.updateFontSize(mAlarmStatus, R.dimen.qs_date_collapsed_size);
-
-        updateSettingsAnimator();
-    }
-
-    private void updateSettingsAnimator() {
-        mSettingsAlpha = createSettingsAlphaAnimator();
-
-        final boolean isRtl = isLayoutRtl();
-        if (isRtl && mDate.getWidth() == 0) {
-            mDate.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) {
-                    mDate.setPivotX(getWidth());
-                    mDate.removeOnLayoutChangeListener(this);
-                }
-            });
-        } else {
-            mDate.setPivotX(isRtl ? mDate.getWidth() : 0);
-        }
-    }
-
+    /**
+     * Returns the {@link View} that should expand the quick settings when clicked.
+     */
     @Nullable
-    private TouchAnimator createSettingsAlphaAnimator() {
-        // If the settings icon is not shown and the user switcher is always shown, then there
-        // is nothing to animate.
-        if (!mShowEditIcon && mAlwaysShowMultiUserSwitch) {
-            return null;
-        }
-
-        TouchAnimator.Builder animatorBuilder = new TouchAnimator.Builder();
-        animatorBuilder.setStartDelay(QSAnimator.EXPANDED_TILE_DELAY);
-
-        if (mShowEditIcon) {
-            animatorBuilder.addFloat(mEdit, "alpha", 0, 1);
-        }
-
-        if (!mAlwaysShowMultiUserSwitch) {
-            animatorBuilder.addFloat(mMultiUserSwitch, "alpha", 0, 1);
-        }
-
-        return animatorBuilder.build();
-    }
-
-    public void setKeyguardShowing(boolean keyguardShowing) {
-        mKeyguardShowing = keyguardShowing;
-        setExpansion(mExpansionAmount);
-    }
-
-    public void setExpanded(boolean expanded) {
-        if (mExpanded == expanded) return;
-        mExpanded = expanded;
-        updateEverything();
-    }
-
-    @Override
-    public void onNextAlarmChanged(AlarmManager.AlarmClockInfo nextAlarm) {
-        mNextAlarm = nextAlarm;
-        if (nextAlarm != null) {
-            String alarmString = KeyguardStatusView.formatNextAlarm(getContext(), nextAlarm);
-            mAlarmStatus.setText(alarmString);
-            mAlarmStatus.setContentDescription(mContext.getString(
-                    R.string.accessibility_quick_settings_alarm, alarmString));
-            mAlarmStatusCollapsed.setContentDescription(mContext.getString(
-                    R.string.accessibility_quick_settings_alarm, alarmString));
-        }
-        if (mAlarmShowing != (nextAlarm != null)) {
-            mAlarmShowing = nextAlarm != null;
-            updateAnimator(getWidth());
-            updateEverything();
-        }
-    }
-
-    public void setExpansion(float headerExpansionFraction) {
-        mExpansionAmount = headerExpansionFraction;
-        if (mAnimator != null) mAnimator.setPosition(headerExpansionFraction);
-        if (mAlarmAnimator != null) mAlarmAnimator.setPosition(
-                mKeyguardShowing ? 0 : headerExpansionFraction);
-
-        if (mSettingsAlpha != null) {
-            mSettingsAlpha.setPosition(headerExpansionFraction);
-        }
-
-        updateAlarmVisibilities();
-
-        mExpandIndicator.setExpanded(headerExpansionFraction > EXPAND_INDICATOR_THRESHOLD);
-    }
-
-    @Override
-    @VisibleForTesting
-    public void onDetachedFromWindow() {
-        setListening(false);
-        super.onDetachedFromWindow();
-    }
-
-    private void updateAlarmVisibilities() {
-        mAlarmStatusCollapsed.setVisibility(mAlarmShowing ? View.VISIBLE : View.GONE);
-    }
-
-    public void setListening(boolean listening) {
-        if (listening == mListening) {
-            return;
-        }
-        mListening = listening;
-        updateListeners();
-    }
-
-    public View getExpandView() {
-        return findViewById(R.id.expand_indicator);
-    }
-
-    public void updateEverything() {
-        post(() -> {
-            updateVisibilities();
-            setClickable(false);
-        });
-    }
-
-    private void updateVisibilities() {
-        updateAlarmVisibilities();
-        mSettingsContainer.findViewById(R.id.tuner_icon).setVisibility(
-                TunerService.isTunerEnabled(mContext) ? View.VISIBLE : View.INVISIBLE);
-        final boolean isDemo = UserManager.isDeviceInDemoMode(mContext);
-
-        mMultiUserSwitch.setVisibility((mExpanded || mAlwaysShowMultiUserSwitch)
-                && mMultiUserSwitch.hasMultipleUsers() && !isDemo
-                ? View.VISIBLE : View.INVISIBLE);
-
-        if (mShowEditIcon) {
-            mEdit.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE);
-        }
-    }
-
-    private void updateListeners() {
-        if (mListening) {
-            mNextAlarmController.addCallback(this);
-            mUserInfoController.addCallback(this);
-            if (Dependency.get(NetworkController.class).hasVoiceCallingFeature()) {
-                Dependency.get(NetworkController.class).addEmergencyListener(this);
-                Dependency.get(NetworkController.class).addCallback(this);
-            }
-        } else {
-            mNextAlarmController.removeCallback(this);
-            mUserInfoController.removeCallback(this);
-            Dependency.get(NetworkController.class).removeEmergencyListener(this);
-            Dependency.get(NetworkController.class).removeCallback(this);
-        }
-    }
-
-    public void setQSPanel(final QSPanel qsPanel) {
-        mQsPanel = qsPanel;
-        if (mQsPanel != null) {
-            mMultiUserSwitch.setQsPanel(qsPanel);
-        }
-    }
-
-    @Override
-    public void onClick(View v) {
-        if (v == mSettingsButton) {
-            if (!Dependency.get(DeviceProvisionedController.class).isCurrentUserSetup()) {
-                // If user isn't setup just unlock the device and dump them back at SUW.
-                mActivityStarter.postQSRunnableDismissingKeyguard(() -> { });
-                return;
-            }
-            MetricsLogger.action(mContext,
-                    mExpanded ? MetricsProto.MetricsEvent.ACTION_QS_EXPANDED_SETTINGS_LAUNCH
-                            : MetricsProto.MetricsEvent.ACTION_QS_COLLAPSED_SETTINGS_LAUNCH);
-            if (mSettingsButton.isTunerClick()) {
-                Dependency.get(ActivityStarter.class).postQSRunnableDismissingKeyguard(() -> {
-                    if (TunerService.isTunerEnabled(mContext)) {
-                        TunerService.showResetRequest(mContext, () -> {
-                            // Relaunch settings so that the tuner disappears.
-                            startSettingsActivity();
-                        });
-                    } else {
-                        Toast.makeText(getContext(), R.string.tuner_toast,
-                                Toast.LENGTH_LONG).show();
-                        TunerService.setTunerEnabled(mContext, true);
-                    }
-                    startSettingsActivity();
-
-                });
-            } else {
-                startSettingsActivity();
-            }
-        } else if (v == mDateTimeGroup) {
-            Dependency.get(MetricsLogger.class).action(ACTION_QS_DATE,
-                    mNextAlarm != null);
-            if (mNextAlarm != null) {
-                PendingIntent showIntent = mNextAlarm.getShowIntent();
-                mActivityStarter.startPendingIntentDismissingKeyguard(showIntent);
-            } else {
-                mActivityStarter.postStartActivityDismissingKeyguard(new Intent(
-                        AlarmClock.ACTION_SHOW_ALARMS), 0);
-            }
-        }
-    }
-
-    private void startSettingsActivity() {
-        mActivityStarter.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS),
-                true /* dismissShade */);
-    }
-
-    @Override
-    public void setEmergencyCallsOnly(boolean show) {
-        boolean changed = show != mShowEmergencyCallsOnly;
-        if (changed) {
-            mShowEmergencyCallsOnly = show;
-            if (mExpanded) {
-                updateEverything();
-            }
-        }
-    }
-
-    @Override
-    public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
-        if (picture != null &&
-                UserManager.get(mContext).isGuestUser(ActivityManager.getCurrentUser())) {
-            picture = picture.getConstantState().newDrawable().mutate();
-            picture.setColorFilter(
-                    Utils.getColorAttr(mContext, android.R.attr.colorForeground),
-                    Mode.SRC_IN);
-        }
-        mMultiUserAvatar.setImageDrawable(picture);
-    }
+    View getExpandView();
 }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java
new file mode 100644
index 0000000..9eb29f8
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java
@@ -0,0 +1,415 @@
+/*
+ * 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.qs;
+
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_DATE;
+
+import android.app.ActivityManager;
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.RippleDrawable;
+import android.os.UserManager;
+import android.provider.AlarmClock;
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.keyguard.KeyguardStatusView;
+import com.android.settingslib.Utils;
+import com.android.systemui.Dependency;
+import com.android.systemui.FontSizeUtils;
+import com.android.systemui.R;
+import com.android.systemui.R.dimen;
+import com.android.systemui.R.id;
+import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.qs.TouchAnimator.Builder;
+import com.android.systemui.qs.TouchAnimator.Listener;
+import com.android.systemui.qs.TouchAnimator.ListenerAdapter;
+import com.android.systemui.statusbar.phone.ExpandableIndicator;
+import com.android.systemui.statusbar.phone.MultiUserSwitch;
+import com.android.systemui.statusbar.phone.SettingsButton;
+import com.android.systemui.statusbar.policy.DeviceProvisionedController;
+import com.android.systemui.statusbar.policy.NetworkController;
+import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
+import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
+import com.android.systemui.statusbar.policy.NextAlarmController;
+import com.android.systemui.statusbar.policy.NextAlarmController.NextAlarmChangeCallback;
+import com.android.systemui.statusbar.policy.UserInfoController;
+import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener;
+import com.android.systemui.tuner.TunerService;
+
+public class QSFooterImpl extends FrameLayout implements QSFooter,
+        NextAlarmChangeCallback, OnClickListener, OnUserInfoChangedListener, EmergencyListener,
+        SignalCallback {
+    private static final float EXPAND_INDICATOR_THRESHOLD = .93f;
+
+    private ActivityStarter mActivityStarter;
+    private NextAlarmController mNextAlarmController;
+    private UserInfoController mUserInfoController;
+    private SettingsButton mSettingsButton;
+    protected View mSettingsContainer;
+
+    private TextView mAlarmStatus;
+    private View mAlarmStatusCollapsed;
+    private View mDate;
+
+    private QSPanel mQsPanel;
+
+    private boolean mExpanded;
+    private boolean mAlarmShowing;
+
+    protected ExpandableIndicator mExpandIndicator;
+
+    private boolean mListening;
+    private AlarmManager.AlarmClockInfo mNextAlarm;
+
+    private boolean mShowEmergencyCallsOnly;
+    protected MultiUserSwitch mMultiUserSwitch;
+    private ImageView mMultiUserAvatar;
+
+    protected TouchAnimator mSettingsAlpha;
+    private float mExpansionAmount;
+
+    protected View mEdit;
+    private TouchAnimator mAnimator;
+    private View mDateTimeGroup;
+    private boolean mKeyguardShowing;
+    private TouchAnimator mAlarmAnimator;
+
+    public QSFooterImpl(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        Resources res = getResources();
+
+        mEdit = findViewById(android.R.id.edit);
+        mEdit.setOnClickListener(view ->
+                Dependency.get(ActivityStarter.class).postQSRunnableDismissingKeyguard(() ->
+                        mQsPanel.showEdit(view)));
+
+        mDateTimeGroup = findViewById(id.date_time_alarm_group);
+        mDate = findViewById(R.id.date);
+
+        mExpandIndicator = findViewById(R.id.expand_indicator);
+        mSettingsButton = findViewById(R.id.settings_button);
+        mSettingsContainer = findViewById(R.id.settings_button_container);
+        mSettingsButton.setOnClickListener(this);
+
+        mAlarmStatusCollapsed = findViewById(R.id.alarm_status_collapsed);
+        mAlarmStatus = findViewById(R.id.alarm_status);
+        mDateTimeGroup.setOnClickListener(this);
+
+        mMultiUserSwitch = findViewById(R.id.multi_user_switch);
+        mMultiUserAvatar = mMultiUserSwitch.findViewById(R.id.multi_user_avatar);
+
+        // RenderThread is doing more harm than good when touching the header (to expand quick
+        // settings), so disable it for this view
+        ((RippleDrawable) mSettingsButton.getBackground()).setForceSoftware(true);
+        ((RippleDrawable) mExpandIndicator.getBackground()).setForceSoftware(true);
+
+        updateResources();
+
+        mNextAlarmController = Dependency.get(NextAlarmController.class);
+        mUserInfoController = Dependency.get(UserInfoController.class);
+        mActivityStarter = Dependency.get(ActivityStarter.class);
+        addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight,
+                oldBottom) -> updateAnimator(right - left));
+    }
+
+    private void updateAnimator(int width) {
+        int numTiles = QuickQSPanel.getNumQuickTiles(mContext);
+        int size = mContext.getResources().getDimensionPixelSize(R.dimen.qs_quick_tile_size)
+                - mContext.getResources().getDimensionPixelSize(dimen.qs_quick_tile_padding);
+        int remaining = (width - numTiles * size) / (numTiles - 1);
+        int defSpace = mContext.getResources().getDimensionPixelOffset(R.dimen.default_gear_space);
+
+        mAnimator = new Builder()
+                .addFloat(mSettingsContainer, "translationX", -(remaining - defSpace), 0)
+                .addFloat(mSettingsButton, "rotation", -120, 0)
+                .build();
+        if (mAlarmShowing) {
+            int translate = isLayoutRtl() ? mDate.getWidth() : -mDate.getWidth();            
+            mAlarmAnimator = new Builder().addFloat(mDate, "alpha", 1, 0)
+                    .addFloat(mDateTimeGroup, "translationX", 0, translate)
+                    .addFloat(mAlarmStatus, "alpha", 0, 1)
+                    .setListener(new ListenerAdapter() {
+                        @Override
+                        public void onAnimationAtStart() {
+                            mAlarmStatus.setVisibility(View.GONE);
+                        }
+
+                        @Override
+                        public void onAnimationStarted() {
+                            mAlarmStatus.setVisibility(View.VISIBLE);
+                        }
+                    }).build();
+        } else {
+            mAlarmAnimator = null;
+            mAlarmStatus.setVisibility(View.GONE);
+            mDate.setAlpha(1);
+            mDateTimeGroup.setTranslationX(0);
+        }
+        setExpansion(mExpansionAmount);
+    }
+
+    @Override
+    protected void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        updateResources();
+    }
+
+    @Override
+    public void onRtlPropertiesChanged(int layoutDirection) {
+        super.onRtlPropertiesChanged(layoutDirection);
+        updateResources();
+    }
+
+    private void updateResources() {
+        FontSizeUtils.updateFontSize(mAlarmStatus, R.dimen.qs_date_collapsed_size);
+
+        updateSettingsAnimator();
+    }
+
+    private void updateSettingsAnimator() {
+        mSettingsAlpha = createSettingsAlphaAnimator();
+
+        final boolean isRtl = isLayoutRtl();
+        if (isRtl && mDate.getWidth() == 0) {
+            mDate.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) {
+                    mDate.setPivotX(getWidth());
+                    mDate.removeOnLayoutChangeListener(this);
+                }
+            });
+        } else {
+            mDate.setPivotX(isRtl ? mDate.getWidth() : 0);
+        }
+    }
+
+    @Nullable
+    private TouchAnimator createSettingsAlphaAnimator() {
+        return new TouchAnimator.Builder()
+                .addFloat(mEdit, "alpha", 0, 1)
+                .addFloat(mMultiUserSwitch, "alpha", 0, 1)
+                .build();
+    }
+
+    @Override
+    public void setKeyguardShowing(boolean keyguardShowing) {
+        mKeyguardShowing = keyguardShowing;
+        setExpansion(mExpansionAmount);
+    }
+
+    @Override
+    public void setExpanded(boolean expanded) {
+        if (mExpanded == expanded) return;
+        mExpanded = expanded;
+        updateEverything();
+    }
+
+    @Override
+    public void onNextAlarmChanged(AlarmManager.AlarmClockInfo nextAlarm) {
+        mNextAlarm = nextAlarm;
+        if (nextAlarm != null) {
+            String alarmString = KeyguardStatusView.formatNextAlarm(getContext(), nextAlarm);
+            mAlarmStatus.setText(alarmString);
+            mAlarmStatus.setContentDescription(mContext.getString(
+                    R.string.accessibility_quick_settings_alarm, alarmString));
+            mAlarmStatusCollapsed.setContentDescription(mContext.getString(
+                    R.string.accessibility_quick_settings_alarm, alarmString));
+        }
+        if (mAlarmShowing != (nextAlarm != null)) {
+            mAlarmShowing = nextAlarm != null;
+            updateAnimator(getWidth());
+            updateEverything();
+        }
+    }
+
+    @Override
+    public void setExpansion(float headerExpansionFraction) {
+        mExpansionAmount = headerExpansionFraction;
+        if (mAnimator != null) mAnimator.setPosition(headerExpansionFraction);
+        if (mAlarmAnimator != null) mAlarmAnimator.setPosition(
+                mKeyguardShowing ? 0 : headerExpansionFraction);
+
+        if (mSettingsAlpha != null) {
+            mSettingsAlpha.setPosition(headerExpansionFraction);
+        }
+
+        updateAlarmVisibilities();
+
+        mExpandIndicator.setExpanded(headerExpansionFraction > EXPAND_INDICATOR_THRESHOLD);
+    }
+
+    @Override
+    @VisibleForTesting
+    public void onDetachedFromWindow() {
+        setListening(false);
+        super.onDetachedFromWindow();
+    }
+
+    private void updateAlarmVisibilities() {
+        mAlarmStatusCollapsed.setVisibility(mAlarmShowing ? View.VISIBLE : View.GONE);
+    }
+
+    @Override
+    public void setListening(boolean listening) {
+        if (listening == mListening) {
+            return;
+        }
+        mListening = listening;
+        updateListeners();
+    }
+
+    @Override
+    public View getExpandView() {
+        return findViewById(R.id.expand_indicator);
+    }
+
+    public void updateEverything() {
+        post(() -> {
+            updateVisibilities();
+            setClickable(false);
+        });
+    }
+
+    private void updateVisibilities() {
+        updateAlarmVisibilities();
+        mSettingsContainer.findViewById(R.id.tuner_icon).setVisibility(
+                TunerService.isTunerEnabled(mContext) ? View.VISIBLE : View.INVISIBLE);
+        final boolean isDemo = UserManager.isDeviceInDemoMode(mContext);
+
+        mMultiUserSwitch.setVisibility(mExpanded && mMultiUserSwitch.hasMultipleUsers() && !isDemo
+                ? View.VISIBLE : View.INVISIBLE);
+
+        mEdit.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE);
+    }
+
+    private void updateListeners() {
+        if (mListening) {
+            mNextAlarmController.addCallback(this);
+            mUserInfoController.addCallback(this);
+            if (Dependency.get(NetworkController.class).hasVoiceCallingFeature()) {
+                Dependency.get(NetworkController.class).addEmergencyListener(this);
+                Dependency.get(NetworkController.class).addCallback(this);
+            }
+        } else {
+            mNextAlarmController.removeCallback(this);
+            mUserInfoController.removeCallback(this);
+            Dependency.get(NetworkController.class).removeEmergencyListener(this);
+            Dependency.get(NetworkController.class).removeCallback(this);
+        }
+    }
+
+    @Override
+    public void setQSPanel(final QSPanel qsPanel) {
+        mQsPanel = qsPanel;
+        if (mQsPanel != null) {
+            mMultiUserSwitch.setQsPanel(qsPanel);
+        }
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v == mSettingsButton) {
+            if (!Dependency.get(DeviceProvisionedController.class).isCurrentUserSetup()) {
+                // If user isn't setup just unlock the device and dump them back at SUW.
+                mActivityStarter.postQSRunnableDismissingKeyguard(() -> { });
+                return;
+            }
+            MetricsLogger.action(mContext,
+                    mExpanded ? MetricsProto.MetricsEvent.ACTION_QS_EXPANDED_SETTINGS_LAUNCH
+                            : MetricsProto.MetricsEvent.ACTION_QS_COLLAPSED_SETTINGS_LAUNCH);
+            if (mSettingsButton.isTunerClick()) {
+                Dependency.get(ActivityStarter.class).postQSRunnableDismissingKeyguard(() -> {
+                    if (TunerService.isTunerEnabled(mContext)) {
+                        TunerService.showResetRequest(mContext, () -> {
+                            // Relaunch settings so that the tuner disappears.
+                            startSettingsActivity();
+                        });
+                    } else {
+                        Toast.makeText(getContext(), R.string.tuner_toast,
+                                Toast.LENGTH_LONG).show();
+                        TunerService.setTunerEnabled(mContext, true);
+                    }
+                    startSettingsActivity();
+
+                });
+            } else {
+                startSettingsActivity();
+            }
+        } else if (v == mDateTimeGroup) {
+            Dependency.get(MetricsLogger.class).action(ACTION_QS_DATE,
+                    mNextAlarm != null);
+            if (mNextAlarm != null) {
+                PendingIntent showIntent = mNextAlarm.getShowIntent();
+                mActivityStarter.startPendingIntentDismissingKeyguard(showIntent);
+            } else {
+                mActivityStarter.postStartActivityDismissingKeyguard(new Intent(
+                        AlarmClock.ACTION_SHOW_ALARMS), 0);
+            }
+        }
+    }
+
+    private void startSettingsActivity() {
+        mActivityStarter.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS),
+                true /* dismissShade */);
+    }
+
+    @Override
+    public void setEmergencyCallsOnly(boolean show) {
+        boolean changed = show != mShowEmergencyCallsOnly;
+        if (changed) {
+            mShowEmergencyCallsOnly = show;
+            if (mExpanded) {
+                updateEverything();
+            }
+        }
+    }
+
+    @Override
+    public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
+        if (picture != null &&
+                UserManager.get(mContext).isGuestUser(ActivityManager.getCurrentUser())) {
+            picture = picture.getConstantState().newDrawable().mutate();
+            picture.setColorFilter(
+                    Utils.getColorAttr(mContext, android.R.attr.colorForeground),
+                    Mode.SRC_IN);
+        }
+        mMultiUserAvatar.setImageDrawable(picture);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
index dc81772..4a91ee0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
@@ -16,11 +16,11 @@
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
-import android.annotation.Nullable;
 import android.app.Fragment;
 import android.content.res.Configuration;
 import android.graphics.Rect;
 import android.os.Bundle;
+import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
 import android.util.Log;
 import android.view.ContextThemeWrapper;
@@ -80,14 +80,9 @@
         mFooter = view.findViewById(R.id.qs_footer);
         mContainer = view.findViewById(id.quick_settings_container);
 
-        mQSDetail.setQsPanel(mQSPanel, mHeader, mFooter);
-
-        // If the quick settings row is not shown, then there is no need for the animation from
-        // the row to the full QS panel.
-        if (getResources().getBoolean(R.bool.config_showQuickSettingsRow)) {
-            mQSAnimator = new QSAnimator(this,
-                    mHeader.findViewById(R.id.quick_qs_panel), mQSPanel);
-        }
+        mQSDetail.setQsPanel(mQSPanel, mHeader, (View) mFooter);
+        mQSAnimator = new QSAnimator(this,
+                mHeader.findViewById(R.id.quick_qs_panel), mQSPanel);
 
         mQSCustomizer = view.findViewById(R.id.qs_customize);
         mQSCustomizer.setQs(this);
@@ -139,6 +134,7 @@
     public void setHasNotifications(boolean hasNotifications) {
     }
 
+    @Override
     public void setPanelView(HeightListener panelView) {
         mPanelView = panelView;
     }
@@ -162,6 +158,7 @@
         }
     }
 
+    @Override
     public boolean isCustomizing() {
         return mQSCustomizer.isCustomizing();
     }
@@ -203,15 +200,22 @@
         return mQSCustomizer;
     }
 
+    @Override
     public boolean isShowingDetail() {
         return mQSPanel.isShowingCustomize() || mQSDetail.isShowingDetail();
     }
 
+    @Override
     public void setHeaderClickable(boolean clickable) {
         if (DEBUG) Log.d(TAG, "setHeaderClickable " + clickable);
-        mFooter.getExpandView().setClickable(clickable);
+
+        View expandView = mFooter.getExpandView();
+        if (expandView != null) {
+            expandView.setClickable(clickable);
+        }
     }
 
+    @Override
     public void setExpanded(boolean expanded) {
         if (DEBUG) Log.d(TAG, "setExpanded " + expanded);
         mQsExpanded = expanded;
@@ -219,6 +223,7 @@
         updateQsState();
     }
 
+    @Override
     public void setKeyguardShowing(boolean keyguardShowing) {
         if (DEBUG) Log.d(TAG, "setKeyguardShowing " + keyguardShowing);
         mKeyguardShowing = keyguardShowing;
@@ -231,12 +236,14 @@
         updateQsState();
     }
 
+    @Override
     public void setOverscrolling(boolean stackScrollerOverscrolling) {
         if (DEBUG) Log.d(TAG, "setOverscrolling " + stackScrollerOverscrolling);
         mStackScrollerOverscrolling = stackScrollerOverscrolling;
         updateQsState();
     }
 
+    @Override
     public void setListening(boolean listening) {
         if (DEBUG) Log.d(TAG, "setListening " + listening);
         mListening = listening;
@@ -245,11 +252,13 @@
         mQSPanel.setListening(mListening && mQsExpanded);
     }
 
+    @Override
     public void setHeaderListening(boolean listening) {
         mHeader.setListening(listening);
         mFooter.setListening(listening);
     }
 
+    @Override
     public void setQsExpansion(float expansion, float headerTranslation) {
         if (DEBUG) Log.d(TAG, "setQSExpansion " + expansion + " " + headerTranslation);
         mContainer.setExpansion(expansion);
@@ -277,6 +286,7 @@
         mQSPanel.setClipBounds(mQsBounds);
     }
 
+    @Override
     public void animateHeaderSlidingIn(long delay) {
         if (DEBUG) Log.d(TAG, "animateHeaderSlidingIn");
         // If the QS is already expanded we don't need to slide in the header as it's already
@@ -288,6 +298,7 @@
         }
     }
 
+    @Override
     public void animateHeaderSlidingOut() {
         if (DEBUG) Log.d(TAG, "animateHeaderSlidingOut");
         mHeaderAnimating = true;
@@ -308,7 +319,11 @@
 
     @Override
     public void setExpandClickListener(OnClickListener onClickListener) {
-        mFooter.getExpandView().setOnClickListener(onClickListener);
+        View expandView = mFooter.getExpandView();
+
+        if (expandView != null) {
+            expandView.setOnClickListener(onClickListener);
+        }
     }
 
     @Override
@@ -331,6 +346,7 @@
      * The height this view wants to be. This is different from {@link #getMeasuredHeight} such that
      * during closing the detail panel, this already returns the smaller height.
      */
+    @Override
     public int getDesiredHeight() {
         if (mQSCustomizer.isCustomizing()) {
             return getView().getHeight();
@@ -350,6 +366,7 @@
         mContainer.setHeightOverride(desiredHeight);
     }
 
+    @Override
     public int getQsMinExpansionHeight() {
         return mHeader.getHeight();
     }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java
index 3ce1465c..a48bcbd 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java
@@ -310,17 +310,53 @@
             vpnWarning.setMovementMethod(new LinkMovementMethod());
         }
 
+        // Note: if a new section is added, should update configSubtitleVisibility to include
+        // the handling of the subtitle
+        configSubtitleVisibility(managementMessage != null,
+                caCertsMessage != null,
+                networkLoggingMessage != null,
+                vpnMessage != null,
+                dialogView);
+
         mDialog.show();
         mDialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,
                 ViewGroup.LayoutParams.WRAP_CONTENT);
     }
 
+    protected void configSubtitleVisibility(boolean showDeviceManagement, boolean showCaCerts,
+            boolean showNetworkLogging, boolean showVpn, View dialogView) {
+        // Device Management title should always been shown
+        // When there is a Device Management message, all subtitles should be shown
+        if (showDeviceManagement) {
+            return;
+        }
+        // Hide the subtitle if there is only 1 message shown
+        int mSectionCountExcludingDeviceMgt = 0;
+        if (showCaCerts) { mSectionCountExcludingDeviceMgt++; }
+        if (showNetworkLogging) { mSectionCountExcludingDeviceMgt++; }
+        if (showVpn) { mSectionCountExcludingDeviceMgt++; }
+
+        // No work needed if there is no sections or more than 1 section
+        if (mSectionCountExcludingDeviceMgt != 1) {
+            return;
+        }
+        if (showCaCerts) {
+            dialogView.findViewById(R.id.ca_certs_subtitle).setVisibility(View.GONE);
+        }
+        if (showNetworkLogging) {
+            dialogView.findViewById(R.id.network_logging_subtitle).setVisibility(View.GONE);
+        }
+        if (showVpn) {
+            dialogView.findViewById(R.id.vpn_subtitle).setVisibility(View.GONE);
+        }
+    }
+
     private String getSettingsButton() {
         return mContext.getString(R.string.monitoring_button_view_policies);
     }
 
     private String getPositiveButton() {
-        return mContext.getString(R.string.quick_settings_done);
+        return mContext.getString(R.string.ok);
     }
 
     protected CharSequence getManagementMessage(boolean isDeviceManaged,
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
index 7ec0760..0709e22 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
@@ -58,8 +58,6 @@
         Resources res = getResources();
 
         mHeaderQsPanel = findViewById(R.id.quick_qs_panel);
-        mHeaderQsPanel.setVisibility(res.getBoolean(R.bool.config_showQuickSettingsRow)
-                ? VISIBLE : GONE);
 
         // RenderThread is doing more harm than good when touching the header (to expand quick
         // settings), so disable it for this view
diff --git a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
index b300e4a..9ee40cc 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
@@ -63,13 +63,17 @@
     @Override
     protected View createIcon() {
         mIconFrame = new FrameLayout(mContext);
-        mSignal = new SlashImageView(mContext);
+        mSignal = createSlashImageView(mContext);
         mIconFrame.addView(mSignal);
         mOverlay = new ImageView(mContext);
         mIconFrame.addView(mOverlay, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
         return mIconFrame;
     }
 
+    protected SlashImageView createSlashImageView(Context context) {
+        return new SlashImageView(context);
+    }
+
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/SlashDrawable.java b/packages/SystemUI/src/com/android/systemui/qs/SlashDrawable.java
index c356148..a9b2376 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/SlashDrawable.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/SlashDrawable.java
@@ -197,11 +197,15 @@
     public void setTintList(@Nullable ColorStateList tint) {
         mTintList = tint;
         super.setTintList(tint);
-        mDrawable.setTintList(tint);
+        setDrawableTintList(tint);
         mPaint.setColor(tint.getDefaultColor());
         invalidateSelf();
     }
 
+    protected void setDrawableTintList(@Nullable ColorStateList tint) {
+        mDrawable.setTintList(tint);
+    }
+
     @Override
     public void setTintMode(@NonNull Mode tintMode) {
         mTintMode = tintMode;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/car/CarQSFooter.java b/packages/SystemUI/src/com/android/systemui/qs/car/CarQSFooter.java
new file mode 100644
index 0000000..142aab2
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/car/CarQSFooter.java
@@ -0,0 +1,139 @@
+/*
+ * 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.qs.car;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.android.systemui.Dependency;
+import com.android.systemui.R;
+import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.qs.QSFooter;
+import com.android.systemui.qs.QSPanel;
+import com.android.systemui.statusbar.car.UserGridView;
+import com.android.systemui.statusbar.phone.MultiUserSwitch;
+import com.android.systemui.statusbar.policy.DeviceProvisionedController;
+import com.android.systemui.statusbar.policy.UserInfoController;
+
+/**
+ * The footer view that displays below the status bar in the auto use-case. This view shows the
+ * user switcher and access to settings.
+ */
+public class CarQSFooter extends RelativeLayout implements QSFooter,
+        UserInfoController.OnUserInfoChangedListener {
+    private static final String TAG = "CarQSFooter";
+
+    private UserInfoController mUserInfoController;
+
+    private MultiUserSwitch mMultiUserSwitch;
+    private TextView mUserName;
+    private ImageView mMultiUserAvatar;
+    private UserGridView mUserGridView;
+
+    public CarQSFooter(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mMultiUserSwitch = findViewById(R.id.multi_user_switch);
+        mMultiUserAvatar = mMultiUserSwitch.findViewById(R.id.multi_user_avatar);
+        mUserName = findViewById(R.id.user_name);
+
+        mUserInfoController = Dependency.get(UserInfoController.class);
+
+        mMultiUserSwitch.setOnClickListener(v -> {
+            if (mUserGridView == null) {
+                Log.e(TAG, "CarQSFooter not properly set up; cannot display user switcher.");
+                return;
+            }
+
+            if (!mUserGridView.isShowing()) {
+                mUserGridView.show();
+            } else {
+                mUserGridView.hide();
+            }
+        });
+
+        findViewById(R.id.settings_button).setOnClickListener(v -> {
+            ActivityStarter activityStarter = Dependency.get(ActivityStarter.class);
+
+            if (!Dependency.get(DeviceProvisionedController.class).isCurrentUserSetup()) {
+                // If user isn't setup just unlock the device and dump them back at SUW.
+                activityStarter.postQSRunnableDismissingKeyguard(() -> { });
+                return;
+            }
+
+            activityStarter.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS),
+                    true /* dismissShade */);
+        });
+    }
+
+    @Override
+    public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
+        mMultiUserAvatar.setImageDrawable(picture);
+        mUserName.setText(name);
+    }
+
+    @Override
+    public void setQSPanel(@Nullable QSPanel panel) {
+        if (panel != null) {
+            mMultiUserSwitch.setQsPanel(panel);
+        }
+    }
+
+    public void setUserGridView(UserGridView view) {
+        mUserGridView = view;
+    }
+
+    @Override
+    public void setListening(boolean listening) {
+        if (listening) {
+            mUserInfoController.addCallback(this);
+        } else {
+            mUserInfoController.removeCallback(this);
+        }
+    }
+
+    @Nullable
+    @Override
+    public View getExpandView() {
+        // No view that should expand/collapse the quick settings.
+        return null;
+    }
+
+    @Override
+    public void setExpanded(boolean expanded) {
+        // Do nothing because the quick settings cannot be expanded.
+    }
+
+    @Override
+    public void setExpansion(float expansion) {
+        // Do nothing because the quick settings cannot be expanded.
+    }
+
+    @Override
+    public void setKeyguardShowing(boolean keyguardShowing) {
+        // Do nothing because the footer will not be shown when the keyguard is up.
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/car/CarQSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/car/CarQSFragment.java
new file mode 100644
index 0000000..13298d3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/car/CarQSFragment.java
@@ -0,0 +1,174 @@
+/*
+ * 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.qs.car;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+
+import com.android.systemui.Dependency;
+import com.android.systemui.R;
+import com.android.systemui.plugins.qs.QS;
+import com.android.systemui.qs.QSFooter;
+import com.android.systemui.statusbar.car.UserGridView;
+import com.android.systemui.statusbar.policy.UserSwitcherController;
+
+/**
+ * A quick settings fragment for the car. For auto, there is no row for quick settings or ability
+ * to expand the quick settings panel. Instead, the only thing is that displayed is the
+ * status bar, and a static row with access to the user switcher and settings.
+ */
+public class CarQSFragment extends Fragment implements QS {
+    private View mHeader;
+    private CarQSFooter mFooter;
+    private UserGridView mUserGridView;
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+            Bundle savedInstanceState) {
+        return inflater.inflate(R.layout.car_qs_panel, container, false);
+    }
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        mHeader = view.findViewById(R.id.header);
+        mFooter = view.findViewById(R.id.qs_footer);
+
+        mUserGridView = view.findViewById(R.id.user_grid);
+        mUserGridView.init(null, Dependency.get(UserSwitcherController.class),
+                false /* showInitially */);
+
+        mFooter.setUserGridView(mUserGridView);
+    }
+
+    @Override
+    public void hideImmediately() {
+        getView().setVisibility(View.INVISIBLE);
+    }
+
+    @Override
+    public void setQsExpansion(float qsExpansionFraction, float headerTranslation) {
+        // If the header is to be completed translated down, then set it to be visible.
+        getView().setVisibility(headerTranslation == 0 ? View.VISIBLE : View.INVISIBLE);
+    }
+
+    @Override
+    public View getHeader() {
+        return mHeader;
+    }
+
+    @VisibleForTesting
+    QSFooter getFooter() {
+        return mFooter;
+    }
+
+    @Override
+    public void setHeaderListening(boolean listening) {
+        mFooter.setListening(listening);
+    }
+
+    @Override
+    public void setListening(boolean listening) {
+        mFooter.setListening(listening);
+    }
+
+    @Override
+    public int getQsMinExpansionHeight() {
+        return getView().getHeight();
+    }
+
+    @Override
+    public int getDesiredHeight() {
+        return getView().getHeight();
+    }
+
+    @Override
+    public void setPanelView(HeightListener notificationPanelView) {
+        // No quick settings panel.
+    }
+
+    @Override
+    public void setHeightOverride(int desiredHeight) {
+        // No ability to expand quick settings.
+    }
+
+    @Override
+    public void setHeaderClickable(boolean qsExpansionEnabled) {
+        // Usually this sets the expand button to be clickable, but there is no quick settings to
+        // expand.
+    }
+
+    @Override
+    public boolean isCustomizing() {
+        // No ability to customize the quick settings.
+        return false;
+    }
+
+    @Override
+    public void setOverscrolling(boolean overscrolling) {
+        // No overscrolling to reveal quick settings.
+    }
+
+    @Override
+    public void setExpanded(boolean qsExpanded) {
+        // No quick settings to expand
+    }
+
+    @Override
+    public boolean isShowingDetail() {
+        // No detail panel to close.
+        return false;
+    }
+
+    @Override
+    public void closeDetail() {
+        // No detail panel to close.
+    }
+
+    @Override
+    public void setKeyguardShowing(boolean keyguardShowing) {
+        // No keyguard to show.
+    }
+
+    @Override
+    public void animateHeaderSlidingIn(long delay) {
+        // No header to animate.
+    }
+
+    @Override
+    public void animateHeaderSlidingOut() {
+        // No header to animate.
+    }
+
+    @Override
+    public void notifyCustomizeChanged() {
+        // There is no ability to customize quick settings.
+    }
+
+    @Override
+    public void setContainer(ViewGroup container) {
+        // No quick settings, so no container to set.
+    }
+
+    @Override
+    public void setExpandClickListener(OnClickListener onClickListener) {
+        // No ability to expand the quick settings.
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/car/CarStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/car/CarStatusBarHeader.java
new file mode 100644
index 0000000..6797bb9
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/car/CarStatusBarHeader.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.systemui.qs.car;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.Rect;
+import android.support.annotation.IdRes;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.RelativeLayout;
+
+import com.android.settingslib.Utils;
+import com.android.systemui.BatteryMeterView;
+import com.android.systemui.R;
+import com.android.systemui.statusbar.policy.DarkIconDispatcher;
+
+/**
+ * A view that forms the header of the notification panel. This view will ensure that any
+ * status icons that are displayed are tinted accordingly to the current theme.
+ */
+public class CarStatusBarHeader extends RelativeLayout {
+    public CarStatusBarHeader(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+
+        // Set the light/dark theming on the header status UI to match the current theme.
+        int colorForeground = Utils.getColorAttr(getContext(), android.R.attr.colorForeground);
+        float intensity = colorForeground == Color.WHITE ? 0f : 1f;
+        Rect tintArea = new Rect(0, 0, 0, 0);
+
+        applyDarkness(R.id.signal_cluster, tintArea, intensity, colorForeground);
+        applyDarkness(R.id.battery, tintArea, intensity, colorForeground);
+        applyDarkness(R.id.clock, tintArea, intensity, colorForeground);
+
+        ((BatteryMeterView) findViewById(R.id.battery)).setForceShowPercent(true);
+    }
+
+    private void applyDarkness(@IdRes int id, Rect tintArea, float intensity, int color) {
+        View v = findViewById(id);
+        if (v instanceof DarkIconDispatcher.DarkReceiver) {
+            ((DarkIconDispatcher.DarkReceiver) v).onDarkChanged(tintArea, intensity, color);
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
index 6c95a80..5a3081c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
@@ -18,6 +18,7 @@
 import android.animation.Animator;
 import android.animation.Animator.AnimatorListener;
 import android.animation.AnimatorListenerAdapter;
+import android.app.AlertDialog;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.graphics.drawable.Drawable;
@@ -35,6 +36,8 @@
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.WindowManager;
+import android.view.WindowManager.LayoutParams;
 import android.widget.LinearLayout;
 import android.widget.Toolbar;
 import android.widget.Toolbar.OnMenuItemClickListener;
@@ -48,7 +51,9 @@
 import com.android.systemui.qs.QSContainerImpl;
 import com.android.systemui.qs.QSDetailClipper;
 import com.android.systemui.qs.QSTileHost;
+import com.android.systemui.statusbar.phone.LightBarController;
 import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer;
+import com.android.systemui.statusbar.phone.SystemUIDialog;
 import com.android.systemui.statusbar.policy.KeyguardMonitor;
 import com.android.systemui.statusbar.policy.KeyguardMonitor.Callback;
 
@@ -67,6 +72,7 @@
     private static final String EXTRA_QS_CUSTOMIZING = "qs_customizing";
 
     private final QSDetailClipper mClipper;
+    private final LightBarController mLightBarController;
 
     private boolean isShown;
     private QSTileHost mHost;
@@ -80,6 +86,7 @@
     private int mX;
     private int mY;
     private boolean mOpening;
+    private boolean mIsShowingNavBackdrop;
 
     public QSCustomizer(Context context, AttributeSet attrs) {
         super(new ContextThemeWrapper(context, R.style.edit_theme), attrs);
@@ -114,6 +121,7 @@
         DefaultItemAnimator animator = new DefaultItemAnimator();
         animator.setMoveDuration(TileAdapter.MOVE_DURATION);
         mRecyclerView.setItemAnimator(animator);
+        mLightBarController = Dependency.get(LightBarController.class);
         updateNavBackDrop(getResources().getConfiguration());
     }
 
@@ -125,11 +133,16 @@
 
     private void updateNavBackDrop(Configuration newConfig) {
         View navBackdrop = findViewById(R.id.nav_bar_background);
+        mIsShowingNavBackdrop = newConfig.smallestScreenWidthDp >= 600
+                || newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE;
         if (navBackdrop != null) {
-            boolean shouldShow = newConfig.smallestScreenWidthDp >= 600
-                    || newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE;
-            navBackdrop.setVisibility(shouldShow ? View.VISIBLE : View.GONE);
+            navBackdrop.setVisibility(mIsShowingNavBackdrop ? View.VISIBLE : View.GONE);
         }
+        updateNavColors();
+    }
+
+    private void updateNavColors() {
+        mLightBarController.setQsCustomizing(mIsShowingNavBackdrop && isShown);
     }
 
     public void setHost(QSTileHost host) {
@@ -161,6 +174,7 @@
             announceForAccessibility(mContext.getString(
                     R.string.accessibility_desc_quick_settings_edit));
             Dependency.get(KeyguardMonitor.class).addCallback(mKeyguardCallback);
+            updateNavColors();
         }
     }
 
@@ -176,6 +190,7 @@
             mNotifQsContainer.setCustomizerAnimating(false);
             mNotifQsContainer.setCustomizerShowing(true);
             Dependency.get(KeyguardMonitor.class).addCallback(mKeyguardCallback);
+            updateNavColors();
         }
     }
 
@@ -201,6 +216,7 @@
             announceForAccessibility(mContext.getString(
                     R.string.accessibility_desc_quick_settings));
             Dependency.get(KeyguardMonitor.class).removeCallback(mKeyguardCallback);
+            updateNavColors();
         }
     }
 
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 017365f..b3244a5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
@@ -31,6 +31,7 @@
 import android.service.quicksettings.IQSTileService;
 import android.service.quicksettings.Tile;
 import android.service.quicksettings.TileService;
+import android.text.format.DateUtils;
 import android.util.Log;
 import android.view.IWindowManager;
 import android.view.WindowManagerGlobal;
@@ -51,6 +52,8 @@
 public class CustomTile extends QSTileImpl<State> implements TileChangeListener {
     public static final String PREFIX = "custom(";
 
+    private static final long CUSTOM_STALE_TIMEOUT = DateUtils.HOUR_IN_MILLIS;
+
     private static final boolean DEBUG = false;
 
     // We don't want to thrash binding and unbinding if the user opens and closes the panel a lot.
@@ -83,6 +86,11 @@
         mUser = ActivityManager.getCurrentUser();
     }
 
+    @Override
+    protected long getStaleTimeout() {
+        return CUSTOM_STALE_TIMEOUT + DateUtils.MINUTE_IN_MILLIS * mHost.indexOf(getTileSpec());
+    }
+
     private void setTileIcon() {
         try {
             PackageManager pm = mContext.getPackageManager();
@@ -186,7 +194,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         if (mListening == listening) return;
         mListening = listening;
         try {
@@ -297,7 +305,15 @@
             state.state = Tile.STATE_UNAVAILABLE;
             drawable = mDefaultIcon.loadDrawable(mContext);
         }
-        state.icon = new DrawableIcon(drawable);
+
+        final Drawable drawableF = drawable;
+        state.iconSupplier = () -> {
+            Drawable.ConstantState cs = drawableF.getConstantState();
+            if (cs != null) {
+                return new DrawableIcon(cs.newDrawable());
+            }
+            return null;
+        };
         state.label = mTile.getLabel();
         if (mTile.getContentDescription() != null) {
             state.contentDescription = mTile.getContentDescription();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java
index 8074cb9..c249e37 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java
@@ -33,6 +33,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.qs.QSTile.State;
 
+import com.android.systemui.qs.AlphaControlledSignalTileView.AlphaControlledSlashImageView;
 import java.util.Objects;
 
 public class QSIconViewImpl extends QSIconView {
@@ -86,14 +87,15 @@
     }
 
     protected void updateIcon(ImageView iv, State state) {
-        if (!Objects.equals(state.icon, iv.getTag(R.id.qs_icon_tag))
+        final QSTile.Icon icon = state.iconSupplier != null ? state.iconSupplier.get() : state.icon;
+        if (!Objects.equals(icon, iv.getTag(R.id.qs_icon_tag))
                 || !Objects.equals(state.slash, iv.getTag(R.id.qs_slash_tag))) {
             boolean shouldAnimate = iv.isShown() && mAnimationEnabled
                     && iv.getDrawable() != null;
-            Drawable d = state.icon != null
-                    ? shouldAnimate ? state.icon.getDrawable(mContext)
-                    : state.icon.getInvisibleDrawable(mContext) : null;
-            int padding = state.icon != null ? state.icon.getPadding() : 0;
+            Drawable d = icon != null
+                    ? shouldAnimate ? icon.getDrawable(mContext)
+                    : icon.getInvisibleDrawable(mContext) : null;
+            int padding = icon != null ? icon.getPadding() : 0;
             if (d != null) {
                 d.setAutoMirrored(false);
                 d.setLayoutDirection(getLayoutDirection());
@@ -106,7 +108,7 @@
                 iv.setImageDrawable(d);
             }
 
-            iv.setTag(R.id.qs_icon_tag, state.icon);
+            iv.setTag(R.id.qs_icon_tag, icon);
             iv.setTag(R.id.qs_slash_tag, state.slash);
             iv.setPadding(0, padding, 0, padding);
             if (d instanceof Animatable2) {
@@ -138,7 +140,12 @@
                 animateGrayScale(mTint, color, iv);
                 mTint = color;
             } else {
-                setTint(iv, color);
+                if (iv instanceof AlphaControlledSlashImageView) {
+                    ((AlphaControlledSlashImageView)iv)
+                            .setFinalImageTintList(ColorStateList.valueOf(color));
+                } else {
+                    setTint(iv, color);
+                }
                 mTint = color;
             }
         }
@@ -149,6 +156,10 @@
     }
 
     public static void animateGrayScale(int fromColor, int toColor, ImageView iv) {
+        if (iv instanceof AlphaControlledSlashImageView) {
+            ((AlphaControlledSlashImageView)iv)
+                    .setFinalImageTintList(ColorStateList.valueOf(toColor));
+        }
         if (ValueAnimator.areAnimatorsEnabled()) {
             final float fromAlpha = Color.alpha(fromColor);
             final float toAlpha = Color.alpha(toColor);
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 672f2c2..6a5530f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
@@ -17,12 +17,12 @@
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_CLICK;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_LONG_PRESS;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_QS_SECONDARY_CLICK;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_CONTEXT;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_QS_POSITION;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_QS_VALUE;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_ACTION;
 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
-import android.R.attr;
 import android.app.ActivityManager;
 import android.content.Context;
 import android.content.Intent;
@@ -32,10 +32,12 @@
 import android.os.Looper;
 import android.os.Message;
 import android.service.quicksettings.Tile;
+import android.text.format.DateUtils;
 import android.util.ArraySet;
 import android.util.Log;
 import android.util.SparseArray;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.MetricsLogger;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.Utils;
@@ -45,6 +47,7 @@
 import com.android.systemui.plugins.qs.QSIconView;
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.qs.QSTile.State;
+import com.android.systemui.qs.PagedTileLayout.TilePage;
 import com.android.systemui.qs.QSHost;
 
 import java.util.ArrayList;
@@ -60,14 +63,18 @@
     protected final String TAG = "Tile." + getClass().getSimpleName();
     protected static final boolean DEBUG = Log.isLoggable("Tile", Log.DEBUG);
 
+    private static final long DEFAULT_STALE_TIMEOUT = 10 * DateUtils.MINUTE_IN_MILLIS;
+
     protected final QSHost mHost;
     protected final Context mContext;
-    protected final H mHandler = new H(Dependency.get(Dependency.BG_LOOPER));
+    // @NonFinalForTesting
+    protected H mHandler = new H(Dependency.get(Dependency.BG_LOOPER));
     protected final Handler mUiHandler = new Handler(Looper.getMainLooper());
     private final ArraySet<Object> mListeners = new ArraySet<>();
     private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class);
 
     private final ArrayList<Callback> mCallbacks = new ArrayList<>();
+    private final Object mStaleListener = new Object();
     protected TState mState = newTileState();
     private TState mTmpState = newTileState();
     private boolean mAnnounceNextStateChange;
@@ -93,6 +100,7 @@
     protected QSTileImpl(QSHost host) {
         mHost = host;
         mContext = host.getContext();
+        handleStale(); // Tile was just created, must be stale.
     }
 
     /**
@@ -104,6 +112,7 @@
             if (mListeners.add(listener) && mListeners.size() == 1) {
                 if (DEBUG) Log.d(TAG, "setListening " + true);
                 mHandler.obtainMessage(H.SET_LISTENING, 1, 0).sendToTarget();
+                refreshState(); // Ensure we get at least one refresh after listening.
             }
         } else {
             if (mListeners.remove(listener) && mListeners.size() == 0) {
@@ -113,6 +122,15 @@
         }
     }
 
+    protected long getStaleTimeout() {
+        return DEFAULT_STALE_TIMEOUT;
+    }
+
+    @VisibleForTesting
+    protected void handleStale() {
+        setListening(mStaleListener, true);
+    }
+
     public String getTileSpec() {
         return mTileSpec;
     }
@@ -180,9 +198,19 @@
             logMaker.addTaggedData(FIELD_QS_VALUE, ((BooleanState) mState).value ? 1 : 0);
         }
         return logMaker.setSubtype(getMetricsCategory())
+                .addTaggedData(FIELD_CONTEXT, isFullQs())
                 .addTaggedData(FIELD_QS_POSITION, mHost.indexOf(mTileSpec));
     }
 
+    private int isFullQs() {
+        for (Object listener : mListeners) {
+            if (TilePage.class.equals(listener.getClass())) {
+                return 1;
+            }
+        }
+        return 0;
+    }
+
     public void showDetail(boolean show) {
         mHandler.obtainMessage(H.SHOW_DETAIL, show ? 1 : 0, 0).sendToTarget();
     }
@@ -261,6 +289,9 @@
         if (changed) {
             handleStateChanged();
         }
+        mHandler.removeMessages(H.STALE);
+        mHandler.sendEmptyMessageDelayed(H.STALE, getStaleTimeout());
+        setListening(mStaleListener, false);
     }
 
     private void handleStateChanged() {
@@ -314,11 +345,11 @@
         handleRefreshState(null);
     }
 
-    protected abstract void setListening(boolean listening);
+    protected abstract void handleSetListening(boolean listening);
 
     protected void handleDestroy() {
         if (mListeners.size() != 0) {
-            setListening(false);
+            handleSetListening(false);
         }
         mCallbacks.clear();
     }
@@ -368,8 +399,10 @@
         private static final int REMOVE_CALLBACKS = 12;
         private static final int REMOVE_CALLBACK = 13;
         private static final int SET_LISTENING = 14;
+        private static final int STALE = 15;
 
-        private H(Looper looper) {
+        @VisibleForTesting
+        protected H(Looper looper) {
             super(looper);
         }
 
@@ -424,8 +457,11 @@
                     name = "handleClearState";
                     handleClearState();
                 } else if (msg.what == SET_LISTENING) {
-                    name = "setListening";
-                    setListening(msg.arg1 != 0);
+                    name = "handleSetListening";
+                    handleSetListening(msg.arg1 != 0);
+                } else if (msg.what == STALE) {
+                    name = "handleStale";
+                    handleStale();
                 } else {
                     throw new IllegalArgumentException("Unknown msg: " + msg.what);
                 }
@@ -503,7 +539,7 @@
         }
     }
 
-    protected class AnimationIcon extends ResourceIcon {
+    protected static class AnimationIcon extends ResourceIcon {
         private final int mAnimatedResId;
 
         public AnimationIcon(int resId, int staticResId) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SlashImageView.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SlashImageView.java
index 13912fe..63d6f82 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SlashImageView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/SlashImageView.java
@@ -34,7 +34,15 @@
         super(context);
     }
 
-    private void ensureSlashDrawable() {
+    protected SlashDrawable getSlash() {
+        return mSlash;
+    }
+
+    protected void setSlash(SlashDrawable slash) {
+        mSlash = slash;
+    }
+
+    protected void ensureSlashDrawable() {
         if (mSlash == null) {
             mSlash = new SlashDrawable(getDrawable());
             mSlash.setAnimationEnabled(mAnimationEnabled);
@@ -48,6 +56,7 @@
             mSlash = null;
             super.setImageDrawable(null);
         } else if (mSlash == null) {
+            setImageLevel(drawable.getLevel());
             super.setImageDrawable(drawable);
         } else {
             mSlash.setAnimationEnabled(mAnimationEnabled);
@@ -55,10 +64,18 @@
         }
     }
 
+    protected void setImageViewDrawable(SlashDrawable slash) {
+        super.setImageDrawable(slash);
+    }
+
     public void setAnimationEnabled(boolean enabled) {
         mAnimationEnabled = enabled;
     }
 
+    public boolean getAnimationEnabled() {
+        return mAnimationEnabled;
+    }
+
     private void setSlashState(@NonNull SlashState slashState) {
         ensureSlashDrawable();
         mSlash.setRotation(slashState.rotation);
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 2e7012e..bef1aff 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
@@ -110,7 +110,7 @@
         }
     }
 
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean 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 3f419a8..95504ed 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
@@ -55,7 +55,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         if (listening) {
             mBatteryController.addCallback(this);
         } else {
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 12fccda..bc3ccb4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
@@ -16,11 +16,14 @@
 
 package com.android.systemui.qs.tiles;
 
+import static com.android.settingslib.graph.BluetoothDeviceLayerDrawable.createLayerDrawable;
+
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothProfile;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.drawable.Drawable;
 import android.provider.Settings;
 import android.service.quicksettings.Tile;
 import android.text.TextUtils;
@@ -72,7 +75,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         if (listening) {
             mController.addCallback(mCallback);
         } else {
@@ -127,6 +130,15 @@
             if (connected) {
                 state.icon = ResourceIcon.get(R.drawable.ic_qs_bluetooth_connected);
                 state.label = mController.getLastDeviceName();
+                CachedBluetoothDevice lastDevice = mController.getLastDevice();
+                if (lastDevice != null) {
+                    int batteryLevel = lastDevice.getBatteryLevel();
+                    if (batteryLevel != BluetoothDevice.BATTERY_LEVEL_UNKNOWN) {
+                        state.icon = new BluetoothBatteryDrawable(batteryLevel,
+                                mContext.getResources().getFraction(
+                                        R.fraction.bt_battery_scale_fraction, 1, 1));
+                    }
+                }
                 state.contentDescription = mContext.getString(
                         R.string.accessibility_bluetooth_name, state.label);
             } else if (state.isTransient) {
@@ -200,6 +212,26 @@
         return new BluetoothDetailAdapter();
     }
 
+    private class BluetoothBatteryDrawable extends Icon {
+        private int mLevel;
+        private float mIconScale;
+
+        BluetoothBatteryDrawable(int level) {
+            this(level, 1 /* iconScale */);
+        }
+
+        BluetoothBatteryDrawable(int level, float iconScale) {
+            mLevel = level;
+            mIconScale = iconScale;
+        }
+
+        @Override
+        public Drawable getDrawable(Context context) {
+            return createLayerDrawable(context,
+                    R.drawable.ic_qs_bluetooth_connected, mLevel, mIconScale);
+        }
+    }
+
     protected class BluetoothDetailAdapter implements DetailAdapter, QSDetailItems.Callback {
         // We probably won't ever have space in the UI for more than 20 devices, so don't
         // get info for them.
@@ -278,6 +310,7 @@
                         item.icon = R.drawable.ic_qs_bluetooth_connected;
                         int batteryLevel = device.getBatteryLevel();
                         if (batteryLevel != BluetoothDevice.BATTERY_LEVEL_UNKNOWN) {
+                            item.iconDrawable = new BluetoothBatteryDrawable(batteryLevel);
                             item.line2 = mContext.getString(
                                     R.string.quick_settings_connected_battery_level,
                                     Utils.formatPercentage(batteryLevel));
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 2fc9fc7..fb396b9 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
@@ -91,9 +91,9 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         if (mController == null) return;
-        if (DEBUG) Log.d(TAG, "setListening " + listening);
+        if (DEBUG) Log.d(TAG, "handleSetListening " + listening);
         if (listening) {
             mController.addCallback(mCallback);
             mKeyguard.addCallback(mCallback);
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 4afafb6..0b0f58b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
@@ -21,14 +21,15 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.PackageManager;
 import android.content.res.Resources;
+import android.os.SystemProperties;
 import android.service.quicksettings.Tile;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowManager.LayoutParams;
 import android.widget.Switch;
-
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settingslib.net.DataUsageController;
@@ -51,8 +52,17 @@
 
 /** Quick settings tile: Cellular **/
 public class CellularTile extends QSTileImpl<SignalState> {
-    static final Intent CELLULAR_SETTINGS = new Intent().setComponent(new ComponentName(
-            "com.android.settings", "com.android.settings.Settings$DataUsageSummaryActivity"));
+    private static final ComponentName CELLULAR_SETTING_COMPONENT = new ComponentName(
+            "com.android.settings", "com.android.settings.Settings$DataUsageSummaryActivity");
+    private static final ComponentName DATA_PLAN_CELLULAR_COMPONENT = new ComponentName(
+            "com.android.settings", "com.android.settings.Settings$DataPlanUsageSummaryActivity");
+
+    private static final Intent CELLULAR_SETTINGS =
+            new Intent().setComponent(CELLULAR_SETTING_COMPONENT);
+    private static final Intent DATA_PLAN_CELLULAR_SETTINGS =
+            new Intent().setComponent(DATA_PLAN_CELLULAR_COMPONENT);
+
+    private static final String ENABLE_SETTINGS_DATA_PLAN = "enable.settings.data.plan";
 
     private final NetworkController mController;
     private final DataUsageController mDataController;
@@ -82,7 +92,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         if (listening) {
             mController.addCallback(mSignalCallback);
         } else {
@@ -97,7 +107,7 @@
 
     @Override
     public Intent getLongClickIntent() {
-        return CELLULAR_SETTINGS;
+        return getCellularSettingIntent(mContext);
     }
 
     @Override
@@ -134,7 +144,9 @@
         if (mDataController.isMobileDataSupported()) {
             showDetail(true);
         } else {
-            mActivityStarter.postStartActivityDismissingKeyguard(CELLULAR_SETTINGS, 0);
+            mActivityStarter
+                    .postStartActivityDismissingKeyguard(getCellularSettingIntent(mContext),
+                            0 /* delay */);
         }
     }
 
@@ -171,8 +183,13 @@
         state.value = mDataController.isMobileDataSupported()
                 && mDataController.isMobileDataEnabled();
 
-        state.icon = new SignalIcon(cb.mobileSignalIconId);
-        if (cb.airplaneModeEnabled) {
+        if (cb.noSim) {
+            state.icon = ResourceIcon.get(R.drawable.ic_qs_no_sim);
+        } else {
+            state.icon = new SignalIcon(cb.mobileSignalIconId);
+        }
+
+        if (cb.airplaneModeEnabled | cb.noSim) {
             state.state = Tile.STATE_INACTIVE;
         } else {
             state.state = Tile.STATE_ACTIVE;
@@ -246,7 +263,7 @@
         }
 
         @Override
-        public void setNoSims(boolean show) {
+        public void setNoSims(boolean show, boolean simDetected) {
             mInfo.noSim = show;
             if (mInfo.noSim) {
                 // Make sure signal gets cleared out when no sims.
@@ -271,7 +288,28 @@
         public void setMobileDataEnabled(boolean enabled) {
             mDetailAdapter.setMobileDataEnabled(enabled);
         }
-    };
+    }
+
+    static Intent getCellularSettingIntent(Context context) {
+        // TODO(b/62349208): We should replace feature flag check below with data plans
+        // availability check. If the data plans are available we display the data plans usage
+        // summary otherwise we display data usage summary without data plans.
+        boolean isDataPlanFeatureEnabled =
+                SystemProperties.getBoolean(ENABLE_SETTINGS_DATA_PLAN, false /* default */);
+        context.getPackageManager()
+                .setComponentEnabledSetting(
+                        DATA_PLAN_CELLULAR_COMPONENT,
+                        isDataPlanFeatureEnabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+                                : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+                        PackageManager.DONT_KILL_APP);
+        context.getPackageManager()
+                .setComponentEnabledSetting(
+                        CELLULAR_SETTING_COMPONENT,
+                        isDataPlanFeatureEnabled ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED
+                                : PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+                        PackageManager.DONT_KILL_APP);
+        return isDataPlanFeatureEnabled ? DATA_PLAN_CELLULAR_SETTINGS : CELLULAR_SETTINGS;
+    }
 
     private final class CellularDetailAdapter implements DetailAdapter {
 
@@ -289,7 +327,7 @@
 
         @Override
         public Intent getSettingsIntent() {
-            return CELLULAR_SETTINGS;
+            return getCellularSettingIntent(mContext);
         }
 
         @Override
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 40fe484..b93f1c2 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
@@ -63,7 +63,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean 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 b796451..a102696 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
@@ -14,18 +14,16 @@
 
 package com.android.systemui.qs.tiles;
 
-import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;
 import android.service.quicksettings.Tile;
 import android.widget.Switch;
-
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.systemui.Dependency;
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
-import com.android.systemui.qs.QSHost;
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
+import com.android.systemui.qs.QSHost;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.phone.SystemUIDialog;
 import com.android.systemui.statusbar.policy.DataSaverController;
@@ -47,7 +45,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         if (listening) {
             mDataSaverController.addCallback(this);
         } else {
@@ -57,9 +55,8 @@
 
     @Override
     public Intent getLongClickIntent() {
-        return CellularTile.CELLULAR_SETTINGS;
+        return CellularTile.getCellularSettingIntent(mContext);
     }
-
     @Override
     protected void handleClick() {
         if (mState.value
@@ -73,12 +70,7 @@
         dialog.setTitle(com.android.internal.R.string.data_saver_enable_title);
         dialog.setMessage(com.android.internal.R.string.data_saver_description);
         dialog.setPositiveButton(com.android.internal.R.string.data_saver_enable_button,
-                new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        toggleDataSaver();
-                    }
-                });
+                (OnClickListener) (dialogInterface, which) -> toggleDataSaver());
         dialog.setNegativeButton(com.android.internal.R.string.cancel, null);
         dialog.setShowForAllUsers(true);
         dialog.show();
@@ -126,4 +118,4 @@
     public void onDataSaverChanged(boolean isDataSaving) {
         refreshState(isDataSaving);
     }
-}
\ No newline at end of file
+}
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 5938749..9e265e22 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
@@ -232,7 +232,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean 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 e6ac908..f2ead1c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
@@ -54,7 +54,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         if (listening) {
             mFlashlightController.addCallback(this);
         } else {
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 c17573d..910b6b1 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
@@ -74,7 +74,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         if (mListening == listening) return;
         mListening = listening;
         if (listening) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java
index 00cfbfa..4f4004c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java
@@ -76,7 +76,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
     }
 
     @Override
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 5e66334..c35f591 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
@@ -55,7 +55,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         if (listening) {
             mController.addCallback(mCallback);
             mKeyguard.addCallback(mCallback);
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 d147b69..b3ff4e5b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
@@ -51,18 +51,11 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         mListening = listening;
         if (mListening) {
             mContext.registerReceiver(mNfcReceiver,
                     new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED));
-            if (mAdapter == null) {
-                try {
-                    mAdapter = NfcAdapter.getNfcAdapter(mContext);
-                } catch (UnsupportedOperationException e) {
-                    mAdapter = null;
-                }
-            }
         } else {
             mContext.unregisterReceiver(mNfcReceiver);
         }
@@ -84,11 +77,10 @@
 
     @Override
     protected void handleClick() {
-        if (mAdapter == null) return;
-        if (!mAdapter.isEnabled()) {
-            mAdapter.enable();
+        if (!getAdapter().isEnabled()) {
+            getAdapter().enable();
         } else {
-            mAdapter.disable();
+            getAdapter().disable();
         }
     }
 
@@ -106,7 +98,7 @@
     protected void handleUpdateState(BooleanState state, Object arg) {
         final Drawable mEnable = mContext.getDrawable(R.drawable.ic_qs_nfc_enabled);
         final Drawable mDisable = mContext.getDrawable(R.drawable.ic_qs_nfc_disabled);
-        state.value = mAdapter == null ? false : mAdapter.isEnabled();
+        state.value = getAdapter().isEnabled();
         state.label = mContext.getString(R.string.quick_settings_nfc_label);
         state.icon = new DrawableIcon(state.value ? mEnable : mDisable);
         state.expandedAccessibilityClassName = Switch.class.getName();
@@ -127,6 +119,17 @@
         }
     }
 
+    private NfcAdapter getAdapter() {
+        if (mAdapter == null) {
+            try {
+                mAdapter = NfcAdapter.getNfcAdapter(mContext);
+            } catch (UnsupportedOperationException e) {
+                mAdapter = null;
+            }
+        }
+        return mAdapter;
+    }
+
     private BroadcastReceiver mNfcReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
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 2a12769..4c20361 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
@@ -95,7 +95,7 @@
     }
 
     @Override
-    protected void setListening(boolean listening) {
+    protected void handleSetListening(boolean listening) {
         mIsListening = listening;
         if (listening) {
             mController.setListener(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 fb937bd..1e00894 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
@@ -62,7 +62,7 @@
         return new BooleanState();
     }
 
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         if (mController == null) return;
         if (listening) {
             mController.addCallback(mCallback);
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 d6043f4..bde1c98 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java
@@ -69,7 +69,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         if (listening) {
             mUserInfoController.addCallback(this);
         } else {
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 136cf21..2370273 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
@@ -37,10 +37,10 @@
 import com.android.systemui.plugins.qs.QSIconView;
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.qs.QSTile.SignalState;
+import com.android.systemui.qs.AlphaControlledSignalTileView;
 import com.android.systemui.qs.QSDetailItems;
 import com.android.systemui.qs.QSDetailItems.Item;
 import com.android.systemui.qs.QSHost;
-import com.android.systemui.qs.SignalTileView;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.policy.NetworkController;
 import com.android.systemui.statusbar.policy.NetworkController.AccessPointController;
@@ -75,7 +75,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         if (listening) {
             mController.addCallback(mSignalCallback);
         } else {
@@ -104,7 +104,7 @@
 
     @Override
     public QSIconView createTileView(Context context) {
-        return new SignalTileView(context);
+        return new AlphaControlledSignalTileView(context);
     }
 
     @Override
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 38821f6..5f7d6fb 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
@@ -48,7 +48,7 @@
     }
 
     @Override
-    public void setListening(boolean listening) {
+    public void handleSetListening(boolean listening) {
         if (listening) {
             mProfileController.addCallback(this);
         } else {
diff --git a/packages/SystemUI/src/com/android/systemui/recents/Recents.java b/packages/SystemUI/src/com/android/systemui/recents/Recents.java
index 86dde54..406bcac 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/Recents.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/Recents.java
@@ -43,14 +43,11 @@
 
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.systemui.Dependency;
 import com.android.systemui.EventLogConstants;
 import com.android.systemui.EventLogTags;
 import com.android.systemui.R;
 import com.android.systemui.RecentsComponent;
 import com.android.systemui.SystemUI;
-import com.android.systemui.plugins.PluginActivity;
-import com.android.systemui.plugins.PluginActivityManager;
 import com.android.systemui.recents.events.EventBus;
 import com.android.systemui.recents.events.activity.ConfigurationChangedEvent;
 import com.android.systemui.recents.events.activity.DockedTopTaskEvent;
@@ -206,13 +203,13 @@
     public void start() {
         sDebugFlags = new RecentsDebugFlags(mContext);
         sSystemServicesProxy = SystemServicesProxy.getInstance(mContext);
-        sTaskLoader = new RecentsTaskLoader(mContext);
         sConfiguration = new RecentsConfiguration(mContext);
+        sTaskLoader = new RecentsTaskLoader(mContext);
         mHandler = new Handler();
         mImpl = new RecentsImpl(mContext);
 
         // Check if there is a recents override package
-        if ("userdebug".equals(Build.TYPE) || "eng".equals(Build.TYPE)) {
+        if (Build.IS_USERDEBUG || Build.IS_ENG) {
             String cnStr = SystemProperties.get(RECENTS_OVERRIDE_SYSPROP_KEY);
             if (!cnStr.isEmpty()) {
                 mOverrideRecentsPackageName = cnStr;
@@ -239,8 +236,6 @@
             registerWithSystemUser();
         }
         putComponent(Recents.class, this);
-        Dependency.get(PluginActivityManager.class).addActivityPlugin(RecentsImpl.RECENTS_ACTIVITY,
-                PluginActivity.ACTION_RECENTS);
     }
 
     @Override
@@ -570,6 +565,15 @@
         mImpl.showPrevAffiliatedTask();
     }
 
+    @Override
+    public void appTransitionFinished() {
+        if (!Recents.getConfiguration().isLowRamDevice) {
+            // Fallback, reset the flag once an app transition ends
+            EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(
+                    false /* waitingForTransitionStart */));
+        }
+    }
+
     /**
      * Updates on configuration change.
      */
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
index 387527f..86b7790 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -65,6 +65,7 @@
 import com.android.systemui.recents.events.activity.LaunchTaskFailedEvent;
 import com.android.systemui.recents.events.activity.LaunchTaskSucceededEvent;
 import com.android.systemui.recents.events.activity.MultiWindowStateChangedEvent;
+import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent;
 import com.android.systemui.recents.events.activity.ToggleRecentsEvent;
 import com.android.systemui.recents.events.component.ActivityUnpinnedEvent;
 import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent;
@@ -119,6 +120,7 @@
     private boolean mFinishedOnStartup;
     private boolean mIgnoreAltTabRelease;
     private boolean mIsVisible;
+    private boolean mRecentsStartRequested;
     private Configuration mLastConfig;
 
     // Top level views
@@ -183,6 +185,9 @@
             if (action.equals(Intent.ACTION_SCREEN_OFF)) {
                 // When the screen turns off, dismiss Recents to Home
                 dismissRecentsToHomeIfVisible(false);
+            } else if (action.equals(Intent.ACTION_USER_SWITCHED)) {
+                // When switching users, dismiss Recents to Home similar to screen off
+                finish();
             } else if (action.equals(Intent.ACTION_TIME_CHANGED)) {
                 // If the time shifts but the currentTime >= lastStackActiveTime, then that boundary
                 // is still valid.  Otherwise, we need to reset the lastStackactiveTime to the
@@ -353,6 +358,9 @@
         mScrimViews = new SystemBarScrimViews(this);
         getWindow().getAttributes().privateFlags |=
                 WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_DECOR_VIEW_VISIBILITY;
+        if (Recents.getConfiguration().isLowRamDevice) {
+            getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
+        }
 
         mLastConfig = new Configuration(Utilities.getAppConfiguration(this));
         mFocusTimerDuration = getResources().getInteger(R.integer.recents_auto_advance_duration);
@@ -364,7 +372,7 @@
         });
 
         // Set the window background
-        getWindow().setBackgroundDrawable(mRecentsView.getBackgroundScrim());
+        mRecentsView.updateBackgroundScrim(getWindow(), isInMultiWindowMode());
 
         // Create the home intent runnable
         mHomeIntent = new Intent(Intent.ACTION_MAIN, null);
@@ -376,6 +384,7 @@
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_SCREEN_OFF);
         filter.addAction(Intent.ACTION_TIME_CHANGED);
+        filter.addAction(Intent.ACTION_USER_SWITCHED);
         registerReceiver(mSystemBroadcastReceiver, filter);
 
         getWindow().addPrivateFlags(LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION);
@@ -401,6 +410,18 @@
 
         // Notify of the next draw
         mRecentsView.getViewTreeObserver().addOnPreDrawListener(mRecentsDrawnEventListener);
+
+        // If Recents was restarted, then it should complete the enter animation with partially
+        // reset launch state with dock, app and home set to false
+        Object isRelaunching = getLastNonConfigurationInstance();
+        if (isRelaunching != null && isRelaunching instanceof Boolean && (boolean) isRelaunching) {
+            RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState();
+            launchState.launchedViaDockGesture = false;
+            launchState.launchedFromApp = false;
+            launchState.launchedFromHome = false;
+            onEnterAnimationComplete();
+        }
+        mRecentsStartRequested = false;
     }
 
     @Override
@@ -434,7 +455,6 @@
      * Reloads the stack views upon launching Recents.
      */
     private void reloadStackView() {
-
         // If the Recents component has preloaded a load plan, then use that to prevent
         // reconstructing the task stack
         RecentsTaskLoader loader = Recents.getTaskLoader();
@@ -511,6 +531,11 @@
     }
 
     @Override
+    public Object onRetainNonConfigurationInstance() {
+        return true;
+    }
+
+    @Override
     protected void onPause() {
         super.onPause();
 
@@ -536,6 +561,9 @@
     public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {
         super.onMultiWindowModeChanged(isInMultiWindowMode);
 
+        // Set the window background
+        mRecentsView.updateBackgroundScrim(getWindow(), isInMultiWindowMode);
+
         reloadTaskStack(isInMultiWindowMode, true /* sendConfigChangedEvent */);
     }
 
@@ -549,7 +577,9 @@
         MetricsLogger.hidden(this, MetricsEvent.OVERVIEW_ACTIVITY);
         Recents.getTaskLoader().getHighResThumbnailLoader().setVisible(false);
 
-        if (!isChangingConfigurations()) {
+        // When recents starts again before onStop, do not reset launch flags so entrance animation
+        // can run
+        if (!isChangingConfigurations() && !mRecentsStartRequested) {
             // Workaround for b/22542869, if the RecentsActivity is started again, but without going
             // through SystemUI, we need to reset the config launch flags to ensure that we do not
             // wait on the system to send a signal that was never queued.
@@ -695,6 +725,10 @@
         MetricsLogger.action(this, MetricsEvent.ACTION_OVERVIEW_PAGE);
     }
 
+    public final void onBusEvent(RecentsActivityStartingEvent event) {
+        mRecentsStartRequested = true;
+    }
+
     public final void onBusEvent(UserInteractionEvent event) {
         // Stop the fast-toggle dozer
         mIterateTrigger.stopDozing();
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
index ff8d4bf..5dc6f31 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
@@ -16,12 +16,14 @@
 
 package com.android.systemui.recents;
 
+import android.app.ActivityManager;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Rect;
 
 import android.os.SystemProperties;
+
 import com.android.systemui.R;
 import com.android.systemui.recents.misc.SystemServicesProxy;
 import com.android.systemui.recents.model.TaskStack;
@@ -84,6 +86,13 @@
     // Recents will layout task views in a grid mode when there's enough space in the screen.
     public boolean isGridEnabled;
 
+    // Support for Android Recents for low ram devices. If this field is set to true, then Recents
+    // will use the alternative layout.
+    public boolean isLowRamDevice;
+
+    // Enable drag and drop split from Recents. Disabled for low ram devices.
+    public boolean dragToSplitEnabled;
+
     private final Context mAppContext;
 
     public RecentsConfiguration(Context context) {
@@ -95,6 +104,8 @@
         fakeShadows = res.getBoolean(R.bool.config_recents_fake_shadows);
         svelteLevel = res.getInteger(R.integer.recents_svelte_level);
         isGridEnabled = SystemProperties.getBoolean("ro.recents.grid", false);
+        isLowRamDevice = ActivityManager.isLowRamDeviceStatic();
+        dragToSplitEnabled = !isLowRamDevice;
 
         float screenDensity = context.getResources().getDisplayMetrics().density;
         smallestWidth = ssp.getDeviceSmallestWidth();
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsDebugFlags.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsDebugFlags.java
index bb8bfee..0262a09 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsDebugFlags.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsDebugFlags.java
@@ -41,6 +41,8 @@
         private static final boolean EnableFastToggleTimeout = false;
         // Overrides the Tuner flags and enables the paging via the Recents button
         private static final boolean EnablePaging = false;
+        // Disables enter and exit transitions for other tasks for low ram devices
+        public static final boolean DisableRecentsLowRamEnterExitAnimation = false;
 
         // Enables us to create mock recents tasks
         public static final boolean EnableMockTasks = false;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
index 86e93fd..5d5c4a0 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
@@ -35,6 +35,7 @@
 import android.graphics.drawable.Drawable;
 import android.os.Handler;
 import android.os.SystemClock;
+import android.util.ArraySet;
 import android.util.Log;
 import android.util.MutableBoolean;
 import android.util.Pair;
@@ -75,6 +76,7 @@
 import com.android.systemui.recents.model.RecentsTaskLoadPlan;
 import com.android.systemui.recents.model.RecentsTaskLoader;
 import com.android.systemui.recents.model.Task;
+import com.android.systemui.recents.model.Task.TaskKey;
 import com.android.systemui.recents.model.TaskGrouping;
 import com.android.systemui.recents.model.TaskStack;
 import com.android.systemui.recents.model.ThumbnailData;
@@ -109,6 +111,8 @@
     // duration, then we will toggle recents after this duration.
     private final static int FAST_ALT_TAB_DELAY_MS = 225;
 
+    private final static ArraySet<TaskKey> EMPTY_SET = new ArraySet<>();
+
     public final static String RECENTS_PACKAGE = "com.android.systemui";
     public final static String RECENTS_ACTIVITY = "com.android.systemui.recents.RecentsActivity";
 
@@ -128,6 +132,10 @@
             // Preloads the next task
             RecentsConfiguration config = Recents.getConfiguration();
             if (config.svelteLevel == RecentsConfiguration.SVELTE_NONE) {
+                Rect windowRect = getWindowRect(null /* windowRectOverride */);
+                if (windowRect.isEmpty()) {
+                    return;
+                }
 
                 // Load the next task only if we aren't svelte
                 SystemServicesProxy ssp = Recents.getSystemServices();
@@ -135,38 +143,37 @@
                 RecentsTaskLoader loader = Recents.getTaskLoader();
                 RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext);
                 loader.preloadTasks(plan, -1, false /* includeFrontMostExcludedTask */);
+                TaskStack stack = plan.getTaskStack();
+                RecentsActivityLaunchState launchState = new RecentsActivityLaunchState();
+                RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options();
 
-                // This callback is made when a new activity is launched and the old one is paused
-                // so ignore the current activity and try and preload the thumbnail for the
-                // previous one.
-                VisibilityReport visibilityReport;
-                synchronized (mDummyStackView) {
-                    mDummyStackView.getStack().removeAllTasks(false /* notifyStackChanges */);
-                    mDummyStackView.setTasks(plan.getTaskStack(), false /* allowNotify */);
-                    updateDummyStackViewLayout(plan.getTaskStack(),
-                            getWindowRect(null /* windowRectOverride */));
+                synchronized (mBackgroundLayoutAlgorithm) {
+                    // This callback is made when a new activity is launched and the old one is
+                    // paused so ignore the current activity and try and preload the thumbnail for
+                    // the previous one.
+                    updateDummyStackViewLayout(mBackgroundLayoutAlgorithm, stack, windowRect);
 
                     // Launched from app is always the worst case (in terms of how many
                     // thumbnails/tasks visible)
-                    RecentsActivityLaunchState launchState = new RecentsActivityLaunchState();
                     launchState.launchedFromApp = true;
-                    mDummyStackView.updateLayoutAlgorithm(true /* boundScroll */, launchState);
-                    visibilityReport = mDummyStackView.computeStackVisibilityReport();
-                }
+                    mBackgroundLayoutAlgorithm.update(plan.getTaskStack(), EMPTY_SET, launchState);
+                    VisibilityReport visibilityReport =
+                            mBackgroundLayoutAlgorithm.computeStackVisibilityReport(
+                                    stack.getStackTasks());
 
-                RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options();
-                launchOpts.runningTaskId = runningTaskInfo != null ? runningTaskInfo.id : -1;
-                launchOpts.numVisibleTasks = visibilityReport.numVisibleTasks;
-                launchOpts.numVisibleTaskThumbnails = visibilityReport.numVisibleThumbnails;
-                launchOpts.onlyLoadForCache = true;
-                launchOpts.onlyLoadPausedActivities = true;
-                launchOpts.loadThumbnails = true;
+                    launchOpts.runningTaskId = runningTaskInfo != null ? runningTaskInfo.id : -1;
+                    launchOpts.numVisibleTasks = visibilityReport.numVisibleTasks;
+                    launchOpts.numVisibleTaskThumbnails = visibilityReport.numVisibleThumbnails;
+                    launchOpts.onlyLoadForCache = true;
+                    launchOpts.onlyLoadPausedActivities = true;
+                    launchOpts.loadThumbnails = true;
+                }
                 loader.loadTasks(mContext, plan, launchOpts);
             }
         }
 
         @Override
-        public void onActivityPinned(String packageName, int taskId) {
+        public void onActivityPinned(String packageName, int userId, int taskId) {
             // Check this is for the right user
             if (!checkCurrentUserId(mContext, false /* debug */)) {
                 return;
@@ -229,17 +236,15 @@
     boolean mLaunchedWhileDocking;
 
     // Task launching
-    Rect mTaskStackBounds = new Rect();
+    Rect mTmpBounds = new Rect();
     TaskViewTransform mTmpTransform = new TaskViewTransform();
-    int mStatusBarHeight;
-    int mNavBarHeight;
-    int mNavBarWidth;
     int mTaskBarHeight;
 
     // Header (for transition)
     TaskViewHeader mHeaderBar;
     final Object mHeaderBarLock = new Object();
-    protected TaskStackView mDummyStackView;
+    private TaskStackView mDummyStackView;
+    private TaskStackLayoutAlgorithm mBackgroundLayoutAlgorithm;
 
     // Variables to keep track of if we need to start recents after binding
     protected boolean mTriggeredFromAltTab;
@@ -258,6 +263,7 @@
     public RecentsImpl(Context context) {
         mContext = context;
         mHandler = new Handler();
+        mBackgroundLayoutAlgorithm = new TaskStackLayoutAlgorithm(context, null);
 
         // Initialize the static foreground thread
         ForegroundThread.get();
@@ -287,8 +293,9 @@
 
     public void onConfigurationChanged() {
         reloadResources();
-        synchronized (mDummyStackView) {
-            mDummyStackView.reloadOnConfigurationChange();
+        mDummyStackView.reloadOnConfigurationChange();
+        synchronized (mBackgroundLayoutAlgorithm) {
+            mBackgroundLayoutAlgorithm.reloadOnConfigurationChange(mContext);
         }
     }
 
@@ -373,6 +380,12 @@
     }
 
     public void toggleRecents(int growTarget) {
+        // Skip preloading if the task is locked
+        SystemServicesProxy ssp = Recents.getSystemServices();
+        if (ssp.isScreenPinningActive()) {
+            return;
+        }
+
         // Skip this toggle if we are already waiting to trigger recents via alt-tab
         if (mFastAltTabTrigger.isDozing()) {
             return;
@@ -388,7 +401,6 @@
         mTriggeredFromAltTab = false;
 
         try {
-            SystemServicesProxy ssp = Recents.getSystemServices();
             MutableBoolean isHomeStackVisible = new MutableBoolean(true);
             long elapsedTime = SystemClock.elapsedRealtime() - mLastToggleTime;
 
@@ -451,11 +463,16 @@
     }
 
     public void preloadRecents() {
+        // Skip preloading if the task is locked
+        SystemServicesProxy ssp = Recents.getSystemServices();
+        if (ssp.isScreenPinningActive()) {
+            return;
+        }
+
         // Preload only the raw task list into a new load plan (which will be consumed by the
         // RecentsActivity) only if there is a task to animate to.  Post this to ensure that we
         // don't block the touch feedback on the nav bar button which triggers this.
         mHandler.post(() -> {
-            SystemServicesProxy ssp = Recents.getSystemServices();
             MutableBoolean isHomeStackVisible = new MutableBoolean(true);
             if (!ssp.isRecentsActivityVisible(isHomeStackVisible)) {
                 ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask();
@@ -663,7 +680,7 @@
 
         mWaitingForTransitionStart = waitingForTransitionStart;
         if (!waitingForTransitionStart && mToggleFollowingTransitionStart) {
-            toggleRecents(DividerView.INVALID_RECENTS_GROW_TARGET);
+            mHandler.post(() -> toggleRecents(DividerView.INVALID_RECENTS_GROW_TARGET));
         }
         mToggleFollowingTransitionStart = false;
     }
@@ -697,12 +714,6 @@
     private void reloadResources() {
         Resources res = mContext.getResources();
 
-        mStatusBarHeight = res.getDimensionPixelSize(
-                com.android.internal.R.dimen.status_bar_height);
-        mNavBarHeight = res.getDimensionPixelSize(
-                com.android.internal.R.dimen.navigation_bar_height);
-        mNavBarWidth = res.getDimensionPixelSize(
-                com.android.internal.R.dimen.navigation_bar_width);
         mTaskBarHeight = TaskStackLayoutAlgorithm.getDimensionForDevice(mContext,
                 R.dimen.recents_task_view_header_height,
                 R.dimen.recents_task_view_header_height,
@@ -718,7 +729,8 @@
         mHeaderBar.setLayoutDirection(res.getConfiguration().getLayoutDirection());
     }
 
-    private void updateDummyStackViewLayout(TaskStack stack, Rect windowRect) {
+    private void updateDummyStackViewLayout(TaskStackLayoutAlgorithm stackLayout,
+            TaskStack stack, Rect windowRect) {
         SystemServicesProxy ssp = Recents.getSystemServices();
         Rect displayRect = ssp.getDisplayRect();
         Rect systemInsets = new Rect();
@@ -734,18 +746,14 @@
         calculateWindowStableInsets(systemInsets, windowRect, displayRect);
         windowRect.offsetTo(0, 0);
 
-        synchronized (mDummyStackView) {
-            TaskStackLayoutAlgorithm stackLayout = mDummyStackView.getStackAlgorithm();
-
-            // Rebind the header bar and draw it for the transition
-            stackLayout.setSystemInsets(systemInsets);
-            if (stack != null) {
-                stackLayout.getTaskStackBounds(displayRect, windowRect, systemInsets.top,
-                        systemInsets.left, systemInsets.right, mTaskStackBounds);
-                stackLayout.reset();
-                stackLayout.initialize(displayRect, windowRect, mTaskStackBounds,
-                        TaskStackLayoutAlgorithm.StackState.getStackStateForStack(stack));
-            }
+        // Rebind the header bar and draw it for the transition
+        stackLayout.setSystemInsets(systemInsets);
+        if (stack != null) {
+            stackLayout.getTaskStackBounds(displayRect, windowRect, systemInsets.top,
+                    systemInsets.left, systemInsets.right, mTmpBounds);
+            stackLayout.reset();
+            stackLayout.initialize(displayRect, windowRect, mTmpBounds,
+                    TaskStackLayoutAlgorithm.StackState.getStackStateForStack(stack));
         }
     }
 
@@ -767,26 +775,23 @@
     private void updateHeaderBarLayout(TaskStack stack, Rect windowRectOverride) {
         Rect windowRect = getWindowRect(windowRectOverride);
         int taskViewWidth = 0;
-        boolean useGridLayout = false;
-        synchronized (mDummyStackView) {
-            useGridLayout = mDummyStackView.useGridLayout();
-            updateDummyStackViewLayout(stack, windowRect);
-            if (stack != null) {
-                TaskStackLayoutAlgorithm stackLayout = mDummyStackView.getStackAlgorithm();
-                mDummyStackView.getStack().removeAllTasks(false /* notifyStackChanges */);
-                mDummyStackView.setTasks(stack, false /* allowNotifyStackChanges */);
-                // Get the width of a task view so that we know how wide to draw the header bar.
-                if (useGridLayout) {
-                    TaskGridLayoutAlgorithm gridLayout = mDummyStackView.getGridAlgorithm();
-                    gridLayout.initialize(windowRect);
-                    taskViewWidth = (int) gridLayout.getTransform(0 /* taskIndex */,
-                            stack.getTaskCount(), new TaskViewTransform(),
-                            stackLayout).rect.width();
-                } else {
-                    Rect taskViewBounds = stackLayout.getUntransformedTaskViewBounds();
-                    if (!taskViewBounds.isEmpty()) {
-                        taskViewWidth = taskViewBounds.width();
-                    }
+        boolean useGridLayout = mDummyStackView.useGridLayout();
+        updateDummyStackViewLayout(mDummyStackView.getStackAlgorithm(), stack, windowRect);
+        if (stack != null) {
+            TaskStackLayoutAlgorithm stackLayout = mDummyStackView.getStackAlgorithm();
+            mDummyStackView.getStack().removeAllTasks(false /* notifyStackChanges */);
+            mDummyStackView.setTasks(stack, false /* allowNotifyStackChanges */);
+            // Get the width of a task view so that we know how wide to draw the header bar.
+            if (useGridLayout) {
+                TaskGridLayoutAlgorithm gridLayout = mDummyStackView.getGridAlgorithm();
+                gridLayout.initialize(windowRect);
+                taskViewWidth = (int) gridLayout.getTransform(0 /* taskIndex */,
+                        stack.getTaskCount(), new TaskViewTransform(),
+                        stackLayout).rect.width();
+            } else {
+                Rect taskViewBounds = stackLayout.getUntransformedTaskViewBounds();
+                if (!taskViewBounds.isEmpty()) {
+                    taskViewWidth = taskViewBounds.width();
                 }
             }
         }
@@ -866,20 +871,15 @@
     private Pair<ActivityOptions, AppTransitionAnimationSpecsFuture>
             getThumbnailTransitionActivityOptions(ActivityManager.RunningTaskInfo runningTask,
                     Rect windowOverrideRect) {
+        final boolean isLowRamDevice = Recents.getConfiguration().isLowRamDevice;
         if (runningTask != null && runningTask.stackId == FREEFORM_WORKSPACE_STACK_ID) {
             ArrayList<AppTransitionAnimationSpec> specs = new ArrayList<>();
-            ArrayList<Task> tasks;
-            TaskStackLayoutAlgorithm stackLayout;
-            TaskStackViewScroller stackScroller;
+            ArrayList<Task> tasks = mDummyStackView.getStack().getStackTasks();
+            TaskStackLayoutAlgorithm stackLayout = mDummyStackView.getStackAlgorithm();
+            TaskStackViewScroller stackScroller = mDummyStackView.getScroller();
 
-            synchronized (mDummyStackView) {
-                tasks = mDummyStackView.getStack().getStackTasks();
-                stackLayout = mDummyStackView.getStackAlgorithm();
-                stackScroller = mDummyStackView.getScroller();
-
-                mDummyStackView.updateLayoutAlgorithm(true /* boundScroll */);
-                mDummyStackView.updateToInitialState();
-            }
+            mDummyStackView.updateLayoutAlgorithm(true /* boundScroll */);
+            mDummyStackView.updateToInitialState();
 
             for (int i = tasks.size() - 1; i >= 0; i--) {
                 Task task = tasks.get(i);
@@ -896,8 +896,11 @@
             AppTransitionAnimationSpec[] specsArray = new AppTransitionAnimationSpec[specs.size()];
             specs.toArray(specsArray);
 
+            // For low end ram devices, wait for transition flag is reset when Recents entrance
+            // animation is complete instead of when the transition animation starts
             return new Pair<>(ActivityOptions.makeThumbnailAspectScaleDownAnimation(mDummyStackView,
-                    specsArray, mHandler, mResetToggleFlagListener, this), null);
+                    specsArray, mHandler, isLowRamDevice ? null : mResetToggleFlagListener, this),
+                    null);
         } else {
             // Update the destination rect
             Task toTask = new Task();
@@ -916,9 +919,11 @@
                                 toTask.key.id, thumbnail, rect));
                     });
 
+            // For low end ram devices, wait for transition flag is reset when Recents entrance
+            // animation is complete instead of when the transition animation starts
             return new Pair<>(ActivityOptions.makeMultiThumbFutureAspectScaleAnimation(mContext,
-                    mHandler, future.getFuture(), mResetToggleFlagListener, false /* scaleUp */),
-                    future);
+                    mHandler, future.getFuture(), isLowRamDevice ? null : mResetToggleFlagListener,
+                    false /* scaleUp */), future);
         }
     }
 
@@ -1037,10 +1042,8 @@
         updateHeaderBarLayout(stack, windowOverrideRect);
 
         // Prepare the dummy stack for the transition
-        TaskStackLayoutAlgorithm.VisibilityReport stackVr;
-        synchronized (mDummyStackView) {
-            stackVr = mDummyStackView.computeStackVisibilityReport();
-        }
+        TaskStackLayoutAlgorithm.VisibilityReport stackVr =
+                mDummyStackView.computeStackVisibilityReport();
 
         // Update the remaining launch state
         launchState.launchedNumVisibleTasks = stackVr.numVisibleTasks;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java
index d74970f..316ad16 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java
@@ -107,11 +107,8 @@
                 ViewGroup.LayoutParams.MATCH_PARENT,
                 ViewGroup.LayoutParams.MATCH_PARENT,
                 WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL,
-                0
-                        | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
-                        | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
-                        | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
-                ,
+                WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
+                        | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                 PixelFormat.TRANSLUCENT);
         lp.token = new Binder();
         lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/events/activity/HideStackActionButtonEvent.java b/packages/SystemUI/src/com/android/systemui/recents/events/activity/HideStackActionButtonEvent.java
index e02fb14..e4a4f59 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/events/activity/HideStackActionButtonEvent.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/events/activity/HideStackActionButtonEvent.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015 The Android Open Source Project
+ * 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.
@@ -22,5 +22,15 @@
  * This is sent when the stack action button should be hidden.
  */
 public class HideStackActionButtonEvent extends EventBus.Event {
-    // Simple event
+
+    // Whether or not to translate the stack action button when hiding it
+    public final boolean translate;
+
+    public HideStackActionButtonEvent() {
+        this(true);
+    }
+
+    public HideStackActionButtonEvent(boolean translate) {
+        this.translate = translate;
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
index c66b2dd..c9ef43e 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
@@ -176,7 +176,7 @@
         public void onTaskStackChangedBackground() { }
         public void onTaskStackChanged() { }
         public void onTaskSnapshotChanged(int taskId, TaskSnapshot snapshot) { }
-        public void onActivityPinned(String packageName, int taskId) { }
+        public void onActivityPinned(String packageName, int userId, int taskId) { }
         public void onActivityUnpinned() { }
         public void onPinnedActivityRestartAttempt(boolean clearedTask) { }
         public void onPinnedStackAnimationStarted() { }
@@ -231,9 +231,10 @@
         }
 
         @Override
-        public void onActivityPinned(String packageName, int taskId) throws RemoteException {
+        public void onActivityPinned(String packageName, int userId, int taskId)
+                throws RemoteException {
             mHandler.removeMessages(H.ON_ACTIVITY_PINNED);
-            mHandler.obtainMessage(H.ON_ACTIVITY_PINNED, taskId, 0, packageName).sendToTarget();
+            mHandler.obtainMessage(H.ON_ACTIVITY_PINNED, userId, taskId, packageName).sendToTarget();
         }
 
         @Override
@@ -1387,7 +1388,8 @@
                     }
                     case ON_ACTIVITY_PINNED: {
                         for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) {
-                            mTaskStackListeners.get(i).onActivityPinned((String) msg.obj, msg.arg1);
+                            mTaskStackListeners.get(i).onActivityPinned((String) msg.obj, msg.arg1,
+                                    msg.arg2);
                         }
                         break;
                     }
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/HighResThumbnailLoader.java b/packages/SystemUI/src/com/android/systemui/recents/model/HighResThumbnailLoader.java
index 974139a..48fa6c3 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/HighResThumbnailLoader.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/HighResThumbnailLoader.java
@@ -25,6 +25,8 @@
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.recents.Recents;
+import com.android.systemui.recents.RecentsConfiguration;
 import com.android.systemui.recents.misc.SystemServicesProxy;
 import com.android.systemui.recents.model.Task.TaskCallbacks;
 
@@ -47,25 +49,30 @@
     private final Thread mLoadThread;
     private final Handler mMainThreadHandler;
     private final SystemServicesProxy mSystemServicesProxy;
+    private final boolean mIsLowRamDevice;
     private boolean mLoading;
     private boolean mVisible;
     private boolean mFlingingFast;
     private boolean mTaskLoadQueueIdle;
 
-    public HighResThumbnailLoader(SystemServicesProxy ssp, Looper looper) {
+    public HighResThumbnailLoader(SystemServicesProxy ssp, Looper looper, boolean isLowRamDevice) {
         mMainThreadHandler = new Handler(looper);
         mLoadThread = new Thread(mLoader, "Recents-HighResThumbnailLoader");
         mLoadThread.start();
         mSystemServicesProxy = ssp;
+        mIsLowRamDevice = isLowRamDevice;
     }
 
     public void setVisible(boolean visible) {
+        if (mIsLowRamDevice) {
+            return;
+        }
         mVisible = visible;
         updateLoading();
     }
 
     public void setFlingingFast(boolean flingingFast) {
-        if (mFlingingFast == flingingFast) {
+        if (mFlingingFast == flingingFast || mIsLowRamDevice) {
             return;
         }
         mFlingingFast = flingingFast;
@@ -77,6 +84,9 @@
      * starting this queue until the other queue is idling.
      */
     public void setTaskLoadQueueIdle(boolean idle) {
+        if (mIsLowRamDevice) {
+            return;
+        }
         mTaskLoadQueueIdle = idle;
         updateLoading();
     }
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
index 80c44a3..8d31730 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
@@ -37,6 +37,7 @@
 import com.android.systemui.recents.Recents;
 import com.android.systemui.recents.RecentsDebugFlags;
 import com.android.systemui.recents.misc.SystemServicesProxy;
+import com.android.systemui.recents.views.lowram.TaskStackLowRamLayoutAlgorithm;
 import com.android.systemui.recents.views.grid.TaskGridLayoutAlgorithm;
 
 import java.util.ArrayList;
@@ -163,9 +164,13 @@
             boolean isStackTask;
             if (Recents.getConfiguration().isGridEnabled) {
                 // When grid layout is enabled, we only show the first
-                // TaskGridLayoutAlgorithm.MAX_LAYOUT_TASK_COUNT} tasks.
+                // TaskGridLayoutAlgorithm.MAX_LAYOUT_FROM_HOME_TASK_COUNT} tasks.
                 isStackTask = t.lastActiveTime >= lastStackActiveTime &&
                     i >= taskCount - TaskGridLayoutAlgorithm.MAX_LAYOUT_TASK_COUNT;
+            } else if (Recents.getConfiguration().isLowRamDevice) {
+                // Show a max of 3 items
+                isStackTask = t.lastActiveTime >= lastStackActiveTime &&
+                        i >= taskCount - TaskStackLowRamLayoutAlgorithm.MAX_LAYOUT_TASK_COUNT;
             } else {
                 isStackTask = isFreeformTask || !isHistoricalTask(t) ||
                     (t.lastActiveTime >= lastStackActiveTime && i >= (taskCount - MIN_NUM_TASKS));
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
index 1da2d74..1b89386 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java
@@ -306,7 +306,7 @@
         // Initialize the proxy, cache and loaders
         int numRecentTasks = ActivityManager.getMaxRecentTasksStatic();
         mHighResThumbnailLoader = new HighResThumbnailLoader(Recents.getSystemServices(),
-                Looper.getMainLooper());
+                Looper.getMainLooper(), Recents.getConfiguration().isLowRamDevice);
         mLoadQueue = new TaskResourceLoadQueue();
         mIconCache = new TaskKeyLruCache<>(iconCacheSize, mClearActivityInfoOnEviction);
         mActivityLabelCache = new TaskKeyLruCache<>(numRecentTasks, mClearActivityInfoOnEviction);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java
index 67685b8..b2675d7 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java
@@ -140,8 +140,10 @@
                         mHandler.postDelayed(mStartScreenPinningRunnable, 350);
                     }
 
-                    // Reset the state where we are waiting for the transition to start
-                    EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(false));
+                    if (!Recents.getConfiguration().isLowRamDevice) {
+                        // Reset the state where we are waiting for the transition to start
+                        EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(false));
+                    }
                 }
             };
         } else {
@@ -163,8 +165,10 @@
                     EventBus.getDefault().send(new ExitRecentsWindowFirstAnimationFrameEvent());
                     stackView.cancelAllTaskViewAnimations();
 
-                    // Reset the state where we are waiting for the transition to start
-                    EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(false));
+                    if (!Recents.getConfiguration().isLowRamDevice) {
+                        // Reset the state where we are waiting for the transition to start
+                        EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(false));
+                    }
                 }
             };
         }
@@ -447,8 +451,12 @@
 
         Rect taskRect = new Rect();
         transform.rect.round(taskRect);
-        if (stackView.getStack().getStackFrontMostTask(false /* includeFreeformTasks */) !=
-                taskView.getTask()) {
+        // Disable in for low ram devices because each task does in Recents does not have fullscreen
+        // height (stackView height) and when transitioning to fullscreen app, the code below would
+        // force the task thumbnail to full stackView height immediately causing the transition
+        // jarring.
+        if (!Recents.getConfiguration().isLowRamDevice && taskView.getTask() !=
+                stackView.getStack().getStackFrontMostTask(false /* includeFreeformTasks */)) {
             taskRect.bottom = taskRect.top + stackView.getMeasuredHeight();
         }
         return new AppTransitionAnimationSpec(taskView.getTask().key.id, b, taskRect);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
index 8e09481..f38420e 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
@@ -20,13 +20,17 @@
 
 import android.animation.Animator;
 import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
+import android.animation.ValueAnimator.AnimatorUpdateListener;
 import android.app.ActivityOptions.OnAnimationStartedListener;
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.graphics.Canvas;
 import android.graphics.Color;
+import android.graphics.Point;
 import android.graphics.PointF;
 import android.graphics.Rect;
+import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.util.ArraySet;
 import android.util.AttributeSet;
@@ -37,6 +41,7 @@
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewPropertyAnimator;
+import android.view.Window;
 import android.view.WindowInsets;
 import android.widget.FrameLayout;
 import android.widget.TextView;
@@ -117,7 +122,15 @@
 
     private float mBusynessFactor;
     private GradientDrawable mBackgroundScrim;
-    private Animator mBackgroundScrimAnimator;
+    private ColorDrawable mMultiWindowBackgroundScrim;
+    private ValueAnimator mBackgroundScrimAnimator;
+    private Point mTmpDisplaySize = new Point();
+
+    private final AnimatorUpdateListener mUpdateBackgroundScrimAlpha = (animation) -> {
+        int alpha = (Integer) animation.getAnimatedValue();
+        mBackgroundScrim.setAlpha(alpha);
+        mMultiWindowBackgroundScrim.setAlpha(alpha);
+    };
 
     private RecentsTransitionHelper mTransitionHelper;
     @ViewDebug.ExportedProperty(deepExport=true, prefix="touch_")
@@ -146,10 +159,7 @@
         mTouchHandler = new RecentsViewTouchHandler(this);
         mFlingAnimationUtils = new FlingAnimationUtils(context, 0.3f);
         mBackgroundScrim = new GradientDrawable(context);
-        mBackgroundScrim.setCallback(this);
-
-        boolean usingDarkText = Color.luminance(
-                Utils.getColorAttr(mContext, R.attr.wallpaperTextColor)) < 0.5f;
+        mMultiWindowBackgroundScrim = new ColorDrawable();
 
         LayoutInflater inflater = LayoutInflater.from(context);
         mEmptyView = (TextView) inflater.inflate(R.layout.recents_empty, this, false);
@@ -159,10 +169,11 @@
             if (mStackActionButton != null) {
                 removeView(mStackActionButton);
             }
-            mStackActionButton = (TextView) inflater.inflate(R.layout.recents_stack_action_button,
+            mStackActionButton = (TextView) inflater.inflate(Recents.getConfiguration()
+                            .isLowRamDevice
+                        ? R.layout.recents_low_ram_stack_action_button
+                        : R.layout.recents_stack_action_button,
                     this, false);
-            mStackActionButton.setOnClickListener(
-                    v -> EventBus.getDefault().send(new DismissAllTaskViewsEvent()));
 
             mStackButtonShadowRadius = mStackActionButton.getShadowRadius();
             mStackButtonShadowDistance = new PointF(mStackActionButton.getShadowDx(),
@@ -241,6 +252,7 @@
             } else {
                 mBackgroundScrim.setAlpha(0);
             }
+            mMultiWindowBackgroundScrim.setAlpha(mBackgroundScrim.getAlpha());
         }
     }
 
@@ -297,8 +309,14 @@
     /**
      * Returns the window background scrim.
      */
-    public Drawable getBackgroundScrim() {
-        return mBackgroundScrim;
+    public void updateBackgroundScrim(Window window, boolean isInMultiWindow) {
+        if (isInMultiWindow) {
+            mBackgroundScrim.setCallback(null);
+            window.setBackgroundDrawable(mMultiWindowBackgroundScrim);
+        } else {
+            mMultiWindowBackgroundScrim.setCallback(null);
+            window.setBackgroundDrawable(mBackgroundScrim);
+        }
     }
 
     /**
@@ -398,6 +416,9 @@
      */
     public void setScrimColors(ColorExtractor.GradientColors scrimColors, boolean animated) {
         mBackgroundScrim.setColors(scrimColors, animated);
+        int alpha = mMultiWindowBackgroundScrim.getAlpha();
+        mMultiWindowBackgroundScrim.setColor(scrimColors.getMainColor());
+        mMultiWindowBackgroundScrim.setAlpha(alpha);
     }
 
     @Override
@@ -467,8 +488,10 @@
 
         // Needs to know the screen size since the gradient never scales up or down
         // even when bounds change.
-        mBackgroundScrim.setScreenSize(right - left, bottom - top);
+        mContext.getDisplay().getRealSize(mTmpDisplaySize);
+        mBackgroundScrim.setScreenSize(mTmpDisplaySize.x, mTmpDisplaySize.y);
         mBackgroundScrim.setBounds(left, top, right, bottom);
+        mMultiWindowBackgroundScrim.setBounds(0, 0, mTmpDisplaySize.x, mTmpDisplaySize.y);
 
         if (RecentsDebugFlags.Static.EnableStackActionButton) {
             // Layout the stack action button such that its drawable is start-aligned with the
@@ -480,7 +503,6 @@
 
         if (mAwaitingFirstLayout) {
             mAwaitingFirstLayout = false;
-
             // If launched via dragging from the nav bar, then we should translate the whole view
             // down offscreen
             RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState();
@@ -489,6 +511,11 @@
             } else {
                 setTranslationY(0f);
             }
+
+            if (Recents.getConfiguration().isLowRamDevice
+                    && mEmptyView.getVisibility() == View.VISIBLE) {
+                animateEmptyView(true /* show */, null /* postAnimationTrigger */);
+            }
         }
     }
 
@@ -538,15 +565,22 @@
         mLastTaskLaunchedWasFreeform = event.task.isFreeformTask();
         mTransitionHelper.launchTaskFromRecents(getStack(), event.task, mTaskStackView,
                 event.taskView, event.screenPinningRequested, event.targetTaskStack);
+        if (Recents.getConfiguration().isLowRamDevice) {
+            EventBus.getDefault().send(new HideStackActionButtonEvent(false /* translate */));
+        }
     }
 
     public final void onBusEvent(DismissRecentsToHomeAnimationStarted event) {
         int taskViewExitToHomeDuration = TaskStackAnimationHelper.EXIT_TO_HOME_TRANSLATION_DURATION;
         if (RecentsDebugFlags.Static.EnableStackActionButton) {
             // Hide the stack action button
-            hideStackActionButton(taskViewExitToHomeDuration, false /* translate */);
+            EventBus.getDefault().send(new HideStackActionButtonEvent());
         }
         animateBackgroundScrim(0f, taskViewExitToHomeDuration);
+
+        if (Recents.getConfiguration().isLowRamDevice) {
+            animateEmptyView(false /* show */, event.getAnimationTrigger());
+        }
     }
 
     public final void onBusEvent(DragStartEvent event) {
@@ -704,7 +738,7 @@
     }
 
     public final void onBusEvent(AllTaskViewsDismissedEvent event) {
-        hideStackActionButton(HIDE_STACK_ACTION_BUTTON_DURATION, true /* translate */);
+        EventBus.getDefault().send(new HideStackActionButtonEvent());
     }
 
     public final void onBusEvent(DismissAllTaskViewsEvent event) {
@@ -752,7 +786,8 @@
             mStackActionButton.setVisibility(View.VISIBLE);
             mStackActionButton.setAlpha(0f);
             if (translate) {
-                mStackActionButton.setTranslationY(-mStackActionButton.getMeasuredHeight() * 0.25f);
+                mStackActionButton.setTranslationY(mStackActionButton.getMeasuredHeight() *
+                        (Recents.getConfiguration().isLowRamDevice ? 1 : -0.25f));
             } else {
                 mStackActionButton.setTranslationY(0f);
             }
@@ -798,8 +833,8 @@
 
         if (mStackActionButton.getVisibility() == View.VISIBLE) {
             if (translate) {
-                mStackActionButton.animate()
-                    .translationY(-mStackActionButton.getMeasuredHeight() * 0.25f);
+                mStackActionButton.animate().translationY(mStackActionButton.getMeasuredHeight()
+                        * (Recents.getConfiguration().isLowRamDevice ? 1 : -0.25f));
             }
             mStackActionButton.animate()
                     .alpha(0f)
@@ -818,6 +853,28 @@
     }
 
     /**
+     * Animates a translation in the Y direction and fades in/out for empty view to show or hide it.
+     * @param show whether to translate up and fade in the empty view to the center of the screen
+     * @param postAnimationTrigger to keep track of the animation
+     */
+    private void animateEmptyView(boolean show, ReferenceCountedTrigger postAnimationTrigger) {
+        float start = mTaskStackView.getStackAlgorithm().getTaskRect().height() / 4;
+        mEmptyView.setTranslationY(show ? start : 0);
+        mEmptyView.setAlpha(show ? 0f : 1f);
+        ViewPropertyAnimator animator = mEmptyView.animate()
+                .setDuration(150)
+                .setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
+                .translationY(show ? 0 : start)
+                .alpha(show ? 1f : 0f);
+
+        if (postAnimationTrigger != null) {
+            animator.setListener(postAnimationTrigger.decrementOnAnimationEnd());
+            postAnimationTrigger.increment();
+        }
+        animator.start();
+    }
+
+    /**
      * Updates the dock region to match the specified dock state.
      */
     private void updateVisibleDockRegions(TaskStack.DockState[] newDockStates,
@@ -877,31 +934,50 @@
         // Calculate the absolute alpha to animate from
         final int fromAlpha = mBackgroundScrim.getAlpha();
         final int toAlpha = (int) (alpha * 255);
-        mBackgroundScrimAnimator = ObjectAnimator.ofInt(mBackgroundScrim, Utilities.DRAWABLE_ALPHA,
-                fromAlpha, toAlpha);
+        mBackgroundScrimAnimator = ValueAnimator.ofInt(fromAlpha, toAlpha);
         mBackgroundScrimAnimator.setDuration(duration);
         mBackgroundScrimAnimator.setInterpolator(toAlpha > fromAlpha
                 ? Interpolators.ALPHA_IN
                 : Interpolators.ALPHA_OUT);
+        mBackgroundScrimAnimator.addUpdateListener(mUpdateBackgroundScrimAlpha);
         mBackgroundScrimAnimator.start();
     }
 
     /**
      * @return the bounds of the stack action button.
      */
-    private Rect getStackActionButtonBoundsFromStackLayout() {
+    Rect getStackActionButtonBoundsFromStackLayout() {
         Rect actionButtonRect = new Rect(mTaskStackView.mLayoutAlgorithm.getStackActionButtonRect());
-        int left = isLayoutRtl()
+        int left, top;
+        if (Recents.getConfiguration().isLowRamDevice) {
+            Rect windowRect = Recents.getSystemServices().getWindowRect();
+            int spaceLeft = windowRect.width() - mSystemInsets.left - mSystemInsets.right;
+            left = (spaceLeft - mStackActionButton.getMeasuredWidth()) / 2 + mSystemInsets.left;
+            top = windowRect.height() - (mStackActionButton.getMeasuredHeight()
+                    + mSystemInsets.bottom + mStackActionButton.getPaddingBottom() / 2);
+        } else {
+            left = isLayoutRtl()
                 ? actionButtonRect.left - mStackActionButton.getPaddingLeft()
                 : actionButtonRect.right + mStackActionButton.getPaddingRight()
                         - mStackActionButton.getMeasuredWidth();
-        int top = actionButtonRect.top +
+            top = actionButtonRect.top +
                 (actionButtonRect.height() - mStackActionButton.getMeasuredHeight()) / 2;
+        }
         actionButtonRect.set(left, top, left + mStackActionButton.getMeasuredWidth(),
                 top + mStackActionButton.getMeasuredHeight());
         return actionButtonRect;
     }
 
+    View getStackActionButton() {
+        return mStackActionButton;
+    }
+
+    @Override
+    public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
+        super.requestDisallowInterceptTouchEvent(disallowIntercept);
+        mTouchHandler.cancelStackActionButtonClick();
+    }
+
     public void dump(String prefix, PrintWriter writer) {
         String innerPrefix = prefix + "  ";
         String id = Integer.toHexString(System.identityHashCode(this));
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java
index 46619c2..b6b24bc 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java
@@ -23,6 +23,7 @@
 import android.view.InputDevice;
 import android.view.MotionEvent;
 import android.view.PointerIcon;
+import android.view.View;
 import android.view.ViewConfiguration;
 import android.view.ViewDebug;
 
@@ -31,6 +32,8 @@
 import com.android.systemui.recents.events.EventBus;
 import com.android.systemui.recents.events.activity.ConfigurationChangedEvent;
 import com.android.systemui.recents.events.activity.HideRecentsEvent;
+import com.android.systemui.recents.events.activity.HideStackActionButtonEvent;
+import com.android.systemui.recents.events.ui.DismissAllTaskViewsEvent;
 import com.android.systemui.recents.events.ui.HideIncompatibleAppOverlayEvent;
 import com.android.systemui.recents.events.ui.ShowIncompatibleAppOverlayEvent;
 import com.android.systemui.recents.events.ui.dragndrop.DragDropTargetChangedEvent;
@@ -99,8 +102,7 @@
 
     /** Touch preprocessing for handling below */
     public boolean onInterceptTouchEvent(MotionEvent ev) {
-        handleTouchEvent(ev);
-        return mDragRequested;
+        return handleTouchEvent(ev) || mDragRequested;
     }
 
     /** Handles touch events once we have intercepted them */
@@ -183,22 +185,47 @@
         }
     }
 
+    void cancelStackActionButtonClick() {
+        mRv.getStackActionButton().setPressed(false);
+    }
+
+    private boolean isWithinStackActionButton(float x, float y) {
+        Rect rect = mRv.getStackActionButtonBoundsFromStackLayout();
+        return mRv.getStackActionButton().getVisibility() == View.VISIBLE &&
+                mRv.getStackActionButton().pointInView(x - rect.left, y - rect.top, 0 /* slop */);
+    }
+
+    private void changeStackActionButtonDrawableHotspot(float x, float y) {
+        Rect rect = mRv.getStackActionButtonBoundsFromStackLayout();
+        mRv.getStackActionButton().drawableHotspotChanged(x - rect.left, y - rect.top);
+    }
+
     /**
      * Handles dragging touch events
      */
-    private void handleTouchEvent(MotionEvent ev) {
+    private boolean handleTouchEvent(MotionEvent ev) {
         int action = ev.getActionMasked();
+        boolean consumed = false;
+        float evX = ev.getX();
+        float evY = ev.getY();
         switch (action) {
             case MotionEvent.ACTION_DOWN:
-                mDownPos.set((int) ev.getX(), (int) ev.getY());
+                mDownPos.set((int) evX, (int) evY);
                 mDeviceId = ev.getDeviceId();
+
+                if (isWithinStackActionButton(evX, evY)) {
+                    changeStackActionButtonDrawableHotspot(evX, evY);
+                    mRv.getStackActionButton().setPressed(true);
+                }
                 break;
             case MotionEvent.ACTION_MOVE: {
-                float evX = ev.getX();
-                float evY = ev.getY();
                 float x = evX - mTaskViewOffset.x;
                 float y = evY - mTaskViewOffset.y;
 
+                if (mRv.getStackActionButton().isPressed() && isWithinStackActionButton(evX, evY)) {
+                    changeStackActionButtonDrawableHotspot(evX, evY);
+                }
+
                 if (mDragRequested) {
                     if (!mIsDragging) {
                         mIsDragging = Math.hypot(evX - mDownPos.x, evY - mDownPos.y) > mDragSlop;
@@ -232,9 +259,7 @@
                             EventBus.getDefault().send(new DragDropTargetChangedEvent(mDragTask,
                                     currentDropTarget));
                         }
-
                     }
-
                     mTaskView.setTranslationX(x);
                     mTaskView.setTranslationY(y);
                 }
@@ -242,6 +267,11 @@
             }
             case MotionEvent.ACTION_UP:
             case MotionEvent.ACTION_CANCEL: {
+                if (mRv.getStackActionButton().isPressed() && isWithinStackActionButton(evX, evY)) {
+                    EventBus.getDefault().send(new DismissAllTaskViewsEvent());
+                    consumed = true;
+                }
+                cancelStackActionButtonClick();
                 if (mDragRequested) {
                     boolean cancelled = action == MotionEvent.ACTION_CANCEL;
                     if (cancelled) {
@@ -254,5 +284,6 @@
                 mDeviceId = -1;
             }
         }
+        return consumed;
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java
index 0fc68e6..81bf6af 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java
@@ -33,9 +33,13 @@
 import com.android.systemui.recents.Recents;
 import com.android.systemui.recents.RecentsActivityLaunchState;
 import com.android.systemui.recents.RecentsConfiguration;
+import com.android.systemui.recents.RecentsDebugFlags;
+import com.android.systemui.recents.events.EventBus;
+import com.android.systemui.recents.events.component.SetWaitingForTransitionStartEvent;
 import com.android.systemui.recents.misc.ReferenceCountedTrigger;
 import com.android.systemui.recents.model.Task;
 import com.android.systemui.recents.model.TaskStack;
+import com.android.systemui.recents.views.lowram.TaskStackLowRamLayoutAlgorithm;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -144,6 +148,14 @@
         boolean isLandscape = appResources.getConfiguration().orientation
                 == Configuration.ORIENTATION_LANDSCAPE;
 
+        float top = 0;
+        final boolean isLowRamDevice = Recents.getConfiguration().isLowRamDevice;
+        if (isLowRamDevice && launchState.launchedFromApp && !launchState.launchedViaDockGesture) {
+            stackLayout.getStackTransform(launchTargetTask, stackScroller.getStackScroll(),
+                    mTmpTransform, null /* frontTransform */);
+            top = mTmpTransform.rect.top;
+        }
+
         // Prepare each of the task views for their enter animation from front to back
         List<TaskView> taskViews = mStackView.getTaskViews();
         for (int i = taskViews.size() - 1; i >= 0; i--) {
@@ -165,6 +177,24 @@
             } else if (launchState.launchedFromApp && !launchState.launchedViaDockGesture) {
                 if (task.isLaunchTarget) {
                     tv.onPrepareLaunchTargetForEnterAnimation();
+                } else if (isLowRamDevice && i >= taskViews.size() -
+                            (TaskStackLowRamLayoutAlgorithm.MAX_LAYOUT_TASK_COUNT + 1)
+                        && !RecentsDebugFlags.Static.DisableRecentsLowRamEnterExitAnimation) {
+                    // Move the last 2nd and 3rd last tasks in-app animation to match the motion of
+                    // the last task's app transition
+                    stackLayout.getStackTransform(task, stackScroller.getStackScroll(),
+                            mTmpTransform, null);
+                    mTmpTransform.rect.offset(0, -top);
+                    mTmpTransform.alpha = 0f;
+                    mStackView.updateTaskViewToTransform(tv, mTmpTransform,
+                            AnimationProps.IMMEDIATE);
+                    stackLayout.getStackTransform(task, stackScroller.getStackScroll(),
+                            mTmpTransform, null);
+                    mTmpTransform.alpha = 1f;
+                    // Duration see {@link
+                    // com.android.server.wm.AppTransition#DEFAULT_APP_TRANSITION_DURATION}
+                    mStackView.updateTaskViewToTransform(tv, mTmpTransform,
+                            new AnimationProps(336, Interpolators.FAST_OUT_SLOW_IN));
                 } else if (currentTaskOccludesLaunchTarget) {
                     // Move the task view slightly lower so we can animate it in
                     mTmpTransform.rect.offset(0, taskViewAffiliateGroupEnterOffset);
@@ -174,8 +204,12 @@
                     tv.setClipViewInStack(false);
                 }
             } else if (launchState.launchedFromHome) {
-                // Move the task view off screen (below) so we can animate it in
-                mTmpTransform.rect.offset(0, offscreenYOffset);
+                if (isLowRamDevice) {
+                    mTmpTransform.rect.offset(0, stackLayout.getTaskRect().height() / 4);
+                } else {
+                    // Move the task view off screen (below) so we can animate it in
+                    mTmpTransform.rect.offset(0, offscreenYOffset);
+                }
                 mTmpTransform.alpha = 0f;
                 mStackView.updateTaskViewToTransform(tv, mTmpTransform, AnimationProps.IMMEDIATE);
             } else if (launchState.launchedViaDockGesture) {
@@ -209,6 +243,7 @@
             return;
         }
 
+        final boolean isLowRamDevice = Recents.getConfiguration().isLowRamDevice;
         int taskViewEnterFromAppDuration = res.getInteger(
                 R.integer.recents_task_enter_from_app_duration);
         int taskViewEnterFromAffiliatedAppDuration = res.getInteger(
@@ -216,6 +251,13 @@
         int dockGestureAnimDuration = appRes.getInteger(
                 R.integer.long_press_dock_anim_duration);
 
+        // Since low ram devices have an animation when entering app -> recents, do not allow
+        // toggle until the animation is complete
+        if (launchState.launchedFromApp && !launchState.launchedViaDockGesture && isLowRamDevice) {
+            postAnimationTrigger.addLastDecrementRunnable(() -> EventBus.getDefault()
+                .send(new SetWaitingForTransitionStartEvent(false)));
+        }
+
         // Create enter animations for each of the views from front to back
         List<TaskView> taskViews = mStackView.getTaskViews();
         int taskViewCount = taskViews.size();
@@ -262,16 +304,23 @@
                         taskIndexFromFront) * mEnterAndExitFromHomeTranslationOffset) /
                         ENTER_FROM_HOME_TRANSLATION_DURATION;
                 AnimationProps taskAnimation = new AnimationProps()
-                        .setStartDelay(AnimationProps.ALPHA,
-                                Math.min(ENTER_EXIT_NUM_ANIMATING_TASKS, taskIndexFromFront) *
-                                        FRAME_OFFSET_MS)
-                        .setDuration(AnimationProps.BOUNDS, ENTER_FROM_HOME_TRANSLATION_DURATION)
-                        .setDuration(AnimationProps.ALPHA, ENTER_FROM_HOME_ALPHA_DURATION)
-                        .setInterpolator(AnimationProps.BOUNDS,
-                                new RecentsEntrancePathInterpolator(0f, 0f, 0.2f, 1f,
-                                        startOffsetFraction))
                         .setInterpolator(AnimationProps.ALPHA, ENTER_FROM_HOME_ALPHA_INTERPOLATOR)
                         .setListener(postAnimationTrigger.decrementOnAnimationEnd());
+                if (isLowRamDevice) {
+                    taskAnimation.setInterpolator(AnimationProps.BOUNDS,
+                            Interpolators.FAST_OUT_SLOW_IN)
+                            .setDuration(AnimationProps.BOUNDS, 150)
+                            .setDuration(AnimationProps.ALPHA, 150);
+                } else {
+                    taskAnimation.setStartDelay(AnimationProps.ALPHA,
+                                Math.min(ENTER_EXIT_NUM_ANIMATING_TASKS, taskIndexFromFront) *
+                                        FRAME_OFFSET_MS)
+                            .setInterpolator(AnimationProps.BOUNDS,
+                                new RecentsEntrancePathInterpolator(0f, 0f, 0.2f, 1f,
+                                        startOffsetFraction))
+                            .setDuration(AnimationProps.BOUNDS, ENTER_FROM_HOME_TRANSLATION_DURATION)
+                            .setDuration(AnimationProps.ALPHA, ENTER_FROM_HOME_ALPHA_DURATION);
+                }
                 postAnimationTrigger.increment();
                 mStackView.updateTaskViewToTransform(tv, mTmpTransform, taskAnimation);
                 if (i == taskViewCount - 1) {
@@ -325,18 +374,32 @@
                 int delay = Math.min(ENTER_EXIT_NUM_ANIMATING_TASKS , taskIndexFromFront) *
                         mEnterAndExitFromHomeTranslationOffset;
                 taskAnimation = new AnimationProps()
-                        .setStartDelay(AnimationProps.BOUNDS, delay)
                         .setDuration(AnimationProps.BOUNDS, EXIT_TO_HOME_TRANSLATION_DURATION)
-                        .setInterpolator(AnimationProps.BOUNDS,
-                                EXIT_TO_HOME_TRANSLATION_INTERPOLATOR)
                         .setListener(postAnimationTrigger.decrementOnAnimationEnd());
+                if (Recents.getConfiguration().isLowRamDevice) {
+                    taskAnimation.setInterpolator(AnimationProps.BOUNDS,
+                            Interpolators.FAST_OUT_SLOW_IN);
+                } else {
+                    taskAnimation.setStartDelay(AnimationProps.BOUNDS, delay)
+                            .setInterpolator(AnimationProps.BOUNDS,
+                                    EXIT_TO_HOME_TRANSLATION_INTERPOLATOR);
+                }
                 postAnimationTrigger.increment();
             } else {
                 taskAnimation = AnimationProps.IMMEDIATE;
             }
 
             mTmpTransform.fillIn(tv);
-            mTmpTransform.rect.offset(0, offscreenYOffset);
+            if (Recents.getConfiguration().isLowRamDevice) {
+                taskAnimation.setInterpolator(AnimationProps.ALPHA,
+                                EXIT_TO_HOME_TRANSLATION_INTERPOLATOR)
+                        .setDuration(AnimationProps.ALPHA, EXIT_TO_HOME_TRANSLATION_DURATION);
+                mTmpTransform.rect.offset(0, stackLayout.mTaskStackLowRamLayoutAlgorithm
+                        .getTaskRect().height() / 4);
+                mTmpTransform.alpha = 0f;
+            } else {
+                mTmpTransform.rect.offset(0, offscreenYOffset);
+            }
             mStackView.updateTaskViewToTransform(tv, mTmpTransform, taskAnimation);
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
index 9c14d48..eaa32ee 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
@@ -39,7 +39,9 @@
 import com.android.systemui.recents.misc.Utilities;
 import com.android.systemui.recents.model.Task;
 import com.android.systemui.recents.model.TaskStack;
+import com.android.systemui.recents.views.lowram.TaskStackLowRamLayoutAlgorithm;
 import com.android.systemui.recents.views.grid.TaskGridLayoutAlgorithm;
+
 import java.io.PrintWriter;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -345,17 +347,18 @@
     // The freeform workspace layout
     FreeformWorkspaceLayoutAlgorithm mFreeformLayoutAlgorithm;
     TaskGridLayoutAlgorithm mTaskGridLayoutAlgorithm;
+    TaskStackLowRamLayoutAlgorithm mTaskStackLowRamLayoutAlgorithm;
 
     // The transform to place TaskViews at the front and back of the stack respectively
     TaskViewTransform mBackOfStackTransform = new TaskViewTransform();
     TaskViewTransform mFrontOfStackTransform = new TaskViewTransform();
 
     public TaskStackLayoutAlgorithm(Context context, TaskStackLayoutAlgorithmCallbacks cb) {
-        Resources res = context.getResources();
         mContext = context;
         mCb = cb;
         mFreeformLayoutAlgorithm = new FreeformWorkspaceLayoutAlgorithm(context);
         mTaskGridLayoutAlgorithm = new TaskGridLayoutAlgorithm(context);
+        mTaskStackLowRamLayoutAlgorithm = new TaskStackLowRamLayoutAlgorithm(context);
         reloadOnConfigurationChange(context);
     }
 
@@ -392,6 +395,7 @@
                 R.dimen.recents_layout_initial_bottom_offset_tablet);
         mFreeformLayoutAlgorithm.reloadOnConfigurationChange(context);
         mTaskGridLayoutAlgorithm.reloadOnConfigurationChange(context);
+        mTaskStackLowRamLayoutAlgorithm.reloadOnConfigurationChange(context);
         mMinMargin = res.getDimensionPixelSize(R.dimen.recents_layout_min_margin);
         mBaseTopMargin = getDimensionForDevice(context,
                 R.dimen.recents_layout_top_margin_phone,
@@ -431,6 +435,7 @@
         boolean changed = !mSystemInsets.equals(systemInsets);
         mSystemInsets.set(systemInsets);
         mTaskGridLayoutAlgorithm.setSystemInsets(systemInsets);
+        mTaskStackLowRamLayoutAlgorithm.setSystemInsets(systemInsets);
         return changed;
     }
 
@@ -506,13 +511,14 @@
 
         // Initialize the grid layout
         mTaskGridLayoutAlgorithm.initialize(windowRect);
+        mTaskStackLowRamLayoutAlgorithm.initialize(windowRect);
     }
 
     /**
      * Computes the minimum and maximum scroll progress values and the progress values for each task
      * in the stack.
      */
-    void update(TaskStack stack, ArraySet<Task.TaskKey> ignoreTasksSet,
+    public void update(TaskStack stack, ArraySet<Task.TaskKey> ignoreTasksSet,
             RecentsActivityLaunchState launchState) {
         SystemServicesProxy ssp = Recents.getSystemServices();
 
@@ -587,15 +593,23 @@
             int maxBottomOffset = mStackBottomOffset + mTaskRect.height();
             float maxBottomNormX = getNormalizedXFromUnfocusedY(maxBottomOffset, FROM_BOTTOM);
             mUnfocusedRange.offset(0f);
-            mMinScrollP = 0;
-            mMaxScrollP = Math.max(mMinScrollP, (mNumStackTasks - 1) -
+            mMinScrollP = Recents.getConfiguration().isLowRamDevice
+                    ? mTaskStackLowRamLayoutAlgorithm.getMinScrollP()
+                    : 0;
+            mMaxScrollP = Recents.getConfiguration().isLowRamDevice
+                    ? mTaskStackLowRamLayoutAlgorithm.getMaxScrollP(taskCount)
+                    : Math.max(mMinScrollP, (mNumStackTasks - 1) -
                     Math.max(0, mUnfocusedRange.getAbsoluteX(maxBottomNormX)));
             boolean scrollToFront = launchState.launchedFromHome || launchState.launchedFromPipApp
                     || launchState.launchedWithNextPipApp || launchState.launchedViaDockGesture;
+
             if (launchState.launchedFromBlacklistedApp) {
                 mInitialScrollP = mMaxScrollP;
             } else if (launchState.launchedWithAltTab) {
                 mInitialScrollP = Utilities.clamp(launchTaskIndex, mMinScrollP, mMaxScrollP);
+            } else if (Recents.getConfiguration().isLowRamDevice) {
+                mInitialScrollP = mTaskStackLowRamLayoutAlgorithm.getInitialScrollP(mNumStackTasks,
+                        scrollToFront);
             } else if (scrollToFront) {
                 mInitialScrollP = Utilities.clamp(launchTaskIndex, mMinScrollP, mMaxScrollP);
             } else {
@@ -706,7 +720,7 @@
      */
     public float updateFocusStateOnScroll(float lastTargetStackScroll, float targetStackScroll,
             float lastStackScroll) {
-        if (targetStackScroll == lastStackScroll) {
+        if (targetStackScroll == lastStackScroll || Recents.getConfiguration().isLowRamDevice) {
             return targetStackScroll;
         }
 
@@ -802,6 +816,10 @@
             return mTaskGridLayoutAlgorithm.computeStackVisibilityReport(tasks);
         }
 
+        if (Recents.getConfiguration().isLowRamDevice) {
+            return mTaskStackLowRamLayoutAlgorithm.computeStackVisibilityReport(tasks);
+        }
+
         // Ensure minimum visibility count
         if (tasks.size() <= 1) {
             return new VisibilityReport(1, 1);
@@ -896,6 +914,15 @@
             int taskCount = mTaskIndexMap.size();
             mTaskGridLayoutAlgorithm.getTransform(taskIndex, taskCount, transformOut, this);
             return transformOut;
+        } else if (Recents.getConfiguration().isLowRamDevice) {
+            if (task == null) {
+                transformOut.reset();
+                return transformOut;
+            }
+            int taskIndex = mTaskIndexMap.get(task.key.id);
+            mTaskStackLowRamLayoutAlgorithm.getTransform(taskIndex, stackScroll, transformOut,
+                    mNumStackTasks, this);
+            return transformOut;
         } else {
             // Return early if we have an invalid index
             int nonOverrideTaskProgress = mTaskIndexMap.get(task.key.id, -1);
@@ -906,6 +933,7 @@
             float taskProgress = ignoreTaskOverrides
                     ? nonOverrideTaskProgress
                     : getStackScrollForTask(task);
+
             getStackTransform(taskProgress, nonOverrideTaskProgress, stackScroll, focusState,
                     transformOut, frontTransform, false /* ignoreSingleTaskCase */, forceUpdate);
             return transformOut;
@@ -1031,7 +1059,6 @@
                     unfocusedDim *= MAX_DIM / (MAX_DIM - offset);
                 }
             }
-
             y = (mStackRect.top - mTaskRect.top) +
                     (int) Utilities.mapRange(focusState, unfocusedY, focusedY);
             z = Utilities.mapRange(Utilities.clamp01(boundedScrollUnfocusedNonOverrideRangeX),
@@ -1067,7 +1094,7 @@
      */
     float getStackScrollForTask(Task t) {
         Float overrideP = mTaskIndexOverrideMap.get(t.key.id, null);
-        if (overrideP == null) {
+        if (Recents.getConfiguration().isLowRamDevice || overrideP == null) {
             return (float) mTaskIndexMap.get(t.key.id, 0);
         }
         return overrideP;
@@ -1086,6 +1113,12 @@
      * offset (which is at the task's brightest point).
      */
     float getStackScrollForTaskAtInitialOffset(Task t) {
+        if (Recents.getConfiguration().isLowRamDevice) {
+            RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState();
+            return mTaskStackLowRamLayoutAlgorithm.getInitialScrollP(mNumStackTasks,
+                    launchState.launchedFromHome || launchState.launchedFromPipApp
+                            || launchState.launchedWithNextPipApp);
+        }
         float normX = getNormalizedXFromUnfocusedY(mInitialTopOffset, FROM_TOP);
         mUnfocusedRange.offset(0f);
         return Utilities.clamp((float) mTaskIndexMap.get(t.key.id, 0) - Math.max(0,
@@ -1098,6 +1131,9 @@
      * screen along the arc-length proportionally (1/arclength).
      */
     public float getDeltaPForY(int downY, int y) {
+        if (Recents.getConfiguration().isLowRamDevice) {
+            return mTaskStackLowRamLayoutAlgorithm.scrollToPercentage(downY - y);
+        }
         float deltaP = (float) (y - downY) / mStackRect.height() *
                 mUnfocusedCurveInterpolator.getArcLength();
         return -deltaP;
@@ -1108,6 +1144,9 @@
      * of the curve, map back to the screen y.
      */
     public int getYForDeltaP(float downScrollP, float p) {
+        if (Recents.getConfiguration().isLowRamDevice) {
+            return mTaskStackLowRamLayoutAlgorithm.percentageToScroll(downScrollP - p);
+        }
         int y = (int) ((p - downScrollP) * mStackRect.height() *
                 (1f / mUnfocusedCurveInterpolator.getArcLength()));
         return -y;
@@ -1300,6 +1339,11 @@
         if (mStackRect.isEmpty()) {
             return;
         }
+        if (Recents.getConfiguration().isLowRamDevice) {
+            mTaskStackLowRamLayoutAlgorithm.getBackOfStackTransform(mBackOfStackTransform, this);
+            mTaskStackLowRamLayoutAlgorithm.getFrontOfStackTransform(mFrontOfStackTransform, this);
+            return;
+        }
 
         float min = Utilities.mapRange(mFocusState, mUnfocusedRange.relativeMin,
                 mFocusedRange.relativeMin);
@@ -1317,6 +1361,9 @@
      * Returns the proper task rectangle according to the current grid state.
      */
     public Rect getTaskRect() {
+        if (Recents.getConfiguration().isLowRamDevice) {
+            return mTaskStackLowRamLayoutAlgorithm.getTaskRect();
+        }
         return useGridLayout() ? mTaskGridLayoutAlgorithm.getTaskGridRect() : mTaskRect;
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
index 6ad6a15..d32b220 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
@@ -219,6 +219,7 @@
     private boolean mResetToInitialStateWhenResized;
     private int mLastWidth;
     private int mLastHeight;
+    private boolean mStackActionButtonVisible;
 
     // We keep track of the task view focused by user interaction and draw a frame around it in the
     // grid layout.
@@ -287,6 +288,7 @@
         mDividerSize = ssp.getDockedDividerSize(context);
         mDisplayOrientation = Utilities.getAppConfiguration(mContext).orientation;
         mDisplayRect = ssp.getDisplayRect();
+        mStackActionButtonVisible = false;
 
         // Create a frame to draw around the focused task view
         if (Recents.getConfiguration().isGridEnabled) {
@@ -975,6 +977,9 @@
                 mLayoutAlgorithm.clearUnfocusedTaskOverrides();
                 willScroll = mAnimationHelper.startScrollToFocusedTaskAnimation(newFocusedTask,
                         requestViewFocus);
+                if (willScroll) {
+                    sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SCROLLED);
+                }
             } else {
                 // Focus the task view
                 TaskView newFocusedTaskView = getChildViewForTask(newFocusedTask);
@@ -1159,7 +1164,7 @@
             Task focusedTask = getAccessibilityFocusedTask();
             info.setScrollable(true);
             int focusedTaskIndex = mStack.indexOfStackTask(focusedTask);
-            if (focusedTaskIndex > 0) {
+            if (focusedTaskIndex > 0 || !mStackActionButtonVisible) {
                 info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
             }
             if (0 <= focusedTaskIndex && focusedTaskIndex < mStack.getTaskCount() - 1) {
@@ -1685,7 +1690,7 @@
         // If the doze trigger has already fired, then update the state for this task view
         if (mUIDozeTrigger.isAsleep() ||
                 Recents.getSystemServices().hasFreeformWorkspaceSupport() ||
-                useGridLayout()) {
+                useGridLayout() || Recents.getConfiguration().isLowRamDevice) {
             tv.setNoUserInteractionState();
         }
 
@@ -1764,6 +1769,16 @@
 
         // In grid layout, the stack action button always remains visible.
         if (mEnterAnimationComplete && !useGridLayout()) {
+            if (Recents.getConfiguration().isLowRamDevice) {
+                // Show stack button when user drags down to show older tasks on low ram devices
+                if (mStack.getTaskCount() > 0 && !mStackActionButtonVisible
+                        && mTouchHandler.mIsScrolling && curScroll - prevScroll < 0) {
+                    // Going up
+                    EventBus.getDefault().send(
+                            new ShowStackActionButtonEvent(true /* translate */));
+                }
+                return;
+            }
             if (prevScroll > SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&
                     curScroll <= SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&
                     mStack.getTaskCount() > 0) {
@@ -1811,6 +1826,18 @@
         }
     }
 
+    public final void onBusEvent(ShowStackActionButtonEvent event) {
+        if (RecentsDebugFlags.Static.EnableStackActionButton) {
+            mStackActionButtonVisible = true;
+        }
+    }
+
+    public final void onBusEvent(HideStackActionButtonEvent event) {
+        if (RecentsDebugFlags.Static.EnableStackActionButton) {
+            mStackActionButtonVisible = false;
+        }
+    }
+
     public final void onBusEvent(LaunchNextTaskRequestEvent event) {
         if (!mFinishedLayoutAfterStackReload) {
             mLaunchNextAfterFirstMeasure = true;
@@ -1938,6 +1965,9 @@
         // Remove the task from the stack
         mStack.removeTask(event.task, event.animation, false /* fromDockGesture */);
         EventBus.getDefault().send(new DeleteTaskDataEvent(event.task));
+        if (mStack.getTaskCount() > 0 && Recents.getConfiguration().isLowRamDevice) {
+            EventBus.getDefault().send(new ShowStackActionButtonEvent(false /* translate */));
+        }
 
         MetricsLogger.action(getContext(), MetricsEvent.OVERVIEW_DISMISS,
                 event.task.key.getComponent().toString());
@@ -2378,6 +2408,10 @@
     }
 
     private void updateStackActionButtonVisibility() {
+        if (Recents.getConfiguration().isLowRamDevice) {
+            return;
+        }
+
         // Always show the button in grid layout.
         if (useGridLayout() ||
                 (mStackScroller.getStackScroll() < SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java
index 8cd3d15..0b20b10 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java
@@ -19,17 +19,23 @@
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ObjectAnimator;
+import android.animation.TimeInterpolator;
+import android.animation.ValueAnimator;
 import android.content.Context;
 import android.util.FloatProperty;
 import android.util.Log;
 import android.util.MutableFloat;
 import android.util.Property;
+import android.view.ViewConfiguration;
 import android.view.ViewDebug;
 import android.widget.OverScroller;
 
 import com.android.systemui.Interpolators;
 import com.android.systemui.R;
+import com.android.systemui.recents.Recents;
 import com.android.systemui.recents.misc.Utilities;
+import com.android.systemui.recents.views.lowram.TaskStackLowRamLayoutAlgorithm;
+import com.android.systemui.statusbar.FlingAnimationUtils;
 
 import java.io.PrintWriter;
 
@@ -76,12 +82,18 @@
     ObjectAnimator mScrollAnimator;
     float mFinalAnimatedScroll;
 
+    final FlingAnimationUtils mFlingAnimationUtils;
+
     public TaskStackViewScroller(Context context, TaskStackViewScrollerCallbacks cb,
             TaskStackLayoutAlgorithm layoutAlgorithm) {
         mContext = context;
         mCb = cb;
         mScroller = new OverScroller(context);
+        if (Recents.getConfiguration().isLowRamDevice) {
+            mScroller.setFriction(0.06f);
+        }
         mLayoutAlgorithm = layoutAlgorithm;
+        mFlingAnimationUtils = new FlingAnimationUtils(context, 0.3f);
     }
 
     /** Resets the task scroller. */
@@ -186,6 +198,47 @@
         return Float.compare(getScrollAmountOutOfBounds(mStackScrollP), 0f) != 0;
     }
 
+    /**
+     * Scrolls the closest task and snaps into place. Only used in recents for low ram devices.
+     * @param velocity of scroll
+     */
+    void scrollToClosestTask(int velocity) {
+        float stackScroll = getStackScroll();
+
+        // Skip if not in low ram layout and if the scroll is out of min and max bounds
+        if (!Recents.getConfiguration().isLowRamDevice || stackScroll < mLayoutAlgorithm.mMinScrollP
+                || stackScroll > mLayoutAlgorithm.mMaxScrollP) {
+            return;
+        }
+        TaskStackLowRamLayoutAlgorithm algorithm = mLayoutAlgorithm.mTaskStackLowRamLayoutAlgorithm;
+
+        float flingThreshold = ViewConfiguration.get(mContext).getScaledMinimumFlingVelocity();
+        if (Math.abs(velocity) > flingThreshold) {
+            int minY = algorithm.percentageToScroll(mLayoutAlgorithm.mMinScrollP);
+            int maxY = algorithm.percentageToScroll(mLayoutAlgorithm.mMaxScrollP);
+
+            // Calculate the fling and snap to closest task from final y position, computeScroll()
+            // never runs when cancelled with animateScroll() and the overscroll is not calculated
+            // here
+            fling(0 /* downScrollP */, 0 /* downY */, algorithm.percentageToScroll(stackScroll),
+                    -velocity, minY, maxY, 0 /* overscroll */);
+            float pos = algorithm.scrollToPercentage(mScroller.getFinalY());
+
+            float newScrollP = algorithm.getClosestTaskP(pos, mLayoutAlgorithm.mNumStackTasks,
+                    velocity);
+            ValueAnimator animator = ObjectAnimator.ofFloat(stackScroll, newScrollP);
+            mFlingAnimationUtils.apply(animator, algorithm.percentageToScroll(stackScroll),
+                    algorithm.percentageToScroll(newScrollP), velocity);
+            animateScroll(newScrollP, (int) animator.getDuration(), animator.getInterpolator(),
+                    null /* postRunnable */);
+        } else {
+            float newScrollP = algorithm.getClosestTaskP(stackScroll,
+                    mLayoutAlgorithm.mNumStackTasks, velocity);
+            animateScroll(newScrollP, 300, Interpolators.ACCELERATE_DECELERATE,
+                    null /* postRunnable */);
+        }
+    }
+
     /** Animates the stack scroll into bounds */
     ObjectAnimator animateBoundScroll() {
         // TODO: Take duration for snap back
@@ -207,6 +260,21 @@
 
     /** Animates the stack scroll */
     void animateScroll(float newScroll, int duration, final Runnable postRunnable) {
+        animateScroll(newScroll, duration, Interpolators.LINEAR_OUT_SLOW_IN, postRunnable);
+    }
+
+    /** Animates the stack scroll with time interpolator */
+    void animateScroll(float newScroll, int duration, TimeInterpolator interpolator,
+            final Runnable postRunnable) {
+        ObjectAnimator an = ObjectAnimator.ofFloat(this, STACK_SCROLL, getStackScroll(), newScroll);
+        an.setDuration(duration);
+        an.setInterpolator(interpolator);
+        animateScroll(newScroll, an, postRunnable);
+    }
+
+    /** Animates the stack scroll with animator */
+    private void animateScroll(float newScroll, ObjectAnimator animator,
+            final Runnable postRunnable) {
         // Finish any current scrolling animations
         if (mScrollAnimator != null && mScrollAnimator.isRunning()) {
             setStackScroll(mFinalAnimatedScroll);
@@ -217,9 +285,7 @@
 
         if (Float.compare(mStackScrollP, newScroll) != 0) {
             mFinalAnimatedScroll = newScroll;
-            mScrollAnimator = ObjectAnimator.ofFloat(this, STACK_SCROLL, getStackScroll(), newScroll);
-            mScrollAnimator.setDuration(duration);
-            mScrollAnimator.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
+            mScrollAnimator = animator;
             mScrollAnimator.addListener(new AnimatorListenerAdapter() {
                 @Override
                 public void onAnimationEnd(Animator animation) {
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
index 36be49d..32a249c 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
@@ -294,10 +294,13 @@
                     if (curScrollP < minScrollP || curScrollP > maxScrollP) {
                         float clampedScrollP = Utilities.clamp(curScrollP, minScrollP, maxScrollP);
                         float overscrollP = (curScrollP - clampedScrollP);
-                        float overscrollX = Math.abs(overscrollP) / MAX_OVERSCROLL;
+                        float maxOverscroll = Recents.getConfiguration().isLowRamDevice
+                                ? layoutAlgorithm.mTaskStackLowRamLayoutAlgorithm.getMaxOverscroll()
+                                : MAX_OVERSCROLL;
+                        float overscrollX = Math.abs(overscrollP) / maxOverscroll;
                         float interpX = OVERSCROLL_INTERP.getInterpolation(overscrollX);
                         curScrollP = clampedScrollP + Math.signum(overscrollP) *
-                                (interpX * MAX_OVERSCROLL);
+                                (interpX * maxOverscroll);
                     }
                     mDownScrollP += mScroller.setDeltaStackScroll(mDownScrollP,
                             curScrollP - mDownScrollP);
@@ -333,7 +336,8 @@
                 if (mIsScrolling) {
                     if (mScroller.isScrollOutOfBounds()) {
                         mScroller.animateBoundScroll();
-                    } else if (Math.abs(velocity) > mMinimumVelocity) {
+                    } else if (Math.abs(velocity) > mMinimumVelocity &&
+                            !Recents.getConfiguration().isLowRamDevice) {
                         float minY = mDownY + layoutAlgorithm.getYForDeltaP(mDownScrollP,
                                 layoutAlgorithm.mMaxScrollP);
                         float maxY = mDownY + layoutAlgorithm.getYForDeltaP(mDownScrollP,
@@ -346,7 +350,11 @@
                     // Reset the focused task after the user has scrolled, but we have no scrolling
                     // in grid layout and therefore we don't want to reset the focus there.
                     if (!mSv.mTouchExplorationEnabled && !mSv.useGridLayout()) {
-                        mSv.resetFocusedTask(mSv.getFocusedTask());
+                        if (Recents.getConfiguration().isLowRamDevice) {
+                            mScroller.scrollToClosestTask(velocity);
+                        } else {
+                            mSv.resetFocusedTask(mSv.getFocusedTask());
+                        }
                     }
                 } else if (mActiveTaskView == null) {
                     // This tap didn't start on a task.
@@ -495,7 +503,13 @@
             float prevAnchorTaskScroll = 0;
             boolean pullStackForward = mCurrentTasks.size() > 0;
             if (pullStackForward) {
-                prevAnchorTaskScroll = layoutAlgorithm.getStackScrollForTask(anchorTask);
+                if (Recents.getConfiguration().isLowRamDevice) {
+                    float index = layoutAlgorithm.getStackScrollForTask(anchorTask);
+                    prevAnchorTaskScroll = mSv.getStackAlgorithm().mTaskStackLowRamLayoutAlgorithm
+                            .getScrollPForTask((int) index);
+                } else {
+                    prevAnchorTaskScroll = layoutAlgorithm.getStackScrollForTask(anchorTask);
+                }
             }
 
             // Calculate where the views would be without the deleting tasks
@@ -509,8 +523,14 @@
                 // Otherwise, offset the scroll by the movement of the anchor task
                 float anchorTaskScroll =
                         layoutAlgorithm.getStackScrollForTaskIgnoreOverrides(anchorTask);
+                if (Recents.getConfiguration().isLowRamDevice) {
+                    float index = layoutAlgorithm.getStackScrollForTask(anchorTask);
+                    anchorTaskScroll = mSv.getStackAlgorithm().mTaskStackLowRamLayoutAlgorithm
+                            .getScrollPForTask((int) index);
+                }
                 float stackScrollOffset = (anchorTaskScroll - prevAnchorTaskScroll);
-                if (layoutAlgorithm.getFocusState() != TaskStackLayoutAlgorithm.STATE_FOCUSED) {
+                if (layoutAlgorithm.getFocusState() != TaskStackLayoutAlgorithm.STATE_FOCUSED
+                        && !Recents.getConfiguration().isLowRamDevice) {
                     // If we are focused, we don't want the front task to move, but otherwise, we
                     // allow the back task to move up, and the front task to move back
                     stackScrollOffset *= 0.75f;
@@ -543,7 +563,8 @@
     public boolean updateSwipeProgress(View v, boolean dismissable, float swipeProgress) {
         // Only update the swipe progress for the surrounding tasks if the dismiss animation was not
         // preempted from a call to cancelNonDismissTaskAnimations
-        if (mActiveTaskView == v || mSwipeHelperAnimations.containsKey(v)) {
+        if ((mActiveTaskView == v || mSwipeHelperAnimations.containsKey(v)) &&
+                !Recents.getConfiguration().isLowRamDevice) {
             updateTaskViewTransforms(
                     Interpolators.FAST_OUT_SLOW_IN.getInterpolation(swipeProgress));
         }
@@ -561,6 +582,10 @@
         tv.setClipViewInStack(true);
         // Re-enable touch events from this task view
         tv.setTouchEnabled(true);
+        // Update the scroll to the final scroll position before laying out the tasks during dismiss
+        if (mSwipeHelperAnimations.containsKey(v)) {
+            mSv.getScroller().setStackScroll(mTargetStackScroll, null);
+        }
         // Remove the task view from the stack, ignoring the animation if we've started dragging
         // again
         EventBus.getDefault().send(new TaskViewDismissedEvent(tv.getTask(), tv,
@@ -571,8 +596,6 @@
         // Only update the final scroll and layout state (set in onBeginDrag()) if the dismiss
         // animation was not preempted from a call to cancelNonDismissTaskAnimations
         if (mSwipeHelperAnimations.containsKey(v)) {
-            // Update the scroll to the final scroll position
-            mSv.getScroller().setStackScroll(mTargetStackScroll, null);
             // Update the focus state to the final focus state
             mSv.getStackAlgorithm().setFocusState(TaskStackLayoutAlgorithm.STATE_UNFOCUSED);
             mSv.getStackAlgorithm().clearUnfocusedTaskOverrides();
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
index 17204a4..ceeebd96 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
@@ -416,7 +416,8 @@
      */
     boolean shouldClipViewInStack() {
         // Never clip for freeform tasks or if invisible
-        if (mTask.isFreeformTask() || getVisibility() != View.VISIBLE) {
+        if (mTask.isFreeformTask() || getVisibility() != View.VISIBLE ||
+                Recents.getConfiguration().isLowRamDevice) {
             return false;
         }
         return mClipViewInStack;
@@ -684,6 +685,9 @@
 
     @Override
     public boolean onLongClick(View v) {
+        if (!Recents.getConfiguration().dragToSplitEnabled) {
+            return false;
+        }
         SystemServicesProxy ssp = Recents.getSystemServices();
         boolean inBounds = false;
         Rect clipBounds = new Rect(mViewBounds.mClipBounds);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/grid/GridTaskViewThumbnail.java b/packages/SystemUI/src/com/android/systemui/recents/views/grid/GridTaskViewThumbnail.java
index bcf4f17..2d7cfb1 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/grid/GridTaskViewThumbnail.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/grid/GridTaskViewThumbnail.java
@@ -26,8 +26,8 @@
 
 public class GridTaskViewThumbnail extends TaskViewThumbnail {
 
-    private Path mThumbnailOutline;
-    private Path mRestBackgroundOutline;
+    private final Path mThumbnailOutline = new Path();
+    private final Path mRestBackgroundOutline = new Path();
     // True if either this view's size or thumbnail scale has changed and mThumbnailOutline should
     // be updated.
     private boolean mUpdateThumbnailOutline = true;
@@ -77,47 +77,38 @@
             (int) (mThumbnailRect.width() * mThumbnailScale));
         final int thumbnailHeight = Math.min(viewHeight,
             (int) (mThumbnailRect.height() * mThumbnailScale));
-        // Draw the thumbnail, we only round the bottom corners:
-        //
-        // outerLeft                outerRight
-        //    <----------------------->            mRestBackgroundOutline
-        //    _________________________            (thumbnailWidth < viewWidth)
-        //    |_______________________| outerTop     A ____ B
-        //    |                       |    ↑           |  |
-        //    |                       |    |           |  |
-        //    |                       |    |           |  |
-        //    |                       |    |           |  | C
-        //    \_______________________/    ↓           |__/
-        //  mCornerRadius             outerBottom    E    D
-        //
-        //  mRestBackgroundOutline (thumbnailHeight < viewHeight)
-        //  A _________________________ B
-        //    |                       | C
-        //  F \_______________________/
-        //    E                       D
-        final int outerLeft = 0;
-        final int outerTop = 0;
-        final int outerRight = outerLeft + thumbnailWidth;
-        final int outerBottom = outerTop + thumbnailHeight;
-        mThumbnailOutline = new Path();
-        mThumbnailOutline.moveTo(outerLeft, outerTop);
-        mThumbnailOutline.lineTo(outerRight, outerTop);
-        mThumbnailOutline.lineTo(outerRight, outerBottom - mCornerRadius);
-        mThumbnailOutline.arcTo(outerRight -  2 * mCornerRadius, outerBottom - 2 * mCornerRadius,
-                outerRight, outerBottom, 0, 90, false);
-        mThumbnailOutline.lineTo(outerLeft + mCornerRadius, outerBottom);
-        mThumbnailOutline.arcTo(outerLeft, outerBottom - 2 * mCornerRadius,
-                outerLeft + 2 * mCornerRadius, outerBottom, 90, 90, false);
-        mThumbnailOutline.lineTo(outerLeft, outerTop);
-        mThumbnailOutline.close();
 
         if (mBitmapShader != null && thumbnailWidth > 0 && thumbnailHeight > 0) {
+            // Draw the thumbnail, we only round the bottom corners:
+            //
+            // outerLeft                outerRight
+            //    <----------------------->            mRestBackgroundOutline
+            //    _________________________            (thumbnailWidth < viewWidth)
+            //    |_______________________| outerTop     A ____ B
+            //    |                       |    ↑           |  |
+            //    |                       |    |           |  |
+            //    |                       |    |           |  |
+            //    |                       |    |           |  | C
+            //    \_______________________/    ↓           |__/
+            //  mCornerRadius             outerBottom    E    D
+            //
+            //  mRestBackgroundOutline (thumbnailHeight < viewHeight)
+            //  A _________________________ B
+            //    |                       | C
+            //  F \_______________________/
+            //    E                       D
+            final int outerLeft = 0;
+            final int outerTop = 0;
+            final int outerRight = outerLeft + thumbnailWidth;
+            final int outerBottom = outerTop + thumbnailHeight;
+            createThumbnailPath(outerLeft, outerTop, outerRight, outerBottom, mThumbnailOutline);
+
             if (thumbnailWidth < viewWidth) {
                 final int l = Math.max(0, outerRight - mCornerRadius);
                 final int r = outerRight;
                 final int t = outerTop;
                 final int b = outerBottom;
-                mRestBackgroundOutline = new Path();
+                mRestBackgroundOutline.reset();
                 mRestBackgroundOutline.moveTo(l, t); // A
                 mRestBackgroundOutline.lineTo(r, t); // B
                 mRestBackgroundOutline.lineTo(r, b - mCornerRadius); // C
@@ -133,7 +124,7 @@
                 final int r = outerRight;
                 final int t = Math.max(0, thumbnailHeight - mCornerRadius);
                 final int b = outerBottom;
-                mRestBackgroundOutline = new Path();
+                mRestBackgroundOutline.reset();
                 mRestBackgroundOutline.moveTo(l, t); // A
                 mRestBackgroundOutline.lineTo(r, t); // B
                 mRestBackgroundOutline.lineTo(r, b - mCornerRadius); // C
@@ -145,9 +136,26 @@
                 mRestBackgroundOutline.lineTo(l, t); // A
                 mRestBackgroundOutline.close();
             }
+        } else {
+            createThumbnailPath(0, 0, viewWidth, viewHeight, mThumbnailOutline);
         }
     }
 
+    private void createThumbnailPath(int outerLeft, int outerTop, int outerRight, int outerBottom,
+            Path outPath) {
+        outPath.reset();
+        outPath.moveTo(outerLeft, outerTop);
+        outPath.lineTo(outerRight, outerTop);
+        outPath.lineTo(outerRight, outerBottom - mCornerRadius);
+        outPath.arcTo(outerRight -  2 * mCornerRadius, outerBottom - 2 * mCornerRadius, outerRight,
+                outerBottom, 0, 90, false);
+        outPath.lineTo(outerLeft + mCornerRadius, outerBottom);
+        outPath.arcTo(outerLeft, outerBottom - 2 * mCornerRadius, outerLeft + 2 * mCornerRadius,
+                outerBottom, 90, 90, false);
+        outPath.lineTo(outerLeft, outerTop);
+        outPath.close();
+    }
+
     @Override
     protected void onDraw(Canvas canvas) {
         final int titleHeight = getResources().getDimensionPixelSize(
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/lowram/TaskStackLowRamLayoutAlgorithm.java b/packages/SystemUI/src/com/android/systemui/recents/views/lowram/TaskStackLowRamLayoutAlgorithm.java
new file mode 100644
index 0000000..17e6b9e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/lowram/TaskStackLowRamLayoutAlgorithm.java
@@ -0,0 +1,261 @@
+/*
+ * 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.recents.views.lowram;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.view.ViewConfiguration;
+
+import com.android.systemui.R;
+import com.android.systemui.recents.Recents;
+import com.android.systemui.recents.RecentsActivityLaunchState;
+import com.android.systemui.recents.misc.Utilities;
+import com.android.systemui.recents.model.Task;
+import com.android.systemui.recents.views.TaskStackLayoutAlgorithm;
+import com.android.systemui.recents.views.TaskViewTransform;
+
+import java.util.ArrayList;
+
+import static com.android.systemui.recents.views.TaskStackLayoutAlgorithm.VisibilityReport;
+
+public class TaskStackLowRamLayoutAlgorithm {
+
+    private static final String TAG = "TaskStackLowRamLayoutAlgorithm";
+    private static final float MAX_OVERSCROLL = 0.2f / 0.3f;
+
+    public static final int MAX_LAYOUT_TASK_COUNT = 9;
+    public static final int NUM_TASK_VISIBLE_LAUNCHED_FROM_HOME = 2;
+    public static final int NUM_TASK_VISIBLE_LAUNCHED_FROM_APP =
+            NUM_TASK_VISIBLE_LAUNCHED_FROM_HOME + 1;
+    private Rect mWindowRect;
+
+    private int mFlingThreshold;
+    private int mPadding;
+    private int mPaddingLeftRight;
+    private int mTopOffset;
+    private int mPaddingEndTopBottom;
+    private Rect mTaskRect = new Rect();
+    private Rect mSystemInsets = new Rect();
+
+    public TaskStackLowRamLayoutAlgorithm(Context context) {
+        reloadOnConfigurationChange(context);
+    }
+
+    public void reloadOnConfigurationChange(Context context) {
+        mPadding = context.getResources()
+                .getDimensionPixelSize(R.dimen.recents_layout_side_margin_phone);
+        mFlingThreshold = ViewConfiguration.get(context).getScaledMinimumFlingVelocity();
+    }
+
+    public void initialize(Rect windowRect) {
+        mWindowRect = windowRect;
+        if (mWindowRect.height() > 0) {
+            int windowHeight = mWindowRect.height() - mSystemInsets.bottom;
+            int windowWidth = mWindowRect.width() - mSystemInsets.right - mSystemInsets.left;
+            int width = Math.min(windowWidth, windowHeight) - mPadding * 2;
+            boolean isLandscape = windowWidth > windowHeight;
+            mTaskRect.set(0, 0, width, isLandscape ? width * 2 / 3 : width);
+            mPaddingLeftRight = (windowWidth - mTaskRect.width()) / 2;
+            mPaddingEndTopBottom = (windowHeight - mTaskRect.height()) / 2;
+
+            // Compute the top offset to center tasks in the middle of the screen
+            mTopOffset = (getTotalHeightOfTasks(MAX_LAYOUT_TASK_COUNT) - windowHeight) / 2;
+        }
+    }
+
+    public void setSystemInsets(Rect systemInsets) {
+        mSystemInsets = systemInsets;
+    }
+
+    public VisibilityReport computeStackVisibilityReport(ArrayList<Task> tasks) {
+        RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState();
+        int maxVisible = launchState.launchedFromHome || launchState.launchedFromPipApp
+                    || launchState.launchedWithNextPipApp
+                ? NUM_TASK_VISIBLE_LAUNCHED_FROM_HOME
+                : NUM_TASK_VISIBLE_LAUNCHED_FROM_APP;
+        int visibleCount = Math.min(maxVisible, tasks.size());
+        return new VisibilityReport(visibleCount, visibleCount);
+    }
+
+    public void getFrontOfStackTransform(TaskViewTransform transformOut,
+            TaskStackLayoutAlgorithm stackLayout) {
+        if (mWindowRect == null) {
+            transformOut.reset();
+            return;
+        }
+
+        // Calculate the static task y position 2 tasks after/below the middle/current task
+        int windowHeight = mWindowRect.height() - mSystemInsets.bottom;
+        int bottomOfCurrentTask = (windowHeight + mTaskRect.height()) / 2;
+        int y = bottomOfCurrentTask + mTaskRect.height() + mPadding * 2;
+        fillStackTransform(transformOut, y, stackLayout.mMaxTranslationZ, true);
+    }
+
+    public void getBackOfStackTransform(TaskViewTransform transformOut,
+            TaskStackLayoutAlgorithm stackLayout) {
+        if (mWindowRect == null) {
+            transformOut.reset();
+            return;
+        }
+
+        // Calculate the static task y position 2 tasks before/above the middle/current task
+        int windowHeight = mWindowRect.height() - mSystemInsets.bottom;
+        int topOfCurrentTask = (windowHeight - mTaskRect.height()) / 2;
+        int y = topOfCurrentTask - (mTaskRect.height() + mPadding) * 2;
+        fillStackTransform(transformOut, y, stackLayout.mMaxTranslationZ, true);
+    }
+
+    public TaskViewTransform getTransform(int taskIndex, float stackScroll,
+            TaskViewTransform transformOut, int taskCount, TaskStackLayoutAlgorithm stackLayout) {
+        if (taskCount == 0) {
+            transformOut.reset();
+            return transformOut;
+        }
+        boolean visible = true;
+        int y;
+        if (taskCount > 1) {
+            y = getTaskTopFromIndex(taskIndex) - percentageToScroll(stackScroll);
+
+            // Check visibility from the bottom of the task
+            visible = y + mPadding + getTaskRect().height() > 0;
+        } else {
+            int windowHeight = mWindowRect.height() - mSystemInsets.bottom;
+            y = (windowHeight - mTaskRect.height()) / 2 - percentageToScroll(stackScroll);
+        }
+        fillStackTransform(transformOut, y, stackLayout.mMaxTranslationZ, visible);
+        return transformOut;
+    }
+
+    /**
+     * Finds the closest task to the scroll percentage in the y axis and returns the percentage of
+     * the task to scroll to.
+     * @param scrollP percentage to find nearest to
+     * @param numTasks number of tasks in recents stack
+     * @param velocity speed of fling
+     */
+    public float getClosestTaskP(float scrollP, int numTasks, int velocity) {
+        int y = percentageToScroll(scrollP);
+
+        int lastY = getTaskTopFromIndex(0) - mPaddingEndTopBottom;
+        for (int i = 1; i < numTasks; i++) {
+            int taskY = getTaskTopFromIndex(i) - mPaddingEndTopBottom;
+            int diff = taskY - y;
+            if (diff > 0) {
+                int diffPrev = Math.abs(y - lastY);
+                boolean useNext = diff > diffPrev;
+                if (Math.abs(velocity) > mFlingThreshold) {
+                    useNext = velocity > 0;
+                }
+                return useNext
+                        ? scrollToPercentage(lastY) : scrollToPercentage(taskY);
+            }
+            lastY = taskY;
+        }
+        return scrollToPercentage(lastY);
+    }
+
+    /**
+     * Convert a scroll value to a percentage
+     * @param scroll a scroll value
+     * @return a percentage that represents the scroll from the total height of tasks
+     */
+    public float scrollToPercentage(int scroll) {
+        return (float) scroll / (mTaskRect.height() + mPadding);
+    }
+
+    /**
+     * Converts a percentage to the scroll value from the total height of tasks
+     * @param p a percentage that represents the scroll value
+     * @return a scroll value in pixels
+     */
+    public int percentageToScroll(float p) {
+        return (int) (p * (mTaskRect.height() + mPadding));
+    }
+
+    /**
+     * Get the min scroll progress for low ram layout. This computes the top position of the
+     * first task and reduce by the end padding to center the first task
+     * @return position of max scroll
+     */
+    public float getMinScrollP() {
+        return getScrollPForTask(0);
+    }
+
+    /**
+     * Get the max scroll progress for low ram layout. This computes the top position of the last
+     * task and reduce by the end padding to center the last task
+     * @param taskCount the amount of tasks in the recents stack
+     * @return position of max scroll
+     */
+    public float getMaxScrollP(int taskCount) {
+        return getScrollPForTask(taskCount - 1);
+    }
+
+    /**
+     * Get the initial scroll value whether launched from home or from an app.
+     * @param taskCount the amount of tasks currently in recents
+     * @param fromHome if launching recents from home or not
+     * @return from home it will return max value and from app it will return 2nd last task
+     */
+    public float getInitialScrollP(int taskCount, boolean fromHome) {
+        if (fromHome) {
+            return getMaxScrollP(taskCount);
+        }
+        if (taskCount < 2) {
+            return 0;
+        }
+        return getScrollPForTask(taskCount - 2);
+    }
+
+    /**
+     * Get the scroll progress for any task
+     * @param taskIndex task index to get the scroll progress of
+     * @return scroll progress of task
+     */
+    public float getScrollPForTask(int taskIndex) {
+        return scrollToPercentage(getTaskTopFromIndex(taskIndex) - mPaddingEndTopBottom);
+    }
+
+    public Rect getTaskRect() {
+        return mTaskRect;
+    }
+
+    public float getMaxOverscroll() {
+        return MAX_OVERSCROLL;
+    }
+
+    private int getTaskTopFromIndex(int index) {
+        return getTotalHeightOfTasks(index) - mTopOffset;
+    }
+
+    private int getTotalHeightOfTasks(int taskCount) {
+        return taskCount * mTaskRect.height() + (taskCount + 1) * mPadding;
+    }
+
+    private void fillStackTransform(TaskViewTransform transformOut, int y, int translationZ,
+            boolean visible) {
+        transformOut.scale = 1f;
+        transformOut.alpha = 1f;
+        transformOut.translationZ = translationZ;
+        transformOut.dimAlpha = 0f;
+        transformOut.viewOutlineAlpha = 1f;
+        transformOut.rect.set(getTaskRect());
+        transformOut.rect.offset(mPaddingLeftRight + mSystemInsets.left, y);
+        Utilities.scaleRectAboutCenter(transformOut.rect, transformOut.scale);
+        transformOut.visible = visible;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index a2409d1..991c3c8 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -16,11 +16,16 @@
 
 package com.android.systemui.screenshot;
 
+import static com.android.systemui.screenshot.GlobalScreenshot.SHARING_INTENT;
+import static com.android.systemui.statusbar.phone.StatusBar.SYSTEM_DIALOG_REASON_SCREENSHOT;
+
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
 import android.animation.ValueAnimator;
 import android.animation.ValueAnimator.AnimatorUpdateListener;
+import android.app.ActivityManager;
+import android.app.ActivityOptions;
 import android.app.admin.DevicePolicyManager;
 import android.app.Notification;
 import android.app.Notification.BigPictureStyle;
@@ -46,7 +51,9 @@
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Environment;
+import android.os.PowerManager;
 import android.os.Process;
+import android.os.RemoteException;
 import android.os.UserHandle;
 import android.provider.MediaStore;
 import android.util.DisplayMetrics;
@@ -61,6 +68,7 @@
 import android.view.WindowManager;
 import android.view.animation.Interpolator;
 import android.widget.ImageView;
+import android.widget.Toast;
 
 import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
 import com.android.systemui.R;
@@ -275,14 +283,13 @@
             sharingIntent.putExtra(Intent.EXTRA_STREAM, uri);
             sharingIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
 
-            // Create a share action for the notification
-            PendingIntent chooseAction = PendingIntent.getBroadcast(context, 0,
-                    new Intent(context, GlobalScreenshot.TargetChosenReceiver.class),
-                    PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
-            Intent chooserIntent = Intent.createChooser(sharingIntent, null,
-                    chooseAction.getIntentSender())
-                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
-            PendingIntent shareAction = PendingIntent.getActivity(context, 0, chooserIntent,
+            // Create a share action for the notification. Note, we proxy the call to ShareReceiver
+            // because RemoteViews currently forces an activity options on the PendingIntent being
+            // launched, and since we don't want to trigger the share sheet in this case, we will
+            // start the chooser activitiy directly in ShareReceiver.
+            PendingIntent shareAction = PendingIntent.getBroadcast(context, 0,
+                    new Intent(context, GlobalScreenshot.ShareReceiver.class)
+                            .putExtra(SHARING_INTENT, sharingIntent),
                     PendingIntent.FLAG_CANCEL_CURRENT);
             Notification.Action.Builder shareActionBuilder = new Notification.Action.Builder(
                     R.drawable.ic_screenshot_share,
@@ -290,7 +297,7 @@
             mNotificationBuilder.addAction(shareActionBuilder.build());
 
             // Create a delete action for the notification
-            PendingIntent deleteAction = PendingIntent.getBroadcast(context,  0,
+            PendingIntent deleteAction = PendingIntent.getBroadcast(context, 0,
                     new Intent(context, GlobalScreenshot.DeleteScreenshotReceiver.class)
                             .putExtra(GlobalScreenshot.SCREENSHOT_URI_ID, uri.toString()),
                     PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
@@ -401,6 +408,7 @@
 
 class GlobalScreenshot {
     static final String SCREENSHOT_URI_ID = "android:screenshot_uri_id";
+    static final String SHARING_INTENT = "android:screenshot_sharing_intent";
 
     private static final int SCREENSHOT_FLASH_TO_PEAK_DURATION = 130;
     private static final int SCREENSHOT_DROP_IN_DURATION = 430;
@@ -476,7 +484,6 @@
                 ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, 0, 0,
                 WindowManager.LayoutParams.TYPE_SCREENSHOT,
                 WindowManager.LayoutParams.FLAG_FULLSCREEN
-                    | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
                     | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                     | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED,
                 PixelFormat.TRANSLUCENT);
@@ -679,6 +686,13 @@
      */
     private void startAnimation(final Runnable finisher, int w, int h, boolean statusBarVisible,
             boolean navBarVisible) {
+        // If power save is on, show a toast so there is some visual indication that a screenshot
+        // has been taken.
+        PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
+        if (powerManager.isPowerSaveMode()) {
+            Toast.makeText(mContext, R.string.screenshot_saved_title, Toast.LENGTH_SHORT).show();
+        }
+
         // Add the view for the animation
         mScreenshotView.setImageBitmap(mScreenBitmap);
         mScreenshotLayout.requestFocus();
@@ -889,6 +903,30 @@
     }
 
     /**
+     * Receiver to proxy the share intent.
+     */
+    public static class ShareReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            try {
+                ActivityManager.getService().closeSystemDialogs(SYSTEM_DIALOG_REASON_SCREENSHOT);
+            } catch (RemoteException e) {
+            }
+
+            Intent sharingIntent = intent.getParcelableExtra(SHARING_INTENT);
+            PendingIntent chooseAction = PendingIntent.getBroadcast(context, 0,
+                    new Intent(context, GlobalScreenshot.TargetChosenReceiver.class),
+                    PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
+            Intent chooserIntent = Intent.createChooser(sharingIntent, null,
+                    chooseAction.getIntentSender())
+                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
+            ActivityOptions opts = ActivityOptions.makeBasic();
+            opts.setDisallowEnterPictureInPictureWhileLaunching(true);
+            context.startActivityAsUser(chooserIntent, opts.toBundle(), UserHandle.CURRENT);
+        }
+    }
+
+    /**
      * Removes the notification for a screenshot after a share target is chosen.
      */
     public static class TargetChosenReceiver extends BroadcastReceiver {
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
index 45835d5..23a7dae 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
@@ -64,11 +64,10 @@
 import com.android.systemui.R;
 import com.android.systemui.recents.Recents;
 import com.android.systemui.recents.events.EventBus;
+import com.android.systemui.recents.events.activity.DockedFirstAnimationFrameEvent;
 import com.android.systemui.recents.events.activity.DockedTopTaskEvent;
 import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent;
-import com.android.systemui.recents.events.activity.ToggleRecentsEvent;
 import com.android.systemui.recents.events.activity.UndockingTaskEvent;
-import com.android.systemui.recents.events.ui.RecentsDrawnEvent;
 import com.android.systemui.recents.events.ui.RecentsGrowingEvent;
 import com.android.systemui.recents.misc.SystemServicesProxy;
 import com.android.systemui.stackdivider.events.StartedDragingEvent;
@@ -124,7 +123,7 @@
     private int mTouchSlop;
     private boolean mBackgroundLifted;
     private boolean mIsInMinimizeInteraction;
-    private int mDividerPositionBeforeMinimized;
+    private SnapTarget mSnapTargetBeforeMinimized;
 
     private int mDividerInsets;
     private int mDisplayWidth;
@@ -318,6 +317,12 @@
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
         EventBus.getDefault().register(this);
+
+        // Save the current target if not minimized once attached to window
+        if (mHomeStackResizable && mDockSide != WindowManager.DOCKED_INVALID
+                && !mIsInMinimizeInteraction) {
+            saveSnapTargetBeforeMinimized(mSnapTargetBeforeMinimized);
+        }
     }
 
     @Override
@@ -381,8 +386,10 @@
                 (isHorizontalDivision() ? mDisplayHeight : mDisplayWidth));
         mSnapAlgorithm = null;
         initializeSnapAlgorithm();
-        mDividerPositionBeforeMinimized = mSnapAlgorithm.calculateNonDismissingSnapTarget(position)
-                .position;
+
+        // 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);
     }
 
     public WindowManagerProxy getWindowManagerProxy() {
@@ -596,11 +603,16 @@
         Runnable endAction = () -> {
             commitSnapFlags(snapTarget);
             mWindowManagerProxy.setResizing(false);
-            mDockSide = WindowManager.DOCKED_INVALID;
+            updateDockSide();
             mCurrentAnimator = null;
             mEntranceAnimationRunning = false;
             mExitAnimationRunning = false;
             EventBus.getDefault().send(new StoppedDragingEvent());
+
+            // Record last snap target the divider moved to
+            if (mHomeStackResizable && !mIsInMinimizeInteraction) {
+                saveSnapTargetBeforeMinimized(snapTarget);
+            }
         };
         Runnable notCancelledEndAction = () -> {
             // Reset minimized divider position after unminimized state animation finishes
@@ -629,15 +641,15 @@
                     delay = mSfChoreographer.getSurfaceFlingerOffsetMs();
                 }
                 if (delay == 0) {
-                    endAction.run();
                     if (!mCancelled) {
                         notCancelledEndAction.run();
                     }
+                    endAction.run();
                 } else {
-                    mHandler.postDelayed(endAction, delay);
                     if (!mCancelled) {
                         mHandler.postDelayed(notCancelledEndAction, delay);
                     }
+                    mHandler.postDelayed(endAction, delay);
                 }
             }
         });
@@ -744,12 +756,9 @@
             if (mIsInMinimizeInteraction != minimized) {
                 if (minimized) {
                     mIsInMinimizeInteraction = true;
-                    int position = mMinimizedSnapAlgorithm.getMiddleTarget().position;
-                    resizeStack(position, position, mMinimizedSnapAlgorithm.getMiddleTarget());
+                    resizeStack(mMinimizedSnapAlgorithm.getMiddleTarget());
                 } else {
-                    resizeStack(mDividerPositionBeforeMinimized, mDividerPositionBeforeMinimized,
-                            mSnapAlgorithm.calculateNonDismissingSnapTarget(
-                                    mDividerPositionBeforeMinimized));
+                    resizeStack(mSnapTargetBeforeMinimized);
                     mIsInMinimizeInteraction = false;
                 }
             }
@@ -786,20 +795,15 @@
             mDockedStackMinimized = minimized;
         } else if (mDockedStackMinimized != minimized) {
             mIsInMinimizeInteraction = true;
-            if (minimized && (mCurrentAnimator == null || !mCurrentAnimator.isRunning())
-                    && (mDividerPositionBeforeMinimized <= 0 || !mAdjustedForIme)) {
-                savePositionBeforeMinimized();
-            }
             mMinimizedSnapAlgorithm = null;
             mDockedStackMinimized = minimized;
             initializeSnapAlgorithm();
             stopDragging(minimized
-                            ? mDividerPositionBeforeMinimized
+                            ? mSnapTargetBeforeMinimized.position
                             : getCurrentPosition(),
                     minimized
                             ? mMinimizedSnapAlgorithm.getMiddleTarget()
-                            : mSnapAlgorithm.calculateNonDismissingSnapTarget(
-                                    mDividerPositionBeforeMinimized),
+                            : mSnapTargetBeforeMinimized,
                     animDuration, Interpolators.FAST_OUT_SLOW_IN, 0);
             setAdjustedForIme(false, animDuration);
         }
@@ -844,17 +848,11 @@
                 .setDuration(animDuration)
                 .start();
         mAdjustedForIme = adjustedForIme;
-
-        // Only get new position if home stack is resizable, ime is open and not minimized
-        // (including the animation)
-        if (mHomeStackResizable && adjustedForIme && !mIsInMinimizeInteraction) {
-            savePositionBeforeMinimized();
-        }
     }
 
-    private void savePositionBeforeMinimized() {
-        mDividerPositionBeforeMinimized = getCurrentPosition();
-        mState.mRatioPositionBeforeMinimized = (float) mDividerPositionBeforeMinimized /
+    private void saveSnapTargetBeforeMinimized(SnapTarget target) {
+        mSnapTargetBeforeMinimized = target;
+        mState.mRatioPositionBeforeMinimized = (float) target.position /
                 (isHorizontalDivision() ? mDisplayHeight : mDisplayWidth);
     }
 
@@ -872,7 +870,6 @@
         updateDisplayInfo();
     }
 
-
     public void notifyDockSideChanged(int newDockSide) {
         mDockSide = newDockSide;
         mMinimizedShadow.setDockSide(mDockSide);
@@ -934,6 +931,10 @@
         mSfChoreographer.scheduleAtSfVsync(mHandler, message);
     }
 
+    private void resizeStack(SnapTarget taskSnapTarget) {
+        resizeStack(taskSnapTarget.position, taskSnapTarget.position, taskSnapTarget);
+    }
+
     public void resizeStack(int position, int taskPosition, SnapTarget taskSnapTarget) {
         if (mRemoved) {
             // This divider view has been removed so shouldn't have any additional influence.
@@ -952,8 +953,9 @@
 
         mLastResizeRect.set(mDockedRect);
         if (mHomeStackResizable && mIsInMinimizeInteraction) {
-            calculateBoundsForPosition(mDividerPositionBeforeMinimized, mDockSide, mDockedTaskRect);
-            calculateBoundsForPosition(mDividerPositionBeforeMinimized,
+            calculateBoundsForPosition(mSnapTargetBeforeMinimized.position, mDockSide,
+                    mDockedTaskRect);
+            calculateBoundsForPosition(mSnapTargetBeforeMinimized.position,
                     DockedDividerUtils.invertDockSide(mDockSide), mOtherTaskRect);
             mWindowManagerProxy.resizeDockedStack(mDockedRect, mDockedTaskRect, mDockedTaskRect,
                     mOtherTaskRect, null);
@@ -1209,6 +1211,10 @@
         }
     }
 
+    public final void onBusEvent(DockedFirstAnimationFrameEvent event) {
+        saveSnapTargetBeforeMinimized(mSnapAlgorithm.getMiddleTarget());
+    }
+
     public final void onBusEvent(DockedTopTaskEvent event) {
         if (event.dragMode == NavigationBarGestureHelper.DRAG_MODE_NONE) {
             mState.growAfterRecentsDrawn = false;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
index 29b720c..68fe9a8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
@@ -214,15 +214,24 @@
         mFakeShadow = findViewById(R.id.fake_shadow);
         mShadowHidden = mFakeShadow.getVisibility() != VISIBLE;
         mBackgroundDimmed = findViewById(R.id.backgroundDimmed);
-        mBackgroundNormal.setCustomBackground(R.drawable.notification_material_bg);
-        mBackgroundDimmed.setCustomBackground(R.drawable.notification_material_bg_dim);
         mDimmedAlpha = Color.alpha(mContext.getColor(
                 R.color.notification_material_background_dimmed_color));
+        initBackground();
         updateBackground();
         updateBackgroundTint();
         updateOutlineAlpha();
     }
 
+    /**
+     * Sets the custom backgrounds on {@link #mBackgroundNormal} and {@link #mBackgroundDimmed}.
+     * This method can also be used to reload the backgrounds on both of those views, which can
+     * be useful in a configuration change.
+     */
+    protected void initBackground() {
+        mBackgroundNormal.setCustomBackground(R.drawable.notification_material_bg);
+        mBackgroundDimmed.setCustomBackground(R.drawable.notification_material_bg_dim);
+    }
+
     private final Runnable mTapTimeoutRunnable = new Runnable() {
         @Override
         public void run() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 2f4cd0d..6349275 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -79,7 +79,9 @@
     private static final int MSG_DISMISS_KEYBOARD_SHORTCUTS    = 32 << MSG_SHIFT;
     private static final int MSG_HANDLE_SYSTEM_KEY             = 33 << MSG_SHIFT;
     private static final int MSG_SHOW_GLOBAL_ACTIONS           = 34 << MSG_SHIFT;
-    private static final int MSG_SHOW_SHUTDOWN_UI              = 35 << MSG_SHIFT;
+    private static final int MSG_TOGGLE_PANEL                  = 35 << MSG_SHIFT;
+    private static final int MSG_SHOW_SHUTDOWN_UI              = 36 << MSG_SHIFT;
+    private static final int MSG_SET_TOP_APP_HIDES_STATUS_BAR  = 37 << MSG_SHIFT;
 
     public static final int FLAG_EXCLUDE_NONE = 0;
     public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0;
@@ -105,6 +107,7 @@
         default void disable(int state1, int state2, boolean animate) { }
         default void animateExpandNotificationsPanel() { }
         default void animateCollapsePanels(int flags) { }
+        default void togglePanel() { }
         default void animateExpandSettingsPanel(String obj) { }
         default void setSystemUiVisibility(int vis, int fullscreenStackVis,
                 int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds) {
@@ -130,6 +133,7 @@
         default void startAssist(Bundle args) { }
         default void onCameraLaunchGestureDetected(int source) { }
         default void showPictureInPictureMenu() { }
+        default void setTopAppHidesStatusBar(boolean topAppHidesStatusBar) { }
 
         default void addQsTile(ComponentName tile) { }
         default void remQsTile(ComponentName tile) { }
@@ -213,6 +217,13 @@
         }
     }
 
+    public void togglePanel() {
+        synchronized (mLock) {
+            mHandler.removeMessages(MSG_TOGGLE_PANEL);
+            mHandler.obtainMessage(MSG_TOGGLE_PANEL, 0, 0).sendToTarget();
+        }
+    }
+
     public void animateExpandSettingsPanel(String subPanel) {
         synchronized (mLock) {
             mHandler.removeMessages(MSG_EXPAND_SETTINGS);
@@ -432,6 +443,13 @@
     }
 
     @Override
+    public void setTopAppHidesStatusBar(boolean hidesStatusBar) {
+        mHandler.removeMessages(MSG_SET_TOP_APP_HIDES_STATUS_BAR);
+        mHandler.obtainMessage(MSG_SET_TOP_APP_HIDES_STATUS_BAR, hidesStatusBar ? 1 : 0, 0)
+                .sendToTarget();
+    }
+
+    @Override
     public void showShutdownUi(boolean isReboot, String reason) {
         synchronized (mLock) {
             mHandler.removeMessages(MSG_SHOW_SHUTDOWN_UI);
@@ -480,6 +498,11 @@
                         mCallbacks.get(i).animateCollapsePanels(msg.arg1);
                     }
                     break;
+                case MSG_TOGGLE_PANEL:
+                    for (int i = 0; i < mCallbacks.size(); i++) {
+                        mCallbacks.get(i).togglePanel();
+                    }
+                    break;
                 case MSG_EXPAND_SETTINGS:
                     for (int i = 0; i < mCallbacks.size(); i++) {
                         mCallbacks.get(i).animateExpandSettingsPanel((String) msg.obj);
@@ -626,6 +649,11 @@
                         mCallbacks.get(i).handleShowShutdownUi(msg.arg1 != 0, (String) msg.obj);
                     }
                     break;
+                case MSG_SET_TOP_APP_HIDES_STATUS_BAR:
+                    for (int i = 0; i < mCallbacks.size(); i++) {
+                        mCallbacks.get(i).setTopAppHidesStatusBar(msg.arg1 != 0);
+                    }
+                    break;
             }
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java
index 334991f..1bbf848 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java
@@ -30,6 +30,7 @@
 import com.android.systemui.Interpolators;
 import com.android.systemui.R;
 import com.android.systemui.classifier.FalsingManager;
+import com.android.systemui.statusbar.phone.StatusBar;
 
 /**
  * A utility class to enable the downward swipe on the lockscreen to go to the full shade and expand
@@ -149,6 +150,9 @@
     }
 
     private boolean isFalseTouch() {
+        if (!mDragDownCallback.isFalsingCheckNeeded()) {
+            return false;
+        }
         return mFalsingManager.isFalseTouch() || !mDraggedFarEnough;
     }
 
@@ -249,5 +253,6 @@
         void onCrossedThreshold(boolean above);
         void onTouchSlopExceeded();
         void setEmptyDragAmount(float amount);
+        boolean isFalsingCheckNeeded();
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index 22c0b736..966e789 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -80,6 +80,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.BooleanSupplier;
 
 public class ExpandableNotificationRow extends ActivatableNotificationView
         implements PluginListener<NotificationMenuRowPlugin> {
@@ -93,6 +94,7 @@
     }
 
     private LayoutListener mLayoutListener;
+    private boolean mDark;
     private boolean mLowPriorityStateUpdated;
     private final NotificationInflater mNotificationInflater;
     private int mIconTransformContentShift;
@@ -175,6 +177,11 @@
     private boolean mGroupExpansionChanging;
 
     /**
+     * A supplier that returns true if keyguard is secure.
+     */
+    private BooleanSupplier mSecureStateProvider;
+
+    /**
      * Whether or not a notification that is not part of a group of notifications can be manually
      * expanded by the user.
      */
@@ -395,6 +402,14 @@
         mAboveShelfChangedListener = aboveShelfChangedListener;
     }
 
+    /**
+     * Sets a supplier that can determine whether the keyguard is secure or not.
+     * @param secureStateProvider A function that returns true if keyguard is secure.
+     */
+    public void setSecureStateProvider(BooleanSupplier secureStateProvider) {
+        mSecureStateProvider = secureStateProvider;
+    }
+
     @Override
     public boolean isDimmable() {
         if (!getShowingLayout().isDimmable()) {
@@ -861,6 +876,7 @@
     public void onDensityOrFontScaleChanged() {
         super.onDensityOrFontScaleChanged();
         initDimens();
+        initBackground();
         // Let's update our childrencontainer. This is intentionally not guarded with
         // mIsSummaryWithChildren since we might have had children but not anymore.
         if (mChildrenContainer != null) {
@@ -1453,6 +1469,7 @@
     @Override
     public void setDark(boolean dark, boolean fade, long delay) {
         super.setDark(dark, fade, delay);
+        mDark = dark;
         if (!mIsHeadsUp) {
             // Only fade the showing view of the pulsing notification.
             fade = false;
@@ -1467,6 +1484,17 @@
         updateShelfIconColor();
     }
 
+    /**
+     * Tap sounds should not be played when we're unlocking.
+     * Doing so would cause audio collision and the system would feel unpolished.
+     */
+    @Override
+    public boolean isSoundEffectsEnabled() {
+        final boolean mute = mDark && mSecureStateProvider != null &&
+                !mSecureStateProvider.getAsBoolean();
+        return !mute && super.isSoundEffectsEnabled();
+    }
+
     public boolean isExpandable() {
         if (mIsSummaryWithChildren && !mShowingPublic) {
             return !mChildrenExpanded;
@@ -1988,14 +2016,15 @@
     }
 
     @Override
-    public int getMinHeight() {
-        if (mGuts != null && mGuts.isExposed()) {
+    public int getMinHeight(boolean ignoreTemporaryStates) {
+        if (!ignoreTemporaryStates && mGuts != null && mGuts.isExposed()) {
             return mGuts.getIntrinsicHeight();
-        } else if (isHeadsUpAllowed() && mIsHeadsUp && mHeadsUpManager.isTrackingHeadsUp()) {
+        } else if (!ignoreTemporaryStates && isHeadsUpAllowed() && mIsHeadsUp
+                && mHeadsUpManager.isTrackingHeadsUp()) {
                 return getPinnedHeadsUpHeight(false /* atLeastMinHeight */);
         } else if (mIsSummaryWithChildren && !isGroupExpanded() && !mShowingPublic) {
             return mChildrenContainer.getMinHeight();
-        } else if (isHeadsUpAllowed() && mIsHeadsUp) {
+        } else if (!ignoreTemporaryStates && isHeadsUpAllowed() && mIsHeadsUp) {
             return mHeadsUpHeight;
         }
         NotificationContentView showingLayout = getShowingLayout();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
index efe5e0c..aac9af8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
@@ -151,9 +151,21 @@
     }
 
     /**
-     * @return The minimum content height of this notification.
+     * @return The minimum content height of this notification. This also respects the temporary
+     * states of the view.
      */
     public int getMinHeight() {
+        return getMinHeight(false /* ignoreTemporaryStates */);
+    }
+
+    /**
+     * Get the minimum height of this view.
+     *
+     * @param ignoreTemporaryStates should temporary states be ignored like the guts or heads-up.
+     *
+     * @return The minimum height that this view needs.
+     */
+    public int getMinHeight(boolean ignoreTemporaryStates) {
         return getHeight();
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java
index 0ea56b8..d370a63 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java
@@ -62,7 +62,7 @@
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settingslib.Utils;
 import com.android.systemui.R;
-import com.android.systemui.recents.Recents;
+import com.android.systemui.recents.misc.SystemServicesProxy;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -371,7 +371,7 @@
 
     private void showKeyboardShortcuts(int deviceId) {
         retrieveKeyCharacterMap(deviceId);
-        Recents.getSystemServices().requestKeyboardShortcuts(mContext,
+        SystemServicesProxy.getInstance(mContext).requestKeyboardShortcuts(mContext,
                 new KeyboardShortcutsReceiver() {
                     @Override
                     public void onKeyboardShortcutsReceived(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
index 74737c4..569e58d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
@@ -184,8 +184,15 @@
         mVisible = visible;
         mIndicationArea.setVisibility(visible ? View.VISIBLE : View.GONE);
         if (visible) {
-            hideTransientIndication();
+            // If this is called after an error message was already shown, we should not clear it.
+            // Otherwise the error message won't be shown
+            if  (!mHandler.hasMessages(MSG_HIDE_TRANSIENT)) {
+                hideTransientIndication();
+            }
             updateIndication();
+        } else if (!visible) {
+            // If we unlock and return to keyguard quickly, previous error should not be shown
+            hideTransientIndication();
         }
     }
 
@@ -389,7 +396,6 @@
                 hideTransientIndication();
             } else if (msg.what == MSG_CLEAR_FP_MSG) {
                 mLockIcon.setTransientFpError(false);
-                hideTransientIndication();
             }
         }
     };
@@ -443,10 +449,10 @@
             int errorColor = Utils.getColorError(mContext);
             if (mStatusBarKeyguardViewManager.isBouncerShowing()) {
                 mStatusBarKeyguardViewManager.showBouncerMessage(helpString, errorColor);
-            } else if (updateMonitor.isDeviceInteractive()
-                    || mDozing && updateMonitor.isScreenOn()) {
+            } else if (updateMonitor.isScreenOn()) {
                 mLockIcon.setTransientFpError(true);
                 showTransientIndication(helpString, errorColor);
+                hideTransientIndicationDelayed(TRANSIENT_FP_ERROR_TIMEOUT);
                 mHandler.removeMessages(MSG_CLEAR_FP_MSG);
                 mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_CLEAR_FP_MSG),
                         TRANSIENT_FP_ERROR_TIMEOUT);
@@ -459,7 +465,8 @@
         @Override
         public void onFingerprintError(int msgId, String errString) {
             KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext);
-            if (!updateMonitor.isUnlockingWithFingerprintAllowed()
+            if ((!updateMonitor.isUnlockingWithFingerprintAllowed()
+                    && msgId != FingerprintManager.FINGERPRINT_ERROR_LOCKOUT_PERMANENT)
                     || msgId == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
                 return;
             }
@@ -472,7 +479,7 @@
                 if (mLastSuccessiveErrorMessage != msgId) {
                     mStatusBarKeyguardViewManager.showBouncerMessage(errString, errorColor);
                 }
-            } else if (updateMonitor.isDeviceInteractive()) {
+            } else if (updateMonitor.isScreenOn()) {
                 showTransientIndication(errString, errorColor);
                 // We want to keep this message around in case the screen was off
                 hideTransientIndicationDelayed(HIDE_DELAY_MS);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBackgroundView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBackgroundView.java
index 194cdc7..81a99bc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBackgroundView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBackgroundView.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.graphics.Canvas;
+import android.graphics.ColorFilter;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.RippleDrawable;
@@ -34,6 +35,7 @@
     private int mClipTopAmount;
     private int mActualHeight;
     private int mClipBottomAmount;
+    private int mTintColor;
 
     public NotificationBackgroundView(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -87,6 +89,7 @@
         mBackground = background;
         if (mBackground != null) {
             mBackground.setCallback(this);
+            setTint(mTintColor);
         }
         if (mBackground instanceof RippleDrawable) {
             ((RippleDrawable) mBackground).setForceSoftware(true);
@@ -105,6 +108,7 @@
         } else {
             mBackground.clearColorFilter();
         }
+        mTintColor = tintColor;
         invalidate();
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
index ef4f419..d0417b5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
@@ -108,7 +108,6 @@
          * Resets the notification entry to be re-used.
          */
         public void reset() {
-            lastFullScreenIntentLaunchTime = NOT_LAUNCHED_YET;
             if (row != null) {
                 row.reset();
             }
@@ -123,6 +122,7 @@
         }
 
         public void notifyFullScreenIntentLaunched() {
+            setInterruption();
             lastFullScreenIntentLaunchTime = SystemClock.elapsedRealtime();
         }
 
@@ -292,8 +292,8 @@
 
             if (mRankingMap != null) {
                 // RankingMap as received from NoMan
-                mRankingMap.getRanking(a.key, mRankingA);
-                mRankingMap.getRanking(b.key, mRankingB);
+                getRanking(a.key, mRankingA);
+                getRanking(b.key, mRankingB);
                 aImportance = mRankingA.getImportance();
                 bImportance = mRankingB.getImportance();
                 aRank = mRankingA.getRank();
@@ -381,7 +381,7 @@
 
     public boolean isAmbient(String key) {
         if (mRankingMap != null) {
-            mRankingMap.getRanking(key, mTmpRanking);
+            getRanking(key, mTmpRanking);
             return mTmpRanking.isAmbient();
         }
         return false;
@@ -389,7 +389,7 @@
 
     public int getVisibilityOverride(String key) {
         if (mRankingMap != null) {
-            mRankingMap.getRanking(key, mTmpRanking);
+            getRanking(key, mTmpRanking);
             return mTmpRanking.getVisibilityOverride();
         }
         return Ranking.VISIBILITY_NO_OVERRIDE;
@@ -397,7 +397,7 @@
 
     public boolean shouldSuppressScreenOff(String key) {
         if (mRankingMap != null) {
-            mRankingMap.getRanking(key, mTmpRanking);
+            getRanking(key, mTmpRanking);
             return (mTmpRanking.getSuppressedVisualEffects()
                     & NotificationListenerService.SUPPRESSED_EFFECT_SCREEN_OFF) != 0;
         }
@@ -406,7 +406,7 @@
 
     public boolean shouldSuppressScreenOn(String key) {
         if (mRankingMap != null) {
-            mRankingMap.getRanking(key, mTmpRanking);
+            getRanking(key, mTmpRanking);
             return (mTmpRanking.getSuppressedVisualEffects()
                     & NotificationListenerService.SUPPRESSED_EFFECT_SCREEN_ON) != 0;
         }
@@ -415,7 +415,7 @@
 
     public int getImportance(String key) {
         if (mRankingMap != null) {
-            mRankingMap.getRanking(key, mTmpRanking);
+            getRanking(key, mTmpRanking);
             return mTmpRanking.getImportance();
         }
         return NotificationManager.IMPORTANCE_UNSPECIFIED;
@@ -423,7 +423,7 @@
 
     public String getOverrideGroupKey(String key) {
         if (mRankingMap != null) {
-            mRankingMap.getRanking(key, mTmpRanking);
+            getRanking(key, mTmpRanking);
             return mTmpRanking.getOverrideGroupKey();
         }
          return null;
@@ -431,7 +431,7 @@
 
     public List<SnoozeCriterion> getSnoozeCriteria(String key) {
         if (mRankingMap != null) {
-            mRankingMap.getRanking(key, mTmpRanking);
+            getRanking(key, mTmpRanking);
             return mTmpRanking.getSnoozeCriteria();
         }
         return null;
@@ -439,7 +439,7 @@
 
     public NotificationChannel getChannel(String key) {
         if (mRankingMap != null) {
-            mRankingMap.getRanking(key, mTmpRanking);
+            getRanking(key, mTmpRanking);
             return mTmpRanking.getChannel();
         }
         return null;
@@ -452,6 +452,9 @@
                 final int N = mEntries.size();
                 for (int i = 0; i < N; i++) {
                     Entry entry = mEntries.valueAt(i);
+                    if (!getRanking(entry.key, mTmpRanking)) {
+                        continue;
+                    }
                     final StatusBarNotification oldSbn = entry.notification.cloneLight();
                     final String overrideGroupKey = getOverrideGroupKey(entry.key);
                     if (!Objects.equals(oldSbn.getOverrideGroupKey(), overrideGroupKey)) {
@@ -466,6 +469,19 @@
         filterAndSort();
     }
 
+    /**
+     * Get the ranking from the current ranking map.
+     *
+     * @param key the key to look up
+     * @param outRanking the ranking to populate
+     *
+     * @return {@code true} if the ranking was properly obtained.
+     */
+    @VisibleForTesting
+    protected boolean getRanking(String key, Ranking outRanking) {
+        return mRankingMap.getRanking(key, outRanking);
+    }
+
     // TODO: This should not be public. Instead the Environment should notify this class when
     // anything changed, and this class should call back the UI so it updates itself.
     public void filterAndSort() {
@@ -573,7 +589,7 @@
     }
 
     private void dumpEntry(PrintWriter pw, String indent, int i, Entry e) {
-        mRankingMap.getRanking(e.key, mTmpRanking);
+        getRanking(e.key, mTmpRanking);
         pw.print(indent);
         pw.println("  [" + i + "] key=" + e.key + " icon=" + e.icon);
         StatusBarNotification n = e.notification;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java
index 1ffb3b5..3b23a0c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java
@@ -126,7 +126,7 @@
                             | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
                             | PackageManager.MATCH_DIRECT_BOOT_AWARE);
             if (info != null) {
-                mAppUid = info.uid;
+                mAppUid = sbn.getUid();
                 mAppName = String.valueOf(pm.getApplicationLabel(info));
                 pkgicon = pm.getApplicationIcon(info);
             }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
index 30cdb9d..5557dde 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
@@ -22,10 +22,12 @@
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
+import android.graphics.Rect;
 import android.os.SystemProperties;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
 import android.view.accessibility.AccessibilityNodeInfo;
 
 import com.android.systemui.Interpolators;
@@ -53,6 +55,7 @@
             SystemProperties.getBoolean("debug.icon_opening_animations", true);
     private static final boolean ICON_ANMATIONS_WHILE_SCROLLING
             = SystemProperties.getBoolean("debug.icon_scroll_animations", true);
+    private static final int TAG_CONTINUOUS_CLIPPING = R.id.continuous_clipping_tag;
     private ViewInvertHelper mViewInvertHelper;
     private boolean mDark;
     private NotificationIconContainer mShelfIcons;
@@ -79,6 +82,9 @@
     private boolean mNoAnimationsInThisFrame;
     private boolean mAnimationsEnabled = true;
     private boolean mShowNotificationShelf;
+    private boolean mVibrationOnAnimation;
+    private boolean mUserTouchingScreen;
+    private boolean mTouchActive;
 
     public NotificationShelf(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -95,12 +101,24 @@
         setClipChildren(false);
         setClipToPadding(false);
         mShelfIcons.setShowAllIcons(false);
+        mVibrationOnAnimation = mContext.getResources().getBoolean(
+                R.bool.config_vibrateOnIconAnimation);
+        updateVibrationOnAnimation();
         mViewInvertHelper = new ViewInvertHelper(mShelfIcons,
                 NotificationPanelView.DOZE_ANIMATION_DURATION);
         mShelfState = new ShelfState();
         initDimens();
     }
 
+    private void updateVibrationOnAnimation() {
+        mShelfIcons.setVibrateOnAnimation(mVibrationOnAnimation && mTouchActive);
+    }
+
+    public void setTouchActive(boolean touchActive) {
+        mTouchActive = touchActive;
+        updateVibrationOnAnimation();
+    }
+
     public void bind(AmbientState ambientState, NotificationStackScrollLayout hostLayout) {
         mAmbientState = ambientState;
         mHostLayout = hostLayout;
@@ -290,6 +308,16 @@
         mShelfIcons.setSpeedBumpIndex(mAmbientState.getSpeedBumpIndex());
         mShelfIcons.calculateIconTranslations();
         mShelfIcons.applyIconStates();
+        for (int i = 0; i < mHostLayout.getChildCount(); i++) {
+            View child = mHostLayout.getChildAt(i);
+            if (!(child instanceof ExpandableNotificationRow)
+                    || child.getVisibility() == GONE) {
+                continue;
+            }
+            ExpandableNotificationRow row = (ExpandableNotificationRow) child;
+            updateIconClipAmount(row);
+            updateContinuousClipping(row);
+        }
         boolean hideBackground = numViewsInShelf < 1.0f;
         setHideBackground(hideBackground || backgroundForceHidden);
         if (mNotGoneIndex == -1) {
@@ -297,6 +325,43 @@
         }
     }
 
+    private void updateIconClipAmount(ExpandableNotificationRow row) {
+        float maxTop = row.getTranslationY();
+        StatusBarIconView icon = row.getEntry().expandedIcon;
+        float shelfIconPosition = getTranslationY() + icon.getTop() + icon.getTranslationY();
+        if (shelfIconPosition < maxTop) {
+            int top = (int) (maxTop - shelfIconPosition);
+            Rect clipRect = new Rect(0, top, icon.getWidth(), Math.max(top, icon.getHeight()));
+            icon.setClipBounds(clipRect);
+        } else {
+            icon.setClipBounds(null);
+        }
+    }
+
+    private void updateContinuousClipping(final ExpandableNotificationRow row) {
+        StatusBarIconView icon = row.getEntry().expandedIcon;
+        boolean needsContinuousClipping = ViewState.isAnimatingY(icon);
+        boolean isContinuousClipping = icon.getTag(TAG_CONTINUOUS_CLIPPING) != null;
+        if (needsContinuousClipping && !isContinuousClipping) {
+            ViewTreeObserver.OnPreDrawListener predrawListener =
+                    new ViewTreeObserver.OnPreDrawListener() {
+                        @Override
+                        public boolean onPreDraw() {
+                            boolean animatingY = ViewState.isAnimatingY(icon);
+                            if (!animatingY || !icon.isAttachedToWindow()) {
+                                icon.getViewTreeObserver().removeOnPreDrawListener(this);
+                                icon.setTag(TAG_CONTINUOUS_CLIPPING, null);
+                                return true;
+                            }
+                            updateIconClipAmount(row);
+                            return true;
+                        }
+                    };
+            icon.getViewTreeObserver().addOnPreDrawListener(predrawListener);
+            icon.setTag(TAG_CONTINUOUS_CLIPPING, predrawListener);
+        }
+    }
+
     private void updateNotificationClipHeight(ExpandableNotificationRow row,
             float notificationClipEnd) {
         float viewEnd = row.getTranslationY() + row.getActualHeight();
@@ -315,6 +380,15 @@
         }
     }
 
+    @Override
+    public void setFakeShadowIntensity(float shadowIntensity, float outlineAlpha, int shadowYEnd,
+            int outlineTranslation) {
+        if (!mHasItemsInStableShelf) {
+            shadowIntensity = 0.0f;
+        }
+        super.setFakeShadowIntensity(shadowIntensity, outlineAlpha, shadowYEnd, outlineTranslation);
+    }
+
     /**
      * @return the icon amount how much this notification is in the shelf;
      */
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationSnooze.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationSnooze.java
index c45ca54..492ab44 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationSnooze.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationSnooze.java
@@ -16,8 +16,13 @@
  */
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper;
 import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper.SnoozeOption;
 
@@ -28,12 +33,15 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Typeface;
+import android.metrics.LogMaker;
 import android.os.Bundle;
+import android.provider.Settings;
 import android.service.notification.SnoozeCriterion;
 import android.service.notification.StatusBarNotification;
 import android.text.SpannableString;
 import android.text.style.StyleSpan;
 import android.util.AttributeSet;
+import android.util.KeyValueListParser;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -51,11 +59,23 @@
 public class NotificationSnooze extends LinearLayout
         implements NotificationGuts.GutsContent, View.OnClickListener {
 
+    private static final String TAG = "NotificationSnooze";
     /**
      * If this changes more number increases, more assistant action resId's should be defined for
      * accessibility purposes, see {@link #setSnoozeOptions(List)}
      */
     private static final int MAX_ASSISTANT_SUGGESTIONS = 1;
+    private static final String KEY_DEFAULT_SNOOZE = "default";
+    private static final String KEY_OPTIONS = "options_array";
+    private static final LogMaker OPTIONS_OPEN_LOG =
+            new LogMaker(MetricsEvent.NOTIFICATION_SNOOZE_OPTIONS)
+                    .setType(MetricsEvent.TYPE_OPEN);
+    private static final LogMaker OPTIONS_CLOSE_LOG =
+            new LogMaker(MetricsEvent.NOTIFICATION_SNOOZE_OPTIONS)
+                    .setType(MetricsEvent.TYPE_CLOSE);
+    private static final LogMaker UNDO_LOG =
+            new LogMaker(MetricsEvent.NOTIFICATION_UNDO_SNOOZE)
+                    .setType(MetricsEvent.TYPE_ACTION);
     private NotificationGuts mGutsContainer;
     private NotificationSwipeActionHelper mSnoozeListener;
     private StatusBarNotification mSbn;
@@ -72,9 +92,31 @@
     private boolean mSnoozing;
     private boolean mExpanded;
     private AnimatorSet mExpandAnimation;
+    private KeyValueListParser mParser;
+
+    private final static int[] sAccessibilityActions = {
+            R.id.action_snooze_shorter,
+            R.id.action_snooze_short,
+            R.id.action_snooze_long,
+            R.id.action_snooze_longer,
+    };
+
+    private MetricsLogger mMetricsLogger = new MetricsLogger();
 
     public NotificationSnooze(Context context, AttributeSet attrs) {
         super(context, attrs);
+        mParser = new KeyValueListParser(',');
+    }
+
+    @VisibleForTesting
+    SnoozeOption getDefaultOption()
+    {
+        return mDefaultOption;
+    }
+
+    @VisibleForTesting
+    void setKeyValueListParser(KeyValueListParser parser) {
+        mParser = parser;
     }
 
     @Override
@@ -96,7 +138,13 @@
         mSnoozeOptions = getDefaultSnoozeOptions();
         createOptionViews();
 
-        setSelected(mDefaultOption);
+        setSelected(mDefaultOption, false);
+    }
+
+    @Override
+    protected void onAttachedToWindow() {
+        super.onAttachedToWindow();
+        logOptionSelection(MetricsEvent.NOTIFICATION_SNOOZE_CLICKED, mDefaultOption);
     }
 
     @Override
@@ -136,7 +184,7 @@
             SnoozeOption so = mSnoozeOptions.get(i);
             if (so.getAccessibilityAction() != null
                     && so.getAccessibilityAction().getId() == action) {
-                setSelected(so);
+                setSelected(so, true);
                 return true;
             }
         }
@@ -172,17 +220,49 @@
         mSbn = sbn;
     }
 
-    private ArrayList<SnoozeOption> getDefaultSnoozeOptions() {
+    @VisibleForTesting
+    ArrayList<SnoozeOption> getDefaultSnoozeOptions() {
+        final Resources resources = getContext().getResources();
         ArrayList<SnoozeOption> options = new ArrayList<>();
+        try {
+            final String config = Settings.Global.getString(getContext().getContentResolver(),
+                    Settings.Global.NOTIFICATION_SNOOZE_OPTIONS);
+            mParser.setString(config);
+        } catch (IllegalArgumentException e) {
+            Log.e(TAG, "Bad snooze constants");
+        }
 
-        options.add(createOption(15 /* minutes */, R.id.action_snooze_15_min));
-        options.add(createOption(30 /* minutes */, R.id.action_snooze_30_min));
-        mDefaultOption = createOption(60 /* minutes */, R.id.action_snooze_1_hour);
-        options.add(mDefaultOption);
-        options.add(createOption(60 * 2 /* minutes */, R.id.action_snooze_2_hours));
+        final int defaultSnooze = mParser.getInt(KEY_DEFAULT_SNOOZE,
+                resources.getInteger(R.integer.config_notification_snooze_time_default));
+        final int[] snoozeTimes = parseIntArray(KEY_OPTIONS,
+                resources.getIntArray(R.array.config_notification_snooze_times));
+
+        for (int i = 0; i < snoozeTimes.length && i < sAccessibilityActions.length; i++) {
+            int snoozeTime = snoozeTimes[i];
+            SnoozeOption option = createOption(snoozeTime, sAccessibilityActions[i]);
+            if (i == 0 || snoozeTime == defaultSnooze) {
+                mDefaultOption = option;
+            }
+            options.add(option);
+        }
         return options;
     }
 
+    @VisibleForTesting
+    int[] parseIntArray(final String key, final int[] defaultArray) {
+        final String value = mParser.getString(key, null);
+        if (value != null) {
+            try {
+                return Arrays.stream(value.split(":")).map(String::trim).mapToInt(
+                        Integer::parseInt).toArray();
+            } catch (NumberFormatException e) {
+                return defaultArray;
+            }
+        } else {
+            return defaultArray;
+        }
+    }
+
     private SnoozeOption createOption(int minutes, int accessibilityActionId) {
         Resources res = getResources();
         boolean showInHours = minutes >= 60;
@@ -268,12 +348,24 @@
         mExpandAnimation.start();
     }
 
-    private void setSelected(SnoozeOption option) {
+    private void setSelected(SnoozeOption option, boolean userAction) {
         mSelectedOption = option;
         mSelectedOptionText.setText(option.getConfirmation());
         showSnoozeOptions(false);
         hideSelectedOption();
         sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+        if (userAction) {
+            logOptionSelection(MetricsEvent.NOTIFICATION_SELECT_SNOOZE, option);
+        }
+    }
+
+    private void logOptionSelection(int category, SnoozeOption option) {
+        int index = mSnoozeOptions.indexOf(option);
+        long duration = TimeUnit.MINUTES.toMillis(option.getMinutesToSnoozeFor());
+        mMetricsLogger.write(new LogMaker(category)
+                .setType(MetricsEvent.TYPE_ACTION)
+                .addTaggedData(MetricsEvent.FIELD_NOTIFICATION_SNOOZE_INDEX, index)
+                .addTaggedData(MetricsEvent.FIELD_NOTIFICATION_SNOOZE_DURATION_MS, duration));
     }
 
     @Override
@@ -284,13 +376,15 @@
         final int id = v.getId();
         final SnoozeOption tag = (SnoozeOption) v.getTag();
         if (tag != null) {
-            setSelected(tag);
+            setSelected(tag, true);
         } else if (id == R.id.notification_snooze) {
             // Toggle snooze options
             showSnoozeOptions(!mExpanded);
+            mMetricsLogger.write(!mExpanded ? OPTIONS_OPEN_LOG : OPTIONS_CLOSE_LOG);
         } else {
             // Undo snooze was selected
             undoSnooze(v);
+            mMetricsLogger.write(UNDO_LOG);
         }
     }
 
@@ -321,7 +415,7 @@
     @Override
     public View getContentView() {
         // Reset the view before use
-        setSelected(mDefaultOption);
+        setSelected(mDefaultOption, false);
         return this;
     }
 
@@ -343,7 +437,7 @@
             return true;
         } else {
             // The view should actually be closed
-            setSelected(mSnoozeOptions.get(0));
+            setSelected(mSnoozeOptions.get(0), false);
             return false; // Return false here so that guts handles closing the view
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
index 25f3e25..274244e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -22,8 +22,6 @@
 import android.content.res.Resources;
 import android.graphics.Color;
 import android.graphics.Rect;
-import android.graphics.drawable.Animatable;
-import android.graphics.drawable.AnimatedVectorDrawable;
 import android.graphics.drawable.Drawable;
 import android.telephony.SubscriptionInfo;
 import android.util.ArraySet;
@@ -43,6 +41,7 @@
 import com.android.systemui.statusbar.phone.StatusBarIconController;
 import com.android.systemui.statusbar.policy.DarkIconDispatcher;
 import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver;
+import com.android.systemui.statusbar.policy.IconLogger;
 import com.android.systemui.statusbar.policy.NetworkController;
 import com.android.systemui.statusbar.policy.NetworkController.IconState;
 import com.android.systemui.statusbar.policy.NetworkControllerImpl;
@@ -52,6 +51,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 // Intimately tied to the design of res/layout/signal_cluster_view.xml
 public class SignalClusterView extends LinearLayout implements NetworkControllerImpl.SignalCallback,
@@ -65,12 +65,14 @@
     private static final String SLOT_MOBILE = "mobile";
     private static final String SLOT_WIFI = "wifi";
     private static final String SLOT_ETHERNET = "ethernet";
+    private static final String SLOT_VPN = "vpn";
 
     private final NetworkController mNetworkController;
     private final SecurityController mSecurityController;
 
     private boolean mNoSimsVisible = false;
     private boolean mVpnVisible = false;
+    private boolean mSimDetected;
     private int mVpnIconId = 0;
     private int mLastVpnIconId = -1;
     private boolean mEthernetVisible = false;
@@ -117,6 +119,8 @@
     private boolean mActivityEnabled;
     private boolean mForceBlockWifi;
 
+    private final IconLogger mIconLogger = Dependency.get(IconLogger.class);
+
     public SignalClusterView(Context context) {
         this(context, null);
     }
@@ -323,8 +327,9 @@
     }
 
     @Override
-    public void setNoSims(boolean show) {
+    public void setNoSims(boolean show, boolean simDetected) {
         mNoSimsVisible = show && !mBlockMobile;
+        mSimDetected = simDetected;
         apply();
     }
 
@@ -447,14 +452,15 @@
     private void apply() {
         if (mWifiGroup == null) return;
 
-        mVpn.setVisibility(mVpnVisible ? View.VISIBLE : View.GONE);
         if (mVpnVisible) {
             if (mLastVpnIconId != mVpnIconId) {
                 setIconForView(mVpn, mVpnIconId);
                 mLastVpnIconId = mVpnIconId;
             }
+            mIconLogger.onIconShown(SLOT_VPN);
             mVpn.setVisibility(View.VISIBLE);
         } else {
+            mIconLogger.onIconHidden(SLOT_VPN);
             mVpn.setVisibility(View.GONE);
         }
         if (DEBUG) Log.d(TAG, String.format("vpn: %s", mVpnVisible ? "VISIBLE" : "GONE"));
@@ -466,8 +472,10 @@
                 mLastEthernetIconId = mEthernetIconId;
             }
             mEthernetGroup.setContentDescription(mEthernetDescription);
+            mIconLogger.onIconShown(SLOT_ETHERNET);
             mEthernetGroup.setVisibility(View.VISIBLE);
         } else {
+            mIconLogger.onIconHidden(SLOT_ETHERNET);
             mEthernetGroup.setVisibility(View.GONE);
         }
 
@@ -481,9 +489,11 @@
                 setIconForView(mWifiDark, mWifiStrengthId);
                 mLastWifiStrengthId = mWifiStrengthId;
             }
+            mIconLogger.onIconShown(SLOT_WIFI);
             mWifiGroup.setContentDescription(mWifiDescription);
             mWifiGroup.setVisibility(View.VISIBLE);
         } else {
+            mIconLogger.onIconHidden(SLOT_WIFI);
             mWifiGroup.setVisibility(View.GONE);
         }
 
@@ -505,6 +515,11 @@
                 }
             }
         }
+        if (anyMobileVisible) {
+            mIconLogger.onIconShown(SLOT_MOBILE);
+        } else {
+            mIconLogger.onIconHidden(SLOT_MOBILE);
+        }
 
         if (mIsAirplaneMode) {
             if (mLastAirplaneIconId != mAirplaneIconId) {
@@ -512,8 +527,10 @@
                 mLastAirplaneIconId = mAirplaneIconId;
             }
             mAirplane.setContentDescription(mAirplaneContentDescription);
+            mIconLogger.onIconShown(SLOT_AIRPLANE);
             mAirplane.setVisibility(View.VISIBLE);
         } else {
+            mIconLogger.onIconHidden(SLOT_AIRPLANE);
             mAirplane.setVisibility(View.GONE);
         }
 
@@ -529,7 +546,30 @@
             mWifiSignalSpacer.setVisibility(View.GONE);
         }
 
-        mNoSimsCombo.setVisibility(mNoSimsVisible ? View.VISIBLE : View.GONE);
+        if (mNoSimsVisible) {
+            mIconLogger.onIconShown(SLOT_MOBILE);
+            mNoSimsCombo.setVisibility(View.VISIBLE);
+            if (!Objects.equals(mSimDetected, mNoSimsCombo.getTag())) {
+                mNoSimsCombo.setTag(mSimDetected);
+                if (mSimDetected) {
+                    SignalDrawable d = new SignalDrawable(mNoSims.getContext());
+                    d.setDarkIntensity(0);
+                    mNoSims.setImageDrawable(d);
+                    mNoSims.setImageLevel(SignalDrawable.getEmptyState(4));
+
+                    SignalDrawable dark = new SignalDrawable(mNoSims.getContext());
+                    dark.setDarkIntensity(1);
+                    mNoSimsDark.setImageDrawable(dark);
+                    mNoSimsDark.setImageLevel(SignalDrawable.getEmptyState(4));
+                } else {
+                    mNoSims.setImageResource(R.drawable.stat_sys_no_sims);
+                    mNoSimsDark.setImageResource(R.drawable.stat_sys_no_sims);
+                }
+            }
+        } else {
+            mIconLogger.onIconHidden(SLOT_MOBILE);
+            mNoSimsCombo.setVisibility(View.GONE);
+        }
 
         boolean anythingVisible = mNoSimsVisible || mWifiVisible || mIsAirplaneMode
                 || anyMobileVisible || mVpnVisible || mEthernetVisible;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
index 27fe33e..6cfd42f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
@@ -43,6 +43,7 @@
 import android.util.Log;
 import android.util.Property;
 import android.util.TypedValue;
+import android.view.View;
 import android.view.ViewDebug;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.animation.Interpolator;
@@ -141,6 +142,8 @@
     private int mCachedContrastBackgroundColor = NO_COLOR;
     private float[] mMatrix;
     private ColorMatrixColorFilter mMatrixColorFilter;
+    private boolean mIsInShelf;
+    private Runnable mLayoutRunnable;
 
     public StatusBarIconView(Context context, String slot, StatusBarNotification sbn) {
         this(context, slot, sbn, false);
@@ -795,6 +798,45 @@
         }
     }
 
+    /**
+     * This method returns the drawing rect for the view which is different from the regular
+     * drawing rect, since we layout all children at position 0 and usually the translation is
+     * neglected. The standard implementation doesn't account for translation.
+     *
+     * @param outRect The (scrolled) drawing bounds of the view.
+     */
+    @Override
+    public void getDrawingRect(Rect outRect) {
+        super.getDrawingRect(outRect);
+        float translationX = getTranslationX();
+        float translationY = getTranslationY();
+        outRect.left += translationX;
+        outRect.right += translationX;
+        outRect.top += translationY;
+        outRect.bottom += translationY;
+    }
+
+    public void setIsInShelf(boolean isInShelf) {
+        mIsInShelf = isInShelf;
+    }
+
+    public boolean isInShelf() {
+        return mIsInShelf;
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        super.onLayout(changed, left, top, right, bottom);
+        if (mLayoutRunnable != null) {
+            mLayoutRunnable.run();
+            mLayoutRunnable = null;
+        }
+    }
+
+    public void executeOnLayout(Runnable runnable) {
+        mLayoutRunnable = runnable;
+    }
+
     public interface OnVisibilityChangedListener {
         void onVisibilityChanged(int newVisibility);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
index 76177a3..680f693 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
@@ -51,7 +51,14 @@
 import com.android.systemui.statusbar.phone.StatusBar;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.UserSwitcherController;
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.systemui.classifier.FalsingLog;
+import com.android.systemui.classifier.FalsingManager;
+import com.android.systemui.Prefs;
 
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.Map;
 /**
  * A status bar (and navigation bar) tailored for the automotive use case.
  */
@@ -69,8 +76,10 @@
     private Drawable mNotificationPanelBackground;
 
     private ConnectedDeviceSignalController mConnectedDeviceSignalController;
+    private ViewGroup mNavigationBarWindow;
     private CarNavigationBarView mNavigationBarView;
 
+    private final Object mQueueLock = new Object();
     @Override
     public void start() {
         super.start();
@@ -89,6 +98,11 @@
         mCarBatteryController.stopListening();
         mConnectedDeviceSignalController.stopListening();
 
+        if (mNavigationBarWindow != null) {
+            mWindowManager.removeViewImmediate(mNavigationBarWindow);
+            mNavigationBarView = null;
+        }
+
         super.destroy();
     }
 
@@ -145,10 +159,19 @@
         // SystemUI requires that the navigation bar view have a parent. Since the regular
         // StatusBar inflates navigation_bar_window as this parent view, use the same view for the
         // CarNavigationBarView.
-        ViewGroup navigationBarWindow = (ViewGroup) View.inflate(mContext,
+        mNavigationBarWindow = (ViewGroup) View.inflate(mContext,
                 R.layout.navigation_bar_window, null);
-        View.inflate(mContext, R.layout.car_navigation_bar, navigationBarWindow);
-        mNavigationBarView = (CarNavigationBarView) navigationBarWindow.getChildAt(0);
+        if (mNavigationBarWindow == null) {
+            Log.e(TAG, "CarStatusBar failed inflate for R.layout.navigation_bar_window");
+        }
+
+
+        View.inflate(mContext, R.layout.car_navigation_bar, mNavigationBarWindow);
+        mNavigationBarView = (CarNavigationBarView) mNavigationBarWindow.getChildAt(0);
+        if (mNavigationBarView == null) {
+            Log.e(TAG, "CarStatusBar failed inflate for R.layout.car_navigation_bar");
+        }
+
 
         mController = new CarNavigationBarController(mContext, mNavigationBarView,
                 this /* ActivityStarter*/);
@@ -160,13 +183,49 @@
                         | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                         | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                         | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
-                        | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
-                        | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
+                        | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH,
                 PixelFormat.TRANSLUCENT);
         lp.setTitle("CarNavigationBar");
         lp.windowAnimations = 0;
 
-        mWindowManager.addView(navigationBarWindow, lp);
+        mWindowManager.addView(mNavigationBarWindow, lp);
+    }
+
+    @Override
+    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+        //When executing dump() funciton simultaneously, we need to serialize them
+        //to get mStackScroller's position correctly.
+        synchronized (mQueueLock) {
+            pw.println("  mStackScroller: " + viewInfo(mStackScroller));
+            pw.println("  mStackScroller: " + viewInfo(mStackScroller)
+                    + " scroll " + mStackScroller.getScrollX()
+                    + "," + mStackScroller.getScrollY());
+        }
+
+        pw.print("  mTaskStackListener="); pw.println(mTaskStackListener);
+        pw.print("  mController=");
+        pw.println(mController);
+        pw.print("  mFullscreenUserSwitcher="); pw.println(mFullscreenUserSwitcher);
+        pw.print("  mCarBatteryController=");
+        pw.println(mCarBatteryController);
+        pw.print("  mBatteryMeterView=");
+        pw.println(mBatteryMeterView);
+        pw.print("  mConnectedDeviceSignalController=");
+        pw.println(mConnectedDeviceSignalController);
+        pw.print("  mNavigationBarView=");
+        pw.println(mNavigationBarView);
+
+        if (KeyguardUpdateMonitor.getInstance(mContext) != null) {
+            KeyguardUpdateMonitor.getInstance(mContext).dump(fd, pw, args);
+        }
+
+        FalsingManager.getInstance(mContext).dump(pw);
+        FalsingLog.dump(pw);
+
+        pw.println("SharedPreferences:");
+        for (Map.Entry<String, ?> entry : Prefs.getAll(mContext).entrySet()) {
+            pw.print("  "); pw.print(entry.getKey()); pw.print("="); pw.println(entry.getValue());
+        }
     }
 
     @Override
@@ -175,6 +234,11 @@
     }
 
     @Override
+    public View getNavigationBarWindow() {
+        return mNavigationBarWindow;
+    }
+
+    @Override
     protected View.OnTouchListener getStatusBarWindowTouchListener() {
         // Usually, a touch on the background window will dismiss the notification shade. However,
         // for the car use-case, the shade should remain unless the user switches to a different
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java
index 9338887..172c62a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java
@@ -53,7 +53,7 @@
         mParent = containerStub.inflate();
         mContainer = mParent.findViewById(R.id.container);
         mUserGridView = mContainer.findViewById(R.id.user_grid);
-        mUserGridView.init(statusBar, mUserSwitcherController);
+        mUserGridView.init(statusBar, mUserSwitcherController, true /* showInitially */);
         mUserGridView.setUserSelectionListener(record -> {
             if (!record.isCurrent) {
                 toggleSwitchInProgress(true);
@@ -74,6 +74,15 @@
             automaticallySelectUser();
         });
 
+        // Any interaction with the screen should cancel the timer.
+        mContainer.setOnClickListener(v -> {
+            cancelTimer();
+        });
+        mUserGridView.setOnTouchListener((v, e) -> {
+            cancelTimer();
+            return false;
+        });
+
         mSwitchingUsers = mParent.findViewById(R.id.switching_users);
     }
 
@@ -152,6 +161,7 @@
         if (mTimer != null) {
             mTimer.cancel();
             mTimer = null;
+            mProgressBar.setProgress(0, true /* animate */);
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/PageIndicator.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/PageIndicator.java
index f7d0906..c830ff8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/car/PageIndicator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/PageIndicator.java
@@ -98,6 +98,11 @@
     protected void onDraw(Canvas canvas) {
         super.onDraw(canvas);
 
+        // Don't draw anything unless there's multiple pages to scroll through.  No need to clear
+        // any previous dots, since onDraw provides a canvas that's already cleared.
+        if (mPageCount <= 1)
+            return;
+
         int x = canvas.getWidth() / 2 - (mPageCount / 2) * mStep;
         int y = canvas.getHeight() / 2;
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridView.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridView.java
index cfa9864..e551801 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridView.java
@@ -16,14 +16,21 @@
 
 package com.android.systemui.statusbar.car;
 
+import android.animation.Animator;
+import android.animation.Animator.AnimatorListener;
+import android.animation.ValueAnimator;
 import android.content.Context;
-import android.graphics.Color;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Paint.Align;
 import android.graphics.drawable.Drawable;
-import android.os.UserHandle;
+import android.graphics.drawable.GradientDrawable;
 import android.support.v4.view.PagerAdapter;
 import android.support.v4.view.ViewPager;
+import android.support.v4.view.animation.FastOutSlowInInterpolator;
 import android.util.AttributeSet;
-import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -31,9 +38,7 @@
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-import com.android.internal.util.UserIcons;
 import com.android.systemui.R;
-import com.android.systemui.statusbar.UserUtil;
 import com.android.systemui.statusbar.phone.StatusBar;
 import com.android.systemui.statusbar.policy.UserSwitcherController;
 
@@ -42,21 +47,44 @@
  * One of the uses of this is for the lock screen in auto.
  */
 public class UserGridView extends ViewPager {
+    private static final int EXPAND_ANIMATION_TIME_MS = 200;
+    private static final int HIDE_ANIMATION_TIME_MS = 133;
+
     private StatusBar mStatusBar;
     private UserSwitcherController mUserSwitcherController;
     private Adapter mAdapter;
     private UserSelectionListener mUserSelectionListener;
+    private ValueAnimator mHeightAnimator;
+    private int mTargetHeight;
+    private int mHeightChildren;
+    private boolean mShowing;
 
     public UserGridView(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
 
-    public void init(StatusBar statusBar, UserSwitcherController userSwitcherController) {
+    public void init(StatusBar statusBar, UserSwitcherController userSwitcherController,
+            boolean showInitially) {
         mStatusBar = statusBar;
         mUserSwitcherController = userSwitcherController;
         mAdapter = new Adapter(mUserSwitcherController);
         addOnLayoutChangeListener(mAdapter);
         setAdapter(mAdapter);
+        mShowing = showInitially;
+    }
+
+    public boolean isShowing() {
+        return mShowing;
+    }
+
+    public void show() {
+        mShowing = true;
+        animateHeightChange(getMeasuredHeight(), mHeightChildren);
+    }
+
+    public void hide() {
+        mShowing = false;
+        animateHeightChange(getMeasuredHeight(), 0);
     }
 
     public void onUserSwitched(int newUserId) {
@@ -77,16 +105,85 @@
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         // Wrap content doesn't work in ViewPagers, so simulate the behavior in code.
         int height = 0;
-        for(int i = 0; i < getChildCount(); i++) {
-            View child = getChildAt(i);
-            child.measure(widthMeasureSpec,
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
-            height = Math.max(child.getMeasuredHeight(), height);
+        if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY) {
+            height = MeasureSpec.getSize(heightMeasureSpec);
+        } else {
+            for (int i = 0; i < getChildCount(); i++) {
+                View child = getChildAt(i);
+                child.measure(widthMeasureSpec,
+                        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+                height = Math.max(child.getMeasuredHeight(), height);
+            }
+
+            mHeightChildren = height;
+
+            // Override the height if it's not showing.
+            if (!mShowing) {
+                height = 0;
+            }
+
+            // Respect the AT_MOST request from parent.
+            if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) {
+                height = Math.min(MeasureSpec.getSize(heightMeasureSpec), height);
+            }
         }
         heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
+
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     }
 
+    private void animateHeightChange(int oldHeight, int newHeight) {
+        // If there is no change in height or an animation is already in progress towards the
+        // desired height, then there's no need to make any changes.
+        if (oldHeight == newHeight || newHeight == mTargetHeight) {
+            return;
+        }
+
+        // Animation in progress is not going towards the new target, so cancel it.
+        if (mHeightAnimator != null){
+            mHeightAnimator.cancel();
+        }
+
+        mTargetHeight = newHeight;
+        mHeightAnimator = ValueAnimator.ofInt(oldHeight, mTargetHeight);
+        mHeightAnimator.addUpdateListener(valueAnimator -> {
+            ViewGroup.LayoutParams layoutParams = getLayoutParams();
+            layoutParams.height = (Integer) valueAnimator.getAnimatedValue();
+            requestLayout();
+        });
+        mHeightAnimator.addListener(new AnimatorListener() {
+            @Override
+            public void onAnimationStart(Animator animator) {}
+
+            @Override
+            public void onAnimationEnd(Animator animator) {
+                // ValueAnimator does not guarantee that the update listener will get an update
+                // to the final value, so here, the final value is set.  Though the final calculated
+                // height (mTargetHeight) could be set, WRAP_CONTENT is more appropriate.
+                ViewGroup.LayoutParams layoutParams = getLayoutParams();
+                layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
+                requestLayout();
+                mHeightAnimator = null;
+            }
+
+            @Override
+            public void onAnimationCancel(Animator animator) {}
+
+            @Override
+            public void onAnimationRepeat(Animator animator) {}
+        });
+
+        mHeightAnimator.setInterpolator(new FastOutSlowInInterpolator());
+        if (oldHeight < newHeight) {
+            // Expanding
+            mHeightAnimator.setDuration(EXPAND_ANIMATION_TIME_MS);
+        } else {
+            // Hiding
+            mHeightAnimator.setDuration(HIDE_ANIMATION_TIME_MS);
+        }
+        mHeightAnimator.start();
+    }
+
     /**
      * This is a ViewPager.PagerAdapter which deletegates the work to a
      * UserSwitcherController.BaseUserAdapter. Java doesn't support multiple inheritance so we have
@@ -95,7 +192,9 @@
      */
     private final class Adapter extends PagerAdapter implements View.OnLayoutChangeListener {
         private final int mPodWidth;
-        private final int mPodMargin;
+        private final int mPodMarginBetween;
+        private final int mPodImageAvatarWidth;
+        private final int mPodImageAvatarHeight;
 
         private final WrappedBaseUserAdapter mUserAdapter;
         private int mContainerWidth;
@@ -103,10 +202,15 @@
         public Adapter(UserSwitcherController controller) {
             super();
             mUserAdapter = new WrappedBaseUserAdapter(controller, this);
-            mPodWidth = getResources().getDimensionPixelSize(
+
+            Resources res = getResources();
+            mPodWidth = res.getDimensionPixelSize(R.dimen.car_fullscreen_user_pod_width);
+            mPodMarginBetween = res.getDimensionPixelSize(
+                    R.dimen.car_fullscreen_user_pod_margin_between);
+            mPodImageAvatarWidth = res.getDimensionPixelSize(
                     R.dimen.car_fullscreen_user_pod_image_avatar_width);
-            mPodMargin = getResources().getDimensionPixelSize(
-                    R.dimen.car_fullscreen_user_pod_margin_side);
+            mPodImageAvatarHeight = res.getDimensionPixelSize(
+                    R.dimen.car_fullscreen_user_pod_image_avatar_height);
         }
 
         @Override
@@ -116,9 +220,12 @@
 
         private int getIconsPerPage() {
             // We need to know how many pods we need in this page. Each pod has its own width and
-            // margins on both sides. We can then divide the measured width of the parent by the
+            // a margin between them. We can then divide the measured width of the parent by the
             // sum of pod width and margin to get the number of pods that will completely fit.
-            return mContainerWidth / (mPodWidth + mPodMargin * 2);
+            // There is one less margin than the number of pods (eg. for 5 pods, there are 4
+            // margins), so need to add the margin to the measured width to account for that.
+            return (mContainerWidth + mPodMarginBetween) /
+                    (mPodWidth + mPodMarginBetween);
         }
 
         @Override
@@ -132,19 +239,58 @@
             int iconsPerPage = getIconsPerPage();
             int limit = Math.min(mUserAdapter.getCount(), (position + 1) * iconsPerPage);
             for (int i = position * iconsPerPage; i < limit; i++) {
-                pods.addView(makeUserPod(inflater, context, i, pods));
+                View v = makeUserPod(inflater, context, i, pods);
+                pods.addView(v);
+                // This is hacky, but the dividers on the pod container LinearLayout don't seem
+                // to work for whatever reason.  Instead, set a right margin on the pod if it's not
+                // the right-most pod and there is more than one pod in the container.
+                if (i < limit - 1 && limit > 1) {
+                    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
+                            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+                    params.setMargins(0, 0, mPodMarginBetween, 0);
+                    v.setLayoutParams(params);
+                }
             }
             container.addView(pods);
             return pods;
         }
 
-        private Drawable getUserIcon(Context context, UserSwitcherController.UserRecord record) {
-            if (record.isAddUser) {
-                Drawable icon = context.getDrawable(R.drawable.ic_add_circle_qs);
-                icon.setTint(Color.WHITE);
-                return icon;
-            }
-            return UserIcons.getDefaultUserIcon(record.resolveId(), /* light= */ true);
+        /**
+         * Returns the default user icon.  This icon is a circle with a letter in it.  The letter is
+         * the first character in the username.
+         *
+         * @param userName the username of the user for which the icon is to be created
+         */
+        private Bitmap getDefaultUserIcon(CharSequence userName) {
+            CharSequence displayText = userName.subSequence(0, 1);
+            Bitmap out = Bitmap.createBitmap(mPodImageAvatarWidth, mPodImageAvatarHeight,
+                    Bitmap.Config.ARGB_8888);
+            Canvas canvas = new Canvas(out);
+
+            // Draw the circle background.
+            GradientDrawable shape = new GradientDrawable();
+            shape.setShape(GradientDrawable.RADIAL_GRADIENT);
+            shape.setGradientRadius(1.0f);
+            shape.setColor(getContext().getColor(R.color.car_user_switcher_no_user_image_bgcolor));
+            shape.setBounds(0, 0, mPodImageAvatarWidth, mPodImageAvatarHeight);
+            shape.draw(canvas);
+
+            // Draw the letter in the center.
+            Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
+            paint.setColor(getContext().getColor(R.color.car_user_switcher_no_user_image_fgcolor));
+            paint.setTextAlign(Align.CENTER);
+            paint.setTextSize(getResources().getDimensionPixelSize(
+                    R.dimen.car_fullscreen_user_pod_icon_text_size));
+            Paint.FontMetricsInt metrics = paint.getFontMetricsInt();
+            // The Y coordinate is measured by taking half the height of the pod, but that would
+            // draw the character putting the bottom of the font in the middle of the pod.  To
+            // correct this, half the difference between the top and bottom distance metrics of the
+            // font gives the offset of the font.  Bottom is a positive value, top is negative, so
+            // the different is actually a sum.  The "half" operation is then factored out.
+            canvas.drawText(displayText.toString(), mPodImageAvatarWidth / 2,
+                    (mPodImageAvatarHeight - (metrics.bottom + metrics.top)) / 2, paint);
+
+            return out;
         }
 
         private View makeUserPod(LayoutInflater inflater, Context context,
@@ -161,8 +307,12 @@
             }
 
             ImageView iconView = (ImageView) view.findViewById(R.id.user_avatar);
-            if (record == null || record.picture == null) {
-                iconView.setImageDrawable(getUserIcon(context, record));
+            if (record == null || (record.picture == null && !record.isAddUser)) {
+                iconView.setImageBitmap(getDefaultUserIcon(nameView.getText()));
+            } else if (record.isAddUser) {
+                Drawable icon = context.getDrawable(R.drawable.ic_add_circle_qs);
+                icon.setTint(context.getColor(R.color.car_user_switcher_no_user_image_bgcolor));
+                iconView.setImageDrawable(icon);
             } else {
                 iconView.setImageBitmap(record.picture);
             }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java
index fcc982ea..b95b8a3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java
@@ -114,7 +114,6 @@
         mIcon = mView.findViewById(com.android.internal.R.id.icon);
         mHeaderText = mView.findViewById(com.android.internal.R.id.header_text);
         mExpandButton = mView.findViewById(com.android.internal.R.id.expand_button);
-        mExpandButton.setLabeledBy(mRow);
         mWorkProfileImage = mView.findViewById(com.android.internal.R.id.profile_badge);
         mColor = resolveColor(mExpandButton);
         mNotificationHeader = mView.findViewById(com.android.internal.R.id.notification_header);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationInflater.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationInflater.java
index bf926c6..f967118 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationInflater.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationInflater.java
@@ -193,7 +193,7 @@
 
         int flag = FLAG_REINFLATE_CONTENT_VIEW;
         if ((reInflateFlags & flag) != 0) {
-            boolean isNewView = !compareRemoteViews(result.newContentView, entry.cachedContentView);
+            boolean isNewView = !canReapplyRemoteView(result.newContentView, entry.cachedContentView);
             ApplyCallback applyCallback = new ApplyCallback() {
                 @Override
                 public void setResultView(View v) {
@@ -215,7 +215,7 @@
         flag = FLAG_REINFLATE_EXPANDED_VIEW;
         if ((reInflateFlags & flag) != 0) {
             if (result.newExpandedView != null) {
-                boolean isNewView = !compareRemoteViews(result.newExpandedView,
+                boolean isNewView = !canReapplyRemoteView(result.newExpandedView,
                         entry.cachedBigContentView);
                 ApplyCallback applyCallback = new ApplyCallback() {
                     @Override
@@ -240,7 +240,7 @@
         flag = FLAG_REINFLATE_HEADS_UP_VIEW;
         if ((reInflateFlags & flag) != 0) {
             if (result.newHeadsUpView != null) {
-                boolean isNewView = !compareRemoteViews(result.newHeadsUpView,
+                boolean isNewView = !canReapplyRemoteView(result.newHeadsUpView,
                         entry.cachedHeadsUpContentView);
                 ApplyCallback applyCallback = new ApplyCallback() {
                     @Override
@@ -264,7 +264,7 @@
 
         flag = FLAG_REINFLATE_PUBLIC_VIEW;
         if ((reInflateFlags & flag) != 0) {
-            boolean isNewView = !compareRemoteViews(result.newPublicView,
+            boolean isNewView = !canReapplyRemoteView(result.newPublicView,
                     entry.cachedPublicContentView);
             ApplyCallback applyCallback = new ApplyCallback() {
                 @Override
@@ -288,7 +288,7 @@
         if ((reInflateFlags & flag) != 0) {
             NotificationContentView newParent = redactAmbient ? publicLayout : privateLayout;
             boolean isNewView = !canReapplyAmbient(row, redactAmbient) ||
-                    !compareRemoteViews(result.newAmbientView, entry.cachedAmbientContentView);
+                    !canReapplyRemoteView(result.newAmbientView, entry.cachedAmbientContentView);
             ApplyCallback applyCallback = new ApplyCallback() {
                 @Override
                 public void setResultView(View v) {
@@ -486,14 +486,21 @@
         return builder.createContentView(useLarge);
     }
 
-    // Returns true if the RemoteViews are the same.
-    private static boolean compareRemoteViews(final RemoteViews a, final RemoteViews b) {
-        return (a == null && b == null) ||
-                (a != null && b != null
-                        && b.getPackage() != null
-                        && a.getPackage() != null
-                        && a.getPackage().equals(b.getPackage())
-                        && a.getLayoutId() == b.getLayoutId());
+    /**
+     * @param newView The new view that will be applied
+     * @param oldView The old view that was applied to the existing view before
+     * @return {@code true} if the RemoteViews are the same and the view can be reused to reapply.
+     */
+     @VisibleForTesting
+     static boolean canReapplyRemoteView(final RemoteViews newView,
+            final RemoteViews oldView) {
+        return (newView == null && oldView == null) ||
+                (newView != null && oldView != null
+                        && oldView.getPackage() != null
+                        && newView.getPackage() != null
+                        && newView.getPackage().equals(oldView.getPackage())
+                        && newView.getLayoutId() == oldView.getLayoutId()
+                        && !oldView.isReapplyDisallowed());
     }
 
     public void setInflationCallback(InflationCallback callback) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.java
index 844a2c4..3115361 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.java
@@ -16,7 +16,10 @@
 
 package com.android.systemui.statusbar.notification;
 
+import android.content.Context;
 import android.graphics.Color;
+import android.os.UserHandle;
+import android.provider.Settings;
 import android.view.View;
 import android.widget.ImageView;
 
@@ -57,4 +60,10 @@
         offsetView.getLocationOnScreen(sLocationOffset);
         return sLocationOffset[1] - sLocationBase[1];
     }
+
+    public static boolean isHapticFeedbackDisabled(Context context) {
+        return Settings.System.getIntForUser(context.getContentResolver(),
+                Settings.System.HAPTIC_FEEDBACK_ENABLED, 0, UserHandle.USER_CURRENT) == 0;
+    }
+
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
index 3daaf59..4bca797 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
@@ -41,8 +41,6 @@
     private static final boolean DEBUG = false;
     private static final boolean DEBUG_COLORS = false;
 
-    public static final boolean HIGH_END = ActivityManager.isHighEndGfx();
-
     public static final int MODE_OPAQUE = 0;
     public static final int MODE_SEMI_TRANSPARENT = 1;
     public static final int MODE_TRANSLUCENT = 2;
@@ -66,9 +64,7 @@
         mTag = "BarTransitions." + view.getClass().getSimpleName();
         mView = view;
         mBarBackground = new BarBackgroundDrawable(mView.getContext(), gradientResourceId);
-        if (HIGH_END) {
-            mView.setBackground(mBarBackground);
-        }
+        mView.setBackground(mBarBackground);
     }
 
     public int getMode() {
@@ -89,7 +85,7 @@
 
     public boolean isAlwaysOpaque() {
         // Low-end devices do not support translucent modes, fallback to opaque
-        return !HIGH_END || mAlwaysOpaque;
+        return mAlwaysOpaque;
     }
 
     public void transitionTo(int mode, boolean animate) {
@@ -109,9 +105,7 @@
     }
 
     protected void onTransition(int oldMode, int newMode, boolean animate) {
-        if (HIGH_END) {
-            applyModeBackground(oldMode, newMode, animate);
-        }
+        applyModeBackground(oldMode, newMode, animate);
     }
 
     protected void applyModeBackground(int oldMode, int newMode, boolean animate) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
index 2bc2665..a83e659 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
@@ -174,16 +174,6 @@
         mCurrentView = currentView.findViewById(mId);
     }
 
-    public void setCarMode(boolean carMode) {
-        final int N = mViews.size();
-        for (int i = 0; i < N; i++) {
-            final View view = mViews.get(i);
-            if (view instanceof ButtonInterface) {
-                ((ButtonInterface) view).setCarMode(carMode);
-            }
-        }
-    }
-
     public void setVertical(boolean vertical) {
         mVertical = vertical;
         final int N = mViews.size();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java
index 4339ade..2c3f452 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java
@@ -14,6 +14,9 @@
 
 package com.android.systemui.statusbar.phone;
 
+import static android.app.StatusBarManager.DISABLE_NOTIFICATION_ICONS;
+import static android.app.StatusBarManager.DISABLE_SYSTEM_INFO;
+
 import static com.android.systemui.statusbar.phone.StatusBar.reinflateSignalCluster;
 
 import android.annotation.Nullable;
@@ -144,15 +147,15 @@
         final int old1 = mDisabled1;
         final int diff1 = state1 ^ old1;
         mDisabled1 = state1;
-        if ((diff1 & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) {
-            if ((state1 & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) {
+        if ((diff1 & DISABLE_SYSTEM_INFO) != 0) {
+            if ((state1 & DISABLE_SYSTEM_INFO) != 0) {
                 hideSystemIconArea(animate);
             } else {
                 showSystemIconArea(animate);
             }
         }
-        if ((diff1 & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) {
-            if ((state1 & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) {
+        if ((diff1 & DISABLE_NOTIFICATION_ICONS) != 0) {
+            if ((state1 & DISABLE_NOTIFICATION_ICONS) != 0) {
                 hideNotificationIconArea(animate);
             } else {
                 showNotificationIconArea(animate);
@@ -164,22 +167,28 @@
         if (!mStatusBarComponent.isLaunchTransitionFadingAway()
                 && !mKeyguardMonitor.isKeyguardFadingAway()
                 && shouldHideNotificationIcons()) {
-            state |= StatusBarManager.DISABLE_NOTIFICATION_ICONS;
-            state |= StatusBarManager.DISABLE_SYSTEM_INFO;
+            state |= DISABLE_NOTIFICATION_ICONS;
+            state |= DISABLE_SYSTEM_INFO;
         }
         if (mNetworkController != null && EncryptionHelper.IS_DATA_ENCRYPTED) {
             if (mNetworkController.hasEmergencyCryptKeeperText()) {
-                state |= StatusBarManager.DISABLE_NOTIFICATION_ICONS;
+                state |= DISABLE_NOTIFICATION_ICONS;
             }
             if (!mNetworkController.isRadioOn()) {
-                state |= StatusBarManager.DISABLE_SYSTEM_INFO;
+                state |= DISABLE_SYSTEM_INFO;
             }
         }
         return state;
     }
 
     private boolean shouldHideNotificationIcons() {
-        return !mStatusBar.isClosed() && mStatusBarComponent.hideStatusBarIconsWhenExpanded();
+        if (!mStatusBar.isClosed() && mStatusBarComponent.hideStatusBarIconsWhenExpanded()) {
+            return true;
+        }
+        if (mStatusBarComponent.hideStatusBarIconsForBouncer()) {
+            return true;
+        }
+        return false;
     }
 
     public void hideSystemIconArea(boolean animate) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.java
index 37554c4..6f53844 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.java
@@ -37,12 +37,17 @@
     private final Configuration mLastConfig = new Configuration();
     private int mDensity;
     private float mFontScale;
+    private boolean mInCarMode;
+    private int mUiMode;
     private LocaleList mLocaleList;
 
     public ConfigurationControllerImpl(Context context) {
         Configuration currentConfig = context.getResources().getConfiguration();
         mFontScale = currentConfig.fontScale;
         mDensity = currentConfig.densityDpi;
+        mInCarMode = (currentConfig.uiMode  & Configuration.UI_MODE_TYPE_MASK)
+                == Configuration.UI_MODE_TYPE_CAR;
+        mUiMode = currentConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
         mLocaleList = currentConfig.getLocales();
     }
 
@@ -58,7 +63,9 @@
         });
         final float fontScale = newConfig.fontScale;
         final int density = newConfig.densityDpi;
-        if (density != mDensity || mFontScale != fontScale) {
+        int uiMode = newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
+        if (density != mDensity || fontScale != mFontScale
+                || (mInCarMode && uiMode != mUiMode)) {
             listeners.forEach(l -> {
                 if (mListeners.contains(l)) {
                     l.onDensityOrFontScaleChanged();
@@ -66,6 +73,7 @@
             });
             mDensity = density;
             mFontScale = fontScale;
+            mUiMode = uiMode;
         }
 
         final LocaleList localeList = newConfig.getLocales();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java
index c45c05e..8afb849 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java
@@ -54,6 +54,7 @@
     private boolean mFullyPulsing;
 
     private float mAodFrontScrimOpacity = 0;
+    private Runnable mSetDozeInFrontAlphaDelayed;
 
     public DozeScrimController(ScrimController scrimController, Context context) {
         mContext = context;
@@ -69,8 +70,7 @@
             mDozingAborted = false;
             abortAnimations();
             mScrimController.setDozeBehindAlpha(1f);
-            mScrimController.setDozeInFrontAlpha(
-                    mDozeParameters.getAlwaysOn() ? mAodFrontScrimOpacity : 1f);
+            setDozeInFrontAlpha(mDozeParameters.getAlwaysOn() ? mAodFrontScrimOpacity : 1f);
         } else {
             cancelPulsing();
             if (animate) {
@@ -83,7 +83,7 @@
             } else {
                 abortAnimations();
                 mScrimController.setDozeBehindAlpha(0f);
-                mScrimController.setDozeInFrontAlpha(0f);
+                setDozeInFrontAlpha(0f);
             }
         }
     }
@@ -97,7 +97,7 @@
         mAodFrontScrimOpacity = scrimOpacity;
         if (mDozing && !isPulsing() && !mDozingAborted && !mWakeAndUnlocking
                 && mDozeParameters.getAlwaysOn()) {
-            mScrimController.setDozeInFrontAlpha(mAodFrontScrimOpacity);
+            setDozeInFrontAlpha(mAodFrontScrimOpacity);
         }
     }
 
@@ -107,7 +107,7 @@
         if (!mWakeAndUnlocking) {
             mWakeAndUnlocking = true;
             mScrimController.setDozeBehindAlpha(0f);
-            mScrimController.setDozeInFrontAlpha(0f);
+            setDozeInFrontAlpha(0f);
         }
     }
 
@@ -127,7 +127,7 @@
         // be invoked when we're done so that the caller can drop the pulse wakelock.
         mPulseCallback = callback;
         mPulseReason = reason;
-        mScrimController.setDozeInFrontAlpha(1f);
+        setDozeInFrontAlpha(1f);
         mHandler.post(mPulseIn);
     }
 
@@ -138,9 +138,8 @@
         cancelPulsing();
         if (mDozing && !mWakeAndUnlocking) {
             mScrimController.setDozeBehindAlpha(1f);
-            mScrimController.setDozeInFrontAlpha(
-                    mDozeParameters.getAlwaysOn() && !mDozingAborted ?
-                            mAodFrontScrimOpacity : 1f);
+            setDozeInFrontAlpha(mDozeParameters.getAlwaysOn() && !mDozingAborted
+                    ? mAodFrontScrimOpacity : 1f);
         }
     }
 
@@ -295,6 +294,25 @@
                 : mScrimController.getDozeBehindAlpha();
     }
 
+    private void setDozeInFrontAlpha(float opacity) {
+        setDozeInFrontAlphaDelayed(opacity, 0 /* delay */);
+
+    }
+
+    private void setDozeInFrontAlphaDelayed(float opacity, long delayMs) {
+        if (mSetDozeInFrontAlphaDelayed != null) {
+            mHandler.removeCallbacks(mSetDozeInFrontAlphaDelayed);
+            mSetDozeInFrontAlphaDelayed = null;
+        }
+        if (delayMs <= 0) {
+            mScrimController.setDozeInFrontAlpha(opacity);
+        } else {
+            mHandler.postDelayed(mSetDozeInFrontAlphaDelayed = () -> {
+                setDozeInFrontAlpha(opacity);
+            }, delayMs);
+        }
+    }
+
     private final Runnable mPulseIn = new Runnable() {
         @Override
         public void run() {
@@ -364,7 +382,9 @@
             // Signal that the pulse is all finished so we can turn the screen off now.
             DozeScrimController.this.pulseFinished();
             if (mDozeParameters.getAlwaysOn()) {
-                mScrimController.setDozeInFrontAlpha(mAodFrontScrimOpacity);
+                // Setting power states can happen after we push out the frame. Make sure we
+                // stay fully opaque until the power state request reaches the lower levels.
+                setDozeInFrontAlphaDelayed(mAodFrontScrimOpacity, 100);
             }
         }
     };
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java
index cb96dea..91369db 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java
@@ -32,6 +32,8 @@
 import com.android.systemui.keyguard.ScreenLifecycle;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 
+import java.io.PrintWriter;
+
 /**
  * Controller which coordinates all the fingerprint unlocking actions with the UI.
  */
@@ -83,6 +85,11 @@
     public static final int MODE_DISMISS_BOUNCER = 6;
 
     /**
+     * Mode in which fingerprint wakes and unlocks the device from a dream.
+     */
+    public static final int MODE_WAKE_AND_UNLOCK_FROM_DREAM = 7;
+
+    /**
      * How much faster we collapse the lockscreen when authenticating with fingerprint.
      */
     private static final float FINGERPRINT_COLLAPSE_SPEEDUP_FACTOR = 1.1f;
@@ -191,6 +198,8 @@
     }
 
     public void startWakeAndUnlock(int mode) {
+        // TODO(b/62444020): remove when this bug is fixed
+        Log.v(TAG, "startWakeAndUnlock(" + mode + ")");
         boolean wasDeviceInteractive = mUpdateMonitor.isDeviceInteractive();
         mMode = mode;
         mHasScreenTurnedOnSinceAuthenticating = false;
@@ -228,16 +237,19 @@
                 }
                 Trace.endSection();
                 break;
+            case MODE_WAKE_AND_UNLOCK_FROM_DREAM:
             case MODE_WAKE_AND_UNLOCK_PULSING:
             case MODE_WAKE_AND_UNLOCK:
                 if (mMode == MODE_WAKE_AND_UNLOCK_PULSING) {
                     Trace.beginSection("MODE_WAKE_AND_UNLOCK_PULSING");
                     mStatusBar.updateMediaMetaData(false /* metaDataChanged */,
                             true /* allowEnterAnimation */);
-                } else {
+                } else if (mMode == MODE_WAKE_AND_UNLOCK){
                     Trace.beginSection("MODE_WAKE_AND_UNLOCK");
-
                     mDozeScrimController.abortDoze();
+                } else {
+                    Trace.beginSection("MODE_WAKE_AND_UNLOCK_FROM_DREAM");
+                    mUpdateMonitor.awakenFromDream();
                 }
                 mStatusBarWindowManager.setStatusBarFocusable(false);
                 mKeyguardViewMediator.onWakeAndUnlocking();
@@ -264,6 +276,7 @@
 
     @Override
     public void onStartedGoingToSleep(int why) {
+        resetMode();
         mPendingAuthenticatedUserId = -1;
     }
 
@@ -296,6 +309,7 @@
 
     private int calculateMode() {
         boolean unlockingAllowed = mUpdateMonitor.isUnlockingWithFingerprintAllowed();
+        boolean deviceDreaming = mUpdateMonitor.isDreaming();
 
         if (!mUpdateMonitor.isDeviceInteractive()) {
             if (!mStatusBarKeyguardViewManager.isShowing()) {
@@ -308,6 +322,9 @@
                 return MODE_SHOW_BOUNCER;
             }
         }
+        if (unlockingAllowed && deviceDreaming) {
+            return MODE_WAKE_AND_UNLOCK_FROM_DREAM;
+        }
         if (mStatusBarKeyguardViewManager.isShowing()) {
             if (mStatusBarKeyguardViewManager.isBouncerShowing() && unlockingAllowed) {
                 return MODE_DISMISS_BOUNCER;
@@ -346,6 +363,10 @@
     }
 
     public void finishKeyguardFadingAway() {
+        resetMode();
+    }
+
+    private void resetMode() {
         mMode = MODE_NONE;
         mStatusBarWindowManager.setForceDozeBrightness(false);
         if (mStatusBar.getNavigationBarView() != null) {
@@ -375,4 +396,10 @@
     public boolean hasScreenTurnedOnSinceAuthenticating() {
         return mHasScreenTurnedOnSinceAuthenticating;
     }
+
+    public void dump(PrintWriter pw) {
+        pw.println(" FingerprintUnlockController:");
+        pw.print("   mMode="); pw.println(mMode);
+        pw.print("   mWakeLock="); pw.println(mWakeLock);
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpTouchHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpTouchHelper.java
index 82e6a35..c85571c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpTouchHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpTouchHelper.java
@@ -111,6 +111,7 @@
                     // flicker of one frame as it's not expanded yet.
                     mHeadsUpManager.unpinAll();
                     mPanel.clearNotificationEffects();
+                    endMotion();
                     return true;
                 }
                 break;
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 6cfa838..f058862 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
@@ -72,7 +72,6 @@
 import com.android.systemui.plugins.IntentButtonProvider.IntentButton;
 import com.android.systemui.plugins.IntentButtonProvider.IntentButton.IconState;
 import com.android.systemui.plugins.PluginListener;
-import com.android.systemui.plugins.PluginManager;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.KeyguardAffordanceView;
@@ -82,10 +81,8 @@
 import com.android.systemui.statusbar.policy.ExtensionController.Extension;
 import com.android.systemui.statusbar.policy.FlashlightController;
 import com.android.systemui.statusbar.policy.PreviewInflater;
-import com.android.systemui.tuner.LockscreenFragment;
 import com.android.systemui.tuner.LockscreenFragment.LockButtonFactory;
 import com.android.systemui.tuner.TunerService;
-import com.android.systemui.tuner.TunerService.Tunable;
 
 /**
  * Implementation for the bottom area of the Keyguard, including camera/phone affordance and status
@@ -510,6 +507,7 @@
                     // force the crossfade animation if an orientation change
                     // happens to occur during the launch.
                     ActivityOptions o = ActivityOptions.makeBasic();
+                    o.setDisallowEnterPictureInPictureWhileLaunching(true);
                     o.setRotationAnimationHint(
                             WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS);
                     try {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
index fd95cc4..99debee 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
@@ -27,6 +27,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewTreeObserver;
+import android.view.WindowInsets;
 import android.view.accessibility.AccessibilityEvent;
 
 import com.android.internal.widget.LockPatternUtils;
@@ -69,6 +70,7 @@
                 }
             };
     private final Runnable mRemoveViewRunnable = this::removeView;
+    private int mStatusBarHeight;
 
     public KeyguardBouncer(Context context, ViewMediatorCallback callback,
             LockPatternUtils lockPatternUtils, ViewGroup container,
@@ -128,7 +130,9 @@
             mRoot.setVisibility(View.VISIBLE);
             mKeyguardView.onResume();
             showPromptReason(mBouncerPromptReason);
-            if (mKeyguardView.getHeight() != 0) {
+            // We might still be collapsed and the view didn't have time to layout yet or still
+            // be small, let's wait on the predraw to do the animation in that case.
+            if (mKeyguardView.getHeight() != 0 && mKeyguardView.getHeight() != mStatusBarHeight) {
                 mKeyguardView.startAppearAnimation();
             } else {
                 mKeyguardView.getViewTreeObserver().addOnPreDrawListener(
@@ -247,12 +251,18 @@
         removeView();
         mHandler.removeCallbacks(mRemoveViewRunnable);
         mRoot = (ViewGroup) LayoutInflater.from(mContext).inflate(R.layout.keyguard_bouncer, null);
-        mKeyguardView = (KeyguardHostView) mRoot.findViewById(R.id.keyguard_host_view);
+        mKeyguardView = mRoot.findViewById(R.id.keyguard_host_view);
         mKeyguardView.setLockPatternUtils(mLockPatternUtils);
         mKeyguardView.setViewMediatorCallback(mCallback);
         mContainer.addView(mRoot, mContainer.getChildCount());
+        mStatusBarHeight = mRoot.getResources().getDimensionPixelOffset(
+                com.android.systemui.R.dimen.status_bar_height);
         mRoot.setVisibility(View.INVISIBLE);
-        mRoot.dispatchApplyWindowInsets(mRoot.getRootWindowInsets());
+
+        final WindowInsets rootInsets = mRoot.getRootWindowInsets();
+        if (rootInsets != null) {
+            mRoot.dispatchApplyWindowInsets(rootInsets);
+        }
     }
 
     protected void removeView() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
index e65bab6..f7aa818 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
@@ -151,7 +151,7 @@
         progress = Math.max(0.0f, Math.min(progress, 1.0f));
         progress = mAccelerateInterpolator.getInterpolation(progress);
         progress *= Math.pow(1 + mEmptyDragAmount / mDensity / 300, 0.3f);
-        return progress;
+        return interpolate(progress, 1, mDarkAmount);
     }
 
     private int getClockNotificationsPadding() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
index 917a56f..533771a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
@@ -72,6 +72,7 @@
 
     private final Rect mLastFullscreenBounds = new Rect();
     private final Rect mLastDockedBounds = new Rect();
+    private boolean mQsCustomizing;
 
     public LightBarController(Context ctx) {
         mDarkModeColor = Color.valueOf(ctx.getColor(R.color.dark_mode_icon_color_single_tone));
@@ -129,7 +130,8 @@
             mHasLightNavigationBar = isLight(vis, navigationBarMode,
                     View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
             mNavigationLight = mHasLightNavigationBar
-                    && (mScrimAlphaBelowThreshold || !mInvertLightNavBarWithScrim);
+                    && (mScrimAlphaBelowThreshold || !mInvertLightNavBarWithScrim)
+                    && !mQsCustomizing;
             if (mNavigationLight != last) {
                 updateNavigation();
             }
@@ -146,6 +148,12 @@
                 mLastNavigationBarMode);
     }
 
+    public void setQsCustomizing(boolean customizing) {
+        if (mQsCustomizing == customizing) return;
+        mQsCustomizing = customizing;
+        reevaluate();
+    }
+
     public void setScrimAlpha(float alpha) {
         mScrimAlpha = alpha;
         boolean belowThresholdBefore = mScrimAlphaBelowThreshold;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java
index c241290..5c9446ce86 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java
@@ -207,9 +207,9 @@
         if (mAccessibilityController == null) {
             return;
         }
-        boolean clickToUnlock = mAccessibilityController.isTouchExplorationEnabled();
+        boolean clickToUnlock = mAccessibilityController.isAccessibilityEnabled();
         boolean clickToForceLock = mUnlockMethodCache.isTrustManaged()
-                && !mAccessibilityController.isAccessibilityEnabled();
+                && !clickToUnlock;
         boolean longClickToForceLock = mUnlockMethodCache.isTrustManaged()
                 && !clickToForceLock;
         setClickable(clickToForceLock || clickToUnlock);
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 fbad937..c44e1db 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
@@ -544,7 +544,8 @@
 
     private boolean onLongPressRecents() {
         if (mRecents == null || !ActivityManager.supportsMultiWindow(getContext())
-                || !mDivider.getView().getSnapAlgorithm().isSplitScreenFeasible()) {
+                || !mDivider.getView().getSnapAlgorithm().isSplitScreenFeasible()
+                || Recents.getConfiguration().isLowRamDevice) {
             return false;
         }
 
@@ -676,10 +677,6 @@
                         | WindowManager.LayoutParams.FLAG_SLIPPERY,
                 PixelFormat.TRANSLUCENT);
         lp.token = new Binder();
-        // this will allow the navbar to run in an overlay on devices that support this
-        if (ActivityManager.isHighEndGfx()) {
-            lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
-        }
         lp.setTitle("NavigationBar");
         lp.windowAnimations = 0;
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
index aaa31b6..4e79314b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
@@ -131,9 +131,6 @@
         mRot90.setId(R.id.rot90);
         addView(mRot90);
         updateAlternativeOrder();
-        if (getParent() instanceof NavigationBarView) {
-            ((NavigationBarView) getParent()).updateRotatedViews();
-        }
     }
 
     protected String getDefaultLayout() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
index c950036..b81a3b0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
@@ -80,7 +80,8 @@
 
     @Override
     protected boolean isLightsOut(int mode) {
-        return super.isLightsOut(mode) || (mAutoDim && !mWallpaperVisible);
+        return super.isLightsOut(mode) || (mAutoDim && !mWallpaperVisible
+                && mode != MODE_WARNING);
     }
 
     public LightBarTransitionsController getLightTransitionsController() {
@@ -108,7 +109,9 @@
         // ok, everyone, stop it right there
         navButtons.animate().cancel();
 
-        final float navButtonsAlpha = lightsOut ? 0.6f : 1f;
+        // Bump percentage by 10% if dark.
+        float darkBump = mLightTransitionsController.getCurrentDarkIntensity() / 10;
+        final float navButtonsAlpha = lightsOut ? 0.6f + darkBump : 1f;
 
         if (!animate) {
             navButtons.setAlpha(navButtonsAlpha);
@@ -130,6 +133,9 @@
         for (int i = buttonDispatchers.size() - 1; i >= 0; i--) {
             buttonDispatchers.valueAt(i).setDarkIntensity(darkIntensity);
         }
+        if (mAutoDim) {
+            applyLightsOut(false, true);
+        }
     }
 
     private final View.OnTouchListener mLightsOutListener = new View.OnTouchListener() {
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 d116bbf3..9a7039a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -560,15 +560,15 @@
     public void onFinishInflate() {
         mNavigationInflaterView = (NavigationBarInflaterView) findViewById(
                 R.id.navigation_inflater);
-        updateRotatedViews();
         mNavigationInflaterView.setButtonDispatchers(mButtonDispatchers);
 
         getImeSwitchButton().setOnClickListener(mImeSwitcherClickListener);
 
         DockedStackExistsListener.register(mDockedListener);
+        updateRotatedViews();
     }
 
-    void updateRotatedViews() {
+    private void updateRotatedViews() {
         mRotatedViews[Surface.ROTATION_0] =
                 mRotatedViews[Surface.ROTATION_180] = findViewById(R.id.rot0);
         mRotatedViews[Surface.ROTATION_270] =
@@ -609,6 +609,7 @@
         updateCurrentView();
 
         mDeadZone = (DeadZone) mCurrentView.findViewById(R.id.deadzone);
+
         ((NavigationBarFrame) getRootView()).setDeadZone(mDeadZone);
         mDeadZone.setDisplayRotation(mCurrentRotation);
 
@@ -682,8 +683,6 @@
 
             if (isCarMode != mInCarMode) {
                 mInCarMode = isCarMode;
-                getHomeButton().setCarMode(isCarMode);
-
                 if (ALTERNATE_CAR_MODE_UI) {
                     mUseCarModeUi = isCarMode;
                     uiCarModeChanged = true;
@@ -749,6 +748,7 @@
     @Override
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
+        reorient();
         onPluginDisconnected(null); // Create default gesture helper
         Dependency.get(PluginManager.class).addPluginListener(this,
                 NavGesture.class, false /* Only one */);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NearestTouchFrame.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NearestTouchFrame.java
index 004a604..1452e0c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NearestTouchFrame.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NearestTouchFrame.java
@@ -87,7 +87,8 @@
             if (mTouchingChild != null) {
                 event.offsetLocation(mTouchingChild.getWidth() / 2 - event.getX(),
                         mTouchingChild.getHeight() / 2 - event.getY());
-                return mTouchingChild.dispatchTouchEvent(event);
+                return mTouchingChild.getVisibility() == VISIBLE
+                        && mTouchingChild.dispatchTouchEvent(event);
             }
         }
         return super.onTouchEvent(event);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
index 41a69b4..40fe50f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
@@ -4,10 +4,8 @@
 import android.content.res.Resources;
 import android.graphics.Color;
 import android.graphics.Rect;
-import android.graphics.drawable.Icon;
 import android.support.annotation.NonNull;
 import android.support.v4.util.ArrayMap;
-import android.support.v4.util.ArraySet;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.FrameLayout;
@@ -269,18 +267,26 @@
      */
     private void applyNotificationIconsTint() {
         for (int i = 0; i < mNotificationIcons.getChildCount(); i++) {
-            StatusBarIconView v = (StatusBarIconView) mNotificationIcons.getChildAt(i);
-            boolean isPreL = Boolean.TRUE.equals(v.getTag(R.id.icon_is_pre_L));
-            int color = StatusBarIconView.NO_COLOR;
-            boolean colorize = !isPreL || NotificationUtils.isGrayscale(v, mNotificationColorUtil);
-            if (colorize) {
-                color = DarkIconDispatcher.getTint(mTintArea, v, mIconTint);
+            final StatusBarIconView iv = (StatusBarIconView) mNotificationIcons.getChildAt(i);
+            if (iv.getWidth() != 0) {
+                updateTintForIcon(iv);
+            } else {
+                iv.executeOnLayout(() -> updateTintForIcon(iv));
             }
-            v.setStaticDrawableColor(color);
-            v.setDecorColor(mIconTint);
         }
     }
 
+    private void updateTintForIcon(StatusBarIconView v) {
+        boolean isPreL = Boolean.TRUE.equals(v.getTag(R.id.icon_is_pre_L));
+        int color = StatusBarIconView.NO_COLOR;
+        boolean colorize = !isPreL || NotificationUtils.isGrayscale(v, mNotificationColorUtil);
+        if (colorize) {
+            color = DarkIconDispatcher.getTint(mTintArea, v, mIconTint);
+        }
+        v.setStaticDrawableColor(color);
+        v.setDecorColor(mIconTint);
+    }
+
     public void setDark(boolean dark) {
         mNotificationIcons.setDark(dark, false, 0);
         mShelfIcons.setDark(dark, false, 0);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
index 6f5ad96..0f246c6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
@@ -16,12 +16,17 @@
 
 package com.android.systemui.statusbar.phone;
 
+import static com.android.systemui.statusbar.notification.NotificationUtils.isHapticFeedbackDisabled;
+
 import android.content.Context;
 import android.content.res.Configuration;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.drawable.Icon;
+import android.os.AsyncTask;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
 import android.support.v4.util.ArrayMap;
 import android.support.v4.util.ArraySet;
 import android.util.AttributeSet;
@@ -34,7 +39,6 @@
 import com.android.systemui.statusbar.StatusBarIconView;
 import com.android.systemui.statusbar.stack.AnimationFilter;
 import com.android.systemui.statusbar.stack.AnimationProperties;
-import com.android.systemui.statusbar.stack.StackStateAnimator;
 import com.android.systemui.statusbar.stack.ViewState;
 
 import java.util.ArrayList;
@@ -76,7 +80,10 @@
     }.setDuration(CANNED_ANIMATION_DURATION)
             .setCustomInterpolator(View.TRANSLATION_Y, Interpolators.ICON_OVERSHOT);
 
-    private static final AnimationProperties mTempProperties = new AnimationProperties() {
+    /**
+     * Temporary AnimationProperties to avoid unnecessary allocations.
+     */
+    private static final AnimationProperties sTempProperties = new AnimationProperties() {
         private AnimationFilter mAnimationFilter = new AnimationFilter();
 
         @Override
@@ -94,15 +101,6 @@
         }
     }.setDuration(200).setDelay(50);
 
-    private static final AnimationProperties UNDARK_PROPERTIES = new AnimationProperties() {
-        private AnimationFilter mAnimationFilter = new AnimationFilter()
-                .animateX();
-
-        @Override
-        public AnimationFilter getAnimationFilter() {
-            return mAnimationFilter;
-        }
-    }.setDuration(StackStateAnimator.ANIMATION_DURATION_WAKEUP);
     public static final int MAX_VISIBLE_ICONS_WHEN_DARK = 5;
 
     private boolean mShowAllIcons = true;
@@ -122,6 +120,8 @@
     private float mVisualOverflowAdaption;
     private boolean mDisallowNextAnimation;
     private boolean mAnimationsEnabled = true;
+    private boolean mVibrateOnAnimation;
+    private Vibrator mVibrator;
     private ArrayMap<String, ArrayList<StatusBarIcon>> mReplacingIcons;
     private int mDarkOffsetX;
 
@@ -129,6 +129,7 @@
         super(context, attrs);
         initDimens();
         setWillNotDraw(!DEBUG);
+        mVibrator = mContext.getSystemService(Vibrator.class);
     }
 
     private void initDimens() {
@@ -467,9 +468,6 @@
             View view = getChildAt(i);
             if (view instanceof StatusBarIconView) {
                 ((StatusBarIconView) view).setDark(dark, fade, delay);
-                if (!dark && fade) {
-                    getIconState((StatusBarIconView) view).justUndarkened = true;
-                }
             }
         }
     }
@@ -499,6 +497,10 @@
         return width - (getWidth() - getActualPaddingStart() - getActualPaddingEnd()) > 0;
     }
 
+    public void setVibrateOnAnimation(boolean vibrateOnAnimation) {
+        mVibrateOnAnimation = vibrateOnAnimation;
+    }
+
     public int getIconSize() {
         return mIconSize;
     }
@@ -517,14 +519,14 @@
         mAnimationsEnabled = enabled;
     }
 
-    public void setReplacingIcons(ArrayMap<String, ArrayList<StatusBarIcon>> replacingIcons) {
-        mReplacingIcons = replacingIcons;
-    }
-
     public void setDarkOffsetX(int offsetX) {
         mDarkOffsetX = offsetX;
     }
 
+    public void setReplacingIcons(ArrayMap<String, ArrayList<StatusBarIcon>> replacingIcons) {
+        mReplacingIcons = replacingIcons;
+    }
+
     public class IconState extends ViewState {
         public static final int NO_VALUE = NotificationIconContainer.NO_VALUE;
         public float iconAppearAmount = 1.0f;
@@ -536,7 +538,6 @@
         public boolean useFullTransitionAmount;
         public boolean useLinearTransitionAmount;
         public boolean translateContent;
-        public boolean justUndarkened;
         public int iconColor = StatusBarIconView.NO_COLOR;
         public boolean noAnimations;
         public boolean isLastExpandIcon;
@@ -548,8 +549,7 @@
                 StatusBarIconView icon = (StatusBarIconView) view;
                 boolean animate = false;
                 AnimationProperties animationProperties = null;
-                boolean animationsAllowed = (mAnimationsEnabled || justUndarkened)
-                        && !mDisallowNextAnimation
+                boolean animationsAllowed = mAnimationsEnabled && !mDisallowNextAnimation
                         && !noAnimations;
                 if (animationsAllowed) {
                     if (justAdded || justReplaced) {
@@ -561,9 +561,6 @@
                             animationProperties = ADD_ICON_PROPERTIES;
                             animate = true;
                         }
-                    } else if (justUndarkened) {
-                        animationProperties = UNDARK_PROPERTIES;
-                        animate = true;
                     } else if (visibleState != icon.getVisibleState()) {
                         animationProperties = DOT_ANIMATION_PROPERTIES;
                         animate = true;
@@ -576,17 +573,17 @@
                         animate = true;
                     }
                     if (needsCannedAnimation) {
-                        AnimationFilter animationFilter = mTempProperties.getAnimationFilter();
+                        AnimationFilter animationFilter = sTempProperties.getAnimationFilter();
                         animationFilter.reset();
                         animationFilter.combineFilter(
                                 ICON_ANIMATION_PROPERTIES.getAnimationFilter());
-                        mTempProperties.resetCustomInterpolators();
-                        mTempProperties.combineCustomInterpolators(ICON_ANIMATION_PROPERTIES);
+                        sTempProperties.resetCustomInterpolators();
+                        sTempProperties.combineCustomInterpolators(ICON_ANIMATION_PROPERTIES);
                         if (animationProperties != null) {
                             animationFilter.combineFilter(animationProperties.getAnimationFilter());
-                            mTempProperties.combineCustomInterpolators(animationProperties);
+                            sTempProperties.combineCustomInterpolators(animationProperties);
                         }
-                        animationProperties = mTempProperties;
+                        animationProperties = sTempProperties;
                         animationProperties.setDuration(CANNED_ANIMATION_DURATION);
                         animate = true;
                         mCannedAnimationStartIndex = indexOfChild(view);
@@ -595,11 +592,11 @@
                             && indexOfChild(view) > mCannedAnimationStartIndex
                             && (icon.getVisibleState() != StatusBarIconView.STATE_HIDDEN
                             || visibleState != StatusBarIconView.STATE_HIDDEN)) {
-                        AnimationFilter animationFilter = mTempProperties.getAnimationFilter();
+                        AnimationFilter animationFilter = sTempProperties.getAnimationFilter();
                         animationFilter.reset();
                         animationFilter.animateX();
-                        mTempProperties.resetCustomInterpolators();
-                        animationProperties = mTempProperties;
+                        sTempProperties.resetCustomInterpolators();
+                        animationProperties = sTempProperties;
                         animationProperties.setDuration(CANNED_ANIMATION_DURATION);
                         animate = true;
                     }
@@ -611,11 +608,37 @@
                 } else {
                     super.applyToView(view);
                 }
+                boolean wasInShelf = icon.isInShelf();
+                boolean inShelf = iconAppearAmount == 1.0f;
+                icon.setIsInShelf(inShelf);
+                if (shouldVibrateChange(wasInShelf != inShelf)) {
+                    AsyncTask.execute(
+                            () -> mVibrator.vibrate(VibrationEffect.get(
+                                    VibrationEffect.EFFECT_TICK)));
+                }
             }
             justAdded = false;
             justReplaced = false;
             needsCannedAnimation = false;
-            justUndarkened = false;
+        }
+
+        private boolean shouldVibrateChange(boolean inShelfChanged) {
+            if (!mVibrateOnAnimation) {
+                return false;
+            }
+            if (justAdded) {
+                return false;
+            }
+            if (!mAnimationsEnabled) {
+                return false;
+            }
+            if (!inShelfChanged) {
+                return false;
+            }
+            if (isHapticFeedbackDisabled(mContext)) {
+                return false;
+            }
+            return true;
         }
 
         public boolean hasCustomTransformHeight() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index cca6ae0..c191618 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -32,6 +32,7 @@
 import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.Rect;
+import android.os.PowerManager;
 import android.util.AttributeSet;
 import android.util.FloatProperty;
 import android.util.MathUtils;
@@ -108,6 +109,7 @@
                     return object.mDarkAmount;
                 }
             };
+    private final PowerManager mPowerManager;
 
     private KeyguardAffordanceHelper mAffordanceHelper;
     private KeyguardUserSwitcher mKeyguardUserSwitcher;
@@ -153,7 +155,6 @@
     protected int mQsMinExpansionHeight;
     protected int mQsMaxExpansionHeight;
     private int mQsPeekHeight;
-    private boolean mQsOverscrollExpansionEnabled;
     private boolean mStackScrollerOverscrolling;
     private boolean mQsExpansionFromOverscroll;
     private float mLastOverscroll;
@@ -243,8 +244,7 @@
         super(context, attrs);
         setWillNotDraw(!DEBUG);
         mFalsingManager = FalsingManager.getInstance(context);
-        mQsOverscrollExpansionEnabled =
-                getResources().getBoolean(R.bool.config_enableQuickSettingsOverscrollExpansion);
+        mPowerManager = context.getSystemService(PowerManager.class);
     }
 
     public void setStatusBar(StatusBar bar) {
@@ -509,7 +509,8 @@
             if (row.isRemoved()) {
                 continue;
             }
-            availableSpace -= child.getMinHeight() + notificationPadding;
+            availableSpace -= child.getMinHeight(true /* ignoreTemporaryStates */)
+                    + notificationPadding;
             if (availableSpace >= 0 && count < maximum) {
                 count++;
             } else if (availableSpace > -shelfSize) {
@@ -673,7 +674,7 @@
             return true;
         }
 
-        if (mQsOverscrollExpansionEnabled && !isFullyCollapsed() && onQsIntercept(event)) {
+        if (!isFullyCollapsed() && onQsIntercept(event)) {
             return true;
         }
         return super.onInterceptTouchEvent(event);
@@ -848,8 +849,7 @@
         }
         handled |= mHeadsUpTouchHelper.onTouchEvent(event);
 
-        if (mQsOverscrollExpansionEnabled && !mHeadsUpTouchHelper.isTrackingHeadsUp()
-                && handleQsTouch(event)) {
+        if (!mHeadsUpTouchHelper.isTrackingHeadsUp() && handleQsTouch(event)) {
             return true;
         }
         if (event.getActionMasked() == MotionEvent.ACTION_DOWN && isFullyCollapsed()) {
@@ -1033,10 +1033,6 @@
 
     @Override
     public void onOverscrollTopChanged(float amount, boolean isRubberbanded) {
-        if (!mQsOverscrollExpansionEnabled) {
-            return;
-        }
-
         cancelQsAnimation();
         if (!mQsExpansionEnabled) {
             amount = 0f;
@@ -1051,10 +1047,6 @@
 
     @Override
     public void flingTopOverscroll(float velocity, boolean open) {
-        if (!mQsOverscrollExpansionEnabled) {
-            return;
-        }
-
         mLastOverscroll = 0f;
         mQsExpansionFromOverscroll = false;
         setQsExpansion(mQsExpansionHeight);
@@ -1986,6 +1978,11 @@
 
     @Override
     protected void startUnlockHintAnimation() {
+        if (mPowerManager.isPowerSaveMode()) {
+            onUnlockHintStarted();
+            onUnlockHintFinished();
+            return;
+        }
         super.startUnlockHintAnimation();
         startHighlightIconAnimation(getCenterIcon());
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
index 16d85be..afe5c91 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
@@ -16,6 +16,8 @@
 
 package com.android.systemui.statusbar.phone;
 
+import static com.android.systemui.statusbar.notification.NotificationUtils.isHapticFeedbackDisabled;
+
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ObjectAnimator;
@@ -23,7 +25,12 @@
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
+import android.os.AsyncTask;
 import android.os.SystemClock;
+import android.os.UserHandle;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.provider.Settings;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.InputDevice;
@@ -43,6 +50,7 @@
 import com.android.systemui.doze.DozeLog;
 import com.android.systemui.statusbar.FlingAnimationUtils;
 import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.notification.NotificationUtils;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
 
 import java.io.FileDescriptor;
@@ -57,6 +65,7 @@
     private float mMinExpandHeight;
     private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger();
     private boolean mPanelUpdateWhenAnimatorEnds;
+    private boolean mVibrateOnOpening;
 
     private final void logf(String fmt, Object... args) {
         Log.v(TAG, (mViewName != null ? (mViewName + ": ") : "") + String.format(fmt, args));
@@ -98,6 +107,7 @@
     private FlingAnimationUtils mFlingAnimationUtilsClosing;
     private FlingAnimationUtils mFlingAnimationUtilsDismissing;
     private FalsingManager mFalsingManager;
+    private final Vibrator mVibrator;
 
     /**
      * Whether an instant expand request is currently pending and we are just waiting for layout.
@@ -199,6 +209,9 @@
         mFalsingManager = FalsingManager.getInstance(context);
         mNotificationsDragEnabled =
                 getResources().getBoolean(R.bool.config_enableNotificationShadeDrag);
+        mVibrator = mContext.getSystemService(Vibrator.class);
+        mVibrateOnOpening = mContext.getResources().getBoolean(
+                R.bool.config_vibrateOnIconAnimation);
     }
 
     protected void loadDimens() {
@@ -390,6 +403,10 @@
         runPeekAnimation(INITIAL_OPENING_PEEK_DURATION, getOpeningHeight(),
                 false /* collapseWhenFinished */);
         notifyBarPanelExpansionChanged();
+        if (mVibrateOnOpening && !isHapticFeedbackDisabled(mContext)) {
+            AsyncTask.execute(() ->
+                    mVibrator.vibrate(VibrationEffect.get(VibrationEffect.EFFECT_TICK, false)));
+        }
     }
 
     protected abstract float getOpeningHeight();
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 d1ef035..4ae1393 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -491,7 +491,8 @@
                 boolean isManagedProfile = mUserManager.isManagedProfile(userId);
                 mHandler.post(() -> {
                     final boolean showIcon;
-                    if (isManagedProfile && !mKeyguardMonitor.isShowing()) {
+                    if (isManagedProfile &&
+                            (!mKeyguardMonitor.isShowing() || mKeyguardMonitor.isOccluded())) {
                         showIcon = true;
                         mIconController.setIcon(mSlotManagedProfile,
                                 R.drawable.stat_sys_managed_profile_status,
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 1d64480..702afa3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -48,6 +48,7 @@
 import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
 import com.android.systemui.statusbar.stack.ViewState;
 
+import java.io.PrintWriter;
 import java.util.function.Consumer;
 
 /**
@@ -768,4 +769,22 @@
             scheduleUpdate();
         }
     }
+
+    public void dump(PrintWriter pw) {
+        pw.println(" ScrimController:");
+
+        pw.print("   frontScrim:"); pw.print(" viewAlpha="); pw.print(mScrimInFront.getViewAlpha());
+        pw.print(" alpha="); pw.print(mCurrentInFrontAlpha);
+        pw.print(" dozeAlpha="); pw.print(mDozeInFrontAlpha);
+        pw.print(" tint=0x"); pw.println(Integer.toHexString(mScrimInFront.getTint()));
+
+        pw.print("   backScrim:"); pw.print(" viewAlpha="); pw.print(mScrimBehind.getViewAlpha());
+        pw.print(" alpha="); pw.print(mCurrentBehindAlpha);
+        pw.print(" dozeAlpha="); pw.print(mDozeBehindAlpha);
+        pw.print(" tint=0x"); pw.println(Integer.toHexString(mScrimBehind.getTint()));
+
+        pw.print("   mBouncerShowing="); pw.println(mBouncerShowing);
+        pw.print("   mTracking="); pw.println(mTracking);
+        pw.print("   mForceHideScrims="); pw.println(mForceHideScrims);
+    }
 }
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 5837276..0764653 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -19,7 +19,6 @@
 import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN;
 import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
 import static android.app.StatusBarManager.windowStateToString;
-import static android.content.res.Configuration.UI_MODE_TYPE_CAR;
 
 import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_ASLEEP;
 import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE;
@@ -105,7 +104,6 @@
 import android.os.UserManager;
 import android.os.Vibrator;
 import android.provider.Settings;
-import android.service.notification.NotificationListenerService;
 import android.service.notification.NotificationListenerService.RankingMap;
 import android.service.notification.StatusBarNotification;
 import android.service.vr.IVrManager;
@@ -145,7 +143,6 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.colorextraction.ColorExtractor;
-import com.android.internal.graphics.ColorUtils;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
@@ -192,6 +189,7 @@
 import com.android.systemui.qs.QSFragment;
 import com.android.systemui.qs.QSPanel;
 import com.android.systemui.qs.QSTileHost;
+import com.android.systemui.qs.car.CarQSFragment;
 import com.android.systemui.recents.Recents;
 import com.android.systemui.recents.ScreenPinningRequest;
 import com.android.systemui.recents.events.EventBus;
@@ -305,6 +303,7 @@
     // Should match the values in PhoneWindowManager
     public static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
     public static final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
+    static public final String SYSTEM_DIALOG_REASON_SCREENSHOT = "screenshot";
 
     private static final String BANNER_ACTION_CANCEL =
             "com.android.systemui.statusbar.banner_action_cancel";
@@ -431,7 +430,7 @@
     private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
     protected StatusBarWindowManager mStatusBarWindowManager;
     protected UnlockMethodCache mUnlockMethodCache;
-    private DozeServiceHost mDozeServiceHost;
+    private DozeServiceHost mDozeServiceHost = new DozeServiceHost();
     private boolean mWakeUpComingFromTouch;
     private PointF mWakeUpTouchLocation;
 
@@ -641,6 +640,12 @@
 
     // Fingerprint (as computed by getLoggingFingerprint() of the last logged state.
     private int mLastLoggedStateFingerprint;
+    private boolean mTopHidesStatusBar;
+    private boolean mStatusBarWindowHidden;
+    private boolean mHideIconsForBouncer;
+    private boolean mIsOccluded;
+    private boolean mWereIconsJustHidden;
+    private boolean mBouncerWasShowingWhenHidden;
 
     public boolean isStartedGoingToSleep() {
         return mStartedGoingToSleep;
@@ -733,7 +738,8 @@
     private KeyguardUserSwitcher mKeyguardUserSwitcher;
     private UserSwitcherController mUserSwitcherController;
     private NetworkController mNetworkController;
-    private KeyguardMonitorImpl mKeyguardMonitor;
+    private KeyguardMonitorImpl mKeyguardMonitor
+            = (KeyguardMonitorImpl) Dependency.get(KeyguardMonitor.class);
     private BatteryController mBatteryController;
     protected boolean mPanelExpanded;
     private IOverlayManager mOverlayManager;
@@ -741,7 +747,7 @@
     private boolean mIsKeyguard;
     private LogMaker mStatusBarStateLog;
     private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger();
-    private NotificationIconAreaController mNotificationIconAreaController;
+    protected NotificationIconAreaController mNotificationIconAreaController;
     private boolean mReinflateNotificationsOnUserSwitched;
     private HashMap<String, Entry> mPendingNotifications = new HashMap<>();
     private boolean mClearAllEnabled;
@@ -750,7 +756,6 @@
     private SysuiColorExtractor mColorExtractor;
     private ScreenLifecycle mScreenLifecycle;
     @VisibleForTesting WakefulnessLifecycle mWakefulnessLifecycle;
-
     protected ForegroundServiceController mForegroundServiceController;
 
     private void recycleAllVisibilityObjects(ArraySet<NotificationVisibility> array) {
@@ -789,14 +794,12 @@
     public void start() {
         mNetworkController = Dependency.get(NetworkController.class);
         mUserSwitcherController = Dependency.get(UserSwitcherController.class);
-        mKeyguardMonitor = (KeyguardMonitorImpl) Dependency.get(KeyguardMonitor.class);
         mScreenLifecycle = Dependency.get(ScreenLifecycle.class);
         mScreenLifecycle.addObserver(mScreenObserver);
         mWakefulnessLifecycle = Dependency.get(WakefulnessLifecycle.class);
         mWakefulnessLifecycle.addObserver(mWakefulnessObserver);
         mBatteryController = Dependency.get(BatteryController.class);
         mAssistManager = Dependency.get(AssistManager.class);
-        mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class);
         mSystemServicesProxy = SystemServicesProxy.getInstance(mContext);
         mOverlayManager = IOverlayManager.Stub.asInterface(
                 ServiceManager.getService(Context.OVERLAY_SERVICE));
@@ -985,7 +988,6 @@
         startKeyguard();
 
         KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mUpdateCallback);
-        mDozeServiceHost = new DozeServiceHost();
         putComponent(DozeHost.class, mDozeServiceHost);
 
         notifyUserAboutHiddenNotifications();
@@ -1129,7 +1131,7 @@
             }
         });
 
-        mLightBarController = new LightBarController(context);
+        mLightBarController = Dependency.get(LightBarController.class);
         if (mNavigationBar != null) {
             mNavigationBar.setLightBarController(mLightBarController);
         }
@@ -1175,6 +1177,8 @@
             ExtensionFragmentListener.attachExtensonToFragment(container, QS.TAG, R.id.qs_frame,
                     Dependency.get(ExtensionController.class).newExtension(QS.class)
                             .withPlugin(QS.class)
+                            .withFeature(
+                                    PackageManager.FEATURE_AUTOMOTIVE, () -> new CarQSFragment())
                             .withDefault(() -> new QSFragment())
                             .build());
             final QSTileHost qsh = SystemUIFactory.getInstance().createQSTileHost(mContext, this,
@@ -1331,7 +1335,7 @@
         // Clock and bottom icons
         mNotificationPanel.onOverlayChanged();
         // The status bar on the keyguard is a special layout.
-        mKeyguardStatusBar.onOverlayChanged();
+        if (mKeyguardStatusBar != null) mKeyguardStatusBar.onOverlayChanged();
         // Recreate Indication controller because internal references changed
         mKeyguardIndicationController =
                 SystemUIFactory.getInstance().createKeyguardIndicationController(mContext,
@@ -1376,7 +1380,7 @@
     }
 
     private void inflateSignalClusters() {
-        reinflateSignalCluster(mKeyguardStatusBar);
+        if (mKeyguardStatusBar != null) reinflateSignalCluster(mKeyguardStatusBar);
     }
 
     public static SignalClusterView reinflateSignalCluster(View view) {
@@ -2711,7 +2715,8 @@
 
     @Override
     public void startActivity(Intent intent, boolean dismissShade, Callback callback) {
-        startActivityDismissingKeyguard(intent, false, dismissShade, callback);
+        startActivityDismissingKeyguard(intent, false, dismissShade,
+                false /* disallowEnterPictureInPictureWhileLaunching */, callback);
     }
 
     public void setQsExpanded(boolean expanded) {
@@ -2862,6 +2867,7 @@
 
     public void setPanelExpanded(boolean isExpanded) {
         mPanelExpanded = isExpanded;
+        updateHideIconsForBouncer(false /* animate */);
         mStatusBarWindowManager.setPanelExpanded(isExpanded);
         mVisualStabilityManager.setPanelExpanded(isExpanded);
         if (isExpanded && getBarState() != StatusBarState.KEYGUARD) {
@@ -2927,6 +2933,40 @@
         return mAmbientIndicationContainer;
     }
 
+    public void setOccluded(boolean occluded) {
+        mIsOccluded = occluded;
+        updateHideIconsForBouncer(false /* animate */);
+    }
+
+    public boolean hideStatusBarIconsForBouncer() {
+        return mHideIconsForBouncer || mWereIconsJustHidden;
+    }
+
+    /**
+     * @param animate should the change of the icons be animated.
+     */
+    private void updateHideIconsForBouncer(boolean animate) {
+        boolean shouldHideIconsForBouncer = !mPanelExpanded && mTopHidesStatusBar && mIsOccluded
+                && (mBouncerShowing || mStatusBarWindowHidden);
+        if (mHideIconsForBouncer != shouldHideIconsForBouncer) {
+            mHideIconsForBouncer = shouldHideIconsForBouncer;
+            if (!shouldHideIconsForBouncer && mBouncerWasShowingWhenHidden) {
+                // We're delaying the showing, since most of the time the fullscreen app will
+                // hide the icons again and we don't want them to fade in and out immediately again.
+                mWereIconsJustHidden = true;
+                mHandler.postDelayed(() -> {
+                    mWereIconsJustHidden = false;
+                    recomputeDisableFlags(true);
+                }, 500);
+            } else {
+                recomputeDisableFlags(animate);
+            }
+        }
+        if (shouldHideIconsForBouncer) {
+            mBouncerWasShowingWhenHidden = mBouncerShowing;
+        }
+    }
+
     /**
      * All changes to the status bar and notifications funnel through here and are batched.
      */
@@ -3060,6 +3100,15 @@
     }
 
     @Override
+    public void togglePanel() {
+        if (mPanelExpanded) {
+            animateCollapsePanels();
+        } else {
+            animateExpandNotificationsPanel();
+        }
+    }
+
+    @Override
     public void animateCollapsePanels(int flags) {
         animateCollapsePanels(flags, false /* force */, false /* delayed */,
                 1.0f /* speedUpFactor */);
@@ -3244,6 +3293,10 @@
                 mStatusBarView.collapsePanel(false /* animate */, false /* delayed */,
                         1.0f /* speedUpFactor */);
             }
+            if (mStatusBarView != null) {
+                mStatusBarWindowHidden = state == WINDOW_STATE_HIDDEN;
+                updateHideIconsForBouncer(false /* animate */);
+            }
         }
     }
 
@@ -3584,6 +3637,14 @@
 
         DozeLog.dump(pw);
 
+        if (mFingerprintUnlockController != null) {
+            mFingerprintUnlockController.dump(pw);
+        }
+
+        if (mScrimController != null) {
+            mScrimController.dump(pw);
+        }
+
         if (DUMPTRUCK) {
             synchronized (mNotificationData) {
                 mNotificationData.dump(pw, "  ");
@@ -3670,11 +3731,13 @@
 
     public void startActivityDismissingKeyguard(final Intent intent, boolean onlyProvisioned,
             boolean dismissShade) {
-        startActivityDismissingKeyguard(intent, onlyProvisioned, dismissShade, null /* callback */);
+        startActivityDismissingKeyguard(intent, onlyProvisioned, dismissShade,
+                false /* disallowEnterPictureInPictureWhileLaunching */, null /* callback */);
     }
 
     public void startActivityDismissingKeyguard(final Intent intent, boolean onlyProvisioned,
-            final boolean dismissShade, final Callback callback) {
+            final boolean dismissShade, final boolean disallowEnterPictureInPictureWhileLaunching,
+            final Callback callback) {
         if (onlyProvisioned && !isDeviceProvisioned()) return;
 
         final boolean afterKeyguardGone = PreviewInflater.wouldLaunchResolverActivity(
@@ -3687,6 +3750,8 @@
                         Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                 int result = ActivityManager.START_CANCELED;
                 ActivityOptions options = new ActivityOptions(getActivityOptions());
+                options.setDisallowEnterPictureInPictureWhileLaunching(
+                        disallowEnterPictureInPictureWhileLaunching);
                 if (intent == KeyguardBottomAreaView.INSECURE_CAMERA_INTENT) {
                     // Normally an activity will set it's requested rotation
                     // animation on its window. However when launching an activity
@@ -4612,7 +4677,7 @@
             if (mKeyguardUserSwitcher != null) {
                 mKeyguardUserSwitcher.setKeyguard(true, fromShadeLocked);
             }
-            mStatusBarView.removePendingHideExpandedRunnables();
+            if (mStatusBarView != null) mStatusBarView.removePendingHideExpandedRunnables();
             if (mAmbientIndicationContainer != null) {
                 mAmbientIndicationContainer.setVisibility(View.VISIBLE);
             }
@@ -4650,7 +4715,7 @@
     /**
      * Switches theme from light to dark and vice-versa.
      */
-    private void updateTheme() {
+    protected void updateTheme() {
         final boolean inflated = mStackScroller != null;
 
         // The system wallpaper defines if QS should be light or dark.
@@ -4770,7 +4835,7 @@
             animateCollapsePanels();
             return true;
         }
-        if (mKeyguardUserSwitcher.hideIfNotSimple(true)) {
+        if (mKeyguardUserSwitcher != null && mKeyguardUserSwitcher.hideIfNotSimple(true)) {
             return true;
         }
         return false;
@@ -4991,6 +5056,11 @@
         mNotificationPanel.setEmptyDragAmount(amount);
     }
 
+    @Override
+    public boolean isFalsingCheckNeeded() {
+        return mState == StatusBarState.KEYGUARD;
+    }
+
     /**
      * If secure with redaction: Show bouncer, go to unlocked shade.
      *
@@ -5200,9 +5270,18 @@
     public void setBouncerShowing(boolean bouncerShowing) {
         mBouncerShowing = bouncerShowing;
         if (mStatusBarView != null) mStatusBarView.setBouncerShowing(bouncerShowing);
+        updateHideIconsForBouncer(true /* animate */);
         recomputeDisableFlags(true /* animate */);
     }
 
+    public void cancelCurrentTouch() {
+        if (mNotificationPanel.isTracking()) {
+            mStatusBarWindow.cancelCurrentTouch();
+            if (mState == StatusBarState.SHADE) {
+                animateCollapsePanels();
+            }
+        }
+    }
 
     WakefulnessLifecycle.Observer mWakefulnessObserver = new WakefulnessLifecycle.Observer() {
         @Override
@@ -5375,8 +5454,9 @@
         }
         vibrateForCameraGesture();
         if (!mStatusBarKeyguardViewManager.isShowing()) {
-            startActivity(KeyguardBottomAreaView.INSECURE_CAMERA_INTENT,
-                    true /* dismissShade */);
+            startActivityDismissingKeyguard(KeyguardBottomAreaView.INSECURE_CAMERA_INTENT,
+                    false /* onlyProvisioned */, true /* dismissShade */,
+                    true /* disallowEnterPictureInPictureWhileLaunching */, null /* callback */);
         } else {
             if (!mDeviceInteractive) {
                 // Avoid flickering of the scrim when we instant launch the camera and the bouncer
@@ -5725,7 +5805,8 @@
 
     protected KeyguardManager mKeyguardManager;
     private LockPatternUtils mLockPatternUtils;
-    private DeviceProvisionedController mDeviceProvisionedController;
+    private DeviceProvisionedController mDeviceProvisionedController
+            = Dependency.get(DeviceProvisionedController.class);
     protected SystemServicesProxy mSystemServicesProxy;
 
     // UI-specific methods
@@ -6601,6 +6682,18 @@
         mHandler.obtainMessage(msg, deviceId, 0).sendToTarget();
     }
 
+    @Override
+    public void setTopAppHidesStatusBar(boolean topAppHidesStatusBar) {
+        mTopHidesStatusBar = topAppHidesStatusBar;
+        if (!topAppHidesStatusBar && mWereIconsJustHidden) {
+            // Immediately update the icon hidden state, since that should only apply if we're
+            // staying fullscreen.
+            mWereIconsJustHidden = false;
+            recomputeDisableFlags(true);
+        }
+        updateHideIconsForBouncer(true /* animate */);
+    }
+
     protected void sendCloseSystemWindows(String reason) {
         try {
             ActivityManager.getService().closeSystemDialogs(reason);
@@ -6768,6 +6861,7 @@
         row.setOnExpandClickListener(this);
         row.setRemoteViewClickHandler(mOnClickHandler);
         row.setInflationCallback(this);
+        row.setSecureStateProvider(this::isKeyguardCurrentlySecure);
 
         // Get the app name.
         // Note that Notification.Builder#bindHeaderAppName has similar logic
@@ -7227,7 +7321,8 @@
                 // If mAlwaysExpandNonGroupedNotification is false, then only expand the
                 // very first notification and if it's not a child of grouped notifications.
                 row.setSystemExpanded(mAlwaysExpandNonGroupedNotification
-                        || (visibleNotifications == 0 && !isChildNotification));
+                        || (visibleNotifications == 0 && !isChildNotification
+                        && !row.isLowPriority()));
             }
 
             entry.row.setShowAmbient(isDozing());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
index 70b92ad..68f8e06 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
@@ -20,12 +20,8 @@
 import android.graphics.drawable.Icon;
 import android.os.Bundle;
 import android.os.UserHandle;
-import android.text.TextUtils;
 import android.util.ArraySet;
-import android.view.Gravity;
-import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageView;
 import android.widget.LinearLayout;
 
 import com.android.internal.statusbar.StatusBarIcon;
@@ -38,6 +34,7 @@
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
 import com.android.systemui.statusbar.policy.DarkIconDispatcher;
+import com.android.systemui.statusbar.policy.IconLogger;
 import com.android.systemui.tuner.TunerService;
 import com.android.systemui.tuner.TunerService.Tunable;
 
@@ -61,6 +58,7 @@
     private final ArrayList<IconManager> mIconGroups = new ArrayList<>();
 
     private final ArraySet<String> mIconBlacklist = new ArraySet<>();
+    private final IconLogger mIconLogger = Dependency.get(IconLogger.class);
 
     public StatusBarIconControllerImpl(Context context) {
         super(context.getResources().getStringArray(
@@ -122,6 +120,7 @@
         int viewIndex = getViewIndex(index);
         boolean blocked = mIconBlacklist.contains(slot);
 
+        mIconLogger.onIconVisibility(getSlot(index), icon.visible);
         mIconGroups.forEach(l -> l.onIconAdded(viewIndex, slot, blocked, icon));
     }
 
@@ -174,6 +173,7 @@
         if (getIcon(index) == null) {
             return;
         }
+        mIconLogger.onIconHidden(getSlot(index));
         super.removeIcon(index);
         int viewIndex = getViewIndex(index);
         mIconGroups.forEach(l -> l.onRemoveIcon(viewIndex));
@@ -196,6 +196,7 @@
 
     private void handleSet(int index, StatusBarIcon icon) {
         int viewIndex = getViewIndex(index);
+        mIconLogger.onIconVisibility(getSlot(index), icon.visible);
         mIconGroups.forEach(l -> l.onSetIcon(viewIndex, icon));
     }
 
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 b4b859c..bbce751 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -302,6 +302,7 @@
     }
 
     public void setOccluded(boolean occluded, boolean animate) {
+        mStatusBar.setOccluded(occluded);
         if (occluded && !mOccluded && mShowing) {
             if (mStatusBar.isInLaunchTransition()) {
                 mOccluded = true;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
index d886508..ed96b41 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
@@ -30,6 +30,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowManager;
+import android.view.WindowManager.LayoutParams;
 
 import com.android.keyguard.R;
 import com.android.systemui.Dumpable;
@@ -99,7 +100,6 @@
                         | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,
                 PixelFormat.TRANSLUCENT);
         mLp.token = new Binder();
-        mLp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
         mLp.gravity = Gravity.TOP;
         mLp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
         mLp.setTitle("StatusBar");
@@ -231,6 +231,7 @@
         applyModalFlag(state);
         applyBrightness(state);
         applyHasTopUi(state);
+        applySleepToken(state);
         if (mLp.copyFrom(mLpChanged) != 0) {
             mWindowManager.updateViewLayout(mStatusBarView, mLp);
         }
@@ -274,6 +275,14 @@
         mHasTopUiChanged = isExpanded(state);
     }
 
+    private void applySleepToken(State state) {
+        if (state.dozing) {
+            mLpChanged.privateFlags |= LayoutParams.PRIVATE_FLAG_ACQUIRES_SLEEP_TOKEN;
+        } else {
+            mLpChanged.privateFlags &= ~LayoutParams.PRIVATE_FLAG_ACQUIRES_SLEEP_TOKEN;
+        }
+    }
+
     public void setKeyguardShowing(boolean showing) {
         mCurrentState.keyguardShowing = showing;
         apply(mCurrentState);
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 3d24bd0..d7f11f7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
@@ -246,6 +246,11 @@
         return false;
     }
 
+    public void setTouchActive(boolean touchActive) {
+        mTouchActive = touchActive;
+        mStackScrollLayout.setTouchActive(touchActive);
+    }
+
     @Override
     public boolean dispatchTouchEvent(MotionEvent ev) {
         boolean isDown = ev.getActionMasked() == MotionEvent.ACTION_DOWN;
@@ -257,11 +262,11 @@
             mNotificationPanel.startExpandLatencyTracking();
         }
         if (isDown) {
-            mTouchActive = true;
+            setTouchActive(true);
             mTouchCancelled = false;
         } else if (ev.getActionMasked() == MotionEvent.ACTION_UP
                 || ev.getActionMasked() == MotionEvent.ACTION_CANCEL) {
-            mTouchActive = false;
+            setTouchActive(false);
         }
         if (mTouchCancelled) {
             return false;
@@ -417,7 +422,7 @@
             mFloatingActionMode.finish();
         }
         cleanupFloatingActionModeViews();
-        mFloatingToolbar = new FloatingToolbar(mContext, mFakeWindow);
+        mFloatingToolbar = new FloatingToolbar(mFakeWindow);
         final FloatingActionMode mode =
                 new FloatingActionMode(mContext, callback, originatingView, mFloatingToolbar);
         mFloatingActionModeOriginatingView = originatingView;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java
index 9b0179d..378dad7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java
@@ -49,6 +49,8 @@
         WindowManager.LayoutParams attrs = getWindow().getAttributes();
         attrs.setTitle(getClass().getSimpleName());
         getWindow().setAttributes(attrs);
+
+        registerDismissListener(this);
     }
 
     public void setShowForAllUsers(boolean show) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockMethodCache.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockMethodCache.java
index 1411a54..f9c2130 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockMethodCache.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockMethodCache.java
@@ -159,6 +159,11 @@
         public void onScreenTurnedOff() {
             update(false /* updateAlways */);
         }
+
+        @Override
+        public void onKeyguardVisibilityChanged(boolean showing) {
+            update(false /* updateAlways */);
+        }
     };
 
     public boolean isTrustManaged() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java
index 9daa199..b693ebb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java
@@ -39,6 +39,7 @@
 
     int getMaxConnectionState(CachedBluetoothDevice device);
     int getBondState(CachedBluetoothDevice device);
+    CachedBluetoothDevice getLastDevice();
 
     public interface Callback {
         void onBluetoothStateChange(boolean enabled);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java
index dc4b115..3b15c2b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java
@@ -75,6 +75,8 @@
     @Override
     public boolean canConfigBluetooth() {
         return !mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_BLUETOOTH,
+                UserHandle.of(mCurrentUser))
+            && !mUserManager.hasUserRestriction(UserManager.DISALLOW_BLUETOOTH,
                 UserHandle.of(mCurrentUser));
     }
 
@@ -119,6 +121,11 @@
     }
 
     @Override
+    public CachedBluetoothDevice getLastDevice() {
+        return mLastDevice;
+    }
+
+    @Override
     public int getMaxConnectionState(CachedBluetoothDevice device) {
         return getCachedState(device).mMaxConnectionState;
     }
@@ -294,10 +301,13 @@
 
         @Override
         public void run() {
-            mBondState = mDevice.get().getBondState();
-            mMaxConnectionState = mDevice.get().getMaxConnectionState();
-            mUiHandler.removeMessages(H.MSG_PAIRED_DEVICES_CHANGED);
-            mUiHandler.sendEmptyMessage(H.MSG_PAIRED_DEVICES_CHANGED);
+            CachedBluetoothDevice device = mDevice.get();
+            if (device != null) {
+                mBondState = device.getBondState();
+                mMaxConnectionState = device.getMaxConnectionState();
+                mUiHandler.removeMessages(H.MSG_PAIRED_DEVICES_CHANGED);
+                mUiHandler.sendEmptyMessage(H.MSG_PAIRED_DEVICES_CHANGED);
+            }
         }
     }
 
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 a456786..5159e8d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
@@ -71,7 +71,7 @@
                 break;
             case MSG_NO_SIM_VISIBLE_CHANGED:
                 for (SignalCallback signalCluster : mSignalCallbacks) {
-                    signalCluster.setNoSims(msg.arg1 != 0);
+                    signalCluster.setNoSims(msg.arg1 != 0, msg.arg2 != 0);
                 }
                 break;
             case MSG_ETHERNET_CHANGED:
@@ -144,8 +144,8 @@
     }
 
     @Override
-    public void setNoSims(boolean show) {
-        obtainMessage(MSG_NO_SIM_VISIBLE_CHANGED, show ? 1 : 0, 0).sendToTarget();
+    public void setNoSims(boolean show, boolean simDetected) {
+        obtainMessage(MSG_NO_SIM_VISIBLE_CHANGED, show ? 1 : 0, simDetected ? 1 : 0).sendToTarget();
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
index f0af77d..4c92d01 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
@@ -24,7 +24,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.res.Configuration;
 import android.content.res.TypedArray;
 import android.graphics.Rect;
 import android.os.Bundle;
@@ -193,8 +192,9 @@
     }
 
     private void updateClockVisibility() {
-        int visibility = (mClockVisibleByPolicy && mClockVisibleByUser)
-                ? View.VISIBLE : View.GONE;
+        boolean visible = mClockVisibleByPolicy && mClockVisibleByUser;
+        Dependency.get(IconLogger.class).onIconVisibility("clock", visible);
+        int visibility = visible ? View.VISIBLE : View.GONE;
         setVisibility(visibility);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionController.java
index ede8411..cade5dc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionController.java
@@ -56,6 +56,7 @@
         ExtensionBuilder<T> withDefault(Supplier<T> def);
         ExtensionBuilder<T> withCallback(Consumer<T> callback);
         ExtensionBuilder<T> withUiMode(int mode, Supplier<T> def);
+        ExtensionBuilder<T> withFeature(String feature, Supplier<T> def);
         Extension build();
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionControllerImpl.java
index 6df2051..6d75cfc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionControllerImpl.java
@@ -38,8 +38,9 @@
 
     public static final int SORT_ORDER_PLUGIN  = 0;
     public static final int SORT_ORDER_TUNER   = 1;
-    public static final int SORT_ORDER_UI_MODE = 2;
-    public static final int SORT_ORDER_DEFAULT = 3;
+    public static final int SORT_ORDER_FEATURE = 2;
+    public static final int SORT_ORDER_UI_MODE = 3;
+    public static final int SORT_ORDER_DEFAULT = 4;
 
     private final Context mDefaultContext;
 
@@ -92,6 +93,7 @@
             return this;
         }
 
+        @Override
         public ExtensionController.ExtensionBuilder<T> withUiMode(int uiMode,
                 Supplier<T> supplier) {
             mExtension.addUiMode(uiMode, supplier);
@@ -99,6 +101,13 @@
         }
 
         @Override
+        public ExtensionController.ExtensionBuilder<T> withFeature(String feature,
+                Supplier<T> supplier) {
+            mExtension.addFeature(feature, supplier);
+            return this;
+        }
+
+        @Override
         public ExtensionController.ExtensionBuilder<T> withCallback(
                 Consumer<T> callback) {
             mExtension.mCallbacks.add(callback);
@@ -107,7 +116,7 @@
 
         @Override
         public ExtensionController.Extension build() {
-            // Manually sort, plugins first, tuners second, defaults last.
+            // Sort items in ascending order
             Collections.sort(mExtension.mProducers, Comparator.comparingInt(Item::sortOrder));
             mExtension.notifyChanged();
             return mExtension;
@@ -188,6 +197,10 @@
             mProducers.add(new UiModeItem(uiMode, mode));
         }
 
+        public void addFeature(String feature, Supplier<T> mode) {
+            mProducers.add(new FeatureItem<>(feature, mode));
+        }
+
         private class PluginItem<P extends Plugin> implements Item<T>, PluginListener<P> {
             private final PluginConverter<T, P> mConverter;
             private T mItem;
@@ -274,7 +287,8 @@
             public UiModeItem(int uiMode, Supplier<T> supplier) {
                 mDesiredUiMode = uiMode;
                 mSupplier = supplier;
-                mUiMode = mDefaultContext.getResources().getConfiguration().uiMode;
+                mUiMode = mDefaultContext.getResources().getConfiguration().uiMode
+                        & Configuration.UI_MODE_TYPE_MASK;
                 Dependency.get(ConfigurationController.class).addCallback(this);
             }
 
@@ -304,6 +318,32 @@
             }
         }
 
+        private class FeatureItem<T> implements Item<T> {
+            private final String mFeature;
+            private final Supplier<T> mSupplier;
+
+            public FeatureItem(String feature, Supplier<T> supplier) {
+                mSupplier = supplier;
+                mFeature = feature;
+            }
+
+            @Override
+            public T get() {
+                return mDefaultContext.getPackageManager().hasSystemFeature(mFeature)
+                        ? mSupplier.get() : null;
+            }
+
+            @Override
+            public void destroy() {
+
+            }
+
+            @Override
+            public int sortOrder() {
+                return SORT_ORDER_FEATURE;
+            }
+        }
+
         private class Default<T> implements Item<T> {
             private final Supplier<T> mSupplier;
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/IconLogger.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/IconLogger.java
new file mode 100644
index 0000000..710e1df
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/IconLogger.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.systemui.statusbar.policy;
+
+public interface IconLogger {
+
+    void onIconShown(String tag);
+    void onIconHidden(String tag);
+
+    default void onIconVisibility(String tag, boolean visible) {
+        if (visible) {
+            onIconShown(tag);
+        } else {
+            onIconHidden(tag);
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/IconLoggerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/IconLoggerImpl.java
new file mode 100644
index 0000000..0c201c3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/IconLoggerImpl.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.systemui.statusbar.policy;
+
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_NUM_STATUS_ICONS;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_STATUS_ICONS;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.STATUS_BAR_ICONS_CHANGED;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_ACTION;
+
+import android.content.Context;
+import android.metrics.LogMaker;
+import android.os.Handler;
+import android.os.Looper;
+import android.support.annotation.VisibleForTesting;
+import android.util.ArraySet;
+
+import com.android.internal.logging.MetricsLogger;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class IconLoggerImpl implements IconLogger {
+
+    // Minimum ms between log statements.
+    // NonFinalForTesting
+    @VisibleForTesting
+    protected static long MIN_LOG_INTERVAL = 1000;
+
+    private final Context mContext;
+    private final Handler mHandler;
+    private final MetricsLogger mLogger;
+    private final ArraySet<String> mIcons = new ArraySet<>();
+    private final List<String> mIconIndex;
+    private long mLastLog = System.currentTimeMillis();
+
+    public IconLoggerImpl(Context context, Looper bgLooper, MetricsLogger logger) {
+        mContext = context;
+        mHandler = new Handler(bgLooper);
+        mLogger = logger;
+        String[] icons = mContext.getResources().getStringArray(
+                com.android.internal.R.array.config_statusBarIcons);
+        mIconIndex = Arrays.asList(icons);
+        doLog();
+    }
+
+    @Override
+    public void onIconShown(String tag) {
+        synchronized (mIcons) {
+            if (mIcons.contains(tag)) return;
+            mIcons.add(tag);
+        }
+        if (!mHandler.hasCallbacks(mLog)) {
+            mHandler.postDelayed(mLog, MIN_LOG_INTERVAL);
+        }
+    }
+
+    @Override
+    public void onIconHidden(String tag) {
+        synchronized (mIcons) {
+            if (!mIcons.contains(tag)) return;
+            mIcons.remove(tag);
+        }
+        if (!mHandler.hasCallbacks(mLog)) {
+            mHandler.postDelayed(mLog, MIN_LOG_INTERVAL);
+        }
+    }
+
+    private void doLog() {
+        long time = System.currentTimeMillis();
+        long timeSinceLastLog = time - mLastLog;
+        mLastLog = time;
+
+        ArraySet<String> icons;
+        synchronized (mIcons) {
+            icons = new ArraySet<>(mIcons);
+        }
+        mLogger.write(new LogMaker(STATUS_BAR_ICONS_CHANGED)
+                .setType(TYPE_ACTION)
+                .setLatency(timeSinceLastLog)
+                .addTaggedData(FIELD_NUM_STATUS_ICONS, icons.size())
+                .addTaggedData(FIELD_STATUS_ICONS, getBitField(icons)));
+    }
+
+    private int getBitField(ArraySet<String> icons) {
+        int iconsVisible = 0;
+        for (String icon : icons) {
+            int index = mIconIndex.indexOf(icon);
+            if (index >= 0) {
+                iconsVisible |= (1 << index);
+            }
+        }
+        return iconsVisible;
+    }
+
+    private final Runnable mLog = this::doLog;
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
index 65bfabd..0501771 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
@@ -304,11 +304,6 @@
     public void setVertical(boolean vertical) {
         //no op
     }
-
-    @Override
-    public void setCarMode(boolean carMode) {
-        // no op
-    }
 }
 
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java
index 7bce33a..5ead02f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitorImpl.java
@@ -58,6 +58,7 @@
         };
     }
 
+    @Override
     public void addCallback(Callback callback) {
         mCallbacks.add(callback);
         if (mCallbacks.size() != 0 && !mListening) {
@@ -69,6 +70,7 @@
         }
     }
 
+    @Override
     public void removeCallback(Callback callback) {
         if (mCallbacks.remove(callback) && mCallbacks.size() == 0 && mListening) {
             mListening = false;
@@ -77,18 +79,22 @@
         }
     }
 
+    @Override
     public boolean isShowing() {
         return mShowing;
     }
 
+    @Override
     public boolean isSecure() {
         return mSecure;
     }
 
+    @Override
     public boolean isOccluded() {
         return mOccluded;
     }
 
+    @Override
     public boolean canSkipBouncer() {
         return mCanSkipBouncer;
     }
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 b6c7655..34a03bf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
@@ -345,7 +345,7 @@
         if (isCarrierNetworkChangeActive()) {
             return false;
         }
-        if (isCdma()) {
+        if (isCdma() && mServiceState != null) {
             final int iconMode = mServiceState.getCdmaEriIconMode();
             return mServiceState.getCdmaEriIconIndex() != EriInfo.ROAMING_INDICATOR_OFF
                     && (iconMode == EriInfo.ROAMING_ICON_MODE_NORMAL
@@ -520,10 +520,12 @@
                         + " dataState=" + state.getDataRegState());
             }
             mServiceState = state;
-            mDataNetType = state.getDataNetworkType();
-            if (mDataNetType == TelephonyManager.NETWORK_TYPE_LTE && mServiceState != null &&
-                    mServiceState.isUsingCarrierAggregation()) {
-                mDataNetType = TelephonyManager.NETWORK_TYPE_LTE_CA;
+            if (state != null) {
+                mDataNetType = state.getDataNetworkType();
+                if (mDataNetType == TelephonyManager.NETWORK_TYPE_LTE && mServiceState != null &&
+                        mServiceState.isUsingCarrierAggregation()) {
+                    mDataNetType = TelephonyManager.NETWORK_TYPE_LTE_CA;
+                }
             }
             updateTelephony();
         }
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 2771011..9eee906 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -52,7 +52,7 @@
                 int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
                 String description, boolean isWide, int subId, boolean roaming) {}
         default void setSubs(List<SubscriptionInfo> subs) {}
-        default void setNoSims(boolean show) {}
+        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 c217bda..bb3e09f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
@@ -58,10 +58,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 static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
 
@@ -116,7 +114,7 @@
 
     // States that don't belong to a subcontroller.
     private boolean mAirplaneMode = false;
-    private boolean mHasNoSims;
+    private boolean mHasNoSubs;
     private Locale mLocale = null;
     // This list holds our ordering.
     private List<SubscriptionInfo> mCurrentSubscriptions = new ArrayList<>();
@@ -140,6 +138,7 @@
     @VisibleForTesting
     ServiceState mLastServiceState;
     private boolean mUserSetup;
+    private boolean mSimDetected;
 
     /**
      * Construct this controller object and register for updates.
@@ -363,7 +362,7 @@
         cb.setSubs(mCurrentSubscriptions);
         cb.setIsAirplaneMode(new IconState(mAirplaneMode,
                 TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode, mContext));
-        cb.setNoSims(mHasNoSims);
+        cb.setNoSims(mHasNoSubs, mSimDetected);
         mWifiSignalController.notifyListeners(cb);
         mEthernetSignalController.notifyListeners(cb);
         for (int i = 0; i < mMobileSignalControllers.size(); i++) {
@@ -498,13 +497,27 @@
 
     @VisibleForTesting
     protected void updateNoSims() {
-        boolean hasNoSims = mHasMobileDataFeature && mMobileSignalControllers.size() == 0;
-        if (hasNoSims != mHasNoSims) {
-            mHasNoSims = hasNoSims;
-            mCallbackHandler.setNoSims(mHasNoSims);
+        boolean hasNoSubs = mHasMobileDataFeature && mMobileSignalControllers.size() == 0;
+        boolean simDetected = hasAnySim();
+        if (hasNoSubs != mHasNoSubs || simDetected != mSimDetected) {
+            mHasNoSubs = hasNoSubs;
+            mSimDetected = simDetected;
+            mCallbackHandler.setNoSims(mHasNoSubs, mSimDetected);
         }
     }
 
+    private boolean hasAnySim() {
+        int simCount = mPhone.getSimCount();
+        for (int i = 0; i < simCount; i++) {
+            int state = mPhone.getSimState(i);
+            if (state != TelephonyManager.SIM_STATE_ABSENT
+                    && state != TelephonyManager.SIM_STATE_UNKNOWN) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     @VisibleForTesting
     void setCurrentSubscriptions(List<SubscriptionInfo> subscriptions) {
         Collections.sort(subscriptions, new Comparator<SubscriptionInfo>() {
@@ -631,7 +644,7 @@
     private void notifyListeners() {
         mCallbackHandler.setIsAirplaneMode(new IconState(mAirplaneMode,
                 TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode, mContext));
-        mCallbackHandler.setNoSims(mHasNoSims);
+        mCallbackHandler.setNoSims(mHasNoSubs, mSimDetected);
     }
 
     /**
@@ -822,8 +835,8 @@
             }
             String nosim = args.getString("nosim");
             if (nosim != null) {
-                mHasNoSims = nosim.equals("show");
-                mCallbackHandler.setNoSims(mHasNoSims);
+                mHasNoSubs = nosim.equals("show");
+                mCallbackHandler.setNoSims(mHasNoSubs, mSimDetected);
             }
             String mobile = args.getString("mobile");
             if (mobile != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
index 291ec1a..75532d9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -23,14 +23,12 @@
 import android.animation.TimeAnimator;
 import android.animation.ValueAnimator;
 import android.animation.ValueAnimator.AnimatorUpdateListener;
-import android.annotation.ColorInt;
 import android.annotation.FloatRange;
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Canvas;
-import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.PointF;
 import android.graphics.PorterDuff;
@@ -40,6 +38,7 @@
 import android.os.Handler;
 import android.service.notification.StatusBarNotification;
 import android.support.annotation.NonNull;
+import android.support.annotation.VisibleForTesting;
 import android.util.AttributeSet;
 import android.util.FloatProperty;
 import android.util.Log;
@@ -1082,6 +1081,20 @@
 
     @Override
     public ExpandableView getChildAtPosition(float touchX, float touchY) {
+        return getChildAtPosition(touchX, touchY, true /* requireMinHeight */);
+
+    }
+
+    /**
+     * Get the child at a certain screen location.
+     *
+     * @param touchX the x coordinate
+     * @param touchY the y coordinate
+     * @param requireMinHeight Whether a minimum height is required for a child to be returned.
+     * @return the child at the given location.
+     */
+    private ExpandableView getChildAtPosition(float touchX, float touchY,
+            boolean requireMinHeight) {
         // find the view under the pointer, accounting for GONE views
         final int count = getChildCount();
         for (int childIdx = 0; childIdx < count; childIdx++) {
@@ -1100,7 +1113,7 @@
             int left = 0;
             int right = getWidth();
 
-            if (bottom - top >= mMinInteractionHeight
+            if ((bottom - top >= mMinInteractionHeight || !requireMinHeight)
                     && touchY >= top && touchY <= bottom && touchX >= left && touchX <= right) {
                 if (slidingChild instanceof ExpandableNotificationRow) {
                     ExpandableNotificationRow row = (ExpandableNotificationRow) slidingChild;
@@ -3219,7 +3232,7 @@
             case MotionEvent.ACTION_DOWN: {
                 final int y = (int) ev.getY();
                 mScrolledToTopOnFirstDown = isScrolledToTop();
-                if (getChildAtPosition(ev.getX(), y) == null) {
+                if (getChildAtPosition(ev.getX(), y, false /* requireMinHeight */) == null) {
                     setIsBeingDragged(false);
                     recycleVelocityTracker();
                     break;
@@ -3545,6 +3558,7 @@
      * See {@link AmbientState#setDimmed}.
      */
     public void setDimmed(boolean dimmed, boolean animate) {
+        dimmed &= onKeyguard();
         mAmbientState.setDimmed(dimmed);
         if (animate && mAnimationsEnabled) {
             mDimmedNeedsAnimation = true;
@@ -3556,6 +3570,11 @@
         requestChildrenUpdate();
     }
 
+    @VisibleForTesting
+    boolean isDimmed() {
+        return mAmbientState.isDimmed();
+    }
+
     private void setDimAmount(float dimAmount) {
         mDimAmount = dimAmount;
         updateBackgroundDimming();
@@ -4314,6 +4333,10 @@
                 mAmbientState.getScrollY()));
     }
 
+    public void setTouchActive(boolean touchActive) {
+        mShelf.setTouchActive(touchActive);
+    }
+
     /**
      * A listener that is notified when some child locations might have changed.
      */
@@ -4535,7 +4558,10 @@
                     anim.start();
                 }
             } else if (mMenuExposedView instanceof ExpandableNotificationRow) {
-                ((ExpandableNotificationRow) mMenuExposedView).resetTranslation();
+                ExpandableNotificationRow row = (ExpandableNotificationRow) mMenuExposedView;
+                if (!row.isRemoved()) {
+                    row.resetTranslation();
+                }
             }
             mMenuExposedView = null;
         }
diff --git a/packages/SystemUI/src/com/android/systemui/tuner/DemoModeFragment.java b/packages/SystemUI/src/com/android/systemui/tuner/DemoModeFragment.java
index 7c98e13..b3c86c6 100644
--- a/packages/SystemUI/src/com/android/systemui/tuner/DemoModeFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/tuner/DemoModeFragment.java
@@ -154,7 +154,15 @@
         getContext().sendBroadcast(intent);
 
         intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_CLOCK);
-        intent.putExtra("hhmm", "0700");
+
+        String demoTime = "1010"; // 10:10, a classic choice of horologists
+        try {
+            String[] versionParts = android.os.Build.VERSION.RELEASE.split("\\.");
+            int majorVersion = Integer.valueOf(versionParts[0]);
+            demoTime = String.format("%02d00", majorVersion % 24);
+        } catch (IllegalArgumentException ex) {
+        }
+        intent.putExtra("hhmm", demoTime);
         getContext().sendBroadcast(intent);
 
         intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_NETWORK);
diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java
index 9c69b98..474a9a4 100644
--- a/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java
@@ -33,8 +33,6 @@
         PreferenceFragment.OnPreferenceStartFragmentCallback,
         PreferenceFragment.OnPreferenceStartScreenCallback {
 
-    static final String ACTIVITY_ALIAS_NAME = "com.android.systemui.tuner.TunerSettingLink";
-
     private static final String TAG_TUNER = "tuner";
 
     protected void onCreate(Bundle savedInstanceState) {
diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java
index 369ce69..3a9d1c7 100644
--- a/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java
+++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java
@@ -68,12 +68,6 @@
                 enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                         : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                 PackageManager.DONT_KILL_APP);
-
-        userContext(context).getPackageManager().setComponentEnabledSetting(
-                new ComponentName(context, TunerActivity.ACTIVITY_ALIAS_NAME),
-                enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
-                        : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
-                PackageManager.DONT_KILL_APP);
     }
 
     public static final boolean isTunerEnabled(Context context) {
diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerZenModePanel.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerZenModePanel.java
index 1ea23bb..4d95969 100644
--- a/packages/SystemUI/src/com/android/systemui/tuner/TunerZenModePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerZenModePanel.java
@@ -22,9 +22,11 @@
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.View.OnClickListener;
+import android.view.ViewGroup;
 import android.widget.Checkable;
 import android.widget.LinearLayout;
 import android.widget.TextView;
+
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
 import com.android.systemui.statusbar.policy.ZenModeController;
@@ -65,6 +67,11 @@
         mDone = mButtons.findViewById(android.R.id.button1);
         mDone.setOnClickListener(this);
         ((TextView) mDone).setText(R.string.quick_settings_done);
+        // Hide the resizing space because it causes issues in the volume panel.
+        ViewGroup detail_header = findViewById(R.id.tuner_zen_switch);
+        detail_header.getChildAt(0).setVisibility(View.GONE);
+        // No background so it can blend with volume panel.
+        findViewById(R.id.edit_container).setBackground(null);
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
index f5447a2..66d5ee1 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
@@ -29,10 +29,15 @@
 import android.os.IBinder;
 import android.os.ServiceManager;
 import android.os.SystemProperties;
+import android.util.EventLog;
 import android.util.Log;
 import android.view.LayoutInflater;
+import android.view.MotionEvent;
 import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
 import android.widget.CheckBox;
+import android.widget.Toast;
 
 import com.android.internal.app.AlertActivity;
 import com.android.internal.app.AlertController;
@@ -48,6 +53,10 @@
 
     @Override
     public void onCreate(Bundle icicle) {
+        Window window = getWindow();
+        window.addPrivateFlags(WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+        window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);
+
         super.onCreate(icicle);
 
         if (SystemProperties.getInt("service.adb.tcp.port", 0) == 0) {
@@ -79,6 +88,30 @@
         ap.mView = checkbox;
 
         setupAlert();
+
+        // adding touch listener on affirmative button - checks if window is obscured
+        // if obscured, do not let user give permissions (could be tapjacking involved)
+        final View.OnTouchListener filterTouchListener = (View v, MotionEvent event) -> {
+            // Filter obscured touches by consuming them.
+            if (((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0)
+                    || ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED) != 0)) {
+                if (event.getAction() == MotionEvent.ACTION_UP) {
+                    EventLog.writeEvent(0x534e4554, "62187985"); // safety net logging
+                    Toast.makeText(v.getContext(),
+                            R.string.touch_filtered_warning,
+                            Toast.LENGTH_SHORT).show();
+                }
+                return true;
+            }
+            return false;
+        };
+        mAlert.getButton(BUTTON_POSITIVE).setOnTouchListener(filterTouchListener);
+
+    }
+
+    @Override
+    public void onWindowAttributesChanged(WindowManager.LayoutParams params) {
+        super.onWindowAttributesChanged(params);
     }
 
     private class UsbDisconnectedReceiver extends BroadcastReceiver {
diff --git a/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java b/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java
index ae8afe4..87bc0e6 100644
--- a/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java
+++ b/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java
@@ -19,6 +19,10 @@
 
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.media.AudioAttributes;
+import android.net.Uri;
+import android.provider.Settings;
+
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.systemui.R;
 import com.android.systemui.SystemUI;
@@ -31,11 +35,21 @@
     public static String GENERAL     = "GEN";
     public static String STORAGE     = "DSK";
     public static String TVPIP       = "TPP";
+    public static String BATTERY     = "BAT";
 
     @VisibleForTesting
     static void createAll(Context context) {
-
         final NotificationManager nm = context.getSystemService(NotificationManager.class);
+        NotificationChannel batteryChannel = new NotificationChannel(BATTERY,
+                context.getString(R.string.notification_channel_battery),
+                NotificationManager.IMPORTANCE_MAX);
+        final String soundPath = Settings.Global.getString(context.getContentResolver(),
+                Settings.Global.LOW_BATTERY_SOUND);
+        batteryChannel.setSound(Uri.parse("file://" + soundPath), new AudioAttributes.Builder()
+                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+                .setUsage(AudioAttributes.USAGE_NOTIFICATION_EVENT)
+                .build());
+
         nm.createNotificationChannels(Arrays.asList(
                 new NotificationChannel(
                         ALERTS,
@@ -54,8 +68,10 @@
                         context.getString(R.string.notification_channel_storage),
                         isTv(context)
                                 ? NotificationManager.IMPORTANCE_DEFAULT
-                                : NotificationManager.IMPORTANCE_LOW)
-                ));
+                                : NotificationManager.IMPORTANCE_LOW),
+                batteryChannel
+        ));
+
         if (isTv(context)) {
             // TV specific notification channel for TV PIP controls.
             // Importance should be {@link NotificationManager#IMPORTANCE_MAX} to have the highest
diff --git a/packages/SystemUI/src/com/android/systemui/util/wakelock/DelayedWakeLock.java b/packages/SystemUI/src/com/android/systemui/util/wakelock/DelayedWakeLock.java
index b835909..5ec3dff 100644
--- a/packages/SystemUI/src/com/android/systemui/util/wakelock/DelayedWakeLock.java
+++ b/packages/SystemUI/src/com/android/systemui/util/wakelock/DelayedWakeLock.java
@@ -23,7 +23,7 @@
  */
 public class DelayedWakeLock implements WakeLock {
 
-    private static final long RELEASE_DELAY_MS = 100;
+    private static final long RELEASE_DELAY_MS = 120;
 
     private final Handler mHandler;
     private final WakeLock mInner;
diff --git a/packages/SystemUI/src/com/android/systemui/volume/Events.java b/packages/SystemUI/src/com/android/systemui/volume/Events.java
index 8ed4fca..49a12f4 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/Events.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/Events.java
@@ -79,14 +79,16 @@
     public static final int DISMISS_REASON_SCREEN_OFF = 4;
     public static final int DISMISS_REASON_SETTINGS_CLICKED = 5;
     public static final int DISMISS_REASON_DONE_CLICKED = 6;
+    public static final int DISMISS_STREAM_GONE = 7;
     public static final String[] DISMISS_REASONS = {
-        "unknown",
-        "touch_outside",
-        "volume_controller",
-        "timeout",
-        "screen_off",
-        "settings_clicked",
-        "done_clicked",
+            "unknown",
+            "touch_outside",
+            "volume_controller",
+            "timeout",
+            "screen_off",
+            "settings_clicked",
+            "done_clicked",
+            "a11y_stream_changed"
     };
 
     public static final int SHOW_REASON_UNKNOWN = 0;
diff --git a/packages/SystemUI/src/com/android/systemui/volume/Util.java b/packages/SystemUI/src/com/android/systemui/volume/Util.java
index a46a44d..c6d6218 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/Util.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/Util.java
@@ -78,6 +78,7 @@
     }
 
     public static String mediaMetadataToString(MediaMetadata metadata) {
+        if (metadata == null) return null;
         return metadata.getDescription().toString();
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
index 9e50e81..41a5dc8 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
@@ -25,7 +25,6 @@
 import android.annotation.SuppressLint;
 import android.app.Dialog;
 import android.app.KeyguardManager;
-import android.app.WallpaperManager;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.res.ColorStateList;
@@ -33,7 +32,6 @@
 import android.content.res.Resources;
 import android.graphics.Color;
 import android.graphics.PixelFormat;
-import android.graphics.Point;
 import android.graphics.Rect;
 import android.graphics.drawable.AnimatedVectorDrawable;
 import android.graphics.drawable.ColorDrawable;
@@ -77,11 +75,12 @@
 import com.android.settingslib.Utils;
 import com.android.systemui.Dependency;
 import com.android.systemui.Interpolators;
+import com.android.systemui.Prefs;
 import com.android.systemui.R;
+import com.android.systemui.plugins.VolumeDialog;
 import com.android.systemui.plugins.VolumeDialogController;
 import com.android.systemui.plugins.VolumeDialogController.State;
 import com.android.systemui.plugins.VolumeDialogController.StreamState;
-import com.android.systemui.plugins.VolumeDialog;
 import com.android.systemui.statusbar.policy.ZenModeController;
 import com.android.systemui.tuner.TunerService;
 import com.android.systemui.tuner.TunerZenModePanel;
@@ -107,7 +106,7 @@
 
     private final Context mContext;
     private final H mHandler = new H();
-    private VolumeDialogController mController;
+    private final VolumeDialogController mController;
 
     private Window mWindow;
     private CustomDialog mDialog;
@@ -136,6 +135,7 @@
     private boolean mShowA11yStream;
 
     private int mActiveStream;
+    private int mPrevActiveStream;
     private boolean mAutomute = VolumePrefs.DEFAULT_ENABLE_AUTOMUTE;
     private boolean mSilentMode = VolumePrefs.DEFAULT_ENABLE_SILENT_MODE;
     private State mState;
@@ -231,8 +231,9 @@
                 return true;
             }
         });
-        mDialogContentView = (ViewGroup) mDialog.findViewById(R.id.volume_dialog_content);
-        mDialogRowsView = (ViewGroup) mDialogContentView.findViewById(R.id.volume_dialog_rows);
+
+        mDialogContentView = mDialog.findViewById(R.id.volume_dialog_content);
+        mDialogRowsView = mDialogContentView.findViewById(R.id.volume_dialog_rows);
         mExpanded = false;
         mExpandButton = (ImageButton) mDialogView.findViewById(R.id.volume_expand_button);
         mExpandButton.setOnClickListener(mClickExpand);
@@ -514,6 +515,9 @@
         if (mSafetyWarning != null) return 5000;
         if (mExpanded || mExpandButtonAnimationRunning) return 5000;
         if (mActiveStream == AudioManager.STREAM_MUSIC) return 1500;
+        if (mZenFooter.shouldShowIntroduction()) {
+            return 6000;
+        }
         return 3000;
     }
 
@@ -585,7 +589,7 @@
         final VolumeRow activeRow = getActiveRow();
         if (!dismissing) {
             mWindow.setLayout(mWindow.getAttributes().width, ViewGroup.LayoutParams.MATCH_PARENT);
-            TransitionManager.beginDelayedTransition(mDialogView, getTransistion());
+            TransitionManager.beginDelayedTransition(mDialogView, getTransition());
         }
         updateRowsH(activeRow);
         rescheduleTimeoutH();
@@ -627,10 +631,19 @@
         }
     }
 
-    private boolean shouldBeVisibleH(VolumeRow row, boolean isActive) {
+    private boolean shouldBeVisibleH(VolumeRow row, VolumeRow activeRow) {
+        boolean isActive = row == activeRow;
         if (row.stream == AudioSystem.STREAM_ACCESSIBILITY) {
             return mShowA11yStream;
         }
+
+        // if the active row is accessibility, then continue to display previous
+        // active row since accessibility is dispalyed under it
+        if (activeRow.stream == AudioSystem.STREAM_ACCESSIBILITY &&
+                row.stream == mPrevActiveStream) {
+            return true;
+        }
+
         return mExpanded && row.view.getVisibility() == View.VISIBLE
                 || (mExpanded && (row.important || isActive))
                 || !mExpanded && isActive;
@@ -644,7 +657,7 @@
         // apply changes to all rows
         for (final VolumeRow row : mRows) {
             final boolean isActive = row == activeRow;
-            final boolean shouldBeVisible = shouldBeVisibleH(row, isActive);
+            final boolean shouldBeVisible = shouldBeVisibleH(row, activeRow);
             Util.setVisOrGone(row.view, shouldBeVisible);
             Util.setVisOrGone(row.header, shouldBeVisible);
             if (row.view.isShown()) {
@@ -687,6 +700,7 @@
         }
 
         if (mActiveStream != state.activeStream) {
+            mPrevActiveStream = mActiveStream;
             mActiveStream = state.activeStream;
             updateRowsH(getActiveRow());
             rescheduleTimeoutH();
@@ -703,7 +717,9 @@
         final boolean visible = mState.zenMode != Global.ZEN_MODE_OFF
                 && (mAudioManager.isStreamAffectedByRingerMode(mActiveStream) || mExpanded)
                 && !mZenPanel.isEditing();
-        TransitionManager.beginDelayedTransition(mDialogView, getTransistion());
+
+        TransitionManager.endTransitions(mDialogView);
+        TransitionManager.beginDelayedTransition(mDialogView, getTransition());
         if (wasVisible != visible && !visible) {
             prepareForCollapse();
         }
@@ -761,6 +777,7 @@
 
         // update header text
         Util.setText(row.header, getStreamLabelH(ss));
+        row.slider.setContentDescription(row.header.getText());
         mConfigurableTexts.add(row.header, ss.name);
 
         // update icon
@@ -829,6 +846,11 @@
             row.icon.setContentDescription(getStreamLabelH(ss));
         }
 
+        // ensure tracking is disabled if zenMuted
+        if (zenMuted) {
+            row.tracking = false;
+        }
+
         // update slider
         final boolean enableSlider = !zenMuted;
         final int vlevel = row.ss.muted && (!isRingStream && !zenMuted) ? 0
@@ -957,7 +979,7 @@
         }
     }
 
-    private AutoTransition getTransistion() {
+    private AutoTransition getTransition() {
         AutoTransition transition = new AutoTransition();
         transition.setDuration(mExpandButtonAnimationDuration);
         transition.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
@@ -1059,7 +1081,12 @@
         public void onAccessibilityModeChanged(Boolean showA11yStream) {
             boolean show = showA11yStream == null ? false : showA11yStream;
             mShowA11yStream = show;
-            updateRowsH(getActiveRow());
+            VolumeRow activeRow = getActiveRow();
+            if (!mShowA11yStream && AudioManager.STREAM_ACCESSIBILITY == activeRow.stream) {
+                dismissH(Events.DISMISS_STREAM_GONE);
+            } else {
+                updateRowsH(activeRow);
+            }
 
         }
     };
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java b/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java
index 7464212..80e1629 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java
@@ -152,6 +152,7 @@
                                 mController.getCurrentUser(), true /*shortVersion*/);
         Util.setText(mSummaryLine2, line2);
     }
+
     public boolean shouldShowIntroduction() {
         final boolean confirmed =  Prefs.getBoolean(mContext,
                 Prefs.Key.DND_CONFIRMED_ALARM_INTRODUCTION, false);
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
index 4716552..7bb987c 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
@@ -41,6 +41,7 @@
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.MathUtils;
+import android.util.Slog;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -53,6 +54,7 @@
 import android.widget.RadioGroup;
 import android.widget.TextView;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.systemui.Prefs;
@@ -116,8 +118,6 @@
 
     private Callback mCallback;
     private ZenModeController mController;
-    private boolean mCountdownConditionSupported;
-    private boolean mRequestingConditions;
     private Condition mExitCondition;
     private int mBucketIndex = -1;
     private boolean mExpanded;
@@ -126,8 +126,6 @@
     private int mAttachedZen;
     private boolean mAttached;
     private Condition mSessionExitCondition;
-    private Condition[] mConditions;
-    private Condition mTimeCondition;
     private boolean mVoiceCapable;
 
     protected int mZenModeConditionLayoutId;
@@ -155,8 +153,6 @@
 
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
         pw.println("ZenModePanel state:");
-        pw.print("  mCountdownConditionSupported="); pw.println(mCountdownConditionSupported);
-        pw.print("  mRequestingConditions="); pw.println(mRequestingConditions);
         pw.print("  mAttached="); pw.println(mAttached);
         pw.print("  mHidden="); pw.println(mHidden);
         pw.print("  mExpanded="); pw.println(mExpanded);
@@ -292,7 +288,6 @@
 
     private void onAttach() {
         setExpanded(true);
-        mAttached = true;
         mAttachedZen = mController.getZen();
         ZenRule manualRule = mController.getManualRule();
         mExitCondition = manualRule != null ? manualRule.condition : null;
@@ -304,23 +299,26 @@
         mController.addCallback(mZenCallback);
         setSessionExitCondition(copy(mExitCondition));
         updateWidgets();
-        setRequestingConditions(!mHidden);
-        ensureSelection();
+        setAttached(true);
     }
 
     private void onDetach() {
         if (DEBUG) Log.d(mTag, "onDetach");
         setExpanded(false);
         checkForAttachedZenChange();
-        mAttached = false;
+        setAttached(false);
         mAttachedZen = -1;
         mSessionZen = -1;
         mController.removeCallback(mZenCallback);
         setSessionExitCondition(null);
-        setRequestingConditions(false);
         mTransitionHelper.clear();
     }
 
+    @VisibleForTesting
+    void setAttached(boolean attached) {
+        mAttached = attached;
+    }
+
     @Override
     public void onVisibilityAggregated(boolean isVisible) {
         super.onVisibilityAggregated(isVisible);
@@ -342,7 +340,6 @@
         if (mHidden == hidden) return;
         if (DEBUG) Log.d(mTag, "hidden=" + hidden);
         mHidden = hidden;
-        setRequestingConditions(mAttached && !mHidden);
         updateWidgets();
     }
 
@@ -365,29 +362,6 @@
         fireExpanded();
     }
 
-    /** Start or stop requesting relevant zen mode exit conditions */
-    private void setRequestingConditions(final boolean requesting) {
-        if (mRequestingConditions == requesting) return;
-        if (DEBUG) Log.d(mTag, "setRequestingConditions " + requesting);
-        mRequestingConditions = requesting;
-        if (mRequestingConditions) {
-            mTimeCondition = parseExistingTimeCondition(mContext, mExitCondition);
-            if (mTimeCondition != null) {
-                mBucketIndex = -1;
-            } else {
-                mBucketIndex = DEFAULT_BUCKET_INDEX;
-                mTimeCondition = ZenModeConfig.toTimeCondition(mContext,
-                        MINUTE_BUCKETS[mBucketIndex], ActivityManager.getCurrentUser());
-            }
-            if (DEBUG) Log.d(mTag, "Initial bucket index: " + mBucketIndex);
-
-            mConditions = null; // reset conditions
-            handleUpdateConditions();
-        } else {
-            hideAllConditions();
-        }
-    }
-
     protected void addZenConditions(int count) {
         for (int i = 0; i < count; i++) {
             final View rb = mInflater.inflate(mZenModeButtonLayoutId, mEdit, false);
@@ -401,9 +375,7 @@
 
     public void init(ZenModeController controller) {
         mController = controller;
-        mCountdownConditionSupported = mController.isCountdownConditionSupported();
-        final int countdownDelta = mCountdownConditionSupported ? COUNTDOWN_CONDITION_COUNT : 0;
-        final int minConditions = 1 /*forever*/ + countdownDelta;
+        final int minConditions = 1 /*forever*/ + COUNTDOWN_CONDITION_COUNT;
         addZenConditions(minConditions);
         mSessionZen = getSelectedZen(-1);
         handleUpdateManualRule(mController.getManualRule());
@@ -426,10 +398,6 @@
         return isForever(condition) ? null : getConditionId(condition);
     }
 
-    private static boolean sameConditionId(Condition lhs, Condition rhs) {
-        return lhs == null ? rhs == null : rhs != null && lhs.id.equals(rhs.id);
-    }
-
     private static Condition copy(Condition condition) {
         return condition == null ? null : condition.copy();
     }
@@ -438,17 +406,24 @@
         mCallback = callback;
     }
 
-    private void handleUpdateManualRule(ZenRule rule) {
+    @VisibleForTesting
+    void handleUpdateManualRule(ZenRule rule) {
         final int zen = rule != null ? rule.zenMode : Global.ZEN_MODE_OFF;
         handleUpdateZen(zen);
         final Condition c = rule == null ? null
                 : rule.condition != null ? rule.condition
                 : createCondition(rule.conditionId);
-        handleExitConditionChanged(c);
+        handleUpdateConditions(c);
+        setExitCondition(c);
     }
 
     private Condition createCondition(Uri conditionId) {
-        if (ZenModeConfig.isValidCountdownConditionId(conditionId)) {
+        if (ZenModeConfig.isValidCountdownToAlarmConditionId(conditionId)) {
+            long time = ZenModeConfig.tryParseCountdownConditionId(conditionId);
+            Condition c = ZenModeConfig.toNextAlarmCondition(
+                    mContext, time, ActivityManager.getCurrentUser());
+            return c;
+        } else if (ZenModeConfig.isValidCountdownConditionId(conditionId)) {
             long time = ZenModeConfig.tryParseCountdownConditionId(conditionId);
             int mins = (int) ((time - System.currentTimeMillis() + DateUtils.MINUTE_IN_MILLIS / 2)
                     / DateUtils.MINUTE_IN_MILLIS);
@@ -466,48 +441,10 @@
         }
         mZenButtons.setSelectedValue(zen, false /* fromClick */);
         updateWidgets();
-        handleUpdateConditions();
-        if (mExpanded) {
-            final Condition selected = getSelectedCondition();
-            if (!Objects.equals(mExitCondition, selected)) {
-                select(selected);
-            }
-        }
     }
 
-    private void handleExitConditionChanged(Condition exitCondition) {
-        setExitCondition(exitCondition);
-        if (DEBUG) Log.d(mTag, "handleExitConditionChanged " + mExitCondition);
-        if (exitCondition == null) return;
-        final int N = getVisibleConditions();
-        for (int i = 0; i < N; i++) {
-            final ConditionTag tag = getConditionTagAt(i);
-            if (tag != null && sameConditionId(tag.condition, mExitCondition)) {
-                bind(exitCondition, mZenRadioGroupContent.getChildAt(i), i);
-                tag.rb.setChecked(true);
-                return;
-            }
-        }
-        if (mCountdownConditionSupported && ZenModeConfig.isValidCountdownConditionId(
-                exitCondition.id)) {
-            bind(exitCondition, mZenRadioGroupContent.getChildAt(COUNTDOWN_CONDITION_INDEX),
-                    COUNTDOWN_CONDITION_INDEX);
-            getConditionTagAt(COUNTDOWN_CONDITION_INDEX).rb.setChecked(true);
-        }
-    }
-
-    private Condition getSelectedCondition() {
-        final int N = getVisibleConditions();
-        for (int i = 0; i < N; i++) {
-            final ConditionTag tag = getConditionTagAt(i);
-            if (tag != null && tag.rb.isChecked()) {
-                return tag.condition;
-            }
-        }
-        return null;
-    }
-
-    private int getSelectedZen(int defValue) {
+    @VisibleForTesting
+    int getSelectedZen(int defValue) {
         final Object zen = mZenButtons.getSelectedValue();
         return zen != null ? (Integer) zen : defValue;
     }
@@ -575,56 +512,65 @@
         return getResources().getString(warningRes, template);
     }
 
-    private static Condition parseExistingTimeCondition(Context context, Condition condition) {
-        if (condition == null) return null;
-        final long time = ZenModeConfig.tryParseCountdownConditionId(condition.id);
-        if (time == 0) return null;
-        final long now = System.currentTimeMillis();
-        final long span = time - now;
-        if (span <= 0 || span > MAX_BUCKET_MINUTES * MINUTES_MS) return null;
-        return ZenModeConfig.toTimeCondition(context,
-                time, Math.round(span / (float) MINUTES_MS), ActivityManager.getCurrentUser(),
-                false /*shortVersion*/);
-    }
-
-    private void handleUpdateConditions() {
+    @VisibleForTesting
+    void handleUpdateConditions(Condition c) {
         if (mTransitionHelper.isTransitioning()) {
             return;
         }
-        final int conditionCount = mConditions == null ? 0 : mConditions.length;
-        if (DEBUG) Log.d(mTag, "handleUpdateConditions conditionCount=" + conditionCount);
         // forever
         bind(forever(), mZenRadioGroupContent.getChildAt(FOREVER_CONDITION_INDEX),
                 FOREVER_CONDITION_INDEX);
-        // countdown
-        if (mCountdownConditionSupported && mTimeCondition != null) {
-            bind(mTimeCondition, mZenRadioGroupContent.getChildAt(COUNTDOWN_CONDITION_INDEX),
-                    COUNTDOWN_CONDITION_INDEX);
-        }
-        // countdown until alarm
-        if (mCountdownConditionSupported) {
-            Condition nextAlarmCondition = getTimeUntilNextAlarmCondition();
-            if (nextAlarmCondition != null) {
-                mZenRadioGroup.getChildAt(
-                        COUNTDOWN_ALARM_CONDITION_INDEX).setVisibility(View.VISIBLE);
-                mZenRadioGroupContent.getChildAt(
-                        COUNTDOWN_ALARM_CONDITION_INDEX).setVisibility(View.VISIBLE);
-                bind(nextAlarmCondition,
-                        mZenRadioGroupContent.getChildAt(COUNTDOWN_ALARM_CONDITION_INDEX),
-                        COUNTDOWN_ALARM_CONDITION_INDEX);
+        if (c == null) {
+            bindGenericCountdown();
+            bindNextAlarm(getTimeUntilNextAlarmCondition());
+        } else if (isForever(c)) {
+
+            getConditionTagAt(FOREVER_CONDITION_INDEX).rb.setChecked(true);
+            bindGenericCountdown();
+            bindNextAlarm(getTimeUntilNextAlarmCondition());
+        } else {
+            if (isAlarm(c)) {
+                bindGenericCountdown();
+                bindNextAlarm(c);
+                getConditionTagAt(COUNTDOWN_ALARM_CONDITION_INDEX).rb.setChecked(true);
+            } else if (isCountdown(c)) {
+                bindNextAlarm(getTimeUntilNextAlarmCondition());
+                bind(c, mZenRadioGroupContent.getChildAt(COUNTDOWN_CONDITION_INDEX),
+                        COUNTDOWN_CONDITION_INDEX);
+                getConditionTagAt(COUNTDOWN_CONDITION_INDEX).rb.setChecked(true);
             } else {
-                mZenRadioGroup.getChildAt(COUNTDOWN_ALARM_CONDITION_INDEX).setVisibility(View.GONE);
-                mZenRadioGroupContent.getChildAt(
-                        COUNTDOWN_ALARM_CONDITION_INDEX).setVisibility(View.GONE);
+                Slog.wtf(TAG, "Invalid manual condition: " + c);
             }
         }
-        // ensure something is selected
-        if (mExpanded) {
-            ensureSelection();
-        }
         mZenConditions.setVisibility(mSessionZen != Global.ZEN_MODE_OFF ? View.VISIBLE : View.GONE);
     }
 
+    private void bindGenericCountdown() {
+        mBucketIndex = DEFAULT_BUCKET_INDEX;
+        Condition countdown = ZenModeConfig.toTimeCondition(mContext,
+                MINUTE_BUCKETS[mBucketIndex], ActivityManager.getCurrentUser());
+        // don't change the hour condition while the user is viewing the panel
+        if (!mAttached || getConditionTagAt(COUNTDOWN_CONDITION_INDEX).condition == null) {
+            bind(countdown, mZenRadioGroupContent.getChildAt(COUNTDOWN_CONDITION_INDEX),
+                    COUNTDOWN_CONDITION_INDEX);
+        }
+    }
+
+    private void bindNextAlarm(Condition c) {
+        View alarmContent = mZenRadioGroupContent.getChildAt(COUNTDOWN_ALARM_CONDITION_INDEX);
+        ConditionTag tag = (ConditionTag) alarmContent.getTag();
+        // Don't change the alarm condition while the user is viewing the panel
+        if (c != null && (!mAttached || tag == null || tag.condition == null)) {
+            bind(c, alarmContent, COUNTDOWN_ALARM_CONDITION_INDEX);
+        }
+
+        tag = (ConditionTag) alarmContent.getTag();
+        boolean showAlarm = tag != null && tag.condition != null;
+        mZenRadioGroup.getChildAt(COUNTDOWN_ALARM_CONDITION_INDEX).setVisibility(
+                showAlarm ? View.VISIBLE : View.INVISIBLE);
+        alarmContent.setVisibility(showAlarm ? View.VISIBLE : View.INVISIBLE);
+    }
+
     private Condition forever() {
         return new Condition(mForeverId, foreverSummary(mContext), "", "", 0 /*icon*/,
                 Condition.STATE_TRUE, 0 /*flags*/);
@@ -637,7 +583,6 @@
     // Returns a time condition if the next alarm is within the next week.
     private Condition getTimeUntilNextAlarmCondition() {
         GregorianCalendar weekRange = new GregorianCalendar();
-        final long now = weekRange.getTimeInMillis();
         setToMidnight(weekRange);
         weekRange.add(Calendar.DATE, 6);
         final long nextAlarmMs = mController.getNextAlarm();
@@ -647,9 +592,8 @@
             setToMidnight(nextAlarm);
 
             if (weekRange.compareTo(nextAlarm) >= 0) {
-                return ZenModeConfig.toTimeCondition(mContext, nextAlarmMs,
-                        Math.round((nextAlarmMs - now) / (float) MINUTES_MS),
-                        ActivityManager.getCurrentUser(), true);
+                return ZenModeConfig.toNextAlarmCondition(mContext, nextAlarmMs,
+                        ActivityManager.getCurrentUser());
             }
         }
         return null;
@@ -662,11 +606,13 @@
         calendar.set(Calendar.MILLISECOND, 0);
     }
 
-    private ConditionTag getConditionTagAt(int index) {
+    @VisibleForTesting
+    ConditionTag getConditionTagAt(int index) {
         return (ConditionTag) mZenRadioGroupContent.getChildAt(index).getTag();
     }
 
-    private int getVisibleConditions() {
+    @VisibleForTesting
+    int getVisibleConditions() {
         int rt = 0;
         final int N = mZenRadioGroupContent.getChildCount();
         for (int i = 0; i < N; i++) {
@@ -682,34 +628,8 @@
         }
     }
 
-    private void ensureSelection() {
-        // are we left without anything selected?  if so, set a default
-        final int visibleConditions = getVisibleConditions();
-        if (visibleConditions == 0) return;
-        for (int i = 0; i < visibleConditions; i++) {
-            final ConditionTag tag = getConditionTagAt(i);
-            if (tag != null && tag.rb.isChecked()) {
-                if (DEBUG) Log.d(mTag, "Not selecting a default, checked=" + tag.condition);
-                return;
-            }
-        }
-        final ConditionTag foreverTag = getConditionTagAt(FOREVER_CONDITION_INDEX);
-        if (foreverTag == null) return;
-        if (DEBUG) Log.d(mTag, "Selecting a default");
-        final int favoriteIndex = mPrefs.getMinuteIndex();
-        if (mExitCondition != null && mExitCondition.equals(mTimeCondition)) {
-            getConditionTagAt(COUNTDOWN_CONDITION_INDEX).rb.setChecked(true);
-        } else if (favoriteIndex == -1 || !mCountdownConditionSupported ||
-                mAttachedZen != Global.ZEN_MODE_OFF) {
-            foreverTag.rb.setChecked(true);
-        } else {
-            mTimeCondition = ZenModeConfig.toTimeCondition(mContext,
-                    MINUTE_BUCKETS[favoriteIndex], ActivityManager.getCurrentUser());
-            mBucketIndex = favoriteIndex;
-            bind(mTimeCondition, mZenRadioGroupContent.getChildAt(COUNTDOWN_CONDITION_INDEX),
-                    COUNTDOWN_CONDITION_INDEX);
-            getConditionTagAt(COUNTDOWN_CONDITION_INDEX).rb.setChecked(true);
-        }
+    private static boolean isAlarm(Condition c) {
+        return c != null && ZenModeConfig.isValidCountdownToAlarmConditionId(c.id);
     }
 
     private static boolean isCountdown(Condition c) {
@@ -877,10 +797,9 @@
             newCondition = ZenModeConfig.toTimeCondition(mContext,
                     MINUTE_BUCKETS[mBucketIndex], ActivityManager.getCurrentUser());
         }
-        mTimeCondition = newCondition;
-        bind(mTimeCondition, row, rowId);
+        bind(newCondition, row, rowId);
         tag.rb.setChecked(true);
-        select(mTimeCondition);
+        select(newCondition);
         announceConditionSelection(tag);
     }
 
@@ -902,7 +821,7 @@
         setExitCondition(condition);
         if (realConditionId == null) {
             mPrefs.setMinuteIndex(-1);
-        } else if (isCountdown(condition) && mBucketIndex != -1) {
+        } else if ((isAlarm(condition) || isCountdown(condition)) && mBucketIndex != -1) {
             mPrefs.setMinuteIndex(mBucketIndex);
         }
         setSessionExitCondition(copy(condition));
@@ -951,7 +870,8 @@
     }
 
     // used as the view tag on condition rows
-    private static class ConditionTag {
+    @VisibleForTesting
+    static class ConditionTag {
         RadioButton rb;
         View lines;
         TextView line1;
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenRadioLayout.java b/packages/SystemUI/src/com/android/systemui/volume/ZenRadioLayout.java
index 5dbcd8a..360907b 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ZenRadioLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/ZenRadioLayout.java
@@ -46,9 +46,16 @@
             throw new IllegalStateException("Expected matching children");
         }
         boolean hasChanges = false;
+        View lastView = null;
         for (int i = 0; i < size; i++) {
             View radio = radioGroup.getChildAt(i);
             View content = radioContent.getChildAt(i);
+            if (lastView != null) {
+                radio.setAccessibilityTraversalAfter(lastView.getId());
+            }
+            View contentClick = findFirstClickable(content);
+            if (contentClick != null) contentClick.setAccessibilityTraversalAfter(radio.getId());
+            lastView = findLastClickable(content);
             if (radio.getLayoutParams().height != content.getMeasuredHeight()) {
                 hasChanges = true;
                 radio.getLayoutParams().height = content.getMeasuredHeight();
@@ -59,4 +66,28 @@
             super.onMeasure(widthMeasureSpec, heightMeasureSpec);
         }
     }
+
+    private View findFirstClickable(View content) {
+        if (content.isClickable()) return content;
+        if (content instanceof ViewGroup) {
+            ViewGroup group = (ViewGroup) content;
+            for (int i = 0; i < group.getChildCount(); i++) {
+                View v = findFirstClickable(group.getChildAt(i));
+                if (v != null) return v;
+            }
+        }
+        return null;
+    }
+
+    private View findLastClickable(View content) {
+        if (content.isClickable()) return content;
+        if (content instanceof ViewGroup) {
+            ViewGroup group = (ViewGroup) content;
+            for (int i = group.getChildCount() - 1; i >= 0; i--) {
+                View v = findLastClickable(group.getChildAt(i));
+                if (v != null) return v;
+            }
+        }
+        return null;
+    }
 }
diff --git a/packages/SystemUI/tests/Android.mk b/packages/SystemUI/tests/Android.mk
index 5e71dd4..27c16d5 100644
--- a/packages/SystemUI/tests/Android.mk
+++ b/packages/SystemUI/tests/Android.mk
@@ -54,7 +54,8 @@
     SystemUI-proto \
     SystemUI-tags \
     legacy-android-test \
-    testables
+    testables \
+    truth-prebuilt \
 
 LOCAL_JAVA_LIBRARIES := android.test.runner telephony-common android.car
 
diff --git a/packages/SystemUI/tests/AndroidManifest.xml b/packages/SystemUI/tests/AndroidManifest.xml
index adb3baf..67fae5b 100644
--- a/packages/SystemUI/tests/AndroidManifest.xml
+++ b/packages/SystemUI/tests/AndroidManifest.xml
@@ -42,6 +42,7 @@
     <uses-permission android:name="android.permission.TRUST_LISTENER" />
     <uses-permission android:name="android.permission.USE_FINGERPRINT" />
     <uses-permission android:name="android.permission.DEVICE_POWER" />
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
 
     <application>
         <uses-library android:name="android.test.runner" />
diff --git a/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java b/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java
index b597868..fe23541 100644
--- a/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java
+++ b/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java
@@ -22,7 +22,6 @@
 import android.support.test.internal.runner.ClassPathScanner;
 import android.support.test.internal.runner.ClassPathScanner.ChainedClassNameFilter;
 import android.support.test.internal.runner.ClassPathScanner.ExternalClassNameFilter;
-import android.support.test.internal.runner.TestLoader;
 import android.testing.AndroidTestingRunner;
 import android.text.TextUtils;
 import android.util.Log;
@@ -32,8 +31,11 @@
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.junit.internal.builders.AllDefaultPossibilitiesBuilder;
 
 import java.io.IOException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -69,12 +71,11 @@
     };
 
     @Test
-    public void testAllClassInheritance() {
+    public void testAllClassInheritance() throws Throwable {
         boolean anyClassWrong = false;
-        TestLoader loader = new TestLoader();
         for (String className : getClassNamesFromClassPath()) {
-            Class<?> cls = loader.loadIfTest(className);
-            if (cls == null) continue;
+            Class<?> cls = Class.forName(className, false, this.getClass().getClassLoader());		
+            if (!isTestClass(cls)) continue;
 
             boolean hasParent = false;
             for (Class<?> parent : BASE_CLS_WHITELIST) {
@@ -125,4 +126,85 @@
         return TextUtils.join(",", Arrays.asList(BASE_CLS_WHITELIST)
                 .stream().map(cls -> cls.getSimpleName()).toArray());
     }
+
+    /**
+     * Determines if given class is a valid test class.
+     *
+     * @param loadedClass
+     * @return <code>true</code> if loadedClass is a test
+     */
+    private boolean isTestClass(Class<?> loadedClass) {
+        try {
+            if (Modifier.isAbstract(loadedClass.getModifiers())) {
+                logDebug(String.format("Skipping abstract class %s: not a test",
+                        loadedClass.getName()));
+                return false;
+            }
+            // TODO: try to find upstream junit calls to replace these checks
+            if (junit.framework.Test.class.isAssignableFrom(loadedClass)) {
+                // ensure that if a TestCase, it has at least one test method otherwise
+                // TestSuite will throw error
+                if (junit.framework.TestCase.class.isAssignableFrom(loadedClass)) {
+                    return hasJUnit3TestMethod(loadedClass);
+                }
+                return true;
+            }
+            // TODO: look for a 'suite' method?
+            if (loadedClass.isAnnotationPresent(org.junit.runner.RunWith.class)) {
+                return true;
+            }
+            for (Method testMethod : loadedClass.getMethods()) {
+                if (testMethod.isAnnotationPresent(org.junit.Test.class)) {
+                    return true;
+                }
+            }
+            logDebug(String.format("Skipping class %s: not a test", loadedClass.getName()));
+            return false;
+        } catch (Exception e) {
+            // Defensively catch exceptions - Will throw runtime exception if it cannot load methods.
+            // For earlier versions of Android (Pre-ICS), Dalvik might try to initialize a class
+            // during getMethods(), fail to do so, hide the error and throw a NoSuchMethodException.
+            // Since the java.lang.Class.getMethods does not declare such an exception, resort to a
+            // generic catch all.
+            // For ICS+, Dalvik will throw a NoClassDefFoundException.
+            Log.w(TAG, String.format("%s in isTestClass for %s", e.toString(),
+                    loadedClass.getName()));
+            return false;
+        } catch (Error e) {
+            // defensively catch Errors too
+            Log.w(TAG, String.format("%s in isTestClass for %s", e.toString(),
+                    loadedClass.getName()));
+            return false;
+        }
+    }
+
+    private boolean hasJUnit3TestMethod(Class<?> loadedClass) {
+        for (Method testMethod : loadedClass.getMethods()) {
+            if (isPublicTestMethod(testMethod)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    // copied from junit.framework.TestSuite
+    private boolean isPublicTestMethod(Method m) {
+        return isTestMethod(m) && Modifier.isPublic(m.getModifiers());
+    }
+
+    // copied from junit.framework.TestSuite
+    private boolean isTestMethod(Method m) {
+        return m.getParameterTypes().length == 0 && m.getName().startsWith("test")
+                && m.getReturnType().equals(Void.TYPE);
+    }
+
+    /**
+     * Utility method for logging debug messages. Only actually logs a message if TAG is marked
+     * as loggable to limit log spam during normal use.
+     */
+    private void logDebug(String msg) {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, msg);
+        }
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java
index 1f5255a..943020c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java
@@ -287,6 +287,7 @@
         final Bundle extras = new Bundle();
         if (pkgs != null) extras.putStringArray(Notification.EXTRA_FOREGROUND_APPS, pkgs);
         n.extras = extras;
+        n.when = System.currentTimeMillis() - 10000; // ten seconds ago
         final StatusBarNotification sbn = makeMockSBN(userid, "android",
                 SystemMessageProto.SystemMessage.NOTE_FOREGROUND_SERVICES,
                 null, n);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
index 66d00dd..65d9699 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
@@ -54,6 +54,7 @@
     @Before
     public void SysuiSetup() throws Exception {
         System.setProperty("dexmaker.share_classloader", "true");
+        mContext.setTheme(R.style.Theme_SystemUI);
         SystemUIFactory.createFromConfig(mContext);
 
         mRealInstrumentation = InstrumentationRegistry.getInstrumentation();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java
index d0f0bfd..6417eb7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java
@@ -17,6 +17,7 @@
 package com.android.systemui.colorextraction;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
 
 import android.app.WallpaperColors;
 import android.app.WallpaperManager;
@@ -25,7 +26,6 @@
 import android.support.test.runner.AndroidJUnit4;
 
 import com.android.internal.colorextraction.ColorExtractor;
-import com.android.internal.colorextraction.types.Tonal;
 import com.android.systemui.SysuiTestCase;
 
 import org.junit.Test;
@@ -48,18 +48,21 @@
 
     @Test
     public void getColors_usesGreyIfWallpaperNotVisible() {
-        SysuiColorExtractor extractor = new SysuiColorExtractor(getContext(),
-                new Tonal(getContext()), false);
+        ColorExtractor.GradientColors colors = new ColorExtractor.GradientColors();
+        colors.setMainColor(Color.RED);
+        colors.setSecondaryColor(Color.RED);
+
+        SysuiColorExtractor extractor = getTestableExtractor(colors);
         simulateEvent(extractor);
         extractor.setWallpaperVisible(false);
 
         ColorExtractor.GradientColors fallbackColors = extractor.getFallbackColors();
 
-        for (int which : sWhich) {
-            for (int type : sTypes) {
-                assertEquals("Not using fallback!", extractor.getColors(which, type),
-                        fallbackColors);
-            }
+        for (int type : sTypes) {
+            assertEquals("Not using fallback!",
+                    extractor.getColors(WallpaperManager.FLAG_SYSTEM, type), fallbackColors);
+            assertNotEquals("Wallpaper visibility event should not affect lock wallpaper.",
+                    extractor.getColors(WallpaperManager.FLAG_LOCK, type), fallbackColors);
         }
     }
 
@@ -69,13 +72,7 @@
         colors.setMainColor(Color.RED);
         colors.setSecondaryColor(Color.RED);
 
-        SysuiColorExtractor extractor = new SysuiColorExtractor(getContext(),
-                (inWallpaperColors, outGradientColorsNormal, outGradientColorsDark,
-                        outGradientColorsExtraDark) -> {
-                    outGradientColorsNormal.set(colors);
-                    outGradientColorsDark.set(colors);
-                    outGradientColorsExtraDark.set(colors);
-                }, false);
+        SysuiColorExtractor extractor = getTestableExtractor(colors);
         simulateEvent(extractor);
         extractor.setWallpaperVisible(true);
 
@@ -87,6 +84,16 @@
         }
     }
 
+    private SysuiColorExtractor getTestableExtractor(ColorExtractor.GradientColors colors) {
+        return new SysuiColorExtractor(getContext(),
+                (inWallpaperColors, outGradientColorsNormal, outGradientColorsDark,
+                        outGradientColorsExtraDark) -> {
+                    outGradientColorsNormal.set(colors);
+                    outGradientColorsDark.set(colors);
+                    outGradientColorsExtraDark.set(colors);
+                }, false);
+    }
+
     private void simulateEvent(SysuiColorExtractor extractor) {
         // Let's fake a color event
         extractor.onColorsChanged(new WallpaperColors(Color.valueOf(Color.GREEN), null, null, 0),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java
new file mode 100644
index 0000000..0bbdeb5
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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.doze;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.provider.Settings;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.text.format.DateUtils;
+
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class AlwaysOnDisplayPolicyTest extends SysuiTestCase {
+    private static final String ALWAYS_ON_DISPLAY_CONSTANTS_VALUE = "prox_screen_off_delay=1000"
+            + ",prox_cooldown_trigger=2000"
+            + ",prox_cooldown_period=3000"
+            + ",screen_brightness_array=1:2:3:4:5"
+            + ",dimming_scrim_array=5:4:3:2:1";
+
+    private String mPreviousConfig;
+
+    @Before
+    public void setUp() {
+        mPreviousConfig = Settings.Global.getString(mContext.getContentResolver(),
+                Settings.Global.ALWAYS_ON_DISPLAY_CONSTANTS);
+    }
+
+    @After
+    public void tearDown() {
+        Settings.Global.putString(mContext.getContentResolver(),
+                Settings.Global.ALWAYS_ON_DISPLAY_CONSTANTS, mPreviousConfig);
+    }
+
+    @Test
+    public void testPolicy_valueNull_containsDefaultValue() throws Exception {
+        Settings.Global.putString(mContext.getContentResolver(),
+                Settings.Global.ALWAYS_ON_DISPLAY_CONSTANTS, null);
+
+        AlwaysOnDisplayPolicy policy = new AlwaysOnDisplayPolicy(mContext);
+
+        assertThat(policy.proxScreenOffDelayMs).isEqualTo(10 * DateUtils.SECOND_IN_MILLIS);
+        assertThat(policy.proxCooldownTriggerMs).isEqualTo(2 * DateUtils.SECOND_IN_MILLIS);
+        assertThat(policy.proxCooldownPeriodMs).isEqualTo(5 * DateUtils.SECOND_IN_MILLIS);
+        assertThat(policy.screenBrightnessArray).isEqualTo(mContext.getResources().getIntArray(
+                R.array.config_doze_brightness_sensor_to_brightness));
+        assertThat(policy.dimmingScrimArray).isEqualTo(mContext.getResources().getIntArray(
+                R.array.config_doze_brightness_sensor_to_scrim_opacity));
+    }
+
+    @Test
+    public void testPolicy_valueNotNull_containsValue() throws Exception {
+        Settings.Global.putString(mContext.getContentResolver(),
+                Settings.Global.ALWAYS_ON_DISPLAY_CONSTANTS, ALWAYS_ON_DISPLAY_CONSTANTS_VALUE);
+
+        AlwaysOnDisplayPolicy policy = new AlwaysOnDisplayPolicy(mContext);
+
+        assertThat(policy.proxScreenOffDelayMs).isEqualTo(1000);
+        assertThat(policy.proxCooldownTriggerMs).isEqualTo(2000);
+        assertThat(policy.proxCooldownPeriodMs).isEqualTo(3000);
+        assertThat(policy.screenBrightnessArray).isEqualTo(new int[]{1, 2, 3, 4, 5});
+        assertThat(policy.dimmingScrimArray).isEqualTo(new int[]{5, 4, 3, 2, 1});
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java
index 333e73d..b0c9f328 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java
@@ -30,6 +30,7 @@
     boolean dozing;
     float doubleTapX;
     float doubleTapY;
+    float aodDimmingScrimOpacity;
 
     @Override
     public void addCallback(@NonNull Callback callback) {
@@ -114,4 +115,9 @@
     @Override
     public void setDozeScreenBrightness(int value) {
     }
+
+    @Override
+    public void setAodDimmingScrim(float scrimOpacity) {
+        aodDimmingScrimOpacity = scrimOpacity;
+    }
 }
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 c275806..5e12781 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
@@ -19,6 +19,7 @@
 import static com.android.systemui.doze.DozeMachine.State.DOZE;
 import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD;
 import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_PAUSED;
+import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_PAUSING;
 import static com.android.systemui.doze.DozeMachine.State.DOZE_PULSE_DONE;
 import static com.android.systemui.doze.DozeMachine.State.DOZE_PULSING;
 import static com.android.systemui.doze.DozeMachine.State.DOZE_REQUEST_PULSE;
@@ -27,7 +28,9 @@
 import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
 import android.os.PowerManager;
@@ -38,15 +41,17 @@
 import com.android.systemui.utils.hardware.FakeSensorManager;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
 @RunWith(AndroidJUnit4.class)
 @SmallTest
-@Ignore
 public class DozeScreenBrightnessTest extends SysuiTestCase {
 
+    static final int DEFAULT_BRIGHTNESS = 10;
+    static final int[] SENSOR_TO_BRIGHTNESS = new int[]{-1, 1, 2, 3, 4};
+    static final int[] SENSOR_TO_OPACITY = new int[]{-1, 10, 0, 0, 0};
+
     DozeServiceFake mServiceFake;
     DozeScreenBrightness mScreen;
     FakeSensorManager.FakeGenericSensor mSensor;
@@ -60,14 +65,15 @@
         mSensorManager = new FakeSensorManager(mContext);
         mSensor = mSensorManager.getFakeLightSensor();
         mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
-                mSensor.getSensor(), mHostFake, null /* handler */);
+                mSensor.getSensor(), mHostFake, null /* handler */,
+                DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY);
     }
 
     @Test
     public void testInitialize_setsScreenBrightnessToValidValue() throws Exception {
         mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
 
-        assertNotEquals(PowerManager.BRIGHTNESS_DEFAULT, mServiceFake.screenBrightness);
+        assertEquals(DEFAULT_BRIGHTNESS, mServiceFake.screenBrightness);
         assertTrue(mServiceFake.screenBrightness <= PowerManager.BRIGHTNESS_ON);
     }
 
@@ -76,35 +82,37 @@
         mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
         mScreen.transitionTo(INITIALIZED, DOZE_AOD);
 
-        mSensor.sendSensorEvent(1000);
+        mSensor.sendSensorEvent(3);
 
-        assertEquals(1000, mServiceFake.screenBrightness);
+        assertEquals(3, mServiceFake.screenBrightness);
     }
 
     @Test
-    public void testPausingAod_pausesLightSensor() throws Exception {
+    public void testPausingAod_doesntPauseLightSensor() throws Exception {
         mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
         mScreen.transitionTo(INITIALIZED, DOZE_AOD);
 
-        mSensor.sendSensorEvent(1000);
+        mSensor.sendSensorEvent(1);
 
-        mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSED);
+        mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
+        mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
 
-        mSensor.sendSensorEvent(1001);
+        mSensor.sendSensorEvent(2);
 
-        assertNotEquals(1001, mServiceFake.screenBrightness);
+        assertEquals(2, mServiceFake.screenBrightness);
     }
 
     @Test
-    public void testPausingAod_resetsBrightness() throws Exception {
+    public void testPausingAod_doesNotResetBrightness() throws Exception {
         mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
         mScreen.transitionTo(INITIALIZED, DOZE_AOD);
 
-        mSensor.sendSensorEvent(1000);
+        mSensor.sendSensorEvent(1);
 
-        mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSED);
+        mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
+        mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
 
-        assertNotEquals(1000, mServiceFake.screenBrightness);
+        assertEquals(1, mServiceFake.screenBrightness);
     }
 
     @Test
@@ -113,9 +121,9 @@
         mScreen.transitionTo(INITIALIZED, DOZE);
         mScreen.transitionTo(DOZE, DOZE_REQUEST_PULSE);
 
-        mSensor.sendSensorEvent(1000);
+        mSensor.sendSensorEvent(1);
 
-        assertEquals(1000, mServiceFake.screenBrightness);
+        assertEquals(1, mServiceFake.screenBrightness);
     }
 
     @Test
@@ -127,19 +135,21 @@
         mScreen.transitionTo(DOZE_PULSING, DOZE_PULSE_DONE);
         mScreen.transitionTo(DOZE_PULSE_DONE, DOZE);
 
-        mSensor.sendSensorEvent(1000);
+        mSensor.sendSensorEvent(1);
 
-        assertNotEquals(1000, mServiceFake.screenBrightness);
+        assertEquals(DEFAULT_BRIGHTNESS, mServiceFake.screenBrightness);
     }
 
     @Test
     public void testNullSensor() throws Exception {
         mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
-                null /* sensor */, mHostFake, null /* handler */);
+                null /* sensor */, mHostFake, null /* handler */,
+                DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY);
 
         mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
         mScreen.transitionTo(INITIALIZED, DOZE_AOD);
-        mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSED);
+        mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
+        mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
     }
 
     @Test
@@ -148,19 +158,83 @@
         mScreen.transitionTo(INITIALIZED, DOZE_AOD);
         mScreen.transitionTo(DOZE_AOD, FINISH);
 
-        mSensor.sendSensorEvent(1000);
+        mSensor.sendSensorEvent(1);
 
-        assertNotEquals(1000, mServiceFake.screenBrightness);
+        assertNotEquals(1, mServiceFake.screenBrightness);
     }
 
     @Test
-    public void testBrightness_atLeastOne() throws Exception {
+    public void testNonPositiveBrightness_keepsPreviousBrightnessAndScrim() throws Exception {
         mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
         mScreen.transitionTo(INITIALIZED, DOZE_AOD);
 
+        mSensor.sendSensorEvent(1);
         mSensor.sendSensorEvent(0);
 
-        assertTrue("Brightness must be at least 1, but was " + mServiceFake.screenBrightness,
-                mServiceFake.screenBrightness >= 1);
+        assertEquals(1, mServiceFake.screenBrightness);
+        assertEquals(10/255f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
+    }
+
+    @Test
+    public void pausingAod_softBlanks() throws Exception {
+        mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
+        mScreen.transitionTo(INITIALIZED, DOZE_AOD);
+
+        mSensor.sendSensorEvent(2);
+
+        mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
+        mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
+
+        assertEquals(1f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
+
+        mSensor.sendSensorEvent(0);
+        assertEquals(1f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
+
+        mScreen.transitionTo(DOZE_AOD_PAUSED, DOZE_AOD);
+        assertEquals(1f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
+    }
+
+    @Test
+    public void pausingAod_softBlanks_withSpuriousSensorDuringPause() throws Exception {
+        mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
+        mScreen.transitionTo(INITIALIZED, DOZE_AOD);
+        mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
+        mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
+
+        mSensor.sendSensorEvent(1);
+        assertEquals(1f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
+    }
+
+    @Test
+    public void pausingAod_unblanksAfterSensor() throws Exception {
+        mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
+        mScreen.transitionTo(INITIALIZED, DOZE_AOD);
+
+        mSensor.sendSensorEvent(2);
+
+        mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
+        mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
+
+        mSensor.sendSensorEvent(0);
+
+        mScreen.transitionTo(DOZE_AOD_PAUSED, DOZE_AOD);
+
+        mSensor.sendSensorEvent(2);
+
+        assertEquals(0f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
+    }
+
+    @Test
+    public void pausingAod_unblanksIfSensorWasAlwaysReady() throws Exception {
+        mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
+        mScreen.transitionTo(INITIALIZED, DOZE_AOD);
+
+        mSensor.sendSensorEvent(2);
+
+        mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
+        mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
+        mScreen.transitionTo(DOZE_AOD_PAUSED, DOZE_AOD);
+
+        assertEquals(0f, mHostFake.aodDimmingScrimOpacity, 0.001f /* delta */);
     }
 }
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java
index c787eff..521d2e3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java
@@ -20,23 +20,22 @@
 import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD;
 import static com.android.systemui.doze.DozeMachine.State.DOZE_PULSING;
 import static com.android.systemui.doze.DozeMachine.State.DOZE_REQUEST_PULSE;
+import static com.android.systemui.doze.DozeMachine.State.FINISH;
 import static com.android.systemui.doze.DozeMachine.State.INITIALIZED;
 import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;
+import static com.android.systemui.utils.os.FakeHandler.Mode.QUEUEING;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
-import android.os.Handler;
 import android.os.Looper;
-import android.os.Message;
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
 import android.view.Display;
 
 import com.android.systemui.SysuiTestCase;
+import com.android.systemui.utils.os.FakeHandler;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -48,13 +47,13 @@
 
     DozeServiceFake mServiceFake;
     DozeScreenState mScreen;
-    private ImmediateHandler mHandler;
+    FakeHandler mHandlerFake;
 
     @Before
     public void setUp() throws Exception {
         mServiceFake = new DozeServiceFake();
-        mHandler = spy(new ImmediateHandler(Looper.getMainLooper()));
-        mScreen = new DozeScreenState(mServiceFake, mHandler);
+        mHandlerFake = new FakeHandler(Looper.getMainLooper());
+        mScreen = new DozeScreenState(mServiceFake, mHandlerFake);
     }
 
     @Test
@@ -105,27 +104,34 @@
     }
 
     @Test
-    public void test_postedToHandler() {
+    public void test_initialScreenStatePostedToHandler() {
+        mHandlerFake.setMode(QUEUEING);
+
         mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
+        mServiceFake.screenStateSet = false;
         mScreen.transitionTo(INITIALIZED, DOZE_AOD);
 
-        verify(mHandler).sendMessageAtTime(any(), anyLong());
+        assertFalse(mServiceFake.screenStateSet);
+
+        mHandlerFake.dispatchQueuedMessages();
+
+        assertTrue(mServiceFake.screenStateSet);
+        assertEquals(Display.STATE_DOZE_SUSPEND, mServiceFake.screenState);
     }
 
-    private static class ImmediateHandler extends Handler {
+    @Test
+    public void test_noScreenStateSetAfterFinish() {
+        mHandlerFake.setMode(QUEUEING);
 
-        public ImmediateHandler(Looper looper) {
-            super(looper);
-        }
+        mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
+        mScreen.transitionTo(INITIALIZED, DOZE_AOD);
+        mScreen.transitionTo(DOZE_AOD, FINISH);
 
-        @Override
-        public boolean sendMessageAtTime(Message msg, long uptimeMillis) {
-            Runnable callback = msg.getCallback();
-            if (callback != null) {
-                callback.run();
-                return false;
-            }
-            return super.sendMessageAtTime(msg, uptimeMillis);
-        }
+        mServiceFake.screenStateSet = false;
+
+        mHandlerFake.dispatchQueuedMessages();
+
+        assertFalse(mServiceFake.screenStateSet);
     }
+
 }
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeServiceFake.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeServiceFake.java
index 34026b0..75f97a2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeServiceFake.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeServiceFake.java
@@ -19,10 +19,16 @@
 import android.os.PowerManager;
 import android.view.Display;
 
+/**
+ * Fake implementation of {@link DozeMachine.Service} for tests.
+ *
+ * Useful instead of mocking because it allows verifying state instead of interactions.
+ */
 public class DozeServiceFake implements DozeMachine.Service {
 
     public boolean finished;
     public int screenState;
+    public boolean screenStateSet;
     public boolean requestedWakeup;
     public int screenBrightness;
 
@@ -38,6 +44,7 @@
     @Override
     public void setDozeScreenState(int state) {
         screenState = state;
+        screenStateSet = true;
     }
 
     @Override
@@ -53,6 +60,8 @@
     public void reset() {
         finished = false;
         screenState = Display.STATE_UNKNOWN;
+        screenStateSet = false;
+        requestedWakeup = false;
         screenBrightness = PowerManager.BRIGHTNESS_DEFAULT;
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchStateTest.java b/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchStateTest.java
new file mode 100644
index 0000000..b8c946d
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchStateTest.java
@@ -0,0 +1,129 @@
+/*
+ * 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.pip.phone;
+
+import static android.view.MotionEvent.ACTION_DOWN;
+import static android.view.MotionEvent.ACTION_MOVE;
+import static android.view.MotionEvent.ACTION_UP;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Looper;
+import android.os.SystemClock;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.view.MotionEvent;
+import android.view.ViewConfiguration;
+
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.pip.phone.PipTouchState;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class PipTouchStateTest extends SysuiTestCase {
+
+    private Handler mHandler;
+    private HandlerThread mHandlerThread;
+    private PipTouchState mTouchState;
+    private CountDownLatch mDoubleTapCallbackTriggeredLatch;
+
+    @Before
+    public void setUp() throws Exception {
+        mHandlerThread = new HandlerThread("PipTouchStateTestThread");
+        mHandlerThread.start();
+        mHandler = new Handler(mHandlerThread.getLooper());
+
+        mDoubleTapCallbackTriggeredLatch = new CountDownLatch(1);
+        mTouchState = new PipTouchState(ViewConfiguration.get(getContext()),
+                mHandler, () -> {
+            mDoubleTapCallbackTriggeredLatch.countDown();
+        });
+        assertFalse(mTouchState.isDoubleTap());
+        assertFalse(mTouchState.isWaitingForDoubleTap());
+    }
+
+    @Test
+    public void testDoubleTapLongSingleTap_notDoubleTapAndNotWaiting() {
+        final long currentTime = SystemClock.uptimeMillis();
+
+        mTouchState.onTouchEvent(createMotionEvent(ACTION_DOWN, currentTime, 0, 0));
+        mTouchState.onTouchEvent(createMotionEvent(ACTION_UP,
+                currentTime + PipTouchState.DOUBLE_TAP_TIMEOUT + 10, 0, 0));
+        assertFalse(mTouchState.isDoubleTap());
+        assertFalse(mTouchState.isWaitingForDoubleTap());
+        assertTrue(mTouchState.getDoubleTapTimeoutCallbackDelay() == -1);
+    }
+
+    @Test
+    public void testDoubleTapTimeout_timeoutCallbackCalled() throws Exception {
+        final long currentTime = SystemClock.uptimeMillis();
+
+        mTouchState.onTouchEvent(createMotionEvent(ACTION_DOWN, currentTime, 0, 0));
+        mTouchState.onTouchEvent(createMotionEvent(ACTION_UP,
+                currentTime + PipTouchState.DOUBLE_TAP_TIMEOUT - 10, 0, 0));
+        assertFalse(mTouchState.isDoubleTap());
+        assertTrue(mTouchState.isWaitingForDoubleTap());
+
+        assertTrue(mTouchState.getDoubleTapTimeoutCallbackDelay() == 10);
+        mTouchState.scheduleDoubleTapTimeoutCallback();
+        mDoubleTapCallbackTriggeredLatch.await(1, TimeUnit.SECONDS);
+        assertTrue(mDoubleTapCallbackTriggeredLatch.getCount() == 0);
+    }
+
+    @Test
+    public void testDoubleTapDrag_doubleTapCanceled() {
+        final long currentTime = SystemClock.uptimeMillis();
+
+        mTouchState.onTouchEvent(createMotionEvent(ACTION_DOWN, currentTime, 0, 0));
+        mTouchState.onTouchEvent(createMotionEvent(ACTION_MOVE, currentTime + 10, 500, 500));
+        mTouchState.onTouchEvent(createMotionEvent(ACTION_UP, currentTime + 20, 500, 500));
+        assertTrue(mTouchState.isDragging());
+        assertFalse(mTouchState.isDoubleTap());
+        assertFalse(mTouchState.isWaitingForDoubleTap());
+        assertTrue(mTouchState.getDoubleTapTimeoutCallbackDelay() == -1);
+    }
+
+    @Test
+    public void testDoubleTap_doubleTapRegistered() {
+        final long currentTime = SystemClock.uptimeMillis();
+
+        mTouchState.onTouchEvent(createMotionEvent(ACTION_DOWN, currentTime, 0, 0));
+        mTouchState.onTouchEvent(createMotionEvent(ACTION_UP, currentTime + 10, 0, 0));
+        mTouchState.onTouchEvent(createMotionEvent(ACTION_DOWN,
+                currentTime + PipTouchState.DOUBLE_TAP_TIMEOUT - 20, 0, 0));
+        mTouchState.onTouchEvent(createMotionEvent(ACTION_UP,
+                currentTime + PipTouchState.DOUBLE_TAP_TIMEOUT - 10, 0, 0));
+        assertTrue(mTouchState.isDoubleTap());
+        assertFalse(mTouchState.isWaitingForDoubleTap());
+        assertTrue(mTouchState.getDoubleTapTimeoutCallbackDelay() == -1);
+    }
+
+    private MotionEvent createMotionEvent(int action, long eventTime, float x, float y) {
+        return MotionEvent.obtain(0, eventTime, action, x, y, 0);
+    }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginManagerTest.java
index bba982c..94dbc2a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginManagerTest.java
@@ -26,6 +26,8 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.net.Uri;
+import android.support.test.annotation.UiThreadTest;
+import android.support.test.runner.AndroidJUnit4;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
@@ -34,10 +36,11 @@
 import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
 import com.android.systemui.Dependency;
 import com.android.systemui.SysuiTestCase;
-import com.android.systemui.plugins.PluginInstanceManager.PluginInfo;
 import com.android.systemui.plugins.annotations.ProvidesInterface;
+import com.android.systemui.plugins.PluginInstanceManager.PluginInfo;
 import com.android.systemui.plugins.PluginManagerImpl.PluginInstanceManagerFactory;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -64,7 +67,7 @@
     public void setup() throws Exception {
         mDependency.injectTestDependency(Dependency.BG_LOOPER,
                 TestableLooper.get(this).getLooper());
-        mRealExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
+        mRealExceptionHandler = Thread.getUncaughtExceptionPreHandler();
         mMockExceptionHandler = mock(UncaughtExceptionHandler.class);
         mMockFactory = mock(PluginInstanceManagerFactory.class);
         mMockPluginInstance = mock(PluginInstanceManager.class);
@@ -164,9 +167,9 @@
     }
 
     private void resetExceptionHandler() {
-        mPluginExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
+        mPluginExceptionHandler = Thread.getUncaughtExceptionPreHandler();
         // Set back the real exception handler so the test can crash if it wants to.
-        Thread.setDefaultUncaughtExceptionHandler(mRealExceptionHandler);
+        Thread.setUncaughtExceptionPreHandler(mRealExceptionHandler);
     }
 
     @ProvidesInterface(action = TestPlugin.ACTION, version = TestPlugin.VERSION)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
index 1b74ebb..7f07e0c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
@@ -36,6 +36,7 @@
 
 import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
 import com.android.systemui.SysuiTestCase;
+import com.android.systemui.util.NotificationChannels;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -108,23 +109,13 @@
     }
 
     @Test
-    public void testShowLowBatteryNotification_Silent() {
-        mPowerNotificationWarnings.showLowBatteryWarning(false);
-        ArgumentCaptor<Notification> captor = ArgumentCaptor.forClass(Notification.class);
-        verify(mMockNotificationManager)
-                .notifyAsUser(anyString(), eq(SystemMessage.NOTE_POWER_LOW),
-                        captor.capture(), any());
-        assertEquals(null, captor.getValue().sound);
-    }
-
-    @Test
-    public void testShowLowBatteryNotification_Sound() {
+    public void testShowLowBatteryNotification_BatteryChannel() {
         mPowerNotificationWarnings.showLowBatteryWarning(true);
         ArgumentCaptor<Notification> captor = ArgumentCaptor.forClass(Notification.class);
         verify(mMockNotificationManager)
                 .notifyAsUser(anyString(), eq(SystemMessage.NOTE_POWER_LOW),
                         captor.capture(), any());
-        assertNotEqual(null, captor.getValue().sound);
+        assertTrue(captor.getValue().getChannelId() == NotificationChannels.BATTERY);
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/AlphaControlledSignalTileViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/AlphaControlledSignalTileViewTest.java
new file mode 100644
index 0000000..3e677c0
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/AlphaControlledSignalTileViewTest.java
@@ -0,0 +1,93 @@
+/*
+ * 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.qs;
+
+
+import static org.junit.Assert.assertTrue;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.graphics.drawable.Drawable;
+import android.test.suitebuilder.annotation.SmallTest;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.qs.AlphaControlledSignalTileView.AlphaControlledSlashDrawable;
+import com.android.systemui.qs.AlphaControlledSignalTileView.AlphaControlledSlashImageView;
+import org.junit.Test;
+
+@SmallTest
+public class AlphaControlledSignalTileViewTest extends SysuiTestCase {
+
+    private AlphaControlledSignalTileView mTileView;
+
+    @Test
+    public void testTileView_createsAlphaControlledSlashImageView() {
+        mTileView = new AlphaControlledSignalTileView(mContext);
+
+        assertTrue(mTileView.createSlashImageView(mContext)
+                instanceof AlphaControlledSlashImageView);
+    }
+
+    /// AlphaControlledSlashImageView tests
+    @Test
+    public void testSlashImageView_createsAlphaControlledSlashDrawable() {
+        TestableSlashImageView iv = new TestableSlashImageView(mContext);
+
+        iv.ensureSlashDrawable();
+        assertTrue(iv.getSlashDrawable() instanceof AlphaControlledSlashDrawable);
+    }
+
+    /// AlphaControlledSlashDrawable tests
+    @Test
+    public void testSlashDrawable_doesNotSetTintList() {
+        Drawable mockDrawable = mock(Drawable.class);
+        AlphaControlledSlashDrawable drawable = new AlphaControlledSlashDrawable(mockDrawable);
+        ColorStateList list = ColorStateList.valueOf(0xffffff);
+        drawable.setTintList(list);
+        verify(mockDrawable, never()).setTintList(any());
+    }
+
+    @Test
+    public void testSlashDrawable_setsFinalTintList() {
+        Drawable mockDrawable = mock(Drawable.class);
+        AlphaControlledSlashDrawable drawable = new AlphaControlledSlashDrawable(mockDrawable);
+        ColorStateList list = ColorStateList.valueOf(0xffffff);
+        drawable.setFinalTintList(list);
+        verify(mockDrawable, atLeastOnce()).setTintList(list);
+    }
+
+    // Expose getSlashDrawable
+    private static class TestableSlashImageView extends AlphaControlledSlashImageView {
+        TestableSlashImageView(Context c) {
+            super(c);
+        }
+
+        private SlashDrawable getSlashDrawable() {
+            return mSlash;
+        }
+
+        @Override
+        protected void setSlash(SlashDrawable slash) {
+            super.setSlash(slash);
+        }
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java
new file mode 100644
index 0000000..703b4d5
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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.qs;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.support.test.filters.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.testing.TestableLooper.RunWithLooper;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import com.android.systemui.R;
+import com.android.systemui.R.id;
+import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.statusbar.policy.DeviceProvisionedController;
+import com.android.systemui.utils.leaks.LeakCheckedTest;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidTestingRunner.class)
+@RunWithLooper
+@SmallTest
+@Ignore("failing")
+public class QSFooterImplTest extends LeakCheckedTest {
+
+    private QSFooterImpl mFooter;
+    private ActivityStarter mActivityStarter;
+    private DeviceProvisionedController mDeviceProvisionedController;
+
+    @Before
+    public void setup() throws Exception {
+        injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
+        mActivityStarter = mDependency.injectMockDependency(ActivityStarter.class);
+        mDeviceProvisionedController = mDependency.injectMockDependency(
+                DeviceProvisionedController.class);
+        TestableLooper.get(this).runWithLooper(
+                () -> mFooter = (QSFooterImpl) LayoutInflater.from(mContext).inflate(
+                        R.layout.qs_footer_impl, null));
+    }
+
+    @Test
+    public void testSettings_UserNotSetup() {
+        View settingsButton = mFooter.findViewById(id.settings_button);
+        when(mDeviceProvisionedController.isCurrentUserSetup()).thenReturn(false);
+
+        mFooter.onClick(settingsButton);
+        // Verify Settings wasn't launched.
+        verify(mActivityStarter, never()).startActivity(any(), anyBoolean());
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterTest.java
deleted file mode 100644
index d25bbe1..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterTest.java
+++ /dev/null
@@ -1,71 +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.qs;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.support.test.filters.SmallTest;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-import android.testing.TestableLooper.RunWithLooper;
-import android.view.LayoutInflater;
-import android.view.View;
-
-import com.android.systemui.R;
-import com.android.systemui.R.id;
-import com.android.systemui.plugins.ActivityStarter;
-import com.android.systemui.statusbar.policy.DeviceProvisionedController;
-import com.android.systemui.utils.leaks.LeakCheckedTest;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(AndroidTestingRunner.class)
-@RunWithLooper
-@SmallTest
-@Ignore("failing")
-public class QSFooterTest extends LeakCheckedTest {
-
-    private QSFooter mFooter;
-    private ActivityStarter mActivityStarter;
-    private DeviceProvisionedController mDeviceProvisionedController;
-
-    @Before
-    public void setup() throws Exception {
-        injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
-        mActivityStarter = mDependency.injectMockDependency(ActivityStarter.class);
-        mDeviceProvisionedController = mDependency.injectMockDependency(
-                DeviceProvisionedController.class);
-        TestableLooper.get(this).runWithLooper(() -> {
-            mFooter = (QSFooter) LayoutInflater.from(mContext).inflate(R.layout.qs_footer, null);
-        });
-    }
-
-    @Test
-    public void testSettings_UserNotSetup() {
-        View settingsButton = mFooter.findViewById(id.settings_button);
-        when(mDeviceProvisionedController.isCurrentUserSetup()).thenReturn(false);
-
-        mFooter.onClick(settingsButton);
-        // Verify Settings wasn't launched.
-        verify(mActivityStarter, never()).startActivity(any(), anyBoolean());
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java
index a8487b3..4f98836 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java
@@ -29,6 +29,7 @@
 import android.support.test.runner.AndroidJUnit4;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.text.SpannableStringBuilder;
+import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.TextView;
@@ -395,6 +396,57 @@
                      mFooter.getVpnMessage(false, true, VPN_PACKAGE, null));
     }
 
+    @Test
+    public void testConfigSubtitleVisibility() {
+        View view = LayoutInflater.from(mContext)
+                .inflate(R.layout.quick_settings_footer_dialog, null);
+
+        // Device Management subtitle should be shown when there is Device Management section only
+        // Other sections visibility will be set somewhere else so it will not be tested here
+        mFooter.configSubtitleVisibility(true, false, false, false, view);
+        assertEquals(View.VISIBLE,
+                view.findViewById(R.id.device_management_subtitle).getVisibility());
+
+        // If there are multiple sections, all subtitles should be shown
+        mFooter.configSubtitleVisibility(true, true, false, false, view);
+        assertEquals(View.VISIBLE,
+                view.findViewById(R.id.device_management_subtitle).getVisibility());
+        assertEquals(View.VISIBLE,
+                view.findViewById(R.id.ca_certs_subtitle).getVisibility());
+
+        // If there are multiple sections, all subtitles should be shown
+        mFooter.configSubtitleVisibility(true, true, true, true, view);
+        assertEquals(View.VISIBLE,
+                view.findViewById(R.id.device_management_subtitle).getVisibility());
+        assertEquals(View.VISIBLE,
+                view.findViewById(R.id.ca_certs_subtitle).getVisibility());
+        assertEquals(View.VISIBLE,
+                view.findViewById(R.id.network_logging_subtitle).getVisibility());
+        assertEquals(View.VISIBLE,
+                view.findViewById(R.id.vpn_subtitle).getVisibility());
+
+        // If there are multiple sections, all subtitles should be shown, event if there is no
+        // Device Management section
+        mFooter.configSubtitleVisibility(false, true, true, true, view);
+        assertEquals(View.VISIBLE,
+                view.findViewById(R.id.ca_certs_subtitle).getVisibility());
+        assertEquals(View.VISIBLE,
+                view.findViewById(R.id.network_logging_subtitle).getVisibility());
+        assertEquals(View.VISIBLE,
+                view.findViewById(R.id.vpn_subtitle).getVisibility());
+
+        // If there is only 1 section, the title should be hidden
+        mFooter.configSubtitleVisibility(false, true, false, false, view);
+        assertEquals(View.GONE,
+                view.findViewById(R.id.ca_certs_subtitle).getVisibility());
+        mFooter.configSubtitleVisibility(false, false, true, false, view);
+        assertEquals(View.GONE,
+                view.findViewById(R.id.network_logging_subtitle).getVisibility());
+        mFooter.configSubtitleVisibility(false, false, false, true, view);
+        assertEquals(View.GONE,
+                view.findViewById(R.id.vpn_subtitle).getVisibility());
+    }
+
     private CharSequence addLink(CharSequence description) {
         final SpannableStringBuilder message = new SpannableStringBuilder();
         message.append(description);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java
index 9fe3e10..98ca1b4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java
@@ -76,6 +76,19 @@
         assertTrue(mSlashView.getSlashDrawable() == null);
     }
 
+    @Test
+    public void testSetImageDrawableUsesDrawableLevel() {
+        SlashImageView iv = new SlashImageView(mContext);
+        Drawable mockDrawable = mock(Drawable.class);
+        mockDrawable.setLevel(2);
+        assertTrue(mockDrawable.getLevel() == 2);
+
+        iv.setImageDrawable(mockDrawable);
+
+        // Make sure setting the drawable didn't reset its level to 0
+        assertTrue(mockDrawable.getLevel() == 2);
+    }
+
     // Expose getSlashDrawable
     private static class TestableSlashImageView extends SlashImageView {
         TestableSlashImageView(Context c) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/car/CarQsFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/car/CarQsFragmentTest.java
new file mode 100644
index 0000000..4f87b02
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/car/CarQsFragmentTest.java
@@ -0,0 +1,83 @@
+/*
+ * 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.qs.car;
+
+import static org.junit.Assert.assertNotNull;
+
+import android.content.Context;
+import android.support.test.filters.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.LayoutInflaterBuilder;
+import android.testing.TestableLooper;
+import android.testing.TestableLooper.RunWithLooper;
+import android.view.View;
+import android.widget.FrameLayout;
+
+import com.android.keyguard.CarrierText;
+import com.android.systemui.Dependency;
+import com.android.systemui.SysuiBaseFragmentTest;
+import com.android.systemui.statusbar.policy.Clock;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Tests for {@link CarQSFragment}.
+ */
+@RunWith(AndroidTestingRunner.class)
+@RunWithLooper(setAsMainLooper = true)
+@SmallTest
+public class CarQsFragmentTest extends SysuiBaseFragmentTest {
+    public CarQsFragmentTest() {
+        super(CarQSFragment.class);
+    }
+
+    @Before
+    public void initDependencies() {
+        mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE,
+                new LayoutInflaterBuilder(mContext)
+                        .replace("com.android.systemui.statusbar.policy.SplitClockView",
+                                FrameLayout.class)
+                        .replace("TextClock", View.class)
+                        .replace(CarrierText.class, View.class)
+                        .replace(Clock.class, View.class)
+                        .build());
+
+        mDependency.injectTestDependency(Dependency.BG_LOOPER,
+                TestableLooper.get(this).getLooper());
+    }
+
+    @Test
+    public void testLayoutInflation() {
+        CarQSFragment fragment = (CarQSFragment) mFragment;
+        mFragments.dispatchResume();
+
+        assertNotNull(fragment.getHeader());
+        assertNotNull(fragment.getFooter());
+    }
+
+    @Test
+    public void testListening() {
+        CarQSFragment qs = (CarQSFragment) mFragment;
+        mFragments.dispatchResume();
+        processAllMessages();
+
+        qs.setListening(true);
+        processAllMessages();
+
+        qs.setListening(false);
+        processAllMessages();
+    }
+}
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 0500a54..004ff29 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
@@ -21,13 +21,19 @@
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_QS_VALUE;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_ACTION;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Matchers.argThat;
+import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import static java.lang.Thread.sleep;
+
 import android.content.Intent;
 import android.metrics.LogMaker;
 import android.support.test.filters.SmallTest;
@@ -66,10 +72,10 @@
         mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);
         mHost = mock(QSTileHost.class);
         when(mHost.indexOf(spec)).thenReturn(POSITION);
-        mTestableLooper.runWithLooper(() -> {
-            mTile = new TileImpl(mHost);
-            mTile.setTileSpec(spec);
-        });
+
+        mTile = spy(new TileImpl(mHost));
+        mTile.mHandler = mTile.new H(mTestableLooper.getLooper());
+        mTile.setTileSpec(spec);
     }
 
     @Test
@@ -94,12 +100,38 @@
     public void testPopulate() {
         LogMaker maker = mock(LogMaker.class);
         when(maker.setSubtype(anyInt())).thenReturn(maker);
+        when(maker.addTaggedData(anyInt(), any())).thenReturn(maker);
         mTile.getState().value = true;
         mTile.populate(maker);
         verify(maker).addTaggedData(eq(FIELD_QS_VALUE), eq(1));
         verify(maker).addTaggedData(eq(FIELD_QS_POSITION), eq(POSITION));
     }
 
+    @Test
+    public void testStaleTimeout() throws InterruptedException {
+        when(mTile.getStaleTimeout()).thenReturn(5l);
+        clearInvocations(mTile);
+
+        mTile.handleRefreshState(null);
+        mTestableLooper.processAllMessages();
+        verify(mTile, never()).handleStale();
+
+        sleep(10);
+        mTestableLooper.processAllMessages();
+        verify(mTile).handleStale();
+    }
+
+    @Test
+    public void testStaleListening() {
+        mTile.handleStale();
+        mTestableLooper.processAllMessages();
+        verify(mTile).handleSetListening(eq(true));
+
+        mTile.handleRefreshState(null);
+        mTestableLooper.processAllMessages();
+        verify(mTile).handleSetListening(eq(false));
+    }
+
     private class TileLogMatcher implements ArgumentMatcher<LogMaker> {
 
         private final int mCategory;
@@ -164,7 +196,7 @@
         }
 
         @Override
-        protected void setListening(boolean listening) {
+        protected void handleSetListening(boolean listening) {
 
         }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/recents/model/HighResThumbnailLoaderTest.java b/packages/SystemUI/tests/src/com/android/systemui/recents/model/HighResThumbnailLoaderTest.java
index f57b6b3..5a8c6dd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/recents/model/HighResThumbnailLoaderTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/recents/model/HighResThumbnailLoaderTest.java
@@ -57,7 +57,8 @@
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        mLoader = new HighResThumbnailLoader(mMockSystemServicesProxy, Looper.getMainLooper());
+        mLoader = new HighResThumbnailLoader(mMockSystemServicesProxy, Looper.getMainLooper(),
+                false);
         mTask.key = new TaskKey(0, 0, null, 0, 0, 0);
         when(mMockSystemServicesProxy.getTaskThumbnail(anyInt(), anyBoolean()))
                 .thenReturn(mThumbnailData);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java
index 2f6511c..58ff46a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java
@@ -134,4 +134,16 @@
         row.setAboveShelf(false);
         verify(listener).onAboveShelfStateChanged(false);
     }
+
+    @Test
+    public void testClickSound() throws Exception {
+        Assert.assertTrue("Should play sounds by default.", mGroup.isSoundEffectsEnabled());
+        mGroup.setDark(true /* dark */, false /* fade */, 0 /* delay */);
+        mGroup.setSecureStateProvider(()-> false);
+        Assert.assertFalse("Shouldn't play sounds when dark and trusted.",
+                mGroup.isSoundEffectsEnabled());
+        mGroup.setSecureStateProvider(()-> true);
+        Assert.assertTrue("Should always play sounds when not trusted.",
+                mGroup.isSoundEffectsEnabled());
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationDataTest.java
index 18c5756..972eddb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationDataTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationDataTest.java
@@ -135,5 +135,11 @@
         public NotificationChannel getChannel(String key) {
             return new NotificationChannel(null, null, 0);
         }
+
+        @Override
+        protected boolean getRanking(String key, NotificationListenerService.Ranking outRanking) {
+            super.getRanking(key, outRanking);
+            return true;
+        }
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java
index b6827ea..88fa659 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java
@@ -121,7 +121,7 @@
         mDefaultNotificationChannel = new NotificationChannel(
                 NotificationChannel.DEFAULT_CHANNEL_ID, TEST_CHANNEL_NAME,
                 NotificationManager.IMPORTANCE_LOW);
-        mSbn = new StatusBarNotification(TEST_PACKAGE_NAME, TEST_PACKAGE_NAME, 0, null, 0, 0,
+        mSbn = new StatusBarNotification(TEST_PACKAGE_NAME, TEST_PACKAGE_NAME, 0, null, TEST_UID, 0,
                 new Notification(), UserHandle.CURRENT, null, 0);
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationSnoozeTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationSnoozeTest.java
new file mode 100644
index 0000000..6b31c96
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationSnoozeTest.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar;
+
+import android.provider.Settings;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableResources;
+import android.testing.UiThreadTest;
+import android.util.KeyValueListParser;
+
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper.SnoozeOption;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Matchers.isNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@UiThreadTest
+public class NotificationSnoozeTest extends SysuiTestCase {
+    private static final int RES_DEFAULT = 2;
+    private static final int[] RES_OPTIONS = {1, 2, 3};
+    private NotificationSnooze mNotificationSnooze;
+    private KeyValueListParser mMockParser;
+
+    @Before
+    public void setUp() throws Exception {
+        Settings.Global.putString(mContext.getContentResolver(),
+                Settings.Global.NOTIFICATION_SNOOZE_OPTIONS, null);
+        TestableResources resources = mContext.getOrCreateTestableResources();
+        resources.addOverride(R.integer.config_notification_snooze_time_default, RES_DEFAULT);
+        resources.addOverride(R.array.config_notification_snooze_times, RES_OPTIONS);
+        mNotificationSnooze = new NotificationSnooze(mContext, null);
+        mMockParser = mock(KeyValueListParser.class);
+    }
+
+    @Test
+    public void testParseIntArrayNull() throws Exception {
+        when(mMockParser.getString(anyString(), isNull())).thenReturn(null);
+        mNotificationSnooze.setKeyValueListParser(mMockParser);
+
+        int[] result = mNotificationSnooze.parseIntArray("foo", RES_OPTIONS);
+        assertEquals(RES_OPTIONS, result);
+    }
+
+    @Test
+    public void testParseIntArrayLeadingSep() throws Exception {
+        when(mMockParser.getString(anyString(), isNull())).thenReturn(":4:5:6");
+        mNotificationSnooze.setKeyValueListParser(mMockParser);
+
+        int[] result = mNotificationSnooze.parseIntArray("foo", RES_OPTIONS);
+        assertEquals(RES_OPTIONS, result);
+    }
+
+    @Test
+    public void testParseIntArrayEmptyItem() throws Exception {
+        when(mMockParser.getString(anyString(), isNull())).thenReturn("4::6");
+        mNotificationSnooze.setKeyValueListParser(mMockParser);
+
+        int[] result = mNotificationSnooze.parseIntArray("foo", RES_OPTIONS);
+        assertEquals(RES_OPTIONS, result);
+    }
+
+    @Test
+    public void testParseIntArrayTrailingSep() throws Exception {
+        when(mMockParser.getString(anyString(), isNull())).thenReturn("4:5:6:");
+        mNotificationSnooze.setKeyValueListParser(mMockParser);
+
+        int[] result = mNotificationSnooze.parseIntArray("foo", RES_OPTIONS);
+        assertEquals(3, result.length);
+        assertEquals(4, result[0]);  // respect order
+        assertEquals(5, result[1]);
+        assertEquals(6, result[2]);
+    }
+
+    @Test
+    public void testParseIntArrayGoodData() throws Exception {
+        when(mMockParser.getString(anyString(), isNull())).thenReturn("4:5:6");
+        mNotificationSnooze.setKeyValueListParser(mMockParser);
+
+        int[] result = mNotificationSnooze.parseIntArray("foo", RES_OPTIONS);
+        assertEquals(3, result.length);
+        assertEquals(4, result[0]);  // respect order
+        assertEquals(5, result[1]);
+        assertEquals(6, result[2]);
+    }
+
+    @Test
+    public void testGetOptionsWithNoConfig() throws Exception {
+        ArrayList<SnoozeOption> result = mNotificationSnooze.getDefaultSnoozeOptions();
+        assertEquals(3, result.size());
+        assertEquals(1, result.get(0).getMinutesToSnoozeFor());  // respect order
+        assertEquals(2, result.get(1).getMinutesToSnoozeFor());
+        assertEquals(3, result.get(2).getMinutesToSnoozeFor());
+        assertEquals(2, mNotificationSnooze.getDefaultOption().getMinutesToSnoozeFor());
+    }
+
+    @Test
+    public void testGetOptionsWithInvalidConfig() throws Exception {
+        Settings.Global.putString(mContext.getContentResolver(),
+                Settings.Global.NOTIFICATION_SNOOZE_OPTIONS,
+                "this is garbage");
+        ArrayList<SnoozeOption> result = mNotificationSnooze.getDefaultSnoozeOptions();
+        assertEquals(3, result.size());
+        assertEquals(1, result.get(0).getMinutesToSnoozeFor());  // respect order
+        assertEquals(2, result.get(1).getMinutesToSnoozeFor());
+        assertEquals(3, result.get(2).getMinutesToSnoozeFor());
+        assertEquals(2, mNotificationSnooze.getDefaultOption().getMinutesToSnoozeFor());
+    }
+
+    @Test
+    public void testGetOptionsWithValidDefault() throws Exception {
+        Settings.Global.putString(mContext.getContentResolver(),
+                Settings.Global.NOTIFICATION_SNOOZE_OPTIONS,
+                "default=10,options_array=4:5:6:7");
+        ArrayList<SnoozeOption> result = mNotificationSnooze.getDefaultSnoozeOptions();
+        assertNotNull(mNotificationSnooze.getDefaultOption());  // pick one
+    }
+
+    @Test
+    public void testGetOptionsWithValidConfig() throws Exception {
+        Settings.Global.putString(mContext.getContentResolver(),
+                Settings.Global.NOTIFICATION_SNOOZE_OPTIONS,
+                "default=6,options_array=4:5:6:7");
+        ArrayList<SnoozeOption> result = mNotificationSnooze.getDefaultSnoozeOptions();
+        assertEquals(4, result.size());
+        assertEquals(4, result.get(0).getMinutesToSnoozeFor());  // respect order
+        assertEquals(5, result.get(1).getMinutesToSnoozeFor());
+        assertEquals(6, result.get(2).getMinutesToSnoozeFor());
+        assertEquals(7, result.get(3).getMinutesToSnoozeFor());
+        assertEquals(6, mNotificationSnooze.getDefaultOption().getMinutesToSnoozeFor());
+    }
+
+    @Test
+    public void testGetOptionsWithLongConfig() throws Exception {
+        Settings.Global.putString(mContext.getContentResolver(),
+                Settings.Global.NOTIFICATION_SNOOZE_OPTIONS,
+                "default=6,options_array=4:5:6:7:8:9:10:11:12:13:14:15:16:17");
+        ArrayList<SnoozeOption> result = mNotificationSnooze.getDefaultSnoozeOptions();
+        assertTrue(result.size() > 3);
+        assertEquals(4, result.get(0).getMinutesToSnoozeFor());  // respect order
+        assertEquals(5, result.get(1).getMinutesToSnoozeFor());
+        assertEquals(6, result.get(2).getMinutesToSnoozeFor());
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationInflaterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationInflaterTest.java
index e7e6829..f8fd53d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationInflaterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationInflaterTest.java
@@ -185,7 +185,9 @@
         countDownLatch.await();
     }
 
+    /* Cancelling requires us to be on the UI thread otherwise we might have a race */
     @Test
+    @UiThreadTest
     public void testSupersedesExistingTask() throws Exception {
         mNotificationInflater.inflateNotificationViews();
         mNotificationInflater.setIsLowPriority(true);
@@ -199,6 +201,18 @@
         runningTask.abort();
     }
 
+    @Test
+    public void doesntReapplyDisallowedRemoteView() throws Exception {
+        mBuilder.setStyle(new Notification.MediaStyle());
+        RemoteViews mediaView = mBuilder.createContentView();
+        mBuilder.setStyle(new Notification.DecoratedCustomViewStyle());
+        mBuilder.setCustomContentView(new RemoteViews(getContext().getPackageName(),
+                R.layout.custom_view_dark));
+        RemoteViews decoratedMediaView = mBuilder.createContentView();
+        Assert.assertFalse("The decorated media style doesn't allow a view to be reapplied!",
+                NotificationInflater.canReapplyRemoteView(mediaView, decoratedMediaView));
+    }
+
     public static void runThenWaitForInflation(Runnable block,
             NotificationInflater inflater) throws Exception {
         runThenWaitForInflation(block, false /* expectingException */, inflater);
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
new file mode 100644
index 0000000..4051220
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.systemui.statusbar.phone;
+
+import static org.mockito.Mockito.mock;
+
+import android.content.Context;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.test.UiThreadTest;
+import android.view.ContextThemeWrapper;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import com.android.internal.widget.LockPatternUtils;
+import com.android.keyguard.ViewMediatorCallback;
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.keyguard.DismissCallbackRegistry;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class KeyguardBouncerTest extends SysuiTestCase {
+
+    @UiThreadTest
+    @Test
+    public void inflateDetached() {
+        final ViewGroup container = new FrameLayout(getContext());
+        final KeyguardBouncer bouncer = new KeyguardBouncer(getContext(),
+                mock(ViewMediatorCallback.class), mock(LockPatternUtils.class), container, mock(
+                DismissCallbackRegistry.class));
+
+        // Detached bouncer should still be able to be inflated
+        bouncer.inflateView();
+    }
+
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NearestTouchFrameTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NearestTouchFrameTest.java
index ed1491d3..500d620 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NearestTouchFrameTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NearestTouchFrameTest.java
@@ -71,6 +71,24 @@
     }
 
     @Test
+    public void testInvisibleViews() {
+        View left = mockViewAt(0, 0, 10, 10);
+        View right = mockViewAt(20, 0, 10, 10);
+        when(left.getVisibility()).thenReturn(View.INVISIBLE);
+
+        mNearestTouchFrame.addView(left);
+        mNearestTouchFrame.addView(right);
+        mNearestTouchFrame.onMeasure(0, 0);
+
+        MotionEvent ev = MotionEvent.obtain(0, 0, 0,
+                12 /* x */, 5 /* y */, 0);
+        mNearestTouchFrame.onTouchEvent(ev);
+        verify(left, never()).onTouchEvent(eq(ev));
+        verify(right, never()).onTouchEvent(eq(ev));
+        ev.recycle();
+    }
+
+    @Test
     public void testHorizontalSelection_Left() {
         View left = mockViewAt(0, 0, 10, 10);
         View right = mockViewAt(20, 0, 10, 10);
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 47ca3e0..4c982d0 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
@@ -28,22 +28,20 @@
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
 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.when;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.app.ActivityManager;
 import android.app.Notification;
 import android.app.trust.TrustManager;
+import android.content.Context;
 import android.hardware.fingerprint.FingerprintManager;
 import android.metrics.LogMaker;
+import android.os.Binder;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.IPowerManager;
@@ -55,25 +53,29 @@
 import android.service.notification.NotificationListenerService.RankingMap;
 import android.support.test.filters.SmallTest;
 import android.support.test.metricshelper.MetricsAsserts;
-import android.support.test.runner.AndroidJUnit4;
 import android.testing.AndroidTestingRunner;
+import android.testing.LayoutInflaterBuilder;
 import android.testing.TestableLooper;
 import android.testing.TestableLooper.MessageHandler;
 import android.testing.TestableLooper.RunWithLooper;
 import android.util.DisplayMetrics;
+import android.view.View;
 import android.view.ViewGroup.LayoutParams;
+import android.widget.FrameLayout;
 
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.logging.testing.FakeMetricsLogger;
 import com.android.internal.statusbar.IStatusBarService;
 import com.android.keyguard.KeyguardHostView.OnDismissAction;
+import com.android.keyguard.KeyguardStatusView;
 import com.android.systemui.ForegroundServiceController;
 import com.android.systemui.R;
 import com.android.systemui.statusbar.ForegroundServiceLifetimeExtender;
 import com.android.systemui.statusbar.NotificationLifetimeExtender;
 import com.android.systemui.statusbar.RemoteInputController;
 import com.android.systemui.SysuiTestCase;
+import com.android.systemui.assist.AssistManager;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 import com.android.systemui.recents.misc.SystemServicesProxy;
 import com.android.systemui.statusbar.ActivatableNotificationView;
@@ -82,7 +84,11 @@
 import com.android.systemui.statusbar.NotificationData;
 import com.android.systemui.statusbar.NotificationData.Entry;
 import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.policy.DateView;
+import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
+import com.android.systemui.statusbar.policy.KeyguardMonitor;
+import com.android.systemui.statusbar.policy.KeyguardMonitorImpl;
 import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
 
 import org.junit.Before;
@@ -91,6 +97,7 @@
 
 import java.io.ByteArrayOutputStream;
 import java.io.PrintWriter;
+
 import java.util.ArrayList;
 import java.util.Map;
 
@@ -125,12 +132,20 @@
 
     @Before
     public void setup() throws Exception {
+        mContext.setTheme(R.style.Theme_SystemUI_Light);
+        mDependency.injectMockDependency(AssistManager.class);
+        mDependency.injectMockDependency(DeviceProvisionedController.class);
+        mDependency.injectTestDependency(KeyguardMonitor.class, mock(KeyguardMonitorImpl.class));
+        CommandQueue commandQueue = mock(CommandQueue.class);
+        when(commandQueue.asBinder()).thenReturn(new Binder());
+        mContext.putComponent(CommandQueue.class, commandQueue);
         mContext.addMockSystemService(TrustManager.class, mock(TrustManager.class));
         mContext.addMockSystemService(FingerprintManager.class, mock(FingerprintManager.class));
         mStatusBarKeyguardViewManager = mock(StatusBarKeyguardViewManager.class);
         mUnlockMethodCache = mock(UnlockMethodCache.class);
         mKeyguardIndicationController = mock(KeyguardIndicationController.class);
         mStackScroller = mock(NotificationStackScrollLayout.class);
+        when(mStackScroller.generateLayoutParams(any())).thenReturn(new LayoutParams(0, 0));
         mMetricsLogger = new FakeMetricsLogger();
         mHeadsUpManager = mock(HeadsUpManager.class);
         mNotificationData = mock(NotificationData.class);
@@ -154,7 +169,8 @@
                 mKeyguardIndicationController, mStackScroller, mHeadsUpManager,
                 mNotificationData, mPowerManager, mSystemServicesProxy, mNotificationPanelView,
                 mBarService, mFGSExtender, mRemoteInputController, mForegroundServiceController);
-
+        mStatusBar.mContext = mContext;
+        mStatusBar.mComponents = mContext.getComponents();
         doAnswer(invocation -> {
             OnDismissAction onDismissAction = (OnDismissAction) invocation.getArguments()[0];
             onDismissAction.onDismiss();
@@ -432,6 +448,7 @@
         assertTrue(mStatusBar.shouldPeek(entry, sbn));
     }
 
+
     @Test
     public void testForegroundServiceNotificationKeptForFiveSeconds() throws Exception {
         RankingMap rm = mock(RankingMap.class);
@@ -553,6 +570,16 @@
         mStatusBar.dump(null, new PrintWriter(new ByteArrayOutputStream()), null);
     }
 
+    @Test
+    @RunWithLooper(setAsMainLooper = true)
+    public void testUpdateKeyguardState_DoesNotCrash() {
+        mStatusBar.mStatusBarWindow = mock(StatusBarWindowView.class);
+        mStatusBar.mState = StatusBarState.KEYGUARD;
+        mStatusBar.mDozeScrimController = mock(DozeScrimController.class);
+        mStatusBar.mNotificationIconAreaController = mock(NotificationIconAreaController.class);
+        mStatusBar.updateKeyguardState(false, false);
+    }
+
     static class TestableStatusBar extends StatusBar {
         public TestableStatusBar(StatusBarKeyguardViewManager man,
                 UnlockMethodCache unlock, KeyguardIndicationController key,
@@ -574,7 +601,9 @@
             mFGSExtender = fgsExtender;
             mRemoteInputController = ric;
             mForegroundServiceController = fsc;
+
             mWakefulnessLifecycle = createAwakeWakefulnessLifecycle();
+            mScrimController = mock(ScrimController.class);
         }
 
         private WakefulnessLifecycle createAwakeWakefulnessLifecycle() {
@@ -584,6 +613,10 @@
             return wakefulnessLifecycle;
         }
 
+        @Override
+        protected void updateTheme() {
+            // Do nothing for now, until we have more mocking and StatusBar is smaller.
+        }
 
         public void setBarStateForTest(int state) {
             mState = state;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java
new file mode 100644
index 0000000..dcd531d
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.systemui.statusbar.phone;
+
+import static junit.framework.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.support.test.filters.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper.RunWithLooper;
+
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+
+
+@RunWith(AndroidTestingRunner.class)
+@RunWithLooper(setAsMainLooper = true)
+@SmallTest
+public class SystemUIDialogTest extends SysuiTestCase {
+
+    private SystemUIDialog mDialog;
+
+    Context mContextSpy;
+
+    @Before
+    public void setup() {
+        mContextSpy = spy(mContext);
+        mDialog = new SystemUIDialog(mContextSpy);
+    }
+
+    @Test
+    public void testRegisterReceiver() {
+        final ArgumentCaptor<IntentFilter> intentFilterCaptor =
+                ArgumentCaptor.forClass(IntentFilter.class);
+
+        verify(mContextSpy).registerReceiverAsUser(any(), any(),
+                intentFilterCaptor.capture(), any(), any());
+
+        assertTrue(intentFilterCaptor.getValue().hasAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
+    }
+
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java
index 4cc8bca..4e7550b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java
@@ -137,4 +137,26 @@
         verify(callback).onBluetoothDevicesChanged();
         mainLooper.destroy();
     }
+
+    @Test
+    public void testNullAsync_DoesNotCrash() throws Exception {
+        CachedBluetoothDevice device = mock(CachedBluetoothDevice.class);
+        when(device.getMaxConnectionState()).thenReturn(BluetoothProfile.STATE_CONNECTED);
+        BluetoothController.Callback callback = mock(BluetoothController.Callback.class);
+        mBluetoothControllerImpl.addCallback(callback);
+
+        // Grab the main looper, we'll need it later.
+        TestableLooper mainLooper = new TestableLooper(Looper.getMainLooper());
+
+        try {
+            // Trigger the state getting.
+            assertEquals(BluetoothProfile.STATE_DISCONNECTED,
+                    mBluetoothControllerImpl.getMaxConnectionState(null));
+
+            mTestableLooper.processMessages(1);
+            mainLooper.processAllMessages();
+        } finally {
+            mainLooper.destroy();
+        }
+    }
 }
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 51bd7bc..e3558d4 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
@@ -161,12 +161,11 @@
     @Test
     public void testSignalCallback_setNoSims() {
         boolean noSims = true;
-        mHandler.setNoSims(noSims);
+        boolean simDetected = false;
+        mHandler.setNoSims(noSims, simDetected);
         waitForCallbacks();
 
-        ArgumentCaptor<Boolean> noSimsArg = ArgumentCaptor.forClass(Boolean.class);
-        Mockito.verify(mSignalCallback).setNoSims(noSimsArg.capture());
-        assertEquals(noSims, (boolean) noSimsArg.getValue());
+        Mockito.verify(mSignalCallback).setNoSims(eq(noSims), eq(simDetected));
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java
index a915cb2..b22a646 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java
@@ -27,7 +27,6 @@
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
-import android.util.Log;
 
 import com.android.systemui.Dependency;
 import com.android.systemui.SysuiTestCase;
@@ -145,7 +144,6 @@
     @Test
     @RunWithLooper
     public void testSortOrder() {
-        Log.d("TestTest", "Config " + mContext.getResources().getConfiguration().uiMode);
         Object def = new Object();
         Object uiMode = new Object();
         Object tuner = new Object();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/IconLoggerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/IconLoggerImplTest.java
new file mode 100644
index 0000000..ec994a1
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/IconLoggerImplTest.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.systemui.statusbar.policy;
+
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_NUM_STATUS_ICONS;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_STATUS_ICONS;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent
+        .NOTIFICATION_SINCE_CREATE_MILLIS;
+
+import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.Mockito.clearInvocations;
+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 static java.lang.Thread.sleep;
+
+import android.metrics.LogMaker;
+import android.support.test.filters.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.testing.TestableLooper.MessageHandler;
+import android.testing.TestableLooper.RunWithLooper;
+import android.util.Log;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatcher;
+
+@RunWith(AndroidTestingRunner.class)
+@RunWithLooper
+@SmallTest
+public class IconLoggerImplTest extends SysuiTestCase {
+
+    private MetricsLogger mMetricsLogger;
+    private IconLoggerImpl mIconLogger;
+    private TestableLooper mTestableLooper;
+    private MessageHandler mMessageHandler;
+
+    @Before
+    public void setup() {
+        IconLoggerImpl.MIN_LOG_INTERVAL = 5; // Low interval for testing
+        mMetricsLogger = mock(MetricsLogger.class);
+        mTestableLooper = TestableLooper.get(this);
+        mMessageHandler = mock(MessageHandler.class);
+        mTestableLooper.setMessageHandler(mMessageHandler);
+        String[] iconArray = new String[] {
+                "test_icon_1",
+                "test_icon_2",
+        };
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.array.config_statusBarIcons, iconArray);
+        mIconLogger = new IconLoggerImpl(mContext, mTestableLooper.getLooper(), mMetricsLogger);
+        when(mMessageHandler.onMessageHandled(any())).thenReturn(true);
+        clearInvocations(mMetricsLogger);
+    }
+
+    @Test
+    public void testIconShown() throws InterruptedException {
+        // Should only get one message, for the same icon shown twice.
+        mIconLogger.onIconShown("test_icon_2");
+        mIconLogger.onIconShown("test_icon_2");
+
+        // There should be some delay before execute.
+        mTestableLooper.processAllMessages();
+        verify(mMessageHandler, never()).onMessageHandled(any());
+
+        sleep(10);
+        mTestableLooper.processAllMessages();
+        verify(mMessageHandler, times(1)).onMessageHandled(any());
+    }
+
+    @Test
+    public void testIconHidden() throws InterruptedException {
+        // Add the icon so that it can be removed.
+        mIconLogger.onIconShown("test_icon_2");
+        sleep(10);
+        mTestableLooper.processAllMessages();
+        clearInvocations(mMessageHandler);
+
+        // Should only get one message, for the same icon shown twice.
+        mIconLogger.onIconHidden("test_icon_2");
+        mIconLogger.onIconHidden("test_icon_2");
+
+        // There should be some delay before execute.
+        mTestableLooper.processAllMessages();
+        verify(mMessageHandler, never()).onMessageHandled(any());
+
+        sleep(10);
+        mTestableLooper.processAllMessages();
+        verify(mMessageHandler, times(1)).onMessageHandled(any());
+    }
+
+    @Test
+    public void testLog() throws InterruptedException {
+        mIconLogger.onIconShown("test_icon_2");
+        sleep(10);
+        mTestableLooper.processAllMessages();
+
+        verify(mMetricsLogger).write(argThat(maker -> {
+            if (IconLoggerImpl.MIN_LOG_INTERVAL >
+                    (long) maker.getTaggedData(NOTIFICATION_SINCE_CREATE_MILLIS)) {
+                Log.e("IconLoggerImplTest", "Invalid latency "
+                        + maker.getTaggedData(NOTIFICATION_SINCE_CREATE_MILLIS));
+                return false;
+            }
+            if (1 != (int) maker.getTaggedData(FIELD_NUM_STATUS_ICONS)) {
+                Log.e("IconLoggerImplTest", "Invalid icon count "
+                        + maker.getTaggedData(FIELD_NUM_STATUS_ICONS));
+                return false;
+            }
+            return true;
+        }));
+    }
+
+    @Test
+    public void testBitField() throws InterruptedException {
+        mIconLogger.onIconShown("test_icon_2");
+        sleep(10);
+        mTestableLooper.processAllMessages();
+
+        verify(mMetricsLogger).write(argThat(maker -> {
+            if ((1 << 1) != (int) maker.getTaggedData(FIELD_STATUS_ICONS)) {
+                Log.e("IconLoggerImplTest", "Invalid bitfield " + Integer.toHexString(
+                        (Integer) maker.getTaggedData(FIELD_NUM_STATUS_ICONS)));
+                return false;
+            }
+            return true;
+        }));
+
+        mIconLogger.onIconShown("test_icon_1");
+        sleep(10);
+        mTestableLooper.processAllMessages();
+
+        verify(mMetricsLogger).write(argThat(maker -> {
+            if ((1 << 1 | 1 << 0) != (int) maker.getTaggedData(FIELD_STATUS_ICONS)) {
+                Log.e("IconLoggerImplTest", "Invalid bitfield " + Integer.toHexString(
+                        (Integer) maker.getTaggedData(FIELD_NUM_STATUS_ICONS)));
+                return false;
+            }
+            return true;
+        }));
+
+        mIconLogger.onIconHidden("test_icon_2");
+        sleep(10);
+        mTestableLooper.processAllMessages();
+
+        verify(mMetricsLogger).write(argThat(maker -> {
+            if ((1 << 0) != (int) maker.getTaggedData(FIELD_STATUS_ICONS)) {
+                Log.e("IconLoggerImplTest", "Invalid bitfield " + Integer.toHexString(
+                        (Integer) maker.getTaggedData(FIELD_STATUS_ICONS)));
+                return false;
+            }
+            return 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 a8319a8..d14b23e 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
@@ -21,6 +21,8 @@
 import android.net.NetworkCapabilities;
 import android.net.wifi.WifiManager;
 import android.os.Looper;
+import android.provider.Settings;
+import android.provider.Settings.Global;
 import android.telephony.PhoneStateListener;
 import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
@@ -44,8 +46,6 @@
 import org.junit.runner.Description;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mockito;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -105,6 +105,7 @@
 
     @Before
     public void setUp() throws Exception {
+        Settings.Global.putInt(mContext.getContentResolver(), Global.AIRPLANE_MODE_ON, 0);
         mMockWm = mock(WifiManager.class);
         mMockTm = mock(TelephonyManager.class);
         mMockSm = mock(SubscriptionManager.class);
@@ -289,10 +290,8 @@
     }
 
     protected void verifyHasNoSims(boolean hasNoSimsVisible) {
-        ArgumentCaptor<Boolean> hasNoSimsArg = ArgumentCaptor.forClass(Boolean.class);
-
-        Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setNoSims(hasNoSimsArg.capture());
-        assertEquals("No sims", hasNoSimsVisible, (boolean) hasNoSimsArg.getValue());
+        Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setNoSims(
+                eq(hasNoSimsVisible), eq(false));
     }
 
     protected void verifyLastQsMobileDataIndicators(boolean visible, int icon, int typeIcon,
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 9055022..173cc4c 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
@@ -202,6 +202,14 @@
     }
 
     @Test
+    public void testRoamingNoService_DoesNotCrash() {
+        setupDefaultSignal();
+        setCdma();
+        mServiceState = null;
+        updateServiceState();
+    }
+
+    @Test
     @Ignore("Flaky")
     public void testQsSignalStrength() {
         for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayoutTest.java
new file mode 100644
index 0000000..1c010b6
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayoutTest.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.systemui.statusbar.stack;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.annotation.UiThread;
+import android.support.test.annotation.UiThreadTest;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.view.NotificationHeaderView;
+import android.view.View;
+
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.NotificationTestHelper;
+import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.phone.ScrimController;
+import com.android.systemui.statusbar.phone.StatusBar;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class NotificationStackScrollLayoutTest extends SysuiTestCase {
+
+    private NotificationStackScrollLayout mStackScroller;
+    private StatusBar mBar;
+
+    @Before
+    @UiThreadTest
+    public void setUp() throws Exception {
+        mStackScroller = new NotificationStackScrollLayout(getContext());
+        mBar = mock(StatusBar.class);
+        mStackScroller.setStatusBar(mBar);
+        mStackScroller.setScrimController(mock(ScrimController.class));
+    }
+
+    @Test
+    public void testNotDimmedOnKeyguard() {
+        when(mBar.getBarState()).thenReturn(StatusBarState.SHADE);
+        mStackScroller.setDimmed(true /* dimmed */, false /* animate */);
+        mStackScroller.setDimmed(true /* dimmed */, true /* animate */);
+        Assert.assertFalse(mStackScroller.isDimmed());
+    }
+
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java
index f67296d..04bdc04 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java
@@ -56,7 +56,8 @@
                 NotificationChannels.ALERTS,
                 NotificationChannels.SCREENSHOTS,
                 NotificationChannels.STORAGE,
-                NotificationChannels.GENERAL
+                NotificationChannels.GENERAL,
+                NotificationChannels.BATTERY
         ));
         NotificationChannels.createAll(mContext);
         ArgumentCaptor<List> captor = ArgumentCaptor.forClass(List.class);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBluetoothController.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBluetoothController.java
index 9ec096a..44c4983 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBluetoothController.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBluetoothController.java
@@ -93,4 +93,9 @@
     public int getBondState(CachedBluetoothDevice device) {
         return 0;
     }
+
+    @Override
+    public CachedBluetoothDevice getLastDevice() {
+        return null;
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java
index 586a424..ab16e3b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java
@@ -81,6 +81,11 @@
         }
 
         @Override
+        public ExtensionBuilder<T> withFeature(String feature, Supplier<T> def) {
+            return null;
+        }
+
+        @Override
         public Extension build() {
             return new FakeExtension(mAllocation);
         }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java
index d1b1c5b..0a83a89 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java
@@ -14,6 +14,7 @@
 
 package com.android.systemui.utils.leaks;
 
+import android.content.Context;
 import android.testing.LeakCheck;
 
 import com.android.systemui.plugins.Plugin;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/os/FakeHandler.java b/packages/SystemUI/tests/src/com/android/systemui/utils/os/FakeHandler.java
new file mode 100644
index 0000000..5a7d4b5
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/utils/os/FakeHandler.java
@@ -0,0 +1,71 @@
+/*
+ * 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.utils.os;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+
+import java.util.ArrayList;
+
+/**
+ * A handler that allows control over when to dispatch messages and callbacks.
+ *
+ * WARNING: Because most Handler methods are final, the only thing this handler can intercept
+ *          are sending messages and posting runnables, but *NOT* removing messages nor runnables.
+ *          It also *CANNOT* intercept messages posted to the front of queue.
+ */
+public class FakeHandler extends Handler {
+
+    private Mode mMode = Mode.IMMEDIATE;
+    private ArrayList<Message> mQueuedMessages = new ArrayList<>();
+
+    public FakeHandler(Looper looper) {
+        super(looper);
+    }
+
+    @Override
+    public boolean sendMessageAtTime(Message msg, long uptimeMillis) {
+        mQueuedMessages.add(msg);
+        if (mMode == Mode.IMMEDIATE) {
+            dispatchQueuedMessages();
+        }
+        return true;
+    }
+
+    public void setMode(Mode mode) {
+        mMode = mode;
+    }
+
+    /**
+     * Dispatch any messages that have been queued on the calling thread.
+     */
+    public void dispatchQueuedMessages() {
+        ArrayList<Message> messages = new ArrayList<>(mQueuedMessages);
+        mQueuedMessages.clear();
+        for (Message msg : messages) {
+            dispatchMessage(msg);
+        }
+    }
+
+    public enum Mode {
+        /** Messages are dispatched immediately on the calling thread. */
+        IMMEDIATE,
+        /** Messages are queued until {@link #dispatchQueuedMessages()} is called. */
+        QUEUEING,
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/UtilTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/UtilTest.java
new file mode 100644
index 0000000..6b20a1e
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/volume/UtilTest.java
@@ -0,0 +1,39 @@
+/*
+ * 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.volume;
+
+import android.media.MediaMetadata;
+import android.support.test.filters.SmallTest;
+
+import com.android.systemui.SysuiTestCase;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+@SmallTest
+public class UtilTest extends SysuiTestCase {
+
+    @Test
+    public void testMediaMetadataToString_null() {
+        Assert.assertEquals(null, Util.mediaMetadataToString(null));
+    }
+
+    @Test
+    public void testMediaMetadataToString_notNull() {
+        Assert.assertNotNull(Util.mediaMetadataToString(new MediaMetadata.Builder().build()));
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/ZenModePanelTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/ZenModePanelTest.java
new file mode 100644
index 0000000..0fdbfd1
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/volume/ZenModePanelTest.java
@@ -0,0 +1,217 @@
+/**
+ * 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.volume;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.net.Uri;
+import android.provider.Settings;
+import android.service.notification.Condition;
+import android.service.notification.ZenModeConfig;
+import android.support.test.annotation.UiThreadTest;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.view.LayoutInflater;
+
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.policy.ZenModeController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class ZenModePanelTest extends SysuiTestCase {
+
+    ZenModePanel mPanel;
+    ZenModeController mController;
+    Uri mForeverId;
+
+    @Before
+    public void setup() throws Exception {
+        final LayoutInflater layoutInflater = LayoutInflater.from(mContext);
+        mPanel = (ZenModePanel) layoutInflater.inflate(com.android.systemui.R.layout.zen_mode_panel,
+                null);
+        mController = mock(ZenModeController.class);
+        mForeverId = Condition.newId(mContext).appendPath("forever").build();
+
+        mPanel.init(mController);
+    }
+
+    private void assertProperConditionTagTypes(boolean hasAlarm) {
+        final int N = mPanel.getVisibleConditions();
+        assertEquals(hasAlarm ? 3 : 2, N);
+
+        assertEquals(mForeverId, mPanel.getConditionTagAt(0).condition.id);
+        assertTrue(ZenModeConfig.isValidCountdownConditionId(
+                mPanel.getConditionTagAt(1).condition.id));
+        assertFalse(ZenModeConfig.isValidCountdownToAlarmConditionId(
+                mPanel.getConditionTagAt(1).condition.id));
+        if (hasAlarm) {
+            assertTrue(ZenModeConfig.isValidCountdownToAlarmConditionId(
+                    mPanel.getConditionTagAt(2).condition.id));
+        }
+    }
+
+    @Test
+    public void testHandleUpdateConditions_foreverSelected_alarmExists() {
+         Condition forever = new Condition(mForeverId, "", Condition.STATE_TRUE);
+
+        when(mController.getNextAlarm()).thenReturn(System.currentTimeMillis() + 1000);
+
+        mPanel.handleUpdateConditions(forever);
+        assertProperConditionTagTypes(true);
+        assertTrue(mPanel.getConditionTagAt(0).rb.isChecked());
+    }
+
+    @Test
+    public void testHandleUpdateConditions_foreverSelected_noAlarm() {
+        Uri foreverId = Condition.newId(mContext).appendPath("forever").build();
+        Condition forever = new Condition(foreverId, "", Condition.STATE_TRUE);
+
+        when(mController.getNextAlarm()).thenReturn((long) 0);
+
+        mPanel.handleUpdateConditions(forever);
+        assertProperConditionTagTypes(false);
+        assertEquals(foreverId, mPanel.getConditionTagAt(0).condition.id);
+    }
+
+    @Test
+    public void testHandleUpdateConditions_countdownSelected_alarmExists() {
+        Uri foreverId = Condition.newId(mContext).appendPath("forever").build();
+
+        Condition countdown = new Condition(ZenModeConfig.toCountdownConditionId(
+                System.currentTimeMillis() + (3 * 60 * 60 * 1000) + 4000, false),
+                "", Condition.STATE_TRUE);
+
+        when(mController.getNextAlarm()).thenReturn(System.currentTimeMillis() + 1000);
+
+        mPanel.handleUpdateConditions(countdown);
+        assertProperConditionTagTypes(true);
+        assertTrue(mPanel.getConditionTagAt(1).rb.isChecked());
+    }
+
+    @Test
+    public void testHandleUpdateConditions_countdownSelected_noAlarm() {
+        Uri foreverId = Condition.newId(mContext).appendPath("forever").build();
+
+        Condition countdown = new Condition(ZenModeConfig.toCountdownConditionId(
+                System.currentTimeMillis() + (3 * 60 * 60 * 1000) + 4000, false),
+                "", Condition.STATE_TRUE);
+
+        when(mController.getNextAlarm()).thenReturn((long) 0);
+
+        mPanel.handleUpdateConditions(countdown);
+        assertProperConditionTagTypes(false);
+        assertTrue(mPanel.getConditionTagAt(1).rb.isChecked());
+    }
+
+    @Test
+    public void testHandleUpdateConditions_nextAlarmSelected() {
+        Uri foreverId = Condition.newId(mContext).appendPath("forever").build();
+
+        Condition alarm = new Condition(ZenModeConfig.toCountdownConditionId(
+                System.currentTimeMillis() + 1000, true),
+                "", Condition.STATE_TRUE);
+        when(mController.getNextAlarm()).thenReturn(System.currentTimeMillis() + 9000);
+
+        mPanel.handleUpdateConditions(alarm);
+
+        assertProperConditionTagTypes(true);
+        assertEquals(alarm, mPanel.getConditionTagAt(2).condition);
+        assertTrue(mPanel.getConditionTagAt(2).rb.isChecked());
+    }
+
+    @Test
+    public void testHandleUpdateConditions_foreverSelected_alarmConditionDoesNotChangeIfAttached() {
+        Uri foreverId = Condition.newId(mContext).appendPath("forever").build();
+        Condition forever = new Condition(foreverId, "", Condition.STATE_TRUE);
+
+        Condition alarm = new Condition(ZenModeConfig.toCountdownConditionId(
+                System.currentTimeMillis() + 9000, true),
+                "", Condition.STATE_TRUE);
+        when(mController.getNextAlarm()).thenReturn(System.currentTimeMillis() + 1000);
+
+        mPanel.handleUpdateConditions(alarm);
+        mPanel.setAttached(true);
+        mPanel.handleUpdateConditions(forever);
+
+        assertProperConditionTagTypes(true);
+        assertEquals(alarm, mPanel.getConditionTagAt(2).condition);
+        assertTrue(mPanel.getConditionTagAt(0).rb.isChecked());
+    }
+
+    @Test
+    public void testHandleUpdateConditions_foreverSelected_timeConditionDoesNotChangeIfAttached() {
+        Uri foreverId = Condition.newId(mContext).appendPath("forever").build();
+        Condition forever = new Condition(foreverId, "", Condition.STATE_TRUE);
+
+        Condition countdown = new Condition(ZenModeConfig.toCountdownConditionId(
+                System.currentTimeMillis() + (3 * 60 * 60 * 1000) + 4000, false),
+                "", Condition.STATE_TRUE);
+        when(mController.getNextAlarm()).thenReturn((long) 0);
+
+        mPanel.handleUpdateConditions(countdown);
+        mPanel.setAttached(true);
+        mPanel.handleUpdateConditions(forever);
+
+        assertProperConditionTagTypes(false);
+        assertEquals(countdown, mPanel.getConditionTagAt(1).condition);
+        assertTrue(mPanel.getConditionTagAt(0).rb.isChecked());
+    }
+
+    @Test
+    @UiThreadTest
+    public void testHandleUpdateManualRule_stillSelectedAfterModeChange() {
+        ZenModeConfig.ZenRule rule = new ZenModeConfig.ZenRule();
+
+        Condition alarm = new Condition(ZenModeConfig.toCountdownConditionId(
+                System.currentTimeMillis() + 1000, true),
+                "", Condition.STATE_TRUE);
+
+        rule.condition = alarm;
+        rule.conditionId = alarm.id;
+        rule.enabled = true;
+        rule.zenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
+
+        mPanel.handleUpdateManualRule(rule);
+
+        assertProperConditionTagTypes(true);
+        assertEquals(alarm, mPanel.getConditionTagAt(2).condition);
+        assertTrue(mPanel.getConditionTagAt(2).rb.isChecked());
+
+        assertEquals(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS,
+                mPanel.getSelectedZen(Settings.Global.ZEN_MODE_OFF));
+
+        rule.zenMode = Settings.Global.ZEN_MODE_NO_INTERRUPTIONS;
+
+        mPanel.handleUpdateManualRule(rule);
+
+        assertProperConditionTagTypes(true);
+        assertEquals(alarm, mPanel.getConditionTagAt(2).condition);
+        assertTrue(mPanel.getConditionTagAt(2).rb.isChecked());
+
+        assertEquals(Settings.Global.ZEN_MODE_NO_INTERRUPTIONS,
+                mPanel.getSelectedZen(Settings.Global.ZEN_MODE_OFF));
+    }
+}
diff --git a/packages/VpnDialogs/res/values-en-rCA/strings.xml b/packages/VpnDialogs/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..2c93c78
--- /dev/null
+++ b/packages/VpnDialogs/res/values-en-rCA/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="3183836924226407828">"Connection request"</string>
+    <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> wants to set up a VPN connection that allows it to monitor network traffic. Only accept if you trust the source. &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt; appears at the top of your screen when VPN is active."</string>
+    <string name="legacy_title" msgid="192936250066580964">"VPN is connected"</string>
+    <string name="configure" msgid="4905518375574791375">"Configure"</string>
+    <string name="disconnect" msgid="971412338304200056">"Disconnect"</string>
+    <string name="session" msgid="6470628549473641030">"Session:"</string>
+    <string name="duration" msgid="3584782459928719435">"Duration:"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"Sent:"</string>
+    <string name="data_received" msgid="4062776929376067820">"Received:"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes / <xliff:g id="NUMBER_1">%2$s</xliff:g> packets"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-en-rXC/strings.xml b/packages/VpnDialogs/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..640a41d
--- /dev/null
+++ b/packages/VpnDialogs/res/values-en-rXC/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="3183836924226407828">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎Connection request‎‏‎‎‏‎"</string>
+    <string name="warning" msgid="809658604548412033">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎ wants to set up a VPN connection that allows it to monitor network traffic. Only accept if you trust the source. &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt; appears at the top of your screen when VPN is active.‎‏‎‎‏‎"</string>
+    <string name="legacy_title" msgid="192936250066580964">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎VPN is connected‎‏‎‎‏‎"</string>
+    <string name="configure" msgid="4905518375574791375">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎Configure‎‏‎‎‏‎"</string>
+    <string name="disconnect" msgid="971412338304200056">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‎‎Disconnect‎‏‎‎‏‎"</string>
+    <string name="session" msgid="6470628549473641030">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎Session:‎‏‎‎‏‎"</string>
+    <string name="duration" msgid="3584782459928719435">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎‏‎‏‏‎Duration:‎‏‎‎‏‎"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‎‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‏‎Sent:‎‏‎‎‏‎"</string>
+    <string name="data_received" msgid="4062776929376067820">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‎‎Received:‎‏‎‎‏‎"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$s</xliff:g>‎‏‎‎‏‏‏‎ bytes / ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$s</xliff:g>‎‏‎‎‏‏‏‎ packets‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-hi/strings.xml b/packages/VpnDialogs/res/values-hi/strings.xml
index 15f69c6..8490fc8 100644
--- a/packages/VpnDialogs/res/values-hi/strings.xml
+++ b/packages/VpnDialogs/res/values-hi/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="prompt" msgid="3183836924226407828">"कनेक्शन अनुरोध"</string>
-    <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> VPN कनेक्‍शन सेट करना चाहता है जो उसे नेटवर्क ट्रैफ़िक मॉनीटर करने देता है. केवल तभी स्‍वीकार करें, जबकि आप स्रोत पर विश्वास करते हों. VPN सक्रिय होने पर आपकी स्‍क्रीन पर ऊपर &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt; दिखाई देता है."</string>
+    <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> VPN कनेक्‍शन सेट अप करना चाहता है, जिससे वह नेटवर्क ट्रैफ़िक पर नज़र रख पाएगा. इसकी मंज़ूरी तभी दें जब आपको आप इस पर भरोसा हो. VPN चालू होने पर आपकी स्क्रीन के सबसे ऊपर &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt; दिखाई देता है."</string>
     <string name="legacy_title" msgid="192936250066580964">"VPN कनेक्‍ट है"</string>
     <string name="configure" msgid="4905518375574791375">"कॉन्फ़िगर करें"</string>
     <string name="disconnect" msgid="971412338304200056">"डिस्‍कनेक्‍ट करें"</string>
diff --git a/packages/VpnDialogs/res/values-pa/strings.xml b/packages/VpnDialogs/res/values-pa/strings.xml
index 8e7c73d..0f8d9f4 100644
--- a/packages/VpnDialogs/res/values-pa/strings.xml
+++ b/packages/VpnDialogs/res/values-pa/strings.xml
@@ -19,7 +19,7 @@
     <string name="prompt" msgid="3183836924226407828">"ਕਨੈਕਸ਼ਨ ਬੇਨਤੀ"</string>
     <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> ਇੱਕ VPN ਕਨੈਕਸ਼ਨ ਸੈਟ ਅਪ ਕਰਨਾ ਚਾਹੁੰਦਾ ਹੈ ਜੋ ਇਸਨੂੰ ਨੈੱਟਵਰਕ ਟ੍ਰੈਫਿਕ ਦਾ ਨਿਰੀਖਣ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਕੇਵਲ ਤਾਂ ਹੀ ਸਵੀਕਾਰ ਕਰੋ ਜੇਕਰ ਤੁਸੀਂ ਸਰੋਤ ਤੇ ਭਰੋਸਾ ਕਰਦੇ ਹੋ। &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt; ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਦੇ ਟੌਪ ਤੇ ਪ੍ਰਗਟ ਹੁੰਦਾ ਹੈ ਜਦੋਂ VPN ਸਕਿਰਿਆ ਹੁੰਦਾ ਹੈ।"</string>
     <string name="legacy_title" msgid="192936250066580964">"VPN ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ ਹੈ"</string>
-    <string name="configure" msgid="4905518375574791375">"ਕੌਂਫਿਗਰ ਕਰੋ"</string>
+    <string name="configure" msgid="4905518375574791375">"ਰੂਪ-ਰੇਖਾ ਬਦਲੋ"</string>
     <string name="disconnect" msgid="971412338304200056">"ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
     <string name="session" msgid="6470628549473641030">"ਸੈਸ਼ਨ:"</string>
     <string name="duration" msgid="3584782459928719435">"ਮਿਆਦ:"</string>
diff --git a/packages/VpnDialogs/res/values-pl/strings.xml b/packages/VpnDialogs/res/values-pl/strings.xml
index a8c08d51..4b46840 100644
--- a/packages/VpnDialogs/res/values-pl/strings.xml
+++ b/packages/VpnDialogs/res/values-pl/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="prompt" msgid="3183836924226407828">"Żądanie połączenia"</string>
-    <string name="warning" msgid="809658604548412033">"Aplikacja <xliff:g id="APP">%s</xliff:g> chce utworzyć połączenie VPN, które pozwoli jej na monitorowanie ruchu sieciowego. Zaakceptuj, tylko jeśli masz zaufanie do źródła. Gdy sieć VPN jest aktywna, u góry ekranu pojawia się &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt;."</string>
+    <string name="warning" msgid="809658604548412033">"Aplikacja <xliff:g id="APP">%s</xliff:g> chce utworzyć połączenie VPN, które pozwoli jej na monitorowanie ruchu sieciowego. Zaakceptuj, tylko jeśli masz zaufanie do źródła. &lt;br /&gt; &lt;br /&gt;Gdy sieć VPN jest aktywna, u góry ekranu pojawia się &lt;img src=vpn_icon /&gt;."</string>
     <string name="legacy_title" msgid="192936250066580964">"Połączono z VPN"</string>
     <string name="configure" msgid="4905518375574791375">"Konfiguruj"</string>
     <string name="disconnect" msgid="971412338304200056">"Rozłącz"</string>
diff --git a/packages/VpnDialogs/res/values-ru/strings.xml b/packages/VpnDialogs/res/values-ru/strings.xml
index 0e89d8e..10f5b6c 100644
--- a/packages/VpnDialogs/res/values-ru/strings.xml
+++ b/packages/VpnDialogs/res/values-ru/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="prompt" msgid="3183836924226407828">"Запрос на подключение"</string>
-    <string name="warning" msgid="809658604548412033">"Приложение \"<xliff:g id="APP">%s</xliff:g>\" пытается подключиться к сети VPN, чтобы отслеживать трафик. Этот запрос следует принимать, только если вы доверяете источнику.<br/><br/>Когда подключение VPN активно, в верхней части экрана появляется значок &lt;img src=vpn_icon /&gt;."</string>
+    <string name="warning" msgid="809658604548412033">"Приложение \"<xliff:g id="APP">%s</xliff:g>\" пытается подключиться к сети VPN, чтобы отслеживать трафик. Этот запрос следует принимать, только если вы доверяете источнику. &lt;br /&gt; &lt;br /&gt;Когда подключение VPN активно, в верхней части экрана появляется значок &lt;img src=vpn_icon /&gt;."</string>
     <string name="legacy_title" msgid="192936250066580964">"VPN-подключение установлено"</string>
     <string name="configure" msgid="4905518375574791375">"Настроить"</string>
     <string name="disconnect" msgid="971412338304200056">"Разъединить"</string>
diff --git a/packages/VpnDialogs/res/values-ta/strings.xml b/packages/VpnDialogs/res/values-ta/strings.xml
index f03d3e4..3f099eb 100644
--- a/packages/VpnDialogs/res/values-ta/strings.xml
+++ b/packages/VpnDialogs/res/values-ta/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="prompt" msgid="3183836924226407828">"இணைப்புக் கோரிக்கை"</string>
-    <string name="warning" msgid="809658604548412033">"VPN இணைப்பை அமைக்க <xliff:g id="APP">%s</xliff:g> விழைகிறது அதன்மூலம் இது நெட்வொர்க் ட்ராஃபிக்கைக் கண்காணிக்கும் அனுமதியைப் பெறும். நம்பகமான மூலத்தை மட்டுமே ஏற்கவும். VPN இயக்கத்தில் உள்ளபோது திரையில் மேல் பகுதியில் &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt; தோன்றும்."</string>
+    <string name="warning" msgid="809658604548412033">"VPN இணைப்பை அமைக்க <xliff:g id="APP">%s</xliff:g> விழைகிறது அதன்மூலம் இது நெட்வொர்க் ட்ராஃபிக்கைக் கண்காணிக்கும் அனுமதியைப் பெறும். நம்பகமான மூலத்தை மட்டுமே ஏற்கவும். &lt;br /&gt; &lt;br /&gt; VPN இயக்கத்தில் உள்ளபோது திரையில் மேல் பகுதியில் &lt;img src=vpn_icon /&gt; தோன்றும்."</string>
     <string name="legacy_title" msgid="192936250066580964">"VPN இணைக்கப்பட்டது"</string>
     <string name="configure" msgid="4905518375574791375">"உள்ளமை"</string>
     <string name="disconnect" msgid="971412338304200056">"தொடர்பைத் துண்டி"</string>
diff --git a/packages/VpnDialogs/res/values-vi/strings.xml b/packages/VpnDialogs/res/values-vi/strings.xml
index c7df53f..6663636 100644
--- a/packages/VpnDialogs/res/values-vi/strings.xml
+++ b/packages/VpnDialogs/res/values-vi/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="prompt" msgid="3183836924226407828">"Yêu cầu kết nối"</string>
-    <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> muốn thiết lập kết nối VPN cho phép ứng dụng giám sát lưu lượng truy cập mạng. Chỉ chấp nhận nếu bạn tin tưởng nguồn. &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt; xuất hiện ở đầu màn hình của bạn khi VPN đang hoạt động."</string>
+    <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> muốn thiết lập kết nối VPN cho phép ứng dụng giám sát lưu lượng truy cập mạng. Chỉ chấp nhận nếu bạn tin tưởng nguồn. Biểu tượng &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt; xuất hiện ở đầu màn hình của bạn khi VPN đang hoạt động."</string>
     <string name="legacy_title" msgid="192936250066580964">"VPN được kết nối"</string>
     <string name="configure" msgid="4905518375574791375">"Định cấu hình"</string>
     <string name="disconnect" msgid="971412338304200056">"Ngắt kết nối"</string>
diff --git a/packages/VpnDialogs/res/values-zh-rCN/strings.xml b/packages/VpnDialogs/res/values-zh-rCN/strings.xml
index cdea95d6..62d8438 100644
--- a/packages/VpnDialogs/res/values-zh-rCN/strings.xml
+++ b/packages/VpnDialogs/res/values-zh-rCN/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="prompt" msgid="3183836924226407828">"网络连接请求"</string>
-    <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g>想要设置一个VPN连接(可被用于监控网络流量)。请只在您信任该来源的情况下才接受此请求。在VPN处于活动状态时,您的屏幕顶部会显示 &lt;img src=vpn_icon /&gt; 图标。"</string>
+    <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g>想要设置一个 VPN 连接,以允许其监控网络流量。除非您信任该来源,否则请勿接受此请求。启用 VPN 时,您的屏幕顶部会显示 &lt;img src=vpn_icon /&gt; 图标。"</string>
     <string name="legacy_title" msgid="192936250066580964">"已连接VPN"</string>
     <string name="configure" msgid="4905518375574791375">"配置"</string>
     <string name="disconnect" msgid="971412338304200056">"断开连接"</string>
diff --git a/packages/WallpaperCropper/Android.mk b/packages/WallpaperCropper/Android.mk
index 09b41fd..0254673 100644
--- a/packages/WallpaperCropper/Android.mk
+++ b/packages/WallpaperCropper/Android.mk
@@ -6,7 +6,6 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_JAVA_LIBRARIES := telephony-common
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4
 
 LOCAL_PACKAGE_NAME := WallpaperCropper
 LOCAL_CERTIFICATE := platform
diff --git a/packages/WallpaperCropper/src/com/android/photos/views/TiledImageRenderer.java b/packages/WallpaperCropper/src/com/android/photos/views/TiledImageRenderer.java
index c4e493b..9501073 100644
--- a/packages/WallpaperCropper/src/com/android/photos/views/TiledImageRenderer.java
+++ b/packages/WallpaperCropper/src/com/android/photos/views/TiledImageRenderer.java
@@ -20,7 +20,7 @@
 import android.graphics.Bitmap;
 import android.graphics.Rect;
 import android.graphics.RectF;
-import android.support.v4.util.LongSparseArray;
+import android.util.LongSparseArray;
 import android.util.DisplayMetrics;
 import android.util.Log;
 import android.util.Pools.Pool;
diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/color/qs_detail_progress_track.xml b/packages/overlays/SysuiDarkThemeOverlay/res/color/qs_detail_progress_track.xml
new file mode 100644
index 0000000..c56382e
--- /dev/null
+++ b/packages/overlays/SysuiDarkThemeOverlay/res/color/qs_detail_progress_track.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <!-- I really don't want to define this, but the View that uses this asset uses both the
+         light and dark accent colors. -->
+    <item android:alpha="0.6" android:drawable="@*android:color/accent_device_default_light" />
+</selector>
diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values/styles.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values/styles.xml
index 0c1b0ef..ddac106 100644
--- a/packages/overlays/SysuiDarkThemeOverlay/res/values/styles.xml
+++ b/packages/overlays/SysuiDarkThemeOverlay/res/values/styles.xml
@@ -6,6 +6,6 @@
         <item name="android:colorSecondary">@*android:color/secondary_device_default_settings</item>
         <item name="android:colorAccent">@*android:color/accent_device_default_dark</item>
         <item name="android:colorControlNormal">?android:attr/textColorPrimary</item>
-        <item name="android:colorBackgroundFloating">#000</item>
+        <item name="android:colorBackgroundFloating">@*android:color/material_grey_900</item>
     </style>
 </resources>
\ No newline at end of file
diff --git a/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp b/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp
index 990d770..846ff25 100644
--- a/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp
+++ b/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp
@@ -21,7 +21,7 @@
 #include "android_runtime/AndroidRuntime.h"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 #include "proxy_resolver_v8.h"
 
diff --git a/preloaded-classes b/preloaded-classes
deleted file mode 100644
index 9612231..0000000
--- a/preloaded-classes
+++ /dev/null
@@ -1,4595 +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.
-#
-#
-#
-# Preloaded-classes filter file for phones.
-#
-# Classes in this file will be allocated into the boot image, and forcibly initialized in
-# the zygote during initialization. This is a trade-off, using virtual address space to share
-# common heap between apps.
-#
-# This file has been derived for mainline phone (and tablet) usage.
-#
-[B
-[C
-[D
-[F
-[I
-[J
-[Landroid.accounts.Account;
-[Landroid.animation.Animator;
-[Landroid.animation.Keyframe$FloatKeyframe;
-[Landroid.animation.Keyframe$IntKeyframe;
-[Landroid.animation.PropertyValuesHolder;
-[Landroid.app.LoaderManagerImpl;
-[Landroid.app.Notification$Action;
-[Landroid.app.NotificationChannel;
-[Landroid.app.RemoteInput;
-[Landroid.app.job.JobInfo$TriggerContentUri;
-[Landroid.bluetooth.BluetoothDevice;
-[Landroid.content.ContentProviderResult;
-[Landroid.content.ContentValues;
-[Landroid.content.Intent;
-[Landroid.content.UndoOwner;
-[Landroid.content.pm.ActivityInfo;
-[Landroid.content.pm.ConfigurationInfo;
-[Landroid.content.pm.FeatureGroupInfo;
-[Landroid.content.pm.FeatureInfo;
-[Landroid.content.pm.InstrumentationInfo;
-[Landroid.content.pm.PathPermission;
-[Landroid.content.pm.PermissionInfo;
-[Landroid.content.pm.ProviderInfo;
-[Landroid.content.pm.ServiceInfo;
-[Landroid.content.pm.Signature;
-[Landroid.content.res.Configuration;
-[Landroid.content.res.StringBlock;
-[Landroid.content.res.XmlBlock;
-[Landroid.database.CursorWindow;
-[Landroid.database.sqlite.SQLiteConnection$Operation;
-[Landroid.database.sqlite.SQLiteConnectionPool$AcquiredConnectionStatus;
-[Landroid.graphics.Bitmap$CompressFormat;
-[Landroid.graphics.Bitmap$Config;
-[Landroid.graphics.Bitmap;
-[Landroid.graphics.Canvas$EdgeType;
-[Landroid.graphics.ColorSpace$Model;
-[Landroid.graphics.ColorSpace$Named;
-[Landroid.graphics.ColorSpace;
-[Landroid.graphics.FontFamily;
-[Landroid.graphics.Interpolator$Result;
-[Landroid.graphics.Matrix$ScaleToFit;
-[Landroid.graphics.Paint$Align;
-[Landroid.graphics.Paint$Cap;
-[Landroid.graphics.Paint$Join;
-[Landroid.graphics.Paint$Style;
-[Landroid.graphics.Path$Direction;
-[Landroid.graphics.Path$FillType;
-[Landroid.graphics.Point;
-[Landroid.graphics.PorterDuff$Mode;
-[Landroid.graphics.Rect;
-[Landroid.graphics.Region$Op;
-[Landroid.graphics.Shader$TileMode;
-[Landroid.graphics.Typeface;
-[Landroid.graphics.drawable.Drawable;
-[Landroid.graphics.drawable.GradientDrawable$Orientation;
-[Landroid.graphics.drawable.LayerDrawable$ChildDrawable;
-[Landroid.graphics.drawable.RippleForeground;
-[Landroid.graphics.fonts.FontVariationAxis;
-[Landroid.hardware.camera2.marshal.MarshalQueryable;
-[Landroid.hardware.camera2.params.Face;
-[Landroid.hardware.camera2.params.HighSpeedVideoConfiguration;
-[Landroid.hardware.camera2.params.MeteringRectangle;
-[Landroid.hardware.camera2.params.StreamConfiguration;
-[Landroid.hardware.camera2.params.StreamConfigurationDuration;
-[Landroid.hardware.soundtrigger.SoundTrigger$ConfidenceLevel;
-[Landroid.hardware.soundtrigger.SoundTrigger$Keyphrase;
-[Landroid.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionExtra;
-[Landroid.icu.impl.CacheValue$Strength;
-[Landroid.icu.impl.CacheValue;
-[Landroid.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingPattern;
-[Landroid.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingType;
-[Landroid.icu.impl.ICUResourceBundle$OpenType;
-[Landroid.icu.impl.StandardPlural;
-[Landroid.icu.impl.Trie2$ValueWidth;
-[Landroid.icu.impl.UCharacterProperty$BinaryProperty;
-[Landroid.icu.impl.UCharacterProperty$IntProperty;
-[Landroid.icu.text.DisplayContext$Type;
-[Landroid.icu.text.DisplayContext;
-[Landroid.icu.text.PluralRules$Operand;
-[Landroid.icu.text.PluralRules$PluralType;
-[Landroid.icu.text.PluralRules$SampleType;
-[Landroid.icu.text.TimeZoneNames$NameType;
-[Landroid.icu.text.UnicodeSet;
-[Landroid.icu.util.Currency$CurrencyUsage;
-[Landroid.icu.util.ULocale$Category;
-[Landroid.icu.util.ULocale;
-[Landroid.icu.util.UResourceBundle$RootType;
-[Landroid.media.AudioGain;
-[Landroid.net.IpConfiguration$IpAssignment;
-[Landroid.net.IpConfiguration$ProxySettings;
-[Landroid.net.LocalSocketAddress$Namespace;
-[Landroid.net.NetworkInfo$DetailedState;
-[Landroid.net.NetworkInfo$State;
-[Landroid.net.NetworkKey;
-[Landroid.net.NetworkRequest$Type;
-[Landroid.net.ScoredNetwork;
-[Landroid.net.Uri;
-[Landroid.net.wifi.ScanResult$InformationElement;
-[Landroid.net.wifi.SupplicantState;
-[Landroid.os.AsyncTask$Status;
-[Landroid.os.MessageQueue$IdleHandler;
-[Landroid.os.Parcel;
-[Landroid.os.Parcelable;
-[Landroid.os.PatternMatcher;
-[Landroid.os.PersistableBundle;
-[Landroid.os.storage.StorageVolume;
-[Landroid.service.notification.StatusBarNotification;
-[Landroid.system.StructPollfd;
-[Landroid.telephony.TelephonyManager$MultiSimVariants;
-[Landroid.text.DynamicLayout$ChangeWatcher;
-[Landroid.text.FontConfig$Alias;
-[Landroid.text.FontConfig$Family;
-[Landroid.text.FontConfig$Font;
-[Landroid.text.Hyphenator$HyphenationData;
-[Landroid.text.InputFilter;
-[Landroid.text.Layout$Alignment;
-[Landroid.text.Layout$Directions;
-[Landroid.text.MeasuredText;
-[Landroid.text.SpanWatcher;
-[Landroid.text.TextLine;
-[Landroid.text.TextUtils$TruncateAt;
-[Landroid.text.TextWatcher;
-[Landroid.text.method.TextKeyListener$Capitalize;
-[Landroid.text.method.TextKeyListener;
-[Landroid.text.style.AlignmentSpan;
-[Landroid.text.style.CharacterStyle;
-[Landroid.text.style.LeadingMarginSpan;
-[Landroid.text.style.LineBackgroundSpan;
-[Landroid.text.style.LineHeightSpan;
-[Landroid.text.style.MetricAffectingSpan;
-[Landroid.text.style.ParagraphStyle;
-[Landroid.text.style.ReplacementSpan;
-[Landroid.text.style.SpellCheckSpan;
-[Landroid.text.style.SuggestionSpan;
-[Landroid.text.style.TabStopSpan;
-[Landroid.text.style.WrapTogetherSpan;
-[Landroid.util.LongSparseArray;
-[Landroid.util.Pair;
-[Landroid.util.Range;
-[Landroid.util.Rational;
-[Landroid.util.Size;
-[Landroid.view.Choreographer$CallbackQueue;
-[Landroid.view.Display$Mode;
-[Landroid.view.Display;
-[Landroid.view.HandlerActionQueue$HandlerAction;
-[Landroid.view.MenuItem;
-[Landroid.view.View;
-[Landroid.widget.Editor$TextViewPositionListener;
-[Landroid.widget.ImageView$ScaleType;
-[Landroid.widget.TextView$BufferType;
-[Landroid.widget.TextView$ChangeWatcher;
-[Lcom.android.internal.policy.PhoneWindow$PanelFeatureState;
-[Lcom.android.internal.telephony.IccCardConstants$State;
-[Lcom.android.internal.telephony.PhoneConstants$State;
-[Lcom.android.internal.util.StateMachine$SmHandler$StateInfo;
-[Lcom.android.okhttp.CipherSuite;
-[Lcom.android.okhttp.ConnectionSpec;
-[Lcom.android.okhttp.HttpUrl$Builder$ParseResult;
-[Lcom.android.okhttp.Protocol;
-[Lcom.android.okhttp.TlsVersion;
-[Lcom.android.org.bouncycastle.asn1.ASN1ObjectIdentifier;
-[Lcom.android.org.conscrypt.OpenSSLSignature$EngineType;
-[Lcom.android.org.conscrypt.OpenSSLX509CertPath$Encoding;
-[Lcom.android.org.conscrypt.OpenSSLX509Certificate;
-[Lcom.android.org.conscrypt.ct.CTLogInfo;
-[Ldalvik.system.DexPathList$Element;
-[Ldalvik.system.DexPathList$NativeLibraryElement;
-[Ljava.io.File$PathStatus;
-[Ljava.io.File;
-[Ljava.io.FileDescriptor;
-[Ljava.io.IOException;
-[Ljava.io.ObjectInputStream$HandleTable$HandleList;
-[Ljava.io.ObjectStreamField;
-[Ljava.lang.Byte;
-[Ljava.lang.CharSequence;
-[Ljava.lang.Character$UnicodeBlock;
-[Ljava.lang.Character;
-[Ljava.lang.Class;
-[Ljava.lang.Comparable;
-[Ljava.lang.Enum;
-[Ljava.lang.Integer;
-[Ljava.lang.Long;
-[Ljava.lang.Object;
-[Ljava.lang.Package;
-[Ljava.lang.Runnable;
-[Ljava.lang.Short;
-[Ljava.lang.StackTraceElement;
-[Ljava.lang.String;
-[Ljava.lang.Thread$State;
-[Ljava.lang.Thread;
-[Ljava.lang.ThreadGroup;
-[Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;
-[Ljava.lang.Throwable;
-[Ljava.lang.Void;
-[Ljava.lang.annotation.Annotation;
-[Ljava.lang.invoke.MethodType;
-[Ljava.lang.ref.WeakReference;
-[Ljava.lang.reflect.AccessibleObject;
-[Ljava.lang.reflect.Constructor;
-[Ljava.lang.reflect.Field;
-[Ljava.lang.reflect.Method;
-[Ljava.lang.reflect.Parameter;
-[Ljava.lang.reflect.Type;
-[Ljava.lang.reflect.TypeVariable;
-[Ljava.math.BigInteger;
-[Ljava.math.RoundingMode;
-[Ljava.net.InetAddress;
-[Ljava.net.Proxy$Type;
-[Ljava.nio.ByteBuffer;
-[Ljava.nio.file.attribute.FileAttribute;
-[Ljava.security.CryptoPrimitive;
-[Ljava.security.Provider;
-[Ljava.security.cert.Certificate;
-[Ljava.security.cert.X509Certificate;
-[Ljava.text.DateFormat$Field;
-[Ljava.text.Normalizer$Form;
-[Ljava.util.ArrayList;
-[Ljava.util.Comparators$NaturalOrderComparator;
-[Ljava.util.Enumeration;
-[Ljava.util.Formatter$Flags;
-[Ljava.util.Formatter$FormatString;
-[Ljava.util.HashMap$Node;
-[Ljava.util.Hashtable$HashtableEntry;
-[Ljava.util.Locale$Category;
-[Ljava.util.Locale;
-[Ljava.util.Map$Entry;
-[Ljava.util.WeakHashMap$Entry;
-[Ljava.util.concurrent.ConcurrentHashMap$CounterCell;
-[Ljava.util.concurrent.ConcurrentHashMap$Node;
-[Ljava.util.concurrent.ConcurrentHashMap$Segment;
-[Ljava.util.concurrent.ForkJoinTask$ExceptionNode;
-[Ljava.util.concurrent.RunnableScheduledFuture;
-[Ljava.util.concurrent.TimeUnit;
-[Ljava.util.logging.Handler;
-[Ljava.util.regex.Pattern;
-[Ljava.util.stream.StreamOpFlag$Type;
-[Ljava.util.stream.StreamOpFlag;
-[Ljava.util.stream.StreamShape;
-[Ljavax.crypto.Cipher$InitType;
-[Ljavax.crypto.Cipher$NeedToSet;
-[Ljavax.microedition.khronos.egl.EGLConfig;
-[Ljavax.net.ssl.KeyManager;
-[Ljavax.net.ssl.TrustManager;
-[Ljavax.security.cert.X509Certificate;
-[Llibcore.io.ClassPathURLStreamHandler;
-[Llibcore.io.IoTracker$Mode;
-[Llibcore.reflect.AnnotationMember$DefaultValues;
-[Llibcore.reflect.AnnotationMember;
-[Lorg.apache.http.Header;
-[Lorg.json.JSONStringer$Scope;
-[Lorg.kxml2.io.KXmlParser$ValueContext;
-[Lsun.invoke.util.Wrapper;
-[Lsun.misc.FDBigInteger;
-[Lsun.misc.FormattedFloatingDecimal$Form;
-[Lsun.security.jca.ProviderConfig;
-[Lsun.security.jca.ServiceId;
-[Lsun.security.pkcs.SignerInfo;
-[Lsun.security.util.DerOutputStream;
-[Lsun.security.util.DerValue;
-[Lsun.security.util.DisabledAlgorithmConstraints$Constraint$Operator;
-[Lsun.security.util.ObjectIdentifier;
-[Lsun.security.x509.AVA;
-[Lsun.security.x509.RDN;
-[Lsun.util.logging.PlatformLogger$Level;
-[S
-[Z
-[[B
-[[I
-[[Ljava.lang.Byte;
-[[Ljava.lang.Class;
-[[Ljava.lang.Object;
-[[Ljava.lang.String;
-[[Ljava.lang.annotation.Annotation;
-android.R$styleable
-android.accounts.Account
-android.accounts.Account$1
-android.accounts.AccountManager
-android.accounts.AccountManager$1
-android.accounts.AccountManager$19
-android.accounts.AccountManager$BaseFutureTask
-android.accounts.AccountManager$BaseFutureTask$1
-android.accounts.AccountManager$BaseFutureTask$Response
-android.accounts.AccountManager$Future2Task
-android.accounts.AccountManagerCallback
-android.accounts.AccountManagerFuture
-android.accounts.AccountsException
-android.accounts.AuthenticatorException
-android.accounts.IAccountManager
-android.accounts.IAccountManager$Stub
-android.accounts.IAccountManager$Stub$Proxy
-android.accounts.IAccountManagerResponse
-android.accounts.IAccountManagerResponse$Stub
-android.accounts.OnAccountsUpdateListener
-android.accounts.OperationCanceledException
-android.animation.AnimationHandler
-android.animation.AnimationHandler$1
-android.animation.AnimationHandler$AnimationFrameCallback
-android.animation.AnimationHandler$AnimationFrameCallbackProvider
-android.animation.AnimationHandler$MyFrameCallbackProvider
-android.animation.Animator
-android.animation.Animator$AnimatorConstantState
-android.animation.Animator$AnimatorListener
-android.animation.Animator$AnimatorPauseListener
-android.animation.AnimatorInflater
-android.animation.AnimatorListenerAdapter
-android.animation.AnimatorSet
-android.animation.AnimatorSet$1
-android.animation.AnimatorSet$2
-android.animation.AnimatorSet$3
-android.animation.AnimatorSet$AnimationEvent
-android.animation.AnimatorSet$Builder
-android.animation.AnimatorSet$Node
-android.animation.AnimatorSet$SeekState
-android.animation.FloatEvaluator
-android.animation.FloatKeyframeSet
-android.animation.IntEvaluator
-android.animation.IntKeyframeSet
-android.animation.Keyframe
-android.animation.Keyframe$FloatKeyframe
-android.animation.Keyframe$IntKeyframe
-android.animation.KeyframeSet
-android.animation.Keyframes
-android.animation.Keyframes$FloatKeyframes
-android.animation.Keyframes$IntKeyframes
-android.animation.LayoutTransition
-android.animation.LayoutTransition$TransitionListener
-android.animation.ObjectAnimator
-android.animation.PathKeyframes$FloatKeyframesBase
-android.animation.PathKeyframes$IntKeyframesBase
-android.animation.PathKeyframes$SimpleKeyframes
-android.animation.PropertyValuesHolder
-android.animation.PropertyValuesHolder$FloatPropertyValuesHolder
-android.animation.PropertyValuesHolder$IntPropertyValuesHolder
-android.animation.PropertyValuesHolder$PropertyValues
-android.animation.RectEvaluator
-android.animation.StateListAnimator
-android.animation.StateListAnimator$1
-android.animation.StateListAnimator$StateListAnimatorConstantState
-android.animation.StateListAnimator$Tuple
-android.animation.TimeInterpolator
-android.animation.TypeEvaluator
-android.animation.ValueAnimator
-android.animation.ValueAnimator$AnimatorUpdateListener
-android.app.-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU
-android.app.-$Lambda$9I5WEMsoBc7l4QrNqZ4wx59yuHU$1
-android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk
-android.app.-$Lambda$c44uHH2WE4sJvw5tZZB6gRzEaHI
-android.app.-$Lambda$c44uHH2WE4sJvw5tZZB6gRzEaHI$1
-android.app.Activity
-android.app.Activity$HostCallbacks
-android.app.ActivityManager
-android.app.ActivityManager$1
-android.app.ActivityManager$RecentTaskInfo
-android.app.ActivityManager$RecentTaskInfo$1
-android.app.ActivityManager$RunningAppProcessInfo
-android.app.ActivityManager$RunningAppProcessInfo$1
-android.app.ActivityManager$RunningServiceInfo
-android.app.ActivityManager$RunningServiceInfo$1
-android.app.ActivityManager$RunningTaskInfo
-android.app.ActivityManager$RunningTaskInfo$1
-android.app.ActivityManager$StackId
-android.app.ActivityManager$TaskDescription
-android.app.ActivityManager$TaskDescription$1
-android.app.ActivityOptions
-android.app.ActivityThread
-android.app.ActivityThread$1
-android.app.ActivityThread$2
-android.app.ActivityThread$ActivityClientRecord
-android.app.ActivityThread$ActivityConfigChangeData
-android.app.ActivityThread$AppBindData
-android.app.ActivityThread$ApplicationThread
-android.app.ActivityThread$BindServiceData
-android.app.ActivityThread$ContextCleanupInfo
-android.app.ActivityThread$CreateServiceData
-android.app.ActivityThread$DropBoxReporter
-android.app.ActivityThread$EventLoggingReporter
-android.app.ActivityThread$GcIdler
-android.app.ActivityThread$H
-android.app.ActivityThread$Idler
-android.app.ActivityThread$Profiler
-android.app.ActivityThread$ProviderClientRecord
-android.app.ActivityThread$ProviderKey
-android.app.ActivityThread$ProviderRefCount
-android.app.ActivityThread$ReceiverData
-android.app.ActivityThread$ServiceArgsData
-android.app.ActivityThread$StopInfo
-android.app.ActivityTransitionState
-android.app.AlertDialog
-android.app.AppGlobals
-android.app.AppOpsManager
-android.app.AppOpsManager$OnOpChangedListener
-android.app.Application
-android.app.Application$ActivityLifecycleCallbacks
-android.app.ApplicationErrorReport$CrashInfo
-android.app.ApplicationLoaders
-android.app.ApplicationPackageManager
-android.app.ApplicationPackageManager$OnPermissionsChangeListenerDelegate
-android.app.ApplicationPackageManager$ResourceName
-android.app.ContentProviderHolder
-android.app.ContentProviderHolder$1
-android.app.ContextImpl
-android.app.ContextImpl$ApplicationContentResolver
-android.app.DexLoadReporter
-android.app.Dialog
-android.app.Dialog$ListenersHandler
-android.app.DownloadManager
-android.app.Fragment
-android.app.FragmentContainer
-android.app.FragmentController
-android.app.FragmentHostCallback
-android.app.FragmentManager
-android.app.FragmentManagerImpl
-android.app.FragmentManagerImpl$1
-android.app.IActivityManager
-android.app.IActivityManager$Stub
-android.app.IActivityManager$Stub$Proxy
-android.app.IAlarmManager
-android.app.IAlarmManager$Stub
-android.app.IAlarmManager$Stub$Proxy
-android.app.IApplicationThread
-android.app.IApplicationThread$Stub
-android.app.IInstrumentationWatcher
-android.app.IInstrumentationWatcher$Stub
-android.app.INotificationManager
-android.app.INotificationManager$Stub
-android.app.INotificationManager$Stub$Proxy
-android.app.IServiceConnection
-android.app.IServiceConnection$Stub
-android.app.IUiAutomationConnection
-android.app.IUiAutomationConnection$Stub
-android.app.IUiModeManager
-android.app.IUiModeManager$Stub
-android.app.IUiModeManager$Stub$Proxy
-android.app.IUserSwitchObserver
-android.app.IUserSwitchObserver$Stub
-android.app.IWallpaperManager
-android.app.IWallpaperManager$Stub
-android.app.IWallpaperManagerCallback
-android.app.IWallpaperManagerCallback$Stub
-android.app.Instrumentation
-android.app.IntentReceiverLeaked
-android.app.IntentService
-android.app.IntentService$ServiceHandler
-android.app.JobSchedulerImpl
-android.app.KeyguardManager
-android.app.LoadedApk
-android.app.LoadedApk$ReceiverDispatcher
-android.app.LoadedApk$ReceiverDispatcher$Args
-android.app.LoadedApk$ReceiverDispatcher$InnerReceiver
-android.app.LoadedApk$ServiceDispatcher
-android.app.LoadedApk$ServiceDispatcher$ConnectionInfo
-android.app.LoadedApk$ServiceDispatcher$DeathMonitor
-android.app.LoadedApk$ServiceDispatcher$InnerConnection
-android.app.LoadedApk$ServiceDispatcher$RunConnection
-android.app.LoadedApk$WarningContextClassLoader
-android.app.LoaderManager
-android.app.LoaderManagerImpl
-android.app.NativeActivity
-android.app.Notification
-android.app.Notification$1
-android.app.Notification$Action
-android.app.Notification$Action$1
-android.app.Notification$BigPictureStyle
-android.app.Notification$BigTextStyle
-android.app.Notification$Builder
-android.app.Notification$BuilderRemoteViews
-android.app.Notification$DecoratedCustomViewStyle
-android.app.Notification$DecoratedMediaCustomViewStyle
-android.app.Notification$InboxStyle
-android.app.Notification$MediaStyle
-android.app.Notification$MessagingStyle
-android.app.Notification$StandardTemplateParams
-android.app.Notification$Style
-android.app.NotificationChannel
-android.app.NotificationChannel$1
-android.app.NotificationChannelGroup
-android.app.NotificationChannelGroup$1
-android.app.NotificationManager
-android.app.PendingIntent
-android.app.PendingIntent$1
-android.app.PendingIntent$CanceledException
-android.app.PendingIntent$OnMarshaledListener
-android.app.QueuedWork
-android.app.QueuedWork$QueuedWorkHandler
-android.app.ReceiverRestrictedContext
-android.app.RemoteInput
-android.app.ResourcesManager
-android.app.ResourcesManager$1
-android.app.ResourcesManager$ActivityResources
-android.app.ResultInfo
-android.app.ResultInfo$1
-android.app.Service
-android.app.ServiceConnectionLeaked
-android.app.ServiceStartArgs
-android.app.ServiceStartArgs$1
-android.app.SharedElementCallback
-android.app.SharedElementCallback$1
-android.app.SharedPreferencesImpl
-android.app.SharedPreferencesImpl$1
-android.app.SharedPreferencesImpl$2
-android.app.SharedPreferencesImpl$EditorImpl
-android.app.SharedPreferencesImpl$EditorImpl$1
-android.app.SharedPreferencesImpl$EditorImpl$2
-android.app.SharedPreferencesImpl$MemoryCommitResult
-android.app.StatusBarManager
-android.app.SystemServiceRegistry
-android.app.SystemServiceRegistry$1
-android.app.SystemServiceRegistry$10
-android.app.SystemServiceRegistry$11
-android.app.SystemServiceRegistry$12
-android.app.SystemServiceRegistry$13
-android.app.SystemServiceRegistry$14
-android.app.SystemServiceRegistry$15
-android.app.SystemServiceRegistry$16
-android.app.SystemServiceRegistry$17
-android.app.SystemServiceRegistry$18
-android.app.SystemServiceRegistry$19
-android.app.SystemServiceRegistry$2
-android.app.SystemServiceRegistry$20
-android.app.SystemServiceRegistry$21
-android.app.SystemServiceRegistry$22
-android.app.SystemServiceRegistry$23
-android.app.SystemServiceRegistry$24
-android.app.SystemServiceRegistry$25
-android.app.SystemServiceRegistry$26
-android.app.SystemServiceRegistry$27
-android.app.SystemServiceRegistry$28
-android.app.SystemServiceRegistry$29
-android.app.SystemServiceRegistry$3
-android.app.SystemServiceRegistry$30
-android.app.SystemServiceRegistry$31
-android.app.SystemServiceRegistry$32
-android.app.SystemServiceRegistry$33
-android.app.SystemServiceRegistry$34
-android.app.SystemServiceRegistry$35
-android.app.SystemServiceRegistry$36
-android.app.SystemServiceRegistry$37
-android.app.SystemServiceRegistry$38
-android.app.SystemServiceRegistry$39
-android.app.SystemServiceRegistry$4
-android.app.SystemServiceRegistry$40
-android.app.SystemServiceRegistry$41
-android.app.SystemServiceRegistry$42
-android.app.SystemServiceRegistry$43
-android.app.SystemServiceRegistry$44
-android.app.SystemServiceRegistry$45
-android.app.SystemServiceRegistry$46
-android.app.SystemServiceRegistry$47
-android.app.SystemServiceRegistry$48
-android.app.SystemServiceRegistry$49
-android.app.SystemServiceRegistry$5
-android.app.SystemServiceRegistry$50
-android.app.SystemServiceRegistry$51
-android.app.SystemServiceRegistry$52
-android.app.SystemServiceRegistry$53
-android.app.SystemServiceRegistry$54
-android.app.SystemServiceRegistry$55
-android.app.SystemServiceRegistry$56
-android.app.SystemServiceRegistry$57
-android.app.SystemServiceRegistry$58
-android.app.SystemServiceRegistry$59
-android.app.SystemServiceRegistry$6
-android.app.SystemServiceRegistry$60
-android.app.SystemServiceRegistry$61
-android.app.SystemServiceRegistry$62
-android.app.SystemServiceRegistry$63
-android.app.SystemServiceRegistry$64
-android.app.SystemServiceRegistry$65
-android.app.SystemServiceRegistry$66
-android.app.SystemServiceRegistry$67
-android.app.SystemServiceRegistry$68
-android.app.SystemServiceRegistry$69
-android.app.SystemServiceRegistry$7
-android.app.SystemServiceRegistry$70
-android.app.SystemServiceRegistry$71
-android.app.SystemServiceRegistry$72
-android.app.SystemServiceRegistry$73
-android.app.SystemServiceRegistry$74
-android.app.SystemServiceRegistry$75
-android.app.SystemServiceRegistry$76
-android.app.SystemServiceRegistry$77
-android.app.SystemServiceRegistry$78
-android.app.SystemServiceRegistry$79
-android.app.SystemServiceRegistry$8
-android.app.SystemServiceRegistry$80
-android.app.SystemServiceRegistry$81
-android.app.SystemServiceRegistry$82
-android.app.SystemServiceRegistry$9
-android.app.SystemServiceRegistry$CachedServiceFetcher
-android.app.SystemServiceRegistry$ServiceFetcher
-android.app.SystemServiceRegistry$StaticApplicationContextServiceFetcher
-android.app.SystemServiceRegistry$StaticServiceFetcher
-android.app.UiModeManager
-android.app.UserSwitchObserver
-android.app.VrManager
-android.app.WallpaperManager
-android.app.admin.DevicePolicyManager
-android.app.admin.IDevicePolicyManager
-android.app.admin.IDevicePolicyManager$Stub
-android.app.admin.IDevicePolicyManager$Stub$Proxy
-android.app.admin.SecurityLog
-android.app.admin.SecurityLog$SecurityEvent
-android.app.admin.SecurityLog$SecurityEvent$1
-android.app.backup.BackupAgent
-android.app.backup.BackupDataInput
-android.app.backup.BackupDataInput$EntityHeader
-android.app.backup.BackupDataOutput
-android.app.backup.BackupHelperDispatcher
-android.app.backup.BackupHelperDispatcher$Header
-android.app.backup.BackupManager
-android.app.backup.FileBackupHelperBase
-android.app.backup.FullBackup
-android.app.backup.FullBackupDataOutput
-android.app.backup.IBackupManager
-android.app.backup.IBackupManager$Stub
-android.app.backup.IBackupManager$Stub$Proxy
-android.app.job.IJobCallback
-android.app.job.IJobCallback$Stub
-android.app.job.IJobCallback$Stub$Proxy
-android.app.job.IJobScheduler
-android.app.job.IJobScheduler$Stub
-android.app.job.IJobScheduler$Stub$Proxy
-android.app.job.IJobService
-android.app.job.IJobService$Stub
-android.app.job.JobInfo
-android.app.job.JobInfo$1
-android.app.job.JobInfo$Builder
-android.app.job.JobInfo$TriggerContentUri
-android.app.job.JobInfo$TriggerContentUri$1
-android.app.job.JobParameters
-android.app.job.JobParameters$1
-android.app.job.JobScheduler
-android.app.job.JobService
-android.app.job.JobService$1
-android.app.job.JobServiceEngine
-android.app.job.JobServiceEngine$JobHandler
-android.app.job.JobServiceEngine$JobInterface
-android.app.trust.ITrustManager
-android.app.trust.ITrustManager$Stub
-android.app.trust.ITrustManager$Stub$Proxy
-android.app.trust.TrustManager
-android.app.usage.IUsageStatsManager
-android.app.usage.IUsageStatsManager$Stub
-android.app.usage.NetworkStatsManager
-android.app.usage.StorageStatsManager
-android.app.usage.UsageEvents
-android.app.usage.UsageEvents$1
-android.app.usage.UsageStatsManager
-android.appwidget.AppWidgetManager
-android.appwidget.AppWidgetProvider
-android.bluetooth.BluetoothActivityEnergyInfo
-android.bluetooth.BluetoothAdapter
-android.bluetooth.BluetoothAdapter$1
-android.bluetooth.BluetoothDevice
-android.bluetooth.BluetoothDevice$1
-android.bluetooth.BluetoothDevice$2
-android.bluetooth.BluetoothHeadset
-android.bluetooth.BluetoothHeadset$1
-android.bluetooth.BluetoothHeadset$2
-android.bluetooth.BluetoothHeadset$3
-android.bluetooth.BluetoothManager
-android.bluetooth.BluetoothProfile
-android.bluetooth.BluetoothProfile$ServiceListener
-android.bluetooth.IBluetooth
-android.bluetooth.IBluetooth$Stub
-android.bluetooth.IBluetooth$Stub$Proxy
-android.bluetooth.IBluetoothA2dp
-android.bluetooth.IBluetoothA2dp$Stub
-android.bluetooth.IBluetoothGatt
-android.bluetooth.IBluetoothGatt$Stub
-android.bluetooth.IBluetoothHeadset
-android.bluetooth.IBluetoothHeadset$Stub
-android.bluetooth.IBluetoothHeadset$Stub$Proxy
-android.bluetooth.IBluetoothManager
-android.bluetooth.IBluetoothManager$Stub
-android.bluetooth.IBluetoothManager$Stub$Proxy
-android.bluetooth.IBluetoothManagerCallback
-android.bluetooth.IBluetoothManagerCallback$Stub
-android.bluetooth.IBluetoothProfileServiceConnection
-android.bluetooth.IBluetoothProfileServiceConnection$Stub
-android.bluetooth.IBluetoothStateChangeCallback
-android.bluetooth.IBluetoothStateChangeCallback$Stub
-android.companion.CompanionDeviceManager
-android.content.AbstractThreadedSyncAdapter
-android.content.AbstractThreadedSyncAdapter$ISyncAdapterImpl
-android.content.ActivityNotFoundException
-android.content.BroadcastReceiver
-android.content.BroadcastReceiver$PendingResult
-android.content.BroadcastReceiver$PendingResult$1
-android.content.ClipboardManager
-android.content.ComponentCallbacks
-android.content.ComponentCallbacks2
-android.content.ComponentName
-android.content.ComponentName$1
-android.content.ContentProvider
-android.content.ContentProvider$Transport
-android.content.ContentProviderClient
-android.content.ContentProviderNative
-android.content.ContentProviderProxy
-android.content.ContentProviderResult
-android.content.ContentResolver
-android.content.ContentResolver$CursorWrapperInner
-android.content.ContentUris
-android.content.ContentValues
-android.content.ContentValues$1
-android.content.Context
-android.content.ContextWrapper
-android.content.DialogInterface
-android.content.DialogInterface$OnCancelListener
-android.content.DialogInterface$OnClickListener
-android.content.DialogInterface$OnDismissListener
-android.content.IContentProvider
-android.content.IContentService
-android.content.IContentService$Stub
-android.content.IContentService$Stub$Proxy
-android.content.IIntentReceiver
-android.content.IIntentReceiver$Stub
-android.content.IIntentSender
-android.content.IIntentSender$Stub
-android.content.IIntentSender$Stub$Proxy
-android.content.ISyncAdapter
-android.content.ISyncAdapter$Stub
-android.content.ISyncContext
-android.content.ISyncContext$Stub
-android.content.Intent
-android.content.Intent$1
-android.content.Intent$FilterComparison
-android.content.IntentFilter
-android.content.IntentFilter$1
-android.content.IntentFilter$MalformedMimeTypeException
-android.content.IntentSender
-android.content.IntentSender$SendIntentException
-android.content.OperationApplicationException
-android.content.RestrictionsManager
-android.content.ServiceConnection
-android.content.SharedPreferences
-android.content.SharedPreferences$Editor
-android.content.SharedPreferences$OnSharedPreferenceChangeListener
-android.content.SyncResult
-android.content.SyncResult$1
-android.content.SyncStats
-android.content.SyncStats$1
-android.content.UndoManager
-android.content.UndoOwner
-android.content.UriMatcher
-android.content.pm.ActivityInfo
-android.content.pm.ActivityInfo$1
-android.content.pm.ApplicationInfo
-android.content.pm.ApplicationInfo$1
-android.content.pm.BaseParceledListSlice
-android.content.pm.ComponentInfo
-android.content.pm.ConfigurationInfo
-android.content.pm.ConfigurationInfo$1
-android.content.pm.FeatureGroupInfo
-android.content.pm.FeatureGroupInfo$1
-android.content.pm.FeatureInfo
-android.content.pm.FeatureInfo$1
-android.content.pm.IOnPermissionsChangeListener
-android.content.pm.IOnPermissionsChangeListener$Stub
-android.content.pm.IPackageInstaller
-android.content.pm.IPackageInstaller$Stub
-android.content.pm.IPackageManager
-android.content.pm.IPackageManager$Stub
-android.content.pm.IPackageManager$Stub$Proxy
-android.content.pm.IShortcutService
-android.content.pm.IShortcutService$Stub
-android.content.pm.InstrumentationInfo
-android.content.pm.InstrumentationInfo$1
-android.content.pm.LauncherApps
-android.content.pm.PackageInfo
-android.content.pm.PackageInfo$1
-android.content.pm.PackageItemInfo
-android.content.pm.PackageManager
-android.content.pm.PackageManager$NameNotFoundException
-android.content.pm.PackageManager$OnPermissionsChangedListener
-android.content.pm.PackageParser$PackageParserException
-android.content.pm.ParceledListSlice
-android.content.pm.ParceledListSlice$1
-android.content.pm.PathPermission
-android.content.pm.PathPermission$1
-android.content.pm.PermissionInfo
-android.content.pm.PermissionInfo$1
-android.content.pm.ProviderInfo
-android.content.pm.ProviderInfo$1
-android.content.pm.ResolveInfo
-android.content.pm.ResolveInfo$1
-android.content.pm.ServiceInfo
-android.content.pm.ServiceInfo$1
-android.content.pm.ShortcutInfo
-android.content.pm.ShortcutInfo$1
-android.content.pm.ShortcutManager
-android.content.pm.Signature
-android.content.pm.Signature$1
-android.content.pm.UserInfo
-android.content.pm.UserInfo$1
-android.content.res.AssetFileDescriptor
-android.content.res.AssetFileDescriptor$1
-android.content.res.AssetManager
-android.content.res.AssetManager$AssetInputStream
-android.content.res.ColorStateList
-android.content.res.ColorStateList$1
-android.content.res.ColorStateList$ColorStateListFactory
-android.content.res.CompatResources
-android.content.res.CompatibilityInfo
-android.content.res.CompatibilityInfo$1
-android.content.res.CompatibilityInfo$2
-android.content.res.ComplexColor
-android.content.res.Configuration
-android.content.res.Configuration$1
-android.content.res.ConfigurationBoundResourceCache
-android.content.res.ConstantState
-android.content.res.DrawableCache
-android.content.res.GradientColor
-android.content.res.ObbInfo
-android.content.res.ObbInfo$1
-android.content.res.ObbScanner
-android.content.res.Resources
-android.content.res.Resources$NotFoundException
-android.content.res.Resources$Theme
-android.content.res.Resources$ThemeKey
-android.content.res.ResourcesImpl
-android.content.res.ResourcesImpl$ThemeImpl
-android.content.res.ResourcesKey
-android.content.res.StringBlock
-android.content.res.ThemedResourceCache
-android.content.res.TypedArray
-android.content.res.XmlBlock
-android.content.res.XmlBlock$Parser
-android.content.res.XmlResourceParser
-android.database.AbstractCursor
-android.database.AbstractCursor$SelfContentObserver
-android.database.AbstractWindowedCursor
-android.database.BulkCursorDescriptor
-android.database.BulkCursorDescriptor$1
-android.database.BulkCursorNative
-android.database.BulkCursorProxy
-android.database.BulkCursorToCursorAdaptor
-android.database.CharArrayBuffer
-android.database.ContentObservable
-android.database.ContentObserver
-android.database.ContentObserver$NotificationRunnable
-android.database.ContentObserver$Transport
-android.database.CrossProcessCursor
-android.database.CrossProcessCursorWrapper
-android.database.Cursor
-android.database.CursorIndexOutOfBoundsException
-android.database.CursorToBulkCursorAdaptor
-android.database.CursorToBulkCursorAdaptor$ContentObserverProxy
-android.database.CursorWindow
-android.database.CursorWindow$1
-android.database.CursorWrapper
-android.database.DataSetObservable
-android.database.DataSetObserver
-android.database.DatabaseErrorHandler
-android.database.DatabaseUtils
-android.database.DefaultDatabaseErrorHandler
-android.database.IBulkCursor
-android.database.IContentObserver
-android.database.IContentObserver$Stub
-android.database.IContentObserver$Stub$Proxy
-android.database.MatrixCursor
-android.database.Observable
-android.database.SQLException
-android.database.sqlite.DatabaseObjectNotClosedException
-android.database.sqlite.SQLiteCantOpenDatabaseException
-android.database.sqlite.SQLiteClosable
-android.database.sqlite.SQLiteConnection
-android.database.sqlite.SQLiteConnection$Operation
-android.database.sqlite.SQLiteConnection$OperationLog
-android.database.sqlite.SQLiteConnection$PreparedStatement
-android.database.sqlite.SQLiteConnection$PreparedStatementCache
-android.database.sqlite.SQLiteConnectionPool
-android.database.sqlite.SQLiteConnectionPool$AcquiredConnectionStatus
-android.database.sqlite.SQLiteConnectionPool$ConnectionWaiter
-android.database.sqlite.SQLiteCursor
-android.database.sqlite.SQLiteCursorDriver
-android.database.sqlite.SQLiteCustomFunction
-android.database.sqlite.SQLiteDatabase
-android.database.sqlite.SQLiteDatabase$1
-android.database.sqlite.SQLiteDatabaseConfiguration
-android.database.sqlite.SQLiteDatabaseCorruptException
-android.database.sqlite.SQLiteDatabaseLockedException
-android.database.sqlite.SQLiteDebug
-android.database.sqlite.SQLiteDebug$PagerStats
-android.database.sqlite.SQLiteDirectCursorDriver
-android.database.sqlite.SQLiteDoneException
-android.database.sqlite.SQLiteException
-android.database.sqlite.SQLiteGlobal
-android.database.sqlite.SQLiteOpenHelper
-android.database.sqlite.SQLiteProgram
-android.database.sqlite.SQLiteQuery
-android.database.sqlite.SQLiteQueryBuilder
-android.database.sqlite.SQLiteSession
-android.database.sqlite.SQLiteSession$Transaction
-android.database.sqlite.SQLiteStatement
-android.database.sqlite.SQLiteStatementInfo
-android.database.sqlite.SQLiteTransactionListener
-android.ddm.DdmHandleAppName
-android.ddm.DdmHandleExit
-android.ddm.DdmHandleHeap
-android.ddm.DdmHandleHello
-android.ddm.DdmHandleNativeHeap
-android.ddm.DdmHandleProfiling
-android.ddm.DdmHandleThread
-android.ddm.DdmHandleViewDebug
-android.ddm.DdmRegister
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$1
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$2
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$4
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$6
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$7
-android.graphics.-$Lambda$ZrP-zejiEXAqfwV-MyP5lE9mYC8$8
-android.graphics.BaseCanvas
-android.graphics.Bitmap
-android.graphics.Bitmap$1
-android.graphics.Bitmap$CompressFormat
-android.graphics.Bitmap$Config
-android.graphics.BitmapFactory
-android.graphics.BitmapFactory$Options
-android.graphics.BitmapRegionDecoder
-android.graphics.BitmapShader
-android.graphics.BlurMaskFilter
-android.graphics.Camera
-android.graphics.Canvas
-android.graphics.Canvas$EdgeType
-android.graphics.Canvas$NoImagePreloadHolder
-android.graphics.CanvasProperty
-android.graphics.Color
-android.graphics.ColorFilter
-android.graphics.ColorMatrixColorFilter
-android.graphics.ColorSpace
-android.graphics.ColorSpace$Lab
-android.graphics.ColorSpace$Model
-android.graphics.ColorSpace$Named
-android.graphics.ColorSpace$Rgb
-android.graphics.ColorSpace$Rgb$TransferParameters
-android.graphics.ColorSpace$Xyz
-android.graphics.ComposePathEffect
-android.graphics.ComposeShader
-android.graphics.CornerPathEffect
-android.graphics.DashPathEffect
-android.graphics.DiscretePathEffect
-android.graphics.DrawFilter
-android.graphics.EmbossMaskFilter
-android.graphics.FontFamily
-android.graphics.FontListParser
-android.graphics.GraphicBuffer
-android.graphics.GraphicBuffer$1
-android.graphics.Insets
-android.graphics.Interpolator
-android.graphics.Interpolator$Result
-android.graphics.LightingColorFilter
-android.graphics.LinearGradient
-android.graphics.MaskFilter
-android.graphics.Matrix
-android.graphics.Matrix$1
-android.graphics.Matrix$NoImagePreloadHolder
-android.graphics.Matrix$ScaleToFit
-android.graphics.Movie
-android.graphics.NinePatch
-android.graphics.NinePatch$InsetStruct
-android.graphics.Outline
-android.graphics.Paint
-android.graphics.Paint$Align
-android.graphics.Paint$Cap
-android.graphics.Paint$FontMetrics
-android.graphics.Paint$FontMetricsInt
-android.graphics.Paint$Join
-android.graphics.Paint$NoImagePreloadHolder
-android.graphics.Paint$Style
-android.graphics.PaintFlagsDrawFilter
-android.graphics.Path
-android.graphics.Path$Direction
-android.graphics.Path$FillType
-android.graphics.PathDashPathEffect
-android.graphics.PathEffect
-android.graphics.PathMeasure
-android.graphics.Picture
-android.graphics.Point
-android.graphics.Point$1
-android.graphics.PointF
-android.graphics.PointF$1
-android.graphics.PorterDuff
-android.graphics.PorterDuff$Mode
-android.graphics.PorterDuffColorFilter
-android.graphics.PorterDuffXfermode
-android.graphics.RadialGradient
-android.graphics.Rect
-android.graphics.Rect$1
-android.graphics.RectF
-android.graphics.RectF$1
-android.graphics.Region
-android.graphics.Region$1
-android.graphics.Region$Op
-android.graphics.RegionIterator
-android.graphics.Shader
-android.graphics.Shader$TileMode
-android.graphics.SumPathEffect
-android.graphics.SurfaceTexture
-android.graphics.SweepGradient
-android.graphics.TableMaskFilter
-android.graphics.TemporaryBuffer
-android.graphics.Typeface
-android.graphics.Xfermode
-android.graphics.YuvImage
-android.graphics.drawable.AdaptiveIconDrawable
-android.graphics.drawable.Animatable
-android.graphics.drawable.Animatable2
-android.graphics.drawable.AnimatedStateListDrawable
-android.graphics.drawable.AnimatedStateListDrawable$AnimatedStateListState
-android.graphics.drawable.AnimatedVectorDrawable
-android.graphics.drawable.AnimatedVectorDrawable$1
-android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState
-android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator
-android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimator
-android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimatorRT
-android.graphics.drawable.AnimationDrawable
-android.graphics.drawable.AnimationDrawable$AnimationState
-android.graphics.drawable.BitmapDrawable
-android.graphics.drawable.BitmapDrawable$BitmapState
-android.graphics.drawable.ColorDrawable
-android.graphics.drawable.ColorDrawable$ColorState
-android.graphics.drawable.Drawable
-android.graphics.drawable.Drawable$Callback
-android.graphics.drawable.Drawable$ConstantState
-android.graphics.drawable.DrawableContainer
-android.graphics.drawable.DrawableContainer$BlockInvalidateCallback
-android.graphics.drawable.DrawableContainer$DrawableContainerState
-android.graphics.drawable.DrawableInflater
-android.graphics.drawable.DrawableWrapper
-android.graphics.drawable.DrawableWrapper$DrawableWrapperState
-android.graphics.drawable.GradientDrawable
-android.graphics.drawable.GradientDrawable$GradientState
-android.graphics.drawable.GradientDrawable$Orientation
-android.graphics.drawable.Icon
-android.graphics.drawable.Icon$1
-android.graphics.drawable.InsetDrawable
-android.graphics.drawable.InsetDrawable$InsetState
-android.graphics.drawable.InsetDrawable$InsetValue
-android.graphics.drawable.LayerDrawable
-android.graphics.drawable.LayerDrawable$ChildDrawable
-android.graphics.drawable.LayerDrawable$LayerState
-android.graphics.drawable.NinePatchDrawable
-android.graphics.drawable.NinePatchDrawable$NinePatchState
-android.graphics.drawable.RippleBackground
-android.graphics.drawable.RippleBackground$1
-android.graphics.drawable.RippleBackground$BackgroundProperty
-android.graphics.drawable.RippleComponent
-android.graphics.drawable.RippleComponent$RenderNodeAnimatorSet
-android.graphics.drawable.RippleDrawable
-android.graphics.drawable.RippleDrawable$RippleState
-android.graphics.drawable.RippleForeground
-android.graphics.drawable.RippleForeground$1
-android.graphics.drawable.RippleForeground$2
-android.graphics.drawable.RippleForeground$3
-android.graphics.drawable.RippleForeground$4
-android.graphics.drawable.RippleForeground$LogDecelerateInterpolator
-android.graphics.drawable.ScaleDrawable
-android.graphics.drawable.ScaleDrawable$ScaleState
-android.graphics.drawable.ShapeDrawable
-android.graphics.drawable.ShapeDrawable$ShapeState
-android.graphics.drawable.StateListDrawable
-android.graphics.drawable.StateListDrawable$StateListState
-android.graphics.drawable.TransitionDrawable
-android.graphics.drawable.TransitionDrawable$TransitionState
-android.graphics.drawable.VectorDrawable
-android.graphics.drawable.VectorDrawable$VFullPath
-android.graphics.drawable.VectorDrawable$VFullPath$1
-android.graphics.drawable.VectorDrawable$VFullPath$10
-android.graphics.drawable.VectorDrawable$VFullPath$2
-android.graphics.drawable.VectorDrawable$VFullPath$3
-android.graphics.drawable.VectorDrawable$VFullPath$4
-android.graphics.drawable.VectorDrawable$VFullPath$5
-android.graphics.drawable.VectorDrawable$VFullPath$6
-android.graphics.drawable.VectorDrawable$VFullPath$7
-android.graphics.drawable.VectorDrawable$VFullPath$8
-android.graphics.drawable.VectorDrawable$VFullPath$9
-android.graphics.drawable.VectorDrawable$VGroup
-android.graphics.drawable.VectorDrawable$VGroup$1
-android.graphics.drawable.VectorDrawable$VGroup$2
-android.graphics.drawable.VectorDrawable$VGroup$3
-android.graphics.drawable.VectorDrawable$VGroup$4
-android.graphics.drawable.VectorDrawable$VGroup$5
-android.graphics.drawable.VectorDrawable$VGroup$6
-android.graphics.drawable.VectorDrawable$VGroup$7
-android.graphics.drawable.VectorDrawable$VGroup$8
-android.graphics.drawable.VectorDrawable$VGroup$9
-android.graphics.drawable.VectorDrawable$VObject
-android.graphics.drawable.VectorDrawable$VPath
-android.graphics.drawable.VectorDrawable$VPath$1
-android.graphics.drawable.VectorDrawable$VectorDrawableState
-android.graphics.drawable.VectorDrawable$VectorDrawableState$1
-android.graphics.drawable.shapes.OvalShape
-android.graphics.drawable.shapes.RectShape
-android.graphics.drawable.shapes.Shape
-android.graphics.fonts.FontVariationAxis
-android.graphics.pdf.PdfDocument
-android.graphics.pdf.PdfEditor
-android.graphics.pdf.PdfRenderer
-android.hardware.Camera
-android.hardware.Camera$CameraInfo
-android.hardware.Camera$Face
-android.hardware.ConsumerIrManager
-android.hardware.HardwareBuffer
-android.hardware.HardwareBuffer$1
-android.hardware.ICameraService
-android.hardware.ICameraService$Stub
-android.hardware.ICameraService$Stub$Proxy
-android.hardware.Sensor
-android.hardware.SensorEvent
-android.hardware.SensorEventListener
-android.hardware.SensorManager
-android.hardware.SerialManager
-android.hardware.SerialPort
-android.hardware.SystemSensorManager
-android.hardware.SystemSensorManager$BaseEventQueue
-android.hardware.SystemSensorManager$SensorEventQueue
-android.hardware.camera2.CameraAccessException
-android.hardware.camera2.CameraCharacteristics
-android.hardware.camera2.CameraCharacteristics$1
-android.hardware.camera2.CameraCharacteristics$2
-android.hardware.camera2.CameraCharacteristics$3
-android.hardware.camera2.CameraCharacteristics$4
-android.hardware.camera2.CameraCharacteristics$5
-android.hardware.camera2.CameraCharacteristics$Key
-android.hardware.camera2.CameraManager
-android.hardware.camera2.CameraMetadata
-android.hardware.camera2.CaptureRequest
-android.hardware.camera2.CaptureRequest$1
-android.hardware.camera2.CaptureRequest$2
-android.hardware.camera2.CaptureRequest$Key
-android.hardware.camera2.CaptureResult
-android.hardware.camera2.CaptureResult$1
-android.hardware.camera2.CaptureResult$2
-android.hardware.camera2.CaptureResult$3
-android.hardware.camera2.CaptureResult$Key
-android.hardware.camera2.DngCreator
-android.hardware.camera2.impl.CameraMetadataNative
-android.hardware.camera2.impl.CameraMetadataNative$1
-android.hardware.camera2.impl.CameraMetadataNative$10
-android.hardware.camera2.impl.CameraMetadataNative$11
-android.hardware.camera2.impl.CameraMetadataNative$12
-android.hardware.camera2.impl.CameraMetadataNative$13
-android.hardware.camera2.impl.CameraMetadataNative$14
-android.hardware.camera2.impl.CameraMetadataNative$15
-android.hardware.camera2.impl.CameraMetadataNative$16
-android.hardware.camera2.impl.CameraMetadataNative$17
-android.hardware.camera2.impl.CameraMetadataNative$18
-android.hardware.camera2.impl.CameraMetadataNative$19
-android.hardware.camera2.impl.CameraMetadataNative$2
-android.hardware.camera2.impl.CameraMetadataNative$3
-android.hardware.camera2.impl.CameraMetadataNative$4
-android.hardware.camera2.impl.CameraMetadataNative$5
-android.hardware.camera2.impl.CameraMetadataNative$6
-android.hardware.camera2.impl.CameraMetadataNative$7
-android.hardware.camera2.impl.CameraMetadataNative$8
-android.hardware.camera2.impl.CameraMetadataNative$9
-android.hardware.camera2.impl.CameraMetadataNative$Key
-android.hardware.camera2.impl.GetCommand
-android.hardware.camera2.impl.SetCommand
-android.hardware.camera2.legacy.LegacyCameraDevice
-android.hardware.camera2.legacy.PerfMeasurement
-android.hardware.camera2.marshal.MarshalQueryable
-android.hardware.camera2.marshal.MarshalRegistry
-android.hardware.camera2.marshal.impl.MarshalQueryableArray
-android.hardware.camera2.marshal.impl.MarshalQueryableBlackLevelPattern
-android.hardware.camera2.marshal.impl.MarshalQueryableBoolean
-android.hardware.camera2.marshal.impl.MarshalQueryableColorSpaceTransform
-android.hardware.camera2.marshal.impl.MarshalQueryableEnum
-android.hardware.camera2.marshal.impl.MarshalQueryableHighSpeedVideoConfiguration
-android.hardware.camera2.marshal.impl.MarshalQueryableMeteringRectangle
-android.hardware.camera2.marshal.impl.MarshalQueryableNativeByteToInteger
-android.hardware.camera2.marshal.impl.MarshalQueryablePair
-android.hardware.camera2.marshal.impl.MarshalQueryableParcelable
-android.hardware.camera2.marshal.impl.MarshalQueryablePrimitive
-android.hardware.camera2.marshal.impl.MarshalQueryableRange
-android.hardware.camera2.marshal.impl.MarshalQueryableRect
-android.hardware.camera2.marshal.impl.MarshalQueryableReprocessFormatsMap
-android.hardware.camera2.marshal.impl.MarshalQueryableRggbChannelVector
-android.hardware.camera2.marshal.impl.MarshalQueryableSize
-android.hardware.camera2.marshal.impl.MarshalQueryableSizeF
-android.hardware.camera2.marshal.impl.MarshalQueryableStreamConfiguration
-android.hardware.camera2.marshal.impl.MarshalQueryableStreamConfigurationDuration
-android.hardware.camera2.marshal.impl.MarshalQueryableString
-android.hardware.camera2.params.BlackLevelPattern
-android.hardware.camera2.params.ColorSpaceTransform
-android.hardware.camera2.params.Face
-android.hardware.camera2.params.HighSpeedVideoConfiguration
-android.hardware.camera2.params.LensShadingMap
-android.hardware.camera2.params.MeteringRectangle
-android.hardware.camera2.params.ReprocessFormatsMap
-android.hardware.camera2.params.RggbChannelVector
-android.hardware.camera2.params.StreamConfiguration
-android.hardware.camera2.params.StreamConfigurationDuration
-android.hardware.camera2.params.StreamConfigurationMap
-android.hardware.camera2.params.TonemapCurve
-android.hardware.camera2.utils.TypeReference
-android.hardware.camera2.utils.TypeReference$SpecializedTypeReference
-android.hardware.display.DisplayManager
-android.hardware.display.DisplayManager$DisplayListener
-android.hardware.display.DisplayManagerGlobal
-android.hardware.display.DisplayManagerGlobal$DisplayListenerDelegate
-android.hardware.display.DisplayManagerGlobal$DisplayManagerCallback
-android.hardware.display.IDisplayManager
-android.hardware.display.IDisplayManager$Stub
-android.hardware.display.IDisplayManager$Stub$Proxy
-android.hardware.display.IDisplayManagerCallback
-android.hardware.display.IDisplayManagerCallback$Stub
-android.hardware.fingerprint.FingerprintManager
-android.hardware.hdmi.HdmiControlManager
-android.hardware.input.IInputDevicesChangedListener
-android.hardware.input.IInputDevicesChangedListener$Stub
-android.hardware.input.IInputManager
-android.hardware.input.IInputManager$Stub
-android.hardware.input.IInputManager$Stub$Proxy
-android.hardware.input.InputDeviceIdentifier
-android.hardware.input.InputDeviceIdentifier$1
-android.hardware.input.InputManager
-android.hardware.input.InputManager$InputDevicesChangedListener
-android.hardware.location.ActivityRecognitionHardware
-android.hardware.location.ContextHubManager
-android.hardware.location.IActivityRecognitionHardware
-android.hardware.location.IActivityRecognitionHardware$Stub
-android.hardware.radio.RadioManager
-android.hardware.radio.RadioManager$AmBandConfig
-android.hardware.radio.RadioManager$AmBandConfig$1
-android.hardware.radio.RadioManager$AmBandDescriptor
-android.hardware.radio.RadioManager$AmBandDescriptor$1
-android.hardware.radio.RadioManager$BandConfig
-android.hardware.radio.RadioManager$BandConfig$1
-android.hardware.radio.RadioManager$BandDescriptor
-android.hardware.radio.RadioManager$BandDescriptor$1
-android.hardware.radio.RadioManager$FmBandConfig
-android.hardware.radio.RadioManager$FmBandConfig$1
-android.hardware.radio.RadioManager$FmBandDescriptor
-android.hardware.radio.RadioManager$FmBandDescriptor$1
-android.hardware.radio.RadioManager$ModuleProperties
-android.hardware.radio.RadioManager$ModuleProperties$1
-android.hardware.radio.RadioManager$ProgramInfo
-android.hardware.radio.RadioManager$ProgramInfo$1
-android.hardware.radio.RadioMetadata
-android.hardware.radio.RadioMetadata$1
-android.hardware.radio.RadioModule
-android.hardware.radio.RadioTuner
-android.hardware.soundtrigger.SoundTrigger
-android.hardware.soundtrigger.SoundTrigger$ConfidenceLevel
-android.hardware.soundtrigger.SoundTrigger$ConfidenceLevel$1
-android.hardware.soundtrigger.SoundTrigger$GenericRecognitionEvent
-android.hardware.soundtrigger.SoundTrigger$GenericRecognitionEvent$1
-android.hardware.soundtrigger.SoundTrigger$GenericSoundModel
-android.hardware.soundtrigger.SoundTrigger$Keyphrase
-android.hardware.soundtrigger.SoundTrigger$Keyphrase$1
-android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionEvent
-android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionEvent$1
-android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionExtra
-android.hardware.soundtrigger.SoundTrigger$KeyphraseRecognitionExtra$1
-android.hardware.soundtrigger.SoundTrigger$KeyphraseSoundModel
-android.hardware.soundtrigger.SoundTrigger$KeyphraseSoundModel$1
-android.hardware.soundtrigger.SoundTrigger$ModuleProperties
-android.hardware.soundtrigger.SoundTrigger$ModuleProperties$1
-android.hardware.soundtrigger.SoundTrigger$RecognitionConfig
-android.hardware.soundtrigger.SoundTrigger$RecognitionConfig$1
-android.hardware.soundtrigger.SoundTrigger$RecognitionEvent
-android.hardware.soundtrigger.SoundTrigger$RecognitionEvent$1
-android.hardware.soundtrigger.SoundTrigger$SoundModel
-android.hardware.soundtrigger.SoundTrigger$SoundModelEvent
-android.hardware.soundtrigger.SoundTrigger$SoundModelEvent$1
-android.hardware.soundtrigger.SoundTriggerModule
-android.hardware.usb.UsbDevice
-android.hardware.usb.UsbDeviceConnection
-android.hardware.usb.UsbManager
-android.hardware.usb.UsbRequest
-android.icu.impl.BMPSet
-android.icu.impl.CacheBase
-android.icu.impl.CacheValue
-android.icu.impl.CacheValue$NullValue
-android.icu.impl.CacheValue$SoftValue
-android.icu.impl.CacheValue$Strength
-android.icu.impl.CaseMapImpl
-android.icu.impl.CaseMapImpl$StringContextIterator
-android.icu.impl.CharTrie
-android.icu.impl.ClassLoaderUtil
-android.icu.impl.CurrencyData
-android.icu.impl.CurrencyData$CurrencyDisplayInfo
-android.icu.impl.CurrencyData$CurrencyDisplayInfoProvider
-android.icu.impl.CurrencyData$CurrencySpacingInfo
-android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingPattern
-android.icu.impl.CurrencyData$CurrencySpacingInfo$SpacingType
-android.icu.impl.ICUBinary
-android.icu.impl.ICUBinary$Authenticate
-android.icu.impl.ICUBinary$DatPackageReader
-android.icu.impl.ICUBinary$DatPackageReader$IsAcceptable
-android.icu.impl.ICUBinary$DataFile
-android.icu.impl.ICUBinary$PackageDataFile
-android.icu.impl.ICUCache
-android.icu.impl.ICUConfig
-android.icu.impl.ICUCurrencyDisplayInfoProvider
-android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo
-android.icu.impl.ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$SpacingInfoSink
-android.icu.impl.ICUCurrencyMetaInfo
-android.icu.impl.ICUCurrencyMetaInfo$Collector
-android.icu.impl.ICUCurrencyMetaInfo$CurrencyCollector
-android.icu.impl.ICUCurrencyMetaInfo$UniqueList
-android.icu.impl.ICUData
-android.icu.impl.ICUDebug
-android.icu.impl.ICULocaleService
-android.icu.impl.ICULocaleService$ICUResourceBundleFactory
-android.icu.impl.ICULocaleService$LocaleKey
-android.icu.impl.ICULocaleService$LocaleKeyFactory
-android.icu.impl.ICUNotifier
-android.icu.impl.ICURWLock
-android.icu.impl.ICUResourceBundle
-android.icu.impl.ICUResourceBundle$1
-android.icu.impl.ICUResourceBundle$2
-android.icu.impl.ICUResourceBundle$3
-android.icu.impl.ICUResourceBundle$3$1
-android.icu.impl.ICUResourceBundle$4
-android.icu.impl.ICUResourceBundle$AvailEntry
-android.icu.impl.ICUResourceBundle$Loader
-android.icu.impl.ICUResourceBundle$OpenType
-android.icu.impl.ICUResourceBundle$WholeBundle
-android.icu.impl.ICUResourceBundleImpl
-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.ICUResourceBundleReader
-android.icu.impl.ICUResourceBundleReader$Array
-android.icu.impl.ICUResourceBundleReader$Array16
-android.icu.impl.ICUResourceBundleReader$Array32
-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
-android.icu.impl.ICUResourceBundleReader$ResourceCache$Level
-android.icu.impl.ICUResourceBundleReader$Table
-android.icu.impl.ICUResourceBundleReader$Table16
-android.icu.impl.ICUResourceBundleReader$Table1632
-android.icu.impl.ICUService
-android.icu.impl.ICUService$CacheEntry
-android.icu.impl.ICUService$Factory
-android.icu.impl.ICUService$Key
-android.icu.impl.IDNA2003
-android.icu.impl.LocaleIDParser
-android.icu.impl.LocaleIDs
-android.icu.impl.Norm2AllModes
-android.icu.impl.Norm2AllModes$1
-android.icu.impl.Norm2AllModes$ComposeNormalizer2
-android.icu.impl.Norm2AllModes$DecomposeNormalizer2
-android.icu.impl.Norm2AllModes$FCDNormalizer2
-android.icu.impl.Norm2AllModes$NFKCSingleton
-android.icu.impl.Norm2AllModes$NoopNormalizer2
-android.icu.impl.Norm2AllModes$Norm2AllModesSingleton
-android.icu.impl.Norm2AllModes$Normalizer2WithImpl
-android.icu.impl.Normalizer2Impl
-android.icu.impl.Normalizer2Impl$1
-android.icu.impl.Normalizer2Impl$IsAcceptable
-android.icu.impl.Pair
-android.icu.impl.PatternProps
-android.icu.impl.PluralRulesLoader
-android.icu.impl.ReplaceableUCharacterIterator
-android.icu.impl.RuleCharacterIterator
-android.icu.impl.SimpleCache
-android.icu.impl.SoftCache
-android.icu.impl.StandardPlural
-android.icu.impl.StringPrepDataReader
-android.icu.impl.Trie
-android.icu.impl.Trie$DataManipulate
-android.icu.impl.Trie$DefaultGetFoldingOffset
-android.icu.impl.Trie2
-android.icu.impl.Trie2$1
-android.icu.impl.Trie2$Range
-android.icu.impl.Trie2$Trie2Iterator
-android.icu.impl.Trie2$UTrie2Header
-android.icu.impl.Trie2$ValueMapper
-android.icu.impl.Trie2$ValueWidth
-android.icu.impl.Trie2_16
-android.icu.impl.UBiDiProps
-android.icu.impl.UBiDiProps$IsAcceptable
-android.icu.impl.UCaseProps
-android.icu.impl.UCaseProps$ContextIterator
-android.icu.impl.UCaseProps$IsAcceptable
-android.icu.impl.UCharacterProperty
-android.icu.impl.UCharacterProperty$1
-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$2
-android.icu.impl.UCharacterProperty$20
-android.icu.impl.UCharacterProperty$21
-android.icu.impl.UCharacterProperty$22
-android.icu.impl.UCharacterProperty$23
-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.URLHandler$URLVisitor
-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.Utility
-android.icu.impl.locale.AsciiUtil
-android.icu.impl.locale.BaseLocale
-android.icu.impl.locale.BaseLocale$Cache
-android.icu.impl.locale.BaseLocale$Key
-android.icu.impl.locale.LocaleObjectCache
-android.icu.impl.locale.LocaleObjectCache$CacheEntry
-android.icu.impl.locale.LocaleSyntaxException
-android.icu.lang.UCharacter
-android.icu.lang.UCharacterEnums$ECharacterCategory
-android.icu.lang.UCharacterEnums$ECharacterDirection
-android.icu.math.BigDecimal
-android.icu.math.MathContext
-android.icu.text.BreakIterator
-android.icu.text.BreakIterator$BreakIteratorCache
-android.icu.text.BreakIterator$BreakIteratorServiceShim
-android.icu.text.BreakIteratorFactory
-android.icu.text.BreakIteratorFactory$BFService
-android.icu.text.BreakIteratorFactory$BFService$1RBBreakIteratorFactory
-android.icu.text.CaseMap
-android.icu.text.CaseMap$Upper
-android.icu.text.CurrencyDisplayNames
-android.icu.text.CurrencyMetaInfo
-android.icu.text.CurrencyMetaInfo$CurrencyDigits
-android.icu.text.CurrencyMetaInfo$CurrencyFilter
-android.icu.text.DecimalFormat
-android.icu.text.DecimalFormat$Unit
-android.icu.text.DecimalFormatSymbols
-android.icu.text.DecimalFormatSymbols$1
-android.icu.text.DecimalFormatSymbols$CacheData
-android.icu.text.DecimalFormatSymbols$DecFmtDataSink
-android.icu.text.DigitList
-android.icu.text.DisplayContext
-android.icu.text.DisplayContext$Type
-android.icu.text.IDNA
-android.icu.text.LanguageBreakEngine
-android.icu.text.Normalizer
-android.icu.text.Normalizer$FCDMode
-android.icu.text.Normalizer$Mode
-android.icu.text.Normalizer$ModeImpl
-android.icu.text.Normalizer$NFCMode
-android.icu.text.Normalizer$NFDMode
-android.icu.text.Normalizer$NFKCMode
-android.icu.text.Normalizer$NFKDMode
-android.icu.text.Normalizer$NFKDModeImpl
-android.icu.text.Normalizer$NONEMode
-android.icu.text.Normalizer$QuickCheckResult
-android.icu.text.Normalizer2
-android.icu.text.NumberFormat
-android.icu.text.NumberFormat$Field
-android.icu.text.NumberingSystem
-android.icu.text.NumberingSystem$1
-android.icu.text.NumberingSystem$2
-android.icu.text.NumberingSystem$LocaleLookupData
-android.icu.text.PluralRanges
-android.icu.text.PluralRanges$Matrix
-android.icu.text.PluralRules
-android.icu.text.PluralRules$1
-android.icu.text.PluralRules$AndConstraint
-android.icu.text.PluralRules$BinaryConstraint
-android.icu.text.PluralRules$Constraint
-android.icu.text.PluralRules$Factory
-android.icu.text.PluralRules$FixedDecimal
-android.icu.text.PluralRules$FixedDecimalRange
-android.icu.text.PluralRules$FixedDecimalSamples
-android.icu.text.PluralRules$Operand
-android.icu.text.PluralRules$PluralType
-android.icu.text.PluralRules$RangeConstraint
-android.icu.text.PluralRules$Rule
-android.icu.text.PluralRules$RuleList
-android.icu.text.PluralRules$SampleType
-android.icu.text.PluralRules$SimpleTokenizer
-android.icu.text.RBBIDataWrapper
-android.icu.text.RBBIDataWrapper$IsAcceptable
-android.icu.text.RBBIDataWrapper$RBBIDataHeader
-android.icu.text.RBBIDataWrapper$TrieFoldingFunc
-android.icu.text.Replaceable
-android.icu.text.ReplaceableString
-android.icu.text.RuleBasedBreakIterator
-android.icu.text.RuleBasedBreakIterator$LookAheadResults
-android.icu.text.StringPrep
-android.icu.text.StringPrepParseException
-android.icu.text.TimeZoneNames$NameType
-android.icu.text.UCharacterIterator
-android.icu.text.UFieldPosition
-android.icu.text.UFormat
-android.icu.text.UForwardCharacterIterator
-android.icu.text.UTF16
-android.icu.text.UnhandledBreakEngine
-android.icu.text.UnicodeFilter
-android.icu.text.UnicodeMatcher
-android.icu.text.UnicodeSet
-android.icu.util.Currency
-android.icu.util.Currency$1
-android.icu.util.Currency$CurrencyUsage
-android.icu.util.Currency$EquivalenceRelation
-android.icu.util.Freezable
-android.icu.util.MeasureUnit
-android.icu.util.MeasureUnit$1
-android.icu.util.MeasureUnit$2
-android.icu.util.MeasureUnit$3
-android.icu.util.MeasureUnit$Factory
-android.icu.util.TimeUnit
-android.icu.util.TimeZone
-android.icu.util.TimeZone$ConstantZone
-android.icu.util.ULocale
-android.icu.util.ULocale$1
-android.icu.util.ULocale$2
-android.icu.util.ULocale$Category
-android.icu.util.ULocale$JDKLocaleHelper
-android.icu.util.ULocale$Type
-android.icu.util.UResourceBundle
-android.icu.util.UResourceBundle$RootType
-android.icu.util.UResourceTypeMismatchException
-android.icu.util.VersionInfo
-android.location.BatchedLocationCallbackTransport
-android.location.BatchedLocationCallbackTransport$CallbackTransport
-android.location.CountryDetector
-android.location.GnssMeasurementCallbackTransport
-android.location.GnssMeasurementCallbackTransport$ListenerTransport
-android.location.GnssNavigationMessageCallbackTransport
-android.location.GnssNavigationMessageCallbackTransport$ListenerTransport
-android.location.IBatchedLocationCallback
-android.location.IBatchedLocationCallback$Stub
-android.location.IGnssMeasurementsListener
-android.location.IGnssMeasurementsListener$Stub
-android.location.IGnssNavigationMessageListener
-android.location.IGnssNavigationMessageListener$Stub
-android.location.ILocationManager
-android.location.ILocationManager$Stub
-android.location.ILocationManager$Stub$Proxy
-android.location.LocalListenerHelper
-android.location.Location
-android.location.LocationListener
-android.location.LocationManager
-android.location.LocationRequest
-android.location.LocationRequest$1
-android.media.AudioAttributes
-android.media.AudioAttributes$1
-android.media.AudioAttributes$Builder
-android.media.AudioDevicePort
-android.media.AudioDevicePortConfig
-android.media.AudioFormat
-android.media.AudioFormat$1
-android.media.AudioGain
-android.media.AudioGainConfig
-android.media.AudioHandle
-android.media.AudioManager
-android.media.AudioManager$1
-android.media.AudioManager$2
-android.media.AudioManager$3
-android.media.AudioManager$ServiceEventHandlerDelegate
-android.media.AudioManager$ServiceEventHandlerDelegate$1
-android.media.AudioMixPort
-android.media.AudioMixPortConfig
-android.media.AudioPatch
-android.media.AudioPort
-android.media.AudioPortConfig
-android.media.AudioPortEventHandler
-android.media.AudioRecord
-android.media.AudioRouting
-android.media.AudioSystem
-android.media.AudioTimestamp
-android.media.AudioTrack
-android.media.CamcorderProfile
-android.media.CameraProfile
-android.media.DecoderCapabilities
-android.media.EncoderCapabilities
-android.media.IAudioFocusDispatcher
-android.media.IAudioFocusDispatcher$Stub
-android.media.IAudioService
-android.media.IAudioService$Stub
-android.media.IAudioService$Stub$Proxy
-android.media.IMediaHTTPConnection
-android.media.IMediaHTTPConnection$Stub
-android.media.IPlaybackConfigDispatcher
-android.media.IPlaybackConfigDispatcher$Stub
-android.media.IPlayer
-android.media.IPlayer$Stub
-android.media.IRecordingConfigDispatcher
-android.media.IRecordingConfigDispatcher$Stub
-android.media.IRingtonePlayer
-android.media.IRingtonePlayer$Stub
-android.media.Image
-android.media.ImageReader
-android.media.ImageReader$SurfaceImage
-android.media.ImageWriter
-android.media.ImageWriter$WriterSurfaceImage
-android.media.JetPlayer
-android.media.MediaCodec
-android.media.MediaCodecList
-android.media.MediaCrypto
-android.media.MediaDescrambler
-android.media.MediaDrm
-android.media.MediaExtractor
-android.media.MediaFormat
-android.media.MediaHTTPConnection
-android.media.MediaMetadataRetriever
-android.media.MediaMuxer
-android.media.MediaPlayer
-android.media.MediaRecorder
-android.media.MediaRouter
-android.media.MediaScanner
-android.media.MediaSync
-android.media.PlaybackParams
-android.media.PlaybackParams$1
-android.media.PlayerBase
-android.media.PlayerBase$IAppOpsCallbackWrapper
-android.media.PlayerBase$IPlayerWrapper
-android.media.PlayerBase$PlayerIdCard
-android.media.PlayerBase$PlayerIdCard$1
-android.media.RemoteDisplay
-android.media.ResampleInputStream
-android.media.SoundPool
-android.media.SubtitleController$Listener
-android.media.ToneGenerator
-android.media.VolumeAutomation
-android.media.VolumeShaper$Configuration
-android.media.VolumeShaper$Configuration$1
-android.media.VolumeShaper$Configuration$Builder
-android.media.VolumeShaper$Operation
-android.media.VolumeShaper$Operation$1
-android.media.VolumeShaper$Operation$Builder
-android.media.VolumeShaper$State
-android.media.VolumeShaper$State$1
-android.media.audiopolicy.AudioMix
-android.media.audiopolicy.AudioMixingRule
-android.media.audiopolicy.AudioMixingRule$AudioMixMatchCriterion
-android.media.midi.MidiManager
-android.media.projection.MediaProjectionManager
-android.media.session.IActiveSessionsListener
-android.media.session.IActiveSessionsListener$Stub
-android.media.session.ISessionController
-android.media.session.ISessionController$Stub
-android.media.session.ISessionControllerCallback
-android.media.session.ISessionControllerCallback$Stub
-android.media.session.ISessionManager
-android.media.session.ISessionManager$Stub
-android.media.session.MediaController
-android.media.session.MediaController$CallbackStub
-android.media.session.MediaController$TransportControls
-android.media.session.MediaSession$Token
-android.media.session.MediaSession$Token$1
-android.media.session.MediaSessionManager
-android.media.session.PlaybackState
-android.media.session.PlaybackState$1
-android.media.session.PlaybackState$CustomAction
-android.media.session.PlaybackState$CustomAction$1
-android.media.soundtrigger.SoundTriggerManager
-android.media.tv.TvInputManager
-android.mtp.MtpDatabase
-android.mtp.MtpDevice
-android.mtp.MtpDeviceInfo
-android.mtp.MtpEvent
-android.mtp.MtpObjectInfo
-android.mtp.MtpPropertyGroup
-android.mtp.MtpPropertyList
-android.mtp.MtpServer
-android.mtp.MtpStorage
-android.mtp.MtpStorageInfo
-android.net.ConnectivityManager
-android.net.ConnectivityManager$CallbackHandler
-android.net.ConnectivityManager$NetworkCallback
-android.net.ConnectivityThread
-android.net.Credentials
-android.net.DhcpInfo
-android.net.DhcpInfo$1
-android.net.EthernetManager
-android.net.IConnectivityManager
-android.net.IConnectivityManager$Stub
-android.net.IConnectivityManager$Stub$Proxy
-android.net.INetworkPolicyManager
-android.net.INetworkPolicyManager$Stub
-android.net.INetworkScoreService
-android.net.INetworkScoreService$Stub
-android.net.INetworkScoreService$Stub$Proxy
-android.net.INetworkStatsService
-android.net.INetworkStatsService$Stub
-android.net.INetworkStatsService$Stub$Proxy
-android.net.IpConfiguration
-android.net.IpConfiguration$1
-android.net.IpConfiguration$IpAssignment
-android.net.IpConfiguration$ProxySettings
-android.net.IpPrefix
-android.net.IpPrefix$1
-android.net.IpSecManager
-android.net.LinkAddress
-android.net.LinkAddress$1
-android.net.LinkProperties
-android.net.LinkProperties$1
-android.net.LocalServerSocket
-android.net.LocalSocket
-android.net.LocalSocketAddress
-android.net.LocalSocketAddress$Namespace
-android.net.LocalSocketImpl
-android.net.LocalSocketImpl$SocketInputStream
-android.net.LocalSocketImpl$SocketOutputStream
-android.net.Network
-android.net.Network$1
-android.net.NetworkCapabilities
-android.net.NetworkCapabilities$1
-android.net.NetworkFactory
-android.net.NetworkInfo
-android.net.NetworkInfo$1
-android.net.NetworkInfo$DetailedState
-android.net.NetworkInfo$State
-android.net.NetworkKey
-android.net.NetworkKey$1
-android.net.NetworkPolicyManager
-android.net.NetworkRequest
-android.net.NetworkRequest$1
-android.net.NetworkRequest$Builder
-android.net.NetworkRequest$Type
-android.net.NetworkScoreManager
-android.net.NetworkSpecifier
-android.net.NetworkStats
-android.net.NetworkStats$1
-android.net.NetworkUtils
-android.net.Proxy
-android.net.ProxyInfo
-android.net.RouteInfo
-android.net.RouteInfo$1
-android.net.RssiCurve
-android.net.RssiCurve$1
-android.net.SSLCertificateSocketFactory
-android.net.SSLCertificateSocketFactory$1
-android.net.SSLSessionCache
-android.net.ScoredNetwork
-android.net.ScoredNetwork$1
-android.net.StaticIpConfiguration
-android.net.TrafficStats
-android.net.Uri
-android.net.Uri$1
-android.net.Uri$AbstractHierarchicalUri
-android.net.Uri$AbstractPart
-android.net.Uri$Builder
-android.net.Uri$HierarchicalUri
-android.net.Uri$OpaqueUri
-android.net.Uri$Part
-android.net.Uri$Part$EmptyPart
-android.net.Uri$PathPart
-android.net.Uri$PathSegments
-android.net.Uri$PathSegmentsBuilder
-android.net.Uri$StringUri
-android.net.WifiKey
-android.net.WifiKey$1
-android.net.nsd.NsdManager
-android.net.wifi.IWifiManager
-android.net.wifi.IWifiManager$Stub
-android.net.wifi.IWifiManager$Stub$Proxy
-android.net.wifi.ParcelUtil
-android.net.wifi.RttManager
-android.net.wifi.ScanResult
-android.net.wifi.ScanResult$1
-android.net.wifi.ScanResult$InformationElement
-android.net.wifi.SupplicantState
-android.net.wifi.SupplicantState$1
-android.net.wifi.WifiConfiguration
-android.net.wifi.WifiConfiguration$1
-android.net.wifi.WifiConfiguration$NetworkSelectionStatus
-android.net.wifi.WifiEnterpriseConfig
-android.net.wifi.WifiEnterpriseConfig$1
-android.net.wifi.WifiInfo
-android.net.wifi.WifiInfo$1
-android.net.wifi.WifiManager
-android.net.wifi.WifiManager$WifiLock
-android.net.wifi.WifiScanner
-android.net.wifi.WifiSsid
-android.net.wifi.WifiSsid$1
-android.net.wifi.aware.WifiAwareManager
-android.net.wifi.p2p.WifiP2pManager
-android.nfc.NfcManager
-android.opengl.EGL14
-android.opengl.EGLConfig
-android.opengl.EGLContext
-android.opengl.EGLDisplay
-android.opengl.EGLExt
-android.opengl.EGLObjectHandle
-android.opengl.EGLSurface
-android.opengl.ETC1
-android.opengl.GLES10
-android.opengl.GLES10Ext
-android.opengl.GLES11
-android.opengl.GLES11Ext
-android.opengl.GLES20
-android.opengl.GLES30
-android.opengl.GLES31
-android.opengl.GLES31Ext
-android.opengl.GLES32
-android.opengl.GLUtils
-android.opengl.Matrix
-android.opengl.Visibility
-android.os.-$Lambda$6x30vPJhBKUfNY8tswxuZo3DCe0
-android.os.AsyncResult
-android.os.AsyncTask$1
-android.os.AsyncTask$2
-android.os.AsyncTask$3
-android.os.AsyncTask$AsyncTaskResult
-android.os.AsyncTask$InternalHandler
-android.os.AsyncTask$SerialExecutor
-android.os.AsyncTask$SerialExecutor$1
-android.os.AsyncTask$Status
-android.os.AsyncTask$WorkerRunnable
-android.os.BadParcelableException
-android.os.BaseBundle
-android.os.BaseBundle$NoImagePreloadHolder
-android.os.BatteryManager
-android.os.Binder
-android.os.BinderProxy
-android.os.Build
-android.os.Build$VERSION
-android.os.Bundle
-android.os.Bundle$1
-android.os.CancellationSignal
-android.os.CancellationSignal$OnCancelListener
-android.os.CancellationSignal$Transport
-android.os.ConditionVariable
-android.os.DeadObjectException
-android.os.DeadSystemException
-android.os.Debug
-android.os.Debug$MemoryInfo
-android.os.Debug$MemoryInfo$1
-android.os.DropBoxManager
-android.os.Environment
-android.os.Environment$UserEnvironment
-android.os.FactoryTest
-android.os.FileObserver$ObserverThread
-android.os.FileUtils
-android.os.GraphicsEnvironment
-android.os.Handler
-android.os.Handler$Callback
-android.os.Handler$MessengerImpl
-android.os.HandlerThread
-android.os.HardwarePropertiesManager
-android.os.HwBinder
-android.os.HwBlob
-android.os.HwParcel
-android.os.HwRemoteBinder
-android.os.IBatteryPropertiesRegistrar
-android.os.IBatteryPropertiesRegistrar$Stub
-android.os.IBatteryPropertiesRegistrar$Stub$Proxy
-android.os.IBinder
-android.os.IBinder$DeathRecipient
-android.os.ICancellationSignal
-android.os.ICancellationSignal$Stub
-android.os.IDeviceIdleController
-android.os.IDeviceIdleController$Stub
-android.os.IHwBinder
-android.os.IInterface
-android.os.IMessenger
-android.os.IMessenger$Stub
-android.os.IMessenger$Stub$Proxy
-android.os.INetworkManagementService
-android.os.INetworkManagementService$Stub
-android.os.INetworkManagementService$Stub$Proxy
-android.os.IPowerManager
-android.os.IPowerManager$Stub
-android.os.IPowerManager$Stub$Proxy
-android.os.IRemoteCallback
-android.os.IServiceManager
-android.os.IUserManager
-android.os.IUserManager$Stub
-android.os.IUserManager$Stub$Proxy
-android.os.IVibratorService
-android.os.IVibratorService$Stub
-android.os.IncidentManager
-android.os.LocaleList
-android.os.LocaleList$1
-android.os.Looper
-android.os.MemoryFile
-android.os.Message
-android.os.Message$1
-android.os.MessageQueue
-android.os.MessageQueue$IdleHandler
-android.os.Messenger
-android.os.Messenger$1
-android.os.OperationCanceledException
-android.os.Parcel
-android.os.Parcel$1
-android.os.ParcelFileDescriptor
-android.os.ParcelFileDescriptor$1
-android.os.ParcelUuid
-android.os.ParcelUuid$1
-android.os.Parcelable
-android.os.Parcelable$ClassLoaderCreator
-android.os.Parcelable$Creator
-android.os.ParcelableException
-android.os.PatternMatcher
-android.os.PatternMatcher$1
-android.os.PersistableBundle
-android.os.PersistableBundle$1
-android.os.PowerManager
-android.os.PowerManager$WakeLock
-android.os.PowerManager$WakeLock$1
-android.os.Process
-android.os.RecoverySystem
-android.os.Registrant
-android.os.RemoteCallbackList
-android.os.RemoteException
-android.os.ResultReceiver
-android.os.SELinux
-android.os.Seccomp
-android.os.ServiceManager
-android.os.ServiceManager$ServiceNotFoundException
-android.os.ServiceManagerNative
-android.os.ServiceManagerProxy
-android.os.ServiceSpecificException
-android.os.ShellCallback
-android.os.StatFs
-android.os.StrictMode
-android.os.StrictMode$1
-android.os.StrictMode$2
-android.os.StrictMode$3
-android.os.StrictMode$4
-android.os.StrictMode$5
-android.os.StrictMode$6
-android.os.StrictMode$7
-android.os.StrictMode$8
-android.os.StrictMode$9
-android.os.StrictMode$AndroidBlockGuardPolicy
-android.os.StrictMode$AndroidBlockGuardPolicy$1
-android.os.StrictMode$AndroidCloseGuardReporter
-android.os.StrictMode$InstanceCountViolation
-android.os.StrictMode$InstanceTracker
-android.os.StrictMode$LogStackTrace
-android.os.StrictMode$Span
-android.os.StrictMode$StrictModeDiskReadViolation
-android.os.StrictMode$StrictModeDiskWriteViolation
-android.os.StrictMode$StrictModeViolation
-android.os.StrictMode$ThreadPolicy
-android.os.StrictMode$ThreadPolicy$Builder
-android.os.StrictMode$ThreadSpanState
-android.os.StrictMode$ViolationInfo
-android.os.StrictMode$ViolationInfo$1
-android.os.StrictMode$VmPolicy
-android.os.StrictMode$VmPolicy$Builder
-android.os.SystemClock
-android.os.SystemProperties
-android.os.SystemVibrator
-android.os.Trace
-android.os.Trace$1
-android.os.UEventObserver
-android.os.UpdateLock
-android.os.UserHandle
-android.os.UserHandle$1
-android.os.UserManager
-android.os.Vibrator
-android.os.VintfObject
-android.os.VintfRuntimeInfo
-android.os.WorkSource
-android.os.WorkSource$1
-android.os.ZygoteProcess
-android.os.ZygoteStartFailedEx
-android.os.health.SystemHealthManager
-android.os.storage.IObbActionListener
-android.os.storage.IObbActionListener$Stub
-android.os.storage.IStorageManager
-android.os.storage.IStorageManager$Stub
-android.os.storage.IStorageManager$Stub$Proxy
-android.os.storage.StorageManager
-android.os.storage.StorageManager$ObbActionListener
-android.os.storage.StorageVolume
-android.os.storage.StorageVolume$1
-android.preference.PreferenceManager
-android.print.PrintManager
-android.provider.-$Lambda$87WmhkvObehVg0OMBzwa_MTVV8g
-android.provider.-$Lambda$a7Jyr6j_Mb70hHJ2ssL1AAhKh4c
-android.provider.BaseColumns
-android.provider.CalendarContract$CalendarColumns
-android.provider.CalendarContract$CalendarSyncColumns
-android.provider.CalendarContract$EventsColumns
-android.provider.CalendarContract$SyncColumns
-android.provider.ContactsContract
-android.provider.ContactsContract$CommonDataKinds$BaseTypes
-android.provider.ContactsContract$CommonDataKinds$CommonColumns
-android.provider.ContactsContract$ContactCounts
-android.provider.ContactsContract$ContactNameColumns
-android.provider.ContactsContract$ContactOptionsColumns
-android.provider.ContactsContract$ContactStatusColumns
-android.provider.ContactsContract$ContactsColumns
-android.provider.ContactsContract$DataColumns
-android.provider.ContactsContract$DataColumnsWithJoins
-android.provider.ContactsContract$DataUsageStatColumns
-android.provider.ContactsContract$RawContactsColumns
-android.provider.ContactsContract$StatusColumns
-android.provider.Downloads$Impl
-android.provider.FontsContract
-android.provider.FontsContract$1
-android.provider.Settings
-android.provider.Settings$ContentProviderHolder
-android.provider.Settings$GenerationTracker
-android.provider.Settings$Global
-android.provider.Settings$NameValueCache
-android.provider.Settings$NameValueTable
-android.provider.Settings$Secure
-android.provider.Settings$SettingNotFoundException
-android.provider.Settings$System
-android.provider.Settings$System$1
-android.provider.Settings$System$2
-android.provider.Settings$System$3
-android.provider.Settings$System$4
-android.provider.Settings$System$5
-android.provider.Settings$System$6
-android.provider.Settings$System$7
-android.provider.Settings$System$8
-android.provider.Settings$System$9
-android.provider.Settings$System$DiscreteValueValidator
-android.provider.Settings$System$InclusiveFloatRangeValidator
-android.provider.Settings$System$InclusiveIntegerRangeValidator
-android.provider.Settings$System$Validator
-android.renderscript.RenderScriptCacheDir
-android.security.keystore.AndroidKeyStoreBCWorkaroundProvider
-android.security.keystore.AndroidKeyStoreProvider
-android.security.net.config.ApplicationConfig
-android.security.net.config.CertificateSource
-android.security.net.config.CertificatesEntryRef
-android.security.net.config.ConfigNetworkSecurityPolicy
-android.security.net.config.ConfigSource
-android.security.net.config.DirectoryCertificateSource
-android.security.net.config.DirectoryCertificateSource$1
-android.security.net.config.DirectoryCertificateSource$3
-android.security.net.config.DirectoryCertificateSource$CertSelector
-android.security.net.config.ManifestConfigSource
-android.security.net.config.ManifestConfigSource$DefaultConfigSource
-android.security.net.config.NetworkSecurityConfig
-android.security.net.config.NetworkSecurityConfig$1
-android.security.net.config.NetworkSecurityConfig$Builder
-android.security.net.config.NetworkSecurityConfigProvider
-android.security.net.config.NetworkSecurityTrustManager
-android.security.net.config.PinSet
-android.security.net.config.RootTrustManager
-android.security.net.config.RootTrustManagerFactorySpi
-android.security.net.config.SystemCertificateSource
-android.security.net.config.TrustedCertificateStoreAdapter
-android.security.net.config.UserCertificateSource
-android.service.notification.StatusBarNotification
-android.service.oemlock.OemLockManager
-android.service.persistentdata.IPersistentDataBlockService
-android.service.persistentdata.IPersistentDataBlockService$Stub
-android.service.persistentdata.IPersistentDataBlockService$Stub$Proxy
-android.service.persistentdata.PersistentDataBlockManager
-android.system.ErrnoException
-android.system.GaiException
-android.system.NetlinkSocketAddress
-android.system.Os
-android.system.OsConstants
-android.system.PacketSocketAddress
-android.system.StructAddrinfo
-android.system.StructFlock
-android.system.StructGroupReq
-android.system.StructGroupSourceReq
-android.system.StructIfaddrs
-android.system.StructLinger
-android.system.StructPasswd
-android.system.StructPollfd
-android.system.StructStat
-android.system.StructStatVfs
-android.system.StructTimeval
-android.system.StructUcred
-android.system.StructUtsname
-android.system.UnixSocketAddress
-android.telecom.TelecomManager
-android.telephony.CarrierConfigManager
-android.telephony.CellIdentityWcdma
-android.telephony.CellIdentityWcdma$1
-android.telephony.CellInfo
-android.telephony.CellInfo$1
-android.telephony.CellInfoWcdma
-android.telephony.CellInfoWcdma$1
-android.telephony.CellLocation
-android.telephony.CellSignalStrength
-android.telephony.CellSignalStrengthWcdma
-android.telephony.CellSignalStrengthWcdma$1
-android.telephony.PhoneStateListener
-android.telephony.PhoneStateListener$1
-android.telephony.PhoneStateListener$IPhoneStateListenerStub
-android.telephony.Rlog
-android.telephony.ServiceState
-android.telephony.ServiceState$1
-android.telephony.SignalStrength
-android.telephony.SignalStrength$1
-android.telephony.SubscriptionInfo
-android.telephony.SubscriptionInfo$1
-android.telephony.SubscriptionManager
-android.telephony.SubscriptionManager$OnSubscriptionsChangedListener
-android.telephony.SubscriptionManager$OnSubscriptionsChangedListener$1
-android.telephony.SubscriptionManager$OnSubscriptionsChangedListener$2
-android.telephony.TelephonyManager
-android.telephony.TelephonyManager$MultiSimVariants
-android.text.AndroidBidi
-android.text.AndroidCharacter
-android.text.BoringLayout
-android.text.BoringLayout$Metrics
-android.text.ClipboardManager
-android.text.DynamicLayout
-android.text.DynamicLayout$ChangeWatcher
-android.text.Editable
-android.text.Editable$Factory
-android.text.FontConfig
-android.text.FontConfig$Alias
-android.text.FontConfig$Family
-android.text.FontConfig$Font
-android.text.GetChars
-android.text.GraphicsOperations
-android.text.Hyphenator
-android.text.Hyphenator$HyphenationData
-android.text.InputFilter
-android.text.InputType
-android.text.Layout
-android.text.Layout$Alignment
-android.text.Layout$Directions
-android.text.Layout$Ellipsizer
-android.text.MeasuredText
-android.text.NoCopySpan
-android.text.NoCopySpan$Concrete
-android.text.PackedIntVector
-android.text.PackedObjectVector
-android.text.ParcelableSpan
-android.text.Selection
-android.text.Selection$END
-android.text.Selection$START
-android.text.SpanSet
-android.text.SpanWatcher
-android.text.Spannable
-android.text.Spannable$Factory
-android.text.SpannableString
-android.text.SpannableStringBuilder
-android.text.SpannableStringInternal
-android.text.Spanned
-android.text.SpannedString
-android.text.StaticLayout
-android.text.StaticLayout$Builder
-android.text.StaticLayout$LineBreaks
-android.text.TextDirectionHeuristic
-android.text.TextDirectionHeuristics
-android.text.TextDirectionHeuristics$AnyStrong
-android.text.TextDirectionHeuristics$FirstStrong
-android.text.TextDirectionHeuristics$TextDirectionAlgorithm
-android.text.TextDirectionHeuristics$TextDirectionHeuristicImpl
-android.text.TextDirectionHeuristics$TextDirectionHeuristicInternal
-android.text.TextDirectionHeuristics$TextDirectionHeuristicLocale
-android.text.TextLine
-android.text.TextPaint
-android.text.TextUtils
-android.text.TextUtils$1
-android.text.TextUtils$EllipsizeCallback
-android.text.TextUtils$SimpleStringSplitter
-android.text.TextUtils$StringSplitter
-android.text.TextUtils$TruncateAt
-android.text.TextWatcher
-android.text.format.Time
-android.text.format.Time$TimeCalculator
-android.text.format.TimeFormatter
-android.text.method.AllCapsTransformationMethod
-android.text.method.ArrowKeyMovementMethod
-android.text.method.BaseKeyListener
-android.text.method.BaseMovementMethod
-android.text.method.KeyListener
-android.text.method.LinkMovementMethod
-android.text.method.MetaKeyKeyListener
-android.text.method.MovementMethod
-android.text.method.PasswordTransformationMethod
-android.text.method.ReplacementTransformationMethod
-android.text.method.ReplacementTransformationMethod$ReplacementCharSequence
-android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence
-android.text.method.ScrollingMovementMethod
-android.text.method.SingleLineTransformationMethod
-android.text.method.TextKeyListener
-android.text.method.TextKeyListener$Capitalize
-android.text.method.TransformationMethod
-android.text.method.TransformationMethod2
-android.text.style.AlignmentSpan
-android.text.style.CharacterStyle
-android.text.style.EasyEditSpan
-android.text.style.LeadingMarginSpan
-android.text.style.LineBackgroundSpan
-android.text.style.LineHeightSpan
-android.text.style.MetricAffectingSpan
-android.text.style.ParagraphStyle
-android.text.style.ReplacementSpan
-android.text.style.SpellCheckSpan
-android.text.style.StyleSpan
-android.text.style.SuggestionSpan
-android.text.style.TabStopSpan
-android.text.style.UpdateAppearance
-android.text.style.UpdateLayout
-android.text.style.WrapTogetherSpan
-android.transition.AutoTransition
-android.transition.ChangeBounds
-android.transition.ChangeBounds$1
-android.transition.ChangeBounds$2
-android.transition.ChangeBounds$3
-android.transition.ChangeBounds$4
-android.transition.ChangeBounds$5
-android.transition.ChangeBounds$6
-android.transition.ChangeClipBounds
-android.transition.ChangeImageTransform
-android.transition.ChangeImageTransform$1
-android.transition.ChangeImageTransform$2
-android.transition.ChangeTransform
-android.transition.ChangeTransform$1
-android.transition.ChangeTransform$2
-android.transition.Fade
-android.transition.PathMotion
-android.transition.Transition
-android.transition.Transition$1
-android.transition.TransitionInflater
-android.transition.TransitionManager
-android.transition.TransitionSet
-android.transition.TransitionValuesMaps
-android.transition.Visibility
-android.util.AndroidException
-android.util.AndroidRuntimeException
-android.util.ArrayMap
-android.util.ArrayMap$1
-android.util.ArraySet
-android.util.ArraySet$1
-android.util.AtomicFile
-android.util.AttributeSet
-android.util.Base64
-android.util.Base64$Coder
-android.util.Base64$Decoder
-android.util.Base64$Encoder
-android.util.BootTimingsTraceLog
-android.util.ContainerHelpers
-android.util.DisplayMetrics
-android.util.EventLog
-android.util.EventLog$Event
-android.util.FloatProperty
-android.util.IntArray
-android.util.IntProperty
-android.util.Log
-android.util.Log$1
-android.util.Log$ImmediateLogWriter
-android.util.Log$TerribleFailure
-android.util.Log$TerribleFailureHandler
-android.util.LogPrinter
-android.util.LongArray
-android.util.LongSparseArray
-android.util.LongSparseLongArray
-android.util.LruCache
-android.util.MapCollections
-android.util.MapCollections$ArrayIterator
-android.util.MapCollections$EntrySet
-android.util.MapCollections$KeySet
-android.util.MapCollections$MapIterator
-android.util.MapCollections$ValuesCollection
-android.util.MathUtils
-android.util.MemoryIntArray
-android.util.MemoryIntArray$1
-android.util.MergedConfiguration
-android.util.MergedConfiguration$1
-android.util.MutableInt
-android.util.MutableLong
-android.util.Pair
-android.util.PathParser
-android.util.PathParser$PathData
-android.util.Pools$Pool
-android.util.Pools$SimplePool
-android.util.Pools$SynchronizedPool
-android.util.Printer
-android.util.Property
-android.util.Range
-android.util.Rational
-android.util.Singleton
-android.util.Size
-android.util.SizeF
-android.util.Slog
-android.util.SparseArray
-android.util.SparseBooleanArray
-android.util.SparseIntArray
-android.util.SparseLongArray
-android.util.StateSet
-android.util.SuperNotCalledException
-android.util.TimeUtils
-android.util.TypedValue
-android.util.Xml
-android.util.jar.StrictJarFile
-android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk
-android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$1
-android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$2
-android.view.-$Lambda$6k_RnLLpNi5zg27ubDxN4lDdBbk$3
-android.view.-$Lambda$iU_USrtPm1XIm5H9QYQvXfBGDE4
-android.view.-$Lambda$iU_USrtPm1XIm5H9QYQvXfBGDE4$1
-android.view.AbsSavedState
-android.view.AbsSavedState$1
-android.view.AbsSavedState$2
-android.view.ActionMode
-android.view.ActionMode$Callback
-android.view.ActionProvider
-android.view.Choreographer
-android.view.Choreographer$1
-android.view.Choreographer$2
-android.view.Choreographer$CallbackQueue
-android.view.Choreographer$CallbackRecord
-android.view.Choreographer$FrameCallback
-android.view.Choreographer$FrameDisplayEventReceiver
-android.view.Choreographer$FrameHandler
-android.view.ContextMenu
-android.view.ContextMenu$ContextMenuInfo
-android.view.ContextThemeWrapper
-android.view.Display
-android.view.Display$HdrCapabilities
-android.view.Display$HdrCapabilities$1
-android.view.Display$Mode
-android.view.Display$Mode$1
-android.view.DisplayAdjustments
-android.view.DisplayEventReceiver
-android.view.DisplayInfo
-android.view.DisplayInfo$1
-android.view.DisplayListCanvas
-android.view.FallbackEventHandler
-android.view.FocusFinder
-android.view.FocusFinder$1
-android.view.FocusFinder$FocusSorter
-android.view.FocusFinder$UserSpecifiedFocusComparator
-android.view.FocusFinder$UserSpecifiedFocusComparator$NextFocusGetter
-android.view.FrameInfo
-android.view.FrameMetrics
-android.view.FrameMetricsObserver
-android.view.FrameStats
-android.view.GestureDetector
-android.view.GestureDetector$GestureHandler
-android.view.GestureDetector$OnContextClickListener
-android.view.GestureDetector$OnDoubleTapListener
-android.view.GestureDetector$OnGestureListener
-android.view.GestureDetector$SimpleOnGestureListener
-android.view.Gravity
-android.view.HandlerActionQueue
-android.view.HandlerActionQueue$HandlerAction
-android.view.HardwareLayer
-android.view.IGraphicsStats
-android.view.IGraphicsStats$Stub
-android.view.IGraphicsStats$Stub$Proxy
-android.view.IGraphicsStatsCallback
-android.view.IGraphicsStatsCallback$Stub
-android.view.IRotationWatcher
-android.view.IRotationWatcher$Stub
-android.view.IWindow
-android.view.IWindow$Stub
-android.view.IWindowManager
-android.view.IWindowManager$Stub
-android.view.IWindowManager$Stub$Proxy
-android.view.IWindowSession
-android.view.IWindowSession$Stub
-android.view.IWindowSession$Stub$Proxy
-android.view.IWindowSessionCallback
-android.view.IWindowSessionCallback$Stub
-android.view.InflateException
-android.view.InputChannel
-android.view.InputChannel$1
-android.view.InputDevice
-android.view.InputDevice$1
-android.view.InputEvent
-android.view.InputEvent$1
-android.view.InputEventConsistencyVerifier
-android.view.InputEventReceiver
-android.view.InputEventSender
-android.view.InputQueue
-android.view.InputQueue$Callback
-android.view.InputQueue$FinishedInputEventCallback
-android.view.KeyCharacterMap
-android.view.KeyCharacterMap$1
-android.view.KeyCharacterMap$FallbackAction
-android.view.KeyEvent
-android.view.KeyEvent$1
-android.view.KeyEvent$Callback
-android.view.KeyEvent$DispatcherState
-android.view.LayoutInflater
-android.view.LayoutInflater$Factory
-android.view.LayoutInflater$Factory2
-android.view.LayoutInflater$FactoryMerger
-android.view.LayoutInflater$Filter
-android.view.Menu
-android.view.MenuInflater
-android.view.MenuItem
-android.view.MenuItem$OnActionExpandListener
-android.view.MenuItem$OnMenuItemClickListener
-android.view.MotionEvent
-android.view.MotionEvent$1
-android.view.MotionEvent$PointerCoords
-android.view.MotionEvent$PointerProperties
-android.view.PointerIcon
-android.view.PointerIcon$1
-android.view.RecordingCanvas
-android.view.RenderNode
-android.view.RenderNode$NoImagePreloadHolder
-android.view.RenderNodeAnimator
-android.view.RenderNodeAnimator$1
-android.view.RenderNodeAnimatorSetHelper
-android.view.SearchEvent
-android.view.SubMenu
-android.view.Surface
-android.view.Surface$1
-android.view.Surface$CompatibleCanvas
-android.view.Surface$OutOfResourcesException
-android.view.SurfaceControl
-android.view.SurfaceControl$PhysicalDisplayInfo
-android.view.SurfaceHolder$Callback
-android.view.SurfaceHolder$Callback2
-android.view.SurfaceSession
-android.view.SurfaceView
-android.view.TextureView
-android.view.ThreadedRenderer
-android.view.ThreadedRenderer$DrawCallbacks
-android.view.ThreadedRenderer$ProcessInitializer
-android.view.ThreadedRenderer$ProcessInitializer$1
-android.view.VelocityTracker
-android.view.VelocityTracker$Estimator
-android.view.View
-android.view.View$1
-android.view.View$10
-android.view.View$11
-android.view.View$12
-android.view.View$2
-android.view.View$3
-android.view.View$4
-android.view.View$5
-android.view.View$6
-android.view.View$7
-android.view.View$8
-android.view.View$9
-android.view.View$AccessibilityDelegate
-android.view.View$AttachInfo
-android.view.View$AttachInfo$Callbacks
-android.view.View$BaseSavedState
-android.view.View$BaseSavedState$1
-android.view.View$CheckForTap
-android.view.View$ForegroundInfo
-android.view.View$ListenerInfo
-android.view.View$MeasureSpec
-android.view.View$OnApplyWindowInsetsListener
-android.view.View$OnAttachStateChangeListener
-android.view.View$OnClickListener
-android.view.View$OnCreateContextMenuListener
-android.view.View$OnFocusChangeListener
-android.view.View$OnKeyListener
-android.view.View$OnLayoutChangeListener
-android.view.View$OnLongClickListener
-android.view.View$OnTouchListener
-android.view.View$PerformClick
-android.view.View$ScrollabilityCache
-android.view.View$TooltipInfo
-android.view.View$TransformationInfo
-android.view.View$UnsetPressedState
-android.view.ViewConfiguration
-android.view.ViewGroup
-android.view.ViewGroup$1
-android.view.ViewGroup$2
-android.view.ViewGroup$LayoutParams
-android.view.ViewGroup$MarginLayoutParams
-android.view.ViewGroup$OnHierarchyChangeListener
-android.view.ViewGroup$TouchTarget
-android.view.ViewManager
-android.view.ViewOutlineProvider
-android.view.ViewOutlineProvider$1
-android.view.ViewOutlineProvider$2
-android.view.ViewOutlineProvider$3
-android.view.ViewParent
-android.view.ViewPropertyAnimator
-android.view.ViewPropertyAnimator$1
-android.view.ViewPropertyAnimator$AnimatorEventListener
-android.view.ViewPropertyAnimator$NameValuesHolder
-android.view.ViewPropertyAnimator$PropertyBundle
-android.view.ViewRootImpl
-android.view.ViewRootImpl$1
-android.view.ViewRootImpl$4
-android.view.ViewRootImpl$AccessibilityInteractionConnectionManager
-android.view.ViewRootImpl$ActivityConfigCallback
-android.view.ViewRootImpl$AsyncInputStage
-android.view.ViewRootImpl$ConfigChangedCallback
-android.view.ViewRootImpl$ConsumeBatchedInputImmediatelyRunnable
-android.view.ViewRootImpl$ConsumeBatchedInputRunnable
-android.view.ViewRootImpl$EarlyPostImeInputStage
-android.view.ViewRootImpl$HighContrastTextManager
-android.view.ViewRootImpl$ImeInputStage
-android.view.ViewRootImpl$InputStage
-android.view.ViewRootImpl$InvalidateOnAnimationRunnable
-android.view.ViewRootImpl$NativePostImeInputStage
-android.view.ViewRootImpl$NativePreImeInputStage
-android.view.ViewRootImpl$QueuedInputEvent
-android.view.ViewRootImpl$SyntheticInputStage
-android.view.ViewRootImpl$SyntheticJoystickHandler
-android.view.ViewRootImpl$SyntheticKeyboardHandler
-android.view.ViewRootImpl$SyntheticTouchNavigationHandler
-android.view.ViewRootImpl$SyntheticTouchNavigationHandler$1
-android.view.ViewRootImpl$SyntheticTrackballHandler
-android.view.ViewRootImpl$TrackballAxis
-android.view.ViewRootImpl$TraversalRunnable
-android.view.ViewRootImpl$ViewPostImeInputStage
-android.view.ViewRootImpl$ViewPreImeInputStage
-android.view.ViewRootImpl$ViewRootHandler
-android.view.ViewRootImpl$W
-android.view.ViewRootImpl$WindowInputEventReceiver
-android.view.ViewRootImpl$WindowStoppedCallback
-android.view.ViewStub
-android.view.ViewTreeObserver
-android.view.ViewTreeObserver$CopyOnWriteArray
-android.view.ViewTreeObserver$CopyOnWriteArray$Access
-android.view.ViewTreeObserver$InternalInsetsInfo
-android.view.ViewTreeObserver$OnGlobalLayoutListener
-android.view.ViewTreeObserver$OnPreDrawListener
-android.view.ViewTreeObserver$OnScrollChangedListener
-android.view.ViewTreeObserver$OnTouchModeChangeListener
-android.view.Window
-android.view.Window$Callback
-android.view.Window$OnWindowDismissedCallback
-android.view.Window$OnWindowSwipeDismissedCallback
-android.view.Window$WindowControllerCallback
-android.view.WindowAnimationFrameStats
-android.view.WindowAnimationFrameStats$1
-android.view.WindowCallbacks
-android.view.WindowContentFrameStats
-android.view.WindowContentFrameStats$1
-android.view.WindowInsets
-android.view.WindowLeaked
-android.view.WindowManager
-android.view.WindowManager$BadTokenException
-android.view.WindowManager$LayoutParams
-android.view.WindowManager$LayoutParams$1
-android.view.WindowManagerGlobal
-android.view.WindowManagerGlobal$1
-android.view.WindowManagerGlobal$2
-android.view.WindowManagerImpl
-android.view.accessibility.AccessibilityEvent
-android.view.accessibility.AccessibilityEventSource
-android.view.accessibility.AccessibilityManager
-android.view.accessibility.AccessibilityManager$1
-android.view.accessibility.AccessibilityManager$AccessibilityStateChangeListener
-android.view.accessibility.AccessibilityManager$HighTextContrastChangeListener
-android.view.accessibility.AccessibilityManager$MyCallback
-android.view.accessibility.AccessibilityManager$TouchExplorationStateChangeListener
-android.view.accessibility.AccessibilityNodeInfo
-android.view.accessibility.AccessibilityNodeProvider
-android.view.accessibility.AccessibilityRecord
-android.view.accessibility.CaptioningManager
-android.view.accessibility.IAccessibilityManager
-android.view.accessibility.IAccessibilityManager$Stub
-android.view.accessibility.IAccessibilityManager$Stub$Proxy
-android.view.accessibility.IAccessibilityManagerClient
-android.view.accessibility.IAccessibilityManagerClient$Stub
-android.view.animation.AccelerateDecelerateInterpolator
-android.view.animation.AccelerateInterpolator
-android.view.animation.AlphaAnimation
-android.view.animation.Animation
-android.view.animation.Animation$AnimationListener
-android.view.animation.Animation$NoImagePreloadHolder
-android.view.animation.AnimationUtils
-android.view.animation.AnimationUtils$1
-android.view.animation.AnimationUtils$AnimationState
-android.view.animation.BaseInterpolator
-android.view.animation.DecelerateInterpolator
-android.view.animation.Interpolator
-android.view.animation.LinearInterpolator
-android.view.animation.PathInterpolator
-android.view.animation.Transformation
-android.view.autofill.AutofillManager
-android.view.autofill.AutofillManager$AutofillClient
-android.view.autofill.AutofillManager$AutofillManagerClient
-android.view.autofill.Helper
-android.view.autofill.IAutoFillManager
-android.view.autofill.IAutoFillManager$Stub
-android.view.autofill.IAutoFillManager$Stub$Proxy
-android.view.autofill.IAutoFillManagerClient
-android.view.autofill.IAutoFillManagerClient$Stub
-android.view.autofill.IAutofillWindowPresenter
-android.view.inputmethod.BaseInputConnection
-android.view.inputmethod.ComposingText
-android.view.inputmethod.CursorAnchorInfo$Builder
-android.view.inputmethod.EditorInfo
-android.view.inputmethod.EditorInfo$1
-android.view.inputmethod.InputConnection
-android.view.inputmethod.InputMethodManager
-android.view.inputmethod.InputMethodManager$1
-android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper
-android.view.inputmethod.InputMethodManager$FinishedInputEventCallback
-android.view.inputmethod.InputMethodManager$H
-android.view.textclassifier.TextClassificationManager
-android.view.textservice.TextServicesManager
-android.webkit.WebViewFactory
-android.webkit.WebViewFactory$MissingWebViewPackageException
-android.widget.AbsListView
-android.widget.AbsListView$AdapterDataSetObserver
-android.widget.AbsListView$LayoutParams
-android.widget.AbsListView$OnScrollListener
-android.widget.AbsListView$RecycleBin
-android.widget.AbsSeekBar
-android.widget.AbsSpinner
-android.widget.Adapter
-android.widget.AdapterView
-android.widget.AdapterView$AdapterDataSetObserver
-android.widget.AdapterView$OnItemClickListener
-android.widget.AdapterView$OnItemSelectedListener
-android.widget.AutoCompleteTextView
-android.widget.BaseAdapter
-android.widget.Button
-android.widget.CheckBox
-android.widget.Checkable
-android.widget.CheckedTextView
-android.widget.CompoundButton
-android.widget.EdgeEffect
-android.widget.EditText
-android.widget.Editor
-android.widget.Editor$1
-android.widget.Editor$2
-android.widget.Editor$CursorAnchorInfoNotifier
-android.widget.Editor$InputContentType
-android.widget.Editor$PositionListener
-android.widget.Editor$ProcessTextIntentActionsHandler
-android.widget.Editor$SpanController
-android.widget.Editor$SuggestionHelper
-android.widget.Editor$SuggestionHelper$SuggestionSpanComparator
-android.widget.Editor$TextViewPositionListener
-android.widget.Editor$UndoInputFilter
-android.widget.Filter$FilterListener
-android.widget.Filterable
-android.widget.FrameLayout
-android.widget.FrameLayout$LayoutParams
-android.widget.HorizontalScrollView
-android.widget.ImageButton
-android.widget.ImageView
-android.widget.ImageView$ScaleType
-android.widget.LinearLayout
-android.widget.LinearLayout$LayoutParams
-android.widget.ListAdapter
-android.widget.ListView
-android.widget.ListView$ArrowScrollFocusResult
-android.widget.MultiAutoCompleteTextView
-android.widget.OverScroller
-android.widget.OverScroller$SplineOverScroller
-android.widget.PopupWindow
-android.widget.ProgressBar
-android.widget.ProgressBar$1
-android.widget.RadioButton
-android.widget.RatingBar
-android.widget.RelativeLayout
-android.widget.RelativeLayout$DependencyGraph
-android.widget.RelativeLayout$DependencyGraph$Node
-android.widget.RelativeLayout$LayoutParams
-android.widget.RemoteViews
-android.widget.RemoteViews$1
-android.widget.RemoteViews$2
-android.widget.RemoteViews$3
-android.widget.RemoteViews$Action
-android.widget.RemoteViews$ActionException
-android.widget.RemoteViews$BitmapCache
-android.widget.RemoteViews$MemoryUsageCounter
-android.widget.RemoteViews$MutablePair
-android.widget.RemoteViews$OnClickHandler
-android.widget.RemoteViews$ReflectionAction
-android.widget.RemoteViews$RemoteView
-android.widget.RemoteViews$RuntimeAction
-android.widget.RemoteViews$SetOnClickPendingIntent
-android.widget.RemoteViewsAdapter$RemoteAdapterConnectionCallback
-android.widget.ScrollBarDrawable
-android.widget.ScrollView
-android.widget.Scroller
-android.widget.Scroller$ViscousFluidInterpolator
-android.widget.SeekBar
-android.widget.Space
-android.widget.Spinner
-android.widget.SpinnerAdapter
-android.widget.TextView
-android.widget.TextView$BufferType
-android.widget.TextView$ChangeWatcher
-android.widget.TextView$CharWrapper
-android.widget.TextView$Drawables
-android.widget.TextView$OnEditorActionListener
-com.android.internal.R$styleable
-com.android.internal.app.IAppOpsCallback
-com.android.internal.app.IAppOpsCallback$Stub
-com.android.internal.app.IAppOpsService
-com.android.internal.app.IAppOpsService$Stub
-com.android.internal.app.IAppOpsService$Stub$Proxy
-com.android.internal.app.IBatteryStats
-com.android.internal.app.IBatteryStats$Stub
-com.android.internal.app.IBatteryStats$Stub$Proxy
-com.android.internal.app.IVoiceInteractionManagerService
-com.android.internal.app.IVoiceInteractionManagerService$Stub
-com.android.internal.app.IVoiceInteractor
-com.android.internal.app.IVoiceInteractor$Stub
-com.android.internal.appwidget.IAppWidgetService
-com.android.internal.appwidget.IAppWidgetService$Stub
-com.android.internal.appwidget.IAppWidgetService$Stub$Proxy
-com.android.internal.content.NativeLibraryHelper
-com.android.internal.content.ReferrerIntent
-com.android.internal.content.ReferrerIntent$1
-com.android.internal.graphics.drawable.AnimationScaleListDrawable
-com.android.internal.graphics.drawable.AnimationScaleListDrawable$AnimationScaleListState
-com.android.internal.inputmethod.InputMethodUtils
-com.android.internal.inputmethod.InputMethodUtils$1
-com.android.internal.inputmethod.LocaleUtils$LocaleExtractor
-com.android.internal.logging.AndroidConfig
-com.android.internal.logging.AndroidHandler
-com.android.internal.logging.AndroidHandler$1
-com.android.internal.logging.MetricsLogger
-com.android.internal.net.NetworkStatsFactory
-com.android.internal.os.AndroidPrintStream
-com.android.internal.os.BinderInternal
-com.android.internal.os.BinderInternal$GcWatcher
-com.android.internal.os.FuseAppLoop
-com.android.internal.os.FuseAppLoop$1
-com.android.internal.os.FuseUnavailableMountException
-com.android.internal.os.HandlerCaller
-com.android.internal.os.HandlerCaller$Callback
-com.android.internal.os.HandlerCaller$MyHandler
-com.android.internal.os.LoggingPrintStream
-com.android.internal.os.LoggingPrintStream$1
-com.android.internal.os.PathClassLoaderFactory
-com.android.internal.os.RoSystemProperties
-com.android.internal.os.RuntimeInit
-com.android.internal.os.RuntimeInit$1
-com.android.internal.os.RuntimeInit$Arguments
-com.android.internal.os.RuntimeInit$KillApplicationHandler
-com.android.internal.os.RuntimeInit$LoggingHandler
-com.android.internal.os.SamplingProfilerIntegration
-com.android.internal.os.SomeArgs
-com.android.internal.os.Zygote
-com.android.internal.os.Zygote$MethodAndArgsCaller
-com.android.internal.os.ZygoteConnection
-com.android.internal.os.ZygoteConnection$Arguments
-com.android.internal.os.ZygoteInit
-com.android.internal.os.ZygoteSecurityException
-com.android.internal.os.ZygoteServer
-com.android.internal.policy.DecorContext
-com.android.internal.policy.DecorView
-com.android.internal.policy.DecorView$ColorViewAttributes
-com.android.internal.policy.DecorView$ColorViewState
-com.android.internal.policy.PhoneFallbackEventHandler
-com.android.internal.policy.PhoneLayoutInflater
-com.android.internal.policy.PhoneWindow
-com.android.internal.policy.PhoneWindow$1
-com.android.internal.policy.PhoneWindow$PanelFeatureState
-com.android.internal.policy.PhoneWindow$PhoneWindowMenuCallback
-com.android.internal.policy.PhoneWindow$RotationWatcher
-com.android.internal.policy.PhoneWindow$RotationWatcher$1
-com.android.internal.telecom.ITelecomService
-com.android.internal.telecom.ITelecomService$Stub
-com.android.internal.telephony.ICarrierConfigLoader
-com.android.internal.telephony.ICarrierConfigLoader$Stub
-com.android.internal.telephony.ICarrierConfigLoader$Stub$Proxy
-com.android.internal.telephony.IOnSubscriptionsChangedListener
-com.android.internal.telephony.IOnSubscriptionsChangedListener$Stub
-com.android.internal.telephony.IPhoneStateListener
-com.android.internal.telephony.IPhoneStateListener$Stub
-com.android.internal.telephony.IPhoneSubInfo
-com.android.internal.telephony.IPhoneSubInfo$Stub
-com.android.internal.telephony.IPhoneSubInfo$Stub$Proxy
-com.android.internal.telephony.ISms
-com.android.internal.telephony.ISms$Stub
-com.android.internal.telephony.ISub
-com.android.internal.telephony.ISub$Stub
-com.android.internal.telephony.ISub$Stub$Proxy
-com.android.internal.telephony.ITelephony
-com.android.internal.telephony.ITelephony$Stub
-com.android.internal.telephony.ITelephony$Stub$Proxy
-com.android.internal.telephony.ITelephonyRegistry
-com.android.internal.telephony.ITelephonyRegistry$Stub
-com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy
-com.android.internal.telephony.IccCardConstants$State
-com.android.internal.telephony.PhoneConstants$State
-com.android.internal.textservice.ITextServicesManager
-com.android.internal.textservice.ITextServicesManager$Stub
-com.android.internal.util.ArrayUtils
-com.android.internal.util.AsyncChannel
-com.android.internal.util.AsyncChannel$DeathMonitor
-com.android.internal.util.BitUtils
-com.android.internal.util.ExponentiallyBucketedHistogram
-com.android.internal.util.FastPrintWriter
-com.android.internal.util.FastPrintWriter$DummyWriter
-com.android.internal.util.FastXmlSerializer
-com.android.internal.util.GrowingArrayUtils
-com.android.internal.util.IState
-com.android.internal.util.IntPair
-com.android.internal.util.LineBreakBufferedWriter
-com.android.internal.util.Preconditions
-com.android.internal.util.State
-com.android.internal.util.StateMachine
-com.android.internal.util.StateMachine$LogRec
-com.android.internal.util.StateMachine$LogRecords
-com.android.internal.util.StateMachine$SmHandler
-com.android.internal.util.StateMachine$SmHandler$HaltingState
-com.android.internal.util.StateMachine$SmHandler$QuittingState
-com.android.internal.util.StateMachine$SmHandler$StateInfo
-com.android.internal.util.VirtualRefBasePtr
-com.android.internal.util.XmlUtils
-com.android.internal.util.XmlUtils$WriteMapCallback
-com.android.internal.view.IInputConnectionWrapper
-com.android.internal.view.IInputConnectionWrapper$MyHandler
-com.android.internal.view.IInputContext
-com.android.internal.view.IInputContext$Stub
-com.android.internal.view.IInputMethodClient
-com.android.internal.view.IInputMethodClient$Stub
-com.android.internal.view.IInputMethodManager
-com.android.internal.view.IInputMethodManager$Stub
-com.android.internal.view.IInputMethodManager$Stub$Proxy
-com.android.internal.view.IInputMethodSession
-com.android.internal.view.IInputMethodSession$Stub
-com.android.internal.view.IInputMethodSession$Stub$Proxy
-com.android.internal.view.InputBindResult
-com.android.internal.view.InputBindResult$1
-com.android.internal.view.RootViewSurfaceTaker
-com.android.internal.view.animation.FallbackLUTInterpolator
-com.android.internal.view.animation.HasNativeInterpolator
-com.android.internal.view.animation.NativeInterpolatorFactory
-com.android.internal.view.animation.NativeInterpolatorFactoryHelper
-com.android.internal.view.menu.MenuBuilder$Callback
-com.android.internal.view.menu.MenuPresenter$Callback
-com.android.internal.widget.BackgroundFallback
-com.android.internal.widget.DecorContentParent
-com.android.internal.widget.LockPatternUtils
-com.android.okhttp.Address
-com.android.okhttp.Authenticator
-com.android.okhttp.CacheControl
-com.android.okhttp.CacheControl$Builder
-com.android.okhttp.CertificatePinner
-com.android.okhttp.CertificatePinner$Builder
-com.android.okhttp.CipherSuite
-com.android.okhttp.ConfigAwareConnectionPool
-com.android.okhttp.ConfigAwareConnectionPool$1
-com.android.okhttp.Connection
-com.android.okhttp.ConnectionPool
-com.android.okhttp.ConnectionPool$1
-com.android.okhttp.ConnectionSpec
-com.android.okhttp.ConnectionSpec$Builder
-com.android.okhttp.Dispatcher
-com.android.okhttp.Dns
-com.android.okhttp.Dns$1
-com.android.okhttp.Handshake
-com.android.okhttp.Headers
-com.android.okhttp.Headers$Builder
-com.android.okhttp.HttpHandler
-com.android.okhttp.HttpHandler$CleartextURLFilter
-com.android.okhttp.HttpUrl
-com.android.okhttp.HttpUrl$Builder
-com.android.okhttp.HttpUrl$Builder$ParseResult
-com.android.okhttp.HttpsHandler
-com.android.okhttp.OkHttpClient
-com.android.okhttp.OkHttpClient$1
-com.android.okhttp.OkUrlFactory
-com.android.okhttp.Protocol
-com.android.okhttp.Request
-com.android.okhttp.Request$Builder
-com.android.okhttp.RequestBody
-com.android.okhttp.RequestBody$2
-com.android.okhttp.Response
-com.android.okhttp.Response$Builder
-com.android.okhttp.ResponseBody
-com.android.okhttp.Route
-com.android.okhttp.TlsVersion
-com.android.okhttp.internal.ConnectionSpecSelector
-com.android.okhttp.internal.Internal
-com.android.okhttp.internal.OptionalMethod
-com.android.okhttp.internal.Platform
-com.android.okhttp.internal.RouteDatabase
-com.android.okhttp.internal.URLFilter
-com.android.okhttp.internal.Util
-com.android.okhttp.internal.Util$1
-com.android.okhttp.internal.http.AuthenticatorAdapter
-com.android.okhttp.internal.http.CacheStrategy
-com.android.okhttp.internal.http.CacheStrategy$Factory
-com.android.okhttp.internal.http.Http1xStream
-com.android.okhttp.internal.http.Http1xStream$AbstractSource
-com.android.okhttp.internal.http.Http1xStream$ChunkedSource
-com.android.okhttp.internal.http.Http1xStream$FixedLengthSource
-com.android.okhttp.internal.http.HttpEngine
-com.android.okhttp.internal.http.HttpEngine$1
-com.android.okhttp.internal.http.HttpMethod
-com.android.okhttp.internal.http.HttpStream
-com.android.okhttp.internal.http.OkHeaders
-com.android.okhttp.internal.http.OkHeaders$1
-com.android.okhttp.internal.http.RealResponseBody
-com.android.okhttp.internal.http.RequestException
-com.android.okhttp.internal.http.RequestLine
-com.android.okhttp.internal.http.RetryableSink
-com.android.okhttp.internal.http.RouteException
-com.android.okhttp.internal.http.RouteSelector
-com.android.okhttp.internal.http.StatusLine
-com.android.okhttp.internal.http.StreamAllocation
-com.android.okhttp.internal.huc.DelegatingHttpsURLConnection
-com.android.okhttp.internal.huc.HttpURLConnectionImpl
-com.android.okhttp.internal.huc.HttpsURLConnectionImpl
-com.android.okhttp.internal.io.RealConnection
-com.android.okhttp.internal.tls.OkHostnameVerifier
-com.android.okhttp.okio.AsyncTimeout
-com.android.okhttp.okio.AsyncTimeout$1
-com.android.okhttp.okio.AsyncTimeout$2
-com.android.okhttp.okio.AsyncTimeout$Watchdog
-com.android.okhttp.okio.Buffer
-com.android.okhttp.okio.BufferedSink
-com.android.okhttp.okio.BufferedSource
-com.android.okhttp.okio.ForwardingTimeout
-com.android.okhttp.okio.GzipSource
-com.android.okhttp.okio.InflaterSource
-com.android.okhttp.okio.Okio
-com.android.okhttp.okio.Okio$1
-com.android.okhttp.okio.Okio$2
-com.android.okhttp.okio.Okio$3
-com.android.okhttp.okio.RealBufferedSink
-com.android.okhttp.okio.RealBufferedSink$1
-com.android.okhttp.okio.RealBufferedSource
-com.android.okhttp.okio.RealBufferedSource$1
-com.android.okhttp.okio.Segment
-com.android.okhttp.okio.SegmentPool
-com.android.okhttp.okio.Sink
-com.android.okhttp.okio.Source
-com.android.okhttp.okio.Timeout
-com.android.okhttp.okio.Timeout$1
-com.android.okhttp.okio.Util
-com.android.org.bouncycastle.asn1.ASN1Encodable
-com.android.org.bouncycastle.asn1.ASN1Object
-com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier
-com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier$OidHandle
-com.android.org.bouncycastle.asn1.ASN1Primitive
-com.android.org.bouncycastle.asn1.OIDTokenizer
-com.android.org.bouncycastle.asn1.bc.BCObjectIdentifiers
-com.android.org.bouncycastle.asn1.iana.IANAObjectIdentifiers
-com.android.org.bouncycastle.asn1.misc.MiscObjectIdentifiers
-com.android.org.bouncycastle.asn1.nist.NISTObjectIdentifiers
-com.android.org.bouncycastle.asn1.oiw.OIWObjectIdentifiers
-com.android.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers
-com.android.org.bouncycastle.asn1.x509.X509ObjectIdentifiers
-com.android.org.bouncycastle.asn1.x9.X9ObjectIdentifiers
-com.android.org.bouncycastle.jcajce.provider.asymmetric.DH$Mappings
-com.android.org.bouncycastle.jcajce.provider.asymmetric.DSA$Mappings
-com.android.org.bouncycastle.jcajce.provider.asymmetric.EC$Mappings
-com.android.org.bouncycastle.jcajce.provider.asymmetric.RSA$Mappings
-com.android.org.bouncycastle.jcajce.provider.asymmetric.X509$Mappings
-com.android.org.bouncycastle.jcajce.provider.asymmetric.dh.KeyFactorySpi
-com.android.org.bouncycastle.jcajce.provider.asymmetric.dsa.DSAUtil
-com.android.org.bouncycastle.jcajce.provider.asymmetric.dsa.KeyFactorySpi
-com.android.org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi
-com.android.org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi$EC
-com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi
-com.android.org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi
-com.android.org.bouncycastle.jcajce.provider.config.ConfigurableProvider
-com.android.org.bouncycastle.jcajce.provider.config.ProviderConfiguration
-com.android.org.bouncycastle.jcajce.provider.config.ProviderConfigurationPermission
-com.android.org.bouncycastle.jcajce.provider.digest.DigestAlgorithmProvider
-com.android.org.bouncycastle.jcajce.provider.digest.MD5
-com.android.org.bouncycastle.jcajce.provider.digest.MD5$Mappings
-com.android.org.bouncycastle.jcajce.provider.digest.SHA1
-com.android.org.bouncycastle.jcajce.provider.digest.SHA1$Mappings
-com.android.org.bouncycastle.jcajce.provider.digest.SHA224
-com.android.org.bouncycastle.jcajce.provider.digest.SHA224$Mappings
-com.android.org.bouncycastle.jcajce.provider.digest.SHA256
-com.android.org.bouncycastle.jcajce.provider.digest.SHA256$Mappings
-com.android.org.bouncycastle.jcajce.provider.digest.SHA384
-com.android.org.bouncycastle.jcajce.provider.digest.SHA384$Mappings
-com.android.org.bouncycastle.jcajce.provider.digest.SHA512
-com.android.org.bouncycastle.jcajce.provider.digest.SHA512$Mappings
-com.android.org.bouncycastle.jcajce.provider.keystore.BC$Mappings
-com.android.org.bouncycastle.jcajce.provider.keystore.PKCS12$Mappings
-com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi
-com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi$Std
-com.android.org.bouncycastle.jcajce.provider.symmetric.AES
-com.android.org.bouncycastle.jcajce.provider.symmetric.AES$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.ARC4
-com.android.org.bouncycastle.jcajce.provider.symmetric.ARC4$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.Blowfish
-com.android.org.bouncycastle.jcajce.provider.symmetric.Blowfish$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.DES
-com.android.org.bouncycastle.jcajce.provider.symmetric.DES$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.DESede
-com.android.org.bouncycastle.jcajce.provider.symmetric.DESede$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2
-com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12
-com.android.org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.PBES2AlgorithmParameters
-com.android.org.bouncycastle.jcajce.provider.symmetric.PBES2AlgorithmParameters$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.RC2
-com.android.org.bouncycastle.jcajce.provider.symmetric.RC2$Mappings
-com.android.org.bouncycastle.jcajce.provider.symmetric.SymmetricAlgorithmProvider
-com.android.org.bouncycastle.jcajce.provider.symmetric.Twofish
-com.android.org.bouncycastle.jcajce.provider.symmetric.Twofish$Mappings
-com.android.org.bouncycastle.jcajce.provider.util.AlgorithmProvider
-com.android.org.bouncycastle.jcajce.provider.util.AsymmetricAlgorithmProvider
-com.android.org.bouncycastle.jcajce.provider.util.AsymmetricKeyInfoConverter
-com.android.org.bouncycastle.jcajce.util.BCJcaJceHelper
-com.android.org.bouncycastle.jcajce.util.JcaJceHelper
-com.android.org.bouncycastle.jcajce.util.ProviderJcaJceHelper
-com.android.org.bouncycastle.jce.interfaces.BCKeyStore
-com.android.org.bouncycastle.jce.provider.BouncyCastleProvider
-com.android.org.bouncycastle.jce.provider.BouncyCastleProvider$1
-com.android.org.bouncycastle.jce.provider.BouncyCastleProviderConfiguration
-com.android.org.bouncycastle.util.Arrays
-com.android.org.bouncycastle.util.Encodable
-com.android.org.bouncycastle.util.Strings
-com.android.org.bouncycastle.util.Strings$1
-com.android.org.conscrypt.AbstractOpenSSLSession
-com.android.org.conscrypt.AbstractSessionContext
-com.android.org.conscrypt.AbstractSessionContext$1
-com.android.org.conscrypt.AddressUtils
-com.android.org.conscrypt.ArrayUtils
-com.android.org.conscrypt.ByteArray
-com.android.org.conscrypt.CertBlacklist
-com.android.org.conscrypt.CertificatePriorityComparator
-com.android.org.conscrypt.ChainStrengthAnalyzer
-com.android.org.conscrypt.ClientSessionContext
-com.android.org.conscrypt.ClientSessionContext$HostAndPort
-com.android.org.conscrypt.CryptoUpcalls
-com.android.org.conscrypt.EvpMdRef$MD5
-com.android.org.conscrypt.EvpMdRef$SHA1
-com.android.org.conscrypt.EvpMdRef$SHA256
-com.android.org.conscrypt.FileClientSessionCache
-com.android.org.conscrypt.FileClientSessionCache$Impl
-com.android.org.conscrypt.Hex
-com.android.org.conscrypt.JSSEProvider
-com.android.org.conscrypt.KeyManagerFactoryImpl
-com.android.org.conscrypt.KeyManagerImpl
-com.android.org.conscrypt.NativeCrypto
-com.android.org.conscrypt.NativeCrypto$SSLHandshakeCallbacks
-com.android.org.conscrypt.NativeCryptoJni
-com.android.org.conscrypt.NativeRef
-com.android.org.conscrypt.NativeRef$EC_GROUP
-com.android.org.conscrypt.NativeRef$EC_POINT
-com.android.org.conscrypt.NativeRef$EVP_MD_CTX
-com.android.org.conscrypt.NativeRef$EVP_PKEY
-com.android.org.conscrypt.OpenSSLBIOInputStream
-com.android.org.conscrypt.OpenSSLContextImpl
-com.android.org.conscrypt.OpenSSLContextImpl$TLSv12
-com.android.org.conscrypt.OpenSSLECGroupContext
-com.android.org.conscrypt.OpenSSLECPointContext
-com.android.org.conscrypt.OpenSSLECPublicKey
-com.android.org.conscrypt.OpenSSLExtendedSessionImpl
-com.android.org.conscrypt.OpenSSLKey
-com.android.org.conscrypt.OpenSSLKeyHolder
-com.android.org.conscrypt.OpenSSLMessageDigestJDK
-com.android.org.conscrypt.OpenSSLMessageDigestJDK$MD5
-com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA1
-com.android.org.conscrypt.OpenSSLMessageDigestJDK$SHA256
-com.android.org.conscrypt.OpenSSLProvider
-com.android.org.conscrypt.OpenSSLRSAKeyFactory
-com.android.org.conscrypt.OpenSSLRSAPublicKey
-com.android.org.conscrypt.OpenSSLRandom
-com.android.org.conscrypt.OpenSSLSessionImpl
-com.android.org.conscrypt.OpenSSLSignature
-com.android.org.conscrypt.OpenSSLSignature$EngineType
-com.android.org.conscrypt.OpenSSLSignature$RSAPKCS1Padding
-com.android.org.conscrypt.OpenSSLSignature$SHA1RSA
-com.android.org.conscrypt.OpenSSLSocketFactoryImpl
-com.android.org.conscrypt.OpenSSLSocketImpl
-com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream
-com.android.org.conscrypt.OpenSSLSocketImpl$SSLOutputStream
-com.android.org.conscrypt.OpenSSLSocketImplWrapper
-com.android.org.conscrypt.OpenSSLX509CertPath
-com.android.org.conscrypt.OpenSSLX509CertPath$Encoding
-com.android.org.conscrypt.OpenSSLX509Certificate
-com.android.org.conscrypt.OpenSSLX509CertificateFactory
-com.android.org.conscrypt.OpenSSLX509CertificateFactory$1
-com.android.org.conscrypt.OpenSSLX509CertificateFactory$2
-com.android.org.conscrypt.OpenSSLX509CertificateFactory$Parser
-com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException
-com.android.org.conscrypt.Platform
-com.android.org.conscrypt.SSLClientSessionCache
-com.android.org.conscrypt.SSLParametersImpl
-com.android.org.conscrypt.SSLParametersImpl$AliasChooser
-com.android.org.conscrypt.SSLParametersImpl$PSKCallbacks
-com.android.org.conscrypt.SSLUtils
-com.android.org.conscrypt.ServerSessionContext
-com.android.org.conscrypt.TrustManagerFactoryImpl
-com.android.org.conscrypt.TrustManagerImpl
-com.android.org.conscrypt.TrustManagerImpl$ExtendedKeyUsagePKIXCertPathChecker
-com.android.org.conscrypt.TrustManagerImpl$TrustAnchorComparator
-com.android.org.conscrypt.TrustedCertificateIndex
-com.android.org.conscrypt.TrustedCertificateKeyStoreSpi
-com.android.org.conscrypt.TrustedCertificateStore
-com.android.org.conscrypt.TrustedCertificateStore$PreloadHolder
-com.android.org.conscrypt.ct.CTLogInfo
-com.android.org.conscrypt.ct.CTLogStore
-com.android.org.conscrypt.ct.CTLogStoreImpl
-com.android.org.conscrypt.ct.CTLogStoreImpl$InvalidLogFileException
-com.android.org.conscrypt.ct.CTPolicy
-com.android.org.conscrypt.ct.CTPolicyImpl
-com.android.org.conscrypt.ct.CTVerifier
-com.android.org.conscrypt.ct.KnownLogs
-com.android.org.conscrypt.ct.SerializationException
-com.android.server.NetworkManagementSocketTagger
-com.android.server.NetworkManagementSocketTagger$1
-com.android.server.NetworkManagementSocketTagger$SocketTags
-com.google.android.collect.Lists
-com.google.android.collect.Maps
-com.google.android.gles_jni.EGLConfigImpl
-com.google.android.gles_jni.EGLContextImpl
-com.google.android.gles_jni.EGLDisplayImpl
-com.google.android.gles_jni.EGLImpl
-com.google.android.gles_jni.EGLSurfaceImpl
-com.google.android.gles_jni.GLImpl
-dalvik.annotation.optimization.CriticalNative
-dalvik.annotation.optimization.FastNative
-dalvik.system.-$Lambda$xxvwQBVHC44UYbpcpA8j0sUqLOo
-dalvik.system.BaseDexClassLoader
-dalvik.system.BaseDexClassLoader$Reporter
-dalvik.system.BlockGuard
-dalvik.system.BlockGuard$1
-dalvik.system.BlockGuard$2
-dalvik.system.BlockGuard$BlockGuardPolicyException
-dalvik.system.BlockGuard$Policy
-dalvik.system.ClassExt
-dalvik.system.CloseGuard
-dalvik.system.CloseGuard$DefaultReporter
-dalvik.system.CloseGuard$DefaultTracker
-dalvik.system.CloseGuard$Reporter
-dalvik.system.CloseGuard$Tracker
-dalvik.system.DalvikLogHandler
-dalvik.system.DalvikLogging
-dalvik.system.DexClassLoader
-dalvik.system.DexFile
-dalvik.system.DexFile$DFEnum
-dalvik.system.DexPathList
-dalvik.system.DexPathList$Element
-dalvik.system.DexPathList$NativeLibraryElement
-dalvik.system.EmulatedStackFrame
-dalvik.system.EmulatedStackFrame$Range
-dalvik.system.PathClassLoader
-dalvik.system.SocketTagger
-dalvik.system.SocketTagger$1
-dalvik.system.VMDebug
-dalvik.system.VMRuntime
-dalvik.system.VMStack
-dalvik.system.ZygoteHooks
-java.io.Bits
-java.io.BufferedInputStream
-java.io.BufferedOutputStream
-java.io.BufferedReader
-java.io.ByteArrayInputStream
-java.io.ByteArrayOutputStream
-java.io.CharArrayWriter
-java.io.Closeable
-java.io.Console
-java.io.DataInput
-java.io.DataInputStream
-java.io.DataOutput
-java.io.DataOutputStream
-java.io.DefaultFileSystem
-java.io.EOFException
-java.io.ExpiringCache
-java.io.ExpiringCache$1
-java.io.ExpiringCache$Entry
-java.io.Externalizable
-java.io.File
-java.io.File$PathStatus
-java.io.File$TempDirectory
-java.io.FileDescriptor
-java.io.FileDescriptor$1
-java.io.FileFilter
-java.io.FileInputStream
-java.io.FileInputStream$UseManualSkipException
-java.io.FileNotFoundException
-java.io.FileOutputStream
-java.io.FileReader
-java.io.FileSystem
-java.io.FilenameFilter
-java.io.FilterInputStream
-java.io.FilterOutputStream
-java.io.Flushable
-java.io.IOException
-java.io.InputStream
-java.io.InputStreamReader
-java.io.InterruptedIOException
-java.io.InvalidObjectException
-java.io.ObjectInput
-java.io.ObjectInputStream
-java.io.ObjectInputStream$BlockDataInputStream
-java.io.ObjectInputStream$HandleTable
-java.io.ObjectInputStream$HandleTable$HandleList
-java.io.ObjectInputStream$PeekInputStream
-java.io.ObjectInputStream$ValidationList
-java.io.ObjectOutput
-java.io.ObjectOutputStream
-java.io.ObjectOutputStream$PutField
-java.io.ObjectStreamClass
-java.io.ObjectStreamConstants
-java.io.ObjectStreamException
-java.io.ObjectStreamField
-java.io.OutputStream
-java.io.OutputStreamWriter
-java.io.PrintStream
-java.io.PrintWriter
-java.io.PushbackInputStream
-java.io.RandomAccessFile
-java.io.Reader
-java.io.Serializable
-java.io.SerializablePermission
-java.io.StringReader
-java.io.StringWriter
-java.io.UnixFileSystem
-java.io.UnsupportedEncodingException
-java.io.Writer
-java.lang.-$Lambda$S9HjrJh0nDg7IyU6wZdPArnZWRQ
-java.lang.-$Lambda$S9HjrJh0nDg7IyU6wZdPArnZWRQ$1
-java.lang.AbstractMethodError
-java.lang.AbstractStringBuilder
-java.lang.AndroidHardcodedSystemProperties
-java.lang.Appendable
-java.lang.ArithmeticException
-java.lang.ArrayIndexOutOfBoundsException
-java.lang.ArrayStoreException
-java.lang.AssertionError
-java.lang.AutoCloseable
-java.lang.Boolean
-java.lang.BootClassLoader
-java.lang.Byte
-java.lang.Byte$ByteCache
-java.lang.CaseMapper
-java.lang.CaseMapper$1
-java.lang.CharSequence
-java.lang.CharSequence$1CharIterator
-java.lang.CharSequence$1CodePointIterator
-java.lang.Character
-java.lang.Character$CharacterCache
-java.lang.Character$Subset
-java.lang.Character$UnicodeBlock
-java.lang.Class
-java.lang.Class$Caches
-java.lang.ClassCastException
-java.lang.ClassLoader
-java.lang.ClassLoader$SystemClassLoader
-java.lang.ClassNotFoundException
-java.lang.CloneNotSupportedException
-java.lang.Cloneable
-java.lang.Comparable
-java.lang.Daemons
-java.lang.Daemons$Daemon
-java.lang.Daemons$FinalizerDaemon
-java.lang.Daemons$FinalizerWatchdogDaemon
-java.lang.Daemons$HeapTaskDaemon
-java.lang.Daemons$ReferenceQueueDaemon
-java.lang.DexCache
-java.lang.Double
-java.lang.Enum
-java.lang.Enum$1
-java.lang.EnumConstantNotPresentException
-java.lang.Error
-java.lang.Exception
-java.lang.Float
-java.lang.IllegalAccessError
-java.lang.IllegalAccessException
-java.lang.IllegalArgumentException
-java.lang.IllegalStateException
-java.lang.IllegalThreadStateException
-java.lang.IncompatibleClassChangeError
-java.lang.IndexOutOfBoundsException
-java.lang.InheritableThreadLocal
-java.lang.InstantiationException
-java.lang.Integer
-java.lang.Integer$IntegerCache
-java.lang.InternalError
-java.lang.InterruptedException
-java.lang.Iterable
-java.lang.JavaLangAccess
-java.lang.LinkageError
-java.lang.Long
-java.lang.Long$LongCache
-java.lang.Math
-java.lang.Math$RandomNumberGeneratorHolder
-java.lang.NegativeArraySizeException
-java.lang.NoClassDefFoundError
-java.lang.NoSuchFieldError
-java.lang.NoSuchFieldException
-java.lang.NoSuchMethodError
-java.lang.NoSuchMethodException
-java.lang.NullPointerException
-java.lang.Number
-java.lang.NumberFormatException
-java.lang.Object
-java.lang.OutOfMemoryError
-java.lang.Package
-java.lang.Process
-java.lang.ProcessBuilder
-java.lang.ProcessEnvironment
-java.lang.Readable
-java.lang.ReflectiveOperationException
-java.lang.Runnable
-java.lang.Runtime
-java.lang.RuntimeException
-java.lang.RuntimePermission
-java.lang.SecurityException
-java.lang.SecurityManager
-java.lang.Short
-java.lang.Short$ShortCache
-java.lang.StackOverflowError
-java.lang.StackTraceElement
-java.lang.StrictMath
-java.lang.String
-java.lang.String$CaseInsensitiveComparator
-java.lang.StringBuffer
-java.lang.StringBuilder
-java.lang.StringFactory
-java.lang.StringIndexOutOfBoundsException
-java.lang.System
-java.lang.System$PropertiesWithNonOverrideableDefaults
-java.lang.Thread
-java.lang.Thread$1
-java.lang.Thread$Caches
-java.lang.Thread$State
-java.lang.Thread$UncaughtExceptionHandler
-java.lang.Thread$WeakClassKey
-java.lang.ThreadDeath
-java.lang.ThreadGroup
-java.lang.ThreadLocal
-java.lang.ThreadLocal$ThreadLocalMap
-java.lang.ThreadLocal$ThreadLocalMap$Entry
-java.lang.Throwable
-java.lang.Throwable$PrintStreamOrWriter
-java.lang.Throwable$SentinelHolder
-java.lang.Throwable$WrappedPrintStream
-java.lang.Throwable$WrappedPrintWriter
-java.lang.TypeNotPresentException
-java.lang.UNIXProcess
-java.lang.UnsatisfiedLinkError
-java.lang.UnsupportedOperationException
-java.lang.VMClassLoader
-java.lang.VerifyError
-java.lang.VirtualMachineError
-java.lang.Void
-java.lang.annotation.Annotation
-java.lang.annotation.AnnotationTypeMismatchException
-java.lang.annotation.IncompleteAnnotationException
-java.lang.annotation.Inherited
-java.lang.annotation.Retention
-java.lang.annotation.Target
-java.lang.invoke.CallSite
-java.lang.invoke.ConstantCallSite
-java.lang.invoke.MethodHandle
-java.lang.invoke.MethodHandleImpl
-java.lang.invoke.MethodHandleImpl$HandleInfo
-java.lang.invoke.MethodHandleInfo
-java.lang.invoke.MethodHandleStatics
-java.lang.invoke.MethodHandles
-java.lang.invoke.MethodHandles$Lookup
-java.lang.invoke.MethodType
-java.lang.invoke.MethodType$ConcurrentWeakInternSet
-java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry
-java.lang.invoke.MethodTypeForm
-java.lang.invoke.Transformers$BindTo
-java.lang.invoke.Transformers$Collector
-java.lang.invoke.Transformers$Construct
-java.lang.invoke.Transformers$Spreader
-java.lang.invoke.Transformers$Transformer
-java.lang.invoke.Transformers$VarargsCollector
-java.lang.invoke.WrongMethodTypeException
-java.lang.ref.FinalizerReference
-java.lang.ref.FinalizerReference$Sentinel
-java.lang.ref.PhantomReference
-java.lang.ref.Reference
-java.lang.ref.ReferenceQueue
-java.lang.ref.SoftReference
-java.lang.ref.WeakReference
-java.lang.reflect.AccessibleObject
-java.lang.reflect.AnnotatedElement
-java.lang.reflect.Array
-java.lang.reflect.Constructor
-java.lang.reflect.Executable
-java.lang.reflect.Executable$GenericInfo
-java.lang.reflect.Field
-java.lang.reflect.GenericArrayType
-java.lang.reflect.GenericDeclaration
-java.lang.reflect.InvocationHandler
-java.lang.reflect.InvocationTargetException
-java.lang.reflect.MalformedParametersException
-java.lang.reflect.Member
-java.lang.reflect.Method
-java.lang.reflect.Method$1
-java.lang.reflect.Modifier
-java.lang.reflect.Parameter
-java.lang.reflect.ParameterizedType
-java.lang.reflect.Proxy
-java.lang.reflect.Proxy$1
-java.lang.reflect.Proxy$Key1
-java.lang.reflect.Proxy$Key2
-java.lang.reflect.Proxy$KeyFactory
-java.lang.reflect.Proxy$KeyX
-java.lang.reflect.Proxy$ProxyClassFactory
-java.lang.reflect.Type
-java.lang.reflect.TypeVariable
-java.lang.reflect.UndeclaredThrowableException
-java.lang.reflect.WeakCache
-java.lang.reflect.WeakCache$CacheKey
-java.lang.reflect.WeakCache$CacheValue
-java.lang.reflect.WeakCache$Factory
-java.lang.reflect.WeakCache$LookupValue
-java.lang.reflect.WeakCache$Value
-java.lang.reflect.WildcardType
-java.math.BigDecimal
-java.math.BigInt
-java.math.BigInteger
-java.math.NativeBN
-java.math.RoundingMode
-java.net.AbstractPlainSocketImpl
-java.net.AddressCache
-java.net.AddressCache$AddressCacheEntry
-java.net.AddressCache$AddressCacheKey
-java.net.ConnectException
-java.net.CookieHandler
-java.net.HttpURLConnection
-java.net.IDN
-java.net.Inet4Address
-java.net.Inet6Address
-java.net.Inet6Address$Inet6AddressHolder
-java.net.Inet6AddressImpl
-java.net.InetAddress
-java.net.InetAddress$1
-java.net.InetAddress$InetAddressHolder
-java.net.InetAddressImpl
-java.net.InetSocketAddress
-java.net.InetSocketAddress$InetSocketAddressHolder
-java.net.JarURLConnection
-java.net.MalformedURLException
-java.net.NetworkInterface
-java.net.Parts
-java.net.PlainSocketImpl
-java.net.Proxy
-java.net.Proxy$Type
-java.net.ProxySelector
-java.net.ResponseCache
-java.net.ServerSocket
-java.net.Socket
-java.net.Socket$2
-java.net.Socket$3
-java.net.SocketAddress
-java.net.SocketException
-java.net.SocketImpl
-java.net.SocketInputStream
-java.net.SocketOptions
-java.net.SocketOutputStream
-java.net.SocketTimeoutException
-java.net.SocksConsts
-java.net.SocksSocketImpl
-java.net.URI
-java.net.URI$Parser
-java.net.URISyntaxException
-java.net.URL
-java.net.URLConnection
-java.net.URLEncoder
-java.net.URLStreamHandler
-java.net.URLStreamHandlerFactory
-java.net.UnknownHostException
-java.nio.Bits
-java.nio.Buffer
-java.nio.BufferOverflowException
-java.nio.BufferUnderflowException
-java.nio.ByteBuffer
-java.nio.ByteBufferAsCharBuffer
-java.nio.ByteBufferAsDoubleBuffer
-java.nio.ByteBufferAsFloatBuffer
-java.nio.ByteBufferAsIntBuffer
-java.nio.ByteBufferAsLongBuffer
-java.nio.ByteBufferAsShortBuffer
-java.nio.ByteOrder
-java.nio.CharBuffer
-java.nio.DirectByteBuffer
-java.nio.DirectByteBuffer$MemoryRef
-java.nio.DoubleBuffer
-java.nio.FloatBuffer
-java.nio.HeapByteBuffer
-java.nio.HeapCharBuffer
-java.nio.IntBuffer
-java.nio.InvalidMarkException
-java.nio.LongBuffer
-java.nio.MappedByteBuffer
-java.nio.NIOAccess
-java.nio.ReadOnlyBufferException
-java.nio.ShortBuffer
-java.nio.StringCharBuffer
-java.nio.channels.AsynchronousCloseException
-java.nio.channels.ByteChannel
-java.nio.channels.Channel
-java.nio.channels.ClosedByInterruptException
-java.nio.channels.ClosedChannelException
-java.nio.channels.DatagramChannel
-java.nio.channels.FileChannel
-java.nio.channels.FileChannel$MapMode
-java.nio.channels.FileLock
-java.nio.channels.GatheringByteChannel
-java.nio.channels.InterruptibleChannel
-java.nio.channels.MulticastChannel
-java.nio.channels.NetworkChannel
-java.nio.channels.OverlappingFileLockException
-java.nio.channels.ReadableByteChannel
-java.nio.channels.ScatteringByteChannel
-java.nio.channels.SeekableByteChannel
-java.nio.channels.SelectableChannel
-java.nio.channels.ServerSocketChannel
-java.nio.channels.SocketChannel
-java.nio.channels.WritableByteChannel
-java.nio.channels.spi.AbstractInterruptibleChannel
-java.nio.channels.spi.AbstractInterruptibleChannel$1
-java.nio.channels.spi.AbstractSelectableChannel
-java.nio.charset.CharacterCodingException
-java.nio.charset.Charset
-java.nio.charset.CharsetDecoder
-java.nio.charset.CharsetDecoderICU
-java.nio.charset.CharsetEncoder
-java.nio.charset.CharsetEncoderICU
-java.nio.charset.CharsetICU
-java.nio.charset.CoderResult
-java.nio.charset.CoderResult$1
-java.nio.charset.CoderResult$2
-java.nio.charset.CoderResult$Cache
-java.nio.charset.CodingErrorAction
-java.nio.charset.IllegalCharsetNameException
-java.nio.charset.StandardCharsets
-java.nio.charset.UnsupportedCharsetException
-java.nio.file.attribute.FileAttribute
-java.security.AccessControlContext
-java.security.AccessControlException
-java.security.AccessController
-java.security.AlgorithmConstraints
-java.security.AlgorithmParameters
-java.security.AlgorithmParametersSpi
-java.security.BasicPermission
-java.security.CryptoPrimitive
-java.security.GeneralSecurityException
-java.security.Guard
-java.security.InvalidAlgorithmParameterException
-java.security.InvalidKeyException
-java.security.Key
-java.security.KeyException
-java.security.KeyFactory
-java.security.KeyFactorySpi
-java.security.KeyManagementException
-java.security.KeyStore
-java.security.KeyStore$1
-java.security.KeyStoreException
-java.security.KeyStoreSpi
-java.security.MessageDigest
-java.security.MessageDigest$Delegate
-java.security.MessageDigestSpi
-java.security.NoSuchAlgorithmException
-java.security.NoSuchProviderException
-java.security.Permission
-java.security.PermissionCollection
-java.security.Permissions
-java.security.Principal
-java.security.PrivateKey
-java.security.PrivilegedAction
-java.security.PrivilegedActionException
-java.security.PrivilegedExceptionAction
-java.security.ProtectionDomain
-java.security.Provider
-java.security.Provider$EngineDescription
-java.security.Provider$Service
-java.security.Provider$ServiceKey
-java.security.Provider$UString
-java.security.PublicKey
-java.security.SecureRandom
-java.security.SecureRandomSpi
-java.security.Security
-java.security.Signature
-java.security.Signature$Delegate
-java.security.SignatureException
-java.security.SignatureSpi
-java.security.UnrecoverableEntryException
-java.security.UnrecoverableKeyException
-java.security.cert.CRL
-java.security.cert.CRLException
-java.security.cert.CertPath
-java.security.cert.CertPathChecker
-java.security.cert.CertPathHelperImpl
-java.security.cert.CertPathParameters
-java.security.cert.CertPathValidator
-java.security.cert.CertPathValidatorException
-java.security.cert.CertPathValidatorResult
-java.security.cert.CertPathValidatorSpi
-java.security.cert.CertSelector
-java.security.cert.Certificate
-java.security.cert.CertificateEncodingException
-java.security.cert.CertificateException
-java.security.cert.CertificateExpiredException
-java.security.cert.CertificateFactory
-java.security.cert.CertificateFactorySpi
-java.security.cert.CertificateNotYetValidException
-java.security.cert.CertificateParsingException
-java.security.cert.Extension
-java.security.cert.PKIXCertPathChecker
-java.security.cert.PKIXCertPathValidatorResult
-java.security.cert.PKIXParameters
-java.security.cert.PKIXRevocationChecker
-java.security.cert.PolicyNode
-java.security.cert.TrustAnchor
-java.security.cert.X509CertSelector
-java.security.cert.X509Certificate
-java.security.cert.X509Extension
-java.security.interfaces.DSAKey
-java.security.interfaces.DSAPublicKey
-java.security.interfaces.ECKey
-java.security.interfaces.ECPrivateKey
-java.security.interfaces.ECPublicKey
-java.security.interfaces.RSAKey
-java.security.interfaces.RSAPrivateKey
-java.security.interfaces.RSAPublicKey
-java.security.spec.AlgorithmParameterSpec
-java.security.spec.ECField
-java.security.spec.ECFieldFp
-java.security.spec.ECParameterSpec
-java.security.spec.ECPoint
-java.security.spec.ECPublicKeySpec
-java.security.spec.EllipticCurve
-java.security.spec.EncodedKeySpec
-java.security.spec.InvalidKeySpecException
-java.security.spec.InvalidParameterSpecException
-java.security.spec.KeySpec
-java.security.spec.RSAPublicKeySpec
-java.security.spec.X509EncodedKeySpec
-java.text.AttributedCharacterIterator$Attribute
-java.text.CharacterIterator
-java.text.DateFormat
-java.text.DateFormat$Field
-java.text.DateFormatSymbols
-java.text.DecimalFormat
-java.text.DecimalFormatSymbols
-java.text.DontCareFieldPosition
-java.text.DontCareFieldPosition$1
-java.text.FieldPosition
-java.text.Format
-java.text.Format$Field
-java.text.Format$FieldDelegate
-java.text.Normalizer
-java.text.Normalizer$Form
-java.text.NumberFormat
-java.text.ParseException
-java.text.ParsePosition
-java.text.SimpleDateFormat
-java.text.StringCharacterIterator
-java.time.DateTimeException
-java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo
-java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$1
-java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$2
-java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$3
-java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$4
-java.util.-$Lambda$4EqhxufgNKat19m0CB0-toH_lzo$5
-java.util.-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw
-java.util.-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw$1
-java.util.-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw$2
-java.util.-$Lambda$aUGKT4ItCOku5-JSG-x8Aqj2pJw$3
-java.util.AbstractCollection
-java.util.AbstractList
-java.util.AbstractList$Itr
-java.util.AbstractList$ListItr
-java.util.AbstractMap
-java.util.AbstractMap$1
-java.util.AbstractMap$2
-java.util.AbstractMap$SimpleImmutableEntry
-java.util.AbstractQueue
-java.util.AbstractSequentialList
-java.util.AbstractSet
-java.util.ArrayDeque
-java.util.ArrayDeque$DeqIterator
-java.util.ArrayList
-java.util.ArrayList$ArrayListSpliterator
-java.util.ArrayList$Itr
-java.util.ArrayList$ListItr
-java.util.ArrayList$SubList
-java.util.ArrayList$SubList$1
-java.util.ArrayPrefixHelpers$CumulateTask
-java.util.ArrayPrefixHelpers$DoubleCumulateTask
-java.util.ArrayPrefixHelpers$IntCumulateTask
-java.util.ArrayPrefixHelpers$LongCumulateTask
-java.util.Arrays
-java.util.Arrays$ArrayList
-java.util.Arrays$NaturalOrder
-java.util.ArraysParallelSortHelpers$FJByte$Sorter
-java.util.ArraysParallelSortHelpers$FJChar$Sorter
-java.util.ArraysParallelSortHelpers$FJDouble$Sorter
-java.util.ArraysParallelSortHelpers$FJFloat$Sorter
-java.util.ArraysParallelSortHelpers$FJInt$Sorter
-java.util.ArraysParallelSortHelpers$FJLong$Sorter
-java.util.ArraysParallelSortHelpers$FJObject$Sorter
-java.util.ArraysParallelSortHelpers$FJShort$Sorter
-java.util.BitSet
-java.util.Calendar
-java.util.Collection
-java.util.Collections
-java.util.Collections$1
-java.util.Collections$2
-java.util.Collections$3
-java.util.Collections$AsLIFOQueue
-java.util.Collections$CheckedCollection
-java.util.Collections$CheckedList
-java.util.Collections$CheckedMap
-java.util.Collections$CheckedNavigableMap
-java.util.Collections$CheckedNavigableSet
-java.util.Collections$CheckedQueue
-java.util.Collections$CheckedRandomAccessList
-java.util.Collections$CheckedSet
-java.util.Collections$CheckedSortedMap
-java.util.Collections$CheckedSortedSet
-java.util.Collections$CopiesList
-java.util.Collections$EmptyEnumeration
-java.util.Collections$EmptyIterator
-java.util.Collections$EmptyList
-java.util.Collections$EmptyListIterator
-java.util.Collections$EmptyMap
-java.util.Collections$EmptySet
-java.util.Collections$ReverseComparator
-java.util.Collections$ReverseComparator2
-java.util.Collections$SetFromMap
-java.util.Collections$SingletonList
-java.util.Collections$SingletonMap
-java.util.Collections$SingletonSet
-java.util.Collections$SynchronizedCollection
-java.util.Collections$SynchronizedList
-java.util.Collections$SynchronizedMap
-java.util.Collections$SynchronizedNavigableMap
-java.util.Collections$SynchronizedNavigableSet
-java.util.Collections$SynchronizedRandomAccessList
-java.util.Collections$SynchronizedSet
-java.util.Collections$SynchronizedSortedMap
-java.util.Collections$SynchronizedSortedSet
-java.util.Collections$UnmodifiableCollection
-java.util.Collections$UnmodifiableCollection$1
-java.util.Collections$UnmodifiableList
-java.util.Collections$UnmodifiableList$1
-java.util.Collections$UnmodifiableMap
-java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet
-java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$1
-java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry
-java.util.Collections$UnmodifiableNavigableMap
-java.util.Collections$UnmodifiableNavigableMap$EmptyNavigableMap
-java.util.Collections$UnmodifiableNavigableSet
-java.util.Collections$UnmodifiableNavigableSet$EmptyNavigableSet
-java.util.Collections$UnmodifiableRandomAccessList
-java.util.Collections$UnmodifiableSet
-java.util.Collections$UnmodifiableSortedMap
-java.util.Collections$UnmodifiableSortedSet
-java.util.ComparableTimSort
-java.util.Comparator
-java.util.Comparators$NaturalOrderComparator
-java.util.Comparators$NullComparator
-java.util.ConcurrentModificationException
-java.util.Currency
-java.util.Date
-java.util.Deque
-java.util.Dictionary
-java.util.DualPivotQuicksort
-java.util.EnumMap
-java.util.EnumMap$1
-java.util.EnumSet
-java.util.Enumeration
-java.util.EventListener
-java.util.Formattable
-java.util.Formatter
-java.util.Formatter$Conversion
-java.util.Formatter$FixedString
-java.util.Formatter$Flags
-java.util.Formatter$FormatSpecifier
-java.util.Formatter$FormatSpecifierParser
-java.util.Formatter$FormatString
-java.util.FormatterClosedException
-java.util.GregorianCalendar
-java.util.HashMap
-java.util.HashMap$EntryIterator
-java.util.HashMap$EntrySet
-java.util.HashMap$HashIterator
-java.util.HashMap$KeyIterator
-java.util.HashMap$KeySet
-java.util.HashMap$Node
-java.util.HashMap$TreeNode
-java.util.HashMap$ValueIterator
-java.util.HashMap$Values
-java.util.HashSet
-java.util.Hashtable
-java.util.Hashtable$Enumerator
-java.util.Hashtable$HashtableEntry
-java.util.IdentityHashMap
-java.util.IdentityHashMap$KeySet
-java.util.IllegalFormatException
-java.util.IllformedLocaleException
-java.util.Iterator
-java.util.LinkedHashMap
-java.util.LinkedHashMap$LinkedEntryIterator
-java.util.LinkedHashMap$LinkedEntrySet
-java.util.LinkedHashMap$LinkedHashIterator
-java.util.LinkedHashMap$LinkedHashMapEntry
-java.util.LinkedHashMap$LinkedKeyIterator
-java.util.LinkedHashMap$LinkedKeySet
-java.util.LinkedHashMap$LinkedValueIterator
-java.util.LinkedHashMap$LinkedValues
-java.util.LinkedHashSet
-java.util.LinkedList
-java.util.LinkedList$ListItr
-java.util.LinkedList$Node
-java.util.List
-java.util.ListIterator
-java.util.Locale
-java.util.Locale$Builder
-java.util.Locale$Cache
-java.util.Locale$Category
-java.util.Locale$FilteringMode
-java.util.Locale$LanguageRange
-java.util.Locale$LocaleKey
-java.util.Locale$NoImagePreloadHolder
-java.util.Map
-java.util.Map$Entry
-java.util.MissingResourceException
-java.util.NavigableMap
-java.util.NavigableSet
-java.util.NoSuchElementException
-java.util.Objects
-java.util.PrimitiveIterator
-java.util.PrimitiveIterator$OfInt
-java.util.PriorityQueue
-java.util.PriorityQueue$Itr
-java.util.Properties
-java.util.Properties$LineReader
-java.util.Queue
-java.util.Random
-java.util.RandomAccess
-java.util.RandomAccessSubList
-java.util.RegularEnumSet
-java.util.ResourceBundle
-java.util.ResourceBundle$1
-java.util.Set
-java.util.SimpleTimeZone
-java.util.SortedMap
-java.util.SortedSet
-java.util.Spliterator
-java.util.Spliterator$OfDouble
-java.util.Spliterator$OfInt
-java.util.Spliterator$OfLong
-java.util.Spliterator$OfPrimitive
-java.util.Spliterators
-java.util.Spliterators$EmptySpliterator
-java.util.Spliterators$EmptySpliterator$OfDouble
-java.util.Spliterators$EmptySpliterator$OfInt
-java.util.Spliterators$EmptySpliterator$OfLong
-java.util.Spliterators$EmptySpliterator$OfRef
-java.util.Stack
-java.util.StringJoiner
-java.util.StringTokenizer
-java.util.SubList
-java.util.TimSort
-java.util.TimeZone
-java.util.TreeMap
-java.util.TreeMap$AscendingSubMap
-java.util.TreeMap$AscendingSubMap$AscendingEntrySetView
-java.util.TreeMap$EntryIterator
-java.util.TreeMap$EntrySet
-java.util.TreeMap$KeyIterator
-java.util.TreeMap$KeySet
-java.util.TreeMap$NavigableSubMap
-java.util.TreeMap$NavigableSubMap$EntrySetView
-java.util.TreeMap$NavigableSubMap$SubMapIterator
-java.util.TreeMap$PrivateEntryIterator
-java.util.TreeMap$TreeMapEntry
-java.util.TreeMap$ValueIterator
-java.util.TreeMap$Values
-java.util.TreeSet
-java.util.UUID
-java.util.UUID$Holder
-java.util.Vector
-java.util.Vector$1
-java.util.Vector$Itr
-java.util.WeakHashMap
-java.util.WeakHashMap$Entry
-java.util.WeakHashMap$EntrySet
-java.util.WeakHashMap$HashIterator
-java.util.WeakHashMap$KeyIterator
-java.util.WeakHashMap$KeySet
-java.util.WeakHashMap$Values
-java.util.concurrent.-$Lambda$xR9BLpu6SifNikvFgr4lEiECBsk
-java.util.concurrent.AbstractExecutorService
-java.util.concurrent.ArrayBlockingQueue
-java.util.concurrent.BlockingQueue
-java.util.concurrent.Callable
-java.util.concurrent.CancellationException
-java.util.concurrent.ConcurrentHashMap
-java.util.concurrent.ConcurrentHashMap$BaseIterator
-java.util.concurrent.ConcurrentHashMap$BulkTask
-java.util.concurrent.ConcurrentHashMap$CollectionView
-java.util.concurrent.ConcurrentHashMap$CounterCell
-java.util.concurrent.ConcurrentHashMap$EntryIterator
-java.util.concurrent.ConcurrentHashMap$EntrySetView
-java.util.concurrent.ConcurrentHashMap$ForEachEntryTask
-java.util.concurrent.ConcurrentHashMap$ForEachKeyTask
-java.util.concurrent.ConcurrentHashMap$ForEachMappingTask
-java.util.concurrent.ConcurrentHashMap$ForEachTransformedEntryTask
-java.util.concurrent.ConcurrentHashMap$ForEachTransformedKeyTask
-java.util.concurrent.ConcurrentHashMap$ForEachTransformedMappingTask
-java.util.concurrent.ConcurrentHashMap$ForEachTransformedValueTask
-java.util.concurrent.ConcurrentHashMap$ForEachValueTask
-java.util.concurrent.ConcurrentHashMap$ForwardingNode
-java.util.concurrent.ConcurrentHashMap$KeyIterator
-java.util.concurrent.ConcurrentHashMap$KeySetView
-java.util.concurrent.ConcurrentHashMap$MapReduceEntriesTask
-java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToDoubleTask
-java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToIntTask
-java.util.concurrent.ConcurrentHashMap$MapReduceEntriesToLongTask
-java.util.concurrent.ConcurrentHashMap$MapReduceKeysTask
-java.util.concurrent.ConcurrentHashMap$MapReduceKeysToDoubleTask
-java.util.concurrent.ConcurrentHashMap$MapReduceKeysToIntTask
-java.util.concurrent.ConcurrentHashMap$MapReduceKeysToLongTask
-java.util.concurrent.ConcurrentHashMap$MapReduceMappingsTask
-java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToDoubleTask
-java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToIntTask
-java.util.concurrent.ConcurrentHashMap$MapReduceMappingsToLongTask
-java.util.concurrent.ConcurrentHashMap$MapReduceValuesTask
-java.util.concurrent.ConcurrentHashMap$MapReduceValuesToDoubleTask
-java.util.concurrent.ConcurrentHashMap$MapReduceValuesToIntTask
-java.util.concurrent.ConcurrentHashMap$MapReduceValuesToLongTask
-java.util.concurrent.ConcurrentHashMap$Node
-java.util.concurrent.ConcurrentHashMap$ReduceEntriesTask
-java.util.concurrent.ConcurrentHashMap$ReduceKeysTask
-java.util.concurrent.ConcurrentHashMap$ReduceValuesTask
-java.util.concurrent.ConcurrentHashMap$ReservationNode
-java.util.concurrent.ConcurrentHashMap$SearchEntriesTask
-java.util.concurrent.ConcurrentHashMap$SearchKeysTask
-java.util.concurrent.ConcurrentHashMap$SearchMappingsTask
-java.util.concurrent.ConcurrentHashMap$SearchValuesTask
-java.util.concurrent.ConcurrentHashMap$Segment
-java.util.concurrent.ConcurrentHashMap$Traverser
-java.util.concurrent.ConcurrentHashMap$TreeBin
-java.util.concurrent.ConcurrentHashMap$TreeNode
-java.util.concurrent.ConcurrentHashMap$ValueIterator
-java.util.concurrent.ConcurrentHashMap$ValuesView
-java.util.concurrent.ConcurrentLinkedDeque
-java.util.concurrent.ConcurrentLinkedDeque$Node
-java.util.concurrent.ConcurrentLinkedQueue
-java.util.concurrent.ConcurrentLinkedQueue$Node
-java.util.concurrent.ConcurrentMap
-java.util.concurrent.CopyOnWriteArrayList
-java.util.concurrent.CopyOnWriteArrayList$COWIterator
-java.util.concurrent.CopyOnWriteArraySet
-java.util.concurrent.CountDownLatch
-java.util.concurrent.CountDownLatch$Sync
-java.util.concurrent.CountedCompleter
-java.util.concurrent.Delayed
-java.util.concurrent.ExecutionException
-java.util.concurrent.Executor
-java.util.concurrent.ExecutorService
-java.util.concurrent.Executors
-java.util.concurrent.Executors$DefaultThreadFactory
-java.util.concurrent.Executors$DelegatedExecutorService
-java.util.concurrent.Executors$DelegatedScheduledExecutorService
-java.util.concurrent.Executors$FinalizableDelegatedExecutorService
-java.util.concurrent.Executors$RunnableAdapter
-java.util.concurrent.ForkJoinPool
-java.util.concurrent.ForkJoinTask
-java.util.concurrent.ForkJoinTask$ExceptionNode
-java.util.concurrent.Future
-java.util.concurrent.FutureTask
-java.util.concurrent.FutureTask$WaitNode
-java.util.concurrent.LinkedBlockingQueue
-java.util.concurrent.LinkedBlockingQueue$Node
-java.util.concurrent.PriorityBlockingQueue
-java.util.concurrent.RejectedExecutionException
-java.util.concurrent.RejectedExecutionHandler
-java.util.concurrent.RunnableFuture
-java.util.concurrent.RunnableScheduledFuture
-java.util.concurrent.ScheduledExecutorService
-java.util.concurrent.ScheduledFuture
-java.util.concurrent.ScheduledThreadPoolExecutor
-java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
-java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask
-java.util.concurrent.Semaphore
-java.util.concurrent.Semaphore$NonfairSync
-java.util.concurrent.Semaphore$Sync
-java.util.concurrent.SynchronousQueue
-java.util.concurrent.SynchronousQueue$TransferStack
-java.util.concurrent.SynchronousQueue$TransferStack$SNode
-java.util.concurrent.SynchronousQueue$Transferer
-java.util.concurrent.ThreadFactory
-java.util.concurrent.ThreadLocalRandom
-java.util.concurrent.ThreadPoolExecutor
-java.util.concurrent.ThreadPoolExecutor$AbortPolicy
-java.util.concurrent.ThreadPoolExecutor$DiscardPolicy
-java.util.concurrent.ThreadPoolExecutor$Worker
-java.util.concurrent.TimeUnit
-java.util.concurrent.TimeUnit$1
-java.util.concurrent.TimeUnit$2
-java.util.concurrent.TimeUnit$3
-java.util.concurrent.TimeUnit$4
-java.util.concurrent.TimeUnit$5
-java.util.concurrent.TimeUnit$6
-java.util.concurrent.TimeUnit$7
-java.util.concurrent.TimeoutException
-java.util.concurrent.atomic.AtomicBoolean
-java.util.concurrent.atomic.AtomicInteger
-java.util.concurrent.atomic.AtomicLong
-java.util.concurrent.atomic.AtomicReference
-java.util.concurrent.atomic.AtomicReferenceArray
-java.util.concurrent.atomic.AtomicReferenceFieldUpdater
-java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
-java.util.concurrent.locks.AbstractOwnableSynchronizer
-java.util.concurrent.locks.AbstractQueuedSynchronizer
-java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
-java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
-java.util.concurrent.locks.Condition
-java.util.concurrent.locks.Lock
-java.util.concurrent.locks.LockSupport
-java.util.concurrent.locks.ReadWriteLock
-java.util.concurrent.locks.ReentrantLock
-java.util.concurrent.locks.ReentrantLock$NonfairSync
-java.util.concurrent.locks.ReentrantLock$Sync
-java.util.concurrent.locks.ReentrantReadWriteLock
-java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync
-java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock
-java.util.concurrent.locks.ReentrantReadWriteLock$Sync
-java.util.concurrent.locks.ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter
-java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock
-java.util.function.-$Lambda$1MZdIZ-DL_fjy9l0o8IMJk57T2g
-java.util.function.-$Lambda$VGDeaUHZQIZywZW2ttlyhwk3Cmk
-java.util.function.-$Lambda$VGDeaUHZQIZywZW2ttlyhwk3Cmk$1
-java.util.function.BiConsumer
-java.util.function.BiFunction
-java.util.function.BinaryOperator
-java.util.function.Consumer
-java.util.function.DoubleBinaryOperator
-java.util.function.DoubleUnaryOperator
-java.util.function.Function
-java.util.function.IntBinaryOperator
-java.util.function.IntConsumer
-java.util.function.IntFunction
-java.util.function.IntToDoubleFunction
-java.util.function.IntToLongFunction
-java.util.function.IntUnaryOperator
-java.util.function.LongBinaryOperator
-java.util.function.LongUnaryOperator
-java.util.function.Predicate
-java.util.function.Supplier
-java.util.function.ToDoubleBiFunction
-java.util.function.ToDoubleFunction
-java.util.function.ToIntBiFunction
-java.util.function.ToIntFunction
-java.util.function.ToLongBiFunction
-java.util.function.ToLongFunction
-java.util.function.UnaryOperator
-java.util.jar.JarEntry
-java.util.jar.JarFile
-java.util.jar.JarFile$JarEntryIterator
-java.util.jar.JarFile$JarFileEntry
-java.util.logging.ErrorManager
-java.util.logging.Formatter
-java.util.logging.Handler
-java.util.logging.Level
-java.util.logging.Level$KnownLevel
-java.util.logging.LogManager
-java.util.logging.LogManager$1
-java.util.logging.LogManager$2
-java.util.logging.LogManager$3
-java.util.logging.LogManager$5
-java.util.logging.LogManager$Cleaner
-java.util.logging.LogManager$LogNode
-java.util.logging.LogManager$LoggerContext
-java.util.logging.LogManager$LoggerContext$1
-java.util.logging.LogManager$LoggerWeakRef
-java.util.logging.LogManager$RootLogger
-java.util.logging.LogManager$SystemLoggerContext
-java.util.logging.LogRecord
-java.util.logging.Logger
-java.util.logging.Logger$LoggerBundle
-java.util.logging.LoggingPermission
-java.util.logging.LoggingProxyImpl
-java.util.prefs.AbstractPreferences
-java.util.prefs.FileSystemPreferences
-java.util.prefs.Preferences
-java.util.regex.MatchResult
-java.util.regex.Matcher
-java.util.regex.Pattern
-java.util.regex.PatternSyntaxException
-java.util.stream.AbstractPipeline
-java.util.stream.BaseStream
-java.util.stream.DoubleStream
-java.util.stream.IntStream
-java.util.stream.LongStream
-java.util.stream.PipelineHelper
-java.util.stream.ReferencePipeline
-java.util.stream.ReferencePipeline$Head
-java.util.stream.Sink
-java.util.stream.Sink$ChainedReference
-java.util.stream.Stream
-java.util.stream.StreamOpFlag
-java.util.stream.StreamOpFlag$MaskBuilder
-java.util.stream.StreamOpFlag$Type
-java.util.stream.StreamShape
-java.util.stream.StreamSupport
-java.util.stream.TerminalOp
-java.util.stream.TerminalSink
-java.util.zip.Adler32
-java.util.zip.CRC32
-java.util.zip.CheckedInputStream
-java.util.zip.Checksum
-java.util.zip.DataFormatException
-java.util.zip.Deflater
-java.util.zip.DeflaterOutputStream
-java.util.zip.GZIPInputStream
-java.util.zip.GZIPOutputStream
-java.util.zip.Inflater
-java.util.zip.InflaterInputStream
-java.util.zip.ZStreamRef
-java.util.zip.ZipCoder
-java.util.zip.ZipConstants
-java.util.zip.ZipEntry
-java.util.zip.ZipFile
-java.util.zip.ZipFile$ZipEntryIterator
-java.util.zip.ZipFile$ZipFileInflaterInputStream
-java.util.zip.ZipFile$ZipFileInputStream
-java.util.zip.ZipUtils
-javax.crypto.BadPaddingException
-javax.crypto.Cipher
-javax.crypto.Cipher$CipherSpiAndProvider
-javax.crypto.Cipher$InitParams
-javax.crypto.Cipher$InitType
-javax.crypto.Cipher$NeedToSet
-javax.crypto.Cipher$SpiAndProviderUpdater
-javax.crypto.Cipher$Transform
-javax.crypto.CipherSpi
-javax.crypto.IllegalBlockSizeException
-javax.crypto.JceSecurity
-javax.crypto.NoSuchPaddingException
-javax.crypto.SecretKey
-javax.crypto.ShortBufferException
-javax.crypto.spec.IvParameterSpec
-javax.crypto.spec.SecretKeySpec
-javax.microedition.khronos.egl.EGL
-javax.microedition.khronos.egl.EGL10
-javax.microedition.khronos.egl.EGLConfig
-javax.microedition.khronos.egl.EGLContext
-javax.microedition.khronos.egl.EGLDisplay
-javax.microedition.khronos.egl.EGLSurface
-javax.microedition.khronos.opengles.GL
-javax.microedition.khronos.opengles.GL10
-javax.microedition.khronos.opengles.GL10Ext
-javax.microedition.khronos.opengles.GL11
-javax.microedition.khronos.opengles.GL11Ext
-javax.microedition.khronos.opengles.GL11ExtensionPack
-javax.net.DefaultSocketFactory
-javax.net.ServerSocketFactory
-javax.net.SocketFactory
-javax.net.ssl.ExtendedSSLSession
-javax.net.ssl.HandshakeCompletedListener
-javax.net.ssl.HostnameVerifier
-javax.net.ssl.HttpsURLConnection
-javax.net.ssl.KeyManager
-javax.net.ssl.KeyManagerFactory
-javax.net.ssl.KeyManagerFactory$1
-javax.net.ssl.KeyManagerFactorySpi
-javax.net.ssl.SNIHostName
-javax.net.ssl.SNIServerName
-javax.net.ssl.SSLContext
-javax.net.ssl.SSLContextSpi
-javax.net.ssl.SSLEngine
-javax.net.ssl.SSLException
-javax.net.ssl.SSLParameters
-javax.net.ssl.SSLPeerUnverifiedException
-javax.net.ssl.SSLProtocolException
-javax.net.ssl.SSLServerSocketFactory
-javax.net.ssl.SSLSession
-javax.net.ssl.SSLSessionContext
-javax.net.ssl.SSLSocket
-javax.net.ssl.SSLSocketFactory
-javax.net.ssl.SSLSocketFactory$1
-javax.net.ssl.TrustManager
-javax.net.ssl.TrustManagerFactory
-javax.net.ssl.TrustManagerFactory$1
-javax.net.ssl.TrustManagerFactorySpi
-javax.net.ssl.X509ExtendedKeyManager
-javax.net.ssl.X509ExtendedTrustManager
-javax.net.ssl.X509KeyManager
-javax.net.ssl.X509TrustManager
-javax.security.auth.Destroyable
-javax.security.auth.callback.UnsupportedCallbackException
-javax.security.auth.x500.X500Principal
-javax.security.cert.Certificate
-javax.security.cert.CertificateException
-javax.security.cert.X509Certificate
-libcore.icu.ICU
-libcore.icu.LocaleData
-libcore.icu.NativeConverter
-libcore.icu.TimeZoneNames
-libcore.internal.StringPool
-libcore.io.AsynchronousCloseMonitor
-libcore.io.BlockGuardOs
-libcore.io.BufferIterator
-libcore.io.ClassPathURLStreamHandler
-libcore.io.ClassPathURLStreamHandler$ClassPathURLConnection
-libcore.io.ClassPathURLStreamHandler$ClassPathURLConnection$1
-libcore.io.DropBox
-libcore.io.DropBox$DefaultReporter
-libcore.io.DropBox$Reporter
-libcore.io.EventLogger
-libcore.io.EventLogger$DefaultReporter
-libcore.io.EventLogger$Reporter
-libcore.io.ForwardingOs
-libcore.io.IoBridge
-libcore.io.IoTracker
-libcore.io.IoTracker$Mode
-libcore.io.IoUtils
-libcore.io.Libcore
-libcore.io.Linux
-libcore.io.Memory
-libcore.io.MemoryMappedFile
-libcore.io.NioBufferIterator
-libcore.io.Os
-libcore.net.NetworkSecurityPolicy
-libcore.net.NetworkSecurityPolicy$DefaultNetworkSecurityPolicy
-libcore.net.UriCodec
-libcore.net.event.NetworkEventDispatcher
-libcore.net.event.NetworkEventListener
-libcore.reflect.AnnotatedElements
-libcore.reflect.AnnotationFactory
-libcore.reflect.AnnotationMember
-libcore.reflect.AnnotationMember$DefaultValues
-libcore.reflect.GenericArrayTypeImpl
-libcore.reflect.GenericSignatureParser
-libcore.reflect.ListOfTypes
-libcore.reflect.ListOfVariables
-libcore.reflect.ParameterizedTypeImpl
-libcore.reflect.Types
-libcore.util.BasicLruCache
-libcore.util.CharsetUtils
-libcore.util.CollectionUtils
-libcore.util.EmptyArray
-libcore.util.NativeAllocationRegistry
-libcore.util.NativeAllocationRegistry$CleanerRunner
-libcore.util.NativeAllocationRegistry$CleanerThunk
-libcore.util.TimeZoneDataFiles
-libcore.util.ZoneInfo
-libcore.util.ZoneInfo$CheckedArithmeticException
-libcore.util.ZoneInfo$OffsetInterval
-libcore.util.ZoneInfo$WallTime
-libcore.util.ZoneInfoDB
-libcore.util.ZoneInfoDB$TzData
-libcore.util.ZoneInfoDB$TzData$1
-org.apache.commons.logging.Log
-org.apache.commons.logging.LogFactory
-org.apache.commons.logging.impl.Jdk14Logger
-org.apache.commons.logging.impl.WeakHashtable
-org.apache.harmony.dalvik.NativeTestTarget
-org.apache.harmony.dalvik.ddmc.Chunk
-org.apache.harmony.dalvik.ddmc.ChunkHandler
-org.apache.harmony.dalvik.ddmc.DdmServer
-org.apache.harmony.dalvik.ddmc.DdmVmInternal
-org.apache.harmony.luni.internal.util.TimezoneGetter
-org.apache.harmony.xml.ExpatAttributes
-org.apache.harmony.xml.ExpatParser
-org.apache.http.Header
-org.apache.http.HttpEntity
-org.apache.http.HttpException
-org.apache.http.HttpHost
-org.apache.http.HttpMessage
-org.apache.http.HttpRequest
-org.apache.http.HttpRequestInterceptor
-org.apache.http.HttpResponse
-org.apache.http.ProtocolException
-org.apache.http.ProtocolVersion
-org.apache.http.StatusLine
-org.apache.http.client.HttpClient
-org.apache.http.client.ResponseHandler
-org.apache.http.client.methods.HttpUriRequest
-org.apache.http.client.params.HttpClientParams
-org.apache.http.conn.ClientConnectionManager
-org.apache.http.conn.ClientConnectionOperator
-org.apache.http.conn.ClientConnectionRequest
-org.apache.http.conn.ConnectTimeoutException
-org.apache.http.conn.ConnectionReleaseTrigger
-org.apache.http.conn.params.ConnManagerPNames
-org.apache.http.conn.params.ConnManagerParams
-org.apache.http.conn.params.ConnManagerParams$1
-org.apache.http.conn.params.ConnPerRoute
-org.apache.http.conn.scheme.LayeredSocketFactory
-org.apache.http.conn.scheme.PlainSocketFactory
-org.apache.http.conn.scheme.Scheme
-org.apache.http.conn.scheme.SchemeRegistry
-org.apache.http.conn.scheme.SocketFactory
-org.apache.http.conn.ssl.AbstractVerifier
-org.apache.http.conn.ssl.AllowAllHostnameVerifier
-org.apache.http.conn.ssl.BrowserCompatHostnameVerifier
-org.apache.http.conn.ssl.SSLSocketFactory
-org.apache.http.conn.ssl.StrictHostnameVerifier
-org.apache.http.conn.ssl.X509HostnameVerifier
-org.apache.http.entity.AbstractHttpEntity
-org.apache.http.impl.client.AbstractHttpClient
-org.apache.http.impl.client.DefaultHttpClient
-org.apache.http.impl.conn.DefaultClientConnectionOperator
-org.apache.http.impl.conn.IdleConnectionHandler
-org.apache.http.impl.conn.tsccm.AbstractConnPool
-org.apache.http.impl.conn.tsccm.ConnPoolByRoute
-org.apache.http.impl.conn.tsccm.RefQueueHandler
-org.apache.http.impl.conn.tsccm.RefQueueWorker
-org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager
-org.apache.http.message.AbstractHttpMessage
-org.apache.http.message.BasicHeader
-org.apache.http.message.BasicHttpResponse
-org.apache.http.message.BasicStatusLine
-org.apache.http.message.HeaderGroup
-org.apache.http.params.AbstractHttpParams
-org.apache.http.params.BasicHttpParams
-org.apache.http.params.CoreConnectionPNames
-org.apache.http.params.CoreProtocolPNames
-org.apache.http.params.HttpConnectionParams
-org.apache.http.params.HttpParams
-org.apache.http.params.HttpProtocolParams
-org.apache.http.protocol.HttpContext
-org.ccil.cowan.tagsoup.AttributesImpl
-org.ccil.cowan.tagsoup.AutoDetector
-org.ccil.cowan.tagsoup.Element
-org.ccil.cowan.tagsoup.ElementType
-org.ccil.cowan.tagsoup.HTMLModels
-org.ccil.cowan.tagsoup.HTMLScanner
-org.ccil.cowan.tagsoup.HTMLSchema
-org.ccil.cowan.tagsoup.Parser
-org.ccil.cowan.tagsoup.Parser$1
-org.ccil.cowan.tagsoup.ScanHandler
-org.ccil.cowan.tagsoup.Scanner
-org.ccil.cowan.tagsoup.Schema
-org.json.JSON
-org.json.JSONArray
-org.json.JSONException
-org.json.JSONObject
-org.json.JSONObject$1
-org.json.JSONStringer
-org.json.JSONStringer$Scope
-org.json.JSONTokener
-org.kxml2.io.KXmlParser
-org.kxml2.io.KXmlParser$ValueContext
-org.xml.sax.Attributes
-org.xml.sax.ContentHandler
-org.xml.sax.DTDHandler
-org.xml.sax.EntityResolver
-org.xml.sax.ErrorHandler
-org.xml.sax.InputSource
-org.xml.sax.Locator
-org.xml.sax.SAXException
-org.xml.sax.SAXNotRecognizedException
-org.xml.sax.SAXNotSupportedException
-org.xml.sax.XMLReader
-org.xml.sax.helpers.DefaultHandler
-org.xmlpull.v1.XmlPullParser
-org.xmlpull.v1.XmlPullParserException
-org.xmlpull.v1.XmlSerializer
-sun.invoke.util.BytecodeDescriptor
-sun.invoke.util.VerifyAccess
-sun.invoke.util.Wrapper
-sun.invoke.util.Wrapper$Format
-sun.misc.Cleaner
-sun.misc.CompoundEnumeration
-sun.misc.FDBigInteger
-sun.misc.FloatingDecimal
-sun.misc.FloatingDecimal$1
-sun.misc.FloatingDecimal$ASCIIToBinaryBuffer
-sun.misc.FloatingDecimal$ASCIIToBinaryConverter
-sun.misc.FloatingDecimal$BinaryToASCIIBuffer
-sun.misc.FloatingDecimal$BinaryToASCIIConverter
-sun.misc.FloatingDecimal$ExceptionalBinaryToASCIIBuffer
-sun.misc.FloatingDecimal$PreparedASCIIToBinaryBuffer
-sun.misc.FormattedFloatingDecimal
-sun.misc.FormattedFloatingDecimal$1
-sun.misc.FormattedFloatingDecimal$Form
-sun.misc.IOUtils
-sun.misc.JavaIOFileDescriptorAccess
-sun.misc.REException
-sun.misc.SharedSecrets
-sun.misc.Unsafe
-sun.misc.VM
-sun.misc.Version
-sun.net.ConnectionResetException
-sun.net.NetHooks
-sun.net.NetProperties
-sun.net.NetProperties$1
-sun.net.spi.DefaultProxySelector
-sun.net.spi.DefaultProxySelector$1
-sun.net.spi.DefaultProxySelector$NonProxyInfo
-sun.net.spi.nameservice.NameService
-sun.net.util.IPAddressUtil
-sun.net.www.ParseUtil
-sun.net.www.protocol.file.Handler
-sun.net.www.protocol.jar.Handler
-sun.nio.ch.DatagramChannelImpl
-sun.nio.ch.DatagramDispatcher
-sun.nio.ch.DirectBuffer
-sun.nio.ch.FileChannelImpl
-sun.nio.ch.FileChannelImpl$Unmapper
-sun.nio.ch.FileDispatcher
-sun.nio.ch.FileDispatcherImpl
-sun.nio.ch.FileKey
-sun.nio.ch.FileLockImpl
-sun.nio.ch.FileLockTable
-sun.nio.ch.IOStatus
-sun.nio.ch.IOUtil
-sun.nio.ch.Interruptible
-sun.nio.ch.NativeDispatcher
-sun.nio.ch.NativeThread
-sun.nio.ch.NativeThreadSet
-sun.nio.ch.Net
-sun.nio.ch.SelChImpl
-sun.nio.ch.ServerSocketChannelImpl
-sun.nio.ch.SharedFileLockTable
-sun.nio.ch.SharedFileLockTable$FileLockReference
-sun.nio.ch.SocketChannelImpl
-sun.nio.ch.Util
-sun.nio.ch.Util$1
-sun.nio.ch.Util$BufferCache
-sun.nio.cs.ArrayDecoder
-sun.nio.cs.ArrayEncoder
-sun.nio.cs.StreamDecoder
-sun.nio.cs.StreamEncoder
-sun.security.action.GetBooleanAction
-sun.security.action.GetPropertyAction
-sun.security.jca.GetInstance
-sun.security.jca.GetInstance$Instance
-sun.security.jca.ProviderConfig
-sun.security.jca.ProviderConfig$2
-sun.security.jca.ProviderList
-sun.security.jca.ProviderList$1
-sun.security.jca.ProviderList$2
-sun.security.jca.ProviderList$3
-sun.security.jca.ProviderList$ServiceList
-sun.security.jca.ProviderList$ServiceList$1
-sun.security.jca.Providers
-sun.security.jca.ServiceId
-sun.security.pkcs.PKCS9Attribute
-sun.security.pkcs.SignerInfo
-sun.security.provider.CertPathProvider
-sun.security.provider.X509Factory
-sun.security.provider.certpath.AdaptableX509CertSelector
-sun.security.provider.certpath.AlgorithmChecker
-sun.security.provider.certpath.BasicChecker
-sun.security.provider.certpath.CertPathHelper
-sun.security.provider.certpath.ConstraintsChecker
-sun.security.provider.certpath.KeyChecker
-sun.security.provider.certpath.PKIX
-sun.security.provider.certpath.PKIX$ValidatorParams
-sun.security.provider.certpath.PKIXCertPathValidator
-sun.security.provider.certpath.PKIXMasterCertPathValidator
-sun.security.provider.certpath.PolicyChecker
-sun.security.provider.certpath.PolicyNodeImpl
-sun.security.util.AbstractAlgorithmConstraints
-sun.security.util.AbstractAlgorithmConstraints$1
-sun.security.util.AlgorithmDecomposer
-sun.security.util.BitArray
-sun.security.util.ByteArrayLexOrder
-sun.security.util.ByteArrayTagOrder
-sun.security.util.Cache
-sun.security.util.Cache$EqualByteArray
-sun.security.util.CertConstraintParameters
-sun.security.util.Debug
-sun.security.util.DerEncoder
-sun.security.util.DerIndefLenConverter
-sun.security.util.DerInputBuffer
-sun.security.util.DerInputStream
-sun.security.util.DerOutputStream
-sun.security.util.DerValue
-sun.security.util.DisabledAlgorithmConstraints
-sun.security.util.DisabledAlgorithmConstraints$Constraint
-sun.security.util.DisabledAlgorithmConstraints$Constraint$Operator
-sun.security.util.DisabledAlgorithmConstraints$Constraints
-sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraint
-sun.security.util.KeyUtil
-sun.security.util.Length
-sun.security.util.MemoryCache
-sun.security.util.MemoryCache$CacheEntry
-sun.security.util.MemoryCache$SoftCacheEntry
-sun.security.util.ObjectIdentifier
-sun.security.x509.AVA
-sun.security.x509.AVAKeyword
-sun.security.x509.AccessDescription
-sun.security.x509.AlgorithmId
-sun.security.x509.AuthorityInfoAccessExtension
-sun.security.x509.AuthorityKeyIdentifierExtension
-sun.security.x509.BasicConstraintsExtension
-sun.security.x509.CRLDistributionPointsExtension
-sun.security.x509.CRLNumberExtension
-sun.security.x509.CRLReasonCodeExtension
-sun.security.x509.CertAttrSet
-sun.security.x509.CertificateAlgorithmId
-sun.security.x509.CertificateExtensions
-sun.security.x509.CertificateIssuerExtension
-sun.security.x509.CertificatePoliciesExtension
-sun.security.x509.CertificatePolicyId
-sun.security.x509.CertificateSerialNumber
-sun.security.x509.CertificateValidity
-sun.security.x509.CertificateVersion
-sun.security.x509.CertificateX509Key
-sun.security.x509.DNSName
-sun.security.x509.DeltaCRLIndicatorExtension
-sun.security.x509.DistributionPoint
-sun.security.x509.ExtendedKeyUsageExtension
-sun.security.x509.Extension
-sun.security.x509.FreshestCRLExtension
-sun.security.x509.GeneralName
-sun.security.x509.GeneralNameInterface
-sun.security.x509.GeneralNames
-sun.security.x509.InhibitAnyPolicyExtension
-sun.security.x509.IssuerAlternativeNameExtension
-sun.security.x509.IssuingDistributionPointExtension
-sun.security.x509.KeyIdentifier
-sun.security.x509.KeyUsageExtension
-sun.security.x509.NameConstraintsExtension
-sun.security.x509.NetscapeCertTypeExtension
-sun.security.x509.OCSPNoCheckExtension
-sun.security.x509.OIDMap
-sun.security.x509.OIDMap$OIDInfo
-sun.security.x509.PKIXExtensions
-sun.security.x509.PolicyConstraintsExtension
-sun.security.x509.PolicyInformation
-sun.security.x509.PolicyMappingsExtension
-sun.security.x509.PrivateKeyUsageExtension
-sun.security.x509.RDN
-sun.security.x509.SerialNumber
-sun.security.x509.SubjectAlternativeNameExtension
-sun.security.x509.SubjectInfoAccessExtension
-sun.security.x509.SubjectKeyIdentifierExtension
-sun.security.x509.URIName
-sun.security.x509.X500Name
-sun.security.x509.X500Name$1
-sun.security.x509.X509AttributeName
-sun.security.x509.X509CertImpl
-sun.security.x509.X509CertInfo
-sun.security.x509.X509Key
-sun.util.calendar.AbstractCalendar
-sun.util.calendar.BaseCalendar
-sun.util.calendar.BaseCalendar$Date
-sun.util.calendar.CalendarDate
-sun.util.calendar.CalendarSystem
-sun.util.calendar.CalendarUtils
-sun.util.calendar.Gregorian
-sun.util.calendar.Gregorian$Date
-sun.util.calendar.JulianCalendar
-sun.util.calendar.LocalGregorianCalendar
-sun.util.locale.BaseLocale
-sun.util.locale.BaseLocale$Cache
-sun.util.locale.BaseLocale$Key
-sun.util.locale.InternalLocaleBuilder
-sun.util.locale.InternalLocaleBuilder$CaseInsensitiveChar
-sun.util.locale.LanguageTag
-sun.util.locale.LocaleObjectCache
-sun.util.locale.LocaleObjectCache$CacheEntry
-sun.util.locale.LocaleSyntaxException
-sun.util.locale.LocaleUtils
-sun.util.locale.ParseStatus
-sun.util.locale.StringTokenIterator
-sun.util.logging.LoggingProxy
-sun.util.logging.LoggingSupport
-sun.util.logging.LoggingSupport$1
-sun.util.logging.PlatformLogger
-sun.util.logging.PlatformLogger$1
-sun.util.logging.PlatformLogger$Level
diff --git a/proto/src/ipconnectivity.proto b/proto/src/ipconnectivity.proto
index 76c5418..437da8f 100644
--- a/proto/src/ipconnectivity.proto
+++ b/proto/src/ipconnectivity.proto
@@ -23,7 +23,7 @@
 // It is not intended to map one to one to the TRANSPORT_* constants defined in
 // android.net.NetworkCapabilities. Instead it is intended to be used as
 // a dimension field for metrics events and aggregated metrics.
-// Next tag: 7
+// Next tag: 10
 enum LinkLayer {
   // An unknown link layer technology.
   UNKNOWN   = 0;
@@ -32,6 +32,9 @@
   CELLULAR  = 2;
   ETHERNET  = 3;
   WIFI      = 4;
+  WIFI_P2P  = 7;
+  WIFI_NAN  = 8; // Also known as WiFi Aware
+  LOWPAN    = 9;
 
   // Indicates that the link layer dimension is not relevant for the metrics or
   // event considered.
@@ -47,16 +50,18 @@
   optional int32 value = 2;
 };
 
-// Logs changes in the system default network. Changes can be 1) acquiring a
-// default network with no previous default, 2) a switch of the system default
-// network to a new default network, 3) a loss of the system default network.
-// This message is associated to android.net.metrics.DefaultNetworkEvent.
+// An event record when the system default network disconnects or the system
+// switches to a new default network.
+// Next tag: 10.
 message DefaultNetworkEvent {
-  // A value of 0 means this is a loss of the system default network.
-  optional NetworkId network_id = 1;
 
-  // A value of 0 means there was no previous default network.
-  optional NetworkId previous_network_id = 2;
+  // Reason why this network stopped being the default.
+  enum LostReason {
+    UNKNOWN       = 0;
+    OUTSCORED     = 1;
+    INVALIDATION  = 2;
+    DISCONNECT    = 3;
+  };
 
   // Whether the network supports IPv4, IPv6, or both.
   enum IPSupport {
@@ -66,17 +71,52 @@
     DUAL = 3;
   };
 
+  // Duration in milliseconds when this network was the default.
+  // Since version 4
+  optional int64 default_network_duration_ms = 5;
+
+  // Duration in milliseconds without a default network before this network
+  // became the default.
+  // Since version 4
+  optional int64 no_default_network_duration_ms = 6;
+
+  // Network score of this network when it became the default network.
+  // Since version 4
+  optional int64 initial_score = 7;
+
+  // Network score of this network when it stopped being the default network.
+  // Since version 4
+  optional int64 final_score = 8;
+
+  // Best available information about IP support of this default network.
+  // Since version 4
+  optional IPSupport ip_support = 9;
+
+
+  // Deprecated fields
+
+  // A value of 0 means this is a loss of the system default network.
+  // Deprecated since version 3. Replaced by top level network_id.
+  optional NetworkId network_id = 1 [deprecated = true];
+
+  // A value of 0 means there was no previous default network.
+  // Deprecated since version 3. Replaced by previous_default_network_id.
+  optional NetworkId previous_network_id = 2 [deprecated = true];
+
   // Best available information about IP support of the previous network when
   // disconnecting or switching to a new default network.
-  optional IPSupport previous_network_ip_support = 3;
+  // Deprecated since version 3. Replaced by ip_support field.
+  optional IPSupport previous_network_ip_support = 3 [deprecated = true];
 
   // The transport types of the new default network, represented by
   // TRANSPORT_* constants as defined in NetworkCapabilities.
-  repeated int32 transport_types = 4;
+  // Deprecated since version 3. Replaced by top-level transports field.
+  repeated int32 transport_types = 4 [deprecated = true];
 };
 
 // Logs IpReachabilityMonitor probe events and NUD_FAILED events.
 // This message is associated to android.net.metrics.IpReachabilityEvent.
+// Next tag: 3.
 message IpReachabilityEvent {
   // The interface name (wlan, rmnet, lo, ...) on which the probe was sent.
   // Deprecated since version 2, to be replaced by link_layer field.
@@ -91,6 +131,7 @@
 // Logs NetworkMonitor and ConnectivityService events related to the state of
 // a network: connection, evaluation, validation, lingering, and disconnection.
 // This message is associated to android.net.metrics.NetworkEvent.
+// Next tag: 4.
 message NetworkEvent {
   // The id of the network on which this event happened.
   // Deprecated since version 3.
@@ -108,6 +149,7 @@
 // Logs individual captive portal probing events that are performed when
 // evaluating or reevaluating networks for Internet connectivity.
 // This message is associated to android.net.metrics.ValidationProbeEvent.
+// Next tag: 5.
 message ValidationProbeEvent {
   // The id of the network for which the probe was sent.
   // Deprecated since version 3.
@@ -124,26 +166,64 @@
   optional int32 probe_result = 4;
 }
 
-// Logs DNS lookup latencies. Repeated fields must have the same length.
+// Logs DNS lookup latencies.
 // This message is associated to android.net.metrics.DnsEvent.
-// Deprecated since version 2.
+// Next tag: 11
 message DNSLookupBatch {
+
+  // The time it took for successful DNS lookups to complete.
+  // The number of repeated values can be less than getaddrinfo_query_count
+  // + gethostbyname_query_count in case of event rate-limiting.
+  repeated int32 latencies_ms = 4;
+
+  // The total number of getaddrinfo queries.
+  // Since version 4.
+  optional int64 getaddrinfo_query_count = 5;
+
+  // The total number of gethostbyname queries.
+  // Since version 4.
+  optional int64 gethostbyname_query_count = 6;
+
+  // The total number of getaddrinfo errors.
+  // Since version 4.
+  optional int64 getaddrinfo_error_count = 7;
+
+  // The total number of gethostbyname errors.
+  // Since version 4.
+  optional int64 gethostbyname_error_count = 8;
+
+  // Counts of all errors returned by getaddrinfo.
+  // The Pair key field is the getaddrinfo error value.
+  // The value field is the count for that return value.
+  // Since version 4
+  repeated Pair getaddrinfo_errors = 9;
+
+  // Counts of all errors returned by gethostbyname.
+  // The Pair key field is the gethostbyname errno value.
+  // the Pair value field is the count for that errno code.
+  // Since version 4
+  repeated Pair gethostbyname_errors = 10;
+
+
+  // Deprecated fields
+
   // The id of the network on which the DNS lookups took place.
-  optional NetworkId network_id = 1;
+  // Deprecated since version 3.
+  optional NetworkId network_id = 1 [deprecated = true];
 
   // The types of the DNS lookups, as defined in android.net.metrics.DnsEvent.
-  repeated int32 event_types = 2;
+  // Deprecated since version 3.
+  repeated int32 event_types = 2 [deprecated = true];
 
   // The return values of the DNS resolver for each DNS lookups.
-  repeated int32 return_codes = 3;
-
-  // The time it took for each DNS lookups to complete.
-  repeated int32 latencies_ms = 4;
+  // Deprecated since version 3.
+  repeated int32 return_codes = 3 [deprecated = true];
 };
 
 // Represents a collections of DNS lookup latencies and counters for a
 // particular combination of DNS query type and return code.
 // Since version 2.
+// Next tag: 7.
 message DNSLatencies {
   // The type of the DNS lookups, as defined in android.net.metrics.DnsEvent.
   // Acts as a key for a set of DNS query results.
@@ -203,6 +283,7 @@
 // state transition or a response packet parsing error.
 // This message is associated to android.net.metrics.DhcpClientEvent and
 // android.net.metrics.DhcpErrorEvent.
+// Next tag: 5
 message DHCPEvent {
   // The interface name (wlan, rmnet, lo, ...) on which the event happened.
   // Deprecated since version 2, to be replaced by link_layer field.
@@ -255,7 +336,7 @@
 // Represents Router Advertisement listening statistics for an interface with
 // Android Packet Filter enabled.
 // Since version 1.
-// Next tag: 12
+// Next tag: 15
 message ApfStatistics {
   // The time interval in milliseconds these stastistics cover.
   optional int64 duration_ms = 1;
@@ -288,12 +369,28 @@
 
   // The total number of APF program updates triggered when disabling the
   // multicast filter. Since version 3.
+  // Since version 4.
   optional int32 program_updates_allowing_multicast = 11;
+
+  // The total number of packets processed by the APF interpreter.
+  // Since version 4.
+  optional int32 total_packet_processed = 12;
+
+  // The total number of packets dropped by the APF interpreter.
+  // Since version 4.
+  optional int32 total_packet_dropped = 13;
+
+  // List of hardware counters collected by the APF interpreter.
+  // The Pair key is the counter id, defined in android.net.metrics.ApfStats.
+  // The Pair value is the counter value.
+  // Since version 4.
+  repeated Pair hardware_counters = 14;
 }
 
 // Represents the reception of a Router Advertisement packet for an interface
 // with Android Packet Filter enabled.
 // Since version 1.
+// Next tag: 7.
 message RaEvent {
   // All lifetime values are expressed in seconds. The default value for an
   // option lifetime that was not present in the RA option list is -1.
@@ -322,6 +419,7 @@
 // Represents an IP provisioning event in IpManager and how long the
 // provisioning action took.
 // This message is associated to android.net.metrics.IpManagerEvent.
+// Next tag: 4.
 message IpProvisioningEvent {
   // The interface name (wlan, rmnet, lo, ...) on which the probe was sent.
   // Deprecated since version 2, to be replaced by link_layer field.
@@ -335,8 +433,80 @@
   optional int32 latency_ms = 3;
 }
 
+// Represents statistics from a single android Network.
+// Since version 4. Replace NetworkEvent.
+// Next tag: 9.
+message NetworkStats {
+
+  // Duration of this Network lifecycle in milliseconds.
+  optional int64 duration_ms = 1;
+
+  // Information about IP support of this network.
+  optional DefaultNetworkEvent.IPSupport ip_support = 2;
+
+  // True if the network was validated at least once.
+  optional bool ever_validated = 3;
+
+  // True if a captive portal was found at least once on this network.
+  optional bool portal_found = 4;
+
+  // Total number of times no connectivity was reported for this network.
+  optional int32 no_connectivity_reports = 5;
+
+  // Total number of validation attempts.
+  optional int32 validation_attempts = 6;
+
+  // Results from all validation attempts.
+  // The Pair key is the result:
+  //    0 -> unvalidated
+  //    1 -> validated
+  //    2 -> captive portal
+  // The Pair value is the duration of the validation attempts in milliseconds.
+  repeated Pair validation_events = 7;
+
+  // Time series of validation states in time order.
+  // The Pair key is the state:
+  //    0 -> unvalidated
+  //    1 -> validated
+  //    2 -> captive portal,
+  // The Pair value is the duration of that state in milliseconds.
+  repeated Pair validation_states = 8;
+}
+
+// Represents statistics from NFLOG wakeup events due to ingress packets.
+// Since oc-mr1.
+// Next tag: 8.
+message WakeupStats {
+  // The time duration in seconds covered by these stats, for deriving
+  // exact wakeup rates.
+  optional int64 duration_sec = 1;
+
+  // The total number of ingress packets waking up the device.
+  optional int64 total_wakeups = 2;
+
+  // The total number of wakeup packets routed to a socket belonging to
+  // the root uid (uid 0).
+  optional int64 root_wakeups = 3;
+
+  // The total number of wakeup packets routed to a socket belonging to
+  // the system server (uid 1000).
+  optional int64 system_wakeups = 4;
+
+  // The total number of wakeup packets routed to a socket belonging to
+  // an application (uid > 9999).
+  optional int64 application_wakeups = 5;
+
+  // The total number of wakeup packets routed to a socket belonging to another
+  // uid than the root uid, system uid, or an application uid (any uid in
+  // between [1001, 9999]. See android.os.Process for possible uids.
+  optional int64 non_application_wakeups = 6;
+
+  // The total number of wakeup packets with no associated socket or uid.
+  optional int64 no_uid_wakeups = 7;
+}
+
 // Represents one of the IP connectivity event defined in this file.
-// Next tag: 19
+// Next tag: 20
 message IpConnectivityEvent {
   // Time in ms when the event was recorded.
   optional int64 time_ms = 1;
@@ -370,14 +540,13 @@
   oneof event {
 
     // An event about the system default network.
-    // The link_layer field is not relevant for this event and set to NONE.
     DefaultNetworkEvent default_network_event = 2;
 
     // An IP reachability probe event.
     IpReachabilityEvent ip_reachability_event = 3;
 
     // A network lifecycle event.
-    NetworkEvent network_event = 4;
+    NetworkEvent network_event = 4 [deprecated = true];
 
     // A batch of DNS lookups.
     // Deprecated in the nyc-mr2 release since version 2,and replaced by
@@ -407,10 +576,17 @@
 
     // An RA packet reception event.
     RaEvent ra_event = 11;
+
+    // Network statistics.
+    NetworkStats network_stats = 19;
+
+    // Ingress packet wakeup statistics.
+    WakeupStats wakeup_stats = 20;
   };
 };
 
 // The information about IP connectivity events.
+// Next tag: 4.
 message IpConnectivityLog {
   // An array of IP connectivity events.
   repeated IpConnectivityEvent events = 1;
@@ -424,5 +600,6 @@
   //  nyc-mr1: not populated, implicitly 1.
   //  nyc-mr2: 2.
   //  oc:      3.
+  //  oc-dr1:  4. (sailfish, marlin, walleye, taimen)
   optional int32 version = 3;
 };
diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto
index 4841299..3cadff2 100644
--- a/proto/src/metrics_constants.proto
+++ b/proto/src/metrics_constants.proto
@@ -33,7 +33,7 @@
     // The view became hidden.
     TYPE_CLOSE = 2;
 
-    // The view switched to detail mode (most relevant for quick settings tiles)
+    // The view switched to detail mode (most relevant for quick settings tiles and notifications)
     TYPE_DETAIL = 3;
 
     // The view or control was activated.
@@ -62,6 +62,17 @@
 
     // The action failed
     TYPE_FAILURE = 11;
+
+    // Type for APP_TRANSITION_REPORTED_DRAWN event: The activity was started without restoring from
+    // a bundle.
+    TYPE_TRANSITION_REPORTED_DRAWN_NO_BUNDLE = 12;
+
+    // Type for APP_TRANSITION_REPORTED_DRAWN event: The activity was started with restoring from
+    // a bundle.
+    TYPE_TRANSITION_REPORTED_DRAWN_WITH_BUNDLE = 13;
+
+    // The view switched to summary mode (most relevant for notifications)
+    TYPE_COLLAPSE = 14;
   }
 
   // Types of alerts, as bit field values
@@ -150,6 +161,16 @@
     CAMERA_EXTERNAL_USED = 2;
   }
 
+  // TextClassifier entity types.
+  enum TextClassifierEntityType {
+    TEXT_CLASSIFIER_TYPE_UNKNOWN = 1;
+    TEXT_CLASSIFIER_TYPE_OTHER = 2;
+    TEXT_CLASSIFIER_TYPE_EMAIL = 3;
+    TEXT_CLASSIFIER_TYPE_PHONE = 4;
+    TEXT_CLASSIFIER_TYPE_ADDRESS = 5;
+    TEXT_CLASSIFIER_TYPE_URL = 6;
+  }
+
   // Known visual elements: views or controls.
   enum View {
     // Unknown view
@@ -3519,6 +3540,7 @@
     NOTIFICATION_SNOOZED_CRITERIA = 832;
 
     // FIELD - The context (source) from which an action is performed
+    // For QS, this is a boolean of whether the panel is expanded
     FIELD_CONTEXT = 833;
 
     // ACTION: Settings advanced button is expanded
@@ -3558,7 +3580,7 @@
     STORAGE_FILES = 841;
 
     // FIELD - Rank of the clicked Settings search result
-    FIELD_SETTINGS_SERACH_RESULT_RANK = 842;
+    FIELD_SETTINGS_SEARCH_RESULT_RANK = 842;
 
     // OPEN: Settings > Apps > Default Apps > Assist >  Default assist
     DEFAULT_ASSIST_PICKER = 843;
@@ -3829,7 +3851,7 @@
     // Tag of a field for the length of the filter text
     FIELD_AUTOFILL_FILTERTEXT_LEN = 911;
 
-    // An autofill authentification succeeded
+    // An autofill authentication succeeded
     // Package: Package of app that was autofilled
     AUTOFILL_AUTHENTICATED = 912;
 
@@ -4056,6 +4078,7 @@
     ASSIST_GESTURE_PRIMED = 998;
 
     // ACTION: Assist gesture triggered
+    //  SUBTYPE: 1 is for SCREEN_ON, 2 is for SCREEN_OFF
     // CATEGORY: GLOBAL_SYSTEM_UI
     // OS: O DR
     ASSIST_GESTURE_TRIGGERED = 999;
@@ -4064,10 +4087,10 @@
     ACTION_SETTINGS_UPDATE_DEFAULT_APP = 1000;
 
     // FIELD - Query length when Settings search result is clicked
-    FIELD_SETTINGS_SERACH_QUERY_LENGTH = 1001;
+    FIELD_SETTINGS_SEARCH_QUERY_LENGTH = 1001;
 
     // FIELD - Number of results when Settings search result is clicked
-    FIELD_SETTINGS_SERACH_RESULT_COUNT = 1002;
+    FIELD_SETTINGS_SEARCH_RESULT_COUNT = 1002;
 
     // OPEN: Settings > Display > Ambient Display
     // CATEGORY: SETTINGS
@@ -4232,12 +4255,365 @@
     // OS: O DR
     TRAMPOLINE_SETTINGS_EVENT = 1033;
 
+    // ---- End O-DR1 Constants, all O-DR1 constants go above this line ----
+
+    // ACTION: Settings > Network & Internet > Mobile network > Mobile data
+    // CATEGORY: SETTINGS
+    // OS: O MR
+    ACTION_MOBILE_NETWORK_MOBILE_DATA_TOGGLE = 1081;
+
+    // ACTION: Settings > Network & Internet > Mobile network > Data usage
+    // CATEGORY: SETTINGS
+    // OS: O MR
+    ACTION_MOBILE_NETWORK_DATA_USAGE = 1082;
+
+    // FIELD - State of asynchronous ranking when Settings search result is clicked
+    // CATEGORY: SETTINGS
+    // OS: O MR
+    FIELD_SETTINGS_SEARCH_RESULT_ASYNC_RANKING_STATE = 1083;
+
+    // ACTION: Settings > Connected devices > SMS Mirroring
+    // CATEGORY: SETTINGS
+    // OS: O MR
+    ACTION_SETTINGS_SMS_MIRRORING = 1084;
+
+    // ACTION: Chooser picked a ranked target.
+    // CATEGORY: GLOBAL_SYSTEM_UI
+    // OS: O MR
+    ACTION_TARGET_SELECTED = 1085;
+
+    // FIELD - is category used in Chooser: 1.
+    // Type: int encoded boolean
+    // CATEGORY: GLOBAL_SYSTEM_UI
+    // OS: O MR
+    FIELD_IS_CATEGORY_USED = 1086;
+
+    // FIELD - ranked position of selected target for Chooser.
+    // CATEGORY: GLOBAL_SYSTEM_UI
+    // OS: O MR
+    FIELD_RANKED_POSITION = 1087;
+
+    // OPEN: Settings > Data plan usage
+    // CATEGORY: SETTINGS
+    // OS: O MR
+    DATA_PLAN_USAGE_SUMMARY = 1088;
+
+    // FIELD: The numeric preference value (of type int) when it is changed in Settings
+    FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE = 1089;
+
+    // ACTION: Logged when the app has notified that it has fully drawn. See
+    // Activity.reportFullyDrawn().
+    APP_TRANSITION_REPORTED_DRAWN = 1090;
+
+    // FIELD: The delay of the activity reporting to be fully drawn measured from the beginning of
+    // the app transition.
+    APP_TRANSITION_REPORTED_DRAWN_MS = 1091;
+
+    // OPEN: Settings > Storage > Photos & Videos
+    // CATEGORY: SETTINGS
+    // OS: O MR
+    APPLICATIONS_STORAGE_PHOTOS = 1092;
+
+    // ACTION: Logged when the status bar icons change.
+    // OS: O MR
+    STATUS_BAR_ICONS_CHANGED = 1093;
+
+    // FIELD: Bitfield indicating which icons are shown.
+    // OS: O MR
+    FIELD_STATUS_ICONS = 1094;
+
+    // FIELD: Number of status icons currently shown.
+    // OS: O MR
+    FIELD_NUM_STATUS_ICONS = 1095;
+
+    // ACTION: Logged when user tries to pair a Bluetooth device without name from Settings app
+    // CATEGORY: SETTINGS
+    // OS: O MR
+    ACTION_SETTINGS_BLUETOOTH_PAIR_DEVICES_WITHOUT_NAMES = 1096;
+
+    // FIELD - Whether smart suggestion ranking was enabled or not
+    // Type: int encoded boolean
+    // CATEGORY: SETTINGS
+    // OS: O MR
+    FIELD_SETTINGS_SMART_SUGGESTIONS_ENABLED = 1097;
+
+    // ACTION: The device boots
+    ACTION_BOOT = 1098;
+
+    // FIELD: A string value representing some state of the platform, e.g., boot reason
+    FIELD_PLATFORM_REASON = 1099;
+
+    // CATEGORY: The category for all actions relating to selection session logging.
+    // OS: O MR
+    TEXT_SELECTION_SESSION = 1100;
+
+    // ACTION: A selection session started (i.e. the selection handles appeared)
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_START = 1101;
+
+    // ACTION: The user modified the selection (e.g. by dragging the handles)
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_MODIFY = 1102;
+
+    // ACTION: The user modified the selection by pressing the "select all" button.
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_SELECT_ALL = 1103;
+
+    // ACTION: The user modified the selection by pressing on a word in a multi word selection
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_RESET = 1104;
+
+    // ACTION: Smart selection made a single word prediction
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_SMART_SINGLE = 1105;
+
+    // ACTION: Smart selection made a multi word prediction
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_SMART_MULTI = 1106;
+
+    // ACTION: The app made an automatic selection on the user's behalf (not smart selection)
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_AUTO = 1107;
+
+    // ACTION: A selection session ended with the user typing over the text
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_OVERTYPE = 1108;
+
+    // ACTION: A selection session ended with the user copying the text
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_COPY = 1109;
+
+    // ACTION: A selection session ended with the user pasting over the text
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_PASTE = 1110;
+
+    // ACTION: A selection session ended with the user cutting the text
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_CUT = 1111;
+
+    // ACTION: A selection session ended with the user pressing the share button
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_SHARE = 1112;
+
+    // ACTION: A selection session ended with the user pressing the smart share button
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_SMART_SHARE = 1113;
+
+    // ACTION: A selection session ended with the user dragging the text
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_DRAG = 1114;
+
+    // ACTION: A selection session ended with the user abandoning the selection
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_ABANDON = 1115;
+
+    // ACTION: A selection session ended with the user picking an unhandled action bar item
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    ACTION_TEXT_SELECTION_OTHER = 1116;
+
+    // FIELD: Time in milliseconds from the start of the session to this event
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    FIELD_SELECTION_SINCE_START = 1117;
+
+    // FIELD: time in milliseconds between the last event in the session and this one
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    FIELD_SELECTION_SINCE_PREVIOUS = 1118;
+
+    // FIELD: a random uid for a selection session (lasting from select start to end)
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    FIELD_SELECTION_SESSION_ID = 1119;
+
+    // FIELD: the sequence number of the event in the session
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    FIELD_SELECTION_SESSION_INDEX = 1120;
+
+    // FIELD: a concatenation of the widget type and ML model version.
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    FIELD_SELECTION_VERSION_TAG = 1121;
+
+    // FIELD: text select start offset in words (as defined by the ICU BreakIterator), stored as two
+    //        packed 16bit integers. (start in MSBs, end in LSBs)
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    FIELD_SELECTION_RANGE = 1122;
+
+    // FIELD: smart text selection start offset in words (as defined by the ICU BreakIterator),
+    //        stored as two packed 16bit integers. (start in MSBs, end in LSBs)
+    // CATEGORY: TEXT_SELECTION_SESSION
+    // OS: O MR
+    FIELD_SELECTION_SMART_RANGE = 1123;
+
+    // The value of an autofillable and savable view was reset
+    // Package: Package of app that was autofilled
+    // OS: O MR
+    // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request
+    // Tag FIELD_AUTOFILL_PREVIOUS_LENGTH: the previous length of the value
+    AUTOFILL_VALUE_RESET = 1124;
+
+    // Tag of AUTOFILL_VALUE_RESET
+    // OS: O MR
+    FIELD_AUTOFILL_PREVIOUS_LENGTH = 1125;
+
+    // An autofill dataset authentication succeeded
+    // Package: Package of app that was autofilled
+    // OS: O MR
+    // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request
+    AUTOFILL_DATASET_AUTHENTICATED = 1126;
+
+    // An autofill service provided an invalid dataset authentication
+    // Package: Package of app that was autofilled
+    // OS: O MR
+    // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request
+    AUTOFILL_INVALID_DATASET_AUTHENTICATION = 1127;
+
+    // An autofill service provided an invalid authentication extra
+    // Package: Package of app that was autofilled
+    // OS: O MR
+    // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request
+    AUTOFILL_INVALID_AUTHENTICATION = 1128;
+
+    // An autofill service used a custom description (using RemoteViews) in the Save affordance
+    // Package: Package of app that is autofilled
+    // OS: O MR
+    // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request
+    // Tag FIELD_AUTOFILL_SAVE_TYPE: Type of save object passed by the service
+    AUTOFILL_SAVE_CUSTOM_DESCRIPTION = 1129;
+
+    // FIELD - Type of save object passed by the service when the Save UI is shown
+    // OS: O MR
+    FIELD_AUTOFILL_SAVE_TYPE = 1130;
+
+    // An autofill service used a custom subtitle (String) in the Save affordance
+    // Package: Package of app that is autofilled
+    // OS: O MR
+    // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request
+    // Tag FIELD_AUTOFILL_SAVE_TYPE: Type of save object passed by the service
+    AUTOFILL_SAVE_CUSTOM_SUBTITLE = 1131;
+
+    // User tapped a link in the custom description of the Save affordance provided by an autofill service
+    // Package: Package of app that is autofilled
+    // OS: O MR
+    // Type TYPE_UNKNOWN: The link was not properly set by the service
+    // Type TYPE_OPEN: The link launched an activity
+    // Type TYPE_FAILURE: The link could not launc an activity
+    // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request
+    // Tag FIELD_AUTOFILL_SAVE_TYPE: Type of save object passed by the service
+    AUTOFILL_SAVE_LINK_TAPPED = 1132;
+
+    // Result of the validation on save when an autofill service provided a validator
+    // Package: Package of app that is autofilled
+    // OS: O MR
+    // Type TYPE_FAILURE: The validation could not be performed due to an error
+    // Type TYPE_SUCCESS: The validation passed
+    // Type TYPE_DISMISS: The validation failed
+    // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request
+    // Tag FIELD_AUTOFILL_SAVE_TYPE: Type of save object passed by the service
+    AUTOFILL_SAVE_VALIDATION = 1133;
+
+    // Result of an operation in the autofill save affordance after the user tapped a link in the custom description
+    // provided by the autofill service
+    // Package: Package of app that is autofilled
+    // OS: O MR
+    // Type TYPE_OPEN: The save affordance was restored
+    // Type TYPE_DISMISS: The save affordcance was destroyed
+    // Type TYPE_FAILURE: An invalid opperation was reported by the app's AutofillManager
+    AUTOFILL_PENDING_SAVE_UI_OPERATION = 1134;
+
+    // Autofill service called API that disables itself
+    // Package: Package of the autofill service
+    // OS: O MR
+    AUTOFILL_SERVICE_DISABLED_SELF = 1135;
+
+    // Reports how long it took to show the autofill UI after a field was focused
+    // Tag FIELD_AUTOFILL_DURATION: Duration in ms
+    // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request
+    // Package: Package of the autofill service
+    // OS: O MR
+    AUTOFILL_UI_LATENCY = 1136;
+
+    // Action: the snooze leave-behind was shown after the user clicked the snooze icon
+    // OS: O MR
+    NOTIFICATION_SNOOZE_CLICKED = 1137;
+
+    // Action: user selected a notification snooze duration from the drop down
+    // OS: O MR
+    NOTIFICATION_SELECT_SNOOZE = 1138;
+
+    // attached to NOTIFICATION_SNOOZED and NOTIFICATION_SELECT_SNOOZE events
+    // OS: O MR
+    FIELD_NOTIFICATION_SNOOZE_DURATION_MS = 1139;
+
+    // attached to NOTIFICATION_SELECT_SNOOZE events to indicate the option selected
+    // OS: O MR
+    FIELD_NOTIFICATION_SNOOZE_INDEX = 1140;
+
+    // Action: user tapped undo on the notification snooze leave-behind
+    // OS: O MR
+    NOTIFICATION_UNDO_SNOOZE = 1141;
+
+    // Action: user togged the visibility of the notification snooze options drop down
+    // OS: O MR
+    NOTIFICATION_SNOOZE_OPTIONS = 1142;
+
     // OPEN: Settings > Display > Colors
     // CATEGORY: SETTINGS
-    // OS: O MR (backported for O DR)
+    // OS: O MR
     COLOR_MODE_SETTINGS = 1143;
 
-    // ---- End O-DR1 Constants, all O-DR1 constants go above this line ----
+    // Enclosing category for group of APP_TRANSITION_FOO events,
+    // logged when we cancel an app transition.
+    APP_TRANSITION_CANCELLED = 1144;
+
+    // Tag of a field representing a duration on autofill-related metrics.
+    FIELD_AUTOFILL_DURATION = 1145;
+
+    // ---- End O-MR1 Constants, all O-MR1 constants go above this line ----
+
+    // ACTION: Stop an app and turn on background check
+    // CATEGORY: SETTINGS
+    // OS: P
+    ACTION_APP_STOP_AND_BACKGROUND_CHECK = 1233;
+
+    // FIELD: The action type for each anomaly
+    // CATEGORY: SETTINGS
+    // OS: P
+    FIELD_ANOMALY_ACTION_TYPE = 1234;
+
+    // OPEN: Settings -> Battery -> Wakelock anomaly
+    // CATEGORY: SETTINGS
+    // OS: P
+    ANOMALY_TYPE_WAKELOCK = 1235;
+
+    // OPEN: Settings -> Battery -> Wakeup alarm anomaly
+    // CATEGORY: SETTINGS
+    // OS: P
+    ANOMALY_TYPE_WAKEUP_ALARM = 1236;
+
+    // OPEN: Settings -> Battery -> Unoptimized bt anomaly
+    // CATEGORY: SETTINGS
+    // OS: P
+    ANOMALY_TYPE_UNOPTIMIZED_BT = 1237;
 
     // Add new aosp constants above this line.
     // END OF AOSP CONSTANTS
diff --git a/proto/src/wifi.proto b/proto/src/wifi.proto
index c4dc506..9d25055 100644
--- a/proto/src/wifi.proto
+++ b/proto/src/wifi.proto
@@ -312,6 +312,58 @@
 
   // Counts the number of AllSingleScanLister.onResult calls with a partial (channels) scan result
   optional int32 partial_all_single_scan_listener_results = 75;
+
+  // Pno scan metrics
+  optional PnoScanMetrics pno_scan_metrics = 76;
+
+  // Histogram of "Connect to Network" notifications.
+  // The notification Action should be unset.
+  repeated ConnectToNetworkNotificationAndActionCount connect_to_network_notification_count = 77;
+
+  // Histogram of "Connect to Network" notification user actions.
+  repeated ConnectToNetworkNotificationAndActionCount connect_to_network_notification_action_count = 78;
+
+  // The number of SSIDs blacklisted from recommendation by the open network
+  // notification recommender
+  optional int32 open_network_recommender_blacklist_size = 79;
+
+  // Is the available network notification feature turned on
+  optional bool is_wifi_networks_available_notification_on = 80;
+
+  // Count of recommendation updates made by the open network notification
+  // recommender
+  optional int32 num_open_network_recommendation_updates = 81;
+
+  // Count of connection attempts that were initiated unsuccessfully
+  optional int32 num_open_network_connect_message_failed_to_send = 82;
+
+  // Histogram counting instances of scans with N many HotSpot 2.0 R1 APs
+  repeated NumConnectableNetworksBucket observed_hotspot_r1_aps_in_scan_histogram = 83;
+
+  // Histogram counting instances of scans with N many HotSpot 2.0 R2 APs
+  repeated NumConnectableNetworksBucket observed_hotspot_r2_aps_in_scan_histogram = 84;
+
+  // Histogram counting instances of scans with N many unique HotSpot 2.0 R1 ESS.
+  // Where ESS is defined as the (HESSID, ANQP Domain ID), (SSID, ANQP Domain ID) or
+  // (SSID, BSSID) tuple depending on AP configuration (in the above priority
+  // order).
+  repeated NumConnectableNetworksBucket observed_hotspot_r1_ess_in_scan_histogram = 85;
+
+  // Histogram counting instances of scans with N many unique HotSpot 2.0 R2 ESS.
+  // Where ESS is defined as the (HESSID, ANQP Domain ID), (SSID, ANQP Domain ID) or
+  // (SSID, BSSID) tuple depending on AP configuration (in the above priority
+  // order).
+  repeated NumConnectableNetworksBucket observed_hotspot_r2_ess_in_scan_histogram = 86;
+
+  // Histogram counting number of HotSpot 2.0 R1 APs per observed ESS in a scan
+  // (one value added per unique ESS - potentially multiple counts per single
+  // scan!)
+  repeated NumConnectableNetworksBucket observed_hotspot_r1_aps_per_ess_in_scan_histogram = 87;
+
+  // Histogram counting number of HotSpot 2.0 R2 APs per observed ESS in a scan
+  // (one value added per unique ESS - potentially multiple counts per single
+  // scan!)
+  repeated NumConnectableNetworksBucket observed_hotspot_r2_aps_per_ess_in_scan_histogram = 88;
 }
 
 // Information that gets logged for every WiFi connection.
@@ -621,6 +673,10 @@
     // Framework initiated disconnect. Sometimes generated to give an extra reason for a disconnect
     // Should typically be followed by a NETWORK_DISCONNECTION_EVENT with a local_gen = true
     TYPE_FRAMEWORK_DISCONNECT = 15;
+
+    // The NetworkAgent score for wifi has changed in a way that may impact
+    // connectivity
+    TYPE_SCORE_BREACH = 16;
   }
 
   enum FrameworkDisconnectReason {
@@ -732,6 +788,9 @@
 
   // Authentication failure reason, as reported by WifiManager (calculated from state & deauth code)
   optional AuthFailureReason auth_failure_reason = 13 [default = AUTH_FAILURE_UNKNOWN];
+
+  // NetworkAgent score of connected wifi
+  optional int32 last_score = 14 [default = -1];
 }
 
 // Wi-Fi Aware metrics
@@ -927,3 +986,88 @@
   // Number of scan results with num_connectable_networks
   optional int32 count = 2 [default = 0];
 }
+
+// Pno scan metrics
+// Here "Pno Scan" refers to the session of offloaded scans, these metrics count the result of a
+// single session, and not the individual scans within that session.
+message PnoScanMetrics {
+  // Total number of attempts to offload pno scans
+  optional int32 num_pno_scan_attempts = 1;
+
+  // Total number of pno scans failed
+  optional int32 num_pno_scan_failed = 2;
+
+  // Number of pno scans started successfully over offload
+  optional int32 num_pno_scan_started_over_offload = 3;
+
+  // Number of pno scans failed over offload
+  optional int32 num_pno_scan_failed_over_offload = 4;
+
+  // Total number of pno scans that found any network
+  optional int32 num_pno_found_network_events = 5;
+}
+
+// Number of occurrences for a particular "Connect to Network" Notification or
+// notification Action.
+message ConnectToNetworkNotificationAndActionCount {
+
+  // "Connect to Network" notifications
+  enum Notification {
+
+    // Default
+    NOTIFICATION_UNKNOWN = 0;
+
+    // Initial notification with a recommended network.
+    NOTIFICATION_RECOMMEND_NETWORK = 1;
+
+    // Notification when connecting to the recommended network.
+    NOTIFICATION_CONNECTING_TO_NETWORK = 2;
+
+    // Notification when successfully connected to the network.
+    NOTIFICATION_CONNECTED_TO_NETWORK = 3;
+
+    // Notification when failed to connect to network.
+    NOTIFICATION_FAILED_TO_CONNECT = 4;
+  }
+
+  // "Connect to Network" notification actions
+  enum Action {
+
+    // Default
+    ACTION_UNKNOWN = 0;
+
+    // User dismissed the "Connect to Network" notification.
+    ACTION_USER_DISMISSED_NOTIFICATION = 1;
+
+    // User tapped action button to connect to recommended network.
+    ACTION_CONNECT_TO_NETWORK = 2;
+
+    // User tapped action button to open Wi-Fi Settings.
+    ACTION_PICK_WIFI_NETWORK = 3;
+
+    // User tapped "Failed to connect" notification to open Wi-Fi Settings.
+    ACTION_PICK_WIFI_NETWORK_AFTER_CONNECT_FAILURE = 4;
+  }
+
+  // Recommenders of the "Connect to Network" notification
+  enum Recommender {
+
+    // Default.
+    RECOMMENDER_UNKNOWN = 0;
+
+    // Open Network Available recommender.
+    RECOMMENDER_OPEN = 1;
+  }
+
+  // Notification Type.
+  optional Notification notification = 1;
+
+  // Action Type.
+  optional Action action = 2;
+
+  // Recommender Type.
+  optional Recommender recommender = 3;
+
+  // Occurrences of this action.
+  optional int32 count = 4;
+}
diff --git a/rs/java/android/renderscript/Script.java b/rs/java/android/renderscript/Script.java
index 13d5fcd..d0d9a11 100644
--- a/rs/java/android/renderscript/Script.java
+++ b/rs/java/android/renderscript/Script.java
@@ -41,7 +41,6 @@
             mScript = s;
             mSlot = slot;
             mSig = sig;
-            guard.open("destroy");
         }
     }
 
@@ -119,7 +118,6 @@
             super(id, rs);
             mScript = s;
             mSlot = slot;
-            guard.open("destroy");
         }
     }
 
diff --git a/rs/java/android/renderscript/ScriptIntrinsic.java b/rs/java/android/renderscript/ScriptIntrinsic.java
index 4edce84..61211a2 100644
--- a/rs/java/android/renderscript/ScriptIntrinsic.java
+++ b/rs/java/android/renderscript/ScriptIntrinsic.java
@@ -17,9 +17,9 @@
 package android.renderscript;
 
 /**
- * Base class for all Intrinsic scripts. An intrinsic a script
- * which implements a pre-defined function. Intrinsics are
- * provided to provide effecient implemtations of common
+ * Base class for all Intrinsic scripts. An intrinsic is a script
+ * that implements a pre-defined function. Intrinsics are
+ * provided to provide efficient implementations of common
  * operations.
  *
  * Not intended for direct use.
diff --git a/rs/jni/android_renderscript_RenderScript.cpp b/rs/jni/android_renderscript_RenderScript.cpp
index ee48289..f9f6bf7 100644
--- a/rs/jni/android_renderscript_RenderScript.cpp
+++ b/rs/jni/android_renderscript_RenderScript.cpp
@@ -30,7 +30,7 @@
 #include <android-base/macros.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/android_view_Surface.h"
 #include "android_runtime/android_util_AssetManager.h"
diff --git a/services/Android.mk b/services/Android.mk
index c376470..0986e0a 100644
--- a/services/Android.mk
+++ b/services/Android.mk
@@ -7,7 +7,7 @@
 LOCAL_MODULE := services
 LOCAL_DEX_PREOPT_APP_IMAGE := true
 LOCAL_DEX_PREOPT_GENERATE_PROFILE := true
-LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING := $(LOCAL_PATH)/profile-classes
+LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING := $(LOCAL_PATH)/art-profile
 
 LOCAL_SRC_FILES := $(call all-java-files-under,java)
 
@@ -43,6 +43,9 @@
     android.hidl.base-V1.0-java-static \
     android.hardware.biometrics.fingerprint-V2.1-java-static
 
+LOCAL_JAVA_LIBRARIES := \
+    android.hidl.manager-V1.0-java
+
 ifeq ($(EMMA_INSTRUMENT_FRAMEWORK),true)
 LOCAL_EMMA_INSTRUMENT := true
 endif
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java
index 0e42e6d..7324b82 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.os.Handler;
 import android.os.PowerManager;
 import android.util.Pools.SimplePool;
 import android.util.Slog;
@@ -30,6 +31,8 @@
 import android.view.WindowManagerPolicy;
 import android.view.accessibility.AccessibilityEvent;
 
+import com.android.server.LocalServices;
+
 /**
  * This class is an input filter for implementing accessibility features such
  * as display magnification and explore by touch.
@@ -425,7 +428,8 @@
         }
 
         if ((mEnabledFeatures & FLAG_FEATURE_FILTER_KEY_EVENTS) != 0) {
-            mKeyboardInterceptor = new KeyboardInterceptor(mAms);
+            mKeyboardInterceptor = new KeyboardInterceptor(mAms,
+                    LocalServices.getService(WindowManagerPolicy.class));
             addFirstEventHandler(mKeyboardInterceptor);
         }
     }
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index b9f4220..8b4076a 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -19,6 +19,8 @@
 import static android.accessibilityservice.AccessibilityServiceInfo.DEFAULT;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
+import static android.view.accessibility.AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS;
+import static android.view.accessibility.AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS;
 
 import android.Manifest;
 import android.accessibilityservice.AccessibilityService;
@@ -27,6 +29,7 @@
 import android.accessibilityservice.IAccessibilityServiceClient;
 import android.accessibilityservice.IAccessibilityServiceConnection;
 import android.annotation.NonNull;
+import android.app.ActivityManagerInternal;
 import android.app.AlertDialog;
 import android.app.PendingIntent;
 import android.app.StatusBarManager;
@@ -104,6 +107,7 @@
 
 import com.android.internal.R;
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.content.PackageMonitor;
 import com.android.internal.os.SomeArgs;
 import com.android.internal.util.DumpUtils;
@@ -865,7 +869,7 @@
             if (resolvedUserId != mCurrentUserId) {
                 return null;
             }
-            if (mSecurityPolicy.findWindowById(windowId) == null) {
+            if (mSecurityPolicy.findA11yWindowInfoById(windowId) == null) {
                 return null;
             }
             IBinder token = mGlobalWindowTokens.get(windowId);
@@ -922,7 +926,8 @@
         }
     }
 
-    boolean notifyKeyEvent(KeyEvent event, int policyFlags) {
+    @VisibleForTesting
+    public boolean notifyKeyEvent(KeyEvent event, int policyFlags) {
         synchronized (mLock) {
             List<Service> boundServices = getCurrentUserStateLocked().mBoundServices;
             if (boundServices.isEmpty()) {
@@ -2429,6 +2434,7 @@
         public static final int MSG_SEND_RELEVANT_EVENTS_CHANGED_TO_CLIENTS = 12;
         public static final int MSG_SEND_ACCESSIBILITY_BUTTON_TO_INPUT_FILTER = 13;
         public static final int MSG_SHOW_ACCESSIBILITY_BUTTON_CHOOSER = 14;
+        public static final int MSG_INIT_SERVICE = 15;
 
         public MainHandler(Looper looper) {
             super(looper);
@@ -2527,6 +2533,11 @@
                 case MSG_SHOW_ACCESSIBILITY_BUTTON_CHOOSER: {
                     showAccessibilityButtonTargetSelection();
                 } break;
+
+                case MSG_INIT_SERVICE: {
+                    final Service service = (Service) msg.obj;
+                    service.initializeService();
+                } break;
             }
         }
 
@@ -2982,20 +2993,31 @@
                 if (userState.mBindingServices.contains(mComponentName) || mWasConnectedAndDied) {
                     userState.mBindingServices.remove(mComponentName);
                     mWasConnectedAndDied = false;
-                    try {
-                       mServiceInterface.init(this, mId, mOverlayWindowToken);
-                       onUserStateChangedLocked(userState);
-                    } catch (RemoteException re) {
-                        Slog.w(LOG_TAG, "Error while setting connection for service: "
-                                + service, re);
-                        binderDied();
-                    }
+                    onUserStateChangedLocked(userState);
+                    // Initialize the service on the main handler after we're done setting up for
+                    // the new configuration (for example, initializing the input filter).
+                    mMainHandler.obtainMessage(MainHandler.MSG_INIT_SERVICE, this).sendToTarget();
                 } else {
                     binderDied();
                 }
             }
         }
 
+        private void initializeService() {
+            final IAccessibilityServiceClient serviceInterface;
+            synchronized (mLock) {
+                serviceInterface = mServiceInterface;
+            }
+            if (serviceInterface == null) return;
+            try {
+                serviceInterface.init(this, mId, mOverlayWindowToken);
+            } catch (RemoteException re) {
+                Slog.w(LOG_TAG, "Error while setting connection for service: "
+                        + serviceInterface, re);
+                binderDied();
+            }
+        }
+
         private boolean isCalledForCurrentUserLocked() {
             // We treat calls from a profile as if made by its parent as profiles
             // share the accessibility state of the parent. The call below
@@ -3045,7 +3067,7 @@
                 if (!permissionGranted) {
                     return null;
                 }
-                AccessibilityWindowInfo window = mSecurityPolicy.findWindowById(windowId);
+                AccessibilityWindowInfo window = mSecurityPolicy.findA11yWindowInfoById(windowId);
                 if (window != null) {
                     AccessibilityWindowInfo windowClone = AccessibilityWindowInfo.obtain(window);
                     windowClone.setConnectionId(mId);
@@ -3093,7 +3115,7 @@
             final int callingUid = Binder.getCallingUid();
             final long identityToken = Binder.clearCallingIdentity();
             try {
-                connection.getRemote().findAccessibilityNodeInfosByViewId(accessibilityNodeId, 
+                connection.getRemote().findAccessibilityNodeInfosByViewId(accessibilityNodeId,
                         viewIdResName, partialInteractiveRegion, interactionId, callback,
                         mFetchFlags, interrogatingPid, interrogatingTid, spec);
                 return mSecurityPolicy.computeValidReportedPackages(callingUid,
@@ -3264,7 +3286,7 @@
             final int callingUid = Binder.getCallingUid();
             final long identityToken = Binder.clearCallingIdentity();
             try {
-                connection.getRemote().findFocus(accessibilityNodeId, focusType, 
+                connection.getRemote().findFocus(accessibilityNodeId, focusType,
                         partialInteractiveRegion, interactionId, callback, mFetchFlags,
                         interrogatingPid, interrogatingTid, spec);
                 return mSecurityPolicy.computeValidReportedPackages(callingUid,
@@ -3355,8 +3377,8 @@
                     }
                     if (mMotionEventInjector != null) {
                         List<GestureDescription.GestureStep> steps = gestureSteps.getList();
-                         mMotionEventInjector.injectEvents(steps, mServiceInterface, sequence);
-                         return;
+                        mMotionEventInjector.injectEvents(steps, mServiceInterface, sequence);
+                        return;
                     } else {
                         Slog.e(LOG_TAG, "MotionEventInjector installation timed out");
                     }
@@ -3376,32 +3398,31 @@
                 IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
                 throws RemoteException {
             final int resolvedWindowId;
+            IBinder activityToken = null;
             RemoteAccessibilityConnection connection;
             synchronized (mLock) {
                 if (!isCalledForCurrentUserLocked()) {
                     return false;
                 }
                 resolvedWindowId = resolveAccessibilityWindowIdLocked(accessibilityWindowId);
-                final boolean permissionGranted = mSecurityPolicy.canGetAccessibilityNodeInfoLocked(
-                        this, resolvedWindowId);
-                if (!permissionGranted) {
+                if (!mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, resolvedWindowId)) {
                     return false;
-                } else {
-                    connection = getConnectionLocked(resolvedWindowId);
-                    if (connection == null) {
-                        return false;
-                    }
-                    AccessibilityWindowInfo windowInfo =
-                            mSecurityPolicy.findWindowById(resolvedWindowId);
-                    if ((windowInfo != null) && windowInfo.inPictureInPicture()) {
-                        boolean isA11yFocusAction =
-                                (action == AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS)
-                                || (action ==
-                                        AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS);
-                        if ((mPictureInPictureActionReplacingConnection != null)
-                                && !isA11yFocusAction) {
-                            connection = mPictureInPictureActionReplacingConnection;
-                        }
+                }
+                connection = getConnectionLocked(resolvedWindowId);
+                if (connection == null) return false;
+                final boolean isA11yFocusAction = (action == ACTION_ACCESSIBILITY_FOCUS)
+                        || (action == ACTION_CLEAR_ACCESSIBILITY_FOCUS);
+                final AccessibilityWindowInfo a11yWindowInfo =
+                        mSecurityPolicy.findA11yWindowInfoById(resolvedWindowId);
+                if (!isA11yFocusAction) {
+                    final WindowInfo windowInfo =
+                            mSecurityPolicy.findWindowInfoById(resolvedWindowId);
+                    if (windowInfo != null) activityToken = windowInfo.activityToken;
+                }
+                if ((a11yWindowInfo != null) && a11yWindowInfo.inPictureInPicture()) {
+                    if ((mPictureInPictureActionReplacingConnection != null)
+                            && !isA11yFocusAction) {
+                        connection = mPictureInPictureActionReplacingConnection;
                     }
                 }
             }
@@ -3413,6 +3434,10 @@
                 mPowerManager.userActivity(SystemClock.uptimeMillis(),
                         PowerManager.USER_ACTIVITY_EVENT_ACCESSIBILITY, 0);
 
+                if (activityToken != null) {
+                    LocalServices.getService(ActivityManagerInternal.class)
+                            .setFocusedActivity(activityToken);
+                }
                 connection.mConnection.performAccessibilityAction(accessibilityNodeId, action,
                         arguments, interactionId, callback, mFetchFlags, interrogatingPid,
                         interrogatingTid);
@@ -3496,18 +3521,15 @@
                     return region;
                 }
                 MagnificationController magnificationController = getMagnificationController();
-                boolean forceRegistration = mSecurityPolicy.canControlMagnification(this);
-                boolean initiallyRegistered = magnificationController.isRegisteredLocked();
-                if (!initiallyRegistered && forceRegistration) {
-                    magnificationController.register();
-                }
+                boolean registeredJustForThisCall =
+                        registerMagnificationIfNeeded(magnificationController);
                 final long identity = Binder.clearCallingIdentity();
                 try {
                     magnificationController.getMagnificationRegion(region);
                     return region;
                 } finally {
                     Binder.restoreCallingIdentity(identity);
-                    if (!initiallyRegistered && forceRegistration) {
+                    if (registeredJustForThisCall) {
                         magnificationController.unregister();
                     }
                 }
@@ -3521,11 +3543,17 @@
                     return 0.0f;
                 }
             }
+            MagnificationController magnificationController = getMagnificationController();
+            boolean registeredJustForThisCall =
+                    registerMagnificationIfNeeded(magnificationController);
             final long identity = Binder.clearCallingIdentity();
             try {
-                return getMagnificationController().getCenterX();
+                return magnificationController.getCenterX();
             } finally {
                 Binder.restoreCallingIdentity(identity);
+                if (registeredJustForThisCall) {
+                    magnificationController.unregister();
+                }
             }
         }
 
@@ -3536,14 +3564,30 @@
                     return 0.0f;
                 }
             }
+            MagnificationController magnificationController = getMagnificationController();
+            boolean registeredJustForThisCall =
+                    registerMagnificationIfNeeded(magnificationController);
             final long identity = Binder.clearCallingIdentity();
             try {
-                return getMagnificationController().getCenterY();
+                return magnificationController.getCenterY();
             } finally {
                 Binder.restoreCallingIdentity(identity);
+                if (registeredJustForThisCall) {
+                    magnificationController.unregister();
+                }
             }
         }
 
+        private boolean registerMagnificationIfNeeded(
+                MagnificationController magnificationController) {
+            if (!magnificationController.isRegisteredLocked()
+                    && mSecurityPolicy.canControlMagnification(this)) {
+                magnificationController.register();
+                return true;
+            }
+            return false;
+        }
+
         @Override
         public boolean resetMagnification(boolean animate) {
             synchronized (mLock) {
@@ -4118,7 +4162,8 @@
                 IAccessibilityInteractionConnectionCallback originalCallback,
                 int resolvedWindowId, int interactionId, int interrogatingPid,
                 long interrogatingTid) {
-            AccessibilityWindowInfo windowInfo = mSecurityPolicy.findWindowById(resolvedWindowId);
+            AccessibilityWindowInfo windowInfo =
+                    mSecurityPolicy.findA11yWindowInfoById(resolvedWindowId);
             if ((windowInfo == null) || !windowInfo.inPictureInPicture()
                     || (mPictureInPictureActionReplacingConnection == null)) {
                 return originalCallback;
@@ -4249,24 +4294,12 @@
         @Override
         public void onWindowsForAccessibilityChanged(List<WindowInfo> windows) {
             synchronized (mLock) {
-                // Populate the windows to report.
-                List<AccessibilityWindowInfo> reportedWindows = new ArrayList<>();
-                final int receivedWindowCount = windows.size();
-                for (int i = 0; i < receivedWindowCount; i++) {
-                    WindowInfo receivedWindow = windows.get(i);
-                    AccessibilityWindowInfo reportedWindow = populateReportedWindow(
-                            receivedWindow);
-                    if (reportedWindow != null) {
-                        reportedWindows.add(reportedWindow);
-                    }
-                }
-
                 if (DEBUG) {
-                    Slog.i(LOG_TAG, "Windows changed: " + reportedWindows);
+                    Slog.i(LOG_TAG, "Windows changed: " + windows);
                 }
 
                 // Let the policy update the focused and active windows.
-                mSecurityPolicy.updateWindowsLocked(reportedWindows);
+                mSecurityPolicy.updateWindowsLocked(windows);
 
                 // Someone may be waiting for the windows - advertise it.
                 mLock.notifyAll();
@@ -4488,7 +4521,8 @@
 
         // In Z order
         public List<AccessibilityWindowInfo> mWindows;
-        public SparseArray<AccessibilityWindowInfo> mWindowsById = new SparseArray<>();
+        public SparseArray<AccessibilityWindowInfo> mA11yWindowInfoById = new SparseArray<>();
+        public SparseArray<WindowInfo> mWindowInfoById = new SparseArray<>();
 
         public int mActiveWindowId = INVALID_WINDOW_ID;
         public int mFocusedWindowId = INVALID_WINDOW_ID;
@@ -4607,14 +4641,14 @@
         }
 
         public void clearWindowsLocked() {
-            List<AccessibilityWindowInfo> windows = Collections.emptyList();
+            List<WindowInfo> windows = Collections.emptyList();
             final int activeWindowId = mActiveWindowId;
             updateWindowsLocked(windows);
             mActiveWindowId = activeWindowId;
             mWindows = null;
         }
 
-        public void updateWindowsLocked(List<AccessibilityWindowInfo> windows) {
+        public void updateWindowsLocked(List<WindowInfo> windows) {
             if (mWindows == null) {
                 mWindows = new ArrayList<>();
             }
@@ -4623,7 +4657,12 @@
             for (int i = oldWindowCount - 1; i >= 0; i--) {
                 mWindows.remove(i).recycle();
             }
-            mWindowsById.clear();
+            mA11yWindowInfoById.clear();
+
+            for (int i = 0; i < mWindowInfoById.size(); i++) {
+                mWindowInfoById.valueAt(i).recycle();
+            }
+            mWindowInfoById.clear();
 
             mFocusedWindowId = INVALID_WINDOW_ID;
             if (!mTouchInteractionInProgress) {
@@ -4640,19 +4679,25 @@
             final int windowCount = windows.size();
             if (windowCount > 0) {
                 for (int i = 0; i < windowCount; i++) {
-                    AccessibilityWindowInfo window = windows.get(i);
-                    final int windowId = window.getId();
-                    if (window.isFocused()) {
-                        mFocusedWindowId = windowId;
-                        if (!mTouchInteractionInProgress) {
-                            mActiveWindowId = windowId;
-                            window.setActive(true);
-                        } else if (windowId == mActiveWindowId) {
-                            activeWindowGone = false;
+                    WindowInfo windowInfo = windows.get(i);
+                    AccessibilityWindowInfo window = (mWindowsForAccessibilityCallback != null)
+                            ? mWindowsForAccessibilityCallback.populateReportedWindow(windowInfo)
+                            : null;
+                    if (window != null) {
+                        final int windowId = window.getId();
+                        if (window.isFocused()) {
+                            mFocusedWindowId = windowId;
+                            if (!mTouchInteractionInProgress) {
+                                mActiveWindowId = windowId;
+                                window.setActive(true);
+                            } else if (windowId == mActiveWindowId) {
+                                activeWindowGone = false;
+                            }
                         }
+                        mWindows.add(window);
+                        mA11yWindowInfoById.put(windowId, window);
+                        mWindowInfoById.put(windowId, WindowInfo.obtain(windowInfo));
                     }
-                    mWindows.add(window);
-                    mWindowsById.put(windowId, window);
                 }
 
                 if (mTouchInteractionInProgress && activeWindowGone) {
@@ -4661,7 +4706,8 @@
 
                 // Focused window may change the active one, so set the
                 // active window once we decided which it is.
-                for (int i = 0; i < windowCount; i++) {
+                final int accessibilityWindowCount = mWindows.size();
+                for (int i = 0; i < accessibilityWindowCount; i++) {
                     AccessibilityWindowInfo window = mWindows.get(i);
                     if (window.getId() == mActiveWindowId) {
                         window.setActive(true);
@@ -4964,11 +5010,15 @@
             if (windowId == mActiveWindowId) {
                 return true;
             }
-            return findWindowById(windowId) != null;
+            return findA11yWindowInfoById(windowId) != null;
         }
 
-        private AccessibilityWindowInfo findWindowById(int windowId) {
-            return mWindowsById.get(windowId);
+        private AccessibilityWindowInfo findA11yWindowInfoById(int windowId) {
+            return mA11yWindowInfoById.get(windowId);
+        }
+
+        private WindowInfo findWindowInfoById(int windowId) {
+            return mWindowInfoById.get(windowId);
         }
 
         private AccessibilityWindowInfo getPictureInPictureWindow() {
diff --git a/services/accessibility/java/com/android/server/accessibility/KeyboardInterceptor.java b/services/accessibility/java/com/android/server/accessibility/KeyboardInterceptor.java
index bbb25af..f00a954 100644
--- a/services/accessibility/java/com/android/server/accessibility/KeyboardInterceptor.java
+++ b/services/accessibility/java/com/android/server/accessibility/KeyboardInterceptor.java
@@ -16,19 +16,52 @@
 
 package com.android.server.accessibility;
 
+import android.os.Handler;
+import android.os.Message;
+import android.os.SystemClock;
+import android.util.Pools;
+import android.util.Slog;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
+import android.view.WindowManagerPolicy;
 import android.view.accessibility.AccessibilityEvent;
 
 /**
  * Intercepts key events and forwards them to accessibility manager service.
  */
-public class KeyboardInterceptor implements EventStreamTransformation {
-    private EventStreamTransformation mNext;
-    private AccessibilityManagerService mAms;
+public class KeyboardInterceptor implements EventStreamTransformation, Handler.Callback {
+    private static final int MESSAGE_PROCESS_QUEUED_EVENTS = 1;
+    private static final String LOG_TAG = "KeyboardInterceptor";
 
-    public KeyboardInterceptor(AccessibilityManagerService service) {
+    private final AccessibilityManagerService mAms;
+    private final WindowManagerPolicy mPolicy;
+    private final Handler mHandler;
+
+    private EventStreamTransformation mNext;
+    private KeyEventHolder mEventQueueStart;
+    private KeyEventHolder mEventQueueEnd;
+
+    /**
+     * @param service The service to notify of key events
+     * @param policy The policy to check for keys that may affect a11y
+     */
+    public KeyboardInterceptor(AccessibilityManagerService service, WindowManagerPolicy policy) {
         mAms = service;
+        mPolicy = policy;
+        mHandler = new Handler(this);
+    }
+
+    /**
+     * @param service The service to notify of key events
+     * @param policy The policy to check for keys that may affect a11y
+     * @param handler The handler to use. Only used for testing.
+     */
+    public KeyboardInterceptor(AccessibilityManagerService service, WindowManagerPolicy policy,
+            Handler handler) {
+        // Can't combine the constructors without making at least mHandler non-final.
+        mAms = service;
+        mPolicy = policy;
+        mHandler = handler;
     }
 
     @Override
@@ -40,6 +73,19 @@
 
     @Override
     public void onKeyEvent(KeyEvent event, int policyFlags) {
+        /*
+         * Certain keys have system-level behavior that affects accessibility services.
+         * Let that behavior settle before handling the keys
+         */
+        long eventDelay = getEventDelay(event, policyFlags);
+        if (eventDelay < 0) {
+            return;
+        }
+        if ((eventDelay > 0) || (mEventQueueStart != null))  {
+            addEventToQueue(event, policyFlags, eventDelay);
+            return;
+        }
+
         mAms.notifyKeyEvent(event, policyFlags);
     }
 
@@ -65,4 +111,104 @@
     @Override
     public void onDestroy() {
     }
+
+    @Override
+    public boolean handleMessage(Message msg) {
+        if (msg.what != MESSAGE_PROCESS_QUEUED_EVENTS) {
+            Slog.e(LOG_TAG, "Unexpected message type");
+            return false;
+        }
+        processQueuedEvents();
+        if (mEventQueueStart != null) {
+            scheduleProcessQueuedEvents();
+        }
+        return true;
+    }
+
+    private void addEventToQueue(KeyEvent event, int policyFlags, long delay) {
+        long dispatchTime = SystemClock.uptimeMillis() + delay;
+        if (mEventQueueStart == null) {
+            mEventQueueEnd = mEventQueueStart =
+                    KeyEventHolder.obtain(event, policyFlags, dispatchTime);
+            scheduleProcessQueuedEvents();
+            return;
+        }
+        final KeyEventHolder holder = KeyEventHolder.obtain(event, policyFlags, dispatchTime);
+        holder.next = mEventQueueStart;
+        mEventQueueStart.previous = holder;
+        mEventQueueStart = holder;
+    }
+
+    private void scheduleProcessQueuedEvents() {
+        if (!mHandler.sendEmptyMessageAtTime(
+                MESSAGE_PROCESS_QUEUED_EVENTS, mEventQueueEnd.dispatchTime)) {
+            Slog.e(LOG_TAG, "Failed to schedule key event");
+        };
+    }
+
+    private void processQueuedEvents() {
+        final long currentTime = SystemClock.uptimeMillis();
+        while ((mEventQueueEnd != null) && (mEventQueueEnd.dispatchTime <= currentTime)) {
+            final long eventDelay = getEventDelay(mEventQueueEnd.event, mEventQueueEnd.policyFlags);
+            if (eventDelay > 0) {
+                // Reschedule the event
+                mEventQueueEnd.dispatchTime = currentTime + eventDelay;
+                return;
+            }
+            // We'll either send or drop the event
+            if (eventDelay == 0) {
+                mAms.notifyKeyEvent(mEventQueueEnd.event, mEventQueueEnd.policyFlags);
+            }
+            final KeyEventHolder eventToBeRecycled = mEventQueueEnd;
+            mEventQueueEnd = mEventQueueEnd.previous;
+            if (mEventQueueEnd != null) {
+                mEventQueueEnd.next = null;
+            }
+            eventToBeRecycled.recycle();
+            if (mEventQueueEnd == null) {
+                mEventQueueStart = null;
+            }
+        }
+    }
+
+    private long getEventDelay(KeyEvent event, int policyFlags) {
+        int keyCode = event.getKeyCode();
+        if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) || (keyCode == KeyEvent.KEYCODE_VOLUME_UP)) {
+            return mPolicy.interceptKeyBeforeDispatching(null, event, policyFlags);
+        }
+        return 0;
+    }
+
+    private static class KeyEventHolder {
+        private static final int MAX_POOL_SIZE = 32;
+        private static final Pools.SimplePool<KeyEventHolder> sPool =
+                new Pools.SimplePool<>(MAX_POOL_SIZE);
+
+        public int policyFlags;
+        public long dispatchTime;
+        public KeyEvent event;
+        public KeyEventHolder next;
+        public KeyEventHolder previous;
+
+        public static KeyEventHolder obtain(KeyEvent event, int policyFlags, long dispatchTime) {
+            KeyEventHolder holder = sPool.acquire();
+            if (holder == null) {
+                holder = new KeyEventHolder();
+            }
+            holder.event = KeyEvent.obtain(event);
+            holder.policyFlags = policyFlags;
+            holder.dispatchTime = dispatchTime;
+            return holder;
+        }
+
+        public void recycle() {
+            event.recycle();
+            event = null;
+            policyFlags = 0;
+            dispatchTime = 0;
+            next = null;
+            previous = null;
+            sPool.release(this);
+        }
+    }
 }
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java
index 9cc53f0..c9c7adc 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 
 import com.android.server.AppWidgetBackupBridge;
+import com.android.server.FgThread;
 import com.android.server.SystemService;
 
 /**
@@ -48,7 +49,7 @@
 
     @Override
     public void onUnlockUser(int userHandle) {
-        mImpl.onUserUnlocked(userHandle);
+        FgThread.getHandler().post(() -> mImpl.onUserUnlocked(userHandle));
     }
 
     @Override
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 14583d70..a57010b 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -69,6 +69,7 @@
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.SystemClock;
+import android.os.Trace;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.os.storage.StorageManager;
@@ -2649,9 +2650,14 @@
             Slog.w(TAG, "User " + userId + " is no longer unlocked - exiting");
             return;
         }
+        long time = SystemClock.elapsedRealtime();
         synchronized (mLock) {
+            Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "appwidget ensure");
             ensureGroupStateLoadedLocked(userId);
+            Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
+            Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "appwidget reload");
             reloadWidgetsMaskedStateForGroup(mSecurityPolicy.getGroupParent(userId));
+            Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
 
             final int N = mProviders.size();
             for (int i = 0; i < N; i++) {
@@ -2663,13 +2669,18 @@
                 }
 
                 if (provider.widgets.size() > 0) {
+                    Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
+                            "appwidget init " + provider.info.provider.getPackageName());
                     sendEnableIntentLocked(provider);
                     int[] appWidgetIds = getWidgetIds(provider.widgets);
                     sendUpdateIntentLocked(provider, appWidgetIds);
                     registerForBroadcastsLocked(provider, appWidgetIds);
+                    Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
                 }
             }
         }
+        Slog.i(TAG, "Async processing of onUserUnlocked u" + userId + " took "
+                + (SystemClock.elapsedRealtime() - time) + " ms");
     }
 
     // only call from initialization -- it assumes that the data structures are all empty
diff --git a/services/art-profile b/services/art-profile
new file mode 100644
index 0000000..ae5c909
--- /dev/null
+++ b/services/art-profile
@@ -0,0 +1,16942 @@
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->authenticate(JI)I
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->cancel()I
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->enroll([BII)I
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->enumerate()I
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->getAuthenticatorId()J
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->notifySyspropsChanged()V
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->ping()V
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->postEnroll()I
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->preEnroll()J
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->remove(II)I
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->setActiveGroup(ILjava/lang/String;)I
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->setHALInstrumentation()V
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->setNotify(Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;)J
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->notifySyspropsChanged()V
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->onAcquired(JII)V
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->onAuthenticated(JIILjava/util/ArrayList;)V
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->onEnrollResult(JIII)V
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->onEnumerate(JIII)V
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->onError(JII)V
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->onRemoved(JIII)V
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->ping()V
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->setHALInstrumentation()V
+HPLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->hasHDRDisplay()Landroid/hardware/configstore/V1_0/OptionalBool;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->hasSyncFramework()Landroid/hardware/configstore/V1_0/OptionalBool;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->hasWideColorDisplay()Landroid/hardware/configstore/V1_0/OptionalBool;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->maxFrameBufferAcquiredBuffers()Landroid/hardware/configstore/V1_0/OptionalInt64;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->maxVirtualDisplaySize()Landroid/hardware/configstore/V1_0/OptionalUInt64;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->notifySyspropsChanged()V
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->ping()V
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->presentTimeOffsetFromVSyncNs()Landroid/hardware/configstore/V1_0/OptionalInt64;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->setHALInstrumentation()V
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->startGraphicsAllocatorService()Landroid/hardware/configstore/V1_0/OptionalBool;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->useContextPriority()Landroid/hardware/configstore/V1_0/OptionalBool;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->useHwcForRGBtoYUV()Landroid/hardware/configstore/V1_0/OptionalBool;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->useVrFlinger()Landroid/hardware/configstore/V1_0/OptionalBool;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->vsyncEventPhaseOffsetNs()Landroid/hardware/configstore/V1_0/OptionalInt64;
+HPLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->vsyncSfEventPhaseOffsetNs()Landroid/hardware/configstore/V1_0/OptionalInt64;
+HPLandroid/hardware/usb/V1_0/IUsb;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/usb/V1_0/IUsb;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/usb/V1_0/IUsb;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/usb/V1_0/IUsb;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/usb/V1_0/IUsb;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/usb/V1_0/IUsb;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/usb/V1_0/IUsb;->notifySyspropsChanged()V
+HPLandroid/hardware/usb/V1_0/IUsb;->ping()V
+HPLandroid/hardware/usb/V1_0/IUsb;->queryPortStatus()V
+HPLandroid/hardware/usb/V1_0/IUsb;->setCallback(Landroid/hardware/usb/V1_0/IUsbCallback;)V
+HPLandroid/hardware/usb/V1_0/IUsb;->setHALInstrumentation()V
+HPLandroid/hardware/usb/V1_0/IUsb;->switchRole(Ljava/lang/String;Landroid/hardware/usb/V1_0/PortRole;)V
+HPLandroid/hardware/usb/V1_0/IUsb;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/usb/V1_0/IUsbCallback;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/usb/V1_0/IUsbCallback;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/usb/V1_0/IUsbCallback;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/usb/V1_0/IUsbCallback;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/usb/V1_0/IUsbCallback;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/usb/V1_0/IUsbCallback;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/usb/V1_0/IUsbCallback;->notifyPortStatusChange(Ljava/util/ArrayList;I)V
+HPLandroid/hardware/usb/V1_0/IUsbCallback;->notifyRoleSwitchStatus(Ljava/lang/String;Landroid/hardware/usb/V1_0/PortRole;I)V
+HPLandroid/hardware/usb/V1_0/IUsbCallback;->notifySyspropsChanged()V
+HPLandroid/hardware/usb/V1_0/IUsbCallback;->ping()V
+HPLandroid/hardware/usb/V1_0/IUsbCallback;->setHALInstrumentation()V
+HPLandroid/hardware/usb/V1_0/IUsbCallback;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/usb/V1_1/IUsbCallback;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/usb/V1_1/IUsbCallback;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/usb/V1_1/IUsbCallback;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/usb/V1_1/IUsbCallback;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/usb/V1_1/IUsbCallback;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/usb/V1_1/IUsbCallback;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/usb/V1_1/IUsbCallback;->notifyPortStatusChange_1_1(Ljava/util/ArrayList;I)V
+HPLandroid/hardware/usb/V1_1/IUsbCallback;->notifySyspropsChanged()V
+HPLandroid/hardware/usb/V1_1/IUsbCallback;->ping()V
+HPLandroid/hardware/usb/V1_1/IUsbCallback;->setHALInstrumentation()V
+HPLandroid/hardware/usb/V1_1/IUsbCallback;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/V1_0/IWifi$Proxy;->getChip(ILandroid/hardware/wifi/V1_0/IWifi$getChipCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifi$Proxy;->getChipIds(Landroid/hardware/wifi/V1_0/IWifi$getChipIdsCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifi$Proxy;->isStarted()Z
+HPLandroid/hardware/wifi/V1_0/IWifi$getChipCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiChip;)V
+HPLandroid/hardware/wifi/V1_0/IWifi$getChipIdsCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifi;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/V1_0/IWifi;->getChip(ILandroid/hardware/wifi/V1_0/IWifi$getChipCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifi;->getChipIds(Landroid/hardware/wifi/V1_0/IWifi$getChipIdsCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifi;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/V1_0/IWifi;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifi;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifi;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/V1_0/IWifi;->isStarted()Z
+HPLandroid/hardware/wifi/V1_0/IWifi;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/V1_0/IWifi;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/V1_0/IWifi;->ping()V
+HPLandroid/hardware/wifi/V1_0/IWifi;->registerEventCallback(Landroid/hardware/wifi/V1_0/IWifiEventCallback;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifi;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/V1_0/IWifi;->start()Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifi;->stop()Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifi;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/V1_0/IWifiChip$ChipIfaceCombination;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$ChipIfaceCombinationLimit;-><init>()V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$ChipIfaceCombinationLimit;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$ChipMode;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$ChipMode;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->getApIfaceNames(Landroid/hardware/wifi/V1_0/IWifiChip$getApIfaceNamesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->getAvailableModes(Landroid/hardware/wifi/V1_0/IWifiChip$getAvailableModesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->getCapabilities(Landroid/hardware/wifi/V1_0/IWifiChip$getCapabilitiesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->getMode(Landroid/hardware/wifi/V1_0/IWifiChip$getModeCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->getNanIfaceNames(Landroid/hardware/wifi/V1_0/IWifiChip$getNanIfaceNamesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->getP2pIfaceNames(Landroid/hardware/wifi/V1_0/IWifiChip$getP2pIfaceNamesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->getStaIface(Ljava/lang/String;Landroid/hardware/wifi/V1_0/IWifiChip$getStaIfaceCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->getStaIfaceNames(Landroid/hardware/wifi/V1_0/IWifiChip$getStaIfaceNamesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiChip$createRttControllerCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiRttController;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$createStaIfaceCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiStaIface;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$getApIfaceNamesCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$getAvailableModesCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$getCapabilitiesCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;I)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$getDebugHostWakeReasonStatsCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonStats;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$getDebugRingBuffersStatusCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$getModeCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;I)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$getNanIfaceNamesCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$getP2pIfaceNamesCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$getStaIfaceCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiStaIface;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$getStaIfaceNamesCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip$requestChipDebugInfoCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiChip$ChipDebugInfo;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/wifi/V1_0/IWifiChip;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->configureChip(I)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->createApIface(Landroid/hardware/wifi/V1_0/IWifiChip$createApIfaceCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->createNanIface(Landroid/hardware/wifi/V1_0/IWifiChip$createNanIfaceCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->createP2pIface(Landroid/hardware/wifi/V1_0/IWifiChip$createP2pIfaceCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->createRttController(Landroid/hardware/wifi/V1_0/IWifiIface;Landroid/hardware/wifi/V1_0/IWifiChip$createRttControllerCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->createStaIface(Landroid/hardware/wifi/V1_0/IWifiChip$createStaIfaceCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->enableDebugErrorAlerts(Z)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->forceDumpToDebugRingBuffer(Ljava/lang/String;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getApIface(Ljava/lang/String;Landroid/hardware/wifi/V1_0/IWifiChip$getApIfaceCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getApIfaceNames(Landroid/hardware/wifi/V1_0/IWifiChip$getApIfaceNamesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getAvailableModes(Landroid/hardware/wifi/V1_0/IWifiChip$getAvailableModesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getCapabilities(Landroid/hardware/wifi/V1_0/IWifiChip$getCapabilitiesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getDebugHostWakeReasonStats(Landroid/hardware/wifi/V1_0/IWifiChip$getDebugHostWakeReasonStatsCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getDebugRingBuffersStatus(Landroid/hardware/wifi/V1_0/IWifiChip$getDebugRingBuffersStatusCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getId(Landroid/hardware/wifi/V1_0/IWifiChip$getIdCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getMode(Landroid/hardware/wifi/V1_0/IWifiChip$getModeCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getNanIface(Ljava/lang/String;Landroid/hardware/wifi/V1_0/IWifiChip$getNanIfaceCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getNanIfaceNames(Landroid/hardware/wifi/V1_0/IWifiChip$getNanIfaceNamesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getP2pIface(Ljava/lang/String;Landroid/hardware/wifi/V1_0/IWifiChip$getP2pIfaceCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getP2pIfaceNames(Landroid/hardware/wifi/V1_0/IWifiChip$getP2pIfaceNamesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getStaIface(Ljava/lang/String;Landroid/hardware/wifi/V1_0/IWifiChip$getStaIfaceCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->getStaIfaceNames(Landroid/hardware/wifi/V1_0/IWifiChip$getStaIfaceNamesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->ping()V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->registerEventCallback(Landroid/hardware/wifi/V1_0/IWifiChipEventCallback;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->removeApIface(Ljava/lang/String;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->removeNanIface(Ljava/lang/String;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->removeP2pIface(Ljava/lang/String;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->removeStaIface(Ljava/lang/String;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->requestChipDebugInfo(Landroid/hardware/wifi/V1_0/IWifiChip$requestChipDebugInfoCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->requestDriverDebugDump(Landroid/hardware/wifi/V1_0/IWifiChip$requestDriverDebugDumpCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->requestFirmwareDebugDump(Landroid/hardware/wifi/V1_0/IWifiChip$requestFirmwareDebugDumpCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->startLoggingToDebugRingBuffer(Ljava/lang/String;III)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->stopLoggingToDebugRingBuffer()Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiChip;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->onChipReconfigureFailure(Landroid/hardware/wifi/V1_0/WifiStatus;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->onChipReconfigured(I)V
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->onDebugErrorAlert(ILjava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->onDebugRingBufferDataAvailable(Landroid/hardware/wifi/V1_0/WifiDebugRingBufferStatus;Ljava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->onIfaceAdded(ILjava/lang/String;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->onIfaceRemoved(ILjava/lang/String;)V
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->ping()V
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/V1_0/IWifiChipEventCallback;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/V1_0/IWifiEventCallback;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/V1_0/IWifiEventCallback;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/V1_0/IWifiEventCallback;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiEventCallback;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiEventCallback;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/V1_0/IWifiEventCallback;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/V1_0/IWifiEventCallback;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/V1_0/IWifiEventCallback;->onFailure(Landroid/hardware/wifi/V1_0/WifiStatus;)V
+HPLandroid/hardware/wifi/V1_0/IWifiEventCallback;->onStart()V
+HPLandroid/hardware/wifi/V1_0/IWifiEventCallback;->onStop()V
+HPLandroid/hardware/wifi/V1_0/IWifiEventCallback;->ping()V
+HPLandroid/hardware/wifi/V1_0/IWifiEventCallback;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/V1_0/IWifiEventCallback;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/V1_0/IWifiIface$getNameCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/lang/String;)V
+HPLandroid/hardware/wifi/V1_0/IWifiIface;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/V1_0/IWifiIface;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/V1_0/IWifiIface;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiIface;->getName(Landroid/hardware/wifi/V1_0/IWifiIface$getNameCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiIface;->getType(Landroid/hardware/wifi/V1_0/IWifiIface$getTypeCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiIface;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiIface;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/V1_0/IWifiIface;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/V1_0/IWifiIface;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/V1_0/IWifiIface;->ping()V
+HPLandroid/hardware/wifi/V1_0/IWifiIface;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/V1_0/IWifiIface;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->disableResponder(I)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->enableResponder(ILandroid/hardware/wifi/V1_0/WifiChannelInfo;ILandroid/hardware/wifi/V1_0/RttResponder;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->getBoundIface(Landroid/hardware/wifi/V1_0/IWifiRttController$getBoundIfaceCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->getCapabilities(Landroid/hardware/wifi/V1_0/IWifiRttController$getCapabilitiesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->getResponderInfo(Landroid/hardware/wifi/V1_0/IWifiRttController$getResponderInfoCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->ping()V
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->rangeCancel(ILjava/util/ArrayList;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->rangeRequest(ILjava/util/ArrayList;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->registerEventCallback(Landroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->setLci(ILandroid/hardware/wifi/V1_0/RttLciInformation;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->setLcr(ILandroid/hardware/wifi/V1_0/RttLcrInformation;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiRttController;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback;->onResults(ILjava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback;->ping()V
+HPLandroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->getCapabilities(Landroid/hardware/wifi/V1_0/IWifiStaIface$getCapabilitiesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->getLinkLayerStats(Landroid/hardware/wifi/V1_0/IWifiStaIface$getLinkLayerStatsCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->getValidFrequenciesForBand(ILandroid/hardware/wifi/V1_0/IWifiStaIface$getValidFrequenciesForBandCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->installApfPacketFilter(ILjava/util/ArrayList;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface$getApfPacketFilterCapabilitiesCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaApfPacketFilterCapabilities;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface$getBackgroundScanCapabilitiesCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaBackgroundScanCapabilities;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface$getCapabilitiesCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;I)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface$getDebugRxPacketFatesCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface$getDebugTxPacketFatesCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface$getLinkLayerStatsCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaLinkLayerStats;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface$getRoamingCapabilitiesCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaRoamingCapabilities;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface$getValidFrequenciesForBandCallback;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/wifi/V1_0/IWifiStaIface;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->configureRoaming(Landroid/hardware/wifi/V1_0/StaRoamingConfig;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->disableLinkLayerStatsCollection()Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->enableLinkLayerStatsCollection(Z)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->enableNdOffload(Z)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->getApfPacketFilterCapabilities(Landroid/hardware/wifi/V1_0/IWifiStaIface$getApfPacketFilterCapabilitiesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->getBackgroundScanCapabilities(Landroid/hardware/wifi/V1_0/IWifiStaIface$getBackgroundScanCapabilitiesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->getCapabilities(Landroid/hardware/wifi/V1_0/IWifiStaIface$getCapabilitiesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->getDebugRxPacketFates(Landroid/hardware/wifi/V1_0/IWifiStaIface$getDebugRxPacketFatesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->getDebugTxPacketFates(Landroid/hardware/wifi/V1_0/IWifiStaIface$getDebugTxPacketFatesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->getLinkLayerStats(Landroid/hardware/wifi/V1_0/IWifiStaIface$getLinkLayerStatsCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->getRoamingCapabilities(Landroid/hardware/wifi/V1_0/IWifiStaIface$getRoamingCapabilitiesCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->getValidFrequenciesForBand(ILandroid/hardware/wifi/V1_0/IWifiStaIface$getValidFrequenciesForBandCallback;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->installApfPacketFilter(ILjava/util/ArrayList;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->ping()V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->registerEventCallback(Landroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->setRoamingState(B)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->setScanningMacOui([B)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->startBackgroundScan(ILandroid/hardware/wifi/V1_0/StaBackgroundScanParameters;)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->startDebugPacketFateMonitoring()Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->startRssiMonitoring(III)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->startSendingKeepAlivePackets(ILjava/util/ArrayList;S[B[BI)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->stopBackgroundScan(I)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->stopRssiMonitoring(I)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->stopSendingKeepAlivePackets(I)Landroid/hardware/wifi/V1_0/WifiStatus;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIface;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->onBackgroundFullScanResult(IILandroid/hardware/wifi/V1_0/StaScanResult;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->onBackgroundScanFailure(I)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->onBackgroundScanResults(ILjava/util/ArrayList;)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->onRssiThresholdBreached(I[BI)V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->ping()V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/V1_0/StaLinkLayerIfacePacketStats;-><init>()V
+HPLandroid/hardware/wifi/V1_0/StaLinkLayerIfacePacketStats;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/wifi/V1_0/StaLinkLayerIfaceStats;-><init>()V
+HPLandroid/hardware/wifi/V1_0/StaLinkLayerIfaceStats;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/wifi/V1_0/StaLinkLayerRadioStats;-><init>()V
+HPLandroid/hardware/wifi/V1_0/StaLinkLayerRadioStats;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/wifi/V1_0/StaLinkLayerStats;-><init>()V
+HPLandroid/hardware/wifi/V1_0/StaLinkLayerStats;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/wifi/V1_0/StaLinkLayerStats;->readFromParcel(Landroid/os/HwParcel;)V
+HPLandroid/hardware/wifi/V1_0/WifiDebugPacketFateFrameInfo;-><init>()V
+HPLandroid/hardware/wifi/V1_0/WifiDebugPacketFateFrameInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/wifi/V1_0/WifiDebugRingBufferStatus;-><init>()V
+HPLandroid/hardware/wifi/V1_0/WifiDebugRingBufferStatus;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/wifi/V1_0/WifiDebugRingBufferStatus;->readFromParcel(Landroid/os/HwParcel;)V
+HPLandroid/hardware/wifi/V1_0/WifiDebugTxPacketFateReport;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/wifi/V1_0/WifiDebugTxPacketFateReport;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/V1_0/WifiStatus;-><init>()V
+HPLandroid/hardware/wifi/V1_0/WifiStatus;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/wifi/V1_0/WifiStatus;->readFromParcel(Landroid/os/HwParcel;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->getDebugLevel()I
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->getInterface(Landroid/hardware/wifi/supplicant/V1_0/ISupplicant$IfaceInfo;Landroid/hardware/wifi/supplicant/V1_0/ISupplicant$getInterfaceCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->isDebugShowKeysEnabled()Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->isDebugShowTimestampEnabled()Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->listInterfaces(Landroid/hardware/wifi/supplicant/V1_0/ISupplicant$listInterfacesCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->ping()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->registerCallback(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantCallback;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->setConcurrencyPriority(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->setDebugParams(IZZ)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantIface$addNetworkCallback;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Landroid/hardware/wifi/supplicant/V1_0/ISupplicantNetwork;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$getDeviceAddressCallback;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;[B)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->addBonjourService(Ljava/util/ArrayList;Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->addGroup(ZI)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->addUpnpService(ILjava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->cancelConnect()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->cancelServiceDiscovery(J)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->cancelWps(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->configureExtListen(II)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->connect([BILjava/lang/String;ZZILandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$connectCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->createNfcHandoverRequestMessage(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$createNfcHandoverRequestMessageCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->createNfcHandoverSelectMessage(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$createNfcHandoverSelectMessageCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->enableWfd(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->find(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->flush()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->flushServices()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->getDeviceAddress(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$getDeviceAddressCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->getGroupCapability([BLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$getGroupCapabilityCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->getSsid([BLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$getSsidCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->invite(Ljava/lang/String;[B[B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->ping()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->provisionDiscovery([BI)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->registerCallback(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->reinvoke(I[B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->reject([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->removeBonjourService(Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->removeGroup(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->removeUpnpService(ILjava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->reportNfcHandoverInitiation(Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->reportNfcHandoverResponse(Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->requestServiceDiscovery([BLjava/util/ArrayList;Landroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$requestServiceDiscoveryCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->saveConfig()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->setDisallowedFrequencies(Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->setGroupIdle(Ljava/lang/String;I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->setListenChannel(II)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->setMiracastMode(B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->setPowerSave(Ljava/lang/String;Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->setSsidPostfix(Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->setWfdDeviceInfo([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->startWpsPbc(Ljava/lang/String;[B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->startWpsPinDisplay(Ljava/lang/String;[BLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$startWpsPinDisplayCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->startWpsPinKeypad(Ljava/lang/String;Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->stopFind()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onDeviceFound([B[B[BLjava/lang/String;SBI[B)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onDeviceLost([B)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onFindStopped()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onGoNegotiationCompleted(I)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onGoNegotiationRequest([BS)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onGroupFormationFailure(Ljava/lang/String;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onGroupFormationSuccess()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onGroupRemoved(Ljava/lang/String;Z)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onGroupStarted(Ljava/lang/String;ZLjava/util/ArrayList;I[BLjava/lang/String;[BZ)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onInvitationReceived([B[B[BII)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onInvitationResult([BI)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onNetworkAdded(I)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onNetworkRemoved(I)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onProvisionDiscoveryCompleted([BZBSLjava/lang/String;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onServiceDiscoveryResponse([BSLjava/util/ArrayList;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onStaAuthorized([B[B)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->onStaDeauthorized([B[B)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->ping()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->setPowerSave(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$getMacAddressCallback;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;[B)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->addExtRadioWork(Ljava/lang/String;IILandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$addExtRadioWorkCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->addRxFilter(B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->cancelWps()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->disconnect()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->enableAutoReconnect(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->getMacAddress(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$getMacAddressCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->initiateAnqpQuery([BLjava/util/ArrayList;Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->initiateHs20IconQuery([BLjava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->initiateTdlsDiscover([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->initiateTdlsSetup([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->initiateTdlsTeardown([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->ping()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->reassociate()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->reconnect()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->registerCallback(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->removeExtRadioWork(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->removeRxFilter(B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->setBtCoexistenceMode(B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->setBtCoexistenceScanModeEnabled(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->setCountryCode([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->setExternalSim(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->setPowerSave(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->setSuspendModeEnabled(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->startRxFilter()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->startWpsPbc([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->startWpsPinDisplay([BLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$startWpsPinDisplayCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->startWpsPinKeypad(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->startWpsRegistrar([BLjava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->stopRxFilter()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onAnqpQueryDone([BLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback$AnqpData;Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback$Hs20AnqpData;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onAssociationRejected([BIZ)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onAuthenticationTimeout([B)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onBssidChanged(B[B)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onDisconnected([BZI)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onEapFailure()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onExtRadioWorkStart(I)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onExtRadioWorkTimeout(I)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onHs20DeauthImminentNotice([BIILjava/lang/String;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onHs20IconQueryDone([BLjava/lang/String;Ljava/util/ArrayList;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onHs20SubscriptionRemediation([BBLjava/lang/String;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onNetworkAdded(I)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onNetworkRemoved(I)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onStateChanged(I[BILjava/util/ArrayList;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onWpsEventFail([BSS)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onWpsEventPbcOverlap()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->onWpsEventSuccess()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->ping()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->disable()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->enable(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getAuthAlg(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getAuthAlgCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getBssid(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getBssidCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapAltSubjectMatch(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapAltSubjectMatchCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapAnonymousIdentity(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapAnonymousIdentityCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapCACert(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapCACertCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapCAPath(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapCAPathCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapClientCert(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapClientCertCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapDomainSuffixMatch(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapDomainSuffixMatchCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapEngine(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapEngineCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapEngineID(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapEngineIDCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapIdentity(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapIdentityCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapMethod(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapMethodCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapPassword(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapPasswordCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapPhase2Method(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapPhase2MethodCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapPrivateKeyId(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapPrivateKeyIdCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getEapSubjectMatch(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getEapSubjectMatchCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getGroupCipher(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getGroupCipherCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getIdStr(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getIdStrCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getKeyMgmt(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getKeyMgmtCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getPairwiseCipher(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getPairwiseCipherCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getProto(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getProtoCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getPsk(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getPskCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getPskPassphrase(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getPskPassphraseCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getRequirePmf(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getRequirePmfCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getScanSsid(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getScanSsidCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getSsid(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getSsidCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getWepKey(ILandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getWepKeyCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getWepTxKeyIdx(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getWepTxKeyIdxCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->getWpsNfcConfigurationToken(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$getWpsNfcConfigurationTokenCallback;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->ping()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->registerCallback(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->select()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->sendNetworkEapIdentityResponse(Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->sendNetworkEapSimGsmAuthFailure()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->sendNetworkEapSimGsmAuthResponse(Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->sendNetworkEapSimUmtsAuthFailure()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->sendNetworkEapSimUmtsAuthResponse(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$NetworkResponseEapSimUmtsAuthParams;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->sendNetworkEapSimUmtsAutsResponse([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setAuthAlg(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setBssid([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapAltSubjectMatch(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapAnonymousIdentity(Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapCACert(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapCAPath(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapClientCert(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapDomainSuffixMatch(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapEngine(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapEngineID(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapIdentity(Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapMethod(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapPassword(Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapPhase2Method(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapPrivateKeyId(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setEapSubjectMatch(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setGroupCipher(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setIdStr(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setKeyMgmt(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setPairwiseCipher(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setProactiveKeyCaching(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setProto(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setPsk([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setPskPassphrase(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setRequirePmf(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setScanSsid(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setSsid(Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setUpdateIdentifier(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setWepKey(ILjava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->setWepTxKeyIdx(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;->asBinder()Landroid/os/IHwBinder;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;->getDebugInfo()Landroid/hidl/base/V1_0/DebugInfo;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;->getHashChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;->interfaceChain()Ljava/util/ArrayList;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;->interfaceDescriptor()Ljava/lang/String;
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;->notifySyspropsChanged()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;->onNetworkEapIdentityRequest()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;->onNetworkEapSimGsmAuthRequest(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback$NetworkRequestEapSimGsmAuthParams;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;->onNetworkEapSimUmtsAuthRequest(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback$NetworkRequestEapSimUmtsAuthParams;)V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;->ping()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;->setHALInstrumentation()V
+HPLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;->unlinkToDeath(Landroid/os/IHwBinder$DeathRecipient;)Z
+HPLandroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;-><init>()V
+HPLandroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;->readFromParcel(Landroid/os/HwParcel;)V
+HPLandroid/net/apf/ApfFilter$Ra;->generateFilterLocked(Landroid/net/apf/ApfGenerator;)J
+HPLandroid/net/apf/ApfFilter$Ra;->matches([BI)Z
+HPLandroid/net/apf/ApfFilter$Ra;->minLifetime([BI)J
+HPLandroid/net/apf/ApfFilter;->beginProgramLocked()Landroid/net/apf/ApfGenerator;
+HPLandroid/net/apf/ApfFilter;->currentTimeSeconds()J
+HPLandroid/net/apf/ApfFilter;->generateArpFilterLocked(Landroid/net/apf/ApfGenerator;)V
+HPLandroid/net/apf/ApfFilter;->generateIPv4FilterLocked(Landroid/net/apf/ApfGenerator;)V
+HPLandroid/net/apf/ApfFilter;->generateIPv6FilterLocked(Landroid/net/apf/ApfGenerator;)V
+HPLandroid/net/apf/ApfFilter;->installNewProgramLocked()V
+HPLandroid/net/apf/ApfGenerator$Instruction;-><init>(Landroid/net/apf/ApfGenerator;Landroid/net/apf/ApfGenerator$Opcodes;)V
+HPLandroid/net/apf/ApfGenerator$Instruction;-><init>(Landroid/net/apf/ApfGenerator;Landroid/net/apf/ApfGenerator$Opcodes;Landroid/net/apf/ApfGenerator$Register;)V
+HPLandroid/net/apf/ApfGenerator$Instruction;->calculateImmSize(IZ)B
+HPLandroid/net/apf/ApfGenerator$Instruction;->calculateTargetLabelOffset()I
+HPLandroid/net/apf/ApfGenerator$Instruction;->generate([B)V
+HPLandroid/net/apf/ApfGenerator$Instruction;->generateImmSizeField()B
+HPLandroid/net/apf/ApfGenerator$Instruction;->generateInstructionByte()B
+HPLandroid/net/apf/ApfGenerator$Instruction;->generatedImmSize()B
+HPLandroid/net/apf/ApfGenerator$Instruction;->setCompareBytes([B)V
+HPLandroid/net/apf/ApfGenerator$Instruction;->setImm(IZ)V
+HPLandroid/net/apf/ApfGenerator$Instruction;->setLabel(Ljava/lang/String;)V
+HPLandroid/net/apf/ApfGenerator$Instruction;->setSignedImm(I)V
+HPLandroid/net/apf/ApfGenerator$Instruction;->setTargetLabel(Ljava/lang/String;)V
+HPLandroid/net/apf/ApfGenerator$Instruction;->setUnsignedImm(I)V
+HPLandroid/net/apf/ApfGenerator$Instruction;->shrink()Z
+HPLandroid/net/apf/ApfGenerator$Instruction;->size()I
+HPLandroid/net/apf/ApfGenerator$Instruction;->writeValue(I[BI)I
+HPLandroid/net/apf/ApfGenerator;->-get0(Landroid/net/apf/ApfGenerator;)Landroid/net/apf/ApfGenerator$Instruction;
+HPLandroid/net/apf/ApfGenerator;->-get1(Landroid/net/apf/ApfGenerator;)Ljava/util/HashMap;
+HPLandroid/net/apf/ApfGenerator;->-get2(Landroid/net/apf/ApfGenerator;)Landroid/net/apf/ApfGenerator$Instruction;
+HPLandroid/net/apf/ApfGenerator;-><init>()V
+HPLandroid/net/apf/ApfGenerator;->addInstruction(Landroid/net/apf/ApfGenerator$Instruction;)V
+HPLandroid/net/apf/ApfGenerator;->addJump(Ljava/lang/String;)Landroid/net/apf/ApfGenerator;
+HPLandroid/net/apf/ApfGenerator;->addJumpIfBytesNotEqual(Landroid/net/apf/ApfGenerator$Register;[BLjava/lang/String;)Landroid/net/apf/ApfGenerator;
+HPLandroid/net/apf/ApfGenerator;->addJumpIfR0Equals(ILjava/lang/String;)Landroid/net/apf/ApfGenerator;
+HPLandroid/net/apf/ApfGenerator;->addJumpIfR0GreaterThan(ILjava/lang/String;)Landroid/net/apf/ApfGenerator;
+HPLandroid/net/apf/ApfGenerator;->addJumpIfR0LessThan(ILjava/lang/String;)Landroid/net/apf/ApfGenerator;
+HPLandroid/net/apf/ApfGenerator;->addJumpIfR0NotEquals(ILjava/lang/String;)Landroid/net/apf/ApfGenerator;
+HPLandroid/net/apf/ApfGenerator;->addLoad16(Landroid/net/apf/ApfGenerator$Register;I)Landroid/net/apf/ApfGenerator;
+HPLandroid/net/apf/ApfGenerator;->addLoad32(Landroid/net/apf/ApfGenerator$Register;I)Landroid/net/apf/ApfGenerator;
+HPLandroid/net/apf/ApfGenerator;->addLoad8(Landroid/net/apf/ApfGenerator$Register;I)Landroid/net/apf/ApfGenerator;
+HPLandroid/net/apf/ApfGenerator;->addLoadFromMemory(Landroid/net/apf/ApfGenerator$Register;I)Landroid/net/apf/ApfGenerator;
+HPLandroid/net/apf/ApfGenerator;->addLoadImmediate(Landroid/net/apf/ApfGenerator$Register;I)Landroid/net/apf/ApfGenerator;
+HPLandroid/net/apf/ApfGenerator;->defineLabel(Ljava/lang/String;)Landroid/net/apf/ApfGenerator;
+HPLandroid/net/apf/ApfGenerator;->generate()[B
+HPLandroid/net/apf/ApfGenerator;->updateInstructionOffsets()I
+HPLandroid/net/dhcp/DhcpAckPacket;->toString()Ljava/lang/String;
+HPLandroid/net/dhcp/DhcpPacket;->checksum(Ljava/nio/ByteBuffer;III)I
+HPLandroid/net/dhcp/DhcpPacket;->decodeFullPacket(Ljava/nio/ByteBuffer;I)Landroid/net/dhcp/DhcpPacket;
+HPLandroid/net/dhcp/DhcpPacket;->fillInPacket(ILjava/net/Inet4Address;Ljava/net/Inet4Address;SSLjava/nio/ByteBuffer;BZ)V
+HPLandroid/net/dhcp/DhcpPacket;->intAbs(S)I
+HPLandroid/net/dhcp/DhcpPacket;->macToString([B)Ljava/lang/String;
+HPLandroid/net/dhcp/DhcpPacket;->readIpAddress(Ljava/nio/ByteBuffer;)Ljava/net/Inet4Address;
+HPLandroid/net/ip/-$Lambda$EIaFPv5OO8Upo9X60vMtrcUNUEQ;->$m$0()V
+HPLandroid/net/ip/-$Lambda$EIaFPv5OO8Upo9X60vMtrcUNUEQ;-><init>(BLjava/lang/Object;Ljava/lang/Object;)V
+HPLandroid/net/ip/-$Lambda$EIaFPv5OO8Upo9X60vMtrcUNUEQ;->run()V
+HPLandroid/net/ip/ConnectivityPacketTracker$PacketListener;->addLogEntry(Ljava/lang/String;)V
+HPLandroid/net/ip/ConnectivityPacketTracker$PacketListener;->handlePacket([BI)V
+HPLandroid/net/ip/ConnectivityPacketTracker$PacketListener;->lambda$-android_net_ip_ConnectivityPacketTracker$PacketListener_4824(Ljava/lang/String;)V
+HPLandroid/net/ip/ConnectivityPacketTracker;->-get0(Landroid/net/ip/ConnectivityPacketTracker;)Landroid/os/Handler;
+HPLandroid/net/ip/ConnectivityPacketTracker;->-get1(Landroid/net/ip/ConnectivityPacketTracker;)Landroid/util/LocalLog;
+HPLandroid/net/ip/IpManager$LoggingCallbackWrapper;->log(Ljava/lang/String;)V
+HPLandroid/net/ip/IpManager$RunningState;->processMessage(Landroid/os/Message;)Z
+HPLandroid/net/ip/IpManager;->addAllReachableDnsServers(Landroid/net/LinkProperties;Ljava/lang/Iterable;)V
+HPLandroid/net/ip/IpManager;->assembleLinkProperties()Landroid/net/LinkProperties;
+HPLandroid/net/ip/IpManager;->getLogRecString(Landroid/os/Message;)Ljava/lang/String;
+HPLandroid/net/ip/IpManager;->getWhatToString(I)Ljava/lang/String;
+HPLandroid/net/ip/IpReachabilityMonitor$Callback;->notifyLost(Ljava/net/InetAddress;Ljava/lang/String;)V
+HPLandroid/net/ip/IpReachabilityMonitor$NetlinkSocketObserver;->evaluateRtNetlinkNeighborMessage(Landroid/net/netlink/RtNetlinkNeighborMessage;J)V
+HPLandroid/net/ip/IpReachabilityMonitor$NetlinkSocketObserver;->parseNetlinkMessageBuffer(Ljava/nio/ByteBuffer;J)V
+HPLandroid/net/ip/IpReachabilityMonitor$NetlinkSocketObserver;->recvKernelReply()Ljava/nio/ByteBuffer;
+HPLandroid/net/ip/IpReachabilityMonitor$NetlinkSocketObserver;->run()V
+HPLandroid/net/ip/IpReachabilityMonitor;->-get0(Landroid/net/ip/IpReachabilityMonitor;)I
+HPLandroid/net/ip/IpReachabilityMonitor;->-get1(Landroid/net/ip/IpReachabilityMonitor;)Ljava/util/Map;
+HPLandroid/net/ip/IpReachabilityMonitor;->-get2(Landroid/net/ip/IpReachabilityMonitor;)Ljava/lang/Object;
+HPLandroid/net/ip/IpReachabilityMonitor;->-get3(Landroid/net/ip/IpReachabilityMonitor;)Z
+HPLandroid/net/ip/IpReachabilityMonitor;->-wrap0(Landroid/net/ip/IpReachabilityMonitor;Ljava/net/InetAddress;)Z
+HPLandroid/net/ip/IpReachabilityMonitor;->isOnLink(Ljava/util/List;Ljava/net/InetAddress;)Z
+HPLandroid/net/ip/IpReachabilityMonitor;->isWatching(Ljava/net/InetAddress;)Z
+HPLandroid/net/ip/IpReachabilityMonitor;->updateLinkProperties(Landroid/net/LinkProperties;)V
+HPLandroid/net/metrics/INetdEventListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/net/metrics/INetdEventListener;->onConnectEvent(IIILjava/lang/String;II)V
+HPLandroid/net/metrics/INetdEventListener;->onDnsEvent(IIIILjava/lang/String;[Ljava/lang/String;II)V
+HPLandroid/net/metrics/INetdEventListener;->onWakeupEvent(Ljava/lang/String;IIJ)V
+HPLandroid/net/netlink/NetlinkConstants;->alignedLengthOf(I)I
+HPLandroid/net/netlink/NetlinkConstants;->alignedLengthOf(S)I
+HPLandroid/net/netlink/NetlinkConstants;->hexify([B)Ljava/lang/String;
+HPLandroid/net/netlink/NetlinkConstants;->stringForNlMsgType(S)Ljava/lang/String;
+HPLandroid/net/netlink/NetlinkMessage;-><init>(Landroid/net/netlink/StructNlMsgHdr;)V
+HPLandroid/net/netlink/NetlinkMessage;->getHeader()Landroid/net/netlink/StructNlMsgHdr;
+HPLandroid/net/netlink/NetlinkMessage;->parse(Ljava/nio/ByteBuffer;)Landroid/net/netlink/NetlinkMessage;
+HPLandroid/net/netlink/NetlinkSocket;->checkTimeout(J)V
+HPLandroid/net/netlink/NetlinkSocket;->recvMessage(IJ)Ljava/nio/ByteBuffer;
+HPLandroid/net/netlink/NetlinkSocket;->recvMessage(J)Ljava/nio/ByteBuffer;
+HPLandroid/net/netlink/RtNetlinkNeighborMessage;-><init>(Landroid/net/netlink/StructNlMsgHdr;)V
+HPLandroid/net/netlink/RtNetlinkNeighborMessage;->findNextAttrOfType(SLjava/nio/ByteBuffer;)Landroid/net/netlink/StructNlAttr;
+HPLandroid/net/netlink/RtNetlinkNeighborMessage;->getDestination()Ljava/net/InetAddress;
+HPLandroid/net/netlink/RtNetlinkNeighborMessage;->getLinkLayerAddress()[B
+HPLandroid/net/netlink/RtNetlinkNeighborMessage;->getNdHeader()Landroid/net/netlink/StructNdMsg;
+HPLandroid/net/netlink/RtNetlinkNeighborMessage;->parse(Landroid/net/netlink/StructNlMsgHdr;Ljava/nio/ByteBuffer;)Landroid/net/netlink/RtNetlinkNeighborMessage;
+HPLandroid/net/netlink/StructNdMsg;-><init>()V
+HPLandroid/net/netlink/StructNdMsg;->hasAvailableSpace(Ljava/nio/ByteBuffer;)Z
+HPLandroid/net/netlink/StructNdMsg;->parse(Ljava/nio/ByteBuffer;)Landroid/net/netlink/StructNdMsg;
+HPLandroid/net/netlink/StructNdMsg;->stringForNudState(S)Ljava/lang/String;
+HPLandroid/net/netlink/StructNdaCacheInfo;-><init>()V
+HPLandroid/net/netlink/StructNdaCacheInfo;->hasAvailableSpace(Ljava/nio/ByteBuffer;)Z
+HPLandroid/net/netlink/StructNdaCacheInfo;->parse(Ljava/nio/ByteBuffer;)Landroid/net/netlink/StructNdaCacheInfo;
+HPLandroid/net/netlink/StructNlAttr;-><init>()V
+HPLandroid/net/netlink/StructNlAttr;->getAlignedLength()I
+HPLandroid/net/netlink/StructNlAttr;->getValueAsByteBuffer()Ljava/nio/ByteBuffer;
+HPLandroid/net/netlink/StructNlAttr;->getValueAsInetAddress()Ljava/net/InetAddress;
+HPLandroid/net/netlink/StructNlAttr;->getValueAsInt(I)I
+HPLandroid/net/netlink/StructNlAttr;->parse(Ljava/nio/ByteBuffer;)Landroid/net/netlink/StructNlAttr;
+HPLandroid/net/netlink/StructNlAttr;->peek(Ljava/nio/ByteBuffer;)Landroid/net/netlink/StructNlAttr;
+HPLandroid/net/netlink/StructNlMsgHdr;-><init>()V
+HPLandroid/net/netlink/StructNlMsgHdr;->hasAvailableSpace(Ljava/nio/ByteBuffer;)Z
+HPLandroid/net/netlink/StructNlMsgHdr;->parse(Ljava/nio/ByteBuffer;)Landroid/net/netlink/StructNlMsgHdr;
+HPLandroid/net/util/BlockingSocketReader;->createSocket()Ljava/io/FileDescriptor;
+HPLandroid/net/util/BlockingSocketReader;->isRunning()Z
+HPLandroid/net/util/BlockingSocketReader;->mainLoop()V
+HPLandroid/net/util/ConnectivityPacketSummary;-><init>([B[BI)V
+HPLandroid/net/util/ConnectivityPacketSummary;->getIPv4AddressString(Ljava/nio/ByteBuffer;)Ljava/lang/String;
+HPLandroid/net/util/ConnectivityPacketSummary;->getIPv6AddressString(Ljava/nio/ByteBuffer;)Ljava/lang/String;
+HPLandroid/net/util/ConnectivityPacketSummary;->getIpAddressString(Ljava/nio/ByteBuffer;I)Ljava/lang/String;
+HPLandroid/net/util/ConnectivityPacketSummary;->getMacAddressString(Ljava/nio/ByteBuffer;)Ljava/lang/String;
+HPLandroid/net/util/ConnectivityPacketSummary;->parseARP(Ljava/util/StringJoiner;)V
+HPLandroid/net/util/ConnectivityPacketSummary;->parseEther(Ljava/util/StringJoiner;)V
+HPLandroid/net/util/ConnectivityPacketSummary;->parseICMPv6(Ljava/util/StringJoiner;)V
+HPLandroid/net/util/ConnectivityPacketSummary;->parseICMPv6NeighborDiscoveryOptions(Ljava/util/StringJoiner;)V
+HPLandroid/net/util/ConnectivityPacketSummary;->parseICMPv6NeighborMessage(Ljava/util/StringJoiner;)V
+HPLandroid/net/util/ConnectivityPacketSummary;->parseIPv4(Ljava/util/StringJoiner;)V
+HPLandroid/net/util/ConnectivityPacketSummary;->parseIPv6(Ljava/util/StringJoiner;)V
+HPLandroid/net/util/ConnectivityPacketSummary;->parseUDP(Ljava/util/StringJoiner;)V
+HPLandroid/net/util/ConnectivityPacketSummary;->summarize([B[BI)Ljava/lang/String;
+HPLandroid/net/util/ConnectivityPacketSummary;->toString()Ljava/lang/String;
+HPLandroid/net/util/NetworkConstants;->asUint(B)I
+HPLandroid/net/util/NetworkConstants;->asUint(S)I
+HPLandroid/net/util/SharedLog;->isRootLogInstance()Z
+HPLandroid/net/util/SharedLog;->log(Ljava/lang/String;)V
+HPLandroid/net/util/SharedLog;->logLine(Landroid/net/util/SharedLog$Category;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/net/util/SharedLog;->record(Landroid/net/util/SharedLog$Category;Ljava/lang/String;)Ljava/lang/String;
+HPLandroid/net/wifi/IClientInterface$Stub$Proxy;->signalPoll()[I
+HPLandroid/net/wifi/IClientInterface;->disableSupplicant()Z
+HPLandroid/net/wifi/IClientInterface;->enableSupplicant()Z
+HPLandroid/net/wifi/IClientInterface;->getInterfaceName()Ljava/lang/String;
+HPLandroid/net/wifi/IClientInterface;->getMacAddress()[B
+HPLandroid/net/wifi/IClientInterface;->getPacketCounters()[I
+HPLandroid/net/wifi/IClientInterface;->getWifiScannerImpl()Landroid/net/wifi/IWifiScannerImpl;
+HPLandroid/net/wifi/IClientInterface;->requestANQP([BLandroid/net/wifi/IANQPDoneCallback;)Z
+HPLandroid/net/wifi/IClientInterface;->signalPoll()[I
+HPLandroid/net/wifi/IPnoScanEvent;->OnPnoNetworkFound()V
+HPLandroid/net/wifi/IPnoScanEvent;->OnPnoScanFailed()V
+HPLandroid/net/wifi/IPnoScanEvent;->OnPnoScanOverOffloadFailed(I)V
+HPLandroid/net/wifi/IPnoScanEvent;->OnPnoScanOverOffloadStarted()V
+HPLandroid/net/wifi/IScanEvent$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLandroid/net/wifi/IScanEvent;->OnScanFailed()V
+HPLandroid/net/wifi/IScanEvent;->OnScanResultReady()V
+HPLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->getScanResults()[Lcom/android/server/wifi/wificond/NativeScanResult;
+HPLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->scan(Lcom/android/server/wifi/wificond/SingleScanSettings;)Z
+HPLandroid/net/wifi/IWifiScannerImpl;->abortScan()V
+HPLandroid/net/wifi/IWifiScannerImpl;->getAvailable2gChannels()[I
+HPLandroid/net/wifi/IWifiScannerImpl;->getAvailable5gNonDFSChannels()[I
+HPLandroid/net/wifi/IWifiScannerImpl;->getAvailableDFSChannels()[I
+HPLandroid/net/wifi/IWifiScannerImpl;->getPnoScanResults()[Lcom/android/server/wifi/wificond/NativeScanResult;
+HPLandroid/net/wifi/IWifiScannerImpl;->getScanResults()[Lcom/android/server/wifi/wificond/NativeScanResult;
+HPLandroid/net/wifi/IWifiScannerImpl;->scan(Lcom/android/server/wifi/wificond/SingleScanSettings;)Z
+HPLandroid/net/wifi/IWifiScannerImpl;->startPnoScan(Lcom/android/server/wifi/wificond/PnoSettings;)Z
+HPLandroid/net/wifi/IWifiScannerImpl;->stopPnoScan()Z
+HPLandroid/net/wifi/IWifiScannerImpl;->subscribePnoScanEvents(Landroid/net/wifi/IPnoScanEvent;)V
+HPLandroid/net/wifi/IWifiScannerImpl;->subscribeScanEvents(Landroid/net/wifi/IScanEvent;)V
+HPLandroid/net/wifi/IWifiScannerImpl;->unsubscribePnoScanEvents()V
+HPLandroid/net/wifi/IWifiScannerImpl;->unsubscribeScanEvents()V
+HPLandroid/net/wifi/IWificond;->GetApInterfaces()Ljava/util/List;
+HPLandroid/net/wifi/IWificond;->GetClientInterfaces()Ljava/util/List;
+HPLandroid/net/wifi/IWificond;->RegisterCallback(Landroid/net/wifi/IInterfaceEventCallback;)V
+HPLandroid/net/wifi/IWificond;->UnregisterCallback(Landroid/net/wifi/IInterfaceEventCallback;)V
+HPLandroid/net/wifi/IWificond;->createApInterface()Landroid/net/wifi/IApInterface;
+HPLandroid/net/wifi/IWificond;->createClientInterface()Landroid/net/wifi/IClientInterface;
+HPLandroid/net/wifi/IWificond;->tearDownInterfaces()V
+HPLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$1;->$m$1(Landroid/net/INetworkManagementEventObserver;)V
+HPLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$1;->$m$2(Landroid/net/INetworkManagementEventObserver;)V
+HPLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$1;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
+HPLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$4;->$m$0(Landroid/net/INetworkManagementEventObserver;)V
+HPLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$4;-><init>(ZIJ)V
+HPLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$4;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
+HPLcom/android/server/AlarmManagerService$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/AlarmManagerService$2;->getNextAlarmClock(I)Landroid/app/AlarmManager$AlarmClockInfo;
+HPLcom/android/server/AlarmManagerService$2;->remove(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
+HPLcom/android/server/AlarmManagerService$2;->set(Ljava/lang/String;IJJJILandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;Landroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;)V
+HPLcom/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
+HPLcom/android/server/AlarmManagerService$Alarm;->makeTag(Landroid/app/PendingIntent;Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/AlarmManagerService$Alarm;->matches(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)Z
+HPLcom/android/server/AlarmManagerService$Alarm;->matches(Ljava/lang/String;)Z
+HPLcom/android/server/AlarmManagerService$AlarmHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/AlarmManagerService$AlarmThread;->run()V
+HPLcom/android/server/AlarmManagerService$Batch;-><init>(Lcom/android/server/AlarmManagerService;Lcom/android/server/AlarmManagerService$Alarm;)V
+HPLcom/android/server/AlarmManagerService$Batch;->add(Lcom/android/server/AlarmManagerService$Alarm;)Z
+HPLcom/android/server/AlarmManagerService$Batch;->canHold(JJ)Z
+HPLcom/android/server/AlarmManagerService$Batch;->get(I)Lcom/android/server/AlarmManagerService$Alarm;
+HPLcom/android/server/AlarmManagerService$Batch;->hasWakeups()Z
+HPLcom/android/server/AlarmManagerService$Batch;->remove(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)Z
+HPLcom/android/server/AlarmManagerService$Batch;->remove(Ljava/lang/String;)Z
+HPLcom/android/server/AlarmManagerService$Batch;->size()I
+HPLcom/android/server/AlarmManagerService$BatchTimeOrder;->compare(Lcom/android/server/AlarmManagerService$Batch;Lcom/android/server/AlarmManagerService$Batch;)I
+HPLcom/android/server/AlarmManagerService$BatchTimeOrder;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/AlarmManagerService$ClockReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/AlarmManagerService$ClockReceiver;->scheduleTimeTickEvent()V
+HPLcom/android/server/AlarmManagerService$DeliveryTracker;->alarmComplete(Landroid/os/IBinder;)V
+HPLcom/android/server/AlarmManagerService$DeliveryTracker;->deliverLocked(Lcom/android/server/AlarmManagerService$Alarm;JZ)V
+HPLcom/android/server/AlarmManagerService$DeliveryTracker;->onSendFinished(Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/server/AlarmManagerService$DeliveryTracker;->removeLocked(Landroid/app/PendingIntent;Landroid/content/Intent;)Lcom/android/server/AlarmManagerService$InFlight;
+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
+HPLcom/android/server/AlarmManagerService$InFlight;-><init>(Lcom/android/server/AlarmManagerService;Landroid/app/PendingIntent;Landroid/app/IAlarmListener;Landroid/os/WorkSource;ILjava/lang/String;ILjava/lang/String;J)V
+HPLcom/android/server/AlarmManagerService$IncreasingTimeOrder;->compare(Lcom/android/server/AlarmManagerService$Alarm;Lcom/android/server/AlarmManagerService$Alarm;)I
+HPLcom/android/server/AlarmManagerService$IncreasingTimeOrder;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/AlarmManagerService$UninstallReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/AlarmManagerService;->-get0(Lcom/android/server/AlarmManagerService;)Landroid/content/Intent;
+HPLcom/android/server/AlarmManagerService;->-get3(Lcom/android/server/AlarmManagerService;)I
+HPLcom/android/server/AlarmManagerService;->-get4(Lcom/android/server/AlarmManagerService;)I
+HPLcom/android/server/AlarmManagerService;->-set0(Lcom/android/server/AlarmManagerService;J)J
+HPLcom/android/server/AlarmManagerService;->-set4(Lcom/android/server/AlarmManagerService;I)I
+HPLcom/android/server/AlarmManagerService;->-set5(Lcom/android/server/AlarmManagerService;I)I
+HPLcom/android/server/AlarmManagerService;->-wrap0(Lcom/android/server/AlarmManagerService;Landroid/app/PendingIntent;)Lcom/android/server/AlarmManagerService$BroadcastStats;
+HPLcom/android/server/AlarmManagerService;->-wrap4(Lcom/android/server/AlarmManagerService;J)I
+HPLcom/android/server/AlarmManagerService;->-wrap5(Lcom/android/server/AlarmManagerService;Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
+HPLcom/android/server/AlarmManagerService;->-wrap7(Lcom/android/server/AlarmManagerService;)V
+HPLcom/android/server/AlarmManagerService;->addBatchLocked(Ljava/util/ArrayList;Lcom/android/server/AlarmManagerService$Batch;)Z
+HPLcom/android/server/AlarmManagerService;->attemptCoalesceLocked(JJ)I
+HPLcom/android/server/AlarmManagerService;->calculateDeliveryPriorities(Ljava/util/ArrayList;)V
+HPLcom/android/server/AlarmManagerService;->convertToElapsed(JI)J
+HPLcom/android/server/AlarmManagerService;->deliverAlarmsLocked(Ljava/util/ArrayList;J)V
+HPLcom/android/server/AlarmManagerService;->findFirstWakeupBatchLocked()Lcom/android/server/AlarmManagerService$Batch;
+HPLcom/android/server/AlarmManagerService;->getStatsLocked(ILjava/lang/String;)Lcom/android/server/AlarmManagerService$BroadcastStats;
+HPLcom/android/server/AlarmManagerService;->getStatsLocked(Landroid/app/PendingIntent;)Lcom/android/server/AlarmManagerService$BroadcastStats;
+HPLcom/android/server/AlarmManagerService;->maxTriggerTime(JJJ)J
+HPLcom/android/server/AlarmManagerService;->reAddAlarmLocked(Lcom/android/server/AlarmManagerService$Alarm;JZ)V
+HPLcom/android/server/AlarmManagerService;->rebatchAllAlarmsLocked(Z)V
+HPLcom/android/server/AlarmManagerService;->removeLocked(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
+HPLcom/android/server/AlarmManagerService;->removeLocked(Ljava/lang/String;)V
+HPLcom/android/server/AlarmManagerService;->rescheduleKernelAlarmsLocked()V
+HPLcom/android/server/AlarmManagerService;->setImpl(IJJJLandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;ILandroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;ILjava/lang/String;)V
+HPLcom/android/server/AlarmManagerService;->setImplLocked(IJJJJJLandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;IZLandroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;ILjava/lang/String;)V
+HPLcom/android/server/AlarmManagerService;->setImplLocked(Lcom/android/server/AlarmManagerService$Alarm;ZZ)V
+HPLcom/android/server/AlarmManagerService;->setLocked(IJ)V
+HPLcom/android/server/AlarmManagerService;->setWakelockWorkSource(Landroid/app/PendingIntent;Landroid/os/WorkSource;ILjava/lang/String;IZ)V
+HPLcom/android/server/AlarmManagerService;->triggerAlarmsLocked(Ljava/util/ArrayList;JJ)Z
+HPLcom/android/server/AlarmManagerService;->updateNextAlarmClockLocked()V
+HPLcom/android/server/AnyMotionDetector$DeviceIdleCallback;->onAnyMotionResult(I)V
+HPLcom/android/server/AppOpsService$3;->getMountMode(ILjava/lang/String;)I
+HPLcom/android/server/AppOpsService$3;->hasExternalStorage(ILjava/lang/String;)Z
+HPLcom/android/server/AppOpsService;->checkAudioOperation(IIILjava/lang/String;)I
+HPLcom/android/server/AppOpsService;->checkOperation(IILjava/lang/String;)I
+HPLcom/android/server/AppOpsService;->checkPackage(ILjava/lang/String;)I
+HPLcom/android/server/AppOpsService;->checkRestrictionLocked(IIILjava/lang/String;)I
+HPLcom/android/server/AppOpsService;->collectOps(Lcom/android/server/AppOpsService$Ops;[I)Ljava/util/ArrayList;
+HPLcom/android/server/AppOpsService;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;)V
+HPLcom/android/server/AppOpsService;->finishOperationLocked(Lcom/android/server/AppOpsService$Op;)V
+HPLcom/android/server/AppOpsService;->getOpLocked(IILjava/lang/String;Z)Lcom/android/server/AppOpsService$Op;
+HPLcom/android/server/AppOpsService;->getOpLocked(Lcom/android/server/AppOpsService$Ops;IZ)Lcom/android/server/AppOpsService$Op;
+HPLcom/android/server/AppOpsService;->getOpsRawLocked(ILjava/lang/String;Z)Lcom/android/server/AppOpsService$Ops;
+HPLcom/android/server/AppOpsService;->getPackagesForOps([I)Ljava/util/List;
+HPLcom/android/server/AppOpsService;->isOpRestrictedLocked(IILjava/lang/String;)Z
+HPLcom/android/server/AppOpsService;->isOperationActive(IILjava/lang/String;)Z
+HPLcom/android/server/AppOpsService;->isPackageSuspendedForUser(Ljava/lang/String;I)Z
+HPLcom/android/server/AppOpsService;->noteOperation(IILjava/lang/String;)I
+HPLcom/android/server/AppOpsService;->noteOperationUnchecked(IILjava/lang/String;ILjava/lang/String;)I
+HPLcom/android/server/AppOpsService;->noteProxyOperation(ILjava/lang/String;ILjava/lang/String;)I
+HPLcom/android/server/AppOpsService;->notifyWatchersOfChange(I)V
+HPLcom/android/server/AppOpsService;->resolvePackageName(ILjava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/AppOpsService;->scheduleWriteLocked()V
+HPLcom/android/server/AppOpsService;->setAudioRestriction(IIII[Ljava/lang/String;)V
+HPLcom/android/server/AppOpsService;->setUidMode(III)V
+HPLcom/android/server/AppOpsService;->setUserRestrictionNoCheck(IZLandroid/os/IBinder;I[Ljava/lang/String;)V
+HPLcom/android/server/AppOpsService;->setUserRestrictions(Landroid/os/Bundle;Landroid/os/IBinder;I)V
+HPLcom/android/server/AppOpsService;->startOperation(Landroid/os/IBinder;IILjava/lang/String;)I
+HPLcom/android/server/AppOpsService;->stopWatchingMode(Lcom/android/internal/app/IAppOpsCallback;)V
+HPLcom/android/server/AppOpsService;->systemReady()V
+HPLcom/android/server/AppOpsService;->verifyIncomingOp(I)V
+HPLcom/android/server/AppOpsService;->verifyIncomingUid(I)V
+HPLcom/android/server/AppOpsService;->writeState()V
+HPLcom/android/server/AttributeCache$Package;->-get0(Lcom/android/server/AttributeCache$Package;)Landroid/util/SparseArray;
+HPLcom/android/server/AttributeCache;->get(Ljava/lang/String;I[II)Lcom/android/server/AttributeCache$Entry;
+HPLcom/android/server/AttributeCache;->instance()Lcom/android/server/AttributeCache;
+HPLcom/android/server/BatteryService$9;-><init>(Lcom/android/server/BatteryService;Landroid/content/Intent;)V
+HPLcom/android/server/BatteryService$9;->run()V
+HPLcom/android/server/BatteryService$BatteryListener;->batteryPropertiesChanged(Landroid/os/BatteryProperties;)V
+HPLcom/android/server/BatteryService$Led;->updateLightsLocked()V
+HPLcom/android/server/BatteryService$LocalService;->getBatteryLevel()I
+HPLcom/android/server/BatteryService$LocalService;->getBatteryLevelLow()Z
+HPLcom/android/server/BatteryService$LocalService;->getPlugType()I
+HPLcom/android/server/BatteryService$LocalService;->isPowered(I)Z
+HPLcom/android/server/BatteryService;->-get3(Lcom/android/server/BatteryService;)Landroid/os/BatteryProperties;
+HPLcom/android/server/BatteryService;->-get6(Lcom/android/server/BatteryService;)Ljava/lang/Object;
+HPLcom/android/server/BatteryService;->-wrap0(Lcom/android/server/BatteryService;I)Z
+HPLcom/android/server/BatteryService;->-wrap4(Lcom/android/server/BatteryService;Landroid/os/BatteryProperties;)V
+HPLcom/android/server/BatteryService;->getIconLocked(I)I
+HPLcom/android/server/BatteryService;->isPoweredLocked(I)Z
+HPLcom/android/server/BatteryService;->processValuesLocked(Z)V
+HPLcom/android/server/BatteryService;->sendIntentLocked()V
+HPLcom/android/server/BatteryService;->shouldSendBatteryLowLocked()Z
+HPLcom/android/server/BatteryService;->update(Landroid/os/BatteryProperties;)V
+HPLcom/android/server/BluetoothManagerService$BluetoothHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/BluetoothManagerService;->isAirplaneModeOn()Z
+HPLcom/android/server/BluetoothManagerService;->isBleScanAlwaysAvailable()Z
+HPLcom/android/server/ConnectivityService$1;->interfaceClassDataActivityChanged(Ljava/lang/String;ZJ)V
+HPLcom/android/server/ConnectivityService$InternalHandler;->handleMessage(Landroid/os/Message;)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;
+HPLcom/android/server/ConnectivityService$LegacyTypeTracker;->isTypeSupported(I)Z
+HPLcom/android/server/ConnectivityService$NetworkRequestInfo;-><init>(Lcom/android/server/ConnectivityService;Landroid/os/Messenger;Landroid/net/NetworkRequest;Landroid/os/IBinder;)V
+HPLcom/android/server/ConnectivityService$NetworkRequestInfo;->toString()Ljava/lang/String;
+HPLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;->maybeHandleAsyncChannelMessage(Landroid/os/Message;)Z
+HPLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;->maybeHandleNetworkAgentInfoMessage(Landroid/os/Message;)Z
+HPLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;->maybeHandleNetworkAgentMessage(Landroid/os/Message;)V
+HPLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;->maybeHandleNetworkMonitorMessage(Landroid/os/Message;)Z
+HPLcom/android/server/ConnectivityService;->-get4(Lcom/android/server/ConnectivityService;)Ljava/util/HashMap;
+HPLcom/android/server/ConnectivityService;->-getcom-android-server-ConnectivityService$UnneededForSwitchesValues()[I
+HPLcom/android/server/ConnectivityService;->-wrap32(Lcom/android/server/ConnectivityService;IZJ)V
+HPLcom/android/server/ConnectivityService;->-wrap39(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;I)V
+HPLcom/android/server/ConnectivityService;->callCallbackForRequest(Lcom/android/server/ConnectivityService$NetworkRequestInfo;Lcom/android/server/connectivity/NetworkAgentInfo;II)V
+HPLcom/android/server/ConnectivityService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/ConnectivityService;->enforceAccessPermission()V
+HPLcom/android/server/ConnectivityService;->enforceConnectivityInternalPermission()V
+HPLcom/android/server/ConnectivityService;->filterNetworkStateForUid(Landroid/net/NetworkState;IZ)V
+HPLcom/android/server/ConnectivityService;->getActiveNetwork()Landroid/net/Network;
+HPLcom/android/server/ConnectivityService;->getActiveNetworkForUid(IZ)Landroid/net/Network;
+HPLcom/android/server/ConnectivityService;->getActiveNetworkForUidInternal(IZ)Landroid/net/Network;
+HPLcom/android/server/ConnectivityService;->getActiveNetworkInfo()Landroid/net/NetworkInfo;
+HPLcom/android/server/ConnectivityService;->getActiveNetworkInfoForUid(IZ)Landroid/net/NetworkInfo;
+HPLcom/android/server/ConnectivityService;->getAllNetworks()[Landroid/net/Network;
+HPLcom/android/server/ConnectivityService;->getAllVpnInfo()[Lcom/android/internal/net/VpnInfo;
+HPLcom/android/server/ConnectivityService;->getDefaultNetwork()Lcom/android/server/connectivity/NetworkAgentInfo;
+HPLcom/android/server/ConnectivityService;->getFilteredNetworkState(IIZ)Landroid/net/NetworkState;
+HPLcom/android/server/ConnectivityService;->getNetworkAgentInfoForNetwork(Landroid/net/Network;)Lcom/android/server/connectivity/NetworkAgentInfo;
+HPLcom/android/server/ConnectivityService;->getNetworkCapabilities(Landroid/net/Network;)Landroid/net/NetworkCapabilities;
+HPLcom/android/server/ConnectivityService;->getNetworkCapabilitiesInternal(Lcom/android/server/connectivity/NetworkAgentInfo;)Landroid/net/NetworkCapabilities;
+HPLcom/android/server/ConnectivityService;->getNetworkInfo(I)Landroid/net/NetworkInfo;
+HPLcom/android/server/ConnectivityService;->getNetworkInfoForUid(Landroid/net/Network;IZ)Landroid/net/NetworkInfo;
+HPLcom/android/server/ConnectivityService;->getProxyForNetwork(Landroid/net/Network;)Landroid/net/ProxyInfo;
+HPLcom/android/server/ConnectivityService;->getUnfilteredActiveNetworkState(I)Landroid/net/NetworkState;
+HPLcom/android/server/ConnectivityService;->getVpnUnderlyingNetworks(I)[Landroid/net/Network;
+HPLcom/android/server/ConnectivityService;->handleRegisterNetworkRequest(Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
+HPLcom/android/server/ConnectivityService;->handleRemoveNetworkRequest(Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
+HPLcom/android/server/ConnectivityService;->isActiveNetworkMetered()Z
+HPLcom/android/server/ConnectivityService;->isNetworkWithLinkPropertiesBlocked(Landroid/net/LinkProperties;IZ)Z
+HPLcom/android/server/ConnectivityService;->isSystem(I)Z
+HPLcom/android/server/ConnectivityService;->listenForNetwork(Landroid/net/NetworkCapabilities;Landroid/os/Messenger;Landroid/os/IBinder;)Landroid/net/NetworkRequest;
+HPLcom/android/server/ConnectivityService;->maybeLogBlockedNetworkInfo(Landroid/net/NetworkInfo;I)V
+HPLcom/android/server/ConnectivityService;->notifyNetworkCallbacks(Lcom/android/server/connectivity/NetworkAgentInfo;II)V
+HPLcom/android/server/ConnectivityService;->processListenRequests(Lcom/android/server/connectivity/NetworkAgentInfo;Z)V
+HPLcom/android/server/ConnectivityService;->putParcelable(Landroid/os/Bundle;Landroid/os/Parcelable;)V
+HPLcom/android/server/ConnectivityService;->rematchAllNetworksAndRequests(Lcom/android/server/connectivity/NetworkAgentInfo;I)V
+HPLcom/android/server/ConnectivityService;->rematchNetworkAndRequests(Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/ConnectivityService$ReapUnvalidatedNetworks;J)V
+HPLcom/android/server/ConnectivityService;->sendDataActivityBroadcast(IZJ)V
+HPLcom/android/server/ConnectivityService;->sendUpdatedScoreToFactories(Landroid/net/NetworkRequest;I)V
+HPLcom/android/server/ConnectivityService;->sendUpdatedScoreToFactories(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+HPLcom/android/server/ConnectivityService;->unneeded(Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/ConnectivityService$UnneededFor;)Z
+HPLcom/android/server/ConnectivityService;->updateLingerState(Lcom/android/server/connectivity/NetworkAgentInfo;J)V
+HPLcom/android/server/ConnectivityService;->updateNetworkScore(Lcom/android/server/connectivity/NetworkAgentInfo;I)V
+HPLcom/android/server/DeviceIdleController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/DeviceIdleController$BinderService;->isPowerSaveWhitelistExceptIdleApp(Ljava/lang/String;)Z
+HPLcom/android/server/DeviceIdleController$LocalService;->setAlarmsActive(Z)V
+HPLcom/android/server/DeviceIdleController$LocalService;->setJobsActive(Z)V
+HPLcom/android/server/DeviceIdleController$MyHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/DeviceIdleController;->-get7(Lcom/android/server/DeviceIdleController;)Landroid/os/RemoteCallbackList;
+HPLcom/android/server/DeviceIdleController;->exitMaintenanceEarlyIfNeededLocked()V
+HPLcom/android/server/DeviceIdleController;->isPowerSaveWhitelistExceptIdleAppInternal(Ljava/lang/String;)Z
+HPLcom/android/server/DeviceIdleController;->reportMaintenanceActivityIfNeededLocked()V
+HPLcom/android/server/DeviceIdleController;->setAlarmsActive(Z)V
+HPLcom/android/server/DeviceIdleController;->setJobsActive(Z)V
+HPLcom/android/server/DeviceIdleController;->updateChargingLocked(Z)V
+HPLcom/android/server/DropBoxManagerService$2;->add(Landroid/os/DropBoxManager$Entry;)V
+HPLcom/android/server/DropBoxManagerService$2;->getNextEntry(Ljava/lang/String;J)Landroid/os/DropBoxManager$Entry;
+HPLcom/android/server/DropBoxManagerService$2;->isTagEnabled(Ljava/lang/String;)Z
+HPLcom/android/server/DropBoxManagerService$3;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/DropBoxManagerService$EntryFile;-><init>(J)V
+HPLcom/android/server/DropBoxManagerService$EntryFile;-><init>(Ljava/io/File;I)V
+HPLcom/android/server/DropBoxManagerService$EntryFile;-><init>(Ljava/io/File;Ljava/io/File;Ljava/lang/String;JII)V
+HPLcom/android/server/DropBoxManagerService$EntryFile;->compareTo(Lcom/android/server/DropBoxManagerService$EntryFile;)I
+HPLcom/android/server/DropBoxManagerService$EntryFile;->compareTo(Ljava/lang/Object;)I
+HPLcom/android/server/DropBoxManagerService$EntryFile;->getExtension()Ljava/lang/String;
+HPLcom/android/server/DropBoxManagerService$EntryFile;->getFile(Ljava/io/File;)Ljava/io/File;
+HPLcom/android/server/DropBoxManagerService$EntryFile;->getFilename()Ljava/lang/String;
+HPLcom/android/server/DropBoxManagerService$EntryFile;->hasFile()Z
+HPLcom/android/server/DropBoxManagerService;->add(Landroid/os/DropBoxManager$Entry;)V
+HPLcom/android/server/DropBoxManagerService;->createEntry(Ljava/io/File;Ljava/lang/String;I)J
+HPLcom/android/server/DropBoxManagerService;->enrollEntry(Lcom/android/server/DropBoxManagerService$EntryFile;)V
+HPLcom/android/server/DropBoxManagerService;->getNextEntry(Ljava/lang/String;J)Landroid/os/DropBoxManager$Entry;
+HPLcom/android/server/DropBoxManagerService;->init()V
+HPLcom/android/server/DropBoxManagerService;->isTagEnabled(Ljava/lang/String;)Z
+HPLcom/android/server/DropBoxManagerService;->trimToFit()J
+HPLcom/android/server/EventLogTags;->writeNetstatsMobileSample(JJJJJJJJJJJJJ)V
+HPLcom/android/server/EventLogTags;->writeNetstatsWifiSample(JJJJJJJJJJJJJ)V
+HPLcom/android/server/EventLogTags;->writeNotificationCancelAll(IILjava/lang/String;IIIILjava/lang/String;)V
+HPLcom/android/server/GraphicsStatsService$ActiveBuffer;-><init>(Lcom/android/server/GraphicsStatsService;Landroid/view/IGraphicsStatsCallback;IILjava/lang/String;I)V
+HPLcom/android/server/GraphicsStatsService;->fetchActiveBuffersLocked(Landroid/view/IGraphicsStatsCallback;IILjava/lang/String;I)Lcom/android/server/GraphicsStatsService$ActiveBuffer;
+HPLcom/android/server/GraphicsStatsService;->normalizeDate(J)Ljava/util/Calendar;
+HPLcom/android/server/GraphicsStatsService;->requestBufferForProcess(Ljava/lang/String;Landroid/view/IGraphicsStatsCallback;)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/InputMethodManagerService$ClientState;->toString()Ljava/lang/String;
+HPLcom/android/server/InputMethodManagerService$MyPackageMonitor;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+HPLcom/android/server/InputMethodManagerService$StartInputHistory$Entry;->set(Lcom/android/server/InputMethodManagerService$StartInputInfo;)V
+HPLcom/android/server/InputMethodManagerService$StartInputHistory;->addEntry(Lcom/android/server/InputMethodManagerService$StartInputInfo;)V
+HPLcom/android/server/InputMethodManagerService$StartInputInfo;-><init>(Landroid/os/IBinder;Ljava/lang/String;IZLandroid/os/IBinder;Landroid/view/inputmethod/EditorInfo;II)V
+HPLcom/android/server/InputMethodManagerService;->attachNewInputLocked(IZ)Lcom/android/internal/view/InputBindResult;
+HPLcom/android/server/InputMethodManagerService;->buildInputMethodListLocked(Z)V
+HPLcom/android/server/InputMethodManagerService;->calledFromValidUser()Z
+HPLcom/android/server/InputMethodManagerService;->calledWithValidToken(Landroid/os/IBinder;)Z
+HPLcom/android/server/InputMethodManagerService;->executeOrSendMessage(Landroid/os/IInterface;Landroid/os/Message;)V
+HPLcom/android/server/InputMethodManagerService;->getCurrentInputMethodSubtypeLocked()Landroid/view/inputmethod/InputMethodSubtype;
+HPLcom/android/server/InputMethodManagerService;->getEnabledInputMethodSubtypeList(Ljava/lang/String;Z)Ljava/util/List;
+HPLcom/android/server/InputMethodManagerService;->handleMessage(Landroid/os/Message;)Z
+HPLcom/android/server/InputMethodManagerService;->hideCurrentInputLocked(ILandroid/os/ResultReceiver;)Z
+HPLcom/android/server/InputMethodManagerService;->hideSoftInput(Lcom/android/internal/view/IInputMethodClient;ILandroid/os/ResultReceiver;)Z
+HPLcom/android/server/InputMethodManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/server/InputMethodManagerService;->reportFullscreenMode(Landroid/os/IBinder;Z)V
+HPLcom/android/server/InputMethodManagerService;->setEnabledSessionInMainThread(Lcom/android/server/InputMethodManagerService$SessionState;)V
+HPLcom/android/server/InputMethodManagerService;->setImeWindowStatus(Landroid/os/IBinder;Landroid/os/IBinder;II)V
+HPLcom/android/server/InputMethodManagerService;->shouldOfferSwitchingToNextInputMethod(Landroid/os/IBinder;)Z
+HPLcom/android/server/InputMethodManagerService;->shouldShowImeSwitcherLocked(I)Z
+HPLcom/android/server/InputMethodManagerService;->startInput(ILcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;ILandroid/view/inputmethod/EditorInfo;I)Lcom/android/internal/view/InputBindResult;
+HPLcom/android/server/InputMethodManagerService;->startInputLocked(ILcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;ILandroid/view/inputmethod/EditorInfo;I)Lcom/android/internal/view/InputBindResult;
+HPLcom/android/server/InputMethodManagerService;->startInputOrWindowGainedFocus(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;I)Lcom/android/internal/view/InputBindResult;
+HPLcom/android/server/InputMethodManagerService;->startInputUncheckedLocked(Lcom/android/server/InputMethodManagerService$ClientState;Lcom/android/internal/view/IInputContext;ILandroid/view/inputmethod/EditorInfo;II)Lcom/android/internal/view/InputBindResult;
+HPLcom/android/server/InputMethodManagerService;->unbindCurrentClientLocked(I)V
+HPLcom/android/server/InputMethodManagerService;->updateStatusIcon(Landroid/os/IBinder;Ljava/lang/String;I)V
+HPLcom/android/server/InputMethodManagerService;->updateSystemUiLocked(Landroid/os/IBinder;II)V
+HPLcom/android/server/InputMethodManagerService;->windowGainedFocus(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;I)Lcom/android/internal/view/InputBindResult;
+HPLcom/android/server/IntentResolver$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/IntentResolver;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)Z
+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
+HPLcom/android/server/IntentResolver;->isFilterStopped(Landroid/content/IntentFilter;I)Z
+HPLcom/android/server/IntentResolver;->newResult(Landroid/content/IntentFilter;II)Ljava/lang/Object;
+HPLcom/android/server/IntentResolver;->queryIntentFromList(Landroid/content/Intent;Ljava/lang/String;ZLjava/util/ArrayList;I)Ljava/util/List;
+HPLcom/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
+HPLcom/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
+HPLcom/android/server/LocationManagerService$1;->onPackageDisappeared(Ljava/lang/String;I)V
+HPLcom/android/server/LocationManagerService$5$1;-><init>(Lcom/android/server/LocationManagerService$5;II)V
+HPLcom/android/server/LocationManagerService$5$1;->run()V
+HPLcom/android/server/LocationManagerService$5;->onUidImportance(II)V
+HPLcom/android/server/LocationManagerService$LocationWorkerHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/LocationManagerService$Receiver;->-wrap0(Lcom/android/server/LocationManagerService$Receiver;)V
+HPLcom/android/server/LocationManagerService$Receiver;-><init>(Lcom/android/server/LocationManagerService;Landroid/location/ILocationListener;Landroid/app/PendingIntent;IILjava/lang/String;Landroid/os/WorkSource;Z)V
+HPLcom/android/server/LocationManagerService$Receiver;->callLocationChangedLocked(Landroid/location/Location;)Z
+HPLcom/android/server/LocationManagerService$Receiver;->decrementPendingBroadcastsLocked()V
+HPLcom/android/server/LocationManagerService$Receiver;->incrementPendingBroadcastsLocked()V
+HPLcom/android/server/LocationManagerService$Receiver;->updateMonitoring(Z)V
+HPLcom/android/server/LocationManagerService$UpdateRecord;-><init>(Lcom/android/server/LocationManagerService;Ljava/lang/String;Landroid/location/LocationRequest;Lcom/android/server/LocationManagerService$Receiver;)V
+HPLcom/android/server/LocationManagerService;->-get4(Lcom/android/server/LocationManagerService;)Lcom/android/server/LocationManagerService$LocationWorkerHandler;
+HPLcom/android/server/LocationManagerService;->-wrap6(Lcom/android/server/LocationManagerService;II)V
+HPLcom/android/server/LocationManagerService;->applyRequirementsLocked(Ljava/lang/String;)V
+HPLcom/android/server/LocationManagerService;->checkCallerIsProvider()V
+HPLcom/android/server/LocationManagerService;->checkLocationAccess(IILjava/lang/String;I)Z
+HPLcom/android/server/LocationManagerService;->checkPackageName(Ljava/lang/String;)V
+HPLcom/android/server/LocationManagerService;->checkResolutionLevelIsSufficientForProviderUse(ILjava/lang/String;)V
+HPLcom/android/server/LocationManagerService;->doesUidHavePackage(ILjava/lang/String;)Z
+HPLcom/android/server/LocationManagerService;->getAllProviders()Ljava/util/List;
+HPLcom/android/server/LocationManagerService;->getAllowedResolutionLevel(II)I
+HPLcom/android/server/LocationManagerService;->getCallerAllowedResolutionLevel()I
+HPLcom/android/server/LocationManagerService;->getLastLocation(Landroid/location/LocationRequest;Ljava/lang/String;)Landroid/location/Location;
+HPLcom/android/server/LocationManagerService;->getMinimumResolutionLevelForProviderUse(Ljava/lang/String;)I
+HPLcom/android/server/LocationManagerService;->getReceiverLocked(Landroid/location/ILocationListener;IILjava/lang/String;Landroid/os/WorkSource;Z)Lcom/android/server/LocationManagerService$Receiver;
+HPLcom/android/server/LocationManagerService;->handleLocationChanged(Landroid/location/Location;Z)V
+HPLcom/android/server/LocationManagerService;->handleLocationChangedLocked(Landroid/location/Location;Z)V
+HPLcom/android/server/LocationManagerService;->isAllowedByCurrentUserSettingsLocked(Ljava/lang/String;)Z
+HPLcom/android/server/LocationManagerService;->isAllowedByUserSettingsLocked(Ljava/lang/String;I)Z
+HPLcom/android/server/LocationManagerService;->isCurrentProfile(I)Z
+HPLcom/android/server/LocationManagerService;->isImportanceForeground(I)Z
+HPLcom/android/server/LocationManagerService;->isProviderEnabled(Ljava/lang/String;)Z
+HPLcom/android/server/LocationManagerService;->isThrottlingExemptLocked(Lcom/android/server/LocationManagerService$Identity;)Z
+HPLcom/android/server/LocationManagerService;->locationCallbackFinished(Landroid/location/ILocationListener;)V
+HPLcom/android/server/LocationManagerService;->onUidImportanceChanged(II)V
+HPLcom/android/server/LocationManagerService;->removeUpdatesLocked(Lcom/android/server/LocationManagerService$Receiver;)V
+HPLcom/android/server/LocationManagerService;->reportLocation(Landroid/location/Location;Z)V
+HPLcom/android/server/LocationManagerService;->reportLocationAccessNoThrow(IILjava/lang/String;I)Z
+HPLcom/android/server/LocationManagerService;->requestLocationUpdates(Landroid/location/LocationRequest;Landroid/location/ILocationListener;Landroid/app/PendingIntent;Ljava/lang/String;)V
+HPLcom/android/server/LocationManagerService;->resolutionLevelToOp(I)I
+HPLcom/android/server/LocationManagerService;->shouldBroadcastSafe(Landroid/location/Location;Landroid/location/Location;Lcom/android/server/LocationManagerService$UpdateRecord;J)Z
+HPLcom/android/server/NativeDaemonConnector$ResponseQueue$PendingCmd;-><init>(ILjava/lang/String;)V
+HPLcom/android/server/NativeDaemonConnector$ResponseQueue;->add(ILcom/android/server/NativeDaemonEvent;)V
+HPLcom/android/server/NativeDaemonConnector$ResponseQueue;->remove(IJLjava/lang/String;)Lcom/android/server/NativeDaemonEvent;
+HPLcom/android/server/NativeDaemonConnector;->appendEscaped(Ljava/lang/StringBuilder;Ljava/lang/String;)V
+HPLcom/android/server/NativeDaemonConnector;->executeForList(JLjava/lang/String;[Ljava/lang/Object;)[Lcom/android/server/NativeDaemonEvent;
+HPLcom/android/server/NativeDaemonConnector;->handleMessage(Landroid/os/Message;)Z
+HPLcom/android/server/NativeDaemonConnector;->listenToSocket()V
+HPLcom/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
+HPLcom/android/server/NativeDaemonConnector;->uptimeMillisInt()I
+HPLcom/android/server/NativeDaemonEvent;-><init>(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/io/FileDescriptor;)V
+HPLcom/android/server/NativeDaemonEvent;->getCode()I
+HPLcom/android/server/NativeDaemonEvent;->isClassUnsolicited()Z
+HPLcom/android/server/NativeDaemonEvent;->isClassUnsolicited(I)Z
+HPLcom/android/server/NativeDaemonEvent;->parseRawEvent(Ljava/lang/String;[Ljava/io/FileDescriptor;)Lcom/android/server/NativeDaemonEvent;
+HPLcom/android/server/NativeDaemonEvent;->toString()Ljava/lang/String;
+HPLcom/android/server/NativeDaemonEvent;->unescapeArgs(Ljava/lang/String;)[Ljava/lang/String;
+HPLcom/android/server/NetworkManagementInternal;->isNetworkRestrictedForUid(I)Z
+HPLcom/android/server/NetworkManagementService$LocalService;->isNetworkRestrictedForUid(I)Z
+HPLcom/android/server/NetworkManagementService$NetdCallbackReceiver;->onCheckHoldWakeLock(I)Z
+HPLcom/android/server/NetworkManagementService$NetdCallbackReceiver;->onEvent(ILjava/lang/String;[Ljava/lang/String;)Z
+HPLcom/android/server/NetworkManagementService$NetdTetheringStatsProvider;->getTetherStats(I)Landroid/net/NetworkStats;
+HPLcom/android/server/NetworkManagementService;->-wrap1(Lcom/android/server/NetworkManagementService;I)Z
+HPLcom/android/server/NetworkManagementService;->-wrap6(Lcom/android/server/NetworkManagementService;IIJIZ)V
+HPLcom/android/server/NetworkManagementService;->enforceSystemUid()V
+HPLcom/android/server/NetworkManagementService;->getFirewallChainState(I)Z
+HPLcom/android/server/NetworkManagementService;->getNetworkStatsTethering(I)Landroid/net/NetworkStats;
+HPLcom/android/server/NetworkManagementService;->getUidFirewallRulesLR(I)Landroid/util/SparseIntArray;
+HPLcom/android/server/NetworkManagementService;->invokeForAllObservers(Lcom/android/server/NetworkManagementService$NetworkManagementEventCallback;)V
+HPLcom/android/server/NetworkManagementService;->isNetworkRestrictedInternal(I)Z
+HPLcom/android/server/NetworkManagementService;->lambda$-com_android_server_NetworkManagementService_18910(Ljava/lang/String;Ljava/lang/String;Landroid/net/INetworkManagementEventObserver;)V
+HPLcom/android/server/NetworkManagementService;->lambda$-com_android_server_NetworkManagementService_21126(IZJLandroid/net/INetworkManagementEventObserver;)V
+HPLcom/android/server/NetworkManagementService;->lambda$-com_android_server_NetworkManagementService_29429(Ljava/lang/String;Landroid/net/LinkAddress;Landroid/net/INetworkManagementEventObserver;)V
+HPLcom/android/server/NetworkManagementService;->monitor()V
+HPLcom/android/server/NetworkManagementService;->notifyInterfaceClassActivity(IIJIZ)V
+HPLcom/android/server/NetworkManagementService;->setFirewallUidRule(III)V
+HPLcom/android/server/NetworkManagementService;->setFirewallUidRuleLocked(III)V
+HPLcom/android/server/NetworkManagementService;->setPermission(Ljava/lang/String;[I)V
+HPLcom/android/server/NetworkManagementService;->setUidCleartextNetworkPolicy(II)V
+HPLcom/android/server/NetworkManagementService;->updateFirewallUidRuleLocked(III)Z
+HPLcom/android/server/NetworkScoreService$ScoringServiceConnection;->getAppData()Landroid/net/NetworkScorerAppData;
+HPLcom/android/server/NetworkScoreService$ScoringServiceConnection;->getPackageName()Ljava/lang/String;
+HPLcom/android/server/NetworkScoreService;->canCallerRequestScores()Z
+HPLcom/android/server/NetworkScoreService;->canCallerScoreNetworks()Z
+HPLcom/android/server/NetworkScoreService;->getActiveScorerPackage()Ljava/lang/String;
+HPLcom/android/server/NetworkScoreService;->isCallerActiveScorer(I)Z
+HPLcom/android/server/NetworkScoreService;->requestScores([Landroid/net/NetworkKey;)Z
+HPLcom/android/server/NetworkScoreService;->sendCacheUpdateCallback(Ljava/util/function/BiConsumer;Ljava/util/Collection;)V
+HPLcom/android/server/NetworkScoreService;->updateScores([Landroid/net/ScoredNetwork;)Z
+HPLcom/android/server/NsdService$DaemonConnectionSupplier;->get(Lcom/android/server/NsdService$NativeCallbackReceiver;)Lcom/android/server/NsdService$DaemonConnection;
+HPLcom/android/server/NsdService$NsdSettings;->isEnabled()Z
+HPLcom/android/server/NsdService$NsdSettings;->putEnabledStatus(Z)V
+HPLcom/android/server/NsdService$NsdSettings;->registerContentObserver(Landroid/net/Uri;Landroid/database/ContentObserver;)V
+HPLcom/android/server/PersistentDataBlockManagerInternal;->getFrpCredentialHandle()[B
+HPLcom/android/server/PersistentDataBlockManagerInternal;->setFrpCredentialHandle([B)V
+HPLcom/android/server/PersistentDataBlockService;->computeDigestLocked([B)[B
+HPLcom/android/server/ServiceWatcher$1;->onPackageUpdateFinished(Ljava/lang/String;I)V
+HPLcom/android/server/ServiceWatcher;->bindBestPackageLocked(Ljava/lang/String;Z)Z
+HPLcom/android/server/ServiceWatcher;->isSignatureMatch([Landroid/content/pm/Signature;Ljava/util/List;)Z
+HPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->getExternalStorageMountMode(ILjava/lang/String;)I
+HPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->hasExternalStorage(ILjava/lang/String;)Z
+HPLcom/android/server/StorageManagerService;->adjustAllocateFlags(IILjava/lang/String;)I
+HPLcom/android/server/StorageManagerService;->getAllocatableBytes(Ljava/lang/String;ILjava/lang/String;)J
+HPLcom/android/server/StorageManagerService;->getVolumeList(ILjava/lang/String;I)[Landroid/os/storage/StorageVolume;
+HPLcom/android/server/StorageManagerService;->getVolumes(I)[Landroid/os/storage/VolumeInfo;
+HPLcom/android/server/StorageManagerService;->isUserKeyUnlocked(I)Z
+HPLcom/android/server/SystemServer;->startOtherServices()V
+HPLcom/android/server/SystemServiceManager;->startUser(I)V
+HPLcom/android/server/SystemServiceManager;->unlockUser(I)V
+HPLcom/android/server/TelephonyRegistry$Record;->matchPhoneStateListenerEvent(I)Z
+HPLcom/android/server/TelephonyRegistry;->addOnSubscriptionsChangedListener(Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
+HPLcom/android/server/TelephonyRegistry;->broadcastDataConnectionStateChanged(IZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;ZI)V
+HPLcom/android/server/TelephonyRegistry;->broadcastPreciseDataConnectionStateChanged(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/LinkProperties;Ljava/lang/String;)V
+HPLcom/android/server/TelephonyRegistry;->listen(Ljava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;IZI)V
+HPLcom/android/server/TelephonyRegistry;->notifyDataConnectionForSubscriber(IIZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;IZ)V
+HPLcom/android/server/TelephonyRegistry;->notifySignalStrengthForPhoneId(IILandroid/telephony/SignalStrength;)V
+HPLcom/android/server/TelephonyRegistry;->notifySimActivationStateChangedForPhoneId(IIII)V
+HPLcom/android/server/TelephonyRegistry;->remove(Landroid/os/IBinder;)V
+HPLcom/android/server/TextServicesManagerService;->buildSpellCheckerMapLocked(Landroid/content/Context;Ljava/util/ArrayList;Ljava/util/HashMap;Lcom/android/server/TextServicesManagerService$TextServicesSettings;)V
+HPLcom/android/server/TextServicesManagerService;->calledFromValidUser()Z
+HPLcom/android/server/TextServicesManagerService;->getCurrentSpellCheckerSubtype(Ljava/lang/String;Z)Landroid/view/textservice/SpellCheckerSubtype;
+HPLcom/android/server/ThreadPriorityBooster;->boost()V
+HPLcom/android/server/ThreadPriorityBooster;->reset()V
+HPLcom/android/server/ThreadPriorityBooster;->setBoostToPriority(I)V
+HPLcom/android/server/UiModeManagerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/UiModeManagerService;->isDeskDockState(I)Z
+HPLcom/android/server/UiModeManagerService;->sendConfigurationAndStartDreamOrDockAppLocked(Ljava/lang/String;)V
+HPLcom/android/server/UiModeManagerService;->updateConfigurationLocked()V
+HPLcom/android/server/UiModeManagerService;->updateLocked(II)V
+HPLcom/android/server/VibratorService$Vibration;->-get0(Lcom/android/server/VibratorService$Vibration;)Landroid/os/VibrationEffect;
+HPLcom/android/server/VibratorService$Vibration;->-get4(Lcom/android/server/VibratorService$Vibration;)I
+HPLcom/android/server/VibratorService;->addToPreviousVibrationsLocked(Lcom/android/server/VibratorService$Vibration;)V
+HPLcom/android/server/VibratorService;->doCancelVibrateLocked()V
+HPLcom/android/server/VibratorService;->doVibratorOff()V
+HPLcom/android/server/VibratorService;->doVibratorPrebakedEffectLocked(Lcom/android/server/VibratorService$Vibration;)J
+HPLcom/android/server/VibratorService;->getAppOpMode(Lcom/android/server/VibratorService$Vibration;)I
+HPLcom/android/server/VibratorService;->reportFinishVibrationLocked()V
+HPLcom/android/server/VibratorService;->startVibrationInnerLocked(Lcom/android/server/VibratorService$Vibration;)V
+HPLcom/android/server/VibratorService;->startVibrationLocked(Lcom/android/server/VibratorService$Vibration;)V
+HPLcom/android/server/VibratorService;->verifyIncomingUid(I)V
+HPLcom/android/server/VibratorService;->vibrate(ILjava/lang/String;Landroid/os/VibrationEffect;ILandroid/os/IBinder;)V
+HPLcom/android/server/Watchdog$BinderThreadMonitor;->monitor()V
+HPLcom/android/server/Watchdog$HandlerChecker;->getCompletionStateLocked()I
+HPLcom/android/server/Watchdog$HandlerChecker;->run()V
+HPLcom/android/server/Watchdog$HandlerChecker;->scheduleCheckLocked()V
+HPLcom/android/server/Watchdog$OpenFdMonitor;->monitor()Z
+HPLcom/android/server/Watchdog;->evaluateCheckerCompletionLocked()I
+HPLcom/android/server/Watchdog;->run()V
+HPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityConnectionWrapper;->-get0(Lcom/android/server/accessibility/AccessibilityManagerService$AccessibilityConnectionWrapper;)Landroid/view/accessibility/IAccessibilityInteractionConnection;
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->-wrap1(Lcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;I)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->-wrap3(Lcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;Landroid/view/accessibility/AccessibilityEvent;)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->canDispatchAccessibilityEventLocked(Landroid/view/accessibility/AccessibilityEvent;)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->canGetAccessibilityNodeInfoLocked(Lcom/android/server/accessibility/AccessibilityManagerService$Service;I)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->canRetrieveWindowContentLocked(Lcom/android/server/accessibility/AccessibilityManagerService$Service;)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->computePartialInteractiveRegionForWindowLocked(ILandroid/graphics/Region;)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->findA11yWindowInfoById(I)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->getActiveWindowId()I
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->isCallerInteractingAcrossUsers(I)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->isRetrievalAllowingWindow(I)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->notifyWindowsChanged()V
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->resolveCallingUserIdEnforcingPermissionsLocked(I)I
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->resolveProfileParentLocked(I)I
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->updateActiveAndAccessibilityFocusedWindowLocked(IJII)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->updateEventSourceLocked(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->updateWindowsLocked(Ljava/util/List;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$Service$1;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$Service;->-wrap3(Lcom/android/server/accessibility/AccessibilityManagerService$Service;ILandroid/view/accessibility/AccessibilityEvent;Z)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$Service;->canReceiveEventsLocked()Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$Service;->findAccessibilityNodeInfoByAccessibilityId(IJILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IJLandroid/os/Bundle;)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$Service;->getConnectionLocked(I)Landroid/view/accessibility/IAccessibilityInteractionConnection;
+HPLcom/android/server/accessibility/AccessibilityManagerService$Service;->getWindows()Ljava/util/List;
+HPLcom/android/server/accessibility/AccessibilityManagerService$Service;->isCalledForCurrentUserLocked()Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$Service;->notifyAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;Z)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$Service;->notifyAccessibilityEventInternal(ILandroid/view/accessibility/AccessibilityEvent;Z)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$Service;->performAccessibilityAction(IJILandroid/os/Bundle;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$Service;->replaceCallbackIfNeeded(Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIIJ)Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;
+HPLcom/android/server/accessibility/AccessibilityManagerService$Service;->resolveAccessibilityWindowIdLocked(I)I
+HPLcom/android/server/accessibility/AccessibilityManagerService$UserState;->isHandlingAccessibilityEvents()Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$WindowsForAccessibilityCallback;->-wrap0(Lcom/android/server/accessibility/AccessibilityManagerService$WindowsForAccessibilityCallback;Landroid/view/WindowInfo;)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLcom/android/server/accessibility/AccessibilityManagerService$WindowsForAccessibilityCallback;->getTypeForWindowManagerWindowType(I)I
+HPLcom/android/server/accessibility/AccessibilityManagerService$WindowsForAccessibilityCallback;->onWindowsForAccessibilityChanged(Ljava/util/List;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$WindowsForAccessibilityCallback;->populateReportedWindow(Landroid/view/WindowInfo;)Landroid/view/accessibility/AccessibilityWindowInfo;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->-get14(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->-get16(Lcom/android/server/accessibility/AccessibilityManagerService;)Landroid/graphics/Rect;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->-get2(Lcom/android/server/accessibility/AccessibilityManagerService;)I
+HPLcom/android/server/accessibility/AccessibilityManagerService;->-get20(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilityManagerService$WindowsForAccessibilityCallback;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->-get5(Lcom/android/server/accessibility/AccessibilityManagerService;)Landroid/util/SparseArray;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->-get9(Lcom/android/server/accessibility/AccessibilityManagerService;)Ljava/lang/Object;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->-wrap0(Lcom/android/server/accessibility/AccessibilityManagerService;I)Landroid/view/MagnificationSpec;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->-wrap12(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilityManagerService$UserState;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->-wrap15(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/os/IBinder;)I
+HPLcom/android/server/accessibility/AccessibilityManagerService;->addAccessibilityInteractionConnection(Landroid/view/IWindow;Landroid/view/accessibility/IAccessibilityInteractionConnection;I)I
+HPLcom/android/server/accessibility/AccessibilityManagerService;->addClient(Landroid/view/accessibility/IAccessibilityManagerClient;I)J
+HPLcom/android/server/accessibility/AccessibilityManagerService;->doesServiceWantEventLocked(Lcom/android/server/accessibility/AccessibilityManagerService$Service;Landroid/view/accessibility/AccessibilityEvent;)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService;->findWindowIdLocked(Landroid/os/IBinder;)I
+HPLcom/android/server/accessibility/AccessibilityManagerService;->getCompatibleMagnificationSpecLocked(I)Landroid/view/MagnificationSpec;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->getCurrentUserStateLocked()Lcom/android/server/accessibility/AccessibilityManagerService$UserState;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->getEnabledAccessibilityServiceList(II)Ljava/util/List;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->getUserStateLocked(I)Lcom/android/server/accessibility/AccessibilityManagerService$UserState;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->notifyAccessibilityServicesDelayedLocked(Landroid/view/accessibility/AccessibilityEvent;Z)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->onUserStateChangedLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->readInstalledAccessibilityServiceLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService;->removeAccessibilityInteractionConnectionInternalLocked(Landroid/os/IBinder;Landroid/util/SparseArray;Landroid/util/SparseArray;)I
+HPLcom/android/server/accessibility/AccessibilityManagerService;->sendAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;I)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityShortcutLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->updateLegacyCapabilitiesLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->updateServicesLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+HPLcom/android/server/accessibility/FingerprintGestureDispatcher$FingerprintGestureClient;->isCapturingFingerprintGestures()Z
+HPLcom/android/server/accessibility/FingerprintGestureDispatcher$FingerprintGestureClient;->onFingerprintGesture(I)V
+HPLcom/android/server/accessibility/FingerprintGestureDispatcher$FingerprintGestureClient;->onFingerprintGestureDetectionActiveChanged(Z)V
+HPLcom/android/server/accessibility/KeyEventDispatcher$KeyEventFilter;->onKeyEvent(Landroid/view/KeyEvent;I)Z
+HPLcom/android/server/accounts/AccountAuthenticatorCache;->getServiceInfo(Landroid/accounts/AuthenticatorDescription;I)Landroid/content/pm/RegisteredServicesCache$ServiceInfo;
+HPLcom/android/server/accounts/AccountAuthenticatorCache;->parseServiceAttributes(Landroid/content/res/Resources;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/accounts/AuthenticatorDescription;
+HPLcom/android/server/accounts/AccountManagerService$8;->onResult(Landroid/os/Bundle;)V
+HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->checkAccount()V
+HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->onResult(Landroid/os/Bundle;)V
+HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->run()V
+HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->sendResult()V
+HPLcom/android/server/accounts/AccountManagerService$Session;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;Z)V
+HPLcom/android/server/accounts/AccountManagerService$Session;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;ZZ)V
+HPLcom/android/server/accounts/AccountManagerService$Session;->bind()V
+HPLcom/android/server/accounts/AccountManagerService$Session;->bindToAuthenticator(Ljava/lang/String;)Z
+HPLcom/android/server/accounts/AccountManagerService$Session;->cancelTimeout()V
+HPLcom/android/server/accounts/AccountManagerService$Session;->close()V
+HPLcom/android/server/accounts/AccountManagerService$Session;->getResponseAndClose()Landroid/accounts/IAccountManagerResponse;
+HPLcom/android/server/accounts/AccountManagerService$Session;->onResult(Landroid/os/Bundle;)V
+HPLcom/android/server/accounts/AccountManagerService$Session;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/accounts/AccountManagerService$Session;->unbind()V
+HPLcom/android/server/accounts/AccountManagerService$TestFeaturesSession;->onResult(Landroid/os/Bundle;)V
+HPLcom/android/server/accounts/AccountManagerService$UserAccounts;->-get10(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
+HPLcom/android/server/accounts/AccountManagerService$UserAccounts;->-get8(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
+HPLcom/android/server/accounts/AccountManagerService$UserAccounts;->-get9(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)I
+HPLcom/android/server/accounts/AccountManagerService;->-get5(Lcom/android/server/accounts/AccountManagerService;)Ljava/util/LinkedHashMap;
+HPLcom/android/server/accounts/AccountManagerService;->-wrap4(Lcom/android/server/accounts/AccountManagerService;I)Z
+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
+HPLcom/android/server/accounts/AccountManagerService;->calculatePackageSignatureDigest(Ljava/lang/String;)[B
+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
+HPLcom/android/server/accounts/AccountManagerService;->filterAccounts(Lcom/android/server/accounts/AccountManagerService$UserAccounts;[Landroid/accounts/Account;ILjava/lang/String;Z)[Landroid/accounts/Account;
+HPLcom/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;->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;
+HPLcom/android/server/accounts/AccountManagerService;->getAccounts(Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;
+HPLcom/android/server/accounts/AccountManagerService;->getAccountsAsUser(Ljava/lang/String;ILjava/lang/String;)[Landroid/accounts/Account;
+HPLcom/android/server/accounts/AccountManagerService;->getAccountsAsUserForPackage(Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;Z)[Landroid/accounts/Account;
+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;
+HPLcom/android/server/accounts/AccountManagerService;->getAccountsFromCache(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Ljava/lang/String;ILjava/lang/String;Z)[Landroid/accounts/Account;
+HPLcom/android/server/accounts/AccountManagerService;->getAccountsInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;ILjava/lang/String;Ljava/util/List;Z)[Landroid/accounts/Account;
+HPLcom/android/server/accounts/AccountManagerService;->getAuthToken(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;ZZLandroid/os/Bundle;)V
+HPLcom/android/server/accounts/AccountManagerService;->getAuthenticatorTypesInternal(I)[Landroid/accounts/AuthenticatorDescription;
+HPLcom/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;
+HPLcom/android/server/accounts/AccountManagerService;->getSigninRequiredNotificationId(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Lcom/android/server/accounts/AccountManagerService$NotificationId;
+HPLcom/android/server/accounts/AccountManagerService;->getTypesForCaller(IIZ)Ljava/util/List;
+HPLcom/android/server/accounts/AccountManagerService;->getTypesManagedByCaller(II)Ljava/util/List;
+HPLcom/android/server/accounts/AccountManagerService;->getTypesVisibleToCaller(IILjava/lang/String;)Ljava/util/List;
+HPLcom/android/server/accounts/AccountManagerService;->getUidsOfInstalledOrUpdatedPackagesAsUser(I)Landroid/util/SparseBooleanArray;
+HPLcom/android/server/accounts/AccountManagerService;->getUserAccounts(I)Lcom/android/server/accounts/AccountManagerService$UserAccounts;
+HPLcom/android/server/accounts/AccountManagerService;->getUserData(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/accounts/AccountManagerService;->getUserManager()Landroid/os/UserManager;
+HPLcom/android/server/accounts/AccountManagerService;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;I)Z
+HPLcom/android/server/accounts/AccountManagerService;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/UserHandle;)Z
+HPLcom/android/server/accounts/AccountManagerService;->hasFeatures(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;[Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/accounts/AccountManagerService;->isAccountManagedByCaller(Ljava/lang/String;II)Z
+HPLcom/android/server/accounts/AccountManagerService;->isLocalUnlockedUser(I)Z
+HPLcom/android/server/accounts/AccountManagerService;->isPermittedForPackage(Ljava/lang/String;II[Ljava/lang/String;)Z
+HPLcom/android/server/accounts/AccountManagerService;->isPreOApplication(Ljava/lang/String;)Z
+HPLcom/android/server/accounts/AccountManagerService;->isPrivileged(I)Z
+HPLcom/android/server/accounts/AccountManagerService;->isProfileOwner(I)Z
+HPLcom/android/server/accounts/AccountManagerService;->onAccountAccessed(Ljava/lang/String;)V
+HPLcom/android/server/accounts/AccountManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/server/accounts/AccountManagerService;->peekAuthToken(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/accounts/AccountManagerService;->permissionIsGranted(Landroid/accounts/Account;Ljava/lang/String;II)Z
+HPLcom/android/server/accounts/AccountManagerService;->readAuthTokenInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/accounts/AccountManagerService;->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;->readUserDataInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
+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
+HPLcom/android/server/accounts/AccountManagerService;->resolveAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/lang/Integer;
+HPLcom/android/server/accounts/AccountManagerService;->setUserData(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->-get0(Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;)Z
+HPLcom/android/server/accounts/AccountsDb;->findExtrasIdByAccountId(JLjava/lang/String;)J
+HPLcom/android/server/accounts/AccountsDb;->findUserExtrasForAccount(Landroid/accounts/Account;)Ljava/util/Map;
+HPLcom/android/server/accounts/AccountsDb;->isCeDatabaseAttached()Z
+HPLcom/android/server/accounts/IAccountAuthenticatorCache;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;I)V
+HPLcom/android/server/accounts/IAccountAuthenticatorCache;->getAllServices(I)Ljava/util/Collection;
+HPLcom/android/server/accounts/IAccountAuthenticatorCache;->getServiceInfo(Landroid/accounts/AuthenticatorDescription;I)Landroid/content/pm/RegisteredServicesCache$ServiceInfo;
+HPLcom/android/server/accounts/IAccountAuthenticatorCache;->invalidateCache(I)V
+HPLcom/android/server/accounts/IAccountAuthenticatorCache;->setListener(Landroid/content/pm/RegisteredServicesCacheListener;Landroid/os/Handler;)V
+HPLcom/android/server/accounts/IAccountAuthenticatorCache;->updateServices(I)V
+HPLcom/android/server/accounts/TokenCache$Key;->hashCode()I
+HPLcom/android/server/accounts/TokenCache;->get(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;[B)Ljava/lang/String;
+HPLcom/android/server/am/-$Lambda$-Oweh9FamEB8lkqsrsDtt1mh9YE;->$m$1()V
+HPLcom/android/server/am/-$Lambda$-Oweh9FamEB8lkqsrsDtt1mh9YE;-><init>(BIIIIIIIILjava/lang/Object;)V
+HPLcom/android/server/am/-$Lambda$-Oweh9FamEB8lkqsrsDtt1mh9YE;->run()V
+HPLcom/android/server/am/-$Lambda$FqYE94sGA9-gF3KGIicLxzMb89s;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/am/-$Lambda$njIALZ9XLXuT-vhmazyQkVX7Z0U;->$m$0(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+HPLcom/android/server/am/-$Lambda$njIALZ9XLXuT-vhmazyQkVX7Z0U;->needed(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+HPLcom/android/server/am/ActiveServices$ServiceLookupResult;-><init>(Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ServiceRecord;Ljava/lang/String;)V
+HPLcom/android/server/am/ActiveServices$ServiceMap;->ensureNotStartingBackgroundLocked(Lcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ActiveServices$ServiceMap;->rescheduleDelayedStartsLocked()V
+HPLcom/android/server/am/ActiveServices$ServiceRestarter;-><init>(Lcom/android/server/am/ActiveServices;)V
+HPLcom/android/server/am/ActiveServices$ServiceRestarter;-><init>(Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices$ServiceRestarter;)V
+HPLcom/android/server/am/ActiveServices$ServiceRestarter;->setService(Lcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ActiveServices;->attachApplicationLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)Z
+HPLcom/android/server/am/ActiveServices;->bindServiceLocked(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;ILjava/lang/String;I)I
+HPLcom/android/server/am/ActiveServices;->bringDownDisabledPackageServicesLocked(Ljava/lang/String;Ljava/util/Set;IZZZ)Z
+HPLcom/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;->bringUpServiceLocked(Lcom/android/server/am/ServiceRecord;IZZZ)Ljava/lang/String;
+HPLcom/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
+HPLcom/android/server/am/ActiveServices;->cleanUpRemovedTaskLocked(Lcom/android/server/am/TaskRecord;Landroid/content/ComponentName;Landroid/content/Intent;)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;ZZZLandroid/util/ArrayMap;)Z
+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;->getRunningServiceInfoLocked(IIIZZ)Ljava/util/List;
+HPLcom/android/server/am/ActiveServices;->getServiceByNameLocked(Landroid/content/ComponentName;I)Lcom/android/server/am/ServiceRecord;
+HPLcom/android/server/am/ActiveServices;->getServiceMapLocked(I)Lcom/android/server/am/ActiveServices$ServiceMap;
+HPLcom/android/server/am/ActiveServices;->hasBackgroundServicesLocked(I)Z
+HPLcom/android/server/am/ActiveServices;->isServiceNeededLocked(Lcom/android/server/am/ServiceRecord;ZZ)Z
+HPLcom/android/server/am/ActiveServices;->killServicesLocked(Lcom/android/server/am/ProcessRecord;Z)V
+HPLcom/android/server/am/ActiveServices;->makeRunningServiceInfoLocked(Lcom/android/server/am/ServiceRecord;)Landroid/app/ActivityManager$RunningServiceInfo;
+HPLcom/android/server/am/ActiveServices;->performServiceRestartLocked(Lcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ActiveServices;->publishServiceLocked(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent;Landroid/os/IBinder;)V
+HPLcom/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/am/ActivityRecord;)V
+HPLcom/android/server/am/ActiveServices;->requestServiceBindingLocked(Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/IntentBindRecord;ZZ)Z
+HPLcom/android/server/am/ActiveServices;->requestServiceBindingsLocked(Lcom/android/server/am/ServiceRecord;Z)V
+HPLcom/android/server/am/ActiveServices;->retrieveServiceLocked(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;IIIZZZ)Lcom/android/server/am/ActiveServices$ServiceLookupResult;
+HPLcom/android/server/am/ActiveServices;->scheduleServiceRestartLocked(Lcom/android/server/am/ServiceRecord;Z)Z
+HPLcom/android/server/am/ActiveServices;->scheduleServiceTimeoutLocked(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ActiveServices;->sendServiceArgsLocked(Lcom/android/server/am/ServiceRecord;ZZ)V
+HPLcom/android/server/am/ActiveServices;->serviceDoneExecutingLocked(Lcom/android/server/am/ServiceRecord;III)V
+HPLcom/android/server/am/ActiveServices;->serviceDoneExecutingLocked(Lcom/android/server/am/ServiceRecord;ZZ)V
+HPLcom/android/server/am/ActiveServices;->startServiceInnerLocked(Lcom/android/server/am/ActiveServices$ServiceMap;Landroid/content/Intent;Lcom/android/server/am/ServiceRecord;ZZ)Landroid/content/ComponentName;
+HPLcom/android/server/am/ActiveServices;->startServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IIZLjava/lang/String;I)Landroid/content/ComponentName;
+HPLcom/android/server/am/ActiveServices;->stopInBackgroundLocked(I)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
+HPLcom/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;->unscheduleServiceRestartLocked(Lcom/android/server/am/ServiceRecord;IZ)Z
+HPLcom/android/server/am/ActiveServices;->updateForegroundApps(Lcom/android/server/am/ActiveServices$ServiceMap;)V
+HPLcom/android/server/am/ActiveServices;->updateServiceClientActivitiesLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ConnectionRecord;Z)Z
+HPLcom/android/server/am/ActiveServices;->updateServiceConnectionActivitiesLocked(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ActiveServices;->updateServiceForegroundLocked(Lcom/android/server/am/ProcessRecord;Z)V
+HPLcom/android/server/am/ActivityManagerService$1;->allowFilterResult(Landroid/content/IntentFilter;Ljava/util/List;)Z
+HPLcom/android/server/am/ActivityManagerService$1;->allowFilterResult(Lcom/android/server/am/BroadcastFilter;Ljava/util/List;)Z
+HPLcom/android/server/am/ActivityManagerService$1;->isPackageForFilter(Ljava/lang/String;Landroid/content/IntentFilter;)Z
+HPLcom/android/server/am/ActivityManagerService$1;->isPackageForFilter(Ljava/lang/String;Lcom/android/server/am/BroadcastFilter;)Z
+HPLcom/android/server/am/ActivityManagerService$1;->newArray(I)[Landroid/content/IntentFilter;
+HPLcom/android/server/am/ActivityManagerService$1;->newArray(I)[Lcom/android/server/am/BroadcastFilter;
+HPLcom/android/server/am/ActivityManagerService$1;->newResult(Landroid/content/IntentFilter;II)Ljava/lang/Object;
+HPLcom/android/server/am/ActivityManagerService$1;->newResult(Lcom/android/server/am/BroadcastFilter;II)Lcom/android/server/am/BroadcastFilter;
+HPLcom/android/server/am/ActivityManagerService$20;->run()V
+HPLcom/android/server/am/ActivityManagerService$24;->compare(Lcom/android/server/am/ActivityManagerService$MemItem;Lcom/android/server/am/ActivityManagerService$MemItem;)I
+HPLcom/android/server/am/ActivityManagerService$24;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/am/ActivityManagerService$2;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/am/ActivityManagerService$2;->lambda$-com_android_server_am_ActivityManagerService$2_102488(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+HPLcom/android/server/am/ActivityManagerService$AppDeathRecipient;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;ILandroid/app/IApplicationThread;)V
+HPLcom/android/server/am/ActivityManagerService$AppDeathRecipient;->binderDied()V
+HPLcom/android/server/am/ActivityManagerService$AppTaskImpl;->getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;
+HPLcom/android/server/am/ActivityManagerService$GrantUri;-><init>(ILandroid/net/Uri;Z)V
+HPLcom/android/server/am/ActivityManagerService$GrantUri;->resolve(ILandroid/net/Uri;)Lcom/android/server/am/ActivityManagerService$GrantUri;
+HPLcom/android/server/am/ActivityManagerService$GraphicsBinder;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService$Injector;->ensureHasNetworkManagementInternal()Z
+HPLcom/android/server/am/ActivityManagerService$Injector;->isNetworkRestrictedForUid(I)Z
+HPLcom/android/server/am/ActivityManagerService$KillHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->checkContentProviderAccess(Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/am/ActivityManagerService$LocalService;->notifyAppTransitionFinished()V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->notifyAppTransitionStarting(Landroid/util/SparseIntArray;J)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->notifyNetworkPolicyRulesUpdated(IJ)V
+HPLcom/android/server/am/ActivityManagerService$MainHandler;->handleMessage(Landroid/os/Message;)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;JJI)V
+HPLcom/android/server/am/ActivityManagerService$MemItem;-><init>(Ljava/lang/String;Ljava/lang/String;JJIZ)V
+HPLcom/android/server/am/ActivityManagerService$UiHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/am/ActivityManagerService;->-get5(Lcom/android/server/am/ActivityManagerService;)Ljava/lang/StringBuilder;
+HPLcom/android/server/am/ActivityManagerService;->-wrap2(Lcom/android/server/am/ActivityManagerService;II)V
+HPLcom/android/server/am/ActivityManagerService;->activityIdle(Landroid/os/IBinder;Landroid/content/res/Configuration;Z)V
+HPLcom/android/server/am/ActivityManagerService;->activityPaused(Landroid/os/IBinder;)V
+HPLcom/android/server/am/ActivityManagerService;->activityResumed(Landroid/os/IBinder;)V
+HPLcom/android/server/am/ActivityManagerService;->activityStopped(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/lang/CharSequence;)V
+HPLcom/android/server/am/ActivityManagerService;->addBackgroundCheckViolationLocked(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->addBroadcastStatLocked(Ljava/lang/String;Ljava/lang/String;IIJ)V
+HPLcom/android/server/am/ActivityManagerService;->addPackageDependency(Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->addProcessNameLocked(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ActivityManagerService;->appDiedLocked(Lcom/android/server/am/ProcessRecord;ILandroid/app/IApplicationThread;Z)V
+HPLcom/android/server/am/ActivityManagerService;->appRestrictedInBackgroundLocked(ILjava/lang/String;I)I
+HPLcom/android/server/am/ActivityManagerService;->appServicesRestrictedInBackgroundLocked(ILjava/lang/String;I)I
+HPLcom/android/server/am/ActivityManagerService;->appendDropBoxProcessHeaders(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/StringBuilder;)V
+HPLcom/android/server/am/ActivityManagerService;->applyOomAdjLocked(Lcom/android/server/am/ProcessRecord;ZJJ)Z
+HPLcom/android/server/am/ActivityManagerService;->applyUpdateLockStateLocked(Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityManagerService;->attachApplication(Landroid/app/IApplicationThread;)V
+HPLcom/android/server/am/ActivityManagerService;->attachApplicationLocked(Landroid/app/IApplicationThread;I)Z
+HPLcom/android/server/am/ActivityManagerService;->backgroundServicesFinishedLocked(I)V
+HPLcom/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
+HPLcom/android/server/am/ActivityManagerService;->boostPriorityForLockedSection()V
+HPLcom/android/server/am/ActivityManagerService;->broadcastIntent(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZI)I
+HPLcom/android/server/am/ActivityManagerService;->broadcastIntentInPackage(Ljava/lang/String;ILandroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;Ljava/lang/String;Landroid/os/Bundle;ZZI)I
+HPLcom/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;ZZIII)I
+HPLcom/android/server/am/ActivityManagerService;->broadcastQueueForIntent(Landroid/content/Intent;)Lcom/android/server/am/BroadcastQueue;
+HPLcom/android/server/am/ActivityManagerService;->checkAppInLaunchingProvidersLocked(Lcom/android/server/am/ProcessRecord;)Z
+HPLcom/android/server/am/ActivityManagerService;->checkBroadcastFromSystem(Landroid/content/Intent;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;IZLjava/util/List;)V
+HPLcom/android/server/am/ActivityManagerService;->checkCallingPermission(Ljava/lang/String;)I
+HPLcom/android/server/am/ActivityManagerService;->checkComponentPermission(Ljava/lang/String;IIIZ)I
+HPLcom/android/server/am/ActivityManagerService;->checkContentProviderAccess(Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/am/ActivityManagerService;->checkContentProviderPermissionLocked(Landroid/content/pm/ProviderInfo;Lcom/android/server/am/ProcessRecord;IZ)Ljava/lang/String;
+HPLcom/android/server/am/ActivityManagerService;->checkExcessivePowerUsageLocked()V
+HPLcom/android/server/am/ActivityManagerService;->checkGrantUriPermissionFromIntentLocked(ILjava/lang/String;Landroid/content/Intent;ILcom/android/server/am/ActivityManagerService$NeededUriGrants;I)Lcom/android/server/am/ActivityManagerService$NeededUriGrants;
+HPLcom/android/server/am/ActivityManagerService;->checkGrantUriPermissionLocked(ILjava/lang/String;Lcom/android/server/am/ActivityManagerService$GrantUri;II)I
+HPLcom/android/server/am/ActivityManagerService;->checkPermission(Ljava/lang/String;II)I
+HPLcom/android/server/am/ActivityManagerService;->checkPermissionWithToken(Ljava/lang/String;IILandroid/os/IBinder;)I
+HPLcom/android/server/am/ActivityManagerService;->checkTime(JLjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->cleanUpApplicationRecordLocked(Lcom/android/server/am/ProcessRecord;ZZIZ)Z
+HPLcom/android/server/am/ActivityManagerService;->cleanupAppInLaunchingProvidersLocked(Lcom/android/server/am/ProcessRecord;Z)Z
+HPLcom/android/server/am/ActivityManagerService;->collectProcesses(Ljava/io/PrintWriter;IZ[Ljava/lang/String;)Ljava/util/ArrayList;
+HPLcom/android/server/am/ActivityManagerService;->collectReceiverComponents(Landroid/content/Intent;Ljava/lang/String;I[I)Ljava/util/List;
+HPLcom/android/server/am/ActivityManagerService;->compatibilityInfoForPackageLocked(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/CompatibilityInfo;
+HPLcom/android/server/am/ActivityManagerService;->computeOomAdjLocked(Lcom/android/server/am/ProcessRecord;ILcom/android/server/am/ProcessRecord;ZJ)I
+HPLcom/android/server/am/ActivityManagerService;->createRecentTaskInfoFromTaskRecord(Lcom/android/server/am/TaskRecord;)Landroid/app/ActivityManager$RecentTaskInfo;
+HPLcom/android/server/am/ActivityManagerService;->decProviderCountLocked(Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderRecord;Landroid/os/IBinder;Z)Z
+HPLcom/android/server/am/ActivityManagerService;->dispatchProcessDied(II)V
+HPLcom/android/server/am/ActivityManagerService;->dispatchProcessesChanged()V
+HPLcom/android/server/am/ActivityManagerService;->dispatchUidsChanged()V
+HPLcom/android/server/am/ActivityManagerService;->dispatchUidsChangedForObserver(Landroid/app/IUidObserver;Lcom/android/server/am/ActivityManagerService$UidObserverRegistration;I)V
+HPLcom/android/server/am/ActivityManagerService;->doLowMemReportIfNeededLocked(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ActivityManagerService;->dumpApplicationMemoryUsage(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;ZLjava/io/PrintWriter;)V
+HPLcom/android/server/am/ActivityManagerService;->dumpApplicationMemoryUsageHeader(Ljava/io/PrintWriter;JJZZ)V
+HPLcom/android/server/am/ActivityManagerService;->dumpGraphicsHardwareUsage(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->dumpMemItems(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;ZZZ)V
+HPLcom/android/server/am/ActivityManagerService;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->enforceNotIsolatedCaller(Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->enqueueUidChangeLocked(Lcom/android/server/am/UidRecord;II)V
+HPLcom/android/server/am/ActivityManagerService;->ensureConfigAndVisibilityAfterUpdate(Lcom/android/server/am/ActivityRecord;I)Z
+HPLcom/android/server/am/ActivityManagerService;->fillInProcMemInfo(Lcom/android/server/am/ProcessRecord;Landroid/app/ActivityManager$RunningAppProcessInfo;I)V
+HPLcom/android/server/am/ActivityManagerService;->findAppProcess(Landroid/os/IBinder;Ljava/lang/String;)Lcom/android/server/am/ProcessRecord;
+HPLcom/android/server/am/ActivityManagerService;->finishActivity(Landroid/os/IBinder;ILandroid/content/Intent;I)Z
+HPLcom/android/server/am/ActivityManagerService;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V
+HPLcom/android/server/am/ActivityManagerService;->forceStopPackage(Ljava/lang/String;I)V
+HPLcom/android/server/am/ActivityManagerService;->forceStopPackageLocked(Ljava/lang/String;IZZZZZILjava/lang/String;)Z
+HPLcom/android/server/am/ActivityManagerService;->generateApplicationProvidersLocked(Lcom/android/server/am/ProcessRecord;)Ljava/util/List;
+HPLcom/android/server/am/ActivityManagerService;->getActivityOptions(Landroid/os/IBinder;)Landroid/os/Bundle;
+HPLcom/android/server/am/ActivityManagerService;->getAppStartModeLocked(ILjava/lang/String;IIZZ)I
+HPLcom/android/server/am/ActivityManagerService;->getAppTasks(Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/server/am/ActivityManagerService;->getBackgroundLaunchBroadcasts()Landroid/util/ArraySet;
+HPLcom/android/server/am/ActivityManagerService;->getContentProvider(Landroid/app/IApplicationThread;Ljava/lang/String;IZ)Landroid/app/ContentProviderHolder;
+HPLcom/android/server/am/ActivityManagerService;->getContentProviderImpl(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/os/IBinder;ZI)Landroid/app/ContentProviderHolder;
+HPLcom/android/server/am/ActivityManagerService;->getCurrentUser()Landroid/content/pm/UserInfo;
+HPLcom/android/server/am/ActivityManagerService;->getFocusedStack()Lcom/android/server/am/ActivityStack;
+HPLcom/android/server/am/ActivityManagerService;->getFocusedStackId()I
+HPLcom/android/server/am/ActivityManagerService;->getGlobalConfiguration()Landroid/content/res/Configuration;
+HPLcom/android/server/am/ActivityManagerService;->getIntentForIntentSender(Landroid/content/IIntentSender;)Landroid/content/Intent;
+HPLcom/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;
+HPLcom/android/server/am/ActivityManagerService;->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/am/ActivityManagerService;->getLRURecordIndexForAppLocked(Landroid/app/IApplicationThread;)I
+HPLcom/android/server/am/ActivityManagerService;->getLastResumedActivityUserId()I
+HPLcom/android/server/am/ActivityManagerService;->getLockTaskModeState()I
+HPLcom/android/server/am/ActivityManagerService;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V
+HPLcom/android/server/am/ActivityManagerService;->getMemoryTrimLevel()I
+HPLcom/android/server/am/ActivityManagerService;->getMyMemoryState(Landroid/app/ActivityManager$RunningAppProcessInfo;)V
+HPLcom/android/server/am/ActivityManagerService;->getPackageForIntentSender(Landroid/content/IIntentSender;)Ljava/lang/String;
+HPLcom/android/server/am/ActivityManagerService;->getPackageManagerInternalLocked()Landroid/content/pm/PackageManagerInternal;
+HPLcom/android/server/am/ActivityManagerService;->getPackageProcessState(Ljava/lang/String;Ljava/lang/String;)I
+HPLcom/android/server/am/ActivityManagerService;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
+HPLcom/android/server/am/ActivityManagerService;->getProcessRecordLocked(Ljava/lang/String;IZ)Lcom/android/server/am/ProcessRecord;
+HPLcom/android/server/am/ActivityManagerService;->getRecentTasks(III)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/am/ActivityManagerService;->getRecordForAppLocked(Landroid/app/IApplicationThread;)Lcom/android/server/am/ProcessRecord;
+HPLcom/android/server/am/ActivityManagerService;->getRunningAppProcesses()Ljava/util/List;
+HPLcom/android/server/am/ActivityManagerService;->getStackInfo(I)Landroid/app/ActivityManager$StackInfo;
+HPLcom/android/server/am/ActivityManagerService;->getTagForIntentSender(Landroid/content/IIntentSender;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/am/ActivityManagerService;->getTagForIntentSenderLocked(Lcom/android/server/am/PendingIntentRecord;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/am/ActivityManagerService;->getTaskSnapshot(IZ)Landroid/app/ActivityManager$TaskSnapshot;
+HPLcom/android/server/am/ActivityManagerService;->getTasks(II)Ljava/util/List;
+HPLcom/android/server/am/ActivityManagerService;->getUidForIntentSender(Landroid/content/IIntentSender;)I
+HPLcom/android/server/am/ActivityManagerService;->grantEphemeralAccessLocked(ILandroid/content/Intent;II)V
+HPLcom/android/server/am/ActivityManagerService;->handleAppDiedLocked(Lcom/android/server/am/ProcessRecord;ZZ)V
+HPLcom/android/server/am/ActivityManagerService;->handleApplicationStrictModeViolation(Landroid/os/IBinder;ILandroid/os/StrictMode$ViolationInfo;)V
+HPLcom/android/server/am/ActivityManagerService;->handleIncomingUser(IIIZZLjava/lang/String;Ljava/lang/String;)I
+HPLcom/android/server/am/ActivityManagerService;->hasUsageStatsPermission(Ljava/lang/String;)Z
+HPLcom/android/server/am/ActivityManagerService;->idleUids()V
+HPLcom/android/server/am/ActivityManagerService;->incProviderCountLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ContentProviderRecord;Landroid/os/IBinder;Z)Lcom/android/server/am/ContentProviderConnection;
+HPLcom/android/server/am/ActivityManagerService;->incrementProcStateSeqAndNotifyAppsLocked()V
+HPLcom/android/server/am/ActivityManagerService;->isAppStartModeDisabled(ILjava/lang/String;)Z
+HPLcom/android/server/am/ActivityManagerService;->isGetTasksAllowed(Ljava/lang/String;II)Z
+HPLcom/android/server/am/ActivityManagerService;->isInMultiWindowMode(Landroid/os/IBinder;)Z
+HPLcom/android/server/am/ActivityManagerService;->isInstantApp(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;I)Z
+HPLcom/android/server/am/ActivityManagerService;->isOnDeviceIdleWhitelistLocked(I)Z
+HPLcom/android/server/am/ActivityManagerService;->isPendingBroadcastProcessLocked(I)Z
+HPLcom/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
+HPLcom/android/server/am/ActivityManagerService;->isShuttingDownLocked()Z
+HPLcom/android/server/am/ActivityManagerService;->isSingleton(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;I)Z
+HPLcom/android/server/am/ActivityManagerService;->isSleepingLocked()Z
+HPLcom/android/server/am/ActivityManagerService;->isTopOfTask(Landroid/os/IBinder;)Z
+HPLcom/android/server/am/ActivityManagerService;->isUserAMonkey()Z
+HPLcom/android/server/am/ActivityManagerService;->isUserRunning(II)Z
+HPLcom/android/server/am/ActivityManagerService;->killPackageProcessesLocked(Ljava/lang/String;IIIZZZZLjava/lang/String;)Z
+HPLcom/android/server/am/ActivityManagerService;->killProcessGroup(II)V
+HPLcom/android/server/am/ActivityManagerService;->logStrictModeViolationToDropBox(Lcom/android/server/am/ProcessRecord;Landroid/os/StrictMode$ViolationInfo;)V
+HPLcom/android/server/am/ActivityManagerService;->maybeUpdateProviderUsageStatsLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->maybeUpdateUsageStatsLocked(Lcom/android/server/am/ProcessRecord;J)V
+HPLcom/android/server/am/ActivityManagerService;->monitor()V
+HPLcom/android/server/am/ActivityManagerService;->newProcessRecordLocked(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ZI)Lcom/android/server/am/ProcessRecord;
+HPLcom/android/server/am/ActivityManagerService;->noteAlarmFinish(Landroid/content/IIntentSender;ILjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->noteAlarmStart(Landroid/content/IIntentSender;ILjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->noteUidProcessState(II)V
+HPLcom/android/server/am/ActivityManagerService;->noteWakeupAlarm(Landroid/content/IIntentSender;ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->notifyActivityDrawn(Landroid/os/IBinder;)V
+HPLcom/android/server/am/ActivityManagerService;->notifyPackageUse(Ljava/lang/String;I)V
+HPLcom/android/server/am/ActivityManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/server/am/ActivityManagerService;->procStateToImportance(IILandroid/app/ActivityManager$RunningAppProcessInfo;I)I
+HPLcom/android/server/am/ActivityManagerService;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V
+HPLcom/android/server/am/ActivityManagerService;->publishService(Landroid/os/IBinder;Landroid/content/Intent;Landroid/os/IBinder;)V
+HPLcom/android/server/am/ActivityManagerService;->recordPssSampleLocked(Lcom/android/server/am/ProcessRecord;IJJJJ)V
+HPLcom/android/server/am/ActivityManagerService;->refContentProvider(Landroid/os/IBinder;II)Z
+HPLcom/android/server/am/ActivityManagerService;->registerReceiver(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;
+HPLcom/android/server/am/ActivityManagerService;->removeContentProvider(Landroid/os/IBinder;Z)V
+HPLcom/android/server/am/ActivityManagerService;->removeDyingProviderLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ContentProviderRecord;Z)Z
+HPLcom/android/server/am/ActivityManagerService;->removeLruProcessLocked(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ActivityManagerService;->removeProcessNameLocked(Ljava/lang/String;I)Lcom/android/server/am/ProcessRecord;
+HPLcom/android/server/am/ActivityManagerService;->removeProcessNameLocked(Ljava/lang/String;ILcom/android/server/am/ProcessRecord;)Lcom/android/server/am/ProcessRecord;
+HPLcom/android/server/am/ActivityManagerService;->removeReceiverLocked(Lcom/android/server/am/ReceiverList;)V
+HPLcom/android/server/am/ActivityManagerService;->requestPssLocked(Lcom/android/server/am/ProcessRecord;I)V
+HPLcom/android/server/am/ActivityManagerService;->resetPriorityAfterLockedSection()V
+HPLcom/android/server/am/ActivityManagerService;->resumedAppLocked()Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityManagerService;->rotateBroadcastStatsIfNeededLocked()V
+HPLcom/android/server/am/ActivityManagerService;->scheduleAppGcsLocked()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
+HPLcom/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;->serviceDoneExecuting(Landroid/os/IBinder;III)V
+HPLcom/android/server/am/ActivityManagerService;->setAppIdTempWhitelistStateLocked(IZ)V
+HPLcom/android/server/am/ActivityManagerService;->setProcessTrackerStateLocked(Lcom/android/server/am/ProcessRecord;IJ)V
+HPLcom/android/server/am/ActivityManagerService;->setRenderThread(I)V
+HPLcom/android/server/am/ActivityManagerService;->setRequestedOrientation(Landroid/os/IBinder;I)V
+HPLcom/android/server/am/ActivityManagerService;->setResumedActivityUncheckLocked(Lcom/android/server/am/ActivityRecord;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->setTaskDescription(Landroid/os/IBinder;Landroid/app/ActivityManager$TaskDescription;)V
+HPLcom/android/server/am/ActivityManagerService;->showAskCompatModeDialogLocked(Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityManagerService;->skipCurrentReceiverLocked(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/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
+HPLcom/android/server/am/ActivityManagerService;->startAssociationLocked(ILjava/lang/String;IILandroid/content/ComponentName;Ljava/lang/String;)Lcom/android/server/am/ActivityManagerService$Association;
+HPLcom/android/server/am/ActivityManagerService;->startProcessLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->startProcessLocked(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;ZILjava/lang/String;Landroid/content/ComponentName;ZZIZLjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/Runnable;)Lcom/android/server/am/ProcessRecord;
+HPLcom/android/server/am/ActivityManagerService;->startProcessLocked(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;ZILjava/lang/String;Landroid/content/ComponentName;ZZZ)Lcom/android/server/am/ProcessRecord;
+HPLcom/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;->startServiceInPackage(ILandroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;I)Landroid/content/ComponentName;
+HPLcom/android/server/am/ActivityManagerService;->stopAssociationLocked(ILjava/lang/String;ILandroid/content/ComponentName;)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
+HPLcom/android/server/am/ActivityManagerService;->stringifyKBSize(J)Ljava/lang/String;
+HPLcom/android/server/am/ActivityManagerService;->stringifySize(JI)Ljava/lang/String;
+HPLcom/android/server/am/ActivityManagerService;->trimApplications()V
+HPLcom/android/server/am/ActivityManagerService;->uidOnBackgroundWhitelist(I)Z
+HPLcom/android/server/am/ActivityManagerService;->unbindService(Landroid/app/IServiceConnection;)Z
+HPLcom/android/server/am/ActivityManagerService;->unregisterReceiver(Landroid/content/IIntentReceiver;)V
+HPLcom/android/server/am/ActivityManagerService;->updateCpuStats()V
+HPLcom/android/server/am/ActivityManagerService;->updateCpuStatsNow()V
+HPLcom/android/server/am/ActivityManagerService;->updateDisplayOverrideConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/am/ActivityRecord;ZILcom/android/server/am/ActivityManagerService$UpdateConfigurationResult;)Z
+HPLcom/android/server/am/ActivityManagerService;->updateGlobalConfiguration(Landroid/content/res/Configuration;ZZIZ)I
+HPLcom/android/server/am/ActivityManagerService;->updateLruProcessInternalLocked(Lcom/android/server/am/ProcessRecord;JILjava/lang/String;Ljava/lang/Object;Lcom/android/server/am/ProcessRecord;)I
+HPLcom/android/server/am/ActivityManagerService;->updateLruProcessLocked(Lcom/android/server/am/ProcessRecord;ZLcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ActivityManagerService;->updateOomAdjLocked()V
+HPLcom/android/server/am/ActivityManagerService;->updateOomAdjLocked(Lcom/android/server/am/ProcessRecord;ILcom/android/server/am/ProcessRecord;ZJ)Z
+HPLcom/android/server/am/ActivityManagerService;->updateOomAdjLocked(Lcom/android/server/am/ProcessRecord;Z)Z
+HPLcom/android/server/am/ActivityManagerService;->updateProcessForegroundLocked(Lcom/android/server/am/ProcessRecord;ZZ)V
+HPLcom/android/server/am/ActivityManagerService;->updateUsageStats(Lcom/android/server/am/ActivityRecord;Z)V
+HPLcom/android/server/am/ActivityManagerService;->verifyBroadcastLocked(Landroid/content/Intent;)Landroid/content/Intent;
+HPLcom/android/server/am/ActivityManagerShellCommand;->runStartActivity(Ljava/io/PrintWriter;)I
+HPLcom/android/server/am/ActivityMetricsLogger;->allStacksWindowsDrawn()Z
+HPLcom/android/server/am/ActivityMetricsLogger;->isAnyTransitionActive()Z
+HPLcom/android/server/am/ActivityMetricsLogger;->logAppTransitionMultiEvents()V
+HPLcom/android/server/am/ActivityMetricsLogger;->logWindowState()V
+HPLcom/android/server/am/ActivityMetricsLogger;->notifyActivityLaunched(ILcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityMetricsLogger;->notifyActivityLaunched(ILcom/android/server/am/ActivityRecord;ZZ)V
+HPLcom/android/server/am/ActivityMetricsLogger;->notifyBindApplication(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ActivityMetricsLogger;->notifyStartingWindowDrawn(IJ)V
+HPLcom/android/server/am/ActivityMetricsLogger;->notifyTransitionStarting(Landroid/util/SparseIntArray;J)V
+HPLcom/android/server/am/ActivityMetricsLogger;->notifyVisibilityChanged(Lcom/android/server/am/ActivityRecord;Z)V
+HPLcom/android/server/am/ActivityMetricsLogger;->notifyWindowsDrawn(IJ)V
+HPLcom/android/server/am/ActivityRecord$Token;->-wrap0(Lcom/android/server/am/ActivityRecord$Token;)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityRecord$Token;->toString()Ljava/lang/String;
+HPLcom/android/server/am/ActivityRecord$Token;->tokenToActivityRecordLocked(Lcom/android/server/am/ActivityRecord$Token;)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityRecord;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;IILjava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/pm/ActivityInfo;Landroid/content/res/Configuration;Lcom/android/server/am/ActivityRecord;Ljava/lang/String;IZZLcom/android/server/am/ActivityStackSupervisor;Landroid/app/ActivityOptions;Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityRecord;->activityStoppedLocked(Landroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/lang/CharSequence;)V
+HPLcom/android/server/am/ActivityRecord;->applyOptionsLocked()V
+HPLcom/android/server/am/ActivityRecord;->canShowWhenLocked()Z
+HPLcom/android/server/am/ActivityRecord;->canTurnScreenOn()Z
+HPLcom/android/server/am/ActivityRecord;->checkEnterPictureInPictureState(Ljava/lang/String;Z)Z
+HPLcom/android/server/am/ActivityRecord;->completeResumeLocked()V
+HPLcom/android/server/am/ActivityRecord;->computeBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/am/ActivityRecord;->continueLaunchTickingLocked()Z
+HPLcom/android/server/am/ActivityRecord;->createWindowContainer()V
+HPLcom/android/server/am/ActivityRecord;->ensureActivityConfigurationLocked(IZ)Z
+HPLcom/android/server/am/ActivityRecord;->finishLaunchTickingLocked()V
+HPLcom/android/server/am/ActivityRecord;->forTokenLocked(Landroid/os/IBinder;)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityRecord;->getDisplayId()I
+HPLcom/android/server/am/ActivityRecord;->getParent()Lcom/android/server/am/ConfigurationContainer;
+HPLcom/android/server/am/ActivityRecord;->getStack()Lcom/android/server/am/ActivityStack;
+HPLcom/android/server/am/ActivityRecord;->getStackId()I
+HPLcom/android/server/am/ActivityRecord;->getStackLocked(Landroid/os/IBinder;)Lcom/android/server/am/ActivityStack;
+HPLcom/android/server/am/ActivityRecord;->getTask()Lcom/android/server/am/TaskRecord;
+HPLcom/android/server/am/ActivityRecord;->handleAlreadyVisible()Z
+HPLcom/android/server/am/ActivityRecord;->hasDismissKeyguardWindows()Z
+HPLcom/android/server/am/ActivityRecord;->isAssistantActivity()Z
+HPLcom/android/server/am/ActivityRecord;->isConfigurationCompatible(Landroid/content/res/Configuration;)Z
+HPLcom/android/server/am/ActivityRecord;->isFocusable()Z
+HPLcom/android/server/am/ActivityRecord;->isHomeActivity()Z
+HPLcom/android/server/am/ActivityRecord;->isInStackLocked(Landroid/os/IBinder;)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityRecord;->isPersistable()Z
+HPLcom/android/server/am/ActivityRecord;->isRecentsActivity()Z
+HPLcom/android/server/am/ActivityRecord;->isResolverActivity()Z
+HPLcom/android/server/am/ActivityRecord;->okToShowLocked()Z
+HPLcom/android/server/am/ActivityRecord;->onOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLcom/android/server/am/ActivityRecord;->onStartingWindowDrawn(J)V
+HPLcom/android/server/am/ActivityRecord;->onWindowsDrawn(J)V
+HPLcom/android/server/am/ActivityRecord;->onWindowsVisible()V
+HPLcom/android/server/am/ActivityRecord;->removeOrphanedStartingWindow(Z)V
+HPLcom/android/server/am/ActivityRecord;->reportLaunchTimeLocked(J)V
+HPLcom/android/server/am/ActivityRecord;->resumeKeyDispatchingLocked()V
+HPLcom/android/server/am/ActivityRecord;->setActivityType(ZILandroid/content/Intent;Landroid/app/ActivityOptions;Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityRecord;->setTask(Lcom/android/server/am/TaskRecord;)V
+HPLcom/android/server/am/ActivityRecord;->setTask(Lcom/android/server/am/TaskRecord;Z)V
+HPLcom/android/server/am/ActivityRecord;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V
+HPLcom/android/server/am/ActivityRecord;->setVisibility(Z)V
+HPLcom/android/server/am/ActivityRecord;->setVisible(Z)V
+HPLcom/android/server/am/ActivityRecord;->shouldBeVisibleIgnoringKeyguard(Z)Z
+HPLcom/android/server/am/ActivityRecord;->showStartingWindow(Lcom/android/server/am/ActivityRecord;ZZZ)V
+HPLcom/android/server/am/ActivityRecord;->startLaunchTickingLocked()V
+HPLcom/android/server/am/ActivityRecord;->stopFreezingScreenLocked(Z)V
+HPLcom/android/server/am/ActivityRecord;->supportsPictureInPicture()Z
+HPLcom/android/server/am/ActivityRecord;->toString()Ljava/lang/String;
+HPLcom/android/server/am/ActivityRecord;->updateOverrideConfiguration()V
+HPLcom/android/server/am/ActivityStack$ActivityStackHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/am/ActivityStack;->activityDestroyedLocked(Landroid/os/IBinder;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityStack;->activityPausedLocked(Landroid/os/IBinder;Z)V
+HPLcom/android/server/am/ActivityStack;->addTask(Lcom/android/server/am/TaskRecord;IZLjava/lang/String;)V
+HPLcom/android/server/am/ActivityStack;->addToStopping(Lcom/android/server/am/ActivityRecord;ZZ)V
+HPLcom/android/server/am/ActivityStack;->adjustFocusedActivityStackLocked(Lcom/android/server/am/ActivityRecord;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityStack;->canShowWithInsecureKeyguard()Z
+HPLcom/android/server/am/ActivityStack;->cancelInitializingActivities()V
+HPLcom/android/server/am/ActivityStack;->checkKeyguardVisibility(Lcom/android/server/am/ActivityRecord;ZZ)Z
+HPLcom/android/server/am/ActivityStack;->checkReadyForSleep()V
+HPLcom/android/server/am/ActivityStack;->checkTranslucentActivityWaiting(Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityStack;->cleanUpActivityLocked(Lcom/android/server/am/ActivityRecord;ZZ)V
+HPLcom/android/server/am/ActivityStack;->closeSystemDialogsLocked()V
+HPLcom/android/server/am/ActivityStack;->completePauseLocked(ZLcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityStack;->destroyActivityLocked(Lcom/android/server/am/ActivityRecord;ZLjava/lang/String;)Z
+HPLcom/android/server/am/ActivityStack;->ensureActivitiesVisibleLocked(Lcom/android/server/am/ActivityRecord;IZ)V
+HPLcom/android/server/am/ActivityStack;->executeAppTransition(Landroid/app/ActivityOptions;)V
+HPLcom/android/server/am/ActivityStack;->findStackInsertIndex(Z)I
+HPLcom/android/server/am/ActivityStack;->findTaskLocked(Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/ActivityStackSupervisor$FindTaskResult;)V
+HPLcom/android/server/am/ActivityStack;->finishActivityLocked(Lcom/android/server/am/ActivityRecord;ILandroid/content/Intent;Ljava/lang/String;ZZ)Z
+HPLcom/android/server/am/ActivityStack;->finishCurrentActivityLocked(Lcom/android/server/am/ActivityRecord;IZ)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStack;->finishDisabledPackageActivitiesLocked(Ljava/lang/String;Ljava/util/Set;ZZI)Z
+HPLcom/android/server/am/ActivityStack;->getAdjustedPositionForTask(Lcom/android/server/am/TaskRecord;ILcom/android/server/am/ActivityRecord;)I
+HPLcom/android/server/am/ActivityStack;->getAllRunningVisibleActivitiesLocked(Ljava/util/ArrayList;)V
+HPLcom/android/server/am/ActivityStack;->getAllTasks()Ljava/util/ArrayList;
+HPLcom/android/server/am/ActivityStack;->getDisplay()Lcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;
+HPLcom/android/server/am/ActivityStack;->getStackId()I
+HPLcom/android/server/am/ActivityStack;->getTasksLocked(Ljava/util/List;IZ)V
+HPLcom/android/server/am/ActivityStack;->getTopDismissingKeyguardActivity()Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStack;->getTopStackOnDisplay()Lcom/android/server/am/ActivityStack;
+HPLcom/android/server/am/ActivityStack;->getWindowContainerBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/am/ActivityStack;->handleAppDiedLocked(Lcom/android/server/am/ProcessRecord;)Z
+HPLcom/android/server/am/ActivityStack;->insertTaskAtTop(Lcom/android/server/am/TaskRecord;Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityStack;->isAssistantStack()Z
+HPLcom/android/server/am/ActivityStack;->isAttached()Z
+HPLcom/android/server/am/ActivityStack;->isDockedStack()Z
+HPLcom/android/server/am/ActivityStack;->isFocusable()Z
+HPLcom/android/server/am/ActivityStack;->isHomeOrRecentsStack()Z
+HPLcom/android/server/am/ActivityStack;->isInStackLocked(Landroid/os/IBinder;)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStack;->isInStackLocked(Lcom/android/server/am/ActivityRecord;)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStack;->isPinnedStack()Z
+HPLcom/android/server/am/ActivityStack;->isStackTranslucent(Lcom/android/server/am/ActivityRecord;I)Z
+HPLcom/android/server/am/ActivityStack;->logStartActivity(ILcom/android/server/am/ActivityRecord;Lcom/android/server/am/TaskRecord;)V
+HPLcom/android/server/am/ActivityStack;->makeInvisible(Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityStack;->moveTaskToFrontLocked(Lcom/android/server/am/TaskRecord;ZLandroid/app/ActivityOptions;Lcom/android/server/am/AppTimeTracker;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityStack;->moveToFront(Ljava/lang/String;Lcom/android/server/am/TaskRecord;)V
+HPLcom/android/server/am/ActivityStack;->numActivities()I
+HPLcom/android/server/am/ActivityStack;->rankTaskLayers(I)I
+HPLcom/android/server/am/ActivityStack;->removeActivityFromHistoryLocked(Lcom/android/server/am/ActivityRecord;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityStack;->removeHistoryRecordsForAppLocked(Lcom/android/server/am/ProcessRecord;)Z
+HPLcom/android/server/am/ActivityStack;->removeHistoryRecordsForAppLocked(Ljava/util/ArrayList;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityStack;->removeTask(Lcom/android/server/am/TaskRecord;Ljava/lang/String;I)V
+HPLcom/android/server/am/ActivityStack;->removeTimeoutsForActivityLocked(Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityStack;->resetAffinityTaskIfNeededLocked(Lcom/android/server/am/TaskRecord;Lcom/android/server/am/TaskRecord;ZZI)I
+HPLcom/android/server/am/ActivityStack;->resetTaskIfNeededLocked(Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/ActivityRecord;)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStack;->resumeTopActivityInnerLocked(Lcom/android/server/am/ActivityRecord;Landroid/app/ActivityOptions;)Z
+HPLcom/android/server/am/ActivityStack;->resumeTopActivityUncheckedLocked(Lcom/android/server/am/ActivityRecord;Landroid/app/ActivityOptions;)Z
+HPLcom/android/server/am/ActivityStack;->schedulePauseTimeout(Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityStack;->setLaunchTime(Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityStack;->setResumedActivityLocked(Lcom/android/server/am/ActivityRecord;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityStack;->shouldBeVisible(Lcom/android/server/am/ActivityRecord;)I
+HPLcom/android/server/am/ActivityStack;->shouldSleepActivities()Z
+HPLcom/android/server/am/ActivityStack;->shouldSleepOrShutDownActivities()Z
+HPLcom/android/server/am/ActivityStack;->startActivityLocked(Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/ActivityRecord;ZZLandroid/app/ActivityOptions;)V
+HPLcom/android/server/am/ActivityStack;->startLaunchTraces(Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityStack;->startPausingLocked(ZZLcom/android/server/am/ActivityRecord;Z)Z
+HPLcom/android/server/am/ActivityStack;->stopActivityLocked(Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityStack;->taskForIdLocked(I)Lcom/android/server/am/TaskRecord;
+HPLcom/android/server/am/ActivityStack;->topActivity()Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStack;->topActivityOccludesKeyguard()Z
+HPLcom/android/server/am/ActivityStack;->topRunningActivityLocked()Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStack;->topRunningActivityLocked(Z)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStack;->topRunningNonDelayedActivityLocked(Lcom/android/server/am/ActivityRecord;)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStack;->topTask()Lcom/android/server/am/TaskRecord;
+HPLcom/android/server/am/ActivityStack;->updateActivityApplicationInfoLocked(Landroid/content/pm/ApplicationInfo;)V
+HPLcom/android/server/am/ActivityStack;->updateBehindFullscreen(ZZLcom/android/server/am/TaskRecord;Lcom/android/server/am/ActivityRecord;)Z
+HPLcom/android/server/am/ActivityStack;->updateTaskMovement(Lcom/android/server/am/TaskRecord;Z)V
+HPLcom/android/server/am/ActivityStack;->updateTaskReturnToForTopInsertion(Lcom/android/server/am/TaskRecord;)V
+HPLcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;->isPrivate()Z
+HPLcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;->isSleeping()Z
+HPLcom/android/server/am/ActivityStackSupervisor$ActivityStackSupervisorHandler;->activityIdleInternal(Lcom/android/server/am/ActivityRecord;Z)V
+HPLcom/android/server/am/ActivityStackSupervisor$ActivityStackSupervisorHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/am/ActivityStackSupervisor;->acquireLaunchWakelock()V
+HPLcom/android/server/am/ActivityStackSupervisor;->activityIdleInternalLocked(Landroid/os/IBinder;ZZLandroid/content/res/Configuration;)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStackSupervisor;->allPausedActivitiesComplete()Z
+HPLcom/android/server/am/ActivityStackSupervisor;->allResumedActivitiesComplete()Z
+HPLcom/android/server/am/ActivityStackSupervisor;->allResumedActivitiesIdle()Z
+HPLcom/android/server/am/ActivityStackSupervisor;->allResumedActivitiesVisible()Z
+HPLcom/android/server/am/ActivityStackSupervisor;->anyTaskForIdLocked(III)Lcom/android/server/am/TaskRecord;
+HPLcom/android/server/am/ActivityStackSupervisor;->attachApplicationLocked(Lcom/android/server/am/ProcessRecord;)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->cancelInitializingActivities()V
+HPLcom/android/server/am/ActivityStackSupervisor;->checkActivityBelongsInStack(Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/ActivityStack;)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->checkStartAnyActivityPermission(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/String;IIILjava/lang/String;ZLcom/android/server/am/ProcessRecord;Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/ActivityStack;Landroid/app/ActivityOptions;)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->continueUpdateBounds(I)V
+HPLcom/android/server/am/ActivityStackSupervisor;->ensureActivitiesVisibleLocked(Lcom/android/server/am/ActivityRecord;IZ)V
+HPLcom/android/server/am/ActivityStackSupervisor;->findTaskLocked(Lcom/android/server/am/ActivityRecord;I)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStackSupervisor;->finishDisabledPackageActivitiesLocked(Ljava/lang/String;Ljava/util/Set;ZZI)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->getActivityDisplay(I)Lcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;
+HPLcom/android/server/am/ActivityStackSupervisor;->getActivityDisplayOrCreateLocked(I)Lcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;
+HPLcom/android/server/am/ActivityStackSupervisor;->getDisplayOverrideConfiguration(I)Landroid/content/res/Configuration;
+HPLcom/android/server/am/ActivityStackSupervisor;->getFocusedStack()Lcom/android/server/am/ActivityStack;
+HPLcom/android/server/am/ActivityStackSupervisor;->getLastStack()Lcom/android/server/am/ActivityStack;
+HPLcom/android/server/am/ActivityStackSupervisor;->getResumedActivityLocked()Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStackSupervisor;->getStack(I)Lcom/android/server/am/ActivityStack;
+HPLcom/android/server/am/ActivityStackSupervisor;->getStack(IZZ)Lcom/android/server/am/ActivityStack;
+HPLcom/android/server/am/ActivityStackSupervisor;->getStackInfoLocked(I)Landroid/app/ActivityManager$StackInfo;
+HPLcom/android/server/am/ActivityStackSupervisor;->getStackInfoLocked(Lcom/android/server/am/ActivityStack;)Landroid/app/ActivityManager$StackInfo;
+HPLcom/android/server/am/ActivityStackSupervisor;->getStacksOnDefaultDisplay()Ljava/util/ArrayList;
+HPLcom/android/server/am/ActivityStackSupervisor;->getTasksLocked(ILjava/util/List;IZ)V
+HPLcom/android/server/am/ActivityStackSupervisor;->handleAppDiedLocked(Lcom/android/server/am/ProcessRecord;)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->handleNonResizableTaskIfNeeded(Lcom/android/server/am/TaskRecord;IIIZ)V
+HPLcom/android/server/am/ActivityStackSupervisor;->isCurrentProfileLocked(I)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->isFocusedStack(Lcom/android/server/am/ActivityStack;)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->isFrontOfStackList(Lcom/android/server/am/ActivityStack;Ljava/util/List;)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->isFrontStackOnDisplay(Lcom/android/server/am/ActivityStack;)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->isInAnyStackLocked(Landroid/os/IBinder;)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStackSupervisor;->isStackDockedInEffect(I)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->isStoppingNoHistoryActivity()Z
+HPLcom/android/server/am/ActivityStackSupervisor;->moveFocusableActivityStackToFrontLocked(Lcom/android/server/am/ActivityRecord;Ljava/lang/String;)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->notifyAppTransitionDone()V
+HPLcom/android/server/am/ActivityStackSupervisor;->pauseBackStacks(ZLcom/android/server/am/ActivityRecord;Z)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->processStoppingActivitiesLocked(Lcom/android/server/am/ActivityRecord;ZZ)Ljava/util/ArrayList;
+HPLcom/android/server/am/ActivityStackSupervisor;->rankTaskLayersIfNeeded()V
+HPLcom/android/server/am/ActivityStackSupervisor;->readyToResume()Z
+HPLcom/android/server/am/ActivityStackSupervisor;->realStartActivityLocked(Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/ProcessRecord;ZZ)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->removeTimeoutsForActivityLocked(Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityStackSupervisor;->reportResumedActivityLocked(Lcom/android/server/am/ActivityRecord;)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->resolveActivity(Landroid/content/Intent;Landroid/content/pm/ResolveInfo;ILandroid/app/ProfilerInfo;)Landroid/content/pm/ActivityInfo;
+HPLcom/android/server/am/ActivityStackSupervisor;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo;
+HPLcom/android/server/am/ActivityStackSupervisor;->resumeFocusedStackTopActivityLocked(Lcom/android/server/am/ActivityStack;Lcom/android/server/am/ActivityRecord;Landroid/app/ActivityOptions;)Z
+HPLcom/android/server/am/ActivityStackSupervisor;->scheduleIdleLocked()V
+HPLcom/android/server/am/ActivityStackSupervisor;->scheduleIdleTimeoutLocked(Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityStackSupervisor;->sendWaitingVisibleReportLocked(Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityStackSupervisor;->setFocusStackUnchecked(Ljava/lang/String;Lcom/android/server/am/ActivityStack;)V
+HPLcom/android/server/am/ActivityStackSupervisor;->setLaunchSource(I)V
+HPLcom/android/server/am/ActivityStackSupervisor;->startSpecificActivityLocked(Lcom/android/server/am/ActivityRecord;ZZ)V
+HPLcom/android/server/am/ActivityStackSupervisor;->topRunningActivityLocked()Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStackSupervisor;->updatePreviousProcessLocked(Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityStackSupervisor;->updateUIDsPresentOnDisplay()V
+HPLcom/android/server/am/ActivityStartInterceptor;->intercept(Landroid/content/Intent;Landroid/content/pm/ResolveInfo;Landroid/content/pm/ActivityInfo;Ljava/lang/String;Lcom/android/server/am/TaskRecord;IILandroid/app/ActivityOptions;)V
+HPLcom/android/server/am/ActivityStarter;->computeStackFocus(Lcom/android/server/am/ActivityRecord;ZLandroid/graphics/Rect;ILandroid/app/ActivityOptions;)Lcom/android/server/am/ActivityStack;
+HPLcom/android/server/am/ActivityStarter;->getLaunchStack(Lcom/android/server/am/ActivityRecord;ILcom/android/server/am/TaskRecord;Landroid/app/ActivityOptions;)Lcom/android/server/am/ActivityStack;
+HPLcom/android/server/am/ActivityStarter;->postStartActivityProcessing(Lcom/android/server/am/ActivityRecord;IILcom/android/server/am/ActivityRecord;Lcom/android/server/am/ActivityStack;)V
+HPLcom/android/server/am/ActivityStarter;->sendPowerHintForLaunchStartIfNeeded(ZLcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/ActivityStarter;->setInitialState(Lcom/android/server/am/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/am/TaskRecord;ZILcom/android/server/am/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;)V
+HPLcom/android/server/am/ActivityStarter;->setTargetStackAndMoveToFrontIfNeeded(Lcom/android/server/am/ActivityRecord;)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/ActivityStarter;->setTaskFromReuseOrCreateNewTask(Lcom/android/server/am/TaskRecord;ILcom/android/server/am/ActivityStack;)I
+HPLcom/android/server/am/ActivityStarter;->startActivity(Landroid/app/IApplicationThread;Landroid/content/Intent;Landroid/content/Intent;Ljava/lang/String;Landroid/content/pm/ActivityInfo;Landroid/content/pm/ResolveInfo;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Landroid/os/IBinder;Ljava/lang/String;IIILjava/lang/String;IIILandroid/app/ActivityOptions;ZZ[Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/TaskRecord;)I
+HPLcom/android/server/am/ActivityStarter;->startActivity(Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;IZLandroid/app/ActivityOptions;Lcom/android/server/am/TaskRecord;[Lcom/android/server/am/ActivityRecord;)I
+HPLcom/android/server/am/ActivityStarter;->startActivityLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Landroid/content/Intent;Ljava/lang/String;Landroid/content/pm/ActivityInfo;Landroid/content/pm/ResolveInfo;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Landroid/os/IBinder;Ljava/lang/String;IIILjava/lang/String;IIILandroid/app/ActivityOptions;ZZ[Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/TaskRecord;Ljava/lang/String;)I
+HPLcom/android/server/am/ActivityStarter;->startActivityMayWait(Landroid/app/IApplicationThread;ILjava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/app/WaitResult;Landroid/content/res/Configuration;Landroid/os/Bundle;ZILcom/android/server/am/TaskRecord;Ljava/lang/String;)I
+HPLcom/android/server/am/ActivityStarter;->startActivityUnchecked(Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;IZLandroid/app/ActivityOptions;Lcom/android/server/am/TaskRecord;[Lcom/android/server/am/ActivityRecord;)I
+HPLcom/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/AppErrors;->isBadProcessLocked(Landroid/content/pm/ApplicationInfo;)Z
+HPLcom/android/server/am/AppErrors;->resetProcessCrashTimeLocked(Landroid/content/pm/ApplicationInfo;)V
+HPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleRunnable(Ljava/lang/Runnable;)V
+HPLcom/android/server/am/BatteryStatsService;->enforceCallingPermission()V
+HPLcom/android/server/am/BatteryStatsService;->getService()Lcom/android/internal/app/IBatteryStats;
+HPLcom/android/server/am/BatteryStatsService;->isOnBattery()Z
+HPLcom/android/server/am/BatteryStatsService;->lambda$-com_android_server_am_BatteryStatsService_31479(IIIIIIII)V
+HPLcom/android/server/am/BatteryStatsService;->noteAlarmFinish(Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteAlarmStart(Ljava/lang/String;I)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
+HPLcom/android/server/am/BatteryStatsService;->noteEvent(ILjava/lang/String;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;->noteJobFinish(Ljava/lang/String;II)V
+HPLcom/android/server/am/BatteryStatsService;->noteJobStart(Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteNetworkInterfaceType(Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteProcessFinish(Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteProcessStart(Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteStartAudio(I)V
+HPLcom/android/server/am/BatteryStatsService;->noteStartSensor(II)V
+HPLcom/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
+HPLcom/android/server/am/BatteryStatsService;->noteStopAudio(I)V
+HPLcom/android/server/am/BatteryStatsService;->noteStopSensor(II)V
+HPLcom/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
+HPLcom/android/server/am/BatteryStatsService;->noteUidProcessState(II)V
+HPLcom/android/server/am/BatteryStatsService;->noteUserActivity(II)V
+HPLcom/android/server/am/BatteryStatsService;->noteWifiRadioPowerState(IJI)V
+HPLcom/android/server/am/BatteryStatsService;->noteWifiScanStartedFromSource(Landroid/os/WorkSource;)V
+HPLcom/android/server/am/BatteryStatsService;->noteWifiScanStoppedFromSource(Landroid/os/WorkSource;)V
+HPLcom/android/server/am/BatteryStatsService;->setBatteryState(IIIIIIII)V
+HPLcom/android/server/am/BroadcastFilter;-><init>(Landroid/content/IntentFilter;Lcom/android/server/am/ReceiverList;Ljava/lang/String;Ljava/lang/String;IIZZ)V
+HPLcom/android/server/am/BroadcastQueue$BroadcastHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/am/BroadcastQueue;->addBroadcastToHistoryLocked(Lcom/android/server/am/BroadcastRecord;)V
+HPLcom/android/server/am/BroadcastQueue;->backgroundServicesFinishedLocked(I)V
+HPLcom/android/server/am/BroadcastQueue;->cancelBroadcastTimeoutLocked()V
+HPLcom/android/server/am/BroadcastQueue;->cleanupDisabledPackageReceiversLocked(Ljava/lang/String;Ljava/util/Set;IZ)Z
+HPLcom/android/server/am/BroadcastQueue;->deliverToRegisteredReceiverLocked(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastFilter;ZI)V
+HPLcom/android/server/am/BroadcastQueue;->enqueueBroadcastHelper(Lcom/android/server/am/BroadcastRecord;)V
+HPLcom/android/server/am/BroadcastQueue;->enqueueOrderedBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)V
+HPLcom/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
+HPLcom/android/server/am/BroadcastQueue;->getMatchingOrderedReceiver(Landroid/os/IBinder;)Lcom/android/server/am/BroadcastRecord;
+HPLcom/android/server/am/BroadcastQueue;->isPendingBroadcastProcessLocked(I)Z
+HPLcom/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;->processCurBroadcastLocked(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/BroadcastQueue;->processNextBroadcast(Z)V
+HPLcom/android/server/am/BroadcastQueue;->replaceBroadcastLocked(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;)Lcom/android/server/am/BroadcastRecord;
+HPLcom/android/server/am/BroadcastQueue;->replaceParallelBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)Lcom/android/server/am/BroadcastRecord;
+HPLcom/android/server/am/BroadcastQueue;->ringAdvance(III)I
+HPLcom/android/server/am/BroadcastQueue;->scheduleBroadcastsLocked()V
+HPLcom/android/server/am/BroadcastQueue;->setBroadcastTimeoutLocked(J)V
+HPLcom/android/server/am/BroadcastQueue;->skipCurrentReceiverLocked(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/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;ZZZI)V
+HPLcom/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
+HPLcom/android/server/am/BroadcastRecord;->maybeStripForHistory()Lcom/android/server/am/BroadcastRecord;
+HPLcom/android/server/am/BroadcastStats$ActionEntry;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/am/BroadcastStats$PackageEntry;-><init>()V
+HPLcom/android/server/am/BroadcastStats;->addBackgroundCheckViolation(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/am/BroadcastStats;->addBroadcast(Ljava/lang/String;Ljava/lang/String;IIJ)V
+HPLcom/android/server/am/CompatModePackages;->compatibilityInfoForPackageLocked(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/CompatibilityInfo;
+HPLcom/android/server/am/CompatModePackages;->getPackageFlags(Ljava/lang/String;)I
+HPLcom/android/server/am/ConfigurationContainer;->getConfiguration()Landroid/content/res/Configuration;
+HPLcom/android/server/am/ConfigurationContainer;->getOverrideConfiguration()Landroid/content/res/Configuration;
+HPLcom/android/server/am/ConfigurationContainer;->onMergedOverrideConfigurationChanged()V
+HPLcom/android/server/am/ConfigurationContainer;->onParentChanged()V
+HPLcom/android/server/am/ConnectionRecord;-><init>(Lcom/android/server/am/AppBindRecord;Lcom/android/server/am/ActivityRecord;Landroid/app/IServiceConnection;IILandroid/app/PendingIntent;)V
+HPLcom/android/server/am/ContentProviderConnection;-><init>(Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ContentProviderRecord;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/pm/ProviderInfo;Landroid/content/pm/ApplicationInfo;Landroid/content/ComponentName;Z)V
+HPLcom/android/server/am/ContentProviderRecord;->canRunHere(Lcom/android/server/am/ProcessRecord;)Z
+HPLcom/android/server/am/ContentProviderRecord;->hasExternalProcessHandles()Z
+HPLcom/android/server/am/ContentProviderRecord;->newHolder(Lcom/android/server/am/ContentProviderConnection;)Landroid/app/ContentProviderHolder;
+HPLcom/android/server/am/CoreSettingsObserver;->getCoreSettingsLocked()Landroid/os/Bundle;
+HPLcom/android/server/am/EventLogTags;->writeAmFocusedStack(IIILjava/lang/String;)V
+HPLcom/android/server/am/EventLogTags;->writeAmPss(IILjava/lang/String;JJJ)V
+HPLcom/android/server/am/EventLogTags;->writeAmSetResumedActivity(ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/am/EventLogTags;->writeAmStopActivity(IILjava/lang/String;)V
+HPLcom/android/server/am/EventLogTags;->writeAmUidActive(I)V
+HPLcom/android/server/am/EventLogTags;->writeAmUidRunning(I)V
+HPLcom/android/server/am/EventLogTags;->writeAmUidStopped(I)V
+HPLcom/android/server/am/IntentBindRecord;-><init>(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent$FilterComparison;)V
+HPLcom/android/server/am/KeyguardController;->beginActivityVisibilityUpdate()V
+HPLcom/android/server/am/KeyguardController;->endActivityVisibilityUpdate()V
+HPLcom/android/server/am/KeyguardController;->isKeyguardLocked()Z
+HPLcom/android/server/am/KeyguardController;->isKeyguardShowing()Z
+HPLcom/android/server/am/KeyguardController;->visibilitiesUpdated()V
+HPLcom/android/server/am/PendingIntentRecord$Key;-><init>(ILjava/lang/String;Lcom/android/server/am/ActivityRecord;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;I)V
+HPLcom/android/server/am/PendingIntentRecord$Key;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/am/PendingIntentRecord$Key;->hashCode()I
+HPLcom/android/server/am/PendingIntentRecord;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/PendingIntentRecord$Key;I)V
+HPLcom/android/server/am/PendingIntentRecord;->completeFinalize()V
+HPLcom/android/server/am/PendingIntentRecord;->finalize()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
+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/ProcessList;->computeNextPssTime(IZZZJ)J
+HPLcom/android/server/am/ProcessList;->procStatesDifferForMem(II)Z
+HPLcom/android/server/am/ProcessList;->remove(I)V
+HPLcom/android/server/am/ProcessList;->setOomAdj(III)V
+HPLcom/android/server/am/ProcessList;->writeLmkd(Ljava/nio/ByteBuffer;)V
+HPLcom/android/server/am/ProcessRecord;-><init>(Lcom/android/internal/os/BatteryStatsImpl;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;I)V
+HPLcom/android/server/am/ProcessRecord;->addPackage(Ljava/lang/String;ILcom/android/server/am/ProcessStatsService;)Z
+HPLcom/android/server/am/ProcessRecord;->forceProcessStateUpTo(I)V
+HPLcom/android/server/am/ProcessRecord;->getPackageList()[Ljava/lang/String;
+HPLcom/android/server/am/ProcessRecord;->getSetAdjWithServices()I
+HPLcom/android/server/am/ProcessRecord;->kill(Ljava/lang/String;Z)V
+HPLcom/android/server/am/ProcessRecord;->makeActive(Landroid/app/IApplicationThread;Lcom/android/server/am/ProcessStatsService;)V
+HPLcom/android/server/am/ProcessRecord;->makeInactive(Lcom/android/server/am/ProcessStatsService;)V
+HPLcom/android/server/am/ProcessRecord;->modifyRawOomAdj(I)I
+HPLcom/android/server/am/ProcessRecord;->resetPackageList(Lcom/android/server/am/ProcessStatsService;)V
+HPLcom/android/server/am/ProcessRecord;->setPid(I)V
+HPLcom/android/server/am/ProcessRecord;->toShortString()Ljava/lang/String;
+HPLcom/android/server/am/ProcessRecord;->toShortString(Ljava/lang/StringBuilder;)V
+HPLcom/android/server/am/ProcessRecord;->unlinkDeathRecipient()V
+HPLcom/android/server/am/ProcessStatsService;->getMemFactorLocked()I
+HPLcom/android/server/am/ProcessStatsService;->getProcessStateLocked(Ljava/lang/String;IILjava/lang/String;)Lcom/android/internal/app/procstats/ProcessState;
+HPLcom/android/server/am/ProcessStatsService;->getServiceStateLocked(Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;)Lcom/android/internal/app/procstats/ServiceState;
+HPLcom/android/server/am/ProcessStatsService;->setMemFactorLocked(IZJ)Z
+HPLcom/android/server/am/ProcessStatsService;->shouldWriteNowLocked(J)Z
+HPLcom/android/server/am/ProviderMap;->collectPackageProvidersLocked(Ljava/lang/String;Ljava/util/Set;ZZLjava/util/HashMap;Ljava/util/ArrayList;)Z
+HPLcom/android/server/am/ProviderMap;->getProviderByClass(Landroid/content/ComponentName;I)Lcom/android/server/am/ContentProviderRecord;
+HPLcom/android/server/am/ProviderMap;->getProviderByName(Ljava/lang/String;I)Lcom/android/server/am/ContentProviderRecord;
+HPLcom/android/server/am/ProviderMap;->getProvidersByClass(I)Ljava/util/HashMap;
+HPLcom/android/server/am/ProviderMap;->getProvidersByName(I)Ljava/util/HashMap;
+HPLcom/android/server/am/ProviderMap;->putProviderByClass(Landroid/content/ComponentName;Lcom/android/server/am/ContentProviderRecord;)V
+HPLcom/android/server/am/ProviderMap;->putProviderByName(Ljava/lang/String;Lcom/android/server/am/ContentProviderRecord;)V
+HPLcom/android/server/am/ProviderMap;->removeProviderByClass(Landroid/content/ComponentName;I)V
+HPLcom/android/server/am/ProviderMap;->removeProviderByName(Ljava/lang/String;I)V
+HPLcom/android/server/am/ReceiverList;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;IIILandroid/content/IIntentReceiver;)V
+HPLcom/android/server/am/ReceiverList;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/am/ReceiverList;->hashCode()I
+HPLcom/android/server/am/RecentTasks;->addLocked(Lcom/android/server/am/TaskRecord;)V
+HPLcom/android/server/am/RecentTasks;->notifyTaskPersisterLocked(Lcom/android/server/am/TaskRecord;Z)V
+HPLcom/android/server/am/RecentTasks;->shouldPersistTaskLocked(Lcom/android/server/am/TaskRecord;)Z
+HPLcom/android/server/am/RecentTasks;->syncPersistentTaskIdsLocked()V
+HPLcom/android/server/am/RecentTasks;->taskForIdLocked(I)Lcom/android/server/am/TaskRecord;
+HPLcom/android/server/am/RecentTasks;->trimForTaskLocked(Lcom/android/server/am/TaskRecord;Z)I
+HPLcom/android/server/am/RecentTasks;->usersWithRecentsLoadedLocked()[I
+HPLcom/android/server/am/ServiceRecord$StartItem;-><init>(Lcom/android/server/am/ServiceRecord;ZILandroid/content/Intent;Lcom/android/server/am/ActivityManagerService$NeededUriGrants;I)V
+HPLcom/android/server/am/ServiceRecord$StartItem;->removeUriPermissionsLocked()V
+HPLcom/android/server/am/ServiceRecord;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;Landroid/content/ComponentName;Landroid/content/Intent$FilterComparison;Landroid/content/pm/ServiceInfo;ZLjava/lang/Runnable;)V
+HPLcom/android/server/am/ServiceRecord;->clearDeliveredStartsLocked()V
+HPLcom/android/server/am/ServiceRecord;->findDeliveredStart(IZ)Lcom/android/server/am/ServiceRecord$StartItem;
+HPLcom/android/server/am/ServiceRecord;->getLastStartId()I
+HPLcom/android/server/am/ServiceRecord;->getTracker()Lcom/android/internal/app/procstats/ServiceState;
+HPLcom/android/server/am/ServiceRecord;->hasAutoCreateConnections()Z
+HPLcom/android/server/am/ServiceRecord;->makeNextStartId()I
+HPLcom/android/server/am/ServiceRecord;->postNotification()V
+HPLcom/android/server/am/ServiceRecord;->resetRestartCounter()V
+HPLcom/android/server/am/ServiceRecord;->retrieveAppBindingLocked(Landroid/content/Intent;Lcom/android/server/am/ProcessRecord;)Lcom/android/server/am/AppBindRecord;
+HPLcom/android/server/am/TaskChangeNotificationController$MainHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/am/TaskChangeNotificationController;->-wrap0(Lcom/android/server/am/TaskChangeNotificationController;Lcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;Landroid/os/Message;)V
+HPLcom/android/server/am/TaskChangeNotificationController;->forAllLocalListeners(Lcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;Landroid/os/Message;)V
+HPLcom/android/server/am/TaskChangeNotificationController;->forAllRemoteListeners(Lcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;Landroid/os/Message;)V
+HPLcom/android/server/am/TaskChangeNotificationController;->notifyTaskDescriptionChanged(ILandroid/app/ActivityManager$TaskDescription;)V
+HPLcom/android/server/am/TaskChangeNotificationController;->notifyTaskStackChanged()V
+HPLcom/android/server/am/TaskPersister$LazyTaskWriterThread;->processNextItem()V
+HPLcom/android/server/am/TaskPersister$LazyTaskWriterThread;->run()V
+HPLcom/android/server/am/TaskPersister;->-get0(Lcom/android/server/am/TaskPersister;)J
+HPLcom/android/server/am/TaskPersister;->-get1(Lcom/android/server/am/TaskPersister;)Lcom/android/server/am/RecentTasks;
+HPLcom/android/server/am/TaskPersister;->getUserImagesDir(I)Ljava/io/File;
+HPLcom/android/server/am/TaskPersister;->getUserTasksDir(I)Ljava/io/File;
+HPLcom/android/server/am/TaskPersister;->removeObsoleteFiles(Landroid/util/ArraySet;)V
+HPLcom/android/server/am/TaskPersister;->removeObsoleteFiles(Landroid/util/ArraySet;[Ljava/io/File;)V
+HPLcom/android/server/am/TaskPersister;->restoreTasksForUserLocked(ILandroid/util/SparseBooleanArray;)Ljava/util/List;
+HPLcom/android/server/am/TaskPersister;->saveToXml(Lcom/android/server/am/TaskRecord;)Ljava/io/StringWriter;
+HPLcom/android/server/am/TaskPersister;->wakeup(Lcom/android/server/am/TaskRecord;Z)V
+HPLcom/android/server/am/TaskPersister;->writePersistedTaskIdsForUser(Landroid/util/SparseBooleanArray;I)V
+HPLcom/android/server/am/TaskPersister;->writeTaskIdsFiles()V
+HPLcom/android/server/am/TaskRecord;-><init>(Lcom/android/server/am/ActivityManagerService;ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;I)V
+HPLcom/android/server/am/TaskRecord;->addActivityAtIndex(ILcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/TaskRecord;->addActivityToTop(Lcom/android/server/am/ActivityRecord;)V
+HPLcom/android/server/am/TaskRecord;->createWindowContainer(ZZ)V
+HPLcom/android/server/am/TaskRecord;->findEffectiveRootIndex()I
+HPLcom/android/server/am/TaskRecord;->freeLastThumbnail()V
+HPLcom/android/server/am/TaskRecord;->getAllRunningVisibleActivitiesLocked(Ljava/util/ArrayList;)V
+HPLcom/android/server/am/TaskRecord;->getBaseIntent()Landroid/content/Intent;
+HPLcom/android/server/am/TaskRecord;->getLaunchBounds()Landroid/graphics/Rect;
+HPLcom/android/server/am/TaskRecord;->getStack()Lcom/android/server/am/ActivityStack;
+HPLcom/android/server/am/TaskRecord;->getStackId()I
+HPLcom/android/server/am/TaskRecord;->getTaskToReturnTo()I
+HPLcom/android/server/am/TaskRecord;->getTopActivity()Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/TaskRecord;->getWindowContainerBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/am/TaskRecord;->isHomeTask()Z
+HPLcom/android/server/am/TaskRecord;->isOverHomeStack()Z
+HPLcom/android/server/am/TaskRecord;->isResizeable()Z
+HPLcom/android/server/am/TaskRecord;->isResizeable(Z)Z
+HPLcom/android/server/am/TaskRecord;->performClearTaskLocked(Lcom/android/server/am/ActivityRecord;I)Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/TaskRecord;->restoreFromXml(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/am/ActivityStackSupervisor;)Lcom/android/server/am/TaskRecord;
+HPLcom/android/server/am/TaskRecord;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/am/TaskRecord;->setFrontOfTask()V
+HPLcom/android/server/am/TaskRecord;->setIntent(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;)V
+HPLcom/android/server/am/TaskRecord;->supportsSplitScreen()Z
+HPLcom/android/server/am/TaskRecord;->topRunningActivityLocked()Lcom/android/server/am/ActivityRecord;
+HPLcom/android/server/am/TaskRecord;->touchActiveTime()V
+HPLcom/android/server/am/TaskRecord;->updateEffectiveIntent()V
+HPLcom/android/server/am/TaskRecord;->updateOverrideConfiguration(Landroid/graphics/Rect;)Z
+HPLcom/android/server/am/TaskRecord;->updateOverrideConfiguration(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
+HPLcom/android/server/am/TaskRecord;->updateOverrideConfigurationFromLaunchBounds()Landroid/graphics/Rect;
+HPLcom/android/server/am/TaskRecord;->updateTaskDescription()V
+HPLcom/android/server/am/UidRecord;-><init>(I)V
+HPLcom/android/server/am/UidRecord;->reset()V
+HPLcom/android/server/am/UidRecord;->updateHasInternetPermission()V
+HPLcom/android/server/am/UidRecord;->updateLastDispatchedProcStateSeq(I)V
+HPLcom/android/server/am/UserController$Injector;->checkCallingPermission(Ljava/lang/String;)I
+HPLcom/android/server/am/UserController$Injector;->checkComponentPermission(Ljava/lang/String;IIIZ)I
+HPLcom/android/server/am/UserController$Injector;->getUserManager()Lcom/android/server/pm/UserManagerService;
+HPLcom/android/server/am/UserController;->exists(I)Z
+HPLcom/android/server/am/UserController;->getCurrentUser()Landroid/content/pm/UserInfo;
+HPLcom/android/server/am/UserController;->getCurrentUserIdLocked()I
+HPLcom/android/server/am/UserController;->getProfileIds(I)Ljava/util/Set;
+HPLcom/android/server/am/UserController;->getStartedUserArrayLocked()[I
+HPLcom/android/server/am/UserController;->getStartedUserStateLocked(I)Lcom/android/server/am/UserState;
+HPLcom/android/server/am/UserController;->getUserInfo(I)Landroid/content/pm/UserInfo;
+HPLcom/android/server/am/UserController;->handleIncomingUser(IIIZILjava/lang/String;Ljava/lang/String;)I
+HPLcom/android/server/am/UserController;->hasStartedUserState(I)Z
+HPLcom/android/server/am/UserController;->isSameProfileGroup(II)Z
+HPLcom/android/server/am/UserController;->isUserRunningLocked(II)Z
+HPLcom/android/server/am/UserController;->unsafeConvertIncomingUserLocked(I)I
+HPLcom/android/server/am/VrController;->onTopProcChangedLocked(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/VrController;->onVrModeChanged(Lcom/android/server/am/ActivityRecord;)Z
+HPLcom/android/server/am/VrController;->setVrRenderThreadLocked(IIZ)I
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;->getUserId()I
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;-><init>(ILandroid/content/ComponentName;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;-><init>(ILandroid/content/ComponentName;Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->enforceCallFromPackage(Ljava/lang/String;)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
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->-get10(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Landroid/os/UserManager;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->-get9(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->ensureGroupStateLoadedLocked(I)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->ensureGroupStateLoadedLocked(IZ)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getAppWidgetIds(Landroid/content/ComponentName;)[I
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->isBoundWidgetPackage(Ljava/lang/String;I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->isProfileWithLockedParent(I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->isUserRunningAndUnlocked(I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->lookupProviderLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;)Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->onPackageBroadcastReceived(Landroid/content/Intent;I)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->parseProviderInfoXml(Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;Landroid/content/pm/ResolveInfo;)Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->reloadWidgetsMaskedState(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;->updateProvidersForPackageLocked(Ljava/lang/String;ILjava/util/Set;)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->writeProfileStateToFileLocked(Ljava/io/FileOutputStream;I)Z
+HPLcom/android/server/audio/AudioEventLogger$Event;-><init>()V
+HPLcom/android/server/audio/AudioEventLogger;->log(Lcom/android/server/audio/AudioEventLogger$Event;)V
+HPLcom/android/server/audio/AudioService$2;->disableAudioForUid(ZI)V
+HPLcom/android/server/audio/AudioService$2;->onUidCachedChanged(IZ)V
+HPLcom/android/server/audio/AudioService$AudioHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/audio/AudioService$AudioHandler;->onLoadSoundEffects()Z
+HPLcom/android/server/audio/AudioService$AudioHandler;->onPlaySoundEffect(II)V
+HPLcom/android/server/audio/AudioService$AudioHandler;->setAllVolumes(Lcom/android/server/audio/AudioService$VolumeStreamState;)V
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->applyAllVolumes()V
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->getIndex(I)I
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->getMaxIndex()I
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->getSettingNameForDevice(I)Ljava/lang/String;
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->hasValidSettingsName()Z
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->observeDevicesForStream_syncVSS(Z)I
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->readSettings()V
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->setAllIndexes(Lcom/android/server/audio/AudioService$VolumeStreamState;Ljava/lang/String;)V
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->setIndex(IILjava/lang/String;)Z
+HPLcom/android/server/audio/AudioService;->-get17(Lcom/android/server/audio/AudioService;)Landroid/content/ContentResolver;
+HPLcom/android/server/audio/AudioService;->-get27(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/PlaybackActivityMonitor;
+HPLcom/android/server/audio/AudioService;->-get35(Lcom/android/server/audio/AudioService;)Landroid/media/SoundPool;
+HPLcom/android/server/audio/AudioService;->-get39(Lcom/android/server/audio/AudioService;)[Lcom/android/server/audio/AudioService$VolumeStreamState;
+HPLcom/android/server/audio/AudioService;->-get8(Lcom/android/server/audio/AudioService;)Landroid/os/PowerManager$WakeLock;
+HPLcom/android/server/audio/AudioService;->-get9(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/AudioService$AudioHandler;
+HPLcom/android/server/audio/AudioService;->-wrap32(Lcom/android/server/audio/AudioService;Landroid/os/Handler;IIILjava/lang/Object;I)V
+HPLcom/android/server/audio/AudioService;->ensureValidStreamType(I)V
+HPLcom/android/server/audio/AudioService;->getDeviceForStream(I)I
+HPLcom/android/server/audio/AudioService;->getDevicesForStream(I)I
+HPLcom/android/server/audio/AudioService;->getDevicesForStream(IZ)I
+HPLcom/android/server/audio/AudioService;->playerEvent(II)V
+HPLcom/android/server/audio/AudioService;->queueMsgUnderWakeLock(Landroid/os/Handler;IIILjava/lang/Object;I)V
+HPLcom/android/server/audio/AudioService;->rescaleIndex(III)I
+HPLcom/android/server/audio/AudioService;->sendBroadcastToAll(Landroid/content/Intent;)V
+HPLcom/android/server/audio/AudioService;->sendMsg(Landroid/os/Handler;IIIILjava/lang/Object;I)V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->checkBanPlayer(Landroid/media/AudioPlaybackConfiguration;I)Z
+HPLcom/android/server/audio/PlaybackActivityMonitor;->disableAudioForUid(ZI)V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->dispatchPlaybackChange()V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->playerEvent(III)V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->trackPlayer(Landroid/media/PlayerBase$PlayerIdCard;)I
+HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->updateSession(ILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;III)V
+HPLcom/android/server/autofill/AutofillManagerService;->getServiceForUserLocked(I)Lcom/android/server/autofill/AutofillManagerServiceImpl;
+HPLcom/android/server/autofill/AutofillManagerService;->peekServiceForUserLocked(I)Lcom/android/server/autofill/AutofillManagerServiceImpl;
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->updateSessionLocked(IILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;II)Z
+HPLcom/android/server/autofill/RemoteFillService$FillServiceCallbacks;->onFillRequestFailure(Ljava/lang/CharSequence;Ljava/lang/String;)V
+HPLcom/android/server/autofill/RemoteFillService$FillServiceCallbacks;->onFillRequestSuccess(ILandroid/service/autofill/FillResponse;ILjava/lang/String;)V
+HPLcom/android/server/autofill/RemoteFillService$FillServiceCallbacks;->onSaveRequestFailure(Ljava/lang/CharSequence;Ljava/lang/String;)V
+HPLcom/android/server/autofill/RemoteFillService$FillServiceCallbacks;->onSaveRequestSuccess(Ljava/lang/String;)V
+HPLcom/android/server/autofill/RemoteFillService$FillServiceCallbacks;->onServiceDied(Lcom/android/server/autofill/RemoteFillService;)V
+HPLcom/android/server/autofill/RemoteFillService$PendingRequest;->onTimeout(Lcom/android/server/autofill/RemoteFillService;)V
+HPLcom/android/server/autofill/ViewState$Listener;->onFillReady(Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;)V
+HPLcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;->authenticate(IILandroid/content/IntentSender;Landroid/os/Bundle;)V
+HPLcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;->cancelSave()V
+HPLcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;->fill(IILandroid/service/autofill/Dataset;)V
+HPLcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;->requestHideFillUi(Landroid/view/autofill/AutofillId;)V
+HPLcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;->requestShowFillUi(Landroid/view/autofill/AutofillId;IILandroid/view/autofill/IAutofillWindowPresenter;)V
+HPLcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;->save()V
+HPLcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;->startIntentSender(Landroid/content/IntentSender;)V
+HPLcom/android/server/backup/BackupManagerService$1;->run()V
+HPLcom/android/server/backup/BackupManagerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/backup/BackupManagerService$7;-><init>(Lcom/android/server/backup/BackupManagerService;Ljava/lang/String;Ljava/util/HashSet;)V
+HPLcom/android/server/backup/BackupManagerService$7;->run()V
+HPLcom/android/server/backup/BackupManagerService$BackupRequest;-><init>(Lcom/android/server/backup/BackupManagerService;Ljava/lang/String;)V
+HPLcom/android/server/backup/BackupManagerService;->-wrap18(Lcom/android/server/backup/BackupManagerService;Ljava/lang/String;Ljava/util/HashSet;)V
+HPLcom/android/server/backup/BackupManagerService;->addPackageParticipantsLockedInner(Ljava/lang/String;Ljava/util/List;)V
+HPLcom/android/server/backup/BackupManagerService;->allAgentPackages()Ljava/util/List;
+HPLcom/android/server/backup/BackupManagerService;->appIsDisabled(Landroid/content/pm/ApplicationInfo;Landroid/content/pm/PackageManager;)Z
+HPLcom/android/server/backup/BackupManagerService;->appIsEligibleForBackup(Landroid/content/pm/ApplicationInfo;Landroid/content/pm/PackageManager;)Z
+HPLcom/android/server/backup/BackupManagerService;->dataChanged(Ljava/lang/String;)V
+HPLcom/android/server/backup/BackupManagerService;->dataChangedImpl(Ljava/lang/String;)V
+HPLcom/android/server/backup/BackupManagerService;->dataChangedImpl(Ljava/lang/String;Ljava/util/HashSet;)V
+HPLcom/android/server/backup/BackupManagerService;->dataChangedTargets(Ljava/lang/String;)Ljava/util/HashSet;
+HPLcom/android/server/backup/BackupManagerService;->dequeueFullBackupLocked(Ljava/lang/String;)V
+HPLcom/android/server/backup/BackupManagerService;->readFullBackupSchedule()Ljava/util/ArrayList;
+HPLcom/android/server/backup/BackupManagerService;->writeToJournalLocked(Ljava/lang/String;)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->acknowledgeAdbBackupOrRestore(IZLjava/lang/String;Ljava/lang/String;Landroid/app/backup/IFullBackupRestoreObserver;)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->adbBackup(Landroid/os/ParcelFileDescriptor;ZZZZZZZZ[Ljava/lang/String;)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->adbRestore(Landroid/os/ParcelFileDescriptor;)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->agentConnected(Ljava/lang/String;Landroid/os/IBinder;)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->agentDisconnected(Ljava/lang/String;)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->backupNow()V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->beginFullBackup(Lcom/android/server/backup/FullBackupJob;)Z
+HPLcom/android/server/backup/BackupManagerServiceInterface;->beginRestoreSession(Ljava/lang/String;Ljava/lang/String;)Landroid/app/backup/IRestoreSession;
+HPLcom/android/server/backup/BackupManagerServiceInterface;->bindToAgentSynchronous(Landroid/content/pm/ApplicationInfo;I)Landroid/app/IBackupAgent;
+HPLcom/android/server/backup/BackupManagerServiceInterface;->cancelBackups()V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->clearBackupData(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->dataChanged(Ljava/lang/String;)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->endFullBackup()V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->fullTransportBackup([Ljava/lang/String;)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->generateRandomIntegerToken()I
+HPLcom/android/server/backup/BackupManagerServiceInterface;->getAvailableRestoreToken(Ljava/lang/String;)J
+HPLcom/android/server/backup/BackupManagerServiceInterface;->getBackupManagerBinder()Landroid/app/backup/IBackupManager;
+HPLcom/android/server/backup/BackupManagerServiceInterface;->getConfigurationIntent(Ljava/lang/String;)Landroid/content/Intent;
+HPLcom/android/server/backup/BackupManagerServiceInterface;->getCurrentTransport()Ljava/lang/String;
+HPLcom/android/server/backup/BackupManagerServiceInterface;->getDataManagementIntent(Ljava/lang/String;)Landroid/content/Intent;
+HPLcom/android/server/backup/BackupManagerServiceInterface;->getDataManagementLabel(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/backup/BackupManagerServiceInterface;->getDestinationString(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/backup/BackupManagerServiceInterface;->getTransportWhitelist()[Ljava/lang/String;
+HPLcom/android/server/backup/BackupManagerServiceInterface;->hasBackupPassword()Z
+HPLcom/android/server/backup/BackupManagerServiceInterface;->initializeTransports([Ljava/lang/String;Landroid/app/backup/IBackupObserver;)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->isAppEligibleForBackup(Ljava/lang/String;)Z
+HPLcom/android/server/backup/BackupManagerServiceInterface;->isBackupEnabled()Z
+HPLcom/android/server/backup/BackupManagerServiceInterface;->listAllTransportComponents()[Landroid/content/ComponentName;
+HPLcom/android/server/backup/BackupManagerServiceInterface;->listAllTransports()[Ljava/lang/String;
+HPLcom/android/server/backup/BackupManagerServiceInterface;->opComplete(IJ)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->prepareOperationTimeout(IJLcom/android/server/backup/BackupRestoreTask;I)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->requestBackup([Ljava/lang/String;Landroid/app/backup/IBackupObserver;I)I
+HPLcom/android/server/backup/BackupManagerServiceInterface;->requestBackup([Ljava/lang/String;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;I)I
+HPLcom/android/server/backup/BackupManagerServiceInterface;->restoreAtInstall(Ljava/lang/String;I)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->selectBackupTransport(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/backup/BackupManagerServiceInterface;->selectBackupTransportAsync(Landroid/content/ComponentName;Landroid/app/backup/ISelectBackupTransportCallback;)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->setAutoRestore(Z)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->setBackupEnabled(Z)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->setBackupPassword(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/backup/BackupManagerServiceInterface;->setBackupProvisioned(Z)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->tearDownAgentAndKill(Landroid/content/pm/ApplicationInfo;)V
+HPLcom/android/server/backup/BackupManagerServiceInterface;->waitUntilOperationComplete(I)Z
+HPLcom/android/server/backup/KeyValueBackupJob;->schedule(Landroid/content/Context;)V
+HPLcom/android/server/backup/KeyValueBackupJob;->schedule(Landroid/content/Context;J)V
+HPLcom/android/server/backup/PackageManagerBackupAgent;->getStorableApplications(Landroid/content/pm/PackageManager;)Ljava/util/List;
+HPLcom/android/server/backup/Trampoline;->dataChanged(Ljava/lang/String;)V
+HPLcom/android/server/backup/TransportManager$TransportBoundListener;->onTransportBound(Lcom/android/internal/backup/IBackupTransport;)Z
+HPLcom/android/server/backup/TransportManager;->onPackageRemoved(Ljava/lang/String;)V
+HPLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->hasPrimaryClip(Ljava/lang/String;)Z
+HPLcom/android/server/clipboard/ClipboardService;->clipboardAccessAllowed(ILjava/lang/String;I)Z
+HPLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->checkCallerIsSystemOr(Ljava/lang/String;I)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;
+HPLcom/android/server/companion/CompanionDeviceManagerService;->-wrap3()Z
+HPLcom/android/server/companion/CompanionDeviceManagerService;->-wrap4()I
+HPLcom/android/server/companion/CompanionDeviceManagerService;->-wrap6(Lcom/android/server/companion/CompanionDeviceManagerService;ILjava/lang/String;)Ljava/util/Set;
+HPLcom/android/server/companion/CompanionDeviceManagerService;->getCallingUserId()I
+HPLcom/android/server/companion/CompanionDeviceManagerService;->getStorageFileForUser(I)Landroid/util/AtomicFile;
+HPLcom/android/server/companion/CompanionDeviceManagerService;->isCallerSystem()Z
+HPLcom/android/server/companion/CompanionDeviceManagerService;->readAllAssociations(ILjava/lang/String;)Ljava/util/Set;
+HPLcom/android/server/connectivity/NetdEventListenerService;->maybeVerboseLog(Ljava/lang/String;[Ljava/lang/Object;)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
+HPLcom/android/server/connectivity/NetworkAgentInfo;->getCurrentScore()I
+HPLcom/android/server/connectivity/NetworkAgentInfo;->getCurrentScore(Z)I
+HPLcom/android/server/connectivity/NetworkAgentInfo;->getNetworkState()Landroid/net/NetworkState;
+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;->isVPN()Z
+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;->requestAt(I)Landroid/net/NetworkRequest;
+HPLcom/android/server/connectivity/NetworkAgentInfo;->satisfies(Landroid/net/NetworkRequest;)Z
+HPLcom/android/server/connectivity/NetworkAgentInfo;->setCurrentScore(I)V
+HPLcom/android/server/connectivity/NetworkAgentInfo;->updateLingerTimer()V
+HPLcom/android/server/connectivity/PermissionMonitor$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/connectivity/PermissionMonitor;->hasNetworkPermission(Landroid/content/pm/PackageInfo;)Z
+HPLcom/android/server/connectivity/PermissionMonitor;->hasPermission(Landroid/content/pm/PackageInfo;Ljava/lang/String;)Z
+HPLcom/android/server/connectivity/PermissionMonitor;->startMonitoring()V
+HPLcom/android/server/connectivity/PermissionMonitor;->toIntArray(Ljava/util/List;)[I
+HPLcom/android/server/connectivity/PermissionMonitor;->update(Ljava/util/Set;Ljava/util/Map;Z)V
+HPLcom/android/server/connectivity/Vpn;->appliesToUid(I)Z
+HPLcom/android/server/connectivity/Vpn;->isBlockingUid(I)Z
+HPLcom/android/server/connectivity/Vpn;->isRunningLocked()Z
+HPLcom/android/server/connectivity/tethering/OffloadController$OffloadTetheringStatsProvider;->getTetherStats(I)Landroid/net/NetworkStats;
+HPLcom/android/server/content/ContentService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/content/ContentService$ObserverCall;-><init>(Lcom/android/server/content/ContentService$ObserverNode;Landroid/database/IContentObserver;ZI)V
+HPLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;->-get0(Lcom/android/server/content/ContentService$ObserverNode$ObserverEntry;)I
+HPLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;-><init>(Lcom/android/server/content/ContentService$ObserverNode;Landroid/database/IContentObserver;ZLjava/lang/Object;III)V
+HPLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;->binderDied()V
+HPLcom/android/server/content/ContentService$ObserverNode;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/content/ContentService$ObserverNode;->addObserverLocked(Landroid/net/Uri;ILandroid/database/IContentObserver;ZLjava/lang/Object;III)V
+HPLcom/android/server/content/ContentService$ObserverNode;->addObserverLocked(Landroid/net/Uri;Landroid/database/IContentObserver;ZLjava/lang/Object;III)V
+HPLcom/android/server/content/ContentService$ObserverNode;->collectMyObserversLocked(ZLandroid/database/IContentObserver;ZIILjava/util/ArrayList;)V
+HPLcom/android/server/content/ContentService$ObserverNode;->collectObserversLocked(Landroid/net/Uri;ILandroid/database/IContentObserver;ZIILjava/util/ArrayList;)V
+HPLcom/android/server/content/ContentService$ObserverNode;->countUriSegments(Landroid/net/Uri;)I
+HPLcom/android/server/content/ContentService$ObserverNode;->getUriSegment(Landroid/net/Uri;I)Ljava/lang/String;
+HPLcom/android/server/content/ContentService$ObserverNode;->removeObserverLocked(Landroid/database/IContentObserver;)Z
+HPLcom/android/server/content/ContentService;->enforceCrossUserPermission(ILjava/lang/String;)V
+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
+HPLcom/android/server/content/ContentService;->getProviderPackageName(Landroid/net/Uri;)Ljava/lang/String;
+HPLcom/android/server/content/ContentService;->getSyncAdapterPackagesForAuthorityAsUser(Ljava/lang/String;I)[Ljava/lang/String;
+HPLcom/android/server/content/ContentService;->getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z
+HPLcom/android/server/content/ContentService;->getSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;I)Z
+HPLcom/android/server/content/ContentService;->getSyncManager()Lcom/android/server/content/SyncManager;
+HPLcom/android/server/content/ContentService;->handleIncomingUser(Landroid/net/Uri;IIIZI)I
+HPLcom/android/server/content/ContentService;->invalidateCacheLocked(ILjava/lang/String;Landroid/net/Uri;)V
+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
+HPLcom/android/server/content/ContentService;->notifyChange(Landroid/net/Uri;Landroid/database/IContentObserver;ZIII)V
+HPLcom/android/server/content/ContentService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/server/content/ContentService;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/IContentObserver;II)V
+HPLcom/android/server/content/ContentService;->unregisterContentObserver(Landroid/database/IContentObserver;)V
+HPLcom/android/server/content/SyncJobService;->onStartJob(Landroid/app/job/JobParameters;)Z
+HPLcom/android/server/content/SyncLogger$RotatingFileLogger;->closeCurrentLogLocked()V
+HPLcom/android/server/content/SyncLogger$RotatingFileLogger;->jobParametersToString(Landroid/app/job/JobParameters;)Ljava/lang/String;
+HPLcom/android/server/content/SyncLogger$RotatingFileLogger;->log([Ljava/lang/Object;)V
+HPLcom/android/server/content/SyncLogger$RotatingFileLogger;->openLogLocked(J)V
+HPLcom/android/server/content/SyncManager$7;->run()V
+HPLcom/android/server/content/SyncManager$ActiveSyncContext;->bindToSyncAdapter(Landroid/content/ComponentName;I)Z
+HPLcom/android/server/content/SyncManager$ActiveSyncContext;->toString()Ljava/lang/String;
+HPLcom/android/server/content/SyncManager$ActiveSyncContext;->toString(Ljava/lang/StringBuilder;)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->computeSyncOpState(Lcom/android/server/content/SyncOperation;)I
+HPLcom/android/server/content/SyncManager$SyncHandler;->dispatchSyncOperation(Lcom/android/server/content/SyncOperation;)Z
+HPLcom/android/server/content/SyncManager$SyncHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->handleSyncMessage(Landroid/os/Message;)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->runBoundToAdapterH(Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/os/IBinder;)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->runSyncFinishedOrCanceledH(Landroid/content/SyncResult;Lcom/android/server/content/SyncManager$ActiveSyncContext;)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->startSyncH(Lcom/android/server/content/SyncOperation;)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->tryEnqueueMessageUntilReadyToRun(Landroid/os/Message;)Z
+HPLcom/android/server/content/SyncManager$SyncTimeTracker;->update()V
+HPLcom/android/server/content/SyncManager;->-get15(Lcom/android/server/content/SyncManager;)Landroid/os/PowerManager$WakeLock;
+HPLcom/android/server/content/SyncManager;->-wrap5(Lcom/android/server/content/SyncManager;)Z
+HPLcom/android/server/content/SyncManager;->canAccessAccount(Landroid/accounts/Account;Ljava/lang/String;I)Z
+HPLcom/android/server/content/SyncManager;->computeSyncable(Landroid/accounts/Account;ILjava/lang/String;Z)I
+HPLcom/android/server/content/SyncManager;->formatDurationHMS(Ljava/lang/StringBuilder;J)Ljava/lang/StringBuilder;
+HPLcom/android/server/content/SyncManager;->getAllPendingSyncs()Ljava/util/List;
+HPLcom/android/server/content/SyncManager;->getIsSyncable(Landroid/accounts/Account;ILjava/lang/String;)I
+HPLcom/android/server/content/SyncManager;->getSyncAdapterPackagesForAuthorityAsUser(Ljava/lang/String;I)[Ljava/lang/String;
+HPLcom/android/server/content/SyncManager;->getSyncAdapterTypes(I)[Landroid/content/SyncAdapterType;
+HPLcom/android/server/content/SyncManager;->getSyncStorageEngine()Lcom/android/server/content/SyncStorageEngine;
+HPLcom/android/server/content/SyncManager;->isJobIdInUseLockedH(ILjava/util/List;)Z
+HPLcom/android/server/content/SyncManager;->printTwoDigitNumber(Ljava/lang/StringBuilder;JCZ)Z
+HPLcom/android/server/content/SyncManager;->readDataConnectionState()Z
+HPLcom/android/server/content/SyncManager;->rescheduleSyncs(Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V
+HPLcom/android/server/content/SyncManager;->scheduleLocalSync(Landroid/accounts/Account;IILjava/lang/String;)V
+HPLcom/android/server/content/SyncManager;->scheduleSync(Landroid/accounts/Account;IILjava/lang/String;Landroid/os/Bundle;IJ)V
+HPLcom/android/server/content/SyncManager;->scheduleSyncOperationH(Lcom/android/server/content/SyncOperation;J)V
+HPLcom/android/server/content/SyncManager;->setAuthorityPendingState(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
+HPLcom/android/server/content/SyncManager;->verifyJobScheduler()V
+HPLcom/android/server/content/SyncOperation;-><init>(Lcom/android/server/content/SyncStorageEngine$EndPoint;ILjava/lang/String;IILandroid/os/Bundle;ZZIJJ)V
+HPLcom/android/server/content/SyncOperation;->dump(Landroid/content/pm/PackageManager;Z)Ljava/lang/String;
+HPLcom/android/server/content/SyncOperation;->extrasToStringBuilder(Landroid/os/Bundle;Ljava/lang/StringBuilder;)V
+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;
+HPLcom/android/server/content/SyncOperation;->toJobInfoExtras()Landroid/os/PersistableBundle;
+HPLcom/android/server/content/SyncOperation;->toKey()Ljava/lang/String;
+HPLcom/android/server/content/SyncOperation;->toString()Ljava/lang/String;
+HPLcom/android/server/content/SyncOperation;->wakeLockName()Ljava/lang/String;
+HPLcom/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
+HPLcom/android/server/content/SyncStorageEngine$EndPoint;->toString()Ljava/lang/String;
+HPLcom/android/server/content/SyncStorageEngine$OnAuthorityRemovedListener;->onAuthorityRemoved(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
+HPLcom/android/server/content/SyncStorageEngine$OnSyncRequestListener;->onSyncRequest(Lcom/android/server/content/SyncStorageEngine$EndPoint;ILandroid/os/Bundle;)V
+HPLcom/android/server/content/SyncStorageEngine$PeriodicSyncAddedListener;->onPeriodicSyncAdded(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;JJ)V
+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;
+HPLcom/android/server/content/SyncStorageEngine;->getCurrentSyncs(I)Ljava/util/List;
+HPLcom/android/server/content/SyncStorageEngine;->getCurrentSyncsLocked(I)Ljava/util/List;
+HPLcom/android/server/content/SyncStorageEngine;->getIsSyncable(Landroid/accounts/Account;ILjava/lang/String;)I
+HPLcom/android/server/content/SyncStorageEngine;->getMasterSyncAutomatically(I)Z
+HPLcom/android/server/content/SyncStorageEngine;->getOrCreateAuthorityLocked(Lcom/android/server/content/SyncStorageEngine$EndPoint;IZ)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;
+HPLcom/android/server/content/SyncStorageEngine;->getSyncAutomatically(Landroid/accounts/Account;ILjava/lang/String;)Z
+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;->parseAuthority(Lorg/xmlpull/v1/XmlPullParser;ILcom/android/server/content/SyncStorageEngine$AccountAuthorityValidator;)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;
+HPLcom/android/server/content/SyncStorageEngine;->readAccountInfoLocked()V
+HPLcom/android/server/content/SyncStorageEngine;->reportChange(I)V
+HPLcom/android/server/content/SyncStorageEngine;->stopSyncEvent(JJLjava/lang/String;JJ)V
+HPLcom/android/server/content/SyncStorageEngine;->writeAccountInfoLocked()V
+HPLcom/android/server/content/SyncStorageEngine;->writeStatusLocked()V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->getUid()I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderClearCallingIdentity()J
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderGetCallingUid()I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderRestoreCallingIdentity(J)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->userHandleGetCallingUserId()I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isActiveAdminWithPolicy(II)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->-wrap3(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;II)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceFullCrossUsersPermission(I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceSystemUserOrPermissionIfCrossUser(ILjava/lang/String;)V
+HPLcom/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;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminsForLockscreenPoliciesLocked(IZ)Ljava/util/List;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerComponent(Z)Landroid/content/ComponentName;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getKeyguardDisabledFeatures(Landroid/content/ComponentName;IZ)I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwner(I)Landroid/content/ComponentName;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserData(I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->packageHasActiveAdmins(Ljava/lang/String;I)Z
+HPLcom/android/server/devicepolicy/Owners;->getProfileOwnerComponent(I)Landroid/content/ComponentName;
+HPLcom/android/server/devicepolicy/Owners;->hasDeviceOwner()Z
+HPLcom/android/server/display/AutomaticBrightnessController$1;->onSensorChanged(Landroid/hardware/SensorEvent;)V
+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
+HPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->size()I
+HPLcom/android/server/display/AutomaticBrightnessController$AutomaticBrightnessHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/display/AutomaticBrightnessController$Callbacks;->updateBrightness()V
+HPLcom/android/server/display/AutomaticBrightnessController;->-get0(Lcom/android/server/display/AutomaticBrightnessController;)Z
+HPLcom/android/server/display/AutomaticBrightnessController;->-wrap1(Lcom/android/server/display/AutomaticBrightnessController;JF)V
+HPLcom/android/server/display/AutomaticBrightnessController;->-wrap2(Lcom/android/server/display/AutomaticBrightnessController;)V
+HPLcom/android/server/display/AutomaticBrightnessController;->applyLightSensorMeasurement(JF)V
+HPLcom/android/server/display/AutomaticBrightnessController;->calculateAmbientLux(JJ)F
+HPLcom/android/server/display/AutomaticBrightnessController;->calculateWeight(JJ)F
+HPLcom/android/server/display/AutomaticBrightnessController;->configure(ZFZZ)V
+HPLcom/android/server/display/AutomaticBrightnessController;->handleLightSensorEvent(JF)V
+HPLcom/android/server/display/AutomaticBrightnessController;->nextAmbientLightBrighteningTransition(J)J
+HPLcom/android/server/display/AutomaticBrightnessController;->nextAmbientLightDarkeningTransition(J)J
+HPLcom/android/server/display/AutomaticBrightnessController;->updateAmbientLux()V
+HPLcom/android/server/display/AutomaticBrightnessController;->updateAmbientLux(J)V
+HPLcom/android/server/display/AutomaticBrightnessController;->weightIntegral(J)F
+HPLcom/android/server/display/DisplayBlanker;->requestDisplayState(II)V
+HPLcom/android/server/display/DisplayManagerService$BinderService;->getDisplayIds()[I
+HPLcom/android/server/display/DisplayManagerService$CallbackRecord;->binderDied()V
+HPLcom/android/server/display/DisplayManagerService$LocalService$1;->requestDisplayState(II)V
+HPLcom/android/server/display/DisplayManagerService$LocalService;->performTraversalInTransactionFromWindowManager()V
+HPLcom/android/server/display/DisplayManagerService$LocalService;->requestPowerState(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Z)Z
+HPLcom/android/server/display/DisplayManagerService$LocalService;->setDisplayAccessUIDs(Landroid/util/SparseArray;)V
+HPLcom/android/server/display/DisplayManagerService$LocalService;->setDisplayInfoOverrideFromWindowManager(ILandroid/view/DisplayInfo;)V
+HPLcom/android/server/display/DisplayManagerService$LocalService;->setDisplayProperties(IZFIZ)V
+HPLcom/android/server/display/DisplayManagerService;->-get2(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayPowerController;
+HPLcom/android/server/display/DisplayManagerService;->-wrap16(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService$CallbackRecord;)V
+HPLcom/android/server/display/DisplayManagerService;->-wrap25(Lcom/android/server/display/DisplayManagerService;II)V
+HPLcom/android/server/display/DisplayManagerService;->-wrap29(Lcom/android/server/display/DisplayManagerService;Landroid/util/SparseArray;)V
+HPLcom/android/server/display/DisplayManagerService;->-wrap30(Lcom/android/server/display/DisplayManagerService;ILandroid/view/DisplayInfo;)V
+HPLcom/android/server/display/DisplayManagerService;->-wrap32(Lcom/android/server/display/DisplayManagerService;IZFIZ)V
+HPLcom/android/server/display/DisplayManagerService;->-wrap5(Lcom/android/server/display/DisplayManagerService;I)[I
+HPLcom/android/server/display/DisplayManagerService;->applyGlobalDisplayStateLocked(Ljava/util/List;)V
+HPLcom/android/server/display/DisplayManagerService;->getDisplayIdsInternal(I)[I
+HPLcom/android/server/display/DisplayManagerService;->onCallbackDied(Lcom/android/server/display/DisplayManagerService$CallbackRecord;)V
+HPLcom/android/server/display/DisplayManagerService;->performTraversalInTransactionFromWindowManagerInternal()V
+HPLcom/android/server/display/DisplayManagerService;->requestGlobalDisplayStateInternal(II)V
+HPLcom/android/server/display/DisplayManagerService;->setDisplayAccessUIDsInternal(Landroid/util/SparseArray;)V
+HPLcom/android/server/display/DisplayManagerService;->setDisplayInfoOverrideFromWindowManagerInternal(ILandroid/view/DisplayInfo;)V
+HPLcom/android/server/display/DisplayManagerService;->setDisplayPropertiesInternal(IZFIZ)V
+HPLcom/android/server/display/DisplayPowerController$DisplayControllerHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/display/DisplayPowerController;->animateScreenBrightness(II)V
+HPLcom/android/server/display/DisplayPowerController;->animateScreenStateChange(IZ)V
+HPLcom/android/server/display/DisplayPowerController;->requestPowerState(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Z)Z
+HPLcom/android/server/display/DisplayPowerController;->sendUpdatePowerStateLocked()V
+HPLcom/android/server/display/DisplayPowerController;->setScreenState(IZ)Z
+HPLcom/android/server/display/DisplayPowerController;->updatePowerState()V
+HPLcom/android/server/display/DisplayPowerState$2;->setValue(Lcom/android/server/display/DisplayPowerState;I)V
+HPLcom/android/server/display/DisplayPowerState$2;->setValue(Ljava/lang/Object;I)V
+HPLcom/android/server/display/DisplayPowerState$3;->run()V
+HPLcom/android/server/display/DisplayPowerState$PhotonicModulator;->run()V
+HPLcom/android/server/display/DisplayPowerState$PhotonicModulator;->setState(II)Z
+HPLcom/android/server/display/DisplayPowerState;->-get1()Z
+HPLcom/android/server/display/DisplayPowerState;->-get2(Lcom/android/server/display/DisplayPowerState;)Lcom/android/server/display/DisplayBlanker;
+HPLcom/android/server/display/DisplayPowerState;->-get4(Lcom/android/server/display/DisplayPowerState;)F
+HPLcom/android/server/display/DisplayPowerState;->-get6(Lcom/android/server/display/DisplayPowerState;)Lcom/android/server/display/DisplayPowerState$PhotonicModulator;
+HPLcom/android/server/display/DisplayPowerState;->-get7(Lcom/android/server/display/DisplayPowerState;)I
+HPLcom/android/server/display/DisplayPowerState;->-get8(Lcom/android/server/display/DisplayPowerState;)I
+HPLcom/android/server/display/DisplayPowerState;->-set2(Lcom/android/server/display/DisplayPowerState;Z)Z
+HPLcom/android/server/display/DisplayPowerState;->-set3(Lcom/android/server/display/DisplayPowerState;Z)Z
+HPLcom/android/server/display/DisplayPowerState;->-wrap0(Lcom/android/server/display/DisplayPowerState;)V
+HPLcom/android/server/display/DisplayPowerState;->-wrap1(Lcom/android/server/display/DisplayPowerState;)V
+HPLcom/android/server/display/DisplayPowerState;->dismissColorFade()V
+HPLcom/android/server/display/DisplayPowerState;->getScreenState()I
+HPLcom/android/server/display/DisplayPowerState;->invokeCleanListenerIfNeeded()V
+HPLcom/android/server/display/DisplayPowerState;->postScreenUpdateThreadSafe()V
+HPLcom/android/server/display/DisplayPowerState;->scheduleScreenUpdate()V
+HPLcom/android/server/display/DisplayPowerState;->setScreenBrightness(I)V
+HPLcom/android/server/display/DisplayTransformManager;->setColorMatrix(I[F)V
+HPLcom/android/server/display/LogicalDisplay;->getRequestedModeIdLocked()I
+HPLcom/android/server/display/LogicalDisplay;->hasContentLocked()Z
+HPLcom/android/server/display/LogicalDisplay;->setDisplayInfoOverrideFromWindowManagerLocked(Landroid/view/DisplayInfo;)Z
+HPLcom/android/server/display/NightDisplayService$3;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
+HPLcom/android/server/display/NightDisplayService$ColorMatrixEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/display/NightDisplayService$ColorMatrixEvaluator;->evaluate(F[F[F)[F
+HPLcom/android/server/display/RampAnimator$1;->run()V
+HPLcom/android/server/display/RampAnimator$Listener;->onAnimationEnd()V
+HPLcom/android/server/display/RampAnimator;->-get0(Lcom/android/server/display/RampAnimator;)F
+HPLcom/android/server/display/RampAnimator;->-get1(Lcom/android/server/display/RampAnimator;)Landroid/view/Choreographer;
+HPLcom/android/server/display/RampAnimator;->-get2(Lcom/android/server/display/RampAnimator;)I
+HPLcom/android/server/display/RampAnimator;->-get3(Lcom/android/server/display/RampAnimator;)J
+HPLcom/android/server/display/RampAnimator;->-get5(Lcom/android/server/display/RampAnimator;)Ljava/lang/Object;
+HPLcom/android/server/display/RampAnimator;->-get6(Lcom/android/server/display/RampAnimator;)Landroid/util/IntProperty;
+HPLcom/android/server/display/RampAnimator;->-get7(Lcom/android/server/display/RampAnimator;)I
+HPLcom/android/server/display/RampAnimator;->-get8(Lcom/android/server/display/RampAnimator;)I
+HPLcom/android/server/display/RampAnimator;->-set0(Lcom/android/server/display/RampAnimator;F)F
+HPLcom/android/server/display/RampAnimator;->-set2(Lcom/android/server/display/RampAnimator;I)I
+HPLcom/android/server/display/RampAnimator;->-set3(Lcom/android/server/display/RampAnimator;J)J
+HPLcom/android/server/display/RampAnimator;->-wrap0(Lcom/android/server/display/RampAnimator;)V
+HPLcom/android/server/display/RampAnimator;->animateTo(II)Z
+HPLcom/android/server/display/RampAnimator;->postAnimationCallback()V
+HPLcom/android/server/dreams/DreamController$Listener;->onDreamStopped(Landroid/os/Binder;)V
+HPLcom/android/server/dreams/DreamManagerService$LocalService;->isDreaming()Z
+HPLcom/android/server/dreams/DreamManagerService;->-wrap3(Lcom/android/server/dreams/DreamManagerService;)Z
+HPLcom/android/server/dreams/DreamManagerService;->isDreamingInternal()Z
+HPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->queryByComponent(Landroid/content/ComponentName;Ljava/util/List;)V
+HPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->sortResults(Ljava/util/List;)V
+HPLcom/android/server/firewall/IntentFirewall;->checkBroadcast(Landroid/content/Intent;IILjava/lang/String;I)Z
+HPLcom/android/server/firewall/IntentFirewall;->checkIntent(Lcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;Landroid/content/ComponentName;ILandroid/content/Intent;IILjava/lang/String;I)Z
+HPLcom/android/server/firewall/IntentFirewall;->checkService(Landroid/content/ComponentName;Landroid/content/Intent;IILjava/lang/String;Landroid/content/pm/ApplicationInfo;)Z
+HPLcom/android/server/input/InputManagerService$5;->visitKeyboardLayout(Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
+HPLcom/android/server/input/InputManagerService$KeyboardLayoutDescriptor;->format(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;->visitKeyboardLayout(Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
+HPLcom/android/server/input/InputManagerService$WindowManagerCallbacks;->dispatchUnhandledKey(Lcom/android/server/input/InputWindowHandle;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;
+HPLcom/android/server/input/InputManagerService$WindowManagerCallbacks;->getPointerLayer()I
+HPLcom/android/server/input/InputManagerService$WindowManagerCallbacks;->interceptKeyBeforeDispatching(Lcom/android/server/input/InputWindowHandle;Landroid/view/KeyEvent;I)J
+HPLcom/android/server/input/InputManagerService$WindowManagerCallbacks;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
+HPLcom/android/server/input/InputManagerService$WindowManagerCallbacks;->interceptMotionBeforeQueueingNonInteractive(JI)I
+HPLcom/android/server/input/InputManagerService$WindowManagerCallbacks;->notifyANR(Lcom/android/server/input/InputApplicationHandle;Lcom/android/server/input/InputWindowHandle;Ljava/lang/String;)J
+HPLcom/android/server/input/InputManagerService$WindowManagerCallbacks;->notifyCameraLensCoverSwitchChanged(JZ)V
+HPLcom/android/server/input/InputManagerService$WindowManagerCallbacks;->notifyConfigurationChanged()V
+HPLcom/android/server/input/InputManagerService$WindowManagerCallbacks;->notifyInputChannelBroken(Lcom/android/server/input/InputWindowHandle;)V
+HPLcom/android/server/input/InputManagerService$WindowManagerCallbacks;->notifyLidSwitchChanged(JZ)V
+HPLcom/android/server/input/InputManagerService$WiredAccessoryCallbacks;->notifyWiredAccessoryChanged(JII)V
+HPLcom/android/server/input/InputManagerService$WiredAccessoryCallbacks;->systemReady()V
+HPLcom/android/server/input/InputManagerService;->deliverInputDevicesChanged([Landroid/view/InputDevice;)V
+HPLcom/android/server/input/InputManagerService;->getCurrentKeyboardLayoutForInputDevice(Landroid/hardware/input/InputDeviceIdentifier;)Ljava/lang/String;
+HPLcom/android/server/input/InputManagerService;->getExcludedDeviceNames()[Ljava/lang/String;
+HPLcom/android/server/input/InputManagerService;->getInputDevice(I)Landroid/view/InputDevice;
+HPLcom/android/server/input/InputManagerService;->getInputDeviceIds()[I
+HPLcom/android/server/input/InputManagerService;->getKeyboardLayoutOverlay(Landroid/hardware/input/InputDeviceIdentifier;)[Ljava/lang/String;
+HPLcom/android/server/input/InputManagerService;->getLayoutDescriptor(Landroid/hardware/input/InputDeviceIdentifier;)Ljava/lang/String;
+HPLcom/android/server/input/InputManagerService;->getLocalesFromLanguageTags(Ljava/lang/String;)Landroid/os/LocaleList;
+HPLcom/android/server/input/InputManagerService;->getSwitchState(III)I
+HPLcom/android/server/input/InputManagerService;->injectInputEvent(Landroid/view/InputEvent;I)Z
+HPLcom/android/server/input/InputManagerService;->injectInputEventInternal(Landroid/view/InputEvent;II)Z
+HPLcom/android/server/input/InputManagerService;->interceptKeyBeforeDispatching(Lcom/android/server/input/InputWindowHandle;Landroid/view/KeyEvent;I)J
+HPLcom/android/server/input/InputManagerService;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
+HPLcom/android/server/input/InputManagerService;->monitor()V
+HPLcom/android/server/input/InputManagerService;->registerInputChannel(Landroid/view/InputChannel;Lcom/android/server/input/InputWindowHandle;)V
+HPLcom/android/server/input/InputManagerService;->setInputWindows([Lcom/android/server/input/InputWindowHandle;Lcom/android/server/input/InputWindowHandle;)V
+HPLcom/android/server/input/InputManagerService;->setSystemUiVisibility(I)V
+HPLcom/android/server/input/InputManagerService;->updateKeyboardLayouts()V
+HPLcom/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
+HPLcom/android/server/input/InputWindowHandle;-><init>(Lcom/android/server/input/InputApplicationHandle;Ljava/lang/Object;Landroid/view/IWindow;I)V
+HPLcom/android/server/input/InputWindowHandle;->finalize()V
+HPLcom/android/server/input/PersistentDataStore;->getCurrentKeyboardLayout(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/input/PersistentDataStore;->getInputDeviceState(Ljava/lang/String;Z)Lcom/android/server/input/PersistentDataStore$InputDeviceState;
+HPLcom/android/server/input/PersistentDataStore;->loadIfNeeded()V
+HPLcom/android/server/job/JobCompletedListener;->onJobCompletedLocked(Lcom/android/server/job/controllers/JobStatus;Z)V
+HPLcom/android/server/job/JobPackageTracker$DataSet;->decActive(ILjava/lang/String;JI)V
+HPLcom/android/server/job/JobPackageTracker$DataSet;->decPending(ILjava/lang/String;J)V
+HPLcom/android/server/job/JobPackageTracker$DataSet;->getEntry(ILjava/lang/String;)Lcom/android/server/job/JobPackageTracker$PackageEntry;
+HPLcom/android/server/job/JobPackageTracker$DataSet;->getOrCreateEntry(ILjava/lang/String;)Lcom/android/server/job/JobPackageTracker$PackageEntry;
+HPLcom/android/server/job/JobPackageTracker$DataSet;->getTotalTime(J)J
+HPLcom/android/server/job/JobPackageTracker$DataSet;->incPending(ILjava/lang/String;J)V
+HPLcom/android/server/job/JobPackageTracker;->addEvent(IILjava/lang/String;II)V
+HPLcom/android/server/job/JobPackageTracker;->getLoadFactor(Lcom/android/server/job/controllers/JobStatus;)F
+HPLcom/android/server/job/JobPackageTracker;->noteActive(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/JobPackageTracker;->noteConcurrency(II)V
+HPLcom/android/server/job/JobPackageTracker;->noteInactive(Lcom/android/server/job/controllers/JobStatus;I)V
+HPLcom/android/server/job/JobPackageTracker;->noteNonpending(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/JobPackageTracker;->notePending(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/JobPackageTracker;->rebatchIfNeeded(J)V
+HPLcom/android/server/job/JobSchedulerInternal;->addBackingUpUid(I)V
+HPLcom/android/server/job/JobSchedulerInternal;->clearAllBackingUpUids()V
+HPLcom/android/server/job/JobSchedulerInternal;->getPersistStats()Lcom/android/server/job/JobSchedulerInternal$JobStorePersistStats;
+HPLcom/android/server/job/JobSchedulerInternal;->getSystemScheduledPendingJobs()Ljava/util/List;
+HPLcom/android/server/job/JobSchedulerInternal;->removeBackingUpUid(I)V
+HPLcom/android/server/job/JobSchedulerService$2;->onUidStateChanged(IIJ)V
+HPLcom/android/server/job/JobSchedulerService$4;->process(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/JobSchedulerService$JobHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->cancel(I)V
+HPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->enforceValidJobRequest(ILandroid/app/job/JobInfo;)V
+HPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->enqueue(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I
+HPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->getPendingJob(I)Landroid/app/job/JobInfo;
+HPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->schedule(Landroid/app/job/JobInfo;)I
+HPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->scheduleAsPackage(Landroid/app/job/JobInfo;Ljava/lang/String;ILjava/lang/String;)I
+HPLcom/android/server/job/JobSchedulerService$LocalService$1;->process(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/JobSchedulerService$LocalService;->getSystemScheduledPendingJobs()Ljava/util/List;
+HPLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;->process(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/JobSchedulerService$ReadyJobQueueFunctor;->process(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/JobSchedulerService;->-wrap0(Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/JobSchedulerService;->-wrap1(Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/JobSchedulerService;->-wrap5(Lcom/android/server/job/JobSchedulerService;)V
+HPLcom/android/server/job/JobSchedulerService;->-wrap6(Lcom/android/server/job/JobSchedulerService;)V
+HPLcom/android/server/job/JobSchedulerService;->addOrderedItem(Ljava/util/ArrayList;Ljava/lang/Object;Ljava/util/Comparator;)V
+HPLcom/android/server/job/JobSchedulerService;->adjustJobPriority(ILcom/android/server/job/controllers/JobStatus;)I
+HPLcom/android/server/job/JobSchedulerService;->assignJobsToContextsLocked()V
+HPLcom/android/server/job/JobSchedulerService;->cancelJob(II)V
+HPLcom/android/server/job/JobSchedulerService;->cancelJobImplLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Ljava/lang/String;)V
+HPLcom/android/server/job/JobSchedulerService;->evaluateJobPriorityLocked(Lcom/android/server/job/controllers/JobStatus;)I
+HPLcom/android/server/job/JobSchedulerService;->findJobContextIdFromMap(Lcom/android/server/job/controllers/JobStatus;[Lcom/android/server/job/controllers/JobStatus;)I
+HPLcom/android/server/job/JobSchedulerService;->getPendingJob(II)Landroid/app/job/JobInfo;
+HPLcom/android/server/job/JobSchedulerService;->getPendingJobs(I)Ljava/util/List;
+HPLcom/android/server/job/JobSchedulerService;->getRescheduleJobForFailureLocked(Lcom/android/server/job/controllers/JobStatus;)Lcom/android/server/job/controllers/JobStatus;
+HPLcom/android/server/job/JobSchedulerService;->isCurrentlyActiveLocked(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/JobSchedulerService;->isReadyToBeExecutedLocked(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/JobSchedulerService;->maybeRunPendingJobsLocked()V
+HPLcom/android/server/job/JobSchedulerService;->noteJobsNonpending(Ljava/util/List;)V
+HPLcom/android/server/job/JobSchedulerService;->onJobCompletedLocked(Lcom/android/server/job/controllers/JobStatus;Z)V
+HPLcom/android/server/job/JobSchedulerService;->queueReadyJobsForExecutionLocked()V
+HPLcom/android/server/job/JobSchedulerService;->reportActiveLocked()V
+HPLcom/android/server/job/JobSchedulerService;->scheduleAsPackage(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;ILjava/lang/String;ILjava/lang/String;)I
+HPLcom/android/server/job/JobSchedulerService;->startTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/JobSchedulerService;->stopJobOnServiceContextLocked(Lcom/android/server/job/controllers/JobStatus;ILjava/lang/String;)Z
+HPLcom/android/server/job/JobSchedulerService;->stopNonReadyActiveJobsLocked()V
+HPLcom/android/server/job/JobSchedulerService;->stopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)Z
+HPLcom/android/server/job/JobSchedulerService;->updateUidState(II)V
+HPLcom/android/server/job/JobServiceContext$JobCallback;-><init>(Lcom/android/server/job/JobServiceContext;)V
+HPLcom/android/server/job/JobServiceContext$JobCallback;->acknowledgeStartMessage(IZ)V
+HPLcom/android/server/job/JobServiceContext$JobCallback;->jobFinished(IZ)V
+HPLcom/android/server/job/JobServiceContext;->applyStoppedReasonLocked(Ljava/lang/String;)V
+HPLcom/android/server/job/JobServiceContext;->clearPreferredUid()V
+HPLcom/android/server/job/JobServiceContext;->closeAndCleanupJobLocked(ZLjava/lang/String;)V
+HPLcom/android/server/job/JobServiceContext;->doAcknowledgeStartMessage(Lcom/android/server/job/JobServiceContext$JobCallback;IZ)V
+HPLcom/android/server/job/JobServiceContext;->doCallback(Lcom/android/server/job/JobServiceContext$JobCallback;ZLjava/lang/String;)V
+HPLcom/android/server/job/JobServiceContext;->doCallbackLocked(ZLjava/lang/String;)V
+HPLcom/android/server/job/JobServiceContext;->doCompleteWork(Lcom/android/server/job/JobServiceContext$JobCallback;II)Z
+HPLcom/android/server/job/JobServiceContext;->doDequeueWork(Lcom/android/server/job/JobServiceContext$JobCallback;I)Landroid/app/job/JobWorkItem;
+HPLcom/android/server/job/JobServiceContext;->doJobFinished(Lcom/android/server/job/JobServiceContext$JobCallback;IZ)V
+HPLcom/android/server/job/JobServiceContext;->doServiceBoundLocked()V
+HPLcom/android/server/job/JobServiceContext;->executeRunnableJob(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/JobServiceContext;->getPreferredUid()I
+HPLcom/android/server/job/JobServiceContext;->getRunningJobLocked()Lcom/android/server/job/controllers/JobStatus;
+HPLcom/android/server/job/JobServiceContext;->handleFinishedLocked(ZLjava/lang/String;)V
+HPLcom/android/server/job/JobServiceContext;->handleServiceBoundLocked()V
+HPLcom/android/server/job/JobServiceContext;->handleStartedLocked(Z)V
+HPLcom/android/server/job/JobServiceContext;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/job/JobServiceContext;->removeOpTimeOutLocked()V
+HPLcom/android/server/job/JobServiceContext;->scheduleOpTimeOutLocked()V
+HPLcom/android/server/job/JobServiceContext;->verifyCallerLocked(Lcom/android/server/job/JobServiceContext$JobCallback;)Z
+HPLcom/android/server/job/JobStore$1$1;->process(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/JobStore$1;->addAttributesToJobTag(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/JobStore$1;->deepCopyBundle(Landroid/os/PersistableBundle;I)Landroid/os/PersistableBundle;
+HPLcom/android/server/job/JobStore$1;->run()V
+HPLcom/android/server/job/JobStore$1;->writeBundleToXml(Landroid/os/PersistableBundle;Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/job/JobStore$1;->writeConstraintsToXml(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/JobStore$1;->writeExecutionCriteriaToXml(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/JobStore$1;->writeJobsMapImpl(Ljava/util/List;)V
+HPLcom/android/server/job/JobStore$JobSet;->add(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/JobStore$JobSet;->contains(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/JobStore$JobSet;->countJobsForUid(I)I
+HPLcom/android/server/job/JobStore$JobSet;->forEachJob(ILcom/android/server/job/JobStore$JobStatusFunctor;)V
+HPLcom/android/server/job/JobStore$JobSet;->forEachJob(Lcom/android/server/job/JobStore$JobStatusFunctor;)V
+HPLcom/android/server/job/JobStore$JobSet;->get(II)Lcom/android/server/job/controllers/JobStatus;
+HPLcom/android/server/job/JobStore$JobSet;->getJobsByUid(I)Ljava/util/List;
+HPLcom/android/server/job/JobStore$JobSet;->remove(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/JobStore$ReadJobMapFromDiskRunnable;->buildBuilderFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/app/job/JobInfo$Builder;
+HPLcom/android/server/job/JobStore$ReadJobMapFromDiskRunnable;->buildConstraintsFromXml(Landroid/app/job/JobInfo$Builder;Lorg/xmlpull/v1/XmlPullParser;)V
+HPLcom/android/server/job/JobStore$ReadJobMapFromDiskRunnable;->buildRtcExecutionTimesFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/util/Pair;
+HPLcom/android/server/job/JobStore$ReadJobMapFromDiskRunnable;->readJobMapImpl(Ljava/io/FileInputStream;Z)Ljava/util/List;
+HPLcom/android/server/job/JobStore$ReadJobMapFromDiskRunnable;->restoreJobFromXml(ZLorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/job/controllers/JobStatus;
+HPLcom/android/server/job/JobStore$ReadJobMapFromDiskRunnable;->run()V
+HPLcom/android/server/job/JobStore;->-get1(Lcom/android/server/job/JobStore;)Lcom/android/server/job/JobSchedulerInternal$JobStorePersistStats;
+HPLcom/android/server/job/JobStore;->-wrap1(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/JobStore;->add(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/JobStore;->containsJob(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/JobStore;->convertRtcBoundsToElapsed(Landroid/util/Pair;J)Landroid/util/Pair;
+HPLcom/android/server/job/JobStore;->countJobsForUid(I)I
+HPLcom/android/server/job/JobStore;->forEachJob(Lcom/android/server/job/JobStore$JobStatusFunctor;)V
+HPLcom/android/server/job/JobStore;->getJobByUidAndJobId(II)Lcom/android/server/job/controllers/JobStatus;
+HPLcom/android/server/job/JobStore;->isSyncJob(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/JobStore;->maybeWriteStatusToDiskAsync()V
+HPLcom/android/server/job/JobStore;->remove(Lcom/android/server/job/controllers/JobStatus;Z)Z
+HPLcom/android/server/job/StateChangedListener;->onControllerStateChanged()V
+HPLcom/android/server/job/StateChangedListener;->onDeviceIdleStateChanged(Z)V
+HPLcom/android/server/job/StateChangedListener;->onRunJobNow(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/AppIdleController$AppIdleStateChangeListener;->onAppIdleStateChanged(Ljava/lang/String;IZ)V
+HPLcom/android/server/job/controllers/AppIdleController$GlobalUpdateFunc;->process(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/AppIdleController$PackageUpdateFunc;-><init>(ILjava/lang/String;Z)V
+HPLcom/android/server/job/controllers/AppIdleController$PackageUpdateFunc;->process(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/AppIdleController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/BatteryController;->maybeReportNewChargingStateLocked()V
+HPLcom/android/server/job/controllers/BatteryController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/BatteryController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V
+HPLcom/android/server/job/controllers/ConnectivityController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/ConnectivityController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V
+HPLcom/android/server/job/controllers/ConnectivityController;->updateConstraintsSatisfied(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/controllers/ConnectivityController;->updateTrackedJobs(I)V
+HPLcom/android/server/job/controllers/ContentObserverController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/ContentObserverController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V
+HPLcom/android/server/job/controllers/ContentObserverController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/DeviceIdleJobsController;->isWhitelistedLocked(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/controllers/DeviceIdleJobsController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/DeviceIdleJobsController;->updateTaskStateLocked(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/IdleController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/IdleController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V
+HPLcom/android/server/job/controllers/JobStatus;-><init>(Landroid/app/job/JobInfo;ILjava/lang/String;ILjava/lang/String;IJJJJ)V
+HPLcom/android/server/job/controllers/JobStatus;-><init>(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/JobStatus;->clearTrackingController(I)Z
+HPLcom/android/server/job/controllers/JobStatus;->createFromJobInfo(Landroid/app/job/JobInfo;ILjava/lang/String;ILjava/lang/String;)Lcom/android/server/job/controllers/JobStatus;
+HPLcom/android/server/job/controllers/JobStatus;->dequeueWorkLocked()Landroid/app/job/JobWorkItem;
+HPLcom/android/server/job/controllers/JobStatus;->enqueueWorkLocked(Landroid/app/IActivityManager;Landroid/app/job/JobWorkItem;)V
+HPLcom/android/server/job/controllers/JobStatus;->getBatteryName()Ljava/lang/String;
+HPLcom/android/server/job/controllers/JobStatus;->getEarliestRunTime()J
+HPLcom/android/server/job/controllers/JobStatus;->getFlags()I
+HPLcom/android/server/job/controllers/JobStatus;->getJob()Landroid/app/job/JobInfo;
+HPLcom/android/server/job/controllers/JobStatus;->getJobId()I
+HPLcom/android/server/job/controllers/JobStatus;->getLastFailedRunTime()J
+HPLcom/android/server/job/controllers/JobStatus;->getLastSuccessfulRunTime()J
+HPLcom/android/server/job/controllers/JobStatus;->getLatestRunTimeElapsed()J
+HPLcom/android/server/job/controllers/JobStatus;->getNumFailures()I
+HPLcom/android/server/job/controllers/JobStatus;->getPersistedUtcTimes()Landroid/util/Pair;
+HPLcom/android/server/job/controllers/JobStatus;->getPriority()I
+HPLcom/android/server/job/controllers/JobStatus;->getServiceComponent()Landroid/content/ComponentName;
+HPLcom/android/server/job/controllers/JobStatus;->getSourcePackageName()Ljava/lang/String;
+HPLcom/android/server/job/controllers/JobStatus;->getSourceTag()Ljava/lang/String;
+HPLcom/android/server/job/controllers/JobStatus;->getSourceUid()I
+HPLcom/android/server/job/controllers/JobStatus;->getSourceUserId()I
+HPLcom/android/server/job/controllers/JobStatus;->getUid()I
+HPLcom/android/server/job/controllers/JobStatus;->getUserId()I
+HPLcom/android/server/job/controllers/JobStatus;->hasBatteryNotLowConstraint()Z
+HPLcom/android/server/job/controllers/JobStatus;->hasChargingConstraint()Z
+HPLcom/android/server/job/controllers/JobStatus;->hasConnectivityConstraint()Z
+HPLcom/android/server/job/controllers/JobStatus;->hasContentTriggerConstraint()Z
+HPLcom/android/server/job/controllers/JobStatus;->hasDeadlineConstraint()Z
+HPLcom/android/server/job/controllers/JobStatus;->hasIdleConstraint()Z
+HPLcom/android/server/job/controllers/JobStatus;->hasPowerConstraint()Z
+HPLcom/android/server/job/controllers/JobStatus;->hasStorageNotLowConstraint()Z
+HPLcom/android/server/job/controllers/JobStatus;->hasTimingDelayConstraint()Z
+HPLcom/android/server/job/controllers/JobStatus;->isConstraintSatisfied(I)Z
+HPLcom/android/server/job/controllers/JobStatus;->isConstraintsSatisfied()Z
+HPLcom/android/server/job/controllers/JobStatus;->isPersisted()Z
+HPLcom/android/server/job/controllers/JobStatus;->isReady()Z
+HPLcom/android/server/job/controllers/JobStatus;->matches(II)Z
+HPLcom/android/server/job/controllers/JobStatus;->needsAnyConnectivity()Z
+HPLcom/android/server/job/controllers/JobStatus;->needsMeteredConnectivity()Z
+HPLcom/android/server/job/controllers/JobStatus;->needsNonRoamingConnectivity()Z
+HPLcom/android/server/job/controllers/JobStatus;->needsUnmeteredConnectivity()Z
+HPLcom/android/server/job/controllers/JobStatus;->prepareLocked(Landroid/app/IActivityManager;)V
+HPLcom/android/server/job/controllers/JobStatus;->setAppNotIdleConstraintSatisfied(Z)Z
+HPLcom/android/server/job/controllers/JobStatus;->setConnectivityConstraintSatisfied(Z)Z
+HPLcom/android/server/job/controllers/JobStatus;->setConstraintSatisfied(IZ)Z
+HPLcom/android/server/job/controllers/JobStatus;->setDeviceNotDozingConstraintSatisfied(ZZ)Z
+HPLcom/android/server/job/controllers/JobStatus;->setMeteredConstraintSatisfied(Z)Z
+HPLcom/android/server/job/controllers/JobStatus;->setNotRoamingConstraintSatisfied(Z)Z
+HPLcom/android/server/job/controllers/JobStatus;->setTimingDelayConstraintSatisfied(Z)Z
+HPLcom/android/server/job/controllers/JobStatus;->setTrackingController(I)V
+HPLcom/android/server/job/controllers/JobStatus;->setUnmeteredConstraintSatisfied(Z)Z
+HPLcom/android/server/job/controllers/JobStatus;->stopTrackingJobLocked(Landroid/app/IActivityManager;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/JobStatus;->ungrantWorkList(Landroid/app/IActivityManager;Ljava/util/ArrayList;)V
+HPLcom/android/server/job/controllers/JobStatus;->unprepareLocked(Landroid/app/IActivityManager;)V
+HPLcom/android/server/job/controllers/StateController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/StorageController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/StorageController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V
+HPLcom/android/server/job/controllers/TimeController;->checkExpiredDeadlinesAndResetAlarm()V
+HPLcom/android/server/job/controllers/TimeController;->checkExpiredDelaysAndResetAlarm()V
+HPLcom/android/server/job/controllers/TimeController;->evaluateDeadlineConstraint(Lcom/android/server/job/controllers/JobStatus;J)Z
+HPLcom/android/server/job/controllers/TimeController;->evaluateTimingDelayConstraint(Lcom/android/server/job/controllers/JobStatus;J)Z
+HPLcom/android/server/job/controllers/TimeController;->maybeAdjustAlarmTime(J)J
+HPLcom/android/server/job/controllers/TimeController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/TimeController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V
+HPLcom/android/server/job/controllers/TimeController;->setDelayExpiredAlarmLocked(JI)V
+HPLcom/android/server/job/controllers/TimeController;->updateAlarmWithListenerLocked(Ljava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;JI)V
+HPLcom/android/server/lights/LightsService$LightImpl;->setColor(I)V
+HPLcom/android/server/location/ContextHubService;->addAppInstance(IIJI)I
+HPLcom/android/server/location/ContextHubService;->findNanoAppOnHub(ILandroid/hardware/location/NanoAppFilter;)[I
+HPLcom/android/server/location/ContextHubService;->onMessageReceipt([I[B)I
+HPLcom/android/server/location/CountryDetectorBase;->detectCountry()Landroid/location/Country;
+HPLcom/android/server/location/CountryDetectorBase;->stop()V
+HPLcom/android/server/location/GnssLocationProvider$GnssBatchingProvider;->flush()V
+HPLcom/android/server/location/GnssLocationProvider$GnssBatchingProvider;->getSize()I
+HPLcom/android/server/location/GnssLocationProvider$GnssBatchingProvider;->start(JZ)Z
+HPLcom/android/server/location/GnssLocationProvider$GnssBatchingProvider;->stop()Z
+HPLcom/android/server/location/GnssLocationProvider$GnssMetricsProvider;->getGnssMetricsAsProtoString()Ljava/lang/String;
+HPLcom/android/server/location/GnssLocationProvider$GnssSystemInfoProvider;->getGnssYearOfHardware()I
+HPLcom/android/server/location/GnssLocationProvider$ProviderHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/location/GnssLocationProvider$SetCarrierProperty;->set(I)Z
+HPLcom/android/server/location/GnssLocationProvider;->handleUpdateLocation(Landroid/location/Location;)V
+HPLcom/android/server/location/GnssLocationProvider;->reportNmea(J)V
+HPLcom/android/server/location/GnssLocationProvider;->reportSvStatus()V
+HPLcom/android/server/location/GnssLocationProvider;->sendMessage(IILjava/lang/Object;)V
+HPLcom/android/server/location/GnssLocationProvider;->updateRequirements()V
+HPLcom/android/server/location/GnssLocationProvider;->updateStatus(IIII)V
+HPLcom/android/server/location/GnssStatusListenerHelper$4;-><init>(Lcom/android/server/location/GnssStatusListenerHelper;I[I[F[F[F[F)V
+HPLcom/android/server/location/GnssStatusListenerHelper$4;->execute(Landroid/location/IGnssStatusListener;)V
+HPLcom/android/server/location/GnssStatusListenerHelper$4;->execute(Landroid/os/IInterface;)V
+HPLcom/android/server/location/GnssStatusListenerHelper$5;-><init>(Lcom/android/server/location/GnssStatusListenerHelper;JLjava/lang/String;)V
+HPLcom/android/server/location/GnssStatusListenerHelper$5;->execute(Landroid/location/IGnssStatusListener;)V
+HPLcom/android/server/location/GnssStatusListenerHelper$5;->execute(Landroid/os/IInterface;)V
+HPLcom/android/server/location/GnssStatusListenerHelper;->onNmeaReceived(JLjava/lang/String;)V
+HPLcom/android/server/location/GnssStatusListenerHelper;->onSvStatusChanged(I[I[F[F[F[F)V
+HPLcom/android/server/location/LocationBlacklist;->isBlacklisted(Ljava/lang/String;)Z
+HPLcom/android/server/location/LocationFudger;->getOrCreate(Landroid/location/Location;)Landroid/location/Location;
+HPLcom/android/server/location/LocationProviderProxy;->getName()Ljava/lang/String;
+HPLcom/android/server/location/RemoteListenerHelper$HandlerRunnable;-><init>(Lcom/android/server/location/RemoteListenerHelper;Landroid/os/IInterface;Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;)V
+HPLcom/android/server/location/RemoteListenerHelper$HandlerRunnable;->run()V
+HPLcom/android/server/location/RemoteListenerHelper$LinkedListener;->getUnderlyingListener()Landroid/os/IInterface;
+HPLcom/android/server/location/RemoteListenerHelper$ListenerOperation;->execute(Landroid/os/IInterface;)V
+HPLcom/android/server/location/RemoteListenerHelper;->foreach(Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;)V
+HPLcom/android/server/location/RemoteListenerHelper;->foreachUnsafe(Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;)V
+HPLcom/android/server/location/RemoteListenerHelper;->post(Landroid/os/IInterface;Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;)V
+HPLcom/android/server/locksettings/LockSettingsService;->checkReadPermission(Ljava/lang/String;I)V
+HPLcom/android/server/locksettings/LockSettingsService;->getLong(Ljava/lang/String;JI)J
+HPLcom/android/server/locksettings/LockSettingsService;->getStringUnchecked(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;->hashCode()I
+HPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;->set(ILjava/lang/String;I)Lcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;
+HPLcom/android/server/locksettings/LockSettingsStorage$Cache;->contains(ILjava/lang/String;I)Z
+HPLcom/android/server/locksettings/LockSettingsStorage$Cache;->hasKeyValue(Ljava/lang/String;I)Z
+HPLcom/android/server/locksettings/LockSettingsStorage$Cache;->peek(ILjava/lang/String;I)Ljava/lang/Object;
+HPLcom/android/server/locksettings/LockSettingsStorage$Cache;->peekKeyValue(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/locksettings/LockSettingsStorage$Callback;->initialize(Landroid/database/sqlite/SQLiteDatabase;)V
+HPLcom/android/server/locksettings/LockSettingsStorage;->readKeyValue(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/media/AudioPlaybackMonitor$OnAudioPlaybackStartedListener;->onAudioPlaybackStarted(I)V
+HPLcom/android/server/media/AudioPlaybackMonitor$OnAudioPlayerActiveStateChangedListener;->onAudioPlayerActiveStateChanged(IZ)V
+HPLcom/android/server/media/AudioPlaybackMonitor;->dispatchPlaybackConfigChange(Ljava/util/List;)V
+HPLcom/android/server/media/AudioPlaybackMonitor;->isActiveState(Ljava/lang/Integer;)Z
+HPLcom/android/server/media/MediaSessionRecord;->getStateWithUpdatedPosition()Landroid/media/session/PlaybackState;
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->getSessions(Landroid/content/ComponentName;I)Ljava/util/List;
+HPLcom/android/server/media/MediaSessionService;->getActiveSessionsLocked(I)Ljava/util/List;
+HPLcom/android/server/media/MediaSessionService;->getFullUserRecordLocked(I)Lcom/android/server/media/MediaSessionService$FullUserRecord;
+HPLcom/android/server/media/MediaSessionService;->pushSessionsChanged(I)V
+HPLcom/android/server/media/MediaSessionStack$OnMediaButtonSessionChangedListener;->onMediaButtonSessionChanged(Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord;)V
+HPLcom/android/server/media/MediaSessionStack;->getPriorityList(ZI)Ljava/util/ArrayList;
+HPLcom/android/server/media/RemoteDisplayProviderProxy$Callback;->onDisplayStateChanged(Lcom/android/server/media/RemoteDisplayProviderProxy;Landroid/media/RemoteDisplayState;)V
+HPLcom/android/server/media/RemoteDisplayProviderProxy;->hasComponentName(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/media/RemoteDisplayProviderWatcher$Callback;->addProvider(Lcom/android/server/media/RemoteDisplayProviderProxy;)V
+HPLcom/android/server/media/RemoteDisplayProviderWatcher$Callback;->removeProvider(Lcom/android/server/media/RemoteDisplayProviderProxy;)V
+HPLcom/android/server/media/RemoteDisplayProviderWatcher;->scanPackages()V
+HPLcom/android/server/midi/MidiService;->addPackageDeviceServer(Landroid/content/pm/ServiceInfo;)V
+HPLcom/android/server/midi/MidiService;->addPackageDeviceServers(Ljava/lang/String;)V
+HPLcom/android/server/net/NetworkIdentitySet;-><init>(Ljava/io/DataInputStream;)V
+HPLcom/android/server/net/NetworkIdentitySet;->isAnyMemberMetered()Z
+HPLcom/android/server/net/NetworkIdentitySet;->isAnyMemberRoaming()Z
+HPLcom/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
+HPLcom/android/server/net/NetworkPolicyManagerInternal;->isUidNetworkingBlocked(ILjava/lang/String;)Z
+HPLcom/android/server/net/NetworkPolicyManagerInternal;->isUidRestrictedOnMeteredNetworks(I)Z
+HPLcom/android/server/net/NetworkPolicyManagerInternal;->resetUserState(I)V
+HPLcom/android/server/net/NetworkPolicyManagerService$14;->handleMessage(Landroid/os/Message;)Z
+HPLcom/android/server/net/NetworkPolicyManagerService$15;->handleMessage(Landroid/os/Message;)Z
+HPLcom/android/server/net/NetworkPolicyManagerService$1;->onUidGone(IZ)V
+HPLcom/android/server/net/NetworkPolicyManagerService$1;->onUidStateChanged(IIJ)V
+HPLcom/android/server/net/NetworkPolicyManagerService$AppIdleStateChangeListener;->onAppIdleStateChanged(Ljava/lang/String;IZ)V
+HPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->isUidNetworkingBlocked(ILjava/lang/String;)Z
+HPLcom/android/server/net/NetworkPolicyManagerService$ProcStateSeqHistory;->addProcStateSeqUL(IJ)V
+HPLcom/android/server/net/NetworkPolicyManagerService$ProcStateSeqHistory;->increaseNext(II)I
+HPLcom/android/server/net/NetworkPolicyManagerService;->-get2(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/ArraySet;
+HPLcom/android/server/net/NetworkPolicyManagerService;->-wrap20(Lcom/android/server/net/NetworkPolicyManagerService;I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->-wrap3(Lcom/android/server/net/NetworkPolicyManagerService;IZ)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->-wrap9(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;II)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->dispatchUidRulesChanged(Landroid/net/INetworkPolicyListener;II)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->handleUidChanged(IIJ)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->handleUidGone(I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->hasInternetPermissions(I)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->hasRule(II)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->isUidForegroundOnRestrictBackgroundUL(I)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->isUidForegroundOnRestrictPowerUL(I)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->isUidIdle(I)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->isUidNetworkingBlockedInternal(IZ)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->isUidStateForegroundUL(I)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->isUidValidForBlacklistRules(I)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->isUidValidForWhitelistRules(I)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->isWhitelistedBatterySaverUL(IZ)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->removeUidStateUL(I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRule(III)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkStats(IZ)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRestrictBackgroundRulesOnUidStatusChangedUL(III)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForAppIdleUL(I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForAllAppsUL(I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForAppIdleParoleUL()V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForDataUsageRestrictionsUL(I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForDataUsageRestrictionsULInner(I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForPowerRestrictionsUL(I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForPowerRestrictionsUL(IIZ)I
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForPowerRestrictionsULInner(IIZ)I
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForTempWhitelistChangeUL()V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateUidStateUL(II)V
+HPLcom/android/server/net/NetworkStatsAccess;->isAccessibleToUser(III)Z
+HPLcom/android/server/net/NetworkStatsCollection$Key;-><init>(Lcom/android/server/net/NetworkIdentitySet;III)V
+HPLcom/android/server/net/NetworkStatsCollection$Key;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/net/NetworkStatsCollection$Key;->hashCode()I
+HPLcom/android/server/net/NetworkStatsCollection;->findOrCreateHistory(Lcom/android/server/net/NetworkIdentitySet;III)Landroid/net/NetworkStatsHistory;
+HPLcom/android/server/net/NetworkStatsCollection;->getSummary(Landroid/net/NetworkTemplate;JJII)Landroid/net/NetworkStats;
+HPLcom/android/server/net/NetworkStatsCollection;->noteRecordedHistory(JJJ)V
+HPLcom/android/server/net/NetworkStatsCollection;->read(Ljava/io/DataInputStream;)V
+HPLcom/android/server/net/NetworkStatsCollection;->recordData(Lcom/android/server/net/NetworkIdentitySet;IIIJJLandroid/net/NetworkStats$Entry;)V
+HPLcom/android/server/net/NetworkStatsCollection;->recordHistory(Lcom/android/server/net/NetworkStatsCollection$Key;Landroid/net/NetworkStatsHistory;)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
+HPLcom/android/server/net/NetworkStatsRecorder;->forcePersistLocked(J)V
+HPLcom/android/server/net/NetworkStatsRecorder;->getTotalSinceBootLocked(Landroid/net/NetworkTemplate;)Landroid/net/NetworkStats$Entry;
+HPLcom/android/server/net/NetworkStatsRecorder;->maybePersistLocked(J)V
+HPLcom/android/server/net/NetworkStatsRecorder;->recordSnapshotLocked(Landroid/net/NetworkStats;Ljava/util/Map;[Lcom/android/internal/net/VpnInfo;J)V
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings;->getAugmentEnabled()Z
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings;->getDevConfig()Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings;->getDevPersistBytes(J)J
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings;->getGlobalAlertBytes(J)J
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings;->getPollInterval()J
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings;->getSampleEnabled()Z
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings;->getTimeCacheMaxAge()J
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings;->getUidConfig()Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings;->getUidPersistBytes(J)J
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings;->getUidTagConfig()Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings;->getUidTagPersistBytes(J)J
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings;->getXtConfig()Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;
+HPLcom/android/server/net/NetworkStatsService$NetworkStatsSettings;->getXtPersistBytes(J)J
+HPLcom/android/server/net/NetworkStatsService;->performPollLocked(I)V
+HPLcom/android/server/net/NetworkStatsService;->performSampleLocked()V
+HPLcom/android/server/net/NetworkStatsService;->recordSnapshotLocked(J)V
+HPLcom/android/server/net/NetworkStatsService;->setUidForeground(IZ)V
+HPLcom/android/server/notification/-$Lambda$0oXbfIRCVxclfVVwXaE3J61tRFA$2;->$m$0()V
+HPLcom/android/server/notification/-$Lambda$0oXbfIRCVxclfVVwXaE3J61tRFA$2;-><init>(BILjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/notification/-$Lambda$0oXbfIRCVxclfVVwXaE3J61tRFA$2;->run()V
+HPLcom/android/server/notification/-$Lambda$0oXbfIRCVxclfVVwXaE3J61tRFA$3;->$m$0(I)Z
+HPLcom/android/server/notification/-$Lambda$0oXbfIRCVxclfVVwXaE3J61tRFA$3;->apply(I)Z
+HPLcom/android/server/notification/BadgeExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HPLcom/android/server/notification/CalendarTracker$Callback;->onChanged()V
+HPLcom/android/server/notification/ConditionProviders$Callback;->onBootComplete()V
+HPLcom/android/server/notification/ConditionProviders$Callback;->onConditionChanged(Landroid/net/Uri;Landroid/service/notification/Condition;)V
+HPLcom/android/server/notification/ConditionProviders$Callback;->onServiceAdded(Landroid/content/ComponentName;)V
+HPLcom/android/server/notification/ConditionProviders$Callback;->onUserSwitched()V
+HPLcom/android/server/notification/ConditionProviders;->getConfig()Lcom/android/server/notification/ManagedServices$Config;
+HPLcom/android/server/notification/ConditionProviders;->getRecordLocked(Landroid/net/Uri;Landroid/content/ComponentName;Z)Lcom/android/server/notification/ConditionProviders$ConditionRecord;
+HPLcom/android/server/notification/GlobalSortKeyComparator;->compare(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)I
+HPLcom/android/server/notification/GlobalSortKeyComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/notification/GroupHelper$Callback;->addAutoGroup(Ljava/lang/String;)V
+HPLcom/android/server/notification/GroupHelper$Callback;->addAutoGroupSummary(ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/notification/GroupHelper$Callback;->removeAutoGroup(Ljava/lang/String;)V
+HPLcom/android/server/notification/GroupHelper$Callback;->removeAutoGroupSummary(ILjava/lang/String;)V
+HPLcom/android/server/notification/ImportanceExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HPLcom/android/server/notification/ManagedServices$Config;-><init>()V
+HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->enabledAndUserMatches(I)Z
+HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isEnabledForCurrentProfiles()Z
+HPLcom/android/server/notification/ManagedServices;->-get0(Lcom/android/server/notification/ManagedServices;)Landroid/util/ArraySet;
+HPLcom/android/server/notification/ManagedServices;->getServiceFromTokenLocked(Landroid/os/IInterface;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
+HPLcom/android/server/notification/ManagedServices;->getServices()Ljava/util/List;
+HPLcom/android/server/notification/ManagedServices;->onPackagesChanged(Z[Ljava/lang/String;[I)V
+HPLcom/android/server/notification/ManagedServices;->rebindServices(Z)V
+HPLcom/android/server/notification/ManagedServices;->writeXml(Lorg/xmlpull/v1/XmlSerializer;Z)V
+HPLcom/android/server/notification/NotificationAdjustmentExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HPLcom/android/server/notification/NotificationChannelExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+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
+HPLcom/android/server/notification/NotificationComparator;->isCall(Lcom/android/server/notification/NotificationRecord;)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
+HPLcom/android/server/notification/NotificationDelegate;->clearEffects()V
+HPLcom/android/server/notification/NotificationDelegate;->onClearAll(III)V
+HPLcom/android/server/notification/NotificationDelegate;->onNotificationActionClick(IILjava/lang/String;I)V
+HPLcom/android/server/notification/NotificationDelegate;->onNotificationClear(IILjava/lang/String;Ljava/lang/String;II)V
+HPLcom/android/server/notification/NotificationDelegate;->onNotificationClick(IILjava/lang/String;)V
+HPLcom/android/server/notification/NotificationDelegate;->onNotificationError(IILjava/lang/String;Ljava/lang/String;IIILjava/lang/String;I)V
+HPLcom/android/server/notification/NotificationDelegate;->onNotificationExpansionChanged(Ljava/lang/String;ZZ)V
+HPLcom/android/server/notification/NotificationDelegate;->onNotificationVisibilityChanged([Lcom/android/internal/statusbar/NotificationVisibility;[Lcom/android/internal/statusbar/NotificationVisibility;)V
+HPLcom/android/server/notification/NotificationDelegate;->onPanelHidden()V
+HPLcom/android/server/notification/NotificationDelegate;->onPanelRevealed(ZI)V
+HPLcom/android/server/notification/NotificationDelegate;->onSetDisabled(I)V
+HPLcom/android/server/notification/NotificationIntrusivenessExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HPLcom/android/server/notification/NotificationManagerInternal;->enqueueNotification(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;I)V
+HPLcom/android/server/notification/NotificationManagerInternal;->removeForegroundServiceFlagFromNotification(Ljava/lang/String;II)V
+HPLcom/android/server/notification/NotificationManagerService$14;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;IILjava/lang/String;ILjava/lang/String;IIIIZ)V
+HPLcom/android/server/notification/NotificationManagerService$14;->run()V
+HPLcom/android/server/notification/NotificationManagerService$15;->run()V
+HPLcom/android/server/notification/NotificationManagerService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/notification/NotificationManagerService$7;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;II)V
+HPLcom/android/server/notification/NotificationManagerService$7;->createNotificationChannelGroups(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
+HPLcom/android/server/notification/NotificationManagerService$7;->createNotificationChannels(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
+HPLcom/android/server/notification/NotificationManagerService$7;->createNotificationChannelsImpl(Ljava/lang/String;ILandroid/content/pm/ParceledListSlice;)V
+HPLcom/android/server/notification/NotificationManagerService$7;->getActiveNotificationsFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/notification/NotificationManagerService$7;->getNotificationChannel(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;
+HPLcom/android/server/notification/NotificationManagerService$7;->getNotificationChannelGroups(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;->run()V
+HPLcom/android/server/notification/NotificationManagerService$FlagChecker;->apply(I)Z
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->getConfig()Lcom/android/server/notification/ManagedServices$Config;
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getConfig()Lcom/android/server/notification/ManagedServices$Config;
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->isListenerPackage(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$-com_android_server_notification_NotificationManagerService$NotificationListeners_242777(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelChanged(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelGroupChanged(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyPostedLocked(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;)V
+HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->run()V
+HPLcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;->requestSort()V
+HPLcom/android/server/notification/NotificationManagerService$WorkerHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/notification/NotificationManagerService;->-get18(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
+HPLcom/android/server/notification/NotificationManagerService;->-get25(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/RankingHelper;
+HPLcom/android/server/notification/NotificationManagerService;->-get27(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/SnoozeHelper;
+HPLcom/android/server/notification/NotificationManagerService;->-wrap18(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService;->-wrap3(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
+HPLcom/android/server/notification/NotificationManagerService;->-wrap32(Lcom/android/server/notification/NotificationManagerService;)V
+HPLcom/android/server/notification/NotificationManagerService;->buzzBeepBlinkLocked(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationManagerService;->cancelAllNotificationsByListLocked(Ljava/util/ArrayList;IILjava/lang/String;ZLjava/lang/String;Lcom/android/server/notification/NotificationManagerService$FlagChecker;ZIZILjava/lang/String;Z)V
+HPLcom/android/server/notification/NotificationManagerService;->cancelNotification(IILjava/lang/String;Ljava/lang/String;IIIZIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
+HPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSameApp(Ljava/lang/String;)V
+HPLcom/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;->clamp(III)I
+HPLcom/android/server/notification/NotificationManagerService;->enqueueNotificationInternal(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;I)V
+HPLcom/android/server/notification/NotificationManagerService;->findNotificationByListLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;
+HPLcom/android/server/notification/NotificationManagerService;->findNotificationLocked(Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;
+HPLcom/android/server/notification/NotificationManagerService;->getNotificationCountLocked(Ljava/lang/String;IILjava/lang/String;)I
+HPLcom/android/server/notification/NotificationManagerService;->handleRankingSort()V
+HPLcom/android/server/notification/NotificationManagerService;->handleSavePolicyFile()V
+HPLcom/android/server/notification/NotificationManagerService;->hasCompanionDevice(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
+HPLcom/android/server/notification/NotificationManagerService;->indexOfNotificationLocked(Ljava/lang/String;)I
+HPLcom/android/server/notification/NotificationManagerService;->isCallerSystemOrPhone()Z
+HPLcom/android/server/notification/NotificationManagerService;->isCallingUidSystem()Z
+HPLcom/android/server/notification/NotificationManagerService;->isUidSystemOrPhone(I)Z
+HPLcom/android/server/notification/NotificationManagerService;->isVisibleToListener(Landroid/service/notification/StatusBarNotification;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
+HPLcom/android/server/notification/NotificationManagerService;->makeRankingUpdateLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/NotificationRankingUpdate;
+HPLcom/android/server/notification/NotificationManagerService;->notificationMatchesUserId(Lcom/android/server/notification/NotificationRecord;I)Z
+HPLcom/android/server/notification/NotificationManagerService;->savePolicyFile()V
+HPLcom/android/server/notification/NotificationManagerService;->writePolicyXml(Ljava/io/OutputStream;Z)V
+HPLcom/android/server/notification/NotificationRecord;-><init>(Landroid/content/Context;Landroid/service/notification/StatusBarNotification;Landroid/app/NotificationChannel;)V
+HPLcom/android/server/notification/NotificationRecord;->applyAdjustments()V
+HPLcom/android/server/notification/NotificationRecord;->applyUserImportance()V
+HPLcom/android/server/notification/NotificationRecord;->calculateImportance()I
+HPLcom/android/server/notification/NotificationRecord;->calculateLights()Lcom/android/server/notification/NotificationRecord$Light;
+HPLcom/android/server/notification/NotificationRecord;->canShowBadge()Z
+HPLcom/android/server/notification/NotificationRecord;->getAuthoritativeRank()I
+HPLcom/android/server/notification/NotificationRecord;->getChannel()Landroid/app/NotificationChannel;
+HPLcom/android/server/notification/NotificationRecord;->getContactAffinity()F
+HPLcom/android/server/notification/NotificationRecord;->getFlags()I
+HPLcom/android/server/notification/NotificationRecord;->getFreshnessMs(J)I
+HPLcom/android/server/notification/NotificationRecord;->getGlobalSortKey()Ljava/lang/String;
+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;->getKey()Ljava/lang/String;
+HPLcom/android/server/notification/NotificationRecord;->getLogMaker(J)Landroid/metrics/LogMaker;
+HPLcom/android/server/notification/NotificationRecord;->getNotification()Landroid/app/Notification;
+HPLcom/android/server/notification/NotificationRecord;->getPackagePriority()I
+HPLcom/android/server/notification/NotificationRecord;->getPackageVisibilityOverride()I
+HPLcom/android/server/notification/NotificationRecord;->getPeopleOverride()Ljava/util/ArrayList;
+HPLcom/android/server/notification/NotificationRecord;->getRankingTimeMs()J
+HPLcom/android/server/notification/NotificationRecord;->getSnoozeCriteria()Ljava/util/ArrayList;
+HPLcom/android/server/notification/NotificationRecord;->getSuppressedVisualEffects()I
+HPLcom/android/server/notification/NotificationRecord;->getUser()Landroid/os/UserHandle;
+HPLcom/android/server/notification/NotificationRecord;->getUserExplanation()Ljava/lang/String;
+HPLcom/android/server/notification/NotificationRecord;->getUserId()I
+HPLcom/android/server/notification/NotificationRecord;->isIntercepted()Z
+HPLcom/android/server/notification/NotificationRecord;->isRecentlyIntrusive()Z
+HPLcom/android/server/notification/NotificationRecord;->setAuthoritativeRank(I)V
+HPLcom/android/server/notification/NotificationRecord;->setGlobalSortKey(Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationRecord;->setPackagePriority(I)V
+HPLcom/android/server/notification/NotificationRecord;->setPackageVisibilityOverride(I)V
+HPLcom/android/server/notification/NotificationRecord;->setShowBadge(Z)V
+HPLcom/android/server/notification/NotificationRecord;->setUserImportance(I)V
+HPLcom/android/server/notification/NotificationRecord;->setVisibility(ZI)V
+HPLcom/android/server/notification/NotificationRecord;->updateNotificationChannel(Landroid/app/NotificationChannel;)V
+HPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->countApiUse(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/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$SQLiteLog;->putNotificationDetails(Lcom/android/server/notification/NotificationRecord;Landroid/content/ContentValues;)V
+HPLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->writeEvent(JILcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationUsageStats;->getAggregatedStatsLocked(Lcom/android/server/notification/NotificationRecord;)[Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
+HPLcom/android/server/notification/NotificationUsageStats;->getAggregatedStatsLocked(Ljava/lang/String;)[Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
+HPLcom/android/server/notification/NotificationUsageStats;->getOrCreateAggregatedStatsLocked(Ljava/lang/String;)Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
+HPLcom/android/server/notification/NotificationUsageStats;->registerPeopleAffinity(Lcom/android/server/notification/NotificationRecord;ZZZ)V
+HPLcom/android/server/notification/NotificationUsageStats;->registerUpdatedByApp(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationUsageStats;->releaseAggregatedStatsLocked([Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;)V
+HPLcom/android/server/notification/PriorityExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HPLcom/android/server/notification/RankingConfig;->badgingEnabled(Landroid/os/UserHandle;)Z
+HPLcom/android/server/notification/RankingConfig;->canShowBadge(Ljava/lang/String;I)Z
+HPLcom/android/server/notification/RankingConfig;->createNotificationChannel(Ljava/lang/String;ILandroid/app/NotificationChannel;Z)V
+HPLcom/android/server/notification/RankingConfig;->createNotificationChannelGroup(Ljava/lang/String;ILandroid/app/NotificationChannelGroup;Z)V
+HPLcom/android/server/notification/RankingConfig;->deleteNotificationChannel(Ljava/lang/String;ILjava/lang/String;)V
+HPLcom/android/server/notification/RankingConfig;->getImportance(Ljava/lang/String;I)I
+HPLcom/android/server/notification/RankingConfig;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;Z)Landroid/app/NotificationChannel;
+HPLcom/android/server/notification/RankingConfig;->getNotificationChannelGroups(Ljava/lang/String;I)Ljava/util/Collection;
+HPLcom/android/server/notification/RankingConfig;->getNotificationChannelGroups(Ljava/lang/String;IZ)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/notification/RankingConfig;->getNotificationChannels(Ljava/lang/String;IZ)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/notification/RankingConfig;->permanentlyDeleteNotificationChannel(Ljava/lang/String;ILjava/lang/String;)V
+HPLcom/android/server/notification/RankingConfig;->permanentlyDeleteNotificationChannels(Ljava/lang/String;I)V
+HPLcom/android/server/notification/RankingConfig;->setImportance(Ljava/lang/String;II)V
+HPLcom/android/server/notification/RankingConfig;->setShowBadge(Ljava/lang/String;IZ)V
+HPLcom/android/server/notification/RankingConfig;->updateNotificationChannel(Ljava/lang/String;ILandroid/app/NotificationChannel;)V
+HPLcom/android/server/notification/RankingHandler;->requestReconsideration(Lcom/android/server/notification/RankingReconsideration;)V
+HPLcom/android/server/notification/RankingHandler;->requestSort()V
+HPLcom/android/server/notification/RankingHelper;->badgingEnabled(Landroid/os/UserHandle;)Z
+HPLcom/android/server/notification/RankingHelper;->canShowBadge(Ljava/lang/String;I)Z
+HPLcom/android/server/notification/RankingHelper;->createNotificationChannel(Ljava/lang/String;ILandroid/app/NotificationChannel;Z)V
+HPLcom/android/server/notification/RankingHelper;->createNotificationChannelGroup(Ljava/lang/String;ILandroid/app/NotificationChannelGroup;Z)V
+HPLcom/android/server/notification/RankingHelper;->extractSignals(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/RankingHelper;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;Z)Landroid/app/NotificationChannel;
+HPLcom/android/server/notification/RankingHelper;->getOrCreateRecord(Ljava/lang/String;I)Lcom/android/server/notification/RankingHelper$Record;
+HPLcom/android/server/notification/RankingHelper;->getOrCreateRecord(Ljava/lang/String;IIIIZ)Lcom/android/server/notification/RankingHelper$Record;
+HPLcom/android/server/notification/RankingHelper;->getRecord(Ljava/lang/String;I)Lcom/android/server/notification/RankingHelper$Record;
+HPLcom/android/server/notification/RankingHelper;->onPackagesChanged(ZI[Ljava/lang/String;[I)V
+HPLcom/android/server/notification/RankingHelper;->readXml(Lorg/xmlpull/v1/XmlPullParser;Z)V
+HPLcom/android/server/notification/RankingHelper;->recordKey(Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/notification/RankingHelper;->sort(Ljava/util/ArrayList;)V
+HPLcom/android/server/notification/RankingHelper;->updateConfig()V
+HPLcom/android/server/notification/RankingHelper;->writeXml(Lorg/xmlpull/v1/XmlSerializer;Z)V
+HPLcom/android/server/notification/SnoozeHelper$Callback;->repost(ILcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/SnoozeHelper;->cancel(ILjava/lang/String;Ljava/lang/String;I)Z
+HPLcom/android/server/notification/ValidateNotificationPeople;->getContextAsUser(Landroid/os/UserHandle;)Landroid/content/Context;
+HPLcom/android/server/notification/ValidateNotificationPeople;->getExtraPeople(Landroid/os/Bundle;)[Ljava/lang/String;
+HPLcom/android/server/notification/ValidateNotificationPeople;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+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;
+HPLcom/android/server/notification/VisibilityExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HPLcom/android/server/notification/ZenModeConditions;->evaluateRule(Landroid/service/notification/ZenModeConfig$ZenRule;Landroid/util/ArraySet;Z)V
+HPLcom/android/server/notification/ZenModeHelper;->applyRestrictions()V
+HPLcom/android/server/notification/ZenModeHelper;->applyRestrictions(ZI)V
+HPLcom/android/server/notification/ZenModeHelper;->writeXml(Lorg/xmlpull/v1/XmlSerializer;Z)V
+HPLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk$3;->$m$0(Ljava/lang/Object;)Z
+HPLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk$3;-><init>(Ljava/lang/Object;)V
+HPLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk$3;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk$4;->$m$0(Ljava/lang/Object;)Z
+HPLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk$4;-><init>(I)V
+HPLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk$4;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/om/OverlayManagerService$1;->getOverlayInfo(Ljava/lang/String;I)Landroid/content/om/OverlayInfo;
+HPLcom/android/server/om/OverlayManagerService$1;->handleIncomingUser(ILjava/lang/String;)I
+HPLcom/android/server/om/OverlayManagerService$PackageReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/om/OverlayManagerService;->updateOverlayPaths(ILjava/util/List;)V
+HPLcom/android/server/om/OverlayManagerServiceImpl$OverlayChangeListener;->onOverlaysChanged(Ljava/lang/String;I)V
+HPLcom/android/server/om/OverlayManagerServiceImpl$PackageManagerHelper;->getOverlayPackages(I)Ljava/util/List;
+HPLcom/android/server/om/OverlayManagerServiceImpl$PackageManagerHelper;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
+HPLcom/android/server/om/OverlayManagerServiceImpl$PackageManagerHelper;->signaturesMatching(Ljava/lang/String;Ljava/lang/String;I)Z
+HPLcom/android/server/om/OverlayManagerServiceImpl;->getEnabledOverlayPackageNames(Ljava/lang/String;I)Ljava/util/List;
+HPLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-get3(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Ljava/lang/String;
+HPLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-get7(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)I
+HPLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-wrap9(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Ljava/lang/String;
+HPLcom/android/server/om/OverlayManagerSettings$SettingsItem;->getTargetPackageName()Ljava/lang/String;
+HPLcom/android/server/om/OverlayManagerSettings;->getOverlayInfo(Ljava/lang/String;I)Landroid/content/om/OverlayInfo;
+HPLcom/android/server/om/OverlayManagerSettings;->getOverlaysForTarget(Ljava/lang/String;I)Ljava/util/List;
+HPLcom/android/server/om/OverlayManagerSettings;->lambda$-com_android_server_om_OverlayManagerSettings_19551(ILcom/android/server/om/OverlayManagerSettings$SettingsItem;)Z
+HPLcom/android/server/om/OverlayManagerSettings;->lambda$-com_android_server_om_OverlayManagerSettings_19778(Ljava/lang/String;Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Z
+HPLcom/android/server/om/OverlayManagerSettings;->select(Ljava/lang/String;I)I
+HPLcom/android/server/om/OverlayManagerSettings;->selectWhereTarget(Ljava/lang/String;I)Ljava/util/stream/Stream;
+HPLcom/android/server/om/OverlayManagerSettings;->selectWhereUser(I)Ljava/util/stream/Stream;
+HPLcom/android/server/pm/-$Lambda$akZNYSpRQU-aMo9i0sDNiuGZqwY$1;->$m$1(Ljava/lang/Object;)V
+HPLcom/android/server/pm/-$Lambda$akZNYSpRQU-aMo9i0sDNiuGZqwY$1;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/-$Lambda$qKHXTlzWfY0UTc6aCYQ5haVEjEY$3;->$m$0(Ljava/lang/Object;)Z
+HPLcom/android/server/pm/-$Lambda$qKHXTlzWfY0UTc6aCYQ5haVEjEY$3;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/pm/AbstractStatsBase;->maybeWriteAsync(Ljava/lang/Object;)Z
+HPLcom/android/server/pm/BackgroundDexOptService;->getBatteryLevel()I
+HPLcom/android/server/pm/BackgroundDexOptService;->postBootUpdate(Landroid/app/job/JobParameters;Lcom/android/server/pm/PackageManagerService;Landroid/util/ArraySet;)V
+HPLcom/android/server/pm/CompilerStats$PackageStats;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/pm/CompilerStats;->createPackageStats(Ljava/lang/String;)Lcom/android/server/pm/CompilerStats$PackageStats;
+HPLcom/android/server/pm/CompilerStats;->getOrCreatePackageStats(Ljava/lang/String;)Lcom/android/server/pm/CompilerStats$PackageStats;
+HPLcom/android/server/pm/CompilerStats;->maybeWriteAsync()Z
+HPLcom/android/server/pm/EphemeralResolverConnection$GetEphemeralResolveInfoCaller$1;->sendResult(Landroid/os/Bundle;)V
+HPLcom/android/server/pm/EphemeralResolverConnection$GetEphemeralResolveInfoCaller;->getEphemeralResolveInfoList(Landroid/app/IInstantAppResolver;[ILjava/lang/String;)Ljava/util/List;
+HPLcom/android/server/pm/EphemeralResolverConnection;->getInstantAppResolveInfoList([ILjava/lang/String;)Ljava/util/List;
+HPLcom/android/server/pm/EphemeralResolverConnection;->getRemoteInstanceLazy(Ljava/lang/String;)Landroid/app/IInstantAppResolver;
+HPLcom/android/server/pm/EphemeralResolverConnection;->throwIfCalledOnMainThread()V
+HPLcom/android/server/pm/InstantAppRegistry;->grantInstantAccessLPw(ILandroid/content/Intent;II)V
+HPLcom/android/server/pm/InstantAppResolver;->doInstantAppResolutionPhaseOne(Landroid/content/Context;Lcom/android/server/pm/EphemeralResolverConnection;Landroid/content/pm/InstantAppRequest;)Landroid/content/pm/AuxiliaryResolveInfo;
+HPLcom/android/server/pm/InstructionSets;->getAllDexCodeInstructionSets()[Ljava/lang/String;
+HPLcom/android/server/pm/InstructionSets;->getAppDexInstructionSets(Landroid/content/pm/ApplicationInfo;)[Ljava/lang/String;
+HPLcom/android/server/pm/InstructionSets;->getDexCodeInstructionSet(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/pm/InstructionSets;->getDexCodeInstructionSets([Ljava/lang/String;)[Ljava/lang/String;
+HPLcom/android/server/pm/KeySetManagerService;->dumpLPr(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/PackageManagerService$DumpState;)V
+HPLcom/android/server/pm/KeySetManagerService;->encodePublicKey(Ljava/security/PublicKey;)Ljava/lang/String;
+HPLcom/android/server/pm/KeySetManagerService;->writeKeySetManagerServiceLPr(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/pm/KeySetManagerService;->writeKeySetsLPr(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/pm/KeySetManagerService;->writePublicKeysLPr(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onPackageModified(Ljava/lang/String;)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onShortcutChangedInner(Ljava/lang/String;I)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->canAccessProfile(Ljava/lang/String;ILjava/lang/String;)Z
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->canAccessProfile(Ljava/lang/String;Landroid/os/UserHandle;Ljava/lang/String;)Z
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectBinderCallingUid()I
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectCallingUserId()I
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectClearCallingIdentity()J
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectRestoreCallingIdentity(J)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isUserEnabled(I)Z
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isUserEnabled(Landroid/os/UserHandle;)Z
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->queryActivitiesForUser(Ljava/lang/String;Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->resolveActivity(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Landroid/content/pm/ActivityInfo;
+HPLcom/android/server/pm/PackageDexOptimizer;->acquireWakeLockLI(I)J
+HPLcom/android/server/pm/PackageDexOptimizer;->canOptimizePackage(Landroid/content/pm/PackageParser$Package;)Z
+HPLcom/android/server/pm/PackageDexOptimizer;->dexOptPath(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;IILcom/android/server/pm/CompilerStats$PackageStats;Z)I
+HPLcom/android/server/pm/PackageDexOptimizer;->dumpDexoptState(Lcom/android/internal/util/IndentingPrintWriter;Landroid/content/pm/PackageParser$Package;Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)V
+HPLcom/android/server/pm/PackageDexOptimizer;->getDexFlags(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Z)I
+HPLcom/android/server/pm/PackageDexOptimizer;->getDexFlags(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;Z)I
+HPLcom/android/server/pm/PackageDexOptimizer;->getDexoptNeeded(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)I
+HPLcom/android/server/pm/PackageDexOptimizer;->getRealCompilerFilter(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Z)Ljava/lang/String;
+HPLcom/android/server/pm/PackageDexOptimizer;->performDexOpt(Landroid/content/pm/PackageParser$Package;[Ljava/lang/String;[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/PackageParser$Package;[Ljava/lang/String;[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;->releaseWakeLockLI(J)V
+HPLcom/android/server/pm/PackageInstallerService$Callbacks;->-wrap3(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;->notifySessionProgressChanged(IIF)V
+HPLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionProgressChanged(Lcom/android/server/pm/PackageInstallerSession;F)V
+HPLcom/android/server/pm/PackageInstallerService;->-get0(Lcom/android/server/pm/PackageInstallerService;)Lcom/android/server/pm/PackageInstallerService$Callbacks;
+HPLcom/android/server/pm/PackageInstallerService;->createSessionInternal(Landroid/content/pm/PackageInstaller$SessionParams;Ljava/lang/String;I)I
+HPLcom/android/server/pm/PackageInstallerService;->getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;
+HPLcom/android/server/pm/PackageInstallerService;->writeSessionsLocked()V
+HPLcom/android/server/pm/PackageInstallerSession;->addClientProgress(F)V
+HPLcom/android/server/pm/PackageInstallerSession;->assertCallerIsOwnerOrRootLocked()V
+HPLcom/android/server/pm/PackageInstallerSession;->buildAppIconFile(ILjava/io/File;)Ljava/io/File;
+HPLcom/android/server/pm/PackageInstallerSession;->computeProgressLocked(Z)V
+HPLcom/android/server/pm/PackageInstallerSession;->dumpLocked(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/pm/PackageInstallerSession;->generateInfo()Landroid/content/pm/PackageInstaller$SessionInfo;
+HPLcom/android/server/pm/PackageInstallerSession;->generateInfo(Z)Landroid/content/pm/PackageInstaller$SessionInfo;
+HPLcom/android/server/pm/PackageInstallerSession;->openWriteInternal(Ljava/lang/String;JJ)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/pm/PackageInstallerSession;->setClientProgress(F)V
+HPLcom/android/server/pm/PackageInstallerSession;->validateInstallLocked(Landroid/content/pm/PackageInfo;)V
+HPLcom/android/server/pm/PackageInstallerSession;->write(Lorg/xmlpull/v1/XmlSerializer;Ljava/io/File;)V
+HPLcom/android/server/pm/PackageManagerService$20;->getMountMode(ILjava/lang/String;)I
+HPLcom/android/server/pm/PackageManagerService$20;->hasExternalStorage(ILjava/lang/String;)Z
+HPLcom/android/server/pm/PackageManagerService$2;->compare(Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;)I
+HPLcom/android/server/pm/PackageManagerService$2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/pm/PackageManagerService$3;->compare(Landroid/content/pm/ProviderInfo;Landroid/content/pm/ProviderInfo;)I
+HPLcom/android/server/pm/PackageManagerService$3;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/pm/PackageManagerService$6;->run()V
+HPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->-get0(Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver;)Landroid/util/ArrayMap;
+HPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/content/IntentFilter;)V
+HPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/content/pm/PackageParser$ActivityIntentInfo;)V
+HPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->isFilterStopped(Landroid/content/IntentFilter;I)Z
+HPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->isFilterStopped(Landroid/content/pm/PackageParser$ActivityIntentInfo;I)Z
+HPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/IntentFilter;)Z
+HPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/pm/PackageParser$ActivityIntentInfo;)Z
+HPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->queryIntentForPackage(Landroid/content/Intent;Ljava/lang/String;ILjava/util/ArrayList;I)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->removeActivity(Landroid/content/pm/PackageParser$Activity;Ljava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService$DumpState;->isDumping(I)Z
+HPLcom/android/server/pm/PackageManagerService$FileInstallArgs;->doRename(ILandroid/content/pm/PackageParser$Package;Ljava/lang/String;)Z
+HPLcom/android/server/pm/PackageManagerService$HandlerParams;->handleReturnCode()V
+HPLcom/android/server/pm/PackageManagerService$HandlerParams;->handleServiceError()V
+HPLcom/android/server/pm/PackageManagerService$HandlerParams;->handleStartCopy()V
+HPLcom/android/server/pm/PackageManagerService$InstallArgs;->cleanUpResourcesLI()V
+HPLcom/android/server/pm/PackageManagerService$InstallArgs;->copyApk(Lcom/android/internal/app/IMediaContainerService;Z)I
+HPLcom/android/server/pm/PackageManagerService$InstallArgs;->doPostDeleteLI(Z)Z
+HPLcom/android/server/pm/PackageManagerService$InstallArgs;->doPostInstall(II)I
+HPLcom/android/server/pm/PackageManagerService$InstallArgs;->doPreInstall(I)I
+HPLcom/android/server/pm/PackageManagerService$InstallArgs;->doRename(ILandroid/content/pm/PackageParser$Package;Ljava/lang/String;)Z
+HPLcom/android/server/pm/PackageManagerService$InstallArgs;->getCodePath()Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService$InstallArgs;->getResourcePath()Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService$InstallParams;->handleStartCopy()V
+HPLcom/android/server/pm/PackageManagerService$IntentFilterVerifier;->addOneIntentFilterVerification(IIILandroid/content/IntentFilter;Ljava/lang/String;)Z
+HPLcom/android/server/pm/PackageManagerService$IntentFilterVerifier;->receiveVerificationResponse(I)V
+HPLcom/android/server/pm/PackageManagerService$IntentFilterVerifier;->startVerifications(I)V
+HPLcom/android/server/pm/PackageManagerService$PackageHandler;->doHandleMessage(Landroid/os/Message;)V
+HPLcom/android/server/pm/PackageManagerService$PackageHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->canAccessInstantApps(II)Z
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getActivityInfo(Landroid/content/ComponentName;III)Landroid/content/pm/ActivityInfo;
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getOverlayPackages(I)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getTargetPackageNames(I)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getUidTargetSdkVersion(I)I
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->grantEphemeralAccess(ILandroid/content/Intent;II)V
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPackageEphemeral(ILjava/lang/String;)Z
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPackagePersistent(Ljava/lang/String;)Z
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->resolveService(Landroid/content/Intent;Ljava/lang/String;III)Landroid/content/pm/ResolveInfo;
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setEnabledOverlayPackages(ILjava/lang/String;Ljava/util/List;)Z
+HPLcom/android/server/pm/PackageManagerService$PackageManagerNative;->getNamesForUids([I)[Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService$ProviderIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/IntentFilter;)Z
+HPLcom/android/server/pm/PackageManagerService$ProviderIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/pm/PackageParser$ProviderIntentInfo;)Z
+HPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->-get0(Lcom/android/server/pm/PackageManagerService$ServiceIntentResolver;)Landroid/util/ArrayMap;
+HPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->allowFilterResult(Landroid/content/IntentFilter;Ljava/util/List;)Z
+HPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->allowFilterResult(Landroid/content/pm/PackageParser$ServiceIntentInfo;Ljava/util/List;)Z
+HPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/content/IntentFilter;)V
+HPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/content/pm/PackageParser$ServiceIntentInfo;)V
+HPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/IntentFilter;)Z
+HPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->isPackageForFilter(Ljava/lang/String;Landroid/content/pm/PackageParser$ServiceIntentInfo;)Z
+HPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->newResult(Landroid/content/IntentFilter;II)Ljava/lang/Object;
+HPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->newResult(Landroid/content/pm/PackageParser$ServiceIntentInfo;II)Landroid/content/pm/ResolveInfo;
+HPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->queryIntent(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->queryIntentForPackage(Landroid/content/Intent;Ljava/lang/String;ILjava/util/ArrayList;I)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->removeService(Landroid/content/pm/PackageParser$Service;)V
+HPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->sortResults(Ljava/util/List;)V
+HPLcom/android/server/pm/PackageManagerService;->-get7(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/InstantAppRegistry;
+HPLcom/android/server/pm/PackageManagerService;->-wrap1(Lcom/android/server/pm/PackageManagerService;Landroid/content/ComponentName;III)Landroid/content/pm/ActivityInfo;
+HPLcom/android/server/pm/PackageManagerService;->-wrap18(Lcom/android/server/pm/PackageManagerService;I)I
+HPLcom/android/server/pm/PackageManagerService;->-wrap6(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;III)Landroid/content/pm/ResolveInfo;
+HPLcom/android/server/pm/PackageManagerService;->-wrap7(Lcom/android/server/pm/PackageManagerService;II)Z
+HPLcom/android/server/pm/PackageManagerService;->applyPostServiceResolutionFilter(Ljava/util/List;Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->canViewInstantApps(II)Z
+HPLcom/android/server/pm/PackageManagerService;->checkPackageStartable(Ljava/lang/String;I)V
+HPLcom/android/server/pm/PackageManagerService;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I
+HPLcom/android/server/pm/PackageManagerService;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I
+HPLcom/android/server/pm/PackageManagerService;->checkUidPermission(Ljava/lang/String;I)I
+HPLcom/android/server/pm/PackageManagerService;->checkUidSignatures(II)I
+HPLcom/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/PackageParser$Package;Z)V
+HPLcom/android/server/pm/PackageManagerService;->collectAbsoluteCodePaths()Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)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;->enforceShellRestriction(Ljava/lang/String;II)V
+HPLcom/android/server/pm/PackageManagerService;->filterAppAccessLPr(Lcom/android/server/pm/PackageSetting;II)Z
+HPLcom/android/server/pm/PackageManagerService;->filterAppAccessLPr(Lcom/android/server/pm/PackageSetting;ILandroid/content/ComponentName;II)Z
+HPLcom/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;->filterSharedLibPackageLPr(Lcom/android/server/pm/PackageSetting;III)Z
+HPLcom/android/server/pm/PackageManagerService;->findSharedNonSystemLibraries(Landroid/content/pm/PackageParser$Package;)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->generatePackageInfo(Lcom/android/server/pm/PackageSetting;II)Landroid/content/pm/PackageInfo;
+HPLcom/android/server/pm/PackageManagerService;->getActivityInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo;
+HPLcom/android/server/pm/PackageManagerService;->getActivityInfoInternal(Landroid/content/ComponentName;III)Landroid/content/pm/ActivityInfo;
+HPLcom/android/server/pm/PackageManagerService;->getApplicationEnabledSetting(Ljava/lang/String;I)I
+HPLcom/android/server/pm/PackageManagerService;->getApplicationInfo(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo;
+HPLcom/android/server/pm/PackageManagerService;->getApplicationInfoInternal(Ljava/lang/String;III)Landroid/content/pm/ApplicationInfo;
+HPLcom/android/server/pm/PackageManagerService;->getComponentEnabledSetting(Landroid/content/ComponentName;I)I
+HPLcom/android/server/pm/PackageManagerService;->getInstalledApplications(II)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/PackageManagerService;->getInstalledPackages(II)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/PackageManagerService;->getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->getNameForUid(I)Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->getNamesForUids([I)[Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->getOptimizablePackages()Landroid/util/ArraySet;
+HPLcom/android/server/pm/PackageManagerService;->getOrCreateCompilerPackageStats(Landroid/content/pm/PackageParser$Package;)Lcom/android/server/pm/CompilerStats$PackageStats;
+HPLcom/android/server/pm/PackageManagerService;->getOrCreateCompilerPackageStats(Ljava/lang/String;)Lcom/android/server/pm/CompilerStats$PackageStats;
+HPLcom/android/server/pm/PackageManagerService;->getPackageGids(Ljava/lang/String;II)[I
+HPLcom/android/server/pm/PackageManagerService;->getPackageInfo(Ljava/lang/String;II)Landroid/content/pm/PackageInfo;
+HPLcom/android/server/pm/PackageManagerService;->getPackageInfoInternal(Ljava/lang/String;IIII)Landroid/content/pm/PackageInfo;
+HPLcom/android/server/pm/PackageManagerService;->getPackageInstaller()Landroid/content/pm/IPackageInstaller;
+HPLcom/android/server/pm/PackageManagerService;->getPackageUid(Ljava/lang/String;II)I
+HPLcom/android/server/pm/PackageManagerService;->getPackagesForUid(I)[Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->getPersistentApplicationsInternal(I)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->getProfileParent(I)Landroid/content/pm/UserInfo;
+HPLcom/android/server/pm/PackageManagerService;->getReceiverInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo;
+HPLcom/android/server/pm/PackageManagerService;->getServiceInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ServiceInfo;
+HPLcom/android/server/pm/PackageManagerService;->getSystemSharedLibraryNames()[Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->getUidTargetSdkVersionLockedLPr(I)I
+HPLcom/android/server/pm/PackageManagerService;->getUserManagerInternal()Landroid/os/UserManagerInternal;
+HPLcom/android/server/pm/PackageManagerService;->handlePackagePostInstall(Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;ZZZ[Ljava/lang/String;ZLjava/lang/String;Landroid/content/pm/IPackageInstallObserver2;)V
+HPLcom/android/server/pm/PackageManagerService;->hasPermission(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;)Z
+HPLcom/android/server/pm/PackageManagerService;->hasSystemFeature(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/PackageManagerService;->installPackageLI(Lcom/android/server/pm/PackageManagerService$InstallArgs;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;)V
+HPLcom/android/server/pm/PackageManagerService;->isCallerSameApp(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/PackageManagerService;->isInstantApp(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/PackageManagerService;->isPackageAvailable(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/PackageManagerService;->isPackageSuspendedForUser(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/PackageManagerService;->isProtectedBroadcast(Ljava/lang/String;)Z
+HPLcom/android/server/pm/PackageManagerService;->logAppProcessStartIfNeeded(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/pm/PackageManagerService;->maybeAddInstantAppInstaller(Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;IIZ)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->notifyDexLoad(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService;->notifyPackageUse(Ljava/lang/String;I)V
+HPLcom/android/server/pm/PackageManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/server/pm/PackageManagerService;->performDexOptInternal(Lcom/android/server/pm/dex/DexoptOptions;)I
+HPLcom/android/server/pm/PackageManagerService;->performDexOptInternalWithDependenciesLI(Landroid/content/pm/PackageParser$Package;Lcom/android/server/pm/dex/DexoptOptions;)I
+HPLcom/android/server/pm/PackageManagerService;->performDexOptTraced(Lcom/android/server/pm/dex/DexoptOptions;)I
+HPLcom/android/server/pm/PackageManagerService;->performDexOptWithStatus(Lcom/android/server/pm/dex/DexoptOptions;)I
+HPLcom/android/server/pm/PackageManagerService;->queryContentProviders(Ljava/lang/String;IILjava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/PackageManagerService;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+HPLcom/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;
+HPLcom/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;->queryIntentContentProvidersInternal(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->queryIntentReceivers(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/PackageManagerService;->queryIntentReceiversInternal(Landroid/content/Intent;Ljava/lang/String;IIZ)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->queryIntentServices(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/PackageManagerService;->queryIntentServicesInternal(Landroid/content/Intent;Ljava/lang/String;IIIZ)Ljava/util/List;
+HPLcom/android/server/pm/PackageManagerService;->reconcileApps(Ljava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService;->replacePackageLIF(Landroid/content/pm/PackageParser$Package;IILandroid/os/UserHandle;Ljava/lang/String;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;I)V
+HPLcom/android/server/pm/PackageManagerService;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V
+HPLcom/android/server/pm/PackageManagerService;->resolveContentProvider(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
+HPLcom/android/server/pm/PackageManagerService;->resolveExternalPackageNameLPr(Landroid/content/pm/PackageParser$Package;)Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo;
+HPLcom/android/server/pm/PackageManagerService;->resolveIntentInternal(Landroid/content/Intent;Ljava/lang/String;IIZ)Landroid/content/pm/ResolveInfo;
+HPLcom/android/server/pm/PackageManagerService;->resolveInternalPackageNameLPr(Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerService;->resolveService(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo;
+HPLcom/android/server/pm/PackageManagerService;->resolveServiceInternal(Landroid/content/Intent;Ljava/lang/String;III)Landroid/content/pm/ResolveInfo;
+HPLcom/android/server/pm/PackageManagerService;->revokeUnusedSharedUserPermissionsLPw(Lcom/android/server/pm/SharedUserSetting;[I)[I
+HPLcom/android/server/pm/PackageManagerService;->setComponentEnabledSetting(Landroid/content/ComponentName;III)V
+HPLcom/android/server/pm/PackageManagerService;->setEnabledSetting(Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService;->setPackageStoppedState(Ljava/lang/String;ZI)V
+HPLcom/android/server/pm/PackageManagerService;->updateFlagsForApplication(IILjava/lang/Object;)I
+HPLcom/android/server/pm/PackageManagerService;->updateFlagsForPackage(IILjava/lang/Object;)I
+HPLcom/android/server/pm/PackageManagerService;->updateFlagsForResolve(IILandroid/content/Intent;IZ)I
+HPLcom/android/server/pm/PackageManagerService;->updateSettingsInternalLI(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;[I[ILcom/android/server/pm/PackageManagerService$PackageInstalledInfo;Landroid/os/UserHandle;I)V
+HPLcom/android/server/pm/PackageManagerService;->verifyIntentFiltersIfNeeded(IIZLandroid/content/pm/PackageParser$Package;)V
+HPLcom/android/server/pm/PackageManagerServiceCompilerMapping;->getCompilerFilterForReason(I)Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerServiceUtils;->checkISA(Ljava/lang/String;)Z
+HPLcom/android/server/pm/PackageManagerShellCommand$1;->compare(Landroid/content/pm/FeatureInfo;Landroid/content/pm/FeatureInfo;)I
+HPLcom/android/server/pm/PackageManagerShellCommand$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/pm/PackageManagerShellCommand;->doWriteSplit(ILjava/lang/String;JLjava/lang/String;Z)I
+HPLcom/android/server/pm/PackageManagerShellCommand;->makeInstallParams()Lcom/android/server/pm/PackageManagerShellCommand$InstallParams;
+HPLcom/android/server/pm/PackageManagerShellCommand;->runListFeatures()I
+HPLcom/android/server/pm/PackageManagerShellCommand;->runListPackages(Z)I
+HPLcom/android/server/pm/PackageSetting;->isSystem()Z
+HPLcom/android/server/pm/PackageSetting;->toString()Ljava/lang/String;
+HPLcom/android/server/pm/PackageSettingBase;->enableComponentLPw(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/PackageSettingBase;->getCurrentEnabledStateLPr(Ljava/lang/String;I)I
+HPLcom/android/server/pm/PackageSettingBase;->getEnabled(I)I
+HPLcom/android/server/pm/PackageSettingBase;->getHidden(I)Z
+HPLcom/android/server/pm/PackageSettingBase;->getLastDisabledAppCaller(I)Ljava/lang/String;
+HPLcom/android/server/pm/PackageSettingBase;->getNotLaunched(I)Z
+HPLcom/android/server/pm/PackageSettingBase;->getStopped(I)Z
+HPLcom/android/server/pm/PackageSettingBase;->getSuspended(I)Z
+HPLcom/android/server/pm/PackageSettingBase;->modifyUserStateComponents(IZZ)Landroid/content/pm/PackageUserState;
+HPLcom/android/server/pm/PackageSettingBase;->setCeDataInode(JI)V
+HPLcom/android/server/pm/PackageSettingBase;->setOverlayPaths(Ljava/util/List;I)V
+HPLcom/android/server/pm/PermissionsState;->computeGids([I)[I
+HPLcom/android/server/pm/PermissionsState;->getPermissions(I)Ljava/util/Set;
+HPLcom/android/server/pm/PermissionsState;->getRuntimePermissionStates(I)Ljava/util/List;
+HPLcom/android/server/pm/PreferredActivity;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;Z)V
+HPLcom/android/server/pm/PreferredComponent;->sameSet([Landroid/content/ComponentName;)Z
+HPLcom/android/server/pm/PreferredComponent;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;Z)V
+HPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->writePermissions(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;)V
+HPLcom/android/server/pm/Settings;->dumpInstallPermissionsLPr(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;Lcom/android/server/pm/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;Z)V
+HPLcom/android/server/pm/Settings;->dumpPackagesLPr(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;Lcom/android/server/pm/PackageManagerService$DumpState;Z)V
+HPLcom/android/server/pm/Settings;->dumpPermissionsLPr(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;Lcom/android/server/pm/PackageManagerService$DumpState;)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/PackageManagerService$DumpState;Z)V
+HPLcom/android/server/pm/Settings;->getApplicationEnabledSettingLPr(Ljava/lang/String;I)I
+HPLcom/android/server/pm/Settings;->getComponentEnabledSettingLPr(Landroid/content/ComponentName;I)I
+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
+HPLcom/android/server/pm/Settings;->setPackageStoppedStateLPw(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ZZII)Z
+HPLcom/android/server/pm/Settings;->writeAllUsersPackageRestrictionsLPr()V
+HPLcom/android/server/pm/Settings;->writeDefaultAppsLPr(Lorg/xmlpull/v1/XmlSerializer;I)V
+HPLcom/android/server/pm/Settings;->writeDisabledSysPackageLPr(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/pm/PackageSetting;)V
+HPLcom/android/server/pm/Settings;->writePackageListLPr(I)V
+HPLcom/android/server/pm/Settings;->writePackageRestrictionsLPr(I)V
+HPLcom/android/server/pm/Settings;->writePreferredActivitiesLPr(Lorg/xmlpull/v1/XmlSerializer;IZ)V
+HPLcom/android/server/pm/ShortcutPackage;->adjustRanks()V
+HPLcom/android/server/pm/ShortcutPackage;->areAllActivitiesStillEnabled()Z
+HPLcom/android/server/pm/ShortcutPackage;->findAll(Ljava/util/List;Ljava/util/function/Predicate;ILjava/lang/String;I)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;
+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;I)Landroid/content/pm/ShortcutInfo;
+HPLcom/android/server/pm/ShortcutPackage;->publishManifestShortcuts(Ljava/util/List;)Z
+HPLcom/android/server/pm/ShortcutPackage;->rescanPackageIfNeeded(ZZ)Z
+HPLcom/android/server/pm/ShortcutPackage;->saveShortcut(Lorg/xmlpull/v1/XmlSerializer;Landroid/content/pm/ShortcutInfo;Z)V
+HPLcom/android/server/pm/ShortcutPackage;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;Z)V
+HPLcom/android/server/pm/ShortcutPackage;->sortShortcutsToActivities()Landroid/util/ArrayMap;
+HPLcom/android/server/pm/ShortcutPackageInfo;->isShadow()Z
+HPLcom/android/server/pm/ShortcutPackageInfo;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/pm/ShortcutPackageItem;->attemptToRestoreIfNeededAndSave()V
+HPLcom/android/server/pm/ShortcutPackageItem;->getPackageInfo()Lcom/android/server/pm/ShortcutPackageInfo;
+HPLcom/android/server/pm/ShortcutPackageItem;->getPackageName()Ljava/lang/String;
+HPLcom/android/server/pm/ShortcutPackageItem;->getPackageUserId()I
+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;->parseShortcutsOneFile(Lcom/android/server/pm/ShortcutService;Landroid/content/pm/ActivityInfo;Ljava/lang/String;ILjava/util/List;)Ljava/util/List;
+HPLcom/android/server/pm/ShortcutService$2;->test(Landroid/content/pm/PackageInfo;)Z
+HPLcom/android/server/pm/ShortcutService$2;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/pm/ShortcutService$3;->onUidStateChanged(IIJ)V
+HPLcom/android/server/pm/ShortcutService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/pm/ShortcutService$LocalService;->getShortcuts(ILjava/lang/String;JLjava/lang/String;Ljava/util/List;Landroid/content/ComponentName;II)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;I)V
+HPLcom/android/server/pm/ShortcutService$LocalService;->lambda$-com_android_server_pm_ShortcutService$LocalService_86800(JLandroid/util/ArraySet;Landroid/content/ComponentName;ILandroid/content/pm/ShortcutInfo;)Z
+HPLcom/android/server/pm/ShortcutService;->-wrap0(Landroid/content/pm/PackageInfo;)Z
+HPLcom/android/server/pm/ShortcutService;->fixUpIncomingShortcutInfo(Landroid/content/pm/ShortcutInfo;ZZ)V
+HPLcom/android/server/pm/ShortcutService;->forUpdatedPackages(IJZLjava/util/function/Consumer;)V
+HPLcom/android/server/pm/ShortcutService;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
+HPLcom/android/server/pm/ShortcutService;->getLauncherShortcutsLocked(Ljava/lang/String;II)Lcom/android/server/pm/ShortcutLauncher;
+HPLcom/android/server/pm/ShortcutService;->getPackageShortcutsForPublisherLocked(Ljava/lang/String;I)Lcom/android/server/pm/ShortcutPackage;
+HPLcom/android/server/pm/ShortcutService;->getUserShortcutsLocked(I)Lcom/android/server/pm/ShortcutUser;
+HPLcom/android/server/pm/ShortcutService;->handleOnUidStateChanged(II)V
+HPLcom/android/server/pm/ShortcutService;->hasShortcutHostPermissionInner(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/ShortcutService;->injectApplicationInfoWithUninstalled(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
+HPLcom/android/server/pm/ShortcutService;->injectBinderCallingUid()I
+HPLcom/android/server/pm/ShortcutService;->injectClearCallingIdentity()J
+HPLcom/android/server/pm/ShortcutService;->injectCurrentTimeMillis()J
+HPLcom/android/server/pm/ShortcutService;->injectElapsedRealtime()J
+HPLcom/android/server/pm/ShortcutService;->injectGetPackageUid(Ljava/lang/String;I)I
+HPLcom/android/server/pm/ShortcutService;->injectIsActivityEnabledAndExported(Landroid/content/ComponentName;I)Z
+HPLcom/android/server/pm/ShortcutService;->injectPackageInfoWithUninstalled(Ljava/lang/String;IZ)Landroid/content/pm/PackageInfo;
+HPLcom/android/server/pm/ShortcutService;->injectRestoreCallingIdentity(J)V
+HPLcom/android/server/pm/ShortcutService;->isInstalled(Landroid/content/pm/ApplicationInfo;)Z
+HPLcom/android/server/pm/ShortcutService;->isInstalled(Landroid/content/pm/PackageInfo;)Z
+HPLcom/android/server/pm/ShortcutService;->isProcessStateForeground(I)Z
+HPLcom/android/server/pm/ShortcutService;->isUserUnlockedL(I)Z
+HPLcom/android/server/pm/ShortcutService;->logDurationStat(IJ)V
+HPLcom/android/server/pm/ShortcutService;->parseIntAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)I
+HPLcom/android/server/pm/ShortcutService;->parseIntentAttributeNoDefault(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/content/Intent;
+HPLcom/android/server/pm/ShortcutService;->parseLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)J
+HPLcom/android/server/pm/ShortcutService;->parseLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;J)J
+HPLcom/android/server/pm/ShortcutService;->parseStringAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/String;
+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;
+HPLcom/android/server/pm/ShortcutService;->setReturnedByServer(Ljava/util/List;)Ljava/util/List;
+HPLcom/android/server/pm/ShortcutService;->throwIfUserLockedL(I)V
+HPLcom/android/server/pm/ShortcutService;->verifyCaller(Ljava/lang/String;I)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
+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
+HPLcom/android/server/pm/ShortcutUser$PackageWithUser;-><init>(ILjava/lang/String;)V
+HPLcom/android/server/pm/ShortcutUser$PackageWithUser;->hashCode()I
+HPLcom/android/server/pm/ShortcutUser$PackageWithUser;->of(ILjava/lang/String;)Lcom/android/server/pm/ShortcutUser$PackageWithUser;
+HPLcom/android/server/pm/ShortcutUser;->forAllPackages(Ljava/util/function/Consumer;)V
+HPLcom/android/server/pm/ShortcutUser;->getLauncherShortcuts(Ljava/lang/String;I)Lcom/android/server/pm/ShortcutLauncher;
+HPLcom/android/server/pm/ShortcutUser;->getPackageShortcuts(Ljava/lang/String;)Lcom/android/server/pm/ShortcutPackage;
+HPLcom/android/server/pm/ShortcutUser;->getPackageShortcutsIfExists(Ljava/lang/String;)Lcom/android/server/pm/ShortcutPackage;
+HPLcom/android/server/pm/ShortcutUser;->lambda$-com_android_server_pm_ShortcutUser_8319(ILjava/lang/String;Ljava/util/function/Consumer;Lcom/android/server/pm/ShortcutPackageItem;)V
+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
+HPLcom/android/server/pm/UserManagerService$LocalService;->isUserRunning(I)Z
+HPLcom/android/server/pm/UserManagerService$LocalService;->isUserUnlocked(I)Z
+HPLcom/android/server/pm/UserManagerService$LocalService;->isUserUnlockingOrUnlocked(I)Z
+HPLcom/android/server/pm/UserManagerService;->-get9(Lcom/android/server/pm/UserManagerService;)Landroid/util/SparseIntArray;
+HPLcom/android/server/pm/UserManagerService;->checkManageOrInteractPermIfCallerInOtherProfileGroup(ILjava/lang/String;)V
+HPLcom/android/server/pm/UserManagerService;->checkManageUsersPermission(Ljava/lang/String;)V
+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;
+HPLcom/android/server/pm/UserManagerService;->getEffectiveUserRestrictions(I)Landroid/os/Bundle;
+HPLcom/android/server/pm/UserManagerService;->getProfileIds(IZ)[I
+HPLcom/android/server/pm/UserManagerService;->getProfileIdsLU(IZ)Landroid/util/IntArray;
+HPLcom/android/server/pm/UserManagerService;->getProfileParent(I)Landroid/content/pm/UserInfo;
+HPLcom/android/server/pm/UserManagerService;->getProfileParentLU(I)Landroid/content/pm/UserInfo;
+HPLcom/android/server/pm/UserManagerService;->getProfiles(IZ)Ljava/util/List;
+HPLcom/android/server/pm/UserManagerService;->getProfilesLU(IZZ)Ljava/util/List;
+HPLcom/android/server/pm/UserManagerService;->getUidForPackage(Ljava/lang/String;)I
+HPLcom/android/server/pm/UserManagerService;->getUserHandle(I)I
+HPLcom/android/server/pm/UserManagerService;->getUserRestrictions(I)Landroid/os/Bundle;
+HPLcom/android/server/pm/UserManagerService;->getUserSerialNumber(I)I
+HPLcom/android/server/pm/UserManagerService;->hasManageUsersPermission()Z
+HPLcom/android/server/pm/UserManagerService;->hasManagedProfile(I)Z
+HPLcom/android/server/pm/UserManagerService;->hasUserRestriction(Ljava/lang/String;I)Z
+HPLcom/android/server/pm/UserManagerService;->isProfileOf(Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;)Z
+HPLcom/android/server/pm/UserManagerService;->isUserRunning(I)Z
+HPLcom/android/server/pm/UserManagerService;->isUserUnlocked(I)Z
+HPLcom/android/server/pm/UserManagerService;->isUserUnlockingOrUnlocked(I)Z
+HPLcom/android/server/pm/UserManagerService;->packageToRestrictionsFileName(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/pm/UserManagerService;->readApplicationRestrictionsLP(Landroid/util/AtomicFile;)Landroid/os/Bundle;
+HPLcom/android/server/pm/UserManagerService;->readApplicationRestrictionsLP(Ljava/lang/String;I)Landroid/os/Bundle;
+HPLcom/android/server/pm/UserRestrictionsUtils;->clone(Landroid/os/Bundle;)Landroid/os/Bundle;
+HPLcom/android/server/pm/UserRestrictionsUtils;->isValidRestriction(Ljava/lang/String;)Z
+HPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;-><init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
+HPLcom/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
+HPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;->updateCodeLocation(Ljava/lang/String;[Ljava/lang/String;)V
+HPLcom/android/server/pm/dex/DexManager;->-get3()I
+HPLcom/android/server/pm/dex/DexManager;->-wrap0(Ljava/util/Map;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/pm/dex/DexManager;->cachePackageCodeLocation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;I)V
+HPLcom/android/server/pm/dex/DexManager;->cachePackageInfo(Landroid/content/pm/PackageInfo;I)V
+HPLcom/android/server/pm/dex/DexManager;->getDexPackage(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;I)Lcom/android/server/pm/dex/DexManager$DexSearchResult;
+HPLcom/android/server/pm/dex/DexManager;->getPackageUseInfoOrDefault(Ljava/lang/String;)Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;
+HPLcom/android/server/pm/dex/DexManager;->loadInternal(Ljava/util/Map;)V
+HPLcom/android/server/pm/dex/DexManager;->notifyDexLoadInternal(Landroid/content/pm/ApplicationInfo;Ljava/util/List;Ljava/util/List;Ljava/lang/String;I)V
+HPLcom/android/server/pm/dex/DexManager;->putIfAbsent(Ljava/util/Map;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/pm/dex/DexoptOptions;-><init>(Ljava/lang/String;II)V
+HPLcom/android/server/pm/dex/DexoptOptions;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/pm/dex/DexoptOptions;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/pm/dex/DexoptUtils;->encodeClassLoader(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/pm/dex/DexoptUtils;->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;->getClassLoaderContexts(Landroid/content/pm/ApplicationInfo;[Ljava/lang/String;)[Ljava/lang/String;
+HPLcom/android/server/pm/dex/DexoptUtils;->processContextForDexLoad(Ljava/util/List;Ljava/util/List;)[Ljava/lang/String;
+HPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)V
+HPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)V
+HPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->isUsedByOtherApps(Ljava/lang/String;)Z
+HPLcom/android/server/pm/dex/PackageDexUsage;->getPackageUseInfo(Ljava/lang/String;)Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;
+HPLcom/android/server/pm/dex/PackageDexUsage;->read(Ljava/io/Reader;)V
+HPLcom/android/server/pm/dex/PackageDexUsage;->record(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;ZZLjava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/pm/dex/PackageDexUsage;->syncData(Ljava/util/Map;Ljava/util/Map;)V
+HPLcom/android/server/pm/dex/PackageDexUsage;->write(Ljava/io/Writer;)V
+HPLcom/android/server/policy/AccessibilityShortcutController;->isAccessibilityShortcutAvailable(Z)Z
+HPLcom/android/server/policy/BarController$OnBarVisibilityChangedListener;->onBarVisibilityChanged(Z)V
+HPLcom/android/server/policy/BarController;->adjustSystemUiVisibilityLw(II)V
+HPLcom/android/server/policy/BarController;->applyTranslucentFlagLw(Landroid/view/WindowManagerPolicy$WindowState;II)I
+HPLcom/android/server/policy/BarController;->checkHiddenLw()Z
+HPLcom/android/server/policy/BarController;->computeStateLw(ZZLandroid/view/WindowManagerPolicy$WindowState;Z)I
+HPLcom/android/server/policy/BarController;->getStatusBarInternal()Lcom/android/server/statusbar/StatusBarManagerInternal;
+HPLcom/android/server/policy/BarController;->isTransientShowRequested()Z
+HPLcom/android/server/policy/BarController;->isTransientShowing()Z
+HPLcom/android/server/policy/BarController;->setBarShowingLw(Z)Z
+HPLcom/android/server/policy/BarController;->setShowTransparent(Z)V
+HPLcom/android/server/policy/BarController;->skipAnimation()Z
+HPLcom/android/server/policy/BarController;->updateStateLw(I)Z
+HPLcom/android/server/policy/BarController;->updateVisibilityLw(ZII)I
+HPLcom/android/server/policy/BarController;->wasRecentlyTranslucent()Z
+HPLcom/android/server/policy/GlobalKeyManager;->handleGlobalKey(Landroid/content/Context;ILandroid/view/KeyEvent;)Z
+HPLcom/android/server/policy/GlobalKeyManager;->shouldHandleGlobalKey(ILandroid/view/KeyEvent;)Z
+HPLcom/android/server/policy/ImmersiveModeConfirmation;->getWindowToken()Landroid/os/IBinder;
+HPLcom/android/server/policy/PhoneWindowManager$14;->onDown()V
+HPLcom/android/server/policy/PhoneWindowManager$14;->onUpOrCancel()V
+HPLcom/android/server/policy/PhoneWindowManager$21;-><init>(Lcom/android/server/policy/PhoneWindowManager;IIILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/WindowManagerPolicy$WindowState;Z)V
+HPLcom/android/server/policy/PhoneWindowManager$21;->run()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)Landroid/view/WindowManagerPolicy$StartingSurface;
+HPLcom/android/server/policy/PhoneWindowManager;->adjustConfigurationLw(Landroid/content/res/Configuration;II)V
+HPLcom/android/server/policy/PhoneWindowManager;->adjustSystemUiVisibilityLw(I)I
+HPLcom/android/server/policy/PhoneWindowManager;->adjustWindowParamsLw(Landroid/view/WindowManager$LayoutParams;)V
+HPLcom/android/server/policy/PhoneWindowManager;->applyKeyguardPolicyLw(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManagerPolicy$WindowState;)V
+HPLcom/android/server/policy/PhoneWindowManager;->applyPostLayoutPolicyLw(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManagerPolicy$WindowState;)V
+HPLcom/android/server/policy/PhoneWindowManager;->applyStableConstraints(IILandroid/graphics/Rect;)V
+HPLcom/android/server/policy/PhoneWindowManager;->areTranslucentBarsAllowed()Z
+HPLcom/android/server/policy/PhoneWindowManager;->beginLayoutLw(ZIIII)V
+HPLcom/android/server/policy/PhoneWindowManager;->beginPostLayoutPolicyLw(II)V
+HPLcom/android/server/policy/PhoneWindowManager;->calculateRelevantTaskInsets(Landroid/graphics/Rect;Landroid/graphics/Rect;II)V
+HPLcom/android/server/policy/PhoneWindowManager;->canBeHiddenByKeyguardLw(Landroid/view/WindowManagerPolicy$WindowState;)Z
+HPLcom/android/server/policy/PhoneWindowManager;->canHideNavigationBar()Z
+HPLcom/android/server/policy/PhoneWindowManager;->canReceiveInput(Landroid/view/WindowManagerPolicy$WindowState;)Z
+HPLcom/android/server/policy/PhoneWindowManager;->configureNavBarOpacity(IZZZ)I
+HPLcom/android/server/policy/PhoneWindowManager;->drawsSystemBarBackground(Landroid/view/WindowManagerPolicy$WindowState;)Z
+HPLcom/android/server/policy/PhoneWindowManager;->finishLayoutLw()V
+HPLcom/android/server/policy/PhoneWindowManager;->finishPostLayoutPolicyLw()I
+HPLcom/android/server/policy/PhoneWindowManager;->focusChangedLw(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManagerPolicy$WindowState;)I
+HPLcom/android/server/policy/PhoneWindowManager;->forcesDrawStatusBarBackground(Landroid/view/WindowManagerPolicy$WindowState;)Z
+HPLcom/android/server/policy/PhoneWindowManager;->getConfigDisplayHeight(IIIII)I
+HPLcom/android/server/policy/PhoneWindowManager;->getConfigDisplayWidth(IIIII)I
+HPLcom/android/server/policy/PhoneWindowManager;->getContentRectLw(Landroid/graphics/Rect;)V
+HPLcom/android/server/policy/PhoneWindowManager;->getInputMethodWindowVisibleHeightLw()I
+HPLcom/android/server/policy/PhoneWindowManager;->getInsetHintLw(Landroid/view/WindowManager$LayoutParams;Landroid/graphics/Rect;IIILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
+HPLcom/android/server/policy/PhoneWindowManager;->getNavigationBarHeight(II)I
+HPLcom/android/server/policy/PhoneWindowManager;->getNavigationBarWidth(II)I
+HPLcom/android/server/policy/PhoneWindowManager;->getNonDecorDisplayHeight(IIIII)I
+HPLcom/android/server/policy/PhoneWindowManager;->getNonDecorDisplayWidth(IIIII)I
+HPLcom/android/server/policy/PhoneWindowManager;->getNonDecorInsetsLw(IIILandroid/graphics/Rect;)V
+HPLcom/android/server/policy/PhoneWindowManager;->getStableInsetsLw(IIILandroid/graphics/Rect;)V
+HPLcom/android/server/policy/PhoneWindowManager;->getStatusBarManagerInternal()Lcom/android/server/statusbar/StatusBarManagerInternal;
+HPLcom/android/server/policy/PhoneWindowManager;->getSystemDecorLayerLw()I
+HPLcom/android/server/policy/PhoneWindowManager;->inKeyguardRestrictedKeyInputMode()Z
+HPLcom/android/server/policy/PhoneWindowManager;->interceptKeyBeforeDispatching(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/KeyEvent;I)J
+HPLcom/android/server/policy/PhoneWindowManager;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
+HPLcom/android/server/policy/PhoneWindowManager;->isImmersiveMode(I)Z
+HPLcom/android/server/policy/PhoneWindowManager;->isKeyguardLocked()Z
+HPLcom/android/server/policy/PhoneWindowManager;->isKeyguardShowingAndNotOccluded()Z
+HPLcom/android/server/policy/PhoneWindowManager;->isNavBarForcedShownLw(Landroid/view/WindowManagerPolicy$WindowState;)Z
+HPLcom/android/server/policy/PhoneWindowManager;->isScreenOn()Z
+HPLcom/android/server/policy/PhoneWindowManager;->isShowingDreamLw()Z
+HPLcom/android/server/policy/PhoneWindowManager;->isStatusBarKeyguard()Z
+HPLcom/android/server/policy/PhoneWindowManager;->isValidGlobalKey(I)Z
+HPLcom/android/server/policy/PhoneWindowManager;->keyguardOn()Z
+HPLcom/android/server/policy/PhoneWindowManager;->layoutNavigationBar(IIIIIIILandroid/graphics/Rect;ZZZZ)Z
+HPLcom/android/server/policy/PhoneWindowManager;->layoutStatusBar(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;IZ)Z
+HPLcom/android/server/policy/PhoneWindowManager;->layoutWallpaper(Landroid/view/WindowManagerPolicy$WindowState;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/policy/PhoneWindowManager;->layoutWindowLw(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManagerPolicy$WindowState;)V
+HPLcom/android/server/policy/PhoneWindowManager;->navigationBarPosition(III)I
+HPLcom/android/server/policy/PhoneWindowManager;->offsetInputMethodWindowLw(Landroid/view/WindowManagerPolicy$WindowState;)V
+HPLcom/android/server/policy/PhoneWindowManager;->okToAnimate()Z
+HPLcom/android/server/policy/PhoneWindowManager;->performHapticFeedbackLw(Landroid/view/WindowManagerPolicy$WindowState;IZ)Z
+HPLcom/android/server/policy/PhoneWindowManager;->readConfigurationDependentBehaviors()V
+HPLcom/android/server/policy/PhoneWindowManager;->readLidState()V
+HPLcom/android/server/policy/PhoneWindowManager;->selectAnimationLw(Landroid/view/WindowManagerPolicy$WindowState;I)I
+HPLcom/android/server/policy/PhoneWindowManager;->setInitialDisplaySize(Landroid/view/Display;III)V
+HPLcom/android/server/policy/PhoneWindowManager;->shouldBeHiddenByKeyguard(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManagerPolicy$WindowState;)Z
+HPLcom/android/server/policy/PhoneWindowManager;->shouldUseOutsets(Landroid/view/WindowManager$LayoutParams;I)Z
+HPLcom/android/server/policy/PhoneWindowManager;->topAppHidesStatusBar()Z
+HPLcom/android/server/policy/PhoneWindowManager;->updateLightNavigationBarLw(ILandroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManagerPolicy$WindowState;)I
+HPLcom/android/server/policy/PhoneWindowManager;->updateLightStatusBarLw(ILandroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManagerPolicy$WindowState;)I
+HPLcom/android/server/policy/PhoneWindowManager;->updateLockScreenTimeout()V
+HPLcom/android/server/policy/PhoneWindowManager;->updateSystemBarsLw(Landroid/view/WindowManagerPolicy$WindowState;II)I
+HPLcom/android/server/policy/PhoneWindowManager;->updateSystemUiVisibilityLw()I
+HPLcom/android/server/policy/PhoneWindowManager;->updateWindowSleepToken()V
+HPLcom/android/server/policy/PhoneWindowManager;->userActivity()V
+HPLcom/android/server/policy/PolicyControl;->getSystemUiVisibility(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManager$LayoutParams;)I
+HPLcom/android/server/policy/PolicyControl;->getWindowFlags(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManager$LayoutParams;)I
+HPLcom/android/server/policy/StatusBarController$1$1;-><init>(Lcom/android/server/policy/StatusBarController$1;)V
+HPLcom/android/server/policy/StatusBarController$1$1;->run()V
+HPLcom/android/server/policy/StatusBarController$1$2;->run()V
+HPLcom/android/server/policy/StatusBarController$1$4;-><init>(Lcom/android/server/policy/StatusBarController$1;)V
+HPLcom/android/server/policy/StatusBarController$1$4;->run()V
+HPLcom/android/server/policy/StatusBarController$1;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HPLcom/android/server/policy/StatusBarController$1;->onAppTransitionPendingLocked()V
+HPLcom/android/server/policy/StatusBarController;->calculateStatusBarTransitionStartTime(Landroid/view/animation/Animation;Landroid/view/animation/Animation;)J
+HPLcom/android/server/policy/StatusBarController;->findAlmostThereFraction(Landroid/view/animation/Interpolator;)F
+HPLcom/android/server/policy/StatusBarController;->findTranslateAnimation(Landroid/view/animation/Animation;)Landroid/view/animation/TranslateAnimation;
+HPLcom/android/server/policy/StatusBarController;->setTopAppHidesStatusBar(Z)V
+HPLcom/android/server/policy/StatusBarController;->skipAnimation()Z
+HPLcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;->onDebug()V
+HPLcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;->onDown()V
+HPLcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;->onFling(I)V
+HPLcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;->onMouseHoverAtBottom()V
+HPLcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;->onMouseHoverAtTop()V
+HPLcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;->onMouseLeaveFromEdge()V
+HPLcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;->onSwipeFromBottom()V
+HPLcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;->onSwipeFromLeft()V
+HPLcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;->onSwipeFromRight()V
+HPLcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;->onSwipeFromTop()V
+HPLcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;->onUpOrCancel()V
+HPLcom/android/server/policy/SystemGesturesPointerEventListener$FlingGestureDetector;->onFling(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
+HPLcom/android/server/policy/SystemGesturesPointerEventListener$FlingGestureDetector;->onSingleTapUp(Landroid/view/MotionEvent;)Z
+HPLcom/android/server/policy/SystemGesturesPointerEventListener;->-get2(Lcom/android/server/policy/SystemGesturesPointerEventListener;)Landroid/widget/OverScroller;
+HPLcom/android/server/policy/SystemGesturesPointerEventListener;->captureDown(Landroid/view/MotionEvent;I)V
+HPLcom/android/server/policy/SystemGesturesPointerEventListener;->detectSwipe(IJFF)I
+HPLcom/android/server/policy/SystemGesturesPointerEventListener;->detectSwipe(Landroid/view/MotionEvent;)I
+HPLcom/android/server/policy/SystemGesturesPointerEventListener;->findIndex(I)I
+HPLcom/android/server/policy/SystemGesturesPointerEventListener;->onPointerEvent(Landroid/view/MotionEvent;)V
+HPLcom/android/server/policy/WakeGestureListener;->onWakeUp()V
+HPLcom/android/server/policy/WindowOrientationListener$OrientationJudge;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/policy/WindowOrientationListener$OrientationJudge;->getProposedRotationLocked()I
+HPLcom/android/server/policy/WindowOrientationListener$OrientationJudge;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
+HPLcom/android/server/policy/WindowOrientationListener$OrientationJudge;->onSensorChanged(Landroid/hardware/SensorEvent;)V
+HPLcom/android/server/policy/WindowOrientationListener$OrientationJudge;->onTouchEndLocked(J)V
+HPLcom/android/server/policy/WindowOrientationListener$OrientationJudge;->onTouchStartLocked()V
+HPLcom/android/server/policy/WindowOrientationListener$OrientationJudge;->resetLocked(Z)V
+HPLcom/android/server/policy/WindowOrientationListener;->onProposedRotationChanged(I)V
+HPLcom/android/server/policy/WindowOrientationListener;->onTouchEnd()V
+HPLcom/android/server/policy/WindowOrientationListener;->onTouchStart()V
+HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate$DrawnListener;->onDrawn()V
+HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isInputRestricted()Z
+HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isShowing()Z
+HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->isInputRestricted()Z
+HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->isShowing()Z
+HPLcom/android/server/policy/keyguard/KeyguardStateMonitor$StateCallback;->onTrustedChanged()V
+HPLcom/android/server/policy/keyguard/KeyguardStateMonitor;->isInputRestricted()Z
+HPLcom/android/server/policy/keyguard/KeyguardStateMonitor;->isShowing()Z
+HPLcom/android/server/power/Notifier$NotifierHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/power/Notifier;->-wrap3(Lcom/android/server/power/Notifier;)V
+HPLcom/android/server/power/Notifier;->getBatteryStatsWakeLockMonitorType(I)I
+HPLcom/android/server/power/Notifier;->onUserActivity(II)V
+HPLcom/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
+HPLcom/android/server/power/Notifier;->onWakeLockReleased(ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;)V
+HPLcom/android/server/power/Notifier;->sendUserActivity()V
+HPLcom/android/server/power/PowerManagerService$1;->onDisplayStateChange(I)V
+HPLcom/android/server/power/PowerManagerService$BatteryReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/power/PowerManagerService$BinderService;->acquireWakeLock(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;)V
+HPLcom/android/server/power/PowerManagerService$BinderService;->isDeviceIdleMode()Z
+HPLcom/android/server/power/PowerManagerService$BinderService;->isInteractive()Z
+HPLcom/android/server/power/PowerManagerService$BinderService;->isPowerSaveMode()Z
+HPLcom/android/server/power/PowerManagerService$BinderService;->releaseWakeLock(Landroid/os/IBinder;I)V
+HPLcom/android/server/power/PowerManagerService$BinderService;->updateWakeLockUids(Landroid/os/IBinder;[I)V
+HPLcom/android/server/power/PowerManagerService$BinderService;->updateWakeLockWorkSource(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;)V
+HPLcom/android/server/power/PowerManagerService$BinderService;->userActivity(JII)V
+HPLcom/android/server/power/PowerManagerService$LocalService;->finishUidChanges()V
+HPLcom/android/server/power/PowerManagerService$LocalService;->powerHint(II)V
+HPLcom/android/server/power/PowerManagerService$LocalService;->setScreenBrightnessOverrideFromWindowManager(I)V
+HPLcom/android/server/power/PowerManagerService$LocalService;->setUserActivityTimeoutOverrideFromWindowManager(J)V
+HPLcom/android/server/power/PowerManagerService$LocalService;->startUidChanges()V
+HPLcom/android/server/power/PowerManagerService$LocalService;->uidIdle(I)V
+HPLcom/android/server/power/PowerManagerService$LocalService;->updateUidProcState(II)V
+HPLcom/android/server/power/PowerManagerService$PowerManagerHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/power/PowerManagerService$UidState;-><init>(I)V
+HPLcom/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
+HPLcom/android/server/power/PowerManagerService$WakeLock;->hasSameProperties(ILjava/lang/String;Landroid/os/WorkSource;II)Z
+HPLcom/android/server/power/PowerManagerService$WakeLock;->hasSameWorkSource(Landroid/os/WorkSource;)Z
+HPLcom/android/server/power/PowerManagerService$WakeLock;->updateWorkSource(Landroid/os/WorkSource;)V
+HPLcom/android/server/power/PowerManagerService;->-get1(Lcom/android/server/power/PowerManagerService;)Landroid/content/Context;
+HPLcom/android/server/power/PowerManagerService;->-wrap0(Landroid/os/WorkSource;)Landroid/os/WorkSource;
+HPLcom/android/server/power/PowerManagerService;->-wrap1(Lcom/android/server/power/PowerManagerService;)Z
+HPLcom/android/server/power/PowerManagerService;->-wrap13(Lcom/android/server/power/PowerManagerService;)V
+HPLcom/android/server/power/PowerManagerService;->-wrap14(Lcom/android/server/power/PowerManagerService;)V
+HPLcom/android/server/power/PowerManagerService;->-wrap2(Lcom/android/server/power/PowerManagerService;)Z
+HPLcom/android/server/power/PowerManagerService;->-wrap22(Lcom/android/server/power/PowerManagerService;II)V
+HPLcom/android/server/power/PowerManagerService;->-wrap23(Lcom/android/server/power/PowerManagerService;Landroid/os/IBinder;I)V
+HPLcom/android/server/power/PowerManagerService;->-wrap29(Lcom/android/server/power/PowerManagerService;I)V
+HPLcom/android/server/power/PowerManagerService;->-wrap32(Lcom/android/server/power/PowerManagerService;J)V
+HPLcom/android/server/power/PowerManagerService;->-wrap36(Lcom/android/server/power/PowerManagerService;Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;I)V
+HPLcom/android/server/power/PowerManagerService;->-wrap7(Lcom/android/server/power/PowerManagerService;Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;II)V
+HPLcom/android/server/power/PowerManagerService;->acquireWakeLockInternal(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;II)V
+HPLcom/android/server/power/PowerManagerService;->applyWakeLockFlagsOnAcquireLocked(Lcom/android/server/power/PowerManagerService$WakeLock;I)V
+HPLcom/android/server/power/PowerManagerService;->applyWakeLockFlagsOnReleaseLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
+HPLcom/android/server/power/PowerManagerService;->checkForLongWakeLocks()V
+HPLcom/android/server/power/PowerManagerService;->copyWorkSource(Landroid/os/WorkSource;)Landroid/os/WorkSource;
+HPLcom/android/server/power/PowerManagerService;->enqueueNotifyLongMsgLocked(J)V
+HPLcom/android/server/power/PowerManagerService;->findWakeLockIndexLocked(Landroid/os/IBinder;)I
+HPLcom/android/server/power/PowerManagerService;->finishUidChangesInternal()V
+HPLcom/android/server/power/PowerManagerService;->finishWakefulnessChangeIfNeededLocked()V
+HPLcom/android/server/power/PowerManagerService;->getDesiredScreenPolicyLocked()I
+HPLcom/android/server/power/PowerManagerService;->getScreenDimDurationLocked(I)I
+HPLcom/android/server/power/PowerManagerService;->getScreenOffTimeoutLocked(I)I
+HPLcom/android/server/power/PowerManagerService;->getSleepTimeoutLocked()I
+HPLcom/android/server/power/PowerManagerService;->handleBatteryStateChangedLocked()V
+HPLcom/android/server/power/PowerManagerService;->handleSandman()V
+HPLcom/android/server/power/PowerManagerService;->isBeingKeptAwakeLocked()Z
+HPLcom/android/server/power/PowerManagerService;->isDeviceIdleModeInternal()Z
+HPLcom/android/server/power/PowerManagerService;->isInteractiveInternal()Z
+HPLcom/android/server/power/PowerManagerService;->isItBedTimeYetLocked()Z
+HPLcom/android/server/power/PowerManagerService;->isLowPowerModeInternal()Z
+HPLcom/android/server/power/PowerManagerService;->isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()Z
+HPLcom/android/server/power/PowerManagerService;->isValidAutoBrightnessAdjustment(F)Z
+HPLcom/android/server/power/PowerManagerService;->isValidBrightness(I)Z
+HPLcom/android/server/power/PowerManagerService;->needDisplaySuspendBlockerLocked()Z
+HPLcom/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
+HPLcom/android/server/power/PowerManagerService;->notifyWakeLockLongFinishedLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
+HPLcom/android/server/power/PowerManagerService;->notifyWakeLockReleasedLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
+HPLcom/android/server/power/PowerManagerService;->powerHintInternal(II)V
+HPLcom/android/server/power/PowerManagerService;->releaseWakeLockInternal(Landroid/os/IBinder;I)V
+HPLcom/android/server/power/PowerManagerService;->removeWakeLockLocked(Lcom/android/server/power/PowerManagerService$WakeLock;I)V
+HPLcom/android/server/power/PowerManagerService;->restartNofifyLongTimerLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
+HPLcom/android/server/power/PowerManagerService;->scheduleSandmanLocked()V
+HPLcom/android/server/power/PowerManagerService;->setHalInteractiveModeLocked(Z)V
+HPLcom/android/server/power/PowerManagerService;->setScreenBrightnessOverrideFromWindowManagerInternal(I)V
+HPLcom/android/server/power/PowerManagerService;->setUserActivityTimeoutOverrideFromWindowManagerInternal(J)V
+HPLcom/android/server/power/PowerManagerService;->setWakeLockDisabledStateLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)Z
+HPLcom/android/server/power/PowerManagerService;->shouldBoostScreenBrightness()Z
+HPLcom/android/server/power/PowerManagerService;->shouldUseProximitySensorLocked()Z
+HPLcom/android/server/power/PowerManagerService;->startUidChangesInternal()V
+HPLcom/android/server/power/PowerManagerService;->uidActiveInternal(I)V
+HPLcom/android/server/power/PowerManagerService;->uidGoneInternal(I)V
+HPLcom/android/server/power/PowerManagerService;->uidIdleInternal(I)V
+HPLcom/android/server/power/PowerManagerService;->updateDisplayPowerStateLocked(I)Z
+HPLcom/android/server/power/PowerManagerService;->updateDreamLocked(IZ)V
+HPLcom/android/server/power/PowerManagerService;->updateIsPoweredLocked(I)V
+HPLcom/android/server/power/PowerManagerService;->updatePowerRequestFromBatterySaverPolicy(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;)V
+HPLcom/android/server/power/PowerManagerService;->updatePowerStateLocked()V
+HPLcom/android/server/power/PowerManagerService;->updateScreenBrightnessBoostLocked(I)V
+HPLcom/android/server/power/PowerManagerService;->updateStayOnLocked(I)V
+HPLcom/android/server/power/PowerManagerService;->updateSuspendBlockerLocked()V
+HPLcom/android/server/power/PowerManagerService;->updateUidProcStateInternal(II)V
+HPLcom/android/server/power/PowerManagerService;->updateUserActivitySummaryLocked(JI)V
+HPLcom/android/server/power/PowerManagerService;->updateWakeLockSummaryLocked(I)V
+HPLcom/android/server/power/PowerManagerService;->updateWakeLockWorkSourceInternal(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;I)V
+HPLcom/android/server/power/PowerManagerService;->updateWakefulnessLocked(I)Z
+HPLcom/android/server/power/PowerManagerService;->userActivityFromNative(JII)V
+HPLcom/android/server/power/PowerManagerService;->userActivityInternal(JIII)V
+HPLcom/android/server/power/PowerManagerService;->userActivityNoUpdateLocked(JIII)Z
+HPLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+HPLcom/android/server/print/RemotePrintService$PrintServiceCallbacks;->onCustomPrinterIconLoaded(Landroid/print/PrinterId;Landroid/graphics/drawable/Icon;)V
+HPLcom/android/server/print/RemotePrintService$PrintServiceCallbacks;->onPrintersAdded(Ljava/util/List;)V
+HPLcom/android/server/print/RemotePrintService$PrintServiceCallbacks;->onPrintersRemoved(Ljava/util/List;)V
+HPLcom/android/server/print/RemotePrintService$PrintServiceCallbacks;->onServiceDied(Lcom/android/server/print/RemotePrintService;)V
+HPLcom/android/server/print/RemotePrintServiceRecommendationService$RemotePrintServiceRecommendationServiceCallbacks;->onPrintServiceRecommendationsUpdated(Ljava/util/List;)V
+HPLcom/android/server/print/RemotePrintSpooler$PrintSpoolerCallbacks;->onAllPrintJobsForServiceHandled(Landroid/content/ComponentName;)V
+HPLcom/android/server/print/RemotePrintSpooler$PrintSpoolerCallbacks;->onPrintJobQueued(Landroid/print/PrintJobInfo;)V
+HPLcom/android/server/print/RemotePrintSpooler$PrintSpoolerCallbacks;->onPrintJobStateChanged(Landroid/print/PrintJobInfo;)V
+HPLcom/android/server/print/UserState;->getPrintServices(I)Ljava/util/List;
+HPLcom/android/server/search/SearchManagerService$MyPackageMonitor;->updateSearchables()V
+HPLcom/android/server/search/Searchables;->findWebSearchActivity(Landroid/content/ComponentName;)Landroid/content/ComponentName;
+HPLcom/android/server/search/Searchables;->queryIntentActivities(Landroid/content/Intent;I)Ljava/util/List;
+HPLcom/android/server/search/Searchables;->updateSearchableList()V
+HPLcom/android/server/soundtrigger/SoundTriggerInternal;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/soundtrigger/SoundTriggerInternal;->getModuleProperties()Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
+HPLcom/android/server/soundtrigger/SoundTriggerInternal;->startRecognition(ILandroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
+HPLcom/android/server/soundtrigger/SoundTriggerInternal;->stopRecognition(ILandroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
+HPLcom/android/server/soundtrigger/SoundTriggerInternal;->unloadKeyphraseModel(I)I
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->appTransitionCancelled()V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->appTransitionFinished()V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->appTransitionPending()V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->appTransitionStarting(JJ)V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->cancelPreloadRecentApps()V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->dismissKeyboardShortcutsMenu()V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->hideRecentApps(ZZ)V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->onCameraLaunchGestureDetected(I)V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->preloadRecentApps()V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->setCurrentUser(I)V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->setGlobalActionsListener(Lcom/android/server/statusbar/StatusBarManagerInternal$GlobalActionsListener;)V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->setNotificationDelegate(Lcom/android/server/notification/NotificationDelegate;)V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->setSystemUiVisibility(IIIILandroid/graphics/Rect;Landroid/graphics/Rect;Ljava/lang/String;)V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->setTopAppHidesStatusBar(Z)V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->setWindowState(II)V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->showAssistDisclosure()V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->showGlobalActions()V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->showPictureInPictureMenu()V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->showRecentApps(ZZ)V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->showScreenPinningRequest(I)V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->showShutdownUi(ZLjava/lang/String;)Z
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->startAssist(Landroid/os/Bundle;)V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->toggleKeyboardShortcutsMenu(I)V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->toggleRecentApps()V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->toggleSplitScreen()V
+HPLcom/android/server/statusbar/StatusBarManagerInternal;->topAppWindowChanged(Z)V
+HPLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionFinished()V
+HPLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionPending()V
+HPLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionStarting(JJ)V
+HPLcom/android/server/statusbar/StatusBarManagerService$1;->setSystemUiVisibility(IIIILandroid/graphics/Rect;Landroid/graphics/Rect;Ljava/lang/String;)V
+HPLcom/android/server/statusbar/StatusBarManagerService$1;->setTopAppHidesStatusBar(Z)V
+HPLcom/android/server/statusbar/StatusBarManagerService$1;->topAppWindowChanged(Z)V
+HPLcom/android/server/statusbar/StatusBarManagerService$3;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;Z)V
+HPLcom/android/server/statusbar/StatusBarManagerService$3;->run()V
+HPLcom/android/server/statusbar/StatusBarManagerService$4;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;Landroid/os/IBinder;IIZ)V
+HPLcom/android/server/statusbar/StatusBarManagerService$4;->run()V
+HPLcom/android/server/statusbar/StatusBarManagerService$5;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;IIIILandroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/statusbar/StatusBarManagerService$5;->run()V
+HPLcom/android/server/statusbar/StatusBarManagerService;->-get0(Lcom/android/server/statusbar/StatusBarManagerService;)Lcom/android/internal/statusbar/IStatusBar;
+HPLcom/android/server/statusbar/StatusBarManagerService;->-wrap0(Lcom/android/server/statusbar/StatusBarManagerService;)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->-wrap2(Lcom/android/server/statusbar/StatusBarManagerService;IIIILandroid/graphics/Rect;Landroid/graphics/Rect;Ljava/lang/String;)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->-wrap3(Lcom/android/server/statusbar/StatusBarManagerService;Z)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->disableLocked(IILandroid/os/IBinder;Ljava/lang/String;I)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->enforceStatusBar()V
+HPLcom/android/server/statusbar/StatusBarManagerService;->enforceStatusBarService()V
+HPLcom/android/server/statusbar/StatusBarManagerService;->gatherDisableActionsLocked(II)I
+HPLcom/android/server/statusbar/StatusBarManagerService;->manageDisableListLocked(IILandroid/os/IBinder;Ljava/lang/String;I)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->setImeWindowStatus(Landroid/os/IBinder;IIZ)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->setSystemUiVisibility(IIIILandroid/graphics/Rect;Landroid/graphics/Rect;Ljava/lang/String;)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->topAppWindowChanged(Z)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->updateUiVisibilityLocked(IIIILandroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/storage/CacheQuotaStrategy;->getUnfulfilledRequests()Ljava/util/List;
+HPLcom/android/server/storage/CacheQuotaStrategy;->pushProcessedQuotas(Ljava/util/List;)V
+HPLcom/android/server/storage/DeviceStorageMonitorInternal;->checkMemory()V
+HPLcom/android/server/storage/DeviceStorageMonitorInternal;->getMemoryLowThreshold()J
+HPLcom/android/server/storage/DeviceStorageMonitorInternal;->isMemoryLow()Z
+HPLcom/android/server/storage/DeviceStorageMonitorService$State;->-wrap0(III)Z
+HPLcom/android/server/storage/DeviceStorageMonitorService$State;->-wrap1(III)Z
+HPLcom/android/server/storage/DeviceStorageMonitorService$State;->isEntering(III)Z
+HPLcom/android/server/storage/DeviceStorageMonitorService$State;->isLeaving(III)Z
+HPLcom/android/server/storage/DeviceStorageMonitorService;->check()V
+HPLcom/android/server/storage/DeviceStorageMonitorService;->isBootImageOnDisk()Z
+HPLcom/android/server/storage/DeviceStorageMonitorService;->updateBroadcasts(Landroid/os/storage/VolumeInfo;III)V
+HPLcom/android/server/storage/DeviceStorageMonitorService;->updateNotifications(Landroid/os/storage/VolumeInfo;II)V
+HPLcom/android/server/timezone/ClockHelper;->currentTimestamp()J
+HPLcom/android/server/timezone/ConfigHelper;->getCheckTimeAllowedMillis()I
+HPLcom/android/server/timezone/ConfigHelper;->getDataAppPackageName()Ljava/lang/String;
+HPLcom/android/server/timezone/ConfigHelper;->getFailedCheckRetryCount()I
+HPLcom/android/server/timezone/ConfigHelper;->getUpdateAppPackageName()Ljava/lang/String;
+HPLcom/android/server/timezone/ConfigHelper;->isTrackingEnabled()Z
+HPLcom/android/server/timezone/IntentHelper$Listener;->triggerUpdateIfNeeded(Z)V
+HPLcom/android/server/timezone/IntentHelper;->disableReliabilityTriggering()V
+HPLcom/android/server/timezone/IntentHelper;->enableReliabilityTriggering()V
+HPLcom/android/server/timezone/IntentHelper;->initialize(Ljava/lang/String;Ljava/lang/String;Lcom/android/server/timezone/IntentHelper$Listener;)V
+HPLcom/android/server/timezone/IntentHelper;->sendTriggerUpdateCheck(Lcom/android/server/timezone/CheckToken;)V
+HPLcom/android/server/timezone/PackageManagerHelper;->contentProviderRegistered(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/timezone/PackageManagerHelper;->getInstalledPackageVersion(Ljava/lang/String;)I
+HPLcom/android/server/timezone/PackageManagerHelper;->isPrivilegedApp(Ljava/lang/String;)Z
+HPLcom/android/server/timezone/PackageManagerHelper;->receiverRegistered(Landroid/content/Intent;Ljava/lang/String;)Z
+HPLcom/android/server/timezone/PackageManagerHelper;->usesPermission(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/timezone/PermissionHelper;->checkDumpPermission(Ljava/lang/String;Ljava/io/PrintWriter;)Z
+HPLcom/android/server/timezone/PermissionHelper;->enforceCallerHasPermission(Ljava/lang/String;)V
+HPLcom/android/server/trust/TrustManagerService$1;->isDeviceLocked(I)Z
+HPLcom/android/server/trust/TrustManagerService$1;->isDeviceSecure(I)Z
+HPLcom/android/server/trust/TrustManagerService;->-wrap3(Lcom/android/server/trust/TrustManagerService;I)I
+HPLcom/android/server/trust/TrustManagerService;->refreshAgentList(I)V
+HPLcom/android/server/trust/TrustManagerService;->resolveProfileParent(I)I
+HPLcom/android/server/twilight/TwilightListener;->onTwilightStateChanged(Lcom/android/server/twilight/TwilightState;)V
+HPLcom/android/server/twilight/TwilightManager;->getLastTwilightState()Lcom/android/server/twilight/TwilightState;
+HPLcom/android/server/twilight/TwilightManager;->registerListener(Lcom/android/server/twilight/TwilightListener;Landroid/os/Handler;)V
+HPLcom/android/server/twilight/TwilightManager;->unregisterListener(Lcom/android/server/twilight/TwilightListener;)V
+HPLcom/android/server/twilight/TwilightService$1;->unregisterListener(Lcom/android/server/twilight/TwilightListener;)V
+HPLcom/android/server/twilight/TwilightService;->-get1(Lcom/android/server/twilight/TwilightService;)Landroid/util/ArrayMap;
+HPLcom/android/server/usage/AppIdleHistory$PackageHistory;-><init>()V
+HPLcom/android/server/usage/AppIdleHistory$PackageHistory;-><init>(Lcom/android/server/usage/AppIdleHistory$PackageHistory;)V
+HPLcom/android/server/usage/AppIdleHistory;->getPackageHistory(Landroid/util/ArrayMap;Ljava/lang/String;J)Lcom/android/server/usage/AppIdleHistory$PackageHistory;
+HPLcom/android/server/usage/AppIdleHistory;->getScreenOnTime(J)J
+HPLcom/android/server/usage/AppIdleHistory;->getUserHistory(I)Landroid/util/ArrayMap;
+HPLcom/android/server/usage/AppIdleHistory;->hasPassedThresholds(Lcom/android/server/usage/AppIdleHistory$PackageHistory;J)Z
+HPLcom/android/server/usage/AppIdleHistory;->isIdle(Ljava/lang/String;IJ)Z
+HPLcom/android/server/usage/AppIdleHistory;->readAppIdleTimes(ILandroid/util/ArrayMap;)V
+HPLcom/android/server/usage/AppIdleHistory;->reportUsage(Ljava/lang/String;IJ)V
+HPLcom/android/server/usage/AppIdleHistory;->shiftHistoryToNow(Landroid/util/ArrayMap;J)V
+HPLcom/android/server/usage/AppIdleHistory;->writeAppIdleTimes(I)V
+HPLcom/android/server/usage/IntervalStats;->buildEvent(Ljava/lang/String;Ljava/lang/String;)Landroid/app/usage/UsageEvents$Event;
+HPLcom/android/server/usage/IntervalStats;->getCachedStringRef(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/usage/IntervalStats;->getOrCreateUsageStats(Ljava/lang/String;)Landroid/app/usage/UsageStats;
+HPLcom/android/server/usage/IntervalStats;->isStatefulEvent(I)Z
+HPLcom/android/server/usage/IntervalStats;->update(Ljava/lang/String;JI)V
+HPLcom/android/server/usage/StorageStatsService$H;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/usage/StorageStatsService;->enforcePermission(ILjava/lang/String;)V
+HPLcom/android/server/usage/StorageStatsService;->getAppIds(I)[I
+HPLcom/android/server/usage/StorageStatsService;->getCacheBytes(Ljava/lang/String;Ljava/lang/String;)J
+HPLcom/android/server/usage/StorageStatsService;->isCacheQuotaCalculationsEnabled(Landroid/content/ContentResolver;)Z
+HPLcom/android/server/usage/StorageStatsService;->isQuotaSupported(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/usage/StorageStatsService;->queryStatsForUser(Ljava/lang/String;ILjava/lang/String;)Landroid/app/usage/StorageStats;
+HPLcom/android/server/usage/UnixCalendar;->getTimeInMillis()J
+HPLcom/android/server/usage/UsageStatsService$2;->onUidStateChanged(IIJ)V
+HPLcom/android/server/usage/UsageStatsService$BinderService;->hasPermission(Ljava/lang/String;)Z
+HPLcom/android/server/usage/UsageStatsService$BinderService;->isAppInactive(Ljava/lang/String;I)Z
+HPLcom/android/server/usage/UsageStatsService$BinderService;->queryEvents(JJLjava/lang/String;)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UsageStatsService$DeviceStateReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/usage/UsageStatsService$H;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/usage/UsageStatsService$LocalService;->isAppIdle(Ljava/lang/String;II)Z
+HPLcom/android/server/usage/UsageStatsService$LocalService;->reportContentProviderUsage(Ljava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/usage/UsageStatsService$LocalService;->reportEvent(Landroid/content/ComponentName;II)V
+HPLcom/android/server/usage/UsageStatsService$LocalService;->reportEvent(Ljava/lang/String;II)V
+HPLcom/android/server/usage/UsageStatsService;->-get0()Ljava/io/File;
+HPLcom/android/server/usage/UsageStatsService;->-get4(Lcom/android/server/usage/UsageStatsService;)Landroid/util/SparseIntArray;
+HPLcom/android/server/usage/UsageStatsService;->-wrap0(Lcom/android/server/usage/UsageStatsService;Ljava/lang/String;IIJ)Z
+HPLcom/android/server/usage/UsageStatsService;->-wrap2(Lcom/android/server/usage/UsageStatsService;II)Z
+HPLcom/android/server/usage/UsageStatsService;->checkAndGetTimeLocked()J
+HPLcom/android/server/usage/UsageStatsService;->checkIdleStates(I)Z
+HPLcom/android/server/usage/UsageStatsService;->convertToSystemTimeLocked(Landroid/app/usage/UsageEvents$Event;)V
+HPLcom/android/server/usage/UsageStatsService;->forceIdleState(Ljava/lang/String;IZ)V
+HPLcom/android/server/usage/UsageStatsService;->getAppId(Ljava/lang/String;)I
+HPLcom/android/server/usage/UsageStatsService;->getIdleUidsForUser(I)[I
+HPLcom/android/server/usage/UsageStatsService;->getUserDataAndInitializeIfNeededLocked(IJ)Lcom/android/server/usage/UserUsageStatsService;
+HPLcom/android/server/usage/UsageStatsService;->informListeners(Ljava/lang/String;IZ)V
+HPLcom/android/server/usage/UsageStatsService;->isActiveDeviceAdmin(Ljava/lang/String;I)Z
+HPLcom/android/server/usage/UsageStatsService;->isActiveNetworkScorer(Ljava/lang/String;)Z
+HPLcom/android/server/usage/UsageStatsService;->isAppIdleFiltered(Ljava/lang/String;IIJ)Z
+HPLcom/android/server/usage/UsageStatsService;->isAppIdleFilteredOrParoled(Ljava/lang/String;IJZ)Z
+HPLcom/android/server/usage/UsageStatsService;->isAppIdleUnfiltered(Ljava/lang/String;IJ)Z
+HPLcom/android/server/usage/UsageStatsService;->isDeviceProvisioningPackage(Ljava/lang/String;)Z
+HPLcom/android/server/usage/UsageStatsService;->isParoledOrCharging()Z
+HPLcom/android/server/usage/UsageStatsService;->queryEvents(IJJZ)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UsageStatsService;->reportContentProviderUsage(Ljava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/usage/UsageStatsService;->reportEvent(Landroid/app/usage/UsageEvents$Event;I)V
+HPLcom/android/server/usage/UsageStatsService;->shouldObfuscateInstantAppsForCaller(II)Z
+HPLcom/android/server/usage/UsageStatsXmlV1;->loadEvent(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/usage/IntervalStats;)V
+HPLcom/android/server/usage/UsageStatsXmlV1;->loadUsageStats(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/usage/IntervalStats;)V
+HPLcom/android/server/usage/UsageStatsXmlV1;->read(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/usage/IntervalStats;)V
+HPLcom/android/server/usage/UsageStatsXmlV1;->write(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/usage/IntervalStats;)V
+HPLcom/android/server/usage/UsageStatsXmlV1;->writeChooserCounts(Lorg/xmlpull/v1/XmlSerializer;Landroid/app/usage/UsageStats;)V
+HPLcom/android/server/usage/UsageStatsXmlV1;->writeConfigStats(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/usage/IntervalStats;Landroid/app/usage/ConfigurationStats;Z)V
+HPLcom/android/server/usage/UsageStatsXmlV1;->writeEvent(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/usage/IntervalStats;Landroid/app/usage/UsageEvents$Event;)V
+HPLcom/android/server/usage/UsageStatsXmlV1;->writeUsageStats(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/usage/IntervalStats;Landroid/app/usage/UsageStats;)V
+HPLcom/android/server/usage/UserUsageStatsService$3;-><init>(Lcom/android/server/usage/UserUsageStatsService;JJZLandroid/util/ArraySet;)V
+HPLcom/android/server/usage/UserUsageStatsService$3;->combine(Lcom/android/server/usage/IntervalStats;ZLjava/util/List;)V
+HPLcom/android/server/usage/UserUsageStatsService$StatsUpdatedListener;->onNewUpdate(I)V
+HPLcom/android/server/usage/UserUsageStatsService$StatsUpdatedListener;->onStatsReloaded()V
+HPLcom/android/server/usage/UserUsageStatsService$StatsUpdatedListener;->onStatsUpdated()V
+HPLcom/android/server/usage/UserUsageStatsService;->init(J)V
+HPLcom/android/server/usage/UserUsageStatsService;->notifyStatsChanged()V
+HPLcom/android/server/usage/UserUsageStatsService;->queryEvents(JJZ)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UserUsageStatsService;->queryStats(IJJLcom/android/server/usage/UsageStatsDatabase$StatCombiner;)Ljava/util/List;
+HPLcom/android/server/usage/UserUsageStatsService;->reportEvent(Landroid/app/usage/UsageEvents$Event;)V
+HPLcom/android/server/usb/MtpNotificationManager$OnOpenInAppListener;->onOpenInApp(Landroid/hardware/usb/UsbDevice;)V
+HPLcom/android/server/usb/UsbAlsaManager$AlsaDevice;->toString()Ljava/lang/String;
+HPLcom/android/server/usb/UsbAlsaManager;->alsaFileAdded(Ljava/lang/String;)V
+HPLcom/android/server/usb/UsbAlsaManager;->systemReady()V
+HPLcom/android/server/usb/UsbDeviceManager$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendMessage(IZ)V
+HPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbNotification(Z)V
+HPLcom/android/server/utils/ManagedApplicationService$BinderChecker;->asInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
+HPLcom/android/server/utils/ManagedApplicationService$BinderChecker;->checkType(Landroid/os/IInterface;)Z
+HPLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$Callback;->onSessionHidden(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
+HPLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$Callback;->onSessionShown(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
+HPLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$Callback;->sessionConnectionGone(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
+HPLcom/android/server/vr/EnabledComponentsObserver;->loadComponentNames(Landroid/content/pm/PackageManager;ILjava/lang/String;Ljava/lang/String;)Landroid/util/ArraySet;
+HPLcom/android/server/vr/EnabledComponentsObserver;->loadComponentNamesFromSetting(Ljava/lang/String;I)Landroid/util/ArraySet;
+HPLcom/android/server/vr/EnabledComponentsObserver;->rebuildAll()V
+HPLcom/android/server/vr/EnabledComponentsObserver;->sendSettingChanged()V
+HPLcom/android/server/vr/SettingsObserver$SettingChangeListener;->onSettingChanged()V
+HPLcom/android/server/vr/SettingsObserver$SettingChangeListener;->onSettingRestored(Ljava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/vr/VrManagerInternal;->addPersistentVrModeStateListener(Landroid/service/vr/IPersistentVrStateCallbacks;)V
+HPLcom/android/server/vr/VrManagerInternal;->getVr2dDisplayId()I
+HPLcom/android/server/vr/VrManagerInternal;->hasVrPackage(Landroid/content/ComponentName;I)I
+HPLcom/android/server/vr/VrManagerInternal;->isCurrentVrListener(Ljava/lang/String;I)Z
+HPLcom/android/server/vr/VrManagerInternal;->onScreenStateChanged(Z)V
+HPLcom/android/server/vr/VrManagerInternal;->onSleepStateChanged(Z)V
+HPLcom/android/server/vr/VrManagerInternal;->setPersistentVrModeEnabled(Z)V
+HPLcom/android/server/vr/VrManagerInternal;->setVr2dDisplayProperties(Landroid/app/Vr2dDisplayProperties;)V
+HPLcom/android/server/vr/VrManagerInternal;->setVrMode(ZLandroid/content/ComponentName;IILandroid/content/ComponentName;)V
+HPLcom/android/server/vr/VrManagerService$NotificationAccessManager;->update(Ljava/util/Collection;)V
+HPLcom/android/server/vr/VrManagerService$VrState;-><init>(ZZLandroid/content/ComponentName;IILandroid/content/ComponentName;)V
+HPLcom/android/server/vr/VrManagerService;->isDefaultAllowed(Ljava/lang/String;)Z
+HPLcom/android/server/vr/VrManagerService;->onEnabledComponentChanged()V
+HPLcom/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
+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
+HPLcom/android/server/wallpaper/WallpaperManagerService;->isSetWallpaperAllowed(Ljava/lang/String;)Z
+HPLcom/android/server/wallpaper/WallpaperManagerService;->notifyColorListeners(Landroid/app/WallpaperColors;II)V
+HPLcom/android/server/webkit/SystemInterface;->enableFallbackLogic(Z)V
+HPLcom/android/server/webkit/SystemInterface;->enablePackageForAllUsers(Landroid/content/Context;Ljava/lang/String;Z)V
+HPLcom/android/server/webkit/SystemInterface;->enablePackageForUser(Ljava/lang/String;ZI)V
+HPLcom/android/server/webkit/SystemInterface;->getFactoryPackageVersion(Ljava/lang/String;)I
+HPLcom/android/server/webkit/SystemInterface;->getMultiProcessSetting(Landroid/content/Context;)I
+HPLcom/android/server/webkit/SystemInterface;->getPackageInfoForProvider(Landroid/webkit/WebViewProviderInfo;)Landroid/content/pm/PackageInfo;
+HPLcom/android/server/webkit/SystemInterface;->getPackageInfoForProviderAllUsers(Landroid/content/Context;Landroid/webkit/WebViewProviderInfo;)Ljava/util/List;
+HPLcom/android/server/webkit/SystemInterface;->getUserChosenWebViewProvider(Landroid/content/Context;)Ljava/lang/String;
+HPLcom/android/server/webkit/SystemInterface;->getWebViewPackages()[Landroid/webkit/WebViewProviderInfo;
+HPLcom/android/server/webkit/SystemInterface;->isFallbackLogicEnabled()Z
+HPLcom/android/server/webkit/SystemInterface;->isMultiProcessDefaultEnabled()Z
+HPLcom/android/server/webkit/SystemInterface;->killPackageDependents(Ljava/lang/String;)V
+HPLcom/android/server/webkit/SystemInterface;->notifyZygote(Z)V
+HPLcom/android/server/webkit/SystemInterface;->onWebViewProviderChanged(Landroid/content/pm/PackageInfo;)I
+HPLcom/android/server/webkit/SystemInterface;->setMultiProcessSetting(Landroid/content/Context;I)V
+HPLcom/android/server/webkit/SystemInterface;->systemIsDebuggable()Z
+HPLcom/android/server/webkit/SystemInterface;->uninstallAndDisablePackageForAllUsers(Landroid/content/Context;Ljava/lang/String;)V
+HPLcom/android/server/webkit/SystemInterface;->updateUserSetting(Landroid/content/Context;Ljava/lang/String;)V
+HPLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$11;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaLinkLayerStats;)V
+HPLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$11;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$11;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaLinkLayerStats;)V
+HPLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$12;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$12;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$12;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$17;->$m$0()V
+HPLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$17;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$17;->run()V
+HPLcom/android/server/wifi/AggressiveConnectedScore;->generateScore()I
+HPLcom/android/server/wifi/AggressiveConnectedScore;->updateUsingWifiInfo(Landroid/net/wifi/WifiInfo;J)V
+HPLcom/android/server/wifi/BuildProperties;->isEngBuild()Z
+HPLcom/android/server/wifi/BuildProperties;->isUserBuild()Z
+HPLcom/android/server/wifi/BuildProperties;->isUserdebugBuild()Z
+HPLcom/android/server/wifi/CarrierNetworkConfig;->isCarrierNetwork(Ljava/lang/String;)Z
+HPLcom/android/server/wifi/Clock;->getElapsedSinceBootMillis()J
+HPLcom/android/server/wifi/Clock;->getUptimeSinceBootMillis()J
+HPLcom/android/server/wifi/Clock;->getWallClockMillis()J
+HPLcom/android/server/wifi/ConfigurationMap;->getByScanResultForCurrentUser(Landroid/net/wifi/ScanResult;)Landroid/net/wifi/WifiConfiguration;
+HPLcom/android/server/wifi/ConfigurationMap;->getForCurrentUser(I)Landroid/net/wifi/WifiConfiguration;
+HPLcom/android/server/wifi/ConfigurationMap;->valuesForCurrentUser()Ljava/util/Collection;
+HPLcom/android/server/wifi/ConnectedScore;->getMillis()J
+HPLcom/android/server/wifi/DummyLogMessage;->c(J)Lcom/android/server/wifi/WifiLog$LogMessage;
+HPLcom/android/server/wifi/DummyLogMessage;->flush()V
+HPLcom/android/server/wifi/FakeWifiLog;->info(Ljava/lang/String;)Lcom/android/server/wifi/WifiLog$LogMessage;
+HPLcom/android/server/wifi/HalDeviceManager$ListenerProxy;->action()V
+HPLcom/android/server/wifi/HalDeviceManager$ManagerStatusListener;->onStatusChanged()V
+HPLcom/android/server/wifi/HalDeviceManager$Mutable;-><init>()V
+HPLcom/android/server/wifi/HalDeviceManager;->getAllChipInfo()[Lcom/android/server/wifi/HalDeviceManager$WifiChipInfo;
+HPLcom/android/server/wifi/HalDeviceManager;->getSupportedIfaceTypesInternal(Landroid/hardware/wifi/V1_0/IWifiChip;)Ljava/util/Set;
+HPLcom/android/server/wifi/LegacyConnectedScore;->calculateScore(Landroid/net/wifi/WifiInfo;)I
+HPLcom/android/server/wifi/LegacyConnectedScore;->generateScore()I
+HPLcom/android/server/wifi/LegacyConnectedScore;->isHomeNetwork(Landroid/net/wifi/WifiInfo;)Z
+HPLcom/android/server/wifi/LegacyConnectedScore;->multiBandScanResults(Landroid/net/wifi/WifiInfo;)Z
+HPLcom/android/server/wifi/LegacyConnectedScore;->updateUsingWifiInfo(Landroid/net/wifi/WifiInfo;J)V
+HPLcom/android/server/wifi/LogcatLog$RealLogMessage;-><init>(ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/wifi/LogcatLog$RealLogMessage;->c(J)Lcom/android/server/wifi/WifiLog$LogMessage;
+HPLcom/android/server/wifi/LogcatLog$RealLogMessage;->copyUntilPlaceholder()V
+HPLcom/android/server/wifi/LogcatLog$RealLogMessage;->flush()V
+HPLcom/android/server/wifi/LogcatLog;->-get0()Z
+HPLcom/android/server/wifi/LogcatLog;->info(Ljava/lang/String;)Lcom/android/server/wifi/WifiLog$LogMessage;
+HPLcom/android/server/wifi/LogcatLog;->makeLogMessage(ILjava/lang/String;)Lcom/android/server/wifi/WifiLog$LogMessage;
+HPLcom/android/server/wifi/LogcatLog;->tC(Ljava/lang/String;)V
+HPLcom/android/server/wifi/LogcatLog;->trace(Ljava/lang/String;)Lcom/android/server/wifi/WifiLog$LogMessage;
+HPLcom/android/server/wifi/PropertyService;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/wifi/PropertyService;->getBoolean(Ljava/lang/String;Z)Z
+HPLcom/android/server/wifi/PropertyService;->set(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/wifi/SavedNetworkEvaluator;->calculateBssidScore(Landroid/net/wifi/ScanResult;Landroid/net/wifi/WifiConfiguration;Landroid/net/wifi/WifiConfiguration;Ljava/lang/String;Ljava/lang/StringBuffer;)I
+HPLcom/android/server/wifi/SavedNetworkEvaluator;->evaluateNetworks(Ljava/util/List;Landroid/net/wifi/WifiConfiguration;Ljava/lang/String;ZZLjava/util/List;)Landroid/net/wifi/WifiConfiguration;
+HPLcom/android/server/wifi/SavedNetworkEvaluator;->updateSavedNetworkSelectionStatus()V
+HPLcom/android/server/wifi/ScanDetail;-><init>(Landroid/net/wifi/ScanResult;Lcom/android/server/wifi/hotspot2/NetworkDetail;)V
+HPLcom/android/server/wifi/ScanDetail;-><init>(Lcom/android/server/wifi/hotspot2/NetworkDetail;Landroid/net/wifi/WifiSsid;Ljava/lang/String;Ljava/lang/String;IIJ[Landroid/net/wifi/ScanResult$InformationElement;Ljava/util/List;)V
+HPLcom/android/server/wifi/ScanDetail;->getBSSIDString()Ljava/lang/String;
+HPLcom/android/server/wifi/ScanDetail;->getNetworkDetail()Lcom/android/server/wifi/hotspot2/NetworkDetail;
+HPLcom/android/server/wifi/ScanDetail;->getSSID()Ljava/lang/String;
+HPLcom/android/server/wifi/ScanDetail;->getScanResult()Landroid/net/wifi/ScanResult;
+HPLcom/android/server/wifi/ScanDetail;->getSeen()J
+HPLcom/android/server/wifi/ScanDetail;->setSeen()J
+HPLcom/android/server/wifi/ScanDetailCache;->getScanDetail(Ljava/lang/String;)Lcom/android/server/wifi/ScanDetail;
+HPLcom/android/server/wifi/ScanDetailCache;->getScanResult(Ljava/lang/String;)Landroid/net/wifi/ScanResult;
+HPLcom/android/server/wifi/ScanDetailCache;->getVisibility(J)Landroid/net/wifi/WifiConfiguration$Visibility;
+HPLcom/android/server/wifi/ScanDetailCache;->getVisibilityByRssi(J)Landroid/net/wifi/WifiConfiguration$Visibility;
+HPLcom/android/server/wifi/ScanDetailCache;->put(Lcom/android/server/wifi/ScanDetail;)V
+HPLcom/android/server/wifi/ScanDetailCache;->values()Ljava/util/Collection;
+HPLcom/android/server/wifi/ScanResultMatchInfo;-><init>()V
+HPLcom/android/server/wifi/ScanResultMatchInfo;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/wifi/ScanResultMatchInfo;->fromScanResult(Landroid/net/wifi/ScanResult;)Lcom/android/server/wifi/ScanResultMatchInfo;
+HPLcom/android/server/wifi/ScanResultMatchInfo;->hashCode()I
+HPLcom/android/server/wifi/ScoredNetworkEvaluator;->updateNetworkScoreCache(Ljava/util/List;)V
+HPLcom/android/server/wifi/WifiConfigManager$OnSavedNetworkUpdateListener;->onSavedNetworkAdded(I)V
+HPLcom/android/server/wifi/WifiConfigManager$OnSavedNetworkUpdateListener;->onSavedNetworkEnabled(I)V
+HPLcom/android/server/wifi/WifiConfigManager$OnSavedNetworkUpdateListener;->onSavedNetworkPermanentlyDisabled(I)V
+HPLcom/android/server/wifi/WifiConfigManager$OnSavedNetworkUpdateListener;->onSavedNetworkRemoved(I)V
+HPLcom/android/server/wifi/WifiConfigManager$OnSavedNetworkUpdateListener;->onSavedNetworkTemporarilyDisabled(I)V
+HPLcom/android/server/wifi/WifiConfigManager$OnSavedNetworkUpdateListener;->onSavedNetworkUpdated(I)V
+HPLcom/android/server/wifi/WifiConfigManager;->addToChannelSetForNetworkFromScanDetailCache(Ljava/util/Set;Lcom/android/server/wifi/ScanDetailCache;JJI)Z
+HPLcom/android/server/wifi/WifiConfigManager;->attemptNetworkLinking(Landroid/net/wifi/WifiConfiguration;)V
+HPLcom/android/server/wifi/WifiConfigManager;->clearNetworkCandidateScanResult(I)Z
+HPLcom/android/server/wifi/WifiConfigManager;->createExternalWifiConfiguration(Landroid/net/wifi/WifiConfiguration;Z)Landroid/net/wifi/WifiConfiguration;
+HPLcom/android/server/wifi/WifiConfigManager;->getConfiguredNetwork(I)Landroid/net/wifi/WifiConfiguration;
+HPLcom/android/server/wifi/WifiConfigManager;->getConfiguredNetworkForScanDetail(Lcom/android/server/wifi/ScanDetail;)Landroid/net/wifi/WifiConfiguration;
+HPLcom/android/server/wifi/WifiConfigManager;->getConfiguredNetworkForScanDetailAndCache(Lcom/android/server/wifi/ScanDetail;)Landroid/net/wifi/WifiConfiguration;
+HPLcom/android/server/wifi/WifiConfigManager;->getConfiguredNetworks(ZZ)Ljava/util/List;
+HPLcom/android/server/wifi/WifiConfigManager;->getInternalConfiguredNetwork(I)Landroid/net/wifi/WifiConfiguration;
+HPLcom/android/server/wifi/WifiConfigManager;->getInternalConfiguredNetworks()Ljava/util/Collection;
+HPLcom/android/server/wifi/WifiConfigManager;->getLastSelectedNetwork()I
+HPLcom/android/server/wifi/WifiConfigManager;->getOrCreateScanDetailCacheForNetwork(Landroid/net/wifi/WifiConfiguration;)Lcom/android/server/wifi/ScanDetailCache;
+HPLcom/android/server/wifi/WifiConfigManager;->getScanDetailCacheForNetwork(I)Lcom/android/server/wifi/ScanDetailCache;
+HPLcom/android/server/wifi/WifiConfigManager;->maskPasswordsInWifiConfiguration(Landroid/net/wifi/WifiConfiguration;)V
+HPLcom/android/server/wifi/WifiConfigManager;->retrieveHiddenNetworkList()Ljava/util/List;
+HPLcom/android/server/wifi/WifiConfigManager;->saveToScanDetailCacheForNetwork(Landroid/net/wifi/WifiConfiguration;Lcom/android/server/wifi/ScanDetail;)V
+HPLcom/android/server/wifi/WifiConfigManager;->setNetworkCandidateScanResult(ILandroid/net/wifi/ScanResult;I)Z
+HPLcom/android/server/wifi/WifiConfigManager;->tryEnableNetwork(I)Z
+HPLcom/android/server/wifi/WifiConfigManager;->tryEnableNetwork(Landroid/net/wifi/WifiConfiguration;)Z
+HPLcom/android/server/wifi/WifiConfigManager;->updateScanDetailCacheFromWifiInfo(Landroid/net/wifi/WifiInfo;)V
+HPLcom/android/server/wifi/WifiConfigStore;->serializeData(Z)[B
+HPLcom/android/server/wifi/WifiConfigurationUtil$WifiConfigurationComparator;->compareNetworksWithSameStatus(Landroid/net/wifi/WifiConfiguration;Landroid/net/wifi/WifiConfiguration;)I
+HPLcom/android/server/wifi/WifiConfigurationUtil;->hasAnyValidWepKey([Ljava/lang/String;)Z
+HPLcom/android/server/wifi/WifiConfigurationUtil;->isConfigForEapNetwork(Landroid/net/wifi/WifiConfiguration;)Z
+HPLcom/android/server/wifi/WifiConfigurationUtil;->isConfigForOpenNetwork(Landroid/net/wifi/WifiConfiguration;)Z
+HPLcom/android/server/wifi/WifiConfigurationUtil;->isConfigForPskNetwork(Landroid/net/wifi/WifiConfiguration;)Z
+HPLcom/android/server/wifi/WifiConfigurationUtil;->isConfigForWepNetwork(Landroid/net/wifi/WifiConfiguration;)Z
+HPLcom/android/server/wifi/WifiConnectivityHelper;->isFirmwareRoamingSupported()Z
+HPLcom/android/server/wifi/WifiConnectivityManager$AllSingleScanListener;->onFullResult(Landroid/net/wifi/ScanResult;)V
+HPLcom/android/server/wifi/WifiConnectivityManager$AllSingleScanListener;->onResults([Landroid/net/wifi/WifiScanner$ScanData;)V
+HPLcom/android/server/wifi/WifiConnectivityManager$SingleScanListener;->onFullResult(Landroid/net/wifi/ScanResult;)V
+HPLcom/android/server/wifi/WifiConnectivityManager;->-get1(Lcom/android/server/wifi/WifiConnectivityManager;)Z
+HPLcom/android/server/wifi/WifiConnectivityManager;->-get8(Lcom/android/server/wifi/WifiConnectivityManager;)Z
+HPLcom/android/server/wifi/WifiConnectivityManager;->-get9(Lcom/android/server/wifi/WifiConnectivityManager;)Z
+HPLcom/android/server/wifi/WifiConnectivityManager;->buildBssidBlacklist()Ljava/util/HashSet;
+HPLcom/android/server/wifi/WifiConnectivityManager;->connectToNetwork(Landroid/net/wifi/WifiConfiguration;)V
+HPLcom/android/server/wifi/WifiConnectivityManager;->handleScanResults(Ljava/util/List;Ljava/lang/String;)Z
+HPLcom/android/server/wifi/WifiConnectivityManager;->localLog(Ljava/lang/String;)V
+HPLcom/android/server/wifi/WifiConnectivityManager;->setScanChannels(Landroid/net/wifi/WifiScanner$ScanSettings;)Z
+HPLcom/android/server/wifi/WifiConnectivityManager;->startSingleScan(Z)V
+HPLcom/android/server/wifi/WifiController$DefaultState;->processMessage(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/WifiController$DeviceActiveState;->processMessage(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/WifiController$StaEnabledState;->processMessage(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/WifiDiagnostics$1;->onRingBufferData(Lcom/android/server/wifi/WifiNative$RingBufferStatus;[B)V
+HPLcom/android/server/wifi/WifiDiagnostics$2;->compare(Lcom/android/server/wifi/WifiNative$FateReport;Lcom/android/server/wifi/WifiNative$FateReport;)I
+HPLcom/android/server/wifi/WifiDiagnostics$2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/wifi/WifiDiagnostics$BugReport;->toString()Ljava/lang/String;
+HPLcom/android/server/wifi/WifiDiagnostics$LimitedCircularArray;->addLast(Ljava/lang/Object;)V
+HPLcom/android/server/wifi/WifiDiagnostics$LimitedCircularArray;->get(I)Ljava/lang/Object;
+HPLcom/android/server/wifi/WifiDiagnostics$LimitedCircularArray;->size()I
+HPLcom/android/server/wifi/WifiDiagnostics;->captureBugreport(IZ)Lcom/android/server/wifi/WifiDiagnostics$BugReport;
+HPLcom/android/server/wifi/WifiDiagnostics;->compressToBase64([B)Ljava/lang/String;
+HPLcom/android/server/wifi/WifiDiagnostics;->dumpPacketFatesInternal(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/util/ArrayList;Z)V
+HPLcom/android/server/wifi/WifiDiagnostics;->getKernelLog(I)Lcom/android/server/wifi/WifiDiagnostics$LimitedCircularArray;
+HPLcom/android/server/wifi/WifiDiagnostics;->getLogcat(I)Ljava/util/ArrayList;
+HPLcom/android/server/wifi/WifiDiagnostics;->onRingBufferData(Lcom/android/server/wifi/WifiNative$RingBufferStatus;[B)V
+HPLcom/android/server/wifi/WifiLastResortWatchdog;->updateAvailableNetworks(Ljava/util/List;)V
+HPLcom/android/server/wifi/WifiLockManager$WifiLock;-><init>(Lcom/android/server/wifi/WifiLockManager;ILjava/lang/String;Landroid/os/IBinder;Landroid/os/WorkSource;)V
+HPLcom/android/server/wifi/WifiLockManager$WifiLock;->unlinkDeathRecipient()V
+HPLcom/android/server/wifi/WifiLockManager;->acquireWifiLock(ILjava/lang/String;Landroid/os/IBinder;Landroid/os/WorkSource;)Z
+HPLcom/android/server/wifi/WifiLockManager;->addLock(Lcom/android/server/wifi/WifiLockManager$WifiLock;)Z
+HPLcom/android/server/wifi/WifiLockManager;->findLockByBinder(Landroid/os/IBinder;)Lcom/android/server/wifi/WifiLockManager$WifiLock;
+HPLcom/android/server/wifi/WifiLockManager;->releaseLock(Landroid/os/IBinder;)Z
+HPLcom/android/server/wifi/WifiLockManager;->releaseWifiLock(Landroid/os/IBinder;)Z
+HPLcom/android/server/wifi/WifiLockManager;->removeLock(Landroid/os/IBinder;)Lcom/android/server/wifi/WifiLockManager$WifiLock;
+HPLcom/android/server/wifi/WifiMetrics;->countScanResults(Ljava/util/List;)V
+HPLcom/android/server/wifi/WifiMetrics;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/wifi/WifiMetrics;->handlePollResult(Landroid/net/wifi/WifiInfo;)V
+HPLcom/android/server/wifi/WifiMetrics;->increment(Landroid/util/SparseIntArray;I)V
+HPLcom/android/server/wifi/WifiMetrics;->incrementAvailableNetworksHistograms(Ljava/util/List;Z)V
+HPLcom/android/server/wifi/WifiMetrics;->incrementBssid(Landroid/util/SparseIntArray;I)V
+HPLcom/android/server/wifi/WifiMetrics;->incrementRssiPollRssiCount(I)V
+HPLcom/android/server/wifi/WifiMetrics;->incrementScanReturnEntry(II)V
+HPLcom/android/server/wifi/WifiMetrics;->incrementSsid(Landroid/util/SparseIntArray;I)V
+HPLcom/android/server/wifi/WifiMetrics;->incrementTotalScanResults(Landroid/util/SparseIntArray;I)V
+HPLcom/android/server/wifi/WifiMetrics;->incrementTotalScanSsids(Landroid/util/SparseIntArray;I)V
+HPLcom/android/server/wifi/WifiMetrics;->incrementWifiScoreCount(I)V
+HPLcom/android/server/wifi/WifiMetrics;->incrementWifiSystemScanStateCount(IZ)V
+HPLcom/android/server/wifi/WifiMetrics;->maybeIncrementRssiDeltaCount(I)V
+HPLcom/android/server/wifi/WifiMonitor;->isMonitoring(Ljava/lang/String;)Z
+HPLcom/android/server/wifi/WifiMonitor;->sendMessage(Landroid/os/Handler;Landroid/os/Message;)V
+HPLcom/android/server/wifi/WifiMonitor;->sendMessage(Ljava/lang/String;I)V
+HPLcom/android/server/wifi/WifiMonitor;->sendMessage(Ljava/lang/String;Landroid/os/Message;)V
+HPLcom/android/server/wifi/WifiMulticastLockManager$FilterController;->startFilteringMulticastPackets()V
+HPLcom/android/server/wifi/WifiMulticastLockManager$FilterController;->stopFilteringMulticastPackets()V
+HPLcom/android/server/wifi/WifiNative$FateReport;-><init>(BJB[B)V
+HPLcom/android/server/wifi/WifiNative$FateReport;->convertDriverTimestampUSecToWallclockMSec(J)J
+HPLcom/android/server/wifi/WifiNative$FateReport;->toTableRowString()Ljava/lang/String;
+HPLcom/android/server/wifi/WifiNative$PnoEventHandler;->onPnoNetworkFound([Landroid/net/wifi/ScanResult;)V
+HPLcom/android/server/wifi/WifiNative$PnoEventHandler;->onPnoScanFailed()V
+HPLcom/android/server/wifi/WifiNative$RingBufferStatus;-><init>()V
+HPLcom/android/server/wifi/WifiNative$RttEventHandler;->onRttResults([Landroid/net/wifi/RttManager$RttResult;)V
+HPLcom/android/server/wifi/WifiNative$SignalPollResult;-><init>()V
+HPLcom/android/server/wifi/WifiNative$VendorHalDeathEventHandler;->onDeath()V
+HPLcom/android/server/wifi/WifiNative$WifiLoggerEventHandler;->onRingBufferData(Lcom/android/server/wifi/WifiNative$RingBufferStatus;[B)V
+HPLcom/android/server/wifi/WifiNative$WifiLoggerEventHandler;->onWifiAlert(I[B)V
+HPLcom/android/server/wifi/WifiNative$WifiRssiEventHandler;->onRssiThresholdBreached(B)V
+HPLcom/android/server/wifi/WifiNative;->getChannelsForBand(I)[I
+HPLcom/android/server/wifi/WifiNative;->getScanResults()Ljava/util/ArrayList;
+HPLcom/android/server/wifi/WifiNative;->getWifiLinkLayerStats(Ljava/lang/String;)Landroid/net/wifi/WifiLinkLayerStats;
+HPLcom/android/server/wifi/WifiNative;->signalPoll()Lcom/android/server/wifi/WifiNative$SignalPollResult;
+HPLcom/android/server/wifi/WifiNetworkSelector;->filterScanResults(Ljava/util/List;Ljava/util/HashSet;ZLjava/lang/String;)Ljava/util/List;
+HPLcom/android/server/wifi/WifiNetworkSelector;->isCurrentNetworkSufficient(Landroid/net/wifi/WifiInfo;Ljava/util/List;)Z
+HPLcom/android/server/wifi/WifiNetworkSelector;->isNetworkSelectionNeeded(Ljava/util/List;Landroid/net/wifi/WifiInfo;ZZ)Z
+HPLcom/android/server/wifi/WifiNetworkSelector;->isSignalTooWeak(Landroid/net/wifi/ScanResult;)Z
+HPLcom/android/server/wifi/WifiNetworkSelector;->localLog(Ljava/lang/String;)V
+HPLcom/android/server/wifi/WifiNetworkSelector;->selectNetwork(Ljava/util/List;Ljava/util/HashSet;Landroid/net/wifi/WifiInfo;ZZZ)Landroid/net/wifi/WifiConfiguration;
+HPLcom/android/server/wifi/WifiNetworkSelector;->toScanId(Landroid/net/wifi/ScanResult;)Ljava/lang/String;
+HPLcom/android/server/wifi/WifiScoreReport;->calculateAndReportScore(Landroid/net/wifi/WifiInfo;Landroid/net/NetworkAgent;ILcom/android/server/wifi/WifiMetrics;)V
+HPLcom/android/server/wifi/WifiScoreReport;->logLinkMetrics(Landroid/net/wifi/WifiInfo;II)V
+HPLcom/android/server/wifi/WifiServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/wifi/WifiServiceImpl;->acquireWifiLock(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/WorkSource;)Z
+HPLcom/android/server/wifi/WifiServiceImpl;->enforceAccessPermission()V
+HPLcom/android/server/wifi/WifiServiceImpl;->getConfiguredNetworks()Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/wifi/WifiServiceImpl;->getConnectionInfo(Ljava/lang/String;)Landroid/net/wifi/WifiInfo;
+HPLcom/android/server/wifi/WifiServiceImpl;->getDhcpInfo()Landroid/net/DhcpInfo;
+HPLcom/android/server/wifi/WifiServiceImpl;->getScanResults(Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/server/wifi/WifiServiceImpl;->getWifiEnabledState()I
+HPLcom/android/server/wifi/WifiServiceImpl;->releaseWifiLock(Landroid/os/IBinder;)Z
+HPLcom/android/server/wifi/WifiServiceImpl;->reportActivityInfo()Landroid/net/wifi/WifiActivityEnergyInfo;
+HPLcom/android/server/wifi/WifiServiceImpl;->requestActivityInfo(Landroid/os/ResultReceiver;)V
+HPLcom/android/server/wifi/WifiSettingsStore;->getLocationModeSetting(Landroid/content/Context;)I
+HPLcom/android/server/wifi/WifiStateMachine$4;->onFullResult(Landroid/net/wifi/ScanResult;)V
+HPLcom/android/server/wifi/WifiStateMachine$ConnectModeState;->processMessage(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/WifiStateMachine$ConnectedState;->processMessage(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/WifiStateMachine$DefaultState;->processMessage(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/WifiStateMachine$L2ConnectedState;->processMessage(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/WifiStateMachine$SupplicantStartedState;->processMessage(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/WifiStateMachine;->-get0(Lcom/android/server/wifi/WifiStateMachine;)I
+HPLcom/android/server/wifi/WifiStateMachine;->-get14(Lcom/android/server/wifi/WifiStateMachine;)Z
+HPLcom/android/server/wifi/WifiStateMachine;->-get29(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/WifiStateMachine$WifiNetworkAgent;
+HPLcom/android/server/wifi/WifiStateMachine;->-get41(Lcom/android/server/wifi/WifiStateMachine;)I
+HPLcom/android/server/wifi/WifiStateMachine;->-get46(Lcom/android/server/wifi/WifiStateMachine;)I
+HPLcom/android/server/wifi/WifiStateMachine;->-get65(Lcom/android/server/wifi/WifiStateMachine;)Z
+HPLcom/android/server/wifi/WifiStateMachine;->-get71(Lcom/android/server/wifi/WifiStateMachine;)Landroid/net/wifi/WifiInfo;
+HPLcom/android/server/wifi/WifiStateMachine;->-get74(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/WifiMetrics;
+HPLcom/android/server/wifi/WifiStateMachine;->-get80(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/WifiScoreReport;
+HPLcom/android/server/wifi/WifiStateMachine;->-wrap18(Lcom/android/server/wifi/WifiStateMachine;)V
+HPLcom/android/server/wifi/WifiStateMachine;->-wrap30(Lcom/android/server/wifi/WifiStateMachine;Landroid/os/Message;Lcom/android/internal/util/State;)V
+HPLcom/android/server/wifi/WifiStateMachine;->fetchRssiLinkSpeedAndFrequencyNative()V
+HPLcom/android/server/wifi/WifiStateMachine;->getLogRecString(Landroid/os/Message;)Ljava/lang/String;
+HPLcom/android/server/wifi/WifiStateMachine;->getWifiLinkLayerStats()Landroid/net/wifi/WifiLinkLayerStats;
+HPLcom/android/server/wifi/WifiStateMachine;->isDisconnected()Z
+HPLcom/android/server/wifi/WifiStateMachine;->logStateAndMessage(Landroid/os/Message;Lcom/android/internal/util/State;)V
+HPLcom/android/server/wifi/WifiStateMachine;->recordLogRec(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/WifiStateMachine;->setScanResults()V
+HPLcom/android/server/wifi/WifiStateMachine;->smToString(I)Ljava/lang/String;
+HPLcom/android/server/wifi/WifiStateMachine;->smToString(Landroid/os/Message;)Ljava/lang/String;
+HPLcom/android/server/wifi/WifiStateMachine;->syncGetWifiState()I
+HPLcom/android/server/wifi/WifiStateMachine;->syncRequestConnectionInfo(Ljava/lang/String;)Landroid/net/wifi/WifiInfo;
+HPLcom/android/server/wifi/WifiTrafficPoller$TrafficHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/wifi/WifiTrafficPoller;->-get3(Lcom/android/server/wifi/WifiTrafficPoller;)I
+HPLcom/android/server/wifi/WifiTrafficPoller;->-wrap1(Lcom/android/server/wifi/WifiTrafficPoller;)V
+HPLcom/android/server/wifi/WifiTrafficPoller;->notifyOnDataActivity()V
+HPLcom/android/server/wifi/WifiVendorHal$1AnswerBox;-><init>(Lcom/android/server/wifi/WifiVendorHal;)V
+HPLcom/android/server/wifi/WifiVendorHal$4AnswerBox;-><init>(Lcom/android/server/wifi/WifiVendorHal;)V
+HPLcom/android/server/wifi/WifiVendorHal$ChipEventCallback;->lambda$-com_android_server_wifi_WifiVendorHal$ChipEventCallback_98937(Landroid/hardware/wifi/V1_0/WifiDebugRingBufferStatus;Ljava/util/ArrayList;)V
+HPLcom/android/server/wifi/WifiVendorHal$ChipEventCallback;->onDebugRingBufferDataAvailable(Landroid/hardware/wifi/V1_0/WifiDebugRingBufferStatus;Ljava/util/ArrayList;)V
+HPLcom/android/server/wifi/WifiVendorHal;->-get2(Lcom/android/server/wifi/WifiVendorHal;)Landroid/os/Handler;
+HPLcom/android/server/wifi/WifiVendorHal;->-get3(Lcom/android/server/wifi/WifiVendorHal;)Lcom/android/server/wifi/WifiNative$WifiLoggerEventHandler;
+HPLcom/android/server/wifi/WifiVendorHal;->-wrap3(Landroid/hardware/wifi/V1_0/WifiDebugRingBufferStatus;)Lcom/android/server/wifi/WifiNative$RingBufferStatus;
+HPLcom/android/server/wifi/WifiVendorHal;->enter(Ljava/lang/String;)Lcom/android/server/wifi/WifiLog$LogMessage;
+HPLcom/android/server/wifi/WifiVendorHal;->frameworkFromHalLinkLayerStats(Landroid/hardware/wifi/V1_0/StaLinkLayerStats;)Landroid/net/wifi/WifiLinkLayerStats;
+HPLcom/android/server/wifi/WifiVendorHal;->frameworkRingBufferFlagsFromHal(I)I
+HPLcom/android/server/wifi/WifiVendorHal;->getChannelsForBand(I)[I
+HPLcom/android/server/wifi/WifiVendorHal;->getSupportedFeatureSet()I
+HPLcom/android/server/wifi/WifiVendorHal;->getWifiLinkLayerStats()Landroid/net/wifi/WifiLinkLayerStats;
+HPLcom/android/server/wifi/WifiVendorHal;->intArrayFromArrayList(Ljava/util/ArrayList;)[I
+HPLcom/android/server/wifi/WifiVendorHal;->lambda$-com_android_server_wifi_WifiVendorHal_25531(Lcom/android/server/wifi/WifiVendorHal$1AnswerBox;Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaLinkLayerStats;)V
+HPLcom/android/server/wifi/WifiVendorHal;->lambda$-com_android_server_wifi_WifiVendorHal_56256(Lcom/android/server/wifi/WifiVendorHal$4AnswerBox;Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLcom/android/server/wifi/WifiVendorHal;->lambda$-com_android_server_wifi_WifiVendorHal_75348([Lcom/android/server/wifi/WifiNative$TxFateReport;Landroid/util/MutableBoolean;Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLcom/android/server/wifi/WifiVendorHal;->lambda$-com_android_server_wifi_WifiVendorHal_77135([Lcom/android/server/wifi/WifiNative$RxFateReport;Landroid/util/MutableBoolean;Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+HPLcom/android/server/wifi/WifiVendorHal;->makeWifiBandFromFrameworkBand(I)I
+HPLcom/android/server/wifi/WifiVendorHal;->ok(Landroid/hardware/wifi/V1_0/WifiStatus;)Z
+HPLcom/android/server/wifi/WifiVendorHal;->ringBufferStatus(Landroid/hardware/wifi/V1_0/WifiDebugRingBufferStatus;)Lcom/android/server/wifi/WifiNative$RingBufferStatus;
+HPLcom/android/server/wifi/WifiVendorHal;->wifiFeatureMaskFromStaCapabilities(I)I
+HPLcom/android/server/wifi/WificondControl$ScanEventHandler;->OnScanResultReady()V
+HPLcom/android/server/wifi/WificondControl;->getScanResults(I)Ljava/util/ArrayList;
+HPLcom/android/server/wifi/WificondControl;->scan(Ljava/util/Set;Ljava/util/Set;)Z
+HPLcom/android/server/wifi/WificondControl;->signalPoll()Lcom/android/server/wifi/WifiNative$SignalPollResult;
+HPLcom/android/server/wifi/hotspot2/NetworkDetail$Ant;->values()[Lcom/android/server/wifi/hotspot2/NetworkDetail$Ant;
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;-><init>(Ljava/lang/String;[Landroid/net/wifi/ScanResult$InformationElement;Ljava/util/List;I)V
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->getAnqpDomainID()I
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->getBSSIDString()Ljava/lang/String;
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->getCenterfreq0()I
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->getCenterfreq1()I
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->getChannelWidth()I
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->getDtimInterval()I
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->getHESSID()J
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->getHSRelease()Lcom/android/server/wifi/hotspot2/NetworkDetail$HSRelease;
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->getOsuProviders()[B
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->getSSID()Ljava/lang/String;
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->is80211McResponderSupport()Z
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->isBeaconFrame()Z
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->isHiddenBeaconFrame()Z
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->isInterworking()Z
+HPLcom/android/server/wifi/hotspot2/NetworkDetail;->toMACString(J)Ljava/lang/String;
+HPLcom/android/server/wifi/hotspot2/PasspointConfigStoreData$DataSource;->getProviderIndex()J
+HPLcom/android/server/wifi/hotspot2/PasspointConfigStoreData$DataSource;->getProviders()Ljava/util/List;
+HPLcom/android/server/wifi/hotspot2/PasspointConfigStoreData$DataSource;->setProviderIndex(J)V
+HPLcom/android/server/wifi/hotspot2/PasspointConfigStoreData$DataSource;->setProviders(Ljava/util/List;)V
+HPLcom/android/server/wifi/hotspot2/PasspointEventHandler$Callbacks;->onANQPResponse(JLjava/util/Map;)V
+HPLcom/android/server/wifi/hotspot2/PasspointEventHandler$Callbacks;->onIconResponse(JLjava/lang/String;[B)V
+HPLcom/android/server/wifi/hotspot2/PasspointEventHandler$Callbacks;->onWnmFrameReceived(Lcom/android/server/wifi/hotspot2/WnmData;)V
+HPLcom/android/server/wifi/hotspot2/Utils;->fromHex(CZ)I
+HPLcom/android/server/wifi/hotspot2/Utils;->parseMac(Ljava/lang/String;)J
+HPLcom/android/server/wifi/scanner/-$Lambda$ckIrrmbHBOVG4LZY2cRLHtMBPV4$1;->$m$0(Ljava/lang/Object;)Z
+HPLcom/android/server/wifi/scanner/-$Lambda$ckIrrmbHBOVG4LZY2cRLHtMBPV4$1;-><init>(J)V
+HPLcom/android/server/wifi/scanner/-$Lambda$ckIrrmbHBOVG4LZY2cRLHtMBPV4$1;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wifi/scanner/-$Lambda$ckIrrmbHBOVG4LZY2cRLHtMBPV4;->$m$0(I)Ljava/lang/Object;
+HPLcom/android/server/wifi/scanner/-$Lambda$ckIrrmbHBOVG4LZY2cRLHtMBPV4;->apply(I)Ljava/lang/Object;
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;-><init>(Lcom/android/server/wifi/scanner/ChannelHelper;)V
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->addBand(I)V
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->addChannel(I)V
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->addChannels(Landroid/net/wifi/WifiScanner$ScanSettings;)V
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->addChannels(Lcom/android/server/wifi/WifiNative$BucketSettings;)V
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->clear()V
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->containsBand(I)Z
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->containsChannel(I)Z
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->fillBucketSettings(Lcom/android/server/wifi/WifiNative$BucketSettings;I)V
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->getChannelSet()Ljava/util/Set;
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->getContainingChannelsFromBand(I)Ljava/util/Set;
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->getMissingChannelsFromBand(I)Ljava/util/Set;
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->getScanFreqs()Ljava/util/Set;
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->isAllChannels()Z
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->isEmpty()Z
+HPLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->partiallyContainsBand(I)Z
+HPLcom/android/server/wifi/scanner/ChannelHelper;->createChannelCollection()Lcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;
+HPLcom/android/server/wifi/scanner/ChannelHelper;->estimateScanDuration(Landroid/net/wifi/WifiScanner$ScanSettings;)I
+HPLcom/android/server/wifi/scanner/ChannelHelper;->getAvailableScanChannels(I)[Landroid/net/wifi/WifiScanner$ChannelSpec;
+HPLcom/android/server/wifi/scanner/ChannelHelper;->settingsContainChannel(Landroid/net/wifi/WifiScanner$ScanSettings;I)Z
+HPLcom/android/server/wifi/scanner/HalChannelHelper;->updateChannels()V
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper$KnownBandsChannelCollection;-><init>(Lcom/android/server/wifi/scanner/KnownBandsChannelHelper;)V
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper$KnownBandsChannelCollection;->addBand(I)V
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper$KnownBandsChannelCollection;->addChannel(I)V
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper$KnownBandsChannelCollection;->containsBand(I)Z
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper$KnownBandsChannelCollection;->containsChannel(I)Z
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper$KnownBandsChannelCollection;->fillBucketSettings(Lcom/android/server/wifi/WifiNative$BucketSettings;I)V
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper;->-wrap0(Lcom/android/server/wifi/scanner/KnownBandsChannelHelper;I)I
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper;->copyChannels([Landroid/net/wifi/WifiScanner$ChannelSpec;I[I)V
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper;->createChannelCollection()Lcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper;->createChannelCollection()Lcom/android/server/wifi/scanner/KnownBandsChannelHelper$KnownBandsChannelCollection;
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper;->getAvailableScanChannels(I)[Landroid/net/wifi/WifiScanner$ChannelSpec;
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper;->getBandFromChannel(I)I
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper;->isDfsChannel(I)Z
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper;->setBandChannels([I[I[I)V
+HPLcom/android/server/wifi/scanner/KnownBandsChannelHelper;->settingsContainChannel(Landroid/net/wifi/WifiScanner$ScanSettings;I)Z
+HPLcom/android/server/wifi/scanner/ScanScheduleUtil;->filterResultsForSettings(Lcom/android/server/wifi/scanner/ChannelHelper;[Landroid/net/wifi/WifiScanner$ScanData;Landroid/net/wifi/WifiScanner$ScanSettings;I)[Landroid/net/wifi/WifiScanner$ScanData;
+HPLcom/android/server/wifi/scanner/ScanScheduleUtil;->isBucketMaybeScanned(II)Z
+HPLcom/android/server/wifi/scanner/ScanScheduleUtil;->shouldReportFullScanResultForSettings(Lcom/android/server/wifi/scanner/ChannelHelper;Landroid/net/wifi/ScanResult;ILandroid/net/wifi/WifiScanner$ScanSettings;I)Z
+HPLcom/android/server/wifi/scanner/WifiScannerImpl$2;->compare(Landroid/net/wifi/ScanResult;Landroid/net/wifi/ScanResult;)I
+HPLcom/android/server/wifi/scanner/WifiScannerImpl$2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HPLcom/android/server/wifi/scanner/WifiScannerImpl$WifiScannerImplFactory;->create(Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/wifi/Clock;)Lcom/android/server/wifi/scanner/WifiScannerImpl;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientInfo;->reportEvent(IIILjava/lang/Object;)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientInfo;->toString()Ljava/lang/String;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$ExternalClientInfo;->reportEvent(IIILjava/lang/Object;)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestInfo;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientInfo;ILandroid/os/WorkSource;Ljava/lang/Object;)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestInfo;->reportEvent(IILjava/lang/Object;)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestList;->addRequest(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientInfo;ILandroid/os/WorkSource;Ljava/lang/Object;)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestList;->createMergedWorkSource()Landroid/os/WorkSource;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$DefaultState;->-com_android_server_wifi_scanner_WifiScanningServiceImpl$WifiSingleScanStateMachine$DefaultState-mthref-0(I)[Landroid/net/wifi/ScanResult;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$DefaultState;->filterCachedScanResultsByAge()[Landroid/net/wifi/ScanResult;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$DefaultState;->lambda$-com_android_server_wifi_scanner_WifiScanningServiceImpl$WifiSingleScanStateMachine$DefaultState_23945(JLandroid/net/wifi/ScanResult;)Z
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$DefaultState;->processMessage(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$DriverStartedState;->processMessage(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$IdleState;->processMessage(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$ScanningState;->enter()V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$ScanningState;->exit()V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$ScanningState;->processMessage(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->-get0(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestList;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->-get1(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;)Ljava/util/List;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->onFullScanResult(Landroid/net/wifi/ScanResult;I)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->onScanStatus(I)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->reportFullScanResult(Landroid/net/wifi/ScanResult;I)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->reportScanResults(Landroid/net/wifi/WifiScanner$ScanData;)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->sendOpFailedToAllAndClear(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestList;ILjava/lang/String;)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->sendScanResultBroadcast(Z)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->tryToStartNewScan()V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get14(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestList;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get15(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get16(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Lcom/android/server/wifi/WifiMetrics;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get3(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Lcom/android/server/wifi/scanner/ChannelHelper;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get5(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Landroid/util/ArrayMap;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get6(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Lcom/android/server/wifi/Clock;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-wrap1(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;I)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->computeWorkSource(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientInfo;Landroid/os/WorkSource;)Landroid/os/WorkSource;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->describeForLog([Landroid/net/wifi/WifiScanner$ScanData;)Ljava/lang/String;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->describeTo(Ljava/lang/StringBuilder;Landroid/net/wifi/WifiScanner$ScanSettings;)Ljava/lang/String;
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->enforceLocationHardwarePermission(I)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->isWorkSourceValid(Landroid/os/WorkSource;)Z
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->localLog(Ljava/lang/String;)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->logCallback(Ljava/lang/String;Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientInfo;ILjava/lang/String;)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->logScanRequest(Ljava/lang/String;Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientInfo;ILandroid/os/WorkSource;Landroid/net/wifi/WifiScanner$ScanSettings;Landroid/net/wifi/WifiScanner$PnoSettings;)V
+HPLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->replySucceeded(Landroid/os/Message;)V
+HPLcom/android/server/wifi/scanner/WificondScannerImpl$HwPnoDebouncer$Listener;->onPnoScanFailed()V
+HPLcom/android/server/wifi/scanner/WificondScannerImpl$LastScanSettings;-><init>(J)V
+HPLcom/android/server/wifi/scanner/WificondScannerImpl;->handleMessage(Landroid/os/Message;)Z
+HPLcom/android/server/wifi/scanner/WificondScannerImpl;->isAllChannelsScanned(Lcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;)Z
+HPLcom/android/server/wifi/scanner/WificondScannerImpl;->pollLatestScanData()V
+HPLcom/android/server/wifi/scanner/WificondScannerImpl;->processPendingScans()V
+HPLcom/android/server/wifi/util/BitMask;-><init>(I)V
+HPLcom/android/server/wifi/util/BitMask;->testAndClear(I)Z
+HPLcom/android/server/wifi/util/ByteArrayRingBuffer;->appendBuffer([B)Z
+HPLcom/android/server/wifi/util/ByteArrayRingBuffer;->getBuffer(I)[B
+HPLcom/android/server/wifi/util/ByteArrayRingBuffer;->getNumBuffers()I
+HPLcom/android/server/wifi/util/ByteArrayRingBuffer;->pruneToSize(I)V
+HPLcom/android/server/wifi/util/FrameParser;-><init>(B[B)V
+HPLcom/android/server/wifi/util/FrameParser;->getUnsignedByte(Ljava/nio/ByteBuffer;)S
+HPLcom/android/server/wifi/util/FrameParser;->getUnsignedShort(Ljava/nio/ByteBuffer;)I
+HPLcom/android/server/wifi/util/FrameParser;->parseEthernetFrame(Ljava/nio/ByteBuffer;)V
+HPLcom/android/server/wifi/util/FrameParser;->parseIpv4Packet(Ljava/nio/ByteBuffer;)V
+HPLcom/android/server/wifi/util/FrameParser;->parseTcpPacket(Ljava/nio/ByteBuffer;)V
+HPLcom/android/server/wifi/util/InformationElementUtil$BssLoad;-><init>()V
+HPLcom/android/server/wifi/util/InformationElementUtil$BssLoad;->from(Landroid/net/wifi/ScanResult$InformationElement;)V
+HPLcom/android/server/wifi/util/InformationElementUtil$Capabilities;-><init>()V
+HPLcom/android/server/wifi/util/InformationElementUtil$Capabilities;->cipherToString(I)Ljava/lang/String;
+HPLcom/android/server/wifi/util/InformationElementUtil$Capabilities;->from([Landroid/net/wifi/ScanResult$InformationElement;Ljava/util/BitSet;)V
+HPLcom/android/server/wifi/util/InformationElementUtil$Capabilities;->generateCapabilitiesString()Ljava/lang/String;
+HPLcom/android/server/wifi/util/InformationElementUtil$Capabilities;->isWpaOneElement(Landroid/net/wifi/ScanResult$InformationElement;)Z
+HPLcom/android/server/wifi/util/InformationElementUtil$Capabilities;->isWpsElement(Landroid/net/wifi/ScanResult$InformationElement;)Z
+HPLcom/android/server/wifi/util/InformationElementUtil$Capabilities;->keyManagementToString(I)Ljava/lang/String;
+HPLcom/android/server/wifi/util/InformationElementUtil$Capabilities;->parseRsnCipher(I)I
+HPLcom/android/server/wifi/util/InformationElementUtil$Capabilities;->parseRsnElement(Landroid/net/wifi/ScanResult$InformationElement;)V
+HPLcom/android/server/wifi/util/InformationElementUtil$Capabilities;->parseWpaOneElement(Landroid/net/wifi/ScanResult$InformationElement;)V
+HPLcom/android/server/wifi/util/InformationElementUtil$Capabilities;->protocolToString(I)Ljava/lang/String;
+HPLcom/android/server/wifi/util/InformationElementUtil$ExtendedCapabilities;-><init>()V
+HPLcom/android/server/wifi/util/InformationElementUtil$ExtendedCapabilities;->from(Landroid/net/wifi/ScanResult$InformationElement;)V
+HPLcom/android/server/wifi/util/InformationElementUtil$ExtendedCapabilities;->is80211McRTTResponder()Z
+HPLcom/android/server/wifi/util/InformationElementUtil$HtOperation;-><init>()V
+HPLcom/android/server/wifi/util/InformationElementUtil$HtOperation;->from(Landroid/net/wifi/ScanResult$InformationElement;)V
+HPLcom/android/server/wifi/util/InformationElementUtil$HtOperation;->getCenterFreq0(I)I
+HPLcom/android/server/wifi/util/InformationElementUtil$HtOperation;->getChannelWidth()I
+HPLcom/android/server/wifi/util/InformationElementUtil$Interworking;-><init>()V
+HPLcom/android/server/wifi/util/InformationElementUtil$Interworking;->from(Landroid/net/wifi/ScanResult$InformationElement;)V
+HPLcom/android/server/wifi/util/InformationElementUtil$RoamingConsortium;-><init>()V
+HPLcom/android/server/wifi/util/InformationElementUtil$SupportedRates;-><init>()V
+HPLcom/android/server/wifi/util/InformationElementUtil$SupportedRates;->from(Landroid/net/wifi/ScanResult$InformationElement;)V
+HPLcom/android/server/wifi/util/InformationElementUtil$SupportedRates;->getRateFromByte(I)I
+HPLcom/android/server/wifi/util/InformationElementUtil$SupportedRates;->isValid()Z
+HPLcom/android/server/wifi/util/InformationElementUtil$TrafficIndicationMap;-><init>()V
+HPLcom/android/server/wifi/util/InformationElementUtil$TrafficIndicationMap;->from(Landroid/net/wifi/ScanResult$InformationElement;)V
+HPLcom/android/server/wifi/util/InformationElementUtil$TrafficIndicationMap;->isValid()Z
+HPLcom/android/server/wifi/util/InformationElementUtil$VhtOperation;-><init>()V
+HPLcom/android/server/wifi/util/InformationElementUtil$VhtOperation;->from(Landroid/net/wifi/ScanResult$InformationElement;)V
+HPLcom/android/server/wifi/util/InformationElementUtil$VhtOperation;->getCenterFreq0()I
+HPLcom/android/server/wifi/util/InformationElementUtil$VhtOperation;->getCenterFreq1()I
+HPLcom/android/server/wifi/util/InformationElementUtil$VhtOperation;->getChannelWidth()I
+HPLcom/android/server/wifi/util/InformationElementUtil$VhtOperation;->isValid()Z
+HPLcom/android/server/wifi/util/InformationElementUtil$Vsa;-><init>()V
+HPLcom/android/server/wifi/util/InformationElementUtil$Vsa;->from(Landroid/net/wifi/ScanResult$InformationElement;)V
+HPLcom/android/server/wifi/util/InformationElementUtil$WifiMode;->determineMode(IIZZZ)I
+HPLcom/android/server/wifi/util/InformationElementUtil;->parseInformationElements([B)[Landroid/net/wifi/ScanResult$InformationElement;
+HPLcom/android/server/wifi/util/NativeUtil;->byteArrayFromArrayList(Ljava/util/ArrayList;)[B
+HPLcom/android/server/wifi/util/NativeUtil;->byteArrayToArrayList([B)Ljava/util/ArrayList;
+HPLcom/android/server/wifi/util/NativeUtil;->macAddressFromByteArray([B)Ljava/lang/String;
+HPLcom/android/server/wifi/util/ScanResultUtil;->createQuotedSSID(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/wifi/util/ScanResultUtil;->isScanResultForEapNetwork(Landroid/net/wifi/ScanResult;)Z
+HPLcom/android/server/wifi/util/ScanResultUtil;->isScanResultForOpenNetwork(Landroid/net/wifi/ScanResult;)Z
+HPLcom/android/server/wifi/util/ScanResultUtil;->isScanResultForPskNetwork(Landroid/net/wifi/ScanResult;)Z
+HPLcom/android/server/wifi/util/ScanResultUtil;->isScanResultForWepNetwork(Landroid/net/wifi/ScanResult;)Z
+HPLcom/android/server/wifi/util/ScanResultUtil;->toScanDetail(Landroid/net/wifi/ScanResult;)Lcom/android/server/wifi/ScanDetail;
+HPLcom/android/server/wifi/util/TelephonyUtil;->getSimMethodForConfig(Landroid/net/wifi/WifiConfiguration;)I
+HPLcom/android/server/wifi/util/TelephonyUtil;->isSimConfig(Landroid/net/wifi/WifiConfiguration;)Z
+HPLcom/android/server/wifi/util/TelephonyUtil;->isSimEapMethod(I)Z
+HPLcom/android/server/wifi/util/WifiAsyncChannel;->getOrInitLog()Lcom/android/server/wifi/WifiLog;
+HPLcom/android/server/wifi/util/WifiAsyncChannel;->sendMessage(Landroid/os/Message;)V
+HPLcom/android/server/wifi/util/WifiAsyncChannel;->sendMessageSynchronously(Landroid/os/Message;)Landroid/os/Message;
+HPLcom/android/server/wifi/util/WifiHandler;->getOrInitLog()Lcom/android/server/wifi/WifiLog;
+HPLcom/android/server/wifi/util/WifiHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/wifi/util/WifiPermissionsUtil;->canAccessScanResults(Ljava/lang/String;II)Z
+HPLcom/android/server/wifi/util/WifiPermissionsUtil;->checkAppOpAllowed(ILjava/lang/String;I)Z
+HPLcom/android/server/wifi/util/WifiPermissionsUtil;->checkCallerHasPeersMacAddressPermission(I)Z
+HPLcom/android/server/wifi/util/WifiPermissionsUtil;->checkCallersLocationPermission(Ljava/lang/String;I)Z
+HPLcom/android/server/wifi/util/WifiPermissionsUtil;->isCallerActiveNwScorer(I)Z
+HPLcom/android/server/wifi/util/WifiPermissionsUtil;->isCurrentProfile(I)Z
+HPLcom/android/server/wifi/util/WifiPermissionsUtil;->isForegroundApp(Ljava/lang/String;)Z
+HPLcom/android/server/wifi/util/WifiPermissionsUtil;->isLegacyForeground(Ljava/lang/String;I)Z
+HPLcom/android/server/wifi/util/WifiPermissionsUtil;->isLegacyVersion(Ljava/lang/String;I)Z
+HPLcom/android/server/wifi/util/WifiPermissionsUtil;->isLocationModeEnabled(Ljava/lang/String;)Z
+HPLcom/android/server/wifi/util/WifiPermissionsUtil;->isScanAllowedbyApps(Ljava/lang/String;I)Z
+HPLcom/android/server/wifi/util/WifiPermissionsWrapper;->getCallingUserId(I)I
+HPLcom/android/server/wifi/util/WifiPermissionsWrapper;->getCurrentUser()I
+HPLcom/android/server/wifi/util/WifiPermissionsWrapper;->getTopPkgName()Ljava/lang/String;
+HPLcom/android/server/wifi/util/WifiPermissionsWrapper;->getUidPermission(Ljava/lang/String;I)I
+HPLcom/android/server/wifi/util/XmlUtil$WifiConfigurationXmlUtil;->parseFromXml(Lorg/xmlpull/v1/XmlPullParser;I)Landroid/util/Pair;
+HPLcom/android/server/wifi/util/XmlUtil$WifiConfigurationXmlUtil;->writeToXmlForConfigStore(Lorg/xmlpull/v1/XmlSerializer;Landroid/net/wifi/WifiConfiguration;)V
+HPLcom/android/server/wifi/util/XmlUtil;->readCurrentValue(Lorg/xmlpull/v1/XmlPullParser;[Ljava/lang/String;)Ljava/lang/Object;
+HPLcom/android/server/wifi/util/XmlUtil;->writeNextValue(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/lang/Object;)V
+HPLcom/android/server/wifi/wificond/ChannelSettings;-><init>()V
+HPLcom/android/server/wifi/wificond/ChannelSettings;->writeToParcel(Landroid/os/Parcel;I)V
+HPLcom/android/server/wifi/wificond/NativeScanResult$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/server/wifi/wificond/NativeScanResult;
+HPLcom/android/server/wifi/wificond/NativeScanResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HPLcom/android/server/wifi/wificond/NativeScanResult$1;->newArray(I)[Ljava/lang/Object;
+HPLcom/android/server/wifi/wificond/NativeScanResult;-><init>()V
+HPLcom/android/server/wifi/wificond/SingleScanSettings;->writeToParcel(Landroid/os/Parcel;I)V
+HPLcom/android/server/wm/-$Lambda$OQfQhd_xsxt9hoLAjIbVfOwa-jY;->$m$0(J)V
+HPLcom/android/server/wm/-$Lambda$OQfQhd_xsxt9hoLAjIbVfOwa-jY;->doFrame(J)V
+HPLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$1;->$m$0(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$1;->$m$1(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$1;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$3;->$m$0(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$3;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$4;->$m$1(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$4;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$7;->$m$0(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$7;->apply(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;->$m$1(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;->$m$14(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;->$m$17(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;->$m$3(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;->$m$4(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;->$m$5(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;->$m$6(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;->$m$7(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;->$m$8(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;->$m$9(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;-><init>(BLjava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$aEpJ2RCAIjecjyIIYTv6ricEwh4;->$m$12()V
+HPLcom/android/server/wm/-$Lambda$aEpJ2RCAIjecjyIIYTv6ricEwh4;-><init>(BLjava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$aEpJ2RCAIjecjyIIYTv6ricEwh4;->run()V
+HPLcom/android/server/wm/-$Lambda$hCYoJeHmvymNpgtwuNPQ6z-HGjQ;->$m$0(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$hCYoJeHmvymNpgtwuNPQ6z-HGjQ;->$m$3(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$hCYoJeHmvymNpgtwuNPQ6z-HGjQ;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/-$Lambda$lpBUCbECLvWBIi8CcvaEY5AB7jM$1;->$m$0(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$Lambda$lpBUCbECLvWBIi8CcvaEY5AB7jM$1;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$Lambda$lpBUCbECLvWBIi8CcvaEY5AB7jM;->$m$0(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$Lambda$lpBUCbECLvWBIi8CcvaEY5AB7jM;->$m$1(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$Lambda$lpBUCbECLvWBIi8CcvaEY5AB7jM;->apply(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/-$Lambda$v2Yn08uofw54W8n_7KsmBjqR0Z8;->$m$0(I)Ljava/io/File;
+HPLcom/android/server/wm/-$Lambda$v2Yn08uofw54W8n_7KsmBjqR0Z8;->getSystemDirectoryForUser(I)Ljava/io/File;
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver$MyHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->cacheWindows(Ljava/util/List;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->clearAndRecycleWindows(Ljava/util/List;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->computeChangedWindows()V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->computeWindowBoundsInScreen(Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->isReportedWindowType(I)Z
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->lambda$-com_android_server_wm_AccessibilityController$WindowsForAccessibilityObserver_59134(Landroid/util/SparseArray;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->obtainPopulatedWindowInfo(Lcom/android/server/wm/WindowState;Landroid/graphics/Rect;)Landroid/view/WindowInfo;
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->performComputeChangedWindowsNotLocked()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;->windowChangedNoLayer(Landroid/view/WindowInfo;Landroid/view/WindowInfo;)Z
+HPLcom/android/server/wm/AccessibilityController;->-wrap0(Lcom/android/server/wm/WindowState;Landroid/graphics/Matrix;)V
+HPLcom/android/server/wm/AccessibilityController;->drawMagnifiedRegionBorderIfNeededLocked()V
+HPLcom/android/server/wm/AccessibilityController;->getMagnificationSpecForWindowLocked(Lcom/android/server/wm/WindowState;)Landroid/view/MagnificationSpec;
+HPLcom/android/server/wm/AccessibilityController;->onRectangleOnScreenRequestedLocked(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/AccessibilityController;->onSomeWindowResizedOrMovedLocked()V
+HPLcom/android/server/wm/AccessibilityController;->onWindowLayersChangedLocked()V
+HPLcom/android/server/wm/AccessibilityController;->populateTransformationMatrixLocked(Lcom/android/server/wm/WindowState;Landroid/graphics/Matrix;)V
+HPLcom/android/server/wm/AppTransition;->createClipRevealAnimationLocked(IZLandroid/graphics/Rect;Landroid/graphics/Rect;)Landroid/view/animation/Animation;
+HPLcom/android/server/wm/AppTransition;->getAppStackClipMode()I
+HPLcom/android/server/wm/AppTransition;->getAppTransition()I
+HPLcom/android/server/wm/AppTransition;->getCachedAnimations(Landroid/view/WindowManager$LayoutParams;)Lcom/android/server/AttributeCache$Entry;
+HPLcom/android/server/wm/AppTransition;->goodToGo(ILcom/android/server/wm/AppWindowAnimator;Lcom/android/server/wm/AppWindowAnimator;Landroid/util/ArraySet;Landroid/util/ArraySet;)I
+HPLcom/android/server/wm/AppTransition;->isKeyguardGoingAwayTransit(I)Z
+HPLcom/android/server/wm/AppTransition;->isKeyguardTransit(I)Z
+HPLcom/android/server/wm/AppTransition;->isReady()Z
+HPLcom/android/server/wm/AppTransition;->isRunning()Z
+HPLcom/android/server/wm/AppTransition;->isTimeout()Z
+HPLcom/android/server/wm/AppTransition;->isTransitionSet()Z
+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;ZZI)Landroid/view/animation/Animation;
+HPLcom/android/server/wm/AppTransition;->loadAnimationAttr(Landroid/view/WindowManager$LayoutParams;I)Landroid/view/animation/Animation;
+HPLcom/android/server/wm/AppTransition;->notifyAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/AppTransition;->notifyAppTransitionPendingLocked()V
+HPLcom/android/server/wm/AppTransition;->notifyAppTransitionStartingLocked(ILandroid/os/IBinder;Landroid/os/IBinder;Landroid/view/animation/Animation;Landroid/view/animation/Animation;)I
+HPLcom/android/server/wm/AppTransition;->prepare()Z
+HPLcom/android/server/wm/AppTransition;->prepareAppTransitionLocked(IZIZ)Z
+HPLcom/android/server/wm/AppTransition;->setAppTransitionState(I)V
+HPLcom/android/server/wm/AppTransition;->setLastAppTransition(ILcom/android/server/wm/AppWindowToken;Lcom/android/server/wm/AppWindowToken;)V
+HPLcom/android/server/wm/AppTransition;->setReady()V
+HPLcom/android/server/wm/AppTransition;->updateBooster()V
+HPLcom/android/server/wm/AppWindowAnimator;->clearAnimation()V
+HPLcom/android/server/wm/AppWindowAnimator;->clearThumbnail()V
+HPLcom/android/server/wm/AppWindowAnimator;->getAnimationFrameTime(Landroid/view/animation/Animation;J)J
+HPLcom/android/server/wm/AppWindowAnimator;->getStackClip()I
+HPLcom/android/server/wm/AppWindowAnimator;->getStartTimeCorrection()J
+HPLcom/android/server/wm/AppWindowAnimator;->getTransit()I
+HPLcom/android/server/wm/AppWindowAnimator;->isAnimating()Z
+HPLcom/android/server/wm/AppWindowAnimator;->isAnimationStarting()Z
+HPLcom/android/server/wm/AppWindowAnimator;->setAnimation(Landroid/view/animation/Animation;IIIIZIII)V
+HPLcom/android/server/wm/AppWindowAnimator;->setDummyAnimation()V
+HPLcom/android/server/wm/AppWindowAnimator;->setNullAnimation()V
+HPLcom/android/server/wm/AppWindowAnimator;->showAllWindowsLocked()Z
+HPLcom/android/server/wm/AppWindowAnimator;->stepAnimation(J)Z
+HPLcom/android/server/wm/AppWindowAnimator;->stepAnimationLocked(J)Z
+HPLcom/android/server/wm/AppWindowAnimator;->updateLayers()V
+HPLcom/android/server/wm/AppWindowContainerController$H;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/wm/AppWindowContainerController;-><init>(Lcom/android/server/wm/TaskWindowContainerController;Landroid/view/IApplicationToken;Lcom/android/server/wm/AppWindowContainerListener;IIZZIZZZIIJLcom/android/server/wm/WindowManagerService;Landroid/content/res/Configuration;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/AppWindowContainerController;->addStartingWindow(Ljava/lang/String;ILandroid/content/res/CompatibilityInfo;Ljava/lang/CharSequence;IIIILandroid/os/IBinder;ZZZZZZ)Z
+HPLcom/android/server/wm/AppWindowContainerController;->getOrientation()I
+HPLcom/android/server/wm/AppWindowContainerController;->lambda$-com_android_server_wm_AppWindowContainerController_4735()V
+HPLcom/android/server/wm/AppWindowContainerController;->pauseKeyDispatching()V
+HPLcom/android/server/wm/AppWindowContainerController;->removeStartingWindow()V
+HPLcom/android/server/wm/AppWindowContainerController;->reportStartingWindowDrawn()V
+HPLcom/android/server/wm/AppWindowContainerController;->resumeKeyDispatching()V
+HPLcom/android/server/wm/AppWindowContainerController;->setVisibility(ZZ)V
+HPLcom/android/server/wm/AppWindowContainerController;->stopFreezingScreen(Z)V
+HPLcom/android/server/wm/AppWindowToken;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/IApplicationToken;ZLcom/android/server/wm/DisplayContent;ZLandroid/content/res/Configuration;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/AppWindowToken;->addWindow(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/AppWindowToken;->allDrawnStatesConsidered()Z
+HPLcom/android/server/wm/AppWindowToken;->asAppWindowToken()Lcom/android/server/wm/AppWindowToken;
+HPLcom/android/server/wm/AppWindowToken;->canRestoreSurfaces()Z
+HPLcom/android/server/wm/AppWindowToken;->checkAppWindowsReadyToShow()V
+HPLcom/android/server/wm/AppWindowToken;->checkCompleteDeferredRemoval()Z
+HPLcom/android/server/wm/AppWindowToken;->checkKeyguardFlagsChanged()V
+HPLcom/android/server/wm/AppWindowToken;->clearAllDrawn()V
+HPLcom/android/server/wm/AppWindowToken;->clearAnimatingFlags()V
+HPLcom/android/server/wm/AppWindowToken;->clearWasVisibleBeforeClientHidden()V
+HPLcom/android/server/wm/AppWindowToken;->containsDismissKeyguardWindow()Z
+HPLcom/android/server/wm/AppWindowToken;->containsShowWhenLockedWindow()Z
+HPLcom/android/server/wm/AppWindowToken;->destroySavedSurfaces()V
+HPLcom/android/server/wm/AppWindowToken;->destroySurfaces()V
+HPLcom/android/server/wm/AppWindowToken;->destroySurfaces(Z)V
+HPLcom/android/server/wm/AppWindowToken;->fillsParent()Z
+HPLcom/android/server/wm/AppWindowToken;->findMainWindow()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/AppWindowToken;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HPLcom/android/server/wm/AppWindowToken;->forAllWindowsUnchecked(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HPLcom/android/server/wm/AppWindowToken;->getAnimLayerAdjustment()I
+HPLcom/android/server/wm/AppWindowToken;->getController()Lcom/android/server/wm/AppWindowContainerController;
+HPLcom/android/server/wm/AppWindowToken;->getOrientation(I)I
+HPLcom/android/server/wm/AppWindowToken;->getOrientationIgnoreVisibility()I
+HPLcom/android/server/wm/AppWindowToken;->getStack()Lcom/android/server/wm/TaskStack;
+HPLcom/android/server/wm/AppWindowToken;->getTask()Lcom/android/server/wm/Task;
+HPLcom/android/server/wm/AppWindowToken;->hasBounds()Z
+HPLcom/android/server/wm/AppWindowToken;->isAnimatingInvisibleWithSavedSurface()Z
+HPLcom/android/server/wm/AppWindowToken;->isClientHidden()Z
+HPLcom/android/server/wm/AppWindowToken;->isRelaunching()Z
+HPLcom/android/server/wm/AppWindowToken;->isVisible()Z
+HPLcom/android/server/wm/AppWindowToken;->markSavedSurfaceExiting()V
+HPLcom/android/server/wm/AppWindowToken;->notifyAppStopped()V
+HPLcom/android/server/wm/AppWindowToken;->onAppTransitionDone()V
+HPLcom/android/server/wm/AppWindowToken;->onFirstWindowDrawn(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowStateAnimator;)V
+HPLcom/android/server/wm/AppWindowToken;->onParentSet()V
+HPLcom/android/server/wm/AppWindowToken;->onRemovedFromDisplay()V
+HPLcom/android/server/wm/AppWindowToken;->removeDeadWindows()V
+HPLcom/android/server/wm/AppWindowToken;->removeReplacedWindowIfNeeded(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/AppWindowToken;->requestUpdateWallpaperIfNeeded()V
+HPLcom/android/server/wm/AppWindowToken;->restoreSavedSurfaceForInterestingWindows()V
+HPLcom/android/server/wm/AppWindowToken;->setAllAppWinAnimators()V
+HPLcom/android/server/wm/AppWindowToken;->setAppLayoutChanges(ILjava/lang/String;)V
+HPLcom/android/server/wm/AppWindowToken;->setClientHidden(Z)V
+HPLcom/android/server/wm/AppWindowToken;->setVisibility(Landroid/view/WindowManager$LayoutParams;ZIZZ)Z
+HPLcom/android/server/wm/AppWindowToken;->stepAppWindowsAnimation(J)V
+HPLcom/android/server/wm/AppWindowToken;->toString()Ljava/lang/String;
+HPLcom/android/server/wm/AppWindowToken;->updateAllDrawn()V
+HPLcom/android/server/wm/AppWindowToken;->updateDrawnWindowStates(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/AppWindowToken;->updateReportedVisibilityLocked()V
+HPLcom/android/server/wm/AppWindowToken;->windowsAreFocusable()Z
+HPLcom/android/server/wm/BlackFrame$BlackSurface;->setMatrix(Landroid/graphics/Matrix;)V
+HPLcom/android/server/wm/BlackFrame;->setMatrix(Landroid/graphics/Matrix;)V
+HPLcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;->animationFinished()V
+HPLcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/BoundsAnimationTarget;->onAnimationEnd(ZLandroid/graphics/Rect;Z)V
+HPLcom/android/server/wm/BoundsAnimationTarget;->onAnimationStart(Z)V
+HPLcom/android/server/wm/BoundsAnimationTarget;->setPinnedStackSize(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
+HPLcom/android/server/wm/DimLayer;->adjustAlpha(F)V
+HPLcom/android/server/wm/DimLayer;->adjustBounds()V
+HPLcom/android/server/wm/DimLayer;->getBoundsForFullscreen(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DimLayer;->getLayer()I
+HPLcom/android/server/wm/DimLayer;->getTargetAlpha()F
+HPLcom/android/server/wm/DimLayer;->hide()V
+HPLcom/android/server/wm/DimLayer;->hide(J)V
+HPLcom/android/server/wm/DimLayer;->isAnimating()Z
+HPLcom/android/server/wm/DimLayer;->isDimming()Z
+HPLcom/android/server/wm/DimLayer;->setAlpha(F)V
+HPLcom/android/server/wm/DimLayer;->setBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DimLayer;->setBoundsForFullscreen()V
+HPLcom/android/server/wm/DimLayer;->setLayer(I)V
+HPLcom/android/server/wm/DimLayer;->show(IFJ)V
+HPLcom/android/server/wm/DimLayer;->stepAnimation()Z
+HPLcom/android/server/wm/DimLayerController;->animateDimLayers()Z
+HPLcom/android/server/wm/DimLayerController;->animateDimLayers(Lcom/android/server/wm/DimLayer$DimLayerUser;)Z
+HPLcom/android/server/wm/DimLayerController;->applyDim(Lcom/android/server/wm/DimLayer$DimLayerUser;Lcom/android/server/wm/WindowStateAnimator;Z)V
+HPLcom/android/server/wm/DimLayerController;->getOrCreateDimLayerState(Lcom/android/server/wm/DimLayer$DimLayerUser;)Lcom/android/server/wm/DimLayerController$DimLayerState;
+HPLcom/android/server/wm/DimLayerController;->isDimming(Lcom/android/server/wm/DimLayer$DimLayerUser;Lcom/android/server/wm/WindowStateAnimator;)Z
+HPLcom/android/server/wm/DimLayerController;->resetDimming()V
+HPLcom/android/server/wm/DimLayerController;->stopDimmingIfNeeded()V
+HPLcom/android/server/wm/DimLayerController;->stopDimmingIfNeeded(Lcom/android/server/wm/DimLayer$DimLayerUser;)V
+HPLcom/android/server/wm/DimLayerController;->updateDimLayer(Lcom/android/server/wm/DimLayer$DimLayerUser;)V
+HPLcom/android/server/wm/DisplayContent$ApplySurfaceChangesTransactionState;->reset()V
+HPLcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;->fillsParent()Z
+HPLcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;->get(I)Lcom/android/server/wm/WindowContainer;
+HPLcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;->size()I
+HPLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->getOrientation()I
+HPLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->lambda$-com_android_server_wm_DisplayContent$NonAppWindowContainers_154417(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DisplayContent$Screenshoter;->screenshot(Landroid/graphics/Rect;IIIIZI)Ljava/lang/Object;
+HPLcom/android/server/wm/DisplayContent$TaskStackContainers;->findPositionForStack(ILcom/android/server/wm/TaskStack;Z)I
+HPLcom/android/server/wm/DisplayContent$TaskStackContainers;->forAllExitingAppTokenWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HPLcom/android/server/wm/DisplayContent$TaskStackContainers;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HPLcom/android/server/wm/DisplayContent$TaskStackContainers;->getOrientation()I
+HPLcom/android/server/wm/DisplayContent$TaskStackContainers;->positionChildAt(ILcom/android/server/wm/TaskStack;Z)V
+HPLcom/android/server/wm/DisplayContent$TaskStackContainers;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+HPLcom/android/server/wm/DisplayContent$TaskStackContainers;->removeExistingAppTokensIfPossible()V
+HPLcom/android/server/wm/DisplayContent$TaskStackContainers;->setExitingTokensHasVisible(Z)V
+HPLcom/android/server/wm/DisplayContent;->-set2(Lcom/android/server/wm/DisplayContent;I)I
+HPLcom/android/server/wm/DisplayContent;->adjustDisplaySizeRanges(Landroid/view/DisplayInfo;IIIII)V
+HPLcom/android/server/wm/DisplayContent;->adjustForImeIfNeeded()V
+HPLcom/android/server/wm/DisplayContent;->animateDimLayers()Z
+HPLcom/android/server/wm/DisplayContent;->applySurfaceChangesTransaction(Z)Z
+HPLcom/android/server/wm/DisplayContent;->assignWindowLayers(Z)V
+HPLcom/android/server/wm/DisplayContent;->checkCompleteDeferredRemoval()Z
+HPLcom/android/server/wm/DisplayContent;->clearLayoutNeeded()V
+HPLcom/android/server/wm/DisplayContent;->computeCompatSmallestWidth(ZIIII)I
+HPLcom/android/server/wm/DisplayContent;->computeImeTarget(Z)Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/DisplayContent;->computeScreenConfiguration(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/DisplayContent;->computeSizeRangesAndScreenLayout(Landroid/view/DisplayInfo;IZIIIFLandroid/content/res/Configuration;)V
+HPLcom/android/server/wm/DisplayContent;->findFocusedWindow()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/DisplayContent;->forAllImeWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HPLcom/android/server/wm/DisplayContent;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HPLcom/android/server/wm/DisplayContent;->getAppWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/AppWindowToken;
+HPLcom/android/server/wm/DisplayContent;->getDisplayId()I
+HPLcom/android/server/wm/DisplayContent;->getDisplayInfo()Landroid/view/DisplayInfo;
+HPLcom/android/server/wm/DisplayContent;->getDockedDividerController()Lcom/android/server/wm/DockedStackDividerController;
+HPLcom/android/server/wm/DisplayContent;->getDockedStackIgnoringVisibility()Lcom/android/server/wm/TaskStack;
+HPLcom/android/server/wm/DisplayContent;->getDockedStackLocked()Lcom/android/server/wm/TaskStack;
+HPLcom/android/server/wm/DisplayContent;->getHomeStack()Lcom/android/server/wm/TaskStack;
+HPLcom/android/server/wm/DisplayContent;->getLastOrientation()I
+HPLcom/android/server/wm/DisplayContent;->getLayerForAnimationBackground(Lcom/android/server/wm/WindowStateAnimator;)I
+HPLcom/android/server/wm/DisplayContent;->getLogicalDisplayRect(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayContent;->getNeedsMenu(Lcom/android/server/wm/WindowState;Landroid/view/WindowManagerPolicy$WindowState;)Z
+HPLcom/android/server/wm/DisplayContent;->getOrientation()I
+HPLcom/android/server/wm/DisplayContent;->getRotation()I
+HPLcom/android/server/wm/DisplayContent;->getStackById(I)Lcom/android/server/wm/TaskStack;
+HPLcom/android/server/wm/DisplayContent;->getWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/WindowToken;
+HPLcom/android/server/wm/DisplayContent;->inputMethodClientHasFocus(Lcom/android/internal/view/IInputMethodClient;)Z
+HPLcom/android/server/wm/DisplayContent;->isLayoutNeeded()Z
+HPLcom/android/server/wm/DisplayContent;->isStackVisible(I)Z
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_109993(Lcom/android/server/wm/WindowState;Landroid/view/WindowManagerPolicy$WindowState;Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_113179(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_117549(IILcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_130270(IZLandroid/os/IBinder;Landroid/util/MutableBoolean;ZLandroid/graphics/Rect;Landroid/graphics/Rect;Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_16102(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_18415(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_20364(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_20860(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_22915(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_23021(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_26564(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_28303(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_28588(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_28793(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_92144(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DisplayContent;->layoutAndAssignWindowLayersIfNeeded()V
+HPLcom/android/server/wm/DisplayContent;->okToAnimate()Z
+HPLcom/android/server/wm/DisplayContent;->okToDisplay()Z
+HPLcom/android/server/wm/DisplayContent;->performLayout(ZZ)V
+HPLcom/android/server/wm/DisplayContent;->positionChildAt(ILcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;Z)V
+HPLcom/android/server/wm/DisplayContent;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+HPLcom/android/server/wm/DisplayContent;->prepareWindowSurfaces()V
+HPLcom/android/server/wm/DisplayContent;->reduceCompatConfigWidthSize(IIILandroid/util/DisplayMetrics;III)I
+HPLcom/android/server/wm/DisplayContent;->reduceConfigLayout(IIFIIII)I
+HPLcom/android/server/wm/DisplayContent;->removeExistingTokensIfPossible()V
+HPLcom/android/server/wm/DisplayContent;->resetAnimationBackgroundAnimator()V
+HPLcom/android/server/wm/DisplayContent;->resetDimming()V
+HPLcom/android/server/wm/DisplayContent;->scheduleToastWindowsTimeoutIfNeededLocked(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->screenshotApplications(Landroid/os/IBinder;IIZFZZLcom/android/server/wm/DisplayContent$Screenshoter;)Ljava/lang/Object;
+HPLcom/android/server/wm/DisplayContent;->setExitingTokensHasVisible(Z)V
+HPLcom/android/server/wm/DisplayContent;->setInputMethodTarget(Lcom/android/server/wm/WindowState;ZI)V
+HPLcom/android/server/wm/DisplayContent;->setLayoutNeeded()V
+HPLcom/android/server/wm/DisplayContent;->setTouchExcludeRegion(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/DisplayContent;->stopDimmingIfNeeded()V
+HPLcom/android/server/wm/DisplayContent;->updateDisplayAndOrientation(I)Landroid/view/DisplayInfo;
+HPLcom/android/server/wm/DisplayContent;->updateRotationUnchecked(Z)Z
+HPLcom/android/server/wm/DisplayContent;->updateSystemUiVisibility(II)V
+HPLcom/android/server/wm/DisplayContent;->updateWallpaperForAnimator(Lcom/android/server/wm/WindowAnimator;)V
+HPLcom/android/server/wm/DisplayContent;->updateWindowsForAnimator(Lcom/android/server/wm/WindowAnimator;)V
+HPLcom/android/server/wm/DockedStackDividerController;->animate(J)Z
+HPLcom/android/server/wm/DockedStackDividerController;->initSnapAlgorithmForRotations()V
+HPLcom/android/server/wm/DockedStackDividerController;->isMinimizedDock()Z
+HPLcom/android/server/wm/DockedStackDividerController;->isResizing()Z
+HPLcom/android/server/wm/DockedStackDividerController;->positionDockedStackedDivider(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DockedStackDividerController;->reevaluateVisibility(Z)V
+HPLcom/android/server/wm/DockedStackDividerController;->setAdjustedForIme(ZZZLcom/android/server/wm/WindowState;I)V
+HPLcom/android/server/wm/DockedStackDividerController;->setResizeDimLayer(ZIF)V
+HPLcom/android/server/wm/InputConsumerImpl;->layout(II)V
+HPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->-wrap0(Lcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;Z)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
+HPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->updateInputWindows(Z)V
+HPLcom/android/server/wm/InputMonitor;->-get0(Lcom/android/server/wm/InputMonitor;)Z
+HPLcom/android/server/wm/InputMonitor;->-get1(Lcom/android/server/wm/InputMonitor;)Z
+HPLcom/android/server/wm/InputMonitor;->-get2(Lcom/android/server/wm/InputMonitor;)Z
+HPLcom/android/server/wm/InputMonitor;->-get3(Lcom/android/server/wm/InputMonitor;)Z
+HPLcom/android/server/wm/InputMonitor;->-get4(Lcom/android/server/wm/InputMonitor;)Lcom/android/server/input/InputWindowHandle;
+HPLcom/android/server/wm/InputMonitor;->-get5(Lcom/android/server/wm/InputMonitor;)Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/InputMonitor;->-get6(Lcom/android/server/wm/InputMonitor;)[Lcom/android/server/input/InputWindowHandle;
+HPLcom/android/server/wm/InputMonitor;->-get7(Lcom/android/server/wm/InputMonitor;)Lcom/android/server/wm/WindowManagerService;
+HPLcom/android/server/wm/InputMonitor;->-get8(Lcom/android/server/wm/InputMonitor;)Landroid/graphics/Rect;
+HPLcom/android/server/wm/InputMonitor;->-set0(Lcom/android/server/wm/InputMonitor;Z)Z
+HPLcom/android/server/wm/InputMonitor;->-set1(Lcom/android/server/wm/InputMonitor;Z)Z
+HPLcom/android/server/wm/InputMonitor;->-set2(Lcom/android/server/wm/InputMonitor;Z)Z
+HPLcom/android/server/wm/InputMonitor;->-set3(Lcom/android/server/wm/InputMonitor;Z)Z
+HPLcom/android/server/wm/InputMonitor;->-wrap1(Lcom/android/server/wm/InputMonitor;)V
+HPLcom/android/server/wm/InputMonitor;->addInputWindowHandle(Lcom/android/server/input/InputWindowHandle;)V
+HPLcom/android/server/wm/InputMonitor;->addInputWindowHandle(Lcom/android/server/input/InputWindowHandle;Lcom/android/server/wm/WindowState;IIZZZ)V
+HPLcom/android/server/wm/InputMonitor;->clearInputWindowHandlesLw()V
+HPLcom/android/server/wm/InputMonitor;->getInputConsumer(Ljava/lang/String;I)Lcom/android/server/wm/InputConsumerImpl;
+HPLcom/android/server/wm/InputMonitor;->interceptKeyBeforeDispatching(Lcom/android/server/input/InputWindowHandle;Landroid/view/KeyEvent;I)J
+HPLcom/android/server/wm/InputMonitor;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
+HPLcom/android/server/wm/InputMonitor;->layoutInputConsumers(II)V
+HPLcom/android/server/wm/InputMonitor;->setFocusedAppLw(Lcom/android/server/wm/AppWindowToken;)V
+HPLcom/android/server/wm/InputMonitor;->setInputFocusLw(Lcom/android/server/wm/WindowState;Z)V
+HPLcom/android/server/wm/InputMonitor;->setUpdateInputWindowsNeededLw()V
+HPLcom/android/server/wm/InputMonitor;->updateInputWindowsLw(Z)V
+HPLcom/android/server/wm/PinnedStackController;->getDefaultBounds()Landroid/graphics/Rect;
+HPLcom/android/server/wm/PinnedStackController;->getInsetBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/PinnedStackController;->getMovementBounds(Landroid/graphics/Rect;)Landroid/graphics/Rect;
+HPLcom/android/server/wm/PinnedStackController;->getMovementBounds(Landroid/graphics/Rect;Z)Landroid/graphics/Rect;
+HPLcom/android/server/wm/PinnedStackController;->notifyMovementBoundsChanged(Z)V
+HPLcom/android/server/wm/PinnedStackController;->reloadResources()V
+HPLcom/android/server/wm/PinnedStackController;->setAdjustedForIme(ZI)V
+HPLcom/android/server/wm/PinnedStackController;->transformBoundsToAspectRatio(Landroid/graphics/Rect;FZ)Landroid/graphics/Rect;
+HPLcom/android/server/wm/PointerEventDispatcher;->onInputEvent(Landroid/view/InputEvent;I)V
+HPLcom/android/server/wm/RootWindowContainer$MyHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/wm/RootWindowContainer;->applySurfaceChangesTransaction(ZII)V
+HPLcom/android/server/wm/RootWindowContainer;->computeFocusedWindow()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/RootWindowContainer;->copyAnimToLayoutParams()Z
+HPLcom/android/server/wm/RootWindowContainer;->getAppWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/AppWindowToken;
+HPLcom/android/server/wm/RootWindowContainer;->getDisplayContent(I)Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/RootWindowContainer;->getDisplayContentOrCreate(I)Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/RootWindowContainer;->getStackById(I)Lcom/android/server/wm/TaskStack;
+HPLcom/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
+HPLcom/android/server/wm/RootWindowContainer;->handleResizingWindows()Landroid/util/ArraySet;
+HPLcom/android/server/wm/RootWindowContainer;->hasPendingLayoutChanges(Lcom/android/server/wm/WindowAnimator;)Z
+HPLcom/android/server/wm/RootWindowContainer;->isLayoutNeeded()Z
+HPLcom/android/server/wm/RootWindowContainer;->lambda$-com_android_server_wm_RootWindowContainer_7116(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/RootWindowContainer;->lambda$-com_android_server_wm_RootWindowContainer_7397(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/RootWindowContainer;->performSurfacePlacement(Z)V
+HPLcom/android/server/wm/RootWindowContainer;->removeReplacedWindows()V
+HPLcom/android/server/wm/ScreenRotationAnimation;->getEnterTransformation()Landroid/view/animation/Transformation;
+HPLcom/android/server/wm/ScreenRotationAnimation;->hasAnimations()Z
+HPLcom/android/server/wm/ScreenRotationAnimation;->isAnimating()Z
+HPLcom/android/server/wm/ScreenRotationAnimation;->setSnapshotTransformInTransaction(Landroid/graphics/Matrix;F)V
+HPLcom/android/server/wm/ScreenRotationAnimation;->stepAnimation(J)Z
+HPLcom/android/server/wm/ScreenRotationAnimation;->updateSurfacesInTransaction()V
+HPLcom/android/server/wm/Session;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/IWindowSessionCallback;Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;)V
+HPLcom/android/server/wm/Session;->finishDrawing(Landroid/view/IWindow;)V
+HPLcom/android/server/wm/Session;->getDisplayFrame(Landroid/view/IWindow;Landroid/graphics/Rect;)V
+HPLcom/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
+HPLcom/android/server/wm/Session;->onWindowSurfaceVisibilityChanged(Lcom/android/server/wm/WindowSurfaceController;ZI)V
+HPLcom/android/server/wm/Session;->performHapticFeedback(Landroid/view/IWindow;IZ)Z
+HPLcom/android/server/wm/Session;->relayout(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/util/MergedConfiguration;Landroid/view/Surface;)I
+HPLcom/android/server/wm/Session;->windowAddedLocked(Ljava/lang/String;)V
+HPLcom/android/server/wm/StackWindowController;->getBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/StackWindowController;->positionChildAtTop(Lcom/android/server/wm/TaskWindowContainerController;Z)V
+HPLcom/android/server/wm/StackWindowListener;->requestResize(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/SurfaceControlWithBackground;-><init>(Landroid/view/SurfaceSession;Ljava/lang/String;IIIIIILcom/android/server/wm/WindowSurfaceController;)V
+HPLcom/android/server/wm/SurfaceControlWithBackground;->destroy()V
+HPLcom/android/server/wm/SurfaceControlWithBackground;->hide()V
+HPLcom/android/server/wm/SurfaceControlWithBackground;->setAlpha(F)V
+HPLcom/android/server/wm/SurfaceControlWithBackground;->setFinalCrop(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/SurfaceControlWithBackground;->setLayer(I)V
+HPLcom/android/server/wm/SurfaceControlWithBackground;->setLayerStack(I)V
+HPLcom/android/server/wm/SurfaceControlWithBackground;->setMatrix(FFFF)V
+HPLcom/android/server/wm/SurfaceControlWithBackground;->setPosition(FF)V
+HPLcom/android/server/wm/SurfaceControlWithBackground;->setWindowCrop(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/SurfaceControlWithBackground;->show()V
+HPLcom/android/server/wm/SurfaceControlWithBackground;->updateBackgroundVisibility()V
+HPLcom/android/server/wm/Task;-><init>(ILcom/android/server/wm/TaskStack;ILcom/android/server/wm/WindowManagerService;Landroid/graphics/Rect;Landroid/content/res/Configuration;IZZLandroid/app/ActivityManager$TaskDescription;Lcom/android/server/wm/TaskWindowContainerController;)V
+HPLcom/android/server/wm/Task;->cropWindowsToStackBounds()Z
+HPLcom/android/server/wm/Task;->dimFullscreen()Z
+HPLcom/android/server/wm/Task;->fillsParent()Z
+HPLcom/android/server/wm/Task;->getAdjustedAddPosition(I)I
+HPLcom/android/server/wm/Task;->getBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/Task;->getDimBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/Task;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/Task;->getTopVisibleAppToken()Lcom/android/server/wm/AppWindowToken;
+HPLcom/android/server/wm/Task;->inFreeformWorkspace()Z
+HPLcom/android/server/wm/Task;->inPinnedWorkspace()Z
+HPLcom/android/server/wm/Task;->isAttachedToDisplay()Z
+HPLcom/android/server/wm/Task;->isDragResizing()Z
+HPLcom/android/server/wm/Task;->isFloating()Z
+HPLcom/android/server/wm/Task;->isFullscreen()Z
+HPLcom/android/server/wm/Task;->isHomeTask()Z
+HPLcom/android/server/wm/Task;->isResizeable()Z
+HPLcom/android/server/wm/Task;->onParentSet()V
+HPLcom/android/server/wm/Task;->setBounds(Landroid/graphics/Rect;Landroid/content/res/Configuration;)I
+HPLcom/android/server/wm/Task;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V
+HPLcom/android/server/wm/Task;->showForAllUsers()Z
+HPLcom/android/server/wm/Task;->useCurrentBounds()Z
+HPLcom/android/server/wm/TaskSnapshotCache;->getSnapshot(IIZZ)Landroid/app/ActivityManager$TaskSnapshot;
+HPLcom/android/server/wm/TaskSnapshotCache;->putSnapshot(Lcom/android/server/wm/Task;Landroid/app/ActivityManager$TaskSnapshot;)V
+HPLcom/android/server/wm/TaskSnapshotController;->-com_android_server_wm_TaskSnapshotController-mthref-0(I)Ljava/io/File;
+HPLcom/android/server/wm/TaskSnapshotController;->getClosingTasks(Landroid/util/ArraySet;Landroid/util/ArraySet;)V
+HPLcom/android/server/wm/TaskSnapshotController;->getSnapshot(IIZZ)Landroid/app/ActivityManager$TaskSnapshot;
+HPLcom/android/server/wm/TaskSnapshotController;->handleClosingApps(Landroid/util/ArraySet;)V
+HPLcom/android/server/wm/TaskSnapshotController;->setPersisterPaused(Z)V
+HPLcom/android/server/wm/TaskSnapshotController;->snapshotTask(Lcom/android/server/wm/Task;)Landroid/app/ActivityManager$TaskSnapshot;
+HPLcom/android/server/wm/TaskSnapshotController;->snapshotTasks(Landroid/util/ArraySet;)V
+HPLcom/android/server/wm/TaskSnapshotPersister$1;->run()V
+HPLcom/android/server/wm/TaskSnapshotPersister$DirectoryResolver;->getSystemDirectoryForUser(I)Ljava/io/File;
+HPLcom/android/server/wm/TaskSnapshotPersister$RemoveObsoleteFilesQueueItem;->getTaskId(Ljava/lang/String;)I
+HPLcom/android/server/wm/TaskSnapshotPersister$RemoveObsoleteFilesQueueItem;->write()V
+HPLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->writeBuffer()Z
+HPLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->writeProto()Z
+HPLcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;->write()V
+HPLcom/android/server/wm/TaskSnapshotPersister;->-get1(Lcom/android/server/wm/TaskSnapshotPersister;)Ljava/lang/Object;
+HPLcom/android/server/wm/TaskSnapshotPersister;->-get5(Lcom/android/server/wm/TaskSnapshotPersister;)Ljava/util/ArrayDeque;
+HPLcom/android/server/wm/TaskSnapshotPersister;->-set0(Lcom/android/server/wm/TaskSnapshotPersister;Z)Z
+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;
+HPLcom/android/server/wm/TaskSnapshotPersister;->sendToQueueLocked(Lcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;)V
+HPLcom/android/server/wm/TaskSnapshotPersister;->setPaused(Z)V
+HPLcom/android/server/wm/TaskSnapshotSurface;->create(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/AppWindowToken;Landroid/app/ActivityManager$TaskSnapshot;)Lcom/android/server/wm/TaskSnapshotSurface;
+HPLcom/android/server/wm/TaskStack;->checkCompleteDeferredRemoval()Z
+HPLcom/android/server/wm/TaskStack;->computeMinPosition(II)I
+HPLcom/android/server/wm/TaskStack;->dimFullscreen()Z
+HPLcom/android/server/wm/TaskStack;->fillsParent()Z
+HPLcom/android/server/wm/TaskStack;->findPositionForTask(Lcom/android/server/wm/Task;IZZ)I
+HPLcom/android/server/wm/TaskStack;->getBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/TaskStack;->getDimBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/TaskStack;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/TaskStack;->getDisplayInfo()Landroid/view/DisplayInfo;
+HPLcom/android/server/wm/TaskStack;->isAdjustedForMinimizedDockedStack()Z
+HPLcom/android/server/wm/TaskStack;->isAnimatingBounds()Z
+HPLcom/android/server/wm/TaskStack;->isAnimatingForIme()Z
+HPLcom/android/server/wm/TaskStack;->isAttachedToDisplay()Z
+HPLcom/android/server/wm/TaskStack;->isForceScaled()Z
+HPLcom/android/server/wm/TaskStack;->isMinimizedDockAndHomeStackResizable()Z
+HPLcom/android/server/wm/TaskStack;->positionChildAt(ILcom/android/server/wm/Task;Z)V
+HPLcom/android/server/wm/TaskStack;->positionChildAt(ILcom/android/server/wm/Task;ZZ)V
+HPLcom/android/server/wm/TaskStack;->resetAdjustedForIme(Z)V
+HPLcom/android/server/wm/TaskStack;->resetAnimationBackgroundAnimator()V
+HPLcom/android/server/wm/TaskStack;->setAdjustedBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/TaskStack;->setAnimationBackground(Lcom/android/server/wm/WindowStateAnimator;I)V
+HPLcom/android/server/wm/TaskStack;->setTouchExcludeRegion(Lcom/android/server/wm/Task;ILandroid/graphics/Region;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/TaskStack;->shouldIgnoreInput()Z
+HPLcom/android/server/wm/TaskStack;->stepAppWindowsAnimation(J)V
+HPLcom/android/server/wm/TaskStack;->updateAdjustedBounds()V
+HPLcom/android/server/wm/TaskStack;->useCurrentBounds()Z
+HPLcom/android/server/wm/TaskTapPointerEventListener;->getDisplayId()I
+HPLcom/android/server/wm/TaskTapPointerEventListener;->onPointerEvent(Landroid/view/MotionEvent;)V
+HPLcom/android/server/wm/TaskTapPointerEventListener;->onPointerEvent(Landroid/view/MotionEvent;I)V
+HPLcom/android/server/wm/TaskTapPointerEventListener;->setTouchExcludeRegion(Landroid/graphics/Region;)V
+HPLcom/android/server/wm/TaskWindowContainerController;-><init>(ILcom/android/server/wm/TaskWindowContainerListener;Lcom/android/server/wm/StackWindowController;ILandroid/graphics/Rect;Landroid/content/res/Configuration;IZZZZLandroid/app/ActivityManager$TaskDescription;Lcom/android/server/wm/WindowManagerService;)V
+HPLcom/android/server/wm/TaskWindowContainerController;->getBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/TaskWindowContainerController;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V
+HPLcom/android/server/wm/UnknownAppVisibilityController;->notifyRelayouted(Lcom/android/server/wm/AppWindowToken;)V
+HPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->reset()V
+HPLcom/android/server/wm/WallpaperController;->adjustWallpaperWindows(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/WallpaperController;->adjustWallpaperWindowsForAppTransitionIfNeeded(Lcom/android/server/wm/DisplayContent;Landroid/util/ArraySet;)V
+HPLcom/android/server/wm/WallpaperController;->findWallpaperTarget(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/WallpaperController;->getAnimLayerAdjustment()I
+HPLcom/android/server/wm/WallpaperController;->getWallpaperTarget()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/WallpaperController;->hideWallpapers(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WallpaperController;->isWallpaperTarget(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/WallpaperController;->isWallpaperVisible()Z
+HPLcom/android/server/wm/WallpaperController;->isWallpaperVisible(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/WallpaperController;->lambda$-com_android_server_wm_WallpaperController_4687(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/WallpaperController;->updateWallpaperOffset(Lcom/android/server/wm/WindowState;IIZ)Z
+HPLcom/android/server/wm/WallpaperController;->updateWallpaperTokens(Z)V
+HPLcom/android/server/wm/WallpaperController;->updateWallpaperWindowsTarget(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;)V
+HPLcom/android/server/wm/WallpaperController;->wallpaperTransitionReady()Z
+HPLcom/android/server/wm/WallpaperVisibilityListeners;->notifyWallpaperVisibilityChanged(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/WallpaperWindowToken;->hasVisibleNotDrawnWallpaper()Z
+HPLcom/android/server/wm/WallpaperWindowToken;->hideWallpaperToken(ZLjava/lang/String;)V
+HPLcom/android/server/wm/WallpaperWindowToken;->updateWallpaperWindows(ZI)V
+HPLcom/android/server/wm/WindowAnimator;->animate(J)V
+HPLcom/android/server/wm/WindowAnimator;->cancelAnimation()V
+HPLcom/android/server/wm/WindowAnimator;->getDisplayContentsAnimatorLocked(I)Lcom/android/server/wm/WindowAnimator$DisplayContentsAnimator;
+HPLcom/android/server/wm/WindowAnimator;->getPendingLayoutChanges(I)I
+HPLcom/android/server/wm/WindowAnimator;->getScreenRotationAnimationLocked(I)Lcom/android/server/wm/ScreenRotationAnimation;
+HPLcom/android/server/wm/WindowAnimator;->lambda$-com_android_server_wm_WindowAnimator_3951(J)V
+HPLcom/android/server/wm/WindowAnimator;->orAnimating(Z)V
+HPLcom/android/server/wm/WindowAnimator;->scheduleAnimation()V
+HPLcom/android/server/wm/WindowAnimator;->setAnimating(Z)V
+HPLcom/android/server/wm/WindowAnimator;->setPendingLayoutChanges(II)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
+HPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->release()V
+HPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->setConsumer(Ljava/util/function/Consumer;)V
+HPLcom/android/server/wm/WindowContainer;->-get0(Lcom/android/server/wm/WindowContainer;)Landroid/util/Pools$SynchronizedPool;
+HPLcom/android/server/wm/WindowContainer;-><init>()V
+HPLcom/android/server/wm/WindowContainer;->addChild(Lcom/android/server/wm/WindowContainer;Ljava/util/Comparator;)V
+HPLcom/android/server/wm/WindowContainer;->checkAppWindowsReadyToShow()V
+HPLcom/android/server/wm/WindowContainer;->checkCompleteDeferredRemoval()Z
+HPLcom/android/server/wm/WindowContainer;->compareTo(Lcom/android/server/wm/WindowContainer;)I
+HPLcom/android/server/wm/WindowContainer;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+HPLcom/android/server/wm/WindowContainer;->forAllWindows(Ljava/util/function/Consumer;Z)V
+HPLcom/android/server/wm/WindowContainer;->getConfiguration()Landroid/content/res/Configuration;
+HPLcom/android/server/wm/WindowContainer;->getController()Lcom/android/server/wm/WindowContainerController;
+HPLcom/android/server/wm/WindowContainer;->getMergedOverrideConfiguration()Landroid/content/res/Configuration;
+HPLcom/android/server/wm/WindowContainer;->getOrientation()I
+HPLcom/android/server/wm/WindowContainer;->getOrientation(I)I
+HPLcom/android/server/wm/WindowContainer;->getParent()Lcom/android/server/wm/WindowContainer;
+HPLcom/android/server/wm/WindowContainer;->getParents(Ljava/util/LinkedList;)V
+HPLcom/android/server/wm/WindowContainer;->getTopChild()Lcom/android/server/wm/WindowContainer;
+HPLcom/android/server/wm/WindowContainer;->getWindow(Ljava/util/function/Predicate;)Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/WindowContainer;->hasContentToDisplay()Z
+HPLcom/android/server/wm/WindowContainer;->isAnimating()Z
+HPLcom/android/server/wm/WindowContainer;->isOnTop()Z
+HPLcom/android/server/wm/WindowContainer;->isVisible()Z
+HPLcom/android/server/wm/WindowContainer;->obtainConsumerWrapper(Ljava/util/function/Consumer;)Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;
+HPLcom/android/server/wm/WindowContainer;->onAppTransitionDone()V
+HPLcom/android/server/wm/WindowContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/WindowContainer;->onMergedOverrideConfigurationChanged()V
+HPLcom/android/server/wm/WindowContainer;->onOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/WindowContainer;->onParentSet()V
+HPLcom/android/server/wm/WindowContainer;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+HPLcom/android/server/wm/WindowContainer;->removeChild(Lcom/android/server/wm/WindowContainer;)V
+HPLcom/android/server/wm/WindowContainer;->removeImmediately()V
+HPLcom/android/server/wm/WindowContainer;->sendAppVisibilityToClients()V
+HPLcom/android/server/wm/WindowContainer;->setController(Lcom/android/server/wm/WindowContainerController;)V
+HPLcom/android/server/wm/WindowContainer;->setParent(Lcom/android/server/wm/WindowContainer;)V
+HPLcom/android/server/wm/WindowContainer;->setVisibleBeforeClientHidden()V
+HPLcom/android/server/wm/WindowContainer;->stepAppWindowsAnimation(J)V
+HPLcom/android/server/wm/WindowLayersController;->adjustSpecialWindows()V
+HPLcom/android/server/wm/WindowLayersController;->assignAnimLayer(Lcom/android/server/wm/WindowState;I)V
+HPLcom/android/server/wm/WindowLayersController;->assignWindowLayers(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/WindowLayersController;->collectSpecialWindows(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WindowLayersController;->lambda$-com_android_server_wm_WindowLayersController_3664(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WindowLayersController;->reset()V
+HPLcom/android/server/wm/WindowList;-><init>()V
+HPLcom/android/server/wm/WindowList;->peekLast()Ljava/lang/Object;
+HPLcom/android/server/wm/WindowManagerService$2;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/WindowManagerService$AppFreezeListener;->onAppFreezeTimeout()V
+HPLcom/android/server/wm/WindowManagerService$H;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/wm/WindowManagerService$LocalService;->computeWindowsForAccessibility()V
+HPLcom/android/server/wm/WindowManagerService$LocalService;->getCompatibleMagnificationSpecForWindow(Landroid/os/IBinder;)Landroid/view/MagnificationSpec;
+HPLcom/android/server/wm/WindowManagerService$LocalService;->isDockedDividerResizing()Z
+HPLcom/android/server/wm/WindowManagerService$LocalService;->isKeyguardShowingAndNotOccluded()Z
+HPLcom/android/server/wm/WindowManagerService$LocalService;->isStackVisible(I)Z
+HPLcom/android/server/wm/WindowManagerService$MousePositionTracker;->onPointerEvent(Landroid/view/MotionEvent;)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/InputChannel;)I
+HPLcom/android/server/wm/WindowManagerService;->applyAnimationLocked(Lcom/android/server/wm/AppWindowToken;Landroid/view/WindowManager$LayoutParams;IZZ)Z
+HPLcom/android/server/wm/WindowManagerService;->boostPriorityForLockedSection()V
+HPLcom/android/server/wm/WindowManagerService;->checkCallingPermission(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/wm/WindowManagerService;->checkDrawnWindowsLocked()V
+HPLcom/android/server/wm/WindowManagerService;->closeSurfaceTransaction()V
+HPLcom/android/server/wm/WindowManagerService;->containsDismissKeyguardWindow(Landroid/os/IBinder;)Z
+HPLcom/android/server/wm/WindowManagerService;->containsShowWhenLockedWindow(Landroid/os/IBinder;)Z
+HPLcom/android/server/wm/WindowManagerService;->continueSurfaceLayout()V
+HPLcom/android/server/wm/WindowManagerService;->createSurfaceControl(Landroid/view/Surface;ILcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowStateAnimator;)I
+HPLcom/android/server/wm/WindowManagerService;->deferSurfaceLayout()V
+HPLcom/android/server/wm/WindowManagerService;->destroyPreservedSurfaceLocked()V
+HPLcom/android/server/wm/WindowManagerService;->dipToPixel(ILandroid/util/DisplayMetrics;)I
+HPLcom/android/server/wm/WindowManagerService;->enableScreenIfNeededLocked()V
+HPLcom/android/server/wm/WindowManagerService;->excludeWindowTypeFromTapOutTask(I)Z
+HPLcom/android/server/wm/WindowManagerService;->executeAppTransition()V
+HPLcom/android/server/wm/WindowManagerService;->executeEmptyAnimationTransaction()V
+HPLcom/android/server/wm/WindowManagerService;->finishDrawingWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;)V
+HPLcom/android/server/wm/WindowManagerService;->getCurrentAnimatorScale()F
+HPLcom/android/server/wm/WindowManagerService;->getDefaultDisplayContentLocked()Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/WindowManagerService;->getImeFocusStackLocked()Lcom/android/server/wm/TaskStack;
+HPLcom/android/server/wm/WindowManagerService;->getInputMethodWindowLw()Landroid/view/WindowManagerPolicy$WindowState;
+HPLcom/android/server/wm/WindowManagerService;->getLidState()I
+HPLcom/android/server/wm/WindowManagerService;->getStableInsets(ILandroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowManagerService;->getStableInsetsLocked(ILandroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowManagerService;->getStackBounds(ILandroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowManagerService;->getTransitionAnimationScaleLocked()F
+HPLcom/android/server/wm/WindowManagerService;->getWindowDisplayFrame(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowManagerService;->handleAnimatingStoppedAndTransitionLocked()I
+HPLcom/android/server/wm/WindowManagerService;->inputMethodClientHasFocus(Lcom/android/internal/view/IInputMethodClient;)Z
+HPLcom/android/server/wm/WindowManagerService;->isCurrentProfileLocked(I)Z
+HPLcom/android/server/wm/WindowManagerService;->isKeyguardLocked()Z
+HPLcom/android/server/wm/WindowManagerService;->isKeyguardShowingAndNotOccluded()Z
+HPLcom/android/server/wm/WindowManagerService;->isScreenCaptureDisabledLocked(I)Z
+HPLcom/android/server/wm/WindowManagerService;->isSecureLocked(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/WindowManagerService;->isShowingDream()Z
+HPLcom/android/server/wm/WindowManagerService;->makeWindowFreezingScreenIfNeededLocked(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WindowManagerService;->markForSeamlessRotation(Lcom/android/server/wm/WindowState;Z)V
+HPLcom/android/server/wm/WindowManagerService;->monitor()V
+HPLcom/android/server/wm/WindowManagerService;->notifyAppRelaunchesCleared(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/WindowManagerService;->notifyAppResumedFinished(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/WindowManagerService;->notifyFocusChanged()V
+HPLcom/android/server/wm/WindowManagerService;->onRectangleOnScreenRequested(Landroid/os/IBinder;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/server/wm/WindowManagerService;->openSurfaceTransaction()V
+HPLcom/android/server/wm/WindowManagerService;->postWindowRemoveCleanupLocked(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WindowManagerService;->prepareAppTransition(IZ)V
+HPLcom/android/server/wm/WindowManagerService;->prepareAppTransition(IZIZ)V
+HPLcom/android/server/wm/WindowManagerService;->relayoutWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/util/MergedConfiguration;Landroid/view/Surface;)I
+HPLcom/android/server/wm/WindowManagerService;->removeWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;)V
+HPLcom/android/server/wm/WindowManagerService;->requestTraversal()V
+HPLcom/android/server/wm/WindowManagerService;->resetPriorityAfterLockedSection()V
+HPLcom/android/server/wm/WindowManagerService;->scheduleAnimationLocked()V
+HPLcom/android/server/wm/WindowManagerService;->setFocusTaskRegionLocked(Lcom/android/server/wm/AppWindowToken;)V
+HPLcom/android/server/wm/WindowManagerService;->setFocusedApp(Landroid/os/IBinder;Z)V
+HPLcom/android/server/wm/WindowManagerService;->setHoldScreenLocked(Lcom/android/server/wm/Session;)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;->setResizeDimLayer(ZIF)V
+HPLcom/android/server/wm/WindowManagerService;->statusBarVisibilityChanged(I)V
+HPLcom/android/server/wm/WindowManagerService;->stopFreezingDisplayLocked()V
+HPLcom/android/server/wm/WindowManagerService;->stopUsingSavedSurfaceLocked()V
+HPLcom/android/server/wm/WindowManagerService;->tryStartExitingAnimation(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowStateAnimator;ZZ)Z
+HPLcom/android/server/wm/WindowManagerService;->updateFocusedWindowLocked(IZ)Z
+HPLcom/android/server/wm/WindowManagerService;->updateNonSystemOverlayWindowsVisibilityIfNeeded(Lcom/android/server/wm/WindowState;Z)V
+HPLcom/android/server/wm/WindowManagerService;->updateOrientationFromAppTokens(Landroid/content/res/Configuration;Landroid/os/IBinder;I)Landroid/content/res/Configuration;
+HPLcom/android/server/wm/WindowManagerService;->updateOrientationFromAppTokensLocked(Landroid/content/res/Configuration;Landroid/os/IBinder;I)Landroid/content/res/Configuration;
+HPLcom/android/server/wm/WindowManagerService;->updateOrientationFromAppTokensLocked(ZI)Z
+HPLcom/android/server/wm/WindowManagerService;->updateStatusBarVisibilityLocked(I)Z
+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;
+HPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->boost()V
+HPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->reset()V
+HPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->setAppTransitionRunning(Z)V
+HPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->updatePriorityLocked()V
+HPLcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;->reset()V
+HPLcom/android/server/wm/WindowState$WindowId;-><init>(Lcom/android/server/wm/WindowState;)V
+HPLcom/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
+HPLcom/android/server/wm/WindowState;->addWinAnimatorToList(Ljava/util/ArrayList;)V
+HPLcom/android/server/wm/WindowState;->adjustStartingWindowFlags()V
+HPLcom/android/server/wm/WindowState;->applyAdjustForImeIfNeeded()V
+HPLcom/android/server/wm/WindowState;->applyDimLayerIfNeeded()V
+HPLcom/android/server/wm/WindowState;->applyGravityAndUpdateFrame(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowState;->applyInOrderWithImeWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
+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
+HPLcom/android/server/wm/WindowState;->canBeImeTarget()Z
+HPLcom/android/server/wm/WindowState;->canReceiveKeys()Z
+HPLcom/android/server/wm/WindowState;->canReceiveTouchInput()Z
+HPLcom/android/server/wm/WindowState;->canRestoreSurface()Z
+HPLcom/android/server/wm/WindowState;->checkPolicyVisibilityChange()V
+HPLcom/android/server/wm/WindowState;->clearHasSavedSurface()V
+HPLcom/android/server/wm/WindowState;->clearWasVisibleBeforeClientHidden()V
+HPLcom/android/server/wm/WindowState;->computeDragResizing()Z
+HPLcom/android/server/wm/WindowState;->computeFrameLw(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowState;->cropRegionToStackBoundsIfNeeded(Landroid/graphics/Region;)V
+HPLcom/android/server/wm/WindowState;->destroyOrSaveSurfaceUnchecked()V
+HPLcom/android/server/wm/WindowState;->destroySavedSurface()V
+HPLcom/android/server/wm/WindowState;->destroySurface(ZZ)Z
+HPLcom/android/server/wm/WindowState;->dispatchResized(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;ZI)V
+HPLcom/android/server/wm/WindowState;->dispatchWallpaperVisibility(Z)V
+HPLcom/android/server/wm/WindowState;->disposeInputChannel()V
+HPLcom/android/server/wm/WindowState;->expandForSurfaceInsets(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowState;->fillsDisplay()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
+HPLcom/android/server/wm/WindowState;->getAnimLayerAdjustment()I
+HPLcom/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;
+HPLcom/android/server/wm/WindowState;->getBaseType()I
+HPLcom/android/server/wm/WindowState;->getConfiguration()Landroid/content/res/Configuration;
+HPLcom/android/server/wm/WindowState;->getDimLayerUser()Lcom/android/server/wm/DimLayer$DimLayerUser;
+HPLcom/android/server/wm/WindowState;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/WindowState;->getDisplayFrameLw()Landroid/graphics/Rect;
+HPLcom/android/server/wm/WindowState;->getDisplayId()I
+HPLcom/android/server/wm/WindowState;->getDisplayInfo()Landroid/view/DisplayInfo;
+HPLcom/android/server/wm/WindowState;->getDrawnStateEvaluated()Z
+HPLcom/android/server/wm/WindowState;->getHighestAnimLayer()I
+HPLcom/android/server/wm/WindowState;->getInputDispatchingTimeoutNanos()J
+HPLcom/android/server/wm/WindowState;->getMergedConfiguration(Landroid/util/MergedConfiguration;)V
+HPLcom/android/server/wm/WindowState;->getName()Ljava/lang/String;
+HPLcom/android/server/wm/WindowState;->getNeedsMenuLw(Landroid/view/WindowManagerPolicy$WindowState;)Z
+HPLcom/android/server/wm/WindowState;->getOrientationChanging()Z
+HPLcom/android/server/wm/WindowState;->getParentWindow()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/WindowState;->getSpecialWindowAnimLayerAdjustment()I
+HPLcom/android/server/wm/WindowState;->getStack()Lcom/android/server/wm/TaskStack;
+HPLcom/android/server/wm/WindowState;->getStackId()I
+HPLcom/android/server/wm/WindowState;->getSurfaceLayer()I
+HPLcom/android/server/wm/WindowState;->getSystemUiVisibility()I
+HPLcom/android/server/wm/WindowState;->getTask()Lcom/android/server/wm/Task;
+HPLcom/android/server/wm/WindowState;->getTopParentWindow()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/WindowState;->getTouchableRegion(Landroid/graphics/Region;)V
+HPLcom/android/server/wm/WindowState;->getTouchableRegion(Landroid/graphics/Region;I)I
+HPLcom/android/server/wm/WindowState;->getWindow(Ljava/util/function/Predicate;)Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/WindowState;->getWindowInfo()Landroid/view/WindowInfo;
+HPLcom/android/server/wm/WindowState;->getWindowTag()Ljava/lang/CharSequence;
+HPLcom/android/server/wm/WindowState;->handleWindowMovedIfNeeded()V
+HPLcom/android/server/wm/WindowState;->hasContentToDisplay()Z
+HPLcom/android/server/wm/WindowState;->hasMoved()Z
+HPLcom/android/server/wm/WindowState;->hasSavedSurface()Z
+HPLcom/android/server/wm/WindowState;->hideLw(Z)Z
+HPLcom/android/server/wm/WindowState;->hideLw(ZZ)Z
+HPLcom/android/server/wm/WindowState;->hideNonSystemOverlayWindowsWhenVisible()Z
+HPLcom/android/server/wm/WindowState;->hideWallpaperWindow(ZLjava/lang/String;)V
+HPLcom/android/server/wm/WindowState;->inFreeformWorkspace()Z
+HPLcom/android/server/wm/WindowState;->inFullscreenContainer()Z
+HPLcom/android/server/wm/WindowState;->inPinnedWorkspace()Z
+HPLcom/android/server/wm/WindowState;->isAnimating()Z
+HPLcom/android/server/wm/WindowState;->isAnimatingInvisibleWithSavedSurface()Z
+HPLcom/android/server/wm/WindowState;->isAnimatingLw()Z
+HPLcom/android/server/wm/WindowState;->isAnimatingWithSavedSurface()Z
+HPLcom/android/server/wm/WindowState;->isChildWindow()Z
+HPLcom/android/server/wm/WindowState;->isConfigChanged()Z
+HPLcom/android/server/wm/WindowState;->isDefaultDisplay()Z
+HPLcom/android/server/wm/WindowState;->isDimming()Z
+HPLcom/android/server/wm/WindowState;->isDisplayedLw()Z
+HPLcom/android/server/wm/WindowState;->isDockedResizing()Z
+HPLcom/android/server/wm/WindowState;->isDragResizeChanged()Z
+HPLcom/android/server/wm/WindowState;->isDragResizing()Z
+HPLcom/android/server/wm/WindowState;->isDrawnLw()Z
+HPLcom/android/server/wm/WindowState;->isFocused()Z
+HPLcom/android/server/wm/WindowState;->isGoneForLayoutLw()Z
+HPLcom/android/server/wm/WindowState;->isHiddenFromUserLocked()Z
+HPLcom/android/server/wm/WindowState;->isInMultiWindowMode()Z
+HPLcom/android/server/wm/WindowState;->isInputMethodWindow()Z
+HPLcom/android/server/wm/WindowState;->isInteresting()Z
+HPLcom/android/server/wm/WindowState;->isLaidOut()Z
+HPLcom/android/server/wm/WindowState;->isLetterboxedAppWindow()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;->isParentWindowHidden()Z
+HPLcom/android/server/wm/WindowState;->isReadyForDisplay()Z
+HPLcom/android/server/wm/WindowState;->isResizedWhileNotDragResizing()Z
+HPLcom/android/server/wm/WindowState;->isResizedWhileNotDragResizingReported()Z
+HPLcom/android/server/wm/WindowState;->isRtl()Z
+HPLcom/android/server/wm/WindowState;->isVisible()Z
+HPLcom/android/server/wm/WindowState;->isVisibleLw()Z
+HPLcom/android/server/wm/WindowState;->isVisibleNow()Z
+HPLcom/android/server/wm/WindowState;->isVisibleOrAdding()Z
+HPLcom/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;->logPerformShow(Ljava/lang/String;)V
+HPLcom/android/server/wm/WindowState;->markSavedSurfaceExiting()V
+HPLcom/android/server/wm/WindowState;->mightAffectAllDrawn(Z)Z
+HPLcom/android/server/wm/WindowState;->onAppVisibilityChanged(ZZ)Z
+HPLcom/android/server/wm/WindowState;->onExitAnimationDone()V
+HPLcom/android/server/wm/WindowState;->onParentSet()V
+HPLcom/android/server/wm/WindowState;->openInputChannel(Landroid/view/InputChannel;)V
+HPLcom/android/server/wm/WindowState;->performShowLocked()Z
+HPLcom/android/server/wm/WindowState;->prelayout()V
+HPLcom/android/server/wm/WindowState;->prepareWindowToDisplayDuringRelayout(Z)V
+HPLcom/android/server/wm/WindowState;->relayoutVisibleWindow(III)I
+HPLcom/android/server/wm/WindowState;->removeIfPossible(Z)V
+HPLcom/android/server/wm/WindowState;->removeImmediately()V
+HPLcom/android/server/wm/WindowState;->removeReplacedWindowIfNeeded(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/WindowState;->reportFocusChangedSerialized(ZZ)V
+HPLcom/android/server/wm/WindowState;->reportResized()V
+HPLcom/android/server/wm/WindowState;->requestUpdateWallpaperIfNeeded()V
+HPLcom/android/server/wm/WindowState;->restoreSavedSurface()Z
+HPLcom/android/server/wm/WindowState;->scheduleAnimationIfDimming()V
+HPLcom/android/server/wm/WindowState;->sendAppVisibilityToClients()V
+HPLcom/android/server/wm/WindowState;->setDisplayLayoutNeeded()V
+HPLcom/android/server/wm/WindowState;->setDrawnStateEvaluated(Z)V
+HPLcom/android/server/wm/WindowState;->setHasSurface(Z)V
+HPLcom/android/server/wm/WindowState;->setReplacementWindowIfNeeded(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/WindowState;->setReportResizeHints()Z
+HPLcom/android/server/wm/WindowState;->setReportedConfiguration(Landroid/util/MergedConfiguration;)V
+HPLcom/android/server/wm/WindowState;->setRequestedSize(II)V
+HPLcom/android/server/wm/WindowState;->setVisibleBeforeClientHidden()V
+HPLcom/android/server/wm/WindowState;->setWindowScale(II)V
+HPLcom/android/server/wm/WindowState;->shouldSaveSurface()Z
+HPLcom/android/server/wm/WindowState;->showLw(Z)Z
+HPLcom/android/server/wm/WindowState;->showLw(ZZ)Z
+HPLcom/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;->updateLastInsetValues()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;->usesRelativeZOrdering()Z
+HPLcom/android/server/wm/WindowState;->wouldBeVisibleIfPolicyIgnored()Z
+HPLcom/android/server/wm/WindowStateAnimator;-><init>(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WindowStateAnimator;->adjustCropToStackBounds(Landroid/graphics/Rect;Z)V
+HPLcom/android/server/wm/WindowStateAnimator;->applyAnimationLocked(IZ)Z
+HPLcom/android/server/wm/WindowStateAnimator;->applyCrop(Landroid/graphics/Rect;Landroid/graphics/Rect;Z)V
+HPLcom/android/server/wm/WindowStateAnimator;->applyEnterAnimationLocked()V
+HPLcom/android/server/wm/WindowStateAnimator;->calculateCrop(Landroid/graphics/Rect;)Z
+HPLcom/android/server/wm/WindowStateAnimator;->calculateFinalCrop(Landroid/graphics/Rect;)Z
+HPLcom/android/server/wm/WindowStateAnimator;->calculateSurfaceBounds(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;)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;
+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
+HPLcom/android/server/wm/WindowStateAnimator;->finishDrawingLocked()Z
+HPLcom/android/server/wm/WindowStateAnimator;->getAnimationFrameTime(Landroid/view/animation/Animation;J)J
+HPLcom/android/server/wm/WindowStateAnimator;->getLayerStack()I
+HPLcom/android/server/wm/WindowStateAnimator;->getMagnificationSpec()Landroid/view/MagnificationSpec;
+HPLcom/android/server/wm/WindowStateAnimator;->getShown()Z
+HPLcom/android/server/wm/WindowStateAnimator;->hasSurface()Z
+HPLcom/android/server/wm/WindowStateAnimator;->hide(Ljava/lang/String;)V
+HPLcom/android/server/wm/WindowStateAnimator;->isAnimationSet()Z
+HPLcom/android/server/wm/WindowStateAnimator;->isAnimationStarting()Z
+HPLcom/android/server/wm/WindowStateAnimator;->isDummyAnimation()Z
+HPLcom/android/server/wm/WindowStateAnimator;->isForceScaled()Z
+HPLcom/android/server/wm/WindowStateAnimator;->isWaitingForOpening()Z
+HPLcom/android/server/wm/WindowStateAnimator;->isWindowAnimationSet()Z
+HPLcom/android/server/wm/WindowStateAnimator;->prepareSurfaceLocked(Z)V
+HPLcom/android/server/wm/WindowStateAnimator;->resetDrawState()V
+HPLcom/android/server/wm/WindowStateAnimator;->resolveStackClip()I
+HPLcom/android/server/wm/WindowStateAnimator;->setAnimation(Landroid/view/animation/Animation;JI)V
+HPLcom/android/server/wm/WindowStateAnimator;->setSurfaceBoundariesLocked(Z)V
+HPLcom/android/server/wm/WindowStateAnimator;->shouldCropToStackBounds()Z
+HPLcom/android/server/wm/WindowStateAnimator;->showSurfaceRobustlyLocked()Z
+HPLcom/android/server/wm/WindowStateAnimator;->stepAnimation(J)Z
+HPLcom/android/server/wm/WindowStateAnimator;->stepAnimationLocked(J)Z
+HPLcom/android/server/wm/WindowStateAnimator;->useFinalClipRect()Z
+HPLcom/android/server/wm/WindowSurfaceController;-><init>(Landroid/view/SurfaceSession;Ljava/lang/String;IIIILcom/android/server/wm/WindowStateAnimator;II)V
+HPLcom/android/server/wm/WindowSurfaceController;->clearCropInTransaction(Z)V
+HPLcom/android/server/wm/WindowSurfaceController;->destroyInTransaction()V
+HPLcom/android/server/wm/WindowSurfaceController;->detachChildren()V
+HPLcom/android/server/wm/WindowSurfaceController;->getHeight()F
+HPLcom/android/server/wm/WindowSurfaceController;->getShown()Z
+HPLcom/android/server/wm/WindowSurfaceController;->getSurface(Landroid/view/Surface;)V
+HPLcom/android/server/wm/WindowSurfaceController;->getWidth()F
+HPLcom/android/server/wm/WindowSurfaceController;->hasSurface()Z
+HPLcom/android/server/wm/WindowSurfaceController;->hideInTransaction(Ljava/lang/String;)V
+HPLcom/android/server/wm/WindowSurfaceController;->hideSurface()V
+HPLcom/android/server/wm/WindowSurfaceController;->prepareToShowInTransaction(FFFFFZ)Z
+HPLcom/android/server/wm/WindowSurfaceController;->setCropInTransaction(Landroid/graphics/Rect;Z)V
+HPLcom/android/server/wm/WindowSurfaceController;->setFinalCropInTransaction(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowSurfaceController;->setLayer(I)V
+HPLcom/android/server/wm/WindowSurfaceController;->setLayerStackInTransaction(I)V
+HPLcom/android/server/wm/WindowSurfaceController;->setMatrixInTransaction(FFFFZ)V
+HPLcom/android/server/wm/WindowSurfaceController;->setPositionInTransaction(FFZ)V
+HPLcom/android/server/wm/WindowSurfaceController;->setShown(Z)V
+HPLcom/android/server/wm/WindowSurfaceController;->setSizeInTransaction(IIZ)Z
+HPLcom/android/server/wm/WindowSurfaceController;->showRobustlyInTransaction()Z
+HPLcom/android/server/wm/WindowSurfaceController;->showSurface()Z
+HPLcom/android/server/wm/WindowSurfaceController;->updateVisibility()Z
+HPLcom/android/server/wm/WindowSurfacePlacer;->canBeWallpaperTarget(Landroid/util/ArraySet;)Z
+HPLcom/android/server/wm/WindowSurfacePlacer;->continueLayout()V
+HPLcom/android/server/wm/WindowSurfacePlacer;->deferLayout()V
+HPLcom/android/server/wm/WindowSurfacePlacer;->destroyPendingSurfaces()V
+HPLcom/android/server/wm/WindowSurfacePlacer;->handleAppTransitionReadyLocked()I
+HPLcom/android/server/wm/WindowSurfacePlacer;->handleClosingApps(ILandroid/view/WindowManager$LayoutParams;ZLcom/android/server/wm/WindowSurfacePlacer$LayerAndToken;)V
+HPLcom/android/server/wm/WindowSurfacePlacer;->handleOpeningApps(ILandroid/view/WindowManager$LayoutParams;ZI)Lcom/android/server/wm/AppWindowToken;
+HPLcom/android/server/wm/WindowSurfacePlacer;->isLayoutDeferred()Z
+HPLcom/android/server/wm/WindowSurfacePlacer;->lambda$-com_android_server_wm_WindowSurfacePlacer_5337()V
+HPLcom/android/server/wm/WindowSurfacePlacer;->maybeUpdateTransitToWallpaper(IZZ)I
+HPLcom/android/server/wm/WindowSurfacePlacer;->performSurfacePlacement()V
+HPLcom/android/server/wm/WindowSurfacePlacer;->performSurfacePlacement(Z)V
+HPLcom/android/server/wm/WindowSurfacePlacer;->performSurfacePlacementLoop()V
+HPLcom/android/server/wm/WindowSurfacePlacer;->requestTraversal()V
+HPLcom/android/server/wm/WindowSurfacePlacer;->transitionGoodToGo(ILandroid/util/SparseIntArray;)Z
+HPLcom/android/server/wm/WindowToken;->addWindow(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WindowToken;->getAnimLayerAdjustment()I
+HPLcom/android/server/wm/WindowToken;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/WindowToken;->getHighestAnimLayer()I
+HPLcom/android/server/wm/WindowToken;->getReplacingWindow()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/WindowToken;->okToAnimate()Z
+HPLcom/android/server/wm/WindowToken;->okToDisplay()Z
+HPLcom/android/server/wm/WindowToken;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/WindowToken;->windowsCanBeWallpaperTarget()Z
+HPLcom/android/server/wm/animation/ClipRectLRAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
+HPLcom/android/server/wm/animation/ClipRectTBAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
+HPLcom/android/server/wm/animation/ClipRectTBAnimation;->getTransformation(JLandroid/view/animation/Transformation;)Z
+HSLcom/android/server/location/LocationProviderInterface;->disable()V
+HSLcom/android/server/location/LocationProviderInterface;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HSLcom/android/server/location/LocationProviderInterface;->enable()V
+HSLcom/android/server/location/LocationProviderInterface;->getName()Ljava/lang/String;
+HSLcom/android/server/location/LocationProviderInterface;->getProperties()Lcom/android/internal/location/ProviderProperties;
+HSLcom/android/server/location/LocationProviderInterface;->getStatus(Landroid/os/Bundle;)I
+HSLcom/android/server/location/LocationProviderInterface;->getStatusUpdateTime()J
+HSLcom/android/server/location/LocationProviderInterface;->isEnabled()Z
+HSLcom/android/server/location/LocationProviderInterface;->sendExtraCommand(Ljava/lang/String;Landroid/os/Bundle;)Z
+HSLcom/android/server/location/LocationProviderInterface;->setRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
+HSPLcom/android/server/AppOpsService$Op;-><init>(ILjava/lang/String;I)V
+HSPLcom/android/server/AppOpsService;->getUidStateLocked(IZ)Lcom/android/server/AppOpsService$UidState;
+HSPLcom/android/server/AppOpsService;->readPackage(Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLcom/android/server/AppOpsService;->readState()V
+HSPLcom/android/server/AppOpsService;->readUid(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)V
+HSPLcom/android/server/AppOpsService;->startWatchingMode(ILjava/lang/String;Lcom/android/internal/app/IAppOpsCallback;)V
+HSPLcom/android/server/IntentResolver;->addFilter(Landroid/content/IntentFilter;)V
+HSPLcom/android/server/IntentResolver;->addFilter(Landroid/util/ArrayMap;Ljava/lang/String;Landroid/content/IntentFilter;)V
+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;
+HSPLcom/android/server/IntentResolver;->filterEquals(Landroid/content/IntentFilter;Landroid/content/IntentFilter;)Z
+HSPLcom/android/server/IntentResolver;->filterResults(Ljava/util/List;)V
+HSPLcom/android/server/IntentResolver;->findFilters(Landroid/content/IntentFilter;)Ljava/util/ArrayList;
+HSPLcom/android/server/IntentResolver;->getFastIntentCategories(Landroid/content/Intent;)Landroid/util/FastImmutableArraySet;
+HSPLcom/android/server/IntentResolver;->queryIntent(Landroid/content/Intent;Ljava/lang/String;ZI)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
+HSPLcom/android/server/RescueParty$Threshold;->getCount()I
+HSPLcom/android/server/RescueParty$Threshold;->getStart()J
+HSPLcom/android/server/RescueParty$Threshold;->setCount(I)V
+HSPLcom/android/server/RescueParty$Threshold;->setStart(J)V
+HSPLcom/android/server/SystemServer;->traceBeginAndSlog(Ljava/lang/String;)V
+HSPLcom/android/server/SystemServer;->traceEnd()V
+HSPLcom/android/server/SystemService;->getContext()Landroid/content/Context;
+HSPLcom/android/server/SystemServiceManager;->startBootPhase(I)V
+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;->warnIfTooLong(JLcom/android/server/SystemService;Ljava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService$4;->run()V
+HSPLcom/android/server/am/BatteryExternalStatsWorker$1;->run()V
+HSPLcom/android/server/am/BatteryExternalStatsWorker;->awaitControllerInfo(Landroid/os/SynchronousResultReceiver;)Landroid/os/Parcelable;
+HSPLcom/android/server/am/BatteryExternalStatsWorker;->updateExternalStatsLocked(Ljava/lang/String;I)V
+HSPLcom/android/server/am/BatteryStatsService;->getActiveStatistics()Lcom/android/internal/os/BatteryStatsImpl;
+HSPLcom/android/server/am/ConfigurationContainer;-><init>()V
+HSPLcom/android/server/am/ConfigurationContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/am/ProcessList;->getMemLevel(I)J
+HSPLcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/display/DisplayAdapter$Listener;->onDisplayDeviceEvent(Lcom/android/server/display/DisplayDevice;I)V
+HSPLcom/android/server/display/DisplayAdapter$Listener;->onTraversalRequested()V
+HSPLcom/android/server/display/DisplayDevice;->getDisplayDeviceInfoLocked()Lcom/android/server/display/DisplayDeviceInfo;
+HSPLcom/android/server/display/DisplayDevice;->getDisplayTokenLocked()Landroid/os/IBinder;
+HSPLcom/android/server/display/DisplayDevice;->hasStableUniqueId()Z
+HSPLcom/android/server/display/DisplayManagerService$BinderService;->getDisplayInfo(I)Landroid/view/DisplayInfo;
+HSPLcom/android/server/display/DisplayManagerService$BinderService;->registerCallback(Landroid/hardware/display/IDisplayManagerCallback;)V
+HSPLcom/android/server/display/DisplayManagerService$CallbackRecord;-><init>(Lcom/android/server/display/DisplayManagerService;ILandroid/hardware/display/IDisplayManagerCallback;)V
+HSPLcom/android/server/display/DisplayManagerService;->-wrap19(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/display/IDisplayManagerCallback;I)V
+HSPLcom/android/server/display/DisplayManagerService;->-wrap3(Lcom/android/server/display/DisplayManagerService;II)Landroid/view/DisplayInfo;
+HSPLcom/android/server/display/DisplayManagerService;->deliverDisplayEvent(II)V
+HSPLcom/android/server/display/DisplayManagerService;->getDisplayInfoInternal(II)Landroid/view/DisplayInfo;
+HSPLcom/android/server/display/DisplayManagerService;->registerCallbackInternal(Landroid/hardware/display/IDisplayManagerCallback;I)V
+HSPLcom/android/server/display/DisplayManagerService;->updateDisplayStateLocked(Lcom/android/server/display/DisplayDevice;)Ljava/lang/Runnable;
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;-><init>(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;IIZIILandroid/os/IBinder;)V
+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;->-get0(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;)Lcom/android/server/lights/Light;
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getDisplayDeviceInfoLocked()Lcom/android/server/display/DisplayDeviceInfo;
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->requestDisplayStateLocked(II)Ljava/lang/Runnable;
+HSPLcom/android/server/display/LogicalDisplay;->getDisplayInfoLocked()Landroid/view/DisplayInfo;
+HSPLcom/android/server/display/VirtualDisplayAdapter$SurfaceControlDisplayFactory;->createDisplay(Ljava/lang/String;Z)Landroid/os/IBinder;
+HSPLcom/android/server/firewall/IntentFirewall$AMSInterface;->checkComponentPermission(Ljava/lang/String;IIIZ)I
+HSPLcom/android/server/firewall/IntentFirewall$AMSInterface;->getAMSLock()Ljava/lang/Object;
+HSPLcom/android/server/lights/Light;->pulse()V
+HSPLcom/android/server/lights/Light;->pulse(II)V
+HSPLcom/android/server/lights/Light;->setBrightness(I)V
+HSPLcom/android/server/lights/Light;->setBrightness(II)V
+HSPLcom/android/server/lights/Light;->setColor(I)V
+HSPLcom/android/server/lights/Light;->setFlashing(IIII)V
+HSPLcom/android/server/lights/Light;->setVrMode(Z)V
+HSPLcom/android/server/lights/Light;->turnOff()V
+HSPLcom/android/server/lights/LightsManager;->getLight(I)Lcom/android/server/lights/Light;
+HSPLcom/android/server/lights/LightsService$LightImpl;->setBrightness(I)V
+HSPLcom/android/server/lights/LightsService$LightImpl;->setBrightness(II)V
+HSPLcom/android/server/lights/LightsService$LightImpl;->setLightLocked(IIIII)V
+HSPLcom/android/server/lights/LightsService$LightImpl;->shouldBeInLowPersistenceMode()Z
+HSPLcom/android/server/pm/-$Lambda$i1ZZeLvwPPAZVBl_nnQ0C2t5oMs;->$m$2()V
+HSPLcom/android/server/pm/-$Lambda$i1ZZeLvwPPAZVBl_nnQ0C2t5oMs;-><init>(BILjava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/pm/-$Lambda$i1ZZeLvwPPAZVBl_nnQ0C2t5oMs;->run()V
+HSPLcom/android/server/pm/BasePermission;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/BasePermission;->computeGids(I)[I
+HSPLcom/android/server/pm/BasePermission;->isRuntimeOnly()Z
+HSPLcom/android/server/pm/Installer;->checkBeforeRemote()Z
+HSPLcom/android/server/pm/Installer;->createAppData(Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;I)J
+HSPLcom/android/server/pm/InstructionSets;->getPreferredInstructionSet()Ljava/lang/String;
+HSPLcom/android/server/pm/InstructionSets;->getPrimaryInstructionSet(Landroid/content/pm/ApplicationInfo;)Ljava/lang/String;
+HSPLcom/android/server/pm/KeySetManagerService$PublicKeyHandle;->getKey()Ljava/security/PublicKey;
+HSPLcom/android/server/pm/KeySetManagerService;->addRefCountsFromSavedPackagesLPw(Landroid/util/ArrayMap;)V
+HSPLcom/android/server/pm/KeySetManagerService;->addScannedPackageLPw(Landroid/content/pm/PackageParser$Package;)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/PackageParser$Package;)V
+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;->readKeysLPw(Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLcom/android/server/pm/KeySetManagerService;->readPublicKeyLPw(Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLcom/android/server/pm/PackageInstallerService;->isStageName(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/PackageKeySetData;-><init>()V
+HSPLcom/android/server/pm/PackageKeySetData;->getAliases()Landroid/util/ArrayMap;
+HSPLcom/android/server/pm/PackageKeySetData;->getProperSigningKeySet()J
+HSPLcom/android/server/pm/PackageKeySetData;->isUsingUpgradeKeySets()Z
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver$ActionIterGenerator;-><init>(Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver;)V
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver$ActionIterGenerator;->generate(Landroid/content/pm/PackageParser$ActivityIntentInfo;)Ljava/util/Iterator;
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver$IterGenerator;-><init>(Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver;)V
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->addActivity(Landroid/content/pm/PackageParser$Activity;Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->adjustPriority(Ljava/util/List;Landroid/content/pm/PackageParser$ActivityIntentInfo;)V
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->allowFilterResult(Landroid/content/IntentFilter;Ljava/util/List;)Z
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->allowFilterResult(Landroid/content/pm/PackageParser$ActivityIntentInfo;Ljava/util/List;)Z
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->findMatchingActivity(Ljava/util/List;Landroid/content/pm/ActivityInfo;)Landroid/content/pm/PackageParser$Activity;
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->getIntentListSubset(Ljava/util/List;Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver$IterGenerator;Ljava/util/Iterator;)V
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->isProtectedAction(Landroid/content/pm/PackageParser$ActivityIntentInfo;)Z
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->newArray(I)[Landroid/content/IntentFilter;
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->newArray(I)[Landroid/content/pm/PackageParser$ActivityIntentInfo;
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->newResult(Landroid/content/IntentFilter;II)Ljava/lang/Object;
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->newResult(Landroid/content/pm/PackageParser$ActivityIntentInfo;II)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->queryIntent(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;->sortResults(Ljava/util/List;)V
+HSPLcom/android/server/pm/PackageManagerService$PackageParserCallback;->getOverlayApks(Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService$PackageParserCallback;->getStaticOverlayPackagesLocked(Ljava/util/Collection;Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerService$PackageParserCallback;->getStaticOverlayPathsLocked(Ljava/util/Collection;Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService$ParallelPackageParserCallback;->getStaticOverlayPaths(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService$ProviderIntentResolver;->addProvider(Landroid/content/pm/PackageParser$Provider;)V
+HSPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->addService(Landroid/content/pm/PackageParser$Service;)V
+HSPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->newArray(I)[Landroid/content/IntentFilter;
+HSPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;->newArray(I)[Landroid/content/pm/PackageParser$ServiceIntentInfo;
+HSPLcom/android/server/pm/PackageManagerService;->-get13()Ljava/util/Comparator;
+HSPLcom/android/server/pm/PackageManagerService;->-wrap13(Lcom/android/server/pm/PackageManagerService;I)Z
+HSPLcom/android/server/pm/PackageManagerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/Installer;ZZ)V
+HSPLcom/android/server/pm/PackageManagerService;->addSharedLibrariesLPw(Ljava/util/List;[I[[Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/PackageParser$Package;ZILandroid/util/ArraySet;)Landroid/util/ArraySet;
+HSPLcom/android/server/pm/PackageManagerService;->adjustCpuAbisForSharedUserLPw(Ljava/util/Set;Landroid/content/pm/PackageParser$Package;)V
+HSPLcom/android/server/pm/PackageManagerService;->applyPolicy(Landroid/content/pm/PackageParser$Package;I)V
+HSPLcom/android/server/pm/PackageManagerService;->applyPostResolutionFilter(Ljava/util/List;Ljava/lang/String;ZII)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerService;->assertPackageIsValid(Landroid/content/pm/PackageParser$Package;II)V
+HSPLcom/android/server/pm/PackageManagerService;->assertPackageKnownAndInstalled(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/PackageManagerService;->collectCertificatesLI(Lcom/android/server/pm/PackageSetting;Landroid/content/pm/PackageParser$Package;Ljava/io/File;I)V
+HSPLcom/android/server/pm/PackageManagerService;->commitPackageSettings(Landroid/content/pm/PackageParser$Package;Lcom/android/server/pm/PackageSetting;Landroid/os/UserHandle;IZ)V
+HSPLcom/android/server/pm/PackageManagerService;->compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
+HSPLcom/android/server/pm/PackageManagerService;->compressedFileExists(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/PackageManagerService;->deriveAbiOverride(Ljava/lang/String;Lcom/android/server/pm/PackageSetting;)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->enforceCrossUserPermission(IIZZLjava/lang/String;)V
+HSPLcom/android/server/pm/PackageManagerService;->filterIfNotSystemUser(Ljava/util/List;I)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerService;->findPermissionTreeLP(Ljava/lang/String;)Lcom/android/server/pm/BasePermission;
+HSPLcom/android/server/pm/PackageManagerService;->fixProcessName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->getCompressedFiles(Ljava/lang/String;)[Ljava/io/File;
+HSPLcom/android/server/pm/PackageManagerService;->getDefaultBrowserPackageName(I)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->getInstantAppPackageName(I)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->getLastModifiedTime(Landroid/content/pm/PackageParser$Package;Ljava/io/File;)J
+HSPLcom/android/server/pm/PackageManagerService;->getMatchingCrossProfileIntentFilters(Landroid/content/Intent;Ljava/lang/String;I)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerService;->getSettingsVersionForPackage(Landroid/content/pm/PackageParser$Package;)Lcom/android/server/pm/Settings$VersionInfo;
+HSPLcom/android/server/pm/PackageManagerService;->getSharedLibraryEntryLPr(Ljava/lang/String;I)Lcom/android/server/pm/PackageManagerService$SharedLibraryEntry;
+HSPLcom/android/server/pm/PackageManagerService;->getVolumeUuidForPackage(Landroid/content/pm/PackageParser$Package;)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->grantPermissionsLPw(Landroid/content/pm/PackageParser$Package;ZLjava/lang/String;)V
+HSPLcom/android/server/pm/PackageManagerService;->grantSignaturePermission(Ljava/lang/String;Landroid/content/pm/PackageParser$Package;Lcom/android/server/pm/BasePermission;Lcom/android/server/pm/PermissionsState;)Z
+HSPLcom/android/server/pm/PackageManagerService;->hasNonNegativePriority(Ljava/util/List;)Z
+HSPLcom/android/server/pm/PackageManagerService;->hasWebURI(Landroid/content/Intent;)Z
+HSPLcom/android/server/pm/PackageManagerService;->isCompatSignatureUpdateNeeded(Landroid/content/pm/PackageParser$Package;)Z
+HSPLcom/android/server/pm/PackageManagerService;->isEphemeralDisabled()Z
+HSPLcom/android/server/pm/PackageManagerService;->isExternal(Landroid/content/pm/PackageParser$Package;)Z
+HSPLcom/android/server/pm/PackageManagerService;->isInstantAppAllowed(Landroid/content/Intent;Ljava/util/List;IZ)Z
+HSPLcom/android/server/pm/PackageManagerService;->isNewPlatformPermissionForPackage(Ljava/lang/String;Landroid/content/pm/PackageParser$Package;)Z
+HSPLcom/android/server/pm/PackageManagerService;->isPrivilegedApp(Landroid/content/pm/PackageParser$Package;)Z
+HSPLcom/android/server/pm/PackageManagerService;->isRecoverSignatureUpdateNeeded(Landroid/content/pm/PackageParser$Package;)Z
+HSPLcom/android/server/pm/PackageManagerService;->isSystemApp(Landroid/content/pm/PackageParser$Package;)Z
+HSPLcom/android/server/pm/PackageManagerService;->isSystemApp(Lcom/android/server/pm/PackageSetting;)Z
+HSPLcom/android/server/pm/PackageManagerService;->isUpdatedSystemApp(Lcom/android/server/pm/PackageSetting;)Z
+HSPLcom/android/server/pm/PackageManagerService;->lambda$-com_android_server_pm_PackageManagerService_140173(Ljava/util/List;I)V
+HSPLcom/android/server/pm/PackageManagerService;->maybeMigrateAppDataLIF(Landroid/content/pm/PackageParser$Package;I)Z
+HSPLcom/android/server/pm/PackageManagerService;->normalizePackageNameLPr(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService;->prepareAppDataAndMigrateLIF(Landroid/content/pm/PackageParser$Package;IIZ)V
+HSPLcom/android/server/pm/PackageManagerService;->prepareAppDataContentsLeafLIF(Landroid/content/pm/PackageParser$Package;II)V
+HSPLcom/android/server/pm/PackageManagerService;->prepareAppDataLIF(Landroid/content/pm/PackageParser$Package;II)V
+HSPLcom/android/server/pm/PackageManagerService;->prepareAppDataLeafLIF(Landroid/content/pm/PackageParser$Package;II)V
+HSPLcom/android/server/pm/PackageManagerService;->queryCrossProfileIntents(Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;IIZ)Landroid/content/pm/ResolveInfo;
+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;
+HSPLcom/android/server/pm/PackageManagerService;->querySkipCurrentProfileIntents(Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PackageManagerService;->reconcileAppsDataLI(Ljava/lang/String;IIZZ)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerService;->scanDirLI(Ljava/io/File;IIJ)V
+HSPLcom/android/server/pm/PackageManagerService;->scanPackageDirtyLI(Landroid/content/pm/PackageParser$Package;IIJLandroid/os/UserHandle;)Landroid/content/pm/PackageParser$Package;
+HSPLcom/android/server/pm/PackageManagerService;->scanPackageInternalLI(Landroid/content/pm/PackageParser$Package;Ljava/io/File;IIJLandroid/os/UserHandle;)Landroid/content/pm/PackageParser$Package;
+HSPLcom/android/server/pm/PackageManagerService;->scanPackageLI(Landroid/content/pm/PackageParser$Package;IIJLandroid/os/UserHandle;)Landroid/content/pm/PackageParser$Package;
+HSPLcom/android/server/pm/PackageManagerService;->scanPackageLI(Landroid/content/pm/PackageParser$Package;Ljava/io/File;IIJLandroid/os/UserHandle;)Landroid/content/pm/PackageParser$Package;
+HSPLcom/android/server/pm/PackageManagerService;->setNativeLibraryPaths(Landroid/content/pm/PackageParser$Package;Ljava/io/File;)V
+HSPLcom/android/server/pm/PackageManagerService;->shouldCheckUpgradeKeySetLP(Lcom/android/server/pm/PackageSetting;I)Z
+HSPLcom/android/server/pm/PackageManagerService;->updateAllSharedLibrariesLPw(Landroid/content/pm/PackageParser$Package;)Ljava/util/ArrayList;
+HSPLcom/android/server/pm/PackageManagerService;->updateFlags(II)I
+HSPLcom/android/server/pm/PackageManagerService;->updateFlagsForComponent(IILjava/lang/Object;)I
+HSPLcom/android/server/pm/PackageManagerService;->updateFlagsForResolve(IILandroid/content/Intent;IZZ)I
+HSPLcom/android/server/pm/PackageManagerService;->updatePermissionsLPw(Ljava/lang/String;Landroid/content/pm/PackageParser$Package;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/PackageManagerService;->updateSharedLibrariesLPr(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageParser$Package;)V
+HSPLcom/android/server/pm/PackageManagerService;->userNeedsBadging(I)Z
+HSPLcom/android/server/pm/PackageManagerService;->verifySignaturesLP(Lcom/android/server/pm/PackageSetting;Landroid/content/pm/PackageParser$Package;)V
+HSPLcom/android/server/pm/PackageManagerServiceCompilerMapping;->getAndCheckValidity(I)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerServiceCompilerMapping;->getSystemPropertyName(I)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageSender;->sendPackageAddedForNewUsers(Ljava/lang/String;ZZI[I)V
+HSPLcom/android/server/pm/PackageSender;->sendPackageBroadcast(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[I)V
+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;IIILjava/lang/String;Ljava/util/List;I[Ljava/lang/String;[I)V
+HSPLcom/android/server/pm/PackageSetting;->getPermissionsState()Lcom/android/server/pm/PermissionsState;
+HSPLcom/android/server/pm/PackageSetting;->isPrivileged()Z
+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;IIILjava/lang/String;Ljava/util/List;[Ljava/lang/String;[I)V
+HSPLcom/android/server/pm/PackageSettingBase;->doCopy(Lcom/android/server/pm/PackageSettingBase;)V
+HSPLcom/android/server/pm/PackageSettingBase;->getInstalled(I)Z
+HSPLcom/android/server/pm/PackageSettingBase;->getInstantApp(I)Z
+HSPLcom/android/server/pm/PackageSettingBase;->getNotInstalledUserIds()[I
+HSPLcom/android/server/pm/PackageSettingBase;->getVirtulalPreload(I)Z
+HSPLcom/android/server/pm/PackageSettingBase;->init(Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/PackageSettingBase;->modifyUserState(I)Landroid/content/pm/PackageUserState;
+HSPLcom/android/server/pm/PackageSettingBase;->readUserState(I)Landroid/content/pm/PackageUserState;
+HSPLcom/android/server/pm/PackageSettingBase;->setEnabled(IILjava/lang/String;)V
+HSPLcom/android/server/pm/PackageSettingBase;->setTimeStamp(J)V
+HSPLcom/android/server/pm/PackageSettingBase;->setUserState(IJIZZZZZZZLjava/lang/String;Landroid/util/ArraySet;Landroid/util/ArraySet;III)V
+HSPLcom/android/server/pm/PackageSignatures;-><init>()V
+HSPLcom/android/server/pm/PackageSignatures;->readXml(Lorg/xmlpull/v1/XmlPullParser;Ljava/util/ArrayList;)V
+HSPLcom/android/server/pm/PackageSignatures;->writeXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/util/ArrayList;)V
+HSPLcom/android/server/pm/ParallelPackageParser$ParseResult;-><init>()V
+HSPLcom/android/server/pm/ParallelPackageParser;->lambda$-com_android_server_pm_ParallelPackageParser_3701(Ljava/io/File;I)V
+HSPLcom/android/server/pm/ParallelPackageParser;->parsePackage(Landroid/content/pm/PackageParser;Ljava/io/File;I)Landroid/content/pm/PackageParser$Package;
+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/PermissionsState$PermissionData;-><init>(Lcom/android/server/pm/BasePermission;)V
+HSPLcom/android/server/pm/PermissionsState$PermissionData;-><init>(Lcom/android/server/pm/PermissionsState$PermissionData;)V
+HSPLcom/android/server/pm/PermissionsState$PermissionData;->computeGids(I)[I
+HSPLcom/android/server/pm/PermissionsState$PermissionData;->getFlags(I)I
+HSPLcom/android/server/pm/PermissionsState$PermissionData;->getPermissionState(I)Lcom/android/server/pm/PermissionsState$PermissionState;
+HSPLcom/android/server/pm/PermissionsState$PermissionData;->grant(I)Z
+HSPLcom/android/server/pm/PermissionsState$PermissionData;->isCompatibleUserId(I)Z
+HSPLcom/android/server/pm/PermissionsState$PermissionData;->isDefault()Z
+HSPLcom/android/server/pm/PermissionsState$PermissionData;->isGranted(I)Z
+HSPLcom/android/server/pm/PermissionsState$PermissionData;->isInstallPermission()Z
+HSPLcom/android/server/pm/PermissionsState$PermissionData;->isInstallPermissionKey(I)Z
+HSPLcom/android/server/pm/PermissionsState$PermissionData;->updateFlags(III)Z
+HSPLcom/android/server/pm/PermissionsState$PermissionState;->-get0(Lcom/android/server/pm/PermissionsState$PermissionState;)I
+HSPLcom/android/server/pm/PermissionsState$PermissionState;->-get1(Lcom/android/server/pm/PermissionsState$PermissionState;)Z
+HSPLcom/android/server/pm/PermissionsState$PermissionState;->-set0(Lcom/android/server/pm/PermissionsState$PermissionState;I)I
+HSPLcom/android/server/pm/PermissionsState$PermissionState;->-set1(Lcom/android/server/pm/PermissionsState$PermissionState;Z)Z
+HSPLcom/android/server/pm/PermissionsState$PermissionState;-><init>(Lcom/android/server/pm/PermissionsState$PermissionState;)V
+HSPLcom/android/server/pm/PermissionsState$PermissionState;-><init>(Ljava/lang/String;)V
+HSPLcom/android/server/pm/PermissionsState$PermissionState;->getFlags()I
+HSPLcom/android/server/pm/PermissionsState$PermissionState;->getName()Ljava/lang/String;
+HSPLcom/android/server/pm/PermissionsState$PermissionState;->isDefault()Z
+HSPLcom/android/server/pm/PermissionsState$PermissionState;->isGranted()Z
+HSPLcom/android/server/pm/PermissionsState;-><init>()V
+HSPLcom/android/server/pm/PermissionsState;->appendInts([I[I)[I
+HSPLcom/android/server/pm/PermissionsState;->computeGids(I)[I
+HSPLcom/android/server/pm/PermissionsState;->copyFrom(Lcom/android/server/pm/PermissionsState;)V
+HSPLcom/android/server/pm/PermissionsState;->enforceValidUserId(I)V
+HSPLcom/android/server/pm/PermissionsState;->ensurePermissionData(Lcom/android/server/pm/BasePermission;)Lcom/android/server/pm/PermissionsState$PermissionData;
+HSPLcom/android/server/pm/PermissionsState;->getInstallPermissionStates()Ljava/util/List;
+HSPLcom/android/server/pm/PermissionsState;->getPermissionState(Ljava/lang/String;I)Lcom/android/server/pm/PermissionsState$PermissionState;
+HSPLcom/android/server/pm/PermissionsState;->getPermissionStatesInternal(I)Ljava/util/List;
+HSPLcom/android/server/pm/PermissionsState;->getRuntimePermissionState(Ljava/lang/String;I)Lcom/android/server/pm/PermissionsState$PermissionState;
+HSPLcom/android/server/pm/PermissionsState;->grantInstallPermission(Lcom/android/server/pm/BasePermission;)I
+HSPLcom/android/server/pm/PermissionsState;->grantPermission(Lcom/android/server/pm/BasePermission;I)I
+HSPLcom/android/server/pm/PermissionsState;->grantRuntimePermission(Lcom/android/server/pm/BasePermission;I)I
+HSPLcom/android/server/pm/PermissionsState;->hasInstallPermission(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/PermissionsState;->hasPermission(Ljava/lang/String;I)Z
+HSPLcom/android/server/pm/PermissionsState;->hasRuntimePermission(Ljava/lang/String;I)Z
+HSPLcom/android/server/pm/PermissionsState;->revokeInstallPermission(Lcom/android/server/pm/BasePermission;)I
+HSPLcom/android/server/pm/PermissionsState;->revokePermission(Lcom/android/server/pm/BasePermission;I)I
+HSPLcom/android/server/pm/PermissionsState;->setGlobalGids([I)V
+HSPLcom/android/server/pm/PermissionsState;->updatePermissionFlags(Lcom/android/server/pm/BasePermission;III)Z
+HSPLcom/android/server/pm/Policy;->getMatchedSeInfo(Landroid/content/pm/PackageParser$Package;)Ljava/lang/String;
+HSPLcom/android/server/pm/PreferredComponent$Callbacks;->onReadTag(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;)Z
+HSPLcom/android/server/pm/SELinuxMMAC;->assignSeInfoValue(Landroid/content/pm/PackageParser$Package;)V
+HSPLcom/android/server/pm/SettingBase;-><init>(II)V
+HSPLcom/android/server/pm/SettingBase;-><init>(Lcom/android/server/pm/SettingBase;)V
+HSPLcom/android/server/pm/SettingBase;->doCopy(Lcom/android/server/pm/SettingBase;)V
+HSPLcom/android/server/pm/SettingBase;->getPermissionsState()Lcom/android/server/pm/PermissionsState;
+HSPLcom/android/server/pm/SettingBase;->setFlags(I)V
+HSPLcom/android/server/pm/SettingBase;->setPrivateFlags(I)V
+HSPLcom/android/server/pm/Settings$KernelPackageState;-><init>()V
+HSPLcom/android/server/pm/Settings$KernelPackageState;-><init>(Lcom/android/server/pm/Settings$KernelPackageState;)V
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->parsePermissionsLPr(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/pm/PermissionsState;I)V
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->parseRuntimePermissionsLPr(Lorg/xmlpull/v1/XmlPullParser;I)V
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->writePermissionsForUserAsyncLPr(I)V
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->writePermissionsSync(I)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;IIIILjava/lang/String;Ljava/util/List;[Ljava/lang/String;[I)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;->addUserIdLPw(ILjava/lang/Object;Ljava/lang/Object;)Z
+HSPLcom/android/server/pm/Settings;->getAllUsers(Lcom/android/server/pm/UserManagerService;)Ljava/util/List;
+HSPLcom/android/server/pm/Settings;->getDefaultBrowserPackageNameLPw(I)Ljava/lang/String;
+HSPLcom/android/server/pm/Settings;->getDisabledSystemPkgLPr(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
+HSPLcom/android/server/pm/Settings;->getInternalVersion()Lcom/android/server/pm/Settings$VersionInfo;
+HSPLcom/android/server/pm/Settings;->getListOfIncompleteInstallPackagesLPr()Ljava/util/ArrayList;
+HSPLcom/android/server/pm/Settings;->getPackageLPr(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
+HSPLcom/android/server/pm/Settings;->getRenamedPackageLPr(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/pm/Settings;->getUserIdLPr(I)Ljava/lang/Object;
+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/PackageParser$Package;)V
+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;->pruneSharedUsersLPw()V
+HSPLcom/android/server/pm/Settings;->readComponentsLPr(Lorg/xmlpull/v1/XmlPullParser;)Landroid/util/ArraySet;
+HSPLcom/android/server/pm/Settings;->readDisabledSysPackageLPw(Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLcom/android/server/pm/Settings;->readInstallPermissionsLPr(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/pm/PermissionsState;)V
+HSPLcom/android/server/pm/Settings;->readInt(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Ljava/lang/String;I)I
+HSPLcom/android/server/pm/Settings;->readLPw(Ljava/util/List;)Z
+HSPLcom/android/server/pm/Settings;->readPackageLPw(Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLcom/android/server/pm/Settings;->readPackageRestrictionsLPr(I)V
+HSPLcom/android/server/pm/Settings;->readPermissionsLPw(Landroid/util/ArrayMap;Lorg/xmlpull/v1/XmlPullParser;)V
+HSPLcom/android/server/pm/Settings;->readSharedUserLPw(Lorg/xmlpull/v1/XmlPullParser;)V
+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/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/util/List;Lcom/android/server/pm/UserManagerService;[Ljava/lang/String;[I)V
+HSPLcom/android/server/pm/Settings;->writeChildPackagesLPw(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;)V
+HSPLcom/android/server/pm/Settings;->writeDomainVerificationsLPr(Lorg/xmlpull/v1/XmlSerializer;Landroid/content/pm/IntentFilterVerificationInfo;)V
+HSPLcom/android/server/pm/Settings;->writeIntToFile(Ljava/io/File;I)V
+HSPLcom/android/server/pm/Settings;->writeKernelMappingLPr()V
+HSPLcom/android/server/pm/Settings;->writeKernelMappingLPr(Lcom/android/server/pm/PackageSetting;)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
+HSPLcom/android/server/pm/Settings;->writePermissionLPr(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/pm/BasePermission;)V
+HSPLcom/android/server/pm/Settings;->writePermissionsLPr(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;)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;[I)V
+HSPLcom/android/server/pm/SharedUserSetting;->addPackage(Lcom/android/server/pm/PackageSetting;)V
+HSPLcom/android/server/pm/UserManagerService;->checkManageOrCreateUsersPermission(Ljava/lang/String;)V
+HSPLcom/android/server/pm/UserManagerService;->exists(I)Z
+HSPLcom/android/server/pm/UserManagerService;->getInstance()Lcom/android/server/pm/UserManagerService;
+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;
+HSPLcom/android/server/pm/UserManagerService;->getUsers(Z)Ljava/util/List;
+HSPLcom/android/server/pm/UserManagerService;->hasManageOrCreateUsersPermission()Z
+HSPLcom/android/server/pm/UserManagerService;->userWithName(Landroid/content/pm/UserInfo;)Landroid/content/pm/UserInfo;
+HSPLcom/android/server/pm/UserRestrictionsUtils;->readRestrictions(Lorg/xmlpull/v1/XmlPullParser;Landroid/os/Bundle;)V
+HSPLcom/android/server/power/BatterySaverPolicy;->getBatterySaverPolicy(IZ)Landroid/os/PowerSaveState;
+HSPLcom/android/server/power/PowerManagerService$BinderService;->powerHint(II)V
+HSPLcom/android/server/power/PowerManagerService;->-get12(Lcom/android/server/power/PowerManagerService;)Z
+HSPLcom/android/server/power/PowerManagerService;->-get9(Lcom/android/server/power/PowerManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/power/SuspendBlocker;->acquire()V
+HSPLcom/android/server/power/SuspendBlocker;->release()V
+HSPLcom/android/server/power/SuspendBlocker;->writeToProto(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLcom/android/server/vr/EnabledComponentsObserver$EnabledComponentChangeListener;->onEnabledComponentChanged()V
+HSPLcom/android/server/wm/AppWindowContainerListener;->keyDispatchingTimedOut(Ljava/lang/String;I)Z
+HSPLcom/android/server/wm/AppWindowContainerListener;->onStartingWindowDrawn(J)V
+HSPLcom/android/server/wm/AppWindowContainerListener;->onWindowsDrawn(J)V
+HSPLcom/android/server/wm/AppWindowContainerListener;->onWindowsGone()V
+HSPLcom/android/server/wm/AppWindowContainerListener;->onWindowsVisible()V
+HSPLcom/android/server/wm/TaskWindowContainerListener;->onSnapshotChanged(Landroid/app/ActivityManager$TaskSnapshot;)V
+HSPLcom/android/server/wm/TaskWindowContainerListener;->requestResize(Landroid/graphics/Rect;I)V
+Lcom/android/server/-$Lambda$Ganck_s9Kl5o2K6eVDoQTKLc-6g;
+Lcom/android/server/-$Lambda$T7cKu_OKm_Fk2kBNthmo_uUJTSo;
+Lcom/android/server/AlarmManagerService;
+Lcom/android/server/AppOpsService$1;
+Lcom/android/server/AppOpsService$Callback;
+Lcom/android/server/AppOpsService$Op;
+Lcom/android/server/AppOpsService$Ops;
+Lcom/android/server/AppOpsService$UidState;
+Lcom/android/server/AppOpsService;
+Lcom/android/server/ConsumerIrService;
+Lcom/android/server/DisplayThread;
+Lcom/android/server/FgThread;
+Lcom/android/server/GraphicsStatsService;
+Lcom/android/server/HardwarePropertiesManagerService;
+Lcom/android/server/IntentResolver$1;
+Lcom/android/server/IntentResolver;
+Lcom/android/server/IoThread;
+Lcom/android/server/LockGuard;
+Lcom/android/server/PersistentDataBlockService;
+Lcom/android/server/RecoverySystemService$BinderService;
+Lcom/android/server/RecoverySystemService;
+Lcom/android/server/RescueParty$BootThreshold;
+Lcom/android/server/RescueParty$Threshold;
+Lcom/android/server/RescueParty;
+Lcom/android/server/SerialService;
+Lcom/android/server/ServiceThread;
+Lcom/android/server/SystemServer;
+Lcom/android/server/SystemServerInitThreadPool;
+Lcom/android/server/SystemService;
+Lcom/android/server/SystemServiceManager;
+Lcom/android/server/ThreadPriorityBooster$1;
+Lcom/android/server/ThreadPriorityBooster;
+Lcom/android/server/UiThread;
+Lcom/android/server/VibratorService;
+Lcom/android/server/Watchdog$BinderThreadMonitor;
+Lcom/android/server/Watchdog$HandlerChecker;
+Lcom/android/server/Watchdog$Monitor;
+Lcom/android/server/Watchdog$OpenFdMonitor;
+Lcom/android/server/Watchdog;
+Lcom/android/server/am/-$Lambda$FqYE94sGA9-gF3KGIicLxzMb89s;
+Lcom/android/server/am/-$Lambda$pTkujrAbcljW_zZtzXt4TxsgOZU;
+Lcom/android/server/am/ActiveInstrumentation;
+Lcom/android/server/am/ActiveServices$1;
+Lcom/android/server/am/ActiveServices;
+Lcom/android/server/am/ActivityManagerConstants;
+Lcom/android/server/am/ActivityManagerDebugConfig;
+Lcom/android/server/am/ActivityManagerService$1;
+Lcom/android/server/am/ActivityManagerService$2;
+Lcom/android/server/am/ActivityManagerService$3;
+Lcom/android/server/am/ActivityManagerService$4;
+Lcom/android/server/am/ActivityManagerService$Injector;
+Lcom/android/server/am/ActivityManagerService$IntentFirewallInterface;
+Lcom/android/server/am/ActivityManagerService$KillHandler;
+Lcom/android/server/am/ActivityManagerService$Lifecycle;
+Lcom/android/server/am/ActivityManagerService$LocalService;
+Lcom/android/server/am/ActivityManagerService$MainHandler;
+Lcom/android/server/am/ActivityManagerService$ProcessChangeItem;
+Lcom/android/server/am/ActivityManagerService$UiHandler;
+Lcom/android/server/am/ActivityManagerService$UpdateConfigurationResult;
+Lcom/android/server/am/ActivityManagerService;
+Lcom/android/server/am/ActivityMetricsLogger;
+Lcom/android/server/am/ActivityRecord;
+Lcom/android/server/am/ActivityStackSupervisor$ActivityStackSupervisorHandler;
+Lcom/android/server/am/ActivityStackSupervisor$FindTaskResult;
+Lcom/android/server/am/ActivityStackSupervisor;
+Lcom/android/server/am/ActivityStartInterceptor;
+Lcom/android/server/am/ActivityStarter;
+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/AppNotRespondingDialog;
+Lcom/android/server/am/BaseErrorDialog;
+Lcom/android/server/am/BatteryExternalStatsWorker$1;
+Lcom/android/server/am/BatteryExternalStatsWorker$2;
+Lcom/android/server/am/BatteryExternalStatsWorker;
+Lcom/android/server/am/BatteryStatsService$1;
+Lcom/android/server/am/BatteryStatsService$WakeupReasonThread;
+Lcom/android/server/am/BatteryStatsService;
+Lcom/android/server/am/BroadcastQueue$BroadcastHandler;
+Lcom/android/server/am/BroadcastQueue;
+Lcom/android/server/am/BroadcastRecord;
+Lcom/android/server/am/CompatModePackages$CompatHandler;
+Lcom/android/server/am/CompatModePackages;
+Lcom/android/server/am/ConfigurationContainer;
+Lcom/android/server/am/InstrumentationReporter;
+Lcom/android/server/am/KeyguardController;
+Lcom/android/server/am/ProcessList;
+Lcom/android/server/am/ProcessRecord;
+Lcom/android/server/am/ProcessStatsService$1;
+Lcom/android/server/am/ProcessStatsService;
+Lcom/android/server/am/ProviderMap;
+Lcom/android/server/am/RecentTasks$1;
+Lcom/android/server/am/RecentTasks;
+Lcom/android/server/am/ServiceRecord;
+Lcom/android/server/am/TaskChangeNotificationController$MainHandler;
+Lcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;
+Lcom/android/server/am/TaskChangeNotificationController;
+Lcom/android/server/am/TaskPersister$LazyTaskWriterThread;
+Lcom/android/server/am/TaskPersister;
+Lcom/android/server/am/TaskRecord;
+Lcom/android/server/am/UidRecord$ChangeItem;
+Lcom/android/server/am/UserController$Injector;
+Lcom/android/server/am/UserController;
+Lcom/android/server/am/UserState;
+Lcom/android/server/am/VrController$1;
+Lcom/android/server/am/VrController;
+Lcom/android/server/broadcastradio/BroadcastRadioService;
+Lcom/android/server/broadcastradio/Convert;
+Lcom/android/server/broadcastradio/Tuner;
+Lcom/android/server/broadcastradio/TunerCallback;
+Lcom/android/server/connectivity/Vpn;
+Lcom/android/server/connectivity/tethering/OffloadHardwareInterface;
+Lcom/android/server/display/-$Lambda$pe87L53A2dvYIZSUUR6Usyk2Zwo;
+Lcom/android/server/display/DisplayAdapter$1;
+Lcom/android/server/display/DisplayAdapter$2;
+Lcom/android/server/display/DisplayAdapter$Listener;
+Lcom/android/server/display/DisplayAdapter;
+Lcom/android/server/display/DisplayDevice;
+Lcom/android/server/display/DisplayDeviceInfo;
+Lcom/android/server/display/DisplayManagerService$BinderService;
+Lcom/android/server/display/DisplayManagerService$CallbackRecord;
+Lcom/android/server/display/DisplayManagerService$DisplayAdapterListener;
+Lcom/android/server/display/DisplayManagerService$DisplayManagerHandler;
+Lcom/android/server/display/DisplayManagerService$Injector;
+Lcom/android/server/display/DisplayManagerService$LocalService;
+Lcom/android/server/display/DisplayManagerService$SyncRoot;
+Lcom/android/server/display/DisplayManagerService;
+Lcom/android/server/display/DisplayTransformManager;
+Lcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;
+Lcom/android/server/display/LocalDisplayAdapter$HotplugDisplayEventReceiver;
+Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;
+Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;
+Lcom/android/server/display/LocalDisplayAdapter;
+Lcom/android/server/display/LogicalDisplay;
+Lcom/android/server/display/PersistentDataStore$DisplayState;
+Lcom/android/server/display/PersistentDataStore$StableDeviceValues;
+Lcom/android/server/display/PersistentDataStore;
+Lcom/android/server/display/VirtualDisplayAdapter$SurfaceControlDisplayFactory;
+Lcom/android/server/display/VirtualDisplayAdapter;
+Lcom/android/server/firewall/AndFilter$1;
+Lcom/android/server/firewall/AndFilter;
+Lcom/android/server/firewall/CategoryFilter$1;
+Lcom/android/server/firewall/CategoryFilter;
+Lcom/android/server/firewall/Filter;
+Lcom/android/server/firewall/FilterFactory;
+Lcom/android/server/firewall/FilterList;
+Lcom/android/server/firewall/IntentFirewall$AMSInterface;
+Lcom/android/server/firewall/IntentFirewall$FirewallHandler;
+Lcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;
+Lcom/android/server/firewall/IntentFirewall$RuleObserver;
+Lcom/android/server/firewall/IntentFirewall;
+Lcom/android/server/firewall/NotFilter$1;
+Lcom/android/server/firewall/NotFilter;
+Lcom/android/server/firewall/OrFilter$1;
+Lcom/android/server/firewall/OrFilter;
+Lcom/android/server/firewall/PortFilter$1;
+Lcom/android/server/firewall/PortFilter;
+Lcom/android/server/firewall/SenderFilter$1;
+Lcom/android/server/firewall/SenderFilter$2;
+Lcom/android/server/firewall/SenderFilter$3;
+Lcom/android/server/firewall/SenderFilter$4;
+Lcom/android/server/firewall/SenderFilter$5;
+Lcom/android/server/firewall/SenderFilter;
+Lcom/android/server/firewall/SenderPackageFilter$1;
+Lcom/android/server/firewall/SenderPackageFilter;
+Lcom/android/server/firewall/SenderPermissionFilter$1;
+Lcom/android/server/firewall/SenderPermissionFilter;
+Lcom/android/server/firewall/StringFilter$10;
+Lcom/android/server/firewall/StringFilter$1;
+Lcom/android/server/firewall/StringFilter$2;
+Lcom/android/server/firewall/StringFilter$3;
+Lcom/android/server/firewall/StringFilter$4;
+Lcom/android/server/firewall/StringFilter$5;
+Lcom/android/server/firewall/StringFilter$6;
+Lcom/android/server/firewall/StringFilter$7;
+Lcom/android/server/firewall/StringFilter$8;
+Lcom/android/server/firewall/StringFilter$9;
+Lcom/android/server/firewall/StringFilter$ValueProvider;
+Lcom/android/server/firewall/StringFilter;
+Lcom/android/server/hdmi/HdmiCecController;
+Lcom/android/server/input/InputApplicationHandle;
+Lcom/android/server/input/InputManagerService;
+Lcom/android/server/input/InputWindowHandle;
+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;
+Lcom/android/server/location/ContextHubService;
+Lcom/android/server/location/GnssLocationProvider;
+Lcom/android/server/location/LocationProviderInterface;
+Lcom/android/server/locksettings/SyntheticPasswordManager;
+Lcom/android/server/os/DeviceIdentifiersPolicyService$DeviceIdentifiersPolicy;
+Lcom/android/server/os/DeviceIdentifiersPolicyService;
+Lcom/android/server/pm/-$Lambda$i1ZZeLvwPPAZVBl_nnQ0C2t5oMs;
+Lcom/android/server/pm/AbstractStatsBase;
+Lcom/android/server/pm/BasePermission;
+Lcom/android/server/pm/CompilerStats;
+Lcom/android/server/pm/CrossProfileIntentResolver;
+Lcom/android/server/pm/DefaultPermissionGrantPolicy$1;
+Lcom/android/server/pm/DefaultPermissionGrantPolicy;
+Lcom/android/server/pm/Installer$1;
+Lcom/android/server/pm/Installer$InstallerException;
+Lcom/android/server/pm/Installer;
+Lcom/android/server/pm/InstantAppRegistry$CookiePersistence;
+Lcom/android/server/pm/InstantAppRegistry;
+Lcom/android/server/pm/InstructionSets;
+Lcom/android/server/pm/KeySetHandle;
+Lcom/android/server/pm/KeySetManagerService$PublicKeyHandle;
+Lcom/android/server/pm/KeySetManagerService;
+Lcom/android/server/pm/PackageDexOptimizer;
+Lcom/android/server/pm/PackageInstallerService$1;
+Lcom/android/server/pm/PackageInstallerService;
+Lcom/android/server/pm/PackageKeySetData;
+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$9;
+Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver$ActionIterGenerator;
+Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver$CategoriesIterGenerator;
+Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver$IterGenerator;
+Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver;
+Lcom/android/server/pm/PackageManagerService$DefaultContainerConnection;
+Lcom/android/server/pm/PackageManagerService$MoveCallbacks;
+Lcom/android/server/pm/PackageManagerService$OnPermissionChangeListeners;
+Lcom/android/server/pm/PackageManagerService$PackageHandler;
+Lcom/android/server/pm/PackageManagerService$PackageParserCallback;
+Lcom/android/server/pm/PackageManagerService$ParallelPackageParserCallback;
+Lcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;
+Lcom/android/server/pm/PackageManagerService$ProviderIntentResolver;
+Lcom/android/server/pm/PackageManagerService$ServiceIntentResolver;
+Lcom/android/server/pm/PackageManagerService$SharedLibraryEntry;
+Lcom/android/server/pm/PackageManagerService;
+Lcom/android/server/pm/PackageManagerServiceCompilerMapping;
+Lcom/android/server/pm/PackageSender;
+Lcom/android/server/pm/PackageSetting;
+Lcom/android/server/pm/PackageSettingBase;
+Lcom/android/server/pm/PackageSignatures;
+Lcom/android/server/pm/PackageUsage;
+Lcom/android/server/pm/ParallelPackageParser$ParseResult;
+Lcom/android/server/pm/ParallelPackageParser;
+Lcom/android/server/pm/PermissionsState$PermissionData;
+Lcom/android/server/pm/PermissionsState$PermissionState;
+Lcom/android/server/pm/PermissionsState;
+Lcom/android/server/pm/Policy$PolicyBuilder;
+Lcom/android/server/pm/Policy;
+Lcom/android/server/pm/PolicyComparator;
+Lcom/android/server/pm/PreferredActivity;
+Lcom/android/server/pm/PreferredComponent$Callbacks;
+Lcom/android/server/pm/PreferredComponent;
+Lcom/android/server/pm/PreferredIntentResolver;
+Lcom/android/server/pm/ProcessLoggingHandler;
+Lcom/android/server/pm/ProtectedPackages;
+Lcom/android/server/pm/SELinuxMMAC;
+Lcom/android/server/pm/SettingBase;
+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/UserDataPreparer;
+Lcom/android/server/pm/UserManagerService$1;
+Lcom/android/server/pm/UserManagerService$LocalService;
+Lcom/android/server/pm/UserManagerService$MainHandler;
+Lcom/android/server/pm/UserManagerService$UserData;
+Lcom/android/server/pm/UserManagerService;
+Lcom/android/server/pm/UserRestrictionsUtils;
+Lcom/android/server/pm/dex/DexManager;
+Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;
+Lcom/android/server/pm/dex/PackageDexUsage;
+Lcom/android/server/power/BatterySaverPolicy;
+Lcom/android/server/power/PowerManagerService$1;
+Lcom/android/server/power/PowerManagerService$2;
+Lcom/android/server/power/PowerManagerService$BinderService;
+Lcom/android/server/power/PowerManagerService$Constants;
+Lcom/android/server/power/PowerManagerService$LocalService;
+Lcom/android/server/power/PowerManagerService$PowerManagerHandler;
+Lcom/android/server/power/PowerManagerService$SuspendBlockerImpl;
+Lcom/android/server/power/PowerManagerService;
+Lcom/android/server/power/SuspendBlocker;
+Lcom/android/server/storage/AppFuseBridge;
+Lcom/android/server/tv/TvInputHal;
+Lcom/android/server/tv/UinputBridge;
+Lcom/android/server/usb/UsbDeviceManager;
+Lcom/android/server/usb/UsbHostManager;
+Lcom/android/server/usb/UsbMidiDevice;
+Lcom/android/server/vr/EnabledComponentsObserver$EnabledComponentChangeListener;
+Lcom/android/server/vr/VrManagerService;
+Lcom/android/server/wm/AppWindowContainerListener;
+Lcom/android/server/wm/TaskWindowContainerListener;
+Lcom/android/server/wm/WindowContainerListener;
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->asBinder()Landroid/os/IHwBinder;
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->setActiveGroup(ILjava/lang/String;)I
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->setNotify(Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;)J
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->getService()Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback$Stub;-><init>()V
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback$Stub;->asBinder()Landroid/os/IHwBinder;
+PLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs$Proxy;->hasWideColorDisplay()Landroid/hardware/configstore/V1_0/OptionalBool;
+PLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;
+PLandroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;->getService()Landroid/hardware/configstore/V1_0/ISurfaceFlingerConfigs;
+PLandroid/hardware/configstore/V1_0/OptionalBool;-><init>()V
+PLandroid/hardware/configstore/V1_0/OptionalBool;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/configstore/V1_0/OptionalBool;->readFromParcel(Landroid/os/HwParcel;)V
+PLandroid/hardware/oemlock/V1_0/IOemLock;->getService()Landroid/hardware/oemlock/V1_0/IOemLock;
+PLandroid/hardware/usb/V1_0/IUsb$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/usb/V1_0/IUsb$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/usb/V1_0/IUsb$Proxy;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+PLandroid/hardware/usb/V1_0/IUsb$Proxy;->queryPortStatus()V
+PLandroid/hardware/usb/V1_0/IUsb$Proxy;->setCallback(Landroid/hardware/usb/V1_0/IUsbCallback;)V
+PLandroid/hardware/usb/V1_0/IUsb;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/usb/V1_0/IUsb;
+PLandroid/hardware/usb/V1_0/IUsb;->getService()Landroid/hardware/usb/V1_0/IUsb;
+PLandroid/hardware/usb/V1_0/PortStatus;-><init>()V
+PLandroid/hardware/usb/V1_0/PortStatus;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/usb/V1_1/IUsbCallback$Stub;-><init>()V
+PLandroid/hardware/usb/V1_1/IUsbCallback$Stub;->asBinder()Landroid/os/IHwBinder;
+PLandroid/hardware/usb/V1_1/IUsbCallback$Stub;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/usb/V1_1/IUsbCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
+PLandroid/hardware/usb/V1_1/PortStatus_1_1;-><init>()V
+PLandroid/hardware/usb/V1_1/PortStatus_1_1;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/usb/V1_1/PortStatus_1_1;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
+PLandroid/hardware/weaver/V1_0/IWeaver;->getService()Landroid/hardware/weaver/V1_0/IWeaver;
+PLandroid/hardware/wifi/V1_0/IWifi$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/wifi/V1_0/IWifi$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/wifi/V1_0/IWifi$Proxy;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+PLandroid/hardware/wifi/V1_0/IWifi$Proxy;->registerEventCallback(Landroid/hardware/wifi/V1_0/IWifiEventCallback;)Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifi$Proxy;->start()Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifi$Proxy;->stop()Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifi;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/wifi/V1_0/IWifi;
+PLandroid/hardware/wifi/V1_0/IWifi;->getService()Landroid/hardware/wifi/V1_0/IWifi;
+PLandroid/hardware/wifi/V1_0/IWifiChip$ChipDebugInfo;-><init>()V
+PLandroid/hardware/wifi/V1_0/IWifiChip$ChipDebugInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/wifi/V1_0/IWifiChip$ChipDebugInfo;->readFromParcel(Landroid/os/HwParcel;)V
+PLandroid/hardware/wifi/V1_0/IWifiChip$ChipIfaceCombination;-><init>()V
+PLandroid/hardware/wifi/V1_0/IWifiChip$ChipMode;-><init>()V
+PLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->configureChip(I)Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->createRttController(Landroid/hardware/wifi/V1_0/IWifiIface;Landroid/hardware/wifi/V1_0/IWifiChip$createRttControllerCallback;)V
+PLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->createStaIface(Landroid/hardware/wifi/V1_0/IWifiChip$createStaIfaceCallback;)V
+PLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->enableDebugErrorAlerts(Z)Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->forceDumpToDebugRingBuffer(Ljava/lang/String;)Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->getDebugHostWakeReasonStats(Landroid/hardware/wifi/V1_0/IWifiChip$getDebugHostWakeReasonStatsCallback;)V
+PLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->getDebugRingBuffersStatus(Landroid/hardware/wifi/V1_0/IWifiChip$getDebugRingBuffersStatusCallback;)V
+PLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->registerEventCallback(Landroid/hardware/wifi/V1_0/IWifiChipEventCallback;)Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->requestChipDebugInfo(Landroid/hardware/wifi/V1_0/IWifiChip$requestChipDebugInfoCallback;)V
+PLandroid/hardware/wifi/V1_0/IWifiChip$Proxy;->startLoggingToDebugRingBuffer(Ljava/lang/String;III)Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifiChipEventCallback$Stub;-><init>()V
+PLandroid/hardware/wifi/V1_0/IWifiChipEventCallback$Stub;->asBinder()Landroid/os/IHwBinder;
+PLandroid/hardware/wifi/V1_0/IWifiEventCallback$Stub;-><init>()V
+PLandroid/hardware/wifi/V1_0/IWifiEventCallback$Stub;->asBinder()Landroid/os/IHwBinder;
+PLandroid/hardware/wifi/V1_0/IWifiEventCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
+PLandroid/hardware/wifi/V1_0/IWifiRttController$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/wifi/V1_0/IWifiRttController$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/wifi/V1_0/IWifiRttController$Proxy;->registerEventCallback(Landroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback;)Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifiRttController;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/wifi/V1_0/IWifiRttController;
+PLandroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback$Stub;-><init>()V
+PLandroid/hardware/wifi/V1_0/IWifiRttControllerEventCallback$Stub;->asBinder()Landroid/os/IHwBinder;
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->asBinder()Landroid/os/IHwBinder;
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->configureRoaming(Landroid/hardware/wifi/V1_0/StaRoamingConfig;)Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->enableLinkLayerStatsCollection(Z)Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->enableNdOffload(Z)Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->getApfPacketFilterCapabilities(Landroid/hardware/wifi/V1_0/IWifiStaIface$getApfPacketFilterCapabilitiesCallback;)V
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->getBackgroundScanCapabilities(Landroid/hardware/wifi/V1_0/IWifiStaIface$getBackgroundScanCapabilitiesCallback;)V
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->getDebugRxPacketFates(Landroid/hardware/wifi/V1_0/IWifiStaIface$getDebugRxPacketFatesCallback;)V
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->getDebugTxPacketFates(Landroid/hardware/wifi/V1_0/IWifiStaIface$getDebugTxPacketFatesCallback;)V
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->getName(Landroid/hardware/wifi/V1_0/IWifiIface$getNameCallback;)V
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->getRoamingCapabilities(Landroid/hardware/wifi/V1_0/IWifiStaIface$getRoamingCapabilitiesCallback;)V
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->registerEventCallback(Landroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback;)Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->setScanningMacOui([B)Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->startDebugPacketFateMonitoring()Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifiStaIface$Proxy;->stopRssiMonitoring(I)Landroid/hardware/wifi/V1_0/WifiStatus;
+PLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback$Stub;-><init>()V
+PLandroid/hardware/wifi/V1_0/IWifiStaIfaceEventCallback$Stub;->asBinder()Landroid/os/IHwBinder;
+PLandroid/hardware/wifi/V1_0/StaApfPacketFilterCapabilities;-><init>()V
+PLandroid/hardware/wifi/V1_0/StaApfPacketFilterCapabilities;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/wifi/V1_0/StaApfPacketFilterCapabilities;->readFromParcel(Landroid/os/HwParcel;)V
+PLandroid/hardware/wifi/V1_0/StaBackgroundScanCapabilities;-><init>()V
+PLandroid/hardware/wifi/V1_0/StaBackgroundScanCapabilities;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/wifi/V1_0/StaBackgroundScanCapabilities;->readFromParcel(Landroid/os/HwParcel;)V
+PLandroid/hardware/wifi/V1_0/StaBackgroundScanCapabilities;->toString()Ljava/lang/String;
+PLandroid/hardware/wifi/V1_0/StaRoamingCapabilities;-><init>()V
+PLandroid/hardware/wifi/V1_0/StaRoamingCapabilities;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/wifi/V1_0/StaRoamingCapabilities;->readFromParcel(Landroid/os/HwParcel;)V
+PLandroid/hardware/wifi/V1_0/StaRoamingConfig;-><init>()V
+PLandroid/hardware/wifi/V1_0/StaRoamingConfig;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+PLandroid/hardware/wifi/V1_0/StaRoamingConfig;->writeToParcel(Landroid/os/HwParcel;)V
+PLandroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonRxIcmpPacketDetails;-><init>()V
+PLandroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonRxIcmpPacketDetails;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonRxMulticastPacketDetails;-><init>()V
+PLandroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonRxMulticastPacketDetails;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonRxPacketDetails;-><init>()V
+PLandroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonRxPacketDetails;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonStats;-><init>()V
+PLandroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonStats;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonStats;->readFromParcel(Landroid/os/HwParcel;)V
+PLandroid/hardware/wifi/V1_0/WifiDebugRingBufferStatus;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
+PLandroid/hardware/wifi/V1_0/WifiDebugRxPacketFateReport;-><init>()V
+PLandroid/hardware/wifi/V1_0/WifiDebugRxPacketFateReport;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/wifi/V1_0/WifiDebugRxPacketFateReport;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
+PLandroid/hardware/wifi/V1_0/WifiDebugTxPacketFateReport;-><init>()V
+PLandroid/hardware/wifi/V1_0/WifiStatus;->toString()Ljava/lang/String;
+PLandroid/hardware/wifi/V1_0/WifiStatusCode;->toString(I)Ljava/lang/String;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant$IfaceInfo;-><init>()V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant$IfaceInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant$IfaceInfo;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant$IfaceInfo;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant$IfaceInfo;->writeToParcel(Landroid/os/HwParcel;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant$Proxy;->getInterface(Landroid/hardware/wifi/supplicant/V1_0/ISupplicant$IfaceInfo;Landroid/hardware/wifi/supplicant/V1_0/ISupplicant$getInterfaceCallback;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant$Proxy;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant$Proxy;->listInterfaces(Landroid/hardware/wifi/supplicant/V1_0/ISupplicant$listInterfacesCallback;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant$Proxy;->setConcurrencyPriority(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant$Proxy;->setDebugParams(IZZ)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/wifi/supplicant/V1_0/ISupplicant;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicant;->getService()Landroid/hardware/wifi/supplicant/V1_0/ISupplicant;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantIface$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantIface$Proxy;->asBinder()Landroid/os/IHwBinder;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantIface$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantIface$Proxy;->interfaceDescriptor()Ljava/lang/String;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantIface$Proxy;->toString()Ljava/lang/String;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantIface;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/wifi/supplicant/V1_0/ISupplicantIface;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantNetwork$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantNetwork$Proxy;->asBinder()Landroid/os/IHwBinder;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantNetwork$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantNetwork;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/wifi/supplicant/V1_0/ISupplicantNetwork;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$Proxy;->flush()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$Proxy;->flushServices()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$Proxy;->getDeviceAddress(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$getDeviceAddressCallback;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$Proxy;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$Proxy;->listNetworks(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantIface$listNetworksCallback;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$Proxy;->registerCallback(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$Proxy;->saveConfig()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$Proxy;->setSsidPostfix(Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$Proxy;->setWpsConfigMethods(S)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$Proxy;->setWpsDeviceName(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface$Proxy;->setWpsDeviceType([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback$Stub;-><init>()V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback$Stub;->asBinder()Landroid/os/IHwBinder;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->addNetwork(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantIface$addNetworkCallback;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->addRxFilter(B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->disconnect()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->enableAutoReconnect(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->getMacAddress(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$getMacAddressCallback;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->linkToDeath(Landroid/os/IHwBinder$DeathRecipient;J)Z
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->listNetworks(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantIface$listNetworksCallback;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->registerCallback(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->setBtCoexistenceMode(B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->setBtCoexistenceScanModeEnabled(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->setCountryCode([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->setExternalSim(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->setSuspendModeEnabled(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->setWpsConfigMethods(S)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->setWpsDeviceName(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->setWpsDeviceType([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->setWpsManufacturer(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->setWpsModelName(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->setWpsModelNumber(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->setWpsSerialNumber(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->startRxFilter()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface$Proxy;->stopRxFilter()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback$Stub;-><init>()V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback$Stub;->asBinder()Landroid/os/IHwBinder;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;-><init>(Landroid/os/IHwBinder;)V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;->registerCallback(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;->select()Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;->setAuthAlg(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;->setBssid([B)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;->setGroupCipher(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;->setIdStr(Ljava/lang/String;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;->setKeyMgmt(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;->setPairwiseCipher(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;->setProto(I)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;->setRequirePmf(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;->setScanSsid(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork$Proxy;->setSsid(Ljava/util/ArrayList;)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback$Stub;-><init>()V
+PLandroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback$Stub;->asBinder()Landroid/os/IHwBinder;
+PLandroid/net/apf/ApfCapabilities;-><init>(III)V
+PLandroid/net/apf/ApfCapabilities;->toString()Ljava/lang/String;
+PLandroid/net/apf/ApfFilter$ProcessRaResult;-><init>(Ljava/lang/String;I)V
+PLandroid/net/apf/ApfFilter$ProcessRaResult;->values()[Landroid/net/apf/ApfFilter$ProcessRaResult;
+PLandroid/net/apf/ApfFilter$Ra;-><init>(Landroid/net/apf/ApfFilter;[BI)V
+PLandroid/net/apf/ApfFilter$Ra;->IPv6AddresstoString(I)Ljava/lang/String;
+PLandroid/net/apf/ApfFilter$Ra;->addNonLifetime(III)I
+PLandroid/net/apf/ApfFilter$Ra;->addNonLifetimeU32(I)I
+PLandroid/net/apf/ApfFilter$Ra;->currentLifetime()J
+PLandroid/net/apf/ApfFilter$Ra;->getLastMatchingPacket()Ljava/lang/String;
+PLandroid/net/apf/ApfFilter$Ra;->isExpired()Z
+PLandroid/net/apf/ApfFilter$Ra;->prefixOptionToString(Ljava/lang/StringBuffer;I)V
+PLandroid/net/apf/ApfFilter$Ra;->rdnssOptionToString(Ljava/lang/StringBuffer;I)V
+PLandroid/net/apf/ApfFilter$Ra;->toString()Ljava/lang/String;
+PLandroid/net/apf/ApfFilter$ReceiveThread;->-getandroid-net-apf-ApfFilter$ProcessRaResultSwitchesValues()[I
+PLandroid/net/apf/ApfFilter$ReceiveThread;-><init>(Landroid/net/apf/ApfFilter;Ljava/io/FileDescriptor;)V
+PLandroid/net/apf/ApfFilter$ReceiveThread;->run()V
+PLandroid/net/apf/ApfFilter$ReceiveThread;->updateStats(Landroid/net/apf/ApfFilter$ProcessRaResult;)V
+PLandroid/net/apf/ApfFilter;->-get1(Landroid/net/apf/ApfFilter;)Landroid/net/metrics/IpConnectivityLog;
+PLandroid/net/apf/ApfFilter;->-wrap0(Landroid/net/apf/ApfFilter;)J
+PLandroid/net/apf/ApfFilter;->-wrap2(Landroid/net/apf/ApfFilter;Ljava/lang/String;)V
+PLandroid/net/apf/ApfFilter;-><init>(Landroid/net/apf/ApfCapabilities;Ljava/net/NetworkInterface;Landroid/net/ip/IpManager$Callback;ZZLandroid/net/metrics/IpConnectivityLog;)V
+PLandroid/net/apf/ApfFilter;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLandroid/net/apf/ApfFilter;->findIPv4LinkAddress(Landroid/net/LinkProperties;)Landroid/net/LinkAddress;
+PLandroid/net/apf/ApfFilter;->getUniqueNumberLocked()J
+PLandroid/net/apf/ApfFilter;->ipv4BroadcastAddress([BI)I
+PLandroid/net/apf/ApfFilter;->log(Ljava/lang/String;)V
+PLandroid/net/apf/ApfFilter;->logApfProgramEventLocked(J)V
+PLandroid/net/apf/ApfFilter;->maybeCreate(Landroid/net/apf/ApfCapabilities;Ljava/net/NetworkInterface;Landroid/net/ip/IpManager$Callback;ZZ)Landroid/net/apf/ApfFilter;
+PLandroid/net/apf/ApfFilter;->maybeStartFilter()V
+PLandroid/net/apf/ApfFilter;->processRa([BI)Landroid/net/apf/ApfFilter$ProcessRaResult;
+PLandroid/net/apf/ApfFilter;->purgeExpiredRasLocked()V
+PLandroid/net/apf/ApfFilter;->setLinkProperties(Landroid/net/LinkProperties;)V
+PLandroid/net/apf/ApfFilter;->setMulticastFilter(Z)V
+PLandroid/net/apf/ApfFilter;->shouldInstallnewProgram()Z
+PLandroid/net/apf/ApfGenerator$ExtendedOpcodes;-><init>(Ljava/lang/String;II)V
+PLandroid/net/apf/ApfGenerator$Opcodes;-><init>(Ljava/lang/String;II)V
+PLandroid/net/apf/ApfGenerator$Register;-><init>(Ljava/lang/String;II)V
+PLandroid/net/apf/ApfGenerator;->addAddR1()Landroid/net/apf/ApfGenerator;
+PLandroid/net/apf/ApfGenerator;->addAnd(I)Landroid/net/apf/ApfGenerator;
+PLandroid/net/apf/ApfGenerator;->addJumpIfR0AnyBitsSet(ILjava/lang/String;)Landroid/net/apf/ApfGenerator;
+PLandroid/net/apf/ApfGenerator;->addLoad16Indexed(Landroid/net/apf/ApfGenerator$Register;I)Landroid/net/apf/ApfGenerator;
+PLandroid/net/apf/ApfGenerator;->programLengthOverEstimate()I
+PLandroid/net/apf/ApfGenerator;->setApfVersion(I)Z
+PLandroid/net/dhcp/DhcpAckPacket;-><init>(ISZLjava/net/Inet4Address;Ljava/net/Inet4Address;Ljava/net/Inet4Address;[B)V
+PLandroid/net/dhcp/DhcpClient$ConfiguringInterfaceState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$ConfiguringInterfaceState;->enter()V
+PLandroid/net/dhcp/DhcpClient$ConfiguringInterfaceState;->processMessage(Landroid/os/Message;)Z
+PLandroid/net/dhcp/DhcpClient$DhcpBoundState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$DhcpBoundState;->enter()V
+PLandroid/net/dhcp/DhcpClient$DhcpBoundState;->exit()V
+PLandroid/net/dhcp/DhcpClient$DhcpBoundState;->logTimeToBoundState()V
+PLandroid/net/dhcp/DhcpClient$DhcpBoundState;->processMessage(Landroid/os/Message;)Z
+PLandroid/net/dhcp/DhcpClient$DhcpHaveLeaseState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$DhcpHaveLeaseState;->processMessage(Landroid/os/Message;)Z
+PLandroid/net/dhcp/DhcpClient$DhcpInitRebootState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$DhcpInitState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$DhcpInitState;->enter()V
+PLandroid/net/dhcp/DhcpClient$DhcpInitState;->receivePacket(Landroid/net/dhcp/DhcpPacket;)V
+PLandroid/net/dhcp/DhcpClient$DhcpInitState;->sendPacket()Z
+PLandroid/net/dhcp/DhcpClient$DhcpReacquiringState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$DhcpReacquiringState;->enter()V
+PLandroid/net/dhcp/DhcpClient$DhcpReacquiringState;->receivePacket(Landroid/net/dhcp/DhcpPacket;)V
+PLandroid/net/dhcp/DhcpClient$DhcpReacquiringState;->sendPacket()Z
+PLandroid/net/dhcp/DhcpClient$DhcpRebindingState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$DhcpRebootingState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$DhcpRenewingState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$DhcpRenewingState;->packetDestination()Ljava/net/Inet4Address;
+PLandroid/net/dhcp/DhcpClient$DhcpRenewingState;->processMessage(Landroid/os/Message;)Z
+PLandroid/net/dhcp/DhcpClient$DhcpRequestingState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$DhcpRequestingState;->receivePacket(Landroid/net/dhcp/DhcpPacket;)V
+PLandroid/net/dhcp/DhcpClient$DhcpRequestingState;->sendPacket()Z
+PLandroid/net/dhcp/DhcpClient$DhcpSelectingState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$DhcpState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$DhcpState;->enter()V
+PLandroid/net/dhcp/DhcpClient$DhcpState;->processMessage(Landroid/os/Message;)Z
+PLandroid/net/dhcp/DhcpClient$LoggingState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$LoggingState;->enter()V
+PLandroid/net/dhcp/DhcpClient$LoggingState;->exit()V
+PLandroid/net/dhcp/DhcpClient$LoggingState;->getName()Ljava/lang/String;
+PLandroid/net/dhcp/DhcpClient$LoggingState;->processMessage(Landroid/os/Message;)Z
+PLandroid/net/dhcp/DhcpClient$PacketRetransmittingState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$PacketRetransmittingState;->enter()V
+PLandroid/net/dhcp/DhcpClient$PacketRetransmittingState;->exit()V
+PLandroid/net/dhcp/DhcpClient$PacketRetransmittingState;->initTimer()V
+PLandroid/net/dhcp/DhcpClient$PacketRetransmittingState;->jitterTimer(I)I
+PLandroid/net/dhcp/DhcpClient$PacketRetransmittingState;->maybeInitTimeout()V
+PLandroid/net/dhcp/DhcpClient$PacketRetransmittingState;->processMessage(Landroid/os/Message;)Z
+PLandroid/net/dhcp/DhcpClient$PacketRetransmittingState;->scheduleKick()V
+PLandroid/net/dhcp/DhcpClient$ReceiveThread;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$ReceiveThread;->run()V
+PLandroid/net/dhcp/DhcpClient$StoppedState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$StoppedState;->processMessage(Landroid/os/Message;)Z
+PLandroid/net/dhcp/DhcpClient$WaitBeforeOtherState;-><init>(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient$WaitBeforeOtherState;->enter()V
+PLandroid/net/dhcp/DhcpClient$WaitBeforeOtherState;->processMessage(Landroid/os/Message;)Z
+PLandroid/net/dhcp/DhcpClient$WaitBeforeRenewalState;-><init>(Landroid/net/dhcp/DhcpClient;Lcom/android/internal/util/State;)V
+PLandroid/net/dhcp/DhcpClient$WaitBeforeStartState;-><init>(Landroid/net/dhcp/DhcpClient;Lcom/android/internal/util/State;)V
+PLandroid/net/dhcp/DhcpClient;->-get0(Landroid/net/dhcp/DhcpClient;)Lcom/android/internal/util/State;
+PLandroid/net/dhcp/DhcpClient;->-get1(Landroid/net/dhcp/DhcpClient;)Lcom/android/internal/util/StateMachine;
+PLandroid/net/dhcp/DhcpClient;->-get10(Landroid/net/dhcp/DhcpClient;)J
+PLandroid/net/dhcp/DhcpClient;->-get11(Landroid/net/dhcp/DhcpClient;)J
+PLandroid/net/dhcp/DhcpClient;->-get12(Landroid/net/dhcp/DhcpClient;)Landroid/net/DhcpResults;
+PLandroid/net/dhcp/DhcpClient;->-get13(Landroid/net/dhcp/DhcpClient;)Ljava/io/FileDescriptor;
+PLandroid/net/dhcp/DhcpClient;->-get14(Landroid/net/dhcp/DhcpClient;)Ljava/util/Random;
+PLandroid/net/dhcp/DhcpClient;->-get16(Landroid/net/dhcp/DhcpClient;)Landroid/net/dhcp/DhcpClient$ReceiveThread;
+PLandroid/net/dhcp/DhcpClient;->-get17(Landroid/net/dhcp/DhcpClient;)Z
+PLandroid/net/dhcp/DhcpClient;->-get2(Landroid/net/dhcp/DhcpClient;)Lcom/android/internal/util/State;
+PLandroid/net/dhcp/DhcpClient;->-get20(Landroid/net/dhcp/DhcpClient;)Lcom/android/internal/util/WakeupMessage;
+PLandroid/net/dhcp/DhcpClient;->-get22(Landroid/net/dhcp/DhcpClient;)Lcom/android/internal/util/State;
+PLandroid/net/dhcp/DhcpClient;->-get23(Landroid/net/dhcp/DhcpClient;)Lcom/android/internal/util/State;
+PLandroid/net/dhcp/DhcpClient;->-get4(Landroid/net/dhcp/DhcpClient;)Landroid/net/DhcpResults;
+PLandroid/net/dhcp/DhcpClient;->-get7(Landroid/net/dhcp/DhcpClient;)Lcom/android/internal/util/State;
+PLandroid/net/dhcp/DhcpClient;->-get9(Landroid/net/dhcp/DhcpClient;)Lcom/android/internal/util/WakeupMessage;
+PLandroid/net/dhcp/DhcpClient;->-set0(Landroid/net/dhcp/DhcpClient;J)J
+PLandroid/net/dhcp/DhcpClient;->-set1(Landroid/net/dhcp/DhcpClient;J)J
+PLandroid/net/dhcp/DhcpClient;->-set2(Landroid/net/dhcp/DhcpClient;Landroid/net/DhcpResults;)Landroid/net/DhcpResults;
+PLandroid/net/dhcp/DhcpClient;->-set3(Landroid/net/dhcp/DhcpClient;Landroid/net/dhcp/DhcpClient$ReceiveThread;)Landroid/net/dhcp/DhcpClient$ReceiveThread;
+PLandroid/net/dhcp/DhcpClient;->-wrap0(Landroid/net/dhcp/DhcpClient;Ljava/net/Inet4Address;)Z
+PLandroid/net/dhcp/DhcpClient;->-wrap1(Landroid/net/dhcp/DhcpClient;)Z
+PLandroid/net/dhcp/DhcpClient;->-wrap11(Landroid/net/dhcp/DhcpClient;Ljava/lang/String;I)V
+PLandroid/net/dhcp/DhcpClient;->-wrap13(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient;->-wrap14(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient;->-wrap2(Landroid/net/dhcp/DhcpClient;)Z
+PLandroid/net/dhcp/DhcpClient;->-wrap4(Landroid/net/dhcp/DhcpClient;)Z
+PLandroid/net/dhcp/DhcpClient;->-wrap5(Landroid/net/dhcp/DhcpClient;Ljava/net/Inet4Address;Ljava/net/Inet4Address;Ljava/net/Inet4Address;Ljava/net/Inet4Address;)Z
+PLandroid/net/dhcp/DhcpClient;->-wrap6(Landroid/net/dhcp/DhcpClient;Landroid/net/DhcpResults;Ljava/lang/String;)V
+PLandroid/net/dhcp/DhcpClient;->-wrap7(Landroid/net/dhcp/DhcpClient;)V
+PLandroid/net/dhcp/DhcpClient;-><init>(Landroid/content/Context;Lcom/android/internal/util/StateMachine;Ljava/lang/String;)V
+PLandroid/net/dhcp/DhcpClient;->acceptDhcpResults(Landroid/net/DhcpResults;Ljava/lang/String;)V
+PLandroid/net/dhcp/DhcpClient;->clearDhcpState()V
+PLandroid/net/dhcp/DhcpClient;->connectUdpSock(Ljava/net/Inet4Address;)Z
+PLandroid/net/dhcp/DhcpClient;->getSecs()S
+PLandroid/net/dhcp/DhcpClient;->initInterface()Z
+PLandroid/net/dhcp/DhcpClient;->initPacketSocket()Z
+PLandroid/net/dhcp/DhcpClient;->initSockets()Z
+PLandroid/net/dhcp/DhcpClient;->initUdpSocket()Z
+PLandroid/net/dhcp/DhcpClient;->isValidPacket(Landroid/net/dhcp/DhcpPacket;)Z
+PLandroid/net/dhcp/DhcpClient;->logState(Ljava/lang/String;I)V
+PLandroid/net/dhcp/DhcpClient;->makeDhcpClient(Landroid/content/Context;Lcom/android/internal/util/StateMachine;Ljava/lang/String;)Landroid/net/dhcp/DhcpClient;
+PLandroid/net/dhcp/DhcpClient;->makeWakeupMessage(Ljava/lang/String;I)Lcom/android/internal/util/WakeupMessage;
+PLandroid/net/dhcp/DhcpClient;->notifySuccess()V
+PLandroid/net/dhcp/DhcpClient;->registerForPreDhcpNotification()V
+PLandroid/net/dhcp/DhcpClient;->scheduleLeaseTimers()V
+PLandroid/net/dhcp/DhcpClient;->sendDiscoverPacket()Z
+PLandroid/net/dhcp/DhcpClient;->sendRequestPacket(Ljava/net/Inet4Address;Ljava/net/Inet4Address;Ljava/net/Inet4Address;Ljava/net/Inet4Address;)Z
+PLandroid/net/dhcp/DhcpClient;->setDhcpLeaseExpiry(Landroid/net/dhcp/DhcpPacket;)V
+PLandroid/net/dhcp/DhcpClient;->startNewTransaction()V
+PLandroid/net/dhcp/DhcpClient;->transmitPacket(Ljava/nio/ByteBuffer;Ljava/lang/String;ILjava/net/Inet4Address;)Z
+PLandroid/net/dhcp/DhcpDiscoverPacket;-><init>(IS[BZ)V
+PLandroid/net/dhcp/DhcpDiscoverPacket;->buildPacket(ISS)Ljava/nio/ByteBuffer;
+PLandroid/net/dhcp/DhcpDiscoverPacket;->finishPacket(Ljava/nio/ByteBuffer;)V
+PLandroid/net/dhcp/DhcpDiscoverPacket;->toString()Ljava/lang/String;
+PLandroid/net/dhcp/DhcpOfferPacket;-><init>(ISZLjava/net/Inet4Address;Ljava/net/Inet4Address;Ljava/net/Inet4Address;[B)V
+PLandroid/net/dhcp/DhcpOfferPacket;->toString()Ljava/lang/String;
+PLandroid/net/dhcp/DhcpPacket;-><init>(ISLjava/net/Inet4Address;Ljava/net/Inet4Address;Ljava/net/Inet4Address;Ljava/net/Inet4Address;[BZ)V
+PLandroid/net/dhcp/DhcpPacket;->addCommonClientTlvs(Ljava/nio/ByteBuffer;)V
+PLandroid/net/dhcp/DhcpPacket;->addTlv(Ljava/nio/ByteBuffer;BB)V
+PLandroid/net/dhcp/DhcpPacket;->addTlv(Ljava/nio/ByteBuffer;BLjava/lang/Short;)V
+PLandroid/net/dhcp/DhcpPacket;->addTlv(Ljava/nio/ByteBuffer;BLjava/lang/String;)V
+PLandroid/net/dhcp/DhcpPacket;->addTlv(Ljava/nio/ByteBuffer;BLjava/net/Inet4Address;)V
+PLandroid/net/dhcp/DhcpPacket;->addTlv(Ljava/nio/ByteBuffer;B[B)V
+PLandroid/net/dhcp/DhcpPacket;->addTlvEnd(Ljava/nio/ByteBuffer;)V
+PLandroid/net/dhcp/DhcpPacket;->buildDiscoverPacket(IIS[BZ[B)Ljava/nio/ByteBuffer;
+PLandroid/net/dhcp/DhcpPacket;->buildRequestPacket(IISLjava/net/Inet4Address;Z[BLjava/net/Inet4Address;Ljava/net/Inet4Address;[BLjava/lang/String;)Ljava/nio/ByteBuffer;
+PLandroid/net/dhcp/DhcpPacket;->decodeFullPacket([BII)Landroid/net/dhcp/DhcpPacket;
+PLandroid/net/dhcp/DhcpPacket;->getClientId()[B
+PLandroid/net/dhcp/DhcpPacket;->getClientMac()[B
+PLandroid/net/dhcp/DhcpPacket;->getHostname()Ljava/lang/String;
+PLandroid/net/dhcp/DhcpPacket;->getLeaseTimeMillis()J
+PLandroid/net/dhcp/DhcpPacket;->getTransactionId()I
+PLandroid/net/dhcp/DhcpPacket;->getVendorId()Ljava/lang/String;
+PLandroid/net/dhcp/DhcpPacket;->isPacketToOrFromClient(SS)Z
+PLandroid/net/dhcp/DhcpPacket;->readAsciiString(Ljava/nio/ByteBuffer;IZ)Ljava/lang/String;
+PLandroid/net/dhcp/DhcpPacket;->toDhcpResults()Landroid/net/DhcpResults;
+PLandroid/net/dhcp/DhcpPacket;->toString()Ljava/lang/String;
+PLandroid/net/dhcp/DhcpRequestPacket;-><init>(ISLjava/net/Inet4Address;[BZ)V
+PLandroid/net/dhcp/DhcpRequestPacket;->buildPacket(ISS)Ljava/nio/ByteBuffer;
+PLandroid/net/dhcp/DhcpRequestPacket;->finishPacket(Ljava/nio/ByteBuffer;)V
+PLandroid/net/dhcp/DhcpRequestPacket;->toString()Ljava/lang/String;
+PLandroid/net/ip/-$Lambda$EIaFPv5OO8Upo9X60vMtrcUNUEQ;->$m$1()V
+PLandroid/net/ip/-$Lambda$Ew7nO2XMmp8bwulVlFTiHphyunQ$2;-><init>(Ljava/lang/Object;)V
+PLandroid/net/ip/ConnectivityPacketTracker$PacketListener;-><init>(Landroid/net/ip/ConnectivityPacketTracker;I[BI)V
+PLandroid/net/ip/ConnectivityPacketTracker$PacketListener;->createSocket()Ljava/io/FileDescriptor;
+PLandroid/net/ip/ConnectivityPacketTracker;-><init>(Ljava/net/NetworkInterface;Landroid/util/LocalLog;)V
+PLandroid/net/ip/ConnectivityPacketTracker;->start()V
+PLandroid/net/ip/IpManager$1;-><init>(Landroid/net/ip/IpManager;)V
+PLandroid/net/ip/IpManager$1;->update()V
+PLandroid/net/ip/IpManager$2;-><init>(Landroid/net/ip/IpManager;Ljava/lang/String;Lcom/android/server/net/NetlinkTracker$Callback;)V
+PLandroid/net/ip/IpManager$2;->interfaceAdded(Ljava/lang/String;)V
+PLandroid/net/ip/IpManager$2;->interfaceRemoved(Ljava/lang/String;)V
+PLandroid/net/ip/IpManager$2;->lambda$-android_net_ip_IpManager$2_26299(Ljava/lang/String;)V
+PLandroid/net/ip/IpManager$2;->logMsg(Ljava/lang/String;)V
+PLandroid/net/ip/IpManager$3;-><init>(Landroid/net/ip/IpManager;)V
+PLandroid/net/ip/IpManager$Callback;-><init>()V
+PLandroid/net/ip/IpManager$InitialConfiguration;->copy(Landroid/net/ip/IpManager$InitialConfiguration;)Landroid/net/ip/IpManager$InitialConfiguration;
+PLandroid/net/ip/IpManager$LoggingCallbackWrapper;-><init>(Landroid/net/ip/IpManager;Landroid/net/ip/IpManager$Callback;)V
+PLandroid/net/ip/IpManager$LoggingCallbackWrapper;->installPacketFilter([B)V
+PLandroid/net/ip/IpManager$LoggingCallbackWrapper;->onLinkPropertiesChange(Landroid/net/LinkProperties;)V
+PLandroid/net/ip/IpManager$LoggingCallbackWrapper;->onNewDhcpResults(Landroid/net/DhcpResults;)V
+PLandroid/net/ip/IpManager$LoggingCallbackWrapper;->onPostDhcpAction()V
+PLandroid/net/ip/IpManager$LoggingCallbackWrapper;->onPreDhcpAction()V
+PLandroid/net/ip/IpManager$LoggingCallbackWrapper;->onProvisioningSuccess(Landroid/net/LinkProperties;)V
+PLandroid/net/ip/IpManager$LoggingCallbackWrapper;->setNeighborDiscoveryOffload(Z)V
+PLandroid/net/ip/IpManager$MessageHandlingLogger;-><init>()V
+PLandroid/net/ip/IpManager$MessageHandlingLogger;-><init>(Landroid/net/ip/IpManager$MessageHandlingLogger;)V
+PLandroid/net/ip/IpManager$MessageHandlingLogger;->handled(Lcom/android/internal/util/State;Lcom/android/internal/util/IState;)V
+PLandroid/net/ip/IpManager$MessageHandlingLogger;->reset()V
+PLandroid/net/ip/IpManager$MessageHandlingLogger;->toString()Ljava/lang/String;
+PLandroid/net/ip/IpManager$ProvisioningConfiguration$Builder;-><init>()V
+PLandroid/net/ip/IpManager$ProvisioningConfiguration$Builder;->build()Landroid/net/ip/IpManager$ProvisioningConfiguration;
+PLandroid/net/ip/IpManager$ProvisioningConfiguration$Builder;->withApfCapabilities(Landroid/net/apf/ApfCapabilities;)Landroid/net/ip/IpManager$ProvisioningConfiguration$Builder;
+PLandroid/net/ip/IpManager$ProvisioningConfiguration$Builder;->withPreDhcpAction()Landroid/net/ip/IpManager$ProvisioningConfiguration$Builder;
+PLandroid/net/ip/IpManager$ProvisioningConfiguration;-><init>()V
+PLandroid/net/ip/IpManager$ProvisioningConfiguration;-><init>(Landroid/net/ip/IpManager$ProvisioningConfiguration;)V
+PLandroid/net/ip/IpManager$ProvisioningConfiguration;->isValid()Z
+PLandroid/net/ip/IpManager$ProvisioningConfiguration;->toString()Ljava/lang/String;
+PLandroid/net/ip/IpManager$RunningState;-><init>(Landroid/net/ip/IpManager;)V
+PLandroid/net/ip/IpManager$RunningState;->createPacketTracker()Landroid/net/ip/ConnectivityPacketTracker;
+PLandroid/net/ip/IpManager$RunningState;->ensureDhcpAction()V
+PLandroid/net/ip/IpManager$RunningState;->enter()V
+PLandroid/net/ip/IpManager$RunningState;->stopDhcpAction()V
+PLandroid/net/ip/IpManager$StartedState;-><init>(Landroid/net/ip/IpManager;)V
+PLandroid/net/ip/IpManager$StartedState;->enter()V
+PLandroid/net/ip/IpManager$StartedState;->readyToProceed()Z
+PLandroid/net/ip/IpManager$StoppedState;-><init>(Landroid/net/ip/IpManager;)V
+PLandroid/net/ip/IpManager$StoppedState;->enter()V
+PLandroid/net/ip/IpManager$StoppedState;->processMessage(Landroid/os/Message;)Z
+PLandroid/net/ip/IpManager$StoppingState;-><init>(Landroid/net/ip/IpManager;)V
+PLandroid/net/ip/IpManager;->-get0(Landroid/net/ip/IpManager;)Landroid/net/apf/ApfFilter;
+PLandroid/net/ip/IpManager;->-get1(Landroid/net/ip/IpManager;)Ljava/lang/String;
+PLandroid/net/ip/IpManager;->-get10(Landroid/net/ip/IpManager;)Landroid/net/util/SharedLog;
+PLandroid/net/ip/IpManager;->-get11(Landroid/net/ip/IpManager;)Landroid/net/ip/IpManager$MessageHandlingLogger;
+PLandroid/net/ip/IpManager;->-get12(Landroid/net/ip/IpManager;)Z
+PLandroid/net/ip/IpManager;->-get13(Landroid/net/ip/IpManager;)Ljava/net/NetworkInterface;
+PLandroid/net/ip/IpManager;->-get14(Landroid/net/ip/IpManager;)Lcom/android/internal/util/WakeupMessage;
+PLandroid/net/ip/IpManager;->-get15(Landroid/net/ip/IpManager;)Lcom/android/internal/util/State;
+PLandroid/net/ip/IpManager;->-get16(Landroid/net/ip/IpManager;)J
+PLandroid/net/ip/IpManager;->-get17(Landroid/net/ip/IpManager;)Lcom/android/internal/util/State;
+PLandroid/net/ip/IpManager;->-get2(Landroid/net/ip/IpManager;)Landroid/net/ip/IpManager$ProvisioningConfiguration;
+PLandroid/net/ip/IpManager;->-get20(Landroid/net/ip/IpManager;)Ljava/lang/String;
+PLandroid/net/ip/IpManager;->-get3(Landroid/net/ip/IpManager;)Landroid/util/LocalLog;
+PLandroid/net/ip/IpManager;->-get4(Landroid/net/ip/IpManager;)Landroid/content/Context;
+PLandroid/net/ip/IpManager;->-get5(Landroid/net/ip/IpManager;)Lcom/android/internal/util/WakeupMessage;
+PLandroid/net/ip/IpManager;->-get6(Landroid/net/ip/IpManager;)Landroid/net/dhcp/DhcpClient;
+PLandroid/net/ip/IpManager;->-get7(Landroid/net/ip/IpManager;)Ljava/lang/String;
+PLandroid/net/ip/IpManager;->-get8(Landroid/net/ip/IpManager;)Landroid/net/ip/IpReachabilityMonitor;
+PLandroid/net/ip/IpManager;->-get9(Landroid/net/ip/IpManager;)Landroid/net/LinkProperties;
+PLandroid/net/ip/IpManager;->-getandroid-net-LinkProperties$ProvisioningChangeSwitchesValues()[I
+PLandroid/net/ip/IpManager;->-set0(Landroid/net/ip/IpManager;Landroid/net/apf/ApfFilter;)Landroid/net/apf/ApfFilter;
+PLandroid/net/ip/IpManager;->-set1(Landroid/net/ip/IpManager;Landroid/net/ip/IpManager$ProvisioningConfiguration;)Landroid/net/ip/IpManager$ProvisioningConfiguration;
+PLandroid/net/ip/IpManager;->-set3(Landroid/net/ip/IpManager;Landroid/net/ProxyInfo;)Landroid/net/ProxyInfo;
+PLandroid/net/ip/IpManager;->-set5(Landroid/net/ip/IpManager;Z)Z
+PLandroid/net/ip/IpManager;->-set6(Landroid/net/ip/IpManager;J)J
+PLandroid/net/ip/IpManager;->-set7(Landroid/net/ip/IpManager;Ljava/lang/String;)Ljava/lang/String;
+PLandroid/net/ip/IpManager;->-wrap1(Landroid/net/ip/IpManager;Z)Z
+PLandroid/net/ip/IpManager;->-wrap10(Landroid/net/ip/IpManager;Landroid/net/DhcpResults;)V
+PLandroid/net/ip/IpManager;->-wrap14(Landroid/net/ip/IpManager;)V
+PLandroid/net/ip/IpManager;->-wrap15(Landroid/net/ip/IpManager;)V
+PLandroid/net/ip/IpManager;->-wrap2(Landroid/net/ip/IpManager;Landroid/net/LinkAddress;)Z
+PLandroid/net/ip/IpManager;->-wrap3(Landroid/net/ip/IpManager;)Z
+PLandroid/net/ip/IpManager;->-wrap4(Landroid/net/ip/IpManager;)Z
+PLandroid/net/ip/IpManager;->-wrap5(Landroid/net/ip/IpManager;)Z
+PLandroid/net/ip/IpManager;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/net/ip/IpManager$Callback;)V
+PLandroid/net/ip/IpManager;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/net/ip/IpManager$Callback;Landroid/os/INetworkManagementService;Landroid/net/INetd;)V
+PLandroid/net/ip/IpManager;->buildProvisioningConfiguration()Landroid/net/ip/IpManager$ProvisioningConfiguration$Builder;
+PLandroid/net/ip/IpManager;->compareProvisioning(Landroid/net/LinkProperties;Landroid/net/LinkProperties;)Landroid/net/LinkProperties$ProvisioningChange;
+PLandroid/net/ip/IpManager;->completedPreDhcpAction()V
+PLandroid/net/ip/IpManager;->configureAndStartStateMachine()V
+PLandroid/net/ip/IpManager;->confirmConfiguration()V
+PLandroid/net/ip/IpManager;->dispatchCallback(Landroid/net/LinkProperties$ProvisioningChange;Landroid/net/LinkProperties;)V
+PLandroid/net/ip/IpManager;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLandroid/net/ip/IpManager;->getNetworkInterface()V
+PLandroid/net/ip/IpManager;->handleIPv4Success(Landroid/net/DhcpResults;)V
+PLandroid/net/ip/IpManager;->handleLinkPropertiesUpdate(Z)Z
+PLandroid/net/ip/IpManager;->isProvisioned(Landroid/net/LinkProperties;Landroid/net/ip/IpManager$InitialConfiguration;)Z
+PLandroid/net/ip/IpManager;->recordLogRec(Landroid/os/Message;)Z
+PLandroid/net/ip/IpManager;->recordMetric(I)V
+PLandroid/net/ip/IpManager;->resetLinkProperties()V
+PLandroid/net/ip/IpManager;->setHttpProxy(Landroid/net/ProxyInfo;)V
+PLandroid/net/ip/IpManager;->setIPv4Address(Landroid/net/LinkAddress;)Z
+PLandroid/net/ip/IpManager;->setIPv6AddrGenModeIfSupported()V
+PLandroid/net/ip/IpManager;->setLinkProperties(Landroid/net/LinkProperties;)Landroid/net/LinkProperties$ProvisioningChange;
+PLandroid/net/ip/IpManager;->setMulticastFilter(Z)V
+PLandroid/net/ip/IpManager;->setTcpBufferSizes(Ljava/lang/String;)V
+PLandroid/net/ip/IpManager;->startIPv4()Z
+PLandroid/net/ip/IpManager;->startIPv6()Z
+PLandroid/net/ip/IpManager;->startIpReachabilityMonitor()Z
+PLandroid/net/ip/IpManager;->startProvisioning(Landroid/net/ip/IpManager$ProvisioningConfiguration;)V
+PLandroid/net/ip/IpManager;->startStateMachineUpdaters()V
+PLandroid/net/ip/IpManager;->stop()V
+PLandroid/net/ip/IpManager;->stopAllIP()V
+PLandroid/net/ip/IpReachabilityMonitor$NetlinkSocketObserver;-><init>(Landroid/net/ip/IpReachabilityMonitor;)V
+PLandroid/net/ip/IpReachabilityMonitor$NetlinkSocketObserver;-><init>(Landroid/net/ip/IpReachabilityMonitor;Landroid/net/ip/IpReachabilityMonitor$NetlinkSocketObserver;)V
+PLandroid/net/ip/IpReachabilityMonitor$NetlinkSocketObserver;->clearNetlinkSocket()V
+PLandroid/net/ip/IpReachabilityMonitor$NetlinkSocketObserver;->setupNetlinkSocket()V
+PLandroid/net/ip/IpReachabilityMonitor;->-set0(Landroid/net/ip/IpReachabilityMonitor;Z)Z
+PLandroid/net/ip/IpReachabilityMonitor;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/net/util/SharedLog;Landroid/net/ip/IpReachabilityMonitor$Callback;Landroid/net/util/MultinetworkPolicyTracker;)V
+PLandroid/net/ip/IpReachabilityMonitor;->getNeighborStateLocked(Ljava/net/InetAddress;)S
+PLandroid/net/ip/IpReachabilityMonitor;->probeAll()V
+PLandroid/net/metrics/INetdEventListener$Stub;-><init>()V
+PLandroid/net/netlink/NetlinkSocket;-><init>(I)V
+PLandroid/net/netlink/NetlinkSocket;->bind(Landroid/system/NetlinkSocketAddress;)V
+PLandroid/net/util/-$Lambda$uAc0-SfvAbf39zjOK01b1lQkeVs;->$m$0()V
+PLandroid/net/util/-$Lambda$uAc0-SfvAbf39zjOK01b1lQkeVs;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLandroid/net/util/-$Lambda$uAc0-SfvAbf39zjOK01b1lQkeVs;->run()V
+PLandroid/net/util/-$Lambda$uJqW9o1MiZ5yyXhSTG2zE-YhRn0;->$m$0()V
+PLandroid/net/util/-$Lambda$uJqW9o1MiZ5yyXhSTG2zE-YhRn0;-><init>(Ljava/lang/Object;)V
+PLandroid/net/util/-$Lambda$uJqW9o1MiZ5yyXhSTG2zE-YhRn0;->run()V
+PLandroid/net/util/BlockingSocketReader;-><init>(I)V
+PLandroid/net/util/BlockingSocketReader;->lambda$-android_net_util_BlockingSocketReader_2194()V
+PLandroid/net/util/BlockingSocketReader;->start()Z
+PLandroid/net/util/ConnectivityPacketSummary;->parseDHCPv4(Ljava/util/StringJoiner;)V
+PLandroid/net/util/ConnectivityPacketSummary;->parseICMPv6RouterAdvertisement(Ljava/util/StringJoiner;)V
+PLandroid/net/util/ConnectivityPacketSummary;->parseICMPv6RouterSolicitation(Ljava/util/StringJoiner;)V
+PLandroid/net/util/MultinetworkPolicyTracker$1;-><init>(Landroid/net/util/MultinetworkPolicyTracker;)V
+PLandroid/net/util/MultinetworkPolicyTracker$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLandroid/net/util/MultinetworkPolicyTracker$SettingObserver;-><init>(Landroid/net/util/MultinetworkPolicyTracker;)V
+PLandroid/net/util/MultinetworkPolicyTracker;-><init>(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/Runnable;)V
+PLandroid/net/util/MultinetworkPolicyTracker;->configMeteredMultipathPreference()I
+PLandroid/net/util/MultinetworkPolicyTracker;->configRestrictsAvoidBadWifi()Z
+PLandroid/net/util/MultinetworkPolicyTracker;->getAvoidBadWifi()Z
+PLandroid/net/util/MultinetworkPolicyTracker;->getAvoidBadWifiSetting()Ljava/lang/String;
+PLandroid/net/util/MultinetworkPolicyTracker;->lambda$-android_net_util_MultinetworkPolicyTracker_2908(Ljava/lang/Runnable;)V
+PLandroid/net/util/MultinetworkPolicyTracker;->reevaluate()V
+PLandroid/net/util/MultinetworkPolicyTracker;->start()V
+PLandroid/net/util/MultinetworkPolicyTracker;->updateAvoidBadWifi()Z
+PLandroid/net/util/MultinetworkPolicyTracker;->updateMeteredMultipathPreference()V
+PLandroid/net/util/NetdService;->get()Landroid/net/INetd;
+PLandroid/net/util/NetdService;->get(J)Landroid/net/INetd;
+PLandroid/net/util/NetdService;->getInstance()Landroid/net/INetd;
+PLandroid/net/util/NetworkConstants;->asByte(I)B
+PLandroid/net/util/NetworkConstants;->asString(I)Ljava/lang/String;
+PLandroid/net/util/PrefixUtils;->addNonForwardablePrefixes(Ljava/util/Set;)V
+PLandroid/net/util/PrefixUtils;->pfx(Ljava/lang/String;)Landroid/net/IpPrefix;
+PLandroid/net/util/SharedLog$Category;-><init>(Ljava/lang/String;I)V
+PLandroid/net/util/SharedLog;-><init>(ILjava/lang/String;)V
+PLandroid/net/util/SharedLog;-><init>(Landroid/util/LocalLog;Ljava/lang/String;Ljava/lang/String;)V
+PLandroid/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;->forSubComponent(Ljava/lang/String;)Landroid/net/util/SharedLog;
+PLandroid/net/util/SharedLog;->mark(Ljava/lang/String;)V
+PLandroid/net/util/Stopwatch;-><init>()V
+PLandroid/net/util/Stopwatch;->isRunning()Z
+PLandroid/net/util/Stopwatch;->isStarted()Z
+PLandroid/net/util/Stopwatch;->isStopped()Z
+PLandroid/net/util/Stopwatch;->reset()V
+PLandroid/net/util/Stopwatch;->start()Landroid/net/util/Stopwatch;
+PLandroid/net/util/Stopwatch;->stop()J
+PLandroid/net/wifi/IClientInterface$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+PLandroid/net/wifi/IClientInterface$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+PLandroid/net/wifi/IClientInterface$Stub$Proxy;->enableSupplicant()Z
+PLandroid/net/wifi/IClientInterface$Stub$Proxy;->getInterfaceName()Ljava/lang/String;
+PLandroid/net/wifi/IClientInterface$Stub$Proxy;->getWifiScannerImpl()Landroid/net/wifi/IWifiScannerImpl;
+PLandroid/net/wifi/IClientInterface$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IClientInterface;
+PLandroid/net/wifi/IPnoScanEvent$Stub;-><init>()V
+PLandroid/net/wifi/IPnoScanEvent$Stub;->asBinder()Landroid/os/IBinder;
+PLandroid/net/wifi/IScanEvent$Stub;-><init>()V
+PLandroid/net/wifi/IScanEvent$Stub;->asBinder()Landroid/os/IBinder;
+PLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+PLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->abortScan()V
+PLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->asBinder()Landroid/os/IBinder;
+PLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->subscribePnoScanEvents(Landroid/net/wifi/IPnoScanEvent;)V
+PLandroid/net/wifi/IWifiScannerImpl$Stub$Proxy;->subscribeScanEvents(Landroid/net/wifi/IScanEvent;)V
+PLandroid/net/wifi/IWifiScannerImpl$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiScannerImpl;
+PLandroid/net/wifi/IWificond$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+PLandroid/net/wifi/IWificond$Stub$Proxy;->createClientInterface()Landroid/net/wifi/IClientInterface;
+PLandroid/net/wifi/IWificond$Stub$Proxy;->tearDownInterfaces()V
+PLandroid/net/wifi/IWificond$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWificond;
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$1;->$m$0(Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$1;-><init>(BLjava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$2;->$m$0(Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$2;-><init>(JLjava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$2;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$3;->$m$0(Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$3;-><init>(BZLjava/lang/Object;)V
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg$3;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg;->$m$0(Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg;->$m$1(Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg;->$m$2(Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg;->$m$3(Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/-$Lambda$9jO-pgghrn5IhueuFzPwKVTwWXg;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/-$Lambda$AZbCJpvy__SzB8YDjhldiwCtqD8;->$m$0(Lcom/android/server/NsdService$NativeCallbackReceiver;)Lcom/android/server/NsdService$DaemonConnection;
+PLcom/android/server/-$Lambda$AZbCJpvy__SzB8YDjhldiwCtqD8;-><init>()V
+PLcom/android/server/-$Lambda$AZbCJpvy__SzB8YDjhldiwCtqD8;->get(Lcom/android/server/NsdService$NativeCallbackReceiver;)Lcom/android/server/NsdService$DaemonConnection;
+PLcom/android/server/-$Lambda$Ash-36Gr90yYPZEIENlguvJE7uk;->$m$0(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/-$Lambda$Ash-36Gr90yYPZEIENlguvJE7uk;-><init>()V
+PLcom/android/server/-$Lambda$Ash-36Gr90yYPZEIENlguvJE7uk;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/-$Lambda$Ganck_s9Kl5o2K6eVDoQTKLc-6g;->$m$1()V
+PLcom/android/server/-$Lambda$T7cKu_OKm_Fk2kBNthmo_uUJTSo$1;->$m$0()V
+PLcom/android/server/-$Lambda$T7cKu_OKm_Fk2kBNthmo_uUJTSo$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/-$Lambda$T7cKu_OKm_Fk2kBNthmo_uUJTSo$1;->run()V
+PLcom/android/server/-$Lambda$T7cKu_OKm_Fk2kBNthmo_uUJTSo$2;->$m$0()V
+PLcom/android/server/-$Lambda$T7cKu_OKm_Fk2kBNthmo_uUJTSo$2;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/-$Lambda$T7cKu_OKm_Fk2kBNthmo_uUJTSo$2;->run()V
+PLcom/android/server/-$Lambda$T7cKu_OKm_Fk2kBNthmo_uUJTSo;->$m$1()V
+PLcom/android/server/-$Lambda$T7cKu_OKm_Fk2kBNthmo_uUJTSo;->$m$2()V
+PLcom/android/server/-$Lambda$T7cKu_OKm_Fk2kBNthmo_uUJTSo;->$m$3()V
+PLcom/android/server/-$Lambda$VaVGUZuNs2jqHMhhxPzwNl4zK-M;->$m$3()V
+PLcom/android/server/-$Lambda$VaVGUZuNs2jqHMhhxPzwNl4zK-M;->$m$4()V
+PLcom/android/server/-$Lambda$VaVGUZuNs2jqHMhhxPzwNl4zK-M;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/-$Lambda$VaVGUZuNs2jqHMhhxPzwNl4zK-M;->run()V
+PLcom/android/server/-$Lambda$o3e2BPeEiY4LSvdQI9l_B7RsPtQ;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/-$Lambda$qXtDhnbBL0MhXoSy7vXxLi-Juu4;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/AlarmManagerService$1;-><init>(Lcom/android/server/AlarmManagerService;)V
+PLcom/android/server/AlarmManagerService$1;->compare(Lcom/android/server/AlarmManagerService$Alarm;Lcom/android/server/AlarmManagerService$Alarm;)I
+PLcom/android/server/AlarmManagerService$2;-><init>(Lcom/android/server/AlarmManagerService;)V
+PLcom/android/server/AlarmManagerService$2;->setTime(J)Z
+PLcom/android/server/AlarmManagerService$AlarmHandler;-><init>(Lcom/android/server/AlarmManagerService;)V
+PLcom/android/server/AlarmManagerService$AlarmThread;-><init>(Lcom/android/server/AlarmManagerService;)V
+PLcom/android/server/AlarmManagerService$BatchTimeOrder;-><init>()V
+PLcom/android/server/AlarmManagerService$BroadcastStats;-><init>(ILjava/lang/String;)V
+PLcom/android/server/AlarmManagerService$ClockReceiver;-><init>(Lcom/android/server/AlarmManagerService;)V
+PLcom/android/server/AlarmManagerService$ClockReceiver;->scheduleDateChangedEvent()V
+PLcom/android/server/AlarmManagerService$Constants;-><init>(Lcom/android/server/AlarmManagerService;Landroid/os/Handler;)V
+PLcom/android/server/AlarmManagerService$Constants;->start(Landroid/content/ContentResolver;)V
+PLcom/android/server/AlarmManagerService$Constants;->updateAllowWhileIdleMinTimeLocked()V
+PLcom/android/server/AlarmManagerService$Constants;->updateAllowWhileIdleWhitelistDurationLocked()V
+PLcom/android/server/AlarmManagerService$Constants;->updateConstants()V
+PLcom/android/server/AlarmManagerService$DeliveryTracker;-><init>(Lcom/android/server/AlarmManagerService;)V
+PLcom/android/server/AlarmManagerService$FilterStats;-><init>(Lcom/android/server/AlarmManagerService$BroadcastStats;Ljava/lang/String;)V
+PLcom/android/server/AlarmManagerService$IncreasingTimeOrder;-><init>()V
+PLcom/android/server/AlarmManagerService$InteractiveStateReceiver;-><init>(Lcom/android/server/AlarmManagerService;)V
+PLcom/android/server/AlarmManagerService$LocalService;-><init>(Lcom/android/server/AlarmManagerService;)V
+PLcom/android/server/AlarmManagerService$LocalService;->setDeviceIdleUserWhitelist([I)V
+PLcom/android/server/AlarmManagerService$PriorityClass;-><init>(Lcom/android/server/AlarmManagerService;)V
+PLcom/android/server/AlarmManagerService$UidObserver;-><init>(Lcom/android/server/AlarmManagerService;)V
+PLcom/android/server/AlarmManagerService$UidObserver;->onUidIdle(IZ)V
+PLcom/android/server/AlarmManagerService$UninstallReceiver;-><init>(Lcom/android/server/AlarmManagerService;)V
+PLcom/android/server/AlarmManagerService;->-get1(Lcom/android/server/AlarmManagerService;)I
+PLcom/android/server/AlarmManagerService;->-get2(Lcom/android/server/AlarmManagerService;)I
+PLcom/android/server/AlarmManagerService;->-set1(Lcom/android/server/AlarmManagerService;I)I
+PLcom/android/server/AlarmManagerService;->-set2(Lcom/android/server/AlarmManagerService;I)I
+PLcom/android/server/AlarmManagerService;->-wrap1(Lcom/android/server/AlarmManagerService;ILjava/lang/String;)Lcom/android/server/AlarmManagerService$BroadcastStats;
+PLcom/android/server/AlarmManagerService;->-wrap2(Lcom/android/server/AlarmManagerService;JJ)I
+PLcom/android/server/AlarmManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/AlarmManagerService;->checkAllowNonWakeupDelayLocked(J)Z
+PLcom/android/server/AlarmManagerService;->getNextAlarmClockImpl(I)Landroid/app/AlarmManager$AlarmClockInfo;
+PLcom/android/server/AlarmManagerService;->onBootPhase(I)V
+PLcom/android/server/AlarmManagerService;->onStart()V
+PLcom/android/server/AlarmManagerService;->rebatchAllAlarms()V
+PLcom/android/server/AlarmManagerService;->removeImpl(Landroid/app/PendingIntent;)V
+PLcom/android/server/AlarmManagerService;->setDeviceIdleUserWhitelistImpl([I)V
+PLcom/android/server/AlarmManagerService;->setTimeZoneImpl(Ljava/lang/String;)V
+PLcom/android/server/AnimationThread;-><init>()V
+PLcom/android/server/AnimationThread;->ensureThreadLocked()V
+PLcom/android/server/AnimationThread;->get()Lcom/android/server/AnimationThread;
+PLcom/android/server/AnimationThread;->getHandler()Landroid/os/Handler;
+PLcom/android/server/AnyMotionDetector$1;-><init>(Lcom/android/server/AnyMotionDetector;)V
+PLcom/android/server/AnyMotionDetector$2;-><init>(Lcom/android/server/AnyMotionDetector;)V
+PLcom/android/server/AnyMotionDetector$3;-><init>(Lcom/android/server/AnyMotionDetector;)V
+PLcom/android/server/AnyMotionDetector$4;-><init>(Lcom/android/server/AnyMotionDetector;)V
+PLcom/android/server/AnyMotionDetector$RunningSignalStats;-><init>()V
+PLcom/android/server/AnyMotionDetector$RunningSignalStats;->reset()V
+PLcom/android/server/AnyMotionDetector$Vector3;-><init>(JFFF)V
+PLcom/android/server/AnyMotionDetector;-><init>(Landroid/os/PowerManager;Landroid/os/Handler;Landroid/hardware/SensorManager;Lcom/android/server/AnyMotionDetector$DeviceIdleCallback;F)V
+PLcom/android/server/AppOpsService$1$1;-><init>(Lcom/android/server/AppOpsService$1;)V
+PLcom/android/server/AppOpsService$1$1;->doInBackground([Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/AppOpsService$1$1;->doInBackground([Ljava/lang/Void;)Ljava/lang/Void;
+PLcom/android/server/AppOpsService$1;->run()V
+PLcom/android/server/AppOpsService$2;-><init>(Lcom/android/server/AppOpsService;)V
+PLcom/android/server/AppOpsService$3;-><init>(Lcom/android/server/AppOpsService;)V
+PLcom/android/server/AppOpsService$Callback;->binderDied()V
+PLcom/android/server/AppOpsService$Callback;->unlinkToDeath()V
+PLcom/android/server/AppOpsService$ClientRestrictionState;-><init>(Lcom/android/server/AppOpsService;Landroid/os/IBinder;)V
+PLcom/android/server/AppOpsService$ClientRestrictionState;->destroy()V
+PLcom/android/server/AppOpsService$ClientRestrictionState;->isDefault()Z
+PLcom/android/server/AppOpsService$ClientRestrictionState;->setRestriction(IZ[Ljava/lang/String;I)Z
+PLcom/android/server/AppOpsService$ClientState;-><init>(Lcom/android/server/AppOpsService;Landroid/os/IBinder;)V
+PLcom/android/server/AppOpsService$ClientState;->binderDied()V
+PLcom/android/server/AppOpsService$UidState;->clear()V
+PLcom/android/server/AppOpsService$UidState;->isDefault()Z
+PLcom/android/server/AppOpsService;->checkSystemUid(Ljava/lang/String;)V
+PLcom/android/server/AppOpsService;->getPackagesForUid(I)[Ljava/lang/String;
+PLcom/android/server/AppOpsService;->getToken(Landroid/os/IBinder;)Landroid/os/IBinder;
+PLcom/android/server/AppOpsService;->scheduleFastWriteLocked()V
+PLcom/android/server/AttributeCache$Entry;-><init>(Landroid/content/Context;Landroid/content/res/TypedArray;)V
+PLcom/android/server/AttributeCache$Entry;->recycle()V
+PLcom/android/server/AttributeCache$Package;-><init>(Landroid/content/Context;)V
+PLcom/android/server/AttributeCache;-><init>(Landroid/content/Context;)V
+PLcom/android/server/AttributeCache;->init(Landroid/content/Context;)V
+PLcom/android/server/AttributeCache;->removePackage(Ljava/lang/String;)V
+PLcom/android/server/AttributeCache;->updateConfiguration(Landroid/content/res/Configuration;)V
+PLcom/android/server/BatteryService$2;-><init>(Lcom/android/server/BatteryService;Landroid/os/Handler;)V
+PLcom/android/server/BatteryService$5;-><init>(Lcom/android/server/BatteryService;Landroid/content/Intent;)V
+PLcom/android/server/BatteryService$5;->run()V
+PLcom/android/server/BatteryService$6;-><init>(Lcom/android/server/BatteryService;Landroid/content/Intent;)V
+PLcom/android/server/BatteryService$6;->run()V
+PLcom/android/server/BatteryService$BatteryListener;-><init>(Lcom/android/server/BatteryService;)V
+PLcom/android/server/BatteryService$BatteryListener;-><init>(Lcom/android/server/BatteryService;Lcom/android/server/BatteryService$BatteryListener;)V
+PLcom/android/server/BatteryService$BinderService;-><init>(Lcom/android/server/BatteryService;)V
+PLcom/android/server/BatteryService$BinderService;-><init>(Lcom/android/server/BatteryService;Lcom/android/server/BatteryService$BinderService;)V
+PLcom/android/server/BatteryService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/BatteryService$Led;-><init>(Lcom/android/server/BatteryService;Landroid/content/Context;Lcom/android/server/lights/LightsManager;)V
+PLcom/android/server/BatteryService$LocalService;-><init>(Lcom/android/server/BatteryService;)V
+PLcom/android/server/BatteryService$LocalService;-><init>(Lcom/android/server/BatteryService;Lcom/android/server/BatteryService$LocalService;)V
+PLcom/android/server/BatteryService$Shell;-><init>(Lcom/android/server/BatteryService;)V
+PLcom/android/server/BatteryService$Shell;->onCommand(Ljava/lang/String;)I
+PLcom/android/server/BatteryService;->-get0()Ljava/lang/String;
+PLcom/android/server/BatteryService;->-get2(Lcom/android/server/BatteryService;)Z
+PLcom/android/server/BatteryService;->-get4(Lcom/android/server/BatteryService;)Landroid/content/Context;
+PLcom/android/server/BatteryService;->-get7(Lcom/android/server/BatteryService;)I
+PLcom/android/server/BatteryService;->-get8(Lcom/android/server/BatteryService;)I
+PLcom/android/server/BatteryService;->-wrap1(Lcom/android/server/BatteryService;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/BatteryService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/BatteryService;->dumpInternal(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/BatteryService;->onBootPhase(I)V
+PLcom/android/server/BatteryService;->onShellCommand(Lcom/android/server/BatteryService$Shell;Ljava/lang/String;)I
+PLcom/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
+PLcom/android/server/BatteryService;->shutdownIfNoPowerLocked()V
+PLcom/android/server/BatteryService;->shutdownIfOverTempLocked()V
+PLcom/android/server/BatteryService;->updateBatteryWarningLevelLocked()V
+PLcom/android/server/BluetoothManagerService$1;-><init>(Lcom/android/server/BluetoothManagerService;)V
+PLcom/android/server/BluetoothManagerService$1;->onBluetoothStateChange(II)V
+PLcom/android/server/BluetoothManagerService$2;-><init>(Lcom/android/server/BluetoothManagerService;)V
+PLcom/android/server/BluetoothManagerService$2;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+PLcom/android/server/BluetoothManagerService$3;-><init>(Lcom/android/server/BluetoothManagerService;Landroid/os/Handler;)V
+PLcom/android/server/BluetoothManagerService$4;-><init>(Lcom/android/server/BluetoothManagerService;)V
+PLcom/android/server/BluetoothManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/BluetoothManagerService$5;-><init>(Lcom/android/server/BluetoothManagerService;Landroid/os/Handler;)V
+PLcom/android/server/BluetoothManagerService$ActiveLog;-><init>(Lcom/android/server/BluetoothManagerService;Ljava/lang/String;ZJ)V
+PLcom/android/server/BluetoothManagerService$BluetoothHandler;-><init>(Lcom/android/server/BluetoothManagerService;Landroid/os/Looper;)V
+PLcom/android/server/BluetoothManagerService$BluetoothServiceConnection;-><init>(Lcom/android/server/BluetoothManagerService;)V
+PLcom/android/server/BluetoothManagerService$BluetoothServiceConnection;-><init>(Lcom/android/server/BluetoothManagerService;Lcom/android/server/BluetoothManagerService$BluetoothServiceConnection;)V
+PLcom/android/server/BluetoothManagerService$BluetoothServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)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$ProfileServiceConnections;->-wrap0(Lcom/android/server/BluetoothManagerService$ProfileServiceConnections;)Z
+PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->-wrap1(Lcom/android/server/BluetoothManagerService$ProfileServiceConnections;Landroid/bluetooth/IBluetoothProfileServiceConnection;)V
+PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;-><init>(Lcom/android/server/BluetoothManagerService;Landroid/content/Intent;)V
+PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->addProxy(Landroid/bluetooth/IBluetoothProfileServiceConnection;)V
+PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->bindService()Z
+PLcom/android/server/BluetoothManagerService$ProfileServiceConnections;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/BluetoothManagerService;->-get0(Lcom/android/server/BluetoothManagerService;)Z
+PLcom/android/server/BluetoothManagerService;->-get1(Lcom/android/server/BluetoothManagerService;)Landroid/bluetooth/IBluetooth;
+PLcom/android/server/BluetoothManagerService;->-get10(Lcom/android/server/BluetoothManagerService;)Lcom/android/server/BluetoothManagerService$BluetoothHandler;
+PLcom/android/server/BluetoothManagerService;->-get11(Lcom/android/server/BluetoothManagerService;)Ljava/util/Map;
+PLcom/android/server/BluetoothManagerService;->-get12(Lcom/android/server/BluetoothManagerService;)Z
+PLcom/android/server/BluetoothManagerService;->-get15(Lcom/android/server/BluetoothManagerService;)Landroid/os/RemoteCallbackList;
+PLcom/android/server/BluetoothManagerService;->-get2(Lcom/android/server/BluetoothManagerService;)Landroid/bluetooth/IBluetoothCallback;
+PLcom/android/server/BluetoothManagerService;->-get3(Lcom/android/server/BluetoothManagerService;)Ljava/util/concurrent/locks/ReentrantReadWriteLock;
+PLcom/android/server/BluetoothManagerService;->-get4(Lcom/android/server/BluetoothManagerService;)Landroid/os/RemoteCallbackList;
+PLcom/android/server/BluetoothManagerService;->-get7(Lcom/android/server/BluetoothManagerService;)Z
+PLcom/android/server/BluetoothManagerService;->-get9(Lcom/android/server/BluetoothManagerService;)I
+PLcom/android/server/BluetoothManagerService;->-set0(Lcom/android/server/BluetoothManagerService;Z)Z
+PLcom/android/server/BluetoothManagerService;->-set1(Lcom/android/server/BluetoothManagerService;Landroid/bluetooth/IBluetooth;)Landroid/bluetooth/IBluetooth;
+PLcom/android/server/BluetoothManagerService;->-set2(Lcom/android/server/BluetoothManagerService;Landroid/os/IBinder;)Landroid/os/IBinder;
+PLcom/android/server/BluetoothManagerService;->-set3(Lcom/android/server/BluetoothManagerService;Landroid/bluetooth/IBluetoothGatt;)Landroid/bluetooth/IBluetoothGatt;
+PLcom/android/server/BluetoothManagerService;->-set4(Lcom/android/server/BluetoothManagerService;Z)Z
+PLcom/android/server/BluetoothManagerService;->-set7(Lcom/android/server/BluetoothManagerService;Z)Z
+PLcom/android/server/BluetoothManagerService;->-set8(Lcom/android/server/BluetoothManagerService;I)I
+PLcom/android/server/BluetoothManagerService;->-wrap11(Lcom/android/server/BluetoothManagerService;Z)V
+PLcom/android/server/BluetoothManagerService;->-wrap12(Lcom/android/server/BluetoothManagerService;)V
+PLcom/android/server/BluetoothManagerService;->-wrap16(Lcom/android/server/BluetoothManagerService;)V
+PLcom/android/server/BluetoothManagerService;->-wrap19(Lcom/android/server/BluetoothManagerService;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/BluetoothManagerService;->-wrap2(Lcom/android/server/BluetoothManagerService;)Z
+PLcom/android/server/BluetoothManagerService;->-wrap7(Lcom/android/server/BluetoothManagerService;II)V
+PLcom/android/server/BluetoothManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/BluetoothManagerService;->addActiveLog(Ljava/lang/String;Z)V
+PLcom/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;->doBind(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z
+PLcom/android/server/BluetoothManagerService;->getAddress()Ljava/lang/String;
+PLcom/android/server/BluetoothManagerService;->getBluetoothGatt()Landroid/bluetooth/IBluetoothGatt;
+PLcom/android/server/BluetoothManagerService;->handleEnable(Z)V
+PLcom/android/server/BluetoothManagerService;->handleOnBootPhase()V
+PLcom/android/server/BluetoothManagerService;->handleOnUnlockUser(I)V
+PLcom/android/server/BluetoothManagerService;->isBleAppPresent()Z
+PLcom/android/server/BluetoothManagerService;->isBluetoothDisallowed()Z
+PLcom/android/server/BluetoothManagerService;->isBluetoothPersistedStateOn()Z
+PLcom/android/server/BluetoothManagerService;->isBluetoothPersistedStateOnBluetooth()Z
+PLcom/android/server/BluetoothManagerService;->isNameAndAddressSet()Z
+PLcom/android/server/BluetoothManagerService;->loadStoredNameAndAddress()V
+PLcom/android/server/BluetoothManagerService;->onBluetoothGattServiceUp()V
+PLcom/android/server/BluetoothManagerService;->persistBluetoothSetting(I)V
+PLcom/android/server/BluetoothManagerService;->registerAdapter(Landroid/bluetooth/IBluetoothManagerCallback;)Landroid/bluetooth/IBluetooth;
+PLcom/android/server/BluetoothManagerService;->registerForBleScanModeChange()V
+PLcom/android/server/BluetoothManagerService;->registerStateChangeCallback(Landroid/bluetooth/IBluetoothStateChangeCallback;)V
+PLcom/android/server/BluetoothManagerService;->sendBleStateChanged(II)V
+PLcom/android/server/BluetoothManagerService;->sendBluetoothServiceUpCallback()V
+PLcom/android/server/BluetoothManagerService;->sendBluetoothStateCallback(Z)V
+PLcom/android/server/BluetoothManagerService;->sendEnableMsg(ZLjava/lang/String;)V
+PLcom/android/server/BluetoothManagerService;->storeNameAndAddress(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/BluetoothManagerService;->unregisterStateChangeCallback(Landroid/bluetooth/IBluetoothStateChangeCallback;)V
+PLcom/android/server/BluetoothManagerService;->updateBleAppCount(Landroid/os/IBinder;ZLjava/lang/String;)I
+PLcom/android/server/BluetoothService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/BluetoothService;->onBootPhase(I)V
+PLcom/android/server/BluetoothService;->onStart()V
+PLcom/android/server/BluetoothService;->onUnlockUser(I)V
+PLcom/android/server/CertBlacklister$BlacklistObserver;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentResolver;)V
+PLcom/android/server/CertBlacklister;-><init>(Landroid/content/Context;)V
+PLcom/android/server/CertBlacklister;->buildPubkeyObserver(Landroid/content/ContentResolver;)Lcom/android/server/CertBlacklister$BlacklistObserver;
+PLcom/android/server/CertBlacklister;->buildSerialObserver(Landroid/content/ContentResolver;)Lcom/android/server/CertBlacklister$BlacklistObserver;
+PLcom/android/server/CertBlacklister;->registerObservers(Landroid/content/ContentResolver;)V
+PLcom/android/server/CommonTimeManagementService$1;-><init>(Lcom/android/server/CommonTimeManagementService;)V
+PLcom/android/server/CommonTimeManagementService$2;-><init>(Lcom/android/server/CommonTimeManagementService;)V
+PLcom/android/server/CommonTimeManagementService$InterfaceScoreRule;-><init>(Ljava/lang/String;B)V
+PLcom/android/server/CommonTimeManagementService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/CommonTimeManagementService;->systemRunning()V
+PLcom/android/server/ConnectivityService$1;-><init>(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService$2;-><init>(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService$2;->onMeteredIfacesChanged([Ljava/lang/String;)V
+PLcom/android/server/ConnectivityService$2;->onUidRulesChanged(II)V
+PLcom/android/server/ConnectivityService$3;-><init>(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/ConnectivityService$4;-><init>(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/ConnectivityService$InternalHandler;-><init>(Lcom/android/server/ConnectivityService;Landroid/os/Looper;)V
+PLcom/android/server/ConnectivityService$LegacyTypeTracker;-><init>(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService$LegacyTypeTracker;->add(ILcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService$LegacyTypeTracker;->addSupportedType(I)V
+PLcom/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;
+PLcom/android/server/ConnectivityService$NetworkFactoryInfo;-><init>(Ljava/lang/String;Landroid/os/Messenger;Lcom/android/internal/util/AsyncChannel;)V
+PLcom/android/server/ConnectivityService$NetworkRequestInfo;->binderDied()V
+PLcom/android/server/ConnectivityService$NetworkRequestInfo;->enforceRequestCountLimit()V
+PLcom/android/server/ConnectivityService$NetworkRequestInfo;->unlinkDeathRecipient()V
+PLcom/android/server/ConnectivityService$NetworkStateTrackerHandler;-><init>(Lcom/android/server/ConnectivityService;Landroid/os/Looper;)V
+PLcom/android/server/ConnectivityService$ReapUnvalidatedNetworks;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/ConnectivityService$SettingsObserver;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
+PLcom/android/server/ConnectivityService$SettingsObserver;->observe(Landroid/net/Uri;I)V
+PLcom/android/server/ConnectivityService$UnneededFor;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/ConnectivityService$UnneededFor;->values()[Lcom/android/server/ConnectivityService$UnneededFor;
+PLcom/android/server/ConnectivityService$ValidationLog;-><init>(Landroid/net/Network;Ljava/lang/String;Landroid/util/LocalLog$ReadOnlyLocalLog;)V
+PLcom/android/server/ConnectivityService;->-get1(Lcom/android/server/ConnectivityService;)Landroid/content/Context;
+PLcom/android/server/ConnectivityService;->-get5(Lcom/android/server/ConnectivityService;)Landroid/util/SparseArray;
+PLcom/android/server/ConnectivityService;->-get6(Lcom/android/server/ConnectivityService;)Lcom/android/server/connectivity/NetworkNotificationManager;
+PLcom/android/server/ConnectivityService;->-get8(Lcom/android/server/ConnectivityService;)Landroid/util/SparseIntArray;
+PLcom/android/server/ConnectivityService;->-wrap0(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)Z
+PLcom/android/server/ConnectivityService;->-wrap10(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService;->-wrap12(Lcom/android/server/ConnectivityService;Landroid/net/Network;)V
+PLcom/android/server/ConnectivityService;->-wrap13(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->-wrap14(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$NetworkFactoryInfo;)V
+PLcom/android/server/ConnectivityService;->-wrap16(Lcom/android/server/ConnectivityService;Lcom/android/server/ConnectivityService$NetworkRequestInfo;)V
+PLcom/android/server/ConnectivityService;->-wrap18(Lcom/android/server/ConnectivityService;Landroid/net/NetworkRequest;I)V
+PLcom/android/server/ConnectivityService;->-wrap2(I)Z
+PLcom/android/server/ConnectivityService;->-wrap20(Lcom/android/server/ConnectivityService;Landroid/net/Network;IZ)V
+PLcom/android/server/ConnectivityService;->-wrap25(Ljava/lang/String;)V
+PLcom/android/server/ConnectivityService;->-wrap29(Lcom/android/server/ConnectivityService;I)V
+PLcom/android/server/ConnectivityService;->-wrap31(Lcom/android/server/ConnectivityService;I)V
+PLcom/android/server/ConnectivityService;->-wrap33(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkInfo$DetailedState;I)V
+PLcom/android/server/ConnectivityService;->-wrap34(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->-wrap36(Lcom/android/server/ConnectivityService;ILcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkCapabilities;)V
+PLcom/android/server/ConnectivityService;->-wrap37(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->-wrap38(Lcom/android/server/ConnectivityService;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkInfo;)V
+PLcom/android/server/ConnectivityService;->-wrap4(Lcom/android/server/ConnectivityService;Landroid/net/NetworkRequest;)V
+PLcom/android/server/ConnectivityService;->-wrap7(Lcom/android/server/ConnectivityService;Landroid/os/Message;)V
+PLcom/android/server/ConnectivityService;->-wrap8(Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/ConnectivityService;-><init>(Landroid/content/Context;Landroid/os/INetworkManagementService;Landroid/net/INetworkStatsService;Landroid/net/INetworkPolicyManager;)V
+PLcom/android/server/ConnectivityService;-><init>(Landroid/content/Context;Landroid/os/INetworkManagementService;Landroid/net/INetworkStatsService;Landroid/net/INetworkPolicyManager;Landroid/net/metrics/IpConnectivityLog;)V
+PLcom/android/server/ConnectivityService;->addValidationLogs(Landroid/util/LocalLog$ReadOnlyLocalLog;Landroid/net/Network;Ljava/lang/String;)V
+PLcom/android/server/ConnectivityService;->argsContain([Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/ConnectivityService;->avoidBadWifi()Z
+PLcom/android/server/ConnectivityService;->canonicalizeProxyInfo(Landroid/net/ProxyInfo;)Landroid/net/ProxyInfo;
+PLcom/android/server/ConnectivityService;->createInternetRequestForTransport(ILandroid/net/NetworkRequest$Type;)Landroid/net/NetworkRequest;
+PLcom/android/server/ConnectivityService;->createMultinetworkPolicyTracker(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/Runnable;)Landroid/net/util/MultinetworkPolicyTracker;
+PLcom/android/server/ConnectivityService;->createNetworkMonitor(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkRequest;)Lcom/android/server/connectivity/NetworkMonitor;
+PLcom/android/server/ConnectivityService;->createVpnInfo(Lcom/android/server/connectivity/Vpn;)Lcom/android/internal/net/VpnInfo;
+PLcom/android/server/ConnectivityService;->dumpAvoidBadWifiSettings(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/ConnectivityService;->encodeBool(Z)I
+PLcom/android/server/ConnectivityService;->enforceCrossUserPermission(I)V
+PLcom/android/server/ConnectivityService;->enforceInternetPermission()V
+PLcom/android/server/ConnectivityService;->ensureNetworkRequestHasType(Landroid/net/NetworkRequest;)V
+PLcom/android/server/ConnectivityService;->ensureRequestableCapabilities(Landroid/net/NetworkCapabilities;)V
+PLcom/android/server/ConnectivityService;->ensureValidNetworkSpecifier(Landroid/net/NetworkCapabilities;)V
+PLcom/android/server/ConnectivityService;->flushVmDnsCache()V
+PLcom/android/server/ConnectivityService;->getActiveLinkProperties()Landroid/net/LinkProperties;
+PLcom/android/server/ConnectivityService;->getAllNetworkInfo()[Landroid/net/NetworkInfo;
+PLcom/android/server/ConnectivityService;->getAllNetworkState()[Landroid/net/NetworkState;
+PLcom/android/server/ConnectivityService;->getDefaultNetworkCapabilitiesForUser(I)[Landroid/net/NetworkCapabilities;
+PLcom/android/server/ConnectivityService;->getDefaultProxy()Landroid/net/ProxyInfo;
+PLcom/android/server/ConnectivityService;->getGlobalProxy()Landroid/net/ProxyInfo;
+PLcom/android/server/ConnectivityService;->getLinkProperties(Landroid/net/Network;)Landroid/net/LinkProperties;
+PLcom/android/server/ConnectivityService;->getLinkProperties(Lcom/android/server/connectivity/NetworkAgentInfo;)Landroid/net/LinkProperties;
+PLcom/android/server/ConnectivityService;->getNetworkPermission(Landroid/net/NetworkCapabilities;)Ljava/lang/String;
+PLcom/android/server/ConnectivityService;->getNriForAppRequest(Landroid/net/NetworkRequest;ILjava/lang/String;)Lcom/android/server/ConnectivityService$NetworkRequestInfo;
+PLcom/android/server/ConnectivityService;->getSignalStrengthThresholds(Lcom/android/server/connectivity/NetworkAgentInfo;)Ljava/util/ArrayList;
+PLcom/android/server/ConnectivityService;->getSystemProperties()Lcom/android/server/connectivity/MockableSystemProperties;
+PLcom/android/server/ConnectivityService;->getVpnConfig(I)Lcom/android/internal/net/VpnConfig;
+PLcom/android/server/ConnectivityService;->handleApplyDefaultProxy(Landroid/net/ProxyInfo;)V
+PLcom/android/server/ConnectivityService;->handleAsyncChannelHalfConnect(Landroid/os/Message;)V
+PLcom/android/server/ConnectivityService;->handleDeprecatedGlobalHttpProxy()V
+PLcom/android/server/ConnectivityService;->handleMobileDataAlwaysOn()V
+PLcom/android/server/ConnectivityService;->handlePromptUnvalidated(Landroid/net/Network;)V
+PLcom/android/server/ConnectivityService;->handleRegisterNetworkAgent(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->handleRegisterNetworkFactory(Lcom/android/server/ConnectivityService$NetworkFactoryInfo;)V
+PLcom/android/server/ConnectivityService;->handleReleaseNetworkRequest(Landroid/net/NetworkRequest;I)V
+PLcom/android/server/ConnectivityService;->handleReportNetworkConnectivity(Landroid/net/Network;IZ)V
+PLcom/android/server/ConnectivityService;->handleUpdateLinkProperties(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/LinkProperties;)V
+PLcom/android/server/ConnectivityService;->hasWifiNetworkListenPermission(Landroid/net/NetworkCapabilities;)Z
+PLcom/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;->isTetheringSupported()Z
+PLcom/android/server/ConnectivityService;->isTetheringSupported(Ljava/lang/String;)Z
+PLcom/android/server/ConnectivityService;->loadGlobalProxy()V
+PLcom/android/server/ConnectivityService;->log(Ljava/lang/String;)V
+PLcom/android/server/ConnectivityService;->logDefaultNetworkEvent(Lcom/android/server/connectivity/NetworkAgentInfo;Lcom/android/server/connectivity/NetworkAgentInfo;)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;
+PLcom/android/server/ConnectivityService;->makeTethering()Lcom/android/server/connectivity/Tethering;
+PLcom/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
+PLcom/android/server/ConnectivityService;->notifyNetworkCallbacks(Lcom/android/server/connectivity/NetworkAgentInfo;I)V
+PLcom/android/server/ConnectivityService;->onUserStart(I)V
+PLcom/android/server/ConnectivityService;->onUserUnlocked(I)V
+PLcom/android/server/ConnectivityService;->proxyInfoEqual(Landroid/net/ProxyInfo;Landroid/net/ProxyInfo;)Z
+PLcom/android/server/ConnectivityService;->registerNetworkAgent(Landroid/os/Messenger;Landroid/net/NetworkInfo;Landroid/net/LinkProperties;Landroid/net/NetworkCapabilities;ILandroid/net/NetworkMisc;)I
+PLcom/android/server/ConnectivityService;->registerNetworkFactory(Landroid/os/Messenger;Ljava/lang/String;)V
+PLcom/android/server/ConnectivityService;->registerSettingsCallbacks()V
+PLcom/android/server/ConnectivityService;->releaseNetworkRequest(Landroid/net/NetworkRequest;)V
+PLcom/android/server/ConnectivityService;->reportNetworkConnectivity(Landroid/net/Network;Z)V
+PLcom/android/server/ConnectivityService;->requestNetwork(Landroid/net/NetworkCapabilities;Landroid/os/Messenger;ILandroid/os/IBinder;I)Landroid/net/NetworkRequest;
+PLcom/android/server/ConnectivityService;->reserveNetId()I
+PLcom/android/server/ConnectivityService;->scheduleReleaseNetworkTransitionWakelock()V
+PLcom/android/server/ConnectivityService;->scheduleUnvalidatedPrompt(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->sendConnectedBroadcast(Landroid/net/NetworkInfo;)V
+PLcom/android/server/ConnectivityService;->sendGeneralBroadcast(Landroid/net/NetworkInfo;Ljava/lang/String;)V
+PLcom/android/server/ConnectivityService;->sendInetConditionBroadcast(Landroid/net/NetworkInfo;)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
+PLcom/android/server/ConnectivityService;->setDefaultDnsSystemProperties(Ljava/util/Collection;)V
+PLcom/android/server/ConnectivityService;->setLockdownTracker(Lcom/android/server/net/LockdownVpnTracker;)V
+PLcom/android/server/ConnectivityService;->setNetDnsProperty(ILjava/lang/String;)V
+PLcom/android/server/ConnectivityService;->setupDataActivityTracking(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->startAlwaysOnVpn(I)Z
+PLcom/android/server/ConnectivityService;->systemReady()V
+PLcom/android/server/ConnectivityService;->toBool(I)Z
+PLcom/android/server/ConnectivityService;->updateCapabilities(ILcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkCapabilities;)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
+PLcom/android/server/ConnectivityService;->updateInterfaces(Landroid/net/LinkProperties;Landroid/net/LinkProperties;ILandroid/net/NetworkCapabilities;)V
+PLcom/android/server/ConnectivityService;->updateLinkProperties(Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/LinkProperties;)V
+PLcom/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;->updateProxy(Landroid/net/LinkProperties;Landroid/net/LinkProperties;Lcom/android/server/connectivity/NetworkAgentInfo;)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(Lcom/android/server/connectivity/NetworkAgentInfo;)V
+PLcom/android/server/ConnectivityService;->wakeupModifyInterface(Ljava/lang/String;Landroid/net/NetworkCapabilities;Z)V
+PLcom/android/server/ConsumerIrService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/ContextHubSystemService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/ContextHubSystemService;->lambda$-com_android_server_ContextHubSystemService_1237(Landroid/content/Context;)V
+PLcom/android/server/ContextHubSystemService;->onBootPhase(I)V
+PLcom/android/server/ContextHubSystemService;->onStart()V
+PLcom/android/server/CountryDetectorService$1$1;-><init>(Lcom/android/server/CountryDetectorService$1;Landroid/location/Country;)V
+PLcom/android/server/CountryDetectorService$1$1;->run()V
+PLcom/android/server/CountryDetectorService$1;-><init>(Lcom/android/server/CountryDetectorService;)V
+PLcom/android/server/CountryDetectorService$1;->onCountryDetected(Landroid/location/Country;)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
+PLcom/android/server/CountryDetectorService$Receiver;->getListener()Landroid/location/ICountryListener;
+PLcom/android/server/CountryDetectorService;->-get0(Lcom/android/server/CountryDetectorService;)Lcom/android/server/location/ComprehensiveCountryDetector;
+PLcom/android/server/CountryDetectorService;->-get1(Lcom/android/server/CountryDetectorService;)Landroid/os/Handler;
+PLcom/android/server/CountryDetectorService;-><init>(Landroid/content/Context;)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;
+PLcom/android/server/CountryDetectorService;->initialize()V
+PLcom/android/server/CountryDetectorService;->notifyReceivers(Landroid/location/Country;)V
+PLcom/android/server/CountryDetectorService;->run()V
+PLcom/android/server/CountryDetectorService;->setCountryListener(Landroid/location/CountryListener;)V
+PLcom/android/server/CountryDetectorService;->systemRunning()V
+PLcom/android/server/DeviceIdleController$1;-><init>(Lcom/android/server/DeviceIdleController;)V
+PLcom/android/server/DeviceIdleController$2;-><init>(Lcom/android/server/DeviceIdleController;)V
+PLcom/android/server/DeviceIdleController$3;-><init>(Lcom/android/server/DeviceIdleController;)V
+PLcom/android/server/DeviceIdleController$4;-><init>(Lcom/android/server/DeviceIdleController;)V
+PLcom/android/server/DeviceIdleController$5;-><init>(Lcom/android/server/DeviceIdleController;)V
+PLcom/android/server/DeviceIdleController$6;-><init>(Lcom/android/server/DeviceIdleController;)V
+PLcom/android/server/DeviceIdleController$6;->onDisplayChanged(I)V
+PLcom/android/server/DeviceIdleController$7;-><init>(Lcom/android/server/DeviceIdleController;)V
+PLcom/android/server/DeviceIdleController$8;-><init>(Lcom/android/server/DeviceIdleController;)V
+PLcom/android/server/DeviceIdleController$BinderService;-><init>(Lcom/android/server/DeviceIdleController;)V
+PLcom/android/server/DeviceIdleController$BinderService;-><init>(Lcom/android/server/DeviceIdleController;Lcom/android/server/DeviceIdleController$BinderService;)V
+PLcom/android/server/DeviceIdleController$BinderService;->getAppIdTempWhitelist()[I
+PLcom/android/server/DeviceIdleController$BinderService;->getAppIdWhitelist()[I
+PLcom/android/server/DeviceIdleController$BinderService;->getAppIdWhitelistExceptIdle()[I
+PLcom/android/server/DeviceIdleController$BinderService;->isPowerSaveWhitelistApp(Ljava/lang/String;)Z
+PLcom/android/server/DeviceIdleController$Constants;-><init>(Lcom/android/server/DeviceIdleController;Landroid/os/Handler;Landroid/content/ContentResolver;)V
+PLcom/android/server/DeviceIdleController$Constants;->updateConstants()V
+PLcom/android/server/DeviceIdleController$LocalService;-><init>(Lcom/android/server/DeviceIdleController;)V
+PLcom/android/server/DeviceIdleController$LocalService;->addPowerSaveTempWhitelistApp(ILjava/lang/String;JIZLjava/lang/String;)V
+PLcom/android/server/DeviceIdleController$LocalService;->addPowerSaveTempWhitelistAppDirect(IJZLjava/lang/String;)V
+PLcom/android/server/DeviceIdleController$LocalService;->getNotificationWhitelistDuration()J
+PLcom/android/server/DeviceIdleController$LocalService;->setNetworkPolicyTempWhitelistCallback(Ljava/lang/Runnable;)V
+PLcom/android/server/DeviceIdleController$MotionListener;-><init>(Lcom/android/server/DeviceIdleController;)V
+PLcom/android/server/DeviceIdleController$MotionListener;-><init>(Lcom/android/server/DeviceIdleController;Lcom/android/server/DeviceIdleController$MotionListener;)V
+PLcom/android/server/DeviceIdleController$MyHandler;-><init>(Lcom/android/server/DeviceIdleController;Landroid/os/Looper;)V
+PLcom/android/server/DeviceIdleController;->-get1(Lcom/android/server/DeviceIdleController;)Lcom/android/server/DeviceIdleController$Constants;
+PLcom/android/server/DeviceIdleController;-><init>(Landroid/content/Context;)V
+PLcom/android/server/DeviceIdleController;->addPowerSaveTempWhitelistAppDirectInternal(IIJZLjava/lang/String;)V
+PLcom/android/server/DeviceIdleController;->addPowerSaveTempWhitelistAppInternal(ILjava/lang/String;JIZLjava/lang/String;)V
+PLcom/android/server/DeviceIdleController;->becomeActiveLocked(Ljava/lang/String;I)V
+PLcom/android/server/DeviceIdleController;->becomeInactiveIfAppropriateLocked()V
+PLcom/android/server/DeviceIdleController;->buildAppIdArray(Landroid/util/ArrayMap;Landroid/util/ArrayMap;Landroid/util/SparseBooleanArray;)[I
+PLcom/android/server/DeviceIdleController;->checkTempAppWhitelistTimeout(I)V
+PLcom/android/server/DeviceIdleController;->getAppIdTempWhitelistInternal()[I
+PLcom/android/server/DeviceIdleController;->getAppIdWhitelistExceptIdleInternal()[I
+PLcom/android/server/DeviceIdleController;->getAppIdWhitelistInternal()[I
+PLcom/android/server/DeviceIdleController;->getSystemDir()Ljava/io/File;
+PLcom/android/server/DeviceIdleController;->isPowerSaveWhitelistAppInternal(Ljava/lang/String;)Z
+PLcom/android/server/DeviceIdleController;->onBootPhase(I)V
+PLcom/android/server/DeviceIdleController;->onStart()V
+PLcom/android/server/DeviceIdleController;->postTempActiveTimeoutMessage(IJ)V
+PLcom/android/server/DeviceIdleController;->readConfigFileLocked()V
+PLcom/android/server/DeviceIdleController;->reportTempWhitelistChangedLocked()V
+PLcom/android/server/DeviceIdleController;->setNetworkPolicyTempWhitelistCallbackInternal(Ljava/lang/Runnable;)V
+PLcom/android/server/DeviceIdleController;->updateConnectivityState(Landroid/content/Intent;)V
+PLcom/android/server/DeviceIdleController;->updateDisplayLocked()V
+PLcom/android/server/DeviceIdleController;->updateTempWhitelistAppIdsLocked(IZ)V
+PLcom/android/server/DeviceIdleController;->updateWhitelistAppIdsLocked()V
+PLcom/android/server/DiskStatsService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/DockObserver$1;-><init>(Lcom/android/server/DockObserver;Z)V
+PLcom/android/server/DockObserver$2;-><init>(Lcom/android/server/DockObserver;)V
+PLcom/android/server/DockObserver$BinderService;-><init>(Lcom/android/server/DockObserver;)V
+PLcom/android/server/DockObserver$BinderService;-><init>(Lcom/android/server/DockObserver;Lcom/android/server/DockObserver$BinderService;)V
+PLcom/android/server/DockObserver;-><init>(Landroid/content/Context;)V
+PLcom/android/server/DockObserver;->init()V
+PLcom/android/server/DockObserver;->onBootPhase(I)V
+PLcom/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
+PLcom/android/server/DropBoxManagerService$1;-><init>(Lcom/android/server/DropBoxManagerService;)V
+PLcom/android/server/DropBoxManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/DropBoxManagerService$2;-><init>(Lcom/android/server/DropBoxManagerService;)V
+PLcom/android/server/DropBoxManagerService$3;-><init>(Lcom/android/server/DropBoxManagerService;Landroid/os/Looper;)V
+PLcom/android/server/DropBoxManagerService$4;-><init>(Lcom/android/server/DropBoxManagerService;Landroid/os/Handler;)V
+PLcom/android/server/DropBoxManagerService$4;->onChange(Z)V
+PLcom/android/server/DropBoxManagerService$FileList;-><init>()V
+PLcom/android/server/DropBoxManagerService$FileList;-><init>(Lcom/android/server/DropBoxManagerService$FileList;)V
+PLcom/android/server/DropBoxManagerService;->-get0(Lcom/android/server/DropBoxManagerService;)Landroid/content/BroadcastReceiver;
+PLcom/android/server/DropBoxManagerService;->-set0(Lcom/android/server/DropBoxManagerService;J)J
+PLcom/android/server/DropBoxManagerService;->-wrap0(Lcom/android/server/DropBoxManagerService;)J
+PLcom/android/server/DropBoxManagerService;->-wrap1(Lcom/android/server/DropBoxManagerService;)V
+PLcom/android/server/DropBoxManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/DropBoxManagerService;-><init>(Landroid/content/Context;Ljava/io/File;Landroid/os/Looper;)V
+PLcom/android/server/DropBoxManagerService;->onBootPhase(I)V
+PLcom/android/server/DropBoxManagerService;->onStart()V
+PLcom/android/server/EntropyMixer$1;-><init>(Lcom/android/server/EntropyMixer;)V
+PLcom/android/server/EntropyMixer$2;-><init>(Lcom/android/server/EntropyMixer;)V
+PLcom/android/server/EntropyMixer$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/EntropyMixer;->-wrap2(Lcom/android/server/EntropyMixer;)V
+PLcom/android/server/EntropyMixer;-><init>(Landroid/content/Context;)V
+PLcom/android/server/EntropyMixer;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/EntropyMixer;->addDeviceSpecificEntropy()V
+PLcom/android/server/EntropyMixer;->addHwRandomEntropy()V
+PLcom/android/server/EntropyMixer;->getSystemDir()Ljava/lang/String;
+PLcom/android/server/EntropyMixer;->loadInitialEntropy()V
+PLcom/android/server/EntropyMixer;->scheduleEntropyWriter()V
+PLcom/android/server/EntropyMixer;->writeEntropy()V
+PLcom/android/server/EventLogTags;->writeNotificationCancel(IILjava/lang/String;ILjava/lang/String;IIIILjava/lang/String;)V
+PLcom/android/server/EventLogTags;->writeNotificationCanceled(Ljava/lang/String;IIIILjava/lang/String;)V
+PLcom/android/server/EventLogTags;->writeNotificationEnqueue(IILjava/lang/String;ILjava/lang/String;ILjava/lang/String;I)V
+PLcom/android/server/EventLogTags;->writeNotificationExpansion(Ljava/lang/String;IIIII)V
+PLcom/android/server/EventLogTags;->writeNotificationPanelHidden()V
+PLcom/android/server/EventLogTags;->writeNotificationPanelRevealed(I)V
+PLcom/android/server/EventLogTags;->writeNotificationVisibility(Ljava/lang/String;IIIII)V
+PLcom/android/server/EventLogTags;->writeStorageState(Ljava/lang/String;IIJJ)V
+PLcom/android/server/EventLogTags;->writeStreamDevicesChanged(III)V
+PLcom/android/server/GestureLauncherService$1;-><init>(Lcom/android/server/GestureLauncherService;)V
+PLcom/android/server/GestureLauncherService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/GestureLauncherService$2;-><init>(Lcom/android/server/GestureLauncherService;Landroid/os/Handler;)V
+PLcom/android/server/GestureLauncherService$CameraLiftTriggerEventListener;-><init>(Lcom/android/server/GestureLauncherService;)V
+PLcom/android/server/GestureLauncherService$CameraLiftTriggerEventListener;-><init>(Lcom/android/server/GestureLauncherService;Lcom/android/server/GestureLauncherService$CameraLiftTriggerEventListener;)V
+PLcom/android/server/GestureLauncherService$GestureEventListener;-><init>(Lcom/android/server/GestureLauncherService;)V
+PLcom/android/server/GestureLauncherService$GestureEventListener;-><init>(Lcom/android/server/GestureLauncherService;Lcom/android/server/GestureLauncherService$GestureEventListener;)V
+PLcom/android/server/GestureLauncherService;->-get10(Lcom/android/server/GestureLauncherService;)Landroid/content/Context;
+PLcom/android/server/GestureLauncherService;->-get13(Lcom/android/server/GestureLauncherService;)Landroid/database/ContentObserver;
+PLcom/android/server/GestureLauncherService;->-set5(Lcom/android/server/GestureLauncherService;I)I
+PLcom/android/server/GestureLauncherService;->-wrap0(Lcom/android/server/GestureLauncherService;)V
+PLcom/android/server/GestureLauncherService;->-wrap1(Lcom/android/server/GestureLauncherService;)V
+PLcom/android/server/GestureLauncherService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/GestureLauncherService;-><init>(Landroid/content/Context;Lcom/android/internal/logging/MetricsLogger;)V
+PLcom/android/server/GestureLauncherService;->isCameraDoubleTapPowerEnabled(Landroid/content/res/Resources;)Z
+PLcom/android/server/GestureLauncherService;->isCameraDoubleTapPowerSettingEnabled(Landroid/content/Context;I)Z
+PLcom/android/server/GestureLauncherService;->isCameraLaunchEnabled(Landroid/content/res/Resources;)Z
+PLcom/android/server/GestureLauncherService;->isCameraLaunchSettingEnabled(Landroid/content/Context;I)Z
+PLcom/android/server/GestureLauncherService;->isCameraLiftTriggerEnabled(Landroid/content/res/Resources;)Z
+PLcom/android/server/GestureLauncherService;->isCameraLiftTriggerSettingEnabled(Landroid/content/Context;I)Z
+PLcom/android/server/GestureLauncherService;->isGestureLauncherEnabled(Landroid/content/res/Resources;)Z
+PLcom/android/server/GestureLauncherService;->onBootPhase(I)V
+PLcom/android/server/GestureLauncherService;->onStart()V
+PLcom/android/server/GestureLauncherService;->registerContentObservers()V
+PLcom/android/server/GestureLauncherService;->unregisterCameraLaunchGesture()V
+PLcom/android/server/GestureLauncherService;->unregisterCameraLiftTrigger()V
+PLcom/android/server/GestureLauncherService;->updateCameraDoubleTapPowerEnabled()V
+PLcom/android/server/GestureLauncherService;->updateCameraRegistered()V
+PLcom/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;->binderDied()V
+PLcom/android/server/GraphicsStatsService$ActiveBuffer;->closeAllBuffers()V
+PLcom/android/server/GraphicsStatsService$BufferInfo;-><init>(Lcom/android/server/GraphicsStatsService;Ljava/lang/String;IJ)V
+PLcom/android/server/GraphicsStatsService$HistoricalBuffer;-><init>(Lcom/android/server/GraphicsStatsService;Lcom/android/server/GraphicsStatsService$ActiveBuffer;)V
+PLcom/android/server/GraphicsStatsService;->-get0(Lcom/android/server/GraphicsStatsService;)I
+PLcom/android/server/GraphicsStatsService;->-get1(Lcom/android/server/GraphicsStatsService;)[B
+PLcom/android/server/GraphicsStatsService;->-wrap1(Lcom/android/server/GraphicsStatsService;Lcom/android/server/GraphicsStatsService$ActiveBuffer;)V
+PLcom/android/server/GraphicsStatsService;->-wrap2(Lcom/android/server/GraphicsStatsService;Lcom/android/server/GraphicsStatsService$HistoricalBuffer;)V
+PLcom/android/server/GraphicsStatsService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/GraphicsStatsService;->addToSaveQueue(Lcom/android/server/GraphicsStatsService$ActiveBuffer;)V
+PLcom/android/server/GraphicsStatsService;->getPfd(Landroid/os/MemoryFile;)Landroid/os/ParcelFileDescriptor;
+PLcom/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;->requestBufferForProcessLocked(Landroid/view/IGraphicsStatsCallback;IILjava/lang/String;I)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/GraphicsStatsService;->saveBuffer(Lcom/android/server/GraphicsStatsService$HistoricalBuffer;)V
+PLcom/android/server/GraphicsStatsService;->scheduleRotateLocked()V
+PLcom/android/server/HardwarePropertiesManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/HardwarePropertiesManagerService;->enforceHardwarePropertiesRetrievalAllowed(Ljava/lang/String;)V
+PLcom/android/server/HardwarePropertiesManagerService;->getDeviceTemperatures(Ljava/lang/String;II)[F
+PLcom/android/server/InputMethodManagerService$1;-><init>(Lcom/android/server/InputMethodManagerService;)V
+PLcom/android/server/InputMethodManagerService$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/InputMethodManagerService$2;-><init>(Lcom/android/server/InputMethodManagerService;)V
+PLcom/android/server/InputMethodManagerService$ClientState;-><init>(Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;II)V
+PLcom/android/server/InputMethodManagerService$HardKeyboardListener;-><init>(Lcom/android/server/InputMethodManagerService;)V
+PLcom/android/server/InputMethodManagerService$HardKeyboardListener;-><init>(Lcom/android/server/InputMethodManagerService;Lcom/android/server/InputMethodManagerService$HardKeyboardListener;)V
+PLcom/android/server/InputMethodManagerService$ImmsBroadcastReceiver;-><init>(Lcom/android/server/InputMethodManagerService;)V
+PLcom/android/server/InputMethodManagerService$ImmsBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/InputMethodManagerService$InputMethodFileManager;-><init>(Ljava/util/HashMap;I)V
+PLcom/android/server/InputMethodManagerService$InputMethodFileManager;->addInputMethodSubtypes(Landroid/view/inputmethod/InputMethodInfo;[Landroid/view/inputmethod/InputMethodSubtype;)V
+PLcom/android/server/InputMethodManagerService$InputMethodFileManager;->getAllAdditionalInputMethodSubtypes()Ljava/util/HashMap;
+PLcom/android/server/InputMethodManagerService$InputMethodFileManager;->readAdditionalInputMethodSubtypes(Ljava/util/HashMap;Landroid/util/AtomicFile;)V
+PLcom/android/server/InputMethodManagerService$InputMethodFileManager;->writeAdditionalInputMethodSubtypes(Ljava/util/HashMap;Landroid/util/AtomicFile;Ljava/util/HashMap;)V
+PLcom/android/server/InputMethodManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/InputMethodManagerService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/InputMethodManagerService$Lifecycle;->onStart()V
+PLcom/android/server/InputMethodManagerService$Lifecycle;->onUnlockUser(I)V
+PLcom/android/server/InputMethodManagerService$LocalServiceImpl;-><init>(Landroid/os/Handler;)V
+PLcom/android/server/InputMethodManagerService$MethodCallback;-><init>(Lcom/android/server/InputMethodManagerService;Lcom/android/internal/view/IInputMethod;Landroid/view/InputChannel;)V
+PLcom/android/server/InputMethodManagerService$MethodCallback;->sessionCreated(Lcom/android/internal/view/IInputMethodSession;)V
+PLcom/android/server/InputMethodManagerService$MyPackageMonitor;-><init>(Lcom/android/server/InputMethodManagerService;)V
+PLcom/android/server/InputMethodManagerService$MyPackageMonitor;->addKnownImePackageNameLocked(Ljava/lang/String;)V
+PLcom/android/server/InputMethodManagerService$MyPackageMonitor;->clearKnownImePackageNamesLocked()V
+PLcom/android/server/InputMethodManagerService$MyPackageMonitor;->clearPackageChangeState()V
+PLcom/android/server/InputMethodManagerService$MyPackageMonitor;->isChangingPackagesOfCurrentUserLocked()Z
+PLcom/android/server/InputMethodManagerService$MyPackageMonitor;->onBeginPackageChanges()V
+PLcom/android/server/InputMethodManagerService$MyPackageMonitor;->onFinishPackageChanges()V
+PLcom/android/server/InputMethodManagerService$MyPackageMonitor;->onFinishPackageChangesInternal()V
+PLcom/android/server/InputMethodManagerService$MyPackageMonitor;->onPackageAppeared(Ljava/lang/String;I)V
+PLcom/android/server/InputMethodManagerService$MyPackageMonitor;->onPackageDisappeared(Ljava/lang/String;I)V
+PLcom/android/server/InputMethodManagerService$MyPackageMonitor;->onPackageModified(Ljava/lang/String;)V
+PLcom/android/server/InputMethodManagerService$MyPackageMonitor;->shouldRebuildInputMethodListLocked()Z
+PLcom/android/server/InputMethodManagerService$SessionState;-><init>(Lcom/android/server/InputMethodManagerService$ClientState;Lcom/android/internal/view/IInputMethod;Lcom/android/internal/view/IInputMethodSession;Landroid/view/InputChannel;)V
+PLcom/android/server/InputMethodManagerService$SettingsObserver;-><init>(Lcom/android/server/InputMethodManagerService;Landroid/os/Handler;)V
+PLcom/android/server/InputMethodManagerService$SettingsObserver;->registerContentObserverLocked(I)V
+PLcom/android/server/InputMethodManagerService$StartInputHistory$Entry;-><init>(Lcom/android/server/InputMethodManagerService$StartInputInfo;)V
+PLcom/android/server/InputMethodManagerService$StartInputHistory;-><init>()V
+PLcom/android/server/InputMethodManagerService$StartInputHistory;-><init>(Lcom/android/server/InputMethodManagerService$StartInputHistory;)V
+PLcom/android/server/InputMethodManagerService$StartInputHistory;->getEntrySize()I
+PLcom/android/server/InputMethodManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/InputMethodManagerService;->addClient(Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;II)V
+PLcom/android/server/InputMethodManagerService;->bindCurrentInputMethodService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z
+PLcom/android/server/InputMethodManagerService;->clearClientSessionLocked(Lcom/android/server/InputMethodManagerService$ClientState;)V
+PLcom/android/server/InputMethodManagerService;->clearCurMethodLocked()V
+PLcom/android/server/InputMethodManagerService;->finishInput(Lcom/android/internal/view/IInputMethodClient;)V
+PLcom/android/server/InputMethodManagerService;->finishSessionLocked(Lcom/android/server/InputMethodManagerService$SessionState;)V
+PLcom/android/server/InputMethodManagerService;->getAppShowFlags()I
+PLcom/android/server/InputMethodManagerService;->getCurrentInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;
+PLcom/android/server/InputMethodManagerService;->getEnabledInputMethodList()Ljava/util/List;
+PLcom/android/server/InputMethodManagerService;->getImeShowFlags()I
+PLcom/android/server/InputMethodManagerService;->getInputMethodList()Ljava/util/List;
+PLcom/android/server/InputMethodManagerService;->getInputMethodWindowVisibleHeight()I
+PLcom/android/server/InputMethodManagerService;->hideInputMethodMenu()V
+PLcom/android/server/InputMethodManagerService;->hideInputMethodMenuLocked()V
+PLcom/android/server/InputMethodManagerService;->hideMySoftInput(Landroid/os/IBinder;I)V
+PLcom/android/server/InputMethodManagerService;->isKeyguardLocked()Z
+PLcom/android/server/InputMethodManagerService;->notifyInputMethodSubtypeChanged(ILandroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)V
+PLcom/android/server/InputMethodManagerService;->notifyUserAction(I)V
+PLcom/android/server/InputMethodManagerService;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/InputMethodManagerService;->onSessionCreated(Lcom/android/internal/view/IInputMethod;Lcom/android/internal/view/IInputMethodSession;Landroid/view/InputChannel;)V
+PLcom/android/server/InputMethodManagerService;->onUnlockUser(I)V
+PLcom/android/server/InputMethodManagerService;->removeClient(Lcom/android/internal/view/IInputMethodClient;)V
+PLcom/android/server/InputMethodManagerService;->requestClientSessionLocked(Lcom/android/server/InputMethodManagerService$ClientState;)V
+PLcom/android/server/InputMethodManagerService;->resetDefaultImeLocked(Landroid/content/Context;)V
+PLcom/android/server/InputMethodManagerService;->setAdditionalInputMethodSubtypes(Ljava/lang/String;[Landroid/view/inputmethod/InputMethodSubtype;)V
+PLcom/android/server/InputMethodManagerService;->setInputMethodEnabledLocked(Ljava/lang/String;Z)Z
+PLcom/android/server/InputMethodManagerService;->setInputMethodLocked(Ljava/lang/String;I)V
+PLcom/android/server/InputMethodManagerService;->setSelectedInputMethodAndSubtypeLocked(Landroid/view/inputmethod/InputMethodInfo;IZ)V
+PLcom/android/server/InputMethodManagerService;->showCurrentInputLocked(ILandroid/os/ResultReceiver;)Z
+PLcom/android/server/InputMethodManagerService;->showSoftInput(Lcom/android/internal/view/IInputMethodClient;ILandroid/os/ResultReceiver;)Z
+PLcom/android/server/InputMethodManagerService;->startInputInnerLocked()Lcom/android/internal/view/InputBindResult;
+PLcom/android/server/InputMethodManagerService;->systemRunning(Lcom/android/server/statusbar/StatusBarManagerService;)V
+PLcom/android/server/InputMethodManagerService;->unbindCurrentMethodLocked(Z)V
+PLcom/android/server/InputMethodManagerService;->updateCurrentProfileIds()V
+PLcom/android/server/InputMethodManagerService;->updateFromSettingsLocked(Z)V
+PLcom/android/server/InputMethodManagerService;->updateInputMethodsFromSettingsLocked(Z)V
+PLcom/android/server/InputMethodManagerService;->updateKeyboardFromSettingsLocked()V
+PLcom/android/server/IoThread;->get()Lcom/android/server/IoThread;
+PLcom/android/server/LocationManagerService$1;-><init>(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/LocationManagerService$2;-><init>(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/LocationManagerService$3;-><init>(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/LocationManagerService$4;-><init>(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/LocationManagerService$5;-><init>(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/LocationManagerService$6;-><init>(Lcom/android/server/LocationManagerService;Landroid/os/Handler;)V
+PLcom/android/server/LocationManagerService$7;-><init>(Lcom/android/server/LocationManagerService;Landroid/os/Handler;)V
+PLcom/android/server/LocationManagerService$8;-><init>(Lcom/android/server/LocationManagerService;Landroid/os/Handler;)V
+PLcom/android/server/LocationManagerService$9;-><init>(Lcom/android/server/LocationManagerService;)V
+PLcom/android/server/LocationManagerService$9;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/LocationManagerService$Identity;-><init>(IILjava/lang/String;)V
+PLcom/android/server/LocationManagerService$LocationWorkerHandler;-><init>(Lcom/android/server/LocationManagerService;Landroid/os/Looper;)V
+PLcom/android/server/LocationManagerService$Receiver;->binderDied()V
+PLcom/android/server/LocationManagerService$Receiver;->clearPendingBroadcastsLocked()V
+PLcom/android/server/LocationManagerService$Receiver;->getListener()Landroid/location/ILocationListener;
+PLcom/android/server/LocationManagerService$Receiver;->isListener()Z
+PLcom/android/server/LocationManagerService$Receiver;->updateMonitoring(ZZI)Z
+PLcom/android/server/LocationManagerService$UpdateRecord;->disposeLocked(Z)V
+PLcom/android/server/LocationManagerService;->-get0(Lcom/android/server/LocationManagerService;)Landroid/app/ActivityManager;
+PLcom/android/server/LocationManagerService;->-get1(Lcom/android/server/LocationManagerService;)Landroid/app/AppOpsManager;
+PLcom/android/server/LocationManagerService;->-get10(Lcom/android/server/LocationManagerService;)Lcom/android/server/location/LocationRequestStatistics;
+PLcom/android/server/LocationManagerService;->-get2(Lcom/android/server/LocationManagerService;)Landroid/content/Context;
+PLcom/android/server/LocationManagerService;->-get5(Lcom/android/server/LocationManagerService;)Ljava/lang/Object;
+PLcom/android/server/LocationManagerService;->-get6(Lcom/android/server/LocationManagerService;)Landroid/os/PowerManager;
+PLcom/android/server/LocationManagerService;->-get7(Lcom/android/server/LocationManagerService;)Ljava/util/HashMap;
+PLcom/android/server/LocationManagerService;->-get8(Lcom/android/server/LocationManagerService;)Ljava/util/HashMap;
+PLcom/android/server/LocationManagerService;->-get9(Lcom/android/server/LocationManagerService;)Ljava/util/HashMap;
+PLcom/android/server/LocationManagerService;->-wrap0(Lcom/android/server/LocationManagerService;Ljava/lang/String;)Z
+PLcom/android/server/LocationManagerService;->-wrap1(I)Z
+PLcom/android/server/LocationManagerService;->-wrap2(Lcom/android/server/LocationManagerService;II)I
+PLcom/android/server/LocationManagerService;->-wrap5(Lcom/android/server/LocationManagerService;Landroid/location/Location;Z)V
+PLcom/android/server/LocationManagerService;->-wrap7(Lcom/android/server/LocationManagerService;Lcom/android/server/LocationManagerService$Receiver;)V
+PLcom/android/server/LocationManagerService;->-wrap9(Lcom/android/server/LocationManagerService;I)V
+PLcom/android/server/LocationManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/LocationManagerService;->addProviderLocked(Lcom/android/server/location/LocationProviderInterface;)V
+PLcom/android/server/LocationManagerService;->checkDeviceStatsAllowed()V
+PLcom/android/server/LocationManagerService;->checkListenerOrIntentLocked(Landroid/location/ILocationListener;Landroid/app/PendingIntent;IILjava/lang/String;Landroid/os/WorkSource;Z)Lcom/android/server/LocationManagerService$Receiver;
+PLcom/android/server/LocationManagerService;->checkUpdateAppOpsAllowed()V
+PLcom/android/server/LocationManagerService;->createSanitizedRequest(Landroid/location/LocationRequest;I)Landroid/location/LocationRequest;
+PLcom/android/server/LocationManagerService;->ensureFallbackFusedProviderPresentLocked(Ljava/util/ArrayList;)V
+PLcom/android/server/LocationManagerService;->geocoderIsPresent()Z
+PLcom/android/server/LocationManagerService;->getFromLocation(DDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String;
+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;
+PLcom/android/server/LocationManagerService;->hasGnssPermissions(Ljava/lang/String;)Z
+PLcom/android/server/LocationManagerService;->isMockProvider(Ljava/lang/String;)Z
+PLcom/android/server/LocationManagerService;->isUidALocationProvider(I)Z
+PLcom/android/server/LocationManagerService;->loadProvidersLocked()V
+PLcom/android/server/LocationManagerService;->registerGnssStatusCallback(Landroid/location/IGnssStatusListener;Ljava/lang/String;)Z
+PLcom/android/server/LocationManagerService;->removeUpdates(Landroid/location/ILocationListener;Landroid/app/PendingIntent;Ljava/lang/String;)V
+PLcom/android/server/LocationManagerService;->requestLocationUpdatesLocked(Landroid/location/LocationRequest;Lcom/android/server/LocationManagerService$Receiver;IILjava/lang/String;)V
+PLcom/android/server/LocationManagerService;->switchUser(I)V
+PLcom/android/server/LocationManagerService;->systemRunning()V
+PLcom/android/server/LocationManagerService;->unregisterGnssStatusCallback(Landroid/location/IGnssStatusListener;)V
+PLcom/android/server/LocationManagerService;->updateBackgroundThrottlingWhitelistLocked()V
+PLcom/android/server/LocationManagerService;->updateProviderListenersLocked(Ljava/lang/String;Z)V
+PLcom/android/server/LocationManagerService;->updateProvidersLocked()V
+PLcom/android/server/LocationManagerService;->updateUserProfiles(I)V
+PLcom/android/server/MmsServiceBroker$1;-><init>(Lcom/android/server/MmsServiceBroker;)V
+PLcom/android/server/MmsServiceBroker$2;-><init>(Lcom/android/server/MmsServiceBroker;)V
+PLcom/android/server/MmsServiceBroker$3;-><init>(Lcom/android/server/MmsServiceBroker;)V
+PLcom/android/server/MmsServiceBroker$BinderService;-><init>(Lcom/android/server/MmsServiceBroker;)V
+PLcom/android/server/MmsServiceBroker$BinderService;-><init>(Lcom/android/server/MmsServiceBroker;Lcom/android/server/MmsServiceBroker$BinderService;)V
+PLcom/android/server/MmsServiceBroker;-><init>(Landroid/content/Context;)V
+PLcom/android/server/MmsServiceBroker;->onStart()V
+PLcom/android/server/MmsServiceBroker;->systemRunning()V
+PLcom/android/server/MountServiceIdler;->scheduleIdlePass(Landroid/content/Context;)V
+PLcom/android/server/MountServiceIdler;->tomorrowMidnight()Ljava/util/Calendar;
+PLcom/android/server/NativeDaemonConnector$Command;->-get0(Lcom/android/server/NativeDaemonConnector$Command;)Ljava/util/ArrayList;
+PLcom/android/server/NativeDaemonConnector$Command;->-get1(Lcom/android/server/NativeDaemonConnector$Command;)Ljava/lang/String;
+PLcom/android/server/NativeDaemonConnector$Command;-><init>(Ljava/lang/String;[Ljava/lang/Object;)V
+PLcom/android/server/NativeDaemonConnector$Command;->appendArg(Ljava/lang/Object;)Lcom/android/server/NativeDaemonConnector$Command;
+PLcom/android/server/NativeDaemonConnector$ResponseQueue;-><init>(I)V
+PLcom/android/server/NativeDaemonConnector$SensitiveArg;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/NativeDaemonConnector$SensitiveArg;->toString()Ljava/lang/String;
+PLcom/android/server/NativeDaemonConnector;-><init>(Lcom/android/server/INativeDaemonConnectorCallbacks;Ljava/lang/String;ILjava/lang/String;ILandroid/os/PowerManager$WakeLock;)V
+PLcom/android/server/NativeDaemonConnector;-><init>(Lcom/android/server/INativeDaemonConnectorCallbacks;Ljava/lang/String;ILjava/lang/String;ILandroid/os/PowerManager$WakeLock;Landroid/os/Looper;)V
+PLcom/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(Lcom/android/server/NativeDaemonConnector$Command;)Lcom/android/server/NativeDaemonEvent;
+PLcom/android/server/NativeDaemonConnector;->execute(Ljava/lang/String;[Ljava/lang/Object;)Lcom/android/server/NativeDaemonEvent;
+PLcom/android/server/NativeDaemonConnector;->executeForList(Ljava/lang/String;[Ljava/lang/Object;)[Lcom/android/server/NativeDaemonEvent;
+PLcom/android/server/NativeDaemonConnector;->loge(Ljava/lang/String;)V
+PLcom/android/server/NativeDaemonConnector;->monitor()V
+PLcom/android/server/NativeDaemonConnector;->run()V
+PLcom/android/server/NativeDaemonConnector;->setDebug(Z)V
+PLcom/android/server/NativeDaemonConnector;->setWarnIfHeld(Ljava/lang/Object;)V
+PLcom/android/server/NativeDaemonEvent;->checkCode(I)V
+PLcom/android/server/NativeDaemonEvent;->filterMessageList([Lcom/android/server/NativeDaemonEvent;I)[Ljava/lang/String;
+PLcom/android/server/NativeDaemonEvent;->getCmdNumber()I
+PLcom/android/server/NativeDaemonEvent;->getMessage()Ljava/lang/String;
+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/NetworkManagementInternal;-><init>()V
+PLcom/android/server/NetworkManagementService$1;-><init>(Lcom/android/server/NetworkManagementService;I)V
+PLcom/android/server/NetworkManagementService$1;->run()V
+PLcom/android/server/NetworkManagementService$IdleTimerParams;-><init>(II)V
+PLcom/android/server/NetworkManagementService$LocalService;-><init>(Lcom/android/server/NetworkManagementService;)V
+PLcom/android/server/NetworkManagementService$NetdCallbackReceiver;-><init>(Lcom/android/server/NetworkManagementService;)V
+PLcom/android/server/NetworkManagementService$NetdCallbackReceiver;-><init>(Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService$NetdCallbackReceiver;)V
+PLcom/android/server/NetworkManagementService$NetdCallbackReceiver;->onDaemonConnected()V
+PLcom/android/server/NetworkManagementService$NetdTetheringStatsProvider;-><init>(Lcom/android/server/NetworkManagementService;)V
+PLcom/android/server/NetworkManagementService$NetdTetheringStatsProvider;-><init>(Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService$NetdTetheringStatsProvider;)V
+PLcom/android/server/NetworkManagementService;->-get0(Lcom/android/server/NetworkManagementService;)Ljava/util/concurrent/CountDownLatch;
+PLcom/android/server/NetworkManagementService;->-get1(Lcom/android/server/NetworkManagementService;)Lcom/android/server/NativeDaemonConnector;
+PLcom/android/server/NetworkManagementService;->-set0(Lcom/android/server/NetworkManagementService;Ljava/util/concurrent/CountDownLatch;)Ljava/util/concurrent/CountDownLatch;
+PLcom/android/server/NetworkManagementService;->-wrap11(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->-wrap12(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Landroid/net/RouteInfo;)V
+PLcom/android/server/NetworkManagementService;->-wrap3(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Landroid/net/LinkAddress;)V
+PLcom/android/server/NetworkManagementService;->-wrap4(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Landroid/net/LinkAddress;)V
+PLcom/android/server/NetworkManagementService;->-wrap5(Lcom/android/server/NetworkManagementService;Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->-wrap7(Lcom/android/server/NetworkManagementService;Ljava/lang/String;J[Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->-wrap8(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Z)V
+PLcom/android/server/NetworkManagementService;->-wrap9(Lcom/android/server/NetworkManagementService;Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;-><init>(Landroid/content/Context;Ljava/lang/String;)V
+PLcom/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
+PLcom/android/server/NetworkManagementService;->clearInterfaceAddresses(Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->closeSocketsForFirewallChainLocked(ILjava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->connectNativeNetdService()V
+PLcom/android/server/NetworkManagementService;->create(Landroid/content/Context;)Lcom/android/server/NetworkManagementService;
+PLcom/android/server/NetworkManagementService;->create(Landroid/content/Context;Ljava/lang/String;)Lcom/android/server/NetworkManagementService;
+PLcom/android/server/NetworkManagementService;->createPhysicalNetwork(ILjava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->disableIpv6(Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->enableIpv6(Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->getBatteryStats()Lcom/android/internal/app/IBatteryStats;
+PLcom/android/server/NetworkManagementService;->getFirewallType(I)I
+PLcom/android/server/NetworkManagementService;->getInterfaceConfig(Ljava/lang/String;)Landroid/net/InterfaceConfiguration;
+PLcom/android/server/NetworkManagementService;->getNetdService()Landroid/net/INetd;
+PLcom/android/server/NetworkManagementService;->getNetworkStatsSummaryDev()Landroid/net/NetworkStats;
+PLcom/android/server/NetworkManagementService;->getNetworkStatsSummaryXt()Landroid/net/NetworkStats;
+PLcom/android/server/NetworkManagementService;->getNetworkStatsUidDetail(I)Landroid/net/NetworkStats;
+PLcom/android/server/NetworkManagementService;->isBandwidthControlEnabled()Z
+PLcom/android/server/NetworkManagementService;->lambda$-com_android_server_NetworkManagementService_18114(Ljava/lang/String;ZLandroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/NetworkManagementService;->lambda$-com_android_server_NetworkManagementService_18321(Ljava/lang/String;Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/NetworkManagementService;->lambda$-com_android_server_NetworkManagementService_18706(Ljava/lang/String;Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/NetworkManagementService;->lambda$-com_android_server_NetworkManagementService_29657(Ljava/lang/String;Landroid/net/LinkAddress;Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/NetworkManagementService;->lambda$-com_android_server_NetworkManagementService_29911(Ljava/lang/String;J[Ljava/lang/String;Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/NetworkManagementService;->lambda$-com_android_server_NetworkManagementService_30184(Landroid/net/RouteInfo;Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/NetworkManagementService;->lambda$-com_android_server_NetworkManagementService_30264(Landroid/net/RouteInfo;Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/NetworkManagementService;->listInterfaces()[Ljava/lang/String;
+PLcom/android/server/NetworkManagementService;->modifyInterfaceInNetwork(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->modifyRoute(Ljava/lang/String;Ljava/lang/String;Landroid/net/RouteInfo;)V
+PLcom/android/server/NetworkManagementService;->notifyAddressRemoved(Ljava/lang/String;Landroid/net/LinkAddress;)V
+PLcom/android/server/NetworkManagementService;->notifyAddressUpdated(Ljava/lang/String;Landroid/net/LinkAddress;)V
+PLcom/android/server/NetworkManagementService;->notifyInterfaceAdded(Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->notifyInterfaceDnsServerInfo(Ljava/lang/String;J[Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->notifyInterfaceLinkStateChanged(Ljava/lang/String;Z)V
+PLcom/android/server/NetworkManagementService;->notifyInterfaceRemoved(Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->notifyLimitReached(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->notifyRouteChange(Ljava/lang/String;Landroid/net/RouteInfo;)V
+PLcom/android/server/NetworkManagementService;->prepareNativeDaemon()V
+PLcom/android/server/NetworkManagementService;->registerObserver(Landroid/net/INetworkManagementEventObserver;)V
+PLcom/android/server/NetworkManagementService;->registerTetheringStatsProvider(Landroid/net/ITetheringStatsProvider;Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->reportNetworkActive()V
+PLcom/android/server/NetworkManagementService;->setDataSaverModeEnabled(Z)Z
+PLcom/android/server/NetworkManagementService;->setDefaultNetId(I)V
+PLcom/android/server/NetworkManagementService;->setDnsConfigurationForNetwork(I[Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->setFirewallChainEnabled(IZ)V
+PLcom/android/server/NetworkManagementService;->setFirewallChainState(IZ)V
+PLcom/android/server/NetworkManagementService;->setFirewallEnabled(Z)V
+PLcom/android/server/NetworkManagementService;->setFirewallUidRules(I[I[I)V
+PLcom/android/server/NetworkManagementService;->setGlobalAlert(J)V
+PLcom/android/server/NetworkManagementService;->setIPv6AddrGenMode(Ljava/lang/String;I)V
+PLcom/android/server/NetworkManagementService;->setInterfaceConfig(Ljava/lang/String;Landroid/net/InterfaceConfiguration;)V
+PLcom/android/server/NetworkManagementService;->setInterfaceIpv6PrivacyExtensions(Ljava/lang/String;Z)V
+PLcom/android/server/NetworkManagementService;->setInterfaceUp(Ljava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->setUidMeteredNetworkWhitelist(IZ)V
+PLcom/android/server/NetworkManagementService;->setUidOnMeteredNetworkList(IZZ)V
+PLcom/android/server/NetworkManagementService;->syncFirewallChainLocked(ILjava/lang/String;)V
+PLcom/android/server/NetworkManagementService;->systemReady()V
+PLcom/android/server/NetworkScoreService$1;-><init>(Lcom/android/server/NetworkScoreService;)V
+PLcom/android/server/NetworkScoreService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/NetworkScoreService$2;-><init>(Lcom/android/server/NetworkScoreService;)V
+PLcom/android/server/NetworkScoreService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/NetworkScoreService$3;-><init>(Lcom/android/server/NetworkScoreService;)V
+PLcom/android/server/NetworkScoreService$3;->accept(Landroid/net/INetworkScoreCache;Ljava/lang/Object;)V
+PLcom/android/server/NetworkScoreService$3;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/NetworkScoreService$DispatchingContentObserver;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
+PLcom/android/server/NetworkScoreService$DispatchingContentObserver;->observe(Landroid/net/Uri;I)V
+PLcom/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
+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;
+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$NetworkScorerPackageMonitor;)V
+PLcom/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;->onPackageModified(Ljava/lang/String;)V
+PLcom/android/server/NetworkScoreService$NetworkScorerPackageMonitor;->onPackageUpdateFinished(Ljava/lang/String;I)V
+PLcom/android/server/NetworkScoreService$ScoringServiceConnection;-><init>(Landroid/net/NetworkScorerAppData;)V
+PLcom/android/server/NetworkScoreService$ScoringServiceConnection;->bind(Landroid/content/Context;)V
+PLcom/android/server/NetworkScoreService$ScoringServiceConnection;->getRecommendationProvider()Landroid/net/INetworkRecommendationProvider;
+PLcom/android/server/NetworkScoreService$ScoringServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/NetworkScoreService$ScoringServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
+PLcom/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;->-com_android_server_NetworkScoreService-mthref-0(Landroid/net/NetworkScorerAppData;)Lcom/android/server/NetworkScoreService$ScoringServiceConnection;
+PLcom/android/server/NetworkScoreService;->-get0()Z
+PLcom/android/server/NetworkScoreService;->-get2(Lcom/android/server/NetworkScoreService;)Lcom/android/server/NetworkScorerAppManager;
+PLcom/android/server/NetworkScoreService;->-wrap0(Lcom/android/server/NetworkScoreService;Landroid/net/NetworkScorerAppData;)V
+PLcom/android/server/NetworkScoreService;->-wrap1(Lcom/android/server/NetworkScoreService;)V
+PLcom/android/server/NetworkScoreService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/NetworkScoreService;-><init>(Landroid/content/Context;Lcom/android/server/NetworkScorerAppManager;Ljava/util/function/Function;Landroid/os/Looper;)V
+PLcom/android/server/NetworkScoreService;->bindToScoringServiceIfNeeded()V
+PLcom/android/server/NetworkScoreService;->bindToScoringServiceIfNeeded(Landroid/net/NetworkScorerAppData;)V
+PLcom/android/server/NetworkScoreService;->clearInternal()V
+PLcom/android/server/NetworkScoreService;->getRecommendationProvider()Landroid/net/INetworkRecommendationProvider;
+PLcom/android/server/NetworkScoreService;->getScoreCacheLists()Ljava/util/Collection;
+PLcom/android/server/NetworkScoreService;->onUserUnlocked(I)V
+PLcom/android/server/NetworkScoreService;->refreshBinding()V
+PLcom/android/server/NetworkScoreService;->registerNetworkScoreCache(ILandroid/net/INetworkScoreCache;I)V
+PLcom/android/server/NetworkScoreService;->registerPackageMonitorIfNeeded()V
+PLcom/android/server/NetworkScoreService;->registerRecommendationSettingsObserver()V
+PLcom/android/server/NetworkScoreService;->systemReady()V
+PLcom/android/server/NetworkScoreService;->systemRunning()V
+PLcom/android/server/NetworkScoreService;->unbindFromScoringServiceIfNeeded()V
+PLcom/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
+PLcom/android/server/NetworkScorerAppManager;-><init>(Landroid/content/Context;)V
+PLcom/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;
+PLcom/android/server/NetworkScorerAppManager;->hasPermissions(ILjava/lang/String;)Z
+PLcom/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
+PLcom/android/server/NetworkTimeUpdateService$1;-><init>(Lcom/android/server/NetworkTimeUpdateService;)V
+PLcom/android/server/NetworkTimeUpdateService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/NetworkTimeUpdateService$2;-><init>(Lcom/android/server/NetworkTimeUpdateService;)V
+PLcom/android/server/NetworkTimeUpdateService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/NetworkTimeUpdateService$MyHandler;-><init>(Lcom/android/server/NetworkTimeUpdateService;Landroid/os/Looper;)V
+PLcom/android/server/NetworkTimeUpdateService$MyHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;-><init>(Lcom/android/server/NetworkTimeUpdateService;)V
+PLcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;-><init>(Lcom/android/server/NetworkTimeUpdateService;Lcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;)V
+PLcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;->onAvailable(Landroid/net/Network;)V
+PLcom/android/server/NetworkTimeUpdateService$SettingsObserver;-><init>(Landroid/os/Handler;I)V
+PLcom/android/server/NetworkTimeUpdateService$SettingsObserver;->observe(Landroid/content/Context;)V
+PLcom/android/server/NetworkTimeUpdateService;->-get1(Lcom/android/server/NetworkTimeUpdateService;)Landroid/os/Handler;
+PLcom/android/server/NetworkTimeUpdateService;->-set0(Lcom/android/server/NetworkTimeUpdateService;Landroid/net/Network;)Landroid/net/Network;
+PLcom/android/server/NetworkTimeUpdateService;->-set1(Lcom/android/server/NetworkTimeUpdateService;J)J
+PLcom/android/server/NetworkTimeUpdateService;->-wrap0(Lcom/android/server/NetworkTimeUpdateService;I)V
+PLcom/android/server/NetworkTimeUpdateService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/NetworkTimeUpdateService;->isAutomaticTimeRequested()Z
+PLcom/android/server/NetworkTimeUpdateService;->onPollNetworkTime(I)V
+PLcom/android/server/NetworkTimeUpdateService;->onPollNetworkTimeUnderWakeLock(I)V
+PLcom/android/server/NetworkTimeUpdateService;->registerForAlarms()V
+PLcom/android/server/NetworkTimeUpdateService;->registerForTelephonyIntents()V
+PLcom/android/server/NetworkTimeUpdateService;->resetAlarm(J)V
+PLcom/android/server/NetworkTimeUpdateService;->systemRunning()V
+PLcom/android/server/NsdService$DaemonConnection;-><init>(Lcom/android/server/NsdService$NativeCallbackReceiver;)V
+PLcom/android/server/NsdService$NativeCallbackReceiver;-><init>(Lcom/android/server/NsdService;)V
+PLcom/android/server/NsdService$NativeCallbackReceiver;->awaitConnection()V
+PLcom/android/server/NsdService$NativeCallbackReceiver;->onDaemonConnected()V
+PLcom/android/server/NsdService$NsdSettings$1;-><init>(Landroid/content/ContentResolver;)V
+PLcom/android/server/NsdService$NsdSettings$1;->isEnabled()Z
+PLcom/android/server/NsdService$NsdSettings$1;->registerContentObserver(Landroid/net/Uri;Landroid/database/ContentObserver;)V
+PLcom/android/server/NsdService$NsdSettings;->makeDefault(Landroid/content/Context;)Lcom/android/server/NsdService$NsdSettings;
+PLcom/android/server/NsdService$NsdStateMachine$1;-><init>(Lcom/android/server/NsdService$NsdStateMachine;Landroid/os/Handler;)V
+PLcom/android/server/NsdService$NsdStateMachine$DefaultState;-><init>(Lcom/android/server/NsdService$NsdStateMachine;)V
+PLcom/android/server/NsdService$NsdStateMachine$DisabledState;-><init>(Lcom/android/server/NsdService$NsdStateMachine;)V
+PLcom/android/server/NsdService$NsdStateMachine$EnabledState;-><init>(Lcom/android/server/NsdService$NsdStateMachine;)V
+PLcom/android/server/NsdService$NsdStateMachine$EnabledState;->enter()V
+PLcom/android/server/NsdService$NsdStateMachine;-><init>(Lcom/android/server/NsdService;Ljava/lang/String;Landroid/os/Handler;)V
+PLcom/android/server/NsdService$NsdStateMachine;->registerForNsdSetting()V
+PLcom/android/server/NsdService;->-com_android_server_NsdService-mthref-0(Lcom/android/server/NsdService$NativeCallbackReceiver;)Lcom/android/server/NsdService$DaemonConnection;
+PLcom/android/server/NsdService;->-get0(Lcom/android/server/NsdService;)Ljava/util/HashMap;
+PLcom/android/server/NsdService;->-get4(Lcom/android/server/NsdService;)Lcom/android/server/NsdService$NsdSettings;
+PLcom/android/server/NsdService;->-wrap15(Lcom/android/server/NsdService;Z)V
+PLcom/android/server/NsdService;->-wrap2(Lcom/android/server/NsdService;)Z
+PLcom/android/server/NsdService;-><init>(Landroid/content/Context;Lcom/android/server/NsdService$NsdSettings;Landroid/os/Handler;Lcom/android/server/NsdService$DaemonConnectionSupplier;)V
+PLcom/android/server/NsdService;->create(Landroid/content/Context;)Lcom/android/server/NsdService;
+PLcom/android/server/NsdService;->isNsdEnabled()Z
+PLcom/android/server/NsdService;->sendNsdStateChangeBroadcast(Z)V
+PLcom/android/server/PersistentDataBlockService$1;-><init>(Lcom/android/server/PersistentDataBlockService;)V
+PLcom/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
+PLcom/android/server/PersistentDataBlockService$2;-><init>(Lcom/android/server/PersistentDataBlockService;)V
+PLcom/android/server/PersistentDataBlockService;->-get2(Lcom/android/server/PersistentDataBlockService;)Ljava/lang/String;
+PLcom/android/server/PersistentDataBlockService;->-get4(Lcom/android/server/PersistentDataBlockService;)Z
+PLcom/android/server/PersistentDataBlockService;->-get5(Lcom/android/server/PersistentDataBlockService;)Ljava/lang/Object;
+PLcom/android/server/PersistentDataBlockService;->-wrap0(Lcom/android/server/PersistentDataBlockService;)Z
+PLcom/android/server/PersistentDataBlockService;->-wrap11(Lcom/android/server/PersistentDataBlockService;I)V
+PLcom/android/server/PersistentDataBlockService;->-wrap2(Lcom/android/server/PersistentDataBlockService;)Z
+PLcom/android/server/PersistentDataBlockService;->-wrap3(Lcom/android/server/PersistentDataBlockService;Ljava/io/DataInputStream;)I
+PLcom/android/server/PersistentDataBlockService;->-wrap5(Lcom/android/server/PersistentDataBlockService;)J
+PLcom/android/server/PersistentDataBlockService;->-wrap9(Lcom/android/server/PersistentDataBlockService;)V
+PLcom/android/server/PersistentDataBlockService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/PersistentDataBlockService;->computeAndWriteDigestLocked()Z
+PLcom/android/server/PersistentDataBlockService;->doGetMaximumDataBlockSize()J
+PLcom/android/server/PersistentDataBlockService;->doGetOemUnlockEnabled()Z
+PLcom/android/server/PersistentDataBlockService;->enforceChecksumValidity()Z
+PLcom/android/server/PersistentDataBlockService;->enforceOemUnlockReadPermission()V
+PLcom/android/server/PersistentDataBlockService;->enforceUid(I)V
+PLcom/android/server/PersistentDataBlockService;->formatIfOemUnlockEnabled()V
+PLcom/android/server/PersistentDataBlockService;->getAllowedUid(I)I
+PLcom/android/server/PersistentDataBlockService;->getBlockDeviceSize()J
+PLcom/android/server/PersistentDataBlockService;->getTotalDataSizeLocked(Ljava/io/DataInputStream;)I
+PLcom/android/server/PersistentDataBlockService;->lambda$-com_android_server_PersistentDataBlockService_5033()V
+PLcom/android/server/PersistentDataBlockService;->onBootPhase(I)V
+PLcom/android/server/PersistentDataBlockService;->onStart()V
+PLcom/android/server/PinnerService$1;-><init>(Lcom/android/server/PinnerService;)V
+PLcom/android/server/PinnerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/PinnerService$BinderService;-><init>(Lcom/android/server/PinnerService;)V
+PLcom/android/server/PinnerService$BinderService;-><init>(Lcom/android/server/PinnerService;Lcom/android/server/PinnerService$BinderService;)V
+PLcom/android/server/PinnerService$PinnedFile;-><init>(JJLjava/lang/String;)V
+PLcom/android/server/PinnerService$PinnerHandler;-><init>(Lcom/android/server/PinnerService;Landroid/os/Looper;)V
+PLcom/android/server/PinnerService$PinnerHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/PinnerService;->-wrap0(Lcom/android/server/PinnerService;I)V
+PLcom/android/server/PinnerService;->-wrap1(Lcom/android/server/PinnerService;)V
+PLcom/android/server/PinnerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/PinnerService;->getCameraInfo(I)Landroid/content/pm/ApplicationInfo;
+PLcom/android/server/PinnerService;->handlePinCamera(I)V
+PLcom/android/server/PinnerService;->handlePinOnStart()V
+PLcom/android/server/PinnerService;->isResolverActivity(Landroid/content/pm/ActivityInfo;)Z
+PLcom/android/server/PinnerService;->onStart()V
+PLcom/android/server/PinnerService;->pinCamera(I)Z
+PLcom/android/server/PinnerService;->pinFile(Ljava/lang/String;JJJ)Lcom/android/server/PinnerService$PinnedFile;
+PLcom/android/server/PinnerService;->unpinCameraApp()V
+PLcom/android/server/PinnerService;->unpinFile(Lcom/android/server/PinnerService$PinnedFile;)Z
+PLcom/android/server/PinnerService;->update(Landroid/util/ArraySet;)V
+PLcom/android/server/PruneInstantAppsJobService;->schedule(Landroid/content/Context;)V
+PLcom/android/server/RandomBlock;-><init>()V
+PLcom/android/server/RandomBlock;->close(Ljava/io/Closeable;)V
+PLcom/android/server/RandomBlock;->fromFile(Ljava/lang/String;)Lcom/android/server/RandomBlock;
+PLcom/android/server/RandomBlock;->fromStream(Ljava/io/InputStream;)Lcom/android/server/RandomBlock;
+PLcom/android/server/RandomBlock;->toDataOut(Ljava/io/DataOutput;)V
+PLcom/android/server/RandomBlock;->toFile(Ljava/lang/String;Z)V
+PLcom/android/server/RandomBlock;->truncateIfPossible(Ljava/io/RandomAccessFile;)V
+PLcom/android/server/RecoverySystemService$BinderService;->checkAndWaitForUncryptService()Z
+PLcom/android/server/RecoverySystemService$BinderService;->clearBcb()Z
+PLcom/android/server/RecoverySystemService$BinderService;->connectService()Landroid/net/LocalSocket;
+PLcom/android/server/RecoverySystemService$BinderService;->setupOrClearBcb(ZLjava/lang/String;)Z
+PLcom/android/server/RecoverySystemService;->-get0(Lcom/android/server/RecoverySystemService;)Landroid/content/Context;
+PLcom/android/server/RecoverySystemService;->-get1()Ljava/lang/Object;
+PLcom/android/server/RescueParty;->executeRescueLevel(Landroid/content/Context;)V
+PLcom/android/server/RescueParty;->onSettingsProviderPublished(Landroid/content/Context;)V
+PLcom/android/server/SensorNotificationService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/SensorNotificationService;->onBootPhase(I)V
+PLcom/android/server/SensorNotificationService;->onLocationChanged(Landroid/location/Location;)V
+PLcom/android/server/SensorNotificationService;->onStart()V
+PLcom/android/server/SensorNotificationService;->useMockedLocation()Z
+PLcom/android/server/SerialService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/ServiceWatcher$1;-><init>(Lcom/android/server/ServiceWatcher;)V
+PLcom/android/server/ServiceWatcher$1;->onPackageChanged(Ljava/lang/String;I[Ljava/lang/String;)Z
+PLcom/android/server/ServiceWatcher$2;-><init>(Lcom/android/server/ServiceWatcher;)V
+PLcom/android/server/ServiceWatcher$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/ServiceWatcher;->-get0(Lcom/android/server/ServiceWatcher;)Ljava/lang/String;
+PLcom/android/server/ServiceWatcher;->-get1(Lcom/android/server/ServiceWatcher;)Ljava/lang/Object;
+PLcom/android/server/ServiceWatcher;->-wrap0(Lcom/android/server/ServiceWatcher;Ljava/lang/String;Z)Z
+PLcom/android/server/ServiceWatcher;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;IIILjava/lang/Runnable;Landroid/os/Handler;)V
+PLcom/android/server/ServiceWatcher;->bindToPackageLocked(Landroid/content/ComponentName;II)V
+PLcom/android/server/ServiceWatcher;->getBestPackageName()Ljava/lang/String;
+PLcom/android/server/ServiceWatcher;->getBinder()Landroid/os/IBinder;
+PLcom/android/server/ServiceWatcher;->getSignatureSets(Landroid/content/Context;Ljava/util/List;)Ljava/util/ArrayList;
+PLcom/android/server/ServiceWatcher;->isServiceMissing()Z
+PLcom/android/server/ServiceWatcher;->isSignatureMatch([Landroid/content/pm/Signature;)Z
+PLcom/android/server/ServiceWatcher;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/ServiceWatcher;->onServiceDisconnected(Landroid/content/ComponentName;)V
+PLcom/android/server/ServiceWatcher;->start()Z
+PLcom/android/server/ServiceWatcher;->switchUser(I)V
+PLcom/android/server/ServiceWatcher;->unbindLocked()V
+PLcom/android/server/ServiceWatcher;->unlockUser(I)V
+PLcom/android/server/StorageManagerService$1;-><init>(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService$Callbacks;->-wrap2(Lcom/android/server/StorageManagerService$Callbacks;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/StorageManagerService$Callbacks;->-wrap5(Lcom/android/server/StorageManagerService$Callbacks;Landroid/os/storage/VolumeInfo;II)V
+PLcom/android/server/StorageManagerService$Callbacks;-><init>(Landroid/os/Looper;)V
+PLcom/android/server/StorageManagerService$Callbacks;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/StorageManagerService$Callbacks;->invokeCallback(Landroid/os/storage/IStorageEventListener;ILcom/android/internal/os/SomeArgs;)V
+PLcom/android/server/StorageManagerService$Callbacks;->notifyStorageStateChanged(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/StorageManagerService$Callbacks;->notifyVolumeStateChanged(Landroid/os/storage/VolumeInfo;II)V
+PLcom/android/server/StorageManagerService$Callbacks;->register(Landroid/os/storage/IStorageEventListener;)V
+PLcom/android/server/StorageManagerService$DefaultContainerConnection;-><init>(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/StorageManagerService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/StorageManagerService$Lifecycle;->onStart()V
+PLcom/android/server/StorageManagerService$Lifecycle;->onUnlockUser(I)V
+PLcom/android/server/StorageManagerService$ObbActionHandler;-><init>(Lcom/android/server/StorageManagerService;Landroid/os/Looper;)V
+PLcom/android/server/StorageManagerService$StorageManagerInternalImpl;-><init>(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService$StorageManagerInternalImpl;-><init>(Lcom/android/server/StorageManagerService;Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;)V
+PLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->addExternalStoragePolicy(Landroid/os/storage/StorageManagerInternal$ExternalStorageMountPolicy;)V
+PLcom/android/server/StorageManagerService$StorageManagerServiceHandler;-><init>(Lcom/android/server/StorageManagerService;Landroid/os/Looper;)V
+PLcom/android/server/StorageManagerService$StorageManagerServiceHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/StorageManagerService;->-get0(Lcom/android/server/StorageManagerService;)Lcom/android/server/NativeDaemonConnector;
+PLcom/android/server/StorageManagerService;->-get2(Lcom/android/server/StorageManagerService;)Landroid/content/Context;
+PLcom/android/server/StorageManagerService;->-wrap0(Lcom/android/server/StorageManagerService;Landroid/os/storage/VolumeInfo;)Z
+PLcom/android/server/StorageManagerService;->-wrap10(Lcom/android/server/StorageManagerService;I)V
+PLcom/android/server/StorageManagerService;->-wrap14(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService;->-wrap15(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService;->-wrap5(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService;->-wrap7(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService;->-wrap8(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/StorageManagerService;->addInternalVolumeLocked()V
+PLcom/android/server/StorageManagerService;->addUserKeyAuth(II[B[B)V
+PLcom/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;->copyLocaleFromMountService()V
+PLcom/android/server/StorageManagerService;->encodeBytes([B)Lcom/android/server/NativeDaemonConnector$SensitiveArg;
+PLcom/android/server/StorageManagerService;->enforcePermission(Ljava/lang/String;)V
+PLcom/android/server/StorageManagerService;->escapeNull(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/StorageManagerService;->fixateNewestUserKeyAuth(I)V
+PLcom/android/server/StorageManagerService;->getDefaultPrimaryStorageUuid()Ljava/lang/String;
+PLcom/android/server/StorageManagerService;->getDisks()[Landroid/os/storage/DiskInfo;
+PLcom/android/server/StorageManagerService;->getField(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/StorageManagerService;->getPassword()Ljava/lang/String;
+PLcom/android/server/StorageManagerService;->getSecureContainerList()[Ljava/lang/String;
+PLcom/android/server/StorageManagerService;->getVolumeRecords(I)[Landroid/os/storage/VolumeRecord;
+PLcom/android/server/StorageManagerService;->handleDaemonConnected()V
+PLcom/android/server/StorageManagerService;->handleSystemReady()V
+PLcom/android/server/StorageManagerService;->initIfReadyAndConnected()V
+PLcom/android/server/StorageManagerService;->isMountDisallowed(Landroid/os/storage/VolumeInfo;)Z
+PLcom/android/server/StorageManagerService;->isReady()Z
+PLcom/android/server/StorageManagerService;->killMediaProvider(Ljava/util/List;)V
+PLcom/android/server/StorageManagerService;->lastMaintenance()J
+PLcom/android/server/StorageManagerService;->onCheckHoldWakeLock(I)Z
+PLcom/android/server/StorageManagerService;->onDaemonConnected()V
+PLcom/android/server/StorageManagerService;->onEvent(ILjava/lang/String;[Ljava/lang/String;)Z
+PLcom/android/server/StorageManagerService;->onEventLocked(ILjava/lang/String;[Ljava/lang/String;)Z
+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;->prepareUserStorage(Ljava/lang/String;III)V
+PLcom/android/server/StorageManagerService;->readSettingsLocked()V
+PLcom/android/server/StorageManagerService;->registerListener(Landroid/os/storage/IStorageEventListener;)V
+PLcom/android/server/StorageManagerService;->resetIfReadyAndConnected()V
+PLcom/android/server/StorageManagerService;->start()V
+PLcom/android/server/StorageManagerService;->systemReady()V
+PLcom/android/server/StorageManagerService;->unlockUserKey(II[B[B)V
+PLcom/android/server/StorageManagerService;->waitForAsecScan()V
+PLcom/android/server/StorageManagerService;->waitForLatch(Ljava/util/concurrent/CountDownLatch;Ljava/lang/String;)V
+PLcom/android/server/StorageManagerService;->waitForLatch(Ljava/util/concurrent/CountDownLatch;Ljava/lang/String;J)V
+PLcom/android/server/StorageManagerService;->waitForReady()V
+PLcom/android/server/StorageManagerService;->warnOnNotMounted()V
+PLcom/android/server/SystemServer;->lambda$-com_android_server_SystemServer_29579()V
+PLcom/android/server/SystemServer;->lambda$-com_android_server_SystemServer_34627()V
+PLcom/android/server/SystemServer;->lambda$-com_android_server_SystemServer_38931()V
+PLcom/android/server/SystemServer;->lambda$-com_android_server_SystemServer_75718(Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;Lcom/android/server/NetworkScoreService;Lcom/android/server/NetworkManagementService;Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkStatsService;Lcom/android/server/ConnectivityService;Lcom/android/server/LocationManagerService;Lcom/android/server/CountryDetectorService;Lcom/android/server/NetworkTimeUpdateService;Lcom/android/server/CommonTimeManagementService;Lcom/android/server/input/InputManagerService;Lcom/android/server/TelephonyRegistry;Lcom/android/server/media/MediaRouterService;Lcom/android/server/MmsServiceBroker;)V
+PLcom/android/server/SystemServer;->lambda$-com_android_server_SystemServer_76623()V
+PLcom/android/server/SystemServer;->startCoreServices()V
+PLcom/android/server/SystemServer;->startSystemUi(Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/SystemServerInitThreadPool;->shutdown()V
+PLcom/android/server/SystemService;->getBinderService(Ljava/lang/String;)Landroid/os/IBinder;
+PLcom/android/server/SystemService;->getLocalService(Ljava/lang/Class;)Ljava/lang/Object;
+PLcom/android/server/SystemService;->getManager()Lcom/android/server/SystemServiceManager;
+PLcom/android/server/SystemService;->isSafeMode()Z
+PLcom/android/server/SystemService;->onStartUser(I)V
+PLcom/android/server/SystemService;->onUnlockUser(I)V
+PLcom/android/server/SystemServiceManager;->isBootCompleted()Z
+PLcom/android/server/SystemServiceManager;->isRuntimeRestarted()Z
+PLcom/android/server/SystemServiceManager;->isSafeMode()Z
+PLcom/android/server/SystemServiceManager;->setSafeMode(Z)V
+PLcom/android/server/SystemServiceManager;->startService(Ljava/lang/String;)Lcom/android/server/SystemService;
+PLcom/android/server/TelephonyRegistry$1;-><init>(Lcom/android/server/TelephonyRegistry;)V
+PLcom/android/server/TelephonyRegistry$1;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/TelephonyRegistry$2;-><init>(Lcom/android/server/TelephonyRegistry;)V
+PLcom/android/server/TelephonyRegistry$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/TelephonyRegistry$Record;-><init>()V
+PLcom/android/server/TelephonyRegistry$Record;-><init>(Lcom/android/server/TelephonyRegistry$Record;)V
+PLcom/android/server/TelephonyRegistry$Record;->matchOnSubscriptionsChangedListener()Z
+PLcom/android/server/TelephonyRegistry;->-get0(Lcom/android/server/TelephonyRegistry;)[Landroid/os/Bundle;
+PLcom/android/server/TelephonyRegistry;->-get3(Lcom/android/server/TelephonyRegistry;)Landroid/os/Handler;
+PLcom/android/server/TelephonyRegistry;-><init>(Landroid/content/Context;)V
+PLcom/android/server/TelephonyRegistry;->broadcastServiceStateChanged(Landroid/telephony/ServiceState;II)V
+PLcom/android/server/TelephonyRegistry;->broadcastSignalStrengthChanged(Landroid/telephony/SignalStrength;II)V
+PLcom/android/server/TelephonyRegistry;->canReadPhoneState(Ljava/lang/String;)Z
+PLcom/android/server/TelephonyRegistry;->checkListenerPermission(I)V
+PLcom/android/server/TelephonyRegistry;->checkNotifyPermission()Z
+PLcom/android/server/TelephonyRegistry;->checkNotifyPermission(Ljava/lang/String;)Z
+PLcom/android/server/TelephonyRegistry;->handleRemoveListLocked()V
+PLcom/android/server/TelephonyRegistry;->idMatch(III)Z
+PLcom/android/server/TelephonyRegistry;->listenForSubscriber(ILjava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;IZ)V
+PLcom/android/server/TelephonyRegistry;->log(Ljava/lang/String;)V
+PLcom/android/server/TelephonyRegistry;->notifyCellLocationForSubscriber(ILandroid/os/Bundle;)V
+PLcom/android/server/TelephonyRegistry;->notifyDataActivityForSubscriber(II)V
+PLcom/android/server/TelephonyRegistry;->notifyMessageWaitingChangedForPhoneId(IIZ)V
+PLcom/android/server/TelephonyRegistry;->notifyOemHookRawEventForSubscriber(I[B)V
+PLcom/android/server/TelephonyRegistry;->notifyOtaspChanged(I)V
+PLcom/android/server/TelephonyRegistry;->notifyServiceStateForPhoneId(IILandroid/telephony/ServiceState;)V
+PLcom/android/server/TelephonyRegistry;->notifySubscriptionInfoChanged()V
+PLcom/android/server/TelephonyRegistry;->systemRunning()V
+PLcom/android/server/TelephonyRegistry;->validatePhoneId(I)Z
+PLcom/android/server/TextServicesManagerService$ISpellCheckerServiceCallbackBinder;-><init>(Lcom/android/server/TextServicesManagerService$SpellCheckerBindGroup;Lcom/android/server/TextServicesManagerService$SessionRequest;)V
+PLcom/android/server/TextServicesManagerService$ISpellCheckerServiceCallbackBinder;->onSessionCreated(Lcom/android/internal/textservice/ISpellCheckerSession;)V
+PLcom/android/server/TextServicesManagerService$InternalDeathRecipients;-><init>(Lcom/android/server/TextServicesManagerService$SpellCheckerBindGroup;)V
+PLcom/android/server/TextServicesManagerService$InternalServiceConnection;->-get0(Lcom/android/server/TextServicesManagerService$InternalServiceConnection;)Ljava/lang/String;
+PLcom/android/server/TextServicesManagerService$InternalServiceConnection;-><init>(Lcom/android/server/TextServicesManagerService;Ljava/lang/String;)V
+PLcom/android/server/TextServicesManagerService$InternalServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/TextServicesManagerService$InternalServiceConnection;->onServiceConnectedInnerLocked(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/TextServicesManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/TextServicesManagerService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/TextServicesManagerService$Lifecycle;->onStart()V
+PLcom/android/server/TextServicesManagerService$Lifecycle;->onUnlockUser(I)V
+PLcom/android/server/TextServicesManagerService$SessionRequest;-><init>(ILjava/lang/String;Lcom/android/internal/textservice/ITextServicesSessionListener;Lcom/android/internal/textservice/ISpellCheckerSessionListener;Landroid/os/Bundle;)V
+PLcom/android/server/TextServicesManagerService$SpellCheckerBindGroup;->-get1(Lcom/android/server/TextServicesManagerService$SpellCheckerBindGroup;)Lcom/android/server/TextServicesManagerService$InternalServiceConnection;
+PLcom/android/server/TextServicesManagerService$SpellCheckerBindGroup;-><init>(Lcom/android/server/TextServicesManagerService;Lcom/android/server/TextServicesManagerService$InternalServiceConnection;)V
+PLcom/android/server/TextServicesManagerService$SpellCheckerBindGroup;->cleanLocked()V
+PLcom/android/server/TextServicesManagerService$SpellCheckerBindGroup;->getISpellCheckerSessionOrQueueLocked(Lcom/android/server/TextServicesManagerService$SessionRequest;)V
+PLcom/android/server/TextServicesManagerService$SpellCheckerBindGroup;->onServiceConnectedLocked(Lcom/android/internal/textservice/ISpellCheckerService;)V
+PLcom/android/server/TextServicesManagerService$SpellCheckerBindGroup;->onSessionCreated(Lcom/android/internal/textservice/ISpellCheckerSession;Lcom/android/server/TextServicesManagerService$SessionRequest;)V
+PLcom/android/server/TextServicesManagerService$SpellCheckerBindGroup;->removeListener(Lcom/android/internal/textservice/ISpellCheckerSessionListener;)V
+PLcom/android/server/TextServicesManagerService$TextServicesBroadcastReceiver;-><init>(Lcom/android/server/TextServicesManagerService;)V
+PLcom/android/server/TextServicesManagerService$TextServicesBroadcastReceiver;-><init>(Lcom/android/server/TextServicesManagerService;Lcom/android/server/TextServicesManagerService$TextServicesBroadcastReceiver;)V
+PLcom/android/server/TextServicesManagerService$TextServicesMonitor;-><init>(Lcom/android/server/TextServicesManagerService;)V
+PLcom/android/server/TextServicesManagerService$TextServicesMonitor;-><init>(Lcom/android/server/TextServicesManagerService;Lcom/android/server/TextServicesManagerService$TextServicesMonitor;)V
+PLcom/android/server/TextServicesManagerService$TextServicesMonitor;->isChangingPackagesOfCurrentUser()Z
+PLcom/android/server/TextServicesManagerService$TextServicesMonitor;->onSomePackagesChanged()V
+PLcom/android/server/TextServicesManagerService$TextServicesSettings;-><init>(Landroid/content/ContentResolver;IZ)V
+PLcom/android/server/TextServicesManagerService$TextServicesSettings;->getBoolean(Ljava/lang/String;Z)Z
+PLcom/android/server/TextServicesManagerService$TextServicesSettings;->getCurrentUserId()I
+PLcom/android/server/TextServicesManagerService$TextServicesSettings;->getInt(Ljava/lang/String;I)I
+PLcom/android/server/TextServicesManagerService$TextServicesSettings;->getSelectedSpellChecker()Ljava/lang/String;
+PLcom/android/server/TextServicesManagerService$TextServicesSettings;->getSelectedSpellCheckerSubtype(I)I
+PLcom/android/server/TextServicesManagerService$TextServicesSettings;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/TextServicesManagerService$TextServicesSettings;->isSpellCheckerEnabled()Z
+PLcom/android/server/TextServicesManagerService$TextServicesSettings;->setCurrentProfileIds([I)V
+PLcom/android/server/TextServicesManagerService$TextServicesSettings;->switchCurrentUser(IZ)V
+PLcom/android/server/TextServicesManagerService;->-get1(Lcom/android/server/TextServicesManagerService;)Landroid/content/Context;
+PLcom/android/server/TextServicesManagerService;->-get2(Lcom/android/server/TextServicesManagerService;)Ljava/lang/Object;
+PLcom/android/server/TextServicesManagerService;->-get3(Lcom/android/server/TextServicesManagerService;)Lcom/android/server/TextServicesManagerService$TextServicesSettings;
+PLcom/android/server/TextServicesManagerService;->-get4(Lcom/android/server/TextServicesManagerService;)Ljava/util/HashMap;
+PLcom/android/server/TextServicesManagerService;->-get5(Lcom/android/server/TextServicesManagerService;)Ljava/util/ArrayList;
+PLcom/android/server/TextServicesManagerService;->-get6(Lcom/android/server/TextServicesManagerService;)Ljava/util/HashMap;
+PLcom/android/server/TextServicesManagerService;->-wrap1(Landroid/content/Context;Ljava/util/ArrayList;Ljava/util/HashMap;Lcom/android/server/TextServicesManagerService$TextServicesSettings;)V
+PLcom/android/server/TextServicesManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/TextServicesManagerService;->bindCurrentSpellCheckerService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z
+PLcom/android/server/TextServicesManagerService;->findAvailSpellCheckerLocked(Ljava/lang/String;)Landroid/view/textservice/SpellCheckerInfo;
+PLcom/android/server/TextServicesManagerService;->finishSpellCheckerService(Lcom/android/internal/textservice/ISpellCheckerSessionListener;)V
+PLcom/android/server/TextServicesManagerService;->getCurrentSpellChecker(Ljava/lang/String;)Landroid/view/textservice/SpellCheckerInfo;
+PLcom/android/server/TextServicesManagerService;->getCurrentSpellCheckerWithoutVerification()Landroid/view/textservice/SpellCheckerInfo;
+PLcom/android/server/TextServicesManagerService;->getSpellCheckerService(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/textservice/ITextServicesSessionListener;Lcom/android/internal/textservice/ISpellCheckerSessionListener;Landroid/os/Bundle;)V
+PLcom/android/server/TextServicesManagerService;->isSpellCheckerEnabled()Z
+PLcom/android/server/TextServicesManagerService;->isSpellCheckerEnabledLocked()Z
+PLcom/android/server/TextServicesManagerService;->onUnlockUser(I)V
+PLcom/android/server/TextServicesManagerService;->resetInternalState(I)V
+PLcom/android/server/TextServicesManagerService;->startSpellCheckerServiceInnerLocked(Landroid/view/textservice/SpellCheckerInfo;)Lcom/android/server/TextServicesManagerService$SpellCheckerBindGroup;
+PLcom/android/server/TextServicesManagerService;->systemRunning()V
+PLcom/android/server/TextServicesManagerService;->unbindServiceLocked()V
+PLcom/android/server/TextServicesManagerService;->updateCurrentProfileIds()V
+PLcom/android/server/ThreadPriorityBooster$1;->initialValue()Lcom/android/server/ThreadPriorityBooster$PriorityState;
+PLcom/android/server/ThreadPriorityBooster$1;->initialValue()Ljava/lang/Object;
+PLcom/android/server/ThreadPriorityBooster$PriorityState;-><init>()V
+PLcom/android/server/ThreadPriorityBooster$PriorityState;-><init>(Lcom/android/server/ThreadPriorityBooster$PriorityState;)V
+PLcom/android/server/UiModeManagerService$1;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService$2;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService$3;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService$4;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService$5;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService$6;-><init>(Lcom/android/server/UiModeManagerService;)V
+PLcom/android/server/UiModeManagerService$6;->getCurrentModeType()I
+PLcom/android/server/UiModeManagerService;->-set0(Lcom/android/server/UiModeManagerService;Z)Z
+PLcom/android/server/UiModeManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/UiModeManagerService;->lambda$-com_android_server_UiModeManagerService_9177()V
+PLcom/android/server/UiModeManagerService;->onBootPhase(I)V
+PLcom/android/server/UiModeManagerService;->onStart()V
+PLcom/android/server/UiModeManagerService;->registerVrStateListener()V
+PLcom/android/server/UiModeManagerService;->sendConfigurationLocked()V
+PLcom/android/server/UiModeManagerService;->updateComputedNightModeLocked()V
+PLcom/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
+PLcom/android/server/UpdateLockService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/UpdateLockService;->acquireUpdateLock(Landroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/UpdateLockService;->makeTag(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/UpdateLockService;->releaseUpdateLock(Landroid/os/IBinder;)V
+PLcom/android/server/UpdateLockService;->sendLockChangedBroadcast(Z)V
+PLcom/android/server/VibratorService$1;-><init>(Lcom/android/server/VibratorService;)V
+PLcom/android/server/VibratorService$1;->run()V
+PLcom/android/server/VibratorService$2;-><init>(Lcom/android/server/VibratorService;)V
+PLcom/android/server/VibratorService$3;-><init>(Lcom/android/server/VibratorService;)V
+PLcom/android/server/VibratorService$4;-><init>(Lcom/android/server/VibratorService;)V
+PLcom/android/server/VibratorService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/VibratorService$SettingsObserver;-><init>(Lcom/android/server/VibratorService;Landroid/os/Handler;)V
+PLcom/android/server/VibratorService$Vibration;->-get1(Lcom/android/server/VibratorService$Vibration;)Ljava/lang/String;
+PLcom/android/server/VibratorService$Vibration;->-get2(Lcom/android/server/VibratorService$Vibration;)J
+PLcom/android/server/VibratorService$Vibration;->-get5(Lcom/android/server/VibratorService$Vibration;)I
+PLcom/android/server/VibratorService$Vibration;-><init>(Lcom/android/server/VibratorService;Landroid/os/IBinder;Landroid/os/VibrationEffect;IILjava/lang/String;)V
+PLcom/android/server/VibratorService$Vibration;-><init>(Lcom/android/server/VibratorService;Landroid/os/IBinder;Landroid/os/VibrationEffect;IILjava/lang/String;Lcom/android/server/VibratorService$Vibration;)V
+PLcom/android/server/VibratorService$VibrationInfo;-><init>(JLandroid/os/VibrationEffect;IILjava/lang/String;)V
+PLcom/android/server/VibratorService;->-wrap3(Lcom/android/server/VibratorService;)V
+PLcom/android/server/VibratorService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/VibratorService;->cancelVibrate(Landroid/os/IBinder;)V
+PLcom/android/server/VibratorService;->createEffect([J)Landroid/os/VibrationEffect;
+PLcom/android/server/VibratorService;->doVibratorExists()Z
+PLcom/android/server/VibratorService;->getLongIntArray(Landroid/content/res/Resources;I)[J
+PLcom/android/server/VibratorService;->hasVibrator()Z
+PLcom/android/server/VibratorService;->isAllowedToVibrate(Lcom/android/server/VibratorService$Vibration;)Z
+PLcom/android/server/VibratorService;->noteVibratorOffLocked()V
+PLcom/android/server/VibratorService;->noteVibratorOnLocked(IJ)V
+PLcom/android/server/VibratorService;->onVibrationFinished()V
+PLcom/android/server/VibratorService;->systemReady()V
+PLcom/android/server/VibratorService;->updateInputDeviceVibratorsLocked()Z
+PLcom/android/server/VibratorService;->updateLowPowerModeLocked()Z
+PLcom/android/server/VibratorService;->updateVibrators()V
+PLcom/android/server/VibratorService;->verifyVibrationEffect(Landroid/os/VibrationEffect;)Z
+PLcom/android/server/Watchdog$RebootRequestReceiver;-><init>(Lcom/android/server/Watchdog;)V
+PLcom/android/server/Watchdog;->init(Landroid/content/Context;Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/Watchdog;->processStarted(Ljava/lang/String;I)V
+PLcom/android/server/WiredAccessoryManager$1;-><init>(Lcom/android/server/WiredAccessoryManager;Landroid/os/Looper;Landroid/os/Handler$Callback;Z)V
+PLcom/android/server/WiredAccessoryManager$1;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/WiredAccessoryManager$WiredAccessoryObserver$UEventInfo;-><init>(Lcom/android/server/WiredAccessoryManager$WiredAccessoryObserver;Ljava/lang/String;III)V
+PLcom/android/server/WiredAccessoryManager$WiredAccessoryObserver$UEventInfo;->checkSwitchExists()Z
+PLcom/android/server/WiredAccessoryManager$WiredAccessoryObserver$UEventInfo;->getDevPath()Ljava/lang/String;
+PLcom/android/server/WiredAccessoryManager$WiredAccessoryObserver$UEventInfo;->getSwitchStatePath()Ljava/lang/String;
+PLcom/android/server/WiredAccessoryManager$WiredAccessoryObserver;-><init>(Lcom/android/server/WiredAccessoryManager;)V
+PLcom/android/server/WiredAccessoryManager$WiredAccessoryObserver;->init()V
+PLcom/android/server/WiredAccessoryManager$WiredAccessoryObserver;->makeObservedUEventList()Ljava/util/List;
+PLcom/android/server/WiredAccessoryManager;->-get0()Ljava/lang/String;
+PLcom/android/server/WiredAccessoryManager;->-get2(Lcom/android/server/WiredAccessoryManager;)Ljava/lang/Object;
+PLcom/android/server/WiredAccessoryManager;->-get3(Lcom/android/server/WiredAccessoryManager;)Z
+PLcom/android/server/WiredAccessoryManager;->-get4(Lcom/android/server/WiredAccessoryManager;)Landroid/os/PowerManager$WakeLock;
+PLcom/android/server/WiredAccessoryManager;->-wrap0(Lcom/android/server/WiredAccessoryManager;)V
+PLcom/android/server/WiredAccessoryManager;-><init>(Landroid/content/Context;Lcom/android/server/input/InputManagerService;)V
+PLcom/android/server/WiredAccessoryManager;->notifyWiredAccessoryChanged(JII)V
+PLcom/android/server/WiredAccessoryManager;->onSystemReady()V
+PLcom/android/server/WiredAccessoryManager;->switchCodeToString(II)Ljava/lang/String;
+PLcom/android/server/WiredAccessoryManager;->systemReady()V
+PLcom/android/server/WiredAccessoryManager;->updateLocked(Ljava/lang/String;I)V
+PLcom/android/server/accessibility/-$Lambda$kXhldx_ZxidxR4suyNIbZ545MMw$1;->$m$0()V
+PLcom/android/server/accessibility/-$Lambda$kXhldx_ZxidxR4suyNIbZ545MMw$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/accessibility/-$Lambda$kXhldx_ZxidxR4suyNIbZ545MMw$1;->run()V
+PLcom/android/server/accessibility/-$Lambda$kXhldx_ZxidxR4suyNIbZ545MMw;->$m$1(Ljava/lang/Object;)V
+PLcom/android/server/accessibility/-$Lambda$kXhldx_ZxidxR4suyNIbZ545MMw;->$m$2(Ljava/lang/Object;)V
+PLcom/android/server/accessibility/-$Lambda$kXhldx_ZxidxR4suyNIbZ545MMw;-><init>(BI)V
+PLcom/android/server/accessibility/-$Lambda$kXhldx_ZxidxR4suyNIbZ545MMw;->accept(Ljava/lang/Object;)V
+PLcom/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
+PLcom/android/server/accessibility/AccessibilityManagerService$1;->onPackageUpdateFinished(Ljava/lang/String;I)V
+PLcom/android/server/accessibility/AccessibilityManagerService$1;->onSomePackagesChanged()V
+PLcom/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
+PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityConnectionWrapper;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;ILandroid/view/accessibility/IAccessibilityInteractionConnection;I)V
+PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityConnectionWrapper;->linkToDeath()V
+PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityConnectionWrapper;->unlinkToDeath()V
+PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityContentObserver;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/os/Handler;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityContentObserver;->register(Landroid/content/ContentResolver;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;->clearAccessibilityFocusNotLocked(I)V
+PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;->getAccessibilityFocusNotLocked(I)Landroid/view/accessibility/AccessibilityNodeInfo;
+PLcom/android/server/accessibility/AccessibilityManagerService$MainHandler;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/os/Looper;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$MainHandler;->getUserClientsForId(I)Landroid/os/RemoteCallbackList;
+PLcom/android/server/accessibility/AccessibilityManagerService$MainHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$MainHandler;->lambda$-com_android_server_accessibility_AccessibilityManagerService$MainHandler_113532(ILandroid/view/accessibility/IAccessibilityManagerClient;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$MainHandler;->notifyClientsOfServicesStateChange(Landroid/os/RemoteCallbackList;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$MainHandler;->sendStateToClients(ILandroid/os/RemoteCallbackList;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->-wrap0(Lcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;I)Landroid/view/WindowInfo;
+PLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->-wrap4(Lcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;I)I
+PLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->-wrap5(Lcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->canCaptureFingerprintGestures(Lcom/android/server/accessibility/AccessibilityManagerService$Service;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->canControlMagnification(Lcom/android/server/accessibility/AccessibilityManagerService$Service;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->canRetrieveWindowsLocked(Lcom/android/server/accessibility/AccessibilityManagerService$Service;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->clearWindowsLocked()V
+PLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->findWindowInfoById(I)Landroid/view/WindowInfo;
+PLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->getFocusedWindowId()I
+PLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->hasPermission(Ljava/lang/String;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;->setAccessibilityFocusedWindowLocked(I)V
+PLcom/android/server/accessibility/AccessibilityManagerService$Service$1;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService$Service;Landroid/os/Looper;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$Service$2;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService$Service;Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$Service$2;->run()V
+PLcom/android/server/accessibility/AccessibilityManagerService$Service$InvocationHandler;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService$Service;Landroid/os/Looper;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;ILandroid/content/ComponentName;Landroid/accessibilityservice/AccessibilityServiceInfo;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->bindLocked()Z
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->binderDied()V
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->canRetrieveInteractiveWindowsLocked()Z
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->findFocus(IJIILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)Z
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->getWindow(I)Landroid/view/accessibility/AccessibilityWindowInfo;
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->isCapturingFingerprintGestures()Z
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->isConnectedLocked()Z
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->onAdded()V
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->onRemoved()V
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->resetLocked()V
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->resolveAccessibilityWindowIdForFindFocusLocked(II)I
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->setDynamicallyConfigurableProperties(Landroid/accessibilityservice/AccessibilityServiceInfo;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$Service;->setServiceInfo(Landroid/accessibilityservice/AccessibilityServiceInfo;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$UserState$1;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$UserState;->-get0(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Landroid/os/IBinder$DeathRecipient;
+PLcom/android/server/accessibility/AccessibilityManagerService$UserState;->-get1(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Lcom/android/server/accessibility/AccessibilityManagerService$Service;
+PLcom/android/server/accessibility/AccessibilityManagerService$UserState;->-get2(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Landroid/accessibilityservice/IAccessibilityServiceClient;
+PLcom/android/server/accessibility/AccessibilityManagerService$UserState;->-set0(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;I)I
+PLcom/android/server/accessibility/AccessibilityManagerService$UserState;->-set1(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;Lcom/android/server/accessibility/AccessibilityManagerService$Service;)Lcom/android/server/accessibility/AccessibilityManagerService$Service;
+PLcom/android/server/accessibility/AccessibilityManagerService$UserState;->-set2(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;Landroid/accessibilityservice/IAccessibilityServiceClient;)Landroid/accessibilityservice/IAccessibilityServiceClient;
+PLcom/android/server/accessibility/AccessibilityManagerService$UserState;->-set3(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;Landroid/os/IBinder;)Landroid/os/IBinder;
+PLcom/android/server/accessibility/AccessibilityManagerService$UserState;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
+PLcom/android/server/accessibility/AccessibilityManagerService$UserState;->destroyUiAutomationService()V
+PLcom/android/server/accessibility/AccessibilityManagerService$UserState;->getClientState()I
+PLcom/android/server/accessibility/AccessibilityManagerService$UserState;->isUiAutomationSuppressingOtherServices()Z
+PLcom/android/server/accessibility/AccessibilityManagerService$UserState;->onSwitchToAnotherUser()V
+PLcom/android/server/accessibility/AccessibilityManagerService$WindowsForAccessibilityCallback;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->-get0()I
+PLcom/android/server/accessibility/AccessibilityManagerService;->-get1(Lcom/android/server/accessibility/AccessibilityManagerService;)Landroid/content/Context;
+PLcom/android/server/accessibility/AccessibilityManagerService;->-get10(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilityManagerService$MainHandler;
+PLcom/android/server/accessibility/AccessibilityManagerService;->-get13(Lcom/android/server/accessibility/AccessibilityManagerService;)Landroid/os/PowerManager;
+PLcom/android/server/accessibility/AccessibilityManagerService;->-get19(Lcom/android/server/accessibility/AccessibilityManagerService;)Landroid/view/WindowManagerInternal;
+PLcom/android/server/accessibility/AccessibilityManagerService;->-get21()Landroid/content/ComponentName;
+PLcom/android/server/accessibility/AccessibilityManagerService;->-get22()I
+PLcom/android/server/accessibility/AccessibilityManagerService;->-get4(Lcom/android/server/accessibility/AccessibilityManagerService;)Landroid/os/RemoteCallbackList;
+PLcom/android/server/accessibility/AccessibilityManagerService;->-set0(I)I
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap11(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap13(Lcom/android/server/accessibility/AccessibilityManagerService;I)Lcom/android/server/accessibility/AccessibilityManagerService$UserState;
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap14(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/KeyEventDispatcher;
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap16(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService$Service;Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap18(Lcom/android/server/accessibility/AccessibilityManagerService;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap20(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap23(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService$Service;Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap25(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap28(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap29(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap30(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap33(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap34(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->-wrap4(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->addServiceLocked(Lcom/android/server/accessibility/AccessibilityManagerService$Service;Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->broadcastToClients(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;Ljava/util/function/Consumer;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->canRequestAndRequestsTouchExplorationLocked(Lcom/android/server/accessibility/AccessibilityManagerService$Service;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->ensureWindowsAvailableTimed()V
+PLcom/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;->lambda$-com_android_server_accessibility_AccessibilityManagerService_61763(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;I)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$-com_android_server_accessibility_AccessibilityManagerService_61817(ILandroid/view/accessibility/IAccessibilityManagerClient;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->notifyAccessibilityButtonVisibilityChanged(Z)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->notifyAccessibilityButtonVisibilityChangedLocked(Z)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->readAccessibilityButtonSettingsLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->readAccessibilityShortcutSettingLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->readAutoclickEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->readComponentNamesFromSettingLocked(Ljava/lang/String;ILjava/util/Set;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->readComponentNamesFromStringLocked(Ljava/lang/String;Ljava/util/Set;Z)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->readConfigurationForUserStateLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->readEnabledAccessibilityServicesLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->readHighTextContrastEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->readMagnificationEnabledSettingsLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->readTouchExplorationEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->readTouchExplorationGrantedAccessibilityServicesLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->registerBroadcastReceivers()V
+PLcom/android/server/accessibility/AccessibilityManagerService;->registerUiTestAutomationService(Landroid/os/IBinder;Landroid/accessibilityservice/IAccessibilityServiceClient;Landroid/accessibilityservice/AccessibilityServiceInfo;I)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->removeAccessibilityInteractionConnection(Landroid/view/IWindow;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->removeServiceLocked(Lcom/android/server/accessibility/AccessibilityManagerService$Service;Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->scheduleNotifyClientsOfServicesStateChange(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateClientsIfNeededLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateFingerprintGestureHandling(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateInputFilter(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->setPictureInPictureActionReplacingConnection(Landroid/view/accessibility/IAccessibilityInteractionConnection;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->switchUser(I)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->unbindAllServicesLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->unlockUser(I)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->unregisterUiTestAutomationService(Landroid/accessibilityservice/IAccessibilityServiceClient;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityButtonTargetsLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityEnabledSetting(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityFocusBehaviorLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updateDisplayDaltonizerLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updateDisplayInversionLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updateFilterKeyEventsLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updateFingerprintGestureHandling(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updateInputFilter(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updateMagnificationLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updatePerformGesturesLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updateRelevantEventsLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updateSoftKeyboardShowModeLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updateTouchExplorationLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->updateWindowsForAccessibilityCallbackLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->userHasListeningMagnificationServicesLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->userHasMagnificationServicesLocked(Lcom/android/server/accessibility/AccessibilityManagerService$UserState;)Z
+PLcom/android/server/accessibility/DisplayAdjustmentUtils;->applyDaltonizerSetting(Landroid/content/Context;I)V
+PLcom/android/server/accessibility/DisplayAdjustmentUtils;->applyInversionSetting(Landroid/content/Context;I)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/MagnificationController$1;-><init>(Lcom/android/server/accessibility/MagnificationController;)V
+PLcom/android/server/accessibility/MagnificationController$ScreenStateObserver;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/MagnificationController;)V
+PLcom/android/server/accessibility/MagnificationController$SettingsBridge;-><init>(Landroid/content/ContentResolver;)V
+PLcom/android/server/accessibility/MagnificationController$SpecAnimationBridge;-><init>(Landroid/content/Context;Ljava/lang/Object;Landroid/view/WindowManagerInternal;Landroid/animation/ValueAnimator;)V
+PLcom/android/server/accessibility/MagnificationController$SpecAnimationBridge;-><init>(Landroid/content/Context;Ljava/lang/Object;Landroid/view/WindowManagerInternal;Landroid/animation/ValueAnimator;Lcom/android/server/accessibility/MagnificationController$SpecAnimationBridge;)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>(Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService;Ljava/lang/Object;Landroid/os/Handler;Landroid/view/WindowManagerInternal;Landroid/animation/ValueAnimator;Lcom/android/server/accessibility/MagnificationController$SettingsBridge;)V
+PLcom/android/server/accessibility/MagnificationController;->getIdOfLastServiceToMagnify()I
+PLcom/android/server/accessibility/MagnificationController;->isMagnifying()Z
+PLcom/android/server/accessibility/MagnificationController;->setUserId(I)V
+PLcom/android/server/accessibility/MagnificationController;->unregister()V
+PLcom/android/server/accessibility/MagnificationController;->unregisterInternalLocked()V
+PLcom/android/server/accounts/-$Lambda$JwXVQhqSYlVkCeKB5Nx7U6RsZlU;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;-><init>()V
+PLcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;-><init>(Lcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;)V
+PLcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/accounts/AuthenticatorDescription;
+PLcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Ljava/lang/Object;
+PLcom/android/server/accounts/AccountAuthenticatorCache;-><init>(Landroid/content/Context;)V
+PLcom/android/server/accounts/AccountAuthenticatorCache;->parseServiceAttributes(Landroid/content/res/Resources;Ljava/lang/String;Landroid/util/AttributeSet;)Ljava/lang/Object;
+PLcom/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$2;-><init>(Lcom/android/server/accounts/AccountManagerService;)V
+PLcom/android/server/accounts/AccountManagerService$3;-><init>(Lcom/android/server/accounts/AccountManagerService;)V
+PLcom/android/server/accounts/AccountManagerService$3;->onPackageUpdateFinished(Ljava/lang/String;I)V
+PLcom/android/server/accounts/AccountManagerService$4;-><init>(Lcom/android/server/accounts/AccountManagerService;)V
+PLcom/android/server/accounts/AccountManagerService$8;-><init>(Lcom/android/server/accounts/AccountManagerService;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;->run()V
+PLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;-><init>(Lcom/android/server/accounts/AccountManagerService;)V
+PLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;)V
+PLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;->addOnAppPermissionChangeListener(Landroid/accounts/AccountManagerInternal$OnAppPermissionChangeListener;)V
+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$Injector;-><init>(Landroid/content/Context;)V
+PLcom/android/server/accounts/AccountManagerService$Injector;->addLocalService(Landroid/accounts/AccountManagerInternal;)V
+PLcom/android/server/accounts/AccountManagerService$Injector;->getAccountAuthenticatorCache()Lcom/android/server/accounts/IAccountAuthenticatorCache;
+PLcom/android/server/accounts/AccountManagerService$Injector;->getCeDatabaseName(I)Ljava/lang/String;
+PLcom/android/server/accounts/AccountManagerService$Injector;->getContext()Landroid/content/Context;
+PLcom/android/server/accounts/AccountManagerService$Injector;->getDeDatabaseName(I)Ljava/lang/String;
+PLcom/android/server/accounts/AccountManagerService$Injector;->getMessageHandlerLooper()Landroid/os/Looper;
+PLcom/android/server/accounts/AccountManagerService$Injector;->getNotificationManager()Landroid/app/INotificationManager;
+PLcom/android/server/accounts/AccountManagerService$Injector;->getPreNDatabaseName(I)Ljava/lang/String;
+PLcom/android/server/accounts/AccountManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/accounts/AccountManagerService$Lifecycle;->onStart()V
+PLcom/android/server/accounts/AccountManagerService$Lifecycle;->onUnlockUser(I)V
+PLcom/android/server/accounts/AccountManagerService$MessageHandler;-><init>(Lcom/android/server/accounts/AccountManagerService;Landroid/os/Looper;)V
+PLcom/android/server/accounts/AccountManagerService$NotificationId;->-get0(Lcom/android/server/accounts/AccountManagerService$NotificationId;)I
+PLcom/android/server/accounts/AccountManagerService$NotificationId;-><init>(Ljava/lang/String;I)V
+PLcom/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;->run()V
+PLcom/android/server/accounts/AccountManagerService$UserAccounts;->-get0(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Lcom/android/server/accounts/TokenCache;
+PLcom/android/server/accounts/AccountManagerService$UserAccounts;->-get1(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
+PLcom/android/server/accounts/AccountManagerService$UserAccounts;->-get2(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/HashMap;
+PLcom/android/server/accounts/AccountManagerService$UserAccounts;->-get4(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
+PLcom/android/server/accounts/AccountManagerService$UserAccounts;->-get6(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/HashMap;
+PLcom/android/server/accounts/AccountManagerService$UserAccounts;->-set0(Lcom/android/server/accounts/AccountManagerService$UserAccounts;I)I
+PLcom/android/server/accounts/AccountManagerService$UserAccounts;->-set1(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/database/sqlite/SQLiteStatement;)Landroid/database/sqlite/SQLiteStatement;
+PLcom/android/server/accounts/AccountManagerService$UserAccounts;-><init>(Landroid/content/Context;ILjava/io/File;Ljava/io/File;)V
+PLcom/android/server/accounts/AccountManagerService;->-get1(Lcom/android/server/accounts/AccountManagerService;)Ljava/util/concurrent/CopyOnWriteArrayList;
+PLcom/android/server/accounts/AccountManagerService;->-get2(Lcom/android/server/accounts/AccountManagerService;)Lcom/android/server/accounts/IAccountAuthenticatorCache;
+PLcom/android/server/accounts/AccountManagerService;->-wrap11(Lcom/android/server/accounts/AccountManagerService;IZ)V
+PLcom/android/server/accounts/AccountManagerService;->-wrap13(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$NotificationId;Landroid/os/UserHandle;)V
+PLcom/android/server/accounts/AccountManagerService;->-wrap21(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;->-wrap9(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Lcom/android/server/accounts/AccountManagerService$NotificationId;
+PLcom/android/server/accounts/AccountManagerService;-><init>(Lcom/android/server/accounts/AccountManagerService$Injector;)V
+PLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(IZ)V
+PLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(Landroid/accounts/Account;ILjava/lang/String;Z)V
+PLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(Landroid/accounts/Account;IZ)V
+PLcom/android/server/accounts/AccountManagerService;->cancelNotification(Lcom/android/server/accounts/AccountManagerService$NotificationId;Landroid/os/UserHandle;)V
+PLcom/android/server/accounts/AccountManagerService;->checkGetAccountsPermission(Ljava/lang/String;II)Z
+PLcom/android/server/accounts/AccountManagerService;->checkReadAccountsPermitted(ILjava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/accounts/AccountManagerService;->checkReadContactsPermission(Ljava/lang/String;II)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;->getAccounts([I)[Landroid/accounts/AccountAndUser;
+PLcom/android/server/accounts/AccountManagerService;->getAllAccounts()[Landroid/accounts/AccountAndUser;
+PLcom/android/server/accounts/AccountManagerService;->getAuthenticatorTypeAndUIDForUser(Lcom/android/server/accounts/IAccountAuthenticatorCache;I)Ljava/util/HashMap;
+PLcom/android/server/accounts/AccountManagerService;->getAuthenticatorTypes(I)[Landroid/accounts/AuthenticatorDescription;
+PLcom/android/server/accounts/AccountManagerService;->getPassword(Landroid/accounts/Account;)Ljava/lang/String;
+PLcom/android/server/accounts/AccountManagerService;->getRunningAccounts()[Landroid/accounts/AccountAndUser;
+PLcom/android/server/accounts/AccountManagerService;->getSingleton()Lcom/android/server/accounts/AccountManagerService;
+PLcom/android/server/accounts/AccountManagerService;->hasExplicitlyGrantedPermission(Landroid/accounts/Account;Ljava/lang/String;I)Z
+PLcom/android/server/accounts/AccountManagerService;->initializeDebugDbSizeAndCompileSqlStatementForLogging(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)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;->isAccountVisibleToCaller(Ljava/lang/String;IILjava/lang/String;)Z
+PLcom/android/server/accounts/AccountManagerService;->isCrossUser(II)Z
+PLcom/android/server/accounts/AccountManagerService;->onResult(Landroid/accounts/IAccountManagerResponse;Landroid/os/Bundle;)V
+PLcom/android/server/accounts/AccountManagerService;->onUnlockUser(I)V
+PLcom/android/server/accounts/AccountManagerService;->purgeOldGrants(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)V
+PLcom/android/server/accounts/AccountManagerService;->readPasswordInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Ljava/lang/String;
+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;->scanArgs([Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/accounts/AccountManagerService;->setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/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;->syncDeCeAccountsLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)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;->validateAccounts(I)V
+PLcom/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
+PLcom/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;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V
+PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->-set0(Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;Z)Z
+PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;-><init>(Landroid/content/Context;ILjava/lang/String;)V
+PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;-><init>(Landroid/content/Context;ILjava/lang/String;Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;)V
+PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->getReadableDatabaseUserIsUnlocked()Landroid/database/sqlite/SQLiteDatabase;
+PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->getWritableDatabaseUserIsUnlocked()Landroid/database/sqlite/SQLiteDatabase;
+PLcom/android/server/accounts/AccountsDb$DeDatabaseHelper;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V
+PLcom/android/server/accounts/AccountsDb;-><init>(Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;Landroid/content/Context;Ljava/io/File;)V
+PLcom/android/server/accounts/AccountsDb;->attachCeDatabase(Ljava/io/File;)V
+PLcom/android/server/accounts/AccountsDb;->beginTransaction()V
+PLcom/android/server/accounts/AccountsDb;->calculateDebugTableInsertionPoint()I
+PLcom/android/server/accounts/AccountsDb;->compileSqlStatementForLogging()Landroid/database/sqlite/SQLiteStatement;
+PLcom/android/server/accounts/AccountsDb;->create(Landroid/content/Context;ILjava/io/File;Ljava/io/File;)Lcom/android/server/accounts/AccountsDb;
+PLcom/android/server/accounts/AccountsDb;->deleteAuthToken(Ljava/lang/String;)Z
+PLcom/android/server/accounts/AccountsDb;->deleteAuthtokensByAccountIdAndType(JLjava/lang/String;)Z
+PLcom/android/server/accounts/AccountsDb;->dumpDeAccountsTable(Ljava/io/PrintWriter;)V
+PLcom/android/server/accounts/AccountsDb;->endTransaction()V
+PLcom/android/server/accounts/AccountsDb;->findAccountPasswordByNameAndType(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/accounts/AccountsDb;->findAllDeAccounts()Ljava/util/Map;
+PLcom/android/server/accounts/AccountsDb;->findAllUidGrants()Ljava/util/List;
+PLcom/android/server/accounts/AccountsDb;->findAllVisibilityValues()Ljava/util/Map;
+PLcom/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;->findCeAccountsNotInDe()Ljava/util/List;
+PLcom/android/server/accounts/AccountsDb;->findDeAccountId(Landroid/accounts/Account;)J
+PLcom/android/server/accounts/AccountsDb;->findMatchingGrantsCountAnyToken(ILandroid/accounts/Account;)J
+PLcom/android/server/accounts/AccountsDb;->findMetaAuthUid()Ljava/util/Map;
+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;->setTransactionSuccessful()V
+PLcom/android/server/accounts/AccountsDb;->updateExtra(JLjava/lang/String;)Z
+PLcom/android/server/accounts/TokenCache$Key;-><init>(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;[B)V
+PLcom/android/server/accounts/TokenCache$Key;->equals(Ljava/lang/Object;)Z
+PLcom/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;-><init>()V
+PLcom/android/server/accounts/TokenCache$TokenLruCache;->evict(Ljava/lang/String;Ljava/lang/String;)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(Lcom/android/server/accounts/TokenCache$Key;Lcom/android/server/accounts/TokenCache$Value;)I
+PLcom/android/server/accounts/TokenCache$TokenLruCache;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/accounts/TokenCache$Value;-><init>(Ljava/lang/String;J)V
+PLcom/android/server/accounts/TokenCache;-><init>()V
+PLcom/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(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/am/-$Lambda$-Oweh9FamEB8lkqsrsDtt1mh9YE;->$m$0()V
+PLcom/android/server/am/-$Lambda$FqYE94sGA9-gF3KGIicLxzMb89s;->$m$0(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/-$Lambda$FqYE94sGA9-gF3KGIicLxzMb89s;->$m$1(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/-$Lambda$FqYE94sGA9-gF3KGIicLxzMb89s;->$m$10(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/-$Lambda$FqYE94sGA9-gF3KGIicLxzMb89s;->$m$11(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/-$Lambda$FqYE94sGA9-gF3KGIicLxzMb89s;->$m$12(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/-$Lambda$FqYE94sGA9-gF3KGIicLxzMb89s;->$m$13(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/-$Lambda$FqYE94sGA9-gF3KGIicLxzMb89s;->$m$8(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/-$Lambda$FqYE94sGA9-gF3KGIicLxzMb89s;->$m$9(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/-$Lambda$njIALZ9XLXuT-vhmazyQkVX7Z0U;-><init>(B)V
+PLcom/android/server/am/ActiveInstrumentation;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActiveInstrumentation;->removeProcess(Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ActiveServices$ActiveForegroundApp;-><init>()V
+PLcom/android/server/am/ActiveServices$ServiceMap;-><init>(Lcom/android/server/am/ActiveServices;Landroid/os/Looper;I)V
+PLcom/android/server/am/ActiveServices$ServiceMap;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/am/ActiveServices$ServiceRestarter;->run()V
+PLcom/android/server/am/ActiveServices;->-get0()Ljava/lang/String;
+PLcom/android/server/am/ActiveServices;->decActiveForegroundAppLocked(Lcom/android/server/am/ActiveServices$ServiceMap;Lcom/android/server/am/ServiceRecord;)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
+PLcom/android/server/am/ActiveServices;->getServicesLocked(I)Landroid/util/ArrayMap;
+PLcom/android/server/am/ActiveServices;->requestUpdateActiveForegroundAppsLocked(Lcom/android/server/am/ActiveServices$ServiceMap;J)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;I)V
+PLcom/android/server/am/ActiveServices;->setServiceForegroundLocked(Landroid/content/ComponentName;Landroid/os/IBinder;ILandroid/app/Notification;I)V
+PLcom/android/server/am/ActiveServices;->updateWhitelistManagerLocked(Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ActivityManagerConstants;->start(Landroid/content/ContentResolver;)V
+PLcom/android/server/am/ActivityManagerConstants;->updateConstants()V
+PLcom/android/server/am/ActivityManagerService$10;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActivityManagerService$10;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
+PLcom/android/server/am/ActivityManagerService$11;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;ILandroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService$18;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/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;Ljava/lang/String;Ljava/lang/StringBuilder;Landroid/os/DropBoxManager;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService$19;->run()V
+PLcom/android/server/am/ActivityManagerService$20;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;Landroid/os/DropBoxManager;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService$21;-><init>(Lcom/android/server/am/ActivityManagerService;IILandroid/os/IBinder;Ljava/lang/String;Landroid/app/ApplicationErrorReport$ParcelableCrashInfo;)V
+PLcom/android/server/am/ActivityManagerService$21;->run()V
+PLcom/android/server/am/ActivityManagerService$22;-><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
+PLcom/android/server/am/ActivityManagerService$22;->run()V
+PLcom/android/server/am/ActivityManagerService$24;-><init>()V
+PLcom/android/server/am/ActivityManagerService$28;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActivityManagerService$28;->run()V
+PLcom/android/server/am/ActivityManagerService$8;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActivityManagerService$9;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActivityManagerService$AppTaskImpl;-><init>(Lcom/android/server/am/ActivityManagerService;II)V
+PLcom/android/server/am/ActivityManagerService$AppTaskImpl;->checkCaller()V
+PLcom/android/server/am/ActivityManagerService$AppTaskImpl;->setExcludeFromRecents(Z)V
+PLcom/android/server/am/ActivityManagerService$CpuBinder;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActivityManagerService$DbBinder;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActivityManagerService$FontScaleSettingObserver;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActivityManagerService$GraphicsBinder;-><init>(Lcom/android/server/am/ActivityManagerService;)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$LocalService;->getUidProcessState(I)I
+PLcom/android/server/am/ActivityManagerService$LocalService;->isSystemReady()Z
+PLcom/android/server/am/ActivityManagerService$LocalService;->notifyAppTransitionCancelled()V
+PLcom/android/server/am/ActivityManagerService$LocalService;->notifyDockedStackMinimizedChanged(Z)V
+PLcom/android/server/am/ActivityManagerService$LocalService;->notifyKeyguardFlagsChanged(Ljava/lang/Runnable;)V
+PLcom/android/server/am/ActivityManagerService$LocalService;->notifyKeyguardTrustedChanged()V
+PLcom/android/server/am/ActivityManagerService$LocalService;->setDeviceIdleWhitelist([I)V
+PLcom/android/server/am/ActivityManagerService$LocalService;->setFocusedActivity(Landroid/os/IBinder;)V
+PLcom/android/server/am/ActivityManagerService$LocalService;->setHasOverlayUi(IZ)V
+PLcom/android/server/am/ActivityManagerService$LocalService;->setPendingIntentWhitelistDuration(Landroid/content/IIntentSender;Landroid/os/IBinder;J)V
+PLcom/android/server/am/ActivityManagerService$LocalService;->startIsolatedProcess(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Runnable;)I
+PLcom/android/server/am/ActivityManagerService$LocalService;->updateDeviceIdleTempWhitelist([IIZ)V
+PLcom/android/server/am/ActivityManagerService$MemBinder;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActivityManagerService$PendingAssistExtras;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityRecord;Landroid/os/Bundle;Landroid/content/Intent;Ljava/lang/String;Lcom/android/internal/os/IResultReceiver;Landroid/os/Bundle;I)V
+PLcom/android/server/am/ActivityManagerService$PendingTempWhitelist;-><init>(IJLjava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService$PermissionController;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActivityManagerService$PermissionController;->checkPermission(Ljava/lang/String;II)Z
+PLcom/android/server/am/ActivityManagerService$PermissionController;->getPackagesForUid(I)[Ljava/lang/String;
+PLcom/android/server/am/ActivityManagerService$ProcessChangeItem;-><init>()V
+PLcom/android/server/am/ActivityManagerService$ProcessInfoService;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActivityManagerService$ProcessInfoService;->getProcessStatesAndOomScoresFromPids([I[I[I)V
+PLcom/android/server/am/ActivityManagerService$UidObserverRegistration;-><init>(ILjava/lang/String;II)V
+PLcom/android/server/am/ActivityManagerService;->-get0()Ljava/lang/String;
+PLcom/android/server/am/ActivityManagerService;->-get2(Lcom/android/server/am/ActivityManagerService;)Lcom/android/server/am/KeyguardController;
+PLcom/android/server/am/ActivityManagerService;->-get6(Lcom/android/server/am/ActivityManagerService;)Lcom/android/server/am/VrController;
+PLcom/android/server/am/ActivityManagerService;->-set0(Lcom/android/server/am/ActivityManagerService;Z)Z
+PLcom/android/server/am/ActivityManagerService;->-wrap0(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/TaskRecord;)Landroid/app/ActivityManager$RecentTaskInfo;
+PLcom/android/server/am/ActivityManagerService;->-wrap3(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/ActivityManagerService;->-wrap5(Lcom/android/server/am/ActivityManagerService;I)V
+PLcom/android/server/am/ActivityManagerService;->-wrap6(Lcom/android/server/am/ActivityManagerService;Z)V
+PLcom/android/server/am/ActivityManagerService;->-wrap9(Lcom/android/server/am/ActivityManagerService;I)V
+PLcom/android/server/am/ActivityManagerService;->acquireSleepToken(Ljava/lang/String;I)Landroid/app/ActivityManagerInternal$SleepToken;
+PLcom/android/server/am/ActivityManagerService;->activityDestroyed(Landroid/os/IBinder;)V
+PLcom/android/server/am/ActivityManagerService;->activityRelaunched(Landroid/os/IBinder;)V
+PLcom/android/server/am/ActivityManagerService;->activitySlept(Landroid/os/IBinder;)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;->addErrorToDropBox(Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/ActivityRecord;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Landroid/app/ApplicationErrorReport$CrashInfo;)V
+PLcom/android/server/am/ActivityManagerService;->appDiedLocked(Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/ActivityManagerService;->applyUpdateVrModeLocked(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityManagerService;->batteryNeedsCpuUpdate()V
+PLcom/android/server/am/ActivityManagerService;->batteryPowerChanged(Z)V
+PLcom/android/server/am/ActivityManagerService;->batterySendBroadcast(Landroid/content/Intent;)V
+PLcom/android/server/am/ActivityManagerService;->bootAnimationComplete()V
+PLcom/android/server/am/ActivityManagerService;->buildAssistBundleLocked(Lcom/android/server/am/ActivityManagerService$PendingAssistExtras;Landroid/os/Bundle;)V
+PLcom/android/server/am/ActivityManagerService;->canClearIdentity(III)Z
+PLcom/android/server/am/ActivityManagerService;->cancelIntentSenderLocked(Lcom/android/server/am/PendingIntentRecord;Z)V
+PLcom/android/server/am/ActivityManagerService;->checkAppSwitchAllowedLocked(IIIILjava/lang/String;)Z
+PLcom/android/server/am/ActivityManagerService;->checkAuthorityGrants(ILandroid/content/pm/ProviderInfo;IZ)Z
+PLcom/android/server/am/ActivityManagerService;->checkUriPermission(Landroid/net/Uri;IIIILandroid/os/IBinder;)I
+PLcom/android/server/am/ActivityManagerService;->checkUriPermissionLocked(Lcom/android/server/am/ActivityManagerService$GrantUri;II)Z
+PLcom/android/server/am/ActivityManagerService;->cleanupDisabledPackageComponentsLocked(Ljava/lang/String;IZ[Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->cleanupDisabledPackageTasksLocked(Ljava/lang/String;Ljava/util/Set;I)V
+PLcom/android/server/am/ActivityManagerService;->closeSystemDialogs(Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->closeSystemDialogsLocked(Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->doStopUidLocked(ILcom/android/server/am/UidRecord;)V
+PLcom/android/server/am/ActivityManagerService;->dumpHeap(Ljava/lang/String;IZZZLjava/lang/String;Landroid/os/ParcelFileDescriptor;)Z
+PLcom/android/server/am/ActivityManagerService;->dumpHeapFinished(Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->enableScreenAfterBoot()V
+PLcom/android/server/am/ActivityManagerService;->enqueueAssistContext(ILandroid/content/Intent;Ljava/lang/String;Lcom/android/internal/os/IResultReceiver;Landroid/os/Bundle;Landroid/os/IBinder;ZZILandroid/os/Bundle;JI)Lcom/android/server/am/ActivityManagerService$PendingAssistExtras;
+PLcom/android/server/am/ActivityManagerService;->findProcessLocked(Ljava/lang/String;ILjava/lang/String;)Lcom/android/server/am/ProcessRecord;
+PLcom/android/server/am/ActivityManagerService;->finishBooting()V
+PLcom/android/server/am/ActivityManagerService;->finishForceStopPackageLocked(Ljava/lang/String;I)V
+PLcom/android/server/am/ActivityManagerService;->finishInstrumentation(Landroid/app/IApplicationThread;ILandroid/os/Bundle;)V
+PLcom/android/server/am/ActivityManagerService;->finishInstrumentationLocked(Lcom/android/server/am/ProcessRecord;ILandroid/os/Bundle;)V
+PLcom/android/server/am/ActivityManagerService;->finishRunningVoiceLocked()V
+PLcom/android/server/am/ActivityManagerService;->forceStopPackageLocked(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->getActivityDisplayId(Landroid/os/IBinder;)I
+PLcom/android/server/am/ActivityManagerService;->getActivityStackId(Landroid/os/IBinder;)I
+PLcom/android/server/am/ActivityManagerService;->getAppInfoForUser(Landroid/content/pm/ApplicationInfo;I)Landroid/content/pm/ApplicationInfo;
+PLcom/android/server/am/ActivityManagerService;->getAppOpsService()Lcom/android/internal/app/IAppOpsService;
+PLcom/android/server/am/ActivityManagerService;->getCallingActivity(Landroid/os/IBinder;)Landroid/content/ComponentName;
+PLcom/android/server/am/ActivityManagerService;->getCallingRecordLocked(Landroid/os/IBinder;)Lcom/android/server/am/ActivityRecord;
+PLcom/android/server/am/ActivityManagerService;->getCommonServicesLocked(Z)Ljava/util/HashMap;
+PLcom/android/server/am/ActivityManagerService;->getConfiguration()Landroid/content/res/Configuration;
+PLcom/android/server/am/ActivityManagerService;->getContentProviderExternal(Ljava/lang/String;ILandroid/os/IBinder;)Landroid/app/ContentProviderHolder;
+PLcom/android/server/am/ActivityManagerService;->getContentProviderExternalUnchecked(Ljava/lang/String;Landroid/os/IBinder;I)Landroid/app/ContentProviderHolder;
+PLcom/android/server/am/ActivityManagerService;->getDeviceConfigurationInfo()Landroid/content/pm/ConfigurationInfo;
+PLcom/android/server/am/ActivityManagerService;->getHomeIntent()Landroid/content/Intent;
+PLcom/android/server/am/ActivityManagerService;->getInputDispatchingTimeoutLocked(Lcom/android/server/am/ActivityRecord;)J
+PLcom/android/server/am/ActivityManagerService;->getInputDispatchingTimeoutLocked(Lcom/android/server/am/ProcessRecord;)J
+PLcom/android/server/am/ActivityManagerService;->getKsmInfo()[J
+PLcom/android/server/am/ActivityManagerService;->getProcessStatesAndOomScoresForPIDs([I[I[I)V
+PLcom/android/server/am/ActivityManagerService;->getProviderMimeType(Landroid/net/Uri;I)Ljava/lang/String;
+PLcom/android/server/am/ActivityManagerService;->getRequestedOrientation(Landroid/os/IBinder;)I
+PLcom/android/server/am/ActivityManagerService;->getRunningUserIds()[I
+PLcom/android/server/am/ActivityManagerService;->getServices(II)Ljava/util/List;
+PLcom/android/server/am/ActivityManagerService;->getTaskDescriptionIcon(Ljava/lang/String;I)Landroid/graphics/Bitmap;
+PLcom/android/server/am/ActivityManagerService;->getTaskForActivity(Landroid/os/IBinder;Z)I
+PLcom/android/server/am/ActivityManagerService;->getUidFromIntent(Landroid/content/Intent;)I
+PLcom/android/server/am/ActivityManagerService;->getUidState(I)I
+PLcom/android/server/am/ActivityManagerService;->getUidStateLocked(I)I
+PLcom/android/server/am/ActivityManagerService;->grantUriPermissionFromIntentLocked(ILjava/lang/String;Landroid/content/Intent;Lcom/android/server/am/UriPermissionOwner;I)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;
+PLcom/android/server/am/ActivityManagerService;->installEncryptionUnawareProviders(I)V
+PLcom/android/server/am/ActivityManagerService;->installSystemProviders()V
+PLcom/android/server/am/ActivityManagerService;->isAllowedWhileBooting(Landroid/content/pm/ApplicationInfo;)Z
+PLcom/android/server/am/ActivityManagerService;->isInLockTaskMode()Z
+PLcom/android/server/am/ActivityManagerService;->isInPictureInPictureMode(Landroid/os/IBinder;)Z
+PLcom/android/server/am/ActivityManagerService;->isInPictureInPictureMode(Lcom/android/server/am/ActivityRecord;)Z
+PLcom/android/server/am/ActivityManagerService;->isKeyguardLocked()Z
+PLcom/android/server/am/ActivityManagerService;->isNextTransitionForward()Z
+PLcom/android/server/am/ActivityManagerService;->isSleepingOrShuttingDownLocked()Z
+PLcom/android/server/am/ActivityManagerService;->keyguardGoingAway(I)V
+PLcom/android/server/am/ActivityManagerService;->killAllBackgroundProcessesExcept(II)V
+PLcom/android/server/am/ActivityManagerService;->killApplication(Ljava/lang/String;IILjava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->logAppTooSlow(Lcom/android/server/am/ProcessRecord;JLjava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->makeIntentSenderCanceledLocked(Lcom/android/server/am/PendingIntentRecord;)V
+PLcom/android/server/am/ActivityManagerService;->moveActivityTaskToBack(Landroid/os/IBinder;Z)Z
+PLcom/android/server/am/ActivityManagerService;->newUriPermissionOwner(Ljava/lang/String;)Landroid/os/IBinder;
+PLcom/android/server/am/ActivityManagerService;->notifyEnterAnimationComplete(Landroid/os/IBinder;)V
+PLcom/android/server/am/ActivityManagerService;->notifyTaskPersisterLocked(Lcom/android/server/am/TaskRecord;Z)V
+PLcom/android/server/am/ActivityManagerService;->notifyVrManagerOfSleepState(Z)V
+PLcom/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
+PLcom/android/server/am/ActivityManagerService;->overridePendingTransition(Landroid/os/IBinder;Ljava/lang/String;II)V
+PLcom/android/server/am/ActivityManagerService;->performDisplayOverrideConfigUpdate(Landroid/content/res/Configuration;ZI)I
+PLcom/android/server/am/ActivityManagerService;->postFinishBooting(ZZ)V
+PLcom/android/server/am/ActivityManagerService;->processClass(Lcom/android/server/am/ProcessRecord;)Ljava/lang/String;
+PLcom/android/server/am/ActivityManagerService;->pushTempWhitelist()V
+PLcom/android/server/am/ActivityManagerService;->readGrantedUriPermissionsLocked()V
+PLcom/android/server/am/ActivityManagerService;->registerProcessObserver(Landroid/app/IProcessObserver;)V
+PLcom/android/server/am/ActivityManagerService;->registerTaskStackListener(Landroid/app/ITaskStackListener;)V
+PLcom/android/server/am/ActivityManagerService;->registerUidObserver(Landroid/app/IUidObserver;IILjava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->registerUserSwitchObserver(Landroid/app/IUserSwitchObserver;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->removeContentProviderExternal(Ljava/lang/String;Landroid/os/IBinder;)V
+PLcom/android/server/am/ActivityManagerService;->removeContentProviderExternalUnchecked(Ljava/lang/String;Landroid/os/IBinder;I)V
+PLcom/android/server/am/ActivityManagerService;->removeProcessLocked(Lcom/android/server/am/ProcessRecord;ZZLjava/lang/String;)Z
+PLcom/android/server/am/ActivityManagerService;->removeUriPermissionsForPackageLocked(Ljava/lang/String;IZ)V
+PLcom/android/server/am/ActivityManagerService;->reportActivityFullyDrawn(Landroid/os/IBinder;Z)V
+PLcom/android/server/am/ActivityManagerService;->reportAssistContextExtras(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;Landroid/net/Uri;)V
+PLcom/android/server/am/ActivityManagerService;->reportSizeConfigurations(Landroid/os/IBinder;[I[I[I)V
+PLcom/android/server/am/ActivityManagerService;->requestAutofillData(Lcom/android/internal/os/IResultReceiver;Landroid/os/Bundle;Landroid/os/IBinder;I)Z
+PLcom/android/server/am/ActivityManagerService;->requestPssAllProcsLocked(JZZ)V
+PLcom/android/server/am/ActivityManagerService;->resolveActivityInfo(Landroid/content/Intent;II)Landroid/content/pm/ActivityInfo;
+PLcom/android/server/am/ActivityManagerService;->retrieveSettings()V
+PLcom/android/server/am/ActivityManagerService;->scheduleApplicationInfoChanged(Ljava/util/List;I)V
+PLcom/android/server/am/ActivityManagerService;->scheduleStartProfilesLocked()V
+PLcom/android/server/am/ActivityManagerService;->sendNotifyVrManagerOfSleepState(Z)V
+PLcom/android/server/am/ActivityManagerService;->setDisablePreviewScreenshots(Landroid/os/IBinder;Z)V
+PLcom/android/server/am/ActivityManagerService;->setHasTopUi(Z)V
+PLcom/android/server/am/ActivityManagerService;->setImmersive(Landroid/os/IBinder;Z)V
+PLcom/android/server/am/ActivityManagerService;->setLockScreenShown(Z)V
+PLcom/android/server/am/ActivityManagerService;->setProcessImportant(Landroid/os/IBinder;IZLjava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->setServiceForeground(Landroid/content/ComponentName;Landroid/os/IBinder;ILandroid/app/Notification;I)V
+PLcom/android/server/am/ActivityManagerService;->setSystemProcess()V
+PLcom/android/server/am/ActivityManagerService;->setUidTempWhitelistStateLocked(IZ)V
+PLcom/android/server/am/ActivityManagerService;->setUsageStatsManager(Landroid/app/usage/UsageStatsManagerInternal;)V
+PLcom/android/server/am/ActivityManagerService;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/am/ActivityManagerService;->shouldDisableNonVrUiLocked()Z
+PLcom/android/server/am/ActivityManagerService;->shouldShowDialogs(Landroid/content/res/Configuration;)Z
+PLcom/android/server/am/ActivityManagerService;->showUnsupportedZoomDialogIfNeededLocked(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityManagerService;->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/am/ActivityManagerService;->startActivityAndWait(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)Landroid/app/WaitResult;
+PLcom/android/server/am/ActivityManagerService;->startHomeActivityLocked(ILjava/lang/String;)Z
+PLcom/android/server/am/ActivityManagerService;->startInstrumentation(Landroid/content/ComponentName;Ljava/lang/String;ILandroid/os/Bundle;Landroid/app/IInstrumentationWatcher;Landroid/app/IUiAutomationConnection;ILjava/lang/String;)Z
+PLcom/android/server/am/ActivityManagerService;->startIsolatedProcess(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Runnable;)I
+PLcom/android/server/am/ActivityManagerService;->startObservingNativeCrashes()V
+PLcom/android/server/am/ActivityManagerService;->startPersistentApps(I)V
+PLcom/android/server/am/ActivityManagerService;->startSetupActivityLocked()V
+PLcom/android/server/am/ActivityManagerService;->startTimeTrackingFocusedActivityLocked()V
+PLcom/android/server/am/ActivityManagerService;->stopAppSwitches()V
+PLcom/android/server/am/ActivityManagerService;->systemReady(Ljava/lang/Runnable;Landroid/util/TimingsTraceLog;)V
+PLcom/android/server/am/ActivityManagerService;->tempWhitelistUidLocked(IJLjava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->unbindFinished(Landroid/os/IBinder;Landroid/content/Intent;Z)V
+PLcom/android/server/am/ActivityManagerService;->unbroadcastIntent(Landroid/app/IApplicationThread;Landroid/content/Intent;I)V
+PLcom/android/server/am/ActivityManagerService;->updateApplicationInfoLocked(Ljava/util/List;I)V
+PLcom/android/server/am/ActivityManagerService;->updateConfiguration(Landroid/content/res/Configuration;)Z
+PLcom/android/server/am/ActivityManagerService;->updateConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/am/ActivityRecord;Z)Z
+PLcom/android/server/am/ActivityManagerService;->updateConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/am/ActivityRecord;ZZ)Z
+PLcom/android/server/am/ActivityManagerService;->updateConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/am/ActivityRecord;ZZIZ)Z
+PLcom/android/server/am/ActivityManagerService;->updateConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/am/ActivityRecord;ZZIZLcom/android/server/am/ActivityManagerService$UpdateConfigurationResult;)Z
+PLcom/android/server/am/ActivityManagerService;->updateDisplayOverrideConfiguration(Landroid/content/res/Configuration;I)Z
+PLcom/android/server/am/ActivityManagerService;->updateDisplayOverrideConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/am/ActivityRecord;ZI)Z
+PLcom/android/server/am/ActivityManagerService;->updateEventDispatchingLocked()V
+PLcom/android/server/am/ActivityManagerService;->updateLockTaskPackages(I[Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->updateSleepIfNeededLocked()V
+PLcom/android/server/am/ActivityManagerShellCommand$1;-><init>(Lcom/android/server/am/ActivityManagerShellCommand;)V
+PLcom/android/server/am/ActivityManagerShellCommand$1;->handleOption(Ljava/lang/String;Landroid/os/ShellCommand;)Z
+PLcom/android/server/am/ActivityManagerShellCommand$IntentReceiver;-><init>(Ljava/io/PrintWriter;)V
+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;->-set10(Lcom/android/server/am/ActivityManagerShellCommand;Z)Z
+PLcom/android/server/am/ActivityManagerShellCommand;->-set14(Lcom/android/server/am/ActivityManagerShellCommand;Z)Z
+PLcom/android/server/am/ActivityManagerShellCommand;-><init>(Lcom/android/server/am/ActivityManagerService;Z)V
+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;->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/ActivityMetricsLogger$StackTransitionInfo;->-get0(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;)I
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-get1(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;)Z
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-get2(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;)Lcom/android/server/am/ActivityRecord;
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-get3(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;)Z
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-get4(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;)Z
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-get5(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;)I
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-get6(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;)I
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-get7(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;)I
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-get8(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;)I
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-set0(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;I)I
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-set1(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;Z)Z
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-set2(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;Lcom/android/server/am/ActivityRecord;)Lcom/android/server/am/ActivityRecord;
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-set3(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;Z)Z
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-set4(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;Z)Z
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-set5(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;I)I
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-set6(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;I)I
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-set7(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;I)I
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;->-set8(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;I)I
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;-><init>(Lcom/android/server/am/ActivityMetricsLogger;)V
+PLcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;-><init>(Lcom/android/server/am/ActivityMetricsLogger;Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;)V
+PLcom/android/server/am/ActivityMetricsLogger;->calculateCurrentDelay()I
+PLcom/android/server/am/ActivityMetricsLogger;->calculateDelay(J)I
+PLcom/android/server/am/ActivityMetricsLogger;->getTransitionType(Lcom/android/server/am/ActivityMetricsLogger$StackTransitionInfo;)I
+PLcom/android/server/am/ActivityMetricsLogger;->hasStartedActivity(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ActivityRecord;)Z
+PLcom/android/server/am/ActivityMetricsLogger;->logAppTransitionReportedDrawn(Lcom/android/server/am/ActivityRecord;Z)V
+PLcom/android/server/am/ActivityMetricsLogger;->notifyActivityLaunching()V
+PLcom/android/server/am/ActivityMetricsLogger;->reset(Z)V
+PLcom/android/server/am/ActivityRecord$Token;-><init>(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityRecord;->-getcom-android-server-am-ActivityStack$ActivityStateSwitchesValues()[I
+PLcom/android/server/am/ActivityRecord;->activityResumedLocked(Landroid/os/IBinder;)V
+PLcom/android/server/am/ActivityRecord;->addNewIntentLocked(Lcom/android/internal/content/ReferrerIntent;)V
+PLcom/android/server/am/ActivityRecord;->addResultLocked(Lcom/android/server/am/ActivityRecord;Ljava/lang/String;IILandroid/content/Intent;)V
+PLcom/android/server/am/ActivityRecord;->allowTaskSnapshot()Z
+PLcom/android/server/am/ActivityRecord;->canBeLaunchedOnDisplay(I)Z
+PLcom/android/server/am/ActivityRecord;->canLaunchHomeActivity(ILcom/android/server/am/ActivityRecord;)Z
+PLcom/android/server/am/ActivityRecord;->checkEnterPictureInPictureAppOpsState()Z
+PLcom/android/server/am/ActivityRecord;->clearOptionsLocked()V
+PLcom/android/server/am/ActivityRecord;->createImageFilename(JI)Ljava/lang/String;
+PLcom/android/server/am/ActivityRecord;->crossesHorizontalSizeThreshold(II)Z
+PLcom/android/server/am/ActivityRecord;->crossesSizeThreshold([III)Z
+PLcom/android/server/am/ActivityRecord;->crossesVerticalSizeThreshold(II)Z
+PLcom/android/server/am/ActivityRecord;->deliverNewIntentLocked(ILandroid/content/Intent;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityRecord;->getChildCount()I
+PLcom/android/server/am/ActivityRecord;->getConfigurationChanges(Landroid/content/res/Configuration;)I
+PLcom/android/server/am/ActivityRecord;->getOptionsForTargetActivityLocked()Landroid/app/ActivityOptions;
+PLcom/android/server/am/ActivityRecord;->getRequestedOrientation()I
+PLcom/android/server/am/ActivityRecord;->getTaskForActivityLocked(Landroid/os/IBinder;Z)I
+PLcom/android/server/am/ActivityRecord;->getUriPermissionsLocked()Lcom/android/server/am/UriPermissionOwner;
+PLcom/android/server/am/ActivityRecord;->getWindowContainerController()Lcom/android/server/wm/AppWindowContainerController;
+PLcom/android/server/am/ActivityRecord;->isAlwaysFocusable()Z
+PLcom/android/server/am/ActivityRecord;->isFreeform()Z
+PLcom/android/server/am/ActivityRecord;->isHomeIntent(Landroid/content/Intent;)Z
+PLcom/android/server/am/ActivityRecord;->isInVrUiMode(Landroid/content/res/Configuration;)Z
+PLcom/android/server/am/ActivityRecord;->isMainIntent(Landroid/content/Intent;)Z
+PLcom/android/server/am/ActivityRecord;->isNoHistory()Z
+PLcom/android/server/am/ActivityRecord;->isProcessRunning()Z
+PLcom/android/server/am/ActivityRecord;->isResizeOnlyChange(I)Z
+PLcom/android/server/am/ActivityRecord;->isResizeable()Z
+PLcom/android/server/am/ActivityRecord;->isTopRunningActivity()Z
+PLcom/android/server/am/ActivityRecord;->makeFinishingLocked()V
+PLcom/android/server/am/ActivityRecord;->makeVisibleIfNeeded(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityRecord;->mayFreezeScreenLocked(Lcom/android/server/am/ProcessRecord;)Z
+PLcom/android/server/am/ActivityRecord;->notifyAppResumed(Z)V
+PLcom/android/server/am/ActivityRecord;->notifyUnknownVisibilityLaunched()V
+PLcom/android/server/am/ActivityRecord;->onWindowsGone()V
+PLcom/android/server/am/ActivityRecord;->onlyVrUiModeChanged(ILandroid/content/res/Configuration;)Z
+PLcom/android/server/am/ActivityRecord;->pauseKeyDispatchingLocked()V
+PLcom/android/server/am/ActivityRecord;->relaunchActivityLocked(ZZ)V
+PLcom/android/server/am/ActivityRecord;->removeUriPermissionsLocked()V
+PLcom/android/server/am/ActivityRecord;->removeWindowContainer()V
+PLcom/android/server/am/ActivityRecord;->reportFullyDrawnLocked(Z)V
+PLcom/android/server/am/ActivityRecord;->scheduleConfigurationChanged(Landroid/content/res/Configuration;)V
+PLcom/android/server/am/ActivityRecord;->screenshotActivityLocked()Landroid/graphics/Bitmap;
+PLcom/android/server/am/ActivityRecord;->setDeferHidingClient(Z)V
+PLcom/android/server/am/ActivityRecord;->setDisablePreviewScreenshots(Z)V
+PLcom/android/server/am/ActivityRecord;->setLastReportedConfiguration(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)V
+PLcom/android/server/am/ActivityRecord;->setLastReportedConfiguration(Landroid/util/MergedConfiguration;)V
+PLcom/android/server/am/ActivityRecord;->setLastReportedGlobalConfiguration(Landroid/content/res/Configuration;)V
+PLcom/android/server/am/ActivityRecord;->setRequestedOrientation(I)V
+PLcom/android/server/am/ActivityRecord;->setSizeConfigurations([I[I[I)V
+PLcom/android/server/am/ActivityRecord;->setSleeping(Z)V
+PLcom/android/server/am/ActivityRecord;->setSleeping(ZZ)V
+PLcom/android/server/am/ActivityRecord;->shouldRelaunchLocked(ILandroid/content/res/Configuration;)Z
+PLcom/android/server/am/ActivityRecord;->showStartingWindow(Lcom/android/server/am/ActivityRecord;ZZ)V
+PLcom/android/server/am/ActivityRecord;->startFreezingScreenLocked(Lcom/android/server/am/ProcessRecord;I)V
+PLcom/android/server/am/ActivityRecord;->supportsResizeableMultiWindow()Z
+PLcom/android/server/am/ActivityRecord;->takeFromHistory()V
+PLcom/android/server/am/ActivityRecord;->takeOptionsLocked()Landroid/app/ActivityOptions;
+PLcom/android/server/am/ActivityRecord;->updateOptionsLocked(Landroid/app/ActivityOptions;)V
+PLcom/android/server/am/ActivityRecord;->updateThumbnailLocked(Landroid/graphics/Bitmap;Ljava/lang/CharSequence;)V
+PLcom/android/server/am/ActivityResult;-><init>(Lcom/android/server/am/ActivityRecord;Ljava/lang/String;IILandroid/content/Intent;)V
+PLcom/android/server/am/ActivityStack$ActivityStackHandler;-><init>(Lcom/android/server/am/ActivityStack;Landroid/os/Looper;)V
+PLcom/android/server/am/ActivityStack$ActivityState;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/am/ActivityStack$ActivityState;->values()[Lcom/android/server/am/ActivityStack$ActivityState;
+PLcom/android/server/am/ActivityStack;->-get0()Ljava/lang/String;
+PLcom/android/server/am/ActivityStack;->-getcom-android-server-am-ActivityStack$ActivityStateSwitchesValues()[I
+PLcom/android/server/am/ActivityStack;-><init>(Lcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;ILcom/android/server/am/ActivityStackSupervisor;Lcom/android/server/am/RecentTasks;Z)V
+PLcom/android/server/am/ActivityStack;->addRecentActivityLocked(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityStack;->addStartingWindowsForVisibleActivities(Z)V
+PLcom/android/server/am/ActivityStack;->addTask(Lcom/android/server/am/TaskRecord;ZLjava/lang/String;)V
+PLcom/android/server/am/ActivityStack;->awakeFromSleepingLocked()V
+PLcom/android/server/am/ActivityStack;->canEnterPipOnTaskSwitch(Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/TaskRecord;Lcom/android/server/am/ActivityRecord;Landroid/app/ActivityOptions;)Z
+PLcom/android/server/am/ActivityStack;->cleanUpActivityServicesLocked(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityStack;->clearLaunchTime(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityStack;->containsActivityFromStack(Ljava/util/List;)Z
+PLcom/android/server/am/ActivityStack;->createStackWindowController(IZLandroid/graphics/Rect;)Lcom/android/server/wm/StackWindowController;
+PLcom/android/server/am/ActivityStack;->createTaskRecord(ILandroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;ZI)Lcom/android/server/am/TaskRecord;
+PLcom/android/server/am/ActivityStack;->findActivityLocked(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Z)Lcom/android/server/am/ActivityRecord;
+PLcom/android/server/am/ActivityStack;->finishActivityLocked(Lcom/android/server/am/ActivityRecord;ILandroid/content/Intent;Ljava/lang/String;Z)Z
+PLcom/android/server/am/ActivityStack;->finishActivityResultsLocked(Lcom/android/server/am/ActivityRecord;ILandroid/content/Intent;)V
+PLcom/android/server/am/ActivityStack;->getChildAt(I)Lcom/android/server/am/ConfigurationContainer;
+PLcom/android/server/am/ActivityStack;->getChildCount()I
+PLcom/android/server/am/ActivityStack;->getNextTask(Lcom/android/server/am/TaskRecord;)Lcom/android/server/am/TaskRecord;
+PLcom/android/server/am/ActivityStack;->getParent()Lcom/android/server/am/ConfigurationContainer;
+PLcom/android/server/am/ActivityStack;->getWindowContainerController()Lcom/android/server/wm/StackWindowController;
+PLcom/android/server/am/ActivityStack;->goToSleep()V
+PLcom/android/server/am/ActivityStack;->goToSleepIfPossible(Z)Z
+PLcom/android/server/am/ActivityStack;->isATopFinishingTask(Lcom/android/server/am/TaskRecord;)Z
+PLcom/android/server/am/ActivityStack;->isHomeStack()Z
+PLcom/android/server/am/ActivityStack;->isInStackLocked(Lcom/android/server/am/TaskRecord;)Z
+PLcom/android/server/am/ActivityStack;->isOnHomeDisplay()Z
+PLcom/android/server/am/ActivityStack;->isTaskSwitch(Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/ActivityRecord;)Z
+PLcom/android/server/am/ActivityStack;->layoutTaskInStack(Lcom/android/server/am/TaskRecord;Landroid/content/pm/ActivityInfo$WindowLayout;)Z
+PLcom/android/server/am/ActivityStack;->makeVisibleAndRestartIfNeeded(Lcom/android/server/am/ActivityRecord;IZZLcom/android/server/am/ActivityRecord;)Z
+PLcom/android/server/am/ActivityStack;->minimalResumeActivityLocked(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityStack;->moveHomeStackTaskToTop()V
+PLcom/android/server/am/ActivityStack;->moveTaskToBackLocked(I)Z
+PLcom/android/server/am/ActivityStack;->moveToFront(Ljava/lang/String;)V
+PLcom/android/server/am/ActivityStack;->notifyActivityDrawnLocked(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityStack;->onActivityRemovedFromStack(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityStack;->onLockTaskPackagesUpdatedLocked()V
+PLcom/android/server/am/ActivityStack;->onParentChanged()V
+PLcom/android/server/am/ActivityStack;->postAddTask(Lcom/android/server/am/TaskRecord;Lcom/android/server/am/ActivityStack;Z)V
+PLcom/android/server/am/ActivityStack;->postAddToDisplay(Lcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;Landroid/graphics/Rect;Z)V
+PLcom/android/server/am/ActivityStack;->preAddTask(Lcom/android/server/am/TaskRecord;Ljava/lang/String;Z)Lcom/android/server/am/ActivityStack;
+PLcom/android/server/am/ActivityStack;->removeActivitiesFromLRUListLocked(Lcom/android/server/am/TaskRecord;)V
+PLcom/android/server/am/ActivityStack;->requestFinishActivityLocked(Landroid/os/IBinder;ILandroid/content/Intent;Ljava/lang/String;Z)Z
+PLcom/android/server/am/ActivityStack;->resetTargetTaskIfNeededLocked(Lcom/android/server/am/TaskRecord;Z)Landroid/app/ActivityOptions;
+PLcom/android/server/am/ActivityStack;->resumeTopActivityInNextFocusableStack(Lcom/android/server/am/ActivityRecord;Landroid/app/ActivityOptions;Ljava/lang/String;)Z
+PLcom/android/server/am/ActivityStack;->sendActivityResultLocked(ILcom/android/server/am/ActivityRecord;Ljava/lang/String;IILandroid/content/Intent;)V
+PLcom/android/server/am/ActivityStack;->stopFullyDrawnTraceIfNeeded()V
+PLcom/android/server/am/ActivityStack;->updateLRUListLocked(Lcom/android/server/am/ActivityRecord;)Z
+PLcom/android/server/am/ActivityStack;->updateTransitLocked(ILandroid/app/ActivityOptions;)V
+PLcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;-><init>(Lcom/android/server/am/ActivityStackSupervisor;I)V
+PLcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;->attachStack(Lcom/android/server/am/ActivityStack;I)V
+PLcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;->getChildAt(I)Lcom/android/server/am/ConfigurationContainer;
+PLcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;->getChildCount()I
+PLcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;->getParent()Lcom/android/server/am/ConfigurationContainer;
+PLcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;->init(Landroid/view/Display;)V
+PLcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;->setIsSleeping(Z)V
+PLcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;->shouldSleep()Z
+PLcom/android/server/am/ActivityStackSupervisor$SleepTokenImpl;->-get0(Lcom/android/server/am/ActivityStackSupervisor$SleepTokenImpl;)I
+PLcom/android/server/am/ActivityStackSupervisor$SleepTokenImpl;-><init>(Lcom/android/server/am/ActivityStackSupervisor;Ljava/lang/String;I)V
+PLcom/android/server/am/ActivityStackSupervisor$SleepTokenImpl;->release()V
+PLcom/android/server/am/ActivityStackSupervisor;->-wrap3(Lcom/android/server/am/ActivityStackSupervisor;I)V
+PLcom/android/server/am/ActivityStackSupervisor;->-wrap6(Lcom/android/server/am/ActivityStackSupervisor;Lcom/android/server/am/ActivityStackSupervisor$SleepTokenImpl;)V
+PLcom/android/server/am/ActivityStackSupervisor;->activityRelaunchedLocked(Landroid/os/IBinder;)V
+PLcom/android/server/am/ActivityStackSupervisor;->activityRelaunchingLocked(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityStackSupervisor;->activitySleptLocked(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityStackSupervisor;->addStartingWindowsForVisibleActivities(Z)V
+PLcom/android/server/am/ActivityStackSupervisor;->anyTaskForIdLocked(I)Lcom/android/server/am/TaskRecord;
+PLcom/android/server/am/ActivityStackSupervisor;->applySleepTokensLocked(Z)V
+PLcom/android/server/am/ActivityStackSupervisor;->beginDeferResume()V
+PLcom/android/server/am/ActivityStackSupervisor;->calculateDefaultMinimalSizeOfResizeableTasks(Lcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;)V
+PLcom/android/server/am/ActivityStackSupervisor;->canPlaceEntityOnDisplay(IZIILandroid/content/pm/ActivityInfo;)Z
+PLcom/android/server/am/ActivityStackSupervisor;->canUseActivityOptionsLaunchBounds(Landroid/app/ActivityOptions;I)Z
+PLcom/android/server/am/ActivityStackSupervisor;->checkFinishBootingLocked()Z
+PLcom/android/server/am/ActivityStackSupervisor;->checkReadyForSleepLocked(Z)V
+PLcom/android/server/am/ActivityStackSupervisor;->cleanUpRemovedTaskLocked(Lcom/android/server/am/TaskRecord;ZZ)V
+PLcom/android/server/am/ActivityStackSupervisor;->cleanupActivity(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityStackSupervisor;->closeSystemDialogsLocked()V
+PLcom/android/server/am/ActivityStackSupervisor;->comeOutOfSleepIfNeededLocked()V
+PLcom/android/server/am/ActivityStackSupervisor;->createSleepTokenLocked(Ljava/lang/String;I)Landroid/app/ActivityManagerInternal$SleepToken;
+PLcom/android/server/am/ActivityStackSupervisor;->createStack(ILcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;Z)Lcom/android/server/am/ActivityStack;
+PLcom/android/server/am/ActivityStackSupervisor;->createStackOnDisplay(IIZ)Lcom/android/server/am/ActivityStack;
+PLcom/android/server/am/ActivityStackSupervisor;->endDeferResume()V
+PLcom/android/server/am/ActivityStackSupervisor;->findActivityLocked(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Z)Lcom/android/server/am/ActivityRecord;
+PLcom/android/server/am/ActivityStackSupervisor;->getActionRestrictionForCallingPackage(Ljava/lang/String;Ljava/lang/String;II)I
+PLcom/android/server/am/ActivityStackSupervisor;->getChildAt(I)Lcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;
+PLcom/android/server/am/ActivityStackSupervisor;->getChildAt(I)Lcom/android/server/am/ConfigurationContainer;
+PLcom/android/server/am/ActivityStackSupervisor;->getComponentRestrictionForCallingPackage(Landroid/content/pm/ActivityInfo;Ljava/lang/String;IIZ)I
+PLcom/android/server/am/ActivityStackSupervisor;->getHomeActivity()Lcom/android/server/am/ActivityRecord;
+PLcom/android/server/am/ActivityStackSupervisor;->getHomeActivityForUser(I)Lcom/android/server/am/ActivityRecord;
+PLcom/android/server/am/ActivityStackSupervisor;->getLockTaskModeState()I
+PLcom/android/server/am/ActivityStackSupervisor;->getLockedTaskLocked()Lcom/android/server/am/TaskRecord;
+PLcom/android/server/am/ActivityStackSupervisor;->getNextTaskIdForUserLocked(I)I
+PLcom/android/server/am/ActivityStackSupervisor;->getUserInfo(I)Landroid/content/pm/UserInfo;
+PLcom/android/server/am/ActivityStackSupervisor;->goingToSleepLocked()V
+PLcom/android/server/am/ActivityStackSupervisor;->handleDisplayChanged(I)V
+PLcom/android/server/am/ActivityStackSupervisor;->handleNonResizableTaskIfNeeded(Lcom/android/server/am/TaskRecord;III)V
+PLcom/android/server/am/ActivityStackSupervisor;->hasAwakeDisplay()Z
+PLcom/android/server/am/ActivityStackSupervisor;->invalidateTaskLayers()V
+PLcom/android/server/am/ActivityStackSupervisor;->isDisplayAdded(I)Z
+PLcom/android/server/am/ActivityStackSupervisor;->isLastLockedTask(Lcom/android/server/am/TaskRecord;)Z
+PLcom/android/server/am/ActivityStackSupervisor;->isLockTaskModeViolation(Lcom/android/server/am/TaskRecord;)Z
+PLcom/android/server/am/ActivityStackSupervisor;->isLockTaskModeViolation(Lcom/android/server/am/TaskRecord;Z)Z
+PLcom/android/server/am/ActivityStackSupervisor;->isLockedTask(Lcom/android/server/am/TaskRecord;)Z
+PLcom/android/server/am/ActivityStackSupervisor;->logIfTransactionTooLarge(Landroid/content/Intent;Landroid/os/Bundle;)V
+PLcom/android/server/am/ActivityStackSupervisor;->logStackState()V
+PLcom/android/server/am/ActivityStackSupervisor;->moveHomeStackTaskToTop(Ljava/lang/String;)Z
+PLcom/android/server/am/ActivityStackSupervisor;->moveHomeStackToFront(Ljava/lang/String;)V
+PLcom/android/server/am/ActivityStackSupervisor;->nextTaskIdForUser(II)I
+PLcom/android/server/am/ActivityStackSupervisor;->onDisplayChanged(I)V
+PLcom/android/server/am/ActivityStackSupervisor;->onLockTaskPackagesUpdatedLocked()V
+PLcom/android/server/am/ActivityStackSupervisor;->putStacksToSleepLocked(ZZ)Z
+PLcom/android/server/am/ActivityStackSupervisor;->removeLockedTaskLocked(Lcom/android/server/am/TaskRecord;)V
+PLcom/android/server/am/ActivityStackSupervisor;->removeSleepTimeouts()V
+PLcom/android/server/am/ActivityStackSupervisor;->removeSleepTokenLocked(Lcom/android/server/am/ActivityStackSupervisor$SleepTokenImpl;)V
+PLcom/android/server/am/ActivityStackSupervisor;->removeTaskByIdLocked(IZZ)Z
+PLcom/android/server/am/ActivityStackSupervisor;->removeTaskByIdLocked(IZZZ)Z
+PLcom/android/server/am/ActivityStackSupervisor;->reportActivityLaunchedLocked(ZLcom/android/server/am/ActivityRecord;JJ)V
+PLcom/android/server/am/ActivityStackSupervisor;->reportActivityVisibleLocked(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityStackSupervisor;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;I)Landroid/content/pm/ResolveInfo;
+PLcom/android/server/am/ActivityStackSupervisor;->restoreRecentTaskLocked(Lcom/android/server/am/TaskRecord;I)Z
+PLcom/android/server/am/ActivityStackSupervisor;->resumeFocusedStackTopActivityLocked()Z
+PLcom/android/server/am/ActivityStackSupervisor;->resumeHomeStackTask(Lcom/android/server/am/ActivityRecord;Ljava/lang/String;)Z
+PLcom/android/server/am/ActivityStackSupervisor;->scheduleResumeTopActivities()V
+PLcom/android/server/am/ActivityStackSupervisor;->scheduleSleepTimeout()V
+PLcom/android/server/am/ActivityStackSupervisor;->setDisplayOverrideConfiguration(Landroid/content/res/Configuration;I)V
+PLcom/android/server/am/ActivityStackSupervisor;->setDockedStackMinimized(Z)V
+PLcom/android/server/am/ActivityStackSupervisor;->setNextTaskIdForUserLocked(II)V
+PLcom/android/server/am/ActivityStackSupervisor;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/am/ActivityStackSupervisor;->updateActivityApplicationInfoLocked(Landroid/content/pm/ApplicationInfo;)V
+PLcom/android/server/am/ActivityStackSupervisor;->updateUserStackLocked(ILcom/android/server/am/ActivityStack;)V
+PLcom/android/server/am/ActivityStartInterceptor;->interceptQuietProfileIfNeeded()Z
+PLcom/android/server/am/ActivityStartInterceptor;->interceptSuspendPackageIfNeed()Z
+PLcom/android/server/am/ActivityStartInterceptor;->interceptWithConfirmCredentialsIfNeeded(Landroid/content/Intent;Ljava/lang/String;Landroid/content/pm/ActivityInfo;Ljava/lang/String;I)Landroid/content/Intent;
+PLcom/android/server/am/ActivityStartInterceptor;->interceptWorkProfileChallengeIfNeeded()Z
+PLcom/android/server/am/ActivityStartInterceptor;->setStates(IIIILjava/lang/String;)V
+PLcom/android/server/am/ActivityStarter;->addOrReparentStartingActivity(Lcom/android/server/am/TaskRecord;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityStarter;->adjustLaunchFlagsToDocumentMode(Lcom/android/server/am/ActivityRecord;ZZI)I
+PLcom/android/server/am/ActivityStarter;->canLaunchIntoFocusedStack(Lcom/android/server/am/ActivityRecord;Z)Z
+PLcom/android/server/am/ActivityStarter;->clearPendingActivityLaunchesLocked(Ljava/lang/String;)Z
+PLcom/android/server/am/ActivityStarter;->computeLaunchingTaskFlags()V
+PLcom/android/server/am/ActivityStarter;->computeSourceStack()V
+PLcom/android/server/am/ActivityStarter;->doPendingActivityLaunchesLocked(Z)V
+PLcom/android/server/am/ActivityStarter;->getOverrideBounds(Lcom/android/server/am/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/am/TaskRecord;)Landroid/graphics/Rect;
+PLcom/android/server/am/ActivityStarter;->getReusableIntentActivity()Lcom/android/server/am/ActivityRecord;
+PLcom/android/server/am/ActivityStarter;->getSourceDisplayId(Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/ActivityRecord;)I
+PLcom/android/server/am/ActivityStarter;->isDocumentLaunchesIntoExisting(I)Z
+PLcom/android/server/am/ActivityStarter;->isValidLaunchStackId(IILcom/android/server/am/ActivityRecord;)Z
+PLcom/android/server/am/ActivityStarter;->reset()V
+PLcom/android/server/am/ActivityStarter;->resumeTargetStackIfNeeded()V
+PLcom/android/server/am/ActivityStarter;->sendNewTaskResultRequestIfNeeded()V
+PLcom/android/server/am/ActivityStarter;->sendPowerHintForLaunchEndIfNeeded()V
+PLcom/android/server/am/ActivityStarter;->setTaskFromIntentActivity(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/ActivityStarter;->setTaskFromSourceRecord()I
+PLcom/android/server/am/ActivityStarter;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/am/ActivityStarter;->startHomeActivityLocked(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityStarter;->updateTaskReturnToType(Lcom/android/server/am/TaskRecord;ILcom/android/server/am/ActivityStack;)V
+PLcom/android/server/am/AppErrors;->loadAppsNotReportingCrashesFromConfigLocked(Ljava/lang/String;)V
+PLcom/android/server/am/AppErrors;->resetProcessCrashTimeLocked(ZII)V
+PLcom/android/server/am/BatteryExternalStatsWorker;->extractDeltaLocked(Landroid/net/wifi/WifiActivityEnergyInfo;)Landroid/net/wifi/WifiActivityEnergyInfo;
+PLcom/android/server/am/BatteryExternalStatsWorker;->scheduleCpuSyncDueToRemovedUid(I)Ljava/util/concurrent/Future;
+PLcom/android/server/am/BatteryExternalStatsWorker;->scheduleSync(Ljava/lang/String;I)Ljava/util/concurrent/Future;
+PLcom/android/server/am/BatteryStatsService;->addIsolatedUid(II)V
+PLcom/android/server/am/BatteryStatsService;->awaitUninterruptibly(Ljava/util/concurrent/Future;)V
+PLcom/android/server/am/BatteryStatsService;->doEnableOrDisable(Ljava/io/PrintWriter;I[Ljava/lang/String;Z)I
+PLcom/android/server/am/BatteryStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/am/BatteryStatsService;->getPlatformLowPowerStats()Ljava/lang/String;
+PLcom/android/server/am/BatteryStatsService;->getStatistics()[B
+PLcom/android/server/am/BatteryStatsService;->getStatisticsStream()Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/am/BatteryStatsService;->getSubsystemLowPowerStats()Ljava/lang/String;
+PLcom/android/server/am/BatteryStatsService;->isCharging()Z
+PLcom/android/server/am/BatteryStatsService;->lambda$-com_android_server_am_BatteryStatsService_32467(IIIIIIII)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
+PLcom/android/server/am/BatteryStatsService;->noteConnectivityChanged(ILjava/lang/String;)V
+PLcom/android/server/am/BatteryStatsService;->noteInteractive(Z)V
+PLcom/android/server/am/BatteryStatsService;->noteLongPartialWakelockFinish(Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/am/BatteryStatsService;->noteLongPartialWakelockStart(Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/am/BatteryStatsService;->noteNetworkStatsEnabled()V
+PLcom/android/server/am/BatteryStatsService;->notePackageInstalled(Ljava/lang/String;I)V
+PLcom/android/server/am/BatteryStatsService;->notePhoneSignalStrength(Landroid/telephony/SignalStrength;)V
+PLcom/android/server/am/BatteryStatsService;->notePhoneState(I)V
+PLcom/android/server/am/BatteryStatsService;->noteResetBleScan()V
+PLcom/android/server/am/BatteryStatsService;->noteScreenBrightness(I)V
+PLcom/android/server/am/BatteryStatsService;->noteScreenState(I)V
+PLcom/android/server/am/BatteryStatsService;->noteStartCamera(I)V
+PLcom/android/server/am/BatteryStatsService;->noteStartGps(I)V
+PLcom/android/server/am/BatteryStatsService;->noteStartVideo(I)V
+PLcom/android/server/am/BatteryStatsService;->noteStopCamera(I)V
+PLcom/android/server/am/BatteryStatsService;->noteStopGps(I)V
+PLcom/android/server/am/BatteryStatsService;->noteStopVideo(I)V
+PLcom/android/server/am/BatteryStatsService;->noteSyncFinish(Ljava/lang/String;I)V
+PLcom/android/server/am/BatteryStatsService;->noteSyncStart(Ljava/lang/String;I)V
+PLcom/android/server/am/BatteryStatsService;->noteVibratorOff(I)V
+PLcom/android/server/am/BatteryStatsService;->noteVibratorOn(IJ)V
+PLcom/android/server/am/BatteryStatsService;->noteWifiMulticastDisabled(I)V
+PLcom/android/server/am/BatteryStatsService;->noteWifiMulticastEnabled(I)V
+PLcom/android/server/am/BatteryStatsService;->noteWifiOff()V
+PLcom/android/server/am/BatteryStatsService;->noteWifiOn()V
+PLcom/android/server/am/BatteryStatsService;->noteWifiRssiChanged(I)V
+PLcom/android/server/am/BatteryStatsService;->noteWifiRunning(Landroid/os/WorkSource;)V
+PLcom/android/server/am/BatteryStatsService;->noteWifiState(ILjava/lang/String;)V
+PLcom/android/server/am/BatteryStatsService;->noteWifiSupplicantStateChanged(IZ)V
+PLcom/android/server/am/BatteryStatsService;->removeIsolatedUid(II)V
+PLcom/android/server/am/BroadcastQueue;->isSignaturePerm([Ljava/lang/String;)Z
+PLcom/android/server/am/BroadcastQueue;->replaceOrderedBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)Lcom/android/server/am/BroadcastRecord;
+PLcom/android/server/am/BroadcastQueue;->scheduleTempWhitelistLocked(IJLcom/android/server/am/BroadcastRecord;)V
+PLcom/android/server/am/BroadcastQueue;->sendPendingBroadcastsLocked(Lcom/android/server/am/ProcessRecord;)Z
+PLcom/android/server/am/BroadcastStats$1;-><init>()V
+PLcom/android/server/am/BroadcastStats$ViolationEntry;-><init>()V
+PLcom/android/server/am/BroadcastStats;-><init>()V
+PLcom/android/server/am/CompatModePackages;->handlePackageAddedLocked(Ljava/lang/String;Z)V
+PLcom/android/server/am/ConfigurationContainer;->getMergedOverrideConfiguration()Landroid/content/res/Configuration;
+PLcom/android/server/am/ConfigurationContainer;->onOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
+PLcom/android/server/am/ContentProviderRecord$ExternalProcessHandle;->-get0(Lcom/android/server/am/ContentProviderRecord$ExternalProcessHandle;)I
+PLcom/android/server/am/ContentProviderRecord$ExternalProcessHandle;->-set0(Lcom/android/server/am/ContentProviderRecord$ExternalProcessHandle;I)I
+PLcom/android/server/am/ContentProviderRecord$ExternalProcessHandle;-><init>(Lcom/android/server/am/ContentProviderRecord;Landroid/os/IBinder;)V
+PLcom/android/server/am/ContentProviderRecord$ExternalProcessHandle;->unlinkFromOwnDeathLocked()V
+PLcom/android/server/am/ContentProviderRecord;->addExternalProcessHandleLocked(Landroid/os/IBinder;)V
+PLcom/android/server/am/ContentProviderRecord;->removeExternalProcessHandleInternalLocked(Landroid/os/IBinder;)V
+PLcom/android/server/am/ContentProviderRecord;->removeExternalProcessHandleLocked(Landroid/os/IBinder;)Z
+PLcom/android/server/am/CoreSettingsObserver;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/CoreSettingsObserver;->beginObserveCoreSettings()V
+PLcom/android/server/am/CoreSettingsObserver;->populateSettings(Landroid/os/Bundle;Ljava/util/Map;)V
+PLcom/android/server/am/CoreSettingsObserver;->sendCoreSettings()V
+PLcom/android/server/am/DumpHeapProvider;-><init>()V
+PLcom/android/server/am/DumpHeapProvider;->onCreate()Z
+PLcom/android/server/am/EventLogTags;->writeAmMeminfo(JJJJJ)V
+PLcom/android/server/am/EventLogTags;->writeAmUidIdle(I)V
+PLcom/android/server/am/EventLogTags;->writeAmUserStateChanged(II)V
+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
+PLcom/android/server/am/InstrumentationReporter;->report(Lcom/android/server/am/InstrumentationReporter$Report;)V
+PLcom/android/server/am/InstrumentationReporter;->reportFinished(Landroid/app/IInstrumentationWatcher;Landroid/content/ComponentName;ILandroid/os/Bundle;)V
+PLcom/android/server/am/KeyguardController;->canShowActivityWhileKeyguardShowing(Lcom/android/server/am/ActivityRecord;Z)Z
+PLcom/android/server/am/KeyguardController;->canShowWhileOccluded(ZZ)Z
+PLcom/android/server/am/KeyguardController;->convertTransitFlags(I)I
+PLcom/android/server/am/KeyguardController;->dismissDockedStackIfNeeded()V
+PLcom/android/server/am/KeyguardController;->handleDismissKeyguard()V
+PLcom/android/server/am/KeyguardController;->handleOccludedChanged()V
+PLcom/android/server/am/KeyguardController;->keyguardGoingAway(I)V
+PLcom/android/server/am/KeyguardController;->setKeyguardGoingAway(Z)V
+PLcom/android/server/am/KeyguardController;->setKeyguardShown(Z)V
+PLcom/android/server/am/KeyguardController;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/am/KeyguardController;->updateKeyguardSleepToken()V
+PLcom/android/server/am/NativeCrashListener;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+PLcom/android/server/am/NativeCrashListener;->run()V
+PLcom/android/server/am/PendingIntentRecord;->detachCancelListenersLocked()Landroid/os/RemoteCallbackList;
+PLcom/android/server/am/PendingIntentRecord;->setWhitelistDurationLocked(Landroid/os/IBinder;J)V
+PLcom/android/server/am/ProcessList;->applyDisplaySize(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/am/ProcessList;->buildOomTag(Ljava/lang/String;Ljava/lang/String;II)Ljava/lang/String;
+PLcom/android/server/am/ProcessList;->getCachedRestoreThresholdKb()J
+PLcom/android/server/am/ProcessList;->makeOomAdjString(I)Ljava/lang/String;
+PLcom/android/server/am/ProcessList;->makeProcStateString(I)Ljava/lang/String;
+PLcom/android/server/am/ProcessList;->minTimeFromStateChange(Z)J
+PLcom/android/server/am/ProcessList;->openLmkdSocket()Z
+PLcom/android/server/am/ProcessRecord;->toString()Ljava/lang/String;
+PLcom/android/server/am/ProcessStatsService$2;-><init>(Lcom/android/server/am/ProcessStatsService;)V
+PLcom/android/server/am/ProcessStatsService$2;->run()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
+PLcom/android/server/am/ProcessStatsService;->dumpInner(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/am/ProcessStatsService;->getCommittedFiles(IZZ)Ljava/util/ArrayList;
+PLcom/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()V
+PLcom/android/server/am/ProcessStatsService;->trimHistoricStatesWriteLocked()V
+PLcom/android/server/am/ProcessStatsService;->writeStateAsyncLocked()V
+PLcom/android/server/am/ProcessStatsService;->writeStateLocked(Z)V
+PLcom/android/server/am/ProcessStatsService;->writeStateLocked(ZZ)V
+PLcom/android/server/am/ProviderMap;->collectPackageProvidersLocked(Ljava/lang/String;Ljava/util/Set;ZZILjava/util/ArrayList;)Z
+PLcom/android/server/am/RecentTasks;->cleanupLocked(I)V
+PLcom/android/server/am/RecentTasks;->getTaskDescriptionIcon(Ljava/lang/String;)Landroid/graphics/Bitmap;
+PLcom/android/server/am/RecentTasks;->loadPersistedTaskIdsForUserLocked(I)V
+PLcom/android/server/am/RecentTasks;->loadUserRecentsLocked(I)V
+PLcom/android/server/am/RecentTasks;->onSystemReadyLocked()V
+PLcom/android/server/am/RecentTasks;->processNextAffiliateChainLocked(I)I
+PLcom/android/server/am/RecentTasks;->saveImage(Landroid/graphics/Bitmap;Ljava/lang/String;)V
+PLcom/android/server/am/RecentTasks;->taskIdTakenForUserLocked(II)Z
+PLcom/android/server/am/ServiceRecord$1;-><init>(Lcom/android/server/am/ServiceRecord;Landroid/app/Notification;Ljava/lang/String;III)V
+PLcom/android/server/am/ServiceRecord$1;->run()V
+PLcom/android/server/am/ServiceRecord$2;-><init>(Lcom/android/server/am/ServiceRecord;Ljava/lang/String;I)V
+PLcom/android/server/am/ServiceRecord$2;->run()V
+PLcom/android/server/am/ServiceRecord;->cancelNotification()V
+PLcom/android/server/am/ServiceRecord;->forceClearTracker()V
+PLcom/android/server/am/ServiceRecord;->makeRestarting(IJ)V
+PLcom/android/server/am/ServiceRecord;->toString()Ljava/lang/String;
+PLcom/android/server/am/ServiceRecord;->updateWhitelistManager()V
+PLcom/android/server/am/TaskChangeNotificationController;->-get10(Lcom/android/server/am/TaskChangeNotificationController;)Lcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/am/TaskChangeNotificationController;->-get11(Lcom/android/server/am/TaskChangeNotificationController;)Lcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/am/TaskChangeNotificationController;->-get13(Lcom/android/server/am/TaskChangeNotificationController;)Lcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/am/TaskChangeNotificationController;->-get14(Lcom/android/server/am/TaskChangeNotificationController;)Lcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/am/TaskChangeNotificationController;->-get15(Lcom/android/server/am/TaskChangeNotificationController;)Lcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/am/TaskChangeNotificationController;->-get16(Lcom/android/server/am/TaskChangeNotificationController;)Lcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/am/TaskChangeNotificationController;->-get17(Lcom/android/server/am/TaskChangeNotificationController;)Lcom/android/server/am/ActivityManagerService;
+PLcom/android/server/am/TaskChangeNotificationController;->-get18(Lcom/android/server/am/TaskChangeNotificationController;)Lcom/android/server/am/ActivityStackSupervisor;
+PLcom/android/server/am/TaskChangeNotificationController;->-get4(Lcom/android/server/am/TaskChangeNotificationController;)Lcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/am/TaskChangeNotificationController;->-get9(Lcom/android/server/am/TaskChangeNotificationController;)Lcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/am/TaskChangeNotificationController;->lambda$-com_android_server_am_TaskChangeNotificationController_3225(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/TaskChangeNotificationController;->lambda$-com_android_server_am_TaskChangeNotificationController_3334(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/TaskChangeNotificationController;->lambda$-com_android_server_am_TaskChangeNotificationController_3467(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/TaskChangeNotificationController;->lambda$-com_android_server_am_TaskChangeNotificationController_3582(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/TaskChangeNotificationController;->lambda$-com_android_server_am_TaskChangeNotificationController_3708(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/TaskChangeNotificationController;->lambda$-com_android_server_am_TaskChangeNotificationController_3878(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/TaskChangeNotificationController;->lambda$-com_android_server_am_TaskChangeNotificationController_4027(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/TaskChangeNotificationController;->lambda$-com_android_server_am_TaskChangeNotificationController_5401(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/am/TaskChangeNotificationController;->notifyActivityRequestedOrientationChanged(II)V
+PLcom/android/server/am/TaskChangeNotificationController;->notifyTaskCreated(ILandroid/content/ComponentName;)V
+PLcom/android/server/am/TaskChangeNotificationController;->notifyTaskMovedToFront(I)V
+PLcom/android/server/am/TaskChangeNotificationController;->notifyTaskRemovalStarted(I)V
+PLcom/android/server/am/TaskChangeNotificationController;->notifyTaskRemoved(I)V
+PLcom/android/server/am/TaskChangeNotificationController;->notifyTaskSnapshotChanged(ILandroid/app/ActivityManager$TaskSnapshot;)V
+PLcom/android/server/am/TaskChangeNotificationController;->registerTaskStackListener(Landroid/app/ITaskStackListener;)V
+PLcom/android/server/am/TaskPersister$1;-><init>(Lcom/android/server/am/TaskPersister;)V
+PLcom/android/server/am/TaskPersister$1;->compare(Lcom/android/server/am/TaskRecord;Lcom/android/server/am/TaskRecord;)I
+PLcom/android/server/am/TaskPersister$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/am/TaskPersister$ImageWriteQueueItem;-><init>(Ljava/lang/String;Landroid/graphics/Bitmap;)V
+PLcom/android/server/am/TaskPersister$TaskWriteQueueItem;-><init>(Lcom/android/server/am/TaskRecord;)V
+PLcom/android/server/am/TaskPersister$WriteQueueItem;-><init>()V
+PLcom/android/server/am/TaskPersister$WriteQueueItem;-><init>(Lcom/android/server/am/TaskPersister$WriteQueueItem;)V
+PLcom/android/server/am/TaskPersister;->-get2(Lcom/android/server/am/TaskPersister;)Lcom/android/server/am/ActivityManagerService;
+PLcom/android/server/am/TaskPersister;->-set0(Lcom/android/server/am/TaskPersister;J)J
+PLcom/android/server/am/TaskPersister;->-wrap0(Ljava/lang/String;)Z
+PLcom/android/server/am/TaskPersister;->-wrap1(Lcom/android/server/am/TaskPersister;Lcom/android/server/am/TaskRecord;)Ljava/io/StringWriter;
+PLcom/android/server/am/TaskPersister;->-wrap2(Lcom/android/server/am/TaskPersister;Landroid/util/ArraySet;)V
+PLcom/android/server/am/TaskPersister;->-wrap3(Lcom/android/server/am/TaskPersister;)V
+PLcom/android/server/am/TaskPersister;->createParentDirectory(Ljava/lang/String;)Z
+PLcom/android/server/am/TaskPersister;->getImageFromWriteQueue(Ljava/lang/String;)Landroid/graphics/Bitmap;
+PLcom/android/server/am/TaskPersister;->getTaskDescriptionIcon(Ljava/lang/String;)Landroid/graphics/Bitmap;
+PLcom/android/server/am/TaskPersister;->getUserPersistedTaskIdsFile(I)Ljava/io/File;
+PLcom/android/server/am/TaskPersister;->loadPersistedTaskIdsForUser(I)Landroid/util/SparseBooleanArray;
+PLcom/android/server/am/TaskPersister;->removeThumbnails(Lcom/android/server/am/TaskRecord;)V
+PLcom/android/server/am/TaskPersister;->restoreImage(Ljava/lang/String;)Landroid/graphics/Bitmap;
+PLcom/android/server/am/TaskPersister;->saveImage(Landroid/graphics/Bitmap;Ljava/lang/String;)V
+PLcom/android/server/am/TaskPersister;->startPersisting()V
+PLcom/android/server/am/TaskPersister;->taskIdToTask(ILjava/util/ArrayList;)Lcom/android/server/am/TaskRecord;
+PLcom/android/server/am/TaskPersister;->yieldIfQueueTooDeep()V
+PLcom/android/server/am/TaskRecord;-><init>(Lcom/android/server/am/ActivityManagerService;ILandroid/content/Intent;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;Landroid/content/ComponentName;ZZZIIILjava/lang/String;Ljava/util/ArrayList;JJJZLandroid/app/ActivityManager$TaskDescription;Landroid/app/ActivityManager$TaskThumbnailInfo;IIIIILjava/lang/String;IZZZZII)V
+PLcom/android/server/am/TaskRecord;->addStartingWindowsForVisibleActivities(Z)V
+PLcom/android/server/am/TaskRecord;->autoRemoveFromRecents()Z
+PLcom/android/server/am/TaskRecord;->closeRecentsChain()V
+PLcom/android/server/am/TaskRecord;->containsOnlyFullscreenActivities()Z
+PLcom/android/server/am/TaskRecord;->disposeThumbnail()V
+PLcom/android/server/am/TaskRecord;->findActivityInHistoryLocked(Lcom/android/server/am/ActivityRecord;)Lcom/android/server/am/ActivityRecord;
+PLcom/android/server/am/TaskRecord;->getChildAt(I)Lcom/android/server/am/ConfigurationContainer;
+PLcom/android/server/am/TaskRecord;->getChildCount()I
+PLcom/android/server/am/TaskRecord;->getLaunchStackId()I
+PLcom/android/server/am/TaskRecord;->getParent()Lcom/android/server/am/ConfigurationContainer;
+PLcom/android/server/am/TaskRecord;->getRootActivity()Lcom/android/server/am/ActivityRecord;
+PLcom/android/server/am/TaskRecord;->getSnapshot(Z)Landroid/app/ActivityManager$TaskSnapshot;
+PLcom/android/server/am/TaskRecord;->getWindowContainerController()Lcom/android/server/wm/TaskWindowContainerController;
+PLcom/android/server/am/TaskRecord;->isApplicationTask()Z
+PLcom/android/server/am/TaskRecord;->isAssistantTask()Z
+PLcom/android/server/am/TaskRecord;->isClearingToReuseTask()Z
+PLcom/android/server/am/TaskRecord;->isLockTaskWhitelistedLocked()Z
+PLcom/android/server/am/TaskRecord;->isOverAssistantStack()Z
+PLcom/android/server/am/TaskRecord;->isRecentsTask()Z
+PLcom/android/server/am/TaskRecord;->isSameIntentFilter(Lcom/android/server/am/ActivityRecord;)Z
+PLcom/android/server/am/TaskRecord;->okToShowLocked()Z
+PLcom/android/server/am/TaskRecord;->onParentChanged()V
+PLcom/android/server/am/TaskRecord;->onSnapshotChanged(Landroid/app/ActivityManager$TaskSnapshot;)V
+PLcom/android/server/am/TaskRecord;->onlyHasTaskOverlayActivities(Z)Z
+PLcom/android/server/am/TaskRecord;->performClearTaskAtIndexLocked(IZ)V
+PLcom/android/server/am/TaskRecord;->performClearTaskForReuseLocked(Lcom/android/server/am/ActivityRecord;I)Lcom/android/server/am/ActivityRecord;
+PLcom/android/server/am/TaskRecord;->removeActivity(Lcom/android/server/am/ActivityRecord;)Z
+PLcom/android/server/am/TaskRecord;->removeActivity(Lcom/android/server/am/ActivityRecord;Z)Z
+PLcom/android/server/am/TaskRecord;->removeTaskActivitiesLocked(Z)V
+PLcom/android/server/am/TaskRecord;->removeWindowContainer()V
+PLcom/android/server/am/TaskRecord;->removedFromRecents()V
+PLcom/android/server/am/TaskRecord;->setIntent(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/TaskRecord;->setLockTaskAuth()V
+PLcom/android/server/am/TaskRecord;->setMinDimensions(Landroid/content/pm/ActivityInfo;)V
+PLcom/android/server/am/TaskRecord;->setNextAffiliate(Lcom/android/server/am/TaskRecord;)V
+PLcom/android/server/am/TaskRecord;->setPrevAffiliate(Lcom/android/server/am/TaskRecord;)V
+PLcom/android/server/am/TaskRecord;->setStack(Lcom/android/server/am/ActivityStack;)V
+PLcom/android/server/am/TaskRecord;->setTaskToReturnTo(I)V
+PLcom/android/server/am/TaskRecord;->setTaskToReturnTo(Lcom/android/server/am/ActivityRecord;)V
+PLcom/android/server/am/TaskRecord;->setWindowContainerController(Lcom/android/server/wm/TaskWindowContainerController;)V
+PLcom/android/server/am/TaskRecord;->toString()Ljava/lang/String;
+PLcom/android/server/am/TaskRecord;->topRunningActivityWithStartingWindowLocked()Lcom/android/server/am/ActivityRecord;
+PLcom/android/server/am/TaskRecord;->validateBounds(Landroid/graphics/Rect;)Landroid/graphics/Rect;
+PLcom/android/server/am/UidRecord$ChangeItem;-><init>()V
+PLcom/android/server/am/UidRecord;->toString()Ljava/lang/String;
+PLcom/android/server/am/UriPermissionOwner$ExternalToken;-><init>(Lcom/android/server/am/UriPermissionOwner;)V
+PLcom/android/server/am/UriPermissionOwner;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/lang/Object;)V
+PLcom/android/server/am/UriPermissionOwner;->getExternalTokenLocked()Landroid/os/Binder;
+PLcom/android/server/am/UriPermissionOwner;->removeUriPermissionLocked(Lcom/android/server/am/ActivityManagerService$GrantUri;I)V
+PLcom/android/server/am/UriPermissionOwner;->removeUriPermissionsLocked()V
+PLcom/android/server/am/UriPermissionOwner;->removeUriPermissionsLocked(I)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$Injector;->broadcastIntentLocked(Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZIII)I
+PLcom/android/server/am/UserController$Injector;->getUserManagerInternal()Landroid/os/UserManagerInternal;
+PLcom/android/server/am/UserController$Injector;->isRuntimeRestarted()Z
+PLcom/android/server/am/UserController;->-get0()Ljava/lang/String;
+PLcom/android/server/am/UserController;->dispatchLockedBootComplete(I)V
+PLcom/android/server/am/UserController;->finishUserBoot(Lcom/android/server/am/UserState;Landroid/content/IIntentReceiver;)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;)V
+PLcom/android/server/am/UserController;->getStorageManager()Landroid/os/storage/IStorageManager;
+PLcom/android/server/am/UserController;->getUsers()[I
+PLcom/android/server/am/UserController;->hasUserRestriction(Ljava/lang/String;I)Z
+PLcom/android/server/am/UserController;->maybeUnlockUser(I)Z
+PLcom/android/server/am/UserController;->onSystemReady()V
+PLcom/android/server/am/UserController;->registerUserSwitchObserver(Landroid/app/IUserSwitchObserver;Ljava/lang/String;)V
+PLcom/android/server/am/UserController;->sendBootCompletedLocked(Landroid/content/IIntentReceiver;)V
+PLcom/android/server/am/UserController;->sendUserSwitchBroadcastsLocked(II)V
+PLcom/android/server/am/UserController;->shouldConfirmCredentials(I)Z
+PLcom/android/server/am/UserController;->startProfilesLocked()V
+PLcom/android/server/am/UserController;->unlockUserCleared(I[B[BLandroid/os/IProgressListener;)Z
+PLcom/android/server/am/UserController;->updateCurrentProfileIdsLocked()V
+PLcom/android/server/am/UserState;->setState(I)V
+PLcom/android/server/am/UserState;->setState(II)Z
+PLcom/android/server/am/UserState;->stateToString(I)Ljava/lang/String;
+PLcom/android/server/am/VrController;->changeVrModeLocked(ZLcom/android/server/am/ProcessRecord;)Z
+PLcom/android/server/am/VrController;->clearVrRenderThreadLocked(Z)V
+PLcom/android/server/am/VrController;->hasPersistentVrFlagSet()Z
+PLcom/android/server/am/VrController;->inVrMode()Z
+PLcom/android/server/am/VrController;->onSystemReady()V
+PLcom/android/server/am/VrController;->shouldDisableNonVrUiLocked()Z
+PLcom/android/server/am/VrController;->updateVrRenderThreadLocked(IZ)I
+PLcom/android/server/appwidget/-$Lambda$sqLvMpiiaBhtxQ03rM0wbe7Vez0;->$m$0()V
+PLcom/android/server/appwidget/-$Lambda$sqLvMpiiaBhtxQ03rM0wbe7Vez0;-><init>(ILjava/lang/Object;)V
+PLcom/android/server/appwidget/-$Lambda$sqLvMpiiaBhtxQ03rM0wbe7Vez0;->run()V
+PLcom/android/server/appwidget/AppWidgetService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/appwidget/AppWidgetService;->lambda$-com_android_server_appwidget_AppWidgetService_1563(I)V
+PLcom/android/server/appwidget/AppWidgetService;->onBootPhase(I)V
+PLcom/android/server/appwidget/AppWidgetService;->onStart()V
+PLcom/android/server/appwidget/AppWidgetService;->onUnlockUser(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$1;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$CallbackHandler;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;Landroid/os/Looper;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$Host;-><init>()V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$Host;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$HostId;-><init>(IILjava/lang/String;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$HostId;->equals(Ljava/lang/Object;)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;-><init>()V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;)V
+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
+PLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;->hashCode()I
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SaveStateRunnable;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SaveStateRunnable;->run()V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isEnabledGroupProfile(I)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isParentOrProfile(II)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isProfileEnabled(I)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isProviderInCallerOrInProfileAndWhitelListed(Ljava/lang/String;I)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->-get0()Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->-get1(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Landroid/app/AppOpsManager;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->-get5(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Ljava/lang/Object;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->-wrap10(Lcom/android/server/appwidget/AppWidgetServiceImpl;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->-wrap11(Lcom/android/server/appwidget/AppWidgetServiceImpl;Landroid/content/Intent;I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->-wrap14(Lcom/android/server/appwidget/AppWidgetServiceImpl;I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->-wrap4(Lcom/android/server/appwidget/AppWidgetServiceImpl;IZ)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;-><init>(Landroid/content/Context;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->addProviderLocked(Landroid/content/pm/ResolveInfo;)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->bindLoadedWidgetsLocked(Ljava/util/List;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->clearProvidersAndHostsTagsLocked()V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->cloneIfLocalBinder(Landroid/appwidget/AppWidgetProviderInfo;)Landroid/appwidget/AppWidgetProviderInfo;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->computeMaximumWidgetBitmapMemory()V
+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;->getWidgetIds(Ljava/util/ArrayList;)[I
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->isLocalBinder()Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->isProfileWithUnlockedParent(I)Z
+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;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->onConfigurationChanged()V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->onStart()V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->onUserUnlocked(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->performUpgradeLocked(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->pruneHostLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;)V
+PLcom/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
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->registerBroadcastReceiver()V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->registerOnCrossProfileProvidersChangedListener()V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->reloadWidgetsMaskedStateForGroup(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->saveGroupStateAsync(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->saveStateLocked(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->scheduleNotifyGroupHostsForProvidersChangedLocked(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->setSafeMode(Z)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->stopListening(Ljava/lang/String;I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->tagProvidersAndHosts()V
+PLcom/android/server/audio/AudioEventLogger$StringEvent;-><init>(Ljava/lang/String;)V
+PLcom/android/server/audio/AudioEventLogger;-><init>(ILjava/lang/String;)V
+PLcom/android/server/audio/AudioService$1;-><init>(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService$1;->onError(I)V
+PLcom/android/server/audio/AudioService$2;-><init>(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService$2;->onUidGone(IZ)V
+PLcom/android/server/audio/AudioService$3;-><init>(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService$3;->onServiceConnected(ILandroid/bluetooth/BluetoothProfile;)V
+PLcom/android/server/audio/AudioService$4;-><init>(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService$5;-><init>(Lcom/android/server/audio/AudioService;Landroid/media/IVolumeController;)V
+PLcom/android/server/audio/AudioService$AudioHandler;-><init>(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService$AudioHandler;-><init>(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$AudioHandler;)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;->setDeviceVolume(Lcom/android/server/audio/AudioService$VolumeStreamState;I)V
+PLcom/android/server/audio/AudioService$AudioHandler;->setForceUse(IILjava/lang/String;)V
+PLcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;-><init>(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;-><init>(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;)V
+PLcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/audio/AudioService$AudioServiceInternal;-><init>(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService$AudioServiceInternal;->getRingerModeInternal()I
+PLcom/android/server/audio/AudioService$AudioServiceInternal;->setAccessibilityServiceUids(Landroid/util/IntArray;)V
+PLcom/android/server/audio/AudioService$AudioServiceInternal;->setRingerModeDelegate(Landroid/media/AudioManagerInternal$RingerModeDelegate;)V
+PLcom/android/server/audio/AudioService$AudioServiceInternal;->setRingerModeInternal(ILjava/lang/String;)V
+PLcom/android/server/audio/AudioService$AudioServiceInternal;->updateRingerModeAffectedStreamsInternal()V
+PLcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener;-><init>(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener;-><init>(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener;)V
+PLcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+PLcom/android/server/audio/AudioService$AudioSystemThread;-><init>(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService$AudioSystemThread;->run()V
+PLcom/android/server/audio/AudioService$ForceControlStreamClient;-><init>(Lcom/android/server/audio/AudioService;Landroid/os/IBinder;)V
+PLcom/android/server/audio/AudioService$ForceControlStreamClient;->release()V
+PLcom/android/server/audio/AudioService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/audio/AudioService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/audio/AudioService$Lifecycle;->onStart()V
+PLcom/android/server/audio/AudioService$MyDisplayStatusCallback;-><init>(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService$MyDisplayStatusCallback;-><init>(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$MyDisplayStatusCallback;)V
+PLcom/android/server/audio/AudioService$SetModeDeathHandler;-><init>(Lcom/android/server/audio/AudioService;Landroid/os/IBinder;I)V
+PLcom/android/server/audio/AudioService$SetModeDeathHandler;->getBinder()Landroid/os/IBinder;
+PLcom/android/server/audio/AudioService$SetModeDeathHandler;->getPid()I
+PLcom/android/server/audio/AudioService$SetModeDeathHandler;->setMode(I)V
+PLcom/android/server/audio/AudioService$SettingsObserver;-><init>(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService$SoundPoolCallback;-><init>(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService$SoundPoolCallback;-><init>(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$SoundPoolCallback;)V
+PLcom/android/server/audio/AudioService$SoundPoolCallback;->onLoadComplete(Landroid/media/SoundPool;II)V
+PLcom/android/server/audio/AudioService$SoundPoolCallback;->setSamples([I)V
+PLcom/android/server/audio/AudioService$SoundPoolCallback;->status()I
+PLcom/android/server/audio/AudioService$SoundPoolListenerThread;-><init>(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService$SoundPoolListenerThread;->run()V
+PLcom/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
+PLcom/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;->setController(Landroid/media/IVolumeController;)V
+PLcom/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
+PLcom/android/server/audio/AudioService$VolumeStreamState;->-get2(Lcom/android/server/audio/AudioService$VolumeStreamState;)I
+PLcom/android/server/audio/AudioService$VolumeStreamState;->-get3(Lcom/android/server/audio/AudioService$VolumeStreamState;)Z
+PLcom/android/server/audio/AudioService$VolumeStreamState;->-get4(Lcom/android/server/audio/AudioService$VolumeStreamState;)I
+PLcom/android/server/audio/AudioService$VolumeStreamState;->-set1(Lcom/android/server/audio/AudioService$VolumeStreamState;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/audio/AudioService$VolumeStreamState;->-wrap0(Lcom/android/server/audio/AudioService$VolumeStreamState;)Z
+PLcom/android/server/audio/AudioService$VolumeStreamState;-><init>(Lcom/android/server/audio/AudioService;Ljava/lang/String;I)V
+PLcom/android/server/audio/AudioService$VolumeStreamState;-><init>(Lcom/android/server/audio/AudioService;Ljava/lang/String;ILcom/android/server/audio/AudioService$VolumeStreamState;)V
+PLcom/android/server/audio/AudioService$VolumeStreamState;->adjustIndex(IILjava/lang/String;)Z
+PLcom/android/server/audio/AudioService$VolumeStreamState;->applyDeviceVolume_syncVSS(I)V
+PLcom/android/server/audio/AudioService$VolumeStreamState;->checkFixedVolumeDevices()V
+PLcom/android/server/audio/AudioService$VolumeStreamState;->getMinIndex()I
+PLcom/android/server/audio/AudioService$VolumeStreamState;->getStreamType()I
+PLcom/android/server/audio/AudioService$VolumeStreamState;->getValidIndex(I)I
+PLcom/android/server/audio/AudioService$VolumeStreamState;->hasIndexForDevice(I)Z
+PLcom/android/server/audio/AudioService$VolumeStreamState;->mute(Z)V
+PLcom/android/server/audio/AudioService;->-get0()[I
+PLcom/android/server/audio/AudioService;->-get1()[I
+PLcom/android/server/audio/AudioService;->-get12(Lcom/android/server/audio/AudioService;)Z
+PLcom/android/server/audio/AudioService;->-get13(Lcom/android/server/audio/AudioService;)Landroid/bluetooth/BluetoothHeadset;
+PLcom/android/server/audio/AudioService;->-get15(Lcom/android/server/audio/AudioService;)Ljava/lang/Boolean;
+PLcom/android/server/audio/AudioService;->-get16(Lcom/android/server/audio/AudioService;)Landroid/util/ArrayMap;
+PLcom/android/server/audio/AudioService;->-get2()Ljava/util/List;
+PLcom/android/server/audio/AudioService;->-get24(Lcom/android/server/audio/AudioService;)Z
+PLcom/android/server/audio/AudioService;->-get25(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/MediaFocusControl;
+PLcom/android/server/audio/AudioService;->-get28(Lcom/android/server/audio/AudioService;)Landroid/media/AudioManagerInternal$RingerModeDelegate;
+PLcom/android/server/audio/AudioService;->-get3(Lcom/android/server/audio/AudioService;)[[I
+PLcom/android/server/audio/AudioService;->-get30(Lcom/android/server/audio/AudioService;)I
+PLcom/android/server/audio/AudioService;->-get31(Lcom/android/server/audio/AudioService;)Ljava/util/ArrayList;
+PLcom/android/server/audio/AudioService;->-get33(Lcom/android/server/audio/AudioService;)Ljava/lang/Object;
+PLcom/android/server/audio/AudioService;->-get34(Lcom/android/server/audio/AudioService;)Ljava/lang/Object;
+PLcom/android/server/audio/AudioService;->-get36(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/AudioService$SoundPoolCallback;
+PLcom/android/server/audio/AudioService;->-get37(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/AudioService$SoundPoolListenerThread;
+PLcom/android/server/audio/AudioService;->-get38(Lcom/android/server/audio/AudioService;)Landroid/os/Looper;
+PLcom/android/server/audio/AudioService;->-get4(Lcom/android/server/audio/AudioService;)Landroid/bluetooth/BluetoothA2dp;
+PLcom/android/server/audio/AudioService;->-get40(Lcom/android/server/audio/AudioService;)Z
+PLcom/android/server/audio/AudioService;->-get41(Lcom/android/server/audio/AudioService;)Z
+PLcom/android/server/audio/AudioService;->-get42(Lcom/android/server/audio/AudioService;)Z
+PLcom/android/server/audio/AudioService;->-get45()I
+PLcom/android/server/audio/AudioService;->-get5(Lcom/android/server/audio/AudioService;)Ljava/lang/Object;
+PLcom/android/server/audio/AudioService;->-get7(Lcom/android/server/audio/AudioService;)Ljava/lang/Object;
+PLcom/android/server/audio/AudioService;->-set0(Lcom/android/server/audio/AudioService;Landroid/bluetooth/BluetoothA2dp;)Landroid/bluetooth/BluetoothA2dp;
+PLcom/android/server/audio/AudioService;->-set1(Lcom/android/server/audio/AudioService;[I)[I
+PLcom/android/server/audio/AudioService;->-set12(Lcom/android/server/audio/AudioService;Landroid/media/SoundPool;)Landroid/media/SoundPool;
+PLcom/android/server/audio/AudioService;->-set13(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$SoundPoolCallback;)Lcom/android/server/audio/AudioService$SoundPoolCallback;
+PLcom/android/server/audio/AudioService;->-set14(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$SoundPoolListenerThread;)Lcom/android/server/audio/AudioService$SoundPoolListenerThread;
+PLcom/android/server/audio/AudioService;->-set15(Lcom/android/server/audio/AudioService;Landroid/os/Looper;)Landroid/os/Looper;
+PLcom/android/server/audio/AudioService;->-set17(Lcom/android/server/audio/AudioService;Z)Z
+PLcom/android/server/audio/AudioService;->-set2(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$AudioHandler;)Lcom/android/server/audio/AudioService$AudioHandler;
+PLcom/android/server/audio/AudioService;->-set4(Lcom/android/server/audio/AudioService;Landroid/bluetooth/BluetoothHeadset;)Landroid/bluetooth/BluetoothHeadset;
+PLcom/android/server/audio/AudioService;->-set5(Lcom/android/server/audio/AudioService;Landroid/bluetooth/BluetoothDevice;)Landroid/bluetooth/BluetoothDevice;
+PLcom/android/server/audio/AudioService;->-set9(Lcom/android/server/audio/AudioService;Landroid/media/AudioManagerInternal$RingerModeDelegate;)Landroid/media/AudioManagerInternal$RingerModeDelegate;
+PLcom/android/server/audio/AudioService;->-wrap13(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService;->-wrap16(Lcom/android/server/audio/AudioService;Landroid/content/Context;)V
+PLcom/android/server/audio/AudioService;->-wrap18(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService;->-wrap2(Lcom/android/server/audio/AudioService;)Z
+PLcom/android/server/audio/AudioService;->-wrap20(Lcom/android/server/audio/AudioService;I)V
+PLcom/android/server/audio/AudioService;->-wrap23(Lcom/android/server/audio/AudioService;I)V
+PLcom/android/server/audio/AudioService;->-wrap25(Lcom/android/server/audio/AudioService;ZLjava/lang/String;)V
+PLcom/android/server/audio/AudioService;->-wrap33(Lcom/android/server/audio/AudioService;Z)V
+PLcom/android/server/audio/AudioService;->-wrap35(Lcom/android/server/audio/AudioService;)V
+PLcom/android/server/audio/AudioService;->-wrap36(Lcom/android/server/audio/AudioService;Landroid/content/Intent;)V
+PLcom/android/server/audio/AudioService;->-wrap38(Landroid/os/Handler;IIIILjava/lang/Object;I)V
+PLcom/android/server/audio/AudioService;->-wrap4(Lcom/android/server/audio/AudioService;I)I
+PLcom/android/server/audio/AudioService;->-wrap40(Lcom/android/server/audio/AudioService;IILjava/lang/String;)V
+PLcom/android/server/audio/AudioService;->-wrap6(Lcom/android/server/audio/AudioService;III)I
+PLcom/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
+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;)V
+PLcom/android/server/audio/AudioService;->adjustSuggestedStreamVolume(IIILjava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/audio/AudioService;->broadcastMasterMuteStatus(Z)V
+PLcom/android/server/audio/AudioService;->broadcastRingerMode(Ljava/lang/String;I)V
+PLcom/android/server/audio/AudioService;->broadcastScoConnectionState(I)V
+PLcom/android/server/audio/AudioService;->broadcastVibrateSetting(I)V
+PLcom/android/server/audio/AudioService;->checkAllAliasStreamVolumes()V
+PLcom/android/server/audio/AudioService;->checkAllFixedVolumeDevices()V
+PLcom/android/server/audio/AudioService;->checkAudioSettingsPermission(Ljava/lang/String;)Z
+PLcom/android/server/audio/AudioService;->checkMuteAffectedStreams()V
+PLcom/android/server/audio/AudioService;->checkScoAudioState()V
+PLcom/android/server/audio/AudioService;->clearAllScoClients(IZ)V
+PLcom/android/server/audio/AudioService;->createAudioSystemThread()V
+PLcom/android/server/audio/AudioService;->createStreamStates()V
+PLcom/android/server/audio/AudioService;->disconnectBluetoothSco(I)V
+PLcom/android/server/audio/AudioService;->enforceSafeMediaVolume(Ljava/lang/String;)V
+PLcom/android/server/audio/AudioService;->enforceVolumeController(Ljava/lang/String;)V
+PLcom/android/server/audio/AudioService;->ensureValidDirection(I)V
+PLcom/android/server/audio/AudioService;->ensureValidRingerMode(I)V
+PLcom/android/server/audio/AudioService;->forceVolumeControlStream(ILandroid/os/IBinder;)V
+PLcom/android/server/audio/AudioService;->getActiveStreamType(I)I
+PLcom/android/server/audio/AudioService;->getBluetoothHeadset()Z
+PLcom/android/server/audio/AudioService;->getCurrentUserId()I
+PLcom/android/server/audio/AudioService;->getLastAudibleStreamVolume(I)I
+PLcom/android/server/audio/AudioService;->getMode()I
+PLcom/android/server/audio/AudioService;->getRingerModeExternal()I
+PLcom/android/server/audio/AudioService;->getRingerModeInternal()I
+PLcom/android/server/audio/AudioService;->getRingtonePlayer()Landroid/media/IRingtonePlayer;
+PLcom/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
+PLcom/android/server/audio/AudioService;->handleConfigurationChanged(Landroid/content/Context;)V
+PLcom/android/server/audio/AudioService;->initA11yMonitoring()V
+PLcom/android/server/audio/AudioService;->isAfMusicActiveRecently(I)Z
+PLcom/android/server/audio/AudioService;->isBluetoothScoOn()Z
+PLcom/android/server/audio/AudioService;->isCameraSoundForced()Z
+PLcom/android/server/audio/AudioService;->isInCommunication()Z
+PLcom/android/server/audio/AudioService;->isMuteAdjust(I)Z
+PLcom/android/server/audio/AudioService;->isPlatformTelevision()Z
+PLcom/android/server/audio/AudioService;->isSpeakerphoneOn()Z
+PLcom/android/server/audio/AudioService;->isStreamAffectedByMute(I)Z
+PLcom/android/server/audio/AudioService;->isStreamAffectedByRingerMode(I)Z
+PLcom/android/server/audio/AudioService;->isStreamMute(I)Z
+PLcom/android/server/audio/AudioService;->isStreamMutedByRingerMode(I)Z
+PLcom/android/server/audio/AudioService;->isValidRingerMode(I)Z
+PLcom/android/server/audio/AudioService;->loadTouchSoundAssetDefaults()V
+PLcom/android/server/audio/AudioService;->loadTouchSoundAssets()V
+PLcom/android/server/audio/AudioService;->muteRingerModeStreams()V
+PLcom/android/server/audio/AudioService;->notifyVolumeControllerVisible(Landroid/media/IVolumeController;Z)V
+PLcom/android/server/audio/AudioService;->observeDevicesForStreams(I)V
+PLcom/android/server/audio/AudioService;->onAccessibilityServicesStateChanged(Landroid/view/accessibility/AccessibilityManager;)V
+PLcom/android/server/audio/AudioService;->onBroadcastScoConnectionState(I)V
+PLcom/android/server/audio/AudioService;->onConfigureSafeVolume(ZLjava/lang/String;)V
+PLcom/android/server/audio/AudioService;->onIndicateSystemReady()V
+PLcom/android/server/audio/AudioService;->onSystemReady()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;->readAndSetLowRamDevice()V
+PLcom/android/server/audio/AudioService;->readAudioSettings(Z)V
+PLcom/android/server/audio/AudioService;->readCameraSoundForced()Z
+PLcom/android/server/audio/AudioService;->readDockAudioSettings(Landroid/content/ContentResolver;)V
+PLcom/android/server/audio/AudioService;->readPersistedSettings()V
+PLcom/android/server/audio/AudioService;->readUserRestrictions()V
+PLcom/android/server/audio/AudioService;->registerPlaybackCallback(Landroid/media/IPlaybackConfigDispatcher;)V
+PLcom/android/server/audio/AudioService;->releasePlayer(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
+PLcom/android/server/audio/AudioService;->resetBluetoothSco()V
+PLcom/android/server/audio/AudioService;->safeMediaVolumeIndex(I)I
+PLcom/android/server/audio/AudioService;->sendEncodedSurroundMode(ILjava/lang/String;)V
+PLcom/android/server/audio/AudioService;->sendEncodedSurroundMode(Landroid/content/ContentResolver;Ljava/lang/String;)V
+PLcom/android/server/audio/AudioService;->sendStickyBroadcastToAll(Landroid/content/Intent;)V
+PLcom/android/server/audio/AudioService;->sendVolumeUpdate(IIII)V
+PLcom/android/server/audio/AudioService;->setBluetoothA2dpOn(Z)V
+PLcom/android/server/audio/AudioService;->setBluetoothScoOnInt(ZLjava/lang/String;)V
+PLcom/android/server/audio/AudioService;->setForceUseInt_SyncDevices(IILjava/lang/String;)V
+PLcom/android/server/audio/AudioService;->setMode(ILandroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/audio/AudioService;->setModeInt(ILandroid/os/IBinder;ILjava/lang/String;)I
+PLcom/android/server/audio/AudioService;->setRingerMode(ILjava/lang/String;Z)V
+PLcom/android/server/audio/AudioService;->setRingerModeExt(I)V
+PLcom/android/server/audio/AudioService;->setRingerModeInt(IZ)V
+PLcom/android/server/audio/AudioService;->setRingerModeInternal(ILjava/lang/String;)V
+PLcom/android/server/audio/AudioService;->setRingtonePlayer(Landroid/media/IRingtonePlayer;)V
+PLcom/android/server/audio/AudioService;->setStreamVolumeInt(IIIZLjava/lang/String;)V
+PLcom/android/server/audio/AudioService;->setSystemAudioMute(Z)V
+PLcom/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;->startWatchingRoutes(Landroid/media/IAudioRoutesObserver;)Landroid/media/AudioRoutesInfo;
+PLcom/android/server/audio/AudioService;->systemReady()V
+PLcom/android/server/audio/AudioService;->trackPlayer(Landroid/media/PlayerBase$PlayerIdCard;)I
+PLcom/android/server/audio/AudioService;->updateA11yVolumeAlias(Z)V
+PLcom/android/server/audio/AudioService;->updateDefaultStreamOverrideDelay(Z)V
+PLcom/android/server/audio/AudioService;->updateDefaultVolumes()V
+PLcom/android/server/audio/AudioService;->updateFlagsForSystemAudio(I)I
+PLcom/android/server/audio/AudioService;->updateMasterMono(Landroid/content/ContentResolver;)V
+PLcom/android/server/audio/AudioService;->updateRingerModeAffectedStreams()Z
+PLcom/android/server/audio/AudioService;->updateStreamVolumeAlias(ZLjava/lang/String;)V
+PLcom/android/server/audio/AudioService;->volumeAdjustmentAllowedByDnd(II)Z
+PLcom/android/server/audio/AudioService;->waitForAudioHandlerCreation()V
+PLcom/android/server/audio/AudioServiceEvents$ForceUseEvent;-><init>(IILjava/lang/String;)V
+PLcom/android/server/audio/AudioServiceEvents$PhoneStateEvent;-><init>(Ljava/lang/String;II)V
+PLcom/android/server/audio/AudioServiceEvents$VolumeEvent;-><init>(IIIILjava/lang/String;)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
+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;->hasSameClient(Ljava/lang/String;)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$2;-><init>(Lcom/android/server/audio/MediaFocusControl;Z)V
+PLcom/android/server/audio/MediaFocusControl$2;->run()V
+PLcom/android/server/audio/MediaFocusControl$AudioFocusDeathHandler;-><init>(Lcom/android/server/audio/MediaFocusControl;Landroid/os/IBinder;)V
+PLcom/android/server/audio/MediaFocusControl;->-get0()[I
+PLcom/android/server/audio/MediaFocusControl;->-get1()Ljava/lang/Object;
+PLcom/android/server/audio/MediaFocusControl;->-get2(Lcom/android/server/audio/MediaFocusControl;)Lcom/android/server/audio/PlayerFocusEnforcer;
+PLcom/android/server/audio/MediaFocusControl;->-get5(Lcom/android/server/audio/MediaFocusControl;)Z
+PLcom/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
+PLcom/android/server/audio/MediaFocusControl;->getFocusRampTimeMs(ILandroid/media/AudioAttributes;)I
+PLcom/android/server/audio/MediaFocusControl;->isLockedFocusOwner(Lcom/android/server/audio/FocusRequester;)Z
+PLcom/android/server/audio/MediaFocusControl;->notifyExtFocusPolicyFocusRequest_syncAf(Landroid/media/AudioFocusInfo;ILandroid/media/IAudioFocusDispatcher;Landroid/os/IBinder;)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;->notifyTopOfAudioFocusStack()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;II)I
+PLcom/android/server/audio/MediaFocusControl;->runAudioCheckerForRingOrCallAsync(Z)V
+PLcom/android/server/audio/MediaFocusControl;->unduckPlayers(Lcom/android/server/audio/FocusRequester;)V
+PLcom/android/server/audio/PlaybackActivityMonitor$AudioAttrEvent;-><init>(ILandroid/media/AudioAttributes;)V
+PLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;-><init>()V
+PLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;-><init>(Lcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;)V
+PLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->checkDuck(Landroid/media/AudioPlaybackConfiguration;)V
+PLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->removeReleased(Landroid/media/AudioPlaybackConfiguration;)V
+PLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->unduckUid(ILjava/util/HashMap;)V
+PLcom/android/server/audio/PlaybackActivityMonitor$NewPlayerEvent;-><init>(Landroid/media/AudioPlaybackConfiguration;)V
+PLcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;-><init>(Landroid/media/IPlaybackConfigDispatcher;Z)V
+PLcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;->init()Z
+PLcom/android/server/audio/PlaybackActivityMonitor$PlayerEvent;-><init>(II)V
+PLcom/android/server/audio/PlaybackActivityMonitor;-><init>()V
+PLcom/android/server/audio/PlaybackActivityMonitor;->checkConfigurationCaller(ILandroid/media/AudioPlaybackConfiguration;I)Z
+PLcom/android/server/audio/PlaybackActivityMonitor;->mutePlayersForCall([I)V
+PLcom/android/server/audio/PlaybackActivityMonitor;->playerAttributes(ILandroid/media/AudioAttributes;I)V
+PLcom/android/server/audio/PlaybackActivityMonitor;->playerDeath(I)V
+PLcom/android/server/audio/PlaybackActivityMonitor;->registerPlaybackCallback(Landroid/media/IPlaybackConfigDispatcher;Z)V
+PLcom/android/server/audio/PlaybackActivityMonitor;->releasePlayer(II)V
+PLcom/android/server/audio/PlaybackActivityMonitor;->unduckPlayers(Lcom/android/server/audio/FocusRequester;)V
+PLcom/android/server/audio/PlaybackActivityMonitor;->unmutePlayersForCall()V
+PLcom/android/server/audio/RecordingActivityMonitor;-><init>(Landroid/content/Context;)V
+PLcom/android/server/audio/RecordingActivityMonitor;->initMonitor()V
+PLcom/android/server/audio/RecordingActivityMonitor;->onRecordingConfigurationChanged(IIII[ILjava/lang/String;)V
+PLcom/android/server/autofill/-$Lambda$JYqZriexGNVTrQ5cwTlcgjPSZFY$1;->$m$0()V
+PLcom/android/server/autofill/-$Lambda$JYqZriexGNVTrQ5cwTlcgjPSZFY$1;-><init>(IILjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/autofill/-$Lambda$JYqZriexGNVTrQ5cwTlcgjPSZFY$1;->run()V
+PLcom/android/server/autofill/-$Lambda$nIY0QhGOcwXKKmuVD-pf4oRdtr0;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/autofill/-$Lambda$tQjSpU6IVjrOfYzILn21rTYl4Vo;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/autofill/-$Lambda$vJuxjgWyqc7YDAVrm5huZJMbjMg;->$m$0(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+PLcom/android/server/autofill/-$Lambda$vJuxjgWyqc7YDAVrm5huZJMbjMg;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/autofill/-$Lambda$vJuxjgWyqc7YDAVrm5huZJMbjMg;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+PLcom/android/server/autofill/AutofillManagerService$1;-><init>(Lcom/android/server/autofill/AutofillManagerService;)V
+PLcom/android/server/autofill/AutofillManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/autofill/AutofillManagerService$2;-><init>(Lcom/android/server/autofill/AutofillManagerService;)V
+PLcom/android/server/autofill/AutofillManagerService$2;->getActiveAutofillServicePackageName()Ljava/lang/String;
+PLcom/android/server/autofill/AutofillManagerService$2;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+PLcom/android/server/autofill/AutofillManagerService$2;->onPackageUpdateFinished(Ljava/lang/String;I)V
+PLcom/android/server/autofill/AutofillManagerService$2;->onSomePackagesChanged()V
+PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;-><init>(Lcom/android/server/autofill/AutofillManagerService;)V
+PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->addClient(Landroid/view/autofill/IAutoFillManagerClient;I)I
+PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->finishSession(II)V
+PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->getFillEventHistory()Landroid/service/autofill/FillEventHistory;
+PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->setHasCallback(IIZ)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;IZILjava/lang/String;)I
+PLcom/android/server/autofill/AutofillManagerService$LocalService;-><init>(Lcom/android/server/autofill/AutofillManagerService;)V
+PLcom/android/server/autofill/AutofillManagerService$LocalService;-><init>(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/server/autofill/AutofillManagerService$LocalService;)V
+PLcom/android/server/autofill/AutofillManagerService$LocalService;->onBackKeyPressed()V
+PLcom/android/server/autofill/AutofillManagerService$SettingsObserver;-><init>(Lcom/android/server/autofill/AutofillManagerService;Landroid/os/Handler;)V
+PLcom/android/server/autofill/AutofillManagerService;->-get0(Lcom/android/server/autofill/AutofillManagerService;)Landroid/content/Context;
+PLcom/android/server/autofill/AutofillManagerService;->-get2(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerService;->-get5(Lcom/android/server/autofill/AutofillManagerService;)Lcom/android/server/autofill/ui/AutoFillUI;
+PLcom/android/server/autofill/AutofillManagerService;->-wrap2(Lcom/android/server/autofill/AutofillManagerService;I)V
+PLcom/android/server/autofill/AutofillManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/autofill/AutofillManagerService;->lambda$-com_android_server_autofill_AutofillManagerService_5890(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+PLcom/android/server/autofill/AutofillManagerService;->onBootPhase(I)V
+PLcom/android/server/autofill/AutofillManagerService;->onStart()V
+PLcom/android/server/autofill/AutofillManagerService;->onUnlockUser(I)V
+PLcom/android/server/autofill/AutofillManagerService;->setDebugLocked(Z)V
+PLcom/android/server/autofill/AutofillManagerService;->startTrackingPackageChanges()V
+PLcom/android/server/autofill/AutofillManagerService;->updateCachedServiceLocked(I)V
+PLcom/android/server/autofill/AutofillManagerService;->updateCachedServiceLocked(IZ)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;-><init>(Landroid/content/Context;Ljava/lang/Object;Landroid/util/LocalLog;ILcom/android/server/autofill/ui/AutoFillUI;Z)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->addClientLocked(Landroid/view/autofill/IAutoFillManagerClient;)Z
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->createSessionByTokenLocked(Landroid/os/IBinder;ILandroid/os/IBinder;ZLjava/lang/String;)Lcom/android/server/autofill/Session;
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->destroySessionsLocked()V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->finishSessionLocked(II)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->getComponentNameFromSettings()Ljava/lang/String;
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->getFillEventHistory(I)Landroid/service/autofill/FillEventHistory;
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->getServiceComponentName()Landroid/content/ComponentName;
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->isEnabled()Z
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->isSetupCompletedLocked()Z
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->pruneAbandonedSessionsLocked()V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->removeSessionLocked(I)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->resetLastResponse()V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->sendStateToClients(Z)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->setHasCallback(IIZ)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->startSessionLocked(Landroid/os/IBinder;ILandroid/os/IBinder;Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;ZILjava/lang/String;)I
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->updateLocked(Z)V
+PLcom/android/server/autofill/Helper;->append(Ljava/lang/StringBuilder;Landroid/os/Bundle;)V
+PLcom/android/server/autofill/Helper;->bundleToString(Landroid/os/Bundle;)Ljava/lang/String;
+PLcom/android/server/autofill/RemoteFillService$MyHandler$1;-><init>(Lcom/android/server/autofill/RemoteFillService;)V
+PLcom/android/server/autofill/RemoteFillService$MyHandler$1;->executeMessage(Landroid/os/Message;)V
+PLcom/android/server/autofill/RemoteFillService$MyHandler;-><init>(Lcom/android/server/autofill/RemoteFillService;Landroid/content/Context;)V
+PLcom/android/server/autofill/RemoteFillService$PendingFillRequest$1;-><init>(Lcom/android/server/autofill/RemoteFillService$PendingFillRequest;Landroid/service/autofill/FillRequest;)V
+PLcom/android/server/autofill/RemoteFillService$PendingFillRequest$1;->onCancellable(Landroid/os/ICancellationSignal;)V
+PLcom/android/server/autofill/RemoteFillService$PendingFillRequest$1;->onSuccess(Landroid/service/autofill/FillResponse;)V
+PLcom/android/server/autofill/RemoteFillService$PendingFillRequest;->-set0(Lcom/android/server/autofill/RemoteFillService$PendingFillRequest;Landroid/os/ICancellationSignal;)Landroid/os/ICancellationSignal;
+PLcom/android/server/autofill/RemoteFillService$PendingFillRequest;-><init>(Landroid/service/autofill/FillRequest;Lcom/android/server/autofill/RemoteFillService;)V
+PLcom/android/server/autofill/RemoteFillService$PendingFillRequest;->run()V
+PLcom/android/server/autofill/RemoteFillService$PendingRequest;-><init>(Lcom/android/server/autofill/RemoteFillService;)V
+PLcom/android/server/autofill/RemoteFillService$PendingRequest;->finish()Z
+PLcom/android/server/autofill/RemoteFillService$PendingRequest;->getService()Lcom/android/server/autofill/RemoteFillService;
+PLcom/android/server/autofill/RemoteFillService$PendingRequest;->isCancelledLocked()Z
+PLcom/android/server/autofill/RemoteFillService$PendingRequest;->isFinal()Z
+PLcom/android/server/autofill/RemoteFillService$RemoteServiceConnection;-><init>(Lcom/android/server/autofill/RemoteFillService;)V
+PLcom/android/server/autofill/RemoteFillService$RemoteServiceConnection;-><init>(Lcom/android/server/autofill/RemoteFillService;Lcom/android/server/autofill/RemoteFillService$RemoteServiceConnection;)V
+PLcom/android/server/autofill/RemoteFillService$RemoteServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/autofill/RemoteFillService;->-get0(Lcom/android/server/autofill/RemoteFillService;)Landroid/service/autofill/IAutoFillService;
+PLcom/android/server/autofill/RemoteFillService;->-get1(Lcom/android/server/autofill/RemoteFillService;)Z
+PLcom/android/server/autofill/RemoteFillService;->-get2(Lcom/android/server/autofill/RemoteFillService;)Landroid/content/ComponentName;
+PLcom/android/server/autofill/RemoteFillService;->-get4(Lcom/android/server/autofill/RemoteFillService;)Z
+PLcom/android/server/autofill/RemoteFillService;->-get5(Lcom/android/server/autofill/RemoteFillService;)Lcom/android/internal/os/HandlerCaller;
+PLcom/android/server/autofill/RemoteFillService;->-get6(Lcom/android/server/autofill/RemoteFillService;)Lcom/android/server/autofill/RemoteFillService$PendingRequest;
+PLcom/android/server/autofill/RemoteFillService;->-set0(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/IAutoFillService;)Landroid/service/autofill/IAutoFillService;
+PLcom/android/server/autofill/RemoteFillService;->-set1(Lcom/android/server/autofill/RemoteFillService;Z)Z
+PLcom/android/server/autofill/RemoteFillService;->-set2(Lcom/android/server/autofill/RemoteFillService;Lcom/android/server/autofill/RemoteFillService$PendingRequest;)Lcom/android/server/autofill/RemoteFillService$PendingRequest;
+PLcom/android/server/autofill/RemoteFillService;->-set3(Lcom/android/server/autofill/RemoteFillService;Z)Z
+PLcom/android/server/autofill/RemoteFillService;->-wrap1(Lcom/android/server/autofill/RemoteFillService;Lcom/android/server/autofill/RemoteFillService$PendingRequest;IILandroid/service/autofill/FillResponse;)V
+PLcom/android/server/autofill/RemoteFillService;->-wrap6(Lcom/android/server/autofill/RemoteFillService;)V
+PLcom/android/server/autofill/RemoteFillService;->-wrap7(Lcom/android/server/autofill/RemoteFillService;Lcom/android/server/autofill/RemoteFillService$PendingRequest;)V
+PLcom/android/server/autofill/RemoteFillService;-><init>(Landroid/content/Context;Landroid/content/ComponentName;ILcom/android/server/autofill/RemoteFillService$FillServiceCallbacks;)V
+PLcom/android/server/autofill/RemoteFillService;->cancelCurrentRequest()I
+PLcom/android/server/autofill/RemoteFillService;->cancelScheduledUnbind()V
+PLcom/android/server/autofill/RemoteFillService;->destroy()V
+PLcom/android/server/autofill/RemoteFillService;->dispatchOnFillRequestSuccess(Lcom/android/server/autofill/RemoteFillService$PendingRequest;IILandroid/service/autofill/FillResponse;)V
+PLcom/android/server/autofill/RemoteFillService;->ensureBound()V
+PLcom/android/server/autofill/RemoteFillService;->ensureUnbound()V
+PLcom/android/server/autofill/RemoteFillService;->handleDestroy()V
+PLcom/android/server/autofill/RemoteFillService;->handlePendingRequest(Lcom/android/server/autofill/RemoteFillService$PendingRequest;)V
+PLcom/android/server/autofill/RemoteFillService;->handleResponseCallbackCommon(Lcom/android/server/autofill/RemoteFillService$PendingRequest;)Z
+PLcom/android/server/autofill/RemoteFillService;->isBound()Z
+PLcom/android/server/autofill/RemoteFillService;->lambda$-com_android_server_autofill_RemoteFillService_9957(Lcom/android/server/autofill/RemoteFillService$PendingRequest;ILandroid/service/autofill/FillResponse;I)V
+PLcom/android/server/autofill/RemoteFillService;->onFillRequest(Landroid/service/autofill/FillRequest;)V
+PLcom/android/server/autofill/RemoteFillService;->scheduleUnbind()V
+PLcom/android/server/autofill/Session$1;-><init>(Lcom/android/server/autofill/Session;)V
+PLcom/android/server/autofill/Session$1;->send(ILandroid/os/Bundle;)V
+PLcom/android/server/autofill/Session;->-get0(Lcom/android/server/autofill/Session;)Landroid/os/Bundle;
+PLcom/android/server/autofill/Session;->-get1(Lcom/android/server/autofill/Session;)Ljava/util/ArrayList;
+PLcom/android/server/autofill/Session;->-get2(Lcom/android/server/autofill/Session;)Ljava/lang/Object;
+PLcom/android/server/autofill/Session;->-get3(Lcom/android/server/autofill/Session;)Lcom/android/server/autofill/RemoteFillService;
+PLcom/android/server/autofill/Session;->-set0(Lcom/android/server/autofill/Session;Ljava/util/ArrayList;)Ljava/util/ArrayList;
+PLcom/android/server/autofill/Session;->-wrap0(Lcom/android/server/autofill/Session;)V
+PLcom/android/server/autofill/Session;->-wrap1(Lcom/android/server/autofill/Session;Landroid/service/autofill/FillContext;I)V
+PLcom/android/server/autofill/Session;-><init>(Lcom/android/server/autofill/AutofillManagerServiceImpl;Lcom/android/server/autofill/ui/AutoFillUI;Landroid/content/Context;Lcom/android/internal/os/HandlerCaller;ILjava/lang/Object;IILandroid/os/IBinder;Landroid/os/IBinder;ZLandroid/content/ComponentName;Ljava/lang/String;)V
+PLcom/android/server/autofill/Session;->cancelCurrentRequestLocked()V
+PLcom/android/server/autofill/Session;->destroyLocked()Lcom/android/server/autofill/RemoteFillService;
+PLcom/android/server/autofill/Session;->fillContextWithAllowedValuesLocked(Landroid/service/autofill/FillContext;I)V
+PLcom/android/server/autofill/Session;->getClient()Landroid/view/autofill/IAutoFillManagerClient;
+PLcom/android/server/autofill/Session;->getIdsOfAllViewStatesLocked()[Landroid/view/autofill/AutofillId;
+PLcom/android/server/autofill/Session;->getUiForShowing()Lcom/android/server/autofill/ui/AutoFillUI;
+PLcom/android/server/autofill/Session;->isIgnoredLocked(Landroid/view/autofill/AutofillId;)Z
+PLcom/android/server/autofill/Session;->isSaveUiPending()Z
+PLcom/android/server/autofill/Session;->notifyUnavailableToClient()V
+PLcom/android/server/autofill/Session;->onFillRequestSuccess(ILandroid/service/autofill/FillResponse;ILjava/lang/String;)V
+PLcom/android/server/autofill/Session;->removeSelf()V
+PLcom/android/server/autofill/Session;->removeSelfLocked()V
+PLcom/android/server/autofill/Session;->requestNewFillResponseLocked(I)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>(Lcom/android/server/autofill/Session;Landroid/view/autofill/AutofillId;Lcom/android/server/autofill/ViewState$Listener;I)V
+PLcom/android/server/autofill/ViewState;->getAutofilledValue()Landroid/view/autofill/AutofillValue;
+PLcom/android/server/autofill/ViewState;->getCurrentValue()Landroid/view/autofill/AutofillValue;
+PLcom/android/server/autofill/ViewState;->maybeCallOnFillReady(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$CJSLmckRMp4fHqnN2ZN5WFtAFP8$3;->$m$0()V
+PLcom/android/server/autofill/ui/-$Lambda$CJSLmckRMp4fHqnN2ZN5WFtAFP8$3;-><init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/autofill/ui/-$Lambda$CJSLmckRMp4fHqnN2ZN5WFtAFP8$3;->run()V
+PLcom/android/server/autofill/ui/-$Lambda$CJSLmckRMp4fHqnN2ZN5WFtAFP8;->$m$0()V
+PLcom/android/server/autofill/ui/-$Lambda$CJSLmckRMp4fHqnN2ZN5WFtAFP8;-><init>(BLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/autofill/ui/-$Lambda$CJSLmckRMp4fHqnN2ZN5WFtAFP8;->run()V
+PLcom/android/server/autofill/ui/-$Lambda$TTOM-vgvIOJotO3pKgpKhg7oNlE;->$m$0()V
+PLcom/android/server/autofill/ui/-$Lambda$TTOM-vgvIOJotO3pKgpKhg7oNlE;->$m$1()V
+PLcom/android/server/autofill/ui/-$Lambda$TTOM-vgvIOJotO3pKgpKhg7oNlE;->$m$2()V
+PLcom/android/server/autofill/ui/-$Lambda$TTOM-vgvIOJotO3pKgpKhg7oNlE;->$m$3()V
+PLcom/android/server/autofill/ui/-$Lambda$TTOM-vgvIOJotO3pKgpKhg7oNlE;-><init>(BLjava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/autofill/ui/-$Lambda$TTOM-vgvIOJotO3pKgpKhg7oNlE;->run()V
+PLcom/android/server/autofill/ui/AutoFillUI;-><init>(Landroid/content/Context;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->clearCallback(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->destroyAll(ILandroid/view/autofill/IAutoFillManagerClient;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->destroyAllUiThread(ILandroid/view/autofill/IAutoFillManagerClient;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->destroySaveUiUiThread(ILandroid/view/autofill/IAutoFillManagerClient;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->filterFillUi(Ljava/lang/String;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)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
+PLcom/android/server/autofill/ui/AutoFillUI;->hideFillUi(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->hideFillUiUiThread(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->hideSaveUiUiThread(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$-com_android_server_autofill_ui_AutoFillUI_12395(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$-com_android_server_autofill_ui_AutoFillUI_12645(ILandroid/view/autofill/IAutoFillManagerClient;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$-com_android_server_autofill_ui_AutoFillUI_3226(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$-com_android_server_autofill_ui_AutoFillUI_3546(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$-com_android_server_autofill_ui_AutoFillUI_4552(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$-com_android_server_autofill_ui_AutoFillUI_4826(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Ljava/lang/String;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->setCallback(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/OverlayControl;-><init>(Landroid/content/Context;)V
+PLcom/android/server/backup/-$Lambda$UGPbw6RN8_4TeqlxQ94PEo_ieak;->$m$0()V
+PLcom/android/server/backup/-$Lambda$UGPbw6RN8_4TeqlxQ94PEo_ieak;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/backup/-$Lambda$UGPbw6RN8_4TeqlxQ94PEo_ieak;->run()V
+PLcom/android/server/backup/BackupManagerService$1;-><init>(Lcom/android/server/backup/BackupManagerService;)V
+PLcom/android/server/backup/BackupManagerService$2;-><init>(Lcom/android/server/backup/BackupManagerService;)V
+PLcom/android/server/backup/BackupManagerService$2;->onTransportBound(Lcom/android/internal/backup/IBackupTransport;)Z
+PLcom/android/server/backup/BackupManagerService$3;-><init>(Lcom/android/server/backup/BackupManagerService;)V
+PLcom/android/server/backup/BackupManagerService$4;-><init>(Lcom/android/server/backup/BackupManagerService;J)V
+PLcom/android/server/backup/BackupManagerService$4;->run()V
+PLcom/android/server/backup/BackupManagerService$8;-><init>(Lcom/android/server/backup/BackupManagerService;Landroid/content/ComponentName;Landroid/app/backup/ISelectBackupTransportCallback;)V
+PLcom/android/server/backup/BackupManagerService$8;->onSuccess(Ljava/lang/String;)V
+PLcom/android/server/backup/BackupManagerService$BackupHandler;-><init>(Lcom/android/server/backup/BackupManagerService;Landroid/os/Looper;)V
+PLcom/android/server/backup/BackupManagerService$BackupHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/backup/BackupManagerService$FullBackupEntry;-><init>(Lcom/android/server/backup/BackupManagerService;Ljava/lang/String;J)V
+PLcom/android/server/backup/BackupManagerService$FullBackupEntry;->compareTo(Lcom/android/server/backup/BackupManagerService$FullBackupEntry;)I
+PLcom/android/server/backup/BackupManagerService$FullBackupEntry;->compareTo(Ljava/lang/Object;)I
+PLcom/android/server/backup/BackupManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/backup/BackupManagerService$Lifecycle;->onStart()V
+PLcom/android/server/backup/BackupManagerService$Lifecycle;->onUnlockUser(I)V
+PLcom/android/server/backup/BackupManagerService$ProvisionedObserver;-><init>(Lcom/android/server/backup/BackupManagerService;Landroid/os/Handler;)V
+PLcom/android/server/backup/BackupManagerService$RunBackupReceiver;-><init>(Lcom/android/server/backup/BackupManagerService;)V
+PLcom/android/server/backup/BackupManagerService$RunBackupReceiver;-><init>(Lcom/android/server/backup/BackupManagerService;Lcom/android/server/backup/BackupManagerService$RunBackupReceiver;)V
+PLcom/android/server/backup/BackupManagerService$RunInitializeReceiver;-><init>(Lcom/android/server/backup/BackupManagerService;)V
+PLcom/android/server/backup/BackupManagerService$RunInitializeReceiver;-><init>(Lcom/android/server/backup/BackupManagerService;Lcom/android/server/backup/BackupManagerService$RunInitializeReceiver;)V
+PLcom/android/server/backup/BackupManagerService;->-get3(Lcom/android/server/backup/BackupManagerService;)Landroid/content/pm/PackageManager;
+PLcom/android/server/backup/BackupManagerService;->-get6(Lcom/android/server/backup/BackupManagerService;)Lcom/android/server/backup/TransportManager;
+PLcom/android/server/backup/BackupManagerService;->-wrap11(I)Z
+PLcom/android/server/backup/BackupManagerService;->-wrap17(Lcom/android/server/backup/BackupManagerService;Ljava/lang/String;)V
+PLcom/android/server/backup/BackupManagerService;->-wrap23(Lcom/android/server/backup/BackupManagerService;Ljava/lang/String;)V
+PLcom/android/server/backup/BackupManagerService;->-wrap25(Lcom/android/server/backup/BackupManagerService;)V
+PLcom/android/server/backup/BackupManagerService;->-wrap5(Landroid/content/pm/PackageInfo;)Z
+PLcom/android/server/backup/BackupManagerService;->-wrap9(I)Z
+PLcom/android/server/backup/BackupManagerService;-><init>(Landroid/content/Context;Lcom/android/server/backup/Trampoline;)V
+PLcom/android/server/backup/BackupManagerService;->addPackageParticipantsLocked([Ljava/lang/String;)V
+PLcom/android/server/backup/BackupManagerService;->appGetsFullBackup(Landroid/content/pm/PackageInfo;)Z
+PLcom/android/server/backup/BackupManagerService;->backupSettingMigrated(I)Z
+PLcom/android/server/backup/BackupManagerService;->enqueueFullBackup(Ljava/lang/String;J)V
+PLcom/android/server/backup/BackupManagerService;->getCurrentTransport()Ljava/lang/String;
+PLcom/android/server/backup/BackupManagerService;->initPackageTracking()V
+PLcom/android/server/backup/BackupManagerService;->isBackupEnabled()Z
+PLcom/android/server/backup/BackupManagerService;->lambda$-com_android_server_backup_BackupManagerService_56585()V
+PLcom/android/server/backup/BackupManagerService;->parseLeftoverJournals()V
+PLcom/android/server/backup/BackupManagerService;->readBackupEnableState(I)Z
+PLcom/android/server/backup/BackupManagerService;->removePackageFromSetLocked(Ljava/util/HashSet;Ljava/lang/String;)V
+PLcom/android/server/backup/BackupManagerService;->removePackageParticipantsLocked([Ljava/lang/String;I)V
+PLcom/android/server/backup/BackupManagerService;->scheduleNextFullBackupJob(J)V
+PLcom/android/server/backup/BackupManagerService;->selectBackupTransportAsync(Landroid/content/ComponentName;Landroid/app/backup/ISelectBackupTransportCallback;)V
+PLcom/android/server/backup/BackupManagerService;->setBackupEnabled(Z)V
+PLcom/android/server/backup/BackupManagerService;->updateStateForTransport(Ljava/lang/String;)V
+PLcom/android/server/backup/BackupManagerService;->writeBackupEnableState(ZI)V
+PLcom/android/server/backup/BackupManagerService;->writeFullBackupScheduleAsync()V
+PLcom/android/server/backup/FullBackupJob;->schedule(Landroid/content/Context;J)V
+PLcom/android/server/backup/KeyValueBackupJob;->cancel(Landroid/content/Context;)V
+PLcom/android/server/backup/Trampoline;-><init>(Landroid/content/Context;)V
+PLcom/android/server/backup/Trampoline;->createBackupManagerService()Lcom/android/server/backup/BackupManagerServiceInterface;
+PLcom/android/server/backup/Trampoline;->createService()Lcom/android/server/backup/BackupManagerServiceInterface;
+PLcom/android/server/backup/Trampoline;->getCurrentTransport()Ljava/lang/String;
+PLcom/android/server/backup/Trampoline;->getSuppressFile()Ljava/io/File;
+PLcom/android/server/backup/Trampoline;->initialize(I)V
+PLcom/android/server/backup/Trampoline;->isBackupDisabled()Z
+PLcom/android/server/backup/Trampoline;->isBackupEnabled()Z
+PLcom/android/server/backup/Trampoline;->isRefactoredServiceEnabled()Z
+PLcom/android/server/backup/Trampoline;->selectBackupTransportAsync(Landroid/content/ComponentName;Landroid/app/backup/ISelectBackupTransportCallback;)V
+PLcom/android/server/backup/Trampoline;->setBackupEnabled(Z)V
+PLcom/android/server/backup/TransportManager$RebindOnTimeoutHandler;-><init>(Lcom/android/server/backup/TransportManager;Landroid/os/Looper;)V
+PLcom/android/server/backup/TransportManager$TransportConnection;->-wrap0(Lcom/android/server/backup/TransportManager$TransportConnection;)Lcom/android/internal/backup/IBackupTransport;
+PLcom/android/server/backup/TransportManager$TransportConnection;->-wrap2(Lcom/android/server/backup/TransportManager$TransportConnection;Landroid/app/backup/SelectBackupTransportCallback;)V
+PLcom/android/server/backup/TransportManager$TransportConnection;->-wrap3(Lcom/android/server/backup/TransportManager$TransportConnection;)V
+PLcom/android/server/backup/TransportManager$TransportConnection;-><init>(Lcom/android/server/backup/TransportManager;Landroid/content/ComponentName;)V
+PLcom/android/server/backup/TransportManager$TransportConnection;-><init>(Lcom/android/server/backup/TransportManager;Landroid/content/ComponentName;Lcom/android/server/backup/TransportManager$TransportConnection;)V
+PLcom/android/server/backup/TransportManager$TransportConnection;->addListener(Landroid/app/backup/SelectBackupTransportCallback;)V
+PLcom/android/server/backup/TransportManager$TransportConnection;->bindIfUnbound()V
+PLcom/android/server/backup/TransportManager$TransportConnection;->getBinder()Lcom/android/internal/backup/IBackupTransport;
+PLcom/android/server/backup/TransportManager$TransportConnection;->getRebindTimeout()J
+PLcom/android/server/backup/TransportManager$TransportConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/backup/TransportManager$TransportConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
+PLcom/android/server/backup/TransportManager$TransportConnection;->scheduleRebindTimeout(Landroid/content/ComponentName;)V
+PLcom/android/server/backup/TransportManager;->-get0(Lcom/android/server/backup/TransportManager;)Ljava/util/Map;
+PLcom/android/server/backup/TransportManager;->-get1(Lcom/android/server/backup/TransportManager;)Landroid/content/Context;
+PLcom/android/server/backup/TransportManager;->-get2(Lcom/android/server/backup/TransportManager;)Landroid/os/Handler;
+PLcom/android/server/backup/TransportManager;->-get3(Lcom/android/server/backup/TransportManager;)Lcom/android/server/backup/TransportManager$TransportBoundListener;
+PLcom/android/server/backup/TransportManager;->-get4(Lcom/android/server/backup/TransportManager;)Ljava/lang/Object;
+PLcom/android/server/backup/TransportManager;-><init>(Landroid/content/Context;Ljava/util/Set;Ljava/lang/String;Lcom/android/server/backup/TransportManager$TransportBoundListener;Landroid/os/Looper;)V
+PLcom/android/server/backup/TransportManager;->bindToAllInternal(Ljava/lang/String;[Ljava/lang/String;)V
+PLcom/android/server/backup/TransportManager;->bindToTransport(Landroid/content/ComponentName;Landroid/content/ServiceConnection;)Z
+PLcom/android/server/backup/TransportManager;->ensureTransportReady(Landroid/content/ComponentName;Landroid/app/backup/SelectBackupTransportCallback;)V
+PLcom/android/server/backup/TransportManager;->getCurrentTransportName()Ljava/lang/String;
+PLcom/android/server/backup/TransportManager;->getTransportBinder(Ljava/lang/String;)Lcom/android/internal/backup/IBackupTransport;
+PLcom/android/server/backup/TransportManager;->isTransportTrusted(Landroid/content/ComponentName;)Z
+PLcom/android/server/backup/TransportManager;->log_verbose(Ljava/lang/String;)V
+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;->registerAllTransports()V
+PLcom/android/server/backup/TransportManager;->selectTransport(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/backup/TransportManager;->tryBindTransport(Landroid/content/ComponentName;)V
+PLcom/android/server/camera/CameraServiceProxy$1;-><init>(Lcom/android/server/camera/CameraServiceProxy;)V
+PLcom/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;)V
+PLcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;-><init>(ILjava/lang/String;)V
+PLcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;->markCompleted()V
+PLcom/android/server/camera/CameraServiceProxy;->-wrap0(I)Ljava/lang/String;
+PLcom/android/server/camera/CameraServiceProxy;->-wrap1(I)Ljava/lang/String;
+PLcom/android/server/camera/CameraServiceProxy;->-wrap4(Lcom/android/server/camera/CameraServiceProxy;Ljava/lang/String;IILjava/lang/String;)V
+PLcom/android/server/camera/CameraServiceProxy;-><init>(Landroid/content/Context;)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;->getEnabledUserHandles(I)Ljava/util/Set;
+PLcom/android/server/camera/CameraServiceProxy;->notifyMediaserverLocked(ILjava/util/Set;)Z
+PLcom/android/server/camera/CameraServiceProxy;->notifyNfcService(Z)V
+PLcom/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;)V
+PLcom/android/server/camera/CameraStatsJobService;->schedule(Landroid/content/Context;)V
+PLcom/android/server/clipboard/ClipboardService$ClipboardImpl;-><init>(Lcom/android/server/clipboard/ClipboardService;)V
+PLcom/android/server/clipboard/ClipboardService$ClipboardImpl;-><init>(Lcom/android/server/clipboard/ClipboardService;Lcom/android/server/clipboard/ClipboardService$ClipboardImpl;)V
+PLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->addPrimaryClipChangedListener(Landroid/content/IOnPrimaryClipChangedListener;Ljava/lang/String;)V
+PLcom/android/server/clipboard/ClipboardService$ClipboardImpl;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+PLcom/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
+PLcom/android/server/clipboard/ClipboardService;->-wrap0(Lcom/android/server/clipboard/ClipboardService;ILjava/lang/String;I)Z
+PLcom/android/server/clipboard/ClipboardService;->-wrap1(Lcom/android/server/clipboard/ClipboardService;)Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;
+PLcom/android/server/clipboard/ClipboardService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/clipboard/ClipboardService;->getClipboard()Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;
+PLcom/android/server/clipboard/ClipboardService;->getClipboard(I)Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;
+PLcom/android/server/clipboard/ClipboardService;->onStart()V
+PLcom/android/server/companion/-$Lambda$AGIrYO-M2umJsGqqjbn8lgb57iM;->$m$1(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/companion/-$Lambda$AGIrYO-M2umJsGqqjbn8lgb57iM;-><init>(B)V
+PLcom/android/server/companion/-$Lambda$AGIrYO-M2umJsGqqjbn8lgb57iM;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/companion/CompanionDeviceManagerService$1;-><init>(Lcom/android/server/companion/CompanionDeviceManagerService;)V
+PLcom/android/server/companion/CompanionDeviceManagerService$1;->onPackageModified(Ljava/lang/String;)V
+PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;-><init>(Lcom/android/server/companion/CompanionDeviceManagerService;)V
+PLcom/android/server/companion/CompanionDeviceManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/companion/CompanionDeviceManagerService;->lambda$-com_android_server_companion_CompanionDeviceManagerService_22200(Ljava/lang/Integer;)Landroid/util/AtomicFile;
+PLcom/android/server/companion/CompanionDeviceManagerService;->onStart()V
+PLcom/android/server/companion/CompanionDeviceManagerService;->registerPackageMonitor()V
+PLcom/android/server/connectivity/-$Lambda$MsbVMSDQhSjxBVLOF10aov6ySH4;->$m$0(Ljava/lang/Object;)I
+PLcom/android/server/connectivity/-$Lambda$MsbVMSDQhSjxBVLOF10aov6ySH4;-><init>()V
+PLcom/android/server/connectivity/-$Lambda$MsbVMSDQhSjxBVLOF10aov6ySH4;->applyAsInt(Ljava/lang/Object;)I
+PLcom/android/server/connectivity/-$Lambda$wTD5_jk703INH0KD5mtMJL_CwnI;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/connectivity/DataConnectionStats$1;-><init>(Lcom/android/server/connectivity/DataConnectionStats;)V
+PLcom/android/server/connectivity/DataConnectionStats;-><init>(Landroid/content/Context;)V
+PLcom/android/server/connectivity/DataConnectionStats;->notePhoneDataConnectionState()V
+PLcom/android/server/connectivity/DataConnectionStats;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/connectivity/DataConnectionStats;->startMonitoring()V
+PLcom/android/server/connectivity/DataConnectionStats;->updateSimState(Landroid/content/Intent;)V
+PLcom/android/server/connectivity/IpConnectivityMetrics$Impl;-><init>(Lcom/android/server/connectivity/IpConnectivityMetrics;)V
+PLcom/android/server/connectivity/IpConnectivityMetrics$Impl;->enforceConnectivityInternalPermission()V
+PLcom/android/server/connectivity/IpConnectivityMetrics$Impl;->enforcePermission(Ljava/lang/String;)V
+PLcom/android/server/connectivity/IpConnectivityMetrics$Impl;->logEvent(Landroid/net/ConnectivityMetricsEvent;)I
+PLcom/android/server/connectivity/IpConnectivityMetrics;->-wrap0(Lcom/android/server/connectivity/IpConnectivityMetrics;Landroid/net/ConnectivityMetricsEvent;)I
+PLcom/android/server/connectivity/IpConnectivityMetrics;-><init>(Landroid/content/Context;)V
+PLcom/android/server/connectivity/IpConnectivityMetrics;-><init>(Landroid/content/Context;Ljava/util/function/ToIntFunction;)V
+PLcom/android/server/connectivity/IpConnectivityMetrics;->append(Landroid/net/ConnectivityMetricsEvent;)I
+PLcom/android/server/connectivity/IpConnectivityMetrics;->bufferCapacity()I
+PLcom/android/server/connectivity/IpConnectivityMetrics;->initBuffer()V
+PLcom/android/server/connectivity/IpConnectivityMetrics;->isRateLimited(Landroid/net/ConnectivityMetricsEvent;)Z
+PLcom/android/server/connectivity/IpConnectivityMetrics;->lambda$-com_android_server_connectivity_IpConnectivityMetrics_10868(Landroid/content/Context;)I
+PLcom/android/server/connectivity/IpConnectivityMetrics;->makeRateLimitingBuckets()Landroid/util/ArrayMap;
+PLcom/android/server/connectivity/IpConnectivityMetrics;->onBootPhase(I)V
+PLcom/android/server/connectivity/IpConnectivityMetrics;->onStart()V
+PLcom/android/server/connectivity/KeepaliveTracker;-><init>(Landroid/os/Handler;)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/LingerMonitor;-><init>(Landroid/content/Context;Lcom/android/server/connectivity/NetworkNotificationManager;IJ)V
+PLcom/android/server/connectivity/LingerMonitor;->makeTransportToNameMap()Ljava/util/HashMap;
+PLcom/android/server/connectivity/MockableSystemProperties;-><init>()V
+PLcom/android/server/connectivity/MockableSystemProperties;->get(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/connectivity/MockableSystemProperties;->getBoolean(Ljava/lang/String;Z)Z
+PLcom/android/server/connectivity/MockableSystemProperties;->getInt(Ljava/lang/String;I)I
+PLcom/android/server/connectivity/MockableSystemProperties;->set(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/connectivity/Nat464Xlat;->requiresClat(Lcom/android/server/connectivity/NetworkAgentInfo;)Z
+PLcom/android/server/connectivity/NetdEventListenerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/connectivity/NetdEventListenerService;-><init>(Landroid/net/ConnectivityManager;)V
+PLcom/android/server/connectivity/NetdEventListenerService;->getTransports(I)J
+PLcom/android/server/connectivity/NetdEventListenerService;->makeConnectStats(I)Landroid/net/metrics/ConnectStats;
+PLcom/android/server/connectivity/NetdEventListenerService;->makeDnsEvent(I)Landroid/net/metrics/DnsEvent;
+PLcom/android/server/connectivity/NetworkAgentInfo;->-getandroid-net-NetworkRequest$TypeSwitchesValues()[I
+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;ILandroid/content/Context;Landroid/os/Handler;Landroid/net/NetworkMisc;Landroid/net/NetworkRequest;Lcom/android/server/ConnectivityService;)V
+PLcom/android/server/connectivity/NetworkAgentInfo;->addRequest(Landroid/net/NetworkRequest;)Z
+PLcom/android/server/connectivity/NetworkAgentInfo;->dumpLingerTimers(Ljava/io/PrintWriter;)V
+PLcom/android/server/connectivity/NetworkAgentInfo;->ignoreWifiUnvalidationPenalty()Z
+PLcom/android/server/connectivity/NetworkAgentInfo;->maybeStopClat()V
+PLcom/android/server/connectivity/NetworkAgentInfo;->name()Ljava/lang/String;
+PLcom/android/server/connectivity/NetworkAgentInfo;->numBackgroundNetworkRequests()I
+PLcom/android/server/connectivity/NetworkAgentInfo;->removeRequest(I)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;->updateClat(Landroid/os/INetworkManagementService;)V
+PLcom/android/server/connectivity/NetworkAgentInfo;->updateRequestCounts(ZLandroid/net/NetworkRequest;)V
+PLcom/android/server/connectivity/NetworkMonitor$1ProbeThread;-><init>(Lcom/android/server/connectivity/NetworkMonitor;ZLandroid/net/ProxyInfo;Ljava/net/URL;Ljava/net/URL;Ljava/util/concurrent/CountDownLatch;)V
+PLcom/android/server/connectivity/NetworkMonitor$1ProbeThread;->result()Lcom/android/server/connectivity/NetworkMonitor$CaptivePortalProbeResult;
+PLcom/android/server/connectivity/NetworkMonitor$1ProbeThread;->run()V
+PLcom/android/server/connectivity/NetworkMonitor$CaptivePortalProbeResult;-><init>(I)V
+PLcom/android/server/connectivity/NetworkMonitor$CaptivePortalProbeResult;-><init>(ILjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/connectivity/NetworkMonitor$CaptivePortalProbeResult;->isPortal()Z
+PLcom/android/server/connectivity/NetworkMonitor$CaptivePortalProbeResult;->isSuccessful()Z
+PLcom/android/server/connectivity/NetworkMonitor$CaptivePortalState;-><init>(Lcom/android/server/connectivity/NetworkMonitor;)V
+PLcom/android/server/connectivity/NetworkMonitor$CaptivePortalState;-><init>(Lcom/android/server/connectivity/NetworkMonitor;Lcom/android/server/connectivity/NetworkMonitor$CaptivePortalState;)V
+PLcom/android/server/connectivity/NetworkMonitor$DefaultState;-><init>(Lcom/android/server/connectivity/NetworkMonitor;)V
+PLcom/android/server/connectivity/NetworkMonitor$DefaultState;-><init>(Lcom/android/server/connectivity/NetworkMonitor;Lcom/android/server/connectivity/NetworkMonitor$DefaultState;)V
+PLcom/android/server/connectivity/NetworkMonitor$DefaultState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/connectivity/NetworkMonitor$EvaluatingState;-><init>(Lcom/android/server/connectivity/NetworkMonitor;)V
+PLcom/android/server/connectivity/NetworkMonitor$EvaluatingState;-><init>(Lcom/android/server/connectivity/NetworkMonitor;Lcom/android/server/connectivity/NetworkMonitor$EvaluatingState;)V
+PLcom/android/server/connectivity/NetworkMonitor$EvaluatingState;->enter()V
+PLcom/android/server/connectivity/NetworkMonitor$EvaluatingState;->exit()V
+PLcom/android/server/connectivity/NetworkMonitor$EvaluatingState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/connectivity/NetworkMonitor$EvaluationResult;-><init>(Ljava/lang/String;IZ)V
+PLcom/android/server/connectivity/NetworkMonitor$MaybeNotifyState;-><init>(Lcom/android/server/connectivity/NetworkMonitor;)V
+PLcom/android/server/connectivity/NetworkMonitor$MaybeNotifyState;-><init>(Lcom/android/server/connectivity/NetworkMonitor;Lcom/android/server/connectivity/NetworkMonitor$MaybeNotifyState;)V
+PLcom/android/server/connectivity/NetworkMonitor$MaybeNotifyState;->exit()V
+PLcom/android/server/connectivity/NetworkMonitor$OneAddressPerFamilyNetwork;-><init>(Landroid/net/Network;)V
+PLcom/android/server/connectivity/NetworkMonitor$OneAddressPerFamilyNetwork;->getAllByName(Ljava/lang/String;)[Ljava/net/InetAddress;
+PLcom/android/server/connectivity/NetworkMonitor$ValidatedState;-><init>(Lcom/android/server/connectivity/NetworkMonitor;)V
+PLcom/android/server/connectivity/NetworkMonitor$ValidatedState;-><init>(Lcom/android/server/connectivity/NetworkMonitor;Lcom/android/server/connectivity/NetworkMonitor$ValidatedState;)V
+PLcom/android/server/connectivity/NetworkMonitor$ValidatedState;->enter()V
+PLcom/android/server/connectivity/NetworkMonitor$ValidationStage;-><init>(Ljava/lang/String;IZ)V
+PLcom/android/server/connectivity/NetworkMonitor;->-get10(Lcom/android/server/connectivity/NetworkMonitor;)I
+PLcom/android/server/connectivity/NetworkMonitor;->-get12(Lcom/android/server/connectivity/NetworkMonitor;)Lcom/android/server/connectivity/NetworkAgentInfo;
+PLcom/android/server/connectivity/NetworkMonitor;->-get13(Lcom/android/server/connectivity/NetworkMonitor;)I
+PLcom/android/server/connectivity/NetworkMonitor;->-get14(Lcom/android/server/connectivity/NetworkMonitor;)I
+PLcom/android/server/connectivity/NetworkMonitor;->-get15(Lcom/android/server/connectivity/NetworkMonitor;)Z
+PLcom/android/server/connectivity/NetworkMonitor;->-get16(Lcom/android/server/connectivity/NetworkMonitor;)Lcom/android/internal/util/State;
+PLcom/android/server/connectivity/NetworkMonitor;->-get17(Lcom/android/server/connectivity/NetworkMonitor;)I
+PLcom/android/server/connectivity/NetworkMonitor;->-get2(Lcom/android/server/connectivity/NetworkMonitor;)Landroid/os/Handler;
+PLcom/android/server/connectivity/NetworkMonitor;->-get4(Lcom/android/server/connectivity/NetworkMonitor;)Landroid/net/NetworkRequest;
+PLcom/android/server/connectivity/NetworkMonitor;->-get6(Lcom/android/server/connectivity/NetworkMonitor;)Lcom/android/internal/util/State;
+PLcom/android/server/connectivity/NetworkMonitor;->-get7(Lcom/android/server/connectivity/NetworkMonitor;)Landroid/net/util/Stopwatch;
+PLcom/android/server/connectivity/NetworkMonitor;->-set3(Lcom/android/server/connectivity/NetworkMonitor;I)I
+PLcom/android/server/connectivity/NetworkMonitor;->-set7(Lcom/android/server/connectivity/NetworkMonitor;I)I
+PLcom/android/server/connectivity/NetworkMonitor;->-wrap0(Lcom/android/server/connectivity/NetworkMonitor;Landroid/net/ProxyInfo;Ljava/net/URL;I)Lcom/android/server/connectivity/NetworkMonitor$CaptivePortalProbeResult;
+PLcom/android/server/connectivity/NetworkMonitor;->-wrap1(Lcom/android/server/connectivity/NetworkMonitor;)Lcom/android/server/connectivity/NetworkMonitor$ValidationStage;
+PLcom/android/server/connectivity/NetworkMonitor;->-wrap2(Lcom/android/server/connectivity/NetworkMonitor;Lcom/android/server/connectivity/NetworkMonitor$ValidationStage;Lcom/android/server/connectivity/NetworkMonitor$EvaluationResult;)I
+PLcom/android/server/connectivity/NetworkMonitor;->-wrap3(Lcom/android/server/connectivity/NetworkMonitor;I)V
+PLcom/android/server/connectivity/NetworkMonitor;->-wrap4(Lcom/android/server/connectivity/NetworkMonitor;I)V
+PLcom/android/server/connectivity/NetworkMonitor;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkRequest;)V
+PLcom/android/server/connectivity/NetworkMonitor;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/connectivity/NetworkAgentInfo;Landroid/net/NetworkRequest;Landroid/net/metrics/IpConnectivityLog;)V
+PLcom/android/server/connectivity/NetworkMonitor;->getCaptivePortalServerHttpUrl(Landroid/content/Context;)Ljava/lang/String;
+PLcom/android/server/connectivity/NetworkMonitor;->getCaptivePortalServerHttpsUrl(Landroid/content/Context;)Ljava/lang/String;
+PLcom/android/server/connectivity/NetworkMonitor;->getCaptivePortalUserAgent(Landroid/content/Context;)Ljava/lang/String;
+PLcom/android/server/connectivity/NetworkMonitor;->getSetting(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/connectivity/NetworkMonitor;->getValidationLogs()Landroid/util/LocalLog$ReadOnlyLocalLog;
+PLcom/android/server/connectivity/NetworkMonitor;->isCaptivePortal()Lcom/android/server/connectivity/NetworkMonitor$CaptivePortalProbeResult;
+PLcom/android/server/connectivity/NetworkMonitor;->log(Ljava/lang/String;)V
+PLcom/android/server/connectivity/NetworkMonitor;->logNetworkEvent(I)V
+PLcom/android/server/connectivity/NetworkMonitor;->logValidationProbe(JII)V
+PLcom/android/server/connectivity/NetworkMonitor;->makeCaptivePortalFallbackUrls(Landroid/content/Context;)[Ljava/net/URL;
+PLcom/android/server/connectivity/NetworkMonitor;->makeURL(Ljava/lang/String;)Ljava/net/URL;
+PLcom/android/server/connectivity/NetworkMonitor;->maybeLogEvaluationResult(I)V
+PLcom/android/server/connectivity/NetworkMonitor;->networkEventType(Lcom/android/server/connectivity/NetworkMonitor$ValidationStage;Lcom/android/server/connectivity/NetworkMonitor$EvaluationResult;)I
+PLcom/android/server/connectivity/NetworkMonitor;->sendDnsAndHttpProbes(Landroid/net/ProxyInfo;Ljava/net/URL;I)Lcom/android/server/connectivity/NetworkMonitor$CaptivePortalProbeResult;
+PLcom/android/server/connectivity/NetworkMonitor;->sendDnsProbe(Ljava/lang/String;)V
+PLcom/android/server/connectivity/NetworkMonitor;->sendHttpProbe(Ljava/net/URL;I)Lcom/android/server/connectivity/NetworkMonitor$CaptivePortalProbeResult;
+PLcom/android/server/connectivity/NetworkMonitor;->sendNetworkConditionsBroadcast(ZZJJ)V
+PLcom/android/server/connectivity/NetworkMonitor;->sendParallelHttpProbes(Landroid/net/ProxyInfo;Ljava/net/URL;Ljava/net/URL;)Lcom/android/server/connectivity/NetworkMonitor$CaptivePortalProbeResult;
+PLcom/android/server/connectivity/NetworkMonitor;->validationLog(ILjava/lang/Object;Ljava/lang/String;)V
+PLcom/android/server/connectivity/NetworkMonitor;->validationLog(Ljava/lang/String;)V
+PLcom/android/server/connectivity/NetworkMonitor;->validationStage()Lcom/android/server/connectivity/NetworkMonitor$ValidationStage;
+PLcom/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/PacManager$1;-><init>(Lcom/android/server/connectivity/PacManager;)V
+PLcom/android/server/connectivity/PacManager$PacRefreshIntentReceiver;-><init>(Lcom/android/server/connectivity/PacManager;)V
+PLcom/android/server/connectivity/PacManager;-><init>(Landroid/content/Context;Landroid/os/Handler;I)V
+PLcom/android/server/connectivity/PermissionMonitor$1;-><init>(Lcom/android/server/connectivity/PermissionMonitor;)V
+PLcom/android/server/connectivity/PermissionMonitor;->-wrap0(Lcom/android/server/connectivity/PermissionMonitor;Ljava/lang/String;I)V
+PLcom/android/server/connectivity/PermissionMonitor;->-wrap1(Lcom/android/server/connectivity/PermissionMonitor;I)V
+PLcom/android/server/connectivity/PermissionMonitor;-><init>(Landroid/content/Context;Landroid/os/INetworkManagementService;)V
+PLcom/android/server/connectivity/PermissionMonitor;->hasRestrictedNetworkPermission(Landroid/content/pm/PackageInfo;)Z
+PLcom/android/server/connectivity/PermissionMonitor;->highestPermissionForUid(Ljava/lang/Boolean;Ljava/lang/String;)Ljava/lang/Boolean;
+PLcom/android/server/connectivity/PermissionMonitor;->log(Ljava/lang/String;)V
+PLcom/android/server/connectivity/PermissionMonitor;->onAppAdded(Ljava/lang/String;I)V
+PLcom/android/server/connectivity/PermissionMonitor;->onAppRemoved(I)V
+PLcom/android/server/connectivity/Tethering$3;-><init>(Lcom/android/server/connectivity/Tethering;Ljava/lang/String;)V
+PLcom/android/server/connectivity/Tethering$3;->updateInterfaceState(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;II)V
+PLcom/android/server/connectivity/Tethering$3;->updateLinkProperties(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;Landroid/net/LinkProperties;)V
+PLcom/android/server/connectivity/Tethering$StateReceiver;-><init>(Lcom/android/server/connectivity/Tethering;)V
+PLcom/android/server/connectivity/Tethering$StateReceiver;-><init>(Lcom/android/server/connectivity/Tethering;Lcom/android/server/connectivity/Tethering$StateReceiver;)V
+PLcom/android/server/connectivity/Tethering$StateReceiver;->handleConnectivityAction(Landroid/content/Intent;)V
+PLcom/android/server/connectivity/Tethering$StateReceiver;->handleUsbAction(Landroid/content/Intent;)V
+PLcom/android/server/connectivity/Tethering$StateReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM$ErrorState;-><init>(Lcom/android/server/connectivity/Tethering$TetherMasterSM;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM$InitialState;-><init>(Lcom/android/server/connectivity/Tethering$TetherMasterSM;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM$InitialState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/connectivity/Tethering$TetherMasterSM$OffloadWrapper;-><init>(Lcom/android/server/connectivity/Tethering$TetherMasterSM;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM$OffloadWrapper;->excludeDownstreamInterface(Ljava/lang/String;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM$OffloadWrapper;->sendOffloadExemptPrefixes()V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM$OffloadWrapper;->sendOffloadExemptPrefixes(Ljava/util/Set;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM$SetDnsForwardersErrorState;-><init>(Lcom/android/server/connectivity/Tethering$TetherMasterSM;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM$SetIpForwardingDisabledErrorState;-><init>(Lcom/android/server/connectivity/Tethering$TetherMasterSM;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM$SetIpForwardingEnabledErrorState;-><init>(Lcom/android/server/connectivity/Tethering$TetherMasterSM;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM$StartTetheringErrorState;-><init>(Lcom/android/server/connectivity/Tethering$TetherMasterSM;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM$StopTetheringErrorState;-><init>(Lcom/android/server/connectivity/Tethering$TetherMasterSM;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM$TetherModeAliveState;-><init>(Lcom/android/server/connectivity/Tethering$TetherMasterSM;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM;->-get1(Lcom/android/server/connectivity/Tethering$TetherMasterSM;)Ljava/util/ArrayList;
+PLcom/android/server/connectivity/Tethering$TetherMasterSM;->-wrap1(Lcom/android/server/connectivity/Tethering$TetherMasterSM;Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM;-><init>(Lcom/android/server/connectivity/Tethering;Ljava/lang/String;Landroid/os/Looper;)V
+PLcom/android/server/connectivity/Tethering$TetherMasterSM;->handleInterfaceServingStateInactive(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;)V
+PLcom/android/server/connectivity/Tethering$TetherState;-><init>(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;)V
+PLcom/android/server/connectivity/Tethering;->-get10(Lcom/android/server/connectivity/Tethering;)Lcom/android/internal/util/StateMachine;
+PLcom/android/server/connectivity/Tethering;->-get11(Lcom/android/server/connectivity/Tethering;)Lcom/android/server/connectivity/tethering/UpstreamNetworkMonitor;
+PLcom/android/server/connectivity/Tethering;->-get3(Lcom/android/server/connectivity/Tethering;)Ljava/util/HashSet;
+PLcom/android/server/connectivity/Tethering;->-get4(Lcom/android/server/connectivity/Tethering;)Landroid/net/util/SharedLog;
+PLcom/android/server/connectivity/Tethering;->-get6(Lcom/android/server/connectivity/Tethering;)Lcom/android/server/connectivity/tethering/OffloadController;
+PLcom/android/server/connectivity/Tethering;->-get7(Lcom/android/server/connectivity/Tethering;)Ljava/lang/Object;
+PLcom/android/server/connectivity/Tethering;->-get8(Lcom/android/server/connectivity/Tethering;)Z
+PLcom/android/server/connectivity/Tethering;->-set1(Lcom/android/server/connectivity/Tethering;Z)Z
+PLcom/android/server/connectivity/Tethering;->-set2(Lcom/android/server/connectivity/Tethering;Z)Z
+PLcom/android/server/connectivity/Tethering;->-wrap13(Lcom/android/server/connectivity/Tethering;)V
+PLcom/android/server/connectivity/Tethering;->-wrap6(Lcom/android/server/connectivity/Tethering;Lcom/android/internal/util/State;I)V
+PLcom/android/server/connectivity/Tethering;->-wrap8(Lcom/android/server/connectivity/Tethering;Ljava/lang/String;Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;II)V
+PLcom/android/server/connectivity/Tethering;->-wrap9(Lcom/android/server/connectivity/Tethering;Ljava/lang/String;Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;Landroid/net/LinkProperties;)V
+PLcom/android/server/connectivity/Tethering;-><init>(Landroid/content/Context;Landroid/os/INetworkManagementService;Landroid/net/INetworkStatsService;Landroid/net/INetworkPolicyManager;Landroid/os/Looper;Lcom/android/server/connectivity/MockableSystemProperties;Lcom/android/server/connectivity/tethering/TetheringDependencies;)V
+PLcom/android/server/connectivity/Tethering;->argsContain([Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/connectivity/Tethering;->clearTetheredNotification()V
+PLcom/android/server/connectivity/Tethering;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/connectivity/Tethering;->getConnectivityManager()Landroid/net/ConnectivityManager;
+PLcom/android/server/connectivity/Tethering;->hasTetherableConfiguration()Z
+PLcom/android/server/connectivity/Tethering;->ifaceNameToType(Ljava/lang/String;)I
+PLcom/android/server/connectivity/Tethering;->interfaceAdded(Ljava/lang/String;)V
+PLcom/android/server/connectivity/Tethering;->interfaceLinkStateChanged(Ljava/lang/String;Z)V
+PLcom/android/server/connectivity/Tethering;->interfaceRemoved(Ljava/lang/String;)V
+PLcom/android/server/connectivity/Tethering;->interfaceStatusChanged(Ljava/lang/String;Z)V
+PLcom/android/server/connectivity/Tethering;->logMessage(Lcom/android/internal/util/State;I)V
+PLcom/android/server/connectivity/Tethering;->makeControlCallback(Ljava/lang/String;)Lcom/android/server/connectivity/tethering/IControlsTethering;
+PLcom/android/server/connectivity/Tethering;->maybeTrackNewInterfaceLocked(Ljava/lang/String;)V
+PLcom/android/server/connectivity/Tethering;->maybeTrackNewInterfaceLocked(Ljava/lang/String;I)V
+PLcom/android/server/connectivity/Tethering;->notifyInterfaceStateChange(Ljava/lang/String;Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;II)V
+PLcom/android/server/connectivity/Tethering;->notifyLinkPropertiesChanged(Ljava/lang/String;Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;Landroid/net/LinkProperties;)V
+PLcom/android/server/connectivity/Tethering;->sendTetherStateChangedBroadcast()V
+PLcom/android/server/connectivity/Tethering;->stopTrackingInterfaceLocked(Ljava/lang/String;)V
+PLcom/android/server/connectivity/Tethering;->updateConfiguration()V
+PLcom/android/server/connectivity/Tethering;->upstreamWanted()Z
+PLcom/android/server/connectivity/Vpn$1;-><init>(Lcom/android/server/connectivity/Vpn;)V
+PLcom/android/server/connectivity/Vpn$2;-><init>(Lcom/android/server/connectivity/Vpn;)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;-><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
+PLcom/android/server/connectivity/Vpn;->enforceControlPermission()V
+PLcom/android/server/connectivity/Vpn;->enforceControlPermissionOrInternalCaller()V
+PLcom/android/server/connectivity/Vpn;->getAlwaysOnPackage()Ljava/lang/String;
+PLcom/android/server/connectivity/Vpn;->getAppUid(Ljava/lang/String;I)I
+PLcom/android/server/connectivity/Vpn;->getUnderlyingNetworks()[Landroid/net/Network;
+PLcom/android/server/connectivity/Vpn;->getVpnConfig()Lcom/android/internal/net/VpnConfig;
+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;->loadAlwaysOnPackage()V
+PLcom/android/server/connectivity/Vpn;->maybeRegisterPackageChangeReceiverLocked(Ljava/lang/String;)V
+PLcom/android/server/connectivity/Vpn;->setAllowOnlyVpnForUids(ZLjava/util/Collection;)Z
+PLcom/android/server/connectivity/Vpn;->setAlwaysOnPackageInternal(Ljava/lang/String;Z)Z
+PLcom/android/server/connectivity/Vpn;->setVpnForcedLocked(Z)V
+PLcom/android/server/connectivity/Vpn;->setVpnForcedWithExemptionsLocked(ZLjava/util/List;)V
+PLcom/android/server/connectivity/Vpn;->startAlwaysOnVpn()Z
+PLcom/android/server/connectivity/Vpn;->unregisterPackageChangeReceiverLocked()V
+PLcom/android/server/connectivity/Vpn;->updateAlwaysOnNotification(Landroid/net/NetworkInfo$DetailedState;)V
+PLcom/android/server/connectivity/tethering/-$Lambda$M3tXj934m-dXV_AxdqUj05-IfpI;->$m$0()V
+PLcom/android/server/connectivity/tethering/-$Lambda$M3tXj934m-dXV_AxdqUj05-IfpI;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/connectivity/tethering/-$Lambda$M3tXj934m-dXV_AxdqUj05-IfpI;->run()V
+PLcom/android/server/connectivity/tethering/IControlsTethering;-><init>()V
+PLcom/android/server/connectivity/tethering/IControlsTethering;->getStateString(I)Ljava/lang/String;
+PLcom/android/server/connectivity/tethering/IPv6TetheringCoordinator;-><init>(Ljava/util/ArrayList;Landroid/net/util/SharedLog;)V
+PLcom/android/server/connectivity/tethering/IPv6TetheringCoordinator;->findDownstream(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;)Lcom/android/server/connectivity/tethering/IPv6TetheringCoordinator$Downstream;
+PLcom/android/server/connectivity/tethering/IPv6TetheringCoordinator;->generateUniqueLocalPrefix()[B
+PLcom/android/server/connectivity/tethering/IPv6TetheringCoordinator;->removeActiveDownstream(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;)V
+PLcom/android/server/connectivity/tethering/IPv6TetheringCoordinator;->stopIPv6TetheringOn(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;)V
+PLcom/android/server/connectivity/tethering/OffloadController$OffloadTetheringStatsProvider;-><init>(Lcom/android/server/connectivity/tethering/OffloadController;)V
+PLcom/android/server/connectivity/tethering/OffloadController$OffloadTetheringStatsProvider;-><init>(Lcom/android/server/connectivity/tethering/OffloadController;Lcom/android/server/connectivity/tethering/OffloadController$OffloadTetheringStatsProvider;)V
+PLcom/android/server/connectivity/tethering/OffloadController$OffloadTetheringStatsProvider;->lambda$-com_android_server_connectivity_tethering_OffloadController$OffloadTetheringStatsProvider_9732()V
+PLcom/android/server/connectivity/tethering/OffloadController;->-get0(Lcom/android/server/connectivity/tethering/OffloadController;)Ljava/util/concurrent/ConcurrentHashMap;
+PLcom/android/server/connectivity/tethering/OffloadController;->-get1(Lcom/android/server/connectivity/tethering/OffloadController;)Landroid/os/Handler;
+PLcom/android/server/connectivity/tethering/OffloadController;->-wrap3(Lcom/android/server/connectivity/tethering/OffloadController;)V
+PLcom/android/server/connectivity/tethering/OffloadController;-><init>(Landroid/os/Handler;Lcom/android/server/connectivity/tethering/OffloadHardwareInterface;Landroid/content/ContentResolver;Landroid/os/INetworkManagementService;Landroid/net/util/SharedLog;)V
+PLcom/android/server/connectivity/tethering/OffloadController;->currentUpstreamInterface()Ljava/lang/String;
+PLcom/android/server/connectivity/tethering/OffloadController;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/connectivity/tethering/OffloadController;->isOffloadDisabled()Z
+PLcom/android/server/connectivity/tethering/OffloadController;->maybeUpdateStats(Ljava/lang/String;)V
+PLcom/android/server/connectivity/tethering/OffloadController;->removeDownstreamInterface(Ljava/lang/String;)V
+PLcom/android/server/connectivity/tethering/OffloadController;->setLocalPrefixes(Ljava/util/Set;)V
+PLcom/android/server/connectivity/tethering/OffloadController;->started()Z
+PLcom/android/server/connectivity/tethering/OffloadController;->updateStatsForCurrentUpstream()V
+PLcom/android/server/connectivity/tethering/OffloadHardwareInterface;-><init>(Landroid/os/Handler;Landroid/net/util/SharedLog;)V
+PLcom/android/server/connectivity/tethering/OffloadHardwareInterface;->getDefaultTetherOffloadDisabled()I
+PLcom/android/server/connectivity/tethering/SimChangeListener;-><init>(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/Runnable;)V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine$BaseServingState;-><init>(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;)V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine$InitialState;-><init>(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;)V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine$InitialState;->enter()V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine$InitialState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine$LocalHotspotState;-><init>(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;)V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine$TetheredState;-><init>(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;)V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine$UnavailableState;-><init>(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;)V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;->-wrap2(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;Lcom/android/internal/util/State;I)V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;->-wrap4(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;I)V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;->-wrap8(Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;Landroid/net/LinkProperties;)V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;-><init>(Ljava/lang/String;Landroid/os/Looper;ILandroid/net/util/SharedLog;Landroid/os/INetworkManagementService;Landroid/net/INetworkStatsService;Lcom/android/server/connectivity/tethering/IControlsTethering;)V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;->interfaceName()Ljava/lang/String;
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;->interfaceType()I
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;->lastError()I
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;->logMessage(Lcom/android/internal/util/State;I)V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;->resetLinkProperties()V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;->sendInterfaceState(I)V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;->sendLinkProperties()V
+PLcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;->updateUpstreamIPv6LinkProperties(Landroid/net/LinkProperties;)V
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;-><init>(Landroid/content/Context;Landroid/net/util/SharedLog;)V
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->checkDunRequired(Landroid/content/Context;)I
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->containsOneOf(Ljava/util/ArrayList;[Ljava/lang/Integer;)Z
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->copy([Ljava/lang/String;)[Ljava/lang/String;
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->dumpStringArray(Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;)V
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->dunCheckString(I)Ljava/lang/String;
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->getDhcpRanges(Landroid/content/Context;)[Ljava/lang/String;
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->getUpstreamIfaceTypes(Landroid/content/Context;I)Ljava/util/Collection;
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->isBluetooth(Ljava/lang/String;)Z
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->isUsb(Ljava/lang/String;)Z
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->isWifi(Ljava/lang/String;)Z
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->makeString([Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->matchesDownstreamRegexs(Ljava/lang/String;[Ljava/lang/String;)Z
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->preferredUpstreamNames(Ljava/util/Collection;)[Ljava/lang/String;
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->prependIfNotPresent(Ljava/util/ArrayList;I)V
+PLcom/android/server/connectivity/tethering/TetheringConfiguration;->toString()Ljava/lang/String;
+PLcom/android/server/connectivity/tethering/TetheringDependencies;-><init>()V
+PLcom/android/server/connectivity/tethering/TetheringDependencies;->getOffloadHardwareInterface(Landroid/os/Handler;Landroid/net/util/SharedLog;)Lcom/android/server/connectivity/tethering/OffloadHardwareInterface;
+PLcom/android/server/connectivity/tethering/UpstreamNetworkMonitor;-><init>(Landroid/content/Context;Lcom/android/internal/util/StateMachine;Landroid/net/util/SharedLog;I)V
+PLcom/android/server/connectivity/tethering/UpstreamNetworkMonitor;->getLocalPrefixes()Ljava/util/Set;
+PLcom/android/server/connectivity/tethering/UpstreamNetworkMonitor;->updateMobileRequiresDun(Z)V
+PLcom/android/server/content/-$Lambda$doNli3wDRrwDz12cAoe6lOOQskA$2;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/content/-$Lambda$doNli3wDRrwDz12cAoe6lOOQskA;-><init>(B)V
+PLcom/android/server/content/ContentService$1;-><init>(Lcom/android/server/content/ContentService;)V
+PLcom/android/server/content/ContentService$3;-><init>(Lcom/android/server/content/ContentService;)V
+PLcom/android/server/content/ContentService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/content/ContentService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/content/ContentService$Lifecycle;->onStart()V
+PLcom/android/server/content/ContentService$Lifecycle;->onStartUser(I)V
+PLcom/android/server/content/ContentService$Lifecycle;->onUnlockUser(I)V
+PLcom/android/server/content/ContentService;->-get0(Lcom/android/server/content/ContentService;)Landroid/util/SparseArray;
+PLcom/android/server/content/ContentService;->-wrap0(Lcom/android/server/content/ContentService;ILjava/lang/String;Landroid/net/Uri;)V
+PLcom/android/server/content/ContentService;-><init>(Landroid/content/Context;Z)V
+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
+PLcom/android/server/content/ContentService;->clampPeriod(J)J
+PLcom/android/server/content/ContentService;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType;
+PLcom/android/server/content/ContentService;->getSyncAdapterTypesAsUser(I)[Landroid/content/SyncAdapterType;
+PLcom/android/server/content/ContentService;->normalizeSyncable(I)I
+PLcom/android/server/content/ContentService;->onStartUser(I)V
+PLcom/android/server/content/ContentService;->onUnlockUser(I)V
+PLcom/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
+PLcom/android/server/content/ContentService;->setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V
+PLcom/android/server/content/ContentService;->setSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;ZI)V
+PLcom/android/server/content/ContentService;->syncAsUser(Landroid/content/SyncRequest;I)V
+PLcom/android/server/content/ContentService;->systemReady()V
+PLcom/android/server/content/SyncJobService;-><init>()V
+PLcom/android/server/content/SyncJobService;->callJobFinished(IZLjava/lang/String;)V
+PLcom/android/server/content/SyncJobService;->onStartCommand(Landroid/content/Intent;II)I
+PLcom/android/server/content/SyncJobService;->onStopJob(Landroid/app/job/JobParameters;)Z
+PLcom/android/server/content/SyncJobService;->sendMessage(Landroid/os/Message;)V
+PLcom/android/server/content/SyncLogger$RotatingFileLogger;-><init>()V
+PLcom/android/server/content/SyncLogger$RotatingFileLogger;->enabled()Z
+PLcom/android/server/content/SyncLogger$RotatingFileLogger;->purgeOldLogs()V
+PLcom/android/server/content/SyncLogger;-><init>()V
+PLcom/android/server/content/SyncLogger;->getInstance()Lcom/android/server/content/SyncLogger;
+PLcom/android/server/content/SyncManager$10;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager$11;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager$13;-><init>(Lcom/android/server/content/SyncManager;Landroid/content/Intent;)V
+PLcom/android/server/content/SyncManager$13;->run()V
+PLcom/android/server/content/SyncManager$1;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/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
+PLcom/android/server/content/SyncManager$3;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/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
+PLcom/android/server/content/SyncManager$5;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager$6;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/content/SyncManager$7;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager$8;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager$9;-><init>(Lcom/android/server/content/SyncManager;)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;->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
+PLcom/android/server/content/SyncManager$ScheduleSyncMessagePayload;-><init>(Lcom/android/server/content/SyncOperation;J)V
+PLcom/android/server/content/SyncManager$ServiceConnectionData;-><init>(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/os/IBinder;)V
+PLcom/android/server/content/SyncManager$SyncFinishedOrCancelledMessagePayload;-><init>(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/content/SyncResult;)V
+PLcom/android/server/content/SyncManager$SyncHandler;->-wrap0(Lcom/android/server/content/SyncManager$SyncHandler;Lcom/android/server/content/SyncOperation;)Landroid/os/PowerManager$WakeLock;
+PLcom/android/server/content/SyncManager$SyncHandler;-><init>(Lcom/android/server/content/SyncManager;Landroid/os/Looper;)V
+PLcom/android/server/content/SyncManager$SyncHandler;->checkIfDeviceReady()V
+PLcom/android/server/content/SyncManager$SyncHandler;->closeActiveSyncContext(Lcom/android/server/content/SyncManager$ActiveSyncContext;)V
+PLcom/android/server/content/SyncManager$SyncHandler;->deferActiveSyncH(Lcom/android/server/content/SyncManager$ActiveSyncContext;Ljava/lang/String;)V
+PLcom/android/server/content/SyncManager$SyncHandler;->deferSyncH(Lcom/android/server/content/SyncOperation;JLjava/lang/String;)V
+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;
+PLcom/android/server/content/SyncManager$SyncHandler;->insertStartSyncEvent(Lcom/android/server/content/SyncOperation;)J
+PLcom/android/server/content/SyncManager$SyncHandler;->maybeUpdateSyncPeriodH(Lcom/android/server/content/SyncOperation;JJ)V
+PLcom/android/server/content/SyncManager$SyncHandler;->onBootCompleted()V
+PLcom/android/server/content/SyncManager$SyncHandler;->removePeriodicSyncH(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
+PLcom/android/server/content/SyncManager$SyncHandler;->stopSyncEvent(JLcom/android/server/content/SyncOperation;Ljava/lang/String;IIJ)V
+PLcom/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
+PLcom/android/server/content/SyncManager$SyncTimeTracker;-><init>(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager$SyncTimeTracker;-><init>(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager$SyncTimeTracker;)V
+PLcom/android/server/content/SyncManager$UpdatePeriodicSyncMessagePayload;-><init>(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;JJLandroid/os/Bundle;)V
+PLcom/android/server/content/SyncManager;->-get1(Lcom/android/server/content/SyncManager;)Lcom/android/internal/app/IBatteryStats;
+PLcom/android/server/content/SyncManager;->-get10(Lcom/android/server/content/SyncManager;)Z
+PLcom/android/server/content/SyncManager;->-get11(Lcom/android/server/content/SyncManager;)[Landroid/accounts/AccountAndUser;
+PLcom/android/server/content/SyncManager;->-get12(Lcom/android/server/content/SyncManager;)Z
+PLcom/android/server/content/SyncManager;->-get13(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncManager$SyncHandler;
+PLcom/android/server/content/SyncManager;->-get14(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncJobService;
+PLcom/android/server/content/SyncManager;->-get16(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncStorageEngine;
+PLcom/android/server/content/SyncManager;->-get2(Lcom/android/server/content/SyncManager;)Z
+PLcom/android/server/content/SyncManager;->-get3(Lcom/android/server/content/SyncManager;)Landroid/content/Context;
+PLcom/android/server/content/SyncManager;->-get4(Lcom/android/server/content/SyncManager;)Z
+PLcom/android/server/content/SyncManager;->-get5(Lcom/android/server/content/SyncManager;)Z
+PLcom/android/server/content/SyncManager;->-get6(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncLogger;
+PLcom/android/server/content/SyncManager;->-get7(Lcom/android/server/content/SyncManager;)Landroid/app/NotificationManager;
+PLcom/android/server/content/SyncManager;->-get9(Lcom/android/server/content/SyncManager;)Landroid/os/PowerManager;
+PLcom/android/server/content/SyncManager;->-set0(Lcom/android/server/content/SyncManager;Z)Z
+PLcom/android/server/content/SyncManager;->-set1(Lcom/android/server/content/SyncManager;Z)Z
+PLcom/android/server/content/SyncManager;->-set2(Lcom/android/server/content/SyncManager;Z)Z
+PLcom/android/server/content/SyncManager;->-set4(Lcom/android/server/content/SyncManager;[Landroid/accounts/AccountAndUser;)[Landroid/accounts/AccountAndUser;
+PLcom/android/server/content/SyncManager;->-set6(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncJobService;)Lcom/android/server/content/SyncJobService;
+PLcom/android/server/content/SyncManager;->-wrap1(Lcom/android/server/content/SyncManager;[Landroid/accounts/AccountAndUser;Landroid/accounts/Account;I)Z
+PLcom/android/server/content/SyncManager;->-wrap10(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncOperation;Ljava/lang/String;)V
+PLcom/android/server/content/SyncManager;->-wrap11(Lcom/android/server/content/SyncManager;Ljava/lang/String;)V
+PLcom/android/server/content/SyncManager;->-wrap12(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V
+PLcom/android/server/content/SyncManager;->-wrap13(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager;->-wrap18(Lcom/android/server/content/SyncManager;I)V
+PLcom/android/server/content/SyncManager;->-wrap19(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager$ActiveSyncContext;)V
+PLcom/android/server/content/SyncManager;->-wrap2(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;)Z
+PLcom/android/server/content/SyncManager;->-wrap24(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncOperation;J)V
+PLcom/android/server/content/SyncManager;->-wrap25(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/content/SyncResult;)V
+PLcom/android/server/content/SyncManager;->-wrap26(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
+PLcom/android/server/content/SyncManager;->-wrap27(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;J)V
+PLcom/android/server/content/SyncManager;->-wrap29(Lcom/android/server/content/SyncManager;)V
+PLcom/android/server/content/SyncManager;->-wrap4(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager$ActiveSyncContext;)Z
+PLcom/android/server/content/SyncManager;->-wrap6(Lcom/android/server/content/SyncManager;Landroid/accounts/Account;ILjava/lang/String;)I
+PLcom/android/server/content/SyncManager;->-wrap8(Lcom/android/server/content/SyncManager;)Ljava/util/List;
+PLcom/android/server/content/SyncManager;-><init>(Landroid/content/Context;Z)V
+PLcom/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;->computeSyncable(Landroid/accounts/Account;ILjava/lang/String;)I
+PLcom/android/server/content/SyncManager;->containsAccountAndUser([Landroid/accounts/AccountAndUser;Landroid/accounts/Account;I)Z
+PLcom/android/server/content/SyncManager;->doDatabaseCleanup()V
+PLcom/android/server/content/SyncManager;->getConnectivityManager()Landroid/net/ConnectivityManager;
+PLcom/android/server/content/SyncManager;->getJobScheduler()Landroid/app/job/JobScheduler;
+PLcom/android/server/content/SyncManager;->getJobStats()Ljava/lang/String;
+PLcom/android/server/content/SyncManager;->getTotalBytesTransferredByUid(I)J
+PLcom/android/server/content/SyncManager;->getUnusedJobIdH()I
+PLcom/android/server/content/SyncManager;->isAdapterDelayed(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Z
+PLcom/android/server/content/SyncManager;->isDeviceProvisioned()Z
+PLcom/android/server/content/SyncManager;->isSyncStillActiveH(Lcom/android/server/content/SyncManager$ActiveSyncContext;)Z
+PLcom/android/server/content/SyncManager;->onStartUser(I)V
+PLcom/android/server/content/SyncManager;->onUnlockUser(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;->removePeriodicSync(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
+PLcom/android/server/content/SyncManager;->scheduleSync(Landroid/accounts/Account;IILjava/lang/String;Landroid/os/Bundle;I)V
+PLcom/android/server/content/SyncManager;->sendSyncFinishedOrCanceledMessage(Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/content/SyncResult;)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
+PLcom/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
+PLcom/android/server/content/SyncManager;->whiteListExistingSyncAdaptersIfNeeded()V
+PLcom/android/server/content/SyncOperation;-><init>(Landroid/accounts/Account;IILjava/lang/String;IILjava/lang/String;Landroid/os/Bundle;Z)V
+PLcom/android/server/content/SyncOperation;-><init>(Lcom/android/server/content/SyncStorageEngine$EndPoint;ILjava/lang/String;IILandroid/os/Bundle;Z)V
+PLcom/android/server/content/SyncOperation;->extrasToString(Landroid/os/Bundle;)Ljava/lang/String;
+PLcom/android/server/content/SyncOperation;->findPriority()I
+PLcom/android/server/content/SyncOperation;->ignoreBackoff()Z
+PLcom/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
+PLcom/android/server/content/SyncOperation;->isNotAllowedOnMetered()Z
+PLcom/android/server/content/SyncOperation;->toEventLog(I)[Ljava/lang/Object;
+PLcom/android/server/content/SyncStorageEngine$AccountAuthorityValidator;-><init>(Landroid/content/Context;)V
+PLcom/android/server/content/SyncStorageEngine$AccountAuthorityValidator;->isAccountValid(Landroid/accounts/Account;I)Z
+PLcom/android/server/content/SyncStorageEngine$AccountAuthorityValidator;->isAuthorityValid(Ljava/lang/String;I)Z
+PLcom/android/server/content/SyncStorageEngine$AccountInfo;-><init>(Landroid/accounts/AccountAndUser;)V
+PLcom/android/server/content/SyncStorageEngine$AuthorityInfo;-><init>(Lcom/android/server/content/SyncStorageEngine$EndPoint;I)V
+PLcom/android/server/content/SyncStorageEngine$AuthorityInfo;->defaultInitialisation()V
+PLcom/android/server/content/SyncStorageEngine$DayStats;-><init>(I)V
+PLcom/android/server/content/SyncStorageEngine$SyncHistoryItem;-><init>()V
+PLcom/android/server/content/SyncStorageEngine;->-get0()Lcom/android/server/content/SyncStorageEngine$PeriodicSyncAddedListener;
+PLcom/android/server/content/SyncStorageEngine;-><init>(Landroid/content/Context;Ljava/io/File;)V
+PLcom/android/server/content/SyncStorageEngine;->addActiveSync(Lcom/android/server/content/SyncManager$ActiveSyncContext;)Landroid/content/SyncInfo;
+PLcom/android/server/content/SyncStorageEngine;->addStatusChangeListener(ILandroid/content/ISyncStatusObserver;)V
+PLcom/android/server/content/SyncStorageEngine;->calculateDefaultFlexTime(J)J
+PLcom/android/server/content/SyncStorageEngine;->clearAllBackoffsLocked()V
+PLcom/android/server/content/SyncStorageEngine;->createAuthorityLocked(Lcom/android/server/content/SyncStorageEngine$EndPoint;IZ)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;
+PLcom/android/server/content/SyncStorageEngine;->doDatabaseCleanup([Landroid/accounts/Account;I)V
+PLcom/android/server/content/SyncStorageEngine;->getAuthority(I)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;
+PLcom/android/server/content/SyncStorageEngine;->getCurrentDayLocked()I
+PLcom/android/server/content/SyncStorageEngine;->getDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;)J
+PLcom/android/server/content/SyncStorageEngine;->getOrCreateSyncStatusLocked(I)Landroid/content/SyncStatusInfo;
+PLcom/android/server/content/SyncStorageEngine;->getSingleton()Lcom/android/server/content/SyncStorageEngine;
+PLcom/android/server/content/SyncStorageEngine;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/content/SyncStorageEngine;->init(Landroid/content/Context;)V
+PLcom/android/server/content/SyncStorageEngine;->insertStartSyncEvent(Lcom/android/server/content/SyncOperation;J)J
+PLcom/android/server/content/SyncStorageEngine;->markPending(Lcom/android/server/content/SyncStorageEngine$EndPoint;Z)V
+PLcom/android/server/content/SyncStorageEngine;->maybeDeleteLegacyPendingInfoLocked(Ljava/io/File;)V
+PLcom/android/server/content/SyncStorageEngine;->maybeMigrateSettingsForRenamedAuthorities()Z
+PLcom/android/server/content/SyncStorageEngine;->parseListenForTickles(Lorg/xmlpull/v1/XmlPullParser;)V
+PLcom/android/server/content/SyncStorageEngine;->readAndDeleteLegacyAccountInfoLocked()V
+PLcom/android/server/content/SyncStorageEngine;->readStatisticsLocked()V
+PLcom/android/server/content/SyncStorageEngine;->readStatusLocked()V
+PLcom/android/server/content/SyncStorageEngine;->removeActiveSync(Landroid/content/SyncInfo;I)V
+PLcom/android/server/content/SyncStorageEngine;->removeStatusChangeListener(Landroid/content/ISyncStatusObserver;)V
+PLcom/android/server/content/SyncStorageEngine;->reportActiveChange()V
+PLcom/android/server/content/SyncStorageEngine;->restoreAllPeriodicSyncs()Z
+PLcom/android/server/content/SyncStorageEngine;->setDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;J)V
+PLcom/android/server/content/SyncStorageEngine;->setIsSyncable(Landroid/accounts/Account;ILjava/lang/String;I)V
+PLcom/android/server/content/SyncStorageEngine;->setOnAuthorityRemovedListener(Lcom/android/server/content/SyncStorageEngine$OnAuthorityRemovedListener;)V
+PLcom/android/server/content/SyncStorageEngine;->setOnSyncRequestListener(Lcom/android/server/content/SyncStorageEngine$OnSyncRequestListener;)V
+PLcom/android/server/content/SyncStorageEngine;->setPeriodicSyncAddedListener(Lcom/android/server/content/SyncStorageEngine$PeriodicSyncAddedListener;)V
+PLcom/android/server/content/SyncStorageEngine;->setSyncAutomatically(Landroid/accounts/Account;ILjava/lang/String;Z)V
+PLcom/android/server/content/SyncStorageEngine;->setSyncableStateForEndPoint(Lcom/android/server/content/SyncStorageEngine$EndPoint;I)V
+PLcom/android/server/content/SyncStorageEngine;->shouldGrantSyncAdaptersAccountAccess()Z
+PLcom/android/server/content/SyncStorageEngine;->writeStatisticsLocked()V
+PLcom/android/server/devicepolicy/-$Lambda$MiCJAIOaMrlZqkmbifs3FkMNjTc;->$m$0()V
+PLcom/android/server/devicepolicy/-$Lambda$MiCJAIOaMrlZqkmbifs3FkMNjTc;-><init>(ILjava/lang/Object;)V
+PLcom/android/server/devicepolicy/-$Lambda$MiCJAIOaMrlZqkmbifs3FkMNjTc;->run()V
+PLcom/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
+PLcom/android/server/devicepolicy/CertificateMonitor;->-wrap0(Lcom/android/server/devicepolicy/CertificateMonitor;Landroid/os/UserHandle;)V
+PLcom/android/server/devicepolicy/CertificateMonitor;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Landroid/os/Handler;)V
+PLcom/android/server/devicepolicy/CertificateMonitor;->getInstalledCaCertificates(Landroid/os/UserHandle;)Ljava/util/List;
+PLcom/android/server/devicepolicy/CertificateMonitor;->lambda$-com_android_server_devicepolicy_CertificateMonitor_5174(I)V
+PLcom/android/server/devicepolicy/CertificateMonitor;->onCertificateApprovalsChanged(I)V
+PLcom/android/server/devicepolicy/CertificateMonitor;->updateInstalledCertificates(Landroid/os/UserHandle;)V
+PLcom/android/server/devicepolicy/DeviceAdminServiceController;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyConstants;)V
+PLcom/android/server/devicepolicy/DevicePolicyConstants;-><init>(Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyConstants;->loadFromString(Ljava/lang/String;)Lcom/android/server/devicepolicy/DevicePolicyConstants;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$1;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$2;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$3;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+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
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$4;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$8;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;IZ)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$8;->run()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;-><init>(Landroid/app/admin/DeviceAdminInfo;Z)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->getUserHandle()Landroid/os/UserHandle;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->hasParentActiveAdmin()Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->hasUserRestrictions()Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->readFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->writePackageListToXml(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Ljava/util/List;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;-><init>(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;-><init>(Landroid/content/Context;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getAlarmManager()Landroid/app/AlarmManager;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getDevicePolicyFilePathForSystemUser()Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getIActivityManager()Landroid/app/IActivityManager;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getIPackageManager()Landroid/content/pm/IPackageManager;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getIWindowManager()Landroid/view/IWindowManager;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getMyLooper()Landroid/os/Looper;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getNotificationManager()Landroid/app/NotificationManager;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getPackageManager()Landroid/content/pm/PackageManager;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getPackageManagerInternal()Landroid/content/pm/PackageManagerInternal;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getPowerManagerInternal()Landroid/os/PowerManagerInternal;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getTelephonyManager()Landroid/telephony/TelephonyManager;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getUserManager()Landroid/os/UserManager;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getUserManagerInternal()Landroid/os/UserManagerInternal;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->keyChainBindAsUser(Landroid/os/UserHandle;)Landroid/security/KeyChain$KeyChainConnection;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->newLockPatternUtils()Lcom/android/internal/widget/LockPatternUtils;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->newOwners()Lcom/android/server/devicepolicy/Owners;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->settingsGlobalGetInt(Ljava/lang/String;I)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->settingsGlobalGetString(Ljava/lang/String;)Ljava/lang/String;
+PLcom/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;->systemPropertiesGet(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;->onStart()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;->onStartUser(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;->onUnlockUser(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->addOnCrossProfileWidgetProvidersChangeListener(Landroid/app/admin/DevicePolicyManagerInternal$OnCrossProfileWidgetProvidersChangeListener;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$SetupContentObserver;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/os/Handler;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$SetupContentObserver;->register()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-wrap18(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-wrap7(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-wrap8(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->cleanUpOldUsers()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceDeviceOwnerOrManageUsers()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceManageUsers()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceNotManagedProfile(ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceUserUnlocked(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceUserUnlocked(IZ)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureCallerPackage(Ljava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureDeviceOwnerUserStarted()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->findAdmin(Landroid/content/ComponentName;IZ)Landroid/app/admin/DeviceAdminInfo;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->findOwnerComponentIfNecessaryLocked()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAcceptedCaCertificates(Landroid/os/UserHandle;)Ljava/util/Set;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminUncheckedLocked(Landroid/content/ComponentName;I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCameraDisabled(Landroid/content/ComponentName;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCameraDisabled(Landroid/content/ComponentName;IZ)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCameraRestrictionScopeLocked(IZ)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerAdminLocked()Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerOrganizationName()Ljava/lang/CharSequence;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getEncryptionStatus()I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getKeepUninstalledPackagesLocked()Ljava/util/List;
+PLcom/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;->getPasswordQuality(Landroid/content/ComponentName;IZ)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerAdminLocked(I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileParentId(I)I
+PLcom/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;->getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserDataUnchecked(I)Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;
+PLcom/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;->handlePasswordExpirationNotification(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleStartUser(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleUnlockUser(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasDeviceOwner()Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isActivePasswordSufficientForUserLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;IZ)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isAdminActive(Landroid/content/ComponentName;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCallerWithSystemUid()Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isLockTaskPermitted(Ljava/lang/String;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isManagedProfile(I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isNetworkLoggingEnabled(Landroid/content/ComponentName;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isNetworkLoggingEnabledInternalLocked()Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSeparateProfileChallengeEnabled(I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->loadOwners()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->loadSettingsLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->makeJournaledFile(I)Lcom/android/internal/util/JournaledFile;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeSetDefaultDeviceOwnerUserRestrictionsLocked()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeSetDefaultProfileOwnerUserRestrictions()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->migrateUserRestrictionsIfNecessaryLocked()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->onInstalledCertificatesChanged(Landroid/os/UserHandle;Ljava/util/Collection;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->onLockSettingsReady()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->pushUserRestrictions(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->removeCaApprovalsIfNeeded(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->reportPasswordChanged(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->saveSettingsLocked(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandForLockscreenPoliciesLocked(Ljava/lang/String;II)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandLocked(Ljava/lang/String;IILandroid/os/Bundle;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandToSelfAndProfilesLocked(Ljava/lang/String;IILandroid/os/Bundle;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminEnabledBroadcastLocked(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendChangedNotification(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setActivePasswordState(Landroid/app/admin/PasswordMetrics;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setDeviceOwnerSystemPropertyLocked()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setExpirationAlarmCheckLocked(Landroid/content/Context;IZ)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->startOwnerService(ILjava/lang/String;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->systemReady(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateDeviceOwnerLocked()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateLockTaskPackagesLocked(Ljava/util/List;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateMaximumTimeToLockLocked(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updatePasswordExpirationsLocked(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updatePasswordValidityCheckpointLocked(I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateScreenCaptureDisabledInWindowManager(IZ)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateUserSetupCompleteAndPaired()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->validatePasswordOwnerLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->validateQualityConstant(I)V
+PLcom/android/server/devicepolicy/Owners$DeviceOwnerReadWriter;-><init>(Lcom/android/server/devicepolicy/Owners;)V
+PLcom/android/server/devicepolicy/Owners$FileReadWriter;-><init>(Ljava/io/File;)V
+PLcom/android/server/devicepolicy/Owners$FileReadWriter;->readFromFileLocked()V
+PLcom/android/server/devicepolicy/Owners$ProfileOwnerReadWriter;-><init>(Lcom/android/server/devicepolicy/Owners;I)V
+PLcom/android/server/devicepolicy/Owners;-><init>(Landroid/os/UserManager;Landroid/os/UserManagerInternal;Landroid/content/pm/PackageManagerInternal;)V
+PLcom/android/server/devicepolicy/Owners;->getDeviceOwnerComponent()Landroid/content/ComponentName;
+PLcom/android/server/devicepolicy/Owners;->getDeviceOwnerFileWithTestOverride()Ljava/io/File;
+PLcom/android/server/devicepolicy/Owners;->getDeviceOwnerUserId()I
+PLcom/android/server/devicepolicy/Owners;->getDeviceOwnerUserRestrictionsNeedsMigration()Z
+PLcom/android/server/devicepolicy/Owners;->getLegacyConfigFileWithTestOverride()Ljava/io/File;
+PLcom/android/server/devicepolicy/Owners;->getProfileOwnerFileWithTestOverride(I)Ljava/io/File;
+PLcom/android/server/devicepolicy/Owners;->getProfileOwnerKeys()Ljava/util/Set;
+PLcom/android/server/devicepolicy/Owners;->getProfileOwnerUserRestrictionsNeedsMigration(I)Z
+PLcom/android/server/devicepolicy/Owners;->getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;
+PLcom/android/server/devicepolicy/Owners;->hasProfileOwner(I)Z
+PLcom/android/server/devicepolicy/Owners;->isDeviceOwnerUserId(I)Z
+PLcom/android/server/devicepolicy/Owners;->load()V
+PLcom/android/server/devicepolicy/Owners;->pushToPackageManagerLocked()V
+PLcom/android/server/devicepolicy/Owners;->readLegacyOwnerFileLocked(Ljava/io/File;)Z
+PLcom/android/server/devicepolicy/SecurityLogMonitor;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/display/AutomaticBrightnessController$1;-><init>(Lcom/android/server/display/AutomaticBrightnessController;)V
+PLcom/android/server/display/AutomaticBrightnessController$1;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
+PLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;-><init>(JI)V
+PLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->clear()V
+PLcom/android/server/display/AutomaticBrightnessController$AutomaticBrightnessHandler;-><init>(Lcom/android/server/display/AutomaticBrightnessController;Landroid/os/Looper;)V
+PLcom/android/server/display/AutomaticBrightnessController;-><init>(Lcom/android/server/display/AutomaticBrightnessController$Callbacks;Landroid/os/Looper;Landroid/hardware/SensorManager;Landroid/util/Spline;IIIFIIJJZIFLcom/android/server/display/HysteresisLevels;)V
+PLcom/android/server/display/AutomaticBrightnessController;->adjustLightSensorRate(I)V
+PLcom/android/server/display/AutomaticBrightnessController;->clampScreenBrightness(I)I
+PLcom/android/server/display/AutomaticBrightnessController;->getAutomaticScreenBrightness()I
+PLcom/android/server/display/AutomaticBrightnessController;->setAmbientLux(F)V
+PLcom/android/server/display/AutomaticBrightnessController;->setLightSensorEnabled(Z)Z
+PLcom/android/server/display/AutomaticBrightnessController;->setScreenAutoBrightnessAdjustment(F)Z
+PLcom/android/server/display/AutomaticBrightnessController;->updateAutoBrightness(Z)V
+PLcom/android/server/display/ColorFade;-><init>(I)V
+PLcom/android/server/display/ColorFade;->createNativeFloatBuffer(I)Ljava/nio/FloatBuffer;
+PLcom/android/server/display/ColorFade;->dismiss()V
+PLcom/android/server/display/DisplayAdapter;->getSyncRoot()Lcom/android/server/display/DisplayManagerService$SyncRoot;
+PLcom/android/server/display/DisplayDevice;->performTraversalInTransactionLocked()V
+PLcom/android/server/display/DisplayDevice;->populateViewportLocked(Landroid/hardware/display/DisplayViewport;)V
+PLcom/android/server/display/DisplayDevice;->setLayerStackInTransactionLocked(I)V
+PLcom/android/server/display/DisplayDevice;->setProjectionInTransactionLocked(ILandroid/graphics/Rect;Landroid/graphics/Rect;)V
+PLcom/android/server/display/DisplayManagerService$BinderService;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus;
+PLcom/android/server/display/DisplayManagerService$CallbackRecord;->notifyDisplayEventAsync(II)V
+PLcom/android/server/display/DisplayManagerService$LocalService$1;-><init>(Lcom/android/server/display/DisplayManagerService$LocalService;Landroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;)V
+PLcom/android/server/display/DisplayManagerService$LocalService;->getDisplayInfo(I)Landroid/view/DisplayInfo;
+PLcom/android/server/display/DisplayManagerService$LocalService;->getNonOverrideDisplayInfo(ILandroid/view/DisplayInfo;)V
+PLcom/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;->-get0(Lcom/android/server/display/DisplayManagerService;)Landroid/content/Context;
+PLcom/android/server/display/DisplayManagerService;->-get1(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/display/DisplayViewport;
+PLcom/android/server/display/DisplayManagerService;->-get10(Lcom/android/server/display/DisplayManagerService;)Landroid/view/WindowManagerInternal;
+PLcom/android/server/display/DisplayManagerService;->-get3(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/display/DisplayViewport;
+PLcom/android/server/display/DisplayManagerService;->-get4(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/input/InputManagerInternal;
+PLcom/android/server/display/DisplayManagerService;->-get6(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/display/DisplayViewport;
+PLcom/android/server/display/DisplayManagerService;->-get7(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/display/DisplayViewport;
+PLcom/android/server/display/DisplayManagerService;->-get8(Lcom/android/server/display/DisplayManagerService;)Ljava/util/ArrayList;
+PLcom/android/server/display/DisplayManagerService;->-get9(Lcom/android/server/display/DisplayManagerService;)Ljava/util/ArrayList;
+PLcom/android/server/display/DisplayManagerService;->-set0(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayPowerController;)Lcom/android/server/display/DisplayPowerController;
+PLcom/android/server/display/DisplayManagerService;->-wrap1(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/display/WifiDisplayStatus;
+PLcom/android/server/display/DisplayManagerService;->-wrap12(Lcom/android/server/display/DisplayManagerService;ILandroid/view/DisplayInfo;)V
+PLcom/android/server/display/DisplayManagerService;->-wrap18(Lcom/android/server/display/DisplayManagerService;)V
+PLcom/android/server/display/DisplayManagerService;->clearViewportsLocked()V
+PLcom/android/server/display/DisplayManagerService;->configureDisplayInTransactionLocked(Lcom/android/server/display/DisplayDevice;)V
+PLcom/android/server/display/DisplayManagerService;->findLogicalDisplayForDeviceLocked(Lcom/android/server/display/DisplayDevice;)Lcom/android/server/display/LogicalDisplay;
+PLcom/android/server/display/DisplayManagerService;->getNonOverrideDisplayInfoInternal(ILandroid/view/DisplayInfo;)V
+PLcom/android/server/display/DisplayManagerService;->getWifiDisplayStatusInternal()Landroid/hardware/display/WifiDisplayStatus;
+PLcom/android/server/display/DisplayManagerService;->performTraversalInTransactionLocked()V
+PLcom/android/server/display/DisplayManagerService;->registerAdditionalDisplayAdapters()V
+PLcom/android/server/display/DisplayManagerService;->registerOverlayDisplayAdapterLocked()V
+PLcom/android/server/display/DisplayManagerService;->registerWifiDisplayAdapterLocked()V
+PLcom/android/server/display/DisplayManagerService;->setViewportLocked(Landroid/hardware/display/DisplayViewport;Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/DisplayDevice;)V
+PLcom/android/server/display/DisplayManagerService;->setupSchedulerPolicies()V
+PLcom/android/server/display/DisplayManagerService;->shouldRegisterNonEssentialDisplayAdaptersLocked()Z
+PLcom/android/server/display/DisplayManagerService;->stopWifiDisplayScanLocked(Lcom/android/server/display/DisplayManagerService$CallbackRecord;)V
+PLcom/android/server/display/DisplayManagerService;->systemReady(ZZ)V
+PLcom/android/server/display/DisplayManagerService;->windowManagerAndInputReady()V
+PLcom/android/server/display/DisplayPowerController$1;-><init>(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/android/server/display/DisplayPowerController$2;-><init>(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/android/server/display/DisplayPowerController$2;->onAnimationEnd()V
+PLcom/android/server/display/DisplayPowerController$3;-><init>(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/android/server/display/DisplayPowerController$3;->run()V
+PLcom/android/server/display/DisplayPowerController$4;-><init>(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/android/server/display/DisplayPowerController$4;->run()V
+PLcom/android/server/display/DisplayPowerController$5;-><init>(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/android/server/display/DisplayPowerController$6;-><init>(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/android/server/display/DisplayPowerController$7;-><init>(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/android/server/display/DisplayPowerController$DisplayControllerHandler;-><init>(Lcom/android/server/display/DisplayPowerController;Landroid/os/Looper;)V
+PLcom/android/server/display/DisplayPowerController;->-get0(Lcom/android/server/display/DisplayPowerController;)Landroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;
+PLcom/android/server/display/DisplayPowerController;->-wrap3(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/android/server/display/DisplayPowerController;->-wrap6(Lcom/android/server/display/DisplayPowerController;)V
+PLcom/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
+PLcom/android/server/display/DisplayPowerController;->clampAbsoluteBrightness(I)I
+PLcom/android/server/display/DisplayPowerController;->clampScreenBrightness(I)I
+PLcom/android/server/display/DisplayPowerController;->createAutoBrightnessSpline([I[I)Landroid/util/Spline;
+PLcom/android/server/display/DisplayPowerController;->initialize()V
+PLcom/android/server/display/DisplayPowerController;->isProximitySensorAvailable()Z
+PLcom/android/server/display/DisplayPowerController;->normalizeAbsoluteBrightness(I)F
+PLcom/android/server/display/DisplayPowerController;->sendOnStateChangedWithWakelock()V
+PLcom/android/server/display/DisplayPowerController;->sendUpdatePowerState()V
+PLcom/android/server/display/DisplayPowerController;->setProximitySensorEnabled(Z)V
+PLcom/android/server/display/DisplayPowerController;->setReportedScreenState(I)V
+PLcom/android/server/display/DisplayPowerController;->setScreenState(I)Z
+PLcom/android/server/display/DisplayPowerController;->unblockScreenOn()V
+PLcom/android/server/display/DisplayPowerController;->updateBrightness()V
+PLcom/android/server/display/DisplayPowerState$1;-><init>(Ljava/lang/String;)V
+PLcom/android/server/display/DisplayPowerState$2;-><init>(Ljava/lang/String;)V
+PLcom/android/server/display/DisplayPowerState$3;-><init>(Lcom/android/server/display/DisplayPowerState;)V
+PLcom/android/server/display/DisplayPowerState$4;-><init>(Lcom/android/server/display/DisplayPowerState;)V
+PLcom/android/server/display/DisplayPowerState$PhotonicModulator;-><init>(Lcom/android/server/display/DisplayPowerState;)V
+PLcom/android/server/display/DisplayPowerState;-><init>(Lcom/android/server/display/DisplayBlanker;Lcom/android/server/display/ColorFade;)V
+PLcom/android/server/display/DisplayPowerState;->getColorFadeLevel()F
+PLcom/android/server/display/DisplayPowerState;->getScreenBrightness()I
+PLcom/android/server/display/DisplayPowerState;->setColorFadeLevel(F)V
+PLcom/android/server/display/DisplayPowerState;->waitUntilClean(Ljava/lang/Runnable;)Z
+PLcom/android/server/display/DisplayTransformManager;->applyColorMatrix([F)V
+PLcom/android/server/display/DisplayTransformManager;->computeColorMatrixLocked()[F
+PLcom/android/server/display/DisplayTransformManager;->getColorMatrix(I)[F
+PLcom/android/server/display/DisplayTransformManager;->setDaltonizerMode(I)V
+PLcom/android/server/display/HysteresisLevels;-><init>([I[I[I)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
+PLcom/android/server/display/HysteresisLevels;->setArrayFormat([IF)[F
+PLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->requestColorModeInTransactionLocked(I)Z
+PLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->requestDisplayModesInTransactionLocked(II)V
+PLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->requestModeInTransactionLocked(I)Z
+PLcom/android/server/display/LogicalDisplay;->configureDisplayInTransactionLocked(Lcom/android/server/display/DisplayDevice;Z)V
+PLcom/android/server/display/LogicalDisplay;->getDisplayIdLocked()I
+PLcom/android/server/display/LogicalDisplay;->getNonOverrideDisplayInfoLocked(Landroid/view/DisplayInfo;)V
+PLcom/android/server/display/LogicalDisplay;->setHasContentLocked(Z)V
+PLcom/android/server/display/NightDisplayService$1;-><init>(Lcom/android/server/display/NightDisplayService;)V
+PLcom/android/server/display/NightDisplayService$3;-><init>(Lcom/android/server/display/NightDisplayService;Lcom/android/server/display/DisplayTransformManager;)V
+PLcom/android/server/display/NightDisplayService$4;-><init>(Lcom/android/server/display/NightDisplayService;Lcom/android/server/display/DisplayTransformManager;[F)V
+PLcom/android/server/display/NightDisplayService$4;->onAnimationCancel(Landroid/animation/Animator;)V
+PLcom/android/server/display/NightDisplayService$4;->onAnimationEnd(Landroid/animation/Animator;)V
+PLcom/android/server/display/NightDisplayService$ColorMatrixEvaluator;-><init>()V
+PLcom/android/server/display/NightDisplayService$ColorMatrixEvaluator;-><init>(Lcom/android/server/display/NightDisplayService$ColorMatrixEvaluator;)V
+PLcom/android/server/display/NightDisplayService;->-set0(Lcom/android/server/display/NightDisplayService;Landroid/animation/ValueAnimator;)Landroid/animation/ValueAnimator;
+PLcom/android/server/display/NightDisplayService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/display/NightDisplayService;->applyTint(Z)V
+PLcom/android/server/display/NightDisplayService;->isUserSetupCompleted(Landroid/content/ContentResolver;I)Z
+PLcom/android/server/display/NightDisplayService;->onActivated(Z)V
+PLcom/android/server/display/NightDisplayService;->onAutoModeChanged(I)V
+PLcom/android/server/display/NightDisplayService;->onBootPhase(I)V
+PLcom/android/server/display/NightDisplayService;->onStart()V
+PLcom/android/server/display/NightDisplayService;->onStartUser(I)V
+PLcom/android/server/display/NightDisplayService;->onUserChanged(I)V
+PLcom/android/server/display/NightDisplayService;->setMatrix(I[F)V
+PLcom/android/server/display/NightDisplayService;->setUp()V
+PLcom/android/server/display/OverlayDisplayAdapter$1$1;-><init>(Lcom/android/server/display/OverlayDisplayAdapter$1;Landroid/os/Handler;)V
+PLcom/android/server/display/OverlayDisplayAdapter$1;-><init>(Lcom/android/server/display/OverlayDisplayAdapter;)V
+PLcom/android/server/display/OverlayDisplayAdapter$1;->run()V
+PLcom/android/server/display/OverlayDisplayAdapter;->-wrap0(Lcom/android/server/display/OverlayDisplayAdapter;)V
+PLcom/android/server/display/OverlayDisplayAdapter;-><init>(Lcom/android/server/display/DisplayManagerService$SyncRoot;Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/display/DisplayAdapter$Listener;Landroid/os/Handler;)V
+PLcom/android/server/display/OverlayDisplayAdapter;->registerLocked()V
+PLcom/android/server/display/OverlayDisplayAdapter;->updateOverlayDisplayDevices()V
+PLcom/android/server/display/OverlayDisplayAdapter;->updateOverlayDisplayDevicesLocked()V
+PLcom/android/server/display/RampAnimator$1;-><init>(Lcom/android/server/display/RampAnimator;)V
+PLcom/android/server/display/RampAnimator;->-get4(Lcom/android/server/display/RampAnimator;)Lcom/android/server/display/RampAnimator$Listener;
+PLcom/android/server/display/RampAnimator;->-set1(Lcom/android/server/display/RampAnimator;Z)Z
+PLcom/android/server/display/RampAnimator;-><init>(Ljava/lang/Object;Landroid/util/IntProperty;)V
+PLcom/android/server/display/RampAnimator;->isAnimating()Z
+PLcom/android/server/display/RampAnimator;->setListener(Lcom/android/server/display/RampAnimator$Listener;)V
+PLcom/android/server/dreams/DreamController$1;-><init>(Lcom/android/server/dreams/DreamController;)V
+PLcom/android/server/dreams/DreamController$2;-><init>(Lcom/android/server/dreams/DreamController;)V
+PLcom/android/server/dreams/DreamController;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/dreams/DreamController$Listener;)V
+PLcom/android/server/dreams/DreamManagerService$1;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
+PLcom/android/server/dreams/DreamManagerService$2;-><init>(Lcom/android/server/dreams/DreamManagerService;Landroid/os/Handler;)V
+PLcom/android/server/dreams/DreamManagerService$3;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
+PLcom/android/server/dreams/DreamManagerService$4;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
+PLcom/android/server/dreams/DreamManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/dreams/DreamManagerService$BinderService;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
+PLcom/android/server/dreams/DreamManagerService$BinderService;-><init>(Lcom/android/server/dreams/DreamManagerService;Lcom/android/server/dreams/DreamManagerService$BinderService;)V
+PLcom/android/server/dreams/DreamManagerService$BinderService;->awaken()V
+PLcom/android/server/dreams/DreamManagerService$BinderService;->isDreaming()Z
+PLcom/android/server/dreams/DreamManagerService$DreamHandler;-><init>(Lcom/android/server/dreams/DreamManagerService;Landroid/os/Looper;)V
+PLcom/android/server/dreams/DreamManagerService$LocalService;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
+PLcom/android/server/dreams/DreamManagerService$LocalService;-><init>(Lcom/android/server/dreams/DreamManagerService;Lcom/android/server/dreams/DreamManagerService$LocalService;)V
+PLcom/android/server/dreams/DreamManagerService;->-get5(Lcom/android/server/dreams/DreamManagerService;)Ljava/lang/Object;
+PLcom/android/server/dreams/DreamManagerService;->-wrap15(Lcom/android/server/dreams/DreamManagerService;Z)V
+PLcom/android/server/dreams/DreamManagerService;->-wrap17(Lcom/android/server/dreams/DreamManagerService;)V
+PLcom/android/server/dreams/DreamManagerService;->-wrap4(Lcom/android/server/dreams/DreamManagerService;Ljava/lang/String;)V
+PLcom/android/server/dreams/DreamManagerService;->-wrap8(Lcom/android/server/dreams/DreamManagerService;)V
+PLcom/android/server/dreams/DreamManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/dreams/DreamManagerService;->checkPermission(Ljava/lang/String;)V
+PLcom/android/server/dreams/DreamManagerService;->getDozeComponent()Landroid/content/ComponentName;
+PLcom/android/server/dreams/DreamManagerService;->getDozeComponent(I)Landroid/content/ComponentName;
+PLcom/android/server/dreams/DreamManagerService;->getServiceInfo(Landroid/content/ComponentName;)Landroid/content/pm/ServiceInfo;
+PLcom/android/server/dreams/DreamManagerService;->onBootPhase(I)V
+PLcom/android/server/dreams/DreamManagerService;->onStart()V
+PLcom/android/server/dreams/DreamManagerService;->requestAwakenInternal()V
+PLcom/android/server/dreams/DreamManagerService;->stopDreamInternal(Z)V
+PLcom/android/server/dreams/DreamManagerService;->stopDreamLocked(Z)V
+PLcom/android/server/dreams/DreamManagerService;->validateDream(Landroid/content/ComponentName;)Z
+PLcom/android/server/dreams/DreamManagerService;->writePulseGestureEnabled()V
+PLcom/android/server/emergency/EmergencyAffordanceService$1;-><init>(Lcom/android/server/emergency/EmergencyAffordanceService;)V
+PLcom/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
+PLcom/android/server/emergency/EmergencyAffordanceService$3;-><init>(Lcom/android/server/emergency/EmergencyAffordanceService;)V
+PLcom/android/server/emergency/EmergencyAffordanceService$3;->onSubscriptionsChanged()V
+PLcom/android/server/emergency/EmergencyAffordanceService$MyHandler;-><init>(Lcom/android/server/emergency/EmergencyAffordanceService;Landroid/os/Looper;)V
+PLcom/android/server/emergency/EmergencyAffordanceService$MyHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/emergency/EmergencyAffordanceService;->-get0(Lcom/android/server/emergency/EmergencyAffordanceService;)Lcom/android/server/emergency/EmergencyAffordanceService$MyHandler;
+PLcom/android/server/emergency/EmergencyAffordanceService;->-wrap0(Lcom/android/server/emergency/EmergencyAffordanceService;)Z
+PLcom/android/server/emergency/EmergencyAffordanceService;->-wrap1(Lcom/android/server/emergency/EmergencyAffordanceService;)Z
+PLcom/android/server/emergency/EmergencyAffordanceService;->-wrap3(Lcom/android/server/emergency/EmergencyAffordanceService;)V
+PLcom/android/server/emergency/EmergencyAffordanceService;->-wrap4(Lcom/android/server/emergency/EmergencyAffordanceService;)V
+PLcom/android/server/emergency/EmergencyAffordanceService;->-wrap5(Lcom/android/server/emergency/EmergencyAffordanceService;)V
+PLcom/android/server/emergency/EmergencyAffordanceService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/emergency/EmergencyAffordanceService;->handleInitializeState()V
+PLcom/android/server/emergency/EmergencyAffordanceService;->handleUpdateCellInfo()Z
+PLcom/android/server/emergency/EmergencyAffordanceService;->handleUpdateSimSubscriptionInfo()Z
+PLcom/android/server/emergency/EmergencyAffordanceService;->mccRequiresEmergencyAffordance(I)Z
+PLcom/android/server/emergency/EmergencyAffordanceService;->onBootPhase(I)V
+PLcom/android/server/emergency/EmergencyAffordanceService;->onStart()V
+PLcom/android/server/emergency/EmergencyAffordanceService;->requestCellScan()V
+PLcom/android/server/emergency/EmergencyAffordanceService;->setNetworkNeedsEmergencyAffordance(Z)V
+PLcom/android/server/emergency/EmergencyAffordanceService;->setSimNeedsEmergencyAffordance(Z)V
+PLcom/android/server/emergency/EmergencyAffordanceService;->simNeededAffordanceBefore()Z
+PLcom/android/server/emergency/EmergencyAffordanceService;->startScanning()V
+PLcom/android/server/emergency/EmergencyAffordanceService;->stopScanning()V
+PLcom/android/server/emergency/EmergencyAffordanceService;->updateEmergencyAffordanceNeeded()V
+PLcom/android/server/fingerprint/-$Lambda$NsdFXKe2P39OH-qCAY_zqOMIIsg;->$m$0()V
+PLcom/android/server/fingerprint/-$Lambda$NsdFXKe2P39OH-qCAY_zqOMIIsg;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/fingerprint/-$Lambda$NsdFXKe2P39OH-qCAY_zqOMIIsg;->run()V
+PLcom/android/server/fingerprint/FingerprintService$12;-><init>(Lcom/android/server/fingerprint/FingerprintService;)V
+PLcom/android/server/fingerprint/FingerprintService$1;-><init>(Lcom/android/server/fingerprint/FingerprintService;)V
+PLcom/android/server/fingerprint/FingerprintService$2;-><init>(Lcom/android/server/fingerprint/FingerprintService;)V
+PLcom/android/server/fingerprint/FingerprintService$3;-><init>(Lcom/android/server/fingerprint/FingerprintService;)V
+PLcom/android/server/fingerprint/FingerprintService$4;-><init>(Lcom/android/server/fingerprint/FingerprintService;)V
+PLcom/android/server/fingerprint/FingerprintService$5;-><init>(Lcom/android/server/fingerprint/FingerprintService;)V
+PLcom/android/server/fingerprint/FingerprintService$FingerprintServiceLockoutResetMonitor$1;-><init>(Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceLockoutResetMonitor;)V
+PLcom/android/server/fingerprint/FingerprintService$FingerprintServiceLockoutResetMonitor;-><init>(Lcom/android/server/fingerprint/FingerprintService;Landroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback;)V
+PLcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper$9;-><init>(Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;Landroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback;)V
+PLcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper$9;->run()V
+PLcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-><init>(Lcom/android/server/fingerprint/FingerprintService;)V
+PLcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;-><init>(Lcom/android/server/fingerprint/FingerprintService;Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;)V
+PLcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;->addLockoutResetCallback(Landroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback;)V
+PLcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;->getEnrolledFingerprints(ILjava/lang/String;)Ljava/util/List;
+PLcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;->isHardwareDetected(JLjava/lang/String;)Z
+PLcom/android/server/fingerprint/FingerprintService;->-com_android_server_fingerprint_FingerprintService-mthref-0()V
+PLcom/android/server/fingerprint/FingerprintService;->-get12(Lcom/android/server/fingerprint/FingerprintService;)Landroid/os/PowerManager;
+PLcom/android/server/fingerprint/FingerprintService;->-get7(Lcom/android/server/fingerprint/FingerprintService;)J
+PLcom/android/server/fingerprint/FingerprintService;->-get8(Lcom/android/server/fingerprint/FingerprintService;)Landroid/os/Handler;
+PLcom/android/server/fingerprint/FingerprintService;->-wrap0(Lcom/android/server/fingerprint/FingerprintService;Ljava/lang/String;ZIII)Z
+PLcom/android/server/fingerprint/FingerprintService;->-wrap2(Lcom/android/server/fingerprint/FingerprintService;Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceLockoutResetMonitor;)V
+PLcom/android/server/fingerprint/FingerprintService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/fingerprint/FingerprintService;->addLockoutResetMonitor(Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceLockoutResetMonitor;)V
+PLcom/android/server/fingerprint/FingerprintService;->canUseFingerprint(Ljava/lang/String;ZIII)Z
+PLcom/android/server/fingerprint/FingerprintService;->checkPermission(Ljava/lang/String;)V
+PLcom/android/server/fingerprint/FingerprintService;->doFingerprintCleanup(I)V
+PLcom/android/server/fingerprint/FingerprintService;->getEffectiveUserId(I)I
+PLcom/android/server/fingerprint/FingerprintService;->getEnrolledFingerprints(I)Ljava/util/List;
+PLcom/android/server/fingerprint/FingerprintService;->getFingerprintDaemon()Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;
+PLcom/android/server/fingerprint/FingerprintService;->getUserOrWorkProfileId(Ljava/lang/String;I)I
+PLcom/android/server/fingerprint/FingerprintService;->hasEnrolledFingerprints(I)Z
+PLcom/android/server/fingerprint/FingerprintService;->isCurrentUserOrProfile(I)Z
+PLcom/android/server/fingerprint/FingerprintService;->isKeyguard(Ljava/lang/String;)Z
+PLcom/android/server/fingerprint/FingerprintService;->isWorkProfile(I)Z
+PLcom/android/server/fingerprint/FingerprintService;->listenForUserSwitches()V
+PLcom/android/server/fingerprint/FingerprintService;->loadAuthenticatorIds()V
+PLcom/android/server/fingerprint/FingerprintService;->onStart()V
+PLcom/android/server/fingerprint/FingerprintService;->updateActiveGroup(ILjava/lang/String;)V
+PLcom/android/server/fingerprint/FingerprintUtils;-><init>()V
+PLcom/android/server/fingerprint/FingerprintUtils;->getFingerprintsForUser(Landroid/content/Context;I)Ljava/util/List;
+PLcom/android/server/fingerprint/FingerprintUtils;->getInstance()Lcom/android/server/fingerprint/FingerprintUtils;
+PLcom/android/server/fingerprint/FingerprintUtils;->getStateForUser(Landroid/content/Context;I)Lcom/android/server/fingerprint/FingerprintsUserState;
+PLcom/android/server/fingerprint/FingerprintsUserState$1;-><init>(Lcom/android/server/fingerprint/FingerprintsUserState;)V
+PLcom/android/server/fingerprint/FingerprintsUserState;-><init>(Landroid/content/Context;I)V
+PLcom/android/server/fingerprint/FingerprintsUserState;->getCopy(Ljava/util/ArrayList;)Ljava/util/ArrayList;
+PLcom/android/server/fingerprint/FingerprintsUserState;->getFileForUser(I)Ljava/io/File;
+PLcom/android/server/fingerprint/FingerprintsUserState;->getFingerprints()Ljava/util/List;
+PLcom/android/server/fingerprint/FingerprintsUserState;->readStateSyncLocked()V
+PLcom/android/server/firewall/IntentFirewall;->checkStartActivity(Landroid/content/Intent;IILjava/lang/String;Landroid/content/pm/ApplicationInfo;)Z
+PLcom/android/server/input/InputApplicationHandle;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/input/InputApplicationHandle;->finalize()V
+PLcom/android/server/input/InputManagerService$10;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Handler;)V
+PLcom/android/server/input/InputManagerService$11;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Handler;)V
+PLcom/android/server/input/InputManagerService$12;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Handler;)V
+PLcom/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
+PLcom/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
+PLcom/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
+PLcom/android/server/input/InputManagerService$InputManagerHandler;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Looper;)V
+PLcom/android/server/input/InputManagerService$InputManagerHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/input/InputManagerService$LocalService;-><init>(Lcom/android/server/input/InputManagerService;)V
+PLcom/android/server/input/InputManagerService$LocalService;-><init>(Lcom/android/server/input/InputManagerService;Lcom/android/server/input/InputManagerService$LocalService;)V
+PLcom/android/server/input/InputManagerService$LocalService;->onInputMethodSubtypeChanged(ILandroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)V
+PLcom/android/server/input/InputManagerService$LocalService;->setDisplayViewports(Landroid/hardware/display/DisplayViewport;Landroid/hardware/display/DisplayViewport;Ljava/util/List;)V
+PLcom/android/server/input/InputManagerService$LocalService;->setPulseGestureEnabled(Z)V
+PLcom/android/server/input/InputManagerService;->-get0(Lcom/android/server/input/InputManagerService;)Ljava/io/File;
+PLcom/android/server/input/InputManagerService;->-get1(Lcom/android/server/input/InputManagerService;)Lcom/android/server/input/InputManagerService$InputManagerHandler;
+PLcom/android/server/input/InputManagerService;->-wrap11(Lcom/android/server/input/InputManagerService;)V
+PLcom/android/server/input/InputManagerService;->-wrap13(Lcom/android/server/input/InputManagerService;Landroid/hardware/display/DisplayViewport;Landroid/hardware/display/DisplayViewport;Ljava/util/List;)V
+PLcom/android/server/input/InputManagerService;->-wrap14(Lcom/android/server/input/InputManagerService;)V
+PLcom/android/server/input/InputManagerService;->-wrap3(Lcom/android/server/input/InputManagerService;[Landroid/view/InputDevice;)V
+PLcom/android/server/input/InputManagerService;->-wrap5(Lcom/android/server/input/InputManagerService;ILandroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)V
+PLcom/android/server/input/InputManagerService;->-wrap9(Lcom/android/server/input/InputManagerService;I)V
+PLcom/android/server/input/InputManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/input/InputManagerService;->checkInjectEventsPermission(II)Z
+PLcom/android/server/input/InputManagerService;->dispatchUnhandledKey(Lcom/android/server/input/InputWindowHandle;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;
+PLcom/android/server/input/InputManagerService;->getDeviceAlias(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/input/InputManagerService;->getDoubleTapTimeout()I
+PLcom/android/server/input/InputManagerService;->getHoverTapSlop()I
+PLcom/android/server/input/InputManagerService;->getHoverTapTimeout()I
+PLcom/android/server/input/InputManagerService;->getInputDevices()[Landroid/view/InputDevice;
+PLcom/android/server/input/InputManagerService;->getKeyCodeState(III)I
+PLcom/android/server/input/InputManagerService;->getKeyRepeatDelay()I
+PLcom/android/server/input/InputManagerService;->getKeyRepeatTimeout()I
+PLcom/android/server/input/InputManagerService;->getLongPressTimeout()I
+PLcom/android/server/input/InputManagerService;->getPointerSpeedSetting()I
+PLcom/android/server/input/InputManagerService;->getScanCodeState(III)I
+PLcom/android/server/input/InputManagerService;->getShowTouchesSetting(I)I
+PLcom/android/server/input/InputManagerService;->getTouchCalibrationForInputDevice(Ljava/lang/String;I)Landroid/hardware/input/TouchCalibration;
+PLcom/android/server/input/InputManagerService;->getVirtualKeyQuietTimeMillis()I
+PLcom/android/server/input/InputManagerService;->handleSwitchInputMethodSubtype(ILandroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)V
+PLcom/android/server/input/InputManagerService;->handleSwitchKeyboardLayout(Landroid/hardware/input/InputDeviceIdentifier;Lcom/android/internal/inputmethod/InputMethodSubtypeHandle;)V
+PLcom/android/server/input/InputManagerService;->hasKeys(II[I[Z)Z
+PLcom/android/server/input/InputManagerService;->monitorInput(Ljava/lang/String;)Landroid/view/InputChannel;
+PLcom/android/server/input/InputManagerService;->notifyConfigurationChanged(J)V
+PLcom/android/server/input/InputManagerService;->notifyInputDevicesChanged([Landroid/view/InputDevice;)V
+PLcom/android/server/input/InputManagerService;->onInputDevicesChangedListenerDied(I)V
+PLcom/android/server/input/InputManagerService;->registerAccessibilityLargePointerSettingObserver()V
+PLcom/android/server/input/InputManagerService;->registerInputDevicesChangedListener(Landroid/hardware/input/IInputDevicesChangedListener;)V
+PLcom/android/server/input/InputManagerService;->registerPointerSpeedSettingObserver()V
+PLcom/android/server/input/InputManagerService;->registerShowTouchesSettingObserver()V
+PLcom/android/server/input/InputManagerService;->reloadDeviceAliases()V
+PLcom/android/server/input/InputManagerService;->reloadKeyboardLayouts()V
+PLcom/android/server/input/InputManagerService;->setDisplayViewport(ILandroid/hardware/display/DisplayViewport;)V
+PLcom/android/server/input/InputManagerService;->setDisplayViewportsInternal(Landroid/hardware/display/DisplayViewport;Landroid/hardware/display/DisplayViewport;Ljava/util/List;)V
+PLcom/android/server/input/InputManagerService;->setFocusedApplication(Lcom/android/server/input/InputApplicationHandle;)V
+PLcom/android/server/input/InputManagerService;->setInputDispatchMode(ZZ)V
+PLcom/android/server/input/InputManagerService;->setPointerSpeedUnchecked(I)V
+PLcom/android/server/input/InputManagerService;->setWindowManagerCallbacks(Lcom/android/server/input/InputManagerService$WindowManagerCallbacks;)V
+PLcom/android/server/input/InputManagerService;->setWiredAccessoryCallbacks(Lcom/android/server/input/InputManagerService$WiredAccessoryCallbacks;)V
+PLcom/android/server/input/InputManagerService;->start()V
+PLcom/android/server/input/InputManagerService;->systemRunning()V
+PLcom/android/server/input/InputManagerService;->unregisterInputChannel(Landroid/view/InputChannel;)V
+PLcom/android/server/input/InputManagerService;->updateAccessibilityLargePointerFromSettings()V
+PLcom/android/server/input/InputManagerService;->updatePointerSpeedFromSettings()V
+PLcom/android/server/input/InputManagerService;->updateShowTouchesFromSettings()V
+PLcom/android/server/input/PersistentDataStore;-><init>()V
+PLcom/android/server/input/PersistentDataStore;->clearState()V
+PLcom/android/server/input/PersistentDataStore;->getTouchCalibration(Ljava/lang/String;I)Landroid/hardware/input/TouchCalibration;
+PLcom/android/server/input/PersistentDataStore;->load()V
+PLcom/android/server/input/PersistentDataStore;->removeUninstalledKeyboardLayouts(Ljava/util/Set;)Z
+PLcom/android/server/input/PersistentDataStore;->saveIfNeeded()V
+PLcom/android/server/input/PersistentDataStore;->switchKeyboardLayout(Ljava/lang/String;Lcom/android/internal/inputmethod/InputMethodSubtypeHandle;)Z
+PLcom/android/server/job/-$Lambda$MZyz9fgevtnL7iKUFvjeGfWQ-E8$1;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/job/-$Lambda$MZyz9fgevtnL7iKUFvjeGfWQ-E8;->$m$0(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/job/-$Lambda$MZyz9fgevtnL7iKUFvjeGfWQ-E8;-><init>()V
+PLcom/android/server/job/-$Lambda$MZyz9fgevtnL7iKUFvjeGfWQ-E8;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/job/GrantedUriPermissions;->checkGrantFlags(I)Z
+PLcom/android/server/job/JobPackageTracker$DataSet;-><init>()V
+PLcom/android/server/job/JobPackageTracker$DataSet;->decActiveTop(ILjava/lang/String;JI)V
+PLcom/android/server/job/JobPackageTracker$DataSet;->finish(Lcom/android/server/job/JobPackageTracker$DataSet;J)V
+PLcom/android/server/job/JobPackageTracker$DataSet;->incActive(ILjava/lang/String;J)V
+PLcom/android/server/job/JobPackageTracker$DataSet;->incActiveTop(ILjava/lang/String;J)V
+PLcom/android/server/job/JobPackageTracker$PackageEntry;-><init>()V
+PLcom/android/server/job/JobPackageTracker$PackageEntry;->getActiveTime(J)J
+PLcom/android/server/job/JobPackageTracker$PackageEntry;->getPendingTime(J)J
+PLcom/android/server/job/JobPackageTracker;-><init>()V
+PLcom/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;->toString()Ljava/lang/String;
+PLcom/android/server/job/JobSchedulerService$1;-><init>(Lcom/android/server/job/JobSchedulerService;)V
+PLcom/android/server/job/JobSchedulerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/job/JobSchedulerService$2;-><init>(Lcom/android/server/job/JobSchedulerService;)V
+PLcom/android/server/job/JobSchedulerService$2;->onUidGone(IZ)V
+PLcom/android/server/job/JobSchedulerService$2;->onUidIdle(IZ)V
+PLcom/android/server/job/JobSchedulerService$3;-><init>(Lcom/android/server/job/JobSchedulerService;)V
+PLcom/android/server/job/JobSchedulerService$4;-><init>(Lcom/android/server/job/JobSchedulerService;)V
+PLcom/android/server/job/JobSchedulerService$Constants;-><init>(Lcom/android/server/job/JobSchedulerService;Landroid/os/Handler;)V
+PLcom/android/server/job/JobSchedulerService$Constants;->start(Landroid/content/ContentResolver;)V
+PLcom/android/server/job/JobSchedulerService$Constants;->updateConstants()V
+PLcom/android/server/job/JobSchedulerService$JobHandler;-><init>(Lcom/android/server/job/JobSchedulerService;Landroid/os/Looper;)V
+PLcom/android/server/job/JobSchedulerService$JobSchedulerStub;-><init>(Lcom/android/server/job/JobSchedulerService;)V
+PLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->canPersistJobs(II)Z
+PLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->getAllPendingJobs()Ljava/util/List;
+PLcom/android/server/job/JobSchedulerService$LocalService$1;-><init>(Lcom/android/server/job/JobSchedulerService$LocalService;Ljava/util/List;)V
+PLcom/android/server/job/JobSchedulerService$LocalService;-><init>(Lcom/android/server/job/JobSchedulerService;)V
+PLcom/android/server/job/JobSchedulerService$LocalService;->getPersistStats()Lcom/android/server/job/JobSchedulerInternal$JobStorePersistStats;
+PLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;-><init>(Lcom/android/server/job/JobSchedulerService;)V
+PLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;->postProcess()V
+PLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;->reset()V
+PLcom/android/server/job/JobSchedulerService$ReadyJobQueueFunctor;-><init>(Lcom/android/server/job/JobSchedulerService;)V
+PLcom/android/server/job/JobSchedulerService$ReadyJobQueueFunctor;->postProcess()V
+PLcom/android/server/job/JobSchedulerService;->-wrap2(Lcom/android/server/job/JobSchedulerService;Landroid/content/Intent;)Ljava/lang/String;
+PLcom/android/server/job/JobSchedulerService;->-wrap4(Lcom/android/server/job/JobSchedulerService;)V
+PLcom/android/server/job/JobSchedulerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/job/JobSchedulerService;->cancelJobsForNonExistentUsers()V
+PLcom/android/server/job/JobSchedulerService;->cancelJobsForPackageAndUid(Ljava/lang/String;I)V
+PLcom/android/server/job/JobSchedulerService;->getJobStore()Lcom/android/server/job/JobStore;
+PLcom/android/server/job/JobSchedulerService;->getLock()Ljava/lang/Object;
+PLcom/android/server/job/JobSchedulerService;->getPackageName(Landroid/content/Intent;)Ljava/lang/String;
+PLcom/android/server/job/JobSchedulerService;->getRescheduleJobForPeriodic(Lcom/android/server/job/controllers/JobStatus;)Lcom/android/server/job/controllers/JobStatus;
+PLcom/android/server/job/JobSchedulerService;->lambda$-com_android_server_job_JobSchedulerService_21827(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)I
+PLcom/android/server/job/JobSchedulerService;->maybeQueueReadyJobsForExecutionLocked()V
+PLcom/android/server/job/JobSchedulerService;->noteJobsPending(Ljava/util/List;)V
+PLcom/android/server/job/JobSchedulerService;->onBootPhase(I)V
+PLcom/android/server/job/JobSchedulerService;->onControllerStateChanged()V
+PLcom/android/server/job/JobSchedulerService;->onRunJobNow(Lcom/android/server/job/controllers/JobStatus;)V
+PLcom/android/server/job/JobSchedulerService;->onStart()V
+PLcom/android/server/job/JobSchedulerService;->onStartUser(I)V
+PLcom/android/server/job/JobSchedulerService;->onUnlockUser(I)V
+PLcom/android/server/job/JobServiceContext$JobCallback;->acknowledgeStopMessage(IZ)V
+PLcom/android/server/job/JobServiceContext$JobCallback;->completeWork(II)Z
+PLcom/android/server/job/JobServiceContext$JobCallback;->dequeueWork(I)Landroid/app/job/JobWorkItem;
+PLcom/android/server/job/JobServiceContext$JobServiceHandler;-><init>(Lcom/android/server/job/JobServiceContext;Landroid/os/Looper;)V
+PLcom/android/server/job/JobServiceContext;-><init>(Landroid/content/Context;Ljava/lang/Object;Lcom/android/internal/app/IBatteryStats;Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobCompletedListener;Landroid/os/Looper;)V
+PLcom/android/server/job/JobServiceContext;-><init>(Lcom/android/server/job/JobSchedulerService;Lcom/android/internal/app/IBatteryStats;Lcom/android/server/job/JobPackageTracker;Landroid/os/Looper;)V
+PLcom/android/server/job/JobServiceContext;->assertCallerLocked(Lcom/android/server/job/JobServiceContext$JobCallback;)V
+PLcom/android/server/job/JobServiceContext;->cancelExecutingJobLocked(ILjava/lang/String;)V
+PLcom/android/server/job/JobServiceContext;->doAcknowledgeStopMessage(Lcom/android/server/job/JobServiceContext$JobCallback;IZ)V
+PLcom/android/server/job/JobServiceContext;->doCancelLocked(ILjava/lang/String;)V
+PLcom/android/server/job/JobServiceContext;->handleCancelLocked(Ljava/lang/String;)V
+PLcom/android/server/job/JobServiceContext;->sendStopMessageLocked(Ljava/lang/String;)V
+PLcom/android/server/job/JobStore$1$1;-><init>(Lcom/android/server/job/JobStore$1;Ljava/util/List;)V
+PLcom/android/server/job/JobStore$1;-><init>(Lcom/android/server/job/JobStore;)V
+PLcom/android/server/job/JobStore$JobSet;-><init>()V
+PLcom/android/server/job/JobStore$JobSet;->removeJobsOfNonUsers([I)V
+PLcom/android/server/job/JobStore$ReadJobMapFromDiskRunnable;-><init>(Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore$JobSet;Z)V
+PLcom/android/server/job/JobStore$ReadJobMapFromDiskRunnable;->maybeBuildBackoffPolicyFromXml(Landroid/app/job/JobInfo$Builder;Lorg/xmlpull/v1/XmlPullParser;)V
+PLcom/android/server/job/JobStore;->-get0(Lcom/android/server/job/JobStore;)Landroid/util/AtomicFile;
+PLcom/android/server/job/JobStore;->-set0(Lcom/android/server/job/JobStore;I)I
+PLcom/android/server/job/JobStore;->-wrap0(Landroid/util/Pair;J)Landroid/util/Pair;
+PLcom/android/server/job/JobStore;-><init>(Landroid/content/Context;Ljava/lang/Object;Ljava/io/File;)V
+PLcom/android/server/job/JobStore;->forEachJob(ILcom/android/server/job/JobStore$JobStatusFunctor;)V
+PLcom/android/server/job/JobStore;->getJobsByUid(I)Ljava/util/List;
+PLcom/android/server/job/JobStore;->getPersistStats()Lcom/android/server/job/JobSchedulerInternal$JobStorePersistStats;
+PLcom/android/server/job/JobStore;->initAndGet(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/JobStore;
+PLcom/android/server/job/JobStore;->jobTimesInflatedValid()Z
+PLcom/android/server/job/JobStore;->readJobMapFromDisk(Lcom/android/server/job/JobStore$JobSet;Z)V
+PLcom/android/server/job/JobStore;->removeJobsOfNonUsers([I)V
+PLcom/android/server/job/controllers/AppIdleController$AppIdleStateChangeListener;-><init>(Lcom/android/server/job/controllers/AppIdleController;)V
+PLcom/android/server/job/controllers/AppIdleController$AppIdleStateChangeListener;-><init>(Lcom/android/server/job/controllers/AppIdleController;Lcom/android/server/job/controllers/AppIdleController$AppIdleStateChangeListener;)V
+PLcom/android/server/job/controllers/AppIdleController$AppIdleStateChangeListener;->onParoleStateChanged(Z)V
+PLcom/android/server/job/controllers/AppIdleController$GlobalUpdateFunc;-><init>(Lcom/android/server/job/controllers/AppIdleController;)V
+PLcom/android/server/job/controllers/AppIdleController;->-get0(Lcom/android/server/job/controllers/AppIdleController;)Lcom/android/server/job/JobSchedulerService;
+PLcom/android/server/job/controllers/AppIdleController;->-get1(Lcom/android/server/job/controllers/AppIdleController;)Landroid/app/usage/UsageStatsManagerInternal;
+PLcom/android/server/job/controllers/AppIdleController;-><init>(Lcom/android/server/job/JobSchedulerService;Landroid/content/Context;Ljava/lang/Object;)V
+PLcom/android/server/job/controllers/AppIdleController;->get(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/controllers/AppIdleController;
+PLcom/android/server/job/controllers/AppIdleController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V
+PLcom/android/server/job/controllers/AppIdleController;->setAppIdleParoleOn(Z)V
+PLcom/android/server/job/controllers/BatteryController$ChargingTracker;-><init>(Lcom/android/server/job/controllers/BatteryController;)V
+PLcom/android/server/job/controllers/BatteryController$ChargingTracker;->isBatteryNotLow()Z
+PLcom/android/server/job/controllers/BatteryController$ChargingTracker;->isOnStablePower()Z
+PLcom/android/server/job/controllers/BatteryController$ChargingTracker;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/job/controllers/BatteryController$ChargingTracker;->onReceiveInternal(Landroid/content/Intent;)V
+PLcom/android/server/job/controllers/BatteryController$ChargingTracker;->startTracking()V
+PLcom/android/server/job/controllers/BatteryController;->-wrap0(Lcom/android/server/job/controllers/BatteryController;)V
+PLcom/android/server/job/controllers/BatteryController;-><init>(Lcom/android/server/job/StateChangedListener;Landroid/content/Context;Ljava/lang/Object;)V
+PLcom/android/server/job/controllers/BatteryController;->get(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/controllers/BatteryController;
+PLcom/android/server/job/controllers/ConnectivityController$1;-><init>(Lcom/android/server/job/controllers/ConnectivityController;)V
+PLcom/android/server/job/controllers/ConnectivityController$1;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
+PLcom/android/server/job/controllers/ConnectivityController$2;-><init>(Lcom/android/server/job/controllers/ConnectivityController;)V
+PLcom/android/server/job/controllers/ConnectivityController$2;->onMeteredIfacesChanged([Ljava/lang/String;)V
+PLcom/android/server/job/controllers/ConnectivityController$2;->onUidRulesChanged(II)V
+PLcom/android/server/job/controllers/ConnectivityController;->-wrap0(Lcom/android/server/job/controllers/ConnectivityController;I)V
+PLcom/android/server/job/controllers/ConnectivityController;-><init>(Lcom/android/server/job/StateChangedListener;Landroid/content/Context;Ljava/lang/Object;)V
+PLcom/android/server/job/controllers/ConnectivityController;->get(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/controllers/ConnectivityController;
+PLcom/android/server/job/controllers/ContentObserverController$JobInstance;-><init>(Lcom/android/server/job/controllers/ContentObserverController;Lcom/android/server/job/controllers/JobStatus;)V
+PLcom/android/server/job/controllers/ContentObserverController$JobInstance;->detachLocked()V
+PLcom/android/server/job/controllers/ContentObserverController$JobInstance;->scheduleLocked()V
+PLcom/android/server/job/controllers/ContentObserverController$JobInstance;->trigger()V
+PLcom/android/server/job/controllers/ContentObserverController$JobInstance;->unscheduleLocked()V
+PLcom/android/server/job/controllers/ContentObserverController$ObserverInstance;-><init>(Lcom/android/server/job/controllers/ContentObserverController;Landroid/os/Handler;Landroid/app/job/JobInfo$TriggerContentUri;I)V
+PLcom/android/server/job/controllers/ContentObserverController$ObserverInstance;->onChange(ZLandroid/net/Uri;)V
+PLcom/android/server/job/controllers/ContentObserverController$TriggerRunnable;-><init>(Lcom/android/server/job/controllers/ContentObserverController$JobInstance;)V
+PLcom/android/server/job/controllers/ContentObserverController$TriggerRunnable;->run()V
+PLcom/android/server/job/controllers/ContentObserverController;-><init>(Lcom/android/server/job/StateChangedListener;Landroid/content/Context;Ljava/lang/Object;)V
+PLcom/android/server/job/controllers/ContentObserverController;->get(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/controllers/ContentObserverController;
+PLcom/android/server/job/controllers/ContentObserverController;->rescheduleForFailureLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
+PLcom/android/server/job/controllers/DeviceIdleJobsController$1;-><init>(Lcom/android/server/job/controllers/DeviceIdleJobsController;)V
+PLcom/android/server/job/controllers/DeviceIdleJobsController$2;-><init>(Lcom/android/server/job/controllers/DeviceIdleJobsController;)V
+PLcom/android/server/job/controllers/DeviceIdleJobsController;-><init>(Lcom/android/server/job/JobSchedulerService;Landroid/content/Context;Ljava/lang/Object;)V
+PLcom/android/server/job/controllers/DeviceIdleJobsController;->get(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/controllers/DeviceIdleJobsController;
+PLcom/android/server/job/controllers/DeviceIdleJobsController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V
+PLcom/android/server/job/controllers/IdleController$IdlenessTracker;-><init>(Lcom/android/server/job/controllers/IdleController;)V
+PLcom/android/server/job/controllers/IdleController$IdlenessTracker;->isIdle()Z
+PLcom/android/server/job/controllers/IdleController$IdlenessTracker;->startTracking()V
+PLcom/android/server/job/controllers/IdleController;-><init>(Lcom/android/server/job/StateChangedListener;Landroid/content/Context;Ljava/lang/Object;)V
+PLcom/android/server/job/controllers/IdleController;->get(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/controllers/IdleController;
+PLcom/android/server/job/controllers/IdleController;->initIdleStateTracking()V
+PLcom/android/server/job/controllers/JobStatus;-><init>(Landroid/app/job/JobInfo;ILjava/lang/String;ILjava/lang/String;JJJJLandroid/util/Pair;)V
+PLcom/android/server/job/controllers/JobStatus;-><init>(Lcom/android/server/job/controllers/JobStatus;JJIJJ)V
+PLcom/android/server/job/controllers/JobStatus;->clearPersistedUtcTimes()V
+PLcom/android/server/job/controllers/JobStatus;->completeWorkLocked(Landroid/app/IActivityManager;I)Z
+PLcom/android/server/job/controllers/JobStatus;->getTag()Ljava/lang/String;
+PLcom/android/server/job/controllers/JobStatus;->getTriggerContentMaxDelay()J
+PLcom/android/server/job/controllers/JobStatus;->getTriggerContentUpdateDelay()J
+PLcom/android/server/job/controllers/JobStatus;->hasExecutingWorkLocked()Z
+PLcom/android/server/job/controllers/JobStatus;->hasWorkLocked()Z
+PLcom/android/server/job/controllers/JobStatus;->isPreparedLocked()Z
+PLcom/android/server/job/controllers/JobStatus;->setBatteryNotLowConstraintSatisfied(Z)Z
+PLcom/android/server/job/controllers/JobStatus;->setChargingConstraintSatisfied(Z)Z
+PLcom/android/server/job/controllers/JobStatus;->setContentTriggerConstraintSatisfied(Z)Z
+PLcom/android/server/job/controllers/JobStatus;->setDeadlineConstraintSatisfied(Z)Z
+PLcom/android/server/job/controllers/JobStatus;->setIdleConstraintSatisfied(Z)Z
+PLcom/android/server/job/controllers/JobStatus;->ungrantWorkItem(Landroid/app/IActivityManager;Landroid/app/job/JobWorkItem;)V
+PLcom/android/server/job/controllers/StateController;-><init>(Lcom/android/server/job/StateChangedListener;Landroid/content/Context;Ljava/lang/Object;)V
+PLcom/android/server/job/controllers/StateController;->rescheduleForFailureLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
+PLcom/android/server/job/controllers/StorageController$StorageTracker;-><init>(Lcom/android/server/job/controllers/StorageController;)V
+PLcom/android/server/job/controllers/StorageController$StorageTracker;->startTracking()V
+PLcom/android/server/job/controllers/StorageController;-><init>(Lcom/android/server/job/StateChangedListener;Landroid/content/Context;Ljava/lang/Object;)V
+PLcom/android/server/job/controllers/StorageController;->get(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/controllers/StorageController;
+PLcom/android/server/job/controllers/TimeController$1;-><init>(Lcom/android/server/job/controllers/TimeController;)V
+PLcom/android/server/job/controllers/TimeController$1;->onAlarm()V
+PLcom/android/server/job/controllers/TimeController$2;-><init>(Lcom/android/server/job/controllers/TimeController;)V
+PLcom/android/server/job/controllers/TimeController$2;->onAlarm()V
+PLcom/android/server/job/controllers/TimeController;->-wrap0(Lcom/android/server/job/controllers/TimeController;)V
+PLcom/android/server/job/controllers/TimeController;->-wrap1(Lcom/android/server/job/controllers/TimeController;)V
+PLcom/android/server/job/controllers/TimeController;-><init>(Lcom/android/server/job/StateChangedListener;Landroid/content/Context;Ljava/lang/Object;)V
+PLcom/android/server/job/controllers/TimeController;->canStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;)Z
+PLcom/android/server/job/controllers/TimeController;->ensureAlarmServiceLocked()V
+PLcom/android/server/job/controllers/TimeController;->get(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/controllers/TimeController;
+PLcom/android/server/job/controllers/TimeController;->maybeUpdateAlarmsLocked(JJI)V
+PLcom/android/server/job/controllers/TimeController;->setDeadlineExpiredAlarmLocked(JI)V
+PLcom/android/server/lights/LightsService$LightImpl;->turnOff()V
+PLcom/android/server/location/-$Lambda$LbPzwzo3JyvLa845qcqGRfVQJq4;->$m$0(I)Z
+PLcom/android/server/location/-$Lambda$LbPzwzo3JyvLa845qcqGRfVQJq4;->$m$1(I)Z
+PLcom/android/server/location/-$Lambda$LbPzwzo3JyvLa845qcqGRfVQJq4;->$m$2(I)Z
+PLcom/android/server/location/-$Lambda$LbPzwzo3JyvLa845qcqGRfVQJq4;->$m$3(I)Z
+PLcom/android/server/location/-$Lambda$LbPzwzo3JyvLa845qcqGRfVQJq4;->$m$4(I)Z
+PLcom/android/server/location/-$Lambda$LbPzwzo3JyvLa845qcqGRfVQJq4;-><init>(B)V
+PLcom/android/server/location/-$Lambda$LbPzwzo3JyvLa845qcqGRfVQJq4;->set(I)Z
+PLcom/android/server/location/ActivityRecognitionProxy$1;-><init>(Lcom/android/server/location/ActivityRecognitionProxy;)V
+PLcom/android/server/location/ActivityRecognitionProxy$1;->run()V
+PLcom/android/server/location/ActivityRecognitionProxy;->-wrap0(Lcom/android/server/location/ActivityRecognitionProxy;)V
+PLcom/android/server/location/ActivityRecognitionProxy;-><init>(Landroid/content/Context;Landroid/os/Handler;ZLandroid/hardware/location/ActivityRecognitionHardware;III)V
+PLcom/android/server/location/ActivityRecognitionProxy;->bindProvider()V
+PLcom/android/server/location/ActivityRecognitionProxy;->createAndBind(Landroid/content/Context;Landroid/os/Handler;ZLandroid/hardware/location/ActivityRecognitionHardware;III)Lcom/android/server/location/ActivityRecognitionProxy;
+PLcom/android/server/location/ComprehensiveCountryDetector$1;-><init>(Lcom/android/server/location/ComprehensiveCountryDetector;)V
+PLcom/android/server/location/ComprehensiveCountryDetector$1;->onCountryDetected(Landroid/location/Country;)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
+PLcom/android/server/location/ComprehensiveCountryDetector$3;-><init>(Lcom/android/server/location/ComprehensiveCountryDetector;)V
+PLcom/android/server/location/ComprehensiveCountryDetector$4;-><init>(Lcom/android/server/location/ComprehensiveCountryDetector;)V
+PLcom/android/server/location/ComprehensiveCountryDetector;->-set1(Lcom/android/server/location/ComprehensiveCountryDetector;Landroid/location/Country;)Landroid/location/Country;
+PLcom/android/server/location/ComprehensiveCountryDetector;->-wrap0(Lcom/android/server/location/ComprehensiveCountryDetector;ZZ)Landroid/location/Country;
+PLcom/android/server/location/ComprehensiveCountryDetector;->-wrap2(Lcom/android/server/location/ComprehensiveCountryDetector;)V
+PLcom/android/server/location/ComprehensiveCountryDetector;-><init>(Landroid/content/Context;)V
+PLcom/android/server/location/ComprehensiveCountryDetector;->addPhoneStateListener()V
+PLcom/android/server/location/ComprehensiveCountryDetector;->addToLogs(Landroid/location/Country;)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;->getLastKnownLocationBasedCountry()Landroid/location/Country;
+PLcom/android/server/location/ComprehensiveCountryDetector;->getLocaleCountry()Landroid/location/Country;
+PLcom/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
+PLcom/android/server/location/ComprehensiveCountryDetector;->isNetworkCountryCodeAvailable()Z
+PLcom/android/server/location/ComprehensiveCountryDetector;->notifyIfCountryChanged(Landroid/location/Country;Landroid/location/Country;)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
+PLcom/android/server/location/ComprehensiveCountryDetector;->scheduleLocationRefresh()V
+PLcom/android/server/location/ComprehensiveCountryDetector;->setCountryListener(Landroid/location/CountryListener;)V
+PLcom/android/server/location/ComprehensiveCountryDetector;->startLocationBasedDetector(Landroid/location/CountryListener;)V
+PLcom/android/server/location/ComprehensiveCountryDetector;->stopLocationBasedDetector()V
+PLcom/android/server/location/ContextHubService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/location/ContextHubService;->checkPermissions()V
+PLcom/android/server/location/ContextHubService;->getContextHubHandles()[I
+PLcom/android/server/location/ContextHubService;->getContextHubInfo(I)Landroid/hardware/location/ContextHubInfo;
+PLcom/android/server/location/ContextHubService;->getNanoAppInstanceInfo(I)Landroid/hardware/location/NanoAppInstanceInfo;
+PLcom/android/server/location/ContextHubService;->registerCallback(Landroid/hardware/location/IContextHubCallback;)I
+PLcom/android/server/location/ContextHubService;->sendMessage(IILandroid/hardware/location/ContextHubMessage;)I
+PLcom/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
+PLcom/android/server/location/FlpHardwareProvider;->isSupported()Z
+PLcom/android/server/location/GeocoderProxy;-><init>(Landroid/content/Context;IIILandroid/os/Handler;)V
+PLcom/android/server/location/GeocoderProxy;->bind()Z
+PLcom/android/server/location/GeocoderProxy;->createAndBind(Landroid/content/Context;IIILandroid/os/Handler;)Lcom/android/server/location/GeocoderProxy;
+PLcom/android/server/location/GeocoderProxy;->getConnectedPackageName()Ljava/lang/String;
+PLcom/android/server/location/GeocoderProxy;->getFromLocation(DDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String;
+PLcom/android/server/location/GeocoderProxy;->getService()Landroid/location/IGeocodeProvider;
+PLcom/android/server/location/GeofenceManager$1;-><init>(Lcom/android/server/location/GeofenceManager;Landroid/os/Handler;)V
+PLcom/android/server/location/GeofenceManager$GeofenceHandler;-><init>(Lcom/android/server/location/GeofenceManager;)V
+PLcom/android/server/location/GeofenceManager;-><init>(Landroid/content/Context;Lcom/android/server/location/LocationBlacklist;)V
+PLcom/android/server/location/GeofenceManager;->updateMinInterval()V
+PLcom/android/server/location/GeofenceProxy$1;-><init>(Lcom/android/server/location/GeofenceProxy;)V
+PLcom/android/server/location/GeofenceProxy$1;->run()V
+PLcom/android/server/location/GeofenceProxy$2;-><init>(Lcom/android/server/location/GeofenceProxy;)V
+PLcom/android/server/location/GeofenceProxy$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/location/GeofenceProxy$3;-><init>(Lcom/android/server/location/GeofenceProxy;)V
+PLcom/android/server/location/GeofenceProxy$3;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/location/GeofenceProxy;->-get0(Lcom/android/server/location/GeofenceProxy;)Landroid/hardware/location/IGeofenceHardware;
+PLcom/android/server/location/GeofenceProxy;->-get1(Lcom/android/server/location/GeofenceProxy;)Landroid/os/Handler;
+PLcom/android/server/location/GeofenceProxy;->-get2(Lcom/android/server/location/GeofenceProxy;)Ljava/lang/Object;
+PLcom/android/server/location/GeofenceProxy;->-set0(Lcom/android/server/location/GeofenceProxy;Landroid/hardware/location/IGeofenceHardware;)Landroid/hardware/location/IGeofenceHardware;
+PLcom/android/server/location/GeofenceProxy;->-wrap0(Lcom/android/server/location/GeofenceProxy;)V
+PLcom/android/server/location/GeofenceProxy;->-wrap1(Lcom/android/server/location/GeofenceProxy;)V
+PLcom/android/server/location/GeofenceProxy;->-wrap2(Lcom/android/server/location/GeofenceProxy;)V
+PLcom/android/server/location/GeofenceProxy;-><init>(Landroid/content/Context;IIILandroid/os/Handler;Landroid/location/IGpsGeofenceHardware;Landroid/location/IFusedGeofenceHardware;)V
+PLcom/android/server/location/GeofenceProxy;->bindGeofenceProvider()Z
+PLcom/android/server/location/GeofenceProxy;->bindHardwareGeofence()V
+PLcom/android/server/location/GeofenceProxy;->createAndBind(Landroid/content/Context;IIILandroid/os/Handler;Landroid/location/IGpsGeofenceHardware;Landroid/location/IFusedGeofenceHardware;)Lcom/android/server/location/GeofenceProxy;
+PLcom/android/server/location/GeofenceProxy;->setFusedGeofenceLocked()V
+PLcom/android/server/location/GeofenceProxy;->setGeofenceHardwareInProviderLocked()V
+PLcom/android/server/location/GeofenceProxy;->setGpsGeofenceLocked()V
+PLcom/android/server/location/GnssLocationProvider$10;-><init>(Lcom/android/server/location/GnssLocationProvider;Landroid/os/Handler;)V
+PLcom/android/server/location/GnssLocationProvider$10;->isAvailableInPlatform()Z
+PLcom/android/server/location/GnssLocationProvider$10;->isGpsEnabled()Z
+PLcom/android/server/location/GnssLocationProvider$11;-><init>(Lcom/android/server/location/GnssLocationProvider;Landroid/os/Handler;)V
+PLcom/android/server/location/GnssLocationProvider$11;->isAvailableInPlatform()Z
+PLcom/android/server/location/GnssLocationProvider$11;->isGpsEnabled()Z
+PLcom/android/server/location/GnssLocationProvider$12;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$12;->run()V
+PLcom/android/server/location/GnssLocationProvider$16;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$17;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$18;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$1;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$1;->registerGnssStatusCallback(Landroid/location/IGnssStatusListener;)V
+PLcom/android/server/location/GnssLocationProvider$1;->unregisterGnssStatusCallback(Landroid/location/IGnssStatusListener;)V
+PLcom/android/server/location/GnssLocationProvider$2;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$2;->onAvailable(Landroid/net/Network;)V
+PLcom/android/server/location/GnssLocationProvider$3;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$4;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/location/GnssLocationProvider$5;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$5;->onSubscriptionsChanged()V
+PLcom/android/server/location/GnssLocationProvider$6;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$6;->isHardwareGeofenceSupported()Z
+PLcom/android/server/location/GnssLocationProvider$7;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$8;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$8;->lambda$-com_android_server_location_GnssLocationProvider$8_25217(I)Z
+PLcom/android/server/location/GnssLocationProvider$8;->lambda$-com_android_server_location_GnssLocationProvider$8_25294(I)Z
+PLcom/android/server/location/GnssLocationProvider$8;->lambda$-com_android_server_location_GnssLocationProvider$8_25366(I)Z
+PLcom/android/server/location/GnssLocationProvider$8;->lambda$-com_android_server_location_GnssLocationProvider$8_25440(I)Z
+PLcom/android/server/location/GnssLocationProvider$8;->lambda$-com_android_server_location_GnssLocationProvider$8_25536(I)Z
+PLcom/android/server/location/GnssLocationProvider$9;-><init>(Lcom/android/server/location/GnssLocationProvider;Landroid/os/Handler;)V
+PLcom/android/server/location/GnssLocationProvider$9;->isAvailableInPlatform()Z
+PLcom/android/server/location/GnssLocationProvider$9;->isGpsEnabled()Z
+PLcom/android/server/location/GnssLocationProvider$BackOff;-><init>(JJ)V
+PLcom/android/server/location/GnssLocationProvider$BackOff;->reset()V
+PLcom/android/server/location/GnssLocationProvider$GpsRequest;-><init>(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
+PLcom/android/server/location/GnssLocationProvider$NetworkLocationListener;-><init>(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider$NetworkLocationListener;-><init>(Lcom/android/server/location/GnssLocationProvider;Lcom/android/server/location/GnssLocationProvider$NetworkLocationListener;)V
+PLcom/android/server/location/GnssLocationProvider$NetworkLocationListener;->onLocationChanged(Landroid/location/Location;)V
+PLcom/android/server/location/GnssLocationProvider$ProviderHandler;-><init>(Lcom/android/server/location/GnssLocationProvider;Landroid/os/Looper;)V
+PLcom/android/server/location/GnssLocationProvider$ProviderHandler;->handleInitialize()V
+PLcom/android/server/location/GnssLocationProvider;->-get0()Z
+PLcom/android/server/location/GnssLocationProvider;->-get1(Lcom/android/server/location/GnssLocationProvider;)Landroid/content/BroadcastReceiver;
+PLcom/android/server/location/GnssLocationProvider;->-get10(Lcom/android/server/location/GnssLocationProvider;)I
+PLcom/android/server/location/GnssLocationProvider;->-get11(Lcom/android/server/location/GnssLocationProvider;)Lcom/android/server/location/GnssStatusListenerHelper;
+PLcom/android/server/location/GnssLocationProvider;->-get13(Lcom/android/server/location/GnssLocationProvider;)Landroid/net/ConnectivityManager$NetworkCallback;
+PLcom/android/server/location/GnssLocationProvider;->-get14(Lcom/android/server/location/GnssLocationProvider;)Lcom/android/server/location/GnssLocationProvider$BackOff;
+PLcom/android/server/location/GnssLocationProvider;->-get15(Lcom/android/server/location/GnssLocationProvider;)Landroid/util/NtpTrustedTime;
+PLcom/android/server/location/GnssLocationProvider;->-get16(Lcom/android/server/location/GnssLocationProvider;)Z
+PLcom/android/server/location/GnssLocationProvider;->-get17(Lcom/android/server/location/GnssLocationProvider;)Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;
+PLcom/android/server/location/GnssLocationProvider;->-get18(Lcom/android/server/location/GnssLocationProvider;)Ljava/util/Properties;
+PLcom/android/server/location/GnssLocationProvider;->-get19(Lcom/android/server/location/GnssLocationProvider;)Landroid/os/PowerManager$WakeLock;
+PLcom/android/server/location/GnssLocationProvider;->-get2(Lcom/android/server/location/GnssLocationProvider;)Landroid/net/ConnectivityManager;
+PLcom/android/server/location/GnssLocationProvider;->-get3(Lcom/android/server/location/GnssLocationProvider;)Landroid/content/Context;
+PLcom/android/server/location/GnssLocationProvider;->-get4(Lcom/android/server/location/GnssLocationProvider;)I
+PLcom/android/server/location/GnssLocationProvider;->-get9(Lcom/android/server/location/GnssLocationProvider;)Landroid/os/Handler;
+PLcom/android/server/location/GnssLocationProvider;->-set1(Lcom/android/server/location/GnssLocationProvider;I)I
+PLcom/android/server/location/GnssLocationProvider;->-wrap1()Z
+PLcom/android/server/location/GnssLocationProvider;->-wrap11(I)Z
+PLcom/android/server/location/GnssLocationProvider;->-wrap12(I)Z
+PLcom/android/server/location/GnssLocationProvider;->-wrap13(I)Z
+PLcom/android/server/location/GnssLocationProvider;->-wrap14(I)Z
+PLcom/android/server/location/GnssLocationProvider;->-wrap2()Z
+PLcom/android/server/location/GnssLocationProvider;->-wrap22(Lcom/android/server/location/GnssLocationProvider;I)Ljava/lang/String;
+PLcom/android/server/location/GnssLocationProvider;->-wrap24(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider;->-wrap25(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider;->-wrap26(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider;->-wrap29(Lcom/android/server/location/GnssLocationProvider;Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
+PLcom/android/server/location/GnssLocationProvider;->-wrap3()Z
+PLcom/android/server/location/GnssLocationProvider;->-wrap30(Lcom/android/server/location/GnssLocationProvider;Landroid/location/Location;)V
+PLcom/android/server/location/GnssLocationProvider;->-wrap31(Lcom/android/server/location/GnssLocationProvider;Landroid/net/Network;)V
+PLcom/android/server/location/GnssLocationProvider;->-wrap34(Lcom/android/server/location/GnssLocationProvider;JJI)V
+PLcom/android/server/location/GnssLocationProvider;->-wrap38(Lcom/android/server/location/GnssLocationProvider;Landroid/content/Context;Ljava/util/Properties;)V
+PLcom/android/server/location/GnssLocationProvider;->-wrap39(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider;->-wrap4()Z
+PLcom/android/server/location/GnssLocationProvider;->-wrap40(Lcom/android/server/location/GnssLocationProvider;IILjava/lang/Object;)V
+PLcom/android/server/location/GnssLocationProvider;->-wrap42(Lcom/android/server/location/GnssLocationProvider;Landroid/content/Context;)V
+PLcom/android/server/location/GnssLocationProvider;->-wrap44(Lcom/android/server/location/GnssLocationProvider;)V
+PLcom/android/server/location/GnssLocationProvider;->-wrap9(I)Z
+PLcom/android/server/location/GnssLocationProvider;-><init>(Landroid/content/Context;Landroid/location/ILocationManager;Landroid/os/Looper;)V
+PLcom/android/server/location/GnssLocationProvider;->enable()V
+PLcom/android/server/location/GnssLocationProvider;->enableBatching()V
+PLcom/android/server/location/GnssLocationProvider;->getGnssBatchingProvider()Lcom/android/server/location/GnssLocationProvider$GnssBatchingProvider;
+PLcom/android/server/location/GnssLocationProvider;->getGnssMeasurementsProvider()Lcom/android/server/location/GnssMeasurementsProvider;
+PLcom/android/server/location/GnssLocationProvider;->getGnssMetricsProvider()Lcom/android/server/location/GnssLocationProvider$GnssMetricsProvider;
+PLcom/android/server/location/GnssLocationProvider;->getGnssNavigationMessageProvider()Lcom/android/server/location/GnssNavigationMessageProvider;
+PLcom/android/server/location/GnssLocationProvider;->getGnssStatusProvider()Landroid/location/IGnssStatusProvider;
+PLcom/android/server/location/GnssLocationProvider;->getGnssSystemInfoProvider()Lcom/android/server/location/GnssLocationProvider$GnssSystemInfoProvider;
+PLcom/android/server/location/GnssLocationProvider;->getGpsGeofenceProxy()Landroid/location/IGpsGeofenceHardware;
+PLcom/android/server/location/GnssLocationProvider;->getName()Ljava/lang/String;
+PLcom/android/server/location/GnssLocationProvider;->getNetInitiatedListener()Landroid/location/INetInitiatedListener;
+PLcom/android/server/location/GnssLocationProvider;->getProperties()Lcom/android/internal/location/ProviderProperties;
+PLcom/android/server/location/GnssLocationProvider;->getSelectedApn()Ljava/lang/String;
+PLcom/android/server/location/GnssLocationProvider;->getSuplMode(Ljava/util/Properties;ZZ)I
+PLcom/android/server/location/GnssLocationProvider;->handleDownloadXtraData()V
+PLcom/android/server/location/GnssLocationProvider;->handleEnable()V
+PLcom/android/server/location/GnssLocationProvider;->handleInjectNtpTime()V
+PLcom/android/server/location/GnssLocationProvider;->handleSetRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
+PLcom/android/server/location/GnssLocationProvider;->handleUpdateNetworkState(Landroid/net/Network;)V
+PLcom/android/server/location/GnssLocationProvider;->hasCapability(I)Z
+PLcom/android/server/location/GnssLocationProvider;->isDataNetworkConnected()Z
+PLcom/android/server/location/GnssLocationProvider;->isEnabled()Z
+PLcom/android/server/location/GnssLocationProvider;->isSupported()Z
+PLcom/android/server/location/GnssLocationProvider;->loadPropertiesFromFile(Ljava/lang/String;Ljava/util/Properties;)Z
+PLcom/android/server/location/GnssLocationProvider;->loadPropertiesFromResource(Landroid/content/Context;Ljava/util/Properties;)V
+PLcom/android/server/location/GnssLocationProvider;->messageIdAsString(I)Ljava/lang/String;
+PLcom/android/server/location/GnssLocationProvider;->reloadGpsProperties(Landroid/content/Context;Ljava/util/Properties;)V
+PLcom/android/server/location/GnssLocationProvider;->reportStatus(I)V
+PLcom/android/server/location/GnssLocationProvider;->requestUtcTime()V
+PLcom/android/server/location/GnssLocationProvider;->setEngineCapabilities(I)V
+PLcom/android/server/location/GnssLocationProvider;->setGnssYearOfHardware(I)V
+PLcom/android/server/location/GnssLocationProvider;->setLocationExtras(Landroid/os/Bundle;)V
+PLcom/android/server/location/GnssLocationProvider;->setRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
+PLcom/android/server/location/GnssLocationProvider;->setSuplHostPort(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/location/GnssLocationProvider;->startNavigating(Z)V
+PLcom/android/server/location/GnssLocationProvider;->stopNavigating()V
+PLcom/android/server/location/GnssLocationProvider;->subscriptionOrSimChanged(Landroid/content/Context;)V
+PLcom/android/server/location/GnssLocationProvider;->updateClientUids(Landroid/os/WorkSource;)V
+PLcom/android/server/location/GnssLocationProvider;->xtraDownloadRequest()V
+PLcom/android/server/location/GnssMeasurementsProvider;-><init>(Landroid/os/Handler;)V
+PLcom/android/server/location/GnssMeasurementsProvider;->onCapabilitiesUpdated(Z)V
+PLcom/android/server/location/GnssMeasurementsProvider;->onGpsEnabledChanged()V
+PLcom/android/server/location/GnssNavigationMessageProvider$StatusChangedOperation;-><init>(I)V
+PLcom/android/server/location/GnssNavigationMessageProvider;-><init>(Landroid/os/Handler;)V
+PLcom/android/server/location/GnssNavigationMessageProvider;->getHandlerOperation(I)Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;
+PLcom/android/server/location/GnssNavigationMessageProvider;->onCapabilitiesUpdated(Z)V
+PLcom/android/server/location/GnssNavigationMessageProvider;->onGpsEnabledChanged()V
+PLcom/android/server/location/GnssStatusListenerHelper$1;-><init>(Lcom/android/server/location/GnssStatusListenerHelper;)V
+PLcom/android/server/location/GnssStatusListenerHelper$1;->execute(Landroid/location/IGnssStatusListener;)V
+PLcom/android/server/location/GnssStatusListenerHelper$1;->execute(Landroid/os/IInterface;)V
+PLcom/android/server/location/GnssStatusListenerHelper$2;-><init>(Lcom/android/server/location/GnssStatusListenerHelper;)V
+PLcom/android/server/location/GnssStatusListenerHelper$2;->execute(Landroid/location/IGnssStatusListener;)V
+PLcom/android/server/location/GnssStatusListenerHelper$2;->execute(Landroid/os/IInterface;)V
+PLcom/android/server/location/GnssStatusListenerHelper;-><init>(Landroid/os/Handler;)V
+PLcom/android/server/location/GnssStatusListenerHelper;->getHandlerOperation(I)Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;
+PLcom/android/server/location/GnssStatusListenerHelper;->onStatusChanged(Z)V
+PLcom/android/server/location/GnssStatusListenerHelper;->registerWithService()Z
+PLcom/android/server/location/GnssStatusListenerHelper;->unregisterFromService()V
+PLcom/android/server/location/LocationBasedCountryDetector$1;-><init>(Lcom/android/server/location/LocationBasedCountryDetector;)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;->-wrap0(Lcom/android/server/location/LocationBasedCountryDetector;Landroid/location/Location;)V
+PLcom/android/server/location/LocationBasedCountryDetector;-><init>(Landroid/content/Context;)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
+PLcom/android/server/location/LocationBlacklist;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
+PLcom/android/server/location/LocationBlacklist;->getStringArrayLocked(Ljava/lang/String;)[Ljava/lang/String;
+PLcom/android/server/location/LocationBlacklist;->init()V
+PLcom/android/server/location/LocationBlacklist;->reloadBlacklist()V
+PLcom/android/server/location/LocationBlacklist;->reloadBlacklistLocked()V
+PLcom/android/server/location/LocationFudger$1;-><init>(Lcom/android/server/location/LocationFudger;Landroid/os/Handler;)V
+PLcom/android/server/location/LocationFudger;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
+PLcom/android/server/location/LocationFudger;->addCoarseLocationExtraLocked(Landroid/location/Location;)Landroid/location/Location;
+PLcom/android/server/location/LocationFudger;->createCoarseLocked(Landroid/location/Location;)Landroid/location/Location;
+PLcom/android/server/location/LocationFudger;->loadCoarseAccuracy()F
+PLcom/android/server/location/LocationFudger;->metersToDegreesLatitude(D)D
+PLcom/android/server/location/LocationFudger;->metersToDegreesLongitude(DD)D
+PLcom/android/server/location/LocationFudger;->nextOffsetLocked()D
+PLcom/android/server/location/LocationFudger;->setAccuracyInMetersLocked(F)V
+PLcom/android/server/location/LocationFudger;->updateRandomOffsetLocked()V
+PLcom/android/server/location/LocationFudger;->wrapLatitude(D)D
+PLcom/android/server/location/LocationFudger;->wrapLongitude(D)D
+PLcom/android/server/location/LocationProviderProxy$1;-><init>(Lcom/android/server/location/LocationProviderProxy;)V
+PLcom/android/server/location/LocationProviderProxy$1;->run()V
+PLcom/android/server/location/LocationProviderProxy;->-get0()Z
+PLcom/android/server/location/LocationProviderProxy;->-get1(Lcom/android/server/location/LocationProviderProxy;)Z
+PLcom/android/server/location/LocationProviderProxy;->-get2(Lcom/android/server/location/LocationProviderProxy;)Ljava/lang/Object;
+PLcom/android/server/location/LocationProviderProxy;->-get3(Lcom/android/server/location/LocationProviderProxy;)Lcom/android/internal/location/ProviderRequest;
+PLcom/android/server/location/LocationProviderProxy;->-get5(Lcom/android/server/location/LocationProviderProxy;)Landroid/os/WorkSource;
+PLcom/android/server/location/LocationProviderProxy;->-set0(Lcom/android/server/location/LocationProviderProxy;Lcom/android/internal/location/ProviderProperties;)Lcom/android/internal/location/ProviderProperties;
+PLcom/android/server/location/LocationProviderProxy;->-wrap0(Lcom/android/server/location/LocationProviderProxy;)Lcom/android/internal/location/ILocationProvider;
+PLcom/android/server/location/LocationProviderProxy;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;IIILandroid/os/Handler;)V
+PLcom/android/server/location/LocationProviderProxy;->bind()Z
+PLcom/android/server/location/LocationProviderProxy;->createAndBind(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;IIILandroid/os/Handler;)Lcom/android/server/location/LocationProviderProxy;
+PLcom/android/server/location/LocationProviderProxy;->enable()V
+PLcom/android/server/location/LocationProviderProxy;->getConnectedPackageName()Ljava/lang/String;
+PLcom/android/server/location/LocationProviderProxy;->getProperties()Lcom/android/internal/location/ProviderProperties;
+PLcom/android/server/location/LocationProviderProxy;->getService()Lcom/android/internal/location/ILocationProvider;
+PLcom/android/server/location/LocationProviderProxy;->getStatus(Landroid/os/Bundle;)I
+PLcom/android/server/location/LocationProviderProxy;->getStatusUpdateTime()J
+PLcom/android/server/location/LocationProviderProxy;->isEnabled()Z
+PLcom/android/server/location/LocationProviderProxy;->setRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
+PLcom/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;->hashCode()I
+PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->-wrap0(Lcom/android/server/location/LocationRequestStatistics$PackageStatistics;J)V
+PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->-wrap1(Lcom/android/server/location/LocationRequestStatistics$PackageStatistics;)V
+PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;-><init>()V
+PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;-><init>(Lcom/android/server/location/LocationRequestStatistics$PackageStatistics;)V
+PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->startRequesting(J)V
+PLcom/android/server/location/LocationRequestStatistics$PackageStatistics;->stopRequesting()V
+PLcom/android/server/location/LocationRequestStatistics;-><init>()V
+PLcom/android/server/location/LocationRequestStatistics;->startRequesting(Ljava/lang/String;Ljava/lang/String;J)V
+PLcom/android/server/location/LocationRequestStatistics;->stopRequesting(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/location/PassiveProvider;-><init>(Landroid/location/ILocationManager;)V
+PLcom/android/server/location/PassiveProvider;->getName()Ljava/lang/String;
+PLcom/android/server/location/PassiveProvider;->getProperties()Lcom/android/internal/location/ProviderProperties;
+PLcom/android/server/location/PassiveProvider;->getStatus(Landroid/os/Bundle;)I
+PLcom/android/server/location/PassiveProvider;->getStatusUpdateTime()J
+PLcom/android/server/location/PassiveProvider;->isEnabled()Z
+PLcom/android/server/location/PassiveProvider;->setRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V
+PLcom/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
+PLcom/android/server/location/RemoteListenerHelper$2;-><init>(Lcom/android/server/location/RemoteListenerHelper;)V
+PLcom/android/server/location/RemoteListenerHelper$2;->run()V
+PLcom/android/server/location/RemoteListenerHelper$LinkedListener;-><init>(Lcom/android/server/location/RemoteListenerHelper;Landroid/os/IInterface;)V
+PLcom/android/server/location/RemoteListenerHelper$LinkedListener;->binderDied()V
+PLcom/android/server/location/RemoteListenerHelper;->-get1(Lcom/android/server/location/RemoteListenerHelper;)Z
+PLcom/android/server/location/RemoteListenerHelper;->-get3(Lcom/android/server/location/RemoteListenerHelper;)Ljava/lang/String;
+PLcom/android/server/location/RemoteListenerHelper;->-set0(Lcom/android/server/location/RemoteListenerHelper;Z)Z
+PLcom/android/server/location/RemoteListenerHelper;-><init>(Landroid/os/Handler;Ljava/lang/String;)V
+PLcom/android/server/location/RemoteListenerHelper;->addListener(Landroid/os/IInterface;)Z
+PLcom/android/server/location/RemoteListenerHelper;->calculateCurrentResultUnsafe()I
+PLcom/android/server/location/RemoteListenerHelper;->removeListener(Landroid/os/IInterface;)V
+PLcom/android/server/location/RemoteListenerHelper;->setSupported(Z)V
+PLcom/android/server/location/RemoteListenerHelper;->tryRegister()V
+PLcom/android/server/location/RemoteListenerHelper;->tryUnregister()V
+PLcom/android/server/location/RemoteListenerHelper;->tryUpdateRegistrationWithService()V
+PLcom/android/server/location/RemoteListenerHelper;->updateResult()V
+PLcom/android/server/locksettings/-$Lambda$uuAdbltCNvfImff6TxhVt9IC9Qw$1;->$m$0()V
+PLcom/android/server/locksettings/-$Lambda$uuAdbltCNvfImff6TxhVt9IC9Qw$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/locksettings/-$Lambda$uuAdbltCNvfImff6TxhVt9IC9Qw$1;->run()V
+PLcom/android/server/locksettings/-$Lambda$uuAdbltCNvfImff6TxhVt9IC9Qw;->$m$0()V
+PLcom/android/server/locksettings/-$Lambda$uuAdbltCNvfImff6TxhVt9IC9Qw;-><init>(ILjava/lang/Object;)V
+PLcom/android/server/locksettings/-$Lambda$uuAdbltCNvfImff6TxhVt9IC9Qw;->run()V
+PLcom/android/server/locksettings/LockSettingsService$1;-><init>(Lcom/android/server/locksettings/LockSettingsService;)V
+PLcom/android/server/locksettings/LockSettingsService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/locksettings/LockSettingsService$2;-><init>(Lcom/android/server/locksettings/LockSettingsService;I)V
+PLcom/android/server/locksettings/LockSettingsService$2;->run()V
+PLcom/android/server/locksettings/LockSettingsService$DeviceProvisionedObserver;-><init>(Lcom/android/server/locksettings/LockSettingsService;)V
+PLcom/android/server/locksettings/LockSettingsService$DeviceProvisionedObserver;->isProvisioned()Z
+PLcom/android/server/locksettings/LockSettingsService$DeviceProvisionedObserver;->onSystemReady()V
+PLcom/android/server/locksettings/LockSettingsService$DeviceProvisionedObserver;->updateRegistration()V
+PLcom/android/server/locksettings/LockSettingsService$GateKeeperDiedRecipient;-><init>(Lcom/android/server/locksettings/LockSettingsService;)V
+PLcom/android/server/locksettings/LockSettingsService$GateKeeperDiedRecipient;-><init>(Lcom/android/server/locksettings/LockSettingsService;Lcom/android/server/locksettings/LockSettingsService$GateKeeperDiedRecipient;)V
+PLcom/android/server/locksettings/LockSettingsService$Injector$1;-><init>(Lcom/android/server/locksettings/LockSettingsService$Injector;Lcom/android/server/locksettings/LockSettingsStorage;)V
+PLcom/android/server/locksettings/LockSettingsService$Injector;-><init>(Landroid/content/Context;)V
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getActivityManager()Landroid/app/IActivityManager;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getContext()Landroid/content/Context;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getHandler()Landroid/os/Handler;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getKeyStore()Landroid/security/KeyStore;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getLockPatternUtils()Lcom/android/internal/widget/LockPatternUtils;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getNotificationManager()Landroid/app/NotificationManager;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getStorage()Lcom/android/server/locksettings/LockSettingsStorage;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getStorageManager()Landroid/os/storage/IStorageManager;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getStrongAuth()Lcom/android/server/locksettings/LockSettingsStrongAuth;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getStrongAuthTracker()Lcom/android/server/locksettings/LockSettingsService$SynchronizedStrongAuthTracker;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getSyntheticPasswordManager(Lcom/android/server/locksettings/LockSettingsStorage;)Lcom/android/server/locksettings/SyntheticPasswordManager;
+PLcom/android/server/locksettings/LockSettingsService$Injector;->getUserManager()Landroid/os/UserManager;
+PLcom/android/server/locksettings/LockSettingsService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/locksettings/LockSettingsService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/locksettings/LockSettingsService$Lifecycle;->onStart()V
+PLcom/android/server/locksettings/LockSettingsService$Lifecycle;->onStartUser(I)V
+PLcom/android/server/locksettings/LockSettingsService$Lifecycle;->onUnlockUser(I)V
+PLcom/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
+PLcom/android/server/locksettings/LockSettingsService$SynchronizedStrongAuthTracker;->register(Lcom/android/server/locksettings/LockSettingsStrongAuth;)V
+PLcom/android/server/locksettings/LockSettingsService;->-get0(Lcom/android/server/locksettings/LockSettingsService;)Landroid/content/Context;
+PLcom/android/server/locksettings/LockSettingsService;->-get1(Lcom/android/server/locksettings/LockSettingsService;)Landroid/os/UserManager;
+PLcom/android/server/locksettings/LockSettingsService;->-wrap0(Lcom/android/server/locksettings/LockSettingsService;I)Z
+PLcom/android/server/locksettings/LockSettingsService;->-wrap1(Lcom/android/server/locksettings/LockSettingsService;I)V
+PLcom/android/server/locksettings/LockSettingsService;->-wrap2(Lcom/android/server/locksettings/LockSettingsService;Landroid/os/UserHandle;)V
+PLcom/android/server/locksettings/LockSettingsService;->-wrap3(Lcom/android/server/locksettings/LockSettingsService;)V
+PLcom/android/server/locksettings/LockSettingsService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/locksettings/LockSettingsService;-><init>(Lcom/android/server/locksettings/LockSettingsService$Injector;)V
+PLcom/android/server/locksettings/LockSettingsService;->addUserKeyAuth(I[B[B)V
+PLcom/android/server/locksettings/LockSettingsService;->checkPasswordReadPermission(I)V
+PLcom/android/server/locksettings/LockSettingsService;->checkVoldPassword(I)Z
+PLcom/android/server/locksettings/LockSettingsService;->checkWritePermission(I)V
+PLcom/android/server/locksettings/LockSettingsService;->clearUserKeyProtection(I)V
+PLcom/android/server/locksettings/LockSettingsService;->enforceShell()V
+PLcom/android/server/locksettings/LockSettingsService;->ensureProfileKeystoreUnlocked(I)V
+PLcom/android/server/locksettings/LockSettingsService;->fixateNewestUserKeyAuth(I)V
+PLcom/android/server/locksettings/LockSettingsService;->getBoolean(Ljava/lang/String;ZI)Z
+PLcom/android/server/locksettings/LockSettingsService;->getGateKeeperService()Landroid/service/gatekeeper/IGateKeeperService;
+PLcom/android/server/locksettings/LockSettingsService;->getString(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
+PLcom/android/server/locksettings/LockSettingsService;->getSyntheticPasswordHandleLocked(I)J
+PLcom/android/server/locksettings/LockSettingsService;->hideEncryptionNotification(Landroid/os/UserHandle;)V
+PLcom/android/server/locksettings/LockSettingsService;->isCallerShell()Z
+PLcom/android/server/locksettings/LockSettingsService;->isSyntheticPasswordBasedCredentialLocked(I)Z
+PLcom/android/server/locksettings/LockSettingsService;->isUserSecure(I)Z
+PLcom/android/server/locksettings/LockSettingsService;->lambda$-com_android_server_locksettings_LockSettingsService_80479(Landroid/app/admin/PasswordMetrics;I)V
+PLcom/android/server/locksettings/LockSettingsService;->lambda$-com_android_server_locksettings_LockSettingsService_81027(I)V
+PLcom/android/server/locksettings/LockSettingsService;->maybeShowEncryptionNotificationForUser(I)V
+PLcom/android/server/locksettings/LockSettingsService;->migrateOldData()V
+PLcom/android/server/locksettings/LockSettingsService;->migrateOldDataAfterSystemReady()V
+PLcom/android/server/locksettings/LockSettingsService;->notifyActivePasswordMetricsAvailable(Ljava/lang/String;I)V
+PLcom/android/server/locksettings/LockSettingsService;->notifyPasswordChanged(I)V
+PLcom/android/server/locksettings/LockSettingsService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
+PLcom/android/server/locksettings/LockSettingsService;->onStartUser(I)V
+PLcom/android/server/locksettings/LockSettingsService;->onUnlockUser(I)V
+PLcom/android/server/locksettings/LockSettingsService;->registerStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
+PLcom/android/server/locksettings/LockSettingsService;->removeKeystoreProfileKey(I)V
+PLcom/android/server/locksettings/LockSettingsService;->setBoolean(Ljava/lang/String;ZI)V
+PLcom/android/server/locksettings/LockSettingsService;->setKeystorePassword(Ljava/lang/String;I)V
+PLcom/android/server/locksettings/LockSettingsService;->setLockCredential(Ljava/lang/String;ILjava/lang/String;II)V
+PLcom/android/server/locksettings/LockSettingsService;->setLockCredentialInternal(Ljava/lang/String;ILjava/lang/String;II)V
+PLcom/android/server/locksettings/LockSettingsService;->setLong(Ljava/lang/String;JI)V
+PLcom/android/server/locksettings/LockSettingsService;->setSeparateProfileChallengeEnabled(IZLjava/lang/String;)V
+PLcom/android/server/locksettings/LockSettingsService;->setStringUnchecked(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/locksettings/LockSettingsService;->synchronizeUnifiedWorkChallengeForProfiles(ILjava/util/Map;)V
+PLcom/android/server/locksettings/LockSettingsService;->systemReady()V
+PLcom/android/server/locksettings/LockSettingsService;->userPresent(I)V
+PLcom/android/server/locksettings/LockSettingsShellCommand;-><init>(Landroid/content/Context;Lcom/android/internal/widget/LockPatternUtils;)V
+PLcom/android/server/locksettings/LockSettingsShellCommand;->checkCredential()Z
+PLcom/android/server/locksettings/LockSettingsShellCommand;->onCommand(Ljava/lang/String;)I
+PLcom/android/server/locksettings/LockSettingsShellCommand;->parseArgs()V
+PLcom/android/server/locksettings/LockSettingsShellCommand;->runClear()V
+PLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;-><init>()V
+PLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;-><init>(Lcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;)V
+PLcom/android/server/locksettings/LockSettingsStorage$Cache;->-wrap0(Lcom/android/server/locksettings/LockSettingsStorage$Cache;)I
+PLcom/android/server/locksettings/LockSettingsStorage$Cache;-><init>()V
+PLcom/android/server/locksettings/LockSettingsStorage$Cache;-><init>(Lcom/android/server/locksettings/LockSettingsStorage$Cache;)V
+PLcom/android/server/locksettings/LockSettingsStorage$Cache;->getVersion()I
+PLcom/android/server/locksettings/LockSettingsStorage$Cache;->hasFile(Ljava/lang/String;)Z
+PLcom/android/server/locksettings/LockSettingsStorage$Cache;->isFetched(I)Z
+PLcom/android/server/locksettings/LockSettingsStorage$Cache;->peekFile(Ljava/lang/String;)[B
+PLcom/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
+PLcom/android/server/locksettings/LockSettingsStorage$Cache;->putFileIfUnchanged(Ljava/lang/String;[BI)V
+PLcom/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
+PLcom/android/server/locksettings/LockSettingsStorage$Cache;->putKeyValueIfUnchanged(Ljava/lang/String;Ljava/lang/Object;II)V
+PLcom/android/server/locksettings/LockSettingsStorage$Cache;->setFetched(I)V
+PLcom/android/server/locksettings/LockSettingsStorage$CredentialHash;-><init>([BII)V
+PLcom/android/server/locksettings/LockSettingsStorage$CredentialHash;-><init>([BIIZ)V
+PLcom/android/server/locksettings/LockSettingsStorage$CredentialHash;->createEmptyHash()Lcom/android/server/locksettings/LockSettingsStorage$CredentialHash;
+PLcom/android/server/locksettings/LockSettingsStorage$DatabaseHelper;-><init>(Landroid/content/Context;)V
+PLcom/android/server/locksettings/LockSettingsStorage$DatabaseHelper;->setCallback(Lcom/android/server/locksettings/LockSettingsStorage$Callback;)V
+PLcom/android/server/locksettings/LockSettingsStorage;->-get0()Ljava/lang/Object;
+PLcom/android/server/locksettings/LockSettingsStorage;-><init>(Landroid/content/Context;)V
+PLcom/android/server/locksettings/LockSettingsStorage;->deleteFile(Ljava/lang/String;)V
+PLcom/android/server/locksettings/LockSettingsStorage;->getBaseZeroLockPatternFilename(I)Ljava/lang/String;
+PLcom/android/server/locksettings/LockSettingsStorage;->getChildProfileLockFile(I)Ljava/lang/String;
+PLcom/android/server/locksettings/LockSettingsStorage;->getLegacyLockPasswordFilename(I)Ljava/lang/String;
+PLcom/android/server/locksettings/LockSettingsStorage;->getLegacyLockPatternFilename(I)Ljava/lang/String;
+PLcom/android/server/locksettings/LockSettingsStorage;->getLockCredentialFilePathForUser(ILjava/lang/String;)Ljava/lang/String;
+PLcom/android/server/locksettings/LockSettingsStorage;->getLockPasswordFilename(I)Ljava/lang/String;
+PLcom/android/server/locksettings/LockSettingsStorage;->getLockPatternFilename(I)Ljava/lang/String;
+PLcom/android/server/locksettings/LockSettingsStorage;->hasCredential(I)Z
+PLcom/android/server/locksettings/LockSettingsStorage;->hasFile(Ljava/lang/String;)Z
+PLcom/android/server/locksettings/LockSettingsStorage;->hasPassword(I)Z
+PLcom/android/server/locksettings/LockSettingsStorage;->hasPattern(I)Z
+PLcom/android/server/locksettings/LockSettingsStorage;->prefetchUser(I)V
+PLcom/android/server/locksettings/LockSettingsStorage;->readCredentialHash(I)Lcom/android/server/locksettings/LockSettingsStorage$CredentialHash;
+PLcom/android/server/locksettings/LockSettingsStorage;->readFile(Ljava/lang/String;)[B
+PLcom/android/server/locksettings/LockSettingsStorage;->readPasswordHashIfExists(I)Lcom/android/server/locksettings/LockSettingsStorage$CredentialHash;
+PLcom/android/server/locksettings/LockSettingsStorage;->readPatternHashIfExists(I)Lcom/android/server/locksettings/LockSettingsStorage$CredentialHash;
+PLcom/android/server/locksettings/LockSettingsStorage;->removeChildProfileLock(I)V
+PLcom/android/server/locksettings/LockSettingsStorage;->setDatabaseOnCreateCallback(Lcom/android/server/locksettings/LockSettingsStorage$Callback;)V
+PLcom/android/server/locksettings/LockSettingsStorage;->writeCredentialHash(Lcom/android/server/locksettings/LockSettingsStorage$CredentialHash;I)V
+PLcom/android/server/locksettings/LockSettingsStorage;->writeFile(Ljava/lang/String;[B)V
+PLcom/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/LockSettingsStrongAuth$1;-><init>(Lcom/android/server/locksettings/LockSettingsStrongAuth;)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth$1;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->-wrap0(Lcom/android/server/locksettings/LockSettingsStrongAuth;Landroid/app/trust/IStrongAuthTracker;)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->-wrap3(Lcom/android/server/locksettings/LockSettingsStrongAuth;II)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;-><init>(Landroid/content/Context;)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleAddStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleRequireStrongAuth(II)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleRequireStrongAuthOneUser(II)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->notifyStrongAuthTrackers(II)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->registerStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->reportUnlock(I)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->requireStrongAuth(II)V
+PLcom/android/server/locksettings/LockSettingsStrongAuth;->systemReady()V
+PLcom/android/server/locksettings/SyntheticPasswordManager;-><init>(Lcom/android/server/locksettings/LockSettingsStorage;Landroid/os/UserManager;)V
+PLcom/android/server/locksettings/SyntheticPasswordManager;->getWeaverService()Landroid/hardware/weaver/V1_0/IWeaver;
+PLcom/android/server/locksettings/SyntheticPasswordManager;->initWeaverService()V
+PLcom/android/server/media/AudioPlaybackMonitor;-><init>(Landroid/content/Context;Landroid/media/IAudioService;)V
+PLcom/android/server/media/AudioPlaybackMonitor;->cleanUpAudioPlaybackUids(I)V
+PLcom/android/server/media/AudioPlaybackMonitor;->getInstance(Landroid/content/Context;Landroid/media/IAudioService;)Lcom/android/server/media/AudioPlaybackMonitor;
+PLcom/android/server/media/AudioPlaybackMonitor;->getSortedAudioPlaybackClientUids()Landroid/util/IntArray;
+PLcom/android/server/media/AudioPlaybackMonitor;->isPlaybackActive(I)Z
+PLcom/android/server/media/AudioPlaybackMonitor;->registerOnAudioPlaybackStartedListener(Lcom/android/server/media/AudioPlaybackMonitor$OnAudioPlaybackStartedListener;)V
+PLcom/android/server/media/AudioPlaybackMonitor;->registerOnAudioPlayerActiveStateChangedListener(Lcom/android/server/media/AudioPlaybackMonitor$OnAudioPlayerActiveStateChangedListener;)V
+PLcom/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
+PLcom/android/server/media/MediaResourceMonitorService;->-get0()Z
+PLcom/android/server/media/MediaResourceMonitorService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/media/MediaResourceMonitorService;->onStart()V
+PLcom/android/server/media/MediaRouterService$1;-><init>(Lcom/android/server/media/MediaRouterService;)V
+PLcom/android/server/media/MediaRouterService$1;->onAudioPlayerActiveStateChanged(IZ)V
+PLcom/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
+PLcom/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;->dispose()V
+PLcom/android/server/media/MediaRouterService$ClientRecord;->getState()Landroid/media/MediaRouterClientState;
+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
+PLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->updateDescriptor(Landroid/media/RemoteDisplayState;)Z
+PLcom/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;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/media/MediaRouterService$UserHandler;->scheduleUpdateClientState()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$UserRecord;-><init>(Lcom/android/server/media/MediaRouterService;I)V
+PLcom/android/server/media/MediaRouterService;->-get0(Lcom/android/server/media/MediaRouterService;)Lcom/android/server/media/AudioPlaybackMonitor;
+PLcom/android/server/media/MediaRouterService;->-get1(Lcom/android/server/media/MediaRouterService;)Landroid/content/Context;
+PLcom/android/server/media/MediaRouterService;->-get2(Lcom/android/server/media/MediaRouterService;)Ljava/lang/Object;
+PLcom/android/server/media/MediaRouterService;->-set0(Lcom/android/server/media/MediaRouterService;Z)Z
+PLcom/android/server/media/MediaRouterService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/media/MediaRouterService;->clientDied(Lcom/android/server/media/MediaRouterService$ClientRecord;)V
+PLcom/android/server/media/MediaRouterService;->disposeClientLocked(Lcom/android/server/media/MediaRouterService$ClientRecord;Z)V
+PLcom/android/server/media/MediaRouterService;->disposeUserIfNeededLocked(Lcom/android/server/media/MediaRouterService$UserRecord;)V
+PLcom/android/server/media/MediaRouterService;->getState(Landroid/media/IMediaRouterClient;)Landroid/media/MediaRouterClientState;
+PLcom/android/server/media/MediaRouterService;->getStateLocked(Landroid/media/IMediaRouterClient;)Landroid/media/MediaRouterClientState;
+PLcom/android/server/media/MediaRouterService;->initializeClientLocked(Lcom/android/server/media/MediaRouterService$ClientRecord;)V
+PLcom/android/server/media/MediaRouterService;->initializeUserLocked(Lcom/android/server/media/MediaRouterService$UserRecord;)V
+PLcom/android/server/media/MediaRouterService;->isPlaybackActive(Landroid/media/IMediaRouterClient;)Z
+PLcom/android/server/media/MediaRouterService;->isPlaybackActiveLocked(Landroid/media/IMediaRouterClient;)Z
+PLcom/android/server/media/MediaRouterService;->monitor()V
+PLcom/android/server/media/MediaRouterService;->registerClientAsUser(Landroid/media/IMediaRouterClient;Ljava/lang/String;I)V
+PLcom/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;->setDiscoveryRequest(Landroid/media/IMediaRouterClient;IZ)V
+PLcom/android/server/media/MediaRouterService;->setDiscoveryRequestLocked(Landroid/media/IMediaRouterClient;IZ)V
+PLcom/android/server/media/MediaRouterService;->setSelectedRoute(Landroid/media/IMediaRouterClient;Ljava/lang/String;Z)V
+PLcom/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
+PLcom/android/server/media/MediaRouterService;->validatePackageName(ILjava/lang/String;)Z
+PLcom/android/server/media/MediaSessionRecord$1;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->getMetadata()Landroid/media/MediaMetadata;
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->getPackageName()Ljava/lang/String;
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->getPlaybackState()Landroid/media/session/PlaybackState;
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->getVolumeAttributes()Landroid/media/session/ParcelableVolumeInfo;
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->registerCallbackListener(Landroid/media/session/ISessionControllerCallback;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->unregisterCallbackListener(Landroid/media/session/ISessionControllerCallback;)V
+PLcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;->-get0(Lcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;)Landroid/media/session/ISessionControllerCallback;
+PLcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;-><init>(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionControllerCallback;I)V
+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;->-get0(Lcom/android/server/media/MediaSessionRecord$SessionCb;)Landroid/media/session/ISessionCallback;
+PLcom/android/server/media/MediaSessionRecord$SessionCb;-><init>(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionCallback;)V
+PLcom/android/server/media/MediaSessionRecord$SessionStub;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord$SessionStub;-><init>(Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord$SessionStub;)V
+PLcom/android/server/media/MediaSessionRecord$SessionStub;->destroy()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;->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;)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;->-get0()Z
+PLcom/android/server/media/MediaSessionRecord;->-get1(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/AudioAttributes;
+PLcom/android/server/media/MediaSessionRecord;->-get11(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$MessageHandler;
+PLcom/android/server/media/MediaSessionRecord;->-get13(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/Object;
+PLcom/android/server/media/MediaSessionRecord;->-get15(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/MediaMetadata;
+PLcom/android/server/media/MediaSessionRecord;->-get17(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/String;
+PLcom/android/server/media/MediaSessionRecord;->-get18(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/PlaybackState;
+PLcom/android/server/media/MediaSessionRecord;->-get2(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/AudioManager;
+PLcom/android/server/media/MediaSessionRecord;->-get22(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionService;
+PLcom/android/server/media/MediaSessionRecord;->-get26(Lcom/android/server/media/MediaSessionRecord;)I
+PLcom/android/server/media/MediaSessionRecord;->-get5(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$ControllerStub;
+PLcom/android/server/media/MediaSessionRecord;->-get6(Lcom/android/server/media/MediaSessionRecord;)Ljava/util/ArrayList;
+PLcom/android/server/media/MediaSessionRecord;->-get8(Lcom/android/server/media/MediaSessionRecord;)Z
+PLcom/android/server/media/MediaSessionRecord;->-set0(Lcom/android/server/media/MediaSessionRecord;Landroid/media/AudioAttributes;)Landroid/media/AudioAttributes;
+PLcom/android/server/media/MediaSessionRecord;->-set10(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/PlaybackState;)Landroid/media/session/PlaybackState;
+PLcom/android/server/media/MediaSessionRecord;->-set15(Lcom/android/server/media/MediaSessionRecord;I)I
+PLcom/android/server/media/MediaSessionRecord;->-set3(Lcom/android/server/media/MediaSessionRecord;J)J
+PLcom/android/server/media/MediaSessionRecord;->-set4(Lcom/android/server/media/MediaSessionRecord;Z)Z
+PLcom/android/server/media/MediaSessionRecord;->-set5(Lcom/android/server/media/MediaSessionRecord;Landroid/app/PendingIntent;)Landroid/app/PendingIntent;
+PLcom/android/server/media/MediaSessionRecord;->-set7(Lcom/android/server/media/MediaSessionRecord;Landroid/app/PendingIntent;)Landroid/app/PendingIntent;
+PLcom/android/server/media/MediaSessionRecord;->-set8(Lcom/android/server/media/MediaSessionRecord;Landroid/media/MediaMetadata;)Landroid/media/MediaMetadata;
+PLcom/android/server/media/MediaSessionRecord;->-wrap0(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/PlaybackState;
+PLcom/android/server/media/MediaSessionRecord;->-wrap1(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionControllerCallback;)I
+PLcom/android/server/media/MediaSessionRecord;->-wrap2(Lcom/android/server/media/MediaSessionRecord;I)Ljava/lang/String;
+PLcom/android/server/media/MediaSessionRecord;->-wrap5(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord;->-wrap6(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord;->-wrap9(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionRecord;-><init>(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Lcom/android/server/media/MediaSessionService;Landroid/os/Looper;)V
+PLcom/android/server/media/MediaSessionRecord;->binderDied()V
+PLcom/android/server/media/MediaSessionRecord;->getCallback()Landroid/media/session/ISessionCallback;
+PLcom/android/server/media/MediaSessionRecord;->getControllerBinder()Landroid/media/session/ISessionController;
+PLcom/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;->getPackageName(I)Ljava/lang/String;
+PLcom/android/server/media/MediaSessionRecord;->getPlaybackState()Landroid/media/session/PlaybackState;
+PLcom/android/server/media/MediaSessionRecord;->getPlaybackType()I
+PLcom/android/server/media/MediaSessionRecord;->getSessionBinder()Landroid/media/session/ISession;
+PLcom/android/server/media/MediaSessionRecord;->getUid()I
+PLcom/android/server/media/MediaSessionRecord;->getUserId()I
+PLcom/android/server/media/MediaSessionRecord;->isActive()Z
+PLcom/android/server/media/MediaSessionRecord;->isPlaybackActive()Z
+PLcom/android/server/media/MediaSessionRecord;->onDestroy()V
+PLcom/android/server/media/MediaSessionRecord;->pushMetadataUpdate()V
+PLcom/android/server/media/MediaSessionRecord;->pushPlaybackStateUpdate()V
+PLcom/android/server/media/MediaSessionRecord;->pushSessionDestroyed()V
+PLcom/android/server/media/MediaSessionRecord;->toString()Ljava/lang/String;
+PLcom/android/server/media/MediaSessionService$1;-><init>(Lcom/android/server/media/MediaSessionService;)V
+PLcom/android/server/media/MediaSessionService$1;->onAudioPlaybackStarted(I)V
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->-get0(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/media/session/ICallback;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->-get1(Lcom/android/server/media/MediaSessionService$FullUserRecord;)I
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->-get10(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Lcom/android/server/media/MediaSessionStack;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->-get8(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/media/session/IOnVolumeKeyLongPressListener;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->-set0(Lcom/android/server/media/MediaSessionService$FullUserRecord;Landroid/media/session/ICallback;)Landroid/media/session/ICallback;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->-wrap1(Lcom/android/server/media/MediaSessionService$FullUserRecord;)V
+PLcom/android/server/media/MediaSessionService$FullUserRecord;-><init>(Lcom/android/server/media/MediaSessionService;I)V
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->getMediaButtonSessionLocked()Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->onMediaButtonSessionChanged(Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->pushAddressedPlayerChangedLocked()V
+PLcom/android/server/media/MediaSessionService$FullUserRecord;->rememberMediaButtonReceiverLocked(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionService$MessageHandler;-><init>(Lcom/android/server/media/MediaSessionService;)V
+PLcom/android/server/media/MediaSessionService$MessageHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/media/MediaSessionService$MessageHandler;->postSessionsChanged(I)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$1;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;)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$5;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;III)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$5;->run()V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Landroid/os/Handler;)V
+PLcom/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
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->createSession(Ljava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;I)Landroid/media/session/ISession;
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchAdjustVolumeLocked(III)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchVolumeKeyEvent(Landroid/view/KeyEvent;IZ)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchVolumeKeyEventLocked(Landroid/view/KeyEvent;IZ)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->isValidLocalStreamType(I)Z
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->removeSessionsListener(Landroid/media/session/IActiveSessionsListener;)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->setCallback(Landroid/media/session/ICallback;)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->setRemoteVolumeController(Landroid/media/IRemoteVolumeController;)V
+PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->verifySessionsRequest(Landroid/content/ComponentName;III)I
+PLcom/android/server/media/MediaSessionService$SessionsListenerRecord;->-get1(Lcom/android/server/media/MediaSessionService$SessionsListenerRecord;)Landroid/media/session/IActiveSessionsListener;
+PLcom/android/server/media/MediaSessionService$SessionsListenerRecord;->-get4(Lcom/android/server/media/MediaSessionService$SessionsListenerRecord;)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$SettingsObserver;->-wrap0(Lcom/android/server/media/MediaSessionService$SettingsObserver;)V
+PLcom/android/server/media/MediaSessionService$SettingsObserver;-><init>(Lcom/android/server/media/MediaSessionService;)V
+PLcom/android/server/media/MediaSessionService$SettingsObserver;-><init>(Lcom/android/server/media/MediaSessionService;Lcom/android/server/media/MediaSessionService$SettingsObserver;)V
+PLcom/android/server/media/MediaSessionService$SettingsObserver;->observe()V
+PLcom/android/server/media/MediaSessionService;->-get0(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/AudioPlaybackMonitor;
+PLcom/android/server/media/MediaSessionService;->-get1(Lcom/android/server/media/MediaSessionService;)Landroid/media/IAudioService;
+PLcom/android/server/media/MediaSessionService;->-get12(Lcom/android/server/media/MediaSessionService;)Ljava/util/ArrayList;
+PLcom/android/server/media/MediaSessionService;->-get2(Lcom/android/server/media/MediaSessionService;)Landroid/content/ContentResolver;
+PLcom/android/server/media/MediaSessionService;->-get3(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaSessionService$FullUserRecord;
+PLcom/android/server/media/MediaSessionService;->-get5(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService;->-get6(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaSessionService$MessageHandler;
+PLcom/android/server/media/MediaSessionService;->-get9(Lcom/android/server/media/MediaSessionService;)Ljava/lang/Object;
+PLcom/android/server/media/MediaSessionService;->-set0(Lcom/android/server/media/MediaSessionService;Landroid/media/IRemoteVolumeController;)Landroid/media/IRemoteVolumeController;
+PLcom/android/server/media/MediaSessionService;->-wrap0(Lcom/android/server/media/MediaSessionService;)Z
+PLcom/android/server/media/MediaSessionService;->-wrap1(Lcom/android/server/media/MediaSessionService;IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService;->-wrap10(Lcom/android/server/media/MediaSessionService;Ljava/lang/String;II)V
+PLcom/android/server/media/MediaSessionService;->-wrap11(Lcom/android/server/media/MediaSessionService;I)V
+PLcom/android/server/media/MediaSessionService;->-wrap2(Lcom/android/server/media/MediaSessionService;I)Lcom/android/server/media/MediaSessionService$FullUserRecord;
+PLcom/android/server/media/MediaSessionService;->-wrap3(Lcom/android/server/media/MediaSessionService;Landroid/media/session/IActiveSessionsListener;)I
+PLcom/android/server/media/MediaSessionService;->-wrap4(Lcom/android/server/media/MediaSessionService;I)Ljava/lang/String;
+PLcom/android/server/media/MediaSessionService;->-wrap5(Lcom/android/server/media/MediaSessionService;I)Ljava/util/List;
+PLcom/android/server/media/MediaSessionService;->-wrap8(Lcom/android/server/media/MediaSessionService;Landroid/content/ComponentName;III)V
+PLcom/android/server/media/MediaSessionService;->-wrap9(Lcom/android/server/media/MediaSessionService;Ljava/lang/String;I)V
+PLcom/android/server/media/MediaSessionService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/media/MediaSessionService;->createSessionInternal(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService;->createSessionLocked(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionService;->destroySession(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionService;->destroySessionLocked(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/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
+PLcom/android/server/media/MediaSessionService;->enforceSystemUiPermission(Ljava/lang/String;II)V
+PLcom/android/server/media/MediaSessionService;->findIndexOfSessionsListenerLocked(Landroid/media/session/IActiveSessionsListener;)I
+PLcom/android/server/media/MediaSessionService;->getAudioService()Landroid/media/IAudioService;
+PLcom/android/server/media/MediaSessionService;->getCallingPackageName(I)Ljava/lang/String;
+PLcom/android/server/media/MediaSessionService;->isCurrentVolumeController(II)Z
+PLcom/android/server/media/MediaSessionService;->isGlobalPriorityActiveLocked()Z
+PLcom/android/server/media/MediaSessionService;->monitor()V
+PLcom/android/server/media/MediaSessionService;->onMediaButtonReceiverChanged(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionService;->onSessionPlaystateChanged(Lcom/android/server/media/MediaSessionRecord;II)V
+PLcom/android/server/media/MediaSessionService;->onStart()V
+PLcom/android/server/media/MediaSessionService;->onStartUser(I)V
+PLcom/android/server/media/MediaSessionService;->pushRemoteVolumeUpdateLocked(I)V
+PLcom/android/server/media/MediaSessionService;->sessionDied(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionService;->updateSession(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionService;->updateUser()V
+PLcom/android/server/media/MediaSessionStack;-><init>(Lcom/android/server/media/AudioPlaybackMonitor;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
+PLcom/android/server/media/MediaSessionStack;->contains(Lcom/android/server/media/MediaSessionRecord;)Z
+PLcom/android/server/media/MediaSessionStack;->containsState(I[I)Z
+PLcom/android/server/media/MediaSessionStack;->findMediaButtonSession(I)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionStack;->getActiveSessions(I)Ljava/util/ArrayList;
+PLcom/android/server/media/MediaSessionStack;->getDefaultRemoteSession(I)Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionStack;->getDefaultVolumeSession()Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionStack;->getMediaButtonSession()Lcom/android/server/media/MediaSessionRecord;
+PLcom/android/server/media/MediaSessionStack;->onPlaystateChanged(Lcom/android/server/media/MediaSessionRecord;II)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;->shouldUpdatePriority(II)Z
+PLcom/android/server/media/MediaSessionStack;->updateMediaButtonSession(Lcom/android/server/media/MediaSessionRecord;)V
+PLcom/android/server/media/MediaSessionStack;->updateMediaButtonSessionIfNeeded()V
+PLcom/android/server/media/RemoteDisplayProviderProxy$1;-><init>(Lcom/android/server/media/RemoteDisplayProviderProxy;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy;-><init>(Landroid/content/Context;Landroid/content/ComponentName;I)V
+PLcom/android/server/media/RemoteDisplayProviderProxy;->getDisplayState()Landroid/media/RemoteDisplayState;
+PLcom/android/server/media/RemoteDisplayProviderProxy;->getFlattenedComponentName()Ljava/lang/String;
+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;->setSelectedDisplay(Ljava/lang/String;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy;->shouldBind()Z
+PLcom/android/server/media/RemoteDisplayProviderProxy;->start()V
+PLcom/android/server/media/RemoteDisplayProviderProxy;->unbind()V
+PLcom/android/server/media/RemoteDisplayProviderProxy;->updateBinding()V
+PLcom/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
+PLcom/android/server/media/RemoteDisplayProviderWatcher$2;-><init>(Lcom/android/server/media/RemoteDisplayProviderWatcher;)V
+PLcom/android/server/media/RemoteDisplayProviderWatcher$2;->run()V
+PLcom/android/server/media/RemoteDisplayProviderWatcher;->-get0()Z
+PLcom/android/server/media/RemoteDisplayProviderWatcher;->-wrap0(Lcom/android/server/media/RemoteDisplayProviderWatcher;)V
+PLcom/android/server/media/RemoteDisplayProviderWatcher;-><init>(Landroid/content/Context;Lcom/android/server/media/RemoteDisplayProviderWatcher$Callback;Landroid/os/Handler;I)V
+PLcom/android/server/media/RemoteDisplayProviderWatcher;->findProvider(Ljava/lang/String;Ljava/lang/String;)I
+PLcom/android/server/media/RemoteDisplayProviderWatcher;->hasCaptureVideoPermission(Ljava/lang/String;)Z
+PLcom/android/server/media/RemoteDisplayProviderWatcher;->start()V
+PLcom/android/server/media/RemoteDisplayProviderWatcher;->verifyServiceTrusted(Landroid/content/pm/ServiceInfo;)Z
+PLcom/android/server/media/projection/MediaProjectionManagerService$1;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$BinderService;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$BinderService;->addCallback(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$BinderService;->getActiveProjectionInfo()Landroid/media/projection/MediaProjectionInfo;
+PLcom/android/server/media/projection/MediaProjectionManagerService$CallbackDelegate;-><init>()V
+PLcom/android/server/media/projection/MediaProjectionManagerService$CallbackDelegate;->add(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaRouterCallback;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaRouterCallback;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;Lcom/android/server/media/projection/MediaProjectionManagerService$MediaRouterCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->-get2(Lcom/android/server/media/projection/MediaProjectionManagerService;)Landroid/content/Context;
+PLcom/android/server/media/projection/MediaProjectionManagerService;->-wrap0(Lcom/android/server/media/projection/MediaProjectionManagerService;)Landroid/media/projection/MediaProjectionInfo;
+PLcom/android/server/media/projection/MediaProjectionManagerService;->-wrap3(Lcom/android/server/media/projection/MediaProjectionManagerService;Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->addCallback(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->getActiveProjectionInfo()Landroid/media/projection/MediaProjectionInfo;
+PLcom/android/server/media/projection/MediaProjectionManagerService;->linkDeathRecipientLocked(Landroid/media/projection/IMediaProjectionWatcherCallback;Landroid/os/IBinder$DeathRecipient;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->monitor()V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->onStart()V
+PLcom/android/server/midi/MidiService$1;-><init>(Lcom/android/server/midi/MidiService;)V
+PLcom/android/server/midi/MidiService$1;->onPackageModified(Ljava/lang/String;)V
+PLcom/android/server/midi/MidiService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/midi/MidiService$Lifecycle;->onStart()V
+PLcom/android/server/midi/MidiService$Lifecycle;->onUnlockUser(I)V
+PLcom/android/server/midi/MidiService;->-wrap0(Lcom/android/server/midi/MidiService;Ljava/lang/String;)V
+PLcom/android/server/midi/MidiService;->-wrap1(Lcom/android/server/midi/MidiService;)V
+PLcom/android/server/midi/MidiService;->-wrap3(Lcom/android/server/midi/MidiService;Ljava/lang/String;)V
+PLcom/android/server/midi/MidiService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/midi/MidiService;->onUnlockUser()V
+PLcom/android/server/midi/MidiService;->removePackageDeviceServers(Ljava/lang/String;)V
+PLcom/android/server/net/-$Lambda$hlRLCZCUKiWKuPbzPq01UpErk2Y;->$m$0()V
+PLcom/android/server/net/-$Lambda$hlRLCZCUKiWKuPbzPq01UpErk2Y;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/net/-$Lambda$hlRLCZCUKiWKuPbzPq01UpErk2Y;->run()V
+PLcom/android/server/net/DelayedDiskWrite;-><init>()V
+PLcom/android/server/net/IpConfigStore;-><init>()V
+PLcom/android/server/net/IpConfigStore;-><init>(Lcom/android/server/net/DelayedDiskWrite;)V
+PLcom/android/server/net/IpConfigStore;->loge(Ljava/lang/String;)V
+PLcom/android/server/net/IpConfigStore;->readIpAndProxyConfigurations(Ljava/lang/String;)Landroid/util/SparseArray;
+PLcom/android/server/net/LockdownVpnTracker;->isEnabled()Z
+PLcom/android/server/net/NetworkIdentitySet;-><init>()V
+PLcom/android/server/net/NetworkPolicyManagerInternal;-><init>()V
+PLcom/android/server/net/NetworkPolicyManagerService$10;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$10;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/net/NetworkPolicyManagerService$11;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$11;->limitReached(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/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
+PLcom/android/server/net/NetworkPolicyManagerService$13;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$14;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$15;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$16;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$17;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$1;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$2;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$3;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$3;->run()V
+PLcom/android/server/net/NetworkPolicyManagerService$4;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/net/NetworkPolicyManagerService$5;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$6;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/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
+PLcom/android/server/net/NetworkPolicyManagerService$8;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$9;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$AppIdleStateChangeListener;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$AppIdleStateChangeListener;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService$AppIdleStateChangeListener;)V
+PLcom/android/server/net/NetworkPolicyManagerService$AppIdleStateChangeListener;->onParoleStateChanged(Z)V
+PLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;)V
+PLcom/android/server/net/NetworkPolicyManagerService$ProcStateSeqHistory;-><init>(I)V
+PLcom/android/server/net/NetworkPolicyManagerService;->-get0(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/content/Context;
+PLcom/android/server/net/NetworkPolicyManagerService;->-get1(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/os/RemoteCallbackList;
+PLcom/android/server/net/NetworkPolicyManagerService;->-get3(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/net/INetworkStatsService;
+PLcom/android/server/net/NetworkPolicyManagerService;->-wrap10(Lcom/android/server/net/NetworkPolicyManagerService;IZ)V
+PLcom/android/server/net/NetworkPolicyManagerService;->-wrap11(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->-wrap12(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->-wrap17(Lcom/android/server/net/NetworkPolicyManagerService;ILandroid/util/SparseIntArray;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->-wrap18(Lcom/android/server/net/NetworkPolicyManagerService;I)V
+PLcom/android/server/net/NetworkPolicyManagerService;->-wrap22(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->-wrap23(Lcom/android/server/net/NetworkPolicyManagerService;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->-wrap6(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;[Ljava/lang/String;)V
+PLcom/android/server/net/NetworkPolicyManagerService;-><init>(Landroid/content/Context;Landroid/app/IActivityManager;Landroid/net/INetworkStatsService;Landroid/os/INetworkManagementService;)V
+PLcom/android/server/net/NetworkPolicyManagerService;-><init>(Landroid/content/Context;Landroid/app/IActivityManager;Landroid/net/INetworkStatsService;Landroid/os/INetworkManagementService;Landroid/content/pm/IPackageManager;Landroid/util/TrustedTime;Ljava/io/File;Z)V
+PLcom/android/server/net/NetworkPolicyManagerService;->addDefaultRestrictBackgroundWhitelistUidsUL()Z
+PLcom/android/server/net/NetworkPolicyManagerService;->addDefaultRestrictBackgroundWhitelistUidsUL(I)Z
+PLcom/android/server/net/NetworkPolicyManagerService;->bindConnectivityManager(Landroid/net/IConnectivityManager;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->bindNotificationManager(Landroid/app/INotificationManager;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->dispatchMeteredIfacesChanged(Landroid/net/INetworkPolicyListener;[Ljava/lang/String;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->enableFirewallChainUL(IZ)V
+PLcom/android/server/net/NetworkPolicyManagerService;->ensureActiveMobilePolicyAL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->getNetworkPolicies(Ljava/lang/String;)[Landroid/net/NetworkPolicy;
+PLcom/android/server/net/NetworkPolicyManagerService;->getRestrictBackground()Z
+PLcom/android/server/net/NetworkPolicyManagerService;->getRestrictBackgroundByCaller()I
+PLcom/android/server/net/NetworkPolicyManagerService;->getSystemDir()Ljava/io/File;
+PLcom/android/server/net/NetworkPolicyManagerService;->getUidPolicy(I)I
+PLcom/android/server/net/NetworkPolicyManagerService;->initService(Ljava/util/concurrent/CountDownLatch;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->isBandwidthControlEnabled()Z
+PLcom/android/server/net/NetworkPolicyManagerService;->lambda$-com_android_server_net_NetworkPolicyManagerService_37358(Ljava/util/concurrent/CountDownLatch;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->maybeRefreshTrustedTime()V
+PLcom/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
+PLcom/android/server/net/NetworkPolicyManagerService;->onTetheringChanged(Ljava/lang/String;Z)V
+PLcom/android/server/net/NetworkPolicyManagerService;->purgePowerSaveTempWhitelistUL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->readPolicyAL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->registerListener(Landroid/net/INetworkPolicyListener;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->setMeteredNetworkWhitelist(IZ)V
+PLcom/android/server/net/NetworkPolicyManagerService;->setRestrictBackgroundUL(Z)V
+PLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRules(ILandroid/util/SparseIntArray;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRulesAsync(ILandroid/util/SparseIntArray;I)V
+PLcom/android/server/net/NetworkPolicyManagerService;->setUidPolicyUncheckedUL(IIZ)V
+PLcom/android/server/net/NetworkPolicyManagerService;->systemReady(Ljava/util/concurrent/CountDownLatch;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkEnabledNL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkRulesNL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateNotificationsNL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->updatePowerSaveTempWhitelistUL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->updatePowerSaveWhitelistUL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateRestrictionRulesForUidUL(I)V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForDeviceIdleUL(I)V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForRestrictPowerUL(I)V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForAppIdleUL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForDeviceIdleUL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForGlobalChangeAL(Z)V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForPowerSaveUL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForRestrictBackgroundUL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForRestrictPowerUL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForWhitelistedPowerSaveUL(IZI)V
+PLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForWhitelistedPowerSaveUL(ZILandroid/util/SparseIntArray;)V
+PLcom/android/server/net/NetworkPolicyManagerService;->upgradeWifiMeteredOverrideAL()V
+PLcom/android/server/net/NetworkPolicyManagerService;->writePolicyAL()V
+PLcom/android/server/net/NetworkStatsCollection;-><init>(J)V
+PLcom/android/server/net/NetworkStatsCollection;->getTotalBytes()J
+PLcom/android/server/net/NetworkStatsCollection;->isDirty()Z
+PLcom/android/server/net/NetworkStatsCollection;->read(Ljava/io/InputStream;)V
+PLcom/android/server/net/NetworkStatsCollection;->recordCollection(Lcom/android/server/net/NetworkStatsCollection;)V
+PLcom/android/server/net/NetworkStatsCollection;->reset()V
+PLcom/android/server/net/NetworkStatsObservers$1;-><init>(Lcom/android/server/net/NetworkStatsObservers;)V
+PLcom/android/server/net/NetworkStatsObservers$1;->handleMessage(Landroid/os/Message;)Z
+PLcom/android/server/net/NetworkStatsObservers$StatsContext;-><init>(Landroid/net/NetworkStats;Landroid/net/NetworkStats;Landroid/util/ArrayMap;Landroid/util/ArrayMap;[Lcom/android/internal/net/VpnInfo;J)V
+PLcom/android/server/net/NetworkStatsObservers;->-wrap2(Lcom/android/server/net/NetworkStatsObservers;Lcom/android/server/net/NetworkStatsObservers$StatsContext;)V
+PLcom/android/server/net/NetworkStatsObservers;-><init>()V
+PLcom/android/server/net/NetworkStatsObservers;->getHandler()Landroid/os/Handler;
+PLcom/android/server/net/NetworkStatsObservers;->getHandlerLooperLocked()Landroid/os/Looper;
+PLcom/android/server/net/NetworkStatsObservers;->handleUpdateStats(Lcom/android/server/net/NetworkStatsObservers$StatsContext;)V
+PLcom/android/server/net/NetworkStatsObservers;->updateStats(Landroid/net/NetworkStats;Landroid/net/NetworkStats;Landroid/util/ArrayMap;Landroid/util/ArrayMap;[Lcom/android/internal/net/VpnInfo;J)V
+PLcom/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
+PLcom/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;->getOrLoadCompleteLocked()Lcom/android/server/net/NetworkStatsCollection;
+PLcom/android/server/net/NetworkStatsRecorder;->loadLocked(JJ)Lcom/android/server/net/NetworkStatsCollection;
+PLcom/android/server/net/NetworkStatsRecorder;->setPersistThreshold(J)V
+PLcom/android/server/net/NetworkStatsService$1;-><init>(Lcom/android/server/net/NetworkStatsService;)V
+PLcom/android/server/net/NetworkStatsService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/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
+PLcom/android/server/net/NetworkStatsService$3;-><init>(Lcom/android/server/net/NetworkStatsService;)V
+PLcom/android/server/net/NetworkStatsService$4;-><init>(Lcom/android/server/net/NetworkStatsService;)V
+PLcom/android/server/net/NetworkStatsService$5;-><init>(Lcom/android/server/net/NetworkStatsService;)V
+PLcom/android/server/net/NetworkStatsService$6;-><init>(Lcom/android/server/net/NetworkStatsService;)V
+PLcom/android/server/net/NetworkStatsService$6;->limitReached(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;-><init>(Landroid/content/Context;)V
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getDevConfig()Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getDevPersistBytes(J)J
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getGlobalAlertBytes(J)J
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getGlobalBoolean(Ljava/lang/String;Z)Z
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getGlobalLong(Ljava/lang/String;J)J
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getPollInterval()J
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getSampleEnabled()Z
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getTimeCacheMaxAge()J
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getUidConfig()Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getUidPersistBytes(J)J
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getUidTagConfig()Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getUidTagPersistBytes(J)J
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getXtConfig()Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;
+PLcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;->getXtPersistBytes(J)J
+PLcom/android/server/net/NetworkStatsService$DropBoxNonMonotonicObserver;-><init>(Lcom/android/server/net/NetworkStatsService;)V
+PLcom/android/server/net/NetworkStatsService$DropBoxNonMonotonicObserver;-><init>(Lcom/android/server/net/NetworkStatsService;Lcom/android/server/net/NetworkStatsService$DropBoxNonMonotonicObserver;)V
+PLcom/android/server/net/NetworkStatsService$HandlerCallback;-><init>(Lcom/android/server/net/NetworkStatsService;)V
+PLcom/android/server/net/NetworkStatsService$HandlerCallback;->handleMessage(Landroid/os/Message;)Z
+PLcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;-><init>(JJJ)V
+PLcom/android/server/net/NetworkStatsService;->-get0(Lcom/android/server/net/NetworkStatsService;)Landroid/content/Context;
+PLcom/android/server/net/NetworkStatsService;->-get1(Lcom/android/server/net/NetworkStatsService;)Landroid/os/Handler;
+PLcom/android/server/net/NetworkStatsService;->-wrap3(Lcom/android/server/net/NetworkStatsService;I)V
+PLcom/android/server/net/NetworkStatsService;->-wrap4(Lcom/android/server/net/NetworkStatsService;)V
+PLcom/android/server/net/NetworkStatsService;-><init>(Landroid/content/Context;Landroid/os/INetworkManagementService;Landroid/app/AlarmManager;Landroid/os/PowerManager$WakeLock;Landroid/util/TrustedTime;Landroid/telephony/TelephonyManager;Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings;Lcom/android/server/net/NetworkStatsObservers;Ljava/io/File;Ljava/io/File;)V
+PLcom/android/server/net/NetworkStatsService;->advisePersistThreshold(J)V
+PLcom/android/server/net/NetworkStatsService;->assertBandwidthControlEnabled()V
+PLcom/android/server/net/NetworkStatsService;->bindConnectivityManager(Landroid/net/IConnectivityManager;)V
+PLcom/android/server/net/NetworkStatsService;->bootstrapStatsLocked()V
+PLcom/android/server/net/NetworkStatsService;->buildRecorder(Ljava/lang/String;Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;Z)Lcom/android/server/net/NetworkStatsRecorder;
+PLcom/android/server/net/NetworkStatsService;->create(Landroid/content/Context;Landroid/os/INetworkManagementService;)Lcom/android/server/net/NetworkStatsService;
+PLcom/android/server/net/NetworkStatsService;->findOrCreateNetworkIdentitySet(Landroid/util/ArrayMap;Ljava/lang/Object;)Lcom/android/server/net/NetworkIdentitySet;
+PLcom/android/server/net/NetworkStatsService;->forceUpdateIfaces()V
+PLcom/android/server/net/NetworkStatsService;->getDefaultBaseDir()Ljava/io/File;
+PLcom/android/server/net/NetworkStatsService;->getDefaultSystemDir()Ljava/io/File;
+PLcom/android/server/net/NetworkStatsService;->getMobileIfaces()[Ljava/lang/String;
+PLcom/android/server/net/NetworkStatsService;->getNetworkStatsTethering(I)Landroid/net/NetworkStats;
+PLcom/android/server/net/NetworkStatsService;->getNetworkStatsUidDetail()Landroid/net/NetworkStats;
+PLcom/android/server/net/NetworkStatsService;->getNetworkStatsXt()Landroid/net/NetworkStats;
+PLcom/android/server/net/NetworkStatsService;->incrementOperationCount(III)V
+PLcom/android/server/net/NetworkStatsService;->isBandwidthControlEnabled()Z
+PLcom/android/server/net/NetworkStatsService;->maybeUpgradeLegacyStatsLocked()V
+PLcom/android/server/net/NetworkStatsService;->performPoll(I)V
+PLcom/android/server/net/NetworkStatsService;->registerGlobalAlert()V
+PLcom/android/server/net/NetworkStatsService;->registerPollAlarmLocked()V
+PLcom/android/server/net/NetworkStatsService;->setHandler(Landroid/os/Handler;Landroid/os/Handler$Callback;)V
+PLcom/android/server/net/NetworkStatsService;->systemReady()V
+PLcom/android/server/net/NetworkStatsService;->updateIfaces()V
+PLcom/android/server/net/NetworkStatsService;->updateIfacesLocked()V
+PLcom/android/server/net/NetworkStatsService;->updatePersistThresholds()V
+PLcom/android/server/notification/-$Lambda$0oXbfIRCVxclfVVwXaE3J61tRFA$2;->$m$1()V
+PLcom/android/server/notification/-$Lambda$0oXbfIRCVxclfVVwXaE3J61tRFA$3;-><init>(II)V
+PLcom/android/server/notification/AlertRateLimiter;-><init>()V
+PLcom/android/server/notification/BadgeExtractor;-><init>()V
+PLcom/android/server/notification/BadgeExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
+PLcom/android/server/notification/BadgeExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
+PLcom/android/server/notification/CalendarTracker$1;-><init>(Lcom/android/server/notification/CalendarTracker;Landroid/os/Handler;)V
+PLcom/android/server/notification/CalendarTracker$CheckEventResult;-><init>()V
+PLcom/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;->getPrimaryCalendars()Landroid/util/ArraySet;
+PLcom/android/server/notification/CalendarTracker;->setCallback(Lcom/android/server/notification/CalendarTracker$Callback;)V
+PLcom/android/server/notification/CalendarTracker;->setRegistered(Z)V
+PLcom/android/server/notification/ConditionProviders$ConditionRecord;-><init>(Landroid/net/Uri;Landroid/content/ComponentName;)V
+PLcom/android/server/notification/ConditionProviders$ConditionRecord;-><init>(Landroid/net/Uri;Landroid/content/ComponentName;Lcom/android/server/notification/ConditionProviders$ConditionRecord;)V
+PLcom/android/server/notification/ConditionProviders;-><init>(Landroid/content/Context;Lcom/android/server/notification/ManagedServices$UserProfiles;Landroid/content/pm/IPackageManager;)V
+PLcom/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;
+PLcom/android/server/notification/ConditionProviders;->ensureRecordExists(Landroid/content/ComponentName;Landroid/net/Uri;Landroid/service/notification/IConditionProvider;)V
+PLcom/android/server/notification/ConditionProviders;->getSystemProviders()Ljava/lang/Iterable;
+PLcom/android/server/notification/ConditionProviders;->isSystemProviderEnabled(Ljava/lang/String;)Z
+PLcom/android/server/notification/ConditionProviders;->notifyConditions(Ljava/lang/String;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;[Landroid/service/notification/Condition;)V
+PLcom/android/server/notification/ConditionProviders;->onBootPhaseAppsCanStart()V
+PLcom/android/server/notification/ConditionProviders;->onPackagesChanged(Z[Ljava/lang/String;[I)V
+PLcom/android/server/notification/ConditionProviders;->onServiceAdded(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;
+PLcom/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;
+PLcom/android/server/notification/ConditionProviders;->safeSet([Ljava/lang/Object;)Landroid/util/ArraySet;
+PLcom/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
+PLcom/android/server/notification/CountdownConditionProvider$Receiver;-><init>(Lcom/android/server/notification/CountdownConditionProvider;)V
+PLcom/android/server/notification/CountdownConditionProvider$Receiver;-><init>(Lcom/android/server/notification/CountdownConditionProvider;Lcom/android/server/notification/CountdownConditionProvider$Receiver;)V
+PLcom/android/server/notification/CountdownConditionProvider;-><init>()V
+PLcom/android/server/notification/CountdownConditionProvider;->asInterface()Landroid/service/notification/IConditionProvider;
+PLcom/android/server/notification/CountdownConditionProvider;->attachBase(Landroid/content/Context;)V
+PLcom/android/server/notification/CountdownConditionProvider;->getComponent()Landroid/content/ComponentName;
+PLcom/android/server/notification/CountdownConditionProvider;->isValidConditionId(Landroid/net/Uri;)Z
+PLcom/android/server/notification/CountdownConditionProvider;->onBootComplete()V
+PLcom/android/server/notification/CountdownConditionProvider;->onConnected()V
+PLcom/android/server/notification/EventConditionProvider$1;-><init>(Lcom/android/server/notification/EventConditionProvider;)V
+PLcom/android/server/notification/EventConditionProvider$2;-><init>(Lcom/android/server/notification/EventConditionProvider;)V
+PLcom/android/server/notification/EventConditionProvider$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/notification/EventConditionProvider$3;-><init>(Lcom/android/server/notification/EventConditionProvider;)V
+PLcom/android/server/notification/EventConditionProvider$3;->run()V
+PLcom/android/server/notification/EventConditionProvider$4;-><init>(Lcom/android/server/notification/EventConditionProvider;)V
+PLcom/android/server/notification/EventConditionProvider;->-get0()Z
+PLcom/android/server/notification/EventConditionProvider;->-wrap0(Lcom/android/server/notification/EventConditionProvider;)V
+PLcom/android/server/notification/EventConditionProvider;->-wrap1(Lcom/android/server/notification/EventConditionProvider;)V
+PLcom/android/server/notification/EventConditionProvider;-><init>()V
+PLcom/android/server/notification/EventConditionProvider;->asInterface()Landroid/service/notification/IConditionProvider;
+PLcom/android/server/notification/EventConditionProvider;->attachBase(Landroid/content/Context;)V
+PLcom/android/server/notification/EventConditionProvider;->createCondition(Landroid/net/Uri;I)Landroid/service/notification/Condition;
+PLcom/android/server/notification/EventConditionProvider;->evaluateSubscriptions()V
+PLcom/android/server/notification/EventConditionProvider;->evaluateSubscriptionsW()V
+PLcom/android/server/notification/EventConditionProvider;->getComponent()Landroid/content/ComponentName;
+PLcom/android/server/notification/EventConditionProvider;->isValidConditionId(Landroid/net/Uri;)Z
+PLcom/android/server/notification/EventConditionProvider;->onBootComplete()V
+PLcom/android/server/notification/EventConditionProvider;->onConnected()V
+PLcom/android/server/notification/EventConditionProvider;->onSubscribe(Landroid/net/Uri;)V
+PLcom/android/server/notification/EventConditionProvider;->reloadTrackers()V
+PLcom/android/server/notification/EventConditionProvider;->rescheduleAlarm(JJ)V
+PLcom/android/server/notification/EventConditionProvider;->setRegistered(Z)V
+PLcom/android/server/notification/GlobalSortKeyComparator;-><init>()V
+PLcom/android/server/notification/GroupHelper;-><init>(Lcom/android/server/notification/GroupHelper$Callback;)V
+PLcom/android/server/notification/GroupHelper;->adjustAutogroupingSummary(ILjava/lang/String;Ljava/lang/String;Z)V
+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
+PLcom/android/server/notification/ImportanceExtractor;-><init>()V
+PLcom/android/server/notification/ImportanceExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
+PLcom/android/server/notification/ImportanceExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
+PLcom/android/server/notification/ManagedServices$1;-><init>(Lcom/android/server/notification/ManagedServices;Ljava/lang/String;IZI)V
+PLcom/android/server/notification/ManagedServices$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/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;->getOwner()Lcom/android/server/notification/ManagedServices;
+PLcom/android/server/notification/ManagedServices$UserProfiles;-><init>()V
+PLcom/android/server/notification/ManagedServices$UserProfiles;->getCurrentProfileIds()[I
+PLcom/android/server/notification/ManagedServices$UserProfiles;->isCurrentProfile(I)Z
+PLcom/android/server/notification/ManagedServices$UserProfiles;->updateCache(Landroid/content/Context;)V
+PLcom/android/server/notification/ManagedServices;->-get1(Lcom/android/server/notification/ManagedServices;)Ljava/util/ArrayList;
+PLcom/android/server/notification/ManagedServices;->-get2(Lcom/android/server/notification/ManagedServices;)Ljava/util/ArrayList;
+PLcom/android/server/notification/ManagedServices;->-wrap0(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;-><init>(Landroid/content/Context;Ljava/lang/Object;Lcom/android/server/notification/ManagedServices$UserProfiles;Landroid/content/pm/IPackageManager;)V
+PLcom/android/server/notification/ManagedServices;->addApprovedList(Ljava/lang/String;IZ)V
+PLcom/android/server/notification/ManagedServices;->checkNotNull(Landroid/os/IInterface;)V
+PLcom/android/server/notification/ManagedServices;->checkServiceTokenLocked(Landroid/os/IInterface;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
+PLcom/android/server/notification/ManagedServices;->getApprovedValue(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/notification/ManagedServices;->getCaption()Ljava/lang/String;
+PLcom/android/server/notification/ManagedServices;->getPackageName(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/notification/ManagedServices;->isComponentEnabledForCurrentProfiles(Landroid/content/ComponentName;)Z
+PLcom/android/server/notification/ManagedServices;->loadComponentNamesFromValues(Landroid/util/ArraySet;I)Landroid/util/ArraySet;
+PLcom/android/server/notification/ManagedServices;->newServiceInfo(Landroid/os/IInterface;Landroid/content/ComponentName;IZLandroid/content/ServiceConnection;I)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
+PLcom/android/server/notification/ManagedServices;->onBootPhaseAppsCanStart()V
+PLcom/android/server/notification/ManagedServices;->onUserSwitched(I)V
+PLcom/android/server/notification/ManagedServices;->onUserUnlocked(I)V
+PLcom/android/server/notification/ManagedServices;->queryPackageForServices(Ljava/lang/String;I)Ljava/util/Set;
+PLcom/android/server/notification/ManagedServices;->queryPackageForServices(Ljava/lang/String;II)Ljava/util/Set;
+PLcom/android/server/notification/ManagedServices;->readXml(Lorg/xmlpull/v1/XmlPullParser;)V
+PLcom/android/server/notification/ManagedServices;->registerService(Landroid/content/ComponentName;I)V
+PLcom/android/server/notification/ManagedServices;->registerService(Landroid/os/IInterface;Landroid/content/ComponentName;I)V
+PLcom/android/server/notification/ManagedServices;->registerServiceImpl(Landroid/os/IInterface;Landroid/content/ComponentName;I)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
+PLcom/android/server/notification/ManagedServices;->registerServiceImpl(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
+PLcom/android/server/notification/ManagedServices;->registerServiceLocked(Landroid/content/ComponentName;I)V
+PLcom/android/server/notification/ManagedServices;->registerServiceLocked(Landroid/content/ComponentName;IZ)V
+PLcom/android/server/notification/ManagedServices;->removeServiceLocked(I)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
+PLcom/android/server/notification/ManagedServices;->setComponentState(Landroid/content/ComponentName;Z)V
+PLcom/android/server/notification/ManagedServices;->setPackageOrComponentEnabled(Ljava/lang/String;IZZ)V
+PLcom/android/server/notification/ManagedServices;->unregisterServiceLocked(Landroid/content/ComponentName;I)V
+PLcom/android/server/notification/NotificationAdjustmentExtractor;-><init>()V
+PLcom/android/server/notification/NotificationAdjustmentExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
+PLcom/android/server/notification/NotificationAdjustmentExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
+PLcom/android/server/notification/NotificationChannelExtractor;-><init>()V
+PLcom/android/server/notification/NotificationChannelExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
+PLcom/android/server/notification/NotificationChannelExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
+PLcom/android/server/notification/NotificationComparator$1;-><init>(Lcom/android/server/notification/NotificationComparator;)V
+PLcom/android/server/notification/NotificationComparator;-><init>(Landroid/content/Context;)V
+PLcom/android/server/notification/NotificationIntrusivenessExtractor;-><init>()V
+PLcom/android/server/notification/NotificationIntrusivenessExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
+PLcom/android/server/notification/NotificationIntrusivenessExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
+PLcom/android/server/notification/NotificationManagerService$10;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$11;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$11;->removeAutoGroupSummary(ILjava/lang/String;)V
+PLcom/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
+PLcom/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$-com_android_server_notification_NotificationManagerService$15_208265(III)Z
+PLcom/android/server/notification/NotificationManagerService$17;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$1;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$1;->clearEffects()V
+PLcom/android/server/notification/NotificationManagerService$1;->onNotificationExpansionChanged(Ljava/lang/String;ZZ)V
+PLcom/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
+PLcom/android/server/notification/NotificationManagerService$1;->onSetDisabled(I)V
+PLcom/android/server/notification/NotificationManagerService$2;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$3;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$4;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$5;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/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
+PLcom/android/server/notification/NotificationManagerService$7$1;-><init>(Lcom/android/server/notification/NotificationManagerService$7;Ljava/lang/String;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;[Landroid/service/notification/Condition;)V
+PLcom/android/server/notification/NotificationManagerService$7$1;->run()V
+PLcom/android/server/notification/NotificationManagerService$7;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$7;->areNotificationsEnabled(Ljava/lang/String;)Z
+PLcom/android/server/notification/NotificationManagerService$7;->areNotificationsEnabledForPackage(Ljava/lang/String;I)Z
+PLcom/android/server/notification/NotificationManagerService$7;->cancelAllNotifications(Ljava/lang/String;I)V
+PLcom/android/server/notification/NotificationManagerService$7;->deleteNotificationChannel(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$7;->enforcePolicyAccess(ILjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$7;->enforceSystemOrSystemUI(Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$7;->enqueueNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;I)V
+PLcom/android/server/notification/NotificationManagerService$7;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;I)V
+PLcom/android/server/notification/NotificationManagerService$7;->getAppActiveNotifications(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/notification/NotificationManagerService$7;->getEffectsSuppressor()Landroid/content/ComponentName;
+PLcom/android/server/notification/NotificationManagerService$7;->getNotificationChannels(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/notification/NotificationManagerService$7;->getZenMode()I
+PLcom/android/server/notification/NotificationManagerService$7;->getZenModeConfig()Landroid/service/notification/ZenModeConfig;
+PLcom/android/server/notification/NotificationManagerService$7;->getZenRules()Ljava/util/List;
+PLcom/android/server/notification/NotificationManagerService$7;->notifyConditions(Ljava/lang/String;Landroid/service/notification/IConditionProvider;[Landroid/service/notification/Condition;)V
+PLcom/android/server/notification/NotificationManagerService$7;->registerListener(Landroid/service/notification/INotificationListener;Landroid/content/ComponentName;I)V
+PLcom/android/server/notification/NotificationManagerService$7;->requestBindListener(Landroid/content/ComponentName;)V
+PLcom/android/server/notification/NotificationManagerService$7;->requestUnbindListener(Landroid/service/notification/INotificationListener;)V
+PLcom/android/server/notification/NotificationManagerService$7;->sanitizeSbn(Ljava/lang/String;ILandroid/service/notification/StatusBarNotification;)Landroid/service/notification/StatusBarNotification;
+PLcom/android/server/notification/NotificationManagerService$7;->setNotificationListenerAccessGrantedForUser(Landroid/content/ComponentName;IZ)V
+PLcom/android/server/notification/NotificationManagerService$7;->setNotificationPolicyAccessGranted(Ljava/lang/String;Z)V
+PLcom/android/server/notification/NotificationManagerService$7;->setNotificationsShownFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$8;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$8;->enqueueNotification(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;I)V
+PLcom/android/server/notification/NotificationManagerService$9;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService$9;->onConfigChanged()V
+PLcom/android/server/notification/NotificationManagerService$Archive;-><init>(I)V
+PLcom/android/server/notification/NotificationManagerService$Archive;->record(Landroid/service/notification/StatusBarNotification;)V
+PLcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;ILcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/content/pm/IPackageManager;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isEnabled()Z
+PLcom/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
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners$2;->run()V
+PLcom/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;I)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners$3;->run()V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->-wrap2(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;->-wrap4(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;I)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/content/pm/IPackageManager;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->asInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getOnNotificationPostedTrim(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)I
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$-com_android_server_notification_NotificationManagerService$NotificationListeners_243589(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V
+PLcom/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;->notifyRemoved(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;I)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyRemovedLocked(Landroid/service/notification/StatusBarNotification;I)V
+PLcom/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
+PLcom/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
+PLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Looper;)V
+PLcom/android/server/notification/NotificationManagerService$SettingsObserver;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Handler;)V
+PLcom/android/server/notification/NotificationManagerService$SettingsObserver;->observe()V
+PLcom/android/server/notification/NotificationManagerService$SettingsObserver;->update(Landroid/net/Uri;)V
+PLcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;-><init>(Landroid/service/notification/StatusBarNotification;)V
+PLcom/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;)V
+PLcom/android/server/notification/NotificationManagerService$TrimCache;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;)V
+PLcom/android/server/notification/NotificationManagerService$TrimCache;->ForListener(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/StatusBarNotification;
+PLcom/android/server/notification/NotificationManagerService$WorkerHandler;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Looper;)V
+PLcom/android/server/notification/NotificationManagerService;->-get1()I
+PLcom/android/server/notification/NotificationManagerService;->-get10(Lcom/android/server/notification/NotificationManagerService;)Ljava/util/List;
+PLcom/android/server/notification/NotificationManagerService;->-get11(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/GroupHelper;
+PLcom/android/server/notification/NotificationManagerService;->-get12(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
+PLcom/android/server/notification/NotificationManagerService;->-get19(Lcom/android/server/notification/NotificationManagerService;)F
+PLcom/android/server/notification/NotificationManagerService;->-get2()I
+PLcom/android/server/notification/NotificationManagerService;->-get20(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/lights/Light;
+PLcom/android/server/notification/NotificationManagerService;->-get21(Lcom/android/server/notification/NotificationManagerService;)Z
+PLcom/android/server/notification/NotificationManagerService;->-get22(Lcom/android/server/notification/NotificationManagerService;)Landroid/content/pm/IPackageManager;
+PLcom/android/server/notification/NotificationManagerService;->-get26(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$SettingsObserver;
+PLcom/android/server/notification/NotificationManagerService;->-get28(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationUsageStats;
+PLcom/android/server/notification/NotificationManagerService;->-get29(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/ManagedServices$UserProfiles;
+PLcom/android/server/notification/NotificationManagerService;->-get3(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/ActivityManager;
+PLcom/android/server/notification/NotificationManagerService;->-get30(Lcom/android/server/notification/NotificationManagerService;)Landroid/view/WindowManagerInternal;
+PLcom/android/server/notification/NotificationManagerService;->-get5(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/usage/UsageStatsManagerInternal;
+PLcom/android/server/notification/NotificationManagerService;->-get7(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
+PLcom/android/server/notification/NotificationManagerService;->-get9(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/ConditionProviders;
+PLcom/android/server/notification/NotificationManagerService;->-set1(Lcom/android/server/notification/NotificationManagerService;Z)Z
+PLcom/android/server/notification/NotificationManagerService;->-set2(Lcom/android/server/notification/NotificationManagerService;F)F
+PLcom/android/server/notification/NotificationManagerService;->-wrap0(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/NotificationRankingUpdate;
+PLcom/android/server/notification/NotificationManagerService;->-wrap1(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;)Z
+PLcom/android/server/notification/NotificationManagerService;->-wrap10(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Ljava/lang/String;
+PLcom/android/server/notification/NotificationManagerService;->-wrap13(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationManagerService;->-wrap14(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;->-wrap15(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;->-wrap16(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;ZIZLjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->-wrap19(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->-wrap2(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;I)Z
+PLcom/android/server/notification/NotificationManagerService;->-wrap21(Lcom/android/server/notification/NotificationManagerService;ILjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->-wrap22(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->-wrap23(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->-wrap24(Lcom/android/server/notification/NotificationManagerService;)V
+PLcom/android/server/notification/NotificationManagerService;->-wrap28(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V
+PLcom/android/server/notification/NotificationManagerService;->-wrap34(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService$ToastRecord;)V
+PLcom/android/server/notification/NotificationManagerService;->-wrap4(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
+PLcom/android/server/notification/NotificationManagerService;->-wrap6(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/NotificationManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/notification/NotificationManagerService;->applyZenModeLocked(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/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
+PLcom/android/server/notification/NotificationManagerService;->cancelNotificationLocked(Lcom/android/server/notification/NotificationRecord;ZIZLjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->cancelToastLocked(I)V
+PLcom/android/server/notification/NotificationManagerService;->checkCallerIsSystem()V
+PLcom/android/server/notification/NotificationManagerService;->checkCallerIsSystemOrShell()V
+PLcom/android/server/notification/NotificationManagerService;->clearAutogroupSummaryLocked(ILjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService;->clearLightsLocked()V
+PLcom/android/server/notification/NotificationManagerService;->clearSoundLocked()V
+PLcom/android/server/notification/NotificationManagerService;->clearVibrateLocked()V
+PLcom/android/server/notification/NotificationManagerService;->disableNotificationEffects(Lcom/android/server/notification/NotificationRecord;)Ljava/lang/String;
+PLcom/android/server/notification/NotificationManagerService;->findNotificationByListLocked(Ljava/util/ArrayList;Ljava/lang/String;)Lcom/android/server/notification/NotificationRecord;
+PLcom/android/server/notification/NotificationManagerService;->getCompanionManager()Landroid/companion/ICompanionDeviceManager;
+PLcom/android/server/notification/NotificationManagerService;->getGroupHelper()Lcom/android/server/notification/GroupHelper;
+PLcom/android/server/notification/NotificationManagerService;->getLongArray(Landroid/content/res/Resources;II[J)[J
+PLcom/android/server/notification/NotificationManagerService;->handleGroupedNotificationLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V
+PLcom/android/server/notification/NotificationManagerService;->handleTimeout(Lcom/android/server/notification/NotificationManagerService$ToastRecord;)V
+PLcom/android/server/notification/NotificationManagerService;->hasAutoGroupSummaryLocked(Landroid/service/notification/StatusBarNotification;)Z
+PLcom/android/server/notification/NotificationManagerService;->indexOfToastLocked(Ljava/lang/String;Landroid/app/ITransientNotification;)I
+PLcom/android/server/notification/NotificationManagerService;->indexOfToastPackageLocked(Ljava/lang/String;)I
+PLcom/android/server/notification/NotificationManagerService;->init(Landroid/os/Looper;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;)V
+PLcom/android/server/notification/NotificationManagerService;->isBlocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationUsageStats;)Z
+PLcom/android/server/notification/NotificationManagerService;->isCallerInstantApp(Ljava/lang/String;)Z
+PLcom/android/server/notification/NotificationManagerService;->isPackageSuspendedForUser(Ljava/lang/String;I)Z
+PLcom/android/server/notification/NotificationManagerService;->keepProcessAliveIfNeededLocked(I)V
+PLcom/android/server/notification/NotificationManagerService;->listenForCallState()V
+PLcom/android/server/notification/NotificationManagerService;->loadPolicyFile()V
+PLcom/android/server/notification/NotificationManagerService;->onBootPhase(I)V
+PLcom/android/server/notification/NotificationManagerService;->onStart()V
+PLcom/android/server/notification/NotificationManagerService;->readPolicyXml(Ljava/io/InputStream;Z)V
+PLcom/android/server/notification/NotificationManagerService;->recordCallerLocked(Lcom/android/server/notification/NotificationRecord;)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
+PLcom/android/server/notification/NotificationManagerService;->resolveNotificationUid(Ljava/lang/String;II)I
+PLcom/android/server/notification/NotificationManagerService;->scheduleTimeoutLocked(Lcom/android/server/notification/NotificationManagerService$ToastRecord;)V
+PLcom/android/server/notification/NotificationManagerService;->scheduleTimeoutLocked(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationManagerService;->showNextToastLocked()V
+PLcom/android/server/notification/NotificationManagerService;->updateLightsLocked()V
+PLcom/android/server/notification/NotificationRecord;->calculateAttributes()Landroid/media/AudioAttributes;
+PLcom/android/server/notification/NotificationRecord;->calculateRankingTimeMs(J)J
+PLcom/android/server/notification/NotificationRecord;->calculateSound()Landroid/net/Uri;
+PLcom/android/server/notification/NotificationRecord;->calculateVibration()[J
+PLcom/android/server/notification/NotificationRecord;->copyRankingInformation(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationRecord;->getChannelIdLogTag()Ljava/lang/String;
+PLcom/android/server/notification/NotificationRecord;->getExposureMs(J)I
+PLcom/android/server/notification/NotificationRecord;->getGroupLogTag()Ljava/lang/String;
+PLcom/android/server/notification/NotificationRecord;->getLifespanMs(J)I
+PLcom/android/server/notification/NotificationRecord;->getLight()Lcom/android/server/notification/NotificationRecord$Light;
+PLcom/android/server/notification/NotificationRecord;->isCategory(Ljava/lang/String;)Z
+PLcom/android/server/notification/NotificationRecord;->isPreChannelsNotification()Z
+PLcom/android/server/notification/NotificationRecord;->isSeen()Z
+PLcom/android/server/notification/NotificationRecord;->setContactAffinity(F)V
+PLcom/android/server/notification/NotificationRecord;->setIntercepted(Z)Z
+PLcom/android/server/notification/NotificationRecord;->setSeen()V
+PLcom/android/server/notification/NotificationRecord;->setSuppressedVisualEffects(I)V
+PLcom/android/server/notification/NotificationRecord;->shortenTag(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/notification/NotificationUsageStats$1;-><init>(Lcom/android/server/notification/NotificationUsageStats;Landroid/os/Looper;)V
+PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;-><init>(Landroid/content/Context;Ljava/lang/String;)V
+PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->getEnqueueRate(J)F
+PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->updateInterarrivalEstimate(J)V
+PLcom/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
+PLcom/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;->-wrap0(Lcom/android/server/notification/NotificationUsageStats$SQLiteLog;JILcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;-><init>(Landroid/content/Context;)V
+PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->logPosted(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->logRemoved(Lcom/android/server/notification/NotificationRecord;)V
+PLcom/android/server/notification/NotificationUsageStats$SQLiteLog;->pruneIfNecessary(Landroid/database/sqlite/SQLiteDatabase;)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$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
+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;->updateFrom(Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;)V
+PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->updateVisiblyExpandedStats()V
+PLcom/android/server/notification/NotificationUsageStats;-><init>(Landroid/content/Context;)V
+PLcom/android/server/notification/NotificationUsageStats;->getAppEnqueueRate(Ljava/lang/String;)F
+PLcom/android/server/notification/NotificationUsageStats;->registerEnqueuedByApp(Ljava/lang/String;)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
+PLcom/android/server/notification/PriorityExtractor;-><init>()V
+PLcom/android/server/notification/PriorityExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
+PLcom/android/server/notification/PriorityExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
+PLcom/android/server/notification/PropConfig;->getStringArray(Landroid/content/Context;Ljava/lang/String;I)[Ljava/lang/String;
+PLcom/android/server/notification/RankingHelper$Record;-><init>()V
+PLcom/android/server/notification/RankingHelper$Record;-><init>(Lcom/android/server/notification/RankingHelper$Record;)V
+PLcom/android/server/notification/RankingHelper;-><init>(Landroid/content/Context;Landroid/content/pm/PackageManager;Lcom/android/server/notification/RankingHandler;Lcom/android/server/notification/NotificationUsageStats;[Ljava/lang/String;)V
+PLcom/android/server/notification/RankingHelper;->clearLockedFields(Landroid/app/NotificationChannel;)V
+PLcom/android/server/notification/RankingHelper;->createDefaultChannelIfNeeded(Lcom/android/server/notification/RankingHelper$Record;)V
+PLcom/android/server/notification/RankingHelper;->deleteDefaultChannelIfNeeded(Lcom/android/server/notification/RankingHelper$Record;)V
+PLcom/android/server/notification/RankingHelper;->deleteNotificationChannel(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/notification/RankingHelper;->getChannelLog(Landroid/app/NotificationChannel;Ljava/lang/String;)Landroid/metrics/LogMaker;
+PLcom/android/server/notification/RankingHelper;->getImportance(Ljava/lang/String;I)I
+PLcom/android/server/notification/RankingHelper;->getNotificationChannelGroups(Ljava/lang/String;I)Ljava/util/Collection;
+PLcom/android/server/notification/RankingHelper;->getNotificationChannels(Ljava/lang/String;IZ)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/notification/RankingHelper;->shouldHaveDefaultChannel(Lcom/android/server/notification/RankingHelper$Record;)Z
+PLcom/android/server/notification/RankingHelper;->updateBadgingEnabled()V
+PLcom/android/server/notification/RateEstimator;-><init>()V
+PLcom/android/server/notification/RateEstimator;->getInterarrivalEstimate(J)D
+PLcom/android/server/notification/RateEstimator;->getRate(J)F
+PLcom/android/server/notification/RateEstimator;->update(J)F
+PLcom/android/server/notification/ScheduleCalendar;-><init>()V
+PLcom/android/server/notification/ScheduleCalendar;->addDays(JI)J
+PLcom/android/server/notification/ScheduleCalendar;->getDayOfWeek(J)I
+PLcom/android/server/notification/ScheduleCalendar;->getNextChangeTime(J)J
+PLcom/android/server/notification/ScheduleCalendar;->getNextTime(JII)J
+PLcom/android/server/notification/ScheduleCalendar;->getTime(JII)J
+PLcom/android/server/notification/ScheduleCalendar;->isInSchedule(IJJJ)Z
+PLcom/android/server/notification/ScheduleCalendar;->isInSchedule(J)Z
+PLcom/android/server/notification/ScheduleCalendar;->maybeSetNextAlarm(JJ)V
+PLcom/android/server/notification/ScheduleCalendar;->setSchedule(Landroid/service/notification/ZenModeConfig$ScheduleInfo;)V
+PLcom/android/server/notification/ScheduleCalendar;->setTimeZone(Ljava/util/TimeZone;)V
+PLcom/android/server/notification/ScheduleCalendar;->updateDays()V
+PLcom/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
+PLcom/android/server/notification/ScheduleConditionProvider;->-wrap0(Lcom/android/server/notification/ScheduleConditionProvider;)V
+PLcom/android/server/notification/ScheduleConditionProvider;-><init>()V
+PLcom/android/server/notification/ScheduleConditionProvider;->asInterface()Landroid/service/notification/IConditionProvider;
+PLcom/android/server/notification/ScheduleConditionProvider;->attachBase(Landroid/content/Context;)V
+PLcom/android/server/notification/ScheduleConditionProvider;->createCondition(Landroid/net/Uri;ILjava/lang/String;)Landroid/service/notification/Condition;
+PLcom/android/server/notification/ScheduleConditionProvider;->evaluateSubscriptions()V
+PLcom/android/server/notification/ScheduleConditionProvider;->getComponent()Landroid/content/ComponentName;
+PLcom/android/server/notification/ScheduleConditionProvider;->getNextAlarm()J
+PLcom/android/server/notification/ScheduleConditionProvider;->isValidConditionId(Landroid/net/Uri;)Z
+PLcom/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;->toScheduleCalendar(Landroid/net/Uri;)Lcom/android/server/notification/ScheduleCalendar;
+PLcom/android/server/notification/ScheduleConditionProvider;->updateAlarm(JJ)V
+PLcom/android/server/notification/SnoozeHelper$1;-><init>(Lcom/android/server/notification/SnoozeHelper;)V
+PLcom/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
+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
+PLcom/android/server/notification/SnoozeHelper;->repostGroupSummary(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/notification/SystemConditionProviderService;-><init>()V
+PLcom/android/server/notification/SystemConditionProviderService;->formatDuration(J)Ljava/lang/String;
+PLcom/android/server/notification/SystemConditionProviderService;->ts(J)Ljava/lang/String;
+PLcom/android/server/notification/ValidateNotificationPeople$1;-><init>(Lcom/android/server/notification/ValidateNotificationPeople;Landroid/os/Handler;)V
+PLcom/android/server/notification/ValidateNotificationPeople;-><init>()V
+PLcom/android/server/notification/ValidateNotificationPeople;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
+PLcom/android/server/notification/ValidateNotificationPeople;->setConfig(Lcom/android/server/notification/RankingConfig;)V
+PLcom/android/server/notification/VisibilityExtractor;-><init>()V
+PLcom/android/server/notification/VisibilityExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
+PLcom/android/server/notification/VisibilityExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
+PLcom/android/server/notification/ZenLog;->append(ILjava/lang/String;)V
+PLcom/android/server/notification/ZenLog;->subscribeResult(Landroid/service/notification/IConditionProvider;Landroid/os/RemoteException;)Ljava/lang/String;
+PLcom/android/server/notification/ZenLog;->traceConfig(Ljava/lang/String;Landroid/service/notification/ZenModeConfig;Landroid/service/notification/ZenModeConfig;)V
+PLcom/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
+PLcom/android/server/notification/ZenLog;->typeToString(I)Ljava/lang/String;
+PLcom/android/server/notification/ZenLog;->zenModeToString(I)Ljava/lang/String;
+PLcom/android/server/notification/ZenModeConditions;-><init>(Lcom/android/server/notification/ZenModeHelper;Lcom/android/server/notification/ConditionProviders;)V
+PLcom/android/server/notification/ZenModeConditions;->evaluateConfig(Landroid/service/notification/ZenModeConfig;Z)V
+PLcom/android/server/notification/ZenModeConditions;->onBootComplete()V
+PLcom/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
+PLcom/android/server/notification/ZenModeConditions;->updateCondition(Landroid/net/Uri;Landroid/service/notification/Condition;Landroid/service/notification/ZenModeConfig$ZenRule;)Z
+PLcom/android/server/notification/ZenModeConditions;->updateSnoozing(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
+PLcom/android/server/notification/ZenModeFiltering$RepeatCallers;-><init>()V
+PLcom/android/server/notification/ZenModeFiltering$RepeatCallers;-><init>(Lcom/android/server/notification/ZenModeFiltering$RepeatCallers;)V
+PLcom/android/server/notification/ZenModeFiltering;-><init>(Landroid/content/Context;)V
+PLcom/android/server/notification/ZenModeFiltering;->isCall(Lcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/ZenModeFiltering;->isDefaultPhoneApp(Ljava/lang/String;)Z
+PLcom/android/server/notification/ZenModeFiltering;->shouldIntercept(ILandroid/service/notification/ZenModeConfig;Lcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/ZenModeHelper$Callback;-><init>()V
+PLcom/android/server/notification/ZenModeHelper$Callback;->onConfigChanged()V
+PLcom/android/server/notification/ZenModeHelper$H$ConfigMessageData;-><init>(Lcom/android/server/notification/ZenModeHelper$H;Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Z)V
+PLcom/android/server/notification/ZenModeHelper$H;->-wrap0(Lcom/android/server/notification/ZenModeHelper$H;Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Z)V
+PLcom/android/server/notification/ZenModeHelper$H;->-wrap2(Lcom/android/server/notification/ZenModeHelper$H;)V
+PLcom/android/server/notification/ZenModeHelper$H;-><init>(Lcom/android/server/notification/ZenModeHelper;Landroid/os/Looper;)V
+PLcom/android/server/notification/ZenModeHelper$H;-><init>(Lcom/android/server/notification/ZenModeHelper;Landroid/os/Looper;Lcom/android/server/notification/ZenModeHelper$H;)V
+PLcom/android/server/notification/ZenModeHelper$H;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/notification/ZenModeHelper$H;->postApplyConfig(Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Z)V
+PLcom/android/server/notification/ZenModeHelper$H;->postMetricsTimer()V
+PLcom/android/server/notification/ZenModeHelper$Metrics;-><init>(Lcom/android/server/notification/ZenModeHelper;)V
+PLcom/android/server/notification/ZenModeHelper$Metrics;-><init>(Lcom/android/server/notification/ZenModeHelper;Lcom/android/server/notification/ZenModeHelper$Metrics;)V
+PLcom/android/server/notification/ZenModeHelper$RingerModeDelegate;-><init>(Lcom/android/server/notification/ZenModeHelper;)V
+PLcom/android/server/notification/ZenModeHelper$RingerModeDelegate;-><init>(Lcom/android/server/notification/ZenModeHelper;Lcom/android/server/notification/ZenModeHelper$RingerModeDelegate;)V
+PLcom/android/server/notification/ZenModeHelper$RingerModeDelegate;->getRingerModeAffectedStreams(I)I
+PLcom/android/server/notification/ZenModeHelper$RingerModeDelegate;->onSetRingerModeInternal(IILjava/lang/String;ILandroid/media/VolumePolicy;)I
+PLcom/android/server/notification/ZenModeHelper$SettingsObserver;-><init>(Lcom/android/server/notification/ZenModeHelper;Landroid/os/Handler;)V
+PLcom/android/server/notification/ZenModeHelper$SettingsObserver;->observe()V
+PLcom/android/server/notification/ZenModeHelper$SettingsObserver;->update(Landroid/net/Uri;)V
+PLcom/android/server/notification/ZenModeHelper;->-get0(Lcom/android/server/notification/ZenModeHelper;)Landroid/content/Context;
+PLcom/android/server/notification/ZenModeHelper;->-get3(Lcom/android/server/notification/ZenModeHelper;)I
+PLcom/android/server/notification/ZenModeHelper;->-wrap1(Lcom/android/server/notification/ZenModeHelper;Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Z)V
+PLcom/android/server/notification/ZenModeHelper;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/notification/ConditionProviders;)V
+PLcom/android/server/notification/ZenModeHelper;->addCallback(Lcom/android/server/notification/ZenModeHelper$Callback;)V
+PLcom/android/server/notification/ZenModeHelper;->appendDefaultEventRules(Landroid/service/notification/ZenModeConfig;)V
+PLcom/android/server/notification/ZenModeHelper;->appendDefaultRules(Landroid/service/notification/ZenModeConfig;)V
+PLcom/android/server/notification/ZenModeHelper;->appendDefaultScheduleRules(Landroid/service/notification/ZenModeConfig;)V
+PLcom/android/server/notification/ZenModeHelper;->applyConfig(Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Z)V
+PLcom/android/server/notification/ZenModeHelper;->applyZenToRingerMode()V
+PLcom/android/server/notification/ZenModeHelper;->canManageAutomaticZenRule(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
+PLcom/android/server/notification/ZenModeHelper;->cleanUpZenRules()V
+PLcom/android/server/notification/ZenModeHelper;->computeZenMode()I
+PLcom/android/server/notification/ZenModeHelper;->dispatchOnConfigChanged()V
+PLcom/android/server/notification/ZenModeHelper;->evaluateZenMode(Ljava/lang/String;Z)Z
+PLcom/android/server/notification/ZenModeHelper;->getConfig()Landroid/service/notification/ZenModeConfig;
+PLcom/android/server/notification/ZenModeHelper;->getNotificationPolicy(Landroid/service/notification/ZenModeConfig;)Landroid/app/NotificationManager$Policy;
+PLcom/android/server/notification/ZenModeHelper;->getZenMode()I
+PLcom/android/server/notification/ZenModeHelper;->getZenModeListenerInterruptionFilter()I
+PLcom/android/server/notification/ZenModeHelper;->getZenRules()Ljava/util/List;
+PLcom/android/server/notification/ZenModeHelper;->initZenMode()V
+PLcom/android/server/notification/ZenModeHelper;->isCall(Lcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/ZenModeHelper;->loadConfigForUser(ILjava/lang/String;)V
+PLcom/android/server/notification/ZenModeHelper;->onSystemReady()V
+PLcom/android/server/notification/ZenModeHelper;->onUserSwitched(I)V
+PLcom/android/server/notification/ZenModeHelper;->onUserUnlocked(I)V
+PLcom/android/server/notification/ZenModeHelper;->readDefaultConfig(Landroid/content/res/Resources;)Landroid/service/notification/ZenModeConfig;
+PLcom/android/server/notification/ZenModeHelper;->readXml(Lorg/xmlpull/v1/XmlPullParser;Z)V
+PLcom/android/server/notification/ZenModeHelper;->setConfig(Landroid/service/notification/ZenModeConfig;Ljava/lang/String;)V
+PLcom/android/server/notification/ZenModeHelper;->setConfigLocked(Landroid/service/notification/ZenModeConfig;Ljava/lang/String;)Z
+PLcom/android/server/notification/ZenModeHelper;->setConfigLocked(Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Z)Z
+PLcom/android/server/notification/ZenModeHelper;->setDefaultZenRules(Landroid/content/Context;)V
+PLcom/android/server/notification/ZenModeHelper;->setZenModeSetting(I)V
+PLcom/android/server/notification/ZenModeHelper;->shouldIntercept(Lcom/android/server/notification/NotificationRecord;)Z
+PLcom/android/server/notification/ZenModeHelper;->updateRingerModeAffectedStreams()V
+PLcom/android/server/oemlock/OemLock;-><init>()V
+PLcom/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
+PLcom/android/server/oemlock/OemLockService$2;-><init>(Lcom/android/server/oemlock/OemLockService;)V
+PLcom/android/server/oemlock/OemLockService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/oemlock/OemLockService;-><init>(Landroid/content/Context;Lcom/android/server/oemlock/OemLock;)V
+PLcom/android/server/oemlock/OemLockService;->getOemLock(Landroid/content/Context;)Lcom/android/server/oemlock/OemLock;
+PLcom/android/server/oemlock/OemLockService;->onStart()V
+PLcom/android/server/oemlock/PersistentDataBlockLock;-><init>(Landroid/content/Context;)V
+PLcom/android/server/oemlock/VendorLock;->getOemLockHalService()Landroid/hardware/oemlock/V1_0/IOemLock;
+PLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk$1;->$m$0()Ljava/lang/Object;
+PLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk$1;-><init>()V
+PLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk$1;->get()Ljava/lang/Object;
+PLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk$2;->$m$0(Ljava/lang/Object;)I
+PLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk$2;-><init>()V
+PLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk$2;->applyAsInt(Ljava/lang/Object;)I
+PLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk;->$m$0(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk;->$m$1(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk;->$m$2(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk;-><init>(B)V
+PLcom/android/server/om/-$Lambda$VuwDBWerAG9B6xB4Rr4-FeDL3jk;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/om/-$Lambda$Whs3NIaASrs6bpQxTTs9leTDPyo;->$m$0()V
+PLcom/android/server/om/-$Lambda$Whs3NIaASrs6bpQxTTs9leTDPyo;->$m$1()V
+PLcom/android/server/om/-$Lambda$Whs3NIaASrs6bpQxTTs9leTDPyo;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/om/-$Lambda$Whs3NIaASrs6bpQxTTs9leTDPyo;->run()V
+PLcom/android/server/om/IdmapManager;-><init>(Lcom/android/server/pm/Installer;)V
+PLcom/android/server/om/IdmapManager;->createIdmap(Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageInfo;I)Z
+PLcom/android/server/om/IdmapManager;->getIdmapPath(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/om/IdmapManager;->idmapExists(Landroid/content/pm/PackageInfo;I)Z
+PLcom/android/server/om/OverlayManagerService$1;-><init>(Lcom/android/server/om/OverlayManagerService;)V
+PLcom/android/server/om/OverlayManagerService$OverlayChangeListener;-><init>(Lcom/android/server/om/OverlayManagerService;)V
+PLcom/android/server/om/OverlayManagerService$OverlayChangeListener;-><init>(Lcom/android/server/om/OverlayManagerService;Lcom/android/server/om/OverlayManagerService$OverlayChangeListener;)V
+PLcom/android/server/om/OverlayManagerService$PackageManagerHelper;-><init>()V
+PLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->cachePackageInfo(Ljava/lang/String;ILandroid/content/pm/PackageInfo;)V
+PLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->forgetPackageInfo(Ljava/lang/String;I)V
+PLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->getCachedPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
+PLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->getOverlayPackages(I)Ljava/util/List;
+PLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
+PLcom/android/server/om/OverlayManagerService$PackageManagerHelper;->getPackageInfo(Ljava/lang/String;IZ)Landroid/content/pm/PackageInfo;
+PLcom/android/server/om/OverlayManagerService$PackageReceiver;-><init>(Lcom/android/server/om/OverlayManagerService;)V
+PLcom/android/server/om/OverlayManagerService$PackageReceiver;-><init>(Lcom/android/server/om/OverlayManagerService;Lcom/android/server/om/OverlayManagerService$PackageReceiver;)V
+PLcom/android/server/om/OverlayManagerService$PackageReceiver;->onPackageChanged(Ljava/lang/String;[I)V
+PLcom/android/server/om/OverlayManagerService$PackageReceiver;->onPackageUpgraded(Ljava/lang/String;[I)V
+PLcom/android/server/om/OverlayManagerService$PackageReceiver;->onPackageUpgrading(Ljava/lang/String;[I)V
+PLcom/android/server/om/OverlayManagerService$UserReceiver;-><init>(Lcom/android/server/om/OverlayManagerService;)V
+PLcom/android/server/om/OverlayManagerService$UserReceiver;-><init>(Lcom/android/server/om/OverlayManagerService;Lcom/android/server/om/OverlayManagerService$UserReceiver;)V
+PLcom/android/server/om/OverlayManagerService;->-get0(Lcom/android/server/om/OverlayManagerService;)Lcom/android/server/om/OverlayManagerServiceImpl;
+PLcom/android/server/om/OverlayManagerService;->-get1(Lcom/android/server/om/OverlayManagerService;)Ljava/lang/Object;
+PLcom/android/server/om/OverlayManagerService;->-get2(Lcom/android/server/om/OverlayManagerService;)Lcom/android/server/om/OverlayManagerService$PackageManagerHelper;
+PLcom/android/server/om/OverlayManagerService;->-wrap0(Lcom/android/server/om/OverlayManagerService;Landroid/content/pm/PackageInfo;)Z
+PLcom/android/server/om/OverlayManagerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/Installer;)V
+PLcom/android/server/om/OverlayManagerService;->getDefaultOverlayPackages()Ljava/util/Set;
+PLcom/android/server/om/OverlayManagerService;->initIfNeeded()V
+PLcom/android/server/om/OverlayManagerService;->isOverlayPackage(Landroid/content/pm/PackageInfo;)Z
+PLcom/android/server/om/OverlayManagerService;->lambda$-com_android_server_om_OverlayManagerService_31270()V
+PLcom/android/server/om/OverlayManagerService;->lambda$-com_android_server_om_OverlayManagerService_9907()V
+PLcom/android/server/om/OverlayManagerService;->onBootPhase(I)V
+PLcom/android/server/om/OverlayManagerService;->onStart()V
+PLcom/android/server/om/OverlayManagerService;->onSwitchUser(I)V
+PLcom/android/server/om/OverlayManagerService;->restoreSettings()V
+PLcom/android/server/om/OverlayManagerService;->schedulePersistSettings()V
+PLcom/android/server/om/OverlayManagerService;->updateAssets(ILjava/util/List;)V
+PLcom/android/server/om/OverlayManagerServiceImpl;-><init>(Lcom/android/server/om/OverlayManagerServiceImpl$PackageManagerHelper;Lcom/android/server/om/IdmapManager;Lcom/android/server/om/OverlayManagerSettings;Ljava/util/Set;Lcom/android/server/om/OverlayManagerServiceImpl$OverlayChangeListener;)V
+PLcom/android/server/om/OverlayManagerServiceImpl;->calculateNewState(Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageInfo;I)I
+PLcom/android/server/om/OverlayManagerServiceImpl;->getOverlayInfo(Ljava/lang/String;I)Landroid/content/om/OverlayInfo;
+PLcom/android/server/om/OverlayManagerServiceImpl;->onTargetPackageChanged(Ljava/lang/String;I)V
+PLcom/android/server/om/OverlayManagerServiceImpl;->onTargetPackageUpgraded(Ljava/lang/String;I)V
+PLcom/android/server/om/OverlayManagerServiceImpl;->onTargetPackageUpgrading(Ljava/lang/String;I)V
+PLcom/android/server/om/OverlayManagerServiceImpl;->updateAllOverlaysForTarget(Ljava/lang/String;ILandroid/content/pm/PackageInfo;)Z
+PLcom/android/server/om/OverlayManagerServiceImpl;->updateOverlaysForUser(I)Ljava/util/ArrayList;
+PLcom/android/server/om/OverlayManagerServiceImpl;->updateState(Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageInfo;I)Z
+PLcom/android/server/om/OverlayManagerSettings$BadKeyException;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/om/OverlayManagerSettings$Serializer;->persist(Ljava/util/ArrayList;Ljava/io/OutputStream;)V
+PLcom/android/server/om/OverlayManagerSettings$Serializer;->persistRow(Lcom/android/internal/util/FastXmlSerializer;Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)V
+PLcom/android/server/om/OverlayManagerSettings$Serializer;->restore(Ljava/util/ArrayList;Ljava/io/InputStream;)V
+PLcom/android/server/om/OverlayManagerSettings$Serializer;->restoreRow(Lorg/xmlpull/v1/XmlPullParser;I)Lcom/android/server/om/OverlayManagerSettings$SettingsItem;
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-get0(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Ljava/lang/String;
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-get1(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Z
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-get2(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Z
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-get4(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)I
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-get5(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)I
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-get6(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Ljava/lang/String;
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-wrap0(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Landroid/content/om/OverlayInfo;
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-wrap1(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Z
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-wrap3(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;Ljava/lang/String;)Z
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-wrap6(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)I
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-wrap7(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)I
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;IZZI)V
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->getOverlayInfo()Landroid/content/om/OverlayInfo;
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->getState()I
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->getUserId()I
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->isEnabled()Z
+PLcom/android/server/om/OverlayManagerSettings$SettingsItem;->setBaseCodePath(Ljava/lang/String;)Z
+PLcom/android/server/om/OverlayManagerSettings;->-com_android_server_om_OverlayManagerSettings-mthref-0(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Landroid/content/om/OverlayInfo;
+PLcom/android/server/om/OverlayManagerSettings;->-com_android_server_om_OverlayManagerSettings-mthref-1(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Landroid/content/om/OverlayInfo;
+PLcom/android/server/om/OverlayManagerSettings;->-com_android_server_om_OverlayManagerSettings-mthref-2()Landroid/util/ArrayMap;
+PLcom/android/server/om/OverlayManagerSettings;->-com_android_server_om_OverlayManagerSettings-mthref-3(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)I
+PLcom/android/server/om/OverlayManagerSettings;-><init>()V
+PLcom/android/server/om/OverlayManagerSettings;->getEnabled(Ljava/lang/String;I)Z
+PLcom/android/server/om/OverlayManagerSettings;->getOverlaysForUser(I)Landroid/util/ArrayMap;
+PLcom/android/server/om/OverlayManagerSettings;->getState(Ljava/lang/String;I)I
+PLcom/android/server/om/OverlayManagerSettings;->getUsers()[I
+PLcom/android/server/om/OverlayManagerSettings;->lambda$-com_android_server_om_OverlayManagerSettings_6314(Landroid/content/om/OverlayInfo;)Ljava/lang/String;
+PLcom/android/server/om/OverlayManagerSettings;->persist(Ljava/io/OutputStream;)V
+PLcom/android/server/om/OverlayManagerSettings;->restore(Ljava/io/InputStream;)V
+PLcom/android/server/om/OverlayManagerSettings;->setBaseCodePath(Ljava/lang/String;ILjava/lang/String;)Z
+PLcom/android/server/os/DeviceIdentifiersPolicyService$DeviceIdentifiersPolicy;->getSerial()Ljava/lang/String;
+PLcom/android/server/os/SchedulingPolicyService;-><init>()V
+PLcom/android/server/os/SchedulingPolicyService;->isPermitted()Z
+PLcom/android/server/os/SchedulingPolicyService;->requestPriority(IIIZ)I
+PLcom/android/server/pm/-$Lambda$KFbchFEqJgs_hY1HweauKRNA_ds;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/pm/-$Lambda$akZNYSpRQU-aMo9i0sDNiuGZqwY$1;-><init>(BILjava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/pm/-$Lambda$akZNYSpRQU-aMo9i0sDNiuGZqwY;->$m$6(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$Lambda$akZNYSpRQU-aMo9i0sDNiuGZqwY;-><init>(B)V
+PLcom/android/server/pm/-$Lambda$akZNYSpRQU-aMo9i0sDNiuGZqwY;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$Lambda$i1ZZeLvwPPAZVBl_nnQ0C2t5oMs;->$m$0()V
+PLcom/android/server/pm/-$Lambda$i1ZZeLvwPPAZVBl_nnQ0C2t5oMs;->$m$3()V
+PLcom/android/server/pm/-$Lambda$iCTRLJcHnavjRcatPDKSIvElD0U;->$m$1()V
+PLcom/android/server/pm/-$Lambda$iCTRLJcHnavjRcatPDKSIvElD0U;->$m$2()V
+PLcom/android/server/pm/-$Lambda$iCTRLJcHnavjRcatPDKSIvElD0U;->$m$3()V
+PLcom/android/server/pm/-$Lambda$iCTRLJcHnavjRcatPDKSIvElD0U;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/pm/-$Lambda$iCTRLJcHnavjRcatPDKSIvElD0U;->run()V
+PLcom/android/server/pm/-$Lambda$qKHXTlzWfY0UTc6aCYQ5haVEjEY$2;->$m$0()V
+PLcom/android/server/pm/-$Lambda$qKHXTlzWfY0UTc6aCYQ5haVEjEY$2;-><init>(IJLjava/lang/Object;)V
+PLcom/android/server/pm/-$Lambda$qKHXTlzWfY0UTc6aCYQ5haVEjEY$2;->run()V
+PLcom/android/server/pm/-$Lambda$qKHXTlzWfY0UTc6aCYQ5haVEjEY$3;-><init>(IJLjava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/pm/-$Lambda$qKHXTlzWfY0UTc6aCYQ5haVEjEY$4;->$m$0(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$Lambda$qKHXTlzWfY0UTc6aCYQ5haVEjEY$4;-><init>(IIIIJLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/pm/-$Lambda$qKHXTlzWfY0UTc6aCYQ5haVEjEY$4;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$Lambda$qKHXTlzWfY0UTc6aCYQ5haVEjEY;->$m$0(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$Lambda$qKHXTlzWfY0UTc6aCYQ5haVEjEY;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/pm/-$Lambda$qKHXTlzWfY0UTc6aCYQ5haVEjEY;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/-$Lambda$s_oh3oeib-Exts1l3lS2Euiarsw;->$m$5(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$Lambda$s_oh3oeib-Exts1l3lS2Euiarsw;->$m$6(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$Lambda$s_oh3oeib-Exts1l3lS2Euiarsw;->$m$7(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$Lambda$s_oh3oeib-Exts1l3lS2Euiarsw;-><init>(B)V
+PLcom/android/server/pm/-$Lambda$s_oh3oeib-Exts1l3lS2Euiarsw;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/-$Lambda$tZuhGcRRWSq5m9LlSrypurdt-0w;->$m$3(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/pm/-$Lambda$tZuhGcRRWSq5m9LlSrypurdt-0w;-><init>(B)V
+PLcom/android/server/pm/-$Lambda$tZuhGcRRWSq5m9LlSrypurdt-0w;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+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
+PLcom/android/server/pm/AbstractStatsBase;->-get0(Lcom/android/server/pm/AbstractStatsBase;)Ljava/util/concurrent/atomic/AtomicBoolean;
+PLcom/android/server/pm/AbstractStatsBase;->-get1(Lcom/android/server/pm/AbstractStatsBase;)Ljava/util/concurrent/atomic/AtomicLong;
+PLcom/android/server/pm/AbstractStatsBase;->-wrap0(Lcom/android/server/pm/AbstractStatsBase;Ljava/lang/Object;)V
+PLcom/android/server/pm/AbstractStatsBase;->writeImpl(Ljava/lang/Object;)V
+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
+PLcom/android/server/pm/BackgroundDexOptService$1;->run()V
+PLcom/android/server/pm/BackgroundDexOptService;->-wrap1(Lcom/android/server/pm/BackgroundDexOptService;Landroid/app/job/JobParameters;Lcom/android/server/pm/PackageManagerService;Landroid/util/ArraySet;)V
+PLcom/android/server/pm/BackgroundDexOptService;-><init>()V
+PLcom/android/server/pm/BackgroundDexOptService;->getDowngradeUnusedAppsThresholdInMillis()J
+PLcom/android/server/pm/BackgroundDexOptService;->getLowStorageThreshold(Landroid/content/Context;)J
+PLcom/android/server/pm/BackgroundDexOptService;->isBackgroundDexoptDisabled()Z
+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
+PLcom/android/server/pm/BackgroundDexOptService;->runPostBootUpdate(Landroid/app/job/JobParameters;Lcom/android/server/pm/PackageManagerService;Landroid/util/ArraySet;)Z
+PLcom/android/server/pm/BackgroundDexOptService;->schedule(Landroid/content/Context;)V
+PLcom/android/server/pm/BasePermission;->isDevelopment()Z
+PLcom/android/server/pm/BasePermission;->isRuntime()Z
+PLcom/android/server/pm/CompilerStats$PackageStats;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/pm/CompilerStats$PackageStats;->getStoredPathFromCodePath(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/pm/CompilerStats$PackageStats;->setCompileTime(Ljava/lang/String;J)V
+PLcom/android/server/pm/CompilerStats;->getPackageStats(Ljava/lang/String;)Lcom/android/server/pm/CompilerStats$PackageStats;
+PLcom/android/server/pm/DefaultPermissionGrantPolicy$1;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/pm/DefaultPermissionGrantPolicy$DefaultPermissionGrant;-><init>(Ljava/lang/String;Z)V
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->-get0(Lcom/android/server/pm/DefaultPermissionGrantPolicy;)Landroid/util/ArrayMap;
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->-get1(Lcom/android/server/pm/DefaultPermissionGrantPolicy;)Lcom/android/server/pm/PackageManagerService;
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->-set0(Lcom/android/server/pm/DefaultPermissionGrantPolicy;Landroid/util/ArrayMap;)Landroid/util/ArrayMap;
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->-wrap0(Lcom/android/server/pm/DefaultPermissionGrantPolicy;)Landroid/util/ArrayMap;
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->doesPackageSupportRuntimePermissions(Landroid/content/pm/PackageParser$Package;)Z
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->getDefaultPermissionFiles()[Ljava/io/File;
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->getPackageLPr(Ljava/lang/String;)Landroid/content/pm/PackageParser$Package;
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->getSystemPackageLPr(Ljava/lang/String;)Landroid/content/pm/PackageParser$Package;
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToEnabledImsServicesLPr([Ljava/lang/String;I)V
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->isSysComponentOrPersistentPlatformSignedPrivAppLPr(Landroid/content/pm/PackageParser$Package;)Z
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->parse(Lorg/xmlpull/v1/XmlPullParser;Ljava/util/Map;)V
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->parseExceptions(Lorg/xmlpull/v1/XmlPullParser;Ljava/util/Map;)V
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->parsePermission(Lorg/xmlpull/v1/XmlPullParser;Ljava/util/List;)V
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->readDefaultPermissionExceptionsLPw()Landroid/util/ArrayMap;
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->scheduleReadDefaultPermissionExceptions()V
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->setDialerAppPackagesProviderLPw(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->setLocationPackagesProviderLPw(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->setSimCallManagerPackagesProviderLPw(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->setSmsAppPackagesProviderLPw(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->setSyncAdapterPackagesProviderLPw(Landroid/content/pm/PackageManagerInternal$SyncAdapterPackagesProvider;)V
+PLcom/android/server/pm/DefaultPermissionGrantPolicy;->setVoiceInteractionPackagesProviderLPw(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+PLcom/android/server/pm/EphemeralResolverConnection$ConnectionException;-><init>(I)V
+PLcom/android/server/pm/EphemeralResolverConnection$GetEphemeralResolveInfoCaller$1;-><init>(Lcom/android/server/pm/EphemeralResolverConnection$GetEphemeralResolveInfoCaller;)V
+PLcom/android/server/pm/EphemeralResolverConnection$GetEphemeralResolveInfoCaller;->-wrap0(Lcom/android/server/pm/EphemeralResolverConnection$GetEphemeralResolveInfoCaller;Ljava/lang/Object;I)V
+PLcom/android/server/pm/EphemeralResolverConnection$GetEphemeralResolveInfoCaller;-><init>()V
+PLcom/android/server/pm/EphemeralResolverConnection$MyServiceConnection;-><init>(Lcom/android/server/pm/EphemeralResolverConnection;)V
+PLcom/android/server/pm/EphemeralResolverConnection$MyServiceConnection;-><init>(Lcom/android/server/pm/EphemeralResolverConnection;Lcom/android/server/pm/EphemeralResolverConnection$MyServiceConnection;)V
+PLcom/android/server/pm/EphemeralResolverConnection$MyServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/pm/EphemeralResolverConnection$MyServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
+PLcom/android/server/pm/EphemeralResolverConnection;->-get0()J
+PLcom/android/server/pm/EphemeralResolverConnection;->-get1()Z
+PLcom/android/server/pm/EphemeralResolverConnection;->-get2(Lcom/android/server/pm/EphemeralResolverConnection;)I
+PLcom/android/server/pm/EphemeralResolverConnection;->-get3(Lcom/android/server/pm/EphemeralResolverConnection;)Ljava/lang/Object;
+PLcom/android/server/pm/EphemeralResolverConnection;->-set0(Lcom/android/server/pm/EphemeralResolverConnection;I)I
+PLcom/android/server/pm/EphemeralResolverConnection;->-set1(Lcom/android/server/pm/EphemeralResolverConnection;Landroid/app/IInstantAppResolver;)Landroid/app/IInstantAppResolver;
+PLcom/android/server/pm/EphemeralResolverConnection;->-wrap0(Lcom/android/server/pm/EphemeralResolverConnection;)V
+PLcom/android/server/pm/EphemeralResolverConnection;-><init>(Landroid/content/Context;Landroid/content/ComponentName;Ljava/lang/String;)V
+PLcom/android/server/pm/EphemeralResolverConnection;->bind(Ljava/lang/String;)Landroid/app/IInstantAppResolver;
+PLcom/android/server/pm/EphemeralResolverConnection;->binderDied()V
+PLcom/android/server/pm/EphemeralResolverConnection;->handleBinderDiedLocked()V
+PLcom/android/server/pm/EphemeralResolverConnection;->waitForBindLocked(Ljava/lang/String;)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;
+PLcom/android/server/pm/Installer;->assertValidInstructionSet(Ljava/lang/String;)V
+PLcom/android/server/pm/Installer;->clearAppData(Ljava/lang/String;Ljava/lang/String;IIJ)V
+PLcom/android/server/pm/Installer;->clearAppProfiles(Ljava/lang/String;)V
+PLcom/android/server/pm/Installer;->createOatDir(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/pm/Installer;->createUserData(Ljava/lang/String;III)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;Z)V
+PLcom/android/server/pm/Installer;->getUserSize(Ljava/lang/String;II[ILandroid/content/pm/PackageStats;)V
+PLcom/android/server/pm/Installer;->idmap(Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/pm/Installer;->isQuotaSupported(Ljava/lang/String;)Z
+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;->rmPackageDir(Ljava/lang/String;)V
+PLcom/android/server/pm/Installer;->rmdex(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/pm/Installer;->setAppQuota(Ljava/lang/String;IIJ)V
+PLcom/android/server/pm/Installer;->setWarnIfHeld(Ljava/lang/Object;)V
+PLcom/android/server/pm/InstantAppRegistry;->getInstantApplicationDir(Ljava/lang/String;I)Ljava/io/File;
+PLcom/android/server/pm/InstantAppRegistry;->getInstantApplicationsDir(I)Ljava/io/File;
+PLcom/android/server/pm/InstantAppRegistry;->isInstantAccessGranted(III)Z
+PLcom/android/server/pm/InstantAppRegistry;->onPackageInstalledLPw(Landroid/content/pm/PackageParser$Package;[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;
+PLcom/android/server/pm/InstantAppRegistry;->peekOrParseUninstalledInstantAppInfo(Ljava/lang/String;I)Landroid/content/pm/InstantAppInfo;
+PLcom/android/server/pm/InstantAppRegistry;->propagateInstantAppPermissionsIfNeeded(Ljava/lang/String;I)V
+PLcom/android/server/pm/InstantAppRegistry;->removeUninstalledInstantAppStateLPw(Ljava/util/function/Predicate;I)V
+PLcom/android/server/pm/InstructionSets;->getAppDexInstructionSets(Lcom/android/server/pm/PackageSetting;)[Ljava/lang/String;
+PLcom/android/server/pm/LauncherAppsService$BroadcastCookie;-><init>(Landroid/os/UserHandle;Ljava/lang/String;)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;-><init>(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;-><init>(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->lambda$-com_android_server_pm_LauncherAppsService$LauncherAppsImpl$MyPackageMonitor_38233(Ljava/lang/String;I)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onShortcutChanged(Ljava/lang/String;I)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageCallbackList;-><init>(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->-get0(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;)Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageCallbackList;
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->-get1(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;)Landroid/content/pm/ShortcutServiceInternal;
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->-wrap0(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Landroid/os/UserHandle;Landroid/os/UserHandle;Ljava/lang/String;)Z
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;-><init>(Landroid/content/Context;)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->addOnAppsChangedListener(Ljava/lang/String;Landroid/content/pm/IOnAppsChangedListener;)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->ensureShortcutPermission(Ljava/lang/String;)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getCallingUserId()I
+PLcom/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;->getShortcutConfigActivities(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
+PLcom/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;
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->hasShortcutHostPermission(Ljava/lang/String;)Z
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isActivityEnabled(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Z
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isEnabledProfileOf(Landroid/os/UserHandle;Landroid/os/UserHandle;Ljava/lang/String;)Z
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isPackageEnabled(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Z
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->postToPackageMonitorHandler(Ljava/lang/Runnable;)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->startWatchingPackageBroadcasts()V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->verifyCallingPackage(Ljava/lang/String;)V
+PLcom/android/server/pm/LauncherAppsService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/pm/LauncherAppsService;->onStart()V
+PLcom/android/server/pm/OtaDexoptService;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;)V
+PLcom/android/server/pm/OtaDexoptService;->main(Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/OtaDexoptService;
+PLcom/android/server/pm/OtaDexoptService;->moveAbArtifacts(Lcom/android/server/pm/Installer;)V
+PLcom/android/server/pm/PackageDexOptimizer;->adjustDexoptFlags(I)I
+PLcom/android/server/pm/PackageDexOptimizer;->adjustDexoptNeeded(I)I
+PLcom/android/server/pm/PackageDexOptimizer;->createOatDirIfSupported(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/pm/PackageDexOptimizer;->getOatDir(Ljava/io/File;)Ljava/io/File;
+PLcom/android/server/pm/PackageDexOptimizer;->printDexoptFlags(I)Ljava/lang/String;
+PLcom/android/server/pm/PackageDexOptimizer;->systemReady()V
+PLcom/android/server/pm/PackageInstallerService$1;->accept(Ljava/io/File;Ljava/lang/String;)Z
+PLcom/android/server/pm/PackageInstallerService$2;-><init>(Lcom/android/server/pm/PackageInstallerService;)V
+PLcom/android/server/pm/PackageInstallerService$2;->run()V
+PLcom/android/server/pm/PackageInstallerService$Callbacks;->-wrap0(Lcom/android/server/pm/PackageInstallerService$Callbacks;IIZ)V
+PLcom/android/server/pm/PackageInstallerService$Callbacks;->-wrap2(Lcom/android/server/pm/PackageInstallerService$Callbacks;II)V
+PLcom/android/server/pm/PackageInstallerService$Callbacks;-><init>(Landroid/os/Looper;)V
+PLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionActiveChanged(IIZ)V
+PLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionCreated(II)V
+PLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionFinished(IIZ)V
+PLcom/android/server/pm/PackageInstallerService$Callbacks;->register(Landroid/content/pm/IPackageInstallerCallback;I)V
+PLcom/android/server/pm/PackageInstallerService$InternalCallback$1;-><init>(Lcom/android/server/pm/PackageInstallerService$InternalCallback;Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerService$InternalCallback$1;->run()V
+PLcom/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;->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;->onSessionSealedBlocking(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerService$PackageInstallObserverAdapter;-><init>(Landroid/content/Context;Landroid/content/IntentSender;IZI)V
+PLcom/android/server/pm/PackageInstallerService$PackageInstallObserverAdapter;->onPackageInstalled(Ljava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/pm/PackageInstallerService;->-get1(Lcom/android/server/pm/PackageInstallerService;)Landroid/os/Handler;
+PLcom/android/server/pm/PackageInstallerService;->-get2(Lcom/android/server/pm/PackageInstallerService;)Landroid/util/SparseArray;
+PLcom/android/server/pm/PackageInstallerService;->-wrap1(Lcom/android/server/pm/PackageInstallerService;I)Ljava/io/File;
+PLcom/android/server/pm/PackageInstallerService;->-wrap2(Lcom/android/server/pm/PackageInstallerService;Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerService;->-wrap3(Lcom/android/server/pm/PackageInstallerService;)V
+PLcom/android/server/pm/PackageInstallerService;->-wrap4(Lcom/android/server/pm/PackageInstallerService;)V
+PLcom/android/server/pm/PackageInstallerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;)V
+PLcom/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;
+PLcom/android/server/pm/PackageInstallerService;->buildStageDir(Ljava/lang/String;IZ)Ljava/io/File;
+PLcom/android/server/pm/PackageInstallerService;->buildStagingDir(Ljava/lang/String;Z)Ljava/io/File;
+PLcom/android/server/pm/PackageInstallerService;->createSession(Landroid/content/pm/PackageInstaller$SessionParams;Ljava/lang/String;I)I
+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;->isCallingUidOwner(Lcom/android/server/pm/PackageInstallerSession;)Z
+PLcom/android/server/pm/PackageInstallerService;->newArraySet([Ljava/lang/Object;)Landroid/util/ArraySet;
+PLcom/android/server/pm/PackageInstallerService;->onSecureContainersAvailable()V
+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
+PLcom/android/server/pm/PackageInstallerService;->readSessionsLocked()V
+PLcom/android/server/pm/PackageInstallerService;->reconcileStagesLocked(Ljava/lang/String;Z)V
+PLcom/android/server/pm/PackageInstallerService;->registerCallback(Landroid/content/pm/IPackageInstallerCallback;I)V
+PLcom/android/server/pm/PackageInstallerService;->systemReady()V
+PLcom/android/server/pm/PackageInstallerService;->writeSessionsAsync()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
+PLcom/android/server/pm/PackageInstallerSession$2;->accept(Ljava/io/File;)Z
+PLcom/android/server/pm/PackageInstallerSession$3;-><init>(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerSession$3;->handleMessage(Landroid/os/Message;)Z
+PLcom/android/server/pm/PackageInstallerSession$4;-><init>(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerSession$4;->onPackageInstalled(Ljava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/pm/PackageInstallerSession;->-get0(Lcom/android/server/pm/PackageInstallerSession;)Ljava/lang/Object;
+PLcom/android/server/pm/PackageInstallerSession;->-wrap0(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerSession;->-wrap1(Lcom/android/server/pm/PackageInstallerSession;)V
+PLcom/android/server/pm/PackageInstallerSession;->-wrap2(Lcom/android/server/pm/PackageInstallerSession;ILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/pm/PackageInstallerSession;-><init>(Lcom/android/server/pm/PackageInstallerService$InternalCallback;Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;Landroid/os/Looper;IILjava/lang/String;ILandroid/content/pm/PackageInstaller$SessionParams;JLjava/io/File;Ljava/lang/String;ZZ)V
+PLcom/android/server/pm/PackageInstallerSession;->assertApkConsistentLocked(Ljava/lang/String;Landroid/content/pm/PackageParser$ApkLite;)V
+PLcom/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
+PLcom/android/server/pm/PackageInstallerSession;->assertPreparedAndNotSealedLocked(Ljava/lang/String;)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;->commitLocked()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;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/pm/PackageInstallerSession;->extractNativeLibraries(Ljava/io/File;Ljava/lang/String;)V
+PLcom/android/server/pm/PackageInstallerSession;->getInstallerUid()I
+PLcom/android/server/pm/PackageInstallerSession;->isInstallerDeviceOwnerLocked()Z
+PLcom/android/server/pm/PackageInstallerSession;->isPrepared()Z
+PLcom/android/server/pm/PackageInstallerSession;->isSealed()Z
+PLcom/android/server/pm/PackageInstallerSession;->needToAskForPermissionsLocked()Z
+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;->resolveStageDirLocked()Ljava/io/File;
+PLcom/android/server/pm/PackageInstallerSession;->sealAndValidateLocked(Landroid/content/pm/PackageInfo;)V
+PLcom/android/server/pm/PackageInstallerSession;->writeGrantedRuntimePermissionsLocked(Lorg/xmlpull/v1/XmlSerializer;[Ljava/lang/String;)V
+PLcom/android/server/pm/PackageKeySetData;->isUsingDefinedKeySets()Z
+PLcom/android/server/pm/PackageManagerService$19;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/os/Handler;Landroid/content/ContentResolver;)V
+PLcom/android/server/pm/PackageManagerService$19;->onChange(Z)V
+PLcom/android/server/pm/PackageManagerService$1;->onVolumeStateChanged(Landroid/os/storage/VolumeInfo;II)V
+PLcom/android/server/pm/PackageManagerService$20;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+PLcom/android/server/pm/PackageManagerService$6;-><init>(Lcom/android/server/pm/PackageManagerService;[ILjava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/String;ILandroid/content/IIntentReceiver;)V
+PLcom/android/server/pm/PackageManagerService$7;-><init>(Lcom/android/server/pm/PackageManagerService;ILcom/android/server/pm/PackageManagerService$InstallArgs;)V
+PLcom/android/server/pm/PackageManagerService$7;->run()V
+PLcom/android/server/pm/PackageManagerService$ActivityIntentResolver$SchemesIterGenerator;-><init>(Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver;)V
+PLcom/android/server/pm/PackageManagerService$ActivityIntentResolver$SchemesIterGenerator;->generate(Landroid/content/pm/PackageParser$ActivityIntentInfo;)Ljava/util/Iterator;
+PLcom/android/server/pm/PackageManagerService$DefaultContainerConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/pm/PackageManagerService$DumpState;-><init>()V
+PLcom/android/server/pm/PackageManagerService$DumpState;->getSharedUser()Lcom/android/server/pm/SharedUserSetting;
+PLcom/android/server/pm/PackageManagerService$DumpState;->getTitlePrinted()Z
+PLcom/android/server/pm/PackageManagerService$DumpState;->isOptionEnabled(I)Z
+PLcom/android/server/pm/PackageManagerService$DumpState;->onTitlePrinted()Z
+PLcom/android/server/pm/PackageManagerService$DumpState;->setOptionEnabled(I)V
+PLcom/android/server/pm/PackageManagerService$DumpState;->setSharedUser(Lcom/android/server/pm/SharedUserSetting;)V
+PLcom/android/server/pm/PackageManagerService$DumpState;->setTitlePrinted(Z)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
+PLcom/android/server/pm/PackageManagerService$FileInstallArgs;->copyApk(Lcom/android/internal/app/IMediaContainerService;Z)I
+PLcom/android/server/pm/PackageManagerService$FileInstallArgs;->doCopyApk(Lcom/android/internal/app/IMediaContainerService;Z)I
+PLcom/android/server/pm/PackageManagerService$FileInstallArgs;->doPostDeleteLI(Z)Z
+PLcom/android/server/pm/PackageManagerService$FileInstallArgs;->doPostInstall(II)I
+PLcom/android/server/pm/PackageManagerService$FileInstallArgs;->doPreInstall(I)I
+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;->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;
+PLcom/android/server/pm/PackageManagerService$HandlerParams;->startCopy()Z
+PLcom/android/server/pm/PackageManagerService$IFVerificationParams;-><init>(Landroid/content/pm/PackageParser$Package;ZII)V
+PLcom/android/server/pm/PackageManagerService$InstallArgs;-><init>(Lcom/android/server/pm/PackageManagerService$OriginInfo;Lcom/android/server/pm/PackageManagerService$MoveInfo;Landroid/content/pm/IPackageInstallObserver2;ILjava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;I[[Ljava/security/cert/Certificate;I)V
+PLcom/android/server/pm/PackageManagerService$InstallArgs;->isFwdLocked()Z
+PLcom/android/server/pm/PackageManagerService$InstallParams;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$OriginInfo;Lcom/android/server/pm/PackageManagerService$MoveInfo;Landroid/content/pm/IPackageInstallObserver2;ILjava/lang/String;Ljava/lang/String;Lcom/android/server/pm/PackageManagerService$VerificationInfo;Landroid/os/UserHandle;Ljava/lang/String;[Ljava/lang/String;[[Ljava/security/cert/Certificate;I)V
+PLcom/android/server/pm/PackageManagerService$InstallParams;->handleReturnCode()V
+PLcom/android/server/pm/PackageManagerService$InstallParams;->installLocationPolicy(Landroid/content/pm/PackageInfoLite;)I
+PLcom/android/server/pm/PackageManagerService$InstallParams;->isForwardLocked()Z
+PLcom/android/server/pm/PackageManagerService$IntentVerifierProxy;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/content/Context;Landroid/content/ComponentName;)V
+PLcom/android/server/pm/PackageManagerService$MoveCallbacks;->register(Landroid/content/pm/IPackageMoveObserver;)V
+PLcom/android/server/pm/PackageManagerService$OnPermissionChangeListeners;->addListenerLocked(Landroid/content/pm/IOnPermissionsChangeListener;)V
+PLcom/android/server/pm/PackageManagerService$OnPermissionChangeListeners;->removeListenerLocked(Landroid/content/pm/IOnPermissionsChangeListener;)V
+PLcom/android/server/pm/PackageManagerService$OriginInfo;-><init>(Ljava/io/File;Ljava/lang/String;ZZ)V
+PLcom/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$PackageHandler;->connectToService()Z
+PLcom/android/server/pm/PackageManagerService$PackageHandler;->disconnectService()V
+PLcom/android/server/pm/PackageManagerService$PackageInstalledInfo;-><init>()V
+PLcom/android/server/pm/PackageManagerService$PackageInstalledInfo;->setReturnCode(I)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->addIsolatedUid(II)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getHomeActivitiesAsUser(Ljava/util/List;I)Landroid/content/ComponentName;
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackageInfo(Ljava/lang/String;III)Landroid/content/pm/PackageInfo;
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getSetupWizardPackageName()Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->queryIntentActivities(Landroid/content/Intent;III)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo;
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setDeviceAndProfileOwnerPackages(ILjava/lang/String;Landroid/util/SparseArray;)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setDialerAppPackagesProvider(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setExternalSourcesPolicy(Landroid/content/pm/PackageManagerInternal$ExternalSourcesPolicy;)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setLocationPackagesProvider(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setSimCallManagerPackagesProvider(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setSmsAppPackagesProvider(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setSyncAdapterPackagesprovider(Landroid/content/pm/PackageManagerInternal$SyncAdapterPackagesProvider;)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setVoiceInteractionPackagesProvider(Landroid/content/pm/PackageManagerInternal$PackagesProvider;)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->wasPackageEverLaunched(Ljava/lang/String;I)Z
+PLcom/android/server/pm/PackageManagerService$PackageManagerNative;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+PLcom/android/server/pm/PackageManagerService$PackageManagerNative;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$PackageManagerNative;)V
+PLcom/android/server/pm/PackageManagerService$PackageParserCallback;->getOverlayPaths(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService$PackageParserCallback;->getStaticOverlayPaths(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+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
+PLcom/android/server/pm/PackageManagerService$PackageRemovedInfo;->sendPackageRemovedBroadcastInternal(Z)V
+PLcom/android/server/pm/PackageManagerService$PackageRemovedInfo;->sendPackageRemovedBroadcasts(Z)V
+PLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->clear()V
+PLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->get(ILjava/lang/String;)Ljava/util/ArrayList;
+PLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->getOrAllocate(I)Landroid/util/ArrayMap;
+PLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->packagesForUserId(I)Landroid/util/ArrayMap;
+PLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->put(ILjava/lang/String;Ljava/util/ArrayList;)V
+PLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->size()I
+PLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;->userIdAt(I)I
+PLcom/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;)V
+PLcom/android/server/pm/PackageManagerService$ProviderIntentResolver;->-get0(Lcom/android/server/pm/PackageManagerService$ProviderIntentResolver;)Landroid/util/ArrayMap;
+PLcom/android/server/pm/PackageManagerService$ProviderIntentResolver;->queryIntent(Landroid/content/Intent;Ljava/lang/String;II)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService$ProviderIntentResolver;->removeProvider(Landroid/content/pm/PackageParser$Provider;)V
+PLcom/android/server/pm/PackageManagerService$ProviderIntentResolver;->sortResults(Ljava/util/List;)V
+PLcom/android/server/pm/PackageManagerService$VerificationInfo;-><init>(Landroid/net/Uri;Landroid/net/Uri;II)V
+PLcom/android/server/pm/PackageManagerService;->-get0()Z
+PLcom/android/server/pm/PackageManagerService;->-get1()[I
+PLcom/android/server/pm/PackageManagerService;->-get3(Lcom/android/server/pm/PackageManagerService;)Lcom/android/internal/app/IMediaContainerService;
+PLcom/android/server/pm/PackageManagerService;->-get4(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/PackageManagerService$DefaultContainerConnection;
+PLcom/android/server/pm/PackageManagerService;->-get6(Lcom/android/server/pm/PackageManagerService;)Landroid/util/ArraySet;
+PLcom/android/server/pm/PackageManagerService;->-set0(Lcom/android/server/pm/PackageManagerService;Lcom/android/internal/app/IMediaContainerService;)Lcom/android/internal/app/IMediaContainerService;
+PLcom/android/server/pm/PackageManagerService;->-set1(Lcom/android/server/pm/PackageManagerService;Z)Z
+PLcom/android/server/pm/PackageManagerService;->-wrap11(Landroid/content/pm/PackageParser$Package;)Z
+PLcom/android/server/pm/PackageManagerService;->-wrap12(Lcom/android/server/pm/PackageManagerService;III)Z
+PLcom/android/server/pm/PackageManagerService;->-wrap15(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$InstallParams;)Lcom/android/server/pm/PackageManagerService$InstallArgs;
+PLcom/android/server/pm/PackageManagerService;->-wrap19(Lcom/android/server/pm/PackageManagerService;Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
+PLcom/android/server/pm/PackageManagerService;->-wrap23(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;IIIZZ)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService;->-wrap3(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageSetting;II)Landroid/content/pm/PackageInfo;
+PLcom/android/server/pm/PackageManagerService;->-wrap32(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;ZZZ[Ljava/lang/String;ZLjava/lang/String;Landroid/content/pm/IPackageInstallObserver2;)V
+PLcom/android/server/pm/PackageManagerService;->-wrap33(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$InstallArgs;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;)V
+PLcom/android/server/pm/PackageManagerService;->-wrap34(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;IILjava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->-wrap4(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;IIII)Landroid/content/pm/PackageInfo;
+PLcom/android/server/pm/PackageManagerService;->-wrap40(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$InstallArgs;I)V
+PLcom/android/server/pm/PackageManagerService;->-wrap46(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ZLjava/util/ArrayList;I)V
+PLcom/android/server/pm/PackageManagerService;->-wrap5(Lcom/android/server/pm/PackageManagerService;Landroid/content/Intent;Ljava/lang/String;IIZ)Landroid/content/pm/ResolveInfo;
+PLcom/android/server/pm/PackageManagerService;->-wrap51(Lcom/android/server/pm/PackageManagerService;IIZLandroid/content/pm/PackageParser$Package;)V
+PLcom/android/server/pm/PackageManagerService;->addOnPermissionsChangeListener(Landroid/content/pm/IOnPermissionsChangeListener;)V
+PLcom/android/server/pm/PackageManagerService;->adjustPermissionProtectionFlagsLPr(ILjava/lang/String;I)I
+PLcom/android/server/pm/PackageManagerService;->apkHasCode(Ljava/lang/String;)Z
+PLcom/android/server/pm/PackageManagerService;->applyPostContentProviderResolutionFilter(Ljava/util/List;Ljava/lang/String;)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService;->arrayToString([I)Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->assertCodePolicy(Landroid/content/pm/PackageParser$Package;)V
+PLcom/android/server/pm/PackageManagerService;->canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->checkPackageFrozen(Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->clearAppDataLIF(Landroid/content/pm/PackageParser$Package;II)V
+PLcom/android/server/pm/PackageManagerService;->clearAppDataLeafLIF(Landroid/content/pm/PackageParser$Package;II)V
+PLcom/android/server/pm/PackageManagerService;->clearAppProfilesLIF(Landroid/content/pm/PackageParser$Package;I)V
+PLcom/android/server/pm/PackageManagerService;->clearAppProfilesLeafLIF(Landroid/content/pm/PackageParser$Package;)V
+PLcom/android/server/pm/PackageManagerService;->createInstallArgs(Lcom/android/server/pm/PackageManagerService$InstallParams;)Lcom/android/server/pm/PackageManagerService$InstallArgs;
+PLcom/android/server/pm/PackageManagerService;->createInstallArgsForExisting(ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Lcom/android/server/pm/PackageManagerService$InstallArgs;
+PLcom/android/server/pm/PackageManagerService;->deleteInstalledPackageLIF(Lcom/android/server/pm/PackageSetting;ZI[ILcom/android/server/pm/PackageManagerService$PackageRemovedInfo;ZLandroid/content/pm/PackageParser$Package;)Z
+PLcom/android/server/pm/PackageManagerService;->deletePackageLIF(Ljava/lang/String;Landroid/os/UserHandle;Z[IILcom/android/server/pm/PackageManagerService$PackageRemovedInfo;ZLandroid/content/pm/PackageParser$Package;)Z
+PLcom/android/server/pm/PackageManagerService;->derivePackageAbi(Landroid/content/pm/PackageParser$Package;Ljava/io/File;Ljava/lang/String;ZLjava/io/File;)V
+PLcom/android/server/pm/PackageManagerService;->disableSystemPackageLPw(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageParser$Package;)Z
+PLcom/android/server/pm/PackageManagerService;->enableSystemUserPackages()V
+PLcom/android/server/pm/PackageManagerService;->enforceDeclaredAsUsedAndRuntimeOrDevelopmentPermission(Landroid/content/pm/PackageParser$Package;Lcom/android/server/pm/BasePermission;)V
+PLcom/android/server/pm/PackageManagerService;->enforceGrantRevokeRuntimePermissionPermissions(Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->enforceSystemOrPhoneCaller(Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->enforceSystemOrRoot(Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->extrasForInstallResult(Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;)Landroid/os/Bundle;
+PLcom/android/server/pm/PackageManagerService;->findPersistentPreferredActivityLP(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;ZI)Landroid/content/pm/ResolveInfo;
+PLcom/android/server/pm/PackageManagerService;->findPreferredActivity(Landroid/content/Intent;Ljava/lang/String;ILjava/util/List;IZZZI)Landroid/content/pm/ResolveInfo;
+PLcom/android/server/pm/PackageManagerService;->findSharedNonSystemLibrariesRecursive(Landroid/content/pm/PackageParser$Package;Ljava/util/ArrayList;Ljava/util/Set;)V
+PLcom/android/server/pm/PackageManagerService;->findSharedNonSystemLibrariesRecursive(Ljava/util/ArrayList;[ILjava/util/ArrayList;Ljava/util/Set;)V
+PLcom/android/server/pm/PackageManagerService;->findSharedNonSystemLibrary(Ljava/lang/String;I)Landroid/content/pm/PackageParser$Package;
+PLcom/android/server/pm/PackageManagerService;->fixUpInstallReason(Ljava/lang/String;II)I
+PLcom/android/server/pm/PackageManagerService;->freeStorage(Ljava/lang/String;JI)V
+PLcom/android/server/pm/PackageManagerService;->freezePackage(Ljava/lang/String;ILjava/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;
+PLcom/android/server/pm/PackageManagerService;->generateApplicationInfoFromSettingsLPw(Ljava/lang/String;III)Landroid/content/pm/ApplicationInfo;
+PLcom/android/server/pm/PackageManagerService;->generatePermissionInfo(Lcom/android/server/pm/BasePermission;I)Landroid/content/pm/PermissionInfo;
+PLcom/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;->getCompilerPackageStats(Ljava/lang/String;)Lcom/android/server/pm/CompilerStats$PackageStats;
+PLcom/android/server/pm/PackageManagerService;->getHomeActivitiesAsUser(Ljava/util/List;I)Landroid/content/ComponentName;
+PLcom/android/server/pm/PackageManagerService;->getHomeIntent()Landroid/content/Intent;
+PLcom/android/server/pm/PackageManagerService;->getInstantAppAndroidId(Ljava/lang/String;I)Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->getInstantAppInstallerLPr()Landroid/content/pm/ActivityInfo;
+PLcom/android/server/pm/PackageManagerService;->getInstantAppResolverLPr()Landroid/util/Pair;
+PLcom/android/server/pm/PackageManagerService;->getInstantAppResolverSettingsLPr(Landroid/content/ComponentName;)Landroid/content/ComponentName;
+PLcom/android/server/pm/PackageManagerService;->getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo;
+PLcom/android/server/pm/PackageManagerService;->getIntentFilterVerifierComponentNameLPr()Landroid/content/ComponentName;
+PLcom/android/server/pm/PackageManagerService;->getNextCodePath(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
+PLcom/android/server/pm/PackageManagerService;->getParentOrChildPackageChangedSharedUser(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageParser$Package;)Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;I)I
+PLcom/android/server/pm/PackageManagerService;->getPermissionInfo(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;
+PLcom/android/server/pm/PackageManagerService;->getPersistentApplications(I)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/pm/PackageManagerService;->getPreviousCodePaths(Ljava/lang/String;)Ljava/util/List;
+PLcom/android/server/pm/PackageManagerService;->getRequiredButNotReallyRequiredVerifierLPr()Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->getRequiredInstallerLPr()Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->getRequiredSharedLibraryLPr(Ljava/lang/String;I)Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->getRequiredUninstallerLPr()Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->getServicesSystemSharedLibraryPackageName()Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->getSettingsProblemFile()Ljava/io/File;
+PLcom/android/server/pm/PackageManagerService;->getSystemAvailableFeatures()Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/pm/PackageManagerService;->getUnknownSourcesSettings()I
+PLcom/android/server/pm/PackageManagerService;->grantDefaultPermissionsToEnabledImsServices([Ljava/lang/String;I)V
+PLcom/android/server/pm/PackageManagerService;->grantRequestedRuntimePermissions(Landroid/content/pm/PackageParser$Package;[I[Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->grantRequestedRuntimePermissionsForUser(Landroid/content/pm/PackageParser$Package;I[Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/pm/PackageManagerService;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;IZ)V
+PLcom/android/server/pm/PackageManagerService;->hasDomainURLs(Landroid/content/pm/PackageParser$Package;)Z
+PLcom/android/server/pm/PackageManagerService;->hasSystemUidErrors()Z
+PLcom/android/server/pm/PackageManagerService;->installForwardLocked(I)Z
+PLcom/android/server/pm/PackageManagerService;->installOnExternalAsec(I)Z
+PLcom/android/server/pm/PackageManagerService;->installPackageTracedLI(Lcom/android/server/pm/PackageManagerService$InstallArgs;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;)V
+PLcom/android/server/pm/PackageManagerService;->installStage(Ljava/lang/String;Ljava/io/File;Ljava/lang/String;Landroid/content/pm/IPackageInstallObserver2;Landroid/content/pm/PackageInstaller$SessionParams;Ljava/lang/String;ILandroid/os/UserHandle;[[Ljava/security/cert/Certificate;)V
+PLcom/android/server/pm/PackageManagerService;->isExternalMediaAvailable()Z
+PLcom/android/server/pm/PackageManagerService;->isFirstBoot()Z
+PLcom/android/server/pm/PackageManagerService;->isMultiArch(Landroid/content/pm/ApplicationInfo;)Z
+PLcom/android/server/pm/PackageManagerService;->isOnlyCoreApps()Z
+PLcom/android/server/pm/PackageManagerService;->isPermissionRevokedByPolicy(Ljava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/pm/PackageManagerService;->isSafeMode()Z
+PLcom/android/server/pm/PackageManagerService;->isStorageLow()Z
+PLcom/android/server/pm/PackageManagerService;->isUpgrade()Z
+PLcom/android/server/pm/PackageManagerService;->isUserRestricted(ILjava/lang/String;)Z
+PLcom/android/server/pm/PackageManagerService;->isVerificationEnabled(III)Z
+PLcom/android/server/pm/PackageManagerService;->killApplication(Ljava/lang/String;IILjava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->loadMediaPackages(Landroid/util/ArrayMap;[IZ)V
+PLcom/android/server/pm/PackageManagerService;->maybeThrowExceptionForMultiArchCopy(Ljava/lang/String;I)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;->packageFlagsToInstallFlags(Lcom/android/server/pm/PackageSetting;)I
+PLcom/android/server/pm/PackageManagerService;->performFstrimIfNeeded()V
+PLcom/android/server/pm/PackageManagerService;->prepareAppDataAfterInstallLIF(Landroid/content/pm/PackageParser$Package;)V
+PLcom/android/server/pm/PackageManagerService;->processPendingInstall(Lcom/android/server/pm/PackageManagerService$InstallArgs;I)V
+PLcom/android/server/pm/PackageManagerService;->queryIntentContentProviders(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/pm/PackageManagerService;->reconcileAppsData(IIZ)V
+PLcom/android/server/pm/PackageManagerService;->reconcileAppsDataLI(Ljava/lang/String;IIZ)V
+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;->removeOnPermissionsChangeListener(Landroid/content/pm/IOnPermissionsChangeListener;)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/PackageParser$Package;Z)V
+PLcom/android/server/pm/PackageManagerService;->removePackageLI(Lcom/android/server/pm/PackageSetting;Z)V
+PLcom/android/server/pm/PackageManagerService;->replaceNonSystemPackageLIF(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageParser$Package;IILandroid/os/UserHandle;[ILjava/lang/String;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;I)V
+PLcom/android/server/pm/PackageManagerService;->replaceSystemPackageLIF(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PackageParser$Package;IILandroid/os/UserHandle;[ILjava/lang/String;Lcom/android/server/pm/PackageManagerService$PackageInstalledInfo;I)V
+PLcom/android/server/pm/PackageManagerService;->resolveUserIds(I)[I
+PLcom/android/server/pm/PackageManagerService;->scanAvailableAsecs()V
+PLcom/android/server/pm/PackageManagerService;->scanPackageTracedLI(Landroid/content/pm/PackageParser$Package;IIJLandroid/os/UserHandle;)Landroid/content/pm/PackageParser$Package;
+PLcom/android/server/pm/PackageManagerService;->scheduleWritePackageRestrictionsLocked(I)V
+PLcom/android/server/pm/PackageManagerService;->sendPackageAddedForNewUsers(Ljava/lang/String;ZZI[I)V
+PLcom/android/server/pm/PackageManagerService;->sendPackageBroadcast(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[I)V
+PLcom/android/server/pm/PackageManagerService;->sendPackageChangedBroadcast(Ljava/lang/String;ZLjava/util/ArrayList;I)V
+PLcom/android/server/pm/PackageManagerService;->setApplicationEnabledSetting(Ljava/lang/String;IIILjava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->setInstallAndUpdateTime(Landroid/content/pm/PackageParser$Package;JJ)V
+PLcom/android/server/pm/PackageManagerService;->setInstantAppForUser(Lcom/android/server/pm/PackageSetting;IZZ)V
+PLcom/android/server/pm/PackageManagerService;->setUpInstantAppInstallerActivityLP(Landroid/content/pm/ActivityInfo;)V
+PLcom/android/server/pm/PackageManagerService;->shouldShowRequestPermissionRationale(Ljava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/pm/PackageManagerService;->startCleaningPackages()V
+PLcom/android/server/pm/PackageManagerService;->startIntentFilterVerifications(IZLandroid/content/pm/PackageParser$Package;)V
+PLcom/android/server/pm/PackageManagerService;->systemReady()V
+PLcom/android/server/pm/PackageManagerService;->updateExternalMediaStatusInner(ZZZ)V
+PLcom/android/server/pm/PackageManagerService;->updateInstantAppInstallerLocked(Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->updateIntentForResolve(Landroid/content/Intent;)Landroid/content/Intent;
+PLcom/android/server/pm/PackageManagerService;->updatePackagesIfNeeded()V
+PLcom/android/server/pm/PackageManagerService;->updatePermissionsLPw(Ljava/lang/String;Landroid/content/pm/PackageParser$Package;I)V
+PLcom/android/server/pm/PackageManagerService;->updateSequenceNumberLP(Lcom/android/server/pm/PackageSetting;[I)V
+PLcom/android/server/pm/PackageManagerService;->updateSettingsLI(Landroid/content/pm/PackageParser$Package;Ljava/lang/String;[ILcom/android/server/pm/PackageManagerService$PackageInstalledInfo;Landroid/os/UserHandle;I)V
+PLcom/android/server/pm/PackageManagerService;->waitForAppDataPrepared()V
+PLcom/android/server/pm/PackageManagerShellCommand$1;-><init>(Lcom/android/server/pm/PackageManagerShellCommand;)V
+PLcom/android/server/pm/PackageManagerShellCommand$InstallParams;-><init>()V
+PLcom/android/server/pm/PackageManagerShellCommand$InstallParams;-><init>(Lcom/android/server/pm/PackageManagerShellCommand$InstallParams;)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;->-get0(Lcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;)Ljava/util/concurrent/SynchronousQueue;
+PLcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;-><init>()V
+PLcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;-><init>(Lcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;)V
+PLcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;->getIntentSender()Landroid/content/IntentSender;
+PLcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver;->getResult()Landroid/content/Intent;
+PLcom/android/server/pm/PackageManagerShellCommand;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+PLcom/android/server/pm/PackageManagerShellCommand;->doCommitSession(IZ)I
+PLcom/android/server/pm/PackageManagerShellCommand;->doCreateSession(Landroid/content/pm/PackageInstaller$SessionParams;Ljava/lang/String;I)I
+PLcom/android/server/pm/PackageManagerShellCommand;->onCommand(Ljava/lang/String;)I
+PLcom/android/server/pm/PackageManagerShellCommand;->runInstall()I
+PLcom/android/server/pm/PackageManagerShellCommand;->runList()I
+PLcom/android/server/pm/PackageManagerShellCommand;->setParamsSize(Lcom/android/server/pm/PackageManagerShellCommand$InstallParams;Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerShellCommand;->translateUserId(ILjava/lang/String;)I
+PLcom/android/server/pm/PackageSetting;->isForwardLocked()Z
+PLcom/android/server/pm/PackageSetting;->isSharedUser()Z
+PLcom/android/server/pm/PackageSettingBase;->disableComponentLPw(Ljava/lang/String;I)Z
+PLcom/android/server/pm/PackageSettingBase;->getCeDataInode(I)J
+PLcom/android/server/pm/PackageSettingBase;->getDisabledComponents(I)Landroid/util/ArraySet;
+PLcom/android/server/pm/PackageSettingBase;->getEnabledComponents(I)Landroid/util/ArraySet;
+PLcom/android/server/pm/PackageSettingBase;->getInstallReason(I)I
+PLcom/android/server/pm/PackageSettingBase;->getOverlayPaths(I)[Ljava/lang/String;
+PLcom/android/server/pm/PackageSettingBase;->queryInstalledUsers([IZ)[I
+PLcom/android/server/pm/PackageSettingBase;->restoreComponentLPw(Ljava/lang/String;I)Z
+PLcom/android/server/pm/PackageSettingBase;->setInstallReason(II)V
+PLcom/android/server/pm/PackageSettingBase;->setInstallStatus(I)V
+PLcom/android/server/pm/PackageSettingBase;->setInstalled(ZI)V
+PLcom/android/server/pm/PackageSettingBase;->setInstallerPackageName(Ljava/lang/String;)V
+PLcom/android/server/pm/PackageSettingBase;->setStopped(ZI)V
+PLcom/android/server/pm/PackageSettingBase;->setUpdateAvailable(Z)V
+PLcom/android/server/pm/PackageSignatures;->toString()Ljava/lang/String;
+PLcom/android/server/pm/PermissionsState;-><init>(Lcom/android/server/pm/PermissionsState;)V
+PLcom/android/server/pm/PermissionsState;->getInstallPermissionState(Ljava/lang/String;)Lcom/android/server/pm/PermissionsState$PermissionState;
+PLcom/android/server/pm/PermissionsState;->getPermissionFlags(Ljava/lang/String;I)I
+PLcom/android/server/pm/PermissionsState;->reset()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
+PLcom/android/server/pm/ProcessLoggingHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/pm/ProcessLoggingHandler;->invalidateProcessLoggingBaseApkHash(Ljava/lang/String;)V
+PLcom/android/server/pm/ProtectedPackages;->hasDeviceOwnerOrProfileOwner(ILjava/lang/String;)Z
+PLcom/android/server/pm/ProtectedPackages;->isPackageStateProtected(ILjava/lang/String;)Z
+PLcom/android/server/pm/ProtectedPackages;->isProtectedPackage(Ljava/lang/String;)Z
+PLcom/android/server/pm/ProtectedPackages;->setDeviceAndProfileOwnerPackages(ILjava/lang/String;Landroid/util/SparseArray;)V
+PLcom/android/server/pm/Settings$RuntimePermissionPersistence;->areDefaultRuntimPermissionsGrantedLPr(I)Z
+PLcom/android/server/pm/Settings$VersionInfo;->forceCurrent()V
+PLcom/android/server/pm/Settings;->-get0(Lcom/android/server/pm/Settings;)Landroid/util/SparseArray;
+PLcom/android/server/pm/Settings;->areDefaultRuntimePermissionsGrantedLPr(I)Z
+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;->dumpSplitNames(Ljava/io/PrintWriter;Landroid/content/pm/PackageParser$Package;)V
+PLcom/android/server/pm/Settings;->getBlockUninstallLPr(ILjava/lang/String;)Z
+PLcom/android/server/pm/Settings;->getInstallerPackageNameLPr(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/pm/Settings;->replacePackageLPw(Ljava/lang/String;Lcom/android/server/pm/PackageSetting;)V
+PLcom/android/server/pm/Settings;->replaceUserIdLPw(ILjava/lang/Object;)V
+PLcom/android/server/pm/Settings;->setInstallStatus(Ljava/lang/String;I)V
+PLcom/android/server/pm/Settings;->setInstallerPackageName(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/pm/Settings;->wasPackageEverLaunchedLPr(Ljava/lang/String;I)Z
+PLcom/android/server/pm/Settings;->writeAllRuntimePermissionsLPr()V
+PLcom/android/server/pm/Settings;->writeBlockUninstallPackagesLPr(Lorg/xmlpull/v1/XmlSerializer;I)V
+PLcom/android/server/pm/Settings;->writeCrossProfileIntentFiltersLPr(Lorg/xmlpull/v1/XmlSerializer;I)V
+PLcom/android/server/pm/Settings;->writePackageListLPr()V
+PLcom/android/server/pm/Settings;->writePersistentPreferredActivitiesLPr(Lorg/xmlpull/v1/XmlSerializer;I)V
+PLcom/android/server/pm/SharedUserSetting;->removePackage(Lcom/android/server/pm/PackageSetting;)V
+PLcom/android/server/pm/SharedUserSetting;->toString()Ljava/lang/String;
+PLcom/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$PendingItem;)V
+PLcom/android/server/pm/ShortcutBitmapSaver;-><init>(Lcom/android/server/pm/ShortcutService;)V
+PLcom/android/server/pm/ShortcutBitmapSaver;->lambda$-com_android_server_pm_ShortcutBitmapSaver_4411(Ljava/util/concurrent/CountDownLatch;)V
+PLcom/android/server/pm/ShortcutBitmapSaver;->lambda$-com_android_server_pm_ShortcutBitmapSaver_7645()V
+PLcom/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
+PLcom/android/server/pm/ShortcutDumpFiles;-><init>(Lcom/android/server/pm/ShortcutService;)V
+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;->getPinnedShortcutIds(Ljava/lang/String;I)Landroid/util/ArraySet;
+PLcom/android/server/pm/ShortcutLauncher;->saveToXml(Lorg/xmlpull/v1/XmlSerializer;Z)V
+PLcom/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;->addOrUpdateDynamicShortcut(Landroid/content/pm/ShortcutInfo;)V
+PLcom/android/server/pm/ShortcutPackage;->addShortcutInner(Landroid/content/pm/ShortcutInfo;)V
+PLcom/android/server/pm/ShortcutPackage;->clearAllImplicitRanks()V
+PLcom/android/server/pm/ShortcutPackage;->deleteAllDynamicShortcuts()V
+PLcom/android/server/pm/ShortcutPackage;->deleteDynamicWithId(Ljava/lang/String;)Z
+PLcom/android/server/pm/ShortcutPackage;->deleteOrDisableWithId(Ljava/lang/String;ZZ)Landroid/content/pm/ShortcutInfo;
+PLcom/android/server/pm/ShortcutPackage;->deleteShortcutInner(Ljava/lang/String;)Landroid/content/pm/ShortcutInfo;
+PLcom/android/server/pm/ShortcutPackage;->disableWithId(Ljava/lang/String;Ljava/lang/String;IZ)V
+PLcom/android/server/pm/ShortcutPackage;->enforceShortcutCountsBeforeOperation(Ljava/util/List;I)V
+PLcom/android/server/pm/ShortcutPackage;->ensureImmutableShortcutsNotIncluded(Ljava/util/List;)V
+PLcom/android/server/pm/ShortcutPackage;->ensureImmutableShortcutsNotIncludedWithIds(Ljava/util/List;)V
+PLcom/android/server/pm/ShortcutPackage;->ensureNotImmutable(Landroid/content/pm/ShortcutInfo;)V
+PLcom/android/server/pm/ShortcutPackage;->ensureNotImmutable(Ljava/lang/String;)V
+PLcom/android/server/pm/ShortcutPackage;->findAll(Ljava/util/List;Ljava/util/function/Predicate;I)V
+PLcom/android/server/pm/ShortcutPackage;->findShortcutById(Ljava/lang/String;)Landroid/content/pm/ShortcutInfo;
+PLcom/android/server/pm/ShortcutPackage;->getApiCallCount()I
+PLcom/android/server/pm/ShortcutPackage;->getFileName(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/pm/ShortcutPackage;->getOwnerUserId()I
+PLcom/android/server/pm/ShortcutPackage;->getPackageResources()Landroid/content/res/Resources;
+PLcom/android/server/pm/ShortcutPackage;->getUsedBitmapFiles()Landroid/util/ArraySet;
+PLcom/android/server/pm/ShortcutPackage;->incrementCountForActivity(Landroid/util/ArrayMap;Landroid/content/ComponentName;I)V
+PLcom/android/server/pm/ShortcutPackage;->lambda$-com_android_server_pm_ShortcutPackage_41443(Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;)I
+PLcom/android/server/pm/ShortcutPackage;->pushOutExcessShortcuts()Z
+PLcom/android/server/pm/ShortcutPackage;->removeOrphans()V
+PLcom/android/server/pm/ShortcutPackage;->resetRateLimiting()V
+PLcom/android/server/pm/ShortcutPackage;->tryApiCall()Z
+PLcom/android/server/pm/ShortcutPackageInfo;-><init>(IJLjava/util/ArrayList;Z)V
+PLcom/android/server/pm/ShortcutPackageInfo;->getLastUpdateTime()J
+PLcom/android/server/pm/ShortcutPackageInfo;->getVersionCode()I
+PLcom/android/server/pm/ShortcutPackageInfo;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;Z)V
+PLcom/android/server/pm/ShortcutPackageInfo;->newEmpty()Lcom/android/server/pm/ShortcutPackageInfo;
+PLcom/android/server/pm/ShortcutPackageInfo;->updateVersionInfo(Landroid/content/pm/PackageInfo;)V
+PLcom/android/server/pm/ShortcutPackageItem;-><init>(Lcom/android/server/pm/ShortcutUser;ILjava/lang/String;Lcom/android/server/pm/ShortcutPackageInfo;)V
+PLcom/android/server/pm/ShortcutPackageItem;->getUser()Lcom/android/server/pm/ShortcutUser;
+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;->parseShortcuts(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;I)Ljava/util/List;
+PLcom/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;->isRequestPinItemSupported(II)Z
+PLcom/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
+PLcom/android/server/pm/ShortcutService$2;-><init>()V
+PLcom/android/server/pm/ShortcutService$3;-><init>(Lcom/android/server/pm/ShortcutService;)V
+PLcom/android/server/pm/ShortcutService$3;->onUidGone(IZ)V
+PLcom/android/server/pm/ShortcutService$4;-><init>(Lcom/android/server/pm/ShortcutService;)V
+PLcom/android/server/pm/ShortcutService$5;-><init>(Lcom/android/server/pm/ShortcutService;)V
+PLcom/android/server/pm/ShortcutService$FileOutputStreamWithPath;-><init>(Ljava/io/File;)V
+PLcom/android/server/pm/ShortcutService$FileOutputStreamWithPath;->getFile()Ljava/io/File;
+PLcom/android/server/pm/ShortcutService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/pm/ShortcutService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/pm/ShortcutService$Lifecycle;->onStart()V
+PLcom/android/server/pm/ShortcutService$Lifecycle;->onUnlockUser(I)V
+PLcom/android/server/pm/ShortcutService$LocalService;-><init>(Lcom/android/server/pm/ShortcutService;)V
+PLcom/android/server/pm/ShortcutService$LocalService;-><init>(Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService$LocalService;)V
+PLcom/android/server/pm/ShortcutService$LocalService;->addListener(Landroid/content/pm/ShortcutServiceInternal$ShortcutChangeListener;)V
+PLcom/android/server/pm/ShortcutService$LocalService;->hasShortcutHostPermission(ILjava/lang/String;)Z
+PLcom/android/server/pm/ShortcutService$LocalService;->lambda$-com_android_server_pm_ShortcutService$LocalService_85684(ILjava/lang/String;Ljava/util/List;JLandroid/content/ComponentName;IILjava/util/ArrayList;ILcom/android/server/pm/ShortcutPackage;)V
+PLcom/android/server/pm/ShortcutService;->-com_android_server_pm_ShortcutService-mthref-0()V
+PLcom/android/server/pm/ShortcutService;->-com_android_server_pm_ShortcutService-mthref-1(Landroid/content/pm/ShortcutInfo;)Z
+PLcom/android/server/pm/ShortcutService;->-com_android_server_pm_ShortcutService-mthref-2(Landroid/content/pm/ShortcutInfo;)Z
+PLcom/android/server/pm/ShortcutService;->-com_android_server_pm_ShortcutService-mthref-3(Landroid/content/pm/ShortcutInfo;)Z
+PLcom/android/server/pm/ShortcutService;->-get1(Lcom/android/server/pm/ShortcutService;)Ljava/util/ArrayList;
+PLcom/android/server/pm/ShortcutService;->-get2(Lcom/android/server/pm/ShortcutService;)Ljava/lang/Object;
+PLcom/android/server/pm/ShortcutService;->-wrap2(Lcom/android/server/pm/ShortcutService;Ljava/util/List;)Ljava/util/List;
+PLcom/android/server/pm/ShortcutService;->-wrap5(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutService;->-wrap8(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/pm/ShortcutService;-><init>(Landroid/content/Context;Landroid/os/Looper;Z)V
+PLcom/android/server/pm/ShortcutService;->assignImplicitRanks(Ljava/util/List;)V
+PLcom/android/server/pm/ShortcutService;->checkPackageChanges(I)V
+PLcom/android/server/pm/ShortcutService;->cleanupDanglingBitmapDirectoriesLocked(I)V
+PLcom/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;->enableShortcuts(Ljava/lang/String;Ljava/util/List;I)V
+PLcom/android/server/pm/ShortcutService;->enforceMaxActivityShortcuts(I)V
+PLcom/android/server/pm/ShortcutService;->fillInDefaultActivity(Ljava/util/List;)V
+PLcom/android/server/pm/ShortcutService;->fixUpIncomingShortcutInfo(Landroid/content/pm/ShortcutInfo;Z)V
+PLcom/android/server/pm/ShortcutService;->fixUpShortcutResourceNamesAndValues(Landroid/content/pm/ShortcutInfo;)V
+PLcom/android/server/pm/ShortcutService;->getActivityInfoWithMetadata(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
+PLcom/android/server/pm/ShortcutService;->getBaseStateFile()Landroid/util/AtomicFile;
+PLcom/android/server/pm/ShortcutService;->getDefaultLauncher(I)Landroid/content/ComponentName;
+PLcom/android/server/pm/ShortcutService;->getDynamicShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/pm/ShortcutService;->getInstalledPackages(I)Ljava/util/List;
+PLcom/android/server/pm/ShortcutService;->getLastResetTimeLocked()J
+PLcom/android/server/pm/ShortcutService;->getMainActivityIntent()Landroid/content/Intent;
+PLcom/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;->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;->getParentOrSelfUserId(I)I
+PLcom/android/server/pm/ShortcutService;->getPinnedShortcuts(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/pm/ShortcutService;->getShortcutsWithQueryLocked(Ljava/lang/String;IILjava/util/function/Predicate;)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/pm/ShortcutService;->getUidLastForegroundElapsedTimeLocked(I)J
+PLcom/android/server/pm/ShortcutService;->getUserBitmapFilePath(I)Ljava/io/File;
+PLcom/android/server/pm/ShortcutService;->getUserFile(I)Ljava/io/File;
+PLcom/android/server/pm/ShortcutService;->handlePackageChanged(Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutService;->handlePackageUpdateFinished(Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutService;->handleUnlockUser(I)V
+PLcom/android/server/pm/ShortcutService;->hasShortcutHostPermission(Ljava/lang/String;I)Z
+PLcom/android/server/pm/ShortcutService;->initialize()V
+PLcom/android/server/pm/ShortcutService;->injectBuildFingerprint()Ljava/lang/String;
+PLcom/android/server/pm/ShortcutService;->injectDipToPixel(I)I
+PLcom/android/server/pm/ShortcutService;->injectGetActivityInfoWithMetadataWithUninstalled(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
+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;->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;->injectIsLowRamDevice()Z
+PLcom/android/server/pm/ShortcutService;->injectIsMainActivity(Landroid/content/ComponentName;I)Z
+PLcom/android/server/pm/ShortcutService;->injectIsSafeModeEnabled()Z
+PLcom/android/server/pm/ShortcutService;->injectPostToHandler(Ljava/lang/Runnable;)V
+PLcom/android/server/pm/ShortcutService;->injectRegisterUidObserver(Landroid/app/IUidObserver;I)V
+PLcom/android/server/pm/ShortcutService;->injectRunOnNewThread(Ljava/lang/Runnable;)V
+PLcom/android/server/pm/ShortcutService;->injectShortcutManagerConstants()Ljava/lang/String;
+PLcom/android/server/pm/ShortcutService;->injectShouldPerformVerification()Z
+PLcom/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
+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;->isClockValid(J)Z
+PLcom/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;->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
+PLcom/android/server/pm/ShortcutService;->isRequestPinItemSupported(II)Z
+PLcom/android/server/pm/ShortcutService;->isUidForegroundLocked(I)Z
+PLcom/android/server/pm/ShortcutService;->lambda$-com_android_server_pm_ShortcutService_101474(Ljava/util/ArrayList;Lcom/android/server/pm/ShortcutPackageItem;)V
+PLcom/android/server/pm/ShortcutService;->lambda$-com_android_server_pm_ShortcutService_21406(JI)V
+PLcom/android/server/pm/ShortcutService;->lambda$-com_android_server_pm_ShortcutService_54763(ILjava/lang/String;)V
+PLcom/android/server/pm/ShortcutService;->loadBaseStateLocked()V
+PLcom/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;->notifyListeners(Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutService;->onBootPhase(I)V
+PLcom/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;->parseComponentNameAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/content/ComponentName;
+PLcom/android/server/pm/ShortcutService;->parseIntentAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Landroid/content/Intent;
+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;->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
+PLcom/android/server/pm/ShortcutService;->scheduleSaveInner(I)V
+PLcom/android/server/pm/ShortcutService;->scheduleSaveUser(I)V
+PLcom/android/server/pm/ShortcutService;->setDynamicShortcuts(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;I)Z
+PLcom/android/server/pm/ShortcutService;->shrinkBitmap(Landroid/graphics/Bitmap;I)Landroid/graphics/Bitmap;
+PLcom/android/server/pm/ShortcutService;->updateConfigurationLocked(Ljava/lang/String;)Z
+PLcom/android/server/pm/ShortcutService;->updateShortcuts(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;I)Z
+PLcom/android/server/pm/ShortcutService;->updateTimesLocked()V
+PLcom/android/server/pm/ShortcutService;->verifyStates()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
+PLcom/android/server/pm/ShortcutUser$PackageWithUser;->equals(Ljava/lang/Object;)Z
+PLcom/android/server/pm/ShortcutUser;-><init>(Lcom/android/server/pm/ShortcutService;I)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;->forAllLaunchers(Ljava/util/function/Consumer;)V
+PLcom/android/server/pm/ShortcutUser;->forAllPackageItems(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;->getKnownLocales()Ljava/lang/String;
+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;
+PLcom/android/server/pm/ShortcutUser;->getUserId()I
+PLcom/android/server/pm/ShortcutUser;->hasPackage(Ljava/lang/String;)Z
+PLcom/android/server/pm/ShortcutUser;->lambda$-com_android_server_pm_ShortcutUser_11105(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;
+PLcom/android/server/pm/ShortcutUser;->onCalledByPublisher(Ljava/lang/String;)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
+PLcom/android/server/pm/ShortcutUser;->setLauncher(Landroid/content/ComponentName;Z)V
+PLcom/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;->getDataUserCeDirectory(Ljava/lang/String;I)Ljava/io/File;
+PLcom/android/server/pm/UserDataPreparer;->getSerialNumber(Ljava/io/File;)I
+PLcom/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
+PLcom/android/server/pm/UserDataPreparer;->reconcileUsers(Ljava/lang/String;Ljava/util/List;)V
+PLcom/android/server/pm/UserDataPreparer;->reconcileUsers(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
+PLcom/android/server/pm/UserManagerService$2;-><init>(Lcom/android/server/pm/UserManagerService;Landroid/os/Bundle;I)V
+PLcom/android/server/pm/UserManagerService$2;->run()V
+PLcom/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
+PLcom/android/server/pm/UserManagerService$LifeCycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/pm/UserManagerService$LifeCycle;->onBootPhase(I)V
+PLcom/android/server/pm/UserManagerService$LifeCycle;->onStart()V
+PLcom/android/server/pm/UserManagerService$LocalService;->addUserRestrictionsListener(Landroid/os/UserManagerInternal$UserRestrictionsListener;)V
+PLcom/android/server/pm/UserManagerService$LocalService;->getUserIds()[I
+PLcom/android/server/pm/UserManagerService$LocalService;->getUserRestriction(ILjava/lang/String;)Z
+PLcom/android/server/pm/UserManagerService$LocalService;->setDeviceManaged(Z)V
+PLcom/android/server/pm/UserManagerService$LocalService;->setDevicePolicyUserRestrictions(ILandroid/os/Bundle;ZI)V
+PLcom/android/server/pm/UserManagerService$LocalService;->setUserManaged(IZ)V
+PLcom/android/server/pm/UserManagerService$LocalService;->setUserState(II)V
+PLcom/android/server/pm/UserManagerService$MainHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/pm/UserManagerService;->-get0(Lcom/android/server/pm/UserManagerService;)Lcom/android/internal/app/IAppOpsService;
+PLcom/android/server/pm/UserManagerService;->-get10(Lcom/android/server/pm/UserManagerService;)Ljava/lang/Object;
+PLcom/android/server/pm/UserManagerService;->-get2(Lcom/android/server/pm/UserManagerService;)Landroid/content/Context;
+PLcom/android/server/pm/UserManagerService;->-get4(Lcom/android/server/pm/UserManagerService;)Landroid/util/SparseBooleanArray;
+PLcom/android/server/pm/UserManagerService;->-get5(Lcom/android/server/pm/UserManagerService;)Ljava/lang/Object;
+PLcom/android/server/pm/UserManagerService;->-get7()Landroid/os/IBinder;
+PLcom/android/server/pm/UserManagerService;->-get8(Lcom/android/server/pm/UserManagerService;)Ljava/util/ArrayList;
+PLcom/android/server/pm/UserManagerService;->-set1(Lcom/android/server/pm/UserManagerService;Z)Z
+PLcom/android/server/pm/UserManagerService;->-wrap11(Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService$UserData;)V
+PLcom/android/server/pm/UserManagerService;->-wrap4(Lcom/android/server/pm/UserManagerService;I)Lcom/android/server/pm/UserManagerService$UserData;
+PLcom/android/server/pm/UserManagerService;->-wrap9(Lcom/android/server/pm/UserManagerService;ILandroid/os/Bundle;ZI)V
+PLcom/android/server/pm/UserManagerService;->applyUserRestrictionsLR(I)V
+PLcom/android/server/pm/UserManagerService;->checkManageUserAndAcrossUsersFullPermission(Ljava/lang/String;)V
+PLcom/android/server/pm/UserManagerService;->cleanupPartialUsers()V
+PLcom/android/server/pm/UserManagerService;->computeEffectiveUserRestrictionsLR(I)Landroid/os/Bundle;
+PLcom/android/server/pm/UserManagerService;->findCurrentGuestUser()Landroid/content/pm/UserInfo;
+PLcom/android/server/pm/UserManagerService;->getCredentialOwnerProfile(I)I
+PLcom/android/server/pm/UserManagerService;->getUserAccount(I)Ljava/lang/String;
+PLcom/android/server/pm/UserManagerService;->getUserDataNoChecks(I)Lcom/android/server/pm/UserManagerService$UserData;
+PLcom/android/server/pm/UserManagerService;->getUserIcon(I)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/pm/UserManagerService;->getUserRestrictionSources(Ljava/lang/String;I)Ljava/util/List;
+PLcom/android/server/pm/UserManagerService;->hasBaseUserRestriction(Ljava/lang/String;I)Z
+PLcom/android/server/pm/UserManagerService;->isDemoUser(I)Z
+PLcom/android/server/pm/UserManagerService;->isManagedProfile(I)Z
+PLcom/android/server/pm/UserManagerService;->isQuietModeEnabled(I)Z
+PLcom/android/server/pm/UserManagerService;->isRestricted()Z
+PLcom/android/server/pm/UserManagerService;->onBeforeUnlockUser(I)V
+PLcom/android/server/pm/UserManagerService;->onUserLoggedIn(I)V
+PLcom/android/server/pm/UserManagerService;->propagateUserRestrictionsLR(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+PLcom/android/server/pm/UserManagerService;->reconcileUsers(Ljava/lang/String;)V
+PLcom/android/server/pm/UserManagerService;->scheduleWriteUser(Lcom/android/server/pm/UserManagerService$UserData;)V
+PLcom/android/server/pm/UserManagerService;->setDevicePolicyUserRestrictionsInner(ILandroid/os/Bundle;ZI)V
+PLcom/android/server/pm/UserManagerService;->setUserRestriction(Ljava/lang/String;ZI)V
+PLcom/android/server/pm/UserManagerService;->systemReady()V
+PLcom/android/server/pm/UserManagerService;->updateRestrictionsIfNeededLR(ILandroid/os/Bundle;Landroid/util/SparseArray;)Z
+PLcom/android/server/pm/UserManagerService;->updateUserRestrictionsInternalLR(Landroid/os/Bundle;I)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/UserRestrictionsUtils;->applyUserRestrictions(Landroid/content/Context;ILandroid/os/Bundle;Landroid/os/Bundle;)V
+PLcom/android/server/pm/UserRestrictionsUtils;->areEqual(Landroid/os/Bundle;Landroid/os/Bundle;)Z
+PLcom/android/server/pm/UserRestrictionsUtils;->isEmpty(Landroid/os/Bundle;)Z
+PLcom/android/server/pm/UserRestrictionsUtils;->mergeAll(Landroid/util/SparseArray;)Landroid/os/Bundle;
+PLcom/android/server/pm/UserRestrictionsUtils;->nonNull(Landroid/os/Bundle;)Landroid/os/Bundle;
+PLcom/android/server/pm/UserRestrictionsUtils;->restrictionsChanged(Landroid/os/Bundle;Landroid/os/Bundle;[Ljava/lang/String;)Z
+PLcom/android/server/pm/UserRestrictionsUtils;->sortToGlobalAndLocal(Landroid/os/Bundle;ZILandroid/os/Bundle;Landroid/os/Bundle;)V
+PLcom/android/server/pm/UserRestrictionsUtils;->writeRestrictions(Lorg/xmlpull/v1/XmlSerializer;Landroid/os/Bundle;Ljava/lang/String;)V
+PLcom/android/server/pm/dex/DexManager$DexSearchResult;->-get0(Lcom/android/server/pm/dex/DexManager$DexSearchResult;)I
+PLcom/android/server/pm/dex/DexManager$DexSearchResult;->-get1(Lcom/android/server/pm/dex/DexManager$DexSearchResult;)Ljava/lang/String;
+PLcom/android/server/pm/dex/DexManager$DexSearchResult;-><init>(Lcom/android/server/pm/dex/DexManager;Ljava/lang/String;I)V
+PLcom/android/server/pm/dex/DexManager$PackageCodeLocations;->-get0(Lcom/android/server/pm/dex/DexManager$PackageCodeLocations;)Ljava/lang/String;
+PLcom/android/server/pm/dex/DexManager$PackageCodeLocations;-><init>(Landroid/content/pm/ApplicationInfo;I)V
+PLcom/android/server/pm/dex/DexManager;->-get0()I
+PLcom/android/server/pm/dex/DexManager;->-get1()I
+PLcom/android/server/pm/dex/DexManager;->load(Ljava/util/Map;)V
+PLcom/android/server/pm/dex/DexManager;->notifyDexLoad(Landroid/content/pm/ApplicationInfo;Ljava/util/List;Ljava/util/List;Ljava/lang/String;I)V
+PLcom/android/server/pm/dex/DexManager;->notifyPackageUpdated(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
+PLcom/android/server/pm/dex/DexoptOptions;->getCompilerFilter()Ljava/lang/String;
+PLcom/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;->isDowngrade()Z
+PLcom/android/server/pm/dex/DexoptOptions;->isForce()Z
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->-get0(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Z
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->-get1(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Ljava/util/Set;
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->-get2(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Ljava/util/Set;
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->-get3(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)I
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->-wrap0(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Z
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;-><init>(ZILjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->getClassLoaderContext()Ljava/lang/String;
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->getLoaderIsas()Ljava/util/Set;
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->getLoadingPackages()Ljava/util/Set;
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->isUsedByOtherApps()Z
+PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->merge(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Z
+PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->-get0(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)Ljava/util/Map;
+PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->-get1(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)Ljava/util/Map;
+PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->-get2(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)Z
+PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->-wrap0(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;)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;
+PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->isAnyCodePathUsedByOtherApps()Z
+PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->mergeCodePathUsedByOtherApps(Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;)Z
+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;->isSupportedVersion(I)Z
+PLcom/android/server/pm/dex/PackageDexUsage;->maybeAddLoadingPackage(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)Z
+PLcom/android/server/pm/dex/PackageDexUsage;->maybeReadClassLoaderContext(Ljava/io/BufferedReader;I)Ljava/lang/String;
+PLcom/android/server/pm/dex/PackageDexUsage;->maybeReadLoadingPackages(Ljava/io/BufferedReader;I)Ljava/util/Set;
+PLcom/android/server/pm/dex/PackageDexUsage;->maybeWriteAsync()V
+PLcom/android/server/pm/dex/PackageDexUsage;->read()V
+PLcom/android/server/pm/dex/PackageDexUsage;->readBoolean(Ljava/lang/String;)Z
+PLcom/android/server/pm/dex/PackageDexUsage;->readInternal(Ljava/lang/Object;)V
+PLcom/android/server/pm/dex/PackageDexUsage;->readInternal(Ljava/lang/Void;)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
+PLcom/android/server/policy/-$Lambda$pV_TcBBXJOcgD8CpVRVZuDc_ff8;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/policy/AccessibilityShortcutController$1;-><init>(Lcom/android/server/policy/AccessibilityShortcutController;Landroid/os/Handler;)V
+PLcom/android/server/policy/AccessibilityShortcutController$FrameworkObjectProvider;-><init>()V
+PLcom/android/server/policy/AccessibilityShortcutController;-><init>(Landroid/content/Context;Landroid/os/Handler;I)V
+PLcom/android/server/policy/AccessibilityShortcutController;->getTargetServiceComponentNameString(Landroid/content/Context;I)Ljava/lang/String;
+PLcom/android/server/policy/AccessibilityShortcutController;->onSettingsChanged()V
+PLcom/android/server/policy/AccessibilityShortcutController;->setCurrentUser(I)V
+PLcom/android/server/policy/BarController$1;-><init>(Lcom/android/server/policy/BarController;I)V
+PLcom/android/server/policy/BarController$1;->run()V
+PLcom/android/server/policy/BarController$BarHandler;-><init>(Lcom/android/server/policy/BarController;)V
+PLcom/android/server/policy/BarController$BarHandler;-><init>(Lcom/android/server/policy/BarController;Lcom/android/server/policy/BarController$BarHandler;)V
+PLcom/android/server/policy/BarController$BarHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/policy/BarController;->-get0(Lcom/android/server/policy/BarController;)I
+PLcom/android/server/policy/BarController;->-get1(Lcom/android/server/policy/BarController;)Lcom/android/server/policy/BarController$OnBarVisibilityChangedListener;
+PLcom/android/server/policy/BarController;-><init>(Ljava/lang/String;IIIIII)V
+PLcom/android/server/policy/BarController;->checkShowTransientBarLw()Z
+PLcom/android/server/policy/BarController;->setOnBarVisibilityChangedListener(Lcom/android/server/policy/BarController$OnBarVisibilityChangedListener;Z)V
+PLcom/android/server/policy/BarController;->setWindow(Landroid/view/WindowManagerPolicy$WindowState;)V
+PLcom/android/server/policy/GlobalKeyManager;-><init>(Landroid/content/Context;)V
+PLcom/android/server/policy/GlobalKeyManager;->loadGlobalKeys(Landroid/content/Context;)V
+PLcom/android/server/policy/IconUtilities;-><init>(Landroid/content/Context;)V
+PLcom/android/server/policy/ImmersiveModeConfirmation$1;-><init>(Lcom/android/server/policy/ImmersiveModeConfirmation;)V
+PLcom/android/server/policy/ImmersiveModeConfirmation$2;-><init>(Lcom/android/server/policy/ImmersiveModeConfirmation;)V
+PLcom/android/server/policy/ImmersiveModeConfirmation$H;-><init>(Lcom/android/server/policy/ImmersiveModeConfirmation;)V
+PLcom/android/server/policy/ImmersiveModeConfirmation$H;-><init>(Lcom/android/server/policy/ImmersiveModeConfirmation;Lcom/android/server/policy/ImmersiveModeConfirmation$H;)V
+PLcom/android/server/policy/ImmersiveModeConfirmation$H;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/policy/ImmersiveModeConfirmation;->-wrap0(Lcom/android/server/policy/ImmersiveModeConfirmation;)V
+PLcom/android/server/policy/ImmersiveModeConfirmation;-><init>(Landroid/content/Context;)V
+PLcom/android/server/policy/ImmersiveModeConfirmation;->getNavBarExitDuration()J
+PLcom/android/server/policy/ImmersiveModeConfirmation;->handleHide()V
+PLcom/android/server/policy/ImmersiveModeConfirmation;->immersiveModeChangedLw(Ljava/lang/String;ZZZ)V
+PLcom/android/server/policy/ImmersiveModeConfirmation;->loadSetting(I)V
+PLcom/android/server/policy/ImmersiveModeConfirmation;->systemReady()V
+PLcom/android/server/policy/LogDecelerateInterpolator;-><init>(II)V
+PLcom/android/server/policy/LogDecelerateInterpolator;->computeLog(FII)F
+PLcom/android/server/policy/LogDecelerateInterpolator;->getInterpolation(F)F
+PLcom/android/server/policy/PhoneWindowManager$10;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$11;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/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
+PLcom/android/server/policy/PhoneWindowManager$13;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$14;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$14;->onFling(I)V
+PLcom/android/server/policy/PhoneWindowManager$14;->onSwipeFromLeft()V
+PLcom/android/server/policy/PhoneWindowManager$14;->onSwipeFromTop()V
+PLcom/android/server/policy/PhoneWindowManager$15;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$15;->onAppTransitionCancelledLocked(I)V
+PLcom/android/server/policy/PhoneWindowManager$15;->onAppTransitionStartingLocked(ILandroid/os/IBinder;Landroid/os/IBinder;Landroid/view/animation/Animation;Landroid/view/animation/Animation;)I
+PLcom/android/server/policy/PhoneWindowManager$16;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$16;->onTrustedChanged()V
+PLcom/android/server/policy/PhoneWindowManager$19;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$19;->run()V
+PLcom/android/server/policy/PhoneWindowManager$1;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$1;->run()V
+PLcom/android/server/policy/PhoneWindowManager$2;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$2;->onDrawn()V
+PLcom/android/server/policy/PhoneWindowManager$3;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$4;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$5;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$5;->onBarVisibilityChanged(Z)V
+PLcom/android/server/policy/PhoneWindowManager$6;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$7;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$8;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$9;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$MyOrientationListener$1;-><init>(Lcom/android/server/policy/PhoneWindowManager$MyOrientationListener;)V
+PLcom/android/server/policy/PhoneWindowManager$MyOrientationListener$1;->run()V
+PLcom/android/server/policy/PhoneWindowManager$MyOrientationListener;-><init>(Lcom/android/server/policy/PhoneWindowManager;Landroid/content/Context;Landroid/os/Handler;)V
+PLcom/android/server/policy/PhoneWindowManager$MyOrientationListener;->onProposedRotationChanged(I)V
+PLcom/android/server/policy/PhoneWindowManager$MyWakeGestureListener;-><init>(Lcom/android/server/policy/PhoneWindowManager;Landroid/content/Context;Landroid/os/Handler;)V
+PLcom/android/server/policy/PhoneWindowManager$PolicyHandler;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$PolicyHandler;-><init>(Lcom/android/server/policy/PhoneWindowManager;Lcom/android/server/policy/PhoneWindowManager$PolicyHandler;)V
+PLcom/android/server/policy/PhoneWindowManager$PolicyHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/policy/PhoneWindowManager$ScreenLockTimeout;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$ScreenshotRunnable;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager$ScreenshotRunnable;-><init>(Lcom/android/server/policy/PhoneWindowManager;Lcom/android/server/policy/PhoneWindowManager$ScreenshotRunnable;)V
+PLcom/android/server/policy/PhoneWindowManager$SettingsObserver;-><init>(Lcom/android/server/policy/PhoneWindowManager;Landroid/os/Handler;)V
+PLcom/android/server/policy/PhoneWindowManager$SettingsObserver;->observe()V
+PLcom/android/server/policy/PhoneWindowManager$SettingsObserver;->onChange(Z)V
+PLcom/android/server/policy/PhoneWindowManager;->-wrap12(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager;->-wrap14(Lcom/android/server/policy/PhoneWindowManager;)V
+PLcom/android/server/policy/PhoneWindowManager;->-wrap20(Lcom/android/server/policy/PhoneWindowManager;Landroid/view/WindowManagerPolicy$WindowState;)V
+PLcom/android/server/policy/PhoneWindowManager;->-wrap21(Lcom/android/server/policy/PhoneWindowManager;I)V
+PLcom/android/server/policy/PhoneWindowManager;->-wrap3(Lcom/android/server/policy/PhoneWindowManager;ILandroid/view/animation/Animation;)I
+PLcom/android/server/policy/PhoneWindowManager;->-wrap4(Lcom/android/server/policy/PhoneWindowManager;)I
+PLcom/android/server/policy/PhoneWindowManager;-><init>()V
+PLcom/android/server/policy/PhoneWindowManager;->addSplashscreenContent(Lcom/android/internal/policy/PhoneWindow;Landroid/content/Context;)V
+PLcom/android/server/policy/PhoneWindowManager;->allowAppAnimationsLw()Z
+PLcom/android/server/policy/PhoneWindowManager;->applyLidSwitchState()V
+PLcom/android/server/policy/PhoneWindowManager;->awakenDreams()V
+PLcom/android/server/policy/PhoneWindowManager;->bindKeyguard()V
+PLcom/android/server/policy/PhoneWindowManager;->canDismissBootAnimation()Z
+PLcom/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;->cancelPreloadRecentApps()V
+PLcom/android/server/policy/PhoneWindowManager;->checkAddPermission(Landroid/view/WindowManager$LayoutParams;[I)I
+PLcom/android/server/policy/PhoneWindowManager;->checkShowToOwnerOnly(Landroid/view/WindowManager$LayoutParams;)Z
+PLcom/android/server/policy/PhoneWindowManager;->createHiddenByKeyguardExit(ZZ)Landroid/view/animation/Animation;
+PLcom/android/server/policy/PhoneWindowManager;->createHomeDockIntent()Landroid/content/Intent;
+PLcom/android/server/policy/PhoneWindowManager;->dispatchUnhandledKey(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;
+PLcom/android/server/policy/PhoneWindowManager;->enableKeyguard(Z)V
+PLcom/android/server/policy/PhoneWindowManager;->enableScreenAfterBoot()V
+PLcom/android/server/policy/PhoneWindowManager;->finishKeyguardDrawn()V
+PLcom/android/server/policy/PhoneWindowManager;->finishScreenTurningOn()V
+PLcom/android/server/policy/PhoneWindowManager;->finishWindowsDrawn()V
+PLcom/android/server/policy/PhoneWindowManager;->getAudioService()Landroid/media/IAudioService;
+PLcom/android/server/policy/PhoneWindowManager;->getDisplayContext(Landroid/content/Context;I)Landroid/content/Context;
+PLcom/android/server/policy/PhoneWindowManager;->getDreamManager()Landroid/service/dreams/IDreamManager;
+PLcom/android/server/policy/PhoneWindowManager;->getHdmiControl()Lcom/android/server/policy/PhoneWindowManager$HdmiControl;
+PLcom/android/server/policy/PhoneWindowManager;->getKeyguardDrawnTimeout()J
+PLcom/android/server/policy/PhoneWindowManager;->getLongIntArray(Landroid/content/res/Resources;I)[J
+PLcom/android/server/policy/PhoneWindowManager;->getStatusBarService()Lcom/android/internal/statusbar/IStatusBarService;
+PLcom/android/server/policy/PhoneWindowManager;->getTelecommService()Landroid/telecom/TelecomManager;
+PLcom/android/server/policy/PhoneWindowManager;->getUserRotationMode()I
+PLcom/android/server/policy/PhoneWindowManager;->getVibrationEffect(I)Landroid/os/VibrationEffect;
+PLcom/android/server/policy/PhoneWindowManager;->handleShortPressOnHome()V
+PLcom/android/server/policy/PhoneWindowManager;->handleStartTransitionForKeyguardLw(ILandroid/view/animation/Animation;)I
+PLcom/android/server/policy/PhoneWindowManager;->hasLongPressOnBackBehavior()Z
+PLcom/android/server/policy/PhoneWindowManager;->hasNavigationBar()Z
+PLcom/android/server/policy/PhoneWindowManager;->hasPanicPressOnBackBehavior()Z
+PLcom/android/server/policy/PhoneWindowManager;->init(Landroid/content/Context;Landroid/view/IWindowManager;Landroid/view/WindowManagerPolicy$WindowManagerFuncs;)V
+PLcom/android/server/policy/PhoneWindowManager;->initializeHdmiState()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;->interceptScreenshotChord()V
+PLcom/android/server/policy/PhoneWindowManager;->isAnyPortrait(I)Z
+PLcom/android/server/policy/PhoneWindowManager;->isDefaultOrientationForced()Z
+PLcom/android/server/policy/PhoneWindowManager;->isKeyguardDrawnLw()Z
+PLcom/android/server/policy/PhoneWindowManager;->isKeyguardHostWindow(Landroid/view/WindowManager$LayoutParams;)Z
+PLcom/android/server/policy/PhoneWindowManager;->isKeyguardOccluded()Z
+PLcom/android/server/policy/PhoneWindowManager;->isKeyguardSecure(I)Z
+PLcom/android/server/policy/PhoneWindowManager;->isLandscapeOrSeascape(I)Z
+PLcom/android/server/policy/PhoneWindowManager;->isNavBarEmpty(I)Z
+PLcom/android/server/policy/PhoneWindowManager;->isUserSetupComplete()Z
+PLcom/android/server/policy/PhoneWindowManager;->keepScreenOnStartedLw()V
+PLcom/android/server/policy/PhoneWindowManager;->keepScreenOnStoppedLw()V
+PLcom/android/server/policy/PhoneWindowManager;->launchHomeFromHotKey()V
+PLcom/android/server/policy/PhoneWindowManager;->launchHomeFromHotKey(ZZ)V
+PLcom/android/server/policy/PhoneWindowManager;->needSensorRunningLp()Z
+PLcom/android/server/policy/PhoneWindowManager;->onConfigurationChanged()V
+PLcom/android/server/policy/PhoneWindowManager;->onKeyguardOccludedChangedLw(Z)V
+PLcom/android/server/policy/PhoneWindowManager;->onSystemUiStarted()V
+PLcom/android/server/policy/PhoneWindowManager;->prepareAddWindowLw(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManager$LayoutParams;)I
+PLcom/android/server/policy/PhoneWindowManager;->readCameraLensCoverState()V
+PLcom/android/server/policy/PhoneWindowManager;->readRotation(I)I
+PLcom/android/server/policy/PhoneWindowManager;->registerShortcutKey(JLcom/android/internal/policy/IShortcutService;)V
+PLcom/android/server/policy/PhoneWindowManager;->removeWindowLw(Landroid/view/WindowManagerPolicy$WindowState;)V
+PLcom/android/server/policy/PhoneWindowManager;->reportScreenStateToVrManager(Z)V
+PLcom/android/server/policy/PhoneWindowManager;->requestTransientBars(Landroid/view/WindowManagerPolicy$WindowState;)V
+PLcom/android/server/policy/PhoneWindowManager;->rotationForOrientationLw(II)I
+PLcom/android/server/policy/PhoneWindowManager;->rotationHasCompatibleMetricsLw(II)Z
+PLcom/android/server/policy/PhoneWindowManager;->screenTurnedOn()V
+PLcom/android/server/policy/PhoneWindowManager;->screenTurningOn(Landroid/view/WindowManagerPolicy$ScreenOnListener;)V
+PLcom/android/server/policy/PhoneWindowManager;->selectRotationAnimationLw([I)V
+PLcom/android/server/policy/PhoneWindowManager;->sendCloseSystemWindows(Ljava/lang/String;)V
+PLcom/android/server/policy/PhoneWindowManager;->sendSystemKeyToStatusBar(I)V
+PLcom/android/server/policy/PhoneWindowManager;->sendSystemKeyToStatusBarAsync(I)V
+PLcom/android/server/policy/PhoneWindowManager;->setAttachedWindowFrames(Landroid/view/WindowManagerPolicy$WindowState;IILandroid/view/WindowManagerPolicy$WindowState;ZLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+PLcom/android/server/policy/PhoneWindowManager;->setCurrentOrientationLw(I)V
+PLcom/android/server/policy/PhoneWindowManager;->setDismissImeOnBackKeyPressed(Z)V
+PLcom/android/server/policy/PhoneWindowManager;->setDisplayOverscan(Landroid/view/Display;IIII)V
+PLcom/android/server/policy/PhoneWindowManager;->setHdmiPlugged(Z)V
+PLcom/android/server/policy/PhoneWindowManager;->setKeyguardOccludedLw(ZZ)Z
+PLcom/android/server/policy/PhoneWindowManager;->setLastInputMethodWindowLw(Landroid/view/WindowManagerPolicy$WindowState;Landroid/view/WindowManagerPolicy$WindowState;)V
+PLcom/android/server/policy/PhoneWindowManager;->setRotationLw(I)V
+PLcom/android/server/policy/PhoneWindowManager;->setSafeMode(Z)V
+PLcom/android/server/policy/PhoneWindowManager;->setUserRotationMode(II)V
+PLcom/android/server/policy/PhoneWindowManager;->shouldEnableWakeGestureLp()Z
+PLcom/android/server/policy/PhoneWindowManager;->shouldRotateSeamlessly(II)Z
+PLcom/android/server/policy/PhoneWindowManager;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
+PLcom/android/server/policy/PhoneWindowManager;->startDockOrHome(ZZ)V
+PLcom/android/server/policy/PhoneWindowManager;->startKeyguardExitAnimation(JJ)V
+PLcom/android/server/policy/PhoneWindowManager;->startedWakingUp()V
+PLcom/android/server/policy/PhoneWindowManager;->systemBooted()V
+PLcom/android/server/policy/PhoneWindowManager;->systemReady()V
+PLcom/android/server/policy/PhoneWindowManager;->updateOrientationListenerLp()V
+PLcom/android/server/policy/PhoneWindowManager;->updateRotation(Z)V
+PLcom/android/server/policy/PhoneWindowManager;->updateRotation(ZZ)V
+PLcom/android/server/policy/PhoneWindowManager;->updateScreenOffSleepToken(Z)V
+PLcom/android/server/policy/PhoneWindowManager;->updateSettings()V
+PLcom/android/server/policy/PhoneWindowManager;->updateUiMode()V
+PLcom/android/server/policy/PhoneWindowManager;->updateWakeGestureListenerLp()V
+PLcom/android/server/policy/PhoneWindowManager;->validateRotationAnimationLw(IIZ)Z
+PLcom/android/server/policy/PolicyControl;->adjustClearableFlags(Landroid/view/WindowManagerPolicy$WindowState;I)I
+PLcom/android/server/policy/PolicyControl;->disableImmersiveConfirmation(Ljava/lang/String;)Z
+PLcom/android/server/policy/PolicyControl;->reloadFromSetting(Landroid/content/Context;)V
+PLcom/android/server/policy/PolicyControl;->setFilters(Ljava/lang/String;)V
+PLcom/android/server/policy/ShortcutManager$ShortcutInfo;-><init>(Ljava/lang/String;Landroid/content/Intent;)V
+PLcom/android/server/policy/ShortcutManager;-><init>(Landroid/content/Context;)V
+PLcom/android/server/policy/ShortcutManager;->loadShortcuts()V
+PLcom/android/server/policy/SplashScreenSurface;-><init>(Landroid/view/View;Landroid/os/IBinder;)V
+PLcom/android/server/policy/SplashScreenSurface;->remove()V
+PLcom/android/server/policy/StatusBarController$1$2;-><init>(Lcom/android/server/policy/StatusBarController$1;Landroid/view/animation/Animation;Landroid/view/animation/Animation;)V
+PLcom/android/server/policy/StatusBarController$1$3;-><init>(Lcom/android/server/policy/StatusBarController$1;)V
+PLcom/android/server/policy/StatusBarController$1$3;->run()V
+PLcom/android/server/policy/StatusBarController$1;-><init>(Lcom/android/server/policy/StatusBarController;)V
+PLcom/android/server/policy/StatusBarController$1;->onAppTransitionCancelledLocked(I)V
+PLcom/android/server/policy/StatusBarController$1;->onAppTransitionStartingLocked(ILandroid/os/IBinder;Landroid/os/IBinder;Landroid/view/animation/Animation;Landroid/view/animation/Animation;)I
+PLcom/android/server/policy/StatusBarController;->-wrap0(Landroid/view/animation/Animation;Landroid/view/animation/Animation;)J
+PLcom/android/server/policy/StatusBarController;-><init>()V
+PLcom/android/server/policy/StatusBarController;->getAppTransitionListener()Landroid/view/WindowManagerInternal$AppTransitionListener;
+PLcom/android/server/policy/SystemGesturesPointerEventListener$FlingGestureDetector;-><init>(Lcom/android/server/policy/SystemGesturesPointerEventListener;)V
+PLcom/android/server/policy/SystemGesturesPointerEventListener$FlingGestureDetector;-><init>(Lcom/android/server/policy/SystemGesturesPointerEventListener;Lcom/android/server/policy/SystemGesturesPointerEventListener$FlingGestureDetector;)V
+PLcom/android/server/policy/SystemGesturesPointerEventListener;->-get0(Lcom/android/server/policy/SystemGesturesPointerEventListener;)Lcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;
+PLcom/android/server/policy/SystemGesturesPointerEventListener;->-get1(Lcom/android/server/policy/SystemGesturesPointerEventListener;)J
+PLcom/android/server/policy/SystemGesturesPointerEventListener;->-set0(Lcom/android/server/policy/SystemGesturesPointerEventListener;J)J
+PLcom/android/server/policy/SystemGesturesPointerEventListener;-><init>(Landroid/content/Context;Lcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;)V
+PLcom/android/server/policy/SystemGesturesPointerEventListener;->checkNull(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/policy/SystemGesturesPointerEventListener;->systemReady()V
+PLcom/android/server/policy/WakeGestureListener$1;-><init>(Lcom/android/server/policy/WakeGestureListener;)V
+PLcom/android/server/policy/WakeGestureListener$2;-><init>(Lcom/android/server/policy/WakeGestureListener;)V
+PLcom/android/server/policy/WakeGestureListener;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
+PLcom/android/server/policy/WakeGestureListener;->cancelWakeUpTrigger()V
+PLcom/android/server/policy/WakeGestureListener;->isSupported()Z
+PLcom/android/server/policy/WindowOrientationListener$OrientationJudge;-><init>(Lcom/android/server/policy/WindowOrientationListener;)V
+PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge$1;-><init>(Lcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;)V
+PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;-><init>(Lcom/android/server/policy/WindowOrientationListener;)V
+PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->evaluateRotationChangeLocked()I
+PLcom/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
+PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->resetLocked(Z)V
+PLcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;->unscheduleRotationEvaluationLocked()V
+PLcom/android/server/policy/WindowOrientationListener;->-get3(Lcom/android/server/policy/WindowOrientationListener;)Ljava/lang/Object;
+PLcom/android/server/policy/WindowOrientationListener;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
+PLcom/android/server/policy/WindowOrientationListener;-><init>(Landroid/content/Context;Landroid/os/Handler;I)V
+PLcom/android/server/policy/WindowOrientationListener;->canDetectOrientation()Z
+PLcom/android/server/policy/WindowOrientationListener;->enable(Z)V
+PLcom/android/server/policy/WindowOrientationListener;->getProposedRotation()I
+PLcom/android/server/policy/WindowOrientationListener;->setCurrentRotation(I)V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate$1;-><init>(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;)V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)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
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardState;-><init>()V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardState;->reset()V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->-get0(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;)Lcom/android/server/policy/keyguard/KeyguardStateMonitor$StateCallback;
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->-get1(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;)Landroid/content/Context;
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->-get2(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;)Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$DrawnListener;
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->-get4(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;)Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardState;
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->-set0(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;-><init>(Landroid/content/Context;Lcom/android/server/policy/keyguard/KeyguardStateMonitor$StateCallback;)V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->bindService(Landroid/content/Context;)V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->hasLockscreenWallpaper()Z
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isSecure(I)Z
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onBootCompleted()V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onScreenTurnedOn()V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onScreenTurningOn(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$DrawnListener;)V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onStartedWakingUp()V
+PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onSystemReady()V
+PLcom/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;->isSecure(I)Z
+PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onBootCompleted()V
+PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onScreenTurnedOn()V
+PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onScreenTurningOn(Lcom/android/internal/policy/IKeyguardDrawnCallback;)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
+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;->isSecure(I)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
+PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onSimSecureStateChanged(Z)V
+PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onTrustedChanged(Z)V
+PLcom/android/server/power/BatterySaverPolicy;->onChange(ZLandroid/net/Uri;)V
+PLcom/android/server/power/BatterySaverPolicy;->start(Landroid/content/ContentResolver;)V
+PLcom/android/server/power/BatterySaverPolicy;->updateConstants(Ljava/lang/String;)V
+PLcom/android/server/power/Notifier$1;-><init>(Lcom/android/server/power/Notifier;)V
+PLcom/android/server/power/Notifier$2;-><init>(Lcom/android/server/power/Notifier;)V
+PLcom/android/server/power/Notifier$3;-><init>(Lcom/android/server/power/Notifier;)V
+PLcom/android/server/power/Notifier$NotifierHandler;-><init>(Lcom/android/server/power/Notifier;Landroid/os/Looper;)V
+PLcom/android/server/power/Notifier;-><init>(Landroid/os/Looper;Landroid/content/Context;Lcom/android/internal/app/IBatteryStats;Lcom/android/internal/app/IAppOpsService;Lcom/android/server/power/SuspendBlocker;Landroid/view/WindowManagerPolicy;)V
+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
+PLcom/android/server/power/PowerManagerService$1;->acquireSuspendBlocker()V
+PLcom/android/server/power/PowerManagerService$1;->onStateChanged()V
+PLcom/android/server/power/PowerManagerService$1;->releaseSuspendBlocker()V
+PLcom/android/server/power/PowerManagerService$BatteryReceiver;-><init>(Lcom/android/server/power/PowerManagerService;)V
+PLcom/android/server/power/PowerManagerService$BatteryReceiver;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$BatteryReceiver;)V
+PLcom/android/server/power/PowerManagerService$BinderService;->getLastShutdownReason()I
+PLcom/android/server/power/PowerManagerService$BinderService;->isLightDeviceIdleMode()Z
+PLcom/android/server/power/PowerManagerService$BinderService;->isWakeLockLevelSupported(I)Z
+PLcom/android/server/power/PowerManagerService$BinderService;->setStayOnSetting(I)V
+PLcom/android/server/power/PowerManagerService$BinderService;->wakeUp(JLjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/power/PowerManagerService$Constants;->start(Landroid/content/ContentResolver;)V
+PLcom/android/server/power/PowerManagerService$Constants;->updateConstants()V
+PLcom/android/server/power/PowerManagerService$DockReceiver;-><init>(Lcom/android/server/power/PowerManagerService;)V
+PLcom/android/server/power/PowerManagerService$DockReceiver;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$DockReceiver;)V
+PLcom/android/server/power/PowerManagerService$DreamReceiver;-><init>(Lcom/android/server/power/PowerManagerService;)V
+PLcom/android/server/power/PowerManagerService$DreamReceiver;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$DreamReceiver;)V
+PLcom/android/server/power/PowerManagerService$LocalService;->setDeviceIdleTempWhitelist([I)V
+PLcom/android/server/power/PowerManagerService$LocalService;->setDeviceIdleWhitelist([I)V
+PLcom/android/server/power/PowerManagerService$LocalService;->setMaximumScreenOffTimeoutFromDeviceAdmin(I)V
+PLcom/android/server/power/PowerManagerService$LocalService;->uidActive(I)V
+PLcom/android/server/power/PowerManagerService$LocalService;->uidGone(I)V
+PLcom/android/server/power/PowerManagerService$SettingsObserver;-><init>(Lcom/android/server/power/PowerManagerService;Landroid/os/Handler;)V
+PLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;->release()V
+PLcom/android/server/power/PowerManagerService$UserSwitchedReceiver;-><init>(Lcom/android/server/power/PowerManagerService;)V
+PLcom/android/server/power/PowerManagerService$UserSwitchedReceiver;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$UserSwitchedReceiver;)V
+PLcom/android/server/power/PowerManagerService$UserSwitchedReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/power/PowerManagerService;->-get2(Lcom/android/server/power/PowerManagerService;)Z
+PLcom/android/server/power/PowerManagerService;->-get3(Lcom/android/server/power/PowerManagerService;)Z
+PLcom/android/server/power/PowerManagerService;->-get4(Lcom/android/server/power/PowerManagerService;)I
+PLcom/android/server/power/PowerManagerService;->-get5(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/SuspendBlocker;
+PLcom/android/server/power/PowerManagerService;->-set0(Lcom/android/server/power/PowerManagerService;I)I
+PLcom/android/server/power/PowerManagerService;->-wrap16(Lcom/android/server/power/PowerManagerService;)V
+PLcom/android/server/power/PowerManagerService;->-wrap17(Lcom/android/server/power/PowerManagerService;)V
+PLcom/android/server/power/PowerManagerService;->-wrap21(Ljava/lang/String;)V
+PLcom/android/server/power/PowerManagerService;->-wrap27(Lcom/android/server/power/PowerManagerService;Z)V
+PLcom/android/server/power/PowerManagerService;->-wrap35(Lcom/android/server/power/PowerManagerService;)V
+PLcom/android/server/power/PowerManagerService;->-wrap37(Lcom/android/server/power/PowerManagerService;JIII)V
+PLcom/android/server/power/PowerManagerService;->-wrap38(Lcom/android/server/power/PowerManagerService;JLjava/lang/String;ILjava/lang/String;I)V
+PLcom/android/server/power/PowerManagerService;->-wrap4(Lcom/android/server/power/PowerManagerService;I)Z
+PLcom/android/server/power/PowerManagerService;->getCurrentBrightnessSettingLocked()I
+PLcom/android/server/power/PowerManagerService;->getLastShutdownReasonInternal(Ljava/io/File;)I
+PLcom/android/server/power/PowerManagerService;->handleSettingsChangedLocked()V
+PLcom/android/server/power/PowerManagerService;->handleUidStateChangeLocked()V
+PLcom/android/server/power/PowerManagerService;->handleUserActivityTimeout()V
+PLcom/android/server/power/PowerManagerService;->incrementBootCount()V
+PLcom/android/server/power/PowerManagerService;->isLightDeviceIdleModeInternal()Z
+PLcom/android/server/power/PowerManagerService;->isScreenLock(Lcom/android/server/power/PowerManagerService$WakeLock;)Z
+PLcom/android/server/power/PowerManagerService;->isWakeLockLevelSupportedInternal(I)Z
+PLcom/android/server/power/PowerManagerService;->monitor()V
+PLcom/android/server/power/PowerManagerService;->notifyWakeLockLongStartedLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
+PLcom/android/server/power/PowerManagerService;->readConfigurationLocked()V
+PLcom/android/server/power/PowerManagerService;->setDeviceIdleTempWhitelistInternal([I)V
+PLcom/android/server/power/PowerManagerService;->setDeviceIdleWhitelistInternal([I)V
+PLcom/android/server/power/PowerManagerService;->setHalAutoSuspendModeLocked(Z)V
+PLcom/android/server/power/PowerManagerService;->setMaximumScreenOffTimeoutFromDeviceAdminInternal(I)V
+PLcom/android/server/power/PowerManagerService;->setStayOnSettingInternal(I)V
+PLcom/android/server/power/PowerManagerService;->shouldWakeUpWhenPluggedOrUnpluggedLocked(ZIZ)Z
+PLcom/android/server/power/PowerManagerService;->systemReady(Lcom/android/internal/app/IAppOpsService;)V
+PLcom/android/server/power/PowerManagerService;->updateLowPowerModeLocked()V
+PLcom/android/server/power/PowerManagerService;->updateSettingsLocked()V
+PLcom/android/server/power/PowerManagerService;->updateWakeLockDisabledStatesLocked()V
+PLcom/android/server/power/PowerManagerService;->wakeUpInternal(JLjava/lang/String;ILjava/lang/String;I)V
+PLcom/android/server/power/PowerManagerService;->wakeUpNoUpdateLocked(JLjava/lang/String;ILjava/lang/String;I)Z
+PLcom/android/server/power/WirelessChargerDetector$1;-><init>(Lcom/android/server/power/WirelessChargerDetector;)V
+PLcom/android/server/power/WirelessChargerDetector$2;-><init>(Lcom/android/server/power/WirelessChargerDetector;)V
+PLcom/android/server/power/WirelessChargerDetector;-><init>(Landroid/hardware/SensorManager;Lcom/android/server/power/SuspendBlocker;Landroid/os/Handler;)V
+PLcom/android/server/power/WirelessChargerDetector;->update(ZII)Z
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl$1;-><init>(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;Landroid/os/Handler;Landroid/net/Uri;)V
+PLcom/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;->onPackageModified(Ljava/lang/String;)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;->-get0(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;)Landroid/content/Context;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->-get1(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;)Ljava/lang/Object;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->-get2(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;)Landroid/os/UserManager;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->-wrap0(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;IZZ)Lcom/android/server/print/UserState;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->-wrap2(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;-><init>(Lcom/android/server/print/PrintManagerService;Landroid/content/Context;)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->getOrCreateUserStateLocked(IZZ)Lcom/android/server/print/UserState;
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->handleUserUnlocked(I)V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->registerBroadcastReceivers()V
+PLcom/android/server/print/PrintManagerService$PrintManagerImpl;->registerContentObservers()V
+PLcom/android/server/print/PrintManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/print/PrintManagerService;->onStart()V
+PLcom/android/server/print/PrintManagerService;->onUnlockUser(I)V
+PLcom/android/server/print/RemotePrintService$MyHandler;-><init>(Lcom/android/server/print/RemotePrintService;Landroid/os/Looper;)V
+PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;-><init>(Lcom/android/server/print/RemotePrintService;)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$RemoteServiceConneciton;)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;->getComponentName()Landroid/content/ComponentName;
+PLcom/android/server/print/RemotePrintSpooler$BasePrintSpoolerServiceCallbacks;-><init>()V
+PLcom/android/server/print/RemotePrintSpooler$BasePrintSpoolerServiceCallbacks;-><init>(Lcom/android/server/print/RemotePrintSpooler$BasePrintSpoolerServiceCallbacks;)V
+PLcom/android/server/print/RemotePrintSpooler$ClearCustomPrinterIconCacheCaller$1;-><init>(Lcom/android/server/print/RemotePrintSpooler$ClearCustomPrinterIconCacheCaller;)V
+PLcom/android/server/print/RemotePrintSpooler$ClearCustomPrinterIconCacheCaller;-><init>()V
+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;-><init>()V
+PLcom/android/server/print/RemotePrintSpooler$GetPrintJobInfosCaller$1;-><init>(Lcom/android/server/print/RemotePrintSpooler$GetPrintJobInfosCaller;)V
+PLcom/android/server/print/RemotePrintSpooler$GetPrintJobInfosCaller;-><init>()V
+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$MyServiceConnection;)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;->onAllPrintJobsHandled()V
+PLcom/android/server/print/RemotePrintSpooler$SetPrintJobStateCaller$1;-><init>(Lcom/android/server/print/RemotePrintSpooler$SetPrintJobStateCaller;)V
+PLcom/android/server/print/RemotePrintSpooler$SetPrintJobStateCaller;-><init>()V
+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;->-get1(Lcom/android/server/print/RemotePrintSpooler;)Ljava/lang/Object;
+PLcom/android/server/print/RemotePrintSpooler;->-set0(Lcom/android/server/print/RemotePrintSpooler;Landroid/print/IPrintSpooler;)Landroid/print/IPrintSpooler;
+PLcom/android/server/print/RemotePrintSpooler;->-wrap1(Lcom/android/server/print/RemotePrintSpooler;)V
+PLcom/android/server/print/RemotePrintSpooler;->-wrap3(Lcom/android/server/print/RemotePrintSpooler;)V
+PLcom/android/server/print/RemotePrintSpooler;-><init>(Landroid/content/Context;IZLcom/android/server/print/RemotePrintSpooler$PrintSpoolerCallbacks;)V
+PLcom/android/server/print/RemotePrintSpooler;->bindLocked()V
+PLcom/android/server/print/RemotePrintSpooler;->clearClientLocked()V
+PLcom/android/server/print/RemotePrintSpooler;->getRemoteInstanceLazy()Landroid/print/IPrintSpooler;
+PLcom/android/server/print/RemotePrintSpooler;->increasePriority()V
+PLcom/android/server/print/RemotePrintSpooler;->onAllPrintJobsHandled()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;->throwIfCalledOnMainThread()V
+PLcom/android/server/print/RemotePrintSpooler;->throwIfDestroyedLocked()V
+PLcom/android/server/print/RemotePrintSpooler;->unbindLocked()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$PrintJobForAppCache;)V
+PLcom/android/server/print/UserState$UserStateHandler;-><init>(Lcom/android/server/print/UserState;Landroid/os/Looper;)V
+PLcom/android/server/print/UserState$UserStateHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/print/UserState;->-wrap3(Lcom/android/server/print/UserState;)V
+PLcom/android/server/print/UserState;-><init>(Landroid/content/Context;ILjava/lang/Object;Z)V
+PLcom/android/server/print/UserState;->addServiceLocked(Lcom/android/server/print/RemotePrintService;)V
+PLcom/android/server/print/UserState;->getInstalledComponents()Ljava/util/ArrayList;
+PLcom/android/server/print/UserState;->handleDispatchPrintServicesChanged()V
+PLcom/android/server/print/UserState;->increasePriority()V
+PLcom/android/server/print/UserState;->onConfigurationChangedLocked()V
+PLcom/android/server/print/UserState;->onPrintServicesChanged()V
+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;->throwIfDestroyedLocked()V
+PLcom/android/server/print/UserState;->updateIfNeededLocked()V
+PLcom/android/server/print/UserState;->upgradePersistentStateIfNeeded()V
+PLcom/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;
+PLcom/android/server/restrictions/RestrictionsManagerService;->-wrap0(Lcom/android/server/restrictions/RestrictionsManagerService;Ljava/lang/String;)Landroid/os/IBinder;
+PLcom/android/server/restrictions/RestrictionsManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/restrictions/RestrictionsManagerService;->onStart()V
+PLcom/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
+PLcom/android/server/search/SearchManagerService$Lifecycle;->-get0(Lcom/android/server/search/SearchManagerService$Lifecycle;)Lcom/android/server/search/SearchManagerService;
+PLcom/android/server/search/SearchManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/search/SearchManagerService$Lifecycle;->onStart()V
+PLcom/android/server/search/SearchManagerService$Lifecycle;->onUnlockUser(I)V
+PLcom/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;->-get0(Lcom/android/server/search/SearchManagerService;)Landroid/content/Context;
+PLcom/android/server/search/SearchManagerService;->-get1(Lcom/android/server/search/SearchManagerService;)Landroid/util/SparseArray;
+PLcom/android/server/search/SearchManagerService;->-wrap1(Lcom/android/server/search/SearchManagerService;I)V
+PLcom/android/server/search/SearchManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/search/SearchManagerService;->getSearchables(IZ)Lcom/android/server/search/Searchables;
+PLcom/android/server/search/SearchManagerService;->onUnlockUser(I)V
+PLcom/android/server/search/Searchables$1;-><init>()V
+PLcom/android/server/search/Searchables;-><init>(Landroid/content/Context;I)V
+PLcom/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;->getDefaultGlobalSearchProvider(Ljava/util/List;)Landroid/content/ComponentName;
+PLcom/android/server/search/Searchables;->getGlobalSearchProviderSetting()Ljava/lang/String;
+PLcom/android/server/security/KeyAttestationApplicationIdProviderService;-><init>(Landroid/content/Context;)V
+PLcom/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
+PLcom/android/server/security/KeyChainSystemService;->-wrap0(Lcom/android/server/security/KeyChainSystemService;Landroid/content/Intent;Landroid/os/UserHandle;)V
+PLcom/android/server/security/KeyChainSystemService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/security/KeyChainSystemService;->onStart()V
+PLcom/android/server/security/KeyChainSystemService;->startServiceInBackgroundAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
+PLcom/android/server/soundtrigger/SoundTriggerDbHelper;-><init>(Landroid/content/Context;)V
+PLcom/android/server/soundtrigger/SoundTriggerHelper$MyCallStateListener;-><init>(Lcom/android/server/soundtrigger/SoundTriggerHelper;)V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;-><init>(Landroid/content/Context;)V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->getModuleProperties()Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
+PLcom/android/server/soundtrigger/SoundTriggerInternal;-><init>()V
+PLcom/android/server/soundtrigger/SoundTriggerService$1;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService;)V
+PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService;Landroid/content/Context;)V
+PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;->getModuleProperties()Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
+PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;->isInitialized()Z
+PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;->setSoundTriggerHelper(Lcom/android/server/soundtrigger/SoundTriggerHelper;)V
+PLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService;)V
+PLcom/android/server/soundtrigger/SoundTriggerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/soundtrigger/SoundTriggerService;->initSoundTriggerHelper()V
+PLcom/android/server/soundtrigger/SoundTriggerService;->onBootPhase(I)V
+PLcom/android/server/soundtrigger/SoundTriggerService;->onStart()V
+PLcom/android/server/soundtrigger/SoundTriggerService;->onStartUser(I)V
+PLcom/android/server/statusbar/-$Lambda$-TUoAzP8agiJJX9P4eGDtNXdVZ4$1;->$m$0()V
+PLcom/android/server/statusbar/-$Lambda$-TUoAzP8agiJJX9P4eGDtNXdVZ4$1;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/statusbar/-$Lambda$-TUoAzP8agiJJX9P4eGDtNXdVZ4$1;->run()V
+PLcom/android/server/statusbar/StatusBarManagerService$1;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;)V
+PLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionCancelled()V
+PLcom/android/server/statusbar/StatusBarManagerService$1;->setNotificationDelegate(Lcom/android/server/notification/NotificationDelegate;)V
+PLcom/android/server/statusbar/StatusBarManagerService$1;->setWindowState(II)V
+PLcom/android/server/statusbar/StatusBarManagerService$2;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;I)V
+PLcom/android/server/statusbar/StatusBarManagerService$2;->run()V
+PLcom/android/server/statusbar/StatusBarManagerService$6;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;)V
+PLcom/android/server/statusbar/StatusBarManagerService$DisableRecord;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;)V
+PLcom/android/server/statusbar/StatusBarManagerService$DisableRecord;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;Lcom/android/server/statusbar/StatusBarManagerService$DisableRecord;)V
+PLcom/android/server/statusbar/StatusBarManagerService;->-get3(Lcom/android/server/statusbar/StatusBarManagerService;)Lcom/android/server/notification/NotificationDelegate;
+PLcom/android/server/statusbar/StatusBarManagerService;->-set3(Lcom/android/server/statusbar/StatusBarManagerService;Lcom/android/server/notification/NotificationDelegate;)Lcom/android/server/notification/NotificationDelegate;
+PLcom/android/server/statusbar/StatusBarManagerService;-><init>(Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/statusbar/StatusBarManagerService;->clearNotificationEffects()V
+PLcom/android/server/statusbar/StatusBarManagerService;->disable(ILandroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/statusbar/StatusBarManagerService;->disableForUser(ILandroid/os/IBinder;Ljava/lang/String;I)V
+PLcom/android/server/statusbar/StatusBarManagerService;->enforceExpandStatusBar()V
+PLcom/android/server/statusbar/StatusBarManagerService;->handleSystemKey(I)V
+PLcom/android/server/statusbar/StatusBarManagerService;->lambda$-com_android_server_statusbar_StatusBarManagerService_24751()V
+PLcom/android/server/statusbar/StatusBarManagerService;->notifyBarAttachChanged()V
+PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationExpansionChanged(Ljava/lang/String;ZZ)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;->registerStatusBar(Lcom/android/internal/statusbar/IStatusBar;Ljava/util/List;Ljava/util/List;[ILjava/util/List;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
+PLcom/android/server/statusbar/StatusBarManagerService;->setIconVisibility(Ljava/lang/String;Z)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;->-get0(Lcom/android/server/storage/CacheQuotaStrategy;)Ljava/lang/Object;
+PLcom/android/server/storage/CacheQuotaStrategy;->-get1(Lcom/android/server/storage/CacheQuotaStrategy;)Landroid/app/usage/ICacheQuotaService;
+PLcom/android/server/storage/CacheQuotaStrategy;->-set0(Lcom/android/server/storage/CacheQuotaStrategy;Landroid/app/usage/ICacheQuotaService;)Landroid/app/usage/ICacheQuotaService;
+PLcom/android/server/storage/CacheQuotaStrategy;->-wrap0(Lcom/android/server/storage/CacheQuotaStrategy;)Ljava/util/List;
+PLcom/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;->createServiceConnection()V
+PLcom/android/server/storage/CacheQuotaStrategy;->disconnectService()V
+PLcom/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;->insertIntoQuotaMap(Ljava/lang/String;IIJ)V
+PLcom/android/server/storage/CacheQuotaStrategy;->onResult(Landroid/os/Bundle;)V
+PLcom/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
+PLcom/android/server/storage/CacheQuotaStrategy;->setupQuotasFromFile()J
+PLcom/android/server/storage/CacheQuotaStrategy;->writeXmlToFile(Ljava/util/List;)V
+PLcom/android/server/storage/DeviceStorageMonitorService$1;-><init>(Lcom/android/server/storage/DeviceStorageMonitorService;)V
+PLcom/android/server/storage/DeviceStorageMonitorService$1;->getMemoryLowThreshold()J
+PLcom/android/server/storage/DeviceStorageMonitorService$1;->isMemoryLow()Z
+PLcom/android/server/storage/DeviceStorageMonitorService$2;-><init>(Lcom/android/server/storage/DeviceStorageMonitorService;)V
+PLcom/android/server/storage/DeviceStorageMonitorService$3;-><init>(Lcom/android/server/storage/DeviceStorageMonitorService;Landroid/os/Looper;)V
+PLcom/android/server/storage/DeviceStorageMonitorService$3;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/storage/DeviceStorageMonitorService$CacheFileDeletedObserver;-><init>()V
+PLcom/android/server/storage/DeviceStorageMonitorService$State;-><init>()V
+PLcom/android/server/storage/DeviceStorageMonitorService$State;-><init>(Lcom/android/server/storage/DeviceStorageMonitorService$State;)V
+PLcom/android/server/storage/DeviceStorageMonitorService;->-wrap0(Lcom/android/server/storage/DeviceStorageMonitorService;)V
+PLcom/android/server/storage/DeviceStorageMonitorService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/storage/DeviceStorageMonitorService;->findOrCreateState(Ljava/util/UUID;)Lcom/android/server/storage/DeviceStorageMonitorService$State;
+PLcom/android/server/storage/DeviceStorageMonitorService;->onStart()V
+PLcom/android/server/storage/DiskStatsLoggingService;->schedule(Landroid/content/Context;)V
+PLcom/android/server/telecom/TelecomLoaderService$1;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
+PLcom/android/server/telecom/TelecomLoaderService$2;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
+PLcom/android/server/telecom/TelecomLoaderService$3;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
+PLcom/android/server/telecom/TelecomLoaderService$4;-><init>(Lcom/android/server/telecom/TelecomLoaderService;Landroid/os/Handler;Landroid/net/Uri;Landroid/content/pm/PackageManagerInternal;Landroid/net/Uri;)V
+PLcom/android/server/telecom/TelecomLoaderService$5;-><init>(Lcom/android/server/telecom/TelecomLoaderService;Landroid/content/pm/PackageManagerInternal;)V
+PLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection$1;-><init>(Lcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;)V
+PLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
+PLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;-><init>(Lcom/android/server/telecom/TelecomLoaderService;Lcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;)V
+PLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/telecom/TelecomLoaderService;->-get0(Lcom/android/server/telecom/TelecomLoaderService;)Landroid/content/Context;
+PLcom/android/server/telecom/TelecomLoaderService;->-get1(Lcom/android/server/telecom/TelecomLoaderService;)Landroid/util/IntArray;
+PLcom/android/server/telecom/TelecomLoaderService;->-get2(Lcom/android/server/telecom/TelecomLoaderService;)Landroid/util/IntArray;
+PLcom/android/server/telecom/TelecomLoaderService;->-get3(Lcom/android/server/telecom/TelecomLoaderService;)Landroid/util/IntArray;
+PLcom/android/server/telecom/TelecomLoaderService;->-get4(Lcom/android/server/telecom/TelecomLoaderService;)Ljava/lang/Object;
+PLcom/android/server/telecom/TelecomLoaderService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/telecom/TelecomLoaderService;->connectToTelecom()V
+PLcom/android/server/telecom/TelecomLoaderService;->onBootPhase(I)V
+PLcom/android/server/telecom/TelecomLoaderService;->onStart()V
+PLcom/android/server/telecom/TelecomLoaderService;->registerCarrierConfigChangedReceiver()V
+PLcom/android/server/telecom/TelecomLoaderService;->registerDefaultAppNotifier()V
+PLcom/android/server/telecom/TelecomLoaderService;->registerDefaultAppProviders()V
+PLcom/android/server/timezone/IntentHelperImpl$Receiver;-><init>(Lcom/android/server/timezone/IntentHelper$Listener;Z)V
+PLcom/android/server/timezone/IntentHelperImpl$Receiver;-><init>(Lcom/android/server/timezone/IntentHelper$Listener;ZLcom/android/server/timezone/IntentHelperImpl$Receiver;)V
+PLcom/android/server/timezone/IntentHelperImpl;-><init>(Landroid/content/Context;)V
+PLcom/android/server/timezone/IntentHelperImpl;->enableReliabilityTriggering()V
+PLcom/android/server/timezone/IntentHelperImpl;->initialize(Ljava/lang/String;Ljava/lang/String;Lcom/android/server/timezone/IntentHelper$Listener;)V
+PLcom/android/server/timezone/PackageStatusStorage;-><init>(Ljava/io/File;)V
+PLcom/android/server/timezone/PackageTracker;-><init>(Lcom/android/server/timezone/ClockHelper;Lcom/android/server/timezone/ConfigHelper;Lcom/android/server/timezone/PackageManagerHelper;Lcom/android/server/timezone/PackageStatusStorage;Lcom/android/server/timezone/IntentHelper;)V
+PLcom/android/server/timezone/PackageTracker;->create(Landroid/content/Context;)Lcom/android/server/timezone/PackageTracker;
+PLcom/android/server/timezone/PackageTracker;->start()V
+PLcom/android/server/timezone/PackageTracker;->throwIfDeviceSettingsOrAppsAreBad()V
+PLcom/android/server/timezone/PackageTracker;->throwRuntimeExceptionIfNullOrEmpty(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/timezone/PackageTrackerHelperImpl;-><init>(Landroid/content/Context;)V
+PLcom/android/server/timezone/PackageTrackerHelperImpl;->getCheckTimeAllowedMillis()I
+PLcom/android/server/timezone/PackageTrackerHelperImpl;->getDataAppPackageName()Ljava/lang/String;
+PLcom/android/server/timezone/PackageTrackerHelperImpl;->getFailedCheckRetryCount()I
+PLcom/android/server/timezone/PackageTrackerHelperImpl;->getUpdateAppPackageName()Ljava/lang/String;
+PLcom/android/server/timezone/PackageTrackerHelperImpl;->isPrivilegedApp(Ljava/lang/String;)Z
+PLcom/android/server/timezone/PackageTrackerHelperImpl;->isTrackingEnabled()Z
+PLcom/android/server/timezone/RulesManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/timezone/RulesManagerService$Lifecycle;->onStart()V
+PLcom/android/server/timezone/RulesManagerService;->-wrap0(Landroid/content/Context;)Lcom/android/server/timezone/RulesManagerService;
+PLcom/android/server/timezone/RulesManagerService;-><init>(Lcom/android/server/timezone/PermissionHelper;Ljava/util/concurrent/Executor;Lcom/android/server/timezone/PackageTracker;Lcom/android/timezone/distro/installer/TimeZoneDistroInstaller;)V
+PLcom/android/server/timezone/RulesManagerService;->create(Landroid/content/Context;)Lcom/android/server/timezone/RulesManagerService;
+PLcom/android/server/timezone/RulesManagerService;->start()V
+PLcom/android/server/timezone/RulesManagerServiceHelperImpl;-><init>(Landroid/content/Context;)V
+PLcom/android/server/trust/-$Lambda$RuWUhZ3VT8Cf-F-WFFkHRfck9sI;->$m$0()V
+PLcom/android/server/trust/-$Lambda$RuWUhZ3VT8Cf-F-WFFkHRfck9sI;-><init>()V
+PLcom/android/server/trust/-$Lambda$RuWUhZ3VT8Cf-F-WFFkHRfck9sI;->run()V
+PLcom/android/server/trust/TrustArchive;-><init>()V
+PLcom/android/server/trust/TrustManagerService$1;-><init>(Lcom/android/server/trust/TrustManagerService;)V
+PLcom/android/server/trust/TrustManagerService$1;->clearAllFingerprints()V
+PLcom/android/server/trust/TrustManagerService$1;->enforceListenerPermission()V
+PLcom/android/server/trust/TrustManagerService$1;->enforceReportPermission()V
+PLcom/android/server/trust/TrustManagerService$1;->isTrustUsuallyManaged(I)Z
+PLcom/android/server/trust/TrustManagerService$1;->lambda$-com_android_server_trust_TrustManagerService$1_33892()V
+PLcom/android/server/trust/TrustManagerService$1;->registerTrustListener(Landroid/app/trust/ITrustListener;)V
+PLcom/android/server/trust/TrustManagerService$1;->reportEnabledTrustAgentsChanged(I)V
+PLcom/android/server/trust/TrustManagerService$1;->reportKeyguardShowingChanged()V
+PLcom/android/server/trust/TrustManagerService$2;-><init>(Lcom/android/server/trust/TrustManagerService;)V
+PLcom/android/server/trust/TrustManagerService$2;->handleMessage(Landroid/os/Message;)V
+PLcom/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
+PLcom/android/server/trust/TrustManagerService$3;->onPackageDisappeared(Ljava/lang/String;I)V
+PLcom/android/server/trust/TrustManagerService$3;->onSomePackagesChanged()V
+PLcom/android/server/trust/TrustManagerService$Receiver;-><init>(Lcom/android/server/trust/TrustManagerService;)V
+PLcom/android/server/trust/TrustManagerService$Receiver;-><init>(Lcom/android/server/trust/TrustManagerService;Lcom/android/server/trust/TrustManagerService$Receiver;)V
+PLcom/android/server/trust/TrustManagerService$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/trust/TrustManagerService$Receiver;->register(Landroid/content/Context;)V
+PLcom/android/server/trust/TrustManagerService$StrongAuthTracker;-><init>(Lcom/android/server/trust/TrustManagerService;Landroid/content/Context;)V
+PLcom/android/server/trust/TrustManagerService$StrongAuthTracker;->onStrongAuthRequiredChanged(I)V
+PLcom/android/server/trust/TrustManagerService;->-get1(Lcom/android/server/trust/TrustManagerService;)Landroid/content/Context;
+PLcom/android/server/trust/TrustManagerService;->-get11(Lcom/android/server/trust/TrustManagerService;)Landroid/util/SparseBooleanArray;
+PLcom/android/server/trust/TrustManagerService;->-get2(Lcom/android/server/trust/TrustManagerService;)I
+PLcom/android/server/trust/TrustManagerService;->-get4(Lcom/android/server/trust/TrustManagerService;)Landroid/os/Handler;
+PLcom/android/server/trust/TrustManagerService;->-get5(Lcom/android/server/trust/TrustManagerService;)Lcom/android/internal/widget/LockPatternUtils;
+PLcom/android/server/trust/TrustManagerService;->-wrap2(Lcom/android/server/trust/TrustManagerService;I)Z
+PLcom/android/server/trust/TrustManagerService;->-wrap4(Lcom/android/server/trust/TrustManagerService;Landroid/app/trust/ITrustListener;)V
+PLcom/android/server/trust/TrustManagerService;->-wrap8(Lcom/android/server/trust/TrustManagerService;I)V
+PLcom/android/server/trust/TrustManagerService;->-wrap9(Lcom/android/server/trust/TrustManagerService;Ljava/lang/String;)V
+PLcom/android/server/trust/TrustManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/trust/TrustManagerService;->addListener(Landroid/app/trust/ITrustListener;)V
+PLcom/android/server/trust/TrustManagerService;->aggregateIsTrustManaged(I)Z
+PLcom/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;->isDeviceLockedInner(I)Z
+PLcom/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;->onBootPhase(I)V
+PLcom/android/server/trust/TrustManagerService;->onStart()V
+PLcom/android/server/trust/TrustManagerService;->onStartUser(I)V
+PLcom/android/server/trust/TrustManagerService;->onUnlockUser(I)V
+PLcom/android/server/trust/TrustManagerService;->refreshDeviceLockedForUser(I)V
+PLcom/android/server/trust/TrustManagerService;->removeAgentsOfPackage(Ljava/lang/String;)V
+PLcom/android/server/trust/TrustManagerService;->setDeviceLockedForUser(IZ)V
+PLcom/android/server/trust/TrustManagerService;->updateDevicePolicyFeatures()V
+PLcom/android/server/trust/TrustManagerService;->updateTrust(II)V
+PLcom/android/server/trust/TrustManagerService;->updateTrustAll()V
+PLcom/android/server/twilight/TwilightService$1;-><init>(Lcom/android/server/twilight/TwilightService;)V
+PLcom/android/server/twilight/TwilightService$1;->getLastTwilightState()Lcom/android/server/twilight/TwilightState;
+PLcom/android/server/twilight/TwilightService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/twilight/TwilightService;->onBootPhase(I)V
+PLcom/android/server/twilight/TwilightService;->onStart()V
+PLcom/android/server/usage/AppIdleHistory;-><init>(J)V
+PLcom/android/server/usage/AppIdleHistory;-><init>(Ljava/io/File;J)V
+PLcom/android/server/usage/AppIdleHistory;->getElapsedTime(J)J
+PLcom/android/server/usage/AppIdleHistory;->getScreenOnTimeFile()Ljava/io/File;
+PLcom/android/server/usage/AppIdleHistory;->getUserFile(I)Ljava/io/File;
+PLcom/android/server/usage/AppIdleHistory;->readScreenOnTime()V
+PLcom/android/server/usage/AppIdleHistory;->setIdle(Ljava/lang/String;IZJ)V
+PLcom/android/server/usage/AppIdleHistory;->setThresholds(JJ)V
+PLcom/android/server/usage/AppIdleHistory;->updateDisplay(ZJ)V
+PLcom/android/server/usage/AppIdleHistory;->writeAppIdleDurations()V
+PLcom/android/server/usage/AppIdleHistory;->writeScreenOnTime()V
+PLcom/android/server/usage/IntervalStats;-><init>()V
+PLcom/android/server/usage/IntervalStats;->getOrCreateConfigurationStats(Landroid/content/res/Configuration;)Landroid/app/usage/ConfigurationStats;
+PLcom/android/server/usage/IntervalStats;->updateConfigurationStats(Landroid/content/res/Configuration;J)V
+PLcom/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
+PLcom/android/server/usage/StorageStatsService$H;-><init>(Lcom/android/server/usage/StorageStatsService;Landroid/os/Looper;)V
+PLcom/android/server/usage/StorageStatsService$H;->getInitializedStrategy()Lcom/android/server/storage/CacheQuotaStrategy;
+PLcom/android/server/usage/StorageStatsService$H;->recalculateQuotas(Lcom/android/server/storage/CacheQuotaStrategy;)V
+PLcom/android/server/usage/StorageStatsService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/usage/StorageStatsService$Lifecycle;->onStart()V
+PLcom/android/server/usage/StorageStatsService;->-get0(Lcom/android/server/usage/StorageStatsService;)Landroid/util/ArrayMap;
+PLcom/android/server/usage/StorageStatsService;->-get1(Lcom/android/server/usage/StorageStatsService;)Landroid/content/Context;
+PLcom/android/server/usage/StorageStatsService;->-get2(Lcom/android/server/usage/StorageStatsService;)Lcom/android/server/pm/Installer;
+PLcom/android/server/usage/StorageStatsService;->-wrap0(Lcom/android/server/usage/StorageStatsService;)V
+PLcom/android/server/usage/StorageStatsService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/usage/StorageStatsService;->getDefaultFlags()I
+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
+PLcom/android/server/usage/StorageStatsService;->invalidateMounts()V
+PLcom/android/server/usage/StorageStatsService;->notifySignificantDelta()V
+PLcom/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;->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
+PLcom/android/server/usage/UsageStatsDatabase;-><init>(Ljava/io/File;)V
+PLcom/android/server/usage/UsageStatsDatabase;->checkVersionAndBuildLocked()V
+PLcom/android/server/usage/UsageStatsDatabase;->findBestFitBucket(JJ)I
+PLcom/android/server/usage/UsageStatsDatabase;->getBuildFingerprint()Ljava/lang/String;
+PLcom/android/server/usage/UsageStatsDatabase;->getLatestUsageStats(I)Lcom/android/server/usage/IntervalStats;
+PLcom/android/server/usage/UsageStatsDatabase;->indexFilesLocked()V
+PLcom/android/server/usage/UsageStatsDatabase;->init(J)V
+PLcom/android/server/usage/UsageStatsDatabase;->isNewUpdate()Z
+PLcom/android/server/usage/UsageStatsDatabase;->putUsageStats(ILcom/android/server/usage/IntervalStats;)V
+PLcom/android/server/usage/UsageStatsDatabase;->queryUsageStats(IJJLcom/android/server/usage/UsageStatsDatabase$StatCombiner;)Ljava/util/List;
+PLcom/android/server/usage/UsageStatsService$1;-><init>(Lcom/android/server/usage/UsageStatsService;)V
+PLcom/android/server/usage/UsageStatsService$1;->onDisplayChanged(I)V
+PLcom/android/server/usage/UsageStatsService$2;-><init>(Lcom/android/server/usage/UsageStatsService;)V
+PLcom/android/server/usage/UsageStatsService$2;->onUidGone(IZ)V
+PLcom/android/server/usage/UsageStatsService$BinderService;-><init>(Lcom/android/server/usage/UsageStatsService;)V
+PLcom/android/server/usage/UsageStatsService$BinderService;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$BinderService;)V
+PLcom/android/server/usage/UsageStatsService$DeviceStateReceiver;-><init>(Lcom/android/server/usage/UsageStatsService;)V
+PLcom/android/server/usage/UsageStatsService$DeviceStateReceiver;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$DeviceStateReceiver;)V
+PLcom/android/server/usage/UsageStatsService$H;-><init>(Lcom/android/server/usage/UsageStatsService;Landroid/os/Looper;)V
+PLcom/android/server/usage/UsageStatsService$LocalService;-><init>(Lcom/android/server/usage/UsageStatsService;)V
+PLcom/android/server/usage/UsageStatsService$LocalService;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$LocalService;)V
+PLcom/android/server/usage/UsageStatsService$LocalService;->addAppIdleStateChangeListener(Landroid/app/usage/UsageStatsManagerInternal$AppIdleStateChangeListener;)V
+PLcom/android/server/usage/UsageStatsService$LocalService;->getIdleUidsForUser(I)[I
+PLcom/android/server/usage/UsageStatsService$LocalService;->isAppIdleParoleOn()Z
+PLcom/android/server/usage/UsageStatsService$LocalService;->queryUsageStatsForUser(IIJJZ)Ljava/util/List;
+PLcom/android/server/usage/UsageStatsService$LocalService;->reportConfigurationChange(Landroid/content/res/Configuration;I)V
+PLcom/android/server/usage/UsageStatsService$LocalService;->reportShortcutUsage(Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/usage/UsageStatsService$PackageReceiver;-><init>(Lcom/android/server/usage/UsageStatsService;)V
+PLcom/android/server/usage/UsageStatsService$PackageReceiver;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$PackageReceiver;)V
+PLcom/android/server/usage/UsageStatsService$PackageReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/usage/UsageStatsService$SettingsObserver;-><init>(Lcom/android/server/usage/UsageStatsService;Landroid/os/Handler;)V
+PLcom/android/server/usage/UsageStatsService$SettingsObserver;->registerObserver()V
+PLcom/android/server/usage/UsageStatsService$SettingsObserver;->updateSettings()V
+PLcom/android/server/usage/UsageStatsService$UserActionsReceiver;-><init>(Lcom/android/server/usage/UsageStatsService;)V
+PLcom/android/server/usage/UsageStatsService$UserActionsReceiver;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$UserActionsReceiver;)V
+PLcom/android/server/usage/UsageStatsService$UserActionsReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/usage/UsageStatsService;->-get1(Lcom/android/server/usage/UsageStatsService;)Lcom/android/server/usage/AppIdleHistory;
+PLcom/android/server/usage/UsageStatsService;->-get2(Lcom/android/server/usage/UsageStatsService;)Ljava/lang/Object;
+PLcom/android/server/usage/UsageStatsService;->-wrap1(Lcom/android/server/usage/UsageStatsService;)Z
+PLcom/android/server/usage/UsageStatsService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/usage/UsageStatsService;->addListener(Landroid/app/usage/UsageStatsManagerInternal$AppIdleStateChangeListener;)V
+PLcom/android/server/usage/UsageStatsService;->cleanUpRemovedUsersLocked()V
+PLcom/android/server/usage/UsageStatsService;->clearCarrierPrivilegedApps()V
+PLcom/android/server/usage/UsageStatsService;->fetchCarrierPrivilegedAppsLA()V
+PLcom/android/server/usage/UsageStatsService;->flushToDisk()V
+PLcom/android/server/usage/UsageStatsService;->flushToDiskLocked()V
+PLcom/android/server/usage/UsageStatsService;->informParoleStateChanged()V
+PLcom/android/server/usage/UsageStatsService;->isCarrierApp(Ljava/lang/String;)Z
+PLcom/android/server/usage/UsageStatsService;->isDisplayOn()Z
+PLcom/android/server/usage/UsageStatsService;->onBootPhase(I)V
+PLcom/android/server/usage/UsageStatsService;->onStart()V
+PLcom/android/server/usage/UsageStatsService;->onStatsUpdated()V
+PLcom/android/server/usage/UsageStatsService;->postCheckIdleStates(I)V
+PLcom/android/server/usage/UsageStatsService;->postParoleStateChanged()V
+PLcom/android/server/usage/UsageStatsService;->queryUsageStats(IIJJZ)Ljava/util/List;
+PLcom/android/server/usage/UsageStatsService;->setAppIdleAsync(Ljava/lang/String;ZI)V
+PLcom/android/server/usage/UsageStatsService;->setChargingState(Z)V
+PLcom/android/server/usage/UsageStatsService;->validRange(JJJ)Z
+PLcom/android/server/usage/UsageStatsXml;->parseBeginTime(Landroid/util/AtomicFile;)J
+PLcom/android/server/usage/UsageStatsXml;->parseBeginTime(Ljava/io/File;)J
+PLcom/android/server/usage/UsageStatsXml;->read(Landroid/util/AtomicFile;Lcom/android/server/usage/IntervalStats;)V
+PLcom/android/server/usage/UsageStatsXml;->read(Ljava/io/InputStream;Lcom/android/server/usage/IntervalStats;)V
+PLcom/android/server/usage/UsageStatsXml;->write(Landroid/util/AtomicFile;Lcom/android/server/usage/IntervalStats;)V
+PLcom/android/server/usage/UsageStatsXml;->write(Ljava/io/OutputStream;Lcom/android/server/usage/IntervalStats;)V
+PLcom/android/server/usage/UsageStatsXmlV1;->loadConfigStats(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/usage/IntervalStats;)V
+PLcom/android/server/usage/UserUsageStatsService$1;-><init>()V
+PLcom/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;-><init>(Landroid/content/Context;ILjava/io/File;Lcom/android/server/usage/UserUsageStatsService$StatsUpdatedListener;)V
+PLcom/android/server/usage/UserUsageStatsService;->persistActiveStats()V
+PLcom/android/server/usage/UserUsageStatsService;->queryUsageStats(IJJ)Ljava/util/List;
+PLcom/android/server/usage/UserUsageStatsService;->updateRolloverDeadline()V
+PLcom/android/server/usb/-$Lambda$A9zkc-u4LaET6cVKd0uc6IuE4_s;->$m$0()V
+PLcom/android/server/usb/-$Lambda$A9zkc-u4LaET6cVKd0uc6IuE4_s;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/usb/-$Lambda$A9zkc-u4LaET6cVKd0uc6IuE4_s;->run()V
+PLcom/android/server/usb/-$Lambda$ATEm4_U2eaRn21cN0eCfdiUt5-k;->$m$0()V
+PLcom/android/server/usb/-$Lambda$ATEm4_U2eaRn21cN0eCfdiUt5-k;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/usb/-$Lambda$ATEm4_U2eaRn21cN0eCfdiUt5-k;->run()V
+PLcom/android/server/usb/-$Lambda$FKfu8uuaZxaSOkvg1oeLD5zHuwk;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/usb/MtpNotificationManager$Receiver;-><init>(Lcom/android/server/usb/MtpNotificationManager;)V
+PLcom/android/server/usb/MtpNotificationManager$Receiver;-><init>(Lcom/android/server/usb/MtpNotificationManager;Lcom/android/server/usb/MtpNotificationManager$Receiver;)V
+PLcom/android/server/usb/MtpNotificationManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/MtpNotificationManager$OnOpenInAppListener;)V
+PLcom/android/server/usb/UsbAlsaManager$1;-><init>(Lcom/android/server/usb/UsbAlsaManager;Ljava/lang/String;I)V
+PLcom/android/server/usb/UsbAlsaManager$AlsaDevice;-><init>(Lcom/android/server/usb/UsbAlsaManager;III)V
+PLcom/android/server/usb/UsbAlsaManager;-><init>(Landroid/content/Context;)V
+PLcom/android/server/usb/UsbAlsaManager;->setPeripheralMidiState(ZII)V
+PLcom/android/server/usb/UsbDebuggingManager$UsbDebuggingHandler;-><init>(Lcom/android/server/usb/UsbDebuggingManager;Landroid/os/Looper;)V
+PLcom/android/server/usb/UsbDebuggingManager$UsbDebuggingHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/usb/UsbDebuggingManager$UsbDebuggingThread;-><init>(Lcom/android/server/usb/UsbDebuggingManager;)V
+PLcom/android/server/usb/UsbDebuggingManager$UsbDebuggingThread;->listenToSocket()V
+PLcom/android/server/usb/UsbDebuggingManager$UsbDebuggingThread;->openSocketLocked()V
+PLcom/android/server/usb/UsbDebuggingManager$UsbDebuggingThread;->run()V
+PLcom/android/server/usb/UsbDebuggingManager;->-get0(Lcom/android/server/usb/UsbDebuggingManager;)Z
+PLcom/android/server/usb/UsbDebuggingManager;->-get3(Lcom/android/server/usb/UsbDebuggingManager;)Lcom/android/server/usb/UsbDebuggingManager$UsbDebuggingThread;
+PLcom/android/server/usb/UsbDebuggingManager;->-set0(Lcom/android/server/usb/UsbDebuggingManager;Z)Z
+PLcom/android/server/usb/UsbDebuggingManager;->-set2(Lcom/android/server/usb/UsbDebuggingManager;Lcom/android/server/usb/UsbDebuggingManager$UsbDebuggingThread;)Lcom/android/server/usb/UsbDebuggingManager$UsbDebuggingThread;
+PLcom/android/server/usb/UsbDebuggingManager;-><init>(Landroid/content/Context;)V
+PLcom/android/server/usb/UsbDebuggingManager;->setAdbEnabled(Z)V
+PLcom/android/server/usb/UsbDeviceManager$1;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
+PLcom/android/server/usb/UsbDeviceManager$1;->onUEvent(Landroid/os/UEventObserver$UEvent;)V
+PLcom/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
+PLcom/android/server/usb/UsbDeviceManager$3;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
+PLcom/android/server/usb/UsbDeviceManager$4;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
+PLcom/android/server/usb/UsbDeviceManager$5;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
+PLcom/android/server/usb/UsbDeviceManager$AdbSettingsObserver;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;-><init>(Lcom/android/server/usb/UsbDeviceManager;Landroid/os/Looper;)V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->applyAdbFunction(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->getDefaultFunctions()Ljava/lang/String;
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isNormalBoot()Z
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isUsbStateChanged(Landroid/content/Intent;)Z
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isUsbTransferAllowed()Z
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->setEnabledFunctions(Ljava/lang/String;ZZ)V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->trySetEnabledFunctions(Ljava/lang/String;Z)Z
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateAdbNotification(Z)V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateAudioSourceFunction()V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateHostState(Landroid/hardware/usb/UsbPort;Landroid/hardware/usb/UsbPortStatus;)V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateMidiFunction()V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateState(Ljava/lang/String;)V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbFunctions()V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbStateBroadcastIfNeeded(Z)V
+PLcom/android/server/usb/UsbDeviceManager;->-get1(Lcom/android/server/usb/UsbDeviceManager;)Z
+PLcom/android/server/usb/UsbDeviceManager;->-get10(Lcom/android/server/usb/UsbDeviceManager;)I
+PLcom/android/server/usb/UsbDeviceManager;->-get11(Lcom/android/server/usb/UsbDeviceManager;)Z
+PLcom/android/server/usb/UsbDeviceManager;->-get12(Lcom/android/server/usb/UsbDeviceManager;)Landroid/app/NotificationManager;
+PLcom/android/server/usb/UsbDeviceManager;->-get13(Lcom/android/server/usb/UsbDeviceManager;)Z
+PLcom/android/server/usb/UsbDeviceManager;->-get15(Lcom/android/server/usb/UsbDeviceManager;)Landroid/os/UEventObserver;
+PLcom/android/server/usb/UsbDeviceManager;->-get16(Lcom/android/server/usb/UsbDeviceManager;)Lcom/android/server/usb/UsbAlsaManager;
+PLcom/android/server/usb/UsbDeviceManager;->-get17(Lcom/android/server/usb/UsbDeviceManager;)Z
+PLcom/android/server/usb/UsbDeviceManager;->-get2(Lcom/android/server/usb/UsbDeviceManager;)Z
+PLcom/android/server/usb/UsbDeviceManager;->-get3(Lcom/android/server/usb/UsbDeviceManager;)Z
+PLcom/android/server/usb/UsbDeviceManager;->-get4(Lcom/android/server/usb/UsbDeviceManager;)Landroid/content/Intent;
+PLcom/android/server/usb/UsbDeviceManager;->-get5(Lcom/android/server/usb/UsbDeviceManager;)Landroid/content/ContentResolver;
+PLcom/android/server/usb/UsbDeviceManager;->-get6(Lcom/android/server/usb/UsbDeviceManager;)Landroid/content/Context;
+PLcom/android/server/usb/UsbDeviceManager;->-get7(Lcom/android/server/usb/UsbDeviceManager;)Lcom/android/server/usb/UsbDebuggingManager;
+PLcom/android/server/usb/UsbDeviceManager;->-get8(Lcom/android/server/usb/UsbDeviceManager;)Lcom/android/server/usb/UsbDeviceManager$UsbHandler;
+PLcom/android/server/usb/UsbDeviceManager;->-get9(Lcom/android/server/usb/UsbDeviceManager;)I
+PLcom/android/server/usb/UsbDeviceManager;->-set1(Lcom/android/server/usb/UsbDeviceManager;Z)Z
+PLcom/android/server/usb/UsbDeviceManager;->-set3(Lcom/android/server/usb/UsbDeviceManager;Z)Z
+PLcom/android/server/usb/UsbDeviceManager;->-set4(Lcom/android/server/usb/UsbDeviceManager;Landroid/content/Intent;)Landroid/content/Intent;
+PLcom/android/server/usb/UsbDeviceManager;->-set8(Lcom/android/server/usb/UsbDeviceManager;Z)Z
+PLcom/android/server/usb/UsbDeviceManager;->-wrap1(Lcom/android/server/usb/UsbDeviceManager;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/usb/UsbDeviceManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbAlsaManager;Lcom/android/server/usb/UsbSettingsManager;)V
+PLcom/android/server/usb/UsbDeviceManager;->applyOemOverrideFunction(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/usb/UsbDeviceManager;->bootCompleted()V
+PLcom/android/server/usb/UsbDeviceManager;->getPersistProp(Z)Ljava/lang/String;
+PLcom/android/server/usb/UsbDeviceManager;->initRndisAddress()V
+PLcom/android/server/usb/UsbDeviceManager;->isTv()Z
+PLcom/android/server/usb/UsbDeviceManager;->readOemUsbOverrideConfig()V
+PLcom/android/server/usb/UsbDeviceManager;->setCurrentUser(ILcom/android/server/usb/UsbProfileGroupSettingsManager;)V
+PLcom/android/server/usb/UsbDeviceManager;->systemReady()V
+PLcom/android/server/usb/UsbDeviceManager;->updateUserRestrictions()V
+PLcom/android/server/usb/UsbHostManager;->-com_android_server_usb_UsbHostManager-mthref-0()V
+PLcom/android/server/usb/UsbHostManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbAlsaManager;Lcom/android/server/usb/UsbSettingsManager;)V
+PLcom/android/server/usb/UsbHostManager;->getDeviceList(Landroid/os/Bundle;)V
+PLcom/android/server/usb/UsbHostManager;->setCurrentUserSettings(Lcom/android/server/usb/UsbProfileGroupSettingsManager;)V
+PLcom/android/server/usb/UsbHostManager;->setUsbDeviceConnectionHandler(Landroid/content/ComponentName;)V
+PLcom/android/server/usb/UsbHostManager;->systemReady()V
+PLcom/android/server/usb/UsbPortManager$1;-><init>(Lcom/android/server/usb/UsbPortManager;Landroid/os/Looper;)V
+PLcom/android/server/usb/UsbPortManager$1;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/usb/UsbPortManager$DeathRecipient;-><init>(Lcom/android/server/usb/UsbPortManager;Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/usb/UsbPortManager$HALCallback;-><init>(Lcom/android/internal/util/IndentingPrintWriter;Lcom/android/server/usb/UsbPortManager;)V
+PLcom/android/server/usb/UsbPortManager$HALCallback;->notifyPortStatusChange_1_1(Ljava/util/ArrayList;I)V
+PLcom/android/server/usb/UsbPortManager$PortInfo;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/usb/UsbPortManager$PortInfo;->setStatus(IZIZIZI)Z
+PLcom/android/server/usb/UsbPortManager$PortInfo;->toString()Ljava/lang/String;
+PLcom/android/server/usb/UsbPortManager$RawPortInfo$1;-><init>()V
+PLcom/android/server/usb/UsbPortManager$RawPortInfo;-><init>(Ljava/lang/String;IIZIZIZ)V
+PLcom/android/server/usb/UsbPortManager$ServiceNotification;-><init>(Lcom/android/server/usb/UsbPortManager;)V
+PLcom/android/server/usb/UsbPortManager$ServiceNotification;->onRegistration(Ljava/lang/String;Ljava/lang/String;Z)V
+PLcom/android/server/usb/UsbPortManager;->-get0(Lcom/android/server/usb/UsbPortManager;)Landroid/os/Handler;
+PLcom/android/server/usb/UsbPortManager;->-get1(Lcom/android/server/usb/UsbPortManager;)Ljava/lang/Object;
+PLcom/android/server/usb/UsbPortManager;->-get2(Lcom/android/server/usb/UsbPortManager;)Z
+PLcom/android/server/usb/UsbPortManager;->-wrap0(Lcom/android/server/usb/UsbPortManager;Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/usb/UsbPortManager;->-wrap1(ILcom/android/internal/util/IndentingPrintWriter;Ljava/lang/String;)V
+PLcom/android/server/usb/UsbPortManager;->-wrap2(Lcom/android/server/usb/UsbPortManager;Lcom/android/internal/util/IndentingPrintWriter;Ljava/util/ArrayList;)V
+PLcom/android/server/usb/UsbPortManager;-><init>(Landroid/content/Context;)V
+PLcom/android/server/usb/UsbPortManager;->addOrUpdatePortLocked(Ljava/lang/String;IIZIZIZLcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/usb/UsbPortManager;->connectToProxy(Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/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
+PLcom/android/server/usb/UsbPortManager;->lambda$-com_android_server_usb_UsbPortManager_30586(Landroid/content/Intent;)V
+PLcom/android/server/usb/UsbPortManager;->logAndPrint(ILcom/android/internal/util/IndentingPrintWriter;Ljava/lang/String;)V
+PLcom/android/server/usb/UsbPortManager;->sendPortChangedBroadcastLocked(Lcom/android/server/usb/UsbPortManager$PortInfo;)V
+PLcom/android/server/usb/UsbPortManager;->systemReady()V
+PLcom/android/server/usb/UsbPortManager;->updatePortsLocked(Lcom/android/internal/util/IndentingPrintWriter;Ljava/util/ArrayList;)V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager$MyPackageMonitor;-><init>(Lcom/android/server/usb/UsbProfileGroupSettingsManager;)V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager$MyPackageMonitor;-><init>(Lcom/android/server/usb/UsbProfileGroupSettingsManager;Lcom/android/server/usb/UsbProfileGroupSettingsManager$MyPackageMonitor;)V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;-><init>(Landroid/content/Context;Landroid/os/UserHandle;Lcom/android/server/usb/UsbSettingsManager;)V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->readSettingsLocked()V
+PLcom/android/server/usb/UsbProfileGroupSettingsManager;->upgradeSingleUserLocked()V
+PLcom/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
+PLcom/android/server/usb/UsbService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/usb/UsbService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/usb/UsbService$Lifecycle;->onStart()V
+PLcom/android/server/usb/UsbService;->-get0(Lcom/android/server/usb/UsbService;)Lcom/android/server/usb/UsbDeviceManager;
+PLcom/android/server/usb/UsbService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/usb/UsbService;->bootCompleted()V
+PLcom/android/server/usb/UsbService;->getDeviceList(Landroid/os/Bundle;)V
+PLcom/android/server/usb/UsbService;->onSwitchUser(I)V
+PLcom/android/server/usb/UsbService;->systemReady()V
+PLcom/android/server/usb/UsbSettingsManager;-><init>(Landroid/content/Context;)V
+PLcom/android/server/usb/UsbSettingsManager;->getSettingsForProfileGroup(Landroid/os/UserHandle;)Lcom/android/server/usb/UsbProfileGroupSettingsManager;
+PLcom/android/server/voiceinteraction/DatabaseHelper;-><init>(Landroid/content/Context;)V
+PLcom/android/server/voiceinteraction/DatabaseHelper;->getKeyphraseSoundModel(IILjava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$1;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$LocalService;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$1;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$1;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$1;->onPackageModified(Ljava/lang/String;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$1;->onSomePackagesChanged()V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$SettingsObserver;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;Landroid/os/Handler;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->-get0(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;)I
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->activeServiceSupportsAssist()Z
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->activeServiceSupportsLaunchFromKeyguard()Z
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->enforceCallingPermission(Ljava/lang/String;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getActiveServiceComponentName()Landroid/content/ComponentName;
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getCurAssistant(I)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;
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getDspModuleProperties(Landroid/service/voice/IVoiceInteractionService;)Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getForceVoiceInteractionServicePackage(Landroid/content/res/Resources;)Ljava/lang/String;
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->initForUser(I)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->isEnrolledForKeyphrase(Landroid/service/voice/IVoiceInteractionService;ILjava/lang/String;)Z
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->onLockscreenShown()V
+PLcom/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;->shouldEnableService(Landroid/content/Context;)Z
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->switchImplementationIfNeeded(Z)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->switchImplementationIfNeededLocked(Z)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->systemRunning(Z)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->unloadAllKeyphraseModels()V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->-get1(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)Landroid/os/RemoteCallbackList;
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->onBootPhase(I)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->onStart()V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->onStartUser(I)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->onUnlockUser(I)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
+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;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;ILandroid/content/ComponentName;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->startLocked()V
+PLcom/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
+PLcom/android/server/vr/EnabledComponentsObserver$1;->onPackageModified(Ljava/lang/String;)V
+PLcom/android/server/vr/EnabledComponentsObserver$1;->onSomePackagesChanged()V
+PLcom/android/server/vr/EnabledComponentsObserver;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;Ljava/util/Collection;)V
+PLcom/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;
+PLcom/android/server/vr/EnabledComponentsObserver;->getCurrentProfileIds()[I
+PLcom/android/server/vr/EnabledComponentsObserver;->getEnabled(I)Landroid/util/ArraySet;
+PLcom/android/server/vr/EnabledComponentsObserver;->isValid(Landroid/content/ComponentName;I)I
+PLcom/android/server/vr/EnabledComponentsObserver;->loadComponentNamesForUser(I)Landroid/util/ArraySet;
+PLcom/android/server/vr/EnabledComponentsObserver;->onPackagesChanged()V
+PLcom/android/server/vr/EnabledComponentsObserver;->onUsersChanged()V
+PLcom/android/server/vr/SettingsObserver$1;-><init>(Lcom/android/server/vr/SettingsObserver;Ljava/lang/String;)V
+PLcom/android/server/vr/SettingsObserver$2;-><init>(Lcom/android/server/vr/SettingsObserver;Landroid/os/Handler;Landroid/net/Uri;)V
+PLcom/android/server/vr/SettingsObserver;-><init>(Landroid/content/Context;Landroid/os/Handler;Landroid/net/Uri;Ljava/lang/String;)V
+PLcom/android/server/vr/SettingsObserver;->addListener(Lcom/android/server/vr/SettingsObserver$SettingChangeListener;)V
+PLcom/android/server/vr/SettingsObserver;->build(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/String;)Lcom/android/server/vr/SettingsObserver;
+PLcom/android/server/vr/Vr2dDisplay$1;-><init>(Lcom/android/server/vr/Vr2dDisplay;)V
+PLcom/android/server/vr/Vr2dDisplay;-><init>(Landroid/hardware/display/DisplayManager;Landroid/app/ActivityManagerInternal;Landroid/view/WindowManagerInternal;Landroid/service/vr/IVrManager;)V
+PLcom/android/server/vr/Vr2dDisplay;->init(Landroid/content/Context;Z)V
+PLcom/android/server/vr/Vr2dDisplay;->startDebugOnlyBroadcastReceiver(Landroid/content/Context;)V
+PLcom/android/server/vr/Vr2dDisplay;->startVrModeListener()V
+PLcom/android/server/vr/VrManagerInternal;-><init>()V
+PLcom/android/server/vr/VrManagerService$1;-><init>(Lcom/android/server/vr/VrManagerService;)V
+PLcom/android/server/vr/VrManagerService$2;-><init>()V
+PLcom/android/server/vr/VrManagerService$3;-><init>(Lcom/android/server/vr/VrManagerService;)V
+PLcom/android/server/vr/VrManagerService$3;->getVrModeState()Z
+PLcom/android/server/vr/VrManagerService$3;->registerListener(Landroid/service/vr/IVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService$3;->registerPersistentVrStateListener(Landroid/service/vr/IPersistentVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService$3;->unregisterListener(Landroid/service/vr/IVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService$4;-><init>(Lcom/android/server/vr/VrManagerService;)V
+PLcom/android/server/vr/VrManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/vr/VrManagerService$LocalService;-><init>(Lcom/android/server/vr/VrManagerService;)V
+PLcom/android/server/vr/VrManagerService$LocalService;-><init>(Lcom/android/server/vr/VrManagerService;Lcom/android/server/vr/VrManagerService$LocalService;)V
+PLcom/android/server/vr/VrManagerService$LocalService;->addPersistentVrModeStateListener(Landroid/service/vr/IPersistentVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService$LocalService;->isCurrentVrListener(Ljava/lang/String;I)Z
+PLcom/android/server/vr/VrManagerService$LocalService;->onScreenStateChanged(Z)V
+PLcom/android/server/vr/VrManagerService$LocalService;->onSleepStateChanged(Z)V
+PLcom/android/server/vr/VrManagerService$LocalService;->setVrMode(ZLandroid/content/ComponentName;IILandroid/content/ComponentName;)V
+PLcom/android/server/vr/VrManagerService$NotificationAccessManager;-><init>(Lcom/android/server/vr/VrManagerService;)V
+PLcom/android/server/vr/VrManagerService$NotificationAccessManager;-><init>(Lcom/android/server/vr/VrManagerService;Lcom/android/server/vr/VrManagerService$NotificationAccessManager;)V
+PLcom/android/server/vr/VrManagerService;->-wrap1(Lcom/android/server/vr/VrManagerService;)Z
+PLcom/android/server/vr/VrManagerService;->-wrap10(Lcom/android/server/vr/VrManagerService;Ljava/lang/String;I)V
+PLcom/android/server/vr/VrManagerService;->-wrap11(Lcom/android/server/vr/VrManagerService;Ljava/lang/String;I)V
+PLcom/android/server/vr/VrManagerService;->-wrap12(Lcom/android/server/vr/VrManagerService;Ljava/lang/String;)V
+PLcom/android/server/vr/VrManagerService;->-wrap14(Lcom/android/server/vr/VrManagerService;Landroid/service/vr/IVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService;->-wrap19(Lcom/android/server/vr/VrManagerService;Z)V
+PLcom/android/server/vr/VrManagerService;->-wrap2(Lcom/android/server/vr/VrManagerService;Ljava/lang/String;I)Z
+PLcom/android/server/vr/VrManagerService;->-wrap20(Lcom/android/server/vr/VrManagerService;Z)V
+PLcom/android/server/vr/VrManagerService;->-wrap21(Lcom/android/server/vr/VrManagerService;)V
+PLcom/android/server/vr/VrManagerService;->-wrap22(Lcom/android/server/vr/VrManagerService;ZLandroid/content/ComponentName;IILandroid/content/ComponentName;)V
+PLcom/android/server/vr/VrManagerService;->-wrap5(Lcom/android/server/vr/VrManagerService;Landroid/service/vr/IPersistentVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService;->-wrap6(Lcom/android/server/vr/VrManagerService;Landroid/service/vr/IVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService;->-wrap9(Lcom/android/server/vr/VrManagerService;[Ljava/lang/String;)V
+PLcom/android/server/vr/VrManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/vr/VrManagerService;->addPersistentStateCallback(Landroid/service/vr/IPersistentVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService;->addStateCallback(Landroid/service/vr/IVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService;->consumeAndApplyPendingStateLocked()V
+PLcom/android/server/vr/VrManagerService;->consumeAndApplyPendingStateLocked(Z)V
+PLcom/android/server/vr/VrManagerService;->enforceCallerPermissionAnyOf([Ljava/lang/String;)V
+PLcom/android/server/vr/VrManagerService;->getVrMode()Z
+PLcom/android/server/vr/VrManagerService;->grantCoarseLocationPermissionIfNeeded(Ljava/lang/String;I)V
+PLcom/android/server/vr/VrManagerService;->grantNotificationListenerAccess(Ljava/lang/String;I)V
+PLcom/android/server/vr/VrManagerService;->grantNotificationPolicyAccess(Ljava/lang/String;)V
+PLcom/android/server/vr/VrManagerService;->isCurrentVrListener(Ljava/lang/String;I)Z
+PLcom/android/server/vr/VrManagerService;->isPermissionUserUpdated(Ljava/lang/String;Ljava/lang/String;I)Z
+PLcom/android/server/vr/VrManagerService;->onBootPhase(I)V
+PLcom/android/server/vr/VrManagerService;->onStart()V
+PLcom/android/server/vr/VrManagerService;->onStartUser(I)V
+PLcom/android/server/vr/VrManagerService;->removeStateCallback(Landroid/service/vr/IVrStateCallbacks;)V
+PLcom/android/server/vr/VrManagerService;->setScreenOn(Z)V
+PLcom/android/server/vr/VrManagerService;->setSleepState(Z)V
+PLcom/android/server/vr/VrManagerService;->setUserUnlocked()V
+PLcom/android/server/vr/VrManagerService;->updateVrModeAllowedLocked()V
+PLcom/android/server/wallpaper/-$Lambda$ZWcNEw3ZwVVSi_pP2mGGLvztkS0;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$1;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$2;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$3;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$4;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;I)V
+PLcom/android/server/wallpaper/WallpaperManagerService$4;->run()V
+PLcom/android/server/wallpaper/WallpaperManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$Lifecycle;->onBootPhase(I)V
+PLcom/android/server/wallpaper/WallpaperManagerService$Lifecycle;->onStart()V
+PLcom/android/server/wallpaper/WallpaperManagerService$Lifecycle;->onUnlockUser(I)V
+PLcom/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;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+PLcom/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
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;Landroid/app/WallpaperInfo;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->attachEngine(Landroid/service/wallpaper/IWallpaperEngine;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->engineShown(Landroid/service/wallpaper/IWallpaperEngine;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->onWallpaperColorsChanged(Landroid/app/WallpaperColors;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;-><init>(ILjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;->cropExists()Z
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;->sourceExists()Z
+PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperObserver;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->-wrap0(I)Ljava/io/File;
+PLcom/android/server/wallpaper/WallpaperManagerService;->-wrap4(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->-wrap5(Lcom/android/server/wallpaper/WallpaperManagerService;I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->attachServiceLocked(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->bindWallpaperComponentLocked(Landroid/content/ComponentName;ZZLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Landroid/os/IRemoteCallback;)Z
+PLcom/android/server/wallpaper/WallpaperManagerService;->checkPermission(Ljava/lang/String;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->emptyCallbackList(Landroid/os/RemoteCallbackList;)Z
+PLcom/android/server/wallpaper/WallpaperManagerService;->enforceCallingOrSelfPermissionAndAppOp(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->ensureSaneWallpaperData(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->getAttributeInt(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
+PLcom/android/server/wallpaper/WallpaperManagerService;->getHeightHint()I
+PLcom/android/server/wallpaper/WallpaperManagerService;->getMaximumSizeDimension()I
+PLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaper(Ljava/lang/String;Landroid/app/IWallpaperManagerCallback;ILandroid/os/Bundle;I)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaperColors(II)Landroid/app/WallpaperColors;
+PLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaperDir(I)Ljava/io/File;
+PLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaperInfo(I)Landroid/app/WallpaperInfo;
+PLcom/android/server/wallpaper/WallpaperManagerService;->getWallpaperSafeLocked(II)Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;
+PLcom/android/server/wallpaper/WallpaperManagerService;->getWidthHint()I
+PLcom/android/server/wallpaper/WallpaperManagerService;->isWallpaperSupported(Ljava/lang/String;)Z
+PLcom/android/server/wallpaper/WallpaperManagerService;->loadSettingsLocked(IZ)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->makeJournaledFile(I)Lcom/android/internal/util/JournaledFile;
+PLcom/android/server/wallpaper/WallpaperManagerService;->migrateFromOld()V
+PLcom/android/server/wallpaper/WallpaperManagerService;->notifyWallpaperColorsChanged(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->onUnlockUser(I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->parseWallpaperAttributes(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Z)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->registerWallpaperColorsCallback(Landroid/app/IWallpaperManagerCallback;I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->saveSettingsLocked(I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->setLockWallpaperCallback(Landroid/app/IWallpaperManagerCallback;)Z
+PLcom/android/server/wallpaper/WallpaperManagerService;->switchUser(ILandroid/os/IRemoteCallback;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->switchWallpaper(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Landroid/os/IRemoteCallback;)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->systemReady()V
+PLcom/android/server/wallpaper/WallpaperManagerService;->unregisterWallpaperColorsCallback(Landroid/app/IWallpaperManagerCallback;I)V
+PLcom/android/server/wallpaper/WallpaperManagerService;->writeWallpaperAttributes(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+PLcom/android/server/webkit/SystemImpl$LazyHolder;->-get0()Lcom/android/server/webkit/SystemImpl;
+PLcom/android/server/webkit/SystemImpl;-><init>()V
+PLcom/android/server/webkit/SystemImpl;-><init>(Lcom/android/server/webkit/SystemImpl;)V
+PLcom/android/server/webkit/SystemImpl;->getFactoryPackageVersion(Ljava/lang/String;)I
+PLcom/android/server/webkit/SystemImpl;->getInstance()Lcom/android/server/webkit/SystemImpl;
+PLcom/android/server/webkit/SystemImpl;->getMultiProcessSetting(Landroid/content/Context;)I
+PLcom/android/server/webkit/SystemImpl;->getPackageInfoForProvider(Landroid/webkit/WebViewProviderInfo;)Landroid/content/pm/PackageInfo;
+PLcom/android/server/webkit/SystemImpl;->getPackageInfoForProviderAllUsers(Landroid/content/Context;Landroid/webkit/WebViewProviderInfo;)Ljava/util/List;
+PLcom/android/server/webkit/SystemImpl;->getUserChosenWebViewProvider(Landroid/content/Context;)Ljava/lang/String;
+PLcom/android/server/webkit/SystemImpl;->getWebViewPackages()[Landroid/webkit/WebViewProviderInfo;
+PLcom/android/server/webkit/SystemImpl;->isFallbackLogicEnabled()Z
+PLcom/android/server/webkit/SystemImpl;->isMultiProcessDefaultEnabled()Z
+PLcom/android/server/webkit/SystemImpl;->notifyZygote(Z)V
+PLcom/android/server/webkit/SystemImpl;->onWebViewProviderChanged(Landroid/content/pm/PackageInfo;)I
+PLcom/android/server/webkit/SystemImpl;->readSignatures(Landroid/content/res/XmlResourceParser;)[Ljava/lang/String;
+PLcom/android/server/webkit/SystemImpl;->systemIsDebuggable()Z
+PLcom/android/server/webkit/SystemImpl;->updateUserSetting(Landroid/content/Context;Ljava/lang/String;)V
+PLcom/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
+PLcom/android/server/webkit/WebViewUpdateService$BinderService;-><init>(Lcom/android/server/webkit/WebViewUpdateService;)V
+PLcom/android/server/webkit/WebViewUpdateService$BinderService;-><init>(Lcom/android/server/webkit/WebViewUpdateService;Lcom/android/server/webkit/WebViewUpdateService$BinderService;)V
+PLcom/android/server/webkit/WebViewUpdateService$BinderService;->isMultiProcessEnabled()Z
+PLcom/android/server/webkit/WebViewUpdateService$BinderService;->notifyRelroCreationCompleted()V
+PLcom/android/server/webkit/WebViewUpdateService$BinderService;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;
+PLcom/android/server/webkit/WebViewUpdateService;->-get0(Lcom/android/server/webkit/WebViewUpdateService;)Lcom/android/server/webkit/WebViewUpdateServiceImpl;
+PLcom/android/server/webkit/WebViewUpdateService;->-wrap0(Landroid/content/Intent;)Ljava/lang/String;
+PLcom/android/server/webkit/WebViewUpdateService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/webkit/WebViewUpdateService;->onStart()V
+PLcom/android/server/webkit/WebViewUpdateService;->packageNameFromIntent(Landroid/content/Intent;)Ljava/lang/String;
+PLcom/android/server/webkit/WebViewUpdateService;->prepareWebViewInSystemServer()V
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;-><init>(Landroid/content/Context;Lcom/android/server/webkit/SystemInterface;)V
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->existsValidNonFallbackProvider([Landroid/webkit/WebViewProviderInfo;)Z
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->getFallbackProvider([Landroid/webkit/WebViewProviderInfo;)Landroid/webkit/WebViewProviderInfo;
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->getWebViewPackages()[Landroid/webkit/WebViewProviderInfo;
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->handleNewUser(I)V
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->isDisabledForAllUsers(Ljava/util/List;)Z
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->isMultiProcessEnabled()Z
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->notifyRelroCreationCompleted()V
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->packageStateChanged(Ljava/lang/String;II)V
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->prepareWebViewInSystemServer()V
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->updateFallbackState([Landroid/webkit/WebViewProviderInfo;)V
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->updateFallbackStateOnBoot()V
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->updateFallbackStateOnPackageChange(Ljava/lang/String;I)V
+PLcom/android/server/webkit/WebViewUpdateServiceImpl;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;
+PLcom/android/server/webkit/WebViewUpdater$ProviderAndPackageInfo;-><init>(Landroid/webkit/WebViewProviderInfo;Landroid/content/pm/PackageInfo;)V
+PLcom/android/server/webkit/WebViewUpdater;-><init>(Landroid/content/Context;Lcom/android/server/webkit/SystemInterface;)V
+PLcom/android/server/webkit/WebViewUpdater;->checkIfRelrosDoneLocked()V
+PLcom/android/server/webkit/WebViewUpdater;->findPreferredWebViewPackage()Landroid/content/pm/PackageInfo;
+PLcom/android/server/webkit/WebViewUpdater;->getMinimumVersionCode()I
+PLcom/android/server/webkit/WebViewUpdater;->getValidWebViewPackagesAndInfos()[Lcom/android/server/webkit/WebViewUpdater$ProviderAndPackageInfo;
+PLcom/android/server/webkit/WebViewUpdater;->isInstalledAndEnabledForAllUsers(Ljava/util/List;)Z
+PLcom/android/server/webkit/WebViewUpdater;->isValidProvider(Landroid/webkit/WebViewProviderInfo;Landroid/content/pm/PackageInfo;)Z
+PLcom/android/server/webkit/WebViewUpdater;->notifyRelroCreationCompleted()V
+PLcom/android/server/webkit/WebViewUpdater;->onWebViewProviderChanged(Landroid/content/pm/PackageInfo;)V
+PLcom/android/server/webkit/WebViewUpdater;->packageStateChanged(Ljava/lang/String;I)V
+PLcom/android/server/webkit/WebViewUpdater;->prepareWebViewInSystemServer()V
+PLcom/android/server/webkit/WebViewUpdater;->providerHasValidSignature(Landroid/webkit/WebViewProviderInfo;Landroid/content/pm/PackageInfo;Lcom/android/server/webkit/SystemInterface;)Z
+PLcom/android/server/webkit/WebViewUpdater;->validityResult(Landroid/webkit/WebViewProviderInfo;Landroid/content/pm/PackageInfo;)I
+PLcom/android/server/webkit/WebViewUpdater;->versionCodeGE(II)Z
+PLcom/android/server/webkit/WebViewUpdater;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;
+PLcom/android/server/webkit/WebViewUpdater;->webViewIsReadyLocked()Z
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$10;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;I)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$10;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$10;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;I)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$13;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaBackgroundScanCapabilities;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$13;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$13;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaBackgroundScanCapabilities;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$14;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$14;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$14;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$15;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$15;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$15;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$16;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaRoamingCapabilities;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$16;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$16;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaRoamingCapabilities;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$2;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;I)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$2;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$2;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;I)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$3;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonStats;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$3;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$3;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonStats;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$4;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$4;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$4;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$9;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaApfPacketFilterCapabilities;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$9;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA$9;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaApfPacketFilterCapabilities;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiChip$ChipDebugInfo;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$-8OLNNnyamdUDQS-yMRzScsmdRA;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiChip$ChipDebugInfo;)V
+PLcom/android/server/wifi/-$Lambda$RPzhR64WIMgTSfYC8KVwFhmhzoc;->$m$0()V
+PLcom/android/server/wifi/-$Lambda$RPzhR64WIMgTSfYC8KVwFhmhzoc;-><init>(ILjava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$RPzhR64WIMgTSfYC8KVwFhmhzoc;->binderDied()V
+PLcom/android/server/wifi/-$Lambda$YuIVlKWZZmb4gGMvJqVJEVQ4abs;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8$1;->$m$0(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8$1;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8$1;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8$2;->$m$0(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Landroid/hardware/wifi/supplicant/V1_0/ISupplicantNetwork;)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8$2;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8$2;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Landroid/hardware/wifi/supplicant/V1_0/ISupplicantNetwork;)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8$4;->$m$0(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8$4;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8$4;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8$5;->$m$0(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;[B)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8$5;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8$5;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;[B)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8;->$m$0(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Landroid/hardware/wifi/supplicant/V1_0/ISupplicantIface;)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$fnayIWgoPf1mYwUZ1jv9XAubNu8;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Landroid/hardware/wifi/supplicant/V1_0/ISupplicantIface;)V
+PLcom/android/server/wifi/-$Lambda$lKwQPnSIRFCOpiR3PrChpeYqVrQ;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$10;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$10;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$10;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$12;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$12;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$12;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$13;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$13;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$13;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$14;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$14;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$14;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$15;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;I)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$15;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$15;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;I)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$19;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiStaIface;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$19;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$19;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiStaIface;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$1;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/lang/String;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$1;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$1;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/lang/String;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$3;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiChip;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$3;-><init>(BLjava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$3;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiChip;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$4;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$4;-><init>(BLjava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$4;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$8;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiStaIface;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$8;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$8;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiStaIface;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$9;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$9;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k$9;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k;->$m$0(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiRttController;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/wifi/-$Lambda$zRsSIzbfvkJSErD1TWUPvfb3F7k;->onValues(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiRttController;)V
+PLcom/android/server/wifi/AggressiveConnectedScore;-><init>(Landroid/content/Context;Lcom/android/server/wifi/Clock;)V
+PLcom/android/server/wifi/AggressiveConnectedScore;->reset()V
+PLcom/android/server/wifi/BackupManagerProxy;-><init>()V
+PLcom/android/server/wifi/BaseWifiDiagnostics;-><init>(Lcom/android/server/wifi/WifiNative;)V
+PLcom/android/server/wifi/BaseWifiDiagnostics;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/wifi/ByteBufferReader;->readInteger(Ljava/nio/ByteBuffer;Ljava/nio/ByteOrder;I)J
+PLcom/android/server/wifi/CarrierNetworkConfig$1;-><init>(Lcom/android/server/wifi/CarrierNetworkConfig;)V
+PLcom/android/server/wifi/CarrierNetworkConfig;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wifi/CarrierNetworkConfig;->updateNetworkConfig(Landroid/content/Context;)V
+PLcom/android/server/wifi/Clock;-><init>()V
+PLcom/android/server/wifi/ConfigurationMap;-><init>(Landroid/os/UserManager;)V
+PLcom/android/server/wifi/ConfigurationMap;->clear()V
+PLcom/android/server/wifi/ConfigurationMap;->put(Landroid/net/wifi/WifiConfiguration;)Landroid/net/wifi/WifiConfiguration;
+PLcom/android/server/wifi/ConfigurationMap;->sizeForAllUsers()I
+PLcom/android/server/wifi/ConfigurationMap;->valuesForAllUsers()Ljava/util/Collection;
+PLcom/android/server/wifi/ConnectedScore;-><init>(Lcom/android/server/wifi/Clock;)V
+PLcom/android/server/wifi/DeletedEphemeralSsidsStoreData;-><init>()V
+PLcom/android/server/wifi/DeletedEphemeralSsidsStoreData;->deserializeData(Lorg/xmlpull/v1/XmlPullParser;IZ)V
+PLcom/android/server/wifi/DeletedEphemeralSsidsStoreData;->getName()Ljava/lang/String;
+PLcom/android/server/wifi/DeletedEphemeralSsidsStoreData;->getSsidList()Ljava/util/Set;
+PLcom/android/server/wifi/DeletedEphemeralSsidsStoreData;->resetData(Z)V
+PLcom/android/server/wifi/DeletedEphemeralSsidsStoreData;->serializeData(Lorg/xmlpull/v1/XmlSerializer;Z)V
+PLcom/android/server/wifi/DeletedEphemeralSsidsStoreData;->setSsidList(Ljava/util/Set;)V
+PLcom/android/server/wifi/DeletedEphemeralSsidsStoreData;->supportShareData()Z
+PLcom/android/server/wifi/DummyLogMessage;-><init>()V
+PLcom/android/server/wifi/DummyLogMessage;->c(Ljava/lang/String;)Lcom/android/server/wifi/WifiLog$LogMessage;
+PLcom/android/server/wifi/DummyLogMessage;->c(Z)Lcom/android/server/wifi/WifiLog$LogMessage;
+PLcom/android/server/wifi/FakeWifiLog;-><init>()V
+PLcom/android/server/wifi/FakeWifiLog;->i(Ljava/lang/String;)V
+PLcom/android/server/wifi/FrameworkFacade;-><init>()V
+PLcom/android/server/wifi/FrameworkFacade;->getBatteryService()Lcom/android/internal/app/IBatteryStats;
+PLcom/android/server/wifi/FrameworkFacade;->getBroadcast(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
+PLcom/android/server/wifi/FrameworkFacade;->getIntegerSetting(Landroid/content/Context;Ljava/lang/String;I)I
+PLcom/android/server/wifi/FrameworkFacade;->getLongSetting(Landroid/content/Context;Ljava/lang/String;J)J
+PLcom/android/server/wifi/FrameworkFacade;->getRxPackets(Ljava/lang/String;)J
+PLcom/android/server/wifi/FrameworkFacade;->getService(Ljava/lang/String;)Landroid/os/IBinder;
+PLcom/android/server/wifi/FrameworkFacade;->getStringSetting(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/wifi/FrameworkFacade;->getTxPackets(Ljava/lang/String;)J
+PLcom/android/server/wifi/FrameworkFacade;->inStorageManagerCryptKeeperBounce()Z
+PLcom/android/server/wifi/FrameworkFacade;->makeIpManager(Landroid/content/Context;Ljava/lang/String;Landroid/net/ip/IpManager$Callback;)Landroid/net/ip/IpManager;
+PLcom/android/server/wifi/FrameworkFacade;->makeSupplicantStateTracker(Landroid/content/Context;Lcom/android/server/wifi/WifiConfigManager;Landroid/os/Handler;)Lcom/android/server/wifi/SupplicantStateTracker;
+PLcom/android/server/wifi/FrameworkFacade;->makeWifiAsyncChannel(Ljava/lang/String;)Lcom/android/server/wifi/util/WifiAsyncChannel;
+PLcom/android/server/wifi/FrameworkFacade;->registerContentObserver(Landroid/content/Context;Landroid/net/Uri;ZLandroid/database/ContentObserver;)V
+PLcom/android/server/wifi/HalDeviceManager$1;-><init>(Lcom/android/server/wifi/HalDeviceManager;)V
+PLcom/android/server/wifi/HalDeviceManager$1;->onRegistration(Ljava/lang/String;Ljava/lang/String;Z)V
+PLcom/android/server/wifi/HalDeviceManager$IfaceCreationData;-><init>(Lcom/android/server/wifi/HalDeviceManager;)V
+PLcom/android/server/wifi/HalDeviceManager$IfaceCreationData;-><init>(Lcom/android/server/wifi/HalDeviceManager;Lcom/android/server/wifi/HalDeviceManager$IfaceCreationData;)V
+PLcom/android/server/wifi/HalDeviceManager$InterfaceCacheEntry;-><init>(Lcom/android/server/wifi/HalDeviceManager;)V
+PLcom/android/server/wifi/HalDeviceManager$InterfaceCacheEntry;-><init>(Lcom/android/server/wifi/HalDeviceManager;Lcom/android/server/wifi/HalDeviceManager$InterfaceCacheEntry;)V
+PLcom/android/server/wifi/HalDeviceManager$ListenerProxy$1;-><init>(Lcom/android/server/wifi/HalDeviceManager$ListenerProxy;Landroid/os/Looper;Ljava/lang/String;)V
+PLcom/android/server/wifi/HalDeviceManager$ListenerProxy$1;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/wifi/HalDeviceManager$ListenerProxy;-><init>(Lcom/android/server/wifi/HalDeviceManager;Ljava/lang/Object;Landroid/os/Looper;Ljava/lang/String;)V
+PLcom/android/server/wifi/HalDeviceManager$ListenerProxy;->hashCode()I
+PLcom/android/server/wifi/HalDeviceManager$ListenerProxy;->trigger()V
+PLcom/android/server/wifi/HalDeviceManager$ManagerStatusListenerProxy;-><init>(Lcom/android/server/wifi/HalDeviceManager;Lcom/android/server/wifi/HalDeviceManager$ManagerStatusListener;Landroid/os/Looper;)V
+PLcom/android/server/wifi/HalDeviceManager$ManagerStatusListenerProxy;->action()V
+PLcom/android/server/wifi/HalDeviceManager$WifiChipInfo;-><init>(Lcom/android/server/wifi/HalDeviceManager;)V
+PLcom/android/server/wifi/HalDeviceManager$WifiChipInfo;-><init>(Lcom/android/server/wifi/HalDeviceManager;Lcom/android/server/wifi/HalDeviceManager$WifiChipInfo;)V
+PLcom/android/server/wifi/HalDeviceManager$WifiEventCallback;-><init>(Lcom/android/server/wifi/HalDeviceManager;)V
+PLcom/android/server/wifi/HalDeviceManager$WifiEventCallback;-><init>(Lcom/android/server/wifi/HalDeviceManager;Lcom/android/server/wifi/HalDeviceManager$WifiEventCallback;)V
+PLcom/android/server/wifi/HalDeviceManager$WifiEventCallback;->onStart()V
+PLcom/android/server/wifi/HalDeviceManager$WifiEventCallback;->onStop()V
+PLcom/android/server/wifi/HalDeviceManager$WifiIfaceInfo;-><init>(Lcom/android/server/wifi/HalDeviceManager;)V
+PLcom/android/server/wifi/HalDeviceManager$WifiIfaceInfo;-><init>(Lcom/android/server/wifi/HalDeviceManager;Lcom/android/server/wifi/HalDeviceManager$WifiIfaceInfo;)V
+PLcom/android/server/wifi/HalDeviceManager;->-get0()[I
+PLcom/android/server/wifi/HalDeviceManager;->-get1(Lcom/android/server/wifi/HalDeviceManager;)Ljava/lang/Object;
+PLcom/android/server/wifi/HalDeviceManager;->-wrap1(Lcom/android/server/wifi/HalDeviceManager;)V
+PLcom/android/server/wifi/HalDeviceManager;-><init>()V
+PLcom/android/server/wifi/HalDeviceManager;->canIfaceComboSupportRequest(Lcom/android/server/wifi/HalDeviceManager$WifiChipInfo;Landroid/hardware/wifi/V1_0/IWifiChip$ChipMode;[II)Lcom/android/server/wifi/HalDeviceManager$IfaceCreationData;
+PLcom/android/server/wifi/HalDeviceManager;->compareIfaceCreationData(Lcom/android/server/wifi/HalDeviceManager$IfaceCreationData;Lcom/android/server/wifi/HalDeviceManager$IfaceCreationData;)Z
+PLcom/android/server/wifi/HalDeviceManager;->createIface(ILcom/android/server/wifi/HalDeviceManager$InterfaceDestroyedListener;Landroid/os/Looper;)Landroid/hardware/wifi/V1_0/IWifiIface;
+PLcom/android/server/wifi/HalDeviceManager;->createIfaceIfPossible([Lcom/android/server/wifi/HalDeviceManager$WifiChipInfo;ILcom/android/server/wifi/HalDeviceManager$InterfaceDestroyedListener;Landroid/os/Looper;)Landroid/hardware/wifi/V1_0/IWifiIface;
+PLcom/android/server/wifi/HalDeviceManager;->createRttController(Landroid/hardware/wifi/V1_0/IWifiIface;)Landroid/hardware/wifi/V1_0/IWifiRttController;
+PLcom/android/server/wifi/HalDeviceManager;->createStaIface(Lcom/android/server/wifi/HalDeviceManager$InterfaceDestroyedListener;Landroid/os/Looper;)Landroid/hardware/wifi/V1_0/IWifiStaIface;
+PLcom/android/server/wifi/HalDeviceManager;->dispatchAllDestroyedListeners()V
+PLcom/android/server/wifi/HalDeviceManager;->dispatchAvailableForRequestListeners()Z
+PLcom/android/server/wifi/HalDeviceManager;->dispatchAvailableForRequestListenersForType(I[Lcom/android/server/wifi/HalDeviceManager$WifiChipInfo;)V
+PLcom/android/server/wifi/HalDeviceManager;->executeChipReconfiguration(Lcom/android/server/wifi/HalDeviceManager$IfaceCreationData;I)Landroid/hardware/wifi/V1_0/IWifiIface;
+PLcom/android/server/wifi/HalDeviceManager;->expandIfaceCombos(Landroid/hardware/wifi/V1_0/IWifiChip$ChipIfaceCombination;)[[I
+PLcom/android/server/wifi/HalDeviceManager;->getChip(Landroid/hardware/wifi/V1_0/IWifiIface;)Landroid/hardware/wifi/V1_0/IWifiChip;
+PLcom/android/server/wifi/HalDeviceManager;->getName(Landroid/hardware/wifi/V1_0/IWifiIface;)Ljava/lang/String;
+PLcom/android/server/wifi/HalDeviceManager;->getServiceManagerMockable()Landroid/hidl/manager/V1_0/IServiceManager;
+PLcom/android/server/wifi/HalDeviceManager;->getSupportedIfaceTypes()Ljava/util/Set;
+PLcom/android/server/wifi/HalDeviceManager;->getWifiServiceMockable()Landroid/hardware/wifi/V1_0/IWifi;
+PLcom/android/server/wifi/HalDeviceManager;->initIServiceManagerIfNecessary()V
+PLcom/android/server/wifi/HalDeviceManager;->initIWifiChipDebugListeners()V
+PLcom/android/server/wifi/HalDeviceManager;->initIWifiIfNecessary()V
+PLcom/android/server/wifi/HalDeviceManager;->initialize()V
+PLcom/android/server/wifi/HalDeviceManager;->initializeInternal()V
+PLcom/android/server/wifi/HalDeviceManager;->isReady()Z
+PLcom/android/server/wifi/HalDeviceManager;->isStarted()Z
+PLcom/android/server/wifi/HalDeviceManager;->isSupported()Z
+PLcom/android/server/wifi/HalDeviceManager;->isSupportedInternal()Z
+PLcom/android/server/wifi/HalDeviceManager;->isWifiStarted()Z
+PLcom/android/server/wifi/HalDeviceManager;->lambda$-com_android_server_wifi_HalDeviceManager_13579(Lcom/android/server/wifi/HalDeviceManager$Mutable;Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/lang/String;)V
+PLcom/android/server/wifi/HalDeviceManager;->lambda$-com_android_server_wifi_HalDeviceManager_16055(Lcom/android/server/wifi/HalDeviceManager$Mutable;Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiRttController;)V
+PLcom/android/server/wifi/HalDeviceManager;->lambda$-com_android_server_wifi_HalDeviceManager_32182(Landroid/util/MutableBoolean;Lcom/android/server/wifi/HalDeviceManager$Mutable;Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/HalDeviceManager;->lambda$-com_android_server_wifi_HalDeviceManager_33181(Landroid/util/MutableBoolean;Lcom/android/server/wifi/HalDeviceManager$Mutable;Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiChip;)V
+PLcom/android/server/wifi/HalDeviceManager;->lambda$-com_android_server_wifi_HalDeviceManager_33847(Landroid/util/MutableBoolean;Lcom/android/server/wifi/HalDeviceManager$Mutable;Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/HalDeviceManager;->lambda$-com_android_server_wifi_HalDeviceManager_34628(Landroid/util/MutableBoolean;Landroid/util/MutableBoolean;Landroid/util/MutableInt;Landroid/hardware/wifi/V1_0/WifiStatus;I)V
+PLcom/android/server/wifi/HalDeviceManager;->lambda$-com_android_server_wifi_HalDeviceManager_35566(Landroid/util/MutableBoolean;Lcom/android/server/wifi/HalDeviceManager$Mutable;Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/HalDeviceManager;->lambda$-com_android_server_wifi_HalDeviceManager_36395(Landroid/util/MutableBoolean;Ljava/lang/String;[Lcom/android/server/wifi/HalDeviceManager$WifiIfaceInfo;Landroid/util/MutableInt;Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiStaIface;)V
+PLcom/android/server/wifi/HalDeviceManager;->lambda$-com_android_server_wifi_HalDeviceManager_37371(Landroid/util/MutableBoolean;Lcom/android/server/wifi/HalDeviceManager$Mutable;Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/HalDeviceManager;->lambda$-com_android_server_wifi_HalDeviceManager_39171(Landroid/util/MutableBoolean;Lcom/android/server/wifi/HalDeviceManager$Mutable;Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/HalDeviceManager;->lambda$-com_android_server_wifi_HalDeviceManager_40977(Landroid/util/MutableBoolean;Lcom/android/server/wifi/HalDeviceManager$Mutable;Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/HalDeviceManager;->lambda$-com_android_server_wifi_HalDeviceManager_68871(Lcom/android/server/wifi/HalDeviceManager$Mutable;Lcom/android/server/wifi/HalDeviceManager$Mutable;Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiStaIface;)V
+PLcom/android/server/wifi/HalDeviceManager;->managerStatusListenerDispatch()V
+PLcom/android/server/wifi/HalDeviceManager;->registerStatusListener(Lcom/android/server/wifi/HalDeviceManager$ManagerStatusListener;Landroid/os/Looper;)V
+PLcom/android/server/wifi/HalDeviceManager;->start()Z
+PLcom/android/server/wifi/HalDeviceManager;->startWifi()Z
+PLcom/android/server/wifi/HalDeviceManager;->stopWifi()V
+PLcom/android/server/wifi/HalDeviceManager;->teardownInternal()V
+PLcom/android/server/wifi/HalDeviceManager;->validateInterfaceCache([Lcom/android/server/wifi/HalDeviceManager$WifiChipInfo;)Z
+PLcom/android/server/wifi/LastMileLogger;-><init>(Lcom/android/server/wifi/WifiInjector;)V
+PLcom/android/server/wifi/LastMileLogger;-><init>(Lcom/android/server/wifi/WifiInjector;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/wifi/LastMileLogger;->disableTracing()V
+PLcom/android/server/wifi/LastMileLogger;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/wifi/LastMileLogger;->dumpInternal(Ljava/io/PrintWriter;Ljava/lang/String;[B)V
+PLcom/android/server/wifi/LastMileLogger;->enableTracing()V
+PLcom/android/server/wifi/LastMileLogger;->ensureFailSafeIsArmed()Z
+PLcom/android/server/wifi/LastMileLogger;->readTrace()[B
+PLcom/android/server/wifi/LastMileLogger;->reportConnectionEvent(JB)V
+PLcom/android/server/wifi/LegacyConnectedScore;-><init>(Landroid/content/Context;Lcom/android/server/wifi/WifiConfigManager;Lcom/android/server/wifi/Clock;)V
+PLcom/android/server/wifi/LegacyConnectedScore;->reset()V
+PLcom/android/server/wifi/LogcatLog$RealLogMessage;->c(Ljava/lang/String;)Lcom/android/server/wifi/WifiLog$LogMessage;
+PLcom/android/server/wifi/LogcatLog$RealLogMessage;->c(Z)Lcom/android/server/wifi/WifiLog$LogMessage;
+PLcom/android/server/wifi/LogcatLog;-><init>(Ljava/lang/String;)V
+PLcom/android/server/wifi/LogcatLog;->enableVerboseLogging(I)V
+PLcom/android/server/wifi/LogcatLog;->err(Ljava/lang/String;)Lcom/android/server/wifi/WifiLog$LogMessage;
+PLcom/android/server/wifi/LogcatLog;->i(Ljava/lang/String;)V
+PLcom/android/server/wifi/LogcatLog;->wC(Ljava/lang/String;)V
+PLcom/android/server/wifi/NetworkListStoreData;-><init>()V
+PLcom/android/server/wifi/NetworkListStoreData;->deserializeData(Lorg/xmlpull/v1/XmlPullParser;IZ)V
+PLcom/android/server/wifi/NetworkListStoreData;->getName()Ljava/lang/String;
+PLcom/android/server/wifi/NetworkListStoreData;->getSharedConfigurations()Ljava/util/List;
+PLcom/android/server/wifi/NetworkListStoreData;->getUserConfigurations()Ljava/util/List;
+PLcom/android/server/wifi/NetworkListStoreData;->parseNetwork(Lorg/xmlpull/v1/XmlPullParser;I)Landroid/net/wifi/WifiConfiguration;
+PLcom/android/server/wifi/NetworkListStoreData;->parseNetworkList(Lorg/xmlpull/v1/XmlPullParser;I)Ljava/util/List;
+PLcom/android/server/wifi/NetworkListStoreData;->resetData(Z)V
+PLcom/android/server/wifi/NetworkListStoreData;->serializeData(Lorg/xmlpull/v1/XmlSerializer;Z)V
+PLcom/android/server/wifi/NetworkListStoreData;->serializeNetwork(Lorg/xmlpull/v1/XmlSerializer;Landroid/net/wifi/WifiConfiguration;)V
+PLcom/android/server/wifi/NetworkListStoreData;->serializeNetworkList(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;)V
+PLcom/android/server/wifi/NetworkListStoreData;->setSharedConfigurations(Ljava/util/List;)V
+PLcom/android/server/wifi/NetworkListStoreData;->setUserConfigurations(Ljava/util/List;)V
+PLcom/android/server/wifi/NetworkListStoreData;->supportShareData()Z
+PLcom/android/server/wifi/OpenNetworkNotificationBuilder;-><init>(Landroid/content/Context;Lcom/android/server/wifi/FrameworkFacade;)V
+PLcom/android/server/wifi/OpenNetworkNotifier$1;-><init>(Lcom/android/server/wifi/OpenNetworkNotifier;)V
+PLcom/android/server/wifi/OpenNetworkNotifier$NotificationEnabledSettingObserver;-><init>(Lcom/android/server/wifi/OpenNetworkNotifier;Landroid/os/Handler;)V
+PLcom/android/server/wifi/OpenNetworkNotifier$NotificationEnabledSettingObserver;->getValue()Z
+PLcom/android/server/wifi/OpenNetworkNotifier$NotificationEnabledSettingObserver;->register()V
+PLcom/android/server/wifi/OpenNetworkNotifier;->-get0(Lcom/android/server/wifi/OpenNetworkNotifier;)Landroid/content/Context;
+PLcom/android/server/wifi/OpenNetworkNotifier;->-get1(Lcom/android/server/wifi/OpenNetworkNotifier;)Lcom/android/server/wifi/FrameworkFacade;
+PLcom/android/server/wifi/OpenNetworkNotifier;->-set0(Lcom/android/server/wifi/OpenNetworkNotifier;Z)Z
+PLcom/android/server/wifi/OpenNetworkNotifier;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/wifi/FrameworkFacade;Lcom/android/server/wifi/Clock;Lcom/android/server/wifi/OpenNetworkRecommender;)V
+PLcom/android/server/wifi/OpenNetworkNotifier;->clearPendingNotification(Z)V
+PLcom/android/server/wifi/OpenNetworkNotifier;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/OpenNetworkNotifier;->handleScreenStateChanged(Z)V
+PLcom/android/server/wifi/OpenNetworkRecommender;-><init>()V
+PLcom/android/server/wifi/RttService$RttServiceImpl$1;-><init>(Lcom/android/server/wifi/RttService$RttServiceImpl;)V
+PLcom/android/server/wifi/RttService$RttServiceImpl$2;-><init>(Lcom/android/server/wifi/RttService$RttServiceImpl;)V
+PLcom/android/server/wifi/RttService$RttServiceImpl$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/wifi/RttService$RttServiceImpl$ClientHandler;-><init>(Lcom/android/server/wifi/RttService$RttServiceImpl;Landroid/os/Looper;)V
+PLcom/android/server/wifi/RttService$RttServiceImpl$ClientHandler;->getDescription(I)Ljava/lang/String;
+PLcom/android/server/wifi/RttService$RttServiceImpl$ClientHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/wifi/RttService$RttServiceImpl$ClientInfo;-><init>(Lcom/android/server/wifi/RttService$RttServiceImpl;Lcom/android/internal/util/AsyncChannel;ILjava/lang/String;)V
+PLcom/android/server/wifi/RttService$RttServiceImpl$ClientInfo;->cleanup()V
+PLcom/android/server/wifi/RttService$RttServiceImpl$RttDeathListener;-><init>(Lcom/android/server/wifi/RttService$RttServiceImpl;Landroid/os/IBinder;Landroid/os/Messenger;)V
+PLcom/android/server/wifi/RttService$RttServiceImpl$RttDeathListener;->binderDied()V
+PLcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine$DefaultState;-><init>(Lcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine;)V
+PLcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine$DefaultState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine$EnabledState;-><init>(Lcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine;)V
+PLcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine$EnabledState;->enter()V
+PLcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine$EnabledState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine$InitiatorEnabledState;-><init>(Lcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine;)V
+PLcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine$ResponderEnabledState;-><init>(Lcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine;)V
+PLcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine;-><init>(Lcom/android/server/wifi/RttService$RttServiceImpl;Landroid/os/Looper;)V
+PLcom/android/server/wifi/RttService$RttServiceImpl;->-get0(Lcom/android/server/wifi/RttService$RttServiceImpl;)Landroid/util/SparseArray;
+PLcom/android/server/wifi/RttService$RttServiceImpl;->-get1(Lcom/android/server/wifi/RttService$RttServiceImpl;)Landroid/util/ArrayMap;
+PLcom/android/server/wifi/RttService$RttServiceImpl;->-get2(Lcom/android/server/wifi/RttService$RttServiceImpl;)Landroid/content/Context;
+PLcom/android/server/wifi/RttService$RttServiceImpl;->-get3(Lcom/android/server/wifi/RttService$RttServiceImpl;)Ljava/lang/Object;
+PLcom/android/server/wifi/RttService$RttServiceImpl;->-get4(Lcom/android/server/wifi/RttService$RttServiceImpl;)Ljava/util/Queue;
+PLcom/android/server/wifi/RttService$RttServiceImpl;->-get5(Lcom/android/server/wifi/RttService$RttServiceImpl;)Lcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine;
+PLcom/android/server/wifi/RttService$RttServiceImpl;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/wifi/WifiInjector;)V
+PLcom/android/server/wifi/RttService$RttServiceImpl;->getMessenger(Landroid/os/IBinder;[I)Landroid/os/Messenger;
+PLcom/android/server/wifi/RttService$RttServiceImpl;->lambda$-com_android_server_wifi_RttService$RttServiceImpl_1874(I)V
+PLcom/android/server/wifi/RttService$RttServiceImpl;->startService()V
+PLcom/android/server/wifi/RttService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wifi/RttService;->onBootPhase(I)V
+PLcom/android/server/wifi/RttService;->onStart()V
+PLcom/android/server/wifi/SIMAccessor;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wifi/SavedNetworkEvaluator;-><init>(Landroid/content/Context;Lcom/android/server/wifi/WifiConfigManager;Lcom/android/server/wifi/Clock;Landroid/util/LocalLog;Lcom/android/server/wifi/WifiConnectivityHelper;)V
+PLcom/android/server/wifi/SavedNetworkEvaluator;->getName()Ljava/lang/String;
+PLcom/android/server/wifi/SavedNetworkEvaluator;->localLog(Ljava/lang/String;)V
+PLcom/android/server/wifi/SavedNetworkEvaluator;->update(Ljava/util/List;)V
+PLcom/android/server/wifi/ScanDetailCache;-><init>(Landroid/net/wifi/WifiConfiguration;II)V
+PLcom/android/server/wifi/ScanDetailCache;->size()I
+PLcom/android/server/wifi/ScanResultMatchInfo;->fromWifiConfiguration(Landroid/net/wifi/WifiConfiguration;)Lcom/android/server/wifi/ScanResultMatchInfo;
+PLcom/android/server/wifi/ScoredNetworkEvaluator$1;-><init>(Lcom/android/server/wifi/ScoredNetworkEvaluator;Landroid/os/Handler;Lcom/android/server/wifi/FrameworkFacade;Landroid/content/Context;)V
+PLcom/android/server/wifi/ScoredNetworkEvaluator$1;->onChange(Z)V
+PLcom/android/server/wifi/ScoredNetworkEvaluator;->-set0(Lcom/android/server/wifi/ScoredNetworkEvaluator;Z)Z
+PLcom/android/server/wifi/ScoredNetworkEvaluator;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/wifi/FrameworkFacade;Landroid/net/NetworkScoreManager;Lcom/android/server/wifi/WifiConfigManager;Landroid/util/LocalLog;Landroid/net/wifi/WifiNetworkScoreCache;)V
+PLcom/android/server/wifi/ScoredNetworkEvaluator;->update(Ljava/util/List;)V
+PLcom/android/server/wifi/SelfRecovery;-><init>(Lcom/android/server/wifi/WifiController;Lcom/android/server/wifi/Clock;)V
+PLcom/android/server/wifi/StateChangeResult;-><init>(ILandroid/net/wifi/WifiSsid;Ljava/lang/String;Landroid/net/wifi/SupplicantState;)V
+PLcom/android/server/wifi/StateChangeResult;->toString()Ljava/lang/String;
+PLcom/android/server/wifi/StateMachineDeathRecipient;-><init>(Lcom/android/internal/util/StateMachine;I)V
+PLcom/android/server/wifi/StateMachineDeathRecipient;->linkToDeath(Landroid/os/IBinder;)Z
+PLcom/android/server/wifi/StateMachineDeathRecipient;->unlinkToDeath()V
+PLcom/android/server/wifi/SupplicantStaIfaceHal$1;-><init>(Lcom/android/server/wifi/SupplicantStaIfaceHal;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal$1;->onRegistration(Ljava/lang/String;Ljava/lang/String;Z)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal$Mutable;-><init>()V
+PLcom/android/server/wifi/SupplicantStaIfaceHal$SupplicantStaIfaceHalCallback;-><init>(Lcom/android/server/wifi/SupplicantStaIfaceHal;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal$SupplicantStaIfaceHalCallback;-><init>(Lcom/android/server/wifi/SupplicantStaIfaceHal;Lcom/android/server/wifi/SupplicantStaIfaceHal$SupplicantStaIfaceHalCallback;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal$SupplicantStaIfaceHalCallback;->onBssidChanged(B[B)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal$SupplicantStaIfaceHalCallback;->onNetworkAdded(I)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal$SupplicantStaIfaceHalCallback;->onStateChanged(I[BILjava/util/ArrayList;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->-get0(Lcom/android/server/wifi/SupplicantStaIfaceHal;)Ljava/lang/String;
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->-get1(Lcom/android/server/wifi/SupplicantStaIfaceHal;)Ljava/lang/Object;
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->-get2(Lcom/android/server/wifi/SupplicantStaIfaceHal;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->-get3(Lcom/android/server/wifi/SupplicantStaIfaceHal;)Lcom/android/server/wifi/WifiMonitor;
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->-wrap0(I)Landroid/net/wifi/SupplicantState;
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->-wrap1(Lcom/android/server/wifi/SupplicantStaIfaceHal;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->-wrap2(Lcom/android/server/wifi/SupplicantStaIfaceHal;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->-wrap3(Lcom/android/server/wifi/SupplicantStaIfaceHal;)I
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->-wrap4(Lcom/android/server/wifi/SupplicantStaIfaceHal;Ljava/lang/String;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->-wrap5(Lcom/android/server/wifi/SupplicantStaIfaceHal;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal;-><init>(Landroid/content/Context;Lcom/android/server/wifi/WifiMonitor;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->addNetwork()Lcom/android/server/wifi/SupplicantStaNetworkHal;
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->addNetworkAndSaveConfig(Landroid/net/wifi/WifiConfiguration;)Landroid/util/Pair;
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->addRxFilter(B)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->addRxFilter(I)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->checkStatusAndLogFailure(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->checkSupplicantAndLogFailure(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->checkSupplicantStaIfaceAndLogFailure(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->connectToNetwork(Landroid/net/wifi/WifiConfiguration;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->disconnect()Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->enableAutoReconnect(Z)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->enableVerboseLogging(Z)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->getCurrentNetworkId()I
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->getMacAddress()Ljava/lang/String;
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->getServiceManagerMockable()Landroid/hidl/manager/V1_0/IServiceManager;
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->getStaIfaceMockable(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantIface;)Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIface;
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->getStaNetworkMockable(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;)Lcom/android/server/wifi/SupplicantStaNetworkHal;
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->getSupplicantMockable()Landroid/hardware/wifi/supplicant/V1_0/ISupplicant;
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->initSupplicantService()Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->initSupplicantStaIface()Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->initialize()Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->isInitializationComplete()Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->isInitializationStarted()Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->lambda$-com_android_server_wifi_SupplicantStaIfaceHal_11878(Ljava/util/ArrayList;Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->lambda$-com_android_server_wifi_SupplicantStaIfaceHal_12989(Lcom/android/server/wifi/SupplicantStaIfaceHal$Mutable;Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Landroid/hardware/wifi/supplicant/V1_0/ISupplicantIface;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->lambda$-com_android_server_wifi_SupplicantStaIfaceHal_28917(Lcom/android/server/wifi/SupplicantStaIfaceHal$Mutable;Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Landroid/hardware/wifi/supplicant/V1_0/ISupplicantNetwork;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->lambda$-com_android_server_wifi_SupplicantStaIfaceHal_33278(Lcom/android/server/wifi/SupplicantStaIfaceHal$Mutable;Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->lambda$-com_android_server_wifi_SupplicantStaIfaceHal_50243(Lcom/android/server/wifi/SupplicantStaIfaceHal$Mutable;Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;[B)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->linkToServiceManagerDeath()Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->linkToSupplicantDeath()Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->linkToSupplicantStaIfaceDeath()Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->listNetworks()Ljava/util/ArrayList;
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->logCallback(Ljava/lang/String;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->logd(Ljava/lang/String;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->logi(Ljava/lang/String;)V
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->registerCallback(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaIfaceCallback;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->removeAllNetworks()Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setBtCoexistenceMode(B)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setBtCoexistenceMode(I)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setBtCoexistenceScanModeEnabled(Z)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setConcurrencyPriority(I)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setConcurrencyPriority(Z)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setCountryCode(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setCountryCode([B)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setCurrentNetworkBssid(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setDebugParams(IZZ)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setExternalSim(Z)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setLogLevel(Z)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setPowerSave(Z)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setSuspendModeEnabled(Z)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setWpsConfigMethods(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setWpsConfigMethods(S)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setWpsDeviceName(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setWpsDeviceType(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setWpsDeviceType([B)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setWpsManufacturer(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setWpsModelName(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setWpsModelNumber(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->setWpsSerialNumber(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->startRxFilter()Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->stopRxFilter()Z
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->stringToWpsConfigMethod(Ljava/lang/String;)S
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->supplicantHidlStateToFrameworkState(I)Landroid/net/wifi/SupplicantState;
+PLcom/android/server/wifi/SupplicantStaIfaceHal;->supplicantServiceDiedHandler()V
+PLcom/android/server/wifi/SupplicantStaNetworkHal$SupplicantStaNetworkHalCallback;-><init>(Lcom/android/server/wifi/SupplicantStaNetworkHal;ILjava/lang/String;)V
+PLcom/android/server/wifi/SupplicantStaNetworkHal;-><init>(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetwork;Ljava/lang/String;Landroid/content/Context;Lcom/android/server/wifi/WifiMonitor;)V
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->addFastTransitionFlags(Ljava/util/BitSet;)Ljava/util/BitSet;
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->checkISupplicantStaNetworkAndLogFailure(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->checkStatusAndLogFailure(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->createNetworkExtra(Ljava/util/Map;)Ljava/lang/String;
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->enableVerboseLogging(Z)V
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->registerCallback(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantStaNetworkCallback;)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->saveWifiConfiguration(Landroid/net/wifi/WifiConfiguration;)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->select()Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->setAuthAlg(I)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->setBssid(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->setBssid([B)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->setGroupCipher(I)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->setIdStr(Ljava/lang/String;)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->setKeyMgmt(I)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->setPairwiseCipher(I)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->setProto(I)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->setRequirePmf(Z)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->setScanSsid(Z)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->setSsid(Ljava/util/ArrayList;)Z
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->wifiConfigurationToSupplicantAuthAlgMask(Ljava/util/BitSet;)I
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->wifiConfigurationToSupplicantGroupCipherMask(Ljava/util/BitSet;)I
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->wifiConfigurationToSupplicantKeyMgmtMask(Ljava/util/BitSet;)I
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->wifiConfigurationToSupplicantPairwiseCipherMask(Ljava/util/BitSet;)I
+PLcom/android/server/wifi/SupplicantStaNetworkHal;->wifiConfigurationToSupplicantProtoMask(Ljava/util/BitSet;)I
+PLcom/android/server/wifi/SupplicantStateTracker$CompletedState;-><init>(Lcom/android/server/wifi/SupplicantStateTracker;)V
+PLcom/android/server/wifi/SupplicantStateTracker$CompletedState;->enter()V
+PLcom/android/server/wifi/SupplicantStateTracker$ConnectionActiveState;-><init>(Lcom/android/server/wifi/SupplicantStateTracker;)V
+PLcom/android/server/wifi/SupplicantStateTracker$ConnectionActiveState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/SupplicantStateTracker$DefaultState;-><init>(Lcom/android/server/wifi/SupplicantStateTracker;)V
+PLcom/android/server/wifi/SupplicantStateTracker$DefaultState;->enter()V
+PLcom/android/server/wifi/SupplicantStateTracker$DefaultState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/SupplicantStateTracker$DisconnectedState;-><init>(Lcom/android/server/wifi/SupplicantStateTracker;)V
+PLcom/android/server/wifi/SupplicantStateTracker$DormantState;-><init>(Lcom/android/server/wifi/SupplicantStateTracker;)V
+PLcom/android/server/wifi/SupplicantStateTracker$HandshakeState;-><init>(Lcom/android/server/wifi/SupplicantStateTracker;)V
+PLcom/android/server/wifi/SupplicantStateTracker$HandshakeState;->enter()V
+PLcom/android/server/wifi/SupplicantStateTracker$HandshakeState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/SupplicantStateTracker$InactiveState;-><init>(Lcom/android/server/wifi/SupplicantStateTracker;)V
+PLcom/android/server/wifi/SupplicantStateTracker$ScanState;-><init>(Lcom/android/server/wifi/SupplicantStateTracker;)V
+PLcom/android/server/wifi/SupplicantStateTracker$UninitializedState;-><init>(Lcom/android/server/wifi/SupplicantStateTracker;)V
+PLcom/android/server/wifi/SupplicantStateTracker$UninitializedState;->enter()V
+PLcom/android/server/wifi/SupplicantStateTracker;->-get0()Z
+PLcom/android/server/wifi/SupplicantStateTracker;->-get1(Lcom/android/server/wifi/SupplicantStateTracker;)Z
+PLcom/android/server/wifi/SupplicantStateTracker;->-get2(Lcom/android/server/wifi/SupplicantStateTracker;)I
+PLcom/android/server/wifi/SupplicantStateTracker;->-get3(Lcom/android/server/wifi/SupplicantStateTracker;)Z
+PLcom/android/server/wifi/SupplicantStateTracker;->-get4(Lcom/android/server/wifi/SupplicantStateTracker;)Lcom/android/internal/util/State;
+PLcom/android/server/wifi/SupplicantStateTracker;->-getandroid-net-wifi-SupplicantStateSwitchesValues()[I
+PLcom/android/server/wifi/SupplicantStateTracker;->-set0(Lcom/android/server/wifi/SupplicantStateTracker;Z)Z
+PLcom/android/server/wifi/SupplicantStateTracker;->-set1(Lcom/android/server/wifi/SupplicantStateTracker;I)I
+PLcom/android/server/wifi/SupplicantStateTracker;->-wrap2(Lcom/android/server/wifi/SupplicantStateTracker;Landroid/net/wifi/SupplicantState;ZI)V
+PLcom/android/server/wifi/SupplicantStateTracker;->-wrap3(Lcom/android/server/wifi/SupplicantStateTracker;Lcom/android/server/wifi/StateChangeResult;)V
+PLcom/android/server/wifi/SupplicantStateTracker;-><init>(Landroid/content/Context;Lcom/android/server/wifi/WifiConfigManager;Lcom/android/server/wifi/FrameworkFacade;Landroid/os/Handler;)V
+PLcom/android/server/wifi/SupplicantStateTracker;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/SupplicantStateTracker;->enableVerboseLogging(I)V
+PLcom/android/server/wifi/SupplicantStateTracker;->getSupplicantStateName()Ljava/lang/String;
+PLcom/android/server/wifi/SupplicantStateTracker;->sendSupplicantStateChangedBroadcast(Landroid/net/wifi/SupplicantState;ZI)V
+PLcom/android/server/wifi/SupplicantStateTracker;->transitionOnSupplicantStateChange(Lcom/android/server/wifi/StateChangeResult;)V
+PLcom/android/server/wifi/SystemBuildProperties;-><init>()V
+PLcom/android/server/wifi/SystemBuildProperties;->isUserBuild()Z
+PLcom/android/server/wifi/SystemPropertyService;-><init>()V
+PLcom/android/server/wifi/SystemPropertyService;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/wifi/SystemPropertyService;->getBoolean(Ljava/lang/String;Z)Z
+PLcom/android/server/wifi/SystemPropertyService;->set(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiApConfigStore;-><init>(Landroid/content/Context;Lcom/android/server/wifi/BackupManagerProxy;)V
+PLcom/android/server/wifi/WifiApConfigStore;-><init>(Landroid/content/Context;Lcom/android/server/wifi/BackupManagerProxy;Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiApConfigStore;->loadApConfiguration(Ljava/lang/String;)Landroid/net/wifi/WifiConfiguration;
+PLcom/android/server/wifi/WifiBackupRestore;-><init>(Lcom/android/server/wifi/util/WifiPermissionsUtil;)V
+PLcom/android/server/wifi/WifiBackupRestore;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiBackupRestore;->enableVerboseLogging(I)V
+PLcom/android/server/wifi/WifiCertManager;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wifi/WifiCertManager;-><init>(Landroid/content/Context;Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiCertManager;->readConfigFile()[B
+PLcom/android/server/wifi/WifiConfigManager$1;-><init>()V
+PLcom/android/server/wifi/WifiConfigManager;-><init>(Landroid/content/Context;Lcom/android/server/wifi/Clock;Landroid/os/UserManager;Landroid/telephony/TelephonyManager;Lcom/android/server/wifi/WifiKeyStore;Lcom/android/server/wifi/WifiConfigStore;Lcom/android/server/wifi/WifiConfigStoreLegacy;Lcom/android/server/wifi/util/WifiPermissionsUtil;Lcom/android/server/wifi/util/WifiPermissionsWrapper;Lcom/android/server/wifi/NetworkListStoreData;Lcom/android/server/wifi/DeletedEphemeralSsidsStoreData;)V
+PLcom/android/server/wifi/WifiConfigManager;->clearInternalData()V
+PLcom/android/server/wifi/WifiConfigManager;->clearLastSelectedNetwork()V
+PLcom/android/server/wifi/WifiConfigManager;->clearRecentFailureReason(I)V
+PLcom/android/server/wifi/WifiConfigManager;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiConfigManager;->enableVerboseLogging(I)V
+PLcom/android/server/wifi/WifiConfigManager;->fetchChannelSetForNetworkForPartialScan(IJI)Ljava/util/Set;
+PLcom/android/server/wifi/WifiConfigManager;->getConfiguredNetworkWithPassword(I)Landroid/net/wifi/WifiConfiguration;
+PLcom/android/server/wifi/WifiConfigManager;->getConfiguredNetworks()Ljava/util/List;
+PLcom/android/server/wifi/WifiConfigManager;->getLastSelectedNetworkConfigKey()Ljava/lang/String;
+PLcom/android/server/wifi/WifiConfigManager;->getSavedNetworks()Ljava/util/List;
+PLcom/android/server/wifi/WifiConfigManager;->handleUserUnlock(I)V
+PLcom/android/server/wifi/WifiConfigManager;->handleUserUnlockOrSwitch(I)V
+PLcom/android/server/wifi/WifiConfigManager;->loadFromStore()Z
+PLcom/android/server/wifi/WifiConfigManager;->loadFromUserStoreAfterUnlockOrSwitch(I)Z
+PLcom/android/server/wifi/WifiConfigManager;->loadInternalData(Ljava/util/List;Ljava/util/List;Ljava/util/Set;)V
+PLcom/android/server/wifi/WifiConfigManager;->loadInternalDataFromSharedStore(Ljava/util/List;)V
+PLcom/android/server/wifi/WifiConfigManager;->loadInternalDataFromUserStore(Ljava/util/List;Ljava/util/Set;)V
+PLcom/android/server/wifi/WifiConfigManager;->migrateFromLegacyStore()Z
+PLcom/android/server/wifi/WifiConfigManager;->needsUnlockedKeyStore()Z
+PLcom/android/server/wifi/WifiConfigManager;->resetSimNetworks(Z)V
+PLcom/android/server/wifi/WifiConfigManager;->saveToStore(Z)Z
+PLcom/android/server/wifi/WifiConfigManager;->sendConfiguredNetworkChangedBroadcast(Landroid/net/wifi/WifiConfiguration;I)V
+PLcom/android/server/wifi/WifiConfigManager;->sendConfiguredNetworksChangedBroadcast()V
+PLcom/android/server/wifi/WifiConfigManager;->setNetworkStatus(Landroid/net/wifi/WifiConfiguration;I)V
+PLcom/android/server/wifi/WifiConfigManager;->setNetworkValidatedInternetAccess(IZ)Z
+PLcom/android/server/wifi/WifiConfigManager;->setOnSavedNetworkUpdateListener(Lcom/android/server/wifi/WifiConfigManager$OnSavedNetworkUpdateListener;)V
+PLcom/android/server/wifi/WifiConfigManager;->updateNetworkAfterConnect(I)Z
+PLcom/android/server/wifi/WifiConfigStore$1;-><init>(Lcom/android/server/wifi/WifiConfigStore;)V
+PLcom/android/server/wifi/WifiConfigStore$1;->onAlarm()V
+PLcom/android/server/wifi/WifiConfigStore$StoreFile;-><init>(Ljava/io/File;)V
+PLcom/android/server/wifi/WifiConfigStore$StoreFile;->exists()Z
+PLcom/android/server/wifi/WifiConfigStore$StoreFile;->readRawData()[B
+PLcom/android/server/wifi/WifiConfigStore$StoreFile;->storeRawDataToWrite([B)V
+PLcom/android/server/wifi/WifiConfigStore$StoreFile;->writeBufferedRawData()V
+PLcom/android/server/wifi/WifiConfigStore;->-wrap0(Lcom/android/server/wifi/WifiConfigStore;)V
+PLcom/android/server/wifi/WifiConfigStore;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/wifi/Clock;Lcom/android/server/wifi/WifiConfigStore$StoreFile;)V
+PLcom/android/server/wifi/WifiConfigStore;->areStoresPresent()Z
+PLcom/android/server/wifi/WifiConfigStore;->createFile(Ljava/io/File;)Lcom/android/server/wifi/WifiConfigStore$StoreFile;
+PLcom/android/server/wifi/WifiConfigStore;->createSharedFile()Lcom/android/server/wifi/WifiConfigStore$StoreFile;
+PLcom/android/server/wifi/WifiConfigStore;->createUserFile(I)Lcom/android/server/wifi/WifiConfigStore$StoreFile;
+PLcom/android/server/wifi/WifiConfigStore;->deserializeData([BZ)V
+PLcom/android/server/wifi/WifiConfigStore;->enableVerboseLogging(Z)V
+PLcom/android/server/wifi/WifiConfigStore;->parseDocumentStartAndVersionFromXml(Lorg/xmlpull/v1/XmlPullParser;)I
+PLcom/android/server/wifi/WifiConfigStore;->read()V
+PLcom/android/server/wifi/WifiConfigStore;->registerStoreData(Lcom/android/server/wifi/WifiConfigStore$StoreData;)Z
+PLcom/android/server/wifi/WifiConfigStore;->resetStoreData(Z)V
+PLcom/android/server/wifi/WifiConfigStore;->startBufferedWriteAlarm()V
+PLcom/android/server/wifi/WifiConfigStore;->stopBufferedWriteAlarm()V
+PLcom/android/server/wifi/WifiConfigStore;->switchUserStoreAndRead(Lcom/android/server/wifi/WifiConfigStore$StoreFile;)V
+PLcom/android/server/wifi/WifiConfigStore;->write(Z)V
+PLcom/android/server/wifi/WifiConfigStore;->writeBufferedData()V
+PLcom/android/server/wifi/WifiConfigStoreLegacy;-><init>(Lcom/android/server/wifi/WifiNetworkHistory;Lcom/android/server/wifi/WifiNative;Lcom/android/server/net/IpConfigStore;Lcom/android/server/wifi/hotspot2/LegacyPasspointConfigParser;)V
+PLcom/android/server/wifi/WifiConfigStoreLegacy;->areStoresPresent()Z
+PLcom/android/server/wifi/WifiConfigurationUtil$WifiConfigurationComparator;-><init>()V
+PLcom/android/server/wifi/WifiConfigurationUtil;->isSameNetwork(Landroid/net/wifi/WifiConfiguration;Landroid/net/wifi/WifiConfiguration;)Z
+PLcom/android/server/wifi/WifiConfigurationUtil;->isVisibleToAnyProfile(Landroid/net/wifi/WifiConfiguration;Ljava/util/List;)Z
+PLcom/android/server/wifi/WifiConnectivityHelper;-><init>(Lcom/android/server/wifi/WifiNative;)V
+PLcom/android/server/wifi/WifiConnectivityHelper;->getFirmwareRoamingInfo()Z
+PLcom/android/server/wifi/WifiConnectivityHelper;->getMaxNumBlacklistBssid()I
+PLcom/android/server/wifi/WifiConnectivityHelper;->setFirmwareRoamingConfiguration(Ljava/util/ArrayList;Ljava/util/ArrayList;)Z
+PLcom/android/server/wifi/WifiConnectivityManager$1;-><init>(Lcom/android/server/wifi/WifiConnectivityManager;)V
+PLcom/android/server/wifi/WifiConnectivityManager$2;-><init>(Lcom/android/server/wifi/WifiConnectivityManager;)V
+PLcom/android/server/wifi/WifiConnectivityManager$2;->onAlarm()V
+PLcom/android/server/wifi/WifiConnectivityManager$3;-><init>(Lcom/android/server/wifi/WifiConnectivityManager;)V
+PLcom/android/server/wifi/WifiConnectivityManager$3;->onAlarm()V
+PLcom/android/server/wifi/WifiConnectivityManager$AllSingleScanListener;-><init>(Lcom/android/server/wifi/WifiConnectivityManager;)V
+PLcom/android/server/wifi/WifiConnectivityManager$AllSingleScanListener;-><init>(Lcom/android/server/wifi/WifiConnectivityManager;Lcom/android/server/wifi/WifiConnectivityManager$AllSingleScanListener;)V
+PLcom/android/server/wifi/WifiConnectivityManager$AllSingleScanListener;->clearScanDetails()V
+PLcom/android/server/wifi/WifiConnectivityManager$AllSingleScanListener;->onSuccess()V
+PLcom/android/server/wifi/WifiConnectivityManager$OnSavedNetworkUpdateListener;-><init>(Lcom/android/server/wifi/WifiConnectivityManager;)V
+PLcom/android/server/wifi/WifiConnectivityManager$OnSavedNetworkUpdateListener;-><init>(Lcom/android/server/wifi/WifiConnectivityManager;Lcom/android/server/wifi/WifiConnectivityManager$OnSavedNetworkUpdateListener;)V
+PLcom/android/server/wifi/WifiConnectivityManager$PnoScanListener;-><init>(Lcom/android/server/wifi/WifiConnectivityManager;)V
+PLcom/android/server/wifi/WifiConnectivityManager$PnoScanListener;-><init>(Lcom/android/server/wifi/WifiConnectivityManager;Lcom/android/server/wifi/WifiConnectivityManager$PnoScanListener;)V
+PLcom/android/server/wifi/WifiConnectivityManager$PnoScanListener;->resetLowRssiNetworkRetryDelay()V
+PLcom/android/server/wifi/WifiConnectivityManager$SingleScanListener;-><init>(Lcom/android/server/wifi/WifiConnectivityManager;Z)V
+PLcom/android/server/wifi/WifiConnectivityManager$SingleScanListener;->onResults([Landroid/net/wifi/WifiScanner$ScanData;)V
+PLcom/android/server/wifi/WifiConnectivityManager$SingleScanListener;->onSuccess()V
+PLcom/android/server/wifi/WifiConnectivityManager;->-get10(Lcom/android/server/wifi/WifiConnectivityManager;)Lcom/android/server/wifi/WifiMetrics;
+PLcom/android/server/wifi/WifiConnectivityManager;->-get2(Lcom/android/server/wifi/WifiConnectivityManager;)Z
+PLcom/android/server/wifi/WifiConnectivityManager;->-get7(Lcom/android/server/wifi/WifiConnectivityManager;)Z
+PLcom/android/server/wifi/WifiConnectivityManager;->-wrap0(Lcom/android/server/wifi/WifiConnectivityManager;Ljava/util/List;Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiConnectivityManager;->-wrap2(Lcom/android/server/wifi/WifiConnectivityManager;)V
+PLcom/android/server/wifi/WifiConnectivityManager;->-wrap7(Lcom/android/server/wifi/WifiConnectivityManager;)V
+PLcom/android/server/wifi/WifiConnectivityManager;-><init>(Landroid/content/Context;Lcom/android/server/wifi/WifiStateMachine;Landroid/net/wifi/WifiScanner;Lcom/android/server/wifi/WifiConfigManager;Landroid/net/wifi/WifiInfo;Lcom/android/server/wifi/WifiNetworkSelector;Lcom/android/server/wifi/WifiConnectivityHelper;Lcom/android/server/wifi/WifiLastResortWatchdog;Lcom/android/server/wifi/OpenNetworkNotifier;Lcom/android/server/wifi/WifiMetrics;Landroid/os/Looper;Lcom/android/server/wifi/Clock;Landroid/util/LocalLog;ZLcom/android/server/wifi/FrameworkFacade;Lcom/android/server/wifi/SavedNetworkEvaluator;Lcom/android/server/wifi/ScoredNetworkEvaluator;Lcom/android/server/wifi/hotspot2/PasspointNetworkEvaluator;)V
+PLcom/android/server/wifi/WifiConnectivityManager;->cancelPeriodicScanTimer()V
+PLcom/android/server/wifi/WifiConnectivityManager;->clearBssidBlacklist()V
+PLcom/android/server/wifi/WifiConnectivityManager;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiConnectivityManager;->enable(Z)V
+PLcom/android/server/wifi/WifiConnectivityManager;->getScanBand(Z)I
+PLcom/android/server/wifi/WifiConnectivityManager;->handleConnectionStateChanged(I)V
+PLcom/android/server/wifi/WifiConnectivityManager;->handleScreenStateChanged(Z)V
+PLcom/android/server/wifi/WifiConnectivityManager;->noteConnectionAttempt(Ljava/lang/Long;)V
+PLcom/android/server/wifi/WifiConnectivityManager;->periodicScanTimerHandler()V
+PLcom/android/server/wifi/WifiConnectivityManager;->refreshBssidBlacklist()V
+PLcom/android/server/wifi/WifiConnectivityManager;->resetLastPeriodicSingleScanTimeStamp()V
+PLcom/android/server/wifi/WifiConnectivityManager;->schedulePeriodicScanTimer(I)V
+PLcom/android/server/wifi/WifiConnectivityManager;->scheduleWatchdogTimer()V
+PLcom/android/server/wifi/WifiConnectivityManager;->setUntrustedConnectionAllowed(Z)V
+PLcom/android/server/wifi/WifiConnectivityManager;->setWifiEnabled(Z)V
+PLcom/android/server/wifi/WifiConnectivityManager;->start()V
+PLcom/android/server/wifi/WifiConnectivityManager;->startConnectivityScan(Z)V
+PLcom/android/server/wifi/WifiConnectivityManager;->startPeriodicScan(Z)V
+PLcom/android/server/wifi/WifiConnectivityManager;->startPeriodicSingleScan()V
+PLcom/android/server/wifi/WifiConnectivityManager;->stateToString(I)Ljava/lang/String;
+PLcom/android/server/wifi/WifiConnectivityManager;->stop()V
+PLcom/android/server/wifi/WifiConnectivityManager;->stopConnectivityScan()V
+PLcom/android/server/wifi/WifiConnectivityManager;->stopPnoScan()V
+PLcom/android/server/wifi/WifiConnectivityManager;->trackBssid(Ljava/lang/String;ZI)Z
+PLcom/android/server/wifi/WifiConnectivityManager;->updateBssidBlacklist(Ljava/lang/String;ZI)Z
+PLcom/android/server/wifi/WifiConnectivityManager;->updateFirmwareRoamingConfiguration()V
+PLcom/android/server/wifi/WifiConnectivityManager;->updateRunningState()V
+PLcom/android/server/wifi/WifiConnectivityManager;->watchdogHandler()V
+PLcom/android/server/wifi/WifiController$1;-><init>(Lcom/android/server/wifi/WifiController;)V
+PLcom/android/server/wifi/WifiController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/wifi/WifiController$2;-><init>(Lcom/android/server/wifi/WifiController;Landroid/os/Handler;)V
+PLcom/android/server/wifi/WifiController$3;-><init>(Lcom/android/server/wifi/WifiController;Landroid/os/Handler;)V
+PLcom/android/server/wifi/WifiController$4;-><init>(Lcom/android/server/wifi/WifiController;Landroid/os/Handler;)V
+PLcom/android/server/wifi/WifiController$ApEnabledState;-><init>(Lcom/android/server/wifi/WifiController;)V
+PLcom/android/server/wifi/WifiController$ApStaDisabledState;-><init>(Lcom/android/server/wifi/WifiController;)V
+PLcom/android/server/wifi/WifiController$DefaultState;-><init>(Lcom/android/server/wifi/WifiController;)V
+PLcom/android/server/wifi/WifiController$DeviceActiveState;-><init>(Lcom/android/server/wifi/WifiController;)V
+PLcom/android/server/wifi/WifiController$DeviceActiveState;->enter()V
+PLcom/android/server/wifi/WifiController$DeviceInactiveState;-><init>(Lcom/android/server/wifi/WifiController;)V
+PLcom/android/server/wifi/WifiController$EcmState;-><init>(Lcom/android/server/wifi/WifiController;)V
+PLcom/android/server/wifi/WifiController$FullHighPerfLockHeldState;-><init>(Lcom/android/server/wifi/WifiController;)V
+PLcom/android/server/wifi/WifiController$FullLockHeldState;-><init>(Lcom/android/server/wifi/WifiController;)V
+PLcom/android/server/wifi/WifiController$NoLockHeldState;-><init>(Lcom/android/server/wifi/WifiController;)V
+PLcom/android/server/wifi/WifiController$ScanOnlyLockHeldState;-><init>(Lcom/android/server/wifi/WifiController;)V
+PLcom/android/server/wifi/WifiController$StaDisabledWithScanState;-><init>(Lcom/android/server/wifi/WifiController;)V
+PLcom/android/server/wifi/WifiController$StaDisabledWithScanState;->doDeferEnable(Landroid/os/Message;)Z
+PLcom/android/server/wifi/WifiController$StaDisabledWithScanState;->enter()V
+PLcom/android/server/wifi/WifiController$StaDisabledWithScanState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/WifiController$StaEnabledState;-><init>(Lcom/android/server/wifi/WifiController;)V
+PLcom/android/server/wifi/WifiController$StaEnabledState;->enter()V
+PLcom/android/server/wifi/WifiController;->-get12(Lcom/android/server/wifi/WifiController;)J
+PLcom/android/server/wifi/WifiController;->-get13(Lcom/android/server/wifi/WifiController;)Z
+PLcom/android/server/wifi/WifiController;->-get14(Lcom/android/server/wifi/WifiController;)Lcom/android/server/wifi/WifiSettingsStore;
+PLcom/android/server/wifi/WifiController;->-get16(Lcom/android/server/wifi/WifiController;)Lcom/android/server/wifi/WifiStateMachine;
+PLcom/android/server/wifi/WifiController;->-get4(Lcom/android/server/wifi/WifiController;)Lcom/android/server/wifi/WifiController$DeviceActiveState;
+PLcom/android/server/wifi/WifiController;->-get5(Lcom/android/server/wifi/WifiController;)Z
+PLcom/android/server/wifi/WifiController;->-get8(Lcom/android/server/wifi/WifiController;)Z
+PLcom/android/server/wifi/WifiController;->-set1(Lcom/android/server/wifi/WifiController;Z)Z
+PLcom/android/server/wifi/WifiController;->-set2(Lcom/android/server/wifi/WifiController;I)I
+PLcom/android/server/wifi/WifiController;->-wrap2(Lcom/android/server/wifi/WifiController;Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiController;->-wrap3(Lcom/android/server/wifi/WifiController;Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiController;-><init>(Landroid/content/Context;Lcom/android/server/wifi/WifiStateMachine;Lcom/android/server/wifi/WifiSettingsStore;Lcom/android/server/wifi/WifiLockManager;Landroid/os/Looper;Lcom/android/server/wifi/FrameworkFacade;)V
+PLcom/android/server/wifi/WifiController;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiController;->initializeAndRegisterForSettingsChange(Landroid/os/Looper;)V
+PLcom/android/server/wifi/WifiController;->readStayAwakeConditions()V
+PLcom/android/server/wifi/WifiController;->readWifiIdleTime()V
+PLcom/android/server/wifi/WifiController;->readWifiReEnableDelay()V
+PLcom/android/server/wifi/WifiController;->readWifiSleepPolicy()V
+PLcom/android/server/wifi/WifiController;->registerForStayAwakeModeChange(Landroid/os/Handler;)V
+PLcom/android/server/wifi/WifiController;->registerForWifiIdleTimeChange(Landroid/os/Handler;)V
+PLcom/android/server/wifi/WifiController;->registerForWifiSleepPolicyChange(Landroid/os/Handler;)V
+PLcom/android/server/wifi/WifiCountryCode;-><init>(Lcom/android/server/wifi/WifiNative;Ljava/lang/String;Z)V
+PLcom/android/server/wifi/WifiCountryCode;->enableVerboseLogging(I)V
+PLcom/android/server/wifi/WifiCountryCode;->getCountryCodeSentToDriver()Ljava/lang/String;
+PLcom/android/server/wifi/WifiCountryCode;->pickCountryCode()Ljava/lang/String;
+PLcom/android/server/wifi/WifiCountryCode;->setCountryCodeNative(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiCountryCode;->setReadyForChange(Z)V
+PLcom/android/server/wifi/WifiCountryCode;->simCardRemoved()V
+PLcom/android/server/wifi/WifiCountryCode;->updateCountryCode()V
+PLcom/android/server/wifi/WifiDiagnostics$1;-><init>(Lcom/android/server/wifi/WifiDiagnostics;)V
+PLcom/android/server/wifi/WifiDiagnostics$2;-><init>(Lcom/android/server/wifi/WifiDiagnostics;)V
+PLcom/android/server/wifi/WifiDiagnostics$BugReport;-><init>(Lcom/android/server/wifi/WifiDiagnostics;)V
+PLcom/android/server/wifi/WifiDiagnostics$LimitedCircularArray;-><init>(Lcom/android/server/wifi/WifiDiagnostics;I)V
+PLcom/android/server/wifi/WifiDiagnostics;->-wrap0(Lcom/android/server/wifi/WifiDiagnostics;[B)Ljava/lang/String;
+PLcom/android/server/wifi/WifiDiagnostics;-><init>(Landroid/content/Context;Lcom/android/server/wifi/WifiInjector;Lcom/android/server/wifi/WifiStateMachine;Lcom/android/server/wifi/WifiNative;Lcom/android/server/wifi/BuildProperties;Lcom/android/server/wifi/LastMileLogger;)V
+PLcom/android/server/wifi/WifiDiagnostics;->captureBugReportData(I)V
+PLcom/android/server/wifi/WifiDiagnostics;->clearVerboseLogs()V
+PLcom/android/server/wifi/WifiDiagnostics;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiDiagnostics;->dumpPacketFates(Ljava/io/PrintWriter;)V
+PLcom/android/server/wifi/WifiDiagnostics;->enableVerboseLoggingForDogfood()Z
+PLcom/android/server/wifi/WifiDiagnostics;->fetchPacketFates()Ljava/util/ArrayList;
+PLcom/android/server/wifi/WifiDiagnostics;->fetchRingBuffers()Z
+PLcom/android/server/wifi/WifiDiagnostics;->isVerboseLoggingEnabled()Z
+PLcom/android/server/wifi/WifiDiagnostics;->reportConnectionEvent(JB)V
+PLcom/android/server/wifi/WifiDiagnostics;->resizeRingBuffers()V
+PLcom/android/server/wifi/WifiDiagnostics;->startLogging(Z)V
+PLcom/android/server/wifi/WifiDiagnostics;->startLoggingAllExceptPerPacketBuffers()Z
+PLcom/android/server/wifi/WifiDiagnostics;->startLoggingRingBuffer(Lcom/android/server/wifi/WifiNative$RingBufferStatus;)Z
+PLcom/android/server/wifi/WifiDiagnostics;->stopLoggingAllBuffers()Z
+PLcom/android/server/wifi/WifiDiagnostics;->stopLoggingRingBuffer(Lcom/android/server/wifi/WifiNative$RingBufferStatus;)Z
+PLcom/android/server/wifi/WifiInjector;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wifi/WifiInjector;->getBuildProperties()Lcom/android/server/wifi/BuildProperties;
+PLcom/android/server/wifi/WifiInjector;->getClock()Lcom/android/server/wifi/Clock;
+PLcom/android/server/wifi/WifiInjector;->getFrameworkFacade()Lcom/android/server/wifi/FrameworkFacade;
+PLcom/android/server/wifi/WifiInjector;->getInstance()Lcom/android/server/wifi/WifiInjector;
+PLcom/android/server/wifi/WifiInjector;->getJavaRuntime()Ljava/lang/Runtime;
+PLcom/android/server/wifi/WifiInjector;->getPasspointManager()Lcom/android/server/wifi/hotspot2/PasspointManager;
+PLcom/android/server/wifi/WifiInjector;->getPropertyService()Lcom/android/server/wifi/PropertyService;
+PLcom/android/server/wifi/WifiInjector;->getUserManager()Landroid/os/UserManager;
+PLcom/android/server/wifi/WifiInjector;->getWifiApConfigStore()Lcom/android/server/wifi/WifiApConfigStore;
+PLcom/android/server/wifi/WifiInjector;->getWifiBackupRestore()Lcom/android/server/wifi/WifiBackupRestore;
+PLcom/android/server/wifi/WifiInjector;->getWifiCertManager()Lcom/android/server/wifi/WifiCertManager;
+PLcom/android/server/wifi/WifiInjector;->getWifiConfigManager()Lcom/android/server/wifi/WifiConfigManager;
+PLcom/android/server/wifi/WifiInjector;->getWifiController()Lcom/android/server/wifi/WifiController;
+PLcom/android/server/wifi/WifiInjector;->getWifiCountryCode()Lcom/android/server/wifi/WifiCountryCode;
+PLcom/android/server/wifi/WifiInjector;->getWifiLastResortWatchdog()Lcom/android/server/wifi/WifiLastResortWatchdog;
+PLcom/android/server/wifi/WifiInjector;->getWifiLockManager()Lcom/android/server/wifi/WifiLockManager;
+PLcom/android/server/wifi/WifiInjector;->getWifiMetrics()Lcom/android/server/wifi/WifiMetrics;
+PLcom/android/server/wifi/WifiInjector;->getWifiMonitor()Lcom/android/server/wifi/WifiMonitor;
+PLcom/android/server/wifi/WifiInjector;->getWifiMulticastLockManager()Lcom/android/server/wifi/WifiMulticastLockManager;
+PLcom/android/server/wifi/WifiInjector;->getWifiNative()Lcom/android/server/wifi/WifiNative;
+PLcom/android/server/wifi/WifiInjector;->getWifiP2pMonitor()Lcom/android/server/wifi/p2p/WifiP2pMonitor;
+PLcom/android/server/wifi/WifiInjector;->getWifiP2pNative()Lcom/android/server/wifi/p2p/WifiP2pNative;
+PLcom/android/server/wifi/WifiInjector;->getWifiPermissionsUtil()Lcom/android/server/wifi/util/WifiPermissionsUtil;
+PLcom/android/server/wifi/WifiInjector;->getWifiScanner()Landroid/net/wifi/WifiScanner;
+PLcom/android/server/wifi/WifiInjector;->getWifiServiceHandlerThread()Landroid/os/HandlerThread;
+PLcom/android/server/wifi/WifiInjector;->getWifiSettingsStore()Lcom/android/server/wifi/WifiSettingsStore;
+PLcom/android/server/wifi/WifiInjector;->getWifiStateMachine()Lcom/android/server/wifi/WifiStateMachine;
+PLcom/android/server/wifi/WifiInjector;->getWifiStateTracker()Lcom/android/server/wifi/WifiStateTracker;
+PLcom/android/server/wifi/WifiInjector;->getWifiTrafficPoller()Lcom/android/server/wifi/WifiTrafficPoller;
+PLcom/android/server/wifi/WifiInjector;->makeLog(Ljava/lang/String;)Lcom/android/server/wifi/WifiLog;
+PLcom/android/server/wifi/WifiInjector;->makeWifiConnectivityManager(Landroid/net/wifi/WifiInfo;Z)Lcom/android/server/wifi/WifiConnectivityManager;
+PLcom/android/server/wifi/WifiInjector;->makeWifiDiagnostics(Lcom/android/server/wifi/WifiNative;)Lcom/android/server/wifi/BaseWifiDiagnostics;
+PLcom/android/server/wifi/WifiInjector;->makeWificond()Landroid/net/wifi/IWificond;
+PLcom/android/server/wifi/WifiKeyStore;-><init>(Landroid/security/KeyStore;)V
+PLcom/android/server/wifi/WifiKeyStore;->enableVerboseLogging(Z)V
+PLcom/android/server/wifi/WifiLastResortWatchdog$AvailableNetworkFailureCount;-><init>(Landroid/net/wifi/WifiConfiguration;)V
+PLcom/android/server/wifi/WifiLastResortWatchdog$AvailableNetworkFailureCount;->resetCounts()V
+PLcom/android/server/wifi/WifiLastResortWatchdog;-><init>(Lcom/android/server/wifi/SelfRecovery;Lcom/android/server/wifi/WifiMetrics;)V
+PLcom/android/server/wifi/WifiLastResortWatchdog;->clearAllFailureCounts()V
+PLcom/android/server/wifi/WifiLastResortWatchdog;->connectedStateTransition(Z)V
+PLcom/android/server/wifi/WifiLastResortWatchdog;->enableVerboseLogging(I)V
+PLcom/android/server/wifi/WifiLastResortWatchdog;->setWatchdogTriggerEnabled(Z)V
+PLcom/android/server/wifi/WifiLockManager$WifiLock;->getBinder()Landroid/os/IBinder;
+PLcom/android/server/wifi/WifiLockManager;-><init>(Landroid/content/Context;Lcom/android/internal/app/IBatteryStats;)V
+PLcom/android/server/wifi/WifiLockManager;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/wifi/WifiLockManager;->enableVerboseLogging(I)V
+PLcom/android/server/wifi/WifiLockManager;->isValidLockMode(I)Z
+PLcom/android/server/wifi/WifiMetrics$1;-><init>(Lcom/android/server/wifi/WifiMetrics;Landroid/os/Looper;)V
+PLcom/android/server/wifi/WifiMetrics$1;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/wifi/WifiMetrics$ConnectionEvent;->-get1(Lcom/android/server/wifi/WifiMetrics$ConnectionEvent;)Ljava/lang/String;
+PLcom/android/server/wifi/WifiMetrics$ConnectionEvent;->-get2(Lcom/android/server/wifi/WifiMetrics$ConnectionEvent;)J
+PLcom/android/server/wifi/WifiMetrics$ConnectionEvent;->-get3(Lcom/android/server/wifi/WifiMetrics$ConnectionEvent;)J
+PLcom/android/server/wifi/WifiMetrics$ConnectionEvent;->-set0(Lcom/android/server/wifi/WifiMetrics$ConnectionEvent;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/wifi/WifiMetrics$ConnectionEvent;->-set1(Lcom/android/server/wifi/WifiMetrics$ConnectionEvent;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/wifi/WifiMetrics$ConnectionEvent;->-set2(Lcom/android/server/wifi/WifiMetrics$ConnectionEvent;J)J
+PLcom/android/server/wifi/WifiMetrics$ConnectionEvent;->-set3(Lcom/android/server/wifi/WifiMetrics$ConnectionEvent;J)J
+PLcom/android/server/wifi/WifiMetrics$ConnectionEvent;->-set4(Lcom/android/server/wifi/WifiMetrics$ConnectionEvent;Z)Z
+PLcom/android/server/wifi/WifiMetrics$ConnectionEvent;->-set5(Lcom/android/server/wifi/WifiMetrics$ConnectionEvent;I)I
+PLcom/android/server/wifi/WifiMetrics$ConnectionEvent;-><init>(Lcom/android/server/wifi/WifiMetrics;)V
+PLcom/android/server/wifi/WifiMetrics$ConnectionEvent;-><init>(Lcom/android/server/wifi/WifiMetrics;Lcom/android/server/wifi/WifiMetrics$ConnectionEvent;)V
+PLcom/android/server/wifi/WifiMetrics$ConnectionEvent;->toString()Ljava/lang/String;
+PLcom/android/server/wifi/WifiMetrics$RouterFingerPrint;->-get0(Lcom/android/server/wifi/WifiMetrics$RouterFingerPrint;)Lcom/android/server/wifi/nano/WifiMetricsProto$RouterFingerPrint;
+PLcom/android/server/wifi/WifiMetrics$RouterFingerPrint;-><init>(Lcom/android/server/wifi/WifiMetrics;)V
+PLcom/android/server/wifi/WifiMetrics$RouterFingerPrint;->toString()Ljava/lang/String;
+PLcom/android/server/wifi/WifiMetrics$RouterFingerPrint;->updateFromWifiConfiguration(Landroid/net/wifi/WifiConfiguration;)V
+PLcom/android/server/wifi/WifiMetrics;->-get0(Lcom/android/server/wifi/WifiMetrics;)Lcom/android/server/wifi/WifiMetrics$ConnectionEvent;
+PLcom/android/server/wifi/WifiMetrics;->-get1(Lcom/android/server/wifi/WifiMetrics;)Ljava/lang/Object;
+PLcom/android/server/wifi/WifiMetrics;->-getandroid-net-wifi-SupplicantStateSwitchesValues()[I
+PLcom/android/server/wifi/WifiMetrics;->-wrap0(Lcom/android/server/wifi/WifiMetrics;Landroid/os/Message;)V
+PLcom/android/server/wifi/WifiMetrics;->-wrap1(Lcom/android/server/wifi/WifiMetrics;Landroid/net/wifi/ScanResult;)V
+PLcom/android/server/wifi/WifiMetrics;-><init>(Lcom/android/server/wifi/Clock;Landroid/os/Looper;Lcom/android/server/wifi/aware/WifiAwareMetrics;)V
+PLcom/android/server/wifi/WifiMetrics;->addStaEvent(Lcom/android/server/wifi/nano/WifiMetricsProto$StaEvent;)V
+PLcom/android/server/wifi/WifiMetrics;->bitSetToInt(Ljava/util/BitSet;)I
+PLcom/android/server/wifi/WifiMetrics;->configInfoToString(Lcom/android/server/wifi/nano/WifiMetricsProto$StaEvent$ConfigInfo;)Ljava/lang/String;
+PLcom/android/server/wifi/WifiMetrics;->createConfigInfo(Landroid/net/wifi/WifiConfiguration;)Lcom/android/server/wifi/nano/WifiMetricsProto$StaEvent$ConfigInfo;
+PLcom/android/server/wifi/WifiMetrics;->endConnectionEvent(II)V
+PLcom/android/server/wifi/WifiMetrics;->getHandler()Landroid/os/Handler;
+PLcom/android/server/wifi/WifiMetrics;->getScanReturnEntry(I)I
+PLcom/android/server/wifi/WifiMetrics;->getSystemStateCount(IZ)I
+PLcom/android/server/wifi/WifiMetrics;->incrementNonEmptyScanResultCount()V
+PLcom/android/server/wifi/WifiMetrics;->incrementOneshotScanCount()V
+PLcom/android/server/wifi/WifiMetrics;->logStaEvent(I)V
+PLcom/android/server/wifi/WifiMetrics;->logStaEvent(IILandroid/net/wifi/WifiConfiguration;)V
+PLcom/android/server/wifi/WifiMetrics;->logStaEvent(ILandroid/net/wifi/WifiConfiguration;)V
+PLcom/android/server/wifi/WifiMetrics;->processMessage(Landroid/os/Message;)V
+PLcom/android/server/wifi/WifiMetrics;->setConnectionScanDetail(Lcom/android/server/wifi/ScanDetail;)V
+PLcom/android/server/wifi/WifiMetrics;->setPasspointManager(Lcom/android/server/wifi/hotspot2/PasspointManager;)V
+PLcom/android/server/wifi/WifiMetrics;->setScreenState(Z)V
+PLcom/android/server/wifi/WifiMetrics;->setWifiConfigManager(Lcom/android/server/wifi/WifiConfigManager;)V
+PLcom/android/server/wifi/WifiMetrics;->setWifiNetworkSelector(Lcom/android/server/wifi/WifiNetworkSelector;)V
+PLcom/android/server/wifi/WifiMetrics;->setWifiState(I)V
+PLcom/android/server/wifi/WifiMetrics;->staEventToString(Lcom/android/server/wifi/nano/WifiMetricsProto$StaEvent;)Ljava/lang/String;
+PLcom/android/server/wifi/WifiMetrics;->startConnectionEvent(Landroid/net/wifi/WifiConfiguration;Ljava/lang/String;I)V
+PLcom/android/server/wifi/WifiMetrics;->supplicantStateChangesBitmaskToString(I)Ljava/lang/String;
+PLcom/android/server/wifi/WifiMetrics;->supplicantStateToBit(Landroid/net/wifi/SupplicantState;)I
+PLcom/android/server/wifi/WifiMetrics;->updateMetricsFromNetworkDetail(Lcom/android/server/wifi/hotspot2/NetworkDetail;)V
+PLcom/android/server/wifi/WifiMetrics;->updateMetricsFromScanResult(Landroid/net/wifi/ScanResult;)V
+PLcom/android/server/wifi/WifiMetrics;->updateSavedNetworks(Ljava/util/List;)V
+PLcom/android/server/wifi/WifiMetrics;->updateSavedPasspointProfiles(II)V
+PLcom/android/server/wifi/WifiMonitor;-><init>(Lcom/android/server/wifi/WifiInjector;)V
+PLcom/android/server/wifi/WifiMonitor;->broadcastAssociatedBssidEvent(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiMonitor;->broadcastNetworkConnectionEvent(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/wifi/WifiMonitor;->broadcastScanResultEvent(Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiMonitor;->broadcastSupplicantConnectionEvent(Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiMonitor;->broadcastSupplicantDisconnectionEvent(Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiMonitor;->broadcastSupplicantStateChangeEvent(Ljava/lang/String;ILandroid/net/wifi/WifiSsid;Ljava/lang/String;Landroid/net/wifi/SupplicantState;)V
+PLcom/android/server/wifi/WifiMonitor;->enableVerboseLogging(I)V
+PLcom/android/server/wifi/WifiMonitor;->ensureConnectedLocked()Z
+PLcom/android/server/wifi/WifiMonitor;->registerHandler(Ljava/lang/String;ILandroid/os/Handler;)V
+PLcom/android/server/wifi/WifiMonitor;->sendMessage(Ljava/lang/String;IIILjava/lang/Object;)V
+PLcom/android/server/wifi/WifiMonitor;->setMonitoring(Ljava/lang/String;Z)V
+PLcom/android/server/wifi/WifiMonitor;->setMonitoringNone()V
+PLcom/android/server/wifi/WifiMonitor;->startMonitoring(Ljava/lang/String;Z)V
+PLcom/android/server/wifi/WifiMonitor;->stopAllMonitoring()V
+PLcom/android/server/wifi/WifiMulticastLockManager$Multicaster;-><init>(Lcom/android/server/wifi/WifiMulticastLockManager;Ljava/lang/String;Landroid/os/IBinder;)V
+PLcom/android/server/wifi/WifiMulticastLockManager$Multicaster;->getUid()I
+PLcom/android/server/wifi/WifiMulticastLockManager$Multicaster;->unlinkDeathRecipient()V
+PLcom/android/server/wifi/WifiMulticastLockManager;-><init>(Lcom/android/server/wifi/WifiMulticastLockManager$FilterController;Lcom/android/internal/app/IBatteryStats;)V
+PLcom/android/server/wifi/WifiMulticastLockManager;->acquireLock(Landroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiMulticastLockManager;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/wifi/WifiMulticastLockManager;->enableVerboseLogging(I)V
+PLcom/android/server/wifi/WifiMulticastLockManager;->releaseLock()V
+PLcom/android/server/wifi/WifiMulticastLockManager;->removeMulticasterLocked(II)V
+PLcom/android/server/wifi/WifiNative$BucketSettings;-><init>()V
+PLcom/android/server/wifi/WifiNative$ChannelSettings;-><init>()V
+PLcom/android/server/wifi/WifiNative$FateReport;->getTableHeader()Ljava/lang/String;
+PLcom/android/server/wifi/WifiNative$RoamingCapabilities;-><init>()V
+PLcom/android/server/wifi/WifiNative$RoamingConfig;-><init>()V
+PLcom/android/server/wifi/WifiNative$RxFateReport;-><init>(BJB[B)V
+PLcom/android/server/wifi/WifiNative$RxFateReport;->directionToString()Ljava/lang/String;
+PLcom/android/server/wifi/WifiNative$RxFateReport;->fateToString()Ljava/lang/String;
+PLcom/android/server/wifi/WifiNative$RxFateReport;->toTableRowString()Ljava/lang/String;
+PLcom/android/server/wifi/WifiNative$ScanCapabilities;-><init>()V
+PLcom/android/server/wifi/WifiNative$ScanSettings;-><init>()V
+PLcom/android/server/wifi/WifiNative$TxFateReport;-><init>(BJB[B)V
+PLcom/android/server/wifi/WifiNative$TxFateReport;->directionToString()Ljava/lang/String;
+PLcom/android/server/wifi/WifiNative$TxFateReport;->fateToString()Ljava/lang/String;
+PLcom/android/server/wifi/WifiNative$TxFateReport;->toTableRowString()Ljava/lang/String;
+PLcom/android/server/wifi/WifiNative;-><init>(Ljava/lang/String;Lcom/android/server/wifi/WifiVendorHal;Lcom/android/server/wifi/SupplicantStaIfaceHal;Lcom/android/server/wifi/WificondControl;)V
+PLcom/android/server/wifi/WifiNative;->configureNeighborDiscoveryOffload(Z)Z
+PLcom/android/server/wifi/WifiNative;->configureRoaming(Lcom/android/server/wifi/WifiNative$RoamingConfig;)Z
+PLcom/android/server/wifi/WifiNative;->connectToNetwork(Landroid/net/wifi/WifiConfiguration;)Z
+PLcom/android/server/wifi/WifiNative;->connectToSupplicant()Z
+PLcom/android/server/wifi/WifiNative;->disconnect()Z
+PLcom/android/server/wifi/WifiNative;->enableStaAutoReconnect(Z)Z
+PLcom/android/server/wifi/WifiNative;->enableSupplicant()Z
+PLcom/android/server/wifi/WifiNative;->enableVerboseLogging(I)V
+PLcom/android/server/wifi/WifiNative;->getApfCapabilities()Landroid/net/apf/ApfCapabilities;
+PLcom/android/server/wifi/WifiNative;->getBgScanCapabilities(Lcom/android/server/wifi/WifiNative$ScanCapabilities;)Z
+PLcom/android/server/wifi/WifiNative;->getDriverVersion()Ljava/lang/String;
+PLcom/android/server/wifi/WifiNative;->getFirmwareVersion()Ljava/lang/String;
+PLcom/android/server/wifi/WifiNative;->getFrameworkNetworkId(I)I
+PLcom/android/server/wifi/WifiNative;->getInterfaceName()Ljava/lang/String;
+PLcom/android/server/wifi/WifiNative;->getMacAddress()Ljava/lang/String;
+PLcom/android/server/wifi/WifiNative;->getRingBufferData(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiNative;->getRingBufferStatus()[Lcom/android/server/wifi/WifiNative$RingBufferStatus;
+PLcom/android/server/wifi/WifiNative;->getRoamingCapabilities(Lcom/android/server/wifi/WifiNative$RoamingCapabilities;)Z
+PLcom/android/server/wifi/WifiNative;->getRxPktFates([Lcom/android/server/wifi/WifiNative$RxFateReport;)Z
+PLcom/android/server/wifi/WifiNative;->getSupportedFeatureSet()I
+PLcom/android/server/wifi/WifiNative;->getSupportedLoggerFeatureSet()I
+PLcom/android/server/wifi/WifiNative;->getTxPktFates([Lcom/android/server/wifi/WifiNative$TxFateReport;)Z
+PLcom/android/server/wifi/WifiNative;->getWlanWakeReasonCount()Landroid/net/wifi/WifiWakeReasonAndCounts;
+PLcom/android/server/wifi/WifiNative;->initializeVendorHal(Lcom/android/server/wifi/WifiNative$VendorHalDeathEventHandler;)Z
+PLcom/android/server/wifi/WifiNative;->installPacketFilter([B)Z
+PLcom/android/server/wifi/WifiNative;->readKernelLog()Ljava/lang/String;
+PLcom/android/server/wifi/WifiNative;->removeAllNetworks()Z
+PLcom/android/server/wifi/WifiNative;->scan(Ljava/util/Set;Ljava/util/Set;)Z
+PLcom/android/server/wifi/WifiNative;->setBluetoothCoexistenceMode(I)Z
+PLcom/android/server/wifi/WifiNative;->setBluetoothCoexistenceScanMode(Z)Z
+PLcom/android/server/wifi/WifiNative;->setConcurrencyPriority(Z)Z
+PLcom/android/server/wifi/WifiNative;->setConfigMethods(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiNative;->setConfiguredNetworkBSSID(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiNative;->setCountryCode(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiNative;->setDeviceName(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiNative;->setDeviceType(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiNative;->setExternalSim(Z)Z
+PLcom/android/server/wifi/WifiNative;->setLoggingEventHandler(Lcom/android/server/wifi/WifiNative$WifiLoggerEventHandler;)Z
+PLcom/android/server/wifi/WifiNative;->setManufacturer(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiNative;->setModelName(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiNative;->setModelNumber(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiNative;->setPowerSave(Z)V
+PLcom/android/server/wifi/WifiNative;->setScanningMacOui([B)Z
+PLcom/android/server/wifi/WifiNative;->setSerialNumber(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiNative;->setSupplicantLogLevel(Z)V
+PLcom/android/server/wifi/WifiNative;->setSuspendOptimizations(Z)Z
+PLcom/android/server/wifi/WifiNative;->setupForClientMode()Landroid/util/Pair;
+PLcom/android/server/wifi/WifiNative;->startHalIfNecessary(Z)Z
+PLcom/android/server/wifi/WifiNative;->startLoggingRingBuffer(IIIILjava/lang/String;)Z
+PLcom/android/server/wifi/WifiNative;->startPktFateMonitoring()Z
+PLcom/android/server/wifi/WifiNative;->stopFilteringMulticastV4Packets()Z
+PLcom/android/server/wifi/WifiNative;->stopFilteringMulticastV6Packets()Z
+PLcom/android/server/wifi/WifiNative;->stopHalIfNecessary()V
+PLcom/android/server/wifi/WifiNative;->stopRssiMonitoring()I
+PLcom/android/server/wifi/WifiNative;->tearDown()V
+PLcom/android/server/wifi/WifiNetworkHistory;-><init>(Landroid/content/Context;Lcom/android/server/net/DelayedDiskWrite;)V
+PLcom/android/server/wifi/WifiNetworkSelector;-><init>(Landroid/content/Context;Lcom/android/server/wifi/WifiConfigManager;Lcom/android/server/wifi/Clock;Landroid/util/LocalLog;)V
+PLcom/android/server/wifi/WifiNetworkSelector;->getConnectableScanDetails()Ljava/util/List;
+PLcom/android/server/wifi/WifiNetworkSelector;->overrideCandidateWithUserConnectChoice(Landroid/net/wifi/WifiConfiguration;)Landroid/net/wifi/WifiConfiguration;
+PLcom/android/server/wifi/WifiNetworkSelector;->registerNetworkEvaluator(Lcom/android/server/wifi/WifiNetworkSelector$NetworkEvaluator;I)Z
+PLcom/android/server/wifi/WifiNetworkSelector;->toNetworkString(Landroid/net/wifi/WifiConfiguration;)Ljava/lang/String;
+PLcom/android/server/wifi/WifiScoreReport;-><init>(Landroid/content/Context;Lcom/android/server/wifi/WifiConfigManager;Lcom/android/server/wifi/Clock;)V
+PLcom/android/server/wifi/WifiScoreReport;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiScoreReport;->enableVerboseLogging(Z)V
+PLcom/android/server/wifi/WifiScoreReport;->reset()V
+PLcom/android/server/wifi/WifiService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wifi/WifiService;->onBootPhase(I)V
+PLcom/android/server/wifi/WifiService;->onStart()V
+PLcom/android/server/wifi/WifiService;->onUnlockUser(I)V
+PLcom/android/server/wifi/WifiServiceImpl$1;-><init>(Lcom/android/server/wifi/WifiServiceImpl;)V
+PLcom/android/server/wifi/WifiServiceImpl$2;-><init>(Lcom/android/server/wifi/WifiServiceImpl;)V
+PLcom/android/server/wifi/WifiServiceImpl$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/wifi/WifiServiceImpl$3;-><init>(Lcom/android/server/wifi/WifiServiceImpl;)V
+PLcom/android/server/wifi/WifiServiceImpl$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/wifi/WifiServiceImpl$4;-><init>(Lcom/android/server/wifi/WifiServiceImpl;)V
+PLcom/android/server/wifi/WifiServiceImpl$5;-><init>(Lcom/android/server/wifi/WifiServiceImpl;Landroid/os/Handler;)V
+PLcom/android/server/wifi/WifiServiceImpl$6;-><init>(Lcom/android/server/wifi/WifiServiceImpl;Landroid/os/Handler;)V
+PLcom/android/server/wifi/WifiServiceImpl$7;-><init>(Lcom/android/server/wifi/WifiServiceImpl;Landroid/os/Handler;)V
+PLcom/android/server/wifi/WifiServiceImpl$8;-><init>(Lcom/android/server/wifi/WifiServiceImpl;)V
+PLcom/android/server/wifi/WifiServiceImpl$ClientHandler;-><init>(Lcom/android/server/wifi/WifiServiceImpl;Ljava/lang/String;Landroid/os/Looper;)V
+PLcom/android/server/wifi/WifiServiceImpl$ClientHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/wifi/WifiServiceImpl$WifiStateMachineHandler;-><init>(Lcom/android/server/wifi/WifiServiceImpl;Ljava/lang/String;Landroid/os/Looper;Lcom/android/internal/util/AsyncChannel;)V
+PLcom/android/server/wifi/WifiServiceImpl$WifiStateMachineHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/wifi/WifiServiceImpl;->-get0(Lcom/android/server/wifi/WifiServiceImpl;)Landroid/content/Context;
+PLcom/android/server/wifi/WifiServiceImpl;->-get1(Lcom/android/server/wifi/WifiServiceImpl;)Lcom/android/server/wifi/WifiCountryCode;
+PLcom/android/server/wifi/WifiServiceImpl;->-get2(Lcom/android/server/wifi/WifiServiceImpl;)Lcom/android/server/wifi/FrameworkFacade;
+PLcom/android/server/wifi/WifiServiceImpl;->-get3(Lcom/android/server/wifi/WifiServiceImpl;)Lcom/android/server/wifi/WifiTrafficPoller;
+PLcom/android/server/wifi/WifiServiceImpl;->-get4(Lcom/android/server/wifi/WifiServiceImpl;)Lcom/android/server/wifi/WifiController;
+PLcom/android/server/wifi/WifiServiceImpl;->-set0(Lcom/android/server/wifi/WifiServiceImpl;Lcom/android/internal/util/AsyncChannel;)Lcom/android/internal/util/AsyncChannel;
+PLcom/android/server/wifi/WifiServiceImpl;-><init>(Landroid/content/Context;Lcom/android/server/wifi/WifiInjector;Lcom/android/internal/util/AsyncChannel;)V
+PLcom/android/server/wifi/WifiServiceImpl;->acquireMulticastLock(Landroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiServiceImpl;->checkAndStartWifi()V
+PLcom/android/server/wifi/WifiServiceImpl;->checkNetworkSettingsPermission(II)Z
+PLcom/android/server/wifi/WifiServiceImpl;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiServiceImpl;->enableVerboseLoggingInternal(I)V
+PLcom/android/server/wifi/WifiServiceImpl;->enforceChangePermission()V
+PLcom/android/server/wifi/WifiServiceImpl;->enforceMulticastChangePermission()V
+PLcom/android/server/wifi/WifiServiceImpl;->getSupportedFeatures()I
+PLcom/android/server/wifi/WifiServiceImpl;->getVerboseLoggingLevel()I
+PLcom/android/server/wifi/WifiServiceImpl;->getWifiApEnabledState()I
+PLcom/android/server/wifi/WifiServiceImpl;->getWifiServiceMessenger()Landroid/os/Messenger;
+PLcom/android/server/wifi/WifiServiceImpl;->handleUserUnlock(I)V
+PLcom/android/server/wifi/WifiServiceImpl;->isRequestFromBackground(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiServiceImpl;->isScanAlwaysAvailable()Z
+PLcom/android/server/wifi/WifiServiceImpl;->registerForBackgroundThrottleChanges()V
+PLcom/android/server/wifi/WifiServiceImpl;->registerForBroadcasts()V
+PLcom/android/server/wifi/WifiServiceImpl;->registerForPackageOrUserRemoval()V
+PLcom/android/server/wifi/WifiServiceImpl;->registerForScanModeChange()V
+PLcom/android/server/wifi/WifiServiceImpl;->releaseMulticastLock()V
+PLcom/android/server/wifi/WifiServiceImpl;->setWifiEnabled(Ljava/lang/String;Z)Z
+PLcom/android/server/wifi/WifiServiceImpl;->startScan(Landroid/net/wifi/ScanSettings;Landroid/os/WorkSource;Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiServiceImpl;->updateBackgroundThrottleInterval()V
+PLcom/android/server/wifi/WifiServiceImpl;->updateBackgroundThrottlingWhitelist()V
+PLcom/android/server/wifi/WifiSettingsStore;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wifi/WifiSettingsStore;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiSettingsStore;->getPersistedAirplaneModeOn()Z
+PLcom/android/server/wifi/WifiSettingsStore;->getPersistedScanAlwaysAvailable()Z
+PLcom/android/server/wifi/WifiSettingsStore;->getPersistedWifiState()I
+PLcom/android/server/wifi/WifiSettingsStore;->getWifiSavedState()I
+PLcom/android/server/wifi/WifiSettingsStore;->handleAirplaneModeToggled()Z
+PLcom/android/server/wifi/WifiSettingsStore;->handleWifiToggled(Z)Z
+PLcom/android/server/wifi/WifiSettingsStore;->isAirplaneModeOn()Z
+PLcom/android/server/wifi/WifiSettingsStore;->isAirplaneSensitive()Z
+PLcom/android/server/wifi/WifiSettingsStore;->isScanAlwaysAvailable()Z
+PLcom/android/server/wifi/WifiSettingsStore;->isWifiToggleEnabled()Z
+PLcom/android/server/wifi/WifiSettingsStore;->persistWifiState(I)V
+PLcom/android/server/wifi/WifiSettingsStore;->testAndClearWifiSavedState()Z
+PLcom/android/server/wifi/WifiStateMachine$1;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$2;-><init>(Lcom/android/server/wifi/WifiStateMachine;Landroid/os/Handler;)V
+PLcom/android/server/wifi/WifiStateMachine$3;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/wifi/WifiStateMachine$4;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$4;->onResults([Landroid/net/wifi/WifiScanner$ScanData;)V
+PLcom/android/server/wifi/WifiStateMachine$4;->onSuccess()V
+PLcom/android/server/wifi/WifiStateMachine$ConnectModeState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$ConnectModeState;->enter()V
+PLcom/android/server/wifi/WifiStateMachine$ConnectedState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$ConnectedState;->enter()V
+PLcom/android/server/wifi/WifiStateMachine$DefaultState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$DisconnectedState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$DisconnectedState;->enter()V
+PLcom/android/server/wifi/WifiStateMachine$DisconnectedState;->exit()V
+PLcom/android/server/wifi/WifiStateMachine$DisconnectedState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/WifiStateMachine$DisconnectingState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$InitialState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$InitialState;->cleanup()V
+PLcom/android/server/wifi/WifiStateMachine$InitialState;->enter()V
+PLcom/android/server/wifi/WifiStateMachine$InitialState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/WifiStateMachine$IpManagerCallback;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$IpManagerCallback;->installPacketFilter([B)V
+PLcom/android/server/wifi/WifiStateMachine$IpManagerCallback;->onLinkPropertiesChange(Landroid/net/LinkProperties;)V
+PLcom/android/server/wifi/WifiStateMachine$IpManagerCallback;->onNewDhcpResults(Landroid/net/DhcpResults;)V
+PLcom/android/server/wifi/WifiStateMachine$IpManagerCallback;->onPostDhcpAction()V
+PLcom/android/server/wifi/WifiStateMachine$IpManagerCallback;->onPreDhcpAction()V
+PLcom/android/server/wifi/WifiStateMachine$IpManagerCallback;->onProvisioningSuccess(Landroid/net/LinkProperties;)V
+PLcom/android/server/wifi/WifiStateMachine$IpManagerCallback;->setNeighborDiscoveryOffload(Z)V
+PLcom/android/server/wifi/WifiStateMachine$L2ConnectedState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$L2ConnectedState;->enter()V
+PLcom/android/server/wifi/WifiStateMachine$ObtainingIpState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$ObtainingIpState;->enter()V
+PLcom/android/server/wifi/WifiStateMachine$ObtainingIpState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/WifiStateMachine$RoamingState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$ScanModeState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$ScanModeState;->enter()V
+PLcom/android/server/wifi/WifiStateMachine$ScanModeState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/WifiStateMachine$SoftApState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$SupplicantStartedState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$SupplicantStartedState;->enter()V
+PLcom/android/server/wifi/WifiStateMachine$SupplicantStartingState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$SupplicantStartingState;->initializeWpsDetails()V
+PLcom/android/server/wifi/WifiStateMachine$SupplicantStartingState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/WifiStateMachine$SupplicantStoppingState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$UntrustedWifiNetworkFactory;-><init>(Lcom/android/server/wifi/WifiStateMachine;Landroid/os/Looper;Landroid/content/Context;Ljava/lang/String;Landroid/net/NetworkCapabilities;)V
+PLcom/android/server/wifi/WifiStateMachine$UntrustedWifiNetworkFactory;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiStateMachine$UntrustedWifiNetworkFactory;->needNetworkFor(Landroid/net/NetworkRequest;I)V
+PLcom/android/server/wifi/WifiStateMachine$WaitForP2pDisableState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine$WifiNetworkAgent;-><init>(Lcom/android/server/wifi/WifiStateMachine;Landroid/os/Looper;Landroid/content/Context;Ljava/lang/String;Landroid/net/NetworkInfo;Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;ILandroid/net/NetworkMisc;)V
+PLcom/android/server/wifi/WifiStateMachine$WifiNetworkAgent;->networkStatus(ILjava/lang/String;)V
+PLcom/android/server/wifi/WifiStateMachine$WifiNetworkAgent;->setSignalStrengthThresholds([I)V
+PLcom/android/server/wifi/WifiStateMachine$WifiNetworkFactory;-><init>(Lcom/android/server/wifi/WifiStateMachine;Landroid/os/Looper;Landroid/content/Context;Ljava/lang/String;Landroid/net/NetworkCapabilities;)V
+PLcom/android/server/wifi/WifiStateMachine$WifiNetworkFactory;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiStateMachine$WifiNetworkFactory;->needNetworkFor(Landroid/net/NetworkRequest;I)V
+PLcom/android/server/wifi/WifiStateMachine$WifiPhoneStateListener;-><init>(Lcom/android/server/wifi/WifiStateMachine;Landroid/os/Looper;)V
+PLcom/android/server/wifi/WifiStateMachine$WpsRunningState;-><init>(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine;->-get10(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/StateMachineDeathRecipient;
+PLcom/android/server/wifi/WifiStateMachine;->-get11(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/internal/util/State;
+PLcom/android/server/wifi/WifiStateMachine;->-get17(Lcom/android/server/wifi/WifiStateMachine;)Z
+PLcom/android/server/wifi/WifiStateMachine;->-get18(Lcom/android/server/wifi/WifiStateMachine;)Z
+PLcom/android/server/wifi/WifiStateMachine;->-get2(Lcom/android/server/wifi/WifiStateMachine;)Z
+PLcom/android/server/wifi/WifiStateMachine;->-get21(Lcom/android/server/wifi/WifiStateMachine;)Ljava/lang/String;
+PLcom/android/server/wifi/WifiStateMachine;->-get22(Lcom/android/server/wifi/WifiStateMachine;)Landroid/net/ip/IpManager;
+PLcom/android/server/wifi/WifiStateMachine;->-get24(Lcom/android/server/wifi/WifiStateMachine;)Z
+PLcom/android/server/wifi/WifiStateMachine;->-get25(Lcom/android/server/wifi/WifiStateMachine;)Ljava/lang/String;
+PLcom/android/server/wifi/WifiStateMachine;->-get27(Lcom/android/server/wifi/WifiStateMachine;)I
+PLcom/android/server/wifi/WifiStateMachine;->-get28(Lcom/android/server/wifi/WifiStateMachine;)Landroid/net/LinkProperties;
+PLcom/android/server/wifi/WifiStateMachine;->-get3(Lcom/android/server/wifi/WifiStateMachine;)Ljava/util/Queue;
+PLcom/android/server/wifi/WifiStateMachine;->-get30(Lcom/android/server/wifi/WifiStateMachine;)Landroid/net/NetworkCapabilities;
+PLcom/android/server/wifi/WifiStateMachine;->-get31(Lcom/android/server/wifi/WifiStateMachine;)Landroid/net/NetworkInfo;
+PLcom/android/server/wifi/WifiStateMachine;->-get32(Lcom/android/server/wifi/WifiStateMachine;)Landroid/net/NetworkMisc;
+PLcom/android/server/wifi/WifiStateMachine;->-get33(Lcom/android/server/wifi/WifiStateMachine;)I
+PLcom/android/server/wifi/WifiStateMachine;->-get34(Lcom/android/server/wifi/WifiStateMachine;)Landroid/os/INetworkManagementService;
+PLcom/android/server/wifi/WifiStateMachine;->-get35(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/internal/util/State;
+PLcom/android/server/wifi/WifiStateMachine;->-get36(Lcom/android/server/wifi/WifiStateMachine;)I
+PLcom/android/server/wifi/WifiStateMachine;->-get37(Lcom/android/server/wifi/WifiStateMachine;)Ljava/util/concurrent/atomic/AtomicBoolean;
+PLcom/android/server/wifi/WifiStateMachine;->-get38(Lcom/android/server/wifi/WifiStateMachine;)Z
+PLcom/android/server/wifi/WifiStateMachine;->-get4(Lcom/android/server/wifi/WifiStateMachine;)Landroid/net/wifi/IClientInterface;
+PLcom/android/server/wifi/WifiStateMachine;->-get40(Lcom/android/server/wifi/WifiStateMachine;)I
+PLcom/android/server/wifi/WifiStateMachine;->-get42(Lcom/android/server/wifi/WifiStateMachine;)Ljava/lang/String;
+PLcom/android/server/wifi/WifiStateMachine;->-get43(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/PropertyService;
+PLcom/android/server/wifi/WifiStateMachine;->-get47(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/internal/util/State;
+PLcom/android/server/wifi/WifiStateMachine;->-get48(Lcom/android/server/wifi/WifiStateMachine;)Z
+PLcom/android/server/wifi/WifiStateMachine;->-get5(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/Clock;
+PLcom/android/server/wifi/WifiStateMachine;->-get51(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/internal/util/State;
+PLcom/android/server/wifi/WifiStateMachine;->-get52(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/internal/util/State;
+PLcom/android/server/wifi/WifiStateMachine;->-get53(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/SupplicantStateTracker;
+PLcom/android/server/wifi/WifiStateMachine;->-get55(Lcom/android/server/wifi/WifiStateMachine;)I
+PLcom/android/server/wifi/WifiStateMachine;->-get57(Lcom/android/server/wifi/WifiStateMachine;)I
+PLcom/android/server/wifi/WifiStateMachine;->-get58(Lcom/android/server/wifi/WifiStateMachine;)Ljava/lang/String;
+PLcom/android/server/wifi/WifiStateMachine;->-get59(Lcom/android/server/wifi/WifiStateMachine;)Ljava/lang/String;
+PLcom/android/server/wifi/WifiStateMachine;->-get6(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/internal/util/State;
+PLcom/android/server/wifi/WifiStateMachine;->-get60(Lcom/android/server/wifi/WifiStateMachine;)Z
+PLcom/android/server/wifi/WifiStateMachine;->-get62(Lcom/android/server/wifi/WifiStateMachine;)I
+PLcom/android/server/wifi/WifiStateMachine;->-get64(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/WifiNative$VendorHalDeathEventHandler;
+PLcom/android/server/wifi/WifiStateMachine;->-get67(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/WifiConfigManager;
+PLcom/android/server/wifi/WifiStateMachine;->-get69(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/WifiConnectivityManager;
+PLcom/android/server/wifi/WifiStateMachine;->-get7(Lcom/android/server/wifi/WifiStateMachine;)I
+PLcom/android/server/wifi/WifiStateMachine;->-get70(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/BaseWifiDiagnostics;
+PLcom/android/server/wifi/WifiStateMachine;->-get72(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/WifiInjector;
+PLcom/android/server/wifi/WifiStateMachine;->-get75(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/WifiMonitor;
+PLcom/android/server/wifi/WifiStateMachine;->-get76(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/WifiNative;
+PLcom/android/server/wifi/WifiStateMachine;->-get77(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/internal/util/AsyncChannel;
+PLcom/android/server/wifi/WifiStateMachine;->-get78(Lcom/android/server/wifi/WifiStateMachine;)Ljava/lang/Object;
+PLcom/android/server/wifi/WifiStateMachine;->-get79(Lcom/android/server/wifi/WifiStateMachine;)Landroid/net/wifi/WifiScanner;
+PLcom/android/server/wifi/WifiStateMachine;->-get8(Lcom/android/server/wifi/WifiStateMachine;)Landroid/content/Context;
+PLcom/android/server/wifi/WifiStateMachine;->-get81(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/WifiStateTracker;
+PLcom/android/server/wifi/WifiStateMachine;->-get85(Lcom/android/server/wifi/WifiStateMachine;)Z
+PLcom/android/server/wifi/WifiStateMachine;->-get9(Lcom/android/server/wifi/WifiStateMachine;)Lcom/android/server/wifi/WifiCountryCode;
+PLcom/android/server/wifi/WifiStateMachine;->-set1(Lcom/android/server/wifi/WifiStateMachine;J)J
+PLcom/android/server/wifi/WifiStateMachine;->-set10(Lcom/android/server/wifi/WifiStateMachine;Z)Z
+PLcom/android/server/wifi/WifiStateMachine;->-set11(Lcom/android/server/wifi/WifiStateMachine;Z)Z
+PLcom/android/server/wifi/WifiStateMachine;->-set12(Lcom/android/server/wifi/WifiStateMachine;Z)Z
+PLcom/android/server/wifi/WifiStateMachine;->-set13(Lcom/android/server/wifi/WifiStateMachine;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/wifi/WifiStateMachine;->-set14(Lcom/android/server/wifi/WifiStateMachine;J)J
+PLcom/android/server/wifi/WifiStateMachine;->-set15(Lcom/android/server/wifi/WifiStateMachine;I)I
+PLcom/android/server/wifi/WifiStateMachine;->-set16(Lcom/android/server/wifi/WifiStateMachine;I)I
+PLcom/android/server/wifi/WifiStateMachine;->-set17(Lcom/android/server/wifi/WifiStateMachine;Lcom/android/server/wifi/WifiStateMachine$WifiNetworkAgent;)Lcom/android/server/wifi/WifiStateMachine$WifiNetworkAgent;
+PLcom/android/server/wifi/WifiStateMachine;->-set18(Lcom/android/server/wifi/WifiStateMachine;I)I
+PLcom/android/server/wifi/WifiStateMachine;->-set19(Lcom/android/server/wifi/WifiStateMachine;I)I
+PLcom/android/server/wifi/WifiStateMachine;->-set21(Lcom/android/server/wifi/WifiStateMachine;I)I
+PLcom/android/server/wifi/WifiStateMachine;->-set24(Lcom/android/server/wifi/WifiStateMachine;I)I
+PLcom/android/server/wifi/WifiStateMachine;->-set25(Lcom/android/server/wifi/WifiStateMachine;I)I
+PLcom/android/server/wifi/WifiStateMachine;->-set29(Lcom/android/server/wifi/WifiStateMachine;Lcom/android/server/wifi/WifiConnectivityManager;)Lcom/android/server/wifi/WifiConnectivityManager;
+PLcom/android/server/wifi/WifiStateMachine;->-set3(Lcom/android/server/wifi/WifiStateMachine;Landroid/net/wifi/IClientInterface;)Landroid/net/wifi/IClientInterface;
+PLcom/android/server/wifi/WifiStateMachine;->-set30(Lcom/android/server/wifi/WifiStateMachine;Landroid/net/wifi/WifiScanner;)Landroid/net/wifi/WifiScanner;
+PLcom/android/server/wifi/WifiStateMachine;->-set31(Lcom/android/server/wifi/WifiStateMachine;I)I
+PLcom/android/server/wifi/WifiStateMachine;->-set32(Lcom/android/server/wifi/WifiStateMachine;Landroid/net/wifi/WifiConfiguration;)Landroid/net/wifi/WifiConfiguration;
+PLcom/android/server/wifi/WifiStateMachine;->-set4(Lcom/android/server/wifi/WifiStateMachine;I)I
+PLcom/android/server/wifi/WifiStateMachine;->-set5(Lcom/android/server/wifi/WifiStateMachine;J)J
+PLcom/android/server/wifi/WifiStateMachine;->-set7(Lcom/android/server/wifi/WifiStateMachine;Z)Z
+PLcom/android/server/wifi/WifiStateMachine;->-set8(Lcom/android/server/wifi/WifiStateMachine;Z)Z
+PLcom/android/server/wifi/WifiStateMachine;->-set9(Lcom/android/server/wifi/WifiStateMachine;Z)Z
+PLcom/android/server/wifi/WifiStateMachine;->-wrap0(Lcom/android/server/wifi/WifiStateMachine;Landroid/os/Message;)Landroid/net/wifi/SupplicantState;
+PLcom/android/server/wifi/WifiStateMachine;->-wrap10(Lcom/android/server/wifi/WifiStateMachine;)Z
+PLcom/android/server/wifi/WifiStateMachine;->-wrap11(Lcom/android/server/wifi/WifiStateMachine;Landroid/net/wifi/WifiConfiguration;Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiStateMachine;->-wrap12(Lcom/android/server/wifi/WifiStateMachine;I)I
+PLcom/android/server/wifi/WifiStateMachine;->-wrap19(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap21(Lcom/android/server/wifi/WifiStateMachine;Landroid/net/DhcpResults;)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap25(Lcom/android/server/wifi/WifiStateMachine;Landroid/os/Message;)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap27(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap33(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap35(Lcom/android/server/wifi/WifiStateMachine;Landroid/os/Message;II)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap36(Lcom/android/server/wifi/WifiStateMachine;Landroid/os/Message;ILjava/lang/Object;)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap37(Lcom/android/server/wifi/WifiStateMachine;II)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap38(Lcom/android/server/wifi/WifiStateMachine;Landroid/net/wifi/WifiConfiguration;Ljava/lang/String;I)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap39(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap40(Lcom/android/server/wifi/WifiStateMachine;Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap42(Lcom/android/server/wifi/WifiStateMachine;Z)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap43(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap45(Lcom/android/server/wifi/WifiStateMachine;IZ)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap47(Lcom/android/server/wifi/WifiStateMachine;I)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap48(Lcom/android/server/wifi/WifiStateMachine;)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap49(Lcom/android/server/wifi/WifiStateMachine;Landroid/net/LinkProperties;)V
+PLcom/android/server/wifi/WifiStateMachine;->-wrap5(Lcom/android/server/wifi/WifiStateMachine;)Z
+PLcom/android/server/wifi/WifiStateMachine;->-wrap8(Lcom/android/server/wifi/WifiStateMachine;I)Z
+PLcom/android/server/wifi/WifiStateMachine;->-wrap9(Lcom/android/server/wifi/WifiStateMachine;Landroid/net/NetworkInfo$DetailedState;)Z
+PLcom/android/server/wifi/WifiStateMachine;-><init>(Landroid/content/Context;Lcom/android/server/wifi/FrameworkFacade;Landroid/os/Looper;Landroid/os/UserManager;Lcom/android/server/wifi/WifiInjector;Lcom/android/server/wifi/BackupManagerProxy;Lcom/android/server/wifi/WifiCountryCode;Lcom/android/server/wifi/WifiNative;Lcom/android/server/wifi/WrongPasswordNotifier;)V
+PLcom/android/server/wifi/WifiStateMachine;->checkAndSetConnectivityInstance()V
+PLcom/android/server/wifi/WifiStateMachine;->clearANQPCache()V
+PLcom/android/server/wifi/WifiStateMachine;->clearTargetBssid(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiStateMachine;->configureVerboseHalLogging(Z)V
+PLcom/android/server/wifi/WifiStateMachine;->doNetworkStatus(I)V
+PLcom/android/server/wifi/WifiStateMachine;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiStateMachine;->dumpIpManager(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiStateMachine;->enableRssiPolling(Z)V
+PLcom/android/server/wifi/WifiStateMachine;->enableVerboseLogging(I)V
+PLcom/android/server/wifi/WifiStateMachine;->getAdditionalWifiServiceInterfaces()V
+PLcom/android/server/wifi/WifiStateMachine;->getCurrentScanResult()Landroid/net/wifi/ScanResult;
+PLcom/android/server/wifi/WifiStateMachine;->getCurrentWifiConfiguration()Landroid/net/wifi/WifiConfiguration;
+PLcom/android/server/wifi/WifiStateMachine;->getLinkPropertiesSummary(Landroid/net/LinkProperties;)Ljava/lang/String;
+PLcom/android/server/wifi/WifiStateMachine;->getNetworkDetailedState()Landroid/net/NetworkInfo$DetailedState;
+PLcom/android/server/wifi/WifiStateMachine;->getWifiScoreReport()Lcom/android/server/wifi/WifiScoreReport;
+PLcom/android/server/wifi/WifiStateMachine;->handleIPv4Success(Landroid/net/DhcpResults;)V
+PLcom/android/server/wifi/WifiStateMachine;->handlePostDhcpSetup()V
+PLcom/android/server/wifi/WifiStateMachine;->handlePreDhcpSetup()V
+PLcom/android/server/wifi/WifiStateMachine;->handleScanRequest(Landroid/os/Message;)V
+PLcom/android/server/wifi/WifiStateMachine;->handleScreenStateChanged(Z)V
+PLcom/android/server/wifi/WifiStateMachine;->handleSuccessfulIpConfiguration()V
+PLcom/android/server/wifi/WifiStateMachine;->handleSupplicantStateChange(Landroid/os/Message;)Landroid/net/wifi/SupplicantState;
+PLcom/android/server/wifi/WifiStateMachine;->handleUserUnlock(I)V
+PLcom/android/server/wifi/WifiStateMachine;->hasConnectionRequests()Z
+PLcom/android/server/wifi/WifiStateMachine;->isConnected()Z
+PLcom/android/server/wifi/WifiStateMachine;->isLinkDebouncing()Z
+PLcom/android/server/wifi/WifiStateMachine;->isSupplicantTransientState()Z
+PLcom/android/server/wifi/WifiStateMachine;->log(Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiStateMachine;->logd(Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiStateMachine;->lookupFrameworkNetworkId(I)I
+PLcom/android/server/wifi/WifiStateMachine;->maybeRegisterNetworkFactory()V
+PLcom/android/server/wifi/WifiStateMachine;->maybeRegisterPhoneListener()V
+PLcom/android/server/wifi/WifiStateMachine;->obtainMessageWithWhatAndArg2(Landroid/os/Message;I)Landroid/os/Message;
+PLcom/android/server/wifi/WifiStateMachine;->p2pSendMessage(I)Z
+PLcom/android/server/wifi/WifiStateMachine;->p2pSendMessage(II)Z
+PLcom/android/server/wifi/WifiStateMachine;->registerConnected()V
+PLcom/android/server/wifi/WifiStateMachine;->reloadTlsNetworksAndReconnect()V
+PLcom/android/server/wifi/WifiStateMachine;->replyToMessage(Landroid/os/Message;II)V
+PLcom/android/server/wifi/WifiStateMachine;->replyToMessage(Landroid/os/Message;ILjava/lang/Object;)V
+PLcom/android/server/wifi/WifiStateMachine;->reportConnectionAttemptEnd(II)V
+PLcom/android/server/wifi/WifiStateMachine;->reportConnectionAttemptStart(Landroid/net/wifi/WifiConfiguration;Ljava/lang/String;I)V
+PLcom/android/server/wifi/WifiStateMachine;->reportOnTime()Ljava/lang/String;
+PLcom/android/server/wifi/WifiStateMachine;->resetSimAuthNetworks(Z)V
+PLcom/android/server/wifi/WifiStateMachine;->sendConnectedState()V
+PLcom/android/server/wifi/WifiStateMachine;->sendLinkConfigurationChangedBroadcast()V
+PLcom/android/server/wifi/WifiStateMachine;->sendNetworkStateChangeBroadcast(Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiStateMachine;->sendRssiChangeBroadcast(I)V
+PLcom/android/server/wifi/WifiStateMachine;->sendSupplicantConnectionChangedBroadcast(Z)V
+PLcom/android/server/wifi/WifiStateMachine;->setHighPerfModeEnabled(Z)V
+PLcom/android/server/wifi/WifiStateMachine;->setNetworkDetailedState(Landroid/net/NetworkInfo$DetailedState;)Z
+PLcom/android/server/wifi/WifiStateMachine;->setOperationalMode(I)V
+PLcom/android/server/wifi/WifiStateMachine;->setRandomMacOui()Z
+PLcom/android/server/wifi/WifiStateMachine;->setSupplicantLogLevel()V
+PLcom/android/server/wifi/WifiStateMachine;->setSupplicantRunning(Z)V
+PLcom/android/server/wifi/WifiStateMachine;->setSuspendOptimizations(IZ)V
+PLcom/android/server/wifi/WifiStateMachine;->setSuspendOptimizationsNative(IZ)V
+PLcom/android/server/wifi/WifiStateMachine;->setTargetBssid(Landroid/net/wifi/WifiConfiguration;Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiStateMachine;->setWifiState(I)V
+PLcom/android/server/wifi/WifiStateMachine;->shouldEvaluateWhetherToSendExplicitlySelected(Landroid/net/wifi/WifiConfiguration;)Z
+PLcom/android/server/wifi/WifiStateMachine;->startConnectToNetwork(ILjava/lang/String;)V
+PLcom/android/server/wifi/WifiStateMachine;->startFilteringMulticastPackets()V
+PLcom/android/server/wifi/WifiStateMachine;->startScan(IILandroid/net/wifi/ScanSettings;Landroid/os/WorkSource;)V
+PLcom/android/server/wifi/WifiStateMachine;->startScanNative(Ljava/util/Set;Ljava/util/List;Landroid/os/WorkSource;)Z
+PLcom/android/server/wifi/WifiStateMachine;->stopFilteringMulticastPackets()V
+PLcom/android/server/wifi/WifiStateMachine;->stopIpManager()V
+PLcom/android/server/wifi/WifiStateMachine;->stopRssiMonitoringOffload()I
+PLcom/android/server/wifi/WifiStateMachine;->syncGetConfiguredNetworks(ILcom/android/internal/util/AsyncChannel;)Ljava/util/List;
+PLcom/android/server/wifi/WifiStateMachine;->syncGetDhcpResults()Landroid/net/DhcpResults;
+PLcom/android/server/wifi/WifiStateMachine;->syncGetLinkLayerStats(Lcom/android/internal/util/AsyncChannel;)Landroid/net/wifi/WifiLinkLayerStats;
+PLcom/android/server/wifi/WifiStateMachine;->syncGetSupportedFeatures(Lcom/android/internal/util/AsyncChannel;)I
+PLcom/android/server/wifi/WifiStateMachine;->syncGetWifiApState()I
+PLcom/android/server/wifi/WifiStateMachine;->syncGetWifiStateByName()Ljava/lang/String;
+PLcom/android/server/wifi/WifiStateMachine;->syncInitialize(Lcom/android/internal/util/AsyncChannel;)Z
+PLcom/android/server/wifi/WifiStateMachine;->updateBatteryWorkSource(Landroid/os/WorkSource;)V
+PLcom/android/server/wifi/WifiStateMachine;->updateCapabilities()V
+PLcom/android/server/wifi/WifiStateMachine;->updateCapabilities(Landroid/net/wifi/WifiConfiguration;)V
+PLcom/android/server/wifi/WifiStateMachine;->updateLinkProperties(Landroid/net/LinkProperties;)V
+PLcom/android/server/wifi/WifiStateMachine;->updateWifiMetrics()V
+PLcom/android/server/wifi/WifiStateTracker;-><init>(Lcom/android/internal/app/IBatteryStats;)V
+PLcom/android/server/wifi/WifiStateTracker;->informWifiStateBatteryStats(I)V
+PLcom/android/server/wifi/WifiStateTracker;->updateState(I)V
+PLcom/android/server/wifi/WifiTrafficPoller$1;-><init>(Lcom/android/server/wifi/WifiTrafficPoller;)V
+PLcom/android/server/wifi/WifiTrafficPoller$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/wifi/WifiTrafficPoller$TrafficHandler;-><init>(Lcom/android/server/wifi/WifiTrafficPoller;Landroid/os/Looper;)V
+PLcom/android/server/wifi/WifiTrafficPoller;->-get0(Lcom/android/server/wifi/WifiTrafficPoller;)Ljava/util/List;
+PLcom/android/server/wifi/WifiTrafficPoller;->-get1(Lcom/android/server/wifi/WifiTrafficPoller;)Z
+PLcom/android/server/wifi/WifiTrafficPoller;->-get4(Lcom/android/server/wifi/WifiTrafficPoller;)Z
+PLcom/android/server/wifi/WifiTrafficPoller;->-set0(Lcom/android/server/wifi/WifiTrafficPoller;Z)Z
+PLcom/android/server/wifi/WifiTrafficPoller;->-set1(Lcom/android/server/wifi/WifiTrafficPoller;Landroid/net/NetworkInfo;)Landroid/net/NetworkInfo;
+PLcom/android/server/wifi/WifiTrafficPoller;->-set2(Lcom/android/server/wifi/WifiTrafficPoller;I)I
+PLcom/android/server/wifi/WifiTrafficPoller;->-wrap0(Lcom/android/server/wifi/WifiTrafficPoller;)V
+PLcom/android/server/wifi/WifiTrafficPoller;-><init>(Landroid/content/Context;Landroid/os/Looper;Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiTrafficPoller;->addClient(Landroid/os/Messenger;)V
+PLcom/android/server/wifi/WifiTrafficPoller;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/WifiTrafficPoller;->evaluateTrafficStatsPolling()V
+PLcom/android/server/wifi/WifiVendorHal$5AnswerBox;-><init>(Lcom/android/server/wifi/WifiVendorHal;)V
+PLcom/android/server/wifi/WifiVendorHal$6AnswerBox;-><init>(Lcom/android/server/wifi/WifiVendorHal;)V
+PLcom/android/server/wifi/WifiVendorHal$9AnswerBox;-><init>(Lcom/android/server/wifi/WifiVendorHal;)V
+PLcom/android/server/wifi/WifiVendorHal$ChipEventCallback;-><init>(Lcom/android/server/wifi/WifiVendorHal;)V
+PLcom/android/server/wifi/WifiVendorHal$ChipEventCallback;-><init>(Lcom/android/server/wifi/WifiVendorHal;Lcom/android/server/wifi/WifiVendorHal$ChipEventCallback;)V
+PLcom/android/server/wifi/WifiVendorHal$HalDeviceManagerStatusListener;-><init>(Lcom/android/server/wifi/WifiVendorHal;)V
+PLcom/android/server/wifi/WifiVendorHal$HalDeviceManagerStatusListener;->onStatusChanged()V
+PLcom/android/server/wifi/WifiVendorHal$RttEventCallback;-><init>(Lcom/android/server/wifi/WifiVendorHal;)V
+PLcom/android/server/wifi/WifiVendorHal$RttEventCallback;-><init>(Lcom/android/server/wifi/WifiVendorHal;Lcom/android/server/wifi/WifiVendorHal$RttEventCallback;)V
+PLcom/android/server/wifi/WifiVendorHal$StaIfaceEventCallback;-><init>(Lcom/android/server/wifi/WifiVendorHal;)V
+PLcom/android/server/wifi/WifiVendorHal$StaIfaceEventCallback;-><init>(Lcom/android/server/wifi/WifiVendorHal;Lcom/android/server/wifi/WifiVendorHal$StaIfaceEventCallback;)V
+PLcom/android/server/wifi/WifiVendorHal;->-get1(Lcom/android/server/wifi/WifiVendorHal;)Lcom/android/server/wifi/HalDeviceManager;
+PLcom/android/server/wifi/WifiVendorHal;->-get7()Landroid/net/apf/ApfCapabilities;
+PLcom/android/server/wifi/WifiVendorHal;-><init>(Lcom/android/server/wifi/HalDeviceManager;Landroid/os/Looper;)V
+PLcom/android/server/wifi/WifiVendorHal;->boolResult(Z)Z
+PLcom/android/server/wifi/WifiVendorHal;->configureNeighborDiscoveryOffload(Z)Z
+PLcom/android/server/wifi/WifiVendorHal;->configureRoaming(Lcom/android/server/wifi/WifiNative$RoamingConfig;)Z
+PLcom/android/server/wifi/WifiVendorHal;->enableLinkLayerStats()V
+PLcom/android/server/wifi/WifiVendorHal;->enableVerboseLogging(Z)V
+PLcom/android/server/wifi/WifiVendorHal;->getApfCapabilities()Landroid/net/apf/ApfCapabilities;
+PLcom/android/server/wifi/WifiVendorHal;->getBgScanCapabilities(Lcom/android/server/wifi/WifiNative$ScanCapabilities;)Z
+PLcom/android/server/wifi/WifiVendorHal;->getDriverVersion()Ljava/lang/String;
+PLcom/android/server/wifi/WifiVendorHal;->getFirmwareVersion()Ljava/lang/String;
+PLcom/android/server/wifi/WifiVendorHal;->getRingBufferData(Ljava/lang/String;)Z
+PLcom/android/server/wifi/WifiVendorHal;->getRingBufferStatus()[Lcom/android/server/wifi/WifiNative$RingBufferStatus;
+PLcom/android/server/wifi/WifiVendorHal;->getRoamingCapabilities(Lcom/android/server/wifi/WifiNative$RoamingCapabilities;)Z
+PLcom/android/server/wifi/WifiVendorHal;->getRxPktFates([Lcom/android/server/wifi/WifiNative$RxFateReport;)Z
+PLcom/android/server/wifi/WifiVendorHal;->getSupportedLoggerFeatureSet()I
+PLcom/android/server/wifi/WifiVendorHal;->getTxPktFates([Lcom/android/server/wifi/WifiNative$TxFateReport;)Z
+PLcom/android/server/wifi/WifiVendorHal;->getWlanWakeReasonCount()Landroid/net/wifi/WifiWakeReasonAndCounts;
+PLcom/android/server/wifi/WifiVendorHal;->halToFrameworkPktFateFrameType(I)B
+PLcom/android/server/wifi/WifiVendorHal;->halToFrameworkRxPktFate(I)B
+PLcom/android/server/wifi/WifiVendorHal;->halToFrameworkTxPktFate(I)B
+PLcom/android/server/wifi/WifiVendorHal;->halToFrameworkWakeReasons(Landroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonStats;)Landroid/net/wifi/WifiWakeReasonAndCounts;
+PLcom/android/server/wifi/WifiVendorHal;->initialize(Lcom/android/server/wifi/WifiNative$VendorHalDeathEventHandler;)Z
+PLcom/android/server/wifi/WifiVendorHal;->installPacketFilter([B)Z
+PLcom/android/server/wifi/WifiVendorHal;->intsFromArrayList(Ljava/util/ArrayList;)[I
+PLcom/android/server/wifi/WifiVendorHal;->isVendorHalSupported()Z
+PLcom/android/server/wifi/WifiVendorHal;->lambda$-com_android_server_wifi_WifiVendorHal_15968(Lcom/android/server/wifi/WifiNative$ScanCapabilities;Landroid/util/MutableBoolean;Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaBackgroundScanCapabilities;)V
+PLcom/android/server/wifi/WifiVendorHal;->lambda$-com_android_server_wifi_WifiVendorHal_33324(Landroid/util/MutableInt;Landroid/hardware/wifi/V1_0/WifiStatus;I)V
+PLcom/android/server/wifi/WifiVendorHal;->lambda$-com_android_server_wifi_WifiVendorHal_33628(Landroid/util/MutableInt;Landroid/hardware/wifi/V1_0/WifiStatus;I)V
+PLcom/android/server/wifi/WifiVendorHal;->lambda$-com_android_server_wifi_WifiVendorHal_58656(Lcom/android/server/wifi/WifiVendorHal$5AnswerBox;Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaApfPacketFilterCapabilities;)V
+PLcom/android/server/wifi/WifiVendorHal;->lambda$-com_android_server_wifi_WifiVendorHal_65573(Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/IWifiChip$ChipDebugInfo;)V
+PLcom/android/server/wifi/WifiVendorHal;->lambda$-com_android_server_wifi_WifiVendorHal_68516(Lcom/android/server/wifi/WifiVendorHal$6AnswerBox;Landroid/hardware/wifi/V1_0/WifiStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/WifiVendorHal;->lambda$-com_android_server_wifi_WifiVendorHal_84576(Lcom/android/server/wifi/WifiVendorHal$9AnswerBox;Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/WifiDebugHostWakeReasonStats;)V
+PLcom/android/server/wifi/WifiVendorHal;->lambda$-com_android_server_wifi_WifiVendorHal_86203(Lcom/android/server/wifi/WifiNative$RoamingCapabilities;Landroid/util/MutableBoolean;Landroid/hardware/wifi/V1_0/WifiStatus;Landroid/hardware/wifi/V1_0/StaRoamingCapabilities;)V
+PLcom/android/server/wifi/WifiVendorHal;->makeRingBufferStatusArray(Ljava/util/ArrayList;)[Lcom/android/server/wifi/WifiNative$RingBufferStatus;
+PLcom/android/server/wifi/WifiVendorHal;->niceMethodName([Ljava/lang/StackTraceElement;I)Ljava/lang/String;
+PLcom/android/server/wifi/WifiVendorHal;->registerChipCallback()Z
+PLcom/android/server/wifi/WifiVendorHal;->registerRttEventCallback()Z
+PLcom/android/server/wifi/WifiVendorHal;->registerStaIfaceCallback()Z
+PLcom/android/server/wifi/WifiVendorHal;->requestChipDebugInfo()V
+PLcom/android/server/wifi/WifiVendorHal;->setLoggingEventHandler(Lcom/android/server/wifi/WifiNative$WifiLoggerEventHandler;)Z
+PLcom/android/server/wifi/WifiVendorHal;->setScanningMacOui([B)Z
+PLcom/android/server/wifi/WifiVendorHal;->startLoggingRingBuffer(IIIILjava/lang/String;)Z
+PLcom/android/server/wifi/WifiVendorHal;->startPktFateMonitoring()Z
+PLcom/android/server/wifi/WifiVendorHal;->startVendorHal(Z)Z
+PLcom/android/server/wifi/WifiVendorHal;->stopRssiMonitoring()I
+PLcom/android/server/wifi/WifiVendorHal;->wifiFeatureMaskFromChipCapabilities(I)I
+PLcom/android/server/wifi/WificondControl$PnoScanEventHandler;-><init>(Lcom/android/server/wifi/WificondControl;)V
+PLcom/android/server/wifi/WificondControl$PnoScanEventHandler;-><init>(Lcom/android/server/wifi/WificondControl;Lcom/android/server/wifi/WificondControl$PnoScanEventHandler;)V
+PLcom/android/server/wifi/WificondControl$ScanEventHandler;-><init>(Lcom/android/server/wifi/WificondControl;)V
+PLcom/android/server/wifi/WificondControl$ScanEventHandler;-><init>(Lcom/android/server/wifi/WificondControl;Lcom/android/server/wifi/WificondControl$ScanEventHandler;)V
+PLcom/android/server/wifi/WificondControl;->-get0(Lcom/android/server/wifi/WificondControl;)Ljava/lang/String;
+PLcom/android/server/wifi/WificondControl;->-get1(Lcom/android/server/wifi/WificondControl;)Lcom/android/server/wifi/WifiMonitor;
+PLcom/android/server/wifi/WificondControl;-><init>(Lcom/android/server/wifi/WifiInjector;Lcom/android/server/wifi/WifiMonitor;Lcom/android/server/wifi/CarrierNetworkConfig;)V
+PLcom/android/server/wifi/WificondControl;->abortScan()V
+PLcom/android/server/wifi/WificondControl;->enableSupplicant()Z
+PLcom/android/server/wifi/WificondControl;->enableVerboseLogging(Z)V
+PLcom/android/server/wifi/WificondControl;->setupDriverForClientMode()Landroid/net/wifi/IClientInterface;
+PLcom/android/server/wifi/WificondControl;->tearDownInterfaces()Z
+PLcom/android/server/wifi/WrongPasswordNotifier;-><init>(Landroid/content/Context;Lcom/android/server/wifi/FrameworkFacade;)V
+PLcom/android/server/wifi/WrongPasswordNotifier;->onNewConnectionAttempt()V
+PLcom/android/server/wifi/aware/WifiAwareMetrics$HistParms;-><init>(IIIII)V
+PLcom/android/server/wifi/aware/WifiAwareMetrics;-><init>(Lcom/android/server/wifi/Clock;)V
+PLcom/android/server/wifi/aware/WifiAwareMetrics;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/wifi/hotspot2/ANQPRequestManager;-><init>(Lcom/android/server/wifi/hotspot2/PasspointEventHandler;Lcom/android/server/wifi/Clock;)V
+PLcom/android/server/wifi/hotspot2/AnqpCache;-><init>(Lcom/android/server/wifi/Clock;)V
+PLcom/android/server/wifi/hotspot2/AnqpCache;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/wifi/hotspot2/CertificateVerifier;-><init>()V
+PLcom/android/server/wifi/hotspot2/LegacyPasspointConfigParser;-><init>()V
+PLcom/android/server/wifi/hotspot2/NetworkDetail$Ant;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/wifi/hotspot2/NetworkDetail$HSRelease;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/wifi/hotspot2/NetworkDetail;->getAnt()Lcom/android/server/wifi/hotspot2/NetworkDetail$Ant;
+PLcom/android/server/wifi/hotspot2/NetworkDetail;->getWifiMode()I
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;-><init>(Lcom/android/server/wifi/WifiKeyStore;Lcom/android/server/wifi/SIMAccessor;Lcom/android/server/wifi/hotspot2/PasspointConfigStoreData$DataSource;)V
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;->deserializeData(Lorg/xmlpull/v1/XmlPullParser;IZ)V
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;->deserializeProviderList(Lorg/xmlpull/v1/XmlPullParser;I)Ljava/util/List;
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;->deserializeShareData(Lorg/xmlpull/v1/XmlPullParser;I)V
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;->deserializeUserData(Lorg/xmlpull/v1/XmlPullParser;I)V
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;->getName()Ljava/lang/String;
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;->resetData(Z)V
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;->resetShareData()V
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;->resetUserData()V
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;->serializeData(Lorg/xmlpull/v1/XmlSerializer;Z)V
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;->serializeProviderList(Lorg/xmlpull/v1/XmlSerializer;Ljava/util/List;)V
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;->serializeShareData(Lorg/xmlpull/v1/XmlSerializer;)V
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;->serializeUserData(Lorg/xmlpull/v1/XmlSerializer;)V
+PLcom/android/server/wifi/hotspot2/PasspointConfigStoreData;->supportShareData()Z
+PLcom/android/server/wifi/hotspot2/PasspointEventHandler;-><init>(Lcom/android/server/wifi/WifiNative;Lcom/android/server/wifi/hotspot2/PasspointEventHandler$Callbacks;)V
+PLcom/android/server/wifi/hotspot2/PasspointManager$CallbackHandler;-><init>(Lcom/android/server/wifi/hotspot2/PasspointManager;Landroid/content/Context;)V
+PLcom/android/server/wifi/hotspot2/PasspointManager$DataSourceHandler;-><init>(Lcom/android/server/wifi/hotspot2/PasspointManager;)V
+PLcom/android/server/wifi/hotspot2/PasspointManager$DataSourceHandler;-><init>(Lcom/android/server/wifi/hotspot2/PasspointManager;Lcom/android/server/wifi/hotspot2/PasspointManager$DataSourceHandler;)V
+PLcom/android/server/wifi/hotspot2/PasspointManager$DataSourceHandler;->getProviderIndex()J
+PLcom/android/server/wifi/hotspot2/PasspointManager$DataSourceHandler;->getProviders()Ljava/util/List;
+PLcom/android/server/wifi/hotspot2/PasspointManager$DataSourceHandler;->setProviderIndex(J)V
+PLcom/android/server/wifi/hotspot2/PasspointManager$DataSourceHandler;->setProviders(Ljava/util/List;)V
+PLcom/android/server/wifi/hotspot2/PasspointManager;->-get2(Lcom/android/server/wifi/hotspot2/PasspointManager;)J
+PLcom/android/server/wifi/hotspot2/PasspointManager;->-get3(Lcom/android/server/wifi/hotspot2/PasspointManager;)Ljava/util/Map;
+PLcom/android/server/wifi/hotspot2/PasspointManager;->-set0(Lcom/android/server/wifi/hotspot2/PasspointManager;J)J
+PLcom/android/server/wifi/hotspot2/PasspointManager;-><init>(Landroid/content/Context;Lcom/android/server/wifi/WifiNative;Lcom/android/server/wifi/WifiKeyStore;Lcom/android/server/wifi/Clock;Lcom/android/server/wifi/SIMAccessor;Lcom/android/server/wifi/hotspot2/PasspointObjectFactory;Lcom/android/server/wifi/WifiConfigManager;Lcom/android/server/wifi/WifiConfigStore;Lcom/android/server/wifi/WifiMetrics;)V
+PLcom/android/server/wifi/hotspot2/PasspointManager;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/wifi/hotspot2/PasspointManager;->updateMetrics()V
+PLcom/android/server/wifi/hotspot2/PasspointNetworkEvaluator;-><init>(Lcom/android/server/wifi/hotspot2/PasspointManager;Lcom/android/server/wifi/WifiConfigManager;Landroid/util/LocalLog;)V
+PLcom/android/server/wifi/hotspot2/PasspointNetworkEvaluator;->update(Ljava/util/List;)V
+PLcom/android/server/wifi/hotspot2/PasspointObjectFactory;-><init>()V
+PLcom/android/server/wifi/hotspot2/PasspointObjectFactory;->makeANQPRequestManager(Lcom/android/server/wifi/hotspot2/PasspointEventHandler;Lcom/android/server/wifi/Clock;)Lcom/android/server/wifi/hotspot2/ANQPRequestManager;
+PLcom/android/server/wifi/hotspot2/PasspointObjectFactory;->makeAnqpCache(Lcom/android/server/wifi/Clock;)Lcom/android/server/wifi/hotspot2/AnqpCache;
+PLcom/android/server/wifi/hotspot2/PasspointObjectFactory;->makeCertificateVerifier()Lcom/android/server/wifi/hotspot2/CertificateVerifier;
+PLcom/android/server/wifi/hotspot2/PasspointObjectFactory;->makePasspointConfigStoreData(Lcom/android/server/wifi/WifiKeyStore;Lcom/android/server/wifi/SIMAccessor;Lcom/android/server/wifi/hotspot2/PasspointConfigStoreData$DataSource;)Lcom/android/server/wifi/hotspot2/PasspointConfigStoreData;
+PLcom/android/server/wifi/hotspot2/PasspointObjectFactory;->makePasspointEventHandler(Lcom/android/server/wifi/WifiNative;Lcom/android/server/wifi/hotspot2/PasspointEventHandler$Callbacks;)Lcom/android/server/wifi/hotspot2/PasspointEventHandler;
+PLcom/android/server/wifi/hotspot2/Utils;->hs2LogTag(Ljava/lang/Class;)Ljava/lang/String;
+PLcom/android/server/wifi/hotspot2/Utils;->toHMS(J)Ljava/lang/String;
+PLcom/android/server/wifi/hotspot2/anqp/Constants$ANQPElementType;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/wifi/p2p/-$Lambda$gT4KmMIiMXRpxldJVwXfElmESAo$19;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/wifi/p2p/-$Lambda$gT4KmMIiMXRpxldJVwXfElmESAo$1;->$m$0(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Landroid/hardware/wifi/supplicant/V1_0/ISupplicantIface;)V
+PLcom/android/server/wifi/p2p/-$Lambda$gT4KmMIiMXRpxldJVwXfElmESAo$1;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/wifi/p2p/-$Lambda$gT4KmMIiMXRpxldJVwXfElmESAo$1;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Landroid/hardware/wifi/supplicant/V1_0/ISupplicantIface;)V
+PLcom/android/server/wifi/p2p/-$Lambda$gT4KmMIiMXRpxldJVwXfElmESAo$2;->$m$0(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/p2p/-$Lambda$gT4KmMIiMXRpxldJVwXfElmESAo$2;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/wifi/p2p/-$Lambda$gT4KmMIiMXRpxldJVwXfElmESAo$2;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/p2p/-$Lambda$gT4KmMIiMXRpxldJVwXfElmESAo$5;->$m$0(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/p2p/-$Lambda$gT4KmMIiMXRpxldJVwXfElmESAo$5;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/wifi/p2p/-$Lambda$gT4KmMIiMXRpxldJVwXfElmESAo$5;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/p2p/-$Lambda$gT4KmMIiMXRpxldJVwXfElmESAo$9;->$m$0(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;[B)V
+PLcom/android/server/wifi/p2p/-$Lambda$gT4KmMIiMXRpxldJVwXfElmESAo$9;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/wifi/p2p/-$Lambda$gT4KmMIiMXRpxldJVwXfElmESAo$9;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;[B)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceCallback;-><init>(Ljava/lang/String;Lcom/android/server/wifi/p2p/WifiP2pMonitor;)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal$1;-><init>(Lcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal$1;->onRegistration(Ljava/lang/String;Ljava/lang/String;Z)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal$SupplicantResult;-><init>(Ljava/lang/String;)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal$SupplicantResult;->getResult()Ljava/lang/Object;
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal$SupplicantResult;->isSuccess()Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal$SupplicantResult;->setResult(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal$SupplicantResult;->setResult(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/lang/Object;)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->-get0(Lcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;)Ljava/lang/Object;
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->-wrap0(Lcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;)Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->-wrap1(Lcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;)Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;-><init>(Lcom/android/server/wifi/p2p/WifiP2pMonitor;)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->checkSupplicantP2pIfaceAndLogFailure(Ljava/lang/String;)Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->flush()Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->getDeviceAddress()Ljava/lang/String;
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->getP2pIfaceMockable(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantIface;)Landroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->getServiceManagerMockable()Landroid/hidl/manager/V1_0/IServiceManager;
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->getSupplicantMockable()Landroid/hardware/wifi/supplicant/V1_0/ISupplicant;
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->initSupplicantP2pIface()Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->initSupplicantService()Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->initialize()Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->isInitializationComplete()Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->isInitializationStarted()Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->lambda$-com_android_server_wifi_p2p_SupplicantP2pIfaceHal_10685(Lcom/android/server/wifi/p2p/SupplicantP2pIfaceHal$SupplicantResult;Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Landroid/hardware/wifi/supplicant/V1_0/ISupplicantIface;)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->lambda$-com_android_server_wifi_p2p_SupplicantP2pIfaceHal_35007(Lcom/android/server/wifi/p2p/SupplicantP2pIfaceHal$SupplicantResult;Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;[B)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->lambda$-com_android_server_wifi_p2p_SupplicantP2pIfaceHal_67534(Lcom/android/server/wifi/p2p/SupplicantP2pIfaceHal$SupplicantResult;Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->lambda$-com_android_server_wifi_p2p_SupplicantP2pIfaceHal_9579(Ljava/util/ArrayList;Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/util/ArrayList;)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->linkToServiceManagerDeath()Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->linkToSupplicantDeath()Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->linkToSupplicantP2pIfaceDeath()Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->listNetworks()Ljava/util/List;
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->loadGroups(Landroid/net/wifi/p2p/WifiP2pGroupList;)Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->logCompletion(Ljava/lang/String;Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->logd(Ljava/lang/String;)V
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->registerCallback(Landroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIfaceCallback;)Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->saveConfig()Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->serviceFlush()Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->setSsidPostfix(Ljava/lang/String;)Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->setWpsConfigMethods(Ljava/lang/String;)Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->setWpsDeviceName(Ljava/lang/String;)Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->setWpsDeviceType(Ljava/lang/String;)Z
+PLcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;->stringToWpsConfigMethod(Ljava/lang/String;)S
+PLcom/android/server/wifi/p2p/WifiP2pMonitor;-><init>(Lcom/android/server/wifi/WifiInjector;)V
+PLcom/android/server/wifi/p2p/WifiP2pMonitor;->broadcastSupplicantConnectionEvent(Ljava/lang/String;)V
+PLcom/android/server/wifi/p2p/WifiP2pMonitor;->ensureConnectedLocked()Z
+PLcom/android/server/wifi/p2p/WifiP2pMonitor;->isMonitoring(Ljava/lang/String;)Z
+PLcom/android/server/wifi/p2p/WifiP2pMonitor;->registerHandler(Ljava/lang/String;ILandroid/os/Handler;)V
+PLcom/android/server/wifi/p2p/WifiP2pMonitor;->sendMessage(Landroid/os/Handler;Landroid/os/Message;)V
+PLcom/android/server/wifi/p2p/WifiP2pMonitor;->sendMessage(Ljava/lang/String;I)V
+PLcom/android/server/wifi/p2p/WifiP2pMonitor;->sendMessage(Ljava/lang/String;Landroid/os/Message;)V
+PLcom/android/server/wifi/p2p/WifiP2pMonitor;->setMonitoring(Ljava/lang/String;Z)V
+PLcom/android/server/wifi/p2p/WifiP2pMonitor;->startMonitoring(Ljava/lang/String;)V
+PLcom/android/server/wifi/p2p/WifiP2pNative;-><init>(Ljava/lang/String;Lcom/android/server/wifi/p2p/SupplicantP2pIfaceHal;)V
+PLcom/android/server/wifi/p2p/WifiP2pNative;->connectToSupplicant()Z
+PLcom/android/server/wifi/p2p/WifiP2pNative;->getInterfaceName()Ljava/lang/String;
+PLcom/android/server/wifi/p2p/WifiP2pNative;->p2pFlush()Z
+PLcom/android/server/wifi/p2p/WifiP2pNative;->p2pGetDeviceAddress()Ljava/lang/String;
+PLcom/android/server/wifi/p2p/WifiP2pNative;->p2pListNetworks(Landroid/net/wifi/p2p/WifiP2pGroupList;)Z
+PLcom/android/server/wifi/p2p/WifiP2pNative;->p2pServiceFlush()Z
+PLcom/android/server/wifi/p2p/WifiP2pNative;->saveConfig()Z
+PLcom/android/server/wifi/p2p/WifiP2pNative;->setConfigMethods(Ljava/lang/String;)Z
+PLcom/android/server/wifi/p2p/WifiP2pNative;->setP2pDeviceName(Ljava/lang/String;)Z
+PLcom/android/server/wifi/p2p/WifiP2pNative;->setP2pDeviceType(Ljava/lang/String;)Z
+PLcom/android/server/wifi/p2p/WifiP2pNative;->setP2pSsidPostfix(Ljava/lang/String;)Z
+PLcom/android/server/wifi/p2p/WifiP2pService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wifi/p2p/WifiP2pService;->onBootPhase(I)V
+PLcom/android/server/wifi/p2p/WifiP2pService;->onStart()V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$ClientHandler;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;Ljava/lang/String;Landroid/os/Looper;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$1;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$DefaultState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$DefaultState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$FrequencyConflictState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$GroupCreatedState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$GroupCreatingState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$GroupNegotiationState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$InactiveState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$InactiveState;->enter()V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$InactiveState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$OngoingGroupRemovalState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pDisabledState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pDisabledState;->enter()V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pDisabledState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pDisablingState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pEnabledState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pEnabledState;->enter()V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pEnabledState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pEnablingState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pEnablingState;->enter()V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pEnablingState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pNotSupportedState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$ProvisionDiscoveryState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$UserAuthorizingInviteRequestState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$UserAuthorizingJoinState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$UserAuthorizingNegotiationRequestState;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->-get10(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pEnablingState;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->-get14(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)Landroid/net/wifi/p2p/WifiP2pConfig;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->-get18(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)Lcom/android/server/wifi/p2p/WifiP2pMonitor;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->-get19(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)Lcom/android/server/wifi/p2p/WifiP2pNative;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->-get6(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$InactiveState;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->-wrap15(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->-wrap26(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->-wrap29(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;Z)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;-><init>(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;Ljava/lang/String;Landroid/os/Looper;Z)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->getPersistedDeviceName()Ljava/lang/String;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->initializeP2pSettings()V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->sendP2pConnectionChangedBroadcast()V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->sendP2pPersistentGroupsChangedBroadcast()V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->sendP2pStateChangedBroadcast(Z)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->sendThisDeviceChangedBroadcast()V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->updatePersistentNetworks(Z)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;->updateThisDevice(I)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->-get0()Ljava/lang/Boolean;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->-get15(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;)Landroid/net/wifi/p2p/WifiP2pDevice;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->-get16(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;)Lcom/android/internal/util/AsyncChannel;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->-get2(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;)Ljava/util/HashMap;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->-get3(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;)Landroid/content/Context;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->-get5(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;)Z
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->-get6(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;)Z
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->-get7(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;)Z
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->-get9(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;)Landroid/net/NetworkInfo;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->-set2(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;Z)Z
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->-set6(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->-set7(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;B)B
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->-set9(Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;Lcom/android/internal/util/AsyncChannel;)Lcom/android/internal/util/AsyncChannel;
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->checkConnectivityInternalPermission()I
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->connectivityServiceReady()V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->enforceAccessPermission()V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->enforceChangePermission()V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->enforceConnectivityInternalOrLocationHardwarePermission()V
+PLcom/android/server/wifi/p2p/WifiP2pServiceImpl;->getP2pStateMachineMessenger()Landroid/os/Messenger;
+PLcom/android/server/wifi/scanner/-$Lambda$ckIrrmbHBOVG4LZY2cRLHtMBPV4;-><init>()V
+PLcom/android/server/wifi/scanner/BackgroundScanScheduler$BucketList$1;-><init>(Lcom/android/server/wifi/scanner/BackgroundScanScheduler$BucketList;)V
+PLcom/android/server/wifi/scanner/BackgroundScanScheduler$BucketList;-><init>(Lcom/android/server/wifi/scanner/BackgroundScanScheduler;)V
+PLcom/android/server/wifi/scanner/BackgroundScanScheduler;->-get2()[I
+PLcom/android/server/wifi/scanner/BackgroundScanScheduler;-><init>(Lcom/android/server/wifi/scanner/ChannelHelper;)V
+PLcom/android/server/wifi/scanner/BackgroundScanScheduler;->createSchedule(Ljava/util/List;I)V
+PLcom/android/server/wifi/scanner/BackgroundScanScheduler;->getMaxApPerScan()I
+PLcom/android/server/wifi/scanner/BackgroundScanScheduler;->getMaxBatch()I
+PLcom/android/server/wifi/scanner/BackgroundScanScheduler;->getMaxChannelsPerBucket()I
+PLcom/android/server/wifi/scanner/BackgroundScanScheduler;->setMaxApPerScan(I)V
+PLcom/android/server/wifi/scanner/BackgroundScanScheduler;->setMaxBuckets(I)V
+PLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;->containsSettings(Landroid/net/wifi/WifiScanner$ScanSettings;)Z
+PLcom/android/server/wifi/scanner/ChannelHelper;-><init>()V
+PLcom/android/server/wifi/scanner/HalChannelHelper;-><init>(Lcom/android/server/wifi/WifiNative;)V
+PLcom/android/server/wifi/scanner/HalWifiScannerImpl;-><init>(Landroid/content/Context;Lcom/android/server/wifi/WifiNative;Lcom/android/server/wifi/WifiMonitor;Landroid/os/Looper;Lcom/android/server/wifi/Clock;)V
+PLcom/android/server/wifi/scanner/HalWifiScannerImpl;->getChannelHelper()Lcom/android/server/wifi/scanner/ChannelHelper;
+PLcom/android/server/wifi/scanner/HalWifiScannerImpl;->getLatestSingleScanResults()Landroid/net/wifi/WifiScanner$ScanData;
+PLcom/android/server/wifi/scanner/HalWifiScannerImpl;->getScanCapabilities(Lcom/android/server/wifi/WifiNative$ScanCapabilities;)Z
+PLcom/android/server/wifi/scanner/HalWifiScannerImpl;->startSingleScan(Lcom/android/server/wifi/WifiNative$ScanSettings;Lcom/android/server/wifi/WifiNative$ScanEventHandler;)Z
+PLcom/android/server/wifi/scanner/KnownBandsChannelHelper$KnownBandsChannelCollection;->getScanFreqs()Ljava/util/Set;
+PLcom/android/server/wifi/scanner/KnownBandsChannelHelper$KnownBandsChannelCollection;->isEmpty()Z
+PLcom/android/server/wifi/scanner/KnownBandsChannelHelper;-><init>()V
+PLcom/android/server/wifi/scanner/WifiScannerImpl$1;-><init>()V
+PLcom/android/server/wifi/scanner/WifiScannerImpl$1;->create(Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/wifi/Clock;)Lcom/android/server/wifi/scanner/WifiScannerImpl;
+PLcom/android/server/wifi/scanner/WifiScannerImpl$2;-><init>()V
+PLcom/android/server/wifi/scanner/WifiScannerImpl;-><init>()V
+PLcom/android/server/wifi/scanner/WifiScanningService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wifi/scanner/WifiScanningService;->onBootPhase(I)V
+PLcom/android/server/wifi/scanner/WifiScanningService;->onStart()V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$1;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientHandler;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;Ljava/lang/String;Landroid/os/Looper;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientInfo;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;ILandroid/os/Messenger;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientInfo;->getUid()I
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientInfo;->register()V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$ExternalClientInfo;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;ILandroid/os/Messenger;Lcom/android/internal/util/AsyncChannel;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestList;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestList;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestList;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine$DefaultState;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine$DefaultState;->enter()V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine$DefaultState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine$PausedState;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine$StartedState;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine$StartedState;->enter()V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine;->-get0(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestList;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine;->-get1(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine$DefaultState;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine;->-get3(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine$StartedState;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;Landroid/os/Looper;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$DefaultState;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$DefaultState;->enter()V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$DefaultState;->processMessage(Landroid/os/Message;)Z
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$HwPnoScanState;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$SingleScanState;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$StartedState;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$StartedState;->enter()V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$SwPnoScanState;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine;->-get0(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$DefaultState;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine;->-get3(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$StartedState;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;Landroid/os/Looper;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$DefaultState;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$DefaultState;->enter()V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$DriverStartedState;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$IdleState;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$IdleState;->enter()V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$ScanningState;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->-get2(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$DefaultState;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->-get3(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$IdleState;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->-get4(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestList;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->-get5(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$ScanningState;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->-set0(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;Lcom/android/server/wifi/WifiNative$ScanSettings;)Lcom/android/server/wifi/WifiNative$ScanSettings;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;-><init>(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;Landroid/os/Looper;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->activeScanSatisfies(Landroid/net/wifi/WifiScanner$ScanSettings;)Z
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;->validateScanRequest(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientInfo;ILandroid/net/wifi/WifiScanner$ScanSettings;Landroid/os/WorkSource;)Z
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get0(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get1(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Lcom/android/server/wifi/scanner/BackgroundScanScheduler;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get10(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get12(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Lcom/android/server/wifi/scanner/WifiScannerImpl;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get13(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Lcom/android/server/wifi/scanner/WifiScannerImpl$WifiScannerImplFactory;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get2(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Lcom/android/internal/app/IBatteryStats;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get7(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Landroid/content/Context;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get8(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Lcom/android/server/wifi/FrameworkFacade;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-get9(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;)Landroid/os/Looper;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-set0(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;Lcom/android/server/wifi/scanner/BackgroundScanScheduler;)Lcom/android/server/wifi/scanner/BackgroundScanScheduler;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-set1(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;Lcom/android/server/wifi/scanner/ChannelHelper;)Lcom/android/server/wifi/scanner/ChannelHelper;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-set3(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;Lcom/android/server/wifi/scanner/WifiScannerImpl;)Lcom/android/server/wifi/scanner/WifiScannerImpl;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-wrap0(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientInfo;Landroid/os/WorkSource;)Landroid/os/WorkSource;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->-wrap2(Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;Ljava/lang/String;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/wifi/scanner/WifiScannerImpl$WifiScannerImplFactory;Lcom/android/internal/app/IBatteryStats;Lcom/android/server/wifi/WifiInjector;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->getMessenger()Landroid/os/Messenger;
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->loge(Ljava/lang/String;)V
+PLcom/android/server/wifi/scanner/WifiScanningServiceImpl;->startService()V
+PLcom/android/server/wifi/scanner/WificondScannerImpl$1;-><init>(Lcom/android/server/wifi/scanner/WificondScannerImpl;)V
+PLcom/android/server/wifi/scanner/WificondScannerImpl$2;-><init>(Lcom/android/server/wifi/scanner/WificondScannerImpl;)V
+PLcom/android/server/wifi/scanner/WificondScannerImpl$3;-><init>(Lcom/android/server/wifi/scanner/WificondScannerImpl;)V
+PLcom/android/server/wifi/scanner/WificondScannerImpl$HwPnoDebouncer$1;-><init>(Lcom/android/server/wifi/scanner/WificondScannerImpl$HwPnoDebouncer;)V
+PLcom/android/server/wifi/scanner/WificondScannerImpl$HwPnoDebouncer;-><init>(Lcom/android/server/wifi/WifiNative;Landroid/app/AlarmManager;Landroid/os/Handler;Lcom/android/server/wifi/Clock;)V
+PLcom/android/server/wifi/scanner/WificondScannerImpl$HwPnoDebouncer;->forceStopPnoScan()V
+PLcom/android/server/wifi/scanner/WificondScannerImpl$HwPnoDebouncer;->stopPnoScanInternal()Z
+PLcom/android/server/wifi/scanner/WificondScannerImpl$LastScanSettings;->setSingleScan(ZLcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;Lcom/android/server/wifi/WifiNative$ScanEventHandler;)V
+PLcom/android/server/wifi/scanner/WificondScannerImpl$ScanBuffer;-><init>(I)V
+PLcom/android/server/wifi/scanner/WificondScannerImpl;-><init>(Landroid/content/Context;Lcom/android/server/wifi/WifiNative;Lcom/android/server/wifi/WifiMonitor;Lcom/android/server/wifi/scanner/ChannelHelper;Landroid/os/Looper;Lcom/android/server/wifi/Clock;)V
+PLcom/android/server/wifi/scanner/WificondScannerImpl;->getLatestSingleScanResults()Landroid/net/wifi/WifiScanner$ScanData;
+PLcom/android/server/wifi/scanner/WificondScannerImpl;->isHwPnoScanRequired()Z
+PLcom/android/server/wifi/scanner/WificondScannerImpl;->pauseHwPnoScan()V
+PLcom/android/server/wifi/scanner/WificondScannerImpl;->startSingleScan(Lcom/android/server/wifi/WifiNative$ScanSettings;Lcom/android/server/wifi/WifiNative$ScanEventHandler;)Z
+PLcom/android/server/wifi/util/ByteArrayRingBuffer;-><init>(I)V
+PLcom/android/server/wifi/util/ByteArrayRingBuffer;->resize(I)V
+PLcom/android/server/wifi/util/FrameParser;->decodeDhcpMessageType(S)Ljava/lang/String;
+PLcom/android/server/wifi/util/FrameParser;->decodeIeee80211StatusCode(S)Ljava/lang/String;
+PLcom/android/server/wifi/util/FrameParser;->parseArpPacket(Ljava/nio/ByteBuffer;)V
+PLcom/android/server/wifi/util/FrameParser;->parseAssociationResponse(Ljava/nio/ByteBuffer;)V
+PLcom/android/server/wifi/util/FrameParser;->parseAuthenticationFrame(Ljava/nio/ByteBuffer;)V
+PLcom/android/server/wifi/util/FrameParser;->parseDhcpPacket(Ljava/nio/ByteBuffer;)V
+PLcom/android/server/wifi/util/FrameParser;->parseIcmpV6Packet(Ljava/nio/ByteBuffer;)V
+PLcom/android/server/wifi/util/FrameParser;->parseIeee80211FrameCtrlSubtype(B)B
+PLcom/android/server/wifi/util/FrameParser;->parseIeee80211FrameCtrlType(B)B
+PLcom/android/server/wifi/util/FrameParser;->parseIeee80211FrameCtrlVersion(B)B
+PLcom/android/server/wifi/util/FrameParser;->parseIpv6Packet(Ljava/nio/ByteBuffer;)V
+PLcom/android/server/wifi/util/FrameParser;->parseManagementFrame(Ljava/nio/ByteBuffer;)V
+PLcom/android/server/wifi/util/FrameParser;->parseUdpPacket(Ljava/nio/ByteBuffer;)V
+PLcom/android/server/wifi/util/InformationElementUtil$Capabilities;->parseWpaCipher(I)I
+PLcom/android/server/wifi/util/NativeUtil;->decodeSsid(Ljava/lang/String;)Ljava/util/ArrayList;
+PLcom/android/server/wifi/util/NativeUtil;->hexOrQuotedStringToBytes(Ljava/lang/String;)Ljava/util/ArrayList;
+PLcom/android/server/wifi/util/NativeUtil;->hexStringToByteArray(Ljava/lang/String;)[B
+PLcom/android/server/wifi/util/NativeUtil;->macAddressToByteArray(Ljava/lang/String;)[B
+PLcom/android/server/wifi/util/NativeUtil;->stringToByteArray(Ljava/lang/String;)[B
+PLcom/android/server/wifi/util/NativeUtil;->stringToByteArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
+PLcom/android/server/wifi/util/WifiAsyncChannel;-><init>(Ljava/lang/String;)V
+PLcom/android/server/wifi/util/WifiAsyncChannel;->replyToMessage(Landroid/os/Message;Landroid/os/Message;)V
+PLcom/android/server/wifi/util/WifiHandler;-><init>(Ljava/lang/String;Landroid/os/Looper;)V
+PLcom/android/server/wifi/util/WifiPermissionsUtil;-><init>(Lcom/android/server/wifi/util/WifiPermissionsWrapper;Landroid/content/Context;Lcom/android/server/wifi/WifiSettingsStore;Landroid/os/UserManager;Landroid/net/NetworkScoreManager;Lcom/android/server/wifi/WifiInjector;)V
+PLcom/android/server/wifi/util/WifiPermissionsWrapper;-><init>(Landroid/content/Context;)V
+PLcom/android/server/wifi/util/XmlUtil$IpConfigurationXmlUtil;->-getandroid-net-IpConfiguration$IpAssignmentSwitchesValues()[I
+PLcom/android/server/wifi/util/XmlUtil$IpConfigurationXmlUtil;->-getandroid-net-IpConfiguration$ProxySettingsSwitchesValues()[I
+PLcom/android/server/wifi/util/XmlUtil$IpConfigurationXmlUtil;->parseFromXml(Lorg/xmlpull/v1/XmlPullParser;I)Landroid/net/IpConfiguration;
+PLcom/android/server/wifi/util/XmlUtil$IpConfigurationXmlUtil;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;Landroid/net/IpConfiguration;)V
+PLcom/android/server/wifi/util/XmlUtil$NetworkSelectionStatusXmlUtil;->parseFromXml(Lorg/xmlpull/v1/XmlPullParser;I)Landroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;
+PLcom/android/server/wifi/util/XmlUtil$NetworkSelectionStatusXmlUtil;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;Landroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;)V
+PLcom/android/server/wifi/util/XmlUtil$WifiConfigurationXmlUtil;->populateWepKeysFromXmlValue(Ljava/lang/Object;[Ljava/lang/String;)V
+PLcom/android/server/wifi/util/XmlUtil$WifiConfigurationXmlUtil;->writeCommonElementsToXml(Lorg/xmlpull/v1/XmlSerializer;Landroid/net/wifi/WifiConfiguration;)V
+PLcom/android/server/wifi/util/XmlUtil$WifiConfigurationXmlUtil;->writeWepKeysToXml(Lorg/xmlpull/v1/XmlSerializer;[Ljava/lang/String;)V
+PLcom/android/server/wifi/util/XmlUtil;->gotoDocumentStart(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)V
+PLcom/android/server/wifi/util/XmlUtil;->gotoEndTag(Lorg/xmlpull/v1/XmlPullParser;)V
+PLcom/android/server/wifi/util/XmlUtil;->gotoNextSectionOrEnd(Lorg/xmlpull/v1/XmlPullParser;[Ljava/lang/String;I)Z
+PLcom/android/server/wifi/util/XmlUtil;->gotoNextSectionWithNameOrEnd(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)Z
+PLcom/android/server/wifi/util/XmlUtil;->isNextSectionEnd(Lorg/xmlpull/v1/XmlPullParser;I)Z
+PLcom/android/server/wifi/util/XmlUtil;->readNextValueWithName(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/Object;
+PLcom/android/server/wifi/util/XmlUtil;->writeDocumentEnd(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;)V
+PLcom/android/server/wifi/util/XmlUtil;->writeDocumentStart(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;)V
+PLcom/android/server/wifi/util/XmlUtil;->writeNextSectionEnd(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;)V
+PLcom/android/server/wifi/util/XmlUtil;->writeNextSectionStart(Lorg/xmlpull/v1/XmlSerializer;Ljava/lang/String;)V
+PLcom/android/server/wifi/wificond/ChannelSettings$1;-><init>()V
+PLcom/android/server/wifi/wificond/NativeScanResult$1;-><init>()V
+PLcom/android/server/wifi/wificond/NativeScanResult$1;->newArray(I)[Lcom/android/server/wifi/wificond/NativeScanResult;
+PLcom/android/server/wifi/wificond/SingleScanSettings$1;-><init>()V
+PLcom/android/server/wifi/wificond/SingleScanSettings;-><init>()V
+PLcom/android/server/wm/-$Lambda$AUkchKtIxrbCkLkg2ILGagAqXvc;->$m$0(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$AUkchKtIxrbCkLkg2ILGagAqXvc;-><init>(BZZLjava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$AUkchKtIxrbCkLkg2ILGagAqXvc;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$JE-Xd_mgkfFanNxg9Cy6vl62umY;->$m$0()V
+PLcom/android/server/wm/-$Lambda$JE-Xd_mgkfFanNxg9Cy6vl62umY;-><init>(ILjava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$JE-Xd_mgkfFanNxg9Cy6vl62umY;->run()V
+PLcom/android/server/wm/-$Lambda$LEqle-ue9vesHjZva-SwvAvwBx8;->$m$0(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/wm/-$Lambda$LEqle-ue9vesHjZva-SwvAvwBx8;->$m$1(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/wm/-$Lambda$LEqle-ue9vesHjZva-SwvAvwBx8;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$LEqle-ue9vesHjZva-SwvAvwBx8;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/wm/-$Lambda$OQfQhd_xsxt9hoLAjIbVfOwa-jY;-><init>(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$1;->$m$2(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$1;->$m$3(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$1;-><init>(B)V
+PLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$3;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$4;-><init>(BII)V
+PLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$6;->$m$0(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$6;-><init>(ZLjava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$6;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI$7;-><init>(ZZILjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI;->$m$1(Landroid/graphics/Rect;IIIIZI)Ljava/lang/Object;
+PLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI;-><init>(B)V
+PLcom/android/server/wm/-$Lambda$OzPvdnGprtQoLZLCvw2GU8IaGyI;->screenshot(Landroid/graphics/Rect;IIIIZI)Ljava/lang/Object;
+PLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;->$m$13(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$YIZfR4m-B8z_tYbP2x4OJ3o7OYE;->$m$2(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$aEpJ2RCAIjecjyIIYTv6ricEwh4;->$m$11()V
+PLcom/android/server/wm/-$Lambda$aEpJ2RCAIjecjyIIYTv6ricEwh4;->$m$2()V
+PLcom/android/server/wm/-$Lambda$aEpJ2RCAIjecjyIIYTv6ricEwh4;->$m$3()V
+PLcom/android/server/wm/-$Lambda$aEpJ2RCAIjecjyIIYTv6ricEwh4;->$m$4()V
+PLcom/android/server/wm/-$Lambda$aEpJ2RCAIjecjyIIYTv6ricEwh4;->$m$5()V
+PLcom/android/server/wm/-$Lambda$cHAc_wCK_9-nlRTF5Ggz5ZbNDr0$2;->$m$0(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$cHAc_wCK_9-nlRTF5Ggz5ZbNDr0$2;-><init>(ZI)V
+PLcom/android/server/wm/-$Lambda$cHAc_wCK_9-nlRTF5Ggz5ZbNDr0$2;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$eBBEuGZ8VbEXJy0r5EYYbvnl-8w$1;->$m$0()V
+PLcom/android/server/wm/-$Lambda$eBBEuGZ8VbEXJy0r5EYYbvnl-8w$1;-><init>(ZZZLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$eBBEuGZ8VbEXJy0r5EYYbvnl-8w$1;->run()V
+PLcom/android/server/wm/-$Lambda$hCYoJeHmvymNpgtwuNPQ6z-HGjQ;-><init>(B)V
+PLcom/android/server/wm/-$Lambda$lByfYr6ieFYh5pmaqCgCKVVzuwA;->$m$0(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$Lambda$lByfYr6ieFYh5pmaqCgCKVVzuwA;-><init>()V
+PLcom/android/server/wm/-$Lambda$lByfYr6ieFYh5pmaqCgCKVVzuwA;->apply(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$Lambda$lpBUCbECLvWBIi8CcvaEY5AB7jM$1;->$m$1(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$Lambda$lpBUCbECLvWBIi8CcvaEY5AB7jM$1;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$lpBUCbECLvWBIi8CcvaEY5AB7jM;-><init>(BLjava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$qRW_P-TWddDPPnAT8S1SNpM72ho;->$m$0(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$qRW_P-TWddDPPnAT8S1SNpM72ho;-><init>(BLjava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$qRW_P-TWddDPPnAT8S1SNpM72ho;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/-$Lambda$tS7nL17Ous75692M4rHLEZu640I;->$m$0(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$Lambda$tS7nL17Ous75692M4rHLEZu640I;-><init>(BI)V
+PLcom/android/server/wm/-$Lambda$tS7nL17Ous75692M4rHLEZu640I;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/-$Lambda$v2Yn08uofw54W8n_7KsmBjqR0Z8;-><init>()V
+PLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver$MyHandler;-><init>(Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;Landroid/os/Looper;)V
+PLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/WindowManagerInternal$WindowsForAccessibilityCallback;)V
+PLcom/android/server/wm/AccessibilityController;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/AccessibilityController;->hasCallbacksLocked()Z
+PLcom/android/server/wm/AccessibilityController;->onAppWindowTransitionLocked(Lcom/android/server/wm/WindowState;I)V
+PLcom/android/server/wm/AccessibilityController;->onRotationChangedLocked(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/AccessibilityController;->onWindowFocusChangedNotLocked()V
+PLcom/android/server/wm/AccessibilityController;->onWindowTransitionLocked(Lcom/android/server/wm/WindowState;I)V
+PLcom/android/server/wm/AccessibilityController;->performComputeChangedWindowsNotLocked()V
+PLcom/android/server/wm/AccessibilityController;->setWindowsForAccessibilityCallback(Landroid/view/WindowManagerInternal$WindowsForAccessibilityCallback;)V
+PLcom/android/server/wm/AppTokenList;-><init>()V
+PLcom/android/server/wm/AppTransition$1;-><init>(Lcom/android/server/wm/AppTransition;)V
+PLcom/android/server/wm/AppTransition$2;-><init>(Lcom/android/server/wm/AppTransition;)V
+PLcom/android/server/wm/AppTransition;-><init>(Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/AppTransition;->calculateClipRevealTransitionDuration(ZFFLandroid/graphics/Rect;)J
+PLcom/android/server/wm/AppTransition;->canSkipFirstFrame()Z
+PLcom/android/server/wm/AppTransition;->clear()V
+PLcom/android/server/wm/AppTransition;->fetchAppTransitionSpecsFromFuture()V
+PLcom/android/server/wm/AppTransition;->freeze()V
+PLcom/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;->getTransitFlags()I
+PLcom/android/server/wm/AppTransition;->isFetchingAppTransitionsSpecs()Z
+PLcom/android/server/wm/AppTransition;->isNextAppTransitionThumbnailDown()Z
+PLcom/android/server/wm/AppTransition;->isNextAppTransitionThumbnailUp()Z
+PLcom/android/server/wm/AppTransition;->isTransitionEqual(I)Z
+PLcom/android/server/wm/AppTransition;->loadAnimationRes(Ljava/lang/String;I)Landroid/view/animation/Animation;
+PLcom/android/server/wm/AppTransition;->loadKeyguardExitAnimation(I)Landroid/view/animation/Animation;
+PLcom/android/server/wm/AppTransition;->notifyAppTransitionCancelledLocked(I)V
+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;->postAnimationCallback()V
+PLcom/android/server/wm/AppTransition;->putDefaultNextAppTransitionCoordinates(IIIILandroid/graphics/GraphicBuffer;)V
+PLcom/android/server/wm/AppTransition;->registerListenerLocked(Landroid/view/WindowManagerInternal$AppTransitionListener;)V
+PLcom/android/server/wm/AppTransition;->setAppTransition(II)V
+PLcom/android/server/wm/AppTransition;->setIdle()V
+PLcom/android/server/wm/AppWindowAnimator$DummyAnimation;-><init>()V
+PLcom/android/server/wm/AppWindowAnimator;-><init>(Lcom/android/server/wm/AppWindowToken;Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/AppWindowAnimator;->getTransitFlags()I
+PLcom/android/server/wm/AppWindowAnimator;->transferCurrentAnimation(Lcom/android/server/wm/AppWindowAnimator;Lcom/android/server/wm/WindowStateAnimator;)V
+PLcom/android/server/wm/AppWindowContainerController$H;-><init>(Lcom/android/server/wm/AppWindowContainerController;Landroid/os/Looper;)V
+PLcom/android/server/wm/AppWindowContainerController;-><init>(Lcom/android/server/wm/TaskWindowContainerController;Landroid/view/IApplicationToken;Lcom/android/server/wm/AppWindowContainerListener;IIZZIZZZIIJLandroid/content/res/Configuration;Landroid/graphics/Rect;)V
+PLcom/android/server/wm/AppWindowContainerController;->createAppWindow(Lcom/android/server/wm/WindowManagerService;Landroid/view/IApplicationToken;ZLcom/android/server/wm/DisplayContent;JZZIIIIZZLcom/android/server/wm/AppWindowContainerController;Landroid/content/res/Configuration;Landroid/graphics/Rect;)Lcom/android/server/wm/AppWindowToken;
+PLcom/android/server/wm/AppWindowContainerController;->createSnapshot(Landroid/app/ActivityManager$TaskSnapshot;)Z
+PLcom/android/server/wm/AppWindowContainerController;->getStartingWindowType(ZZZZZZLandroid/app/ActivityManager$TaskSnapshot;)I
+PLcom/android/server/wm/AppWindowContainerController;->lambda$-com_android_server_wm_AppWindowContainerController_31112(Landroid/view/WindowManagerPolicy$StartingSurface;)V
+PLcom/android/server/wm/AppWindowContainerController;->lambda$-com_android_server_wm_AppWindowContainerController_4155()V
+PLcom/android/server/wm/AppWindowContainerController;->lambda$-com_android_server_wm_AppWindowContainerController_4446()V
+PLcom/android/server/wm/AppWindowContainerController;->notifyAppResumed(Z)V
+PLcom/android/server/wm/AppWindowContainerController;->notifyAppStopped()V
+PLcom/android/server/wm/AppWindowContainerController;->notifyUnknownVisibilityLaunched()V
+PLcom/android/server/wm/AppWindowContainerController;->removeContainer(I)V
+PLcom/android/server/wm/AppWindowContainerController;->reportWindowsDrawn()V
+PLcom/android/server/wm/AppWindowContainerController;->reportWindowsGone()V
+PLcom/android/server/wm/AppWindowContainerController;->reportWindowsVisible()V
+PLcom/android/server/wm/AppWindowContainerController;->scheduleAddStartingWindow()V
+PLcom/android/server/wm/AppWindowContainerController;->setDisablePreviewScreenshots(Z)V
+PLcom/android/server/wm/AppWindowContainerController;->setOrientation(IILandroid/content/res/Configuration;Z)Landroid/content/res/Configuration;
+PLcom/android/server/wm/AppWindowContainerController;->snapshotOrientationSameAsTask(Landroid/app/ActivityManager$TaskSnapshot;)Z
+PLcom/android/server/wm/AppWindowContainerController;->startFreezingScreen(I)V
+PLcom/android/server/wm/AppWindowToken;->-com_android_server_wm_AppWindowToken-mthref-0(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/AppWindowToken;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/IApplicationToken;ZLcom/android/server/wm/DisplayContent;JZZIIIIZZLcom/android/server/wm/AppWindowContainerController;Landroid/content/res/Configuration;Landroid/graphics/Rect;)V
+PLcom/android/server/wm/AppWindowToken;->canTurnScreenOn()Z
+PLcom/android/server/wm/AppWindowToken;->clearRelaunching()V
+PLcom/android/server/wm/AppWindowToken;->finishRelaunching()V
+PLcom/android/server/wm/AppWindowToken;->getHighestAnimLayerWindow(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/WindowState;
+PLcom/android/server/wm/AppWindowToken;->getTopFullscreenWindow()Lcom/android/server/wm/WindowState;
+PLcom/android/server/wm/AppWindowToken;->isFirstChildWindowGreaterThanSecond(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/AppWindowToken;->isLastWindow(Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/AppWindowToken;->lambda$-com_android_server_wm_AppWindowToken_68187(Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/AppWindowToken;->notifyAppResumed(Z)V
+PLcom/android/server/wm/AppWindowToken;->postWindowRemoveStartingWindowCleanup(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/AppWindowToken;->removeChild(Lcom/android/server/wm/WindowContainer;)V
+PLcom/android/server/wm/AppWindowToken;->removeChild(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/AppWindowToken;->removeIfPossible()V
+PLcom/android/server/wm/AppWindowToken;->removeImmediately()V
+PLcom/android/server/wm/AppWindowToken;->setCanTurnScreenOn(Z)V
+PLcom/android/server/wm/AppWindowToken;->setDisablePreviewScreenshots(Z)V
+PLcom/android/server/wm/AppWindowToken;->shouldFreezeBounds()Z
+PLcom/android/server/wm/AppWindowToken;->shouldUseAppThemeSnapshot()Z
+PLcom/android/server/wm/AppWindowToken;->startFreezingScreen()V
+PLcom/android/server/wm/AppWindowToken;->startRelaunching()V
+PLcom/android/server/wm/AppWindowToken;->stopFreezingScreen(ZZ)V
+PLcom/android/server/wm/AppWindowToken;->transferStartingWindow(Landroid/os/IBinder;)Z
+PLcom/android/server/wm/AppWindowToken;->unfreezeBounds()V
+PLcom/android/server/wm/AppWindowToken;->waitingForReplacement()Z
+PLcom/android/server/wm/BlackFrame$BlackSurface;-><init>(Lcom/android/server/wm/BlackFrame;Landroid/view/SurfaceSession;IIIIII)V
+PLcom/android/server/wm/BlackFrame;-><init>(Landroid/view/SurfaceSession;Landroid/graphics/Rect;Landroid/graphics/Rect;IIZ)V
+PLcom/android/server/wm/BlackFrame;->kill()V
+PLcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;-><init>(Lcom/android/server/wm/BoundsAnimationController;)V
+PLcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;-><init>(Lcom/android/server/wm/BoundsAnimationController;Lcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;)V
+PLcom/android/server/wm/BoundsAnimationController;->-get2(Lcom/android/server/wm/BoundsAnimationController;)Z
+PLcom/android/server/wm/BoundsAnimationController;-><init>(Landroid/content/Context;Lcom/android/server/wm/AppTransition;Landroid/os/Handler;Landroid/animation/AnimationHandler;)V
+PLcom/android/server/wm/DimLayer;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DimLayer$DimLayerUser;ILjava/lang/String;)V
+PLcom/android/server/wm/DimLayer;->adjustLayer(I)V
+PLcom/android/server/wm/DimLayer;->constructSurface(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/DimLayer;->durationEndsEarlier(J)Z
+PLcom/android/server/wm/DimLayer;->show()V
+PLcom/android/server/wm/DimLayerController$DimLayerState;-><init>()V
+PLcom/android/server/wm/DimLayerController$DimLayerState;-><init>(Lcom/android/server/wm/DimLayerController$DimLayerState;)V
+PLcom/android/server/wm/DimLayerController;-><init>(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/DimLayerController;->applyDimBehind(Lcom/android/server/wm/DimLayer$DimLayerUser;Lcom/android/server/wm/WindowStateAnimator;)V
+PLcom/android/server/wm/DimLayerController;->getContinueDimming(Lcom/android/server/wm/DimLayer$DimLayerUser;)Z
+PLcom/android/server/wm/DimLayerController;->getDimLayerTag(Lcom/android/server/wm/DimLayer$DimLayerUser;)Ljava/lang/String;
+PLcom/android/server/wm/DimLayerController;->isDimming()Z
+PLcom/android/server/wm/DimLayerController;->removeDimLayerUser(Lcom/android/server/wm/DimLayer$DimLayerUser;)V
+PLcom/android/server/wm/DimLayerController;->setContinueDimming(Lcom/android/server/wm/DimLayer$DimLayerUser;)V
+PLcom/android/server/wm/DimLayerController;->startDimmingIfNeeded(Lcom/android/server/wm/DimLayer$DimLayerUser;Lcom/android/server/wm/WindowStateAnimator;Z)V
+PLcom/android/server/wm/DisplayContent$ApplySurfaceChangesTransactionState;-><init>()V
+PLcom/android/server/wm/DisplayContent$ApplySurfaceChangesTransactionState;-><init>(Lcom/android/server/wm/DisplayContent$ApplySurfaceChangesTransactionState;)V
+PLcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;-><init>()V
+PLcom/android/server/wm/DisplayContent$NonAppWindowContainers;-><init>(Lcom/android/server/wm/DisplayContent;Ljava/lang/String;)V
+PLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->addChild(Lcom/android/server/wm/WindowToken;)V
+PLcom/android/server/wm/DisplayContent$NonAppWindowContainers;->lambda$-com_android_server_wm_DisplayContent$NonAppWindowContainers_153978(Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowToken;)I
+PLcom/android/server/wm/DisplayContent$ScreenshotApplicationState;-><init>()V
+PLcom/android/server/wm/DisplayContent$ScreenshotApplicationState;-><init>(Lcom/android/server/wm/DisplayContent$ScreenshotApplicationState;)V
+PLcom/android/server/wm/DisplayContent$ScreenshotApplicationState;->reset(Z)V
+PLcom/android/server/wm/DisplayContent$TaskForResizePointSearchResult;-><init>()V
+PLcom/android/server/wm/DisplayContent$TaskForResizePointSearchResult;->reset()V
+PLcom/android/server/wm/DisplayContent$TaskStackContainers;-><init>(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/DisplayContent$TaskStackContainers;-><init>(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent$TaskStackContainers;)V
+PLcom/android/server/wm/DisplayContent$TaskStackContainers;->addChild(Lcom/android/server/wm/TaskStack;Z)V
+PLcom/android/server/wm/DisplayContent$TaskStackContainers;->addStackToDisplay(Lcom/android/server/wm/TaskStack;Z)V
+PLcom/android/server/wm/DisplayContent$TaskStackContainers;->isOnTop()Z
+PLcom/android/server/wm/DisplayContent;->-com_android_server_wm_DisplayContent-mthref-1(Landroid/graphics/Rect;IIIIZI)Landroid/graphics/GraphicBuffer;
+PLcom/android/server/wm/DisplayContent;->-get0(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/TaskStack;
+PLcom/android/server/wm/DisplayContent;->-get1(Lcom/android/server/wm/DisplayContent;)I
+PLcom/android/server/wm/DisplayContent;->-set0(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/TaskStack;)Lcom/android/server/wm/TaskStack;
+PLcom/android/server/wm/DisplayContent;->-set1(Lcom/android/server/wm/DisplayContent;I)I
+PLcom/android/server/wm/DisplayContent;-><init>(Landroid/view/Display;Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowLayersController;Lcom/android/server/wm/WallpaperController;)V
+PLcom/android/server/wm/DisplayContent;->addStackToDisplay(IZ)Lcom/android/server/wm/TaskStack;
+PLcom/android/server/wm/DisplayContent;->addWindowToken(Landroid/os/IBinder;Lcom/android/server/wm/WindowToken;)V
+PLcom/android/server/wm/DisplayContent;->canAddToastWindowForUid(I)Z
+PLcom/android/server/wm/DisplayContent;->checkWaitingForWindows()Z
+PLcom/android/server/wm/DisplayContent;->convertCropForSurfaceFlinger(Landroid/graphics/Rect;III)V
+PLcom/android/server/wm/DisplayContent;->deltaRotation(II)I
+PLcom/android/server/wm/DisplayContent;->findTaskForResizePoint(II)Lcom/android/server/wm/Task;
+PLcom/android/server/wm/DisplayContent;->getDisplay()Landroid/view/Display;
+PLcom/android/server/wm/DisplayContent;->getDisplayMetrics()Landroid/util/DisplayMetrics;
+PLcom/android/server/wm/DisplayContent;->getPinnedStackController()Lcom/android/server/wm/PinnedStackController;
+PLcom/android/server/wm/DisplayContent;->hasAccess(I)Z
+PLcom/android/server/wm/DisplayContent;->hasSecureWindowOnScreen()Z
+PLcom/android/server/wm/DisplayContent;->initializeDisplayBaseInfo()V
+PLcom/android/server/wm/DisplayContent;->isDimming()Z
+PLcom/android/server/wm/DisplayContent;->isReady()Z
+PLcom/android/server/wm/DisplayContent;->isRemovalDeferred()Z
+PLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_112613(Landroid/view/WindowManagerPolicy;ZZLcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_117363(Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_118481(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_119045(Landroid/view/WindowManagerPolicy;Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_44157(Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_49307(ZLcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/DisplayContent;->lambda$-com_android_server_wm_DisplayContent_99578(ILcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/DisplayContent;->onAppTransitionDone()V
+PLcom/android/server/wm/DisplayContent;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+PLcom/android/server/wm/DisplayContent;->onDescendantOverrideConfigurationChanged()V
+PLcom/android/server/wm/DisplayContent;->onWindowFreezeTimeout()V
+PLcom/android/server/wm/DisplayContent;->prepareFreezingTaskBounds()V
+PLcom/android/server/wm/DisplayContent;->reParentWindowToken(Lcom/android/server/wm/WindowToken;)V
+PLcom/android/server/wm/DisplayContent;->removeAppToken(Landroid/os/IBinder;)V
+PLcom/android/server/wm/DisplayContent;->removeWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/WindowToken;
+PLcom/android/server/wm/DisplayContent;->screenshotApplicationsToBuffer(Landroid/os/IBinder;IIZFZZ)Landroid/graphics/GraphicBuffer;
+PLcom/android/server/wm/DisplayContent;->setInputMethodAnimLayerAdjustment(I)V
+PLcom/android/server/wm/DisplayContent;->setLastOrientation(I)V
+PLcom/android/server/wm/DisplayContent;->startKeyguardExitOnNonAppWindows(ZZ)V
+PLcom/android/server/wm/DisplayContent;->updateBaseDisplayMetrics(III)V
+PLcom/android/server/wm/DisplayContent;->updateBaseDisplayMetricsIfNeeded()V
+PLcom/android/server/wm/DisplayContent;->updateDisplayInfo()V
+PLcom/android/server/wm/DisplayContent;->updateStackBoundsAfterConfigChange(Ljava/util/List;)V
+PLcom/android/server/wm/DisplayContent;->waitForAllWindowsDrawn()V
+PLcom/android/server/wm/DisplaySettings;-><init>()V
+PLcom/android/server/wm/DisplaySettings;->getOverscanLocked(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;)V
+PLcom/android/server/wm/DisplaySettings;->readSettingsLocked()V
+PLcom/android/server/wm/DockedStackDividerController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/DockedStackDividerController;->checkMinimizeChanged(Z)V
+PLcom/android/server/wm/DockedStackDividerController;->getContentWidth()I
+PLcom/android/server/wm/DockedStackDividerController;->getImeHeightAdjustedFor()I
+PLcom/android/server/wm/DockedStackDividerController;->isHomeStackResizable()Z
+PLcom/android/server/wm/DockedStackDividerController;->isImeHideRequested()Z
+PLcom/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
+PLcom/android/server/wm/DockedStackDividerController;->notifyDockedDividerVisibilityChanged(Z)V
+PLcom/android/server/wm/DockedStackDividerController;->notifyDockedStackExistsChanged(Z)V
+PLcom/android/server/wm/DockedStackDividerController;->notifyDockedStackMinimizedChanged(ZZZ)V
+PLcom/android/server/wm/DockedStackDividerController;->onConfigurationChanged()V
+PLcom/android/server/wm/DockedStackDividerController;->registerDockedStackListener(Landroid/view/IDockedStackListener;)V
+PLcom/android/server/wm/DockedStackDividerController;->resetImeHideRequested()V
+PLcom/android/server/wm/DockedStackDividerController;->setMinimizedDockedStack(ZZ)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;->wasVisible()Z
+PLcom/android/server/wm/InputConsumerImpl;-><init>(Lcom/android/server/wm/WindowManagerService;Ljava/lang/String;Landroid/view/InputChannel;)V
+PLcom/android/server/wm/InputConsumerImpl;->getLayerLw(I)I
+PLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;-><init>(Lcom/android/server/wm/InputMonitor;)V
+PLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;-><init>(Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;)V
+PLcom/android/server/wm/InputMonitor;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/InputMonitor;->addInputConsumer(Ljava/lang/String;Lcom/android/server/wm/InputConsumerImpl;)V
+PLcom/android/server/wm/InputMonitor;->createInputConsumer(Ljava/lang/String;Landroid/view/InputChannel;)V
+PLcom/android/server/wm/InputMonitor;->destroyInputConsumer(Ljava/lang/String;)Z
+PLcom/android/server/wm/InputMonitor;->dispatchUnhandledKey(Lcom/android/server/input/InputWindowHandle;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;
+PLcom/android/server/wm/InputMonitor;->disposeInputConsumer(Lcom/android/server/wm/InputConsumerImpl;)Z
+PLcom/android/server/wm/InputMonitor;->freezeInputDispatchingLw()V
+PLcom/android/server/wm/InputMonitor;->notifyConfigurationChanged()V
+PLcom/android/server/wm/InputMonitor;->pauseDispatchingLw(Lcom/android/server/wm/WindowToken;)V
+PLcom/android/server/wm/InputMonitor;->resumeDispatchingLw(Lcom/android/server/wm/WindowToken;)V
+PLcom/android/server/wm/InputMonitor;->setEventDispatchingLw(Z)V
+PLcom/android/server/wm/InputMonitor;->thawInputDispatchingLw()V
+PLcom/android/server/wm/InputMonitor;->updateInputDispatchModeLw()V
+PLcom/android/server/wm/InputMonitor;->waitForInputDevicesReady(J)Z
+PLcom/android/server/wm/KeyguardDisableHandler$KeyguardTokenWatcher;-><init>(Lcom/android/server/wm/KeyguardDisableHandler;Landroid/os/Handler;)V
+PLcom/android/server/wm/KeyguardDisableHandler$KeyguardTokenWatcher;->acquired()V
+PLcom/android/server/wm/KeyguardDisableHandler$KeyguardTokenWatcher;->updateAllowState()V
+PLcom/android/server/wm/KeyguardDisableHandler;->-get0()Ljava/lang/String;
+PLcom/android/server/wm/KeyguardDisableHandler;->-get1(Lcom/android/server/wm/KeyguardDisableHandler;)I
+PLcom/android/server/wm/KeyguardDisableHandler;->-set0(Lcom/android/server/wm/KeyguardDisableHandler;I)I
+PLcom/android/server/wm/KeyguardDisableHandler;-><init>(Landroid/content/Context;Landroid/view/WindowManagerPolicy;)V
+PLcom/android/server/wm/KeyguardDisableHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/wm/PinnedStackController$PinnedStackControllerCallback;-><init>(Lcom/android/server/wm/PinnedStackController;)V
+PLcom/android/server/wm/PinnedStackController$PinnedStackControllerCallback;-><init>(Lcom/android/server/wm/PinnedStackController;Lcom/android/server/wm/PinnedStackController$PinnedStackControllerCallback;)V
+PLcom/android/server/wm/PinnedStackController$PinnedStackControllerCallback;->lambda$-com_android_server_wm_PinnedStackController$PinnedStackControllerCallback_4973(I)V
+PLcom/android/server/wm/PinnedStackController$PinnedStackControllerCallback;->setMinEdgeSize(I)V
+PLcom/android/server/wm/PinnedStackController$PinnedStackListenerDeathHandler;-><init>(Lcom/android/server/wm/PinnedStackController;)V
+PLcom/android/server/wm/PinnedStackController$PinnedStackListenerDeathHandler;-><init>(Lcom/android/server/wm/PinnedStackController;Lcom/android/server/wm/PinnedStackController$PinnedStackListenerDeathHandler;)V
+PLcom/android/server/wm/PinnedStackController;->-get0(Lcom/android/server/wm/PinnedStackController;)I
+PLcom/android/server/wm/PinnedStackController;->-get2(Lcom/android/server/wm/PinnedStackController;)Landroid/os/Handler;
+PLcom/android/server/wm/PinnedStackController;->-set0(Lcom/android/server/wm/PinnedStackController;I)I
+PLcom/android/server/wm/PinnedStackController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/PinnedStackController;->dpToPx(FLandroid/util/DisplayMetrics;)I
+PLcom/android/server/wm/PinnedStackController;->isValidPictureInPictureAspectRatio(F)Z
+PLcom/android/server/wm/PinnedStackController;->notifyActionsChanged(Ljava/util/List;)V
+PLcom/android/server/wm/PinnedStackController;->notifyImeVisibilityChanged(ZI)V
+PLcom/android/server/wm/PinnedStackController;->notifyMinimizeChanged(Z)V
+PLcom/android/server/wm/PinnedStackController;->onConfigurationChanged()V
+PLcom/android/server/wm/PinnedStackController;->onDisplayInfoChanged()V
+PLcom/android/server/wm/PinnedStackController;->registerPinnedStackListener(Landroid/view/IPinnedStackListener;)V
+PLcom/android/server/wm/PointerEventDispatcher;-><init>(Landroid/view/InputChannel;)V
+PLcom/android/server/wm/PointerEventDispatcher;->registerInputEventListener(Landroid/view/WindowManagerPolicy$PointerEventListener;)V
+PLcom/android/server/wm/RootWindowContainer$MyHandler;-><init>(Lcom/android/server/wm/RootWindowContainer;Landroid/os/Looper;)V
+PLcom/android/server/wm/RootWindowContainer;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/RootWindowContainer;->closeSystemDialogs(Ljava/lang/String;)V
+PLcom/android/server/wm/RootWindowContainer;->createDisplayContent(Landroid/view/Display;)Lcom/android/server/wm/DisplayContent;
+PLcom/android/server/wm/RootWindowContainer;->getDisplaysInFocusOrder(Landroid/util/SparseIntArray;)V
+PLcom/android/server/wm/RootWindowContainer;->lambda$-com_android_server_wm_RootWindowContainer_17861(IZLcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/RootWindowContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+PLcom/android/server/wm/RootWindowContainer;->prepareFreezingTaskBounds()V
+PLcom/android/server/wm/RootWindowContainer;->setDisplayOverrideConfigurationIfNeeded(Landroid/content/res/Configuration;I)[I
+PLcom/android/server/wm/RootWindowContainer;->setGlobalConfigurationIfNeeded(Landroid/content/res/Configuration;)[I
+PLcom/android/server/wm/RootWindowContainer;->setSecureSurfaceState(IZ)V
+PLcom/android/server/wm/RootWindowContainer;->toBrightnessOverride(F)I
+PLcom/android/server/wm/RootWindowContainer;->updateStackBoundsAfterConfigChange()[I
+PLcom/android/server/wm/ScreenRotationAnimation;-><init>(Landroid/content/Context;Lcom/android/server/wm/DisplayContent;Landroid/view/SurfaceSession;ZZZLcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/ScreenRotationAnimation;->createRotationMatrix(IIILandroid/graphics/Matrix;)V
+PLcom/android/server/wm/ScreenRotationAnimation;->dismiss(Landroid/view/SurfaceSession;JFIIII)Z
+PLcom/android/server/wm/ScreenRotationAnimation;->hasScreenshot()Z
+PLcom/android/server/wm/ScreenRotationAnimation;->isRotating()Z
+PLcom/android/server/wm/ScreenRotationAnimation;->kill()V
+PLcom/android/server/wm/ScreenRotationAnimation;->setRotationInTransaction(I)V
+PLcom/android/server/wm/ScreenRotationAnimation;->setRotationInTransaction(ILandroid/view/SurfaceSession;JFII)Z
+PLcom/android/server/wm/ScreenRotationAnimation;->startAnimation(Landroid/view/SurfaceSession;JFIIZII)Z
+PLcom/android/server/wm/ScreenRotationAnimation;->stepAnimationLocked(J)Z
+PLcom/android/server/wm/Session;->addToDisplay(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/InputChannel;)I
+PLcom/android/server/wm/Session;->binderDied()V
+PLcom/android/server/wm/Session;->cancelAlertWindowNotification()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;->remove(Landroid/view/IWindow;)V
+PLcom/android/server/wm/Session;->setHasOverlayUi(Z)V
+PLcom/android/server/wm/Session;->setInTouchMode(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
+PLcom/android/server/wm/Session;->windowRemovedLocked()V
+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/AppWindowToken;)Landroid/view/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/AppWindowToken;)Landroid/view/WindowManagerPolicy$StartingSurface;
+PLcom/android/server/wm/StackWindowController$H;-><init>(Ljava/lang/ref/WeakReference;Landroid/os/Looper;)V
+PLcom/android/server/wm/StackWindowController;-><init>(ILcom/android/server/wm/StackWindowListener;IZLandroid/graphics/Rect;)V
+PLcom/android/server/wm/StackWindowController;-><init>(ILcom/android/server/wm/StackWindowListener;IZLandroid/graphics/Rect;Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/StackWindowController;->getRawBounds(Landroid/graphics/Rect;)V
+PLcom/android/server/wm/StackWindowController;->positionChildAtBottom(Lcom/android/server/wm/TaskWindowContainerController;)V
+PLcom/android/server/wm/StartingData;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/SurfaceControlWithBackground;->setOpaque(Z)V
+PLcom/android/server/wm/SurfaceControlWithBackground;->setSize(II)V
+PLcom/android/server/wm/SurfaceControlWithBackground;->setTransparentRegionHint(Landroid/graphics/Region;)V
+PLcom/android/server/wm/Task;->addChild(Lcom/android/server/wm/AppWindowToken;I)V
+PLcom/android/server/wm/Task;->forceWindowsScaleable(Z)V
+PLcom/android/server/wm/Task;->getController()Lcom/android/server/wm/TaskWindowContainerController;
+PLcom/android/server/wm/Task;->getLayerForDim(Lcom/android/server/wm/WindowStateAnimator;II)I
+PLcom/android/server/wm/Task;->getTaskDescription()Landroid/app/ActivityManager$TaskDescription;
+PLcom/android/server/wm/Task;->getTopFullscreenAppToken()Lcom/android/server/wm/AppWindowToken;
+PLcom/android/server/wm/Task;->hasWindowsAlive()Z
+PLcom/android/server/wm/Task;->positionChildAt(ILcom/android/server/wm/AppWindowToken;Z)V
+PLcom/android/server/wm/Task;->prepareFreezingBounds()V
+PLcom/android/server/wm/Task;->removeChild(Lcom/android/server/wm/AppWindowToken;)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
+PLcom/android/server/wm/Task;->setSendingToBottom(Z)V
+PLcom/android/server/wm/Task;->shouldDeferRemoval()Z
+PLcom/android/server/wm/Task;->updateDisplayInfo(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/TaskSnapshotCache$CacheEntry;-><init>(Landroid/app/ActivityManager$TaskSnapshot;Lcom/android/server/wm/AppWindowToken;)V
+PLcom/android/server/wm/TaskSnapshotCache;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/TaskSnapshotLoader;)V
+PLcom/android/server/wm/TaskSnapshotCache;->onAppDied(Lcom/android/server/wm/AppWindowToken;)V
+PLcom/android/server/wm/TaskSnapshotCache;->onAppRemoved(Lcom/android/server/wm/AppWindowToken;)V
+PLcom/android/server/wm/TaskSnapshotCache;->onTaskRemoved(I)V
+PLcom/android/server/wm/TaskSnapshotCache;->removeRunningEntry(I)V
+PLcom/android/server/wm/TaskSnapshotCache;->tryRestoreFromDisk(IIZ)Landroid/app/ActivityManager$TaskSnapshot;
+PLcom/android/server/wm/TaskSnapshotController;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/TaskSnapshotController;->createStartingSurface(Lcom/android/server/wm/AppWindowToken;Landroid/app/ActivityManager$TaskSnapshot;)Landroid/view/WindowManagerPolicy$StartingSurface;
+PLcom/android/server/wm/TaskSnapshotController;->drawAppThemeSnapshot(Lcom/android/server/wm/Task;)Landroid/app/ActivityManager$TaskSnapshot;
+PLcom/android/server/wm/TaskSnapshotController;->getSnapshotMode(Lcom/android/server/wm/Task;)I
+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/AppWindowToken;Z)V
+PLcom/android/server/wm/TaskSnapshotController;->notifyTaskRemovedFromRecents(II)V
+PLcom/android/server/wm/TaskSnapshotController;->onAppDied(Lcom/android/server/wm/AppWindowToken;)V
+PLcom/android/server/wm/TaskSnapshotController;->onAppRemoved(Lcom/android/server/wm/AppWindowToken;)V
+PLcom/android/server/wm/TaskSnapshotController;->onTransitionStarting()V
+PLcom/android/server/wm/TaskSnapshotController;->removeObsoleteTaskFiles(Landroid/util/ArraySet;[I)V
+PLcom/android/server/wm/TaskSnapshotController;->shouldDisableSnapshots()Z
+PLcom/android/server/wm/TaskSnapshotController;->systemReady()V
+PLcom/android/server/wm/TaskSnapshotLoader;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;)V
+PLcom/android/server/wm/TaskSnapshotLoader;->loadTask(IIZ)Landroid/app/ActivityManager$TaskSnapshot;
+PLcom/android/server/wm/TaskSnapshotPersister$1;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;Ljava/lang/String;)V
+PLcom/android/server/wm/TaskSnapshotPersister$DeleteWriteQueueItem;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;II)V
+PLcom/android/server/wm/TaskSnapshotPersister$DeleteWriteQueueItem;->write()V
+PLcom/android/server/wm/TaskSnapshotPersister$RemoveObsoleteFilesQueueItem;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;Landroid/util/ArraySet;[I)V
+PLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;IILandroid/app/ActivityManager$TaskSnapshot;)V
+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$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$WriteQueueItem;)V
+PLcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;->onDequeuedLocked()V
+PLcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;->onQueuedLocked()V
+PLcom/android/server/wm/TaskSnapshotPersister;->-get2(Lcom/android/server/wm/TaskSnapshotPersister;)Z
+PLcom/android/server/wm/TaskSnapshotPersister;->-get3(Lcom/android/server/wm/TaskSnapshotPersister;)Landroid/util/ArraySet;
+PLcom/android/server/wm/TaskSnapshotPersister;->-get4(Lcom/android/server/wm/TaskSnapshotPersister;)Ljava/util/ArrayDeque;
+PLcom/android/server/wm/TaskSnapshotPersister;->-wrap0(Lcom/android/server/wm/TaskSnapshotPersister;I)Z
+PLcom/android/server/wm/TaskSnapshotPersister;->-wrap1(Lcom/android/server/wm/TaskSnapshotPersister;I)Ljava/io/File;
+PLcom/android/server/wm/TaskSnapshotPersister;->-wrap2(Lcom/android/server/wm/TaskSnapshotPersister;II)V
+PLcom/android/server/wm/TaskSnapshotPersister;-><init>(Lcom/android/server/wm/TaskSnapshotPersister$DirectoryResolver;)V
+PLcom/android/server/wm/TaskSnapshotPersister;->createDirectory(I)Z
+PLcom/android/server/wm/TaskSnapshotPersister;->deleteSnapshot(II)V
+PLcom/android/server/wm/TaskSnapshotPersister;->ensureStoreQueueDepthLocked()V
+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;->start()V
+PLcom/android/server/wm/TaskSnapshotSurface$1;-><init>(Landroid/os/Looper;)V
+PLcom/android/server/wm/TaskSnapshotSurface$SystemBarBackgroundPainter;-><init>(IIIII)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
+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;Landroid/graphics/Rect;Landroid/graphics/Rect;ZLandroid/util/MergedConfiguration;Landroid/graphics/Rect;ZZI)V
+PLcom/android/server/wm/TaskSnapshotSurface$Window;->setOuter(Lcom/android/server/wm/TaskSnapshotSurface;)V
+PLcom/android/server/wm/TaskSnapshotSurface;->-get1(Lcom/android/server/wm/TaskSnapshotSurface;)I
+PLcom/android/server/wm/TaskSnapshotSurface;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/TaskSnapshotSurface$Window;Landroid/view/Surface;Landroid/app/ActivityManager$TaskSnapshot;Ljava/lang/CharSequence;IIIIIILandroid/graphics/Rect;I)V
+PLcom/android/server/wm/TaskSnapshotSurface;->drawSizeMatchSnapshot(Landroid/graphics/GraphicBuffer;)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
+PLcom/android/server/wm/TaskStack;-><init>(Lcom/android/server/wm/WindowManagerService;I)V
+PLcom/android/server/wm/TaskStack;->addTask(Lcom/android/server/wm/Task;IZZ)V
+PLcom/android/server/wm/TaskStack;->findHomeTask()Lcom/android/server/wm/Task;
+PLcom/android/server/wm/TaskStack;->getRawFullscreen()Z
+PLcom/android/server/wm/TaskStack;->hasMovementAnimations()Z
+PLcom/android/server/wm/TaskStack;->isAdjustedForIme()Z
+PLcom/android/server/wm/TaskStack;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/TaskStack;->prepareFreezingTaskBounds()V
+PLcom/android/server/wm/TaskStack;->removeChild(Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/TaskStack;->removeChild(Lcom/android/server/wm/WindowContainer;)V
+PLcom/android/server/wm/TaskStack;->setBounds(Landroid/graphics/Rect;)Z
+PLcom/android/server/wm/TaskStack;->toShortString()Ljava/lang/String;
+PLcom/android/server/wm/TaskStack;->updateBoundsAfterConfigChange()Z
+PLcom/android/server/wm/TaskStack;->updateDisplayInfo(Landroid/graphics/Rect;)V
+PLcom/android/server/wm/TaskTapPointerEventListener;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/TaskWindowContainerController$H;-><init>(Ljava/lang/ref/WeakReference;Landroid/os/Looper;)V
+PLcom/android/server/wm/TaskWindowContainerController$H;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/wm/TaskWindowContainerController;-><init>(ILcom/android/server/wm/TaskWindowContainerListener;Lcom/android/server/wm/StackWindowController;ILandroid/graphics/Rect;Landroid/content/res/Configuration;IZZZZLandroid/app/ActivityManager$TaskDescription;)V
+PLcom/android/server/wm/TaskWindowContainerController;->createTask(ILcom/android/server/wm/TaskStack;ILandroid/graphics/Rect;Landroid/content/res/Configuration;IZZLandroid/app/ActivityManager$TaskDescription;)Lcom/android/server/wm/Task;
+PLcom/android/server/wm/TaskWindowContainerController;->positionChildAt(Lcom/android/server/wm/AppWindowContainerController;I)V
+PLcom/android/server/wm/TaskWindowContainerController;->removeContainer()V
+PLcom/android/server/wm/TaskWindowContainerController;->reportSnapshotChanged(Landroid/app/ActivityManager$TaskSnapshot;)V
+PLcom/android/server/wm/UnknownAppVisibilityController;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/UnknownAppVisibilityController;->allResolved()Z
+PLcom/android/server/wm/UnknownAppVisibilityController;->appRemovedOrHidden(Lcom/android/server/wm/AppWindowToken;)V
+PLcom/android/server/wm/UnknownAppVisibilityController;->clear()V
+PLcom/android/server/wm/UnknownAppVisibilityController;->notifyAppResumedFinished(Lcom/android/server/wm/AppWindowToken;)V
+PLcom/android/server/wm/UnknownAppVisibilityController;->notifyLaunched(Lcom/android/server/wm/AppWindowToken;)V
+PLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;-><init>()V
+PLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;-><init>(Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;)V
+PLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setTopWallpaper(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setUseTopWallpaperAsTarget(Z)V
+PLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setWallpaperTarget(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/WallpaperController;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WallpaperController;->addWallpaperToken(Lcom/android/server/wm/WallpaperWindowToken;)V
+PLcom/android/server/wm/WallpaperController;->clearLastWallpaperTimeoutTime()V
+PLcom/android/server/wm/WallpaperController;->hideDeferredWallpapersIfNeeded()V
+PLcom/android/server/wm/WallpaperController;->isBelowWallpaperTarget(Lcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/WallpaperController;->isWallpaperTargetAnimating()Z
+PLcom/android/server/wm/WallpaperController;->setWindowWallpaperPosition(Lcom/android/server/wm/WindowState;FFFF)V
+PLcom/android/server/wm/WallpaperController;->updateWallpaperOffsetLocked(Lcom/android/server/wm/WindowState;Z)V
+PLcom/android/server/wm/WallpaperVisibilityListeners;-><init>()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;->updateWallpaperOffset(IIZ)V
+PLcom/android/server/wm/WindowAnimator$DisplayContentsAnimator;-><init>(Lcom/android/server/wm/WindowAnimator;)V
+PLcom/android/server/wm/WindowAnimator$DisplayContentsAnimator;-><init>(Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator$DisplayContentsAnimator;)V
+PLcom/android/server/wm/WindowAnimator;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowAnimator;->addDisplayLocked(I)V
+PLcom/android/server/wm/WindowAnimator;->isAnimating()Z
+PLcom/android/server/wm/WindowAnimator;->isAnimationScheduled()Z
+PLcom/android/server/wm/WindowAnimator;->lambda$-com_android_server_wm_WindowAnimator_3844()V
+PLcom/android/server/wm/WindowAnimator;->requestRemovalOfReplacedWindows(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/WindowAnimator;->setScreenRotationAnimationLocked(ILcom/android/server/wm/ScreenRotationAnimation;)V
+PLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;-><init>(Lcom/android/server/wm/WindowContainer;)V
+PLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;-><init>(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;)V
+PLcom/android/server/wm/WindowContainer;->addChild(Lcom/android/server/wm/WindowContainer;I)V
+PLcom/android/server/wm/WindowContainer;->getOverrideConfiguration()Landroid/content/res/Configuration;
+PLcom/android/server/wm/WindowContainer;->onDescendantOverrideConfigurationChanged()V
+PLcom/android/server/wm/WindowContainer;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/WindowContainer;->removeIfPossible()V
+PLcom/android/server/wm/WindowContainer;->setOrientation(I)V
+PLcom/android/server/wm/WindowContainerController;-><init>(Lcom/android/server/wm/WindowContainerListener;Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowContainerController;->removeContainer()V
+PLcom/android/server/wm/WindowContainerController;->setContainer(Lcom/android/server/wm/WindowContainer;)V
+PLcom/android/server/wm/WindowHashMap;-><init>()V
+PLcom/android/server/wm/WindowLayersController;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowLayersController;->assignAndIncreaseLayerIfNeeded(Lcom/android/server/wm/WindowState;I)I
+PLcom/android/server/wm/WindowList;->addFirst(Ljava/lang/Object;)V
+PLcom/android/server/wm/WindowList;->peekFirst()Ljava/lang/Object;
+PLcom/android/server/wm/WindowManagerService$1;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/wm/WindowManagerService$2;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService$2;->onAppTransitionCancelledLocked(I)V
+PLcom/android/server/wm/WindowManagerService$3;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService$3;->run()V
+PLcom/android/server/wm/WindowManagerService$4;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService$5;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService$7;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;)V
+PLcom/android/server/wm/WindowManagerService$H;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService$LocalService;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService$LocalService;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService$LocalService;)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->addWindowToken(Landroid/os/IBinder;II)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->getFocusedWindowToken()Landroid/os/IBinder;
+PLcom/android/server/wm/WindowManagerService$LocalService;->getInputMethodWindowVisibleHeight()I
+PLcom/android/server/wm/WindowManagerService$LocalService;->isHardKeyboardAvailable()Z
+PLcom/android/server/wm/WindowManagerService$LocalService;->isKeyguardGoingAway()Z
+PLcom/android/server/wm/WindowManagerService$LocalService;->registerAppTransitionListener(Landroid/view/WindowManagerInternal$AppTransitionListener;)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->removeWindowToken(Landroid/os/IBinder;ZI)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->requestTraversalFromDisplayManager()V
+PLcom/android/server/wm/WindowManagerService$LocalService;->setOnHardKeyboardStatusChangeListener(Landroid/view/WindowManagerInternal$OnHardKeyboardStatusChangeListener;)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->setWindowsForAccessibilityCallback(Landroid/view/WindowManagerInternal$WindowsForAccessibilityCallback;)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->updateInputMethodWindowStatus(Landroid/os/IBinder;ZZLandroid/os/IBinder;)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->waitForAllWindowsDrawn(Ljava/lang/Runnable;J)V
+PLcom/android/server/wm/WindowManagerService$MousePositionTracker;-><init>()V
+PLcom/android/server/wm/WindowManagerService$MousePositionTracker;-><init>(Lcom/android/server/wm/WindowManagerService$MousePositionTracker;)V
+PLcom/android/server/wm/WindowManagerService$RotationWatcher;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/IRotationWatcher;Landroid/os/IBinder$DeathRecipient;I)V
+PLcom/android/server/wm/WindowManagerService$SettingsObserver;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService;->-get2(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/KeyguardDisableHandler;
+PLcom/android/server/wm/WindowManagerService;->-wrap0(Lcom/android/server/wm/WindowManagerService;)Z
+PLcom/android/server/wm/WindowManagerService;->-wrap1(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/WindowState;
+PLcom/android/server/wm/WindowManagerService;->-wrap4(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService;->-wrap6(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowManagerService;-><init>(Landroid/content/Context;Lcom/android/server/input/InputManagerService;ZZZLandroid/view/WindowManagerPolicy;)V
+PLcom/android/server/wm/WindowManagerService;->addWindowToken(Landroid/os/IBinder;II)V
+PLcom/android/server/wm/WindowManagerService;->canDispatchPointerEvents()Z
+PLcom/android/server/wm/WindowManagerService;->checkBootAnimationCompleteLocked()Z
+PLcom/android/server/wm/WindowManagerService;->closeSystemDialogs(Ljava/lang/String;)V
+PLcom/android/server/wm/WindowManagerService;->computeNewConfiguration(I)Landroid/content/res/Configuration;
+PLcom/android/server/wm/WindowManagerService;->computeNewConfigurationLocked(I)Landroid/content/res/Configuration;
+PLcom/android/server/wm/WindowManagerService;->configureDisplayPolicyLocked(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/WindowManagerService;->createDisplayContentLocked(Landroid/view/Display;)V
+PLcom/android/server/wm/WindowManagerService;->createInputConsumer(Ljava/lang/String;Landroid/view/InputChannel;)V
+PLcom/android/server/wm/WindowManagerService;->createWatermarkInTransaction()V
+PLcom/android/server/wm/WindowManagerService;->destroyInputConsumer(Ljava/lang/String;)Z
+PLcom/android/server/wm/WindowManagerService;->detectSafeMode()Z
+PLcom/android/server/wm/WindowManagerService;->disableKeyguard(Landroid/os/IBinder;Ljava/lang/String;)V
+PLcom/android/server/wm/WindowManagerService;->displayReady()V
+PLcom/android/server/wm/WindowManagerService;->displayReady(I)V
+PLcom/android/server/wm/WindowManagerService;->doesAddToastWindowRequireToken(Ljava/lang/String;ILcom/android/server/wm/WindowState;)Z
+PLcom/android/server/wm/WindowManagerService;->enableScreenAfterBoot()V
+PLcom/android/server/wm/WindowManagerService;->enableScreenIfNeeded()V
+PLcom/android/server/wm/WindowManagerService;->getBaseDisplaySize(ILandroid/graphics/Point;)V
+PLcom/android/server/wm/WindowManagerService;->getCameraLensCoverState()I
+PLcom/android/server/wm/WindowManagerService;->getDefaultDisplayRotation()I
+PLcom/android/server/wm/WindowManagerService;->getDisplaysInFocusOrder(Landroid/util/SparseIntArray;)V
+PLcom/android/server/wm/WindowManagerService;->getDockedStackSide()I
+PLcom/android/server/wm/WindowManagerService;->getFocusedWindowLocked()Lcom/android/server/wm/WindowState;
+PLcom/android/server/wm/WindowManagerService;->getForcedDisplayDensityForUserLocked(I)I
+PLcom/android/server/wm/WindowManagerService;->getInitialDisplaySize(ILandroid/graphics/Point;)V
+PLcom/android/server/wm/WindowManagerService;->getInputMonitor()Lcom/android/server/wm/InputMonitor;
+PLcom/android/server/wm/WindowManagerService;->getInstance()Lcom/android/server/wm/WindowManagerService;
+PLcom/android/server/wm/WindowManagerService;->getPendingAppTransition()I
+PLcom/android/server/wm/WindowManagerService;->getTaskSnapshot(IIZ)Landroid/app/ActivityManager$TaskSnapshot;
+PLcom/android/server/wm/WindowManagerService;->getWindowAnimationScaleLocked()F
+PLcom/android/server/wm/WindowManagerService;->getWindowId(Landroid/os/IBinder;)Landroid/view/IWindowId;
+PLcom/android/server/wm/WindowManagerService;->getWindowManagerLock()Ljava/lang/Object;
+PLcom/android/server/wm/WindowManagerService;->hasNavigationBar()Z
+PLcom/android/server/wm/WindowManagerService;->hasWideColorGamutSupport()Z
+PLcom/android/server/wm/WindowManagerService;->hideBootMessagesLocked()V
+PLcom/android/server/wm/WindowManagerService;->inKeyguardRestrictedInputMode()Z
+PLcom/android/server/wm/WindowManagerService;->initPolicy()V
+PLcom/android/server/wm/WindowManagerService;->isKeyguardSecure()Z
+PLcom/android/server/wm/WindowManagerService;->isRotationFrozen()Z
+PLcom/android/server/wm/WindowManagerService;->isSafeModeEnabled()Z
+PLcom/android/server/wm/WindowManagerService;->lambda$-com_android_server_wm_WindowManagerService_42198(Landroid/content/Context;Lcom/android/server/input/InputManagerService;ZZZLandroid/view/WindowManagerPolicy;)V
+PLcom/android/server/wm/WindowManagerService;->main(Landroid/content/Context;Lcom/android/server/input/InputManagerService;ZZZLandroid/view/WindowManagerPolicy;)Lcom/android/server/wm/WindowManagerService;
+PLcom/android/server/wm/WindowManagerService;->notifyAppRelaunching(Landroid/os/IBinder;)V
+PLcom/android/server/wm/WindowManagerService;->notifyAppRelaunchingFinished(Landroid/os/IBinder;)V
+PLcom/android/server/wm/WindowManagerService;->notifyKeyguardFlagsChanged(Ljava/lang/Runnable;)V
+PLcom/android/server/wm/WindowManagerService;->notifyKeyguardTrustedChanged()V
+PLcom/android/server/wm/WindowManagerService;->notifyTaskRemovedFromRecents(II)V
+PLcom/android/server/wm/WindowManagerService;->onDisplayChanged(I)V
+PLcom/android/server/wm/WindowManagerService;->onKeyguardOccludedChanged(Z)V
+PLcom/android/server/wm/WindowManagerService;->onSystemUiStarted()V
+PLcom/android/server/wm/WindowManagerService;->openSession(Landroid/view/IWindowSessionCallback;Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;)Landroid/view/IWindowSession;
+PLcom/android/server/wm/WindowManagerService;->overridePendingAppTransition(Ljava/lang/String;IILandroid/os/IRemoteCallback;)V
+PLcom/android/server/wm/WindowManagerService;->overridePendingAppTransitionClipReveal(IIII)V
+PLcom/android/server/wm/WindowManagerService;->performBootTimeout()V
+PLcom/android/server/wm/WindowManagerService;->performEnableScreen()V
+PLcom/android/server/wm/WindowManagerService;->prepareNoneTransitionForRelaunching(Lcom/android/server/wm/AppWindowToken;)V
+PLcom/android/server/wm/WindowManagerService;->prepareWindowReplacementTransition(Lcom/android/server/wm/AppWindowToken;)Z
+PLcom/android/server/wm/WindowManagerService;->queryWideColorGamutSupport()Z
+PLcom/android/server/wm/WindowManagerService;->readForcedDisplayPropertiesLocked(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/WindowManagerService;->reconfigureDisplayLocked(Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/WindowManagerService;->registerAppFreezeListener(Lcom/android/server/wm/WindowManagerService$AppFreezeListener;)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;->registerPointerEventListener(Landroid/view/WindowManagerPolicy$PointerEventListener;)V
+PLcom/android/server/wm/WindowManagerService;->registerShortcutKey(JLcom/android/internal/policy/IShortcutService;)V
+PLcom/android/server/wm/WindowManagerService;->registerWallpaperVisibilityListener(Landroid/view/IWallpaperVisibilityListener;I)Z
+PLcom/android/server/wm/WindowManagerService;->removeObsoleteTaskFiles(Landroid/util/ArraySet;[I)V
+PLcom/android/server/wm/WindowManagerService;->removeWindowToken(Landroid/os/IBinder;I)V
+PLcom/android/server/wm/WindowManagerService;->sendNewConfiguration(I)V
+PLcom/android/server/wm/WindowManagerService;->setAnimatorDurationScale(F)V
+PLcom/android/server/wm/WindowManagerService;->setDockedStackDividerTouchRegion(Landroid/graphics/Rect;)V
+PLcom/android/server/wm/WindowManagerService;->setEventDispatching(Z)V
+PLcom/android/server/wm/WindowManagerService;->setForceResizableTasks(Z)V
+PLcom/android/server/wm/WindowManagerService;->setInputMethodWindowLocked(Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/WindowManagerService;->setKeyguardGoingAway(Z)V
+PLcom/android/server/wm/WindowManagerService;->setNewDisplayOverrideConfiguration(Landroid/content/res/Configuration;I)[I
+PLcom/android/server/wm/WindowManagerService;->setScreenCaptureDisabled(IZ)V
+PLcom/android/server/wm/WindowManagerService;->setSupportsPictureInPicture(Z)V
+PLcom/android/server/wm/WindowManagerService;->setTransparentRegionWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/graphics/Region;)V
+PLcom/android/server/wm/WindowManagerService;->showEmulatorDisplayOverlayIfNeeded()V
+PLcom/android/server/wm/WindowManagerService;->startFreezingDisplayLocked(ZIILcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/WindowManagerService;->systemReady()V
+PLcom/android/server/wm/WindowManagerService;->thawRotation()V
+PLcom/android/server/wm/WindowManagerService;->unregisterAppFreezeListener(Lcom/android/server/wm/WindowManagerService$AppFreezeListener;)V
+PLcom/android/server/wm/WindowManagerService;->updateCircularDisplayMaskIfNeeded()V
+PLcom/android/server/wm/WindowManagerService;->updateRotation(ZZ)V
+PLcom/android/server/wm/WindowManagerService;->updateRotationUnchecked(ZZ)V
+PLcom/android/server/wm/WindowManagerService;->watchRotation(Landroid/view/IRotationWatcher;I)I
+PLcom/android/server/wm/WindowManagerThreadPriorityBooster;-><init>()V
+PLcom/android/server/wm/WindowState$1;-><init>()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$DeathRecipient;)V
+PLcom/android/server/wm/WindowState$DeathRecipient;->binderDied()V
+PLcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;-><init>()V
+PLcom/android/server/wm/WindowState$WindowId;-><init>(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState$WindowId;)V
+PLcom/android/server/wm/WindowState;->-wrap1(Lcom/android/server/wm/WindowState;Z)V
+PLcom/android/server/wm/WindowState;->attach()V
+PLcom/android/server/wm/WindowState;->clearAnimatingFlags()Z
+PLcom/android/server/wm/WindowState;->clearAnimatingWithSavedSurface()Z
+PLcom/android/server/wm/WindowState;->forAllWindowBottomToTop(Lcom/android/internal/util/ToBooleanFunction;)Z
+PLcom/android/server/wm/WindowState;->getContentFrameLw()Landroid/graphics/Rect;
+PLcom/android/server/wm/WindowState;->getFrameLw()Landroid/graphics/Rect;
+PLcom/android/server/wm/WindowState;->getGivenContentInsetsLw()Landroid/graphics/Rect;
+PLcom/android/server/wm/WindowState;->getGivenInsetsPendingLw()Z
+PLcom/android/server/wm/WindowState;->getGivenVisibleInsetsLw()Landroid/graphics/Rect;
+PLcom/android/server/wm/WindowState;->getOwningPackage()Ljava/lang/String;
+PLcom/android/server/wm/WindowState;->getOwningUid()I
+PLcom/android/server/wm/WindowState;->getReplacingWindow()Lcom/android/server/wm/WindowState;
+PLcom/android/server/wm/WindowState;->getRotationAnimationHint()I
+PLcom/android/server/wm/WindowState;->getVisibleFrameLw()Landroid/graphics/Rect;
+PLcom/android/server/wm/WindowState;->hasAppShownWindows()Z
+PLcom/android/server/wm/WindowState;->hasDrawnLw()Z
+PLcom/android/server/wm/WindowState;->hasVisibleNotDrawnWallpaper()Z
+PLcom/android/server/wm/WindowState;->hidePermanentlyLw()V
+PLcom/android/server/wm/WindowState;->isClosing()Z
+PLcom/android/server/wm/WindowState;->isDrawFinishedLw()Z
+PLcom/android/server/wm/WindowState;->isWindowAnimationSet()Z
+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;->orientationChangeTimedOut()V
+PLcom/android/server/wm/WindowState;->removeIfPossible()V
+PLcom/android/server/wm/WindowState;->setDragResizing()V
+PLcom/android/server/wm/WindowState;->setForceHideNonSystemOverlayWindowIfNeeded(Z)V
+PLcom/android/server/wm/WindowState;->setOrientationChanging(Z)V
+PLcom/android/server/wm/WindowState;->setResizedWhileNotDragResizing(Z)V
+PLcom/android/server/wm/WindowState;->setShowToOwnerOnlyLocked(Z)V
+PLcom/android/server/wm/WindowState;->setupWindowForRemoveOnExit()V
+PLcom/android/server/wm/WindowState;->shouldKeepVisibleDeadAppWindow()Z
+PLcom/android/server/wm/WindowState;->waitingForReplacement()Z
+PLcom/android/server/wm/WindowStateAnimator;->clearAnimation()V
+PLcom/android/server/wm/WindowStateAnimator;->destroyDeferredSurfaceLocked()V
+PLcom/android/server/wm/WindowStateAnimator;->markPreservedSurfaceForDestroy()V
+PLcom/android/server/wm/WindowStateAnimator;->setAnimation(Landroid/view/animation/Animation;)V
+PLcom/android/server/wm/WindowStateAnimator;->setOpaqueLocked(Z)V
+PLcom/android/server/wm/WindowStateAnimator;->setTransparentRegionHintLocked(Landroid/graphics/Region;)V
+PLcom/android/server/wm/WindowStateAnimator;->tryChangeFormatInPlaceLocked()Z
+PLcom/android/server/wm/WindowSurfaceController;->getLayer()I
+PLcom/android/server/wm/WindowSurfaceController;->setOpaque(Z)V
+PLcom/android/server/wm/WindowSurfaceController;->setTransparentRegionHint(Landroid/graphics/Region;)V
+PLcom/android/server/wm/WindowSurfacePlacer$LayerAndToken;-><init>()V
+PLcom/android/server/wm/WindowSurfacePlacer$LayerAndToken;-><init>(Lcom/android/server/wm/WindowSurfacePlacer$LayerAndToken;)V
+PLcom/android/server/wm/WindowSurfacePlacer;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/WindowSurfacePlacer;->handleNonAppWindowsInTransition(II)V
+PLcom/android/server/wm/WindowSurfacePlacer;->isInLayout()Z
+PLcom/android/server/wm/WindowSurfacePlacer;->processApplicationsAnimatingInPlace(I)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;->asAppWindowToken()Lcom/android/server/wm/AppWindowToken;
+PLcom/android/server/wm/WindowToken;->isEmpty()Z
+PLcom/android/server/wm/WindowToken;->lambda$-com_android_server_wm_WindowToken_3278(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)I
+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/animation/ClipRectLRAnimation;-><init>(IIII)V
+PLcom/android/server/wm/animation/ClipRectTBAnimation;-><init>(IIIIIILandroid/view/animation/Interpolator;)V
+PLcom/android/timezone/distro/installer/TimeZoneDistroInstaller;-><init>(Ljava/lang/String;Ljava/io/File;Ljava/io/File;)V
+SPLcom/android/server/-$Lambda$Ganck_s9Kl5o2K6eVDoQTKLc-6g;->$m$2()V
+SPLcom/android/server/-$Lambda$Ganck_s9Kl5o2K6eVDoQTKLc-6g;-><init>(BLjava/lang/Object;Ljava/lang/Object;)V
+SPLcom/android/server/-$Lambda$Ganck_s9Kl5o2K6eVDoQTKLc-6g;->run()V
+SPLcom/android/server/-$Lambda$T7cKu_OKm_Fk2kBNthmo_uUJTSo;->$m$0()V
+SPLcom/android/server/-$Lambda$T7cKu_OKm_Fk2kBNthmo_uUJTSo;-><init>(B)V
+SPLcom/android/server/-$Lambda$T7cKu_OKm_Fk2kBNthmo_uUJTSo;->run()V
+SPLcom/android/server/AppOpsService$1;-><init>(Lcom/android/server/AppOpsService;)V
+SPLcom/android/server/AppOpsService$Callback;-><init>(Lcom/android/server/AppOpsService;Lcom/android/internal/app/IAppOpsCallback;)V
+SPLcom/android/server/AppOpsService$Ops;-><init>(Ljava/lang/String;Lcom/android/server/AppOpsService$UidState;Z)V
+SPLcom/android/server/AppOpsService$UidState;-><init>(I)V
+SPLcom/android/server/AppOpsService;-><init>(Ljava/io/File;Landroid/os/Handler;)V
+SPLcom/android/server/AppOpsService;->publish(Landroid/content/Context;)V
+SPLcom/android/server/AppOpsService;->readUidOps(Lorg/xmlpull/v1/XmlPullParser;)V
+SPLcom/android/server/DisplayThread;-><init>()V
+SPLcom/android/server/DisplayThread;->ensureThreadLocked()V
+SPLcom/android/server/DisplayThread;->get()Lcom/android/server/DisplayThread;
+SPLcom/android/server/DisplayThread;->getHandler()Landroid/os/Handler;
+SPLcom/android/server/FgThread;-><init>()V
+SPLcom/android/server/FgThread;->ensureThreadLocked()V
+SPLcom/android/server/FgThread;->get()Lcom/android/server/FgThread;
+SPLcom/android/server/FgThread;->getHandler()Landroid/os/Handler;
+SPLcom/android/server/IntentResolver$1;-><init>()V
+SPLcom/android/server/IntentResolver;-><init>()V
+SPLcom/android/server/IntentResolver;->filterSet()Ljava/util/Set;
+SPLcom/android/server/IoThread;-><init>()V
+SPLcom/android/server/IoThread;->ensureThreadLocked()V
+SPLcom/android/server/IoThread;->getHandler()Landroid/os/Handler;
+SPLcom/android/server/LockGuard;->installLock(Ljava/lang/Object;I)Ljava/lang/Object;
+SPLcom/android/server/LockGuard;->installNewLock(I)Ljava/lang/Object;
+SPLcom/android/server/RecoverySystemService$BinderService;-><init>(Lcom/android/server/RecoverySystemService;)V
+SPLcom/android/server/RecoverySystemService$BinderService;-><init>(Lcom/android/server/RecoverySystemService;Lcom/android/server/RecoverySystemService$BinderService;)V
+SPLcom/android/server/RecoverySystemService;-><init>(Landroid/content/Context;)V
+SPLcom/android/server/RecoverySystemService;->onStart()V
+SPLcom/android/server/RescueParty$BootThreshold;-><init>()V
+SPLcom/android/server/RescueParty$Threshold;-><init>(IIJ)V
+SPLcom/android/server/RescueParty;->isDisabled()Z
+SPLcom/android/server/RescueParty;->isUsbActive()Z
+SPLcom/android/server/RescueParty;->noteBoot(Landroid/content/Context;)V
+SPLcom/android/server/ServiceThread;-><init>(Ljava/lang/String;IZ)V
+SPLcom/android/server/ServiceThread;->run()V
+SPLcom/android/server/SystemServer;->-com_android_server_SystemServer-mthref-0()V
+SPLcom/android/server/SystemServer;-><init>()V
+SPLcom/android/server/SystemServer;->createSystemContext()V
+SPLcom/android/server/SystemServer;->main([Ljava/lang/String;)V
+SPLcom/android/server/SystemServer;->performPendingShutdown()V
+SPLcom/android/server/SystemServer;->run()V
+SPLcom/android/server/SystemServer;->startBootstrapServices()V
+SPLcom/android/server/SystemServerInitThreadPool;-><init>()V
+SPLcom/android/server/SystemServerInitThreadPool;->get()Lcom/android/server/SystemServerInitThreadPool;
+SPLcom/android/server/SystemServerInitThreadPool;->lambda$-com_android_server_SystemServerInitThreadPool_2249(Ljava/lang/String;Ljava/lang/Runnable;)V
+SPLcom/android/server/SystemServerInitThreadPool;->submit(Ljava/lang/Runnable;Ljava/lang/String;)Ljava/util/concurrent/Future;
+SPLcom/android/server/SystemService;-><init>(Landroid/content/Context;)V
+SPLcom/android/server/SystemService;->onBootPhase(I)V
+SPLcom/android/server/SystemService;->publishBinderService(Ljava/lang/String;Landroid/os/IBinder;)V
+SPLcom/android/server/SystemService;->publishBinderService(Ljava/lang/String;Landroid/os/IBinder;Z)V
+SPLcom/android/server/SystemService;->publishLocalService(Ljava/lang/Class;Ljava/lang/Object;)V
+SPLcom/android/server/SystemServiceManager;-><init>(Landroid/content/Context;)V
+SPLcom/android/server/SystemServiceManager;->setRuntimeRestarted(Z)V
+SPLcom/android/server/ThreadPriorityBooster$1;-><init>(Lcom/android/server/ThreadPriorityBooster;)V
+SPLcom/android/server/ThreadPriorityBooster;-><init>(II)V
+SPLcom/android/server/UiThread;-><init>()V
+SPLcom/android/server/UiThread;->ensureThreadLocked()V
+SPLcom/android/server/UiThread;->get()Lcom/android/server/UiThread;
+SPLcom/android/server/UiThread;->getHandler()Landroid/os/Handler;
+SPLcom/android/server/UiThread;->run()V
+SPLcom/android/server/Watchdog$BinderThreadMonitor;-><init>()V
+SPLcom/android/server/Watchdog$BinderThreadMonitor;-><init>(Lcom/android/server/Watchdog$BinderThreadMonitor;)V
+SPLcom/android/server/Watchdog$HandlerChecker;-><init>(Lcom/android/server/Watchdog;Landroid/os/Handler;Ljava/lang/String;J)V
+SPLcom/android/server/Watchdog$HandlerChecker;->addMonitor(Lcom/android/server/Watchdog$Monitor;)V
+SPLcom/android/server/Watchdog$OpenFdMonitor;-><init>(Ljava/io/File;Ljava/io/File;)V
+SPLcom/android/server/Watchdog$OpenFdMonitor;->create()Lcom/android/server/Watchdog$OpenFdMonitor;
+SPLcom/android/server/Watchdog;-><init>()V
+SPLcom/android/server/Watchdog;->addMonitor(Lcom/android/server/Watchdog$Monitor;)V
+SPLcom/android/server/Watchdog;->addThread(Landroid/os/Handler;)V
+SPLcom/android/server/Watchdog;->addThread(Landroid/os/Handler;J)V
+SPLcom/android/server/Watchdog;->getInstance()Lcom/android/server/Watchdog;
+SPLcom/android/server/am/-$Lambda$FqYE94sGA9-gF3KGIicLxzMb89s;-><init>(B)V
+SPLcom/android/server/am/-$Lambda$pTkujrAbcljW_zZtzXt4TxsgOZU;->$m$0(Ljava/lang/Runnable;)Ljava/lang/Thread;
+SPLcom/android/server/am/-$Lambda$pTkujrAbcljW_zZtzXt4TxsgOZU;-><init>()V
+SPLcom/android/server/am/-$Lambda$pTkujrAbcljW_zZtzXt4TxsgOZU;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
+SPLcom/android/server/am/ActiveServices$1;-><init>(Lcom/android/server/am/ActiveServices;)V
+SPLcom/android/server/am/ActiveServices;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+SPLcom/android/server/am/ActivityManagerConstants;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Handler;)V
+SPLcom/android/server/am/ActivityManagerConstants;->computeEmptyProcessLimit(I)I
+SPLcom/android/server/am/ActivityManagerConstants;->updateMaxCachedProcesses()V
+SPLcom/android/server/am/ActivityManagerService$1;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+SPLcom/android/server/am/ActivityManagerService$2;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Looper;)V
+SPLcom/android/server/am/ActivityManagerService$3;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+SPLcom/android/server/am/ActivityManagerService$4;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;)V
+SPLcom/android/server/am/ActivityManagerService$Injector;-><init>()V
+SPLcom/android/server/am/ActivityManagerService$Injector;->getAppOpsService(Ljava/io/File;Landroid/os/Handler;)Lcom/android/server/AppOpsService;
+SPLcom/android/server/am/ActivityManagerService$Injector;->getUiHandler(Lcom/android/server/am/ActivityManagerService;)Landroid/os/Handler;
+SPLcom/android/server/am/ActivityManagerService$IntentFirewallInterface;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+SPLcom/android/server/am/ActivityManagerService$IntentFirewallInterface;->getAMSLock()Ljava/lang/Object;
+SPLcom/android/server/am/ActivityManagerService$KillHandler;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Looper;)V
+SPLcom/android/server/am/ActivityManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
+SPLcom/android/server/am/ActivityManagerService$Lifecycle;->getService()Lcom/android/server/am/ActivityManagerService;
+SPLcom/android/server/am/ActivityManagerService$Lifecycle;->onStart()V
+SPLcom/android/server/am/ActivityManagerService$LocalService;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+SPLcom/android/server/am/ActivityManagerService$MainHandler;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Looper;)V
+SPLcom/android/server/am/ActivityManagerService$UiHandler;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+SPLcom/android/server/am/ActivityManagerService$UpdateConfigurationResult;-><init>()V
+SPLcom/android/server/am/ActivityManagerService$UpdateConfigurationResult;-><init>(Lcom/android/server/am/ActivityManagerService$UpdateConfigurationResult;)V
+SPLcom/android/server/am/ActivityManagerService;->-wrap10(Lcom/android/server/am/ActivityManagerService;)V
+SPLcom/android/server/am/ActivityManagerService;-><init>(Landroid/content/Context;)V
+SPLcom/android/server/am/ActivityManagerService;->createStackSupervisor()Lcom/android/server/am/ActivityStackSupervisor;
+SPLcom/android/server/am/ActivityManagerService;->initPowerManagement()V
+SPLcom/android/server/am/ActivityManagerService;->setInstaller(Lcom/android/server/pm/Installer;)V
+SPLcom/android/server/am/ActivityManagerService;->setSystemServiceManager(Lcom/android/server/SystemServiceManager;)V
+SPLcom/android/server/am/ActivityManagerService;->start()V
+SPLcom/android/server/am/ActivityMetricsLogger;-><init>(Lcom/android/server/am/ActivityStackSupervisor;Landroid/content/Context;)V
+SPLcom/android/server/am/ActivityStackSupervisor$ActivityStackSupervisorHandler;-><init>(Lcom/android/server/am/ActivityStackSupervisor;Landroid/os/Looper;)V
+SPLcom/android/server/am/ActivityStackSupervisor$FindTaskResult;-><init>()V
+SPLcom/android/server/am/ActivityStackSupervisor;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Looper;)V
+SPLcom/android/server/am/ActivityStackSupervisor;->getChildCount()I
+SPLcom/android/server/am/ActivityStackSupervisor;->initPowerManagement()V
+SPLcom/android/server/am/ActivityStackSupervisor;->setRecentTasks(Lcom/android/server/am/RecentTasks;)V
+SPLcom/android/server/am/ActivityStartInterceptor;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityStackSupervisor;)V
+SPLcom/android/server/am/ActivityStarter;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityStackSupervisor;)V
+SPLcom/android/server/am/AppErrors;-><init>(Landroid/content/Context;Lcom/android/server/am/ActivityManagerService;)V
+SPLcom/android/server/am/BatteryExternalStatsWorker$1;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
+SPLcom/android/server/am/BatteryExternalStatsWorker$2;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
+SPLcom/android/server/am/BatteryExternalStatsWorker$2;->run()V
+SPLcom/android/server/am/BatteryExternalStatsWorker;->-get0(Lcom/android/server/am/BatteryExternalStatsWorker;)Ljava/lang/String;
+SPLcom/android/server/am/BatteryExternalStatsWorker;->-get1(Lcom/android/server/am/BatteryExternalStatsWorker;)Lcom/android/internal/os/BatteryStatsImpl;
+SPLcom/android/server/am/BatteryExternalStatsWorker;->-get2(Lcom/android/server/am/BatteryExternalStatsWorker;)Landroid/util/IntArray;
+SPLcom/android/server/am/BatteryExternalStatsWorker;->-get3(Lcom/android/server/am/BatteryExternalStatsWorker;)I
+SPLcom/android/server/am/BatteryExternalStatsWorker;->-get4(Lcom/android/server/am/BatteryExternalStatsWorker;)Ljava/lang/Object;
+SPLcom/android/server/am/BatteryExternalStatsWorker;->-set0(Lcom/android/server/am/BatteryExternalStatsWorker;Ljava/util/concurrent/Future;)Ljava/util/concurrent/Future;
+SPLcom/android/server/am/BatteryExternalStatsWorker;->-set1(Lcom/android/server/am/BatteryExternalStatsWorker;Ljava/lang/String;)Ljava/lang/String;
+SPLcom/android/server/am/BatteryExternalStatsWorker;->-set2(Lcom/android/server/am/BatteryExternalStatsWorker;I)I
+SPLcom/android/server/am/BatteryExternalStatsWorker;->-wrap0(Lcom/android/server/am/BatteryExternalStatsWorker;Ljava/lang/String;I)V
+SPLcom/android/server/am/BatteryExternalStatsWorker;-><init>(Landroid/content/Context;Lcom/android/internal/os/BatteryStatsImpl;)V
+SPLcom/android/server/am/BatteryExternalStatsWorker;->lambda$-com_android_server_am_BatteryExternalStatsWorker_2654(Ljava/lang/Runnable;)Ljava/lang/Thread;
+SPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleSyncLocked(Ljava/lang/String;I)Ljava/util/concurrent/Future;
+SPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleWrite()Ljava/util/concurrent/Future;
+SPLcom/android/server/am/BatteryStatsService$1;-><init>(Lcom/android/server/am/BatteryStatsService;)V
+SPLcom/android/server/am/BatteryStatsService$1;->getUserIds()[I
+SPLcom/android/server/am/BatteryStatsService$WakeupReasonThread;-><init>(Lcom/android/server/am/BatteryStatsService;)V
+SPLcom/android/server/am/BatteryStatsService$WakeupReasonThread;->run()V
+SPLcom/android/server/am/BatteryStatsService$WakeupReasonThread;->waitWakeup()Ljava/lang/String;
+SPLcom/android/server/am/BatteryStatsService;->-wrap0(Ljava/nio/ByteBuffer;)I
+SPLcom/android/server/am/BatteryStatsService;-><init>(Landroid/content/Context;Ljava/io/File;Landroid/os/Handler;)V
+SPLcom/android/server/am/BatteryStatsService;->initPowerManagement()V
+SPLcom/android/server/am/BatteryStatsService;->publish()V
+SPLcom/android/server/am/BatteryStatsService;->scheduleWriteToDisk()V
+SPLcom/android/server/am/BroadcastQueue$BroadcastHandler;-><init>(Lcom/android/server/am/BroadcastQueue;Landroid/os/Looper;)V
+SPLcom/android/server/am/BroadcastQueue;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Handler;Ljava/lang/String;JZ)V
+SPLcom/android/server/am/CompatModePackages$CompatHandler;-><init>(Lcom/android/server/am/CompatModePackages;Landroid/os/Looper;)V
+SPLcom/android/server/am/CompatModePackages;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/io/File;Landroid/os/Handler;)V
+SPLcom/android/server/am/InstrumentationReporter;-><init>()V
+SPLcom/android/server/am/KeyguardController;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityStackSupervisor;)V
+SPLcom/android/server/am/ProcessList;-><init>()V
+SPLcom/android/server/am/ProcessList;->updateOomLevels(IIZ)V
+SPLcom/android/server/am/ProcessStatsService$1;-><init>(Lcom/android/server/am/ProcessStatsService;)V
+SPLcom/android/server/am/ProcessStatsService;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/io/File;)V
+SPLcom/android/server/am/ProcessStatsService;->updateFile()V
+SPLcom/android/server/am/ProviderMap;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+SPLcom/android/server/am/RecentTasks$1;-><init>()V
+SPLcom/android/server/am/RecentTasks;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityStackSupervisor;)V
+SPLcom/android/server/am/TaskChangeNotificationController$MainHandler;-><init>(Lcom/android/server/am/TaskChangeNotificationController;Landroid/os/Looper;)V
+SPLcom/android/server/am/TaskChangeNotificationController;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityStackSupervisor;Landroid/os/Handler;)V
+SPLcom/android/server/am/TaskPersister$LazyTaskWriterThread;-><init>(Lcom/android/server/am/TaskPersister;Ljava/lang/String;)V
+SPLcom/android/server/am/TaskPersister;-><init>(Ljava/io/File;Lcom/android/server/am/ActivityStackSupervisor;Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/RecentTasks;)V
+SPLcom/android/server/am/UserController$Injector;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+SPLcom/android/server/am/UserController$Injector;->getContext()Landroid/content/Context;
+SPLcom/android/server/am/UserController$Injector;->getHandler()Landroid/os/Handler;
+SPLcom/android/server/am/UserController$Injector;->getLock()Ljava/lang/Object;
+SPLcom/android/server/am/UserController$Injector;->getLockPatternUtils()Lcom/android/internal/widget/LockPatternUtils;
+SPLcom/android/server/am/UserController;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+SPLcom/android/server/am/UserController;-><init>(Lcom/android/server/am/UserController$Injector;)V
+SPLcom/android/server/am/UserController;->updateStartedUserArrayLocked()V
+SPLcom/android/server/am/UserState;-><init>(Landroid/os/UserHandle;)V
+SPLcom/android/server/am/VrController$1;-><init>(Lcom/android/server/am/VrController;)V
+SPLcom/android/server/am/VrController;-><init>(Ljava/lang/Object;)V
+SPLcom/android/server/display/-$Lambda$pe87L53A2dvYIZSUUR6Usyk2Zwo;-><init>()V
+SPLcom/android/server/display/DisplayAdapter$1;-><init>(Lcom/android/server/display/DisplayAdapter;Lcom/android/server/display/DisplayDevice;I)V
+SPLcom/android/server/display/DisplayAdapter$1;->run()V
+SPLcom/android/server/display/DisplayAdapter$2;-><init>(Lcom/android/server/display/DisplayAdapter;)V
+SPLcom/android/server/display/DisplayAdapter$2;->run()V
+SPLcom/android/server/display/DisplayAdapter;->-get0(Lcom/android/server/display/DisplayAdapter;)Lcom/android/server/display/DisplayAdapter$Listener;
+SPLcom/android/server/display/DisplayAdapter;-><init>(Lcom/android/server/display/DisplayManagerService$SyncRoot;Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/display/DisplayAdapter$Listener;Ljava/lang/String;)V
+SPLcom/android/server/display/DisplayAdapter;->createMode(IIF)Landroid/view/Display$Mode;
+SPLcom/android/server/display/DisplayAdapter;->getContext()Landroid/content/Context;
+SPLcom/android/server/display/DisplayAdapter;->getHandler()Landroid/os/Handler;
+SPLcom/android/server/display/DisplayAdapter;->registerLocked()V
+SPLcom/android/server/display/DisplayAdapter;->sendDisplayDeviceEventLocked(Lcom/android/server/display/DisplayDevice;I)V
+SPLcom/android/server/display/DisplayAdapter;->sendTraversalRequestLocked()V
+SPLcom/android/server/display/DisplayDevice;-><init>(Lcom/android/server/display/DisplayAdapter;Landroid/os/IBinder;Ljava/lang/String;)V
+SPLcom/android/server/display/DisplayDevice;->getUniqueId()Ljava/lang/String;
+SPLcom/android/server/display/DisplayDeviceInfo;-><init>()V
+SPLcom/android/server/display/DisplayDeviceInfo;->diff(Lcom/android/server/display/DisplayDeviceInfo;)I
+SPLcom/android/server/display/DisplayDeviceInfo;->equals(Lcom/android/server/display/DisplayDeviceInfo;)Z
+SPLcom/android/server/display/DisplayDeviceInfo;->equals(Ljava/lang/Object;)Z
+SPLcom/android/server/display/DisplayDeviceInfo;->flagsToString(I)Ljava/lang/String;
+SPLcom/android/server/display/DisplayDeviceInfo;->toString()Ljava/lang/String;
+SPLcom/android/server/display/DisplayDeviceInfo;->touchToString(I)Ljava/lang/String;
+SPLcom/android/server/display/DisplayManagerService$BinderService;-><init>(Lcom/android/server/display/DisplayManagerService;)V
+SPLcom/android/server/display/DisplayManagerService$DisplayAdapterListener;-><init>(Lcom/android/server/display/DisplayManagerService;)V
+SPLcom/android/server/display/DisplayManagerService$DisplayAdapterListener;-><init>(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService$DisplayAdapterListener;)V
+SPLcom/android/server/display/DisplayManagerService$DisplayAdapterListener;->onDisplayDeviceEvent(Lcom/android/server/display/DisplayDevice;I)V
+SPLcom/android/server/display/DisplayManagerService$DisplayAdapterListener;->onTraversalRequested()V
+SPLcom/android/server/display/DisplayManagerService$DisplayManagerHandler;-><init>(Lcom/android/server/display/DisplayManagerService;Landroid/os/Looper;)V
+SPLcom/android/server/display/DisplayManagerService$DisplayManagerHandler;->handleMessage(Landroid/os/Message;)V
+SPLcom/android/server/display/DisplayManagerService$Injector;-><init>()V
+SPLcom/android/server/display/DisplayManagerService$Injector;->getDefaultDisplayDelayTimeout()J
+SPLcom/android/server/display/DisplayManagerService$Injector;->getVirtualDisplayAdapter(Lcom/android/server/display/DisplayManagerService$SyncRoot;Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/display/DisplayAdapter$Listener;)Lcom/android/server/display/VirtualDisplayAdapter;
+SPLcom/android/server/display/DisplayManagerService$LocalService;-><init>(Lcom/android/server/display/DisplayManagerService;)V
+SPLcom/android/server/display/DisplayManagerService$LocalService;-><init>(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService$LocalService;)V
+SPLcom/android/server/display/DisplayManagerService$SyncRoot;-><init>()V
+SPLcom/android/server/display/DisplayManagerService;->-get5(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayManagerService$SyncRoot;
+SPLcom/android/server/display/DisplayManagerService;->-wrap13(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayDevice;)V
+SPLcom/android/server/display/DisplayManagerService;->-wrap14(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayDevice;)V
+SPLcom/android/server/display/DisplayManagerService;->-wrap20(Lcom/android/server/display/DisplayManagerService;)V
+SPLcom/android/server/display/DisplayManagerService;->-wrap28(Lcom/android/server/display/DisplayManagerService;Z)V
+SPLcom/android/server/display/DisplayManagerService;->-wrap8(Lcom/android/server/display/DisplayManagerService;II)V
+SPLcom/android/server/display/DisplayManagerService;-><init>(Landroid/content/Context;)V
+SPLcom/android/server/display/DisplayManagerService;-><init>(Landroid/content/Context;Lcom/android/server/display/DisplayManagerService$Injector;)V
+SPLcom/android/server/display/DisplayManagerService;->addLogicalDisplayLocked(Lcom/android/server/display/DisplayDevice;)Lcom/android/server/display/LogicalDisplay;
+SPLcom/android/server/display/DisplayManagerService;->assignDisplayIdLocked(Z)I
+SPLcom/android/server/display/DisplayManagerService;->assignLayerStackLocked(I)I
+SPLcom/android/server/display/DisplayManagerService;->configureColorModeLocked(Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/DisplayDevice;)V
+SPLcom/android/server/display/DisplayManagerService;->handleDisplayDeviceAdded(Lcom/android/server/display/DisplayDevice;)V
+SPLcom/android/server/display/DisplayManagerService;->handleDisplayDeviceAddedLocked(Lcom/android/server/display/DisplayDevice;)V
+SPLcom/android/server/display/DisplayManagerService;->handleDisplayDeviceChanged(Lcom/android/server/display/DisplayDevice;)V
+SPLcom/android/server/display/DisplayManagerService;->loadStableDisplayValuesLocked()V
+SPLcom/android/server/display/DisplayManagerService;->onBootPhase(I)V
+SPLcom/android/server/display/DisplayManagerService;->onStart()V
+SPLcom/android/server/display/DisplayManagerService;->recordStableDisplayStatsIfNeededLocked(Lcom/android/server/display/LogicalDisplay;)V
+SPLcom/android/server/display/DisplayManagerService;->registerDefaultDisplayAdapters()V
+SPLcom/android/server/display/DisplayManagerService;->registerDisplayAdapterLocked(Lcom/android/server/display/DisplayAdapter;)V
+SPLcom/android/server/display/DisplayManagerService;->scheduleTraversalLocked(Z)V
+SPLcom/android/server/display/DisplayManagerService;->sendDisplayEventLocked(II)V
+SPLcom/android/server/display/DisplayManagerService;->updateLogicalDisplaysLocked()Z
+SPLcom/android/server/display/DisplayTransformManager;-><init>()V
+SPLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;-><init>(Landroid/view/SurfaceControl$PhysicalDisplayInfo;)V
+SPLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;->hasMatchingMode(Landroid/view/SurfaceControl$PhysicalDisplayInfo;)Z
+SPLcom/android/server/display/LocalDisplayAdapter$HotplugDisplayEventReceiver;-><init>(Lcom/android/server/display/LocalDisplayAdapter;Landroid/os/Looper;)V
+SPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->setDisplayState(I)V
+SPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;-><init>(Lcom/android/server/display/LocalDisplayAdapter;Landroid/os/IBinder;I[Landroid/view/SurfaceControl$PhysicalDisplayInfo;I[II)V
+SPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->applyPendingDisplayDeviceInfoChangesLocked()V
+SPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findDisplayInfoIndexLocked(I)I
+SPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findDisplayModeRecord(Landroid/view/SurfaceControl$PhysicalDisplayInfo;)Lcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;
+SPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->hasStableUniqueId()Z
+SPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updateColorModesLocked([II)Z
+SPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updateDeviceInfoLocked()V
+SPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->updatePhysicalDisplayInfoLocked([Landroid/view/SurfaceControl$PhysicalDisplayInfo;I[II)Z
+SPLcom/android/server/display/LocalDisplayAdapter;-><init>(Lcom/android/server/display/DisplayManagerService$SyncRoot;Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/display/DisplayAdapter$Listener;)V
+SPLcom/android/server/display/LocalDisplayAdapter;->getPowerModeForState(I)I
+SPLcom/android/server/display/LocalDisplayAdapter;->registerLocked()V
+SPLcom/android/server/display/LocalDisplayAdapter;->tryConnectDisplayLocked(I)V
+SPLcom/android/server/display/LogicalDisplay;-><init>(IILcom/android/server/display/DisplayDevice;)V
+SPLcom/android/server/display/LogicalDisplay;->getPrimaryDisplayDeviceLocked()Lcom/android/server/display/DisplayDevice;
+SPLcom/android/server/display/LogicalDisplay;->isValidLocked()Z
+SPLcom/android/server/display/LogicalDisplay;->setRequestedColorModeLocked(I)V
+SPLcom/android/server/display/LogicalDisplay;->updateLocked(Ljava/util/List;)V
+SPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->-wrap0(Lcom/android/server/display/PersistentDataStore$StableDeviceValues;)Landroid/graphics/Point;
+SPLcom/android/server/display/PersistentDataStore$StableDeviceValues;-><init>()V
+SPLcom/android/server/display/PersistentDataStore$StableDeviceValues;-><init>(Lcom/android/server/display/PersistentDataStore$StableDeviceValues;)V
+SPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->getDisplaySize()Landroid/graphics/Point;
+SPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
+SPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->loadIntValue(Lorg/xmlpull/v1/XmlPullParser;)I
+SPLcom/android/server/display/PersistentDataStore;-><init>()V
+SPLcom/android/server/display/PersistentDataStore;->clearState()V
+SPLcom/android/server/display/PersistentDataStore;->getColorMode(Lcom/android/server/display/DisplayDevice;)I
+SPLcom/android/server/display/PersistentDataStore;->getDisplayState(Ljava/lang/String;Z)Lcom/android/server/display/PersistentDataStore$DisplayState;
+SPLcom/android/server/display/PersistentDataStore;->getStableDisplaySize()Landroid/graphics/Point;
+SPLcom/android/server/display/PersistentDataStore;->load()V
+SPLcom/android/server/display/PersistentDataStore;->loadDisplaysFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
+SPLcom/android/server/display/PersistentDataStore;->loadFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
+SPLcom/android/server/display/PersistentDataStore;->loadIfNeeded()V
+SPLcom/android/server/display/PersistentDataStore;->loadRememberedWifiDisplaysFromXml(Lorg/xmlpull/v1/XmlPullParser;)V
+SPLcom/android/server/display/VirtualDisplayAdapter;-><init>(Lcom/android/server/display/DisplayManagerService$SyncRoot;Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/display/DisplayAdapter$Listener;)V
+SPLcom/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
+SPLcom/android/server/display/VirtualDisplayAdapter;->registerLocked()V
+SPLcom/android/server/firewall/AndFilter$1;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/CategoryFilter$1;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/FilterFactory;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/FilterFactory;->getTagName()Ljava/lang/String;
+SPLcom/android/server/firewall/IntentFirewall$FirewallHandler;-><init>(Lcom/android/server/firewall/IntentFirewall;Landroid/os/Looper;)V
+SPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;-><init>()V
+SPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;-><init>(Lcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;)V
+SPLcom/android/server/firewall/IntentFirewall$RuleObserver;-><init>(Lcom/android/server/firewall/IntentFirewall;Ljava/io/File;)V
+SPLcom/android/server/firewall/IntentFirewall;-><init>(Lcom/android/server/firewall/IntentFirewall$AMSInterface;Landroid/os/Handler;)V
+SPLcom/android/server/firewall/IntentFirewall;->getRulesDir()Ljava/io/File;
+SPLcom/android/server/firewall/IntentFirewall;->readRulesDir(Ljava/io/File;)V
+SPLcom/android/server/firewall/NotFilter$1;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/OrFilter$1;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/PortFilter$1;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/SenderFilter$1;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/SenderFilter$2;-><init>()V
+SPLcom/android/server/firewall/SenderFilter$3;-><init>()V
+SPLcom/android/server/firewall/SenderFilter$4;-><init>()V
+SPLcom/android/server/firewall/SenderFilter$5;-><init>()V
+SPLcom/android/server/firewall/SenderPackageFilter$1;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/SenderPermissionFilter$1;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/StringFilter$10;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/StringFilter$1;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/StringFilter$2;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/StringFilter$3;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/StringFilter$4;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/StringFilter$5;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/StringFilter$6;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/StringFilter$7;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/StringFilter$8;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/StringFilter$9;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/firewall/StringFilter$ValueProvider;-><init>(Ljava/lang/String;)V
+SPLcom/android/server/lights/Light;-><init>()V
+SPLcom/android/server/lights/LightsManager;-><init>()V
+SPLcom/android/server/lights/LightsService$1;-><init>(Lcom/android/server/lights/LightsService;)V
+SPLcom/android/server/lights/LightsService$1;->getLight(I)Lcom/android/server/lights/Light;
+SPLcom/android/server/lights/LightsService$2;-><init>(Lcom/android/server/lights/LightsService;)V
+SPLcom/android/server/lights/LightsService$LightImpl;-><init>(Lcom/android/server/lights/LightsService;I)V
+SPLcom/android/server/lights/LightsService$LightImpl;-><init>(Lcom/android/server/lights/LightsService;ILcom/android/server/lights/LightsService$LightImpl;)V
+SPLcom/android/server/lights/LightsService;-><init>(Landroid/content/Context;)V
+SPLcom/android/server/lights/LightsService;->onBootPhase(I)V
+SPLcom/android/server/lights/LightsService;->onStart()V
+SPLcom/android/server/os/DeviceIdentifiersPolicyService$DeviceIdentifiersPolicy;-><init>(Landroid/content/Context;)V
+SPLcom/android/server/os/DeviceIdentifiersPolicyService;-><init>(Landroid/content/Context;)V
+SPLcom/android/server/os/DeviceIdentifiersPolicyService;->onStart()V
+SPLcom/android/server/pm/-$Lambda$i1ZZeLvwPPAZVBl_nnQ0C2t5oMs;->$m$1()V
+SPLcom/android/server/pm/AbstractStatsBase;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V
+SPLcom/android/server/pm/AbstractStatsBase;->getFile()Landroid/util/AtomicFile;
+SPLcom/android/server/pm/AbstractStatsBase;->read(Ljava/lang/Object;)V
+SPLcom/android/server/pm/BasePermission;->setGids([IZ)V
+SPLcom/android/server/pm/CompilerStats;-><init>()V
+SPLcom/android/server/pm/CompilerStats;->read()V
+SPLcom/android/server/pm/CompilerStats;->readInternal(Ljava/lang/Object;)V
+SPLcom/android/server/pm/CompilerStats;->readInternal(Ljava/lang/Void;)V
+SPLcom/android/server/pm/DefaultPermissionGrantPolicy$1;-><init>(Lcom/android/server/pm/DefaultPermissionGrantPolicy;Landroid/os/Looper;)V
+SPLcom/android/server/pm/DefaultPermissionGrantPolicy;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+SPLcom/android/server/pm/Installer$1;-><init>(Lcom/android/server/pm/Installer;)V
+SPLcom/android/server/pm/Installer;-><init>(Landroid/content/Context;)V
+SPLcom/android/server/pm/Installer;-><init>(Landroid/content/Context;Z)V
+SPLcom/android/server/pm/Installer;->connect()V
+SPLcom/android/server/pm/Installer;->fixupAppData(Ljava/lang/String;I)V
+SPLcom/android/server/pm/Installer;->invalidateMounts()V
+SPLcom/android/server/pm/Installer;->onStart()V
+SPLcom/android/server/pm/InstantAppRegistry$CookiePersistence;-><init>(Lcom/android/server/pm/InstantAppRegistry;Landroid/os/Looper;)V
+SPLcom/android/server/pm/InstantAppRegistry;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+SPLcom/android/server/pm/KeySetHandle;-><init>(JI)V
+SPLcom/android/server/pm/KeySetHandle;->getRefCountLPr()I
+SPLcom/android/server/pm/KeySetHandle;->setRefCountLPw(I)V
+SPLcom/android/server/pm/KeySetManagerService$PublicKeyHandle;-><init>(Lcom/android/server/pm/KeySetManagerService;JILjava/security/PublicKey;)V
+SPLcom/android/server/pm/KeySetManagerService$PublicKeyHandle;-><init>(Lcom/android/server/pm/KeySetManagerService;JILjava/security/PublicKey;Lcom/android/server/pm/KeySetManagerService$PublicKeyHandle;)V
+SPLcom/android/server/pm/KeySetManagerService$PublicKeyHandle;->incrRefCountLPw()V
+SPLcom/android/server/pm/KeySetManagerService;-><init>(Landroid/util/ArrayMap;)V
+SPLcom/android/server/pm/KeySetManagerService;->readKeySetsLPw(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/ArrayMap;)V
+SPLcom/android/server/pm/PackageDexOptimizer;-><init>(Lcom/android/server/pm/Installer;Ljava/lang/Object;Landroid/content/Context;Ljava/lang/String;)V
+SPLcom/android/server/pm/PackageInstallerService$1;-><init>()V
+SPLcom/android/server/pm/PackageKeySetData;->setProperSigningKeySet(J)V
+SPLcom/android/server/pm/PackageManagerException;-><init>(ILjava/lang/String;)V
+SPLcom/android/server/pm/PackageManagerService$1;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+SPLcom/android/server/pm/PackageManagerService$2;-><init>()V
+SPLcom/android/server/pm/PackageManagerService$3;-><init>()V
+SPLcom/android/server/pm/PackageManagerService$9;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+SPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver$CategoriesIterGenerator;-><init>(Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver;)V
+SPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver$CategoriesIterGenerator;->generate(Landroid/content/pm/PackageParser$ActivityIntentInfo;)Ljava/util/Iterator;
+SPLcom/android/server/pm/PackageManagerService$ActivityIntentResolver;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+SPLcom/android/server/pm/PackageManagerService$DefaultContainerConnection;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+SPLcom/android/server/pm/PackageManagerService$MoveCallbacks;-><init>(Landroid/os/Looper;)V
+SPLcom/android/server/pm/PackageManagerService$OnPermissionChangeListeners;-><init>(Landroid/os/Looper;)V
+SPLcom/android/server/pm/PackageManagerService$PackageHandler;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/os/Looper;)V
+SPLcom/android/server/pm/PackageManagerService$PackageParserCallback;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+SPLcom/android/server/pm/PackageManagerService$ParallelPackageParserCallback;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+SPLcom/android/server/pm/PackageManagerService$ParallelPackageParserCallback;->findStaticOverlayPackages()V
+SPLcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;-><init>()V
+SPLcom/android/server/pm/PackageManagerService$ProviderIntentResolver;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+SPLcom/android/server/pm/PackageManagerService$ProviderIntentResolver;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$ProviderIntentResolver;)V
+SPLcom/android/server/pm/PackageManagerService$ProviderIntentResolver;->newArray(I)[Landroid/content/IntentFilter;
+SPLcom/android/server/pm/PackageManagerService$ProviderIntentResolver;->newArray(I)[Landroid/content/pm/PackageParser$ProviderIntentInfo;
+SPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+SPLcom/android/server/pm/PackageManagerService$ServiceIntentResolver;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$ServiceIntentResolver;)V
+SPLcom/android/server/pm/PackageManagerService$SharedLibraryEntry;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;I)V
+SPLcom/android/server/pm/PackageManagerService;->-get12(Lcom/android/server/pm/PackageManagerService;)Ljava/util/List;
+SPLcom/android/server/pm/PackageManagerService;->-get2()Ljava/util/Set;
+SPLcom/android/server/pm/PackageManagerService;->-get5(Lcom/android/server/pm/PackageManagerService;)Z
+SPLcom/android/server/pm/PackageManagerService;->addSharedLibraryLPr(Landroid/util/ArraySet;Lcom/android/server/pm/PackageManagerService$SharedLibraryEntry;Landroid/content/pm/PackageParser$Package;)V
+SPLcom/android/server/pm/PackageManagerService;->addSharedLibraryLPw(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;I)Z
+SPLcom/android/server/pm/PackageManagerService;->calculateBundledApkRoot(Ljava/lang/String;)Ljava/lang/String;
+SPLcom/android/server/pm/PackageManagerService;->checkDefaultBrowser()V
+SPLcom/android/server/pm/PackageManagerService;->decompressSystemApplications(Ljava/util/List;I)V
+SPLcom/android/server/pm/PackageManagerService;->deleteTempPackageFiles()V
+SPLcom/android/server/pm/PackageManagerService;->deriveCodePathName(Ljava/lang/String;)Ljava/lang/String;
+SPLcom/android/server/pm/PackageManagerService;->getDefaultDisplayMetrics(Landroid/content/Context;Landroid/util/DisplayMetrics;)V
+SPLcom/android/server/pm/PackageManagerService;->getSetupWizardPackageName()Ljava/lang/String;
+SPLcom/android/server/pm/PackageManagerService;->getStorageManagerPackageName()Ljava/lang/String;
+SPLcom/android/server/pm/PackageManagerService;->isExternal(Lcom/android/server/pm/PackageSetting;)Z
+SPLcom/android/server/pm/PackageManagerService;->locationIsPrivileged(Ljava/io/File;)Z
+SPLcom/android/server/pm/PackageManagerService;->main(Landroid/content/Context;Lcom/android/server/pm/Installer;ZZ)Lcom/android/server/pm/PackageManagerService;
+SPLcom/android/server/pm/PackageManagerService;->preparePackageParserCache(Z)Ljava/io/File;
+SPLcom/android/server/pm/PackageManagerService;->scanDirTracedLI(Ljava/io/File;IIJ)V
+SPLcom/android/server/pm/PackageManagerServiceCompilerMapping;->checkProperties()V
+SPLcom/android/server/pm/PackageSetting;->doCopy(Lcom/android/server/pm/PackageSetting;)V
+SPLcom/android/server/pm/PackageSetting;->getSharedUserId()I
+SPLcom/android/server/pm/PackageSettingBase;->getInstallStatus()I
+SPLcom/android/server/pm/PackageSettingBase;->setIntentFilterVerificationInfo(Landroid/content/pm/IntentFilterVerificationInfo;)V
+SPLcom/android/server/pm/PackageUsage;-><init>()V
+SPLcom/android/server/pm/PackageUsage;->readInternal(Ljava/lang/Object;)V
+SPLcom/android/server/pm/PackageUsage;->readInternal(Ljava/util/Map;)V
+SPLcom/android/server/pm/ParallelPackageParser;-><init>([Ljava/lang/String;ZLandroid/util/DisplayMetrics;Ljava/io/File;Landroid/content/pm/PackageParser$Callback;)V
+SPLcom/android/server/pm/ParallelPackageParser;->close()V
+SPLcom/android/server/pm/PermissionsState$PermissionData;->revoke(I)Z
+SPLcom/android/server/pm/PermissionsState;->ensureNoPermissionData(Ljava/lang/String;)V
+SPLcom/android/server/pm/Policy$PolicyBuilder;->-get0(Lcom/android/server/pm/Policy$PolicyBuilder;)Ljava/util/Set;
+SPLcom/android/server/pm/Policy$PolicyBuilder;->-get1(Lcom/android/server/pm/Policy$PolicyBuilder;)Ljava/util/Map;
+SPLcom/android/server/pm/Policy$PolicyBuilder;->-get2(Lcom/android/server/pm/Policy$PolicyBuilder;)Ljava/lang/String;
+SPLcom/android/server/pm/Policy$PolicyBuilder;-><init>()V
+SPLcom/android/server/pm/Policy$PolicyBuilder;->addInnerPackageMapOrThrow(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/pm/Policy$PolicyBuilder;
+SPLcom/android/server/pm/Policy$PolicyBuilder;->addSignature(Ljava/lang/String;)Lcom/android/server/pm/Policy$PolicyBuilder;
+SPLcom/android/server/pm/Policy$PolicyBuilder;->build()Lcom/android/server/pm/Policy;
+SPLcom/android/server/pm/Policy$PolicyBuilder;->setGlobalSeinfoOrThrow(Ljava/lang/String;)Lcom/android/server/pm/Policy$PolicyBuilder;
+SPLcom/android/server/pm/Policy$PolicyBuilder;->validateValue(Ljava/lang/String;)Z
+SPLcom/android/server/pm/Policy;->-get0(Lcom/android/server/pm/Policy;)Ljava/util/Set;
+SPLcom/android/server/pm/Policy;->-get1(Lcom/android/server/pm/Policy;)Ljava/util/Map;
+SPLcom/android/server/pm/Policy;->-get2(Lcom/android/server/pm/Policy;)Ljava/lang/String;
+SPLcom/android/server/pm/Policy;-><init>(Lcom/android/server/pm/Policy$PolicyBuilder;)V
+SPLcom/android/server/pm/Policy;-><init>(Lcom/android/server/pm/Policy$PolicyBuilder;Lcom/android/server/pm/Policy;)V
+SPLcom/android/server/pm/Policy;->getSignatures()Ljava/util/Set;
+SPLcom/android/server/pm/Policy;->hasInnerPackages()Z
+SPLcom/android/server/pm/PolicyComparator;-><init>()V
+SPLcom/android/server/pm/PolicyComparator;->compare(Lcom/android/server/pm/Policy;Lcom/android/server/pm/Policy;)I
+SPLcom/android/server/pm/PolicyComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+SPLcom/android/server/pm/PolicyComparator;->foundDuplicate()Z
+SPLcom/android/server/pm/PreferredActivity;-><init>(Lorg/xmlpull/v1/XmlPullParser;)V
+SPLcom/android/server/pm/PreferredActivity;->onReadTag(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;)Z
+SPLcom/android/server/pm/PreferredComponent;-><init>(Lcom/android/server/pm/PreferredComponent$Callbacks;Lorg/xmlpull/v1/XmlPullParser;)V
+SPLcom/android/server/pm/PreferredComponent;->getParseError()Ljava/lang/String;
+SPLcom/android/server/pm/PreferredIntentResolver;-><init>()V
+SPLcom/android/server/pm/PreferredIntentResolver;->newArray(I)[Landroid/content/IntentFilter;
+SPLcom/android/server/pm/PreferredIntentResolver;->newArray(I)[Lcom/android/server/pm/PreferredActivity;
+SPLcom/android/server/pm/ProcessLoggingHandler;-><init>()V
+SPLcom/android/server/pm/ProtectedPackages;-><init>(Landroid/content/Context;)V
+SPLcom/android/server/pm/SELinuxMMAC;->readInstallPolicy()Z
+SPLcom/android/server/pm/SELinuxMMAC;->readPackageOrThrow(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/pm/Policy$PolicyBuilder;)V
+SPLcom/android/server/pm/SELinuxMMAC;->readSeinfo(Lorg/xmlpull/v1/XmlPullParser;)V
+SPLcom/android/server/pm/SELinuxMMAC;->readSignerOrThrow(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/pm/Policy;
+SPLcom/android/server/pm/Settings$RuntimePermissionPersistence$MyHandler;-><init>(Lcom/android/server/pm/Settings$RuntimePermissionPersistence;)V
+SPLcom/android/server/pm/Settings$RuntimePermissionPersistence$MyHandler;->handleMessage(Landroid/os/Message;)V
+SPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->-wrap1(Lcom/android/server/pm/Settings$RuntimePermissionPersistence;I)V
+SPLcom/android/server/pm/Settings$RuntimePermissionPersistence;-><init>(Lcom/android/server/pm/Settings;Ljava/lang/Object;)V
+SPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->readStateForUserSyncLPr(I)V
+SPLcom/android/server/pm/Settings$VersionInfo;-><init>()V
+SPLcom/android/server/pm/Settings;->-wrap0(Lcom/android/server/pm/Settings;I)Ljava/io/File;
+SPLcom/android/server/pm/Settings;-><init>(Ljava/io/File;Ljava/lang/Object;)V
+SPLcom/android/server/pm/Settings;-><init>(Ljava/lang/Object;)V
+SPLcom/android/server/pm/Settings;->addSharedUserLPw(Ljava/lang/String;III)Lcom/android/server/pm/SharedUserSetting;
+SPLcom/android/server/pm/Settings;->editPreferredActivitiesLPw(I)Lcom/android/server/pm/PreferredIntentResolver;
+SPLcom/android/server/pm/Settings;->findOrCreateVersion(Ljava/lang/String;)Lcom/android/server/pm/Settings$VersionInfo;
+SPLcom/android/server/pm/Settings;->getAllSharedUsersLPw()Ljava/util/Collection;
+SPLcom/android/server/pm/Settings;->getSharedUserLPw(Ljava/lang/String;IIZ)Lcom/android/server/pm/SharedUserSetting;
+SPLcom/android/server/pm/Settings;->getUserPackagesStateBackupFile(I)Ljava/io/File;
+SPLcom/android/server/pm/Settings;->getUserPackagesStateFile(I)Ljava/io/File;
+SPLcom/android/server/pm/Settings;->getUserRuntimePermissionsFile(I)Ljava/io/File;
+SPLcom/android/server/pm/Settings;->readCrossProfileIntentFiltersLPw(Lorg/xmlpull/v1/XmlPullParser;I)V
+SPLcom/android/server/pm/Settings;->readDefaultAppsLPw(Lorg/xmlpull/v1/XmlPullParser;I)V
+SPLcom/android/server/pm/Settings;->readDomainVerificationLPw(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/pm/PackageSettingBase;)V
+SPLcom/android/server/pm/Settings;->readPersistentPreferredActivitiesLPw(Lorg/xmlpull/v1/XmlPullParser;I)V
+SPLcom/android/server/pm/Settings;->readPreferredActivitiesLPw(Lorg/xmlpull/v1/XmlPullParser;I)V
+SPLcom/android/server/pm/SharedUserSetting;-><init>(Ljava/lang/String;II)V
+SPLcom/android/server/pm/UserDataPreparer;-><init>(Lcom/android/server/pm/Installer;Ljava/lang/Object;Landroid/content/Context;Z)V
+SPLcom/android/server/pm/UserManagerService$1;-><init>(Lcom/android/server/pm/UserManagerService;)V
+SPLcom/android/server/pm/UserManagerService$LocalService;-><init>(Lcom/android/server/pm/UserManagerService;)V
+SPLcom/android/server/pm/UserManagerService$LocalService;-><init>(Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService$LocalService;)V
+SPLcom/android/server/pm/UserManagerService$MainHandler;-><init>(Lcom/android/server/pm/UserManagerService;)V
+SPLcom/android/server/pm/UserManagerService$UserData;-><init>()V
+SPLcom/android/server/pm/UserManagerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/UserDataPreparer;Ljava/lang/Object;)V
+SPLcom/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
+SPLcom/android/server/pm/UserManagerService;->initDefaultGuestRestrictions()V
+SPLcom/android/server/pm/UserManagerService;->readIntAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
+SPLcom/android/server/pm/UserManagerService;->readLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;J)J
+SPLcom/android/server/pm/UserManagerService;->readUserLP(I)Lcom/android/server/pm/UserManagerService$UserData;
+SPLcom/android/server/pm/UserManagerService;->readUserLP(ILjava/io/InputStream;)Lcom/android/server/pm/UserManagerService$UserData;
+SPLcom/android/server/pm/UserManagerService;->readUserListLP()V
+SPLcom/android/server/pm/UserManagerService;->updateUserIds()V
+SPLcom/android/server/pm/UserManagerService;->upgradeIfNecessaryLP(Landroid/os/Bundle;)V
+SPLcom/android/server/pm/UserRestrictionsUtils;->newSetWithUniqueCheck([Ljava/lang/String;)Ljava/util/Set;
+SPLcom/android/server/pm/UserRestrictionsUtils;->readRestrictions(Lorg/xmlpull/v1/XmlPullParser;)Landroid/os/Bundle;
+SPLcom/android/server/pm/dex/DexManager;-><init>(Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageDexOptimizer;Lcom/android/server/pm/Installer;Ljava/lang/Object;)V
+SPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;-><init>()V
+SPLcom/android/server/pm/dex/PackageDexUsage;-><init>()V
+SPLcom/android/server/power/BatterySaverPolicy;-><init>(Landroid/os/Handler;)V
+SPLcom/android/server/power/PowerManagerService$1;-><init>(Lcom/android/server/power/PowerManagerService;)V
+SPLcom/android/server/power/PowerManagerService$2;-><init>(Lcom/android/server/power/PowerManagerService;)V
+SPLcom/android/server/power/PowerManagerService$BinderService;-><init>(Lcom/android/server/power/PowerManagerService;)V
+SPLcom/android/server/power/PowerManagerService$BinderService;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$BinderService;)V
+SPLcom/android/server/power/PowerManagerService$Constants;-><init>(Lcom/android/server/power/PowerManagerService;Landroid/os/Handler;)V
+SPLcom/android/server/power/PowerManagerService$LocalService;-><init>(Lcom/android/server/power/PowerManagerService;)V
+SPLcom/android/server/power/PowerManagerService$LocalService;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$LocalService;)V
+SPLcom/android/server/power/PowerManagerService$LocalService;->getLowPowerState(I)Landroid/os/PowerSaveState;
+SPLcom/android/server/power/PowerManagerService$LocalService;->registerLowPowerModeObserver(Landroid/os/PowerManagerInternal$LowPowerModeListener;)V
+SPLcom/android/server/power/PowerManagerService$PowerManagerHandler;-><init>(Lcom/android/server/power/PowerManagerService;Landroid/os/Looper;)V
+SPLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;-><init>(Lcom/android/server/power/PowerManagerService;Ljava/lang/String;)V
+SPLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;->acquire()V
+SPLcom/android/server/power/PowerManagerService;->-get0(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/BatterySaverPolicy;
+SPLcom/android/server/power/PowerManagerService;->-get10(Lcom/android/server/power/PowerManagerService;)Z
+SPLcom/android/server/power/PowerManagerService;->-get11(Lcom/android/server/power/PowerManagerService;)Ljava/util/ArrayList;
+SPLcom/android/server/power/PowerManagerService;->-wrap20(Ljava/lang/String;)V
+SPLcom/android/server/power/PowerManagerService;-><init>(Landroid/content/Context;)V
+SPLcom/android/server/power/PowerManagerService;->createSuspendBlockerLocked(Ljava/lang/String;)Lcom/android/server/power/SuspendBlocker;
+SPLcom/android/server/power/PowerManagerService;->onBootPhase(I)V
+SPLcom/android/server/power/PowerManagerService;->onStart()V
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
index 9ae4396..ffc778a 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
@@ -115,11 +115,24 @@
     private final SparseBooleanArray mDisabledUsers = new SparseBooleanArray();
 
     private final LocalLog mRequestsHistory = new LocalLog(20);
+    private final LocalLog mUiLatencyHistory = new LocalLog(20);
 
     private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
             if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) {
+                if (sDebug) Slog.d(TAG, "Close system dialogs");
+
+                // TODO(b/64940307): we need to destroy all sessions that are finished but showing
+                // Save UI because there is no way to show the Save UI back when the activity
+                // beneath it is brought back to top. Ideally, we should just hide the UI and
+                // bring it back when the activity resumes.
+                synchronized (mLock) {
+                    for (int i = 0; i < mServicesCache.size(); i++) {
+                        mServicesCache.valueAt(i).destroyFinishedSessionsLocked();
+                    }
+                }
+
                 mUi.hideAll(null);
             }
         }
@@ -294,7 +307,7 @@
         AutofillManagerServiceImpl service = mServicesCache.get(resolvedUserId);
         if (service == null) {
             service = new AutofillManagerServiceImpl(mContext, mLock, mRequestsHistory,
-                    resolvedUserId, mUi, mDisabledUsers.get(resolvedUserId));
+                    mUiLatencyHistory, resolvedUserId, mUi, mDisabledUsers.get(resolvedUserId));
             mServicesCache.put(userId, service);
         }
         return service;
@@ -464,6 +477,7 @@
     private void updateCachedServiceLocked(int userId, boolean disabled) {
         AutofillManagerServiceImpl service = getServiceForUserLocked(userId);
         if (service != null) {
+            service.destroySessionsLocked();
             service.updateLocked(disabled);
             if (!service.isEnabled()) {
                 removeCachedServiceLocked(userId);
@@ -651,7 +665,22 @@
             synchronized (mLock) {
                 final AutofillManagerServiceImpl service = peekServiceForUserLocked(userId);
                 if (service == null) return false;
-                return Objects.equals(packageName, service.getPackageName());
+                return Objects.equals(packageName, service.getServicePackageName());
+            }
+        }
+
+        @Override
+        public void onPendingSaveUi(int operation, IBinder token) {
+            Preconditions.checkNotNull(token, "token");
+            Preconditions.checkArgument(operation == AutofillManager.PENDING_UI_OPERATION_CANCEL
+                    || operation == AutofillManager.PENDING_UI_OPERATION_RESTORE,
+                    "invalid operation: %d", operation);
+            synchronized (mLock) {
+                final AutofillManagerServiceImpl service = peekServiceForUserLocked(
+                        UserHandle.getCallingUserId());
+                if (service != null) {
+                    service.onPendingSaveUi(operation, token);
+                }
             }
         }
 
@@ -710,6 +739,8 @@
                 if (showHistory) {
                     pw.println("Requests history:");
                     mRequestsHistory.reverseDump(fd, pw, args);
+                    pw.println("UI latency history:");
+                    mUiLatencyHistory.reverseDump(fd, pw, args);
                 }
             } finally {
                 setDebugLocked(oldDebug);
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
index 65c7d77..6d3398e 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
@@ -36,6 +36,7 @@
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ServiceInfo;
 import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
 import android.metrics.LogMaker;
 import android.os.AsyncTask;
 import android.os.Binder;
@@ -55,10 +56,12 @@
 import android.service.autofill.IAutoFillService;
 import android.text.TextUtils;
 import android.util.ArraySet;
+import android.util.DebugUtils;
 import android.util.LocalLog;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.view.autofill.AutofillId;
+import android.view.autofill.AutofillManager;
 import android.view.autofill.AutofillValue;
 import android.view.autofill.IAutoFillManagerClient;
 
@@ -101,6 +104,8 @@
     private static final Random sRandom = new Random();
 
     private final LocalLog mRequestsHistory;
+    private final LocalLog mUiLatencyHistory;
+
     /**
      * Whether service was disabled for user due to {@link UserManager} restrictions.
      */
@@ -142,17 +147,19 @@
     private long mLastPrune = 0;
 
     AutofillManagerServiceImpl(Context context, Object lock, LocalLog requestsHistory,
-            int userId, AutoFillUI ui, boolean disabled) {
+            LocalLog uiLatencyHistory, int userId, AutoFillUI ui, boolean disabled) {
         mContext = context;
         mLock = lock;
         mRequestsHistory = requestsHistory;
+        mUiLatencyHistory = uiLatencyHistory;
         mUserId = userId;
         mUi = ui;
         updateLocked(disabled);
     }
 
+    @Nullable
     CharSequence getServiceName() {
-        final String packageName = getPackageName();
+        final String packageName = getServicePackageName();
         if (packageName == null) {
             return null;
         }
@@ -167,14 +174,6 @@
         }
     }
 
-    String getPackageName() {
-        final ComponentName serviceComponent = getServiceComponentName();
-        if (serviceComponent != null) {
-            return serviceComponent.getPackageName();
-        }
-        return null;
-    }
-
     @Nullable
     String getServicePackageName() {
         final ComponentName serviceComponent = getServiceComponentName();
@@ -230,8 +229,10 @@
             if (serviceInfo != null) {
                 mInfo = new AutofillServiceInfo(mContext.getPackageManager(),
                         serviceComponent, mUserId);
+                if (sDebug) Slog.d(TAG, "Set component for user " + mUserId + " as " + mInfo);
             } else {
                 mInfo = null;
+                if (sDebug) Slog.d(TAG, "Reset component for user " + mUserId);
             }
             final boolean isEnabled = isEnabled();
             if (wasEnabled != isEnabled) {
@@ -249,26 +250,6 @@
         }
     }
 
-    /**
-     * Used by {@link AutofillManagerServiceShellCommand} to request save for the current top app.
-     */
-    void requestSaveForUserLocked(IBinder activityToken) {
-        if (!isEnabled()) {
-            return;
-        }
-
-        final int numSessions = mSessions.size();
-        for (int i = 0; i < numSessions; i++) {
-            final Session session = mSessions.valueAt(i);
-            if (session.getActivityTokenLocked().equals(activityToken)) {
-                session.callSaveLocked();
-                return;
-            }
-        }
-
-        Slog.w(TAG, "requestSaveForUserLocked(): no session for " + activityToken);
-    }
-
     boolean addClientLocked(IAutoFillManagerClient client) {
         if (mClients == null) {
             mClients = new RemoteCallbackList<>();
@@ -306,6 +287,7 @@
         if (!isEnabled()) {
             return 0;
         }
+        if (sVerbose) Slog.v(TAG, "startSession(): token=" + activityToken + ", flags=" + flags);
 
         // Occasionally clean up abandoned sessions
         pruneAbandonedSessionsLocked();
@@ -376,17 +358,31 @@
     }
 
     void disableOwnedAutofillServicesLocked(int uid) {
-        if (mInfo == null || mInfo.getServiceInfo().applicationInfo.uid != uid) {
+        Slog.i(TAG, "disableOwnedServices(" + uid + "): " + mInfo);
+        if (mInfo == null) return;
+
+        final ServiceInfo serviceInfo = mInfo.getServiceInfo();
+        if (serviceInfo.applicationInfo.uid != uid) {
+            Slog.w(TAG, "disableOwnedServices(): ignored when called by UID " + uid
+                    + " instead of " + serviceInfo.applicationInfo.uid
+                    + " for service " + mInfo);
             return;
         }
+
+
         final long identity = Binder.clearCallingIdentity();
         try {
             final String autoFillService = getComponentNameFromSettings();
-            if (mInfo.getServiceInfo().getComponentName().equals(
-                    ComponentName.unflattenFromString(autoFillService))) {
+            final ComponentName componentName = serviceInfo.getComponentName();
+            if (componentName.equals(ComponentName.unflattenFromString(autoFillService))) {
+                mMetricsLogger.action(MetricsEvent.AUTOFILL_SERVICE_DISABLED_SELF,
+                        componentName.getPackageName());
                 Settings.Secure.putStringForUser(mContext.getContentResolver(),
                         Settings.Secure.AUTOFILL_SERVICE, null, mUserId);
                 destroySessionsLocked();
+            } else {
+                Slog.w(TAG, "disableOwnedServices(): ignored because current service ("
+                        + serviceInfo + ") does not match Settings (" + autoFillService + ")");
             }
         } finally {
             Binder.restoreCallingIdentity(identity);
@@ -413,7 +409,7 @@
 
         final Session newSession = new Session(this, mUi, mContext, mHandlerCaller, mUserId, mLock,
                 sessionId, uid, activityToken, appCallbackToken, hasCallback,
-                mInfo.getServiceInfo().getComponentName(), componentName);
+                mUiLatencyHistory, mInfo.getServiceInfo().getComponentName(), componentName);
         mSessions.put(newSession.id, newSession);
 
         return newSession;
@@ -508,6 +504,25 @@
         }
     }
 
+    void onPendingSaveUi(int operation, @NonNull IBinder token) {
+        if (sVerbose) Slog.v(TAG, "onPendingSaveUi(" + operation + "): " + token);
+        synchronized (mLock) {
+            final int sessionCount = mSessions.size();
+            for (int i = sessionCount - 1; i >= 0; i--) {
+                final Session session = mSessions.valueAt(i);
+                if (session.isSaveUiPendingForTokenLocked(token)) {
+                    session.onPendingSaveUi(operation, token);
+                    return;
+                }
+            }
+        }
+        if (sDebug) {
+            Slog.d(TAG, "No pending Save UI for token " + token + " and operation "
+                    + DebugUtils.flagsToString(AutofillManager.class, "PENDING_UI_OPERATION_",
+                            operation));
+        }
+    }
+
     void destroyLocked() {
         if (sVerbose) Slog.v(TAG, "destroyLocked()");
 
@@ -527,10 +542,16 @@
         sendStateToClients(true);
     }
 
+    @NonNull
     CharSequence getServiceLabel() {
         return mInfo.getServiceInfo().loadLabel(mContext.getPackageManager());
     }
 
+    @NonNull
+    Drawable getServiceIcon() {
+        return mInfo.getServiceInfo().loadIcon(mContext.getPackageManager());
+    }
+
     /**
      * Initializes the last fill selection after an autofill service returned a new
      * {@link FillResponse}.
@@ -579,9 +600,9 @@
     /**
      * Updates the last fill selection when an dataset authentication was selected.
      */
-    void setDatasetAuthenticationSelected(@Nullable String selectedDataset, int sessionId) {
+    void logDatasetAuthenticationSelected(@Nullable String selectedDataset, int sessionId) {
         synchronized (mLock) {
-            if (isValidEventLocked("setDatasetAuthenticationSelected()", sessionId)) {
+            if (isValidEventLocked("logDatasetAuthenticationSelected()", sessionId)) {
                 mEventHistory.addEvent(
                         new Event(Event.TYPE_DATASET_AUTHENTICATION_SELECTED, selectedDataset));
             }
@@ -591,9 +612,9 @@
     /**
      * Updates the last fill selection when an save Ui is shown.
      */
-    void setSaveShown(int sessionId) {
+    void logSaveShown(int sessionId) {
         synchronized (mLock) {
-            if (isValidEventLocked("setSaveShown()", sessionId)) {
+            if (isValidEventLocked("logSaveShown()", sessionId)) {
                 mEventHistory.addEvent(new Event(Event.TYPE_SAVE_SHOWN, null));
             }
         }
@@ -602,7 +623,7 @@
     /**
      * Updates the last fill response when a dataset was selected.
      */
-    void setDatasetSelected(@Nullable String selectedDataset, int sessionId) {
+    void logDatasetSelected(@Nullable String selectedDataset, int sessionId) {
         synchronized (mLock) {
             if (isValidEventLocked("setDatasetSelected()", sessionId)) {
                 mEventHistory.addEvent(new Event(Event.TYPE_DATASET_SELECTED, selectedDataset));
@@ -669,8 +690,24 @@
     }
 
     void destroySessionsLocked() {
+        if (mSessions.size() == 0) {
+            mUi.destroyAll(null, null, false);
+            return;
+        }
         while (mSessions.size() > 0) {
-            mSessions.valueAt(0).removeSelfLocked();
+            mSessions.valueAt(0).forceRemoveSelfLocked();
+        }
+    }
+
+    // TODO(b/64940307): remove this method if SaveUI is refactored to be attached on activities
+    void destroyFinishedSessionsLocked() {
+        final int sessionCount = mSessions.size();
+        for (int i = sessionCount - 1; i >= 0; i--) {
+            final Session session = mSessions.valueAt(i);
+            if (session.isSavingLocked()) {
+                if (sDebug) Slog.d(TAG, "destroyFinishedSessionsLocked(): " + session.id);
+                session.forceRemoveSelfLocked();
+            }
         }
     }
 
diff --git a/services/autofill/java/com/android/server/autofill/Helper.java b/services/autofill/java/com/android/server/autofill/Helper.java
index 86e32e0..236fbfd 100644
--- a/services/autofill/java/com/android/server/autofill/Helper.java
+++ b/services/autofill/java/com/android/server/autofill/Helper.java
@@ -16,11 +16,19 @@
 
 package com.android.server.autofill;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.metrics.LogMaker;
 import android.os.Bundle;
+import android.service.autofill.Dataset;
+import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.view.autofill.AutofillId;
+import android.view.autofill.AutofillValue;
 
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Objects;
 import java.util.Set;
@@ -82,4 +90,26 @@
         }
         return array;
     }
+
+    @NonNull
+    static ArrayMap<AutofillId, AutofillValue> getFields(@NonNull Dataset dataset) {
+        final ArrayList<AutofillId> ids = dataset.getFieldIds();
+        final ArrayList<AutofillValue> values = dataset.getFieldValues();
+        final int size = ids == null ? 0 : ids.size();
+        final ArrayMap<AutofillId, AutofillValue> fields = new ArrayMap<>(size);
+        for (int i = 0; i < size; i++) {
+            fields.put(ids.get(i), values.get(i));
+        }
+        return fields;
+    }
+
+    @NonNull
+    public static LogMaker newLogMaker(int category, String packageName,
+            String servicePackageName) {
+        final LogMaker log = new LogMaker(category).setPackageName(packageName);
+        if (servicePackageName != null) {
+            log.addTaggedData(MetricsEvent.FIELD_AUTOFILL_SERVICE, servicePackageName);
+        }
+        return log;
+    }
 }
diff --git a/services/autofill/java/com/android/server/autofill/RemoteFillService.java b/services/autofill/java/com/android/server/autofill/RemoteFillService.java
index aebe92e..af55807 100644
--- a/services/autofill/java/com/android/server/autofill/RemoteFillService.java
+++ b/services/autofill/java/com/android/server/autofill/RemoteFillService.java
@@ -290,7 +290,7 @@
     }
 
     private void dispatchOnFillRequestFailure(PendingRequest pendingRequest,
-            CharSequence message) {
+            @Nullable CharSequence message) {
         mHandler.getHandler().post(() -> {
             if (handleResponseCallbackCommon(pendingRequest)) {
                 mCallbacks.onFillRequestFailure(message, mComponentName.getPackageName());
@@ -298,6 +298,16 @@
         });
     }
 
+    private void dispatchOnFillTimeout(@NonNull ICancellationSignal cancellationSignal) {
+        mHandler.getHandler().post(() -> {
+            try {
+                cancellationSignal.cancel();
+            } catch (RemoteException e) {
+                Slog.w(LOG_TAG, "Error calling cancellation signal: " + e);
+            }
+        });
+    }
+
     private void dispatchOnSaveRequestSuccess(PendingRequest pendingRequest) {
         mHandler.getHandler().post(() -> {
             if (handleResponseCallbackCommon(pendingRequest)) {
@@ -307,7 +317,7 @@
     }
 
     private void dispatchOnSaveRequestFailure(PendingRequest pendingRequest,
-            CharSequence message) {
+            @Nullable CharSequence message) {
         mHandler.getHandler().post(() -> {
             if (handleResponseCallbackCommon(pendingRequest)) {
                 mCallbacks.onSaveRequestFailure(message, mComponentName.getPackageName());
@@ -377,8 +387,10 @@
                 @Override
                 public void executeMessage(Message message) {
                     if (mDestroyed) {
-                        Slog.w(LOG_TAG, "Not handling " + message + " as service for "
-                                + mComponentName + " is already destroyed");
+                        if (sVerbose) {
+                            Slog.v(LOG_TAG, "Not handling " + message + " as service for "
+                                    + mComponentName + " is already destroyed");
+                        }
                         return;
                     }
                     switch (message.what) {
@@ -430,7 +442,9 @@
                 Slog.w(LOG_TAG, getClass().getSimpleName() + " timed out");
                 final RemoteFillService remoteService = mWeakService.get();
                 if (remoteService != null) {
-                    fail(remoteService);
+                    Slog.w(LOG_TAG, getClass().getSimpleName() + " timed out after "
+                            + TIMEOUT_REMOTE_REQUEST_MILLIS + " ms");
+                    onTimeout(remoteService);
                 }
             };
             mServiceHandler.postAtTime(mTimeoutTrigger,
@@ -483,7 +497,7 @@
          * Called by the self-destructure timeout when the AutofilllService didn't reply to the
          * request on time.
          */
-        abstract void fail(RemoteFillService remoteService);
+        abstract void onTimeout(RemoteFillService remoteService);
 
         /**
          * @return whether this request leads to a final state where no
@@ -547,12 +561,27 @@
         }
 
         @Override
-        void fail(RemoteFillService remoteService) {
+        void onTimeout(RemoteFillService remoteService) {
+            // NOTE: Must make these 2 calls asynchronously, because the cancellation signal is
+            // handled by the service, which could block.
+            final ICancellationSignal cancellation;
+            synchronized (mLock) {
+                cancellation = mCancellation;
+            }
+            if (cancellation != null) {
+                remoteService.dispatchOnFillTimeout(cancellation);
+            }
             remoteService.dispatchOnFillRequestFailure(PendingFillRequest.this, null);
         }
 
         @Override
         public void run() {
+            synchronized (mLock) {
+                if (isCancelledLocked()) {
+                    if (sDebug) Slog.d(LOG_TAG, "run() called after canceled: " + mRequest);
+                    return;
+                }
+            }
             final RemoteFillService remoteService = getService();
             if (remoteService != null) {
                 try {
@@ -569,7 +598,10 @@
         public boolean cancel() {
             if (!super.cancel()) return false;
 
-            final ICancellationSignal cancellation = mCancellation;
+            final ICancellationSignal cancellation;
+            synchronized (mLock) {
+                cancellation = mCancellation;
+            }
             if (cancellation != null) {
                 try {
                     cancellation.cancel();
@@ -615,7 +647,7 @@
         }
 
         @Override
-        void fail(RemoteFillService remoteService) {
+        void onTimeout(RemoteFillService remoteService) {
             remoteService.dispatchOnSaveRequestFailure(PendingSaveRequest.this, null);
         }
 
@@ -628,7 +660,7 @@
                 } catch (RemoteException e) {
                     Slog.e(LOG_TAG, "Error calling on save request", e);
 
-                    remoteService.dispatchOnFillRequestFailure(PendingSaveRequest.this, null);
+                    remoteService.dispatchOnSaveRequestFailure(PendingSaveRequest.this, null);
                 }
             }
         }
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 6e0859e..1f0e51c 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -50,17 +50,22 @@
 import android.os.IBinder;
 import android.os.Parcelable;
 import android.os.RemoteException;
+import android.os.SystemClock;
 import android.service.autofill.AutofillService;
 import android.service.autofill.Dataset;
 import android.service.autofill.FillContext;
 import android.service.autofill.FillRequest;
 import android.service.autofill.FillResponse;
+import android.service.autofill.InternalValidator;
 import android.service.autofill.SaveInfo;
 import android.service.autofill.SaveRequest;
+import android.service.autofill.ValueFinder;
 import android.util.ArrayMap;
 import android.util.ArraySet;
+import android.util.LocalLog;
 import android.util.Slog;
 import android.util.SparseArray;
+import android.util.TimeUtils;
 import android.view.autofill.AutofillId;
 import android.view.autofill.AutofillManager;
 import android.view.autofill.AutofillValue;
@@ -75,9 +80,11 @@
 import com.android.internal.os.IResultReceiver;
 import com.android.internal.util.ArrayUtils;
 import com.android.server.autofill.ui.AutoFillUI;
+import com.android.server.autofill.ui.PendingUi;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -161,10 +168,30 @@
     @GuardedBy("mLock")
     private boolean mDestroyed;
 
-    /** Whether the session is currently saving */
+    /** Whether the session is currently saving. */
     @GuardedBy("mLock")
     private boolean mIsSaving;
 
+    /**
+     * Helper used to handle state of Save UI when it must be hiding to show a custom description
+     * link and later recovered.
+     */
+    @GuardedBy("mLock")
+    private PendingUi mPendingSaveUi;
+
+    /**
+     * When the session started (using elapsed time since boot).
+     */
+    private final long mStartTime;
+
+    /**
+     * When the UI was shown for the first time (using elapsed time since boot).
+     */
+    @GuardedBy("mLock")
+    private long mUiShownTime;
+
+    @GuardedBy("mLock")
+    private final LocalLog mUiLatencyHistory;
 
     /**
      * Receiver of assist data from the app's {@link Activity}.
@@ -205,15 +232,10 @@
                     Slog.w(TAG, "Activity " + mComponentName + " forged different component on "
                             + "AssistStructure: " + componentNameFromApp);
                     structure.setActivityComponent(mComponentName);
-                    final LogMaker log = (new LogMaker(
-                            MetricsEvent.AUTOFILL_FORGED_COMPONENT_ATTEMPT))
-                            .setPackageName(mComponentName.getPackageName())
-                            .addTaggedData(MetricsEvent.FIELD_AUTOFILL_SERVICE,
-                                    mService.getPackageName())
+                    mMetricsLogger.write(newLogMaker(MetricsEvent.AUTOFILL_FORGED_COMPONENT_ATTEMPT)
                             .addTaggedData(MetricsEvent.FIELD_AUTOFILL_FORGED_COMPONENT_NAME,
                                             componentNameFromApp == null ? "null"
-                                                    : componentNameFromApp.flattenToShortString());
-                    mMetricsLogger.write(log);
+                                                    : componentNameFromApp.flattenToShortString()));
                 }
                 structure.sanitizeForParceling(true);
 
@@ -229,7 +251,7 @@
 
                 final int numContexts = mContexts.size();
                 for (int i = 0; i < numContexts; i++) {
-                    fillContextWithAllowedValues(mContexts.get(i), flags);
+                    fillContextWithAllowedValuesLocked(mContexts.get(i), flags);
                 }
 
                 // Dispatch a snapshot of the current contexts list since it may change
@@ -247,7 +269,7 @@
     /**
      * Returns the ids of all entries in {@link #mViewStates} in the same order.
      */
-    private AutofillId[] getIdsOfAllViewStates() {
+    private AutofillId[] getIdsOfAllViewStatesLocked() {
         final int numViewState = mViewStates.size();
         final AutofillId[] ids = new AutofillId[numViewState];
         for (int i = 0; i < numViewState; i++) {
@@ -258,6 +280,43 @@
     }
 
     /**
+     * Gets the value of a field, using either the {@code viewStates} or the {@code mContexts}, or
+     * {@code null} when not found on either of them.
+     */
+    @Nullable
+    private String getValueAsString(@NonNull AutofillId id) {
+        AutofillValue value = null;
+        synchronized (mLock) {
+            final ViewState state = mViewStates.get(id);
+            if (state == null) {
+                if (sDebug) Slog.d(TAG, "getValue(): no view state for " + id);
+                return null;
+            }
+            value = state.getCurrentValue();
+            if (value == null) {
+                if (sDebug) Slog.d(TAG, "getValue(): no current value for " + id);
+                value = getValueFromContextsLocked(id);
+            }
+        }
+        if (value != null) {
+            if (value.isText()) {
+                return value.getTextValue().toString();
+            }
+            if (value.isList()) {
+                final CharSequence[] options = getAutofillOptionsFromContextsLocked(id);
+                if (options != null) {
+                    final int index = value.getListValue();
+                    final CharSequence option = options[index];
+                    return option != null ? option.toString() : null;
+                } else {
+                    Slog.w(TAG, "getValueAsString(): no autofill options for id " + id);
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
      * Updates values of the nodes in the context's structure so that:
      * - proper node is focused
      * - autofillValue is sent back to service when it was previously autofilled
@@ -266,8 +325,9 @@
      * @param fillContext The context to be filled
      * @param flags The flags that started the session
      */
-    private void fillContextWithAllowedValues(@NonNull FillContext fillContext, int flags) {
-        final ViewNode[] nodes = fillContext.findViewNodesByAutofillIds(getIdsOfAllViewStates());
+    private void fillContextWithAllowedValuesLocked(@NonNull FillContext fillContext, int flags) {
+        final ViewNode[] nodes = fillContext
+                .findViewNodesByAutofillIds(getIdsOfAllViewStatesLocked());
 
         final int numViewState = mViewStates.size();
         for (int i = 0; i < numViewState; i++) {
@@ -306,21 +366,21 @@
      * Cancels the last request sent to the {@link #mRemoteFillService}.
      */
     private void cancelCurrentRequestLocked() {
-        int canceledRequest = mRemoteFillService.cancelCurrentRequest();
+        final int canceledRequest = mRemoteFillService.cancelCurrentRequest();
 
         // Remove the FillContext as there will never be a response for the service
         if (canceledRequest != INVALID_REQUEST_ID && mContexts != null) {
-            int numContexts = mContexts.size();
+            final int numContexts = mContexts.size();
 
             // It is most likely the last context, hence search backwards
             for (int i = numContexts - 1; i >= 0; i--) {
                 if (mContexts.get(i).getRequestId() == canceledRequest) {
+                    if (sDebug) Slog.d(TAG, "cancelCurrentRequest(): id = " + canceledRequest);
                     mContexts.remove(i);
                     break;
                 }
             }
         }
-
     }
 
     /**
@@ -364,10 +424,11 @@
     Session(@NonNull AutofillManagerServiceImpl service, @NonNull AutoFillUI ui,
             @NonNull Context context, @NonNull HandlerCaller handlerCaller, int userId,
             @NonNull Object lock, int sessionId, int uid, @NonNull IBinder activityToken,
-            @NonNull IBinder client, boolean hasCallback,
+            @NonNull IBinder client, boolean hasCallback, @NonNull LocalLog uiLatencyHistory,
             @NonNull ComponentName serviceComponentName, @NonNull ComponentName appComponentName) {
         id = sessionId;
         this.uid = uid;
+        mStartTime = SystemClock.elapsedRealtime();
         mService = service;
         mLock = lock;
         mUi = ui;
@@ -375,11 +436,11 @@
         mRemoteFillService = new RemoteFillService(context, serviceComponentName, userId, this);
         mActivityToken = activityToken;
         mHasCallback = hasCallback;
+        mUiLatencyHistory = uiLatencyHistory;
         mComponentName = appComponentName;
         mClient = IAutoFillManagerClient.Stub.asInterface(client);
 
-        mMetricsLogger.action(MetricsEvent.AUTOFILL_SESSION_STARTED,
-                mComponentName.getPackageName());
+        writeLog(MetricsEvent.AUTOFILL_SESSION_STARTED);
     }
 
     /**
@@ -424,14 +485,7 @@
             }
         }
         if (response == null) {
-            if (sVerbose) Slog.v(TAG, "canceling session " + id + " when server returned null");
-            if ((requestFlags & FLAG_MANUAL_REQUEST) != 0) {
-                getUiForShowing().showError(R.string.autofill_error_cannot_autofill, this);
-            }
-            mService.resetLastResponse();
-            // Nothing to be done, but need to notify client.
-            notifyUnavailableToClient();
-            removeSelf();
+            processNullResponseLocked(requestFlags);
             return;
         }
 
@@ -440,19 +494,16 @@
         if ((response.getDatasets() == null || response.getDatasets().isEmpty())
                         && response.getAuthentication() == null) {
             // Response is "empty" from an UI point of view, need to notify client.
-            notifyUnavailableToClient();
+            notifyUnavailableToClient(false);
         }
         synchronized (mLock) {
             processResponseLocked(response, requestFlags);
         }
 
-        final LogMaker log = (new LogMaker(MetricsEvent.AUTOFILL_REQUEST))
+        final LogMaker log = newLogMaker(MetricsEvent.AUTOFILL_REQUEST, servicePackageName)
                 .setType(MetricsEvent.TYPE_SUCCESS)
-                .setPackageName(mComponentName.getPackageName())
                 .addTaggedData(MetricsEvent.FIELD_AUTOFILL_NUM_DATASETS,
-                        response.getDatasets() == null ? 0 : response.getDatasets().size())
-                .addTaggedData(MetricsEvent.FIELD_AUTOFILL_SERVICE,
-                        servicePackageName);
+                        response.getDatasets() == null ? 0 : response.getDatasets().size());
         mMetricsLogger.write(log);
     }
 
@@ -468,10 +519,8 @@
             }
             mService.resetLastResponse();
         }
-        LogMaker log = (new LogMaker(MetricsEvent.AUTOFILL_REQUEST))
-                .setType(MetricsEvent.TYPE_FAILURE)
-                .setPackageName(mComponentName.getPackageName())
-                .addTaggedData(MetricsEvent.FIELD_AUTOFILL_SERVICE, servicePackageName);
+        LogMaker log = newLogMaker(MetricsEvent.AUTOFILL_REQUEST, servicePackageName)
+                .setType(MetricsEvent.TYPE_FAILURE);
         mMetricsLogger.write(log);
 
         getUiForShowing().showError(message, this);
@@ -490,11 +539,8 @@
                 return;
             }
         }
-        LogMaker log = (new LogMaker(
-                MetricsEvent.AUTOFILL_DATA_SAVE_REQUEST))
-                .setType(MetricsEvent.TYPE_SUCCESS)
-                .setPackageName(mComponentName.getPackageName())
-                .addTaggedData(MetricsEvent.FIELD_AUTOFILL_SERVICE, servicePackageName);
+        LogMaker log = newLogMaker(MetricsEvent.AUTOFILL_DATA_SAVE_REQUEST, servicePackageName)
+                .setType(MetricsEvent.TYPE_SUCCESS);
         mMetricsLogger.write(log);
 
         // Nothing left to do...
@@ -514,11 +560,8 @@
                 return;
             }
         }
-        LogMaker log = (new LogMaker(
-                MetricsEvent.AUTOFILL_DATA_SAVE_REQUEST))
-                .setType(MetricsEvent.TYPE_FAILURE)
-                .setPackageName(mComponentName.getPackageName())
-                .addTaggedData(MetricsEvent.FIELD_AUTOFILL_SERVICE, servicePackageName);
+        LogMaker log = newLogMaker(MetricsEvent.AUTOFILL_DATA_SAVE_REQUEST, servicePackageName)
+                .setType(MetricsEvent.TYPE_FAILURE);
         mMetricsLogger.write(log);
 
         getUiForShowing().showError(message, this);
@@ -552,19 +595,23 @@
     // FillServiceCallbacks
     @Override
     public void authenticate(int requestId, int datasetIndex, IntentSender intent, Bundle extras) {
+        if (sDebug) {
+            Slog.d(TAG, "authenticate(): requestId=" + requestId + "; datasetIdx=" + datasetIndex
+                    + "; intentSender=" + intent);
+        }
         final Intent fillInIntent;
         synchronized (mLock) {
-            synchronized (mLock) {
-                if (mDestroyed) {
-                    Slog.w(TAG, "Call to Session#authenticate() rejected - session: "
-                            + id + " destroyed");
-                    return;
-                }
+            if (mDestroyed) {
+                Slog.w(TAG, "Call to Session#authenticate() rejected - session: "
+                        + id + " destroyed");
+                return;
             }
-            fillInIntent = createAuthFillInIntent(
-                    getFillContextByRequestIdLocked(requestId).getStructure(), extras);
+            fillInIntent = createAuthFillInIntentLocked(requestId, extras);
+            if (fillInIntent == null) {
+                forceRemoveSelfLocked();
+                return;
+            }
         }
-
         mService.setAuthenticationSelected(id);
 
         final int authenticationId = AutofillManager.makeAuthenticationId(requestId, datasetIndex);
@@ -588,7 +635,7 @@
                 return;
             }
         }
-        mHandlerCaller.getHandler().post(() -> autoFill(requestId, datasetIndex, dataset));
+        mHandlerCaller.getHandler().post(() -> autoFill(requestId, datasetIndex, dataset, true));
     }
 
     // AutoFillUiCallback
@@ -676,7 +723,7 @@
         mHandlerCaller.getHandler().post(() -> {
             try {
                 synchronized (mLock) {
-                    mClient.startIntentSender(intentSender);
+                    mClient.startIntentSender(intentSender, null);
                 }
             } catch (RemoteException e) {
                 Slog.e(TAG, "Error launching auth intent", e);
@@ -690,7 +737,13 @@
                     + id + " destroyed");
             return;
         }
-
+        if (mResponses == null) {
+            // Typically happens when app explicitly called cancel() while the service was showing
+            // the auth UI.
+            Slog.w(TAG, "setAuthenticationResultLocked(" + authenticationId + "): no responses");
+            removeSelf();
+            return;
+        }
         final int requestId = AutofillManager.getRequestIdFromAuthenticationId(authenticationId);
         final FillResponse authenticatedResponse = mResponses.get(requestId);
         if (authenticatedResponse == null || data == null) {
@@ -710,17 +763,25 @@
         }
 
         final Parcelable result = data.getParcelable(AutofillManager.EXTRA_AUTHENTICATION_RESULT);
+        if (sDebug) Slog.d(TAG, "setAuthenticationResultLocked(): result=" + result);
         if (result instanceof FillResponse) {
-            final FillResponse response = (FillResponse) result;
-            mMetricsLogger.action(MetricsEvent.AUTOFILL_AUTHENTICATED,
-                    mComponentName.getPackageName());
-            replaceResponseLocked(authenticatedResponse, response);
+            writeLog(MetricsEvent.AUTOFILL_AUTHENTICATED);
+            replaceResponseLocked(authenticatedResponse, (FillResponse) result);
         } else if (result instanceof Dataset) {
             if (datasetIdx != AutofillManager.AUTHENTICATION_ID_DATASET_ID_UNDEFINED) {
+                writeLog(MetricsEvent.AUTOFILL_DATASET_AUTHENTICATED);
                 final Dataset dataset = (Dataset) result;
                 authenticatedResponse.getDatasets().set(datasetIdx, dataset);
-                autoFill(requestId, datasetIdx, dataset);
+                autoFill(requestId, datasetIdx, dataset, false);
+            } else {
+                writeLog(MetricsEvent.AUTOFILL_INVALID_DATASET_AUTHENTICATION);
             }
+        } else {
+            if (result != null) {
+                Slog.w(TAG, "service returned invalid auth type: " + result);
+            }
+            writeLog(MetricsEvent.AUTOFILL_INVALID_AUTHENTICATION);
+            processNullResponseLocked(0);
         }
     }
 
@@ -733,6 +794,44 @@
         mHasCallback = hasIt;
     }
 
+    @Nullable
+    private FillResponse getLastResponseLocked(@Nullable String logPrefix) {
+        if (mContexts == null) {
+            if (sDebug && logPrefix != null) Slog.d(TAG, logPrefix + ": no contexts");
+            return null;
+        }
+        if (mResponses == null) {
+            // Happens when the activity / session was finished before the service replied, or
+            // when the service cannot autofill it (and returned a null response).
+            if (sVerbose && logPrefix != null) {
+                Slog.v(TAG, logPrefix + ": no responses on session");
+            }
+            return null;
+        }
+
+        final int lastResponseIdx = getLastResponseIndexLocked();
+        if (lastResponseIdx < 0) {
+            if (logPrefix != null) {
+                Slog.w(TAG, logPrefix + ": did not get last response. mResponses=" + mResponses
+                        + ", mViewStates=" + mViewStates);
+            }
+            return null;
+        }
+
+        final FillResponse response = mResponses.valueAt(lastResponseIdx);
+        if (sVerbose && logPrefix != null) {
+            Slog.v(TAG, logPrefix + ": mResponses=" + mResponses + ", mContexts=" + mContexts
+                    + ", mViewStates=" + mViewStates);
+        }
+        return response;
+    }
+
+    @Nullable
+    private SaveInfo getSaveInfoLocked() {
+        final FillResponse response = getLastResponseLocked(null);
+        return response == null ? null : response.getSaveInfo();
+    }
+
     /**
      * Shows the save UI, when session can be saved.
      *
@@ -744,87 +843,71 @@
                     + id + " destroyed");
             return false;
         }
-        if (mContexts == null) {
-            Slog.d(TAG, "showSaveLocked(): no contexts");
-            return true;
-        }
-        if (mResponses == null) {
-            // Happens when the activity / session was finished before the service replied, or
-            // when the service cannot autofill it (and returned a null response).
-            if (sVerbose) {
-                Slog.v(TAG, "showSaveLocked(): no responses on session");
-            }
-            return true;
-        }
-
-        final int lastResponseIdx = getLastResponseIndex();
-        if (lastResponseIdx < 0) {
-            Slog.w(TAG, "showSaveLocked(): did not get last response. mResponses=" + mResponses
-                    + ", mViewStates=" + mViewStates);
-            return true;
-        }
-
-        final FillResponse response = mResponses.valueAt(lastResponseIdx);
-        final SaveInfo saveInfo = response.getSaveInfo();
-        if (sVerbose) {
-            Slog.v(TAG, "showSaveLocked(): mResponses=" + mResponses + ", mContexts=" + mContexts
-                    + ", mViewStates=" + mViewStates);
-        }
+        final FillResponse response = getLastResponseLocked("showSaveLocked()");
+        final SaveInfo saveInfo = response == null ? null : response.getSaveInfo();
 
         /*
          * The Save dialog is only shown if all conditions below are met:
          *
-         * - saveInfo is not null
-         * - autofillValue of all required ids is not null
+         * - saveInfo is not null.
+         * - autofillValue of all required ids is not null.
          * - autofillValue of at least one id (required or optional) has changed.
+         * - there is no Dataset in the last FillResponse whose values of all dataset fields matches
+         *   the current values of all fields in the screen.
          */
-
         if (saveInfo == null) {
             return true;
         }
 
-        final AutofillId[] requiredIds = saveInfo.getRequiredIds();
-        if (requiredIds == null || requiredIds.length == 0) {
-            Slog.w(TAG, "showSaveLocked(): no required ids on saveInfo");
-            return true;
-        }
+        // Cache used to make sure changed fields do not belong to a dataset.
+        final ArrayMap<AutofillId, AutofillValue> currentValues = new ArrayMap<>();
+        final ArraySet<AutofillId> allIds = new ArraySet<>();
 
+        final AutofillId[] requiredIds = saveInfo.getRequiredIds();
         boolean allRequiredAreNotEmpty = true;
         boolean atLeastOneChanged = false;
-        for (int i = 0; i < requiredIds.length; i++) {
-            final AutofillId id = requiredIds[i];
-            final ViewState viewState = mViewStates.get(id);
-            if (viewState == null) {
-                Slog.w(TAG, "showSaveLocked(): no ViewState for required " + id);
-                allRequiredAreNotEmpty = false;
-                break;
-            }
-
-            AutofillValue value = viewState.getCurrentValue();
-            if (value == null || value.isEmpty()) {
-                final AutofillValue initialValue = getValueFromContexts(id);
-                if (initialValue != null) {
-                    if (sDebug) {
-                        Slog.d(TAG, "Value of required field " + id + " didn't change; "
-                                + "using initial value (" + initialValue + ") instead");
-                    }
-                    value = initialValue;
-                } else {
-                    if (sDebug) {
-                        Slog.d(TAG, "showSaveLocked(): empty value for required " + id );
-                    }
+        if (requiredIds != null) {
+            for (int i = 0; i < requiredIds.length; i++) {
+                final AutofillId id = requiredIds[i];
+                if (id == null) {
+                    Slog.w(TAG, "null autofill id on " + Arrays.toString(requiredIds));
+                    continue;
+                }
+                allIds.add(id);
+                final ViewState viewState = mViewStates.get(id);
+                if (viewState == null) {
+                    Slog.w(TAG, "showSaveLocked(): no ViewState for required " + id);
                     allRequiredAreNotEmpty = false;
                     break;
                 }
-            }
-            final AutofillValue filledValue = viewState.getAutofilledValue();
 
-            if (!value.equals(filledValue)) {
-                if (sDebug) {
-                    Slog.d(TAG, "showSaveLocked(): found a change on required " + id + ": "
-                            + filledValue + " => " + value);
+                AutofillValue value = viewState.getCurrentValue();
+                if (value == null || value.isEmpty()) {
+                    final AutofillValue initialValue = getValueFromContextsLocked(id);
+                    if (initialValue != null) {
+                        if (sDebug) {
+                            Slog.d(TAG, "Value of required field " + id + " didn't change; "
+                                    + "using initial value (" + initialValue + ") instead");
+                        }
+                        value = initialValue;
+                    } else {
+                        if (sDebug) {
+                            Slog.d(TAG, "empty value for required " + id );
+                        }
+                        allRequiredAreNotEmpty = false;
+                        break;
+                    }
                 }
-                atLeastOneChanged = true;
+                currentValues.put(id, value);
+                final AutofillValue filledValue = viewState.getAutofilledValue();
+
+                if (!value.equals(filledValue)) {
+                    if (sDebug) {
+                        Slog.d(TAG, "found a change on required " + id + ": " + filledValue
+                                + " => " + value);
+                    }
+                    atLeastOneChanged = true;
+                }
             }
         }
 
@@ -834,31 +917,116 @@
                 // No change on required ids yet, look for changes on optional ids.
                 for (int i = 0; i < optionalIds.length; i++) {
                     final AutofillId id = optionalIds[i];
+                    allIds.add(id);
                     final ViewState viewState = mViewStates.get(id);
                     if (viewState == null) {
-                        Slog.w(TAG, "showSaveLocked(): no ViewState for optional " + id);
+                        Slog.w(TAG, "no ViewState for optional " + id);
                         continue;
                     }
                     if ((viewState.getState() & ViewState.STATE_CHANGED) != 0) {
                         final AutofillValue currentValue = viewState.getCurrentValue();
+                        currentValues.put(id, currentValue);
                         final AutofillValue filledValue = viewState.getAutofilledValue();
                         if (currentValue != null && !currentValue.equals(filledValue)) {
                             if (sDebug) {
-                                Slog.d(TAG, "finishSessionLocked(): found a change on optional "
-                                        + id + ": " + filledValue + " => " + currentValue);
+                                Slog.d(TAG, "found a change on optional " + id + ": " + filledValue
+                                        + " => " + currentValue);
                             }
                             atLeastOneChanged = true;
                             break;
                         }
+                    } else {
+                        // Update current values cache based on initial value
+                        final AutofillValue initialValue = getValueFromContextsLocked(id);
+                        if (sDebug) {
+                            Slog.d(TAG, "no current value for " + id + "; initial value is "
+                                    + initialValue);
+                        }
+                        if (initialValue != null) {
+                            currentValues.put(id, initialValue);
+                        }
                     }
                 }
             }
             if (atLeastOneChanged) {
-                if (sDebug) Slog.d(TAG, "at least one field changed - showing save UI");
-                mService.setSaveShown(id);
-                getUiForShowing().showSaveUi(mService.getServiceLabel(), saveInfo,
-                        mComponentName.getPackageName(), this);
+                if (sDebug) {
+                    Slog.d(TAG, "at least one field changed, validate fields for save UI");
+                }
+                final ValueFinder valueFinder = (id) -> {return getValueAsString(id);};
 
+                final InternalValidator validator = saveInfo.getValidator();
+                if (validator != null) {
+                    final LogMaker log = newLogMaker(MetricsEvent.AUTOFILL_SAVE_VALIDATION);
+                    boolean isValid;
+                    try {
+                        isValid = validator.isValid(valueFinder);
+                        log.setType(isValid
+                                ? MetricsEvent.TYPE_SUCCESS
+                                : MetricsEvent.TYPE_DISMISS);
+                    } catch (Exception e) {
+                        Slog.e(TAG, "Not showing save UI because validation failed:", e);
+                        log.setType(MetricsEvent.TYPE_FAILURE);
+                        mMetricsLogger.write(log);
+                        return true;
+                    }
+
+                    mMetricsLogger.write(log);
+                    if (!isValid) {
+                        Slog.i(TAG, "not showing save UI because fields failed validation");
+                        return true;
+                    }
+                }
+
+                // Make sure the service doesn't have the fields already by checking the datasets
+                // content.
+                final List<Dataset> datasets = response.getDatasets();
+                if (datasets != null) {
+                    datasets_loop: for (int i = 0; i < datasets.size(); i++) {
+                        final Dataset dataset = datasets.get(i);
+                        final ArrayMap<AutofillId, AutofillValue> datasetValues =
+                                Helper.getFields(dataset);
+                        if (sVerbose) {
+                            Slog.v(TAG, "Checking if saved fields match contents of dataset #" + i
+                                    + ": " + dataset + "; allIds=" + allIds);
+                        }
+                        for (int j = 0; j < allIds.size(); j++) {
+                            final AutofillId id = allIds.valueAt(j);
+                            final AutofillValue currentValue = currentValues.get(id);
+                            if (currentValue == null) {
+                                if (sDebug) {
+                                    Slog.d(TAG, "dataset has value for field that is null: " + id);
+                                }
+                                continue datasets_loop;
+                            }
+                            final AutofillValue datasetValue = datasetValues.get(id);
+                            if (!currentValue.equals(datasetValue)) {
+                                if (sDebug) Slog.d(TAG, "found a change on id " + id);
+                                continue datasets_loop;
+                            }
+                            if (sVerbose) Slog.v(TAG, "no changes for id " + id);
+                        }
+                        if (sDebug) {
+                            Slog.d(TAG, "ignoring Save UI because all fields match contents of "
+                                    + "dataset #" + i + ": " + dataset);
+                        }
+                        return true;
+                    }
+                }
+
+                if (sDebug) Slog.d(TAG, "Good news, everyone! All checks passed, show save UI!");
+                mService.logSaveShown(id);
+                final IAutoFillManagerClient client = getClient();
+                mPendingSaveUi = new PendingUi(mActivityToken, id, client);
+                getUiForShowing().showSaveUi(mService.getServiceLabel(), mService.getServiceIcon(),
+                        mService.getServicePackageName(), saveInfo, valueFinder,
+                        mComponentName.getPackageName(), this, mPendingSaveUi);
+                if (client != null) {
+                    try {
+                        client.setSaveUiState(id, true);
+                    } catch (RemoteException e) {
+                        Slog.e(TAG, "Error notifying client to set save UI state to shown: " + e);
+                    }
+                }
                 mIsSaving = true;
                 return false;
             }
@@ -883,23 +1051,39 @@
      * Gets the latest non-empty value for the given id in the autofill contexts.
      */
     @Nullable
-    private AutofillValue getValueFromContexts(AutofillId id) {
-        AutofillValue value = null;
+    private AutofillValue getValueFromContextsLocked(AutofillId id) {
         final int numContexts = mContexts.size();
-        for (int i = 0; i < numContexts; i++) {
+        for (int i = numContexts - 1; i >= 0; i--) {
             final FillContext context = mContexts.get(i);
             final ViewNode node = context.findViewNodeByAutofillId(id);
             if (node != null) {
-                final AutofillValue candidate = node.getAutofillValue();
+                final AutofillValue value = node.getAutofillValue();
                 if (sDebug) {
-                    Slog.d(TAG, "getValueFromContexts(" + id + ") at " + i + ": " + candidate);
+                    Slog.d(TAG, "getValueFromContexts(" + id + ") at " + i + ": " + value);
                 }
-                if (candidate != null && !candidate.isEmpty()) {
-                    value = candidate;
+                if (value != null && !value.isEmpty()) {
+                    return value;
                 }
             }
         }
-        return value;
+        return null;
+    }
+
+    /**
+     * Gets the latest autofill options for the given id in the autofill contexts.
+     */
+    @Nullable
+    private CharSequence[] getAutofillOptionsFromContextsLocked(AutofillId id) {
+        final int numContexts = mContexts.size();
+
+        for (int i = numContexts - 1; i >= 0; i--) {
+            final FillContext context = mContexts.get(i);
+            final ViewNode node = context.findViewNodeByAutofillId(id);
+            if (node != null && node.getAutofillOptions() != null) {
+                return node.getAutofillOptions();
+            }
+        }
+        return null;
     }
 
     /**
@@ -914,12 +1098,18 @@
 
         if (sVerbose) Slog.v(TAG, "callSaveLocked(): mViewStates=" + mViewStates);
 
+        if (mContexts == null) {
+            Slog.w(TAG, "callSaveLocked(): no contexts");
+            return;
+        }
+
         final int numContexts = mContexts.size();
 
         for (int contextNum = 0; contextNum < numContexts; contextNum++) {
             final FillContext context = mContexts.get(contextNum);
 
-            final ViewNode[] nodes = context.findViewNodesByAutofillIds(getIdsOfAllViewStates());
+            final ViewNode[] nodes =
+                context.findViewNodesByAutofillIds(getIdsOfAllViewStatesLocked());
 
             if (sVerbose) Slog.v(TAG, "callSaveLocked(): updating " + context);
 
@@ -1033,7 +1223,7 @@
                 }
             }
 
-            final ArrayList<Dataset> datasets = response.getDatasets();
+            final List<Dataset> datasets = response.getDatasets();
             if (datasets != null) {
                 final int numDatasets = datasets.size();
 
@@ -1094,6 +1284,21 @@
                 break;
             case ACTION_VALUE_CHANGED:
                 if (value != null && !value.equals(viewState.getCurrentValue())) {
+                    if (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);
 
@@ -1122,7 +1327,7 @@
 
                 // Remove the UI if the ViewState has changed.
                 if (mCurrentViewId != viewState.id) {
-                    hideFillUiIfOwnedByMe();
+                    mUi.hideFillUi(this);
                     mCurrentViewId = viewState.id;
                 }
 
@@ -1132,7 +1337,7 @@
             case ACTION_VIEW_EXITED:
                 if (mCurrentViewId == viewState.id) {
                     if (sVerbose) Slog.d(TAG, "Exiting view " + id);
-                    hideFillUiIfOwnedByMe();
+                    mUi.hideFillUi(this);
                     mCurrentViewId = null;
                 }
                 break;
@@ -1170,7 +1375,32 @@
         }
 
         getUiForShowing().showFillUi(filledId, response, filterText,
-                mComponentName.getPackageName(), this);
+                mService.getServicePackageName(), mComponentName.getPackageName(), this);
+
+        synchronized (mLock) {
+            if (mUiShownTime == 0) {
+                // Log first time UI is shown.
+                mUiShownTime = SystemClock.elapsedRealtime();
+                final long duration = mUiShownTime - mStartTime;
+                if (sDebug) {
+                    final StringBuilder msg = new StringBuilder("1st UI for ")
+                            .append(mActivityToken)
+                            .append(" shown in ");
+                    TimeUtils.formatDuration(duration, msg);
+                    Slog.d(TAG, msg.toString());
+                }
+                final StringBuilder historyLog = new StringBuilder("id=").append(id)
+                        .append(" app=").append(mActivityToken)
+                        .append(" svc=").append(mService.getServicePackageName())
+                        .append(" latency=");
+                TimeUtils.formatDuration(duration, historyLog);
+                mUiLatencyHistory.log(historyLog.toString());
+
+                final LogMaker metricsLog = newLogMaker(MetricsEvent.AUTOFILL_UI_LATENCY)
+                        .addTaggedData(MetricsEvent.FIELD_AUTOFILL_DURATION, duration);
+                mMetricsLogger.write(metricsLog);
+            }
+        }
     }
 
     boolean isDestroyed() {
@@ -1185,11 +1415,15 @@
         }
     }
 
-    private void notifyUnavailableToClient() {
+    private void notifyUnavailableToClient(boolean sessionFinished) {
         synchronized (mLock) {
-            if (!mHasCallback || mCurrentViewId == null) return;
+            if (mCurrentViewId == null) return;
             try {
-                mClient.notifyNoFillUi(id, mCurrentViewId);
+                if (mHasCallback) {
+                    mClient.notifyNoFillUi(id, mCurrentViewId, sessionFinished);
+                } else if (sessionFinished) {
+                    mClient.setSessionFinished(AutofillManager.STATE_FINISHED);
+                }
             } catch (RemoteException e) {
                 Slog.e(TAG, "Error notifying client no fill UI: id=" + mCurrentViewId, e);
             }
@@ -1203,7 +1437,7 @@
 
         // Only track the views of the last response as only those are reported back to the
         // service, see #showSaveLocked
-        final FillResponse response = mResponses.valueAt(getLastResponseIndex());
+        final FillResponse response = mResponses.valueAt(getLastResponseIndexLocked());
 
         ArraySet<AutofillId> trackedViews = null;
         boolean saveOnAllViewsInvisible = false;
@@ -1230,7 +1464,7 @@
         // Must also track that are part of datasets, otherwise the FillUI won't be hidden when
         // they go away (if they're not savable).
 
-        final ArrayList<Dataset> datasets = response.getDatasets();
+        final List<Dataset> datasets = response.getDatasets();
         ArraySet<AutofillId> fillableIds = null;
         if (datasets != null) {
             for (int i = 0; i < datasets.size(); i++) {
@@ -1270,10 +1504,21 @@
         processResponseLocked(newResponse, 0);
     }
 
+    private void processNullResponseLocked(int flags) {
+        if (sVerbose) Slog.v(TAG, "canceling session " + id + " when server returned null");
+        if ((flags & FLAG_MANUAL_REQUEST) != 0) {
+            getUiForShowing().showError(R.string.autofill_error_cannot_autofill, this);
+        }
+        mService.resetLastResponse();
+        // Nothing to be done, but need to notify client.
+        notifyUnavailableToClient(true);
+        removeSelf();
+    }
+
     private void processResponseLocked(@NonNull FillResponse newResponse, int flags) {
         // Make sure we are hiding the UI which will be shown
         // only if handling the current response requires it.
-        hideAllUiIfOwnedByMe();
+        mUi.hideAll(this);
 
         final int requestId = newResponse.getRequestId();
         if (sVerbose) {
@@ -1303,7 +1548,7 @@
      * Sets the state of all views in the given response.
      */
     private void setViewStatesLocked(FillResponse response, int state, boolean clearResponse) {
-        final ArrayList<Dataset> datasets = response.getDatasets();
+        final List<Dataset> datasets = response.getDatasets();
         if (datasets != null) {
             for (int i = 0; i < datasets.size(); i++) {
                 final Dataset dataset = datasets.get(i);
@@ -1326,8 +1571,10 @@
         final SaveInfo saveInfo = response.getSaveInfo();
         if (saveInfo != null) {
             final AutofillId[] requiredIds = saveInfo.getRequiredIds();
-            for (AutofillId id : requiredIds) {
-                createOrUpdateViewStateLocked(id, state, null);
+            if (requiredIds != null) {
+                for (AutofillId id : requiredIds) {
+                    createOrUpdateViewStateLocked(id, state, null);
+                }
             }
             final AutofillId[] optionalIds = saveInfo.getOptionalIds();
             if (optionalIds != null) {
@@ -1382,7 +1629,11 @@
         return viewState;
     }
 
-    void autoFill(int requestId, int datasetIndex, Dataset dataset) {
+    void autoFill(int requestId, int datasetIndex, Dataset dataset, boolean generateEvent) {
+        if (sDebug) {
+            Slog.d(TAG, "autoFill(): requestId=" + requestId  + "; datasetIdx=" + datasetIndex
+                    + "; dataset=" + dataset);
+        }
         synchronized (mLock) {
             if (mDestroyed) {
                 Slog.w(TAG, "Call to Session#autoFill() rejected - session: "
@@ -1391,21 +1642,26 @@
             }
             // Autofill it directly...
             if (dataset.getAuthentication() == null) {
-                mService.setDatasetSelected(dataset.getId(), id);
+                if (generateEvent) {
+                    mService.logDatasetSelected(dataset.getId(), id);
+                }
 
                 autoFillApp(dataset);
                 return;
             }
 
             // ...or handle authentication.
-            mService.setDatasetAuthenticationSelected(dataset.getId(), id);
+            mService.logDatasetAuthenticationSelected(dataset.getId(), id);
             setViewStatesLocked(null, dataset, ViewState.STATE_WAITING_DATASET_AUTH, false);
-            final Intent fillInIntent = createAuthFillInIntent(
-                    getFillContextByRequestIdLocked(requestId).getStructure(), mClientState);
-
+            final Intent fillInIntent = createAuthFillInIntentLocked(requestId, mClientState);
+            if (fillInIntent == null) {
+                forceRemoveSelfLocked();
+                return;
+            }
             final int authenticationId = AutofillManager.makeAuthenticationId(requestId,
                     datasetIndex);
             startAuthentication(authenticationId, dataset.getAuthentication(), fillInIntent);
+
         }
     }
 
@@ -1415,9 +1671,18 @@
         }
     }
 
-    private Intent createAuthFillInIntent(AssistStructure structure, Bundle extras) {
+    // TODO: this should never be null, but we got at least one occurrence, probably due to a race.
+    @Nullable
+    private Intent createAuthFillInIntentLocked(int requestId, Bundle extras) {
         final Intent fillInIntent = new Intent();
-        fillInIntent.putExtra(AutofillManager.EXTRA_ASSIST_STRUCTURE, structure);
+
+        final FillContext context = getFillContextByRequestIdLocked(requestId);
+        if (context == null) {
+            Slog.wtf(TAG, "createAuthFillInIntentLocked(): no FillContext. requestId=" + requestId
+                    + "; mContexts= " + mContexts);
+            return null;
+        }
+        fillInIntent.putExtra(AutofillManager.EXTRA_ASSIST_STRUCTURE, context.getStructure());
         fillInIntent.putExtra(AutofillManager.EXTRA_CLIENT_STATE, extras);
         return fillInIntent;
     }
@@ -1444,6 +1709,14 @@
         pw.print(prefix); pw.print("uid: "); pw.println(uid);
         pw.print(prefix); pw.print("mComponentName: "); pw.println(mComponentName);
         pw.print(prefix); pw.print("mActivityToken: "); pw.println(mActivityToken);
+        pw.print(prefix); pw.print("mStartTime: "); pw.println(mStartTime);
+        pw.print(prefix); pw.print("Time to show UI: ");
+        if (mUiShownTime == 0) {
+            pw.println("N/A");
+        } else {
+            TimeUtils.formatDuration(mUiShownTime - mStartTime, pw);
+            pw.println();
+        }
         pw.print(prefix); pw.print("mResponses: ");
         if (mResponses == null) {
             pw.println("null");
@@ -1458,6 +1731,7 @@
         pw.print(prefix); pw.print("mViewStates size: "); pw.println(mViewStates.size());
         pw.print(prefix); pw.print("mDestroyed: "); pw.println(mDestroyed);
         pw.print(prefix); pw.print("mIsSaving: "); pw.println(mIsSaving);
+        pw.print(prefix); pw.print("mPendingSaveUi: "); pw.println(mPendingSaveUi);
         for (Map.Entry<AutofillId, ViewState> entry : mViewStates.entrySet()) {
             pw.print(prefix); pw.print("State for id "); pw.println(entry.getKey());
             entry.getValue().dump(prefix2, pw);
@@ -1519,7 +1793,7 @@
                 }
                 if (!ids.isEmpty()) {
                     if (waitingDatasetAuth) {
-                        hideFillUiIfOwnedByMe();
+                        mUi.hideFillUi(this);
                     }
                     if (sDebug) Slog.d(TAG, "autoFillApp(): the buck is on the app: " + dataset);
 
@@ -1539,39 +1813,73 @@
         }
     }
 
+    /**
+     * Cleans up this session.
+     *
+     * <p>Typically called in 2 scenarios:
+     *
+     * <ul>
+     *   <li>When the session naturally finishes (i.e., from {@link #removeSelfLocked()}.
+     *   <li>When the service hosting the session is finished (for example, because the user
+     *       disabled it).
+     * </ul>
+     */
     RemoteFillService destroyLocked() {
         if (mDestroyed) {
             return null;
         }
-        hideAllUiIfOwnedByMe();
+        mUi.destroyAll(mPendingSaveUi, this, true);
         mUi.clearCallback(this);
         mDestroyed = true;
-        mMetricsLogger.action(MetricsEvent.AUTOFILL_SESSION_FINISHED,
-                mComponentName.getPackageName());
+        writeLog(MetricsEvent.AUTOFILL_SESSION_FINISHED);
         return mRemoteFillService;
     }
 
-    private void hideAllUiIfOwnedByMe() {
-        mUi.hideAll(this);
+    /**
+     * Cleans up this session and remove it from the service always, even if it does have a pending
+     * Save UI.
+     */
+    void forceRemoveSelfLocked() {
+        if (sVerbose) Slog.v(TAG, "forceRemoveSelfLocked(): " + mPendingSaveUi);
+
+        final boolean isPendingSaveUi = isSaveUiPendingLocked();
+        mPendingSaveUi = null;
+        removeSelfLocked();
+        mUi.destroyAll(mPendingSaveUi, this, false);
+        if (!isPendingSaveUi) {
+            try {
+                mClient.setSessionFinished(AutofillManager.STATE_UNKNOWN);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Error notifying client to finish session", e);
+            }
+        }
     }
 
-    private void hideFillUiIfOwnedByMe() {
-        mUi.hideFillUi(this);
-    }
-
+    /**
+     * Thread-safe version of {@link #removeSelfLocked()}.
+     */
     private void removeSelf() {
         synchronized (mLock) {
             removeSelfLocked();
         }
     }
 
+    /**
+     * Cleans up this session and remove it from the service, but but only if it does not have a
+     * pending Save UI.
+     */
     void removeSelfLocked() {
-        if (sVerbose) Slog.v(TAG, "removeSelfLocked()");
+        if (sVerbose) Slog.v(TAG, "removeSelfLocked(): " + mPendingSaveUi);
         if (mDestroyed) {
             Slog.w(TAG, "Call to Session#removeSelfLocked() rejected - session: "
                     + id + " destroyed");
             return;
         }
+        if (isSaveUiPendingLocked()) {
+            Slog.i(TAG, "removeSelfLocked() ignored, waiting for pending save ui");
+            return;
+        }
+
         final RemoteFillService remoteFillService = destroyLocked();
         mService.removeSessionLocked(id);
         if (remoteFillService != null) {
@@ -1579,19 +1887,53 @@
         }
     }
 
-    private int getLastResponseIndex() {
+    void onPendingSaveUi(int operation, @NonNull IBinder token) {
+        getUiForShowing().onPendingSaveUi(operation, token);
+    }
+
+    /**
+     * Checks whether this session is hiding the Save UI to handle a custom description link for
+     * a specific {@code token} created by
+     * {@link PendingUi#PendingUi(IBinder, int, IAutoFillManagerClient)}.
+     */
+    boolean isSaveUiPendingForTokenLocked(@NonNull IBinder token) {
+        return isSaveUiPendingLocked() && token.equals(mPendingSaveUi.getToken());
+    }
+
+    /**
+     * Checks whether this session is hiding the Save UI to handle a custom description link.
+     */
+    private boolean isSaveUiPendingLocked() {
+        return mPendingSaveUi != null && mPendingSaveUi.getState() == PendingUi.STATE_PENDING;
+    }
+
+    private int getLastResponseIndexLocked() {
         // The response ids are monotonically increasing so
         // we just find the largest id which is the last. We
         // do not rely on the internal ordering in sparse
         // array to avoid - wow this stopped working!?
         int lastResponseIdx = -1;
         int lastResponseId = -1;
-        final int responseCount = mResponses.size();
-        for (int i = 0; i < responseCount; i++) {
-            if (mResponses.keyAt(i) > lastResponseId) {
-                lastResponseIdx = i;
+        if (mResponses != null) {
+            final int responseCount = mResponses.size();
+            for (int i = 0; i < responseCount; i++) {
+                if (mResponses.keyAt(i) > lastResponseId) {
+                    lastResponseIdx = i;
+                }
             }
         }
         return lastResponseIdx;
     }
+
+    private LogMaker newLogMaker(int category) {
+        return newLogMaker(category, mService.getServicePackageName());
+    }
+
+    private LogMaker newLogMaker(int category, String servicePackageName) {
+        return Helper.newLogMaker(category, mComponentName.getPackageName(), servicePackageName);
+    }
+
+    private void writeLog(int category) {
+        mMetricsLogger.write(newLogMaker(category));
+    }
 }
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 4f90019..36b95fc 100644
--- a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
+++ b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
@@ -22,12 +22,16 @@
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.IntentSender;
+import android.graphics.drawable.Drawable;
 import android.metrics.LogMaker;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.IBinder;
+import android.os.RemoteException;
 import android.service.autofill.Dataset;
 import android.service.autofill.FillResponse;
 import android.service.autofill.SaveInfo;
+import android.service.autofill.ValueFinder;
 import android.text.TextUtils;
 import android.util.Slog;
 import android.view.autofill.AutofillId;
@@ -36,8 +40,9 @@
 import android.widget.Toast;
 
 import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.server.UiThread;
+import com.android.server.autofill.Helper;
 
 import java.io.PrintWriter;
 
@@ -142,7 +147,6 @@
             if (callback != mCallback) {
                 return;
             }
-            hideSaveUiUiThread(callback);
             if (mFillUi != null) {
                 mFillUi.setFilterText(filterText);
             }
@@ -155,20 +159,22 @@
      * @param focusedId the currently focused field
      * @param response the current fill response
      * @param filterText text of the view to be filled
+     * @param servicePackageName package name of the autofill service filling the activity
      * @param packageName package name of the activity that is filled
      * @param callback Identifier for the caller
      */
     public void showFillUi(@NonNull AutofillId focusedId, @NonNull FillResponse response,
-            @Nullable String filterText, @NonNull String packageName,
-            @NonNull AutoFillUiCallback callback) {
+            @Nullable String filterText, @Nullable String servicePackageName,
+            @NonNull String packageName, @NonNull AutoFillUiCallback callback) {
         if (sDebug) {
-            Slog.d(TAG, "showFillUi(): id=" + focusedId + ", filter=" + filterText);
+            final int size = filterText == null ? 0 : filterText.length();
+            Slog.d(TAG, "showFillUi(): id=" + focusedId + ", filter=" + size + " chars");
         }
-        final LogMaker log = (new LogMaker(MetricsProto.MetricsEvent.AUTOFILL_FILL_UI))
-                .setPackageName(packageName)
-                .addTaggedData(MetricsProto.MetricsEvent.FIELD_AUTOFILL_FILTERTEXT_LEN,
+        final LogMaker log =
+                Helper.newLogMaker(MetricsEvent.AUTOFILL_FILL_UI, packageName, servicePackageName)
+                .addTaggedData(MetricsEvent.FIELD_AUTOFILL_FILTERTEXT_LEN,
                         filterText == null ? 0 : filterText.length())
-                .addTaggedData(MetricsProto.MetricsEvent.FIELD_AUTOFILL_NUM_DATASETS,
+                .addTaggedData(MetricsEvent.FIELD_AUTOFILL_NUM_DATASETS,
                         response.getDatasets() == null ? 0 : response.getDatasets().size());
 
         mHandler.post(() -> {
@@ -180,7 +186,7 @@
                     filterText, mOverlayControl, new FillUi.Callback() {
                 @Override
                 public void onResponsePicked(FillResponse response) {
-                    log.setType(MetricsProto.MetricsEvent.TYPE_DETAIL);
+                    log.setType(MetricsEvent.TYPE_DETAIL);
                     hideFillUiUiThread(callback);
                     if (mCallback != null) {
                         mCallback.authenticate(response.getRequestId(),
@@ -191,7 +197,7 @@
 
                 @Override
                 public void onDatasetPicked(Dataset dataset) {
-                    log.setType(MetricsProto.MetricsEvent.TYPE_ACTION);
+                    log.setType(MetricsEvent.TYPE_ACTION);
                     hideFillUiUiThread(callback);
                     if (mCallback != null) {
                         final int datasetIndex = response.getDatasets().indexOf(dataset);
@@ -201,14 +207,14 @@
 
                 @Override
                 public void onCanceled() {
-                    log.setType(MetricsProto.MetricsEvent.TYPE_DISMISS);
+                    log.setType(MetricsEvent.TYPE_DISMISS);
                     hideFillUiUiThread(callback);
                 }
 
                 @Override
                 public void onDestroy() {
-                    if (log.getType() == MetricsProto.MetricsEvent.TYPE_UNKNOWN) {
-                        log.setType(MetricsProto.MetricsEvent.TYPE_CLOSE);
+                    if (log.getType() == MetricsEvent.TYPE_UNKNOWN) {
+                        log.setType(MetricsEvent.TYPE_CLOSE);
                     }
                     mMetricsLogger.write(log);
                 }
@@ -241,37 +247,41 @@
     /**
      * Shows the UI asking the user to save for autofill.
      */
-    public void showSaveUi(@NonNull CharSequence providerLabel, @NonNull SaveInfo info,
-            @NonNull String packageName, @NonNull AutoFillUiCallback callback) {
+    public void showSaveUi(@NonNull CharSequence serviceLabel, @NonNull Drawable serviceIcon,
+            @Nullable String servicePackageName, @NonNull SaveInfo info,
+            @NonNull ValueFinder valueFinder, @NonNull String packageName,
+            @NonNull AutoFillUiCallback callback, @NonNull PendingUi pendingSaveUi) {
         if (sVerbose) Slog.v(TAG, "showSaveUi() for " + packageName + ": " + info);
         int numIds = 0;
         numIds += info.getRequiredIds() == null ? 0 : info.getRequiredIds().length;
         numIds += info.getOptionalIds() == null ? 0 : info.getOptionalIds().length;
 
-        LogMaker log = (new LogMaker(MetricsProto.MetricsEvent.AUTOFILL_SAVE_UI))
-                .setPackageName(packageName).addTaggedData(
-                        MetricsProto.MetricsEvent.FIELD_AUTOFILL_NUM_IDS, numIds);
+        final LogMaker log =
+                Helper.newLogMaker(MetricsEvent.AUTOFILL_SAVE_UI, packageName, servicePackageName)
+                .addTaggedData(MetricsEvent.FIELD_AUTOFILL_NUM_IDS, numIds);
 
         mHandler.post(() -> {
             if (callback != mCallback) {
                 return;
             }
             hideAllUiThread(callback);
-            mSaveUi = new SaveUi(mContext, providerLabel, info,
-                    mOverlayControl, new SaveUi.OnSaveListener() {
+            mSaveUi = new SaveUi(mContext, pendingSaveUi, serviceLabel, serviceIcon,
+                    servicePackageName, packageName, info, valueFinder, mOverlayControl,
+                    new SaveUi.OnSaveListener() {
                 @Override
                 public void onSave() {
-                    log.setType(MetricsProto.MetricsEvent.TYPE_ACTION);
-                    hideSaveUiUiThread(callback);
+                    log.setType(MetricsEvent.TYPE_ACTION);
+                    hideSaveUiUiThread(mCallback);
                     if (mCallback != null) {
                         mCallback.save();
                     }
+                    destroySaveUiUiThread(pendingSaveUi, true);
                 }
 
                 @Override
                 public void onCancel(IntentSender listener) {
-                    log.setType(MetricsProto.MetricsEvent.TYPE_DISMISS);
-                    hideSaveUiUiThread(callback);
+                    log.setType(MetricsEvent.TYPE_DISMISS);
+                    hideSaveUiUiThread(mCallback);
                     if (listener != null) {
                         try {
                             listener.sendIntent(mContext, 0, null, null, null);
@@ -283,12 +293,13 @@
                     if (mCallback != null) {
                         mCallback.cancelSave();
                     }
+                    destroySaveUiUiThread(pendingSaveUi, true);
                 }
 
                 @Override
                 public void onDestroy() {
-                    if (log.getType() == MetricsProto.MetricsEvent.TYPE_UNKNOWN) {
-                        log.setType(MetricsProto.MetricsEvent.TYPE_CLOSE);
+                    if (log.getType() == MetricsEvent.TYPE_UNKNOWN) {
+                        log.setType(MetricsEvent.TYPE_CLOSE);
 
                         if (mCallback != null) {
                             mCallback.cancelSave();
@@ -301,12 +312,33 @@
     }
 
     /**
+     * Executes an operation in the pending save UI, if any.
+     */
+    public void onPendingSaveUi(int operation, @NonNull IBinder token) {
+        mHandler.post(() -> {
+            if (mSaveUi != null) {
+                mSaveUi.onPendingUi(operation, token);
+            } else {
+                Slog.w(TAG, "onPendingSaveUi(" + operation + "): no save ui");
+            }
+        });
+    }
+
+    /**
      * Hides all UI affordances.
      */
     public void hideAll(@Nullable AutoFillUiCallback callback) {
         mHandler.post(() -> hideAllUiThread(callback));
     }
 
+    /**
+     * Destroy all UI affordances.
+     */
+    public void destroyAll(@Nullable PendingUi pendingSaveUi,
+            @Nullable AutoFillUiCallback callback, boolean notifyClient) {
+        mHandler.post(() -> destroyAllUiThread(pendingSaveUi, callback, notifyClient));
+    }
+
     public void dump(PrintWriter pw) {
         pw.println("Autofill UI");
         final String prefix = "  ";
@@ -334,20 +366,58 @@
     }
 
     @android.annotation.UiThread
-    private void hideSaveUiUiThread(@Nullable AutoFillUiCallback callback) {
+    @Nullable
+    private PendingUi hideSaveUiUiThread(@Nullable AutoFillUiCallback callback) {
         if (sVerbose) {
             Slog.v(TAG, "hideSaveUiUiThread(): mSaveUi=" + mSaveUi + ", callback=" + callback
                     + ", mCallback=" + mCallback);
         }
         if (mSaveUi != null && (callback == null || callback == mCallback)) {
-            mSaveUi.destroy();
-            mSaveUi = null;
+            return mSaveUi.hide();
         }
+        return null;
+    }
+
+    @android.annotation.UiThread
+    private void destroySaveUiUiThread(@Nullable PendingUi pendingSaveUi, boolean notifyClient) {
+        if (mSaveUi == null) {
+            // Calling destroySaveUiUiThread() twice is normal - it usually happens when the
+            // first call is made after the SaveUI is hidden and the second when the session is
+            // finished.
+            if (sDebug) Slog.d(TAG, "destroySaveUiUiThread(): already destroyed");
+            return;
+        }
+
+        if (sDebug) Slog.d(TAG, "destroySaveUiUiThread(): " + pendingSaveUi);
+        mSaveUi.destroy();
+        mSaveUi = null;
+        if (pendingSaveUi != null && notifyClient) {
+            try {
+                if (sDebug) Slog.d(TAG, "destroySaveUiUiThread(): notifying client");
+                pendingSaveUi.client.setSaveUiState(pendingSaveUi.id, false);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Error notifying client to set save UI state to hidden: " + e);
+            }
+        }
+    }
+
+    @android.annotation.UiThread
+    private void destroyAllUiThread(@Nullable PendingUi pendingSaveUi,
+            @Nullable AutoFillUiCallback callback, boolean notifyClient) {
+        hideFillUiUiThread(callback);
+        destroySaveUiUiThread(pendingSaveUi, notifyClient);
     }
 
     @android.annotation.UiThread
     private void hideAllUiThread(@Nullable AutoFillUiCallback callback) {
         hideFillUiUiThread(callback);
-        hideSaveUiUiThread(callback);
+        final PendingUi pendingSaveUi = hideSaveUiUiThread(callback);
+        if (pendingSaveUi != null && pendingSaveUi.getState() == PendingUi.STATE_FINISHED) {
+            if (sDebug) {
+                Slog.d(TAG, "hideAllUiThread(): "
+                        + "destroying Save UI because pending restoration is finished");
+            }
+            destroySaveUiUiThread(pendingSaveUi, true);
+        }
     }
 }
diff --git a/services/autofill/java/com/android/server/autofill/ui/CustomScrollView.java b/services/autofill/java/com/android/server/autofill/ui/CustomScrollView.java
new file mode 100644
index 0000000..e68263a
--- /dev/null
+++ b/services/autofill/java/com/android/server/autofill/ui/CustomScrollView.java
@@ -0,0 +1,91 @@
+/*
+ * 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.autofill.ui;
+
+import static com.android.server.autofill.Helper.sDebug;
+
+import android.content.Context;
+import android.graphics.Point;
+import android.util.AttributeSet;
+import android.util.Slog;
+import android.util.TypedValue;
+import android.view.View;
+import android.widget.ScrollView;
+
+import com.android.internal.R;
+
+/**
+ * Custom scroll view that stretches to a maximum height.
+ */
+public class CustomScrollView extends ScrollView {
+
+    private static final String TAG = "CustomScrollView";
+
+    private int mWidth = -1;
+    private int mHeight = -1;
+
+    public CustomScrollView(Context context) {
+        super(context);
+    }
+
+    public CustomScrollView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+        if (getChildCount() == 0) {
+            // Should not happen
+            Slog.e(TAG, "no children");
+            return;
+        }
+
+        calculateDimensions();
+        setMeasuredDimension(mWidth, mHeight);
+    }
+
+    private void calculateDimensions() {
+        if (mWidth != -1) return;
+
+        final TypedValue typedValue = new TypedValue();
+        final Point point = new Point();
+        final Context context = getContext();
+        context.getDisplay().getSize(point);
+        context.getTheme().resolveAttribute(R.attr.autofillSaveCustomSubtitleMaxHeight,
+                typedValue, true);
+        final View child = getChildAt(0);
+        final int childHeight = child.getMeasuredHeight();
+        final int maxHeight = (int) typedValue.getFraction(point.y, point.y);
+
+        mWidth = point.x;
+        mHeight = Math.min(childHeight, maxHeight);
+        if (sDebug) {
+            Slog.d(TAG, "calculateDimensions(): maxHeight=" + maxHeight
+                    + ", childHeight=" + childHeight + ", w=" + mWidth + ", h=" + mHeight);
+        }
+    }
+}
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 51a239f..371e74d 100644
--- a/services/autofill/java/com/android/server/autofill/ui/FillUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/FillUi.java
@@ -204,7 +204,10 @@
                 return;
             }
             if (count <= 0) {
-                if (sDebug) Slog.d(TAG, "No dataset matches filter: " + mFilterText);
+                if (sDebug) {
+                    final int size = mFilterText == null ? 0 : mFilterText.length();
+                    Slog.d(TAG, "No dataset matches filter with " + size + " chars");
+                }
                 mCallback.requestHideFillUi();
             } else {
                 if (updateContentSize()) {
@@ -226,6 +229,13 @@
     public void setFilterText(@Nullable String filterText) {
         throwIfDestroyed();
         if (mAdapter == null) {
+            // ViewState doesn't not support filtering - typically when it's for an authenticated
+            // FillResponse.
+            if (TextUtils.isEmpty(filterText)) {
+                mCallback.requestShowFillUi(mContentWidth, mContentHeight, mWindowPresenter);
+            } else {
+                mCallback.requestHideFillUi();
+            }
             return;
         }
 
@@ -507,8 +517,9 @@
                         final ViewItem item = mAllItems.get(i);
                         final String value = item.getValue();
                         // No value, i.e. null, matches any filter
-                        if (value == null
-                                || value.toLowerCase().startsWith(constraintLowerCase)) {
+                        if ((value == null && item.mDataset.getAuthentication() == null)
+                                || (value != null
+                                        && value.toLowerCase().startsWith(constraintLowerCase))) {
                             filteredItems.add(item);
                         }
                     }
@@ -522,9 +533,11 @@
                     final boolean resultCountChanged;
                     final int oldItemCount = mFilteredItems.size();
                     mFilteredItems.clear();
-                    @SuppressWarnings("unchecked")
-                    final List<ViewItem> items = (List<ViewItem>) results.values;
-                    mFilteredItems.addAll(items);
+                    if (results.count > 0) {
+                        @SuppressWarnings("unchecked")
+                        final List<ViewItem> items = (List<ViewItem>) results.values;
+                        mFilteredItems.addAll(items);
+                    }
                     resultCountChanged = (oldItemCount != mFilteredItems.size());
                     if (resultCountChanged) {
                         announceSearchResultIfNeeded();
diff --git a/services/autofill/java/com/android/server/autofill/ui/OverlayControl.java b/services/autofill/java/com/android/server/autofill/ui/OverlayControl.java
index fe0611e..49f4b53 100644
--- a/services/autofill/java/com/android/server/autofill/ui/OverlayControl.java
+++ b/services/autofill/java/com/android/server/autofill/ui/OverlayControl.java
@@ -21,6 +21,7 @@
 import android.content.Context;
 import android.os.Binder;
 import android.os.IBinder;
+import android.os.UserHandle;
 
 /**
  * This class controls showing/hiding overlays. We don't
@@ -47,10 +48,10 @@
 
     private void setOverlayAllowed(boolean allowed) {
         if (mAppOpsManager != null) {
-            mAppOpsManager.setUserRestriction(
-                    AppOpsManager.OP_SYSTEM_ALERT_WINDOW, !allowed, mToken);
-            mAppOpsManager.setUserRestriction(
-                    AppOpsManager.OP_TOAST_WINDOW, !allowed, mToken);
+            mAppOpsManager.setUserRestrictionForUser(AppOpsManager.OP_SYSTEM_ALERT_WINDOW, !allowed,
+                    mToken, null, UserHandle.USER_ALL);
+            mAppOpsManager.setUserRestrictionForUser(AppOpsManager.OP_TOAST_WINDOW, !allowed,
+                    mToken, null, UserHandle.USER_ALL);
         }
     }
 }
diff --git a/services/autofill/java/com/android/server/autofill/ui/PendingUi.java b/services/autofill/java/com/android/server/autofill/ui/PendingUi.java
new file mode 100644
index 0000000..0851d3b
--- /dev/null
+++ b/services/autofill/java/com/android/server/autofill/ui/PendingUi.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 com.android.server.autofill.ui;
+
+import android.annotation.NonNull;
+import android.os.IBinder;
+import android.util.DebugUtils;
+import android.view.autofill.IAutoFillManagerClient;
+
+/**
+ * Helper class used to handle a pending Autofill affordance such as the Save UI.
+ *
+ * <p>This class is not thread safe.
+ */
+// NOTE: this class could be an interface implemented by Session, but that would make it harder
+// to move the Autofill UI logic to a different process.
+public final class PendingUi {
+
+    public static final int STATE_CREATED = 1;
+    public static final int STATE_PENDING = 2;
+    public static final int STATE_FINISHED = 4;
+
+    private final IBinder mToken;
+    private int mState;
+    public final int id;
+    public final IAutoFillManagerClient client;
+
+    /**
+     * Default constructor.
+     *
+     * @param token token used to identify this pending UI.
+     */
+    public PendingUi(@NonNull IBinder token, int id, @NonNull IAutoFillManagerClient client) {
+        mToken = token;
+        mState = STATE_CREATED;
+        this.id = id;
+        this.client = client;
+    }
+
+    /**
+     * Gets the token used to identify this pending UI.
+     */
+    @NonNull
+    public IBinder getToken() {
+        return mToken;
+    }
+
+    /**
+     * Sets the current lifecycle state.
+     */
+    public void setState(int state) {
+        mState = state;
+    }
+
+    /**
+     * Gets the current lifecycle state.
+     */
+    public int getState() {
+        return mState;
+    }
+
+    /**
+     * Determines whether the given token matches the token used to identify this pending UI.
+     */
+    public boolean matches(IBinder token) {
+        return mToken.equals(token);
+    }
+
+    @Override
+    public String toString() {
+        return "PendingUi: [token=" + mToken + ", id=" + id + ", state="
+                + DebugUtils.flagsToString(PendingUi.class, "STATE_", mState) + "]";
+    }
+}
diff --git a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
index c9e2a92..d48f23c 100644
--- a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
@@ -20,22 +20,40 @@
 import static com.android.server.autofill.Helper.sVerbose;
 
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.app.Dialog;
+import android.app.PendingIntent;
 import android.content.Context;
+import android.content.Intent;
 import android.content.IntentSender;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.metrics.LogMaker;
 import android.os.Handler;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.service.autofill.CustomDescription;
 import android.service.autofill.SaveInfo;
+import android.service.autofill.ValueFinder;
 import android.text.Html;
 import android.util.ArraySet;
 import android.util.Slog;
 import android.view.Gravity;
-import android.view.Window;
-import android.view.WindowManager;
-import android.widget.TextView;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.view.Window;
+import android.view.WindowManager;
+import android.view.autofill.AutofillManager;
+import android.widget.ImageView;
+import android.widget.RemoteViews;
+import android.widget.ScrollView;
+import android.widget.TextView;
 
 import com.android.internal.R;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.server.UiThread;
 
 import java.io.PrintWriter;
@@ -94,6 +112,7 @@
     }
 
     private final Handler mHandler = UiThread.getHandler();
+    private final MetricsLogger mMetricsLogger = new MetricsLogger();
 
     private final @NonNull Dialog mDialog;
 
@@ -103,18 +122,27 @@
 
     private final CharSequence mTitle;
     private final CharSequence mSubTitle;
+    private final PendingUi mPendingUi;
+    private final String mServicePackageName;
+    private final String mPackageName;
 
     private boolean mDestroyed;
 
-    SaveUi(@NonNull Context context, @NonNull CharSequence providerLabel, @NonNull SaveInfo info,
+    SaveUi(@NonNull Context context, @NonNull PendingUi pendingUi,
+           @NonNull CharSequence serviceLabel, @NonNull Drawable serviceIcon,
+           @Nullable String servicePackageName, @NonNull String packageName,
+           @NonNull SaveInfo info, @NonNull ValueFinder valueFinder,
            @NonNull OverlayControl overlayControl, @NonNull OnSaveListener listener) {
+        mPendingUi= pendingUi;
         mListener = new OneTimeListener(listener);
         mOverlayControl = overlayControl;
+        mServicePackageName = servicePackageName;
+        mPackageName = packageName;
 
         final LayoutInflater inflater = LayoutInflater.from(context);
         final View view = inflater.inflate(R.layout.autofill_save, null);
 
-        final TextView titleView = (TextView) view.findViewById(R.id.autofill_save_title);
+        final TextView titleView = view.findViewById(R.id.autofill_save_title);
 
         final ArraySet<String> types = new ArraySet<>(3);
         final int type = info.getType();
@@ -138,32 +166,95 @@
         switch (types.size()) {
             case 1:
                 mTitle = Html.fromHtml(context.getString(R.string.autofill_save_title_with_type,
-                        types.valueAt(0), providerLabel), 0);
+                        types.valueAt(0), serviceLabel), 0);
                 break;
             case 2:
                 mTitle = Html.fromHtml(context.getString(R.string.autofill_save_title_with_2types,
-                        types.valueAt(0), types.valueAt(1), providerLabel), 0);
+                        types.valueAt(0), types.valueAt(1), serviceLabel), 0);
                 break;
             case 3:
                 mTitle = Html.fromHtml(context.getString(R.string.autofill_save_title_with_3types,
-                        types.valueAt(0), types.valueAt(1), types.valueAt(2), providerLabel), 0);
+                        types.valueAt(0), types.valueAt(1), types.valueAt(2), serviceLabel), 0);
                 break;
             default:
                 // Use generic if more than 3 or invalid type (size 0).
                 mTitle = Html.fromHtml(
-                        context.getString(R.string.autofill_save_title, providerLabel), 0);
+                        context.getString(R.string.autofill_save_title, serviceLabel), 0);
         }
-
         titleView.setText(mTitle);
-        mSubTitle = info.getDescription();
-        if (mSubTitle != null) {
-            final TextView subTitleView = (TextView) view.findViewById(R.id.autofill_save_subtitle);
-            subTitleView.setText(mSubTitle);
-            subTitleView.setVisibility(View.VISIBLE);
-        }
 
-        if (sDebug) {
-            Slog.d(TAG, "on constructor: title=" + mTitle + ", subTitle=" + mSubTitle);
+        setServiceIcon(context, view, serviceIcon);
+
+        ScrollView subtitleContainer = null;
+        final CustomDescription customDescription = info.getCustomDescription();
+        if (customDescription != null) {
+            writeLog(MetricsEvent.AUTOFILL_SAVE_CUSTOM_DESCRIPTION, type);
+
+            mSubTitle = null;
+            if (sDebug) Slog.d(TAG, "Using custom description");
+
+            final RemoteViews presentation = customDescription.getPresentation(valueFinder);
+            if (presentation != null) {
+                final RemoteViews.OnClickHandler handler = new RemoteViews.OnClickHandler() {
+                    @Override
+                    public boolean onClickHandler(View view, PendingIntent pendingIntent,
+                            Intent intent) {
+                        final LogMaker log =
+                                newLogMaker(MetricsEvent.AUTOFILL_SAVE_LINK_TAPPED, type);
+                        // We need to hide the Save UI before launching the pending intent, and
+                        // restore back it once the activity is finished, and that's achieved by
+                        // adding a custom extra in the activity intent.
+                        final boolean isValid = isValidLink(pendingIntent, intent);
+                        if (!isValid) {
+                            log.setType(MetricsEvent.TYPE_UNKNOWN);
+                            mMetricsLogger.write(log);
+                            return false;
+                        }
+                        if (sVerbose) Slog.v(TAG, "Intercepting custom description intent");
+                        final IBinder token = mPendingUi.getToken();
+                        intent.putExtra(AutofillManager.EXTRA_RESTORE_SESSION_TOKEN, token);
+                        try {
+                            pendingUi.client.startIntentSender(pendingIntent.getIntentSender(),
+                                    intent);
+                            mPendingUi.setState(PendingUi.STATE_PENDING);
+                            if (sDebug) Slog.d(TAG, "hiding UI until restored with token " + token);
+                            hide();
+                            log.setType(MetricsEvent.TYPE_OPEN);
+                            mMetricsLogger.write(log);
+                            return true;
+                        } catch (RemoteException e) {
+                            Slog.w(TAG, "error triggering pending intent: " + intent);
+                            log.setType(MetricsEvent.TYPE_FAILURE);
+                            mMetricsLogger.write(log);
+                            return false;
+                        }
+                    }
+                };
+
+                try {
+                    final View customSubtitleView = presentation.apply(context, null, handler);
+                    subtitleContainer = view.findViewById(R.id.autofill_save_custom_subtitle);
+                    subtitleContainer.addView(customSubtitleView);
+                    subtitleContainer.setVisibility(View.VISIBLE);
+                } catch (Exception e) {
+                    Slog.e(TAG, "Could not inflate custom description. ", e);
+                }
+            } else {
+                Slog.w(TAG, "could not create remote presentation for custom title");
+            }
+        } else {
+            mSubTitle = info.getDescription();
+            if (mSubTitle != null) {
+                writeLog(MetricsEvent.AUTOFILL_SAVE_CUSTOM_SUBTITLE, type);
+                subtitleContainer = view.findViewById(R.id.autofill_save_custom_subtitle);
+                final TextView subtitleView = new TextView(context);
+                subtitleView.setText(mSubTitle);
+                subtitleContainer.addView(subtitleView,
+                        new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+                                ViewGroup.LayoutParams.WRAP_CONTENT));
+                subtitleContainer.setVisibility(View.VISIBLE);
+            }
+            if (sDebug) Slog.d(TAG, "on constructor: title=" + mTitle + ", subTitle=" + mSubTitle);
         }
 
         final TextView noButton = view.findViewById(R.id.autofill_save_no);
@@ -172,19 +263,18 @@
         } else {
             noButton.setText(R.string.autofill_save_no);
         }
-        View.OnClickListener cancelListener =
-                (v) -> mListener.onCancel(info.getNegativeActionListener());
-        noButton.setOnClickListener(cancelListener);
+        noButton.setOnClickListener((v) -> mListener.onCancel(info.getNegativeActionListener()));
 
         final View yesButton = view.findViewById(R.id.autofill_save_yes);
         yesButton.setOnClickListener((v) -> mListener.onSave());
 
-        final View closeButton = view.findViewById(R.id.autofill_save_close);
-        closeButton.setOnClickListener(cancelListener);
-
         mDialog = new Dialog(context, R.style.Theme_DeviceDefault_Light_Panel);
         mDialog.setContentView(view);
 
+        // Dialog can be dismissed when touched outside, but the negative listener should not be
+        // notified (hence the null argument).
+        mDialog.setOnDismissListener((d) -> mListener.onCancel(null));
+
         final Window window = mDialog.getWindow();
         window.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
         window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
@@ -198,10 +288,116 @@
         final WindowManager.LayoutParams params = window.getAttributes();
         params.width = WindowManager.LayoutParams.MATCH_PARENT;
         params.accessibilityTitle = context.getString(R.string.autofill_save_accessibility_title);
+        params.windowAnimations = R.style.AutofillSaveAnimation;
 
+        show();
+    }
+
+    private void setServiceIcon(Context context, View view, Drawable serviceIcon) {
+        final ImageView iconView = view.findViewById(R.id.autofill_save_icon);
+        final Resources res = context.getResources();
+
+        final int maxWidth = res.getDimensionPixelSize(R.dimen.autofill_save_icon_max_size);
+        final int maxHeight = maxWidth;
+        final int actualWidth = serviceIcon.getMinimumWidth();
+        final int actualHeight = serviceIcon.getMinimumHeight();
+
+        if (actualWidth <= maxWidth && actualHeight <= maxHeight) {
+            if (sDebug) {
+                Slog.d(TAG, "Adding service icon "
+                        + "(" + actualWidth + "x" + actualHeight + ") as it's less than maximum "
+                        + "(" + maxWidth + "x" + maxHeight + ").");
+            }
+            iconView.setImageDrawable(serviceIcon);
+        } else {
+            Slog.w(TAG, "Not adding service icon of size "
+                    + "(" + actualWidth + "x" + actualHeight + ") because maximum is "
+                    + "(" + maxWidth + "x" + maxHeight + ").");
+            ((ViewGroup)iconView.getParent()).removeView(iconView);
+        }
+    }
+
+    private static boolean isValidLink(PendingIntent pendingIntent, Intent intent) {
+        if (pendingIntent == null) {
+            Slog.w(TAG, "isValidLink(): custom description without pending intent");
+            return false;
+        }
+        if (!pendingIntent.isActivity()) {
+            Slog.w(TAG, "isValidLink(): pending intent not for activity");
+            return false;
+        }
+        if (intent == null) {
+            Slog.w(TAG, "isValidLink(): no intent");
+            return false;
+        }
+        return true;
+    }
+
+    private LogMaker newLogMaker(int category, int saveType) {
+        return newLogMaker(category)
+                .addTaggedData(MetricsEvent.FIELD_AUTOFILL_SAVE_TYPE, saveType);
+    }
+
+    private LogMaker newLogMaker(int category) {
+        return new LogMaker(category)
+                .setPackageName(mPackageName)
+                .addTaggedData(MetricsEvent.FIELD_AUTOFILL_SERVICE, mServicePackageName);
+    }
+
+    private void writeLog(int category, int saveType) {
+        mMetricsLogger.write(newLogMaker(category, saveType));
+    }
+
+    /**
+     * Update the pending UI, if any.
+     *
+     * @param operation how to update it.
+     * @param token token associated with the pending UI - if it doesn't match the pending token,
+     * the operation will be ignored.
+     */
+    void onPendingUi(int operation, @NonNull IBinder token) {
+        if (!mPendingUi.matches(token)) {
+            Slog.w(TAG, "restore(" + operation + "): got token " + token + " instead of "
+                    + mPendingUi.getToken());
+            return;
+        }
+        final LogMaker log = newLogMaker(MetricsEvent.AUTOFILL_PENDING_SAVE_UI_OPERATION);
+        try {
+            switch (operation) {
+                case AutofillManager.PENDING_UI_OPERATION_RESTORE:
+                    if (sDebug) Slog.d(TAG, "Restoring save dialog for " + token);
+                    log.setType(MetricsEvent.TYPE_OPEN);
+                    show();
+                    break;
+                case AutofillManager.PENDING_UI_OPERATION_CANCEL:
+                    log.setType(MetricsEvent.TYPE_DISMISS);
+                    if (sDebug) Slog.d(TAG, "Cancelling pending save dialog for " + token);
+                    hide();
+                    break;
+                default:
+                    log.setType(MetricsEvent.TYPE_FAILURE);
+                    Slog.w(TAG, "restore(): invalid operation " + operation);
+            }
+        } finally {
+            mMetricsLogger.write(log);
+        }
+        mPendingUi.setState(PendingUi.STATE_FINISHED);
+    }
+
+    private void show() {
         Slog.i(TAG, "Showing save dialog: " + mTitle);
         mDialog.show();
         mOverlayControl.hideOverlays();
+   }
+
+    PendingUi hide() {
+        if (sVerbose) Slog.v(TAG, "Hiding save dialog.");
+        try {
+            mDialog.hide();
+        } finally {
+            mOverlayControl.showOverlays();
+        }
+        return mPendingUi;
     }
 
     void destroy() {
@@ -210,7 +406,6 @@
             throwIfDestroyed();
             mListener.onDestroy();
             mHandler.removeCallbacksAndMessages(mListener);
-            if (sVerbose) Slog.v(TAG, "destroy(): dismissing dialog");
             mDialog.dismiss();
             mDestroyed = true;
         } finally {
@@ -232,6 +427,9 @@
     void dump(PrintWriter pw, String prefix) {
         pw.print(prefix); pw.print("title: "); pw.println(mTitle);
         pw.print(prefix); pw.print("subtitle: "); pw.println(mSubTitle);
+        pw.print(prefix); pw.print("pendingUi: "); pw.println(mPendingUi);
+        pw.print(prefix); pw.print("service: "); pw.println(mServicePackageName);
+        pw.print(prefix); pw.print("app: "); pw.println(mPackageName);
 
         final View view = mDialog.getWindow().getDecorView();
         final int[] loc = view.getLocationOnScreen();
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index 1bb147c..0dd5181 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -98,6 +98,7 @@
 import android.os.SELinux;
 import android.os.ServiceManager;
 import android.os.SystemClock;
+import android.os.Trace;
 import android.os.UserHandle;
 import android.os.WorkSource;
 import android.os.storage.IStorageManager;
@@ -106,6 +107,7 @@
 import android.system.ErrnoException;
 import android.system.Os;
 import android.text.TextUtils;
+import android.util.ArraySet;
 import android.util.AtomicFile;
 import android.util.EventLog;
 import android.util.Log;
@@ -117,6 +119,7 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.backup.IBackupTransport;
 import com.android.internal.backup.IObbBackupService;
+import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.DumpUtils;
 import com.android.server.AppWidgetBackupBridge;
 import com.android.server.EventLogTags;
@@ -259,7 +262,6 @@
     private static final int MSG_RUN_ADB_BACKUP = 2;
     private static final int MSG_RUN_RESTORE = 3;
     private static final int MSG_RUN_CLEAR = 4;
-    private static final int MSG_RUN_INITIALIZE = 5;
     private static final int MSG_RUN_GET_RESTORE_SETS = 6;
     private static final int MSG_RESTORE_SESSION_TIMEOUT = 8;
     private static final int MSG_FULL_CONFIRMATION_TIMEOUT = 9;
@@ -397,9 +399,12 @@
         @Override
         public void onUnlockUser(int userId) {
             if (userId == UserHandle.USER_SYSTEM) {
+                Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "backup init");
                 sInstance.initialize(userId);
+                Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
 
                 // Migrate legacy setting
+                Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "backup migrate");
                 if (!backupSettingMigrated(userId)) {
                     if (DEBUG) {
                         Slog.i(TAG, "Backup enable apparently not migrated");
@@ -420,12 +425,15 @@
                         }
                     }
                 }
+                Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
 
+                Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "backup enable");
                 try {
                     sInstance.setBackupEnabled(readBackupEnableState(userId));
                 } catch (RemoteException e) {
                     // can't happen; it's a local object
                 }
+                Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
     }
@@ -734,7 +742,7 @@
 
     // Persistently track the need to do a full init
     static final String INIT_SENTINEL_FILE_NAME = "_need_init_";
-    HashSet<String> mPendingInits = new HashSet<String>();  // transport names
+    ArraySet<String> mPendingInits = new ArraySet<String>();  // transport names
 
     // Round-robin queue for scheduling full backup passes
     static final int SCHEDULE_FILE_VERSION = 1; // current version of the schedule file
@@ -1045,20 +1053,6 @@
                 break;
             }
 
-            case MSG_RUN_INITIALIZE:
-            {
-                HashSet<String> queue;
-
-                // Snapshot the pending-init queue and work on that
-                synchronized (mQueueLock) {
-                    queue = new HashSet<String>(mPendingInits);
-                    mPendingInits.clear();
-                }
-
-                (new PerformInitializeTask(queue)).run();
-                break;
-            }
-
             case MSG_RETRY_INIT:
             {
                 synchronized (mQueueLock) {
@@ -1321,8 +1315,8 @@
         mRunBackupIntent = PendingIntent.getBroadcast(context, MSG_RUN_BACKUP, backupIntent, 0);
 
         Intent initIntent = new Intent(RUN_INITIALIZE_ACTION);
-        backupIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
-        mRunInitIntent = PendingIntent.getBroadcast(context, MSG_RUN_INITIALIZE, initIntent, 0);
+        initIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+        mRunInitIntent = PendingIntent.getBroadcast(context, 0, initIntent, 0);
 
         // Set up the backup-request journaling
         mJournalDir = new File(mBaseStateDir, "pending");
@@ -1409,15 +1403,15 @@
     private class RunInitializeReceiver extends BroadcastReceiver {
         public void onReceive(Context context, Intent intent) {
             if (RUN_INITIALIZE_ACTION.equals(intent.getAction())) {
+                // Snapshot the pending-init queue and work on that
                 synchronized (mQueueLock) {
-                    if (DEBUG) Slog.v(TAG, "Running a device init");
+                    String[] queue = mPendingInits.toArray(new String[mPendingInits.size()]);
+                    mPendingInits.clear();
 
                     // Acquire the wakelock and pass it to the init thread.  it will
                     // be released once init concludes.
                     mWakelock.acquire();
-
-                    Message msg = mBackupHandler.obtainMessage(MSG_RUN_INITIALIZE);
-                    mBackupHandler.sendMessage(msg);
+                    mBackupHandler.post(new PerformInitializeTask(queue, null));
                 }
             }
         }
@@ -1455,52 +1449,23 @@
         // rebooted in the middle of an operation that was removing something from
         // this log, we sanity-check its contents here and reconstruct it.
         mEverStored = new File(mBaseStateDir, "processed");
-        File tempProcessedFile = new File(mBaseStateDir, "processed.new");
-
-        // If we were in the middle of removing something from the ever-backed-up
-        // file, there might be a transient "processed.new" file still present.
-        // Ignore it -- we'll validate "processed" against the current package set.
-        if (tempProcessedFile.exists()) {
-            tempProcessedFile.delete();
-        }
 
         // If there are previous contents, parse them out then start a new
         // file to continue the recordkeeping.
         if (mEverStored.exists()) {
-            DataOutputStream temp = null;
-            DataInputStream in = null;
-
-            try {
-                temp = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(
-                        tempProcessedFile)));
-                in = new DataInputStream(new BufferedInputStream(new FileInputStream(mEverStored)));
+            try (DataInputStream in = new DataInputStream(
+                    new BufferedInputStream(new FileInputStream(mEverStored)))) {
 
                 // Loop until we hit EOF
                 while (true) {
                     String pkg = in.readUTF();
-                    try {
-                        // is this package still present?
-                        mPackageManager.getPackageInfo(pkg, 0);
-                        // if we get here then yes it is; remember it
-                        mEverStoredApps.add(pkg);
-                        temp.writeUTF(pkg);
-                        if (MORE_DEBUG) Slog.v(TAG, "   + " + pkg);
-                    } catch (NameNotFoundException e) {
-                        // nope, this package was uninstalled; don't include it
-                        if (MORE_DEBUG) Slog.v(TAG, "   - " + pkg);
-                    }
+                    mEverStoredApps.add(pkg);
+                    if (MORE_DEBUG) Slog.v(TAG, "   + " + pkg);
                 }
             } catch (EOFException e) {
-                // Once we've rewritten the backup history log, atomically replace the
-                // old one with the new one then reopen the file for continuing use.
-                if (!tempProcessedFile.renameTo(mEverStored)) {
-                    Slog.e(TAG, "Error renaming " + tempProcessedFile + " to " + mEverStored);
-                }
+                // Done
             } catch (IOException e) {
                 Slog.e(TAG, "Error in processed file", e);
-            } finally {
-                try { if (temp != null) temp.close(); } catch (IOException e) {}
-                try { if (in != null) in.close(); } catch (IOException e) {}
             }
         }
 
@@ -2018,7 +1983,7 @@
                 if (uri == null) {
                     return;
                 }
-                String pkgName = uri.getSchemeSpecificPart();
+                final String pkgName = uri.getSchemeSpecificPart();
                 if (pkgName != null) {
                     pkgList = new String[] { pkgName };
                 }
@@ -2026,7 +1991,7 @@
 
                 // At package-changed we only care about looking at new transport states
                 if (changed) {
-                    String[] components =
+                    final String[] components =
                             intent.getStringArrayExtra(Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST);
 
                     if (MORE_DEBUG) {
@@ -2036,7 +2001,8 @@
                         }
                     }
 
-                    mTransportManager.onPackageChanged(pkgName, components);
+                    mBackupHandler.post(
+                            () -> mTransportManager.onPackageChanged(pkgName, components));
                     return; // nothing more to do in the PACKAGE_CHANGED case
                 }
 
@@ -2068,7 +2034,7 @@
                 }
                 // If they're full-backup candidates, add them there instead
                 final long now = System.currentTimeMillis();
-                for (String packageName : pkgList) {
+                for (final String packageName : pkgList) {
                     try {
                         PackageInfo app = mPackageManager.getPackageInfo(packageName, 0);
                         if (appGetsFullBackup(app)
@@ -2085,7 +2051,8 @@
                             writeFullBackupScheduleAsync();
                         }
 
-                        mTransportManager.onPackageAdded(packageName);
+                        mBackupHandler.post(
+                                () -> mTransportManager.onPackageAdded(packageName));
 
                     } catch (NameNotFoundException e) {
                         // doesn't really exist; ignore it
@@ -2109,8 +2076,9 @@
                         removePackageParticipantsLocked(pkgList, uid);
                     }
                 }
-                for (String pkgName : pkgList) {
-                    mTransportManager.onPackageRemoved(pkgName);
+                for (final String pkgName : pkgList) {
+                    mBackupHandler.post(
+                            () -> mTransportManager.onPackageRemoved(pkgName));
                 }
             }
         }
@@ -2247,44 +2215,6 @@
         }
     }
 
-    // Remove our awareness of having ever backed up the given package
-    void removeEverBackedUp(String packageName) {
-        if (DEBUG) Slog.v(TAG, "Removing backed-up knowledge of " + packageName);
-        if (MORE_DEBUG) Slog.v(TAG, "New set:");
-
-        synchronized (mEverStoredApps) {
-            // Rewrite the file and rename to overwrite.  If we reboot in the middle,
-            // we'll recognize on initialization time that the package no longer
-            // exists and fix it up then.
-            File tempKnownFile = new File(mBaseStateDir, "processed.new");
-            RandomAccessFile known = null;
-            try {
-                known = new RandomAccessFile(tempKnownFile, "rws");
-                mEverStoredApps.remove(packageName);
-                for (String s : mEverStoredApps) {
-                    known.writeUTF(s);
-                    if (MORE_DEBUG) Slog.v(TAG, "    " + s);
-                }
-                known.close();
-                known = null;
-                if (!tempKnownFile.renameTo(mEverStored)) {
-                    throw new IOException("Can't rename " + tempKnownFile + " to " + mEverStored);
-                }
-            } catch (IOException e) {
-                // Bad: we couldn't create the new copy.  For safety's sake we
-                // abandon the whole process and remove all what's-backed-up
-                // state entirely, meaning we'll force a backup pass for every
-                // participant on the next boot or [re]install.
-                Slog.w(TAG, "Error rewriting " + mEverStored, e);
-                mEverStoredApps.clear();
-                tempKnownFile.delete();
-                mEverStored.delete();
-            } finally {
-                try { if (known != null) known.close(); } catch (IOException e) {}
-            }
-        }
-    }
-
     // Persistently record the current and ancestral backup tokens as well
     // as the set of packages with data [supposedly] available in the
     // ancestral dataset.
@@ -2458,6 +2388,17 @@
             throw new IllegalArgumentException("No packages are provided for backup");
         }
 
+        if (!mEnabled || !mProvisioned) {
+            Slog.i(TAG, "Backup requested but e=" + mEnabled + " p=" +mProvisioned);
+            sendBackupFinished(observer, BackupManager.ERROR_BACKUP_NOT_ALLOWED);
+            final int logTag = mProvisioned
+                    ? BackupManagerMonitor.LOG_EVENT_ID_BACKUP_DISABLED
+                    : BackupManagerMonitor.LOG_EVENT_ID_DEVICE_NOT_PROVISIONED;
+            monitor = monitorEvent(monitor, logTag, null,
+                    BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY, null);
+            return BackupManager.ERROR_BACKUP_NOT_ALLOWED;
+        }
+
         IBackupTransport transport = mTransportManager.getCurrentTransportBinder();
         if (transport == null) {
             sendBackupFinished(observer, BackupManager.ERROR_TRANSPORT_ABORTED);
@@ -4597,7 +4538,7 @@
                     }
                     mOutputFile.close();
                 } catch (IOException e) {
-                    /* nothing we can do about this */
+                    Slog.e(TAG, "IO error closing adb backup file: " + e.getMessage());
                 }
                 synchronized (mLatch) {
                     mLatch.set(true);
@@ -4845,7 +4786,7 @@
                                 + " provisioned=" + mProvisioned + "; ignoring");
                     }
                     int monitoringEvent;
-                    if (!mEnabled) {
+                    if (mProvisioned) {
                         monitoringEvent = BackupManagerMonitor.LOG_EVENT_ID_BACKUP_DISABLED;
                     } else {
                         monitoringEvent = BackupManagerMonitor.LOG_EVENT_ID_DEVICE_NOT_PROVISIONED;
@@ -7575,7 +7516,9 @@
                                 // All set; now set up the IPC and launch the agent
                                 setUpPipes();
                                 mAgent = bindToAgentSynchronous(mTargetApp,
-                                        ApplicationThreadConstants.BACKUP_MODE_RESTORE_FULL);
+                                        FullBackup.KEY_VALUE_DATA_TOKEN.equals(info.domain)
+                                                ? ApplicationThreadConstants.BACKUP_MODE_INCREMENTAL
+                                                : ApplicationThreadConstants.BACKUP_MODE_RESTORE_FULL);
                                 mAgentPackage = pkg;
                             } catch (IOException e) {
                                 // fall through to error handling
@@ -8477,7 +8420,19 @@
 
     // ----- Restore handling -----
 
-    // Old style: directly match the stored vs on device signature blocks
+    /**
+     * Returns whether the signatures stored {@param storedSigs}, coming from the source apk, match
+     * the signatures of the apk installed on the device, the target apk. If the target resides in
+     * the system partition we return true. Otherwise it's considered a match if both conditions
+     * hold:
+     *
+     * <ul>
+     *   <li>Source and target have at least one signature each
+     *   <li>Target contains all signatures in source
+     * </ul>
+     *
+     * Note that if {@param target} is null we return false.
+     */
     static boolean signaturesMatch(Signature[] storedSigs, PackageInfo target) {
         if (target == null) {
             return false;
@@ -8489,26 +8444,24 @@
         // partition will be signed with the device's platform certificate, so on
         // different phones the same system app will have different signatures.)
         if ((target.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
-            if (MORE_DEBUG) Slog.v(TAG, "System app " + target.packageName + " - skipping sig check");
+            if (MORE_DEBUG) {
+                Slog.v(TAG, "System app " + target.packageName + " - skipping sig check");
+            }
             return true;
         }
 
-        // Allow unsigned apps, but not signed on one device and unsigned on the other
-        // !!! TODO: is this the right policy?
         Signature[] deviceSigs = target.signatures;
-        if (MORE_DEBUG) Slog.v(TAG, "signaturesMatch(): stored=" + storedSigs
-                + " device=" + deviceSigs);
-        if ((storedSigs == null || storedSigs.length == 0)
-                && (deviceSigs == null || deviceSigs.length == 0)) {
-            return true;
+        if (MORE_DEBUG) {
+            Slog.v(TAG, "signaturesMatch(): stored=" + storedSigs + " device=" + deviceSigs);
         }
-        if (storedSigs == null || deviceSigs == null) {
+
+        // Don't allow unsigned apps on either end
+        if (ArrayUtils.isEmpty(storedSigs) || ArrayUtils.isEmpty(deviceSigs)) {
             return false;
         }
 
-        // !!! TODO: this demands that every stored signature match one
-        // that is present on device, and does not demand the converse.
-        // Is this this right policy?
+        // Signatures can be added over time, so the target-device apk needs to contain all the
+        // source-device apk signatures, but not necessarily the other way around.
         int nStored = storedSigs.length;
         int nDevice = deviceSigs.length;
 
@@ -9779,13 +9732,37 @@
     }
 
     class PerformInitializeTask implements Runnable {
-        HashSet<String> mQueue;
+        String[] mQueue;
+        IBackupObserver mObserver;
 
-        PerformInitializeTask(HashSet<String> transportNames) {
+        PerformInitializeTask(String[] transportNames, IBackupObserver observer) {
             mQueue = transportNames;
+            mObserver = observer;
+        }
+
+        private void notifyResult(String target, int status) {
+            try {
+                if (mObserver != null) {
+                    mObserver.onResult(target, status);
+                }
+            } catch (RemoteException ignored) {
+                mObserver = null;       // don't try again
+            }
+        }
+
+        private void notifyFinished(int status) {
+            try {
+                if (mObserver != null) {
+                    mObserver.backupFinished(status);
+                }
+            } catch (RemoteException ignored) {
+                mObserver = null;
+            }
         }
 
         public void run() {
+            // mWakelock is *acquired* when execution begins here
+            int result = BackupTransport.TRANSPORT_OK;
             try {
                 for (String transportName : mQueue) {
                     IBackupTransport transport =
@@ -9814,6 +9791,7 @@
                         synchronized (mQueueLock) {
                             recordInitPendingLocked(false, transportName);
                         }
+                        notifyResult(transportName, BackupTransport.TRANSPORT_OK);
                     } else {
                         // If this didn't work, requeue this one and try again
                         // after a suitable interval
@@ -9822,6 +9800,9 @@
                         synchronized (mQueueLock) {
                             recordInitPendingLocked(true, transportName);
                         }
+                        notifyResult(transportName, status);
+                        result = status;
+
                         // do this via another alarm to make sure of the wakelock states
                         long delay = transport.requestBackupTime();
                         Slog.w(TAG, "Init failed on " + transportName + " resched in " + delay);
@@ -9831,8 +9812,10 @@
                 }
             } catch (Exception e) {
                 Slog.e(TAG, "Unexpected error performing init", e);
+                result = BackupTransport.TRANSPORT_ERROR;
             } finally {
                 // Done; release the wakelock
+                notifyFinished(result);
                 mWakelock.release();
             }
         }
@@ -9950,6 +9933,23 @@
             });
     }
 
+    // Run an initialize operation for the given transport
+    @Override
+    public void initializeTransports(String[] transportNames, IBackupObserver observer) {
+        mContext.enforceCallingPermission(android.Manifest.permission.BACKUP, "initializeTransport");
+        if (MORE_DEBUG) {
+            Slog.v(TAG, "initializeTransports() of " + transportNames);
+        }
+
+        final long oldId = Binder.clearCallingIdentity();
+        try {
+            mWakelock.acquire();
+            mBackupHandler.post(new PerformInitializeTask(transportNames, observer));
+        } finally {
+            Binder.restoreCallingIdentity(oldId);
+        }
+    }
+
     // Clear the given package's backup data from the current transport
     @Override
     public void clearBackupData(String transportName, String packageName) {
@@ -10115,7 +10115,7 @@
             try {
                 fd.close();
             } catch (IOException e) {
-                // just eat it
+                Slog.e(TAG, "IO error closing output for adb backup: " + e.getMessage());
             }
             Binder.restoreCallingIdentity(oldId);
             Slog.d(TAG, "Adb backup processing complete.");
diff --git a/services/backup/java/com/android/server/backup/BackupManagerServiceInterface.java b/services/backup/java/com/android/server/backup/BackupManagerServiceInterface.java
index e415494..5dfa630 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerServiceInterface.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerServiceInterface.java
@@ -77,6 +77,9 @@
 
   void dataChanged(String packageName);
 
+  // Initialize the given transport
+  void initializeTransports(String[] transportName, IBackupObserver observer);
+
   // Clear the given package's backup data from the current transport
   void clearBackupData(String transportName, String packageName);
 
diff --git a/services/backup/java/com/android/server/backup/BackupPasswordManager.java b/services/backup/java/com/android/server/backup/BackupPasswordManager.java
new file mode 100644
index 0000000..ee7651b
--- /dev/null
+++ b/services/backup/java/com/android/server/backup/BackupPasswordManager.java
@@ -0,0 +1,307 @@
+/*
+ * 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.backup;
+
+import android.content.Context;
+import android.util.Slog;
+
+import com.android.server.backup.utils.DataStreamFileCodec;
+import com.android.server.backup.utils.DataStreamCodec;
+import com.android.server.backup.utils.PasswordUtils;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.security.SecureRandom;
+
+/**
+ * Manages persisting and verifying backup passwords.
+ *
+ * <p>Does not persist the password itself, but persists a PBKDF2 hash with a randomly chosen (also
+ * persisted) salt. Validation is performed by running the challenge text through the same
+ * PBKDF2 cycle with the persisted salt, and checking the hashes match.
+ *
+ * @see PasswordUtils for the hashing algorithm.
+ */
+public final class BackupPasswordManager {
+    private static final String TAG = "BackupPasswordManager";
+    private static final boolean DEBUG = false;
+
+    private static final int BACKUP_PW_FILE_VERSION = 2;
+    private static final int DEFAULT_PW_FILE_VERSION = 1;
+
+    private static final String PASSWORD_VERSION_FILE_NAME = "pwversion";
+    private static final String PASSWORD_HASH_FILE_NAME = "pwhash";
+
+    // See https://android-developers.googleblog.com/2013/12/changes-to-secretkeyfactory-api-in.html
+    public static final String PBKDF_CURRENT = "PBKDF2WithHmacSHA1";
+    public static final String PBKDF_FALLBACK = "PBKDF2WithHmacSHA1And8bit";
+
+    private final SecureRandom mRng;
+    private final Context mContext;
+    private final File mBaseStateDir;
+
+    private String mPasswordHash;
+    private int mPasswordVersion;
+    private byte[] mPasswordSalt;
+
+    /**
+     * Creates an instance enforcing permissions using the {@code context} and persisting password
+     * data within the {@code baseStateDir}.
+     *
+     * @param context The context, for enforcing permissions around setting the password.
+     * @param baseStateDir A directory within which to persist password data.
+     * @param secureRandom Random number generator with which to generate password salts.
+     */
+    BackupPasswordManager(Context context, File baseStateDir, SecureRandom secureRandom) {
+        mContext = context;
+        mRng = secureRandom;
+        mBaseStateDir = baseStateDir;
+        loadStateFromFilesystem();
+    }
+
+    /**
+     * Returns {@code true} if a password for backup is set.
+     *
+     * @throws SecurityException If caller does not have {@link android.Manifest.permission#BACKUP}
+     *   permission.
+     */
+    boolean hasBackupPassword() {
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP,
+                "hasBackupPassword");
+        return mPasswordHash != null && mPasswordHash.length() > 0;
+    }
+
+    /**
+     * Returns {@code true} if {@code password} matches the persisted password.
+     *
+     * @throws SecurityException If caller does not have {@link android.Manifest.permission#BACKUP}
+     *   permission.
+     */
+    boolean backupPasswordMatches(String password) {
+        if (hasBackupPassword() && !passwordMatchesSaved(password)) {
+            if (DEBUG) Slog.w(TAG, "Backup password mismatch; aborting");
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Sets the new password, given a correct current password.
+     *
+     * @throws SecurityException If caller does not have {@link android.Manifest.permission#BACKUP}
+     *   permission.
+     * @return {@code true} if has permission to set the password, {@code currentPassword}
+     *   matches the currently persisted password, and is able to persist {@code newPassword}.
+     */
+    boolean setBackupPassword(String currentPassword, String newPassword) {
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP,
+                "setBackupPassword");
+
+        if (!passwordMatchesSaved(currentPassword)) {
+            return false;
+        }
+
+        // Snap up to latest password file version.
+        try {
+            getPasswordVersionFileCodec().serialize(BACKUP_PW_FILE_VERSION);
+            mPasswordVersion = BACKUP_PW_FILE_VERSION;
+        } catch (IOException e) {
+            Slog.e(TAG, "Unable to write backup pw version; password not changed");
+            return false;
+        }
+
+        if (newPassword == null || newPassword.isEmpty()) {
+            return clearPassword();
+        }
+
+        try {
+            byte[] salt = randomSalt();
+            String newPwHash = PasswordUtils.buildPasswordHash(
+                    PBKDF_CURRENT, newPassword, salt, PasswordUtils.PBKDF2_HASH_ROUNDS);
+
+            getPasswordHashFileCodec().serialize(new BackupPasswordHash(newPwHash, salt));
+            mPasswordHash = newPwHash;
+            mPasswordSalt = salt;
+            return true;
+        } catch (IOException e) {
+            Slog.e(TAG, "Unable to set backup password");
+        }
+        return false;
+    }
+
+    /**
+     * Returns {@code true} if should try salting using the older PBKDF algorithm.
+     *
+     * <p>This is {@code true} for v1 files.
+     */
+    private boolean usePbkdf2Fallback() {
+        return mPasswordVersion < BACKUP_PW_FILE_VERSION;
+    }
+
+    /**
+     * Deletes the current backup password.
+     *
+     * @return {@code true} if successful.
+     */
+    private boolean clearPassword() {
+        File passwordHashFile = getPasswordHashFile();
+        if (passwordHashFile.exists() && !passwordHashFile.delete()) {
+            Slog.e(TAG, "Unable to clear backup password");
+            return false;
+        }
+
+        mPasswordHash = null;
+        mPasswordSalt = null;
+        return true;
+    }
+
+    /**
+     * Sets the password hash, salt, and version in the object from what has been persisted to the
+     * filesystem.
+     */
+    private void loadStateFromFilesystem() {
+        try {
+            mPasswordVersion = getPasswordVersionFileCodec().deserialize();
+        } catch (IOException e) {
+            Slog.e(TAG, "Unable to read backup pw version");
+            mPasswordVersion = DEFAULT_PW_FILE_VERSION;
+        }
+
+        try {
+            BackupPasswordHash hash = getPasswordHashFileCodec().deserialize();
+            mPasswordHash = hash.hash;
+            mPasswordSalt = hash.salt;
+        } catch (IOException e) {
+            Slog.e(TAG, "Unable to read saved backup pw hash");
+        }
+    }
+
+    /**
+     * Whether the candidate password matches the current password. If the persisted password is an
+     * older version, attempts hashing using the older algorithm.
+     *
+     * @param candidatePassword The password to try.
+     * @return {@code true} if the passwords match.
+     */
+    private boolean passwordMatchesSaved(String candidatePassword) {
+        return passwordMatchesSaved(PBKDF_CURRENT, candidatePassword)
+                || (usePbkdf2Fallback() && passwordMatchesSaved(PBKDF_FALLBACK, candidatePassword));
+    }
+
+    /**
+     * Returns {@code true} if the candidate password is correct.
+     *
+     * @param algorithm The algorithm used to hash passwords.
+     * @param candidatePassword The candidate password to compare to the current password.
+     * @return {@code true} if the candidate password matched the saved password.
+     */
+    private boolean passwordMatchesSaved(String algorithm, String candidatePassword) {
+        if (mPasswordHash == null) {
+            return candidatePassword == null || candidatePassword.equals("");
+        } else if (candidatePassword == null || candidatePassword.length() == 0) {
+            // The current password is not zero-length, but the candidate password is.
+            return false;
+        } else {
+            String candidatePasswordHash = PasswordUtils.buildPasswordHash(
+                    algorithm, candidatePassword, mPasswordSalt, PasswordUtils.PBKDF2_HASH_ROUNDS);
+            return mPasswordHash.equalsIgnoreCase(candidatePasswordHash);
+        }
+    }
+
+    private byte[] randomSalt() {
+        int bitsPerByte = 8;
+        byte[] array = new byte[PasswordUtils.PBKDF2_SALT_SIZE / bitsPerByte];
+        mRng.nextBytes(array);
+        return array;
+    }
+
+    private DataStreamFileCodec<Integer> getPasswordVersionFileCodec() {
+        return new DataStreamFileCodec<>(
+                new File(mBaseStateDir, PASSWORD_VERSION_FILE_NAME),
+                new PasswordVersionFileCodec());
+    }
+
+    private DataStreamFileCodec<BackupPasswordHash> getPasswordHashFileCodec() {
+        return new DataStreamFileCodec<>(getPasswordHashFile(), new PasswordHashFileCodec());
+    }
+
+    private File getPasswordHashFile() {
+        return new File(mBaseStateDir, PASSWORD_HASH_FILE_NAME);
+    }
+
+    /**
+     * Container class for a PBKDF hash and the salt used to create the hash.
+     */
+    private static final class BackupPasswordHash {
+        public String hash;
+        public byte[] salt;
+
+        BackupPasswordHash(String hash, byte[] salt) {
+            this.hash = hash;
+            this.salt = salt;
+        }
+    }
+
+    /**
+     * The password version file contains a single 32-bit integer.
+     */
+    private static final class PasswordVersionFileCodec implements
+            DataStreamCodec<Integer> {
+        @Override
+        public void serialize(Integer integer, DataOutputStream dataOutputStream)
+                throws IOException {
+            dataOutputStream.write(integer);
+        }
+
+        @Override
+        public Integer deserialize(DataInputStream dataInputStream) throws IOException {
+            return dataInputStream.readInt();
+        }
+    }
+
+    /**
+     * The passwords hash file contains
+     *
+     * <ul>
+     *     <li>A 32-bit integer representing the number of bytes in the salt;
+     *     <li>The salt bytes;
+     *     <li>A UTF-8 string of the hash.
+     * </ul>
+     */
+    private static final class PasswordHashFileCodec implements
+            DataStreamCodec<BackupPasswordHash> {
+        @Override
+        public void serialize(BackupPasswordHash backupPasswordHash,
+                DataOutputStream dataOutputStream) throws IOException {
+            dataOutputStream.writeInt(backupPasswordHash.salt.length);
+            dataOutputStream.write(backupPasswordHash.salt);
+            dataOutputStream.writeUTF(backupPasswordHash.hash);
+        }
+
+        @Override
+        public BackupPasswordHash deserialize(
+                DataInputStream dataInputStream) throws IOException {
+            int saltLen = dataInputStream.readInt();
+            byte[] salt = new byte[saltLen];
+            dataInputStream.readFully(salt);
+            String hash = dataInputStream.readUTF();
+            return new BackupPasswordHash(hash, salt);
+        }
+    }
+}
diff --git a/services/backup/java/com/android/server/backup/DataChangedJournal.java b/services/backup/java/com/android/server/backup/DataChangedJournal.java
new file mode 100644
index 0000000..9360c85
--- /dev/null
+++ b/services/backup/java/com/android/server/backup/DataChangedJournal.java
@@ -0,0 +1,142 @@
+/*
+ * 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.backup;
+
+import android.annotation.Nullable;
+
+import java.io.BufferedInputStream;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.util.ArrayList;
+
+/**
+ * A journal of packages that have indicated that their data has changed (and therefore should be
+ * backed up in the next scheduled K/V backup pass).
+ *
+ * <p>This information is persisted to the filesystem so that it is not lost in the event of a
+ * reboot.
+ */
+public final class DataChangedJournal {
+    private static final String FILE_NAME_PREFIX = "journal";
+
+    /**
+     * Journals tend to be on the order of a few kilobytes, hence setting the buffer size to 8kb.
+     */
+    private static final int BUFFER_SIZE_BYTES = 8 * 1024;
+
+    private final File mFile;
+
+    /**
+     * Constructs an instance that reads from and writes to the given file.
+     */
+    DataChangedJournal(File file) {
+        mFile = file;
+    }
+
+    /**
+     * Adds the given package to the journal.
+     *
+     * @param packageName The name of the package whose data has changed.
+     * @throws IOException if there is an IO error writing to the journal file.
+     */
+    public void addPackage(String packageName) throws IOException {
+        try (RandomAccessFile out = new RandomAccessFile(mFile, "rws")) {
+            out.seek(out.length());
+            out.writeUTF(packageName);
+        }
+    }
+
+    /**
+     * Invokes {@link Consumer#accept(String)} with every package name in the journal file.
+     *
+     * @param consumer The callback.
+     * @throws IOException If there is an IO error reading from the file.
+     */
+    public void forEach(Consumer consumer) throws IOException {
+        try (
+            BufferedInputStream bufferedInputStream = new BufferedInputStream(
+                    new FileInputStream(mFile), BUFFER_SIZE_BYTES);
+            DataInputStream dataInputStream = new DataInputStream(bufferedInputStream)
+        ) {
+            while (dataInputStream.available() > 0) {
+                String packageName = dataInputStream.readUTF();
+                consumer.accept(packageName);
+            }
+        }
+    }
+
+    /**
+     * Deletes the journal from the filesystem.
+     *
+     * @return {@code true} if successfully deleted journal.
+     */
+    public boolean delete() {
+        return mFile.delete();
+    }
+
+    @Override
+    public boolean equals(@Nullable Object object) {
+        if (object instanceof DataChangedJournal) {
+            DataChangedJournal that = (DataChangedJournal) object;
+            try {
+                return this.mFile.getCanonicalPath().equals(that.mFile.getCanonicalPath());
+            } catch (IOException exception) {
+                return false;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return mFile.toString();
+    }
+
+    /**
+     * Consumer for iterating over package names in the journal.
+     */
+    @FunctionalInterface
+    public interface Consumer {
+        void accept(String packageName);
+    }
+
+    /**
+     * Creates a new journal with a random file name in the given journal directory.
+     *
+     * @param journalDirectory The directory where journals are kept.
+     * @return The journal.
+     * @throws IOException if there is an IO error creating the file.
+     */
+    static DataChangedJournal newJournal(File journalDirectory) throws IOException {
+        return new DataChangedJournal(
+                File.createTempFile(FILE_NAME_PREFIX, null, journalDirectory));
+    }
+
+    /**
+     * Returns a list of journals in the given journal directory.
+     */
+    static ArrayList<DataChangedJournal> listJournals(File journalDirectory) {
+        ArrayList<DataChangedJournal> journals = new ArrayList<>();
+        for (File file : journalDirectory.listFiles()) {
+            journals.add(new DataChangedJournal(file));
+        }
+        return journals;
+    }
+}
diff --git a/services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java b/services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java
index b57c0bc..23abd93 100644
--- a/services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java
@@ -17,7 +17,6 @@
 package com.android.server.backup;
 
 import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_BACKUP_IN_FOREGROUND;
-
 import static com.android.server.backup.internal.BackupHandler.MSG_BACKUP_OPERATION_TIMEOUT;
 import static com.android.server.backup.internal.BackupHandler.MSG_FULL_CONFIRMATION_TIMEOUT;
 import static com.android.server.backup.internal.BackupHandler.MSG_OP_COMPLETE;
@@ -30,10 +29,10 @@
 import static com.android.server.backup.internal.BackupHandler.MSG_RUN_ADB_RESTORE;
 import static com.android.server.backup.internal.BackupHandler.MSG_RUN_BACKUP;
 import static com.android.server.backup.internal.BackupHandler.MSG_RUN_CLEAR;
-import static com.android.server.backup.internal.BackupHandler.MSG_RUN_INITIALIZE;
 import static com.android.server.backup.internal.BackupHandler.MSG_RUN_RESTORE;
 import static com.android.server.backup.internal.BackupHandler.MSG_SCHEDULE_BACKUP_PACKAGE;
 
+import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.app.AlarmManager;
 import android.app.AppGlobals;
@@ -83,6 +82,7 @@
 import android.os.storage.StorageManager;
 import android.provider.Settings;
 import android.text.TextUtils;
+import android.util.ArraySet;
 import android.util.AtomicFile;
 import android.util.EventLog;
 import android.util.Pair;
@@ -102,6 +102,7 @@
 import com.android.server.backup.internal.BackupRequest;
 import com.android.server.backup.internal.ClearDataObserver;
 import com.android.server.backup.internal.Operation;
+import com.android.server.backup.internal.PerformInitializeTask;
 import com.android.server.backup.internal.ProvisionedObserver;
 import com.android.server.backup.internal.RunBackupReceiver;
 import com.android.server.backup.internal.RunInitializeReceiver;
@@ -117,13 +118,12 @@
 import com.android.server.backup.utils.AppBackupUtils;
 import com.android.server.backup.utils.BackupManagerMonitorUtils;
 import com.android.server.backup.utils.BackupObserverUtils;
-import com.android.server.backup.utils.PasswordUtils;
+import com.android.server.backup.utils.SparseArrayUtils;
 import com.android.server.power.BatterySaverPolicy.ServiceType;
 
-import libcore.io.IoUtils;
+import com.google.android.collect.Sets;
 
 import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
@@ -135,13 +135,13 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.io.RandomAccessFile;
 import java.security.SecureRandom;
 import java.text.SimpleDateFormat;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
@@ -168,10 +168,6 @@
     // with U+FF00 or higher for system use).
     public static final String KEY_WIDGET_STATE = "\uffed\uffedwidget";
 
-    // Historical and current algorithm names
-    public static final String PBKDF_CURRENT = "PBKDF2WithHmacSHA1";
-    public static final String PBKDF_FALLBACK = "PBKDF2WithHmacSHA1And8bit";
-
     // Name and current contents version of the full-backup manifest file
     //
     // Manifest version history:
@@ -189,7 +185,6 @@
     // 5 : added support for key-value packages
     public static final int BACKUP_FILE_VERSION = 5;
     public static final String BACKUP_FILE_HEADER_MAGIC = "ANDROID BACKUP\n";
-    private static final int BACKUP_PW_FILE_VERSION = 2;
     public static final String BACKUP_METADATA_FILENAME = "_meta";
     public static final int BACKUP_METADATA_VERSION = 1;
     public static final int BACKUP_WIDGET_METADATA_TOKEN = 0x01FFED01;
@@ -282,6 +277,8 @@
     private final Object mClearDataLock = new Object();
     private volatile boolean mClearingData;
 
+    private final BackupPasswordManager mBackupPasswordManager;
+
     @GuardedBy("mPendingRestores")
     private boolean mIsRestoreInProgress;
     @GuardedBy("mPendingRestores")
@@ -481,11 +478,11 @@
         mDataDir = dataDir;
     }
 
-    public File getJournal() {
+    public DataChangedJournal getJournal() {
         return mJournal;
     }
 
-    public void setJournal(File journal) {
+    public void setJournal(@Nullable DataChangedJournal journal) {
         mJournal = journal;
     }
 
@@ -517,12 +514,12 @@
         mCurrentToken = currentToken;
     }
 
-    public HashSet<String> getPendingInits() {
+    public ArraySet<String> getPendingInits() {
         return mPendingInits;
     }
 
-    public void setPendingInits(HashSet<String> pendingInits) {
-        mPendingInits = pendingInits;
+    public void clearPendingInits() {
+        mPendingInits.clear();
     }
 
     public PerformFullTransportBackupTask getRunningFullBackupTask() {
@@ -629,20 +626,9 @@
     private File mBaseStateDir;
     private File mDataDir;
     private File mJournalDir;
-    private File mJournal;
+    @Nullable private DataChangedJournal mJournal;
 
-    // Backup password, if any, and the file where it's saved.  What is stored is not the
-    // password text itself; it's the result of a PBKDF2 hash with a randomly chosen (but
-    // persisted) salt.  Validation is performed by running the challenge text through the
-    // same PBKDF2 cycle with the persisted salt; if the resulting derived key string matches
-    // the saved hash string, then the challenge text matches the originally supplied
-    // password text.
     private final SecureRandom mRng = new SecureRandom();
-    private String mPasswordHash;
-    private File mPasswordHashFile;
-    private int mPasswordVersion;
-    private File mPasswordVersionFile;
-    private byte[] mPasswordSalt;
 
     // Keep a log of all the apps we've ever backed up, and what the
     // dataset tokens are for both the current backup dataset and
@@ -659,7 +645,7 @@
 
     // Persistently track the need to do a full init
     private static final String INIT_SENTINEL_FILE_NAME = "_need_init_";
-    private HashSet<String> mPendingInits = new HashSet<>();  // transport names
+    private ArraySet<String> mPendingInits = new ArraySet<>();  // transport names
 
     // Round-robin queue for scheduling full backup passes
     private static final int SCHEDULE_FILE_VERSION = 1; // current version of the schedule file
@@ -744,52 +730,7 @@
         // This dir on /cache is managed directly in init.rc
         mDataDir = new File(Environment.getDownloadCacheDirectory(), "backup_stage");
 
-        mPasswordVersion = 1;       // unless we hear otherwise
-        mPasswordVersionFile = new File(mBaseStateDir, "pwversion");
-        if (mPasswordVersionFile.exists()) {
-            FileInputStream fin = null;
-            DataInputStream in = null;
-            try {
-                fin = new FileInputStream(mPasswordVersionFile);
-                in = new DataInputStream(fin);
-                mPasswordVersion = in.readInt();
-            } catch (IOException e) {
-                Slog.e(TAG, "Unable to read backup pw version");
-            } finally {
-                try {
-                    if (in != null) in.close();
-                    if (fin != null) fin.close();
-                } catch (IOException e) {
-                    Slog.w(TAG, "Error closing pw version files");
-                }
-            }
-        }
-
-        mPasswordHashFile = new File(mBaseStateDir, "pwhash");
-        if (mPasswordHashFile.exists()) {
-            FileInputStream fin = null;
-            DataInputStream in = null;
-            try {
-                fin = new FileInputStream(mPasswordHashFile);
-                in = new DataInputStream(new BufferedInputStream(fin));
-                // integer length of the salt array, followed by the salt,
-                // then the hex pw hash string
-                int saltLen = in.readInt();
-                byte[] salt = new byte[saltLen];
-                in.readFully(salt);
-                mPasswordHash = in.readUTF();
-                mPasswordSalt = salt;
-            } catch (IOException e) {
-                Slog.e(TAG, "Unable to read saved backup pw hash");
-            } finally {
-                try {
-                    if (in != null) in.close();
-                    if (fin != null) fin.close();
-                } catch (IOException e) {
-                    Slog.w(TAG, "Unable to close streams");
-                }
-            }
-        }
+        mBackupPasswordManager = new BackupPasswordManager(mContext, mBaseStateDir, mRng);
 
         // Alarm receivers for scheduled backups & initialization operations
         mRunBackupReceiver = new RunBackupReceiver(this);
@@ -806,11 +747,11 @@
 
         Intent backupIntent = new Intent(RUN_BACKUP_ACTION);
         backupIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
-        mRunBackupIntent = PendingIntent.getBroadcast(context, MSG_RUN_BACKUP, backupIntent, 0);
+        mRunBackupIntent = PendingIntent.getBroadcast(context, 0, backupIntent, 0);
 
         Intent initIntent = new Intent(RUN_INITIALIZE_ACTION);
-        backupIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
-        mRunInitIntent = PendingIntent.getBroadcast(context, MSG_RUN_INITIALIZE, initIntent, 0);
+        initIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+        mRunInitIntent = PendingIntent.getBroadcast(context, 0, initIntent, 0);
 
         // Set up the backup-request journaling
         mJournalDir = new File(mBaseStateDir, "pending");
@@ -858,8 +799,7 @@
 
         // Remember our ancestral dataset
         mTokenFile = new File(mBaseStateDir, "ancestral");
-        try {
-            RandomAccessFile tf = new RandomAccessFile(mTokenFile, "r");
+        try (RandomAccessFile tf = new RandomAccessFile(mTokenFile, "r")) {
             int version = tf.readInt();
             if (version == CURRENT_ANCESTRAL_RECORD_VERSION) {
                 mAncestralToken = tf.readLong();
@@ -874,7 +814,6 @@
                     }
                 }
             }
-            tf.close();
         } catch (FileNotFoundException fnf) {
             // Probably innocuous
             Slog.v(TAG, "No ancestral data");
@@ -898,13 +837,8 @@
         // If there are previous contents, parse them out then start a new
         // file to continue the recordkeeping.
         if (mEverStored.exists()) {
-            RandomAccessFile temp = null;
-            RandomAccessFile in = null;
-
-            try {
-                temp = new RandomAccessFile(tempProcessedFile, "rws");
-                in = new RandomAccessFile(mEverStored, "r");
-
+            try (RandomAccessFile temp = new RandomAccessFile(tempProcessedFile, "rws");
+                 RandomAccessFile in = new RandomAccessFile(mEverStored, "r")) {
                 // Loop until we hit EOF
                 while (true) {
                     String pkg = in.readUTF();
@@ -928,15 +862,6 @@
                 }
             } catch (IOException e) {
                 Slog.e(TAG, "Error in processed file", e);
-            } finally {
-                try {
-                    if (temp != null) temp.close();
-                } catch (IOException e) {
-                }
-                try {
-                    if (in != null) in.close();
-                } catch (IOException e) {
-                }
             }
         }
 
@@ -967,14 +892,9 @@
                 PackageManagerBackupAgent.getStorableApplications(mPackageManager);
 
         if (mFullBackupScheduleFile.exists()) {
-            FileInputStream fstream = null;
-            BufferedInputStream bufStream = null;
-            DataInputStream in = null;
-            try {
-                fstream = new FileInputStream(mFullBackupScheduleFile);
-                bufStream = new BufferedInputStream(fstream);
-                in = new DataInputStream(bufStream);
-
+            try (FileInputStream fstream = new FileInputStream(mFullBackupScheduleFile);
+                 BufferedInputStream bufStream = new BufferedInputStream(fstream);
+                 DataInputStream in = new DataInputStream(bufStream)) {
                 int version = in.readInt();
                 if (version != SCHEDULE_FILE_VERSION) {
                     Slog.e(TAG, "Unknown backup schedule version " + version);
@@ -1035,10 +955,6 @@
                 Slog.e(TAG, "Unable to read backup schedule", e);
                 mFullBackupScheduleFile.delete();
                 schedule = null;
-            } finally {
-                IoUtils.closeQuietly(in);
-                IoUtils.closeQuietly(bufStream);
-                IoUtils.closeQuietly(fstream);
             }
         }
 
@@ -1104,35 +1020,17 @@
     }
 
     private void parseLeftoverJournals() {
-        for (File f : mJournalDir.listFiles()) {
-            if (mJournal == null || f.compareTo(mJournal) != 0) {
-                // This isn't the current journal, so it must be a leftover.  Read
-                // out the package names mentioned there and schedule them for
-                // backup.
-                DataInputStream in = null;
+        ArrayList<DataChangedJournal> journals = DataChangedJournal.listJournals(mJournalDir);
+        for (DataChangedJournal journal : journals) {
+            if (!journal.equals(mJournal)) {
                 try {
-                    Slog.i(TAG, "Found stale backup journal, scheduling");
-                    // Journals will tend to be on the order of a few kilobytes(around 4k), hence,
-                    // setting the buffer size to 8192.
-                    InputStream bufferedInputStream = new BufferedInputStream(
-                            new FileInputStream(f), 8192);
-                    in = new DataInputStream(bufferedInputStream);
-                    while (true) {
-                        String packageName = in.readUTF();
+                    journal.forEach(packageName -> {
+                        Slog.i(TAG, "Found stale backup journal, scheduling");
                         if (MORE_DEBUG) Slog.i(TAG, "  " + packageName);
                         dataChangedImpl(packageName);
-                    }
-                } catch (EOFException e) {
-                    // no more data; we're done
-                } catch (Exception e) {
-                    Slog.e(TAG, "Can't read " + f, e);
-                } finally {
-                    // close/delete the file
-                    try {
-                        if (in != null) in.close();
-                    } catch (IOException e) {
-                    }
-                    f.delete();
+                    });
+                } catch (IOException e) {
+                    Slog.e(TAG, "Can't read " + journal, e);
                 }
             }
         }
@@ -1145,128 +1043,18 @@
         return array;
     }
 
-    private boolean passwordMatchesSaved(String algorithm, String candidatePw, int rounds) {
-        if (mPasswordHash == null) {
-            // no current password case -- require that 'currentPw' be null or empty
-            if (candidatePw == null || "".equals(candidatePw)) {
-                return true;
-            } // else the non-empty candidate does not match the empty stored pw
-        } else {
-            // hash the stated current pw and compare to the stored one
-            if (candidatePw != null && candidatePw.length() > 0) {
-                String currentPwHash = PasswordUtils.buildPasswordHash(algorithm, candidatePw,
-                        mPasswordSalt,
-                        rounds);
-                if (mPasswordHash.equalsIgnoreCase(currentPwHash)) {
-                    // candidate hash matches the stored hash -- the password matches
-                    return true;
-                }
-            } // else the stored pw is nonempty but the candidate is empty; no match
-        }
-        return false;
-    }
-
     @Override
     public boolean setBackupPassword(String currentPw, String newPw) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP,
-                "setBackupPassword");
-
-        // When processing v1 passwords we may need to try two different PBKDF2 checksum regimes
-        final boolean pbkdf2Fallback = (mPasswordVersion < BACKUP_PW_FILE_VERSION);
-
-        // If the supplied pw doesn't hash to the the saved one, fail.  The password
-        // might be caught in the legacy crypto mismatch; verify that too.
-        if (!passwordMatchesSaved(PBKDF_CURRENT, currentPw, PasswordUtils.PBKDF2_HASH_ROUNDS)
-                && !(pbkdf2Fallback && passwordMatchesSaved(PBKDF_FALLBACK,
-                currentPw, PasswordUtils.PBKDF2_HASH_ROUNDS))) {
-            return false;
-        }
-
-        // Snap up to current on the pw file version
-        mPasswordVersion = BACKUP_PW_FILE_VERSION;
-        FileOutputStream pwFout = null;
-        DataOutputStream pwOut = null;
-        try {
-            pwFout = new FileOutputStream(mPasswordVersionFile);
-            pwOut = new DataOutputStream(pwFout);
-            pwOut.writeInt(mPasswordVersion);
-        } catch (IOException e) {
-            Slog.e(TAG, "Unable to write backup pw version; password not changed");
-            return false;
-        } finally {
-            try {
-                if (pwOut != null) pwOut.close();
-                if (pwFout != null) pwFout.close();
-            } catch (IOException e) {
-                Slog.w(TAG, "Unable to close pw version record");
-            }
-        }
-
-        // Clearing the password is okay
-        if (newPw == null || newPw.isEmpty()) {
-            if (mPasswordHashFile.exists()) {
-                if (!mPasswordHashFile.delete()) {
-                    // Unable to delete the old pw file, so fail
-                    Slog.e(TAG, "Unable to clear backup password");
-                    return false;
-                }
-            }
-            mPasswordHash = null;
-            mPasswordSalt = null;
-            return true;
-        }
-
-        try {
-            // Okay, build the hash of the new backup password
-            byte[] salt = randomBytes(PasswordUtils.PBKDF2_SALT_SIZE);
-            String newPwHash = PasswordUtils.buildPasswordHash(PBKDF_CURRENT, newPw, salt,
-                    PasswordUtils.PBKDF2_HASH_ROUNDS);
-
-            OutputStream pwf = null, buffer = null;
-            DataOutputStream out = null;
-            try {
-                pwf = new FileOutputStream(mPasswordHashFile);
-                buffer = new BufferedOutputStream(pwf);
-                out = new DataOutputStream(buffer);
-                // integer length of the salt array, followed by the salt,
-                // then the hex pw hash string
-                out.writeInt(salt.length);
-                out.write(salt);
-                out.writeUTF(newPwHash);
-                out.flush();
-                mPasswordHash = newPwHash;
-                mPasswordSalt = salt;
-                return true;
-            } finally {
-                if (out != null) out.close();
-                if (buffer != null) buffer.close();
-                if (pwf != null) pwf.close();
-            }
-        } catch (IOException e) {
-            Slog.e(TAG, "Unable to set backup password");
-        }
-        return false;
+        return mBackupPasswordManager.setBackupPassword(currentPw, newPw);
     }
 
     @Override
     public boolean hasBackupPassword() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP,
-                "hasBackupPassword");
-
-        return mPasswordHash != null && mPasswordHash.length() > 0;
+        return mBackupPasswordManager.hasBackupPassword();
     }
 
     public boolean backupPasswordMatches(String currentPw) {
-        if (hasBackupPassword()) {
-            final boolean pbkdf2Fallback = (mPasswordVersion < BACKUP_PW_FILE_VERSION);
-            if (!passwordMatchesSaved(PBKDF_CURRENT, currentPw, PasswordUtils.PBKDF2_HASH_ROUNDS)
-                    && !(pbkdf2Fallback && passwordMatchesSaved(PBKDF_FALLBACK,
-                    currentPw, PasswordUtils.PBKDF2_HASH_ROUNDS))) {
-                if (DEBUG) Slog.w(TAG, "Backup password mismatch; aborting");
-                return false;
-            }
-        }
-        return true;
+        return mBackupPasswordManager.backupPasswordMatches(currentPw);
     }
 
     // Maintain persistent state around whether need to do an initialize operation.
@@ -1409,7 +1197,7 @@
                 if (uri == null) {
                     return;
                 }
-                String pkgName = uri.getSchemeSpecificPart();
+                final String pkgName = uri.getSchemeSpecificPart();
                 if (pkgName != null) {
                     pkgList = new String[]{pkgName};
                 }
@@ -1417,7 +1205,7 @@
 
                 // At package-changed we only care about looking at new transport states
                 if (changed) {
-                    String[] components =
+                    final String[] components =
                             intent.getStringArrayExtra(Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST);
 
                     if (MORE_DEBUG) {
@@ -1427,7 +1215,8 @@
                         }
                     }
 
-                    mTransportManager.onPackageChanged(pkgName, components);
+                    mBackupHandler.post(
+                            () -> mTransportManager.onPackageChanged(pkgName, components));
                     return; // nothing more to do in the PACKAGE_CHANGED case
                 }
 
@@ -1459,7 +1248,7 @@
                 }
                 // If they're full-backup candidates, add them there instead
                 final long now = System.currentTimeMillis();
-                for (String packageName : pkgList) {
+                for (final String packageName : pkgList) {
                     try {
                         PackageInfo app = mPackageManager.getPackageInfo(packageName, 0);
                         if (AppBackupUtils.appGetsFullBackup(app)
@@ -1477,7 +1266,8 @@
                             writeFullBackupScheduleAsync();
                         }
 
-                        mTransportManager.onPackageAdded(packageName);
+                        mBackupHandler.post(
+                                () -> mTransportManager.onPackageAdded(packageName));
 
                     } catch (NameNotFoundException e) {
                         // doesn't really exist; ignore it
@@ -1501,8 +1291,9 @@
                         removePackageParticipantsLocked(pkgList, uid);
                     }
                 }
-                for (String pkgName : pkgList) {
-                    mTransportManager.onPackageRemoved(pkgName);
+                for (final String pkgName : pkgList) {
+                    mBackupHandler.post(
+                            () -> mTransportManager.onPackageRemoved(pkgName));
                 }
             }
         }
@@ -1627,18 +1418,11 @@
         synchronized (mEverStoredApps) {
             if (!mEverStoredApps.add(packageName)) return;
 
-            RandomAccessFile out = null;
-            try {
-                out = new RandomAccessFile(mEverStored, "rws");
+            try (RandomAccessFile out = new RandomAccessFile(mEverStored, "rws")) {
                 out.seek(out.length());
                 out.writeUTF(packageName);
             } catch (IOException e) {
                 Slog.e(TAG, "Can't log backup of " + packageName + " to " + mEverStored);
-            } finally {
-                try {
-                    if (out != null) out.close();
-                } catch (IOException e) {
-                }
             }
         }
     }
@@ -1653,16 +1437,13 @@
             // we'll recognize on initialization time that the package no longer
             // exists and fix it up then.
             File tempKnownFile = new File(mBaseStateDir, "processed.new");
-            RandomAccessFile known = null;
-            try {
-                known = new RandomAccessFile(tempKnownFile, "rws");
+            try (RandomAccessFile known = new RandomAccessFile(tempKnownFile, "rws")) {
                 mEverStoredApps.remove(packageName);
                 for (String s : mEverStoredApps) {
                     known.writeUTF(s);
                     if (MORE_DEBUG) Slog.v(TAG, "    " + s);
                 }
                 known.close();
-                known = null;
                 if (!tempKnownFile.renameTo(mEverStored)) {
                     throw new IOException("Can't rename " + tempKnownFile + " to " + mEverStored);
                 }
@@ -1675,11 +1456,6 @@
                 mEverStoredApps.clear();
                 tempKnownFile.delete();
                 mEverStored.delete();
-            } finally {
-                try {
-                    if (known != null) known.close();
-                } catch (IOException e) {
-                }
             }
         }
     }
@@ -1688,9 +1464,7 @@
     // as the set of packages with data [supposedly] available in the
     // ancestral dataset.
     public void writeRestoreTokens() {
-        try {
-            RandomAccessFile af = new RandomAccessFile(mTokenFile, "rwd");
-
+        try (RandomAccessFile af = new RandomAccessFile(mTokenFile, "rwd")) {
             // First, the version number of this record, for futureproofing
             af.writeInt(CURRENT_ANCESTRAL_RECORD_VERSION);
 
@@ -1709,7 +1483,6 @@
                     if (MORE_DEBUG) Slog.v(TAG, "   " + pkgName);
                 }
             }
-            af.close();
         } catch (IOException e) {
             Slog.w(TAG, "Unable to write token file:", e);
         }
@@ -1851,6 +1624,17 @@
             throw new IllegalArgumentException("No packages are provided for backup");
         }
 
+        if (!mEnabled || !mProvisioned) {
+            Slog.i(TAG, "Backup requested but e=" + mEnabled + " p=" +mProvisioned);
+            BackupObserverUtils.sendBackupFinished(observer, BackupManager.ERROR_BACKUP_NOT_ALLOWED);
+            final int logTag = mProvisioned
+                    ? BackupManagerMonitor.LOG_EVENT_ID_BACKUP_DISABLED
+                    : BackupManagerMonitor.LOG_EVENT_ID_DEVICE_NOT_PROVISIONED;
+            monitor = BackupManagerMonitorUtils.monitorEvent(monitor, logTag, null,
+                    BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY, null);
+            return BackupManager.ERROR_BACKUP_NOT_ALLOWED;
+        }
+
         IBackupTransport transport = mTransportManager.getCurrentTransportBinder();
         if (transport == null) {
             BackupObserverUtils.sendBackupFinished(observer, BackupManager.ERROR_TRANSPORT_ABORTED);
@@ -2477,38 +2261,22 @@
         }
 
         // a caller with full permission can ask to back up any participating app
-        HashSet<String> targets = new HashSet<>();
         if (PACKAGE_MANAGER_SENTINEL.equals(packageName)) {
-            targets.add(PACKAGE_MANAGER_SENTINEL);
+            return Sets.newHashSet(PACKAGE_MANAGER_SENTINEL);
         } else {
             synchronized (mBackupParticipants) {
-                int N = mBackupParticipants.size();
-                for (int i = 0; i < N; i++) {
-                    HashSet<String> s = mBackupParticipants.valueAt(i);
-                    if (s != null) {
-                        targets.addAll(s);
-                    }
-                }
+                return SparseArrayUtils.union(mBackupParticipants);
             }
         }
-        return targets;
     }
 
     private void writeToJournalLocked(String str) {
-        RandomAccessFile out = null;
         try {
-            if (mJournal == null) mJournal = File.createTempFile("journal", null, mJournalDir);
-            out = new RandomAccessFile(mJournal, "rws");
-            out.seek(out.length());
-            out.writeUTF(str);
+            if (mJournal == null) mJournal = DataChangedJournal.newJournal(mJournalDir);
+            mJournal.addPackage(str);
         } catch (IOException e) {
             Slog.e(TAG, "Can't write " + str + " to backup journal", e);
             mJournal = null;
-        } finally {
-            try {
-                if (out != null) out.close();
-            } catch (IOException e) {
-            }
         }
     }
 
@@ -2544,6 +2312,23 @@
         });
     }
 
+    // Run an initialize operation for the given transport
+    @Override
+    public void initializeTransports(String[] transportNames, IBackupObserver observer) {
+        mContext.enforceCallingPermission(android.Manifest.permission.BACKUP, "initializeTransport");
+        if (MORE_DEBUG || true) {
+            Slog.v(TAG, "initializeTransport(): " + Arrays.asList(transportNames));
+        }
+
+        final long oldId = Binder.clearCallingIdentity();
+        try {
+            mWakelock.acquire();
+            mBackupHandler.post(new PerformInitializeTask(this, transportNames, observer));
+        } finally {
+            Binder.restoreCallingIdentity(oldId);
+        }
+    }
+
     // Clear the given package's backup data from the current transport
     @Override
     public void clearBackupData(String transportName, String packageName) {
@@ -2566,14 +2351,7 @@
             // a caller with full permission can ask to back up any participating app
             // !!! TODO: allow data-clear of ANY app?
             if (MORE_DEBUG) Slog.v(TAG, "Privileged caller, allowing clear of other apps");
-            apps = new HashSet<>();
-            int N = mBackupParticipants.size();
-            for (int i = 0; i < N; i++) {
-                HashSet<String> s = mBackupParticipants.valueAt(i);
-                if (s != null) {
-                    apps.addAll(s);
-                }
-            }
+            apps = SparseArrayUtils.union(mBackupParticipants);
         }
 
         // Is the given app an available participant?
@@ -2711,7 +2489,7 @@
             try {
                 fd.close();
             } catch (IOException e) {
-                // just eat it
+                Slog.e(TAG, "IO error closing output for adb backup: " + e.getMessage());
             }
             Binder.restoreCallingIdentity(oldId);
             Slog.d(TAG, "Adb backup processing complete.");
@@ -2949,9 +2727,7 @@
         File base = new File(Environment.getDataDirectory(), "backup");
         File enableFile = new File(base, BACKUP_ENABLE_FILE);
         File stage = new File(base, BACKUP_ENABLE_FILE + "-stage");
-        FileOutputStream fout = null;
-        try {
-            fout = new FileOutputStream(stage);
+        try (FileOutputStream fout = new FileOutputStream(stage)) {
             fout.write(enable ? 1 : 0);
             fout.close();
             stage.renameTo(enableFile);
@@ -2967,8 +2743,6 @@
                     Settings.Secure.BACKUP_ENABLED, null, userId);
             enableFile.delete();
             stage.delete();
-        } finally {
-            IoUtils.closeQuietly(fout);
         }
     }
 
diff --git a/services/backup/java/com/android/server/backup/Trampoline.java b/services/backup/java/com/android/server/backup/Trampoline.java
index 9e7a29e..fcd929a 100644
--- a/services/backup/java/com/android/server/backup/Trampoline.java
+++ b/services/backup/java/com/android/server/backup/Trampoline.java
@@ -199,6 +199,15 @@
     }
 
     @Override
+    public void initializeTransports(String[] transportNames, IBackupObserver observer)
+            throws RemoteException {
+        BackupManagerServiceInterface svc = mService;
+        if (svc != null) {
+            svc.initializeTransports(transportNames, observer);
+        }
+    }
+
+    @Override
     public void clearBackupData(String transportName, String packageName)
             throws RemoteException {
         BackupManagerServiceInterface svc = mService;
diff --git a/services/backup/java/com/android/server/backup/TransportManager.java b/services/backup/java/com/android/server/backup/TransportManager.java
index fb2982e..dab218d 100644
--- a/services/backup/java/com/android/server/backup/TransportManager.java
+++ b/services/backup/java/com/android/server/backup/TransportManager.java
@@ -316,9 +316,9 @@
     private class TransportConnection implements ServiceConnection {
 
         // Hold mTransportsLock to access these fields so as to provide a consistent view of them.
-        private IBackupTransport mBinder;
+        private volatile IBackupTransport mBinder;
         private final List<SelectBackupTransportCallback> mListeners = new ArrayList<>();
-        private String mTransportName;
+        private volatile String mTransportName;
 
         private final ComponentName mTransportComponent;
 
@@ -401,25 +401,24 @@
                     + rebindTimeout + "ms");
         }
 
+        // Intentionally not synchronized -- the variable is volatile and changes to its value
+        // are inside synchronized blocks, providing a memory sync barrier; and this method
+        // does not touch any other state protected by that lock.
         private IBackupTransport getBinder() {
-            synchronized (mTransportLock) {
-                return mBinder;
-            }
+            return mBinder;
         }
 
+        // Intentionally not synchronized; same as getBinder()
         private String getName() {
-            synchronized (mTransportLock) {
-                return mTransportName;
-            }
+            return mTransportName;
         }
 
+        // Intentionally not synchronized; same as getBinder()
         private void bindIfUnbound() {
-            synchronized (mTransportLock) {
-                if (mBinder == null) {
-                    Slog.d(TAG,
-                            "Rebinding to transport " + mTransportComponent.flattenToShortString());
-                    bindToTransport(mTransportComponent, this);
-                }
+            if (mBinder == null) {
+                Slog.d(TAG,
+                        "Rebinding to transport " + mTransportComponent.flattenToShortString());
+                bindToTransport(mTransportComponent, this);
             }
         }
 
diff --git a/services/backup/java/com/android/server/backup/fullbackup/PerformAdbBackupTask.java b/services/backup/java/com/android/server/backup/fullbackup/PerformAdbBackupTask.java
index 007d930..4085f63 100644
--- a/services/backup/java/com/android/server/backup/fullbackup/PerformAdbBackupTask.java
+++ b/services/backup/java/com/android/server/backup/fullbackup/PerformAdbBackupTask.java
@@ -16,11 +16,11 @@
 
 package com.android.server.backup.fullbackup;
 
+import static com.android.server.backup.BackupPasswordManager.PBKDF_CURRENT;
 import static com.android.server.backup.RefactoredBackupManagerService.BACKUP_FILE_HEADER_MAGIC;
 import static com.android.server.backup.RefactoredBackupManagerService.BACKUP_FILE_VERSION;
 import static com.android.server.backup.RefactoredBackupManagerService.DEBUG;
 import static com.android.server.backup.RefactoredBackupManagerService.MORE_DEBUG;
-import static com.android.server.backup.RefactoredBackupManagerService.PBKDF_CURRENT;
 import static com.android.server.backup.RefactoredBackupManagerService.SHARED_BACKUP_AGENT_PACKAGE;
 import static com.android.server.backup.RefactoredBackupManagerService.TAG;
 
@@ -459,7 +459,7 @@
                 }
                 mOutputFile.close();
             } catch (IOException e) {
-                /* nothing we can do about this */
+                Slog.e(TAG, "IO error closing adb backup file: " + e.getMessage());
             }
             synchronized (mLatch) {
                 mLatch.set(true);
diff --git a/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java b/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java
index 0f1e485..bc7c117 100644
--- a/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java
+++ b/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java
@@ -277,7 +277,7 @@
                             + "; ignoring");
                 }
                 int monitoringEvent;
-                if (!backupManagerService.isEnabled()) {
+                if (backupManagerService.isProvisioned()) {
                     monitoringEvent = BackupManagerMonitor.LOG_EVENT_ID_BACKUP_DISABLED;
                 } else {
                     monitoringEvent = BackupManagerMonitor.LOG_EVENT_ID_DEVICE_NOT_PROVISIONED;
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 886d1f8..8f82300 100644
--- a/services/backup/java/com/android/server/backup/internal/BackupHandler.java
+++ b/services/backup/java/com/android/server/backup/internal/BackupHandler.java
@@ -36,6 +36,7 @@
 import com.android.internal.backup.IBackupTransport;
 import com.android.server.EventLogTags;
 import com.android.server.backup.BackupRestoreTask;
+import com.android.server.backup.DataChangedJournal;
 import com.android.server.backup.RefactoredBackupManagerService;
 import com.android.server.backup.fullbackup.PerformAdbBackupTask;
 import com.android.server.backup.fullbackup.PerformFullTransportBackupTask;
@@ -64,7 +65,6 @@
     public static final int MSG_RUN_ADB_BACKUP = 2;
     public static final int MSG_RUN_RESTORE = 3;
     public static final int MSG_RUN_CLEAR = 4;
-    public static final int MSG_RUN_INITIALIZE = 5;
     public static final int MSG_RUN_GET_RESTORE_SETS = 6;
     public static final int MSG_RESTORE_SESSION_TIMEOUT = 8;
     public static final int MSG_FULL_CONFIRMATION_TIMEOUT = 9;
@@ -108,7 +108,7 @@
 
                 // snapshot the pending-backup set and work on that
                 ArrayList<BackupRequest> queue = new ArrayList<>();
-                File oldJournal = backupManagerService.getJournal();
+                DataChangedJournal oldJournal = backupManagerService.getJournal();
                 synchronized (backupManagerService.getQueueLock()) {
                     // Do we have any work to do?  Construct the work queue
                     // then release the synchronization lock to actually run
@@ -265,19 +265,6 @@
                 break;
             }
 
-            case MSG_RUN_INITIALIZE: {
-                HashSet<String> queue;
-
-                // Snapshot the pending-init queue and work on that
-                synchronized (backupManagerService.getQueueLock()) {
-                    queue = new HashSet<>(backupManagerService.getPendingInits());
-                    backupManagerService.getPendingInits().clear();
-                }
-
-                (new PerformInitializeTask(backupManagerService, queue)).run();
-                break;
-            }
-
             case MSG_RETRY_INIT: {
                 synchronized (backupManagerService.getQueueLock()) {
                     backupManagerService.recordInitPendingLocked(msg.arg1 != 0, (String) msg.obj);
diff --git a/services/backup/java/com/android/server/backup/internal/PerformBackupTask.java b/services/backup/java/com/android/server/backup/internal/PerformBackupTask.java
index a996e2d..5d4fcf4 100644
--- a/services/backup/java/com/android/server/backup/internal/PerformBackupTask.java
+++ b/services/backup/java/com/android/server/backup/internal/PerformBackupTask.java
@@ -28,6 +28,7 @@
 import static com.android.server.backup.internal.BackupHandler.MSG_BACKUP_OPERATION_TIMEOUT;
 import static com.android.server.backup.internal.BackupHandler.MSG_BACKUP_RESTORE_STEP;
 
+import android.annotation.Nullable;
 import android.app.ApplicationThreadConstants;
 import android.app.IBackupAgent;
 import android.app.backup.BackupDataInput;
@@ -57,6 +58,7 @@
 import com.android.server.AppWidgetBackupBridge;
 import com.android.server.EventLogTags;
 import com.android.server.backup.BackupRestoreTask;
+import com.android.server.backup.DataChangedJournal;
 import com.android.server.backup.KeyValueBackupJob;
 import com.android.server.backup.PackageManagerBackupAgent;
 import com.android.server.backup.RefactoredBackupManagerService;
@@ -114,7 +116,7 @@
     ArrayList<BackupRequest> mQueue;
     ArrayList<BackupRequest> mOriginalQueue;
     File mStateDir;
-    File mJournal;
+    @Nullable DataChangedJournal mJournal;
     BackupState mCurrentState;
     List<String> mPendingFullBackups;
     IBackupObserver mObserver;
@@ -142,9 +144,9 @@
 
     public PerformBackupTask(RefactoredBackupManagerService backupManagerService,
             IBackupTransport transport, String dirName,
-            ArrayList<BackupRequest> queue, File journal, IBackupObserver observer,
-            IBackupManagerMonitor monitor, List<String> pendingFullBackups,
-            boolean userInitiated, boolean nonIncremental) {
+            ArrayList<BackupRequest> queue, @Nullable DataChangedJournal journal,
+            IBackupObserver observer, IBackupManagerMonitor monitor,
+            List<String> pendingFullBackups, boolean userInitiated, boolean nonIncremental) {
         this.backupManagerService = backupManagerService;
         mTransport = transport;
         mOriginalQueue = queue;
diff --git a/services/backup/java/com/android/server/backup/internal/PerformInitializeTask.java b/services/backup/java/com/android/server/backup/internal/PerformInitializeTask.java
index 5a75b66..939b1ae 100644
--- a/services/backup/java/com/android/server/backup/internal/PerformInitializeTask.java
+++ b/services/backup/java/com/android/server/backup/internal/PerformInitializeTask.java
@@ -20,6 +20,8 @@
 
 import android.app.AlarmManager;
 import android.app.backup.BackupTransport;
+import android.app.backup.IBackupObserver;
+import android.os.RemoteException;
 import android.os.SystemClock;
 import android.util.EventLog;
 import android.util.Slog;
@@ -29,20 +31,43 @@
 import com.android.server.backup.RefactoredBackupManagerService;
 
 import java.io.File;
-import java.util.HashSet;
 
 public class PerformInitializeTask implements Runnable {
 
     private RefactoredBackupManagerService backupManagerService;
-    HashSet<String> mQueue;
+    String[] mQueue;
+    IBackupObserver mObserver;
 
-    PerformInitializeTask(RefactoredBackupManagerService backupManagerService,
-            HashSet<String> transportNames) {
+    public PerformInitializeTask(RefactoredBackupManagerService backupManagerService,
+            String[] transportNames, IBackupObserver observer) {
         this.backupManagerService = backupManagerService;
         mQueue = transportNames;
+        mObserver = observer;
+    }
+
+    private void notifyResult(String target, int status) {
+        try {
+            if (mObserver != null) {
+                mObserver.onResult(target, status);
+            }
+        } catch (RemoteException ignored) {
+            mObserver = null;       // don't try again
+        }
+    }
+
+    private void notifyFinished(int status) {
+        try {
+            if (mObserver != null) {
+                mObserver.backupFinished(status);
+            }
+        } catch (RemoteException ignored) {
+            mObserver = null;
+        }
     }
 
     public void run() {
+        // mWakelock is *acquired* when execution begins here
+        int result = BackupTransport.TRANSPORT_OK;
         try {
             for (String transportName : mQueue) {
                 IBackupTransport transport =
@@ -74,6 +99,7 @@
                     synchronized (backupManagerService.getQueueLock()) {
                         backupManagerService.recordInitPendingLocked(false, transportName);
                     }
+                    notifyResult(transportName, BackupTransport.TRANSPORT_OK);
                 } else {
                     // If this didn't work, requeue this one and try again
                     // after a suitable interval
@@ -82,6 +108,9 @@
                     synchronized (backupManagerService.getQueueLock()) {
                         backupManagerService.recordInitPendingLocked(true, transportName);
                     }
+                    notifyResult(transportName, status);
+                    result = status;
+
                     // do this via another alarm to make sure of the wakelock states
                     long delay = transport.requestBackupTime();
                     Slog.w(TAG, "Init failed on " + transportName + " resched in " + delay);
@@ -92,8 +121,10 @@
             }
         } catch (Exception e) {
             Slog.e(TAG, "Unexpected error performing init", e);
+            result = BackupTransport.TRANSPORT_ERROR;
         } finally {
             // Done; release the wakelock
+            notifyFinished(result);
             backupManagerService.getWakelock().release();
         }
     }
diff --git a/services/backup/java/com/android/server/backup/internal/RunInitializeReceiver.java b/services/backup/java/com/android/server/backup/internal/RunInitializeReceiver.java
index 1621a91..a6897d0 100644
--- a/services/backup/java/com/android/server/backup/internal/RunInitializeReceiver.java
+++ b/services/backup/java/com/android/server/backup/internal/RunInitializeReceiver.java
@@ -19,12 +19,10 @@
 import static com.android.server.backup.RefactoredBackupManagerService.DEBUG;
 import static com.android.server.backup.RefactoredBackupManagerService.RUN_INITIALIZE_ACTION;
 import static com.android.server.backup.RefactoredBackupManagerService.TAG;
-import static com.android.server.backup.internal.BackupHandler.MSG_RUN_INITIALIZE;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
-import android.os.Message;
 import android.util.Slog;
 
 import com.android.server.backup.RefactoredBackupManagerService;
@@ -44,13 +42,15 @@
                     Slog.v(TAG, "Running a device init");
                 }
 
+                String[] pendingInits = (String[]) backupManagerService.getPendingInits().toArray();
+                backupManagerService.clearPendingInits();
+                PerformInitializeTask initTask = new PerformInitializeTask(backupManagerService,
+                        pendingInits, null);
+
                 // Acquire the wakelock and pass it to the init thread.  it will
                 // be released once init concludes.
                 backupManagerService.getWakelock().acquire();
-
-                Message msg = backupManagerService.getBackupHandler().obtainMessage(
-                        MSG_RUN_INITIALIZE);
-                backupManagerService.getBackupHandler().sendMessage(msg);
+                backupManagerService.getBackupHandler().post(initTask);
             }
         }
     }
diff --git a/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java
index d5c62af..62ae065 100644
--- a/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java
+++ b/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java
@@ -16,6 +16,8 @@
 
 package com.android.server.backup.restore;
 
+import static com.android.server.backup.BackupPasswordManager.PBKDF_CURRENT;
+import static com.android.server.backup.BackupPasswordManager.PBKDF_FALLBACK;
 import static com.android.server.backup.RefactoredBackupManagerService.BACKUP_FILE_HEADER_MAGIC;
 import static com.android.server.backup.RefactoredBackupManagerService.BACKUP_FILE_VERSION;
 import static com.android.server.backup.RefactoredBackupManagerService.BACKUP_MANIFEST_FILENAME;
@@ -23,8 +25,6 @@
 import static com.android.server.backup.RefactoredBackupManagerService.DEBUG;
 import static com.android.server.backup.RefactoredBackupManagerService.MORE_DEBUG;
 import static com.android.server.backup.RefactoredBackupManagerService.OP_TYPE_RESTORE_WAIT;
-import static com.android.server.backup.RefactoredBackupManagerService.PBKDF_CURRENT;
-import static com.android.server.backup.RefactoredBackupManagerService.PBKDF_FALLBACK;
 import static com.android.server.backup.RefactoredBackupManagerService.SETTINGS_PACKAGE;
 import static com.android.server.backup.RefactoredBackupManagerService.SHARED_BACKUP_AGENT_PACKAGE;
 import static com.android.server.backup.RefactoredBackupManagerService.TAG;
@@ -610,7 +610,9 @@
                             // All set; now set up the IPC and launch the agent
                             setUpPipes();
                             mAgent = mBackupManagerService.bindToAgentSynchronous(mTargetApp,
-                                    ApplicationThreadConstants.BACKUP_MODE_RESTORE_FULL);
+                                    FullBackup.KEY_VALUE_DATA_TOKEN.equals(info.domain)
+                                            ? ApplicationThreadConstants.BACKUP_MODE_INCREMENTAL
+                                            : ApplicationThreadConstants.BACKUP_MODE_RESTORE_FULL);
                             mAgentPackage = pkg;
                         } catch (IOException e) {
                             // fall through to error handling
diff --git a/services/backup/java/com/android/server/backup/utils/AppBackupUtils.java b/services/backup/java/com/android/server/backup/utils/AppBackupUtils.java
index c033d98..4abf18a 100644
--- a/services/backup/java/com/android/server/backup/utils/AppBackupUtils.java
+++ b/services/backup/java/com/android/server/backup/utils/AppBackupUtils.java
@@ -26,6 +26,8 @@
 import android.os.Process;
 import android.util.Slog;
 
+import com.android.internal.util.ArrayUtils;
+
 /**
  * Utility methods wrapping operations on ApplicationInfo and PackageInfo.
  */
@@ -91,9 +93,18 @@
     }
 
     /**
-     * Old style: directly match the stored vs on device signature blocks.
+     * Returns whether the signatures stored {@param storedSigs}, coming from the source apk, match
+     * the signatures of the apk installed on the device, the target apk. If the target resides in
+     * the system partition we return true. Otherwise it's considered a match if both conditions
+     * hold:
+     *
+     * <ul>
+     *   <li>Source and target have at least one signature each
+     *   <li>Target contains all signatures in source
+     * </ul>
+     *
+     * Note that if {@param target} is null we return false.
      */
-    // TODO(b/37977154): Resolve questionable policies.
     public static boolean signaturesMatch(Signature[] storedSigs, PackageInfo target) {
         if (target == null) {
             return false;
@@ -111,24 +122,18 @@
             return true;
         }
 
-        // Allow unsigned apps, but not signed on one device and unsigned on the other
-        // TODO(b/37977154): is this the right policy?
         Signature[] deviceSigs = target.signatures;
         if (MORE_DEBUG) {
             Slog.v(TAG, "signaturesMatch(): stored=" + storedSigs + " device=" + deviceSigs);
         }
-        if ((storedSigs == null || storedSigs.length == 0)
-                && (deviceSigs == null || deviceSigs.length == 0)) {
-            return true;
-        }
-        // TODO(b/37977154): This allows empty stored signature, is this right?
-        if (storedSigs == null || deviceSigs == null) {
+
+        // Don't allow unsigned apps on either end
+        if (ArrayUtils.isEmpty(storedSigs) || ArrayUtils.isEmpty(deviceSigs)) {
             return false;
         }
 
-        // TODO(b/37977154): this demands that every stored signature match one
-        // that is present on device, and does not demand the converse.
-        // Is this this right policy?
+        // Signatures can be added over time, so the target-device apk needs to contain all the
+        // source-device apk signatures, but not necessarily the other way around.
         int nStored = storedSigs.length;
         int nDevice = deviceSigs.length;
 
diff --git a/services/backup/java/com/android/server/backup/utils/DataStreamCodec.java b/services/backup/java/com/android/server/backup/utils/DataStreamCodec.java
new file mode 100644
index 0000000..b1e226d
--- /dev/null
+++ b/services/backup/java/com/android/server/backup/utils/DataStreamCodec.java
@@ -0,0 +1,40 @@
+/*
+ * 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.backup.utils;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+/**
+ * Implements how to serialize a {@code T} to a {@link DataOutputStream} and how to deserialize a
+ * {@code T} from a {@link DataInputStream}.
+ *
+ * @param <T> Type of object to be serialized / deserialized.
+ */
+public interface DataStreamCodec<T> {
+    /**
+     * Serializes {@code t} to {@code dataOutputStream}.
+     */
+    void serialize(T t, DataOutputStream dataOutputStream) throws IOException;
+
+    /**
+     * Deserializes {@code t} from {@code dataInputStream}.
+     */
+    T deserialize(DataInputStream dataInputStream) throws IOException;
+}
+
diff --git a/services/backup/java/com/android/server/backup/utils/DataStreamFileCodec.java b/services/backup/java/com/android/server/backup/utils/DataStreamFileCodec.java
new file mode 100644
index 0000000..7753b03
--- /dev/null
+++ b/services/backup/java/com/android/server/backup/utils/DataStreamFileCodec.java
@@ -0,0 +1,78 @@
+/*
+ * 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.backup.utils;
+
+import java.io.BufferedOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Provides an interface for serializing an object to a file and deserializing it back again.
+ *
+ * <p>Serialization logic is implemented as a {@link DataStreamCodec}.
+ *
+ * @param <T> The type of object to serialize / deserialize.
+ */
+public final class DataStreamFileCodec<T> {
+    private final File mFile;
+    private final DataStreamCodec<T> mCodec;
+
+    /**
+     * Constructs an instance to serialize to or deserialize from the given file, with the given
+     * serialization / deserialization strategy.
+     */
+    public DataStreamFileCodec(File file, DataStreamCodec<T> codec) {
+        mFile = file;
+        mCodec = codec;
+    }
+
+    /**
+     * Deserializes a {@code T} from the file, automatically closing input streams.
+     *
+     * @return The deserialized object.
+     * @throws IOException if an IO error occurred.
+     */
+    public T deserialize() throws IOException {
+        try (
+            FileInputStream fileInputStream = new FileInputStream(mFile);
+            DataInputStream dataInputStream = new DataInputStream(fileInputStream)
+        ) {
+            return mCodec.deserialize(dataInputStream);
+        }
+    }
+
+    /**
+     * Serializes {@code t} to the file, automatically flushing and closing output streams.
+     *
+     * @param t The object to serialize.
+     * @throws IOException if an IO error occurs.
+     */
+    public void serialize(T t) throws IOException {
+        try (
+            FileOutputStream fileOutputStream = new FileOutputStream(mFile);
+            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
+            DataOutputStream dataOutputStream = new DataOutputStream(bufferedOutputStream)
+        ) {
+            mCodec.serialize(t, dataOutputStream);
+            dataOutputStream.flush();
+        }
+    }
+}
diff --git a/services/backup/java/com/android/server/backup/utils/PasswordUtils.java b/services/backup/java/com/android/server/backup/utils/PasswordUtils.java
index 12fc927..9c5e283 100644
--- a/services/backup/java/com/android/server/backup/utils/PasswordUtils.java
+++ b/services/backup/java/com/android/server/backup/utils/PasswordUtils.java
@@ -123,8 +123,7 @@
             int rounds) {
         try {
             SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(algorithm);
-            KeySpec
-                    ks = new PBEKeySpec(pwArray, salt, rounds, PBKDF2_KEY_SIZE);
+            KeySpec ks = new PBEKeySpec(pwArray, salt, rounds, PBKDF2_KEY_SIZE);
             return keyFactory.generateSecret(ks);
         } catch (InvalidKeySpecException e) {
             Slog.e(TAG, "Invalid key spec for PBKDF2!");
diff --git a/services/backup/java/com/android/server/backup/utils/SparseArrayUtils.java b/services/backup/java/com/android/server/backup/utils/SparseArrayUtils.java
new file mode 100644
index 0000000..954d714
--- /dev/null
+++ b/services/backup/java/com/android/server/backup/utils/SparseArrayUtils.java
@@ -0,0 +1,49 @@
+/*
+ * 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.backup.utils;
+
+import android.util.SparseArray;
+
+import java.util.HashSet;
+
+/**
+ * Helper functions for manipulating instances of {@link SparseArray}.
+ */
+public final class SparseArrayUtils {
+    // Statics only
+    private SparseArrayUtils() {}
+
+    /**
+     * Given a {@link SparseArray<HashSet>}, returns a new {@link HashSet} containing every element
+     * from every set in the array.
+     *
+     * @param sets The array of sets from which to take the union.
+     * @param <V> The type of element contained in the set.
+     * @return The complete set.
+     */
+    public static<V> HashSet<V> union(SparseArray<HashSet<V>> sets) {
+        HashSet<V> unionSet = new HashSet<>();
+        int n = sets.size();
+        for (int i = 0; i < n; i++) {
+            HashSet<V> ithSet = sets.valueAt(i);
+            if (ithSet != null) {
+                unionSet.addAll(ithSet);
+            }
+        }
+        return unionSet;
+    }
+}
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
index f47b0d3..f2f01cf 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
@@ -57,6 +57,7 @@
 import android.provider.Settings;
 import android.provider.SettingsStringUtil.ComponentNameSet;
 import android.text.BidiFormatter;
+import android.util.ArraySet;
 import android.util.AtomicFile;
 import android.util.ExceptionUtils;
 import android.util.Log;
@@ -83,6 +84,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.function.Function;
@@ -247,9 +249,9 @@
                 throws RemoteException {
             checkCallerIsSystemOr(callingPackage, userId);
             checkUsesFeature(callingPackage, getCallingUserId());
-            return CollectionUtils.map(
+            return new ArrayList<>(CollectionUtils.map(
                     readAllAssociations(userId, callingPackage),
-                    a -> a.deviceAddress);
+                    a -> a.deviceAddress));
         }
 
         //TODO also revoke notification access
@@ -495,20 +497,20 @@
                 new Association(userId, deviceAddress, priviledgedPackage)));
     }
 
-    private void updateAssociations(Function<List<Association>, List<Association>> update) {
+    private void updateAssociations(Function<Set<Association>, Set<Association>> update) {
         updateAssociations(update, getCallingUserId());
     }
 
-    private void updateAssociations(Function<List<Association>, List<Association>> update,
+    private void updateAssociations(Function<Set<Association>, Set<Association>> update,
             int userId) {
         final AtomicFile file = getStorageFileForUser(userId);
         synchronized (file) {
-            List<Association> associations = readAllAssociations(userId);
-            final List<Association> old = CollectionUtils.copyOf(associations);
+            Set<Association> associations = readAllAssociations(userId);
+            final Set<Association> old = CollectionUtils.copyOf(associations);
             associations = update.apply(associations);
             if (size(old) == size(associations)) return;
 
-            List<Association> finalAssociations = associations;
+            Set<Association> finalAssociations = associations;
             file.write((out) -> {
                 XmlSerializer xml = Xml.newSerializer();
                 try {
@@ -517,13 +519,12 @@
                     xml.startDocument(null, true);
                     xml.startTag(null, XML_TAG_ASSOCIATIONS);
 
-                    for (int i = 0; i < size(finalAssociations); i++) {
-                        Association association = finalAssociations.get(i);
+                    CollectionUtils.forEach(finalAssociations, association -> {
                         xml.startTag(null, XML_TAG_ASSOCIATION)
-                            .attribute(null, XML_ATTR_PACKAGE, association.companionAppPackage)
-                            .attribute(null, XML_ATTR_DEVICE, association.deviceAddress)
-                            .endTag(null, XML_TAG_ASSOCIATION);
-                    }
+                                .attribute(null, XML_ATTR_PACKAGE, association.companionAppPackage)
+                                .attribute(null, XML_ATTR_DEVICE, association.deviceAddress)
+                                .endTag(null, XML_TAG_ASSOCIATION);
+                    });
 
                     xml.endTag(null, XML_TAG_ASSOCIATIONS);
                     xml.endDocument();
@@ -545,17 +546,17 @@
     }
 
     @Nullable
-    private ArrayList<Association> readAllAssociations(int userId) {
+    private Set<Association> readAllAssociations(int userId) {
         return readAllAssociations(userId, null);
     }
 
     @Nullable
-    private ArrayList<Association> readAllAssociations(int userId, @Nullable String packageFilter) {
+    private Set<Association> readAllAssociations(int userId, @Nullable String packageFilter) {
         final AtomicFile file = getStorageFileForUser(userId);
 
         if (!file.getBaseFile().exists()) return null;
 
-        ArrayList<Association> result = null;
+        ArraySet<Association> result = null;
         final XmlPullParser parser = Xml.newPullParser();
         synchronized (file) {
             try (FileInputStream in = file.openRead()) {
@@ -627,12 +628,10 @@
         public int onCommand(String cmd) {
             switch (cmd) {
                 case "list": {
-                    ArrayList<Association> associations = readAllAssociations(getNextArgInt());
-                    for (int i = 0; i < size(associations); i++) {
-                        Association a = associations.get(i);
-                        getOutPrintWriter()
-                                .println(a.companionAppPackage + " " + a.deviceAddress);
-                    }
+                    CollectionUtils.forEach(
+                            readAllAssociations(getNextArgInt()),
+                            a -> getOutPrintWriter()
+                                    .println(a.companionAppPackage + " " + a.deviceAddress));
                 } break;
 
                 case "associate": {
diff --git a/services/core/Android.mk b/services/core/Android.mk
index 0d01c20..c90b402 100644
--- a/services/core/Android.mk
+++ b/services/core/Android.mk
@@ -25,8 +25,8 @@
     android.hidl.manager-V1.0-java
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
-    tzdata_shared2 \
-    tzdata_update2 \
+    time_zone_distro \
+    time_zone_distro_installer \
     android.hidl.base-V1.0-java-static \
     android.hardware.weaver-V1.0-java-static \
     android.hardware.biometrics.fingerprint-V2.1-java-static \
@@ -46,4 +46,16 @@
  -D jack.transformations.boost-locked-region-priority.request=com.android.server.am.ActivityManagerService\#boostPriorityForLockedSection,com.android.server.wm.WindowManagerService\#boostPriorityForLockedSection \
  -D jack.transformations.boost-locked-region-priority.reset=com.android.server.am.ActivityManagerService\#resetPriorityAfterLockedSection,com.android.server.wm.WindowManagerService\#resetPriorityAfterLockedSection
 
+LOCAL_JAR_PROCESSOR := lockedregioncodeinjection
+# Use = instead of := to delay evaluation of ${in} and ${out}
+LOCAL_JAR_PROCESSOR_ARGS = \
+ --targets \
+  "Lcom/android/server/am/ActivityManagerService;,Lcom/android/server/wm/WindowHashMap;" \
+ --pre \
+  "com/android/server/am/ActivityManagerService.boostPriorityForLockedSection,com/android/server/wm/WindowManagerService.boostPriorityForLockedSection" \
+ --post \
+  "com/android/server/am/ActivityManagerService.resetPriorityAfterLockedSection,com/android/server/wm/WindowManagerService.resetPriorityAfterLockedSection" \
+ -o ${out} \
+ -i ${in}
+
 include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java
index a15992d..d1cf025 100644
--- a/services/core/java/com/android/server/AlarmManagerService.java
+++ b/services/core/java/com/android/server/AlarmManagerService.java
@@ -32,7 +32,6 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.PermissionInfo;
@@ -85,6 +84,7 @@
 import static android.app.AlarmManager.ELAPSED_REALTIME_WAKEUP;
 import static android.app.AlarmManager.ELAPSED_REALTIME;
 
+import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.DumpUtils;
 import com.android.internal.util.LocalLog;
 
@@ -850,6 +850,7 @@
 
     static final class InFlight {
         final PendingIntent mPendingIntent;
+        final long mWhenElapsed;
         final IBinder mListener;
         final WorkSource mWorkSource;
         final int mUid;
@@ -862,6 +863,7 @@
                 WorkSource workSource, int uid, String alarmPkg, int alarmType, String tag,
                 long nowELAPSED) {
             mPendingIntent = pendingIntent;
+            mWhenElapsed = nowELAPSED;
             mListener = listener != null ? listener.asBinder() : null;
             mWorkSource = workSource;
             mUid = uid;
@@ -883,6 +885,7 @@
         public String toString() {
             return "InFlight{"
                     + "pendingIntent=" + mPendingIntent
+                    + ", when=" + mWhenElapsed
                     + ", workSource=" + mWorkSource
                     + ", uid=" + mUid
                     + ", tag=" + mTag
@@ -1567,6 +1570,10 @@
 
             pw.println();
             pw.print("  Broadcast ref count: "); pw.println(mBroadcastRefCount);
+            pw.print("  PendingIntent send count: "); pw.println(mSendCount);
+            pw.print("  PendingIntent finish count: "); pw.println(mSendFinishCount);
+            pw.print("  Listener send count: "); pw.println(mListenerCount);
+            pw.print("  Listener finish count: "); pw.println(mListenerFinishCount);
             pw.println();
 
             if (mInFlight.size() > 0) {
@@ -2893,11 +2900,10 @@
     }
 
     final class UidObserver extends IUidObserver.Stub {
-        @Override public void onUidStateChanged(int uid, int procState,
-                long procStateSeq) throws RemoteException {
+        @Override public void onUidStateChanged(int uid, int procState, long procStateSeq) {
         }
 
-        @Override public void onUidGone(int uid, boolean disabled) throws RemoteException {
+        @Override public void onUidGone(int uid, boolean disabled) {
             if (disabled) {
                 synchronized (mLock) {
                     removeForStoppedLocked(uid);
@@ -2905,16 +2911,19 @@
             }
         }
 
-        @Override public void onUidActive(int uid) throws RemoteException {
+        @Override public void onUidActive(int uid) {
         }
 
-        @Override public void onUidIdle(int uid, boolean disabled) throws RemoteException {
+        @Override public void onUidIdle(int uid, boolean disabled) {
             if (disabled) {
                 synchronized (mLock) {
                     removeForStoppedLocked(uid);
                 }
             }
         }
+
+        @Override public void onUidCachedChanged(int uid, boolean cached) {
+        }
     };
 
     private final BroadcastStats getStatsLocked(PendingIntent pi) {
@@ -2937,7 +2946,22 @@
         return bs;
     }
 
+    /**
+     * Canonical count of (operation.send() - onSendFinished()) and
+     * listener send/complete/timeout invocations.
+     * Guarded by the usual lock.
+     */
+    @GuardedBy("mLock")
+    private int mSendCount = 0;
+    @GuardedBy("mLock")
+    private int mSendFinishCount = 0;
+    @GuardedBy("mLock")
+    private int mListenerCount = 0;
+    @GuardedBy("mLock")
+    private int mListenerFinishCount = 0;
+
     class DeliveryTracker extends IAlarmCompleteListener.Stub implements PendingIntent.OnFinished {
+
         private InFlight removeLocked(PendingIntent pi, Intent intent) {
             for (int i = 0; i < mInFlight.size(); i++) {
                 if (mInFlight.get(i).mPendingIntent == pi) {
@@ -3024,7 +3048,7 @@
         @Override
         public void alarmComplete(IBinder who) {
             if (who == null) {
-                Slog.w(TAG, "Invalid alarmComplete: uid=" + Binder.getCallingUid()
+                mLog.w("Invalid alarmComplete: uid=" + Binder.getCallingUid()
                         + " pid=" + Binder.getCallingPid());
                 return;
             }
@@ -3039,6 +3063,7 @@
                             Slog.i(TAG, "alarmComplete() from " + who);
                         }
                         updateTrackingLocked(inflight);
+                        mListenerFinishCount++;
                     } else {
                         // Delivery timed out, and the timeout handling already took care of
                         // updating our tracking here, so we needn't do anything further.
@@ -3059,6 +3084,7 @@
         public void onSendFinished(PendingIntent pi, Intent intent, int resultCode,
                 String resultData, Bundle resultExtras) {
             synchronized (mLock) {
+                mSendFinishCount++;
                 updateTrackingLocked(removeLocked(pi, intent));
             }
         }
@@ -3075,10 +3101,12 @@
                         Slog.i(TAG, "Alarm listener " + who + " timed out in delivery");
                     }
                     updateTrackingLocked(inflight);
+                    mListenerFinishCount++;
                 } else {
                     if (DEBUG_LISTENER_CALLBACK) {
                         Slog.i(TAG, "Spurious timeout of listener " + who);
                     }
+                    mLog.w("Spurious timeout of listener " + who);
                 }
             }
         }
@@ -3089,6 +3117,7 @@
         public void deliverLocked(Alarm alarm, long nowELAPSED, boolean allowWhileIdle) {
             if (alarm.operation != null) {
                 // PendingIntent alarm
+                mSendCount++;
                 try {
                     alarm.operation.send(getContext(), 0,
                             mBackgroundIntent.putExtra(
@@ -3105,10 +3134,12 @@
                     // 'finished' callback won't be invoked.  We also don't need
                     // to do any wakelock or stats tracking, so we have nothing
                     // left to do here but go on to the next thing.
+                    mSendFinishCount++;
                     return;
                 }
             } else {
                 // Direct listener callback alarm
+                mListenerCount++;
                 try {
                     if (DEBUG_LISTENER_CALLBACK) {
                         Slog.v(TAG, "Alarm to uid=" + alarm.uid
@@ -3128,6 +3159,7 @@
                     // alarm was not possible, so we have no wakelock or timeout or
                     // stats management to do.  It threw before we posted the delayed
                     // timeout message, so we're done here.
+                    mListenerFinishCount++;
                     return;
                 }
             }
diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java
index c8e6e2e..29f8a11 100644
--- a/services/core/java/com/android/server/AppOpsService.java
+++ b/services/core/java/com/android/server/AppOpsService.java
@@ -16,6 +16,57 @@
 
 package com.android.server;
 
+import android.Manifest;
+import android.app.ActivityManager;
+import android.app.ActivityThread;
+import android.app.AppGlobals;
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManagerInternal;
+import android.content.pm.UserInfo;
+import android.media.AudioAttributes;
+import android.os.AsyncTask;
+import android.os.Binder;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Process;
+import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.os.ServiceManager;
+import android.os.ShellCallback;
+import android.os.ShellCommand;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.os.storage.StorageManagerInternal;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+import android.util.AtomicFile;
+import android.util.Log;
+import android.util.Slog;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.util.TimeUtils;
+import android.util.Xml;
+
+import com.android.internal.app.IAppOpsCallback;
+import com.android.internal.app.IAppOpsService;
+import com.android.internal.os.Zygote;
+import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.DumpUtils;
+import com.android.internal.util.FastXmlSerializer;
+import com.android.internal.util.Preconditions;
+import com.android.internal.util.XmlUtils;
+
+import libcore.util.EmptyArray;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.FileInputStream;
@@ -32,54 +83,6 @@
 import java.util.List;
 import java.util.Map;
 
-import android.Manifest;
-import android.app.ActivityManager;
-import android.app.ActivityThread;
-import android.app.AppGlobals;
-import android.app.AppOpsManager;
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.IPackageManager;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManagerInternal;
-import android.media.AudioAttributes;
-import android.os.AsyncTask;
-import android.os.Binder;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Process;
-import android.os.RemoteException;
-import android.os.ResultReceiver;
-import android.os.ServiceManager;
-import android.os.ShellCallback;
-import android.os.ShellCommand;
-import android.os.UserHandle;
-import android.os.storage.StorageManagerInternal;
-import android.util.ArrayMap;
-import android.util.ArraySet;
-import android.util.AtomicFile;
-import android.util.Log;
-import android.util.Slog;
-import android.util.SparseArray;
-import android.util.SparseIntArray;
-import android.util.TimeUtils;
-import android.util.Xml;
-
-import com.android.internal.app.IAppOpsService;
-import com.android.internal.app.IAppOpsCallback;
-import com.android.internal.os.Zygote;
-import com.android.internal.util.ArrayUtils;
-import com.android.internal.util.DumpUtils;
-import com.android.internal.util.FastXmlSerializer;
-import com.android.internal.util.Preconditions;
-import com.android.internal.util.XmlUtils;
-
-import libcore.util.EmptyArray;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlSerializer;
-
 public class AppOpsService extends IAppOpsService.Stub {
     static final String TAG = "AppOps";
     static final boolean DEBUG = false;
@@ -2526,38 +2529,56 @@
                 perUserRestrictions = new SparseArray<>();
             }
 
-            if (perUserRestrictions != null) {
-                boolean[] userRestrictions = perUserRestrictions.get(userId);
-                if (userRestrictions == null && restricted) {
-                    userRestrictions = new boolean[AppOpsManager._NUM_OP];
-                    perUserRestrictions.put(userId, userRestrictions);
-                }
-                if (userRestrictions != null && userRestrictions[code] != restricted) {
-                    userRestrictions[code] = restricted;
-                    if (!restricted && isDefault(userRestrictions)) {
-                        perUserRestrictions.remove(userId);
-                        userRestrictions = null;
-                    }
-                    changed = true;
-                }
+            int[] users;
+            if (userId == UserHandle.USER_ALL) {
+                List<UserInfo> liveUsers = UserManager.get(mContext).getUsers(false);
 
-                if (userRestrictions != null) {
-                    final boolean noExcludedPackages = ArrayUtils.isEmpty(excludedPackages);
-                    if (perUserExcludedPackages == null && !noExcludedPackages) {
-                        perUserExcludedPackages = new SparseArray<>();
+                users = new int[liveUsers.size()];
+                for (int i = 0; i < liveUsers.size(); i++) {
+                    users[i] = liveUsers.get(i).id;
+                }
+            } else {
+                users = new int[]{userId};
+            }
+
+            if (perUserRestrictions != null) {
+                int numUsers = users.length;
+
+                for (int i = 0; i < numUsers; i++) {
+                    int thisUserId = users[i];
+
+                    boolean[] userRestrictions = perUserRestrictions.get(thisUserId);
+                    if (userRestrictions == null && restricted) {
+                        userRestrictions = new boolean[AppOpsManager._NUM_OP];
+                        perUserRestrictions.put(thisUserId, userRestrictions);
                     }
-                    if (perUserExcludedPackages != null && !Arrays.equals(excludedPackages,
-                            perUserExcludedPackages.get(userId))) {
-                        if (noExcludedPackages) {
-                            perUserExcludedPackages.remove(userId);
-                            if (perUserExcludedPackages.size() <= 0) {
-                                perUserExcludedPackages = null;
-                            }
-                        } else {
-                            perUserExcludedPackages.put(userId, excludedPackages);
+                    if (userRestrictions != null && userRestrictions[code] != restricted) {
+                        userRestrictions[code] = restricted;
+                        if (!restricted && isDefault(userRestrictions)) {
+                            perUserRestrictions.remove(thisUserId);
+                            userRestrictions = null;
                         }
                         changed = true;
                     }
+
+                    if (userRestrictions != null) {
+                        final boolean noExcludedPackages = ArrayUtils.isEmpty(excludedPackages);
+                        if (perUserExcludedPackages == null && !noExcludedPackages) {
+                            perUserExcludedPackages = new SparseArray<>();
+                        }
+                        if (perUserExcludedPackages != null && !Arrays.equals(excludedPackages,
+                                perUserExcludedPackages.get(thisUserId))) {
+                            if (noExcludedPackages) {
+                                perUserExcludedPackages.remove(thisUserId);
+                                if (perUserExcludedPackages.size() <= 0) {
+                                    perUserExcludedPackages = null;
+                                }
+                            } else {
+                                perUserExcludedPackages.put(thisUserId, excludedPackages);
+                            }
+                            changed = true;
+                        }
+                    }
                 }
             }
 
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 5c4826f..6e8c0d4 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -19,6 +19,7 @@
 import static android.Manifest.permission.RECEIVE_DATA_ACTIVITY_CHANGE;
 import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
 import static android.net.ConnectivityManager.NETID_UNSET;
+import static android.net.ConnectivityManager.TYPE_ETHERNET;
 import static android.net.ConnectivityManager.TYPE_NONE;
 import static android.net.ConnectivityManager.TYPE_VPN;
 import static android.net.ConnectivityManager.getNetworkTypeName;
@@ -40,7 +41,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.database.ContentObserver;
 import android.net.ConnectivityManager;
@@ -52,10 +52,10 @@
 import android.net.INetworkStatsService;
 import android.net.LinkProperties;
 import android.net.LinkProperties.CompareResult;
+import android.net.MatchAllNetworkSpecifier;
 import android.net.Network;
 import android.net.NetworkAgent;
 import android.net.NetworkCapabilities;
-import android.net.MatchAllNetworkSpecifier;
 import android.net.NetworkConfig;
 import android.net.NetworkInfo;
 import android.net.NetworkInfo.DetailedState;
@@ -91,6 +91,7 @@
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.ResultReceiver;
+import android.os.ServiceManager;
 import android.os.ServiceSpecificException;
 import android.os.SystemClock;
 import android.os.UserHandle;
@@ -124,13 +125,12 @@
 import com.android.internal.util.MessageUtils;
 import com.android.internal.util.WakeupMessage;
 import com.android.internal.util.XmlUtils;
-import com.android.server.LocalServices;
 import com.android.server.am.BatteryStatsService;
 import com.android.server.connectivity.DataConnectionStats;
 import com.android.server.connectivity.KeepaliveTracker;
+import com.android.server.connectivity.LingerMonitor;
 import com.android.server.connectivity.MockableSystemProperties;
 import com.android.server.connectivity.Nat464Xlat;
-import com.android.server.connectivity.LingerMonitor;
 import com.android.server.connectivity.NetworkAgentInfo;
 import com.android.server.connectivity.NetworkDiagnostics;
 import com.android.server.connectivity.NetworkMonitor;
@@ -139,8 +139,8 @@
 import com.android.server.connectivity.PacManager;
 import com.android.server.connectivity.PermissionMonitor;
 import com.android.server.connectivity.Tethering;
-import com.android.server.connectivity.tethering.TetheringDependencies;
 import com.android.server.connectivity.Vpn;
+import com.android.server.connectivity.tethering.TetheringDependencies;
 import com.android.server.net.BaseNetworkObserver;
 import com.android.server.net.LockdownVpnTracker;
 import com.android.server.net.NetworkPolicyManagerInternal;
@@ -458,6 +458,11 @@
 
     private static final int MAX_WAKELOCK_LOGS = 20;
     private final LocalLog mWakelockLogs = new LocalLog(MAX_WAKELOCK_LOGS);
+    private int mTotalWakelockAcquisitions = 0;
+    private int mTotalWakelockReleases = 0;
+    private long mTotalWakelockDurationMs = 0;
+    private long mMaxWakelockDurationMs = 0;
+    private long mLastWakeLockAcquireTimestamp = 0;
 
     // Array of <Network,ReadOnlyLocalLogs> tracking network validation and results
     private static final int MAX_VALIDATION_LOGS = 10;
@@ -778,6 +783,13 @@
             mNetworksDefined++;  // used only in the log() statement below.
         }
 
+        // Do the same for Ethernet, since it's often not specified in the configs, although many
+        // devices can use it via USB host adapters.
+        if (mNetConfigs[TYPE_ETHERNET] == null && hasService(Context.ETHERNET_SERVICE)) {
+            mLegacyTypeTracker.addSupportedType(TYPE_ETHERNET);
+            mNetworksDefined++;
+        }
+
         if (VDBG) log("mNetworksDefined=" + mNetworksDefined);
 
         mProtectedNetworks = new ArrayList<Integer>();
@@ -957,7 +969,7 @@
         if (!mLockdownEnabled) {
             int user = UserHandle.getUserId(uid);
             synchronized (mVpns) {
-                Vpn vpn = mVpns.get(user);
+                Vpn vpn = getVpn(user);
                 if (vpn != null && vpn.appliesToUid(uid)) {
                     return vpn.getUnderlyingNetworks();
                 }
@@ -1005,7 +1017,7 @@
             return false;
         }
         synchronized (mVpns) {
-            final Vpn vpn = mVpns.get(UserHandle.getUserId(uid));
+            final Vpn vpn = getVpn(UserHandle.getUserId(uid));
             if (vpn != null && vpn.isBlockingUid(uid)) {
                 return true;
             }
@@ -1036,8 +1048,7 @@
     /**
      * Apply any relevant filters to {@link NetworkState} for the given UID. For
      * example, this may mark the network as {@link DetailedState#BLOCKED} based
-     * on {@link #isNetworkWithLinkPropertiesBlocked}, or
-     * {@link NetworkInfo#isMetered()} based on network policies.
+     * on {@link #isNetworkWithLinkPropertiesBlocked}.
      */
     private void filterNetworkStateForUid(NetworkState state, int uid, boolean ignoreBlocked) {
         if (state == null || state.networkInfo == null || state.linkProperties == null) return;
@@ -1048,15 +1059,6 @@
         if (mLockdownTracker != null) {
             mLockdownTracker.augmentNetworkInfo(state.networkInfo);
         }
-
-        // TODO: apply metered state closer to NetworkAgentInfo
-        final long token = Binder.clearCallingIdentity();
-        try {
-            state.networkInfo.setMetered(mPolicyManager.isNetworkMetered(state));
-        } catch (RemoteException e) {
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
     }
 
     /**
@@ -1092,7 +1094,7 @@
         final int user = UserHandle.getUserId(uid);
         int vpnNetId = NETID_UNSET;
         synchronized (mVpns) {
-            final Vpn vpn = mVpns.get(user);
+            final Vpn vpn = getVpn(user);
             if (vpn != null && vpn.appliesToUid(uid)) vpnNetId = vpn.getNetId();
         }
         NetworkAgentInfo nai;
@@ -1222,7 +1224,7 @@
 
         if (!mLockdownEnabled) {
             synchronized (mVpns) {
-                Vpn vpn = mVpns.get(userId);
+                Vpn vpn = getVpn(userId);
                 if (vpn != null) {
                     Network[] networks = vpn.getUnderlyingNetworks();
                     if (networks != null) {
@@ -1326,30 +1328,35 @@
     }
 
     @Override
+    @Deprecated
     public NetworkQuotaInfo getActiveNetworkQuotaInfo() {
-        enforceAccessPermission();
-        final int uid = Binder.getCallingUid();
-        final long token = Binder.clearCallingIdentity();
-        try {
-            final NetworkState state = getUnfilteredActiveNetworkState(uid);
-            if (state.networkInfo != null) {
-                try {
-                    return mPolicyManager.getNetworkQuotaInfo(state);
-                } catch (RemoteException e) {
-                }
-            }
-            return null;
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
+        Log.w(TAG, "Shame on UID " + Binder.getCallingUid()
+                + " for calling the hidden API getNetworkQuotaInfo(). Shame!");
+        return new NetworkQuotaInfo();
     }
 
     @Override
     public boolean isActiveNetworkMetered() {
         enforceAccessPermission();
 
-        final NetworkInfo info = getActiveNetworkInfo();
-        return (info != null) ? info.isMetered() : false;
+        return isActiveNetworkMeteredCommon(Binder.getCallingUid());
+    }
+
+    @Override
+    public boolean isActiveNetworkMeteredForUid(int uid) {
+        enforceConnectivityInternalPermission();
+
+        return isActiveNetworkMeteredCommon(uid);
+    }
+
+    private boolean isActiveNetworkMeteredCommon(int uid) {
+        final NetworkCapabilities caps = getUnfilteredActiveNetworkState(uid).networkCapabilities;
+        if (caps != null) {
+            return !caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
+        } else {
+            // Always return the most conservative value
+            return true;
+        }
     }
 
     private INetworkManagementEventObserver mDataActivityObserver = new BaseNetworkObserver() {
@@ -1510,6 +1517,12 @@
         ConnectivityManager.enforceChangePermission(mContext);
     }
 
+    private void enforceSettingsPermission() {
+        mContext.enforceCallingOrSelfPermission(
+                android.Manifest.permission.NETWORK_SETTINGS,
+                "ConnectivityService");
+    }
+
     private void enforceTetherAccessPermission() {
         mContext.enforceCallingOrSelfPermission(
                 android.Manifest.permission.ACCESS_NETWORK_STATE,
@@ -1959,6 +1972,14 @@
             pw.println();
             pw.println("NetTransition WakeLock activity (most recent first):");
             pw.increaseIndent();
+            pw.println("total acquisitions: " + mTotalWakelockAcquisitions);
+            pw.println("total releases: " + mTotalWakelockReleases);
+            pw.println("cumulative duration: " + (mTotalWakelockDurationMs / 1000) + "s");
+            pw.println("longest duration: " + (mMaxWakelockDurationMs / 1000) + "s");
+            if (mTotalWakelockAcquisitions > mTotalWakelockReleases) {
+                long duration = SystemClock.elapsedRealtime() - mLastWakeLockAcquireTimestamp;
+                pw.println("currently holding WakeLock for: " + (duration / 1000) + "s");
+            }
             mWakelockLogs.reverseDump(fd, pw, args);
             pw.decreaseIndent();
         }
@@ -2023,16 +2044,7 @@
                     break;
                 }
                 case NetworkAgent.EVENT_NETWORK_PROPERTIES_CHANGED: {
-                    if (VDBG) {
-                        log("Update of LinkProperties for " + nai.name() +
-                                "; created=" + nai.created +
-                                "; everConnected=" + nai.everConnected);
-                    }
-                    LinkProperties oldLp = nai.linkProperties;
-                    synchronized (nai) {
-                        nai.linkProperties = (LinkProperties)msg.obj;
-                    }
-                    if (nai.everConnected) updateLinkProperties(nai, oldLp);
+                    handleUpdateLinkProperties(nai, (LinkProperties) msg.obj);
                     break;
                 }
                 case NetworkAgent.EVENT_NETWORK_INFO_CHANGED: {
@@ -2213,7 +2225,7 @@
                 // A network factory has connected.  Send it all current NetworkRequests.
                 for (NetworkRequestInfo nri : mNetworkRequests.values()) {
                     if (nri.request.isListen()) continue;
-                    NetworkAgentInfo nai = mNetworkForRequestId.get(nri.request.requestId);
+                    NetworkAgentInfo nai = getNetworkForRequest(nri.request.requestId);
                     ac.sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK,
                             (nai != null ? nai.getCurrentScore() : 0), 0, nri.request);
                 }
@@ -2281,7 +2293,7 @@
             }
             nai.networkMonitor.sendMessage(NetworkMonitor.CMD_NETWORK_DISCONNECTED);
             mNetworkAgentInfos.remove(msg.replyTo);
-            updateClat(null, nai.linkProperties, nai);
+            nai.maybeStopClat();
             synchronized (mNetworkForNetId) {
                 // Remove the NetworkAgent, but don't mark the netId as
                 // available until we've told netd to delete it below.
@@ -2290,9 +2302,9 @@
             // Remove all previously satisfied requests.
             for (int i = 0; i < nai.numNetworkRequests(); i++) {
                 NetworkRequest request = nai.requestAt(i);
-                NetworkAgentInfo currentNetwork = mNetworkForRequestId.get(request.requestId);
+                NetworkAgentInfo currentNetwork = getNetworkForRequest(request.requestId);
                 if (currentNetwork != null && currentNetwork.network.netId == nai.network.netId) {
-                    mNetworkForRequestId.remove(request.requestId);
+                    clearNetworkForRequest(request.requestId);
                     sendUpdatedScoreToFactories(request, 0);
                 }
             }
@@ -2368,7 +2380,7 @@
             }
         }
         rematchAllNetworksAndRequests(null, 0);
-        if (nri.request.isRequest() && mNetworkForRequestId.get(nri.request.requestId) == null) {
+        if (nri.request.isRequest() && getNetworkForRequest(nri.request.requestId) == null) {
             sendUpdatedScoreToFactories(nri.request, 0);
         }
     }
@@ -2423,7 +2435,7 @@
                     // 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.
-                    mNetworkForRequestId.get(nri.request.requestId).getCurrentScore() <
+                    getNetworkForRequest(nri.request.requestId).getCurrentScore() <
                             nai.getCurrentScoreAsValidated())) {
                 return false;
             }
@@ -2450,7 +2462,7 @@
         if (mNetworkRequests.get(nri.request) == null) {
             return;
         }
-        if (mNetworkForRequestId.get(nri.request.requestId) != null) {
+        if (getNetworkForRequest(nri.request.requestId) != null) {
             return;
         }
         if (VDBG || (DBG && nri.request.isRequest())) {
@@ -2490,7 +2502,7 @@
         mNetworkRequestInfoLogs.log("RELEASE " + nri);
         if (nri.request.isRequest()) {
             boolean wasKept = false;
-            NetworkAgentInfo nai = mNetworkForRequestId.get(nri.request.requestId);
+            NetworkAgentInfo nai = getNetworkForRequest(nri.request.requestId);
             if (nai != null) {
                 boolean wasBackgroundNetwork = nai.isBackgroundNetwork();
                 nai.removeRequest(nri.request.requestId);
@@ -2507,7 +2519,7 @@
                 } else {
                     wasKept = true;
                 }
-                mNetworkForRequestId.remove(nri.request.requestId);
+                clearNetworkForRequest(nri.request.requestId);
                 if (!wasBackgroundNetwork && nai.isBackgroundNetwork()) {
                     // Went from foreground to background.
                     updateCapabilities(nai.getCurrentScore(), nai, nai.networkCapabilities);
@@ -2759,7 +2771,8 @@
         enforceAccessPermission();
 
         NetworkAgentInfo nai = getNetworkAgentInfoForNetwork(network);
-        if (nai != null && !nai.networkInfo.isMetered()) {
+        if (nai != null && nai.networkCapabilities
+                .hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)) {
             return ConnectivityManager.MULTIPATH_PREFERENCE_UNMETERED;
         }
 
@@ -2970,12 +2983,16 @@
         return mTethering.getTetheredDhcpRanges();
     }
 
+    @Override
+    public boolean isTetheringSupported(String callerPkg) {
+        ConnectivityManager.enforceTetherChangePermission(mContext, callerPkg);
+        return isTetheringSupported();
+    }
+
     // if ro.tether.denied = true we default to no tethering
     // gservices could set the secure setting to 1 though to enable it on a build where it
     // had previously been turned off.
-    @Override
-    public boolean isTetheringSupported() {
-        enforceTetherAccessPermission();
+    private boolean isTetheringSupported() {
         int defaultVal = encodeBool(!mSystemProperties.get("ro.tether.denied").equals("true"));
         boolean tetherSupported = toBool(Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.TETHER_SUPPORTED, defaultVal));
@@ -3021,6 +3038,8 @@
                 return;
             }
             mNetTransitionWakeLock.acquire();
+            mLastWakeLockAcquireTimestamp = SystemClock.elapsedRealtime();
+            mTotalWakelockAcquisitions++;
         }
         mWakelockLogs.log("ACQUIRE for " + forWhom);
         Message msg = mHandler.obtainMessage(EVENT_EXPIRE_NET_TRANSITION_WAKELOCK);
@@ -3053,6 +3072,10 @@
                 return;
             }
             mNetTransitionWakeLock.release();
+            long lockDuration = SystemClock.elapsedRealtime() - mLastWakeLockAcquireTimestamp;
+            mTotalWakelockDurationMs += lockDuration;
+            mMaxWakelockDurationMs = Math.max(mMaxWakelockDurationMs, lockDuration);
+            mTotalWakelockReleases++;
         }
         mWakelockLogs.log(String.format("RELEASE (%s)", event));
     }
@@ -3401,7 +3424,7 @@
         throwIfLockdownEnabled();
 
         synchronized (mVpns) {
-            Vpn vpn = mVpns.get(userId);
+            Vpn vpn = getVpn(userId);
             if (vpn != null) {
                 return vpn.prepare(oldPackage, newPackage);
             } else {
@@ -3428,7 +3451,7 @@
         enforceCrossUserPermission(userId);
 
         synchronized (mVpns) {
-            Vpn vpn = mVpns.get(userId);
+            Vpn vpn = getVpn(userId);
             if (vpn != null) {
                 vpn.setPackageAuthorization(packageName, authorized);
             }
@@ -3447,7 +3470,7 @@
         throwIfLockdownEnabled();
         int user = UserHandle.getUserId(Binder.getCallingUid());
         synchronized (mVpns) {
-            return mVpns.get(user).establish(config);
+            return getVpn(user).establish(config);
         }
     }
 
@@ -3464,7 +3487,7 @@
         }
         int user = UserHandle.getUserId(Binder.getCallingUid());
         synchronized (mVpns) {
-            mVpns.get(user).startLegacyVpn(profile, mKeyStore, egress);
+            getVpn(user).startLegacyVpn(profile, mKeyStore, egress);
         }
     }
 
@@ -3478,7 +3501,7 @@
         enforceCrossUserPermission(userId);
 
         synchronized (mVpns) {
-            return mVpns.get(userId).getLegacyVpnInfo();
+            return getVpn(userId).getLegacyVpnInfo();
         }
     }
 
@@ -3542,7 +3565,7 @@
     public VpnConfig getVpnConfig(int userId) {
         enforceCrossUserPermission(userId);
         synchronized (mVpns) {
-            Vpn vpn = mVpns.get(userId);
+            Vpn vpn = getVpn(userId);
             if (vpn != null) {
                 return vpn.getVpnConfig();
             } else {
@@ -3576,7 +3599,7 @@
             }
             int user = UserHandle.getUserId(Binder.getCallingUid());
             synchronized (mVpns) {
-                Vpn vpn = mVpns.get(user);
+                Vpn vpn = getVpn(user);
                 if (vpn == null) {
                     Slog.w(TAG, "VPN for user " + user + " not ready yet. Skipping lockdown");
                     return false;
@@ -3623,7 +3646,7 @@
      */
     private boolean startAlwaysOnVpn(int userId) {
         synchronized (mVpns) {
-            Vpn vpn = mVpns.get(userId);
+            Vpn vpn = getVpn(userId);
             if (vpn == null) {
                 // Shouldn't happen as all codepaths that point here should have checked the Vpn
                 // exists already.
@@ -3636,6 +3659,21 @@
     }
 
     @Override
+    public boolean isAlwaysOnVpnPackageSupported(int userId, String packageName) {
+        enforceSettingsPermission();
+        enforceCrossUserPermission(userId);
+
+        synchronized (mVpns) {
+            Vpn vpn = getVpn(userId);
+            if (vpn == null) {
+                Slog.w(TAG, "User " + userId + " has no Vpn configuration");
+                return false;
+            }
+            return vpn.isAlwaysOnPackageSupported(packageName);
+        }
+    }
+
+    @Override
     public boolean setAlwaysOnVpnPackage(int userId, String packageName, boolean lockdown) {
         enforceConnectivityInternalPermission();
         enforceCrossUserPermission(userId);
@@ -3646,7 +3684,7 @@
         }
 
         synchronized (mVpns) {
-            Vpn vpn = mVpns.get(userId);
+            Vpn vpn = getVpn(userId);
             if (vpn == null) {
                 Slog.w(TAG, "User " + userId + " has no Vpn configuration");
                 return false;
@@ -3668,7 +3706,7 @@
         enforceCrossUserPermission(userId);
 
         synchronized (mVpns) {
-            Vpn vpn = mVpns.get(userId);
+            Vpn vpn = getVpn(userId);
             if (vpn == null) {
                 Slog.w(TAG, "User " + userId + " has no Vpn configuration");
                 return null;
@@ -3784,6 +3822,9 @@
     public void setProvisioningNotificationVisible(boolean visible, int networkType,
             String action) {
         enforceConnectivityInternalPermission();
+        if (!ConnectivityManager.isNetworkTypeValid(networkType)) {
+            return;
+        }
         final long ident = Binder.clearCallingIdentity();
         try {
             // Concatenate the range of types onto the range of NetIDs.
@@ -3811,22 +3852,38 @@
 
     private void onUserStart(int userId) {
         synchronized (mVpns) {
-            Vpn userVpn = mVpns.get(userId);
+            Vpn userVpn = getVpn(userId);
             if (userVpn != null) {
                 loge("Starting user already has a VPN");
                 return;
             }
             userVpn = new Vpn(mHandler.getLooper(), mContext, mNetd, userId);
-            mVpns.put(userId, userVpn);
+            setVpn(userId, userVpn);
         }
         if (mUserManager.getUserInfo(userId).isPrimary() && LockdownVpnTracker.isEnabled()) {
             updateLockdownVpn();
         }
     }
 
+    /** @hide */
+    @VisibleForTesting
+    Vpn getVpn(int userId) {
+        synchronized (mVpns) {
+            return mVpns.get(userId);
+        }
+    }
+
+    /** @hide */
+    @VisibleForTesting
+    void setVpn(int userId, Vpn userVpn) {
+        synchronized (mVpns) {
+            mVpns.put(userId, userVpn);
+        }
+    }
+
     private void onUserStop(int userId) {
         synchronized (mVpns) {
-            Vpn userVpn = mVpns.get(userId);
+            Vpn userVpn = getVpn(userId);
             if (userVpn == null) {
                 loge("Stopped user has no VPN");
                 return;
@@ -4275,7 +4332,8 @@
      * and the are the highest scored network available.
      * the are keyed off the Requests requestId.
      */
-    // TODO: Yikes, this is accessed on multiple threads: add synchronization.
+    // NOTE: Accessed on multiple threads, must be synchronized on itself.
+    @GuardedBy("mNetworkForRequestId")
     private final SparseArray<NetworkAgentInfo> mNetworkForRequestId =
             new SparseArray<NetworkAgentInfo>();
 
@@ -4305,8 +4363,26 @@
     // priority networks like Wi-Fi are active.
     private final NetworkRequest mDefaultMobileDataRequest;
 
+    private NetworkAgentInfo getNetworkForRequest(int requestId) {
+        synchronized (mNetworkForRequestId) {
+            return mNetworkForRequestId.get(requestId);
+        }
+    }
+
+    private void clearNetworkForRequest(int requestId) {
+        synchronized (mNetworkForRequestId) {
+            mNetworkForRequestId.remove(requestId);
+        }
+    }
+
+    private void setNetworkForRequest(int requestId, NetworkAgentInfo nai) {
+        synchronized (mNetworkForRequestId) {
+            mNetworkForRequestId.put(requestId, nai);
+        }
+    }
+
     private NetworkAgentInfo getDefaultNetwork() {
-        return mNetworkForRequestId.get(mDefaultRequest.requestId);
+        return getNetworkForRequest(mDefaultRequest.requestId);
     }
 
     private boolean isDefaultNetwork(NetworkAgentInfo nai) {
@@ -4322,11 +4398,13 @@
             int currentScore, NetworkMisc networkMisc) {
         enforceConnectivityInternalPermission();
 
+        LinkProperties lp = new LinkProperties(linkProperties);
+        lp.ensureDirectlyConnectedRoutes();
         // TODO: Instead of passing mDefaultRequest, provide an API to determine whether a Network
         // satisfies mDefaultRequest.
         final NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(),
-                new Network(reserveNetId()), new NetworkInfo(networkInfo), new LinkProperties(
-                linkProperties), new NetworkCapabilities(networkCapabilities), currentScore,
+                new Network(reserveNetId()), new NetworkInfo(networkInfo), lp,
+                new NetworkCapabilities(networkCapabilities), currentScore,
                 mContext, mTrackerHandler, new NetworkMisc(networkMisc), mDefaultRequest, this);
         synchronized (this) {
             nai.networkMonitor.systemReady = mSystemReady;
@@ -4371,7 +4449,8 @@
         updateRoutes(newLp, oldLp, netId);
         updateDnses(newLp, oldLp, netId);
 
-        updateClat(newLp, oldLp, networkAgent);
+        // Start or stop clat accordingly to network state.
+        networkAgent.updateClat(mNetd);
         if (isDefaultNetwork(networkAgent)) {
             handleApplyDefaultProxy(newLp.getHttpProxy());
         } else {
@@ -4386,18 +4465,6 @@
         mKeepaliveTracker.handleCheckKeepalivesStillValid(networkAgent);
     }
 
-    private void updateClat(LinkProperties newLp, LinkProperties oldLp, NetworkAgentInfo nai) {
-        final boolean wasRunningClat = nai.clatd != null && nai.clatd.isStarted();
-        final boolean shouldRunClat = Nat464Xlat.requiresClat(nai);
-
-        if (!wasRunningClat && shouldRunClat) {
-            nai.clatd = new Nat464Xlat(mContext, mNetd, mTrackerHandler, nai);
-            nai.clatd.start();
-        } else if (wasRunningClat && !shouldRunClat) {
-            nai.clatd.stop();
-        }
-    }
-
     private void wakeupModifyInterface(String iface, NetworkCapabilities caps, boolean add) {
         // Marks are only available on WiFi interaces. Checking for
         // marks on unsupported interfaces is harmless.
@@ -4571,11 +4638,15 @@
      */
     private void updateCapabilities(
             int oldScore, NetworkAgentInfo nai, NetworkCapabilities networkCapabilities) {
-        // Sanity check: a NetworkAgent should not change its static capabilities or parameters.
-        if (nai.everConnected) {
+        // Once a NetworkAgent is connected, complain if some immutable capabilities are removed.
+        if (nai.everConnected && !nai.networkCapabilities.satisfiedByImmutableNetworkCapabilities(
+                networkCapabilities)) {
+            // TODO: consider not complaining when a network agent degrade its capabilities if this
+            // does not cause any request (that is not a listen) currently matching that agent to
+            // stop being matched by the updated agent.
             String diff = nai.networkCapabilities.describeImmutableDifferences(networkCapabilities);
             if (!TextUtils.isEmpty(diff)) {
-                Slog.wtf(TAG, "BUG: " + nai + " changed immutable capabilities:" + diff);
+                Slog.wtf(TAG, "BUG: " + nai + " lost immutable capabilities:" + diff);
             }
         }
 
@@ -4628,6 +4699,27 @@
         }
     }
 
+    public void handleUpdateLinkProperties(NetworkAgentInfo nai, LinkProperties newLp) {
+        if (mNetworkForNetId.get(nai.network.netId) != nai) {
+            // Ignore updates for disconnected networks
+            return;
+        }
+        // newLp is already a defensive copy.
+        newLp.ensureDirectlyConnectedRoutes();
+        if (VDBG) {
+            log("Update of LinkProperties for " + nai.name() +
+                    "; created=" + nai.created +
+                    "; everConnected=" + nai.everConnected);
+        }
+        LinkProperties oldLp = nai.linkProperties;
+        synchronized (nai) {
+            nai.linkProperties = newLp;
+        }
+        if (nai.everConnected) {
+            updateLinkProperties(nai, oldLp);
+        }
+    }
+
     private void sendUpdatedScoreToFactories(NetworkAgentInfo nai) {
         for (int i = 0; i < nai.numNetworkRequests(); i++) {
             NetworkRequest nr = nai.requestAt(i);
@@ -4849,7 +4941,7 @@
             // requests or not, and doesn't affect the network's score.
             if (nri.request.isListen()) continue;
 
-            final NetworkAgentInfo currentNetwork = mNetworkForRequestId.get(nri.request.requestId);
+            final NetworkAgentInfo currentNetwork = getNetworkForRequest(nri.request.requestId);
             final boolean satisfies = newNetwork.satisfies(nri.request);
             if (newNetwork == currentNetwork && satisfies) {
                 if (VDBG) {
@@ -4881,7 +4973,7 @@
                         if (VDBG) log("   accepting network in place of null");
                     }
                     newNetwork.unlingerRequest(nri.request);
-                    mNetworkForRequestId.put(nri.request.requestId, newNetwork);
+                    setNetworkForRequest(nri.request.requestId, newNetwork);
                     if (!newNetwork.addRequest(nri.request)) {
                         Slog.wtf(TAG, "BUG: " + newNetwork.name() + " already has " + nri.request);
                     }
@@ -4915,7 +5007,7 @@
                 }
                 newNetwork.removeRequest(nri.request.requestId);
                 if (currentNetwork == newNetwork) {
-                    mNetworkForRequestId.remove(nri.request.requestId);
+                    clearNetworkForRequest(nri.request.requestId);
                     sendUpdatedScoreToFactories(nri.request, 0);
                 } else {
                     Slog.wtf(TAG, "BUG: Removing request " + nri.request.requestId + " from " +
@@ -4944,12 +5036,12 @@
         if (!newNetwork.networkCapabilities.equalRequestableCapabilities(nc)) {
             Slog.wtf(TAG, String.format(
                     "BUG: %s changed requestable capabilities during rematch: %s -> %s",
-                    nc, newNetwork.networkCapabilities));
+                    newNetwork.name(), nc, newNetwork.networkCapabilities));
         }
         if (newNetwork.getCurrentScore() != score) {
             Slog.wtf(TAG, String.format(
                     "BUG: %s changed score during rematch: %d -> %d",
-                    score, newNetwork.getCurrentScore()));
+                   newNetwork.name(), score, newNetwork.getCurrentScore()));
         }
 
         // Second pass: process all listens.
@@ -5363,7 +5455,7 @@
         throwIfLockdownEnabled();
         int user = UserHandle.getUserId(Binder.getCallingUid());
         synchronized (mVpns) {
-            return mVpns.get(user).addAddress(address, prefixLength);
+            return getVpn(user).addAddress(address, prefixLength);
         }
     }
 
@@ -5372,7 +5464,7 @@
         throwIfLockdownEnabled();
         int user = UserHandle.getUserId(Binder.getCallingUid());
         synchronized (mVpns) {
-            return mVpns.get(user).removeAddress(address, prefixLength);
+            return getVpn(user).removeAddress(address, prefixLength);
         }
     }
 
@@ -5382,7 +5474,7 @@
         int user = UserHandle.getUserId(Binder.getCallingUid());
         boolean success;
         synchronized (mVpns) {
-            success = mVpns.get(user).setUnderlyingNetworks(networks);
+            success = getVpn(user).setUnderlyingNetworks(networks);
         }
         if (success) {
             notifyIfacesChangedForNetworkStats();
@@ -5392,6 +5484,7 @@
 
     @Override
     public String getCaptivePortalServerUrl() {
+        enforceConnectivityInternalPermission();
         return NetworkMonitor.getCaptivePortalServerHttpUrl(mContext);
     }
 
@@ -5489,6 +5582,11 @@
         return new WakeupMessage(c, h, s, cmd, 0, 0, obj);
     }
 
+    @VisibleForTesting
+    public boolean hasService(String name) {
+        return ServiceManager.checkService(name) != null;
+    }
+
     private void logDefaultNetworkEvent(NetworkAgentInfo newNai, NetworkAgentInfo prevNai) {
         int newNetid = NETID_UNSET;
         int prevNetid = NETID_UNSET;
diff --git a/services/core/java/com/android/server/DeviceIdleController.java b/services/core/java/com/android/server/DeviceIdleController.java
index 8be859f..05c7504 100644
--- a/services/core/java/com/android/server/DeviceIdleController.java
+++ b/services/core/java/com/android/server/DeviceIdleController.java
@@ -35,7 +35,6 @@
 import android.hardware.SensorEventListener;
 import android.hardware.TriggerEvent;
 import android.hardware.TriggerEventListener;
-import android.hardware.display.DisplayManager;
 import android.location.LocationRequest;
 import android.location.Location;
 import android.location.LocationListener;
@@ -76,7 +75,6 @@
 import android.util.SparseBooleanArray;
 import android.util.TimeUtils;
 import android.util.Xml;
-import android.view.Display;
 
 import com.android.internal.app.IBatteryStats;
 import com.android.internal.os.AtomicFile;
@@ -122,14 +120,12 @@
     private ConnectivityService mConnectivityService;
     private AlarmManagerService.LocalService mLocalAlarmManager;
     private INetworkPolicyManager mNetworkPolicyManager;
-    private DisplayManager mDisplayManager;
     private SensorManager mSensorManager;
     private Sensor mMotionSensor;
     private LocationManager mLocationManager;
     private LocationRequest mLocationRequest;
     private Intent mIdleIntent;
     private Intent mLightIdleIntent;
-    private Display mCurDisplay;
     private AnyMotionDetector mAnyMotionDetector;
     private boolean mLightEnabled;
     private boolean mDeepEnabled;
@@ -404,19 +400,11 @@
         }
     };
 
-    private final DisplayManager.DisplayListener mDisplayListener
-            = new DisplayManager.DisplayListener() {
-        @Override public void onDisplayAdded(int displayId) {
-        }
-
-        @Override public void onDisplayRemoved(int displayId) {
-        }
-
-        @Override public void onDisplayChanged(int displayId) {
-            if (displayId == Display.DEFAULT_DISPLAY) {
-                synchronized (DeviceIdleController.this) {
-                    updateDisplayLocked();
-                }
+    private final BroadcastReceiver mInteractivityReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            synchronized (DeviceIdleController.this) {
+                updateInteractivityLocked();
             }
         }
     };
@@ -1411,8 +1399,6 @@
                 mLocalAlarmManager = getLocalService(AlarmManagerService.LocalService.class);
                 mNetworkPolicyManager = INetworkPolicyManager.Stub.asInterface(
                         ServiceManager.getService(Context.NETWORK_POLICY_SERVICE));
-                mDisplayManager = (DisplayManager) getContext().getSystemService(
-                        Context.DISPLAY_SERVICE);
                 mSensorManager = (SensorManager) getContext().getSystemService(Context.SENSOR_SERVICE);
                 int sigMotionSensorId = getContext().getResources().getInteger(
                         com.android.internal.R.integer.config_autoPowerModeAnyMotionSensor);
@@ -1467,11 +1453,16 @@
                 filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
                 getContext().registerReceiver(mReceiver, filter);
 
+                filter = new IntentFilter();
+                filter.addAction(Intent.ACTION_SCREEN_OFF);
+                filter.addAction(Intent.ACTION_SCREEN_ON);
+                getContext().registerReceiver(mInteractivityReceiver, filter);
+
                 mLocalActivityManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray);
                 mLocalPowerManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray);
                 mLocalAlarmManager.setDeviceIdleUserWhitelist(mPowerSaveWhitelistUserAppIdArray);
-                mDisplayManager.registerDisplayListener(mDisplayListener, null);
-                updateDisplayLocked();
+
+                updateInteractivityLocked();
             }
             updateConnectivityState(null);
         }
@@ -1837,13 +1828,12 @@
         }
     }
 
-    void updateDisplayLocked() {
-        mCurDisplay = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY);
-        // We consider any situation where the display is showing something to be it on,
-        // because if there is anything shown we are going to be updating it at some
-        // frequency so can't be allowed to go into deep sleeps.
-        boolean screenOn = mCurDisplay.getState() == Display.STATE_ON;
-        if (DEBUG) Slog.d(TAG, "updateDisplayLocked: screenOn=" + screenOn);
+    void updateInteractivityLocked() {
+        // The interactivity state from the power manager tells us whether the display is
+        // in a state that we need to keep things running so they will update at a normal
+        // frequency.
+        boolean screenOn = mPowerManager.isInteractive();
+        if (DEBUG) Slog.d(TAG, "updateInteractivityLocked: screenOn=" + screenOn);
         if (!screenOn && mScreenOn) {
             mScreenOn = false;
             if (!mForceIdle) {
@@ -3095,7 +3085,6 @@
             pw.print("  mDeepEnabled="); pw.println(mDeepEnabled);
             pw.print("  mForceIdle="); pw.println(mForceIdle);
             pw.print("  mMotionSensor="); pw.println(mMotionSensor);
-            pw.print("  mCurDisplay="); pw.println(mCurDisplay);
             pw.print("  mScreenOn="); pw.println(mScreenOn);
             pw.print("  mNetworkConnected="); pw.println(mNetworkConnected);
             pw.print("  mCharging="); pw.println(mCharging);
diff --git a/services/core/java/com/android/server/DiskStatsService.java b/services/core/java/com/android/server/DiskStatsService.java
index 800081e..2d2c6b0 100644
--- a/services/core/java/com/android/server/DiskStatsService.java
+++ b/services/core/java/com/android/server/DiskStatsService.java
@@ -202,6 +202,8 @@
             JSONObject json = new JSONObject(jsonString);
             pw.print("App Size: ");
             pw.println(json.getLong(DiskStatsFileLogger.APP_SIZE_AGG_KEY));
+            pw.print("App Data Size: ");
+            pw.println(json.getLong(DiskStatsFileLogger.APP_DATA_SIZE_AGG_KEY));
             pw.print("App Cache Size: ");
             pw.println(json.getLong(DiskStatsFileLogger.APP_CACHE_AGG_KEY));
             pw.print("Photos Size: ");
@@ -220,6 +222,8 @@
             pw.println(json.getJSONArray(DiskStatsFileLogger.PACKAGE_NAMES_KEY));
             pw.print("App Sizes: ");
             pw.println(json.getJSONArray(DiskStatsFileLogger.APP_SIZES_KEY));
+            pw.print("App Data Sizes: ");
+            pw.println(json.getJSONArray(DiskStatsFileLogger.APP_DATA_KEY));
             pw.print("Cache Sizes: ");
             pw.println(json.getJSONArray(DiskStatsFileLogger.APP_CACHES_KEY));
         } catch (IOException | JSONException e) {
@@ -235,6 +239,8 @@
 
             proto.write(DiskStatsCachedValuesProto.AGG_APPS_SIZE,
                     json.getLong(DiskStatsFileLogger.APP_SIZE_AGG_KEY));
+            proto.write(DiskStatsCachedValuesProto.AGG_APPS_DATA_SIZE,
+                    json.getLong(DiskStatsFileLogger.APP_DATA_SIZE_AGG_KEY));
             proto.write(DiskStatsCachedValuesProto.AGG_APPS_CACHE_SIZE,
                     json.getLong(DiskStatsFileLogger.APP_CACHE_AGG_KEY));
             proto.write(DiskStatsCachedValuesProto.PHOTOS_SIZE,
@@ -252,22 +258,26 @@
 
             JSONArray packageNamesArray = json.getJSONArray(DiskStatsFileLogger.PACKAGE_NAMES_KEY);
             JSONArray appSizesArray = json.getJSONArray(DiskStatsFileLogger.APP_SIZES_KEY);
+            JSONArray appDataSizesArray = json.getJSONArray(DiskStatsFileLogger.APP_DATA_KEY);
             JSONArray cacheSizesArray = json.getJSONArray(DiskStatsFileLogger.APP_CACHES_KEY);
             final int len = packageNamesArray.length();
-            if (len == appSizesArray.length() && len == cacheSizesArray.length()) {
+            if (len == appSizesArray.length()
+                    && len == appDataSizesArray.length()
+                    && len == cacheSizesArray.length()) {
                 for (int i = 0; i < len; i++) {
                     long packageToken = proto.start(DiskStatsCachedValuesProto.APP_SIZES);
 
                     proto.write(DiskStatsAppSizesProto.PACKAGE_NAME,
                             packageNamesArray.getString(i));
                     proto.write(DiskStatsAppSizesProto.APP_SIZE, appSizesArray.getLong(i));
+                    proto.write(DiskStatsAppSizesProto.APP_DATA_SIZE, appDataSizesArray.getLong(i));
                     proto.write(DiskStatsAppSizesProto.CACHE_SIZE, cacheSizesArray.getLong(i));
 
                     proto.end(packageToken);
                 }
             } else {
-                Slog.wtf(TAG, "Sizes of packageNamesArray, appSizesArray and cacheSizesArray "
-                        + "are not the same");
+                Slog.wtf(TAG, "Sizes of packageNamesArray, appSizesArray, appDataSizesArray "
+                        + " and cacheSizesArray are not the same");
             }
 
             proto.end(cachedValuesToken);
diff --git a/services/core/java/com/android/server/DropBoxManagerService.java b/services/core/java/com/android/server/DropBoxManagerService.java
index e1756d1..887de74 100644
--- a/services/core/java/com/android/server/DropBoxManagerService.java
+++ b/services/core/java/com/android/server/DropBoxManagerService.java
@@ -16,6 +16,7 @@
 
 package com.android.server;
 
+import android.app.ActivityManager;
 import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -29,18 +30,23 @@
 import android.os.DropBoxManager;
 import android.os.FileUtils;
 import android.os.Handler;
+import android.os.Looper;
 import android.os.Message;
 import android.os.StatFs;
 import android.os.SystemClock;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.text.TextUtils;
 import android.text.format.Time;
+import android.util.ArrayMap;
 import android.util.Slog;
 
 import libcore.io.IoUtils;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.os.IDropBoxManagerService;
 import com.android.internal.util.DumpUtils;
+import com.android.internal.util.ObjectUtils;
 
 import java.io.BufferedOutputStream;
 import java.io.File;
@@ -52,7 +58,7 @@
 import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.Objects;
 import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.zip.GZIPOutputStream;
@@ -65,6 +71,7 @@
     private static final String TAG = "DropBoxManagerService";
     private static final int DEFAULT_AGE_SECONDS = 3 * 86400;
     private static final int DEFAULT_MAX_FILES = 1000;
+    private static final int DEFAULT_MAX_FILES_LOWRAM = 300;
     private static final int DEFAULT_QUOTA_KB = 5 * 1024;
     private static final int DEFAULT_QUOTA_PERCENT = 10;
     private static final int DEFAULT_RESERVE_PERCENT = 10;
@@ -87,7 +94,7 @@
     // Accounting of all currently written log files (set in init()).
 
     private FileList mAllFiles = null;
-    private HashMap<String, FileList> mFilesByTag = null;
+    private ArrayMap<String, FileList> mFilesByTag = null;
 
     // Various bits of disk information
 
@@ -101,6 +108,8 @@
     // Provide a way to perform sendBroadcast asynchronously to avoid deadlocks.
     private final Handler mHandler;
 
+    private int mMaxFiles = -1; // -1 means uninitialized.
+
     /** Receives events that might indicate a need to clean up files. */
     private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
         @Override
@@ -153,7 +162,7 @@
      * @param context to use for receiving free space & gservices intents
      */
     public DropBoxManagerService(final Context context) {
-        this(context, new File("/data/system/dropbox"));
+        this(context, new File("/data/system/dropbox"), FgThread.get().getLooper());
     }
 
     /**
@@ -163,11 +172,12 @@
      * @param context to use for receiving free space & gservices intents
      * @param path to store drop box entries in
      */
-    public DropBoxManagerService(final Context context, File path) {
+    @VisibleForTesting
+    public DropBoxManagerService(final Context context, File path, Looper looper) {
         super(context);
         mDropBoxDir = path;
         mContentResolver = getContext().getContentResolver();
-        mHandler = new Handler() {
+        mHandler = new Handler(looper) {
             @Override
             public void handleMessage(Message msg) {
                 if (msg.what == MSG_SEND_BROADCAST) {
@@ -338,11 +348,12 @@
             if ((entry.flags & DropBoxManager.IS_EMPTY) != 0) {
                 return new DropBoxManager.Entry(entry.tag, entry.timestampMillis);
             }
+            final File file = entry.getFile(mDropBoxDir);
             try {
                 return new DropBoxManager.Entry(
-                        entry.tag, entry.timestampMillis, entry.file, entry.flags);
+                        entry.tag, entry.timestampMillis, file, entry.flags);
             } catch (IOException e) {
-                Slog.e(TAG, "Can't read: " + entry.file, e);
+                Slog.wtf(TAG, "Can't read: " + file, e);
                 // Continue to next file
             }
         }
@@ -387,6 +398,7 @@
         }
 
         out.append("Drop box contents: ").append(mAllFiles.contents.size()).append(" entries\n");
+        out.append("Max entries: ").append(mMaxFiles).append("\n");
 
         if (!searchArgs.isEmpty()) {
             out.append("Searching for:");
@@ -410,7 +422,9 @@
             numFound++;
             if (doPrint) out.append("========================================\n");
             out.append(date).append(" ").append(entry.tag == null ? "(no tag)" : entry.tag);
-            if (entry.file == null) {
+
+            final File file = entry.getFile(mDropBoxDir);
+            if (file == null) {
                 out.append(" (no file)\n");
                 continue;
             } else if ((entry.flags & DropBoxManager.IS_EMPTY) != 0) {
@@ -420,12 +434,12 @@
                 out.append(" (");
                 if ((entry.flags & DropBoxManager.IS_GZIPPED) != 0) out.append("compressed ");
                 out.append((entry.flags & DropBoxManager.IS_TEXT) != 0 ? "text" : "data");
-                out.append(", ").append(entry.file.length()).append(" bytes)\n");
+                out.append(", ").append(file.length()).append(" bytes)\n");
             }
 
             if (doFile || (doPrint && (entry.flags & DropBoxManager.IS_TEXT) == 0)) {
                 if (!doPrint) out.append("    ");
-                out.append(entry.file.getPath()).append("\n");
+                out.append(file.getPath()).append("\n");
             }
 
             if ((entry.flags & DropBoxManager.IS_TEXT) != 0 && (doPrint || !doFile)) {
@@ -433,7 +447,7 @@
                 InputStreamReader isr = null;
                 try {
                     dbe = new DropBoxManager.Entry(
-                             entry.tag, entry.timestampMillis, entry.file, entry.flags);
+                             entry.tag, entry.timestampMillis, file, entry.flags);
 
                     if (doPrint) {
                         isr = new InputStreamReader(dbe.getInputStream());
@@ -466,7 +480,7 @@
                     }
                 } catch (IOException e) {
                     out.append("*** ").append(e.toString()).append("\n");
-                    Slog.e(TAG, "Can't read: " + entry.file, e);
+                    Slog.e(TAG, "Can't read: " + file, e);
                 } finally {
                     if (dbe != null) dbe.close();
                     if (isr != null) {
@@ -509,29 +523,37 @@
         }
     }
 
-    /** Metadata describing an on-disk log file. */
-    private static final class EntryFile implements Comparable<EntryFile> {
+    /**
+     * Metadata describing an on-disk log file.
+     *
+     * Note its instances do no have knowledge on what directory they're stored, just to save
+     * 4/8 bytes per instance.  Instead, {@link #getFile} takes a directory so it can build a
+     * fullpath.
+     */
+    @VisibleForTesting
+    static final class EntryFile implements Comparable<EntryFile> {
         public final String tag;
         public final long timestampMillis;
         public final int flags;
-        public final File file;
         public final int blocks;
 
         /** Sorts earlier EntryFile instances before later ones. */
         public final int compareTo(EntryFile o) {
-            if (timestampMillis < o.timestampMillis) return -1;
-            if (timestampMillis > o.timestampMillis) return 1;
-            if (file != null && o.file != null) return file.compareTo(o.file);
-            if (o.file != null) return -1;
-            if (file != null) return 1;
-            if (this == o) return 0;
-            if (hashCode() < o.hashCode()) return -1;
-            if (hashCode() > o.hashCode()) return 1;
-            return 0;
+            int comp = Long.compare(timestampMillis, o.timestampMillis);
+            if (comp != 0) return comp;
+
+            comp = ObjectUtils.compare(tag, o.tag);
+            if (comp != 0) return comp;
+
+            comp = Integer.compare(flags, o.flags);
+            if (comp != 0) return comp;
+
+            return Integer.compare(hashCode(), o.hashCode());
         }
 
         /**
          * Moves an existing temporary file to a new log filename.
+         *
          * @param temp file to rename
          * @param dir to store file in
          * @param tag to use for new log file name
@@ -544,76 +566,94 @@
                          int flags, int blockSize) throws IOException {
             if ((flags & DropBoxManager.IS_EMPTY) != 0) throw new IllegalArgumentException();
 
-            this.tag = tag;
+            this.tag = TextUtils.safeIntern(tag);
             this.timestampMillis = timestampMillis;
             this.flags = flags;
-            this.file = new File(dir, Uri.encode(tag) + "@" + timestampMillis +
-                    ((flags & DropBoxManager.IS_TEXT) != 0 ? ".txt" : ".dat") +
-                    ((flags & DropBoxManager.IS_GZIPPED) != 0 ? ".gz" : ""));
 
-            if (!temp.renameTo(this.file)) {
-                throw new IOException("Can't rename " + temp + " to " + this.file);
+            final File file = this.getFile(dir);
+            if (!temp.renameTo(file)) {
+                throw new IOException("Can't rename " + temp + " to " + file);
             }
-            this.blocks = (int) ((this.file.length() + blockSize - 1) / blockSize);
+            this.blocks = (int) ((file.length() + blockSize - 1) / blockSize);
         }
 
         /**
          * Creates a zero-length tombstone for a file whose contents were lost.
+         *
          * @param dir to store file in
          * @param tag to use for new log file name
          * @param timestampMillis of log entry
          * @throws IOException if the file can't be created.
          */
         public EntryFile(File dir, String tag, long timestampMillis) throws IOException {
-            this.tag = tag;
+            this.tag = TextUtils.safeIntern(tag);
             this.timestampMillis = timestampMillis;
             this.flags = DropBoxManager.IS_EMPTY;
-            this.file = new File(dir, Uri.encode(tag) + "@" + timestampMillis + ".lost");
             this.blocks = 0;
-            new FileOutputStream(this.file).close();
+            new FileOutputStream(getFile(dir)).close();
         }
 
         /**
          * Extracts metadata from an existing on-disk log filename.
+         *
+         * Note when a filename is not recognizable, it will create an instance that
+         * {@link #hasFile()} would return false on, and also remove the file.
+         *
          * @param file name of existing log file
          * @param blockSize to use for space accounting
          */
         public EntryFile(File file, int blockSize) {
-            this.file = file;
-            this.blocks = (int) ((this.file.length() + blockSize - 1) / blockSize);
+
+            boolean parseFailure = false;
 
             String name = file.getName();
-            int at = name.lastIndexOf('@');
-            if (at < 0) {
-                this.tag = null;
-                this.timestampMillis = 0;
-                this.flags = DropBoxManager.IS_EMPTY;
-                return;
-            }
-
             int flags = 0;
-            this.tag = Uri.decode(name.substring(0, at));
-            if (name.endsWith(".gz")) {
-                flags |= DropBoxManager.IS_GZIPPED;
-                name = name.substring(0, name.length() - 3);
-            }
-            if (name.endsWith(".lost")) {
-                flags |= DropBoxManager.IS_EMPTY;
-                name = name.substring(at + 1, name.length() - 5);
-            } else if (name.endsWith(".txt")) {
-                flags |= DropBoxManager.IS_TEXT;
-                name = name.substring(at + 1, name.length() - 4);
-            } else if (name.endsWith(".dat")) {
-                name = name.substring(at + 1, name.length() - 4);
+            String tag = null;
+            long millis = 0;
+
+            final int at = name.lastIndexOf('@');
+            if (at < 0) {
+                parseFailure = true;
             } else {
+                tag = Uri.decode(name.substring(0, at));
+                if (name.endsWith(".gz")) {
+                    flags |= DropBoxManager.IS_GZIPPED;
+                    name = name.substring(0, name.length() - 3);
+                }
+                if (name.endsWith(".lost")) {
+                    flags |= DropBoxManager.IS_EMPTY;
+                    name = name.substring(at + 1, name.length() - 5);
+                } else if (name.endsWith(".txt")) {
+                    flags |= DropBoxManager.IS_TEXT;
+                    name = name.substring(at + 1, name.length() - 4);
+                } else if (name.endsWith(".dat")) {
+                    name = name.substring(at + 1, name.length() - 4);
+                } else {
+                    parseFailure = true;
+                }
+                if (!parseFailure) {
+                    try {
+                        millis = Long.parseLong(name);
+                    } catch (NumberFormatException e) {
+                        parseFailure = true;
+                    }
+                }
+            }
+            if (parseFailure) {
+                Slog.wtf(TAG, "Invalid filename: " + file);
+
+                // Remove the file and return an empty instance.
+                file.delete();
+                this.tag = null;
                 this.flags = DropBoxManager.IS_EMPTY;
                 this.timestampMillis = 0;
+                this.blocks = 0;
                 return;
             }
-            this.flags = flags;
 
-            long millis;
-            try { millis = Long.parseLong(name); } catch (NumberFormatException e) { millis = 0; }
+            this.blocks = (int) ((file.length() + blockSize - 1) / blockSize);
+            this.tag = TextUtils.safeIntern(tag);
+            this.flags = flags;
             this.timestampMillis = millis;
         }
 
@@ -625,9 +665,50 @@
             this.tag = null;
             this.timestampMillis = millis;
             this.flags = DropBoxManager.IS_EMPTY;
-            this.file = null;
             this.blocks = 0;
         }
+
+        /**
+         * @return whether an entry actually has a backing file, or it's an empty "tombstone"
+         * entry.
+         */
+        public boolean hasFile() {
+            return tag != null;
+        }
+
+        /** @return File extension for the flags. */
+        private String getExtension() {
+            if ((flags &  DropBoxManager.IS_EMPTY) != 0) {
+                return ".lost";
+            }
+            return ((flags & DropBoxManager.IS_TEXT) != 0 ? ".txt" : ".dat") +
+                    ((flags & DropBoxManager.IS_GZIPPED) != 0 ? ".gz" : "");
+        }
+
+        /**
+         * @return filename for this entry without the pathname.
+         */
+        public String getFilename() {
+            return hasFile() ? Uri.encode(tag) + "@" + timestampMillis + getExtension() : null;
+        }
+
+        /**
+         * Get a full-path {@link File} representing this entry.
+         * @param dir Parent directly.  The caller needs to pass it because {@link EntryFile}s don't
+         *            know in which directory they're stored.
+         */
+        public File getFile(File dir) {
+            return hasFile() ? new File(dir, getFilename()) : null;
+        }
+
+        /**
+         * If an entry has a backing file, remove it.
+         */
+        public void deleteFile(File dir) {
+            if (hasFile()) {
+                getFile(dir).delete();
+            }
+        }
     }
 
     ///////////////////////////////////////////////////////////////////////////
@@ -651,7 +732,7 @@
             if (files == null) throw new IOException("Can't list files: " + mDropBoxDir);
 
             mAllFiles = new FileList();
-            mFilesByTag = new HashMap<String, FileList>();
+            mFilesByTag = new ArrayMap<>();
 
             // Scan pre-existing files.
             for (File file : files) {
@@ -662,16 +743,12 @@
                 }
 
                 EntryFile entry = new EntryFile(file, mBlockSize);
-                if (entry.tag == null) {
-                    Slog.w(TAG, "Unrecognized file: " + file);
-                    continue;
-                } else if (entry.timestampMillis == 0) {
-                    Slog.w(TAG, "Invalid filename: " + file);
-                    file.delete();
-                    continue;
-                }
 
-                enrollEntry(entry);
+                if (entry.hasFile()) {
+                    // Enroll only when the filename is valid.  Otherwise the above constructor
+                    // has removed the file already.
+                    enrollEntry(entry);
+                }
             }
         }
     }
@@ -684,11 +761,11 @@
         // mFilesByTag is used for trimming, so don't list empty files.
         // (Zero-length/lost files are trimmed by date from mAllFiles.)
 
-        if (entry.tag != null && entry.file != null && entry.blocks > 0) {
+        if (entry.hasFile() && entry.blocks > 0) {
             FileList tagFiles = mFilesByTag.get(entry.tag);
             if (tagFiles == null) {
                 tagFiles = new FileList();
-                mFilesByTag.put(entry.tag, tagFiles);
+                mFilesByTag.put(TextUtils.safeIntern(entry.tag), tagFiles);
             }
             tagFiles.contents.add(entry);
             tagFiles.blocks += entry.blocks;
@@ -722,8 +799,8 @@
                     tagFiles.blocks -= late.blocks;
                 }
                 if ((late.flags & DropBoxManager.IS_EMPTY) == 0) {
-                    enrollEntry(new EntryFile(
-                            late.file, mDropBoxDir, late.tag, t++, late.flags, mBlockSize));
+                    enrollEntry(new EntryFile(late.getFile(mDropBoxDir), mDropBoxDir,
+                            late.tag, t++, late.flags, mBlockSize));
                 } else {
                     enrollEntry(new EntryFile(mDropBoxDir, late.tag, t++));
                 }
@@ -747,17 +824,21 @@
 
         int ageSeconds = Settings.Global.getInt(mContentResolver,
                 Settings.Global.DROPBOX_AGE_SECONDS, DEFAULT_AGE_SECONDS);
-        int maxFiles = Settings.Global.getInt(mContentResolver,
-                Settings.Global.DROPBOX_MAX_FILES, DEFAULT_MAX_FILES);
+        mMaxFiles = Settings.Global.getInt(mContentResolver,
+                Settings.Global.DROPBOX_MAX_FILES,
+                (ActivityManager.isLowRamDeviceStatic()
+                        ?  DEFAULT_MAX_FILES_LOWRAM : DEFAULT_MAX_FILES));
         long cutoffMillis = System.currentTimeMillis() - ageSeconds * 1000;
         while (!mAllFiles.contents.isEmpty()) {
             EntryFile entry = mAllFiles.contents.first();
-            if (entry.timestampMillis > cutoffMillis && mAllFiles.contents.size() < maxFiles) break;
+            if (entry.timestampMillis > cutoffMillis && mAllFiles.contents.size() < mMaxFiles) {
+                break;
+            }
 
             FileList tag = mFilesByTag.get(entry.tag);
             if (tag != null && tag.contents.remove(entry)) tag.blocks -= entry.blocks;
             if (mAllFiles.contents.remove(entry)) mAllFiles.blocks -= entry.blocks;
-            if (entry.file != null) entry.file.delete();
+            entry.deleteFile(mDropBoxDir);
         }
 
         // Compute overall quota (a fraction of available free space) in blocks.
@@ -823,7 +904,7 @@
                     if (mAllFiles.contents.remove(entry)) mAllFiles.blocks -= entry.blocks;
 
                     try {
-                        if (entry.file != null) entry.file.delete();
+                        entry.deleteFile(mDropBoxDir);
                         enrollEntry(new EntryFile(mDropBoxDir, entry.tag, entry.timestampMillis));
                     } catch (IOException e) {
                         Slog.e(TAG, "Can't write tombstone file", e);
diff --git a/services/core/java/com/android/server/EventLogTags.logtags b/services/core/java/com/android/server/EventLogTags.logtags
index 68f8c1b..d3ce306 100644
--- a/services/core/java/com/android/server/EventLogTags.logtags
+++ b/services/core/java/com/android/server/EventLogTags.logtags
@@ -71,7 +71,7 @@
 # when a notification action button has been clicked
 27521 notification_action_clicked (key|3),(action_index|1),(lifespan|1),(freshness|1),(exposure|1)
 # when a notification has been canceled
-27530 notification_canceled (key|3),(reason|1),(lifespan|1),(freshness|1),(exposure|1)
+27530 notification_canceled (key|3),(reason|1),(lifespan|1),(freshness|1),(exposure|1),(listener|3)
 # replaces 27510 with a row per notification
 27531 notification_visibility (key|3),(visibile|1),(lifespan|1),(freshness|1),(exposure|1),(rank|1)
 # a notification emited noise, vibration, or light
@@ -268,3 +268,16 @@
 # GestureLauncherService.java
 # ---------------------------
 40100 camera_gesture_triggered (gesture_on_time|2|3), (sensor1_on_time|2|3), (sensor2_on_time|2|3), (event_extra|1|1)
+
+# ---------------------------
+# timezone/RulesManagerService.java
+# ---------------------------
+51600 timezone_trigger_check (token|3)
+51610 timezone_request_install (token|3)
+51611 timezone_install_started (token|3)
+51612 timezone_install_complete (token|3), (result|1)
+51620 timezone_request_uninstall (token|3)
+51621 timezone_uninstall_started (token|3)
+51622 timezone_uninstall_complete (token|3), (result|1)
+51630 timezone_request_nothing (token|3)
+51631 timezone_nothing_complete (token|3)
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 192fa3a..c23757f 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -50,6 +50,7 @@
 import org.xmlpull.v1.XmlSerializer;
 
 import android.annotation.BinderThread;
+import android.annotation.ColorInt;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -213,8 +214,7 @@
             Context.BIND_AUTO_CREATE
             | Context.BIND_NOT_VISIBLE
             | Context.BIND_NOT_FOREGROUND
-            | Context.BIND_IMPORTANT_BACKGROUND
-            | Context.BIND_SHOWING_UI;
+            | Context.BIND_IMPORTANT_BACKGROUND;
 
     /**
      * Binding flags used only while the {@link InputMethodService} is showing window.
@@ -222,7 +222,8 @@
     private static final int IME_VISIBLE_BIND_FLAGS =
             Context.BIND_AUTO_CREATE
             | Context.BIND_TREAT_LIKE_ACTIVITY
-            | Context.BIND_FOREGROUND_SERVICE;
+            | Context.BIND_FOREGROUND_SERVICE
+            | Context.BIND_SHOWING_UI;
 
     @Retention(SOURCE)
     @IntDef({HardKeyboardBehavior.WIRELESS_AFFORDANCE, HardKeyboardBehavior.WIRED_AFFORDANCE})
@@ -231,6 +232,13 @@
         int WIRED_AFFORDANCE = 1;
     }
 
+    /**
+     * A protected broadcast intent action for internal use for {@link PendingIntent} in
+     * the notification.
+     */
+    private static final String ACTION_SHOW_INPUT_METHOD_PICKER =
+            "com.android.server.InputMethodManagerService.SHOW_INPUT_METHOD_PICKER";
+
     final Context mContext;
     final Resources mRes;
     final Handler mHandler;
@@ -836,6 +844,16 @@
                 }
             } else if (Intent.ACTION_LOCALE_CHANGED.equals(action)) {
                 onActionLocaleChanged();
+            } else if (ACTION_SHOW_INPUT_METHOD_PICKER.equals(action)) {
+                // ACTION_SHOW_INPUT_METHOD_PICKER action is a protected-broadcast and it is
+                // guaranteed to be send only from the system, so that there is no need for extra
+                // security check such as
+                // {@link #canShowInputMethodPickerLocked(IInputMethodClient)}.
+                mHandler.obtainMessage(
+                        MSG_SHOW_IM_SUBTYPE_PICKER,
+                        InputMethodManager.SHOW_IM_PICKER_MODE_INCLUDE_AUXILIARY_SUBTYPES,
+                        0 /* arg2 */)
+                        .sendToTarget();
             } else {
                 Slog.w(TAG, "Unexpected intent " + intent);
             }
@@ -1285,6 +1303,8 @@
 
         Bundle extras = new Bundle();
         extras.putBoolean(Notification.EXTRA_ALLOW_DURING_SETUP, true);
+        @ColorInt final int accentColor = mContext.getColor(
+                com.android.internal.R.color.system_notification_accent_color);
         mImeSwitcherNotification =
                 new Notification.Builder(mContext, SystemNotificationChannels.VIRTUAL_KEYBOARD)
                         .setSmallIcon(com.android.internal.R.drawable.ic_notification_ime_default)
@@ -1292,9 +1312,10 @@
                         .setOngoing(true)
                         .addExtras(extras)
                         .setCategory(Notification.CATEGORY_SYSTEM)
-                        .setColor(com.android.internal.R.color.system_notification_accent_color);
+                        .setColor(accentColor);
 
-        Intent intent = new Intent(Settings.ACTION_SHOW_INPUT_METHOD_PICKER);
+        Intent intent = new Intent(ACTION_SHOW_INPUT_METHOD_PICKER)
+                .setPackage(mContext.getPackageName());
         mImeSwitchPendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
 
         mShowOngoingImeSwitcherForPhones = false;
@@ -1445,6 +1466,7 @@
                 broadcastFilter.addAction(Intent.ACTION_USER_REMOVED);
                 broadcastFilter.addAction(Intent.ACTION_SETTING_RESTORED);
                 broadcastFilter.addAction(Intent.ACTION_LOCALE_CHANGED);
+                broadcastFilter.addAction(ACTION_SHOW_INPUT_METHOD_PICKER);
                 mContext.registerReceiver(new ImmsBroadcastReceiver(), broadcastFilter);
 
                 buildInputMethodListLocked(true /* resetDefaultEnabledIme */);
@@ -2789,6 +2811,27 @@
         return res;
     }
 
+    private boolean canShowInputMethodPickerLocked(IInputMethodClient client) {
+        final int uid = Binder.getCallingUid();
+        if (UserHandle.getAppId(uid) == Process.SYSTEM_UID) {
+            return true;
+        } else if (mCurClient != null && client != null
+                && mCurClient.client.asBinder() == client.asBinder()) {
+            return true;
+        } else if (mCurIntent != null && InputMethodUtils.checkIfPackageBelongsToUid(
+                mAppOpsManager,
+                uid,
+                mCurIntent.getComponent().getPackageName())) {
+            return true;
+        } else if (mContext.checkCallingPermission(
+                android.Manifest.permission.WRITE_SECURE_SETTINGS)
+                == PackageManager.PERMISSION_GRANTED) {
+            return true;
+        }
+
+        return false;
+    }
+
     @Override
     public void showInputMethodPickerFromClient(
             IInputMethodClient client, int auxiliarySubtypeMode) {
@@ -2796,10 +2839,10 @@
             return;
         }
         synchronized (mMethodMap) {
-            if (mCurClient == null || client == null
-                    || mCurClient.client.asBinder() != client.asBinder()) {
+            if(!canShowInputMethodPickerLocked(client)) {
                 Slog.w(TAG, "Ignoring showInputMethodPickerFromClient of uid "
                         + Binder.getCallingUid() + ": " + client);
+                return;
             }
 
             // Always call subtype picker, because subtype picker is a superset of input method
diff --git a/services/core/java/com/android/server/IpSecService.java b/services/core/java/com/android/server/IpSecService.java
index ec275cc..ac5da93 100644
--- a/services/core/java/com/android/server/IpSecService.java
+++ b/services/core/java/com/android/server/IpSecService.java
@@ -206,7 +206,11 @@
 
         T get(int key) {
             T val = mArray.get(key);
-            val.checkOwnerOrSystemAndThrow();
+            // The value should never be null unless the resource doesn't exist
+            // (since we do not allow null resources to be added).
+            if (val != null) {
+                val.checkOwnerOrSystemAndThrow();
+            }
             return val;
         }
 
@@ -343,7 +347,7 @@
         public void setOwnedByTransform() {
             if (mOwnedByTransform) {
                 // Programming error
-                new IllegalStateException("Cannot own an SPI twice!");
+                throw new IllegalStateException("Cannot own an SPI twice!");
             }
 
             mOwnedByTransform = true;
@@ -402,17 +406,14 @@
 
     private void connectNativeNetdService() {
         // Avoid blocking the system server to do this
-        Thread t =
-                new Thread(
-                        new Runnable() {
-                            @Override
-                            public void run() {
-                                synchronized (IpSecService.this) {
-                                    NetdService.get(NETD_FETCH_TIMEOUT);
-                                }
-                            }
-                        });
-        t.run();
+        new Thread() {
+            @Override
+            public void run() {
+                synchronized (IpSecService.this) {
+                    NetdService.get(NETD_FETCH_TIMEOUT);
+                }
+            }
+        }.start();
     }
 
     INetd getNetdInstance() throws RemoteException {
@@ -605,38 +606,33 @@
             spis[direction] = mSpiRecords.get(c.getSpiResourceId(direction));
             int spi = spis[direction].getSpi();
             try {
-                int result =
-                        getNetdInstance()
-                                .ipSecAddSecurityAssociation(
-                                        resourceId,
-                                        c.getMode(),
-                                        direction,
-                                        (c.getLocalAddress() != null)
-                                                ? c.getLocalAddress().getHostAddress()
-                                                : "",
-                                        (c.getRemoteAddress() != null)
-                                                ? c.getRemoteAddress().getHostAddress()
-                                                : "",
-                                        (c.getNetwork() != null)
-                                                ? c.getNetwork().getNetworkHandle()
-                                                : 0,
-                                        spi,
-                                        (auth != null) ? auth.getName() : "",
-                                        (auth != null) ? auth.getKey() : null,
-                                        (auth != null) ? auth.getTruncationLengthBits() : 0,
-                                        (crypt != null) ? crypt.getName() : "",
-                                        (crypt != null) ? crypt.getKey() : null,
-                                        (crypt != null) ? crypt.getTruncationLengthBits() : 0,
-                                        encapType,
-                                        encapLocalPort,
-                                        encapRemotePort);
-                if (result != spi) {
-                    // TODO: cleanup the first SA if creation of second SA fails
-                    return new IpSecTransformResponse(
-                            IpSecManager.Status.SPI_UNAVAILABLE, INVALID_RESOURCE_ID);
-                }
+                getNetdInstance()
+                        .ipSecAddSecurityAssociation(
+                                resourceId,
+                                c.getMode(),
+                                direction,
+                                (c.getLocalAddress() != null)
+                                        ? c.getLocalAddress().getHostAddress()
+                                        : "",
+                                (c.getRemoteAddress() != null)
+                                        ? c.getRemoteAddress().getHostAddress()
+                                        : "",
+                                (c.getNetwork() != null)
+                                        ? c.getNetwork().getNetworkHandle()
+                                        : 0,
+                                spi,
+                                (auth != null) ? auth.getName() : "",
+                                (auth != null) ? auth.getKey() : null,
+                                (auth != null) ? auth.getTruncationLengthBits() : 0,
+                                (crypt != null) ? crypt.getName() : "",
+                                (crypt != null) ? crypt.getKey() : null,
+                                (crypt != null) ? crypt.getTruncationLengthBits() : 0,
+                                encapType,
+                                encapLocalPort,
+                                encapRemotePort);
             } catch (ServiceSpecificException e) {
                 // FIXME: get the error code and throw is at an IOException from Errno Exception
+                return new IpSecTransformResponse(IpSecManager.Status.RESOURCE_UNAVAILABLE);
             }
         }
         // Both SAs were created successfully, time to construct a record and lock it away
diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java
index a4e673d..966e553 100644
--- a/services/core/java/com/android/server/LocationManagerService.java
+++ b/services/core/java/com/android/server/LocationManagerService.java
@@ -325,58 +325,13 @@
             ActivityManager.OnUidImportanceListener uidImportanceListener
                     = new ActivityManager.OnUidImportanceListener() {
                 @Override
-                public void onUidImportance(int uid, int importance) {
-                    boolean foreground = isImportanceForeground(importance);
-                    HashSet<String> affectedProviders = new HashSet<>(mRecordsByProvider.size());
-                    synchronized (mLock) {
-                        for (Entry<String, ArrayList<UpdateRecord>> entry
-                                : mRecordsByProvider.entrySet()) {
-                            String provider = entry.getKey();
-                            for (UpdateRecord record : entry.getValue()) {
-                                if (record.mReceiver.mIdentity.mUid == uid
-                                        && record.mIsForegroundUid != foreground) {
-                                    if (D) Log.d(TAG, "request from uid " + uid + " is now "
-                                            + (foreground ? "foreground" : "background)"));
-                                    record.mIsForegroundUid = foreground;
-
-                                    if (!isThrottlingExemptLocked(record.mReceiver.mIdentity)) {
-                                        affectedProviders.add(provider);
-                                    }
-                                }
-                            }
+                public void onUidImportance(final int uid, final int importance) {
+                    mLocationHandler.post(new Runnable() {
+                        @Override
+                        public void run() {
+                            onUidImportanceChanged(uid, importance);
                         }
-                        for (String provider : affectedProviders) {
-                            applyRequirementsLocked(provider);
-                        }
-
-                        for (Entry<IGnssMeasurementsListener, Identity> entry
-                                : mGnssMeasurementsListeners.entrySet()) {
-                            if (entry.getValue().mUid == uid) {
-                                if (D) Log.d(TAG, "gnss measurements listener from uid " + uid
-                                    + " is now " + (foreground ? "foreground" : "background)"));
-                                if (foreground || isThrottlingExemptLocked(entry.getValue())) {
-                                    mGnssMeasurementsProvider.addListener(entry.getKey());
-                                } else {
-                                    mGnssMeasurementsProvider.removeListener(entry.getKey());
-                                }
-                            }
-                        }
-
-                        for (Entry<IGnssNavigationMessageListener, Identity> entry
-                            : mGnssNavigationMessageListeners.entrySet()) {
-                            if (entry.getValue().mUid == uid) {
-                                if (D) Log.d(TAG, "gnss navigation message listener from uid "
-                                    + uid + " is now "
-                                    + (foreground ? "foreground" : "background)"));
-                                if (foreground || isThrottlingExemptLocked(entry.getValue())) {
-                                    mGnssNavigationMessageProvider.addListener(entry.getKey());
-                                } else {
-                                    mGnssNavigationMessageProvider.removeListener(entry.getKey());
-                                }
-                            }
-                        }
-                    }
-
+                    });
                 }
             };
             mActivityManager.addOnUidImportanceListener(uidImportanceListener,
@@ -456,6 +411,59 @@
         }, UserHandle.ALL, intentFilter, null, mLocationHandler);
     }
 
+    private void onUidImportanceChanged(int uid, int importance) {
+        boolean foreground = isImportanceForeground(importance);
+        HashSet<String> affectedProviders = new HashSet<>(mRecordsByProvider.size());
+        synchronized (mLock) {
+            for (Entry<String, ArrayList<UpdateRecord>> entry
+                : mRecordsByProvider.entrySet()) {
+                String provider = entry.getKey();
+                for (UpdateRecord record : entry.getValue()) {
+                    if (record.mReceiver.mIdentity.mUid == uid
+                        && record.mIsForegroundUid != foreground) {
+                        if (D) Log.d(TAG, "request from uid " + uid + " is now "
+                            + (foreground ? "foreground" : "background)"));
+                        record.mIsForegroundUid = foreground;
+
+                        if (!isThrottlingExemptLocked(record.mReceiver.mIdentity)) {
+                            affectedProviders.add(provider);
+                        }
+                    }
+                }
+            }
+            for (String provider : affectedProviders) {
+                applyRequirementsLocked(provider);
+            }
+
+            for (Entry<IGnssMeasurementsListener, Identity> entry
+                : mGnssMeasurementsListeners.entrySet()) {
+                if (entry.getValue().mUid == uid) {
+                    if (D) Log.d(TAG, "gnss measurements listener from uid " + uid
+                        + " is now " + (foreground ? "foreground" : "background)"));
+                    if (foreground || isThrottlingExemptLocked(entry.getValue())) {
+                        mGnssMeasurementsProvider.addListener(entry.getKey());
+                    } else {
+                        mGnssMeasurementsProvider.removeListener(entry.getKey());
+                    }
+                }
+            }
+
+            for (Entry<IGnssNavigationMessageListener, Identity> entry
+                : mGnssNavigationMessageListeners.entrySet()) {
+                if (entry.getValue().mUid == uid) {
+                    if (D) Log.d(TAG, "gnss navigation message listener from uid "
+                        + uid + " is now "
+                        + (foreground ? "foreground" : "background)"));
+                    if (foreground || isThrottlingExemptLocked(entry.getValue())) {
+                        mGnssNavigationMessageProvider.addListener(entry.getKey());
+                    } else {
+                        mGnssNavigationMessageProvider.removeListener(entry.getKey());
+                    }
+                }
+            }
+        }
+    }
+
     private static boolean isImportanceForeground(int importance) {
         return importance <= FOREGROUND_IMPORTANCE_CUTOFF;
     }
diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java
index 5221060..66d01c7 100644
--- a/services/core/java/com/android/server/NetworkManagementService.java
+++ b/services/core/java/com/android/server/NetworkManagementService.java
@@ -34,6 +34,7 @@
 import static android.net.NetworkPolicyManager.FIREWALL_TYPE_BLACKLIST;
 import static android.net.NetworkPolicyManager.FIREWALL_TYPE_WHITELIST;
 import static android.net.NetworkStats.SET_DEFAULT;
+import static android.net.NetworkStats.STATS_PER_UID;
 import static android.net.NetworkStats.TAG_ALL;
 import static android.net.NetworkStats.TAG_NONE;
 import static android.net.NetworkStats.UID_ALL;
@@ -66,6 +67,7 @@
 import android.net.NetworkUtils;
 import android.net.RouteInfo;
 import android.net.UidRange;
+import android.net.util.NetdService;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiConfiguration.KeyMgmt;
 import android.os.BatteryStats;
@@ -361,7 +363,9 @@
         if (DBG) Slog.d(TAG, "Awaiting socket connection");
         connectedSignal.await();
         if (DBG) Slog.d(TAG, "Connected");
+        if (DBG) Slog.d(TAG, "Connecting native netd service");
         service.connectNativeNetdService();
+        if (DBG) Slog.d(TAG, "Connected");
         return service;
     }
 
@@ -547,6 +551,18 @@
         }
     }
 
+    @Override
+    public void tetherLimitReached(ITetheringStatsProvider provider) {
+        mContext.enforceCallingOrSelfPermission(NETWORK_STACK, TAG);
+        synchronized(mTetheringStatsProviders) {
+            if (!mTetheringStatsProviders.containsKey(provider)) {
+                return;
+            }
+            // No current code examines the interface parameter in a global alert. Just pass null.
+            notifyLimitReached(LIMIT_GLOBAL_ALERT, null);
+        }
+    }
+
     // Sync the state of the given chain with the native daemon.
     private void syncFirewallChainLocked(int chain, String name) {
         SparseIntArray rules;
@@ -573,14 +589,7 @@
     }
 
     private void connectNativeNetdService() {
-        boolean nativeServiceAvailable = false;
-        try {
-            mNetdService = INetd.Stub.asInterface(ServiceManager.getService(NETD_SERVICE_NAME));
-            nativeServiceAvailable = mNetdService.isAlive();
-        } catch (RemoteException e) {}
-        if (!nativeServiceAvailable) {
-            Slog.wtf(TAG, "Can't connect to NativeNetdService " + NETD_SERVICE_NAME);
-        }
+        mNetdService = NetdService.get();
     }
 
     /**
@@ -593,37 +602,31 @@
 
         // only enable bandwidth control when support exists
         final boolean hasKernelSupport = new File("/proc/net/xt_qtaguid/ctrl").exists();
-        if (hasKernelSupport) {
-            Slog.d(TAG, "enabling bandwidth control");
-            try {
-                mConnector.execute("bandwidth", "enable");
-                mBandwidthControlEnabled = true;
-            } catch (NativeDaemonConnectorException e) {
-                Log.wtf(TAG, "problem enabling bandwidth controls", e);
-            }
-        } else {
-            Slog.i(TAG, "not enabling bandwidth control");
-        }
-
-        SystemProperties.set(PROP_QTAGUID_ENABLED, mBandwidthControlEnabled ? "1" : "0");
-
-        if (mBandwidthControlEnabled) {
-            try {
-                getBatteryStats().noteNetworkStatsEnabled();
-            } catch (RemoteException e) {
-            }
-        }
-
-        try {
-            mConnector.execute("strict", "enable");
-            mStrictEnabled = true;
-        } catch (NativeDaemonConnectorException e) {
-            Log.wtf(TAG, "Failed strict enable", e);
-        }
 
         // push any existing quota or UID rules
         synchronized (mQuotaLock) {
 
+            if (hasKernelSupport) {
+                Slog.d(TAG, "enabling bandwidth control");
+                try {
+                    mConnector.execute("bandwidth", "enable");
+                    mBandwidthControlEnabled = true;
+                } catch (NativeDaemonConnectorException e) {
+                    Log.wtf(TAG, "problem enabling bandwidth controls", e);
+                }
+            } else {
+                Slog.i(TAG, "not enabling bandwidth control");
+            }
+
+            SystemProperties.set(PROP_QTAGUID_ENABLED, mBandwidthControlEnabled ? "1" : "0");
+
+            try {
+                mConnector.execute("strict", "enable");
+                mStrictEnabled = true;
+            } catch (NativeDaemonConnectorException e) {
+                Log.wtf(TAG, "Failed strict enable", e);
+            }
+
             setDataSaverModeEnabled(mDataSaverMode);
 
             int size = mActiveQuotas.size();
@@ -701,6 +704,14 @@
                 }
             }
         }
+
+        if (mBandwidthControlEnabled) {
+            try {
+                getBatteryStats().noteNetworkStatsEnabled();
+            } catch (RemoteException e) {
+            }
+        }
+
     }
 
     /**
@@ -1569,6 +1580,17 @@
             } catch (NativeDaemonConnectorException e) {
                 throw e.rethrowAsParcelableException();
             }
+
+            synchronized (mTetheringStatsProviders) {
+                for (ITetheringStatsProvider provider : mTetheringStatsProviders.keySet()) {
+                    try {
+                        provider.setInterfaceQuota(iface, quotaBytes);
+                    } catch (RemoteException e) {
+                        Log.e(TAG, "Problem setting tethering data limit on provider " +
+                                mTetheringStatsProviders.get(provider) + ": " + e);
+                    }
+                }
+            }
         }
     }
 
@@ -1595,6 +1617,17 @@
             } catch (NativeDaemonConnectorException e) {
                 throw e.rethrowAsParcelableException();
             }
+
+            synchronized (mTetheringStatsProviders) {
+                for (ITetheringStatsProvider provider : mTetheringStatsProviders.keySet()) {
+                    try {
+                        provider.setInterfaceQuota(iface, ITetheringStatsProvider.QUOTA_UNLIMITED);
+                    } catch (RemoteException e) {
+                        Log.e(TAG, "Problem removing tethering data limit on provider " +
+                                mTetheringStatsProviders.get(provider) + ": " + e);
+                    }
+                }
+            }
         }
     }
 
@@ -1759,6 +1792,30 @@
         }
     }
 
+    private void applyUidCleartextNetworkPolicy(int uid, int policy) {
+        final String policyString;
+        switch (policy) {
+            case StrictMode.NETWORK_POLICY_ACCEPT:
+                policyString = "accept";
+                break;
+            case StrictMode.NETWORK_POLICY_LOG:
+                policyString = "log";
+                break;
+            case StrictMode.NETWORK_POLICY_REJECT:
+                policyString = "reject";
+                break;
+            default:
+                throw new IllegalArgumentException("Unknown policy " + policy);
+        }
+
+        try {
+            mConnector.execute("strict", "set_uid_cleartext_policy", uid, policyString);
+            mUidCleartextPolicy.put(uid, policy);
+        } catch (NativeDaemonConnectorException e) {
+            throw e.rethrowAsParcelableException();
+        }
+    }
+
     @Override
     public void setUidCleartextNetworkPolicy(int uid, int policy) {
         if (Binder.getCallingUid() != uid) {
@@ -1768,6 +1825,8 @@
         synchronized (mQuotaLock) {
             final int oldPolicy = mUidCleartextPolicy.get(uid, StrictMode.NETWORK_POLICY_ACCEPT);
             if (oldPolicy == policy) {
+                // This also ensures we won't needlessly apply an ACCEPT policy if we've just
+                // enabled strict and the underlying iptables rules are empty.
                 return;
             }
 
@@ -1778,27 +1837,16 @@
                 return;
             }
 
-            final String policyString;
-            switch (policy) {
-                case StrictMode.NETWORK_POLICY_ACCEPT:
-                    policyString = "accept";
-                    break;
-                case StrictMode.NETWORK_POLICY_LOG:
-                    policyString = "log";
-                    break;
-                case StrictMode.NETWORK_POLICY_REJECT:
-                    policyString = "reject";
-                    break;
-                default:
-                    throw new IllegalArgumentException("Unknown policy " + policy);
+            // netd does not keep state on strict mode policies, and cannot replace a non-accept
+            // policy without deleting it first. Rather than add state to netd, just always send
+            // it an accept policy when switching between two non-accept policies.
+            // TODO: consider keeping state in netd so we can simplify this code.
+            if (oldPolicy != StrictMode.NETWORK_POLICY_ACCEPT &&
+                    policy != StrictMode.NETWORK_POLICY_ACCEPT) {
+                applyUidCleartextNetworkPolicy(uid, StrictMode.NETWORK_POLICY_ACCEPT);
             }
 
-            try {
-                mConnector.execute("strict", "set_uid_cleartext_policy", uid, policyString);
-                mUidCleartextPolicy.put(uid, policy);
-            } catch (NativeDaemonConnectorException e) {
-                throw e.rethrowAsParcelableException();
-            }
+            applyUidCleartextNetworkPolicy(uid, policy);
         }
     }
 
@@ -1820,7 +1868,13 @@
 
     private class NetdTetheringStatsProvider extends ITetheringStatsProvider.Stub {
         @Override
-        public NetworkStats getTetherStats() {
+        public NetworkStats getTetherStats(int how) {
+            // We only need to return per-UID stats. Per-device stats are already counted by
+            // interface counters.
+            if (how != STATS_PER_UID) {
+                return new NetworkStats(SystemClock.elapsedRealtime(), 0);
+            }
+
             final NativeDaemonEvent[] events;
             try {
                 events = mConnector.executeForList("bandwidth", "gettetherstats");
@@ -1855,17 +1909,22 @@
             }
             return stats;
         }
+
+        @Override
+        public void setInterfaceQuota(String iface, long quotaBytes) {
+            // Do nothing. netd is already informed of quota changes in setInterfaceQuota.
+        }
     }
 
     @Override
-    public NetworkStats getNetworkStatsTethering() {
+    public NetworkStats getNetworkStatsTethering(int how) {
         mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
 
         final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 1);
         synchronized (mTetheringStatsProviders) {
             for (ITetheringStatsProvider provider: mTetheringStatsProviders.keySet()) {
                 try {
-                    stats.combineAllValues(provider.getTetherStats());
+                    stats.combineAllValues(provider.getTetherStats(how));
                 } catch (RemoteException e) {
                     Log.e(TAG, "Problem reading tethering stats from " +
                             mTetheringStatsProviders.get(provider) + ": " + e);
@@ -2649,6 +2708,42 @@
         return failures;
     }
 
+    @Override
+    public boolean isNetworkRestricted(int uid) {
+        mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
+        return isNetworkRestrictedInternal(uid);
+    }
+
+    private boolean isNetworkRestrictedInternal(int uid) {
+        synchronized (mRulesLock) {
+            if (getFirewallChainState(FIREWALL_CHAIN_STANDBY)
+                    && mUidFirewallStandbyRules.get(uid) == FIREWALL_RULE_DENY) {
+                if (DBG) Slog.d(TAG, "Uid " + uid + " restricted because of app standby mode");
+                return true;
+            }
+            if (getFirewallChainState(FIREWALL_CHAIN_DOZABLE)
+                    && mUidFirewallDozableRules.get(uid) != FIREWALL_RULE_ALLOW) {
+                if (DBG) Slog.d(TAG, "Uid " + uid + " restricted because of device idle mode");
+                return true;
+            }
+            if (getFirewallChainState(FIREWALL_CHAIN_POWERSAVE)
+                    && mUidFirewallPowerSaveRules.get(uid) != FIREWALL_RULE_ALLOW) {
+                if (DBG) Slog.d(TAG, "Uid " + uid + " restricted because of power saver mode");
+                return true;
+            }
+            if (mUidRejectOnMetered.get(uid)) {
+                if (DBG) Slog.d(TAG, "Uid " + uid + " restricted because of no metered data"
+                        + " in the background");
+                return true;
+            }
+            if (mDataSaverMode && !mUidAllowOnMetered.get(uid)) {
+                if (DBG) Slog.d(TAG, "Uid " + uid + " restricted because of data saver mode");
+                return true;
+            }
+            return false;
+        }
+    }
+
     private void setFirewallChainState(int chain, boolean state) {
         synchronized (mRulesLock) {
             mFirewallChainStates.put(chain, state);
@@ -2665,33 +2760,7 @@
     class LocalService extends NetworkManagementInternal {
         @Override
         public boolean isNetworkRestrictedForUid(int uid) {
-            synchronized (mRulesLock) {
-                if (getFirewallChainState(FIREWALL_CHAIN_STANDBY)
-                        && mUidFirewallStandbyRules.get(uid) == FIREWALL_RULE_DENY) {
-                    if (DBG) Slog.d(TAG, "Uid " + uid + " restricted because of app standby mode");
-                    return true;
-                }
-                if (getFirewallChainState(FIREWALL_CHAIN_DOZABLE)
-                        && mUidFirewallDozableRules.get(uid) != FIREWALL_RULE_ALLOW) {
-                    if (DBG) Slog.d(TAG, "Uid " + uid + " restricted because of device idle mode");
-                    return true;
-                }
-                if (getFirewallChainState(FIREWALL_CHAIN_POWERSAVE)
-                        && mUidFirewallPowerSaveRules.get(uid) != FIREWALL_RULE_ALLOW) {
-                    if (DBG) Slog.d(TAG, "Uid " + uid + " restricted because of power saver mode");
-                    return true;
-                }
-                if (mUidRejectOnMetered.get(uid)) {
-                    if (DBG) Slog.d(TAG, "Uid " + uid + " restricted because of no metered data"
-                            + " in the background");
-                    return true;
-                }
-                if (mDataSaverMode && !mUidAllowOnMetered.get(uid)) {
-                    if (DBG) Slog.d(TAG, "Uid " + uid + " restricted because of data saver mode");
-                    return true;
-                }
-                return false;
-            }
+            return isNetworkRestrictedInternal(uid);
         }
     }
 
diff --git a/services/core/java/com/android/server/NetworkScoreService.java b/services/core/java/com/android/server/NetworkScoreService.java
index fdc0bba..e438620 100644
--- a/services/core/java/com/android/server/NetworkScoreService.java
+++ b/services/core/java/com/android/server/NetworkScoreService.java
@@ -27,6 +27,7 @@
 import android.content.ServiceConnection;
 import android.content.pm.PackageManager;
 import android.database.ContentObserver;
+import android.location.LocationManager;
 import android.net.INetworkRecommendationProvider;
 import android.net.INetworkScoreCache;
 import android.net.INetworkScoreService;
@@ -113,6 +114,16 @@
         }
     };
 
+    private BroadcastReceiver mLocationModeReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            final String action = intent.getAction();
+            if (LocationManager.MODE_CHANGED_ACTION.equals(action)) {
+                refreshBinding();
+            }
+        }
+    };
+
     /**
      * Clears scores when the active scorer package is no longer valid and
      * manages the service connection.
@@ -241,6 +252,10 @@
                 mUserIntentReceiver, UserHandle.SYSTEM, filter, null /* broadcastPermission*/,
                 null /* scheduler */);
         mHandler = new ServiceHandler(looper);
+        IntentFilter locationModeFilter = new IntentFilter(LocationManager.MODE_CHANGED_ACTION);
+        mContext.registerReceiverAsUser(
+                mLocationModeReceiver, UserHandle.SYSTEM, locationModeFilter,
+                null /* broadcastPermission*/, mHandler);
         mContentObserver = new DispatchingContentObserver(context, mHandler);
         mServiceConnProducer = serviceConnProducer;
     }
@@ -625,13 +640,13 @@
         }
     }
 
-    private boolean callerCanRequestScores() {
+    private boolean canCallerRequestScores() {
         // REQUEST_NETWORK_SCORES is a signature only permission.
         return mContext.checkCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES) ==
                  PackageManager.PERMISSION_GRANTED;
     }
 
-    private boolean callerCanScoreNetworks() {
+    private boolean canCallerScoreNetworks() {
         return mContext.checkCallingOrSelfPermission(permission.SCORE_NETWORKS) ==
                 PackageManager.PERMISSION_GRANTED;
     }
@@ -639,7 +654,7 @@
     @Override
     public boolean clearScores() {
         // Only the active scorer or the system should be allowed to flush all scores.
-        if (isCallerActiveScorer(getCallingUid()) || callerCanRequestScores()) {
+        if (isCallerActiveScorer(getCallingUid()) || canCallerRequestScores()) {
             final long token = Binder.clearCallingIdentity();
             try {
                 clearInternal();
@@ -656,7 +671,7 @@
     @Override
     public boolean setActiveScorer(String packageName) {
         // Only the system can set the active scorer
-        if (!isCallerSystemProcess(getCallingUid()) && !callerCanScoreNetworks()) {
+        if (!isCallerSystemProcess(getCallingUid()) && !canCallerScoreNetworks()) {
             throw new SecurityException(
                     "Caller is neither the system process or a network scorer.");
         }
@@ -690,11 +705,17 @@
      */
     @Override
     public String getActiveScorerPackage() {
-        synchronized (mServiceConnectionLock) {
-            if (mServiceConnection != null) {
-                return mServiceConnection.getPackageName();
+        if (canCallerRequestScores() || canCallerScoreNetworks()) {
+            synchronized (mServiceConnectionLock) {
+                if (mServiceConnection != null) {
+                    return mServiceConnection.getPackageName();
+                }
             }
+        } else {
+            throw new SecurityException(
+                    "Caller is not a network scorer/requester.");
         }
+
         return null;
     }
 
@@ -704,7 +725,7 @@
     @Override
     public NetworkScorerAppData getActiveScorer() {
         // Only the system can access this data.
-        if (isCallerSystemProcess(getCallingUid()) || callerCanRequestScores()) {
+        if (isCallerSystemProcess(getCallingUid()) || canCallerRequestScores()) {
             synchronized (mServiceConnectionLock) {
                 if (mServiceConnection != null) {
                     return mServiceConnection.getAppData();
@@ -725,7 +746,7 @@
     @Override
     public List<NetworkScorerAppData> getAllValidScorers() {
         // Only the system can access this data.
-        if (!isCallerSystemProcess(getCallingUid()) && !callerCanRequestScores()) {
+        if (!isCallerSystemProcess(getCallingUid()) && !canCallerRequestScores()) {
             throw new SecurityException(
                     "Caller is neither the system process nor a score requester.");
         }
@@ -736,7 +757,7 @@
     @Override
     public void disableScoring() {
         // Only the active scorer or the system should be allowed to disable scoring.
-        if (!isCallerActiveScorer(getCallingUid()) && !callerCanRequestScores()) {
+        if (!isCallerActiveScorer(getCallingUid()) && !canCallerRequestScores()) {
             throw new SecurityException(
                     "Caller is neither the active scorer nor the scorer manager.");
         }
diff --git a/services/core/java/com/android/server/NetworkScorerAppManager.java b/services/core/java/com/android/server/NetworkScorerAppManager.java
index 42777bf..bfd4247 100644
--- a/services/core/java/com/android/server/NetworkScorerAppManager.java
+++ b/services/core/java/com/android/server/NetworkScorerAppManager.java
@@ -18,6 +18,7 @@
 
 import android.Manifest.permission;
 import android.annotation.Nullable;
+import android.app.AppOpsManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -79,7 +80,7 @@
         List<NetworkScorerAppData> appDataList = new ArrayList<>();
         for (int i = 0; i < resolveInfos.size(); i++) {
             final ServiceInfo serviceInfo = resolveInfos.get(i).serviceInfo;
-            if (hasPermissions(serviceInfo.packageName)) {
+            if (hasPermissions(serviceInfo.applicationInfo.uid, serviceInfo.packageName)) {
                 if (VERBOSE) {
                     Log.v(TAG, serviceInfo.packageName + " is a valid scorer/recommender.");
                 }
@@ -197,12 +198,33 @@
         return null;
     }
 
-    private boolean hasPermissions(String packageName) {
+    private boolean hasPermissions(final int uid, final String packageName) {
+        return hasScoreNetworksPermission(packageName)
+                && canAccessLocation(uid, packageName);
+    }
+
+    private boolean hasScoreNetworksPermission(String packageName) {
         final PackageManager pm = mContext.getPackageManager();
         return pm.checkPermission(permission.SCORE_NETWORKS, packageName)
                 == PackageManager.PERMISSION_GRANTED;
     }
 
+    private boolean canAccessLocation(int uid, String packageName) {
+        final PackageManager pm = mContext.getPackageManager();
+        final AppOpsManager appOpsManager =
+                (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
+        return isLocationModeEnabled()
+                && pm.checkPermission(permission.ACCESS_COARSE_LOCATION, packageName)
+                == PackageManager.PERMISSION_GRANTED
+                && appOpsManager.noteOp(AppOpsManager.OP_COARSE_LOCATION, uid, packageName)
+                == AppOpsManager.MODE_ALLOWED;
+    }
+
+    private boolean isLocationModeEnabled() {
+        return mSettingsFacade.getSecureInt(mContext, Settings.Secure.LOCATION_MODE,
+                Settings.Secure.LOCATION_MODE_OFF) != Settings.Secure.LOCATION_MODE_OFF;
+    }
+
     /**
      * Set the specified package as the default scorer application.
      *
@@ -270,23 +292,20 @@
             return;
         }
 
-        // the active scorer isn't valid, revert to the default if it's different
+        int newEnabledSetting = NetworkScoreManager.RECOMMENDATIONS_ENABLED_OFF;
+        // the active scorer isn't valid, revert to the default if it's different and valid
         final String defaultPackageName = getDefaultPackageSetting();
-        if (!TextUtils.equals(currentPackageName, defaultPackageName)) {
-            setNetworkRecommendationsPackage(defaultPackageName);
+        if (!TextUtils.equals(currentPackageName, defaultPackageName)
+                && getScorer(defaultPackageName) != null) {
             if (DEBUG) {
-                Log.d(TAG, "Defaulted the network recommendations app to: " + defaultPackageName);
+                Log.d(TAG, "Defaulting the network recommendations app to: "
+                        + defaultPackageName);
             }
-            if (getScorer(defaultPackageName) != null) { // the default is valid
-                if (DEBUG) Log.d(TAG, defaultPackageName + " is now the active scorer.");
-                setNetworkRecommendationsEnabledSetting(
-                        NetworkScoreManager.RECOMMENDATIONS_ENABLED_ON);
-            } else { // the default isn't valid either, we're disabled at this point
-                if (DEBUG) Log.d(TAG, defaultPackageName + " is not an active scorer.");
-                setNetworkRecommendationsEnabledSetting(
-                        NetworkScoreManager.RECOMMENDATIONS_ENABLED_OFF);
-            }
+            setNetworkRecommendationsPackage(defaultPackageName);
+            newEnabledSetting = NetworkScoreManager.RECOMMENDATIONS_ENABLED_ON;
         }
+
+        setNetworkRecommendationsEnabledSetting(newEnabledSetting);
     }
 
     /**
@@ -352,6 +371,9 @@
     private void setNetworkRecommendationsPackage(String packageName) {
         mSettingsFacade.putString(mContext,
                 Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE, packageName);
+        if (VERBOSE) {
+            Log.d(TAG, Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE + " set to " + packageName);
+        }
     }
 
     private int getNetworkRecommendationsEnabledSetting() {
@@ -361,6 +383,9 @@
     private void setNetworkRecommendationsEnabledSetting(int value) {
         mSettingsFacade.putInt(mContext,
                 Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED, value);
+        if (VERBOSE) {
+            Log.d(TAG, Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED + " set to " + value);
+        }
     }
 
     /**
@@ -382,5 +407,9 @@
         public int getInt(Context context, String name, int defaultValue) {
             return Settings.Global.getInt(context.getContentResolver(), name, defaultValue);
         }
+
+        public int getSecureInt(Context context, String name, int defaultValue) {
+            return Settings.Secure.getInt(context.getContentResolver(), name, defaultValue);
+        }
     }
 }
diff --git a/services/core/java/com/android/server/OWNERS b/services/core/java/com/android/server/OWNERS
new file mode 100644
index 0000000..e5fbdd21
--- /dev/null
+++ b/services/core/java/com/android/server/OWNERS
@@ -0,0 +1,9 @@
+per-file ConnectivityService.java=ek@google.com
+per-file ConnectivityService.java=hugobenichi@google.com
+per-file ConnectivityService.java=lorenzo@google.com
+per-file NetworkManagementService.java=ek@google.com
+per-file NetworkManagementService.java=hugobenichi@google.com
+per-file NetworkManagementService.java=lorenzo@google.com
+per-file NsdService.java=ek@google.com
+per-file NsdService.java=hugobenichi@google.com
+per-file NsdService.java=lorenzo@google.com
diff --git a/services/core/java/com/android/server/PersistentDataBlockService.java b/services/core/java/com/android/server/PersistentDataBlockService.java
index 1d4c3db..c32a2d1 100644
--- a/services/core/java/com/android/server/PersistentDataBlockService.java
+++ b/services/core/java/com/android/server/PersistentDataBlockService.java
@@ -380,6 +380,12 @@
         }
     }
 
+    private long doGetMaximumDataBlockSize() {
+        long actualSize = getBlockDeviceSize() - HEADER_SIZE - DIGEST_SIZE_BYTES
+                - FRP_CREDENTIAL_RESERVED_SIZE - 1;
+        return actualSize <= MAX_DATA_BLOCK_SIZE ? actualSize : MAX_DATA_BLOCK_SIZE;
+    }
+
     private native long nativeGetBlockDeviceSize(String path);
     private native int nativeWipe(String path);
 
@@ -389,7 +395,7 @@
             enforceUid(Binder.getCallingUid());
 
             // Need to ensure we don't write over the last byte
-            long maxBlockSize = getMaximumDataBlockSize();
+            long maxBlockSize = doGetMaximumDataBlockSize();
             if (data.length > maxBlockSize) {
                 // partition is ~500k so shouldn't be a problem to downcast
                 return (int) -maxBlockSize;
@@ -569,9 +575,8 @@
 
         @Override
         public long getMaximumDataBlockSize() {
-            long actualSize = getBlockDeviceSize() - HEADER_SIZE - DIGEST_SIZE_BYTES
-                    - FRP_CREDENTIAL_RESERVED_SIZE - 1;
-            return actualSize <= MAX_DATA_BLOCK_SIZE ? actualSize : MAX_DATA_BLOCK_SIZE;
+            enforceUid(Binder.getCallingUid());
+            return doGetMaximumDataBlockSize();
         }
 
         @Override
diff --git a/services/core/java/com/android/server/RescueParty.java b/services/core/java/com/android/server/RescueParty.java
index 3b36c3c..1924a86 100644
--- a/services/core/java/com/android/server/RescueParty.java
+++ b/services/core/java/com/android/server/RescueParty.java
@@ -55,6 +55,7 @@
     private static final String PROP_RESCUE_LEVEL = "sys.rescue_level";
     private static final String PROP_RESCUE_BOOT_COUNT = "sys.rescue_boot_count";
     private static final String PROP_RESCUE_BOOT_START = "sys.rescue_boot_start";
+    private static final String PROP_VIRTUAL_DEVICE = "ro.hardware.virtual_device";
 
     private static final int LEVEL_NONE = 0;
     private static final int LEVEL_RESET_SETTINGS_UNTRUSTED_DEFAULTS = 1;
@@ -336,6 +337,10 @@
      * a good proxy for someone doing local development work.
      */
     private static boolean isUsbActive() {
+        if (SystemProperties.getBoolean(PROP_VIRTUAL_DEVICE, false)) {
+            Slog.v(TAG, "Assuming virtual device is connected over USB");
+            return true;
+        }
         try {
             final String state = FileUtils
                     .readTextFile(new File("/sys/class/android_usb/android0/state"), 128, "");
diff --git a/services/core/java/com/android/server/SamplingProfilerService.java b/services/core/java/com/android/server/SamplingProfilerService.java
deleted file mode 100644
index 5f92695..0000000
--- a/services/core/java/com/android/server/SamplingProfilerService.java
+++ /dev/null
@@ -1,122 +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.server;
-
-import android.content.ContentResolver;
-import android.os.DropBoxManager;
-import android.os.FileObserver;
-import android.os.Binder;
-
-import android.util.Slog;
-import android.content.Context;
-import android.database.ContentObserver;
-import android.os.SystemProperties;
-import android.provider.Settings;
-import com.android.internal.os.SamplingProfilerIntegration;
-import com.android.internal.util.DumpUtils;
-
-import java.io.File;
-import java.io.FileDescriptor;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-public class SamplingProfilerService extends Binder {
-
-    private static final String TAG = "SamplingProfilerService";
-    private static final boolean LOCAL_LOGV = false;
-    public static final String SNAPSHOT_DIR = SamplingProfilerIntegration.SNAPSHOT_DIR;
-
-    private final Context mContext;
-    private FileObserver snapshotObserver;
-
-    public SamplingProfilerService(Context context) {
-        mContext = context;
-        registerSettingObserver(context);
-        startWorking(context);
-    }
-
-    private void startWorking(Context context) {
-        if (LOCAL_LOGV) Slog.v(TAG, "starting SamplingProfilerService!");
-
-        final DropBoxManager dropbox =
-                (DropBoxManager) context.getSystemService(Context.DROPBOX_SERVICE);
-
-        // before FileObserver is ready, there could have already been some snapshots
-        // in the directory, we don't want to miss them
-        File[] snapshotFiles = new File(SNAPSHOT_DIR).listFiles();
-        for (int i = 0; snapshotFiles != null && i < snapshotFiles.length; i++) {
-            handleSnapshotFile(snapshotFiles[i], dropbox);
-        }
-
-        // detect new snapshot and put it in dropbox
-        // delete it afterwards no matter what happened before
-        // Note: needs listening at event ATTRIB rather than CLOSE_WRITE, because we set the
-        // readability of snapshot files after writing them!
-        snapshotObserver = new FileObserver(SNAPSHOT_DIR, FileObserver.ATTRIB) {
-            @Override
-            public void onEvent(int event, String path) {
-                handleSnapshotFile(new File(SNAPSHOT_DIR, path), dropbox);
-            }
-        };
-        snapshotObserver.startWatching();
-
-        if (LOCAL_LOGV) Slog.v(TAG, "SamplingProfilerService activated");
-    }
-
-    private void handleSnapshotFile(File file, DropBoxManager dropbox) {
-        try {
-            dropbox.addFile(TAG, file, 0);
-            if (LOCAL_LOGV) Slog.v(TAG, file.getPath() + " added to dropbox");
-        } catch (IOException e) {
-            Slog.e(TAG, "Can't add " + file.getPath() + " to dropbox", e);
-        } finally {
-            file.delete();
-        }
-    }
-
-    private void registerSettingObserver(Context context) {
-        ContentResolver contentResolver = context.getContentResolver();
-        contentResolver.registerContentObserver(
-                Settings.Global.getUriFor(Settings.Global.SAMPLING_PROFILER_MS),
-                false, new SamplingProfilerSettingsObserver(contentResolver));
-    }
-
-    @Override
-    protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
-
-        pw.println("SamplingProfilerService:");
-        pw.println("Watching directory: " + SNAPSHOT_DIR);
-    }
-
-    private class SamplingProfilerSettingsObserver extends ContentObserver {
-        private ContentResolver mContentResolver;
-        public SamplingProfilerSettingsObserver(ContentResolver contentResolver) {
-            super(null);
-            mContentResolver = contentResolver;
-            onChange(false);
-        }
-        @Override
-        public void onChange(boolean selfChange) {
-            Integer samplingProfilerMs = Settings.Global.getInt(
-                    mContentResolver, Settings.Global.SAMPLING_PROFILER_MS, 0);
-            // setting this secure property will start or stop sampling profiler,
-            // as well as adjust the the time between taking snapshots.
-            SystemProperties.set("persist.sys.profiler_ms", samplingProfilerMs.toString());
-        }
-    }
-}
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index 383cc8b..1ca0112 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -108,6 +108,7 @@
 import com.android.internal.widget.LockPatternUtils;
 import com.android.server.NativeDaemonConnector.Command;
 import com.android.server.NativeDaemonConnector.SensitiveArg;
+import com.android.server.pm.PackageManagerException;
 import com.android.server.pm.PackageManagerService;
 import com.android.server.storage.AppFuseBridge;
 
@@ -1078,7 +1079,8 @@
                     flags |= DiskInfo.FLAG_ADOPTABLE;
                 }
                 // Adoptable storage isn't currently supported on FBE devices
-                if (StorageManager.isFileEncryptedNativeOnly()) {
+                if (StorageManager.isFileEncryptedNativeOnly()
+                        && !SystemProperties.getBoolean(StorageManager.PROP_ADOPTABLE_FBE, false)) {
                     flags &= ~DiskInfo.FLAG_ADOPTABLE;
                 }
                 mDisks.put(id, new DiskInfo(id, flags));
@@ -2045,7 +2047,8 @@
         }
 
         if ((mask & StorageManager.DEBUG_FORCE_ADOPTABLE) != 0) {
-            if (StorageManager.isFileEncryptedNativeOnly()) {
+            if (StorageManager.isFileEncryptedNativeOnly()
+                    && !SystemProperties.getBoolean(StorageManager.PROP_ADOPTABLE_FBE, false)) {
                 throw new IllegalStateException(
                         "Adoptable storage not available on device with native FBE");
             }
@@ -2121,6 +2124,17 @@
             mMoveCallback = callback;
             mMoveTargetUuid = volumeUuid;
 
+            // We need all the users unlocked to move their primary storage
+            final List<UserInfo> users = mContext.getSystemService(UserManager.class).getUsers();
+            for (UserInfo user : users) {
+                if (StorageManager.isFileEncryptedNativeOrEmulated()
+                        && !isUserKeyUnlocked(user.id)) {
+                    Slog.w(TAG, "Failing move due to locked user " + user.id);
+                    onMoveStatusLocked(PackageManager.MOVE_FAILED_LOCKED_USER);
+                    return;
+                }
+            }
+
             // When moving to/from primary physical volume, we probably just nuked
             // the current storage location, so we have nothing to move.
             if (Objects.equals(StorageManager.UUID_PRIMARY_PHYSICAL, mPrimaryStorageUuid)
diff --git a/services/core/java/com/android/server/TextServicesManagerService.java b/services/core/java/com/android/server/TextServicesManagerService.java
index 4d0cf3f..845442e 100644
--- a/services/core/java/com/android/server/TextServicesManagerService.java
+++ b/services/core/java/com/android/server/TextServicesManagerService.java
@@ -49,6 +49,7 @@
 import android.os.Bundle;
 import android.os.IBinder;
 import android.os.Process;
+import android.os.RemoteCallbackList;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -84,6 +85,7 @@
     private final TextServicesSettings mSettings;
     @NonNull
     private final UserManager mUserManager;
+    private final Object mLock = new Object();
 
     public static final class Lifecycle extends SystemService {
         private TextServicesManagerService mService;
@@ -123,7 +125,7 @@
     }
 
     void systemRunning() {
-        synchronized (mSpellCheckerMap) {
+        synchronized (mLock) {
             if (!mSystemReady) {
                 mSystemReady = true;
                 resetInternalState(mSettings.getCurrentUserId());
@@ -132,13 +134,13 @@
     }
 
     void onSwitchUser(@UserIdInt int userId) {
-        synchronized (mSpellCheckerMap) {
+        synchronized (mLock) {
             resetInternalState(userId);
         }
     }
 
     void onUnlockUser(@UserIdInt int userId) {
-        synchronized(mSpellCheckerMap) {
+        synchronized (mLock) {
             final int currentUserId = mSettings.getCurrentUserId();
             if (userId != currentUserId) {
                 return;
@@ -185,12 +187,10 @@
         SpellCheckerInfo sci = getCurrentSpellChecker(null);
         if (sci == null) {
             sci = findAvailSystemSpellCheckerLocked(null);
-            if (sci != null) {
-                // Set the current spell checker if there is one or more spell checkers
-                // available. In this case, "sci" is the first one in the available spell
-                // checkers.
-                setCurrentSpellCheckerLocked(sci.getId());
-            }
+            // Set the current spell checker if there is one or more system spell checkers
+            // available. In this case, "sci" is the first one in the available spell
+            // checkers.
+            setCurrentSpellCheckerLocked(sci);
         }
     }
 
@@ -214,23 +214,33 @@
             if (!isChangingPackagesOfCurrentUser()) {
                 return;
             }
-            synchronized (mSpellCheckerMap) {
-                buildSpellCheckerMapLocked(
-                        mContext, mSpellCheckerList, mSpellCheckerMap, mSettings);
+            synchronized (mLock) {
                 // TODO: Update for each locale
                 SpellCheckerInfo sci = getCurrentSpellChecker(null);
-                // If no spell checker is enabled, just return. The user should explicitly
+                buildSpellCheckerMapLocked(
+                        mContext, mSpellCheckerList, mSpellCheckerMap, mSettings);
+                // If spell checker is disabled, just return. The user should explicitly
                 // enable the spell checker.
-                if (sci == null) return;
-                final String packageName = sci.getPackageName();
-                final int change = isPackageDisappearing(packageName);
-                if (// Package disappearing
-                        change == PACKAGE_PERMANENT_CHANGE || change == PACKAGE_TEMPORARY_CHANGE
-                        // Package modified
-                        || isPackageModified(packageName)) {
-                    sci = findAvailSystemSpellCheckerLocked(packageName);
-                    if (sci != null) {
-                        setCurrentSpellCheckerLocked(sci.getId());
+                if (!isSpellCheckerEnabledLocked()) return;
+
+                if (sci == null) {
+                    sci = findAvailSystemSpellCheckerLocked(null);
+                    // Set the current spell checker if there is one or more system spell checkers
+                    // available. In this case, "sci" is the first one in the available spell
+                    // checkers.
+                    setCurrentSpellCheckerLocked(sci);
+                } else {
+                    final String packageName = sci.getPackageName();
+                    final int change = isPackageDisappearing(packageName);
+                    if (// Package disappearing
+                            change == PACKAGE_PERMANENT_CHANGE || change == PACKAGE_TEMPORARY_CHANGE
+                                    // Package modified
+                                    || isPackageModified(packageName)) {
+                        SpellCheckerInfo availSci = findAvailSystemSpellCheckerLocked(packageName);
+                        // Set the spell checker settings if different than before
+                        if (availSci != null && !availSci.getId().equals(sci.getId())) {
+                            setCurrentSpellCheckerLocked(availSci);
+                        }
                     }
                 }
             }
@@ -367,7 +377,7 @@
 
     private void unbindServiceLocked() {
         for (SpellCheckerBindGroup scbg : mSpellCheckerBindGroups.values()) {
-            scbg.removeAll();
+            scbg.removeAllLocked();
         }
         mSpellCheckerBindGroups.clear();
     }
@@ -447,7 +457,7 @@
     }
 
     private SpellCheckerInfo getCurrentSpellCheckerWithoutVerification() {
-        synchronized (mSpellCheckerMap) {
+        synchronized (mLock) {
             final String curSpellCheckerId = mSettings.getSelectedSpellChecker();
             if (DBG) {
                 Slog.w(TAG, "getCurrentSpellChecker: " + curSpellCheckerId);
@@ -471,7 +481,7 @@
         final int subtypeHashCode;
         final SpellCheckerInfo sci;
         final Locale systemLocale;
-        synchronized (mSpellCheckerMap) {
+        synchronized (mLock) {
             subtypeHashCode =
                     mSettings.getSelectedSpellCheckerSubtype(SpellCheckerSubtype.SUBTYPE_ID_NONE);
             if (DBG) {
@@ -553,7 +563,7 @@
             Slog.e(TAG, "getSpellCheckerService: Invalid input.");
             return;
         }
-        synchronized(mSpellCheckerMap) {
+        synchronized (mLock) {
             if (!mSpellCheckerMap.containsKey(sciId)) {
                 return;
             }
@@ -585,7 +595,7 @@
         if (!calledFromValidUser()) {
             return false;
         }
-        synchronized(mSpellCheckerMap) {
+        synchronized (mLock) {
             return isSpellCheckerEnabledLocked();
         }
     }
@@ -603,7 +613,7 @@
             Slog.w(TAG, "bind service: " + info.getId());
         }
         if (!bindCurrentSpellCheckerService(serviceIntent, connection,
-                Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE_WHILE_AWAKE)) {
+                Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT_BACKGROUND)) {
             Slog.e(TAG, "Failed to get a spell checker service.");
             return null;
         }
@@ -635,7 +645,7 @@
         if (DBG) {
             Slog.d(TAG, "FinishSpellCheckerService");
         }
-        synchronized(mSpellCheckerMap) {
+        synchronized (mLock) {
             final ArrayList<SpellCheckerBindGroup> removeList = new ArrayList<>();
             for (SpellCheckerBindGroup group : mSpellCheckerBindGroups.values()) {
                 if (group == null) continue;
@@ -649,71 +659,14 @@
         }
     }
 
-    @Override
-    public void setCurrentSpellChecker(String locale, String sciId) {
-        if (!calledFromValidUser()) {
-            return;
-        }
-        synchronized(mSpellCheckerMap) {
-            if (mContext.checkCallingOrSelfPermission(
-                    android.Manifest.permission.WRITE_SECURE_SETTINGS)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException(
-                        "Requires permission "
-                        + android.Manifest.permission.WRITE_SECURE_SETTINGS);
-            }
-            setCurrentSpellCheckerLocked(sciId);
-        }
-    }
-
-    @Override
-    public void setCurrentSpellCheckerSubtype(String locale, int hashCode) {
-        if (!calledFromValidUser()) {
-            return;
-        }
-        synchronized(mSpellCheckerMap) {
-            if (mContext.checkCallingOrSelfPermission(
-                    android.Manifest.permission.WRITE_SECURE_SETTINGS)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException(
-                        "Requires permission "
-                        + android.Manifest.permission.WRITE_SECURE_SETTINGS);
-            }
-            setCurrentSpellCheckerSubtypeLocked(hashCode);
-        }
-    }
-
-    @Override
-    public void setSpellCheckerEnabled(boolean enabled) {
-        if (!calledFromValidUser()) {
-            return;
-        }
-        synchronized(mSpellCheckerMap) {
-            if (mContext.checkCallingOrSelfPermission(
-                    android.Manifest.permission.WRITE_SECURE_SETTINGS)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException(
-                        "Requires permission "
-                        + android.Manifest.permission.WRITE_SECURE_SETTINGS);
-            }
-            setSpellCheckerEnabledLocked(enabled);
-        }
-    }
-
-    private void setCurrentSpellCheckerLocked(String sciId) {
+    private void setCurrentSpellCheckerLocked(@Nullable SpellCheckerInfo sci) {
+        final String sciId = (sci != null) ? sci.getId() : "";
         if (DBG) {
             Slog.w(TAG, "setCurrentSpellChecker: " + sciId);
         }
-        if (TextUtils.isEmpty(sciId) || !mSpellCheckerMap.containsKey(sciId)) return;
-        final SpellCheckerInfo currentSci = getCurrentSpellChecker(null);
-        if (currentSci != null && currentSci.getId().equals(sciId)) {
-            // Do nothing if the current spell checker is same as new spell checker.
-            return;
-        }
         final long ident = Binder.clearCallingIdentity();
         try {
             mSettings.putSelectedSpellChecker(sciId);
-            setCurrentSpellCheckerSubtypeLocked(0);
         } finally {
             Binder.restoreCallingIdentity(ident);
         }
@@ -739,18 +692,6 @@
         }
     }
 
-    private void setSpellCheckerEnabledLocked(boolean enabled) {
-        if (DBG) {
-            Slog.w(TAG, "setSpellCheckerEnabled: " + enabled);
-        }
-        final long ident = Binder.clearCallingIdentity();
-        try {
-            mSettings.setSpellCheckerEnabled(enabled);
-        } finally {
-            Binder.restoreCallingIdentity(ident);
-        }
-    }
-
     private boolean isSpellCheckerEnabledLocked() {
         final long ident = Binder.clearCallingIdentity();
         try {
@@ -768,7 +709,7 @@
     protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
         if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
 
-        synchronized(mSpellCheckerMap) {
+        synchronized (mLock) {
             pw.println("Current Text Services Manager state:");
             pw.println("  Spell Checkers:");
             int spellCheckerIndex = 0;
@@ -805,12 +746,13 @@
                     pw.println(
                             "        " + "mScLocale=" + req.mLocale + " mUid=" + req.mUserId);
                 }
-                final int N = grp.mListeners.size();
+                final int N = grp.mListeners.getRegisteredCallbackCount();
                 for (int i = 0; i < N; i++) {
-                    final InternalDeathRecipient listener = grp.mListeners.get(i);
+                    final ISpellCheckerSessionListener mScListener =
+                            grp.mListeners.getRegisteredCallbackItem(i);
                     pw.println("      " + "Listener #" + i + ":");
-                    pw.println("        " + "mScListener=" + listener.mScListener);
-                    pw.println("        " + "mGroup=" + listener.mGroup);
+                    pw.println("        " + "mScListener=" + mScListener);
+                    pw.println("        " + "mGroup=" + grp);
                 }
             }
             pw.println("");
@@ -848,7 +790,7 @@
     private final class SpellCheckerBindGroup {
         private final String TAG = SpellCheckerBindGroup.class.getSimpleName();
         private final InternalServiceConnection mInternalConnection;
-        private final ArrayList<InternalDeathRecipient> mListeners = new ArrayList<>();
+        private final InternalDeathRecipients mListeners;
         private boolean mUnbindCalled;
         private ISpellCheckerService mSpellChecker;
         private boolean mConnected;
@@ -857,47 +799,52 @@
 
         public SpellCheckerBindGroup(InternalServiceConnection connection) {
             mInternalConnection = connection;
+            mListeners = new InternalDeathRecipients(this);
         }
 
-        public void onServiceConnected(ISpellCheckerService spellChecker) {
+        public void onServiceConnectedLocked(ISpellCheckerService spellChecker) {
             if (DBG) {
-                Slog.d(TAG, "onServiceConnected");
+                Slog.d(TAG, "onServiceConnectedLocked");
             }
 
-            synchronized(mSpellCheckerMap) {
-                mSpellChecker = spellChecker;
-                mConnected = true;
-                // Dispatch pending getISpellCheckerSession requests.
-                mPendingSessionRequests.forEach(this::getISpellCheckerSessionLocked);
-                mPendingSessionRequests.clear();
+            if (mUnbindCalled) {
+                return;
             }
+            mSpellChecker = spellChecker;
+            mConnected = true;
+            // Dispatch pending getISpellCheckerSession requests.
+            try {
+                final int size = mPendingSessionRequests.size();
+                for (int i = 0; i < size; ++i) {
+                    final SessionRequest request = mPendingSessionRequests.get(i);
+                    mSpellChecker.getISpellCheckerSession(
+                            request.mLocale, request.mScListener, request.mBundle,
+                            new ISpellCheckerServiceCallbackBinder(this, request));
+                    mOnGoingSessionRequests.add(request);
+                }
+                mPendingSessionRequests.clear();
+            } catch(RemoteException e) {
+                // The target spell checker service is not available.  Better to reset the state.
+                removeAllLocked();
+            }
+            cleanLocked();
+        }
+
+        public void onServiceDisconnectedLocked() {
+            if (DBG) {
+                Slog.d(TAG, "onServiceDisconnectedLocked");
+            }
+
+            mSpellChecker = null;
+            mConnected = false;
         }
 
         public void removeListener(ISpellCheckerSessionListener listener) {
             if (DBG) {
                 Slog.w(TAG, "remove listener: " + listener.hashCode());
             }
-            synchronized(mSpellCheckerMap) {
-                final int size = mListeners.size();
-                final ArrayList<InternalDeathRecipient> removeList = new ArrayList<>();
-                for (int i = 0; i < size; ++i) {
-                    final InternalDeathRecipient tempRecipient = mListeners.get(i);
-                    if(tempRecipient.hasSpellCheckerListener(listener)) {
-                        if (DBG) {
-                            Slog.w(TAG, "found existing listener.");
-                        }
-                        removeList.add(tempRecipient);
-                    }
-                }
-                final int removeSize = removeList.size();
-                for (int i = 0; i < removeSize; ++i) {
-                    if (DBG) {
-                        Slog.w(TAG, "Remove " + removeList.get(i));
-                    }
-                    final InternalDeathRecipient idr = removeList.get(i);
-                    idr.mScListener.asBinder().unlinkToDeath(idr, 0);
-                    mListeners.remove(idr);
-                }
+            synchronized (mLock) {
+                mListeners.unregister(listener);
                 cleanLocked();
             }
         }
@@ -911,7 +858,7 @@
                 return;
             }
             // If there are no more active listeners, clean up.  Only do this once.
-            if (!mListeners.isEmpty()) {
+            if (mListeners.getRegisteredCallbackCount() > 0) {
                 return;
             }
             if (!mPendingSessionRequests.isEmpty()) {
@@ -932,19 +879,15 @@
             mUnbindCalled = true;
         }
 
-        public void removeAll() {
+        public void removeAllLocked() {
             Slog.e(TAG, "Remove the spell checker bind unexpectedly.");
-            synchronized(mSpellCheckerMap) {
-                final int size = mListeners.size();
-                for (int i = 0; i < size; ++i) {
-                    final InternalDeathRecipient idr = mListeners.get(i);
-                    idr.mScListener.asBinder().unlinkToDeath(idr, 0);
-                }
-                mListeners.clear();
-                mPendingSessionRequests.clear();
-                mOnGoingSessionRequests.clear();
-                cleanLocked();
+            final int size = mListeners.getRegisteredCallbackCount();
+            for (int i = size - 1; i >= 0; --i) {
+                mListeners.unregister(mListeners.getRegisteredCallbackItem(i));
             }
+            mPendingSessionRequests.clear();
+            mOnGoingSessionRequests.clear();
+            cleanLocked();
         }
 
         public void getISpellCheckerSessionOrQueueLocked(@NonNull SessionRequest request) {
@@ -955,13 +898,6 @@
                 mPendingSessionRequests.add(request);
                 return;
             }
-            getISpellCheckerSessionLocked(request);
-        }
-
-        private void getISpellCheckerSessionLocked(@NonNull SessionRequest request) {
-            if (mUnbindCalled) {
-                return;
-            }
             try {
                 mSpellChecker.getISpellCheckerSession(
                         request.mLocale, request.mScListener, request.mBundle,
@@ -969,24 +905,21 @@
                 mOnGoingSessionRequests.add(request);
             } catch(RemoteException e) {
                 // The target spell checker service is not available.  Better to reset the state.
-                removeAll();
+                removeAllLocked();
             }
             cleanLocked();
         }
 
         void onSessionCreated(@Nullable final ISpellCheckerSession newSession,
                 @NonNull final SessionRequest request) {
-            synchronized (mSpellCheckerMap) {
+            synchronized (mLock) {
                 if (mUnbindCalled) {
                     return;
                 }
                 if (mOnGoingSessionRequests.remove(request)) {
-                    final InternalDeathRecipient recipient =
-                            new InternalDeathRecipient(this, request.mScListener);
                     try {
                         request.mTsListener.onServiceConnected(newSession);
-                        request.mScListener.asBinder().linkToDeath(recipient, 0);
-                        mListeners.add(recipient);
+                        mListeners.register(request.mScListener);
                     } catch (RemoteException e) {
                         // Technically this can happen if the spell checker client app is already
                         // dead.  We can just forget about this request; the request is already
@@ -1007,51 +940,52 @@
 
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
-            synchronized(mSpellCheckerMap) {
+            synchronized (mLock) {
                 onServiceConnectedInnerLocked(name, service);
             }
         }
 
         private void onServiceConnectedInnerLocked(ComponentName name, IBinder service) {
             if (DBG) {
-                Slog.w(TAG, "onServiceConnected: " + name);
+                Slog.w(TAG, "onServiceConnectedInnerLocked: " + name);
             }
             final ISpellCheckerService spellChecker =
                     ISpellCheckerService.Stub.asInterface(service);
             final SpellCheckerBindGroup group = mSpellCheckerBindGroups.get(mSciId);
             if (group != null && this == group.mInternalConnection) {
-                group.onServiceConnected(spellChecker);
+                group.onServiceConnectedLocked(spellChecker);
             }
         }
 
         @Override
         public void onServiceDisconnected(ComponentName name) {
-            synchronized(mSpellCheckerMap) {
-                final SpellCheckerBindGroup group = mSpellCheckerBindGroups.get(mSciId);
-                if (group != null && this == group.mInternalConnection) {
-                    mSpellCheckerBindGroups.remove(mSciId);
-                }
+            synchronized (mLock) {
+                onServiceDisconnectedInnerLocked(name);
+            }
+        }
+
+        private void onServiceDisconnectedInnerLocked(ComponentName name) {
+            if (DBG) {
+                Slog.w(TAG, "onServiceDisconnectedInnerLocked: " + name);
+            }
+            final SpellCheckerBindGroup group = mSpellCheckerBindGroups.get(mSciId);
+            if (group != null && this == group.mInternalConnection) {
+                group.onServiceDisconnectedLocked();
             }
         }
     }
 
-    private static final class InternalDeathRecipient implements IBinder.DeathRecipient {
-        public final ISpellCheckerSessionListener mScListener;
+    private static final class InternalDeathRecipients extends
+            RemoteCallbackList<ISpellCheckerSessionListener> {
         private final SpellCheckerBindGroup mGroup;
 
-        public InternalDeathRecipient(SpellCheckerBindGroup group,
-                ISpellCheckerSessionListener scListener) {
-            mScListener = scListener;
+        public InternalDeathRecipients(SpellCheckerBindGroup group) {
             mGroup = group;
         }
 
-        public boolean hasSpellCheckerListener(ISpellCheckerSessionListener listener) {
-            return listener.asBinder().equals(mScListener.asBinder());
-        }
-
         @Override
-        public void binderDied() {
-            mGroup.removeListener(mScListener);
+        public void onCallbackDied(ISpellCheckerSessionListener listener) {
+            mGroup.removeListener(listener);
         }
     }
 
@@ -1152,10 +1086,6 @@
             return Settings.Secure.getIntForUser(mResolver, key, defaultValue, mCurrentUserId);
         }
 
-        private void putBoolean(final String key, final boolean value) {
-            putInt(key, value ? 1 : 0);
-        }
-
         private boolean getBoolean(final String key, final boolean defaultValue) {
             return getInt(key, defaultValue ? 1 : 0) == 1;
         }
@@ -1182,23 +1112,13 @@
         }
 
         public void putSelectedSpellChecker(@Nullable String sciId) {
-            if (TextUtils.isEmpty(sciId)) {
-                // OK to coalesce to null, since getSelectedSpellChecker() can take care of the
-                // empty data scenario.
-                putString(Settings.Secure.SELECTED_SPELL_CHECKER, null);
-            } else {
-                putString(Settings.Secure.SELECTED_SPELL_CHECKER, sciId);
-            }
+            putString(Settings.Secure.SELECTED_SPELL_CHECKER, sciId);
         }
 
         public void putSelectedSpellCheckerSubtype(int hashCode) {
             putInt(Settings.Secure.SELECTED_SPELL_CHECKER_SUBTYPE, hashCode);
         }
 
-        public void setSpellCheckerEnabled(boolean enabled) {
-            putBoolean(Settings.Secure.SPELL_CHECKER_ENABLED, enabled);
-        }
-
         @NonNull
         public String getSelectedSpellChecker() {
             return getString(Settings.Secure.SELECTED_SPELL_CHECKER, "");
diff --git a/services/core/java/com/android/server/VibratorService.java b/services/core/java/com/android/server/VibratorService.java
index 4733840..8b79b9d 100644
--- a/services/core/java/com/android/server/VibratorService.java
+++ b/services/core/java/com/android/server/VibratorService.java
@@ -373,12 +373,24 @@
             if (mCurrentVibration.hasLongerTimeout(newOneShot.getTiming())
                     && newOneShot.getAmplitude() == currentOneShot.getAmplitude()) {
                 if (DEBUG) {
-                    Slog.e(TAG, "Ignoring incoming vibration in favor of current vibration");
+                    Slog.d(TAG, "Ignoring incoming vibration in favor of current vibration");
                 }
                 return;
             }
         }
 
+        // If the current vibration is repeating and the incoming one is non-repeating, then ignore
+        // the non-repeating vibration. This is so that we don't cancel vibrations that are meant
+        // to grab the attention of the user, like ringtones and alarms, in favor of one-shot
+        // vibrations that are likely quite short.
+        if (!isRepeatingVibration(effect)
+                && mCurrentVibration != null && isRepeatingVibration(mCurrentVibration.mEffect)) {
+            if (DEBUG) {
+                Slog.d(TAG, "Ignoring incoming vibration in favor of alarm vibration");
+            }
+            return;
+        }
+
         Vibration vib = new Vibration(token, effect, usageHint, uid, opPkg);
 
         // Only link against waveforms since they potentially don't have a finish if
@@ -404,6 +416,16 @@
         }
     }
 
+    private static boolean isRepeatingVibration(VibrationEffect effect) {
+        if (effect instanceof VibrationEffect.Waveform) {
+            final VibrationEffect.Waveform waveform = (VibrationEffect.Waveform) effect;
+            if (waveform.getRepeatIndex() >= 0) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private void addToPreviousVibrationsLocked(Vibration vib) {
         if (mPreviousVibrations.size() > mPreviousVibrationsLimit) {
             mPreviousVibrations.removeFirst();
@@ -728,6 +750,9 @@
                     return timeout;
                 }
             }
+            if (!prebaked.shouldFallback()) {
+                return 0;
+            }
             final int id = prebaked.getId();
             if (id < 0 || id >= mFallbackEffects.length || mFallbackEffects[id] == null) {
                 Slog.w(TAG, "Failed to play prebaked effect, no fallback");
diff --git a/services/core/java/com/android/server/Watchdog.java b/services/core/java/com/android/server/Watchdog.java
index aceedf1..8d46d1e 100644
--- a/services/core/java/com/android/server/Watchdog.java
+++ b/services/core/java/com/android/server/Watchdog.java
@@ -18,7 +18,12 @@
 
 import android.app.IActivityController;
 import android.os.Binder;
+import android.os.Build;
 import android.os.RemoteException;
+import android.system.ErrnoException;
+import android.system.OsConstants;
+import android.system.StructRlimit;
+import com.android.internal.os.ZygoteConnectionConstants;
 import com.android.server.am.ActivityManagerService;
 
 import android.content.BroadcastReceiver;
@@ -44,6 +49,7 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 
@@ -57,6 +63,11 @@
     // Set this to true to have the watchdog record kernel thread stacks when it fires
     static final boolean RECORD_KERNEL_THREADS = true;
 
+    // Note 1: Do not lower this value below thirty seconds without tightening the invoke-with
+    //         timeout in com.android.internal.os.ZygoteConnection, or wrapped applications
+    //         can trigger the watchdog.
+    // Note 2: The debug value is already below the wait time in ZygoteConnection. Wrapped
+    //         applications may not work with a debug build. CTS will fail.
     static final long DEFAULT_TIMEOUT = DB ? 10*1000 : 60*1000;
     static final long CHECK_INTERVAL = DEFAULT_TIMEOUT / 2;
 
@@ -101,6 +112,7 @@
     int mPhonePid;
     IActivityController mController;
     boolean mAllowRestart = true;
+    final OpenFdMonitor mOpenFdMonitor;
 
     /**
      * Used for checking status of handle threads and scheduling monitor callbacks.
@@ -262,6 +274,12 @@
 
         // Initialize monitor for Binder threads.
         addMonitor(new BinderThreadMonitor());
+
+        mOpenFdMonitor = OpenFdMonitor.create();
+
+        // See the notes on DEFAULT_TIMEOUT.
+        assert DB ||
+                DEFAULT_TIMEOUT > ZygoteConnectionConstants.WRAPPED_PID_TIMEOUT_MILLIS;
     }
 
     public void init(Context context, ActivityManagerService activity) {
@@ -348,7 +366,7 @@
         return checkers;
     }
 
-    private String describeCheckersLocked(ArrayList<HandlerChecker> checkers) {
+    private String describeCheckersLocked(List<HandlerChecker> checkers) {
         StringBuilder builder = new StringBuilder(128);
         for (int i=0; i<checkers.size(); i++) {
             if (builder.length() > 0) {
@@ -400,7 +418,7 @@
     public void run() {
         boolean waitedHalf = false;
         while (true) {
-            final ArrayList<HandlerChecker> blockedCheckers;
+            final List<HandlerChecker> blockedCheckers;
             final String subject;
             final boolean allowRestart;
             int debuggerWasConnected = 0;
@@ -437,30 +455,40 @@
                     timeout = CHECK_INTERVAL - (SystemClock.uptimeMillis() - start);
                 }
 
-                final int waitState = evaluateCheckerCompletionLocked();
-                if (waitState == COMPLETED) {
-                    // The monitors have returned; reset
-                    waitedHalf = false;
-                    continue;
-                } else if (waitState == WAITING) {
-                    // still waiting but within their configured intervals; back off and recheck
-                    continue;
-                } else if (waitState == WAITED_HALF) {
-                    if (!waitedHalf) {
-                        // We've waited half the deadlock-detection interval.  Pull a stack
-                        // trace and wait another half.
-                        ArrayList<Integer> pids = new ArrayList<Integer>();
-                        pids.add(Process.myPid());
-                        ActivityManagerService.dumpStackTraces(true, pids, null, null,
-                            getInterestingNativePids());
-                        waitedHalf = true;
-                    }
-                    continue;
+                boolean fdLimitTriggered = false;
+                if (mOpenFdMonitor != null) {
+                    fdLimitTriggered = mOpenFdMonitor.monitor();
                 }
 
-                // something is overdue!
-                blockedCheckers = getBlockedCheckersLocked();
-                subject = describeCheckersLocked(blockedCheckers);
+                if (!fdLimitTriggered) {
+                    final int waitState = evaluateCheckerCompletionLocked();
+                    if (waitState == COMPLETED) {
+                        // The monitors have returned; reset
+                        waitedHalf = false;
+                        continue;
+                    } else if (waitState == WAITING) {
+                        // still waiting but within their configured intervals; back off and recheck
+                        continue;
+                    } else if (waitState == WAITED_HALF) {
+                        if (!waitedHalf) {
+                            // We've waited half the deadlock-detection interval.  Pull a stack
+                            // trace and wait another half.
+                            ArrayList<Integer> pids = new ArrayList<Integer>();
+                            pids.add(Process.myPid());
+                            ActivityManagerService.dumpStackTraces(true, pids, null, null,
+                                getInterestingNativePids());
+                            waitedHalf = true;
+                        }
+                        continue;
+                    }
+
+                    // something is overdue!
+                    blockedCheckers = getBlockedCheckersLocked();
+                    subject = describeCheckersLocked(blockedCheckers);
+                } else {
+                    blockedCheckers = Collections.emptyList();
+                    subject = "Open FD high water mark reached";
+                }
                 allowRestart = mAllowRestart;
             }
 
@@ -574,4 +602,87 @@
     }
 
     private native void native_dumpKernelStacks(String tracesPath);
+
+    public static final class OpenFdMonitor {
+        /**
+         * Number of FDs below the soft limit that we trigger a runtime restart at. This was
+         * chosen arbitrarily, but will need to be at least 6 in order to have a sufficient number
+         * of FDs in reserve to complete a dump.
+         */
+        private static final int FD_HIGH_WATER_MARK = 12;
+
+        private final File mDumpDir;
+        private final File mFdHighWaterMark;
+
+        public static OpenFdMonitor create() {
+            // Only run the FD monitor on debuggable builds (such as userdebug and eng builds).
+            if (!Build.IS_DEBUGGABLE) {
+                return null;
+            }
+
+            // Don't run the FD monitor on builds that have a global ANR trace file. We're using
+            // the ANR trace directory as a quick hack in order to get these traces in bugreports
+            // and we wouldn't want to overwrite something important.
+            final String dumpDirStr = SystemProperties.get("dalvik.vm.stack-trace-dir", "");
+            if (dumpDirStr.isEmpty()) {
+                return null;
+            }
+
+            final StructRlimit rlimit;
+            try {
+                rlimit = android.system.Os.getrlimit(OsConstants.RLIMIT_NOFILE);
+            } catch (ErrnoException errno) {
+                Slog.w(TAG, "Error thrown from getrlimit(RLIMIT_NOFILE)", errno);
+                return null;
+            }
+
+            // The assumption we're making here is that FD numbers are allocated (more or less)
+            // sequentially, which is currently (and historically) true since open is currently
+            // specified to always return the lowest-numbered non-open file descriptor for the
+            // current process.
+            //
+            // We do this to avoid having to enumerate the contents of /proc/self/fd in order to
+            // count the number of descriptors open in the process.
+            final File fdThreshold = new File("/proc/self/fd/" + (rlimit.rlim_cur - FD_HIGH_WATER_MARK));
+            return new OpenFdMonitor(new File(dumpDirStr), fdThreshold);
+        }
+
+        OpenFdMonitor(File dumpDir, File fdThreshold) {
+            mDumpDir = dumpDir;
+            mFdHighWaterMark = fdThreshold;
+        }
+
+        private void dumpOpenDescriptors() {
+            try {
+                File dumpFile = File.createTempFile("anr_fd_", "", mDumpDir);
+                java.lang.Process proc = new ProcessBuilder()
+                    .command("/system/bin/lsof", "-p", String.valueOf(Process.myPid()))
+                    .redirectErrorStream(true)
+                    .redirectOutput(dumpFile)
+                    .start();
+
+                int returnCode = proc.waitFor();
+                if (returnCode != 0) {
+                    Slog.w(TAG, "Unable to dump open descriptors, lsof return code: "
+                        + returnCode);
+                    dumpFile.delete();
+                }
+            } catch (IOException | InterruptedException ex) {
+                Slog.w(TAG, "Unable to dump open descriptors: " + ex);
+            }
+        }
+
+        /**
+         * @return {@code true} if the high water mark was breached and a dump was written,
+         *     {@code false} otherwise.
+         */
+        public boolean monitor() {
+            if (mFdHighWaterMark.exists()) {
+                dumpOpenDescriptors();
+                return true;
+            }
+
+            return false;
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/accounts/AccountManagerBackupHelper.java b/services/core/java/com/android/server/accounts/AccountManagerBackupHelper.java
index 6380da5..1c77a7f 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerBackupHelper.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerBackupHelper.java
@@ -23,6 +23,7 @@
 import android.annotation.NonNull;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.Signature;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.os.UserHandle;
@@ -30,6 +31,7 @@
 import android.util.Log;
 import android.util.PackageUtils;
 import android.util.Pair;
+import android.util.Slog;
 import android.util.Xml;
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.content.PackageMonitor;
@@ -126,9 +128,18 @@
             } catch (PackageManager.NameNotFoundException e) {
                 return false;
             }
-            String currentCertDigest = PackageUtils.computeCertSha256Digest(
-                    packageInfo.signatures[0]);
-            if (!certDigest.equals(currentCertDigest)) {
+
+            // Before we used only the first signature to compute the SHA 256 but some
+            // apps could be singed by multiple certs and the cert order is undefined.
+            // We prefer the modern computation procedure where all certs are taken
+            // into account but also allow the value from the old computation to allow
+            // restoring backed up grants on an older platform version.
+            final String[] signaturesSha256Digests = PackageUtils.computeSignaturesSha256Digests(
+                    packageInfo.signatures);
+            final String signaturesSha256Digest = PackageUtils.computeSignaturesSha256Digest(
+                    signaturesSha256Digests);
+            if (!certDigest.equals(signaturesSha256Digest) && (packageInfo.signatures.length <= 1
+                    || !certDigest.equals(signaturesSha256Digests[0]))) {
                 return false;
             }
             final int uid = packageInfo.applicationInfo.uid;
@@ -169,8 +180,17 @@
                         }
 
                         for (String packageName : packageNames) {
-                            String digest = PackageUtils.computePackageCertSha256Digest(
-                                    packageManager, packageName, userId);
+                            final PackageInfo packageInfo;
+                            try {
+                                packageInfo = packageManager.getPackageInfoAsUser(packageName,
+                                        PackageManager.GET_SIGNATURES, userId);
+                            } catch (PackageManager.NameNotFoundException e) {
+                                Slog.i(TAG, "Skipping backup of account access grant for"
+                                        + " non-existing package: " + packageName);
+                                continue;
+                            }
+                            final String digest = PackageUtils.computeSignaturesSha256Digest(
+                                    packageInfo.signatures);
                             if (digest != null) {
                                 serializer.startTag(null, TAG_PERMISSION);
                                 serializer.attribute(null, ATTR_ACCOUNT_SHA_256,
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index fd0d71e..c617616 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -162,7 +162,8 @@
 
         @Override
         public void onStopUser(int userHandle) {
-            mService.onStopUser(userHandle);
+            Slog.i(TAG, "onStopUser " + userHandle);
+            mService.purgeUserData(userHandle);
         }
     }
 
@@ -314,6 +315,21 @@
 
         injector.addLocalService(new AccountManagerInternalImpl());
 
+        IntentFilter userFilter = new IntentFilter();
+        userFilter.addAction(Intent.ACTION_USER_REMOVED);
+        mContext.registerReceiverAsUser(new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                String action = intent.getAction();
+                if (Intent.ACTION_USER_REMOVED.equals(action)) {
+                    int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
+                    if (userId < 1) return;
+                    Slog.i(TAG, "User " + userId + " removed");
+                    purgeUserData(userId);
+                }
+            }
+        }, UserHandle.ALL, userFilter, null, null);
+
         // Need to cancel account request notifications if the update/install can access the account
         new PackageMonitor() {
             @Override
@@ -1360,9 +1376,7 @@
         }
     }
 
-
-    private void onStopUser(int userId) {
-        Log.i(TAG, "onStopUser " + userId);
+    private void purgeUserData(int userId) {
         UserAccounts accounts;
         synchronized (mUsers) {
             accounts = mUsers.get(userId);
@@ -4446,11 +4460,12 @@
     }
 
     private void startChooseAccountActivityWithAccounts(
-        IAccountManagerResponse response, Account[] accounts) {
+        IAccountManagerResponse response, Account[] accounts, String callingPackage) {
         Intent intent = new Intent(mContext, ChooseAccountActivity.class);
         intent.putExtra(AccountManager.KEY_ACCOUNTS, accounts);
         intent.putExtra(AccountManager.KEY_ACCOUNT_MANAGER_RESPONSE,
                 new AccountManagerResponse(response));
+        intent.putExtra(AccountManager.KEY_ANDROID_PACKAGE_NAME, callingPackage);
 
         mContext.startActivityAsUser(intent, UserHandle.of(UserHandle.getCallingUserId()));
     }
@@ -4461,7 +4476,7 @@
         String callingPackage) {
 
         if (needToStartChooseAccountActivity(accounts, callingPackage)) {
-            startChooseAccountActivityWithAccounts(response, accounts);
+            startChooseAccountActivityWithAccounts(response, accounts, callingPackage);
             return;
         }
         if (accounts.length == 1) {
@@ -5165,6 +5180,28 @@
 
             fout.println();
             mAuthenticatorCache.dump(fd, fout, args, userAccounts.userId);
+
+            boolean isUserUnlocked;
+            synchronized (mUsers) {
+                isUserUnlocked = isLocalUnlockedUser(userAccounts.userId);
+            }
+            // Following logs are printed only when user is unlocked.
+            if (!isUserUnlocked) {
+                return;
+            }
+            fout.println();
+            synchronized (userAccounts.dbLock) {
+                Map<Account, Map<String, Integer>> allVisibilityValues =
+                        userAccounts.accountsDb.findAllVisibilityValues();
+                fout.println("Account visibility:");
+                for (Account account : allVisibilityValues.keySet()) {
+                    fout.println("  " + account.name);
+                    Map<String, Integer> visibilities = allVisibilityValues.get(account);
+                    for (Entry<String, Integer> entry : visibilities.entrySet()) {
+                        fout.println("    " + entry.getKey() + ", " + entry.getValue());
+                    }
+                }
+            }
         }
     }
 
@@ -5248,7 +5285,7 @@
                         == PackageManager.PERMISSION_GRANTED) {
                     // Checks runtime permission revocation.
                     final int opCode = AppOpsManager.permissionToOpCode(perm);
-                    if (opCode == AppOpsManager.OP_NONE || mAppOpsManager.noteOp(
+                    if (opCode == AppOpsManager.OP_NONE || mAppOpsManager.noteOpNoThrow(
                             opCode, uid, packageName) == AppOpsManager.MODE_ALLOWED) {
                         return true;
                     }
@@ -5269,7 +5306,7 @@
                     Log.v(TAG, "  caller uid " + callingUid + " has " + perm);
                 }
                 final int opCode = AppOpsManager.permissionToOpCode(perm);
-                if (opCode == AppOpsManager.OP_NONE || mAppOpsManager.noteOp(
+                if (opCode == AppOpsManager.OP_NONE || mAppOpsManager.noteOpNoThrow(
                         opCode, callingUid, opPackageName) == AppOpsManager.MODE_ALLOWED) {
                     return true;
                 }
@@ -5916,11 +5953,9 @@
             String tokenType,
             String callingPackage,
             byte[] pkgSigDigest) {
-        synchronized (accounts.dbLock) {
-            synchronized (accounts.cacheLock) {
-                return accounts.accountTokenCaches.get(
-                        account, tokenType, callingPackage, pkgSigDigest);
-            }
+        synchronized (accounts.cacheLock) {
+            return accounts.accountTokenCaches.get(
+                    account, tokenType, callingPackage, pkgSigDigest);
         }
     }
 
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 756e274..9d823a7 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -1043,8 +1043,8 @@
                         try {
                             if (AppGlobals.getPackageManager().checkPermission(
                                     android.Manifest.permission.INSTANT_APP_FOREGROUND_SERVICE,
-                                    r.appInfo.packageName,
-                                    r.appInfo.uid) != PackageManager.PERMISSION_GRANTED) {
+                                    r.appInfo.packageName, UserHandle.getUserId(r.appInfo.uid))
+                                            != PackageManager.PERMISSION_GRANTED) {
                                 throw new SecurityException("Instant app " + r.appInfo.packageName
                                         + " does not have permission to create foreground"
                                         + "services");
@@ -1926,6 +1926,9 @@
             if (r.restartDelay == 0) {
                 r.restartCount++;
                 r.restartDelay = minDuration;
+            } else if (r.crashCount > 1) {
+                r.restartDelay = mAm.mConstants.BOUND_SERVICE_CRASH_RESTART_DURATION
+                        * (r.crashCount - 1);
             } else {
                 // If it has been a "reasonably long time" since the service
                 // was started, then reset our restart duration back to
@@ -2159,6 +2162,15 @@
             }
         }
 
+        if (r.fgRequired) {
+            if (DEBUG_FOREGROUND_SERVICE) {
+                Slog.v(TAG, "Whitelisting " + UserHandle.formatUid(r.appInfo.uid)
+                        + " for fg-service launch");
+            }
+            mAm.tempWhitelistUidLocked(r.appInfo.uid,
+                    SERVICE_START_FOREGROUND_TIMEOUT, "fg-service-launch");
+        }
+
         if (!mPendingServices.contains(r)) {
             mPendingServices.add(r);
         }
@@ -3129,8 +3141,9 @@
 
             // Any services running in the application may need to be placed
             // back in the pending list.
-            if (allowRestart && sr.crashCount >= 2 && (sr.serviceInfo.applicationInfo.flags
-                    &ApplicationInfo.FLAG_PERSISTENT) == 0) {
+            if (allowRestart && sr.crashCount >= mAm.mConstants.BOUND_SERVICE_MAX_CRASH_RETRY
+                    && (sr.serviceInfo.applicationInfo.flags
+                        &ApplicationInfo.FLAG_PERSISTENT) == 0) {
                 Slog.w(TAG, "Service crashed " + sr.crashCount
                         + " times, stopping: " + sr);
                 EventLog.writeEvent(EventLogTags.AM_SERVICE_CRASHED_TOO_MUCH,
diff --git a/services/core/java/com/android/server/am/ActivityManagerConstants.java b/services/core/java/com/android/server/am/ActivityManagerConstants.java
index 6c3fe91..b52db87 100644
--- a/services/core/java/com/android/server/am/ActivityManagerConstants.java
+++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java
@@ -32,6 +32,7 @@
  * Settings constants that can modify the activity manager's behavior.
  */
 final class ActivityManagerConstants extends ContentObserver {
+
     // Key names stored in the settings value.
     private static final String KEY_MAX_CACHED_PROCESSES = "max_cached_processes";
     private static final String KEY_BACKGROUND_SETTLE_TIME = "background_settle_time";
@@ -48,9 +49,11 @@
     private static final String KEY_GC_MIN_INTERVAL = "gc_min_interval";
     private static final String KEY_FULL_PSS_MIN_INTERVAL = "full_pss_min_interval";
     private static final String KEY_FULL_PSS_LOWERED_INTERVAL = "full_pss_lowered_interval";
-    private static final String KEY_POWER_CHECK_DELAY = "power_check_delay";
-    private static final String KEY_WAKE_LOCK_MIN_CHECK_DURATION = "wake_lock_min_check_duration";
-    private static final String KEY_CPU_MIN_CHECK_DURATION = "cpu_min_check_duration";
+    private static final String KEY_POWER_CHECK_INTERVAL = "power_check_interval";
+    private static final String KEY_POWER_CHECK_MAX_CPU_1 = "power_check_max_cpu_1";
+    private static final String KEY_POWER_CHECK_MAX_CPU_2 = "power_check_max_cpu_2";
+    private static final String KEY_POWER_CHECK_MAX_CPU_3 = "power_check_max_cpu_3";
+    private static final String KEY_POWER_CHECK_MAX_CPU_4 = "power_check_max_cpu_4";
     private static final String KEY_SERVICE_USAGE_INTERACTION_TIME
             = "service_usage_interaction_time";
     private static final String KEY_USAGE_STATS_INTERACTION_INTERVAL
@@ -61,6 +64,8 @@
     static final String KEY_SERVICE_MIN_RESTART_TIME_BETWEEN = "service_min_restart_time_between";
     static final String KEY_MAX_SERVICE_INACTIVITY = "service_max_inactivity";
     static final String KEY_BG_START_TIMEOUT = "service_bg_start_timeout";
+    static final String KEY_BOUND_SERVICE_CRASH_RESTART_DURATION = "service_crash_restart_duration";
+    static final String KEY_BOUND_SERVICE_CRASH_MAX_RETRY = "service_crash_max_retry";
 
     private static final int DEFAULT_MAX_CACHED_PROCESSES = 32;
     private static final long DEFAULT_BACKGROUND_SETTLE_TIME = 60*1000;
@@ -73,11 +78,11 @@
     private static final long DEFAULT_GC_MIN_INTERVAL = 60*1000;
     private static final long DEFAULT_FULL_PSS_MIN_INTERVAL = 10*60*1000;
     private static final long DEFAULT_FULL_PSS_LOWERED_INTERVAL = 2*60*1000;
-    private static final long DEFAULT_POWER_CHECK_DELAY = (DEBUG_POWER_QUICK ? 2 : 15) * 60*1000;
-    private static final long DEFAULT_WAKE_LOCK_MIN_CHECK_DURATION
-            = (DEBUG_POWER_QUICK ? 1 : 5) * 60*1000;
-    private static final long DEFAULT_CPU_MIN_CHECK_DURATION
-            = (DEBUG_POWER_QUICK ? 1 : 5) * 60*1000;
+    private static final long DEFAULT_POWER_CHECK_INTERVAL = (DEBUG_POWER_QUICK ? 1 : 5) * 60*1000;
+    private static final int DEFAULT_POWER_CHECK_MAX_CPU_1 = 25;
+    private static final int DEFAULT_POWER_CHECK_MAX_CPU_2 = 25;
+    private static final int DEFAULT_POWER_CHECK_MAX_CPU_3 = 10;
+    private static final int DEFAULT_POWER_CHECK_MAX_CPU_4 = 2;
     private static final long DEFAULT_SERVICE_USAGE_INTERACTION_TIME = 30*60*1000;
     private static final long DEFAULT_USAGE_STATS_INTERACTION_INTERVAL = 24*60*60*1000L;
     private static final long DEFAULT_SERVICE_RESTART_DURATION = 1*1000;
@@ -86,6 +91,9 @@
     private static final long DEFAULT_SERVICE_MIN_RESTART_TIME_BETWEEN = 10*1000;
     private static final long DEFAULT_MAX_SERVICE_INACTIVITY = 30*60*1000;
     private static final long DEFAULT_BG_START_TIMEOUT = 15*1000;
+    private static final long DEFAULT_BOUND_SERVICE_CRASH_RESTART_DURATION = 30*60_000;
+    private static final int DEFAULT_BOUND_SERVICE_CRASH_MAX_RETRY = 16;
+
 
     // Maximum number of cached processes we will allow.
     public int MAX_CACHED_PROCESSES = DEFAULT_MAX_CACHED_PROCESSES;
@@ -133,16 +141,26 @@
     // when the request is due to the memory state being lowered.
     long FULL_PSS_LOWERED_INTERVAL = DEFAULT_FULL_PSS_LOWERED_INTERVAL;
 
-    // The rate at which we check for apps using excessive power -- 15 mins.
-    long POWER_CHECK_DELAY = DEFAULT_POWER_CHECK_DELAY;
-
-    // The minimum sample duration we will allow before deciding we have
-    // enough data on wake locks to start killing things.
-    long WAKE_LOCK_MIN_CHECK_DURATION = DEFAULT_WAKE_LOCK_MIN_CHECK_DURATION;
-
     // The minimum sample duration we will allow before deciding we have
     // enough data on CPU usage to start killing things.
-    long CPU_MIN_CHECK_DURATION = DEFAULT_CPU_MIN_CHECK_DURATION;
+    long POWER_CHECK_INTERVAL = DEFAULT_POWER_CHECK_INTERVAL;
+
+    // The maximum CPU (as a percentage) a process is allowed to use over the first
+    // power check interval that it is cached.
+    int POWER_CHECK_MAX_CPU_1 = DEFAULT_POWER_CHECK_MAX_CPU_1;
+
+    // The maximum CPU (as a percentage) a process is allowed to use over the second
+    // power check interval that it is cached.  The home app will never check for less
+    // CPU than this (it will not test against the 3 or 4 levels).
+    int POWER_CHECK_MAX_CPU_2 = DEFAULT_POWER_CHECK_MAX_CPU_2;
+
+    // The maximum CPU (as a percentage) a process is allowed to use over the third
+    // power check interval that it is cached.
+    int POWER_CHECK_MAX_CPU_3 = DEFAULT_POWER_CHECK_MAX_CPU_3;
+
+    // The maximum CPU (as a percentage) a process is allowed to use over the fourth
+    // power check interval that it is cached.
+    int POWER_CHECK_MAX_CPU_4 = DEFAULT_POWER_CHECK_MAX_CPU_4;
 
     // This is the amount of time an app needs to be running a foreground service before
     // we will consider it to be doing interaction for usage stats.
@@ -178,6 +196,12 @@
     // allowing the next pending start to run.
     public long BG_START_TIMEOUT = DEFAULT_BG_START_TIMEOUT;
 
+    // Initial backoff delay for retrying bound foreground services
+    public long BOUND_SERVICE_CRASH_RESTART_DURATION = DEFAULT_BOUND_SERVICE_CRASH_RESTART_DURATION;
+
+    // Maximum number of retries for bound foreground services that crash soon after start
+    public long BOUND_SERVICE_MAX_CRASH_RETRY = DEFAULT_BOUND_SERVICE_CRASH_MAX_RETRY;
+
     private final ActivityManagerService mService;
     private ContentResolver mResolver;
     private final KeyValueListParser mParser = new KeyValueListParser(',');
@@ -270,12 +294,16 @@
                     DEFAULT_FULL_PSS_MIN_INTERVAL);
             FULL_PSS_LOWERED_INTERVAL = mParser.getLong(KEY_FULL_PSS_LOWERED_INTERVAL,
                     DEFAULT_FULL_PSS_LOWERED_INTERVAL);
-            POWER_CHECK_DELAY = mParser.getLong(KEY_POWER_CHECK_DELAY,
-                    DEFAULT_POWER_CHECK_DELAY);
-            WAKE_LOCK_MIN_CHECK_DURATION = mParser.getLong(KEY_WAKE_LOCK_MIN_CHECK_DURATION,
-                    DEFAULT_WAKE_LOCK_MIN_CHECK_DURATION);
-            CPU_MIN_CHECK_DURATION = mParser.getLong(KEY_CPU_MIN_CHECK_DURATION,
-                    DEFAULT_CPU_MIN_CHECK_DURATION);
+            POWER_CHECK_INTERVAL = mParser.getLong(KEY_POWER_CHECK_INTERVAL,
+                    DEFAULT_POWER_CHECK_INTERVAL);
+            POWER_CHECK_MAX_CPU_1 = mParser.getInt(KEY_POWER_CHECK_MAX_CPU_1,
+                    DEFAULT_POWER_CHECK_MAX_CPU_1);
+            POWER_CHECK_MAX_CPU_2 = mParser.getInt(KEY_POWER_CHECK_MAX_CPU_2,
+                    DEFAULT_POWER_CHECK_MAX_CPU_2);
+            POWER_CHECK_MAX_CPU_3 = mParser.getInt(KEY_POWER_CHECK_MAX_CPU_3,
+                    DEFAULT_POWER_CHECK_MAX_CPU_3);
+            POWER_CHECK_MAX_CPU_4 = mParser.getInt(KEY_POWER_CHECK_MAX_CPU_4,
+                    DEFAULT_POWER_CHECK_MAX_CPU_4);
             SERVICE_USAGE_INTERACTION_TIME = mParser.getLong(KEY_SERVICE_USAGE_INTERACTION_TIME,
                     DEFAULT_SERVICE_USAGE_INTERACTION_TIME);
             USAGE_STATS_INTERACTION_INTERVAL = mParser.getLong(KEY_USAGE_STATS_INTERACTION_INTERVAL,
@@ -292,6 +320,12 @@
                     DEFAULT_MAX_SERVICE_INACTIVITY);
             BG_START_TIMEOUT = mParser.getLong(KEY_BG_START_TIMEOUT,
                     DEFAULT_BG_START_TIMEOUT);
+            BOUND_SERVICE_CRASH_RESTART_DURATION = mParser.getLong(
+                KEY_BOUND_SERVICE_CRASH_RESTART_DURATION,
+                DEFAULT_BOUND_SERVICE_CRASH_RESTART_DURATION);
+            BOUND_SERVICE_MAX_CRASH_RETRY = mParser.getInt(KEY_BOUND_SERVICE_CRASH_MAX_RETRY,
+                DEFAULT_BOUND_SERVICE_CRASH_MAX_RETRY);
+
             updateMaxCachedProcesses();
         }
     }
@@ -335,12 +369,16 @@
         pw.println(FULL_PSS_MIN_INTERVAL);
         pw.print("  "); pw.print(KEY_FULL_PSS_LOWERED_INTERVAL); pw.print("=");
         pw.println(FULL_PSS_LOWERED_INTERVAL);
-        pw.print("  "); pw.print(KEY_POWER_CHECK_DELAY); pw.print("=");
-        pw.println(POWER_CHECK_DELAY);
-        pw.print("  "); pw.print(KEY_WAKE_LOCK_MIN_CHECK_DURATION); pw.print("=");
-        pw.println(WAKE_LOCK_MIN_CHECK_DURATION);
-        pw.print("  "); pw.print(KEY_CPU_MIN_CHECK_DURATION); pw.print("=");
-        pw.println(CPU_MIN_CHECK_DURATION);
+        pw.print("  "); pw.print(KEY_POWER_CHECK_INTERVAL); pw.print("=");
+        pw.println(POWER_CHECK_INTERVAL);
+        pw.print("  "); pw.print(KEY_POWER_CHECK_MAX_CPU_1); pw.print("=");
+        pw.println(POWER_CHECK_MAX_CPU_1);
+        pw.print("  "); pw.print(KEY_POWER_CHECK_MAX_CPU_2); pw.print("=");
+        pw.println(POWER_CHECK_MAX_CPU_2);
+        pw.print("  "); pw.print(KEY_POWER_CHECK_MAX_CPU_3); pw.print("=");
+        pw.println(POWER_CHECK_MAX_CPU_3);
+        pw.print("  "); pw.print(KEY_POWER_CHECK_MAX_CPU_4); pw.print("=");
+        pw.println(POWER_CHECK_MAX_CPU_4);
         pw.print("  "); pw.print(KEY_SERVICE_USAGE_INTERACTION_TIME); pw.print("=");
         pw.println(SERVICE_USAGE_INTERACTION_TIME);
         pw.print("  "); pw.print(KEY_USAGE_STATS_INTERACTION_INTERVAL); pw.print("=");
diff --git a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
index f440100..276f0ef 100644
--- a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
+++ b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
@@ -91,10 +91,10 @@
     static final boolean DEBUG_URI_PERMISSION = DEBUG_ALL || false;
     static final boolean DEBUG_USER_LEAVING = DEBUG_ALL || false;
     static final boolean DEBUG_VISIBILITY = DEBUG_ALL || false;
-    static final boolean DEBUG_VISIBLE_BEHIND = DEBUG_ALL_ACTIVITIES || false;
     static final boolean DEBUG_USAGE_STATS = DEBUG_ALL || false;
     static final boolean DEBUG_PERMISSIONS_REVIEW = DEBUG_ALL || false;
     static final boolean DEBUG_WHITELISTS = DEBUG_ALL || false;
+    static final boolean DEBUG_METRICS = DEBUG_ALL || false;
 
     static final String POSTFIX_ADD_REMOVE = (APPEND_CATEGORY_NAME) ? "_AddRemove" : "";
     static final String POSTFIX_APP = (APPEND_CATEGORY_NAME) ? "_App" : "";
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index f382c23..b4c18b1 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -28,6 +28,7 @@
 import static android.app.ActivityManager.RESIZE_MODE_PRESERVE_WINDOW;
 import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
 import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID;
+import static android.app.ActivityManager.StackId.FIRST_DYNAMIC_STACK_ID;
 import static android.app.ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID;
 import static android.app.ActivityManager.StackId.INVALID_STACK_ID;
 import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
@@ -95,6 +96,7 @@
 import static android.provider.Settings.Global.WAIT_FOR_DEBUGGER;
 import static android.provider.Settings.System.FONT_SCALE;
 import static android.service.voice.VoiceInteractionSession.SHOW_SOURCE_APPLICATION;
+import static android.text.format.DateUtils.DAY_IN_MILLIS;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.Display.INVALID_DISPLAY;
 import static com.android.internal.util.XmlUtils.readBooleanAttribute;
@@ -135,7 +137,6 @@
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_URI_PERMISSION;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_USAGE_STATS;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_VISIBILITY;
-import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_VISIBLE_BEHIND;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_WHITELISTS;
 import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_BACKUP;
 import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_BROADCAST;
@@ -164,7 +165,6 @@
 import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_VISIBLE_BEHIND;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.am.ActivityStackSupervisor.ActivityContainer.FORCE_NEW_TASK_FLAGS;
 import static com.android.server.am.ActivityStackSupervisor.CREATE_IF_NEEDED;
 import static com.android.server.am.ActivityStackSupervisor.DEFER_RESUME;
 import static com.android.server.am.ActivityStackSupervisor.MATCH_TASK_IN_STACKS_ONLY;
@@ -211,8 +211,6 @@
 import android.app.BroadcastOptions;
 import android.app.ContentProviderHolder;
 import android.app.Dialog;
-import android.app.IActivityContainer;
-import android.app.IActivityContainerCallback;
 import android.app.IActivityController;
 import android.app.IActivityManager;
 import android.app.IAppTask;
@@ -255,7 +253,6 @@
 import android.content.IIntentSender;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.IntentSender;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.ConfigurationInfo;
@@ -342,7 +339,7 @@
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.AtomicFile;
-import android.util.BootTimingsTraceLog;
+import android.util.TimingsTraceLog;
 import android.util.DebugUtils;
 import android.util.DisplayMetrics;
 import android.util.EventLog;
@@ -415,6 +412,7 @@
 import com.android.server.wm.PinnedStackWindowController;
 import com.android.server.wm.WindowManagerService;
 
+import java.text.SimpleDateFormat;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlSerializer;
@@ -468,7 +466,6 @@
     private static final String TAG_CONFIGURATION = TAG + POSTFIX_CONFIGURATION;
     private static final String TAG_FOCUS = TAG + POSTFIX_FOCUS;
     private static final String TAG_IMMERSIVE = TAG + POSTFIX_IMMERSIVE;
-    private static final String TAG_LOCKSCREEN = TAG + POSTFIX_LOCKSCREEN;
     private static final String TAG_LOCKTASK = TAG + POSTFIX_LOCKTASK;
     private static final String TAG_LRU = TAG + POSTFIX_LRU;
     private static final String TAG_MU = TAG + POSTFIX_MU;
@@ -486,7 +483,6 @@
     private static final String TAG_UID_OBSERVERS = TAG + POSTFIX_UID_OBSERVERS;
     private static final String TAG_URI_PERMISSION = TAG + POSTFIX_URI_PERMISSION;
     private static final String TAG_VISIBILITY = TAG + POSTFIX_VISIBILITY;
-    private static final String TAG_VISIBLE_BEHIND = TAG + POSTFIX_VISIBLE_BEHIND;
 
     // Mock "pretend we're idle now" broadcast action to the job scheduler; declared
     // here so that while the job scheduler can depend on AMS, the other way around
@@ -508,8 +504,6 @@
 
     static final String SYSTEM_DEBUGGABLE = "ro.debuggable";
 
-    static final boolean IS_USER_BUILD = "user".equals(Build.TYPE);
-
     // Amount of time after a call to stopAppSwitches() during which we will
     // prevent further untrusted switches from happening.
     static final long APP_SWITCH_DELAY_TIME = 5*1000;
@@ -719,7 +713,7 @@
 
     public boolean canShowErrorDialogs() {
         return mShowDialogs && !mSleeping && !mShuttingDown
-                && !mKeyguardController.isKeyguardShowing()
+                && !mKeyguardController.isKeyguardShowing(DEFAULT_DISPLAY)
                 && !(UserManager.isDeviceInDemoMode(mContext)
                         && mUserController.getCurrentUser().isDemo());
     }
@@ -1322,11 +1316,6 @@
     boolean mDidAppSwitch;
 
     /**
-     * Last time (in realtime) at which we checked for power usage.
-     */
-    long mLastPowerCheckRealtime;
-
-    /**
      * Last time (in uptime) at which we checked for power usage.
      */
     long mLastPowerCheckUptime;
@@ -1356,7 +1345,7 @@
      * Set while we are running a voice interaction.  This overrides
      * sleeping while it is active.
      */
-    private IVoiceInteractionSession mRunningVoice;
+    IVoiceInteractionSession mRunningVoice;
 
     /**
      * For some direct access we need to power manager.
@@ -1376,13 +1365,6 @@
     private int mWakefulness = PowerManagerInternal.WAKEFULNESS_AWAKE;
 
     /**
-     * A list of tokens that cause the top activity to be put to sleep.
-     * They are used by components that may hide and block interaction with underlying
-     * activities.
-     */
-    final ArrayList<SleepToken> mSleepTokens = new ArrayList<SleepToken>();
-
-    /**
      * Set if we are shutting down the system, similar to sleeping.
      */
     boolean mShuttingDown = false;
@@ -1489,7 +1471,7 @@
      * Flag that indicates if multi-window is enabled.
      *
      * For any particular form of multi-window to be enabled, generic multi-window must be enabled
-     * in {@link com.android.internal.R.bool.config_supportsMultiWindow} config or
+     * in {@link com.android.internal.R.bool#config_supportsMultiWindow} config or
      * {@link Settings.Global#DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES} development option set.
      * At least one of the forms of multi-window must be enabled in order for this flag to be
      * initialized to 'true'.
@@ -1509,11 +1491,7 @@
     boolean mControllerIsAMonkey = false;
     String mProfileApp = null;
     ProcessRecord mProfileProc = null;
-    String mProfileFile;
-    ParcelFileDescriptor mProfileFd;
-    int mSamplingInterval = 0;
-    boolean mAutoStopProfiler = false;
-    boolean mStreamingOutput = false;
+    ProfilerInfo mProfilerInfo = null;
     int mProfileType = 0;
     final ProcessMap<Pair<Long, String>> mMemWatchProcesses = new ProcessMap<>();
     String mMemWatchDumpProcName;
@@ -1582,6 +1560,13 @@
     final ArrayList<UidRecord.ChangeItem> mPendingUidChanges = new ArrayList<>();
     final ArrayList<UidRecord.ChangeItem> mAvailUidChanges = new ArrayList<>();
 
+    OomAdjObserver mCurOomAdjObserver;
+    int mCurOomAdjUid;
+
+    interface OomAdjObserver {
+        void onOomAdjMessage(String msg);
+    }
+
     /**
      * Runtime CPU use collection thread.  This object's lock is used to
      * perform synchronization with the thread (notifying it to run).
@@ -1660,7 +1645,7 @@
     static final int POST_HEAVY_NOTIFICATION_MSG = 24;
     static final int CANCEL_HEAVY_NOTIFICATION_MSG = 25;
     static final int SHOW_STRICT_MODE_VIOLATION_UI_MSG = 26;
-    static final int CHECK_EXCESSIVE_WAKE_LOCKS_MSG = 27;
+    static final int CHECK_EXCESSIVE_POWER_USE_MSG = 27;
     static final int CLEAR_DNS_CACHE_MSG = 28;
     static final int UPDATE_HTTP_PROXY_MSG = 29;
     static final int SHOW_COMPAT_MODE_DIALOG_UI_MSG = 30;
@@ -1703,7 +1688,9 @@
     static final int DISPATCH_PENDING_INTENT_CANCEL_MSG = 67;
     static final int PUSH_TEMP_WHITELIST_UI_MSG = 68;
     static final int SERVICE_FOREGROUND_CRASH_MSG = 69;
+    static final int DISPATCH_OOM_ADJ_OBSERVER_MSG = 70;
     static final int START_USER_SWITCH_FG_MSG = 712;
+    static final int NOTIFY_VR_KEYGUARD_MSG = 74;
 
     static final int FIRST_ACTIVITY_STACK_MSG = 100;
     static final int FIRST_BROADCAST_QUEUE_MSG = 200;
@@ -1745,6 +1732,8 @@
 
     final boolean mPermissionReviewRequired;
 
+    private static String sTheRealBuildSerial = Build.UNKNOWN;
+
     /**
      * Current global configuration information. Contains general settings for the entire system,
      * also corresponds to the merged configuration of the default display.
@@ -1936,6 +1925,9 @@
             case DISPATCH_UIDS_CHANGED_UI_MSG: {
                 dispatchUidsChanged();
             } break;
+            case DISPATCH_OOM_ADJ_OBSERVER_MSG: {
+                dispatchOomAdjObserver((String)msg.obj);
+            } break;
             case PUSH_TEMP_WHITELIST_UI_MSG: {
                 pushTempWhitelist();
             } break;
@@ -2125,12 +2117,12 @@
                 } catch (RemoteException e) {
                 }
             } break;
-            case CHECK_EXCESSIVE_WAKE_LOCKS_MSG: {
+            case CHECK_EXCESSIVE_POWER_USE_MSG: {
                 synchronized (ActivityManagerService.this) {
-                    checkExcessivePowerUsageLocked(true);
-                    removeMessages(CHECK_EXCESSIVE_WAKE_LOCKS_MSG);
-                    Message nmsg = obtainMessage(CHECK_EXCESSIVE_WAKE_LOCKS_MSG);
-                    sendMessageDelayed(nmsg, mConstants.POWER_CHECK_DELAY);
+                    checkExcessivePowerUsageLocked();
+                    removeMessages(CHECK_EXCESSIVE_POWER_USE_MSG);
+                    Message nmsg = obtainMessage(CHECK_EXCESSIVE_POWER_USE_MSG);
+                    sendMessageDelayed(nmsg, mConstants.POWER_CHECK_INTERVAL);
                 }
             } break;
             case REPORT_MEM_USAGE_MSG: {
@@ -2423,6 +2415,9 @@
             case NOTIFY_VR_SLEEPING_MSG: {
                 notifyVrManagerOfSleepState(msg.arg1 != 0);
             } break;
+            case NOTIFY_VR_KEYGUARD_MSG: {
+                notifyVrManagerOfKeyguardState(msg.arg1 != 0);
+            } break;
             case HANDLE_TRUST_STORAGE_UPDATE_MSG: {
                 synchronized (ActivityManagerService.this) {
                     for (int i = mLruProcesses.size() - 1 ; i >= 0 ; i--) {
@@ -2662,6 +2657,11 @@
             mService.start();
         }
 
+        @Override
+        public void onCleanupUser(int userId) {
+            mService.mBatteryStatsService.onCleanupUser(userId);
+        }
+
         public ActivityManagerService getService() {
             return mService;
         }
@@ -2745,7 +2745,7 @@
         File dataDir = Environment.getDataDirectory();
         File systemDir = new File(dataDir, "system");
         systemDir.mkdirs();
-        mBatteryStatsService = new BatteryStatsService(systemDir, mHandler);
+        mBatteryStatsService = new BatteryStatsService(systemContext, systemDir, mHandler);
         mBatteryStatsService.getActiveStatistics().readLocked();
         mBatteryStatsService.scheduleWriteToDisk();
         mOnBattery = DEBUG_POWER ? true
@@ -2848,7 +2848,7 @@
         removeAllProcessGroups();
         mProcessCpuThread.start();
 
-        mBatteryStatsService.publish(mContext);
+        mBatteryStatsService.publish();
         mAppOpsService.publish(mContext);
         Slog.d("AppOps", "AppOpsService published");
         LocalServices.addService(ActivityManagerInternal.class, new LocalService());
@@ -3005,6 +3005,9 @@
                                     }
                                     ps.addCpuTimeLocked(st.rel_utime, st.rel_stime);
                                     pr.curCpuTime += st.rel_utime + st.rel_stime;
+                                    if (pr.lastCpuTime == 0) {
+                                        pr.lastCpuTime = pr.curCpuTime;
+                                    }
                                 } else {
                                     BatteryStatsImpl.Uid.Proc ps = st.batteryStats;
                                     if (ps == null || !ps.isActive()) {
@@ -3241,6 +3244,18 @@
     }
 
     final void applyUpdateVrModeLocked(ActivityRecord r) {
+        // VR apps are expected to run in a main display. If an app is turning on VR for
+        // itself, but lives in a dynamic stack, then make sure that it is moved to the main
+        // fullscreen stack before enabling VR Mode.
+        // TODO: The goal of this code is to keep the VR app on the main display. When the
+        // stack implementation changes in the future, keep in mind that the use of the fullscreen
+        // stack is a means to move the activity to the main display and a moveActivityToDisplay()
+        // option would be a better choice here.
+        if (r.requestedVrComponent != null && r.getStackId() >= FIRST_DYNAMIC_STACK_ID) {
+            Slog.i(TAG, "Moving " + r.shortComponentName + " from stack " + r.getStackId()
+                    + " to main stack for VR");
+            moveTaskToStack(r.getTask().taskId, FULLSCREEN_WORKSPACE_STACK_ID, true /* toTop */);
+        }
         mHandler.sendMessage(
                 mHandler.obtainMessage(VR_MODE_CHANGE_MSG, 0, 0, r));
     }
@@ -3258,6 +3273,19 @@
         vrService.onSleepStateChanged(isSleeping);
     }
 
+    private void sendNotifyVrManagerOfKeyguardState(boolean isShowing) {
+        mHandler.sendMessage(
+                mHandler.obtainMessage(NOTIFY_VR_KEYGUARD_MSG, isShowing ? 1 : 0, 0));
+    }
+
+    private void notifyVrManagerOfKeyguardState(boolean isShowing) {
+        final VrManagerInternal vrService = LocalServices.getService(VrManagerInternal.class);
+        if (vrService == null) {
+            return;
+        }
+        vrService.onKeyguardStateChanged(isShowing);
+    }
+
     final void showAskCompatModeDialogLocked(ActivityRecord r) {
         Message msg = Message.obtain();
         msg.what = SHOW_COMPAT_MODE_DIALOG_UI_MSG;
@@ -3578,10 +3606,8 @@
     }
 
     void notifyPackageUse(String packageName, int reason) {
-        IPackageManager pm = AppGlobals.getPackageManager();
-        try {
-            pm.notifyPackageUse(packageName, reason);
-        } catch (RemoteException e) {
+        synchronized(this) {
+            getPackageManagerInternalLocked().notifyPackageUse(packageName, reason);
         }
     }
 
@@ -4126,8 +4152,7 @@
                             ri.activityInfo.packageName, ri.activityInfo.name));
                     mActivityStarter.startActivityLocked(null, intent, null /*ephemeralIntent*/,
                             null, ri.activityInfo, null /*rInfo*/, null, null, null, null, 0, 0, 0,
-                            null, 0, 0, 0, null, false, false, null, null, null,
-                            "startSetupActivity");
+                            null, 0, 0, 0, null, false, false, null, null, "startSetupActivity");
                 }
             }
         }
@@ -4350,8 +4375,7 @@
         if (VALIDATE_UID_STATES && mUidObservers.getRegisteredCallbackCount() > 0) {
             for (int j = 0; j < N; ++j) {
                 final UidRecord.ChangeItem item = mActiveUidChanges[j];
-                if (item.change == UidRecord.CHANGE_GONE
-                        || item.change == UidRecord.CHANGE_GONE_IDLE) {
+                if ((item.change & UidRecord.CHANGE_GONE) != 0) {
                     mValidateUids.remove(item.uid);
                 } else {
                     UidRecord validateUid = mValidateUids.get(item.uid);
@@ -4359,9 +4383,9 @@
                         validateUid = new UidRecord(item.uid);
                         mValidateUids.put(item.uid, validateUid);
                     }
-                    if (item.change == UidRecord.CHANGE_IDLE) {
+                    if ((item.change & UidRecord.CHANGE_IDLE) != 0) {
                         validateUid.idle = true;
-                    } else if (item.change == UidRecord.CHANGE_ACTIVE) {
+                    } else if ((item.change & UidRecord.CHANGE_ACTIVE) != 0) {
                         validateUid.idle = false;
                     }
                     validateUid.curProcState = validateUid.setProcState = item.processState;
@@ -4386,22 +4410,37 @@
             for (int j = 0; j < changesSize; j++) {
                 UidRecord.ChangeItem item = mActiveUidChanges[j];
                 final int change = item.change;
-                if (change == UidRecord.CHANGE_IDLE
-                        || change == UidRecord.CHANGE_GONE_IDLE) {
+                if (change == UidRecord.CHANGE_PROCSTATE &&
+                        (reg.which & ActivityManager.UID_OBSERVER_PROCSTATE) == 0) {
+                    // No-op common case: no significant change, the observer is not
+                    // interested in all proc state changes.
+                    continue;
+                }
+                if ((change & UidRecord.CHANGE_IDLE) != 0) {
                     if ((reg.which & ActivityManager.UID_OBSERVER_IDLE) != 0) {
                         if (DEBUG_UID_OBSERVERS) Slog.i(TAG_UID_OBSERVERS,
                                 "UID idle uid=" + item.uid);
                         observer.onUidIdle(item.uid, item.ephemeral);
                     }
-                } else if (change == UidRecord.CHANGE_ACTIVE) {
+                } else if ((change & UidRecord.CHANGE_ACTIVE) != 0) {
                     if ((reg.which & ActivityManager.UID_OBSERVER_ACTIVE) != 0) {
                         if (DEBUG_UID_OBSERVERS) Slog.i(TAG_UID_OBSERVERS,
                                 "UID active uid=" + item.uid);
                         observer.onUidActive(item.uid);
                     }
                 }
-                if (change == UidRecord.CHANGE_GONE
-                        || change == UidRecord.CHANGE_GONE_IDLE) {
+                if ((reg.which & ActivityManager.UID_OBSERVER_CACHED) != 0) {
+                    if ((change & UidRecord.CHANGE_CACHED) != 0) {
+                        if (DEBUG_UID_OBSERVERS) Slog.i(TAG_UID_OBSERVERS,
+                                "UID cached uid=" + item.uid);
+                        observer.onUidCachedChanged(item.uid, true);
+                    } else if ((change & UidRecord.CHANGE_UNCACHED) != 0) {
+                        if (DEBUG_UID_OBSERVERS) Slog.i(TAG_UID_OBSERVERS,
+                                "UID active uid=" + item.uid);
+                        observer.onUidCachedChanged(item.uid, false);
+                    }
+                }
+                if ((change & UidRecord.CHANGE_GONE) != 0) {
                     if ((reg.which & ActivityManager.UID_OBSERVER_GONE) != 0) {
                         if (DEBUG_UID_OBSERVERS) Slog.i(TAG_UID_OBSERVERS,
                                 "UID gone uid=" + item.uid);
@@ -4442,6 +4481,38 @@
         }
     }
 
+    void dispatchOomAdjObserver(String msg) {
+        OomAdjObserver observer;
+        synchronized (this) {
+            observer = mCurOomAdjObserver;
+        }
+
+        if (observer != null) {
+            observer.onOomAdjMessage(msg);
+        }
+    }
+
+    void setOomAdjObserver(int uid, OomAdjObserver observer) {
+        synchronized (this) {
+            mCurOomAdjUid = uid;
+            mCurOomAdjObserver = observer;
+        }
+    }
+
+    void clearOomAdjObserver() {
+        synchronized (this) {
+            mCurOomAdjUid = -1;
+            mCurOomAdjObserver = null;
+        }
+    }
+
+    void reportOomAdjMessageLocked(String tag, String msg) {
+        Slog.d(tag, msg);
+        if (mCurOomAdjObserver != null) {
+            mUiHandler.obtainMessage(DISPATCH_OOM_ADJ_OBSERVER_MSG, msg).sendToTarget();
+        }
+    }
+
     @Override
     public final int startActivity(IApplicationThread caller, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
@@ -4451,26 +4522,6 @@
                 UserHandle.getCallingUserId());
     }
 
-    final int startActivity(Intent intent, ActivityStackSupervisor.ActivityContainer container) {
-        enforceNotIsolatedCaller("ActivityContainer.startActivity");
-        final int userId = mUserController.handleIncomingUser(Binder.getCallingPid(),
-                Binder.getCallingUid(), mStackSupervisor.mCurrentUser, false,
-                ActivityManagerService.ALLOW_FULL_ONLY, "ActivityContainer", null);
-
-        // TODO: Switch to user app stacks here.
-        String mimeType = intent.getType();
-        final Uri data = intent.getData();
-        if (mimeType == null && data != null && "content".equals(data.getScheme())) {
-            mimeType = getProviderMimeType(data, userId);
-        }
-        container.checkEmbeddedAllowedInner(userId, intent, mimeType);
-
-        intent.addFlags(FORCE_NEW_TASK_FLAGS);
-        return mActivityStarter.startActivityMayWait(null, -1, null, intent, mimeType, null, null,
-                null, null, 0, 0, null, null, null, null, false, userId, container, null,
-                "startActivity");
-    }
-
     @Override
     public final int startActivityAsUser(IApplicationThread caller, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
@@ -4481,8 +4532,7 @@
         // TODO: Switch to user app stacks here.
         return mActivityStarter.startActivityMayWait(caller, -1, callingPackage, intent,
                 resolvedType, null, null, resultTo, resultWho, requestCode, startFlags,
-                profilerInfo, null, null, bOptions, false, userId, null, null,
-                "startActivityAsUser");
+                profilerInfo, null, null, bOptions, false, userId, null, "startActivityAsUser");
     }
 
     @Override
@@ -4545,7 +4595,7 @@
         try {
             int ret = mActivityStarter.startActivityMayWait(null, targetUid, targetPackage, intent,
                     resolvedType, null, null, resultTo, resultWho, requestCode, startFlags, null,
-                    null, null, bOptions, ignoreTargetSecurity, userId, null, null,
+                    null, null, bOptions, ignoreTargetSecurity, userId, null,
                     "startActivityAsCaller");
             return ret;
         } catch (SecurityException e) {
@@ -4575,7 +4625,7 @@
         // TODO: Switch to user app stacks here.
         mActivityStarter.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType,
                 null, null, resultTo, resultWho, requestCode, startFlags, profilerInfo, res, null,
-                bOptions, false, userId, null, null, "startActivityAndWait");
+                bOptions, false, userId, null, "startActivityAndWait");
         return res;
     }
 
@@ -4589,7 +4639,7 @@
         // TODO: Switch to user app stacks here.
         int ret = mActivityStarter.startActivityMayWait(caller, -1, callingPackage, intent,
                 resolvedType, null, null, resultTo, resultWho, requestCode, startFlags,
-                null, null, config, bOptions, false, userId, null, null, "startActivityWithConfig");
+                null, null, config, bOptions, false, userId, null, "startActivityWithConfig");
         return ret;
     }
 
@@ -4620,7 +4670,7 @@
             }
         }
         int ret = pir.sendInner(0, fillInIntent, resolvedType, whitelistToken, null, null,
-                resultTo, resultWho, requestCode, flagsMask, flagsValues, bOptions, null);
+                resultTo, resultWho, requestCode, flagsMask, flagsValues, bOptions);
         return ret;
     }
 
@@ -4646,7 +4696,7 @@
         // TODO: Switch to user app stacks here.
         return mActivityStarter.startActivityMayWait(null, callingUid, callingPackage, intent,
                 resolvedType, session, interactor, null, null, 0, startFlags, profilerInfo, null,
-                null, bOptions, false, userId, null, null, "startVoiceActivity");
+                null, bOptions, false, userId, null, "startVoiceActivity");
     }
 
     @Override
@@ -4665,7 +4715,7 @@
                 ALLOW_FULL_ONLY, "startAssistantActivity", null);
         return mActivityStarter.startActivityMayWait(null, callingUid, callingPackage, intent,
                 resolvedType, null, null, null, null, 0, 0, null, null, null, bOptions, false,
-                userId, null, null, "startAssistantActivity");
+                userId, null, "startAssistantActivity");
     }
 
     @Override
@@ -4838,7 +4888,7 @@
                     null /*ephemeralIntent*/, r.resolvedType, aInfo, null /*rInfo*/, null,
                     null, resultTo != null ? resultTo.appToken : null, resultWho, requestCode, -1,
                     r.launchedFromUid, r.launchedFromPackage, -1, r.launchedFromUid, 0, options,
-                    false, false, null, null, null, "startNextMatchingActivity");
+                    false, false, null, null, "startNextMatchingActivity");
             Binder.restoreCallingIdentity(origId);
 
             r.finishing = wasFinishing;
@@ -4870,16 +4920,15 @@
     final int startActivityInPackage(int uid, String callingPackage,
             Intent intent, String resolvedType, IBinder resultTo,
             String resultWho, int requestCode, int startFlags, Bundle bOptions, int userId,
-            IActivityContainer container, TaskRecord inTask, String reason) {
+            TaskRecord inTask, String reason) {
 
         userId = mUserController.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(),
                 userId, false, ALLOW_FULL_ONLY, "startActivityInPackage", null);
 
         // TODO: Switch to user app stacks here.
-        int ret = mActivityStarter.startActivityMayWait(null, uid, callingPackage, intent,
-                resolvedType, null, null, resultTo, resultWho, requestCode, startFlags,
-                null, null, null, bOptions, false, userId, container, inTask, reason);
-        return ret;
+        return mActivityStarter.startActivityMayWait(null, uid, ActivityStarter.PID_NULL, uid,
+                callingPackage, intent, resolvedType, null, null, resultTo, resultWho, requestCode,
+                startFlags, null, null, null, bOptions, false, userId, inTask, reason);
     }
 
     @Override
@@ -4899,24 +4948,31 @@
     final int startActivitiesInPackage(int uid, String callingPackage,
             Intent[] intents, String[] resolvedTypes, IBinder resultTo,
             Bundle bOptions, int userId) {
+        return startActivitiesInPackage(uid, ActivityStarter.PID_NULL, UserHandle.USER_NULL,
+                callingPackage, intents, resolvedTypes, resultTo, bOptions, userId);
+    }
+
+    final int startActivitiesInPackage(int uid, int realCallingPid, int realCallingUid,
+                                       String callingPackage, Intent[] intents, String[] resolvedTypes,
+                                       IBinder resultTo, Bundle bOptions, int userId) {
 
         final String reason = "startActivityInPackage";
         userId = mUserController.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(),
                 userId, false, ALLOW_FULL_ONLY, reason, null);
         // TODO: Switch to user app stacks here.
-        int ret = mActivityStarter.startActivities(null, uid, callingPackage, intents, resolvedTypes,
-                resultTo, bOptions, userId, reason);
+        int ret = mActivityStarter.startActivities(null, uid, realCallingPid, realCallingUid,
+                callingPackage, intents, resolvedTypes, resultTo, bOptions, userId, reason);
         return ret;
     }
 
     @Override
-    public void reportActivityFullyDrawn(IBinder token) {
+    public void reportActivityFullyDrawn(IBinder token, boolean restoredFromBundle) {
         synchronized (this) {
             ActivityRecord r = ActivityRecord.isInStackLocked(token);
             if (r == null) {
                 return;
             }
-            r.reportFullyDrawnLocked();
+            r.reportFullyDrawnLocked(restoredFromBundle);
         }
     }
 
@@ -5476,8 +5532,8 @@
         boolean useTombstonedForJavaTraces = false;
         File tracesFile;
 
-        final String tracesDir = SystemProperties.get("dalvik.vm.stack-trace-dir", "");
-        if (tracesDir.isEmpty()) {
+        final String tracesDirProp = SystemProperties.get("dalvik.vm.stack-trace-dir", "");
+        if (tracesDirProp.isEmpty()) {
             // When dalvik.vm.stack-trace-dir is not set, we are using the "old" trace
             // dumping scheme. All traces are written to a global trace file (usually
             // "/data/anr/traces.txt") so the code below must take care to unlink and recreate
@@ -5505,18 +5561,17 @@
                 return null;
             }
         } else {
+            File tracesDir = new File(tracesDirProp);
             // When dalvik.vm.stack-trace-dir is set, we use the "new" trace dumping scheme.
             // Each set of ANR traces is written to a separate file and dumpstate will process
             // all such files and add them to a captured bug report if they're recent enough.
-            //
+            maybePruneOldTraces(tracesDir);
+
             // NOTE: We should consider creating the file in native code atomically once we've
             // gotten rid of the old scheme of dumping and lot of the code that deals with paths
             // can be removed.
-            try {
-                tracesFile = File.createTempFile("anr_", "", new File(tracesDir));
-                FileUtils.setPermissions(tracesFile.getAbsolutePath(), 0600, -1, -1); // -rw-------
-            } catch (IOException ioe) {
-                Slog.w(TAG, "Unable to create ANR traces file: ", ioe);
+            tracesFile = createAnrDumpFile(tracesDir);
+            if (tracesFile == null) {
                 return null;
             }
 
@@ -5528,6 +5583,53 @@
         return tracesFile;
     }
 
+    @GuardedBy("ActivityManagerService.class")
+    private static SimpleDateFormat sAnrFileDateFormat;
+
+    private static synchronized File createAnrDumpFile(File tracesDir) {
+        if (sAnrFileDateFormat == null) {
+            sAnrFileDateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS");
+        }
+
+        final String formattedDate = sAnrFileDateFormat.format(new Date());
+        final File anrFile = new File(tracesDir, "anr_" + formattedDate);
+
+        try {
+            if (anrFile.createNewFile()) {
+                FileUtils.setPermissions(anrFile.getAbsolutePath(), 0600, -1, -1); // -rw-------
+                return anrFile;
+            } else {
+                Slog.w(TAG, "Unable to create ANR dump file: createNewFile failed");
+            }
+        } catch (IOException ioe) {
+            Slog.w(TAG, "Exception creating ANR dump file:", ioe);
+        }
+
+        return null;
+    }
+
+    /**
+     * Prune all trace files that are more than a day old.
+     *
+     * NOTE: It might make sense to move this functionality to tombstoned eventually, along with a
+     * shift away from anr_XX and tombstone_XX to a more descriptive name. We do it here for now
+     * since it's the system_server that creates trace files for most ANRs.
+     */
+    private static void maybePruneOldTraces(File tracesDir) {
+        final long now = System.currentTimeMillis();
+        final File[] traceFiles = tracesDir.listFiles();
+
+        if (traceFiles != null) {
+            for (File file : traceFiles) {
+                if ((now - file.lastModified()) > DAY_IN_MILLIS)  {
+                    if (!file.delete()) {
+                        Slog.w(TAG, "Unable to prune stale trace file: " + file);
+                    }
+                }
+            }
+        }
+    }
+
     /**
      * Legacy code, do not use. Existing users will be deleted.
      *
@@ -5712,7 +5814,7 @@
     }
 
     final void logAppTooSlow(ProcessRecord app, long startTime, String msg) {
-        if (true || IS_USER_BUILD) {
+        if (true || Build.IS_USER) {
             return;
         }
         String tracesPath = SystemProperties.get("dalvik.vm.stack-trace-file", null);
@@ -5810,26 +5912,53 @@
         enforceNotIsolatedCaller("clearApplicationUserData");
         int uid = Binder.getCallingUid();
         int pid = Binder.getCallingPid();
-        userId = mUserController.handleIncomingUser(pid, uid, userId, false,
+        final int resolvedUserId = mUserController.handleIncomingUser(pid, uid, userId, false,
                 ALLOW_FULL_ONLY, "clearApplicationUserData", null);
 
+        final ApplicationInfo appInfo;
+        final boolean isInstantApp;
 
         long callingId = Binder.clearCallingIdentity();
         try {
             IPackageManager pm = AppGlobals.getPackageManager();
-            int pkgUid = -1;
             synchronized(this) {
+                // Instant packages are not protected
                 if (getPackageManagerInternalLocked().isPackageDataProtected(
-                        userId, packageName)) {
+                        resolvedUserId, packageName)) {
                     throw new SecurityException(
                             "Cannot clear data for a protected package: " + packageName);
                 }
 
+                ApplicationInfo applicationInfo = null;
                 try {
-                    pkgUid = pm.getPackageUid(packageName, MATCH_UNINSTALLED_PACKAGES, userId);
+                    applicationInfo = pm.getApplicationInfo(packageName,
+                            MATCH_UNINSTALLED_PACKAGES, resolvedUserId);
                 } catch (RemoteException e) {
+                    /* ignore */
                 }
-                if (pkgUid == -1) {
+                appInfo = applicationInfo;
+
+                final boolean clearingOwnUidData = appInfo != null && appInfo.uid == uid;
+
+                if (!clearingOwnUidData && checkComponentPermission(permission.CLEAR_APP_USER_DATA,
+                        pid, uid, -1, true) != PackageManager.PERMISSION_GRANTED) {
+                    throw new SecurityException("PID " + pid + " does not have permission "
+                            + android.Manifest.permission.CLEAR_APP_USER_DATA + " to clear data"
+                            + " of package " + packageName);
+                }
+
+                final boolean hasInstantMetadata = getPackageManagerInternalLocked()
+                        .hasInstantApplicationMetadata(packageName, resolvedUserId);
+                final boolean isUninstalledAppWithoutInstantMetadata =
+                        (appInfo == null && !hasInstantMetadata);
+                isInstantApp = (appInfo != null && appInfo.isInstantApp())
+                        || hasInstantMetadata;
+                final boolean canAccessInstantApps = checkComponentPermission(
+                        permission.ACCESS_INSTANT_APPS, pid, uid, -1, true)
+                        == PackageManager.PERMISSION_GRANTED;
+
+                if (isUninstalledAppWithoutInstantMetadata || (isInstantApp
+                        && !canAccessInstantApps)) {
                     Slog.w(TAG, "Invalid packageName: " + packageName);
                     if (observer != null) {
                         try {
@@ -5840,45 +5969,45 @@
                     }
                     return false;
                 }
-                if (uid == pkgUid || checkComponentPermission(
-                        android.Manifest.permission.CLEAR_APP_USER_DATA,
-                        pid, uid, -1, true)
-                        == PackageManager.PERMISSION_GRANTED) {
-                    forceStopPackageLocked(packageName, pkgUid, "clear data");
-                } else {
-                    throw new SecurityException("PID " + pid + " does not have permission "
-                            + android.Manifest.permission.CLEAR_APP_USER_DATA + " to clear data"
-                                    + " of package " + packageName);
-                }
 
-                // Remove all tasks match the cleared application package and user
-                for (int i = mRecentTasks.size() - 1; i >= 0; i--) {
-                    final TaskRecord tr = mRecentTasks.get(i);
-                    final String taskPackageName =
-                            tr.getBaseIntent().getComponent().getPackageName();
-                    if (tr.userId != userId) continue;
-                    if (!taskPackageName.equals(packageName)) continue;
-                    mStackSupervisor.removeTaskByIdLocked(tr.taskId, false, REMOVE_FROM_RECENTS);
+                if (appInfo != null) {
+                    forceStopPackageLocked(packageName, appInfo.uid, "clear data");
+                    // Remove all tasks match the cleared application package and user
+                    for (int i = mRecentTasks.size() - 1; i >= 0; i--) {
+                        final TaskRecord tr = mRecentTasks.get(i);
+                        final String taskPackageName =
+                                tr.getBaseIntent().getComponent().getPackageName();
+                        if (tr.userId != resolvedUserId) continue;
+                        if (!taskPackageName.equals(packageName)) continue;
+                        mStackSupervisor.removeTaskByIdLocked(tr.taskId, false,
+                                REMOVE_FROM_RECENTS);
+                    }
                 }
             }
 
-            final int pkgUidF = pkgUid;
-            final int userIdF = userId;
             final IPackageDataObserver localObserver = new IPackageDataObserver.Stub() {
                 @Override
                 public void onRemoveCompleted(String packageName, boolean succeeded)
                         throws RemoteException {
-                    synchronized (ActivityManagerService.this) {
-                        finishForceStopPackageLocked(packageName, pkgUidF);
+                    if (appInfo != null) {
+                        synchronized (ActivityManagerService.this) {
+                            finishForceStopPackageLocked(packageName, appInfo.uid);
+                        }
                     }
-
                     final Intent intent = new Intent(Intent.ACTION_PACKAGE_DATA_CLEARED,
                             Uri.fromParts("package", packageName, null));
                     intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
-                    intent.putExtra(Intent.EXTRA_UID, pkgUidF);
-                    intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(pkgUidF));
-                    broadcastIntentInPackage("android", SYSTEM_UID, intent,
-                            null, null, 0, null, null, null, null, false, false, userIdF);
+                    intent.putExtra(Intent.EXTRA_UID, (appInfo != null) ? appInfo.uid : -1);
+                    intent.putExtra(Intent.EXTRA_USER_HANDLE, resolvedUserId);
+                    if (isInstantApp) {
+                        intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName);
+                        broadcastIntentInPackage("android", SYSTEM_UID, intent, null, null, 0,
+                                null, null, permission.ACCESS_INSTANT_APPS, null, false, false,
+                                resolvedUserId);
+                    } else {
+                        broadcastIntentInPackage("android", SYSTEM_UID, intent, null, null, 0,
+                                null, null, null, null, false, false, resolvedUserId);
+                    }
 
                     if (observer != null) {
                         observer.onRemoveCompleted(packageName, succeeded);
@@ -5888,16 +6017,18 @@
 
             try {
                 // Clear application user data
-                pm.clearApplicationUserData(packageName, localObserver, userId);
+                pm.clearApplicationUserData(packageName, localObserver, resolvedUserId);
 
-                synchronized(this) {
-                    // Remove all permissions granted from/to this package
-                    removeUriPermissionsForPackageLocked(packageName, userId, true);
+                if (appInfo != null) {
+                    synchronized (this) {
+                        // Remove all permissions granted from/to this package
+                        removeUriPermissionsForPackageLocked(packageName, resolvedUserId, true);
+                    }
+
+                    // Reset notification settings.
+                    INotificationManager inm = NotificationManager.getService();
+                    inm.clearData(packageName, appInfo.uid, uid == appInfo.uid);
                 }
-
-                // Reset notification settings.
-                INotificationManager inm = NotificationManager.getService();
-                inm.clearData(packageName, pkgUidF, uid == pkgUidF);
             } catch (RemoteException e) {
             }
         } finally {
@@ -6661,7 +6792,6 @@
             mActiveUids.put(proc.uid, uidRec);
             EventLogTags.writeAmUidRunning(uidRec.uid);
             noteUidProcessState(uidRec.uid, uidRec.curProcState);
-            enqueueUidChangeLocked(uidRec, -1, UidRecord.CHANGE_ACTIVE);
         }
         proc.uidRecord = uidRec;
 
@@ -6701,10 +6831,6 @@
                 mHandler.removeMessages(PROC_START_TIMEOUT_MSG, app);
             }
             mBatteryStatsService.noteProcessFinish(app.processName, app.info.uid);
-            if (app.isolated) {
-                mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid);
-                getPackageManagerInternalLocked().removeIsolatedUid(app.uid);
-            }
             boolean willRestart = false;
             if (app.persistent && !app.isolated) {
                 if (!callerWillRestart) {
@@ -6714,6 +6840,10 @@
                 }
             }
             app.kill(reason, true);
+            if (app.isolated) {
+                mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid);
+                getPackageManagerInternalLocked().removeIsolatedUid(app.uid);
+            }
             handleAppDiedLocked(app, willRestart, allowRestart);
             if (willRestart) {
                 removeLruProcessLocked(app);
@@ -6753,14 +6883,14 @@
                 mHeavyWeightProcess = null;
             }
             mBatteryStatsService.noteProcessFinish(app.processName, app.info.uid);
-            if (app.isolated) {
-                mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid);
-            }
             // Take care of any launching providers waiting for this process.
             cleanupAppInLaunchingProvidersLocked(app, true);
             // Take care of any services that are waiting for the process.
             mServices.processStartTimedOutLocked(app);
             app.kill("start timeout", true);
+            if (app.isolated) {
+                mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid);
+            }
             removeLruProcessLocked(app);
             if (mBackupTarget != null && mBackupTarget.app.pid == pid) {
                 Slog.w(TAG, "Unattached app died before backup, skipping");
@@ -6893,19 +7023,19 @@
                     mWaitForDebugger = mOrigWaitForDebugger;
                 }
             }
-            String profileFile = app.instr != null ? app.instr.mProfileFile : null;
-            ParcelFileDescriptor profileFd = null;
-            int samplingInterval = 0;
-            boolean profileAutoStop = false;
-            boolean profileStreamingOutput = false;
+
+            ProfilerInfo profilerInfo = null;
+            String agent = null;
             if (mProfileApp != null && mProfileApp.equals(processName)) {
                 mProfileProc = app;
-                profileFile = mProfileFile;
-                profileFd = mProfileFd;
-                samplingInterval = mSamplingInterval;
-                profileAutoStop = mAutoStopProfiler;
-                profileStreamingOutput = mStreamingOutput;
+                profilerInfo = (mProfilerInfo != null && mProfilerInfo.profileFile != null) ?
+                        new ProfilerInfo(mProfilerInfo) : null;
+                agent = mProfilerInfo != null ? mProfilerInfo.agent : null;
+            } else if (app.instr != null && app.instr.mProfileFile != null) {
+                profilerInfo = new ProfilerInfo(app.instr.mProfileFile, null, 0, false, false,
+                        null);
             }
+
             boolean enableTrackAllocation = false;
             if (mTrackAllocationApp != null && mTrackAllocationApp.equals(processName)) {
                 enableTrackAllocation = true;
@@ -6929,22 +7059,16 @@
                     + processName + " with config " + getGlobalConfiguration());
             ApplicationInfo appInfo = app.instr != null ? app.instr.mTargetInfo : app.info;
             app.compat = compatibilityInfoForPackageLocked(appInfo);
-            if (profileFd != null) {
-                profileFd = profileFd.dup();
+
+            if (profilerInfo != null && profilerInfo.profileFd != null) {
+                profilerInfo.profileFd = profilerInfo.profileFd.dup();
             }
-            ProfilerInfo profilerInfo = profileFile == null ? null
-                    : new ProfilerInfo(profileFile, profileFd, samplingInterval, profileAutoStop,
-                                       profileStreamingOutput);
 
             // We deprecated Build.SERIAL and it is not accessible to
             // apps that target the v2 security sandbox. Since access to
             // the serial is now behind a permission we push down the value.
-            String buildSerial = Build.UNKNOWN;
-            if (appInfo.targetSandboxVersion != 2) {
-                buildSerial = IDeviceIdentifiersPolicyService.Stub.asInterface(
-                        ServiceManager.getService(Context.DEVICE_IDENTIFIERS_SERVICE))
-                        .getSerial();
-            }
+            String buildSerial = appInfo.targetSandboxVersion < 2
+                    ? sTheRealBuildSerial : Build.UNKNOWN;
 
             // Check if this is a secondary process that should be incorporated into some
             // currently active instrumentation.  (Note we do this AFTER all of the profiling
@@ -6974,6 +7098,12 @@
                 }
             }
 
+            // If we were asked to attach an agent on startup, do so now, before we're binding
+            // application code.
+            if (agent != null) {
+                thread.attachAgent(agent);
+            }
+
             checkTime(startTime, "attachApplicationLocked: immediately before bindApplication");
             mStackSupervisor.mActivityMetricsLogger.notifyBindApplication(app);
             if (app.instr != null) {
@@ -7109,11 +7239,7 @@
                         mStackSupervisor.activityIdleInternalLocked(token, false /* fromTimeout */,
                                 false /* processPausingActivities */, config);
                 if (stopProfiling) {
-                    if ((mProfileProc == r.app) && (mProfileFd != null)) {
-                        try {
-                            mProfileFd.close();
-                        } catch (IOException e) {
-                        }
+                    if ((mProfileProc == r.app) && mProfilerInfo != null) {
                         clearProfilerLocked();
                     }
                 }
@@ -7242,8 +7368,8 @@
 
             if (mFactoryTest != FactoryTest.FACTORY_TEST_LOW_LEVEL) {
                 // Start looking for apps that are abusing wake locks.
-                Message nmsg = mHandler.obtainMessage(CHECK_EXCESSIVE_WAKE_LOCKS_MSG);
-                mHandler.sendMessageDelayed(nmsg, mConstants.POWER_CHECK_DELAY);
+                Message nmsg = mHandler.obtainMessage(CHECK_EXCESSIVE_POWER_USE_MSG);
+                mHandler.sendMessageDelayed(nmsg, mConstants.POWER_CHECK_INTERVAL);
                 // Tell anyone interested that we are done booting!
                 SystemProperties.set("sys.boot_completed", "1");
 
@@ -7387,21 +7513,6 @@
     }
 
     @Override
-    public final void backgroundResourcesReleased(IBinder token) {
-        final long origId = Binder.clearCallingIdentity();
-        try {
-            synchronized (this) {
-                ActivityStack stack = ActivityRecord.getStackLocked(token);
-                if (stack != null) {
-                    stack.backgroundResourcesReleased();
-                }
-            }
-        } finally {
-            Binder.restoreCallingIdentity(origId);
-        }
-    }
-
-    @Override
     public final void notifyLaunchTaskBehindComplete(IBinder token) {
         mStackSupervisor.scheduleLaunchTaskBehindComplete(token);
     }
@@ -8006,7 +8117,7 @@
                 // Activity supports picture-in-picture, now check that we can enter PiP at this
                 // point, if it is
                 if (!r.checkEnterPictureInPictureState("enterPictureInPictureMode",
-                        false /* noThrow */, false /* beforeStopping */)) {
+                        false /* beforeStopping */)) {
                     return false;
                 }
 
@@ -8024,7 +8135,7 @@
                     stack.setPictureInPictureActions(actions);
 
                     MetricsLogger.action(mContext, MetricsEvent.ACTION_PICTURE_IN_PICTURE_ENTERED,
-                            r.supportsPictureInPictureWhilePausing);
+                            r.supportsEnterPipOnTaskSwitch);
                     logPictureInPictureArgs(params);
                 };
 
@@ -10458,44 +10569,25 @@
     }
 
     @Override
-    public IActivityContainer createVirtualActivityContainer(IBinder parentActivityToken,
-            IActivityContainerCallback callback) throws RemoteException {
-        enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "createActivityContainer()");
-        synchronized (this) {
-            if (parentActivityToken == null) {
-                throw new IllegalArgumentException("parent token must not be null");
-            }
-            ActivityRecord r = ActivityRecord.forTokenLocked(parentActivityToken);
-            if (r == null) {
-                return null;
-            }
-            if (callback == null) {
-                throw new IllegalArgumentException("callback must not be null");
-            }
-            return mStackSupervisor.createVirtualActivityContainer(r, callback);
-        }
-    }
-
-    @Override
-    public IActivityContainer createStackOnDisplay(int displayId) throws RemoteException {
+    public int createStackOnDisplay(int displayId) throws RemoteException {
         enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "createStackOnDisplay()");
         synchronized (this) {
             final int stackId = mStackSupervisor.getNextStackId();
             final ActivityStack stack =
                     mStackSupervisor.createStackOnDisplay(stackId, displayId, true /*onTop*/);
             if (stack == null) {
-                return null;
+                return INVALID_STACK_ID;
             }
-            return stack.mActivityContainer;
+            return stack.mStackId;
         }
     }
 
     @Override
     public int getActivityDisplayId(IBinder activityToken) throws RemoteException {
         synchronized (this) {
-            ActivityStack stack = ActivityRecord.getStackLocked(activityToken);
-            if (stack != null && stack.mActivityContainer.isAttachedLocked()) {
-                return stack.mActivityContainer.getDisplayId();
+            final ActivityStack stack = ActivityRecord.getStackLocked(activityToken);
+            if (stack != null && stack.mDisplayId != INVALID_DISPLAY) {
+                return stack.mDisplayId;
             }
             return DEFAULT_DISPLAY;
         }
@@ -12411,8 +12503,15 @@
 
     void onWakefulnessChanged(int wakefulness) {
         synchronized(this) {
+            boolean wasAwake = mWakefulness == PowerManagerInternal.WAKEFULNESS_AWAKE;
+            boolean isAwake = wakefulness == PowerManagerInternal.WAKEFULNESS_AWAKE;
             mWakefulness = wakefulness;
-            updateSleepIfNeededLocked();
+
+            if (wasAwake != isAwake) {
+                // Also update state in a special way for running foreground services UI.
+                mServices.updateScreenStateLocked(isAwake);
+                sendNotifyVrManagerOfSleepState(!isAwake);
+            }
         }
     }
 
@@ -12432,14 +12531,23 @@
     }
 
     void updateSleepIfNeededLocked() {
-        final boolean shouldSleep = shouldSleepLocked();
-        if (mSleeping && !shouldSleep) {
-            mSleeping = false;
-            startTimeTrackingFocusedActivityLocked();
-            mTopProcessState = ActivityManager.PROCESS_STATE_TOP;
-            mStackSupervisor.comeOutOfSleepIfNeededLocked();
-            sendNotifyVrManagerOfSleepState(false);
-            updateOomAdjLocked();
+        final boolean shouldSleep = !mStackSupervisor.hasAwakeDisplay();
+        final boolean wasSleeping = mSleeping;
+
+        if (!shouldSleep) {
+            // If wasSleeping is true, we need to wake up activity manager state from when
+            // we started sleeping. In either case, we need to apply the sleep tokens, which
+            // will wake up stacks or put them to sleep as appropriate.
+            if (wasSleeping) {
+                mSleeping = false;
+                startTimeTrackingFocusedActivityLocked();
+                mTopProcessState = ActivityManager.PROCESS_STATE_TOP;
+                mStackSupervisor.comeOutOfSleepIfNeededLocked();
+            }
+            mStackSupervisor.applySleepTokensLocked(true /* applyToStacks */);
+            if (wasSleeping) {
+                updateOomAdjLocked();
+            }
         } else if (!mSleeping && shouldSleep) {
             mSleeping = true;
             if (mCurAppTimeTracker != null) {
@@ -12447,48 +12555,7 @@
             }
             mTopProcessState = ActivityManager.PROCESS_STATE_TOP_SLEEPING;
             mStackSupervisor.goingToSleepLocked();
-            sendNotifyVrManagerOfSleepState(true);
             updateOomAdjLocked();
-
-            // Initialize the wake times of all processes.
-            checkExcessivePowerUsageLocked(false);
-            mHandler.removeMessages(CHECK_EXCESSIVE_WAKE_LOCKS_MSG);
-            Message nmsg = mHandler.obtainMessage(CHECK_EXCESSIVE_WAKE_LOCKS_MSG);
-            mHandler.sendMessageDelayed(nmsg, mConstants.POWER_CHECK_DELAY);
-        }
-
-        // Also update state in a special way for running foreground services UI.
-        switch (mWakefulness) {
-            case PowerManagerInternal.WAKEFULNESS_ASLEEP:
-            case PowerManagerInternal.WAKEFULNESS_DREAMING:
-            case PowerManagerInternal.WAKEFULNESS_DOZING:
-                mServices.updateScreenStateLocked(false);
-                break;
-            case PowerManagerInternal.WAKEFULNESS_AWAKE:
-            default:
-                mServices.updateScreenStateLocked(true);
-                break;
-        }
-    }
-
-    private boolean shouldSleepLocked() {
-        // Resume applications while running a voice interactor.
-        if (mRunningVoice != null) {
-            return false;
-        }
-
-        // TODO: Transform the lock screen state into a sleep token instead.
-        switch (mWakefulness) {
-            case PowerManagerInternal.WAKEFULNESS_AWAKE:
-            case PowerManagerInternal.WAKEFULNESS_DREAMING:
-                // Pause applications whenever the lock screen is shown or any sleep
-                // tokens have been acquired.
-                return mKeyguardController.isKeyguardShowing() || !mSleepTokens.isEmpty();
-            case PowerManagerInternal.WAKEFULNESS_DOZING:
-            case PowerManagerInternal.WAKEFULNESS_ASLEEP:
-            default:
-                // If we're asleep then pause applications unconditionally.
-                return true;
         }
     }
 
@@ -12530,6 +12597,7 @@
 
         synchronized(this) {
             mShuttingDown = true;
+            mStackSupervisor.prepareForShutdownLocked();
             updateEventDispatchingLocked();
             timedout = mStackSupervisor.shutdownLocked(timeout);
         }
@@ -12580,7 +12648,7 @@
     }
 
     @Override
-    public void setLockScreenShown(boolean showing) {
+    public void setLockScreenShown(boolean showing, int secondaryDisplayShowing) {
         if (checkCallingPermission(android.Manifest.permission.DEVICE_POWER)
                 != PackageManager.PERMISSION_GRANTED) {
             throw new SecurityException("Requires permission "
@@ -12590,11 +12658,12 @@
         synchronized(this) {
             long ident = Binder.clearCallingIdentity();
             try {
-                mKeyguardController.setKeyguardShown(showing);
+                mKeyguardController.setKeyguardShown(showing, secondaryDisplayShowing);
             } finally {
                 Binder.restoreCallingIdentity(ident);
             }
         }
+        sendNotifyVrManagerOfKeyguardState(showing);
     }
 
     @Override
@@ -12758,18 +12827,16 @@
                 }
             }
             mProfileApp = processName;
-            mProfileFile = profilerInfo.profileFile;
-            if (mProfileFd != null) {
-                try {
-                    mProfileFd.close();
-                } catch (IOException e) {
+
+            if (mProfilerInfo != null) {
+                if (mProfilerInfo.profileFd != null) {
+                    try {
+                        mProfilerInfo.profileFd.close();
+                    } catch (IOException e) {
+                    }
                 }
-                mProfileFd = null;
             }
-            mProfileFd = profilerInfo.profileFd;
-            mSamplingInterval = profilerInfo.samplingInterval;
-            mAutoStopProfiler = profilerInfo.autoStopProfiler;
-            mStreamingOutput = profilerInfo.streamingOutput;
+            mProfilerInfo = new ProfilerInfo(profilerInfo);
             mProfileType = 0;
         }
     }
@@ -12869,6 +12936,10 @@
                 throw new IllegalArgumentException("Provided bugreport type is not correct, value: "
                         + bugreportType);
         }
+        // Always log caller, even if it does not have permission to dump.
+        String type = extraOptions == null ? "bugreport" : extraOptions;
+        Slog.i(TAG, type + " requested by UID " + Binder.getCallingUid());
+
         enforceCallingPermission(android.Manifest.permission.DUMP, "requestBugReport");
         if (extraOptions != null) {
             SystemProperties.set("dumpstate.options", extraOptions);
@@ -13113,6 +13184,10 @@
                             + " couldn't be found");
                     return null;
                 }
+                if (activity.app == null || activity.app.thread == null) {
+                    Slog.w(TAG, "enqueueAssistContext failed: no process for " + activity);
+                    return null;
+                }
             }
 
             PendingAssistExtras pae;
@@ -13194,7 +13269,6 @@
                 return;
             }
         }
-
         // We are now ready to launch the assist activity.
         IResultReceiver sendReceiver = null;
         Bundle sendBundle = null;
@@ -13224,17 +13298,24 @@
             return;
         }
 
-        long ident = Binder.clearCallingIdentity();
+        final long ident = Binder.clearCallingIdentity();
         try {
-            pae.intent.replaceExtras(pae.extras);
-            pae.intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
-                    | Intent.FLAG_ACTIVITY_SINGLE_TOP
-                    | Intent.FLAG_ACTIVITY_CLEAR_TOP);
-            closeSystemDialogs("assist");
-            try {
-                mContext.startActivityAsUser(pae.intent, new UserHandle(pae.userHandle));
-            } catch (ActivityNotFoundException e) {
-                Slog.w(TAG, "No activity to handle assist action.", e);
+            if (TextUtils.equals(pae.intent.getAction(),
+                    android.service.voice.VoiceInteractionService.SERVICE_INTERFACE)) {
+                pae.intent.putExtras(pae.extras);
+                mContext.startServiceAsUser(pae.intent, new UserHandle(pae.userHandle));
+            } else {
+                pae.intent.replaceExtras(pae.extras);
+                pae.intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+                        | Intent.FLAG_ACTIVITY_SINGLE_TOP
+                        | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+                closeSystemDialogs("assist");
+
+                try {
+                    mContext.startActivityAsUser(pae.intent, new UserHandle(pae.userHandle));
+                } catch (ActivityNotFoundException e) {
+                    Slog.w(TAG, "No activity to handle assist action.", e);
+                }
             }
         } finally {
             Binder.restoreCallingIdentity(ident);
@@ -13307,7 +13388,6 @@
                 }
                 final boolean translucentChanged = r.changeWindowTranslucency(true);
                 if (translucentChanged) {
-                    r.getStack().releaseBackgroundResources(r);
                     mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
                 }
                 mWindowManager.setAppFullscreen(token, true);
@@ -13347,45 +13427,13 @@
     }
 
     @Override
-    public boolean requestVisibleBehind(IBinder token, boolean visible) {
-        final long origId = Binder.clearCallingIdentity();
-        try {
-            synchronized (this) {
-                final ActivityRecord r = ActivityRecord.isInStackLocked(token);
-                if (r != null) {
-                    return mStackSupervisor.requestVisibleBehindLocked(r, visible);
-                }
-            }
-            return false;
-        } finally {
-            Binder.restoreCallingIdentity(origId);
-        }
-    }
-
-    @Override
-    public boolean isBackgroundVisibleBehind(IBinder token) {
-        final long origId = Binder.clearCallingIdentity();
-        try {
-            synchronized (this) {
-                final ActivityStack stack = ActivityRecord.getStackLocked(token);
-                final boolean visible = stack == null ? false : stack.hasVisibleBehindActivity();
-                if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND,
-                        "isBackgroundVisibleBehind: stack=" + stack + " visible=" + visible);
-                return visible;
-            }
-        } finally {
-            Binder.restoreCallingIdentity(origId);
-        }
-    }
-
-    @Override
     public Bundle getActivityOptions(IBinder token) {
         final long origId = Binder.clearCallingIdentity();
         try {
             synchronized (this) {
                 final ActivityRecord r = ActivityRecord.isInStackLocked(token);
                 if (r != null) {
-                    final ActivityOptions activityOptions = r.pendingOptions;
+                    final ActivityOptions activityOptions = r.takeOptionsLocked();
                     return activityOptions == null ? null : activityOptions.toBundle();
                 }
                 return null;
@@ -13458,7 +13506,7 @@
     /**
      * Schedule the given thread a normal scheduling priority.
      *
-     * @param newTid the tid of the thread to adjust the scheduling of.
+     * @param tid the tid of the thread to adjust the scheduling of.
      * @param suppressLogs {@code true} if any error logging should be disabled.
      *
      * @return {@code true} if this succeeded.
@@ -13471,6 +13519,10 @@
             if (!suppressLogs) {
                 Slog.w(TAG, "Failed to set scheduling policy, thread does not exist:\n" + e);
             }
+        } catch (SecurityException e) {
+            if (!suppressLogs) {
+                Slog.w(TAG, "Failed to set scheduling policy, not allowed:\n" + e);
+            }
         }
         return false;
     }
@@ -13478,7 +13530,7 @@
     /**
      * Schedule the given thread an FIFO scheduling priority.
      *
-     * @param newTid the tid of the thread to adjust the scheduling of.
+     * @param tid the tid of the thread to adjust the scheduling of.
      * @param suppressLogs {@code true} if any error logging should be disabled.
      *
      * @return {@code true} if this succeeded.
@@ -13491,6 +13543,10 @@
             if (!suppressLogs) {
                 Slog.w(TAG, "Failed to set scheduling policy, thread does not exist:\n" + e);
             }
+        } catch (SecurityException e) {
+            if (!suppressLogs) {
+                Slog.w(TAG, "Failed to set scheduling policy, not allowed:\n" + e);
+            }
         }
         return false;
     }
@@ -14028,10 +14084,10 @@
                 mContext.getPackageManager().hasSystemFeature(FEATURE_FREEFORM_WINDOW_MANAGEMENT)
                         || Settings.Global.getInt(
                                 resolver, DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, 0) != 0;
-        final boolean supportsPictureInPicture =
-                mContext.getPackageManager().hasSystemFeature(FEATURE_PICTURE_IN_PICTURE);
 
         final boolean supportsMultiWindow = ActivityManager.supportsMultiWindow(mContext);
+        final boolean supportsPictureInPicture = supportsMultiWindow &&
+                mContext.getPackageManager().hasSystemFeature(FEATURE_PICTURE_IN_PICTURE);
         final boolean supportsSplitScreenMultiWindow =
                 ActivityManager.supportsSplitScreenMultiWindow(mContext);
         final boolean supportsMultiDisplay = mContext.getPackageManager()
@@ -14112,7 +14168,7 @@
         }
     }
 
-    public void systemReady(final Runnable goingCallback, BootTimingsTraceLog traceLog) {
+    public void systemReady(final Runnable goingCallback, TimingsTraceLog traceLog) {
         traceLog.traceBegin("PhaseActivityManagerReady");
         synchronized(this) {
             if (mSystemReady) {
@@ -14135,6 +14191,12 @@
             mSystemReady = true;
         }
 
+        try {
+            sTheRealBuildSerial = IDeviceIdentifiersPolicyService.Stub.asInterface(
+                    ServiceManager.getService(Context.DEVICE_IDENTIFIERS_SERVICE))
+                    .getSerial();
+        } catch (RemoteException e) {}
+
         ArrayList<ProcessRecord> procsToKill = null;
         synchronized(mPidsSelfLocked) {
             for (int i=mPidsSelfLocked.size()-1; i>=0; i--) {
@@ -14541,7 +14603,7 @@
         final ProcessRecord r = handleApplicationWtfInner(callingUid, callingPid, app, tag,
                 crashInfo);
 
-        final boolean isFatal = "eng".equals(Build.TYPE) || Settings.Global
+        final boolean isFatal = Build.IS_ENG || Settings.Global
                 .getInt(mContext.getContentResolver(), Settings.Global.WTF_IS_FATAL, 0) != 0;
         final boolean isSystem = (r == null) || r.persistent;
 
@@ -14637,6 +14699,9 @@
                 }
                 sb.append("\n");
             }
+            if (process.info.isInstantApp()) {
+                sb.append("Instant-App: true\n");
+            }
         }
     }
 
@@ -14973,6 +15038,14 @@
                 this, in, out, err, args, callback, resultReceiver);
     }
 
+    SleepToken acquireSleepToken(String tag, int displayId) {
+        synchronized (this) {
+            final SleepToken token = mStackSupervisor.createSleepTokenLocked(tag, displayId);
+            updateSleepIfNeededLocked();
+            return token;
+        }
+    }
+
     @Override
     protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
         if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, TAG, pw)) return;
@@ -15037,7 +15110,7 @@
                 }
             } else if ("starter".equals(cmd)) {
                 synchronized (this) {
-                    dumpActivityStarterLocked(pw);
+                    dumpActivityStarterLocked(pw, dumpPackage);
                 }
             } else if ("recents".equals(cmd) || "r".equals(cmd)) {
                 synchronized (this) {
@@ -15272,7 +15345,7 @@
                 if (dumpAll) {
                     pw.println("-------------------------------------------------------------------------------");
                 }
-                dumpActivityStarterLocked(pw);
+                dumpActivityStarterLocked(pw, dumpPackage);
                 pw.println();
                 if (dumpAll) {
                     pw.println("-------------------------------------------------------------------------------");
@@ -15342,7 +15415,7 @@
                 if (dumpAll) {
                     pw.println("-------------------------------------------------------------------------------");
                 }
-                dumpActivityStarterLocked(pw);
+                dumpActivityStarterLocked(pw, dumpPackage);
                 pw.println();
                 if (dumpAll) {
                     pw.println("-------------------------------------------------------------------------------");
@@ -15366,7 +15439,7 @@
     }
 
     private void dumpLastANRLocked(PrintWriter pw) {
-        pw.println("ACTIVITY MANAGER ACTIVITIES (dumpsys activity lastanr)");
+        pw.println("ACTIVITY MANAGER LAST ANR (dumpsys activity lastanr)");
         if (mLastANRState == null) {
             pw.println("  <no ANR has occurred since boot>");
         } else {
@@ -15374,9 +15447,9 @@
         }
     }
 
-    private void dumpActivityStarterLocked(PrintWriter pw) {
-        pw.println("ACTIVITY MANAGER ACTIVITIES (dumpsys activity starter)");
-        mActivityStarter.dump(pw, "");
+    private void dumpActivityStarterLocked(PrintWriter pw, String dumpPackage) {
+        pw.println("ACTIVITY MANAGER STARTER (dumpsys activity starter)");
+        mActivityStarter.dump(pw, "", dumpPackage);
     }
 
     void dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
@@ -15869,7 +15942,7 @@
         if (dumpPackage == null) {
             pw.println("  mWakefulness="
                     + PowerManagerInternal.wakefulnessToString(mWakefulness));
-            pw.println("  mSleepTokens=" + mSleepTokens);
+            pw.println("  mSleepTokens=" + mStackSupervisor.mSleepTokens);
             pw.println("  mSleeping=" + mSleeping);
             pw.println("  mShuttingDown=" + mShuttingDown + " mTestPssMode=" + mTestPssMode);
             if (mRunningVoice != null) {
@@ -15931,18 +16004,22 @@
                 pw.println("  mTrackAllocationApp=" + mTrackAllocationApp);
             }
         }
-        if (mProfileApp != null || mProfileProc != null || mProfileFile != null
-                || mProfileFd != null) {
+        if (mProfileApp != null || mProfileProc != null || (mProfilerInfo != null &&
+                (mProfilerInfo.profileFile != null || mProfilerInfo.profileFd != null))) {
             if (dumpPackage == null || dumpPackage.equals(mProfileApp)) {
                 if (needSep) {
                     pw.println();
                     needSep = false;
                 }
                 pw.println("  mProfileApp=" + mProfileApp + " mProfileProc=" + mProfileProc);
-                pw.println("  mProfileFile=" + mProfileFile + " mProfileFd=" + mProfileFd);
-                pw.println("  mSamplingInterval=" + mSamplingInterval + " mAutoStopProfiler="
-                        + mAutoStopProfiler + " mStreamingOutput=" + mStreamingOutput);
-                pw.println("  mProfileType=" + mProfileType);
+                if (mProfilerInfo != null) {
+                    pw.println("  mProfileFile=" + mProfilerInfo.profileFile + " mProfileFd=" +
+                            mProfilerInfo.profileFd);
+                    pw.println("  mSamplingInterval=" + mProfilerInfo.samplingInterval +
+                            " mAutoStopProfiler=" + mProfilerInfo.autoStopProfiler +
+                            " mStreamingOutput=" + mProfilerInfo.streamingOutput);
+                    pw.println("  mProfileType=" + mProfileType);
+                }
             }
         }
         if (mNativeDebuggingApp != null) {
@@ -15971,9 +16048,6 @@
                 pw.println("  mBooting=" + mBooting
                         + " mCallFinishBooting=" + mCallFinishBooting
                         + " mBootAnimationComplete=" + mBootAnimationComplete);
-                pw.print("  mLastPowerCheckRealtime=");
-                        TimeUtils.formatDuration(mLastPowerCheckRealtime, pw);
-                        pw.println("");
                 pw.print("  mLastPowerCheckUptime=");
                         TimeUtils.formatDuration(mLastPowerCheckUptime, pw);
                         pw.println("");
@@ -16628,8 +16702,6 @@
 
         Collections.sort(list, comparator);
 
-        final long curRealtime = SystemClock.elapsedRealtime();
-        final long realtimeSince = curRealtime - service.mLastPowerCheckRealtime;
         final long curUptime = SystemClock.uptimeMillis();
         final long uptimeSince = curUptime - service.mLastPowerCheckUptime;
 
@@ -16726,24 +16798,6 @@
                 pw.print(" hasAboveClient="); pw.println(r.hasAboveClient);
 
                 if (r.setProcState >= ActivityManager.PROCESS_STATE_SERVICE) {
-                    if (r.lastWakeTime != 0) {
-                        long wtime;
-                        BatteryStatsImpl stats = service.mBatteryStatsService.getActiveStatistics();
-                        synchronized (stats) {
-                            wtime = stats.getProcessWakeTime(r.info.uid,
-                                    r.pid, curRealtime);
-                        }
-                        long timeUsed = wtime - r.lastWakeTime;
-                        pw.print(prefix);
-                        pw.print("    ");
-                        pw.print("keep awake over ");
-                        TimeUtils.formatDuration(realtimeSince, pw);
-                        pw.print(" used ");
-                        TimeUtils.formatDuration(timeUsed, pw);
-                        pw.print(" (");
-                        pw.print((timeUsed*100)/realtimeSince);
-                        pw.println("%)");
-                    }
                     if (r.lastCpuTime != 0) {
                         long timeUsed = r.curCpuTime - r.lastCpuTime;
                         pw.print(prefix);
@@ -17266,12 +17320,12 @@
                             }
                         } catch (IOException e) {
                             if (!isCheckinRequest) {
-                                pw.println("Got IoException!");
+                                pw.println("Got IoException! " + e);
                                 pw.flush();
                             }
                         } catch (RemoteException e) {
                             if (!isCheckinRequest) {
-                                pw.println("Got RemoteException!");
+                                pw.println("Got RemoteException! " + e);
                                 pw.flush();
                             }
                         }
@@ -17403,23 +17457,41 @@
             ArrayList<MemItem> catMems = new ArrayList<MemItem>();
 
             catMems.add(new MemItem("Native", "Native", nativePss, nativeSwapPss, -1));
-            final MemItem dalvikItem =
-                    new MemItem("Dalvik", "Dalvik", dalvikPss, dalvikSwapPss, -2);
-            if (dalvikSubitemPss.length > 0) {
-                dalvikItem.subitems = new ArrayList<MemItem>();
-                for (int j=0; j<dalvikSubitemPss.length; j++) {
-                    final String name = Debug.MemoryInfo.getOtherLabel(
-                            Debug.MemoryInfo.NUM_OTHER_STATS + j);
-                    dalvikItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j],
-                                    dalvikSubitemSwapPss[j], j));
-                }
-            }
-            catMems.add(dalvikItem);
+            final int dalvikId = -2;
+            catMems.add(new MemItem("Dalvik", "Dalvik", dalvikPss, dalvikSwapPss, dalvikId));
             catMems.add(new MemItem("Unknown", "Unknown", otherPss, otherSwapPss, -3));
             for (int j=0; j<Debug.MemoryInfo.NUM_OTHER_STATS; j++) {
                 String label = Debug.MemoryInfo.getOtherLabel(j);
                 catMems.add(new MemItem(label, label, miscPss[j], miscSwapPss[j], j));
             }
+            if (dalvikSubitemPss.length > 0) {
+                // Add dalvik subitems.
+                for (MemItem memItem : catMems) {
+                    int memItemStart = 0, memItemEnd = 0;
+                    if (memItem.id == dalvikId) {
+                        memItemStart = Debug.MemoryInfo.OTHER_DVK_STAT_DALVIK_START;
+                        memItemEnd = Debug.MemoryInfo.OTHER_DVK_STAT_DALVIK_END;
+                    } else if (memItem.id == Debug.MemoryInfo.OTHER_DALVIK_OTHER) {
+                        memItemStart = Debug.MemoryInfo.OTHER_DVK_STAT_DALVIK_OTHER_START;
+                        memItemEnd = Debug.MemoryInfo.OTHER_DVK_STAT_DALVIK_OTHER_END;
+                    } else if (memItem.id == Debug.MemoryInfo.OTHER_DEX) {
+                        memItemStart = Debug.MemoryInfo.OTHER_DVK_STAT_DEX_START;
+                        memItemEnd = Debug.MemoryInfo.OTHER_DVK_STAT_DEX_END;
+                    } else if (memItem.id == Debug.MemoryInfo.OTHER_ART) {
+                        memItemStart = Debug.MemoryInfo.OTHER_DVK_STAT_ART_START;
+                        memItemEnd = Debug.MemoryInfo.OTHER_DVK_STAT_ART_END;
+                    } else {
+                        continue;  // No subitems, continue.
+                    }
+                    memItem.subitems = new ArrayList<MemItem>();
+                    for (int j=memItemStart; j<=memItemEnd; j++) {
+                        final String name = Debug.MemoryInfo.getOtherLabel(
+                                Debug.MemoryInfo.NUM_OTHER_STATS + j);
+                        memItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j],
+                                dalvikSubitemSwapPss[j], j));
+                    }
+                }
+            }
 
             ArrayList<MemItem> oomMems = new ArrayList<MemItem>();
             for (int j=0; j<oomPss.length; j++) {
@@ -20611,7 +20683,7 @@
                                    && config.navigation == Configuration.NAVIGATION_NONAV);
         int modeType = config.uiMode & Configuration.UI_MODE_TYPE_MASK;
         final boolean uiModeSupportsDialogs = (modeType != Configuration.UI_MODE_TYPE_CAR
-                && !(modeType == Configuration.UI_MODE_TYPE_WATCH && "user".equals(Build.TYPE))
+                && !(modeType == Configuration.UI_MODE_TYPE_WATCH && Build.IS_USER)
                 && modeType != Configuration.UI_MODE_TYPE_TELEVISION
                 && modeType != Configuration.UI_MODE_TYPE_VR_HEADSET);
         return inputMethodExists && uiModeSupportsDialogs;
@@ -21666,7 +21738,9 @@
                                         if (DEBUG_PSS) Slog.d(TAG_PSS,
                                                 "Requesting dump heap from "
                                                 + myProc + " to " + heapdumpFile);
-                                        thread.dumpHeap(true, heapdumpFile.toString(), fd);
+                                        thread.dumpHeap(/* managed= */ true,
+                                                /* mallocInfo= */ false, /* runGc= */ false,
+                                                heapdumpFile.toString(), fd);
                                     } catch (RemoteException e) {
                                     }
                                 }
@@ -21882,58 +21956,28 @@
         }
     }
 
-    final void checkExcessivePowerUsageLocked(boolean doKills) {
+    final void checkExcessivePowerUsageLocked() {
         updateCpuStatsNow();
 
         BatteryStatsImpl stats = mBatteryStatsService.getActiveStatistics();
-        boolean doWakeKills = doKills;
-        boolean doCpuKills = doKills;
-        if (mLastPowerCheckRealtime == 0) {
-            doWakeKills = false;
-        }
+        boolean doCpuKills = true;
         if (mLastPowerCheckUptime == 0) {
             doCpuKills = false;
         }
-        if (stats.isScreenOn()) {
-            doWakeKills = false;
-        }
-        final long curRealtime = SystemClock.elapsedRealtime();
-        final long realtimeSince = curRealtime - mLastPowerCheckRealtime;
         final long curUptime = SystemClock.uptimeMillis();
         final long uptimeSince = curUptime - mLastPowerCheckUptime;
-        mLastPowerCheckRealtime = curRealtime;
         mLastPowerCheckUptime = curUptime;
-        if (realtimeSince < mConstants.WAKE_LOCK_MIN_CHECK_DURATION) {
-            doWakeKills = false;
-        }
-        if (uptimeSince < mConstants.CPU_MIN_CHECK_DURATION) {
-            doCpuKills = false;
-        }
         int i = mLruProcesses.size();
         while (i > 0) {
             i--;
             ProcessRecord app = mLruProcesses.get(i);
             if (app.setProcState >= ActivityManager.PROCESS_STATE_HOME) {
-                long wtime;
-                synchronized (stats) {
-                    wtime = stats.getProcessWakeTime(app.info.uid,
-                            app.pid, curRealtime);
+                if (app.lastCpuTime <= 0) {
+                    continue;
                 }
-                long wtimeUsed = wtime - app.lastWakeTime;
                 long cputimeUsed = app.curCpuTime - app.lastCpuTime;
                 if (DEBUG_POWER) {
                     StringBuilder sb = new StringBuilder(128);
-                    sb.append("Wake for ");
-                    app.toShortString(sb);
-                    sb.append(": over ");
-                    TimeUtils.formatDuration(realtimeSince, sb);
-                    sb.append(" used ");
-                    TimeUtils.formatDuration(wtimeUsed, sb);
-                    sb.append(" (");
-                    sb.append((wtimeUsed*100)/realtimeSince);
-                    sb.append("%)");
-                    Slog.i(TAG_POWER, sb.toString());
-                    sb.setLength(0);
                     sb.append("CPU for ");
                     app.toShortString(sb);
                     sb.append(": over ");
@@ -21945,29 +21989,33 @@
                     sb.append("%)");
                     Slog.i(TAG_POWER, sb.toString());
                 }
-                // If a process has held a wake lock for more
-                // than 50% of the time during this period,
-                // that sounds bad.  Kill!
-                if (doWakeKills && realtimeSince > 0
-                        && ((wtimeUsed*100)/realtimeSince) >= 50) {
-                    synchronized (stats) {
-                        stats.reportExcessiveWakeLocked(app.info.uid, app.processName,
-                                realtimeSince, wtimeUsed);
+                // If the process has used too much CPU over the last duration, the
+                // user probably doesn't want this, so kill!
+                if (doCpuKills && uptimeSince > 0) {
+                    // What is the limit for this process?
+                    int cpuLimit;
+                    long checkDur = curUptime - app.whenUnimportant;
+                    if (checkDur <= mConstants.POWER_CHECK_INTERVAL) {
+                        cpuLimit = mConstants.POWER_CHECK_MAX_CPU_1;
+                    } else if (checkDur <= (mConstants.POWER_CHECK_INTERVAL*2)
+                            || app.setProcState <= ActivityManager.PROCESS_STATE_HOME) {
+                        cpuLimit = mConstants.POWER_CHECK_MAX_CPU_2;
+                    } else if (checkDur <= (mConstants.POWER_CHECK_INTERVAL*3)) {
+                        cpuLimit = mConstants.POWER_CHECK_MAX_CPU_3;
+                    } else {
+                        cpuLimit = mConstants.POWER_CHECK_MAX_CPU_4;
                     }
-                    app.kill("excessive wake held " + wtimeUsed + " during " + realtimeSince, true);
-                    app.baseProcessTracker.reportExcessiveWake(app.pkgList);
-                } else if (doCpuKills && uptimeSince > 0
-                        && ((cputimeUsed*100)/uptimeSince) >= 25) {
-                    synchronized (stats) {
-                        stats.reportExcessiveCpuLocked(app.info.uid, app.processName,
-                                uptimeSince, cputimeUsed);
+                    if (((cputimeUsed*100)/uptimeSince) >= cpuLimit) {
+                        synchronized (stats) {
+                            stats.reportExcessiveCpuLocked(app.info.uid, app.processName,
+                                    uptimeSince, cputimeUsed);
+                        }
+                        app.kill("excessive cpu " + cputimeUsed + " during " + uptimeSince
+                                + " dur=" + checkDur + " limit=" + cpuLimit, true);
+                        app.baseProcessTracker.reportExcessiveCpu(app.pkgList);
                     }
-                    app.kill("excessive cpu " + cputimeUsed + " during " + uptimeSince, true);
-                    app.baseProcessTracker.reportExcessiveCpu(app.pkgList);
-                } else {
-                    app.lastWakeTime = wtime;
-                    app.lastCpuTime = app.curCpuTime;
                 }
+                app.lastCpuTime = app.curCpuTime;
             }
         }
     }
@@ -21983,10 +22031,12 @@
         int changes = 0;
 
         if (app.curAdj != app.setAdj) {
-            ProcessList.setOomAdj(app.pid, app.info.uid, app.curAdj);
-            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG_OOM_ADJ,
-                    "Set " + app.pid + " " + app.processName + " adj " + app.curAdj + ": "
-                    + app.adjType);
+            ProcessList.setOomAdj(app.pid, app.uid, app.curAdj);
+            if (DEBUG_SWITCH || DEBUG_OOM_ADJ || mCurOomAdjUid == app.info.uid) {
+                String msg = "Set " + app.pid + " " + app.processName + " adj "
+                        + app.curAdj + ": " + app.adjType;
+                reportOomAdjMessageLocked(TAG_OOM_ADJ, msg);
+            }
             app.setAdj = app.curAdj;
             app.verifiedAdj = ProcessList.INVALID_ADJ;
         }
@@ -21994,9 +22044,11 @@
         if (app.setSchedGroup != app.curSchedGroup) {
             int oldSchedGroup = app.setSchedGroup;
             app.setSchedGroup = app.curSchedGroup;
-            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG_OOM_ADJ,
-                    "Setting sched group of " + app.processName
-                    + " to " + app.curSchedGroup);
+            if (DEBUG_SWITCH || DEBUG_OOM_ADJ || mCurOomAdjUid == app.uid) {
+                String msg = "Setting sched group of " + app.processName
+                        + " to " + app.curSchedGroup;
+                reportOomAdjMessageLocked(TAG_OOM_ADJ, msg);
+            }
             if (app.waitingToKill != null && app.curReceivers.isEmpty()
                     && app.setSchedGroup == ProcessList.SCHED_GROUP_BACKGROUND) {
                 app.kill(app.waitingToKill, true);
@@ -22055,13 +22107,21 @@
                                app.curSchedGroup != ProcessList.SCHED_GROUP_TOP_APP) {
                         mVrController.onTopProcChangedLocked(app);
                         if (mUseFifoUiScheduling) {
-                            // Reset UI pipeline to SCHED_OTHER
-                            setThreadScheduler(app.pid, SCHED_OTHER, 0);
-                            setThreadPriority(app.pid, app.savedPriority);
-                            if (app.renderThreadTid != 0) {
-                                setThreadScheduler(app.renderThreadTid,
-                                    SCHED_OTHER, 0);
-                                setThreadPriority(app.renderThreadTid, -4);
+                            try {
+                                // Reset UI pipeline to SCHED_OTHER
+                                setThreadScheduler(app.pid, SCHED_OTHER, 0);
+                                setThreadPriority(app.pid, app.savedPriority);
+                                if (app.renderThreadTid != 0) {
+                                    setThreadScheduler(app.renderThreadTid,
+                                        SCHED_OTHER, 0);
+                                    setThreadPriority(app.renderThreadTid, -4);
+                                }
+                            } catch (IllegalArgumentException e) {
+                                Slog.w(TAG,
+                                        "Failed to set scheduling policy, thread does not exist:\n"
+                                                + e);
+                            } catch (SecurityException e) {
+                                Slog.w(TAG, "Failed to set scheduling policy, not allowed:\n" + e);
                             }
                         } else {
                             // Reset priority for top app UI and render threads
@@ -22133,23 +22193,20 @@
                     "Not requesting PSS of " + app + ": next=" + (app.nextPssTime-now));
         }
         if (app.setProcState != app.curProcState) {
-            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG_OOM_ADJ,
-                    "Proc state change of " + app.processName
-                            + " to " + app.curProcState);
+            if (DEBUG_SWITCH || DEBUG_OOM_ADJ || mCurOomAdjUid == app.uid) {
+                String msg = "Proc state change of " + app.processName
+                        + " to " + app.curProcState;
+                reportOomAdjMessageLocked(TAG_OOM_ADJ, msg);
+            }
             boolean setImportant = app.setProcState < ActivityManager.PROCESS_STATE_SERVICE;
             boolean curImportant = app.curProcState < ActivityManager.PROCESS_STATE_SERVICE;
             if (setImportant && !curImportant) {
                 // This app is no longer something we consider important enough to allow to
                 // use arbitrary amounts of battery power.  Note
-                // its current wake lock time to later know to kill it if
+                // its current CPU time to later know to kill it if
                 // it is not behaving well.
-                BatteryStatsImpl stats = mBatteryStatsService.getActiveStatistics();
-                synchronized (stats) {
-                    app.lastWakeTime = stats.getProcessWakeTime(app.info.uid,
-                            app.pid, nowElapsed);
-                }
-                app.lastCpuTime = app.curCpuTime;
-
+                app.whenUnimportant = now;
+                app.lastCpuTime = 0;
             }
             // Inform UsageStats of important process state change
             // Must be called before updating setProcState
@@ -22250,10 +22307,10 @@
             }
             if (uidRec != null) {
                 uidRec.pendingChange = pendingChange;
-                if (change == UidRecord.CHANGE_GONE && !uidRec.idle) {
+                if ((change & UidRecord.CHANGE_GONE) != 0 && !uidRec.idle) {
                     // If this uid is going away, and we haven't yet reported it is gone,
                     // then do so now.
-                    change = UidRecord.CHANGE_GONE_IDLE;
+                    change |= UidRecord.CHANGE_IDLE;
                 }
             } else if (uid < 0) {
                 throw new IllegalArgumentException("No UidRecord or uid");
@@ -22263,8 +22320,26 @@
             mPendingUidChanges.add(pendingChange);
         } else {
             pendingChange = uidRec.pendingChange;
-            if (change == UidRecord.CHANGE_GONE && pendingChange.change == UidRecord.CHANGE_IDLE) {
-                change = UidRecord.CHANGE_GONE_IDLE;
+            // If there is no change in idle or active state, then keep whatever was pending.
+            if ((change & (UidRecord.CHANGE_IDLE | UidRecord.CHANGE_ACTIVE)) == 0) {
+                change |= (pendingChange.change & (UidRecord.CHANGE_IDLE
+                        | UidRecord.CHANGE_ACTIVE));
+            }
+            // If there is no change in cached or uncached state, then keep whatever was pending.
+            if ((change & (UidRecord.CHANGE_CACHED | UidRecord.CHANGE_UNCACHED)) == 0) {
+                change |= (pendingChange.change & (UidRecord.CHANGE_CACHED
+                        | UidRecord.CHANGE_UNCACHED));
+            }
+            // If this is a report of the UID being gone, then we shouldn't keep any previous
+            // report of it being active or cached.  (That is, a gone uid is never active,
+            // and never cached.)
+            if ((change & UidRecord.CHANGE_GONE) != 0) {
+                change &= ~(UidRecord.CHANGE_ACTIVE | UidRecord.CHANGE_CACHED);
+                if (!uidRec.idle) {
+                    // If this uid is going away, and we haven't yet reported it is gone,
+                    // then do so now.
+                    change |= UidRecord.CHANGE_IDLE;
+                }
             }
         }
         pendingChange.change = change;
@@ -22273,27 +22348,26 @@
         pendingChange.ephemeral = uidRec != null ? uidRec.ephemeral : isEphemeralLocked(uid);
         pendingChange.procStateSeq = uidRec != null ? uidRec.curProcStateSeq : 0;
         if (uidRec != null) {
+            uidRec.lastReportedChange = change;
             uidRec.updateLastDispatchedProcStateSeq(change);
         }
 
         // Directly update the power manager, since we sit on top of it and it is critical
         // it be kept in sync (so wake locks will be held as soon as appropriate).
         if (mLocalPowerManager != null) {
-            switch (change) {
-                case UidRecord.CHANGE_GONE:
-                case UidRecord.CHANGE_GONE_IDLE:
-                    mLocalPowerManager.uidGone(pendingChange.uid);
-                    break;
-                case UidRecord.CHANGE_IDLE:
-                    mLocalPowerManager.uidIdle(pendingChange.uid);
-                    break;
-                case UidRecord.CHANGE_ACTIVE:
-                    mLocalPowerManager.uidActive(pendingChange.uid);
-                    break;
-                default:
-                    mLocalPowerManager.updateUidProcState(pendingChange.uid,
-                            pendingChange.processState);
-                    break;
+            // TO DO: dispatch cached/uncached changes here, so we don't need to report
+            // all proc state changes.
+            if ((change & UidRecord.CHANGE_ACTIVE) != 0) {
+                mLocalPowerManager.uidActive(pendingChange.uid);
+            }
+            if ((change & UidRecord.CHANGE_IDLE) != 0) {
+                mLocalPowerManager.uidIdle(pendingChange.uid);
+            }
+            if ((change & UidRecord.CHANGE_GONE) != 0) {
+                mLocalPowerManager.uidGone(pendingChange.uid);
+            } else {
+                mLocalPowerManager.updateUidProcState(pendingChange.uid,
+                        pendingChange.processState);
             }
         }
     }
@@ -22848,6 +22922,8 @@
             requestPssAllProcsLocked(now, false, mProcessStats.isMemFactorLowered());
         }
 
+        ArrayList<UidRecord> becameIdle = null;
+
         // Update from any uid changes.
         if (mLocalPowerManager != null) {
             mLocalPowerManager.startUidChanges();
@@ -22855,8 +22931,9 @@
         for (int i=mActiveUids.size()-1; i>=0; i--) {
             final UidRecord uidRec = mActiveUids.valueAt(i);
             int uidChange = UidRecord.CHANGE_PROCSTATE;
-            if (uidRec.setProcState != uidRec.curProcState
-                    || uidRec.setWhitelist != uidRec.curWhitelist) {
+            if (uidRec.curProcState != ActivityManager.PROCESS_STATE_NONEXISTENT
+                    && (uidRec.setProcState != uidRec.curProcState
+                           || uidRec.setWhitelist != uidRec.curWhitelist)) {
                 if (DEBUG_UID_OBSERVERS) Slog.i(TAG_UID_OBSERVERS,
                         "Changes in " + uidRec + ": proc state from " + uidRec.setProcState
                         + " to " + uidRec.curProcState + ", whitelist from " + uidRec.setWhitelist
@@ -22877,6 +22954,13 @@
                                     mConstants.BACKGROUND_SETTLE_TIME);
                         }
                     }
+                    if (uidRec.idle && !uidRec.setIdle) {
+                        uidChange = UidRecord.CHANGE_IDLE;
+                        if (becameIdle == null) {
+                            becameIdle = new ArrayList<>();
+                        }
+                        becameIdle.add(uidRec);
+                    }
                 } else {
                     if (uidRec.idle) {
                         uidChange = UidRecord.CHANGE_ACTIVE;
@@ -22885,8 +22969,17 @@
                     }
                     uidRec.lastBackgroundTime = 0;
                 }
+                final boolean wasCached = uidRec.setProcState
+                        > ActivityManager.PROCESS_STATE_RECEIVER;
+                final boolean isCached = uidRec.curProcState
+                        > ActivityManager.PROCESS_STATE_RECEIVER;
+                if (wasCached != isCached ||
+                        uidRec.setProcState == ActivityManager.PROCESS_STATE_NONEXISTENT) {
+                    uidChange |= isCached ? UidRecord.CHANGE_CACHED : UidRecord.CHANGE_UNCACHED;
+                }
                 uidRec.setProcState = uidRec.curProcState;
                 uidRec.setWhitelist = uidRec.curWhitelist;
+                uidRec.setIdle = uidRec.idle;
                 enqueueUidChangeLocked(uidRec, -1, uidChange);
                 noteUidProcessState(uidRec.uid, uidRec.curProcState);
                 if (uidRec.foregroundServices) {
@@ -22898,6 +22991,14 @@
             mLocalPowerManager.finishUidChanges();
         }
 
+        if (becameIdle != null) {
+            // If we have any new uids that became idle this time, we need to make sure
+            // they aren't left with running services.
+            for (int i = becameIdle.size() - 1; i >= 0; i--) {
+                mServices.stopInBackgroundLocked(becameIdle.get(i).uid);
+            }
+        }
+
         if (mProcessStats.shouldWriteNowLocked(now)) {
             mHandler.post(new Runnable() {
                 @Override public void run() {
@@ -22961,6 +23062,7 @@
                                     userId == UserHandle.getUserId(uidRec.uid)) {
                                 EventLogTags.writeAmUidIdle(uidRec.uid);
                                 uidRec.idle = true;
+                                uidRec.setIdle = true;
                                 Slog.w(TAG, "Idling uid " + UserHandle.formatUid(uidRec.uid)
                                         + " from package " + packageName + " user " + userId);
                                 doStopUidLocked(uidRec.uid, uidRec);
@@ -22996,6 +23098,7 @@
                     if (bgTime <= maxBgTime) {
                         EventLogTags.writeAmUidIdle(uidRec.uid);
                         uidRec.idle = true;
+                        uidRec.setIdle = true;
                         doStopUidLocked(uidRec.uid, uidRec);
                     } else {
                         if (nextTime == 0 || nextTime > bgTime) {
@@ -23315,19 +23418,15 @@
     }
 
     private void clearProfilerLocked() {
-        if (mProfileFd != null) {
+        if (mProfilerInfo !=null && mProfilerInfo.profileFd != null) {
             try {
-                mProfileFd.close();
+                mProfilerInfo.profileFd.close();
             } catch (IOException e) {
             }
         }
         mProfileApp = null;
         mProfileProc = null;
-        mProfileFile = null;
-        mProfileType = 0;
-        mAutoStopProfiler = false;
-        mStreamingOutput = false;
-        mSamplingInterval = 0;
+        mProfilerInfo = null;
     }
 
     public boolean profileControl(String process, int userId, boolean start,
@@ -23371,10 +23470,10 @@
                     proc.thread.profilerControl(start, profilerInfo, profileType);
                     fd = null;
                     try {
-                        mProfileFd.close();
+                        mProfilerInfo.profileFd.close();
                     } catch (IOException e) {
                     }
-                    mProfileFd = null;
+                    mProfilerInfo.profileFd = null;
                 } else {
                     stopProfilerLocked(proc, profileType);
                     if (profilerInfo != null && profilerInfo.profileFd != null) {
@@ -23432,8 +23531,8 @@
         return proc;
     }
 
-    public boolean dumpHeap(String process, int userId, boolean managed,
-            String path, ParcelFileDescriptor fd) throws RemoteException {
+    public boolean dumpHeap(String process, int userId, boolean managed, boolean mallocInfo,
+            boolean runGc, String path, ParcelFileDescriptor fd) throws RemoteException {
 
         try {
             synchronized (this) {
@@ -23461,7 +23560,7 @@
                     }
                 }
 
-                proc.thread.dumpHeap(managed, path, fd);
+                proc.thread.dumpHeap(managed, mallocInfo, runGc, path, fd);
                 fd = null;
                 return true;
             }
@@ -23530,6 +23629,9 @@
             }
             if (DEBUG_PSS) Slog.d(TAG_PSS, "Dump heap finished for " + path);
             mHandler.sendEmptyMessage(POST_DUMP_HEAP_NOTIFICATION_MSG);
+
+            // Forced gc to clean up the remnant hprof fd.
+            Runtime.getRuntime().gc();
         }
     }
 
@@ -23828,15 +23930,9 @@
         }
 
         @Override
-        public SleepToken acquireSleepToken(String tag) {
+        public SleepToken acquireSleepToken(String tag, int displayId) {
             Preconditions.checkNotNull(tag);
-
-            synchronized (ActivityManagerService.this) {
-                SleepTokenImpl token = new SleepTokenImpl(tag);
-                mSleepTokens.add(token);
-                updateSleepIfNeededLocked();
-                return token;
-            }
+            return ActivityManagerService.this.acquireSleepToken(tag, displayId);
         }
 
         @Override
@@ -23852,6 +23948,7 @@
             synchronized (ActivityManagerService.this) {
                 ActivityManagerService.this.onUserStoppedLocked(userId);
             }
+            mBatteryStatsService.onUserRemoved(userId);
         }
 
         @Override
@@ -24032,7 +24129,7 @@
         @Override
         public void notifyKeyguardTrustedChanged() {
             synchronized (ActivityManagerService.this) {
-                if (mKeyguardController.isKeyguardShowing()) {
+                if (mKeyguardController.isKeyguardShowing(DEFAULT_DISPLAY)) {
                     mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
                 }
             }
@@ -24140,7 +24237,7 @@
                     pw.println("  Reason: " + reason);
                 }
                 pw.println();
-                mActivityStarter.dump(pw, "  ");
+                mActivityStarter.dump(pw, "  ", null);
                 pw.println();
                 pw.println("-------------------------------------------------------------------------------");
                 dumpActivitiesLocked(null /* fd */, pw, null /* args */, 0 /* opti */,
@@ -24161,6 +24258,21 @@
         }
 
         @Override
+        public void setFocusedActivity(IBinder token) {
+            synchronized (ActivityManagerService.this) {
+                final ActivityRecord r = ActivityRecord.forTokenLocked(token);
+                if (r == null) {
+                    throw new IllegalArgumentException(
+                            "setFocusedActivity: No activity record matching token=" + token);
+                }
+                if (mStackSupervisor.moveFocusableActivityStackToFrontLocked(
+                        r, "setFocusedActivity")) {
+                    mStackSupervisor.resumeFocusedStackTopActivityLocked();
+                }
+            }
+        }
+
+        @Override
         public boolean hasRunningActivity(int uid, @Nullable String packageName) {
             if (packageName == null) return false;
 
@@ -24237,7 +24349,7 @@
                 record.networkStateLock.wait(mWaitForNetworkTimeoutMs);
                 record.waitingForNetwork = false;
                 final long totalTime = SystemClock.uptimeMillis() - startTime;
-                if (totalTime >= mWaitForNetworkTimeoutMs) {
+                if (totalTime >= mWaitForNetworkTimeoutMs || DEBUG_NETWORK) {
                     Slog.wtf(TAG_NETWORK, "Total time waited for network rules to get updated: "
                             + totalTime + ". Uid: " + callingUid + " procStateSeq: "
                             + procStateSeq + " UidRec: " + record
@@ -24292,30 +24404,6 @@
         }
     }
 
-    private final class SleepTokenImpl extends SleepToken {
-        private final String mTag;
-        private final long mAcquireTime;
-
-        public SleepTokenImpl(String tag) {
-            mTag = tag;
-            mAcquireTime = SystemClock.uptimeMillis();
-        }
-
-        @Override
-        public void release() {
-            synchronized (ActivityManagerService.this) {
-                if (mSleepTokens.remove(this)) {
-                    updateSleepIfNeededLocked();
-                }
-            }
-        }
-
-        @Override
-        public String toString() {
-            return "{\"" + mTag + "\", acquire at " + TimeUtils.formatUptime(mAcquireTime) + "}";
-        }
-    }
-
     /**
      * An implementation of IAppTask, that allows an app to manage its own tasks via
      * {@link android.app.ActivityManager.AppTask}.  We keep track of the callingUid to ensure that
@@ -24407,7 +24495,7 @@
             }
             return mActivityStarter.startActivityMayWait(appThread, -1, callingPackage, intent,
                     resolvedType, null, null, null, null, 0, 0, null, null,
-                    null, bOptions, false, callingUser, null, tr, "AppTaskImpl");
+                    null, bOptions, false, callingUser, tr, "AppTaskImpl");
         }
 
         @Override
@@ -24517,7 +24605,7 @@
                 if (updateFrameworkRes || packagesToUpdate.contains(packageName)) {
                     try {
                         final ApplicationInfo ai = AppGlobals.getPackageManager()
-                                .getApplicationInfo(packageName, 0 /*flags*/, app.userId);
+                                .getApplicationInfo(packageName, STOCK_PM_FLAGS, app.userId);
                         if (ai != null) {
                             app.thread.scheduleApplicationInfoChanged(ai);
                         }
@@ -24585,4 +24673,37 @@
             return mNmi != null;
         }
     }
+
+    @Override
+    public void setShowWhenLocked(IBinder token, boolean showWhenLocked)
+            throws RemoteException {
+        synchronized (this) {
+            final ActivityRecord r = ActivityRecord.isInStackLocked(token);
+            if (r == null) {
+                return;
+            }
+            final long origId = Binder.clearCallingIdentity();
+            try {
+                r.setShowWhenLocked(showWhenLocked);
+            } finally {
+                Binder.restoreCallingIdentity(origId);
+            }
+        }
+    }
+
+    @Override
+    public void setTurnScreenOn(IBinder token, boolean turnScreenOn) throws RemoteException {
+        synchronized (this) {
+            final ActivityRecord r = ActivityRecord.isInStackLocked(token);
+            if (r == null) {
+                return;
+            }
+            final long origId = Binder.clearCallingIdentity();
+            try {
+                r.setTurnScreenOn(turnScreenOn);
+            } finally {
+                Binder.restoreCallingIdentity(origId);
+            }
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
index d768304..8488e52 100644
--- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
+++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
@@ -19,10 +19,10 @@
 import android.app.ActivityManager;
 import android.app.ActivityOptions;
 import android.app.AppGlobals;
-import android.app.IActivityContainer;
 import android.app.IActivityController;
 import android.app.IActivityManager;
 import android.app.IStopUserCallback;
+import android.app.IUidObserver;
 import android.app.ProfilerInfo;
 import android.app.WaitResult;
 import android.app.usage.ConfigurationStats;
@@ -55,7 +55,6 @@
 import android.util.ArrayMap;
 import android.util.DebugUtils;
 import android.util.DisplayMetrics;
-import android.view.IWindowManager;
 
 import com.android.internal.util.HexDump;
 import com.android.internal.util.Preconditions;
@@ -114,6 +113,7 @@
     private int mSamplingInterval;
     private boolean mAutoStop;
     private boolean mStreaming;   // Streaming the profiling output to a file.
+    private String mAgent;  // Agent to attach on startup.
     private int mDisplayId;
     private int mStackId;
     private int mTaskId;
@@ -183,6 +183,8 @@
                     return runMakeIdle(pw);
                 case "monitor":
                     return runMonitor(pw);
+                case "watch-uids":
+                    return runWatchUids(pw);
                 case "hang":
                     return runHang(pw);
                 case "restart":
@@ -292,6 +294,8 @@
                     mSamplingInterval = Integer.parseInt(getNextArgRequired());
                 } else if (opt.equals("--streaming")) {
                     mStreaming = true;
+                } else if (opt.equals("--attach-agent")) {
+                    mAgent = getNextArgRequired();
                 } else if (opt.equals("-R")) {
                     mRepeat = Integer.parseInt(getNextArgRequired());
                 } else if (opt.equals("-S")) {
@@ -368,13 +372,16 @@
 
             ProfilerInfo profilerInfo = null;
 
-            if (mProfileFile != null) {
-                ParcelFileDescriptor fd = openOutputFileForSystem(mProfileFile);
-                if (fd == null) {
-                    return 1;
+            if (mProfileFile != null || mAgent != null) {
+                ParcelFileDescriptor fd = null;
+                if (mProfileFile != null) {
+                    fd = openOutputFileForSystem(mProfileFile);
+                    if (fd == null) {
+                        return 1;
+                    }
                 }
                 profilerInfo = new ProfilerInfo(mProfileFile, fd, mSamplingInterval, mAutoStop,
-                                                mStreaming);
+                        mStreaming, mAgent);
             }
 
             pw.println("Starting: " + intent);
@@ -747,7 +754,8 @@
             if (fd == null) {
                 return -1;
             }
-            profilerInfo = new ProfilerInfo(profileFile, fd, mSamplingInterval, false, mStreaming);
+            profilerInfo = new ProfilerInfo(profileFile, fd, mSamplingInterval, false, mStreaming,
+                    null);
         }
 
         try {
@@ -777,7 +785,9 @@
     int runDumpHeap(PrintWriter pw) throws RemoteException {
         final PrintWriter err = getErrPrintWriter();
         boolean managed = true;
+        boolean mallocInfo = false;
         int userId = UserHandle.USER_CURRENT;
+        boolean runGc = false;
 
         String opt;
         while ((opt=getNextOption()) != null) {
@@ -789,6 +799,11 @@
                 }
             } else if (opt.equals("-n")) {
                 managed = false;
+            } else if (opt.equals("-g")) {
+                runGc = true;
+            } else if (opt.equals("-m")) {
+                managed = false;
+                mallocInfo = true;
             } else {
                 err.println("Error: Unknown option: " + opt);
                 return -1;
@@ -804,7 +819,7 @@
             return -1;
         }
 
-        if (!mInterface.dumpHeap(process, userId, managed, heapFile, fd)) {
+        if (!mInterface.dumpHeap(process, userId, managed, mallocInfo, runGc, heapFile, fd)) {
             err.println("HEAP DUMP FAILED on process " + process);
             return -1;
         }
@@ -1280,6 +1295,167 @@
         return 0;
     }
 
+    static final class MyUidObserver extends IUidObserver.Stub
+            implements ActivityManagerService.OomAdjObserver {
+        final IActivityManager mInterface;
+        final ActivityManagerService mInternal;
+        final PrintWriter mPw;
+        final InputStream mInput;
+        final int mUid;
+
+        static final int STATE_NORMAL = 0;
+
+        int mState;
+
+        MyUidObserver(ActivityManagerService service, PrintWriter pw, InputStream input, int uid) {
+            mInterface = service;
+            mInternal = service;
+            mPw = pw;
+            mInput = input;
+            mUid = uid;
+        }
+
+        @Override
+        public void onUidStateChanged(int uid, int procState, long procStateSeq) throws RemoteException {
+            synchronized (this) {
+                mPw.print(uid);
+                mPw.print(" procstate ");
+                mPw.print(ProcessList.makeProcStateString(procState));
+                mPw.print(" seq ");
+                mPw.println(procStateSeq);
+                mPw.flush();
+            }
+        }
+
+        @Override
+        public void onUidGone(int uid, boolean disabled) throws RemoteException {
+            synchronized (this) {
+                mPw.print(uid);
+                mPw.print(" gone");
+                if (disabled) {
+                    mPw.print(" disabled");
+                }
+                mPw.println();
+                mPw.flush();
+            }
+        }
+
+        @Override
+        public void onUidActive(int uid) throws RemoteException {
+            synchronized (this) {
+                mPw.print(uid);
+                mPw.println(" active");
+                mPw.flush();
+            }
+        }
+
+        @Override
+        public void onUidIdle(int uid, boolean disabled) throws RemoteException {
+            synchronized (this) {
+                mPw.print(uid);
+                mPw.print(" idle");
+                if (disabled) {
+                    mPw.print(" disabled");
+                }
+                mPw.println();
+                mPw.flush();
+            }
+        }
+
+        @Override
+        public void onUidCachedChanged(int uid, boolean cached) throws RemoteException {
+            synchronized (this) {
+                mPw.print(uid);
+                mPw.println(cached ? " cached" : " uncached");
+                mPw.flush();
+            }
+        }
+
+        @Override
+        public void onOomAdjMessage(String msg) {
+            synchronized (this) {
+                mPw.print("# ");
+                mPw.println(msg);
+                mPw.flush();
+            }
+        }
+
+        void printMessageForState() {
+            switch (mState) {
+                case STATE_NORMAL:
+                    mPw.println("Watching uid states...  available commands:");
+                    break;
+            }
+            mPw.println("(q)uit: finish watching");
+        }
+
+        void run() throws RemoteException {
+            try {
+                printMessageForState();
+                mPw.flush();
+
+                mInterface.registerUidObserver(this, ActivityManager.UID_OBSERVER_ACTIVE
+                        | ActivityManager.UID_OBSERVER_GONE | ActivityManager.UID_OBSERVER_PROCSTATE
+                        | ActivityManager.UID_OBSERVER_IDLE | ActivityManager.UID_OBSERVER_CACHED,
+                        ActivityManager.PROCESS_STATE_UNKNOWN, null);
+                if (mUid >= 0) {
+                    mInternal.setOomAdjObserver(mUid, this);
+                }
+                mState = STATE_NORMAL;
+
+                InputStreamReader converter = new InputStreamReader(mInput);
+                BufferedReader in = new BufferedReader(converter);
+                String line;
+
+                while ((line = in.readLine()) != null) {
+                    boolean addNewline = true;
+                    if (line.length() <= 0) {
+                        addNewline = false;
+                    } else if ("q".equals(line) || "quit".equals(line)) {
+                        break;
+                    } else {
+                        mPw.println("Invalid command: " + line);
+                    }
+
+                    synchronized (this) {
+                        if (addNewline) {
+                            mPw.println("");
+                        }
+                        printMessageForState();
+                        mPw.flush();
+                    }
+                }
+
+            } catch (IOException e) {
+                e.printStackTrace(mPw);
+                mPw.flush();
+            } finally {
+                if (mUid >= 0) {
+                    mInternal.clearOomAdjObserver();
+                }
+                mInterface.unregisterUidObserver(this);
+            }
+        }
+    }
+
+    int runWatchUids(PrintWriter pw) throws RemoteException {
+        String opt;
+        int uid = -1;
+        while ((opt=getNextOption()) != null) {
+            if (opt.equals("--oom")) {
+                uid = Integer.parseInt(getNextArgRequired());
+            } else {
+                getErrPrintWriter().println("Error: Unknown option: " + opt);
+                return -1;
+
+            }
+        }
+
+        MyUidObserver controller = new MyUidObserver(mInternal, pw, getRawInputStream(), uid);
+        controller.run();
+        return 0;
+    }
+
     int runHang(PrintWriter pw) throws RemoteException {
         String opt;
         boolean allowRestart = false;
@@ -1707,8 +1883,12 @@
                 level = ComponentCallbacks2.TRIM_MEMORY_COMPLETE;
                 break;
             default:
-                getErrPrintWriter().println("Error: Unknown level option: " + levelArg);
-                return -1;
+                try {
+                    level = Integer.parseInt(levelArg);
+                } catch (NumberFormatException e) {
+                    getErrPrintWriter().println("Error: Unknown level option: " + levelArg);
+                    return -1;
+                }
         }
         if (!mInterface.setProcessMemoryTrimLevel(proc, userId, level)) {
             getErrPrintWriter().println("Unknown error: failed to set trim level");
@@ -1807,9 +1987,17 @@
             throw new RuntimeException(e.getMessage(), e);
         }
 
-        IActivityContainer container = mInterface.createStackOnDisplay(displayId);
-        if (container != null) {
-            container.startActivity(intent);
+        final int stackId = mInterface.createStackOnDisplay(displayId);
+        if (stackId != INVALID_STACK_ID) {
+            // TODO: Need proper support if this is used by test...
+//            container.startActivity(intent);
+//            ActivityOptions options = ActivityOptions.makeBasic();
+//            options.setLaunchDisplayId(displayId);
+//            options.setLaunchStackId(stackId);
+//            mInterface.startAct
+//            mInterface.startActivityAsUser(null, null, intent, mimeType,
+//                    null, null, 0, mStartFlags, profilerInfo,
+//                    options != null ? options.toBundle() : null, mUserId);
         }
         return 0;
     }
@@ -2490,6 +2678,7 @@
             pw.println("      --streaming: stream the profiling output to the specified file");
             pw.println("          (use with --start-profiler)");
             pw.println("      -P <FILE>: like above, but profiling stops when app goes idle");
+            pw.println("      --attach-agent <agent>: attach the given agent before binding");
             pw.println("      -R: repeat the activity launch <COUNT> times.  Prior to each repeat,");
             pw.println("          the top activity will be finished.");
             pw.println("      -S: force stop the target app before starting the activity");
@@ -2547,10 +2736,11 @@
             pw.println("      --sampling INTERVAL: use sample profiling with INTERVAL microseconds");
             pw.println("          between samples");
             pw.println("      --streaming: stream the profiling output to the specified file");
-            pw.println("  dumpheap [--user <USER_ID> current] [-n] <PROCESS> <FILE>");
+            pw.println("  dumpheap [--user <USER_ID> current] [-n] [-g] <PROCESS> <FILE>");
             pw.println("      Dump the heap of a process.  The given <PROCESS> argument may");
             pw.println("        be either a process name or pid.  Options are:");
             pw.println("      -n: dump native heap instead of managed heap");
+            pw.println("      -g: force GC before dumping the heap");
             pw.println("      --user <USER_ID> | current: When supplying a process name,");
             pw.println("          specify user of process to dump; uses current user if not specified.");
             pw.println("  set-debug-app [-w] [--persistent] <PACKAGE>");
@@ -2583,6 +2773,9 @@
             pw.println("  monitor [--gdb <port>]");
             pw.println("      Start monitoring for crashes or ANRs.");
             pw.println("      --gdb: start gdbserv on the given port at crash/ANR");
+            pw.println("  watch-uids [--oom <uid>");
+            pw.println("      Start watching for and reporting uid state changes.");
+            pw.println("      --oom: specify a uid for which to report detailed change messages.");
             pw.println("  hang [--allow-restart]");
             pw.println("      Hang the system.");
             pw.println("      --allow-restart: allow watchdog to perform normal system restart");
@@ -2641,7 +2834,7 @@
             pw.println("      Returns the inactive state of an app.");
             pw.println("  send-trim-memory [--user <USER_ID>] <PROCESS>");
             pw.println("          [HIDDEN|RUNNING_MODERATE|BACKGROUND|RUNNING_LOW|MODERATE|RUNNING_CRITICAL|COMPLETE]");
-            pw.println("      Send a memory trim event to a <PROCESS>.");
+            pw.println("      Send a memory trim event to a <PROCESS>.  May also supply a raw trim int level.");
             pw.println("  display [COMMAND] [...]: sub-commands for operating on displays.");
             pw.println("       move-stack <STACK_ID> <DISPLAY_ID>");
             pw.println("           Move <STACK_ID> from its current display to <DISPLAY_ID>.");
diff --git a/services/core/java/com/android/server/am/ActivityMetricsLogger.java b/services/core/java/com/android/server/am/ActivityMetricsLogger.java
index 98815d7..a803874 100644
--- a/services/core/java/com/android/server/am/ActivityMetricsLogger.java
+++ b/services/core/java/com/android/server/am/ActivityMetricsLogger.java
@@ -12,16 +12,23 @@
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION_BIND_APPLICATION_DELAY_MS;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION_CALLING_PACKAGE_NAME;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION_CANCELLED;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION_DELAY_MS;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION_DEVICE_UPTIME_SECONDS;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION_IS_EPHEMERAL;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION_PROCESS_RUNNING;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION_REPORTED_DRAWN;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION_REPORTED_DRAWN_MS;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION_STARTING_WINDOW_DELAY_MS;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION_WINDOWS_DRAWN_DELAY_MS;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_CLASS_NAME;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_INSTANT_APP_LAUNCH_TOKEN;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_COLD_LAUNCH;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_HOT_LAUNCH;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_REPORTED_DRAWN_NO_BUNDLE;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_REPORTED_DRAWN_WITH_BUNDLE;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_WARM_LAUNCH;
+import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_METRICS;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
 import static com.android.server.am.ActivityStack.STACK_INVISIBLE;
@@ -29,12 +36,16 @@
 import android.app.ActivityManager.StackId;
 import android.content.Context;
 import android.metrics.LogMaker;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
 import android.os.SystemClock;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
 
 import com.android.internal.logging.MetricsLogger;
+import com.android.internal.os.SomeArgs;
 
 import java.util.ArrayList;
 
@@ -55,6 +66,8 @@
 
     private static final long INVALID_START_TIME = -1;
 
+    private static final int MSG_CHECK_VISIBILITY = 0;
+
     // Preallocated strings we are sending to tron, so we don't have to allocate a new one every
     // time we log.
     private static final String[] TRON_WINDOW_STATE_VARZ_STRINGS = {
@@ -67,12 +80,31 @@
     private final MetricsLogger mMetricsLogger = new MetricsLogger();
 
     private long mCurrentTransitionStartTime = INVALID_START_TIME;
+    private long mLastTransitionStartTime = INVALID_START_TIME;
 
     private int mCurrentTransitionDeviceUptime;
     private int mCurrentTransitionDelayMs;
     private boolean mLoggedTransitionStarting;
 
     private final SparseArray<StackTransitionInfo> mStackTransitionInfo = new SparseArray<>();
+    private final SparseArray<StackTransitionInfo> mLastStackTransitionInfo = new SparseArray<>();
+    private final H mHandler;
+    private final class H extends Handler {
+
+        public H(Looper looper) {
+            super(looper);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_CHECK_VISIBILITY:
+                    final SomeArgs args = (SomeArgs) msg.obj;
+                    checkVisibility((TaskRecord) args.arg1, (ActivityRecord) args.arg2);
+                    break;
+            }
+        }
+    };
 
     private final class StackTransitionInfo {
         private ActivityRecord launchedActivity;
@@ -86,10 +118,11 @@
         private boolean loggedStartingWindowDrawn;
     }
 
-    ActivityMetricsLogger(ActivityStackSupervisor supervisor, Context context) {
+    ActivityMetricsLogger(ActivityStackSupervisor supervisor, Context context, Looper looper) {
         mLastLogTimeSecs = SystemClock.elapsedRealtime() / 1000;
         mSupervisor = supervisor;
         mContext = context;
+        mHandler = new H(looper);
     }
 
     void logWindowState() {
@@ -135,7 +168,9 @@
      */
     void notifyActivityLaunching() {
         if (!isAnyTransitionActive()) {
+            if (DEBUG_METRICS) Slog.i(TAG, "notifyActivityLaunching");
             mCurrentTransitionStartTime = SystemClock.uptimeMillis();
+            mLastTransitionStartTime = mCurrentTransitionStartTime;
         }
     }
 
@@ -191,6 +226,12 @@
     private void notifyActivityLaunched(int resultCode, ActivityRecord launchedActivity,
             boolean processRunning, boolean processSwitch) {
 
+        if (DEBUG_METRICS) Slog.i(TAG, "notifyActivityLaunched"
+                + " resultCode=" + resultCode
+                + " launchedActivity=" + launchedActivity
+                + " processRunning=" + processRunning
+                + " processSwitch=" + processSwitch);
+
         // If we are already in an existing transition, only update the activity name, but not the
         // other attributes.
         final int stackId = launchedActivity != null && launchedActivity.getStack() != null
@@ -219,11 +260,14 @@
             return;
         }
 
+        if (DEBUG_METRICS) Slog.i(TAG, "notifyActivityLaunched successful");
+
         final StackTransitionInfo newInfo = new StackTransitionInfo();
         newInfo.launchedActivity = launchedActivity;
         newInfo.currentTransitionProcessRunning = processRunning;
         newInfo.startResult = resultCode;
-        mStackTransitionInfo.append(stackId, newInfo);
+        mStackTransitionInfo.put(stackId, newInfo);
+        mLastStackTransitionInfo.put(stackId, newInfo);
         mCurrentTransitionDeviceUptime = (int) (SystemClock.uptimeMillis() / 1000);
     }
 
@@ -231,6 +275,8 @@
      * Notifies the tracker that all windows of the app have been drawn.
      */
     void notifyWindowsDrawn(int stackId, long timestamp) {
+        if (DEBUG_METRICS) Slog.i(TAG, "notifyWindowsDrawn stackId=" + stackId);
+
         final StackTransitionInfo info = mStackTransitionInfo.get(stackId);
         if (info == null || info.loggedWindowsDrawn) {
             return;
@@ -264,6 +310,7 @@
         if (!isAnyTransitionActive() || mLoggedTransitionStarting) {
             return;
         }
+        if (DEBUG_METRICS) Slog.i(TAG, "notifyTransitionStarting");
         mCurrentTransitionDelayMs = calculateDelay(timestamp);
         mLoggedTransitionStarting = true;
         for (int index = stackIdReasons.size() - 1; index >= 0; index--) {
@@ -283,17 +330,37 @@
      * Notifies the tracker that the visibility of an app is changing.
      *
      * @param activityRecord the app that is changing its visibility
-     * @param visible whether it's going to be visible or not
      */
-    void notifyVisibilityChanged(ActivityRecord activityRecord, boolean visible) {
+    void notifyVisibilityChanged(ActivityRecord activityRecord) {
         final StackTransitionInfo info = mStackTransitionInfo.get(activityRecord.getStackId());
+        if (info == null) {
+            return;
+        }
+        if (info.launchedActivity != activityRecord) {
+            return;
+        }
+        final TaskRecord t = activityRecord.getTask();
+        final SomeArgs args = SomeArgs.obtain();
+        args.arg1 = t;
+        args.arg2 = activityRecord;
+        mHandler.obtainMessage(MSG_CHECK_VISIBILITY, args).sendToTarget();
+    }
 
-        // If we have an active transition that's waiting on a certain activity that will be
-        // invisible now, we'll never get onWindowsDrawn, so abort the transition if necessary.
-        if (info != null && !visible && info.launchedActivity == activityRecord) {
-            mStackTransitionInfo.remove(activityRecord.getStackId());
-            if (mStackTransitionInfo.size() == 0) {
-                reset(true /* abort */);
+    private void checkVisibility(TaskRecord t, ActivityRecord r) {
+        synchronized (mSupervisor.mService) {
+
+            final StackTransitionInfo info = mStackTransitionInfo.get(r.getStackId());
+
+            // If we have an active transition that's waiting on a certain activity that will be
+            // invisible now, we'll never get onWindowsDrawn, so abort the transition if necessary.
+            if (info != null && !t.isVisible()) {
+                if (DEBUG_METRICS) Slog.i(TAG, "notifyVisibilityChanged to invisible"
+                        + " activity=" + r);
+                logAppTransitionCancel(info);
+                mStackTransitionInfo.remove(r.getStackId());
+                if (mStackTransitionInfo.size() == 0) {
+                    reset(true /* abort */);
+                }
             }
         }
     }
@@ -329,6 +396,7 @@
     }
 
     private void reset(boolean abort) {
+        if (DEBUG_METRICS) Slog.i(TAG, "reset abort=" + abort);
         if (!abort && isAnyTransitionActive()) {
             logAppTransitionMultiEvents();
         }
@@ -349,7 +417,20 @@
         return (int) (timestamp - mCurrentTransitionStartTime);
     }
 
+    private void logAppTransitionCancel(StackTransitionInfo info) {
+        final int type = getTransitionType(info);
+        if (type == -1) {
+            return;
+        }
+        final LogMaker builder = new LogMaker(APP_TRANSITION_CANCELLED);
+        builder.setPackageName(info.launchedActivity.packageName);
+        builder.setType(type);
+        builder.addTaggedData(FIELD_CLASS_NAME, info.launchedActivity.info.name);
+        mMetricsLogger.write(builder);
+    }
+
     private void logAppTransitionMultiEvents() {
+        if (DEBUG_METRICS) Slog.i(TAG, "logging transition events");
         for (int index = mStackTransitionInfo.size() - 1; index >= 0; index--) {
             final StackTransitionInfo info = mStackTransitionInfo.valueAt(index);
             final int type = getTransitionType(info);
@@ -361,7 +442,7 @@
             builder.setType(type);
             builder.addTaggedData(FIELD_CLASS_NAME, info.launchedActivity.info.name);
             final boolean isInstantApp = info.launchedActivity.info.applicationInfo.isInstantApp();
-            if (isInstantApp && info.launchedActivity.launchedFromPackage != null) {
+            if (info.launchedActivity.launchedFromPackage != null) {
                 builder.addTaggedData(APP_TRANSITION_CALLING_PACKAGE_NAME,
                         info.launchedActivity.launchedFromPackage);
             }
@@ -388,6 +469,24 @@
         }
     }
 
+    void logAppTransitionReportedDrawn(ActivityRecord r, boolean restoredFromBundle) {
+        final StackTransitionInfo info = mLastStackTransitionInfo.get(r.getStackId());
+        if (info == null) {
+            return;
+        }
+        final LogMaker builder = new LogMaker(APP_TRANSITION_REPORTED_DRAWN);
+        builder.setPackageName(r.packageName);
+        builder.addTaggedData(FIELD_CLASS_NAME, r.info.name);
+        builder.addTaggedData(APP_TRANSITION_REPORTED_DRAWN_MS,
+                SystemClock.uptimeMillis() - mLastTransitionStartTime);
+        builder.setType(restoredFromBundle
+                ? TYPE_TRANSITION_REPORTED_DRAWN_WITH_BUNDLE
+                : TYPE_TRANSITION_REPORTED_DRAWN_NO_BUNDLE);
+        builder.addTaggedData(APP_TRANSITION_PROCESS_RUNNING,
+                info.currentTransitionProcessRunning ? 1 : 0);
+        mMetricsLogger.write(builder);
+    }
+
     private int getTransitionType(StackTransitionInfo info) {
         if (info.currentTransitionProcessRunning) {
             if (info.startResult == START_SUCCESS) {
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index fe006fc..ee23d63 100644
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -47,11 +47,13 @@
 import static android.content.pm.ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE;
 import static android.content.pm.ActivityInfo.CONFIG_UI_MODE;
 import static android.content.pm.ActivityInfo.FLAG_ALWAYS_FOCUSABLE;
+import static android.content.pm.ActivityInfo.FLAG_SHOW_WHEN_LOCKED;
 import static android.content.pm.ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS;
 import static android.content.pm.ActivityInfo.FLAG_IMMERSIVE;
 import static android.content.pm.ActivityInfo.FLAG_MULTIPROCESS;
 import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS;
 import static android.content.pm.ActivityInfo.FLAG_STATE_NOT_NEEDED;
+import static android.content.pm.ActivityInfo.FLAG_TURN_SCREEN_ON;
 import static android.content.pm.ActivityInfo.LAUNCH_MULTIPLE;
 import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_INSTANCE;
 import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_TASK;
@@ -92,7 +94,6 @@
 import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_VISIBILITY;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.am.ActivityManagerService.IS_USER_BUILD;
 import static com.android.server.am.ActivityManagerService.TAKE_FULLSCREEN_SCREENSHOTS;
 import static com.android.server.am.ActivityStack.ActivityState.DESTROYED;
 import static com.android.server.am.ActivityStack.ActivityState.DESTROYING;
@@ -144,6 +145,7 @@
 import android.os.SystemClock;
 import android.os.Trace;
 import android.os.UserHandle;
+import android.os.storage.StorageManager;
 import android.service.voice.IVoiceInteractionSession;
 import android.util.EventLog;
 import android.util.Log;
@@ -162,7 +164,6 @@
 import com.android.server.AttributeCache;
 import com.android.server.AttributeCache.Entry;
 import com.android.server.am.ActivityStack.ActivityState;
-import com.android.server.am.ActivityStackSupervisor.ActivityContainer;
 import com.android.server.wm.AppWindowContainerController;
 import com.android.server.wm.AppWindowContainerListener;
 import com.android.server.wm.TaskWindowContainerController;
@@ -296,15 +297,13 @@
     boolean frozenBeforeDestroy;// has been frozen but not yet destroyed.
     boolean immersive;      // immersive mode (don't interrupt if possible)
     boolean forceNewConfig; // force re-create with new config next time
-    boolean supportsPictureInPictureWhilePausing;  // This flag is set by the system to indicate
-        // that the activity can enter picture in picture while pausing (ie. only when another
-        // task is brought to front or started)
+    boolean supportsEnterPipOnTaskSwitch;  // This flag is set by the system to indicate that the
+        // activity can enter picture in picture while pausing (only when switching to another task)
     PictureInPictureParams pictureInPictureArgs = new PictureInPictureParams.Builder().build();
         // The PiP params used when deferring the entering of picture-in-picture.
     int launchCount;        // count of launches since last state
     long lastLaunchTime;    // time of last launch of this activity
     ComponentName requestedVrComponent; // the requested component for handling VR mode.
-    ArrayList<ActivityContainer> mChildContainers = new ArrayList<>();
 
     String stringName;      // for caching of toString().
 
@@ -318,7 +317,6 @@
     boolean mTaskOverlay = false; // Task is always on-top of other activities in the task.
 
     boolean mUpdateTaskThumbnailWhenHidden;
-    ActivityContainer mInitialActivityContainer;
 
     TaskDescription taskDescription; // the recents information for this activity
     boolean mLaunchTaskBehind; // this activity is actively being launched with
@@ -347,6 +345,9 @@
     // handle calculating override configuration from the bounds.
     private final Rect mBounds = new Rect();
 
+    private boolean mShowWhenLocked;
+    private boolean mTurnScreenOn;
+
     /**
      * Temp configs used in {@link #ensureActivityConfigurationLocked(int, boolean)}
      */
@@ -426,11 +427,11 @@
                                 pw.print("\"");
                         pw.print(" primaryColor=");
                         pw.println(Integer.toHexString(taskDescription.getPrimaryColor()));
-                        pw.print(prefix + " backgroundColor=");
+                        pw.print(prefix); pw.print("  backgroundColor=");
                         pw.println(Integer.toHexString(taskDescription.getBackgroundColor()));
-                        pw.print(prefix + " statusBarColor=");
+                        pw.print(prefix); pw.print("  statusBarColor=");
                         pw.println(Integer.toHexString(taskDescription.getStatusBarColor()));
-                        pw.print(prefix + " navigationBarColor=");
+                        pw.print(prefix); pw.print("  navigationBarColor=");
                         pw.println(Integer.toHexString(taskDescription.getNavigationBarColor()));
             }
             if (iconFilename == null && taskDescription.getIcon() != null) {
@@ -542,8 +543,8 @@
                     + " mLastReportedPictureInPictureMode=" + mLastReportedPictureInPictureMode);
             if (info.supportsPictureInPicture()) {
                 pw.println(prefix + "supportsPictureInPicture=" + info.supportsPictureInPicture());
-                pw.println(prefix + "supportsPictureInPictureWhilePausing: "
-                        + supportsPictureInPictureWhilePausing);
+                pw.println(prefix + "supportsEnterPipOnTaskSwitch: "
+                        + supportsEnterPipOnTaskSwitch);
             }
             if (info.maxAspectRatio != 0) {
                 pw.println(prefix + "maxAspectRatio=" + info.maxAspectRatio);
@@ -657,14 +658,14 @@
         }
     }
 
-    void updatePictureInPictureMode(Rect targetStackBounds) {
+    void updatePictureInPictureMode(Rect targetStackBounds, boolean forceUpdate) {
         if (task == null || task.getStack() == null || app == null || app.thread == null) {
             return;
         }
 
         final boolean inPictureInPictureMode = (task.getStackId() == PINNED_STACK_ID) &&
                 (targetStackBounds != null);
-        if (inPictureInPictureMode != mLastReportedPictureInPictureMode) {
+        if (inPictureInPictureMode != mLastReportedPictureInPictureMode || forceUpdate) {
             // Picture-in-picture mode changes also trigger a multi-window mode change as well, so
             // update that here in order
             mLastReportedPictureInPictureMode = inPictureInPictureMode;
@@ -679,8 +680,7 @@
     private void schedulePictureInPictureModeChanged(Configuration overrideConfig) {
         try {
             app.thread.schedulePictureInPictureModeChanged(appToken,
-                    mLastReportedPictureInPictureMode,
-                    overrideConfig);
+                    mLastReportedPictureInPictureMode, overrideConfig);
         } catch (Exception e) {
             // If process died, no one cares.
         }
@@ -793,8 +793,8 @@
             ActivityInfo aInfo, Configuration _configuration,
             ActivityRecord _resultTo, String _resultWho, int _reqCode,
             boolean _componentSpecified, boolean _rootVoiceInteraction,
-            ActivityStackSupervisor supervisor,
-            ActivityContainer container, ActivityOptions options, ActivityRecord sourceRecord) {
+            ActivityStackSupervisor supervisor, ActivityOptions options,
+            ActivityRecord sourceRecord) {
         service = _service;
         appToken = new Token(this);
         info = aInfo;
@@ -825,7 +825,6 @@
         idle = false;
         hasBeenLaunched = false;
         mStackSupervisor = supervisor;
-        mInitialActivityContainer = container;
 
         mRotationAnimationHint = aInfo.rotationAnimation;
 
@@ -897,7 +896,15 @@
 
         Entry ent = AttributeCache.instance().get(packageName,
                 realTheme, com.android.internal.R.styleable.Window, userId);
-        fullscreen = ent != null && !ActivityInfo.isTranslucentOrFloating(ent.array);
+        final boolean translucent = ent != null && (ent.array.getBoolean(
+                com.android.internal.R.styleable.Window_windowIsTranslucent, false)
+                || (!ent.array.hasValue(
+                        com.android.internal.R.styleable.Window_windowIsTranslucent)
+                        && ent.array.getBoolean(
+                                com.android.internal.R.styleable.Window_windowSwipeToDismiss,
+                                        false)));
+        fullscreen = ent != null && !ent.array.getBoolean(
+                com.android.internal.R.styleable.Window_windowIsFloating, false) && !translucent;
         noDisplay = ent != null && ent.array.getBoolean(
                 com.android.internal.R.styleable.Window_windowNoDisplay, false);
 
@@ -907,6 +914,9 @@
 
         requestedVrComponent = (aInfo.requestedVrComponent == null) ?
                 null : ComponentName.unflattenFromString(aInfo.requestedVrComponent);
+
+        mShowWhenLocked = (aInfo.flags & FLAG_SHOW_WHEN_LOCKED) != 0;
+        mTurnScreenOn = (aInfo.flags & FLAG_TURN_SCREEN_ON) != 0;
     }
 
     AppWindowContainerController getWindowContainerController() {
@@ -943,8 +953,6 @@
         // the user leaves that mode.
         mLastReportedMultiWindowMode = !task.mFullscreen;
         mLastReportedPictureInPictureMode = (task.getStackId() == PINNED_STACK_ID);
-
-        onOverrideConfigurationSent();
     }
 
     void removeWindowContainer() {
@@ -1175,18 +1183,24 @@
      *         can be put a secondary screen.
      */
     boolean canBeLaunchedOnDisplay(int displayId) {
+        final TaskRecord task = getTask();
+
+        // The resizeability of an Activity's parent task takes precendence over the ActivityInfo.
+        // This allows for a non resizable activity to be launched into a resizeable task.
+        final boolean resizeable =
+                task != null ? task.isResizeable() : supportsResizeableMultiWindow();
+
         return service.mStackSupervisor.canPlaceEntityOnDisplay(displayId,
-                supportsResizeableMultiWindow());
+                resizeable, launchedFromPid, launchedFromUid, info);
     }
 
     /**
      * @param beforeStopping Whether this check is for an auto-enter-pip operation, that is to say
      *         the activity has requested to enter PiP when it would otherwise be stopped.
      *
-     * @return whether this activity is currently allowed to enter PIP, throwing an exception if
-     *         the activity is not currently visible and {@param noThrow} is not set.
+     * @return whether this activity is currently allowed to enter PIP.
      */
-    boolean checkEnterPictureInPictureState(String caller, boolean noThrow, boolean beforeStopping) {
+    boolean checkEnterPictureInPictureState(String caller, boolean beforeStopping) {
         if (!supportsPictureInPicture()) {
             return false;
         }
@@ -1218,29 +1232,23 @@
                 // When visible, allow entering PiP if the app is not locked.  If it is over the
                 // keyguard, then we will prompt to unlock in the caller before entering PiP.
                 return !isCurrentAppLocked &&
-                        (supportsPictureInPictureWhilePausing || !beforeStopping);
+                        (supportsEnterPipOnTaskSwitch || !beforeStopping);
             case PAUSING:
             case PAUSED:
                 // When pausing, then only allow enter PiP as in the resume state, and in addition,
                 // require that there is not an existing PiP activity and that the current system
                 // state supports entering PiP
                 return isNotLockedOrOnKeyguard && !hasPinnedStack
-                        && supportsPictureInPictureWhilePausing;
+                        && supportsEnterPipOnTaskSwitch;
             case STOPPING:
                 // When stopping in a valid state, then only allow enter PiP as in the pause state.
                 // Otherwise, fall through to throw an exception if the caller is trying to enter
                 // PiP in an invalid stopping state.
-                if (supportsPictureInPictureWhilePausing) {
+                if (supportsEnterPipOnTaskSwitch) {
                     return isNotLockedOrOnKeyguard && !hasPinnedStack;
                 }
             default:
-                if (noThrow) {
-                    return false;
-                } else {
-                    throw new IllegalStateException(caller
-                            + ": Current activity is not visible (state=" + state.name() + ") "
-                            + "r=" + this);
-                }
+                return false;
         }
     }
 
@@ -1261,13 +1269,6 @@
         return (info.flags & FLAG_ALWAYS_FOCUSABLE) != 0;
     }
 
-    /**
-     * @return true if the activity contains windows that have
-     *         {@link LayoutParams#FLAG_SHOW_WHEN_LOCKED} set
-     */
-    boolean hasShowWhenLockedWindows() {
-        return service.mWindowManager.containsShowWhenLockedWindow(appToken);
-    }
 
     /**
      * @return true if the activity contains windows that have
@@ -1278,20 +1279,16 @@
     }
 
     void makeFinishingLocked() {
-        if (!finishing) {
-            final ActivityStack stack = getStack();
-            if (stack != null && this == stack.getVisibleBehindActivity()) {
-                // A finishing activity should not remain as visible in the background
-                mStackSupervisor.requestVisibleBehindLocked(this, false);
-            }
-            finishing = true;
-            if (stopped) {
-                clearOptionsLocked();
-            }
+        if (finishing) {
+            return;
+        }
+        finishing = true;
+        if (stopped) {
+            clearOptionsLocked();
+        }
 
-            if (service != null) {
-                service.mTaskChangeNotificationController.notifyTaskStackChanged();
-            }
+        if (service != null) {
+            service.mTaskChangeNotificationController.notifyTaskStackChanged();
         }
     }
 
@@ -1349,10 +1346,8 @@
         final ReferrerIntent rintent = new ReferrerIntent(intent, referrer);
         boolean unsent = true;
         final ActivityStack stack = getStack();
-        final boolean isTopActivityInStack =
-                stack != null && stack.topRunningActivityLocked() == this;
-        final boolean isTopActivityWhileSleeping =
-                service.isSleepingLocked() && isTopActivityInStack;
+        final boolean isTopActivityWhileSleeping = isTopRunningActivity()
+                && (stack != null ? stack.shouldSleepActivities() : service.isSleepingLocked());
 
         // We want to immediately deliver the intent to the activity if:
         // - It is currently resumed or paused. i.e. it is currently visible to the user and we want
@@ -1590,7 +1585,7 @@
 
     void setVisibility(boolean visible) {
         mWindowContainerController.setVisibility(visible, mDeferHidingClient);
-        mStackSupervisor.mActivityMetricsLogger.notifyVisibilityChanged(this, visible);
+        mStackSupervisor.mActivityMetricsLogger.notifyVisibilityChanged(this);
     }
 
     // TODO: Look into merging with #setVisibility()
@@ -1602,11 +1597,6 @@
             mUpdateTaskThumbnailWhenHidden = false;
         }
         setVisibility(visible);
-        final ArrayList<ActivityContainer> containers = mChildContainers;
-        for (int containerNdx = containers.size() - 1; containerNdx >= 0; --containerNdx) {
-            final ActivityContainer container = containers.get(containerNdx);
-            container.setVisible(visible);
-        }
         mStackSupervisor.mAppVisibilitiesChangedSinceLastPause = true;
     }
 
@@ -1615,7 +1605,12 @@
     }
 
     void notifyUnknownVisibilityLaunched() {
-        mWindowContainerController.notifyUnknownVisibilityLaunched();
+
+        // No display activities never add a window, so there is no point in waiting them for
+        // relayout.
+        if (!noDisplay) {
+            mWindowContainerController.notifyUnknownVisibilityLaunched();
+        }
     }
 
     /**
@@ -1624,20 +1619,12 @@
      *
      * @see {@link ActivityStack#checkKeyguardVisibility}
      */
-    boolean shouldBeVisibleIgnoringKeyguard(boolean behindTranslucentActivity,
-            boolean stackVisibleBehind, ActivityRecord visibleBehind,
-            boolean behindFullscreenActivity) {
+    boolean shouldBeVisibleIgnoringKeyguard(boolean behindFullscreenActivity) {
         if (!okToShowLocked()) {
             return false;
         }
 
-        // mLaunchingBehind: Activities launching behind are at the back of the task stack
-        // but must be drawn initially for the animation as though they were visible.
-        final boolean activityVisibleBehind =
-                (behindTranslucentActivity || stackVisibleBehind) && visibleBehind == this;
-
-        boolean isVisible =
-                !behindFullscreenActivity || mLaunchTaskBehind || activityVisibleBehind;
+        boolean isVisible = !behindFullscreenActivity || mLaunchTaskBehind;
 
         if (service.mSupportsLeanbackOnly && isVisible && isRecentsActivity()) {
             // On devices that support leanback only (Android TV), Recents activity can only be
@@ -1707,7 +1694,7 @@
      */
     void completeResumeLocked() {
         final boolean wasVisible = visible;
-        visible = true;
+        setVisible(true);
         if (!wasVisible) {
             // Visibility has changed, so take a note of it so we call the TaskStackChangedListener
             mStackSupervisor.mAppVisibilitiesChangedSinceLastPause = true;
@@ -1749,11 +1736,14 @@
 
         returningOptions = null;
 
-        if (stack.getVisibleBehindActivity() == this) {
-            // When resuming an activity, require it to call requestVisibleBehind() again.
-            stack.setVisibleBehindActivity(null /* ActivityRecord */);
+        if (canTurnScreenOn()) {
+            mStackSupervisor.wakeUp("turnScreenOnFlag");
+        } else {
+            // If the screen is going to turn on because the caller explicitly requested it and
+            // the keyguard is not showing don't attempt to sleep. Otherwise the Activity will
+            // pause and then resume again later, which will result in a double life-cycle event.
+            stack.checkReadyForSleep();
         }
-        mStackSupervisor.checkReadyForSleepLocked();
     }
 
     final void activityStoppedLocked(Bundle newIcicle, PersistableBundle newPersistentState,
@@ -1786,9 +1776,6 @@
 
             mWindowContainerController.notifyAppStopped();
 
-            if (stack.getVisibleBehindActivity() == this) {
-                mStackSupervisor.requestVisibleBehindLocked(this, false /* visible */);
-            }
             if (finishing) {
                 clearOptionsLocked();
             } else {
@@ -1803,7 +1790,7 @@
     }
 
     void startLaunchTickingLocked() {
-        if (IS_USER_BUILD) {
+        if (Build.IS_USER) {
             return;
         }
         if (launchTickTime == 0) {
@@ -1859,7 +1846,7 @@
         }
     }
 
-    public void reportFullyDrawnLocked() {
+    public void reportFullyDrawnLocked(boolean restoredFromBundle) {
         final long curTime = SystemClock.uptimeMillis();
         if (displayStartTime != 0) {
             reportLaunchTimeLocked(curTime);
@@ -1892,6 +1879,8 @@
             }
             stack.mFullyDrawnStartTime = 0;
         }
+        mStackSupervisor.mActivityMetricsLogger.logAppTransitionReportedDrawn(this,
+                restoredFromBundle);
         fullyDrawnStartTime = 0;
     }
 
@@ -2035,9 +2024,16 @@
 
     /** Checks whether the activity should be shown for current user. */
     public boolean okToShowLocked() {
+        // We cannot show activities when the device is locked and the application is not
+        // encryption aware.
+        if (!StorageManager.isUserKeyUnlocked(userId)
+                && !info.applicationInfo.isEncryptionAware()) {
+            return false;
+        }
+
         return (info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0
                 || (mStackSupervisor.isCurrentProfileLocked(userId)
-                && !service.mUserController.isUserStoppingOrShuttingDownLocked(userId));
+                && service.mUserController.isUserRunningLocked(userId, 0 /* flags */));
     }
 
     /**
@@ -2195,11 +2191,6 @@
     }
 
     void setRequestedOrientation(int requestedOrientation) {
-        if (ActivityInfo.isFixedOrientation(requestedOrientation) && !fullscreen
-                && appInfo.targetSdkVersion > O) {
-            throw new IllegalStateException("Only fullscreen activities can request orientation");
-        }
-
         final int displayId = getDisplayId();
         final Configuration displayConfig =
                 mStackSupervisor.getDisplayOverrideConfiguration(displayId);
@@ -2234,15 +2225,12 @@
      * a new merged configuration is sent to the client for this activity.
      */
     void setLastReportedConfiguration(@NonNull MergedConfiguration config) {
-        mLastReportedConfiguration.setTo(config);
+        setLastReportedConfiguration(config.getGlobalConfiguration(),
+            config.getOverrideConfiguration());
     }
 
-    /** Call when override config was sent to the Window Manager to update internal records. */
-    // TODO(b/36505427): Why do we set last reported based on sending the config to WM? Seems like
-    // we should only set this when we actually report to the activity which is what the method
-    // setLastReportedMergedOverrideConfiguration() does. Investigate if this is really needed.
-    void onOverrideConfigurationSent() {
-        mLastReportedConfiguration.setOverrideConfiguration(getMergedOverrideConfiguration());
+    void setLastReportedConfiguration(Configuration global, Configuration override) {
+        mLastReportedConfiguration.setConfiguration(global, override);
     }
 
     @Override
@@ -2256,9 +2244,6 @@
             return;
         }
         mWindowContainerController.onOverrideConfigurationChanged(newConfig, mBounds);
-        // TODO(b/36505427): Can we consolidate the call points of onOverrideConfigurationSent()
-        // to just use this method instead?
-        onOverrideConfigurationSent();
     }
 
     // TODO(b/36505427): Consider moving this method and similar ones to ConfigurationContainer.
@@ -2266,26 +2251,6 @@
         mTmpConfig.unset();
         computeBounds(mTmpBounds);
         if (mTmpBounds.equals(mBounds)) {
-            final ActivityStack stack = getStack();
-            if (!mBounds.isEmpty() || task == null || stack == null || !task.mFullscreen) {
-                // We don't want to influence the override configuration here if our task is in
-                // multi-window mode or there is a bounds specified to calculate the override
-                // config. In both of this cases the app should be compatible with whatever the
-                // current configuration is or will be.
-                return;
-            }
-
-            // Currently limited to the top activity for now to avoid situations where non-top
-            // visible activity and top might have conflicting requests putting the non-top activity
-            // windows in an odd state.
-            final ActivityRecord top = mStackSupervisor.topRunningActivityLocked();
-            final Configuration parentConfig = getParent().getConfiguration();
-            if (top != this || isConfigurationCompatible(parentConfig)) {
-                onOverrideConfigurationChanged(mTmpConfig);
-            } else if (isConfigurationCompatible(
-                    mLastReportedConfiguration.getMergedConfiguration())) {
-                onOverrideConfigurationChanged(mLastReportedConfiguration.getMergedConfiguration());
-            }
             return;
         }
 
@@ -2445,8 +2410,8 @@
 
         // Update last reported values.
         final Configuration newMergedOverrideConfig = getMergedOverrideConfiguration();
-        mLastReportedConfiguration.setConfiguration(service.getGlobalConfiguration(),
-                newMergedOverrideConfig);
+
+        setLastReportedConfiguration(service.getGlobalConfiguration(), newMergedOverrideConfig);
 
         if (changes == 0 && !forceNewConfig) {
             if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
@@ -2627,8 +2592,6 @@
 
         startFreezingScreenLocked(app, 0);
 
-        mStackSupervisor.removeChildActivityContainers(this);
-
         try {
             if (DEBUG_SWITCH || DEBUG_STATES) Slog.i(TAG_SWITCH,
                     "Moving to " + (andResume ? "RESUMED" : "PAUSED") + " Relaunching " + this
@@ -2807,7 +2770,7 @@
                 0 /* launchedFromPid */, launchedFromUid, launchedFromPackage, intent, resolvedType,
                 aInfo, service.getConfiguration(), null /* resultTo */, null /* resultWho */,
                 0 /* reqCode */, componentSpecified, false /* rootVoiceInteraction */,
-                stackSupervisor, null /* container */, null /* options */, null /* sourceRecord */);
+                stackSupervisor, null /* options */, null /* sourceRecord */);
 
         r.persistentState = persistentState;
         r.taskDescription = taskDescription;
@@ -2834,6 +2797,44 @@
         return info.applicationInfo.uid;
     }
 
+    void setShowWhenLocked(boolean showWhenLocked) {
+        mShowWhenLocked = showWhenLocked;
+    }
+
+    /**
+     * @return true if the activity contains windows that have
+     *         {@link LayoutParams#FLAG_SHOW_WHEN_LOCKED} set or if the activity has set
+     *         {@link #mShowWhenLocked}.
+     */
+    boolean canShowWhenLocked() {
+        return mShowWhenLocked || service.mWindowManager.containsShowWhenLockedWindow(appToken);
+    }
+
+    void setTurnScreenOn(boolean turnScreenOn) {
+        mTurnScreenOn = turnScreenOn;
+    }
+
+    /**
+     * Determines whether this ActivityRecord can turn the screen on. It checks whether the flag
+     * {@link #mTurnScreenOn} is set and checks whether the ActivityRecord should be visible
+     * depending on Keyguard state
+     *
+     * @return true if the screen can be turned on, false otherwise.
+     */
+    boolean canTurnScreenOn() {
+        final ActivityStack stack = getStack();
+        return mTurnScreenOn && stack != null &&
+                stack.checkKeyguardVisibility(this, true /* shouldBeVisible */, true /* isTop */);
+    }
+
+    boolean getTurnScreenOnFlag() {
+        return mTurnScreenOn;
+    }
+
+    boolean isTopRunningActivity() {
+        return mStackSupervisor.topRunningActivityLocked() == this;
+    }
+
     @Override
     public String toString() {
         if (stringName != null) {
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 3620ddb..1998605 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -30,6 +30,7 @@
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.Display.FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD;
 
+import static android.view.Display.INVALID_DISPLAY;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ADD_REMOVE;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_APP;
@@ -64,6 +65,7 @@
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
 import static com.android.server.am.ActivityRecord.APPLICATION_ACTIVITY_TYPE;
+import static com.android.server.am.ActivityStack.ActivityState.PAUSED;
 import static com.android.server.am.ActivityRecord.ASSISTANT_ACTIVITY_TYPE;
 import static com.android.server.am.ActivityRecord.HOME_ACTIVITY_TYPE;
 import static com.android.server.am.ActivityStack.ActivityState.STOPPED;
@@ -124,7 +126,6 @@
 import com.android.internal.os.BatteryStatsImpl;
 import com.android.server.Watchdog;
 import com.android.server.am.ActivityManagerService.ItemMatcher;
-import com.android.server.am.ActivityStackSupervisor.ActivityContainer;
 import com.android.server.wm.StackWindowController;
 import com.android.server.wm.StackWindowListener;
 import com.android.server.wm.WindowManagerService;
@@ -205,7 +206,7 @@
 
     @Override
     protected ConfigurationContainer getParent() {
-        return mActivityContainer.mActivityDisplay;
+        return getDisplay();
     }
 
     @Override
@@ -230,9 +231,6 @@
     static final int STACK_INVISIBLE = 0;
     // Stack is considered visible
     static final int STACK_VISIBLE = 1;
-    // Stack is considered visible, but only becuase it has activity that is visible behind other
-    // activities and there is a specific combination of stacks.
-    static final int STACK_VISIBLE_ACTIVITY_BEHIND = 2;
 
     @VisibleForTesting
     /* The various modes for the method {@link #removeTask}. */
@@ -339,8 +337,8 @@
     int mCurrentUser;
 
     final int mStackId;
-    final ActivityContainer mActivityContainer;
     /** The other stacks, in order, on the attached display. Updated at attach/detach time. */
+    // TODO: This list doesn't belong here...
     ArrayList<ActivityStack> mStacks;
     /** The attached Display's unique identifier, or -1 if detached */
     int mDisplayId;
@@ -365,8 +363,6 @@
     static final int STOP_TIMEOUT_MSG = ActivityManagerService.FIRST_ACTIVITY_STACK_MSG + 4;
     static final int DESTROY_ACTIVITIES_MSG = ActivityManagerService.FIRST_ACTIVITY_STACK_MSG + 5;
     static final int TRANSLUCENT_TIMEOUT_MSG = ActivityManagerService.FIRST_ACTIVITY_STACK_MSG + 6;
-    static final int RELEASE_BACKGROUND_RESOURCES_TIMEOUT_MSG =
-            ActivityManagerService.FIRST_ACTIVITY_STACK_MSG + 7;
 
     private static class ScheduleDestroyArgs {
         final ProcessRecord mOwner;
@@ -440,15 +436,6 @@
                         notifyActivityDrawnLocked(null);
                     }
                 } break;
-                case RELEASE_BACKGROUND_RESOURCES_TIMEOUT_MSG: {
-                    synchronized (mService) {
-                        final ActivityRecord r = getVisibleBehindActivity();
-                        Slog.e(TAG, "Timeout waiting for cancelVisibleBehind player=" + r);
-                        if (r != null) {
-                            mService.killAppAtUsersRequest(r.app, null);
-                        }
-                    }
-                } break;
             }
         }
     }
@@ -461,24 +448,21 @@
         return count;
     }
 
-    ActivityStack(ActivityStackSupervisor.ActivityContainer activityContainer,
-            RecentTasks recentTasks, boolean onTop) {
-        mActivityContainer = activityContainer;
-        mStackSupervisor = activityContainer.getOuter();
-        mService = mStackSupervisor.mService;
+    ActivityStack(ActivityStackSupervisor.ActivityDisplay display, int stackId,
+            ActivityStackSupervisor supervisor, RecentTasks recentTasks, boolean onTop) {
+        mStackSupervisor = supervisor;
+        mService = supervisor.mService;
         mHandler = new ActivityStackHandler(mService.mHandler.getLooper());
         mWindowManager = mService.mWindowManager;
-        mStackId = activityContainer.mStackId;
+        mStackId = stackId;
         mCurrentUser = mService.mUserController.getCurrentUserIdLocked();
         mRecentTasks = recentTasks;
         mTaskPositioner = mStackId == FREEFORM_WORKSPACE_STACK_ID
                 ? new LaunchingTaskPositioner() : null;
-        final ActivityStackSupervisor.ActivityDisplay display = mActivityContainer.mActivityDisplay;
         mTmpRect2.setEmpty();
         mWindowContainerController = createStackWindowController(display.mDisplayId, onTop,
                 mTmpRect2);
-        activityContainer.mStack = this;
-        mStackSupervisor.mActivityContainers.put(mStackId, activityContainer);
+        mStackSupervisor.mStacks.put(mStackId, this);
         postAddToDisplay(display, mTmpRect2.isEmpty() ? null : mTmpRect2, onTop);
     }
 
@@ -535,7 +519,11 @@
      * either destroyed completely or re-parented.
      */
     private void removeFromDisplay() {
-        mDisplayId = Display.INVALID_DISPLAY;
+        final ActivityStackSupervisor.ActivityDisplay display = getDisplay();
+        if (display != null) {
+            display.detachStack(this);
+        }
+        mDisplayId = INVALID_DISPLAY;
         mStacks = null;
         if (mTaskPositioner != null) {
             mTaskPositioner.reset();
@@ -551,14 +539,18 @@
     /** Removes the stack completely. Also calls WindowManager to do the same on its side. */
     void remove() {
         removeFromDisplay();
-        mStackSupervisor.deleteActivityContainerRecord(mStackId);
+        mStackSupervisor.mStacks.remove(mStackId);
         mWindowContainerController.removeContainer();
         mWindowContainerController = null;
         onParentChanged();
     }
 
+    ActivityStackSupervisor.ActivityDisplay getDisplay() {
+        return mStackSupervisor.getActivityDisplay(mDisplayId);
+    }
+
     void getDisplaySize(Point out) {
-        mActivityContainer.mActivityDisplay.mDisplay.getSize(out);
+        getDisplay().mDisplay.getSize(out);
     }
 
     /**
@@ -850,8 +842,7 @@
     }
 
     final boolean isOnHomeDisplay() {
-        return isAttached() &&
-                mActivityContainer.mActivityDisplay.mDisplayId == DEFAULT_DISPLAY;
+        return isAttached() && mDisplayId == DEFAULT_DISPLAY;
     }
 
     void moveToFront(String reason) {
@@ -963,7 +954,9 @@
                 if (DEBUG_TASKS) Slog.d(TAG_TASKS, "Skipping " + task + ": different user");
                 continue;
             }
-            final ActivityRecord r = task.getTopActivity();
+
+            // Overlays should not be considered as the task's logical top activity.
+            final ActivityRecord r = task.getTopActivity(false /* includeOverlays */);
             if (r == null || r.finishing || r.userId != userId ||
                     r.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE) {
                 if (DEBUG_TASKS) Slog.d(TAG_TASKS, "Skipping " + task + ": mismatch root " + r);
@@ -1180,10 +1173,26 @@
         }
     }
 
+    void checkReadyForSleep() {
+        if (shouldSleepActivities() && goToSleepIfPossible(false /* shuttingDown */)) {
+            mStackSupervisor.checkReadyForSleepLocked(true /* allowDelay */);
+        }
+    }
+
     /**
-     * @return true if something must be done before going to sleep.
+     * Tries to put the activities in the stack to sleep.
+     *
+     * If the stack is not in a state where its activities can be put to sleep, this function will
+     * start any necessary actions to move the stack into such a state. It is expected that this
+     * function get called again when those actions complete.
+     *
+     * @param shuttingDown true when the called because the device is shutting down.
+     * @return true if the stack finished going to sleep, false if the stack only started the
+     * process of going to sleep (checkReadyForSleep will be called when that process finishes).
      */
-    boolean checkReadyForSleepLocked() {
+    boolean goToSleepIfPossible(boolean shuttingDown) {
+        boolean shouldSleep = true;
+
         if (mResumedActivity != null) {
             // Still have something resumed; can't sleep until it is paused.
             if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Sleep needs to pause " + mResumedActivity);
@@ -1193,32 +1202,44 @@
             // If we are in the middle of resuming the top activity in
             // {@link #resumeTopActivityUncheckedLocked}, mResumedActivity will be set but not
             // resumed yet. We must not proceed pausing the activity here. This method will be
-            // called again if necessary as part of
+            // called again if necessary as part of {@link #checkReadyForSleep} or
             // {@link ActivityStackSupervisor#checkReadyForSleepLocked}.
             if (mStackSupervisor.inResumeTopActivity) {
                 if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "In the middle of resuming top activity "
                         + mResumedActivity);
-                return true;
+            } else {
+                startPausingLocked(false, true, null, false);
             }
-
-            startPausingLocked(false, true, null, false);
-            return true;
-        }
-        if (mPausingActivity != null) {
+            shouldSleep = false ;
+        } else if (mPausingActivity != null) {
             // Still waiting for something to pause; can't sleep yet.
             if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Sleep still waiting to pause " + mPausingActivity);
-            return true;
+            shouldSleep = false;
         }
 
-        if (hasVisibleBehindActivity()) {
-            // Stop visible behind activity before going to sleep.
-            final ActivityRecord r = getVisibleBehindActivity();
-            mStackSupervisor.mStoppingActivities.add(r);
-            if (DEBUG_STATES) Slog.v(TAG_STATES, "Sleep still waiting to stop visible behind " + r);
-            return true;
+        if (!shuttingDown) {
+            if (containsActivityFromStack(mStackSupervisor.mStoppingActivities)) {
+                // Still need to tell some activities to stop; can't sleep yet.
+                if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Sleep still need to stop "
+                        + mStackSupervisor.mStoppingActivities.size() + " activities");
+
+                mStackSupervisor.scheduleIdleLocked();
+                shouldSleep = false;
+            }
+
+            if (containsActivityFromStack(mStackSupervisor.mGoingToSleepActivities)) {
+                // Still need to tell some activities to sleep; can't sleep yet.
+                if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Sleep still need to sleep "
+                        + mStackSupervisor.mGoingToSleepActivities.size() + " activities");
+                shouldSleep = false;
+            }
         }
 
-        return false;
+        if (shouldSleep) {
+            goToSleep();
+        }
+
+        return shouldSleep;
     }
 
     void goToSleep() {
@@ -1238,6 +1259,15 @@
         }
     }
 
+    private boolean containsActivityFromStack(List<ActivityRecord> rs) {
+        for (ActivityRecord r : rs) {
+            if (r.getStack() == this) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * Schedule a pause timeout in case the app doesn't respond. We don't give it much time because
      * this directly impacts the responsiveness seen by the user.
@@ -1270,7 +1300,7 @@
         if (mPausingActivity != null) {
             Slog.wtf(TAG, "Going to pause when pause is already pending for " + mPausingActivity
                     + " state=" + mPausingActivity.state);
-            if (!mService.isSleepingLocked()) {
+            if (!shouldSleepActivities()) {
                 // Avoid recursion among check for sleep and complete pause during sleeping.
                 // Because activity will be paused immediately after resume, just let pause
                 // be completed by the order of activity paused from clients.
@@ -1287,12 +1317,6 @@
             return false;
         }
 
-        if (mActivityContainer.mParentActivity == null) {
-            // Top level stack, not a child. Look for child stacks.
-            mStackSupervisor.pauseChildStacks(prev, userLeaving, uiSleeping, resuming,
-                    pauseImmediately);
-        }
-
         if (DEBUG_STATES) Slog.v(TAG_STATES, "Moving to PAUSING: " + prev);
         else if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Start pausing: " + prev);
         mResumedActivity = null;
@@ -1436,8 +1460,7 @@
                     // We can't clobber it, because the stop confirmation will not be handled.
                     // We don't need to schedule another stop, we only need to let it happen.
                     prev.state = STOPPING;
-                } else if ((!prev.visible && !hasVisibleBehindActivity())
-                        || mService.isSleepingOrShuttingDownLocked()) {
+                } else if (!prev.visible || shouldSleepOrShutDownActivities()) {
                     // Clear out any deferred client hide we might currently have.
                     prev.setDeferHidingClient(false);
                     // If we were visible then resumeTopActivities will release resources before
@@ -1459,10 +1482,10 @@
 
         if (resumeNext) {
             final ActivityStack topStack = mStackSupervisor.getFocusedStack();
-            if (!mService.isSleepingOrShuttingDownLocked()) {
+            if (!topStack.shouldSleepOrShutDownActivities()) {
                 mStackSupervisor.resumeFocusedStackTopActivityLocked(topStack, prev, null);
             } else {
-                mStackSupervisor.checkReadyForSleepLocked();
+                checkReadyForSleep();
                 ActivityRecord top = topStack.topRunningActivityLocked();
                 if (top == null || (prev != null && top != prev)) {
                     // If there are no more activities available to run, do resume anyway to start
@@ -1528,7 +1551,7 @@
                 mStackSupervisor.scheduleIdleTimeoutLocked(r);
             }
         } else {
-            mStackSupervisor.checkReadyForSleepLocked();
+            checkReadyForSleep();
         }
     }
 
@@ -1642,8 +1665,8 @@
     }
 
     /**
-     * Returns what the stack visibility should be: {@link #STACK_INVISIBLE}, {@link #STACK_VISIBLE}
-     * or {@link #STACK_VISIBLE_ACTIVITY_BEHIND}.
+     * Returns what the stack visibility should be: {@link #STACK_INVISIBLE} or
+     * {@link #STACK_VISIBLE}.
      *
      * @param starting The currently starting activity or null if there is none.
      */
@@ -1668,14 +1691,6 @@
         final ActivityStack topStack = getTopStackOnDisplay();
         final int topStackId = topStack.mStackId;
 
-        if (StackId.isBackdropToTranslucentActivity(mStackId)
-                && hasVisibleBehindActivity() && StackId.isHomeOrRecentsStack(topStackId)
-                && (topStack.topActivity() == null || !topStack.topActivity().fullscreen)) {
-            // The fullscreen or assistant stack should be visible if it has a visible behind
-            // activity behind the home or recents stack that is translucent.
-            return STACK_VISIBLE_ACTIVITY_BEHIND;
-        }
-
         if (mStackId == DOCKED_STACK_ID) {
             // If the assistant stack is focused and translucent, then the docked stack is always
             // visible
@@ -1800,12 +1815,10 @@
             boolean aboveTop = top != null;
             final int stackVisibility = shouldBeVisible(starting);
             final boolean stackInvisible = stackVisibility != STACK_VISIBLE;
-            final boolean stackVisibleBehind = stackVisibility == STACK_VISIBLE_ACTIVITY_BEHIND;
             boolean behindFullscreenActivity = stackInvisible;
             boolean resumeNextActivity = mStackSupervisor.isFocusedStack(this)
                     && (isInStackLocked(starting) == null);
             boolean behindTranslucentActivity = false;
-            final ActivityRecord visibleBehind = getVisibleBehindActivity();
             for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
                 final TaskRecord task = mTaskHistory.get(taskNdx);
                 final ArrayList<ActivityRecord> activities = task.mActivities;
@@ -1830,7 +1843,6 @@
 
                     // Check whether activity should be visible without Keyguard influence
                     final boolean visibleIgnoringKeyguard = r.shouldBeVisibleIgnoringKeyguard(
-                            behindTranslucentActivity, stackVisibleBehind, visibleBehind,
                             behindFullscreenActivity);
                     r.visibleIgnoringKeyguard = visibleIgnoringKeyguard;
 
@@ -1882,7 +1894,7 @@
                                 + stackInvisible + " behindFullscreenActivity="
                                 + behindFullscreenActivity + " mLaunchTaskBehind="
                                 + r.mLaunchTaskBehind);
-                        makeInvisible(r, visibleBehind);
+                        makeInvisible(r);
                     }
                 }
                 if (mStackId == FREEFORM_WORKSPACE_STACK_ID) {
@@ -1969,9 +1981,10 @@
     boolean checkKeyguardVisibility(ActivityRecord r, boolean shouldBeVisible,
             boolean isTop) {
         final boolean isInPinnedStack = r.getStack().getStackId() == PINNED_STACK_ID;
-        final boolean keyguardShowing = mStackSupervisor.mKeyguardController.isKeyguardShowing();
+        final boolean keyguardShowing = mStackSupervisor.mKeyguardController.isKeyguardShowing(
+                mDisplayId != INVALID_DISPLAY ? mDisplayId : DEFAULT_DISPLAY);
         final boolean keyguardLocked = mStackSupervisor.mKeyguardController.isKeyguardLocked();
-        final boolean showWhenLocked = r.hasShowWhenLockedWindows() && !isInPinnedStack;
+        final boolean showWhenLocked = r.canShowWhenLocked() && !isInPinnedStack;
         final boolean dismissKeyguard = r.hasDismissKeyguardWindows();
         if (shouldBeVisible) {
             if (dismissKeyguard && mTopDismissingKeyguardActivity == null) {
@@ -2009,8 +2022,7 @@
      * {@link Display#FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD} applied.
      */
     private boolean canShowWithInsecureKeyguard() {
-        final ActivityStackSupervisor.ActivityDisplay activityDisplay
-                = mActivityContainer.mActivityDisplay;
+        final ActivityStackSupervisor.ActivityDisplay activityDisplay = getDisplay();
         if (activityDisplay == null) {
             throw new IllegalStateException("Stack is not attached to any display, stackId="
                     + mStackId);
@@ -2057,7 +2069,8 @@
         return false;
     }
 
-    private void makeInvisible(ActivityRecord r, ActivityRecord visibleBehind) {
+    // TODO: Should probably be moved into ActivityRecord.
+    private void makeInvisible(ActivityRecord r) {
         if (!r.visible) {
             if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Already invisible: " + r);
             return;
@@ -2067,11 +2080,16 @@
         if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Making invisible: " + r + " " + r.state);
         try {
             final boolean canEnterPictureInPicture = r.checkEnterPictureInPictureState(
-                    "makeInvisible", true /* noThrow */, true /* beforeStopping */);
-            // Defer telling the client it is hidden if it can enter Pip and isn't current stopped
-            // or stopping. This gives it a chance to enter Pip in onPause().
+                    "makeInvisible", true /* beforeStopping */);
+            // Defer telling the client it is hidden if it can enter Pip and isn't current paused,
+            // stopped or stopping. This gives it a chance to enter Pip in onPause().
+            // TODO: There is still a question surrounding activities in multi-window mode that want
+            // to enter Pip after they are paused, but are still visible. I they should be okay to
+            // enter Pip in those cases, but not "auto-Pip" which is what this condition covers and
+            // the current contract for "auto-Pip" is that the app should enter it before onPause
+            // returns. Just need to confirm this reasoning makes sense.
             final boolean deferHidingClient = canEnterPictureInPicture
-                    && r.state != STOPPING && r.state != STOPPED;
+                    && r.state != STOPPING && r.state != STOPPED && r.state != PAUSED;
             r.setDeferHidingClient(deferHidingClient);
             r.setVisible(false);
 
@@ -2086,21 +2104,15 @@
 
                     // Reset the flag indicating that an app can enter picture-in-picture once the
                     // activity is hidden
-                    r.supportsPictureInPictureWhilePausing = false;
+                    r.supportsEnterPipOnTaskSwitch = false;
                     break;
 
                 case INITIALIZING:
                 case RESUMED:
                 case PAUSING:
                 case PAUSED:
-                    // This case created for transitioning activities from
-                    // translucent to opaque {@link Activity#convertToOpaque}.
-                    if (visibleBehind == r) {
-                        releaseBackgroundResources(r);
-                    } else {
-                        addToStopping(r, true /* scheduleIdle */,
-                                canEnterPictureInPicture /* idleDelayed */);
-                    }
+                    addToStopping(r, true /* scheduleIdle */,
+                            canEnterPictureInPicture /* idleDelayed */);
                     break;
 
                 default:
@@ -2157,7 +2169,6 @@
      * occurred and the activity will be notified immediately.
      */
     void notifyActivityDrawnLocked(ActivityRecord r) {
-        mActivityContainer.setDrawn();
         if ((r == null)
                 || (mUndrawnActivitiesBelowTopTranslucent.remove(r) &&
                         mUndrawnActivitiesBelowTopTranslucent.isEmpty())) {
@@ -2245,12 +2256,18 @@
         } finally {
             mStackSupervisor.inResumeTopActivity = false;
         }
+
         // When resuming the top activity, it may be necessary to pause the top activity (for
         // example, returning to the lock screen. We suppress the normal pause logic in
         // {@link #resumeTopActivityUncheckedLocked}, since the top activity is resumed at the end.
         // We call the {@link ActivityStackSupervisor#checkReadyForSleepLocked} again here to ensure
-        // any necessary pause logic occurs.
-        mStackSupervisor.checkReadyForSleepLocked();
+        // any necessary pause logic occurs. In the case where the Activity will be shown regardless
+        // of the lock screen, the call to {@link ActivityStackSupervisor#checkReadyForSleepLocked}
+        // is skipped.
+        final ActivityRecord next = topRunningActivityLocked(true /* focusableOnly */);
+        if (next == null || !next.canTurnScreenOn()) {
+            checkReadyForSleep();
+        }
 
         return result;
     }
@@ -2279,12 +2296,8 @@
 
         final boolean hasRunningActivity = next != null;
 
-        final ActivityRecord parent = mActivityContainer.mParentActivity;
-        final boolean isParentNotResumed = parent != null && parent.state != ActivityState.RESUMED;
-        if (hasRunningActivity
-                && (isParentNotResumed || !mActivityContainer.isAttachedLocked())) {
-            // Do not resume this stack if its parent is not resumed.
-            // TODO: If in a loop, make sure that parent stack resumeTopActivity is called 1st.
+        // TODO: Maybe this entire condition can get removed?
+        if (hasRunningActivity && getDisplay() == null) {
             return false;
         }
 
@@ -2338,7 +2351,7 @@
 
         // If we are sleeping, and there is no resumed activity, and the top
         // activity is paused, well that is the state we want.
-        if (mService.isSleepingOrShuttingDownLocked()
+        if (shouldSleepOrShutDownActivities()
                 && mLastPausedActivity == next
                 && mStackSupervisor.allPausedActivitiesComplete()) {
             // Make sure we have executed any pending transitions, since there
@@ -2386,7 +2399,7 @@
             // represent the last resumed activity. However, the last focus stack does if it isn't null.
             final ActivityRecord lastResumed = lastFocusedStack.mResumedActivity;
             lastResumedCanPip = lastResumed != null && lastResumed.checkEnterPictureInPictureState(
-                    "resumeTopActivity", true /* noThrow */, userLeaving /* beforeStopping */);
+                    "resumeTopActivity", userLeaving /* beforeStopping */);
         }
         // If the flag RESUME_WHILE_PAUSING is set, then continue to schedule the previous activity
         // to be paused, while at the same time resuming the new resume activity only if the
@@ -2430,7 +2443,7 @@
         // If the most recent activity was noHistory but was only stopped rather
         // than stopped+finished because the device went to sleep, we need to make
         // sure to finish it as we're making a new activity topmost.
-        if (mService.isSleepingLocked() && mLastNoHistoryActivity != null &&
+        if (shouldSleepActivities() && mLastNoHistoryActivity != null &&
                 !mLastNoHistoryActivity.finishing) {
             if (DEBUG_STATES) Slog.d(TAG_STATES,
                     "no-history finish of " + mLastNoHistoryActivity + " on new resume");
@@ -2550,118 +2563,139 @@
                     || (lastStack.mLastPausedActivity != null
                     && !lastStack.mLastPausedActivity.fullscreen));
 
-            // This activity is now becoming visible.
-            if (!next.visible || next.stopped || lastActivityTranslucent) {
-                next.setVisibility(true);
-            }
-
-            // schedule launch ticks to collect information about slow apps.
-            next.startLaunchTickingLocked();
-
-            ActivityRecord lastResumedActivity =
-                    lastStack == null ? null :lastStack.mResumedActivity;
-            ActivityState lastState = next.state;
-
-            mService.updateCpuStats();
-
-            if (DEBUG_STATES) Slog.v(TAG_STATES, "Moving to RESUMED: " + next + " (in existing)");
-
-            setResumedActivityLocked(next, "resumeTopActivityInnerLocked");
-
-            mService.updateLruProcessLocked(next.app, true, null);
-            updateLRUListLocked(next);
-            mService.updateOomAdjLocked();
-
-            // Have the window manager re-evaluate the orientation of
-            // the screen based on the new activity order.
-            boolean notUpdated = true;
-            if (mStackSupervisor.isFocusedStack(this)) {
-                final Configuration config = mWindowManager.updateOrientationFromAppTokens(
-                        mStackSupervisor.getDisplayOverrideConfiguration(mDisplayId),
-                        next.mayFreezeScreenLocked(next.app) ? next.appToken : null, mDisplayId);
-                if (config != null) {
-                    next.frozenBeforeDestroy = true;
-                }
-                notUpdated = !mService.updateDisplayOverrideConfigurationLocked(config, next,
-                        false /* deferResume */, mDisplayId);
-            }
-
-            if (notUpdated) {
-                // The configuration update wasn't able to keep the existing
-                // instance of the activity, and instead started a new one.
-                // We should be all done, but let's just make sure our activity
-                // is still at the top and schedule another run if something
-                // weird happened.
-                ActivityRecord nextNext = topRunningActivityLocked();
-                if (DEBUG_SWITCH || DEBUG_STATES) Slog.i(TAG_STATES,
-                        "Activity config changed during resume: " + next
-                        + ", new next: " + nextNext);
-                if (nextNext != next) {
-                    // Do over!
-                    mStackSupervisor.scheduleResumeTopActivities();
-                }
-                if (!next.visible || next.stopped) {
+            // The contained logic must be synchronized, since we are both changing the visibility
+            // and updating the {@link Configuration}. {@link ActivityRecord#setVisibility} will
+            // ultimately cause the client code to schedule a layout. Since layouts retrieve the
+            // current {@link Configuration}, we must ensure that the below code updates it before
+            // the layout can occur.
+            synchronized(mWindowManager.getWindowManagerLock()) {
+                // This activity is now becoming visible.
+                if (!next.visible || next.stopped || lastActivityTranslucent) {
                     next.setVisibility(true);
                 }
-                next.completeResumeLocked();
-                if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
-                return true;
-            }
 
-            try {
-                // Deliver all pending results.
-                ArrayList<ResultInfo> a = next.results;
-                if (a != null) {
-                    final int N = a.size();
-                    if (!next.finishing && N > 0) {
-                        if (DEBUG_RESULTS) Slog.v(TAG_RESULTS,
-                                "Delivering results to " + next + ": " + a);
-                        next.app.thread.scheduleSendResult(next.appToken, a);
+                // schedule launch ticks to collect information about slow apps.
+                next.startLaunchTickingLocked();
+
+                ActivityRecord lastResumedActivity =
+                        lastStack == null ? null :lastStack.mResumedActivity;
+                ActivityState lastState = next.state;
+
+                mService.updateCpuStats();
+
+                if (DEBUG_STATES) Slog.v(TAG_STATES, "Moving to RESUMED: " + next
+                        + " (in existing)");
+
+                setResumedActivityLocked(next, "resumeTopActivityInnerLocked");
+
+                mService.updateLruProcessLocked(next.app, true, null);
+                updateLRUListLocked(next);
+                mService.updateOomAdjLocked();
+
+                // Have the window manager re-evaluate the orientation of
+                // the screen based on the new activity order.
+                boolean notUpdated = true;
+
+                if (mStackSupervisor.isFocusedStack(this)) {
+
+                    // We have special rotation behavior when Keyguard is locked. Make sure all
+                    // activity visibilities are set correctly as well as the transition is updated
+                    // if needed to get the correct rotation behavior.
+                    // TODO: Remove this once visibilities are set correctly immediately when
+                    // starting an activity.
+                    if (mStackSupervisor.mKeyguardController.isKeyguardLocked()) {
+                        mStackSupervisor.ensureActivitiesVisibleLocked(null /* starting */,
+                                0 /* configChanges */, false /* preserveWindows */);
                     }
+                    final Configuration config = mWindowManager.updateOrientationFromAppTokens(
+                            mStackSupervisor.getDisplayOverrideConfiguration(mDisplayId),
+                            next.mayFreezeScreenLocked(next.app) ? next.appToken : null,
+                                    mDisplayId);
+                    if (config != null) {
+                        next.frozenBeforeDestroy = true;
+                    }
+                    notUpdated = !mService.updateDisplayOverrideConfigurationLocked(config, next,
+                            false /* deferResume */, mDisplayId);
                 }
 
-                if (next.newIntents != null) {
-                    next.app.thread.scheduleNewIntent(
-                            next.newIntents, next.appToken, false /* andPause */);
+                if (notUpdated) {
+                    // The configuration update wasn't able to keep the existing
+                    // instance of the activity, and instead started a new one.
+                    // We should be all done, but let's just make sure our activity
+                    // is still at the top and schedule another run if something
+                    // weird happened.
+                    ActivityRecord nextNext = topRunningActivityLocked();
+                    if (DEBUG_SWITCH || DEBUG_STATES) Slog.i(TAG_STATES,
+                            "Activity config changed during resume: " + next
+                                    + ", new next: " + nextNext);
+                    if (nextNext != next) {
+                        // Do over!
+                        mStackSupervisor.scheduleResumeTopActivities();
+                    }
+                    if (!next.visible || next.stopped) {
+                        next.setVisibility(true);
+                    }
+                    next.completeResumeLocked();
+                    if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
+                    return true;
                 }
 
-                // Well the app will no longer be stopped.
-                // Clear app token stopped state in window manager if needed.
-                next.notifyAppResumed(next.stopped);
+                try {
+                    // Deliver all pending results.
+                    ArrayList<ResultInfo> a = next.results;
+                    if (a != null) {
+                        final int N = a.size();
+                        if (!next.finishing && N > 0) {
+                            if (DEBUG_RESULTS) Slog.v(TAG_RESULTS,
+                                    "Delivering results to " + next + ": " + a);
+                            next.app.thread.scheduleSendResult(next.appToken, a);
+                        }
+                    }
 
-                EventLog.writeEvent(EventLogTags.AM_RESUME_ACTIVITY, next.userId,
-                        System.identityHashCode(next), next.getTask().taskId,
-                        next.shortComponentName);
+                    if (next.newIntents != null) {
+                        next.app.thread.scheduleNewIntent(
+                                next.newIntents, next.appToken, false /* andPause */);
+                    }
 
-                next.sleeping = false;
-                mService.showUnsupportedZoomDialogIfNeededLocked(next);
-                mService.showAskCompatModeDialogLocked(next);
-                next.app.pendingUiClean = true;
-                next.app.forceProcessStateUpTo(mService.mTopProcessState);
-                next.clearOptionsLocked();
-                next.app.thread.scheduleResumeActivity(next.appToken, next.app.repProcState,
-                        mService.isNextTransitionForward(), resumeAnimOptions);
+                    // Well the app will no longer be stopped.
+                    // Clear app token stopped state in window manager if needed.
+                    next.notifyAppResumed(next.stopped);
 
-                if (DEBUG_STATES) Slog.d(TAG_STATES, "resumeTopActivityLocked: Resumed " + next);
-            } catch (Exception e) {
-                // Whoops, need to restart this activity!
-                if (DEBUG_STATES) Slog.v(TAG_STATES, "Resume failed; resetting state to "
-                        + lastState + ": " + next);
-                next.state = lastState;
-                if (lastStack != null) {
-                    lastStack.mResumedActivity = lastResumedActivity;
+                    EventLog.writeEvent(EventLogTags.AM_RESUME_ACTIVITY, next.userId,
+                            System.identityHashCode(next), next.getTask().taskId,
+                            next.shortComponentName);
+
+                    next.sleeping = false;
+                    mService.showUnsupportedZoomDialogIfNeededLocked(next);
+                    mService.showAskCompatModeDialogLocked(next);
+                    next.app.pendingUiClean = true;
+                    next.app.forceProcessStateUpTo(mService.mTopProcessState);
+                    next.clearOptionsLocked();
+                    next.app.thread.scheduleResumeActivity(next.appToken, next.app.repProcState,
+                            mService.isNextTransitionForward(), resumeAnimOptions);
+
+                    if (DEBUG_STATES) Slog.d(TAG_STATES, "resumeTopActivityLocked: Resumed "
+                            + next);
+                } catch (Exception e) {
+                    // Whoops, need to restart this activity!
+                    if (DEBUG_STATES) Slog.v(TAG_STATES, "Resume failed; resetting state to "
+                            + lastState + ": " + next);
+                    next.state = lastState;
+                    if (lastStack != null) {
+                        lastStack.mResumedActivity = lastResumedActivity;
+                    }
+                    Slog.i(TAG, "Restarting because process died: " + next);
+                    if (!next.hasBeenLaunched) {
+                        next.hasBeenLaunched = true;
+                    } else  if (SHOW_APP_STARTING_PREVIEW && lastStack != null &&
+                            mStackSupervisor.isFrontStackOnDisplay(lastStack)) {
+                        next.showStartingWindow(null /* prev */, false /* newTask */,
+                                false /* taskSwitch */);
+                    }
+                    mStackSupervisor.startSpecificActivityLocked(next, true, false);
+                    if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
+                    return true;
                 }
-                Slog.i(TAG, "Restarting because process died: " + next);
-                if (!next.hasBeenLaunched) {
-                    next.hasBeenLaunched = true;
-                } else  if (SHOW_APP_STARTING_PREVIEW && lastStack != null &&
-                        mStackSupervisor.isFrontStackOnDisplay(lastStack)) {
-                    next.showStartingWindow(null /* prev */, false /* newTask */,
-                            false /* taskSwitch */);
-                }
-                mStackSupervisor.startSpecificActivityLocked(next, true, false);
-                if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
-                return true;
             }
 
             // From this point on, if something goes wrong there is no way
@@ -2913,11 +2947,9 @@
                         // supporting picture-in-picture while pausing only if the starting activity
                         // would not be considered an overlay on top of the current activity
                         // (eg. not fullscreen, or the assistant)
-                        if (focusedTopActivity != null
-                                && focusedTopActivity.getStackId() != PINNED_STACK_ID
-                                && r.getStackId() != ASSISTANT_STACK_ID
-                                && r.fullscreen) {
-                            focusedTopActivity.supportsPictureInPictureWhilePausing = true;
+                        if (canEnterPipOnTaskSwitch(focusedTopActivity,
+                                null /* toFrontTask */, r, options)) {
+                            focusedTopActivity.supportsEnterPipOnTaskSwitch = true;
                         }
                         transit = TRANSIT_TASK_OPEN;
                     }
@@ -2972,6 +3004,30 @@
         }
     }
 
+    /**
+     * @return Whether the switch to another task can trigger the currently running activity to
+     * enter PiP while it is pausing (if supported). Only one of {@param toFrontTask} or
+     * {@param toFrontActivity} should be set.
+     */
+    private boolean canEnterPipOnTaskSwitch(ActivityRecord pipCandidate,
+            TaskRecord toFrontTask, ActivityRecord toFrontActivity, ActivityOptions opts) {
+        if (opts != null && opts.disallowEnterPictureInPictureWhileLaunching()) {
+            // Ensure the caller has requested not to trigger auto-enter PiP
+            return false;
+        }
+        if (pipCandidate == null || pipCandidate.getStackId() == PINNED_STACK_ID) {
+            // Ensure that we do not trigger entering PiP an activity on the pinned stack
+            return false;
+        }
+        final int targetStackId = toFrontTask != null ? toFrontTask.getStackId()
+                : toFrontActivity.getStackId();
+        if (targetStackId == ASSISTANT_STACK_ID) {
+            // Ensure the task/activity being brought forward is not the assistant
+            return false;
+        }
+        return true;
+    }
+
     private boolean isTaskSwitch(ActivityRecord r,
             ActivityRecord topFocusedActivity) {
         return topFocusedActivity != null && r.getTask() != topFocusedActivity.getTask();
@@ -3442,7 +3498,7 @@
         if ((r.intent.getFlags()&Intent.FLAG_ACTIVITY_NO_HISTORY) != 0
                 || (r.info.flags&ActivityInfo.FLAG_NO_HISTORY) != 0) {
             if (!r.finishing) {
-                if (!mService.isSleepingLocked()) {
+                if (!shouldSleepActivities()) {
                     if (DEBUG_STATES) Slog.d(TAG_STATES, "no-history finish of " + r);
                     if (requestFinishActivityLocked(r.appToken, Activity.RESULT_CANCELED, null,
                             "stop-no-history", false)) {
@@ -3474,7 +3530,7 @@
                 EventLogTags.writeAmStopActivity(
                         r.userId, System.identityHashCode(r), r.shortComponentName);
                 r.app.thread.scheduleStopActivity(r.appToken, r.visible, r.configChangeFlags);
-                if (mService.isSleepingOrShuttingDownLocked()) {
+                if (shouldSleepOrShutDownActivities()) {
                     r.setSleeping(true);
                 }
                 Message msg = mHandler.obtainMessage(STOP_TIMEOUT_MSG, r);
@@ -3861,7 +3917,7 @@
             }
         }
         if (noActivitiesInStack) {
-            mActivityContainer.onTaskListEmptyLocked();
+            remove();
         }
     }
 
@@ -3972,7 +4028,7 @@
                             destIntent, null /*ephemeralIntent*/, null, aInfo, null /*rInfo*/, null,
                             null, parent.appToken, null, 0, -1, parent.launchedFromUid,
                             parent.launchedFromPackage, -1, parent.launchedFromUid, 0, null,
-                            false, true, null, null, null, "navigateUpTo");
+                            false, true, null, null, "navigateUpTo");
                     foundParentInTask = res == ActivityManager.START_SUCCESS;
                 } catch (RemoteException e) {
                     foundParentInTask = false;
@@ -4043,10 +4099,6 @@
 
         // Get rid of any pending idle timeouts.
         removeTimeoutsForActivityLocked(r);
-        if (getVisibleBehindActivity() == r) {
-            mStackSupervisor.requestVisibleBehindLocked(r, false);
-        }
-
         // Clean-up activities are no longer relaunching (e.g. app process died). Notify window
         // manager so it can update its bookkeeping.
         mWindowManager.notifyAppRelaunchesCleared(r.appToken);
@@ -4061,7 +4113,6 @@
     }
 
     private void removeActivityFromHistoryLocked(ActivityRecord r, String reason) {
-        mStackSupervisor.removeChildActivityContainers(r);
         finishActivityResultsLocked(r, Activity.RESULT_CANCELED, null);
         r.makeFinishingLocked();
         if (DEBUG_ADD_REMOVE) Slog.i(TAG_ADD_REMOVE,
@@ -4350,56 +4401,6 @@
         }
     }
 
-    void releaseBackgroundResources(ActivityRecord r) {
-        if (hasVisibleBehindActivity() &&
-                !mHandler.hasMessages(RELEASE_BACKGROUND_RESOURCES_TIMEOUT_MSG)) {
-            if (r == topRunningActivityLocked()
-                    && shouldBeVisible(null) == STACK_VISIBLE) {
-                // Don't release the top activity if it has requested to run behind the next
-                // activity and the stack is currently visible.
-                return;
-            }
-            if (DEBUG_STATES) Slog.d(TAG_STATES, "releaseBackgroundResources activtyDisplay=" +
-                    mActivityContainer.mActivityDisplay + " visibleBehind=" + r + " app=" + r.app +
-                    " thread=" + r.app.thread);
-            if (r != null && r.app != null && r.app.thread != null) {
-                try {
-                    r.app.thread.scheduleCancelVisibleBehind(r.appToken);
-                } catch (RemoteException e) {
-                }
-                mHandler.sendEmptyMessageDelayed(RELEASE_BACKGROUND_RESOURCES_TIMEOUT_MSG, 500);
-            } else {
-                Slog.e(TAG, "releaseBackgroundResources: activity " + r + " no longer running");
-                backgroundResourcesReleased();
-            }
-        }
-    }
-
-    final void backgroundResourcesReleased() {
-        mHandler.removeMessages(RELEASE_BACKGROUND_RESOURCES_TIMEOUT_MSG);
-        final ActivityRecord r = getVisibleBehindActivity();
-        if (r != null) {
-            mStackSupervisor.mStoppingActivities.add(r);
-            setVisibleBehindActivity(null);
-            mStackSupervisor.scheduleIdleTimeoutLocked(null);
-        }
-        mStackSupervisor.resumeFocusedStackTopActivityLocked();
-    }
-
-    boolean hasVisibleBehindActivity() {
-        return isAttached() && mActivityContainer.mActivityDisplay.hasVisibleBehindActivity();
-    }
-
-    void setVisibleBehindActivity(ActivityRecord r) {
-        if (isAttached()) {
-            mActivityContainer.mActivityDisplay.setVisibleBehindActivity(r);
-        }
-    }
-
-    ActivityRecord getVisibleBehindActivity() {
-        return isAttached() ? mActivityContainer.mActivityDisplay.mVisibleBehindActivity : null;
-    }
-
     private void removeHistoryRecordsForAppLocked(ArrayList<ActivityRecord> list,
             ProcessRecord app, String listName) {
         int i = list.size();
@@ -4602,9 +4603,9 @@
         // If a new task is moved to the front, then mark the existing top activity as supporting
         // picture-in-picture while paused only if the task would not be considered an oerlay on top
         // of the current activity (eg. not fullscreen, or the assistant)
-        if (topActivity != null && topActivity.getStackId() != PINNED_STACK_ID
-                && tr.getStackId() != ASSISTANT_STACK_ID && tr.containsOnlyFullscreenActivities()) {
-            topActivity.supportsPictureInPictureWhilePausing = true;
+        if (canEnterPipOnTaskSwitch(topActivity, tr, null /* toFrontActivity */,
+                options)) {
+            topActivity.supportsEnterPipOnTaskSwitch = true;
         }
 
         mStackSupervisor.resumeFocusedStackTopActivityLocked();
@@ -4663,28 +4664,6 @@
 
         if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare to back transition: task=" + taskId);
 
-        if (mStackId == HOME_STACK_ID && topTask().isHomeTask()) {
-            // For the case where we are moving the home task back and there is an activity visible
-            // behind it on the fullscreen or assistant stack, we want to move the focus to the
-            // visible behind activity to maintain order with what the user is seeing.
-            ActivityRecord visibleBehind = null;
-            final ActivityStack fullscreenStack =
-                    mStackSupervisor.getStack(FULLSCREEN_WORKSPACE_STACK_ID);
-            final ActivityStack assistantStack =
-                    mStackSupervisor.getStack(ASSISTANT_STACK_ID);
-            if (fullscreenStack != null && fullscreenStack.hasVisibleBehindActivity()) {
-                visibleBehind = fullscreenStack.getVisibleBehindActivity();
-            } else if (assistantStack != null && assistantStack.hasVisibleBehindActivity()) {
-                visibleBehind = assistantStack.getVisibleBehindActivity();
-            }
-            if (visibleBehind != null) {
-                mStackSupervisor.moveFocusableActivityStackToFrontLocked(visibleBehind,
-                        "moveTaskToBack");
-                mStackSupervisor.resumeFocusedStackTopActivityLocked();
-                return true;
-            }
-        }
-
         boolean prevIsHome = false;
 
         // If true, we should resume the home activity next if the task we are moving to the
@@ -4748,7 +4727,7 @@
      * focus may be on another display.
      */
     private ActivityStack getTopStackOnDisplay() {
-        final ArrayList<ActivityStack> stacks = mActivityContainer.mActivityDisplay.mStacks;
+        final ArrayList<ActivityStack> stacks = getDisplay().mStacks;
         return stacks.isEmpty() ? null : stacks.get(stacks.size() - 1);
     }
 
@@ -5225,7 +5204,7 @@
                 mStacks.add(0, this);
             }
             if (!isHomeOrRecentsStack()) {
-                mActivityContainer.onTaskListEmptyLocked();
+                remove();
             }
         }
 
@@ -5244,8 +5223,8 @@
                 voiceInteractor, type);
         // add the task to stack first, mTaskPositioner might need the stack association
         addTask(task, toTop, "createTaskRecord");
-        final boolean isLockscreenShown =
-                mService.mStackSupervisor.mKeyguardController.isKeyguardShowing();
+        final boolean isLockscreenShown = mService.mStackSupervisor.mKeyguardController
+                .isKeyguardShowing(mDisplayId != INVALID_DISPLAY ? mDisplayId : DEFAULT_DISPLAY);
         if (!layoutTaskInStack(task, info.windowLayout) && mBounds != null && task.isResizeable()
                 && !isLockscreenShown) {
             task.updateOverrideConfiguration(mBounds);
@@ -5397,4 +5376,13 @@
         mNoAnimActivities.clear();
         ActivityOptions.abort(options);
     }
+
+    boolean shouldSleepActivities() {
+        final ActivityStackSupervisor.ActivityDisplay display = getDisplay();
+        return display != null ? display.isSleeping() : mService.isSleepingLocked();
+    }
+
+    boolean shouldSleepOrShutDownActivities() {
+        return shouldSleepActivities() || mService.isShuttingDownLocked();
+    }
 }
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 90fd028..87e596f 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -16,8 +16,8 @@
 
 package com.android.server.am;
 
+import static android.Manifest.permission.ACTIVITY_EMBEDDING;
 import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW;
-import static android.Manifest.permission.MANAGE_ACTIVITY_STACKS;
 import static android.Manifest.permission.START_ANY_ACTIVITY;
 import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
 import static android.app.ActivityManager.LOCK_TASK_MODE_LOCKED;
@@ -36,10 +36,10 @@
 import static android.app.ActivityManager.StackId.RECENTS_STACK_ID;
 import static android.app.ITaskStackListener.FORCED_RESIZEABLE_REASON_SECONDARY_DISPLAY;
 import static android.app.ITaskStackListener.FORCED_RESIZEABLE_REASON_SPLIT_SCREEN;
-import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
-import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+import static android.content.pm.PackageManager.PERMISSION_DENIED;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 import static android.os.Process.SYSTEM_UID;
+import static android.os.PowerManager.PARTIAL_WAKE_LOCK;
 import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.Display.FLAG_PRIVATE;
@@ -49,7 +49,6 @@
 
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_PICTURE_IN_PICTURE_EXPANDED_TO_FULLSCREEN;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL;
-import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_CONTAINERS;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_FOCUS;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_IDLE;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_LOCKTASK;
@@ -60,8 +59,6 @@
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_STATES;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_SWITCH;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_TASKS;
-import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_VISIBLE_BEHIND;
-import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_CONTAINERS;
 import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_FOCUS;
 import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_IDLE;
 import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_LOCKTASK;
@@ -72,7 +69,6 @@
 import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_STATES;
 import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_SWITCH;
 import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_TASKS;
-import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_VISIBLE_BEHIND;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
 import static com.android.server.am.ActivityManagerService.ANIMATE;
@@ -110,9 +106,9 @@
 import android.app.ActivityManager.RunningTaskInfo;
 import android.app.ActivityManager.StackId;
 import android.app.ActivityManager.StackInfo;
+import android.app.ActivityManagerInternal.SleepToken;
 import android.app.ActivityOptions;
 import android.app.AppOpsManager;
-import android.app.IActivityContainerCallback;
 import android.app.ProfilerInfo;
 import android.app.ResultInfo;
 import android.app.StatusBarManager;
@@ -120,7 +116,6 @@
 import android.app.admin.IDevicePolicyManager;
 import android.content.ComponentName;
 import android.content.Context;
-import android.content.IIntentSender;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
@@ -132,10 +127,7 @@
 import android.graphics.Rect;
 import android.hardware.display.DisplayManager;
 import android.hardware.display.DisplayManager.DisplayListener;
-import android.hardware.display.DisplayManagerGlobal;
 import android.hardware.display.DisplayManagerInternal;
-import android.hardware.display.VirtualDisplay;
-import android.hardware.input.InputManager;
 import android.hardware.input.InputManagerInternal;
 import android.os.Binder;
 import android.os.Bundle;
@@ -144,14 +136,12 @@
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
-import android.os.ParcelFileDescriptor;
 import android.os.PowerManager;
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.Trace;
-import android.os.TransactionTooLargeException;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.os.WorkSource;
@@ -167,10 +157,10 @@
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
+import android.util.TimeUtils;
 import android.view.Display;
-import android.view.InputEvent;
-import android.view.Surface;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.content.ReferrerIntent;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.os.TransferPipe;
@@ -189,12 +179,12 @@
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
 public class ActivityStackSupervisor extends ConfigurationContainer implements DisplayListener {
     private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityStackSupervisor" : TAG_AM;
-    private static final String TAG_CONTAINERS = TAG + POSTFIX_CONTAINERS;
     private static final String TAG_FOCUS = TAG + POSTFIX_FOCUS;
     private static final String TAG_IDLE = TAG + POSTFIX_IDLE;
     private static final String TAG_LOCKTASK = TAG + POSTFIX_LOCKTASK;
@@ -205,7 +195,6 @@
     private static final String TAG_STATES = TAG + POSTFIX_STATES;
     private static final String TAG_SWITCH = TAG + POSTFIX_SWITCH;
     static final String TAG_TASKS = TAG + POSTFIX_TASKS;
-    private static final String TAG_VISIBLE_BEHIND = TAG + POSTFIX_VISIBLE_BEHIND;
 
     /** How long we wait until giving up on the last activity telling us it is idle. */
     static final int IDLE_TIMEOUT = 10 * 1000;
@@ -224,10 +213,8 @@
     static final int HANDLE_DISPLAY_ADDED = FIRST_SUPERVISOR_STACK_MSG + 5;
     static final int HANDLE_DISPLAY_CHANGED = FIRST_SUPERVISOR_STACK_MSG + 6;
     static final int HANDLE_DISPLAY_REMOVED = FIRST_SUPERVISOR_STACK_MSG + 7;
-    static final int CONTAINER_CALLBACK_VISIBILITY = FIRST_SUPERVISOR_STACK_MSG + 8;
     static final int LOCK_TASK_START_MSG = FIRST_SUPERVISOR_STACK_MSG + 9;
     static final int LOCK_TASK_END_MSG = FIRST_SUPERVISOR_STACK_MSG + 10;
-    static final int CONTAINER_CALLBACK_TASK_LIST_EMPTY = FIRST_SUPERVISOR_STACK_MSG + 11;
     static final int LAUNCH_TASK_BEHIND_COMPLETE = FIRST_SUPERVISOR_STACK_MSG + 12;
     static final int SHOW_LOCK_TASK_ESCAPE_MESSAGE_MSG = FIRST_SUPERVISOR_STACK_MSG + 13;
     static final int REPORT_MULTI_WINDOW_MODE_CHANGED_MSG = FIRST_SUPERVISOR_STACK_MSG + 14;
@@ -391,9 +378,6 @@
      * is being brought in front of us. */
     boolean mUserLeaving = false;
 
-    /** Set when we have taken too long waiting to go to sleep. */
-    boolean mSleepTimeout = false;
-
     /**
      * We don't want to allow the device to go to sleep while in the process
      * of launching an activity.  This is primarily to allow alarm intent
@@ -409,12 +393,19 @@
      */
     PowerManager.WakeLock mGoingToSleep;
 
+    /**
+     * A list of tokens that cause the top activity to be put to sleep.
+     * They are used by components that may hide and block interaction with underlying
+     * activities.
+     */
+    final ArrayList<SleepToken> mSleepTokens = new ArrayList<SleepToken>();
+
     /** Stack id of the front stack when user switched, indexed by userId. */
     SparseIntArray mUserStackInFront = new SparseIntArray(2);
 
     // TODO: Add listener for removal of references.
     /** Mapping from (ActivityStack/TaskStack).mStackId to their current state */
-    SparseArray<ActivityContainer> mActivityContainers = new SparseArray<>();
+    SparseArray<ActivityStack> mStacks = new SparseArray<>();
 
     // TODO: There should be an ActivityDisplayController coordinating am/wm interaction.
     /** Mapping from displayId to display current state */
@@ -493,9 +484,27 @@
     }
 
     /** Check if placing task or activity on specified display is allowed. */
-    boolean canPlaceEntityOnDisplay(int displayId, boolean resizeable) {
-        return displayId == DEFAULT_DISPLAY || (mService.mSupportsMultiDisplay
-                && (resizeable || displayConfigMatchesGlobal(displayId)));
+    boolean canPlaceEntityOnDisplay(int displayId, boolean resizeable, int callingPid,
+            int callingUid, ActivityInfo activityInfo) {
+        if (displayId == DEFAULT_DISPLAY) {
+            // No restrictions for the default display.
+            return true;
+        }
+        if (!mService.mSupportsMultiDisplay) {
+            // Can't launch on secondary displays if feature is not supported.
+            return false;
+        }
+        if (!resizeable && !displayConfigMatchesGlobal(displayId)) {
+            // Can't apply wrong configuration to non-resizeable activities.
+            return false;
+        }
+        if (!isCallerAllowedToLaunchOnDisplay(callingPid, callingUid, displayId, activityInfo)) {
+            // Can't place activities to a display that has restricted launch rules.
+            // In this case the request should be made by explicitly adding target display id and
+            // by caller with corresponding permissions. See #isCallerAllowedToLaunchOnDisplay().
+            return false;
+        }
+        return true;
     }
 
     /**
@@ -559,6 +568,9 @@
 
     final KeyguardController mKeyguardController;
 
+    private PowerManager mPowerManager;
+    private int mDeferResumeCount;
+
     /**
      * Description of a request to start a new activity, which has been held
      * due to app switches being disabled.
@@ -594,7 +606,7 @@
     public ActivityStackSupervisor(ActivityManagerService service, Looper looper) {
         mService = service;
         mHandler = new ActivityStackSupervisorHandler(looper);
-        mActivityMetricsLogger = new ActivityMetricsLogger(this, mService.mContext);
+        mActivityMetricsLogger = new ActivityMetricsLogger(this, mService.mContext, looper);
         mKeyguardController = new KeyguardController(service, this);
     }
 
@@ -607,9 +619,10 @@
      * initialized.  So we initialize our wakelocks afterwards.
      */
     void initPowerManagement() {
-        PowerManager pm = (PowerManager)mService.mContext.getSystemService(Context.POWER_SERVICE);
-        mGoingToSleep = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ActivityManager-Sleep");
-        mLaunchingActivity = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "*launch*");
+        mPowerManager = (PowerManager)mService.mContext.getSystemService(Context.POWER_SERVICE);
+        mGoingToSleep = mPowerManager
+                .newWakeLock(PARTIAL_WAKE_LOCK, "ActivityManager-Sleep");
+        mLaunchingActivity = mPowerManager.newWakeLock(PARTIAL_WAKE_LOCK, "*launch*");
         mLaunchingActivity.setReferenceCounted(false);
     }
 
@@ -678,31 +691,15 @@
     }
 
     boolean isFocusedStack(ActivityStack stack) {
-        if (stack == null) {
-            return false;
-        }
-
-        final ActivityRecord parent = stack.mActivityContainer.mParentActivity;
-        if (parent != null) {
-            stack = parent.getStack();
-        }
-        return stack == mFocusedStack;
+        return stack != null && stack == mFocusedStack;
     }
 
     /** The top most stack on its display. */
     boolean isFrontStackOnDisplay(ActivityStack stack) {
-        return isFrontOfStackList(stack, stack.mActivityContainer.mActivityDisplay.mStacks);
+        return isFrontOfStackList(stack, stack.getDisplay().mStacks);
     }
 
     private boolean isFrontOfStackList(ActivityStack stack, List<ActivityStack> stackList) {
-        if (stack == null) {
-            return false;
-        }
-
-        final ActivityRecord parent = stack.mActivityContainer.mParentActivity;
-        if (parent != null) {
-            stack = parent.getStack();
-        }
         return stack == stackList.get((stackList.size() - 1));
     }
 
@@ -1099,21 +1096,6 @@
         return pausing;
     }
 
-    void pauseChildStacks(ActivityRecord parent, boolean userLeaving, boolean uiSleeping,
-            ActivityRecord resuming, boolean dontWait) {
-        // TODO: Put all stacks in supervisor and iterate through them instead.
-        for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
-            ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
-            for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
-                final ActivityStack stack = stacks.get(stackNdx);
-                if (stack.mResumedActivity != null &&
-                        stack.mActivityContainer.mParentActivity == parent) {
-                    stack.startPausingLocked(userLeaving, uiSleeping, resuming, dontWait);
-                }
-            }
-        }
-    }
-
     void cancelInitializingActivities() {
         for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
             ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
@@ -1341,184 +1323,188 @@
             return false;
         }
 
-        r.startFreezingScreenLocked(app, 0);
-        if (r.getStack().checkKeyguardVisibility(r, true /* shouldBeVisible */, true /* isTop */)) {
-            // We only set the visibility to true if the activity is allowed to be visible based on
-            // keyguard state. This avoids setting this into motion in window manager that is later
-            // cancelled due to later calls to ensure visible activities that set visibility back to
-            // false.
-            r.setVisibility(true);
-        }
-
-        // schedule launch ticks to collect information about slow apps.
-        r.startLaunchTickingLocked();
-
-        // Have the window manager re-evaluate the orientation of the screen based on the new
-        // activity order.  Note that as a result of this, it can call back into the activity
-        // manager with a new orientation.  We don't care about that, because the activity is not
-        // currently running so we are just restarting it anyway.
-        if (checkConfig) {
-            final int displayId = r.getDisplayId();
-            final Configuration config = mWindowManager.updateOrientationFromAppTokens(
-                    getDisplayOverrideConfiguration(displayId),
-                    r.mayFreezeScreenLocked(app) ? r.appToken : null, displayId);
-            // Deferring resume here because we're going to launch new activity shortly.
-            // We don't want to perform a redundant launch of the same record while ensuring
-            // configurations and trying to resume top activity of focused stack.
-            mService.updateDisplayOverrideConfigurationLocked(config, r, true /* deferResume */,
-                    displayId);
-        }
-
-        if (mKeyguardController.isKeyguardLocked()) {
-            r.notifyUnknownVisibilityLaunched();
-        }
-        final int applicationInfoUid =
-                (r.info.applicationInfo != null) ? r.info.applicationInfo.uid : -1;
-        if ((r.userId != app.userId) || (r.appInfo.uid != applicationInfoUid)) {
-            Slog.wtf(TAG,
-                    "User ID for activity changing for " + r
-                            + " appInfo.uid=" + r.appInfo.uid
-                            + " info.ai.uid=" + applicationInfoUid
-                            + " old=" + r.app + " new=" + app);
-        }
-
-        r.app = app;
-        app.waitingToKill = null;
-        r.launchCount++;
-        r.lastLaunchTime = SystemClock.uptimeMillis();
-
-        if (DEBUG_ALL) Slog.v(TAG, "Launching: " + r);
-
-        int idx = app.activities.indexOf(r);
-        if (idx < 0) {
-            app.activities.add(r);
-        }
-        mService.updateLruProcessLocked(app, true, null);
-        mService.updateOomAdjLocked();
-
         final TaskRecord task = r.getTask();
-        if (task.mLockTaskAuth == LOCK_TASK_AUTH_LAUNCHABLE ||
-                task.mLockTaskAuth == LOCK_TASK_AUTH_LAUNCHABLE_PRIV) {
-            setLockTaskModeLocked(task, LOCK_TASK_MODE_LOCKED, "mLockTaskAuth==LAUNCHABLE", false);
-        }
-
         final ActivityStack stack = task.getStack();
+
+        beginDeferResume();
+
         try {
-            if (app.thread == null) {
-                throw new RemoteException();
+            r.startFreezingScreenLocked(app, 0);
+
+            // schedule launch ticks to collect information about slow apps.
+            r.startLaunchTickingLocked();
+
+            r.app = app;
+
+            if (mKeyguardController.isKeyguardLocked()) {
+                r.notifyUnknownVisibilityLaunched();
             }
-            List<ResultInfo> results = null;
-            List<ReferrerIntent> newIntents = null;
-            if (andResume) {
-                // We don't need to deliver new intents and/or set results if activity is going
-                // to pause immediately after launch.
-                results = r.results;
-                newIntents = r.newIntents;
+
+            // Have the window manager re-evaluate the orientation of the screen based on the new
+            // activity order.  Note that as a result of this, it can call back into the activity
+            // manager with a new orientation.  We don't care about that, because the activity is
+            // not currently running so we are just restarting it anyway.
+            if (checkConfig) {
+                final int displayId = r.getDisplayId();
+                final Configuration config = mWindowManager.updateOrientationFromAppTokens(
+                        getDisplayOverrideConfiguration(displayId),
+                        r.mayFreezeScreenLocked(app) ? r.appToken : null, displayId);
+                // Deferring resume here because we're going to launch new activity shortly.
+                // We don't want to perform a redundant launch of the same record while ensuring
+                // configurations and trying to resume top activity of focused stack.
+                mService.updateDisplayOverrideConfigurationLocked(config, r, true /* deferResume */,
+                        displayId);
             }
-            if (DEBUG_SWITCH) Slog.v(TAG_SWITCH,
-                    "Launching: " + r + " icicle=" + r.icicle + " with results=" + results
-                    + " newIntents=" + newIntents + " andResume=" + andResume);
-            EventLog.writeEvent(EventLogTags.AM_RESTART_ACTIVITY, r.userId,
-                    System.identityHashCode(r), task.taskId, r.shortComponentName);
-            if (r.isHomeActivity()) {
-                // Home process is the root process of the task.
-                mService.mHomeProcess = task.mActivities.get(0).app;
+
+            if (r.getStack().checkKeyguardVisibility(r, true /* shouldBeVisible */,
+                    true /* isTop */)) {
+                // We only set the visibility to true if the activity is allowed to be visible
+                // based on
+                // keyguard state. This avoids setting this into motion in window manager that is
+                // later cancelled due to later calls to ensure visible activities that set
+                // visibility back to false.
+                r.setVisibility(true);
             }
-            mService.notifyPackageUse(r.intent.getComponent().getPackageName(),
-                                      PackageManager.NOTIFY_PACKAGE_USE_ACTIVITY);
-            r.sleeping = false;
-            r.forceNewConfig = false;
-            mService.showUnsupportedZoomDialogIfNeededLocked(r);
-            mService.showAskCompatModeDialogLocked(r);
-            r.compat = mService.compatibilityInfoForPackageLocked(r.info.applicationInfo);
-            ProfilerInfo profilerInfo = null;
-            if (mService.mProfileApp != null && mService.mProfileApp.equals(app.processName)) {
-                if (mService.mProfileProc == null || mService.mProfileProc == app) {
-                    mService.mProfileProc = app;
-                    final String profileFile = mService.mProfileFile;
-                    if (profileFile != null) {
-                        ParcelFileDescriptor profileFd = mService.mProfileFd;
-                        if (profileFd != null) {
-                            try {
-                                profileFd = profileFd.dup();
-                            } catch (IOException e) {
-                                if (profileFd != null) {
-                                    try {
-                                        profileFd.close();
-                                    } catch (IOException o) {
-                                    }
-                                    profileFd = null;
+
+            final int applicationInfoUid =
+                    (r.info.applicationInfo != null) ? r.info.applicationInfo.uid : -1;
+            if ((r.userId != app.userId) || (r.appInfo.uid != applicationInfoUid)) {
+                Slog.wtf(TAG,
+                        "User ID for activity changing for " + r
+                                + " appInfo.uid=" + r.appInfo.uid
+                                + " info.ai.uid=" + applicationInfoUid
+                                + " old=" + r.app + " new=" + app);
+            }
+
+            app.waitingToKill = null;
+            r.launchCount++;
+            r.lastLaunchTime = SystemClock.uptimeMillis();
+
+            if (DEBUG_ALL) Slog.v(TAG, "Launching: " + r);
+
+            int idx = app.activities.indexOf(r);
+            if (idx < 0) {
+                app.activities.add(r);
+            }
+            mService.updateLruProcessLocked(app, true, null);
+            mService.updateOomAdjLocked();
+
+            if (task.mLockTaskAuth == LOCK_TASK_AUTH_LAUNCHABLE ||
+                    task.mLockTaskAuth == LOCK_TASK_AUTH_LAUNCHABLE_PRIV) {
+                setLockTaskModeLocked(task, LOCK_TASK_MODE_LOCKED, "mLockTaskAuth==LAUNCHABLE",
+                        false);
+            }
+
+            try {
+                if (app.thread == null) {
+                    throw new RemoteException();
+                }
+                List<ResultInfo> results = null;
+                List<ReferrerIntent> newIntents = null;
+                if (andResume) {
+                    // We don't need to deliver new intents and/or set results if activity is going
+                    // to pause immediately after launch.
+                    results = r.results;
+                    newIntents = r.newIntents;
+                }
+                if (DEBUG_SWITCH) Slog.v(TAG_SWITCH,
+                        "Launching: " + r + " icicle=" + r.icicle + " with results=" + results
+                                + " newIntents=" + newIntents + " andResume=" + andResume);
+                EventLog.writeEvent(EventLogTags.AM_RESTART_ACTIVITY, r.userId,
+                        System.identityHashCode(r), task.taskId, r.shortComponentName);
+                if (r.isHomeActivity()) {
+                    // Home process is the root process of the task.
+                    mService.mHomeProcess = task.mActivities.get(0).app;
+                }
+                mService.notifyPackageUse(r.intent.getComponent().getPackageName(),
+                        PackageManager.NOTIFY_PACKAGE_USE_ACTIVITY);
+                r.sleeping = false;
+                r.forceNewConfig = false;
+                mService.showUnsupportedZoomDialogIfNeededLocked(r);
+                mService.showAskCompatModeDialogLocked(r);
+                r.compat = mService.compatibilityInfoForPackageLocked(r.info.applicationInfo);
+                ProfilerInfo profilerInfo = null;
+                if (mService.mProfileApp != null && mService.mProfileApp.equals(app.processName)) {
+                    if (mService.mProfileProc == null || mService.mProfileProc == app) {
+                        mService.mProfileProc = app;
+                        ProfilerInfo profilerInfoSvc = mService.mProfilerInfo;
+                        if (profilerInfoSvc != null && profilerInfoSvc.profileFile != null) {
+                            if (profilerInfoSvc.profileFd != null) {
+                                try {
+                                    profilerInfoSvc.profileFd = profilerInfoSvc.profileFd.dup();
+                                } catch (IOException e) {
+                                    profilerInfoSvc.closeFd();
                                 }
                             }
+
+                            profilerInfo = new ProfilerInfo(profilerInfoSvc);
                         }
-
-                        profilerInfo = new ProfilerInfo(profileFile, profileFd,
-                                mService.mSamplingInterval, mService.mAutoStopProfiler,
-                                mService.mStreamingOutput);
                     }
                 }
-            }
 
-            app.hasShownUi = true;
-            app.pendingUiClean = true;
-            app.forceProcessStateUpTo(mService.mTopProcessState);
-            // Because we could be starting an Activity in the system process this may not go across
-            // a Binder interface which would create a new Configuration. Consequently we have to
-            // always create a new Configuration here.
+                app.hasShownUi = true;
+                app.pendingUiClean = true;
+                app.forceProcessStateUpTo(mService.mTopProcessState);
+                // Because we could be starting an Activity in the system process this may not go
+                // across a Binder interface which would create a new Configuration. Consequently
+                // we have to always create a new Configuration here.
 
-            final MergedConfiguration mergedConfiguration = new MergedConfiguration(
-                    mService.getGlobalConfiguration(), r.getMergedOverrideConfiguration());
-            r.setLastReportedConfiguration(mergedConfiguration);
+                final MergedConfiguration mergedConfiguration = new MergedConfiguration(
+                        mService.getGlobalConfiguration(), r.getMergedOverrideConfiguration());
+                r.setLastReportedConfiguration(mergedConfiguration);
 
-            logIfTransactionTooLarge(r.intent, r.icicle);
-            app.thread.scheduleLaunchActivity(new Intent(r.intent), r.appToken,
-                    System.identityHashCode(r), r.info,
-                    // TODO: Have this take the merged configuration instead of separate global and
-                    // override configs.
-                    mergedConfiguration.getGlobalConfiguration(),
-                    mergedConfiguration.getOverrideConfiguration(), r.compat,
-                    r.launchedFromPackage, task.voiceInteractor, app.repProcState, r.icicle,
-                    r.persistentState, results, newIntents, !andResume,
-                    mService.isNextTransitionForward(), profilerInfo);
+                logIfTransactionTooLarge(r.intent, r.icicle);
+                app.thread.scheduleLaunchActivity(new Intent(r.intent), r.appToken,
+                        System.identityHashCode(r), r.info,
+                        // TODO: Have this take the merged configuration instead of separate global
+                        // and override configs.
+                        mergedConfiguration.getGlobalConfiguration(),
+                        mergedConfiguration.getOverrideConfiguration(), r.compat,
+                        r.launchedFromPackage, task.voiceInteractor, app.repProcState, r.icicle,
+                        r.persistentState, results, newIntents, !andResume,
+                        mService.isNextTransitionForward(), profilerInfo);
 
-            if ((app.info.privateFlags&ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE) != 0) {
-                // This may be a heavy-weight process!  Note that the package
-                // manager will ensure that only activity can run in the main
-                // process of the .apk, which is the only thing that will be
-                // considered heavy-weight.
-                if (app.processName.equals(app.info.packageName)) {
-                    if (mService.mHeavyWeightProcess != null
-                            && mService.mHeavyWeightProcess != app) {
-                        Slog.w(TAG, "Starting new heavy weight process " + app
-                                + " when already running "
-                                + mService.mHeavyWeightProcess);
+                if ((app.info.privateFlags & ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE) != 0) {
+                    // This may be a heavy-weight process!  Note that the package
+                    // manager will ensure that only activity can run in the main
+                    // process of the .apk, which is the only thing that will be
+                    // considered heavy-weight.
+                    if (app.processName.equals(app.info.packageName)) {
+                        if (mService.mHeavyWeightProcess != null
+                                && mService.mHeavyWeightProcess != app) {
+                            Slog.w(TAG, "Starting new heavy weight process " + app
+                                    + " when already running "
+                                    + mService.mHeavyWeightProcess);
+                        }
+                        mService.mHeavyWeightProcess = app;
+                        Message msg = mService.mHandler.obtainMessage(
+                                ActivityManagerService.POST_HEAVY_NOTIFICATION_MSG);
+                        msg.obj = r;
+                        mService.mHandler.sendMessage(msg);
                     }
-                    mService.mHeavyWeightProcess = app;
-                    Message msg = mService.mHandler.obtainMessage(
-                            ActivityManagerService.POST_HEAVY_NOTIFICATION_MSG);
-                    msg.obj = r;
-                    mService.mHandler.sendMessage(msg);
                 }
-            }
 
-        } catch (RemoteException e) {
-            if (r.launchFailed) {
-                // This is the second time we failed -- finish activity
-                // and give up.
-                Slog.e(TAG, "Second failure launching "
-                      + r.intent.getComponent().flattenToShortString()
-                      + ", giving up", e);
-                mService.appDiedLocked(app);
-                stack.requestFinishActivityLocked(r.appToken, Activity.RESULT_CANCELED, null,
-                        "2nd-crash", false);
-                return false;
-            }
+            } catch (RemoteException e) {
+                if (r.launchFailed) {
+                    // This is the second time we failed -- finish activity
+                    // and give up.
+                    Slog.e(TAG, "Second failure launching "
+                            + r.intent.getComponent().flattenToShortString()
+                            + ", giving up", e);
+                    mService.appDiedLocked(app);
+                    stack.requestFinishActivityLocked(r.appToken, Activity.RESULT_CANCELED, null,
+                            "2nd-crash", false);
+                    return false;
+                }
 
-            // This is the first time we failed -- restart process and
-            // retry.
-            r.launchFailed = true;
-            app.activities.remove(r);
-            throw e;
+                // This is the first time we failed -- restart process and
+                // retry.
+                r.launchFailed = true;
+                app.activities.remove(r);
+                throw e;
+            }
+        } finally {
+            endDeferResume();
         }
 
         r.launchFailed = false;
@@ -1526,7 +1512,7 @@
             Slog.w(TAG, "Activity " + r + " being launched, but already in LRU list");
         }
 
-        if (andResume) {
+        if (andResume && readyToResume()) {
             // As part of the process of launching, ActivityThread also performs
             // a resume.
             stack.minimalResumeActivityLocked(r);
@@ -1666,7 +1652,7 @@
             if (options.getLaunchTaskId() != INVALID_STACK_ID) {
                 final int startInTaskPerm = mService.checkPermission(START_TASKS_FROM_RECENTS,
                         callingPid, callingUid);
-                if (startInTaskPerm != PERMISSION_GRANTED) {
+                if (startInTaskPerm == PERMISSION_DENIED) {
                     final String msg = "Permission Denial: starting " + intent.toString()
                             + " from " + callerApp + " (pid=" + callingPid
                             + ", uid=" + callingUid + ") with launchTaskId="
@@ -1678,8 +1664,8 @@
             // Check if someone tries to launch an activity on a private display with a different
             // owner.
             final int launchDisplayId = options.getLaunchDisplayId();
-            if (launchDisplayId != INVALID_DISPLAY
-                    && !isCallerAllowedToLaunchOnDisplay(callingPid, callingUid, launchDisplayId)) {
+            if (launchDisplayId != INVALID_DISPLAY && !isCallerAllowedToLaunchOnDisplay(callingPid,
+                    callingUid, launchDisplayId, aInfo)) {
                 final String msg = "Permission Denial: starting " + intent.toString()
                         + " from " + callerApp + " (pid=" + callingPid
                         + ", uid=" + callingUid + ") with launchDisplayId="
@@ -1693,17 +1679,24 @@
     }
 
     /** Check if caller is allowed to launch activities on specified display. */
-    boolean isCallerAllowedToLaunchOnDisplay(int callingPid, int callingUid, int launchDisplayId) {
+    boolean isCallerAllowedToLaunchOnDisplay(int callingPid, int callingUid, int launchDisplayId,
+            ActivityInfo aInfo) {
         if (DEBUG_TASKS) Slog.d(TAG, "Launch on display check: displayId=" + launchDisplayId
                 + " callingPid=" + callingPid + " callingUid=" + callingUid);
 
+        if (callingPid == -1 && callingUid == -1) {
+            if (DEBUG_TASKS) Slog.d(TAG, "Launch on display check: no caller info, skip check");
+            return true;
+        }
+
         final ActivityDisplay activityDisplay = getActivityDisplayOrCreateLocked(launchDisplayId);
         if (activityDisplay == null) {
             Slog.w(TAG, "Launch on display check: display not found");
             return false;
         }
 
-        // Check if the caller can manage activity stacks.
+        // Check if the caller has enough privileges to embed activities and launch to private
+        // displays.
         final int startAnyPerm = mService.checkPermission(INTERNAL_SYSTEM_WINDOW, callingPid,
                 callingUid);
         if (startAnyPerm == PERMISSION_GRANTED) {
@@ -1712,13 +1705,26 @@
             return true;
         }
 
-        if (activityDisplay.mDisplay.getType() == TYPE_VIRTUAL
-                && activityDisplay.mDisplay.getOwnerUid() != SYSTEM_UID) {
+        // Check if caller is already present on display
+        final boolean uidPresentOnDisplay = activityDisplay.isUidPresent(callingUid);
+
+        final int displayOwnerUid = activityDisplay.mDisplay.getOwnerUid();
+        if (activityDisplay.mDisplay.getType() == TYPE_VIRTUAL && displayOwnerUid != SYSTEM_UID
+                && displayOwnerUid != aInfo.applicationInfo.uid) {
             // Limit launching on virtual displays, because their contents can be read from Surface
             // by apps that created them.
-            if (DEBUG_TASKS) Slog.d(TAG, "Launch on display check:"
-                    + " disallow launch on virtual display for not-embedded activity");
-            return false;
+            if ((aInfo.flags & ActivityInfo.FLAG_ALLOW_EMBEDDED) == 0) {
+                if (DEBUG_TASKS) Slog.d(TAG, "Launch on display check:"
+                        + " disallow launch on virtual display for not-embedded activity.");
+                return false;
+            }
+            // Check if the caller is allowed to embed activities from other apps.
+            if (mService.checkPermission(ACTIVITY_EMBEDDING, callingPid, callingUid)
+                    == PERMISSION_DENIED && !uidPresentOnDisplay) {
+                if (DEBUG_TASKS) Slog.d(TAG, "Launch on display check:"
+                        + " disallow activity embedding without permission.");
+                return false;
+            }
         }
 
         if (!activityDisplay.isPrivate()) {
@@ -1729,14 +1735,13 @@
         }
 
         // Check if the caller is the owner of the display.
-        if (activityDisplay.mDisplay.getOwnerUid() == callingUid) {
+        if (displayOwnerUid == callingUid) {
             if (DEBUG_TASKS) Slog.d(TAG, "Launch on display check:"
                     + " allow launch for owner of the display");
             return true;
         }
 
-        // Check if caller is present on display
-        if (activityDisplay.isUidPresent(callingUid)) {
+        if (uidPresentOnDisplay) {
             if (DEBUG_TASKS) Slog.d(TAG, "Launch on display check:"
                     + " allow launch for caller present on the display");
             return true;
@@ -1774,7 +1779,7 @@
             String callingPackage, int callingPid, int callingUid, boolean ignoreTargetSecurity) {
         if (!ignoreTargetSecurity && mService.checkComponentPermission(activityInfo.permission,
                 callingPid, callingUid, activityInfo.applicationInfo.uid, activityInfo.exported)
-                == PackageManager.PERMISSION_DENIED) {
+                == PERMISSION_DENIED) {
             return ACTIVITY_RESTRICTION_PERMISSION;
         }
 
@@ -1821,8 +1826,7 @@
             return ACTIVITY_RESTRICTION_NONE;
         }
 
-        if (mService.checkPermission(permission, callingPid, callingUid) ==
-                PackageManager.PERMISSION_DENIED) {
+        if (mService.checkPermission(permission, callingPid, callingUid) == PERMISSION_DENIED) {
             return ACTIVITY_RESTRICTION_PERMISSION;
         }
 
@@ -2080,9 +2084,15 @@
 
     boolean resumeFocusedStackTopActivityLocked(
             ActivityStack targetStack, ActivityRecord target, ActivityOptions targetOptions) {
+
+        if (!readyToResume()) {
+            return false;
+        }
+
         if (targetStack != null && isFocusedStack(targetStack)) {
             return targetStack.resumeTopActivityUncheckedLocked(target, targetOptions);
         }
+
         final ActivityRecord r = mFocusedStack.topRunningActivityLocked();
         if (r == null || r.state != RESUMED) {
             mFocusedStack.resumeTopActivityUncheckedLocked(null, null);
@@ -2090,6 +2100,7 @@
             // Kick off any lingering app transitions form the MoveTaskToFront operation.
             mFocusedStack.executeAppTransition(targetOptions);
         }
+
         return false;
     }
 
@@ -2202,9 +2213,9 @@
 
     protected <T extends ActivityStack> T getStack(int stackId, boolean createStaticStackIfNeeded,
             boolean createOnTop) {
-        final ActivityContainer activityContainer = mActivityContainers.get(stackId);
-        if (activityContainer != null) {
-            return (T) activityContainer.mStack;
+        final ActivityStack stack = mStacks.get(stackId);
+        if (stack != null) {
+            return (T) stack;
         }
         if (!createStaticStackIfNeeded || !StackId.isStaticStack(stackId)) {
             return null;
@@ -2347,33 +2358,6 @@
                 (StackId.isResizeableByDockedStack(stackId) && getStack(DOCKED_STACK_ID) != null);
     }
 
-    ActivityContainer createVirtualActivityContainer(ActivityRecord parentActivity,
-            IActivityContainerCallback callback) {
-        ActivityContainer activityContainer =
-                new VirtualActivityContainer(parentActivity, callback);
-        mActivityContainers.put(activityContainer.mStackId, activityContainer);
-        if (DEBUG_CONTAINERS) Slog.d(TAG_CONTAINERS,
-                "createActivityContainer: " + activityContainer);
-        parentActivity.mChildContainers.add(activityContainer);
-        return activityContainer;
-    }
-
-    void removeChildActivityContainers(ActivityRecord parentActivity) {
-        final ArrayList<ActivityContainer> childStacks = parentActivity.mChildContainers;
-        for (int containerNdx = childStacks.size() - 1; containerNdx >= 0; --containerNdx) {
-            ActivityContainer container = childStacks.remove(containerNdx);
-            if (DEBUG_CONTAINERS) Slog.d(TAG_CONTAINERS, "removeChildActivityContainers: removing "
-                    + container);
-            container.release();
-        }
-    }
-
-    void deleteActivityContainerRecord(int stackId) {
-        if (DEBUG_CONTAINERS) Slog.d(TAG_CONTAINERS,
-                "deleteActivityContainerRecord: callers=" + Debug.getCallers(4));
-        mActivityContainers.remove(stackId);
-    }
-
     void resizeStackLocked(int stackId, Rect bounds, Rect tempTaskBounds, Rect tempTaskInsetBounds,
             boolean preserveWindows, boolean allowResizeInDockedMode, boolean deferResume) {
         if (stackId == DOCKED_STACK_ID) {
@@ -2638,12 +2622,18 @@
         if (activityDisplay == null) {
             return null;
         }
+        return createStack(stackId, activityDisplay, onTop);
 
-        final ActivityContainer activityContainer =
-                new ActivityContainer(stackId, activityDisplay, onTop);
-        return activityContainer.mStack;
     }
 
+    ActivityStack createStack(int stackId, ActivityDisplay display, boolean onTop) {
+        switch (stackId) {
+            case PINNED_STACK_ID:
+                return new PinnedActivityStack(display, stackId, this, mRecentTasks, onTop);
+            default:
+                return new ActivityStack(display, stackId, this, mRecentTasks, onTop);
+        }
+    }
 
     void removeStackInSurfaceTransaction(int stackId) {
         final ActivityStack stack = getStack(stackId);
@@ -2871,23 +2861,24 @@
             throw new IllegalArgumentException("moveStackToDisplayLocked: Unknown displayId="
                     + displayId);
         }
-        final ActivityContainer activityContainer = mActivityContainers.get(stackId);
-        if (activityContainer != null) {
-            if (activityContainer.isAttachedLocked()) {
-                if (activityContainer.getDisplayId() == displayId) {
-                    throw new IllegalArgumentException("Trying to move stackId=" + stackId
-                            + " to its current displayId=" + displayId);
-                }
-
-                activityContainer.moveToDisplayLocked(activityDisplay, onTop);
-            } else {
-                throw new IllegalStateException("moveStackToDisplayLocked: Stack with stackId="
-                        + stackId + " is not attached to any display.");
-            }
-        } else {
+        final ActivityStack stack = mStacks.get(stackId);
+        if (stack == null) {
             throw new IllegalArgumentException("moveStackToDisplayLocked: Unknown stackId="
                     + stackId);
         }
+
+        final ActivityDisplay currentDisplay = stack.getDisplay();
+        if (currentDisplay == null) {
+            throw new IllegalStateException("moveStackToDisplayLocked: Stack with stack=" + stack
+                    + " is not attached to any display.");
+        }
+
+        if (currentDisplay.mDisplayId == displayId) {
+            throw new IllegalArgumentException("Trying to move stack=" + stack
+                    + " to its current displayId=" + displayId);
+        }
+
+        stack.reparent(activityDisplay, onTop);
         // TODO(multi-display): resize stacks properly if moved from split-screen.
     }
 
@@ -2915,7 +2906,6 @@
         // Ensure that we're not moving a task to a dynamic stack if device doesn't support
         // multi-display.
         // TODO(multi-display): Support non-dynamic stacks on secondary displays.
-        // TODO: Check ActivityView after fixing b/35349678.
         if (StackId.isDynamicStack(stackId) && !mService.mSupportsMultiDisplay) {
             throw new IllegalArgumentException("Device doesn't support multi-display, can not"
                     + " reparent task=" + task + " to stackId=" + stackId);
@@ -2989,13 +2979,6 @@
 
         try {
             final TaskRecord task = r.getTask();
-
-            if (r == task.getStack().getVisibleBehindActivity()) {
-                // An activity can't be pinned and visible behind at the same time. Go ahead and
-                // release it from been visible behind before pinning.
-                requestVisibleBehindLocked(r, false);
-            }
-
             // Resize the pinned stack to match the current size of the task the activity we are
             // going to be moving is currently contained in. We do this to have the right starting
             // animation bounds for the pinned stack to the desired bounds the caller wants.
@@ -3010,7 +2993,7 @@
                 // while pausing because that changes the focused stack and may prevent the new
                 // starting activity from resuming.
                 if (moveHomeStackToFront && task.getTaskToReturnTo() == HOME_ACTIVITY_TYPE
-                        && (r.state == RESUMED || !r.supportsPictureInPictureWhilePausing)) {
+                        && (r.state == RESUMED || !r.supportsEnterPipOnTaskSwitch)) {
                     // Move the home stack forward if the task we just moved to the pinned stack
                     // was launched from home so home should be visible behind it.
                     moveHomeStackToFront(reason);
@@ -3039,7 +3022,7 @@
 
             // Reset the state that indicates it can enter PiP while pausing after we've moved it
             // to the pinned stack
-            r.supportsPictureInPictureWhilePausing = false;
+            r.supportsEnterPipOnTaskSwitch = false;
         } finally {
             mWindowManager.continueSurfaceLayout();
         }
@@ -3059,7 +3042,7 @@
         ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
         resumeFocusedStackTopActivityLocked();
 
-        mService.mTaskChangeNotificationController.notifyActivityPinned(r.packageName,
+        mService.mTaskChangeNotificationController.notifyActivityPinned(r.packageName, r.userId,
                 r.getTask().taskId);
     }
 
@@ -3106,11 +3089,6 @@
                             + stack);
                     continue;
                 }
-                if (!stack.mActivityContainer.isEligibleForNewTasks()) {
-                    if (DEBUG_TASKS) Slog.d(TAG_TASKS,
-                            "Skipping stack: (new task not allowed) " + stack);
-                    continue;
-                }
                 stack.findTaskLocked(r, mTmpFindTaskResult);
                 // It is possible to have tasks in multiple stacks with the same root affinity, so
                 // we should keep looking after finding an affinity match to see if there is a
@@ -3164,6 +3142,16 @@
         return null;
     }
 
+    boolean hasAwakeDisplay() {
+        for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
+            final ActivityDisplay display = mActivityDisplays.valueAt(displayNdx);
+            if (!display.shouldSleep()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     void goingToSleepLocked() {
         scheduleSleepTimeout();
         if (!mGoingToSleep.isHeld()) {
@@ -3176,7 +3164,16 @@
                 mService.mHandler.removeMessages(LAUNCH_TIMEOUT_MSG);
             }
         }
-        checkReadyForSleepLocked();
+
+        applySleepTokensLocked(false /* applyToStacks */);
+
+        checkReadyForSleepLocked(true /* allowDelay */);
+    }
+
+    void prepareForShutdownLocked() {
+        for (int i = 0; i < mActivityDisplays.size(); i++) {
+            createSleepTokenLocked("shutdown", mActivityDisplays.keyAt(i));
+        }
     }
 
     boolean shutdownLocked(int timeout) {
@@ -3185,14 +3182,7 @@
         boolean timedout = false;
         final long endTime = System.currentTimeMillis() + timeout;
         while (true) {
-            boolean cantShutdown = false;
-            for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
-                final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
-                for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
-                    cantShutdown |= stacks.get(stackNdx).checkReadyForSleepLocked();
-                }
-            }
-            if (cantShutdown) {
+            if (!putStacksToSleepLocked(true /* allowDelay */, true /* shuttingDown */)) {
                 long timeRemaining = endTime - System.currentTimeMillis();
                 if (timeRemaining > 0) {
                     try {
@@ -3210,8 +3200,7 @@
         }
 
         // Force checkReadyForSleep to complete.
-        mSleepTimeout = true;
-        checkReadyForSleepLocked();
+        checkReadyForSleepLocked(false /* allowDelay */);
 
         return timedout;
     }
@@ -3221,69 +3210,72 @@
         if (mGoingToSleep.isHeld()) {
             mGoingToSleep.release();
         }
+    }
+
+    void applySleepTokensLocked(boolean applyToStacks) {
         for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
-            final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
+            // Set the sleeping state of the display.
+            final ActivityDisplay display = mActivityDisplays.valueAt(displayNdx);
+            final boolean displayShouldSleep = display.shouldSleep();
+            if (displayShouldSleep == display.isSleeping()) {
+                continue;
+            }
+            display.setIsSleeping(displayShouldSleep);
+
+            if (!applyToStacks) {
+                continue;
+            }
+
+            // Set the sleeping state of the stacks on the display.
+            final ArrayList<ActivityStack> stacks = display.mStacks;
             for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
                 final ActivityStack stack = stacks.get(stackNdx);
-                stack.awakeFromSleepingLocked();
-                if (isFocusedStack(stack)) {
-                    resumeFocusedStackTopActivityLocked();
+                if (displayShouldSleep) {
+                    stack.goToSleepIfPossible(false /* shuttingDown */);
+                } else {
+                    stack.awakeFromSleepingLocked();
+                    if (isFocusedStack(stack)) {
+                        resumeFocusedStackTopActivityLocked();
+                    }
+                }
+            }
+
+            if (displayShouldSleep || mGoingToSleepActivities.isEmpty()) {
+                continue;
+            }
+            // The display is awake now, so clean up the going to sleep list.
+            for (Iterator<ActivityRecord> it = mGoingToSleepActivities.iterator(); it.hasNext(); ) {
+                final ActivityRecord r = it.next();
+                if (r.getDisplayId() == display.mDisplayId) {
+                    it.remove();
                 }
             }
         }
-        mGoingToSleepActivities.clear();
     }
 
     void activitySleptLocked(ActivityRecord r) {
         mGoingToSleepActivities.remove(r);
-        checkReadyForSleepLocked();
+        final ActivityStack s = r.getStack();
+        if (s != null) {
+            s.checkReadyForSleep();
+        } else {
+            checkReadyForSleepLocked(true);
+        }
     }
 
-    void checkReadyForSleepLocked() {
+    void checkReadyForSleepLocked(boolean allowDelay) {
         if (!mService.isSleepingOrShuttingDownLocked()) {
             // Do not care.
             return;
         }
 
-        if (!mSleepTimeout) {
-            boolean dontSleep = false;
-            for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
-                final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
-                for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
-                    dontSleep |= stacks.get(stackNdx).checkReadyForSleepLocked();
-                }
-            }
-
-            if (mStoppingActivities.size() > 0) {
-                // Still need to tell some activities to stop; can't sleep yet.
-                if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Sleep still need to stop "
-                        + mStoppingActivities.size() + " activities");
-                scheduleIdleLocked();
-                dontSleep = true;
-            }
-
-            if (mGoingToSleepActivities.size() > 0) {
-                // Still need to tell some activities to sleep; can't sleep yet.
-                if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Sleep still need to sleep "
-                        + mGoingToSleepActivities.size() + " activities");
-                dontSleep = true;
-            }
-
-            if (dontSleep) {
-                return;
-            }
+        if (!putStacksToSleepLocked(allowDelay, false /* shuttingDown */)) {
+            return;
         }
 
         // Send launch end powerhint before going sleep
         mService.mActivityStarter.sendPowerHintForLaunchEndIfNeeded();
 
-        for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
-            final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
-            for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
-                stacks.get(stackNdx).goToSleep();
-            }
-        }
-
         removeSleepTimeouts();
 
         if (mGoingToSleep.isHeld()) {
@@ -3294,7 +3286,27 @@
         }
     }
 
+    // Tries to put all activity stacks to sleep. Returns true if all stacks were
+    // successfully put to sleep.
+    private boolean putStacksToSleepLocked(boolean allowDelay, boolean shuttingDown) {
+        boolean allSleep = true;
+        for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
+            final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
+            for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
+                if (allowDelay) {
+                    allSleep &= stacks.get(stackNdx).goToSleepIfPossible(shuttingDown);
+                } else {
+                    stacks.get(stackNdx).goToSleep();
+                }
+            }
+        }
+        return allSleep;
+    }
+
     boolean reportResumedActivityLocked(ActivityRecord r) {
+        // A resumed activity cannot be stopping. remove from list
+        mStoppingActivities.remove(r);
+
         final ActivityStack stack = r.getStack();
         if (isFocusedStack(stack)) {
             mService.updateUsageStats(r, true);
@@ -3318,70 +3330,6 @@
         }
     }
 
-    boolean requestVisibleBehindLocked(ActivityRecord r, boolean visible) {
-        final ActivityStack stack = r.getStack();
-        if (stack == null) {
-            if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND,
-                    "requestVisibleBehind: r=" + r + " visible=" + visible + " stack is null");
-            return false;
-        }
-
-        if (visible && !StackId.activitiesCanRequestVisibleBehind(stack.mStackId)) {
-            if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "requestVisibleBehind: r=" + r
-                    + " visible=" + visible + " stackId=" + stack.mStackId
-                    + " can't contain visible behind activities");
-            return false;
-        }
-
-        final boolean isVisible = stack.hasVisibleBehindActivity();
-        if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND,
-                "requestVisibleBehind r=" + r + " visible=" + visible + " isVisible=" + isVisible);
-
-        final ActivityRecord top = topRunningActivityLocked();
-        if (top == null || top == r || (visible == isVisible)) {
-            if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND, "requestVisibleBehind: quick return");
-            stack.setVisibleBehindActivity(visible ? r : null);
-            return true;
-        }
-
-        // A non-top activity is reporting a visibility change.
-        if (visible && top.fullscreen) {
-            // Let the caller know that it can't be seen.
-            if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND,
-                    "requestVisibleBehind: returning top.fullscreen=" + top.fullscreen
-                    + " top.state=" + top.state + " top.app=" + top.app + " top.app.thread="
-                    + top.app.thread);
-            return false;
-        } else if (!visible && stack.getVisibleBehindActivity() != r) {
-            // Only the activity set as currently visible behind should actively reset its
-            // visible behind state.
-            if (DEBUG_VISIBLE_BEHIND) Slog.d(TAG_VISIBLE_BEHIND,
-                    "requestVisibleBehind: returning visible=" + visible
-                    + " stack.getVisibleBehindActivity()=" + stack.getVisibleBehindActivity()
-                    + " r=" + r);
-            return false;
-        }
-
-        stack.setVisibleBehindActivity(visible ? r : null);
-        if (!visible) {
-            // If there is a translucent home activity, we need to force it stop being translucent,
-            // because we can't depend on the application to necessarily perform that operation.
-            // Check out b/14469711 for details.
-            final ActivityRecord next = stack.findNextTranslucentActivity(r);
-            if (next != null && next.isHomeActivity()) {
-                mService.convertFromTranslucent(next.appToken);
-            }
-        }
-        if (top.app != null && top.app.thread != null) {
-            // Notify the top app of the change.
-            try {
-                top.app.thread.scheduleBackgroundVisibleBehindChanged(top.appToken, visible);
-            } catch (RemoteException e) {
-            }
-        }
-        return true;
-    }
-
     // Called when WindowManager has finished animating the launchingBehind activity to the back.
     private void handleLaunchTaskBehindCompleteLocked(ActivityRecord r) {
         final TaskRecord task = r.getTask();
@@ -3618,21 +3566,27 @@
                     s.setVisibility(false);
                 }
             }
-            if ((!waitingVisible || mService.isSleepingOrShuttingDownLocked()) && remove) {
-                if (!processPausingActivities && s.state == PAUSING) {
-                    // Defer processing pausing activities in this iteration and reschedule
-                    // a delayed idle to reprocess it again
-                    removeTimeoutsForActivityLocked(idleActivity);
-                    scheduleIdleTimeoutLocked(idleActivity);
-                    continue;
-                }
+            if (remove) {
+                final ActivityStack stack = s.getStack();
+                final boolean shouldSleepOrShutDown = stack != null
+                        ? stack.shouldSleepOrShutDownActivities()
+                        : mService.isSleepingOrShuttingDownLocked();
+                if (!waitingVisible || shouldSleepOrShutDown) {
+                    if (!processPausingActivities && s.state == PAUSING) {
+                        // Defer processing pausing activities in this iteration and reschedule
+                        // a delayed idle to reprocess it again
+                        removeTimeoutsForActivityLocked(idleActivity);
+                        scheduleIdleTimeoutLocked(idleActivity);
+                        continue;
+                    }
 
-                if (DEBUG_STATES) Slog.v(TAG, "Ready to stop: " + s);
-                if (stops == null) {
-                    stops = new ArrayList<>();
+                    if (DEBUG_STATES) Slog.v(TAG, "Ready to stop: " + s);
+                    if (stops == null) {
+                        stops = new ArrayList<>();
+                    }
+                    stops.add(s);
+                    mStoppingActivities.remove(activityNdx);
                 }
-                stops.add(s);
-                mStoppingActivities.remove(activityNdx);
             }
         }
 
@@ -3685,11 +3639,10 @@
     public void dump(PrintWriter pw, String prefix) {
         pw.print(prefix); pw.print("mFocusedStack=" + mFocusedStack);
                 pw.print(" mLastFocusedStack="); pw.println(mLastFocusedStack);
-        pw.print(prefix); pw.println("mSleepTimeout=" + mSleepTimeout);
         pw.print(prefix);
         pw.println("mCurTaskIdForUser=" + mCurTaskIdForUser);
         pw.print(prefix); pw.println("mUserStackInFront=" + mUserStackInFront);
-        pw.print(prefix); pw.println("mActivityContainers=" + mActivityContainers);
+        pw.print(prefix); pw.println("mStacks=" + mStacks);
         pw.print(prefix); pw.print("mLockTaskModeState=" + lockTaskModeToString());
         final SparseArray<String[]> packages = mService.mLockTaskPackages;
         if (packages.size() > 0) {
@@ -3782,6 +3735,8 @@
                 stackHeader.append("\n");
                 stackHeader.append("  mFullscreen=" + stack.mFullscreen);
                 stackHeader.append("\n");
+                stackHeader.append("  isSleeping=" + stack.shouldSleepActivities());
+                stackHeader.append("\n");
                 stackHeader.append("  mBounds=" + stack.mBounds);
 
                 final boolean printedStackHeader = stack.dumpActivitiesLocked(fd, pw, dumpAll,
@@ -3833,8 +3788,6 @@
                 "  Activities waiting for another to become visible:", null);
         printed |= dumpHistoryList(fd, pw, mGoingToSleepActivities, "  ", "Sleep", false, !dumpAll,
                 false, dumpPackage, true, "  Activities waiting to sleep:", null);
-        printed |= dumpHistoryList(fd, pw, mGoingToSleepActivities, "  ", "Sleep", false, !dumpAll,
-                false, dumpPackage, true, "  Activities waiting to sleep:", null);
 
         return printed;
     }
@@ -3945,7 +3898,6 @@
     }
 
     void removeSleepTimeouts() {
-        mSleepTimeout = false;
         mHandler.removeMessages(SLEEP_TIMEOUT_MSG);
     }
 
@@ -3983,6 +3935,10 @@
         return getActivityDisplayOrCreateLocked(displayId) != null;
     }
 
+    ActivityDisplay getActivityDisplay(int displayId) {
+        return mActivityDisplays.get(displayId);
+    }
+
     /**
      * Get an existing instance of {@link ActivityDisplay} or create new if there is a
      * corresponding record in display manager.
@@ -4043,6 +3999,9 @@
                         moveTasksToFullscreenStackLocked(stack.getStackId(), true /* onTop */);
                     }
                 }
+
+                releaseSleepTokens(activityDisplay);
+
                 mActivityDisplays.remove(displayId);
                 mWindowManager.onDisplayRemoved(displayId);
             }
@@ -4053,12 +4012,60 @@
         synchronized (mService) {
             ActivityDisplay activityDisplay = mActivityDisplays.get(displayId);
             if (activityDisplay != null) {
+                // The window policy is responsible for stopping activities on the default display
+                if (displayId != Display.DEFAULT_DISPLAY) {
+                    int displayState = activityDisplay.mDisplay.getState();
+                    if (displayState == Display.STATE_OFF && activityDisplay.mOffToken == null) {
+                        activityDisplay.mOffToken =
+                                mService.acquireSleepToken("Display-off", displayId);
+                    } else if (displayState == Display.STATE_ON
+                            && activityDisplay.mOffToken != null) {
+                        activityDisplay.mOffToken.release();
+                        activityDisplay.mOffToken = null;
+                    }
+                }
                 // TODO: Update the bounds.
             }
             mWindowManager.onDisplayChanged(displayId);
         }
     }
 
+    SleepToken createSleepTokenLocked(String tag, int displayId) {
+        ActivityDisplay display = mActivityDisplays.get(displayId);
+        if (display == null) {
+            throw new IllegalArgumentException("Invalid display: " + displayId);
+        }
+
+        final SleepTokenImpl token = new SleepTokenImpl(tag, displayId);
+        mSleepTokens.add(token);
+        display.mAllSleepTokens.add(token);
+        return token;
+    }
+
+    private void removeSleepTokenLocked(SleepTokenImpl token) {
+        mSleepTokens.remove(token);
+
+        ActivityDisplay display = mActivityDisplays.get(token.mDisplayId);
+        if (display != null) {
+            display.mAllSleepTokens.remove(token);
+            if (display.mAllSleepTokens.isEmpty()) {
+                mService.updateSleepIfNeededLocked();
+            }
+        }
+    }
+
+    private void releaseSleepTokens(ActivityDisplay display) {
+        if (display.mAllSleepTokens.isEmpty()) {
+            return;
+        }
+        for (SleepTokenImpl token : display.mAllSleepTokens) {
+            mSleepTokens.remove(token);
+        }
+        display.mAllSleepTokens.clear();
+
+        mService.updateSleepIfNeededLocked();
+    }
+
     private StackInfo getStackInfoLocked(ActivityStack stack) {
         final int displayId = stack.mDisplayId;
         final ActivityDisplay display = mActivityDisplays.get(displayId);
@@ -4364,9 +4371,9 @@
 
     void activityRelaunchedLocked(IBinder token) {
         mWindowManager.notifyAppRelaunchingFinished(token);
-        if (mService.isSleepingOrShuttingDownLocked()) {
-            final ActivityRecord r = ActivityRecord.isInStackLocked(token);
-            if (r != null) {
+        final ActivityRecord r = ActivityRecord.isInStackLocked(token);
+        if (r != null) {
+            if (r.getStack().shouldSleepOrShutDownActivities()) {
                 r.setSleeping(true, true);
             }
         }
@@ -4406,31 +4413,29 @@
             return;
         }
 
-        scheduleUpdatePictureInPictureModeIfNeeded(task, stack.mBounds, false /* immediate */);
+        scheduleUpdatePictureInPictureModeIfNeeded(task, stack.mBounds);
     }
 
-    void scheduleUpdatePictureInPictureModeIfNeeded(TaskRecord task, Rect targetStackBounds,
-            boolean immediate) {
-
-        if (immediate) {
-            mHandler.removeMessages(REPORT_PIP_MODE_CHANGED_MSG);
-            for (int i = task.mActivities.size() - 1; i >= 0; i--) {
-                final ActivityRecord r = task.mActivities.get(i);
-                if (r.app != null && r.app.thread != null) {
-                    r.updatePictureInPictureMode(targetStackBounds);
-                }
+    void scheduleUpdatePictureInPictureModeIfNeeded(TaskRecord task, Rect targetStackBounds) {
+        for (int i = task.mActivities.size() - 1; i >= 0; i--) {
+            final ActivityRecord r = task.mActivities.get(i);
+            if (r.app != null && r.app.thread != null) {
+                mPipModeChangedActivities.add(r);
             }
-        } else {
-            for (int i = task.mActivities.size() - 1; i >= 0; i--) {
-                final ActivityRecord r = task.mActivities.get(i);
-                if (r.app != null && r.app.thread != null) {
-                    mPipModeChangedActivities.add(r);
-                }
-            }
-            mPipModeChangedTargetStackBounds = targetStackBounds;
+        }
+        mPipModeChangedTargetStackBounds = targetStackBounds;
 
-            if (!mHandler.hasMessages(REPORT_PIP_MODE_CHANGED_MSG)) {
-                mHandler.sendEmptyMessage(REPORT_PIP_MODE_CHANGED_MSG);
+        if (!mHandler.hasMessages(REPORT_PIP_MODE_CHANGED_MSG)) {
+            mHandler.sendEmptyMessage(REPORT_PIP_MODE_CHANGED_MSG);
+        }
+    }
+
+    void updatePictureInPictureMode(TaskRecord task, Rect targetStackBounds, boolean forceUpdate) {
+        mHandler.removeMessages(REPORT_PIP_MODE_CHANGED_MSG);
+        for (int i = task.mActivities.size() - 1; i >= 0; i--) {
+            final ActivityRecord r = task.mActivities.get(i);
+            if (r.app != null && r.app.thread != null) {
+                r.updatePictureInPictureMode(targetStackBounds, forceUpdate);
             }
         }
     }
@@ -4439,6 +4444,31 @@
         mIsDockMinimized = minimized;
     }
 
+    void wakeUp(String reason) {
+        mPowerManager.wakeUp(SystemClock.uptimeMillis(), "android.server.am:TURN_ON:" + reason);
+    }
+
+    /**
+     * Begin deferring resume to avoid duplicate resumes in one pass.
+     */
+    private void beginDeferResume() {
+        mDeferResumeCount++;
+    }
+
+    /**
+     * End deferring resume and determine if resume can be called.
+     */
+    private void endDeferResume() {
+        mDeferResumeCount--;
+    }
+
+    /**
+     * @return True if resume can be called.
+     */
+    private boolean readyToResume() {
+        return mDeferResumeCount == 0;
+    }
+
     private final class ActivityStackSupervisorHandler extends Handler {
 
         public ActivityStackSupervisorHandler(Looper looper) {
@@ -4467,7 +4497,8 @@
                     synchronized (mService) {
                         for (int i = mPipModeChangedActivities.size() - 1; i >= 0; i--) {
                             final ActivityRecord r = mPipModeChangedActivities.remove(i);
-                            r.updatePictureInPictureMode(mPipModeChangedTargetStackBounds);
+                            r.updatePictureInPictureMode(mPipModeChangedTargetStackBounds,
+                                    false /* forceUpdate */);
                         }
                     }
                 } break;
@@ -4493,8 +4524,7 @@
                     synchronized (mService) {
                         if (mService.isSleepingOrShuttingDownLocked()) {
                             Slog.w(TAG, "Sleep timeout!  Sleeping now.");
-                            mSleepTimeout = true;
-                            checkReadyForSleepLocked();
+                            checkReadyForSleepLocked(false /* allowDelay */);
                         }
                     }
                 } break;
@@ -4519,16 +4549,6 @@
                 case HANDLE_DISPLAY_REMOVED: {
                     handleDisplayRemoved(msg.arg1);
                 } break;
-                case CONTAINER_CALLBACK_VISIBILITY: {
-                    final ActivityContainer container = (ActivityContainer) msg.obj;
-                    final IActivityContainerCallback callback = container.mCallback;
-                    if (callback != null) {
-                        try {
-                            callback.setVisible(container.asBinder(), msg.arg1 == 1);
-                        } catch (RemoteException e) {
-                        }
-                    }
-                } break;
                 case LOCK_TASK_START_MSG: {
                     // When lock task starts, we disable the status bars.
                     try {
@@ -4594,16 +4614,6 @@
                     }
                     mLockTaskNotify.showToast(LOCK_TASK_MODE_PINNED);
                 } break;
-                case CONTAINER_CALLBACK_TASK_LIST_EMPTY: {
-                    final ActivityContainer container = (ActivityContainer) msg.obj;
-                    final IActivityContainerCallback callback = container.mCallback;
-                    if (callback != null) {
-                        try {
-                            callback.onAllActivitiesComplete(container.asBinder());
-                        } catch (RemoteException e) {
-                        }
-                    }
-                } break;
                 case LAUNCH_TASK_BEHIND_COMPLETE: {
                     synchronized (mService) {
                         ActivityRecord r = ActivityRecord.forTokenLocked((IBinder) msg.obj);
@@ -4612,6 +4622,7 @@
                         }
                     }
                 } break;
+
             }
         }
     }
@@ -4620,9 +4631,10 @@
         // This functionality should be kept consistent with
         // com.android.settings.security.ScreenPinningSettings (see b/127605586)
         try {
-            return Settings.Secure.getInt(
-                    mService.mContext.getContentResolver(),
-                    Settings.Secure.LOCK_TO_APP_EXIT_LOCKED) != 0;
+            return Settings.Secure.getIntForUser(
+                mService.mContext.getContentResolver(),
+                Settings.Secure.LOCK_TO_APP_EXIT_LOCKED,
+                UserHandle.USER_CURRENT) != 0;
         } catch (Settings.SettingNotFoundException e) {
             // Log to SafetyNet for b/127605586
             android.util.EventLog.writeEvent(0x534e4554, "127605586", -1, "");
@@ -4631,340 +4643,7 @@
         }
     }
 
-    class ActivityContainer extends android.app.IActivityContainer.Stub {
-        final static int FORCE_NEW_TASK_FLAGS = FLAG_ACTIVITY_NEW_TASK |
-                FLAG_ACTIVITY_MULTIPLE_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION;
-        final int mStackId;
-        IActivityContainerCallback mCallback = null;
-        ActivityStack mStack;
-        ActivityRecord mParentActivity = null;
-        String mIdString;
-
-        boolean mVisible = true;
-
-        /** Display this ActivityStack is currently on. Null if not attached to a Display. */
-        ActivityDisplay mActivityDisplay;
-
-        final static int CONTAINER_STATE_HAS_SURFACE = 0;
-        final static int CONTAINER_STATE_NO_SURFACE = 1;
-        final static int CONTAINER_STATE_FINISHING = 2;
-        int mContainerState = CONTAINER_STATE_HAS_SURFACE;
-
-        ActivityContainer(int stackId, ActivityDisplay activityDisplay, boolean onTop) {
-            synchronized (mService) {
-                mStackId = stackId;
-                mActivityDisplay = activityDisplay;
-                mIdString = "ActivtyContainer{" + mStackId + "}";
-
-                createStack(stackId, onTop);
-                if (DEBUG_STACK) Slog.d(TAG_STACK, "Creating " + this);
-            }
-        }
-
-        protected void createStack(int stackId, boolean onTop) {
-            switch (stackId) {
-                case PINNED_STACK_ID:
-                    new PinnedActivityStack(this, mRecentTasks, onTop);
-                    break;
-                default:
-                    new ActivityStack(this, mRecentTasks, onTop);
-                    break;
-            }
-        }
-
-        /**
-         * Adds the stack to specified display. Also calls WindowManager to do the same from
-         * {@link ActivityStack#reparent(ActivityDisplay, boolean)}.
-         * @param activityDisplay The display to add the stack to.
-         */
-        void addToDisplayLocked(ActivityDisplay activityDisplay) {
-            if (DEBUG_STACK) Slog.d(TAG_STACK, "addToDisplayLocked: " + this
-                    + " to display=" + activityDisplay);
-            if (mActivityDisplay != null) {
-                throw new IllegalStateException("ActivityContainer is already attached, " +
-                        "displayId=" + mActivityDisplay.mDisplayId);
-            }
-            mActivityDisplay = activityDisplay;
-            mStack.reparent(activityDisplay, true /* onTop */);
-        }
-
-        @Override
-        public void addToDisplay(int displayId) {
-            synchronized (mService) {
-                final ActivityDisplay activityDisplay = getActivityDisplayOrCreateLocked(displayId);
-                if (activityDisplay == null) {
-                    return;
-                }
-                addToDisplayLocked(activityDisplay);
-            }
-        }
-
-        @Override
-        public int getDisplayId() {
-            synchronized (mService) {
-                if (mActivityDisplay != null) {
-                    return mActivityDisplay.mDisplayId;
-                }
-            }
-            return -1;
-        }
-
-        @Override
-        public int getStackId() {
-            synchronized (mService) {
-                return mStackId;
-            }
-        }
-
-        @Override
-        public boolean injectEvent(InputEvent event) {
-            final long origId = Binder.clearCallingIdentity();
-            try {
-                synchronized (mService) {
-                    if (mActivityDisplay != null) {
-                        return mInputManagerInternal.injectInputEvent(event,
-                                mActivityDisplay.mDisplayId,
-                                InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
-                    }
-                }
-                return false;
-            } finally {
-                Binder.restoreCallingIdentity(origId);
-            }
-        }
-
-        @Override
-        public void release() {
-            synchronized (mService) {
-                if (mContainerState == CONTAINER_STATE_FINISHING) {
-                    return;
-                }
-                mContainerState = CONTAINER_STATE_FINISHING;
-
-                long origId = Binder.clearCallingIdentity();
-                try {
-                    mStack.finishAllActivitiesLocked(false);
-                    mService.mActivityStarter.removePendingActivityLaunchesLocked(mStack);
-                } finally {
-                    Binder.restoreCallingIdentity(origId);
-                }
-            }
-        }
-
-        /**
-         * Remove the stack completely. Must be called only when there are no tasks left in it,
-         * as this method does not finish running activities.
-         */
-        void removeLocked() {
-            if (DEBUG_STACK) Slog.d(TAG_STACK, "removeLocked: " + this + " from display="
-                    + mActivityDisplay + " Callers=" + Debug.getCallers(2));
-            if (mActivityDisplay != null) {
-                removeFromDisplayLocked();
-            }
-            mStack.remove();
-        }
-
-        /**
-         * Remove the stack from its current {@link ActivityDisplay}, so it can be either destroyed
-         * completely or re-parented.
-         */
-        private void removeFromDisplayLocked() {
-            if (DEBUG_STACK) Slog.d(TAG_STACK, "removeFromDisplayLocked: " + this
-                    + " current displayId=" + mActivityDisplay.mDisplayId);
-
-            mActivityDisplay.detachStack(mStack);
-            mActivityDisplay = null;
-        }
-
-        /**
-         * Move the stack to specified display.
-         * @param activityDisplay Target display to move the stack to.
-         * @param onTop Indicates whether container should be place on top or on bottom.
-         */
-        void moveToDisplayLocked(ActivityDisplay activityDisplay, boolean onTop) {
-            if (DEBUG_STACK) Slog.d(TAG_STACK, "moveToDisplayLocked: " + this + " from display="
-                    + mActivityDisplay + " to display=" + activityDisplay
-                    + " Callers=" + Debug.getCallers(2));
-
-            removeFromDisplayLocked();
-
-            mActivityDisplay = activityDisplay;
-            mStack.reparent(activityDisplay, onTop);
-        }
-
-        @Override
-        public final int startActivity(Intent intent) {
-            return mService.startActivity(intent, this);
-        }
-
-        @Override
-        public final int startActivityIntentSender(IIntentSender intentSender)
-                throws TransactionTooLargeException {
-            mService.enforceNotIsolatedCaller("ActivityContainer.startActivityIntentSender");
-
-            if (!(intentSender instanceof PendingIntentRecord)) {
-                throw new IllegalArgumentException("Bad PendingIntent object");
-            }
-
-            final int userId = mService.mUserController.handleIncomingUser(Binder.getCallingPid(),
-                    Binder.getCallingUid(), mCurrentUser, false,
-                    ActivityManagerService.ALLOW_FULL_ONLY, "ActivityContainer", null);
-
-            final PendingIntentRecord pendingIntent = (PendingIntentRecord) intentSender;
-            checkEmbeddedAllowedInner(userId, pendingIntent.key.requestIntent,
-                    pendingIntent.key.requestResolvedType);
-
-            return pendingIntent.sendInner(0, null, null, null, null, null, null, null, 0,
-                    FORCE_NEW_TASK_FLAGS, FORCE_NEW_TASK_FLAGS, null, this);
-        }
-
-        void checkEmbeddedAllowedInner(int userId, Intent intent, String resolvedType) {
-            ActivityInfo aInfo = resolveActivity(intent, resolvedType, 0, null, userId);
-            if (aInfo != null && (aInfo.flags & ActivityInfo.FLAG_ALLOW_EMBEDDED) == 0) {
-                throw new SecurityException(
-                        "Attempt to embed activity that has not set allowEmbedded=\"true\"");
-            }
-        }
-
-        @Override
-        public IBinder asBinder() {
-            return this;
-        }
-
-        @Override
-        public void setSurface(Surface surface, int width, int height, int density) {
-            mService.enforceNotIsolatedCaller("ActivityContainer.attachToSurface");
-        }
-
-        ActivityStackSupervisor getOuter() {
-            return ActivityStackSupervisor.this;
-        }
-
-        boolean isAttachedLocked() {
-            return mActivityDisplay != null;
-        }
-
-        // TODO: Make sure every change to ActivityRecord.visible results in a call to this.
-        void setVisible(boolean visible) {
-            if (mVisible != visible) {
-                mVisible = visible;
-                if (mCallback != null) {
-                    mHandler.obtainMessage(CONTAINER_CALLBACK_VISIBILITY, visible ? 1 : 0,
-                            0 /* unused */, this).sendToTarget();
-                }
-            }
-        }
-
-        void setDrawn() {
-        }
-
-        // You can always start a new task on a regular ActivityStack.
-        boolean isEligibleForNewTasks() {
-            return true;
-        }
-
-        void onTaskListEmptyLocked() {
-            removeLocked();
-            mHandler.obtainMessage(CONTAINER_CALLBACK_TASK_LIST_EMPTY, this).sendToTarget();
-        }
-
-        @Override
-        public String toString() {
-            return mIdString + (mActivityDisplay == null ? "N" : "A");
-        }
-    }
-
-    private class VirtualActivityContainer extends ActivityContainer {
-        Surface mSurface;
-        boolean mDrawn = false;
-
-        VirtualActivityContainer(ActivityRecord parent, IActivityContainerCallback callback) {
-            super(getNextStackId(), parent.getStack().mActivityContainer.mActivityDisplay,
-                    true /* onTop */);
-            mParentActivity = parent;
-            mCallback = callback;
-            mContainerState = CONTAINER_STATE_NO_SURFACE;
-            mIdString = "VirtualActivityContainer{" + mStackId + ", parent=" + mParentActivity + "}";
-        }
-
-        @Override
-        public void setSurface(Surface surface, int width, int height, int density) {
-            super.setSurface(surface, width, height, density);
-
-            synchronized (mService) {
-                final long origId = Binder.clearCallingIdentity();
-                try {
-                    setSurfaceLocked(surface, width, height, density);
-                } finally {
-                    Binder.restoreCallingIdentity(origId);
-                }
-            }
-        }
-
-        private void setSurfaceLocked(Surface surface, int width, int height, int density) {
-            if (mContainerState == CONTAINER_STATE_FINISHING) {
-                return;
-            }
-            VirtualActivityDisplay virtualActivityDisplay =
-                    (VirtualActivityDisplay) mActivityDisplay;
-            if (virtualActivityDisplay == null) {
-                virtualActivityDisplay =
-                        new VirtualActivityDisplay(width, height, density);
-                mActivityDisplay = virtualActivityDisplay;
-                mActivityDisplays.put(virtualActivityDisplay.mDisplayId, virtualActivityDisplay);
-                addToDisplayLocked(virtualActivityDisplay);
-            }
-
-            if (mSurface != null) {
-                mSurface.release();
-            }
-
-            mSurface = surface;
-            if (surface != null) {
-                resumeFocusedStackTopActivityLocked();
-            } else {
-                mContainerState = CONTAINER_STATE_NO_SURFACE;
-                ((VirtualActivityDisplay) mActivityDisplay).setSurface(null);
-                if (mStack.mPausingActivity == null && mStack.mResumedActivity != null) {
-                    mStack.startPausingLocked(false, true, null, false);
-                }
-            }
-
-            setSurfaceIfReadyLocked();
-
-            if (DEBUG_STACK) Slog.d(TAG_STACK,
-                    "setSurface: " + this + " to display=" + virtualActivityDisplay);
-        }
-
-        @Override
-        boolean isAttachedLocked() {
-            return mSurface != null && super.isAttachedLocked();
-        }
-
-        @Override
-        void setDrawn() {
-            synchronized (mService) {
-                mDrawn = true;
-                setSurfaceIfReadyLocked();
-            }
-        }
-
-        // Never start a new task on an ActivityView if it isn't explicitly specified.
-        @Override
-        boolean isEligibleForNewTasks() {
-            return false;
-        }
-
-        private void setSurfaceIfReadyLocked() {
-            if (DEBUG_STACK) Slog.v(TAG_STACK, "setSurfaceIfReadyLocked: mDrawn=" + mDrawn +
-                    " mContainerState=" + mContainerState + " mSurface=" + mSurface);
-            if (mDrawn && mSurface != null && mContainerState == CONTAINER_STATE_NO_SURFACE) {
-                ((VirtualActivityDisplay) mActivityDisplay).setSurface(mSurface);
-                mContainerState = CONTAINER_STATE_HAS_SURFACE;
-            }
-        }
-    }
-
+    // TODO: Move to its own file.
     /** Exactly one of these classes per Display in the system. Capable of holding zero or more
      * attached {@link ActivityStack}s */
     class ActivityDisplay extends ConfigurationContainer {
@@ -4976,12 +4655,19 @@
          * stacks, bottommost behind. Accessed directly by ActivityManager package classes */
         final ArrayList<ActivityStack> mStacks = new ArrayList<>();
 
-        ActivityRecord mVisibleBehindActivity;
-
         /** Array of all UIDs that are present on the display. */
         private IntArray mDisplayAccessUIDs = new IntArray();
 
+        /** All tokens used to put activities on this stack to sleep (including mOffToken) */
+        final ArrayList<SleepTokenImpl> mAllSleepTokens = new ArrayList<>();
+        /** The token acquired by ActivityStackSupervisor to put stacks on the display to sleep */
+        SleepToken mOffToken;
+
+        private boolean mSleeping;
+
+        @VisibleForTesting
         ActivityDisplay() {
+            mActivityDisplays.put(mDisplayId, this);
         }
 
         // After instantiation, check that mDisplay is not null before using this. The alternative
@@ -5003,20 +4689,14 @@
             if (DEBUG_STACK) Slog.v(TAG_STACK, "attachStack: attaching " + stack
                     + " to displayId=" + mDisplayId + " position=" + position);
             mStacks.add(position, stack);
+            mService.updateSleepIfNeededLocked();
         }
 
         void detachStack(ActivityStack stack) {
             if (DEBUG_STACK) Slog.v(TAG_STACK, "detachStack: detaching " + stack
                     + " from displayId=" + mDisplayId);
             mStacks.remove(stack);
-        }
-
-        void setVisibleBehindActivity(ActivityRecord r) {
-            mVisibleBehindActivity = r;
-        }
-
-        boolean hasVisibleBehindActivity() {
-            return mVisibleBehindActivity != null;
+            mService.updateSleepIfNeededLocked();
         }
 
         @Override
@@ -5064,42 +4744,18 @@
         boolean shouldDestroyContentOnRemove() {
             return mDisplay.getRemoveMode() == REMOVE_MODE_DESTROY_CONTENT;
         }
-    }
 
-    class VirtualActivityDisplay extends ActivityDisplay {
-        VirtualDisplay mVirtualDisplay;
-
-        VirtualActivityDisplay(int width, int height, int density) {
-            DisplayManagerGlobal dm = DisplayManagerGlobal.getInstance();
-            mVirtualDisplay = dm.createVirtualDisplay(mService.mContext, null /* projection */,
-                    VIRTUAL_DISPLAY_BASE_NAME, width, height, density, null /* surface */,
-                    DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC |
-                    DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY, null /* callback */,
-                    null /* handler */, null /* uniqueId */);
-
-            init(mVirtualDisplay.getDisplay());
-
-            mWindowManager.onDisplayAdded(mDisplayId);
+        boolean shouldSleep() {
+            return (mStacks.isEmpty() || !mAllSleepTokens.isEmpty())
+                    && (mService.mRunningVoice == null);
         }
 
-        void setSurface(Surface surface) {
-            if (mVirtualDisplay != null) {
-                mVirtualDisplay.setSurface(surface);
-            }
+        boolean isSleeping() {
+            return mSleeping;
         }
 
-        @Override
-        void detachStack(ActivityStack stack) {
-            super.detachStack(stack);
-            if (mVirtualDisplay != null) {
-                mVirtualDisplay.release();
-                mVirtualDisplay = null;
-            }
-        }
-
-        @Override
-        public String toString() {
-            return "VirtualActivityDisplay={" + mDisplayId + "}";
+        void setIsSleeping(boolean asleep) {
+            mSleeping = asleep;
         }
     }
 
@@ -5188,9 +4844,13 @@
                 mService.mActivityStarter.sendPowerHintForLaunchStartIfNeeded(true /* forceSend */,
                         targetActivity);
                 mActivityMetricsLogger.notifyActivityLaunching();
-                mService.moveTaskToFrontLocked(task.taskId, 0, bOptions, true /* fromRecents */);
-                mActivityMetricsLogger.notifyActivityLaunched(ActivityManager.START_TASK_TO_FRONT,
-                        targetActivity);
+                try {
+                    mService.moveTaskToFrontLocked(task.taskId, 0, bOptions,
+                            true /* fromRecents */);
+                } finally {
+                    mActivityMetricsLogger.notifyActivityLaunched(START_TASK_TO_FRONT,
+                            targetActivity);
+                }
 
                 // If we are launching the task in the docked stack, put it into resizing mode so
                 // the window renders full-screen with the background filling the void. Also only
@@ -5212,7 +4872,7 @@
             intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
             userId = task.userId;
             int result = mService.startActivityInPackage(callingUid, callingPackage, intent, null,
-                    null, null, 0, 0, bOptions, userId, null, task, "startActivityFromRecents");
+                    null, null, 0, 0, bOptions, userId, task, "startActivityFromRecents");
             if (launchStackId == DOCKED_STACK_ID) {
                 setResizingDuringAnimation(task);
             }
@@ -5282,4 +4942,30 @@
             mResult.dump(pw, prefix);
         }
     }
+
+    private final class SleepTokenImpl extends SleepToken {
+        private final String mTag;
+        private final long mAcquireTime;
+        private final int mDisplayId;
+
+        public SleepTokenImpl(String tag, int displayId) {
+            mTag = tag;
+            mDisplayId = displayId;
+            mAcquireTime = SystemClock.uptimeMillis();
+        }
+
+        @Override
+        public void release() {
+            synchronized (mService) {
+                removeSleepTokenLocked(this);
+            }
+        }
+
+        @Override
+        public String toString() {
+            return "{\"" + mTag + "\", display " + mDisplayId
+                    + ", acquire at " + TimeUtils.formatUptime(mAcquireTime) + "}";
+        }
+    }
+
 }
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index 76f65e2..fa2e04f 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -90,12 +90,10 @@
 import android.app.ActivityManager;
 import android.app.ActivityOptions;
 import android.app.AppGlobals;
-import android.app.IActivityContainer;
 import android.app.IApplicationThread;
 import android.app.PendingIntent;
 import android.app.ProfilerInfo;
 import android.app.WaitResult;
-import android.content.ComponentName;
 import android.content.IIntentSender;
 import android.content.Intent;
 import android.content.IntentSender;
@@ -138,6 +136,8 @@
  * an activity and associated task and stack.
  */
 class ActivityStarter {
+    public static final int PID_NULL = 0;
+
     private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityStarter" : TAG_AM;
     private static final String TAG_RESULTS = TAG + POSTFIX_RESULTS;
     private static final String TAG_FOCUS = TAG + POSTFIX_FOCUS;
@@ -188,6 +188,12 @@
     private boolean mAvoidMoveToFront;
     private boolean mPowerHintSent;
 
+    // We must track when we deliver the new intent since multiple code paths invoke
+    // {@link #deliverNewIntent}. This is due to early returns in the code path. This flag is used
+    // inside {@link #deliverNewIntent} to suppress duplicate requests and ensure the intent is
+    // delivered at most once.
+    private boolean mIntentDelivered;
+
     private IVoiceInteractionSession mVoiceSession;
     private IVoiceInteractor mVoiceInteractor;
 
@@ -245,6 +251,8 @@
         mVoiceInteractor = null;
 
         mUsingVr2dDisplay = false;
+
+        mIntentDelivered = false;
     }
 
     ActivityStarter(ActivityManagerService service, ActivityStackSupervisor supervisor) {
@@ -260,8 +268,7 @@
             IBinder resultTo, String resultWho, int requestCode, int callingPid, int callingUid,
             String callingPackage, int realCallingPid, int realCallingUid, int startFlags,
             ActivityOptions options, boolean ignoreTargetSecurity, boolean componentSpecified,
-            ActivityRecord[] outActivity, ActivityStackSupervisor.ActivityContainer container,
-            TaskRecord inTask, String reason) {
+            ActivityRecord[] outActivity, TaskRecord inTask, String reason) {
 
         if (TextUtils.isEmpty(reason)) {
             throw new IllegalArgumentException("Need to specify a reason.");
@@ -274,7 +281,7 @@
                 aInfo, rInfo, voiceSession, voiceInteractor, resultTo, resultWho, requestCode,
                 callingPid, callingUid, callingPackage, realCallingPid, realCallingUid, startFlags,
                 options, ignoreTargetSecurity, componentSpecified, mLastStartActivityRecord,
-                container, inTask);
+                inTask);
 
         if (outActivity != null) {
             // mLastStartActivityRecord[0] is set in the call to startActivity above.
@@ -292,8 +299,7 @@
             IBinder resultTo, String resultWho, int requestCode, int callingPid, int callingUid,
             String callingPackage, int realCallingPid, int realCallingUid, int startFlags,
             ActivityOptions options, boolean ignoreTargetSecurity, boolean componentSpecified,
-            ActivityRecord[] outActivity, ActivityStackSupervisor.ActivityContainer container,
-            TaskRecord inTask) {
+            ActivityRecord[] outActivity, TaskRecord inTask) {
         int err = ActivityManager.START_SUCCESS;
         // Pull the optional Ephemeral Installer-only bundle out of the options early.
         final Bundle verificationBundle
@@ -505,10 +511,8 @@
                 if (DEBUG_PERMISSIONS_REVIEW) {
                     Slog.i(TAG, "START u" + userId + " {" + intent.toShortString(true, true,
                             true, false) + "} from uid " + callingUid + " on display "
-                            + (container == null ? (mSupervisor.mFocusedStack == null ?
-                            DEFAULT_DISPLAY : mSupervisor.mFocusedStack.mDisplayId) :
-                            (container.mActivityDisplay == null ? DEFAULT_DISPLAY :
-                                    container.mActivityDisplay.mDisplayId)));
+                            + (mSupervisor.mFocusedStack == null
+                            ? DEFAULT_DISPLAY : mSupervisor.mFocusedStack.mDisplayId));
                 }
             }
         }
@@ -530,7 +534,7 @@
         ActivityRecord r = new ActivityRecord(mService, callerApp, callingPid, callingUid,
                 callingPackage, intent, resolvedType, aInfo, mService.getGlobalConfiguration(),
                 resultRecord, resultWho, requestCode, componentSpecified, voiceSession != null,
-                mSupervisor, container, options, sourceRecord);
+                mSupervisor, options, sourceRecord);
         if (outActivity != null) {
             outActivity[0] = r;
         }
@@ -587,8 +591,8 @@
                 Intent.ACTION_INSTALL_INSTANT_APP_PACKAGE, originalIntent,
                 auxiliaryResponse.failureIntent, callingPackage, verificationBundle,
                 resolvedType, userId, auxiliaryResponse.packageName, auxiliaryResponse.splitName,
-                auxiliaryResponse.versionCode, auxiliaryResponse.token,
-                auxiliaryResponse.needsPhaseTwo);
+                auxiliaryResponse.installFailureActivity, auxiliaryResponse.versionCode,
+                auxiliaryResponse.token, auxiliaryResponse.needsPhaseTwo);
     }
 
     void postStartActivityProcessing(
@@ -649,7 +653,7 @@
                 null /*callingPackage*/, 0 /*realCallingPid*/, 0 /*realCallingUid*/,
                 0 /*startFlags*/, null /*options*/, false /*ignoreTargetSecurity*/,
                 false /*componentSpecified*/, mLastHomeActivityStartRecord /*outActivity*/,
-                null /*container*/, null /*inTask*/, "startHomeActivity: " + reason);
+                null /*inTask*/, "startHomeActivity: " + reason);
         if (mSupervisor.inResumeTopActivity) {
             // If we are in resume section already, home activity will be initialized, but not
             // resumed (to avoid recursive resume) and will stay that way until something pokes it
@@ -674,7 +678,21 @@
             IBinder resultTo, String resultWho, int requestCode, int startFlags,
             ProfilerInfo profilerInfo, WaitResult outResult,
             Configuration globalConfig, Bundle bOptions, boolean ignoreTargetSecurity, int userId,
-            IActivityContainer iContainer, TaskRecord inTask, String reason) {
+            TaskRecord inTask, String reason) {
+        return startActivityMayWait(caller, callingUid, PID_NULL, UserHandle.USER_NULL,
+             callingPackage, intent, resolvedType, voiceSession, voiceInteractor, resultTo,
+             resultWho, requestCode, startFlags, profilerInfo, outResult, globalConfig, bOptions,
+             ignoreTargetSecurity, userId, inTask, reason);
+    }
+
+    final int startActivityMayWait(IApplicationThread caller, int callingUid,
+            int requestRealCallingPid, int requestRealCallingUid,
+            String callingPackage, Intent intent, String resolvedType,
+            IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
+            IBinder resultTo, String resultWho, int requestCode, int startFlags,
+            ProfilerInfo profilerInfo, WaitResult outResult,
+            Configuration globalConfig, Bundle bOptions, boolean ignoreTargetSecurity, int userId,
+            TaskRecord inTask, String reason) {
         // Refuse possible leaked file descriptors
         if (intent != null && intent.hasFileDescriptors()) {
             throw new IllegalArgumentException("File descriptors passed in Intent");
@@ -727,16 +745,15 @@
         ActivityInfo aInfo = mSupervisor.resolveActivity(intent, rInfo, startFlags, profilerInfo);
 
         ActivityOptions options = ActivityOptions.fromBundle(bOptions);
-        ActivityStackSupervisor.ActivityContainer container =
-                (ActivityStackSupervisor.ActivityContainer)iContainer;
         synchronized (mService) {
-            if (container != null && container.mParentActivity != null &&
-                    container.mParentActivity.state != RESUMED) {
-                // Cannot start a child activity if the parent is not resumed.
-                return ActivityManager.START_CANCELED;
-            }
-            final int realCallingPid = Binder.getCallingPid();
-            final int realCallingUid = Binder.getCallingUid();
+
+            final int realCallingPid = requestRealCallingPid != PID_NULL
+                ? requestRealCallingPid
+                : Binder.getCallingPid();
+            final int realCallingUid = requestRealCallingUid != UserHandle.USER_NULL
+                ? requestRealCallingUid
+                : Binder.getCallingUid();
+
             int callingPid;
             if (callingUid >= 0) {
                 callingPid = -1;
@@ -747,12 +764,7 @@
                 callingPid = callingUid = -1;
             }
 
-            final ActivityStack stack;
-            if (container == null || container.mStack.isOnHomeDisplay()) {
-                stack = mSupervisor.mFocusedStack;
-            } else {
-                stack = container.mStack;
-            }
+            final ActivityStack stack = mSupervisor.mFocusedStack;
             stack.mConfigWillChange = globalConfig != null
                     && mService.getGlobalConfiguration().diff(globalConfig) != 0;
             if (DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
@@ -828,8 +840,8 @@
                     aInfo, rInfo, voiceSession, voiceInteractor,
                     resultTo, resultWho, requestCode, callingPid,
                     callingUid, callingPackage, realCallingPid, realCallingUid, startFlags,
-                    options, ignoreTargetSecurity, componentSpecified, outRecord, container,
-                    inTask, reason);
+                    options, ignoreTargetSecurity, componentSpecified, outRecord, inTask,
+                    reason);
 
             Binder.restoreCallingIdentity(origId);
 
@@ -893,6 +905,14 @@
     final int startActivities(IApplicationThread caller, int callingUid, String callingPackage,
             Intent[] intents, String[] resolvedTypes, IBinder resultTo,
             Bundle bOptions, int userId, String reason) {
+        return startActivities(caller, callingUid, PID_NULL, UserHandle.USER_NULL, callingPackage,
+             intents, resolvedTypes, resultTo, bOptions, userId, reason);
+    }
+
+    final int startActivities(IApplicationThread caller, int callingUid,
+            int incomingRealCallingPid, int incomingRealCallingUid, String callingPackage,
+            Intent[] intents, String[] resolvedTypes, IBinder resultTo,
+            Bundle bOptions, int userId, String reason) {
         if (intents == null) {
             throw new NullPointerException("intents is null");
         }
@@ -903,8 +923,13 @@
             throw new IllegalArgumentException("intents are length different than resolvedTypes");
         }
 
-        final int realCallingPid = Binder.getCallingPid();
-        final int realCallingUid = Binder.getCallingUid();
+        final int realCallingPid = incomingRealCallingPid != PID_NULL
+                     ? incomingRealCallingPid
+                     : Binder.getCallingPid();
+
+        final int realCallingUid = incomingRealCallingUid != UserHandle.USER_NULL
+                     ? incomingRealCallingUid
+                     : Binder.getCallingUid();
 
         int callingPid;
         if (callingUid >= 0) {
@@ -954,7 +979,7 @@
                             resolvedTypes[i], aInfo, null /*rInfo*/, null, null, resultTo, null, -1,
                             callingPid, callingUid, callingPackage,
                             realCallingPid, realCallingUid, 0,
-                            options, false, componentSpecified, outActivity, null, null, reason);
+                            options, false, componentSpecified, outActivity, null, reason);
                     if (res < 0) {
                         return res;
                     }
@@ -1092,9 +1117,7 @@
                         // so make sure the task now has the identity of the new intent.
                         top.getTask().setIntent(mStartActivity);
                     }
-                    ActivityStack.logStartActivity(AM_NEW_INTENT, mStartActivity, top.getTask());
-                    top.deliverNewIntentLocked(mCallingUid, mStartActivity.intent,
-                            mStartActivity.launchedFromPackage);
+                    deliverNewIntent(top);
                 }
             }
 
@@ -1156,7 +1179,6 @@
                 && ((mLaunchFlags & FLAG_ACTIVITY_SINGLE_TOP) != 0
                 || mLaunchSingleTop || mLaunchSingleTask);
         if (dontStart) {
-            ActivityStack.logStartActivity(AM_NEW_INTENT, top, top.getTask());
             // For paranoia, make sure we have correctly resumed the top activity.
             topStack.mLastPausedActivity = null;
             if (mDoResume) {
@@ -1168,8 +1190,8 @@
                 // anything if that is the case, so this is it!
                 return START_RETURN_INTENT_TO_CALLER;
             }
-            top.deliverNewIntentLocked(
-                    mCallingUid, mStartActivity.intent, mStartActivity.launchedFromPackage);
+
+            deliverNewIntent(top);
 
             // Don't use mStartActivity.task to show the toast. We're not starting a new activity
             // but reusing 'top'. Fields in mStartActivity may not be fully initialized.
@@ -1754,13 +1776,10 @@
             // desires.
             if (((mLaunchFlags & FLAG_ACTIVITY_SINGLE_TOP) != 0 || mLaunchSingleTop)
                     && intentActivity.realActivity.equals(mStartActivity.realActivity)) {
-                ActivityStack.logStartActivity(AM_NEW_INTENT, mStartActivity,
-                        intentActivity.getTask());
                 if (intentActivity.frontOfTask) {
                     intentActivity.getTask().setIntent(mStartActivity);
                 }
-                intentActivity.deliverNewIntentLocked(mCallingUid, mStartActivity.intent,
-                        mStartActivity.launchedFromPackage);
+                deliverNewIntent(intentActivity);
             } else if (!intentActivity.getTask().isSameIntentFilter(mStartActivity)) {
                 // In this case we are launching the root activity of the task, but with a
                 // different intent. We should start a new instance on top.
@@ -1845,6 +1864,17 @@
         return START_SUCCESS;
     }
 
+    private void deliverNewIntent(ActivityRecord activity) {
+        if (mIntentDelivered) {
+            return;
+        }
+
+        ActivityStack.logStartActivity(AM_NEW_INTENT, activity, activity.getTask());
+        activity.deliverNewIntentLocked(mCallingUid, mStartActivity.intent,
+                mStartActivity.launchedFromPackage);
+        mIntentDelivered = true;
+    }
+
     private int setTaskFromSourceRecord() {
         if (mSupervisor.isLockTaskModeViolation(mSourceRecord.getTask())) {
             Slog.e(TAG, "Attempted Lock Task Mode violation mStartActivity=" + mStartActivity);
@@ -1853,13 +1883,30 @@
 
         final TaskRecord sourceTask = mSourceRecord.getTask();
         final ActivityStack sourceStack = mSourceRecord.getStack();
-        // We only want to allow changing stack if the target task is not the top one,
-        // otherwise we would move the launching task to the other side, rather than show
-        // two side by side.
-        final boolean moveStackAllowed = sourceStack.topTask() != sourceTask;
+        // We only want to allow changing stack in two cases:
+        // 1. If the target task is not the top one. Otherwise we would move the launching task to
+        //    the other side, rather than show two side by side.
+        // 2. If activity is not allowed on target display.
+        final int targetDisplayId = mTargetStack != null ? mTargetStack.mDisplayId
+                : sourceStack.mDisplayId;
+        final boolean moveStackAllowed = sourceStack.topTask() != sourceTask
+                || !mStartActivity.canBeLaunchedOnDisplay(targetDisplayId);
         if (moveStackAllowed) {
             mTargetStack = getLaunchStack(mStartActivity, mLaunchFlags, mStartActivity.getTask(),
                     mOptions);
+            // If target stack is not found now - we can't just rely on the source stack, as it may
+            // be not suitable. Let's check other displays.
+            if (mTargetStack == null && targetDisplayId != sourceStack.mDisplayId) {
+                // Can't use target display, lets find a stack on the source display.
+                mTargetStack = mService.mStackSupervisor.getValidLaunchStackOnDisplay(
+                        sourceStack.mDisplayId, mStartActivity);
+            }
+            if (mTargetStack == null) {
+                // There are no suitable stacks on the target and source display(s). Look on all
+                // displays.
+                mTargetStack = mService.mStackSupervisor.getNextValidLaunchStackLocked(
+                        mStartActivity, -1 /* currentFocus */);
+            }
         }
 
         if (mTargetStack == null) {
@@ -1884,7 +1931,7 @@
             mKeepCurTransition = true;
             if (top != null) {
                 ActivityStack.logStartActivity(AM_NEW_INTENT, mStartActivity, top.getTask());
-                top.deliverNewIntentLocked(mCallingUid, mStartActivity.intent, mStartActivity.launchedFromPackage);
+                deliverNewIntent(top);
                 // For paranoia, make sure we have correctly resumed the top activity.
                 mTargetStack.mLastPausedActivity = null;
                 if (mDoResume) {
@@ -1903,7 +1950,7 @@
                 task.moveActivityToFrontLocked(top);
                 top.updateOptionsLocked(mOptions);
                 ActivityStack.logStartActivity(AM_NEW_INTENT, mStartActivity, task);
-                top.deliverNewIntentLocked(mCallingUid, mStartActivity.intent, mStartActivity.launchedFromPackage);
+                deliverNewIntent(top);
                 mTargetStack.mLastPausedActivity = null;
                 if (mDoResume) {
                     mSupervisor.resumeFocusedStackTopActivityLocked();
@@ -1939,14 +1986,12 @@
                     || mLaunchSingleTop || mLaunchSingleTask) {
                 mTargetStack.moveTaskToFrontLocked(mInTask, mNoAnimation, mOptions,
                         mStartActivity.appTimeTracker, "inTaskToFront");
-                ActivityStack.logStartActivity(AM_NEW_INTENT, top, top.getTask());
                 if ((mStartFlags & START_FLAG_ONLY_IF_NEEDED) != 0) {
                     // We don't need to start a new activity, and the client said not to do
                     // anything if that is the case, so this is it!
                     return START_RETURN_INTENT_TO_CALLER;
                 }
-                top.deliverNewIntentLocked(mCallingUid, mStartActivity.intent,
-                        mStartActivity.launchedFromPackage);
+                deliverNewIntent(top);
                 return START_DELIVERED_TO_TOP;
             }
         }
@@ -2071,13 +2116,6 @@
             return currentStack;
         }
 
-        final ActivityStackSupervisor.ActivityContainer container = r.mInitialActivityContainer;
-        if (container != null) {
-            // The first time put it on the desired stack, after this put on task stack.
-            r.mInitialActivityContainer = null;
-            return container.mStack;
-        }
-
         if (canLaunchIntoFocusedStack(r, newTask)) {
             if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS,
                     "computeStackFocus: Have a focused stack=" + mSupervisor.mFocusedStack);
@@ -2142,13 +2180,11 @@
             default:
                 // Dynamic stacks behave similarly to the fullscreen stack and can contain any
                 // resizeable task.
-                // TODO: Check ActivityView after fixing b/35349678.
                 canUseFocusedStack = isDynamicStack(focusedStackId)
                         && r.canBeLaunchedOnDisplay(focusedStack.mDisplayId);
         }
 
-        return canUseFocusedStack
-                && (!newTask || focusedStack.mActivityContainer.isEligibleForNewTasks())
+        return canUseFocusedStack && !newTask
                 // We strongly prefer to launch activities on the same display as their source.
                 && (mSourceDisplayId == focusedStack.mDisplayId);
     }
@@ -2214,9 +2250,7 @@
 
         // The parent activity doesn't want to launch the activity on top of itself, but
         // instead tries to put it onto other side in side-by-side mode.
-        final ActivityStack parentStack = task != null ? task.getStack()
-                : r.mInitialActivityContainer != null ? r.mInitialActivityContainer.mStack
-                : mSupervisor.mFocusedStack;
+        final ActivityStack parentStack = task != null ? task.getStack(): mSupervisor.mFocusedStack;
 
         if (parentStack != mSupervisor.mFocusedStack) {
             // If task's parent stack is not focused - use it during adjacent launch.
@@ -2267,7 +2301,6 @@
             case ASSISTANT_STACK_ID:
                 return r.isAssistantActivity();
             default:
-                // TODO: Check ActivityView after fixing b/35349678.
                 if (StackId.isDynamicStack(stackId)) {
                     return r.canBeLaunchedOnDisplay(displayId);
                 }
@@ -2319,40 +2352,76 @@
         return didSomething;
     }
 
-    void dump(PrintWriter pw, String prefix) {
-        pw.println(prefix + "ActivityStarter:");
+    void dump(PrintWriter pw, String prefix, String dumpPackage) {
         prefix = prefix + "  ";
 
-        pw.println(prefix + "mCurrentUser=" + mSupervisor.mCurrentUser);
-        pw.println(prefix + "mLastStartReason=" + mLastStartReason);
-        pw.println(prefix + "mLastStartActivityTimeMs="
-                + DateFormat.getDateTimeInstance().format(new Date(mLastStartActivityTimeMs)));
-        pw.println(prefix + "mLastStartActivityResult=" + mLastStartActivityResult);
+        if (dumpPackage != null) {
+            if ((mLastStartActivityRecord[0] == null ||
+                    !dumpPackage.equals(mLastHomeActivityStartRecord[0].packageName)) &&
+                    (mLastHomeActivityStartRecord[0] == null ||
+                    !dumpPackage.equals(mLastHomeActivityStartRecord[0].packageName)) &&
+                    (mStartActivity == null || !dumpPackage.equals(mStartActivity.packageName))) {
+                pw.print(prefix);
+                pw.println("(nothing)");
+                return;
+            }
+        }
+
+        pw.print(prefix);
+        pw.print("mCurrentUser=");
+        pw.println(mSupervisor.mCurrentUser);
+        pw.print(prefix);
+        pw.print("mLastStartReason=");
+        pw.println(mLastStartReason);
+        pw.print(prefix);
+        pw.print("mLastStartActivityTimeMs=");
+        pw.println(DateFormat.getDateTimeInstance().format(new Date(mLastStartActivityTimeMs)));
+        pw.print(prefix);
+        pw.print("mLastStartActivityResult=");
+        pw.println(mLastStartActivityResult);
         ActivityRecord r = mLastStartActivityRecord[0];
         if (r != null) {
-            pw.println(prefix + "mLastStartActivityRecord:");
-            r.dump(pw, prefix + " ");
+            pw.print(prefix);
+            pw.println("mLastStartActivityRecord:");
+            r.dump(pw, prefix + "  ");
         }
-        pw.println(prefix + "mLastHomeActivityStartResult=" + mLastHomeActivityStartResult);
+        pw.print(prefix);
+        pw.print("mLastHomeActivityStartResult=");
+        pw.println(mLastHomeActivityStartResult);
         r = mLastHomeActivityStartRecord[0];
         if (r != null) {
-            pw.println(prefix + "mLastHomeActivityStartRecord:");
-            r.dump(pw, prefix + " ");
+            pw.print(prefix);
+            pw.println("mLastHomeActivityStartRecord:");
+            r.dump(pw, prefix + "  ");
         }
         if (mStartActivity != null) {
-            pw.println(prefix + "mStartActivity:");
-            mStartActivity.dump(pw, prefix + " ");
+            pw.print(prefix);
+            pw.println("mStartActivity:");
+            mStartActivity.dump(pw, prefix + "  ");
         }
         if (mIntent != null) {
-            pw.println(prefix + "mIntent=" + mIntent);
+            pw.print(prefix);
+            pw.print("mIntent=");
+            pw.println(mIntent);
         }
         if (mOptions != null) {
-            pw.println(prefix + "mOptions=" + mOptions);
+            pw.print(prefix);
+            pw.print("mOptions=");
+            pw.println(mOptions);
         }
-        pw.println(prefix + "mLaunchSingleTop=" + mLaunchSingleTop
-                + " mLaunchSingleInstance=" + mLaunchSingleInstance
-                + " mLaunchSingleTask=" + mLaunchSingleTask
-                + " mLaunchFlags=0x" + Integer.toHexString(mLaunchFlags)
-                + " mDoResume=" + mDoResume + " mAddingToTask=" + mAddingToTask);
+        pw.print(prefix);
+        pw.print("mLaunchSingleTop=");
+        pw.print(mLaunchSingleTop);
+        pw.print(" mLaunchSingleInstance=");
+        pw.print(mLaunchSingleInstance);
+        pw.print(" mLaunchSingleTask=");
+        pw.println(mLaunchSingleTask);
+        pw.print(prefix);
+        pw.print("mLaunchFlags=0x");
+        pw.print(Integer.toHexString(mLaunchFlags));
+        pw.print(" mDoResume=");
+        pw.print(mDoResume);
+        pw.print(" mAddingToTask=");
+        pw.println(mAddingToTask);
     }
 }
diff --git a/services/core/java/com/android/server/am/AppErrorDialog.java b/services/core/java/com/android/server/am/AppErrorDialog.java
index c9c1d00..5412266 100644
--- a/services/core/java/com/android/server/am/AppErrorDialog.java
+++ b/services/core/java/com/android/server/am/AppErrorDialog.java
@@ -21,6 +21,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.res.Resources;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -32,8 +33,6 @@
 import android.widget.FrameLayout;
 import android.widget.TextView;
 
-import static com.android.server.am.ActivityManagerService.IS_USER_BUILD;
-
 final class AppErrorDialog extends BaseErrorDialog implements View.OnClickListener {
 
     private final ActivityManagerService mService;
@@ -41,7 +40,6 @@
     private final ProcessRecord mProc;
     private final boolean mRepeating;
     private final boolean mIsRestartable;
-
     private CharSequence mName;
 
     static int CANT_SHOW = -1;
@@ -111,20 +109,19 @@
         LayoutInflater.from(context).inflate(
                 com.android.internal.R.layout.app_error_dialog, frame, true);
 
-        boolean hasRestart = !mRepeating && mIsRestartable;
         final boolean hasReceiver = mProc.errorReportReceiver != null;
 
         final TextView restart = findViewById(com.android.internal.R.id.aerr_restart);
         restart.setOnClickListener(this);
-        restart.setVisibility(hasRestart ? View.VISIBLE : View.GONE);
+        restart.setVisibility(mIsRestartable ? View.VISIBLE : View.GONE);
         final TextView report = findViewById(com.android.internal.R.id.aerr_report);
         report.setOnClickListener(this);
         report.setVisibility(hasReceiver ? View.VISIBLE : View.GONE);
         final TextView close = findViewById(com.android.internal.R.id.aerr_close);
-        close.setVisibility(!hasRestart ? View.VISIBLE : View.GONE);
+        close.setVisibility(mRepeating ? View.VISIBLE : View.GONE);
         close.setOnClickListener(this);
 
-        boolean showMute = !IS_USER_BUILD && Settings.Global.getInt(context.getContentResolver(),
+        boolean showMute = !Build.IS_USER && Settings.Global.getInt(context.getContentResolver(),
                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
         final TextView mute = findViewById(com.android.internal.R.id.aerr_mute);
         mute.setOnClickListener(this);
diff --git a/services/core/java/com/android/server/am/AppErrors.java b/services/core/java/com/android/server/am/AppErrors.java
index 0d1c579..a842724 100644
--- a/services/core/java/com/android/server/am/AppErrors.java
+++ b/services/core/java/com/android/server/am/AppErrors.java
@@ -55,7 +55,6 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Set;
 
 import static com.android.server.Watchdog.NATIVE_STACKS_OF_INTEREST;
@@ -409,10 +408,9 @@
                         final Set<String> cats = task.intent.getCategories();
                         if (cats != null && cats.contains(Intent.CATEGORY_LAUNCHER)) {
                             mService.startActivityInPackage(task.mCallingUid,
-                                    task.mCallingPackage, task.intent,
-                                    null, null, null, 0, 0,
-                                    ActivityOptions.makeBasic().toBundle(),
-                                    task.userId, null, null, "AppErrors");
+                                    task.mCallingPackage, task.intent, null, null, null, 0, 0,
+                                    ActivityOptions.makeBasic().toBundle(), task.userId, null,
+                                    "AppErrors");
                         }
                     }
                 }
@@ -594,20 +592,46 @@
 
     boolean handleAppCrashLocked(ProcessRecord app, String reason,
             String shortMsg, String longMsg, String stackTrace, AppErrorDialog.Data data) {
-        long now = SystemClock.uptimeMillis();
-        boolean showBackground = Settings.Secure.getInt(mContext.getContentResolver(),
+        final long now = SystemClock.uptimeMillis();
+        final boolean showBackground = Settings.Secure.getInt(mContext.getContentResolver(),
                 Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0;
 
+        final boolean procIsBoundForeground =
+            (app.curProcState == ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE);
+
         Long crashTime;
         Long crashTimePersistent;
+        boolean tryAgain = false;
+
         if (!app.isolated) {
             crashTime = mProcessCrashTimes.get(app.info.processName, app.uid);
             crashTimePersistent = mProcessCrashTimesPersistent.get(app.info.processName, app.uid);
         } else {
             crashTime = crashTimePersistent = null;
         }
-        if (crashTime != null && now < crashTime+ProcessList.MIN_CRASH_INTERVAL) {
-            // This process loses!
+
+        // Bump up the crash count of any services currently running in the proc.
+        for (int i = app.services.size() - 1; i >= 0; i--) {
+            // Any services running in the application need to be placed
+            // back in the pending list.
+            ServiceRecord sr = app.services.valueAt(i);
+            // If the service was restarted a while ago, then reset crash count, else increment it.
+            if (now > sr.restartTime + ProcessList.MIN_CRASH_INTERVAL) {
+                sr.crashCount = 1;
+            } else {
+                sr.crashCount++;
+            }
+            // Allow restarting for started or bound foreground services that are crashing.
+            // This includes wallpapers.
+            if (sr.crashCount < mService.mConstants.BOUND_SERVICE_MAX_CRASH_RETRY
+                    && (sr.isForeground || procIsBoundForeground)) {
+                tryAgain = true;
+            }
+        }
+
+        if (crashTime != null && now < crashTime + ProcessList.MIN_CRASH_INTERVAL) {
+            // The process crashed again very quickly. If it was a bound foreground service, let's
+            // try to restart again in a while, otherwise the process loses!
             Slog.w(TAG, "Process " + app.info.processName
                     + " has crashed too many times: killing!");
             EventLog.writeEvent(EventLogTags.AM_PROCESS_CRASHED_TOO_MUCH,
@@ -632,7 +656,7 @@
                 // Don't let services in this process be restarted and potentially
                 // annoy the user repeatedly.  Unless it is persistent, since those
                 // processes run critical code.
-                mService.removeProcessLocked(app, false, false, "crash");
+                mService.removeProcessLocked(app, false, tryAgain, "crash");
                 mService.mStackSupervisor.resumeFocusedStackTopActivityLocked();
                 if (!showBackground) {
                     return false;
@@ -651,21 +675,8 @@
             }
         }
 
-        boolean procIsBoundForeground =
-                (app.curProcState == ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE);
-        // Bump up the crash count of any services currently running in the proc.
-        for (int i=app.services.size()-1; i>=0; i--) {
-            // Any services running in the application need to be placed
-            // back in the pending list.
-            ServiceRecord sr = app.services.valueAt(i);
-            sr.crashCount++;
-
-            // Allow restarting for started or bound foreground services that are crashing the
-            // first time. This includes wallpapers.
-            if ((data != null) && (sr.crashCount <= 1)
-                    && (sr.isForeground || procIsBoundForeground)) {
-                data.isRestartableForService = true;
-            }
+        if (data != null && tryAgain) {
+            data.isRestartableForService = true;
         }
 
         // If the crashing process is what we consider to be the "home process" and it has been
@@ -691,7 +702,7 @@
 
         if (!app.isolated) {
             // XXX Can't keep track of crash times for isolated processes,
-            // because they don't have a perisistent identity.
+            // because they don't have a persistent identity.
             mProcessCrashTimes.put(app.info.processName, app.uid, now);
             mProcessCrashTimesPersistent.put(app.info.processName, app.uid, now);
         }
diff --git a/services/core/java/com/android/server/am/AppNotRespondingDialog.java b/services/core/java/com/android/server/am/AppNotRespondingDialog.java
index a3a6778..d9c6a30 100644
--- a/services/core/java/com/android/server/am/AppNotRespondingDialog.java
+++ b/services/core/java/com/android/server/am/AppNotRespondingDialog.java
@@ -35,8 +35,6 @@
 import android.widget.FrameLayout;
 import android.widget.TextView;
 
-import static com.android.server.am.ActivityManagerService.IS_USER_BUILD;
-
 final class AppNotRespondingDialog extends BaseErrorDialog implements View.OnClickListener {
     private static final String TAG = "AppNotRespondingDialog";
 
diff --git a/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java b/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java
new file mode 100644
index 0000000..8af1f3e
--- /dev/null
+++ b/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java
@@ -0,0 +1,403 @@
+/*
+ * 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.am;
+
+import android.annotation.Nullable;
+import android.bluetooth.BluetoothActivityEnergyInfo;
+import android.bluetooth.BluetoothAdapter;
+import android.content.Context;
+import android.net.wifi.IWifiManager;
+import android.net.wifi.WifiActivityEnergyInfo;
+import android.os.BatteryStats;
+import android.os.Parcelable;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.SynchronousResultReceiver;
+import android.os.SystemClock;
+import android.telephony.ModemActivityInfo;
+import android.telephony.TelephonyManager;
+import android.util.IntArray;
+import android.util.Slog;
+import android.util.TimeUtils;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.os.BatteryStatsImpl;
+
+import libcore.util.EmptyArray;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * A Worker that fetches data from external sources (WiFi controller, bluetooth chipset) on a
+ * dedicated thread and updates BatteryStatsImpl with that information.
+ *
+ * As much work as possible is done without holding the BatteryStatsImpl lock, and only the
+ * readily available data is pushed into BatteryStatsImpl with the lock held.
+ */
+class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync {
+    private static final String TAG = "BatteryExternalStatsWorker";
+    private static final boolean DEBUG = false;
+
+    /**
+     * How long to wait on an individual subsystem to return its stats.
+     */
+    private static final long EXTERNAL_STATS_SYNC_TIMEOUT_MILLIS = 2000;
+
+    // There is some accuracy error in wifi reports so allow some slop in the results.
+    private static final long MAX_WIFI_STATS_SAMPLE_ERROR_MILLIS = 750;
+
+    private final ExecutorService mExecutorService = Executors.newSingleThreadExecutor(
+            (ThreadFactory) r -> {
+                Thread t = new Thread(r, "batterystats-worker");
+                t.setPriority(Thread.NORM_PRIORITY);
+                return t;
+            });
+
+    private final Context mContext;
+    private final BatteryStatsImpl mStats;
+
+    @GuardedBy("this")
+    private int mUpdateFlags = 0;
+
+    @GuardedBy("this")
+    private Future<?> mCurrentFuture = null;
+
+    @GuardedBy("this")
+    private String mCurrentReason = null;
+
+    @GuardedBy("this")
+    private final IntArray mUidsToRemove = new IntArray();
+
+    private final Object mWorkerLock = new Object();
+
+    @GuardedBy("mWorkerLock")
+    private IWifiManager mWifiManager = null;
+
+    @GuardedBy("mWorkerLock")
+    private TelephonyManager mTelephony = null;
+
+    // WiFi keeps an accumulated total of stats, unlike Bluetooth.
+    // Keep the last WiFi stats so we can compute a delta.
+    @GuardedBy("mWorkerLock")
+    private WifiActivityEnergyInfo mLastInfo =
+            new WifiActivityEnergyInfo(0, 0, 0, new long[]{0}, 0, 0, 0);
+
+    BatteryExternalStatsWorker(Context context, BatteryStatsImpl stats) {
+        mContext = context;
+        mStats = stats;
+    }
+
+    @Override
+    public synchronized Future<?> scheduleSync(String reason, int flags) {
+        return scheduleSyncLocked(reason, flags);
+    }
+
+    @Override
+    public synchronized Future<?> scheduleCpuSyncDueToRemovedUid(int uid) {
+        mUidsToRemove.add(uid);
+        return scheduleSyncLocked("remove-uid", UPDATE_CPU);
+    }
+
+    public synchronized Future<?> scheduleWrite() {
+        if (mExecutorService.isShutdown()) {
+            return CompletableFuture.failedFuture(new IllegalStateException("worker shutdown"));
+        }
+
+        scheduleSyncLocked("write", UPDATE_ALL);
+        // Since we use a single threaded executor, we can assume the next scheduled task's
+        // Future finishes after the sync.
+        return mExecutorService.submit(mWriteTask);
+    }
+
+    /**
+     * Schedules a task to run on the BatteryExternalStatsWorker thread. If scheduling more work
+     * within the task, never wait on the resulting Future. This will result in a deadlock.
+     */
+    public synchronized void scheduleRunnable(Runnable runnable) {
+        if (!mExecutorService.isShutdown()) {
+            mExecutorService.submit(runnable);
+        }
+    }
+
+    public void shutdown() {
+        mExecutorService.shutdownNow();
+    }
+
+    private Future<?> scheduleSyncLocked(String reason, int flags) {
+        if (mExecutorService.isShutdown()) {
+            return CompletableFuture.failedFuture(new IllegalStateException("worker shutdown"));
+        }
+
+        if (mCurrentFuture == null) {
+            mUpdateFlags = flags;
+            mCurrentReason = reason;
+            mCurrentFuture = mExecutorService.submit(mSyncTask);
+        }
+        mUpdateFlags |= flags;
+        return mCurrentFuture;
+    }
+
+    private final Runnable mSyncTask = new Runnable() {
+        @Override
+        public void run() {
+            // Capture a snapshot of the state we are meant to process.
+            final int updateFlags;
+            final String reason;
+            final int[] uidsToRemove;
+            synchronized (BatteryExternalStatsWorker.this) {
+                updateFlags = mUpdateFlags;
+                reason = mCurrentReason;
+                uidsToRemove = mUidsToRemove.size() > 0 ? mUidsToRemove.toArray() : EmptyArray.INT;
+                mUpdateFlags = 0;
+                mCurrentReason = null;
+                mUidsToRemove.clear();
+                mCurrentFuture = null;
+            }
+
+            synchronized (mWorkerLock) {
+                if (DEBUG) {
+                    Slog.d(TAG, "begin updateExternalStatsSync reason=" + reason);
+                }
+                try {
+                    updateExternalStatsLocked(reason, updateFlags);
+                } finally {
+                    if (DEBUG) {
+                        Slog.d(TAG, "end updateExternalStatsSync");
+                    }
+                }
+            }
+
+            // Clean up any UIDs if necessary.
+            synchronized (mStats) {
+                for (int uid : uidsToRemove) {
+                    mStats.removeIsolatedUidLocked(uid);
+                }
+            }
+        }
+    };
+
+    private final Runnable mWriteTask = new Runnable() {
+        @Override
+        public void run() {
+            synchronized (mStats) {
+                mStats.writeAsyncLocked();
+            }
+        }
+    };
+
+    private void updateExternalStatsLocked(final String reason, int updateFlags) {
+        // We will request data from external processes asynchronously, and wait on a timeout.
+        SynchronousResultReceiver wifiReceiver = null;
+        SynchronousResultReceiver bluetoothReceiver = null;
+        SynchronousResultReceiver modemReceiver = null;
+
+        if ((updateFlags & BatteryStatsImpl.ExternalStatsSync.UPDATE_WIFI) != 0) {
+            // We were asked to fetch WiFi data.
+            if (mWifiManager == null) {
+                mWifiManager = IWifiManager.Stub.asInterface(ServiceManager.getService(
+                        Context.WIFI_SERVICE));
+            }
+
+            if (mWifiManager != null) {
+                try {
+                    wifiReceiver = new SynchronousResultReceiver("wifi");
+                    mWifiManager.requestActivityInfo(wifiReceiver);
+                } catch (RemoteException e) {
+                    // Oh well.
+                }
+            }
+        }
+
+        if ((updateFlags & BatteryStatsImpl.ExternalStatsSync.UPDATE_BT) != 0) {
+            // We were asked to fetch Bluetooth data.
+            final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+            if (adapter != null) {
+                bluetoothReceiver = new SynchronousResultReceiver("bluetooth");
+                adapter.requestControllerActivityEnergyInfo(bluetoothReceiver);
+            }
+        }
+
+        if ((updateFlags & BatteryStatsImpl.ExternalStatsSync.UPDATE_RADIO) != 0) {
+            // We were asked to fetch Telephony data.
+            if (mTelephony == null) {
+                mTelephony = TelephonyManager.from(mContext);
+            }
+
+            if (mTelephony != null) {
+                modemReceiver = new SynchronousResultReceiver("telephony");
+                mTelephony.requestModemActivityInfo(modemReceiver);
+            }
+        }
+
+        final WifiActivityEnergyInfo wifiInfo = awaitControllerInfo(wifiReceiver);
+        final BluetoothActivityEnergyInfo bluetoothInfo = awaitControllerInfo(bluetoothReceiver);
+        final ModemActivityInfo modemInfo = awaitControllerInfo(modemReceiver);
+
+        synchronized (mStats) {
+            mStats.addHistoryEventLocked(
+                    SystemClock.elapsedRealtime(),
+                    SystemClock.uptimeMillis(),
+                    BatteryStats.HistoryItem.EVENT_COLLECT_EXTERNAL_STATS,
+                    reason, 0);
+
+            if ((updateFlags & UPDATE_CPU) != 0) {
+                mStats.updateCpuTimeLocked(true /* updateCpuFreqData */);
+                mStats.updateKernelWakelocksLocked();
+                mStats.updateKernelMemoryBandwidthLocked();
+            }
+
+            if ((updateFlags & UPDATE_RPM) != 0) {
+                mStats.updateRpmStatsLocked();
+            }
+
+            if (bluetoothInfo != null) {
+                if (bluetoothInfo.isValid()) {
+                    mStats.updateBluetoothStateLocked(bluetoothInfo);
+                } else {
+                    Slog.e(TAG, "bluetooth info is invalid: " + bluetoothInfo);
+                }
+            }
+        }
+
+        // WiFi and Modem state are updated without the mStats lock held, because they
+        // do some network stats retrieval before internally grabbing the mStats lock.
+
+        if (wifiInfo != null) {
+            if (wifiInfo.isValid()) {
+                mStats.updateWifiState(extractDeltaLocked(wifiInfo));
+            } else {
+                Slog.e(TAG, "wifi info is invalid: " + wifiInfo);
+            }
+        }
+
+        if (modemInfo != null) {
+            if (modemInfo.isValid()) {
+                mStats.updateMobileRadioState(modemInfo);
+            } else {
+                Slog.e(TAG, "modem info is invalid: " + modemInfo);
+            }
+        }
+    }
+
+    /**
+     * Helper method to extract the Parcelable controller info from a
+     * SynchronousResultReceiver.
+     */
+    private static <T extends Parcelable> T awaitControllerInfo(
+            @Nullable SynchronousResultReceiver receiver) {
+        if (receiver == null) {
+            return null;
+        }
+
+        try {
+            final SynchronousResultReceiver.Result result =
+                    receiver.awaitResult(EXTERNAL_STATS_SYNC_TIMEOUT_MILLIS);
+            if (result.bundle != null) {
+                // This is the final destination for the Bundle.
+                result.bundle.setDefusable(true);
+
+                final T data = result.bundle.getParcelable(
+                        BatteryStats.RESULT_RECEIVER_CONTROLLER_KEY);
+                if (data != null) {
+                    return data;
+                }
+            }
+            Slog.e(TAG, "no controller energy info supplied for " + receiver.getName());
+        } catch (TimeoutException e) {
+            Slog.w(TAG, "timeout reading " + receiver.getName() + " stats");
+        }
+        return null;
+    }
+
+    private WifiActivityEnergyInfo extractDeltaLocked(WifiActivityEnergyInfo latest) {
+        final long timePeriodMs = latest.mTimestamp - mLastInfo.mTimestamp;
+        final long lastIdleMs = mLastInfo.mControllerIdleTimeMs;
+        final long lastTxMs = mLastInfo.mControllerTxTimeMs;
+        final long lastRxMs = mLastInfo.mControllerRxTimeMs;
+        final long lastEnergy = mLastInfo.mControllerEnergyUsed;
+
+        // We will modify the last info object to be the delta, and store the new
+        // WifiActivityEnergyInfo object as our last one.
+        final WifiActivityEnergyInfo delta = mLastInfo;
+        delta.mTimestamp = latest.getTimeStamp();
+        delta.mStackState = latest.getStackState();
+
+        final long txTimeMs = latest.mControllerTxTimeMs - lastTxMs;
+        final long rxTimeMs = latest.mControllerRxTimeMs - lastRxMs;
+        final long idleTimeMs = latest.mControllerIdleTimeMs - lastIdleMs;
+
+        if (txTimeMs < 0 || rxTimeMs < 0) {
+            // The stats were reset by the WiFi system (which is why our delta is negative).
+            // Returns the unaltered stats.
+            delta.mControllerEnergyUsed = latest.mControllerEnergyUsed;
+            delta.mControllerRxTimeMs = latest.mControllerRxTimeMs;
+            delta.mControllerTxTimeMs = latest.mControllerTxTimeMs;
+            delta.mControllerIdleTimeMs = latest.mControllerIdleTimeMs;
+            Slog.v(TAG, "WiFi energy data was reset, new WiFi energy data is " + delta);
+        } else {
+            final long totalActiveTimeMs = txTimeMs + rxTimeMs;
+            long maxExpectedIdleTimeMs;
+            if (totalActiveTimeMs > timePeriodMs) {
+                // Cap the max idle time at zero since the active time consumed the whole time
+                maxExpectedIdleTimeMs = 0;
+                if (totalActiveTimeMs > timePeriodMs + MAX_WIFI_STATS_SAMPLE_ERROR_MILLIS) {
+                    StringBuilder sb = new StringBuilder();
+                    sb.append("Total Active time ");
+                    TimeUtils.formatDuration(totalActiveTimeMs, sb);
+                    sb.append(" is longer than sample period ");
+                    TimeUtils.formatDuration(timePeriodMs, sb);
+                    sb.append(".\n");
+                    sb.append("Previous WiFi snapshot: ").append("idle=");
+                    TimeUtils.formatDuration(lastIdleMs, sb);
+                    sb.append(" rx=");
+                    TimeUtils.formatDuration(lastRxMs, sb);
+                    sb.append(" tx=");
+                    TimeUtils.formatDuration(lastTxMs, sb);
+                    sb.append(" e=").append(lastEnergy);
+                    sb.append("\n");
+                    sb.append("Current WiFi snapshot: ").append("idle=");
+                    TimeUtils.formatDuration(latest.mControllerIdleTimeMs, sb);
+                    sb.append(" rx=");
+                    TimeUtils.formatDuration(latest.mControllerRxTimeMs, sb);
+                    sb.append(" tx=");
+                    TimeUtils.formatDuration(latest.mControllerTxTimeMs, sb);
+                    sb.append(" e=").append(latest.mControllerEnergyUsed);
+                    Slog.wtf(TAG, sb.toString());
+                }
+            } else {
+                maxExpectedIdleTimeMs = timePeriodMs - totalActiveTimeMs;
+            }
+            // These times seem to be the most reliable.
+            delta.mControllerTxTimeMs = txTimeMs;
+            delta.mControllerRxTimeMs = rxTimeMs;
+            // WiFi calculates the idle time as a difference from the on time and the various
+            // Rx + Tx times. There seems to be some missing time there because this sometimes
+            // becomes negative. Just cap it at 0 and ensure that it is less than the expected idle
+            // time from the difference in timestamps.
+            // b/21613534
+            delta.mControllerIdleTimeMs = Math.min(maxExpectedIdleTimeMs, Math.max(0, idleTimeMs));
+            delta.mControllerEnergyUsed = Math.max(0, latest.mControllerEnergyUsed - lastEnergy);
+        }
+
+        mLastInfo = latest;
+        return delta;
+    }
+}
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index 65697e9..fae215f 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -16,36 +16,25 @@
 
 package com.android.server.am;
 
-import static com.android.internal.os.BatteryStatsImpl.ExternalStatsSync.UPDATE_CPU;
-import static com.android.internal.os.BatteryStatsImpl.ExternalStatsSync.UPDATE_RADIO;
-import static com.android.internal.os.BatteryStatsImpl.ExternalStatsSync.UPDATE_WIFI;
-
-import android.annotation.Nullable;
 import android.bluetooth.BluetoothActivityEnergyInfo;
-import android.bluetooth.BluetoothAdapter;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
-import android.net.wifi.IWifiManager;
 import android.net.wifi.WifiActivityEnergyInfo;
 import android.os.PowerSaveState;
 import android.os.BatteryStats;
 import android.os.Binder;
 import android.os.Handler;
 import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
 import android.os.Parcel;
 import android.os.ParcelFileDescriptor;
 import android.os.ParcelFormatException;
-import android.os.Parcelable;
 import android.os.PowerManagerInternal;
 import android.os.Process;
-import android.os.RemoteException;
 import android.os.ServiceManager;
-import android.os.SynchronousResultReceiver;
 import android.os.SystemClock;
 import android.os.UserHandle;
+import android.os.UserManagerInternal;
 import android.os.WorkSource;
 import android.os.health.HealthStatsParceler;
 import android.os.health.HealthStatsWriter;
@@ -54,18 +43,15 @@
 import android.telephony.ModemActivityInfo;
 import android.telephony.SignalStrength;
 import android.telephony.TelephonyManager;
-import android.util.IntArray;
 import android.util.Slog;
-import android.util.TimeUtils;
 
-import com.android.internal.annotations.GuardedBy;
 import com.android.internal.app.IBatteryStats;
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.internal.os.BatteryStatsImpl;
 import com.android.internal.os.PowerProfile;
+import com.android.internal.os.RpmStats;
 import com.android.internal.util.DumpUtils;
 import com.android.server.LocalServices;
-import com.android.server.ServiceThread;
 import com.android.server.power.BatterySaverPolicy.ServiceType;
 
 import java.io.File;
@@ -79,7 +65,8 @@
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.List;
-import java.util.concurrent.TimeoutException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
 
 /**
  * All information we are collecting about things that can happen that impact
@@ -91,102 +78,14 @@
     static final String TAG = "BatteryStatsService";
     static final boolean DBG = false;
 
-    /**
-     * How long to wait on an individual subsystem to return its stats.
-     */
-    private static final long EXTERNAL_STATS_SYNC_TIMEOUT_MILLIS = 2000;
-
-    // There is some accuracy error in wifi reports so allow some slop in the results.
-    private static final long MAX_WIFI_STATS_SAMPLE_ERROR_MILLIS = 750;
-
     private static IBatteryStats sService;
 
     final BatteryStatsImpl mStats;
-    private final BatteryStatsHandler mHandler;
-    private Context mContext;
-    private IWifiManager mWifiManager;
-    private TelephonyManager mTelephony;
+    private final BatteryStatsImpl.UserInfoProvider mUserManagerUserInfoProvider;
+    private final Context mContext;
+    private final BatteryExternalStatsWorker mWorker;
 
-    // Lock acquired when extracting data from external sources.
-    private final Object mExternalStatsLock = new Object();
-
-    // WiFi keeps an accumulated total of stats, unlike Bluetooth.
-    // Keep the last WiFi stats so we can compute a delta.
-    @GuardedBy("mExternalStatsLock")
-    private WifiActivityEnergyInfo mLastInfo =
-            new WifiActivityEnergyInfo(0, 0, 0, new long[]{0}, 0, 0, 0);
-
-    class BatteryStatsHandler extends Handler implements BatteryStatsImpl.ExternalStatsSync {
-        public static final int MSG_SYNC_EXTERNAL_STATS = 1;
-        public static final int MSG_WRITE_TO_DISK = 2;
-
-        private int mUpdateFlags = 0;
-        private IntArray mUidsToRemove = new IntArray();
-
-        public BatteryStatsHandler(Looper looper) {
-            super(looper);
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MSG_SYNC_EXTERNAL_STATS:
-                    final int updateFlags;
-                    synchronized (this) {
-                        removeMessages(MSG_SYNC_EXTERNAL_STATS);
-                        updateFlags = mUpdateFlags;
-                        mUpdateFlags = 0;
-                    }
-                    updateExternalStatsSync((String)msg.obj, updateFlags);
-
-                    // other parts of the system could be calling into us
-                    // from mStats in order to report of changes. We must grab the mStats
-                    // lock before grabbing our own or we'll end up in a deadlock.
-                    synchronized (mStats) {
-                        synchronized (this) {
-                            final int numUidsToRemove = mUidsToRemove.size();
-                            for (int i = 0; i < numUidsToRemove; i++) {
-                                mStats.removeIsolatedUidLocked(mUidsToRemove.get(i));
-                            }
-                        }
-                        mUidsToRemove.clear();
-                    }
-                    break;
-
-                case MSG_WRITE_TO_DISK:
-                    updateExternalStatsSync("write", UPDATE_ALL);
-                    if (DBG) Slog.d(TAG, "begin writeAsyncLocked");
-                    synchronized (mStats) {
-                        mStats.writeAsyncLocked();
-                    }
-                    if (DBG) Slog.d(TAG, "end writeAsyncLocked");
-                    break;
-            }
-        }
-
-        @Override
-        public void scheduleSync(String reason, int updateFlags) {
-            synchronized (this) {
-                scheduleSyncLocked(reason, updateFlags);
-            }
-        }
-
-        @Override
-        public void scheduleCpuSyncDueToRemovedUid(int uid) {
-            synchronized (this) {
-                scheduleSyncLocked("remove-uid", UPDATE_CPU);
-                mUidsToRemove.add(uid);
-            }
-        }
-
-        private void scheduleSyncLocked(String reason, int updateFlags) {
-            if (mUpdateFlags == 0) {
-                sendMessage(Message.obtain(this, MSG_SYNC_EXTERNAL_STATS, reason));
-            }
-            mUpdateFlags |= updateFlags;
-        }
-    }
-
+    private native void getLowPowerStats(RpmStats rpmStats);
     private native int getPlatformLowPowerStats(ByteBuffer outBuffer);
     private native int getSubsystemLowPowerStats(ByteBuffer outBuffer);
     private CharsetDecoder mDecoderStat = StandardCharsets.UTF_8
@@ -198,6 +97,19 @@
     private CharBuffer mUtf16BufferStat = CharBuffer.allocate(MAX_LOW_POWER_STATS_SIZE);
     private static final int MAX_LOW_POWER_STATS_SIZE = 512;
 
+    /**
+     * Replaces the information in the given rpmStats with up-to-date information.
+     */
+    @Override
+    public void fillLowPowerStats(RpmStats rpmStats) {
+        if (DBG) Slog.d(TAG, "begin getLowPowerStats");
+        try {
+            getLowPowerStats(rpmStats);
+        } finally {
+            if (DBG) Slog.d(TAG, "end getLowPowerStats");
+        }
+    }
+
     @Override
     public String getPlatformLowPowerStats() {
         if (DBG) Slog.d(TAG, "begin getPlatformLowPowerStats");
@@ -222,7 +134,7 @@
 
     @Override
     public String getSubsystemLowPowerStats() {
-        Slog.d(TAG, "begin getSubsystemLowPowerStats");
+        if (DBG) Slog.d(TAG, "begin getSubsystemLowPowerStats");
         try {
             mUtf8BufferStat.clear();
             mUtf16BufferStat.clear();
@@ -238,33 +150,48 @@
             mUtf16BufferStat.flip();
             return mUtf16BufferStat.toString();
         } finally {
-            Slog.d(TAG, "end getSubsystemLowPowerStats");
+            if (DBG) Slog.d(TAG, "end getSubsystemLowPowerStats");
         }
     }
 
-    BatteryStatsService(File systemDir, Handler handler) {
-        // Our handler here will be accessing the disk, use a different thread than
-        // what the ActivityManagerService gave us (no I/O on that one!).
-        final ServiceThread thread = new ServiceThread("batterystats-sync",
-                Process.THREAD_PRIORITY_DEFAULT, true);
-        thread.start();
-        mHandler = new BatteryStatsHandler(thread.getLooper());
-
+    BatteryStatsService(Context context, File systemDir, Handler handler) {
         // BatteryStatsImpl expects the ActivityManagerService handler, so pass that one through.
-        mStats = new BatteryStatsImpl(systemDir, handler, mHandler, this);
+        mContext = context;
+        mUserManagerUserInfoProvider = new BatteryStatsImpl.UserInfoProvider() {
+            private UserManagerInternal umi;
+            @Override
+            public int[] getUserIds() {
+                if (umi == null) {
+                    umi = LocalServices.getService(UserManagerInternal.class);
+                }
+                return (umi != null) ? umi.getUserIds() : null;
+            }
+        };
+        mStats = new BatteryStatsImpl(systemDir, handler, this, mUserManagerUserInfoProvider);
+        mWorker = new BatteryExternalStatsWorker(context, mStats);
+        mStats.setExternalStatsSyncLocked(mWorker);
+        mStats.setRadioScanningTimeoutLocked(mContext.getResources().getInteger(
+                com.android.internal.R.integer.config_radioScanningTimeout) * 1000L);
+        mStats.setPowerProfileLocked(new PowerProfile(context));
     }
 
-    public void publish(Context context) {
-        mContext = context;
-        synchronized (mStats) {
-            mStats.setRadioScanningTimeoutLocked(mContext.getResources().getInteger(
-                    com.android.internal.R.integer.config_radioScanningTimeout)
-                    * 1000L);
-            mStats.setPowerProfileLocked(new PowerProfile(context));
-        }
+    public void publish() {
         ServiceManager.addService(BatteryStats.SERVICE_NAME, asBinder());
     }
 
+    private static void awaitUninterruptibly(Future<?> future) {
+        while (true) {
+            try {
+                future.get();
+                return;
+            } catch (ExecutionException e) {
+                return;
+            } catch (InterruptedException e) {
+                // Keep looping
+            }
+        }
+    }
+
     /**
      * At the time when the constructor runs, the power manager has not yet been
      * initialized.  So we initialize the low power observer later.
@@ -283,13 +210,14 @@
     public void shutdown() {
         Slog.w("BatteryStats", "Writing battery stats before shutdown...");
 
-        updateExternalStatsSync("shutdown", BatteryStatsImpl.ExternalStatsSync.UPDATE_ALL);
+        awaitUninterruptibly(mWorker.scheduleSync("shutdown", BatteryExternalStatsWorker.UPDATE_ALL));
+
         synchronized (mStats) {
             mStats.shutdownLocked();
         }
 
         // Shutdown the thread we made.
-        mHandler.getLooper().quit();
+        mWorker.shutdown();
     }
     
     public static IBatteryStats getService() {
@@ -327,7 +255,7 @@
      * object to update with the latest info, then write to disk.
      */
     public void scheduleWriteToDisk() {
-        mHandler.sendEmptyMessage(BatteryStatsHandler.MSG_WRITE_TO_DISK);
+        mWorker.scheduleWrite();
     }
 
     // These are for direct use by the activity manager...
@@ -341,6 +269,18 @@
         }
     }
 
+    void onCleanupUser(int userId) {
+        synchronized (mStats) {
+            mStats.onCleanupUserLocked(userId);
+        }
+    }
+
+    void onUserRemoved(int userId) {
+        synchronized (mStats) {
+            mStats.onUserRemovedLocked(userId);
+        }
+    }
+
     void addIsolatedUid(int isolatedUid, int appUid) {
         synchronized (mStats) {
             mStats.addIsolatedUidLocked(isolatedUid, appUid);
@@ -391,7 +331,7 @@
         //Slog.i("foo", "SENDING BATTERY INFO:");
         //mStats.dumpLocked(new LogPrinter(Log.INFO, "foo", Log.LOG_ID_SYSTEM));
         Parcel out = Parcel.obtain();
-        updateExternalStatsSync("get-stats", BatteryStatsImpl.ExternalStatsSync.UPDATE_ALL);
+        awaitUninterruptibly(mWorker.scheduleSync("get-stats", BatteryExternalStatsWorker.UPDATE_ALL));
         synchronized (mStats) {
             mStats.writeToParcel(out, 0);
         }
@@ -406,7 +346,7 @@
         //Slog.i("foo", "SENDING BATTERY INFO:");
         //mStats.dumpLocked(new LogPrinter(Log.INFO, "foo", Log.LOG_ID_SYSTEM));
         Parcel out = Parcel.obtain();
-        updateExternalStatsSync("get-stats", BatteryStatsImpl.ExternalStatsSync.UPDATE_ALL);
+        awaitUninterruptibly(mWorker.scheduleSync("get-stats", BatteryExternalStatsWorker.UPDATE_ALL));
         synchronized (mStats) {
             mStats.writeToParcel(out, 0);
         }
@@ -468,10 +408,10 @@
         }
     }
 
-    public void noteJobFinish(String name, int uid) {
+    public void noteJobFinish(String name, int uid, int stopReason) {
         enforceCallingPermission();
         synchronized (mStats) {
-            mStats.noteJobFinishLocked(name, uid);
+            mStats.noteJobFinishLocked(name, uid, stopReason);
         }
     }
 
@@ -635,13 +575,13 @@
 
     public void noteMobileRadioPowerState(int powerState, long timestampNs, int uid) {
         enforceCallingPermission();
-        boolean update;
+        final boolean update;
         synchronized (mStats) {
             update = mStats.noteMobileRadioPowerStateLocked(powerState, timestampNs, uid);
         }
 
         if (update) {
-            mHandler.scheduleSync("modem-data", UPDATE_RADIO);
+            mWorker.scheduleSync("modem-data", BatteryExternalStatsWorker.UPDATE_RADIO);
         }
     }
 
@@ -792,8 +732,7 @@
                 final String type = (powerState == DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH ||
                         powerState == DataConnectionRealTimeInfo.DC_POWER_STATE_MEDIUM) ? "active"
                         : "inactive";
-                mHandler.scheduleSync("wifi-data: " + type,
-                        UPDATE_WIFI);
+                mWorker.scheduleSync("wifi-data: " + type, BatteryExternalStatsWorker.UPDATE_WIFI);
             }
             mStats.noteWifiRadioPowerState(powerState, tsNanos, uid);
         }
@@ -951,7 +890,11 @@
     @Override
     public void noteNetworkStatsEnabled() {
         enforceCallingPermission();
-        mHandler.scheduleSync("network-stats-enabled", UPDATE_RADIO | UPDATE_WIFI);
+        // During device boot, qtaguid isn't enabled until after the inital
+        // loading of battery stats. Now that they're enabled, take our initial
+        // snapshot for future delta calculation.
+        mWorker.scheduleSync("network-stats-enabled",
+                BatteryExternalStatsWorker.UPDATE_RADIO | BatteryExternalStatsWorker.UPDATE_WIFI);
     }
 
     @Override
@@ -1028,9 +971,7 @@
             return;
         }
 
-        synchronized (mStats) {
-            mStats.updateBluetoothStateLocked(info);
-        }
+        mStats.updateBluetoothStateLocked(info);
     }
 
     @Override
@@ -1057,28 +998,29 @@
 
         // BatteryService calls us here and we may update external state. It would be wrong
         // to block such a low level service like BatteryService on external stats like WiFi.
-        mHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                synchronized (mStats) {
-                    final boolean onBattery = plugType == BatteryStatsImpl.BATTERY_PLUGGED_NONE;
-                    if (mStats.isOnBattery() == onBattery) {
-                        // 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);
-                        return;
-                    }
+        mWorker.scheduleRunnable(() -> {
+            synchronized (mStats) {
+                final boolean onBattery = plugType == BatteryStatsImpl.BATTERY_PLUGGED_NONE;
+                if (mStats.isOnBattery() == onBattery) {
+                    // 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);
+                    return;
                 }
+            }
 
-                // Sync external stats first as the battery has changed states. If we don't sync
-                // immediately here, we may not collect the relevant data later.
-                updateExternalStatsSync("battery-state", BatteryStatsImpl.ExternalStatsSync.UPDATE_ALL);
+            // Sync external stats first as the battery has changed states. If we don't sync
+            // before changing the state, we may not collect the relevant data later.
+            // Order here is guaranteed since we're scheduling from the same thread and we are
+            // using a single threaded executor.
+            mWorker.scheduleSync("battery-state", BatteryExternalStatsWorker.UPDATE_ALL);
+            mWorker.scheduleRunnable(() -> {
                 synchronized (mStats) {
                     mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt,
                             chargeUAh, chargeFullUAh);
                 }
-            }
+            });
         });
     }
     
@@ -1260,9 +1202,10 @@
                         pw.println("Battery stats reset.");
                         noOutput = true;
                     }
-                    updateExternalStatsSync("dump", BatteryStatsImpl.ExternalStatsSync.UPDATE_ALL);
+                    mWorker.scheduleSync("dump", BatteryExternalStatsWorker.UPDATE_ALL);
                 } else if ("--write".equals(arg)) {
-                    updateExternalStatsSync("dump", BatteryStatsImpl.ExternalStatsSync.UPDATE_ALL);
+                    awaitUninterruptibly(mWorker.scheduleSync("dump",
+                            BatteryExternalStatsWorker.UPDATE_ALL));
                     synchronized (mStats) {
                         mStats.writeSyncLocked();
                         pw.println("Battery stats written.");
@@ -1326,7 +1269,7 @@
                 flags |= BatteryStats.DUMP_DEVICE_WIFI_ONLY;
             }
             // Fetch data from external sources and update the BatteryStatsImpl object with them.
-            updateExternalStatsSync("dump", BatteryStatsImpl.ExternalStatsSync.UPDATE_ALL);
+            awaitUninterruptibly(mWorker.scheduleSync("dump", BatteryExternalStatsWorker.UPDATE_ALL));
         } finally {
             Binder.restoreCallingIdentity(ident);
         }
@@ -1356,7 +1299,7 @@
                                 in.unmarshall(raw, 0, raw.length);
                                 in.setDataPosition(0);
                                 BatteryStatsImpl checkinStats = new BatteryStatsImpl(
-                                        null, mStats.mHandler, null);
+                                        null, mStats.mHandler, null, mUserManagerUserInfoProvider);
                                 checkinStats.readSummaryFromParcel(in);
                                 in.recycle();
                                 checkinStats.dumpCheckinLocked(mContext, pw, apps, flags,
@@ -1391,229 +1334,6 @@
         }
     }
 
-    private WifiActivityEnergyInfo extractDelta(WifiActivityEnergyInfo latest) {
-        final long timePeriodMs = latest.mTimestamp - mLastInfo.mTimestamp;
-        final long lastIdleMs = mLastInfo.mControllerIdleTimeMs;
-        final long lastTxMs = mLastInfo.mControllerTxTimeMs;
-        final long lastRxMs = mLastInfo.mControllerRxTimeMs;
-        final long lastEnergy = mLastInfo.mControllerEnergyUsed;
-
-        // We will modify the last info object to be the delta, and store the new
-        // WifiActivityEnergyInfo object as our last one.
-        final WifiActivityEnergyInfo delta = mLastInfo;
-        delta.mTimestamp = latest.getTimeStamp();
-        delta.mStackState = latest.getStackState();
-
-        final long txTimeMs = latest.mControllerTxTimeMs - lastTxMs;
-        final long rxTimeMs = latest.mControllerRxTimeMs - lastRxMs;
-        final long idleTimeMs = latest.mControllerIdleTimeMs - lastIdleMs;
-
-        if (txTimeMs < 0 || rxTimeMs < 0) {
-            // The stats were reset by the WiFi system (which is why our delta is negative).
-            // Returns the unaltered stats.
-            delta.mControllerEnergyUsed = latest.mControllerEnergyUsed;
-            delta.mControllerRxTimeMs = latest.mControllerRxTimeMs;
-            delta.mControllerTxTimeMs = latest.mControllerTxTimeMs;
-            delta.mControllerIdleTimeMs = latest.mControllerIdleTimeMs;
-            Slog.v(TAG, "WiFi energy data was reset, new WiFi energy data is " + delta);
-        } else {
-            final long totalActiveTimeMs = txTimeMs + rxTimeMs;
-            long maxExpectedIdleTimeMs;
-            if (totalActiveTimeMs > timePeriodMs) {
-                // Cap the max idle time at zero since the active time consumed the whole time
-                maxExpectedIdleTimeMs = 0;
-                if (totalActiveTimeMs > timePeriodMs + MAX_WIFI_STATS_SAMPLE_ERROR_MILLIS) {
-                    StringBuilder sb = new StringBuilder();
-                    sb.append("Total Active time ");
-                    TimeUtils.formatDuration(totalActiveTimeMs, sb);
-                    sb.append(" is longer than sample period ");
-                    TimeUtils.formatDuration(timePeriodMs, sb);
-                    sb.append(".\n");
-                    sb.append("Previous WiFi snapshot: ").append("idle=");
-                    TimeUtils.formatDuration(lastIdleMs, sb);
-                    sb.append(" rx=");
-                    TimeUtils.formatDuration(lastRxMs, sb);
-                    sb.append(" tx=");
-                    TimeUtils.formatDuration(lastTxMs, sb);
-                    sb.append(" e=").append(lastEnergy);
-                    sb.append("\n");
-                    sb.append("Current WiFi snapshot: ").append("idle=");
-                    TimeUtils.formatDuration(latest.mControllerIdleTimeMs, sb);
-                    sb.append(" rx=");
-                    TimeUtils.formatDuration(latest.mControllerRxTimeMs, sb);
-                    sb.append(" tx=");
-                    TimeUtils.formatDuration(latest.mControllerTxTimeMs, sb);
-                    sb.append(" e=").append(latest.mControllerEnergyUsed);
-                    Slog.wtf(TAG, sb.toString());
-                }
-            } else {
-                maxExpectedIdleTimeMs = timePeriodMs - totalActiveTimeMs;
-            }
-            // These times seem to be the most reliable.
-            delta.mControllerTxTimeMs = txTimeMs;
-            delta.mControllerRxTimeMs = rxTimeMs;
-            // WiFi calculates the idle time as a difference from the on time and the various
-            // Rx + Tx times. There seems to be some missing time there because this sometimes
-            // becomes negative. Just cap it at 0 and ensure that it is less than the expected idle
-            // time from the difference in timestamps.
-            // b/21613534
-            delta.mControllerIdleTimeMs = Math.min(maxExpectedIdleTimeMs, Math.max(0, idleTimeMs));
-            delta.mControllerEnergyUsed = Math.max(0, latest.mControllerEnergyUsed - lastEnergy);
-        }
-
-        mLastInfo = latest;
-        return delta;
-    }
-
-    /**
-     * Helper method to extract the Parcelable controller info from a
-     * SynchronousResultReceiver.
-     */
-    private static <T extends Parcelable> T awaitControllerInfo(
-            @Nullable SynchronousResultReceiver receiver) throws TimeoutException {
-        if (receiver == null) {
-            return null;
-        }
-
-        final SynchronousResultReceiver.Result result =
-                receiver.awaitResult(EXTERNAL_STATS_SYNC_TIMEOUT_MILLIS);
-        if (result.bundle != null) {
-            // This is the final destination for the Bundle.
-            result.bundle.setDefusable(true);
-
-            final T data = result.bundle.getParcelable(BatteryStats.RESULT_RECEIVER_CONTROLLER_KEY);
-            if (data != null) {
-                return data;
-            }
-        }
-        Slog.e(TAG, "no controller energy info supplied");
-        return null;
-    }
-
-    /**
-     * Fetches data from external sources (WiFi controller, bluetooth chipset) and updates
-     * batterystats with that information.
-     *
-     * We first grab a lock specific to this method, then once all the data has been collected,
-     * we grab the mStats lock and update the data.
-     *
-     * @param reason The reason why this collection was requested. Useful for debugging.
-     * @param updateFlags Which external stats to update. Can be a combination of
-     *                    {@link BatteryStatsImpl.ExternalStatsSync#UPDATE_CPU},
-     *                    {@link BatteryStatsImpl.ExternalStatsSync#UPDATE_RADIO},
-     *                    {@link BatteryStatsImpl.ExternalStatsSync#UPDATE_WIFI},
-     *                    and {@link BatteryStatsImpl.ExternalStatsSync#UPDATE_BT}.
-     */
-    void updateExternalStatsSync(final String reason, int updateFlags) {
-        SynchronousResultReceiver wifiReceiver = null;
-        SynchronousResultReceiver bluetoothReceiver = null;
-        SynchronousResultReceiver modemReceiver = null;
-
-        if (DBG) Slog.d(TAG, "begin updateExternalStatsSync reason=" + reason);
-        synchronized (mExternalStatsLock) {
-            if (mContext == null) {
-                // Don't do any work yet.
-                if (DBG) Slog.d(TAG, "end updateExternalStatsSync");
-                return;
-            }
-
-            if ((updateFlags & UPDATE_WIFI) != 0) {
-                if (mWifiManager == null) {
-                    mWifiManager = IWifiManager.Stub.asInterface(
-                            ServiceManager.getService(Context.WIFI_SERVICE));
-                }
-
-                if (mWifiManager != null) {
-                    try {
-                        wifiReceiver = new SynchronousResultReceiver();
-                        mWifiManager.requestActivityInfo(wifiReceiver);
-                    } catch (RemoteException e) {
-                        // Oh well.
-                    }
-                }
-            }
-
-            if ((updateFlags & BatteryStatsImpl.ExternalStatsSync.UPDATE_BT) != 0) {
-                final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-                if (adapter != null) {
-                    bluetoothReceiver = new SynchronousResultReceiver();
-                    adapter.requestControllerActivityEnergyInfo(bluetoothReceiver);
-                }
-            }
-
-            if ((updateFlags & BatteryStatsImpl.ExternalStatsSync.UPDATE_RADIO) != 0) {
-                if (mTelephony == null) {
-                    mTelephony = TelephonyManager.from(mContext);
-                }
-
-                if (mTelephony != null) {
-                    modemReceiver = new SynchronousResultReceiver();
-                    mTelephony.requestModemActivityInfo(modemReceiver);
-                }
-            }
-
-            WifiActivityEnergyInfo wifiInfo = null;
-            BluetoothActivityEnergyInfo bluetoothInfo = null;
-            ModemActivityInfo modemInfo = null;
-            try {
-                wifiInfo = awaitControllerInfo(wifiReceiver);
-            } catch (TimeoutException e) {
-                Slog.w(TAG, "Timeout reading wifi stats");
-            }
-
-            try {
-                bluetoothInfo = awaitControllerInfo(bluetoothReceiver);
-            } catch (TimeoutException e) {
-                Slog.w(TAG, "Timeout reading bt stats");
-            }
-
-            try {
-                modemInfo = awaitControllerInfo(modemReceiver);
-            } catch (TimeoutException e) {
-                Slog.w(TAG, "Timeout reading modem stats");
-            }
-
-            synchronized (mStats) {
-                mStats.addHistoryEventLocked(
-                        SystemClock.elapsedRealtime(),
-                        SystemClock.uptimeMillis(),
-                        BatteryStats.HistoryItem.EVENT_COLLECT_EXTERNAL_STATS,
-                        reason, 0);
-
-                if ((updateFlags & UPDATE_CPU) != 0) {
-                    mStats.updateCpuTimeLocked(true /* updateCpuFreqData */);
-                }
-                mStats.updateKernelWakelocksLocked();
-                mStats.updateKernelMemoryBandwidthLocked();
-
-                if (bluetoothInfo != null) {
-                    if (bluetoothInfo.isValid()) {
-                        mStats.updateBluetoothStateLocked(bluetoothInfo);
-                    } else {
-                        Slog.e(TAG, "bluetooth info is invalid: " + bluetoothInfo);
-                    }
-                }
-            }
-
-            if (wifiInfo != null) {
-                if (wifiInfo.isValid()) {
-                    mStats.updateWifiState(extractDelta(wifiInfo));
-                } else {
-                    Slog.e(TAG, "wifi info is invalid: " + wifiInfo);
-                }
-            }
-
-            if (modemInfo != null) {
-                if (modemInfo.isValid()) {
-                    mStats.updateMobileRadioState(modemInfo);
-                } else {
-                    Slog.e(TAG, "modem info is invalid: " + modemInfo);
-                }
-            }
-        }
-        if (DBG) Slog.d(TAG, "end updateExternalStatsSync");
-    }
-
     /**
      * Gets a snapshot of the system health for a particular uid.
      */
@@ -1625,8 +1345,8 @@
         }
         long ident = Binder.clearCallingIdentity();
         try {
-            updateExternalStatsSync("get-health-stats-for-uid",
-                    BatteryStatsImpl.ExternalStatsSync.UPDATE_ALL);
+            awaitUninterruptibly(mWorker.scheduleSync("get-health-stats-for-uids",
+                    BatteryExternalStatsWorker.UPDATE_ALL));
             synchronized (mStats) {
                 return getHealthStatsForUidLocked(requestUid);
             }
@@ -1650,8 +1370,8 @@
         long ident = Binder.clearCallingIdentity();
         int i=-1;
         try {
-            updateExternalStatsSync("get-health-stats-for-uids",
-                    BatteryStatsImpl.ExternalStatsSync.UPDATE_ALL);
+            awaitUninterruptibly(mWorker.scheduleSync("get-health-stats-for-uids",
+                    BatteryExternalStatsWorker.UPDATE_ALL));
             synchronized (mStats) {
                 final int N = requestUids.length;
                 final HealthStatsParceler[] results = new HealthStatsParceler[N];
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index da196e2..d835454 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -1445,20 +1445,19 @@
         r.receiverTime = now;
         r.anrCount++;
 
-        // Current receiver has passed its expiration date.
-        if (r.nextReceiver <= 0) {
-            Slog.w(TAG, "Timeout on receiver with nextReceiver <= 0");
-            return;
-        }
-
         ProcessRecord app = null;
         String anrMessage = null;
 
-        Object curReceiver = r.receivers.get(r.nextReceiver-1);
-        r.delivery[r.nextReceiver-1] = BroadcastRecord.DELIVERY_TIMEOUT;
-        Slog.w(TAG, "Receiver during timeout: " + curReceiver);
+        Object curReceiver;
+        if (r.nextReceiver > 0) {
+            curReceiver = r.receivers.get(r.nextReceiver-1);
+            r.delivery[r.nextReceiver-1] = BroadcastRecord.DELIVERY_TIMEOUT;
+        } else {
+            curReceiver = r.curReceiver;
+        }
+        Slog.w(TAG, "Receiver during timeout of " + r + " : " + curReceiver);
         logBroadcastReceiverDiscardLocked(r);
-        if (curReceiver instanceof BroadcastFilter) {
+        if (curReceiver != null && curReceiver instanceof BroadcastFilter) {
             BroadcastFilter bf = (BroadcastFilter)curReceiver;
             if (bf.receiverList.pid != 0
                     && bf.receiverList.pid != ActivityManagerService.MY_PID) {
@@ -1498,25 +1497,29 @@
         else return x;
     }
 
-    private final void addBroadcastToHistoryLocked(BroadcastRecord r) {
-        if (r.callingUid < 0) {
+    private final void addBroadcastToHistoryLocked(BroadcastRecord original) {
+        if (original.callingUid < 0) {
             // This was from a registerReceiver() call; ignore it.
             return;
         }
-        r.finishTime = SystemClock.uptimeMillis();
+        original.finishTime = SystemClock.uptimeMillis();
 
         if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) {
             Trace.asyncTraceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER,
-                createBroadcastTraceTitle(r, BroadcastRecord.DELIVERY_DELIVERED),
-                System.identityHashCode(r));
+                createBroadcastTraceTitle(original, BroadcastRecord.DELIVERY_DELIVERED),
+                System.identityHashCode(original));
         }
 
-        mBroadcastHistory[mHistoryNext] = r;
+        // Note sometimes (only for sticky broadcasts?) we reuse BroadcastRecords,
+        // So don't change the incoming record directly.
+        final BroadcastRecord historyRecord = original.maybeStripForHistory();
+
+        mBroadcastHistory[mHistoryNext] = historyRecord;
         mHistoryNext = ringAdvance(mHistoryNext, 1, MAX_BROADCAST_HISTORY);
 
-        mBroadcastSummaryHistory[mSummaryHistoryNext] = r.intent;
-        mSummaryHistoryEnqueueTime[mSummaryHistoryNext] = r.enqueueClockTime;
-        mSummaryHistoryDispatchTime[mSummaryHistoryNext] = r.dispatchClockTime;
+        mBroadcastSummaryHistory[mSummaryHistoryNext] = historyRecord.intent;
+        mSummaryHistoryEnqueueTime[mSummaryHistoryNext] = historyRecord.enqueueClockTime;
+        mSummaryHistoryDispatchTime[mSummaryHistoryNext] = historyRecord.dispatchClockTime;
         mSummaryHistoryFinishTime[mSummaryHistoryNext] = System.currentTimeMillis();
         mSummaryHistoryNext = ringAdvance(mSummaryHistoryNext, 1, MAX_BROADCAST_SUMMARY_HISTORY);
     }
diff --git a/services/core/java/com/android/server/am/BroadcastRecord.java b/services/core/java/com/android/server/am/BroadcastRecord.java
index 7764be7..6bc0744 100644
--- a/services/core/java/com/android/server/am/BroadcastRecord.java
+++ b/services/core/java/com/android/server/am/BroadcastRecord.java
@@ -248,6 +248,55 @@
         state = IDLE;
     }
 
+    /**
+     * Copy constructor which takes a different intent.
+     * Only used by {@link #maybeStripForHistory}.
+     */
+    private BroadcastRecord(BroadcastRecord from, Intent newIntent) {
+        intent = newIntent;
+        targetComp = newIntent.getComponent();
+
+        callerApp = from.callerApp;
+        callerPackage = from.callerPackage;
+        callingPid = from.callingPid;
+        callingUid = from.callingUid;
+        callerInstantApp = from.callerInstantApp;
+        ordered = from.ordered;
+        sticky = from.sticky;
+        initialSticky = from.initialSticky;
+        userId = from.userId;
+        resolvedType = from.resolvedType;
+        requiredPermissions = from.requiredPermissions;
+        appOp = from.appOp;
+        options = from.options;
+        receivers = from.receivers;
+        delivery = from.delivery;
+        resultTo = from.resultTo;
+        enqueueClockTime = from.enqueueClockTime;
+        dispatchTime = from.dispatchTime;
+        dispatchClockTime = from.dispatchClockTime;
+        receiverTime = from.receiverTime;
+        finishTime = from.finishTime;
+        resultCode = from.resultCode;
+        resultData = from.resultData;
+        resultExtras = from.resultExtras;
+        resultAbort = from.resultAbort;
+        nextReceiver = from.nextReceiver;
+        receiver = from.receiver;
+        state = from.state;
+        anrCount = from.anrCount;
+        manifestCount = from.manifestCount;
+        manifestSkipCount = from.manifestSkipCount;
+        queue = from.queue;
+    }
+
+    public BroadcastRecord maybeStripForHistory() {
+        if (!intent.canStripForHistory()) {
+            return this;
+        }
+        return new BroadcastRecord(this, intent.maybeStripForHistory());
+    }
+
     boolean cleanupDisabledPackageReceiversLocked(
             String packageName, Set<String> filterByClasses, int userId, boolean doit) {
         if ((userId != UserHandle.USER_ALL && this.userId != userId) || receivers == null) {
diff --git a/services/core/java/com/android/server/am/KeyguardController.java b/services/core/java/com/android/server/am/KeyguardController.java
index d10f9fb..8596113 100644
--- a/services/core/java/com/android/server/am/KeyguardController.java
+++ b/services/core/java/com/android/server/am/KeyguardController.java
@@ -18,6 +18,8 @@
 
 import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
 import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
+import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.Display.INVALID_DISPLAY;
 import static android.view.WindowManagerPolicy.KEYGUARD_GOING_AWAY_FLAG_NO_WINDOW_ANIMATIONS;
 import static android.view.WindowManagerPolicy.KEYGUARD_GOING_AWAY_FLAG_TO_SHADE;
 import static android.view.WindowManagerPolicy.KEYGUARD_GOING_AWAY_FLAG_WITH_WALLPAPER;
@@ -30,9 +32,9 @@
 import static com.android.server.wm.AppTransition.TRANSIT_KEYGUARD_GOING_AWAY;
 import static com.android.server.wm.AppTransition.TRANSIT_KEYGUARD_OCCLUDE;
 import static com.android.server.wm.AppTransition.TRANSIT_KEYGUARD_UNOCCLUDE;
-import static com.android.server.wm.AppTransition.TRANSIT_NONE;
 import static com.android.server.wm.AppTransition.TRANSIT_UNSET;
 
+import android.app.ActivityManagerInternal.SleepToken;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.Trace;
@@ -64,6 +66,8 @@
     private ActivityRecord mDismissingKeyguardActivity;
     private int mBeforeUnoccludeTransit;
     private int mVisibilityTransactionDepth;
+    private SleepToken mSleepToken;
+    private int mSecondaryDisplayShowing = INVALID_DISPLAY;
 
     KeyguardController(ActivityManagerService service,
             ActivityStackSupervisor stackSupervisor) {
@@ -76,10 +80,12 @@
     }
 
     /**
-     * @return true if Keyguard is showing, not going away, and not being occluded, false otherwise
+     * @return true if Keyguard is showing, not going away, and not being occluded on the given
+     *         display, false otherwise
      */
-    boolean isKeyguardShowing() {
-        return mKeyguardShowing && !mKeyguardGoingAway && !mOccluded;
+    boolean isKeyguardShowing(int displayId) {
+        return mKeyguardShowing && !mKeyguardGoingAway &&
+                (displayId == DEFAULT_DISPLAY ? !mOccluded : displayId == mSecondaryDisplayShowing);
     }
 
     /**
@@ -92,18 +98,22 @@
     /**
      * Update the Keyguard showing state.
      */
-    void setKeyguardShown(boolean showing) {
-        if (showing == mKeyguardShowing) {
+    void setKeyguardShown(boolean showing, int secondaryDisplayShowing) {
+        boolean showingChanged = showing != mKeyguardShowing;
+        if (!showingChanged && secondaryDisplayShowing == mSecondaryDisplayShowing) {
             return;
         }
         mKeyguardShowing = showing;
-        dismissDockedStackIfNeeded();
-        if (showing) {
-            setKeyguardGoingAway(false);
-            mDismissalRequested = false;
+        mSecondaryDisplayShowing = secondaryDisplayShowing;
+        if (showingChanged) {
+            dismissDockedStackIfNeeded();
+            if (showing) {
+                setKeyguardGoingAway(false);
+                mDismissalRequested = false;
+            }
         }
         mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
-        mService.updateSleepIfNeededLocked();
+        updateKeyguardSleepToken();
     }
 
     /**
@@ -123,7 +133,7 @@
             mWindowManager.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY,
                     false /* alwaysKeepCurrent */, convertTransitFlags(flags),
                     false /* forceOverride */);
-            mService.updateSleepIfNeededLocked();
+            updateKeyguardSleepToken();
 
             // Some stack visibility might change (e.g. docked stack)
             mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
@@ -145,6 +155,13 @@
             return;
         }
         Slog.i(TAG, "Activity requesting to dismiss Keyguard: " + activityRecord);
+
+        // If the client has requested to dismiss the keyguard and the Activity has the flag to
+        // turn the screen on, wakeup the screen if it's the top Activity.
+        if (activityRecord.getTurnScreenOnFlag() && activityRecord.isTopRunningActivity()) {
+            mStackSupervisor.wakeUp("dismissKeyguard");
+        }
+
         mWindowManager.dismissKeyguard(callback);
     }
 
@@ -257,7 +274,7 @@
             try {
                 mWindowManager.prepareAppTransition(resolveOccludeTransit(),
                         false /* alwaysKeepCurrent */, 0 /* flags */, true /* forceOverride */);
-                mService.updateSleepIfNeededLocked();
+                updateKeyguardSleepToken();
                 mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
                 mWindowManager.executeAppTransition();
             } finally {
@@ -327,6 +344,15 @@
         }
     }
 
+    private void updateKeyguardSleepToken() {
+        if (mSleepToken == null && isKeyguardShowing(DEFAULT_DISPLAY)) {
+            mSleepToken = mService.acquireSleepToken("Keyguard", DEFAULT_DISPLAY);
+        } else if (mSleepToken != null && !isKeyguardShowing(DEFAULT_DISPLAY)) {
+            mSleepToken.release();
+            mSleepToken = null;
+        }
+    }
+
     void dump(PrintWriter pw, String prefix) {
         pw.println(prefix + "KeyguardController:");
         pw.println(prefix + "  mKeyguardShowing=" + mKeyguardShowing);
diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java
index cad5dcf..63a35e8 100644
--- a/services/core/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/core/java/com/android/server/am/PendingIntentRecord.java
@@ -20,7 +20,6 @@
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
 
 import android.app.ActivityManager;
-import android.app.IActivityContainer;
 import android.content.IIntentSender;
 import android.content.IIntentReceiver;
 import android.app.PendingIntent;
@@ -37,7 +36,6 @@
 import android.util.TimeUtils;
 
 import com.android.internal.os.IResultReceiver;
-import com.android.server.am.ActivityStackSupervisor.ActivityContainer;
 
 import java.io.PrintWriter;
 import java.lang.ref.WeakReference;
@@ -234,30 +232,23 @@
     public void send(int code, Intent intent, String resolvedType, IBinder whitelistToken,
             IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) {
         sendInner(code, intent, resolvedType, whitelistToken, finishedReceiver,
-                requiredPermission, null, null, 0, 0, 0, options, null);
+                requiredPermission, null, null, 0, 0, 0, options);
     }
 
     public int sendWithResult(int code, Intent intent, String resolvedType, IBinder whitelistToken,
             IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) {
         return sendInner(code, intent, resolvedType, whitelistToken, finishedReceiver,
-                requiredPermission, null, null, 0, 0, 0, options, null);
+                requiredPermission, null, null, 0, 0, 0, options);
     }
 
     int sendInner(int code, Intent intent, String resolvedType, IBinder whitelistToken,
             IIntentReceiver finishedReceiver,
             String requiredPermission, IBinder resultTo, String resultWho, int requestCode,
-            int flagsMask, int flagsValues, Bundle options, IActivityContainer container) {
+            int flagsMask, int flagsValues, Bundle options) {
         if (intent != null) intent.setDefusable(true);
         if (options != null) options.setDefusable(true);
 
         synchronized (owner) {
-            final ActivityContainer activityContainer = (ActivityContainer)container;
-            if (activityContainer != null && activityContainer.mParentActivity != null &&
-                    activityContainer.mParentActivity.state
-                            != ActivityStack.ActivityState.RESUMED) {
-                // Cannot start a child activity if the parent is not resumed.
-                return ActivityManager.START_CANCELED;
-            }
             if (!canceled) {
                 sent = true;
                 if ((key.flags&PendingIntent.FLAG_ONE_SHOT) != 0) {
@@ -341,12 +332,13 @@
                                 }
                                 allIntents[allIntents.length-1] = finalIntent;
                                 allResolvedTypes[allResolvedTypes.length-1] = resolvedType;
-                                owner.startActivitiesInPackage(uid, key.packageName, allIntents,
-                                        allResolvedTypes, resultTo, options, userId);
+                                owner.startActivitiesInPackage(uid, callingPid, callingUid,
+                                        key.packageName, allIntents, allResolvedTypes, resultTo,
+                                        options, userId);
                             } else {
                                 owner.startActivityInPackage(uid, key.packageName, finalIntent,
                                         resolvedType, resultTo, resultWho, requestCode, 0,
-                                        options, userId, container, null, "PendingIntentRecord");
+                                        options, userId, null, "PendingIntentRecord");
                             }
                         } catch (RuntimeException e) {
                             Slog.w(TAG, "Unable to send startActivity intent", e);
diff --git a/services/core/java/com/android/server/am/PinnedActivityStack.java b/services/core/java/com/android/server/am/PinnedActivityStack.java
index 2010c24..a601ee1 100644
--- a/services/core/java/com/android/server/am/PinnedActivityStack.java
+++ b/services/core/java/com/android/server/am/PinnedActivityStack.java
@@ -20,7 +20,6 @@
 import android.content.res.Configuration;
 import android.graphics.Rect;
 
-import com.android.server.am.ActivityStackSupervisor.ActivityContainer;
 import com.android.server.wm.PinnedStackWindowController;
 import com.android.server.wm.PinnedStackWindowListener;
 
@@ -33,9 +32,9 @@
 class PinnedActivityStack extends ActivityStack<PinnedStackWindowController>
         implements PinnedStackWindowListener {
 
-    PinnedActivityStack(ActivityContainer activityContainer,
-            RecentTasks recentTasks, boolean onTop) {
-        super(activityContainer, recentTasks, onTop);
+    PinnedActivityStack(ActivityStackSupervisor.ActivityDisplay display, int stackId,
+            ActivityStackSupervisor supervisor, RecentTasks recentTasks, boolean onTop) {
+        super(display, stackId, supervisor, recentTasks, onTop);
     }
 
     @Override
@@ -92,15 +91,16 @@
         return mWindowContainerController.deferScheduleMultiWindowModeChanged();
     }
 
-    public void updatePictureInPictureModeForPinnedStackAnimation(Rect targetStackBounds) {
+    public void updatePictureInPictureModeForPinnedStackAnimation(Rect targetStackBounds,
+            boolean forceUpdate) {
         // It is guaranteed that the activities requiring the update will be in the pinned stack at
         // this point (either reparented before the animation into PiP, or before reparenting after
         // the animation out of PiP)
         synchronized(this) {
             ArrayList<TaskRecord> tasks = getAllTasks();
             for (int i = 0; i < tasks.size(); i++ ) {
-                mStackSupervisor.scheduleUpdatePictureInPictureModeIfNeeded(tasks.get(i),
-                        targetStackBounds, true /* immediate */);
+                mStackSupervisor.updatePictureInPictureMode(tasks.get(i), targetStackBounds,
+                        forceUpdate);
             }
         }
     }
diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java
index 53c7f84..411e973 100644
--- a/services/core/java/com/android/server/am/ProcessRecord.java
+++ b/services/core/java/com/android/server/am/ProcessRecord.java
@@ -143,7 +143,7 @@
     ActiveInstrumentation instr;// Set to currently active instrumentation running in process
     boolean usingWrapper;       // Set to true when process was launched with a wrapper attached
     final ArraySet<BroadcastRecord> curReceivers = new ArraySet<BroadcastRecord>();// receivers currently running in the app
-    long lastWakeTime;          // How long proc held wake lock at last check
+    long whenUnimportant;       // When (uptime) the process last became unimportant
     long lastCpuTime;           // How long proc has run CPU at last check
     long curCpuTime;            // How long proc has run CPU most recently
     long lastRequestedGc;       // When we last asked the app to do a gc
@@ -204,7 +204,7 @@
     boolean whitelistManager;
 
     void dump(PrintWriter pw, String prefix) {
-        final long now = SystemClock.uptimeMillis();
+        final long nowUptime = SystemClock.uptimeMillis();
 
         pw.print(prefix); pw.print("user #"); pw.print(userId);
                 pw.print(" uid="); pw.print(info.uid);
@@ -254,11 +254,11 @@
         pw.print(prefix); pw.print("pid="); pw.print(pid); pw.print(" starting=");
                 pw.println(starting);
         pw.print(prefix); pw.print("lastActivityTime=");
-                TimeUtils.formatDuration(lastActivityTime, now, pw);
+                TimeUtils.formatDuration(lastActivityTime, nowUptime, pw);
                 pw.print(" lastPssTime=");
-                TimeUtils.formatDuration(lastPssTime, now, pw);
+                TimeUtils.formatDuration(lastPssTime, nowUptime, pw);
                 pw.print(" nextPssTime=");
-                TimeUtils.formatDuration(nextPssTime, now, pw);
+                TimeUtils.formatDuration(nextPssTime, nowUptime, pw);
                 pw.println();
         pw.print(prefix); pw.print("adjSeq="); pw.print(adjSeq);
                 pw.print(" lruSeq="); pw.print(lruSeq);
@@ -294,7 +294,7 @@
                 pw.print(" pssProcState="); pw.print(pssProcState);
                 pw.print(" setProcState="); pw.print(setProcState);
                 pw.print(" lastStateTime=");
-                TimeUtils.formatDuration(lastStateTime, now, pw);
+                TimeUtils.formatDuration(lastStateTime, nowUptime, pw);
                 pw.println();
         if (hasShownUi || pendingUiClean || hasAboveClient || treatLikeActivity) {
             pw.print(prefix); pw.print("hasShownUi="); pw.print(hasShownUi);
@@ -334,29 +334,26 @@
         }
         if (lastProviderTime > 0) {
             pw.print(prefix); pw.print("lastProviderTime=");
-            TimeUtils.formatDuration(lastProviderTime, now, pw);
+            TimeUtils.formatDuration(lastProviderTime, nowUptime, pw);
             pw.println();
         }
         if (hasStartedServices) {
             pw.print(prefix); pw.print("hasStartedServices="); pw.println(hasStartedServices);
         }
-        if (setProcState >= ActivityManager.PROCESS_STATE_SERVICE) {
-            long wtime;
-            synchronized (mBatteryStats) {
-                wtime = mBatteryStats.getProcessWakeTime(info.uid,
-                        pid, SystemClock.elapsedRealtime());
-            }
-            pw.print(prefix); pw.print("lastWakeTime="); pw.print(lastWakeTime);
-                    pw.print(" timeUsed=");
-                    TimeUtils.formatDuration(wtime-lastWakeTime, pw); pw.println("");
+        if (setProcState > ActivityManager.PROCESS_STATE_SERVICE) {
             pw.print(prefix); pw.print("lastCpuTime="); pw.print(lastCpuTime);
-                    pw.print(" timeUsed=");
-                    TimeUtils.formatDuration(curCpuTime-lastCpuTime, pw); pw.println("");
+                    if (lastCpuTime > 0) {
+                        pw.print(" timeUsed=");
+                        TimeUtils.formatDuration(curCpuTime - lastCpuTime, pw);
+                    }
+                    pw.print(" whenUnimportant=");
+                    TimeUtils.formatDuration(whenUnimportant - nowUptime, pw);
+                    pw.println();
         }
         pw.print(prefix); pw.print("lastRequestedGc=");
-                TimeUtils.formatDuration(lastRequestedGc, now, pw);
+                TimeUtils.formatDuration(lastRequestedGc, nowUptime, pw);
                 pw.print(" lastLowMemory=");
-                TimeUtils.formatDuration(lastLowMemory, now, pw);
+                TimeUtils.formatDuration(lastLowMemory, nowUptime, pw);
                 pw.print(" reportLowMemory="); pw.println(reportLowMemory);
         if (killed || killedByAm || waitingToKill != null) {
             pw.print(prefix); pw.print("killed="); pw.print(killed);
diff --git a/services/core/java/com/android/server/am/ServiceRecord.java b/services/core/java/com/android/server/am/ServiceRecord.java
index 027dc08..16995e5 100644
--- a/services/core/java/com/android/server/am/ServiceRecord.java
+++ b/services/core/java/com/android/server/am/ServiceRecord.java
@@ -33,6 +33,7 @@
 import android.content.pm.ServiceInfo;
 import android.net.Uri;
 import android.os.Binder;
+import android.os.Build;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.SystemClock;
@@ -517,6 +518,22 @@
                             } catch (PackageManager.NameNotFoundException e) {
                             }
                         }
+                        if (nm.getNotificationChannel(localPackageName, appUid,
+                                localForegroundNoti.getChannelId()) == null) {
+                            int targetSdkVersion = Build.VERSION_CODES.O_MR1;
+                            try {
+                                final ApplicationInfo applicationInfo =
+                                        ams.mContext.getPackageManager().getApplicationInfoAsUser(
+                                                appInfo.packageName, 0, userId);
+                                targetSdkVersion = applicationInfo.targetSdkVersion;
+                            } catch (PackageManager.NameNotFoundException e) {
+                            }
+                            if (targetSdkVersion >= Build.VERSION_CODES.O_MR1) {
+                                throw new RuntimeException(
+                                        "invalid channel for service notification: "
+                                                + foregroundNoti);
+                            }
+                        }
                         if (localForegroundNoti.getSmallIcon() == null) {
                             // Notifications whose icon is 0 are defined to not show
                             // a notification, silently ignoring it.  We don't want to
diff --git a/services/core/java/com/android/server/am/TaskChangeNotificationController.java b/services/core/java/com/android/server/am/TaskChangeNotificationController.java
index 8297169..6a986bb 100644
--- a/services/core/java/com/android/server/am/TaskChangeNotificationController.java
+++ b/services/core/java/com/android/server/am/TaskChangeNotificationController.java
@@ -95,7 +95,7 @@
     };
 
     private final TaskStackConsumer mNotifyActivityPinned = (l, m) -> {
-        l.onActivityPinned((String) m.obj, m.arg1);
+        l.onActivityPinned((String) m.obj, m.arg1, m.arg2);
     };
 
     private final TaskStackConsumer mNotifyActivityUnpinned = (l, m) -> {
@@ -278,10 +278,10 @@
     }
 
     /** Notifies all listeners when an Activity is pinned. */
-    void notifyActivityPinned(String packageName, int taskId) {
+    void notifyActivityPinned(String packageName, int userId, int taskId) {
         mHandler.removeMessages(NOTIFY_ACTIVITY_PINNED_LISTENERS_MSG);
         final Message msg = mHandler.obtainMessage(NOTIFY_ACTIVITY_PINNED_LISTENERS_MSG,
-                taskId, 0, packageName);
+                userId, taskId, packageName);
         forAllLocalListeners(mNotifyActivityPinned, msg);
         msg.sendToTarget();
     }
diff --git a/services/core/java/com/android/server/am/TaskPersister.java b/services/core/java/com/android/server/am/TaskPersister.java
index e56b09d..74c4826 100644
--- a/services/core/java/com/android/server/am/TaskPersister.java
+++ b/services/core/java/com/android/server/am/TaskPersister.java
@@ -679,102 +679,111 @@
                 }
                 writeTaskIdsFiles();
 
-                // If mNextWriteTime, then don't delay between each call to saveToXml().
-                final WriteQueueItem item;
-                synchronized (TaskPersister.this) {
-                    if (mNextWriteTime != FLUSH_QUEUE) {
-                        // The next write we don't have to wait so long.
-                        mNextWriteTime = SystemClock.uptimeMillis() + INTER_WRITE_DELAY_MS;
-                        if (DEBUG) Slog.d(TAG, "Next write time may be in " +
-                                INTER_WRITE_DELAY_MS + " msec. (" + mNextWriteTime + ")");
-                    }
+                processNextItem();
+            }
+        }
 
-                    while (mWriteQueue.isEmpty()) {
-                        if (mNextWriteTime != 0) {
-                            mNextWriteTime = 0; // idle.
-                            TaskPersister.this.notifyAll(); // wake up flush() if needed.
-                        }
-                        try {
-                            if (DEBUG) Slog.d(TAG, "LazyTaskWriter: waiting indefinitely.");
-                            TaskPersister.this.wait();
-                        } catch (InterruptedException e) {
-                        }
-                        // Invariant: mNextWriteTime is either FLUSH_QUEUE or PRE_WRITE_DELAY_MS
-                        // from now.
-                    }
-                    item = mWriteQueue.remove(0);
+        private void processNextItem() {
+            // This part is extracted into a method so that the GC can clearly see the end of the
+            // scope of the variable 'item'.  If this part was in the loop above, the last item
+            // it processed would always "leak".
+            // See https://b.corp.google.com/issues/64438652#comment7
 
-                    long now = SystemClock.uptimeMillis();
-                    if (DEBUG) Slog.d(TAG, "LazyTaskWriter: now=" + now + " mNextWriteTime=" +
-                            mNextWriteTime + " mWriteQueue.size=" + mWriteQueue.size());
-                    while (now < mNextWriteTime) {
-                        try {
-                            if (DEBUG) Slog.d(TAG, "LazyTaskWriter: waiting " +
-                                    (mNextWriteTime - now));
-                            TaskPersister.this.wait(mNextWriteTime - now);
-                        } catch (InterruptedException e) {
-                        }
-                        now = SystemClock.uptimeMillis();
-                    }
-
-                    // Got something to do.
+            // If mNextWriteTime, then don't delay between each call to saveToXml().
+            final WriteQueueItem item;
+            synchronized (TaskPersister.this) {
+                if (mNextWriteTime != FLUSH_QUEUE) {
+                    // The next write we don't have to wait so long.
+                    mNextWriteTime = SystemClock.uptimeMillis() + INTER_WRITE_DELAY_MS;
+                    if (DEBUG) Slog.d(TAG, "Next write time may be in " +
+                            INTER_WRITE_DELAY_MS + " msec. (" + mNextWriteTime + ")");
                 }
 
-                if (item instanceof ImageWriteQueueItem) {
-                    ImageWriteQueueItem imageWriteQueueItem = (ImageWriteQueueItem) item;
-                    final String filePath = imageWriteQueueItem.mFilePath;
-                    if (!createParentDirectory(filePath)) {
-                        Slog.e(TAG, "Error while creating images directory for file: " + filePath);
-                        continue;
+                while (mWriteQueue.isEmpty()) {
+                    if (mNextWriteTime != 0) {
+                        mNextWriteTime = 0; // idle.
+                        TaskPersister.this.notifyAll(); // wake up flush() if needed.
                     }
-                    final Bitmap bitmap = imageWriteQueueItem.mImage;
-                    if (DEBUG) Slog.d(TAG, "writing bitmap: filename=" + filePath);
-                    FileOutputStream imageFile = null;
                     try {
-                        imageFile = new FileOutputStream(new File(filePath));
-                        bitmap.compress(Bitmap.CompressFormat.PNG, 100, imageFile);
-                    } catch (Exception e) {
-                        Slog.e(TAG, "saveImage: unable to save " + filePath, e);
-                    } finally {
-                        IoUtils.closeQuietly(imageFile);
+                        if (DEBUG) Slog.d(TAG, "LazyTaskWriter: waiting indefinitely.");
+                        TaskPersister.this.wait();
+                    } catch (InterruptedException e) {
                     }
-                } else if (item instanceof TaskWriteQueueItem) {
-                    // Write out one task.
-                    StringWriter stringWriter = null;
-                    TaskRecord task = ((TaskWriteQueueItem) item).mTask;
-                    if (DEBUG) Slog.d(TAG, "Writing task=" + task);
-                    synchronized (mService) {
-                        if (task.inRecents) {
-                            // Still there.
-                            try {
-                                if (DEBUG) Slog.d(TAG, "Saving task=" + task);
-                                stringWriter = saveToXml(task);
-                            } catch (IOException e) {
-                            } catch (XmlPullParserException e) {
-                            }
-                        }
+                    // Invariant: mNextWriteTime is either FLUSH_QUEUE or PRE_WRITE_DELAY_MS
+                    // from now.
+                }
+                item = mWriteQueue.remove(0);
+
+                long now = SystemClock.uptimeMillis();
+                if (DEBUG) Slog.d(TAG, "LazyTaskWriter: now=" + now + " mNextWriteTime=" +
+                        mNextWriteTime + " mWriteQueue.size=" + mWriteQueue.size());
+                while (now < mNextWriteTime) {
+                    try {
+                        if (DEBUG) Slog.d(TAG, "LazyTaskWriter: waiting " +
+                                (mNextWriteTime - now));
+                        TaskPersister.this.wait(mNextWriteTime - now);
+                    } catch (InterruptedException e) {
                     }
-                    if (stringWriter != null) {
-                        // Write out xml file while not holding mService lock.
-                        FileOutputStream file = null;
-                        AtomicFile atomicFile = null;
+                    now = SystemClock.uptimeMillis();
+                }
+
+                // Got something to do.
+            }
+
+            if (item instanceof ImageWriteQueueItem) {
+                ImageWriteQueueItem imageWriteQueueItem = (ImageWriteQueueItem) item;
+                final String filePath = imageWriteQueueItem.mFilePath;
+                if (!createParentDirectory(filePath)) {
+                    Slog.e(TAG, "Error while creating images directory for file: " + filePath);
+                    return;
+                }
+                final Bitmap bitmap = imageWriteQueueItem.mImage;
+                if (DEBUG) Slog.d(TAG, "writing bitmap: filename=" + filePath);
+                FileOutputStream imageFile = null;
+                try {
+                    imageFile = new FileOutputStream(new File(filePath));
+                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, imageFile);
+                } catch (Exception e) {
+                    Slog.e(TAG, "saveImage: unable to save " + filePath, e);
+                } finally {
+                    IoUtils.closeQuietly(imageFile);
+                }
+            } else if (item instanceof TaskWriteQueueItem) {
+                // Write out one task.
+                StringWriter stringWriter = null;
+                TaskRecord task = ((TaskWriteQueueItem) item).mTask;
+                if (DEBUG) Slog.d(TAG, "Writing task=" + task);
+                synchronized (mService) {
+                    if (task.inRecents) {
+                        // Still there.
                         try {
-                            atomicFile = new AtomicFile(new File(
-                                    getUserTasksDir(task.userId),
-                                    String.valueOf(task.taskId) + TASK_FILENAME_SUFFIX));
-                            file = atomicFile.startWrite();
-                            file.write(stringWriter.toString().getBytes());
-                            file.write('\n');
-                            atomicFile.finishWrite(file);
+                            if (DEBUG) Slog.d(TAG, "Saving task=" + task);
+                            stringWriter = saveToXml(task);
                         } catch (IOException e) {
-                            if (file != null) {
-                                atomicFile.failWrite(file);
-                            }
-                            Slog.e(TAG,
-                                    "Unable to open " + atomicFile + " for persisting. " + e);
+                        } catch (XmlPullParserException e) {
                         }
                     }
                 }
+                if (stringWriter != null) {
+                    // Write out xml file while not holding mService lock.
+                    FileOutputStream file = null;
+                    AtomicFile atomicFile = null;
+                    try {
+                        atomicFile = new AtomicFile(new File(
+                                getUserTasksDir(task.userId),
+                                String.valueOf(task.taskId) + TASK_FILENAME_SUFFIX));
+                        file = atomicFile.startWrite();
+                        file.write(stringWriter.toString().getBytes());
+                        file.write('\n');
+                        atomicFile.finishWrite(file);
+                    } catch (IOException e) {
+                        if (file != null) {
+                            atomicFile.failWrite(file);
+                        }
+                        Slog.e(TAG,
+                                "Unable to open " + atomicFile + " for persisting. " + e);
+                    }
+                }
             }
         }
     }
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index c009dde..f833109 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -96,6 +96,7 @@
 import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
 import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_PRIVILEGED;
 import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
+import static android.provider.Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES;
 import static android.provider.Settings.Secure.USER_SETUP_COMPLETE;
 import static android.view.Display.DEFAULT_DISPLAY;
 
@@ -1045,8 +1046,7 @@
         }
         // We need to provide the current orientation of the display on which this task resides,
         // not the orientation of the task.
-        final int orientation =
-                getStack().mActivityContainer.mActivityDisplay.getConfiguration().orientation;
+        final int orientation = getStack().getDisplay().getConfiguration().orientation;
         return setLastThumbnailLocked(thumbnail, taskWidth, taskHeight, orientation);
     }
 
@@ -1112,19 +1112,6 @@
         return intent != null ? intent : affinityIntent;
     }
 
-    /**
-     * @return Whether there are only fullscreen activities in this task.
-     */
-    boolean containsOnlyFullscreenActivities() {
-        for (int i = 0; i < mActivities.size(); i++) {
-            final ActivityRecord r = mActivities.get(i);
-            if (!r.finishing && !r.fullscreen) {
-                return false;
-            }
-        }
-        return true;
-    }
-
     /** Returns the first non-finishing activity from the root. */
     ActivityRecord getRootActivity() {
         for (int i = 0; i < mActivities.size(); i++) {
@@ -1138,9 +1125,13 @@
     }
 
     ActivityRecord getTopActivity() {
+        return getTopActivity(true /* includeOverlays */);
+    }
+
+    ActivityRecord getTopActivity(boolean includeOverlays) {
         for (int i = mActivities.size() - 1; i >= 0; --i) {
             final ActivityRecord r = mActivities.get(i);
-            if (r.finishing) {
+            if (r.finishing || (!includeOverlays && r.mTaskOverlay)) {
                 continue;
             }
             return r;
@@ -1160,6 +1151,16 @@
         return null;
     }
 
+    boolean isVisible() {
+        for (int i = mActivities.size() - 1; i >= 0; --i) {
+            final ActivityRecord r = mActivities.get(i);
+            if (r.visible) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     void getAllRunningVisibleActivitiesLocked(ArrayList<ActivityRecord> outActivities) {
         if (mStack != null) {
             for (int activityNdx = mActivities.size() - 1; activityNdx >= 0; --activityNdx) {
@@ -1294,7 +1295,6 @@
             // created controller for the activity we are starting yet.
             mWindowContainerController.positionChildAt(appController, index);
         }
-        r.onOverrideConfigurationSent();
 
         // Make sure the list of display UID whitelists is updated
         // now that this record is in a new task.
@@ -1581,8 +1581,9 @@
         // A task can not be docked even if it is considered resizeable because it only supports
         // picture-in-picture mode but has a non-resizeable resizeMode
         return mService.mSupportsSplitScreenMultiWindow
-                && isResizeable(false /* checkSupportsPip */)
-                && !ActivityInfo.isPreserveOrientationMode(mResizeMode);
+                && (mService.mForceResizableActivities
+                        || (isResizeable(false /* checkSupportsPip */)
+                                && !ActivityInfo.isPreserveOrientationMode(mResizeMode)));
     }
 
     /**
@@ -1593,7 +1594,8 @@
      */
     boolean canBeLaunchedOnDisplay(int displayId) {
         return mService.mStackSupervisor.canPlaceEntityOnDisplay(displayId,
-                isResizeable(false /* checkSupportsPip */));
+                isResizeable(false /* checkSupportsPip */), -1 /* don't check PID */,
+                -1 /* don't check UID */, null /* activityInfo */);
     }
 
     /**
diff --git a/services/core/java/com/android/server/am/UidRecord.java b/services/core/java/com/android/server/am/UidRecord.java
index c411bce..8efcb4f 100644
--- a/services/core/java/com/android/server/am/UidRecord.java
+++ b/services/core/java/com/android/server/am/UidRecord.java
@@ -39,6 +39,7 @@
     boolean curWhitelist;
     boolean setWhitelist;
     boolean idle;
+    boolean setIdle;
     int numProcs;
 
     /**
@@ -79,10 +80,11 @@
     final Object networkStateLock = new Object();
 
     static final int CHANGE_PROCSTATE = 0;
-    static final int CHANGE_GONE = 1;
-    static final int CHANGE_GONE_IDLE = 2;
-    static final int CHANGE_IDLE = 3;
-    static final int CHANGE_ACTIVE = 4;
+    static final int CHANGE_GONE = 1<<0;
+    static final int CHANGE_IDLE = 1<<1;
+    static final int CHANGE_ACTIVE = 1<<2;
+    static final int CHANGE_CACHED = 1<<3;
+    static final int CHANGE_UNCACHED = 1<<4;
 
     static final class ChangeItem {
         UidRecord uidRecord;
@@ -94,6 +96,7 @@
     }
 
     ChangeItem pendingChange;
+    int lastReportedChange;
 
     public UidRecord(int _uid) {
         uid = _uid;
@@ -112,12 +115,12 @@
     }
 
     /**
-     * If the change being dispatched is neither CHANGE_GONE nor CHANGE_GONE_IDLE (not interested in
+     * If the change being dispatched is not CHANGE_GONE (not interested in
      * these changes), then update the {@link #lastDispatchedProcStateSeq} with
      * {@link #curProcStateSeq}.
      */
     public void updateLastDispatchedProcStateSeq(int changeToDispatch) {
-        if (changeToDispatch != CHANGE_GONE && changeToDispatch != CHANGE_GONE_IDLE) {
+        if ((changeToDispatch & CHANGE_GONE) == 0) {
             lastDispatchedProcStateSeq = curProcStateSeq;
         }
     }
@@ -146,6 +149,41 @@
         if (idle) {
             sb.append(" idle");
         }
+        if (lastReportedChange != 0) {
+            sb.append(" change:");
+            boolean printed = false;
+            if ((lastReportedChange & CHANGE_GONE) != 0) {
+                printed = true;
+                sb.append("gone");
+            }
+            if ((lastReportedChange & CHANGE_IDLE) != 0) {
+                if (printed) {
+                    sb.append("|");
+                }
+                printed = true;
+                sb.append("idle");
+            }
+            if ((lastReportedChange & CHANGE_ACTIVE) != 0) {
+                if (printed) {
+                    sb.append("|");
+                }
+                printed = true;
+                sb.append("active");
+            }
+            if ((lastReportedChange & CHANGE_CACHED) != 0) {
+                if (printed) {
+                    sb.append("|");
+                }
+                printed = true;
+                sb.append("cached");
+            }
+            if ((lastReportedChange & CHANGE_UNCACHED) != 0) {
+                if (printed) {
+                    sb.append("|");
+                }
+                sb.append("uncached");
+            }
+        }
         sb.append(" procs:");
         sb.append(numProcs);
         sb.append(" seq(");
diff --git a/services/core/java/com/android/server/am/UriPermission.java b/services/core/java/com/android/server/am/UriPermission.java
index 0aa54d9..90577e3 100644
--- a/services/core/java/com/android/server/am/UriPermission.java
+++ b/services/core/java/com/android/server/am/UriPermission.java
@@ -17,6 +17,7 @@
 package com.android.server.am;
 
 import android.content.Intent;
+import android.os.Binder;
 import android.os.UserHandle;
 import android.util.ArraySet;
 import android.util.Log;
@@ -101,7 +102,8 @@
             Slog.d(TAG,
                     "Permission for " + targetPkg + " to " + uri + " is changing from 0x"
                             + Integer.toHexString(oldModeFlags) + " to 0x"
-                            + Integer.toHexString(modeFlags),
+                            + Integer.toHexString(modeFlags) + " via calling UID "
+                            + Binder.getCallingUid() + " PID " + Binder.getCallingPid(),
                     new Throwable());
         }
     }
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index f720cd5..9c8ba5a 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -671,12 +671,6 @@
         }
 
         if (stopped) {
-            // Evict the user's credential encryption key
-            try {
-                getStorageManager().lockUserKey(userId);
-            } catch (RemoteException re) {
-                throw re.rethrowAsRuntimeException();
-            }
             mInjector.systemServiceManagerCleanupUser(userId);
             synchronized (mLock) {
                 mInjector.getActivityStackSupervisor().removeUserLocked(userId);
@@ -685,6 +679,12 @@
             if (getUserInfo(userId).isEphemeral()) {
                 mInjector.getUserManager().removeUser(userId);
             }
+            // Evict the user's credential encryption key.
+            try {
+                getStorageManager().lockUserKey(userId);
+            } catch (RemoteException re) {
+                throw re.rethrowAsRuntimeException();
+            }
         }
     }
 
@@ -1447,15 +1447,6 @@
         return mStartedUserArray;
     }
 
-    boolean isUserStoppingOrShuttingDownLocked(int userId) {
-        UserState state = getStartedUserStateLocked(userId);
-        if (state == null) {
-            return false;
-        }
-        return state.state == UserState.STATE_STOPPING
-                || state.state == UserState.STATE_SHUTDOWN;
-    }
-
     boolean isUserRunningLocked(int userId, int flags) {
         UserState state = getStartedUserStateLocked(userId);
         if (state == null) {
@@ -1478,6 +1469,10 @@
                 case UserState.STATE_RUNNING_UNLOCKING:
                 case UserState.STATE_RUNNING_UNLOCKED:
                     return true;
+                // In the stopping/shutdown state return unlock state of the user key
+                case UserState.STATE_STOPPING:
+                case UserState.STATE_SHUTDOWN:
+                    return StorageManager.isUserKeyUnlocked(userId);
                 default:
                     return false;
             }
@@ -1486,13 +1481,16 @@
             switch (state.state) {
                 case UserState.STATE_RUNNING_UNLOCKED:
                     return true;
+                // In the stopping/shutdown state return unlock state of the user key
+                case UserState.STATE_STOPPING:
+                case UserState.STATE_SHUTDOWN:
+                    return StorageManager.isUserKeyUnlocked(userId);
                 default:
                     return false;
             }
         }
 
-        // One way or another, we're running!
-        return true;
+        return state.state != UserState.STATE_STOPPING && state.state != UserState.STATE_SHUTDOWN;
     }
 
     UserInfo getCurrentUser() {
diff --git a/services/core/java/com/android/server/am/UserState.java b/services/core/java/com/android/server/am/UserState.java
index b89586d..2e27387 100644
--- a/services/core/java/com/android/server/am/UserState.java
+++ b/services/core/java/com/android/server/am/UserState.java
@@ -20,6 +20,7 @@
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
 
 import android.app.IStopUserCallback;
+import android.os.Trace;
 import android.os.UserHandle;
 import android.util.ArrayMap;
 import android.util.Slog;
@@ -81,9 +82,18 @@
         if (newState == state) {
             return;
         }
-        Slog.i(TAG, "User " + mHandle.getIdentifier() + " state changed from "
+        final int userId = mHandle.getIdentifier();
+        if (state != STATE_BOOTING) {
+            Trace.asyncTraceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER,
+                    stateToString(state) + " " + userId, userId);
+        }
+        if (newState != STATE_SHUTDOWN) {
+            Trace.asyncTraceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
+                    stateToString(newState) + " " + userId, userId);
+        }
+        Slog.i(TAG, "User " + userId + " state changed from "
                 + stateToString(state) + " to " + stateToString(newState));
-        EventLogTags.writeAmUserStateChanged(mHandle.getIdentifier(), newState);
+        EventLogTags.writeAmUserStateChanged(userId, newState);
         lastState = state;
         state = newState;
     }
diff --git a/services/core/java/com/android/server/audio/AudioEventLogger.java b/services/core/java/com/android/server/audio/AudioEventLogger.java
new file mode 100644
index 0000000..9ebd75b
--- /dev/null
+++ b/services/core/java/com/android/server/audio/AudioEventLogger.java
@@ -0,0 +1,115 @@
+/*
+ * 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.audio;
+
+import android.util.Log;
+
+import java.io.PrintWriter;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.LinkedList;
+
+public class AudioEventLogger {
+
+    // ring buffer of events to log.
+    private final LinkedList<Event> mEvents;
+
+    private final String mTitle;
+
+    // the maximum number of events to keep in log
+    private final int mMemSize;
+
+    public static abstract class Event {
+        // formatter for timestamps
+        private final static SimpleDateFormat sFormat = new SimpleDateFormat("MM-dd HH:mm:ss:SSS");
+
+        private final long mTimestamp;
+
+        Event() {
+            mTimestamp = System.currentTimeMillis();
+        }
+
+        public String toString() {
+            return (new StringBuilder(sFormat.format(new Date(mTimestamp))))
+                    .append(" ").append(eventToString()).toString();
+        }
+
+        /**
+         * Causes the string message for the event to appear in the logcat.
+         * Here is an example of how to create a new event (a StringEvent), adding it to the logger
+         * (an instance of AudioEventLogger) while also making it show in the logcat:
+         * <pre>
+         *     myLogger.log(
+         *         (new StringEvent("something for logcat and logger")).printLog(MyClass.TAG) );
+         * </pre>
+         * @param tag the tag for the android.util.Log.v
+         * @return the same instance of the event
+         */
+        public Event printLog(String tag) {
+            Log.i(tag, eventToString());
+            return this;
+        }
+
+        /**
+         * Convert event to String.
+         * This method is only called when the logger history is about to the dumped,
+         * so this method is where expensive String conversions should be made, not when the Event
+         * subclass is created.
+         * Timestamp information will be automatically added, do not include it.
+         * @return a string representation of the event that occurred.
+         */
+        abstract public String eventToString();
+    }
+
+    public static class StringEvent extends Event {
+        private final String mMsg;
+
+        public StringEvent(String msg) {
+            mMsg = msg;
+        }
+
+        @Override
+        public String eventToString() {
+            return mMsg;
+        }
+    }
+
+    /**
+     * Constructor for logger.
+     * @param size the maximum number of events to keep in log
+     * @param title the string displayed before the recorded log
+     */
+    public AudioEventLogger(int size, String title) {
+        mEvents = new LinkedList<Event>();
+        mMemSize = size;
+        mTitle = title;
+    }
+
+    public synchronized void log(Event evt) {
+        if (mEvents.size() >= mMemSize) {
+            mEvents.removeFirst();
+        }
+        mEvents.add(evt);
+    }
+
+    public synchronized void dump(PrintWriter pw) {
+        pw.println("Audio event log: " + mTitle);
+        for (Event evt : mEvents) {
+            pw.println(evt.toString());
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 36b3fbf..5eb2a8d 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -16,6 +16,11 @@
 
 package com.android.server.audio;
 
+import com.android.server.audio.AudioServiceEvents.ForceUseEvent;
+import com.android.server.audio.AudioServiceEvents.PhoneStateEvent;
+import com.android.server.audio.AudioServiceEvents.VolumeEvent;
+import com.android.server.audio.AudioServiceEvents.WiredDevConnectEvent;
+
 import static android.Manifest.permission.REMOTE_AUDIO_PLAYBACK;
 import static android.media.AudioManager.RINGER_MODE_NORMAL;
 import static android.media.AudioManager.RINGER_MODE_SILENT;
@@ -28,6 +33,7 @@
 import android.app.ActivityManagerInternal;
 import android.app.AppGlobals;
 import android.app.AppOpsManager;
+import android.app.IUidObserver;
 import android.app.NotificationManager;
 import android.bluetooth.BluetoothA2dp;
 import android.bluetooth.BluetoothAdapter;
@@ -455,6 +461,8 @@
 
     // Forced device usage for communications
     private int mForcedUseForComm;
+    private int mForcedUseForCommExt; // External state returned by getters: always consistent
+                                      // with requests by setters
 
     // List of binder death handlers for setMode() client processes.
     // The last process to have called setMode() is at the top of the list.
@@ -624,6 +632,32 @@
         }
     }
 
+    final private IUidObserver mUidObserver = new IUidObserver.Stub() {
+        @Override public void onUidStateChanged(int uid, int procState, long procStateSeq) {
+        }
+
+        @Override public void onUidGone(int uid, boolean disabled) {
+            // Once the uid is no longer running, no need to keep trying to disable its audio.
+            disableAudioForUid(false, uid);
+        }
+
+        @Override public void onUidActive(int uid) throws RemoteException {
+        }
+
+        @Override public void onUidIdle(int uid, boolean disabled) {
+        }
+
+        @Override public void onUidCachedChanged(int uid, boolean cached) {
+            disableAudioForUid(cached, uid);
+        }
+
+        private void disableAudioForUid(boolean disable, int uid) {
+            queueMsgUnderWakeLock(mAudioHandler, MSG_DISABLE_AUDIO_FOR_UID,
+                    disable ? 1 : 0 /* arg1 */,  uid /* arg2 */,
+                    null /* obj */,  0 /* delay */);
+        }
+    };
+
     ///////////////////////////////////////////////////////////////////////////
     // Construction
     ///////////////////////////////////////////////////////////////////////////
@@ -691,7 +725,7 @@
                 AudioSystem.FOR_SYSTEM,
                 cameraSoundForced ?
                         AudioSystem.FORCE_SYSTEM_ENFORCED : AudioSystem.FORCE_NONE,
-                null,
+                new String("AudioService ctor"),
                 0);
 
         mSafeMediaVolumeState = new Integer(Settings.Global.getInt(mContentResolver,
@@ -717,8 +751,13 @@
         // relies on audio policy having correct ranges for volume indexes.
         mSafeUsbMediaVolumeIndex = getSafeUsbMediaVolumeIndex();
 
+        mPlaybackMonitor =
+                new PlaybackActivityMonitor(context, MAX_STREAM_VOLUME[AudioSystem.STREAM_ALARM]);
+
         mMediaFocusControl = new MediaFocusControl(mContext, mPlaybackMonitor);
 
+        mRecordMonitor = new RecordingActivityMonitor(mContext);
+
         readAndSetLowRamDevice();
 
         // Call setRingerModeInt() to apply correct mute
@@ -767,6 +806,24 @@
     public void systemReady() {
         sendMsg(mAudioHandler, MSG_SYSTEM_READY, SENDMSG_QUEUE,
                 0, 0, null, 0);
+        if (false) {
+            // This is turned off for now, because it is racy and thus causes apps to break.
+            // Currently banning a uid means that if an app tries to start playing an audio
+            // stream, that will be preventing, and unbanning it will not allow that stream
+            // to resume.  However these changes in uid state are racy with what the app is doing,
+            // so that after taking a process out of the cached state we can't guarantee that
+            // we will unban the uid before the app actually tries to start playing audio.
+            // (To do that, the activity manager would need to wait until it knows for sure
+            // that the ban has been removed, before telling the app to do whatever it is
+            // supposed to do that caused it to go out of the cached state.)
+            try {
+                ActivityManager.getService().registerUidObserver(mUidObserver,
+                        ActivityManager.UID_OBSERVER_CACHED | ActivityManager.UID_OBSERVER_GONE,
+                        ActivityManager.PROCESS_STATE_UNKNOWN, null);
+            } catch (RemoteException e) {
+                // ignored; both services live in system_server
+            }
+        }
     }
 
     public void onSystemReady() {
@@ -860,13 +917,23 @@
             }
         }
         // Restore call state
-        AudioSystem.setPhoneState(mMode);
+        if (AudioSystem.setPhoneState(mMode) ==  AudioSystem.AUDIO_STATUS_OK) {
+            mModeLogger.log(new AudioEventLogger.StringEvent(
+                "onAudioServerDied causes setPhoneState(" + AudioSystem.modeToString(mMode) + ")"));
+        }
 
-        // Restore forced usage for communcations and record
+        // Restore forced usage for communications and record
+        mForceUseLogger.log(new ForceUseEvent(AudioSystem.FOR_COMMUNICATION, mForcedUseForComm,
+                "onAudioServerDied"));
         AudioSystem.setForceUse(AudioSystem.FOR_COMMUNICATION, mForcedUseForComm);
+        mForceUseLogger.log(new ForceUseEvent(AudioSystem.FOR_RECORD, mForcedUseForComm,
+                "onAudioServerDied"));
         AudioSystem.setForceUse(AudioSystem.FOR_RECORD, mForcedUseForComm);
-        AudioSystem.setForceUse(AudioSystem.FOR_SYSTEM, mCameraSoundForced ?
-                        AudioSystem.FORCE_SYSTEM_ENFORCED : AudioSystem.FORCE_NONE);
+        final int forSys = mCameraSoundForced ?
+                AudioSystem.FORCE_SYSTEM_ENFORCED : AudioSystem.FORCE_NONE;
+        mForceUseLogger.log(new ForceUseEvent(AudioSystem.FOR_SYSTEM, forSys,
+                "onAudioServerDied"));
+        AudioSystem.setForceUse(AudioSystem.FOR_SYSTEM, forSys);
 
         // Restore stream volumes
         int numStreamTypes = AudioSystem.getNumStreamTypes();
@@ -893,16 +960,20 @@
         }
 
         synchronized (mBluetoothA2dpEnabledLock) {
-            AudioSystem.setForceUse(AudioSystem.FOR_MEDIA,
-                    mBluetoothA2dpEnabled ?
-                            AudioSystem.FORCE_NONE : AudioSystem.FORCE_NO_BT_A2DP);
+            final int forMed = mBluetoothA2dpEnabled ?
+                    AudioSystem.FORCE_NONE : AudioSystem.FORCE_NO_BT_A2DP;
+            mForceUseLogger.log(new ForceUseEvent(AudioSystem.FOR_MEDIA, forMed,
+                    "onAudioServerDied"));
+            AudioSystem.setForceUse(AudioSystem.FOR_MEDIA, forMed);
         }
 
         synchronized (mSettingsLock) {
-            AudioSystem.setForceUse(AudioSystem.FOR_DOCK,
-                    mDockAudioMediaEnabled ?
-                            AudioSystem.FORCE_ANALOG_DOCK : AudioSystem.FORCE_NONE);
-            sendEncodedSurroundMode(mContentResolver);
+            final int forDock = mDockAudioMediaEnabled ?
+                    AudioSystem.FORCE_ANALOG_DOCK : AudioSystem.FORCE_NONE;
+            mForceUseLogger.log(new ForceUseEvent(AudioSystem.FOR_DOCK, forDock,
+                    "onAudioServerDied"));
+            AudioSystem.setForceUse(AudioSystem.FOR_DOCK, forDock);
+            sendEncodedSurroundMode(mContentResolver, "onAudioServerDied");
         }
         if (mHdmiManager != null) {
             synchronized (mHdmiManager) {
@@ -1095,7 +1166,7 @@
                 AudioSystem.FOR_DOCK,
                 mDockAudioMediaEnabled ?
                         AudioSystem.FORCE_ANALOG_DOCK : AudioSystem.FORCE_NONE,
-                null,
+                new String("readDockAudioSettings"),
                 0);
     }
 
@@ -1110,15 +1181,15 @@
         AudioSystem.setMasterMono(masterMono);
     }
 
-    private void sendEncodedSurroundMode(ContentResolver cr)
+    private void sendEncodedSurroundMode(ContentResolver cr, String eventSource)
     {
         int encodedSurroundMode = Settings.Global.getInt(
                 cr, Settings.Global.ENCODED_SURROUND_OUTPUT,
                 Settings.Global.ENCODED_SURROUND_OUTPUT_AUTO);
-        sendEncodedSurroundMode(encodedSurroundMode);
+        sendEncodedSurroundMode(encodedSurroundMode, eventSource);
     }
 
-    private void sendEncodedSurroundMode(int encodedSurroundMode)
+    private void sendEncodedSurroundMode(int encodedSurroundMode, String eventSource)
     {
         // initialize to guaranteed bad value
         int forceSetting = AudioSystem.NUM_FORCE_CONFIG;
@@ -1143,7 +1214,7 @@
                     SENDMSG_QUEUE,
                     AudioSystem.FOR_ENCODED_SURROUND,
                     forceSetting,
-                    null,
+                    eventSource,
                     0);
         }
     }
@@ -1189,7 +1260,7 @@
 
             updateRingerModeAffectedStreams();
             readDockAudioSettings(cr);
-            sendEncodedSurroundMode(cr);
+            sendEncodedSurroundMode(cr, "readPersistedSettings");
         }
 
         mMuteAffectedStreams = System.getIntForUser(cr,
@@ -1260,6 +1331,9 @@
                 + ", flags=" + flags + ", caller=" + caller
                 + ", volControlStream=" + mVolumeControlStream
                 + ", userSelect=" + mUserSelectedVolumeControlStream);
+        mVolumeLogger.log(new VolumeEvent(VolumeEvent.VOL_ADJUST_SUGG_VOL, suggestedStreamType,
+                direction/*val1*/, flags/*val2*/, new StringBuilder(callingPackage)
+                        .append("/").append(caller).append(" uid:").append(uid).toString()));
         final int streamType;
         if (mUserSelectedVolumeControlStream) { // implies mVolumeControlStream != -1
             streamType = mVolumeControlStream;
@@ -1309,6 +1383,8 @@
                     + "CHANGE_ACCESSIBILITY_VOLUME / callingPackage=" + callingPackage);
             return;
         }
+        mVolumeLogger.log(new VolumeEvent(VolumeEvent.VOL_ADJUST_STREAM_VOL, streamType,
+                direction/*val1*/, flags/*val2*/, callingPackage));
         adjustStreamVolume(streamType, direction, flags, callingPackage, callingPackage,
                 Binder.getCallingUid());
     }
@@ -1625,6 +1701,8 @@
                     + " CHANGE_ACCESSIBILITY_VOLUME  callingPackage=" + callingPackage);
             return;
         }
+        mVolumeLogger.log(new VolumeEvent(VolumeEvent.VOL_SET_STREAM_VOL, streamType,
+                index/*val1*/, flags/*val2*/, callingPackage));
         setStreamVolume(streamType, index, flags, callingPackage, callingPackage,
                 Binder.getCallingUid());
     }
@@ -1933,6 +2011,7 @@
             streamType = getActiveStreamType(streamType);
         }
         synchronized (VolumeStreamState.class) {
+            ensureValidStreamType(streamType);
             return mStreamStates[streamType].mIsMuted;
         }
     }
@@ -2470,13 +2549,15 @@
             }
         }
         int status = AudioSystem.AUDIO_STATUS_OK;
+        int actualMode;
         do {
+            actualMode = mode;
             if (mode == AudioSystem.MODE_NORMAL) {
                 // get new mode from client at top the list if any
                 if (!mSetModeDeathHandlers.isEmpty()) {
                     hdlr = mSetModeDeathHandlers.get(0);
                     cb = hdlr.getBinder();
-                    mode = hdlr.getMode();
+                    actualMode = hdlr.getMode();
                     if (DEBUG_MODE) {
                         Log.w(TAG, " using mode=" + mode + " instead due to death hdlr at pid="
                                 + hdlr.mPid);
@@ -2500,11 +2581,11 @@
                 hdlr.setMode(mode);
             }
 
-            if (mode != mMode) {
-                status = AudioSystem.setPhoneState(mode);
+            if (actualMode != mMode) {
+                status = AudioSystem.setPhoneState(actualMode);
                 if (status == AudioSystem.AUDIO_STATUS_OK) {
-                    if (DEBUG_MODE) { Log.v(TAG, " mode successfully set to " + mode); }
-                    mMode = mode;
+                    if (DEBUG_MODE) { Log.v(TAG, " mode successfully set to " + actualMode); }
+                    mMode = actualMode;
                 } else {
                     if (hdlr != null) {
                         mSetModeDeathHandlers.remove(hdlr);
@@ -2520,13 +2601,16 @@
         } while (status != AudioSystem.AUDIO_STATUS_OK && !mSetModeDeathHandlers.isEmpty());
 
         if (status == AudioSystem.AUDIO_STATUS_OK) {
-            if (mode != AudioSystem.MODE_NORMAL) {
+            if (actualMode != AudioSystem.MODE_NORMAL) {
                 if (mSetModeDeathHandlers.isEmpty()) {
                     Log.e(TAG, "setMode() different from MODE_NORMAL with empty mode client stack");
                 } else {
                     newModeOwnerPid = mSetModeDeathHandlers.get(0).getPid();
                 }
             }
+            // Note: newModeOwnerPid is always 0 when actualMode is MODE_NORMAL
+            mModeLogger.log(
+                    new PhoneStateEvent(caller, pid, mode, newModeOwnerPid, actualMode));
             int streamType = getActiveStreamType(AudioManager.USE_DEFAULT_STREAM_TYPE);
             int device = getDeviceForStream(streamType);
             int index = mStreamStates[mStreamVolumeAlias[streamType]].getIndex(device);
@@ -2799,24 +2883,30 @@
         if (!checkAudioSettingsPermission("setSpeakerphoneOn()")) {
             return;
         }
+        // for logging only
+        final String eventSource = new StringBuilder("setSpeakerphoneOn(").append(on)
+                .append(") from u/pid:").append(Binder.getCallingUid()).append("/")
+                .append(Binder.getCallingPid()).toString();
 
         if (on) {
             if (mForcedUseForComm == AudioSystem.FORCE_BT_SCO) {
                     sendMsg(mAudioHandler, MSG_SET_FORCE_USE, SENDMSG_QUEUE,
-                            AudioSystem.FOR_RECORD, AudioSystem.FORCE_NONE, null, 0);
+                            AudioSystem.FOR_RECORD, AudioSystem.FORCE_NONE,
+                            eventSource, 0);
             }
             mForcedUseForComm = AudioSystem.FORCE_SPEAKER;
         } else if (mForcedUseForComm == AudioSystem.FORCE_SPEAKER){
             mForcedUseForComm = AudioSystem.FORCE_NONE;
         }
 
+        mForcedUseForCommExt = mForcedUseForComm;
         sendMsg(mAudioHandler, MSG_SET_FORCE_USE, SENDMSG_QUEUE,
-                AudioSystem.FOR_COMMUNICATION, mForcedUseForComm, null, 0);
+                AudioSystem.FOR_COMMUNICATION, mForcedUseForComm, eventSource, 0);
     }
 
     /** @see AudioManager#isSpeakerphoneOn() */
     public boolean isSpeakerphoneOn() {
-        return (mForcedUseForComm == AudioSystem.FORCE_SPEAKER);
+        return (mForcedUseForCommExt == AudioSystem.FORCE_SPEAKER);
     }
 
     /** @see AudioManager#setBluetoothScoOn(boolean) */
@@ -2824,35 +2914,61 @@
         if (!checkAudioSettingsPermission("setBluetoothScoOn()")) {
             return;
         }
-        setBluetoothScoOnInt(on);
+
+        // Only enable calls from system components
+        if (Binder.getCallingUid() >= FIRST_APPLICATION_UID) {
+            mForcedUseForCommExt = on ? AudioSystem.FORCE_BT_SCO : AudioSystem.FORCE_NONE;
+            return;
+        }
+
+        // for logging only
+        final String eventSource = new StringBuilder("setBluetoothScoOn(").append(on)
+                .append(") from u/pid:").append(Binder.getCallingUid()).append("/")
+                .append(Binder.getCallingPid()).toString();
+        setBluetoothScoOnInt(on, eventSource);
     }
 
-    public void setBluetoothScoOnInt(boolean on) {
+    public void setBluetoothScoOnInt(boolean on, String eventSource) {
         if (on) {
+            // do not accept SCO ON if SCO audio is not connected
+            synchronized(mScoClients) {
+                if ((mBluetoothHeadset != null) &&
+                    (mBluetoothHeadset.getAudioState(mBluetoothHeadsetDevice)
+                             != BluetoothHeadset.STATE_AUDIO_CONNECTED)) {
+                    mForcedUseForCommExt = AudioSystem.FORCE_BT_SCO;
+                    return;
+                }
+            }
             mForcedUseForComm = AudioSystem.FORCE_BT_SCO;
         } else if (mForcedUseForComm == AudioSystem.FORCE_BT_SCO) {
             mForcedUseForComm = AudioSystem.FORCE_NONE;
         }
-
+        mForcedUseForCommExt = mForcedUseForComm;
+        AudioSystem.setParameters("BT_SCO="+ (on ? "on" : "off"));
         sendMsg(mAudioHandler, MSG_SET_FORCE_USE, SENDMSG_QUEUE,
-                AudioSystem.FOR_COMMUNICATION, mForcedUseForComm, null, 0);
+                AudioSystem.FOR_COMMUNICATION, mForcedUseForComm, eventSource, 0);
         sendMsg(mAudioHandler, MSG_SET_FORCE_USE, SENDMSG_QUEUE,
-                AudioSystem.FOR_RECORD, mForcedUseForComm, null, 0);
+                AudioSystem.FOR_RECORD, mForcedUseForComm, eventSource, 0);
     }
 
     /** @see AudioManager#isBluetoothScoOn() */
     public boolean isBluetoothScoOn() {
-        return (mForcedUseForComm == AudioSystem.FORCE_BT_SCO);
+        return (mForcedUseForCommExt == AudioSystem.FORCE_BT_SCO);
     }
 
     /** @see AudioManager#setBluetoothA2dpOn(boolean) */
     public void setBluetoothA2dpOn(boolean on) {
+        // for logging only
+        final String eventSource = new StringBuilder("setBluetoothA2dpOn(").append(on)
+                .append(") from u/pid:").append(Binder.getCallingUid()).append("/")
+                .append(Binder.getCallingPid()).toString();
+
         synchronized (mBluetoothA2dpEnabledLock) {
             mBluetoothA2dpEnabled = on;
             sendMsg(mAudioHandler, MSG_SET_FORCE_BT_A2DP_USE, SENDMSG_QUEUE,
                     AudioSystem.FOR_MEDIA,
                     mBluetoothA2dpEnabled ? AudioSystem.FORCE_NONE : AudioSystem.FORCE_NO_BT_A2DP,
-                    null, 0);
+                    eventSource, 0);
         }
     }
 
@@ -3189,7 +3305,7 @@
             broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED);
         }
         AudioSystem.setParameters("A2dpSuspended=false");
-        setBluetoothScoOnInt(false);
+        setBluetoothScoOnInt(false, "resetBluetoothSco");
     }
 
     private void broadcastScoConnectionState(int state) {
@@ -3951,7 +4067,7 @@
     /*
      * A class just for packaging up a set of connection parameters.
      */
-    private class WiredDeviceConnectionState {
+    class WiredDeviceConnectionState {
         public final int mType;
         public final int mState;
         public final String mAddress;
@@ -4045,7 +4161,8 @@
                     newDevice, AudioSystem.getOutputDeviceName(newDevice)));
         }
         synchronized (mConnectedDevices) {
-            if ((newDevice & DEVICE_MEDIA_UNMUTED_ON_PLUG) != 0
+            if (mNm.getZenMode() != Settings.Global.ZEN_MODE_NO_INTERRUPTIONS
+                    && (newDevice & DEVICE_MEDIA_UNMUTED_ON_PLUG) != 0
                     && mStreamStates[AudioSystem.STREAM_MUSIC].mIsMuted
                     && mStreamStates[AudioSystem.STREAM_MUSIC].getIndex(newDevice) != 0
                     && (newDevice & AudioSystem.getDevicesForStream(AudioSystem.STREAM_MUSIC)) != 0)
@@ -4800,9 +4917,9 @@
             }
         }
 
-        private void setForceUse(int usage, int config) {
+        private void setForceUse(int usage, int config, String eventSource) {
             synchronized (mConnectedDevices) {
-                setForceUseInt_SyncDevices(usage, config);
+                setForceUseInt_SyncDevices(usage, config, eventSource);
             }
         }
 
@@ -4868,7 +4985,7 @@
 
                 case MSG_SET_FORCE_USE:
                 case MSG_SET_FORCE_BT_A2DP_USE:
-                    setForceUse(msg.arg1, msg.arg2);
+                    setForceUse(msg.arg1, msg.arg2, (String) msg.obj);
                     break;
 
                 case MSG_BT_HEADSET_CNCT_FAILED:
@@ -4878,6 +4995,7 @@
                 case MSG_SET_WIRED_DEVICE_CONNECTION_STATE:
                     {   WiredDeviceConnectionState connectState =
                             (WiredDeviceConnectionState)msg.obj;
+                        mWiredDevLogger.log(new WiredDevConnectEvent(connectState));
                         onSetWiredDeviceConnectionState(connectState.mType, connectState.mState,
                                 connectState.mAddress, connectState.mName, connectState.mCaller);
                         mAudioEventWakeLock.release();
@@ -5025,7 +5143,7 @@
             // Did it change?
             if (mEncodedSurroundMode != newSurroundMode) {
                 // Send to AudioPolicyManager
-                sendEncodedSurroundMode(newSurroundMode);
+                sendEncodedSurroundMode(newSurroundMode, "SettingsObserver");
                 synchronized(mConnectedDevices) {
                     // Is HDMI connected?
                     String key = makeDeviceListKey(AudioSystem.DEVICE_OUT_HDMI, "");
@@ -5046,13 +5164,13 @@
     }
 
     // must be called synchronized on mConnectedDevices
-    private void makeA2dpDeviceAvailable(String address, String name) {
+    private void makeA2dpDeviceAvailable(String address, String name, String eventSource) {
         // enable A2DP before notifying A2DP connection to avoid unnecessary processing in
         // audio policy manager
         VolumeStreamState streamState = mStreamStates[AudioSystem.STREAM_MUSIC];
         sendMsg(mAudioHandler, MSG_SET_DEVICE_VOLUME, SENDMSG_QUEUE,
                 AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, 0, streamState, 0);
-        setBluetoothA2dpOnInt(true);
+        setBluetoothA2dpOnInt(true, eventSource);
         AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP,
                 AudioSystem.DEVICE_STATE_AVAILABLE, address, name);
         // Reset A2DP suspend state each time a new sink is connected
@@ -5181,7 +5299,8 @@
                         makeA2dpDeviceUnavailableNow(mDockAddress);
                     }
                 }
-                makeA2dpDeviceAvailable(address, btDevice.getName());
+                makeA2dpDeviceAvailable(address, btDevice.getName(),
+                        "onSetA2dpSinkConnectionState");
                 synchronized (mCurAudioRoutes) {
                     String name = btDevice.getAliasName();
                     if (!TextUtils.equals(mCurAudioRoutes.bluetoothName, name)) {
@@ -5468,7 +5587,7 @@
 
         synchronized (mConnectedDevices) {
             if ((state == 0) && ((device & DEVICE_OVERRIDE_A2DP_ROUTE_ON_PLUG) != 0)) {
-                setBluetoothA2dpOnInt(true);
+                setBluetoothA2dpOnInt(true, "onSetWiredDeviceConnectionState state 0");
             }
 
             if (!handleDeviceConnection(state == 1, device, address, deviceName)) {
@@ -5477,7 +5596,7 @@
             }
             if (state != 0) {
                 if ((device & DEVICE_OVERRIDE_A2DP_ROUTE_ON_PLUG) != 0) {
-                    setBluetoothA2dpOnInt(false);
+                    setBluetoothA2dpOnInt(false, "onSetWiredDeviceConnectionState state not 0");
                 }
                 if ((device & mSafeMediaVolumeDevices) != 0) {
                     sendMsg(mAudioHandler,
@@ -5600,6 +5719,8 @@
                 if (!((dockState == Intent.EXTRA_DOCK_STATE_LE_DESK) ||
                       ((dockState == Intent.EXTRA_DOCK_STATE_UNDOCKED) &&
                        (mDockState == Intent.EXTRA_DOCK_STATE_LE_DESK)))) {
+                    mForceUseLogger.log(new ForceUseEvent(AudioSystem.FOR_DOCK, config,
+                            "ACTION_DOCK_EVENT intent"));
                     AudioSystem.setForceUse(AudioSystem.FOR_DOCK, config);
                 }
                 mDockState = dockState;
@@ -5930,7 +6051,7 @@
                             AudioSystem.FOR_SYSTEM,
                             cameraSoundForced ?
                                     AudioSystem.FORCE_SYSTEM_ENFORCED : AudioSystem.FORCE_NONE,
-                            null,
+                            new String("handleConfigurationChanged"),
                             0);
 
                     sendMsg(mAudioHandler,
@@ -5973,21 +6094,23 @@
 
     // Handles request to override default use of A2DP for media.
     // Must be called synchronized on mConnectedDevices
-    public void setBluetoothA2dpOnInt(boolean on) {
+    public void setBluetoothA2dpOnInt(boolean on, String eventSource) {
         synchronized (mBluetoothA2dpEnabledLock) {
             mBluetoothA2dpEnabled = on;
             mAudioHandler.removeMessages(MSG_SET_FORCE_BT_A2DP_USE);
             setForceUseInt_SyncDevices(AudioSystem.FOR_MEDIA,
-                    mBluetoothA2dpEnabled ? AudioSystem.FORCE_NONE : AudioSystem.FORCE_NO_BT_A2DP);
+                    mBluetoothA2dpEnabled ? AudioSystem.FORCE_NONE : AudioSystem.FORCE_NO_BT_A2DP,
+                            eventSource);
         }
     }
 
     // Must be called synchronized on mConnectedDevices
-    private void setForceUseInt_SyncDevices(int usage, int config) {
+    private void setForceUseInt_SyncDevices(int usage, int config, String eventSource) {
         if (usage == AudioSystem.FOR_MEDIA) {
             sendMsg(mAudioHandler, MSG_REPORT_NEW_ROUTES,
                     SENDMSG_NOOP, 0, 0, null, 0);
         }
+        mForceUseLogger.log(new ForceUseEvent(usage, config, eventSource));
         AudioSystem.setForceUse(usage, config);
     }
 
@@ -6192,9 +6315,11 @@
                 synchronized (mHdmiTvClient) {
                     if (mHdmiSystemAudioSupported != on) {
                         mHdmiSystemAudioSupported = on;
-                        AudioSystem.setForceUse(AudioSystem.FOR_HDMI_SYSTEM_AUDIO,
-                                on ? AudioSystem.FORCE_HDMI_SYSTEM_AUDIO_ENFORCED :
-                                     AudioSystem.FORCE_NONE);
+                        final int config = on ? AudioSystem.FORCE_HDMI_SYSTEM_AUDIO_ENFORCED :
+                            AudioSystem.FORCE_NONE;
+                        mForceUseLogger.log(new ForceUseEvent(AudioSystem.FOR_HDMI_SYSTEM_AUDIO,
+                                config, "setHdmiSystemAudioSupported"));
+                        AudioSystem.setForceUse(AudioSystem.FOR_HDMI_SYSTEM_AUDIO, config);
                     }
                     device = getDevicesForStream(AudioSystem.STREAM_MUSIC);
                 }
@@ -6292,6 +6417,29 @@
         }
     }
 
+    //==========================================================================================
+    // AudioService logging and dumpsys
+    //==========================================================================================
+    final int LOG_NB_EVENTS_PHONE_STATE = 20;
+    final int LOG_NB_EVENTS_WIRED_DEV_CONNECTION = 30;
+    final int LOG_NB_EVENTS_FORCE_USE = 20;
+    final int LOG_NB_EVENTS_VOLUME = 40;
+
+    final private AudioEventLogger mModeLogger = new AudioEventLogger(LOG_NB_EVENTS_PHONE_STATE,
+            "phone state (logged after successfull call to AudioSystem.setPhoneState(int))");
+
+    final private AudioEventLogger mWiredDevLogger = new AudioEventLogger(
+            LOG_NB_EVENTS_WIRED_DEV_CONNECTION,
+            "wired device connection (logged before onSetWiredDeviceConnectionState() is executed)"
+            );
+
+    final private AudioEventLogger mForceUseLogger = new AudioEventLogger(
+            LOG_NB_EVENTS_FORCE_USE,
+            "force use (logged before setForceUse() is executed)");
+
+    final private AudioEventLogger mVolumeLogger = new AudioEventLogger(LOG_NB_EVENTS_VOLUME,
+            "volume changes (logged when command received by AudioService)");
+
     private static final String[] RINGER_MODE_NAMES = new String[] {
             "SILENT",
             "VIBRATE",
@@ -6360,6 +6508,18 @@
         dumpAudioPolicies(pw);
 
         mPlaybackMonitor.dump(pw);
+
+        mRecordMonitor.dump(pw);
+
+        pw.println("\n");
+        pw.println("\nEvent logs:");
+        mModeLogger.dump(pw);
+        pw.println("\n");
+        mWiredDevLogger.dump(pw);
+        pw.println("\n");
+        mForceUseLogger.dump(pw);
+        pw.println("\n");
+        mVolumeLogger.dump(pw);
     }
 
     private static String safeMediaVolumeStateToString(Integer state) {
@@ -6642,13 +6802,6 @@
                 }
             }
         }
-
-        @Override
-        public void disableAudioForUid(boolean disable, int uid) {
-            queueMsgUnderWakeLock(mAudioHandler, MSG_DISABLE_AUDIO_FOR_UID,
-                    disable ? 1 : 0 /* arg1 */,  uid /* arg2 */,
-                    null /* obj */,  0 /* delay */);
-        }
     }
 
     //==========================================================================================
@@ -6788,10 +6941,13 @@
     //======================
     // Audio policy callbacks from AudioSystem for recording configuration updates
     //======================
-    private final RecordingActivityMonitor mRecordMonitor = new RecordingActivityMonitor();
+    private final RecordingActivityMonitor mRecordMonitor;
 
     public void registerRecordingCallback(IRecordingConfigDispatcher rcdb) {
-        mRecordMonitor.registerRecordingCallback(rcdb);
+        final boolean isPrivileged =
+                (PackageManager.PERMISSION_GRANTED == mContext.checkCallingPermission(
+                        android.Manifest.permission.MODIFY_AUDIO_ROUTING));
+        mRecordMonitor.registerRecordingCallback(rcdb, isPrivileged);
     }
 
     public void unregisterRecordingCallback(IRecordingConfigDispatcher rcdb) {
@@ -6799,7 +6955,10 @@
     }
 
     public List<AudioRecordingConfiguration> getActiveRecordingConfigurations() {
-        return mRecordMonitor.getActiveRecordingConfigurations();
+        final boolean isPrivileged =
+                (PackageManager.PERMISSION_GRANTED == mContext.checkCallingPermission(
+                        android.Manifest.permission.MODIFY_AUDIO_ROUTING));
+        return mRecordMonitor.getActiveRecordingConfigurations(isPrivileged);
     }
 
     public void disableRingtoneSync(final int userId) {
@@ -6821,7 +6980,7 @@
     //======================
     // Audio playback notification
     //======================
-    private final PlaybackActivityMonitor mPlaybackMonitor = new PlaybackActivityMonitor();
+    private final PlaybackActivityMonitor mPlaybackMonitor;
 
     public void registerPlaybackCallback(IPlaybackConfigDispatcher pcdb) {
         final boolean isPrivileged =
@@ -6853,6 +7012,10 @@
         mPlaybackMonitor.playerEvent(piid, event, Binder.getCallingUid());
     }
 
+    public void playerHasOpPlayAudio(int piid, boolean hasOpPlayAudio) {
+        mPlaybackMonitor.playerHasOpPlayAudio(piid, hasOpPlayAudio, Binder.getCallingUid());
+    }
+
     public void releasePlayer(int piid) {
         mPlaybackMonitor.releasePlayer(piid, Binder.getCallingUid());
     }
diff --git a/services/core/java/com/android/server/audio/AudioServiceEvents.java b/services/core/java/com/android/server/audio/AudioServiceEvents.java
new file mode 100644
index 0000000..9d9e35b
--- /dev/null
+++ b/services/core/java/com/android/server/audio/AudioServiceEvents.java
@@ -0,0 +1,138 @@
+/*
+ * 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.audio;
+
+import android.media.AudioManager;
+import android.media.AudioSystem;
+
+import com.android.server.audio.AudioService.WiredDeviceConnectionState;
+
+
+public class AudioServiceEvents {
+
+    final static class PhoneStateEvent extends AudioEventLogger.Event {
+        final String mPackage;
+        final int mOwnerPid;
+        final int mRequesterPid;
+        final int mRequestedMode;
+        final int mActualMode;
+
+        PhoneStateEvent(String callingPackage, int requesterPid, int requestedMode,
+                        int ownerPid, int actualMode) {
+            mPackage = callingPackage;
+            mRequesterPid = requesterPid;
+            mRequestedMode = requestedMode;
+            mOwnerPid = ownerPid;
+            mActualMode = actualMode;
+        }
+
+        @Override
+        public String eventToString() {
+            return new StringBuilder("setMode(").append(AudioSystem.modeToString(mRequestedMode))
+                    .append(") from package=").append(mPackage)
+                    .append(" pid=").append(mRequesterPid)
+                    .append(" selected mode=").append(AudioSystem.modeToString(mActualMode))
+                    .append(" by pid=").append(mOwnerPid).toString();
+        }
+    }
+
+    final static class WiredDevConnectEvent extends AudioEventLogger.Event {
+        final WiredDeviceConnectionState mState;
+
+        WiredDevConnectEvent(WiredDeviceConnectionState state) {
+            mState = state;
+        }
+
+        @Override
+        public String eventToString() {
+            return new StringBuilder("setWiredDeviceConnectionState(")
+                    .append(" type:").append(Integer.toHexString(mState.mType))
+                    .append(" state:").append(AudioSystem.deviceStateToString(mState.mState))
+                    .append(" addr:").append(mState.mAddress)
+                    .append(" name:").append(mState.mName)
+                    .append(") from ").append(mState.mCaller).toString();
+        }
+    }
+
+    final static class ForceUseEvent extends AudioEventLogger.Event {
+        final int mUsage;
+        final int mConfig;
+        final String mReason;
+
+        ForceUseEvent(int usage, int config, String reason) {
+            mUsage = usage;
+            mConfig = config;
+            mReason = reason;
+        }
+
+        @Override
+        public String eventToString() {
+            return new StringBuilder("setForceUse(")
+                    .append(AudioSystem.forceUseUsageToString(mUsage))
+                    .append(", ").append(AudioSystem.forceUseConfigToString(mConfig))
+                    .append(") due to ").append(mReason).toString();
+        }
+    }
+
+    final static class VolumeEvent extends AudioEventLogger.Event {
+        final static int VOL_ADJUST_SUGG_VOL = 0;
+        final static int VOL_ADJUST_STREAM_VOL = 1;
+        final static int VOL_SET_STREAM_VOL = 2;
+
+        final int mOp;
+        final int mStream;
+        final int mVal1;
+        final int mVal2;
+        final String mCaller;
+
+        VolumeEvent(int op, int stream, int val1, int val2, String caller) {
+            mOp = op;
+            mStream = stream;
+            mVal1 = val1;
+            mVal2 = val2;
+            mCaller = caller;
+        }
+
+        @Override
+        public String eventToString() {
+            switch (mOp) {
+                case VOL_ADJUST_SUGG_VOL:
+                    return new StringBuilder("adjustSuggestedStreamVolume(sugg:")
+                            .append(AudioSystem.streamToString(mStream))
+                            .append(" dir:").append(AudioManager.adjustToString(mVal1))
+                            .append(" flags:0x").append(Integer.toHexString(mVal2))
+                            .append(") from ").append(mCaller)
+                            .toString();
+                case VOL_ADJUST_STREAM_VOL:
+                    return new StringBuilder("adjustStreamVolume(stream:")
+                            .append(AudioSystem.streamToString(mStream))
+                            .append(" dir:").append(AudioManager.adjustToString(mVal1))
+                            .append(" flags:0x").append(Integer.toHexString(mVal2))
+                            .append(") from ").append(mCaller)
+                            .toString();
+                case VOL_SET_STREAM_VOL:
+                    return new StringBuilder("setStreamVolume(stream:")
+                            .append(AudioSystem.streamToString(mStream))
+                            .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/MediaFocusControl.java b/services/core/java/com/android/server/audio/MediaFocusControl.java
index 7d742ff..c5f563c7 100644
--- a/services/core/java/com/android/server/audio/MediaFocusControl.java
+++ b/services/core/java/com/android/server/audio/MediaFocusControl.java
@@ -89,6 +89,9 @@
         pw.println("\nMediaFocusControl dump time: "
                 + DateFormat.getTimeInstance().format(new Date()));
         dumpFocusStack(pw);
+        pw.println("\n");
+        // log
+        mEventLogger.dump(pw);
     }
 
     //=================================================================
@@ -120,6 +123,14 @@
     private final static Object mAudioFocusLock = new Object();
 
     /**
+     * Arbitrary maximum size of audio focus stack to prevent apps OOM'ing this process.
+     */
+    private static final int MAX_STACK_SIZE = 100;
+
+    private static final AudioEventLogger mEventLogger = new AudioEventLogger(50,
+            "focus commands as seen by MediaFocusControl");
+
+    /**
      * Discard the current audio focus owner.
      * Notify top of audio focus stack that it lost focus (regardless of possibility to reassign
      * focus), remove it from the stack, and clear the remote control display.
@@ -643,11 +654,14 @@
     protected int requestAudioFocus(AudioAttributes aa, int focusChangeHint, IBinder cb,
             IAudioFocusDispatcher fd, String clientId, String callingPackageName, int flags,
             int sdk) {
-        Log.i(TAG, " AudioFocus  requestAudioFocus() from uid/pid " + Binder.getCallingUid()
-                + "/" + Binder.getCallingPid()
-                + " clientId=" + clientId
-                + " req=" + focusChangeHint
-                + " flags=0x" + Integer.toHexString(flags));
+        mEventLogger.log((new AudioEventLogger.StringEvent(
+                "requestAudioFocus() from uid/pid " + Binder.getCallingUid()
+                    + "/" + Binder.getCallingPid()
+                    + " clientId=" + clientId + " callingPack=" + callingPackageName
+                    + " req=" + focusChangeHint
+                    + " flags=0x" + Integer.toHexString(flags)
+                    + " sdk=" + sdk))
+                .printLog(TAG));
         // we need a valid binder callback for clients
         if (!cb.pingBinder()) {
             Log.e(TAG, " AudioFocus DOA client for requestAudioFocus(), aborting.");
@@ -660,6 +674,11 @@
         }
 
         synchronized(mAudioFocusLock) {
+            if (mFocusStack.size() > MAX_STACK_SIZE) {
+                Log.e(TAG, "Max AudioFocus stack size reached, failing requestAudioFocus()");
+                return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
+            }
+
             boolean enteringRingOrCall = !mRingOrCallActive
                     & (AudioSystem.IN_VOICE_COMM_FOCUS_ID.compareTo(clientId) == 0);
             if (enteringRingOrCall) { mRingOrCallActive = true; }
@@ -770,10 +789,12 @@
      * */
     protected int abandonAudioFocus(IAudioFocusDispatcher fl, String clientId, AudioAttributes aa,
             String callingPackageName) {
-        // AudioAttributes are currently ignored, to be used for zones
-        Log.i(TAG, " AudioFocus  abandonAudioFocus() from uid/pid " + Binder.getCallingUid()
-                + "/" + Binder.getCallingPid()
-                + " clientId=" + clientId);
+        // AudioAttributes are currently ignored, to be used for zones / a11y
+        mEventLogger.log((new AudioEventLogger.StringEvent(
+                "abandonAudioFocus() from uid/pid " + Binder.getCallingUid()
+                    + "/" + Binder.getCallingPid()
+                    + " clientId=" + clientId))
+                .printLog(TAG));
         try {
             // this will take care of notifying the new focus owner if needed
             synchronized(mAudioFocusLock) {
diff --git a/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java b/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java
index 663559f..4943173 100644
--- a/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java
+++ b/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java
@@ -17,6 +17,8 @@
 package com.android.server.audio;
 
 import android.annotation.NonNull;
+import android.content.Context;
+import android.content.pm.PackageManager;
 import android.media.AudioAttributes;
 import android.media.AudioManager;
 import android.media.AudioPlaybackConfiguration;
@@ -34,6 +36,7 @@
 import java.io.PrintWriter;
 import java.text.DateFormat;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -89,7 +92,14 @@
     private final HashMap<Integer, AudioPlaybackConfiguration> mPlayers =
             new HashMap<Integer, AudioPlaybackConfiguration>();
 
-    PlaybackActivityMonitor() {
+    private final Context mContext;
+    private int mSavedAlarmVolume = -1;
+    private final int mMaxAlarmVolume;
+    private int mPrivilegedAlarmActiveCount = 0;
+
+    PlaybackActivityMonitor(Context context, int maxAlarmVolume) {
+        mContext = context;
+        mMaxAlarmVolume = maxAlarmVolume;
         PlayMonitorClient.sListenerDeathMonitor = this;
         AudioPlaybackConfiguration.sPlayerDeathMonitor = this;
     }
@@ -103,6 +113,9 @@
             final int index = mBannedUids.indexOf(new Integer(uid));
             if (index >= 0) {
                 if (!disable) {
+                    if (DEBUG) { // hidden behind DEBUG, too noisy otherwise
+                        sEventLogger.log(new AudioEventLogger.StringEvent("unbanning uid:" + uid));
+                    }
                     mBannedUids.remove(index);
                     // nothing else to do, future playback requests from this uid are ok
                 } // no else to handle, uid already present, so disabling again is no-op
@@ -111,6 +124,9 @@
                     for (AudioPlaybackConfiguration apc : mPlayers.values()) {
                         checkBanPlayer(apc, uid);
                     }
+                    if (DEBUG) { // hidden behind DEBUG, too noisy otherwise
+                        sEventLogger.log(new AudioEventLogger.StringEvent("banning uid:" + uid));
+                    }
                     mBannedUids.add(new Integer(uid));
                 } // no else to handle, uid already not in list, so enabling again is no-op
             }
@@ -144,6 +160,7 @@
                 new AudioPlaybackConfiguration(pic, newPiid,
                         Binder.getCallingUid(), Binder.getCallingPid());
         apc.init();
+        sEventLogger.log(new NewPlayerEvent(apc));
         synchronized(mPlayerLock) {
             mPlayers.put(newPiid, apc);
         }
@@ -155,6 +172,7 @@
         synchronized(mPlayerLock) {
             final AudioPlaybackConfiguration apc = mPlayers.get(new Integer(piid));
             if (checkConfigurationCaller(piid, apc, binderUid)) {
+                sEventLogger.log(new AudioAttrEvent(piid, attr));
                 change = apc.handleAudioAttributesEvent(attr);
             } else {
                 Log.e(TAG, "Error updating audio attributes");
@@ -162,7 +180,43 @@
             }
         }
         if (change) {
-            dispatchPlaybackChange();
+            dispatchPlaybackChange(false);
+        }
+    }
+
+    private static final int FLAGS_FOR_SILENCE_OVERRIDE =
+            AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY |
+            AudioAttributes.FLAG_BYPASS_MUTE;
+
+    private void checkVolumeForPrivilegedAlarm(AudioPlaybackConfiguration apc, int event) {
+        if (event == AudioPlaybackConfiguration.PLAYER_STATE_STARTED ||
+                apc.getPlayerState() == AudioPlaybackConfiguration.PLAYER_STATE_STARTED) {
+            if ((apc.getAudioAttributes().getAllFlags() & FLAGS_FOR_SILENCE_OVERRIDE)
+                        == FLAGS_FOR_SILENCE_OVERRIDE  &&
+                    apc.getAudioAttributes().getUsage() == AudioAttributes.USAGE_ALARM &&
+                    mContext.checkPermission(android.Manifest.permission.MODIFY_PHONE_STATE,
+                            apc.getClientPid(), apc.getClientUid()) ==
+                            PackageManager.PERMISSION_GRANTED) {
+                if (event == AudioPlaybackConfiguration.PLAYER_STATE_STARTED &&
+                        apc.getPlayerState() != AudioPlaybackConfiguration.PLAYER_STATE_STARTED) {
+                    if (mPrivilegedAlarmActiveCount++ == 0) {
+                        mSavedAlarmVolume = AudioSystem.getStreamVolumeIndex(
+                                AudioSystem.STREAM_ALARM, AudioSystem.DEVICE_OUT_SPEAKER);
+                        AudioSystem.setStreamVolumeIndex(AudioSystem.STREAM_ALARM,
+                                mMaxAlarmVolume, AudioSystem.DEVICE_OUT_SPEAKER);
+                    }
+                } else if (event != AudioPlaybackConfiguration.PLAYER_STATE_STARTED &&
+                        apc.getPlayerState() == AudioPlaybackConfiguration.PLAYER_STATE_STARTED) {
+                    if (--mPrivilegedAlarmActiveCount == 0) {
+                        if (AudioSystem.getStreamVolumeIndex(
+                                AudioSystem.STREAM_ALARM, AudioSystem.DEVICE_OUT_SPEAKER) ==
+                                mMaxAlarmVolume) {
+                            AudioSystem.setStreamVolumeIndex(AudioSystem.STREAM_ALARM,
+                                    mSavedAlarmVolume, AudioSystem.DEVICE_OUT_SPEAKER);
+                        }
+                    }
+                }
+            }
         }
     }
 
@@ -174,10 +228,13 @@
             if (apc == null) {
                 return;
             }
+            sEventLogger.log(new PlayerEvent(piid, event));
             if (event == AudioPlaybackConfiguration.PLAYER_STATE_STARTED) {
                 for (Integer uidInteger: mBannedUids) {
                     if (checkBanPlayer(apc, uidInteger.intValue())) {
                         // player was banned, do not update its state
+                        sEventLogger.log(new AudioEventLogger.StringEvent(
+                                "not starting piid:" + piid + " ,is banned"));
                         return;
                     }
                 }
@@ -188,6 +245,7 @@
             }
             if (checkConfigurationCaller(piid, apc, binderUid)) {
                 //TODO add generation counter to only update to the latest state
+                checkVolumeForPrivilegedAlarm(apc, event);
                 change = apc.handleStateEvent(event);
             } else {
                 Log.e(TAG, "Error handling event " + event);
@@ -198,17 +256,26 @@
             }
         }
         if (change) {
-            dispatchPlaybackChange();
+            dispatchPlaybackChange(event == AudioPlaybackConfiguration.PLAYER_STATE_RELEASED);
         }
     }
 
+    public void playerHasOpPlayAudio(int piid, boolean hasOpPlayAudio, int binderUid) {
+        // no check on UID yet because this is only for logging at the moment
+        sEventLogger.log(new PlayerOpPlayAudioEvent(piid, hasOpPlayAudio, binderUid));
+    }
+
     public void releasePlayer(int piid, int binderUid) {
         if (DEBUG) { Log.v(TAG, "releasePlayer() for piid=" + piid); }
         synchronized(mPlayerLock) {
             final AudioPlaybackConfiguration apc = mPlayers.get(new Integer(piid));
             if (checkConfigurationCaller(piid, apc, binderUid)) {
+                sEventLogger.log(new AudioEventLogger.StringEvent(
+                        "releasing player piid:" + piid));
                 mPlayers.remove(new Integer(piid));
                 mDuckingManager.removeReleased(apc);
+                checkVolumeForPrivilegedAlarm(apc, AudioPlaybackConfiguration.PLAYER_STATE_RELEASED);
+                apc.handleStateEvent(AudioPlaybackConfiguration.PLAYER_STATE_RELEASED);
             }
         }
     }
@@ -224,11 +291,26 @@
         pw.println("\nPlaybackActivityMonitor dump time: "
                 + DateFormat.getTimeInstance().format(new Date()));
         synchronized(mPlayerLock) {
-            for (AudioPlaybackConfiguration conf : mPlayers.values()) {
-                conf.dump(pw);
+            pw.println("\n  playback listeners:");
+            synchronized(mClients) {
+                for (PlayMonitorClient pmc : mClients) {
+                    pw.print(" " + (pmc.mIsPrivileged ? "(S)" : "(P)")
+                            + pmc.toString());
+                }
+            }
+            pw.println("\n");
+            // all players
+            pw.println("\n  players:");
+            final List<Integer> piidIntList = new ArrayList<Integer>(mPlayers.keySet());
+            Collections.sort(piidIntList);
+            for (Integer piidInt : piidIntList) {
+                final AudioPlaybackConfiguration apc = mPlayers.get(piidInt);
+                if (apc != null) {
+                    apc.dump(pw);
+                }
             }
             // ducked players
-            pw.println("\n  ducked players:");
+            pw.println("\n  ducked players piids:");
             mDuckingManager.dump(pw);
             // players muted due to the device ringing or being in a call
             pw.print("\n  muted player piids:");
@@ -241,7 +323,9 @@
             for (int uid : mBannedUids) {
                 pw.print(" " + uid);
             }
-            pw.println();
+            pw.println("\n");
+            // log
+            sEventLogger.dump(pw);
         }
     }
 
@@ -264,7 +348,11 @@
         return true;
     }
 
-    private void dispatchPlaybackChange() {
+    /**
+     * Sends new list after update of playback configurations
+     * @param iplayerReleased indicates if the change was due to a player being released
+     */
+    private void dispatchPlaybackChange(boolean iplayerReleased) {
         synchronized (mClients) {
             // typical use case, nobody is listening, don't do any work
             if (mClients.isEmpty()) {
@@ -295,9 +383,12 @@
                     // do not spam the logs if there are problems communicating with this client
                     if (pmc.mErrorCount < PlayMonitorClient.MAX_ERRORS) {
                         if (pmc.mIsPrivileged) {
-                            pmc.mDispatcherCb.dispatchPlaybackConfigChange(configsSystem);
+                            pmc.mDispatcherCb.dispatchPlaybackConfigChange(configsSystem,
+                                    iplayerReleased);
                         } else {
-                            pmc.mDispatcherCb.dispatchPlaybackConfigChange(configsPublic);
+                            // non-system clients don't have the control interface IPlayer, so
+                            // they don't need to flush commands when a player was released
+                            pmc.mDispatcherCb.dispatchPlaybackConfigChange(configsPublic, false);
                         }
                     }
                 } catch (RemoteException e) {
@@ -412,7 +503,8 @@
                 }
                 if (mute) {
                     try {
-                        Log.v(TAG, "call: muting player" + piid + " uid:" + apc.getClientUid());
+                        sEventLogger.log((new AudioEventLogger.StringEvent("call: muting piid:"
+                                + piid + " uid:" + apc.getClientUid())).printLog(TAG));
                         apc.getPlayerProxy().setVolume(0.0f);
                         mMutedPlayers.add(new Integer(piid));
                     } catch (Exception e) {
@@ -436,7 +528,8 @@
                 final AudioPlaybackConfiguration apc = mPlayers.get(piid);
                 if (apc != null) {
                     try {
-                        Log.v(TAG, "call: unmuting player" + piid + " uid:" + apc.getClientUid());
+                        sEventLogger.log(new AudioEventLogger.StringEvent("call: unmuting piid:"
+                                + piid).printLog(TAG));
                         apc.getPlayerProxy().setVolume(1.0f);
                     } catch (Exception e) {
                         Log.e(TAG, "call: error unmuting player " + piid + " uid:"
@@ -625,8 +718,7 @@
                     return;
                 }
                 try {
-                    Log.v(TAG, "ducking (skipRamp=" + skipRamp + ") player piid:"
-                            + apc.getPlayerInterfaceId() + " uid:" + mUid);
+                    sEventLogger.log((new DuckEvent(apc, skipRamp)).printLog(TAG));
                     apc.getPlayerProxy().applyVolumeShaper(
                             DUCK_VSHAPE,
                             skipRamp ? PLAY_SKIP_RAMP : PLAY_CREATE_IF_NEEDED);
@@ -641,7 +733,8 @@
                     final AudioPlaybackConfiguration apc = players.get(piid);
                     if (apc != null) {
                         try {
-                            Log.v(TAG, "unducking player " + piid + " uid:" + mUid);
+                            sEventLogger.log((new AudioEventLogger.StringEvent("unducking piid:"
+                                    + piid)).printLog(TAG));
                             apc.getPlayerProxy().applyVolumeShaper(
                                     DUCK_ID,
                                     VolumeShaper.Operation.REVERSE);
@@ -664,4 +757,106 @@
             }
         }
     }
+
+    //=================================================================
+    // For logging
+    private final static class PlayerEvent extends AudioEventLogger.Event {
+        // only keeping the player interface ID as it uniquely identifies the player in the event
+        final int mPlayerIId;
+        final int mState;
+
+        PlayerEvent(int piid, int state) {
+            mPlayerIId = piid;
+            mState = state;
+        }
+
+        @Override
+        public String eventToString() {
+            return new StringBuilder("player piid:").append(mPlayerIId).append(" state:")
+                    .append(AudioPlaybackConfiguration.toLogFriendlyPlayerState(mState)).toString();
+        }
+    }
+
+    private final static class PlayerOpPlayAudioEvent extends AudioEventLogger.Event {
+        // only keeping the player interface ID as it uniquely identifies the player in the event
+        final int mPlayerIId;
+        final boolean mHasOp;
+        final int mUid;
+
+        PlayerOpPlayAudioEvent(int piid, boolean hasOp, int uid) {
+            mPlayerIId = piid;
+            mHasOp = hasOp;
+            mUid = uid;
+        }
+
+        @Override
+        public String eventToString() {
+            return new StringBuilder("player piid:").append(mPlayerIId)
+                    .append(" has OP_PLAY_AUDIO:").append(mHasOp)
+                    .append(" in uid:").append(mUid).toString();
+        }
+    }
+
+    private final static class NewPlayerEvent extends AudioEventLogger.Event {
+        private final int mPlayerIId;
+        private final int mPlayerType;
+        private final int mClientUid;
+        private final int mClientPid;
+        private final AudioAttributes mPlayerAttr;
+
+        NewPlayerEvent(AudioPlaybackConfiguration apc) {
+            mPlayerIId = apc.getPlayerInterfaceId();
+            mPlayerType = apc.getPlayerType();
+            mClientUid = apc.getClientUid();
+            mClientPid = apc.getClientPid();
+            mPlayerAttr = apc.getAudioAttributes();
+        }
+
+        @Override
+        public String eventToString() {
+            return new String("new player piid:" + mPlayerIId + " uid/pid:" + mClientUid + "/"
+                    + mClientPid + " type:"
+                    + AudioPlaybackConfiguration.toLogFriendlyPlayerType(mPlayerType)
+                    + " attr:" + mPlayerAttr);
+        }
+    }
+
+    private static final class DuckEvent extends AudioEventLogger.Event {
+        private final int mPlayerIId;
+        private final boolean mSkipRamp;
+        private final int mClientUid;
+        private final int mClientPid;
+
+        DuckEvent(@NonNull AudioPlaybackConfiguration apc, boolean skipRamp) {
+            mPlayerIId = apc.getPlayerInterfaceId();
+            mSkipRamp = skipRamp;
+            mClientUid = apc.getClientUid();
+            mClientPid = apc.getClientPid();
+        }
+
+        @Override
+        public String eventToString() {
+            return new StringBuilder("ducking player piid:").append(mPlayerIId)
+                    .append(" uid/pid:").append(mClientUid).append("/").append(mClientPid)
+                    .append(" skip ramp:").append(mSkipRamp).toString();
+        }
+    }
+
+    private static final class AudioAttrEvent extends AudioEventLogger.Event {
+        private final int mPlayerIId;
+        private final AudioAttributes mPlayerAttr;
+
+        AudioAttrEvent(int piid, AudioAttributes attr) {
+            mPlayerIId = piid;
+            mPlayerAttr = attr;
+        }
+
+        @Override
+        public String eventToString() {
+            return new String("player piid:" + mPlayerIId + " new AudioAttributes:" + mPlayerAttr);
+        }
+    }
+
+    private static final AudioEventLogger sEventLogger = new AudioEventLogger(100,
+            "playback activity as reported through PlayerBase");
 }
diff --git a/services/core/java/com/android/server/audio/RecordingActivityMonitor.java b/services/core/java/com/android/server/audio/RecordingActivityMonitor.java
index 57d55de..34309b6 100644
--- a/services/core/java/com/android/server/audio/RecordingActivityMonitor.java
+++ b/services/core/java/com/android/server/audio/RecordingActivityMonitor.java
@@ -16,8 +16,11 @@
 
 package com.android.server.audio;
 
+import android.content.Context;
+import android.content.pm.PackageManager;
 import android.media.AudioFormat;
 import android.media.AudioManager;
+import android.media.AudioPlaybackConfiguration;
 import android.media.AudioRecordingConfiguration;
 import android.media.AudioSystem;
 import android.media.IRecordingConfigDispatcher;
@@ -26,7 +29,10 @@
 import android.os.RemoteException;
 import android.util.Log;
 
+import java.io.PrintWriter;
+import java.text.DateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -39,31 +45,47 @@
     public final static String TAG = "AudioService.RecordingActivityMonitor";
 
     private ArrayList<RecMonitorClient> mClients = new ArrayList<RecMonitorClient>();
+    // a public client is one that needs an anonymized version of the playback configurations, we
+    // keep track of whether there is at least one to know when we need to create the list of
+    // playback configurations that do not contain uid/package name information.
+    private boolean mHasPublicClients = false;
 
     private HashMap<Integer, AudioRecordingConfiguration> mRecordConfigs =
             new HashMap<Integer, AudioRecordingConfiguration>();
 
-    RecordingActivityMonitor() {
+    private final PackageManager mPackMan;
+
+    RecordingActivityMonitor(Context ctxt) {
         RecMonitorClient.sMonitor = this;
+        mPackMan = ctxt.getPackageManager();
     }
 
     /**
      * Implementation of android.media.AudioSystem.AudioRecordingCallback
      */
-    public void onRecordingConfigurationChanged(int event, int session, int source,
-            int[] recordingInfo) {
+    public void onRecordingConfigurationChanged(int event, int uid, int session, int source,
+            int[] recordingInfo, String packName) {
         if (MediaRecorder.isSystemOnlyAudioSource(source)) {
             return;
         }
-        final List<AudioRecordingConfiguration> configs =
-                updateSnapshot(event, session, source, recordingInfo);
-        if (configs != null){
-            synchronized(mClients) {
+        final List<AudioRecordingConfiguration> configsSystem =
+                updateSnapshot(event, uid, session, source, recordingInfo);
+        if (configsSystem != null){
+            synchronized (mClients) {
+                // list of recording configurations for "public consumption". It is only computed if
+                // there are non-system recording activity listeners.
+                final List<AudioRecordingConfiguration> configsPublic = mHasPublicClients ?
+                        anonymizeForPublicConsumption(configsSystem) :
+                            new ArrayList<AudioRecordingConfiguration>();
                 final Iterator<RecMonitorClient> clientIterator = mClients.iterator();
                 while (clientIterator.hasNext()) {
+                    final RecMonitorClient rmc = clientIterator.next();
                     try {
-                        clientIterator.next().mDispatcherCb.dispatchRecordingConfigChange(
-                                configs);
+                        if (rmc.mIsPrivileged) {
+                            rmc.mDispatcherCb.dispatchRecordingConfigChange(configsSystem);
+                        } else {
+                            rmc.mDispatcherCb.dispatchRecordingConfigChange(configsPublic);
+                        }
                     } catch (RemoteException e) {
                         Log.w(TAG, "Could not call dispatchRecordingConfigChange() on client", e);
                     }
@@ -72,17 +94,42 @@
         }
     }
 
+    protected void dump(PrintWriter pw) {
+        // players
+        pw.println("\nRecordActivityMonitor dump time: "
+                + DateFormat.getTimeInstance().format(new Date()));
+        synchronized(mRecordConfigs) {
+            for (AudioRecordingConfiguration conf : mRecordConfigs.values()) {
+                conf.dump(pw);
+            }
+        }
+    }
+
+    private ArrayList<AudioRecordingConfiguration> anonymizeForPublicConsumption(
+            List<AudioRecordingConfiguration> sysConfigs) {
+        ArrayList<AudioRecordingConfiguration> publicConfigs =
+                new ArrayList<AudioRecordingConfiguration>();
+        // only add active anonymized configurations,
+        for (AudioRecordingConfiguration config : sysConfigs) {
+            publicConfigs.add(AudioRecordingConfiguration.anonymizedCopy(config));
+        }
+        return publicConfigs;
+    }
+
     void initMonitor() {
         AudioSystem.setRecordingCallback(this);
     }
 
-    void registerRecordingCallback(IRecordingConfigDispatcher rcdb) {
+    void registerRecordingCallback(IRecordingConfigDispatcher rcdb, boolean isPrivileged) {
         if (rcdb == null) {
             return;
         }
-        synchronized(mClients) {
-            final RecMonitorClient rmc = new RecMonitorClient(rcdb);
+        synchronized (mClients) {
+            final RecMonitorClient rmc = new RecMonitorClient(rcdb, isPrivileged);
             if (rmc.init()) {
+                if (!isPrivileged) {
+                    mHasPublicClients = true;
+                }
                 mClients.add(rmc);
             }
         }
@@ -92,22 +139,34 @@
         if (rcdb == null) {
             return;
         }
-        synchronized(mClients) {
+        synchronized (mClients) {
             final Iterator<RecMonitorClient> clientIterator = mClients.iterator();
+            boolean hasPublicClients = false;
             while (clientIterator.hasNext()) {
                 RecMonitorClient rmc = clientIterator.next();
                 if (rcdb.equals(rmc.mDispatcherCb)) {
                     rmc.release();
                     clientIterator.remove();
-                    break;
+                } else {
+                    if (!rmc.mIsPrivileged) {
+                        hasPublicClients = true;
+                    }
                 }
             }
+            mHasPublicClients = hasPublicClients;
         }
     }
 
-    List<AudioRecordingConfiguration> getActiveRecordingConfigurations() {
+    List<AudioRecordingConfiguration> getActiveRecordingConfigurations(boolean isPrivileged) {
         synchronized(mRecordConfigs) {
-            return new ArrayList<AudioRecordingConfiguration>(mRecordConfigs.values());
+            if (isPrivileged) {
+                return new ArrayList<AudioRecordingConfiguration>(mRecordConfigs.values());
+            } else {
+                final List<AudioRecordingConfiguration> configsPublic =
+                        anonymizeForPublicConsumption(
+                            new ArrayList<AudioRecordingConfiguration>(mRecordConfigs.values()));
+                return configsPublic;
+            }
         }
     }
 
@@ -122,8 +181,8 @@
      * @return null if the list of active recording sessions has not been modified, a list
      *     with the current active configurations otherwise.
      */
-    private List<AudioRecordingConfiguration> updateSnapshot(int event, int session, int source,
-            int[] recordingInfo) {
+    private List<AudioRecordingConfiguration> updateSnapshot(int event, int uid, int session,
+            int source, int[] recordingInfo) {
         final boolean configChanged;
         final ArrayList<AudioRecordingConfiguration> configs;
         synchronized(mRecordConfigs) {
@@ -147,10 +206,19 @@
                         .build();
                 final int patchHandle = recordingInfo[6];
                 final Integer sessionKey = new Integer(session);
+
+                final String[] packages = mPackMan.getPackagesForUid(uid);
+                final String packageName;
+                if (packages != null && packages.length > 0) {
+                    packageName = packages[0];
+                } else {
+                    packageName = "";
+                }
+                final AudioRecordingConfiguration updatedConfig =
+                        new AudioRecordingConfiguration(uid, session, source,
+                                clientFormat, deviceFormat, patchHandle, packageName);
+
                 if (mRecordConfigs.containsKey(sessionKey)) {
-                    final AudioRecordingConfiguration updatedConfig =
-                            new AudioRecordingConfiguration(session, source,
-                                    clientFormat, deviceFormat, patchHandle);
                     if (updatedConfig.equals(mRecordConfigs.get(sessionKey))) {
                         configChanged = false;
                     } else {
@@ -160,9 +228,7 @@
                         configChanged = true;
                     }
                 } else {
-                    mRecordConfigs.put(sessionKey,
-                            new AudioRecordingConfiguration(session, source,
-                                    clientFormat, deviceFormat, patchHandle));
+                    mRecordConfigs.put(sessionKey, updatedConfig);
                     configChanged = true;
                 }
                 break;
@@ -189,9 +255,11 @@
         static RecordingActivityMonitor sMonitor;
 
         final IRecordingConfigDispatcher mDispatcherCb;
+        final boolean mIsPrivileged;
 
-        RecMonitorClient(IRecordingConfigDispatcher rcdb) {
+        RecMonitorClient(IRecordingConfigDispatcher rcdb, boolean isPrivileged) {
             mDispatcherCb = rcdb;
+            mIsPrivileged = isPrivileged;
         }
 
         public void binderDied() {
diff --git a/services/core/java/com/android/server/broadcastradio/BroadcastRadioService.java b/services/core/java/com/android/server/broadcastradio/BroadcastRadioService.java
new file mode 100644
index 0000000..8fdbcf6c
--- /dev/null
+++ b/services/core/java/com/android/server/broadcastradio/BroadcastRadioService.java
@@ -0,0 +1,100 @@
+/**
+ * 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.broadcastradio;
+
+import android.Manifest;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.hardware.radio.IRadioService;
+import android.hardware.radio.ITuner;
+import android.hardware.radio.ITunerCallback;
+import android.hardware.radio.RadioManager;
+import android.os.ParcelableException;
+
+import com.android.server.SystemService;
+
+import java.util.List;
+
+public class BroadcastRadioService extends SystemService {
+    private final ServiceImpl mServiceImpl = new ServiceImpl();
+
+    /**
+     * This field is used by native code, do not access or modify.
+     */
+    private final long mNativeContext = nativeInit();
+
+    private final Object mLock = new Object();
+    private List<RadioManager.ModuleProperties> mModules = null;
+
+    public BroadcastRadioService(Context context) {
+        super(context);
+    }
+
+    @Override
+    protected void finalize() throws Throwable {
+        nativeFinalize(mNativeContext);
+        super.finalize();
+    }
+
+    private native long nativeInit();
+    private native void nativeFinalize(long nativeContext);
+    private native List<RadioManager.ModuleProperties> nativeLoadModules(long nativeContext);
+    private native Tuner nativeOpenTuner(long nativeContext, int moduleId,
+            RadioManager.BandConfig config, boolean withAudio, ITunerCallback callback);
+
+    @Override
+    public void onStart() {
+        publishBinderService(Context.RADIO_SERVICE, mServiceImpl);
+    }
+
+    private class ServiceImpl extends IRadioService.Stub {
+        private void enforcePolicyAccess() {
+            if (PackageManager.PERMISSION_GRANTED != getContext().checkCallingPermission(
+                    Manifest.permission.ACCESS_BROADCAST_RADIO)) {
+                throw new SecurityException("ACCESS_BROADCAST_RADIO permission not granted");
+            }
+        }
+
+        @Override
+        public List<RadioManager.ModuleProperties> listModules() {
+            enforcePolicyAccess();
+            synchronized (mLock) {
+                if (mModules != null) return mModules;
+
+                mModules = nativeLoadModules(mNativeContext);
+                if (mModules == null) {
+                    throw new ParcelableException(new NullPointerException(
+                            "couldn't load radio modules"));
+                }
+
+                return mModules;
+            }
+        }
+
+        @Override
+        public ITuner openTuner(int moduleId, RadioManager.BandConfig bandConfig,
+                boolean withAudio, ITunerCallback callback) {
+            enforcePolicyAccess();
+            if (callback == null) {
+                throw new IllegalArgumentException("Callback must not be empty");
+            }
+            synchronized (mLock) {
+                return nativeOpenTuner(mNativeContext, moduleId, bandConfig, withAudio, callback);
+            }
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/broadcastradio/Convert.java b/services/core/java/com/android/server/broadcastradio/Convert.java
new file mode 100644
index 0000000..125554f
--- /dev/null
+++ b/services/core/java/com/android/server/broadcastradio/Convert.java
@@ -0,0 +1,59 @@
+/**
+ * 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.broadcastradio;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.util.Slog;
+
+import java.util.Map;
+import java.util.Set;
+
+class Convert {
+    private static final String TAG = "BroadcastRadioService.Convert";
+
+    /**
+     * Converts string map to an array that's easily accessible by native code.
+     *
+     * Calling this java method once is more efficient than converting map object on the native
+     * side, which requires several separate java calls for each element.
+     *
+     * @param map map to convert.
+     * @returns array (sized the same as map) of two-element string arrays
+     *          (first element is the key, second is value).
+     */
+    static @NonNull String[][] stringMapToNative(@Nullable Map<String, String> map) {
+        if (map == null) {
+            Slog.v(TAG, "map is null, returning zero-elements array");
+            return new String[0][0];
+        }
+
+        Set<Map.Entry<String, String>> entries = map.entrySet();
+        int len = entries.size();
+        String[][] arr = new String[len][2];
+
+        int i = 0;
+        for (Map.Entry<String, String> entry : entries) {
+            arr[i][0] = entry.getKey();
+            arr[i][1] = entry.getValue();
+            i++;
+        }
+
+        Slog.v(TAG, "converted " + i + " element(s)");
+        return arr;
+    }
+}
diff --git a/services/core/java/com/android/server/broadcastradio/Tuner.java b/services/core/java/com/android/server/broadcastradio/Tuner.java
new file mode 100644
index 0000000..e6ae320
--- /dev/null
+++ b/services/core/java/com/android/server/broadcastradio/Tuner.java
@@ -0,0 +1,282 @@
+/**
+ * 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.broadcastradio;
+
+import android.annotation.NonNull;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.hardware.radio.ITuner;
+import android.hardware.radio.ITunerCallback;
+import android.hardware.radio.ProgramSelector;
+import android.hardware.radio.RadioManager;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.util.Slog;
+
+import java.util.List;
+import java.util.Map;
+
+class Tuner extends ITuner.Stub {
+    private static final String TAG = "BroadcastRadioService.Tuner";
+
+    /**
+     * This field is used by native code, do not access or modify.
+     */
+    private final long mNativeContext;
+
+    private final Object mLock = new Object();
+    @NonNull private final TunerCallback mTunerCallback;
+    @NonNull private final ITunerCallback mClientCallback;
+    @NonNull private final IBinder.DeathRecipient mDeathRecipient;
+
+    private boolean mIsClosed = false;
+    private boolean mIsMuted = false;
+    private int mRegion;  // TODO(b/62710330): find better solution to handle regions
+    private final boolean mWithAudio;
+
+    Tuner(@NonNull ITunerCallback clientCallback, int halRev,
+            int region, boolean withAudio, int band) {
+        mClientCallback = clientCallback;
+        mTunerCallback = new TunerCallback(this, clientCallback, halRev);
+        mRegion = region;
+        mWithAudio = withAudio;
+        mNativeContext = nativeInit(halRev, withAudio, band);
+        mDeathRecipient = this::close;
+        try {
+            mClientCallback.asBinder().linkToDeath(mDeathRecipient, 0);
+        } catch (RemoteException ex) {
+            close();
+        }
+    }
+
+    @Override
+    protected void finalize() throws Throwable {
+        nativeFinalize(mNativeContext);
+        super.finalize();
+    }
+
+    private native long nativeInit(int halRev, boolean withAudio, int band);
+    private native void nativeFinalize(long nativeContext);
+    private native void nativeClose(long nativeContext);
+
+    private native void nativeSetConfiguration(long nativeContext,
+            @NonNull RadioManager.BandConfig config);
+    private native RadioManager.BandConfig nativeGetConfiguration(long nativeContext, int region);
+
+    private native void nativeSetMuted(long nativeContext, boolean mute);
+
+    private native void nativeStep(long nativeContext, boolean directionDown, boolean skipSubChannel);
+    private native void nativeScan(long nativeContext, boolean directionDown, boolean skipSubChannel);
+    private native void nativeTune(long nativeContext, @NonNull ProgramSelector selector);
+    private native void nativeCancel(long nativeContext);
+
+    private native void nativeCancelAnnouncement(long nativeContext);
+
+    private native RadioManager.ProgramInfo nativeGetProgramInformation(long nativeContext);
+    private native boolean nativeStartBackgroundScan(long nativeContext);
+    private native List<RadioManager.ProgramInfo> nativeGetProgramList(long nativeContext,
+            Map<String, String> vendorFilter);
+
+    private native byte[] nativeGetImage(long nativeContext, int id);
+
+    private native boolean nativeIsAnalogForced(long nativeContext);
+    private native void nativeSetAnalogForced(long nativeContext, boolean isForced);
+
+    private native boolean nativeIsAntennaConnected(long nativeContext);
+
+    @Override
+    public void close() {
+        synchronized (mLock) {
+            if (mIsClosed) return;
+            mIsClosed = true;
+            mTunerCallback.detach();
+            mClientCallback.asBinder().unlinkToDeath(mDeathRecipient, 0);
+            nativeClose(mNativeContext);
+        }
+    }
+
+    @Override
+    public boolean isClosed() {
+        return mIsClosed;
+    }
+
+    private void checkNotClosedLocked() {
+        if (mIsClosed) {
+            throw new IllegalStateException("Tuner is closed, no further operations are allowed");
+        }
+    }
+
+    @Override
+    public void setConfiguration(RadioManager.BandConfig config) {
+        if (config == null) {
+            throw new IllegalArgumentException("The argument must not be a null pointer");
+        }
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            nativeSetConfiguration(mNativeContext, config);
+            mRegion = config.getRegion();
+        }
+    }
+
+    @Override
+    public RadioManager.BandConfig getConfiguration() {
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            return nativeGetConfiguration(mNativeContext, mRegion);
+        }
+    }
+
+    @Override
+    public void setMuted(boolean mute) {
+        if (!mWithAudio) {
+            throw new IllegalStateException("Can't operate on mute - no audio requested");
+        }
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            if (mIsMuted == mute) return;
+            mIsMuted = mute;
+
+            nativeSetMuted(mNativeContext, mute);
+        }
+    }
+
+    @Override
+    public boolean isMuted() {
+        if (!mWithAudio) {
+            Slog.w(TAG, "Tuner did not request audio, pretending it was muted");
+            return true;
+        }
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            return mIsMuted;
+        }
+    }
+
+    @Override
+    public void step(boolean directionDown, boolean skipSubChannel) {
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            nativeStep(mNativeContext, directionDown, skipSubChannel);
+        }
+    }
+
+    @Override
+    public void scan(boolean directionDown, boolean skipSubChannel) {
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            nativeScan(mNativeContext, directionDown, skipSubChannel);
+        }
+    }
+
+    @Override
+    public void tune(ProgramSelector selector) {
+        if (selector == null) {
+            throw new IllegalArgumentException("The argument must not be a null pointer");
+        }
+        Slog.i(TAG, "Tuning to " + selector);
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            nativeTune(mNativeContext, selector);
+        }
+    }
+
+    @Override
+    public void cancel() {
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            nativeCancel(mNativeContext);
+        }
+    }
+
+    @Override
+    public void cancelAnnouncement() {
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            nativeCancelAnnouncement(mNativeContext);
+        }
+    }
+
+    @Override
+    public RadioManager.ProgramInfo getProgramInformation() {
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            return nativeGetProgramInformation(mNativeContext);
+        }
+    }
+
+    @Override
+    public Bitmap getImage(int id) {
+        if (id == 0) {
+            throw new IllegalArgumentException("Image ID is missing");
+        }
+
+        byte[] rawImage;
+        synchronized (mLock) {
+            rawImage = nativeGetImage(mNativeContext, id);
+        }
+        if (rawImage == null || rawImage.length == 0) {
+            return null;
+        }
+
+        return BitmapFactory.decodeByteArray(rawImage, 0, rawImage.length);
+    }
+
+    @Override
+    public boolean startBackgroundScan() {
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            return nativeStartBackgroundScan(mNativeContext);
+        }
+    }
+
+    @Override
+    public List<RadioManager.ProgramInfo> getProgramList(Map vendorFilter) {
+        Map<String, String> sFilter = vendorFilter;
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            List<RadioManager.ProgramInfo> list = nativeGetProgramList(mNativeContext, sFilter);
+            if (list == null) {
+                throw new IllegalStateException("Program list is not ready");
+            }
+            return list;
+        }
+    }
+
+    @Override
+    public boolean isAnalogForced() {
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            return nativeIsAnalogForced(mNativeContext);
+        }
+    }
+
+    @Override
+    public void setAnalogForced(boolean isForced) {
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            nativeSetAnalogForced(mNativeContext, isForced);
+        }
+    }
+
+    @Override
+    public boolean isAntennaConnected() {
+        synchronized (mLock) {
+            checkNotClosedLocked();
+            return nativeIsAntennaConnected(mNativeContext);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/broadcastradio/TunerCallback.java b/services/core/java/com/android/server/broadcastradio/TunerCallback.java
new file mode 100644
index 0000000..a87ae8d
--- /dev/null
+++ b/services/core/java/com/android/server/broadcastradio/TunerCallback.java
@@ -0,0 +1,127 @@
+/**
+ * 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.broadcastradio;
+
+import android.annotation.NonNull;
+import android.hardware.radio.ITuner;
+import android.hardware.radio.ITunerCallback;
+import android.hardware.radio.RadioManager;
+import android.hardware.radio.RadioMetadata;
+import android.hardware.radio.RadioTuner;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.util.Slog;
+
+class TunerCallback implements ITunerCallback {
+    private static final String TAG = "BroadcastRadioService.TunerCallback";
+
+    /**
+     * This field is used by native code, do not access or modify.
+     */
+    private final long mNativeContext;
+
+    @NonNull private final Tuner mTuner;
+    @NonNull private final ITunerCallback mClientCallback;
+
+    TunerCallback(@NonNull Tuner tuner, @NonNull ITunerCallback clientCallback, int halRev) {
+        mTuner = tuner;
+        mClientCallback = clientCallback;
+        mNativeContext = nativeInit(tuner, halRev);
+    }
+
+    @Override
+    protected void finalize() throws Throwable {
+        nativeFinalize(mNativeContext);
+        super.finalize();
+    }
+
+    private native long nativeInit(@NonNull Tuner tuner, int halRev);
+    private native void nativeFinalize(long nativeContext);
+    private native void nativeDetach(long nativeContext);
+
+    public void detach() {
+        nativeDetach(mNativeContext);
+    }
+
+    private interface RunnableThrowingRemoteException {
+        void run() throws RemoteException;
+    }
+
+    private void dispatch(RunnableThrowingRemoteException func) {
+        try {
+            func.run();
+        } catch (RemoteException e) {
+            Slog.e(TAG, "client died", e);
+        }
+    }
+
+    // called from native side
+    private void handleHwFailure() {
+        onError(RadioTuner.ERROR_HARDWARE_FAILURE);
+        mTuner.close();
+    }
+
+    @Override
+    public void onError(int status) {
+        dispatch(() -> mClientCallback.onError(status));
+    }
+
+    @Override
+    public void onConfigurationChanged(RadioManager.BandConfig config) {
+        dispatch(() -> mClientCallback.onConfigurationChanged(config));
+    }
+
+    @Override
+    public void onCurrentProgramInfoChanged(RadioManager.ProgramInfo info) {
+        dispatch(() -> mClientCallback.onCurrentProgramInfoChanged(info));
+    }
+
+    @Override
+    public void onTrafficAnnouncement(boolean active) {
+        dispatch(() -> mClientCallback.onTrafficAnnouncement(active));
+    }
+
+    @Override
+    public void onEmergencyAnnouncement(boolean active) {
+        dispatch(() -> mClientCallback.onEmergencyAnnouncement(active));
+    }
+
+    @Override
+    public void onAntennaState(boolean connected) {
+        dispatch(() -> mClientCallback.onAntennaState(connected));
+    }
+
+    @Override
+    public void onBackgroundScanAvailabilityChange(boolean isAvailable) {
+        dispatch(() -> mClientCallback.onBackgroundScanAvailabilityChange(isAvailable));
+    }
+
+    @Override
+    public void onBackgroundScanComplete() {
+        dispatch(() -> mClientCallback.onBackgroundScanComplete());
+    }
+
+    @Override
+    public void onProgramListChanged() {
+        dispatch(() -> mClientCallback.onProgramListChanged());
+    }
+
+    @Override
+    public IBinder asBinder() {
+        throw new RuntimeException("Not a binder");
+    }
+}
diff --git a/services/core/java/com/android/server/connectivity/IpConnectivityEventBuilder.java b/services/core/java/com/android/server/connectivity/IpConnectivityEventBuilder.java
index 5dee91d..67e7216 100644
--- a/services/core/java/com/android/server/connectivity/IpConnectivityEventBuilder.java
+++ b/services/core/java/com/android/server/connectivity/IpConnectivityEventBuilder.java
@@ -20,6 +20,7 @@
 import static android.net.NetworkCapabilities.TRANSPORT_BLUETOOTH;
 import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
 import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
+import static android.net.NetworkCapabilities.TRANSPORT_LOWPAN;
 import static android.net.NetworkCapabilities.TRANSPORT_VPN;
 import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
 import static android.net.NetworkCapabilities.TRANSPORT_WIFI_AWARE;
@@ -37,6 +38,7 @@
 import android.net.metrics.NetworkEvent;
 import android.net.metrics.RaEvent;
 import android.net.metrics.ValidationProbeEvent;
+import android.net.metrics.WakeupStats;
 import android.os.Parcelable;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
@@ -114,6 +116,22 @@
         return out;
     }
 
+    public static IpConnectivityEvent toProto(WakeupStats in) {
+        IpConnectivityLogClass.WakeupStats wakeupStats =
+                new IpConnectivityLogClass.WakeupStats();
+        in.updateDuration();
+        wakeupStats.durationSec = in.durationSec;
+        wakeupStats.totalWakeups = in.totalWakeups;
+        wakeupStats.rootWakeups = in.rootWakeups;
+        wakeupStats.systemWakeups = in.systemWakeups;
+        wakeupStats.nonApplicationWakeups = in.nonApplicationWakeups;
+        wakeupStats.applicationWakeups = in.applicationWakeups;
+        wakeupStats.noUidWakeups = in.noUidWakeups;
+        final IpConnectivityEvent out = buildEvent(0, 0, in.iface);
+        out.setWakeupStats(wakeupStats);
+        return out;
+    }
+
     private static IpConnectivityEvent buildEvent(int netId, long transports, String ifname) {
         final IpConnectivityEvent ev = new IpConnectivityEvent();
         ev.networkId = netId;
@@ -362,29 +380,46 @@
         TRANSPORT_LINKLAYER_MAP[TRANSPORT_BLUETOOTH]  = IpConnectivityLogClass.BLUETOOTH;
         TRANSPORT_LINKLAYER_MAP[TRANSPORT_ETHERNET]   = IpConnectivityLogClass.ETHERNET;
         TRANSPORT_LINKLAYER_MAP[TRANSPORT_VPN]        = IpConnectivityLogClass.UNKNOWN;
-        // TODO: change mapping TRANSPORT_WIFI_AWARE -> WIFI_AWARE
-        TRANSPORT_LINKLAYER_MAP[TRANSPORT_WIFI_AWARE] = IpConnectivityLogClass.UNKNOWN;
+        TRANSPORT_LINKLAYER_MAP[TRANSPORT_WIFI_AWARE] = IpConnectivityLogClass.WIFI_NAN;
+        TRANSPORT_LINKLAYER_MAP[TRANSPORT_LOWPAN]     = IpConnectivityLogClass.LOWPAN;
     };
 
     private static int ifnameToLinkLayer(String ifname) {
         // Do not try to catch all interface names with regexes, instead only catch patterns that
         // are cheap to check, and otherwise fallback on postprocessing in aggregation layer.
-        for (int i = 0; i < IFNAME_LINKLAYER_MAP.size(); i++) {
-            String pattern = IFNAME_LINKLAYER_MAP.valueAt(i);
+        for (int i = 0; i < KNOWN_PREFIX; i++) {
+            String pattern = IFNAME_PREFIXES[i];
             if (ifname.startsWith(pattern)) {
-                return IFNAME_LINKLAYER_MAP.keyAt(i);
+                return IFNAME_LINKLAYERS[i];
             }
         }
         return IpConnectivityLogClass.UNKNOWN;
     }
 
-    private static final SparseArray<String> IFNAME_LINKLAYER_MAP = new SparseArray<String>();
+    private static final int KNOWN_PREFIX = 7;
+    private static final String[] IFNAME_PREFIXES = new String[KNOWN_PREFIX];
+    private static final int[] IFNAME_LINKLAYERS = new int[KNOWN_PREFIX];
     static {
-        IFNAME_LINKLAYER_MAP.put(IpConnectivityLogClass.CELLULAR, "rmnet");
-        IFNAME_LINKLAYER_MAP.put(IpConnectivityLogClass.WIFI, "wlan");
-        IFNAME_LINKLAYER_MAP.put(IpConnectivityLogClass.BLUETOOTH, "bt-pan");
-        // TODO: rekey to USB
-        IFNAME_LINKLAYER_MAP.put(IpConnectivityLogClass.ETHERNET, "usb");
-        // TODO: add mappings for nan -> WIFI_AWARE and p2p -> WIFI_P2P
+        // Ordered from most likely link layer to least likely.
+        IFNAME_PREFIXES[0] = "rmnet";
+        IFNAME_LINKLAYERS[0] = IpConnectivityLogClass.CELLULAR;
+
+        IFNAME_PREFIXES[1] = "wlan";
+        IFNAME_LINKLAYERS[1] = IpConnectivityLogClass.WIFI;
+
+        IFNAME_PREFIXES[2] = "bt-pan";
+        IFNAME_LINKLAYERS[2] = IpConnectivityLogClass.BLUETOOTH;
+
+        IFNAME_PREFIXES[3] = "p2p";
+        IFNAME_LINKLAYERS[3] = IpConnectivityLogClass.WIFI_P2P;
+
+        IFNAME_PREFIXES[4] = "aware";
+        IFNAME_LINKLAYERS[4] = IpConnectivityLogClass.WIFI_NAN;
+
+        IFNAME_PREFIXES[5] = "eth";
+        IFNAME_LINKLAYERS[5] = IpConnectivityLogClass.ETHERNET;
+
+        IFNAME_PREFIXES[6] = "wpan";
+        IFNAME_LINKLAYERS[6] = IpConnectivityLogClass.LOWPAN;
     }
 }
diff --git a/services/core/java/com/android/server/connectivity/Nat464Xlat.java b/services/core/java/com/android/server/connectivity/Nat464Xlat.java
index b390884..e6585ad 100644
--- a/services/core/java/com/android/server/connectivity/Nat464Xlat.java
+++ b/services/core/java/com/android/server/connectivity/Nat464Xlat.java
@@ -16,36 +16,36 @@
 
 package com.android.server.connectivity;
 
-import java.net.Inet4Address;
-
-import android.content.Context;
 import android.net.InterfaceConfiguration;
 import android.net.ConnectivityManager;
 import android.net.LinkAddress;
 import android.net.LinkProperties;
-import android.net.NetworkAgent;
 import android.net.RouteInfo;
-import android.os.Handler;
-import android.os.Message;
 import android.os.INetworkManagementService;
 import android.os.RemoteException;
 import android.util.Slog;
 
-import com.android.server.net.BaseNetworkObserver;
 import com.android.internal.util.ArrayUtils;
+import com.android.server.net.BaseNetworkObserver;
+
+import java.net.Inet4Address;
+import java.util.Objects;
 
 /**
- * @hide
+ * Class to manage a 464xlat CLAT daemon. Nat464Xlat is not thread safe and should be manipulated
+ * from a consistent and unique thread context. It is the responsibility of ConnectivityService to
+ * call into this class from its own Handler thread.
  *
- * Class to manage a 464xlat CLAT daemon.
+ * @hide
  */
 public class Nat464Xlat extends BaseNetworkObserver {
-    private static final String TAG = "Nat464Xlat";
+    private static final String TAG = Nat464Xlat.class.getSimpleName();
 
     // This must match the interface prefix in clatd.c.
     private static final String CLAT_PREFIX = "v4-";
 
-    // The network types we will start clatd on.
+    // The network types we will start clatd on,
+    // allowing clat only on networks for which we can support IPv6-only.
     private static final int[] NETWORK_TYPES = {
             ConnectivityManager.TYPE_MOBILE,
             ConnectivityManager.TYPE_WIFI,
@@ -54,33 +54,23 @@
 
     private final INetworkManagementService mNMService;
 
-    // ConnectivityService Handler for LinkProperties updates.
-    private final Handler mHandler;
-
     // The network we're running on, and its type.
     private final NetworkAgentInfo mNetwork;
 
-    // Internal state variables.
-    //
-    // The possible states are:
-    //  - Idle: start() not called. Everything is null.
-    //  - Starting: start() called. Interfaces are non-null. isStarted() returns true.
-    //    mIsRunning is false.
-    //  - Running: start() called, and interfaceLinkStateChanged() told us that mIface is up.
-    //    mIsRunning is true.
-    //
-    // Once mIface is non-null and isStarted() is true, methods called by ConnectivityService on
-    // its handler thread must not modify any internal state variables; they are only updated by the
-    // interface observers, called on the notification threads.
+    private enum State {
+        IDLE,       // start() not called. Base iface and stacked iface names are null.
+        STARTING,   // start() called. Base iface and stacked iface names are known.
+        RUNNING,    // start() called, and the stacked iface is known to be up.
+        STOPPING;   // stop() called, this Nat464Xlat is still registered as a network observer for
+                    // the stacked interface.
+    }
+
     private String mBaseIface;
     private String mIface;
-    private boolean mIsRunning;
+    private State mState = State.IDLE;
 
-    public Nat464Xlat(
-            Context context, INetworkManagementService nmService,
-            Handler handler, NetworkAgentInfo nai) {
+    public Nat464Xlat(INetworkManagementService nmService, NetworkAgentInfo nai) {
         mNMService = nmService;
-        mHandler = handler;
         mNetwork = nai;
     }
 
@@ -90,34 +80,112 @@
      * @return true if the network requires clat, false otherwise.
      */
     public static boolean requiresClat(NetworkAgentInfo nai) {
+        // TODO: migrate to NetworkCapabilities.TRANSPORT_*.
         final int netType = nai.networkInfo.getType();
+        final boolean supported = ArrayUtils.contains(NETWORK_TYPES, nai.networkInfo.getType());
+        // TODO: this should also consider if the network is in SUSPENDED state to avoid stopping
+        // clatd in SUSPENDED state.
         final boolean connected = nai.networkInfo.isConnected();
+        // We only run clat on networks that don't have a native IPv4 address.
         final boolean hasIPv4Address =
-                (nai.linkProperties != null) ? nai.linkProperties.hasIPv4Address() : false;
-        // Only support clat on mobile and wifi for now, because these are the only IPv6-only
-        // networks we can connect to.
-        return connected && !hasIPv4Address && ArrayUtils.contains(NETWORK_TYPES, netType);
+                (nai.linkProperties != null) && nai.linkProperties.hasIPv4Address();
+        return supported && connected && !hasIPv4Address;
     }
 
     /**
-     * Determines whether clatd is started. Always true, except a) if start has not yet been called,
-     * or b) if our interface was removed.
+     * @return true if clatd has been started and has not yet stopped.
+     * A true result corresponds to internal states STARTING and RUNNING.
      */
     public boolean isStarted() {
-        return mIface != null;
+        return mState != State.IDLE;
     }
 
     /**
-     * Clears internal state. Must not be called by ConnectivityService.
+     * @return true if clatd has been started but the stacked interface is not yet up.
      */
-    private void clear() {
+    public boolean isStarting() {
+        return mState == State.STARTING;
+    }
+
+    /**
+     * @return true if clatd has been started and the stacked interface is up.
+     */
+    public boolean isRunning() {
+        return mState == State.RUNNING;
+    }
+
+    /**
+     * @return true if clatd has been stopped.
+     */
+    public boolean isStopping() {
+        return mState == State.STOPPING;
+    }
+
+    /**
+     * Start clatd, register this Nat464Xlat as a network observer for the stacked interface,
+     * and set internal state.
+     */
+    private void enterStartingState(String baseIface) {
+        try {
+            mNMService.registerObserver(this);
+        } catch(RemoteException e) {
+            Slog.e(TAG,
+                    "startClat: Can't register interface observer for clat on " + mNetwork.name());
+            return;
+        }
+        try {
+            mNMService.startClatd(baseIface);
+        } catch(RemoteException|IllegalStateException e) {
+            Slog.e(TAG, "Error starting clatd on " + baseIface, e);
+        }
+        mIface = CLAT_PREFIX + baseIface;
+        mBaseIface = baseIface;
+        mState = State.STARTING;
+    }
+
+    /**
+     * Enter running state just after getting confirmation that the stacked interface is up, and
+     * turn ND offload off if on WiFi.
+     */
+    private void enterRunningState() {
+        maybeSetIpv6NdOffload(mBaseIface, false);
+        mState = State.RUNNING;
+    }
+
+    /**
+     * Stop clatd, and turn ND offload on if it had been turned off.
+     */
+    private void enterStoppingState() {
+        if (isRunning()) {
+            maybeSetIpv6NdOffload(mBaseIface, true);
+        }
+
+        try {
+            mNMService.stopClatd(mBaseIface);
+        } catch(RemoteException|IllegalStateException e) {
+            Slog.e(TAG, "Error stopping clatd on " + mBaseIface, e);
+        }
+
+        mState = State.STOPPING;
+    }
+
+    /**
+     * Unregister as a base observer for the stacked interface, and clear internal state.
+     */
+    private void enterIdleState() {
+        try {
+            mNMService.unregisterObserver(this);
+        } catch(RemoteException|IllegalStateException e) {
+            Slog.e(TAG, "Error unregistering clatd observer on " + mBaseIface, e);
+        }
+
         mIface = null;
         mBaseIface = null;
-        mIsRunning = false;
+        mState = State.IDLE;
     }
 
     /**
-     * Starts the clat daemon. Called by ConnectivityService on the handler thread.
+     * Starts the clat daemon.
      */
     public void start() {
         if (isStarted()) {
@@ -130,52 +198,30 @@
             return;
         }
 
-        try {
-            mNMService.registerObserver(this);
-        } catch(RemoteException e) {
-            Slog.e(TAG, "startClat: Can't register interface observer for clat on " + mNetwork);
-            return;
-        }
-
-        mBaseIface = mNetwork.linkProperties.getInterfaceName();
-        if (mBaseIface == null) {
+        String baseIface = mNetwork.linkProperties.getInterfaceName();
+        if (baseIface == null) {
             Slog.e(TAG, "startClat: Can't start clat on null interface");
             return;
         }
-        mIface = CLAT_PREFIX + mBaseIface;
-        // From now on, isStarted() will return true.
-
-        Slog.i(TAG, "Starting clatd on " + mBaseIface);
-        try {
-            mNMService.startClatd(mBaseIface);
-        } catch(RemoteException|IllegalStateException e) {
-            Slog.e(TAG, "Error starting clatd: " + e);
-        }
+        // TODO: should we only do this if mNMService.startClatd() succeeds?
+        Slog.i(TAG, "Starting clatd on " + baseIface);
+        enterStartingState(baseIface);
     }
 
     /**
-     * Stops the clat daemon. Called by ConnectivityService on the handler thread.
+     * Stops the clat daemon.
      */
     public void stop() {
-        if (isStarted()) {
-            Slog.i(TAG, "Stopping clatd");
-            try {
-                mNMService.stopClatd(mBaseIface);
-            } catch(RemoteException|IllegalStateException e) {
-                Slog.e(TAG, "Error stopping clatd: " + e);
-            }
-            // When clatd stops and its interface is deleted, interfaceRemoved() will notify
-            // ConnectivityService and call clear().
-        } else {
-            Slog.e(TAG, "clatd: already stopped");
+        if (!isStarted()) {
+            return;
         }
-    }
+        Slog.i(TAG, "Stopping clatd on " + mBaseIface);
 
-    private void updateConnectivityService(LinkProperties lp) {
-        Message msg = mHandler.obtainMessage(NetworkAgent.EVENT_NETWORK_PROPERTIES_CHANGED, lp);
-        msg.replyTo = mNetwork.messenger;
-        Slog.i(TAG, "sending message to ConnectivityService: " + msg);
-        msg.sendToTarget();
+        boolean wasStarting = isStarting();
+        enterStoppingState();
+        if (wasStarting) {
+            enterIdleState();
+        }
     }
 
     /**
@@ -184,16 +230,19 @@
      * has no idea that 464xlat is running on top of it.
      */
     public void fixupLinkProperties(LinkProperties oldLp) {
-        if (mNetwork.clatd != null &&
-                mIsRunning &&
-                mNetwork.linkProperties != null &&
-                !mNetwork.linkProperties.getAllInterfaceNames().contains(mIface)) {
-            Slog.d(TAG, "clatd running, updating NAI for " + mIface);
-            for (LinkProperties stacked: oldLp.getStackedLinks()) {
-                if (mIface.equals(stacked.getInterfaceName())) {
-                    mNetwork.linkProperties.addStackedLink(stacked);
-                    break;
-                }
+        if (!isRunning()) {
+            return;
+        }
+        LinkProperties lp = mNetwork.linkProperties;
+        if (lp == null || lp.getAllInterfaceNames().contains(mIface)) {
+            return;
+        }
+
+        Slog.d(TAG, "clatd running, updating NAI for " + mIface);
+        for (LinkProperties stacked: oldLp.getStackedLinks()) {
+            if (Objects.equals(mIface, stacked.getInterfaceName())) {
+                lp.addStackedLink(stacked);
+                return;
             }
         }
     }
@@ -227,6 +276,7 @@
     }
 
     private void maybeSetIpv6NdOffload(String iface, boolean on) {
+        // TODO: migrate to NetworkCapabilities.TRANSPORT_*.
         if (mNetwork.networkInfo.getType() != ConnectivityManager.TYPE_WIFI) {
             return;
         }
@@ -238,52 +288,63 @@
         }
     }
 
+    /**
+     * Adds stacked link on base link and transitions to RUNNING state.
+     */
+    private void handleInterfaceLinkStateChanged(String iface, boolean up) {
+        if (!isStarting() || !up || !Objects.equals(mIface, iface)) {
+            return;
+        }
+
+        LinkAddress clatAddress = getLinkAddress(iface);
+        if (clatAddress == null) {
+            Slog.e(TAG, "clatAddress was null for stacked iface " + iface);
+            return;
+        }
+
+        Slog.i(TAG, String.format("interface %s is up, adding stacked link %s on top of %s",
+                mIface, mIface, mBaseIface));
+        enterRunningState();
+        LinkProperties lp = new LinkProperties(mNetwork.linkProperties);
+        lp.addStackedLink(makeLinkProperties(clatAddress));
+        mNetwork.connService().handleUpdateLinkProperties(mNetwork, lp);
+    }
+
+    /**
+     * Removes stacked link on base link and transitions to IDLE state.
+     */
+    private void handleInterfaceRemoved(String iface) {
+        if (!Objects.equals(mIface, iface)) {
+            return;
+        }
+        if (!isRunning() && !isStopping()) {
+            return;
+        }
+
+        Slog.i(TAG, "interface " + iface + " removed");
+        if (!isStopping()) {
+            // Ensure clatd is stopped if stop() has not been called: this likely means that clatd
+            // has crashed.
+            enterStoppingState();
+        }
+        enterIdleState();
+        LinkProperties lp = new LinkProperties(mNetwork.linkProperties);
+        lp.removeStackedLink(iface);
+        mNetwork.connService().handleUpdateLinkProperties(mNetwork, lp);
+    }
+
     @Override
     public void interfaceLinkStateChanged(String iface, boolean up) {
-        // Called by the InterfaceObserver on its own thread, so can race with stop().
-        if (isStarted() && up && mIface.equals(iface)) {
-            Slog.i(TAG, "interface " + iface + " is up, mIsRunning " + mIsRunning + "->true");
-
-            if (!mIsRunning) {
-                LinkAddress clatAddress = getLinkAddress(iface);
-                if (clatAddress == null) {
-                    return;
-                }
-                mIsRunning = true;
-                maybeSetIpv6NdOffload(mBaseIface, false);
-                LinkProperties lp = new LinkProperties(mNetwork.linkProperties);
-                lp.addStackedLink(makeLinkProperties(clatAddress));
-                Slog.i(TAG, "Adding stacked link " + mIface + " on top of " + mBaseIface);
-                updateConnectivityService(lp);
-            }
-        }
+        mNetwork.handler().post(() -> { handleInterfaceLinkStateChanged(iface, up); });
     }
 
     @Override
     public void interfaceRemoved(String iface) {
-        if (isStarted() && mIface.equals(iface)) {
-            Slog.i(TAG, "interface " + iface + " removed, mIsRunning " + mIsRunning + "->false");
+        mNetwork.handler().post(() -> { handleInterfaceRemoved(iface); });
+    }
 
-            if (mIsRunning) {
-                // The interface going away likely means clatd has crashed. Ask netd to stop it,
-                // because otherwise when we try to start it again on the same base interface netd
-                // will complain that it's already started.
-                //
-                // Note that this method can be called by the interface observer at the same time
-                // that ConnectivityService calls stop(). In this case, the second call to
-                // stopClatd() will just throw IllegalStateException, which we'll ignore.
-                try {
-                    mNMService.unregisterObserver(this);
-                    mNMService.stopClatd(mBaseIface);
-                } catch (RemoteException|IllegalStateException e) {
-                    // Well, we tried.
-                }
-                maybeSetIpv6NdOffload(mBaseIface, true);
-                LinkProperties lp = new LinkProperties(mNetwork.linkProperties);
-                lp.removeStackedLink(mIface);
-                clear();
-                updateConnectivityService(lp);
-            }
-        }
+    @Override
+    public String toString() {
+        return "mBaseIface: " + mBaseIface + ", mIface: " + mIface + ", mState: " + mState;
     }
 }
diff --git a/services/core/java/com/android/server/connectivity/NetdEventListenerService.java b/services/core/java/com/android/server/connectivity/NetdEventListenerService.java
index 4094083..25dba35 100644
--- a/services/core/java/com/android/server/connectivity/NetdEventListenerService.java
+++ b/services/core/java/com/android/server/connectivity/NetdEventListenerService.java
@@ -16,6 +16,8 @@
 
 package com.android.server.connectivity;
 
+import static android.util.TimeUtils.NANOS_PER_MS;
+
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.INetdEventCallback;
@@ -25,9 +27,12 @@
 import android.net.metrics.DnsEvent;
 import android.net.metrics.INetdEventListener;
 import android.net.metrics.IpConnectivityLog;
+import android.net.metrics.WakeupEvent;
+import android.net.metrics.WakeupStats;
 import android.os.RemoteException;
 import android.text.format.DateUtils;
 import android.util.Log;
+import android.util.ArrayMap;
 import android.util.SparseArray;
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
@@ -59,12 +64,28 @@
     private static final int CONNECT_LATENCY_FILL_RATE    = 15 * (int) DateUtils.SECOND_IN_MILLIS;
     private static final int CONNECT_LATENCY_MAXIMUM_RECORDS = 20000;
 
+    @VisibleForTesting
+    static final int WAKEUP_EVENT_BUFFER_LENGTH = 1024;
+    // TODO: dedup this String constant with the one used in
+    // ConnectivityService#wakeupModifyInterface().
+    @VisibleForTesting
+    static final String WAKEUP_EVENT_IFACE_PREFIX = "iface:";
+
     // Sparse arrays of DNS and connect events, grouped by net id.
     @GuardedBy("this")
     private final SparseArray<DnsEvent> mDnsEvents = new SparseArray<>();
     @GuardedBy("this")
     private final SparseArray<ConnectStats> mConnectEvents = new SparseArray<>();
 
+    // Array of aggregated wakeup event stats, grouped by interface name.
+    @GuardedBy("this")
+    private final ArrayMap<String, WakeupStats> mWakeupStats = new ArrayMap<>();
+    // Ring buffer array for storing packet wake up events sent by Netd.
+    @GuardedBy("this")
+    private final WakeupEvent[] mWakeupEvents = new WakeupEvent[WAKEUP_EVENT_BUFFER_LENGTH];
+    @GuardedBy("this")
+    private long mWakeupEventCursor = 0;
+
     private final ConnectivityManager mCm;
 
     @GuardedBy("this")
@@ -137,11 +158,62 @@
 
     @Override
     public synchronized void onWakeupEvent(String prefix, int uid, int gid, long timestampNs) {
+        maybeVerboseLog("onWakeupEvent(%s, %d, %d, %sns)", prefix, uid, gid, timestampNs);
+
+        // TODO: add ip protocol and port
+
+        String iface = prefix.replaceFirst(WAKEUP_EVENT_IFACE_PREFIX, "");
+        final long timestampMs;
+        if (timestampNs > 0) {
+            timestampMs = timestampNs / NANOS_PER_MS;
+        } else {
+            timestampMs = System.currentTimeMillis();
+        }
+
+        addWakeupEvent(iface, timestampMs, uid);
+    }
+
+    @GuardedBy("this")
+    private void addWakeupEvent(String iface, long timestampMs, int uid) {
+        int index = wakeupEventIndex(mWakeupEventCursor);
+        mWakeupEventCursor++;
+        WakeupEvent event = new WakeupEvent();
+        event.iface = iface;
+        event.timestampMs = timestampMs;
+        event.uid = uid;
+        mWakeupEvents[index] = event;
+        WakeupStats stats = mWakeupStats.get(iface);
+        if (stats == null) {
+            stats = new WakeupStats(iface);
+            mWakeupStats.put(iface, stats);
+        }
+        stats.countEvent(event);
+    }
+
+    @GuardedBy("this")
+    private WakeupEvent[] getWakeupEvents() {
+        int length = (int) Math.min(mWakeupEventCursor, (long) mWakeupEvents.length);
+        WakeupEvent[] out = new WakeupEvent[length];
+        // Reverse iteration from youngest event to oldest event.
+        long inCursor = mWakeupEventCursor - 1;
+        int outIdx = out.length - 1;
+        while (outIdx >= 0) {
+            out[outIdx--] = mWakeupEvents[wakeupEventIndex(inCursor--)];
+        }
+        return out;
+    }
+
+    private static int wakeupEventIndex(long cursor) {
+        return (int) Math.abs(cursor % WAKEUP_EVENT_BUFFER_LENGTH);
     }
 
     public synchronized void flushStatistics(List<IpConnectivityEvent> events) {
         flushProtos(events, mConnectEvents, IpConnectivityEventBuilder::toProto);
         flushProtos(events, mDnsEvents, IpConnectivityEventBuilder::toProto);
+        for (int i = 0; i < mWakeupStats.size(); i++) {
+            events.add(IpConnectivityEventBuilder.toProto(mWakeupStats.valueAt(i)));
+        }
+        mWakeupStats.clear();
     }
 
     public synchronized void dump(PrintWriter writer) {
@@ -153,13 +225,22 @@
     }
 
     public synchronized void list(PrintWriter pw) {
-        listEvents(pw, mConnectEvents, (x) -> x);
-        listEvents(pw, mDnsEvents, (x) -> x);
+        listEvents(pw, mConnectEvents, (x) -> x, "\n");
+        listEvents(pw, mDnsEvents, (x) -> x, "\n");
+        for (int i = 0; i < mWakeupStats.size(); i++) {
+            pw.println(mWakeupStats.valueAt(i));
+        }
+        for (WakeupEvent wakeup : getWakeupEvents()) {
+            pw.println(wakeup);
+        }
     }
 
     public synchronized void listAsProtos(PrintWriter pw) {
-        listEvents(pw, mConnectEvents, IpConnectivityEventBuilder::toProto);
-        listEvents(pw, mDnsEvents, IpConnectivityEventBuilder::toProto);
+        listEvents(pw, mConnectEvents, IpConnectivityEventBuilder::toProto, "");
+        listEvents(pw, mDnsEvents, IpConnectivityEventBuilder::toProto, "");
+        for (int i = 0; i < mWakeupStats.size(); i++) {
+            pw.print(IpConnectivityEventBuilder.toProto(mWakeupStats.valueAt(i)));
+        }
     }
 
     private static <T> void flushProtos(List<IpConnectivityEvent> out, SparseArray<T> in,
@@ -170,10 +251,13 @@
         in.clear();
     }
 
-    public static <T> void listEvents(
-            PrintWriter pw, SparseArray<T> events, Function<T, Object> mapper) {
+    private static <T> void listEvents(
+            PrintWriter pw, SparseArray<T> events, Function<T, Object> mapper, String separator) {
+        // Proto derived Classes have toString method that adds a \n at the end.
+        // Let the caller control that by passing in the line separator explicitly.
         for (int i = 0; i < events.size(); i++) {
-            pw.println(mapper.apply(events.valueAt(i)).toString());
+            pw.print(mapper.apply(events.valueAt(i)));
+            pw.print(separator);
         }
     }
 
diff --git a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
index 2a618bc..e96f4b0 100644
--- a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
+++ b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
@@ -27,7 +27,9 @@
 import android.net.NetworkRequest;
 import android.net.NetworkState;
 import android.os.Handler;
+import android.os.INetworkManagementService;
 import android.os.Messenger;
+import android.os.RemoteException;
 import android.os.SystemClock;
 import android.util.Log;
 import android.util.SparseArray;
@@ -268,6 +270,14 @@
         networkMisc = misc;
     }
 
+    public ConnectivityService connService() {
+        return mConnService;
+    }
+
+    public Handler handler() {
+        return mHandler;
+    }
+
     // Functions for manipulating the requests satisfied by this network.
     //
     // These functions must only called on ConnectivityService's main thread.
@@ -551,6 +561,32 @@
         for (LingerTimer timer : mLingerTimers) { pw.println(timer); }
     }
 
+    public void updateClat(INetworkManagementService netd) {
+        if (Nat464Xlat.requiresClat(this)) {
+            maybeStartClat(netd);
+        } else {
+            maybeStopClat();
+        }
+    }
+
+    /** Ensure clat has started for this network. */
+    public void maybeStartClat(INetworkManagementService netd) {
+        if (clatd != null && clatd.isStarted()) {
+            return;
+        }
+        clatd = new Nat464Xlat(netd, this);
+        clatd.start();
+    }
+
+    /** Ensure clat has stopped for this network. */
+    public void maybeStopClat() {
+        if (clatd == null) {
+            return;
+        }
+        clatd.stop();
+        clatd = null;
+    }
+
     public String toString() {
         return "NetworkAgentInfo{ ni{" + networkInfo + "}  " +
                 "network{" + network + "}  nethandle{" + network.getNetworkHandle() + "}  " +
@@ -562,13 +598,13 @@
                 "acceptUnvalidated{" + networkMisc.acceptUnvalidated + "} " +
                 "everCaptivePortalDetected{" + everCaptivePortalDetected + "} " +
                 "lastCaptivePortalDetected{" + lastCaptivePortalDetected + "} " +
+                "clat{" + clatd + "} " +
                 "}";
     }
 
     public String name() {
         return "NetworkAgentInfo [" + networkInfo.getTypeName() + " (" +
-                networkInfo.getSubtypeName() + ") - " +
-                (network == null ? "null" : network.toString()) + "]";
+                networkInfo.getSubtypeName() + ") - " + Objects.toString(network) + "]";
     }
 
     // Enables sorting in descending order of score.
diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
index 0ee2a41..d3a9354 100644
--- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java
+++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
@@ -29,6 +29,7 @@
 import android.net.CaptivePortal;
 import android.net.ConnectivityManager;
 import android.net.ICaptivePortal;
+import android.net.Network;
 import android.net.NetworkRequest;
 import android.net.ProxyInfo;
 import android.net.TrafficStats;
@@ -71,6 +72,9 @@
 import java.net.URL;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Random;
 import java.util.concurrent.CountDownLatch;
@@ -95,7 +99,7 @@
             "http://play.googleapis.com/generate_204";
     private static final String DEFAULT_USER_AGENT    = "Mozilla/5.0 (X11; Linux x86_64) "
                                                       + "AppleWebKit/537.36 (KHTML, like Gecko) "
-                                                      + "Chrome/52.0.2743.82 Safari/537.36";
+                                                      + "Chrome/60.0.3112.32 Safari/537.36";
 
     private static final int SOCKET_TIMEOUT_MS = 10000;
     private static final int PROBE_TIMEOUT_MS  = 3000;
@@ -228,6 +232,7 @@
     private final Context mContext;
     private final Handler mConnectivityServiceHandler;
     private final NetworkAgentInfo mNetworkAgentInfo;
+    private final Network mNetwork;
     private final int mNetId;
     private final TelephonyManager mTelephonyManager;
     private final WifiManager mWifiManager;
@@ -286,7 +291,8 @@
         mMetricsLog = logger;
         mConnectivityServiceHandler = handler;
         mNetworkAgentInfo = networkAgentInfo;
-        mNetId = mNetworkAgentInfo.network.netId;
+        mNetwork = new OneAddressPerFamilyNetwork(networkAgentInfo.network);
+        mNetId = mNetwork.netId;
         mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
         mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
         mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
@@ -415,7 +421,7 @@
             maybeLogEvaluationResult(
                     networkEventType(validationStage(), EvaluationResult.VALIDATED));
             mConnectivityServiceHandler.sendMessage(obtainMessage(EVENT_NETWORK_TESTED,
-                    NETWORK_TEST_RESULT_VALID, mNetworkAgentInfo.network.netId, null));
+                    NETWORK_TEST_RESULT_VALID, mNetId, null));
             mValidations++;
         }
 
@@ -440,7 +446,8 @@
                 case CMD_LAUNCH_CAPTIVE_PORTAL_APP:
                     final Intent intent = new Intent(
                             ConnectivityManager.ACTION_CAPTIVE_PORTAL_SIGN_IN);
-                    intent.putExtra(ConnectivityManager.EXTRA_NETWORK, mNetworkAgentInfo.network);
+                    // OneAddressPerFamilyNetwork is not parcelable across processes.
+                    intent.putExtra(ConnectivityManager.EXTRA_NETWORK, new Network(mNetwork));
                     intent.putExtra(ConnectivityManager.EXTRA_CAPTIVE_PORTAL,
                             new CaptivePortal(new ICaptivePortal.Stub() {
                                 @Override
@@ -468,8 +475,7 @@
 
         @Override
         public void exit() {
-            Message message = obtainMessage(EVENT_PROVISIONING_NOTIFICATION, 0,
-                    mNetworkAgentInfo.network.netId, null);
+            Message message = obtainMessage(EVENT_PROVISIONING_NOTIFICATION, 0, mNetId, null);
             mConnectivityServiceHandler.sendMessage(message);
         }
     }
@@ -623,7 +629,7 @@
         CustomIntentReceiver(String action, int token, int what) {
             mToken = token;
             mWhat = what;
-            mAction = action + "_" + mNetworkAgentInfo.network.netId + "_" + token;
+            mAction = action + "_" + mNetId + "_" + token;
             mContext.registerReceiver(this, new IntentFilter(mAction));
         }
         public PendingIntent getPendingIntent() {
@@ -659,8 +665,7 @@
                         CMD_LAUNCH_CAPTIVE_PORTAL_APP);
             }
             // Display the sign in notification.
-            Message message = obtainMessage(EVENT_PROVISIONING_NOTIFICATION, 1,
-                    mNetworkAgentInfo.network.netId,
+            Message message = obtainMessage(EVENT_PROVISIONING_NOTIFICATION, 1, mNetId,
                     mLaunchCaptivePortalAppBroadcastReceiver.getPendingIntent());
             mConnectivityServiceHandler.sendMessage(message);
             // Retest for captive portal occasionally.
@@ -675,6 +680,31 @@
         }
     }
 
+    // Limits the list of IP addresses returned by getAllByName or tried by openConnection to at
+    // most one per address family. This ensures we only wait up to 20 seconds for TCP connections
+    // to complete, regardless of how many IP addresses a host has.
+    private static class OneAddressPerFamilyNetwork extends Network {
+        public OneAddressPerFamilyNetwork(Network network) {
+            super(network);
+        }
+
+        @Override
+        public InetAddress[] getAllByName(String host) throws UnknownHostException {
+            List<InetAddress> addrs = Arrays.asList(super.getAllByName(host));
+
+            // Ensure the address family of the first address is tried first.
+            LinkedHashMap<Class, InetAddress> addressByFamily = new LinkedHashMap<>();
+            addressByFamily.put(addrs.get(0).getClass(), addrs.get(0));
+            Collections.shuffle(addrs);
+
+            for (InetAddress addr : addrs) {
+                addressByFamily.put(addr.getClass(), addr);
+            }
+
+            return addressByFamily.values().toArray(new InetAddress[addressByFamily.size()]);
+        }
+    }
+
     private static String getCaptivePortalServerHttpsUrl(Context context) {
         return getSetting(context, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL, DEFAULT_HTTPS_URL);
     }
@@ -805,7 +835,7 @@
         int result;
         String connectInfo;
         try {
-            InetAddress[] addresses = mNetworkAgentInfo.network.getAllByName(host);
+            InetAddress[] addresses = mNetwork.getAllByName(host);
             StringBuffer buffer = new StringBuffer();
             for (InetAddress address : addresses) {
                 buffer.append(',').append(address.getHostAddress());
@@ -834,7 +864,7 @@
         final Stopwatch probeTimer = new Stopwatch().start();
         final int oldTag = TrafficStats.getAndSetThreadStatsTag(TrafficStats.TAG_SYSTEM_PROBE);
         try {
-            urlConnection = (HttpURLConnection) mNetworkAgentInfo.network.openConnection(url);
+            urlConnection = (HttpURLConnection) mNetwork.openConnection(url);
             urlConnection.setInstanceFollowRedirects(probeType == ValidationProbeEvent.PROBE_PAC);
             urlConnection.setConnectTimeout(SOCKET_TIMEOUT_MS);
             urlConnection.setReadTimeout(SOCKET_TIMEOUT_MS);
diff --git a/services/core/java/com/android/server/connectivity/OWNERS b/services/core/java/com/android/server/connectivity/OWNERS
new file mode 100644
index 0000000..74f39a1
--- /dev/null
+++ b/services/core/java/com/android/server/connectivity/OWNERS
@@ -0,0 +1,5 @@
+set noparent
+
+ek@google.com
+hugobenichi@google.com
+lorenzo@google.com
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java
index 2b4f4e6..0993f42 100644
--- a/services/core/java/com/android/server/connectivity/Tethering.java
+++ b/services/core/java/com/android/server/connectivity/Tethering.java
@@ -49,6 +49,7 @@
 import android.net.INetworkPolicyManager;
 import android.net.INetworkStatsService;
 import android.net.IpPrefix;
+import android.net.LinkAddress;
 import android.net.LinkProperties;
 import android.net.Network;
 import android.net.NetworkCapabilities;
@@ -1196,6 +1197,7 @@
         // to tear itself down.
         private final ArrayList<TetherInterfaceStateMachine> mNotifyList;
         private final IPv6TetheringCoordinator mIPv6TetheringCoordinator;
+        private final OffloadWrapper mOffload;
 
         private static final int UPSTREAM_SETTLE_TIME_MS     = 10000;
 
@@ -1220,33 +1222,11 @@
 
             mNotifyList = new ArrayList<>();
             mIPv6TetheringCoordinator = new IPv6TetheringCoordinator(mNotifyList, mLog);
+            mOffload = new OffloadWrapper();
 
             setInitialState(mInitialState);
         }
 
-        private void startOffloadController() {
-            mOffloadController.start();
-            sendOffloadExemptPrefixes();
-        }
-
-        private void sendOffloadExemptPrefixes() {
-            sendOffloadExemptPrefixes(mUpstreamNetworkMonitor.getLocalPrefixes());
-        }
-
-        private void sendOffloadExemptPrefixes(Set<IpPrefix> localPrefixes) {
-            // Add in well-known minimum set.
-            PrefixUtils.addNonForwardablePrefixes(localPrefixes);
-            // Add tragically hardcoded prefixes.
-            localPrefixes.add(PrefixUtils.DEFAULT_WIFI_P2P_PREFIX);
-
-            // Add prefixes for all downstreams, regardless of IP serving mode.
-            for (TetherInterfaceStateMachine tism : mNotifyList) {
-                localPrefixes.addAll(PrefixUtils.localPrefixesFrom(tism.linkProperties()));
-            }
-
-            mOffloadController.setLocalPrefixes(localPrefixes);
-        }
-
         class InitialState extends State {
             @Override
             public boolean processMessage(Message message) {
@@ -1335,6 +1315,7 @@
                     sendMessageDelayed(CMD_RETRY_UPSTREAM, UPSTREAM_SETTLE_TIME_MS);
                 }
             }
+            mUpstreamNetworkMonitor.setCurrentUpstream((ns != null) ? ns.network : null);
             setUpstreamNetwork(ns);
         }
 
@@ -1404,7 +1385,7 @@
 
         protected void handleNewUpstreamNetworkState(NetworkState ns) {
             mIPv6TetheringCoordinator.updateUpstreamNetworkState(ns);
-            mOffloadController.setUpstreamLinkProperties((ns != null) ? ns.linkProperties : null);
+            mOffload.updateUpstreamNetworkState(ns);
         }
 
         private void handleInterfaceServingStateActive(int mode, TetherInterfaceStateMachine who) {
@@ -1414,9 +1395,12 @@
             }
 
             if (mode == IControlsTethering.STATE_TETHERED) {
+                // No need to notify OffloadController just yet as there are no
+                // "offload-able" prefixes to pass along. This will handled
+                // when the TISM informs Tethering of its LinkProperties.
                 mForwardedDownstreams.add(who);
             } else {
-                mOffloadController.removeDownstreamInterface(who.interfaceName());
+                mOffload.excludeDownstreamInterface(who.interfaceName());
                 mForwardedDownstreams.remove(who);
             }
 
@@ -1441,7 +1425,7 @@
         private void handleInterfaceServingStateInactive(TetherInterfaceStateMachine who) {
             mNotifyList.remove(who);
             mIPv6TetheringCoordinator.removeActiveDownstream(who);
-            mOffloadController.removeDownstreamInterface(who.interfaceName());
+            mOffload.excludeDownstreamInterface(who.interfaceName());
             mForwardedDownstreams.remove(who);
 
             // If this is a Wi-Fi interface, tell WifiManager of any errors.
@@ -1455,7 +1439,7 @@
 
         private void handleUpstreamNetworkMonitorCallback(int arg1, Object o) {
             if (arg1 == UpstreamNetworkMonitor.NOTIFY_LOCAL_PREFIXES) {
-                sendOffloadExemptPrefixes((Set<IpPrefix>) o);
+                mOffload.sendOffloadExemptPrefixes((Set<IpPrefix>) o);
                 return;
             }
 
@@ -1525,7 +1509,7 @@
                 // TODO: De-duplicate with updateUpstreamWanted() below.
                 if (upstreamWanted()) {
                     mUpstreamWanted = true;
-                    startOffloadController();
+                    mOffload.start();
                     chooseUpstreamType(true);
                     mTryCell = false;
                 }
@@ -1533,7 +1517,7 @@
 
             @Override
             public void exit() {
-                mOffloadController.stop();
+                mOffload.stop();
                 mUpstreamNetworkMonitor.stop();
                 mSimChange.stopListening();
                 notifyDownstreamsOfNewUpstreamIface(null);
@@ -1545,9 +1529,9 @@
                 mUpstreamWanted = upstreamWanted();
                 if (mUpstreamWanted != previousUpstreamWanted) {
                     if (mUpstreamWanted) {
-                        startOffloadController();
+                        mOffload.start();
                     } else {
-                        mOffloadController.stop();
+                        mOffload.stop();
                     }
                 }
                 return previousUpstreamWanted;
@@ -1602,12 +1586,9 @@
                     case EVENT_IFACE_UPDATE_LINKPROPERTIES: {
                         final LinkProperties newLp = (LinkProperties) message.obj;
                         if (message.arg1 == IControlsTethering.STATE_TETHERED) {
-                            mOffloadController.notifyDownstreamLinkProperties(newLp);
+                            mOffload.updateDownstreamLinkProperties(newLp);
                         } else {
-                            mOffloadController.removeDownstreamInterface(newLp.getInterfaceName());
-                            // Another interface might be in local-only hotspot mode;
-                            // resend all local prefixes to the OffloadController.
-                            sendOffloadExemptPrefixes();
+                            mOffload.excludeDownstreamInterface(newLp.getInterfaceName());
                         }
                         break;
                     }
@@ -1722,6 +1703,82 @@
                 } catch (Exception e) {}
             }
         }
+
+        // A wrapper class to handle multiple situations where several calls to
+        // the OffloadController need to happen together.
+        //
+        // TODO: This suggests that the interface between OffloadController and
+        // Tethering is in need of improvement. Refactor these calls into the
+        // OffloadController implementation.
+        class OffloadWrapper {
+            public void start() {
+                mOffloadController.start();
+                sendOffloadExemptPrefixes();
+            }
+
+            public void stop() {
+                mOffloadController.stop();
+            }
+
+            public void updateUpstreamNetworkState(NetworkState ns) {
+                mOffloadController.setUpstreamLinkProperties(
+                        (ns != null) ? ns.linkProperties : null);
+            }
+
+            public void updateDownstreamLinkProperties(LinkProperties newLp) {
+                // Update the list of offload-exempt prefixes before adding
+                // new prefixes on downstream interfaces to the offload HAL.
+                sendOffloadExemptPrefixes();
+                mOffloadController.notifyDownstreamLinkProperties(newLp);
+            }
+
+            public void excludeDownstreamInterface(String ifname) {
+                // This and other interfaces may be in local-only hotspot mode;
+                // resend all local prefixes to the OffloadController.
+                sendOffloadExemptPrefixes();
+                mOffloadController.removeDownstreamInterface(ifname);
+            }
+
+            public void sendOffloadExemptPrefixes() {
+                sendOffloadExemptPrefixes(mUpstreamNetworkMonitor.getLocalPrefixes());
+            }
+
+            public void sendOffloadExemptPrefixes(final Set<IpPrefix> localPrefixes) {
+                // Add in well-known minimum set.
+                PrefixUtils.addNonForwardablePrefixes(localPrefixes);
+                // Add tragically hardcoded prefixes.
+                localPrefixes.add(PrefixUtils.DEFAULT_WIFI_P2P_PREFIX);
+
+                // Maybe add prefixes or addresses for downstreams, depending on
+                // the IP serving mode of each.
+                for (TetherInterfaceStateMachine tism : mNotifyList) {
+                    final LinkProperties lp = tism.linkProperties();
+
+                    switch (tism.servingMode()) {
+                        case IControlsTethering.STATE_UNAVAILABLE:
+                        case IControlsTethering.STATE_AVAILABLE:
+                            // No usable LinkProperties in these states.
+                            continue;
+                        case IControlsTethering.STATE_TETHERED:
+                            // Only add IPv4 /32 and IPv6 /128 prefixes. The
+                            // directly-connected prefixes will be sent as
+                            // downstream "offload-able" prefixes.
+                            for (LinkAddress addr : lp.getAllLinkAddresses()) {
+                                final InetAddress ip = addr.getAddress();
+                                if (ip.isLinkLocalAddress()) continue;
+                                localPrefixes.add(PrefixUtils.ipAddressAsPrefix(ip));
+                            }
+                            break;
+                        case IControlsTethering.STATE_LOCAL_ONLY:
+                            // Add prefixes covering all local IPs.
+                            localPrefixes.addAll(PrefixUtils.localPrefixesFrom(lp));
+                            break;
+                    }
+                }
+
+                mOffloadController.setLocalPrefixes(localPrefixes);
+            }
+        }
     }
 
     @Override
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index 258e4d6..d51e1f7 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -36,6 +36,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
+import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ResolveInfo;
@@ -56,7 +57,10 @@
 import android.net.RouteInfo;
 import android.net.UidRange;
 import android.net.Uri;
+import android.net.VpnService;
 import android.os.Binder;
+import android.os.Build.VERSION_CODES;
+import android.os.Bundle;
 import android.os.FileUtils;
 import android.os.IBinder;
 import android.os.INetworkManagementService;
@@ -296,6 +300,56 @@
     }
 
     /**
+     * Checks if a VPN app supports always-on mode.
+     *
+     * In order to support the always-on feature, an app has to
+     * <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.
+     * </ul>
+     *
+     * @param packageName the canonical package name of the VPN app
+     * @return {@code true} if and only if the VPN app exists and supports always-on mode
+     */
+    public boolean isAlwaysOnPackageSupported(String packageName) {
+        enforceSettingsPermission();
+
+        if (packageName == null) {
+            return false;
+        }
+
+        PackageManager pm = mContext.getPackageManager();
+        ApplicationInfo appInfo = null;
+        try {
+            appInfo = pm.getApplicationInfoAsUser(packageName, 0 /*flags*/, mUserHandle);
+        } catch (NameNotFoundException unused) {
+            Log.w(TAG, "Can't find \"" + packageName + "\" when checking always-on support");
+        }
+        if (appInfo == null || appInfo.targetSdkVersion < VERSION_CODES.N) {
+            return false;
+        }
+
+        final Intent intent = new Intent(VpnConfig.SERVICE_INTERFACE);
+        intent.setPackage(packageName);
+        List<ResolveInfo> services =
+                pm.queryIntentServicesAsUser(intent, PackageManager.GET_META_DATA, mUserHandle);
+        if (services == null || services.size() == 0) {
+            return false;
+        }
+
+        for (ResolveInfo rInfo : services) {
+            final Bundle metaData = rInfo.serviceInfo.metaData;
+            if (metaData != null &&
+                    !metaData.getBoolean(VpnService.SERVICE_META_DATA_SUPPORTS_ALWAYS_ON, true)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
      * Configures an always-on VPN connection through a specific application.
      * This connection is automatically granted and persisted after a reboot.
      *
@@ -303,6 +357,10 @@
      *    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}.
+     *
      * @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.
      * @return {@code true} if the package has been set as always-on, {@code false} otherwise.
@@ -443,6 +501,11 @@
             if (alwaysOnPackage == null) {
                 return true;
             }
+            // Remove always-on VPN if it's not supported.
+            if (!isAlwaysOnPackageSupported(alwaysOnPackage)) {
+                setAlwaysOnPackage(null, false);
+                return false;
+            }
             // Skip if the service is already established. This isn't bulletproof: it's not bound
             // until after establish(), so if it's mid-setup onStartCommand will be sent twice,
             // which may restart the connection.
@@ -1231,6 +1294,11 @@
                 "Unauthorized Caller");
     }
 
+    private void enforceSettingsPermission() {
+        mContext.enforceCallingOrSelfPermission(Manifest.permission.NETWORK_SETTINGS,
+                "Unauthorized Caller");
+    }
+
     private class Connection implements ServiceConnection {
         private IBinder mService;
 
diff --git a/services/core/java/com/android/server/connectivity/tethering/OffloadController.java b/services/core/java/com/android/server/connectivity/tethering/OffloadController.java
index 1a5ff77..cff216c 100644
--- a/services/core/java/com/android/server/connectivity/tethering/OffloadController.java
+++ b/services/core/java/com/android/server/connectivity/tethering/OffloadController.java
@@ -17,7 +17,9 @@
 package com.android.server.connectivity.tethering;
 
 import static android.net.NetworkStats.SET_DEFAULT;
+import static android.net.NetworkStats.STATS_PER_UID;
 import static android.net.NetworkStats.TAG_NONE;
+import static android.net.NetworkStats.UID_ALL;
 import static android.net.TrafficStats.UID_TETHERING;
 import static android.provider.Settings.Global.TETHER_OFFLOAD_DISABLED;
 
@@ -28,25 +30,36 @@
 import android.net.LinkProperties;
 import android.net.NetworkStats;
 import android.net.RouteInfo;
+import android.net.netlink.ConntrackMessage;
+import android.net.netlink.NetlinkConstants;
+import android.net.netlink.NetlinkSocket;
+import android.net.util.IpUtils;
 import android.net.util.SharedLog;
 import android.os.Handler;
+import android.os.Looper;
 import android.os.INetworkManagementService;
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.provider.Settings;
+import android.system.ErrnoException;
+import android.system.OsConstants;
 import android.text.TextUtils;
 
 import com.android.internal.util.IndentingPrintWriter;
+import com.android.server.connectivity.tethering.OffloadHardwareInterface.ForwardedStats;
 
 import java.net.Inet4Address;
 import java.net.Inet6Address;
 import java.net.InetAddress;
 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.Objects;
 import java.util.Set;
-import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -57,13 +70,19 @@
  */
 public class OffloadController {
     private static final String TAG = OffloadController.class.getSimpleName();
+    private static final boolean DBG = false;
+    private static final String ANYIP = "0.0.0.0";
+    private static final ForwardedStats EMPTY_STATS = new ForwardedStats();
 
-    private static final int STATS_FETCH_TIMEOUT_MS = 1000;
+    private static enum UpdateType { IF_NEEDED, FORCE };
 
     private final Handler mHandler;
     private final OffloadHardwareInterface mHwInterface;
     private final ContentResolver mContentResolver;
+    private final INetworkManagementService mNms;
+    private final ITetheringStatsProvider mStatsProvider;
     private final SharedLog mLog;
+    private final HashMap<String, LinkProperties> mDownstreams;
     private boolean mConfigInitialized;
     private boolean mControlInitialized;
     private LinkProperties mUpstreamLinkProperties;
@@ -76,32 +95,45 @@
     private Set<String> mLastLocalPrefixStrs;
 
     // Maps upstream interface names to offloaded traffic statistics.
-    private HashMap<String, OffloadHardwareInterface.ForwardedStats>
-            mForwardedStats = new HashMap<>();
+    // Always contains the latest value received from the hardware for each interface, regardless of
+    // whether offload is currently running on that interface.
+    private ConcurrentHashMap<String, ForwardedStats> mForwardedStats =
+            new ConcurrentHashMap<>(16, 0.75F, 1);
+
+    // Maps upstream interface names to interface quotas.
+    // Always contains the latest value received from the framework for each interface, regardless
+    // of whether offload is currently running (or is even supported) on that interface. Only
+    // includes upstream interfaces that have a quota set.
+    private HashMap<String, Long> mInterfaceQuotas = new HashMap<>();
+
+    private int mNatUpdateCallbacksReceived;
+    private int mNatUpdateNetlinkErrors;
 
     public OffloadController(Handler h, OffloadHardwareInterface hwi,
             ContentResolver contentResolver, INetworkManagementService nms, SharedLog log) {
         mHandler = h;
         mHwInterface = hwi;
         mContentResolver = contentResolver;
+        mNms = nms;
+        mStatsProvider = new OffloadTetheringStatsProvider();
         mLog = log.forSubComponent(TAG);
+        mDownstreams = new HashMap<>();
         mExemptPrefixes = new HashSet<>();
         mLastLocalPrefixStrs = new HashSet<>();
 
         try {
-            nms.registerTetheringStatsProvider(
-                    new OffloadTetheringStatsProvider(), getClass().getSimpleName());
+            mNms.registerTetheringStatsProvider(mStatsProvider, getClass().getSimpleName());
         } catch (RemoteException e) {
             mLog.e("Cannot register offload stats provider: " + e);
         }
     }
 
-    public void start() {
-        if (started()) return;
+    public boolean start() {
+        if (started()) return true;
 
         if (isOffloadDisabled()) {
             mLog.i("tethering offload disabled");
-            return;
+            return false;
         }
 
         if (!mConfigInitialized) {
@@ -109,61 +141,104 @@
             if (!mConfigInitialized) {
                 mLog.i("tethering offload config not supported");
                 stop();
-                return;
+                return false;
             }
         }
 
         mControlInitialized = mHwInterface.initOffloadControl(
+                // OffloadHardwareInterface guarantees that these callback
+                // methods are called on the handler passed to it, which is the
+                // same as mHandler, as coordinated by the setup in Tethering.
                 new OffloadHardwareInterface.ControlCallback() {
                     @Override
                     public void onStarted() {
+                        if (!started()) return;
                         mLog.log("onStarted");
                     }
 
                     @Override
                     public void onStoppedError() {
+                        if (!started()) return;
                         mLog.log("onStoppedError");
                     }
 
                     @Override
                     public void onStoppedUnsupported() {
+                        if (!started()) return;
                         mLog.log("onStoppedUnsupported");
+                        // Poll for statistics and trigger a sweep of tethering
+                        // stats by observers. This might not succeed, but it's
+                        // worth trying anyway. We need to do this because from
+                        // this point on we continue with software forwarding,
+                        // and we need to synchronize stats and limits between
+                        // software and hardware forwarding.
+                        updateStatsForAllUpstreams();
+                        forceTetherStatsPoll();
                     }
 
                     @Override
                     public void onSupportAvailable() {
+                        if (!started()) return;
                         mLog.log("onSupportAvailable");
 
-                        // [1] Poll for statistics and notify NetworkStats
-                        // [2] (Re)Push all state:
-                        //     [a] push local prefixes
-                        //     [b] push downstreams
-                        //     [c] push upstream parameters
-                        pushUpstreamParameters();
+                        // [1] Poll for statistics and trigger a sweep of stats
+                        // by observers. We need to do this to ensure that any
+                        // limits set take into account any software tethering
+                        // traffic that has been happening in the meantime.
+                        updateStatsForAllUpstreams();
+                        forceTetherStatsPoll();
+                        // [2] (Re)Push all state.
+                        computeAndPushLocalPrefixes(UpdateType.FORCE);
+                        pushAllDownstreamState();
+                        pushUpstreamParameters(null);
                     }
 
                     @Override
                     public void onStoppedLimitReached() {
+                        if (!started()) return;
                         mLog.log("onStoppedLimitReached");
-                        // Poll for statistics and notify NetworkStats
+
+                        // We cannot reliably determine on which interface the limit was reached,
+                        // because the HAL interface does not specify it. We cannot just use the
+                        // current upstream, because that might have changed since the time that
+                        // the HAL queued the callback.
+                        // TODO: rev the HAL so that it provides an interface name.
+
+                        // Fetch current stats, so that when our notification reaches
+                        // NetworkStatsService and triggers a poll, we will respond with
+                        // current data (which will be above the limit that was reached).
+                        // Note that if we just changed upstream, this is unnecessary but harmless.
+                        // The stats for the previous upstream were already updated on this thread
+                        // just after the upstream was changed, so they are also up-to-date.
+                        updateStatsForCurrentUpstream();
+                        forceTetherStatsPoll();
                     }
 
                     @Override
                     public void onNatTimeoutUpdate(int proto,
                                                    String srcAddr, int srcPort,
                                                    String dstAddr, int dstPort) {
-                        mLog.log(String.format("NAT timeout update: %s (%s,%s) -> (%s,%s)",
-                                proto, srcAddr, srcPort, dstAddr, dstPort));
+                        if (!started()) return;
+                        updateNatTimeout(proto, srcAddr, srcPort, dstAddr, dstPort);
                     }
                 });
-        if (!mControlInitialized) {
+
+        final boolean isStarted = started();
+        if (!isStarted) {
             mLog.i("tethering offload control not supported");
             stop();
+        } else {
+            mLog.log("tethering offload started");
+            mNatUpdateCallbacksReceived = 0;
+            mNatUpdateNetlinkErrors = 0;
         }
-        mLog.log("tethering offload started");
+        return isStarted;
     }
 
     public void stop() {
+        // Completely stops tethering offload. After this method is called, it is no longer safe to
+        // call any HAL method, no callbacks from the hardware will be delivered, and any in-flight
+        // callbacks must be ignored. Offload may be started again by calling start().
         final boolean wasStarted = started();
         updateStatsForCurrentUpstream();
         mUpstreamLinkProperties = null;
@@ -173,40 +248,55 @@
         if (wasStarted) mLog.log("tethering offload stopped");
     }
 
+    private boolean started() {
+        return mConfigInitialized && mControlInitialized;
+    }
+
     private class OffloadTetheringStatsProvider extends ITetheringStatsProvider.Stub {
         @Override
-        public NetworkStats getTetherStats() {
+        public NetworkStats getTetherStats(int how) {
+            // getTetherStats() is the only function in OffloadController that can be called from
+            // a different thread. Do not attempt to update stats by querying the offload HAL
+            // synchronously from a different thread than our Handler thread. http://b/64771555.
+            Runnable updateStats = () -> { updateStatsForCurrentUpstream(); };
+            if (Looper.myLooper() == mHandler.getLooper()) {
+                updateStats.run();
+            } else {
+                mHandler.post(updateStats);
+            }
+
             NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 0);
-            CountDownLatch latch = new CountDownLatch(1);
+            NetworkStats.Entry entry = new NetworkStats.Entry();
+            entry.set = SET_DEFAULT;
+            entry.tag = TAG_NONE;
+            entry.uid = (how == STATS_PER_UID) ? UID_TETHERING : UID_ALL;
 
-            mHandler.post(() -> {
-                try {
-                    NetworkStats.Entry entry = new NetworkStats.Entry();
-                    entry.set = SET_DEFAULT;
-                    entry.tag = TAG_NONE;
-                    entry.uid = UID_TETHERING;
-
-                    updateStatsForCurrentUpstream();
-
-                    for (String iface : mForwardedStats.keySet()) {
-                        entry.iface = iface;
-                        entry.rxBytes = mForwardedStats.get(iface).rxBytes;
-                        entry.txBytes = mForwardedStats.get(iface).txBytes;
-                        stats.addValues(entry);
-                    }
-                } finally {
-                    latch.countDown();
-                }
-            });
-
-            try {
-                latch.await(STATS_FETCH_TIMEOUT_MS, TimeUnit.MILLISECONDS);
-            } catch (InterruptedException e) {
-                mLog.e("Tethering stats fetch timed out after " + STATS_FETCH_TIMEOUT_MS + "ms");
+            for (Map.Entry<String, ForwardedStats> kv : mForwardedStats.entrySet()) {
+                ForwardedStats value = kv.getValue();
+                entry.iface = kv.getKey();
+                entry.rxBytes = value.rxBytes;
+                entry.txBytes = value.txBytes;
+                stats.addValues(entry);
             }
 
             return stats;
         }
+
+        public void setInterfaceQuota(String iface, long quotaBytes) {
+            mHandler.post(() -> {
+                if (quotaBytes == ITetheringStatsProvider.QUOTA_UNLIMITED) {
+                    mInterfaceQuotas.remove(iface);
+                } else {
+                    mInterfaceQuotas.put(iface, quotaBytes);
+                }
+                maybeUpdateDataLimit(iface);
+            });
+        }
+    }
+
+    private String currentUpstreamInterface() {
+        return (mUpstreamLinkProperties != null)
+                ? mUpstreamLinkProperties.getInterfaceName() : null;
     }
 
     private void maybeUpdateStats(String iface) {
@@ -214,56 +304,132 @@
             return;
         }
 
-        if (!mForwardedStats.containsKey(iface)) {
-            mForwardedStats.put(iface, new OffloadHardwareInterface.ForwardedStats());
+        // Always called on the handler thread.
+        //
+        // Use get()/put() instead of updating ForwardedStats in place because we can be called
+        // concurrently with getTetherStats. In combination with the guarantees provided by
+        // ConcurrentHashMap, this ensures that getTetherStats always gets the most recent copy of
+        // the stats for each interface, and does not observe partial writes where rxBytes is
+        // updated and txBytes is not.
+        ForwardedStats diff = mHwInterface.getForwardedStats(iface);
+        ForwardedStats base = mForwardedStats.get(iface);
+        if (base != null) {
+            diff.add(base);
         }
-        mForwardedStats.get(iface).add(mHwInterface.getForwardedStats(iface));
+        mForwardedStats.put(iface, diff);
+        // diff is a new object, just created by getForwardedStats(). Therefore, anyone reading from
+        // mForwardedStats (i.e., any caller of getTetherStats) will see the new stats immediately.
+    }
+
+    private boolean maybeUpdateDataLimit(String iface) {
+        // setDataLimit may only be called while offload is occurring on this upstream.
+        if (!started() || !TextUtils.equals(iface, currentUpstreamInterface())) {
+            return true;
+        }
+
+        Long limit = mInterfaceQuotas.get(iface);
+        if (limit == null) {
+            limit = Long.MAX_VALUE;
+        }
+
+        return mHwInterface.setDataLimit(iface, limit);
     }
 
     private void updateStatsForCurrentUpstream() {
-        if (mUpstreamLinkProperties != null) {
-            maybeUpdateStats(mUpstreamLinkProperties.getInterfaceName());
+        maybeUpdateStats(currentUpstreamInterface());
+    }
+
+    private void updateStatsForAllUpstreams() {
+        // In practice, there should only ever be a single digit number of
+        // upstream interfaces over the lifetime of an active tethering session.
+        // Roughly speaking, imagine a very ambitious one or two of each of the
+        // following interface types: [ "rmnet_data", "wlan", "eth", "rndis" ].
+        for (Map.Entry<String, ForwardedStats> kv : mForwardedStats.entrySet()) {
+            maybeUpdateStats(kv.getKey());
+        }
+    }
+
+    private void forceTetherStatsPoll() {
+        try {
+            mNms.tetherLimitReached(mStatsProvider);
+        } catch (RemoteException e) {
+            mLog.e("Cannot report data limit reached: " + e);
         }
     }
 
     public void setUpstreamLinkProperties(LinkProperties lp) {
         if (!started() || Objects.equals(mUpstreamLinkProperties, lp)) return;
 
-        String prevUpstream = (mUpstreamLinkProperties != null) ?
-                mUpstreamLinkProperties.getInterfaceName() : null;
+        final String prevUpstream = currentUpstreamInterface();
 
         mUpstreamLinkProperties = (lp != null) ? new LinkProperties(lp) : null;
+        // Make sure we record this interface in the ForwardedStats map.
+        final String iface = currentUpstreamInterface();
+        if (!TextUtils.isEmpty(iface)) mForwardedStats.putIfAbsent(iface, EMPTY_STATS);
 
         // TODO: examine return code and decide what to do if programming
         // upstream parameters fails (probably just wait for a subsequent
         // onOffloadEvent() callback to tell us offload is available again and
         // then reapply all state).
-        computeAndPushLocalPrefixes();
-        pushUpstreamParameters();
-
-        // Update stats after we've told the hardware to change routing so we don't miss packets.
-        maybeUpdateStats(prevUpstream);
+        computeAndPushLocalPrefixes(UpdateType.IF_NEEDED);
+        pushUpstreamParameters(prevUpstream);
     }
 
     public void setLocalPrefixes(Set<IpPrefix> localPrefixes) {
-        if (!started()) return;
-
         mExemptPrefixes = localPrefixes;
-        computeAndPushLocalPrefixes();
+
+        if (!started()) return;
+        computeAndPushLocalPrefixes(UpdateType.IF_NEEDED);
     }
 
     public void notifyDownstreamLinkProperties(LinkProperties lp) {
-        if (!started()) return;
+        final String ifname = lp.getInterfaceName();
+        final LinkProperties oldLp = mDownstreams.put(ifname, new LinkProperties(lp));
+        if (Objects.equals(oldLp, lp)) return;
 
-        // TODO: Cache LinkProperties on a per-ifname basis and compute the
-        // deltas, calling addDownstream()/removeDownstream() accordingly.
+        if (!started()) return;
+        pushDownstreamState(oldLp, lp);
+    }
+
+    private void pushDownstreamState(LinkProperties oldLp, LinkProperties newLp) {
+        final String ifname = newLp.getInterfaceName();
+        final List<RouteInfo> oldRoutes =
+                (oldLp != null) ? oldLp.getRoutes() : Collections.EMPTY_LIST;
+        final List<RouteInfo> newRoutes = newLp.getRoutes();
+
+        // For each old route, if not in new routes: remove.
+        for (RouteInfo ri : oldRoutes) {
+            if (shouldIgnoreDownstreamRoute(ri)) continue;
+            if (!newRoutes.contains(ri)) {
+                mHwInterface.removeDownstreamPrefix(ifname, ri.getDestination().toString());
+            }
+        }
+
+        // For each new route, if not in old routes: add.
+        for (RouteInfo ri : newRoutes) {
+            if (shouldIgnoreDownstreamRoute(ri)) continue;
+            if (!oldRoutes.contains(ri)) {
+                mHwInterface.addDownstreamPrefix(ifname, ri.getDestination().toString());
+            }
+        }
+    }
+
+    private void pushAllDownstreamState() {
+        for (LinkProperties lp : mDownstreams.values()) {
+            pushDownstreamState(null, lp);
+        }
     }
 
     public void removeDownstreamInterface(String ifname) {
+        final LinkProperties lp = mDownstreams.remove(ifname);
+        if (lp == null) return;
+
         if (!started()) return;
 
-        // TODO: Check cache for LinkProperties of ifname and, if present,
-        // call removeDownstream() accordingly.
+        for (RouteInfo route : lp.getRoutes()) {
+            if (shouldIgnoreDownstreamRoute(route)) continue;
+            mHwInterface.removeDownstreamPrefix(ifname, route.getDestination().toString());
+        }
     }
 
     private boolean isOffloadDisabled() {
@@ -272,20 +438,21 @@
                 mContentResolver, TETHER_OFFLOAD_DISABLED, defaultDisposition) != 0);
     }
 
-    private boolean started() {
-        return mConfigInitialized && mControlInitialized;
-    }
+    private boolean pushUpstreamParameters(String prevUpstream) {
+        final String iface = currentUpstreamInterface();
 
-    private boolean pushUpstreamParameters() {
-        if (mUpstreamLinkProperties == null) {
-            return mHwInterface.setUpstreamParameters(null, null, null, null);
+        if (TextUtils.isEmpty(iface)) {
+            final boolean rval = mHwInterface.setUpstreamParameters("", ANYIP, ANYIP, null);
+            // Update stats after we've told the hardware to stop forwarding so
+            // we don't miss packets.
+            maybeUpdateStats(prevUpstream);
+            return rval;
         }
 
         // A stacked interface cannot be an upstream for hardware offload.
         // Consequently, we examine only the primary interface name, look at
         // getAddresses() rather than getAllAddresses(), and check getRoutes()
         // rather than getAllRoutes().
-        final String iface = mUpstreamLinkProperties.getInterfaceName();
         final ArrayList<String> v6gateways = new ArrayList<>();
         String v4addr = null;
         String v4gateway = null;
@@ -309,14 +476,33 @@
             }
         }
 
-        return mHwInterface.setUpstreamParameters(
+        boolean success = mHwInterface.setUpstreamParameters(
                 iface, v4addr, v4gateway, (v6gateways.isEmpty() ? null : v6gateways));
+
+        if (!success) {
+           return success;
+        }
+
+        // Update stats after we've told the hardware to change routing so we don't miss packets.
+        maybeUpdateStats(prevUpstream);
+
+        // Data limits can only be set once offload is running on the upstream.
+        success = maybeUpdateDataLimit(iface);
+        if (!success) {
+            // If we failed to set a data limit, don't use this upstream, because we don't want to
+            // blow through the data limit that we were told to apply.
+            mLog.log("Setting data limit for " + iface + " failed, disabling offload.");
+            stop();
+        }
+
+        return success;
     }
 
-    private boolean computeAndPushLocalPrefixes() {
+    private boolean computeAndPushLocalPrefixes(UpdateType how) {
+        final boolean force = (how == UpdateType.FORCE);
         final Set<String> localPrefixStrs = computeLocalPrefixStrings(
                 mExemptPrefixes, mUpstreamLinkProperties);
-        if (mLastLocalPrefixStrs.equals(localPrefixStrs)) return true;
+        if (!force && mLastLocalPrefixStrs.equals(localPrefixStrs)) return true;
 
         mLastLocalPrefixStrs = localPrefixStrs;
         return mHwInterface.setLocalPrefixes(new ArrayList<>(localPrefixStrs));
@@ -351,15 +537,126 @@
         return localPrefixStrs;
     }
 
+    private static boolean shouldIgnoreDownstreamRoute(RouteInfo route) {
+        // Ignore any link-local routes.
+        if (!route.getDestinationLinkAddress().isGlobalPreferred()) return true;
+
+        return false;
+    }
+
     public void dump(IndentingPrintWriter pw) {
         if (isOffloadDisabled()) {
             pw.println("Offload disabled");
             return;
         }
-        pw.println("Offload HALs " + (started() ? "started" : "not started"));
+        final boolean isStarted = started();
+        pw.println("Offload HALs " + (isStarted ? "started" : "not started"));
         LinkProperties lp = mUpstreamLinkProperties;
         String upstream = (lp != null) ? lp.getInterfaceName() : null;
         pw.println("Current upstream: " + upstream);
         pw.println("Exempt prefixes: " + mLastLocalPrefixStrs);
+        pw.println("NAT timeout update callbacks received during the "
+                + (isStarted ? "current" : "last")
+                + " offload session: "
+                + mNatUpdateCallbacksReceived);
+        pw.println("NAT timeout update netlink errors during the "
+                + (isStarted ? "current" : "last")
+                + " offload session: "
+                + mNatUpdateNetlinkErrors);
+    }
+
+    private void updateNatTimeout(
+            int proto, String srcAddr, int srcPort, String dstAddr, int dstPort) {
+        final String protoName = protoNameFor(proto);
+        if (protoName == null) {
+            mLog.e("Unknown NAT update callback protocol: " + proto);
+            return;
+        }
+
+        final Inet4Address src = parseIPv4Address(srcAddr);
+        if (src == null) {
+            mLog.e("Failed to parse IPv4 address: " + srcAddr);
+            return;
+        }
+
+        if (!IpUtils.isValidUdpOrTcpPort(srcPort)) {
+            mLog.e("Invalid src port: " + srcPort);
+            return;
+        }
+
+        final Inet4Address dst = parseIPv4Address(dstAddr);
+        if (dst == null) {
+            mLog.e("Failed to parse IPv4 address: " + dstAddr);
+            return;
+        }
+
+        if (!IpUtils.isValidUdpOrTcpPort(dstPort)) {
+            mLog.e("Invalid dst port: " + dstPort);
+            return;
+        }
+
+        mNatUpdateCallbacksReceived++;
+        final String natDescription = String.format("%s (%s, %s) -> (%s, %s)",
+                protoName, srcAddr, srcPort, dstAddr, dstPort);
+        if (DBG) {
+            mLog.log("NAT timeout update: " + natDescription);
+        }
+
+        final int timeoutSec = connectionTimeoutUpdateSecondsFor(proto);
+        final byte[] msg = ConntrackMessage.newIPv4TimeoutUpdateRequest(
+                proto, src, srcPort, dst, dstPort, timeoutSec);
+
+        try {
+            NetlinkSocket.sendOneShotKernelMessage(OsConstants.NETLINK_NETFILTER, msg);
+        } catch (ErrnoException e) {
+            mNatUpdateNetlinkErrors++;
+            mLog.e("Error updating NAT conntrack entry >" + natDescription + "<: " + e
+                    + ", msg: " + NetlinkConstants.hexify(msg));
+            mLog.log("NAT timeout update callbacks received: " + mNatUpdateCallbacksReceived);
+            mLog.log("NAT timeout update netlink errors: " + mNatUpdateNetlinkErrors);
+        }
+    }
+
+    private static Inet4Address parseIPv4Address(String addrString) {
+        try {
+            final InetAddress ip = InetAddress.parseNumericAddress(addrString);
+            // TODO: Consider other sanitization steps here, including perhaps:
+            //           not eql to 0.0.0.0
+            //           not within 169.254.0.0/16
+            //           not within ::ffff:0.0.0.0/96
+            //           not within ::/96
+            // et cetera.
+            if (ip instanceof Inet4Address) {
+                return (Inet4Address) ip;
+            }
+        } catch (IllegalArgumentException iae) {}
+        return null;
+    }
+
+    private static String protoNameFor(int proto) {
+        // OsConstants values are not constant expressions; no switch statement.
+        if (proto == OsConstants.IPPROTO_UDP) {
+            return "UDP";
+        } else if (proto == OsConstants.IPPROTO_TCP) {
+            return "TCP";
+        }
+        return null;
+    }
+
+    private static int connectionTimeoutUpdateSecondsFor(int proto) {
+        // TODO: Replace this with more thoughtful work, perhaps reading from
+        // and maybe writing to any required
+        //
+        //     /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_*
+        //     /proc/sys/net/netfilter/nf_conntrack_udp_timeout{,_stream}
+        //
+        // entries.  TBD.
+        if (proto == OsConstants.IPPROTO_TCP) {
+            // Cf. /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
+            return 432000;
+        } else {
+            // Cf. /proc/sys/net/netfilter/nf_conntrack_udp_timeout_stream
+            return 180;
+        }
     }
 }
diff --git a/services/core/java/com/android/server/connectivity/tethering/OffloadHardwareInterface.java b/services/core/java/com/android/server/connectivity/tethering/OffloadHardwareInterface.java
index 25fab9e..76195c4 100644
--- a/services/core/java/com/android/server/connectivity/tethering/OffloadHardwareInterface.java
+++ b/services/core/java/com/android/server/connectivity/tethering/OffloadHardwareInterface.java
@@ -21,10 +21,12 @@
 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.os.Handler;
 import android.os.RemoteException;
 import android.net.util.SharedLog;
+import android.system.OsConstants;
 
 import java.util.ArrayList;
 
@@ -40,7 +42,7 @@
     // Change this value to control whether tether offload is enabled or
     // disabled by default in the absence of an explicit Settings value.
     // See accompanying unittest to distinguish 0 from non-0 values.
-    private static final int DEFAULT_TETHER_OFFLOAD_DISABLED = 1;
+    private static final int DEFAULT_TETHER_OFFLOAD_DISABLED = 0;
     private static final String NO_INTERFACE_NAME = "";
     private static final String NO_IPV4_ADDRESS = "";
     private static final String NO_IPV4_GATEWAY = "";
@@ -107,6 +109,10 @@
                 mLog.e("tethering offload control not supported: " + e);
                 return false;
             }
+            if (mOffloadControl == null) {
+                mLog.e("tethering IOffloadControl.getService() returned null");
+                return false;
+            }
         }
 
         final String logmsg = String.format("initOffloadControl(%s)",
@@ -188,6 +194,27 @@
         return results.success;
     }
 
+    public boolean setDataLimit(String iface, long limit) {
+
+        final String logmsg = String.format("setDataLimit(%s, %d)", iface, limit);
+
+        final CbResults results = new CbResults();
+        try {
+            mOffloadControl.setDataLimit(
+                    iface, limit,
+                    (boolean success, String errMsg) -> {
+                        results.success = success;
+                        results.errMsg = errMsg;
+                    });
+        } catch (RemoteException e) {
+            record(logmsg, e);
+            return false;
+        }
+
+        record(logmsg, results);
+        return results.success;
+    }
+
     public boolean setUpstreamParameters(
             String iface, String v4addr, String v4gateway, ArrayList<String> v6gws) {
         iface = (iface != null) ? iface : NO_INTERFACE_NAME;
@@ -215,6 +242,44 @@
         return results.success;
     }
 
+    public boolean addDownstreamPrefix(String ifname, String prefix) {
+        final String logmsg = String.format("addDownstreamPrefix(%s, %s)", ifname, prefix);
+
+        final CbResults results = new CbResults();
+        try {
+            mOffloadControl.addDownstream(ifname, prefix,
+                    (boolean success, String errMsg) -> {
+                        results.success = success;
+                        results.errMsg = errMsg;
+                    });
+        } catch (RemoteException e) {
+            record(logmsg, e);
+            return false;
+        }
+
+        record(logmsg, results);
+        return results.success;
+    }
+
+    public boolean removeDownstreamPrefix(String ifname, String prefix) {
+        final String logmsg = String.format("removeDownstreamPrefix(%s, %s)", ifname, prefix);
+
+        final CbResults results = new CbResults();
+        try {
+            mOffloadControl.removeDownstream(ifname, prefix,
+                    (boolean success, String errMsg) -> {
+                        results.success = success;
+                        results.errMsg = errMsg;
+                    });
+        } catch (RemoteException e) {
+            record(logmsg, e);
+            return false;
+        }
+
+        record(logmsg, results);
+        return results.success;
+    }
+
     private void record(String msg, Throwable t) {
         mLog.e(msg + YIELDS + "exception: " + t);
     }
@@ -268,13 +333,24 @@
         public void updateTimeout(NatTimeoutUpdate params) {
             handler.post(() -> {
                     controlCb.onNatTimeoutUpdate(
-                        params.proto,
+                        networkProtocolToOsConstant(params.proto),
                         params.src.addr, uint16(params.src.port),
                         params.dst.addr, uint16(params.dst.port));
             });
         }
     }
 
+    private static int networkProtocolToOsConstant(int proto) {
+        switch (proto) {
+            case NetworkProtocol.TCP: return OsConstants.IPPROTO_TCP;
+            case NetworkProtocol.UDP: return OsConstants.IPPROTO_UDP;
+            default:
+                // The caller checks this value and will log an error. Just make
+                // sure it won't collide with valid OsContants.IPPROTO_* values.
+                return -Math.abs(proto);
+        }
+    }
+
     private static class CbResults {
         boolean success;
         String errMsg;
diff --git a/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java b/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java
index 69678df..57d2502 100644
--- a/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java
+++ b/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java
@@ -115,6 +115,7 @@
     private final LinkProperties mLinkProperties;
 
     private int mLastError;
+    private int mServingMode;
     private String mMyUpstreamIfaceName;  // may change over time
     private NetworkInterface mNetworkInterface;
     private byte[] mHwAddr;
@@ -142,6 +143,7 @@
         mLinkProperties = new LinkProperties();
         resetLinkProperties();
         mLastError = ConnectivityManager.TETHER_ERROR_NO_ERROR;
+        mServingMode = IControlsTethering.STATE_AVAILABLE;
 
         mInitialState = new InitialState();
         mLocalHotspotState = new LocalHotspotState();
@@ -161,6 +163,8 @@
 
     public int lastError() { return mLastError; }
 
+    public int servingMode() { return mServingMode; }
+
     public LinkProperties linkProperties() { return new LinkProperties(mLinkProperties); }
 
     public void stop() { sendMessage(CMD_INTERFACE_DOWN); }
@@ -448,6 +452,7 @@
     }
 
     private void sendInterfaceState(int newInterfaceState) {
+        mServingMode = newInterfaceState;
         mTetherController.updateInterfaceState(
                 TetherInterfaceStateMachine.this, newInterfaceState, mLastError);
         sendLinkProperties();
diff --git a/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java b/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java
index c5f7528..b35ed75 100644
--- a/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java
+++ b/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java
@@ -95,7 +95,10 @@
     private NetworkCallback mDefaultNetworkCallback;
     private NetworkCallback mMobileNetworkCallback;
     private boolean mDunRequired;
-    private Network mCurrentDefault;
+    // The current system default network (not really used yet).
+    private Network mDefaultInternetNetwork;
+    // The current upstream network used for tethering.
+    private Network mTetheringUpstreamNetwork;
 
     public UpstreamNetworkMonitor(Context ctx, StateMachine tgt, SharedLog log, int what) {
         mContext = ctx;
@@ -130,10 +133,12 @@
 
         releaseCallback(mDefaultNetworkCallback);
         mDefaultNetworkCallback = null;
+        mDefaultInternetNetwork = null;
 
         releaseCallback(mListenAllCallback);
         mListenAllCallback = null;
 
+        mTetheringUpstreamNetwork = null;
         mNetworkMap.clear();
     }
 
@@ -207,7 +212,7 @@
                 break;
             default:
                 /* If we've found an active upstream connection that's not DUN/HIPRI
-                 * we should stop any outstanding DUN/HIPRI start requests.
+                 * we should stop any outstanding DUN/HIPRI requests.
                  *
                  * If we found NONE we don't want to do this as we want any previous
                  * requests to keep trying to bring up something we can use.
@@ -219,6 +224,10 @@
         return typeStatePair.ns;
     }
 
+    public void setCurrentUpstream(Network upstream) {
+        mTetheringUpstreamNetwork = upstream;
+    }
+
     public Set<IpPrefix> getLocalPrefixes() {
         return (Set<IpPrefix>) mLocalPrefixes.clone();
     }
@@ -250,7 +259,7 @@
                     // These request*() calls can be deleted post oag/339444.
                     return;
                 }
-                mCurrentDefault = network;
+                mDefaultInternetNetwork = network;
                 break;
 
             case CALLBACK_MOBILE_REQUEST:
@@ -302,6 +311,13 @@
                     network, newNc));
         }
 
+        // Log changes in upstream network signal strength, if available.
+        if (network.equals(mTetheringUpstreamNetwork) && newNc.hasSignalStrength()) {
+            final int newSignal = newNc.getSignalStrength();
+            final String prevSignal = getSignalStrength(prev.networkCapabilities);
+            mLog.logf("upstream network signal strength: %s -> %s", prevSignal, newSignal);
+        }
+
         mNetworkMap.put(network, new NetworkState(
                 null, prev.linkProperties, newNc, network, null, null));
         // TODO: If sufficient information is available to select a more
@@ -330,9 +346,21 @@
         notifyTarget(EVENT_ON_LINKPROPERTIES, network);
     }
 
+    private void handleSuspended(int callbackType, Network network) {
+        if (callbackType != CALLBACK_LISTEN_ALL) return;
+        if (!network.equals(mTetheringUpstreamNetwork)) return;
+        mLog.log("SUSPENDED current upstream: " + network);
+    }
+
+    private void handleResumed(int callbackType, Network network) {
+        if (callbackType != CALLBACK_LISTEN_ALL) return;
+        if (!network.equals(mTetheringUpstreamNetwork)) return;
+        mLog.log("RESUMED current upstream: " + network);
+    }
+
     private void handleLost(int callbackType, Network network) {
         if (callbackType == CALLBACK_TRACK_DEFAULT) {
-            mCurrentDefault = null;
+            mDefaultInternetNetwork = null;
             // Receiving onLost() for a default network does not necessarily
             // mean the network is gone.  We wait for a separate notification
             // on either the LISTEN_ALL or MOBILE_REQUEST callbacks before
@@ -401,8 +429,15 @@
             recomputeLocalPrefixes();
         }
 
-        // TODO: Handle onNetworkSuspended();
-        // TODO: Handle onNetworkResumed();
+        @Override
+        public void onNetworkSuspended(Network network) {
+            handleSuspended(mCallbackType, network);
+        }
+
+        @Override
+        public void onNetworkResumed(Network network) {
+            handleResumed(mCallbackType, network);
+        }
 
         @Override
         public void onLost(Network network) {
@@ -467,4 +502,9 @@
 
         return prefixSet;
     }
+
+    private static String getSignalStrength(NetworkCapabilities nc) {
+        if (nc == null || !nc.hasSignalStrength()) return "unknown";
+        return Integer.toString(nc.getSignalStrength());
+    }
 }
diff --git a/services/core/java/com/android/server/content/ContentService.java b/services/core/java/com/android/server/content/ContentService.java
index ad74ff8..6e1c21e 100644
--- a/services/core/java/com/android/server/content/ContentService.java
+++ b/services/core/java/com/android/server/content/ContentService.java
@@ -646,6 +646,7 @@
         SyncManager syncManager = getSyncManager();
         if (syncManager == null) return;
         int userId = UserHandle.getCallingUserId();
+        final int callingUid = Binder.getCallingUid();
 
         long identityToken = clearCallingIdentity();
         try {
@@ -658,7 +659,8 @@
                 // Remove periodic sync.
                 mContext.enforceCallingOrSelfPermission(Manifest.permission.WRITE_SYNC_SETTINGS,
                         "no permission to write the sync settings");
-                getSyncManager().removePeriodicSync(info, extras);
+                getSyncManager().removePeriodicSync(info, extras,
+                        "cancelRequest() by uid=" + callingUid);
             }
             // Cancel active syncs and clear pending syncs from the queue.
             syncManager.cancelScheduledSyncOperation(info, extras);
@@ -814,13 +816,15 @@
         mContext.enforceCallingOrSelfPermission(Manifest.permission.WRITE_SYNC_SETTINGS,
                 "no permission to write the sync settings");
 
+        final int callingUid = Binder.getCallingUid();
+
         int userId = UserHandle.getCallingUserId();
         long identityToken = clearCallingIdentity();
         try {
             getSyncManager()
                     .removePeriodicSync(
                             new SyncStorageEngine.EndPoint(account, authority, userId),
-                            extras);
+                            extras, "removePeriodicSync() by uid=" + callingUid);
         } finally {
             restoreCallingIdentity(identityToken);
         }
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index a9c0cb0..205e828 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -59,6 +59,7 @@
 import android.net.TrafficStats;
 import android.os.BatteryStats;
 import android.os.Binder;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
@@ -98,6 +99,7 @@
 import com.android.server.content.SyncStorageEngine.AuthorityInfo;
 import com.android.server.content.SyncStorageEngine.EndPoint;
 import com.android.server.content.SyncStorageEngine.OnSyncRequestListener;
+import com.android.server.job.JobSchedulerInternal.JobStorePersistStats;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
@@ -141,6 +143,9 @@
 
     private static final boolean DEBUG_ACCOUNT_ACCESS = false;
 
+    // Only do the check on a debuggable build.
+    private static final boolean ENABLE_SUSPICIOUS_CHECK = Build.IS_DEBUGGABLE;
+
     /** Delay a sync due to local changes this long. In milliseconds */
     private static final long LOCAL_SYNC_DELAY;
 
@@ -400,12 +405,21 @@
         return (networkInfo != null) && networkInfo.isConnected();
     }
 
+    private String getJobStats() {
+        JobSchedulerInternal js = LocalServices.getService(JobSchedulerInternal.class);
+        return "JobStats: "
+                + ((js == null) ? "(JobSchedulerInternal==null)"
+                : js.getPersistStats().toString());
+    }
+
     private BroadcastReceiver mShutdownIntentReceiver =
             new BroadcastReceiver() {
                 @Override
                 public void onReceive(Context context, Intent intent) {
                     Log.w(TAG, "Writing sync state before shutdown...");
                     getSyncStorageEngine().writeAllState();
+
+                    mLogger.log(getJobStats());
                     mLogger.log("Shutting down.");
                 }
             };
@@ -463,7 +477,7 @@
                         }
                         if (opx.key.equals(opy.key)) {
                             mLogger.log("Removing duplicate sync: ", opy);
-                            mJobScheduler.cancel(opy.jobId);
+                            cancelJob(opy, "cleanupJobs() x=" + opx + " y=" + opy);
                         }
                     }
                 }
@@ -501,15 +515,19 @@
                     }
                 }
             }
-            if (mLogger.enabled()) {
-                mLogger.log("Connected to JobScheduler: "
-                        + numPersistedPeriodicSyncs + " periodic syncs "
-                        + numPersistedOneshotSyncs + " oneshot syncs.");
-            }
+            final String summary = "Loaded persisted syncs: "
+                    + numPersistedPeriodicSyncs + " periodic syncs, "
+                    + numPersistedOneshotSyncs + " oneshot syncs, "
+                    + (pendingJobs.size()) + " total system server jobs, "
+                    + getJobStats();
+            Slog.i(TAG, summary);
+            mLogger.log(summary);
+
             cleanupJobs();
 
-            if ((numPersistedPeriodicSyncs == 0) && likelyHasPeriodicSyncs()) {
-                Slog.wtf(TAG, "Device booted with no persisted periodic syncs.");
+            if (ENABLE_SUSPICIOUS_CHECK &&
+                    (numPersistedPeriodicSyncs == 0) && likelyHasPeriodicSyncs()) {
+                Slog.wtf(TAG, "Device booted with no persisted periodic syncs: " + summary);
             }
         } finally {
             Binder.restoreCallingIdentity(token);
@@ -521,7 +539,10 @@
      */
     private boolean likelyHasPeriodicSyncs() {
         try {
-            return AccountManager.get(mContext).getAccountsByType("com.google").length > 0;
+            // Each sync adapter has a daily periodic sync by default, but sync adapters can remove
+            // them by themselves. So here, we use an arbitrary threshold. If there are more than
+            // this many sync endpoints, surely one of them should have a periodic sync...
+            return mSyncStorageEngine.getAuthorityCount() >= 6;
         } catch (Throwable th) {
             // Just in case.
         }
@@ -566,7 +587,7 @@
         mSyncStorageEngine.setOnAuthorityRemovedListener(new SyncStorageEngine.OnAuthorityRemovedListener() {
             @Override
             public void onAuthorityRemoved(EndPoint removedAuthority) {
-                removeSyncsForAuthority(removedAuthority);
+                removeSyncsForAuthority(removedAuthority, "onAuthorityRemoved");
             }
         });
 
@@ -710,7 +731,7 @@
         // the account (they run before) which is the genie is out of the bottle.
         whiteListExistingSyncAdaptersIfNeeded();
 
-        mLogger.log("Sync manager initialized.");
+        mLogger.log("Sync manager initialized: " + Build.FINGERPRINT);
     }
 
     public void onStartUser(int userHandle) {
@@ -1118,14 +1139,14 @@
         }
     }
 
-    private void removeSyncsForAuthority(EndPoint info) {
+    private void removeSyncsForAuthority(EndPoint info, String why) {
         mLogger.log("removeSyncsForAuthority: ", info);
         verifyJobScheduler();
         List<SyncOperation> ops = getAllPendingSyncs();
         for (SyncOperation op: ops) {
             if (op.target.matchesSpec(info)) {
                 mLogger.log("canceling: ", op);
-                getJobScheduler().cancel(op.jobId);
+                cancelJob(op, why);
             }
         }
     }
@@ -1133,8 +1154,9 @@
     /**
      * Remove a specific periodic sync identified by its target and extras.
      */
-    public void removePeriodicSync(EndPoint target, Bundle extras) {
-        Message m = mSyncHandler.obtainMessage(mSyncHandler.MESSAGE_REMOVE_PERIODIC_SYNC, target);
+    public void removePeriodicSync(EndPoint target, Bundle extras, String why) {
+        Message m = mSyncHandler.obtainMessage(mSyncHandler.MESSAGE_REMOVE_PERIODIC_SYNC,
+                Pair.create(target, why));
         m.setData(extras);
         m.sendToTarget();
     }
@@ -1359,7 +1381,7 @@
         for (SyncOperation op: ops) {
             if (!op.isPeriodic && op.target.matchesSpec(target)) {
                 count++;
-                getJobScheduler().cancel(op.jobId);
+                cancelJob(op, why);
                 postScheduleSyncMessage(op, 0 /* min delay */);
             }
         }
@@ -1484,7 +1506,7 @@
                         if (isLoggable) {
                             Slog.v(TAG, "Cancelling duplicate sync " + op);
                         }
-                        getJobScheduler().cancel(op.jobId);
+                        cancelJob(op, "scheduleSyncOperationH-duplicate");
                     }
                 }
             }
@@ -1544,7 +1566,7 @@
         List<SyncOperation> ops = getAllPendingSyncs();
         for (SyncOperation op: ops) {
             if (!op.isPeriodic && op.target.matchesSpec(info)) {
-                getJobScheduler().cancel(op.jobId);
+                cancelJob(op, "clearScheduledSyncOperations");
                 getSyncStorageEngine().markPending(op.target, false);
             }
         }
@@ -1562,7 +1584,7 @@
         for (SyncOperation op: ops) {
             if (!op.isPeriodic && op.target.matchesSpec(info)
                     && syncExtrasEquals(extras, op.extras, false)) {
-                getJobScheduler().cancel(op.jobId);
+                cancelJob(op, "cancelScheduledSyncOperation");
             }
         }
         setAuthorityPendingState(info);
@@ -1678,7 +1700,7 @@
         List<SyncOperation> ops = getAllPendingSyncs();
         for (SyncOperation op: ops) {
             if (op.target.userId == userId) {
-                getJobScheduler().cancel(op.jobId);
+                cancelJob(op, "user removed u" + userId);
             }
         }
     }
@@ -2710,7 +2732,8 @@
                                 data.flex, data.extras);
                         break;
                     case MESSAGE_REMOVE_PERIODIC_SYNC:
-                        removePeriodicSyncH((EndPoint)msg.obj, msg.getData());
+                        Pair<EndPoint, String> args = (Pair<EndPoint, String>) (msg.obj);
+                        removePeriodicSyncH(args.first, msg.getData(), args.second);
                         break;
 
                     case SyncHandler.MESSAGE_CANCEL:
@@ -2848,7 +2871,7 @@
                 // mSyncJobService.callJobFinished is async, so cancel the job to ensure we don't
                 // find the this job in the pending jobs list while looking for duplicates
                 // before scheduling it at a later time.
-                getJobScheduler().cancel(op.jobId);
+                cancelJob(op, "deferSyncH()");
                 scheduleSyncOperationH(op, delay);
             }
         }
@@ -2998,7 +3021,7 @@
             for (SyncOperation op: ops) {
                 if (!containsAccountAndUser(allAccounts, op.target.account, op.target.userId)) {
                     mLogger.log("canceling: ", op);
-                    getJobScheduler().cancel(op.jobId);
+                    cancelJob(op, "updateRunningAccountsH()");
                 }
             }
 
@@ -3105,7 +3128,7 @@
         /**
          * Remove this periodic sync operation and all one-off operations initiated by it.
          */
-        private void removePeriodicSyncInternalH(SyncOperation syncOperation) {
+        private void removePeriodicSyncInternalH(SyncOperation syncOperation, String why) {
             // Remove this periodic sync and all one-off syncs initiated by it.
             List<SyncOperation> ops = getAllPendingSyncs();
             for (SyncOperation op: ops) {
@@ -3117,18 +3140,18 @@
                         runSyncFinishedOrCanceledH(null, asc);
                     }
                     mLogger.log("removePeriodicSyncInternalH-canceling: ", op);
-                    getJobScheduler().cancel(op.jobId);
+                    cancelJob(op, why);
                 }
             }
         }
 
-        private void removePeriodicSyncH(EndPoint target, Bundle extras) {
+        private void removePeriodicSyncH(EndPoint target, Bundle extras, String why) {
             verifyJobScheduler();
             List<SyncOperation> ops = getAllPendingSyncs();
             for (SyncOperation op: ops) {
                 if (op.isPeriodic && op.target.matchesSpec(target)
                         && syncExtrasEquals(op.extras, extras, true /* includeSyncSettings */)) {
-                    removePeriodicSyncInternalH(op);
+                    removePeriodicSyncInternalH(op, why);
                 }
             }
         }
@@ -3369,7 +3392,7 @@
                 // Note this part is probably okay to do before closeActiveSyncContext()...
                 // But moved here to restore OC-dev's behavior.  See b/64597061.
                 if (!syncOperation.isPeriodic) {
-                    getJobScheduler().cancel(syncOperation.jobId);
+                    cancelJob(syncOperation, "runSyncFinishedOrCanceledH()-finished");
                 }
 
                 if (!syncResult.hasError()) {
@@ -3410,7 +3433,7 @@
                 }
 
                 if (!syncOperation.isPeriodic) {
-                    getJobScheduler().cancel(syncOperation.jobId);
+                    cancelJob(syncOperation, "runSyncFinishedOrCanceledH()-canceled");
                 }
 
                 if (activeSyncContext.mSyncAdapter != null) {
@@ -3747,4 +3770,20 @@
             return mContext;
         }
     }
+
+    private void cancelJob(SyncOperation op, String why) {
+        if (op == null) {
+            Slog.wtf(TAG, "Null sync operation detected.");
+            return;
+        }
+        if (op.isPeriodic) {
+            mLogger.log("Removing periodic sync ", op, " for ", why);
+        }
+        getJobScheduler().cancel(op.jobId);
+    }
+
+    private void wtfWithLog(String message) {
+        Slog.wtf(TAG, message);
+        mLogger.log("WTF: ", message);
+    }
 }
diff --git a/services/core/java/com/android/server/content/SyncStorageEngine.java b/services/core/java/com/android/server/content/SyncStorageEngine.java
index 7b277c0..3591871 100644
--- a/services/core/java/com/android/server/content/SyncStorageEngine.java
+++ b/services/core/java/com/android/server/content/SyncStorageEngine.java
@@ -911,6 +911,12 @@
         }
     }
 
+    public int getAuthorityCount() {
+        synchronized (mAuthorities) {
+            return mAuthorities.size();
+        }
+    }
+
     public AuthorityInfo getAuthority(int authorityId) {
         synchronized (mAuthorities) {
             return mAuthorities.get(authorityId);
diff --git a/services/core/java/com/android/server/display/DisplayDeviceInfo.java b/services/core/java/com/android/server/display/DisplayDeviceInfo.java
index ef6de4c..fddb81b 100644
--- a/services/core/java/com/android/server/display/DisplayDeviceInfo.java
+++ b/services/core/java/com/android/server/display/DisplayDeviceInfo.java
@@ -98,6 +98,12 @@
     public static final int FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD = 1 << 9;
 
     /**
+     * Flag: This display will destroy its content on removal.
+     * @hide
+     */
+    public static final int FLAG_DESTROY_CONTENT_ON_REMOVAL = 1 << 10;
+
+    /**
      * Touch attachment: Display does not receive touch.
      */
     public static final int TOUCH_NONE = 0;
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 8269042..d0a1d9e 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -31,6 +31,8 @@
 import android.annotation.NonNull;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.graphics.Point;
 import android.hardware.SensorManager;
 import android.hardware.display.DisplayManagerGlobal;
 import android.hardware.display.DisplayManagerInternal;
@@ -211,6 +213,12 @@
     // The virtual display adapter, or null if not registered.
     private VirtualDisplayAdapter mVirtualDisplayAdapter;
 
+    // The stable device screen height and width. These are not tied to a specific display, even
+    // the default display, because they need to be stable over the course of the device's entire
+    // life, even if the default display changes (e.g. a new monitor is plugged into a PC-like
+    // device).
+    private Point mStableDisplaySize = new Point();
+
     // Viewports of the default display and the display that should receive touch
     // input from an external source.  Used by the input system.
     private final DisplayViewport mDefaultViewport = new DisplayViewport();
@@ -284,7 +292,10 @@
         // adapter is up so that we have it's configuration. We could load it lazily, but since
         // we're going to have to read it in eventually we may as well do it here rather than after
         // we've waited for the display to register itself with us.
-        mPersistentDataStore.loadIfNeeded();
+		synchronized(mSyncRoot) {
+			mPersistentDataStore.loadIfNeeded();
+			loadStableDisplayValuesLocked();
+        }
         mHandler.sendEmptyMessage(MSG_REGISTER_DEFAULT_DISPLAY_ADAPTERS);
 
         publishBinderService(Context.DISPLAY_SERVICE, new BinderService(),
@@ -346,6 +357,34 @@
         return mHandler;
     }
 
+    private void loadStableDisplayValuesLocked() {
+        final Point size = mPersistentDataStore.getStableDisplaySize();
+        if (size.x > 0 && size.y > 0) {
+            // Just set these values directly so we don't write the display persistent data again
+            // unnecessarily
+            mStableDisplaySize.set(size.x, size.y);
+        } else {
+            final Resources res = mContext.getResources();
+            final int width = res.getInteger(
+                    com.android.internal.R.integer.config_stableDeviceDisplayWidth);
+            final int height = res.getInteger(
+                    com.android.internal.R.integer.config_stableDeviceDisplayHeight);
+            if (width > 0 && height > 0) {
+                setStableDisplaySizeLocked(width, height);
+            }
+        }
+    }
+
+    private Point getStableDisplaySizeInternal() {
+        Point r = new Point();
+        synchronized (mSyncRoot) {
+            if (mStableDisplaySize.x > 0 && mStableDisplaySize.y > 0) {
+                r.set(mStableDisplaySize.x, mStableDisplaySize.y);
+            }
+        }
+        return r;
+    }
+
     private void registerDisplayTransactionListenerInternal(
             DisplayTransactionListener listener) {
         // List is self-synchronized copy-on-write.
@@ -770,18 +809,6 @@
         if (work != null) {
             work.run();
         }
-        if (display != null && display.getPrimaryDisplayDeviceLocked() == device) {
-            int colorMode = mPersistentDataStore.getColorMode(device);
-            if (colorMode == Display.COLOR_MODE_INVALID) {
-                if ((device.getDisplayDeviceInfoLocked().flags
-                     & DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY) != 0) {
-                    colorMode = mDefaultDisplayDefaultColorMode;
-                } else {
-                    colorMode = Display.COLOR_MODE_DEFAULT;
-                }
-            }
-            display.setRequestedColorModeLocked(colorMode);
-        }
         scheduleTraversalLocked(false);
     }
 
@@ -886,6 +913,11 @@
             return null;
         }
 
+        configureColorModeLocked(display, device);
+        if (isDefault) {
+            recordStableDisplayStatsIfNeededLocked(display);
+        }
+
         mLogicalDisplays.put(displayId, display);
 
         // Wake up waitForDefaultDisplay.
@@ -907,6 +939,40 @@
         return displayId;
     }
 
+    private void configureColorModeLocked(LogicalDisplay display, DisplayDevice device) {
+        if (display.getPrimaryDisplayDeviceLocked() == device) {
+            int colorMode = mPersistentDataStore.getColorMode(device);
+            if (colorMode == Display.COLOR_MODE_INVALID) {
+                if ((device.getDisplayDeviceInfoLocked().flags
+                     & DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY) != 0) {
+                    colorMode = mDefaultDisplayDefaultColorMode;
+                } else {
+                    colorMode = Display.COLOR_MODE_DEFAULT;
+                }
+            }
+            display.setRequestedColorModeLocked(colorMode);
+        }
+    }
+
+    // If we've never recorded stable device stats for this device before and they aren't
+    // explicitly configured, go ahead and record the stable device stats now based on the status
+    // of the default display at first boot.
+    private void recordStableDisplayStatsIfNeededLocked(LogicalDisplay d) {
+        if (mStableDisplaySize.x <= 0 && mStableDisplaySize.y <= 0) {
+            DisplayInfo info = d.getDisplayInfoLocked();
+            setStableDisplaySizeLocked(info.getNaturalWidth(), info.getNaturalHeight());
+        }
+    }
+
+    private void setStableDisplaySizeLocked(int width, int height) {
+        mStableDisplaySize = new Point(width, height);
+        try {
+            mPersistentDataStore.setStableDisplaySize(mStableDisplaySize);
+        } finally {
+            mPersistentDataStore.saveIfNeeded();
+        }
+    }
+
     // Updates all existing logical displays given the current set of display devices.
     // Removes invalid logical displays.
     // Sends notifications if needed.
@@ -1166,6 +1232,8 @@
             pw.println("  mDefaultDisplayDefaultColorMode=" + mDefaultDisplayDefaultColorMode);
             pw.println("  mSingleDisplayDemoMode=" + mSingleDisplayDemoMode);
             pw.println("  mWifiDisplayScanRequestCount=" + mWifiDisplayScanRequestCount);
+            pw.println("  mStableDisplaySize=" + mStableDisplaySize);
+
 
             IndentingPrintWriter ipw = new IndentingPrintWriter(pw, "    ");
             ipw.increaseIndent();
@@ -1378,6 +1446,19 @@
             }
         }
 
+        /**
+         * Returns the stable device display size, in pixels.
+         */
+        @Override // Binder call
+        public Point getStableDisplaySize() {
+            final long token = Binder.clearCallingIdentity();
+            try {
+                return getStableDisplaySizeInternal();
+            } finally {
+                Binder.restoreCallingIdentity(token);
+            }
+        }
+
         @Override // Binder call
         public void registerCallback(IDisplayManagerCallback callback) {
             if (callback == null) {
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 6e6e7d1..f8e5836 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -16,6 +16,7 @@
 
 package com.android.server.display;
 
+import android.app.ActivityManager;
 import com.android.internal.app.IBatteryStats;
 import com.android.server.LocalServices;
 import com.android.server.am.BatteryStatsService;
@@ -161,6 +162,9 @@
     // True if should use light sensor to automatically determine doze screen brightness.
     private final boolean mAllowAutoBrightnessWhileDozingConfig;
 
+    // Whether or not the color fade on screen on / off is enabled.
+    private final boolean mColorFadeEnabled;
+
     // True if we should fade the screen while turning it off, false if we should play
     // a stylish color fade animation instead.
     private boolean mColorFadeFadesConfig;
@@ -419,6 +423,8 @@
 
         mScreenBrightnessRangeMinimum = screenBrightnessRangeMinimum;
 
+
+        mColorFadeEnabled = !ActivityManager.isLowRamDeviceStatic();
         mColorFadeFadesConfig = resources.getBoolean(
                 com.android.internal.R.bool.config_animateScreenLights);
 
@@ -515,17 +521,19 @@
         // Initialize the power state object for the default display.
         // In the future, we might manage multiple displays independently.
         mPowerState = new DisplayPowerState(mBlanker,
-                new ColorFade(Display.DEFAULT_DISPLAY));
+                mColorFadeEnabled ? new ColorFade(Display.DEFAULT_DISPLAY) : null);
 
-        mColorFadeOnAnimator = ObjectAnimator.ofFloat(
-                mPowerState, DisplayPowerState.COLOR_FADE_LEVEL, 0.0f, 1.0f);
-        mColorFadeOnAnimator.setDuration(COLOR_FADE_ON_ANIMATION_DURATION_MILLIS);
-        mColorFadeOnAnimator.addListener(mAnimatorListener);
+        if (mColorFadeEnabled) {
+            mColorFadeOnAnimator = ObjectAnimator.ofFloat(
+                    mPowerState, DisplayPowerState.COLOR_FADE_LEVEL, 0.0f, 1.0f);
+            mColorFadeOnAnimator.setDuration(COLOR_FADE_ON_ANIMATION_DURATION_MILLIS);
+            mColorFadeOnAnimator.addListener(mAnimatorListener);
 
-        mColorFadeOffAnimator = ObjectAnimator.ofFloat(
-                mPowerState, DisplayPowerState.COLOR_FADE_LEVEL, 1.0f, 0.0f);
-        mColorFadeOffAnimator.setDuration(COLOR_FADE_OFF_ANIMATION_DURATION_MILLIS);
-        mColorFadeOffAnimator.addListener(mAnimatorListener);
+            mColorFadeOffAnimator = ObjectAnimator.ofFloat(
+                    mPowerState, DisplayPowerState.COLOR_FADE_LEVEL, 1.0f, 0.0f);
+            mColorFadeOffAnimator.setDuration(COLOR_FADE_OFF_ANIMATION_DURATION_MILLIS);
+            mColorFadeOffAnimator.addListener(mAnimatorListener);
+        }
 
         mScreenBrightnessRampAnimator = new RampAnimator<DisplayPowerState>(
                 mPowerState, DisplayPowerState.SCREEN_BRIGHTNESS);
@@ -802,9 +810,9 @@
         // Note that we do not wait for the brightness ramp animation to complete before
         // reporting the display is ready because we only need to ensure the screen is in the
         // right power state even as it continues to converge on the desired brightness.
-        final boolean ready = mPendingScreenOnUnblocker == null
-                && !mColorFadeOnAnimator.isStarted()
-                && !mColorFadeOffAnimator.isStarted()
+        final boolean ready = mPendingScreenOnUnblocker == null &&
+                (!mColorFadeEnabled ||
+                        (!mColorFadeOnAnimator.isStarted() && !mColorFadeOffAnimator.isStarted()))
                 && mPowerState.waitUntilClean(mCleanListener);
         final boolean finished = ready
                 && !mScreenBrightnessRampAnimator.isAnimating();
@@ -976,6 +984,7 @@
             Slog.d(TAG, "Animating brightness: target=" + target +", rate=" + rate);
         }
         if (mScreenBrightnessRampAnimator.animateTo(target, rate)) {
+            Trace.traceCounter(Trace.TRACE_TAG_POWER, "TargetScreenBrightness", target);
             try {
                 mBatteryStats.noteScreenBrightness(target);
             } catch (RemoteException ex) {
@@ -986,8 +995,8 @@
 
     private void animateScreenStateChange(int target, boolean performScreenOffTransition) {
         // If there is already an animation in progress, don't interfere with it.
-        if (mColorFadeOnAnimator.isStarted()
-                || mColorFadeOffAnimator.isStarted()) {
+        if (mColorFadeEnabled &&
+                (mColorFadeOnAnimator.isStarted() || mColorFadeOffAnimator.isStarted())) {
             if (target != Display.STATE_ON) {
                 return;
             }
@@ -1002,7 +1011,9 @@
             // contents of the screen.
             mPowerState.prepareColorFade(mContext,
                     mColorFadeFadesConfig ? ColorFade.MODE_FADE : ColorFade.MODE_WARM_UP);
-            mColorFadeOffAnimator.end();
+            if (mColorFadeOffAnimator != null) {
+                mColorFadeOffAnimator.end();
+            }
             // Some display hardware will blank itself on the transition between doze and non-doze
             // but still on display states. In this case we want to report to policy that the
             // display has turned off so it can prepare the appropriate power on animation, but we
@@ -1027,7 +1038,7 @@
             if (!setScreenState(Display.STATE_ON)) {
                 return; // screen on blocked
             }
-            if (USE_COLOR_FADE_ON_ANIMATION && mPowerRequest.isBrightOrDim()) {
+            if (USE_COLOR_FADE_ON_ANIMATION && mColorFadeEnabled && mPowerRequest.isBrightOrDim()) {
                 // Perform screen on animation.
                 if (mPowerState.getColorFadeLevel() == 1.0f) {
                     mPowerState.dismissColorFade();
@@ -1103,6 +1114,10 @@
         } else {
             // Want screen off.
             mPendingScreenOff = true;
+            if (!mColorFadeEnabled) {
+                mPowerState.setColorFadeLevel(0.0f);
+            }
+
             if (mPowerState.getColorFadeLevel() == 0.0f) {
                 // Turn the screen off.
                 // A black surface is already hiding the contents of the screen.
diff --git a/services/core/java/com/android/server/display/DisplayPowerState.java b/services/core/java/com/android/server/display/DisplayPowerState.java
index efa4a1d..763f56f 100644
--- a/services/core/java/com/android/server/display/DisplayPowerState.java
+++ b/services/core/java/com/android/server/display/DisplayPowerState.java
@@ -176,7 +176,7 @@
      * @return True if the electron beam was prepared.
      */
     public boolean prepareColorFade(Context context, int mode) {
-        if (!mColorFade.prepare(context, mode)) {
+        if (mColorFade == null || !mColorFade.prepare(context, mode)) {
             mColorFadePrepared = false;
             mColorFadeReady = true;
             return false;
@@ -193,7 +193,7 @@
      */
     public void dismissColorFade() {
         Trace.traceCounter(Trace.TRACE_TAG_POWER, COUNTER_COLOR_FADE, 100);
-        mColorFade.dismiss();
+        if (mColorFade != null) mColorFade.dismiss();
         mColorFadePrepared = false;
         mColorFadeReady = true;
     }
@@ -202,7 +202,7 @@
      * Dismisses the color fade resources.
      */
     public void dismissColorFadeResources() {
-        mColorFade.dismissResources();
+        if (mColorFade != null) mColorFade.dismissResources();
     }
 
     /**
@@ -272,7 +272,7 @@
         pw.println("  mColorFadeDrawPending=" + mColorFadeDrawPending);
 
         mPhotonicModulator.dump(pw);
-        mColorFade.dump(pw);
+        if (mColorFade != null) mColorFade.dump(pw);
     }
 
     private void scheduleScreenUpdate() {
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index ce5f430..d61a418 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -473,17 +473,18 @@
                         }
 
                         // If the state change was from or to VR, then we need to tell the light
-                        // so that it can apply appropriate VR brightness settings. This should
-                        // happen prior to changing the brightness but also if there is no
-                        // brightness change at all.
+                        // so that it can apply appropriate VR brightness settings. Also, update the
+                        // brightness so the state is propogated to light.
+                        boolean vrModeChange = false;
                         if ((state == Display.STATE_VR || currentState == Display.STATE_VR) &&
                                 currentState != state) {
                             setVrMode(state == Display.STATE_VR);
+                            vrModeChange = true;
                         }
 
 
                         // Apply brightness changes given that we are in a non-suspended state.
-                        if (brightnessChanged) {
+                        if (brightnessChanged || vrModeChange) {
                             setDisplayBrightness(brightness);
                         }
 
@@ -532,7 +533,7 @@
                         try {
                             mBacklight.setBrightness(brightness);
                             Trace.traceCounter(Trace.TRACE_TAG_POWER,
-                                    "DisplayBrightness", brightness);
+                                    "ScreenBrightness", brightness);
                         } finally {
                             Trace.traceEnd(Trace.TRACE_TAG_POWER);
                         }
diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java
index addad0b..78a5407 100644
--- a/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -238,6 +238,9 @@
                 // For private displays by default content is destroyed on removal.
                 mBaseDisplayInfo.removeMode = Display.REMOVE_MODE_DESTROY_CONTENT;
             }
+            if ((deviceInfo.flags & DisplayDeviceInfo.FLAG_DESTROY_CONTENT_ON_REMOVAL) != 0) {
+                mBaseDisplayInfo.removeMode = Display.REMOVE_MODE_DESTROY_CONTENT;
+            }
             if ((deviceInfo.flags & DisplayDeviceInfo.FLAG_PRESENTATION) != 0) {
                 mBaseDisplayInfo.flags |= Display.FLAG_PRESENTATION;
             }
diff --git a/services/core/java/com/android/server/display/NightDisplayService.java b/services/core/java/com/android/server/display/NightDisplayService.java
index eeee768..4c9bb3b 100644
--- a/services/core/java/com/android/server/display/NightDisplayService.java
+++ b/services/core/java/com/android/server/display/NightDisplayService.java
@@ -48,8 +48,10 @@
 import com.android.server.twilight.TwilightManager;
 import com.android.server.twilight.TwilightState;
 
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.Calendar;
 import java.util.TimeZone;
 
 import com.android.internal.R;
@@ -304,7 +306,7 @@
     }
 
     @Override
-    public void onCustomStartTimeChanged(NightDisplayController.LocalTime startTime) {
+    public void onCustomStartTimeChanged(LocalTime startTime) {
         Slog.d(TAG, "onCustomStartTimeChanged: startTime=" + startTime);
 
         if (mAutoMode != null) {
@@ -313,7 +315,7 @@
     }
 
     @Override
-    public void onCustomEndTimeChanged(NightDisplayController.LocalTime endTime) {
+    public void onCustomEndTimeChanged(LocalTime endTime) {
         Slog.d(TAG, "onCustomEndTimeChanged: endTime=" + endTime);
 
         if (mAutoMode != null) {
@@ -434,6 +436,36 @@
         outTemp[10] = blue;
     }
 
+    /**
+     * Returns the first date time corresponding to the local time that occurs before the
+     * provided date time.
+     *
+     * @param compareTime the LocalDateTime to compare against
+     * @return the prior LocalDateTime corresponding to this local time
+     */
+    public static LocalDateTime getDateTimeBefore(LocalTime localTime, LocalDateTime compareTime) {
+        final LocalDateTime ldt = LocalDateTime.of(compareTime.getYear(), compareTime.getMonth(),
+                compareTime.getDayOfMonth(), localTime.getHour(), localTime.getMinute());
+
+        // Check if the local time has passed, if so return the same time yesterday.
+        return ldt.isAfter(compareTime) ? ldt.minusDays(1) : ldt;
+    }
+
+    /**
+     * Returns the first date time corresponding to this local time that occurs after the
+     * provided date time.
+     *
+     * @param compareTime the LocalDateTime to compare against
+     * @return the next LocalDateTime corresponding to this local time
+     */
+    public static LocalDateTime getDateTimeAfter(LocalTime localTime, LocalDateTime compareTime) {
+        final LocalDateTime ldt = LocalDateTime.of(compareTime.getYear(), compareTime.getMonth(),
+                compareTime.getDayOfMonth(), localTime.getHour(), localTime.getMinute());
+
+        // Check if the local time has passed, if so return the same time tomorrow.
+        return ldt.isBefore(compareTime) ? ldt.plusDays(1) : ldt;
+    }
+
     private abstract class AutoMode implements NightDisplayController.Callback {
         public abstract void onStart();
 
@@ -445,10 +477,10 @@
         private final AlarmManager mAlarmManager;
         private final BroadcastReceiver mTimeChangedReceiver;
 
-        private NightDisplayController.LocalTime mStartTime;
-        private NightDisplayController.LocalTime mEndTime;
+        private LocalTime mStartTime;
+        private LocalTime mEndTime;
 
-        private Calendar mLastActivatedTime;
+        private LocalDateTime mLastActivatedTime;
 
         CustomAutoMode() {
             mAlarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
@@ -461,31 +493,15 @@
         }
 
         private void updateActivated() {
-            final Calendar now = Calendar.getInstance();
-            final Calendar startTime = mStartTime.getDateTimeBefore(now);
-            final Calendar endTime = mEndTime.getDateTimeAfter(startTime);
+            final LocalDateTime now = LocalDateTime.now();
+            final LocalDateTime start = getDateTimeBefore(mStartTime, now);
+            final LocalDateTime end = getDateTimeAfter(mEndTime, start);
+            boolean activate = now.isBefore(end);
 
-            boolean activate = now.before(endTime);
             if (mLastActivatedTime != null) {
-                // Convert mLastActivatedTime to the current timezone if needed.
-                final TimeZone currentTimeZone = now.getTimeZone();
-                if (!currentTimeZone.equals(mLastActivatedTime.getTimeZone())) {
-                    final int year = mLastActivatedTime.get(Calendar.YEAR);
-                    final int dayOfYear = mLastActivatedTime.get(Calendar.DAY_OF_YEAR);
-                    final int hourOfDay = mLastActivatedTime.get(Calendar.HOUR_OF_DAY);
-                    final int minute = mLastActivatedTime.get(Calendar.MINUTE);
-
-                    mLastActivatedTime.setTimeZone(currentTimeZone);
-                    mLastActivatedTime.set(Calendar.YEAR, year);
-                    mLastActivatedTime.set(Calendar.DAY_OF_YEAR, dayOfYear);
-                    mLastActivatedTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
-                    mLastActivatedTime.set(Calendar.MINUTE, minute);
-                }
-
                 // Maintain the existing activated state if within the current period.
-                if (mLastActivatedTime.before(now)
-                        && mLastActivatedTime.after(startTime)
-                        && (mLastActivatedTime.after(endTime) || now.before(endTime))) {
+                if (mLastActivatedTime.isBefore(now) && mLastActivatedTime.isAfter(start)
+                        && (mLastActivatedTime.isAfter(end) || now.isBefore(end))) {
                     activate = mController.isActivated();
                 }
             }
@@ -493,14 +509,16 @@
             if (mIsActivated == null || mIsActivated != activate) {
                 mController.setActivated(activate);
             }
+
             updateNextAlarm(mIsActivated, now);
         }
 
-        private void updateNextAlarm(@Nullable Boolean activated, @NonNull Calendar now) {
+        private void updateNextAlarm(@Nullable Boolean activated, @NonNull LocalDateTime now) {
             if (activated != null) {
-                final Calendar next = activated ? mEndTime.getDateTimeAfter(now)
-                        : mStartTime.getDateTimeAfter(now);
-                mAlarmManager.setExact(AlarmManager.RTC, next.getTimeInMillis(), TAG, this, null);
+                final LocalDateTime next = activated ? getDateTimeAfter(mEndTime, now)
+                        : getDateTimeAfter(mStartTime, now);
+                final long millis = next.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
+                mAlarmManager.setExact(AlarmManager.RTC, millis, TAG, this, null);
             }
         }
 
@@ -530,18 +548,18 @@
         @Override
         public void onActivated(boolean activated) {
             mLastActivatedTime = mController.getLastActivatedTime();
-            updateNextAlarm(activated, Calendar.getInstance());
+            updateNextAlarm(activated, LocalDateTime.now());
         }
 
         @Override
-        public void onCustomStartTimeChanged(NightDisplayController.LocalTime startTime) {
+        public void onCustomStartTimeChanged(LocalTime startTime) {
             mStartTime = startTime;
             mLastActivatedTime = null;
             updateActivated();
         }
 
         @Override
-        public void onCustomEndTimeChanged(NightDisplayController.LocalTime endTime) {
+        public void onCustomEndTimeChanged(LocalTime endTime) {
             mEndTime = endTime;
             mLastActivatedTime = null;
             updateActivated();
@@ -570,15 +588,14 @@
             }
 
             boolean activate = state.isNight();
-            final Calendar lastActivatedTime = mController.getLastActivatedTime();
+            final LocalDateTime lastActivatedTime = mController.getLastActivatedTime();
             if (lastActivatedTime != null) {
-                final Calendar now = Calendar.getInstance();
-                final Calendar sunrise = state.sunrise();
-                final Calendar sunset = state.sunset();
-
+                final LocalDateTime now = LocalDateTime.now();
+                final LocalDateTime sunrise = state.sunrise();
+                final LocalDateTime sunset = state.sunset();
                 // Maintain the existing activated state if within the current period.
-                if (lastActivatedTime.before(now)
-                        && (lastActivatedTime.after(sunrise) ^ lastActivatedTime.after(sunset))) {
+                if (lastActivatedTime.isBefore(now) && (lastActivatedTime.isBefore(sunrise)
+                        ^ lastActivatedTime.isBefore(sunset))) {
                     activate = mController.isActivated();
                 }
             }
diff --git a/services/core/java/com/android/server/display/PersistentDataStore.java b/services/core/java/com/android/server/display/PersistentDataStore.java
index 47701b9..34c8e22 100644
--- a/services/core/java/com/android/server/display/PersistentDataStore.java
+++ b/services/core/java/com/android/server/display/PersistentDataStore.java
@@ -23,6 +23,7 @@
 import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlSerializer;
 
+import android.graphics.Point;
 import android.hardware.display.WifiDisplay;
 import android.util.AtomicFile;
 import android.util.Slog;
@@ -60,6 +61,10 @@
  *          &lt;color-mode>0&lt;/color-mode>
  *      &lt;/display>
  *  &lt;/display-states>
+ *  &lt;stable-device-values>
+ *      &lt;stable-display-height>1920&lt;stable-display-height>
+ *      &lt;stable-display-width>1080&lt;stable-display-width>
+ *  &lt;/stable-device-values>
  * &lt;/display-manager-state>
  * </code>
  *
@@ -75,6 +80,9 @@
     private final HashMap<String, DisplayState> mDisplayStates =
             new HashMap<String, DisplayState>();
 
+    // Display values which should be stable across the device's lifetime.
+    private final StableDeviceValues mStableDeviceValues = new StableDeviceValues();
+
     // The atomic file used to safely read or write the file.
     private final AtomicFile mAtomicFile;
 
@@ -162,6 +170,7 @@
     }
 
     public boolean forgetWifiDisplay(String deviceAddress) {
+		loadIfNeeded();
         int index = findRememberedWifiDisplay(deviceAddress);
         if (index >= 0) {
             mRememberedWifiDisplays.remove(index);
@@ -204,6 +213,18 @@
         return false;
     }
 
+	public Point getStableDisplaySize() {
+		loadIfNeeded();
+		return mStableDeviceValues.getDisplaySize();
+	}
+
+	public void setStableDisplaySize(Point size) {
+		loadIfNeeded();
+		if (mStableDeviceValues.setDisplaySize(size)) {
+			setDirty();
+		}
+	}
+
     private DisplayState getDisplayState(String uniqueId, boolean createIfAbsent) {
         loadIfNeeded();
         DisplayState state = mDisplayStates.get(uniqueId);
@@ -290,6 +311,9 @@
             if (parser.getName().equals("display-states")) {
                 loadDisplaysFromXml(parser);
             }
+            if (parser.getName().equals("stable-device-values")) {
+                mStableDeviceValues.loadFromXml(parser);
+            }
         }
     }
 
@@ -363,6 +387,9 @@
             serializer.endTag(null, "display");
         }
         serializer.endTag(null, "display-states");
+        serializer.startTag(null, "stable-device-values");
+        mStableDeviceValues.saveToXml(serializer);
+        serializer.endTag(null, "stable-device-values");
         serializer.endTag(null, "display-manager-state");
         serializer.endDocument();
     }
@@ -382,6 +409,8 @@
             pw.println("    " + i++ + ": " + entry.getKey());
             entry.getValue().dump(pw, "      ");
         }
+        pw.println("  StableDeviceValues:");
+        mStableDeviceValues.dump(pw, "      ");
     }
 
     private static final class DisplayState {
@@ -417,8 +446,66 @@
             serializer.endTag(null, "color-mode");
         }
 
-        private void dump(final PrintWriter pw, final String prefix) {
+        public void dump(final PrintWriter pw, final String prefix) {
             pw.println(prefix + "ColorMode=" + mColorMode);
         }
     }
+
+    private static final class StableDeviceValues {
+        private int mWidth;
+        private int mHeight;
+
+        private Point getDisplaySize() {
+            return new Point(mWidth, mHeight);
+        }
+
+        public boolean setDisplaySize(Point r) {
+            if (mWidth != r.x || mHeight != r.y) {
+                mWidth = r.x;
+                mHeight = r.y;
+                return true;
+            }
+            return false;
+        }
+
+        public void loadFromXml(XmlPullParser parser) throws IOException, XmlPullParserException {
+            final int outerDepth = parser.getDepth();
+            while (XmlUtils.nextElementWithin(parser, outerDepth)) {
+                switch (parser.getName()) {
+                    case "stable-display-width":
+                        mWidth = loadIntValue(parser);
+                        break;
+                    case "stable-display-height":
+                        mHeight = loadIntValue(parser);
+                        break;
+                }
+            }
+        }
+
+        private static int loadIntValue(XmlPullParser parser)
+            throws IOException, XmlPullParserException {
+            try {
+                String value = parser.nextText();
+                return Integer.parseInt(value);
+            } catch (NumberFormatException nfe) {
+                return 0;
+            }
+        }
+
+        public void saveToXml(XmlSerializer serializer) throws IOException {
+            if (mWidth > 0 && mHeight > 0) {
+                serializer.startTag(null, "stable-display-width");
+                serializer.text(Integer.toString(mWidth));
+                serializer.endTag(null, "stable-display-width");
+                serializer.startTag(null, "stable-display-height");
+                serializer.text(Integer.toString(mHeight));
+                serializer.endTag(null, "stable-display-height");
+            }
+        }
+
+        public void dump(final PrintWriter pw, final String prefix) {
+            pw.println(prefix + "StableDisplayWidth=" + mWidth);
+            pw.println(prefix + "StableDisplayHeight=" + mHeight);
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
index d6ab888..f86d576 100644
--- a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
@@ -24,6 +24,8 @@
 import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_SECURE;
 import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_SUPPORTS_TOUCH;
 import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_ROTATES_WITH_CONTENT;
+import static android.hardware.display.DisplayManager
+        .VIRTUAL_DISPLAY_FLAG_DESTROY_CONTENT_ON_REMOVAL;
 
 import android.content.Context;
 import android.hardware.display.IVirtualDisplayCallback;
@@ -363,6 +365,9 @@
                 if ((mFlags & VIRTUAL_DISPLAY_FLAG_ROTATES_WITH_CONTENT) != 0) {
                     mInfo.flags |= DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
                 }
+                if ((mFlags & VIRTUAL_DISPLAY_FLAG_DESTROY_CONTENT_ON_REMOVAL) != 0) {
+                  mInfo.flags |= DisplayDeviceInfo.FLAG_DESTROY_CONTENT_ON_REMOVAL;
+                }
 
                 mInfo.type = Display.TYPE_VIRTUAL;
                 mInfo.touch = ((mFlags & VIRTUAL_DISPLAY_FLAG_SUPPORTS_TOUCH) == 0) ?
diff --git a/services/core/java/com/android/server/fingerprint/EnumerateClient.java b/services/core/java/com/android/server/fingerprint/EnumerateClient.java
index 12827d0..b6bbd1b 100644
--- a/services/core/java/com/android/server/fingerprint/EnumerateClient.java
+++ b/services/core/java/com/android/server/fingerprint/EnumerateClient.java
@@ -95,7 +95,7 @@
         } catch (RemoteException e) {
             Slog.w(TAG, "Failed to notify enumerated:", e);
         }
-        return fingerId == 0; // done when id hits 0
+        return remaining == 0;
     }
 
     @Override
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
index 6cc7071..b1c165e 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
@@ -921,7 +921,9 @@
 
                         @Override
                         public void sendResult(Bundle data) throws RemoteException {
-                            mWakeLock.release();
+                            if (mWakeLock.isHeld()) {
+                                mWakeLock.release();
+                            }
                         }
                     });
                 } catch (DeadObjectException e) {
@@ -1079,18 +1081,19 @@
                 final IFingerprintServiceReceiver receiver, final int flags,
                 final String opPackageName) {
             final int callingUid = Binder.getCallingUid();
+            final int callingPid = Binder.getCallingPid();
             final int callingUserId = UserHandle.getCallingUserId();
-            final int pid = Binder.getCallingPid();
             final boolean restricted = isRestricted();
+
+            if (!canUseFingerprint(opPackageName, true /* foregroundOnly */, callingUid, callingPid,
+                    callingUserId)) {
+                if (DEBUG) Slog.v(TAG, "authenticate(): reject " + opPackageName);
+                return;
+            }
+
             mHandler.post(new Runnable() {
                 @Override
                 public void run() {
-                    if (!canUseFingerprint(opPackageName, true /* foregroundOnly */,
-                            callingUid, pid, callingUserId)) {
-                        if (DEBUG) Slog.v(TAG, "authenticate(): reject " + opPackageName);
-                        return;
-                    }
-
                     MetricsLogger.histogram(mContext, "fingerprint_token", opId != 0L ? 1 : 0);
 
                     // Get performance stats object for this user.
@@ -1111,29 +1114,31 @@
 
         @Override // Binder call
         public void cancelAuthentication(final IBinder token, final String opPackageName) {
-            final int uid = Binder.getCallingUid();
-            final int pid = Binder.getCallingPid();
+            final int callingUid = Binder.getCallingUid();
+            final int callingPid = Binder.getCallingPid();
             final int callingUserId = UserHandle.getCallingUserId();
+
+            if (!canUseFingerprint(opPackageName, true /* foregroundOnly */, callingUid, callingPid,
+                    callingUserId)) {
+                if (DEBUG) Slog.v(TAG, "cancelAuthentication(): reject " + opPackageName);
+                return;
+            }
+
             mHandler.post(new Runnable() {
                 @Override
                 public void run() {
-                    if (!canUseFingerprint(opPackageName, true /* foregroundOnly */, uid, pid,
-                            callingUserId)) {
-                        if (DEBUG) Slog.v(TAG, "cancelAuthentication(): reject " + opPackageName);
-                    } else {
-                        ClientMonitor client = mCurrentClient;
-                        if (client instanceof AuthenticationClient) {
-                            if (client.getToken() == token) {
-                                if (DEBUG) Slog.v(TAG, "stop client " + client.getOwnerString());
-                                client.stop(client.getToken() == token);
-                            } else {
-                                if (DEBUG) Slog.v(TAG, "can't stop client "
-                                        + client.getOwnerString() + " since tokens don't match");
-                            }
-                        } else if (client != null) {
-                            if (DEBUG) Slog.v(TAG, "can't cancel non-authenticating client "
-                                    + client.getOwnerString());
+                    ClientMonitor client = mCurrentClient;
+                    if (client instanceof AuthenticationClient) {
+                        if (client.getToken() == token) {
+                            if (DEBUG) Slog.v(TAG, "stop client " + client.getOwnerString());
+                            client.stop(client.getToken() == token);
+                        } else {
+                            if (DEBUG) Slog.v(TAG, "can't stop client "
+                                    + client.getOwnerString() + " since tokens don't match");
                         }
+                    } else if (client != null) {
+                        if (DEBUG) Slog.v(TAG, "can't cancel non-authenticating client "
+                                + client.getOwnerString());
                     }
                 }
             });
diff --git a/services/core/java/com/android/server/fingerprint/InternalEnumerateClient.java b/services/core/java/com/android/server/fingerprint/InternalEnumerateClient.java
index f4d2596..88d9ef4 100644
--- a/services/core/java/com/android/server/fingerprint/InternalEnumerateClient.java
+++ b/services/core/java/com/android/server/fingerprint/InternalEnumerateClient.java
@@ -88,7 +88,7 @@
             doFingerprintCleanup();
         }
 
-        return fingerId == 0; // done when id hits 0
+        return remaining == 0;
     }
 
 }
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index a50ec49f..81bccdc 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -851,6 +851,7 @@
                 mSystemAudioActivated = on;
                 mService.announceSystemAudioModeChange(on);
             }
+            startArcAction(on);
         }
     }
 
diff --git a/services/core/java/com/android/server/hdmi/HdmiLogger.java b/services/core/java/com/android/server/hdmi/HdmiLogger.java
index 537df81..ebe52c0 100644
--- a/services/core/java/com/android/server/hdmi/HdmiLogger.java
+++ b/services/core/java/com/android/server/hdmi/HdmiLogger.java
@@ -44,7 +44,6 @@
     private static final long ERROR_LOG_DURATTION_MILLIS = 20 * 1000;  // 20s
 
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-    private static final boolean IS_USER_BUILD = "user".equals(Build.TYPE);
 
     private static final ThreadLocal<HdmiLogger> sLogger = new ThreadLocal<>();
 
diff --git a/services/core/java/com/android/server/input/InputForwarder.java b/services/core/java/com/android/server/input/InputForwarder.java
new file mode 100644
index 0000000..bebbc93
--- /dev/null
+++ b/services/core/java/com/android/server/input/InputForwarder.java
@@ -0,0 +1,46 @@
+/*
+ * 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.input;
+
+import android.app.IInputForwarder;
+import android.hardware.input.InputManagerInternal;
+import android.view.InputEvent;
+import android.os.Binder;
+
+import com.android.server.LocalServices;
+
+import static android.hardware.input.InputManager.INJECT_INPUT_EVENT_MODE_ASYNC;
+
+/**
+ * Basic implementation of {@link IInputForwarder}.
+ */
+class InputForwarder extends IInputForwarder.Stub {
+
+    private final InputManagerInternal mInputManagerInternal;
+    private final int mDisplayId;
+
+    InputForwarder(int displayId) {
+        mDisplayId = displayId;
+        mInputManagerInternal = LocalServices.getService(InputManagerInternal.class);
+    }
+
+    @Override
+    public boolean forwardEvent(InputEvent event) {
+        return mInputManagerInternal.injectInputEvent(event, mDisplayId,
+                INJECT_INPUT_EVENT_MODE_ASYNC);
+    }
+}
\ No newline at end of file
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index 717efbf..fa9b107 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -37,6 +37,7 @@
 import org.xmlpull.v1.XmlPullParser;
 
 import android.Manifest;
+import android.app.IInputForwarder;
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
@@ -57,6 +58,7 @@
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
 import android.database.ContentObserver;
+import android.hardware.display.DisplayManager;
 import android.hardware.display.DisplayViewport;
 import android.hardware.input.IInputDevicesChangedListener;
 import android.hardware.input.IInputManager;
@@ -85,6 +87,7 @@
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.Xml;
+import android.view.Display;
 import android.view.IInputFilter;
 import android.view.IInputFilterHost;
 import android.view.IWindow;
@@ -1862,6 +1865,29 @@
         nativeMonitor(mPtr);
     }
 
+    // Binder call
+    @Override
+    public IInputForwarder createInputForwarder(int displayId) throws RemoteException {
+        if (!checkCallingPermission(android.Manifest.permission.INJECT_EVENTS,
+                "createInputForwarder()")) {
+            throw new SecurityException("Requires INJECT_EVENTS permission");
+        }
+        final DisplayManager displayManager = mContext.getSystemService(DisplayManager.class);
+        final Display display = displayManager.getDisplay(displayId);
+        if (display == null) {
+            throw new IllegalArgumentException(
+                    "Can't create input forwarder for non-existent displayId: " + displayId);
+        }
+        final int callingUid = Binder.getCallingUid();
+        final int displayOwnerUid = display.getOwnerUid();
+        if (callingUid != displayOwnerUid) {
+            throw new SecurityException(
+                    "Only owner of the display can forward input events to it.");
+        }
+
+        return new InputForwarder(displayId);
+    }
+
     // Native callback.
     private void notifyConfigurationChanged(long whenNanos) {
         mWindowManagerCallbacks.notifyConfigurationChanged();
diff --git a/services/core/java/com/android/server/job/JobPackageTracker.java b/services/core/java/com/android/server/job/JobPackageTracker.java
index ba92295..025ff0b 100644
--- a/services/core/java/com/android/server/job/JobPackageTracker.java
+++ b/services/core/java/com/android/server/job/JobPackageTracker.java
@@ -17,11 +17,13 @@
 package com.android.server.job;
 
 import android.app.job.JobInfo;
+import android.app.job.JobParameters;
 import android.os.SystemClock;
 import android.os.UserHandle;
 import android.text.format.DateFormat;
 import android.util.ArrayMap;
 import android.util.SparseArray;
+import android.util.SparseIntArray;
 import android.util.TimeUtils;
 import com.android.internal.util.RingBufferIndices;
 import com.android.server.job.controllers.JobStatus;
@@ -36,6 +38,9 @@
 
     private static final int EVENT_BUFFER_SIZE = 100;
 
+    public static final int EVENT_CMD_MASK = 0xff;
+    public static final int EVENT_STOP_REASON_SHIFT = 8;
+    public static final int EVENT_STOP_REASON_MASK = 0xff << EVENT_STOP_REASON_SHIFT;
     public static final int EVENT_NULL = 0;
     public static final int EVENT_START_JOB = 1;
     public static final int EVENT_STOP_JOB = 2;
@@ -49,9 +54,9 @@
     private final String[] mEventTags = new String[EVENT_BUFFER_SIZE];
     private final int[] mEventJobIds = new int[EVENT_BUFFER_SIZE];
 
-    public void addEvent(int cmd, int uid, String tag, int jobId) {
+    public void addEvent(int cmd, int uid, String tag, int jobId, int stopReason) {
         int index = mEventIndices.add();
-        mEventCmds[index] = cmd;
+        mEventCmds[index] = cmd | ((stopReason<<EVENT_STOP_REASON_SHIFT) & EVENT_STOP_REASON_MASK);
         mEventTimes[index] = SystemClock.elapsedRealtime();
         mEventUids[index] = uid;
         mEventTags[index] = tag;
@@ -77,6 +82,7 @@
         int pendingNesting;
         int pendingCount;
         boolean hadPending;
+        final SparseIntArray stopReasons = new SparseIntArray();
 
         public long getActiveTime(long now) {
             long time = pastActiveTime;
@@ -179,12 +185,14 @@
             pe.activeNesting++;
         }
 
-        void decActive(int uid, String pkg, long now) {
+        void decActive(int uid, String pkg, long now, int stopReason) {
             PackageEntry pe = getOrCreateEntry(uid, pkg);
             if (pe.activeNesting == 1) {
                 pe.pastActiveTime += now - pe.activeStartTime;
             }
             pe.activeNesting--;
+            int count = pe.stopReasons.get(stopReason, 0);
+            pe.stopReasons.put(stopReason, count+1);
         }
 
         void incActiveTop(int uid, String pkg, long now) {
@@ -196,12 +204,14 @@
             pe.activeTopNesting++;
         }
 
-        void decActiveTop(int uid, String pkg, long now) {
+        void decActiveTop(int uid, String pkg, long now, int stopReason) {
             PackageEntry pe = getOrCreateEntry(uid, pkg);
             if (pe.activeTopNesting == 1) {
                 pe.pastActiveTopTime += now - pe.activeTopStartTime;
             }
             pe.activeTopNesting--;
+            int count = pe.stopReasons.get(stopReason, 0);
+            pe.stopReasons.put(stopReason, count+1);
         }
 
         void finish(DataSet next, long now) {
@@ -261,6 +271,11 @@
                         outPe.pastPendingTime += now - pe.pendingStartTime;
                         outPe.hadPending = true;
                     }
+                    for (int k = pe.stopReasons.size()-1; k >= 0; k--) {
+                        int type = pe.stopReasons.keyAt(k);
+                        outPe.stopReasons.put(type, outPe.stopReasons.get(type, 0)
+                                + pe.stopReasons.valueAt(k));
+                    }
                 }
             }
             if (mMaxTotalActive > out.mMaxTotalActive) {
@@ -312,7 +327,8 @@
                     pw.print(prefix); pw.print("  ");
                     UserHandle.formatUid(pw, uid);
                     pw.print(" / "); pw.print(uidMap.keyAt(j));
-                    pw.print(":");
+                    pw.println(":");
+                    pw.print(prefix); pw.print("   ");
                     printDuration(pw, period, pe.getPendingTime(now), pe.pendingCount, "pending");
                     printDuration(pw, period, pe.getActiveTime(now), pe.activeCount, "active");
                     printDuration(pw, period, pe.getActiveTopTime(now), pe.activeTopCount,
@@ -327,6 +343,18 @@
                         pw.print(" (active-top)");
                     }
                     pw.println();
+                    if (pe.stopReasons.size() > 0) {
+                        pw.print(prefix); pw.print("    ");
+                        for (int k = 0; k < pe.stopReasons.size(); k++) {
+                            if (k > 0) {
+                                pw.print(", ");
+                            }
+                            pw.print(pe.stopReasons.valueAt(k));
+                            pw.print("x ");
+                            pw.print(JobParameters.getReasonName(pe.stopReasons.keyAt(k)));
+                        }
+                        pw.println();
+                    }
                 }
             }
             pw.print(prefix); pw.print("  Max concurrency: ");
@@ -370,19 +398,20 @@
             mCurDataSet.incActive(job.getSourceUid(), job.getSourcePackageName(), now);
         }
         addEvent(job.getJob().isPeriodic() ? EVENT_START_PERIODIC_JOB :  EVENT_START_JOB,
-                job.getSourceUid(), job.getBatteryName(), job.getJobId());
+                job.getSourceUid(), job.getBatteryName(), job.getJobId(), 0);
     }
 
-    public void noteInactive(JobStatus job) {
+    public void noteInactive(JobStatus job, int stopReason) {
         final long now = SystemClock.uptimeMillis();
         if (job.lastEvaluatedPriority >= JobInfo.PRIORITY_TOP_APP) {
-            mCurDataSet.decActiveTop(job.getSourceUid(), job.getSourcePackageName(), now);
+            mCurDataSet.decActiveTop(job.getSourceUid(), job.getSourcePackageName(), now,
+                    stopReason);
         } else {
-            mCurDataSet.decActive(job.getSourceUid(), job.getSourcePackageName(), now);
+            mCurDataSet.decActive(job.getSourceUid(), job.getSourcePackageName(), now, stopReason);
         }
         rebatchIfNeeded(now);
         addEvent(job.getJob().isPeriodic() ? EVENT_STOP_JOB :  EVENT_STOP_PERIODIC_JOB,
-                job.getSourceUid(), job.getBatteryName(), job.getJobId());
+                job.getSourceUid(), job.getBatteryName(), job.getJobId(), stopReason);
     }
 
     public void noteConcurrency(int totalActive, int fgActive) {
@@ -448,12 +477,12 @@
             if (filterUid != -1 && filterUid != UserHandle.getAppId(uid)) {
                 continue;
             }
-            final int cmd = mEventCmds[index];
+            final int cmd = mEventCmds[index] & EVENT_CMD_MASK;
             if (cmd == EVENT_NULL) {
                 continue;
             }
             final String label;
-            switch (mEventCmds[index]) {
+            switch (cmd) {
                 case EVENT_START_JOB:           label = "  START"; break;
                 case EVENT_STOP_JOB:            label = "   STOP"; break;
                 case EVENT_START_PERIODIC_JOB:  label = "START-P"; break;
@@ -469,7 +498,13 @@
             pw.print("/");
             pw.print(mEventJobIds[index]);
             pw.print(" ");
-            pw.println(mEventTags[index]);
+            pw.print(mEventTags[index]);
+            if (cmd == EVENT_STOP_JOB || cmd == EVENT_STOP_PERIODIC_JOB) {
+                pw.print(" ");
+                pw.print(JobParameters.getReasonName((mEventCmds[index] & EVENT_STOP_REASON_MASK)
+                        >> EVENT_STOP_REASON_SHIFT));
+            }
+            pw.println();
         }
         return true;
     }
diff --git a/services/core/java/com/android/server/job/JobSchedulerInternal.java b/services/core/java/com/android/server/job/JobSchedulerInternal.java
index bc6bd50..095526d 100644
--- a/services/core/java/com/android/server/job/JobSchedulerInternal.java
+++ b/services/core/java/com/android/server/job/JobSchedulerInternal.java
@@ -37,4 +37,45 @@
     void addBackingUpUid(int uid);
     void removeBackingUpUid(int uid);
     void clearAllBackingUpUids();
+
+    JobStorePersistStats getPersistStats();
+
+    /**
+     * Stats about the first load after boot and the most recent save.
+     * STOPSHIP Remove it and the relevant code once b/64536115 is fixed.
+     */
+    public class JobStorePersistStats {
+        public int countAllJobsLoaded = -1;
+        public int countSystemServerJobsLoaded = -1;
+        public int countSystemSyncManagerJobsLoaded = -1;
+
+        public int countAllJobsSaved = -1;
+        public int countSystemServerJobsSaved = -1;
+        public int countSystemSyncManagerJobsSaved = -1;
+
+        public JobStorePersistStats() {
+        }
+
+        public JobStorePersistStats(JobStorePersistStats source) {
+            countAllJobsLoaded = source.countAllJobsLoaded;
+            countSystemServerJobsLoaded = source.countSystemServerJobsLoaded;
+            countSystemSyncManagerJobsLoaded = source.countSystemSyncManagerJobsLoaded;
+
+            countAllJobsSaved = source.countAllJobsSaved;
+            countSystemServerJobsSaved = source.countSystemServerJobsSaved;
+            countSystemSyncManagerJobsSaved = source.countSystemSyncManagerJobsSaved;
+        }
+
+        @Override
+        public String toString() {
+            return "FirstLoad: "
+                    + countAllJobsLoaded + "/"
+                    + countSystemServerJobsLoaded + "/"
+                    + countSystemSyncManagerJobsLoaded
+                    + " LastSave: "
+                    + countAllJobsSaved + "/"
+                    + countSystemServerJobsSaved + "/"
+                    + countSystemSyncManagerJobsSaved;
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java
index 7cacdb8..4dab32c 100644
--- a/services/core/java/com/android/server/job/JobSchedulerService.java
+++ b/services/core/java/com/android/server/job/JobSchedulerService.java
@@ -76,6 +76,7 @@
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.DumpUtils;
 import com.android.server.DeviceIdleController;
+import com.android.server.FgThread;
 import com.android.server.LocalServices;
 import com.android.server.job.JobStore.JobStatusFunctor;
 import com.android.server.job.controllers.AppIdleController;
@@ -500,11 +501,12 @@
             if (DEBUG) {
                 Slog.d(TAG, "Receieved: " + action);
             }
+            final String pkgName = getPackageName(intent);
+            final int pkgUid = intent.getIntExtra(Intent.EXTRA_UID, -1);
+
             if (Intent.ACTION_PACKAGE_CHANGED.equals(action)) {
                 // Purge the app's jobs if the whole package was just disabled.  When this is
                 // the case the component name will be a bare package name.
-                final String pkgName = getPackageName(intent);
-                final int pkgUid = intent.getIntExtra(Intent.EXTRA_UID, -1);
                 if (pkgName != null && pkgUid != -1) {
                     final String[] changedComponents = intent.getStringArrayExtra(
                             Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST);
@@ -524,7 +526,8 @@
                                             Slog.d(TAG, "Removing jobs for package " + pkgName
                                                     + " in user " + userId);
                                         }
-                                        cancelJobsForUid(pkgUid, "app package state changed");
+                                        cancelJobsForPackageAndUid(pkgName, pkgUid,
+                                                "app disabled");
                                     }
                                 } catch (RemoteException|IllegalArgumentException e) {
                                     /*
@@ -553,7 +556,7 @@
                     if (DEBUG) {
                         Slog.d(TAG, "Removing jobs for uid: " + uidRemoved);
                     }
-                    cancelJobsForUid(uidRemoved, "app uninstalled");
+                    cancelJobsForPackageAndUid(pkgName, uidRemoved, "app uninstalled");
                 }
             } else if (Intent.ACTION_USER_REMOVED.equals(action)) {
                 final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0);
@@ -564,8 +567,6 @@
             } else if (Intent.ACTION_QUERY_PACKAGE_RESTART.equals(action)) {
                 // Has this package scheduled any jobs, such that we will take action
                 // if it were to be force-stopped?
-                final int pkgUid = intent.getIntExtra(Intent.EXTRA_UID, -1);
-                final String pkgName = intent.getData().getSchemeSpecificPart();
                 if (pkgUid != -1) {
                     List<JobStatus> jobsForUid;
                     synchronized (mLock) {
@@ -584,13 +585,11 @@
                 }
             } else if (Intent.ACTION_PACKAGE_RESTARTED.equals(action)) {
                 // possible force-stop
-                final int pkgUid = intent.getIntExtra(Intent.EXTRA_UID, -1);
-                final String pkgName = intent.getData().getSchemeSpecificPart();
                 if (pkgUid != -1) {
                     if (DEBUG) {
                         Slog.d(TAG, "Removing jobs for pkg " + pkgName + " at uid " + pkgUid);
                     }
-                    cancelJobsForPackageAndUid(pkgName, pkgUid);
+                    cancelJobsForPackageAndUid(pkgName, pkgUid, "app force stopped");
                 }
             }
         }
@@ -603,12 +602,11 @@
     }
 
     final private IUidObserver mUidObserver = new IUidObserver.Stub() {
-        @Override public void onUidStateChanged(int uid, int procState,
-                long procStateSeq) throws RemoteException {
+        @Override public void onUidStateChanged(int uid, int procState, long procStateSeq) {
             updateUidState(uid, procState);
         }
 
-        @Override public void onUidGone(int uid, boolean disabled) throws RemoteException {
+        @Override public void onUidGone(int uid, boolean disabled) {
             updateUidState(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY);
             if (disabled) {
                 cancelJobsForUid(uid, "uid gone");
@@ -618,11 +616,14 @@
         @Override public void onUidActive(int uid) throws RemoteException {
         }
 
-        @Override public void onUidIdle(int uid, boolean disabled) throws RemoteException {
+        @Override public void onUidIdle(int uid, boolean disabled) {
             if (disabled) {
                 cancelJobsForUid(uid, "app uid idle");
             }
         }
+
+        @Override public void onUidCachedChanged(int uid, boolean cached) {
+        }
     };
 
     public Object getLock() {
@@ -759,13 +760,17 @@
         }
     }
 
-    void cancelJobsForPackageAndUid(String pkgName, int uid) {
+    void cancelJobsForPackageAndUid(String pkgName, int uid, String reason) {
+        if ("android".equals(pkgName)) {
+            Slog.wtfStack(TAG, "Can't cancel all jobs for system package");
+            return;
+        }
         synchronized (mLock) {
             final List<JobStatus> jobsForUid = mJobs.getJobsByUid(uid);
             for (int i = jobsForUid.size() - 1; i >= 0; i--) {
                 final JobStatus job = jobsForUid.get(i);
                 if (job.getSourcePackageName().equals(pkgName)) {
-                    cancelJobImplLocked(job, null, "app force stopped");
+                    cancelJobImplLocked(job, null, reason);
                 }
             }
         }
@@ -779,6 +784,10 @@
      *
      */
     public void cancelJobsForUid(int uid, String reason) {
+        if (uid == Process.SYSTEM_UID) {
+            Slog.wtfStack(TAG, "Can't cancel all jobs for system uid");
+            return;
+        }
         synchronized (mLock) {
             final List<JobStatus> jobsForUid = mJobs.getJobsByUid(uid);
             for (int i=0; i<jobsForUid.size(); i++) {
@@ -917,8 +926,57 @@
         mControllers.add(AppIdleController.get(this));
         mControllers.add(ContentObserverController.get(this));
         mControllers.add(DeviceIdleJobsController.get(this));
+
+        // If the job store determined that it can't yet reschedule persisted jobs,
+        // we need to start watching the clock.
+        if (!mJobs.jobTimesInflatedValid()) {
+            Slog.w(TAG, "!!! RTC not yet good; tracking time updates for job scheduling");
+            context.registerReceiver(mTimeSetReceiver, new IntentFilter(Intent.ACTION_TIME_CHANGED));
+        }
     }
 
+    private final BroadcastReceiver mTimeSetReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) {
+                // When we reach clock sanity, recalculate the temporal windows
+                // of all affected jobs.
+                if (mJobs.clockNowValidToInflate(System.currentTimeMillis())) {
+                    Slog.i(TAG, "RTC now valid; recalculating persisted job windows");
+
+                    // We've done our job now, so stop watching the time.
+                    context.unregisterReceiver(this);
+
+                    // And kick off the work to update the affected jobs, using a secondary
+                    // thread instead of chugging away here on the main looper thread.
+                    FgThread.getHandler().post(mJobTimeUpdater);
+                }
+            }
+        }
+    };
+
+    private final Runnable mJobTimeUpdater = () -> {
+        final ArrayList<JobStatus> toRemove = new ArrayList<>();
+        final ArrayList<JobStatus> toAdd = new ArrayList<>();
+        synchronized (mLock) {
+            // Note: we intentionally both look up the existing affected jobs and replace them
+            // with recalculated ones inside the same lock lifetime.
+            getJobStore().getRtcCorrectedJobsLocked(toAdd, toRemove);
+
+            // Now, at each position [i], we have both the existing JobStatus
+            // and the one that replaces it.
+            final int N = toAdd.size();
+            for (int i = 0; i < N; i++) {
+                final JobStatus oldJob = toRemove.get(i);
+                final JobStatus newJob = toAdd.get(i);
+                if (DEBUG) {
+                    Slog.v(TAG, "  replacing " + oldJob + " with " + newJob);
+                }
+                cancelJobImplLocked(oldJob, newJob, "deferred rtc calculation");
+            }
+        }
+    };
+
     @Override
     public void onStart() {
         publishLocalService(JobSchedulerInternal.class, new LocalService());
@@ -1783,6 +1841,13 @@
                 }
             }
         }
+
+        @Override
+        public JobStorePersistStats getPersistStats() {
+            synchronized (mLock) {
+                return new JobStorePersistStats(mJobs.getPersistStats());
+            }
+        }
     }
 
     /**
@@ -1963,7 +2028,6 @@
         @Override
         public void cancelAll() throws RemoteException {
             final int uid = Binder.getCallingUid();
-
             long ident = Binder.clearCallingIdentity();
             try {
                 JobSchedulerService.this.cancelJobsForUid(uid, "cancelAll() called by app");
@@ -2052,7 +2116,15 @@
         synchronized (mLock) {
             boolean foundSome = false;
             for (int i=0; i<mActiveServices.size(); i++) {
-                mActiveServices.get(i).timeoutIfExecutingLocked(pkgName, userId, hasJobId, jobId);
+                final JobServiceContext jc = mActiveServices.get(i);
+                final JobStatus js = jc.getRunningJobLocked();
+                if (jc.timeoutIfExecutingLocked(pkgName, userId, hasJobId, jobId)) {
+                    foundSome = true;
+                    pw.print("Timing out: ");
+                    js.printUniqueId(pw);
+                    pw.print(" ");
+                    pw.println(js.getServiceComponent().flattenToShortString());
+                }
             }
             if (!foundSome) {
                 pw.println("No matching executing jobs found.");
@@ -2397,6 +2469,9 @@
                 pw.print("mReportedActive="); pw.println(mReportedActive);
                 pw.print("mMaxActiveJobs="); pw.println(mMaxActiveJobs);
             }
+            pw.println();
+            pw.print("PersistStats: ");
+            pw.println(mJobs.getPersistStats());
         }
         pw.println();
     }
diff --git a/services/core/java/com/android/server/job/JobServiceContext.java b/services/core/java/com/android/server/job/JobServiceContext.java
index 107475f..d3fd3a9 100644
--- a/services/core/java/com/android/server/job/JobServiceContext.java
+++ b/services/core/java/com/android/server/job/JobServiceContext.java
@@ -219,6 +219,10 @@
                     isDeadlineExpired, triggeredUris, triggeredAuthorities);
             mExecutionStartTimeElapsed = SystemClock.elapsedRealtime();
 
+            // Once we'e begun executing a job, we by definition no longer care whether
+            // it was inflated from disk with not-yet-coherent delay/deadline bounds.
+            job.clearPersistedUtcTimes();
+
             mVerb = VERB_BINDING;
             scheduleOpTimeOutLocked();
             final Intent intent = new Intent().setComponent(job.getServiceComponent());
@@ -257,6 +261,13 @@
         return mRunningJob;
     }
 
+    /**
+     * Used only for debugging. Will return <code>"&lt;null&gt;"</code> if there is no job running.
+     */
+    private String getRunningJobNameLocked() {
+        return mRunningJob != null ? mRunningJob.toShortString() : "<null>";
+    }
+
     /** Called externally when a job that was scheduled for execution should be cancelled. */
     void cancelExecutingJobLocked(int reason, String debugReason) {
         doCancelLocked(reason, debugReason);
@@ -518,7 +529,7 @@
     /** Start the job on the service. */
     private void handleServiceBoundLocked() {
         if (DEBUG) {
-            Slog.d(TAG, "handleServiceBound for " + mRunningJob.toShortString());
+            Slog.d(TAG, "handleServiceBound for " + getRunningJobNameLocked());
         }
         if (mVerb != VERB_BINDING) {
             Slog.e(TAG, "Sending onStartJob for a job that isn't pending. "
@@ -635,36 +646,34 @@
     private void handleOpTimeoutLocked() {
         switch (mVerb) {
             case VERB_BINDING:
-                Slog.w(TAG, "Time-out while trying to bind " + mRunningJob.toShortString() +
-                        ", dropping.");
+                Slog.w(TAG, "Time-out while trying to bind " + getRunningJobNameLocked()
+                        + ", dropping.");
                 closeAndCleanupJobLocked(false /* needsReschedule */, "timed out while binding");
                 break;
             case VERB_STARTING:
                 // Client unresponsive - wedged or failed to respond in time. We don't really
                 // know what happened so let's log it and notify the JobScheduler
                 // FINISHED/NO-RETRY.
-                Slog.w(TAG, "No response from client for onStartJob " +
-                        mRunningJob != null ? mRunningJob.toShortString() : "<null>");
+                Slog.w(TAG, "No response from client for onStartJob "
+                        + getRunningJobNameLocked());
                 closeAndCleanupJobLocked(false /* needsReschedule */, "timed out while starting");
                 break;
             case VERB_STOPPING:
                 // At least we got somewhere, so fail but ask the JobScheduler to reschedule.
-                Slog.w(TAG, "No response from client for onStopJob " +
-                        mRunningJob != null ? mRunningJob.toShortString() : "<null>");
+                Slog.w(TAG, "No response from client for onStopJob "
+                        + getRunningJobNameLocked());
                 closeAndCleanupJobLocked(true /* needsReschedule */, "timed out while stopping");
                 break;
             case VERB_EXECUTING:
                 // Not an error - client ran out of time.
                 Slog.i(TAG, "Client timed out while executing (no jobFinished received), " +
-                        "sending onStop: "  +
-                        mRunningJob != null ? mRunningJob.toShortString() : "<null>");
+                        "sending onStop: " + getRunningJobNameLocked());
                 mParams.setStopReason(JobParameters.REASON_TIMEOUT);
                 sendStopMessageLocked("timeout while executing");
                 break;
             default:
-                Slog.e(TAG, "Handling timeout for an invalid job state: " +
-                        mRunningJob != null ? mRunningJob.toShortString() : "<null>"
-                        + ", dropping.");
+                Slog.e(TAG, "Handling timeout for an invalid job state: "
+                        + getRunningJobNameLocked() + ", dropping.");
                 closeAndCleanupJobLocked(false /* needsReschedule */, "invalid timeout");
         }
     }
@@ -681,6 +690,7 @@
             return;
         }
         try {
+            applyStoppedReasonLocked(reason);
             mVerb = VERB_STOPPING;
             scheduleOpTimeOutLocked();
             service.stopJob(mParams);
@@ -704,10 +714,10 @@
         }
         applyStoppedReasonLocked(reason);
         completedJob = mRunningJob;
-        mJobPackageTracker.noteInactive(completedJob);
+        mJobPackageTracker.noteInactive(completedJob, mParams.getStopReason());
         try {
             mBatteryStats.noteJobFinish(mRunningJob.getBatteryName(),
-                    mRunningJob.getSourceUid());
+                    mRunningJob.getSourceUid(), mParams.getStopReason());
         } catch (RemoteException e) {
             // Whatever.
         }
diff --git a/services/core/java/com/android/server/job/JobStore.java b/services/core/java/com/android/server/job/JobStore.java
index 84810be..aa9f77c 100644
--- a/services/core/java/com/android/server/job/JobStore.java
+++ b/services/core/java/com/android/server/job/JobStore.java
@@ -24,6 +24,7 @@
 import android.os.Environment;
 import android.os.Handler;
 import android.os.PersistableBundle;
+import android.os.Process;
 import android.os.SystemClock;
 import android.os.UserHandle;
 import android.text.format.DateUtils;
@@ -38,6 +39,7 @@
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.FastXmlSerializer;
 import com.android.server.IoThread;
+import com.android.server.job.JobSchedulerInternal.JobStorePersistStats;
 import com.android.server.job.controllers.JobStatus;
 
 import java.io.ByteArrayOutputStream;
@@ -72,10 +74,15 @@
 
     /** Threshold to adjust how often we want to write to the db. */
     private static final int MAX_OPS_BEFORE_WRITE = 1;
+
     final Object mLock;
     final JobSet mJobSet; // per-caller-uid tracking
     final Context mContext;
 
+    // Bookkeeping around incorrect boot-time system clock
+    private final long mXmlTimestamp;
+    private boolean mRtcGood;
+
     private int mDirtyOperations;
 
     private static final Object sSingletonLock = new Object();
@@ -84,6 +91,8 @@
     private final Handler mIoHandler = IoThread.getHandler();
     private static JobStore sSingleton;
 
+    private JobStorePersistStats mPersistInfo = new JobStorePersistStats();
+
     /** Used by the {@link JobSchedulerService} to instantiate the JobStore. */
     static JobStore initAndGet(JobSchedulerService jobManagerService) {
         synchronized (sSingletonLock) {
@@ -120,7 +129,52 @@
 
         mJobSet = new JobSet();
 
-        readJobMapFromDisk(mJobSet);
+        // If the current RTC is earlier than the timestamp on our persisted jobs file,
+        // we suspect that the RTC is uninitialized and so we cannot draw conclusions
+        // about persisted job scheduling.
+        //
+        // Note that if the persisted jobs file does not exist, we proceed with the
+        // assumption that the RTC is good.  This is less work and is safe: if the
+        // clock updates to sanity then we'll be saving the persisted jobs file in that
+        // correct state, which is normal; or we'll wind up writing the jobs file with
+        // an incorrect historical timestamp.  That's fine; at worst we'll reboot with
+        // a *correct* timestamp, see a bunch of overdue jobs, and run them; then
+        // settle into normal operation.
+        mXmlTimestamp = mJobsFile.getLastModifiedTime();
+        mRtcGood = (System.currentTimeMillis() > mXmlTimestamp);
+
+        readJobMapFromDisk(mJobSet, mRtcGood);
+    }
+
+    public boolean jobTimesInflatedValid() {
+        return mRtcGood;
+    }
+
+    public boolean clockNowValidToInflate(long now) {
+        return now >= mXmlTimestamp;
+    }
+
+    /**
+     * Find all the jobs that were affected by RTC clock uncertainty at boot time.  Returns
+     * parallel lists of the existing JobStatus objects and of new, equivalent JobStatus instances
+     * with now-corrected time bounds.
+     */
+    public void getRtcCorrectedJobsLocked(final ArrayList<JobStatus> toAdd,
+            final ArrayList<JobStatus> toRemove) {
+        final long elapsedNow = SystemClock.elapsedRealtime();
+
+        // Find the jobs that need to be fixed up, collecting them for post-iteration
+        // replacement with their new versions
+        forEachJob(job -> {
+            final Pair<Long, Long> utcTimes = job.getPersistedUtcTimes();
+            if (utcTimes != null) {
+                Pair<Long, Long> elapsedRuntimes =
+                        convertRtcBoundsToElapsed(utcTimes, elapsedNow);
+                toAdd.add(new JobStatus(job, elapsedRuntimes.first, elapsedRuntimes.second,
+                        0, job.getLastSuccessfulRunTime(), job.getLastFailedRunTime()));
+                toRemove.add(job);
+            }
+        });
     }
 
     /**
@@ -149,6 +203,10 @@
         return mJobSet.size();
     }
 
+    public JobStorePersistStats getPersistStats() {
+        return mPersistInfo;
+    }
+
     public int countJobsForUid(int uid) {
         return mJobSet.countJobsForUid(uid);
     }
@@ -241,8 +299,6 @@
     /**
      * Every time the state changes we write all the jobs in one swath, instead of trying to
      * track incremental changes.
-     * @return Whether the operation was successful. This will only fail for e.g. if the system is
-     * low on storage. If this happens, we continue as normal
      */
     private void maybeWriteStatusToDiskAsync() {
         mDirtyOperations++;
@@ -250,20 +306,21 @@
             if (DEBUG) {
                 Slog.v(TAG, "Writing jobs to disk.");
             }
-            mIoHandler.post(new WriteJobsMapToDiskRunnable());
+            mIoHandler.removeCallbacks(mWriteRunnable);
+            mIoHandler.post(mWriteRunnable);
         }
     }
 
     @VisibleForTesting
-    public void readJobMapFromDisk(JobSet jobSet) {
-        new ReadJobMapFromDiskRunnable(jobSet).run();
+    public void readJobMapFromDisk(JobSet jobSet, boolean rtcGood) {
+        new ReadJobMapFromDiskRunnable(jobSet, rtcGood).run();
     }
 
     /**
      * Runnable that writes {@link #mJobSet} out to xml.
      * NOTE: This Runnable locks on mLock
      */
-    private final class WriteJobsMapToDiskRunnable implements Runnable {
+    private final Runnable mWriteRunnable = new Runnable() {
         @Override
         public void run() {
             final long startElapsed = SystemClock.elapsedRealtime();
@@ -280,13 +337,16 @@
                 });
             }
             writeJobsMapImpl(storeCopy);
-            if (JobSchedulerService.DEBUG) {
+            if (DEBUG) {
                 Slog.v(TAG, "Finished writing, took " + (SystemClock.elapsedRealtime()
                         - startElapsed) + "ms");
             }
         }
 
         private void writeJobsMapImpl(List<JobStatus> jobList) {
+            int numJobs = 0;
+            int numSystemJobs = 0;
+            int numSyncJobs = 0;
             try {
                 ByteArrayOutputStream baos = new ByteArrayOutputStream();
                 XmlSerializer out = new FastXmlSerializer();
@@ -307,11 +367,19 @@
                     writeExecutionCriteriaToXml(out, jobStatus);
                     writeBundleToXml(jobStatus.getJob().getExtras(), out);
                     out.endTag(null, "job");
+
+                    numJobs++;
+                    if (jobStatus.getUid() == Process.SYSTEM_UID) {
+                        numSystemJobs++;
+                        if (isSyncJob(jobStatus)) {
+                            numSyncJobs++;
+                        }
+                    }
                 }
                 out.endTag(null, "job-info");
                 out.endDocument();
 
-                // Write out to disk in one fell sweep.
+                // Write out to disk in one fell swoop.
                 FileOutputStream fos = mJobsFile.startWrite();
                 fos.write(baos.toByteArray());
                 mJobsFile.finishWrite(fos);
@@ -324,6 +392,10 @@
                 if (DEBUG) {
                     Slog.d(TAG, "Error persisting bundle.", e);
                 }
+            } finally {
+                mPersistInfo.countAllJobsSaved = numJobs;
+                mPersistInfo.countSystemServerJobsSaved = numSystemJobs;
+                mPersistInfo.countSystemSyncManagerJobsSaved = numSyncJobs;
             }
         }
 
@@ -417,15 +489,27 @@
                 out.startTag(null, XML_TAG_ONEOFF);
             }
 
+            // If we still have the persisted times, we need to record those directly because
+            // we haven't yet been able to calculate the usual elapsed-timebase bounds
+            // correctly due to wall-clock uncertainty.
+            Pair <Long, Long> utcJobTimes = jobStatus.getPersistedUtcTimes();
+            if (DEBUG && utcJobTimes != null) {
+                Slog.i(TAG, "storing original UTC timestamps for " + jobStatus);
+            }
+
+            final long nowRTC = System.currentTimeMillis();
+            final long nowElapsed = SystemClock.elapsedRealtime();
             if (jobStatus.hasDeadlineConstraint()) {
                 // Wall clock deadline.
-                final long deadlineWallclock =  System.currentTimeMillis() +
-                        (jobStatus.getLatestRunTimeElapsed() - SystemClock.elapsedRealtime());
+                final long deadlineWallclock = (utcJobTimes == null)
+                        ? nowRTC + (jobStatus.getLatestRunTimeElapsed() - nowElapsed)
+                        : utcJobTimes.second;
                 out.attribute(null, "deadline", Long.toString(deadlineWallclock));
             }
             if (jobStatus.hasTimingDelayConstraint()) {
-                final long delayWallclock = System.currentTimeMillis() +
-                        (jobStatus.getEarliestRunTime() - SystemClock.elapsedRealtime());
+                final long delayWallclock = (utcJobTimes == null)
+                        ? nowRTC + (jobStatus.getEarliestRunTime() - nowElapsed)
+                        : utcJobTimes.first;
                 out.attribute(null, "delay", Long.toString(delayWallclock));
             }
 
@@ -443,6 +527,30 @@
                 out.endTag(null, XML_TAG_ONEOFF);
             }
         }
+    };
+
+    /**
+     * Translate the supplied RTC times to the elapsed timebase, with clamping appropriate
+     * to interpreting them as a job's delay + deadline times for alarm-setting purposes.
+     * @param rtcTimes a Pair<Long, Long> in which {@code first} is the "delay" earliest
+     *     allowable runtime for the job, and {@code second} is the "deadline" time at which
+     *     the job becomes overdue.
+     */
+    private static Pair<Long, Long> convertRtcBoundsToElapsed(Pair<Long, Long> rtcTimes,
+            long nowElapsed) {
+        final long nowWallclock = System.currentTimeMillis();
+        final long earliest = (rtcTimes.first > JobStatus.NO_EARLIEST_RUNTIME)
+                ? nowElapsed + Math.max(rtcTimes.first - nowWallclock, 0)
+                : JobStatus.NO_EARLIEST_RUNTIME;
+        final long latest = (rtcTimes.second < JobStatus.NO_LATEST_RUNTIME)
+                ? nowElapsed + Math.max(rtcTimes.second - nowWallclock, 0)
+                : JobStatus.NO_LATEST_RUNTIME;
+        return Pair.create(earliest, latest);
+    }
+
+    private static boolean isSyncJob(JobStatus status) {
+        return com.android.server.content.SyncJobService.class.getName()
+                .equals(status.getServiceComponent().getClassName());
     }
 
     /**
@@ -451,22 +559,27 @@
      */
     private final class ReadJobMapFromDiskRunnable implements Runnable {
         private final JobSet jobSet;
+        private final boolean rtcGood;
 
         /**
          * @param jobSet Reference to the (empty) set of JobStatus objects that back the JobStore,
          *               so that after disk read we can populate it directly.
          */
-        ReadJobMapFromDiskRunnable(JobSet jobSet) {
+        ReadJobMapFromDiskRunnable(JobSet jobSet, boolean rtcIsGood) {
             this.jobSet = jobSet;
+            this.rtcGood = rtcIsGood;
         }
 
         @Override
         public void run() {
+            int numJobs = 0;
+            int numSystemJobs = 0;
+            int numSyncJobs = 0;
             try {
                 List<JobStatus> jobs;
                 FileInputStream fis = mJobsFile.openRead();
                 synchronized (mLock) {
-                    jobs = readJobMapImpl(fis);
+                    jobs = readJobMapImpl(fis, rtcGood);
                     if (jobs != null) {
                         long now = SystemClock.elapsedRealtime();
                         IActivityManager am = ActivityManager.getService();
@@ -475,26 +588,35 @@
                             js.prepareLocked(am);
                             js.enqueueTime = now;
                             this.jobSet.add(js);
+
+                            numJobs++;
+                            if (js.getUid() == Process.SYSTEM_UID) {
+                                numSystemJobs++;
+                                if (isSyncJob(js)) {
+                                    numSyncJobs++;
+                                }
+                            }
                         }
                     }
                 }
                 fis.close();
             } catch (FileNotFoundException e) {
-                if (JobSchedulerService.DEBUG) {
+                if (DEBUG) {
                     Slog.d(TAG, "Could not find jobs file, probably there was nothing to load.");
                 }
-            } catch (XmlPullParserException e) {
-                if (JobSchedulerService.DEBUG) {
-                    Slog.d(TAG, "Error parsing xml.", e);
-                }
-            } catch (IOException e) {
-                if (JobSchedulerService.DEBUG) {
-                    Slog.d(TAG, "Error parsing xml.", e);
+            } catch (XmlPullParserException | IOException e) {
+                Slog.wtf(TAG, "Error jobstore xml.", e);
+            } finally {
+                if (mPersistInfo.countAllJobsLoaded < 0) { // Only set them once.
+                    mPersistInfo.countAllJobsLoaded = numJobs;
+                    mPersistInfo.countSystemServerJobsLoaded = numSystemJobs;
+                    mPersistInfo.countSystemSyncManagerJobsLoaded = numSyncJobs;
                 }
             }
+            Slog.i(TAG, "Read " + numJobs + " jobs");
         }
 
-        private List<JobStatus> readJobMapImpl(FileInputStream fis)
+        private List<JobStatus> readJobMapImpl(FileInputStream fis, boolean rtcIsGood)
                 throws XmlPullParserException, IOException {
             XmlPullParser parser = Xml.newPullParser();
             parser.setInput(fis, StandardCharsets.UTF_8.name());
@@ -533,7 +655,7 @@
                         tagName = parser.getName();
                         // Start reading job.
                         if ("job".equals(tagName)) {
-                            JobStatus persistedJob = restoreJobFromXml(parser);
+                            JobStatus persistedJob = restoreJobFromXml(rtcIsGood, parser);
                             if (persistedJob != null) {
                                 if (DEBUG) {
                                     Slog.d(TAG, "Read out " + persistedJob);
@@ -556,8 +678,8 @@
          *               will take the parser into the body of the job tag.
          * @return Newly instantiated job holding all the information we just read out of the xml tag.
          */
-        private JobStatus restoreJobFromXml(XmlPullParser parser) throws XmlPullParserException,
-                IOException {
+        private JobStatus restoreJobFromXml(boolean rtcIsGood, XmlPullParser parser)
+                throws XmlPullParserException, IOException {
             JobInfo.Builder jobBuilder;
             int uid, sourceUserId;
             long lastSuccessfulRunTime;
@@ -621,10 +743,10 @@
                 return null;
             }
 
-            // Tuple of (earliest runtime, latest runtime) in elapsed realtime after disk load.
-            Pair<Long, Long> elapsedRuntimes;
+            // Tuple of (earliest runtime, latest runtime) in UTC.
+            final Pair<Long, Long> rtcRuntimes;
             try {
-                elapsedRuntimes = buildExecutionTimesFromXml(parser);
+                rtcRuntimes = buildRtcExecutionTimesFromXml(parser);
             } catch (NumberFormatException e) {
                 if (DEBUG) {
                     Slog.d(TAG, "Error parsing execution time parameters, skipping.");
@@ -633,6 +755,8 @@
             }
 
             final long elapsedNow = SystemClock.elapsedRealtime();
+            Pair<Long, Long> elapsedRuntimes = convertRtcBoundsToElapsed(rtcRuntimes, elapsedNow);
+
             if (XML_TAG_PERIODIC.equals(parser.getName())) {
                 try {
                     String val = parser.getAttributeValue(null, "period");
@@ -722,7 +846,8 @@
             JobStatus js = new JobStatus(
                     jobBuilder.build(), uid, sourcePackageName, sourceUserId, sourceTag,
                     elapsedRuntimes.first, elapsedRuntimes.second,
-                    lastSuccessfulRunTime, lastFailedRunTime);
+                    lastSuccessfulRunTime, lastFailedRunTime,
+                    (rtcIsGood) ? null : rtcRuntimes);
             return js;
         }
 
@@ -778,6 +903,32 @@
         }
 
         /**
+         * Extract a job's earliest/latest run time data from XML.  These are returned in
+         * unadjusted UTC wall clock time, because we do not yet know whether the system
+         * clock is reliable for purposes of calculating deltas from 'now'.
+         *
+         * @param parser
+         * @return A Pair of timestamps in UTC wall-clock time.  The first is the earliest
+         *     time at which the job is to become runnable, and the second is the deadline at
+         *     which it becomes overdue to execute.
+         * @throws NumberFormatException
+         */
+        private Pair<Long, Long> buildRtcExecutionTimesFromXml(XmlPullParser parser)
+                throws NumberFormatException {
+            String val;
+            // Pull out execution time data.
+            val = parser.getAttributeValue(null, "delay");
+            final long earliestRunTimeRtc = (val != null)
+                    ? Long.parseLong(val)
+                    : JobStatus.NO_EARLIEST_RUNTIME;
+            val = parser.getAttributeValue(null, "deadline");
+            final long latestRunTimeRtc = (val != null)
+                    ? Long.parseLong(val)
+                    : JobStatus.NO_LATEST_RUNTIME;
+            return Pair.create(earliestRunTimeRtc, latestRunTimeRtc);
+        }
+
+        /**
          * Convenience function to read out and convert deadline and delay from xml into elapsed real
          * time.
          * @return A {@link android.util.Pair}, where the first value is the earliest elapsed runtime
diff --git a/services/core/java/com/android/server/job/controllers/ConnectivityController.java b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
index 17c8928..4d5a920 100644
--- a/services/core/java/com/android/server/job/controllers/ConnectivityController.java
+++ b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
@@ -85,7 +85,7 @@
     @Override
     public void maybeStartTrackingJobLocked(JobStatus jobStatus, JobStatus lastJob) {
         if (jobStatus.hasConnectivityConstraint()) {
-            updateConstraintsSatisfied(jobStatus, null);
+            updateConstraintsSatisfied(jobStatus);
             mTrackedJobs.add(jobStatus);
             jobStatus.setTrackingController(JobStatus.TRACKING_CONNECTIVITY);
         }
@@ -99,23 +99,23 @@
         }
     }
 
-    private boolean updateConstraintsSatisfied(JobStatus jobStatus,
-            NetworkCapabilities capabilities) {
+    private boolean updateConstraintsSatisfied(JobStatus jobStatus) {
         final int jobUid = jobStatus.getSourceUid();
         final boolean ignoreBlocked = (jobStatus.getFlags() & JobInfo.FLAG_WILL_BE_FOREGROUND) != 0;
         final NetworkInfo info = mConnManager.getActiveNetworkInfoForUid(jobUid, ignoreBlocked);
-        if (capabilities == null) {
-            final Network network = mConnManager.getActiveNetworkForUid(jobUid, ignoreBlocked);
-            capabilities = mConnManager.getNetworkCapabilities(network);
-        }
+        final Network network = mConnManager.getActiveNetworkForUid(jobUid, ignoreBlocked);
+        final NetworkCapabilities capabilities = (network != null)
+                ? mConnManager.getNetworkCapabilities(network) : null;
 
-        final boolean validated = capabilities != null
+        final boolean validated = (capabilities != null)
                 && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
-        final boolean connected = info != null && info.isConnected();
+        final boolean connected = (info != null) && info.isConnected();
         final boolean connectionUsable = connected && validated;
-        final boolean metered = connected && info.isMetered();
-        final boolean unmetered = connected && !info.isMetered();
-        final boolean notRoaming = connected && !info.isRoaming();
+
+        final boolean metered = connected && mConnManager.isActiveNetworkMeteredForUid(jobUid);
+        final boolean unmetered = connected && !mConnManager.isActiveNetworkMeteredForUid(jobUid);
+        final boolean notRoaming = connected && (info != null)
+                && !info.isRoaming();
 
         boolean changed = false;
         changed |= jobStatus.setConnectivityConstraintSatisfied(connectionUsable);
@@ -148,13 +148,13 @@
      * @param uid only update jobs belonging to this UID, or {@code -1} to
      *            update all tracked jobs.
      */
-    private void updateTrackedJobs(int uid, NetworkCapabilities capabilities) {
+    private void updateTrackedJobs(int uid) {
         synchronized (mLock) {
             boolean changed = false;
             for (int i = mTrackedJobs.size()-1; i >= 0; i--) {
                 final JobStatus js = mTrackedJobs.valueAt(i);
                 if (uid == -1 || uid == js.getSourceUid()) {
-                    changed |= updateConstraintsSatisfied(js, capabilities);
+                    changed |= updateConstraintsSatisfied(js);
                 }
             }
             if (changed) {
@@ -187,7 +187,7 @@
             if (DEBUG) {
                 Slog.v(TAG, "onCapabilitiesChanged() : " + networkCapabilities);
             }
-            updateTrackedJobs(-1, networkCapabilities);
+            updateTrackedJobs(-1);
         }
 
         @Override
@@ -195,7 +195,7 @@
             if (DEBUG) {
                 Slog.v(TAG, "Network lost");
             }
-            updateTrackedJobs(-1, null);
+            updateTrackedJobs(-1);
         }
     };
 
@@ -205,7 +205,7 @@
             if (DEBUG) {
                 Slog.v(TAG, "Uid rules changed for " + uid);
             }
-            updateTrackedJobs(uid, null);
+            updateTrackedJobs(uid);
         }
 
         @Override
@@ -218,7 +218,7 @@
             if (DEBUG) {
                 Slog.v(TAG, "Background restriction change to " + restrictBackground);
             }
-            updateTrackedJobs(-1, null);
+            updateTrackedJobs(-1);
         }
 
         @Override
@@ -226,7 +226,7 @@
             if (DEBUG) {
                 Slog.v(TAG, "Uid policy changed for " + uid);
             }
-            updateTrackedJobs(uid, null);
+            updateTrackedJobs(uid);
         }
     };
 
diff --git a/services/core/java/com/android/server/job/controllers/JobStatus.java b/services/core/java/com/android/server/job/controllers/JobStatus.java
index 9658da7..303b000 100644
--- a/services/core/java/com/android/server/job/controllers/JobStatus.java
+++ b/services/core/java/com/android/server/job/controllers/JobStatus.java
@@ -28,10 +28,12 @@
 import android.os.UserHandle;
 import android.text.format.Time;
 import android.util.ArraySet;
+import android.util.Pair;
 import android.util.Slog;
 import android.util.TimeUtils;
 
 import com.android.server.job.GrantedUriPermissions;
+import com.android.server.job.JobSchedulerService;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -50,6 +52,7 @@
  */
 public final class JobStatus {
     static final String TAG = "JobSchedulerService";
+    static final boolean DEBUG = JobSchedulerService.DEBUG;
 
     public static final long NO_LATEST_RUNTIME = Long.MAX_VALUE;
     public static final long NO_EARLIEST_RUNTIME = 0L;
@@ -196,6 +199,18 @@
     private long mLastFailedRunTime;
 
     /**
+     * Transient: when a job is inflated from disk before we have a reliable RTC clock time,
+     * we retain the canonical (delay, deadline) scheduling tuple read out of the persistent
+     * store in UTC so that we can fix up the job's scheduling criteria once we get a good
+     * wall-clock time.  If we have to persist the job again before the clock has been updated,
+     * we record these times again rather than calculating based on the earliest/latest elapsed
+     * time base figures.
+     *
+     * 'first' is the earliest/delay time, and 'second' is the latest/deadline time.
+     */
+    private Pair<Long, Long> mPersistedUtcTimes;
+
+    /**
      * For use only by ContentObserverController: state it is maintaining about content URIs
      * being observed.
      */
@@ -280,13 +295,20 @@
         mLastFailedRunTime = lastFailedRunTime;
     }
 
-    /** Copy constructor. */
+    /** Copy constructor: used specifically when cloning JobStatus objects for persistence,
+     *   so we preserve RTC window bounds if the source object has them. */
     public JobStatus(JobStatus jobStatus) {
         this(jobStatus.getJob(), jobStatus.getUid(),
                 jobStatus.getSourcePackageName(), jobStatus.getSourceUserId(),
                 jobStatus.getSourceTag(), jobStatus.getNumFailures(),
                 jobStatus.getEarliestRunTime(), jobStatus.getLatestRunTimeElapsed(),
                 jobStatus.getLastSuccessfulRunTime(), jobStatus.getLastFailedRunTime());
+        mPersistedUtcTimes = jobStatus.mPersistedUtcTimes;
+        if (jobStatus.mPersistedUtcTimes != null) {
+            if (DEBUG) {
+                Slog.i(TAG, "Cloning job with persisted run times", new RuntimeException("here"));
+            }
+        }
     }
 
     /**
@@ -298,10 +320,22 @@
      */
     public JobStatus(JobInfo job, int callingUid, String sourcePackageName, int sourceUserId,
             String sourceTag, long earliestRunTimeElapsedMillis, long latestRunTimeElapsedMillis,
-            long lastSuccessfulRunTime, long lastFailedRunTime) {
+            long lastSuccessfulRunTime, long lastFailedRunTime,
+            Pair<Long, Long> persistedExecutionTimesUTC) {
         this(job, callingUid, sourcePackageName, sourceUserId, sourceTag, 0,
                 earliestRunTimeElapsedMillis, latestRunTimeElapsedMillis,
                 lastSuccessfulRunTime, lastFailedRunTime);
+
+        // Only during initial inflation do we record the UTC-timebase execution bounds
+        // read from the persistent store.  If we ever have to recreate the JobStatus on
+        // the fly, it means we're rescheduling the job; and this means that the calculated
+        // elapsed timebase bounds intrinsically become correct.
+        this.mPersistedUtcTimes = persistedExecutionTimesUTC;
+        if (persistedExecutionTimesUTC != null) {
+            if (DEBUG) {
+                Slog.i(TAG, "+ restored job with RTC times because of bad boot clock");
+            }
+        }
     }
 
     /** Create a new job to be rescheduled with the provided parameters. */
@@ -612,6 +646,14 @@
         return latestRunTimeElapsedMillis;
     }
 
+    public Pair<Long, Long> getPersistedUtcTimes() {
+        return mPersistedUtcTimes;
+    }
+
+    public void clearPersistedUtcTimes() {
+        mPersistedUtcTimes = null;
+    }
+
     boolean setChargingConstraintSatisfied(boolean state) {
         return setConstraintSatisfied(CONSTRAINT_CHARGING, state);
     }
@@ -799,6 +841,9 @@
         if (job.isRequireDeviceIdle()) {
             sb.append(" IDLE");
         }
+        if (job.isPeriodic()) {
+            sb.append(" PERIODIC");
+        }
         if (job.isPersisted()) {
             sb.append(" PERSISTED");
         }
diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java
index 00ce7f5..88f712a 100644
--- a/services/core/java/com/android/server/location/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/GnssLocationProvider.java
@@ -23,6 +23,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.pm.PackageManager;
 import android.database.Cursor;
 import android.hardware.location.GeofenceHardware;
 import android.hardware.location.GeofenceHardwareImpl;
@@ -1064,8 +1065,15 @@
                 // download tasks overrun.
                 synchronized (mLock) {
                     if (mDownloadXtraWakeLock.isHeld()) {
-                        mDownloadXtraWakeLock.release();
-                        if (DEBUG) Log.d(TAG, "WakeLock released by handleDownloadXtraData()");
+                        // This wakelock may have time-out, if a timeout was specified.
+                        // Catch (and ignore) any timeout exceptions.
+                        try {
+                            mDownloadXtraWakeLock.release();
+                            if (DEBUG) Log.d(TAG, "WakeLock released by handleDownloadXtraData()");
+                        } catch (Exception e) {
+                            Log.i(TAG, "Wakelock timeout & release race exception in "
+                                    + "handleDownloadXtraData()", e);
+                        }
                     } else {
                         Log.e(TAG, "WakeLock expired before release in "
                                 + "handleDownloadXtraData()");
@@ -2314,6 +2322,12 @@
             NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder();
             networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
             networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
+            // On watches, Bluetooth is the most important network type.
+            boolean isWatch =
+                mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH);
+            if (isWatch) {
+                networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_BLUETOOTH);
+            }
             NetworkRequest networkRequest = networkRequestBuilder.build();
             mConnMgr.registerNetworkCallback(networkRequest, mNetworkConnectivityCallback);
 
diff --git a/services/core/java/com/android/server/locksettings/LockSettingsService.java b/services/core/java/com/android/server/locksettings/LockSettingsService.java
index f8f8ffb..a1a0106 100644
--- a/services/core/java/com/android/server/locksettings/LockSettingsService.java
+++ b/services/core/java/com/android/server/locksettings/LockSettingsService.java
@@ -19,12 +19,14 @@
 import static android.Manifest.permission.ACCESS_KEYGUARD_SECURE_STORAGE;
 import static android.Manifest.permission.READ_CONTACTS;
 import static android.content.Context.KEYGUARD_SERVICE;
+import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 
 import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT;
 import static com.android.internal.widget.LockPatternUtils.SYNTHETIC_PASSWORD_ENABLED_KEY;
 import static com.android.internal.widget.LockPatternUtils.SYNTHETIC_PASSWORD_HANDLE_KEY;
 import static com.android.internal.widget.LockPatternUtils.USER_FRP;
 import static com.android.internal.widget.LockPatternUtils.frpCredentialEnabled;
+import static com.android.internal.widget.LockPatternUtils.userOwnsFrpCredential;
 
 import android.annotation.UserIdInt;
 import android.app.ActivityManager;
@@ -72,10 +74,12 @@
 import android.security.keystore.AndroidKeyStoreProvider;
 import android.security.keystore.KeyProperties;
 import android.security.keystore.KeyProtection;
+import android.security.keystore.UserNotAuthenticatedException;
 import android.service.gatekeeper.GateKeeperResponse;
 import android.service.gatekeeper.IGateKeeperService;
 import android.text.TextUtils;
 import android.util.ArrayMap;
+import android.util.EventLog;
 import android.util.Log;
 import android.util.Slog;
 
@@ -150,7 +154,8 @@
 
     private final Injector mInjector;
     private final Context mContext;
-    private final Handler mHandler;
+    @VisibleForTesting
+    protected final Handler mHandler;
     @VisibleForTesting
     protected final LockSettingsStorage mStorage;
     private final LockSettingsStrongAuth mStrongAuth;
@@ -192,6 +197,14 @@
         }
 
         @Override
+        public void onBootPhase(int phase) {
+            super.onBootPhase(phase);
+            if (phase == PHASE_ACTIVITY_MANAGER_READY) {
+                mLockSettingsService.migrateOldDataAfterSystemReady();
+            }
+        }
+
+        @Override
         public void onStartUser(int userHandle) {
             mLockSettingsService.onStartUser(userHandle);
         }
@@ -363,7 +376,7 @@
         }
 
         public SyntheticPasswordManager getSyntheticPasswordManager(LockSettingsStorage storage) {
-            return new SyntheticPasswordManager(storage, getUserManager());
+            return new SyntheticPasswordManager(getContext(), storage, getUserManager());
         }
 
         public int binderGetCallingUid() {
@@ -492,12 +505,34 @@
         maybeShowEncryptionNotificationForUser(userId);
     }
 
+    /**
+     * Check if profile got unlocked but the keystore is still locked. This happens on full disk
+     * encryption devices since the profile may not yet be running when we consider unlocking it
+     * during the normal flow. In this case unlock the keystore for the profile.
+     */
+    private void ensureProfileKeystoreUnlocked(int userId) {
+        final KeyStore ks = KeyStore.getInstance();
+        if (ks.state(userId) == KeyStore.State.LOCKED
+                && tiedManagedProfileReadyToUnlock(mUserManager.getUserInfo(userId))) {
+            Slog.i(TAG, "Managed profile got unlocked, will unlock its keystore");
+            try {
+                // If boot took too long and the password in vold got expired, parent keystore will
+                // be still locked, we ignore this case since the user will be prompted to unlock
+                // the device after boot.
+                unlockChildProfile(userId, true /* ignoreUserNotAuthenticated */);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Failed to unlock child profile");
+            }
+        }
+    }
+
     public void onUnlockUser(final int userId) {
         // Perform tasks which require locks in LSS on a handler, as we are callbacks from
         // ActivityManager.unlockUser()
         mHandler.post(new Runnable() {
             @Override
             public void run() {
+                ensureProfileKeystoreUnlocked(userId);
                 // Hide notification first, as tie managed profile lock takes time
                 hideEncryptionNotification(new UserHandle(userId));
 
@@ -550,6 +585,10 @@
 
     @Override // binder interface
     public void systemReady() {
+        if (mContext.checkCallingOrSelfPermission(PERMISSION) != PERMISSION_GRANTED) {
+            EventLog.writeEvent(0x534e4554, "28251513", getCallingUid(), "");  // SafetyNet
+        }
+        checkWritePermission(UserHandle.USER_SYSTEM);
         migrateOldData();
         try {
             getGateKeeperService();
@@ -560,6 +599,7 @@
         mDeviceProvisionedObserver.onSystemReady();
         // TODO: maybe skip this for split system user mode.
         mStorage.prefetchUser(UserHandle.USER_SYSTEM);
+        mStrongAuth.systemReady();
     }
 
     private void migrateOldData() {
@@ -720,6 +760,74 @@
         }
     }
 
+    private void migrateOldDataAfterSystemReady() {
+        try {
+            // Migrate the FRP credential to the persistent data block
+            if (LockPatternUtils.frpCredentialEnabled(mContext)
+                    && !getBoolean("migrated_frp", false, 0)) {
+                migrateFrpCredential();
+                setBoolean("migrated_frp", true, 0);
+                Slog.i(TAG, "Migrated migrated_frp.");
+            }
+        } catch (RemoteException e) {
+            Slog.e(TAG, "Unable to migrateOldDataAfterSystemReady", e);
+        }
+    }
+
+    /**
+     * Migrate the credential for the FRP credential owner user if the following are satisfied:
+     * - the user has a secure credential
+     * - the FRP credential is not set up
+     * - the credential is based on a synthetic password.
+     */
+    private void migrateFrpCredential() throws RemoteException {
+        if (mStorage.readPersistentDataBlock() != PersistentData.NONE) {
+            return;
+        }
+        for (UserInfo userInfo : mUserManager.getUsers()) {
+            if (userOwnsFrpCredential(mContext, userInfo) && isUserSecure(userInfo.id)) {
+                synchronized (mSpManager) {
+                    if (isSyntheticPasswordBasedCredentialLocked(userInfo.id)) {
+                        int actualQuality = (int) getLong(LockPatternUtils.PASSWORD_TYPE_KEY,
+                                DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, userInfo.id);
+
+                        mSpManager.migrateFrpPasswordLocked(
+                                getSyntheticPasswordHandleLocked(userInfo.id),
+                                userInfo,
+                                redactActualQualityToMostLenientEquivalentQuality(actualQuality));
+                    }
+                }
+                return;
+            }
+        }
+    }
+
+    /**
+     * Returns the lowest password quality that still presents the same UI for entering it.
+     *
+     * For the FRP credential, we do not want to leak the actual quality of the password, only what
+     * kind of UI it requires. However, when migrating, we only know the actual quality, not the
+     * originally requested quality; since this is only used to determine what input variant to
+     * present to the user, we just assume the lowest possible quality was requested.
+     */
+    private int redactActualQualityToMostLenientEquivalentQuality(int quality) {
+        switch (quality) {
+            case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC:
+            case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC:
+            case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX:
+                return DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC;
+            case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
+            case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX:
+                return DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
+            case DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED:
+            case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
+            case DevicePolicyManager.PASSWORD_QUALITY_MANAGED:
+            case DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK:
+            default:
+                return quality;
+        }
+    }
+
     private final void checkWritePermission(int userId) {
         mContext.enforceCallingOrSelfPermission(PERMISSION, "LockSettingsWrite");
     }
@@ -728,6 +836,13 @@
         mContext.enforceCallingOrSelfPermission(PERMISSION, "LockSettingsRead");
     }
 
+    private final void checkPasswordHavePermission(int userId) {
+        if (mContext.checkCallingOrSelfPermission(PERMISSION) != PERMISSION_GRANTED) {
+            EventLog.writeEvent(0x534e4554, "28251513", getCallingUid(), "");  // SafetyNet
+        }
+        mContext.enforceCallingOrSelfPermission(PERMISSION, "LockSettingsHave");
+    }
+
     private final void checkReadPermission(String requestedKey, int userId) {
         final int callingUid = Binder.getCallingUid();
 
@@ -803,7 +918,7 @@
     }
 
     @Override
-    public boolean getBoolean(String key, boolean defaultValue, int userId) throws RemoteException {
+    public boolean getBoolean(String key, boolean defaultValue, int userId) {
         checkReadPermission(key, userId);
         String value = getStringUnchecked(key, null, userId);
         return TextUtils.isEmpty(value) ?
@@ -811,14 +926,14 @@
     }
 
     @Override
-    public long getLong(String key, long defaultValue, int userId) throws RemoteException {
+    public long getLong(String key, long defaultValue, int userId) {
         checkReadPermission(key, userId);
         String value = getStringUnchecked(key, null, userId);
         return TextUtils.isEmpty(value) ? defaultValue : Long.parseLong(value);
     }
 
     @Override
-    public String getString(String key, String defaultValue, int userId) throws RemoteException {
+    public String getString(String key, String defaultValue, int userId) {
         checkReadPermission(key, userId);
         return getStringUnchecked(key, defaultValue, userId);
     }
@@ -857,6 +972,7 @@
 
     @Override
     public boolean havePassword(int userId) throws RemoteException {
+        checkPasswordHavePermission(userId);
         synchronized (mSpManager) {
             if (isSyntheticPasswordBasedCredentialLocked(userId)) {
                 long handle = getSyntheticPasswordHandleLocked(userId);
@@ -870,6 +986,7 @@
 
     @Override
     public boolean havePattern(int userId) throws RemoteException {
+        checkPasswordHavePermission(userId);
         synchronized (mSpManager) {
             if (isSyntheticPasswordBasedCredentialLocked(userId)) {
                 long handle = getSyntheticPasswordHandleLocked(userId);
@@ -935,7 +1052,8 @@
         return new String(decryptionResult, StandardCharsets.UTF_8);
     }
 
-    private void unlockChildProfile(int profileHandle) throws RemoteException {
+    private void unlockChildProfile(int profileHandle, boolean ignoreUserNotAuthenticated)
+            throws RemoteException {
         try {
             doVerifyCredential(getDecryptedPasswordForTiedProfile(profileHandle),
                     LockPatternUtils.CREDENTIAL_TYPE_PASSWORD,
@@ -946,6 +1064,8 @@
                 | BadPaddingException | CertificateException | IOException e) {
             if (e instanceof FileNotFoundException) {
                 Slog.i(TAG, "Child profile key not found");
+            } else if (ignoreUserNotAuthenticated && e instanceof UserNotAuthenticatedException) {
+                Slog.i(TAG, "Parent keystore seems locked, ignoring");
             } else {
                 Slog.e(TAG, "Failed to decrypt child profile key", e);
             }
@@ -989,11 +1109,8 @@
                 final List<UserInfo> profiles = mUserManager.getProfiles(userId);
                 for (UserInfo pi : profiles) {
                     // Unlock managed profile with unified lock
-                    if (pi.isManagedProfile()
-                            && !mLockPatternUtils.isSeparateProfileChallengeEnabled(pi.id)
-                            && mStorage.hasChildProfileLock(pi.id)
-                            && mUserManager.isUserRunning(pi.id)) {
-                        unlockChildProfile(pi.id);
+                    if (tiedManagedProfileReadyToUnlock(pi)) {
+                        unlockChildProfile(pi.id, false /* ignoreUserNotAuthenticated */);
                     }
                 }
             }
@@ -1002,6 +1119,13 @@
         }
     }
 
+    private boolean tiedManagedProfileReadyToUnlock(UserInfo userInfo) {
+        return userInfo.isManagedProfile()
+                && !mLockPatternUtils.isSeparateProfileChallengeEnabled(userInfo.id)
+                && mStorage.hasChildProfileLock(userInfo.id)
+                && mUserManager.isUserRunning(userInfo.id);
+    }
+
     private Map<Integer, String> getDecryptedPasswordsForAllTiedProfiles(int userId) {
         if (mUserManager.getUserInfo(userId).isManagedProfile()) {
             return null;
@@ -1019,12 +1143,13 @@
                 continue;
             }
             try {
-                result.put(userId, getDecryptedPasswordForTiedProfile(userId));
+                result.put(managedUserId, getDecryptedPasswordForTiedProfile(managedUserId));
             } catch (KeyStoreException | UnrecoverableKeyException | NoSuchAlgorithmException
                     | NoSuchPaddingException | InvalidKeyException
                     | InvalidAlgorithmParameterException | IllegalBlockSizeException
                     | BadPaddingException | CertificateException | IOException e) {
-                // ignore
+                Slog.e(TAG, "getDecryptedPasswordsForAllTiedProfiles failed for user " +
+                    managedUserId, e);
             }
         }
         return result;
@@ -1132,12 +1257,6 @@
             fixateNewestUserKeyAuth(userId);
             synchronizeUnifiedWorkChallengeForProfiles(userId, null);
             notifyActivePasswordMetricsAvailable(null, userId);
-
-            if (mStorage.getPersistentDataBlock() != null
-                    && LockPatternUtils.userOwnsFrpCredential(mUserManager.getUserInfo(userId))) {
-                // If owner, write to persistent storage for FRP
-                mStorage.writePersistentDataBlock(PersistentData.TYPE_NONE, userId, 0, null);
-            }
             return;
         }
         if (credential == null) {
@@ -1190,12 +1309,6 @@
             // Refresh the auth token
             doVerifyCredential(credential, credentialType, true, 0, userId, null /* progressCallback */);
             synchronizeUnifiedWorkChallengeForProfiles(userId, null);
-            if (mStorage.getPersistentDataBlock() != null
-                    && LockPatternUtils.userOwnsFrpCredential(mUserManager.getUserInfo(userId))) {
-                // If owner, write to persistent storage for FRP
-                mStorage.writePersistentDataBlock(PersistentData.TYPE_GATEKEEPER, userId,
-                        requestedQuality, willStore.toBytes());
-            }
         } else {
             throw new RemoteException("Failed to enroll " +
                     (credentialType == LockPatternUtils.CREDENTIAL_TYPE_PASSWORD ? "password"
@@ -1444,18 +1557,12 @@
             return response;
         }
 
-        final CredentialHash storedHash;
         if (userId == USER_FRP) {
-            PersistentData data = mStorage.readPersistentDataBlock();
-            if (data.type != PersistentData.TYPE_GATEKEEPER) {
-                Slog.wtf(TAG, "Expected PersistentData.TYPE_GATEKEEPER, but was: " + data.type);
-                return VerifyCredentialResponse.ERROR;
-            }
-            return verifyFrpCredential(credential, credentialType, data, progressCallback);
-        } else {
-            storedHash = mStorage.readCredentialHash(userId);
+            Slog.wtf(TAG, "Unexpected FRP credential type, should be SP based.");
+            return VerifyCredentialResponse.ERROR;
         }
 
+        final CredentialHash storedHash = mStorage.readCredentialHash(userId);
         if (storedHash.type != credentialType) {
             Slog.wtf(TAG, "doVerifyCredential type mismatch with stored credential??"
                     + " stored: " + storedHash.type + " passed in: " + credentialType);
@@ -1486,29 +1593,6 @@
         return response;
     }
 
-    private VerifyCredentialResponse verifyFrpCredential(String credential, int credentialType,
-            PersistentData data, ICheckCredentialProgressCallback progressCallback)
-            throws RemoteException {
-        CredentialHash storedHash = CredentialHash.fromBytes(data.payload);
-        if (storedHash.type != credentialType) {
-            Slog.wtf(TAG, "doVerifyCredential type mismatch with stored credential??"
-                    + " stored: " + storedHash.type + " passed in: " + credentialType);
-            return VerifyCredentialResponse.ERROR;
-        }
-        if (ArrayUtils.isEmpty(storedHash.hash) || TextUtils.isEmpty(credential)) {
-            Slog.e(TAG, "Stored hash or credential is empty");
-            return VerifyCredentialResponse.ERROR;
-        }
-        VerifyCredentialResponse response = VerifyCredentialResponse.fromGateKeeperResponse(
-                getGateKeeperService().verifyChallenge(data.userId, 0 /* challenge */,
-                        storedHash.hash, credential.getBytes()));
-        if (progressCallback != null
-                && response.getResponseCode() == VerifyCredentialResponse.RESPONSE_OK) {
-            progressCallback.onCredentialVerified();
-        }
-        return response;
-    }
-
     @Override
     public VerifyCredentialResponse verifyTiedProfileChallenge(String credential, int type,
             long challenge, int userId) throws RemoteException {
@@ -1655,6 +1739,10 @@
         return response;
     }
 
+    /**
+     * Call this method to notify DPMS regarding the latest password metric. This should be called
+     * when the user is authenticating or when a new password is being set.
+     */
     private void notifyActivePasswordMetricsAvailable(String password, @UserIdInt int userId) {
         final PasswordMetrics metrics;
         if (password == null) {
@@ -1932,7 +2020,8 @@
      *     This is the untrusted credential reset, OR the user sets a new lockscreen password
      *     FOR THE FIRST TIME on a SP-enabled device. New credential and new SID will be created
      */
-    private AuthenticationToken initializeSyntheticPasswordLocked(byte[] credentialHash,
+    @VisibleForTesting
+    protected AuthenticationToken initializeSyntheticPasswordLocked(byte[] credentialHash,
             String credential, int credentialType, int requestedQuality,
             int userId) throws RemoteException {
         Slog.i(TAG, "Initialize SyntheticPassword for user: " + userId);
@@ -1964,11 +2053,8 @@
     }
 
     private long getSyntheticPasswordHandleLocked(int userId) {
-        try {
-            return getLong(SYNTHETIC_PASSWORD_HANDLE_KEY, 0, userId);
-        } catch (RemoteException e) {
-            return SyntheticPasswordManager.DEFAULT_HANDLE;
-        }
+        return getLong(SYNTHETIC_PASSWORD_HANDLE_KEY,
+                SyntheticPasswordManager.DEFAULT_HANDLE, userId);
     }
 
     private boolean isSyntheticPasswordBasedCredentialLocked(int userId) throws RemoteException {
@@ -1983,7 +2069,8 @@
       return enabled != 0 && handle != SyntheticPasswordManager.DEFAULT_HANDLE;
     }
 
-    private boolean shouldMigrateToSyntheticPasswordLocked(int userId) throws RemoteException {
+    @VisibleForTesting
+    protected boolean shouldMigrateToSyntheticPasswordLocked(int userId) throws RemoteException {
         long handle = getSyntheticPasswordHandleLocked(userId);
         // This is a global setting
         long enabled = getLong(SYNTHETIC_PASSWORD_ENABLED_KEY,
@@ -2018,6 +2105,10 @@
             authResult = mSpManager.unwrapPasswordBasedSyntheticPassword(
                     getGateKeeperService(), handle, userCredential, userId);
 
+            if (authResult.credentialType != credentialType) {
+                Slog.e(TAG, "Credential type mismatch.");
+                return VerifyCredentialResponse.ERROR;
+            }
             response = authResult.gkResponse;
             // credential has matched
             if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_OK) {
@@ -2113,6 +2204,8 @@
         }
         setLong(SYNTHETIC_PASSWORD_HANDLE_KEY, newHandle, userId);
         synchronizeUnifiedWorkChallengeForProfiles(userId, profilePasswords);
+
+        notifyActivePasswordMetricsAvailable(credential, userId);
         return newHandle;
     }
 
@@ -2137,6 +2230,14 @@
                 getGateKeeperService(), handle, savedCredential, userId);
         VerifyCredentialResponse response = authResult.gkResponse;
         AuthenticationToken auth = authResult.authToken;
+
+        // If existing credential is provided, then it must match.
+        if (savedCredential != null && auth == null) {
+            throw new RemoteException("Failed to enroll " +
+                    (credentialType == LockPatternUtils.CREDENTIAL_TYPE_PASSWORD ? "password"
+                            : "pattern"));
+        }
+
         if (auth != null) {
             // We are performing a trusted credential change i.e. a correct existing credential
             // is provided
@@ -2154,13 +2255,13 @@
                     userId);
             synchronizeUnifiedWorkChallengeForProfiles(userId, null);
             mSpManager.destroyPasswordBasedSyntheticPassword(handle, userId);
+
+            notifyActivePasswordMetricsAvailable(credential, userId);
         } else /* response == null || responseCode == VerifyCredentialResponse.RESPONSE_RETRY */ {
             Slog.w(TAG, "spBasedSetLockCredentialInternalLocked: " +
                     (response != null ? "rate limit exceeded" : "failed"));
             return;
         }
-        notifyActivePasswordMetricsAvailable(credential, userId);
-
     }
 
     @Override
@@ -2266,6 +2367,17 @@
                 Slog.w(TAG, "Invalid escrow token supplied");
                 return false;
             }
+            if (result.gkResponse.getResponseCode() != VerifyCredentialResponse.RESPONSE_OK) {
+                // Most likely, an untrusted credential reset happened in the past which
+                // changed the synthetic password
+                Slog.e(TAG, "Obsolete token: synthetic password derived but it fails GK "
+                        + "verification.");
+                return false;
+            }
+            // Update PASSWORD_TYPE_KEY since it's needed by notifyActivePasswordMetricsAvailable()
+            // called by setLockCredentialWithAuthTokenLocked().
+            // TODO: refactor usage of PASSWORD_TYPE_KEY b/65239740
+            setLong(LockPatternUtils.PASSWORD_TYPE_KEY, requestedQuality, userId);
             long oldHandle = getSyntheticPasswordHandleLocked(userId);
             setLockCredentialWithAuthTokenLocked(credential, type, result.authToken,
                     requestedQuality, userId);
@@ -2387,12 +2499,13 @@
                 if (isProvisioned()) {
                     Slog.i(TAG, "Reporting device setup complete to IGateKeeperService");
                     reportDeviceSetupComplete();
+                    clearFrpCredentialIfOwnerNotSecure();
                 }
             }
         }
 
         public void onSystemReady() {
-            if (frpCredentialEnabled()) {
+            if (frpCredentialEnabled(mContext)) {
                 updateRegistration();
             } else {
                 // If we don't intend to use frpCredentials and we're not provisioned yet, send
@@ -2414,6 +2527,23 @@
             }
         }
 
+        /**
+         * Clears the FRP credential if the user that controls it does not have a secure
+         * lockscreen.
+         */
+        private void clearFrpCredentialIfOwnerNotSecure() {
+            List<UserInfo> users = mUserManager.getUsers();
+            for (UserInfo user : users) {
+                if (userOwnsFrpCredential(mContext, user)) {
+                    if (!isUserSecure(user.id)) {
+                        mStorage.writePersistentDataBlock(PersistentData.TYPE_NONE, user.id,
+                                0, null);
+                    }
+                    return;
+                }
+            }
+        }
+
         private void updateRegistration() {
             boolean register = !isProvisioned();
             if (register == mRegistered) {
diff --git a/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java b/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java
index d730c56..4d2cf32 100644
--- a/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java
+++ b/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java
@@ -36,6 +36,8 @@
     private static final String COMMAND_CLEAR = "clear";
     private static final String COMMAND_SP = "sp";
     private static final String COMMAND_SET_DISABLED = "set-disabled";
+    private static final String COMMAND_VERIFY = "verify";
+    private static final String COMMAND_GET_DISABLED = "get-disabled";
 
     private int mCurrentUserId;
     private final LockPatternUtils mLockPatternUtils;
@@ -76,6 +78,12 @@
                 case COMMAND_SET_DISABLED:
                     runSetDisabled();
                     break;
+                case COMMAND_VERIFY:
+                    runVerify();
+                    break;
+                case COMMAND_GET_DISABLED:
+                    runGetDisabled();
+                    break;
                 default:
                     getErrPrintWriter().println("Unknown command: " + cmd);
                     break;
@@ -88,6 +96,11 @@
         }
     }
 
+    private void runVerify() {
+        // The command is only run if the credential is correct.
+        getOutPrintWriter().println("Lock credential verified successfully");
+    }
+
     @Override
     public void onHelp() {
     }
@@ -147,21 +160,36 @@
         getOutPrintWriter().println("Lock screen disabled set to " + disabled);
     }
 
-    private boolean checkCredential() throws RemoteException, RequestThrottledException {
+    private void runGetDisabled() {
+        boolean isLockScreenDisabled = mLockPatternUtils.isLockScreenDisabled(mCurrentUserId);
+        getOutPrintWriter().println(isLockScreenDisabled);
+    }
+
+    private boolean checkCredential() throws RemoteException {
         final boolean havePassword = mLockPatternUtils.isLockPasswordEnabled(mCurrentUserId);
         final boolean havePattern = mLockPatternUtils.isLockPatternEnabled(mCurrentUserId);
         if (havePassword || havePattern) {
-            boolean result;
-            if (havePassword) {
-                result = mLockPatternUtils.checkPassword(mOld, mCurrentUserId);
-            } else {
-                result = mLockPatternUtils.checkPattern(stringToPattern(mOld),
-                        mCurrentUserId);
+            if (mLockPatternUtils.isManagedProfileWithUnifiedChallenge(mCurrentUserId)) {
+                getOutPrintWriter().println("Profile uses unified challenge");
+                return false;
             }
-            if (result) {
-                return true;
-            } else {
-                getOutPrintWriter().println("Old password '" + mOld + "' didn't match");
+
+            try {
+                final boolean result;
+                if (havePassword) {
+                    result = mLockPatternUtils.checkPassword(mOld, mCurrentUserId);
+                } else {
+                    result = mLockPatternUtils.checkPattern(stringToPattern(mOld), mCurrentUserId);
+                }
+                if (!result) {
+                    if (!mLockPatternUtils.isManagedProfileWithUnifiedChallenge(mCurrentUserId)) {
+                        mLockPatternUtils.reportFailedPasswordAttempt(mCurrentUserId);
+                    }
+                    getOutPrintWriter().println("Old password '" + mOld + "' didn't match");
+                }
+                return result;
+            } catch (RequestThrottledException e) {
+                getOutPrintWriter().println("Request throttled");
                 return false;
             }
         } else {
diff --git a/services/core/java/com/android/server/locksettings/LockSettingsStorage.java b/services/core/java/com/android/server/locksettings/LockSettingsStorage.java
index 79372e48..70d6072 100644
--- a/services/core/java/com/android/server/locksettings/LockSettingsStorage.java
+++ b/services/core/java/com/android/server/locksettings/LockSettingsStorage.java
@@ -635,9 +635,8 @@
         static final int VERSION_1_HEADER_SIZE = 1 + 1 + 4 + 4;
 
         public static final int TYPE_NONE = 0;
-        public static final int TYPE_GATEKEEPER = 1;
-        public static final int TYPE_SP = 2;
-        public static final int TYPE_SP_WEAVER = 3;
+        public static final int TYPE_SP = 1;
+        public static final int TYPE_SP_WEAVER = 2;
 
         public static final PersistentData NONE = new PersistentData(TYPE_NONE,
                 UserHandle.USER_NULL, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, null);
@@ -714,12 +713,15 @@
         private static final String DATABASE_NAME = "locksettings.db";
 
         private static final int DATABASE_VERSION = 2;
+        private static final int IDLE_CONNECTION_TIMEOUT_MS = 30000;
 
         private Callback mCallback;
 
         public DatabaseHelper(Context context) {
             super(context, DATABASE_NAME, null, DATABASE_VERSION);
             setWriteAheadLoggingEnabled(true);
+            // Memory optimization - close idle connections after 30s of inactivity
+            setIdleConnectionTimeout(IDLE_CONNECTION_TIMEOUT_MS);
         }
 
         public void setCallback(Callback callback) {
diff --git a/services/core/java/com/android/server/locksettings/LockSettingsStrongAuth.java b/services/core/java/com/android/server/locksettings/LockSettingsStrongAuth.java
index 0966153..c9c9329 100644
--- a/services/core/java/com/android/server/locksettings/LockSettingsStrongAuth.java
+++ b/services/core/java/com/android/server/locksettings/LockSettingsStrongAuth.java
@@ -27,6 +27,8 @@
 import android.app.admin.DevicePolicyManager;
 import android.app.trust.IStrongAuthTracker;
 import android.content.Context;
+import android.content.pm.PackageManager;
+import android.hardware.fingerprint.FingerprintManager;
 import android.os.Binder;
 import android.os.DeadObjectException;
 import android.os.Handler;
@@ -64,6 +66,7 @@
     private final Context mContext;
 
     private AlarmManager mAlarmManager;
+    private FingerprintManager mFingerprintManager;
 
     public LockSettingsStrongAuth(Context context) {
         mContext = context;
@@ -71,6 +74,13 @@
         mAlarmManager = context.getSystemService(AlarmManager.class);
     }
 
+    public void systemReady() {
+        final PackageManager pm = mContext.getPackageManager();
+        if (pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
+            mFingerprintManager = mContext.getSystemService(FingerprintManager.class);
+        }
+    }
+
     private void handleAddStrongAuthTracker(IStrongAuthTracker tracker) {
         for (int i = 0; i < mStrongAuthTrackers.size(); i++) {
             if (mStrongAuthTrackers.get(i).asBinder() == tracker.asBinder()) {
@@ -188,6 +198,11 @@
     }
 
     public void reportSuccessfulStrongAuthUnlock(int userId) {
+        if (mFingerprintManager != null) {
+            byte[] token = null; /* TODO: pass real auth token once fp HAL supports it */
+            mFingerprintManager.resetTimeout(token);
+        }
+
         final int argNotUsed = 0;
         mHandler.obtainMessage(MSG_SCHEDULE_STRONG_AUTH_TIMEOUT, userId, argNotUsed).sendToTarget();
     }
diff --git a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java
index f971fb9..ca6c9e7 100644
--- a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java
+++ b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java
@@ -19,6 +19,8 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.admin.DevicePolicyManager;
+import android.content.Context;
+import android.content.pm.UserInfo;
 import android.hardware.weaver.V1_0.IWeaver;
 import android.hardware.weaver.V1_0.WeaverConfig;
 import android.hardware.weaver.V1_0.WeaverReadResponse;
@@ -128,6 +130,7 @@
     static class AuthenticationResult {
         public AuthenticationToken authToken;
         public VerifyCredentialResponse gkResponse;
+        public int credentialType;
     }
 
     static class AuthenticationToken {
@@ -254,13 +257,16 @@
         byte[] aggregatedSecret;
     }
 
+    private final Context mContext;
     private LockSettingsStorage mStorage;
     private IWeaver mWeaver;
     private WeaverConfig mWeaverConfig;
 
     private final UserManager mUserManager;
 
-    public SyntheticPasswordManager(LockSettingsStorage storage, UserManager userManager) {
+    public SyntheticPasswordManager(Context context, LockSettingsStorage storage,
+            UserManager userManager) {
+        mContext = context;
         mStorage = storage;
         mUserManager = userManager;
     }
@@ -625,8 +631,8 @@
             PasswordData pwd = PasswordData.fromBytes(persistentData.payload);
             byte[] pwdToken = computePasswordToken(userCredential, pwd);
 
-            GateKeeperResponse response = gatekeeper.verify(fakeUid(persistentData.userId),
-                    pwd.passwordHandle, passwordTokenToGkInput(pwdToken));
+            GateKeeperResponse response = gatekeeper.verifyChallenge(fakeUid(persistentData.userId),
+                    0 /* challenge */, pwd.passwordHandle, passwordTokenToGkInput(pwdToken));
             return VerifyCredentialResponse.fromGateKeeperResponse(response);
         } else if (persistentData.type == PersistentData.TYPE_SP_WEAVER) {
             PasswordData pwd = PasswordData.fromBytes(persistentData.payload);
@@ -642,10 +648,27 @@
     }
 
 
+    public void migrateFrpPasswordLocked(long handle, UserInfo userInfo, int requestedQuality) {
+        if (mStorage.getPersistentDataBlock() != null
+                && LockPatternUtils.userOwnsFrpCredential(mContext, userInfo)) {
+            PasswordData pwd = PasswordData.fromBytes(loadState(PASSWORD_DATA_NAME, handle,
+                    userInfo.id));
+            if (pwd.passwordType != LockPatternUtils.CREDENTIAL_TYPE_NONE) {
+                int weaverSlot = loadWeaverSlot(handle, userInfo.id);
+                if (weaverSlot != INVALID_WEAVER_SLOT) {
+                    synchronizeWeaverFrpPassword(pwd, requestedQuality, userInfo.id, weaverSlot);
+                } else {
+                    synchronizeFrpPassword(pwd, requestedQuality, userInfo.id);
+                }
+            }
+        }
+    }
+
     private void synchronizeFrpPassword(PasswordData pwd,
             int requestedQuality, int userId) {
         if (mStorage.getPersistentDataBlock() != null
-                && LockPatternUtils.userOwnsFrpCredential(mUserManager.getUserInfo(userId))) {
+                && LockPatternUtils.userOwnsFrpCredential(mContext,
+                mUserManager.getUserInfo(userId))) {
             if (pwd.passwordType != LockPatternUtils.CREDENTIAL_TYPE_NONE) {
                 mStorage.writePersistentDataBlock(PersistentData.TYPE_SP, userId, requestedQuality,
                         pwd.toBytes());
@@ -658,7 +681,8 @@
     private void synchronizeWeaverFrpPassword(PasswordData pwd, int requestedQuality, int userId,
             int weaverSlot) {
         if (mStorage.getPersistentDataBlock() != null
-                && LockPatternUtils.userOwnsFrpCredential(mUserManager.getUserInfo(userId))) {
+                && LockPatternUtils.userOwnsFrpCredential(mContext,
+                mUserManager.getUserInfo(userId))) {
             if (pwd.passwordType != LockPatternUtils.CREDENTIAL_TYPE_NONE) {
                 mStorage.writePersistentDataBlock(PersistentData.TYPE_SP_WEAVER, weaverSlot,
                         requestedQuality, pwd.toBytes());
@@ -755,6 +779,8 @@
      * Decrypt a synthetic password by supplying the user credential and corresponding password
      * blob handle generated previously. If the decryption is successful, initiate a GateKeeper
      * verification to referesh the SID & Auth token maintained by the system.
+     * Note: the credential type is not validated here since there are call sites where the type is
+     * unknown. Caller might choose to validate it by examining AuthenticationResult.credentialType
      */
     public AuthenticationResult unwrapPasswordBasedSyntheticPassword(IGateKeeperService gatekeeper,
             long handle, String credential, int userId) throws RemoteException {
@@ -763,6 +789,7 @@
         }
         AuthenticationResult result = new AuthenticationResult();
         PasswordData pwd = PasswordData.fromBytes(loadState(PASSWORD_DATA_NAME, handle, userId));
+        result.credentialType = pwd.passwordType;
         byte[] pwdToken = computePasswordToken(credential, pwd);
 
         final byte[] applicationId;
diff --git a/services/core/java/com/android/server/media/AudioPlaybackMonitor.java b/services/core/java/com/android/server/media/AudioPlaybackMonitor.java
index f6f7676..791ee82 100644
--- a/services/core/java/com/android/server/media/AudioPlaybackMonitor.java
+++ b/services/core/java/com/android/server/media/AudioPlaybackMonitor.java
@@ -100,7 +100,11 @@
      * @param configs List of the current audio playback configuration
      */
     @Override
-    public void dispatchPlaybackConfigChange(List<AudioPlaybackConfiguration> configs) {
+    public void dispatchPlaybackConfigChange(List<AudioPlaybackConfiguration> configs,
+            boolean flush) {
+        if (flush) {
+            Binder.flushPendingCommands();
+        }
         final long token = Binder.clearCallingIdentity();
         try {
             List<Integer> newActiveAudioPlaybackClientUids = new ArrayList<>();
diff --git a/services/core/java/com/android/server/media/MediaRouterService.java b/services/core/java/com/android/server/media/MediaRouterService.java
index 922df1e..1cfd5f0 100644
--- a/services/core/java/com/android/server/media/MediaRouterService.java
+++ b/services/core/java/com/android/server/media/MediaRouterService.java
@@ -18,9 +18,7 @@
 
 import com.android.internal.util.DumpUtils;
 import com.android.server.Watchdog;
-import com.android.server.media.AudioPlaybackMonitor.OnAudioPlayerActiveStateChangedListener;
 
-import android.Manifest;
 import android.app.ActivityManager;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -96,9 +94,10 @@
     private final ArrayMap<IBinder, ClientRecord> mAllClientRecords =
             new ArrayMap<IBinder, ClientRecord>();
     private int mCurrentUserId = -1;
-    private boolean mHasBluetoothRoute = false;
+    private boolean mGlobalBluetoothA2dpOn = false;
     private final IAudioService mAudioService;
     private final AudioPlaybackMonitor mAudioPlaybackMonitor;
+    private final AudioRoutesInfo mCurAudioRoutesInfo = new AudioRoutesInfo();
 
     public MediaRouterService(Context context) {
         mContext = context;
@@ -137,13 +136,39 @@
             audioRoutes = mAudioService.startWatchingRoutes(new IAudioRoutesObserver.Stub() {
                 @Override
                 public void dispatchAudioRoutesChanged(final AudioRoutesInfo newRoutes) {
-                    mHasBluetoothRoute = newRoutes.bluetoothName != null;
+                    synchronized (mLock) {
+                        if (newRoutes.mainType != mCurAudioRoutesInfo.mainType) {
+                            if ((newRoutes.mainType & (AudioRoutesInfo.MAIN_HEADSET
+                                    | AudioRoutesInfo.MAIN_HEADPHONES
+                                    | AudioRoutesInfo.MAIN_USB)) == 0) {
+                                // headset was plugged out.
+                                mGlobalBluetoothA2dpOn = newRoutes.bluetoothName != null;
+                            } else {
+                                // headset was plugged in.
+                                mGlobalBluetoothA2dpOn = false;
+                            }
+                            mCurAudioRoutesInfo.mainType = newRoutes.mainType;
+                        }
+                        if (!TextUtils.equals(
+                                newRoutes.bluetoothName, mCurAudioRoutesInfo.bluetoothName)) {
+                            if (newRoutes.bluetoothName == null) {
+                                // BT was disconnected.
+                                mGlobalBluetoothA2dpOn = false;
+                            } else {
+                                // BT was connected or changed.
+                                mGlobalBluetoothA2dpOn = true;
+                            }
+                            mCurAudioRoutesInfo.bluetoothName = newRoutes.bluetoothName;
+                        }
+                    }
                 }
             });
         } catch (RemoteException e) {
             Slog.w(TAG, "RemoteException in the audio service.");
         }
-        mHasBluetoothRoute = (audioRoutes != null && audioRoutes.bluetoothName != null);
+        synchronized (mLock) {
+            mGlobalBluetoothA2dpOn = (audioRoutes != null && audioRoutes.bluetoothName != null);
+        }
     }
 
     public void systemRunning() {
@@ -346,7 +371,12 @@
 
     void restoreBluetoothA2dp() {
         try {
-            mAudioService.setBluetoothA2dpOn(mHasBluetoothRoute);
+            boolean a2dpOn = false;
+            synchronized (mLock) {
+                a2dpOn = mGlobalBluetoothA2dpOn;
+            }
+            Slog.v(TAG, "restoreBluetoothA2dp(" + a2dpOn + ")");
+            mAudioService.setBluetoothA2dpOn(a2dpOn);
         } catch (RemoteException e) {
             Slog.w(TAG, "RemoteException while calling setBluetoothA2dpOn.");
         }
@@ -354,12 +384,14 @@
 
     void restoreRoute(int uid) {
         ClientRecord clientRecord = null;
-        UserRecord userRecord = mUserRecords.get(UserHandle.getUserId(uid));
-        if (userRecord != null && userRecord.mClientRecords != null) {
-            for (ClientRecord cr : userRecord.mClientRecords) {
-                if (validatePackageName(uid, cr.mPackageName)) {
-                    clientRecord = cr;
-                    break;
+        synchronized (mLock) {
+            UserRecord userRecord = mUserRecords.get(UserHandle.getUserId(uid));
+            if (userRecord != null && userRecord.mClientRecords != null) {
+                for (ClientRecord cr : userRecord.mClientRecords) {
+                    if (validatePackageName(uid, cr.mPackageName)) {
+                        clientRecord = cr;
+                        break;
+                    }
                 }
             }
         }
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java
index 89e1050..664d2f9 100644
--- a/services/core/java/com/android/server/media/MediaSessionRecord.java
+++ b/services/core/java/com/android/server/media/MediaSessionRecord.java
@@ -462,18 +462,25 @@
         mHandler.post(new Runnable() {
             @Override
             public void run() {
-                if (useSuggested) {
-                    if (AudioSystem.isStreamActive(stream, 0)) {
-                        mAudioManagerInternal.adjustSuggestedStreamVolumeForUid(stream, direction,
-                                flags, packageName, uid);
+                try {
+                    if (useSuggested) {
+                        if (AudioSystem.isStreamActive(stream, 0)) {
+                            mAudioManagerInternal.adjustSuggestedStreamVolumeForUid(stream,
+                                    direction, flags, packageName, uid);
+                        } else {
+                            mAudioManagerInternal.adjustSuggestedStreamVolumeForUid(
+                                    AudioManager.USE_DEFAULT_STREAM_TYPE, direction,
+                                    flags | previousFlagPlaySound, packageName, uid);
+                        }
                     } else {
-                        mAudioManagerInternal.adjustSuggestedStreamVolumeForUid(
-                                AudioManager.USE_DEFAULT_STREAM_TYPE, direction,
-                                flags | previousFlagPlaySound, packageName, uid);
+                        mAudioManagerInternal.adjustStreamVolumeForUid(stream, direction, flags,
+                                packageName, uid);
                     }
-                } else {
-                    mAudioManagerInternal.adjustStreamVolumeForUid(stream, direction, flags,
-                            packageName, uid);
+                } catch (IllegalArgumentException e) {
+                    Log.e(TAG, "Cannot adjust volume: direction=" + direction + ", stream="
+                            + stream + ", flags=" + flags + ", packageName=" + packageName
+                            + ", uid=" + uid + ", useSuggested=" + useSuggested
+                            + ", previousFlagPlaySound=" + previousFlagPlaySound, e);
                 }
             }
         });
@@ -777,6 +784,14 @@
                 mService.enforcePhoneStatePermission(pid, uid);
             }
             mFlags = flags;
+            if ((flags & MediaSession.FLAG_EXCLUSIVE_GLOBAL_PRIORITY) != 0) {
+                final long token = Binder.clearCallingIdentity();
+                try {
+                    mService.setGlobalPrioritySession(MediaSessionRecord.this);
+                } finally {
+                    Binder.restoreCallingIdentity(token);
+                }
+            }
             mHandler.post(MessageHandler.MSG_UPDATE_SESSION_STATE);
         }
 
diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java
index adb50f0..aa65244 100644
--- a/services/core/java/com/android/server/media/MediaSessionService.java
+++ b/services/core/java/com/android/server/media/MediaSessionService.java
@@ -16,10 +16,8 @@
 
 package com.android.server.media;
 
-import android.Manifest;
-import android.annotation.NonNull;
-import android.app.Activity;
 import android.app.ActivityManager;
+import android.app.INotificationManager;
 import android.app.KeyguardManager;
 import android.app.PendingIntent;
 import android.app.PendingIntent.CanceledException;
@@ -57,13 +55,11 @@
 import android.os.RemoteException;
 import android.os.ResultReceiver;
 import android.os.ServiceManager;
-import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
 import android.speech.RecognizerIntent;
 import android.text.TextUtils;
-import android.util.IntArray;
 import android.util.Log;
 import android.util.Slog;
 import android.util.SparseArray;
@@ -80,7 +76,6 @@
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -112,6 +107,8 @@
     private AudioManagerInternal mAudioManagerInternal;
     private ContentResolver mContentResolver;
     private SettingsObserver mSettingsObserver;
+    private INotificationManager mNotificationManager;
+    private boolean mHasFeatureLeanback;
 
     // The FullUserRecord of the current users. (i.e. The foreground user that isn't a profile)
     // It's always not null after the MediaSessionService is started.
@@ -129,6 +126,8 @@
         PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
         mMediaEventWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "handleMediaEvent");
         mLongPressTimeout = ViewConfiguration.getLongPressTimeout();
+        mNotificationManager = INotificationManager.Stub.asInterface(
+                ServiceManager.getService(Context.NOTIFICATION_SERVICE));
     }
 
     @Override
@@ -156,6 +155,8 @@
         mContentResolver = getContext().getContentResolver();
         mSettingsObserver = new SettingsObserver();
         mSettingsObserver.observe();
+        mHasFeatureLeanback = getContext().getPackageManager().hasSystemFeature(
+                PackageManager.FEATURE_LEANBACK);
 
         updateUser();
     }
@@ -177,17 +178,6 @@
                 return;
             }
             if ((record.getFlags() & MediaSession.FLAG_EXCLUSIVE_GLOBAL_PRIORITY) != 0) {
-                if (mGlobalPrioritySession != record) {
-                    Log.d(TAG, "Global priority session is changed from " + mGlobalPrioritySession
-                            + " to " + record);
-                    mGlobalPrioritySession = record;
-                    if (user != null && user.mPriorityStack.contains(record)) {
-                        // Handle the global priority session separately.
-                        // Otherwise, it will be the media button session even after it becomes
-                        // inactive because it has been the lastly played media app.
-                        user.mPriorityStack.removeSession(record);
-                    }
-                }
                 if (DEBUG_KEY_EVENT) {
                     Log.d(TAG, "Global priority session is updated, active=" + record.isActive());
                 }
@@ -203,10 +193,27 @@
         }
     }
 
+    public void setGlobalPrioritySession(MediaSessionRecord record) {
+        synchronized (mLock) {
+            FullUserRecord user = getFullUserRecordLocked(record.getUserId());
+            if (mGlobalPrioritySession != record) {
+                Log.d(TAG, "Global priority session is changed from " + mGlobalPrioritySession
+                        + " to " + record);
+                mGlobalPrioritySession = record;
+                if (user != null && user.mPriorityStack.contains(record)) {
+                    // Handle the global priority session separately.
+                    // Otherwise, it can be the media button session regardless of the active state
+                    // because it or other system components might have been the lastly played media
+                    // app.
+                    user.mPriorityStack.removeSession(record);
+                }
+            }
+        }
+    }
+
     private List<MediaSessionRecord> getActiveSessionsLocked(int userId) {
-        List<MediaSessionRecord> records;
+        List<MediaSessionRecord> records = new ArrayList<>();
         if (userId == UserHandle.USER_ALL) {
-            records = new ArrayList<>();
             int size = mUserRecords.size();
             for (int i = 0; i < size; i++) {
                 records.addAll(mUserRecords.valueAt(i).mPriorityStack.getActiveSessions(userId));
@@ -215,9 +222,9 @@
             FullUserRecord user = getFullUserRecordLocked(userId);
             if (user == null) {
                 Log.w(TAG, "getSessions failed. Unknown user " + userId);
-                return new ArrayList<>();
+                return records;
             }
-            records = user.mPriorityStack.getActiveSessions(userId);
+            records.addAll(user.mPriorityStack.getActiveSessions(userId));
         }
 
         // Return global priority session at the first whenever it's asked.
@@ -472,28 +479,11 @@
             Log.d(TAG, "Checking if enabled notification listener " + compName);
         }
         if (compName != null) {
-            final String enabledNotifListeners = Settings.Secure.getStringForUser(mContentResolver,
-                    Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,
-                    userId);
-            if (enabledNotifListeners != null) {
-                final String[] components = enabledNotifListeners.split(":");
-                for (int i = 0; i < components.length; i++) {
-                    final ComponentName component =
-                            ComponentName.unflattenFromString(components[i]);
-                    if (component != null) {
-                        if (compName.equals(component)) {
-                            if (DEBUG) {
-                                Log.d(TAG, "ok to get sessions. " + component +
-                                        " is authorized notification listener");
-                            }
-                            return true;
-                        }
-                    }
-                }
-            }
-            if (DEBUG) {
-                Log.d(TAG, "not ok to get sessions. " + compName +
-                        " is not in list of ENABLED_NOTIFICATION_LISTENERS for user " + userId);
+            try {
+                return mNotificationManager.isNotificationListenerAccessGrantedForUser(
+                        compName, userId);
+            } catch(RemoteException e) {
+                Log.w(TAG, "Dead NotificationManager in isEnabledNotificationListener", e);
             }
         }
         return false;
@@ -1379,6 +1369,10 @@
                                     flags, packageName, TAG);
                         } catch (RemoteException e) {
                             Log.e(TAG, "Error adjusting default volume.", e);
+                        } catch (IllegalArgumentException e) {
+                            Log.e(TAG, "Cannot adjust volume: direction=" + direction
+                                    + ", suggestedStream=" + suggestedStream + ", flags=" + flags,
+                                    e);
                         }
                     }
                 });
@@ -1528,7 +1522,7 @@
 
         private boolean isVoiceKey(int keyCode) {
             return keyCode == KeyEvent.KEYCODE_HEADSETHOOK
-                    || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE;
+                    || (!mHasFeatureLeanback && keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE);
         }
 
         private boolean isUserSetupComplete() {
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index b89d247..5159c70 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -18,8 +18,8 @@
 
 import static android.Manifest.permission.ACCESS_NETWORK_STATE;
 import static android.Manifest.permission.CONNECTIVITY_INTERNAL;
-import static android.Manifest.permission.DUMP;
 import static android.Manifest.permission.MANAGE_NETWORK_POLICY;
+import static android.Manifest.permission.MANAGE_SUBSCRIPTION_PLANS;
 import static android.Manifest.permission.READ_NETWORK_USAGE_HISTORY;
 import static android.Manifest.permission.READ_PHONE_STATE;
 import static android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE;
@@ -33,9 +33,7 @@
 import static android.net.ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED;
 import static android.net.ConnectivityManager.RESTRICT_BACKGROUND_STATUS_WHITELISTED;
 import static android.net.ConnectivityManager.TYPE_MOBILE;
-import static android.net.ConnectivityManager.TYPE_WIMAX;
-import static android.net.ConnectivityManager.isNetworkTypeMobile;
-import static android.net.NetworkPolicy.CYCLE_NONE;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED;
 import static android.net.NetworkPolicy.LIMIT_DISABLED;
 import static android.net.NetworkPolicy.SNOOZE_NEVER;
 import static android.net.NetworkPolicy.WARNING_DISABLED;
@@ -46,20 +44,20 @@
 import static android.net.NetworkPolicyManager.FIREWALL_RULE_ALLOW;
 import static android.net.NetworkPolicyManager.FIREWALL_RULE_DEFAULT;
 import static android.net.NetworkPolicyManager.FIREWALL_RULE_DENY;
+import static android.net.NetworkPolicyManager.MASK_ALL_NETWORKS;
+import static android.net.NetworkPolicyManager.MASK_METERED_NETWORKS;
 import static android.net.NetworkPolicyManager.POLICY_ALLOW_METERED_BACKGROUND;
 import static android.net.NetworkPolicyManager.POLICY_NONE;
 import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
 import static android.net.NetworkPolicyManager.RULE_ALLOW_ALL;
 import static android.net.NetworkPolicyManager.RULE_ALLOW_METERED;
-import static android.net.NetworkPolicyManager.MASK_METERED_NETWORKS;
-import static android.net.NetworkPolicyManager.MASK_ALL_NETWORKS;
 import static android.net.NetworkPolicyManager.RULE_NONE;
 import static android.net.NetworkPolicyManager.RULE_REJECT_ALL;
 import static android.net.NetworkPolicyManager.RULE_REJECT_METERED;
 import static android.net.NetworkPolicyManager.RULE_TEMPORARY_ALLOW_METERED;
-import static android.net.NetworkPolicyManager.computeLastCycleBoundary;
 import static android.net.NetworkPolicyManager.isProcStateAllowedWhileIdleOrPowerSaveMode;
 import static android.net.NetworkPolicyManager.isProcStateAllowedWhileOnRestrictBackground;
+import static android.net.NetworkPolicyManager.resolveNetworkId;
 import static android.net.NetworkPolicyManager.uidPoliciesToString;
 import static android.net.NetworkPolicyManager.uidRulesToString;
 import static android.net.NetworkTemplate.MATCH_MOBILE_3G_LOWER;
@@ -68,16 +66,9 @@
 import static android.net.NetworkTemplate.MATCH_WIFI;
 import static android.net.NetworkTemplate.buildTemplateMobileAll;
 import static android.net.TrafficStats.MB_IN_BYTES;
-import static android.net.wifi.WifiManager.CHANGE_REASON_ADDED;
-import static android.net.wifi.WifiManager.CHANGE_REASON_REMOVED;
-import static android.net.wifi.WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION;
-import static android.net.wifi.WifiManager.EXTRA_CHANGE_REASON;
-import static android.net.wifi.WifiManager.EXTRA_NETWORK_INFO;
-import static android.net.wifi.WifiManager.EXTRA_WIFI_CONFIGURATION;
-import static android.net.wifi.WifiManager.EXTRA_WIFI_INFO;
 import static android.telephony.CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED;
-import static android.telephony.CarrierConfigManager.DATA_CYCLE_USE_PLATFORM_DEFAULT;
 import static android.telephony.CarrierConfigManager.DATA_CYCLE_THRESHOLD_DISABLED;
+import static android.telephony.CarrierConfigManager.DATA_CYCLE_USE_PLATFORM_DEFAULT;
 import static android.text.format.DateUtils.DAY_IN_MILLIS;
 
 import static com.android.internal.util.ArrayUtils.appendInt;
@@ -85,9 +76,11 @@
 import static com.android.internal.util.XmlUtils.readBooleanAttribute;
 import static com.android.internal.util.XmlUtils.readIntAttribute;
 import static com.android.internal.util.XmlUtils.readLongAttribute;
+import static com.android.internal.util.XmlUtils.readStringAttribute;
 import static com.android.internal.util.XmlUtils.writeBooleanAttribute;
 import static com.android.internal.util.XmlUtils.writeIntAttribute;
 import static com.android.internal.util.XmlUtils.writeLongAttribute;
+import static com.android.internal.util.XmlUtils.writeStringAttribute;
 import static com.android.server.NetworkManagementService.LIMIT_GLOBAL_ALERT;
 import static com.android.server.net.NetworkStatsService.ACTION_NETWORK_STATS_UPDATED;
 
@@ -120,22 +113,25 @@
 import android.content.pm.UserInfo;
 import android.content.res.Resources;
 import android.net.ConnectivityManager;
+import android.net.ConnectivityManager.NetworkCallback;
 import android.net.IConnectivityManager;
 import android.net.INetworkManagementEventObserver;
 import android.net.INetworkPolicyListener;
 import android.net.INetworkPolicyManager;
 import android.net.INetworkStatsService;
 import android.net.LinkProperties;
+import android.net.Network;
+import android.net.NetworkCapabilities;
 import android.net.NetworkIdentity;
-import android.net.NetworkInfo;
 import android.net.NetworkPolicy;
+import android.net.NetworkPolicyManager;
 import android.net.NetworkQuotaInfo;
+import android.net.NetworkRequest;
 import android.net.NetworkState;
 import android.net.NetworkTemplate;
+import android.net.TrafficStats;
 import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
-import android.os.PowerSaveState;
 import android.os.Binder;
 import android.os.Environment;
 import android.os.Handler;
@@ -147,29 +143,35 @@
 import android.os.PersistableBundle;
 import android.os.PowerManager;
 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;
 import android.os.ShellCallback;
+import android.os.SystemProperties;
 import android.os.Trace;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
+import android.provider.Settings.Global;
 import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
+import android.telephony.SubscriptionPlan;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.text.format.Formatter;
-import android.text.format.Time;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.AtomicFile;
 import android.util.Log;
 import android.util.NtpTrustedTime;
 import android.util.Pair;
+import android.util.RecurrenceRule;
 import android.util.Slog;
+import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
 import android.util.TrustedTime;
@@ -185,19 +187,17 @@
 import com.android.internal.util.DumpUtils;
 import com.android.internal.util.FastXmlSerializer;
 import com.android.internal.util.IndentingPrintWriter;
+import com.android.internal.util.Preconditions;
 import com.android.server.DeviceIdleController;
 import com.android.server.EventLogTags;
 import com.android.server.LocalServices;
 import com.android.server.ServiceThread;
 import com.android.server.SystemConfig;
-
 import com.android.server.power.BatterySaverPolicy.ServiceType;
+
 import libcore.io.IoUtils;
 
-import com.google.android.collect.Lists;
-
 import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlSerializer;
 
 import java.io.File;
@@ -210,10 +210,12 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.nio.charset.StandardCharsets;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
 import java.util.Calendar;
+import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -261,7 +263,8 @@
     private static final int VERSION_SWITCH_APP_ID = 8;
     private static final int VERSION_ADDED_NETWORK_ID = 9;
     private static final int VERSION_SWITCH_UID = 10;
-    private static final int VERSION_LATEST = VERSION_SWITCH_UID;
+    private static final int VERSION_ADDED_CYCLE = 11;
+    private static final int VERSION_LATEST = VERSION_ADDED_CYCLE;
 
     /**
      * Max items written to {@link #ProcStateSeqHistory}.
@@ -279,6 +282,7 @@
 
     private static final String TAG_POLICY_LIST = "policy-list";
     private static final String TAG_NETWORK_POLICY = "network-policy";
+    private static final String TAG_SUBSCRIPTION_PLAN = "subscription-plan";
     private static final String TAG_UID_POLICY = "uid-policy";
     private static final String TAG_APP_POLICY = "app-policy";
     private static final String TAG_WHITELIST = "whitelist";
@@ -290,8 +294,11 @@
     private static final String ATTR_NETWORK_TEMPLATE = "networkTemplate";
     private static final String ATTR_SUBSCRIBER_ID = "subscriberId";
     private static final String ATTR_NETWORK_ID = "networkId";
-    private static final String ATTR_CYCLE_DAY = "cycleDay";
-    private static final String ATTR_CYCLE_TIMEZONE = "cycleTimezone";
+    @Deprecated private static final String ATTR_CYCLE_DAY = "cycleDay";
+    @Deprecated private static final String ATTR_CYCLE_TIMEZONE = "cycleTimezone";
+    private static final String ATTR_CYCLE_START = "cycleStart";
+    private static final String ATTR_CYCLE_END = "cycleEnd";
+    private static final String ATTR_CYCLE_PERIOD = "cyclePeriod";
     private static final String ATTR_WARNING_BYTES = "warningBytes";
     private static final String ATTR_LIMIT_BYTES = "limitBytes";
     private static final String ATTR_LAST_SNOOZE = "lastSnooze";
@@ -302,6 +309,13 @@
     private static final String ATTR_UID = "uid";
     private static final String ATTR_APP_ID = "appId";
     private static final String ATTR_POLICY = "policy";
+    private static final String ATTR_SUB_ID = "subId";
+    private static final String ATTR_TITLE = "title";
+    private static final String ATTR_SUMMARY = "summary";
+    private static final String ATTR_LIMIT_BEHAVIOR = "limitBehavior";
+    private static final String ATTR_USAGE_BYTES = "usageBytes";
+    private static final String ATTR_USAGE_TIME = "usageTime";
+    private static final String ATTR_OWNER_PACKAGE = "ownerPackage";
 
     private static final String ACTION_ALLOW_BACKGROUND =
             "com.android.server.net.action.ALLOW_BACKGROUND";
@@ -318,7 +332,6 @@
     private static final int MSG_UPDATE_INTERFACE_QUOTA = 10;
     private static final int MSG_REMOVE_INTERFACE_QUOTA = 11;
     private static final int MSG_POLICIES_CHANGED = 13;
-    private static final int MSG_SET_FIREWALL_RULES = 14;
     private static final int MSG_RESET_FIREWALL_RULES_BY_UID = 15;
 
     private static final int UID_MSG_STATE_CHANGED = 100;
@@ -359,9 +372,15 @@
     private final boolean mSuppressDefaultPolicy;
 
     /** Defined network policies. */
+    @GuardedBy("mNetworkPoliciesSecondLock")
     final ArrayMap<NetworkTemplate, NetworkPolicy> mNetworkPolicy = new ArrayMap<>();
-    /** Currently active network rules for ifaces. */
-    final ArrayMap<NetworkPolicy, String[]> mNetworkRules = new ArrayMap<>();
+
+    /** Map from subId to subscription plans. */
+    @GuardedBy("mNetworkPoliciesSecondLock")
+    final SparseArray<SubscriptionPlan[]> mSubscriptionPlans = new SparseArray<>();
+    /** Map from subId to package name that owns subscription plans. */
+    @GuardedBy("mNetworkPoliciesSecondLock")
+    final SparseArray<String> mSubscriptionPlansOwner = new SparseArray<>();
 
     /** Defined UID policies. */
     @GuardedBy("mUidRulesFirstLock") final SparseIntArray mUidPolicy = new SparseIntArray();
@@ -428,6 +447,10 @@
     @GuardedBy("mUidRulesFirstLock")
     final SparseIntArray mUidState = new SparseIntArray();
 
+    /** Map from network ID to last observed meteredness state */
+    @GuardedBy("mNetworkPoliciesSecondLock")
+    private final SparseBooleanArray mNetworkMetered = new SparseBooleanArray();
+
     private final RemoteCallbackList<INetworkPolicyListener>
             mListeners = new RemoteCallbackList<>();
 
@@ -756,21 +779,20 @@
             mContext.registerReceiver(mSnoozeWarningReceiver, snoozeWarningFilter,
                     MANAGE_NETWORK_POLICY, mHandler);
 
-            // listen for configured wifi networks to be removed
-            final IntentFilter wifiConfigFilter =
-                    new IntentFilter(CONFIGURED_NETWORKS_CHANGED_ACTION);
-            mContext.registerReceiver(mWifiConfigReceiver, wifiConfigFilter, null, mHandler);
-
-            // listen for wifi state changes to catch metered hint
-            final IntentFilter wifiStateFilter = new IntentFilter(
-                    WifiManager.NETWORK_STATE_CHANGED_ACTION);
-            mContext.registerReceiver(mWifiStateReceiver, wifiStateFilter, null, mHandler);
+            // listen for configured wifi networks to be loaded
+            final IntentFilter wifiFilter =
+                    new IntentFilter(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION);
+            mContext.registerReceiver(mWifiReceiver, wifiFilter, null, mHandler);
 
             // listen for carrier config changes to update data cycle information
             final IntentFilter carrierConfigFilter = new IntentFilter(
                     ACTION_CARRIER_CONFIG_CHANGED);
             mContext.registerReceiver(mCarrierConfigReceiver, carrierConfigFilter, null, mHandler);
 
+            // listen for meteredness changes
+            mContext.getSystemService(ConnectivityManager.class).registerNetworkCallback(
+                    new NetworkRequest.Builder().build(), mNetworkCallback);
+
             mUsageStats.addAppIdleStateChangeListener(new AppIdleStateChangeListener());
             // tell systemReady() that the service has been initialized
             initCompleteSignal.countDown();
@@ -800,20 +822,22 @@
     }
 
     final private IUidObserver mUidObserver = new IUidObserver.Stub() {
-        @Override public void onUidStateChanged(int uid, int procState,
-                long procStateSeq) throws RemoteException {
+        @Override public void onUidStateChanged(int uid, int procState, long procStateSeq) {
             mUidEventHandler.obtainMessage(UID_MSG_STATE_CHANGED,
                     uid, procState, procStateSeq).sendToTarget();
         }
 
-        @Override public void onUidGone(int uid, boolean disabled) throws RemoteException {
+        @Override public void onUidGone(int uid, boolean disabled) {
             mUidEventHandler.obtainMessage(UID_MSG_GONE, uid, 0).sendToTarget();
         }
 
-        @Override public void onUidActive(int uid) throws RemoteException {
+        @Override public void onUidActive(int uid) {
         }
 
-        @Override public void onUidIdle(int uid, boolean disabled) throws RemoteException {
+        @Override public void onUidIdle(int uid, boolean disabled) {
+        }
+
+        @Override public void onUidCachedChanged(int uid, boolean cached) {
         }
     };
 
@@ -958,80 +982,42 @@
     };
 
     /**
-     * Receiver that watches for {@link WifiConfiguration} to be changed.
+     * Receiver that watches for {@link WifiConfiguration} to be loaded so that
+     * we can perform upgrade logic. After initial upgrade logic, it updates
+     * {@link #mMeteredIfaces} based on configuration changes.
      */
-    final private BroadcastReceiver mWifiConfigReceiver = new BroadcastReceiver() {
+    final private BroadcastReceiver mWifiReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
-            // on background handler thread, and verified CONNECTIVITY_INTERNAL
-            // permission above.
-
-            final int reason = intent.getIntExtra(EXTRA_CHANGE_REASON, CHANGE_REASON_ADDED);
-            if (reason == CHANGE_REASON_REMOVED) {
-                final WifiConfiguration config = intent.getParcelableExtra(
-                        EXTRA_WIFI_CONFIGURATION);
-                if (config.SSID != null) {
-                    final NetworkTemplate template = NetworkTemplate.buildTemplateWifi(config.SSID);
-                    synchronized (mUidRulesFirstLock) {
-                        synchronized (mNetworkPoliciesSecondLock) {
-                            if (mNetworkPolicy.containsKey(template)) {
-                                mNetworkPolicy.remove(template);
-                                writePolicyAL();
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    };
-
-    /**
-     * Receiver that watches {@link WifiInfo} state changes to infer metered
-     * state. Ignores hints when policy is user-defined.
-     */
-    final private BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            // on background handler thread, and verified CONNECTIVITY_INTERNAL
-            // permission above.
-
-            // ignore when not connected
-            final NetworkInfo netInfo = intent.getParcelableExtra(EXTRA_NETWORK_INFO);
-            if (!netInfo.isConnected()) return;
-
-            final WifiInfo info = intent.getParcelableExtra(EXTRA_WIFI_INFO);
-            final boolean meteredHint = info.getMeteredHint();
-
-            final NetworkTemplate template = NetworkTemplate.buildTemplateWifi(info.getSSID());
             synchronized (mUidRulesFirstLock) {
                 synchronized (mNetworkPoliciesSecondLock) {
-                    NetworkPolicy policy = mNetworkPolicy.get(template);
-                    if (policy == null && meteredHint) {
-                        // policy doesn't exist, and AP is hinting that it's
-                        // metered: create an inferred policy.
-                        policy = newWifiPolicy(template, meteredHint);
-                        addNetworkPolicyAL(policy);
+                    upgradeWifiMeteredOverrideAL();
+                }
+            }
+            // Only need to perform upgrade logic once
+            mContext.unregisterReceiver(this);
+        }
+    };
 
-                    } else if (policy != null && policy.inferred) {
-                        // policy exists, and was inferred: update its current
-                        // metered state.
-                        policy.metered = meteredHint;
+    private final NetworkCallback mNetworkCallback = new NetworkCallback() {
+        @Override
+        public void onCapabilitiesChanged(Network network,
+                NetworkCapabilities networkCapabilities) {
+            if (network == null || networkCapabilities == null) return;
 
-                        // since this is inferred for each wifi session, just update
-                        // rules without persisting.
-                        updateNetworkRulesNL();
-                    }
+            synchronized (mNetworkPoliciesSecondLock) {
+                final boolean oldMetered = mNetworkMetered.get(network.netId, false);
+                final boolean newMetered = !networkCapabilities
+                        .hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
+
+                if ((oldMetered != newMetered) || mNetworkMetered.indexOfKey(network.netId) < 0) {
+                    mNetworkMetered.put(network.netId, newMetered);
+                    updateNetworkRulesNL();
                 }
             }
         }
     };
 
-    static NetworkPolicy newWifiPolicy(NetworkTemplate template, boolean metered) {
-        return new NetworkPolicy(template, CYCLE_NONE, Time.TIMEZONE_UTC,
-                WARNING_DISABLED, LIMIT_DISABLED, SNOOZE_NEVER, SNOOZE_NEVER,
-                metered, true);
-    }
-
     /**
      * Observer that watches for {@link INetworkManagementService} alerts.
      */
@@ -1063,15 +1049,16 @@
         // cycle boundary to recompute notifications.
 
         // examine stats for each active policy
-        final long currentTime = currentTimeMillis();
         for (int i = mNetworkPolicy.size()-1; i >= 0; i--) {
             final NetworkPolicy policy = mNetworkPolicy.valueAt(i);
             // ignore policies that aren't relevant to user
             if (!isTemplateRelevant(policy.template)) continue;
             if (!policy.hasCycle()) continue;
 
-            final long start = computeLastCycleBoundary(currentTime, policy);
-            final long end = currentTime;
+            final Pair<ZonedDateTime, ZonedDateTime> cycle = NetworkPolicyManager
+                    .cycleIterator(policy).next();
+            final long start = cycle.first.toInstant().toEpochMilli();
+            final long end = cycle.second.toInstant().toEpochMilli();
             final long totalBytes = getTotalBytes(policy.template, start, end);
 
             if (policy.isOverLimit(totalBytes)) {
@@ -1309,13 +1296,8 @@
      * @param subId that has its associated NetworkPolicy updated if necessary
      * @return if any policies were updated
      */
-    private boolean maybeUpdateMobilePolicyCycleNL(int subId) {
-        if (LOGV) Slog.v(TAG, "maybeUpdateMobilePolicyCycleNL()");
-        final PersistableBundle config = mCarrierConfigManager.getConfigForSubId(subId);
-
-        if (config == null) {
-            return false;
-        }
+    private boolean maybeUpdateMobilePolicyCycleAL(int subId) {
+        if (LOGV) Slog.v(TAG, "maybeUpdateMobilePolicyCycleAL()");
 
         boolean policyUpdated = false;
         final String subscriberId = TelephonyManager.from(mContext).getSubscriberId(subId);
@@ -1326,41 +1308,10 @@
         for (int i = mNetworkPolicy.size() - 1; i >= 0; i--) {
             final NetworkTemplate template = mNetworkPolicy.keyAt(i);
             if (template.matches(probeIdent)) {
-                NetworkPolicy policy = mNetworkPolicy.valueAt(i);
-
-                // only update the policy if the user didn't change any of the defaults.
-                if (!policy.inferred) {
-                    // TODO: inferred could be split, so that if a user changes their data limit or
-                    // warning, it doesn't prevent their cycle date from being updated.
-                    if (LOGD) Slog.v(TAG, "Didn't update NetworkPolicy because policy.inferred");
-                    continue;
-                }
-
-                final int cycleDay = getCycleDayFromCarrierConfig(config, policy.cycleDay);
-                final long warningBytes = getWarningBytesFromCarrierConfig(config,
-                        policy.warningBytes);
-                final long limitBytes = getLimitBytesFromCarrierConfig(config,
-                        policy.limitBytes);
-
-                if (policy.cycleDay == cycleDay &&
-                        policy.warningBytes == warningBytes &&
-                        policy.limitBytes == limitBytes) {
-                    continue;
-                }
-
-                policyUpdated = true;
-                policy.cycleDay = cycleDay;
-                policy.warningBytes = warningBytes;
-                policy.limitBytes = limitBytes;
-
-                if (LOGD) {
-                    Slog.d(TAG, "Updated NetworkPolicy " + policy + " which matches subscriber "
-                            + NetworkIdentity.scrubSubscriberId(subscriberId)
-                            + " from CarrierConfigManager");
-                }
+                final NetworkPolicy policy = mNetworkPolicy.valueAt(i);
+                policyUpdated |= updateDefaultMobilePolicyAL(subId, policy);
             }
         }
-
         return policyUpdated;
     }
 
@@ -1482,7 +1433,7 @@
                 synchronized (mNetworkPoliciesSecondLock) {
                     final boolean added = ensureActiveMobilePolicyAL(subId, subscriberId);
                     if (added) return;
-                    final boolean updated = maybeUpdateMobilePolicyCycleNL(subId);
+                    final boolean updated = maybeUpdateMobilePolicyCycleAL(subId);
                     if (!updated) return;
                     // update network and notification rules, as the data cycle changed and it's
                     // possible that we should be triggering warnings/limits now
@@ -1519,7 +1470,6 @@
         // TODO: reset any policy-disabled networks when any policy is removed
         // completely, which is currently rare case.
 
-        final long currentTime = currentTimeMillis();
         for (int i = mNetworkPolicy.size()-1; i >= 0; i--) {
             final NetworkPolicy policy = mNetworkPolicy.valueAt(i);
             // shortcut when policy has no limit
@@ -1528,8 +1478,10 @@
                 continue;
             }
 
-            final long start = computeLastCycleBoundary(currentTime, policy);
-            final long end = currentTime;
+            final Pair<ZonedDateTime, ZonedDateTime> cycle = NetworkPolicyManager
+                    .cycleIterator(policy).next();
+            final long start = cycle.first.toInstant().toEpochMilli();
+            final long end = cycle.second.toInstant().toEpochMilli();
             final long totalBytes = getTotalBytes(policy.template, start, end);
 
             // disable data connection when over limit and not snoozed
@@ -1569,6 +1521,22 @@
     }
 
     /**
+     * Collect all ifaces from a {@link NetworkState} into the given set.
+     */
+    private static void collectIfaces(ArraySet<String> ifaces, NetworkState state) {
+        final String baseIface = state.linkProperties.getInterfaceName();
+        if (baseIface != null) {
+            ifaces.add(baseIface);
+        }
+        for (LinkProperties stackedLink : state.linkProperties.getStackedLinks()) {
+            final String stackedIface = stackedLink.getInterfaceName();
+            if (stackedIface != null) {
+                ifaces.add(stackedIface);
+            }
+        }
+    }
+
+    /**
      * Examine all connected {@link NetworkState}, looking for
      * {@link NetworkPolicy} that need to be enforced. When matches found, set
      * remaining quota based on usage cycle and historical stats.
@@ -1586,102 +1554,70 @@
 
         // First, generate identities of all connected networks so we can
         // quickly compare them against all defined policies below.
-        final ArrayList<Pair<String, NetworkIdentity>> connIdents = new ArrayList<>(states.length);
-        final ArraySet<String> connIfaces = new ArraySet<String>(states.length);
+        final ArrayMap<NetworkState, NetworkIdentity> identified = new ArrayMap<>();
         for (NetworkState state : states) {
             if (state.networkInfo != null && state.networkInfo.isConnected()) {
                 final NetworkIdentity ident = NetworkIdentity.buildNetworkIdentity(mContext, state);
-
-                final String baseIface = state.linkProperties.getInterfaceName();
-                if (baseIface != null) {
-                    connIdents.add(Pair.create(baseIface, ident));
-                }
-
-                // Stacked interfaces are considered to have same identity as
-                // their parent network.
-                final List<LinkProperties> stackedLinks = state.linkProperties.getStackedLinks();
-                for (LinkProperties stackedLink : stackedLinks) {
-                    final String stackedIface = stackedLink.getInterfaceName();
-                    if (stackedIface != null) {
-                        connIdents.add(Pair.create(stackedIface, ident));
-                    }
-                }
+                identified.put(state, ident);
             }
         }
 
-        // Apply policies against all connected interfaces found above
-        mNetworkRules.clear();
-        final ArrayList<String> ifaceList = Lists.newArrayList();
-        for (int i = mNetworkPolicy.size() - 1; i >= 0; i--) {
-            final NetworkPolicy policy = mNetworkPolicy.valueAt(i);
-
-            ifaceList.clear();
-            for (int j = connIdents.size() - 1; j >= 0; j--) {
-                final Pair<String, NetworkIdentity> ident = connIdents.get(j);
-                if (policy.template.matches(ident.second)) {
-                    ifaceList.add(ident.first);
-                }
-            }
-
-            if (ifaceList.size() > 0) {
-                final String[] ifaces = ifaceList.toArray(new String[ifaceList.size()]);
-                mNetworkRules.put(policy, ifaces);
-            }
-        }
-
+        final ArraySet<String> newMeteredIfaces = new ArraySet<>();
         long lowestRule = Long.MAX_VALUE;
-        final ArraySet<String> newMeteredIfaces = new ArraySet<String>(states.length);
 
-        // apply each policy that we found ifaces for; compute remaining data
-        // based on current cycle and historical stats, and push to kernel.
-        final long currentTime = currentTimeMillis();
-        for (int i = mNetworkRules.size()-1; i >= 0; i--) {
-            final NetworkPolicy policy = mNetworkRules.keyAt(i);
-            final String[] ifaces = mNetworkRules.valueAt(i);
+        // For every well-defined policy, compute remaining data based on
+        // current cycle and historical stats, and push to kernel.
+        final ArraySet<String> matchingIfaces = new ArraySet<>();
+        for (int i = mNetworkPolicy.size() - 1; i >= 0; i--) {
+           final NetworkPolicy policy = mNetworkPolicy.valueAt(i);
 
-            final long start;
-            final long totalBytes;
-            if (policy.hasCycle()) {
-                start = computeLastCycleBoundary(currentTime, policy);
-                totalBytes = getTotalBytes(policy.template, start, currentTime);
-            } else {
-                start = Long.MAX_VALUE;
-                totalBytes = 0;
+            // Collect all ifaces that match this policy
+            matchingIfaces.clear();
+            for (int j = identified.size() - 1; j >= 0; j--) {
+                if (policy.template.matches(identified.valueAt(j))) {
+                    collectIfaces(matchingIfaces, identified.keyAt(j));
+                }
             }
 
             if (LOGD) {
-                Slog.d(TAG, "applying policy " + policy + " to ifaces " + Arrays.toString(ifaces));
+                Slog.d(TAG, "Applying " + policy + " to ifaces " + matchingIfaces);
             }
 
             final boolean hasWarning = policy.warningBytes != LIMIT_DISABLED;
             final boolean hasLimit = policy.limitBytes != LIMIT_DISABLED;
             if (hasLimit || policy.metered) {
                 final long quotaBytes;
-                if (!hasLimit) {
+                if (hasLimit && policy.hasCycle()) {
+                    final Pair<ZonedDateTime, ZonedDateTime> cycle = NetworkPolicyManager
+                            .cycleIterator(policy).next();
+                    final long start = cycle.first.toInstant().toEpochMilli();
+                    final long end = cycle.second.toInstant().toEpochMilli();
+                    final long totalBytes = getTotalBytes(policy.template, start, end);
+
+                    if (policy.lastLimitSnooze >= start) {
+                        // snoozing past quota, but we still need to restrict apps,
+                        // so push really high quota.
+                        quotaBytes = Long.MAX_VALUE;
+                    } else {
+                        // remaining "quota" bytes are based on total usage in
+                        // current cycle. kernel doesn't like 0-byte rules, so we
+                        // set 1-byte quota and disable the radio later.
+                        quotaBytes = Math.max(1, policy.limitBytes - totalBytes);
+                    }
+                } else {
                     // metered network, but no policy limit; we still need to
                     // restrict apps, so push really high quota.
                     quotaBytes = Long.MAX_VALUE;
-                } else if (policy.lastLimitSnooze >= start) {
-                    // snoozing past quota, but we still need to restrict apps,
-                    // so push really high quota.
-                    quotaBytes = Long.MAX_VALUE;
-                } else {
-                    // remaining "quota" bytes are based on total usage in
-                    // current cycle. kernel doesn't like 0-byte rules, so we
-                    // set 1-byte quota and disable the radio later.
-                    quotaBytes = Math.max(1, policy.limitBytes - totalBytes);
                 }
 
-                if (ifaces.length > 1) {
+                if (matchingIfaces.size() > 1) {
                     // TODO: switch to shared quota once NMS supports
                     Slog.w(TAG, "shared quota unsupported; generating rule for each iface");
                 }
 
-                for (String iface : ifaces) {
-                    // long quotaBytes split up into two ints to fit in message
-                    mHandler.obtainMessage(MSG_UPDATE_INTERFACE_QUOTA,
-                            (int) (quotaBytes >> 32), (int) (quotaBytes & 0xFFFFFFFF), iface)
-                            .sendToTarget();
+                for (int j = matchingIfaces.size() - 1; j >= 0; j--) {
+                    final String iface = matchingIfaces.valueAt(j);
+                    setInterfaceQuotaAsync(iface, quotaBytes);
                     newMeteredIfaces.add(iface);
                 }
             }
@@ -1695,29 +1631,36 @@
             }
         }
 
-        for (int i = connIfaces.size()-1; i >= 0; i--) {
-            String iface = connIfaces.valueAt(i);
-            // long quotaBytes split up into two ints to fit in message
-            mHandler.obtainMessage(MSG_UPDATE_INTERFACE_QUOTA,
-                    (int) (Long.MAX_VALUE >> 32), (int) (Long.MAX_VALUE & 0xFFFFFFFF), iface)
-                    .sendToTarget();
-            newMeteredIfaces.add(iface);
+        // One final pass to catch any metered ifaces that don't have explicitly
+        // defined policies; typically Wi-Fi networks.
+        for (NetworkState state : states) {
+            if (state.networkInfo != null && state.networkInfo.isConnected()
+                    && !state.networkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED)) {
+                matchingIfaces.clear();
+                collectIfaces(matchingIfaces, state);
+                for (int j = matchingIfaces.size() - 1; j >= 0; j--) {
+                    final String iface = matchingIfaces.valueAt(j);
+                    if (!newMeteredIfaces.contains(iface)) {
+                        setInterfaceQuotaAsync(iface, Long.MAX_VALUE);
+                        newMeteredIfaces.add(iface);
+                    }
+                }
+            }
         }
 
-        mHandler.obtainMessage(MSG_ADVISE_PERSIST_THRESHOLD, lowestRule).sendToTarget();
-
-        // remove quota on any trailing interfaces
+        // Remove quota from any interfaces that are no longer metered.
         for (int i = mMeteredIfaces.size() - 1; i >= 0; i--) {
             final String iface = mMeteredIfaces.valueAt(i);
             if (!newMeteredIfaces.contains(iface)) {
-                mHandler.obtainMessage(MSG_REMOVE_INTERFACE_QUOTA, iface)
-                        .sendToTarget();
+                removeInterfaceQuotaAsync(iface);
             }
         }
         mMeteredIfaces = newMeteredIfaces;
 
         final String[] meteredIfaces = mMeteredIfaces.toArray(new String[mMeteredIfaces.size()]);
         mHandler.obtainMessage(MSG_METERED_IFACES_CHANGED, meteredIfaces).sendToTarget();
+
+        mHandler.obtainMessage(MSG_ADVISE_PERSIST_THRESHOLD, lowestRule).sendToTarget();
     }
 
     /**
@@ -1784,31 +1727,89 @@
 
     @VisibleForTesting
     public NetworkPolicy buildDefaultMobilePolicy(int subId, String subscriberId) {
-        PersistableBundle config = mCarrierConfigManager.getConfigForSubId(subId);
-
-        // assume usage cycle starts today
-        final Time time = new Time();
-        time.setToNow();
-
-        final String cycleTimezone = time.timezone;
-
-        final int cycleDay = getCycleDayFromCarrierConfig(config, time.monthDay);
-        final long warningBytes = getWarningBytesFromCarrierConfig(config,
-                getPlatformDefaultWarningBytes());
-        final long limitBytes = getLimitBytesFromCarrierConfig(config,
-                getPlatformDefaultLimitBytes());
-
         final NetworkTemplate template = buildTemplateMobileAll(subscriberId);
-        final NetworkPolicy policy = new NetworkPolicy(template, cycleDay, cycleTimezone,
-                warningBytes, limitBytes, SNOOZE_NEVER, SNOOZE_NEVER, true, true);
+        final RecurrenceRule cycleRule = NetworkPolicy
+                .buildRule(ZonedDateTime.now().getDayOfMonth(), ZoneId.systemDefault());
+        final NetworkPolicy policy = new NetworkPolicy(template, cycleRule,
+                getPlatformDefaultWarningBytes(), getPlatformDefaultLimitBytes(),
+                SNOOZE_NEVER, SNOOZE_NEVER, true, true);
+        synchronized (mUidRulesFirstLock) {
+            synchronized (mNetworkPoliciesSecondLock) {
+                updateDefaultMobilePolicyAL(subId, policy);
+            }
+        }
         return policy;
     }
 
+    /**
+     * Update the given {@link NetworkPolicy} based on any carrier-provided
+     * defaults via {@link SubscriptionPlan} or {@link CarrierConfigManager}.
+     * Leaves policy untouched if the user has modified it.
+     *
+     * @return if the policy was modified
+     */
+    private boolean updateDefaultMobilePolicyAL(int subId, NetworkPolicy policy) {
+        if (!policy.inferred) {
+            if (LOGD) Slog.d(TAG, "Ignoring user-defined policy " + policy);
+            return false;
+        }
+
+        final NetworkPolicy original = new NetworkPolicy(policy.template, policy.cycleRule,
+                policy.warningBytes, policy.limitBytes, policy.lastWarningSnooze,
+                policy.lastLimitSnooze, policy.metered, policy.inferred);
+
+        final SubscriptionPlan[] plans = mSubscriptionPlans.get(subId);
+        if (!ArrayUtils.isEmpty(plans)) {
+            final SubscriptionPlan plan = plans[0];
+            policy.cycleRule = plan.getCycleRule();
+            final long planLimitBytes = plan.getDataLimitBytes();
+            if (planLimitBytes == SubscriptionPlan.BYTES_UNKNOWN) {
+                policy.warningBytes = getPlatformDefaultWarningBytes();
+                policy.limitBytes = getPlatformDefaultLimitBytes();
+            } else if (planLimitBytes == SubscriptionPlan.BYTES_UNLIMITED) {
+                policy.warningBytes = NetworkPolicy.WARNING_DISABLED;
+                policy.limitBytes = NetworkPolicy.LIMIT_DISABLED;
+            } else {
+                policy.warningBytes = (planLimitBytes * 9) / 10;
+                switch (plan.getDataLimitBehavior()) {
+                    case SubscriptionPlan.LIMIT_BEHAVIOR_BILLED:
+                    case SubscriptionPlan.LIMIT_BEHAVIOR_DISABLED:
+                        policy.limitBytes = planLimitBytes;
+                        break;
+                    default:
+                        policy.limitBytes = NetworkPolicy.LIMIT_DISABLED;
+                        break;
+                }
+            }
+        } else {
+            final PersistableBundle config = mCarrierConfigManager.getConfigForSubId(subId);
+            final int currentCycleDay;
+            if (policy.cycleRule.isMonthly()) {
+                currentCycleDay = policy.cycleRule.start.getDayOfMonth();
+            } else {
+                currentCycleDay = NetworkPolicy.CYCLE_NONE;
+            }
+            final int cycleDay = getCycleDayFromCarrierConfig(config, currentCycleDay);
+            policy.cycleRule = NetworkPolicy.buildRule(cycleDay, ZoneId.systemDefault());
+            policy.warningBytes = getWarningBytesFromCarrierConfig(config, policy.warningBytes);
+            policy.limitBytes = getLimitBytesFromCarrierConfig(config, policy.limitBytes);
+        }
+
+        if (policy.equals(original)) {
+            return false;
+        } else {
+            Slog.d(TAG, "Updated " + original + " to " + policy);
+            return true;
+        }
+    }
+
     private void readPolicyAL() {
         if (LOGV) Slog.v(TAG, "readPolicyAL()");
 
         // clear any existing policy and read from disk
         mNetworkPolicy.clear();
+        mSubscriptionPlans.clear();
+        mSubscriptionPlansOwner.clear();
         mUidPolicy.clear();
 
         FileInputStream fis = null;
@@ -1852,12 +1853,24 @@
                         } else {
                             networkId = null;
                         }
-                        final int cycleDay = readIntAttribute(in, ATTR_CYCLE_DAY);
-                        final String cycleTimezone;
-                        if (version >= VERSION_ADDED_TIMEZONE) {
-                            cycleTimezone = in.getAttributeValue(null, ATTR_CYCLE_TIMEZONE);
+                        final RecurrenceRule cycleRule;
+                        if (version >= VERSION_ADDED_CYCLE) {
+                            final String start = readStringAttribute(in, ATTR_CYCLE_START);
+                            final String end = readStringAttribute(in, ATTR_CYCLE_END);
+                            final String period = readStringAttribute(in, ATTR_CYCLE_PERIOD);
+                            cycleRule = new RecurrenceRule(
+                                    RecurrenceRule.convertZonedDateTime(start),
+                                    RecurrenceRule.convertZonedDateTime(end),
+                                    RecurrenceRule.convertPeriod(period));
                         } else {
-                            cycleTimezone = Time.TIMEZONE_UTC;
+                            final int cycleDay = readIntAttribute(in, ATTR_CYCLE_DAY);
+                            final String cycleTimezone;
+                            if (version >= VERSION_ADDED_TIMEZONE) {
+                                cycleTimezone = in.getAttributeValue(null, ATTR_CYCLE_TIMEZONE);
+                            } else {
+                                cycleTimezone = "UTC";
+                            }
+                            cycleRule = NetworkPolicy.buildRule(cycleDay, ZoneId.of(cycleTimezone));
                         }
                         final long warningBytes = readLongAttribute(in, ATTR_WARNING_BYTES);
                         final long limitBytes = readLongAttribute(in, ATTR_LIMIT_BYTES);
@@ -1899,11 +1912,48 @@
                         final NetworkTemplate template = new NetworkTemplate(networkTemplate,
                                 subscriberId, networkId);
                         if (template.isPersistable()) {
-                            mNetworkPolicy.put(template, new NetworkPolicy(template, cycleDay,
-                                    cycleTimezone, warningBytes, limitBytes, lastWarningSnooze,
+                            mNetworkPolicy.put(template, new NetworkPolicy(template, cycleRule,
+                                    warningBytes, limitBytes, lastWarningSnooze,
                                     lastLimitSnooze, metered, inferred));
                         }
 
+                    } else if (TAG_SUBSCRIPTION_PLAN.equals(tag)) {
+                        final String start = readStringAttribute(in, ATTR_CYCLE_START);
+                        final String end = readStringAttribute(in, ATTR_CYCLE_END);
+                        final String period = readStringAttribute(in, ATTR_CYCLE_PERIOD);
+                        final SubscriptionPlan.Builder builder = new SubscriptionPlan.Builder(
+                                RecurrenceRule.convertZonedDateTime(start),
+                                RecurrenceRule.convertZonedDateTime(end),
+                                RecurrenceRule.convertPeriod(period));
+                        builder.setTitle(readStringAttribute(in, ATTR_TITLE));
+                        builder.setSummary(readStringAttribute(in, ATTR_SUMMARY));
+
+                        final long limitBytes = readLongAttribute(in, ATTR_LIMIT_BYTES,
+                                SubscriptionPlan.BYTES_UNKNOWN);
+                        final int limitBehavior = readIntAttribute(in, ATTR_LIMIT_BEHAVIOR,
+                                SubscriptionPlan.LIMIT_BEHAVIOR_UNKNOWN);
+                        if (limitBytes != SubscriptionPlan.BYTES_UNKNOWN
+                                && limitBehavior != SubscriptionPlan.LIMIT_BEHAVIOR_UNKNOWN) {
+                            builder.setDataLimit(limitBytes, limitBehavior);
+                        }
+
+                        final long usageBytes = readLongAttribute(in, ATTR_USAGE_BYTES,
+                                SubscriptionPlan.BYTES_UNKNOWN);
+                        final long usageTime = readLongAttribute(in, ATTR_USAGE_TIME,
+                                SubscriptionPlan.TIME_UNKNOWN);
+                        if (usageBytes != SubscriptionPlan.BYTES_UNKNOWN
+                                && usageTime != SubscriptionPlan.TIME_UNKNOWN) {
+                            builder.setDataUsage(usageBytes, usageTime);
+                        }
+
+                        final int subId = readIntAttribute(in, ATTR_SUB_ID);
+                        final SubscriptionPlan plan = builder.build();
+                        mSubscriptionPlans.put(subId, ArrayUtils.appendElement(
+                                SubscriptionPlan.class, mSubscriptionPlans.get(subId), plan));
+
+                        final String ownerPackage = readStringAttribute(in, ATTR_OWNER_PACKAGE);
+                        mSubscriptionPlansOwner.put(subId, ownerPackage);
+
                     } else if (TAG_UID_POLICY.equals(tag)) {
                         final int uid = readIntAttribute(in, ATTR_UID);
                         final int policy = readIntAttribute(in, ATTR_POLICY);
@@ -1963,10 +2013,8 @@
 
         } catch (FileNotFoundException e) {
             // missing policy is okay, probably first boot
-            upgradeLegacyBackgroundDataUL();
-        } catch (IOException e) {
-            Log.wtf(TAG, "problem reading network policy", e);
-        } catch (XmlPullParserException e) {
+            upgradeDefaultBackgroundDataUL();
+        } catch (Exception e) {
             Log.wtf(TAG, "problem reading network policy", e);
         } finally {
             IoUtils.closeQuietly(fis);
@@ -1977,15 +2025,55 @@
      * Upgrade legacy background data flags, notifying listeners of one last
      * change to always-true.
      */
-    private void upgradeLegacyBackgroundDataUL() {
-        mRestrictBackground = Settings.Secure.getInt(
-                mContext.getContentResolver(), Settings.Secure.BACKGROUND_DATA, 1) != 1;
+    private void upgradeDefaultBackgroundDataUL() {
+        // This method is only called when we're unable to find the network policy flag, which
+        // usually happens on first boot of a new device and not one that has received an OTA.
 
-        // kick off one last broadcast if restricted
-        if (mRestrictBackground) {
-            final Intent broadcast = new Intent(
-                    ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED);
-            mContext.sendBroadcastAsUser(broadcast, UserHandle.ALL);
+        // Seed from the default value configured for this device.
+        mRestrictBackground = Settings.Global.getInt(
+                mContext.getContentResolver(), Global.DEFAULT_RESTRICT_BACKGROUND_DATA, 0) == 1;
+
+        // NOTE: We used to read the legacy setting here :
+        //
+        // final int legacyFlagValue = Settings.Secure.getInt(
+        //        mContext.getContentResolver(), Settings.Secure.BACKGROUND_DATA, ..);
+        //
+        // This is no longer necessary because we will never upgrade directly from Gingerbread
+        // to O+. Devices upgrading from ICS onwards to O will have a netpolicy.xml file that
+        // contains the correct value that we will continue to use.
+    }
+
+    /**
+     * Perform upgrade step of moving any user-defined meterness overrides over
+     * into {@link WifiConfiguration}.
+     */
+    private void upgradeWifiMeteredOverrideAL() {
+        boolean modified = false;
+        final WifiManager wm = mContext.getSystemService(WifiManager.class);
+        final List<WifiConfiguration> configs = wm.getConfiguredNetworks();
+        for (int i = 0; i < mNetworkPolicy.size(); ) {
+            final NetworkPolicy policy = mNetworkPolicy.valueAt(i);
+            if (policy.template.getMatchRule() == NetworkTemplate.MATCH_WIFI
+                    && !policy.inferred) {
+                mNetworkPolicy.removeAt(i);
+                modified = true;
+
+                final String networkId = resolveNetworkId(policy.template.getNetworkId());
+                for (WifiConfiguration config : configs) {
+                    if (Objects.equals(resolveNetworkId(config), networkId)) {
+                        Slog.d(TAG, "Found network " + networkId + "; upgrading metered hint");
+                        config.meteredOverride = policy.metered
+                                ? WifiConfiguration.METERED_OVERRIDE_METERED
+                                : WifiConfiguration.METERED_OVERRIDE_NOT_METERED;
+                        wm.updateNetwork(config);
+                    }
+                }
+            } else {
+                i++;
+            }
+        }
+        if (modified) {
+            writePolicyAL();
         }
     }
 
@@ -2020,8 +2108,12 @@
                 if (networkId != null) {
                     out.attribute(null, ATTR_NETWORK_ID, networkId);
                 }
-                writeIntAttribute(out, ATTR_CYCLE_DAY, policy.cycleDay);
-                out.attribute(null, ATTR_CYCLE_TIMEZONE, policy.cycleTimezone);
+                writeStringAttribute(out, ATTR_CYCLE_START,
+                        RecurrenceRule.convertZonedDateTime(policy.cycleRule.start));
+                writeStringAttribute(out, ATTR_CYCLE_END,
+                        RecurrenceRule.convertZonedDateTime(policy.cycleRule.end));
+                writeStringAttribute(out, ATTR_CYCLE_PERIOD,
+                        RecurrenceRule.convertPeriod(policy.cycleRule.period));
                 writeLongAttribute(out, ATTR_WARNING_BYTES, policy.warningBytes);
                 writeLongAttribute(out, ATTR_LIMIT_BYTES, policy.limitBytes);
                 writeLongAttribute(out, ATTR_LAST_WARNING_SNOOZE, policy.lastWarningSnooze);
@@ -2031,6 +2123,34 @@
                 out.endTag(null, TAG_NETWORK_POLICY);
             }
 
+            // write all known subscription plans
+            for (int i = 0; i < mSubscriptionPlans.size(); i++) {
+                final int subId = mSubscriptionPlans.keyAt(i);
+                final String ownerPackage = mSubscriptionPlansOwner.get(subId);
+                final SubscriptionPlan[] plans = mSubscriptionPlans.valueAt(i);
+                if (ArrayUtils.isEmpty(plans)) continue;
+
+                for (SubscriptionPlan plan : plans) {
+                    out.startTag(null, TAG_SUBSCRIPTION_PLAN);
+                    writeIntAttribute(out, ATTR_SUB_ID, subId);
+                    writeStringAttribute(out, ATTR_OWNER_PACKAGE, ownerPackage);
+                    final RecurrenceRule cycleRule = plan.getCycleRule();
+                    writeStringAttribute(out, ATTR_CYCLE_START,
+                            RecurrenceRule.convertZonedDateTime(cycleRule.start));
+                    writeStringAttribute(out, ATTR_CYCLE_END,
+                            RecurrenceRule.convertZonedDateTime(cycleRule.end));
+                    writeStringAttribute(out, ATTR_CYCLE_PERIOD,
+                            RecurrenceRule.convertPeriod(cycleRule.period));
+                    writeStringAttribute(out, ATTR_TITLE, plan.getTitle());
+                    writeStringAttribute(out, ATTR_SUMMARY, plan.getSummary());
+                    writeLongAttribute(out, ATTR_LIMIT_BYTES, plan.getDataLimitBytes());
+                    writeIntAttribute(out, ATTR_LIMIT_BEHAVIOR, plan.getDataLimitBehavior());
+                    writeLongAttribute(out, ATTR_USAGE_BYTES, plan.getDataUsageBytes());
+                    writeLongAttribute(out, ATTR_USAGE_TIME, plan.getDataUsageTime());
+                    out.endTag(null, TAG_SUBSCRIPTION_PLAN);
+                }
+            }
+
             // write all known uid policies
             for (int i = 0; i < mUidPolicy.size(); i++) {
                 final int uid = mUidPolicy.keyAt(i);
@@ -2493,80 +2613,235 @@
         }
     }
 
-    private NetworkPolicy findPolicyForNetworkNL(NetworkIdentity ident) {
-        for (int i = mNetworkPolicy.size()-1; i >= 0; i--) {
-            NetworkPolicy policy = mNetworkPolicy.valueAt(i);
-            if (policy.template.matches(ident)) {
-                return policy;
-            }
-        }
-        return null;
-    }
-
     @Override
-    public NetworkQuotaInfo getNetworkQuotaInfo(NetworkState state) {
-        mContext.enforceCallingOrSelfPermission(ACCESS_NETWORK_STATE, TAG);
-
-        // only returns usage summary, so we don't require caller to have
-        // READ_NETWORK_USAGE_HISTORY.
+    public void setWifiMeteredOverride(String networkId, int meteredOverride) {
+        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
         final long token = Binder.clearCallingIdentity();
         try {
-            return getNetworkQuotaInfoUnchecked(state);
+            final WifiManager wm = mContext.getSystemService(WifiManager.class);
+            final List<WifiConfiguration> configs = wm.getConfiguredNetworks();
+            for (WifiConfiguration config : configs) {
+                if (Objects.equals(resolveNetworkId(config), networkId)) {
+                    config.meteredOverride = meteredOverride;
+                    wm.updateNetwork(config);
+                }
+            }
         } finally {
             Binder.restoreCallingIdentity(token);
         }
     }
 
-    private NetworkQuotaInfo getNetworkQuotaInfoUnchecked(NetworkState state) {
-        final NetworkIdentity ident = NetworkIdentity.buildNetworkIdentity(mContext, state);
+    @Override
+    @Deprecated
+    public NetworkQuotaInfo getNetworkQuotaInfo(NetworkState state) {
+        Log.w(TAG, "Shame on UID " + Binder.getCallingUid()
+                + " for calling the hidden API getNetworkQuotaInfo(). Shame!");
+        return new NetworkQuotaInfo();
+    }
 
-        final NetworkPolicy policy;
-        synchronized (mNetworkPoliciesSecondLock) {
-            policy = findPolicyForNetworkNL(ident);
+    private void enforceSubscriptionPlanAccess(int subId, int callingUid, String callingPackage) {
+        // Verify they're not lying about package name
+        mAppOps.checkPackage(callingUid, callingPackage);
+
+        final SubscriptionInfo si;
+        final PersistableBundle config;
+        final long token = Binder.clearCallingIdentity();
+        try {
+            si = mContext.getSystemService(SubscriptionManager.class)
+                    .getActiveSubscriptionInfo(subId);
+            config = mCarrierConfigManager.getConfigForSubId(subId);
+        } finally {
+            Binder.restoreCallingIdentity(token);
         }
 
-        if (policy == null || !policy.hasCycle()) {
-            // missing policy means we can't derive useful quota info
-            return null;
+        // First check: is caller the CarrierService?
+        if (si != null) {
+            if (si.isEmbedded() && si.canManageSubscription(mContext, callingPackage)) {
+                return;
+            }
         }
 
-        final long currentTime = currentTimeMillis();
+        // Second check: has the CarrierService delegated access?
+        if (config != null) {
+            final String overridePackage = config
+                    .getString(CarrierConfigManager.KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING, null);
+            if (!TextUtils.isEmpty(overridePackage)
+                    && Objects.equals(overridePackage, callingPackage)) {
+                return;
+            }
+        }
 
-        // find total bytes used under policy
-        final long start = computeLastCycleBoundary(currentTime, policy);
-        final long end = currentTime;
-        final long totalBytes = getTotalBytes(policy.template, start, end);
+        // Third check: is caller the fallback/default CarrierService?
+        final String defaultPackage = mCarrierConfigManager.getDefaultCarrierServicePackageName();
+        if (!TextUtils.isEmpty(defaultPackage)
+                && Objects.equals(defaultPackage, callingPackage)) {
+            return;
+        }
 
-        // report soft and hard limits under policy
-        final long softLimitBytes = policy.warningBytes != WARNING_DISABLED ? policy.warningBytes
-                : NetworkQuotaInfo.NO_LIMIT;
-        final long hardLimitBytes = policy.limitBytes != LIMIT_DISABLED ? policy.limitBytes
-                : NetworkQuotaInfo.NO_LIMIT;
-
-        return new NetworkQuotaInfo(totalBytes, softLimitBytes, hardLimitBytes);
+        // Final check: does the caller hold a permission?
+        mContext.enforceCallingOrSelfPermission(MANAGE_SUBSCRIPTION_PLANS, TAG);
     }
 
     @Override
-    public boolean isNetworkMetered(NetworkState state) {
-        if (state.networkInfo == null) {
-            return false;
-        }
+    public SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage) {
+        enforceSubscriptionPlanAccess(subId, Binder.getCallingUid(), callingPackage);
 
-        final NetworkIdentity ident = NetworkIdentity.buildNetworkIdentity(mContext, state);
+        final String fake = SystemProperties.get("fw.fake_plan");
+        if (!TextUtils.isEmpty(fake)) {
+            final List<SubscriptionPlan> plans = new ArrayList<>();
+            if ("month_hard".equals(fake)) {
+                plans.add(SubscriptionPlan.Builder
+                        .createRecurringMonthly(ZonedDateTime.parse("2007-03-14T00:00:00.000Z"))
+                        .setTitle("G-Mobile")
+                        .setDataLimit(5 * TrafficStats.GB_IN_BYTES,
+                                SubscriptionPlan.LIMIT_BEHAVIOR_BILLED)
+                        .setDataUsage(1 * TrafficStats.GB_IN_BYTES,
+                                ZonedDateTime.now().minusHours(36).toInstant().toEpochMilli())
+                        .build());
+                plans.add(SubscriptionPlan.Builder
+                        .createRecurringMonthly(ZonedDateTime.parse("2017-03-14T00:00:00.000Z"))
+                        .setTitle("G-Mobile Happy")
+                        .setDataLimit(SubscriptionPlan.BYTES_UNLIMITED,
+                                SubscriptionPlan.LIMIT_BEHAVIOR_BILLED)
+                        .setDataUsage(5 * TrafficStats.GB_IN_BYTES,
+                                ZonedDateTime.now().minusHours(36).toInstant().toEpochMilli())
+                        .build());
+                plans.add(SubscriptionPlan.Builder
+                        .createRecurringMonthly(ZonedDateTime.parse("2017-03-14T00:00:00.000Z"))
+                        .setTitle("G-Mobile, Charged after limit")
+                        .setDataLimit(5 * TrafficStats.GB_IN_BYTES,
+                                SubscriptionPlan.LIMIT_BEHAVIOR_BILLED)
+                        .setDataUsage(5 * TrafficStats.GB_IN_BYTES,
+                                ZonedDateTime.now().minusHours(36).toInstant().toEpochMilli())
+                        .build());
+            } else if ("month_soft".equals(fake)) {
+                plans.add(SubscriptionPlan.Builder
+                        .createRecurringMonthly(ZonedDateTime.parse("2007-03-14T00:00:00.000Z"))
+                        .setTitle("G-Mobile is the carriers name who this plan belongs to")
+                        .setSummary("Crazy unlimited bandwidth plan with incredibly long title "
+                                + "that should be cut off to prevent UI from looking terrible")
+                        .setDataLimit(5 * TrafficStats.GB_IN_BYTES,
+                                SubscriptionPlan.LIMIT_BEHAVIOR_THROTTLED)
+                        .setDataUsage(1 * TrafficStats.GB_IN_BYTES,
+                                ZonedDateTime.now().minusHours(1).toInstant().toEpochMilli())
+                        .build());
+                plans.add(SubscriptionPlan.Builder
+                        .createRecurringMonthly(ZonedDateTime.parse("2017-03-14T00:00:00.000Z"))
+                        .setTitle("G-Mobile, Throttled after limit")
+                        .setDataLimit(5 * TrafficStats.GB_IN_BYTES,
+                                SubscriptionPlan.LIMIT_BEHAVIOR_THROTTLED)
+                        .setDataUsage(5 * TrafficStats.GB_IN_BYTES,
+                                ZonedDateTime.now().minusHours(1).toInstant().toEpochMilli())
+                        .build());
+                plans.add(SubscriptionPlan.Builder
+                        .createRecurringMonthly(ZonedDateTime.parse("2017-03-14T00:00:00.000Z"))
+                        .setTitle("G-Mobile, No data connection after limit")
+                        .setDataLimit(5 * TrafficStats.GB_IN_BYTES,
+                                SubscriptionPlan.LIMIT_BEHAVIOR_DISABLED)
+                        .setDataUsage(5 * TrafficStats.GB_IN_BYTES,
+                                ZonedDateTime.now().minusHours(1).toInstant().toEpochMilli())
+                        .build());
 
-        final NetworkPolicy policy;
-        synchronized (mNetworkPoliciesSecondLock) {
-            policy = findPolicyForNetworkNL(ident);
-        }
-
-        if (policy != null) {
-            return policy.metered;
-        } else {
-            final int type = state.networkInfo.getType();
-            if ((isNetworkTypeMobile(type) && ident.getMetered()) || type == TYPE_WIMAX) {
-                return true;
+            } else if ("month_none".equals(fake)) {
+                plans.add(SubscriptionPlan.Builder
+                        .createRecurringMonthly(ZonedDateTime.parse("2007-03-14T00:00:00.000Z"))
+                        .setTitle("G-Mobile")
+                        .build());
+            } else if ("prepaid".equals(fake)) {
+                plans.add(SubscriptionPlan.Builder
+                        .createNonrecurring(ZonedDateTime.now().minusDays(20),
+                                ZonedDateTime.now().plusDays(10))
+                        .setTitle("G-Mobile")
+                        .setDataLimit(512 * TrafficStats.MB_IN_BYTES,
+                                SubscriptionPlan.LIMIT_BEHAVIOR_DISABLED)
+                        .setDataUsage(100 * TrafficStats.MB_IN_BYTES,
+                                ZonedDateTime.now().minusHours(3).toInstant().toEpochMilli())
+                        .build());
+            } else if ("prepaid_crazy".equals(fake)) {
+                plans.add(SubscriptionPlan.Builder
+                        .createNonrecurring(ZonedDateTime.now().minusDays(20),
+                                ZonedDateTime.now().plusDays(10))
+                        .setTitle("G-Mobile Anytime")
+                        .setDataLimit(512 * TrafficStats.MB_IN_BYTES,
+                                SubscriptionPlan.LIMIT_BEHAVIOR_DISABLED)
+                        .setDataUsage(100 * TrafficStats.MB_IN_BYTES,
+                                ZonedDateTime.now().minusHours(3).toInstant().toEpochMilli())
+                        .build());
+                plans.add(SubscriptionPlan.Builder
+                        .createNonrecurring(ZonedDateTime.now().minusDays(10),
+                                ZonedDateTime.now().plusDays(20))
+                        .setTitle("G-Mobile Nickel Nights")
+                        .setSummary("5¢/GB between 1-5AM")
+                        .setDataLimit(5 * TrafficStats.GB_IN_BYTES,
+                                SubscriptionPlan.LIMIT_BEHAVIOR_THROTTLED)
+                        .setDataUsage(15 * TrafficStats.MB_IN_BYTES,
+                                ZonedDateTime.now().minusHours(30).toInstant().toEpochMilli())
+                        .build());
+                plans.add(SubscriptionPlan.Builder
+                        .createNonrecurring(ZonedDateTime.now().minusDays(10),
+                                ZonedDateTime.now().plusDays(20))
+                        .setTitle("G-Mobile Bonus 3G")
+                        .setSummary("Unlimited 3G data")
+                        .setDataLimit(1 * TrafficStats.GB_IN_BYTES,
+                                SubscriptionPlan.LIMIT_BEHAVIOR_THROTTLED)
+                        .setDataUsage(300 * TrafficStats.MB_IN_BYTES,
+                                ZonedDateTime.now().minusHours(1).toInstant().toEpochMilli())
+                        .build());
+            } else if ("unlimited".equals(fake)) {
+                plans.add(SubscriptionPlan.Builder
+                        .createNonrecurring(ZonedDateTime.now().minusDays(20),
+                                ZonedDateTime.now().plusDays(10))
+                        .setTitle("G-Mobile Awesome")
+                        .setDataLimit(SubscriptionPlan.BYTES_UNLIMITED,
+                                SubscriptionPlan.LIMIT_BEHAVIOR_THROTTLED)
+                        .setDataUsage(50 * TrafficStats.MB_IN_BYTES,
+                                ZonedDateTime.now().minusHours(3).toInstant().toEpochMilli())
+                        .build());
             }
-            return false;
+            return plans.toArray(new SubscriptionPlan[plans.size()]);
+        }
+
+        synchronized (mNetworkPoliciesSecondLock) {
+            // Only give out plan details to the package that defined them,
+            // so that we don't risk leaking plans between apps. We always
+            // let in core system components (like the Settings app).
+            final String ownerPackage = mSubscriptionPlansOwner.get(subId);
+            if (Objects.equals(ownerPackage, callingPackage)
+                    || (UserHandle.getCallingAppId() == android.os.Process.SYSTEM_UID)) {
+                return mSubscriptionPlans.get(subId);
+            } else {
+                Log.w(TAG, "Not returning plans because caller " + callingPackage
+                        + " doesn't match owner " + ownerPackage);
+                return null;
+            }
+        }
+    }
+
+    @Override
+    public void setSubscriptionPlans(int subId, SubscriptionPlan[] plans, String callingPackage) {
+        enforceSubscriptionPlanAccess(subId, Binder.getCallingUid(), callingPackage);
+
+        for (SubscriptionPlan plan : plans) {
+            Preconditions.checkNotNull(plan);
+        }
+
+        final long token = Binder.clearCallingIdentity();
+        try {
+            maybeRefreshTrustedTime();
+            synchronized (mUidRulesFirstLock) {
+                synchronized (mNetworkPoliciesSecondLock) {
+                    mSubscriptionPlans.put(subId, plans);
+                    mSubscriptionPlansOwner.put(subId, callingPackage);
+
+                    final String subscriberId = mContext.getSystemService(TelephonyManager.class)
+                            .getSubscriberId(subId);
+                    ensureActiveMobilePolicyAL(subId, subscriberId);
+                    maybeUpdateMobilePolicyCycleAL(subId);
+                    handleNetworkPoliciesUpdateAL(true);
+                }
+            }
+        } finally {
+            Binder.restoreCallingIdentity(token);
         }
     }
 
@@ -2598,6 +2873,9 @@
                 fout.print("Restrict background: "); fout.println(mRestrictBackground);
                 fout.print("Restrict power: "); fout.println(mRestrictPower);
                 fout.print("Device idle: "); fout.println(mDeviceIdleMode);
+                fout.print("Metered ifaces: "); fout.println(String.valueOf(mMeteredIfaces));
+
+                fout.println();
                 fout.println("Network policies:");
                 fout.increaseIndent();
                 for (int i = 0; i < mNetworkPolicy.size(); i++) {
@@ -2605,8 +2883,24 @@
                 }
                 fout.decreaseIndent();
 
-                fout.print("Metered ifaces: "); fout.println(String.valueOf(mMeteredIfaces));
+                fout.println();
+                fout.println("Subscription plans:");
+                fout.increaseIndent();
+                for (int i = 0; i < mSubscriptionPlans.size(); i++) {
+                    final int subId = mSubscriptionPlans.keyAt(i);
+                    fout.println("Subscriber ID " + subId + ":");
+                    fout.increaseIndent();
+                    final SubscriptionPlan[] plans = mSubscriptionPlans.valueAt(i);
+                    if (!ArrayUtils.isEmpty(plans)) {
+                        for (SubscriptionPlan plan : plans) {
+                            fout.println(plan);
+                        }
+                    }
+                    fout.decreaseIndent();
+                }
+                fout.decreaseIndent();
 
+                fout.println();
                 fout.println("Policy for UIDs:");
                 fout.increaseIndent();
                 int size = mUidPolicy.size();
@@ -2775,9 +3069,7 @@
                 updateRestrictBackgroundRulesOnUidStatusChangedUL(uid, oldUidState, uidState);
                 if (isProcStateAllowedWhileIdleOrPowerSaveMode(oldUidState)
                         != isProcStateAllowedWhileIdleOrPowerSaveMode(uidState) ) {
-                    if (isUidIdle(uid)) {
-                        updateRuleForAppIdleUL(uid);
-                    }
+                    updateRuleForAppIdleUL(uid);
                     if (mDeviceIdleMode) {
                         updateRuleForDeviceIdleUL(uid);
                     }
@@ -2891,9 +3183,9 @@
                     uidRules.put(mUidState.keyAt(i), FIREWALL_RULE_ALLOW);
                 }
             }
-            setUidFirewallRulesAsync(chain, uidRules, CHAIN_TOGGLE_ENABLE);
+            setUidFirewallRulesUL(chain, uidRules, CHAIN_TOGGLE_ENABLE);
         } else {
-            setUidFirewallRulesAsync(chain, null, CHAIN_TOGGLE_DISABLE);
+            setUidFirewallRulesUL(chain, null, CHAIN_TOGGLE_DISABLE);
         }
     }
 
@@ -2960,7 +3252,7 @@
                 }
             }
 
-            setUidFirewallRulesAsync(FIREWALL_CHAIN_STANDBY, uidRules, CHAIN_TOGGLE_NONE);
+            setUidFirewallRulesUL(FIREWALL_CHAIN_STANDBY, uidRules, CHAIN_TOGGLE_NONE);
         } finally {
             Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
         }
@@ -3661,18 +3953,6 @@
                     removeInterfaceQuota((String) msg.obj);
                     return true;
                 }
-                case MSG_SET_FIREWALL_RULES: {
-                    final int chain = msg.arg1;
-                    final int toggle = msg.arg2;
-                    final SparseIntArray uidRules = (SparseIntArray) msg.obj;
-                    if (uidRules != null) {
-                        setUidFirewallRules(chain, uidRules);
-                    }
-                    if (toggle != CHAIN_TOGGLE_NONE) {
-                        enableFirewallChainUL(chain, toggle == CHAIN_TOGGLE_ENABLE);
-                    }
-                    return true;
-                }
                 case MSG_RESET_FIREWALL_RULES_BY_UID: {
                     resetUidFirewallRules(msg.arg1);
                     return true;
@@ -3752,6 +4032,12 @@
         }
     }
 
+    private void setInterfaceQuotaAsync(String iface, long quotaBytes) {
+        // long quotaBytes split up into two ints to fit in message
+        mHandler.obtainMessage(MSG_UPDATE_INTERFACE_QUOTA, (int) (quotaBytes >> 32),
+                (int) (quotaBytes & 0xFFFFFFFF), iface).sendToTarget();
+    }
+
     private void setInterfaceQuota(String iface, long quotaBytes) {
         try {
             mNetworkManager.setInterfaceQuota(iface, quotaBytes);
@@ -3762,6 +4048,10 @@
         }
     }
 
+    private void removeInterfaceQuotaAsync(String iface) {
+        mHandler.obtainMessage(MSG_REMOVE_INTERFACE_QUOTA, iface).sendToTarget();
+    }
+
     private void removeInterfaceQuota(String iface) {
         try {
             mNetworkManager.removeInterfaceQuota(iface);
@@ -3808,15 +4098,20 @@
 
     /**
      * Calls {@link #setUidFirewallRules(int, SparseIntArray)} and
-     * {@link #enableFirewallChainUL(int, boolean)} asynchronously.
+     * {@link #enableFirewallChainUL(int, boolean)} synchronously.
      *
      * @param chain firewall chain.
      * @param uidRules new UID rules; if {@code null}, only toggles chain state.
      * @param toggle whether the chain should be enabled, disabled, or not changed.
      */
-    private void setUidFirewallRulesAsync(int chain, @Nullable SparseIntArray uidRules,
+    private void setUidFirewallRulesUL(int chain, @Nullable SparseIntArray uidRules,
             @ChainToggleType int toggle) {
-        mHandler.obtainMessage(MSG_SET_FIREWALL_RULES, chain, toggle, uidRules).sendToTarget();
+        if (uidRules != null) {
+            setUidFirewallRulesUL(chain, uidRules);
+        }
+        if (toggle != CHAIN_TOGGLE_NONE) {
+            enableFirewallChainUL(chain, toggle == CHAIN_TOGGLE_ENABLE);
+        }
     }
 
     /**
@@ -3824,7 +4119,7 @@
      * here to netd.  It will clean up dead rules and make sure the target chain only contains rules
      * specified here.
      */
-    private void setUidFirewallRules(int chain, SparseIntArray uidRules) {
+    private void setUidFirewallRulesUL(int chain, SparseIntArray uidRules) {
         try {
             int size = uidRules.size();
             int[] uids = new int[size];
@@ -4044,6 +4339,47 @@
         }
     }
 
+    @Override
+    public boolean isUidNetworkingBlocked(int uid, boolean isNetworkMetered) {
+        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
+        return isUidNetworkingBlockedInternal(uid, isNetworkMetered);
+    }
+
+    private boolean isUidNetworkingBlockedInternal(int uid, boolean isNetworkMetered) {
+        final int uidRules;
+        final boolean isBackgroundRestricted;
+        synchronized (mUidRulesFirstLock) {
+            uidRules = mUidRules.get(uid, RULE_NONE);
+            isBackgroundRestricted = mRestrictBackground;
+        }
+        if (hasRule(uidRules, RULE_REJECT_ALL)) {
+            if (LOGV) logUidStatus(uid, "blocked by power restrictions");
+            return true;
+        }
+        if (!isNetworkMetered) {
+            if (LOGV) logUidStatus(uid, "allowed on unmetered network");
+            return false;
+        }
+        if (hasRule(uidRules, RULE_REJECT_METERED)) {
+            if (LOGV) logUidStatus(uid, "blacklisted on metered network");
+            return true;
+        }
+        if (hasRule(uidRules, RULE_ALLOW_METERED)) {
+            if (LOGV) logUidStatus(uid, "whitelisted on metered network");
+            return false;
+        }
+        if (hasRule(uidRules, RULE_TEMPORARY_ALLOW_METERED)) {
+            if (LOGV) logUidStatus(uid, "temporary whitelisted on metered network");
+            return false;
+        }
+        if (isBackgroundRestricted) {
+            if (LOGV) logUidStatus(uid, "blocked when background is restricted");
+            return true;
+        }
+        if (LOGV) logUidStatus(uid, "allowed by default");
+        return false;
+    }
+
     private class NetworkPolicyManagerInternalImpl extends NetworkPolicyManagerInternal {
 
         @Override
@@ -4081,42 +4417,11 @@
          */
         @Override
         public boolean isUidNetworkingBlocked(int uid, String ifname) {
-            final int uidRules;
-            final boolean isBackgroundRestricted;
             final boolean isNetworkMetered;
-            synchronized (mUidRulesFirstLock) {
-                uidRules = mUidRules.get(uid, RULE_NONE);
-                isBackgroundRestricted = mRestrictBackground;
-                synchronized (mNetworkPoliciesSecondLock) {
-                    isNetworkMetered = mMeteredIfaces.contains(ifname);
-                }
+            synchronized (mNetworkPoliciesSecondLock) {
+                isNetworkMetered = mMeteredIfaces.contains(ifname);
             }
-            if (hasRule(uidRules, RULE_REJECT_ALL)) {
-                if (LOGV) logUidStatus(uid, "blocked by power restrictions");
-                return true;
-            }
-            if (!isNetworkMetered) {
-                if (LOGV) logUidStatus(uid, "allowed on unmetered network");
-                return false;
-            }
-            if (hasRule(uidRules, RULE_REJECT_METERED)) {
-                if (LOGV) logUidStatus(uid, "blacklisted on metered network");
-                return true;
-            }
-            if (hasRule(uidRules, RULE_ALLOW_METERED)) {
-                if (LOGV) logUidStatus(uid, "whitelisted on metered network");
-                return false;
-            }
-            if (hasRule(uidRules, RULE_TEMPORARY_ALLOW_METERED)) {
-                if (LOGV) logUidStatus(uid, "temporary whitelisted on metered network");
-                return false;
-            }
-            if (isBackgroundRestricted) {
-                if (LOGV) logUidStatus(uid, "blocked when background is restricted");
-                return true;
-            }
-            if (LOGV) logUidStatus(uid, "allowed by default");
-            return false;
+            return isUidNetworkingBlockedInternal(uid, isNetworkMetered);
         }
     }
 
@@ -4184,7 +4489,7 @@
         }
 
         public static String getString(int uid, long procStateSeq) {
-            return "UID=" + uid + " procStateSeq=" + procStateSeq;
+            return "UID=" + uid + " Seq=" + procStateSeq;
         }
 
         private int increaseNext(int next, int increment) {
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerShellCommand.java b/services/core/java/com/android/server/net/NetworkPolicyManagerShellCommand.java
index 8ced1c2..b65b9d7 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerShellCommand.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerShellCommand.java
@@ -19,26 +19,17 @@
 import static android.net.NetworkPolicyManager.POLICY_ALLOW_METERED_BACKGROUND;
 import static android.net.NetworkPolicyManager.POLICY_NONE;
 import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
-import static android.net.wifi.WifiInfo.removeDoubleQuotes;
-
-import static com.android.server.net.NetworkPolicyManagerService.newWifiPolicy;
-import static com.android.server.net.NetworkPolicyManagerService.TAG;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
 
 import android.content.Context;
 import android.net.INetworkPolicyManager;
-import android.net.NetworkPolicy;
-import android.net.NetworkTemplate;
+import android.net.NetworkPolicyManager;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
 import android.os.RemoteException;
 import android.os.ShellCommand;
-import android.util.Log;
+
+import java.io.PrintWriter;
+import java.util.List;
 
 class NetworkPolicyManagerShellCommand extends ShellCommand {
 
@@ -90,7 +81,7 @@
         pw.println("    Adds a UID to the blacklist for restrict background usage.");
         pw.println("  get restrict-background");
         pw.println("    Gets the global restrict background usage status.");
-        pw.println("  list wifi-networks [BOOLEAN]");
+        pw.println("  list wifi-networks [true|false]");
         pw.println("    Lists all saved wifi networks and whether they are metered or not.");
         pw.println("    If a boolean argument is passed, filters just the metered (or unmetered)");
         pw.println("    networks.");
@@ -102,7 +93,7 @@
         pw.println("    Removes a UID from the whitelist for restrict background usage.");
         pw.println("  remove restrict-background-blacklist UID");
         pw.println("    Removes a UID from the blacklist for restrict background usage.");
-        pw.println("  set metered-network ID BOOLEAN");
+        pw.println("  set metered-network ID [undefined|true|false]");
         pw.println("    Toggles whether the given wi-fi network is metered.");
         pw.println("  set restrict-background BOOLEAN");
         pw.println("    Sets the global restrict background usage status.");
@@ -276,107 +267,60 @@
         return resetUidPolicy("not blacklisted", POLICY_REJECT_METERED_BACKGROUND);
     }
 
-    private int listWifiNetworks() throws RemoteException {
+    private int listWifiNetworks() {
         final PrintWriter pw = getOutPrintWriter();
         final String arg = getNextArg();
-        final Boolean filter = arg == null ? null : Boolean.valueOf(arg);
-        for (NetworkPolicy policy : getWifiPolicies()) {
-            if (filter != null && filter.booleanValue() != policy.metered) {
-                continue;
+        final int match;
+        if (arg == null) {
+            match = WifiConfiguration.METERED_OVERRIDE_NONE;
+        } else if (Boolean.parseBoolean(arg)) {
+            match = WifiConfiguration.METERED_OVERRIDE_METERED;
+        } else {
+            match = WifiConfiguration.METERED_OVERRIDE_NOT_METERED;
+        }
+
+        final List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks();
+        for (WifiConfiguration config : configs) {
+            if (arg == null || config.meteredOverride == match) {
+                pw.print(NetworkPolicyManager.resolveNetworkId(config));
+                pw.print(';');
+                pw.println(overrideToString(config.meteredOverride));
             }
-            pw.print(getNetworkId(policy));
-            pw.print(';');
-            pw.println(policy.metered);
         }
         return 0;
     }
 
     private int setMeteredWifiNetwork() throws RemoteException {
         final PrintWriter pw = getOutPrintWriter();
-        final String id = getNextArg();
-        if (id == null) {
-            pw.println("Error: didn't specify ID");
+        final String networkId = getNextArg();
+        if (networkId == null) {
+            pw.println("Error: didn't specify networkId");
             return -1;
         }
         final String arg = getNextArg();
         if (arg == null) {
-            pw.println("Error: didn't specify BOOLEAN");
+            pw.println("Error: didn't specify meteredOverride");
             return -1;
         }
-        final boolean metered = Boolean.valueOf(arg);
-        final NetworkPolicy[] policies = mInterface.getNetworkPolicies(null);
-        boolean changed = false;
-        // First try to find a policy with such id
-        for (NetworkPolicy policy : policies) {
-            if (policy.template.isMatchRuleMobile() || policy.metered == metered) {
-                continue;
-            }
-            final String networkId = getNetworkId(policy);
-            if (id.equals(networkId)) {
-                Log.i(TAG, "Changing " + networkId + " metered status to " + metered);
-                policy.metered = metered;
-                changed = true;
-            }
-        }
-        if (changed) {
-            mInterface.setNetworkPolicies(policies);
-            return 0;
-        }
-        // Policy not found: check if there is a saved wi-fi with such id.
-        for (WifiConfiguration config : mWifiManager.getConfiguredNetworks()) {
-            final String ssid = removeDoubleQuotes(config.SSID);
-            if (id.equals(ssid)) {
-                final NetworkPolicy policy = newPolicy(ssid);
-                policy.metered = true;
-                Log.i(TAG, "Creating new policy for " + ssid + ": " + policy);
-                final NetworkPolicy[] newPolicies = new NetworkPolicy[policies.length + 1];
-                System.arraycopy(policies, 0, newPolicies, 0, policies.length);
-                newPolicies[newPolicies.length - 1] = policy;
-                mInterface.setNetworkPolicies(newPolicies);
-                return 0;
-            }
-        }
-        pw.print("Error: didn't find network with SSID "); pw.println(id);
+        mInterface.setWifiMeteredOverride(NetworkPolicyManager.resolveNetworkId(networkId),
+                stringToOverride(arg));
         return -1;
     }
 
-    private List<NetworkPolicy> getWifiPolicies() throws RemoteException {
-        // First gets a list of saved wi-fi networks.
-        final List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks();
-        final int size = configs != null ? configs.size() : 0;
-        final Set<String> ssids = new HashSet<>(size);
-        if (configs != null) {
-            for (WifiConfiguration config : configs) {
-                ssids.add(removeDoubleQuotes(config.SSID));
-            }
+    private static String overrideToString(int override) {
+        switch (override) {
+            case WifiConfiguration.METERED_OVERRIDE_METERED: return "true";
+            case WifiConfiguration.METERED_OVERRIDE_NOT_METERED: return "false";
+            default: return "none";
         }
-
-        // Then gets the saved policies.
-        final NetworkPolicy[] policies = mInterface.getNetworkPolicies(null);
-        final List<NetworkPolicy> wifiPolicies = new ArrayList<NetworkPolicy>(policies.length);
-        for (NetworkPolicy policy: policies) {
-            if (!policy.template.isMatchRuleMobile()) {
-                wifiPolicies.add(policy);
-                final String netId = getNetworkId(policy);
-                ssids.remove(netId);
-            }
-        }
-        // Finally, creates new default policies for saved WI-FIs not policied yet.
-        for (String ssid : ssids) {
-            final NetworkPolicy policy = newPolicy(ssid);
-            wifiPolicies.add(policy);
-        }
-        return wifiPolicies;
     }
 
-    private NetworkPolicy newPolicy(String ssid) {
-        final NetworkTemplate template = NetworkTemplate.buildTemplateWifi(ssid);
-        final NetworkPolicy policy = newWifiPolicy(template, false);
-        return policy;
-    }
-
-    private String getNetworkId(NetworkPolicy policy) {
-        return removeDoubleQuotes(policy.template.getNetworkId());
+    private static int stringToOverride(String override) {
+        switch (override) {
+            case "true": return WifiConfiguration.METERED_OVERRIDE_METERED;
+            case "false": return WifiConfiguration.METERED_OVERRIDE_NOT_METERED;
+            default: return WifiConfiguration.METERED_OVERRIDE_NONE;
+        }
     }
 
     private int getNextBooleanArg() {
diff --git a/services/core/java/com/android/server/net/NetworkStatsCollection.java b/services/core/java/com/android/server/net/NetworkStatsCollection.java
index 0354300..4ceb592 100644
--- a/services/core/java/com/android/server/net/NetworkStatsCollection.java
+++ b/services/core/java/com/android/server/net/NetworkStatsCollection.java
@@ -28,6 +28,8 @@
 import static android.net.TrafficStats.UID_REMOVED;
 import static android.text.format.DateUtils.WEEK_IN_MILLIS;
 
+import static com.android.server.net.NetworkStatsService.TAG;
+
 import android.net.NetworkIdentity;
 import android.net.NetworkStats;
 import android.net.NetworkStatsHistory;
@@ -37,20 +39,24 @@
 import android.service.NetworkStatsCollectionKeyProto;
 import android.service.NetworkStatsCollectionProto;
 import android.service.NetworkStatsCollectionStatsProto;
+import android.telephony.SubscriptionPlan;
 import android.util.ArrayMap;
 import android.util.AtomicFile;
 import android.util.IntArray;
+import android.util.Pair;
+import android.util.Slog;
 import android.util.proto.ProtoOutputStream;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.FileRotator;
 import com.android.internal.util.IndentingPrintWriter;
 
+import libcore.io.IoUtils;
+
 import com.google.android.collect.Lists;
 import com.google.android.collect.Maps;
 
-import libcore.io.IoUtils;
-
 import java.io.BufferedInputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
@@ -60,9 +66,11 @@
 import java.io.InputStream;
 import java.io.PrintWriter;
 import java.net.ProtocolException;
+import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Objects;
 
 /**
@@ -140,6 +148,63 @@
         return mStartMillis == Long.MAX_VALUE && mEndMillis == Long.MIN_VALUE;
     }
 
+    @VisibleForTesting
+    public long roundUp(long time) {
+        if (time == Long.MIN_VALUE || time == Long.MAX_VALUE
+                || time == SubscriptionPlan.TIME_UNKNOWN) {
+            return time;
+        } else {
+            final long mod = time % mBucketDuration;
+            if (mod > 0) {
+                time -= mod;
+                time += mBucketDuration;
+            }
+            return time;
+        }
+    }
+
+    @VisibleForTesting
+    public long roundDown(long time) {
+        if (time == Long.MIN_VALUE || time == Long.MAX_VALUE
+                || time == SubscriptionPlan.TIME_UNKNOWN) {
+            return time;
+        } else {
+            final long mod = time % mBucketDuration;
+            if (mod > 0) {
+                time -= mod;
+            }
+            return time;
+        }
+    }
+
+    /**
+     * Safely multiple a value by a rational.
+     * <p>
+     * Internally it uses integer-based math whenever possible, but switches
+     * over to double-based math if values would overflow.
+     */
+    @VisibleForTesting
+    public static long multiplySafe(long value, long num, long den) {
+        long x = value;
+        long y = num;
+
+        // Logic shamelessly borrowed from Math.multiplyExact()
+        long r = x * y;
+        long ax = Math.abs(x);
+        long ay = Math.abs(y);
+        if (((ax | ay) >>> 31 != 0)) {
+            // Some bits greater than 2^31 that might cause overflow
+            // Check the result using the divide operator
+            // and check for the special case of Long.MIN_VALUE * -1
+            if (((y != 0) && (r / y != x)) ||
+                    (x == Long.MIN_VALUE && y == -1)) {
+                // Use double math to avoid overflowing
+                return (long) (((double) num / den) * value);
+            }
+        }
+        return r / den;
+    }
+
     public int[] getRelevantUids(@NetworkStatsAccess.Level int accessLevel) {
         return getRelevantUids(accessLevel, Binder.getCallingUid());
     }
@@ -165,60 +230,110 @@
      * Combine all {@link NetworkStatsHistory} in this collection which match
      * the requested parameters.
      */
-    public NetworkStatsHistory getHistory(
-            NetworkTemplate template, int uid, int set, int tag, int fields,
-            @NetworkStatsAccess.Level int accessLevel) {
-        return getHistory(template, uid, set, tag, fields, Long.MIN_VALUE, Long.MAX_VALUE,
-                accessLevel);
-    }
-
-    /**
-     * Combine all {@link NetworkStatsHistory} in this collection which match
-     * the requested parameters.
-     */
-    public NetworkStatsHistory getHistory(
-            NetworkTemplate template, int uid, int set, int tag, int fields, long start, long end,
-            @NetworkStatsAccess.Level int accessLevel) {
-        return getHistory(template, uid, set, tag, fields, start, end, accessLevel,
-                Binder.getCallingUid());
-    }
-
-    /**
-     * Combine all {@link NetworkStatsHistory} in this collection which match
-     * the requested parameters.
-     */
-    public NetworkStatsHistory getHistory(
-            NetworkTemplate template, int uid, int set, int tag, int fields, long start, long end,
+    public NetworkStatsHistory getHistory(NetworkTemplate template, SubscriptionPlan augmentPlan,
+            int uid, int set, int tag, int fields, long start, long end,
             @NetworkStatsAccess.Level int accessLevel, int callerUid) {
         if (!NetworkStatsAccess.isAccessibleToUser(uid, callerUid, accessLevel)) {
             throw new SecurityException("Network stats history of uid " + uid
                     + " is forbidden for caller " + callerUid);
         }
 
+        final int bucketEstimate = (int) ((end - start) / mBucketDuration);
         final NetworkStatsHistory combined = new NetworkStatsHistory(
-                mBucketDuration, start == end ? 1 : estimateBuckets(), fields);
+                mBucketDuration, bucketEstimate, fields);
 
         // shortcut when we know stats will be empty
         if (start == end) return combined;
 
+        // Figure out the window of time that we should be augmenting (if any)
+        long augmentStart = SubscriptionPlan.TIME_UNKNOWN;
+        long augmentEnd = (augmentPlan != null) ? augmentPlan.getDataUsageTime()
+                : SubscriptionPlan.TIME_UNKNOWN;
+        // And if augmenting, we might need to collect more data to adjust with
+        long collectStart = start;
+        long collectEnd = end;
+
+        if (augmentEnd != SubscriptionPlan.TIME_UNKNOWN) {
+            final Iterator<Pair<ZonedDateTime, ZonedDateTime>> it = augmentPlan.cycleIterator();
+            while (it.hasNext()) {
+                final Pair<ZonedDateTime, ZonedDateTime> cycle = it.next();
+                final long cycleStart = cycle.first.toInstant().toEpochMilli();
+                final long cycleEnd = cycle.second.toInstant().toEpochMilli();
+                if (cycleStart <= augmentEnd && augmentEnd < cycleEnd) {
+                    augmentStart = cycleStart;
+                    collectStart = Long.min(collectStart, augmentStart);
+                    collectEnd = Long.max(collectEnd, augmentEnd);
+                    break;
+                }
+            }
+        }
+
+        if (augmentStart != SubscriptionPlan.TIME_UNKNOWN) {
+            // Shrink augmentation window so we don't risk undercounting.
+            augmentStart = roundUp(augmentStart);
+            augmentEnd = roundDown(augmentEnd);
+            // Grow collection window so we get all the stats needed.
+            collectStart = roundDown(collectStart);
+            collectEnd = roundUp(collectEnd);
+        }
+
         for (int i = 0; i < mStats.size(); i++) {
             final Key key = mStats.keyAt(i);
             if (key.uid == uid && NetworkStats.setMatches(set, key.set) && key.tag == tag
                     && templateMatches(template, key.ident)) {
                 final NetworkStatsHistory value = mStats.valueAt(i);
-                combined.recordHistory(value, start, end);
+                combined.recordHistory(value, collectStart, collectEnd);
             }
         }
-        return combined;
-    }
 
-    /**
-     * Summarize all {@link NetworkStatsHistory} in this collection which match
-     * the requested parameters.
-     */
-    public NetworkStats getSummary(NetworkTemplate template, long start, long end,
-            @NetworkStatsAccess.Level int accessLevel) {
-        return getSummary(template, start, end, accessLevel, Binder.getCallingUid());
+        if (augmentStart != SubscriptionPlan.TIME_UNKNOWN) {
+            final NetworkStatsHistory.Entry entry = combined.getValues(
+                    augmentStart, augmentEnd, null);
+
+            // If we don't have any recorded data for this time period, give
+            // ourselves something to scale with.
+            if (entry.rxBytes == 0 || entry.txBytes == 0) {
+                combined.recordData(augmentStart, augmentEnd,
+                        new NetworkStats.Entry(1, 0, 1, 0, 0));
+                combined.getValues(augmentStart, augmentEnd, entry);
+            }
+
+            final long rawBytes = entry.rxBytes + entry.txBytes;
+            final long rawRxBytes = entry.rxBytes;
+            final long rawTxBytes = entry.txBytes;
+            final long targetBytes = augmentPlan.getDataUsageBytes();
+            final long targetRxBytes = multiplySafe(targetBytes, rawRxBytes, rawBytes);
+            final long targetTxBytes = multiplySafe(targetBytes, rawTxBytes, rawBytes);
+
+            // Scale all matching buckets to reach anchor target
+            final long beforeTotal = combined.getTotalBytes();
+            for (int i = 0; i < combined.size(); i++) {
+                combined.getValues(i, entry);
+                if (entry.bucketStart >= augmentStart
+                        && entry.bucketStart + entry.bucketDuration <= augmentEnd) {
+                    entry.rxBytes = multiplySafe(targetRxBytes, entry.rxBytes, rawRxBytes);
+                    entry.txBytes = multiplySafe(targetTxBytes, entry.txBytes, rawTxBytes);
+                    // We purposefully clear out packet counters to indicate
+                    // that this data has been augmented.
+                    entry.rxPackets = 0;
+                    entry.txPackets = 0;
+                    combined.setValues(i, entry);
+                }
+            }
+
+            final long deltaTotal = combined.getTotalBytes() - beforeTotal;
+            if (deltaTotal != 0) {
+                Slog.d(TAG, "Augmented network usage by " + deltaTotal + " bytes");
+            }
+
+            // Finally we can slice data as originally requested
+            final NetworkStatsHistory sliced = new NetworkStatsHistory(
+                    mBucketDuration, bucketEstimate, fields);
+            sliced.recordHistory(combined, start, end);
+            return sliced;
+        } else {
+            return combined;
+        }
     }
 
     /**
@@ -230,6 +345,7 @@
         final long now = System.currentTimeMillis();
 
         final NetworkStats stats = new NetworkStats(end - start, 24);
+
         // shortcut when we know stats will be empty
         if (start == end) return stats;
 
diff --git a/services/core/java/com/android/server/net/NetworkStatsObservers.java b/services/core/java/com/android/server/net/NetworkStatsObservers.java
index a256cbc..741c206 100644
--- a/services/core/java/com/android/server/net/NetworkStatsObservers.java
+++ b/services/core/java/com/android/server/net/NetworkStatsObservers.java
@@ -17,28 +17,26 @@
 package com.android.server.net;
 
 import static android.net.TrafficStats.MB_IN_BYTES;
+
 import static com.android.internal.util.Preconditions.checkArgument;
 
 import android.app.usage.NetworkStatsManager;
 import android.net.DataUsageRequest;
 import android.net.NetworkStats;
-import android.net.NetworkStats.NonMonotonicObserver;
 import android.net.NetworkStatsHistory;
 import android.net.NetworkTemplate;
-import android.os.Binder;
 import android.os.Bundle;
-import android.os.Looper;
-import android.os.Message;
-import android.os.Messenger;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.Messenger;
 import android.os.Process;
 import android.os.RemoteException;
 import android.util.ArrayMap;
-import android.util.IntArray;
-import android.util.SparseArray;
 import android.util.Slog;
+import android.util.SparseArray;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.net.VpnInfo;
@@ -410,7 +408,7 @@
          */
         private long getTotalBytesForNetworkUid(NetworkTemplate template, int uid) {
             try {
-                NetworkStatsHistory history = mCollection.getHistory(template, uid,
+                NetworkStatsHistory history = mCollection.getHistory(template, null, uid,
                         NetworkStats.SET_ALL, NetworkStats.TAG_NONE,
                         NetworkStatsHistory.FIELD_ALL,
                         Long.MIN_VALUE /* start */, Long.MAX_VALUE /* end */,
diff --git a/services/core/java/com/android/server/net/NetworkStatsRecorder.java b/services/core/java/com/android/server/net/NetworkStatsRecorder.java
index 80309e1..4bee55e 100644
--- a/services/core/java/com/android/server/net/NetworkStatsRecorder.java
+++ b/services/core/java/com/android/server/net/NetworkStatsRecorder.java
@@ -20,6 +20,7 @@
 import static android.net.TrafficStats.KB_IN_BYTES;
 import static android.net.TrafficStats.MB_IN_BYTES;
 import static android.text.format.DateUtils.YEAR_IN_MILLIS;
+
 import static com.android.internal.util.Preconditions.checkNotNull;
 
 import android.annotation.Nullable;
@@ -28,6 +29,7 @@
 import android.net.NetworkStatsHistory;
 import android.net.NetworkTemplate;
 import android.net.TrafficStats;
+import android.os.Binder;
 import android.os.DropBoxManager;
 import android.service.NetworkStatsRecorderProto;
 import android.util.Log;
@@ -38,6 +40,9 @@
 import com.android.internal.net.VpnInfo;
 import com.android.internal.util.FileRotator;
 import com.android.internal.util.IndentingPrintWriter;
+
+import libcore.io.IoUtils;
+
 import com.google.android.collect.Sets;
 
 import java.io.ByteArrayOutputStream;
@@ -52,8 +57,6 @@
 import java.util.HashSet;
 import java.util.Map;
 
-import libcore.io.IoUtils;
-
 /**
  * Logic to record deltas between periodic {@link NetworkStats} snapshots into
  * {@link NetworkStatsHistory} that belong to {@link NetworkStatsCollection}.
@@ -150,7 +153,7 @@
 
     public NetworkStats.Entry getTotalSinceBootLocked(NetworkTemplate template) {
         return mSinceBoot.getSummary(template, Long.MIN_VALUE, Long.MAX_VALUE,
-                NetworkStatsAccess.Level.DEVICE).getTotal(null);
+                NetworkStatsAccess.Level.DEVICE, Binder.getCallingUid()).getTotal(null);
     }
 
     public NetworkStatsCollection getSinceBoot() {
diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java
index ab685ca..3af5265 100644
--- a/services/core/java/com/android/server/net/NetworkStatsService.java
+++ b/services/core/java/com/android/server/net/NetworkStatsService.java
@@ -18,7 +18,6 @@
 
 import static android.Manifest.permission.ACCESS_NETWORK_STATE;
 import static android.Manifest.permission.CONNECTIVITY_INTERNAL;
-import static android.Manifest.permission.MODIFY_NETWORK_ACCOUNTING;
 import static android.Manifest.permission.READ_NETWORK_USAGE_HISTORY;
 import static android.content.Intent.ACTION_SHUTDOWN;
 import static android.content.Intent.ACTION_UID_REMOVED;
@@ -27,15 +26,21 @@
 import static android.net.ConnectivityManager.ACTION_TETHER_STATE_CHANGED;
 import static android.net.ConnectivityManager.isNetworkTypeMobile;
 import static android.net.NetworkStats.IFACE_ALL;
+import static android.net.NetworkStats.METERED_ALL;
+import static android.net.NetworkStats.ROAMING_ALL;
 import static android.net.NetworkStats.SET_ALL;
 import static android.net.NetworkStats.SET_DEFAULT;
 import static android.net.NetworkStats.SET_FOREGROUND;
+import static android.net.NetworkStats.STATS_PER_IFACE;
+import static android.net.NetworkStats.STATS_PER_UID;
 import static android.net.NetworkStats.TAG_NONE;
 import static android.net.NetworkStats.UID_ALL;
+import static android.net.NetworkStatsHistory.FIELD_ALL;
 import static android.net.NetworkTemplate.buildTemplateMobileWildcard;
 import static android.net.NetworkTemplate.buildTemplateWifiWildcard;
 import static android.net.TrafficStats.KB_IN_BYTES;
 import static android.net.TrafficStats.MB_IN_BYTES;
+import static android.provider.Settings.Global.NETSTATS_AUGMENT_ENABLED;
 import static android.provider.Settings.Global.NETSTATS_DEV_BUCKET_DURATION;
 import static android.provider.Settings.Global.NETSTATS_DEV_DELETE_AGE;
 import static android.provider.Settings.Global.NETSTATS_DEV_PERSIST_BYTES;
@@ -64,6 +69,7 @@
 
 import android.app.AlarmManager;
 import android.app.PendingIntent;
+import android.app.usage.NetworkStatsManager;
 import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -103,6 +109,8 @@
 import android.provider.Settings.Global;
 import android.service.NetworkInterfaceProto;
 import android.service.NetworkStatsServiceDumpProto;
+import android.telephony.SubscriptionManager;
+import android.telephony.SubscriptionPlan;
 import android.telephony.TelephonyManager;
 import android.text.format.DateUtils;
 import android.util.ArrayMap;
@@ -116,6 +124,7 @@
 import android.util.TrustedTime;
 import android.util.proto.ProtoOutputStream;
 
+import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.net.VpnInfo;
 import com.android.internal.util.ArrayUtils;
@@ -138,8 +147,8 @@
  * other system services.
  */
 public class NetworkStatsService extends INetworkStatsService.Stub {
-    private static final String TAG = "NetworkStats";
-    private static final boolean LOGV = false;
+    static final String TAG = "NetworkStats";
+    static final boolean LOGV = false;
 
     private static final int MSG_PERFORM_POLL = 1;
     private static final int MSG_UPDATE_IFACES = 2;
@@ -193,6 +202,7 @@
         public long getPollInterval();
         public long getTimeCacheMaxAge();
         public boolean getSampleEnabled();
+        public boolean getAugmentEnabled();
 
         public static class Config {
             public final long bucketDuration;
@@ -232,12 +242,17 @@
     private final DropBoxNonMonotonicObserver mNonMonotonicObserver =
             new DropBoxNonMonotonicObserver();
 
+    @GuardedBy("mStatsLock")
     private NetworkStatsRecorder mDevRecorder;
+    @GuardedBy("mStatsLock")
     private NetworkStatsRecorder mXtRecorder;
+    @GuardedBy("mStatsLock")
     private NetworkStatsRecorder mUidRecorder;
+    @GuardedBy("mStatsLock")
     private NetworkStatsRecorder mUidTagRecorder;
 
     /** Cached {@link #mXtRecorder} stats. */
+    @GuardedBy("mStatsLock")
     private NetworkStatsCollection mXtStatsCached;
 
     /** Current counter sets for each UID. */
@@ -319,15 +334,15 @@
             return;
         }
 
-        // create data recorders along with historical rotators
-        mDevRecorder = buildRecorder(PREFIX_DEV, mSettings.getDevConfig(), false);
-        mXtRecorder = buildRecorder(PREFIX_XT, mSettings.getXtConfig(), false);
-        mUidRecorder = buildRecorder(PREFIX_UID, mSettings.getUidConfig(), false);
-        mUidTagRecorder = buildRecorder(PREFIX_UID_TAG, mSettings.getUidTagConfig(), true);
-
-        updatePersistThresholds();
-
         synchronized (mStatsLock) {
+            // create data recorders along with historical rotators
+            mDevRecorder = buildRecorder(PREFIX_DEV, mSettings.getDevConfig(), false);
+            mXtRecorder = buildRecorder(PREFIX_XT, mSettings.getXtConfig(), false);
+            mUidRecorder = buildRecorder(PREFIX_UID, mSettings.getUidConfig(), false);
+            mUidTagRecorder = buildRecorder(PREFIX_UID_TAG, mSettings.getUidTagConfig(), true);
+
+            updatePersistThresholdsLocked();
+
             // upgrade any legacy stats, migrating them to rotated files
             maybeUpgradeLegacyStatsLocked();
 
@@ -465,18 +480,20 @@
 
     @Override
     public INetworkStatsSession openSession() {
-        return createSession(null, /* poll on create */ false);
+        // NOTE: if callers want to get non-augmented data, they should go
+        // through the public API
+        return openSessionInternal(NetworkStatsManager.FLAG_AUGMENT_WITH_SUBSCRIPTION_PLAN, null);
     }
 
     @Override
-    public INetworkStatsSession openSessionForUsageStats(final String callingPackage) {
-        return createSession(callingPackage, /* poll on create */ true);
+    public INetworkStatsSession openSessionForUsageStats(int flags, String callingPackage) {
+        return openSessionInternal(flags, callingPackage);
     }
 
-    private INetworkStatsSession createSession(final String callingPackage, boolean pollOnCreate) {
+    private INetworkStatsSession openSessionInternal(final int flags, final String callingPackage) {
         assertBandwidthControlEnabled();
 
-        if (pollOnCreate) {
+        if ((flags & NetworkStatsManager.FLAG_POLL_ON_OPEN) != 0) {
             final long ident = Binder.clearCallingIdentity();
             try {
                 performPoll(FLAG_PERSIST_ALL);
@@ -489,9 +506,13 @@
         // for its lifetime; when caller closes only weak references remain.
 
         return new INetworkStatsSession.Stub() {
+            private final int mCallingUid = Binder.getCallingUid();
+            private final String mCallingPackage = callingPackage;
+            private final @NetworkStatsAccess.Level int mAccessLevel = checkAccessLevel(
+                    callingPackage);
+
             private NetworkStatsCollection mUidComplete;
             private NetworkStatsCollection mUidTagComplete;
-            private String mCallingPackage = callingPackage;
 
             private NetworkStatsCollection getUidComplete() {
                 synchronized (mStatsLock) {
@@ -513,55 +534,38 @@
 
             @Override
             public int[] getRelevantUids() {
-                return getUidComplete().getRelevantUids(checkAccessLevel(mCallingPackage));
+                return getUidComplete().getRelevantUids(mAccessLevel);
             }
 
             @Override
-            public NetworkStats getDeviceSummaryForNetwork(NetworkTemplate template, long start,
-                    long end) {
-                @NetworkStatsAccess.Level int accessLevel = checkAccessLevel(mCallingPackage);
-                if (accessLevel < NetworkStatsAccess.Level.DEVICESUMMARY) {
-                    throw new SecurityException("Calling package " + mCallingPackage
-                            + " cannot access device summary network stats");
-                }
-                NetworkStats result = new NetworkStats(end - start, 1);
-                final long ident = Binder.clearCallingIdentity();
-                try {
-                    // Using access level higher than the one we checked for above.
-                    // Reason is that we are combining usage data in a way that is not PII
-                    // anymore.
-                    result.combineAllValues(
-                            internalGetSummaryForNetwork(template, start, end,
-                                    NetworkStatsAccess.Level.DEVICE));
-                } finally {
-                    Binder.restoreCallingIdentity(ident);
-                }
-                return result;
+            public NetworkStats getDeviceSummaryForNetwork(
+                    NetworkTemplate template, long start, long end) {
+                return internalGetSummaryForNetwork(template, flags, start, end, mAccessLevel,
+                        mCallingUid);
             }
 
             @Override
             public NetworkStats getSummaryForNetwork(
                     NetworkTemplate template, long start, long end) {
-                @NetworkStatsAccess.Level int accessLevel = checkAccessLevel(mCallingPackage);
-                return internalGetSummaryForNetwork(template, start, end, accessLevel);
+                return internalGetSummaryForNetwork(template, flags, start, end, mAccessLevel,
+                        mCallingUid);
             }
 
             @Override
             public NetworkStatsHistory getHistoryForNetwork(NetworkTemplate template, int fields) {
-                @NetworkStatsAccess.Level int accessLevel = checkAccessLevel(mCallingPackage);
-                return internalGetHistoryForNetwork(template, fields, accessLevel);
+                return internalGetHistoryForNetwork(template, flags, fields, mAccessLevel,
+                        mCallingUid);
             }
 
             @Override
             public NetworkStats getSummaryForAllUid(
                     NetworkTemplate template, long start, long end, boolean includeTags) {
                 try {
-                    @NetworkStatsAccess.Level int accessLevel = checkAccessLevel(mCallingPackage);
-                    final NetworkStats stats =
-                            getUidComplete().getSummary(template, start, end, accessLevel);
+                    final NetworkStats stats = getUidComplete()
+                            .getSummary(template, start, end, mAccessLevel, mCallingUid);
                     if (includeTags) {
                         final NetworkStats tagStats = getUidTagComplete()
-                                .getSummary(template, start, end, accessLevel);
+                                .getSummary(template, start, end, mAccessLevel, mCallingUid);
                         stats.combineAllValues(tagStats);
                     }
                     return stats;
@@ -575,13 +579,13 @@
             @Override
             public NetworkStatsHistory getHistoryForUid(
                     NetworkTemplate template, int uid, int set, int tag, int fields) {
-                @NetworkStatsAccess.Level int accessLevel = checkAccessLevel(mCallingPackage);
+                // NOTE: We don't augment UID-level statistics
                 if (tag == TAG_NONE) {
-                    return getUidComplete().getHistory(template, uid, set, tag, fields,
-                            accessLevel);
+                    return getUidComplete().getHistory(template, null, uid, set, tag, fields,
+                            Long.MIN_VALUE, Long.MAX_VALUE, mAccessLevel, mCallingUid);
                 } else {
-                    return getUidTagComplete().getHistory(template, uid, set, tag, fields,
-                            accessLevel);
+                    return getUidTagComplete().getHistory(template, null, uid, set, tag, fields,
+                            Long.MIN_VALUE, Long.MAX_VALUE, mAccessLevel, mCallingUid);
                 }
             }
 
@@ -589,13 +593,13 @@
             public NetworkStatsHistory getHistoryIntervalForUid(
                     NetworkTemplate template, int uid, int set, int tag, int fields,
                     long start, long end) {
-                @NetworkStatsAccess.Level int accessLevel = checkAccessLevel(mCallingPackage);
+                // NOTE: We don't augment UID-level statistics
                 if (tag == TAG_NONE) {
-                    return getUidComplete().getHistory(template, uid, set, tag, fields, start, end,
-                            accessLevel);
+                    return getUidComplete().getHistory(template, null, uid, set, tag, fields,
+                            start, end, mAccessLevel, mCallingUid);
                 } else if (uid == Binder.getCallingUid()) {
-                    return getUidTagComplete().getHistory(template, uid, set, tag, fields,
-                            start, end, accessLevel);
+                    return getUidTagComplete().getHistory(template, null, uid, set, tag, fields,
+                            start, end, mAccessLevel, mCallingUid);
                 } else {
                     throw new SecurityException("Calling package " + mCallingPackage
                             + " cannot access tag information from a different uid");
@@ -616,36 +620,87 @@
     }
 
     /**
+     * Find the most relevant {@link SubscriptionPlan} for the given
+     * {@link NetworkTemplate} and flags. This is typically used to augment
+     * local measurement results to match a known anchor from the carrier.
+     */
+    private SubscriptionPlan resolveSubscriptionPlan(NetworkTemplate template, int flags) {
+        SubscriptionPlan plan = null;
+        if ((flags & NetworkStatsManager.FLAG_AUGMENT_WITH_SUBSCRIPTION_PLAN) != 0
+                && (template.getMatchRule() == NetworkTemplate.MATCH_MOBILE_ALL)
+                && mSettings.getAugmentEnabled()) {
+            Slog.d(TAG, "Resolving plan for " + template);
+            final long token = Binder.clearCallingIdentity();
+            try {
+                final SubscriptionManager sm = mContext.getSystemService(SubscriptionManager.class);
+                final TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
+                for (int subId : sm.getActiveSubscriptionIdList()) {
+                    if (template.matchesSubscriberId(tm.getSubscriberId(subId))) {
+                        Slog.d(TAG, "Found active matching subId " + subId);
+                        final List<SubscriptionPlan> plans = sm.getSubscriptionPlans(subId);
+                        if (!plans.isEmpty()) {
+                            plan = plans.get(0);
+                        }
+                    }
+                }
+            } finally {
+                Binder.restoreCallingIdentity(token);
+            }
+            Slog.d(TAG, "Resolved to plan " + plan);
+        }
+        return plan;
+    }
+
+    /**
      * Return network summary, splicing between DEV and XT stats when
      * appropriate.
      */
-    private NetworkStats internalGetSummaryForNetwork(
-            NetworkTemplate template, long start, long end,
-            @NetworkStatsAccess.Level int accessLevel) {
+    private NetworkStats internalGetSummaryForNetwork(NetworkTemplate template, int flags,
+            long start, long end, @NetworkStatsAccess.Level int accessLevel, int callingUid) {
         // We've been using pure XT stats long enough that we no longer need to
         // splice DEV and XT together.
-        return mXtStatsCached.getSummary(template, start, end, accessLevel);
+        final NetworkStatsHistory history = internalGetHistoryForNetwork(template, flags, FIELD_ALL,
+                accessLevel, callingUid);
+
+        final long now = System.currentTimeMillis();
+        final NetworkStatsHistory.Entry entry = history.getValues(start, end, now, null);
+
+        final NetworkStats stats = new NetworkStats(end - start, 1);
+        stats.addValues(new NetworkStats.Entry(IFACE_ALL, UID_ALL, SET_ALL, TAG_NONE, METERED_ALL,
+                ROAMING_ALL, entry.rxBytes, entry.rxPackets, entry.txBytes, entry.txPackets,
+                entry.operations));
+        return stats;
     }
 
     /**
      * Return network history, splicing between DEV and XT stats when
      * appropriate.
      */
-    private NetworkStatsHistory internalGetHistoryForNetwork(NetworkTemplate template, int fields,
-            @NetworkStatsAccess.Level int accessLevel) {
+    private NetworkStatsHistory internalGetHistoryForNetwork(NetworkTemplate template,
+            int flags, int fields, @NetworkStatsAccess.Level int accessLevel, int callingUid) {
         // We've been using pure XT stats long enough that we no longer need to
         // splice DEV and XT together.
-        return mXtStatsCached.getHistory(template, UID_ALL, SET_ALL, TAG_NONE, fields, accessLevel);
+        final SubscriptionPlan augmentPlan = resolveSubscriptionPlan(template, flags);
+        synchronized (mStatsLock) {
+            return mXtStatsCached.getHistory(template, augmentPlan,
+                    UID_ALL, SET_ALL, TAG_NONE, fields, Long.MIN_VALUE, Long.MAX_VALUE,
+                    accessLevel, callingUid);
+        }
     }
 
     @Override
     public long getNetworkTotalBytes(NetworkTemplate template, long start, long end) {
-        // Special case - since this is for internal use only, don't worry about a full access level
-        // check and just require the signature/privileged permission.
+        // Special case - since this is for internal use only, don't worry about
+        // a full access level check and just require the signature/privileged
+        // permission.
         mContext.enforceCallingOrSelfPermission(READ_NETWORK_USAGE_HISTORY, TAG);
         assertBandwidthControlEnabled();
-        return internalGetSummaryForNetwork(template, start, end, NetworkStatsAccess.Level.DEVICE)
-                .getTotalBytes();
+
+        // NOTE: if callers want to get non-augmented data, they should go
+        // through the public API
+        return internalGetSummaryForNetwork(template,
+                NetworkStatsManager.FLAG_AUGMENT_WITH_SUBSCRIPTION_PLAN, start, end,
+                NetworkStatsAccess.Level.DEVICE, Binder.getCallingUid()).getTotalBytes();
     }
 
     @Override
@@ -689,7 +744,8 @@
     @Override
     public void incrementOperationCount(int uid, int tag, int operationCount) {
         if (Binder.getCallingUid() != uid) {
-            mContext.enforceCallingOrSelfPermission(MODIFY_NETWORK_ACCOUNTING, TAG);
+            mContext.enforceCallingOrSelfPermission(
+                    android.Manifest.permission.UPDATE_DEVICE_STATS, TAG);
         }
 
         if (operationCount < 0) {
@@ -710,7 +766,7 @@
 
     @Override
     public void setUidForeground(int uid, boolean uidForeground) {
-        mContext.enforceCallingOrSelfPermission(MODIFY_NETWORK_ACCOUNTING, TAG);
+        mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
 
         synchronized (mStatsLock) {
             final int set = uidForeground ? SET_FOREGROUND : SET_DEFAULT;
@@ -750,7 +806,7 @@
 
     @Override
     public void advisePersistThreshold(long thresholdBytes) {
-        mContext.enforceCallingOrSelfPermission(MODIFY_NETWORK_ACCOUNTING, TAG);
+        mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
         assertBandwidthControlEnabled();
 
         // clamp threshold into safe range
@@ -766,7 +822,7 @@
         synchronized (mStatsLock) {
             if (!mSystemReady) return;
 
-            updatePersistThresholds();
+            updatePersistThresholdsLocked();
 
             mDevRecorder.maybePersistLocked(currentTime);
             mXtRecorder.maybePersistLocked(currentTime);
@@ -822,7 +878,7 @@
      * reflect current {@link #mPersistThreshold} value. Always defers to
      * {@link Global} values when defined.
      */
-    private void updatePersistThresholds() {
+    private void updatePersistThresholdsLocked() {
         mDevRecorder.setPersistThreshold(mSettings.getDevPersistBytes(mPersistThreshold));
         mXtRecorder.setPersistThreshold(mSettings.getXtPersistBytes(mPersistThreshold));
         mUidRecorder.setPersistThreshold(mSettings.getUidPersistBytes(mPersistThreshold));
@@ -1041,6 +1097,11 @@
         final NetworkStats xtSnapshot = getNetworkStatsXt();
         final NetworkStats devSnapshot = mNetworkManager.getNetworkStatsSummaryDev();
 
+        // Tethering snapshot for dev and xt stats. Counts per-interface data from tethering stats
+        // providers that isn't already counted by dev and XT stats.
+        final NetworkStats tetherSnapshot = getNetworkStatsTethering(STATS_PER_IFACE);
+        xtSnapshot.combineAllValues(tetherSnapshot);
+        devSnapshot.combineAllValues(tetherSnapshot);
 
         // For xt/dev, we pass a null VPN array because usage is aggregated by UID, so VPN traffic
         // can't be reattributed to responsible apps.
@@ -1259,7 +1320,7 @@
         synchronized (mStatsLock) {
             if (args.length > 0 && "--proto".equals(args[0])) {
                 // In this case ignore all other arguments.
-                dumpProto(fd);
+                dumpProtoLocked(fd);
                 return;
             }
 
@@ -1335,7 +1396,7 @@
         }
     }
 
-    private void dumpProto(FileDescriptor fd) {
+    private void dumpProtoLocked(FileDescriptor fd) {
         final ProtoOutputStream proto = new ProtoOutputStream(fd);
 
         // TODO Right now it writes all history.  Should it limit to the "since-boot" log?
@@ -1371,14 +1432,14 @@
         final NetworkStats uidSnapshot = mNetworkManager.getNetworkStatsUidDetail(UID_ALL);
 
         // fold tethering stats and operations into uid snapshot
-        final NetworkStats tetherSnapshot = getNetworkStatsTethering();
+        final NetworkStats tetherSnapshot = getNetworkStatsTethering(STATS_PER_UID);
         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(true);
+        final NetworkStats vtStats = telephonyManager.getVtDataUsage(STATS_PER_UID);
         if (vtStats != null) {
             uidSnapshot.combineAllValues(vtStats);
         }
@@ -1397,7 +1458,7 @@
                 Context.TELEPHONY_SERVICE);
 
         // Merge video calling data usage into XT
-        final NetworkStats vtSnapshot = telephonyManager.getVtDataUsage(false);
+        final NetworkStats vtSnapshot = telephonyManager.getVtDataUsage(STATS_PER_IFACE);
         if (vtSnapshot != null) {
             xtSnapshot.combineAllValues(vtSnapshot);
         }
@@ -1409,9 +1470,9 @@
      * Return snapshot of current tethering statistics. Will return empty
      * {@link NetworkStats} if any problems are encountered.
      */
-    private NetworkStats getNetworkStatsTethering() throws RemoteException {
+    private NetworkStats getNetworkStatsTethering(int how) throws RemoteException {
         try {
-            return mNetworkManager.getNetworkStatsTethering();
+            return mNetworkManager.getNetworkStatsTethering(how);
         } catch (IllegalStateException e) {
             Log.wtf(TAG, "problem reading network stats", e);
             return new NetworkStats(0L, 10);
@@ -1523,6 +1584,10 @@
             return getGlobalBoolean(NETSTATS_SAMPLE_ENABLED, true);
         }
         @Override
+        public boolean getAugmentEnabled() {
+            return getGlobalBoolean(NETSTATS_AUGMENT_ENABLED, true);
+        }
+        @Override
         public Config getDevConfig() {
             return new Config(getGlobalLong(NETSTATS_DEV_BUCKET_DURATION, HOUR_IN_MILLIS),
                     getGlobalLong(NETSTATS_DEV_ROTATE_AGE, 15 * DAY_IN_MILLIS),
diff --git a/services/core/java/com/android/server/notification/AlertRateLimiter.java b/services/core/java/com/android/server/notification/AlertRateLimiter.java
index 4b168c5..2b01945 100644
--- a/services/core/java/com/android/server/notification/AlertRateLimiter.java
+++ b/services/core/java/com/android/server/notification/AlertRateLimiter.java
@@ -24,7 +24,7 @@
     static final long ALLOWED_ALERT_INTERVAL = 1000;
     private long mLastNotificationMillis = 0;
 
-    boolean shouldRateLimitAlert(long now) {
+   boolean shouldRateLimitAlert(long now) {
         final long millisSinceLast = now - mLastNotificationMillis;
         if (millisSinceLast < 0 || millisSinceLast < ALLOWED_ALERT_INTERVAL) {
             return true;
diff --git a/services/core/java/com/android/server/notification/BadgeExtractor.java b/services/core/java/com/android/server/notification/BadgeExtractor.java
index 1bd2085..184f8b2 100644
--- a/services/core/java/com/android/server/notification/BadgeExtractor.java
+++ b/services/core/java/com/android/server/notification/BadgeExtractor.java
@@ -47,9 +47,11 @@
         if (!userWantsBadges || !appCanShowBadge) {
             record.setShowBadge(false);
         } else {
-            record.setShowBadge(mConfig.getNotificationChannel(record.sbn.getPackageName(),
-                    record.sbn.getUid(), record.getChannel().getId(), false).canShowBadge()
-                    && appCanShowBadge);
+            if (record.getChannel() != null) {
+                record.setShowBadge(record.getChannel().canShowBadge() && appCanShowBadge);
+            } else {
+                record.setShowBadge(appCanShowBadge);
+            }
         }
 
         return null;
diff --git a/services/core/java/com/android/server/notification/ConditionProviders.java b/services/core/java/com/android/server/notification/ConditionProviders.java
index c28fb67..c0fbfbb 100644
--- a/services/core/java/com/android/server/notification/ConditionProviders.java
+++ b/services/core/java/com/android/server/notification/ConditionProviders.java
@@ -16,14 +16,12 @@
 
 package com.android.server.notification;
 
-import android.annotation.NonNull;
 import android.app.INotificationManager;
 import android.app.NotificationManager;
 import android.content.ComponentName;
-import android.content.ContentResolver;
 import android.content.Context;
+import android.content.pm.IPackageManager;
 import android.net.Uri;
-import android.os.Handler;
 import android.os.IBinder;
 import android.os.IInterface;
 import android.os.RemoteException;
@@ -32,12 +30,12 @@
 import android.service.notification.Condition;
 import android.service.notification.ConditionProviderService;
 import android.service.notification.IConditionProvider;
-import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Slog;
 
 import com.android.internal.R;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.server.notification.NotificationManagerService.DumpFilter;
 
 import java.io.PrintWriter;
@@ -45,6 +43,10 @@
 import java.util.Arrays;
 
 public class ConditionProviders extends ManagedServices {
+
+    @VisibleForTesting
+    static final String TAG_ENABLED_DND_APPS = "dnd_apps";
+
     private final ArrayList<ConditionRecord> mRecords = new ArrayList<>();
     private final ArraySet<String> mSystemConditionProviderNames;
     private final ArraySet<SystemConditionProviderService> mSystemConditionProviders
@@ -52,11 +54,12 @@
 
     private Callback mCallback;
 
-    public ConditionProviders(Context context, Handler handler, UserProfiles userProfiles) {
-        super(context, handler, new Object(), userProfiles);
+    public ConditionProviders(Context context, UserProfiles userProfiles, IPackageManager pm) {
+        super(context, new Object(), userProfiles, pm);
         mSystemConditionProviderNames = safeSet(PropConfig.getStringArray(mContext,
                 "system.condition.providers",
                 R.array.config_system_condition_providers));
+        mApprovalLevel = APPROVAL_BY_PACKAGE;
     }
 
     public void setCallback(Callback callback) {
@@ -83,6 +86,7 @@
         c.caption = "condition provider";
         c.serviceInterface = ConditionProviderService.SERVICE_INTERFACE;
         c.secureSettingName = Settings.Secure.ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES;
+        c.xmlTag = TAG_ENABLED_DND_APPS;
         c.secondarySettingName = Settings.Secure.ENABLED_NOTIFICATION_LISTENERS;
         c.bindPermission = android.Manifest.permission.BIND_CONDITION_PROVIDER_SERVICE;
         c.settingsAction = Settings.ACTION_CONDITION_PROVIDER_SETTINGS;
@@ -164,7 +168,7 @@
     }
 
     @Override
-    public void onPackagesChanged(boolean removingPackage, String[] pkgList) {
+    public void onPackagesChanged(boolean removingPackage, String[] pkgList, int[] uid) {
         if (removingPackage) {
             INotificationManager inm = NotificationManager.getService();
 
@@ -179,7 +183,12 @@
                 }
             }
         }
-        super.onPackagesChanged(removingPackage, pkgList);
+        super.onPackagesChanged(removingPackage, pkgList, uid);
+    }
+
+    @Override
+    protected boolean isValidEntry(String packageOrComponent, int userId) {
+        return true;
     }
 
     public ManagedServiceInfo checkServiceToken(IConditionProvider provider) {
@@ -277,31 +286,6 @@
         }
     }
 
-    @Override
-    protected @NonNull ArraySet<ComponentName> loadComponentNamesFromSetting(String settingName,
-            int userId) {
-        final ContentResolver cr = mContext.getContentResolver();
-        String settingValue = Settings.Secure.getStringForUser(
-                cr,
-                settingName,
-                userId);
-        if (TextUtils.isEmpty(settingValue))
-            return new ArraySet<>();
-        String[] packages = settingValue.split(ENABLED_SERVICES_SEPARATOR);
-        ArraySet<ComponentName> result = new ArraySet<>(packages.length);
-        for (int i = 0; i < packages.length; i++) {
-            if (!TextUtils.isEmpty(packages[i])) {
-                final ComponentName component = ComponentName.unflattenFromString(packages[i]);
-                if (component != null) {
-                    result.addAll(queryPackageForServices(component.getPackageName(), userId));
-                } else {
-                    result.addAll(queryPackageForServices(packages[i], userId));
-                }
-            }
-        }
-        return result;
-    }
-
     public boolean subscribeIfNecessary(ComponentName component, Uri conditionId) {
         synchronized (mMutex) {
             final ConditionRecord r = getRecordLocked(conditionId, component, false /*create*/);
diff --git a/services/core/java/com/android/server/notification/CountdownConditionProvider.java b/services/core/java/com/android/server/notification/CountdownConditionProvider.java
index c1a7ac6..c165fc1 100644
--- a/services/core/java/com/android/server/notification/CountdownConditionProvider.java
+++ b/services/core/java/com/android/server/notification/CountdownConditionProvider.java
@@ -52,6 +52,7 @@
 
     private boolean mConnected;
     private long mTime;
+    private boolean mIsAlarm;
 
     public CountdownConditionProvider() {
         if (DEBUG) Slog.d(TAG, "new CountdownConditionProvider()");
@@ -110,9 +111,11 @@
     public void onSubscribe(Uri conditionId) {
         if (DEBUG) Slog.d(TAG, "onSubscribe " + conditionId);
         mTime = ZenModeConfig.tryParseCountdownConditionId(conditionId);
+        mIsAlarm = ZenModeConfig.isValidCountdownToAlarmConditionId(conditionId);
         final AlarmManager alarms = (AlarmManager)
                 mContext.getSystemService(Context.ALARM_SERVICE);
-        final Intent intent = new Intent(ACTION).putExtra(EXTRA_CONDITION_ID, conditionId)
+        final Intent intent = new Intent(ACTION)
+                .putExtra(EXTRA_CONDITION_ID, conditionId)
                 .setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
         final PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, REQUEST_CODE,
                 intent, PendingIntent.FLAG_UPDATE_CURRENT);
@@ -123,7 +126,7 @@
                     DateUtils.getRelativeTimeSpanString(mTime, now, DateUtils.MINUTE_IN_MILLIS);
             if (mTime <= now) {
                 // in the past, already false
-                notifyCondition(newCondition(mTime, Condition.STATE_FALSE));
+                notifyCondition(newCondition(mTime, mIsAlarm, Condition.STATE_FALSE));
             } else {
                 // in the future, set an alarm
                 alarms.setExact(AlarmManager.RTC_WAKEUP, mTime, pendingIntent);
@@ -145,17 +148,18 @@
         public void onReceive(Context context, Intent intent) {
             if (ACTION.equals(intent.getAction())) {
                 final Uri conditionId = intent.getParcelableExtra(EXTRA_CONDITION_ID);
+                final boolean alarm = ZenModeConfig.isValidCountdownToAlarmConditionId(conditionId);
                 final long time = ZenModeConfig.tryParseCountdownConditionId(conditionId);
                 if (DEBUG) Slog.d(TAG, "Countdown condition fired: " + conditionId);
                 if (time > 0) {
-                    notifyCondition(newCondition(time, Condition.STATE_FALSE));
+                    notifyCondition(newCondition(time, alarm, Condition.STATE_FALSE));
                 }
             }
         }
     }
 
-    private static final Condition newCondition(long time, int state) {
-        return new Condition(ZenModeConfig.toCountdownConditionId(time),
+    private static final Condition newCondition(long time, boolean alarm, int state) {
+        return new Condition(ZenModeConfig.toCountdownConditionId(time, alarm),
                 "", "", "", 0, state,Condition.FLAG_RELEVANT_NOW);
     }
 
diff --git a/services/core/java/com/android/server/notification/GroupHelper.java b/services/core/java/com/android/server/notification/GroupHelper.java
index 57c558c..ce805aad 100644
--- a/services/core/java/com/android/server/notification/GroupHelper.java
+++ b/services/core/java/com/android/server/notification/GroupHelper.java
@@ -38,14 +38,14 @@
     private final Callback mCallback;
 
     // Map of user : <Map of package : notification keys>. Only contains notifications that are not
-    // groupd by the app (aka no group or sort key).
+    // grouped by the app (aka no group or sort key).
     Map<Integer, Map<String, LinkedHashSet<String>>> mUngroupedNotifications = new HashMap<>();
 
     public GroupHelper(Callback callback) {;
         mCallback = callback;
     }
 
-    public void onNotificationPosted(StatusBarNotification sbn) {
+    public void onNotificationPosted(StatusBarNotification sbn, boolean autogroupSummaryExists) {
         if (DEBUG) Log.i(TAG, "POSTED " + sbn.getKey());
         try {
             List<String> notificationsToGroup = new ArrayList<>();
@@ -68,7 +68,8 @@
                     notificationsForPackage.add(sbn.getKey());
                     ungroupedNotificationsByUser.put(sbn.getPackageName(), notificationsForPackage);
 
-                    if (notificationsForPackage.size() >= AUTOGROUP_AT_COUNT) {
+                    if (notificationsForPackage.size() >= AUTOGROUP_AT_COUNT
+                            || autogroupSummaryExists) {
                         notificationsToGroup.addAll(notificationsForPackage);
                     }
                 }
@@ -120,6 +121,7 @@
             // If the status change of this notification has brought the number of loose
             // notifications to zero, remove the summary and un-autogroup.
             if (notificationsForPackage.size() == 0) {
+                ungroupedNotificationsByUser.remove(sbn.getPackageName());
                 removeSummary = true;
             }
         }
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java
index 5251c78..bf37dbe 100644
--- a/services/core/java/com/android/server/notification/ManagedServices.java
+++ b/services/core/java/com/android/server/notification/ManagedServices.java
@@ -25,12 +25,10 @@
 import android.app.ActivityManager;
 import android.app.PendingIntent;
 import android.app.admin.DevicePolicyManager;
-import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.IPackageManager;
@@ -39,33 +37,38 @@
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
 import android.content.pm.UserInfo;
-import android.database.ContentObserver;
-import android.net.Uri;
 import android.os.Binder;
 import android.os.Build;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.IInterface;
+import android.os.Looper;
 import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
 import android.text.TextUtils;
+import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Log;
 import android.util.Slog;
 import android.util.SparseArray;
 
+import com.android.internal.util.XmlUtils;
 import com.android.server.notification.NotificationManagerService.DumpFilter;
 
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Objects;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * Manages the lifecycle of application-provided services bound by system server.
@@ -81,81 +84,68 @@
     protected final String TAG = getClass().getSimpleName();
     protected final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
+    private static final int ON_BINDING_DIED_REBIND_DELAY_MS = 10000;
     protected static final String ENABLED_SERVICES_SEPARATOR = ":";
 
+    /**
+     * List of components and apps that can have running {@link ManagedServices}.
+     */
+    static final String TAG_MANAGED_SERVICES = "service_listing";
+    static final String ATT_APPROVED_LIST = "approved";
+    static final String ATT_USER_ID = "user";
+    static final String ATT_IS_PRIMARY = "primary";
+
+    static final int APPROVAL_BY_PACKAGE = 0;
+    static final int APPROVAL_BY_COMPONENT = 1;
+
     protected final Context mContext;
     protected final Object mMutex;
     private final UserProfiles mUserProfiles;
-    private final SettingsObserver mSettingsObserver;
     private final IPackageManager mPm;
+    private final UserManager mUm;
     private final Config mConfig;
-    private ArraySet<String> mRestored;
+    private final Handler mHandler = new Handler(Looper.getMainLooper());
 
     // contains connections to all connected services, including app services
     // and system services
-    private final ArrayList<ManagedServiceInfo> mServices = new ArrayList<ManagedServiceInfo>();
+    private final ArrayList<ManagedServiceInfo> mServices = new ArrayList<>();
     // things that will be put into mServices as soon as they're ready
-    private final ArrayList<String> mServicesBinding = new ArrayList<String>();
+    private final ArrayList<String> mServicesBinding = new ArrayList<>();
+    private final ArraySet<String> mServicesRebinding = new ArraySet<>();
+
     // lists the component names of all enabled (and therefore potentially connected)
     // app services for current profiles.
     private ArraySet<ComponentName> mEnabledServicesForCurrentProfiles
-            = new ArraySet<ComponentName>();
+            = new ArraySet<>();
     // Just the packages from mEnabledServicesForCurrentProfiles
-    private ArraySet<String> mEnabledServicesPackageNames = new ArraySet<String>();
-    // List of packages in restored setting across all mUserProfiles, for quick
-    // filtering upon package updates.
-    private ArraySet<String> mRestoredPackages = new ArraySet<>();
+    private ArraySet<String> mEnabledServicesPackageNames = new ArraySet<>();
     // List of enabled packages that have nevertheless asked not to be run
     private ArraySet<ComponentName> mSnoozingForCurrentProfiles = new ArraySet<>();
 
+    // List of approved packages or components (by user, then by primary/secondary) that are
+    // allowed to be bound as managed services. A package or component appearing in this list does
+    // not mean that we are currently bound to said package/component.
+    private ArrayMap<Integer, ArrayMap<Boolean, ArraySet<String>>> mApproved = new ArrayMap<>();
 
     // Kept to de-dupe user change events (experienced after boot, when we receive a settings and a
     // user change).
     private int[] mLastSeenProfileIds;
 
-    private final BroadcastReceiver mRestoreReceiver;
+    // True if approved services are stored in xml, not settings.
+    private boolean mUseXml;
 
-    public ManagedServices(Context context, Handler handler, Object mutex,
-            UserProfiles userProfiles) {
+    // Whether managed services are approved individually or package wide
+    protected int mApprovalLevel;
+
+    public ManagedServices(Context context, Object mutex, UserProfiles userProfiles,
+            IPackageManager pm) {
         mContext = context;
         mMutex = mutex;
         mUserProfiles = userProfiles;
-        mPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
+        mPm = pm;
         mConfig = getConfig();
-        mSettingsObserver = new SettingsObserver(handler);
-
-        mRestoreReceiver = new SettingRestoredReceiver();
-        IntentFilter filter = new IntentFilter(Intent.ACTION_SETTING_RESTORED);
-        context.registerReceiver(mRestoreReceiver, filter);
-        rebuildRestoredPackages();
-    }
-
-    class SettingRestoredReceiver extends BroadcastReceiver {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            if (Intent.ACTION_SETTING_RESTORED.equals(intent.getAction())) {
-                String element = intent.getStringExtra(Intent.EXTRA_SETTING_NAME);
-                if (Objects.equals(element, mConfig.secureSettingName)
-                        || Objects.equals(element, mConfig.secondarySettingName)) {
-                    String prevValue = intent.getStringExtra(Intent.EXTRA_SETTING_PREVIOUS_VALUE);
-                    String newValue = intent.getStringExtra(Intent.EXTRA_SETTING_NEW_VALUE);
-                    int restoredFromSdkInt = intent.getIntExtra(
-                            Intent.EXTRA_SETTING_RESTORED_FROM_SDK_INT, 0);
-                    if (restoredFromSdkInt < Build.VERSION_CODES.O) {
-                        // automatic system grants were added in O, so append the approved apps
-                        // rather than wiping out the setting
-                        if (!TextUtils.isEmpty(prevValue)) {
-                            if (!TextUtils.isEmpty(newValue)) {
-                                newValue = newValue + ENABLED_SERVICES_SEPARATOR + prevValue;
-                            } else {
-                                newValue = prevValue;
-                            }
-                        }
-                    }
-                    settingRestored(element, prevValue, newValue, getSendingUserId());
-                }
-            }
-        }
+        mApprovalLevel = APPROVAL_BY_COMPONENT;
+        mUm = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
     }
 
     abstract protected Config getConfig();
@@ -180,17 +170,33 @@
     protected void onServiceRemovedLocked(ManagedServiceInfo removed) { }
 
     private ManagedServiceInfo newServiceInfo(IInterface service,
-            ComponentName component, int userid, boolean isSystem, ServiceConnection connection,
+            ComponentName component, int userId, boolean isSystem, ServiceConnection connection,
             int targetSdkVersion) {
-        return new ManagedServiceInfo(service, component, userid, isSystem, connection,
+        return new ManagedServiceInfo(service, component, userId, isSystem, connection,
                 targetSdkVersion);
     }
 
-    public void onBootPhaseAppsCanStart() {
-        mSettingsObserver.observe();
-    }
+    public void onBootPhaseAppsCanStart() {}
 
     public void dump(PrintWriter pw, DumpFilter filter) {
+        pw.println("    Allowed " + getCaption() + "s:");
+        final int N = mApproved.size();
+        for (int i = 0 ; i < N; i++) {
+            final int userId = mApproved.keyAt(i);
+            final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.valueAt(i);
+            if (approvedByType != null) {
+                final int M = approvedByType.size();
+                for (int j = 0; j < M; j++) {
+                    final boolean isPrimary = approvedByType.keyAt(j);
+                    final ArraySet<String> approved = approvedByType.valueAt(j);
+                    if (approvedByType != null && approvedByType.size() > 0) {
+                        pw.println("      " + String.join(ENABLED_SERVICES_SEPARATOR, approved)
+                                + " (user: " + userId + " isPrimary: " + isPrimary + ")");
+                    }
+                }
+            }
+        }
+
         pw.println("    All " + getCaption() + "s (" + mEnabledServicesForCurrentProfiles.size()
                 + ") enabled for current profiles:");
         for (ComponentName cmpt : mEnabledServicesForCurrentProfiles) {
@@ -214,67 +220,262 @@
         }
     }
 
-    // By convention, restored settings are replicated to another settings
-    // entry, named similarly but with a disambiguation suffix.
-    public static String restoredSettingName(String setting) {
-        return setting + ":restored";
-    }
-
-    // The OS has done a restore of this service's saved state.  We clone it to the
-    // 'restored' reserve, and then once we return and the actual write to settings is
-    // performed, our observer will do the work of maintaining the restored vs live
-    // settings data.
-    public void settingRestored(String element, String oldValue, String newValue, int userid) {
-        if (DEBUG) Slog.d(TAG, "Restored managed service setting: " + element
-                + " ovalue=" + oldValue + " nvalue=" + newValue);
-        if (mConfig.secureSettingName.equals(element) ||
-                mConfig.secondarySettingName.equals(element)) {
-            if (element != null) {
-                Settings.Secure.putStringForUser(mContext.getContentResolver(),
-                        restoredSettingName(element),
-                        newValue,
-                        userid);
-                if (mConfig.secureSettingName.equals(element)) {
-                    updateSettingsAccordingToInstalledServices(element, userid);
+    protected void onSettingRestored(String element, String value, int backupSdkInt, int userId) {
+        if (!mUseXml) {
+            Slog.d(TAG, "Restored managed service setting: " + element);
+            if (mConfig.secureSettingName.equals(element) ||
+                    (mConfig.secondarySettingName != null
+                            && mConfig.secondarySettingName.equals(element))) {
+                if (backupSdkInt < Build.VERSION_CODES.O) {
+                    // automatic system grants were added in O, so append the approved apps
+                    // rather than wiping out the setting
+                    String currentSetting =
+                            getApproved(userId, mConfig.secureSettingName.equals(element));
+                    if (!TextUtils.isEmpty(currentSetting)) {
+                        if (!TextUtils.isEmpty(value)) {
+                            value = value + ENABLED_SERVICES_SEPARATOR + currentSetting;
+                        } else {
+                            value = currentSetting;
+                        }
+                    }
                 }
-                rebuildRestoredPackages();
+                Settings.Secure.putStringForUser(
+                        mContext.getContentResolver(), element, value, userId);
+                loadAllowedComponentsFromSettings();
+                rebindServices(false);
             }
         }
     }
 
-    public boolean isComponentEnabledForPackage(String pkg) {
+    public void writeXml(XmlSerializer out, boolean forBackup) throws IOException {
+        out.startTag(null, getConfig().xmlTag);
+
+        if (forBackup) {
+            trimApprovedListsAccordingToInstalledServices();
+        }
+
+        final int N = mApproved.size();
+        for (int i = 0 ; i < N; i++) {
+            final int userId = mApproved.keyAt(i);
+            final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.valueAt(i);
+            if (approvedByType != null) {
+                final int M = approvedByType.size();
+                for (int j = 0; j < M; j++) {
+                    final boolean isPrimary = approvedByType.keyAt(j);
+                    final Set<String> approved = approvedByType.valueAt(j);
+                    if (approved != null) {
+                        String allowedItems = String.join(ENABLED_SERVICES_SEPARATOR, approved);
+                        out.startTag(null, TAG_MANAGED_SERVICES);
+                        out.attribute(null, ATT_APPROVED_LIST, allowedItems);
+                        out.attribute(null, ATT_USER_ID, Integer.toString(userId));
+                        out.attribute(null, ATT_IS_PRIMARY, Boolean.toString(isPrimary));
+                        out.endTag(null, TAG_MANAGED_SERVICES);
+
+                        if (!forBackup && isPrimary) {
+                            // Also write values to settings, for observers who haven't migrated yet
+                            Settings.Secure.putStringForUser(mContext.getContentResolver(),
+                                    getConfig().secureSettingName, allowedItems, userId);
+                        }
+
+                    }
+                }
+            }
+        }
+
+        out.endTag(null, getConfig().xmlTag);
+    }
+
+    protected void migrateToXml() {
+        loadAllowedComponentsFromSettings();
+    }
+
+    public void readXml(XmlPullParser parser)
+            throws XmlPullParserException, IOException {
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
+            String tag = parser.getName();
+            if (type == XmlPullParser.END_TAG
+                    && getConfig().xmlTag.equals(tag)) {
+                break;
+            }
+            if (type == XmlPullParser.START_TAG) {
+                if (TAG_MANAGED_SERVICES.equals(tag)) {
+                    Slog.i(TAG, "Read " + mConfig.caption + " permissions from xml");
+                    final String approved = XmlUtils.readStringAttribute(parser, ATT_APPROVED_LIST);
+                    final int userId = XmlUtils.readIntAttribute(parser, ATT_USER_ID, 0);
+                    final boolean isPrimary =
+                            XmlUtils.readBooleanAttribute(parser, ATT_IS_PRIMARY, true);
+                    if (mUm.getUserInfo(userId) != null) {
+                        addApprovedList(approved, userId, isPrimary);
+                    }
+                    mUseXml = true;
+                }
+            }
+        }
+        rebindServices(false);
+    }
+
+    private void loadAllowedComponentsFromSettings() {
+
+        UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+        for (UserInfo user : userManager.getUsers()) {
+            final ContentResolver cr = mContext.getContentResolver();
+            addApprovedList(Settings.Secure.getStringForUser(
+                    cr,
+                    getConfig().secureSettingName,
+                    user.id), user.id, true);
+            if (!TextUtils.isEmpty(getConfig().secondarySettingName)) {
+                addApprovedList(Settings.Secure.getStringForUser(
+                        cr,
+                        getConfig().secondarySettingName,
+                        user.id), user.id, false);
+            }
+        }
+        Slog.d(TAG, "Done loading approved values from settings");
+    }
+
+    private void addApprovedList(String approved, int userId, boolean isPrimary) {
+        if (TextUtils.isEmpty(approved)) {
+            approved = "";
+        }
+        ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(userId);
+        if (approvedByType == null) {
+            approvedByType = new ArrayMap<>();
+            mApproved.put(userId, approvedByType);
+        }
+        String[] approvedArray = approved.split(ENABLED_SERVICES_SEPARATOR);
+        final ArraySet<String> approvedList = new ArraySet<>();
+        for (String pkgOrComponent : approvedArray) {
+            String approvedItem = getApprovedValue(pkgOrComponent);
+            if (approvedItem != null) {
+                approvedList.add(approvedItem);
+            }
+        }
+        approvedByType.put(isPrimary, approvedList);
+    }
+
+    protected boolean isComponentEnabledForPackage(String pkg) {
         return mEnabledServicesPackageNames.contains(pkg);
     }
 
-    public void onPackagesChanged(boolean removingPackage, String[] pkgList) {
+    protected void setPackageOrComponentEnabled(String pkgOrComponent, int userId,
+            boolean isPrimary, boolean enabled) {
+        Slog.i(TAG,
+                (enabled ? " Allowing " : "Disallowing ") + mConfig.caption + " " + pkgOrComponent);
+        ArrayMap<Boolean, ArraySet<String>> allowedByType = mApproved.get(userId);
+        if (allowedByType == null) {
+            allowedByType = new ArrayMap<>();
+            mApproved.put(userId, allowedByType);
+        }
+        ArraySet<String> approved = allowedByType.get(isPrimary);
+        if (approved == null) {
+            approved = new ArraySet<>();
+            allowedByType.put(isPrimary, approved);
+        }
+        String approvedItem = getApprovedValue(pkgOrComponent);
+
+        if (approvedItem != null) {
+            if (enabled) {
+                approved.add(approvedItem);
+            } else {
+                approved.remove(approvedItem);
+            }
+        }
+
+        rebindServices(false);
+    }
+
+    private String getApprovedValue(String pkgOrComponent) {
+        if (mApprovalLevel == APPROVAL_BY_COMPONENT) {
+            if(ComponentName.unflattenFromString(pkgOrComponent) != null) {
+                return pkgOrComponent;
+            }
+            return null;
+        } else {
+            return getPackageName(pkgOrComponent);
+        }
+    }
+
+    protected String getApproved(int userId, boolean primary) {
+        final ArrayMap<Boolean, ArraySet<String>> allowedByType =
+                mApproved.getOrDefault(userId, new ArrayMap<>());
+        ArraySet<String> approved = allowedByType.getOrDefault(primary, new ArraySet<>());
+        return String.join(ENABLED_SERVICES_SEPARATOR, approved);
+    }
+
+    protected List<ComponentName> getAllowedComponents(int userId) {
+        final List<ComponentName> allowedComponents = new ArrayList<>();
+        final ArrayMap<Boolean, ArraySet<String>> allowedByType =
+                mApproved.getOrDefault(userId, new ArrayMap<>());
+        for (int i = 0; i < allowedByType.size(); i++) {
+            final ArraySet<String> allowed = allowedByType.valueAt(i);
+            allowedComponents.addAll(allowed.stream().map(ComponentName::unflattenFromString)
+                    .filter(out -> out != null).collect(Collectors.toList()));
+        }
+        return allowedComponents;
+    }
+
+    protected List<String> getAllowedPackages(int userId) {
+        final List<String> allowedPackages = new ArrayList<>();
+        final ArrayMap<Boolean, ArraySet<String>> allowedByType =
+                mApproved.getOrDefault(userId, new ArrayMap<>());
+        for (int i = 0; i < allowedByType.size(); i++) {
+            final ArraySet<String> allowed = allowedByType.valueAt(i);
+            allowedPackages.addAll(
+                    allowed.stream().map(this::getPackageName).collect(Collectors.toList()));
+        }
+        return allowedPackages;
+    }
+
+    protected boolean isPackageOrComponentAllowed(String pkgOrComponent, int userId) {
+        ArrayMap<Boolean, ArraySet<String>> allowedByType =
+                mApproved.getOrDefault(userId, new ArrayMap<>());
+        for (int i = 0; i < allowedByType.size(); i++) {
+            ArraySet<String> allowed = allowedByType.valueAt(i);
+            if (allowed.contains(pkgOrComponent)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public void onPackagesChanged(boolean removingPackage, String[] pkgList, int[] uidList) {
         if (DEBUG) Slog.d(TAG, "onPackagesChanged removingPackage=" + removingPackage
                 + " pkgList=" + (pkgList == null ? null : Arrays.asList(pkgList))
                 + " mEnabledServicesPackageNames=" + mEnabledServicesPackageNames);
-        boolean anyServicesInvolved = false;
 
         if (pkgList != null && (pkgList.length > 0)) {
+            boolean anyServicesInvolved = false;
+            // Remove notification settings for uninstalled package
+            if (removingPackage) {
+                int size = Math.min(pkgList.length, uidList.length);
+                for (int i = 0; i < size; i++) {
+                    final String pkg = pkgList[i];
+                    final int userId = UserHandle.getUserId(uidList[i]);
+                    anyServicesInvolved = removeUninstalledItemsFromApprovedLists(userId, pkg);
+                }
+            }
             for (String pkgName : pkgList) {
-                if (mEnabledServicesPackageNames.contains(pkgName) ||
-                        mRestoredPackages.contains(pkgName)) {
+                if (mEnabledServicesPackageNames.contains(pkgName)) {
                     anyServicesInvolved = true;
                 }
             }
-        }
 
-        if (anyServicesInvolved) {
-            // if we're not replacing a package, clean up orphaned bits
-            if (removingPackage) {
-                updateSettingsAccordingToInstalledServices();
-                rebuildRestoredPackages();
+            if (anyServicesInvolved) {
+                // make sure we're still bound to any of our services who may have just upgraded
+                rebindServices(false);
             }
-            // make sure we're still bound to any of our services who may have just upgraded
-            rebindServices(false);
         }
     }
 
+    public void onUserRemoved(int user) {
+        Slog.i(TAG, "Removing approved services for removed user " + user);
+        mApproved.remove(user);
+        rebindServices(true);
+    }
+
     public void onUserSwitched(int user) {
         if (DEBUG) Slog.d(TAG, "onUserSwitched u=" + user);
-        rebuildRestoredPackages();
         if (Arrays.equals(mLastSeenProfileIds, mUserProfiles.getCurrentProfileIds())) {
             if (DEBUG) Slog.d(TAG, "Current profile IDs didn't change, skipping rebindServices().");
             return;
@@ -284,11 +485,10 @@
 
     public void onUserUnlocked(int user) {
         if (DEBUG) Slog.d(TAG, "onUserUnlocked u=" + user);
-        rebuildRestoredPackages();
         rebindServices(false);
     }
 
-    public ManagedServiceInfo getServiceFromTokenLocked(IInterface service) {
+    private ManagedServiceInfo getServiceFromTokenLocked(IInterface service) {
         if (service == null) {
             return null;
         }
@@ -301,14 +501,14 @@
         return null;
     }
 
-    public ManagedServiceInfo checkServiceTokenLocked(IInterface service) {
+    protected ManagedServiceInfo checkServiceTokenLocked(IInterface service) {
         checkNotNull(service);
         ManagedServiceInfo info = getServiceFromTokenLocked(service);
         if (info != null) {
             return info;
         }
         throw new SecurityException("Disallowed call from unknown " + getCaption() + ": "
-                + service);
+                + service + " " + service.getClass());
     }
 
     public void unregisterService(IInterface service, int userid) {
@@ -328,9 +528,9 @@
 
     /**
      * Add a service to our callbacks. The lifecycle of this service is managed externally,
-     * but unlike a system service, it should not be considered privledged.
+     * but unlike a system service, it should not be considered privileged.
      * */
-    public void registerGuestService(ManagedServiceInfo guest) {
+    protected void registerGuestService(ManagedServiceInfo guest) {
         checkNotNull(guest.service);
         if (!checkType(guest.service)) {
             throw new IllegalArgumentException();
@@ -340,7 +540,7 @@
         }
     }
 
-    public void setComponentState(ComponentName component, boolean enabled) {
+    protected void setComponentState(ComponentName component, boolean enabled) {
         boolean previous = !mSnoozingForCurrentProfiles.contains(component);
         if (previous == enabled) {
             return;
@@ -353,11 +553,8 @@
         }
 
         // State changed
-        if (DEBUG) {
-            Slog.d(TAG, ((enabled) ? "Enabling " : "Disabling ") + "component " +
-                    component.flattenToShortString());
-        }
-
+        Slog.d(TAG, ((enabled) ? "Enabling " : "Disabling ") + "component " +
+                component.flattenToShortString());
 
         synchronized (mMutex) {
             final int[] userIds = mUserProfiles.getCurrentProfileIds();
@@ -372,84 +569,31 @@
         }
     }
 
-    private void rebuildRestoredPackages() {
-        mRestoredPackages.clear();
-        String secureSettingName = restoredSettingName(mConfig.secureSettingName);
-        String secondarySettingName = mConfig.secondarySettingName == null
-                ? null : restoredSettingName(mConfig.secondarySettingName);
-        int[] userIds = mUserProfiles.getCurrentProfileIds();
-        final int N = userIds.length;
-        for (int i = 0; i < N; ++i) {
-            ArraySet<ComponentName> names =
-                    loadComponentNamesFromSetting(secureSettingName, userIds[i]);
-            if (secondarySettingName != null) {
-                names.addAll(loadComponentNamesFromSetting(secondarySettingName, userIds[i]));
-            }
-            for (ComponentName name : names) {
-                mRestoredPackages.add(name.getPackageName());
-            }
-        }
-    }
-
-
-    protected @NonNull ArraySet<ComponentName> loadComponentNamesFromSetting(String settingName,
-            int userId) {
-        final ContentResolver cr = mContext.getContentResolver();
-        String settingValue = Settings.Secure.getStringForUser(
-            cr,
-            settingName,
-            userId);
-        if (TextUtils.isEmpty(settingValue))
+    private @NonNull ArraySet<ComponentName> loadComponentNamesFromValues(
+            ArraySet<String> approved, int userId) {
+        if (approved == null || approved.size() == 0)
             return new ArraySet<>();
-        String[] restored = settingValue.split(ENABLED_SERVICES_SEPARATOR);
-        ArraySet<ComponentName> result = new ArraySet<>(restored.length);
-        for (int i = 0; i < restored.length; i++) {
-            ComponentName value = ComponentName.unflattenFromString(restored[i]);
-            if (null != value) {
-                result.add(value);
+        ArraySet<ComponentName> result = new ArraySet<>(approved.size());
+        for (int i = 0; i < approved.size(); i++) {
+            final String packageOrComponent = approved.valueAt(i);
+            if (!TextUtils.isEmpty(packageOrComponent)) {
+                ComponentName component = ComponentName.unflattenFromString(packageOrComponent);
+                if (component != null) {
+                    result.add(component);
+                } else {
+                    result.addAll(queryPackageForServices(packageOrComponent, userId));
+                }
             }
         }
         return result;
     }
 
-    private void storeComponentsToSetting(Set<ComponentName> components,
-                                          String settingName,
-                                          int userId) {
-        String[] componentNames = null;
-        if (null != components) {
-            componentNames = new String[components.size()];
-            int index = 0;
-            for (ComponentName c: components) {
-                componentNames[index++] = c.flattenToString();
-            }
-        }
-        final String value = (componentNames == null) ? "" :
-                TextUtils.join(ENABLED_SERVICES_SEPARATOR, componentNames);
-        final ContentResolver cr = mContext.getContentResolver();
-        Settings.Secure.putStringForUser(
-            cr,
-            settingName,
-            value,
-            userId);
-    }
-
-    /**
-     * Remove access for any services that no longer exist.
-     */
-    private void updateSettingsAccordingToInstalledServices() {
-        int[] userIds = mUserProfiles.getCurrentProfileIds();
-        final int N = userIds.length;
-        for (int i = 0; i < N; ++i) {
-            updateSettingsAccordingToInstalledServices(mConfig.secureSettingName, userIds[i]);
-            if (mConfig.secondarySettingName != null) {
-                updateSettingsAccordingToInstalledServices(
-                        mConfig.secondarySettingName, userIds[i]);
-            }
-        }
-        rebuildRestoredPackages();
-    }
-
     protected Set<ComponentName> queryPackageForServices(String packageName, int userId) {
+        return queryPackageForServices(packageName, 0, userId);
+    }
+
+    protected Set<ComponentName> queryPackageForServices(String packageName, int extraFlags,
+            int userId) {
         Set<ComponentName> installed = new ArraySet<>();
         final PackageManager pm = mContext.getPackageManager();
         Intent queryIntent = new Intent(mConfig.serviceInterface);
@@ -458,7 +602,7 @@
         }
         List<ResolveInfo> installedServices = pm.queryIntentServicesAsUser(
                 queryIntent,
-                PackageManager.GET_SERVICES | PackageManager.GET_META_DATA,
+                PackageManager.GET_SERVICES | PackageManager.GET_META_DATA | extraFlags,
                 userId);
         if (DEBUG)
             Slog.v(TAG, mConfig.serviceInterface + " services: " + installedServices);
@@ -481,50 +625,75 @@
         return installed;
     }
 
-    private void updateSettingsAccordingToInstalledServices(String setting, int userId) {
-        boolean restoredChanged = false;
-        boolean currentChanged = false;
-        Set<ComponentName> restored =
-                loadComponentNamesFromSetting(restoredSettingName(setting), userId);
-        Set<ComponentName> current =
-                loadComponentNamesFromSetting(setting, userId);
-        // Load all services for all packages.
-        Set<ComponentName> installed = queryPackageForServices(null, userId);
-
-        ArraySet<ComponentName> retained = new ArraySet<>();
-
-        for (ComponentName component : installed) {
-            if (null != restored) {
-                boolean wasRestored = restored.remove(component);
-                if (wasRestored) {
-                    // Freshly installed package has service that was mentioned in restored setting.
-                    if (DEBUG)
-                        Slog.v(TAG, "Restoring " + component + " for user " + userId);
-                    restoredChanged = true;
-                    currentChanged = true;
-                    retained.add(component);
-                    continue;
+    private void trimApprovedListsAccordingToInstalledServices() {
+        int N = mApproved.size();
+        for (int i = 0 ; i < N; i++) {
+            final int userId = mApproved.keyAt(i);
+            final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.valueAt(i);
+            int M = approvedByType.size();
+            for (int j = 0; j < M; j++) {
+                final ArraySet<String> approved = approvedByType.valueAt(j);
+                int P = approved.size();
+                for (int k = P - 1; k >= 0; k--) {
+                    final String approvedPackageOrComponent = approved.valueAt(k);
+                    if (!isValidEntry(approvedPackageOrComponent, userId)){
+                        approved.removeAt(k);
+                        Slog.v(TAG, "Removing " + approvedPackageOrComponent
+                                + " from approved list; no matching services found");
+                    } else {
+                        if (DEBUG) {
+                            Slog.v(TAG, "Keeping " + approvedPackageOrComponent
+                                    + " on approved list; matching services found");
+                        }
+                    }
                 }
             }
+        }
+    }
 
-            if (null != current) {
-                if (current.contains(component))
-                    retained.add(component);
+    private boolean removeUninstalledItemsFromApprovedLists(int uninstalledUserId, String pkg) {
+        boolean removed = false;
+        final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(uninstalledUserId);
+        if (approvedByType != null) {
+            int M = approvedByType.size();
+            for (int j = 0; j < M; j++) {
+                final ArraySet<String> approved = approvedByType.valueAt(j);
+                int O = approved.size();
+                for (int k = O - 1; k >= 0; k--) {
+                    final String packageOrComponent = approved.valueAt(k);
+                    final String packageName = getPackageName(packageOrComponent);
+                    if (TextUtils.equals(pkg, packageName)) {
+                        approved.removeAt(k);
+                        if (DEBUG) {
+                            Slog.v(TAG, "Removing " + packageOrComponent
+                                    + " from approved list; uninstalled");
+                        }
+                    }
+                }
             }
         }
+        return removed;
+    }
 
-        currentChanged |= ((current == null ? 0 : current.size()) != retained.size());
-
-        if (currentChanged) {
-            if (DEBUG) Slog.v(TAG, "List of  " + getCaption() + " services was updated " + current);
-            storeComponentsToSetting(retained, setting, userId);
+    protected String getPackageName(String packageOrComponent) {
+        final ComponentName component = ComponentName.unflattenFromString(packageOrComponent);
+        if (component != null) {
+            return component.getPackageName();
+        } else {
+            return packageOrComponent;
         }
+    }
 
-        if (restoredChanged) {
-            if (DEBUG) Slog.v(TAG,
-                    "List of  " + getCaption() + " restored services was updated " + restored);
-            storeComponentsToSetting(restored, restoredSettingName(setting), userId);
+    protected boolean isValidEntry(String packageOrComponent, int userId) {
+        return hasMatchingServices(packageOrComponent, userId);
+    }
+
+    private boolean hasMatchingServices(String packageOrComponent, int userId) {
+        if (!TextUtils.isEmpty(packageOrComponent)) {
+            final String packageName = getPackageName(packageOrComponent);
+            return queryPackageForServices(packageName, userId).size() > 0;
         }
+        return false;
     }
 
     /**
@@ -539,11 +708,19 @@
         final SparseArray<ArraySet<ComponentName>> componentsByUser = new SparseArray<>();
 
         for (int i = 0; i < nUserIds; ++i) {
-            componentsByUser.put(userIds[i],
-                    loadComponentNamesFromSetting(mConfig.secureSettingName, userIds[i]));
-            if (mConfig.secondarySettingName != null) {
-                componentsByUser.get(userIds[i]).addAll(
-                        loadComponentNamesFromSetting(mConfig.secondarySettingName, userIds[i]));
+            final int userId = userIds[i];
+            final ArrayMap<Boolean, ArraySet<String>> approvedLists = mApproved.get(userIds[i]);
+            if (approvedLists != null) {
+                final int N = approvedLists.size();
+                for (int j = 0; j < N; j++) {
+                    ArraySet<ComponentName> approvedByUser = componentsByUser.get(userId);
+                    if (approvedByUser == null) {
+                        approvedByUser = new ArraySet<>();
+                        componentsByUser.put(userId, approvedByUser);
+                    }
+                    approvedByUser.addAll(
+                            loadComponentNamesFromValues(approvedLists.valueAt(j), userId));
+                }
             }
         }
 
@@ -565,7 +742,7 @@
                 // decode the list of components
                 final ArraySet<ComponentName> userComponents = componentsByUser.get(userIds[i]);
                 if (null == userComponents) {
-                    toAdd.put(userIds[i], new ArraySet<ComponentName>());
+                    toAdd.put(userIds[i], new ArraySet<>());
                     continue;
                 }
 
@@ -608,7 +785,7 @@
                             PackageManager.MATCH_DIRECT_BOOT_AWARE
                                     | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, userIds[i]);
                     if (info == null || !mConfig.bindPermission.equals(info.permission)) {
-                        Slog.w(TAG, "Skipping " + getCaption() + " service " + component
+                        Slog.w(TAG, "Not binding " + getCaption() + " service " + component
                                 + ": it does not require the permission " + mConfig.bindPermission);
                         continue;
                     }
@@ -652,6 +829,7 @@
 
         final String servicesBindingTag = name.toString() + "/" + userid;
         if (mServicesBinding.contains(servicesBindingTag)) {
+            Slog.v(TAG, "Not registering " + name + " as bind is already in progress");
             // stop registering this thing already! we're working on it
             return;
         }
@@ -663,8 +841,7 @@
             if (name.equals(info.component)
                 && info.userid == userid) {
                 // cut old connections
-                if (DEBUG) Slog.v(TAG, "    disconnecting old " + getCaption() + ": "
-                    + info.service);
+                Slog.v(TAG, "    disconnecting old " + getCaption() + ": " + info.service);
                 removeServiceLocked(i);
                 if (info.connection != null) {
                     mContext.unbindService(info.connection);
@@ -692,7 +869,7 @@
             appInfo != null ? appInfo.targetSdkVersion : Build.VERSION_CODES.BASE;
 
         try {
-            if (DEBUG) Slog.v(TAG, "binding: " + intent);
+            Slog.v(TAG, "binding: " + intent);
             ServiceConnection serviceConnection = new ServiceConnection() {
                 IInterface mService;
 
@@ -701,6 +878,7 @@
                     boolean added = false;
                     ManagedServiceInfo info = null;
                     synchronized (mMutex) {
+                        mServicesRebinding.remove(servicesBindingTag);
                         mServicesBinding.remove(servicesBindingTag);
                         try {
                             mService = asInterface(binder);
@@ -719,8 +897,34 @@
 
                 @Override
                 public void onServiceDisconnected(ComponentName name) {
+                    mServicesBinding.remove(servicesBindingTag);
                     Slog.v(TAG, getCaption() + " connection lost: " + name);
                 }
+
+                @Override
+                public void onBindingDied(ComponentName name) {
+                    Slog.w(TAG, getCaption() + " binding died: " + name);
+                    synchronized (mMutex) {
+                        mServicesBinding.remove(servicesBindingTag);
+                        try {
+                            mContext.unbindService(this);
+                        } catch (IllegalArgumentException e) {
+                            Slog.e(TAG, "failed to unbind " + name, e);
+                        }
+                        if (!mServicesRebinding.contains(servicesBindingTag)) {
+                            mServicesRebinding.add(servicesBindingTag);
+                            mHandler.postDelayed(new Runnable() {
+                                    @Override
+                                    public void run() {
+                                        registerService(name, userid);
+                                    }
+                               }, ON_BINDING_DIED_REBIND_DELAY_MS);
+                        } else {
+                            Slog.v(TAG, getCaption() + " not rebinding as "
+                                    + "a previous rebind attempt was made: " + name);
+                        }
+                    }
+                }
             };
             if (!mContext.bindServiceAsUser(intent,
                 serviceConnection,
@@ -731,8 +935,8 @@
                 return;
             }
         } catch (SecurityException ex) {
+            mServicesBinding.remove(servicesBindingTag);
             Slog.e(TAG, "Unable to bind " + getCaption() + " service: " + intent, ex);
-            return;
         }
     }
 
@@ -749,8 +953,7 @@
         final int N = mServices.size();
         for (int i = N - 1; i >= 0; i--) {
             final ManagedServiceInfo info = mServices.get(i);
-            if (name.equals(info.component)
-                && info.userid == userid) {
+            if (name.equals(info.component) && info.userid == userid) {
                 removeServiceLocked(i);
                 if (info.connection != null) {
                     try {
@@ -777,9 +980,8 @@
             final int N = mServices.size();
             for (int i = N - 1; i >= 0; i--) {
                 final ManagedServiceInfo info = mServices.get(i);
-                if (info.service.asBinder() == service.asBinder()
-                        && info.userid == userid) {
-                    if (DEBUG) Slog.d(TAG, "Removing active service " + info.component);
+                if (info.service.asBinder() == service.asBinder() && info.userid == userid) {
+                    Slog.d(TAG, "Removing active service " + info.component);
                     serviceInfo = removeServiceLocked(i);
                 }
             }
@@ -829,45 +1031,6 @@
         }
     }
 
-    private class SettingsObserver extends ContentObserver {
-        private final Uri mSecureSettingsUri = Settings.Secure.getUriFor(mConfig.secureSettingName);
-        private final Uri mSecondarySettingsUri;
-
-        private SettingsObserver(Handler handler) {
-            super(handler);
-            if (mConfig.secondarySettingName != null) {
-                mSecondarySettingsUri = Settings.Secure.getUriFor(mConfig.secondarySettingName);
-            } else {
-                mSecondarySettingsUri = null;
-            }
-        }
-
-        private void observe() {
-            ContentResolver resolver = mContext.getContentResolver();
-            resolver.registerContentObserver(mSecureSettingsUri,
-                    false, this, UserHandle.USER_ALL);
-            if (mSecondarySettingsUri != null) {
-                resolver.registerContentObserver(mSecondarySettingsUri,
-                        false, this, UserHandle.USER_ALL);
-            }
-            update(null);
-        }
-
-        @Override
-        public void onChange(boolean selfChange, Uri uri) {
-            update(uri);
-        }
-
-        private void update(Uri uri) {
-            if (uri == null || mSecureSettingsUri.equals(uri)
-                    || uri.equals(mSecondarySettingsUri)) {
-                if (DEBUG) Slog.d(TAG, "Setting changed: uri=" + uri);
-                rebindServices(false);
-                rebuildRestoredPackages();
-            }
-        }
-    }
-
     public class ManagedServiceInfo implements IBinder.DeathRecipient {
         public IInterface service;
         public ComponentName component;
@@ -1013,6 +1176,7 @@
         public String serviceInterface;
         public String secureSettingName;
         public String secondarySettingName;
+        public String xmlTag;
         public String bindPermission;
         public String settingsAction;
         public int clientLabel;
diff --git a/services/core/java/com/android/server/notification/NotificationAdjustmentExtractor.java b/services/core/java/com/android/server/notification/NotificationAdjustmentExtractor.java
new file mode 100644
index 0000000..7c82845
--- /dev/null
+++ b/services/core/java/com/android/server/notification/NotificationAdjustmentExtractor.java
@@ -0,0 +1,48 @@
+/**
+* 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.notification;
+
+import android.content.Context;
+import android.util.Slog;
+
+/**
+ * Applies adjustments from the group helper and notification assistant
+ */
+public class NotificationAdjustmentExtractor implements NotificationSignalExtractor {
+    private static final String TAG = "BadgeExtractor";
+    private static final boolean DBG = false;
+
+
+    public void initialize(Context ctx, NotificationUsageStats usageStats) {
+        if (DBG) Slog.d(TAG, "Initializing  " + getClass().getSimpleName() + ".");
+    }
+
+    public RankingReconsideration process(NotificationRecord record) {
+        if (record == null || record.getNotification() == null) {
+            if (DBG) Slog.d(TAG, "skipping empty notification");
+            return null;
+        }
+
+        record.applyAdjustments();
+
+        return null;
+    }
+
+    @Override
+    public void setConfig(RankingConfig config) {
+        // config is not used
+    }
+}
diff --git a/services/core/java/com/android/server/notification/NotificationChannelExtractor.java b/services/core/java/com/android/server/notification/NotificationChannelExtractor.java
new file mode 100644
index 0000000..46ab556
--- /dev/null
+++ b/services/core/java/com/android/server/notification/NotificationChannelExtractor.java
@@ -0,0 +1,55 @@
+/**
+* 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.notification;
+
+import android.content.Context;
+import android.util.Slog;
+
+/**
+ * Stores the latest notification channel information for this notification
+ */
+public class NotificationChannelExtractor implements NotificationSignalExtractor {
+    private static final String TAG = "BadgeExtractor";
+    private static final boolean DBG = false;
+
+    private RankingConfig mConfig;
+
+    public void initialize(Context ctx, NotificationUsageStats usageStats) {
+        if (DBG) Slog.d(TAG, "Initializing  " + getClass().getSimpleName() + ".");
+    }
+
+    public RankingReconsideration process(NotificationRecord record) {
+        if (record == null || record.getNotification() == null) {
+            if (DBG) Slog.d(TAG, "skipping empty notification");
+            return null;
+        }
+
+        if (mConfig == null) {
+            if (DBG) Slog.d(TAG, "missing config");
+            return null;
+        }
+
+        record.updateNotificationChannel(mConfig.getNotificationChannel(record.sbn.getPackageName(),
+                record.sbn.getUid(), record.getChannel().getId(), false));
+
+        return null;
+    }
+
+    @Override
+    public void setConfig(RankingConfig config) {
+        mConfig = config;
+    }
+}
diff --git a/services/core/java/com/android/server/notification/NotificationIntrusivenessExtractor.java b/services/core/java/com/android/server/notification/NotificationIntrusivenessExtractor.java
index 12b29cf..91fee46 100644
--- a/services/core/java/com/android/server/notification/NotificationIntrusivenessExtractor.java
+++ b/services/core/java/com/android/server/notification/NotificationIntrusivenessExtractor.java
@@ -16,14 +16,14 @@
 
 package com.android.server.notification;
 
-import android.app.Notification;
 import android.app.NotificationManager;
 import android.content.Context;
 import android.net.Uri;
-import android.service.notification.NotificationListenerService;
 import android.util.Log;
 import android.util.Slog;
 
+import com.android.internal.annotations.VisibleForTesting;
+
 /**
  * This {@link com.android.server.notification.NotificationSignalExtractor} notices noisy
  * notifications and marks them to get a temporary ranking bump.
@@ -34,7 +34,8 @@
 
     /** Length of time (in milliseconds) that an intrusive or noisy notification will stay at
     the top of the ranking order, before it falls back to its natural position. */
-    private static final long HANG_TIME_MS = 10000;
+    @VisibleForTesting
+    static final long HANG_TIME_MS = 10000;
 
     public void initialize(Context ctx, NotificationUsageStats usageStats) {
         if (DBG) Slog.d(TAG, "Initializing  " + getClass().getSimpleName() + ".");
@@ -46,7 +47,8 @@
             return null;
         }
 
-        if (record.getImportance() >= NotificationManager.IMPORTANCE_DEFAULT) {
+        if (record.getFreshnessMs(System.currentTimeMillis()) < HANG_TIME_MS
+                && record.getImportance() >= NotificationManager.IMPORTANCE_DEFAULT) {
             if (record.getSound() != null && record.getSound() != Uri.EMPTY) {
                 record.setRecentlyIntrusive(true);
             }
diff --git a/services/core/java/com/android/server/notification/NotificationManagerInternal.java b/services/core/java/com/android/server/notification/NotificationManagerInternal.java
index 4923b06..f1476b3 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerInternal.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerInternal.java
@@ -17,8 +17,10 @@
 package com.android.server.notification;
 
 import android.app.Notification;
+import android.app.NotificationChannel;
 
 public interface NotificationManagerInternal {
+    NotificationChannel getNotificationChannel(String pkg, int uid, String channelId);
     void enqueueNotification(String pkg, String basePkg, int callingUid, int callingPid,
             String tag, int id, Notification notification, int userId);
 
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 5c387eb..5df6083b 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -16,11 +16,14 @@
 
 package com.android.server.notification;
 
+import static android.app.NotificationManager.IMPORTANCE_LOW;
 import static android.app.NotificationManager.IMPORTANCE_MIN;
 import static android.app.NotificationManager.IMPORTANCE_NONE;
+import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
 import static android.content.pm.PackageManager.FEATURE_LEANBACK;
 import static android.content.pm.PackageManager.FEATURE_TELEVISION;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+import static android.os.UserHandle.USER_NULL;
 import static android.service.notification.NotificationListenerService
         .NOTIFICATION_CHANNEL_OR_GROUP_ADDED;
 import static android.service.notification.NotificationListenerService
@@ -55,7 +58,6 @@
 
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
-import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
 
 import android.Manifest;
 import android.annotation.NonNull;
@@ -88,16 +90,15 @@
 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.PackageManager.NameNotFoundException;
 import android.content.pm.ParceledListSlice;
 import android.content.res.Resources;
 import android.database.ContentObserver;
+import android.media.AudioAttributes;
 import android.media.AudioManager;
 import android.media.AudioManagerInternal;
 import android.media.IRingtonePlayer;
-import android.media.ToneGenerator;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Build;
@@ -111,7 +112,10 @@
 import android.os.Message;
 import android.os.Process;
 import android.os.RemoteException;
+import android.os.ResultReceiver;
 import android.os.ServiceManager;
+import android.os.ShellCallback;
+import android.os.ShellCommand;
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.UserHandle;
@@ -156,11 +160,13 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.os.BackgroundThread;
 import com.android.internal.statusbar.NotificationVisibility;
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.DumpUtils;
 import com.android.internal.util.FastXmlSerializer;
 import com.android.internal.util.Preconditions;
+import com.android.internal.util.XmlUtils;
 import com.android.server.DeviceIdleController;
 import com.android.server.EventLogTags;
 import com.android.server.LocalServices;
@@ -184,22 +190,22 @@
 import java.io.ByteArrayOutputStream;
 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;
 import java.io.OutputStream;
 import java.io.PrintWriter;
+import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 /** {@hide} */
@@ -265,6 +271,7 @@
     private static final String EXTRA_KEY = "key";
 
     private IActivityManager mAm;
+    private ActivityManager mActivityManager;
     private IPackageManager mPackageManager;
     private PackageManager mPackageManagerClient;
     AudioManager mAudioManager;
@@ -274,9 +281,10 @@
     private WindowManagerInternal mWindowManagerInternal;
     private AlarmManager mAlarmManager;
     private ICompanionDeviceManager mCompanionManager;
+    private AccessibilityManager mAccessibilityManager;
 
     final IBinder mForegroundToken = new Binder();
-    private Handler mHandler;
+    private WorkerHandler mHandler;
     private final HandlerThread mRankingThread = new HandlerThread("ranker",
             Process.THREAD_PRIORITY_BACKGROUND);
 
@@ -293,35 +301,32 @@
     private String mVibrateNotificationKey;
 
     private final SparseArray<ArraySet<ManagedServiceInfo>> mListenersDisablingEffects =
-            new SparseArray<ArraySet<ManagedServiceInfo>>();
-    private List<ComponentName> mEffectsSuppressors = new ArrayList<ComponentName>();
+            new SparseArray<>();
+    private List<ComponentName> mEffectsSuppressors = new ArrayList<>();
     private int mListenerHints;  // right now, all hints are global
     private int mInterruptionFilter = NotificationListenerService.INTERRUPTION_FILTER_UNKNOWN;
 
     // for enabling and disabling notification pulse behavior
     private boolean mScreenOn = true;
-    private boolean mInCall = false;
+    protected boolean mInCall = false;
     private boolean mNotificationPulseEnabled;
 
-    // for generating notification tones in-call
-    private ToneGenerator mInCallToneGenerator;
-    private final Object mInCallToneGeneratorLock = new Object();
+    private Uri mInCallNotificationUri;
+    private AudioAttributes mInCallNotificationAudioAttributes;
+    private float mInCallNotificationVolume;
 
     // used as a mutex for access to all active notifications & listeners
     final Object mNotificationLock = new Object();
     @GuardedBy("mNotificationLock")
-    final ArrayList<NotificationRecord> mNotificationList =
-            new ArrayList<NotificationRecord>();
+    final ArrayList<NotificationRecord> mNotificationList = new ArrayList<>();
     @GuardedBy("mNotificationLock")
-    final ArrayMap<String, NotificationRecord> mNotificationsByKey =
-            new ArrayMap<String, NotificationRecord>();
+    final ArrayMap<String, NotificationRecord> mNotificationsByKey = new ArrayMap<>();
     @GuardedBy("mNotificationLock")
     final ArrayList<NotificationRecord> mEnqueuedNotifications = new ArrayList<>();
     @GuardedBy("mNotificationLock")
     final ArrayMap<Integer, ArrayMap<String, String>> mAutobundledSummaries = new ArrayMap<>();
-    final ArrayList<ToastRecord> mToastQueue = new ArrayList<ToastRecord>();
+    final ArrayList<ToastRecord> mToastQueue = new ArrayList<>();
     final ArrayMap<String, NotificationRecord> mSummaryByGroupKey = new ArrayMap<>();
-    final PolicyAccess mPolicyAccess = new PolicyAccess();
 
     // The last key in this list owns the hardware.
     ArrayList<String> mLights = new ArrayList<>();
@@ -343,7 +348,7 @@
 
     private final UserProfiles mUserProfiles = new UserProfiles();
     private NotificationListeners mListeners;
-    private NotificationAssistants mNotificationAssistants;
+    private NotificationAssistants mAssistants;
     private ConditionProviders mConditionProviders;
     private NotificationUsageStats mUsageStats;
 
@@ -406,14 +411,74 @@
 
     }
 
-    private void readPolicyXml(InputStream stream, boolean forRestore)
+    protected void readDefaultApprovedServices(int userId) {
+        String defaultListenerAccess = getContext().getResources().getString(
+                com.android.internal.R.string.config_defaultListenerAccessPackages);
+        if (defaultListenerAccess != null) {
+            for (String whitelisted :
+                    defaultListenerAccess.split(ManagedServices.ENABLED_SERVICES_SEPARATOR)) {
+                // Gather all notification listener components for candidate pkgs.
+                Set<ComponentName> approvedListeners =
+                        mListeners.queryPackageForServices(whitelisted,
+                                PackageManager.MATCH_DIRECT_BOOT_AWARE
+                                        | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, userId);
+                for (ComponentName cn : approvedListeners) {
+                    try {
+                        getBinderService().setNotificationListenerAccessGrantedForUser(cn,
+                                    userId, true);
+                    } catch (RemoteException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+        String defaultDndAccess = getContext().getResources().getString(
+                com.android.internal.R.string.config_defaultDndAccessPackages);
+        if (defaultListenerAccess != null) {
+            for (String whitelisted :
+                    defaultDndAccess.split(ManagedServices.ENABLED_SERVICES_SEPARATOR)) {
+                try {
+                    getBinderService().setNotificationPolicyAccessGranted(whitelisted, true);
+                } catch (RemoteException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    void readPolicyXml(InputStream stream, boolean forRestore)
             throws XmlPullParserException, NumberFormatException, IOException {
         final XmlPullParser parser = Xml.newPullParser();
         parser.setInput(stream, StandardCharsets.UTF_8.name());
+        XmlUtils.beginDocument(parser, TAG_NOTIFICATION_POLICY);
+        boolean migratedManagedServices = false;
+        int outerDepth = parser.getDepth();
+        while (XmlUtils.nextElementWithin(parser, outerDepth)) {
+            if (ZenModeConfig.ZEN_TAG.equals(parser.getName())) {
+                mZenModeHelper.readXml(parser, forRestore);
+            } else if (RankingHelper.TAG_RANKING.equals(parser.getName())){
+                mRankingHelper.readXml(parser, forRestore);
+            }
+            // No non-system managed services are allowed on low ram devices
+            if (!ActivityManager.isLowRamDeviceStatic()) {
+                if (mListeners.getConfig().xmlTag.equals(parser.getName())) {
+                    mListeners.readXml(parser);
+                    migratedManagedServices = true;
+                } else if (mAssistants.getConfig().xmlTag.equals(parser.getName())) {
+                    mAssistants.readXml(parser);
+                    migratedManagedServices = true;
+                } else if (mConditionProviders.getConfig().xmlTag.equals(parser.getName())) {
+                    mConditionProviders.readXml(parser);
+                    migratedManagedServices = true;
+                }
+            }
+        }
 
-        while (parser.next() != END_DOCUMENT) {
-            mZenModeHelper.readXml(parser, forRestore);
-            mRankingHelper.readXml(parser, forRestore);
+        if (!migratedManagedServices) {
+            mListeners.migrateToXml();
+            mAssistants.migrateToXml();
+            mConditionProviders.migrateToXml();
+            savePolicyFile();
         }
     }
 
@@ -421,12 +486,14 @@
         if (DBG) Slog.d(TAG, "loadPolicyFile");
         synchronized (mPolicyFile) {
 
-            FileInputStream infile = null;
+            InputStream infile = null;
             try {
                 infile = mPolicyFile.openRead();
                 readPolicyXml(infile, false /*forRestore*/);
             } catch (FileNotFoundException e) {
                 // No data yet
+                // Load default managed services approvals
+                readDefaultApprovedServices(UserHandle.USER_SYSTEM);
             } catch (IOException e) {
                 Log.wtf(TAG, "Unable to read notification policy", e);
             } catch (NumberFormatException e) {
@@ -474,6 +541,9 @@
         out.attribute(null, ATTR_VERSION, Integer.toString(DB_VERSION));
         mZenModeHelper.writeXml(out, forBackup);
         mRankingHelper.writeXml(out, forBackup);
+        mListeners.writeXml(out, forBackup);
+        mAssistants.writeXml(out, forBackup);
+        mConditionProviders.writeXml(out, forBackup);
         out.endTag(null, TAG_NOTIFICATION_POLICY);
         out.endDocument();
     }
@@ -488,7 +558,7 @@
     {
         final int pid;
         final String pkg;
-        final ITransientNotification callback;
+        ITransientNotification callback;
         int duration;
         Binder token;
 
@@ -505,6 +575,10 @@
             this.duration = duration;
         }
 
+        void update(ITransientNotification callback) {
+            this.callback = callback;
+        }
+
         void dump(PrintWriter pw, String prefix, DumpFilter filter) {
             if (filter != null && !filter.matches(pkg)) return;
             pw.println(prefix + this);
@@ -685,9 +759,12 @@
                 if (r != null) {
                     r.stats.onExpansionChanged(userAction, expanded);
                     final long now = System.currentTimeMillis();
-                    MetricsLogger.action(r.getLogMaker(now)
-                            .setCategory(MetricsEvent.NOTIFICATION_ITEM)
-                            .setType(MetricsEvent.TYPE_DETAIL));
+                    if (userAction) {
+                        MetricsLogger.action(r.getLogMaker(now)
+                                .setCategory(MetricsEvent.NOTIFICATION_ITEM)
+                                .setType(expanded ? MetricsEvent.TYPE_DETAIL
+                                        : MetricsEvent.TYPE_COLLAPSE));
+                    }
                     EventLogTags.writeNotificationExpansion(key,
                             userAction ? 1 : 0, expanded ? 1 : 0,
                             r.getLifespanMs(now), r.getFreshnessMs(now), r.getExposureMs(now));
@@ -729,6 +806,36 @@
         updateLightsLocked();
     }
 
+    protected final BroadcastReceiver mLocaleChangeReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (Intent.ACTION_LOCALE_CHANGED.equals(intent.getAction())) {
+                mZenModeHelper.updateDefaultZenRules();
+                mRankingHelper.onLocaleChanged(context, ActivityManager.getCurrentUser());
+            }
+        }
+    };
+
+    private final BroadcastReceiver mRestoreReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (Intent.ACTION_SETTING_RESTORED.equals(intent.getAction())) {
+                try {
+                    String element = intent.getStringExtra(Intent.EXTRA_SETTING_NAME);
+                    String newValue = intent.getStringExtra(Intent.EXTRA_SETTING_NEW_VALUE);
+                    int restoredFromSdkInt = intent.getIntExtra(
+                            Intent.EXTRA_SETTING_RESTORED_FROM_SDK_INT, 0);
+                    mListeners.onSettingRestored(
+                            element, newValue, restoredFromSdkInt, getSendingUserId());
+                    mConditionProviders.onSettingRestored(
+                            element, newValue, restoredFromSdkInt, getSendingUserId());
+                } catch (Exception e) {
+                    Slog.wtf(TAG, "Cannot restore managed services from settings", e);
+                }
+            }
+        }
+    };
+
     private final BroadcastReceiver mNotificationTimeoutReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -830,9 +937,9 @@
                         }
                     }
                 }
-                mListeners.onPackagesChanged(removingPackage, pkgList);
-                mNotificationAssistants.onPackagesChanged(removingPackage, pkgList);
-                mConditionProviders.onPackagesChanged(removingPackage, pkgList);
+                mListeners.onPackagesChanged(removingPackage, pkgList, uidList);
+                mAssistants.onPackagesChanged(removingPackage, pkgList, uidList);
+                mConditionProviders.onPackagesChanged(removingPackage, pkgList, uidList);
                 mRankingHelper.onPackagesChanged(removingPackage, changeUserId, pkgList, uidList);
                 savePolicyFile();
             }
@@ -856,30 +963,6 @@
                 mInCall = TelephonyManager.EXTRA_STATE_OFFHOOK
                         .equals(intent.getStringExtra(TelephonyManager.EXTRA_STATE));
                 updateNotificationPulse();
-                synchronized (mInCallToneGeneratorLock) {
-                    if (mInCall) {
-                        if (mInCallToneGenerator == null) {
-                            int relativeToneVolume = getContext().getResources().getInteger(
-                                    R.integer.config_inCallNotificationVolumeRelative);
-                            if (relativeToneVolume < ToneGenerator.MIN_VOLUME
-                                    || relativeToneVolume > ToneGenerator.MAX_VOLUME) {
-                                relativeToneVolume = ToneGenerator.MAX_VOLUME;
-                            }
-                            try {
-                                mInCallToneGenerator = new ToneGenerator(
-                                        AudioManager.STREAM_VOICE_CALL, relativeToneVolume);
-                            } catch (RuntimeException e) {
-                                Log.e(TAG, "Error creating local tone generator: " + e);
-                                mInCallToneGenerator = null;
-                            }
-                        }
-                    } else {
-                        if (mInCallToneGenerator != null) {
-                            mInCallToneGenerator.release();
-                            mInCallToneGenerator = null;
-                        }
-                     }
-                }
             } else if (action.equals(Intent.ACTION_USER_STOPPED)) {
                 int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
                 if (userHandle >= 0) {
@@ -896,27 +979,36 @@
                 // turn off LED when user passes through lock screen
                 mNotificationLight.turnOff();
             } else if (action.equals(Intent.ACTION_USER_SWITCHED)) {
-                final int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);
+                final int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL);
                 // reload per-user settings
                 mSettingsObserver.update(null);
                 mUserProfiles.updateCache(context);
                 // Refresh managed services
                 mConditionProviders.onUserSwitched(user);
                 mListeners.onUserSwitched(user);
-                mNotificationAssistants.onUserSwitched(user);
+                mAssistants.onUserSwitched(user);
                 mZenModeHelper.onUserSwitched(user);
             } else if (action.equals(Intent.ACTION_USER_ADDED)) {
-                mUserProfiles.updateCache(context);
+                final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL);
+                if (userId != USER_NULL) {
+                    mUserProfiles.updateCache(context);
+                    if (!mUserProfiles.isManagedProfile(userId)) {
+                        readDefaultApprovedServices(userId);
+                    }
+                }
             } else if (action.equals(Intent.ACTION_USER_REMOVED)) {
-                final int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);
+                final int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL);
                 mZenModeHelper.onUserRemoved(user);
                 mRankingHelper.onUserRemoved(user);
+                mListeners.onUserRemoved(user);
+                mConditionProviders.onUserRemoved(user);
+                mAssistants.onUserRemoved(user);
                 savePolicyFile();
             } else if (action.equals(Intent.ACTION_USER_UNLOCKED)) {
-                final int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);
+                final int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL);
                 mConditionProviders.onUserUnlocked(user);
                 mListeners.onUserUnlocked(user);
-                mNotificationAssistants.onUserUnlocked(user);
+                mAssistants.onUserUnlocked(user);
                 mZenModeHelper.onUserUnlocked(user);
             }
         }
@@ -970,7 +1062,7 @@
     }
 
     private SettingsObserver mSettingsObserver;
-    private ZenModeHelper mZenModeHelper;
+    protected ZenModeHelper mZenModeHelper;
 
     static long[] getLongArray(Resources r, int resid, int maxlen, long[] def) {
         int[] ar = r.getIntArray(resid);
@@ -1024,7 +1116,7 @@
                     count--;
                 }
                 if (posted.sbn.isGroup() && posted.getNotification().isGroupSummary()) {
-                    count --;
+                    count--;
                 }
             }
 
@@ -1032,6 +1124,13 @@
         }
     }
 
+    void clearNotifications() {
+        mEnqueuedNotifications.clear();
+        mNotificationList.clear();
+        mNotificationsByKey.clear();
+        mSummaryByGroupKey.clear();
+    }
+
     @VisibleForTesting
     void addNotification(NotificationRecord r) {
         mNotificationList.add(r);
@@ -1047,12 +1146,18 @@
     }
 
     @VisibleForTesting
+    NotificationRecord getNotificationRecord(String key) {
+        return mNotificationsByKey.get(key);
+    }
+
+
+    @VisibleForTesting
     void setSystemReady(boolean systemReady) {
         mSystemReady = systemReady;
     }
 
     @VisibleForTesting
-    void setHandler(Handler handler) {
+    void setHandler(WorkerHandler handler) {
         mHandler = handler;
     }
 
@@ -1072,6 +1177,11 @@
     }
 
     @VisibleForTesting
+    void setRankingHandler(RankingHandler rankingHandler) {
+        mRankingHandler = rankingHandler;
+    }
+
+    @VisibleForTesting
     void setIsTelevision(boolean isTelevision) {
         mIsTelevision = isTelevision;
     }
@@ -1081,17 +1191,27 @@
         mUsageStats = us;
     }
 
+    @VisibleForTesting
+    void setAccessibilityManager(AccessibilityManager am) {
+        mAccessibilityManager = am;
+    }
+
     // TODO: All tests should use this init instead of the one-off setters above.
     @VisibleForTesting
-    void init(Looper looper, IPackageManager packageManager, PackageManager packageManagerClient,
+    void init(Looper looper, IPackageManager packageManager,
+            PackageManager packageManagerClient,
             LightsManager lightsManager, NotificationListeners notificationListeners,
+            NotificationAssistants notificationAssistants, ConditionProviders conditionProviders,
             ICompanionDeviceManager companionManager, SnoozeHelper snoozeHelper,
-            NotificationUsageStats usageStats) {
+            NotificationUsageStats usageStats, AtomicFile policyFile,
+            ActivityManager activityManager, GroupHelper groupHelper) {
         Resources resources = getContext().getResources();
         mMaxPackageEnqueueRate = Settings.Global.getFloat(getContext().getContentResolver(),
                 Settings.Global.MAX_NOTIFICATION_ENQUEUE_RATE,
                 DEFAULT_MAX_NOTIFICATION_ENQUEUE_RATE);
 
+        mAccessibilityManager =
+                (AccessibilityManager) getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
         mAm = ActivityManager.getService();
         mPackageManager = packageManager;
         mPackageManagerClient = packageManagerClient;
@@ -1100,6 +1220,7 @@
         mAppUsageStats = LocalServices.getService(UsageStatsManagerInternal.class);
         mAlarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
         mCompanionManager = companionManager;
+        mActivityManager = activityManager;
 
         mHandler = new WorkerHandler(looper);
         mRankingThread.start();
@@ -1112,11 +1233,11 @@
         mUsageStats = usageStats;
         mRankingHandler = new RankingHandlerWorker(mRankingThread.getLooper());
         mRankingHelper = new RankingHelper(getContext(),
-                getContext().getPackageManager(),
+                mPackageManagerClient,
                 mRankingHandler,
                 mUsageStats,
                 extractorNames);
-        mConditionProviders = new ConditionProviders(getContext(), mHandler, mUserProfiles);
+        mConditionProviders = conditionProviders;
         mZenModeHelper = new ZenModeHelper(getContext(), mHandler.getLooper(), mConditionProviders);
         mZenModeHelper.addCallback(new ZenModeHelper.Callback() {
             @Override
@@ -1142,46 +1263,16 @@
             }
         });
         mSnoozeHelper = snoozeHelper;
-        mGroupHelper = new GroupHelper(new GroupHelper.Callback() {
-            @Override
-            public void addAutoGroup(String key) {
-                synchronized (mNotificationLock) {
-                    addAutogroupKeyLocked(key);
-                }
-                mRankingHandler.requestSort(false);
-            }
-
-            @Override
-            public void removeAutoGroup(String key) {
-                synchronized (mNotificationLock) {
-                    removeAutogroupKeyLocked(key);
-                }
-                mRankingHandler.requestSort(false);
-            }
-
-            @Override
-            public void addAutoGroupSummary(int userId, String pkg, String triggeringKey) {
-                createAutoGroupSummary(userId, pkg, triggeringKey);
-            }
-
-            @Override
-            public void removeAutoGroupSummary(int userId, String pkg) {
-                synchronized (mNotificationLock) {
-                    clearAutogroupSummaryLocked(userId, pkg);
-                }
-            }
-        });
-
-        final File systemDir = new File(Environment.getDataDirectory(), "system");
-        mPolicyFile = new AtomicFile(new File(systemDir, "notification_policy.xml"));
-
-        loadPolicyFile();
+        mGroupHelper = groupHelper;
 
         // This is a ManagedServices object that keeps track of the listeners.
         mListeners = notificationListeners;
 
         // This is a MangedServices object that keeps track of the assistant.
-        mNotificationAssistants = new NotificationAssistants();
+        mAssistants = notificationAssistants;
+
+        mPolicyFile = policyFile;
+        loadPolicyFile();
 
         mStatusBar = getLocalService(StatusBarManagerInternal.class);
         if (mStatusBar != null) {
@@ -1195,6 +1286,13 @@
                 R.array.config_notificationFallbackVibePattern,
                 VIBRATE_PATTERN_MAXLEN,
                 DEFAULT_VIBRATE_PATTERN);
+        mInCallNotificationUri = Uri.parse("file://" +
+                resources.getString(R.string.config_inCallNotificationSound));
+        mInCallNotificationAudioAttributes = new AudioAttributes.Builder()
+                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+                .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
+                .build();
+        mInCallNotificationVolume = resources.getFloat(R.dimen.config_inCallNotificationVolume);
 
         mUseAttentionLight = resources.getBoolean(R.bool.config_useAttentionLight);
 
@@ -1239,9 +1337,18 @@
             }
         }, mUserProfiles);
 
-        init(Looper.myLooper(), AppGlobals.getPackageManager(), getContext().getPackageManager(),
-                getLocalService(LightsManager.class), new NotificationListeners(),
-                null, snoozeHelper, new NotificationUsageStats(getContext()));
+        final File systemDir = new File(Environment.getDataDirectory(), "system");
+
+        init(Looper.myLooper(),
+                AppGlobals.getPackageManager(), getContext().getPackageManager(),
+                getLocalService(LightsManager.class),
+                new NotificationListeners(AppGlobals.getPackageManager()),
+                new NotificationAssistants(AppGlobals.getPackageManager()),
+                new ConditionProviders(getContext(), mUserProfiles, AppGlobals.getPackageManager()),
+                null, snoozeHelper, new NotificationUsageStats(getContext()),
+                new AtomicFile(new File(systemDir, "notification_policy.xml")),
+                (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE),
+                getGroupHelper());
 
         // register for various Intents
         IntentFilter filter = new IntentFilter();
@@ -1280,10 +1387,46 @@
         timeoutFilter.addDataScheme(SCHEME_TIMEOUT);
         getContext().registerReceiver(mNotificationTimeoutReceiver, timeoutFilter);
 
+        IntentFilter settingsRestoredFilter = new IntentFilter(Intent.ACTION_SETTING_RESTORED);
+        getContext().registerReceiver(mRestoreReceiver, settingsRestoredFilter);
+
+        IntentFilter localeChangedFilter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED);
+        getContext().registerReceiver(mLocaleChangeReceiver, localeChangedFilter);
+
         publishBinderService(Context.NOTIFICATION_SERVICE, mService);
         publishLocalService(NotificationManagerInternal.class, mInternalService);
     }
 
+    private GroupHelper getGroupHelper() {
+        return new GroupHelper(new GroupHelper.Callback() {
+            @Override
+            public void addAutoGroup(String key) {
+                synchronized (mNotificationLock) {
+                    addAutogroupKeyLocked(key);
+                }
+            }
+
+            @Override
+            public void removeAutoGroup(String key) {
+                synchronized (mNotificationLock) {
+                    removeAutogroupKeyLocked(key);
+                }
+            }
+
+            @Override
+            public void addAutoGroupSummary(int userId, String pkg, String triggeringKey) {
+                createAutoGroupSummary(userId, pkg, triggeringKey);
+            }
+
+            @Override
+            public void removeAutoGroupSummary(int userId, String pkg) {
+                synchronized (mNotificationLock) {
+                    clearAutogroupSummaryLocked(userId, pkg);
+                }
+            }
+        });
+    }
+
     private void sendRegisteredOnlyBroadcast(String action) {
         getContext().sendBroadcastAsUser(new Intent(action)
                 .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY), UserHandle.ALL, null);
@@ -1305,7 +1448,7 @@
             // bind to listener services.
             mSettingsObserver.observe();
             mListeners.onBootPhaseAppsCanStart();
-            mNotificationAssistants.onBootPhaseAppsCanStart();
+            mAssistants.onBootPhaseAppsCanStart();
             mConditionProviders.onBootPhaseAppsCanStart();
         }
     }
@@ -1335,33 +1478,29 @@
         if (channel.getImportance() == NotificationManager.IMPORTANCE_NONE) {
             // cancel
             cancelAllNotificationsInt(MY_UID, MY_PID, pkg, channel.getId(), 0, 0, true,
-                    UserHandle.getUserId(Binder.getCallingUid()), REASON_CHANNEL_BANNED,
+                    UserHandle.getUserId(uid), REASON_CHANNEL_BANNED,
                     null);
+            if (isUidSystemOrPhone(uid)) {
+                int[] profileIds = mUserProfiles.getCurrentProfileIds();
+                int N = profileIds.length;
+                for (int i = 0; i < N; i++) {
+                    int profileId = profileIds[i];
+                    cancelAllNotificationsInt(MY_UID, MY_PID, pkg, channel.getId(), 0, 0, true,
+                            profileId, REASON_CHANNEL_BANNED,
+                            null);
+                }
+            }
         }
-        mRankingHelper.updateNotificationChannel(pkg, uid, channel);
-
-        final NotificationChannel modifiedChannel =
-                mRankingHelper.getNotificationChannel(pkg, uid, channel.getId(), false);
+        mRankingHelper.updateNotificationChannel(pkg, uid, channel, true);
 
         if (!fromListener) {
+            final NotificationChannel modifiedChannel =
+                    mRankingHelper.getNotificationChannel(pkg, uid, channel.getId(), false);
             mListeners.notifyNotificationChannelChanged(
                     pkg, UserHandle.getUserHandleForUid(uid),
                     modifiedChannel, NOTIFICATION_CHANNEL_OR_GROUP_UPDATED);
         }
 
-        synchronized (mNotificationLock) {
-            final int N = mNotificationList.size();
-            for (int i = N - 1; i >= 0; --i) {
-                NotificationRecord r = mNotificationList.get(i);
-                if (r.sbn.getPackageName().equals(pkg)
-                        && r.sbn.getUid() == uid
-                        && channel.getId() != null
-                        && channel.getId().equals(r.getChannel().getId())) {
-                    r.updateNotificationChannel(modifiedChannel);
-                }
-            }
-        }
-        mRankingHandler.requestSort(true);
         savePolicyFile();
     }
 
@@ -1488,7 +1627,6 @@
                 Slog.e(TAG, "Not doing toast. pkg=" + pkg + " callback=" + callback);
                 return ;
             }
-
             final boolean isSystemToast = isCallerSystemOrPhone() || ("android".equals(pkg));
             final boolean isPackageSuspended =
                     isPackageSuspendedForUser(pkg, Binder.getCallingUid());
@@ -1508,38 +1646,28 @@
                 long callingId = Binder.clearCallingIdentity();
                 try {
                     ToastRecord record;
-                    int index = indexOfToastLocked(pkg, callback);
-                    // If it's already in the queue, we update it in place, we don't
-                    // move it to the end of the queue.
+                    int index;
+                    // All packages aside from the android package can enqueue one toast at a time
+                    if (!isSystemToast) {
+                        index = indexOfToastPackageLocked(pkg);
+                    } else {
+                        index = indexOfToastLocked(pkg, callback);
+                    }
+
+                    // If the package already has a toast, we update its toast
+                    // in the queue, we don't move it to the end of the queue.
                     if (index >= 0) {
                         record = mToastQueue.get(index);
                         record.update(duration);
+                        record.update(callback);
                     } else {
-                        // Limit the number of toasts that any given package except the android
-                        // package can enqueue.  Prevents DOS attacks and deals with leaks.
-                        if (!isSystemToast) {
-                            int count = 0;
-                            final int N = mToastQueue.size();
-                            for (int i=0; i<N; i++) {
-                                 final ToastRecord r = mToastQueue.get(i);
-                                 if (r.pkg.equals(pkg)) {
-                                     count++;
-                                     if (count >= MAX_PACKAGE_NOTIFICATIONS) {
-                                         Slog.e(TAG, "Package has already posted " + count
-                                                + " toasts. Not showing more. Package=" + pkg);
-                                         return;
-                                     }
-                                 }
-                            }
-                        }
-
                         Binder token = new Binder();
                         mWindowManagerInternal.addWindowToken(token, TYPE_TOAST, DEFAULT_DISPLAY);
                         record = new ToastRecord(callingPid, pkg, callback, duration, token);
                         mToastQueue.add(record);
                         index = mToastQueue.size() - 1;
-                        keepProcessAliveIfNeededLocked(callingPid);
                     }
+                    keepProcessAliveIfNeededLocked(callingPid);
                     // If it's at index 0, it's the current toast.  It doesn't matter if it's
                     // new or just been updated.  Call back and tell it to show itself.
                     // If the callback fails, this will remove it from the list, so don't
@@ -1847,17 +1975,20 @@
             cancelAllNotificationsInt(MY_UID, MY_PID, packageName, null, 0, 0, true,
                     UserHandle.getUserId(Binder.getCallingUid()), REASON_CHANNEL_BANNED, null);
 
+            final String[] packages = new String[] {packageName};
+            final int[] uids = new int[] {uid};
+
             // Listener & assistant
-            mListeners.onPackagesChanged(true, new String[] {packageName});
-            mNotificationAssistants.onPackagesChanged(true, new String[] {packageName});
+            mListeners.onPackagesChanged(true, packages, uids);
+            mAssistants.onPackagesChanged(true, packages, uids);
 
             // Zen
-            mConditionProviders.onPackagesChanged(true, new String[] {packageName});
+            mConditionProviders.onPackagesChanged(true, packages, uids);
 
             // Reset notification preferences
             if (!fromApp) {
-                mRankingHelper.onPackagesChanged(true, UserHandle.getCallingUserId(),
-                        new String[]{packageName}, new int[]{uid});
+                mRankingHelper.onPackagesChanged(
+                        true, UserHandle.getCallingUserId(), packages, uids);
             }
 
             savePolicyFile();
@@ -1942,9 +2073,7 @@
 
         private StatusBarNotification sanitizeSbn(String pkg, int userId,
                 StatusBarNotification sbn) {
-            if (sbn.getPackageName().equals(pkg) && sbn.getUserId() == userId
-                    && (sbn.getNotification().flags
-                    & Notification.FLAG_AUTOGROUP_SUMMARY) == 0) {
+            if (sbn.getPackageName().equals(pkg) && sbn.getUserId() == userId) {
                 // We could pass back a cloneLight() but clients might get confused and
                 // try to send this thing back to notify() again, which would not work
                 // very well.
@@ -2055,8 +2184,8 @@
             long identity = Binder.clearCallingIdentity();
             try {
                 ManagedServices manager =
-                        mNotificationAssistants.isComponentEnabledForCurrentProfiles(component)
-                        ? mNotificationAssistants
+                        mAssistants.isComponentEnabledForCurrentProfiles(component)
+                        ? mAssistants
                         : mListeners;
                 manager.setComponentState(component, true);
             } finally {
@@ -2176,7 +2305,7 @@
             try {
                 synchronized (mNotificationLock) {
                     final ManagedServiceInfo info =
-                            mNotificationAssistants.checkServiceTokenLocked(token);
+                            mAssistants.checkServiceTokenLocked(token);
                     unsnoozeNotificationInt(key, info);
                 }
             } finally {
@@ -2501,7 +2630,8 @@
             String[] packages = getContext().getPackageManager().getPackagesForUid(uid);
             final int packageCount = packages.length;
             for (int i = 0; i < packageCount; i++) {
-                if (checkPolicyAccess(packages[i])) {
+                if (mConditionProviders.isPackageOrComponentAllowed(
+                        packages[i], UserHandle.getUserId(uid))) {
                     accessAllowed = true;
                 }
             }
@@ -2524,7 +2654,8 @@
         }
 
         private boolean checkPackagePolicyAccess(String pkg) {
-            return mPolicyAccess.isPackageGranted(pkg);
+            return mConditionProviders.isPackageOrComponentAllowed(
+                    pkg, getCallingUserHandle().getIdentifier());
         }
 
         private boolean checkPolicyAccess(String pkg) {
@@ -2635,25 +2766,28 @@
         }
 
         @Override
-        public String[] getPackagesRequestingNotificationPolicyAccess()
+        public void setNotificationPolicyAccessGranted(String pkg, boolean granted)
                 throws RemoteException {
-            enforceSystemOrSystemUI("request policy access packages");
-            final long identity = Binder.clearCallingIdentity();
-            try {
-                return mPolicyAccess.getRequestingPackages();
-            } finally {
-                Binder.restoreCallingIdentity(identity);
-            }
+            setNotificationPolicyAccessGrantedForUser(
+                    pkg, getCallingUserHandle().getIdentifier(), granted);
         }
 
         @Override
-        public void setNotificationPolicyAccessGranted(String pkg, boolean granted)
-                throws RemoteException {
-            enforceSystemOrSystemUI("grant notification policy access");
+        public void setNotificationPolicyAccessGrantedForUser(
+                String pkg, int userId, boolean granted) {
+            checkCallerIsSystemOrShell();
             final long identity = Binder.clearCallingIdentity();
             try {
-                synchronized (mNotificationLock) {
-                    mPolicyAccess.put(pkg, granted);
+                if (!mActivityManager.isLowRamDevice()) {
+                    mConditionProviders.setPackageOrComponentEnabled(
+                            pkg, userId, true, granted);
+
+                    getContext().sendBroadcastAsUser(new Intent(
+                            NotificationManager.ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED)
+                                    .setPackage(pkg)
+                                    .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY),
+                            UserHandle.of(userId), null);
+                    savePolicyFile();
                 }
             } finally {
                 Binder.restoreCallingIdentity(identity);
@@ -2683,12 +2817,115 @@
         }
 
         @Override
+        public List<String> getEnabledNotificationListenerPackages() {
+            checkCallerIsSystem();
+            return mListeners.getAllowedPackages(getCallingUserHandle().getIdentifier());
+        }
+
+        @Override
+        public List<ComponentName> getEnabledNotificationListeners(int userId) {
+            checkCallerIsSystem();
+            return mListeners.getAllowedComponents(userId);
+        }
+
+        @Override
+        public boolean isNotificationListenerAccessGranted(ComponentName listener) {
+            Preconditions.checkNotNull(listener);
+            checkCallerIsSystemOrSameApp(listener.getPackageName());
+            return mListeners.isPackageOrComponentAllowed(listener.flattenToString(),
+                    getCallingUserHandle().getIdentifier());
+        }
+
+        @Override
+        public boolean isNotificationListenerAccessGrantedForUser(ComponentName listener,
+                int userId) {
+            Preconditions.checkNotNull(listener);
+            checkCallerIsSystem();
+            return mListeners.isPackageOrComponentAllowed(listener.flattenToString(),
+                    userId);
+        }
+
+        @Override
+        public boolean isNotificationAssistantAccessGranted(ComponentName assistant) {
+            Preconditions.checkNotNull(assistant);
+            checkCallerIsSystemOrSameApp(assistant.getPackageName());
+            return mAssistants.isPackageOrComponentAllowed(assistant.flattenToString(),
+                    getCallingUserHandle().getIdentifier());
+        }
+
+        @Override
+        public void setNotificationListenerAccessGranted(ComponentName listener,
+                boolean granted) throws RemoteException {
+            setNotificationListenerAccessGrantedForUser(
+                    listener, getCallingUserHandle().getIdentifier(), granted);
+        }
+
+        @Override
+        public void setNotificationAssistantAccessGranted(ComponentName assistant,
+                boolean granted) throws RemoteException {
+            setNotificationAssistantAccessGrantedForUser(
+                    assistant, getCallingUserHandle().getIdentifier(), granted);
+        }
+
+        @Override
+        public void setNotificationListenerAccessGrantedForUser(ComponentName listener, int userId,
+                boolean granted) throws RemoteException {
+            Preconditions.checkNotNull(listener);
+            checkCallerIsSystemOrShell();
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                if (!mActivityManager.isLowRamDevice()) {
+                    mConditionProviders.setPackageOrComponentEnabled(listener.flattenToString(),
+                            userId, false, granted);
+                    mListeners.setPackageOrComponentEnabled(listener.flattenToString(),
+                            userId, true, granted);
+
+                    getContext().sendBroadcastAsUser(new Intent(
+                            NotificationManager.ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED)
+                                    .setPackage(listener.getPackageName())
+                                    .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY),
+                            UserHandle.of(userId), null);
+
+                    savePolicyFile();
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public void setNotificationAssistantAccessGrantedForUser(ComponentName assistant,
+                int userId, boolean granted) throws RemoteException {
+            Preconditions.checkNotNull(assistant);
+            checkCallerIsSystemOrShell();
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                if (!mActivityManager.isLowRamDevice()) {
+                    mConditionProviders.setPackageOrComponentEnabled(assistant.flattenToString(),
+                            userId, false, granted);
+                    mAssistants.setPackageOrComponentEnabled(assistant.flattenToString(),
+                            userId, true, granted);
+
+                    getContext().sendBroadcastAsUser(new Intent(
+                            NotificationManager.ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED)
+                                    .setPackage(assistant.getPackageName())
+                                    .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY),
+                            UserHandle.of(userId), null);
+
+                    savePolicyFile();
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
         public void applyEnqueuedAdjustmentFromAssistant(INotificationListener token,
                 Adjustment adjustment) throws RemoteException {
             final long identity = Binder.clearCallingIdentity();
             try {
                 synchronized (mNotificationLock) {
-                    mNotificationAssistants.checkServiceTokenLocked(token);
+                    mAssistants.checkServiceTokenLocked(token);
                     int N = mEnqueuedNotifications.size();
                     for (int i = 0; i < N; i++) {
                         final NotificationRecord n = mEnqueuedNotifications.get(i);
@@ -2710,11 +2947,11 @@
             final long identity = Binder.clearCallingIdentity();
             try {
                 synchronized (mNotificationLock) {
-                    mNotificationAssistants.checkServiceTokenLocked(token);
+                    mAssistants.checkServiceTokenLocked(token);
                     NotificationRecord n = mNotificationsByKey.get(adjustment.getKey());
                     applyAdjustment(n, adjustment);
                 }
-                mRankingHandler.requestSort(true);
+                mRankingHandler.requestSort();
             } finally {
                 Binder.restoreCallingIdentity(identity);
             }
@@ -2727,13 +2964,13 @@
             final long identity = Binder.clearCallingIdentity();
             try {
                 synchronized (mNotificationLock) {
-                    mNotificationAssistants.checkServiceTokenLocked(token);
+                    mAssistants.checkServiceTokenLocked(token);
                     for (Adjustment adjustment : adjustments) {
                         NotificationRecord n = mNotificationsByKey.get(adjustment.getKey());
                         applyAdjustment(n, adjustment);
                     }
                 }
-                mRankingHandler.requestSort(true);
+                mRankingHandler.requestSort();
             } finally {
                 Binder.restoreCallingIdentity(identity);
             }
@@ -2798,41 +3035,57 @@
             }
             return uid;
         }
+
+        @Override
+        public void onShellCommand(FileDescriptor in, FileDescriptor out, FileDescriptor err,
+                String[] args, ShellCallback callback, ResultReceiver resultReceiver)
+                throws RemoteException {
+            new ShellCmd().exec(this, in, out, err, args, callback, resultReceiver);
+        }
     };
 
-    private void applyAdjustment(NotificationRecord n, Adjustment adjustment) {
-        if (n == null) {
+    private void applyAdjustment(NotificationRecord r, Adjustment adjustment) {
+        if (r == null) {
             return;
         }
         if (adjustment.getSignals() != null) {
             Bundle.setDefusable(adjustment.getSignals(), true);
-            final ArrayList<String> people =
-                    adjustment.getSignals().getStringArrayList(Adjustment.KEY_PEOPLE);
-            final ArrayList<SnoozeCriterion> snoozeCriterionList =
-                    adjustment.getSignals().getParcelableArrayList(Adjustment.KEY_SNOOZE_CRITERIA);
-            n.setPeopleOverride(people);
-            n.setSnoozeCriteria(snoozeCriterionList);
+            r.addAdjustment(adjustment);
         }
     }
 
     @GuardedBy("mNotificationLock")
-    private void addAutogroupKeyLocked(String key) {
-        NotificationRecord n = mNotificationsByKey.get(key);
-        if (n == null) {
+    void addAutogroupKeyLocked(String key) {
+        NotificationRecord r = mNotificationsByKey.get(key);
+        if (r == null) {
             return;
         }
-        n.setOverrideGroupKey(GroupHelper.AUTOGROUP_KEY);
-        EventLogTags.writeNotificationAutogrouped(key);
+        if (r.sbn.getOverrideGroupKey() == null) {
+            addAutoGroupAdjustment(r, GroupHelper.AUTOGROUP_KEY);
+            EventLogTags.writeNotificationAutogrouped(key);
+            mRankingHandler.requestSort();
+        }
     }
 
     @GuardedBy("mNotificationLock")
-    private void removeAutogroupKeyLocked(String key) {
-        NotificationRecord n = mNotificationsByKey.get(key);
-        if (n == null) {
+    void removeAutogroupKeyLocked(String key) {
+        NotificationRecord r = mNotificationsByKey.get(key);
+        if (r == null) {
             return;
         }
-        n.setOverrideGroupKey(null);
-        EventLogTags.writeNotificationUnautogrouped(key);
+        if (r.sbn.getOverrideGroupKey() != null) {
+            addAutoGroupAdjustment(r, null);
+            EventLogTags.writeNotificationUnautogrouped(key);
+            mRankingHandler.requestSort();
+        }
+    }
+
+    private void addAutoGroupAdjustment(NotificationRecord r, String overrideGroupKey) {
+        Bundle signals = new Bundle();
+        signals.putString(Adjustment.KEY_GROUP_KEY, overrideGroupKey);
+        Adjustment adjustment =
+                new Adjustment(r.sbn.getPackageName(), r.getKey(), signals, "", r.sbn.getUserId());
+        r.addAdjustment(adjustment);
     }
 
     // Clears the 'fake' auto-group summary.
@@ -2844,11 +3097,17 @@
             final NotificationRecord removed = findNotificationByKeyLocked(summaries.remove(pkg));
             if (removed != null) {
                 boolean wasPosted = removeFromNotificationListsLocked(removed);
-                cancelNotificationLocked(removed, false, REASON_UNAUTOBUNDLED, wasPosted);
+                cancelNotificationLocked(removed, false, REASON_UNAUTOBUNDLED, wasPosted, null);
             }
         }
     }
 
+    @GuardedBy("mNotificationLock")
+    private boolean hasAutoGroupSummaryLocked(StatusBarNotification sbn) {
+        ArrayMap<String, String> summaries = mAutobundledSummaries.get(sbn.getUserId());
+        return summaries != null && summaries.containsKey(sbn.getPackageName());
+    }
+
     // Posts a 'fake' summary for a package that has exceeded the solo-notification limit.
     private void createAutoGroupSummary(int userId, String pkg, String triggeringKey) {
         NotificationRecord summaryRecord = null;
@@ -2905,7 +3164,7 @@
             }
         }
         if (summaryRecord != null && checkDisqualifyingFeatures(userId, MY_UID,
-                summaryRecord.sbn.getId(), summaryRecord.sbn.getTag(), summaryRecord)) {
+                summaryRecord.sbn.getId(), summaryRecord.sbn.getTag(), summaryRecord, true)) {
             mHandler.post(new EnqueueNotificationRunnable(userId, summaryRecord));
         }
     }
@@ -3095,7 +3354,7 @@
                 }
                 pw.println(')');
                 pw.println("\n  Notification assistant services:");
-                mNotificationAssistants.dump(pw, filter);
+                mAssistants.dump(pw, filter);
             }
 
             if (!filter.filtered || zenOnly) {
@@ -3107,9 +3366,6 @@
                 ZenLog.dump(pw, "    ");
             }
 
-            pw.println("\n  Policy access:");
-            pw.print("    mPolicyAccess: "); pw.println(mPolicyAccess);
-
             pw.println("\n  Condition providers:");
             mConditionProviders.dump(pw, filter);
 
@@ -3135,6 +3391,12 @@
      */
     private final NotificationManagerInternal mInternalService = new NotificationManagerInternal() {
         @Override
+        public NotificationChannel getNotificationChannel(String pkg, int uid, String
+                channelId) {
+            return mRankingHelper.getNotificationChannel(pkg, uid, channelId, false);
+        }
+
+        @Override
         public void enqueueNotification(String pkg, String opPkg, int callingUid, int callingPid,
                 String tag, int id, Notification notification, int userId) {
             enqueueNotificationInternal(pkg, opPkg, callingUid, callingPid, tag, id, notification,
@@ -3176,7 +3438,6 @@
                     (r.mOriginalFlags & ~Notification.FLAG_FOREGROUND_SERVICE);
             mRankingHelper.sort(mNotificationList);
             mListeners.notifyPostedLocked(sbn, sbn /* oldSbn */);
-            mGroupHelper.onNotificationPosted(sbn);
         }
     };
 
@@ -3208,9 +3469,9 @@
                     (userId == UserHandle.USER_ALL) ? UserHandle.USER_SYSTEM : userId);
             Notification.addFieldsFromContext(ai, notification);
 
-            boolean canColorize = PERMISSION_GRANTED == mPackageManagerClient.checkPermission(
-                    "com.android.permission.USE_COLORIZED_NOTIFICATIONS", pkg);
-            if (canColorize) {
+            int canColorize = mPackageManagerClient.checkPermission(
+                    android.Manifest.permission.USE_COLORIZED_NOTIFICATIONS, pkg);
+            if (canColorize == PERMISSION_GRANTED) {
                 notification.flags |= Notification.FLAG_CAN_COLORIZE;
             } else {
                 notification.flags &= ~Notification.FLAG_CAN_COLORIZE;
@@ -3254,7 +3515,23 @@
                 user, null, System.currentTimeMillis());
         final NotificationRecord r = new NotificationRecord(getContext(), n, channel);
 
-        if (!checkDisqualifyingFeatures(userId, notificationUid, id, tag, r)) {
+        if ((notification.flags & Notification.FLAG_FOREGROUND_SERVICE) != 0
+                && (channel.getUserLockedFields() & NotificationChannel.USER_LOCKED_IMPORTANCE) == 0
+                && (r.getImportance() == IMPORTANCE_MIN || r.getImportance() == IMPORTANCE_NONE)) {
+            // Increase the importance of foreground service notifications unless the user had an
+            // opinion otherwise
+            if (TextUtils.isEmpty(channelId)
+                    || NotificationChannel.DEFAULT_CHANNEL_ID.equals(channelId)) {
+                r.setImportance(IMPORTANCE_LOW, "Bumped for foreground service");
+            } else {
+                channel.setImportance(IMPORTANCE_LOW);
+                mRankingHelper.updateNotificationChannel(pkg, notificationUid, channel, false);
+                r.updateNotificationChannel(channel);
+            }
+        }
+
+        if (!checkDisqualifyingFeatures(userId, notificationUid, id, tag, r,
+                r.sbn.getOverrideGroupKey() != null)) {
             return;
         }
 
@@ -3309,7 +3586,7 @@
      * Has side effects.
      */
     private boolean checkDisqualifyingFeatures(int userId, int callingUid, int id, String tag,
-            NotificationRecord r) {
+            NotificationRecord r, boolean isAutogroup) {
         final String pkg = r.sbn.getPackageName();
         final String dialerPackage =
                 getContext().getSystemService(TelecomManager.class).getSystemDialerPackage();
@@ -3333,7 +3610,8 @@
 
                 // rate limit updates that aren't completed progress notifications
                 if (mNotificationsByKey.get(r.sbn.getKey()) != null
-                        && !r.getNotification().hasCompletedProgress()) {
+                        && !r.getNotification().hasCompletedProgress()
+                        && !isAutogroup) {
 
                     final float appEnqueueRate = mUsageStats.getAppEnqueueRate(pkg);
                     if (appEnqueueRate > mMaxPackageEnqueueRate) {
@@ -3341,7 +3619,7 @@
                         final long now = SystemClock.elapsedRealtime();
                         if ((now - mLastOverRateLogTime) > MIN_PACKAGE_OVERRATE_LOG_INTERVAL) {
                             Slog.e(TAG, "Package enqueue rate is " + appEnqueueRate
-                                    + ". Shedding events. package=" + pkg);
+                                    + ". Shedding " + r.sbn.getKey() + ". package=" + pkg);
                             mLastOverRateLogTime = now;
                         }
                         return false;
@@ -3487,13 +3765,15 @@
             MetricsLogger.action(r.getLogMaker()
                     .setCategory(MetricsEvent.NOTIFICATION_SNOOZED)
                     .setType(MetricsEvent.TYPE_CLOSE)
+                    .addTaggedData(MetricsEvent.FIELD_NOTIFICATION_SNOOZE_DURATION_MS,
+                            mDuration)
                     .addTaggedData(MetricsEvent.NOTIFICATION_SNOOZED_CRITERIA,
                             mSnoozeCriterionId == null ? 0 : 1));
             boolean wasPosted = removeFromNotificationListsLocked(r);
-            cancelNotificationLocked(r, false, REASON_SNOOZED, wasPosted);
+            cancelNotificationLocked(r, false, REASON_SNOOZED, wasPosted, null);
             updateLightsLocked();
             if (mSnoozeCriterionId != null) {
-                mNotificationAssistants.notifyAssistantSnoozedLocked(r.sbn, mSnoozeCriterionId);
+                mAssistants.notifyAssistantSnoozedLocked(r.sbn, mSnoozeCriterionId);
                 mSnoozeHelper.snooze(r);
             } else {
                 mSnoozeHelper.snooze(r, mDuration);
@@ -3557,8 +3837,8 @@
                 mRankingHelper.extractSignals(r);
 
                 // tell the assistant service about the notification
-                if (mNotificationAssistants.isEnabled()) {
-                    mNotificationAssistants.onNotificationEnqueued(r);
+                if (mAssistants.isEnabled()) {
+                    mAssistants.onNotificationEnqueued(r);
                     mHandler.postDelayed(new PostNotificationRunnable(r.getKey()),
                             DELAY_FOR_ASSISTANT_TIME);
                 } else {
@@ -3624,12 +3904,15 @@
                     if (notification.getSmallIcon() != null) {
                         StatusBarNotification oldSbn = (old != null) ? old.sbn : null;
                         mListeners.notifyPostedLocked(n, oldSbn);
-                        mHandler.post(new Runnable() {
-                            @Override
-                            public void run() {
-                                mGroupHelper.onNotificationPosted(n);
-                            }
-                        });
+                        if (oldSbn == null || !Objects.equals(oldSbn.getGroup(), n.getGroup())) {
+                            mHandler.post(new Runnable() {
+                                @Override
+                                public void run() {
+                                    mGroupHelper.onNotificationPosted(
+                                            n, hasAutoGroupSummaryLocked(n));
+                                }
+                            });
+                        }
                     } else {
                         Slog.e(TAG, "Not posting notification without small icon: " + notification);
                         if (old != null && !old.isCanceled) {
@@ -3708,7 +3991,8 @@
         // notification was a summary and the new one isn't, or when the old
         // notification was a summary and its group key changed.
         if (oldIsSummary && (!isSummary || !oldGroup.equals(group))) {
-            cancelGroupChildrenLocked(old, callingUid, callingPid, null, false /* sendDelete */);
+            cancelGroupChildrenLocked(old, callingUid, callingPid, null, false /* sendDelete */,
+                    null);
         }
     }
 
@@ -3749,33 +4033,37 @@
         // These are set inside the conditional if the notification is allowed to make noise.
         boolean hasValidVibrate = false;
         boolean hasValidSound = false;
+        boolean sentAccessibilityEvent = false;
+        // If the notification will appear in the status bar, it should send an accessibility
+        // event
+        if (!record.isUpdate && record.getImportance() > IMPORTANCE_MIN) {
+            sendAccessibilityEvent(notification, record.sbn.getPackageName());
+            sentAccessibilityEvent = true;
+        }
 
-        if (isNotificationForCurrentUser(record)) {
-            // If the notification icon will appear in the status bar, AND it hasn't been blocked
-            // by do-not-disturb, it should generate an accessibility event
-            if (!record.isUpdate
-                    && !record.isIntercepted()
-                    && record.getImportance() > IMPORTANCE_MIN) {
-                sendAccessibilityEvent(notification, record.sbn.getPackageName());
-            }
-            if (aboveThreshold && mSystemReady && mAudioManager != null) {
-                // this notification wants to make noise & is allowed to make noise
+        if (aboveThreshold && isNotificationForCurrentUser(record)) {
+
+            if (mSystemReady && mAudioManager != null) {
                 Uri soundUri = record.getSound();
                 hasValidSound = soundUri != null && !Uri.EMPTY.equals(soundUri);
-
                 long[] vibration = record.getVibration();
                 // Demote sound to vibration if vibration missing & phone in vibration mode.
                 if (vibration == null
                         && hasValidSound
                         && (mAudioManager.getRingerModeInternal()
-                        == AudioManager.RINGER_MODE_VIBRATE)) {
+                        == AudioManager.RINGER_MODE_VIBRATE)
+                        && mAudioManager.getStreamVolume(
+                        AudioAttributes.toLegacyStreamType(record.getAudioAttributes())) == 0) {
                     vibration = mFallbackVibrationPattern;
                 }
                 hasValidVibrate = vibration != null;
 
                 boolean hasAudibleAlert = hasValidSound || hasValidVibrate;
-
                 if (hasAudibleAlert && !shouldMuteNotificationLocked(record)) {
+                    if (!sentAccessibilityEvent) {
+                        sendAccessibilityEvent(notification, record.sbn.getPackageName());
+                        sentAccessibilityEvent = true;
+                    }
                     if (DBG) Slog.v(TAG, "Interrupting!");
                     if (hasValidSound) {
                         mSoundNotificationKey = key;
@@ -3871,8 +4159,9 @@
         boolean looping = (record.getNotification().flags & Notification.FLAG_INSISTENT) != 0;
         // do not play notifications if there is a user of exclusive audio focus
         // or the device is in vibrate mode
-        if (!mAudioManager.isAudioFocusExclusive() && mAudioManager.getRingerModeInternal()
-                != AudioManager.RINGER_MODE_VIBRATE) {
+        if (!mAudioManager.isAudioFocusExclusive() && (mAudioManager.getRingerModeInternal()
+                != AudioManager.RINGER_MODE_VIBRATE || mAudioManager.getStreamVolume(
+                AudioAttributes.toLegacyStreamType(record.getAudioAttributes())) != 0)) {
             final long identity = Binder.clearCallingIdentity();
             try {
                 final IRingtonePlayer player = mAudioManager.getRingtonePlayer();
@@ -3944,21 +4233,21 @@
                 mUserProfiles.isCurrentProfile(record.getUserId()));
     }
 
-    private void playInCallNotification() {
+    protected void playInCallNotification() {
         new Thread() {
             @Override
             public void run() {
-                // If toneGenerator creation fails, just continue the call
-                // without playing the notification sound.
+                final long identity = Binder.clearCallingIdentity();
                 try {
-                    synchronized (mInCallToneGeneratorLock) {
-                        if (mInCallToneGenerator != null) {
-                            // limit this tone to 1 second; BEEP2 should in fact be much shorter
-                            mInCallToneGenerator.startTone(ToneGenerator.TONE_PROP_BEEP2, 1000);
-                        }
+                    final IRingtonePlayer player = mAudioManager.getRingtonePlayer();
+                    if (player != null) {
+                        player.play(new Binder(), mInCallNotificationUri,
+                                mInCallNotificationAudioAttributes,
+                                mInCallNotificationVolume, false);
                     }
-                } catch (RuntimeException e) {
-                    Log.w(TAG, "Exception from ToneGenerator: " + e);
+                } catch (RemoteException e) {
+                } finally {
+                    Binder.restoreCallingIdentity(identity);
                 }
             }
         }.start();
@@ -4043,7 +4332,21 @@
         int len = list.size();
         for (int i=0; i<len; i++) {
             ToastRecord r = list.get(i);
-            if (r.pkg.equals(pkg) && r.callback.asBinder() == cbak) {
+            if (r.pkg.equals(pkg) && r.callback.asBinder().equals(cbak)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    @GuardedBy("mToastQueue")
+    int indexOfToastPackageLocked(String pkg)
+    {
+        ArrayList<ToastRecord> list = mToastQueue;
+        int len = list.size();
+        for (int i=0; i<len; i++) {
+            ToastRecord r = list.get(i);
+            if (r.pkg.equals(pkg)) {
                 return i;
             }
         }
@@ -4098,39 +4401,44 @@
             }
         }
         if (changed) {
-            scheduleSendRankingUpdate();
+            mHandler.scheduleSendRankingUpdate();
         }
     }
 
-    private void handleRankingSort(Message msg) {
-        if (!(msg.obj instanceof Boolean)) return;
+    void handleRankingSort() {
         if (mRankingHelper == null) return;
-        boolean forceUpdate = ((Boolean) msg.obj == null) ? false : (boolean) msg.obj;
         synchronized (mNotificationLock) {
             final int N = mNotificationList.size();
-            // Any field that can change via one of the extractors or by the assistant
-            // needs to be added here.
-            ArrayList<String> orderBefore = new ArrayList<String>(N);
-            ArrayList<String> groupOverrideBefore = new ArrayList<>(N);
+            // Any field that can change via one of the extractors needs to be added here.
+            ArrayList<String> orderBefore = new ArrayList<>(N);
             int[] visibilities = new int[N];
             boolean[] showBadges = new boolean[N];
+            ArrayList<NotificationChannel> channelBefore = new ArrayList<>(N);
+            ArrayList<String> groupKeyBefore = new ArrayList<>(N);
+            ArrayList<ArrayList<String>> overridePeopleBefore = new ArrayList<>(N);
+            ArrayList<ArrayList<SnoozeCriterion>> snoozeCriteriaBefore = new ArrayList<>(N);
             for (int i = 0; i < N; i++) {
                 final NotificationRecord r = mNotificationList.get(i);
                 orderBefore.add(r.getKey());
-                groupOverrideBefore.add(r.sbn.getGroupKey());
                 visibilities[i] = r.getPackageVisibilityOverride();
                 showBadges[i] = r.canShowBadge();
+                channelBefore.add(r.getChannel());
+                groupKeyBefore.add(r.getGroupKey());
+                overridePeopleBefore.add(r.getPeopleOverride());
+                snoozeCriteriaBefore.add(r.getSnoozeCriteria());
                 mRankingHelper.extractSignals(r);
             }
             mRankingHelper.sort(mNotificationList);
             for (int i = 0; i < N; i++) {
                 final NotificationRecord r = mNotificationList.get(i);
-                if (forceUpdate
-                        || !orderBefore.get(i).equals(r.getKey())
+                if (!orderBefore.get(i).equals(r.getKey())
                         || visibilities[i] != r.getPackageVisibilityOverride()
-                        || !groupOverrideBefore.get(i).equals(r.sbn.getGroupKey())
-                        || showBadges[i] != r.canShowBadge()) {
-                    scheduleSendRankingUpdate();
+                        || showBadges[i] != r.canShowBadge()
+                        || !Objects.equals(channelBefore.get(i), r.getChannel())
+                        || !Objects.equals(groupKeyBefore.get(i), r.getGroupKey())
+                        || !Objects.equals(overridePeopleBefore.get(i), r.getPeopleOverride())
+                        || !Objects.equals(snoozeCriteriaBefore.get(i), r.getSnoozeCriteria())) {
+                    mHandler.scheduleSendRankingUpdate();
                     return;
                 }
             }
@@ -4164,13 +4472,6 @@
         return mRankingHelper.indexOf(mNotificationList, target);
     }
 
-    private void scheduleSendRankingUpdate() {
-        if (!mHandler.hasMessages(MESSAGE_SEND_RANKING_UPDATE)) {
-            Message m = Message.obtain(mHandler, MESSAGE_SEND_RANKING_UPDATE);
-            mHandler.sendMessage(m);
-        }
-    }
-
     private void handleSendRankingUpdate() {
         synchronized (mNotificationLock) {
             mListeners.notifyRankingUpdateLocked();
@@ -4202,7 +4503,7 @@
         }
     }
 
-    private final class WorkerHandler extends Handler
+    protected class WorkerHandler extends Handler
     {
         public WorkerHandler(Looper looper) {
             super(looper);
@@ -4231,6 +4532,13 @@
             }
         }
 
+        protected void scheduleSendRankingUpdate() {
+            if (!hasMessages(MESSAGE_SEND_RANKING_UPDATE)) {
+                Message m = Message.obtain(this, MESSAGE_SEND_RANKING_UPDATE);
+                sendMessage(m);
+            }
+        }
+
     }
 
     private final class RankingHandlerWorker extends Handler implements RankingHandler
@@ -4246,16 +4554,15 @@
                     handleRankingReconsideration(msg);
                     break;
                 case MESSAGE_RANKING_SORT:
-                    handleRankingSort(msg);
+                    handleRankingSort();
                     break;
             }
         }
 
-        public void requestSort(boolean forceUpdate) {
+        public void requestSort() {
             removeMessages(MESSAGE_RANKING_SORT);
             Message msg = Message.obtain();
             msg.what = MESSAGE_RANKING_SORT;
-            msg.obj = forceUpdate;
             sendMessage(msg);
         }
 
@@ -4273,11 +4580,8 @@
         return (x < low) ? low : ((x > high) ? high : x);
     }
 
-    @VisibleForTesting
     void sendAccessibilityEvent(Notification notification, CharSequence packageName) {
-        final AccessibilityManager accessibilityManager
-                = AccessibilityManager.getInstance(getContext());
-        if (accessibilityManager == null || !accessibilityManager.isEnabled()) {
+        if (!mAccessibilityManager.isEnabled()) {
             return;
         }
 
@@ -4291,7 +4595,7 @@
             event.getText().add(tickerText);
         }
 
-        accessibilityManager.sendAccessibilityEvent(event);
+        mAccessibilityManager.sendAccessibilityEvent(event);
     }
 
     /**
@@ -4319,7 +4623,7 @@
 
     @GuardedBy("mNotificationLock")
     private void cancelNotificationLocked(NotificationRecord r, boolean sendDelete, int reason,
-            boolean wasPosted) {
+            boolean wasPosted, String listenerName) {
         final String canceledKey = r.getKey();
 
         // Record caller.
@@ -4419,7 +4723,7 @@
                 .setType(MetricsEvent.TYPE_DISMISS)
                 .setSubtype(reason));
         EventLogTags.writeNotificationCanceled(canceledKey, reason,
-                r.getLifespanMs(now), r.getFreshnessMs(now), r.getExposureMs(now));
+                r.getLifespanMs(now), r.getFreshnessMs(now), r.getExposureMs(now), listenerName);
     }
 
     /**
@@ -4469,9 +4773,9 @@
 
                         // Cancel the notification.
                         boolean wasPosted = removeFromNotificationListsLocked(r);
-                        cancelNotificationLocked(r, sendDelete, reason, wasPosted);
+                        cancelNotificationLocked(r, sendDelete, reason, wasPosted, listenerName);
                         cancelGroupChildrenLocked(r, callingUid, callingPid, listenerName,
-                                sendDelete);
+                                sendDelete, null);
                         updateLightsLocked();
                     } else {
                         // No notification was found, assume that it is snoozed and cancel it.
@@ -4542,7 +4846,6 @@
                         }
                         return true;
                     };
-
                     cancelAllNotificationsByListLocked(mNotificationList, callingUid, callingPid,
                             pkg, true /*nullPkgIndicatesUserSwitch*/, channelId, flagChecker,
                             false /*includeCurrentProfiles*/, userId, false /*sendDelete*/, reason,
@@ -4590,20 +4893,19 @@
             if (channelId != null && !channelId.equals(r.getChannel().getId())) {
                 continue;
             }
-
             if (canceledNotifications == null) {
                 canceledNotifications = new ArrayList<>();
             }
             notificationList.remove(i);
             mNotificationsByKey.remove(r.getKey());
             canceledNotifications.add(r);
-            cancelNotificationLocked(r, sendDelete, reason, wasPosted);
+            cancelNotificationLocked(r, sendDelete, reason, wasPosted, listenerName);
         }
         if (canceledNotifications != null) {
             final int M = canceledNotifications.size();
             for (int i = 0; i < M; i++) {
                 cancelGroupChildrenLocked(canceledNotifications.get(i), callingUid, callingPid,
-                        listenerName, false /* sendDelete */);
+                        listenerName, false /* sendDelete */, flagChecker);
             }
             updateLightsLocked();
         }
@@ -4670,7 +4972,7 @@
     // Warning: The caller is responsible for invoking updateLightsLocked().
     @GuardedBy("mNotificationLock")
     private void cancelGroupChildrenLocked(NotificationRecord r, int callingUid, int callingPid,
-            String listenerName, boolean sendDelete) {
+            String listenerName, boolean sendDelete, FlagChecker flagChecker) {
         Notification n = r.getNotification();
         if (!n.isGroupSummary()) {
             return;
@@ -4684,15 +4986,15 @@
         }
 
         cancelGroupChildrenByListLocked(mNotificationList, r, callingUid, callingPid, listenerName,
-                sendDelete, true);
+                sendDelete, true, flagChecker);
         cancelGroupChildrenByListLocked(mEnqueuedNotifications, r, callingUid, callingPid,
-                listenerName, sendDelete, false);
+                listenerName, sendDelete, false, flagChecker);
     }
 
     @GuardedBy("mNotificationLock")
     private void cancelGroupChildrenByListLocked(ArrayList<NotificationRecord> notificationList,
             NotificationRecord parentNotification, int callingUid, int callingPid,
-            String listenerName, boolean sendDelete, boolean wasPosted) {
+            String listenerName, boolean sendDelete, boolean wasPosted, FlagChecker flagChecker) {
         final String pkg = parentNotification.sbn.getPackageName();
         final int userId = parentNotification.getUserId();
         final int reason = REASON_GROUP_SUMMARY_CANCELED;
@@ -4701,12 +5003,13 @@
             final StatusBarNotification childSbn = childR.sbn;
             if ((childSbn.isGroup() && !childSbn.getNotification().isGroupSummary()) &&
                     childR.getGroupKey().equals(parentNotification.getGroupKey())
-                    && (childR.getFlags() & Notification.FLAG_FOREGROUND_SERVICE) == 0) {
+                    && (childR.getFlags() & Notification.FLAG_FOREGROUND_SERVICE) == 0
+                    && (flagChecker == null || flagChecker.apply(childR.getFlags()))) {
                 EventLogTags.writeNotificationCancel(callingUid, callingPid, pkg, childSbn.getId(),
                         childSbn.getTag(), userId, 0, 0, reason, listenerName);
                 notificationList.remove(i);
                 mNotificationsByKey.remove(childR.getKey());
-                cancelNotificationLocked(childR, sendDelete, reason, wasPosted);
+                cancelNotificationLocked(childR, sendDelete, reason, wasPosted, listenerName);
             }
         }
     }
@@ -4850,6 +5153,13 @@
         return isUidSystemOrPhone(Binder.getCallingUid());
     }
 
+    private void checkCallerIsSystemOrShell() {
+        if (Binder.getCallingUid() == Process.SHELL_UID) {
+            return;
+        }
+        checkCallerIsSystem();
+    }
+
     private void checkCallerIsSystem() {
         if (isCallerSystemOrPhone()) {
             return;
@@ -5055,9 +5365,10 @@
     }
 
     public class NotificationAssistants extends ManagedServices {
+        static final String TAG_ENABLED_NOTIFICATION_ASSISTANTS = "enabled_assistants";
 
-        public NotificationAssistants() {
-            super(getContext(), mHandler, mNotificationLock, mUserProfiles);
+        public NotificationAssistants(IPackageManager pm) {
+            super(getContext(), mNotificationLock, mUserProfiles, pm);
         }
 
         @Override
@@ -5065,6 +5376,7 @@
             Config c = new Config();
             c.caption = "notification assistant service";
             c.serviceInterface = NotificationAssistantService.SERVICE_INTERFACE;
+            c.xmlTag = TAG_ENABLED_NOTIFICATION_ASSISTANTS;
             c.secureSettingName = Settings.Secure.ENABLED_NOTIFICATION_ASSISTANT;
             c.bindPermission = Manifest.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE;
             c.settingsAction = Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS;
@@ -5162,11 +5474,13 @@
     }
 
     public class NotificationListeners extends ManagedServices {
+        static final String TAG_ENABLED_NOTIFICATION_LISTENERS = "enabled_listeners";
 
         private final ArraySet<ManagedServiceInfo> mLightTrimListeners = new ArraySet<>();
 
-        public NotificationListeners() {
-            super(getContext(), mHandler, mNotificationLock, mUserProfiles);
+        public NotificationListeners(IPackageManager pm) {
+            super(getContext(), mNotificationLock, mUserProfiles, pm);
+
         }
 
         @Override
@@ -5174,6 +5488,7 @@
             Config c = new Config();
             c.caption = "notification listener";
             c.serviceInterface = NotificationListenerService.SERVICE_INTERFACE;
+            c.xmlTag = TAG_ENABLED_NOTIFICATION_LISTENERS;
             c.secureSettingName = Settings.Secure.ENABLED_NOTIFICATION_LISTENERS;
             c.bindPermission = android.Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE;
             c.settingsAction = Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS;
@@ -5352,13 +5667,10 @@
                     continue;
                 }
 
-                mHandler.post(new Runnable() {
-                    @Override
-                    public void run() {
-                        if (hasCompanionDevice(serviceInfo)) {
-                            notifyNotificationChannelChanged(
-                                    serviceInfo, pkg, user, channel, modificationType);
-                        }
+                BackgroundThread.getHandler().post(() -> {
+                    if (hasCompanionDevice(serviceInfo)) {
+                        notifyNotificationChannelChanged(
+                                serviceInfo, pkg, user, channel, modificationType);
                     }
                 });
             }
@@ -5375,13 +5687,10 @@
                     continue;
                 }
 
-                mHandler.post(new Runnable() {
-                    @Override
-                    public void run() {
-                        if (hasCompanionDevice(serviceInfo)) {
-                            notifyNotificationChannelGroupChanged(
-                                    serviceInfo, pkg, user, group, modificationType);
-                        }
+                BackgroundThread.getHandler().post(() -> {
+                    if (hasCompanionDevice(serviceInfo)) {
+                        notifyNotificationChannelGroupChanged(
+                                serviceInfo, pkg, user, group, modificationType);
                     }
                 });
             }
@@ -5566,78 +5875,96 @@
         }
     }
 
-    private final class PolicyAccess {
-        private static final String SEPARATOR = ":";
-        private final String[] PERM = {
-            android.Manifest.permission.ACCESS_NOTIFICATION_POLICY
-        };
+    private class ShellCmd extends ShellCommand {
+        public static final String USAGE = "help\n"
+                + "allow_listener COMPONENT [user_id]\n"
+                + "disallow_listener COMPONENT [user_id]\n"
+                + "set_assistant COMPONENT\n"
+                + "remove_assistant COMPONENT\n"
+                + "allow_dnd PACKAGE\n"
+                + "disallow_dnd PACKAGE";
 
-        public boolean isPackageGranted(String pkg) {
-            return pkg != null && getGrantedPackages().contains(pkg);
-        }
-
-        public void put(String pkg, boolean granted) {
-            if (pkg == null) return;
-            final ArraySet<String> pkgs = getGrantedPackages();
-            boolean changed;
-            if (granted) {
-                changed = pkgs.add(pkg);
-            } else {
-                changed = pkgs.remove(pkg);
+        @Override
+        public int onCommand(String cmd) {
+            if (cmd == null) {
+                return handleDefaultCommands(cmd);
             }
-            if (!changed) return;
-            final String setting = TextUtils.join(SEPARATOR, pkgs);
-            final int currentUser = ActivityManager.getCurrentUser();
-            Settings.Secure.putStringForUser(getContext().getContentResolver(),
-                    Settings.Secure.ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES,
-                    setting,
-                    currentUser);
-            getContext().sendBroadcastAsUser(new Intent(NotificationManager
-                    .ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED)
-                .setPackage(pkg)
-                .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY), new UserHandle(currentUser), null);
-        }
-
-        public ArraySet<String> getGrantedPackages() {
-            final ArraySet<String> pkgs = new ArraySet<>();
-
-            long identity = Binder.clearCallingIdentity();
+            final PrintWriter pw = getOutPrintWriter();
             try {
-                final String setting = Settings.Secure.getStringForUser(
-                        getContext().getContentResolver(),
-                        Settings.Secure.ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES,
-                        ActivityManager.getCurrentUser());
-                if (setting != null) {
-                    final String[] tokens = setting.split(SEPARATOR);
-                    for (int i = 0; i < tokens.length; i++) {
-                        String token = tokens[i];
-                        if (token != null) {
-                            token = token.trim();
-                        }
-                        if (TextUtils.isEmpty(token)) {
-                            continue;
-                        }
-                        pkgs.add(token);
+                switch (cmd) {
+                    case "allow_dnd": {
+                        getBinderService().setNotificationPolicyAccessGranted(
+                                getNextArgRequired(), true);
                     }
+                    break;
+
+                    case "disallow_dnd": {
+                        getBinderService().setNotificationPolicyAccessGranted(
+                                getNextArgRequired(), false);
+                    }
+                    break;
+                    case "allow_listener": {
+                        ComponentName cn = ComponentName.unflattenFromString(getNextArgRequired());
+                        if (cn == null) {
+                            pw.println("Invalid listener - must be a ComponentName");
+                            return -1;
+                        }
+                        String userId = getNextArg();
+                        if (userId == null) {
+                            getBinderService().setNotificationListenerAccessGranted(cn, true);
+                        } else {
+                            getBinderService().setNotificationListenerAccessGrantedForUser(
+                                    cn, Integer.parseInt(userId), true);
+                        }
+                    }
+                    break;
+                    case "disallow_listener": {
+                        ComponentName cn = ComponentName.unflattenFromString(getNextArgRequired());
+                        if (cn == null) {
+                            pw.println("Invalid listener - must be a ComponentName");
+                            return -1;
+                        }
+                        String userId = getNextArg();
+                        if (userId == null) {
+                            getBinderService().setNotificationListenerAccessGranted(cn, false);
+                        } else {
+                            getBinderService().setNotificationListenerAccessGrantedForUser(
+                                    cn, Integer.parseInt(userId), false);
+                        }
+                    }
+                    break;
+                    case "allow_assistant": {
+                        ComponentName cn = ComponentName.unflattenFromString(getNextArgRequired());
+                        if (cn == null) {
+                            pw.println("Invalid assistant - must be a ComponentName");
+                            return -1;
+                        }
+                        getBinderService().setNotificationAssistantAccessGranted(cn, true);
+                    }
+                    break;
+                    case "disallow_assistant": {
+                        ComponentName cn = ComponentName.unflattenFromString(getNextArgRequired());
+                        if (cn == null) {
+                            pw.println("Invalid assistant - must be a ComponentName");
+                            return -1;
+                        }
+                        getBinderService().setNotificationAssistantAccessGranted(cn, false);
+                    }
+                    break;
+
+                    default:
+                        return handleDefaultCommands(cmd);
                 }
-            } finally {
-                Binder.restoreCallingIdentity(identity);
+            } catch (Exception e) {
+                pw.println("Error occurred. Check logcat for details. " + e.getMessage());
+                Slog.e(TAG, "Error running shell command", e);
             }
-            return pkgs;
+            return 0;
         }
 
-        public String[] getRequestingPackages() throws RemoteException {
-            final ParceledListSlice list = mPackageManager
-                    .getPackagesHoldingPermissions(PERM, 0 /*flags*/,
-                            ActivityManager.getCurrentUser());
-            final List<PackageInfo> pkgs = list.getList();
-            if (pkgs == null || pkgs.isEmpty()) return new String[0];
-            final int N = pkgs.size();
-            final String[] rt = new String[N];
-            for (int i = 0; i < N; i++) {
-                rt[i] = pkgs.get(i).packageName;
-            }
-            return rt;
+        @Override
+        public void onHelp() {
+            getOutPrintWriter().println(USAGE);
         }
     }
 }
diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java
index 1dee71c..77bf9e3 100644
--- a/services/core/java/com/android/server/notification/NotificationRecord.java
+++ b/services/core/java/com/android/server/notification/NotificationRecord.java
@@ -35,8 +35,10 @@
 import android.metrics.LogMaker;
 import android.net.Uri;
 import android.os.Build;
+import android.os.Bundle;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.service.notification.Adjustment;
 import android.service.notification.NotificationListenerService;
 import android.service.notification.NotificationRecordProto;
 import android.service.notification.SnoozeCriterion;
@@ -57,6 +59,7 @@
 import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -132,6 +135,8 @@
     private String mGroupLogTag;
     private String mChannelIdLogTag;
 
+    private final List<Adjustment> mAdjustments;
+
     @VisibleForTesting
     public NotificationRecord(Context context, StatusBarNotification sbn,
             NotificationChannel channel)
@@ -150,6 +155,7 @@
         mAttributes = calculateAttributes();
         mImportance = calculateImportance();
         mLight = calculateLights();
+        mAdjustments = new ArrayList<>();
     }
 
     private boolean isPreChannelsNotification() {
@@ -504,6 +510,7 @@
         if (getSnoozeCriteria() != null) {
             pw.println(prefix + "snoozeCriteria=" + TextUtils.join(",", getSnoozeCriteria()));
         }
+        pw.println(prefix + "mAdjustments=" + mAdjustments);
     }
 
 
@@ -539,6 +546,36 @@
                 this.sbn.getNotification());
     }
 
+    public void addAdjustment(Adjustment adjustment) {
+        synchronized (mAdjustments) {
+            mAdjustments.add(adjustment);
+        }
+    }
+
+    public void applyAdjustments() {
+        synchronized (mAdjustments) {
+            for (Adjustment adjustment: mAdjustments) {
+                Bundle signals = adjustment.getSignals();
+                if (signals.containsKey(Adjustment.KEY_PEOPLE)) {
+                    final ArrayList<String> people =
+                            adjustment.getSignals().getStringArrayList(Adjustment.KEY_PEOPLE);
+                    setPeopleOverride(people);
+                }
+                if (signals.containsKey(Adjustment.KEY_SNOOZE_CRITERIA)) {
+                    final ArrayList<SnoozeCriterion> snoozeCriterionList =
+                            adjustment.getSignals().getParcelableArrayList(
+                                    Adjustment.KEY_SNOOZE_CRITERIA);
+                    setSnoozeCriteria(snoozeCriterionList);
+                }
+                if (signals.containsKey(Adjustment.KEY_GROUP_KEY)) {
+                    final String groupOverrideKey =
+                            adjustment.getSignals().getString(Adjustment.KEY_GROUP_KEY);
+                    setOverrideGroupKey(groupOverrideKey);
+                }
+            }
+        }
+    }
+
     public void setContactAffinity(float contactAffinity) {
         mContactAffinity = contactAffinity;
         if (mImportance < IMPORTANCE_DEFAULT &&
diff --git a/services/core/java/com/android/server/notification/NotificationUsageStats.java b/services/core/java/com/android/server/notification/NotificationUsageStats.java
index 3ed1d0b..e40dad6 100644
--- a/services/core/java/com/android/server/notification/NotificationUsageStats.java
+++ b/services/core/java/com/android/server/notification/NotificationUsageStats.java
@@ -40,6 +40,7 @@
 import org.json.JSONObject;
 
 import java.io.PrintWriter;
+import java.lang.Math;
 import java.util.ArrayDeque;
 import java.util.Calendar;
 import java.util.GregorianCalendar;
@@ -748,8 +749,8 @@
         }
 
         void increment(int imp) {
-            imp = imp < 0 ? 0 : imp > NUM_IMPORTANCES ? NUM_IMPORTANCES : imp;
-            mCount[imp] ++;
+            imp = Math.max(0, Math.min(imp, mCount.length - 1));
+            mCount[imp]++;
         }
 
         void maybeCount(ImportanceHistogram prev) {
@@ -1058,6 +1059,9 @@
         private static final int EVENT_TYPE_CLICK = 2;
         private static final int EVENT_TYPE_REMOVE = 3;
         private static final int EVENT_TYPE_DISMISS = 4;
+
+        private static final int IDLE_CONNECTION_TIMEOUT_MS = 30000;
+
         private static long sLastPruneMs;
 
         private static long sNumWrites;
@@ -1140,6 +1144,12 @@
                 }
 
                 @Override
+                public void onConfigure(SQLiteDatabase db) {
+                    // Memory optimization - close idle connections after 30s of inactivity
+                    setIdleConnectionTimeout(IDLE_CONNECTION_TIMEOUT_MS);
+                }
+
+                @Override
                 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                     if (oldVersion != newVersion) {
                         db.execSQL("DROP TABLE IF EXISTS " + TAB_LOG);
diff --git a/services/core/java/com/android/server/notification/RankingConfig.java b/services/core/java/com/android/server/notification/RankingConfig.java
index 36da04d..332ab6d 100644
--- a/services/core/java/com/android/server/notification/RankingConfig.java
+++ b/services/core/java/com/android/server/notification/RankingConfig.java
@@ -38,7 +38,7 @@
             int uid, boolean includeDeleted);
     void createNotificationChannel(String pkg, int uid, NotificationChannel channel,
             boolean fromTargetApp);
-    void updateNotificationChannel(String pkg, int uid, NotificationChannel channel);
+    void updateNotificationChannel(String pkg, int uid, NotificationChannel channel, boolean fromUser);
     NotificationChannel getNotificationChannel(String pkg, int uid, String channelId, boolean includeDeleted);
     void deleteNotificationChannel(String pkg, int uid, String channelId);
     void permanentlyDeleteNotificationChannel(String pkg, int uid, String channelId);
diff --git a/services/core/java/com/android/server/notification/RankingHandler.java b/services/core/java/com/android/server/notification/RankingHandler.java
index 656d727..96324d8 100644
--- a/services/core/java/com/android/server/notification/RankingHandler.java
+++ b/services/core/java/com/android/server/notification/RankingHandler.java
@@ -16,6 +16,6 @@
 package com.android.server.notification;
 
 public interface RankingHandler {
-    public void requestSort(boolean forceUpdate);
+    public void requestSort();
     public void requestReconsideration(RankingReconsideration recon);
-}
+}
\ No newline at end of file
diff --git a/services/core/java/com/android/server/notification/RankingHelper.java b/services/core/java/com/android/server/notification/RankingHelper.java
index d7b36aa..b8e2092 100644
--- a/services/core/java/com/android/server/notification/RankingHelper.java
+++ b/services/core/java/com/android/server/notification/RankingHelper.java
@@ -20,6 +20,7 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.internal.util.Preconditions;
+import com.android.internal.util.XmlUtils;
 
 import android.app.Notification;
 import android.app.NotificationChannel;
@@ -64,7 +65,7 @@
 
     private static final int XML_VERSION = 1;
 
-    private static final String TAG_RANKING = "ranking";
+    static final String TAG_RANKING = "ranking";
     private static final String TAG_PACKAGE = "package";
     private static final String TAG_CHANNEL = "channel";
     private static final String TAG_GROUP = "channelGroup";
@@ -169,7 +170,7 @@
             }
             if (type == XmlPullParser.START_TAG) {
                 if (TAG_PACKAGE.equals(tag)) {
-                    int uid = safeInt(parser, ATT_UID, Record.UNKNOWN_UID);
+                    int uid = XmlUtils.readIntAttribute(parser, ATT_UID, Record.UNKNOWN_UID);
                     String name = parser.getAttributeValue(null, ATT_NAME);
                     if (!TextUtils.isEmpty(name)) {
                         if (forRestore) {
@@ -182,14 +183,21 @@
                         }
 
                         Record r = getOrCreateRecord(name, uid,
-                                safeInt(parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE),
-                                safeInt(parser, ATT_PRIORITY, DEFAULT_PRIORITY),
-                                safeInt(parser, ATT_VISIBILITY, DEFAULT_VISIBILITY),
-                                safeBool(parser, ATT_SHOW_BADGE, DEFAULT_SHOW_BADGE));
-                        r.importance = safeInt(parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE);
-                        r.priority = safeInt(parser, ATT_PRIORITY, DEFAULT_PRIORITY);
-                        r.visibility = safeInt(parser, ATT_VISIBILITY, DEFAULT_VISIBILITY);
-                        r.showBadge = safeBool(parser, ATT_SHOW_BADGE, DEFAULT_SHOW_BADGE);
+                                XmlUtils.readIntAttribute(
+                                        parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE),
+                                XmlUtils.readIntAttribute(parser, ATT_PRIORITY, DEFAULT_PRIORITY),
+                                XmlUtils.readIntAttribute(
+                                        parser, ATT_VISIBILITY, DEFAULT_VISIBILITY),
+                                XmlUtils.readBooleanAttribute(
+                                        parser, ATT_SHOW_BADGE, DEFAULT_SHOW_BADGE));
+                        r.importance = XmlUtils.readIntAttribute(
+                                parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE);
+                        r.priority = XmlUtils.readIntAttribute(
+                                parser, ATT_PRIORITY, DEFAULT_PRIORITY);
+                        r.visibility = XmlUtils.readIntAttribute(
+                                parser, ATT_VISIBILITY, DEFAULT_VISIBILITY);
+                        r.showBadge = XmlUtils.readBooleanAttribute(
+                                parser, ATT_SHOW_BADGE, DEFAULT_SHOW_BADGE);
 
                         final int innerDepth = parser.getDepth();
                         while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
@@ -214,12 +222,16 @@
                             if (TAG_CHANNEL.equals(tagName)) {
                                 String id = parser.getAttributeValue(null, ATT_ID);
                                 String channelName = parser.getAttributeValue(null, ATT_NAME);
-                                int channelImportance =
-                                        safeInt(parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE);
+                                int channelImportance = XmlUtils.readIntAttribute(
+                                        parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE);
                                 if (!TextUtils.isEmpty(id) && !TextUtils.isEmpty(channelName)) {
                                     NotificationChannel channel = new NotificationChannel(id,
                                             channelName, channelImportance);
-                                    channel.populateFromXml(parser);
+                                    if (forRestore) {
+                                        channel.populateFromXmlForRestore(parser, mContext);
+                                    } else {
+                                        channel.populateFromXml(parser);
+                                    }
                                     r.channels.put(id, channel);
                                 }
                             }
@@ -382,7 +394,11 @@
                     }
 
                     for (NotificationChannel channel : r.channels.values()) {
-                        if (!forBackup || (forBackup && !channel.isDeleted())) {
+                        if (forBackup) {
+                            if (!channel.isDeleted()) {
+                                channel.writeXmlForBackup(out, mContext);
+                            }
+                        } else {
                             channel.writeXml(out);
                         }
                     }
@@ -399,7 +415,7 @@
         for (int i = 0; i < N; i++) {
             mSignalExtractors[i].setConfig(this);
         }
-        mRankingHandler.requestSort(false);
+        mRankingHandler.requestSort();
     }
 
     public void sort(ArrayList<NotificationRecord> notificationList) {
@@ -419,8 +435,7 @@
                 record.setAuthoritativeRank(i);
                 final String groupKey = record.getGroupKey();
                 NotificationRecord existingProxy = mProxyByGroupTmp.get(groupKey);
-                if (existingProxy == null
-                        || record.getImportance() > existingProxy.getImportance()) {
+                if (existingProxy == null) {
                     mProxyByGroupTmp.put(groupKey, record);
                 }
             }
@@ -467,26 +482,6 @@
         return Collections.binarySearch(notificationList, target, mFinalComparator);
     }
 
-    private static boolean safeBool(XmlPullParser parser, String att, boolean defValue) {
-        final String value = parser.getAttributeValue(null, att);
-        if (TextUtils.isEmpty(value)) return defValue;
-        return Boolean.parseBoolean(value);
-    }
-
-    private static int safeInt(XmlPullParser parser, String att, int defValue) {
-        final String val = parser.getAttributeValue(null, att);
-        return tryParseInt(val, defValue);
-    }
-
-    private static int tryParseInt(String value, int defValue) {
-        if (TextUtils.isEmpty(value)) return defValue;
-        try {
-            return Integer.parseInt(value);
-        } catch (NumberFormatException e) {
-            return defValue;
-        }
-    }
-
     /**
      * Gets importance.
      */
@@ -531,7 +526,6 @@
             MetricsLogger.action(getChannelGroupLog(group.getId(), pkg));
         }
         r.groups.put(group.getId(), group);
-        updateConfig();
     }
 
     @Override
@@ -567,6 +561,13 @@
             existing.setDescription(channel.getDescription());
             existing.setBlockableSystem(channel.isBlockableSystem());
 
+            // Apps are allowed to downgrade channel importance if the user has not changed any
+            // fields on this channel yet.
+            if (existing.getUserLockedFields() == 0 &&
+                    channel.getImportance() < existing.getImportance()) {
+                existing.setImportance(channel.getImportance());
+            }
+
             updateConfig();
             return;
         }
@@ -589,7 +590,6 @@
         r.channels.put(channel.getId(), channel);
         MetricsLogger.action(getChannelLog(channel, pkg).setType(
                 MetricsProto.MetricsEvent.TYPE_OPEN));
-        updateConfig();
     }
 
     void clearLockedFields(NotificationChannel channel) {
@@ -597,7 +597,8 @@
     }
 
     @Override
-    public void updateNotificationChannel(String pkg, int uid, NotificationChannel updatedChannel) {
+    public void updateNotificationChannel(String pkg, int uid, NotificationChannel updatedChannel,
+            boolean fromUser) {
         Preconditions.checkNotNull(updatedChannel);
         Preconditions.checkNotNull(updatedChannel.getId());
         Record r = getOrCreateRecord(pkg, uid);
@@ -611,7 +612,11 @@
         if (updatedChannel.getLockscreenVisibility() == Notification.VISIBILITY_PUBLIC) {
             updatedChannel.setLockscreenVisibility(Ranking.VISIBILITY_NO_OVERRIDE);
         }
-        lockFieldsForUpdate(channel, updatedChannel);
+        updatedChannel.unlockFields(updatedChannel.getUserLockedFields());
+        updatedChannel.lockFields(channel.getUserLockedFields());
+        if (fromUser) {
+            lockFieldsForUpdate(channel, updatedChannel);
+        }
         r.channels.put(updatedChannel.getId(), updatedChannel);
 
         if (NotificationChannel.DEFAULT_CHANNEL_ID.equals(updatedChannel.getId())) {
@@ -661,7 +666,6 @@
             LogMaker lm = getChannelLog(channel, pkg);
             lm.setType(MetricsProto.MetricsEvent.TYPE_CLOSE);
             MetricsLogger.action(lm);
-            updateConfig();
         }
     }
 
@@ -675,7 +679,6 @@
             return;
         }
         r.channels.remove(channelId);
-        updateConfig();
     }
 
     @Override
@@ -692,7 +695,6 @@
                 r.channels.remove(key);
             }
         }
-        updateConfig();
     }
 
     public NotificationChannelGroup getNotificationChannelGroup(String groupId, String pkg,
@@ -755,7 +757,6 @@
                 deletedChannels.add(nc);
             }
         }
-        updateConfig();
         return deletedChannels;
     }
 
@@ -840,8 +841,6 @@
 
     @VisibleForTesting
     void lockFieldsForUpdate(NotificationChannel original, NotificationChannel update) {
-        update.unlockFields(update.getUserLockedFields());
-        update.lockFields(original.getUserLockedFields());
         if (original.canBypassDnd() != update.canBypassDnd()) {
             update.lockFields(NotificationChannel.USER_LOCKED_PRIORITY);
         }
@@ -1085,6 +1084,22 @@
         }
     }
 
+    protected void onLocaleChanged(Context context, int userId) {
+        synchronized (mRecords) {
+            int N = mRecords.size();
+            for (int i = 0; i < N; i++) {
+                Record record = mRecords.valueAt(i);
+                if (UserHandle.getUserId(record.uid) == userId) {
+                    if (record.channels.containsKey(NotificationChannel.DEFAULT_CHANNEL_ID)) {
+                        record.channels.get(NotificationChannel.DEFAULT_CHANNEL_ID).setName(
+                                context.getResources().getString(
+                                        R.string.default_notification_channel_label));
+                    }
+                }
+            }
+        }
+    }
+
     public void onPackagesChanged(boolean removingPackage, int changeUserId, String[] pkgList,
             int[] uidList) {
         if (pkgList == null || pkgList.length == 0) {
@@ -1170,7 +1185,7 @@
             changed |= oldValue != newValue;
         }
         if (changed) {
-            mRankingHandler.requestSort(false);
+            updateConfig();
         }
     }
 
diff --git a/services/core/java/com/android/server/notification/ScheduleCalendar.java b/services/core/java/com/android/server/notification/ScheduleCalendar.java
index 9e8b2e3..40230bd 100644
--- a/services/core/java/com/android/server/notification/ScheduleCalendar.java
+++ b/services/core/java/com/android/server/notification/ScheduleCalendar.java
@@ -42,7 +42,8 @@
 
     public void maybeSetNextAlarm(long now, long nextAlarm) {
         if (mSchedule != null) {
-            if (mSchedule.exitAtAlarm && now > mSchedule.nextAlarm) {
+            if (mSchedule.exitAtAlarm
+                    && (now > mSchedule.nextAlarm || nextAlarm < mSchedule.nextAlarm)) {
                 mSchedule.nextAlarm = nextAlarm;
             }
         }
diff --git a/services/core/java/com/android/server/notification/ZenModeFiltering.java b/services/core/java/com/android/server/notification/ZenModeFiltering.java
index cbaad46..a7a2743 100644
--- a/services/core/java/com/android/server/notification/ZenModeFiltering.java
+++ b/services/core/java/com/android/server/notification/ZenModeFiltering.java
@@ -104,9 +104,6 @@
     }
 
     public boolean shouldIntercept(int zen, ZenModeConfig config, NotificationRecord record) {
-        if (isSystem(record)) {
-            return false;
-        }
         switch (zen) {
             case Global.ZEN_MODE_NO_INTERRUPTIONS:
                 // #notevenalarms
@@ -177,10 +174,6 @@
         return false;
     }
 
-    private static boolean isSystem(NotificationRecord record) {
-        return record.isCategory(Notification.CATEGORY_SYSTEM);
-    }
-
     private static boolean isAlarm(NotificationRecord record) {
         return record.isCategory(Notification.CATEGORY_ALARM)
                 || record.isAudioStream(AudioManager.STREAM_ALARM)
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 15e32ff..ffdafc5 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -16,11 +16,6 @@
 
 package com.android.server.notification;
 
-import static android.media.AudioAttributes.USAGE_NOTIFICATION;
-import static android.media.AudioAttributes.USAGE_NOTIFICATION_RINGTONE;
-import static android.media.AudioAttributes.USAGE_UNKNOWN;
-import static android.media.AudioAttributes.USAGE_VIRTUAL_SOURCE;
-
 import android.app.AppOpsManager;
 import android.app.AutomaticZenRule;
 import android.app.NotificationManager;
@@ -52,7 +47,6 @@
 import android.provider.Settings.Global;
 import android.service.notification.Condition;
 import android.service.notification.ConditionProviderService;
-import android.service.notification.NotificationServiceDumpProto;
 import android.service.notification.ZenModeConfig;
 import android.service.notification.ZenModeConfig.EventInfo;
 import android.service.notification.ZenModeConfig.ScheduleInfo;
@@ -60,6 +54,7 @@
 import android.service.notification.ZenModeProto;
 import android.util.AndroidRuntimeException;
 import android.util.Log;
+import android.util.Slog;
 import android.util.SparseArray;
 import android.util.proto.ProtoOutputStream;
 
@@ -93,7 +88,7 @@
     private final H mHandler;
     private final SettingsObserver mSettingsObserver;
     private final AppOpsManager mAppOps;
-    private final ZenModeConfig mDefaultConfig;
+    protected ZenModeConfig mDefaultConfig;
     private final ArrayList<Callback> mCallbacks = new ArrayList<Callback>();
     private final ZenModeFiltering mFiltering;
     private final RingerModeDelegate mRingerModeDelegate = new RingerModeDelegate();
@@ -102,11 +97,16 @@
     private final Metrics mMetrics = new Metrics();
     private final ConditionProviders.Config mServiceConfig;
 
+    protected final ArrayList<String> mDefaultRuleIds = new ArrayList<>();
+    private final String EVENTS_DEFAULT_RULE = "EVENTS_DEFAULT_RULE";
+    private final String SCHEDULED_DEFAULT_RULE_1 = "SCHEDULED_DEFAULT_RULE_1";
+    private final String SCHEDULED_DEFAULT_RULE_2 = "SCHEDULED_DEFAULT_RULE_2";
+
     private int mZenMode;
     private int mUser = UserHandle.USER_SYSTEM;
-    private ZenModeConfig mConfig;
+    protected ZenModeConfig mConfig;
     private AudioManagerInternal mAudioManager;
-    private PackageManager mPm;
+    protected PackageManager mPm;
     private long mSuppressedEffects;
 
     public static final long SUPPRESSED_EFFECT_NOTIFICATIONS = 1;
@@ -114,21 +114,33 @@
     public static final long SUPPRESSED_EFFECT_ALL = SUPPRESSED_EFFECT_CALLS
             | SUPPRESSED_EFFECT_NOTIFICATIONS;
 
+    protected String mDefaultRuleWeeknightsName;
+    protected String mDefaultRuleEventsName;
+    protected String mDefaultRuleWeekendsName;
+
     public ZenModeHelper(Context context, Looper looper, ConditionProviders conditionProviders) {
         mContext = context;
         mHandler = new H(looper);
         addCallback(mMetrics);
         mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
-        mDefaultConfig = readDefaultConfig(context.getResources());
-        appendDefaultScheduleRules(mDefaultConfig);
-        appendDefaultEventRules(mDefaultConfig);
+
+        mDefaultConfig = new ZenModeConfig();
+        mDefaultRuleWeeknightsName = mContext.getResources()
+                .getString(R.string.zen_mode_default_weeknights_name);
+        mDefaultRuleWeekendsName = mContext.getResources()
+                .getString(R.string.zen_mode_default_weekends_name);
+        mDefaultRuleEventsName = mContext.getResources()
+                .getString(R.string.zen_mode_default_events_name);
+        setDefaultZenRules(mContext);
         mConfig = mDefaultConfig;
         mConfigs.put(UserHandle.USER_SYSTEM, mConfig);
+
         mSettingsObserver = new SettingsObserver(mHandler);
         mSettingsObserver.observe();
         mFiltering = new ZenModeFiltering(mContext);
         mConditions = new ZenModeConditions(this, conditionProviders);
         mServiceConfig = conditionProviders.getConfig();
+
     }
 
     public Looper getLooper() {
@@ -412,6 +424,56 @@
         }
     }
 
+    public void setDefaultZenRules(Context context) {
+        mDefaultConfig = readDefaultConfig(context.getResources());
+
+        mDefaultRuleIds.add(EVENTS_DEFAULT_RULE);
+        mDefaultRuleIds.add(SCHEDULED_DEFAULT_RULE_1);
+        mDefaultRuleIds.add(SCHEDULED_DEFAULT_RULE_2);
+
+        appendDefaultRules(mDefaultConfig);
+    }
+
+    private void appendDefaultRules (ZenModeConfig config) {
+        appendDefaultScheduleRules(config);
+        appendDefaultEventRules(config);
+    }
+
+    // Checks zen rule properties are the same (doesn't check creation time, name nor enabled)
+    // used to check if default rules were customized or not
+    private boolean ruleValuesEqual(AutomaticZenRule rule, ZenRule defaultRule) {
+        if (rule == null || defaultRule == null) {
+            return false;
+        }
+        return rule.getInterruptionFilter() ==
+                NotificationManager.zenModeToInterruptionFilter(defaultRule.zenMode)
+                && rule.getConditionId().equals(defaultRule.conditionId)
+                && rule.getOwner().equals(defaultRule.component);
+    }
+
+    protected void updateDefaultZenRules() {
+        ZenModeConfig configDefaultRules = new ZenModeConfig();
+        appendDefaultRules(configDefaultRules); // "new" localized default rules
+        for (String ruleId : mDefaultRuleIds) {
+            AutomaticZenRule currRule = getAutomaticZenRule(ruleId);
+            ZenRule defaultRule = configDefaultRules.automaticRules.get(ruleId);
+            // if default rule wasn't customized, use localized name instead of previous
+            if (ruleValuesEqual(currRule, defaultRule) &&
+                    !defaultRule.name.equals(currRule.getName())) {
+                if (canManageAutomaticZenRule(defaultRule)) {
+                    if (DEBUG) Slog.d(TAG, "Locale change - updating default zen rule name "
+                            + "from " + currRule.getName() + " to " + defaultRule.name);
+                    // update default rule (if locale changed, name of rule will change)
+                    AutomaticZenRule defaultAutoRule = createAutomaticZenRule(defaultRule);
+                    // ensure enabled state is carried over from current rule
+                    defaultAutoRule.setEnabled(currRule.isEnabled());
+                    updateAutomaticZenRule(ruleId, defaultAutoRule,
+                            "locale changed");
+                }
+            }
+        }
+    }
+
     private boolean isSystemRule(AutomaticZenRule rule) {
         return ZenModeConfig.SYSTEM_AUTHORITY.equals(rule.getOwner().getPackageName());
     }
@@ -453,7 +515,7 @@
                 automaticZenRule.getInterruptionFilter(), Global.ZEN_MODE_OFF);
     }
 
-    private AutomaticZenRule createAutomaticZenRule(ZenRule rule) {
+    protected AutomaticZenRule createAutomaticZenRule(ZenRule rule) {
         return new AutomaticZenRule(rule.name, rule.component, rule.conditionId,
                 NotificationManager.zenModeToInterruptionFilter(rule.zenMode), rule.enabled,
                 rule.creationTime);
@@ -675,6 +737,9 @@
             mConfig = config;
             mHandler.postApplyConfig(config, reason, setRingerMode);
             return true;
+        } catch (SecurityException e) {
+            Log.wtf(TAG, "Invalid rule in config", e);
+            return false;
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
@@ -853,12 +918,11 @@
         weeknights.endHour = 7;
         final ZenRule rule1 = new ZenRule();
         rule1.enabled = false;
-        rule1.name = mContext.getResources()
-                .getString(R.string.zen_mode_default_weeknights_name);
+        rule1.name = mDefaultRuleWeeknightsName;
         rule1.conditionId = ZenModeConfig.toScheduleConditionId(weeknights);
         rule1.zenMode = Global.ZEN_MODE_ALARMS;
         rule1.component = ScheduleConditionProvider.COMPONENT;
-        rule1.id = ZenModeConfig.newRuleId();
+        rule1.id = SCHEDULED_DEFAULT_RULE_1;
         rule1.creationTime = System.currentTimeMillis();
         config.automaticRules.put(rule1.id, rule1);
 
@@ -869,12 +933,11 @@
         weekends.endHour = 10;
         final ZenRule rule2 = new ZenRule();
         rule2.enabled = false;
-        rule2.name = mContext.getResources()
-                .getString(R.string.zen_mode_default_weekends_name);
+        rule2.name = mDefaultRuleWeekendsName;
         rule2.conditionId = ZenModeConfig.toScheduleConditionId(weekends);
         rule2.zenMode = Global.ZEN_MODE_ALARMS;
         rule2.component = ScheduleConditionProvider.COMPONENT;
-        rule2.id = ZenModeConfig.newRuleId();
+        rule2.id = SCHEDULED_DEFAULT_RULE_2;
         rule2.creationTime = System.currentTimeMillis();
         config.automaticRules.put(rule2.id, rule2);
     }
@@ -887,11 +950,11 @@
         events.reply = EventInfo.REPLY_YES_OR_MAYBE;
         final ZenRule rule = new ZenRule();
         rule.enabled = false;
-        rule.name = mContext.getResources().getString(R.string.zen_mode_default_events_name);
+        rule.name = mDefaultRuleEventsName;
         rule.conditionId = ZenModeConfig.toEventConditionId(events);
         rule.zenMode = Global.ZEN_MODE_ALARMS;
         rule.component = EventConditionProvider.COMPONENT;
-        rule.id = ZenModeConfig.newRuleId();
+        rule.id = EVENTS_DEFAULT_RULE;
         rule.creationTime = System.currentTimeMillis();
         config.automaticRules.put(rule.id, rule);
     }
diff --git a/services/core/java/com/android/server/oemlock/OemLockService.java b/services/core/java/com/android/server/oemlock/OemLockService.java
index 5e19b13..5b3d1ec 100644
--- a/services/core/java/com/android/server/oemlock/OemLockService.java
+++ b/services/core/java/com/android/server/oemlock/OemLockService.java
@@ -31,6 +31,7 @@
 import android.os.UserManagerInternal;
 import android.os.UserManagerInternal.UserRestrictionsListener;
 import android.service.oemlock.IOemLockService;
+import android.service.persistentdata.PersistentDataBlockManager;
 import android.util.Slog;
 
 import com.android.server.LocalServices;
@@ -98,6 +99,7 @@
                         !newRestrictions.getBoolean(UserManager.DISALLOW_FACTORY_RESET);
                 if (!unlockAllowedByAdmin) {
                     mOemLock.setOemUnlockAllowedByDevice(false);
+                    setPersistentDataBlockOemUnlockAllowedBit(false);
                 }
             }
         }
@@ -149,11 +151,16 @@
 
             final long token = Binder.clearCallingIdentity();
             try {
-                if (!canUserAllowOemUnlock()) {
-                    throw new SecurityException("User cannot allow OEM unlock");
+                if (!isOemUnlockAllowedByAdmin()) {
+                    throw new SecurityException("Admin does not allow OEM unlock");
+                }
+
+                if (!mOemLock.isOemUnlockAllowedByCarrier()) {
+                    throw new SecurityException("Carrier does not allow OEM unlock");
                 }
 
                 mOemLock.setOemUnlockAllowedByDevice(allowedByUser);
+                setPersistentDataBlockOemUnlockAllowedBit(allowedByUser);
             } finally {
                 Binder.restoreCallingIdentity(token);
             }
@@ -172,18 +179,6 @@
         }
 
         @Override
-        public boolean canUserAllowOemUnlock() {
-            enforceOemUnlockReadPermission();
-
-            final long token = Binder.clearCallingIdentity();
-            try {
-                return isOemUnlockAllowedByAdmin() && mOemLock.isOemUnlockAllowedByCarrier();
-            } finally {
-                Binder.restoreCallingIdentity(token);
-            }
-        }
-
-        @Override
         public boolean isOemUnlockAllowed() {
             enforceOemUnlockReadPermission();
 
@@ -210,6 +205,20 @@
         }
     };
 
+    /**
+     * Always synchronize the OemUnlockAllowed bit to the FRP partition, which
+     * is used to erase FRP information on a unlockable device.
+     */
+    private void setPersistentDataBlockOemUnlockAllowedBit(boolean allowed) {
+        final PersistentDataBlockManager pdbm = (PersistentDataBlockManager)
+                mContext.getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
+        // if mOemLock is PersistentDataBlockLock, then the bit should have already been set
+        if (pdbm != null && !(mOemLock instanceof PersistentDataBlockLock)) {
+            Slog.i(TAG, "Update OEM Unlock bit in pst partition to " + allowed);
+            pdbm.setOemUnlockEnabled(allowed);
+        }
+    }
+
     private boolean isOemUnlockAllowedByAdmin() {
         return !UserManager.get(mContext)
                 .hasUserRestriction(UserManager.DISALLOW_FACTORY_RESET, UserHandle.SYSTEM);
diff --git a/services/core/java/com/android/server/om/OverlayManagerService.java b/services/core/java/com/android/server/om/OverlayManagerService.java
index 2940a6e..0b3efdb 100644
--- a/services/core/java/com/android/server/om/OverlayManagerService.java
+++ b/services/core/java/com/android/server/om/OverlayManagerService.java
@@ -669,7 +669,8 @@
     };
 
     private boolean isOverlayPackage(@NonNull final PackageInfo pi) {
-        return pi != null && pi.overlayTarget != null;
+        return pi != null && pi.overlayTarget != null
+                && (pi.overlayFlags & PackageInfo.FLAG_OVERLAY_TRUSTED) != 0;
     }
 
     private final class OverlayChangeListener
diff --git a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java
index db6e974..497d79d 100644
--- a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java
+++ b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java
@@ -68,6 +68,11 @@
         mListener = listener;
     }
 
+    private static boolean isPackageStaticOverlay(final PackageInfo packageInfo) {
+        return packageInfo.overlayTarget != null
+                && (packageInfo.overlayFlags & PackageInfo.FLAG_OVERLAY_STATIC) != 0;
+    }
+
     /**
      * Call this to synchronize the Settings for a user with what PackageManager knows about a user.
      * Returns a list of target packages that must refresh their overlays. This list is the union
@@ -102,11 +107,11 @@
                 mSettings.init(overlayPackage.packageName, newUserId,
                         overlayPackage.overlayTarget,
                         overlayPackage.applicationInfo.getBaseCodePath(),
-                        overlayPackage.isStaticOverlay, overlayPackage.overlayPriority);
+                        isPackageStaticOverlay(overlayPackage), overlayPackage.overlayPriority);
 
                 if (oi == null) {
                     // This overlay does not exist in our settings.
-                    if (overlayPackage.isStaticOverlay ||
+                    if (isPackageStaticOverlay(overlayPackage) ||
                             mDefaultOverlays.contains(overlayPackage.packageName)) {
                         // Enable this overlay by default.
                         if (DEBUG) {
@@ -255,8 +260,8 @@
                 mPackageManager.getPackageInfo(overlayPackage.overlayTarget, userId);
 
         mSettings.init(packageName, userId, overlayPackage.overlayTarget,
-                overlayPackage.applicationInfo.getBaseCodePath(), overlayPackage.isStaticOverlay,
-                overlayPackage.overlayPriority);
+                overlayPackage.applicationInfo.getBaseCodePath(),
+                isPackageStaticOverlay(overlayPackage), overlayPackage.overlayPriority);
         try {
             if (updateState(targetPackage, overlayPackage, userId)) {
                 mListener.onOverlaysChanged(overlayPackage.overlayTarget, userId);
@@ -313,7 +318,7 @@
         }
 
         // Ignore static overlays.
-        if (overlayPackage.isStaticOverlay) {
+        if (isPackageStaticOverlay(overlayPackage)) {
             return false;
         }
 
@@ -363,7 +368,7 @@
                     continue;
                 }
 
-                if (disabledOverlayPackageInfo.isStaticOverlay) {
+                if (isPackageStaticOverlay(disabledOverlayPackageInfo)) {
                     // Don't touch static overlays.
                     continue;
                 }
@@ -388,7 +393,7 @@
 
     private boolean isPackageUpdatableOverlay(@NonNull final String packageName, final int userId) {
         final PackageInfo overlayPackage = mPackageManager.getPackageInfo(packageName, userId);
-        if (overlayPackage == null || overlayPackage.isStaticOverlay) {
+        if (overlayPackage == null || isPackageStaticOverlay(overlayPackage)) {
             return false;
         }
         return true;
@@ -483,7 +488,8 @@
             throws OverlayManagerSettings.BadKeyException {
         // Static RROs targeting to "android", ie framework-res.apk, are handled by native layers.
         if (targetPackage != null &&
-                !("android".equals(targetPackage.packageName) && overlayPackage.isStaticOverlay)) {
+                !("android".equals(targetPackage.packageName)
+                        && isPackageStaticOverlay(overlayPackage))) {
             mIdmapManager.createIdmap(targetPackage, overlayPackage, userId);
         }
 
diff --git a/services/core/java/com/android/server/pm/BackgroundDexOptService.java b/services/core/java/com/android/server/pm/BackgroundDexOptService.java
index 6749afb..6d8cac0 100644
--- a/services/core/java/com/android/server/pm/BackgroundDexOptService.java
+++ b/services/core/java/com/android/server/pm/BackgroundDexOptService.java
@@ -18,7 +18,6 @@
 
 import static com.android.server.pm.PackageManagerService.DEBUG_DEXOPT;
 
-import android.app.AlarmManager;
 import android.app.job.JobInfo;
 import android.app.job.JobParameters;
 import android.app.job.JobScheduler;
@@ -38,8 +37,10 @@
 import com.android.server.pm.dex.DexManager;
 import com.android.server.LocalServices;
 import com.android.server.PinnerService;
+import com.android.server.pm.dex.DexoptOptions;
 
 import java.io.File;
+import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.TimeUnit;
 
@@ -73,6 +74,9 @@
     // Optimizations should be aborted. No space left on device.
     private static final int OPTIMIZE_ABORT_NO_SPACE_LEFT = 3;
 
+    // Used for calculating space threshold for downgrading unused apps.
+    private static final int LOW_THRESHOLD_MULTIPLIER_FOR_DOWNGRADE = 2;
+
     /**
      * Set of failed packages remembered across job runs.
      */
@@ -92,7 +96,14 @@
 
     private final File mDataDir = Environment.getDataDirectory();
 
+    private static final long mDowngradeUnusedAppsThresholdInMillis =
+            getDowngradeUnusedAppsThresholdInMillis();
+
     public static void schedule(Context context) {
+        if (isBackgroundDexoptDisabled()) {
+            return;
+        }
+
         JobScheduler js = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
 
         // Schedule a one-off job which scans installed packages and updates
@@ -211,11 +222,10 @@
             // Unfortunately this will also means that "pm.dexopt.boot=speed-profile" will
             // behave differently than "pm.dexopt.bg-dexopt=speed-profile" but that's a
             // trade-off worth doing to save boot time work.
-            int result = pm.performDexOptWithStatus(pkg,
-                    /* checkProfiles */ false,
+            int result = pm.performDexOptWithStatus(new DexoptOptions(
+                    pkg,
                     PackageManagerService.REASON_BOOT,
-                    /* force */ false,
-                    /* bootComplete */ true);
+                    DexoptOptions.DEXOPT_BOOT_COMPLETE));
             if (result == PackageDexOptimizer.DEX_OPT_PERFORMED)  {
                 updatedPackages.add(pkg);
             }
@@ -243,7 +253,8 @@
     }
 
     // Optimize the given packages and return the optimization result (one of the OPTIMIZE_* codes).
-    private int idleOptimization(PackageManagerService pm, ArraySet<String> pkgs, Context context) {
+    private int idleOptimization(PackageManagerService pm, ArraySet<String> pkgs,
+            Context context) {
         Log.i(TAG, "Performing idle optimizations");
         // If post-boot update is still running, request that it exits early.
         mExitPostBootUpdate.set(true);
@@ -274,9 +285,16 @@
             long lowStorageThreshold, boolean is_for_primary_dex,
             ArraySet<String> failedPackageNames) {
         ArraySet<String> updatedPackages = new ArraySet<>();
+        Set<String> unusedPackages = pm.getUnusedPackages(mDowngradeUnusedAppsThresholdInMillis);
+        // Only downgrade apps when space is low on device.
+        // Threshold is selected above the lowStorageThreshold so that we can pro-actively clean
+        // up disk before user hits the actual lowStorageThreshold.
+        final long lowStorageThresholdForDowngrade = LOW_THRESHOLD_MULTIPLIER_FOR_DOWNGRADE *
+                lowStorageThreshold;
+        boolean shouldDowngrade = shouldDowngrade(lowStorageThresholdForDowngrade);
         for (String pkg : pkgs) {
             int abort_code = abortIdleOptimizations(lowStorageThreshold);
-            if (abort_code != OPTIMIZE_CONTINUE) {
+            if (abort_code == OPTIMIZE_ABORT_BY_JOB_SCHEDULER) {
                 return abort_code;
             }
 
@@ -284,30 +302,55 @@
                 if (failedPackageNames.contains(pkg)) {
                     // Skip previously failing package
                     continue;
-                } else {
-                    // Conservatively add package to the list of failing ones in case performDexOpt
-                    // never returns.
-                    failedPackageNames.add(pkg);
                 }
             }
 
+            int reason;
+            boolean downgrade;
+            // Downgrade unused packages.
+            if (unusedPackages.contains(pkg) && shouldDowngrade) {
+                // This applies for system apps or if packages location is not a directory, i.e.
+                // monolithic install.
+                if (is_for_primary_dex && !pm.canHaveOatDir(pkg)) {
+                    // For apps that don't have the oat directory, instead of downgrading,
+                    // remove their compiler artifacts from dalvik cache.
+                    pm.deleteOatArtifactsOfPackage(pkg);
+                    continue;
+                } else {
+                    reason = PackageManagerService.REASON_INACTIVE_PACKAGE_DOWNGRADE;
+                    downgrade = true;
+                }
+            } else if (abort_code != OPTIMIZE_ABORT_NO_SPACE_LEFT) {
+                reason = PackageManagerService.REASON_BACKGROUND_DEXOPT;
+                downgrade = false;
+            } else {
+                // can't dexopt because of low space.
+                continue;
+            }
+
+            synchronized (failedPackageNames) {
+                // Conservatively add package to the list of failing ones in case
+                // performDexOpt never returns.
+                failedPackageNames.add(pkg);
+            }
+
             // Optimize package if needed. Note that there can be no race between
             // concurrent jobs because PackageDexOptimizer.performDexOpt is synchronized.
             boolean success;
+            int dexoptFlags =
+                    DexoptOptions.DEXOPT_CHECK_FOR_PROFILES_UPDATES |
+                    DexoptOptions.DEXOPT_BOOT_COMPLETE |
+                    (downgrade ? DexoptOptions.DEXOPT_DOWNGRADE : 0);
             if (is_for_primary_dex) {
-                int result = pm.performDexOptWithStatus(pkg,
-                        /* checkProfiles */ true,
-                        PackageManagerService.REASON_BACKGROUND_DEXOPT,
-                        /* force */ false,
-                        /* bootComplete */ true);
+                int result = pm.performDexOptWithStatus(new DexoptOptions(pkg, reason,
+                        dexoptFlags));
                 success = result != PackageDexOptimizer.DEX_OPT_FAILED;
                 if (result == PackageDexOptimizer.DEX_OPT_PERFORMED) {
                     updatedPackages.add(pkg);
                 }
             } else {
-                success = pm.performDexOptSecondary(pkg,
-                        PackageManagerService.REASON_BACKGROUND_DEXOPT,
-                        /* force */ false);
+                success = pm.performDexOpt(new DexoptOptions(pkg,
+                        reason, dexoptFlags | DexoptOptions.DEXOPT_ONLY_SECONDARY_DEX));
             }
             if (success) {
                 // Dexopt succeeded, remove package from the list of failing ones.
@@ -347,6 +390,16 @@
         return OPTIMIZE_CONTINUE;
     }
 
+    // Evaluate whether apps should be downgraded.
+    private boolean shouldDowngrade(long lowStorageThresholdForDowngrade) {
+        long usableSpace = mDataDir.getUsableSpace();
+        if (usableSpace < lowStorageThresholdForDowngrade) {
+            return true;
+        }
+
+        return false;
+    }
+
     /**
      * Execute the idle optimizations immediately.
      */
@@ -415,4 +468,19 @@
             pinnerService.update(updatedPackages);
         }
     }
+
+    private static long getDowngradeUnusedAppsThresholdInMillis() {
+        final String sysPropKey = "pm.dexopt.downgrade_after_inactive_days";
+        String sysPropValue = SystemProperties.get(sysPropKey);
+        if (sysPropValue == null || sysPropValue.isEmpty()) {
+            Log.w(TAG, "SysProp " + sysPropKey + " not set");
+            return Long.MAX_VALUE;
+        }
+        return TimeUnit.DAYS.toMillis(Long.parseLong(sysPropValue));
+    }
+
+    private static boolean isBackgroundDexoptDisabled() {
+        return SystemProperties.getBoolean("pm.dexopt.disable_bg_dexopt" /* key */,
+                false /* default */);
+    }
 }
diff --git a/services/core/java/com/android/server/pm/BasePermission.java b/services/core/java/com/android/server/pm/BasePermission.java
index 2100038..30fda1e 100644
--- a/services/core/java/com/android/server/pm/BasePermission.java
+++ b/services/core/java/com/android/server/pm/BasePermission.java
@@ -96,7 +96,7 @@
     }
 
     public boolean isInstant() {
-        return (protectionLevel & PermissionInfo.PROTECTION_FLAG_EPHEMERAL) != 0;
+        return (protectionLevel & PermissionInfo.PROTECTION_FLAG_INSTANT) != 0;
     }
 
     public boolean isRuntimeOnly() {
diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
index b217677..a3811ba 100644
--- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
@@ -18,6 +18,7 @@
 
 import android.Manifest;
 import android.annotation.NonNull;
+import android.app.ActivityManager;
 import android.app.DownloadManager;
 import android.app.admin.DevicePolicyManager;
 import android.companion.CompanionDeviceManager;
@@ -582,6 +583,21 @@
                 }
             }
 
+            if (ActivityManager.isLowRamDeviceStatic()) {
+                // Allow voice search on low-ram devices
+                Intent globalSearchIntent = new Intent("android.search.action.GLOBAL_SEARCH");
+                PackageParser.Package globalSearchPickerPackage =
+                    getDefaultSystemHandlerActivityPackageLPr(globalSearchIntent, userId);
+
+                if (globalSearchPickerPackage != null
+                        && doesPackageSupportRuntimePermissions(globalSearchPickerPackage)) {
+                    grantRuntimePermissionsLPw(globalSearchPickerPackage,
+                        MICROPHONE_PERMISSIONS, true, userId);
+                    grantRuntimePermissionsLPw(globalSearchPickerPackage,
+                        LOCATION_PERMISSIONS, true, userId);
+                }
+            }
+
             // Voice recognition
             Intent voiceRecoIntent = new Intent("android.speech.RecognitionService");
             voiceRecoIntent.addCategory(Intent.CATEGORY_DEFAULT);
@@ -624,14 +640,25 @@
                 grantRuntimePermissionsLPw(musicPackage, STORAGE_PERMISSIONS, userId);
             }
 
+            // Home
+            Intent homeIntent = new Intent(Intent.ACTION_MAIN);
+            homeIntent.addCategory(Intent.CATEGORY_HOME);
+            homeIntent.addCategory(Intent.CATEGORY_LAUNCHER_APP);
+            PackageParser.Package homePackage = getDefaultSystemHandlerActivityPackageLPr(
+                    homeIntent, userId);
+            if (homePackage != null
+                    && doesPackageSupportRuntimePermissions(homePackage)) {
+                grantRuntimePermissionsLPw(homePackage, LOCATION_PERMISSIONS, false, userId);
+            }
+
             // Watches
             if (mService.hasSystemFeature(PackageManager.FEATURE_WATCH, 0)) {
                 // Home application on watches
-                Intent homeIntent = new Intent(Intent.ACTION_MAIN);
-                homeIntent.addCategory(Intent.CATEGORY_HOME_MAIN);
+                Intent wearHomeIntent = new Intent(Intent.ACTION_MAIN);
+                wearHomeIntent.addCategory(Intent.CATEGORY_HOME_MAIN);
 
                 PackageParser.Package wearHomePackage = getDefaultSystemHandlerActivityPackageLPr(
-                        homeIntent, userId);
+                        wearHomeIntent, userId);
 
                 if (wearHomePackage != null
                         && doesPackageSupportRuntimePermissions(wearHomePackage)) {
diff --git a/services/core/java/com/android/server/pm/EphemeralResolverConnection.java b/services/core/java/com/android/server/pm/EphemeralResolverConnection.java
index 562ab33..b5ddf8c 100644
--- a/services/core/java/com/android/server/pm/EphemeralResolverConnection.java
+++ b/services/core/java/com/android/server/pm/EphemeralResolverConnection.java
@@ -56,9 +56,9 @@
     private static final String TAG = "PackageManager";
     // This is running in a critical section and the timeout must be sufficiently low
     private static final long BIND_SERVICE_TIMEOUT_MS =
-            ("eng".equals(Build.TYPE)) ? 500 : 300;
+            Build.IS_ENG ? 500 : 300;
     private static final long CALL_SERVICE_TIMEOUT_MS =
-            ("eng".equals(Build.TYPE)) ? 200 : 100;
+            Build.IS_ENG ? 200 : 100;
     private static final boolean DEBUG_EPHEMERAL = Build.IS_DEBUGGABLE;
 
     private final Object mLock = new Object();
@@ -69,8 +69,12 @@
     /** Intent used to bind to the service */
     private final Intent mIntent;
 
+    private static final int STATE_IDLE    = 0; // no bind operation is ongoing
+    private static final int STATE_BINDING = 1; // someone is binding and waiting
+    private static final int STATE_PENDING = 2; // a bind is pending, but the caller is not waiting
+
     @GuardedBy("mLock")
-    private volatile boolean mIsBinding;
+    private int mBindState = STATE_IDLE;
     @GuardedBy("mLock")
     private IInstantAppResolver mRemoteInstance;
 
@@ -137,23 +141,17 @@
 
     private IInstantAppResolver getRemoteInstanceLazy(String token)
             throws ConnectionException, TimeoutException, InterruptedException {
-        synchronized (mLock) {
-            if (mRemoteInstance != null) {
-                return mRemoteInstance;
-            }
-            long binderToken = Binder.clearCallingIdentity();
-            try {
-                bindLocked(token);
-            } finally {
-                Binder.restoreCallingIdentity(binderToken);
-            }
-            return mRemoteInstance;
+        long binderToken = Binder.clearCallingIdentity();
+        try {
+            return bind(token);
+        } finally {
+            Binder.restoreCallingIdentity(binderToken);
         }
     }
 
     private void waitForBindLocked(String token) throws TimeoutException, InterruptedException {
         final long startMillis = SystemClock.uptimeMillis();
-        while (mIsBinding) {
+        while (mBindState != STATE_IDLE) {
             if (mRemoteInstance != null) {
                 break;
             }
@@ -166,40 +164,81 @@
         }
     }
 
-    private void bindLocked(String token)
+    private IInstantAppResolver bind(String token)
             throws ConnectionException, TimeoutException, InterruptedException {
-        if (DEBUG_EPHEMERAL && mIsBinding && mRemoteInstance == null) {
-            Slog.i(TAG, "[" + token + "] Previous bind timed out; waiting for connection");
-        }
-        try {
-            waitForBindLocked(token);
-        } catch (TimeoutException e) {
-            if (DEBUG_EPHEMERAL) {
-                Slog.i(TAG, "[" + token + "] Previous connection never established; rebinding");
+        boolean doUnbind = false;
+        synchronized (mLock) {
+            if (mRemoteInstance != null) {
+                return mRemoteInstance;
             }
-            mContext.unbindService(mServiceConnection);
+
+            if (mBindState == STATE_PENDING) {
+                // there is a pending bind, let's see if we can use it.
+                if (DEBUG_EPHEMERAL) {
+                    Slog.i(TAG, "[" + token + "] Previous bind timed out; waiting for connection");
+                }
+                try {
+                    waitForBindLocked(token);
+                    if (mRemoteInstance != null) {
+                        return mRemoteInstance;
+                    }
+                } catch (TimeoutException e) {
+                    // nope, we might have to try a rebind.
+                    doUnbind = true;
+                }
+            }
+
+            if (mBindState == STATE_BINDING) {
+                // someone was binding when we called bind(), or they raced ahead while we were
+                // waiting in the PENDING case; wait for their result instead. Last chance!
+                if (DEBUG_EPHEMERAL) {
+                    Slog.i(TAG, "[" + token + "] Another thread is binding; waiting for connection");
+                }
+                waitForBindLocked(token);
+                // if the other thread's bindService() returned false, we could still have null.
+                if (mRemoteInstance != null) {
+                    return mRemoteInstance;
+                }
+                throw new ConnectionException(ConnectionException.FAILURE_BIND);
+            }
+            mBindState = STATE_BINDING; // our time to shine! :)
         }
-        if (mRemoteInstance != null) {
-            return;
-        }
-        mIsBinding = true;
-        if (DEBUG_EPHEMERAL) {
-            Slog.v(TAG, "[" + token + "] Binding to instant app resolver");
-        }
+
+        // only one thread can be here at a time (the one that set STATE_BINDING)
         boolean wasBound = false;
+        IInstantAppResolver instance = null;
         try {
+            if (doUnbind) {
+                if (DEBUG_EPHEMERAL) {
+                    Slog.i(TAG, "[" + token + "] Previous connection never established; rebinding");
+                }
+                mContext.unbindService(mServiceConnection);
+            }
+            if (DEBUG_EPHEMERAL) {
+                Slog.v(TAG, "[" + token + "] Binding to instant app resolver");
+            }
             final int flags = Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE;
             wasBound = mContext
                     .bindServiceAsUser(mIntent, mServiceConnection, flags, UserHandle.SYSTEM);
             if (wasBound) {
-                waitForBindLocked(token);
+                synchronized (mLock) {
+                    waitForBindLocked(token);
+                    instance = mRemoteInstance;
+                    return instance;
+                }
             } else {
                 Slog.w(TAG, "[" + token + "] Failed to bind to: " + mIntent);
                 throw new ConnectionException(ConnectionException.FAILURE_BIND);
             }
         } finally {
-            mIsBinding = wasBound && mRemoteInstance == null;
-            mLock.notifyAll();
+            synchronized (mLock) {
+                if (wasBound && instance == null) {
+                    mBindState = STATE_PENDING;
+                } else {
+                    mBindState = STATE_IDLE;
+                }
+                mLock.notifyAll();
+            }
         }
     }
 
@@ -255,7 +294,9 @@
             }
             synchronized (mLock) {
                 mRemoteInstance = IInstantAppResolver.Stub.asInterface(service);
-                mIsBinding = false;
+                if (mBindState == STATE_PENDING) {
+                    mBindState = STATE_IDLE;
+                }
                 try {
                     service.linkToDeath(EphemeralResolverConnection.this, 0 /*flags*/);
                 } catch (RemoteException e) {
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java
index 5c4c040..371b3ef 100644
--- a/services/core/java/com/android/server/pm/Installer.java
+++ b/services/core/java/com/android/server/pm/Installer.java
@@ -258,7 +258,7 @@
 
     public long[] getExternalSize(String uuid, int userId, int flags, int[] appIds)
             throws InstallerException {
-        if (!checkBeforeRemote()) return new long[4];
+        if (!checkBeforeRemote()) return new long[6];
         try {
             return mInstalld.getExternalSize(uuid, userId, flags, appIds);
         } catch (Exception e) {
@@ -279,13 +279,13 @@
     public void dexopt(String apkPath, int uid, @Nullable String pkgName, String instructionSet,
             int dexoptNeeded, @Nullable String outputPath, int dexFlags,
             String compilerFilter, @Nullable String volumeUuid, @Nullable String sharedLibraries,
-            @Nullable String seInfo)
+            @Nullable String seInfo, boolean downgrade)
             throws InstallerException {
         assertValidInstructionSet(instructionSet);
         if (!checkBeforeRemote()) return;
         try {
             mInstalld.dexopt(apkPath, uid, pkgName, instructionSet, dexoptNeeded, outputPath,
-                    dexFlags, compilerFilter, volumeUuid, sharedLibraries, seInfo);
+                    dexFlags, compilerFilter, volumeUuid, sharedLibraries, seInfo, downgrade);
         } 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 211a1c9..e1e5b35 100644
--- a/services/core/java/com/android/server/pm/InstantAppRegistry.java
+++ b/services/core/java/com/android/server/pm/InstantAppRegistry.java
@@ -293,14 +293,35 @@
             if (currentCookieFile == null) {
                 continue;
             }
-            File expectedCookeFile = computeInstantCookieFile(pkg, userId);
-            if (!currentCookieFile.equals(expectedCookeFile)) {
-                Slog.i(LOG_TAG, "Signature for package " + pkg.packageName
-                        + " changed - dropping cookie");
-                // Make sure a pending write for the old signed app is cancelled
-                mCookiePersistence.cancelPendingPersistLPw(pkg, userId);
-                currentCookieFile.delete();
+
+            // Before we used only the first signature to compute the SHA 256 but some
+            // apps could be singed by multiple certs and the cert order is undefined.
+            // We prefer the modern computation procedure where all certs are taken
+            // into account but also allow the value from the old computation to avoid
+            // data loss.
+            final String[] signaturesSha256Digests = PackageUtils.computeSignaturesSha256Digests(
+                    pkg.mSignatures);
+            final String signaturesSha256Digest = PackageUtils.computeSignaturesSha256Digest(
+                    signaturesSha256Digests);
+
+            // We prefer a match based on all signatures
+            if (currentCookieFile.equals(computeInstantCookieFile(pkg.packageName,
+                    signaturesSha256Digest, userId))) {
+                return;
             }
+
+            // For backwards compatibility we accept match based on first signature
+            if (pkg.mSignatures.length > 1 && currentCookieFile.equals(computeInstantCookieFile(
+                    pkg.packageName, signaturesSha256Digests[0], userId))) {
+                return;
+            }
+
+            // Sorry, you are out of luck - different signatures - nuke data
+            Slog.i(LOG_TAG, "Signature for package " + pkg.packageName
+                    + " changed - dropping cookie");
+                // Make sure a pending write for the old signed app is cancelled
+            mCookiePersistence.cancelPendingPersistLPw(pkg, userId);
+            currentCookieFile.delete();
         }
     }
 
@@ -504,6 +525,11 @@
         }
     }
 
+    boolean hasInstantApplicationMetadataLPr(String packageName, int userId) {
+        return hasUninstalledInstantAppStateLPr(packageName, userId)
+                || hasInstantAppMetadataLPr(packageName, userId);
+    }
+
     public void deleteInstantApplicationMetadataLPw(@NonNull String packageName,
             @UserIdInt int userId) {
         removeUninstalledInstantAppStateLPw((UninstalledInstantAppState state) ->
@@ -547,6 +573,33 @@
         }
     }
 
+    private boolean hasUninstalledInstantAppStateLPr(String packageName, @UserIdInt int userId) {
+        if (mUninstalledInstantApps == null) {
+            return false;
+        }
+        final List<UninstalledInstantAppState> uninstalledAppStates =
+                mUninstalledInstantApps.get(userId);
+        if (uninstalledAppStates == null) {
+            return false;
+        }
+        final int appCount = uninstalledAppStates.size();
+        for (int i = 0; i < appCount; i++) {
+            final UninstalledInstantAppState uninstalledAppState = uninstalledAppStates.get(i);
+            if (packageName.equals(uninstalledAppState.mInstantAppInfo.getPackageName())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean hasInstantAppMetadataLPr(String packageName, @UserIdInt int userId) {
+        final File instantAppDir = getInstantApplicationDir(packageName, userId);
+        return new File(instantAppDir, INSTANT_APP_METADATA_FILE).exists()
+                || new File(instantAppDir, INSTANT_APP_ICON_FILE).exists()
+                || new File(instantAppDir, INSTANT_APP_ANDROID_ID_FILE).exists()
+                || peekInstantCookieFile(packageName, userId) != null;
+    }
+
     void pruneInstantApps() {
         final long maxInstalledCacheDuration = Settings.Global.getLong(
                 mService.mContext.getContentResolver(),
@@ -936,11 +989,11 @@
         }
     }
 
-    private static @NonNull File computeInstantCookieFile(@NonNull PackageParser.Package pkg,
-            @UserIdInt int userId) {
-        File appDir = getInstantApplicationDir(pkg.packageName, userId);
-        String cookieFile = INSTANT_APP_COOKIE_FILE_PREFIX + PackageUtils.computeSha256Digest(
-                pkg.mSignatures[0].toByteArray()) + INSTANT_APP_COOKIE_FILE_SIFFIX;
+    private static @NonNull File computeInstantCookieFile(@NonNull String packageName,
+            @NonNull String sha256Digest, @UserIdInt int userId) {
+        final File appDir = getInstantApplicationDir(packageName, userId);
+        final String cookieFile = INSTANT_APP_COOKIE_FILE_PREFIX
+                + sha256Digest + INSTANT_APP_COOKIE_FILE_SIFFIX;
         return new File(appDir, cookieFile);
     }
 
@@ -1071,7 +1124,7 @@
     }
 
     private static @NonNull File getInstantApplicationDir(String packageName, int userId) {
-        return new File (getInstantApplicationsDir(userId), packageName);
+        return new File(getInstantApplicationsDir(userId), packageName);
     }
 
     private static void deleteDir(@NonNull File dir) {
@@ -1115,9 +1168,20 @@
 
         public void schedulePersistLPw(@UserIdInt int userId, @NonNull PackageParser.Package pkg,
                 @NonNull byte[] cookie) {
-            File cookieFile = computeInstantCookieFile(pkg, userId);
+            // Before we used only the first signature to compute the SHA 256 but some
+            // apps could be singed by multiple certs and the cert order is undefined.
+            // We prefer the modern computation procedure where all certs are taken
+            // into account and delete the file derived via the legacy hash computation.
+            File newCookieFile = computeInstantCookieFile(pkg.packageName,
+                    PackageUtils.computeSignaturesSha256Digest(pkg.mSignatures), userId);
+            if (pkg.mSignatures.length > 0) {
+                File oldCookieFile = peekInstantCookieFile(pkg.packageName, userId);
+                if (oldCookieFile != null && !newCookieFile.equals(oldCookieFile)) {
+                    oldCookieFile.delete();
+                }
+            }
             cancelPendingPersistLPw(pkg, userId);
-            addPendingPersistCookieLPw(userId, pkg, cookie, cookieFile);
+            addPendingPersistCookieLPw(userId, pkg, cookie, newCookieFile);
             sendMessageDelayed(obtainMessage(userId, pkg),
                     PERSIST_COOKIE_DELAY_MILLIS);
         }
diff --git a/services/core/java/com/android/server/pm/InstantAppResolver.java b/services/core/java/com/android/server/pm/InstantAppResolver.java
index d0d306c..5f54c67 100644
--- a/services/core/java/com/android/server/pm/InstantAppResolver.java
+++ b/services/core/java/com/android/server/pm/InstantAppResolver.java
@@ -122,7 +122,7 @@
             }
         }
         // Only log successful instant application resolution
-        if (resolutionStatus == RESOLUTION_SUCCESS) {
+        if (requestObj.resolveForStart && resolutionStatus == RESOLUTION_SUCCESS) {
             logMetrics(ACTION_INSTANT_APP_RESOLUTION_PHASE_ONE, startTime, token,
                     resolutionStatus);
         }
@@ -194,6 +194,7 @@
                         requestObj.userId,
                         packageName,
                         splitName,
+                        requestObj.responseObj.installFailureActivity,
                         versionCode,
                         token,
                         false /*needsPhaseTwo*/);
@@ -239,6 +240,7 @@
             int userId,
             @NonNull String instantAppPackageName,
             @Nullable String instantAppSplitName,
+            @Nullable ComponentName installFailureActivity,
             int versionCode,
             @Nullable String token,
             boolean needsPhaseTwo) {
@@ -260,15 +262,25 @@
         // We have all of the data we need; just start the installer without a second phase
         if (!needsPhaseTwo) {
             // Intent that is launched if the package couldn't be installed for any reason.
-            if (failureIntent != null) {
+            if (failureIntent != null || installFailureActivity != null) {
                 try {
+                    final Intent onFailureIntent;
+                    if (installFailureActivity != null) {
+                        onFailureIntent = new Intent();
+                        onFailureIntent.setComponent(installFailureActivity);
+                        onFailureIntent.putExtra(Intent.EXTRA_SPLIT_NAME, instantAppSplitName);
+                        onFailureIntent.putExtra(Intent.EXTRA_INTENT, origIntent);
+                    } else {
+                        onFailureIntent = failureIntent;
+                    }
                     final IIntentSender failureIntentTarget = ActivityManager.getService()
                             .getIntentSender(
                                     ActivityManager.INTENT_SENDER_ACTIVITY, callingPackage,
                                     null /*token*/, null /*resultWho*/, 1 /*requestCode*/,
-                                    new Intent[] { failureIntent },
+                                    new Intent[] { onFailureIntent },
                                     new String[] { resolvedType },
-                                    PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT
+                                    PendingIntent.FLAG_CANCEL_CURRENT
+                                            | PendingIntent.FLAG_ONE_SHOT
                                             | PendingIntent.FLAG_IMMUTABLE,
                                     null /*bOptions*/, userId);
                     intent.putExtra(Intent.EXTRA_EPHEMERAL_FAILURE,
diff --git a/services/core/java/com/android/server/pm/OtaDexoptService.java b/services/core/java/com/android/server/pm/OtaDexoptService.java
index 54ca6b9..6253857 100644
--- a/services/core/java/com/android/server/pm/OtaDexoptService.java
+++ b/services/core/java/com/android/server/pm/OtaDexoptService.java
@@ -18,7 +18,6 @@
 
 import static com.android.server.pm.InstructionSets.getAppDexInstructionSets;
 import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets;
-import static com.android.server.pm.PackageManagerServiceCompilerMapping.getCompilerFilterForReason;
 
 import android.annotation.Nullable;
 import android.content.Context;
@@ -30,17 +29,16 @@
 import android.os.ServiceManager;
 import android.os.ShellCallback;
 import android.os.storage.StorageManager;
-import android.text.TextUtils;
 import android.util.Log;
 import android.util.Slog;
 
 import com.android.internal.logging.MetricsLogger;
 import com.android.server.pm.Installer.InstallerException;
+import com.android.server.pm.dex.DexoptOptions;
 
 import java.io.File;
 import java.io.FileDescriptor;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
@@ -55,7 +53,8 @@
     private final static boolean DEBUG_DEXOPT = true;
 
     // The synthetic library dependencies denoting "no checks."
-    private final static String[] NO_LIBRARIES = new String[] { "&" };
+    private final static String[] NO_LIBRARIES =
+            new String[] { PackageDexOptimizer.SKIP_SHARED_LIBRARY_CHECK };
 
     // The amount of "available" (free - low threshold) space necessary at the start of an OTA to
     // not bulk-delete unused apps' odex files.
@@ -152,7 +151,7 @@
             Log.i(TAG, "Low on space, deleting oat files in an attempt to free up space: "
                     + PackageManagerServiceUtils.packagesToString(others));
             for (PackageParser.Package pkg : others) {
-                deleteOatArtifactsOfPackage(pkg);
+                mPackageManagerService.deleteOatArtifactsOfPackage(pkg.packageName);
             }
         }
         long spaceAvailableNow = getAvailableSpace();
@@ -242,30 +241,6 @@
         return usableSpace - lowThreshold;
     }
 
-    private static String getOatDir(PackageParser.Package pkg) {
-        if (!pkg.canHaveOatDir()) {
-            return null;
-        }
-        File codePath = new File(pkg.codePath);
-        if (codePath.isDirectory()) {
-            return PackageDexOptimizer.getOatDir(codePath).getAbsolutePath();
-        }
-        return null;
-    }
-
-    private void deleteOatArtifactsOfPackage(PackageParser.Package pkg) {
-        String[] instructionSets = getAppDexInstructionSets(pkg.applicationInfo);
-        for (String codePath : pkg.getAllCodePaths()) {
-            for (String isa : instructionSets) {
-                try {
-                    mPackageManagerService.mInstaller.deleteOdex(codePath, isa, getOatDir(pkg));
-                } catch (InstallerException e) {
-                    Log.e(TAG, "Failed deleting oat files for " + codePath, e);
-                }
-            }
-        }
-    }
-
     /**
      * Generate all dexopt commands for the given package.
      */
@@ -285,11 +260,12 @@
             public void dexopt(String apkPath, int uid, @Nullable String pkgName,
                     String instructionSet, int dexoptNeeded, @Nullable String outputPath,
                     int dexFlags, String compilerFilter, @Nullable String volumeUuid,
-                    @Nullable String sharedLibraries, @Nullable String seInfo) throws InstallerException {
+                    @Nullable String sharedLibraries, @Nullable String seInfo, boolean downgrade)
+                    throws InstallerException {
                 final StringBuilder builder = new StringBuilder();
 
-                // The version. Right now it's 2.
-                builder.append("2 ");
+                // The version. Right now it's 3.
+                builder.append("3 ");
 
                 builder.append("dexopt");
 
@@ -304,6 +280,7 @@
                 encodeParameter(builder, volumeUuid);
                 encodeParameter(builder, sharedLibraries);
                 encodeParameter(builder, seInfo);
+                encodeParameter(builder, downgrade);
 
                 commands.add(builder.toString());
             }
@@ -338,12 +315,13 @@
             libraryDependencies = NO_LIBRARIES;
         }
 
+
         optimizer.performDexOpt(pkg, libraryDependencies,
-                null /* ISAs */, false /* checkProfiles */,
-                getCompilerFilterForReason(compilationReason),
+                null /* ISAs */,
                 null /* CompilerStats.PackageStats */,
-                mPackageManagerService.getDexManager().isUsedByOtherApps(pkg.packageName),
-                true /* bootComplete */);
+                mPackageManagerService.getDexManager().getPackageUseInfoOrDefault(pkg.packageName),
+                new DexoptOptions(pkg.packageName, compilationReason,
+                        DexoptOptions.DEXOPT_BOOT_COMPLETE));
 
         return commands;
     }
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
index 2b7bd34..140c03e 100644
--- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java
+++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
@@ -19,9 +19,7 @@
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageInfo;
 import android.content.pm.PackageParser;
-import android.os.Environment;
 import android.os.FileUtils;
 import android.os.PowerManager;
 import android.os.SystemClock;
@@ -29,17 +27,21 @@
 import android.os.WorkSource;
 import android.util.Log;
 import android.util.Slog;
-import android.util.SparseArray;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.pm.Installer.InstallerException;
+import com.android.server.pm.dex.DexManager;
+import com.android.server.pm.dex.DexoptOptions;
+import com.android.server.pm.dex.DexoptUtils;
+import com.android.server.pm.dex.PackageDexUsage;
 
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
-import java.util.Set;
+import java.util.Map;
 
 import dalvik.system.DexFile;
 
@@ -112,17 +114,16 @@
      * synchronized on {@link #mInstallLock}.
      */
     int performDexOpt(PackageParser.Package pkg, String[] sharedLibraries,
-            String[] instructionSets, boolean checkProfiles, String targetCompilationFilter,
-            CompilerStats.PackageStats packageStats, boolean isUsedByOtherApps,
-            boolean bootComplete) {
+            String[] instructionSets, CompilerStats.PackageStats packageStats,
+            PackageDexUsage.PackageUseInfo packageUseInfo, DexoptOptions options) {
         if (!canOptimizePackage(pkg)) {
             return DEX_OPT_SKIPPED;
         }
         synchronized (mInstallLock) {
             final long acquireTime = acquireWakeLockLI(pkg.applicationInfo.uid);
             try {
-                return performDexOptLI(pkg, sharedLibraries, instructionSets, checkProfiles,
-                        targetCompilationFilter, packageStats, isUsedByOtherApps, bootComplete);
+                return performDexOptLI(pkg, sharedLibraries, instructionSets,
+                        packageStats, packageUseInfo, options);
             } finally {
                 releaseWakeLockLI(acquireTime);
             }
@@ -135,46 +136,73 @@
      */
     @GuardedBy("mInstallLock")
     private int performDexOptLI(PackageParser.Package pkg, String[] sharedLibraries,
-            String[] targetInstructionSets, boolean checkForProfileUpdates,
-            String targetCompilerFilter, CompilerStats.PackageStats packageStats,
-            boolean isUsedByOtherApps, boolean bootComplete) {
+            String[] targetInstructionSets, CompilerStats.PackageStats packageStats,
+            PackageDexUsage.PackageUseInfo packageUseInfo, DexoptOptions options) {
         final String[] instructionSets = targetInstructionSets != null ?
                 targetInstructionSets : getAppDexInstructionSets(pkg.applicationInfo);
         final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);
         final List<String> paths = pkg.getAllCodePaths();
         final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid);
 
-        final String compilerFilter = getRealCompilerFilter(pkg.applicationInfo,
-                targetCompilerFilter, isUsedByOtherApps);
-        final boolean profileUpdated = checkForProfileUpdates &&
-                isProfileUpdated(pkg, sharedGid, compilerFilter);
+        // Get the class loader context dependencies.
+        // 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.applicationInfo.flags & ApplicationInfo.FLAG_HAS_CODE) != 0;
+        for (int i = 1; i < paths.size(); i++) {
+            pathsWithCode[i] = (pkg.splitFlags[i - 1] & ApplicationInfo.FLAG_HAS_CODE) != 0;
+        }
+        String[] classLoaderContexts = DexoptUtils.getClassLoaderContexts(
+                pkg.applicationInfo, sharedLibraries, pathsWithCode);
 
-        final String sharedLibrariesPath = getSharedLibrariesPath(sharedLibraries);
-        // Get the dexopt flags after getRealCompilerFilter to make sure we get the correct flags.
-        final int dexoptFlags = getDexFlags(pkg, compilerFilter, bootComplete);
-        // Get the dependencies of each split in the package. For each code path in the package,
-        // this array contains the relative paths of each split it depends on, separated by colons.
-        String[] splitDependencies = getSplitDependencies(pkg);
+        // Sanity check that we do not call dexopt with inconsistent data.
+        if (paths.size() != classLoaderContexts.length) {
+            String[] splitCodePaths = pkg.applicationInfo.getSplitCodePaths();
+            throw new IllegalStateException("Inconsistent information "
+                + "between PackageParser.Package and its ApplicationInfo. "
+                + "pkg.getAllCodePaths=" + paths
+                + " pkg.applicationInfo.getBaseCodePath=" + pkg.applicationInfo.getBaseCodePath()
+                + " pkg.applicationInfo.getSplitCodePaths="
+                + (splitCodePaths == null ? "null" : Arrays.toString(splitCodePaths)));
+        }
 
         int result = DEX_OPT_SKIPPED;
         for (int i = 0; i < paths.size(); i++) {
             // Skip paths that have no code.
-            if ((i == 0 && (pkg.applicationInfo.flags & ApplicationInfo.FLAG_HAS_CODE) == 0) ||
-                    (i != 0 && (pkg.splitFlags[i - 1] & ApplicationInfo.FLAG_HAS_CODE) == 0)) {
+            if (!pathsWithCode[i]) {
                 continue;
             }
+            if (classLoaderContexts[i] == null) {
+                throw new IllegalStateException("Inconsistent information in the "
+                        + "package structure. A split is marked to contain code "
+                        + "but has no dependency listed. Index=" + i + " path=" + paths.get(i));
+            }
+
             // Append shared libraries with split dependencies for this split.
             String path = paths.get(i);
-            String sharedLibrariesPathWithSplits;
-            if (sharedLibrariesPath != null && splitDependencies[i] != null) {
-                sharedLibrariesPathWithSplits = sharedLibrariesPath + ":" + splitDependencies[i];
-            } else {
-                sharedLibrariesPathWithSplits =
-                        splitDependencies[i] != null ? splitDependencies[i] : sharedLibrariesPath;
+            if (options.getSplitName() != null) {
+                // We are asked to compile only a specific split. Check that the current path is
+                // what we are looking for.
+                if (!options.getSplitName().equals(new File(path).getName())) {
+                    continue;
+                }
             }
+
+            final boolean isUsedByOtherApps = options.isDexoptAsSharedLibrary()
+                    || packageUseInfo.isUsedByOtherApps(path);
+            final String compilerFilter = getRealCompilerFilter(pkg.applicationInfo,
+                options.getCompilerFilter(), isUsedByOtherApps);
+            final boolean profileUpdated = options.isCheckForProfileUpdates() &&
+                isProfileUpdated(pkg, sharedGid, compilerFilter);
+
+            // Get the dexopt flags after getRealCompilerFilter to make sure we get the correct
+            // flags.
+            final int dexoptFlags = getDexFlags(pkg, compilerFilter, options.isBootComplete());
+
             for (String dexCodeIsa : dexCodeInstructionSets) {
-                int newResult = dexOptPath(pkg, path, dexCodeIsa, compilerFilter, profileUpdated,
-                        sharedLibrariesPathWithSplits, dexoptFlags, sharedGid, packageStats);
+                int newResult = dexOptPath(pkg, path, dexCodeIsa, compilerFilter,
+                        profileUpdated, classLoaderContexts[i], dexoptFlags, sharedGid,
+                        packageStats, options.isDowngrade());
                 // The end result is:
                 //  - FAILED if any path failed,
                 //  - PERFORMED if at least one path needed compilation,
@@ -198,8 +226,8 @@
     @GuardedBy("mInstallLock")
     private int dexOptPath(PackageParser.Package pkg, String path, String isa,
             String compilerFilter, boolean profileUpdated, String sharedLibrariesPath,
-            int dexoptFlags, int uid, CompilerStats.PackageStats packageStats) {
-        int dexoptNeeded = getDexoptNeeded(path, isa, compilerFilter, profileUpdated);
+            int dexoptFlags, int uid, CompilerStats.PackageStats packageStats, boolean downgrade) {
+        int dexoptNeeded = getDexoptNeeded(path, isa, compilerFilter, profileUpdated, downgrade);
         if (Math.abs(dexoptNeeded) == DexFile.NO_DEXOPT_NEEDED) {
             return DEX_OPT_SKIPPED;
         }
@@ -218,8 +246,12 @@
         try {
             long startTime = System.currentTimeMillis();
 
+            // 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.
             mInstaller.dexopt(path, uid, pkg.packageName, isa, dexoptNeeded, oatDir, dexoptFlags,
-                    compilerFilter, pkg.volumeUuid, sharedLibrariesPath, pkg.applicationInfo.seInfo);
+                    compilerFilter, pkg.volumeUuid, sharedLibrariesPath, pkg.applicationInfo.seInfo,
+                    false /* downgrade*/);
 
             if (packageStats != null) {
                 long endTime = System.currentTimeMillis();
@@ -246,13 +278,12 @@
      * throwing exceptions). Or maybe make a separate call to installd to get DexOptNeeded, though
      * that seems wasteful.
      */
-    public int dexOptSecondaryDexPath(ApplicationInfo info, String path, Set<String> isas,
-            String compilerFilter, boolean isUsedByOtherApps) {
+    public int dexOptSecondaryDexPath(ApplicationInfo info, String path,
+            PackageDexUsage.DexUseInfo dexUseInfo, DexoptOptions options) {
         synchronized (mInstallLock) {
             final long acquireTime = acquireWakeLockLI(info.uid);
             try {
-                return dexOptSecondaryDexPathLI(info, path, isas, compilerFilter,
-                        isUsedByOtherApps);
+                return dexOptSecondaryDexPathLI(info, path, dexUseInfo, options);
             } finally {
                 releaseWakeLockLI(acquireTime);
             }
@@ -293,9 +324,16 @@
     }
 
     @GuardedBy("mInstallLock")
-    private int dexOptSecondaryDexPathLI(ApplicationInfo info, String path, Set<String> isas,
-            String compilerFilter, boolean isUsedByOtherApps) {
-        compilerFilter = getRealCompilerFilter(info, compilerFilter, isUsedByOtherApps);
+    private int dexOptSecondaryDexPathLI(ApplicationInfo info, String path,
+            PackageDexUsage.DexUseInfo dexUseInfo, DexoptOptions options) {
+        if (options.isDexoptOnlySharedDex() && !dexUseInfo.isUsedByOtherApps()) {
+            // We are asked to optimize only the dex files used by other apps and this is not
+            // on of them: skip it.
+            return DEX_OPT_SKIPPED;
+        }
+
+        String compilerFilter = getRealCompilerFilter(info, options.getCompilerFilter(),
+                dexUseInfo.isUsedByOtherApps());
         // Get the dexopt flags after getRealCompilerFilter to make sure we get the correct flags.
         // Secondary dex files are currently not compiled at boot.
         int dexoptFlags = getDexFlags(info, compilerFilter, /* bootComplete */ true)
@@ -312,19 +350,27 @@
             return DEX_OPT_FAILED;
         }
         Log.d(TAG, "Running dexopt on: " + path
-                + " pkg=" + info.packageName + " isa=" + isas
+                + " pkg=" + info.packageName + " isa=" + dexUseInfo.getLoaderIsas()
                 + " dexoptFlags=" + printDexoptFlags(dexoptFlags)
                 + " target-filter=" + compilerFilter);
 
+        // TODO(calin): b/64530081 b/66984396. Use SKIP_SHARED_LIBRARY_CHECK for the context
+        // (instead of dexUseInfo.getClassLoaderContext()) in order to compile secondary dex files
+        // in isolation (and avoid to extract/verify the main apk if it's in the class path).
+        // Note this trades correctness for performance since the resulting slow down is
+        // unacceptable in some cases until b/64530081 is fixed.
+        String classLoaderContext = SKIP_SHARED_LIBRARY_CHECK;
+
         try {
-            for (String isa : isas) {
+            for (String isa : dexUseInfo.getLoaderIsas()) {
                 // Reuse the same dexopt path as for the primary apks. We don't need all the
                 // arguments as some (dexopNeeded and oatDir) will be computed by installd because
                 // system server cannot read untrusted app content.
                 // TODO(calin): maybe add a separate call.
                 mInstaller.dexopt(path, info.uid, info.packageName, isa, /*dexoptNeeded*/ 0,
                         /*oatDir*/ null, dexoptFlags,
-                        compilerFilter, info.volumeUuid, SKIP_SHARED_LIBRARY_CHECK, info.seInfoUser);
+                        compilerFilter, info.volumeUuid, classLoaderContext, info.seInfoUser,
+                        options.isDowngrade());
             }
 
             return DEX_OPT_PERFORMED;
@@ -352,26 +398,51 @@
     /**
      * Dumps the dexopt state of the given package {@code pkg} to the given {@code PrintWriter}.
      */
-    void dumpDexoptState(IndentingPrintWriter pw, PackageParser.Package pkg) {
+    void dumpDexoptState(IndentingPrintWriter pw, PackageParser.Package pkg,
+            PackageDexUsage.PackageUseInfo useInfo) {
         final String[] instructionSets = getAppDexInstructionSets(pkg.applicationInfo);
         final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);
 
         final List<String> paths = pkg.getAllCodePathsExcludingResourceOnly();
 
-        for (String instructionSet : dexCodeInstructionSets) {
-             pw.println("Instruction Set: " + instructionSet);
-             pw.increaseIndent();
-             for (String path : paths) {
-                  String status = null;
-                  try {
-                      status = DexFile.getDexFileStatus(path, instructionSet);
-                  } catch (IOException ioe) {
-                      status = "[Exception]: " + ioe.getMessage();
-                  }
-                  pw.println("path: " + path);
-                  pw.println("status: " + status);
-             }
-             pw.decreaseIndent();
+        for (String path : paths) {
+            pw.println("path: " + path);
+            pw.increaseIndent();
+
+            for (String isa : dexCodeInstructionSets) {
+                String status = null;
+                try {
+                    status = DexFile.getDexFileStatus(path, isa);
+                } catch (IOException ioe) {
+                     status = "[Exception]: " + ioe.getMessage();
+                }
+                pw.println(isa + ": " + status);
+            }
+
+            if (useInfo.isUsedByOtherApps(path)) {
+                pw.println("used by other apps: " + useInfo.getLoadingPackages(path));
+            }
+
+            Map<String, PackageDexUsage.DexUseInfo> dexUseInfoMap = useInfo.getDexUseInfoMap();
+
+            if (!dexUseInfoMap.isEmpty()) {
+                pw.println("known secondary dex files:");
+                pw.increaseIndent();
+                for (Map.Entry<String, PackageDexUsage.DexUseInfo> e : dexUseInfoMap.entrySet()) {
+                    String dex = e.getKey();
+                    PackageDexUsage.DexUseInfo dexUseInfo = e.getValue();
+                    pw.println(dex);
+                    pw.increaseIndent();
+                    // TODO(calin): get the status of the oat file (needs installd call)
+                    pw.println("class loader context: " + dexUseInfo.getClassLoaderContext());
+                    if (dexUseInfo.isUsedByOtherApps()) {
+                        pw.println("used by other apps: " + dexUseInfo.getLoadingPackages());
+                    }
+                    pw.decreaseIndent();
+                }
+                pw.decreaseIndent();
+            }
+            pw.decreaseIndent();
         }
     }
 
@@ -389,8 +460,9 @@
         }
 
         if (isProfileGuidedCompilerFilter(targetCompilerFilter) && isUsedByOtherApps) {
-            // If the dex files is used by other apps, we cannot use profile-guided compilation.
-            return getNonProfileGuidedCompilerFilter(targetCompilerFilter);
+            // If the dex files is used by other apps, apply the shared filter.
+            return PackageManagerServiceCompilerMapping.getCompilerFilterForReason(
+                    PackageManagerService.REASON_SHARED);
         }
 
         return targetCompilerFilter;
@@ -425,10 +497,11 @@
      * configuration (isa, compiler filter, profile).
      */
     private int getDexoptNeeded(String path, String isa, String compilerFilter,
-            boolean newProfile) {
+            boolean newProfile, boolean downgrade) {
         int dexoptNeeded;
         try {
-            dexoptNeeded = DexFile.getDexOptNeeded(path, isa, compilerFilter, newProfile);
+            dexoptNeeded = DexFile.getDexOptNeeded(path, isa, compilerFilter, newProfile,
+                    downgrade);
         } catch (IOException ioe) {
             Slog.w(TAG, "IOException reading apk: " + path, ioe);
             return DEX_OPT_FAILED;
@@ -437,86 +510,6 @@
     }
 
     /**
-     * Computes the shared libraries path that should be passed to dexopt.
-     */
-    private String getSharedLibrariesPath(String[] sharedLibraries) {
-        if (sharedLibraries == null || sharedLibraries.length == 0) {
-            return null;
-        }
-        StringBuilder sb = new StringBuilder();
-        for (String lib : sharedLibraries) {
-            if (sb.length() != 0) {
-                sb.append(":");
-            }
-            sb.append(lib);
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Walks dependency tree and gathers the dependencies for each split in a split apk.
-     * The split paths are stored as relative paths, separated by colons.
-     */
-    private String[] getSplitDependencies(PackageParser.Package pkg) {
-        // Convert all the code paths to relative paths.
-        String baseCodePath = new File(pkg.baseCodePath).getParent();
-        List<String> paths = pkg.getAllCodePaths();
-        String[] splitDependencies = new String[paths.size()];
-        for (int i = 0; i < paths.size(); i++) {
-            File pathFile = new File(paths.get(i));
-            String fileName = pathFile.getName();
-            paths.set(i, fileName);
-
-            // Sanity check that the base paths of the splits are all the same.
-            String basePath = pathFile.getParent();
-            if (!basePath.equals(baseCodePath)) {
-                Slog.wtf(TAG, "Split paths have different base paths: " + basePath + " and " +
-                        baseCodePath);
-            }
-        }
-
-        // If there are no other dependencies, fill in the implicit dependency on the base apk.
-        SparseArray<int[]> dependencies = pkg.applicationInfo.splitDependencies;
-        if (dependencies == null) {
-            for (int i = 1; i < paths.size(); i++) {
-                splitDependencies[i] = paths.get(0);
-            }
-            return splitDependencies;
-        }
-
-        // Fill in the dependencies, skipping the base apk which has no dependencies.
-        for (int i = 1; i < dependencies.size(); i++) {
-            getParentDependencies(dependencies.keyAt(i), paths, dependencies, splitDependencies);
-        }
-
-        return splitDependencies;
-    }
-
-    /**
-     * Recursive method to generate dependencies for a particular split.
-     * The index is a key from the package's splitDependencies.
-     */
-    private String getParentDependencies(int index, List<String> paths,
-            SparseArray<int[]> dependencies, String[] splitDependencies) {
-        // The base apk is always first, and has no dependencies.
-        if (index == 0) {
-            return null;
-        }
-        // Return the result if we've computed the dependencies for this index already.
-        if (splitDependencies[index] != null) {
-            return splitDependencies[index];
-        }
-        // Get the dependencies for the parent of this index and append its path to it.
-        int parent = dependencies.get(index)[0];
-        String parentDependencies =
-                getParentDependencies(parent, paths, dependencies, splitDependencies);
-        String path = parentDependencies == null ? paths.get(parent) :
-                parentDependencies + ":" + paths.get(parent);
-        splitDependencies[index] = path;
-        return path;
-    }
-
-    /**
      * Checks if there is an update on the profile information of the {@code pkg}.
      * If the compiler filter is not profile guided the method returns false.
      *
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index 8fc1356..49bf8cc 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -16,17 +16,6 @@
 
 package com.android.server.pm;
 
-import static com.android.internal.util.XmlUtils.readBitmapAttribute;
-import static com.android.internal.util.XmlUtils.readBooleanAttribute;
-import static com.android.internal.util.XmlUtils.readIntAttribute;
-import static com.android.internal.util.XmlUtils.readLongAttribute;
-import static com.android.internal.util.XmlUtils.readStringAttribute;
-import static com.android.internal.util.XmlUtils.readUriAttribute;
-import static com.android.internal.util.XmlUtils.writeBooleanAttribute;
-import static com.android.internal.util.XmlUtils.writeIntAttribute;
-import static com.android.internal.util.XmlUtils.writeLongAttribute;
-import static com.android.internal.util.XmlUtils.writeStringAttribute;
-import static com.android.internal.util.XmlUtils.writeUriAttribute;
 import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
 import static org.xmlpull.v1.XmlPullParser.START_TAG;
 
@@ -54,8 +43,6 @@
 import android.content.pm.ParceledListSlice;
 import android.content.pm.VersionedPackage;
 import android.graphics.Bitmap;
-import android.graphics.Bitmap.CompressFormat;
-import android.graphics.BitmapFactory;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Bundle;
@@ -84,9 +71,6 @@
 import android.util.SparseIntArray;
 import android.util.Xml;
 
-import java.io.CharArrayWriter;
-import libcore.io.IoUtils;
-
 import com.android.internal.R;
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.content.PackageHelper;
@@ -97,10 +81,13 @@
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.IoThread;
 
+import libcore.io.IoUtils;
+
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlSerializer;
 
+import java.io.CharArrayWriter;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -125,32 +112,6 @@
 
     /** XML constants used in {@link #mSessionsFile} */
     private static final String TAG_SESSIONS = "sessions";
-    private static final String TAG_SESSION = "session";
-    private static final String TAG_GRANTED_RUNTIME_PERMISSION = "granted-runtime-permission";
-    private static final String ATTR_SESSION_ID = "sessionId";
-    private static final String ATTR_USER_ID = "userId";
-    private static final String ATTR_INSTALLER_PACKAGE_NAME = "installerPackageName";
-    private static final String ATTR_INSTALLER_UID = "installerUid";
-    private static final String ATTR_CREATED_MILLIS = "createdMillis";
-    private static final String ATTR_SESSION_STAGE_DIR = "sessionStageDir";
-    private static final String ATTR_SESSION_STAGE_CID = "sessionStageCid";
-    private static final String ATTR_PREPARED = "prepared";
-    private static final String ATTR_SEALED = "sealed";
-    private static final String ATTR_MODE = "mode";
-    private static final String ATTR_INSTALL_FLAGS = "installFlags";
-    private static final String ATTR_INSTALL_LOCATION = "installLocation";
-    private static final String ATTR_SIZE_BYTES = "sizeBytes";
-    private static final String ATTR_APP_PACKAGE_NAME = "appPackageName";
-    @Deprecated
-    private static final String ATTR_APP_ICON = "appIcon";
-    private static final String ATTR_APP_LABEL = "appLabel";
-    private static final String ATTR_ORIGINATING_URI = "originatingUri";
-    private static final String ATTR_ORIGINATING_UID = "originatingUid";
-    private static final String ATTR_REFERRER_URI = "referrerUri";
-    private static final String ATTR_ABI_OVERRIDE = "abiOverride";
-    private static final String ATTR_VOLUME_UUID = "volumeUuid";
-    private static final String ATTR_NAME = "name";
-    private static final String ATTR_INSTALL_REASON = "installRason";
 
     /** Automatically destroy sessions older than this */
     private static final long MAX_AGE_MILLIS = 3 * DateUtils.DAY_IN_MILLIS;
@@ -357,8 +318,16 @@
             while ((type = in.next()) != END_DOCUMENT) {
                 if (type == START_TAG) {
                     final String tag = in.getName();
-                    if (TAG_SESSION.equals(tag)) {
-                        final PackageInstallerSession session = readSessionLocked(in);
+                    if (PackageInstallerSession.TAG_SESSION.equals(tag)) {
+                        final PackageInstallerSession session;
+                        try {
+                            session = PackageInstallerSession.readFromXml(in, mInternalCallback,
+                                    mContext, mPm, mInstallThread.getLooper(), mSessionsDir);
+                        } catch (Exception e) {
+                            Slog.e(TAG, "Could not read session", e);
+                            continue;
+                        }
+
                         final long age = System.currentTimeMillis() - session.createdMillis;
 
                         final boolean valid;
@@ -397,53 +366,10 @@
         session.dump(pw);
         mHistoricalSessions.add(writer.toString());
 
+        int installerUid = session.getInstallerUid();
         // Increment the number of sessions by this installerUid.
-        mHistoricalSessionsByInstaller.put(
-                session.installerUid,
-                mHistoricalSessionsByInstaller.get(session.installerUid) + 1);
-    }
-
-    private PackageInstallerSession readSessionLocked(XmlPullParser in) throws IOException,
-            XmlPullParserException {
-        final int sessionId = readIntAttribute(in, ATTR_SESSION_ID);
-        final int userId = readIntAttribute(in, ATTR_USER_ID);
-        final String installerPackageName = readStringAttribute(in, ATTR_INSTALLER_PACKAGE_NAME);
-        final int installerUid = readIntAttribute(in, ATTR_INSTALLER_UID, mPm.getPackageUid(
-                installerPackageName, PackageManager.MATCH_UNINSTALLED_PACKAGES, userId));
-        final long createdMillis = readLongAttribute(in, ATTR_CREATED_MILLIS);
-        final String stageDirRaw = readStringAttribute(in, ATTR_SESSION_STAGE_DIR);
-        final File stageDir = (stageDirRaw != null) ? new File(stageDirRaw) : null;
-        final String stageCid = readStringAttribute(in, ATTR_SESSION_STAGE_CID);
-        final boolean prepared = readBooleanAttribute(in, ATTR_PREPARED, true);
-        final boolean sealed = readBooleanAttribute(in, ATTR_SEALED);
-
-        final SessionParams params = new SessionParams(
-                SessionParams.MODE_INVALID);
-        params.mode = readIntAttribute(in, ATTR_MODE);
-        params.installFlags = readIntAttribute(in, ATTR_INSTALL_FLAGS);
-        params.installLocation = readIntAttribute(in, ATTR_INSTALL_LOCATION);
-        params.sizeBytes = readLongAttribute(in, ATTR_SIZE_BYTES);
-        params.appPackageName = readStringAttribute(in, ATTR_APP_PACKAGE_NAME);
-        params.appIcon = readBitmapAttribute(in, ATTR_APP_ICON);
-        params.appLabel = readStringAttribute(in, ATTR_APP_LABEL);
-        params.originatingUri = readUriAttribute(in, ATTR_ORIGINATING_URI);
-        params.originatingUid =
-                readIntAttribute(in, ATTR_ORIGINATING_UID, SessionParams.UID_UNKNOWN);
-        params.referrerUri = readUriAttribute(in, ATTR_REFERRER_URI);
-        params.abiOverride = readStringAttribute(in, ATTR_ABI_OVERRIDE);
-        params.volumeUuid = readStringAttribute(in, ATTR_VOLUME_UUID);
-        params.grantedRuntimePermissions = readGrantedRuntimePermissions(in);
-        params.installReason = readIntAttribute(in, ATTR_INSTALL_REASON);
-
-        final File appIconFile = buildAppIconFile(sessionId);
-        if (appIconFile.exists()) {
-            params.appIcon = BitmapFactory.decodeFile(appIconFile.getAbsolutePath());
-            params.appIconLastModified = appIconFile.lastModified();
-        }
-
-        return new PackageInstallerSession(mInternalCallback, mContext, mPm,
-                mInstallThread.getLooper(), sessionId, userId, installerPackageName, installerUid,
-                params, createdMillis, stageDir, stageCid, prepared, sealed);
+        mHistoricalSessionsByInstaller.put(installerUid,
+                mHistoricalSessionsByInstaller.get(installerUid) + 1);
     }
 
     private void writeSessionsLocked() {
@@ -460,7 +386,7 @@
             final int size = mSessions.size();
             for (int i = 0; i < size; i++) {
                 final PackageInstallerSession session = mSessions.valueAt(i);
-                writeSessionLocked(out, session);
+                session.write(out, mSessionsDir);
             }
             out.endTag(null, TAG_SESSIONS);
             out.endDocument();
@@ -473,106 +399,6 @@
         }
     }
 
-    private void writeSessionLocked(XmlSerializer out, PackageInstallerSession session)
-            throws IOException {
-        final SessionParams params = session.params;
-
-        out.startTag(null, TAG_SESSION);
-
-        writeIntAttribute(out, ATTR_SESSION_ID, session.sessionId);
-        writeIntAttribute(out, ATTR_USER_ID, session.userId);
-        writeStringAttribute(out, ATTR_INSTALLER_PACKAGE_NAME,
-                session.installerPackageName);
-        writeIntAttribute(out, ATTR_INSTALLER_UID, session.installerUid);
-        writeLongAttribute(out, ATTR_CREATED_MILLIS, session.createdMillis);
-        if (session.stageDir != null) {
-            writeStringAttribute(out, ATTR_SESSION_STAGE_DIR,
-                    session.stageDir.getAbsolutePath());
-        }
-        if (session.stageCid != null) {
-            writeStringAttribute(out, ATTR_SESSION_STAGE_CID, session.stageCid);
-        }
-        writeBooleanAttribute(out, ATTR_PREPARED, session.isPrepared());
-        writeBooleanAttribute(out, ATTR_SEALED, session.isSealed());
-
-        writeIntAttribute(out, ATTR_MODE, params.mode);
-        writeIntAttribute(out, ATTR_INSTALL_FLAGS, params.installFlags);
-        writeIntAttribute(out, ATTR_INSTALL_LOCATION, params.installLocation);
-        writeLongAttribute(out, ATTR_SIZE_BYTES, params.sizeBytes);
-        writeStringAttribute(out, ATTR_APP_PACKAGE_NAME, params.appPackageName);
-        writeStringAttribute(out, ATTR_APP_LABEL, params.appLabel);
-        writeUriAttribute(out, ATTR_ORIGINATING_URI, params.originatingUri);
-        writeIntAttribute(out, ATTR_ORIGINATING_UID, params.originatingUid);
-        writeUriAttribute(out, ATTR_REFERRER_URI, params.referrerUri);
-        writeStringAttribute(out, ATTR_ABI_OVERRIDE, params.abiOverride);
-        writeStringAttribute(out, ATTR_VOLUME_UUID, params.volumeUuid);
-        writeIntAttribute(out, ATTR_INSTALL_REASON, params.installReason);
-
-        // Persist app icon if changed since last written
-        final File appIconFile = buildAppIconFile(session.sessionId);
-        if (params.appIcon == null && appIconFile.exists()) {
-            appIconFile.delete();
-        } else if (params.appIcon != null
-                && appIconFile.lastModified() != params.appIconLastModified) {
-            if (LOGD) Slog.w(TAG, "Writing changed icon " + appIconFile);
-            FileOutputStream os = null;
-            try {
-                os = new FileOutputStream(appIconFile);
-                params.appIcon.compress(CompressFormat.PNG, 90, os);
-            } catch (IOException e) {
-                Slog.w(TAG, "Failed to write icon " + appIconFile + ": " + e.getMessage());
-            } finally {
-                IoUtils.closeQuietly(os);
-            }
-
-            params.appIconLastModified = appIconFile.lastModified();
-        }
-
-        writeGrantedRuntimePermissions(out, params.grantedRuntimePermissions);
-
-        out.endTag(null, TAG_SESSION);
-    }
-
-    private static void writeGrantedRuntimePermissions(XmlSerializer out,
-            String[] grantedRuntimePermissions) throws IOException {
-        if (grantedRuntimePermissions != null) {
-            for (String permission : grantedRuntimePermissions) {
-                out.startTag(null, TAG_GRANTED_RUNTIME_PERMISSION);
-                writeStringAttribute(out, ATTR_NAME, permission);
-                out.endTag(null, TAG_GRANTED_RUNTIME_PERMISSION);
-            }
-        }
-    }
-
-    private static String[] readGrantedRuntimePermissions(XmlPullParser in)
-            throws IOException, XmlPullParserException {
-        List<String> permissions = null;
-
-        final int outerDepth = in.getDepth();
-        int type;
-        while ((type = in.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG || in.getDepth() > outerDepth)) {
-            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                continue;
-            }
-            if (TAG_GRANTED_RUNTIME_PERMISSION.equals(in.getName())) {
-                String permission = readStringAttribute(in, ATTR_NAME);
-                if (permissions == null) {
-                    permissions = new ArrayList<>();
-                }
-                permissions.add(permission);
-            }
-        }
-
-        if (permissions == null) {
-            return null;
-        }
-
-        String[] permissionsArray = new String[permissions.size()];
-        permissions.toArray(permissionsArray);
-        return permissionsArray;
-    }
-
     private File buildAppIconFile(int sessionId) {
         return new File(mSessionsDir, "app_icon." + sessionId + ".png");
     }
@@ -616,6 +442,10 @@
             params.installFlags &= ~PackageManager.INSTALL_ALL_USERS;
             params.installFlags &= ~PackageManager.INSTALL_ALLOW_TEST;
             params.installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
+            if ((params.installFlags & PackageManager.INSTALL_VIRTUAL_PRELOAD) != 0
+                    && !mPm.isCallerVerifier(callingUid)) {
+                params.installFlags &= ~PackageManager.INSTALL_VIRTUAL_PRELOAD;
+            }
         }
 
         // Only system components can circumvent runtime permissions when installing.
@@ -882,9 +712,11 @@
         synchronized (mSessions) {
             for (int i = 0; i < mSessions.size(); i++) {
                 final PackageInstallerSession session = mSessions.valueAt(i);
-                if (Objects.equals(session.installerPackageName, installerPackageName)
+
+                SessionInfo info = session.generateInfo(false);
+                if (Objects.equals(info.getInstallerPackageName(), installerPackageName)
                         && session.userId == userId) {
-                    result.add(session.generateInfo(false));
+                    result.add(info);
                 }
             }
         }
@@ -959,7 +791,7 @@
         final int size = sessions.size();
         for (int i = 0; i < size; i++) {
             final PackageInstallerSession session = sessions.valueAt(i);
-            if (session.installerUid == installerUid) {
+            if (session.getInstallerUid() == installerUid) {
                 count++;
             }
         }
@@ -971,7 +803,7 @@
         if (callingUid == Process.ROOT_UID) {
             return true;
         } else {
-            return (session != null) && (callingUid == session.installerUid);
+            return (session != null) && (callingUid == session.getInstallerUid());
         }
     }
 
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 5c54ba8..3f1c8a1 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -25,9 +25,23 @@
 import static android.system.OsConstants.O_RDONLY;
 import static android.system.OsConstants.O_WRONLY;
 
+import static com.android.internal.util.XmlUtils.readBitmapAttribute;
+import static com.android.internal.util.XmlUtils.readBooleanAttribute;
+import static com.android.internal.util.XmlUtils.readIntAttribute;
+import static com.android.internal.util.XmlUtils.readLongAttribute;
+import static com.android.internal.util.XmlUtils.readStringAttribute;
+import static com.android.internal.util.XmlUtils.readUriAttribute;
+import static com.android.internal.util.XmlUtils.writeBooleanAttribute;
+import static com.android.internal.util.XmlUtils.writeIntAttribute;
+import static com.android.internal.util.XmlUtils.writeLongAttribute;
+import static com.android.internal.util.XmlUtils.writeStringAttribute;
+import static com.android.internal.util.XmlUtils.writeUriAttribute;
 import static com.android.server.pm.PackageInstallerService.prepareExternalStageCid;
 import static com.android.server.pm.PackageInstallerService.prepareStageDir;
 
+import android.Manifest;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.Intent;
@@ -45,6 +59,8 @@
 import android.content.pm.PackageParser.PackageLite;
 import android.content.pm.PackageParser.PackageParserException;
 import android.content.pm.Signature;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.FileBridge;
@@ -53,6 +69,7 @@
 import android.os.Looper;
 import android.os.Message;
 import android.os.ParcelFileDescriptor;
+import android.os.ParcelableException;
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.RevocableFileDescriptor;
@@ -80,9 +97,14 @@
 import libcore.io.IoUtils;
 import libcore.io.Libcore;
 
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.FileFilter;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.security.cert.Certificate;
 import java.util.ArrayList;
@@ -96,6 +118,35 @@
     private static final String REMOVE_SPLIT_MARKER_EXTENSION = ".removed";
 
     private static final int MSG_COMMIT = 0;
+    private static final int MSG_SESSION_FINISHED_WITH_EXCEPTION = 1;
+
+    /** XML constants used for persisting a session */
+    static final String TAG_SESSION = "session";
+    private static final String TAG_GRANTED_RUNTIME_PERMISSION = "granted-runtime-permission";
+    private static final String ATTR_SESSION_ID = "sessionId";
+    private static final String ATTR_USER_ID = "userId";
+    private static final String ATTR_INSTALLER_PACKAGE_NAME = "installerPackageName";
+    private static final String ATTR_INSTALLER_UID = "installerUid";
+    private static final String ATTR_CREATED_MILLIS = "createdMillis";
+    private static final String ATTR_SESSION_STAGE_DIR = "sessionStageDir";
+    private static final String ATTR_SESSION_STAGE_CID = "sessionStageCid";
+    private static final String ATTR_PREPARED = "prepared";
+    private static final String ATTR_SEALED = "sealed";
+    private static final String ATTR_MODE = "mode";
+    private static final String ATTR_INSTALL_FLAGS = "installFlags";
+    private static final String ATTR_INSTALL_LOCATION = "installLocation";
+    private static final String ATTR_SIZE_BYTES = "sizeBytes";
+    private static final String ATTR_APP_PACKAGE_NAME = "appPackageName";
+    @Deprecated
+    private static final String ATTR_APP_ICON = "appIcon";
+    private static final String ATTR_APP_LABEL = "appLabel";
+    private static final String ATTR_ORIGINATING_URI = "originatingUri";
+    private static final String ATTR_ORIGINATING_UID = "originatingUid";
+    private static final String ATTR_REFERRER_URI = "referrerUri";
+    private static final String ATTR_ABI_OVERRIDE = "abiOverride";
+    private static final String ATTR_VOLUME_UUID = "volumeUuid";
+    private static final String ATTR_NAME = "name";
+    private static final String ATTR_INSTALL_REASON = "installRason";
 
     // TODO: enforce INSTALL_ALLOW_TEST
     // TODO: enforce INSTALL_ALLOW_DOWNGRADE
@@ -104,12 +155,9 @@
     private final Context mContext;
     private final PackageManagerService mPm;
     private final Handler mHandler;
-    private final boolean mIsInstallerDeviceOwner;
 
     final int sessionId;
     final int userId;
-    final String installerPackageName;
-    final int installerUid;
     final SessionParams params;
     final long createdMillis;
     final int defaultContainerGid;
@@ -122,6 +170,17 @@
 
     private final Object mLock = new Object();
 
+    /** Uid of the creator of this session. */
+    private final int mOriginalInstallerUid;
+
+    /** Package of the owner of the installer session */
+    @GuardedBy("mLock")
+    private String mInstallerPackageName;
+
+    /** Uid of the owner of the installer session */
+    @GuardedBy("mLock")
+    private int mInstallerUid;
+
     @GuardedBy("mLock")
     private float mClientProgress = 0;
     @GuardedBy("mLock")
@@ -132,18 +191,25 @@
     @GuardedBy("mLock")
     private float mReportedProgress = -1;
 
+    /** State of the session. */
     @GuardedBy("mLock")
     private boolean mPrepared = false;
     @GuardedBy("mLock")
     private boolean mSealed = false;
     @GuardedBy("mLock")
-    private boolean mPermissionsAccepted = false;
+    private boolean mCommitted = false;
     @GuardedBy("mLock")
     private boolean mRelinquished = false;
     @GuardedBy("mLock")
     private boolean mDestroyed = false;
 
+    /** Permissions have been accepted by the user (see {@link #setPermissionsResult}) */
+    @GuardedBy("mLock")
+    private boolean mPermissionsManuallyAccepted = false;
+
+    @GuardedBy("mLock")
     private int mFinalStatus;
+    @GuardedBy("mLock")
     private String mFinalMessage;
 
     @GuardedBy("mLock")
@@ -155,9 +221,13 @@
     private IPackageInstallObserver2 mRemoteObserver;
 
     /** Fields derived from commit parsing */
+    @GuardedBy("mLock")
     private String mPackageName;
+    @GuardedBy("mLock")
     private int mVersionCode;
+    @GuardedBy("mLock")
     private Signature[] mSignatures;
+    @GuardedBy("mLock")
     private Certificate[][] mCertificates;
 
     /**
@@ -205,32 +275,70 @@
     private final Handler.Callback mHandlerCallback = new Handler.Callback() {
         @Override
         public boolean handleMessage(Message msg) {
-            // Cache package manager data without the lock held
-            final PackageInfo pkgInfo = mPm.getPackageInfo(
-                    params.appPackageName, PackageManager.GET_SIGNATURES
-                            | PackageManager.MATCH_STATIC_SHARED_LIBRARIES /*flags*/, userId);
-            final ApplicationInfo appInfo = mPm.getApplicationInfo(
-                    params.appPackageName, 0, userId);
+            switch (msg.what) {
+                case MSG_COMMIT:
+                    synchronized (mLock) {
+                        try {
+                            commitLocked();
+                        } catch (PackageManagerException e) {
+                            final String completeMsg = ExceptionUtils.getCompleteMessage(e);
+                            Slog.e(TAG,
+                                    "Commit of session " + sessionId + " failed: " + completeMsg);
+                            destroyInternal();
+                            dispatchSessionFinished(e.error, completeMsg, null);
+                        }
+                    }
 
-            synchronized (mLock) {
-                if (msg.obj != null) {
-                    mRemoteObserver = (IPackageInstallObserver2) msg.obj;
-                }
+                    break;
+                case MSG_SESSION_FINISHED_WITH_EXCEPTION:
+                    PackageManagerException e = (PackageManagerException) msg.obj;
 
-                try {
-                    commitLocked(pkgInfo, appInfo);
-                } catch (PackageManagerException e) {
-                    final String completeMsg = ExceptionUtils.getCompleteMessage(e);
-                    Slog.e(TAG, "Commit of session " + sessionId + " failed: " + completeMsg);
-                    destroyInternal();
-                    dispatchSessionFinished(e.error, completeMsg, null);
-                }
-
-                return true;
+                    dispatchSessionFinished(e.error, ExceptionUtils.getCompleteMessage(e),
+                            null);
+                    break;
             }
+
+            return true;
         }
     };
 
+    /**
+     * @return {@code true} iff the installing is app an device owner?
+     */
+    private boolean isInstallerDeviceOwnerLocked() {
+        DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(
+                Context.DEVICE_POLICY_SERVICE);
+
+        return (dpm != null) && dpm.isDeviceOwnerAppOnCallingUser(
+                mInstallerPackageName);
+    }
+
+    /**
+     * Checks if the permissions still need to be confirmed.
+     *
+     * <p>This is dependant on the identity of the installer, hence this cannot be cached if the
+     * installer might still {@link #transfer(String) change}.
+     *
+     * @return {@code true} iff we need to ask to confirm the permissions?
+     */
+    private boolean needToAskForPermissionsLocked() {
+        if (mPermissionsManuallyAccepted) {
+            return false;
+        }
+
+        final boolean isPermissionGranted =
+                (mPm.checkUidPermission(android.Manifest.permission.INSTALL_PACKAGES,
+                        mInstallerUid) == PackageManager.PERMISSION_GRANTED);
+        final boolean isInstallerRoot = (mInstallerUid == Process.ROOT_UID);
+        final boolean forcePermissionPrompt =
+                (params.installFlags & PackageManager.INSTALL_FORCE_PERMISSION_PROMPT) != 0;
+
+        // Device owners are allowed to silently install packages, so the permission check is
+        // waived if the installer is the device owner.
+        return forcePermissionPrompt || !(isPermissionGranted || isInstallerRoot
+                || isInstallerDeviceOwnerLocked());
+    }
+
     public PackageInstallerSession(PackageInstallerService.InternalCallback callback,
             Context context, PackageManagerService pm, Looper looper, int sessionId, int userId,
             String installerPackageName, int installerUid, SessionParams params, long createdMillis,
@@ -242,8 +350,9 @@
 
         this.sessionId = sessionId;
         this.userId = userId;
-        this.installerPackageName = installerPackageName;
-        this.installerUid = installerUid;
+        mOriginalInstallerUid = installerUid;
+        mInstallerPackageName = installerPackageName;
+        mInstallerUid = installerUid;
         this.params = params;
         this.createdMillis = createdMillis;
         this.stageDir = stageDir;
@@ -255,28 +364,18 @@
         }
 
         mPrepared = prepared;
-        mSealed = sealed;
 
-        // Device owners are allowed to silently install packages, so the permission check is
-        // waived if the installer is the device owner.
-        DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(
-                Context.DEVICE_POLICY_SERVICE);
-        final boolean isPermissionGranted =
-                (mPm.checkUidPermission(android.Manifest.permission.INSTALL_PACKAGES, installerUid)
-                        == PackageManager.PERMISSION_GRANTED);
-        final boolean isInstallerRoot = (installerUid == Process.ROOT_UID);
-        final boolean forcePermissionPrompt =
-                (params.installFlags & PackageManager.INSTALL_FORCE_PERMISSION_PROMPT) != 0;
-        mIsInstallerDeviceOwner = (dpm != null) && dpm.isDeviceOwnerAppOnCallingUser(
-                installerPackageName);
-        if ((isPermissionGranted
-                        || isInstallerRoot
-                        || mIsInstallerDeviceOwner)
-                && !forcePermissionPrompt) {
-            mPermissionsAccepted = true;
-        } else {
-            mPermissionsAccepted = false;
+        if (sealed) {
+            synchronized (mLock) {
+                try {
+                    sealAndValidateLocked();
+                } catch (PackageManagerException | IOException e) {
+                    destroyInternal();
+                    throw new IllegalArgumentException(e);
+                }
+            }
         }
+
         final long identity = Binder.clearCallingIdentity();
         try {
             final int uid = mPm.getPackageUid(PackageManagerService.DEFAULT_CONTAINER_PACKAGE,
@@ -295,7 +394,7 @@
         final SessionInfo info = new SessionInfo();
         synchronized (mLock) {
             info.sessionId = sessionId;
-            info.installerPackageName = installerPackageName;
+            info.installerPackageName = mInstallerPackageName;
             info.resolvedBaseCodePath = (mResolvedBaseFile != null) ?
                     mResolvedBaseFile.getAbsolutePath() : null;
             info.progress = mProgress;
@@ -310,6 +409,13 @@
                 info.appIcon = params.appIcon;
             }
             info.appLabel = params.appLabel;
+
+            info.installLocation = params.installLocation;
+            info.originatingUri = params.originatingUri;
+            info.originatingUid = params.originatingUid;
+            info.referrerUri = params.referrerUri;
+            info.grantedRuntimePermissions = params.grantedRuntimePermissions;
+            info.installFlags = params.installFlags;
         }
         return info;
     }
@@ -326,14 +432,26 @@
         }
     }
 
-    private void assertPreparedAndNotSealed(String cookie) {
-        synchronized (mLock) {
-            if (!mPrepared) {
-                throw new IllegalStateException(cookie + " before prepared");
-            }
-            if (mSealed) {
-                throw new SecurityException(cookie + " not allowed after commit");
-            }
+    private void assertPreparedAndNotSealedLocked(String cookie) {
+        assertPreparedAndNotCommittedOrDestroyedLocked(cookie);
+        if (mSealed) {
+            throw new SecurityException(cookie + " not allowed after sealing");
+        }
+    }
+
+    private void assertPreparedAndNotCommittedOrDestroyedLocked(String cookie) {
+        assertPreparedAndNotDestroyedLocked(cookie);
+        if (mCommitted) {
+            throw new SecurityException(cookie + " not allowed after commit");
+        }
+    }
+
+    private void assertPreparedAndNotDestroyedLocked(String cookie) {
+        if (!mPrepared) {
+            throw new IllegalStateException(cookie + " before prepared");
+        }
+        if (mDestroyed) {
+            throw new SecurityException(cookie + " not allowed after destruction");
         }
     }
 
@@ -342,27 +460,27 @@
      * might point at an ASEC mount point, which is why we delay path resolution
      * until someone actively works with the session.
      */
-    private File resolveStageDir() throws IOException {
-        synchronized (mLock) {
-            if (mResolvedStageDir == null) {
-                if (stageDir != null) {
-                    mResolvedStageDir = stageDir;
+    private File resolveStageDirLocked() throws IOException {
+        if (mResolvedStageDir == null) {
+            if (stageDir != null) {
+                mResolvedStageDir = stageDir;
+            } else {
+                final String path = PackageHelper.getSdDir(stageCid);
+                if (path != null) {
+                    mResolvedStageDir = new File(path);
                 } else {
-                    final String path = PackageHelper.getSdDir(stageCid);
-                    if (path != null) {
-                        mResolvedStageDir = new File(path);
-                    } else {
-                        throw new IOException("Failed to resolve path to container " + stageCid);
-                    }
+                    throw new IOException("Failed to resolve path to container " + stageCid);
                 }
             }
-            return mResolvedStageDir;
         }
+        return mResolvedStageDir;
     }
 
     @Override
     public void setClientProgress(float progress) {
         synchronized (mLock) {
+            assertCallerIsOwnerOrRootLocked();
+
             // Always publish first staging movement
             final boolean forcePublish = (mClientProgress == 0);
             mClientProgress = progress;
@@ -373,6 +491,8 @@
     @Override
     public void addClientProgress(float progress) {
         synchronized (mLock) {
+            assertCallerIsOwnerOrRootLocked();
+
             setClientProgress(mClientProgress + progress);
         }
     }
@@ -390,11 +510,15 @@
 
     @Override
     public String[] getNames() {
-        assertPreparedAndNotSealed("getNames");
-        try {
-            return resolveStageDir().list();
-        } catch (IOException e) {
-            throw ExceptionUtils.wrap(e);
+        synchronized (mLock) {
+            assertCallerIsOwnerOrRootLocked();
+            assertPreparedAndNotCommittedOrDestroyedLocked("getNames");
+
+            try {
+                return resolveStageDirLocked().list();
+            } catch (IOException e) {
+                throw ExceptionUtils.wrap(e);
+            }
         }
     }
 
@@ -403,20 +527,26 @@
         if (TextUtils.isEmpty(params.appPackageName)) {
             throw new IllegalStateException("Must specify package name to remove a split");
         }
-        try {
-            createRemoveSplitMarker(splitName);
-        } catch (IOException e) {
-            throw ExceptionUtils.wrap(e);
+
+        synchronized (mLock) {
+            assertCallerIsOwnerOrRootLocked();
+            assertPreparedAndNotCommittedOrDestroyedLocked("removeSplit");
+
+            try {
+                createRemoveSplitMarkerLocked(splitName);
+            } catch (IOException e) {
+                throw ExceptionUtils.wrap(e);
+            }
         }
     }
 
-    private void createRemoveSplitMarker(String splitName) throws IOException {
+    private void createRemoveSplitMarkerLocked(String splitName) throws IOException {
         try {
             final String markerName = splitName + REMOVE_SPLIT_MARKER_EXTENSION;
             if (!FileUtils.isValidExtFilename(markerName)) {
                 throw new IllegalArgumentException("Invalid marker: " + markerName);
             }
-            final File target = new File(resolveStageDir(), markerName);
+            final File target = new File(resolveStageDirLocked(), markerName);
             target.createNewFile();
             Os.chmod(target.getAbsolutePath(), 0 /*mode*/);
         } catch (ErrnoException e) {
@@ -440,8 +570,10 @@
         // will block any attempted install transitions.
         final RevocableFileDescriptor fd;
         final FileBridge bridge;
+        final File stageDir;
         synchronized (mLock) {
-            assertPreparedAndNotSealed("openWrite");
+            assertCallerIsOwnerOrRootLocked();
+            assertPreparedAndNotSealedLocked("openWrite");
 
             if (PackageInstaller.ENABLE_REVOCABLE_FD) {
                 fd = new RevocableFileDescriptor();
@@ -452,6 +584,8 @@
                 bridge = new FileBridge();
                 mBridges.add(bridge);
             }
+
+            stageDir = resolveStageDirLocked();
         }
 
         try {
@@ -462,7 +596,7 @@
             final File target;
             final long identity = Binder.clearCallingIdentity();
             try {
-                target = new File(resolveStageDir(), name);
+                target = new File(stageDir, name);
             } finally {
                 Binder.restoreCallingIdentity(identity);
             }
@@ -500,55 +634,111 @@
 
     @Override
     public ParcelFileDescriptor openRead(String name) {
-        try {
-            return openReadInternal(name);
-        } catch (IOException e) {
-            throw ExceptionUtils.wrap(e);
+        synchronized (mLock) {
+            assertCallerIsOwnerOrRootLocked();
+            assertPreparedAndNotCommittedOrDestroyedLocked("openRead");
+            try {
+                return openReadInternalLocked(name);
+            } catch (IOException e) {
+                throw ExceptionUtils.wrap(e);
+            }
         }
     }
 
-    private ParcelFileDescriptor openReadInternal(String name) throws IOException {
-        assertPreparedAndNotSealed("openRead");
-
+    private ParcelFileDescriptor openReadInternalLocked(String name) throws IOException {
         try {
             if (!FileUtils.isValidExtFilename(name)) {
                 throw new IllegalArgumentException("Invalid name: " + name);
             }
-            final File target = new File(resolveStageDir(), name);
-
+            final File target = new File(resolveStageDirLocked(), name);
             final FileDescriptor targetFd = Libcore.os.open(target.getAbsolutePath(), O_RDONLY, 0);
             return new ParcelFileDescriptor(targetFd);
-
         } catch (ErrnoException e) {
             throw e.rethrowAsIOException();
         }
     }
 
+    /**
+     * Check if the caller is the owner of this session. Otherwise throw a
+     * {@link SecurityException}.
+     */
+    private void assertCallerIsOwnerOrRootLocked() {
+        final int callingUid = Binder.getCallingUid();
+        if (callingUid != Process.ROOT_UID && callingUid != mInstallerUid) {
+            throw new SecurityException("Session does not belong to uid " + callingUid);
+        }
+    }
+
+    /**
+     * If anybody is reading or writing data of the session, throw an {@link SecurityException}.
+     */
+    private void assertNoWriteFileTransfersOpenLocked() {
+        // Verify that all writers are hands-off
+        for (RevocableFileDescriptor fd : mFds) {
+            if (!fd.isRevoked()) {
+                throw new SecurityException("Files still open");
+            }
+        }
+        for (FileBridge bridge : mBridges) {
+            if (!bridge.isClosed()) {
+                throw new SecurityException("Files still open");
+            }
+        }
+    }
+
     @Override
-    public void commit(IntentSender statusReceiver) {
+    public void commit(@NonNull IntentSender statusReceiver, boolean forTransfer) {
         Preconditions.checkNotNull(statusReceiver);
 
         final boolean wasSealed;
         synchronized (mLock) {
+            assertCallerIsOwnerOrRootLocked();
+            assertPreparedAndNotDestroyedLocked("commit");
+
+            final PackageInstallObserverAdapter adapter = new PackageInstallObserverAdapter(
+                    mContext, statusReceiver, sessionId, isInstallerDeviceOwnerLocked(), userId);
+            mRemoteObserver = adapter.getBinder();
+
+            if (forTransfer) {
+                mContext.enforceCallingOrSelfPermission(Manifest.permission.INSTALL_PACKAGES, null);
+
+                if (mInstallerUid == mOriginalInstallerUid) {
+                    throw new IllegalArgumentException("Session has not been transferred");
+                }
+            } else {
+                if (mInstallerUid != mOriginalInstallerUid) {
+                    throw new IllegalArgumentException("Session has been transferred");
+                }
+            }
+
             wasSealed = mSealed;
             if (!mSealed) {
-                // Verify that all writers are hands-off
-                for (RevocableFileDescriptor fd : mFds) {
-                    if (!fd.isRevoked()) {
-                        throw new SecurityException("Files still open");
-                    }
+                try {
+                    sealAndValidateLocked();
+                } catch (IOException e) {
+                    throw new IllegalArgumentException(e);
+                } catch (PackageManagerException e) {
+                    destroyInternal();
+
+                    // Cannot call dispatchFinal synchronous as this might be called from inside the
+                    // system server on the main thread. Hence the call back scheduled in
+                    // dispachFinal has to be scheduled on a different thread.
+                    mHandler.obtainMessage(MSG_SESSION_FINISHED_WITH_EXCEPTION, e).sendToTarget();
+
+                    return;
                 }
-                for (FileBridge bridge : mBridges) {
-                    if (!bridge.isClosed()) {
-                        throw new SecurityException("Files still open");
-                    }
-                }
-                mSealed = true;
             }
 
             // Client staging is fully done at this point
             mClientProgress = 1f;
             computeProgressLocked(true);
+
+            // This ongoing commit should keep session active, even though client
+            // will probably close their end.
+            mActiveCount.incrementAndGet();
+
+            mCommitted = true;
+            mHandler.obtainMessage(MSG_COMMIT).sendToTarget();
         }
 
         if (!wasSealed) {
@@ -557,17 +747,98 @@
             // the session lock, since otherwise it's a lock inversion.
             mCallback.onSessionSealedBlocking(this);
         }
-
-        // This ongoing commit should keep session active, even though client
-        // will probably close their end.
-        mActiveCount.incrementAndGet();
-
-        final PackageInstallObserverAdapter adapter = new PackageInstallObserverAdapter(mContext,
-                statusReceiver, sessionId, mIsInstallerDeviceOwner, userId);
-        mHandler.obtainMessage(MSG_COMMIT, adapter.getBinder()).sendToTarget();
     }
 
-    private void commitLocked(PackageInfo pkgInfo, ApplicationInfo appInfo)
+    /**
+     * Seal the session to prevent further modification and validate the contents of it.
+     *
+     * <p>The session will be sealed after calling this method even if it failed.
+     *
+     * @throws PackageManagerException if the session was sealed but something went wrong. If the
+     *                                 session was sealed this is the only possible exception.
+     */
+    private void sealAndValidateLocked() throws PackageManagerException, IOException {
+        assertNoWriteFileTransfersOpenLocked();
+        assertPreparedAndNotDestroyedLocked("sealing of session");
+
+        final PackageInfo pkgInfo = mPm.getPackageInfo(
+                params.appPackageName, PackageManager.GET_SIGNATURES
+                        | PackageManager.MATCH_STATIC_SHARED_LIBRARIES /*flags*/, userId);
+
+        resolveStageDirLocked();
+
+        mSealed = true;
+
+        // Verify that stage looks sane with respect to existing application.
+        // This currently only ensures packageName, versionCode, and certificate
+        // consistency.
+        try {
+            validateInstallLocked(pkgInfo);
+        } catch (PackageManagerException e) {
+            throw e;
+        } catch (Throwable e) {
+            // Convert all exceptions into package manager exceptions as only those are handled
+            // in the code above
+            throw new PackageManagerException(e);
+        }
+
+        // Read transfers from the original owner stay open, but as the session's data
+        // cannot be modified anymore, there is no leak of information.
+    }
+
+    @Override
+    public void transfer(String packageName) {
+        Preconditions.checkNotNull(packageName);
+
+        ApplicationInfo newOwnerAppInfo = mPm.getApplicationInfo(packageName, 0, userId);
+        if (newOwnerAppInfo == null) {
+            throw new ParcelableException(new PackageManager.NameNotFoundException(packageName));
+        }
+
+        if (PackageManager.PERMISSION_GRANTED != mPm.checkUidPermission(
+                Manifest.permission.INSTALL_PACKAGES, newOwnerAppInfo.uid)) {
+            throw new SecurityException("Destination package " + packageName + " does not have "
+                    + "the " + Manifest.permission.INSTALL_PACKAGES + " permission");
+        }
+
+        // Only install flags that can be verified by the app the session is transferred to are
+        // allowed. The parameters can be read via PackageInstaller.SessionInfo.
+        if (!params.areHiddenOptionsSet()) {
+            throw new SecurityException("Can only transfer sessions that use public options");
+        }
+
+        synchronized (mLock) {
+            assertCallerIsOwnerOrRootLocked();
+            assertPreparedAndNotSealedLocked("transfer");
+
+            try {
+                sealAndValidateLocked();
+            } catch (IOException e) {
+                throw new IllegalStateException(e);
+            } catch (PackageManagerException e) {
+                // Session is sealed but could not be verified, we need to destroy it
+                destroyInternal();
+                dispatchSessionFinished(e.error, ExceptionUtils.getCompleteMessage(e), null);
+
+                throw new IllegalArgumentException("Package is not valid", e);
+            }
+
+            if (!mPackageName.equals(mInstallerPackageName)) {
+                throw new SecurityException("Can only transfer sessions that update the original "
+                        + "installer");
+            }
+
+            mInstallerPackageName = packageName;
+            mInstallerUid = newOwnerAppInfo.uid;
+        }
+
+        // Persist the fact that we've sealed ourselves to prevent
+        // mutations of any hard links we create. We do this without holding
+        // the session lock, since otherwise it's a lock inversion.
+        mCallback.onSessionSealedBlocking(this);
+    }
+
+    private void commitLocked()
             throws PackageManagerException {
         if (mDestroyed) {
             throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR, "Session destroyed");
@@ -576,23 +847,11 @@
             throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR, "Session not sealed");
         }
 
-        try {
-            resolveStageDir();
-        } catch (IOException e) {
-            throw new PackageManagerException(INSTALL_FAILED_CONTAINER_ERROR,
-                    "Failed to resolve stage location", e);
-        }
-
-        // Verify that stage looks sane with respect to existing application.
-        // This currently only ensures packageName, versionCode, and certificate
-        // consistency.
-        validateInstallLocked(pkgInfo, appInfo);
-
         Preconditions.checkNotNull(mPackageName);
         Preconditions.checkNotNull(mSignatures);
         Preconditions.checkNotNull(mResolvedBaseFile);
 
-        if (!mPermissionsAccepted) {
+        if (needToAskForPermissionsLocked()) {
             // User needs to accept permissions; give installer an intent they
             // can use to involve user.
             final Intent intent = new Intent(PackageInstaller.ACTION_CONFIRM_PERMISSIONS);
@@ -605,7 +864,7 @@
 
             // Commit was keeping session marked as active until now; release
             // that extra refcount so session appears idle.
-            close();
+            closeInternal(false);
             return;
         }
 
@@ -622,7 +881,7 @@
         if (params.mode == SessionParams.MODE_INHERIT_EXISTING) {
             try {
                 final List<File> fromFiles = mResolvedInheritedFiles;
-                final File toDir = resolveStageDir();
+                final File toDir = resolveStageDirLocked();
 
                 if (LOGD) Slog.d(TAG, "Inherited files: " + mResolvedInheritedFiles);
                 if (!mResolvedInheritedFiles.isEmpty() && mInheritedFilesBase == null) {
@@ -683,7 +942,7 @@
 
         mRelinquished = true;
         mPm.installStage(mPackageName, stageDir, stageCid, localObserver, params,
-                installerPackageName, installerUid, user, mCertificates);
+                mInstallerPackageName, mInstallerUid, user, mCertificates);
     }
 
     /**
@@ -698,7 +957,7 @@
      * Note that upgrade compatibility is still performed by
      * {@link PackageManagerService}.
      */
-    private void validateInstallLocked(PackageInfo pkgInfo, ApplicationInfo appInfo)
+    private void validateInstallLocked(@Nullable PackageInfo pkgInfo)
             throws PackageManagerException {
         mPackageName = null;
         mVersionCode = -1;
@@ -708,6 +967,13 @@
         mResolvedStagedFiles.clear();
         mResolvedInheritedFiles.clear();
 
+        try {
+            resolveStageDirLocked();
+        } catch (IOException e) {
+            throw new PackageManagerException(INSTALL_FAILED_CONTAINER_ERROR,
+                    "Failed to resolve stage location", e);
+        }
+
         final File[] removedFiles = mResolvedStageDir.listFiles(sRemovedFilter);
         final List<String> removeSplitList = new ArrayList<>();
         if (!ArrayUtils.isEmpty(removedFiles)) {
@@ -752,7 +1018,7 @@
                 mCertificates = apk.certificates;
             }
 
-            assertApkConsistent(String.valueOf(addedFile), apk);
+            assertApkConsistentLocked(String.valueOf(addedFile), apk);
 
             // Take this opportunity to enforce uniform naming
             final String targetName;
@@ -780,6 +1046,11 @@
         }
 
         if (removeSplitList.size() > 0) {
+            if (pkgInfo == null) {
+                throw new PackageManagerException(INSTALL_FAILED_INVALID_APK,
+                        "Missing existing base package for " + mPackageName);
+            }
+
             // validate split names marked for removal
             for (String splitName : removeSplitList) {
                 if (!ArrayUtils.contains(pkgInfo.splitNames, splitName)) {
@@ -807,13 +1078,14 @@
 
         } else {
             // Partial installs must be consistent with existing install
-            if (appInfo == null) {
+            if (pkgInfo == null || pkgInfo.applicationInfo == null) {
                 throw new PackageManagerException(INSTALL_FAILED_INVALID_APK,
                         "Missing existing base package for " + mPackageName);
             }
 
             final PackageLite existing;
             final ApkLite existingBase;
+            ApplicationInfo appInfo = pkgInfo.applicationInfo;
             try {
                 existing = PackageParser.parsePackageLite(new File(appInfo.getCodePath()), 0);
                 existingBase = PackageParser.parseApkLite(new File(appInfo.getBaseCodePath()),
@@ -822,7 +1094,7 @@
                 throw PackageManagerException.from(e);
             }
 
-            assertApkConsistent("Existing base", existingBase);
+            assertApkConsistentLocked("Existing base", existingBase);
 
             // Inherit base if not overridden
             if (mResolvedBaseFile == null) {
@@ -878,7 +1150,7 @@
         }
     }
 
-    private void assertApkConsistent(String tag, ApkLite apk)
+    private void assertApkConsistentLocked(String tag, ApkLite apk)
             throws PackageManagerException {
         if (!mPackageName.equals(apk.packageName)) {
             throw new PackageManagerException(INSTALL_FAILED_INVALID_APK, tag + " package "
@@ -959,6 +1231,15 @@
         return true;
     }
 
+    /**
+     * @return the uid of the owner this session
+     */
+    public int getInstallerUid() {
+        synchronized (mLock) {
+            return mInstallerUid;
+        }
+    }
+
     private static String getRelativePath(File file, File base) throws IOException {
         final String pathStr = file.getAbsolutePath();
         final String baseStr = base.getAbsolutePath();
@@ -1106,9 +1387,9 @@
         if (accepted) {
             // Mark and kick off another install pass
             synchronized (mLock) {
-                mPermissionsAccepted = true;
+                mPermissionsManuallyAccepted = true;
+                mHandler.obtainMessage(MSG_COMMIT).sendToTarget();
             }
-            mHandler.obtainMessage(MSG_COMMIT).sendToTarget();
         } else {
             destroyInternal();
             dispatchSessionFinished(INSTALL_FAILED_ABORTED, "User rejected permissions", null);
@@ -1120,7 +1401,9 @@
             mCallback.onSessionActiveChanged(this, true);
         }
 
+        boolean wasPrepared;
         synchronized (mLock) {
+            wasPrepared = mPrepared;
             if (!mPrepared) {
                 if (stageDir != null) {
                     prepareStageDir(stageDir);
@@ -1141,35 +1424,63 @@
                 }
 
                 mPrepared = true;
-                mCallback.onSessionPrepared(this);
             }
         }
+
+        if (!wasPrepared) {
+            mCallback.onSessionPrepared(this);
+        }
     }
 
     @Override
     public void close() {
-        if (mActiveCount.decrementAndGet() == 0) {
+        closeInternal(true);
+    }
+
+    private void closeInternal(boolean checkCaller) {
+        int activeCount;
+        synchronized (mLock) {
+            if (checkCaller) {
+                assertCallerIsOwnerOrRootLocked();
+            }
+
+            activeCount = mActiveCount.decrementAndGet();
+        }
+
+        if (activeCount == 0) {
             mCallback.onSessionActiveChanged(this, false);
         }
     }
 
     @Override
     public void abandon() {
-        if (mRelinquished) {
-            Slog.d(TAG, "Ignoring abandon after commit relinquished control");
-            return;
+        synchronized (mLock) {
+            assertCallerIsOwnerOrRootLocked();
+
+            if (mRelinquished) {
+                Slog.d(TAG, "Ignoring abandon after commit relinquished control");
+                return;
+            }
+            destroyInternal();
         }
-        destroyInternal();
+
         dispatchSessionFinished(INSTALL_FAILED_ABORTED, "Session was abandoned", null);
     }
 
     private void dispatchSessionFinished(int returnCode, String msg, Bundle extras) {
-        mFinalStatus = returnCode;
-        mFinalMessage = msg;
+        final IPackageInstallObserver2 observer;
+        final String packageName;
+        synchronized (mLock) {
+            mFinalStatus = returnCode;
+            mFinalMessage = msg;
 
-        if (mRemoteObserver != null) {
+            observer = mRemoteObserver;
+            packageName = mPackageName;
+        }
+
+        if (observer != null) {
             try {
-                mRemoteObserver.onPackageInstalled(mPackageName, returnCode, msg, extras);
+                observer.onPackageInstalled(packageName, returnCode, msg, extras);
             } catch (RemoteException ignored) {
             }
         }
@@ -1220,8 +1531,9 @@
         pw.increaseIndent();
 
         pw.printPair("userId", userId);
-        pw.printPair("installerPackageName", installerPackageName);
-        pw.printPair("installerUid", installerUid);
+        pw.printPair("mOriginalInstallerUid", mOriginalInstallerUid);
+        pw.printPair("mInstallerPackageName", mInstallerPackageName);
+        pw.printPair("mInstallerUid", mInstallerUid);
         pw.printPair("createdMillis", createdMillis);
         pw.printPair("stageDir", stageDir);
         pw.printPair("stageCid", stageCid);
@@ -1232,7 +1544,7 @@
         pw.printPair("mClientProgress", mClientProgress);
         pw.printPair("mProgress", mProgress);
         pw.printPair("mSealed", mSealed);
-        pw.printPair("mPermissionsAccepted", mPermissionsAccepted);
+        pw.printPair("mPermissionsManuallyAccepted", mPermissionsManuallyAccepted);
         pw.printPair("mRelinquished", mRelinquished);
         pw.printPair("mDestroyed", mDestroyed);
         pw.printPair("mFds", mFds.size());
@@ -1243,4 +1555,174 @@
 
         pw.decreaseIndent();
     }
+
+    private static void writeGrantedRuntimePermissionsLocked(XmlSerializer out,
+            String[] grantedRuntimePermissions) throws IOException {
+        if (grantedRuntimePermissions != null) {
+            for (String permission : grantedRuntimePermissions) {
+                out.startTag(null, TAG_GRANTED_RUNTIME_PERMISSION);
+                writeStringAttribute(out, ATTR_NAME, permission);
+                out.endTag(null, TAG_GRANTED_RUNTIME_PERMISSION);
+            }
+        }
+    }
+
+    private static File buildAppIconFile(int sessionId, @NonNull File sessionsDir) {
+        return new File(sessionsDir, "app_icon." + sessionId + ".png");
+    }
+
+    /**
+     * Write this session to a {@link XmlSerializer}.
+     *
+     * @param out Where to write the session to
+     * @param sessionsDir The directory containing the sessions
+     */
+    void write(@NonNull XmlSerializer out, @NonNull File sessionsDir) throws IOException {
+        synchronized (mLock) {
+            if (mDestroyed) {
+                return;
+            }
+
+            out.startTag(null, TAG_SESSION);
+
+            writeIntAttribute(out, ATTR_SESSION_ID, sessionId);
+            writeIntAttribute(out, ATTR_USER_ID, userId);
+            writeStringAttribute(out, ATTR_INSTALLER_PACKAGE_NAME,
+                    mInstallerPackageName);
+            writeIntAttribute(out, ATTR_INSTALLER_UID, mInstallerUid);
+            writeLongAttribute(out, ATTR_CREATED_MILLIS, createdMillis);
+            if (stageDir != null) {
+                writeStringAttribute(out, ATTR_SESSION_STAGE_DIR,
+                        stageDir.getAbsolutePath());
+            }
+            if (stageCid != null) {
+                writeStringAttribute(out, ATTR_SESSION_STAGE_CID, stageCid);
+            }
+            writeBooleanAttribute(out, ATTR_PREPARED, isPrepared());
+            writeBooleanAttribute(out, ATTR_SEALED, isSealed());
+
+            writeIntAttribute(out, ATTR_MODE, params.mode);
+            writeIntAttribute(out, ATTR_INSTALL_FLAGS, params.installFlags);
+            writeIntAttribute(out, ATTR_INSTALL_LOCATION, params.installLocation);
+            writeLongAttribute(out, ATTR_SIZE_BYTES, params.sizeBytes);
+            writeStringAttribute(out, ATTR_APP_PACKAGE_NAME, params.appPackageName);
+            writeStringAttribute(out, ATTR_APP_LABEL, params.appLabel);
+            writeUriAttribute(out, ATTR_ORIGINATING_URI, params.originatingUri);
+            writeIntAttribute(out, ATTR_ORIGINATING_UID, params.originatingUid);
+            writeUriAttribute(out, ATTR_REFERRER_URI, params.referrerUri);
+            writeStringAttribute(out, ATTR_ABI_OVERRIDE, params.abiOverride);
+            writeStringAttribute(out, ATTR_VOLUME_UUID, params.volumeUuid);
+            writeIntAttribute(out, ATTR_INSTALL_REASON, params.installReason);
+
+            // Persist app icon if changed since last written
+            File appIconFile = buildAppIconFile(sessionId, sessionsDir);
+            if (params.appIcon == null && appIconFile.exists()) {
+                appIconFile.delete();
+            } else if (params.appIcon != null
+                    && appIconFile.lastModified() != params.appIconLastModified) {
+                if (LOGD) Slog.w(TAG, "Writing changed icon " + appIconFile);
+                FileOutputStream os = null;
+                try {
+                    os = new FileOutputStream(appIconFile);
+                    params.appIcon.compress(Bitmap.CompressFormat.PNG, 90, os);
+                } catch (IOException e) {
+                    Slog.w(TAG, "Failed to write icon " + appIconFile + ": " + e.getMessage());
+                } finally {
+                    IoUtils.closeQuietly(os);
+                }
+
+                params.appIconLastModified = appIconFile.lastModified();
+            }
+
+            writeGrantedRuntimePermissionsLocked(out, params.grantedRuntimePermissions);
+        }
+
+        out.endTag(null, TAG_SESSION);
+    }
+
+    private static String[] readGrantedRuntimePermissions(XmlPullParser in)
+            throws IOException, XmlPullParserException {
+        List<String> permissions = null;
+
+        final int outerDepth = in.getDepth();
+        int type;
+        while ((type = in.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || in.getDepth() > outerDepth)) {
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            }
+            if (TAG_GRANTED_RUNTIME_PERMISSION.equals(in.getName())) {
+                String permission = readStringAttribute(in, ATTR_NAME);
+                if (permissions == null) {
+                    permissions = new ArrayList<>();
+                }
+                permissions.add(permission);
+            }
+        }
+
+        if (permissions == null) {
+            return null;
+        }
+
+        String[] permissionsArray = new String[permissions.size()];
+        permissions.toArray(permissionsArray);
+        return permissionsArray;
+    }
+
+    /**
+     * Read new session from a {@link XmlPullParser xml description} and create it.
+     *
+     * @param in The source of the description
+     * @param callback Callback the session uses to notify about changes of it's state
+     * @param context Context to be used by the session
+     * @param pm PackageManager to use by the session
+     * @param installerThread Thread to be used for callbacks of this session
+     * @param sessionsDir The directory the sessions are stored in
+     *
+     * @return The newly created session
+     */
+    public static PackageInstallerSession readFromXml(@NonNull XmlPullParser in,
+            @NonNull PackageInstallerService.InternalCallback callback, @NonNull Context context,
+            @NonNull PackageManagerService pm, Looper installerThread, @NonNull File sessionsDir)
+            throws IOException, XmlPullParserException {
+        final int sessionId = readIntAttribute(in, ATTR_SESSION_ID);
+        final int userId = readIntAttribute(in, ATTR_USER_ID);
+        final String installerPackageName = readStringAttribute(in, ATTR_INSTALLER_PACKAGE_NAME);
+        final int installerUid = readIntAttribute(in, ATTR_INSTALLER_UID, pm.getPackageUid(
+                installerPackageName, PackageManager.MATCH_UNINSTALLED_PACKAGES, userId));
+        final long createdMillis = readLongAttribute(in, ATTR_CREATED_MILLIS);
+        final String stageDirRaw = readStringAttribute(in, ATTR_SESSION_STAGE_DIR);
+        final File stageDir = (stageDirRaw != null) ? new File(stageDirRaw) : null;
+        final String stageCid = readStringAttribute(in, ATTR_SESSION_STAGE_CID);
+        final boolean prepared = readBooleanAttribute(in, ATTR_PREPARED, true);
+        final boolean sealed = readBooleanAttribute(in, ATTR_SEALED);
+
+        final SessionParams params = new SessionParams(
+                SessionParams.MODE_INVALID);
+        params.mode = readIntAttribute(in, ATTR_MODE);
+        params.installFlags = readIntAttribute(in, ATTR_INSTALL_FLAGS);
+        params.installLocation = readIntAttribute(in, ATTR_INSTALL_LOCATION);
+        params.sizeBytes = readLongAttribute(in, ATTR_SIZE_BYTES);
+        params.appPackageName = readStringAttribute(in, ATTR_APP_PACKAGE_NAME);
+        params.appIcon = readBitmapAttribute(in, ATTR_APP_ICON);
+        params.appLabel = readStringAttribute(in, ATTR_APP_LABEL);
+        params.originatingUri = readUriAttribute(in, ATTR_ORIGINATING_URI);
+        params.originatingUid =
+                readIntAttribute(in, ATTR_ORIGINATING_UID, SessionParams.UID_UNKNOWN);
+        params.referrerUri = readUriAttribute(in, ATTR_REFERRER_URI);
+        params.abiOverride = readStringAttribute(in, ATTR_ABI_OVERRIDE);
+        params.volumeUuid = readStringAttribute(in, ATTR_VOLUME_UUID);
+        params.grantedRuntimePermissions = readGrantedRuntimePermissions(in);
+        params.installReason = readIntAttribute(in, ATTR_INSTALL_REASON);
+
+        final File appIconFile = buildAppIconFile(sessionId, sessionsDir);
+        if (appIconFile.exists()) {
+            params.appIcon = BitmapFactory.decodeFile(appIconFile.getAbsolutePath());
+            params.appIconLastModified = appIconFile.lastModified();
+        }
+
+        return new PackageInstallerSession(callback, context, pm,
+                installerThread, sessionId, userId, installerPackageName, installerUid,
+                params, createdMillis, stageDir, stageCid, prepared, sealed);
+    }
 }
diff --git a/services/core/java/com/android/server/pm/PackageManagerException.java b/services/core/java/com/android/server/pm/PackageManagerException.java
index 0e3f173..0793b09 100644
--- a/services/core/java/com/android/server/pm/PackageManagerException.java
+++ b/services/core/java/com/android/server/pm/PackageManagerException.java
@@ -40,6 +40,11 @@
         this.error = error;
     }
 
+    public PackageManagerException(Throwable e) {
+        super(e);
+        this.error = PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
+    }
+
     public static PackageManagerException from(PackageParserException e)
             throws PackageManagerException {
         throw new PackageManagerException(e.error, e.getMessage(), e.getCause());
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index a574065..bf1da56 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -58,7 +58,6 @@
 import static android.content.pm.PackageManager.INSTALL_FORWARD_LOCK;
 import static android.content.pm.PackageManager.INSTALL_INTERNAL;
 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.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS;
 import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK;
 import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK;
@@ -78,6 +77,7 @@
 import static android.content.pm.PackageManager.MOVE_FAILED_DEVICE_ADMIN;
 import static android.content.pm.PackageManager.MOVE_FAILED_DOESNT_EXIST;
 import static android.content.pm.PackageManager.MOVE_FAILED_INTERNAL_ERROR;
+import static android.content.pm.PackageManager.MOVE_FAILED_LOCKED_USER;
 import static android.content.pm.PackageManager.MOVE_FAILED_OPERATION_PENDING;
 import static android.content.pm.PackageManager.MOVE_FAILED_SYSTEM_PACKAGE;
 import static android.content.pm.PackageManager.PERMISSION_DENIED;
@@ -85,8 +85,11 @@
 import static android.content.pm.PackageParser.PARSE_IS_PRIVILEGED;
 import static android.content.pm.PackageParser.isApkFile;
 import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
+import static android.os.storage.StorageManager.FLAG_STORAGE_CE;
+import static android.os.storage.StorageManager.FLAG_STORAGE_DE;
 import static android.system.OsConstants.O_CREAT;
 import static android.system.OsConstants.O_RDWR;
+
 import static com.android.internal.app.IntentForwarderActivity.FORWARD_INTENT_TO_MANAGED_PROFILE;
 import static com.android.internal.app.IntentForwarderActivity.FORWARD_INTENT_TO_PARENT;
 import static com.android.internal.content.NativeLibraryHelper.LIB64_DIR_NAME;
@@ -102,6 +105,7 @@
 import static com.android.server.pm.PermissionsState.PERMISSION_OPERATION_FAILURE;
 import static com.android.server.pm.PermissionsState.PERMISSION_OPERATION_SUCCESS;
 import static com.android.server.pm.PermissionsState.PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED;
+
 import static dalvik.system.DexFile.getNonProfileGuidedCompilerFilter;
 
 import android.Manifest;
@@ -130,6 +134,7 @@
 import android.content.pm.AppsQueryHelper;
 import android.content.pm.AuxiliaryResolveInfo;
 import android.content.pm.ChangedPackages;
+import android.content.pm.ComponentInfo;
 import android.content.pm.FallbackCategoryProvider;
 import android.content.pm.FeatureInfo;
 import android.content.pm.IDexModuleRegisterCallback;
@@ -140,6 +145,7 @@
 import android.content.pm.IPackageInstallObserver2;
 import android.content.pm.IPackageInstaller;
 import android.content.pm.IPackageManager;
+import android.content.pm.IPackageManagerNative;
 import android.content.pm.IPackageMoveObserver;
 import android.content.pm.IPackageStatsObserver;
 import android.content.pm.InstantAppInfo;
@@ -224,7 +230,7 @@
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Base64;
-import android.util.BootTimingsTraceLog;
+import android.util.TimingsTraceLog;
 import android.util.DisplayMetrics;
 import android.util.EventLog;
 import android.util.ExceptionUtils;
@@ -281,6 +287,8 @@
 import com.android.server.pm.Settings.DatabaseVersion;
 import com.android.server.pm.Settings.VersionInfo;
 import com.android.server.pm.dex.DexManager;
+import com.android.server.pm.dex.DexoptOptions;
+import com.android.server.pm.dex.PackageDexUsage;
 import com.android.server.storage.DeviceStorageMonitorInternal;
 
 import dalvik.system.CloseGuard;
@@ -288,6 +296,7 @@
 import dalvik.system.VMRuntime;
 
 import libcore.io.IoUtils;
+import libcore.io.Streams;
 import libcore.util.EmptyArray;
 
 import org.xmlpull.v1.XmlPullParser;
@@ -305,6 +314,8 @@
 import java.io.FileReader;
 import java.io.FilenameFilter;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -336,6 +347,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.zip.GZIPInputStream;
 
 /**
  * Keep track of all those APKs everywhere.
@@ -389,6 +401,7 @@
     private static final boolean DEBUG_FILTERS = false;
     private static final boolean DEBUG_PERMISSIONS = false;
     private static final boolean DEBUG_SHARED_LIBRARIES = false;
+    private static final boolean DEBUG_COMPRESSION = Build.IS_DEBUGGABLE;
 
     // Debug output for dexopting. This is shared between PackageManagerService, OtaDexoptService
     // and PackageDexOptimizer. All these classes have their own flag to allow switching a single
@@ -439,10 +452,15 @@
     static final int SCAN_FIRST_BOOT_OR_UPGRADE = 1<<16;
     static final int SCAN_AS_INSTANT_APP = 1<<17;
     static final int SCAN_AS_FULL_APP = 1<<18;
+    static final int SCAN_AS_VIRTUAL_PRELOAD = 1<<19;
     /** Should not be with the scan flags */
     static final int FLAGS_REMOVE_CHATTY = 1<<31;
 
     private static final String STATIC_SHARED_LIB_DELIMITER = "_";
+    /** Extension of the compressed packages */
+    private final static String COMPRESSED_EXTENSION = ".gz";
+    /** Suffix of stub packages on the system partition */
+    private final static String STUB_SUFFIX = "-Stub";
 
     private static final int[] EMPTY_INT_ARRAY = new int[0];
 
@@ -559,8 +577,10 @@
     public static final int REASON_INSTALL = 2;
     public static final int REASON_BACKGROUND_DEXOPT = 3;
     public static final int REASON_AB_OTA = 4;
+    public static final int REASON_INACTIVE_PACKAGE_DOWNGRADE = 5;
+    public static final int REASON_SHARED = 6;
 
-    public static final int REASON_LAST = REASON_AB_OTA;
+    public static final int REASON_LAST = REASON_SHARED;
 
     /** All dangerous permission names in the same order as the events in MetricsEvent */
     private static final List<String> ALL_DANGEROUS_PERMISSIONS = Arrays.asList(
@@ -725,6 +745,9 @@
 
     final ProtectedPackages mProtectedPackages;
 
+    @GuardedBy("mLoadedVolumes")
+    final ArraySet<String> mLoadedVolumes = new ArraySet<>();
+
     boolean mFirstBoot;
 
     PackageManagerInternal.ExternalSourcesPolicy mExternalSourcesPolicy;
@@ -923,7 +946,8 @@
     final ArraySet<String> mTransferedPackages = new ArraySet<String>();
 
     // Broadcast actions that are only available to the system.
-    final ArraySet<String> mProtectedBroadcasts = new ArraySet<String>();
+    @GuardedBy("mProtectedBroadcasts")
+    final ArraySet<String> mProtectedBroadcasts = new ArraySet<>();
 
     /** List of packages waiting for verification. */
     final SparseArray<PackageVerificationState> mPendingVerification
@@ -1057,14 +1081,12 @@
                         scheduleWriteSettingsLocked();
                     }
                 }
-                sendVerificationRequest(userId, verificationId, ivs);
+                sendVerificationRequest(verificationId, ivs);
             }
             mCurrentIntentFilterVerifications.clear();
         }
 
-        private void sendVerificationRequest(int userId, int verificationId,
-                IntentFilterVerificationState ivs) {
-
+        private void sendVerificationRequest(int verificationId, IntentFilterVerificationState ivs) {
             Intent verificationIntent = new Intent(Intent.ACTION_INTENT_FILTER_NEEDS_VERIFICATION);
             verificationIntent.putExtra(
                     PackageManager.EXTRA_INTENT_FILTER_VERIFICATION_ID,
@@ -1084,10 +1106,9 @@
             DeviceIdleController.LocalService idleController = getDeviceIdleController();
             idleController.addPowerSaveTempWhitelistApp(Process.myUid(),
                     mIntentFilterVerifierComponent.getPackageName(), getVerificationTimeout(),
-                    userId, false, "intent filter verifier");
+                    UserHandle.USER_SYSTEM, true, "intent filter verifier");
 
-            UserHandle user = new UserHandle(userId);
-            mContext.sendBroadcastAsUser(verificationIntent, user);
+            mContext.sendBroadcastAsUser(verificationIntent, UserHandle.SYSTEM);
             if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG,
                     "Sending IntentFilter verification broadcast");
         }
@@ -1664,12 +1685,14 @@
                                 & PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0;
                         final boolean killApp = (args.installFlags
                                 & PackageManager.INSTALL_DONT_KILL_APP) == 0;
+                        final boolean virtualPreload = ((args.installFlags
+                                & PackageManager.INSTALL_VIRTUAL_PRELOAD) != 0);
                         final String[] grantedPermissions = args.installGrantPermissions;
 
                         // Handle the parent package
                         handlePackagePostInstall(parentRes, grantPermissions, killApp,
-                                grantedPermissions, didRestore, args.installerPackageName,
-                                args.observer);
+                                virtualPreload, grantedPermissions, didRestore,
+                                args.installerPackageName, args.observer);
 
                         // Handle the child packages
                         final int childCount = (parentRes.addedChildPackages != null)
@@ -1677,8 +1700,8 @@
                         for (int i = 0; i < childCount; i++) {
                             PackageInstalledInfo childRes = parentRes.addedChildPackages.valueAt(i);
                             handlePackagePostInstall(childRes, grantPermissions, killApp,
-                                    grantedPermissions, false, args.installerPackageName,
-                                    args.observer);
+                                    virtualPreload, grantedPermissions, false /*didRestore*/,
+                                    args.installerPackageName, args.observer);
                         }
 
                         // Log tracing if needed
@@ -1889,7 +1912,7 @@
     }
 
     private void handlePackagePostInstall(PackageInstalledInfo res, boolean grantPermissions,
-            boolean killApp, String[] grantedPermissions,
+            boolean killApp, boolean virtualPreload, String[] grantedPermissions,
             boolean launchedForRestore, String installerPackage,
             IPackageInstallObserver2 installObserver) {
         if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) {
@@ -1909,8 +1932,12 @@
 
             final boolean update = res.removedInfo != null
                     && res.removedInfo.removedPackage != null;
-            final String origInstallerPackageName = res.removedInfo != null
-                    ? res.removedInfo.installerPackageName : null;
+            final String installerPackageName =
+                    res.installerPackageName != null
+                            ? res.installerPackageName
+                            : res.removedInfo != null
+                                    ? res.removedInfo.installerPackageName
+                                    : null;
 
             // If this is the first time we have child packages for a disabled privileged
             // app that had no children, we grant requested runtime permissions to the new
@@ -1963,7 +1990,8 @@
                 // sendPackageAddedForNewUsers also deals with system apps
                 int appId = UserHandle.getAppId(res.uid);
                 boolean isSystem = res.pkg.applicationInfo.isSystemApp();
-                sendPackageAddedForNewUsers(packageName, isSystem, appId, firstUsers);
+                sendPackageAddedForNewUsers(packageName, isSystem || virtualPreload,
+                        virtualPreload /*startReceiver*/, appId, firstUsers);
 
                 // Send added for users that don't see the package for the first time
                 Bundle extras = new Bundle(1);
@@ -1974,10 +2002,10 @@
                 sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED, packageName,
                         extras, 0 /*flags*/,
                         null /*targetPackage*/, null /*finishedReceiver*/, updateUsers);
-                if (origInstallerPackageName != null) {
+                if (installerPackageName != null) {
                     sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED, packageName,
                             extras, 0 /*flags*/,
-                            origInstallerPackageName, null /*finishedReceiver*/, updateUsers);
+                            installerPackageName, null /*finishedReceiver*/, updateUsers);
                 }
 
                 // Send replaced for users that don't see the package for the first time
@@ -1986,10 +2014,10 @@
                             packageName, extras, 0 /*flags*/,
                             null /*targetPackage*/, null /*finishedReceiver*/,
                             updateUsers);
-                    if (origInstallerPackageName != null) {
+                    if (installerPackageName != null) {
                         sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, packageName,
                                 extras, 0 /*flags*/,
-                                origInstallerPackageName, null /*finishedReceiver*/, updateUsers);
+                                installerPackageName, null /*finishedReceiver*/, updateUsers);
                     }
                     sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED,
                             null /*package*/, null /*extras*/, 0 /*flags*/,
@@ -2288,6 +2316,8 @@
                 factoryTest, onlyCore);
         m.enableSystemUserPackages();
         ServiceManager.addService("package", m);
+        final PackageManagerNative pmn = m.new PackageManagerNative();
+        ServiceManager.addService("package_native", pmn);
         return m;
     }
 
@@ -2625,9 +2655,21 @@
                     | PackageParser.PARSE_IS_SYSTEM_DIR, scanFlags, 0);
 
             // Prune any system packages that no longer exist.
-            final List<String> possiblyDeletedUpdatedSystemApps = new ArrayList<String>();
+            final List<String> possiblyDeletedUpdatedSystemApps = new ArrayList<>();
+            // Stub packages must either be replaced with full versions in the /data
+            // partition or be disabled.
+            final List<String> stubSystemApps = new ArrayList<>();
             if (!mOnlyCore) {
-                Iterator<PackageSetting> psit = mSettings.mPackages.values().iterator();
+                // do this first before mucking with mPackages for the "expecting better" case
+                final Iterator<PackageParser.Package> pkgIterator = mPackages.values().iterator();
+                while (pkgIterator.hasNext()) {
+                    final PackageParser.Package pkg = pkgIterator.next();
+                    if (pkg.isStub) {
+                        stubSystemApps.add(pkg.packageName);
+                    }
+                }
+
+                final Iterator<PackageSetting> psit = mSettings.mPackages.values().iterator();
                 while (psit.hasNext()) {
                     PackageSetting ps = psit.next();
 
@@ -2671,8 +2713,14 @@
                         // Actual deletion of code and data will be handled by later
                         // reconciliation step
                     } else {
-                        final PackageSetting disabledPs = mSettings.getDisabledSystemPkgLPr(ps.name);
-                        if (disabledPs.codePath == null || !disabledPs.codePath.exists()) {
+                        // we still have a disabled system package, but, it still might have
+                        // been removed. check the code path still exists and check there's
+                        // still a package. the latter can happen if an OTA keeps the same
+                        // code path, but, changes the package name.
+                        final PackageSetting disabledPs =
+                                mSettings.getDisabledSystemPkgLPr(ps.name);
+                        if (disabledPs.codePath == null || !disabledPs.codePath.exists()
+                                || disabledPs.pkg == null) {
                             possiblyDeletedUpdatedSystemApps.add(ps.name);
                         }
                     }
@@ -2694,9 +2742,21 @@
             //delete tmp files
             deleteTempPackageFiles();
 
+            final int cachedSystemApps = PackageParser.sCachedPackageReadCount.get();
+
             // Remove any shared userIDs that have no associated packages
             mSettings.pruneSharedUsersLPw();
-
+            final long systemScanTime = SystemClock.uptimeMillis() - startTime;
+            final int systemPackagesCount = mPackages.size();
+            Slog.i(TAG, "Finished scanning system apps. Time: " + systemScanTime
+                    + " ms, packageCount: " + systemPackagesCount
+                    + " , timePerPackage: "
+                    + (systemPackagesCount == 0 ? 0 : systemScanTime / systemPackagesCount)
+                    + " , cached: " + cachedSystemApps);
+            if (mIsUpgrade && systemPackagesCount > 0) {
+                MetricsLogger.histogram(null, "ota_package_manager_system_app_avg_scan_time",
+                        ((int) systemScanTime) / systemPackagesCount);
+            }
             if (!mOnlyCore) {
                 EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_DATA_SCAN_START,
                         SystemClock.uptimeMillis());
@@ -2706,36 +2766,37 @@
                         | PackageParser.PARSE_FORWARD_LOCK,
                         scanFlags | SCAN_REQUIRE_KNOWN, 0);
 
-                /**
-                 * Remove disable package settings for any updated system
-                 * apps that were removed via an OTA. If they're not a
-                 * previously-updated app, remove them completely.
-                 * Otherwise, just revoke their system-level permissions.
-                 */
+                // Remove disable package settings for updated system apps that were
+                // removed via an OTA. If the update is no longer present, remove the
+                // app completely. Otherwise, revoke their system privileges.
                 for (String deletedAppName : possiblyDeletedUpdatedSystemApps) {
                     PackageParser.Package deletedPkg = mPackages.get(deletedAppName);
                     mSettings.removeDisabledSystemPackageLPw(deletedAppName);
 
-                    String msg;
+                    final String msg;
                     if (deletedPkg == null) {
+                        // should have found an update, but, we didn't; remove everything
                         msg = "Updated system package " + deletedAppName
-                                + " no longer exists; it's data will be wiped";
+                                + " no longer exists; removing its data";
                         // Actual deletion of code and data will be handled by later
                         // reconciliation step
                     } else {
-                        msg = "Updated system app + " + deletedAppName
-                                + " no longer present; removing system privileges for "
-                                + deletedAppName;
+                        // found an update; revoke system privileges
+                        msg = "Updated system package + " + deletedAppName
+                                + " no longer exists; revoking system privileges";
 
+                        // Don't do anything if a stub is removed from the system image. If
+                        // we were to remove the uncompressed version from the /data partition,
+                        // this is where it'd be done.
+
+                        final PackageSetting deletedPs = mSettings.mPackages.get(deletedAppName);
                         deletedPkg.applicationInfo.flags &= ~ApplicationInfo.FLAG_SYSTEM;
-
-                        PackageSetting deletedPs = mSettings.mPackages.get(deletedAppName);
                         deletedPs.pkgFlags &= ~ApplicationInfo.FLAG_SYSTEM;
                     }
                     logCriticalInfo(Log.WARN, msg);
                 }
 
-                /**
+                /*
                  * Make sure all system apps that we expected to appear on
                  * the userdata partition actually showed up. If they never
                  * appeared, crawl back and revive the system version.
@@ -2777,6 +2838,25 @@
                         }
                     }
                 }
+
+                // Uncompress and install any stubbed system applications.
+                // This must be done last to ensure all stubs are replaced or disabled.
+                decompressSystemApplications(stubSystemApps, scanFlags);
+
+                final int cachedNonSystemApps = PackageParser.sCachedPackageReadCount.get()
+                                - cachedSystemApps;
+
+                final long dataScanTime = SystemClock.uptimeMillis() - systemScanTime - startTime;
+                final int dataPackagesCount = mPackages.size() - systemPackagesCount;
+                Slog.i(TAG, "Finished scanning non-system apps. Time: " + dataScanTime
+                        + " ms, packageCount: " + dataPackagesCount
+                        + " , timePerPackage: "
+                        + (dataPackagesCount == 0 ? 0 : dataScanTime / dataPackagesCount)
+                        + " , cached: " + cachedNonSystemApps);
+                if (mIsUpgrade && dataPackagesCount > 0) {
+                    MetricsLogger.histogram(null, "ota_package_manager_data_app_avg_scan_time",
+                            ((int) dataScanTime) / dataPackagesCount);
+                }
             }
             mExpectingBetter.clear();
 
@@ -2876,7 +2956,7 @@
                     UserHandle.USER_SYSTEM, storageFlags, true /* migrateAppData */,
                     true /* onlyCoreApps */);
             mPrepareAppDataFuture = SystemServerInitThreadPool.get().submit(() -> {
-                BootTimingsTraceLog traceLog = new BootTimingsTraceLog("SystemServerTimingAsync",
+                TimingsTraceLog traceLog = new TimingsTraceLog("SystemServerTimingAsync",
                         Trace.TRACE_TAG_PACKAGE_MANAGER);
                 traceLog.traceBegin("AppDataFixup");
                 try {
@@ -3006,6 +3086,10 @@
                 userPackages.put(userId, getInstalledPackages(/*flags*/ 0, userId).getList());
             }
             mDexManager.load(userPackages);
+            if (mIsUpgrade) {
+                MetricsLogger.histogram(null, "ota_package_manager_init_time",
+                        (int) (SystemClock.uptimeMillis() - startTime));
+            }
         } // synchronized (mPackages)
         } // synchronized (mInstallLock)
 
@@ -3030,6 +3114,209 @@
         Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
     }
 
+    /**
+     * Uncompress and install stub applications.
+     * <p>In order to save space on the system partition, some applications are shipped in a
+     * compressed form. In addition the compressed bits for the full application, the
+     * system image contains a tiny stub comprised of only the Android manifest.
+     * <p>During the first boot, attempt to uncompress and install the full application. If
+     * the application can't be installed for any reason, disable the stub and prevent
+     * uncompressing the full application during future boots.
+     * <p>In order to forcefully attempt an installation of a full application, go to app
+     * settings and enable the application.
+     */
+    private void decompressSystemApplications(@NonNull List<String> stubSystemApps, int scanFlags) {
+        for (int i = stubSystemApps.size() - 1; i >= 0; --i) {
+            final String pkgName = stubSystemApps.get(i);
+            // skip if the system package is already disabled
+            if (mSettings.isDisabledSystemPackageLPr(pkgName)) {
+                stubSystemApps.remove(i);
+                continue;
+            }
+            // skip if the package isn't installed (?!); this should never happen
+            final PackageParser.Package pkg = mPackages.get(pkgName);
+            if (pkg == null) {
+                stubSystemApps.remove(i);
+                continue;
+            }
+            // skip if the package has been disabled by the user
+            final PackageSetting ps = mSettings.mPackages.get(pkgName);
+            if (ps != null) {
+                final int enabledState = ps.getEnabled(UserHandle.USER_SYSTEM);
+                if (enabledState == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER) {
+                    stubSystemApps.remove(i);
+                    continue;
+                }
+            }
+
+            if (DEBUG_COMPRESSION) {
+                Slog.i(TAG, "Uncompressing system stub; pkg: " + pkgName);
+            }
+
+            // uncompress the binary to its eventual destination on /data
+            final File scanFile = decompressPackage(pkg);
+            if (scanFile == null) {
+                continue;
+            }
+
+            // install the package to replace the stub on /system
+            try {
+                mSettings.disableSystemPackageLPw(pkgName, true /*replaced*/);
+                removePackageLI(pkg, true /*chatty*/);
+                scanPackageTracedLI(scanFile, 0 /*reparseFlags*/, scanFlags, 0, null);
+                ps.setEnabled(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
+                        UserHandle.USER_SYSTEM, "android");
+                stubSystemApps.remove(i);
+                continue;
+            } catch (PackageManagerException e) {
+                Slog.e(TAG, "Failed to parse uncompressed system package: " + e.getMessage());
+            }
+
+            // any failed attempt to install the package will be cleaned up later
+        }
+
+        // disable any stub still left; these failed to install the full application
+        for (int i = stubSystemApps.size() - 1; i >= 0; --i) {
+            final String pkgName = stubSystemApps.get(i);
+            final PackageSetting ps = mSettings.mPackages.get(pkgName);
+            ps.setEnabled(PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+                    UserHandle.USER_SYSTEM, "android");
+            logCriticalInfo(Log.ERROR, "Stub disabled; pkg: " + pkgName);
+        }
+    }
+
+    private int decompressFile(File srcFile, File dstFile) throws ErrnoException {
+        if (DEBUG_COMPRESSION) {
+            Slog.i(TAG, "Decompress file"
+                    + "; src: " + srcFile.getAbsolutePath()
+                    + ", dst: " + dstFile.getAbsolutePath());
+        }
+        try (
+                InputStream fileIn = new GZIPInputStream(new FileInputStream(srcFile));
+                OutputStream fileOut = new FileOutputStream(dstFile, false /*append*/);
+        ) {
+            Streams.copy(fileIn, fileOut);
+            Os.chmod(dstFile.getAbsolutePath(), 0644);
+            return PackageManager.INSTALL_SUCCEEDED;
+        } catch (IOException e) {
+            logCriticalInfo(Log.ERROR, "Failed to decompress file"
+                    + "; src: " + srcFile.getAbsolutePath()
+                    + ", dst: " + dstFile.getAbsolutePath());
+        }
+        return PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
+    }
+
+    private File[] getCompressedFiles(String codePath) {
+        final File stubCodePath = new File(codePath);
+        final String stubName = stubCodePath.getName();
+
+        // The layout of a compressed package on a given partition is as follows :
+        //
+        // Compressed artifacts:
+        //
+        // /partition/ModuleName/foo.gz
+        // /partation/ModuleName/bar.gz
+        //
+        // Stub artifact:
+        //
+        // /partition/ModuleName-Stub/ModuleName-Stub.apk
+        //
+        // In other words, stub is on the same partition as the compressed artifacts
+        // and in a directory that's suffixed with "-Stub".
+        int idx = stubName.lastIndexOf(STUB_SUFFIX);
+        if (idx < 0 || (stubName.length() != (idx + STUB_SUFFIX.length()))) {
+            return null;
+        }
+
+        final File stubParentDir = stubCodePath.getParentFile();
+        if (stubParentDir == null) {
+            Slog.e(TAG, "Unable to determine stub parent dir for codePath: " + codePath);
+            return null;
+        }
+
+        final File compressedPath = new File(stubParentDir, stubName.substring(0, idx));
+        final File[] files = compressedPath.listFiles(new FilenameFilter() {
+            @Override
+            public boolean accept(File dir, String name) {
+                return name.toLowerCase().endsWith(COMPRESSED_EXTENSION);
+            }
+        });
+
+        if (DEBUG_COMPRESSION && files != null && files.length > 0) {
+            Slog.i(TAG, "getCompressedFiles[" + codePath + "]: " + Arrays.toString(files));
+        }
+
+        return files;
+    }
+
+    private boolean compressedFileExists(String codePath) {
+        final File[] compressedFiles = getCompressedFiles(codePath);
+        return compressedFiles != null && compressedFiles.length > 0;
+    }
+
+    /**
+     * Decompresses the given package on the system image onto
+     * the /data partition.
+     * @return The directory the package was decompressed into. Otherwise, {@code null}.
+     */
+    private File decompressPackage(PackageParser.Package pkg) {
+        final File[] compressedFiles = getCompressedFiles(pkg.codePath);
+        if (compressedFiles == null || compressedFiles.length == 0) {
+            if (DEBUG_COMPRESSION) {
+                Slog.i(TAG, "No files to decompress: " + pkg.baseCodePath);
+            }
+            return null;
+        }
+        final File dstCodePath =
+                getNextCodePath(Environment.getDataAppDirectory(null), pkg.packageName);
+        int ret = PackageManager.INSTALL_SUCCEEDED;
+        try {
+            Os.mkdir(dstCodePath.getAbsolutePath(), 0755);
+            Os.chmod(dstCodePath.getAbsolutePath(), 0755);
+            for (File srcFile : compressedFiles) {
+                final String srcFileName = srcFile.getName();
+                final String dstFileName = srcFileName.substring(
+                        0, srcFileName.length() - COMPRESSED_EXTENSION.length());
+                final File dstFile = new File(dstCodePath, dstFileName);
+                ret = decompressFile(srcFile, dstFile);
+                if (ret != PackageManager.INSTALL_SUCCEEDED) {
+                    logCriticalInfo(Log.ERROR, "Failed to decompress"
+                            + "; pkg: " + pkg.packageName
+                            + ", file: " + dstFileName);
+                    break;
+                }
+            }
+        } catch (ErrnoException e) {
+            logCriticalInfo(Log.ERROR, "Failed to decompress"
+                    + "; pkg: " + pkg.packageName
+                    + ", err: " + e.errno);
+        }
+        if (ret == PackageManager.INSTALL_SUCCEEDED) {
+            final File libraryRoot = new File(dstCodePath, LIB_DIR_NAME);
+            NativeLibraryHelper.Handle handle = null;
+            try {
+                handle = NativeLibraryHelper.Handle.create(dstCodePath);
+                ret = NativeLibraryHelper.copyNativeBinariesWithOverride(handle, libraryRoot,
+                        null /*abiOverride*/);
+            } catch (IOException e) {
+                logCriticalInfo(Log.ERROR, "Failed to extract native libraries"
+                        + "; pkg: " + pkg.packageName);
+                ret = PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
+            } finally {
+                IoUtils.closeQuietly(handle);
+            }
+        }
+        if (ret != PackageManager.INSTALL_SUCCEEDED) {
+            if (dstCodePath == null || !dstCodePath.exists()) {
+                return null;
+            }
+            removeCodePathLI(dstCodePath);
+            return null;
+        }
+
+        return dstCodePath;
+    }
+
     private void updateInstantAppInstallerLocked(String modifiedPackage) {
         // we're only interested in updating the installer appliction when 1) it's not
         // already set or 2) the modified package is the installer
@@ -3047,7 +3334,7 @@
         }
 
         // Disable package parsing on eng builds to allow for faster incremental development.
-        if ("eng".equals(Build.TYPE)) {
+        if (Build.IS_ENG) {
             return null;
         }
 
@@ -3082,7 +3369,7 @@
         // NOTE: When no BUILD_NUMBER is set by the build system, it defaults to a build
         // that starts with "eng." to signify that this is an engineering build and not
         // destined for release.
-        if ("userdebug".equals(Build.TYPE) && Build.VERSION.INCREMENTAL.startsWith("eng.")) {
+        if (Build.IS_USERDEBUG && Build.VERSION.INCREMENTAL.startsWith("eng.")) {
             Slog.w(TAG, "Wiping cache directory because the system partition changed.");
 
             // Heuristic: If the /system directory has been modified recently due to an "adb sync"
@@ -3122,7 +3409,7 @@
 
         final List<ResolveInfo> matches = queryIntentReceiversInternal(intent, PACKAGE_MIME_TYPE,
                 MATCH_SYSTEM_ONLY | MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE,
-                UserHandle.USER_SYSTEM);
+                UserHandle.USER_SYSTEM, false /*allowDynamicSplits*/);
         if (matches.size() == 1) {
             return matches.get(0).getComponentInfo().packageName;
         } else if (matches.size() == 0) {
@@ -3182,7 +3469,7 @@
 
         final List<ResolveInfo> matches = queryIntentReceiversInternal(intent, PACKAGE_MIME_TYPE,
                 MATCH_SYSTEM_ONLY | MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE,
-                UserHandle.USER_SYSTEM);
+                UserHandle.USER_SYSTEM, false /*allowDynamicSplits*/);
         ResolveInfo best = null;
         final int N = matches.size();
         for (int i = 0; i < N; i++) {
@@ -3508,19 +3795,16 @@
      * <p>
      * Currently, there are three cases in which this can occur:
      * <ol>
-     * <li>The calling application is a "special" process. The special
-     *     processes are {@link Process#SYSTEM_UID}, {@link Process#SHELL_UID}
-     *     and {@code 0}</li>
+     * <li>The calling application is a "special" process. Special processes
+     *     are those with a UID < {@link Process#FIRST_APPLICATION_UID}.</li>
      * <li>The calling application has the permission
-     *     {@link android.Manifest.permission#ACCESS_INSTANT_APPS}</li>
+     *     {@link android.Manifest.permission#ACCESS_INSTANT_APPS}.</li>
      * <li>The calling application is the default launcher on the
      *     system partition.</li>
      * </ol>
      */
     private boolean canViewInstantApps(int callingUid, int userId) {
-        if (callingUid == Process.SYSTEM_UID
-                || callingUid == Process.SHELL_UID
-                || callingUid == Process.ROOT_UID) {
+        if (callingUid < Process.FIRST_APPLICATION_UID) {
             return true;
         }
         if (mContext.checkCallingOrSelfPermission(
@@ -3612,8 +3896,7 @@
                 throw new SecurityException("Package " + packageName + " is currently frozen!");
             }
 
-            if (!userKeyUnlocked && !(ps.pkg.applicationInfo.isDirectBootAware()
-                    || ps.pkg.applicationInfo.isPartiallyDirectBootAware())) {
+            if (!userKeyUnlocked && !ps.pkg.applicationInfo.isEncryptionAware()) {
                 throw new SecurityException("Package " + packageName + " is not encryption aware!");
             }
         }
@@ -4010,10 +4293,17 @@
                 return null;
             }
             // If the caller is an app that targets pre 26 SDK drop protection flags.
-            final PermissionInfo permissionInfo = generatePermissionInfo(p, flags);
+            PermissionInfo permissionInfo = generatePermissionInfo(p, flags);
             if (permissionInfo != null) {
-                permissionInfo.protectionLevel = adjustPermissionProtectionFlagsLPr(
+                final int protectionLevel = adjustPermissionProtectionFlagsLPr(
                         permissionInfo.protectionLevel, packageName, callingUid);
+                if (permissionInfo.protectionLevel != protectionLevel) {
+                    // If we return different protection level, don't use the cached info
+                    if (p.perm != null && p.perm.info == permissionInfo) {
+                        permissionInfo = new PermissionInfo(permissionInfo);
+                    }
+                    permissionInfo.protectionLevel = protectionLevel;
+                }
             }
             return permissionInfo;
         }
@@ -5680,7 +5970,7 @@
 
         if (eventIdIndex == -1) {
             if (AppOpsManager.permissionToOpCode(name) == AppOpsManager.OP_NONE
-                    || "user".equals(Build.TYPE)) {
+                    || Build.IS_USER) {
                 Log.i(TAG, "Unknown permission " + name);
 
                 return MetricsEvent.ACTION_PERMISSION_REQUEST_UNKNOWN;
@@ -5954,7 +6244,7 @@
     @Override
     public boolean isProtectedBroadcast(String actionName) {
         // allow instant applications
-        synchronized (mPackages) {
+        synchronized (mProtectedBroadcasts) {
             if (mProtectedBroadcasts.contains(actionName)) {
                 return true;
             } else if (actionName != null) {
@@ -6289,8 +6579,40 @@
                 }
                 return ps.name;
             }
+            return null;
         }
-        return null;
+    }
+
+    @Override
+    public String[] getNamesForUids(int[] uids) {
+        if (uids == null || uids.length == 0) {
+            return null;
+        }
+        final int callingUid = Binder.getCallingUid();
+        if (getInstantAppPackageName(callingUid) != null) {
+            return null;
+        }
+        final String[] names = new String[uids.length];
+        synchronized (mPackages) {
+            for (int i = uids.length - 1; i >= 0; i--) {
+                final int uid = uids[i];
+                Object obj = mSettings.getUserIdLPr(UserHandle.getAppId(uid));
+                if (obj instanceof SharedUserSetting) {
+                    final SharedUserSetting sus = (SharedUserSetting) obj;
+                    names[i] = "shared:" + sus.name;
+                } else if (obj instanceof PackageSetting) {
+                    final PackageSetting ps = (PackageSetting) obj;
+                    if (filterAppAccessLPr(ps, callingUid, UserHandle.getUserId(callingUid))) {
+                        names[i] = null;
+                    } else {
+                        names[i] = ps.name;
+                    }
+                } else {
+                    names[i] = null;
+                }
+            }
+        }
+        return names;
     }
 
     @Override
@@ -6419,7 +6741,7 @@
 
             Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "queryIntentActivities");
             final List<ResolveInfo> query = queryIntentActivitiesInternal(intent, resolvedType,
-                    flags, callingUid, userId, resolveForStart);
+                    flags, callingUid, userId, resolveForStart, true /*allowDynamicSplits*/);
             Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
 
             final ResolveInfo bestChoice =
@@ -6563,7 +6885,7 @@
             Bundle verificationBundle, int userId) {
         final Message msg = mHandler.obtainMessage(INSTANT_APP_RESOLUTION_PHASE_TWO,
                 new InstantAppRequest(responseObj, origIntent, resolvedType,
-                        callingPackage, userId, verificationBundle));
+                        callingPackage, userId, verificationBundle, false /*resolveForStart*/));
         mHandler.sendMessage(msg);
     }
 
@@ -6840,22 +7162,44 @@
 
                             // Okay we found a previously set preferred or last chosen app.
                             // If the result set is different from when this
-                            // was created, we need to clear it and re-ask the
-                            // user their preference, if we're looking for an "always" type entry.
+                            // was created, and is not a subset of the preferred set, we need to
+                            // clear it and re-ask the user their preference, if we're looking for
+                            // an "always" type entry.
                             if (always && !pa.mPref.sameSet(query)) {
-                                Slog.i(TAG, "Result set changed, dropping preferred activity for "
-                                        + intent + " type " + resolvedType);
-                                if (DEBUG_PREFERRED) {
-                                    Slog.v(TAG, "Removing preferred activity since set changed "
-                                            + pa.mPref.mComponent);
+                                if (pa.mPref.isSuperset(query)) {
+                                    // some components of the set are no longer present in
+                                    // the query, but the preferred activity can still be reused
+                                    if (DEBUG_PREFERRED) {
+                                        Slog.i(TAG, "Result set changed, but PreferredActivity is"
+                                                + " still valid as only non-preferred components"
+                                                + " were removed for " + intent + " type "
+                                                + resolvedType);
+                                    }
+                                    // remove obsolete components and re-add the up-to-date filter
+                                    PreferredActivity freshPa = new PreferredActivity(pa,
+                                            pa.mPref.mMatch,
+                                            pa.mPref.discardObsoleteComponents(query),
+                                            pa.mPref.mComponent,
+                                            pa.mPref.mAlways);
+                                    pir.removeFilter(pa);
+                                    pir.addFilter(freshPa);
+                                    changed = true;
+                                } else {
+                                    Slog.i(TAG,
+                                            "Result set changed, dropping preferred activity for "
+                                                    + intent + " type " + resolvedType);
+                                    if (DEBUG_PREFERRED) {
+                                        Slog.v(TAG, "Removing preferred activity since set changed "
+                                                + pa.mPref.mComponent);
+                                    }
+                                    pir.removeFilter(pa);
+                                    // Re-add the filter as a "last chosen" entry (!always)
+                                    PreferredActivity lastChosen = new PreferredActivity(
+                                            pa, pa.mPref.mMatch, null, pa.mPref.mComponent, false);
+                                    pir.addFilter(lastChosen);
+                                    changed = true;
+                                    return null;
                                 }
-                                pir.removeFilter(pa);
-                                // Re-add the filter as a "last chosen" entry (!always)
-                                PreferredActivity lastChosen = new PreferredActivity(
-                                        pa, pa.mPref.mMatch, null, pa.mPref.mComponent, false);
-                                pir.addFilter(lastChosen);
-                                changed = true;
-                                return null;
                             }
 
                             // Yay! Either the set matched or we're looking for the last chosen
@@ -6964,12 +7308,13 @@
     private @NonNull List<ResolveInfo> queryIntentActivitiesInternal(Intent intent,
             String resolvedType, int flags, int userId) {
         return queryIntentActivitiesInternal(
-                intent, resolvedType, flags, Binder.getCallingUid(), userId, false);
+                intent, resolvedType, flags, 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 resolveForStart, boolean allowDynamicSplits) {
         if (!sUserManager.exists(userId)) return Collections.emptyList();
         final String instantAppPkgName = getInstantAppPackageName(filterCallingUid);
         enforceCrossUserPermission(Binder.getCallingUid(), userId,
@@ -7026,7 +7371,8 @@
                     list.add(ri);
                 }
             }
-            return applyPostResolutionFilter(list, instantAppPkgName);
+            return applyPostResolutionFilter(
+                    list, instantAppPkgName, allowDynamicSplits, filterCallingUid, userId);
         }
 
         // reader
@@ -7045,7 +7391,8 @@
                     List<ResolveInfo> xpResult = new ArrayList<ResolveInfo>(1);
                     xpResult.add(xpResolveInfo);
                     return applyPostResolutionFilter(
-                            filterIfNotSystemUser(xpResult, userId), instantAppPkgName);
+                            filterIfNotSystemUser(xpResult, userId), instantAppPkgName,
+                            allowDynamicSplits, filterCallingUid, userId);
                 }
 
                 // Check for results in the current profile.
@@ -7084,13 +7431,15 @@
                             // And we are not going to add emphemeral app, so we can return the
                             // result straight away.
                             result.add(xpDomainInfo.resolveInfo);
-                            return applyPostResolutionFilter(result, instantAppPkgName);
+                            return applyPostResolutionFilter(result, instantAppPkgName,
+                                    allowDynamicSplits, filterCallingUid, userId);
                         }
                     } else if (result.size() <= 1 && !addEphemeral) {
                         // No result in parent user and <= 1 result in current profile, and we
                         // are not going to add emphemeral app, so we can return the result without
                         // further processing.
-                        return applyPostResolutionFilter(result, instantAppPkgName);
+                        return applyPostResolutionFilter(result, instantAppPkgName,
+                                allowDynamicSplits, filterCallingUid, userId);
                     }
                     // We have more than one candidate (combining results from current and parent
                     // profile), so we need filtering and sorting.
@@ -7120,16 +7469,18 @@
             }
         }
         if (addEphemeral) {
-            result = maybeAddInstantAppInstaller(result, intent, resolvedType, flags, userId);
+            result = maybeAddInstantAppInstaller(
+                    result, intent, resolvedType, flags, userId, resolveForStart);
         }
         if (sortResult) {
             Collections.sort(result, mResolvePrioritySorter);
         }
-        return applyPostResolutionFilter(result, instantAppPkgName);
+        return applyPostResolutionFilter(
+                result, instantAppPkgName, allowDynamicSplits, filterCallingUid, userId);
     }
 
     private List<ResolveInfo> maybeAddInstantAppInstaller(List<ResolveInfo> result, Intent intent,
-            String resolvedType, int flags, int userId) {
+            String resolvedType, int flags, int userId, boolean resolveForStart) {
         // first, check to see if we've got an instant app already installed
         final boolean alreadyResolvedLocally = (flags & PackageManager.MATCH_INSTANT) != 0;
         ResolveInfo localInstantApp = null;
@@ -7178,7 +7529,8 @@
                 Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "resolveEphemeral");
                 final InstantAppRequest requestObject = new InstantAppRequest(
                         null /*responseObj*/, intent /*origIntent*/, resolvedType,
-                        null /*callingPackage*/, userId, null /*verificationBundle*/);
+                        null /*callingPackage*/, userId, null /*verificationBundle*/,
+                        resolveForStart);
                 auxiliaryResponse =
                         InstantAppResolver.doInstantAppResolutionPhaseOne(
                                 mContext, mInstantAppResolverConnection, requestObject);
@@ -7191,7 +7543,8 @@
                 // the instant application, we'll do the right thing.
                 final ApplicationInfo ai = localInstantApp.activityInfo.applicationInfo;
                 auxiliaryResponse = new AuxiliaryResolveInfo(
-                        ai.packageName, null /*splitName*/, ai.versionCode, null /*failureIntent*/);
+                        ai.packageName, null /*splitName*/, null /*failureActivity*/,
+                        ai.versionCode, null /*failureIntent*/);
             }
         }
         if (auxiliaryResponse != null) {
@@ -7327,37 +7680,52 @@
      * @return A filtered list of resolved activities.
      */
     private List<ResolveInfo> applyPostResolutionFilter(List<ResolveInfo> resolveInfos,
-            String ephemeralPkgName) {
+            String ephemeralPkgName, boolean allowDynamicSplits, int filterCallingUid, int userId) {
         for (int i = resolveInfos.size() - 1; i >= 0; i--) {
             final ResolveInfo info = resolveInfos.get(i);
-            final boolean isEphemeralApp = info.activityInfo.applicationInfo.isInstantApp();
-            // TODO: When adding on-demand split support for non-instant apps, remove this check
-            // and always apply post filtering
             // allow activities that are defined in the provided package
-            if (isEphemeralApp) {
-                if (info.activityInfo.splitName != null
-                        && !ArrayUtils.contains(info.activityInfo.applicationInfo.splitNames,
-                                info.activityInfo.splitName)) {
-                    // requested activity is defined in a split that hasn't been installed yet.
-                    // add the installer to the resolve list
-                    if (DEBUG_EPHEMERAL) {
-                        Slog.v(TAG, "Adding ephemeral installer to the ResolveInfo list");
+            if (allowDynamicSplits
+                    && info.activityInfo.splitName != null
+                    && !ArrayUtils.contains(info.activityInfo.applicationInfo.splitNames,
+                            info.activityInfo.splitName)) {
+                if (mInstantAppInstallerInfo == null) {
+                    if (DEBUG_INSTALL) {
+                        Slog.v(TAG, "No installer - not adding it to the ResolveInfo list");
                     }
-                    final ResolveInfo installerInfo = new ResolveInfo(mInstantAppInstallerInfo);
-                    installerInfo.auxiliaryInfo = new AuxiliaryResolveInfo(
-                            info.activityInfo.packageName, info.activityInfo.splitName,
-                            info.activityInfo.applicationInfo.versionCode, null /*failureIntent*/);
-                    // make sure this resolver is the default
-                    installerInfo.isDefault = true;
-                    installerInfo.match = IntentFilter.MATCH_CATEGORY_SCHEME_SPECIFIC_PART
-                            | IntentFilter.MATCH_ADJUSTMENT_NORMAL;
-                    // add a non-generic filter
-                    installerInfo.filter = new IntentFilter();
-                    // load resources from the correct package
-                    installerInfo.resolvePackageName = info.getComponentInfo().packageName;
-                    resolveInfos.set(i, installerInfo);
+                    resolveInfos.remove(i);
                     continue;
                 }
+                // requested activity is defined in a split that hasn't been installed yet.
+                // add the installer to the resolve list
+                if (DEBUG_INSTALL) {
+                    Slog.v(TAG, "Adding installer to the ResolveInfo list");
+                }
+                final ResolveInfo installerInfo = new ResolveInfo(mInstantAppInstallerInfo);
+                final ComponentName installFailureActivity = findInstallFailureActivity(
+                        info.activityInfo.packageName,  filterCallingUid, userId);
+                installerInfo.auxiliaryInfo = new AuxiliaryResolveInfo(
+                        info.activityInfo.packageName, info.activityInfo.splitName,
+                        installFailureActivity,
+                        info.activityInfo.applicationInfo.versionCode,
+                        null /*failureIntent*/);
+                installerInfo.match = IntentFilter.MATCH_CATEGORY_SCHEME_SPECIFIC_PART
+                        | IntentFilter.MATCH_ADJUSTMENT_NORMAL;
+                // add a non-generic filter
+                installerInfo.filter = new IntentFilter();
+
+                // This resolve info may appear in the chooser UI, so let us make it
+                // look as the one it replaces as far as the user is concerned which
+                // requires loading the correct label and icon for the resolve info.
+                installerInfo.resolvePackageName = info.getComponentInfo().packageName;
+                installerInfo.labelRes = info.resolveLabelResId();
+                installerInfo.icon = info.resolveIconResId();
+
+                // propagate priority/preferred order/default
+                installerInfo.priority = info.priority;
+                installerInfo.preferredOrder = info.preferredOrder;
+                installerInfo.isDefault = info.isDefault;
+                resolveInfos.set(i, installerInfo);
+                continue;
             }
             // caller is a full app, don't need to apply any other filtering
             if (ephemeralPkgName == null) {
@@ -7367,6 +7735,7 @@
                 continue;
             }
             // allow activities that have been explicitly exposed to ephemeral apps
+            final boolean isEphemeralApp = info.activityInfo.applicationInfo.isInstantApp();
             if (!isEphemeralApp
                     && ((info.activityInfo.flags & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0)) {
                 continue;
@@ -7377,6 +7746,34 @@
     }
 
     /**
+     * Returns the activity component that can handle install failures.
+     * <p>By default, the instant application installer handles failures. However, an
+     * application may want to handle failures on its own. Applications do this by
+     * creating an activity with an intent filter that handles the action
+     * {@link Intent#ACTION_INSTALL_FAILURE}.
+     */
+    private @Nullable ComponentName findInstallFailureActivity(
+            String packageName, int filterCallingUid, int userId) {
+        final Intent failureActivityIntent = new Intent(Intent.ACTION_INSTALL_FAILURE);
+        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*/);
+        final int NR = result.size();
+        if (NR > 0) {
+            for (int i = 0; i < NR; i++) {
+                final ResolveInfo info = result.get(i);
+                if (info.activityInfo.splitName != null) {
+                    continue;
+                }
+                return new ComponentName(packageName, info.activityInfo.name);
+            }
+        }
+        return null;
+    }
+
+    /**
      * @param resolveInfos list of resolve infos in descending priority order
      * @return if the list contains a resolve info with non-negative priority
      */
@@ -7863,13 +8260,17 @@
     public @NonNull ParceledListSlice<ResolveInfo> queryIntentReceivers(Intent intent,
             String resolvedType, int flags, int userId) {
         return new ParceledListSlice<>(
-                queryIntentReceiversInternal(intent, resolvedType, flags, userId));
+                queryIntentReceiversInternal(intent, resolvedType, flags, userId,
+                        false /*allowDynamicSplits*/));
     }
 
     private @NonNull List<ResolveInfo> queryIntentReceiversInternal(Intent intent,
-            String resolvedType, int flags, int userId) {
+            String resolvedType, int flags, int userId, boolean allowDynamicSplits) {
         if (!sUserManager.exists(userId)) return Collections.emptyList();
         final int callingUid = Binder.getCallingUid();
+        enforceCrossUserPermission(callingUid, userId,
+                false /*requireFullPermission*/, false /*checkShell*/,
+                "query intent receivers");
         final String instantAppPkgName = getInstantAppPackageName(callingUid);
         flags = updateFlagsForResolve(flags, userId, intent, callingUid,
                 false /*includeInstantApps*/);
@@ -7920,7 +8321,8 @@
                     list.add(ri);
                 }
             }
-            return applyPostResolutionFilter(list, instantAppPkgName);
+            return applyPostResolutionFilter(
+                    list, instantAppPkgName, allowDynamicSplits, callingUid, userId);
         }
 
         // reader
@@ -7929,13 +8331,15 @@
             if (pkgName == null) {
                 final List<ResolveInfo> result =
                         mReceivers.queryIntent(intent, resolvedType, flags, userId);
-                return applyPostResolutionFilter(result, instantAppPkgName);
+                return applyPostResolutionFilter(
+                        result, instantAppPkgName, allowDynamicSplits, callingUid, userId);
             }
             final PackageParser.Package pkg = mPackages.get(pkgName);
             if (pkg != null) {
                 final List<ResolveInfo> result = mReceivers.queryIntentForPackage(
                         intent, resolvedType, flags, pkg.receivers, userId);
-                return applyPostResolutionFilter(result, instantAppPkgName);
+                return applyPostResolutionFilter(
+                        result, instantAppPkgName, allowDynamicSplits, callingUid, userId);
             }
             return Collections.emptyList();
         }
@@ -7976,6 +8380,9 @@
             String resolvedType, int flags, int userId, int callingUid,
             boolean includeInstantApps) {
         if (!sUserManager.exists(userId)) return Collections.emptyList();
+        enforceCrossUserPermission(callingUid, userId,
+                false /*requireFullPermission*/, false /*checkShell*/,
+                "query intent receivers");
         final String instantAppPkgName = getInstantAppPackageName(callingUid);
         flags = updateFlagsForResolve(flags, userId, intent, callingUid, includeInstantApps);
         ComponentName comp = intent.getComponent();
@@ -8041,8 +8448,6 @@
 
     private List<ResolveInfo> applyPostServiceResolutionFilter(List<ResolveInfo> resolveInfos,
             String instantAppPkgName) {
-        // TODO: When adding on-demand split support for non-instant apps, remove this check
-        // and always apply post filtering
         if (instantAppPkgName == null) {
             return resolveInfos;
         }
@@ -8062,7 +8467,8 @@
                     final ResolveInfo installerInfo = new ResolveInfo(mInstantAppInstallerInfo);
                     installerInfo.auxiliaryInfo = new AuxiliaryResolveInfo(
                             info.serviceInfo.packageName, info.serviceInfo.splitName,
-                            info.serviceInfo.applicationInfo.versionCode, null /*failureIntent*/);
+                            null /*failureActivity*/, info.serviceInfo.applicationInfo.versionCode,
+                            null /*failureIntent*/);
                     // make sure this resolver is the default
                     installerInfo.isDefault = true;
                     installerInfo.match = IntentFilter.MATCH_CATEGORY_SCHEME_SPECIFIC_PART
@@ -8162,8 +8568,6 @@
 
     private List<ResolveInfo> applyPostContentProviderResolutionFilter(
             List<ResolveInfo> resolveInfos, String instantAppPkgName) {
-        // TODO: When adding on-demand split support for non-instant applications, remove
-        // this check and always apply post filtering
         if (instantAppPkgName == null) {
             return resolveInfos;
         }
@@ -8183,7 +8587,8 @@
                     final ResolveInfo installerInfo = new ResolveInfo(mInstantAppInstallerInfo);
                     installerInfo.auxiliaryInfo = new AuxiliaryResolveInfo(
                             info.providerInfo.packageName, info.providerInfo.splitName,
-                            info.providerInfo.applicationInfo.versionCode, null /*failureIntent*/);
+                            null /*failureActivity*/, info.providerInfo.applicationInfo.versionCode,
+                            null /*failureIntent*/);
                     // make sure this resolver is the default
                     installerInfo.isDefault = true;
                     installerInfo.match = IntentFilter.MATCH_CATEGORY_SCHEME_SPECIFIC_PART
@@ -8229,7 +8634,7 @@
                         continue;
                     }
                     if (filterAppAccessLPr(ps, callingUid, userId)) {
-                        return null;
+                        continue;
                     }
                     final PackageInfo pi = generatePackageInfo(ps, flags, userId);
                     if (pi != null) {
@@ -8244,7 +8649,7 @@
                         continue;
                     }
                     if (filterAppAccessLPr(ps, callingUid, userId)) {
-                        return null;
+                        continue;
                     }
                     final PackageInfo pi = generatePackageInfo((PackageSetting)
                             p.mExtras, flags, userId);
@@ -8363,7 +8768,7 @@
                             continue;
                         }
                         if (filterAppAccessLPr(ps, callingUid, userId)) {
-                            return null;
+                            continue;
                         }
                         ai = PackageParser.generateApplicationInfo(ps.pkg, effectiveFlags,
                                 ps.readUserState(userId), userId);
@@ -8389,7 +8794,7 @@
                             continue;
                         }
                         if (filterAppAccessLPr(ps, callingUid, userId)) {
-                            return null;
+                            continue;
                         }
                         ApplicationInfo ai = PackageParser.generateApplicationInfo(p, flags,
                                 ps.readUserState(userId), userId);
@@ -8410,8 +8815,10 @@
         if (HIDE_EPHEMERAL_APIS || isEphemeralDisabled()) {
             return null;
         }
-        mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_INSTANT_APPS,
-                "getEphemeralApplications");
+        if (!canViewInstantApps(Binder.getCallingUid(), userId)) {
+            mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_INSTANT_APPS,
+                    "getEphemeralApplications");
+        }
         enforceCrossUserPermission(Binder.getCallingUid(), userId,
                 true /* requireFullPermission */, false /* checkShell */,
                 "getEphemeralApplications");
@@ -8433,12 +8840,12 @@
         if (HIDE_EPHEMERAL_APIS || isEphemeralDisabled()) {
             return false;
         }
-        int callingUid = Binder.getCallingUid();
-        if (Process.isIsolated(callingUid)) {
-            callingUid = mIsolatedOwners.get(callingUid);
-        }
 
         synchronized (mPackages) {
+            int callingUid = Binder.getCallingUid();
+            if (Process.isIsolated(callingUid)) {
+                callingUid = mIsolatedOwners.get(callingUid);
+            }
             final PackageSetting ps = mSettings.mPackages.get(packageName);
             PackageParser.Package pkg = mPackages.get(packageName);
             final boolean returnAllowed =
@@ -8496,9 +8903,10 @@
             return null;
         }
 
-        mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_INSTANT_APPS,
-                "getInstantAppIcon");
-
+        if (!canViewInstantApps(Binder.getCallingUid(), userId)) {
+            mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_INSTANT_APPS,
+                    "getInstantAppIcon");
+        }
         enforceCrossUserPermission(Binder.getCallingUid(), userId,
                 true /* requireFullPermission */, false /* checkShell */,
                 "getInstantAppIcon");
@@ -9154,6 +9562,15 @@
         // throw an exception if we have an update to a system application, but, it's not more
         // recent than the package we've already scanned
         if (isUpdatedSystemPkg && !isUpdatedPkgBetter) {
+            // Set CPU Abis to application info.
+            if ((scanFlags & SCAN_FIRST_BOOT_OR_UPGRADE) != 0) {
+                final String cpuAbiOverride = deriveAbiOverride(pkg.cpuAbiOverride, updatedPkg);
+                derivePackageAbi(pkg, scanFile, cpuAbiOverride, false, mAppLib32InstallDir);
+            } else {
+                pkg.applicationInfo.primaryCpuAbi = updatedPkg.primaryCpuAbiString;
+                pkg.applicationInfo.secondaryCpuAbi = updatedPkg.secondaryCpuAbiString;
+            }
+
             throw new PackageManagerException(Log.WARN, "Package " + ps.name + " at "
                     + scanFile + " ignored: updated version " + ps.versionCode
                     + " better than this " + pkg.mVersionCode);
@@ -9238,6 +9655,9 @@
         if (ps != null && ps.getInstantApp(userId)) {
             scanFlags |= SCAN_AS_INSTANT_APP;
         }
+        if (ps != null && ps.getVirtulalPreload(userId)) {
+            scanFlags |= SCAN_AS_VIRTUAL_PRELOAD;
+        }
 
         // Note that we invoke the following method only if we are about to unpack an application
         PackageParser.Package scannedPkg = scanPackageLI(pkg, policyFlags, scanFlags
@@ -9425,7 +9845,7 @@
      * and {@code numberOfPackagesFailed}.
      */
     private int[] performDexOptUpgrade(List<PackageParser.Package> pkgs, boolean showDialog,
-            String compilerFilter, boolean bootComplete) {
+            final String compilerFilter, boolean bootComplete) {
 
         int numberOfPackagesVisited = 0;
         int numberOfPackagesOptimized = 0;
@@ -9436,6 +9856,8 @@
         for (PackageParser.Package pkg : pkgs) {
             numberOfPackagesVisited++;
 
+            boolean useProfileForDexopt = false;
+
             if ((isFirstBoot() || isUpgrade()) && isSystemApp(pkg)) {
                 // Copy over initial preopt profiles since we won't get any JIT samples for methods
                 // that are already compiled.
@@ -9449,11 +9871,50 @@
                         if (!mInstaller.copySystemProfile(profileFile.getAbsolutePath(),
                                 pkg.applicationInfo.uid, pkg.packageName)) {
                             Log.e(TAG, "Installer failed to copy system profile!");
+                        } else {
+                            // Disabled as this causes speed-profile compilation during first boot
+                            // even if things are already compiled.
+                            // useProfileForDexopt = true;
                         }
                     } catch (Exception e) {
                         Log.e(TAG, "Failed to copy profile " + profileFile.getAbsolutePath() + " ",
                                 e);
                     }
+                } else {
+                    PackageSetting disabledPs = mSettings.getDisabledSystemPkgLPr(pkg.packageName);
+                    // Handle compressed APKs in this path. Only do this for stubs with profiles to
+                    // minimize the number off apps being speed-profile compiled during first boot.
+                    // The other paths will not change the filter.
+                    if (disabledPs != null && disabledPs.pkg.isStub) {
+                        // The package is the stub one, remove the stub suffix to get the normal
+                        // package and APK names.
+                        String systemProfilePath =
+                                getPrebuildProfilePath(disabledPs.pkg).replace(STUB_SUFFIX, "");
+                        profileFile = new File(systemProfilePath);
+                        // If we have a profile for a compressed APK, copy it to the reference
+                        // location.
+                        // Note that copying the profile here will cause it to override the
+                        // reference profile every OTA even though the existing reference profile
+                        // may have more data. We can't copy during decompression since the
+                        // directories are not set up at that point.
+                        if (profileFile.exists()) {
+                            try {
+                                // We could also do this lazily before calling dexopt in
+                                // PackageDexOptimizer to prevent this happening on first boot. The
+                                // issue is that we don't have a good way to say "do this only
+                                // once".
+                                if (!mInstaller.copySystemProfile(profileFile.getAbsolutePath(),
+                                        pkg.applicationInfo.uid, pkg.packageName)) {
+                                    Log.e(TAG, "Failed to copy system profile for stub package!");
+                                } else {
+                                    useProfileForDexopt = true;
+                                }
+                            } catch (Exception e) {
+                                Log.e(TAG, "Failed to copy profile " +
+                                        profileFile.getAbsolutePath() + " ", e);
+                            }
+                        }
+                    }
                 }
             }
 
@@ -9482,17 +9943,13 @@
                 }
             }
 
-            // If the OTA updates a system app which was previously preopted to a non-preopted state
-            // the app might end up being verified at runtime. That's because by default the apps
-            // are verify-profile but for preopted apps there's no profile.
-            // Do a hacky check to ensure that if we have no profiles (a reasonable indication
-            // that before the OTA the app was preopted) the app gets compiled with a non-profile
-            // filter (by default 'quicken').
-            // Note that at this stage unused apps are already filtered.
-            if (isSystemApp(pkg) &&
-                    DexFile.isProfileGuidedCompilerFilter(compilerFilter) &&
-                    !Environment.getReferenceProfile(pkg.packageName).exists()) {
-                compilerFilter = getNonProfileGuidedCompilerFilter(compilerFilter);
+            String pkgCompilerFilter = compilerFilter;
+            if (useProfileForDexopt) {
+                // Use background dexopt mode to try and use the profile. Note that this does not
+                // guarantee usage of the profile.
+                pkgCompilerFilter =
+                        PackageManagerServiceCompilerMapping.getCompilerFilterForReason(
+                                PackageManagerService.REASON_BACKGROUND_DEXOPT);
             }
 
             // checkProfiles is false to avoid merging profiles during boot which
@@ -9500,12 +9957,13 @@
             // Unfortunately this will also means that "pm.dexopt.boot=speed-profile" will
             // behave differently than "pm.dexopt.bg-dexopt=speed-profile" but that's a
             // trade-off worth doing to save boot time work.
-            int dexOptStatus = performDexOptTraced(pkg.packageName,
-                    false /* checkProfiles */,
-                    compilerFilter,
-                    false /* force */,
-                    bootComplete);
-            switch (dexOptStatus) {
+            int dexoptFlags = bootComplete ? DexoptOptions.DEXOPT_BOOT_COMPLETE : 0;
+            int primaryDexOptStaus = performDexOptTraced(new DexoptOptions(
+                    pkg.packageName,
+                    pkgCompilerFilter,
+                    dexoptFlags));
+
+            switch (primaryDexOptStaus) {
                 case PackageDexOptimizer.DEX_OPT_PERFORMED:
                     numberOfPackagesOptimized++;
                     break;
@@ -9516,7 +9974,7 @@
                     numberOfPackagesFailed++;
                     break;
                 default:
-                    Log.e(TAG, "Unexpected dexopt return code " + dexOptStatus);
+                    Log.e(TAG, "Unexpected dexopt return code " + primaryDexOptStaus);
                     break;
             }
         }
@@ -9539,16 +9997,21 @@
                     return;
                 }
             }
-            final PackageParser.Package p = mPackages.get(packageName);
-            if (p == null) {
-                return;
-            }
-            p.mLastPackageUsageTimeInMills[reason] = System.currentTimeMillis();
+            notifyPackageUseLocked(packageName, reason);
         }
     }
 
+    private void notifyPackageUseLocked(String packageName, int reason) {
+        final PackageParser.Package p = mPackages.get(packageName);
+        if (p == null) {
+            return;
+        }
+        p.mLastPackageUsageTimeInMills[reason] = System.currentTimeMillis();
+    }
+
     @Override
-    public void notifyDexLoad(String loadingPackageName, List<String> dexPaths, String loaderIsa) {
+    public void notifyDexLoad(String loadingPackageName, List<String> classLoaderNames,
+            List<String> classPaths, String loaderIsa) {
         int userId = UserHandle.getCallingUserId();
         ApplicationInfo ai = getApplicationInfo(loadingPackageName, /*flags*/ 0, userId);
         if (ai == null) {
@@ -9556,7 +10019,7 @@
                 + loadingPackageName + ", user=" + userId);
             return;
         }
-        mDexManager.notifyDexLoad(ai, dexPaths, loaderIsa, userId);
+        mDexManager.notifyDexLoad(ai, classLoaderNames, classPaths, loaderIsa, userId);
     }
 
     @Override
@@ -9584,17 +10047,53 @@
         }
     }
 
+    /**
+     * Ask the package manager to perform a dex-opt with the given compiler filter.
+     *
+     * Note: exposed only for the shell command to allow moving packages explicitly to a
+     *       definite state.
+     */
     @Override
-    public boolean performDexOpt(String packageName,
-            boolean checkProfiles, int compileReason, boolean force, boolean bootComplete) {
+    public boolean performDexOptMode(String packageName,
+            boolean checkProfiles, String targetCompilerFilter, boolean force,
+            boolean bootComplete, String splitName) {
+        int flags = (checkProfiles ? DexoptOptions.DEXOPT_CHECK_FOR_PROFILES_UPDATES : 0) |
+                (force ? DexoptOptions.DEXOPT_FORCE : 0) |
+                (bootComplete ? DexoptOptions.DEXOPT_BOOT_COMPLETE : 0);
+        return performDexOpt(new DexoptOptions(packageName, targetCompilerFilter,
+                splitName, flags));
+    }
+
+    /**
+     * Ask the package manager to perform a dex-opt with the given compiler filter on the
+     * secondary dex files belonging to the given package.
+     *
+     * Note: exposed only for the shell command to allow moving packages explicitly to a
+     *       definite state.
+     */
+    @Override
+    public boolean performDexOptSecondary(String packageName, String compilerFilter,
+            boolean force) {
+        int flags = DexoptOptions.DEXOPT_ONLY_SECONDARY_DEX |
+                DexoptOptions.DEXOPT_CHECK_FOR_PROFILES_UPDATES |
+                DexoptOptions.DEXOPT_BOOT_COMPLETE |
+                (force ? DexoptOptions.DEXOPT_FORCE : 0);
+        return performDexOpt(new DexoptOptions(packageName, compilerFilter, flags));
+    }
+
+    /*package*/ boolean performDexOpt(DexoptOptions options) {
         if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
             return false;
-        } else if (isInstantApp(packageName, UserHandle.getCallingUserId())) {
+        } else if (isInstantApp(options.getPackageName(), UserHandle.getCallingUserId())) {
             return false;
         }
-        int dexoptStatus = performDexOptWithStatus(
-              packageName, checkProfiles, compileReason, force, bootComplete);
-        return dexoptStatus != PackageDexOptimizer.DEX_OPT_FAILED;
+
+        if (options.isDexoptOnlySecondaryDex()) {
+            return mDexManager.dexoptSecondaryDex(options);
+        } else {
+            int dexoptStatus = performDexOptWithStatus(options);
+            return dexoptStatus != PackageDexOptimizer.DEX_OPT_FAILED;
+        }
     }
 
     /**
@@ -9603,33 +10102,14 @@
      *  {@link PackageDexOptimizer#DEX_OPT_PERFORMED}
      *  {@link PackageDexOptimizer#DEX_OPT_FAILED}
      */
-    /* package */ int performDexOptWithStatus(String packageName,
-            boolean checkProfiles, int compileReason, boolean force, boolean bootComplete) {
-        return performDexOptTraced(packageName, checkProfiles,
-                getCompilerFilterForReason(compileReason), force, bootComplete);
+    /* package */ int performDexOptWithStatus(DexoptOptions options) {
+        return performDexOptTraced(options);
     }
 
-    @Override
-    public boolean performDexOptMode(String packageName,
-            boolean checkProfiles, String targetCompilerFilter, boolean force,
-            boolean bootComplete) {
-        if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
-            return false;
-        } else if (isInstantApp(packageName, UserHandle.getCallingUserId())) {
-            return false;
-        }
-        int dexOptStatus = performDexOptTraced(packageName, checkProfiles,
-                targetCompilerFilter, force, bootComplete);
-        return dexOptStatus != PackageDexOptimizer.DEX_OPT_FAILED;
-    }
-
-    private int performDexOptTraced(String packageName,
-                boolean checkProfiles, String targetCompilerFilter, boolean force,
-                boolean bootComplete) {
+    private int performDexOptTraced(DexoptOptions options) {
         Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt");
         try {
-            return performDexOptInternal(packageName, checkProfiles,
-                    targetCompilerFilter, force, bootComplete);
+            return performDexOptInternal(options);
         } finally {
             Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
         }
@@ -9637,12 +10117,10 @@
 
     // Run dexopt on a given package. Returns true if dexopt did not fail, i.e.
     // if the package can now be considered up to date for the given filter.
-    private int performDexOptInternal(String packageName,
-                boolean checkProfiles, String targetCompilerFilter, boolean force,
-                boolean bootComplete) {
+    private int performDexOptInternal(DexoptOptions options) {
         PackageParser.Package p;
         synchronized (mPackages) {
-            p = mPackages.get(packageName);
+            p = mPackages.get(options.getPackageName());
             if (p == null) {
                 // Package could not be found. Report failure.
                 return PackageDexOptimizer.DEX_OPT_FAILED;
@@ -9653,8 +10131,7 @@
         long callingId = Binder.clearCallingIdentity();
         try {
             synchronized (mInstallLock) {
-                return performDexOptInternalWithDependenciesLI(p, checkProfiles,
-                        targetCompilerFilter, force, bootComplete);
+                return performDexOptInternalWithDependenciesLI(p, options);
             }
         } finally {
             Binder.restoreCallingIdentity(callingId);
@@ -9674,12 +10151,11 @@
     }
 
     private int performDexOptInternalWithDependenciesLI(PackageParser.Package p,
-            boolean checkProfiles, String targetCompilerFilter,
-            boolean force, boolean bootComplete) {
+            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.
-        PackageDexOptimizer pdo = force
+        PackageDexOptimizer pdo = options.isForce()
                 ? new PackageDexOptimizer.ForcedUpdatePackageDexOptimizer(mPackageDexOptimizer)
                 : mPackageDexOptimizer;
 
@@ -9693,39 +10169,19 @@
         Collection<PackageParser.Package> deps = findSharedNonSystemLibraries(p);
         final String[] instructionSets = getAppDexInstructionSets(p.applicationInfo);
         if (!deps.isEmpty()) {
+            DexoptOptions libraryOptions = new DexoptOptions(options.getPackageName(),
+                    options.getCompilerFilter(), options.getSplitName(),
+                    options.getFlags() | DexoptOptions.DEXOPT_AS_SHARED_LIBRARY);
             for (PackageParser.Package depPackage : deps) {
                 // TODO: Analyze and investigate if we (should) profile libraries.
                 pdo.performDexOpt(depPackage, null /* sharedLibraries */, instructionSets,
-                        false /* checkProfiles */,
-                        targetCompilerFilter,
                         getOrCreateCompilerPackageStats(depPackage),
-                        true /* isUsedByOtherApps */,
-                        bootComplete);
+                    mDexManager.getPackageUseInfoOrDefault(depPackage.packageName), libraryOptions);
             }
         }
-        return pdo.performDexOpt(p, p.usesLibraryFiles, instructionSets, checkProfiles,
-                targetCompilerFilter, getOrCreateCompilerPackageStats(p),
-                mDexManager.isUsedByOtherApps(p.packageName), bootComplete);
-    }
-
-    // Performs dexopt on the used secondary dex files belonging to the given package.
-    // Returns true if all dex files were process successfully (which could mean either dexopt or
-    // skip). Returns false if any of the files caused errors.
-    @Override
-    public boolean performDexOptSecondary(String packageName, String compilerFilter,
-            boolean force) {
-        if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
-            return false;
-        } else if (isInstantApp(packageName, UserHandle.getCallingUserId())) {
-            return false;
-        }
-        mDexManager.reconcileSecondaryDexFiles(packageName);
-        return mDexManager.dexoptSecondaryDex(packageName, compilerFilter, force);
-    }
-
-    public boolean performDexOptSecondary(String packageName, int compileReason,
-            boolean force) {
-        return mDexManager.dexoptSecondaryDex(packageName, compileReason, force);
+        return pdo.performDexOpt(p, p.usesLibraryFiles, instructionSets,
+                getOrCreateCompilerPackageStats(p),
+                mDexManager.getPackageUseInfoOrDefault(p.packageName), options);
     }
 
     /**
@@ -9851,6 +10307,7 @@
     public void shutdown() {
         mPackageUsage.writeNow(mPackages);
         mCompilerStats.writeNow();
+        mDexManager.writePackageDexUsageNow();
     }
 
     @Override
@@ -9901,10 +10358,11 @@
 
             // 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,
-                    false /* checkProfiles */, getDefaultCompilerFilter(),
-                    true /* force */,
-                    true /* bootComplete */);
+            final int res = performDexOptInternalWithDependenciesLI(
+                    pkg,
+                    new DexoptOptions(packageName,
+                            getDefaultCompilerFilter(),
+                            DexoptOptions.DEXOPT_FORCE | DexoptOptions.DEXOPT_BOOT_COMPLETE));
 
             Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
             if (res != PackageDexOptimizer.DEX_OPT_PERFORMED) {
@@ -10093,16 +10551,19 @@
         ArraySet<String> usesLibraryFiles = null;
         if (pkg.usesLibraries != null) {
             usesLibraryFiles = addSharedLibrariesLPw(pkg.usesLibraries,
-                    null, null, pkg.packageName, changingLib, true, null);
+                    null, null, pkg.packageName, changingLib, true,
+                    pkg.applicationInfo.targetSdkVersion, null);
         }
         if (pkg.usesStaticLibraries != null) {
             usesLibraryFiles = addSharedLibrariesLPw(pkg.usesStaticLibraries,
                     pkg.usesStaticLibrariesVersions, pkg.usesStaticLibrariesCertDigests,
-                    pkg.packageName, changingLib, true, usesLibraryFiles);
+                    pkg.packageName, changingLib, true,
+                    pkg.applicationInfo.targetSdkVersion, usesLibraryFiles);
         }
         if (pkg.usesOptionalLibraries != null) {
             usesLibraryFiles = addSharedLibrariesLPw(pkg.usesOptionalLibraries,
-                    null, null, pkg.packageName, changingLib, false, usesLibraryFiles);
+                    null, null, pkg.packageName, changingLib, false,
+                    pkg.applicationInfo.targetSdkVersion, usesLibraryFiles);
         }
         if (!ArrayUtils.isEmpty(usesLibraryFiles)) {
             pkg.usesLibraryFiles = usesLibraryFiles.toArray(new String[usesLibraryFiles.size()]);
@@ -10112,9 +10573,9 @@
     }
 
     private ArraySet<String> addSharedLibrariesLPw(@NonNull List<String> requestedLibraries,
-            @Nullable int[] requiredVersions, @Nullable String[] requiredCertDigests,
+            @Nullable int[] requiredVersions, @Nullable String[][] requiredCertDigests,
             @NonNull String packageName, @Nullable PackageParser.Package changingLib,
-            boolean required, @Nullable ArraySet<String> outUsedLibraries)
+            boolean required, int targetSdk, @Nullable ArraySet<String> outUsedLibraries)
             throws PackageManagerException {
         final int libCount = requestedLibraries.size();
         for (int i = 0; i < libCount; i++) {
@@ -10148,13 +10609,34 @@
                                         + " library; failing!");
                     }
 
-                    String expectedCertDigest = requiredCertDigests[i];
-                    String libCertDigest = PackageUtils.computeCertSha256Digest(
-                                libPkg.mSignatures[0]);
-                    if (!libCertDigest.equalsIgnoreCase(expectedCertDigest)) {
+                    final String[] expectedCertDigests = requiredCertDigests[i];
+                    // For apps targeting O MR1 we require explicit enumeration of all certs.
+                    final String[] libCertDigests = (targetSdk > Build.VERSION_CODES.O)
+                            ? PackageUtils.computeSignaturesSha256Digests(libPkg.mSignatures)
+                            : PackageUtils.computeSignaturesSha256Digests(
+                                    new Signature[]{libPkg.mSignatures[0]});
+
+                    // Take a shortcut if sizes don't match. Note that if an app doesn't
+                    // target O we don't parse the "additional-certificate" tags similarly
+                    // how we only consider all certs only for apps targeting O (see above).
+                    // Therefore, the size check is safe to make.
+                    if (expectedCertDigests.length != libCertDigests.length) {
                         throw new PackageManagerException(INSTALL_FAILED_MISSING_SHARED_LIBRARY,
                                 "Package " + packageName + " requires differently signed" +
-                                        " static shared library; failing!");
+                                        " static sDexLoadReporter.java:45.19hared library; failing!");
+                    }
+
+                    // Use a predictable order as signature order may vary
+                    Arrays.sort(libCertDigests);
+                    Arrays.sort(expectedCertDigests);
+
+                    final int certCount = libCertDigests.length;
+                    for (int j = 0; j < certCount; j++) {
+                        if (!libCertDigests[j].equalsIgnoreCase(expectedCertDigests[j])) {
+                            throw new PackageManagerException(INSTALL_FAILED_MISSING_SHARED_LIBRARY,
+                                    "Package " + packageName + " requires differently signed" +
+                                            " static shared library; failing!");
+                        }
                     }
                 }
 
@@ -10488,15 +10970,17 @@
                 final String parentPackageName = (pkg.parentPackage != null)
                         ? pkg.parentPackage.packageName : null;
                 final boolean instantApp = (scanFlags & SCAN_AS_INSTANT_APP) != 0;
+                final boolean virtualPreload = (scanFlags & SCAN_AS_VIRTUAL_PRELOAD) != 0;
                 // REMOVE SharedUserSetting from method; update in a separate call
                 pkgSetting = Settings.createNewSetting(pkg.packageName, origPackage,
                         disabledPkgSetting, realName, suid, destCodeFile, destResourceFile,
                         pkg.applicationInfo.nativeLibraryRootDir, pkg.applicationInfo.primaryCpuAbi,
                         pkg.applicationInfo.secondaryCpuAbi, pkg.mVersionCode,
                         pkg.applicationInfo.flags, pkg.applicationInfo.privateFlags, user,
-                        true /*allowInstall*/, instantApp, parentPackageName,
-                        pkg.getChildPackageNames(), UserManagerService.getInstance(),
-                        usesStaticLibraries, pkg.usesStaticLibrariesVersions);
+                        true /*allowInstall*/, instantApp, virtualPreload,
+                        parentPackageName, pkg.getChildPackageNames(),
+                        UserManagerService.getInstance(), usesStaticLibraries,
+                        pkg.usesStaticLibrariesVersions);
                 // SIDE EFFECTS; updates system state; move elsewhere
                 if (origPackage != null) {
                     mSettings.addRenamedPackageLPw(pkg.packageName, origPackage.name);
@@ -10855,6 +11339,9 @@
                     r.info.encryptionAware = r.info.directBootAware = true;
                 }
             }
+            if (compressedFileExists(pkg.codePath)) {
+                pkg.isStub = true;
+            }
         } else {
             // Only allow system apps to be flagged as core apps.
             pkg.coreApp = false;
@@ -11091,6 +11578,10 @@
                                     + " but expected at " + known.codePathString
                                     + "; ignoring.");
                         }
+                    } else {
+                        throw new PackageManagerException(INSTALL_FAILED_INVALID_INSTALL_LOCATION,
+                                "Application package " + pkg.packageName
+                                + " not found; ignoring.");
                     }
                 }
             }
@@ -11641,8 +12132,10 @@
 
             if (pkg.protectedBroadcasts != null) {
                 N = pkg.protectedBroadcasts.size();
-                for (i=0; i<N; i++) {
-                    mProtectedBroadcasts.add(pkg.protectedBroadcasts.get(i));
+                synchronized (mProtectedBroadcasts) {
+                    for (i = 0; i < N; i++) {
+                        mProtectedBroadcasts.add(pkg.protectedBroadcasts.get(i));
+                    }
                 }
             }
         }
@@ -12926,18 +13419,28 @@
         boolean platformPackage = PLATFORM_PACKAGE_NAME.equals(pkg.packageName);
         if (!privappPermissionsDisable && privilegedPermission && pkg.isPrivilegedApp()
                 && !platformPackage && platformPermission) {
-            ArraySet<String> wlPermissions = SystemConfig.getInstance()
+            final ArraySet<String> allowedPermissions = SystemConfig.getInstance()
                     .getPrivAppPermissions(pkg.packageName);
-            boolean whitelisted = wlPermissions != null && wlPermissions.contains(perm);
+            final boolean whitelisted =
+                    allowedPermissions != null && allowedPermissions.contains(perm);
             if (!whitelisted) {
                 Slog.w(TAG, "Privileged permission " + perm + " for package "
                         + pkg.packageName + " - not in privapp-permissions whitelist");
                 // Only report violations for apps on system image
                 if (!mSystemReady && !pkg.isUpdatedSystemApp()) {
-                    if (mPrivappPermissionsViolations == null) {
-                        mPrivappPermissionsViolations = new ArraySet<>();
+                    // it's only a reportable violation if the permission isn't explicitly denied
+                    final ArraySet<String> deniedPermissions = SystemConfig.getInstance()
+                            .getPrivAppDenyPermissions(pkg.packageName);
+                    final boolean permissionViolation =
+                            deniedPermissions == null || !deniedPermissions.contains(perm);
+                    if (permissionViolation) {
+                        if (mPrivappPermissionsViolations == null) {
+                            mPrivappPermissionsViolations = new ArraySet<>();
+                        }
+                        mPrivappPermissionsViolations.add(pkg.packageName + ": " + perm);
+                    } else {
+                        return false;
                     }
-                    mPrivappPermissionsViolations.add(pkg.packageName + ": " + perm);
                 }
                 if (RoSystemProperties.CONTROL_PRIVAPP_PERMISSIONS_ENFORCE) {
                     return false;
@@ -14131,7 +14634,7 @@
                 }
                 if (savedInfo.second == info) {
                     // circled back to the highest ordered item; remove from order list
-                    mOrderResult.remove(savedInfo);
+                    mOrderResult.remove(packageName);
                     if (mOrderResult.size() == 0) {
                         // no more ordered items
                         break;
@@ -14497,7 +15000,8 @@
     private void sendPackageAddedForUser(String packageName, PackageSetting pkgSetting,
             int userId) {
         final boolean isSystem = isSystemApp(pkgSetting) || isUpdatedSystemApp(pkgSetting);
-        sendPackageAddedForNewUsers(packageName, isSystem, pkgSetting.appId, userId);
+        sendPackageAddedForNewUsers(packageName, isSystem /*sendBootCompleted*/,
+                false /*startReceiver*/, pkgSetting.appId, userId);
 
         // Send a session commit broadcast
         final PackageInstaller.SessionInfo info = new PackageInstaller.SessionInfo();
@@ -14506,7 +15010,8 @@
         sendSessionCommitBroadcast(info, userId);
     }
 
-    public void sendPackageAddedForNewUsers(String packageName, boolean isSystem, int appId, int... userIds) {
+    public void sendPackageAddedForNewUsers(String packageName, boolean sendBootCompleted,
+            boolean includeStopped, int appId, int... userIds) {
         if (ArrayUtils.isEmpty(userIds)) {
             return;
         }
@@ -14516,10 +15021,11 @@
 
         sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED,
                 packageName, extras, 0, null, null, userIds);
-        if (isSystem) {
+        if (sendBootCompleted) {
             mHandler.post(() -> {
                         for (int userId : userIds) {
-                            sendBootCompletedBroadcastToSystemApp(packageName, userId);
+                            sendBootCompletedBroadcastToSystemApp(
+                                    packageName, includeStopped, userId);
                         }
                     }
             );
@@ -14531,7 +15037,8 @@
      * automatically without needing an explicit launch.
      * Send it a LOCKED_BOOT_COMPLETED/BOOT_COMPLETED if it would ordinarily have gotten ones.
      */
-    private void sendBootCompletedBroadcastToSystemApp(String packageName, int userId) {
+    private void sendBootCompletedBroadcastToSystemApp(String packageName, boolean includeStopped,
+            int userId) {
         // If user is not running, the app didn't miss any broadcast
         if (!mUserManagerInternal.isUserRunning(userId)) {
             return;
@@ -14541,6 +15048,9 @@
             // Deliver LOCKED_BOOT_COMPLETED first
             Intent lockedBcIntent = new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED)
                     .setPackage(packageName);
+            if (includeStopped) {
+                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);
@@ -14548,6 +15058,9 @@
             // Deliver BOOT_COMPLETED only if user is unlocked
             if (mUserManagerInternal.isUserUnlockingOrUnlocked(userId)) {
                 Intent bcIntent = new Intent(Intent.ACTION_BOOT_COMPLETED).setPackage(packageName);
+                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);
             }
@@ -15213,6 +15726,11 @@
     @Override
     public int getIntentVerificationStatus(String packageName, int userId) {
         final int callingUid = Binder.getCallingUid();
+        if (UserHandle.getUserId(callingUid) != userId) {
+            mContext.enforceCallingOrSelfPermission(
+                    android.Manifest.permission.INTERACT_ACROSS_USERS_FULL,
+                    "getIntentVerificationStatus" + userId);
+        }
         if (getInstantAppPackageName(callingUid) != null) {
             return INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
         }
@@ -15296,6 +15814,10 @@
     public boolean setDefaultBrowserPackageName(String packageName, int userId) {
         mContext.enforceCallingOrSelfPermission(
                 android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null);
+        if (UserHandle.getCallingUserId() != userId) {
+            mContext.enforceCallingOrSelfPermission(
+                    android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null);
+        }
 
         synchronized (mPackages) {
             boolean result = mSettings.setDefaultBrowserPackageNameLPw(packageName, userId);
@@ -15309,6 +15831,10 @@
 
     @Override
     public String getDefaultBrowserPackageName(int userId) {
+        if (UserHandle.getCallingUserId() != userId) {
+            mContext.enforceCallingOrSelfPermission(
+                    android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null);
+        }
         if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
             return null;
         }
@@ -16041,7 +16567,8 @@
 
                     // Query all live verifiers based on current user state
                     final List<ResolveInfo> receivers = queryIntentReceiversInternal(verification,
-                            PACKAGE_MIME_TYPE, 0, verifierUser.getIdentifier());
+                            PACKAGE_MIME_TYPE, 0, verifierUser.getIdentifier(),
+                            false /*allowDynamicSplits*/);
 
                     if (DEBUG_VERIFY) {
                         Slog.d(TAG, "Found " + receivers.size() + " verifiers for intent "
@@ -16350,7 +16877,7 @@
         }
     }
 
-    private void removeDexFiles(List<String> allCodePaths, String[] instructionSets) {
+    void removeDexFiles(List<String> allCodePaths, String[] instructionSets) {
         if (!allCodePaths.isEmpty()) {
             if (instructionSets == null) {
                 throw new IllegalStateException("instructionSet == null");
@@ -17106,6 +17633,7 @@
         PackageParser.Package pkg;
         int returnCode;
         String returnMsg;
+        String installerPackageName;
         PackageRemovedInfo removedInfo;
         ArrayMap<String, PackageInstalledInfo> addedChildPackages;
 
@@ -17118,12 +17646,20 @@
         public void setError(String msg, PackageParserException e) {
             setReturnCode(e.error);
             setReturnMessage(ExceptionUtils.getCompleteMessage(msg, e));
+            final int childCount = (addedChildPackages != null) ? addedChildPackages.size() : 0;
+            for (int i = 0; i < childCount; i++) {
+                addedChildPackages.valueAt(i).setError(msg, e);
+            }
             Slog.w(TAG, msg, e);
         }
 
         public void setError(String msg, PackageManagerException e) {
             returnCode = e.error;
             setReturnMessage(ExceptionUtils.getCompleteMessage(msg, e));
+            final int childCount = (addedChildPackages != null) ? addedChildPackages.size() : 0;
+            for (int i = 0; i < childCount; i++) {
+                addedChildPackages.valueAt(i).setError(msg, e);
+            }
             Slog.w(TAG, msg, e);
         }
 
@@ -17995,6 +18531,8 @@
         final boolean instantApp = ((installFlags & PackageManager.INSTALL_INSTANT_APP) != 0);
         final boolean fullApp = ((installFlags & PackageManager.INSTALL_FULL_APP) != 0);
         final boolean forceSdk = ((installFlags & PackageManager.INSTALL_FORCE_SDK) != 0);
+        final boolean virtualPreload =
+                ((installFlags & PackageManager.INSTALL_VIRTUAL_PRELOAD) != 0);
         boolean replace = false;
         int scanFlags = SCAN_NEW_INSTALL | SCAN_UPDATE_SIGNATURE;
         if (args.move != null) {
@@ -18010,9 +18548,13 @@
         if (fullApp) {
             scanFlags |= SCAN_AS_FULL_APP;
         }
+        if (virtualPreload) {
+            scanFlags |= SCAN_AS_VIRTUAL_PRELOAD;
+        }
 
         // Result object to be returned
         res.setReturnCode(PackageManager.INSTALL_SUCCEEDED);
+        res.installerPackageName = installerPackageName;
 
         if (DEBUG_INSTALL) Slog.d(TAG, "installPackageLI: path=" + tmpPackageFile);
 
@@ -18255,12 +18797,12 @@
                 BasePermission bp = mSettings.mPermissions.get(perm.info.name);
 
                 // Don't allow anyone but the system to define ephemeral permissions.
-                if ((perm.info.protectionLevel & PermissionInfo.PROTECTION_FLAG_EPHEMERAL) != 0
+                if ((perm.info.protectionLevel & PermissionInfo.PROTECTION_FLAG_INSTANT) != 0
                         && !systemApp) {
                     Slog.w(TAG, "Non-System package " + pkg.packageName
                             + " attempting to delcare ephemeral permission "
                             + perm.info.name + "; Removing ephemeral.");
-                    perm.info.protectionLevel &= ~PermissionInfo.PROTECTION_FLAG_EPHEMERAL;
+                    perm.info.protectionLevel &= ~PermissionInfo.PROTECTION_FLAG_INSTANT;
                 }
                 // Check whether the newly-scanned package wants to define an already-defined perm
                 if (bp != null) {
@@ -18369,34 +18911,6 @@
                     Slog.e(TAG, "updateAllSharedLibrariesLPw failed: " + e.getMessage());
                 }
             }
-
-            // dexopt can take some time to complete, so, for instant apps, we skip this
-            // step during installation. Instead, we'll take extra time the first time the
-            // instant app starts. It's preferred to do it this way to provide continuous
-            // progress to the user instead of mysteriously blocking somewhere in the
-            // middle of running an instant app. The default behaviour can be overridden
-            // via gservices.
-            if (!instantApp || Global.getInt(
-                        mContext.getContentResolver(), Global.INSTANT_APP_DEXOPT_ENABLED, 0) != 0) {
-                Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt");
-                // Do not run PackageDexOptimizer through the local performDexOpt
-                // method because `pkg` may not be in `mPackages` yet.
-                //
-                // Also, don't fail application installs if the dexopt step fails.
-                mPackageDexOptimizer.performDexOpt(pkg, pkg.usesLibraryFiles,
-                        null /* instructionSets */, false /* checkProfiles */,
-                        getCompilerFilterForReason(REASON_INSTALL),
-                        getOrCreateCompilerPackageStats(pkg),
-                        mDexManager.isUsedByOtherApps(pkg.packageName),
-                        true /* bootComplete */);
-                Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
-            }
-
-            // Notify BackgroundDexOptService that the package has been changed.
-            // If this is an update of a package which used to fail to compile,
-            // BDOS will remove it from its blacklist.
-            // TODO: Layering violation
-            BackgroundDexOptService.notifyPackageChanged(pkg.packageName);
         }
 
         if (!args.doRename(res.returnCode, pkg, oldCodePath)) {
@@ -18404,6 +18918,50 @@
             return;
         }
 
+        // Verify if we need to dexopt the app.
+        //
+        // NOTE: it is *important* to call dexopt after doRename which will sync the
+        // package data from PackageParser.Package and its corresponding ApplicationInfo.
+        //
+        // We only need to dexopt if the package meets ALL of the following conditions:
+        //   1) it is not forward locked.
+        //   2) it is not on on an external ASEC container.
+        //   3) it is not an instant app or if it is then dexopt is enabled via gservices.
+        //
+        // Note that we do not dexopt instant apps by default. dexopt can take some time to
+        // complete, so we skip this step during installation. Instead, we'll take extra time
+        // the first time the instant app starts. It's preferred to do it this way to provide
+        // continuous progress to the useur instead of mysteriously blocking somewhere in the
+        // middle of running an instant app. The default behaviour can be overridden
+        // via gservices.
+        final boolean performDexopt = !forwardLocked
+            && !pkg.applicationInfo.isExternalAsec()
+            && (!instantApp || Global.getInt(mContext.getContentResolver(),
+                    Global.INSTANT_APP_DEXOPT_ENABLED, 0) != 0);
+
+        if (performDexopt) {
+            Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt");
+            // Do not run PackageDexOptimizer through the local performDexOpt
+            // method because `pkg` may not be in `mPackages` yet.
+            //
+            // Also, don't fail application installs if the dexopt step fails.
+            DexoptOptions dexoptOptions = new DexoptOptions(pkg.packageName,
+                REASON_INSTALL,
+                DexoptOptions.DEXOPT_BOOT_COMPLETE);
+            mPackageDexOptimizer.performDexOpt(pkg, pkg.usesLibraryFiles,
+                null /* instructionSets */,
+                getOrCreateCompilerPackageStats(pkg),
+                mDexManager.getPackageUseInfoOrDefault(pkg.packageName),
+                dexoptOptions);
+            Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
+        }
+
+        // Notify BackgroundDexOptService that the package has been changed.
+        // If this is an update of a package which used to fail to compile,
+        // BackgroundDexOptService will remove it from its blacklist.
+        // TODO: Layering violation
+        BackgroundDexOptService.notifyPackageChanged(pkg.packageName);
+
         startIntentFilterVerifications(args.user.getIdentifier(), replace, pkg);
 
         try (PackageFreezer freezer = freezePackageForInstall(pkgName, installFlags,
@@ -18861,6 +19419,12 @@
         return packageName;
     }
 
+    boolean isCallerVerifier(int callingUid) {
+        final int callingUserId = UserHandle.getUserId(callingUid);
+        return mRequiredVerifierPackage != null &&
+                callingUid == getPackageUid(mRequiredVerifierPackage, 0, callingUserId);
+    }
+
     private boolean isCallerAllowedToSilentlyUninstall(int callingUid, String pkgName) {
         if (callingUid == Process.SHELL_UID || callingUid == Process.ROOT_UID
               || UserHandle.getAppId(callingUid) == Process.SYSTEM_UID) {
@@ -19140,8 +19704,8 @@
             for (int i = 0; i < packageCount; i++) {
                 PackageInstalledInfo installedInfo = appearedChildPackages.valueAt(i);
                 packageSender.sendPackageAddedForNewUsers(installedInfo.name,
-                    true, UserHandle.getAppId(installedInfo.uid),
-                    installedInfo.newUsers);
+                    true /*sendBootCompleted*/, false /*startReceiver*/,
+                    UserHandle.getAppId(installedInfo.uid), installedInfo.newUsers);
             }
         }
 
@@ -19430,6 +19994,10 @@
 
         // writer
         synchronized (mPackages) {
+            // NOTE: The system package always needs to be enabled; even if it's for
+            // a compressed stub. If we don't, installing the system package fails
+            // during scan [scanning checks the disabled packages]. We will reverse
+            // this later, after we've "installed" the stub.
             // Reinstate the old system package
             enableSystemPackageLPw(disabledPs.pkg);
             // Remove any native libraries from the upgraded package.
@@ -19438,23 +20006,38 @@
 
         // Install the system package
         if (DEBUG_REMOVE) Slog.d(TAG, "Re-installing system package: " + disabledPs);
-        int parseFlags = mDefParseFlags
-                | PackageParser.PARSE_MUST_BE_APK
-                | PackageParser.PARSE_IS_SYSTEM
-                | PackageParser.PARSE_IS_SYSTEM_DIR;
-        if (locationIsPrivileged(disabledPs.codePath)) {
-            parseFlags |= PackageParser.PARSE_IS_PRIVILEGED;
-        }
-
-        final PackageParser.Package newPkg;
         try {
-            newPkg = scanPackageTracedLI(disabledPs.codePath, parseFlags, 0 /* scanFlags */,
-                0 /* currentTime */, null);
+            installPackageFromSystemLIF(disabledPs.codePath, false /*isPrivileged*/, allUserHandles,
+                    outInfo.origUsers, deletedPs.getPermissionsState(), writeSettings);
         } catch (PackageManagerException e) {
             Slog.w(TAG, "Failed to restore system package:" + deletedPkg.packageName + ": "
                     + e.getMessage());
             return false;
+        } finally {
+            if (disabledPs.pkg.isStub) {
+                mSettings.disableSystemPackageLPw(disabledPs.name, true /*replaced*/);
+            }
         }
+        return true;
+    }
+
+    /**
+     * Installs a package that's already on the system partition.
+     */
+    private PackageParser.Package installPackageFromSystemLIF(@NonNull File codePath,
+            boolean isPrivileged, @Nullable int[] allUserHandles, @Nullable int[] origUserHandles,
+            @Nullable PermissionsState origPermissionState, boolean writeSettings)
+                    throws PackageManagerException {
+        int parseFlags = mDefParseFlags
+                | PackageParser.PARSE_MUST_BE_APK
+                | PackageParser.PARSE_IS_SYSTEM
+                | PackageParser.PARSE_IS_SYSTEM_DIR;
+        if (isPrivileged || locationIsPrivileged(codePath)) {
+            parseFlags |= PackageParser.PARSE_IS_PRIVILEGED;
+        }
+
+        final PackageParser.Package newPkg =
+                scanPackageTracedLI(codePath, parseFlags, 0 /*scanFlags*/, 0 /*currentTime*/, null);
 
         try {
             // update shared libraries for the newly re-installed system package
@@ -19472,17 +20055,21 @@
             // Propagate the permissions state as we do not want to drop on the floor
             // runtime permissions. The update permissions method below will take
             // care of removing obsolete permissions and grant install permissions.
-            ps.getPermissionsState().copyFrom(deletedPs.getPermissionsState());
+            if (origPermissionState != null) {
+                ps.getPermissionsState().copyFrom(origPermissionState);
+            }
             updatePermissionsLPw(newPkg.packageName, newPkg,
                     UPDATE_PERMISSIONS_ALL | UPDATE_PERMISSIONS_REPLACE_PKG);
 
+            final boolean applyUserRestrictions
+                    = (allUserHandles != null) && (origUserHandles != null);
             if (applyUserRestrictions) {
                 boolean installedStateChanged = false;
                 if (DEBUG_REMOVE) {
                     Slog.d(TAG, "Propagating install state across reinstall");
                 }
                 for (int userId : allUserHandles) {
-                    final boolean installed = ArrayUtils.contains(outInfo.origUsers, userId);
+                    final boolean installed = ArrayUtils.contains(origUserHandles, userId);
                     if (DEBUG_REMOVE) {
                         Slog.d(TAG, "    user " + userId + " => " + installed);
                     }
@@ -19505,7 +20092,7 @@
                 mSettings.writeLPr();
             }
         }
-        return true;
+        return newPkg;
     }
 
     private boolean deleteInstalledPackageLIF(PackageSetting ps,
@@ -19798,6 +20385,7 @@
                     false /*hidden*/,
                     false /*suspended*/,
                     false /*instantApp*/,
+                    false /*virtualPreload*/,
                     null /*lastDisableAppCaller*/,
                     null /*enabledComponents*/,
                     null /*disabledComponents*/,
@@ -19952,10 +20540,8 @@
                 true /* requireFullPermission */, false /* checkShell */, "clear application data");
 
         final PackageSetting ps = mSettings.getPackageLPr(packageName);
-        if (ps != null && filterAppAccessLPr(ps, callingUid, userId)) {
-            return;
-        }
-        if (mProtectedPackages.isPackageDataProtected(userId, packageName)) {
+        final boolean filterApp = (ps != null && filterAppAccessLPr(ps, callingUid, userId));
+        if (!filterApp && mProtectedPackages.isPackageDataProtected(userId, packageName)) {
             throw new SecurityException("Cannot clear data for a protected package: "
                     + packageName);
         }
@@ -19964,26 +20550,30 @@
             public void run() {
                 mHandler.removeCallbacks(this);
                 final boolean succeeded;
-                try (PackageFreezer freezer = freezePackage(packageName,
-                        "clearApplicationUserData")) {
-                    synchronized (mInstallLock) {
-                        succeeded = clearApplicationUserDataLIF(packageName, userId);
+                if (!filterApp) {
+                    try (PackageFreezer freezer = freezePackage(packageName,
+                            "clearApplicationUserData")) {
+                        synchronized (mInstallLock) {
+                            succeeded = clearApplicationUserDataLIF(packageName, userId);
+                        }
+                        clearExternalStorageDataSync(packageName, userId, true);
+                        synchronized (mPackages) {
+                            mInstantAppRegistry.deleteInstantApplicationMetadataLPw(
+                                    packageName, userId);
+                        }
                     }
-                    clearExternalStorageDataSync(packageName, userId, true);
-                    synchronized (mPackages) {
-                        mInstantAppRegistry.deleteInstantApplicationMetadataLPw(
-                                packageName, userId);
+                    if (succeeded) {
+                        // invoke DeviceStorageMonitor's update method to clear any notifications
+                        DeviceStorageMonitorInternal dsm = LocalServices
+                                .getService(DeviceStorageMonitorInternal.class);
+                        if (dsm != null) {
+                            dsm.checkMemory();
+                        }
                     }
+                } else {
+                    succeeded = false;
                 }
-                if (succeeded) {
-                    // invoke DeviceStorageMonitor's update method to clear any notifications
-                    DeviceStorageMonitorInternal dsm = LocalServices
-                            .getService(DeviceStorageMonitorInternal.class);
-                    if (dsm != null) {
-                        dsm.checkMemory();
-                    }
-                }
-                if(observer != null) {
+                if (observer != null) {
                     try {
                         observer.onRemoveCompleted(packageName, succeeded);
                     } catch (RemoteException e) {
@@ -21442,35 +22032,147 @@
                 // unless it is a test package.
                 int oldState = pkgSetting.getEnabled(userId);
                 if (className == null
-                    &&
-                    (oldState == COMPONENT_ENABLED_STATE_DISABLED_USER
-                     || oldState == COMPONENT_ENABLED_STATE_DEFAULT
-                     || oldState == COMPONENT_ENABLED_STATE_ENABLED)
-                    &&
-                    (newState == COMPONENT_ENABLED_STATE_DISABLED_USER
-                     || newState == COMPONENT_ENABLED_STATE_DEFAULT
-                     || newState == COMPONENT_ENABLED_STATE_ENABLED)) {
+                        &&
+                        (oldState == COMPONENT_ENABLED_STATE_DISABLED_USER
+                                || oldState == COMPONENT_ENABLED_STATE_DEFAULT
+                                || oldState == COMPONENT_ENABLED_STATE_ENABLED)
+                        &&
+                        (newState == COMPONENT_ENABLED_STATE_DISABLED_USER
+                                || newState == COMPONENT_ENABLED_STATE_DEFAULT
+                                || newState == COMPONENT_ENABLED_STATE_ENABLED)) {
                     // ok
                 } else {
                     throw new SecurityException(
                             "Shell cannot change component state for " + packageName + "/"
-                            + className + " to " + newState);
+                                    + className + " to " + newState);
                 }
             }
-            if (className == null) {
-                // We're dealing with an application/package level state change
+        }
+        if (className == null) {
+            // We're dealing with an application/package level state change
+            synchronized (mPackages) {
                 if (pkgSetting.getEnabled(userId) == newState) {
                     // Nothing to do
                     return;
                 }
-                if (newState == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
-                    || newState == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
-                    // Don't care about who enables an app.
-                    callingPackage = null;
+            }
+            // If we're enabling a system stub, there's a little more work to do.
+            // Prior to enabling the package, we need to decompress the APK(s) to the
+            // data partition and then replace the version on the system partition.
+            final PackageParser.Package deletedPkg = pkgSetting.pkg;
+            final boolean isSystemStub = deletedPkg.isStub
+                    && deletedPkg.isSystemApp();
+            if (isSystemStub
+                    && (newState == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
+                            || newState == PackageManager.COMPONENT_ENABLED_STATE_ENABLED)) {
+                final File codePath = decompressPackage(deletedPkg);
+                if (codePath == null) {
+                    Slog.e(TAG, "couldn't decompress pkg: " + pkgSetting.name);
+                    return;
                 }
+                // TODO remove direct parsing of the package object during internal cleanup
+                // of scan package
+                // We need to call parse directly here for no other reason than we need
+                // the new package in order to disable the old one [we use the information
+                // for some internal optimization to optionally create a new package setting
+                // object on replace]. However, we can't get the package from the scan
+                // because the scan modifies live structures and we need to remove the
+                // old [system] package from the system before a scan can be attempted.
+                // Once scan is indempotent we can remove this parse and use the package
+                // object we scanned, prior to adding it to package settings.
+                final PackageParser pp = new PackageParser();
+                pp.setSeparateProcesses(mSeparateProcesses);
+                pp.setDisplayMetrics(mMetrics);
+                pp.setCallback(mPackageParserCallback);
+                final PackageParser.Package tmpPkg;
+                try {
+                    final int parseFlags = mDefParseFlags
+                            | PackageParser.PARSE_MUST_BE_APK
+                            | PackageParser.PARSE_IS_SYSTEM
+                            | PackageParser.PARSE_IS_SYSTEM_DIR;
+                    tmpPkg = pp.parsePackage(codePath, parseFlags);
+                } catch (PackageParserException e) {
+                    Slog.w(TAG, "Failed to parse compressed system package:" + pkgSetting.name, e);
+                    return;
+                }
+                synchronized (mInstallLock) {
+                    // Disable the stub and remove any package entries
+                    removePackageLI(deletedPkg, true);
+                    synchronized (mPackages) {
+                        disableSystemPackageLPw(deletedPkg, tmpPkg);
+                    }
+                    final PackageParser.Package newPkg;
+                    try (PackageFreezer freezer =
+                            freezePackage(deletedPkg.packageName, "setEnabledSetting")) {
+                        final int parseFlags = mDefParseFlags | PackageParser.PARSE_CHATTY
+                                | PackageParser.PARSE_ENFORCE_CODE;
+                        newPkg = scanPackageTracedLI(codePath, parseFlags, 0 /*scanFlags*/,
+                                0 /*currentTime*/, null /*user*/);
+                        prepareAppDataAfterInstallLIF(newPkg);
+                        synchronized (mPackages) {
+                            try {
+                                updateSharedLibrariesLPr(newPkg, null);
+                            } catch (PackageManagerException e) {
+                                Slog.e(TAG, "updateAllSharedLibrariesLPw failed: ", e);
+                            }
+                            updatePermissionsLPw(newPkg.packageName, newPkg,
+                                    UPDATE_PERMISSIONS_ALL | UPDATE_PERMISSIONS_REPLACE_PKG);
+                            mSettings.writeLPr();
+                        }
+                    } catch (PackageManagerException e) {
+                        // Whoops! Something went wrong; try to roll back to the stub
+                        Slog.w(TAG, "Failed to install compressed system package:"
+                                + pkgSetting.name, e);
+                        // Remove the failed install
+                        removeCodePathLI(codePath);
+
+                        // Install the system package
+                        try (PackageFreezer freezer =
+                                freezePackage(deletedPkg.packageName, "setEnabledSetting")) {
+                            synchronized (mPackages) {
+                                // NOTE: The system package always needs to be enabled; even
+                                // if it's for a compressed stub. If we don't, installing the
+                                // system package fails during scan [scanning checks the disabled
+                                // packages]. We will reverse this later, after we've "installed"
+                                // the stub.
+                                // This leaves us in a fragile state; the stub should never be
+                                // enabled, so, cross your fingers and hope nothing goes wrong
+                                // until we can disable the package later.
+                                enableSystemPackageLPw(deletedPkg);
+                            }
+                            installPackageFromSystemLIF(new File(deletedPkg.codePath),
+                                    false /*isPrivileged*/, null /*allUserHandles*/,
+                                    null /*origUserHandles*/, null /*origPermissionsState*/,
+                                    true /*writeSettings*/);
+                        } catch (PackageManagerException pme) {
+                            Slog.w(TAG, "Failed to restore system package:"
+                                    + deletedPkg.packageName, pme);
+                        } finally {
+                            synchronized (mPackages) {
+                                mSettings.disableSystemPackageLPw(
+                                        deletedPkg.packageName, true /*replaced*/);
+                                mSettings.writeLPr();
+                            }
+                        }
+                        return;
+                    }
+                    clearAppDataLIF(newPkg, UserHandle.USER_ALL, FLAG_STORAGE_DE
+                            | FLAG_STORAGE_CE | Installer.FLAG_CLEAR_CODE_CACHE_ONLY);
+                    clearAppProfilesLIF(newPkg, UserHandle.USER_ALL);
+                    mDexManager.notifyPackageUpdated(newPkg.packageName,
+                            newPkg.baseCodePath, newPkg.splitCodePaths);
+                }
+            }
+            if (newState == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
+                || newState == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
+                // Don't care about who enables an app.
+                callingPackage = null;
+            }
+            synchronized (mPackages) {
                 pkgSetting.setEnabled(newState, userId, callingPackage);
-                // pkgSetting.pkg.mSetEnabled = newState;
-            } else {
+            }
+        } else {
+            synchronized (mPackages) {
                 // We're dealing with a component level state change
                 // First, verify that this is a valid class name.
                 PackageParser.Package pkg = pkgSetting.pkg;
@@ -21486,26 +22188,28 @@
                     }
                 }
                 switch (newState) {
-                case COMPONENT_ENABLED_STATE_ENABLED:
-                    if (!pkgSetting.enableComponentLPw(className, userId)) {
+                    case COMPONENT_ENABLED_STATE_ENABLED:
+                        if (!pkgSetting.enableComponentLPw(className, userId)) {
+                            return;
+                        }
+                        break;
+                    case COMPONENT_ENABLED_STATE_DISABLED:
+                        if (!pkgSetting.disableComponentLPw(className, userId)) {
+                            return;
+                        }
+                        break;
+                    case COMPONENT_ENABLED_STATE_DEFAULT:
+                        if (!pkgSetting.restoreComponentLPw(className, userId)) {
+                            return;
+                        }
+                        break;
+                    default:
+                        Slog.e(TAG, "Invalid new component state: " + newState);
                         return;
-                    }
-                    break;
-                case COMPONENT_ENABLED_STATE_DISABLED:
-                    if (!pkgSetting.disableComponentLPw(className, userId)) {
-                        return;
-                    }
-                    break;
-                case COMPONENT_ENABLED_STATE_DEFAULT:
-                    if (!pkgSetting.restoreComponentLPw(className, userId)) {
-                        return;
-                    }
-                    break;
-                default:
-                    Slog.e(TAG, "Invalid new component state: " + newState);
-                    return;
                 }
             }
+        }
+        synchronized (mPackages) {
             scheduleWritePackageRestrictionsLocked(userId);
             updateSequenceNumberLP(pkgSetting, new int[] { userId });
             final long callingId = Binder.clearCallingIdentity();
@@ -21873,6 +22577,7 @@
         public static final int DUMP_DEXOPT = 1 << 20;
         public static final int DUMP_COMPILER_STATS = 1 << 21;
         public static final int DUMP_CHANGES = 1 << 22;
+        public static final int DUMP_VOLUMES = 1 << 23;
 
         public static final int OPTION_SHOW_FILTERS = 1 << 0;
 
@@ -22112,6 +22817,8 @@
                 dumpState.setDump(DumpState.DUMP_INSTALLS);
             } else if ("frozen".equals(cmd)) {
                 dumpState.setDump(DumpState.DUMP_FROZEN);
+            } else if ("volumes".equals(cmd)) {
+                dumpState.setDump(DumpState.DUMP_VOLUMES);
             } else if ("dexopt".equals(cmd)) {
                 dumpState.setDump(DumpState.DUMP_DEXOPT);
             } else if ("compiler-stats".equals(cmd)) {
@@ -22496,6 +23203,23 @@
                 ipw.decreaseIndent();
             }
 
+            if (!checkin && dumpState.isDumping(DumpState.DUMP_VOLUMES) && packageName == null) {
+                if (dumpState.onTitlePrinted()) pw.println();
+
+                final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, "  ", 120);
+                ipw.println();
+                ipw.println("Loaded volumes:");
+                ipw.increaseIndent();
+                if (mLoadedVolumes.size() == 0) {
+                    ipw.println("(none)");
+                } else {
+                    for (int i = 0; i < mLoadedVolumes.size(); i++) {
+                        ipw.println(mLoadedVolumes.valueAt(i));
+                    }
+                }
+                ipw.decreaseIndent();
+            }
+
             if (!checkin && dumpState.isDumping(DumpState.DUMP_DEXOPT)) {
                 if (dumpState.onTitlePrinted()) pw.println();
                 dumpDexoptStateLPr(pw, packageName);
@@ -22665,7 +23389,8 @@
         for (PackageParser.Package pkg : packages) {
             ipw.println("[" + pkg.packageName + "]");
             ipw.increaseIndent();
-            mPackageDexOptimizer.dumpDexoptState(ipw, pkg);
+            mPackageDexOptimizer.dumpDexoptState(ipw, pkg,
+                    mDexManager.getPackageUseInfoOrDefault(pkg.packageName));
             ipw.decreaseIndent();
         }
     }
@@ -23212,6 +23937,7 @@
 
         if (DEBUG_INSTALL) Slog.d(TAG, "Loaded packages " + loaded);
         sendResourcesChangedBroadcast(true, false, loaded, null);
+        mLoadedVolumes.add(vol.getId());
     }
 
     private void unloadPrivatePackages(final VolumeInfo vol) {
@@ -23263,6 +23989,7 @@
 
         if (DEBUG_INSTALL) Slog.d(TAG, "Unloaded packages " + unloaded);
         sendResourcesChangedBroadcast(false, false, unloaded, null);
+        mLoadedVolumes.remove(vol.getId());
 
         // Try very hard to release any references to this path so we don't risk
         // the system server being killed due to open FDs
@@ -23806,8 +24533,7 @@
                     movePackageInternal(packageName, volumeUuid, moveId, callingUid, user);
                 } catch (PackageManagerException e) {
                     Slog.w(TAG, "Failed to move " + packageName, e);
-                    mMoveCallbacks.notifyStatusChanged(moveId,
-                            PackageManager.MOVE_FAILED_INTERNAL_ERROR);
+                    mMoveCallbacks.notifyStatusChanged(moveId, e.error);
                 }
             }
         });
@@ -23930,6 +24656,17 @@
             measurePath = Environment.getDataAppDirectory(volumeUuid);
         }
 
+        // If we're moving app data around, we need all the users unlocked
+        if (moveCompleteApp) {
+            for (int userId : installedUserIds) {
+                if (StorageManager.isFileEncryptedNativeOrEmulated()
+                        && !StorageManager.isUserKeyUnlocked(userId)) {
+                    throw new PackageManagerException(MOVE_FAILED_LOCKED_USER,
+                            "User " + userId + " must be unlocked");
+                }
+            }
+        }
+
         final PackageStats stats = new PackageStats(null, -1);
         synchronized (mInstaller) {
             for (int userId : installedUserIds) {
@@ -24584,6 +25321,51 @@
         }
     }
 
+    private class PackageManagerNative extends IPackageManagerNative.Stub {
+        @Override
+        public String[] getNamesForUids(int[] uids) throws RemoteException {
+            final String[] results = PackageManagerService.this.getNamesForUids(uids);
+            // massage results so they can be parsed by the native binder
+            for (int i = results.length - 1; i >= 0; --i) {
+                if (results[i] == null) {
+                    results[i] = "";
+                }
+            }
+            return results;
+        }
+
+        // NB: this differentiates between preloads and sideloads
+        @Override
+        public String getInstallerForPackage(String packageName) throws RemoteException {
+            final String installerName = getInstallerPackageName(packageName);
+            if (!TextUtils.isEmpty(installerName)) {
+                return installerName;
+            }
+            // differentiate between preload and sideload
+            int callingUser = UserHandle.getUserId(Binder.getCallingUid());
+            ApplicationInfo appInfo = getApplicationInfo(packageName,
+                                    /*flags*/ 0,
+                                    /*userId*/ callingUser);
+            if (appInfo != null && (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
+                return "preload";
+            }
+            return "";
+        }
+
+        @Override
+        public int getVersionCodeForPackage(String packageName) throws RemoteException {
+            try {
+                int callingUser = UserHandle.getUserId(Binder.getCallingUid());
+                PackageInfo pInfo = getPackageInfo(packageName, 0, callingUser);
+                if (pInfo != null) {
+                    return pInfo.versionCode;
+                }
+            } catch (Exception e) {
+            }
+            return 0;
+        }
+    }
+
     private class PackageManagerInternalImpl extends PackageManagerInternal {
         @Override
         public void setLocationPackagesProvider(PackagesProvider provider) {
@@ -24732,7 +25514,7 @@
             final String resolvedType = intent.resolveTypeIfNeeded(mContext.getContentResolver());
             return PackageManagerService.this
                     .queryIntentActivitiesInternal(intent, resolvedType, flags, filterCallingUid,
-                            userId, false /*resolveForStart*/);
+                            userId, false /*resolveForStart*/, true /*allowDynamicSplits*/);
         }
 
         @Override
@@ -24938,6 +25720,20 @@
         public boolean canAccessInstantApps(int callingUid, int userId) {
             return PackageManagerService.this.canViewInstantApps(callingUid, userId);
         }
+
+        @Override
+        public boolean hasInstantApplicationMetadata(String packageName, int userId) {
+            synchronized (mPackages) {
+                return mInstantAppRegistry.hasInstantApplicationMetadataLPr(packageName, userId);
+            }
+        }
+
+        @Override
+        public void notifyPackageUse(String packageName, int reason) {
+            synchronized (mPackages) {
+                PackageManagerService.this.notifyPackageUseLocked(packageName, reason);
+            }
+        }
     }
 
     @Override
@@ -25122,12 +25918,79 @@
             return mInstantAppRegistry.getInstantAppAndroidIdLPw(packageName, userId);
         }
     }
+
+    boolean canHaveOatDir(String packageName) {
+        synchronized (mPackages) {
+            PackageParser.Package p = mPackages.get(packageName);
+            if (p == null) {
+                return false;
+            }
+            return p.canHaveOatDir();
+        }
+    }
+
+    private String getOatDir(PackageParser.Package pkg) {
+        if (!pkg.canHaveOatDir()) {
+            return null;
+        }
+        File codePath = new File(pkg.codePath);
+        if (codePath.isDirectory()) {
+            return PackageDexOptimizer.getOatDir(codePath).getAbsolutePath();
+        }
+        return null;
+    }
+
+    void deleteOatArtifactsOfPackage(String packageName) {
+        final String[] instructionSets;
+        final List<String> codePaths;
+        final String oatDir;
+        final PackageParser.Package pkg;
+        synchronized (mPackages) {
+            pkg = mPackages.get(packageName);
+        }
+        instructionSets = getAppDexInstructionSets(pkg.applicationInfo);
+        codePaths = pkg.getAllCodePaths();
+        oatDir = getOatDir(pkg);
+
+        for (String codePath : codePaths) {
+            for (String isa : instructionSets) {
+                try {
+                    mInstaller.deleteOdex(codePath, isa, oatDir);
+                } catch (InstallerException e) {
+                    Log.e(TAG, "Failed deleting oat files for " + codePath, e);
+                }
+            }
+        }
+    }
+
+    Set<String> getUnusedPackages(long downgradeTimeThresholdMillis) {
+        Set<String> unusedPackages = new HashSet<>();
+        long currentTimeInMillis = System.currentTimeMillis();
+        synchronized (mPackages) {
+            for (PackageParser.Package pkg : mPackages.values()) {
+                PackageSetting ps =  mSettings.mPackages.get(pkg.packageName);
+                if (ps == null) {
+                    continue;
+                }
+                PackageDexUsage.PackageUseInfo packageUseInfo =
+                      getDexManager().getPackageUseInfoOrDefault(pkg.packageName);
+                if (PackageManagerServiceUtils
+                        .isUnusedSinceTimeInMillis(ps.firstInstallTime, currentTimeInMillis,
+                                downgradeTimeThresholdMillis, packageUseInfo,
+                                pkg.getLatestPackageUseTimeInMills(),
+                                pkg.getLatestForegroundPackageUseTimeInMills())) {
+                    unusedPackages.add(pkg.packageName);
+                }
+            }
+        }
+        return unusedPackages;
+    }
 }
 
 interface PackageSender {
     void sendPackageBroadcast(final String action, final String pkg,
         final Bundle extras, final int flags, final String targetPkg,
         final IIntentReceiver finishedReceiver, final int[] userIds);
-    void sendPackageAddedForNewUsers(String packageName, boolean isSystem,
-        int appId, int... userIds);
+    void sendPackageAddedForNewUsers(String packageName, boolean sendBootCompleted,
+        boolean includeStopped, int appId, int... userIds);
 }
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceCompilerMapping.java b/services/core/java/com/android/server/pm/PackageManagerServiceCompilerMapping.java
index ec248f5..19b0d9b 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceCompilerMapping.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceCompilerMapping.java
@@ -26,14 +26,19 @@
 public class PackageManagerServiceCompilerMapping {
     // Names for compilation reasons.
     static final String REASON_STRINGS[] = {
-            "first-boot", "boot", "install", "bg-dexopt", "ab-ota"
+            "first-boot", "boot", "install", "bg-dexopt", "ab-ota", "inactive", "shared"
     };
 
+    static final int REASON_SHARED_INDEX = 6;
+
     // Static block to ensure the strings array is of the right length.
     static {
         if (PackageManagerService.REASON_LAST + 1 != REASON_STRINGS.length) {
             throw new IllegalStateException("REASON_STRINGS not correct");
         }
+        if (!"shared".equals(REASON_STRINGS[REASON_SHARED_INDEX])) {
+            throw new IllegalStateException("REASON_STRINGS not correct because of shared index");
+        }
     }
 
     private static String getSystemPropertyName(int reason) {
@@ -52,11 +57,18 @@
                 !DexFile.isValidCompilerFilter(sysPropValue)) {
             throw new IllegalStateException("Value \"" + sysPropValue +"\" not valid "
                     + "(reason " + REASON_STRINGS[reason] + ")");
+        } else if (!isFilterAllowedForReason(reason, sysPropValue)) {
+            throw new IllegalStateException("Value \"" + sysPropValue +"\" not allowed "
+                    + "(reason " + REASON_STRINGS[reason] + ")");
         }
 
         return sysPropValue;
     }
 
+    private static boolean isFilterAllowedForReason(int reason, String filter) {
+        return reason != REASON_SHARED_INDEX || !DexFile.isProfileGuidedCompilerFilter(filter);
+    }
+
     // Check that the properties are set and valid.
     // Note: this is done in a separate method so this class can be statically initialized.
     static void checkProperties() {
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
index 9feee8c..25fef0a 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
@@ -16,6 +16,9 @@
 
 package com.android.server.pm;
 
+import com.android.server.pm.dex.DexManager;
+import com.android.server.pm.dex.PackageDexUsage;
+
 import static com.android.server.pm.PackageManagerService.DEBUG_DEXOPT;
 import static com.android.server.pm.PackageManagerService.TAG;
 
@@ -133,9 +136,11 @@
                 sortTemp, packageManagerService);
 
         // Give priority to apps used by other apps.
+        DexManager dexManager = packageManagerService.getDexManager();
         applyPackageFilter((pkg) ->
-                packageManagerService.getDexManager().isUsedByOtherApps(pkg.packageName), result,
-                remainingPkgs, sortTemp, packageManagerService);
+                dexManager.getPackageUseInfoOrDefault(pkg.packageName)
+                        .isAnyCodePathUsedByOtherApps(),
+                result, remainingPkgs, sortTemp, packageManagerService);
 
         // Filter out packages that aren't recently used, add all remaining apps.
         // TODO: add a property to control this?
@@ -179,6 +184,41 @@
     }
 
     /**
+     * Checks if the package was inactive during since <code>thresholdTimeinMillis</code>.
+     * Package is considered active, if:
+     * 1) It was active in foreground.
+     * 2) It was active in background and also used by other apps.
+     *
+     * If it doesn't have sufficient information about the package, it return <code>false</code>.
+     */
+    static boolean isUnusedSinceTimeInMillis(long firstInstallTime, long currentTimeInMillis,
+            long thresholdTimeinMillis, PackageDexUsage.PackageUseInfo packageUseInfo,
+            long latestPackageUseTimeInMillis, long latestForegroundPackageUseTimeInMillis) {
+
+        if (currentTimeInMillis - firstInstallTime < thresholdTimeinMillis) {
+            return false;
+        }
+
+        // If the app was active in foreground during the threshold period.
+        boolean isActiveInForeground = (currentTimeInMillis
+                - latestForegroundPackageUseTimeInMillis)
+                < thresholdTimeinMillis;
+
+        if (isActiveInForeground) {
+            return false;
+        }
+
+        // If the app was active in background during the threshold period and was used
+        // by other packages.
+        boolean isActiveInBackgroundAndUsedByOtherPackages = ((currentTimeInMillis
+                - latestPackageUseTimeInMillis)
+                < thresholdTimeinMillis)
+                && packageUseInfo.isAnyCodePathUsedByOtherApps();
+
+        return !isActiveInBackgroundAndUsedByOtherPackages;
+    }
+
+    /**
      * Returns the canonicalized path of {@code path} as per {@code realpath(3)}
      * semantics.
      */
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index 20d7b28..909ffab 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -148,6 +148,8 @@
                     return runSetHomeActivity();
                 case "get-privapp-permissions":
                     return runGetPrivappPermissions();
+                case "get-privapp-deny-permissions":
+                    return runGetPrivappDenyPermissions();
                 case "get-instantapp-resolver":
                     return runGetInstantAppResolver();
                 case "has-feature":
@@ -365,6 +367,7 @@
         String compilationReason = null;
         String checkProfilesRaw = null;
         boolean secondaryDex = false;
+        String split = null;
 
         String opt;
         while ((opt = getNextOption()) != null) {
@@ -395,6 +398,9 @@
                 case "--secondary-dex":
                     secondaryDex = true;
                     break;
+                case "--split":
+                    split = getNextArgRequired();
+                    break;
                 default:
                     pw.println("Error: Unknown option: " + opt);
                     return 1;
@@ -423,6 +429,16 @@
             return 1;
         }
 
+        if (allPackages && split != null) {
+            pw.println("-a cannot be specified together with --split");
+            return 1;
+        }
+
+        if (secondaryDex && split != null) {
+            pw.println("--secondary-dex cannot be specified together with --split");
+            return 1;
+        }
+
         String targetCompilerFilter;
         if (compilerFilter != null) {
             if (!DexFile.isValidCompilerFilter(compilerFilter)) {
@@ -472,7 +488,7 @@
                             targetCompilerFilter, forceCompilation)
                     : mInterface.performDexOptMode(packageName,
                             checkProfiles, targetCompilerFilter, forceCompilation,
-                            true /* bootComplete */);
+                            true /* bootComplete */, split);
             if (!result) {
                 failedPackages.add(packageName);
             }
@@ -1207,6 +1223,9 @@
                 case "--full":
                     sessionParams.setInstallAsInstantApp(false /*isInstantApp*/);
                     break;
+                case "--preload":
+                    sessionParams.setInstallAsVirtualPreload();
+                    break;
                 case "--user":
                     params.userId = UserHandle.parseUserArg(getNextArgRequired());
                     break;
@@ -1276,6 +1295,19 @@
         return 0;
     }
 
+    private int runGetPrivappDenyPermissions() {
+        final String pkg = getNextArg();
+        if (pkg == null) {
+            System.err.println("Error: no package specified.");
+            return 1;
+        }
+        ArraySet<String> privAppDenyPermissions =
+                SystemConfig.getInstance().getPrivAppDenyPermissions(pkg);
+        getOutPrintWriter().println(privAppDenyPermissions == null
+                ? "{}" : privAppDenyPermissions.toString());
+        return 0;
+    }
+
     private int runGetInstantAppResolver() {
         final PrintWriter pw = getOutPrintWriter();
         try {
@@ -1609,7 +1641,7 @@
         pw.println("  help");
         pw.println("    Print this help text.");
         pw.println("");
-        pw.println("  compile [-m MODE | -r REASON] [-f] [-c]");
+        pw.println("  compile [-m MODE | -r REASON] [-f] [-c] [--split SPLIT_NAME]");
         pw.println("          [--reset] [--check-prof (true | false)] (-a | TARGET-PACKAGE)");
         pw.println("    Trigger compilation of TARGET-PACKAGE or all packages if \"-a\".");
         pw.println("    Options:");
@@ -1635,6 +1667,7 @@
         pw.println("      --reset: restore package to its post-install state");
         pw.println("      --check-prof (true | false): look at profiles when doing dexopt?");
         pw.println("      --secondary-dex: compile app secondary dex files");
+        pw.println("      --split SPLIT: compile only the given split name");
         pw.println("  bg-dexopt-job");
         pw.println("    Execute the background optimizations immediately.");
         pw.println("    Note that the command only runs the background optimizer logic. It may");
diff --git a/services/core/java/com/android/server/pm/PackageSettingBase.java b/services/core/java/com/android/server/pm/PackageSettingBase.java
index f685127..d3ca1fd 100644
--- a/services/core/java/com/android/server/pm/PackageSettingBase.java
+++ b/services/core/java/com/android/server/pm/PackageSettingBase.java
@@ -420,11 +420,19 @@
         modifyUserState(userId).instantApp = instantApp;
     }
 
+    boolean getVirtulalPreload(int userId) {
+        return readUserState(userId).virtualPreload;
+    }
+
+    void setVirtualPreload(boolean virtualPreload, int userId) {
+        modifyUserState(userId).virtualPreload = virtualPreload;
+    }
+
     void setUserState(int userId, long ceDataInode, int enabled, boolean installed, boolean stopped,
             boolean notLaunched, boolean hidden, boolean suspended, boolean instantApp,
-            String lastDisableAppCaller, ArraySet<String> enabledComponents,
-            ArraySet<String> disabledComponents, int domainVerifState,
-            int linkGeneration, int installReason) {
+            boolean virtualPreload, String lastDisableAppCaller,
+            ArraySet<String> enabledComponents, ArraySet<String> disabledComponents,
+            int domainVerifState, int linkGeneration, int installReason) {
         PackageUserState state = modifyUserState(userId);
         state.ceDataInode = ceDataInode;
         state.enabled = enabled;
@@ -440,6 +448,7 @@
         state.appLinkGeneration = linkGeneration;
         state.installReason = installReason;
         state.instantApp = instantApp;
+        state.virtualPreload = virtualPreload;
     }
 
     ArraySet<String> getEnabledComponents(int userId) {
diff --git a/services/core/java/com/android/server/pm/PermissionsState.java b/services/core/java/com/android/server/pm/PermissionsState.java
index 8a427cd..f4d2ad2 100644
--- a/services/core/java/com/android/server/pm/PermissionsState.java
+++ b/services/core/java/com/android/server/pm/PermissionsState.java
@@ -427,7 +427,7 @@
                 mPermissionReviewRequired.put(userId, true);
             } else if ((oldFlags & PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED) != 0
                     && (newFlags & PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED) == 0) {
-                if (mPermissionReviewRequired != null) {
+                if (mPermissionReviewRequired != null && !hasPermissionRequiringReview(userId)) {
                     mPermissionReviewRequired.delete(userId);
                     if (mPermissionReviewRequired.size() <= 0) {
                         mPermissionReviewRequired = null;
@@ -438,6 +438,18 @@
         return updated;
     }
 
+    private boolean hasPermissionRequiringReview(int userId) {
+        final int permissionCount = mPermissions.size();
+        for (int i = 0; i < permissionCount; i++) {
+            final PermissionData permission = mPermissions.valueAt(i);
+            if ((permission.getFlags(userId)
+                    & PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED) != 0) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     public boolean updatePermissionFlagsForAllPermissions(
             int userId, int flagMask, int flagValues) {
         enforceValidUserId(userId);
diff --git a/services/core/java/com/android/server/pm/PreferredComponent.java b/services/core/java/com/android/server/pm/PreferredComponent.java
index 8e2e0cd..0f4df97 100644
--- a/services/core/java/com/android/server/pm/PreferredComponent.java
+++ b/services/core/java/com/android/server/pm/PreferredComponent.java
@@ -30,6 +30,7 @@
 
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.List;
 
 public class PreferredComponent {
@@ -241,6 +242,54 @@
         return numMatch == NS;
     }
 
+    public boolean isSuperset(List<ResolveInfo> query) {
+        if (mSetPackages == null) {
+            return query == null;
+        }
+        if (query == null) {
+            return true;
+        }
+        final int NQ = query.size();
+        final int NS = mSetPackages.length;
+        if (NS < NQ) {
+            return false;
+        }
+        for (int i=0; i<NQ; i++) {
+            ResolveInfo ri = query.get(i);
+            ActivityInfo ai = ri.activityInfo;
+            boolean foundMatch = false;
+            for (int j=0; j<NS; j++) {
+                if (mSetPackages[j].equals(ai.packageName) && mSetClasses[j].equals(ai.name)) {
+                    foundMatch = true;
+                    break;
+                }
+            }
+            if (!foundMatch) return false;
+        }
+        return true;
+    }
+
+    /** Returns components from mSetPackages that are present in query. */
+    public ComponentName[] discardObsoleteComponents(List<ResolveInfo> query) {
+        if (mSetPackages == null || query == null) {
+            return new ComponentName[0];
+        }
+        final int NQ = query.size();
+        final int NS = mSetPackages.length;
+        ArrayList<ComponentName> aliveComponents = new ArrayList<>();
+        for (int i = 0; i < NQ; i++) {
+            ResolveInfo ri = query.get(i);
+            ActivityInfo ai = ri.activityInfo;
+            for (int j = 0; j < NS; j++) {
+                if (mSetPackages[j].equals(ai.packageName) && mSetClasses[j].equals(ai.name)) {
+                    aliveComponents.add(new ComponentName(mSetPackages[j], mSetClasses[j]));
+                    break;
+                }
+            }
+        }
+        return aliveComponents.toArray(new ComponentName[aliveComponents.size()]);
+    }
+
     public void dump(PrintWriter out, String prefix, Object ident) {
         out.print(prefix); out.print(
                 Integer.toHexString(System.identityHashCode(ident)));
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 45d0c58..56835f6 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -226,6 +226,7 @@
     private static final String ATTR_APP_LINK_GENERATION = "app-link-generation";
     private static final String ATTR_INSTALL_REASON = "install-reason";
     private static final String ATTR_INSTANT_APP = "instant-app";
+    private static final String ATTR_VIRTUAL_PRELOAD = "virtual-preload";
 
     private static final String ATTR_PACKAGE_NAME = "packageName";
     private static final String ATTR_FINGERPRINT = "fingerprint";
@@ -697,8 +698,9 @@
             PackageSetting disabledPkg, String realPkgName, SharedUserSetting sharedUser,
             File codePath, File resourcePath, String legacyNativeLibraryPath, String primaryCpuAbi,
             String secondaryCpuAbi, int versionCode, int pkgFlags, int pkgPrivateFlags,
-            UserHandle installUser, boolean allowInstall, boolean instantApp, String parentPkgName,
-            List<String> childPkgNames, UserManagerService userManager,
+            UserHandle installUser, boolean allowInstall, boolean instantApp,
+            boolean virtualPreload, String parentPkgName, List<String> childPkgNames,
+            UserManagerService userManager,
             String[] usesStaticLibraries, int[] usesStaticLibrariesVersions) {
         final PackageSetting pkgSetting;
         if (originalPkg != null) {
@@ -760,6 +762,7 @@
                                 false /*hidden*/,
                                 false /*suspended*/,
                                 instantApp,
+                                virtualPreload,
                                 null /*lastDisableAppCaller*/,
                                 null /*enabledComponents*/,
                                 null /*disabledComponents*/,
@@ -1693,6 +1696,7 @@
                                 false /*hidden*/,
                                 false /*suspended*/,
                                 false /*instantApp*/,
+                                false /*virtualPreload*/,
                                 null /*lastDisableAppCaller*/,
                                 null /*enabledComponents*/,
                                 null /*disabledComponents*/,
@@ -1766,6 +1770,8 @@
                             ATTR_BLOCK_UNINSTALL, false);
                     final boolean instantApp = XmlUtils.readBooleanAttribute(parser,
                             ATTR_INSTANT_APP, false);
+                    final boolean virtualPreload = XmlUtils.readBooleanAttribute(parser,
+                            ATTR_VIRTUAL_PRELOAD, false);
                     final int enabled = XmlUtils.readIntAttribute(parser, ATTR_ENABLED,
                             COMPONENT_ENABLED_STATE_DEFAULT);
                     final String enabledCaller = parser.getAttributeValue(null,
@@ -1805,8 +1811,8 @@
                         setBlockUninstallLPw(userId, name, true);
                     }
                     ps.setUserState(userId, ceDataInode, enabled, installed, stopped, notLaunched,
-                            hidden, suspended, instantApp, enabledCaller, enabledComponents,
-                            disabledComponents, verifState, linkGeneration,
+                            hidden, suspended, instantApp, virtualPreload, enabledCaller,
+                            enabledComponents, disabledComponents, verifState, linkGeneration,
                             installReason);
                 } else if (tagName.equals("preferred-activities")) {
                     readPreferredActivitiesLPw(parser, userId);
@@ -2117,6 +2123,9 @@
                 if (ustate.instantApp) {
                     serializer.attribute(null, ATTR_INSTANT_APP, "true");
                 }
+                if (ustate.virtualPreload) {
+                    serializer.attribute(null, ATTR_VIRTUAL_PRELOAD, "true");
+                }
                 if (ustate.enabled != COMPONENT_ENABLED_STATE_DEFAULT) {
                     serializer.attribute(null, ATTR_ENABLED,
                             Integer.toString(ustate.enabled));
@@ -4603,6 +4612,7 @@
                 pw.print(ps.getStopped(user.id) ? "S" : "s");
                 pw.print(ps.getNotLaunched(user.id) ? "l" : "L");
                 pw.print(ps.getInstantApp(user.id) ? "IA" : "ia");
+                pw.print(ps.getVirtulalPreload(user.id) ? "VPI" : "vpi");
                 pw.print(",");
                 pw.print(ps.getEnabled(user.id));
                 String lastDisabledAppCaller = ps.getLastDisabledAppCaller(user.id);
@@ -4857,7 +4867,9 @@
             pw.print(" enabled=");
             pw.print(ps.getEnabled(user.id));
             pw.print(" instant=");
-            pw.println(ps.getInstantApp(user.id));
+            pw.print(ps.getInstantApp(user.id));
+            pw.print(" virtual=");
+            pw.println(ps.getVirtulalPreload(user.id));
 
             String[] overlayPaths = ps.getOverlayPaths(user.id);
             if (overlayPaths != null && overlayPaths.length > 0) {
diff --git a/services/core/java/com/android/server/pm/ShortcutPackage.java b/services/core/java/com/android/server/pm/ShortcutPackage.java
index 6f70f4c..a0fd436 100644
--- a/services/core/java/com/android/server/pm/ShortcutPackage.java
+++ b/services/core/java/com/android/server/pm/ShortcutPackage.java
@@ -611,7 +611,8 @@
             }
             checked.add(activity);
 
-            if (!s.injectIsActivityEnabledAndExported(activity, getOwnerUserId())) {
+            if ((activity != null)
+                    && !s.injectIsActivityEnabledAndExported(activity, getOwnerUserId())) {
                 return false;
             }
         }
diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java
index d369801..83b8175 100644
--- a/services/core/java/com/android/server/pm/ShortcutService.java
+++ b/services/core/java/com/android/server/pm/ShortcutService.java
@@ -484,22 +484,25 @@
 
     final private IUidObserver mUidObserver = new IUidObserver.Stub() {
         @Override
-        public void onUidStateChanged(int uid, int procState, long procStateSeq)
-                throws RemoteException {
-            handleOnUidStateChanged(uid, procState);
+        public void onUidStateChanged(int uid, int procState, long procStateSeq) {
+            injectPostToHandler(() -> handleOnUidStateChanged(uid, procState));
         }
 
         @Override
-        public void onUidGone(int uid, boolean disabled) throws RemoteException {
-            handleOnUidStateChanged(uid, ActivityManager.PROCESS_STATE_NONEXISTENT);
+        public void onUidGone(int uid, boolean disabled) {
+            injectPostToHandler(() ->
+                    handleOnUidStateChanged(uid, ActivityManager.PROCESS_STATE_NONEXISTENT));
         }
 
         @Override
-        public void onUidActive(int uid) throws RemoteException {
+        public void onUidActive(int uid) {
         }
 
         @Override
-        public void onUidIdle(int uid, boolean disabled) throws RemoteException {
+        public void onUidIdle(int uid, boolean disabled) {
+        }
+
+        @Override public void onUidCachedChanged(int uid, boolean cached) {
         }
     };
 
diff --git a/services/core/java/com/android/server/pm/UserDataPreparer.java b/services/core/java/com/android/server/pm/UserDataPreparer.java
index fc00acc..b8b00af 100644
--- a/services/core/java/com/android/server/pm/UserDataPreparer.java
+++ b/services/core/java/com/android/server/pm/UserDataPreparer.java
@@ -99,8 +99,7 @@
         } catch (Exception e) {
             logCriticalInfo(Log.WARN, "Destroying user " + userId + " on volume " + volumeUuid
                     + " because we failed to prepare: " + e);
-            destroyUserDataLI(volumeUuid, userId,
-                    StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE);
+            destroyUserDataLI(volumeUuid, userId, flags);
 
             if (allowRecover) {
                 // Try one last time; if we fail again we're really in trouble
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 132b845..48d6cdc 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -128,6 +128,7 @@
  *
  * Method naming convention:
  * <ul>
+ * <li> Methods suffixed with "LAr" should be called within the {@link #mAppRestrictionsLock} lock.
  * <li> Methods suffixed with "LP" should be called within the {@link #mPackagesLock} lock.
  * <li> Methods suffixed with "LR" should be called within the {@link #mRestrictionsLock} lock.
  * <li> Methods suffixed with "LU" should be called within the {@link #mUsersLock} lock.
@@ -232,6 +233,8 @@
     // Short-term lock for internal state, when interaction/sync with PM is not required
     private final Object mUsersLock = LockGuard.installNewLock(LockGuard.INDEX_USER);
     private final Object mRestrictionsLock = new Object();
+    // Used for serializing access to app restriction files
+    private final Object mAppRestrictionsLock = new Object();
 
     private final Handler mHandler;
 
@@ -949,7 +952,7 @@
     @Override
     public boolean isUserUnlocked(int userId) {
         checkManageOrInteractPermIfCallerInOtherProfileGroup(userId, "isUserUnlocked");
-        return mLocalService.isUserUnlockingOrUnlocked(userId);
+        return mLocalService.isUserUnlocked(userId);
     }
 
     @Override
@@ -2328,13 +2331,11 @@
     /**
      * Removes the app restrictions file for a specific package and user id, if it exists.
      */
-    private void cleanAppRestrictionsForPackage(String pkg, int userId) {
-        synchronized (mPackagesLock) {
-            File dir = Environment.getUserSystemDirectory(userId);
-            File resFile = new File(dir, packageToRestrictionsFileName(pkg));
-            if (resFile.exists()) {
-                resFile.delete();
-            }
+    private static void cleanAppRestrictionsForPackageLAr(String pkg, int userId) {
+        File dir = Environment.getUserSystemDirectory(userId);
+        File resFile = new File(dir, packageToRestrictionsFileName(pkg));
+        if (resFile.exists()) {
+            resFile.delete();
         }
     }
 
@@ -2680,11 +2681,6 @@
                     addRemovingUserIdLocked(userHandle);
                 }
 
-                try {
-                    mAppOpsService.removeUser(userHandle);
-                } catch (RemoteException e) {
-                    Log.w(LOG_TAG, "Unable to notify AppOpsService of removing user", e);
-                }
                 // Set this to a partially created user, so that the user will be purged
                 // on next startup, in case the runtime stops now before stopping and
                 // removing the user completely.
@@ -2694,6 +2690,11 @@
                 userData.info.flags |= UserInfo.FLAG_DISABLED;
                 writeUserLP(userData);
             }
+            try {
+                mAppOpsService.removeUser(userHandle);
+            } catch (RemoteException e) {
+                Log.w(LOG_TAG, "Unable to notify AppOpsService of removing user", e);
+            }
 
             if (userData.info.profileGroupId != UserInfo.NO_PROFILE_GROUP_ID
                     && userData.info.isManagedProfile()) {
@@ -2853,9 +2854,9 @@
                 || !UserHandle.isSameApp(Binder.getCallingUid(), getUidForPackage(packageName))) {
             checkSystemOrRoot("get application restrictions for other user/app " + packageName);
         }
-        synchronized (mPackagesLock) {
+        synchronized (mAppRestrictionsLock) {
             // Read the restrictions from XML
-            return readApplicationRestrictionsLP(packageName, userId);
+            return readApplicationRestrictionsLAr(packageName, userId);
         }
     }
 
@@ -2866,12 +2867,12 @@
         if (restrictions != null) {
             restrictions.setDefusable(true);
         }
-        synchronized (mPackagesLock) {
+        synchronized (mAppRestrictionsLock) {
             if (restrictions == null || restrictions.isEmpty()) {
-                cleanAppRestrictionsForPackage(packageName, userId);
+                cleanAppRestrictionsForPackageLAr(packageName, userId);
             } else {
                 // Write the restrictions to XML
-                writeApplicationRestrictionsLP(packageName, restrictions, userId);
+                writeApplicationRestrictionsLAr(packageName, restrictions, userId);
             }
         }
 
@@ -2894,15 +2895,17 @@
         }
     }
 
-    private Bundle readApplicationRestrictionsLP(String packageName, int userId) {
+    @GuardedBy("mAppRestrictionsLock")
+    private static Bundle readApplicationRestrictionsLAr(String packageName, int userId) {
         AtomicFile restrictionsFile =
                 new AtomicFile(new File(Environment.getUserSystemDirectory(userId),
                         packageToRestrictionsFileName(packageName)));
-        return readApplicationRestrictionsLP(restrictionsFile);
+        return readApplicationRestrictionsLAr(restrictionsFile);
     }
 
     @VisibleForTesting
-    static Bundle readApplicationRestrictionsLP(AtomicFile restrictionsFile) {
+    @GuardedBy("mAppRestrictionsLock")
+    static Bundle readApplicationRestrictionsLAr(AtomicFile restrictionsFile) {
         final Bundle restrictions = new Bundle();
         final ArrayList<String> values = new ArrayList<>();
         if (!restrictionsFile.getBaseFile().exists()) {
@@ -2985,16 +2988,18 @@
         return childBundle;
     }
 
-    private void writeApplicationRestrictionsLP(String packageName,
+    @GuardedBy("mAppRestrictionsLock")
+    private static void writeApplicationRestrictionsLAr(String packageName,
             Bundle restrictions, int userId) {
         AtomicFile restrictionsFile = new AtomicFile(
                 new File(Environment.getUserSystemDirectory(userId),
                         packageToRestrictionsFileName(packageName)));
-        writeApplicationRestrictionsLP(restrictions, restrictionsFile);
+        writeApplicationRestrictionsLAr(restrictions, restrictionsFile);
     }
 
     @VisibleForTesting
-    static void writeApplicationRestrictionsLP(Bundle restrictions, AtomicFile restrictionsFile) {
+    @GuardedBy("mAppRestrictionsLock")
+    static void writeApplicationRestrictionsLAr(Bundle restrictions, AtomicFile restrictionsFile) {
         FileOutputStream fos = null;
         try {
             fos = restrictionsFile.startWrite();
@@ -3238,7 +3243,7 @@
         return -1;
     }
 
-    private String packageToRestrictionsFileName(String packageName) {
+    private static String packageToRestrictionsFileName(String packageName) {
         return RESTRICTIONS_FILE_PREFIX + packageName + XML_SUFFIX;
     }
 
@@ -3692,19 +3697,29 @@
 
         @Override
         public boolean isUserUnlockingOrUnlocked(int userId) {
+            int state;
             synchronized (mUserStates) {
-                int state = mUserStates.get(userId, -1);
-                return (state == UserState.STATE_RUNNING_UNLOCKING)
-                        || (state == UserState.STATE_RUNNING_UNLOCKED);
+                state = mUserStates.get(userId, -1);
             }
+            // Special case, in the stopping/shutdown state user key can still be unlocked
+            if (state == UserState.STATE_STOPPING || state == UserState.STATE_SHUTDOWN) {
+                return StorageManager.isUserKeyUnlocked(userId);
+            }
+            return (state == UserState.STATE_RUNNING_UNLOCKING)
+                    || (state == UserState.STATE_RUNNING_UNLOCKED);
         }
 
         @Override
         public boolean isUserUnlocked(int userId) {
+            int state;
             synchronized (mUserStates) {
-                int state = mUserStates.get(userId, -1);
-                return state == UserState.STATE_RUNNING_UNLOCKED;
+                state = mUserStates.get(userId, -1);
             }
+            // Special case, in the stopping/shutdown state user key can still be unlocked
+            if (state == UserState.STATE_STOPPING || state == UserState.STATE_SHUTDOWN) {
+                return StorageManager.isUserKeyUnlocked(userId);
+            }
+            return state == UserState.STATE_RUNNING_UNLOCKED;
         }
     }
 
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 be50eee..6274754 100644
--- a/services/core/java/com/android/server/pm/dex/DexManager.java
+++ b/services/core/java/com/android/server/pm/dex/DexManager.java
@@ -36,6 +36,8 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -81,6 +83,19 @@
     private static int DEX_SEARCH_FOUND_SPLIT = 2;  // dex file is a split apk
     private static int DEX_SEARCH_FOUND_SECONDARY = 3;  // dex file is a secondary dex
 
+    /**
+     * We do not record packages that have no secondary dex files or that are not used by other
+     * apps. This is an optimization to reduce the amount of data that needs to be written to
+     * disk (apps will not usually be shared so this trims quite a bit the number we record).
+     *
+     * To make this behaviour transparent to the callers which need use information on packages,
+     * DexManager will return this DEFAULT instance from
+     * {@link DexManager#getPackageUseInfoOrDefault}. It has no data about secondary dex files and
+     * is marked as not being used by other apps. This reflects the intended behaviour when we don't
+     * find the package in the underlying data file.
+     */
+    private final static PackageUseInfo DEFAULT_USE_INFO = new PackageUseInfo();
+
     public DexManager(IPackageManager pms, PackageDexOptimizer pdo,
             Installer installer, Object installLock) {
       mPackageCodeLocationsCache = new HashMap<>();
@@ -97,29 +112,55 @@
      * return as fast as possible.
      *
      * @param loadingAppInfo the package performing the load
-     * @param dexPaths the list of dex files being loaded
+     * @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}.
+     *     The dex files found in the first class path will be recorded in the usage file.
      * @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> dexPaths,
-            String loaderIsa, int loaderUserId) {
+    public void notifyDexLoad(ApplicationInfo loadingAppInfo, List<String> classLoadersNames,
+            List<String> classPaths, String loaderIsa, int loaderUserId) {
         try {
-            notifyDexLoadInternal(loadingAppInfo, dexPaths, loaderIsa, loaderUserId);
+            notifyDexLoadInternal(loadingAppInfo, classLoadersNames, classPaths, loaderIsa,
+                    loaderUserId);
         } catch (Exception e) {
             Slog.w(TAG, "Exception while notifying dex load for package " +
                     loadingAppInfo.packageName, e);
         }
     }
 
-    private void notifyDexLoadInternal(ApplicationInfo loadingAppInfo, List<String> dexPaths,
-            String loaderIsa, int loaderUserId) {
+    private void notifyDexLoadInternal(ApplicationInfo loadingAppInfo,
+            List<String> classLoaderNames, List<String> classPaths, String loaderIsa,
+            int loaderUserId) {
+        if (classLoaderNames.size() != classPaths.size()) {
+            Slog.wtf(TAG, "Bad call to noitfyDexLoad: args have different size");
+            return;
+        }
+        if (classLoaderNames.isEmpty()) {
+            Slog.wtf(TAG, "Bad call to notifyDexLoad: class loaders list is empty");
+            return;
+        }
         if (!PackageManagerServiceUtils.checkISA(loaderIsa)) {
-            Slog.w(TAG, "Loading dex files " + dexPaths + " in unsupported ISA: " +
+            Slog.w(TAG, "Loading dex files " + classPaths + " in unsupported ISA: " +
                     loaderIsa + "?");
             return;
         }
 
-        for (String dexPath : dexPaths) {
+        // The classpath is represented as a list of dex files separated by File.pathSeparator.
+        String[] dexPathsToRegister = classPaths.get(0).split(File.pathSeparator);
+
+        // Encode the class loader contexts for the dexPathsToRegister.
+        String[] classLoaderContexts = DexoptUtils.processContextForDexLoad(
+                classLoaderNames, classPaths);
+
+        int dexPathIndex = 0;
+        for (String dexPath : dexPathsToRegister) {
             // Find the owning package name.
             DexSearchResult searchResult = getDexPackage(loadingAppInfo, dexPath, loaderUserId);
 
@@ -147,23 +188,25 @@
                 // Record dex file usage. If the current usage is a new pattern (e.g. new secondary,
                 // or UsedBytOtherApps), 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.
+
+                // A null classLoaderContexts means that there are unsupported class loaders in the
+                // chain.
+                String classLoaderContext = classLoaderContexts == null
+                        ? PackageDexUsage.UNSUPPORTED_CLASS_LOADER_CONTEXT
+                        : classLoaderContexts[dexPathIndex];
                 if (mPackageDexUsage.record(searchResult.mOwningPackageName,
-                        dexPath, loaderUserId, loaderIsa, isUsedByOtherApps, primaryOrSplit)) {
+                        dexPath, loaderUserId, loaderIsa, isUsedByOtherApps, primaryOrSplit,
+                        loadingAppInfo.packageName, classLoaderContext)) {
                     mPackageDexUsage.maybeWriteAsync();
                 }
             } else {
-                // This can happen in a few situations:
-                // - bogus dex loads
-                // - recent installs/uninstalls that we didn't detect.
-                // - new installed splits
                 // If we can't find the owner of the dex we simply do not track it. The impact is
                 // that the dex file will not be considered for offline optimizations.
-                // TODO(calin): add hooks for move/uninstall notifications to
-                // capture package moves or obsolete packages.
                 if (DEBUG) {
                     Slog.i(TAG, "Could not find owning package for dex file: " + dexPath);
                 }
             }
+            dexPathIndex++;
         }
     }
 
@@ -269,6 +312,8 @@
 
     private void loadInternal(Map<Integer, List<PackageInfo>> existingPackages) {
         Map<String, Set<Integer>> packageToUsersMap = new HashMap<>();
+        Map<String, Set<String>> packageToCodePaths = new HashMap<>();
+
         // Cache the code locations for the installed packages. This allows for
         // faster lookups (no locks) when finding what package owns the dex file.
         for (Map.Entry<Integer, List<PackageInfo>> entry : existingPackages.entrySet()) {
@@ -278,54 +323,72 @@
                 // Cache the code locations.
                 cachePackageInfo(pi, userId);
 
-                // Cache a map from package name to the set of user ids who installed the package.
+                // Cache two maps:
+                //   - from package name to the set of user ids who installed the package.
+                //   - from package name to the set of code paths.
                 // We will use it to sync the data and remove obsolete entries from
                 // mPackageDexUsage.
                 Set<Integer> users = putIfAbsent(
                         packageToUsersMap, pi.packageName, new HashSet<>());
                 users.add(userId);
+
+                Set<String> codePaths = putIfAbsent(
+                    packageToCodePaths, pi.packageName, new HashSet<>());
+                codePaths.add(pi.applicationInfo.sourceDir);
+                if (pi.applicationInfo.splitSourceDirs != null) {
+                    Collections.addAll(codePaths, pi.applicationInfo.splitSourceDirs);
+                }
             }
         }
 
         mPackageDexUsage.read();
-        mPackageDexUsage.syncData(packageToUsersMap);
+        mPackageDexUsage.syncData(packageToUsersMap, packageToCodePaths);
     }
 
     /**
      * Get the package dex usage for the given package name.
-     * @return the package data or null if there is no data available for this package.
+     * If there is no usage info the method will return a default {@code PackageUseInfo} with
+     * no data about secondary dex files and marked as not being used by other apps.
+     *
+     * Note that no use info means the package was not used or it was used but not by other apps.
+     * Also, note that right now we might prune packages which are not used by other apps.
+     * TODO(calin): maybe we should not (prune) so we can have an accurate view when we try
+     * to access the package use.
      */
-    public PackageUseInfo getPackageUseInfo(String packageName) {
-        return mPackageDexUsage.getPackageUseInfo(packageName);
+    public PackageUseInfo getPackageUseInfoOrDefault(String packageName) {
+        PackageUseInfo useInfo = mPackageDexUsage.getPackageUseInfo(packageName);
+        return useInfo == null ? DEFAULT_USE_INFO : useInfo;
     }
 
     /**
-     * Perform dexopt on the package {@code packageName} secondary dex files.
-     * @return true if all secondary dex files were processed successfully (compiled or skipped
-     *         because they don't need to be compiled)..
+     * Return whether or not the manager has usage information on the give package.
+     *
+     * Note that no use info means the package was not used or it was used but not by other apps.
+     * Also, note that right now we might prune packages which are not used by other apps.
+     * TODO(calin): maybe we should not (prune) so we can have an accurate view when we try
+     * to access the package use.
      */
-    public boolean dexoptSecondaryDex(String packageName, int compilerReason, boolean force) {
-        return dexoptSecondaryDex(packageName,
-                PackageManagerServiceCompilerMapping.getCompilerFilterForReason(compilerReason),
-                force);
+    /*package*/ boolean hasInfoOnPackage(String packageName) {
+        return mPackageDexUsage.getPackageUseInfo(packageName) != null;
     }
 
     /**
-     * Perform dexopt on the package {@code packageName} secondary dex files.
+     * Perform dexopt on with the given {@code options} on the secondary dex files.
      * @return true if all secondary dex files were processed successfully (compiled or skipped
      *         because they don't need to be compiled)..
      */
-    public boolean dexoptSecondaryDex(String packageName, String compilerFilter, boolean force) {
+    public boolean dexoptSecondaryDex(DexoptOptions options) {
         // Select the dex optimizer based on the force parameter.
         // Forced compilation is done through ForcedUpdatePackageDexOptimizer which will adjust
         // the necessary dexopt flags to make sure that compilation is not skipped. This avoid
         // passing the force flag through the multitude of layers.
         // Note: The force option is rarely used (cmdline input for testing, mostly), so it's OK to
         //       allocate an object here.
-        PackageDexOptimizer pdo = force
+        PackageDexOptimizer pdo = options.isForce()
                 ? new PackageDexOptimizer.ForcedUpdatePackageDexOptimizer(mPackageDexOptimizer)
                 : mPackageDexOptimizer;
-        PackageUseInfo useInfo = getPackageUseInfo(packageName);
+        String packageName = options.getPackageName();
+        PackageUseInfo useInfo = getPackageUseInfoOrDefault(packageName);
         if (useInfo == null || useInfo.getDexUseInfoMap().isEmpty()) {
             if (DEBUG) {
                 Slog.d(TAG, "No secondary dex use for package:" + packageName);
@@ -337,7 +400,8 @@
         for (Map.Entry<String, DexUseInfo> entry : useInfo.getDexUseInfoMap().entrySet()) {
             String dexPath = entry.getKey();
             DexUseInfo dexUseInfo = entry.getValue();
-            PackageInfo pkg = null;
+
+            PackageInfo pkg;
             try {
                 pkg = mPackageManager.getPackageInfo(packageName, /*flags*/0,
                     dexUseInfo.getOwnerUserId());
@@ -356,7 +420,7 @@
             }
 
             int result = pdo.dexOptSecondaryDexPath(pkg.applicationInfo, dexPath,
-                    dexUseInfo.getLoaderIsas(), compilerFilter, dexUseInfo.isUsedByOtherApps());
+                    dexUseInfo, options);
             success = success && (result != PackageDexOptimizer.DEX_OPT_FAILED);
         }
         return success;
@@ -368,7 +432,7 @@
      * deleted, update the internal records and delete any generated oat files.
      */
     public void reconcileSecondaryDexFiles(String packageName) {
-        PackageUseInfo useInfo = getPackageUseInfo(packageName);
+        PackageUseInfo useInfo = getPackageUseInfoOrDefault(packageName);
         if (useInfo == null || useInfo.getDexUseInfoMap().isEmpty()) {
             if (DEBUG) {
                 Slog.d(TAG, "No secondary dex use for package:" + packageName);
@@ -439,6 +503,8 @@
         }
     }
 
+    // TODO(calin): questionable API in the presence of class loaders context. Needs amends as the
+    // compilation happening here will use a pessimistic context.
     public RegisterDexModuleResult registerDexModule(ApplicationInfo info, String dexPath,
             boolean isUsedByOtherApps, int userId) {
         // Find the owning package record.
@@ -457,11 +523,11 @@
 
         // We found the package. Now record the usage for all declared ISAs.
         boolean update = false;
-        Set<String> isas = new HashSet<>();
         for (String isa : getAppDexInstructionSets(info)) {
-            isas.add(isa);
             boolean newUpdate = mPackageDexUsage.record(searchResult.mOwningPackageName,
-                dexPath, userId, isa, isUsedByOtherApps, /*primaryOrSplit*/ false);
+                    dexPath, userId, isa, isUsedByOtherApps, /*primaryOrSplit*/ false,
+                    searchResult.mOwningPackageName,
+                    PackageDexUsage.UNKNOWN_CLASS_LOADER_CONTEXT);
             update |= newUpdate;
         }
         if (update) {
@@ -471,8 +537,13 @@
         // Try to optimize the package according to the install reason.
         String compilerFilter = PackageManagerServiceCompilerMapping.getCompilerFilterForReason(
                 PackageManagerService.REASON_INSTALL);
-        int result = mPackageDexOptimizer.dexOptSecondaryDexPath(info, dexPath, isas,
-                compilerFilter, isUsedByOtherApps);
+        DexUseInfo dexUseInfo = mPackageDexUsage.getPackageUseInfo(searchResult.mOwningPackageName)
+                .getDexUseInfoMap().get(dexPath);
+
+        DexoptOptions options = new DexoptOptions(info.packageName, compilerFilter, /*flags*/0);
+
+        int result = mPackageDexOptimizer.dexOptSecondaryDexPath(info, dexPath, dexUseInfo,
+                options);
 
         // If we fail to optimize the package log an error but don't propagate the error
         // back to the app. The app cannot do much about it and the background job
@@ -493,23 +564,6 @@
     }
 
     /**
-     * Return true if the profiling data collected for the given app indicate
-     * that the apps's APK has been loaded by another app.
-     * Note that this returns false for all apps without any collected profiling data.
-    */
-    public boolean isUsedByOtherApps(String packageName) {
-        PackageUseInfo useInfo = getPackageUseInfo(packageName);
-        if (useInfo == null) {
-            // No use info, means the package was not used or it was used but not by other apps.
-            // Note that right now we might prune packages which are not used by other apps.
-            // TODO(calin): maybe we should not (prune) so we can have an accurate view when we try
-            // to access the package use.
-            return false;
-        }
-        return useInfo.isUsedByOtherApps();
-    }
-
-    /**
      * Retrieves the package which owns the given dexPath.
      */
     private DexSearchResult getDexPackage(
@@ -566,6 +620,13 @@
         return existingValue == null ? newValue : existingValue;
     }
 
+    /**
+     * Writes the in-memory package dex usage to disk right away.
+     */
+    public void writePackageDexUsageNow() {
+        mPackageDexUsage.writeNow();
+    }
+
     public static class RegisterDexModuleResult {
         public RegisterDexModuleResult() {
             this(false, null);
diff --git a/services/core/java/com/android/server/pm/dex/DexoptOptions.java b/services/core/java/com/android/server/pm/dex/DexoptOptions.java
new file mode 100644
index 0000000..4fa47b5
--- /dev/null
+++ b/services/core/java/com/android/server/pm/dex/DexoptOptions.java
@@ -0,0 +1,143 @@
+/*
+ * 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.pm.dex;
+
+import static com.android.server.pm.PackageManagerServiceCompilerMapping.getCompilerFilterForReason;
+
+import android.annotation.Nullable;
+
+/**
+ * Options used for dexopt invocations.
+ */
+public final class DexoptOptions {
+    // When set, the profiles will be checked for updates before calling dexopt. If
+    // the apps profiles didn't update in a meaningful way (decided by the compiler), dexopt
+    // will be skipped.
+    // Currently this only affects the optimization of primary apks. Secondary dex files
+    // will always check the profiles for updates.
+    public static final int DEXOPT_CHECK_FOR_PROFILES_UPDATES = 1 << 0;
+
+    // When set, dexopt will execute unconditionally (even if not needed).
+    public static final int DEXOPT_FORCE = 1 << 1;
+
+    // Whether or not the invocation of dexopt is done after the boot is completed. This is used
+    // in order to adjust the priority of the compilation thread.
+    public static final int DEXOPT_BOOT_COMPLETE = 1 << 2;
+
+    // When set, the dexopt invocation will optimize only the secondary dex files. If false, dexopt
+    // will only consider the primary apk.
+    public static final int DEXOPT_ONLY_SECONDARY_DEX = 1 << 3;
+
+    // When set, dexopt will optimize only dex files that are used by other apps.
+    // Currently, this flag is ignored for primary apks.
+    public static final int DEXOPT_ONLY_SHARED_DEX = 1 << 4;
+
+    // When set, dexopt will attempt to scale down the optimizations previously applied in order
+    // save disk space.
+    public static final int DEXOPT_DOWNGRADE = 1 << 5;
+
+    // When set, dexopt will compile the dex file as a shared library even if it is not actually
+    // used by other apps. This is used to force the compilation or shared libraries declared
+    // with in the manifest with ''uses-library' before we have a chance to detect they are
+    // actually shared at runtime.
+    public static final int DEXOPT_AS_SHARED_LIBRARY = 1 << 6;
+
+    // The name of package to optimize.
+    private final String mPackageName;
+
+    // The intended target compiler filter. Note that dexopt might adjust the filter before the
+    // execution based on factors like: vmSafeMode and packageUsedByOtherApps.
+    private final String mCompilerFilter;
+
+    // The set of flags for the dexopt options. It's a mix of the DEXOPT_* flags.
+    private final int mFlags;
+
+    // When not null, dexopt will optimize only the split identified by this name.
+    // It only applies for primary apk and it's always null if mOnlySecondaryDex is true.
+    private final String mSplitName;
+
+    public DexoptOptions(String packageName, String compilerFilter, int flags) {
+        this(packageName, compilerFilter, /*splitName*/ null, flags);
+    }
+
+    public DexoptOptions(String packageName, int compilerReason, int flags) {
+        this(packageName, getCompilerFilterForReason(compilerReason), flags);
+    }
+
+    public DexoptOptions(String packageName, String compilerFilter, String splitName, int flags) {
+        int validityMask =
+                DEXOPT_CHECK_FOR_PROFILES_UPDATES |
+                DEXOPT_FORCE |
+                DEXOPT_BOOT_COMPLETE |
+                DEXOPT_ONLY_SECONDARY_DEX |
+                DEXOPT_ONLY_SHARED_DEX |
+                DEXOPT_DOWNGRADE |
+                DEXOPT_AS_SHARED_LIBRARY;
+        if ((flags & (~validityMask)) != 0) {
+            throw new IllegalArgumentException("Invalid flags : " + Integer.toHexString(flags));
+        }
+
+        mPackageName = packageName;
+        mCompilerFilter = compilerFilter;
+        mFlags = flags;
+        mSplitName = splitName;
+    }
+
+    public String getPackageName() {
+        return mPackageName;
+    }
+
+    public boolean isCheckForProfileUpdates() {
+        return (mFlags & DEXOPT_CHECK_FOR_PROFILES_UPDATES) != 0;
+    }
+
+    public String getCompilerFilter() {
+        return mCompilerFilter;
+    }
+
+    public boolean isForce() {
+        return (mFlags & DEXOPT_FORCE) != 0;
+    }
+
+    public boolean isBootComplete() {
+        return (mFlags & DEXOPT_BOOT_COMPLETE) != 0;
+    }
+
+    public boolean isDexoptOnlySecondaryDex() {
+        return (mFlags & DEXOPT_ONLY_SECONDARY_DEX) != 0;
+    }
+
+    public boolean isDexoptOnlySharedDex() {
+        return (mFlags & DEXOPT_ONLY_SHARED_DEX) != 0;
+    }
+
+    public boolean isDowngrade() {
+        return (mFlags & DEXOPT_DOWNGRADE) != 0;
+    }
+
+    public boolean isDexoptAsSharedLibrary() {
+        return (mFlags & DEXOPT_AS_SHARED_LIBRARY) != 0;
+    }
+
+    public String getSplitName() {
+        return mSplitName;
+    }
+
+    public int getFlags() {
+        return mFlags;
+    }
+}
diff --git a/services/core/java/com/android/server/pm/dex/DexoptUtils.java b/services/core/java/com/android/server/pm/dex/DexoptUtils.java
new file mode 100644
index 0000000..e1310a2
--- /dev/null
+++ b/services/core/java/com/android/server/pm/dex/DexoptUtils.java
@@ -0,0 +1,367 @@
+/*
+ * 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.pm.dex;
+
+import android.content.pm.ApplicationInfo;
+import android.util.Slog;
+import android.util.SparseArray;
+
+import com.android.internal.os.ClassLoaderFactory;
+import com.android.server.pm.PackageDexOptimizer;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public final class DexoptUtils {
+    private static final String TAG = "DexoptUtils";
+
+    private DexoptUtils() {}
+
+    /**
+     * Creates the class loader context dependencies for each of the application code paths.
+     * The returned array contains the class loader contexts that needs to be passed to dexopt in
+     * order to ensure correct optimizations. "Code" paths with no actual code, as specified by
+     * {@param pathsWithCode}, are ignored and will have null as their context in the returned array
+     * (configuration splits are an example of paths without code).
+     *
+     * A class loader context describes how the class loader chain should be built by dex2oat
+     * in order to ensure that classes are resolved during compilation as they would be resolved
+     * at runtime. The context will be encoded in the compiled code. If at runtime the dex file is
+     * loaded in a different context (with a different set of class loaders or a different
+     * classpath), the compiled code will be rejected.
+     *
+     * Note that the class loader context only includes dependencies and not the code path itself.
+     * The contexts are created based on the application split dependency list and
+     * the provided shared libraries.
+     *
+     * All the code paths encoded in the context will be relative to the base directory. This
+     * enables stage compilation where compiler artifacts may be moved around.
+     *
+     * The result is indexed as follows:
+     *   - index 0 contains the context for the base apk
+     *   - index 1 to n contain the context for the splits in the order determined by
+     *     {@code info.getSplitCodePaths()}
+     *
+     * IMPORTANT: keep this logic in sync with the loading code in {@link android.app.LoadedApk}
+     * and pay attention to the way the classpath is created for the non isolated mode in:
+     * {@link android.app.LoadedApk#makePaths(
+     * android.app.ActivityThread, boolean, ApplicationInfo, List, List)}.
+     */
+    public static String[] getClassLoaderContexts(ApplicationInfo info,
+            String[] sharedLibraries, boolean[] pathsWithCode) {
+        // The base class loader context contains only the shared library.
+        String sharedLibrariesClassPath = encodeClasspath(sharedLibraries);
+        String baseApkContextClassLoader = encodeClassLoader(
+                sharedLibrariesClassPath, info.classLoaderName);
+
+        if (info.getSplitCodePaths() == null) {
+            // The application has no splits.
+            return new String[] {baseApkContextClassLoader};
+        }
+
+        // The application has splits. Compute their class loader contexts.
+
+        // First, cache the relative paths of the splits and do some sanity checks
+        String[] splitRelativeCodePaths = getSplitRelativeCodePaths(info);
+
+        // The splits have an implicit dependency on the base apk.
+        // This means that we have to add the base apk file in addition to the shared libraries.
+        String baseApkName = new File(info.getBaseCodePath()).getName();
+        String sharedLibrariesAndBaseClassPath =
+                encodeClasspath(sharedLibrariesClassPath, baseApkName);
+
+        // The result is stored in classLoaderContexts.
+        // Index 0 is the class loaded context for the base apk.
+        // Index `i` is the class loader context encoding for split `i`.
+        String[] classLoaderContexts = new String[/*base apk*/ 1 + splitRelativeCodePaths.length];
+        classLoaderContexts[0] = pathsWithCode[0] ? baseApkContextClassLoader : null;
+
+        if (!info.requestsIsolatedSplitLoading() || info.splitDependencies == null) {
+            // If the app didn't request for the splits to be loaded in isolation or if it does not
+            // declare inter-split dependencies, then all the splits will be loaded in the base
+            // apk class loader (in the order of their definition).
+            String classpath = sharedLibrariesAndBaseClassPath;
+            for (int i = 1; i < classLoaderContexts.length; i++) {
+                classLoaderContexts[i] = pathsWithCode[i]
+                        ? encodeClassLoader(classpath, info.classLoaderName) : null;
+                // Note that the splits with no code are not removed from the classpath computation.
+                // i.e. split_n might get the split_n-1 in its classpath dependency even
+                // if split_n-1 has no code.
+                // The splits with no code do not matter for the runtime which ignores
+                // apks without code when doing the classpath checks. As such we could actually
+                // filter them but we don't do it in order to keep consistency with how the apps
+                // are loaded.
+                classpath = encodeClasspath(classpath, splitRelativeCodePaths[i - 1]);
+            }
+        } else {
+            // In case of inter-split dependencies, we need to walk the dependency chain of each
+            // split. We do this recursively and store intermediate results in classLoaderContexts.
+
+            // First, look at the split class loaders and cache their individual contexts (i.e.
+            // the class loader + the name of the split). This is an optimization to avoid
+            // re-computing them during the recursive call.
+            // The cache is stored in splitClassLoaderEncodingCache. The difference between this and
+            // classLoaderContexts is that the later contains the full chain of class loaders for
+            // a given split while splitClassLoaderEncodingCache only contains a single class loader
+            // encoding.
+            String[] splitClassLoaderEncodingCache = new String[splitRelativeCodePaths.length];
+            for (int i = 0; i < splitRelativeCodePaths.length; i++) {
+                splitClassLoaderEncodingCache[i] = encodeClassLoader(splitRelativeCodePaths[i],
+                        info.splitClassLoaderNames[i]);
+            }
+            String splitDependencyOnBase = encodeClassLoader(
+                    sharedLibrariesAndBaseClassPath, info.classLoaderName);
+            SparseArray<int[]> splitDependencies = info.splitDependencies;
+
+            // Note that not all splits have dependencies (e.g. configuration splits)
+            // The splits without dependencies will have classLoaderContexts[config_split_index]
+            // set to null after this step.
+            for (int i = 1; i < splitDependencies.size(); i++) {
+                int splitIndex = splitDependencies.keyAt(i);
+                if (pathsWithCode[splitIndex]) {
+                    // Compute the class loader context only for the splits with code.
+                    getParentDependencies(splitIndex, splitClassLoaderEncodingCache,
+                            splitDependencies, classLoaderContexts, splitDependencyOnBase);
+                }
+            }
+
+            // At this point classLoaderContexts contains only the parent dependencies.
+            // We also need to add the class loader of the current split which should
+            // come first in the context.
+            for (int i = 1; i < classLoaderContexts.length; i++) {
+                String splitClassLoader = encodeClassLoader("", info.splitClassLoaderNames[i - 1]);
+                if (pathsWithCode[i]) {
+                    // If classLoaderContexts[i] is null it means that the split does not have
+                    // any dependency. In this case its context equals its declared class loader.
+                    classLoaderContexts[i] = classLoaderContexts[i] == null
+                            ? splitClassLoader
+                            : encodeClassLoaderChain(splitClassLoader, classLoaderContexts[i]);
+                } else {
+                    // This is a split without code, it has no dependency and it is not compiled.
+                    // Its context will be null.
+                    classLoaderContexts[i] = null;
+                }
+            }
+        }
+
+        return classLoaderContexts;
+    }
+
+    /**
+     * Recursive method to generate the class loader context dependencies for the split with the
+     * given index. {@param classLoaderContexts} acts as an accumulator. Upton return
+     * {@code classLoaderContexts[index]} will contain the split dependency.
+     * During computation, the method may resolve the dependencies of other splits as it traverses
+     * the entire parent chain. The result will also be stored in {@param classLoaderContexts}.
+     *
+     * Note that {@code index 0} denotes the base apk and it is special handled. When the
+     * recursive call hits {@code index 0} the method returns {@code splitDependencyOnBase}.
+     * {@code classLoaderContexts[0]} is not modified in this method.
+     *
+     * @param index the index of the split (Note that index 0 denotes the base apk)
+     * @param splitClassLoaderEncodingCache the class loader encoding for the individual splits.
+     *    It contains only the split class loader and not the the base. The split
+     *    with {@code index} has its context at {@code splitClassLoaderEncodingCache[index - 1]}.
+     * @param splitDependencies the dependencies for all splits. Note that in this array index 0
+     *    is the base and splits start from index 1.
+     * @param classLoaderContexts the result accumulator. index 0 is the base and never set. Splits
+     *    start at index 1.
+     * @param splitDependencyOnBase the encoding of the implicit split dependency on base.
+     */
+    private static String getParentDependencies(int index, String[] splitClassLoaderEncodingCache,
+            SparseArray<int[]> splitDependencies, String[] classLoaderContexts,
+            String splitDependencyOnBase) {
+        // If we hit the base apk return its custom dependency list which is
+        // sharedLibraries + base.apk
+        if (index == 0) {
+            return splitDependencyOnBase;
+        }
+        // Return the result if we've computed the splitDependencies for this index already.
+        if (classLoaderContexts[index] != null) {
+            return classLoaderContexts[index];
+        }
+        // Get the splitDependencies for the parent of this index and append its path to it.
+        int parent = splitDependencies.get(index)[0];
+        String parentDependencies = getParentDependencies(parent, splitClassLoaderEncodingCache,
+                splitDependencies, classLoaderContexts, splitDependencyOnBase);
+
+        // The split context is: `parent context + parent dependencies context`.
+        String splitContext = (parent == 0) ?
+                parentDependencies :
+                encodeClassLoaderChain(splitClassLoaderEncodingCache[parent - 1], parentDependencies);
+        classLoaderContexts[index] = splitContext;
+        return splitContext;
+    }
+
+    /**
+     * Encodes the shared libraries classpathElements in a format accepted by dexopt.
+     * NOTE: Keep this in sync with the dexopt expectations! Right now that is
+     * a list separated by ':'.
+     */
+    private static String encodeClasspath(String[] classpathElements) {
+        if (classpathElements == null || classpathElements.length == 0) {
+            return "";
+        }
+        StringBuilder sb = new StringBuilder();
+        for (String element : classpathElements) {
+            if (sb.length() != 0) {
+                sb.append(":");
+            }
+            sb.append(element);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Adds an element to the encoding of an existing classpath.
+     * {@see PackageDexOptimizer.encodeClasspath(String[])}
+     */
+    private static String encodeClasspath(String classpath, String newElement) {
+        return classpath.isEmpty() ? newElement : (classpath + ":" + newElement);
+    }
+
+    /**
+     * Encodes a single class loader dependency starting from {@param path} and
+     * {@param classLoaderName}.
+     * When classpath is {@link PackageDexOptimizer#SKIP_SHARED_LIBRARY_CHECK}, the method returns
+     * the same. This special property is used only during OTA.
+     * NOTE: Keep this in sync with the dexopt expectations! Right now that is either "PCL[path]"
+     * for a PathClassLoader or "DLC[path]" for a DelegateLastClassLoader.
+     */
+    /*package*/ static String encodeClassLoader(String classpath, String classLoaderName) {
+        if (classpath.equals(PackageDexOptimizer.SKIP_SHARED_LIBRARY_CHECK)) {
+            return classpath;
+        }
+        String classLoaderDexoptEncoding = classLoaderName;
+        if (ClassLoaderFactory.isPathClassLoaderName(classLoaderName)) {
+            classLoaderDexoptEncoding = "PCL";
+        } else if (ClassLoaderFactory.isDelegateLastClassLoaderName(classLoaderName)) {
+            classLoaderDexoptEncoding = "DLC";
+        } else {
+            Slog.wtf(TAG, "Unsupported classLoaderName: " + classLoaderName);
+        }
+        return classLoaderDexoptEncoding + "[" + classpath + "]";
+    }
+
+    /**
+     * Links to dependencies together in a format accepted by dexopt.
+     * For the special case when either of cl1 or cl2 equals
+     * {@link PackageDexOptimizer#SKIP_SHARED_LIBRARY_CHECK}, the method returns the same. This
+     * property is used only during OTA.
+     * NOTE: Keep this in sync with the dexopt expectations! Right now that is a list of split
+     * dependencies {@see encodeClassLoader} separated by ';'.
+     */
+    /*package*/ static String encodeClassLoaderChain(String cl1, String cl2) {
+        if (cl1.equals(PackageDexOptimizer.SKIP_SHARED_LIBRARY_CHECK) ||
+                cl2.equals(PackageDexOptimizer.SKIP_SHARED_LIBRARY_CHECK)) {
+            return PackageDexOptimizer.SKIP_SHARED_LIBRARY_CHECK;
+        }
+        if (cl1.isEmpty()) return cl2;
+        if (cl2.isEmpty()) return cl1;
+        return cl1 + ";" + cl2;
+    }
+
+    /**
+     * Compute the class loader context for the dex files present in the classpath of the first
+     * class loader from the given list (referred in the code as the {@code loadingClassLoader}).
+     * Each dex files gets its own class loader context in the returned array.
+     *
+     * Example:
+     *    If classLoadersNames = {"dalvik.system.DelegateLastClassLoader",
+     *    "dalvik.system.PathClassLoader"} and classPaths = {"foo.dex:bar.dex", "other.dex"}
+     *    The output will be
+     *    {"DLC[];PCL[other.dex]", "DLC[foo.dex];PCL[other.dex]"}
+     *    with "DLC[];PCL[other.dex]" being the context for "foo.dex"
+     *    and "DLC[foo.dex];PCL[other.dex]" the context for "bar.dex".
+     *
+     * If any of the class loaders names is unsupported the method will return null.
+     *
+     * The argument lists must be non empty and of the same size.
+     *
+     * @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.
+     * @param classPaths the class paths for the elements of {@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}.
+     *     The return context will be for the dex files found in the first class path.
+     */
+    /*package*/ static String[] processContextForDexLoad(List<String> classLoadersNames,
+            List<String> classPaths) {
+        if (classLoadersNames.size() != classPaths.size()) {
+            throw new IllegalArgumentException(
+                    "The size of the class loader names and the dex paths do not match.");
+        }
+        if (classLoadersNames.isEmpty()) {
+            throw new IllegalArgumentException("Empty classLoadersNames");
+        }
+
+        // Compute the context for the parent class loaders.
+        String parentContext = "";
+        // We know that these lists are actually ArrayLists so getting the elements by index
+        // is fine (they come over binder). Even if something changes we expect the sizes to be
+        // very small and it shouldn't matter much.
+        for (int i = 1; i < classLoadersNames.size(); i++) {
+            if (!ClassLoaderFactory.isValidClassLoaderName(classLoadersNames.get(i))) {
+                return null;
+            }
+            String classpath = encodeClasspath(classPaths.get(i).split(File.pathSeparator));
+            parentContext = encodeClassLoaderChain(parentContext,
+                    encodeClassLoader(classpath, classLoadersNames.get(i)));
+        }
+
+        // Now compute the class loader context for each dex file from the first classpath.
+        String loadingClassLoader = classLoadersNames.get(0);
+        if (!ClassLoaderFactory.isValidClassLoaderName(loadingClassLoader)) {
+            return null;
+        }
+        String[] loadedDexPaths = classPaths.get(0).split(File.pathSeparator);
+        String[] loadedDexPathsContext = new String[loadedDexPaths.length];
+        String currentLoadedDexPathClasspath = "";
+        for (int i = 0; i < loadedDexPaths.length; i++) {
+            String dexPath = loadedDexPaths[i];
+            String currentContext = encodeClassLoader(
+                    currentLoadedDexPathClasspath, loadingClassLoader);
+            loadedDexPathsContext[i] = encodeClassLoaderChain(currentContext, parentContext);
+            currentLoadedDexPathClasspath = encodeClasspath(currentLoadedDexPathClasspath, dexPath);
+        }
+        return loadedDexPathsContext;
+    }
+
+    /**
+     * Returns the relative paths of the splits declared by the application {@code info}.
+     * Assumes that the application declares a non-null array of splits.
+     */
+    private static String[] getSplitRelativeCodePaths(ApplicationInfo info) {
+        String baseCodePath = new File(info.getBaseCodePath()).getParent();
+        String[] splitCodePaths = info.getSplitCodePaths();
+        String[] splitRelativeCodePaths = new String[splitCodePaths.length];
+        for (int i = 0; i < splitCodePaths.length; i++) {
+            File pathFile = new File(splitCodePaths[i]);
+            splitRelativeCodePaths[i] = pathFile.getName();
+            // Sanity check that the base paths of the splits are all the same.
+            String basePath = pathFile.getParent();
+            if (!basePath.equals(baseCodePath)) {
+                Slog.wtf(TAG, "Split paths have different base paths: " + basePath + " and " +
+                        baseCodePath);
+            }
+        }
+        return splitRelativeCodePaths;
+    }
+}
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 8a66f12..a4a0a54 100644
--- a/services/core/java/com/android/server/pm/dex/PackageDexUsage.java
+++ b/services/core/java/com/android/server/pm/dex/PackageDexUsage.java
@@ -26,7 +26,6 @@
 import com.android.server.pm.PackageManagerServiceUtils;
 
 import java.io.BufferedReader;
-import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.InputStreamReader;
@@ -35,14 +34,19 @@
 import java.io.Reader;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import dalvik.system.VMRuntime;
 import libcore.io.IoUtils;
+import libcore.util.Objects;
 
 /**
  * Stat file which store usage information about dex files.
@@ -50,19 +54,44 @@
 public class PackageDexUsage extends AbstractStatsBase<Void> {
     private final static String TAG = "PackageDexUsage";
 
-    private final static int PACKAGE_DEX_USAGE_VERSION = 1;
+    // We support previous version to ensure that the usage list remains valid cross OTAs.
+    private final static int PACKAGE_DEX_USAGE_SUPPORTED_VERSION_1 = 1;
+    // Version 2 added:
+    //  - the list of packages that load the dex files
+    //  - class loader contexts for secondary dex files
+    //  - usage for all code paths (including splits)
+    private final static int PACKAGE_DEX_USAGE_SUPPORTED_VERSION_2 = 2;
+
+    private final static int PACKAGE_DEX_USAGE_VERSION = PACKAGE_DEX_USAGE_SUPPORTED_VERSION_2;
+
     private final static String PACKAGE_DEX_USAGE_VERSION_HEADER =
             "PACKAGE_MANAGER__PACKAGE_DEX_USAGE__";
 
     private final static String SPLIT_CHAR = ",";
+    private final static String CODE_PATH_LINE_CHAR = "+";
     private final static String DEX_LINE_CHAR = "#";
+    private final static String LOADING_PACKAGE_CHAR = "@";
+
+    // One of the things we record about dex files is the class loader context that was used to
+    // load them. That should be stable but if it changes we don't keep track of variable contexts.
+    // Instead we put a special marker in the dex usage file in order to recognize the case and
+    // skip optimizations on that dex files.
+    /*package*/ static final String VARIABLE_CLASS_LOADER_CONTEXT =
+            "=VariableClassLoaderContext=";
+    // The marker used for unsupported class loader contexts.
+    /*package*/ static final String UNSUPPORTED_CLASS_LOADER_CONTEXT =
+            "=UnsupportedClassLoaderContext=";
+    // The markers used for unknown class loader contexts. This can happen if the dex file was
+    // recorded in a previous version and we didn't have a chance to update its usage.
+    /*package*/ static final String UNKNOWN_CLASS_LOADER_CONTEXT =
+            "=UnknownClassLoaderContext=";
 
     // Map which structures the information we have on a package.
     // Maps package name to package data (which stores info about UsedByOtherApps and
     // secondary dex files.).
     // Access to this map needs synchronized.
     @GuardedBy("mPackageUseInfoMap")
-    private Map<String, PackageUseInfo> mPackageUseInfoMap;
+    private final Map<String, PackageUseInfo> mPackageUseInfoMap;
 
     public PackageDexUsage() {
         super("package-dex-usage.list", "PackageDexUsage_DiskWriter", /*lock*/ false);
@@ -75,21 +104,28 @@
      * Note this is called when apps load dex files and as such it should return
      * as fast as possible.
      *
-     * @param loadingPackage the package performing the load
+     * @param owningPackageName the package owning the dex path
      * @param dexPath the path of the dex files being loaded
      * @param ownerUserId the user id which runs the code loading the dex files
      * @param loaderIsa the ISA of the app loading the dex files
      * @param isUsedByOtherApps whether or not this dex file was not loaded by its owning package
      * @param primaryOrSplit whether or not the dex file is a primary/split dex. True indicates
      *        the file is either primary or a split. False indicates the file is secondary dex.
+     * @param loadingPackageName the package performing the load. Recorded only if it is different
+     *        than {@param owningPackageName}.
      * @return true if the dex load constitutes new information, or false if this information
      *         has been seen before.
      */
     public boolean record(String owningPackageName, String dexPath, int ownerUserId,
-            String loaderIsa, boolean isUsedByOtherApps, boolean primaryOrSplit) {
+            String loaderIsa, boolean isUsedByOtherApps, boolean primaryOrSplit,
+            String loadingPackageName, String classLoaderContext) {
         if (!PackageManagerServiceUtils.checkISA(loaderIsa)) {
             throw new IllegalArgumentException("loaderIsa " + loaderIsa + " is unsupported");
         }
+        if (classLoaderContext == null) {
+            throw new IllegalArgumentException("Null classLoaderContext");
+        }
+
         synchronized (mPackageUseInfoMap) {
             PackageUseInfo packageUseInfo = mPackageUseInfoMap.get(owningPackageName);
             if (packageUseInfo == null) {
@@ -99,12 +135,16 @@
                     // If we have a primary or a split apk, set isUsedByOtherApps.
                     // We do not need to record the loaderIsa or the owner because we compile
                     // primaries for all users and all ISAs.
-                    packageUseInfo.mIsUsedByOtherApps = isUsedByOtherApps;
+                    packageUseInfo.mergeCodePathUsedByOtherApps(dexPath, isUsedByOtherApps,
+                            owningPackageName, loadingPackageName);
                 } else {
                     // For secondary dex files record the loaderISA and the owner. We'll need
                     // to know under which user to compile and for what ISA.
-                    packageUseInfo.mDexUseInfoMap.put(
-                            dexPath, new DexUseInfo(isUsedByOtherApps, ownerUserId, loaderIsa));
+                    DexUseInfo newData = new DexUseInfo(isUsedByOtherApps, ownerUserId,
+                            classLoaderContext, loaderIsa);
+                    packageUseInfo.mDexUseInfoMap.put(dexPath, newData);
+                    maybeAddLoadingPackage(owningPackageName, loadingPackageName,
+                            newData.mLoadingPackages);
                 }
                 mPackageUseInfoMap.put(owningPackageName, packageUseInfo);
                 return true;
@@ -113,10 +153,14 @@
                 if (primaryOrSplit) {
                     // We have a possible update on the primary apk usage. Merge
                     // isUsedByOtherApps information and return if there was an update.
-                    return packageUseInfo.merge(isUsedByOtherApps);
+                    return packageUseInfo.mergeCodePathUsedByOtherApps(
+                            dexPath, isUsedByOtherApps, owningPackageName, loadingPackageName);
                 } else {
                     DexUseInfo newData = new DexUseInfo(
-                            isUsedByOtherApps, ownerUserId, loaderIsa);
+                            isUsedByOtherApps, ownerUserId, classLoaderContext, loaderIsa);
+                    boolean updateLoadingPackages = maybeAddLoadingPackage(owningPackageName,
+                            loadingPackageName, newData.mLoadingPackages);
+
                     DexUseInfo existingData = packageUseInfo.mDexUseInfoMap.get(dexPath);
                     if (existingData == null) {
                         // It's the first time we see this dex file.
@@ -138,7 +182,7 @@
                         }
                         // Merge the information into the existing data.
                         // Returns true if there was an update.
-                        return existingData.merge(newData);
+                        return existingData.merge(newData) || updateLoadingPackages;
                     }
                 }
             }
@@ -157,8 +201,12 @@
      * Convenience method for async writes which does not force the user to pass a useless
      * (Void) null.
      */
-    public void maybeWriteAsync() {
-      maybeWriteAsync((Void) null);
+    /*package*/ void maybeWriteAsync() {
+      maybeWriteAsync(null);
+    }
+
+    /*package*/ void writeNow() {
+        writeInternal(null);
     }
 
     @Override
@@ -185,16 +233,18 @@
      *
      * file_magic_version
      * package_name_1
+     * +code_path1
+     * @ loading_package_1_1, loading_package_1_2...
+     * +code_path2
+     * @ loading_package_2_1, loading_package_2_2...
      * #dex_file_path_1_1
      * user_1_1, used_by_other_app_1_1, user_isa_1_1_1, user_isa_1_1_2
+     * @ loading_package_1_1_1, loading_package_1_1_2...
+     * class_loader_context_1_1
      * #dex_file_path_1_2
      * user_1_2, used_by_other_app_1_2, user_isa_1_2_1, user_isa_1_2_2
-     * ...
-     * package_name_2
-     * #dex_file_path_2_1
-     * user_2_1, used_by_other_app_2_1, user_isa_2_1_1, user_isa_2_1_2
-     * #dex_file_path_2_2,
-     * user_2_2, used_by_other_app_2_2, user_isa_2_2_1, user_isa_2_2_2
+     * @ loading_package_1_2_1, loading_package_1_2_2...
+     * class_loader_context_1_2
      * ...
     */
     /* package */ void write(Writer out) {
@@ -211,9 +261,16 @@
             // Write the package line.
             String packageName = pEntry.getKey();
             PackageUseInfo packageUseInfo = pEntry.getValue();
+            fpw.println(packageName);
 
-            fpw.println(String.join(SPLIT_CHAR, packageName,
-                    writeBoolean(packageUseInfo.mIsUsedByOtherApps)));
+            // Write the code paths used by other apps.
+            for (Map.Entry<String, Set<String>> codeEntry :
+                    packageUseInfo.mCodePathsUsedByOtherApps.entrySet()) {
+                String codePath = codeEntry.getKey();
+                Set<String> loadingPackages = codeEntry.getValue();
+                fpw.println(CODE_PATH_LINE_CHAR + codePath);
+                fpw.println(LOADING_PACKAGE_CHAR + String.join(SPLIT_CHAR, loadingPackages));
+            }
 
             // Write dex file lines.
             for (Map.Entry<String, DexUseInfo> dEntry : packageUseInfo.mDexUseInfoMap.entrySet()) {
@@ -221,11 +278,14 @@
                 DexUseInfo dexUseInfo = dEntry.getValue();
                 fpw.println(DEX_LINE_CHAR + dexPath);
                 fpw.print(String.join(SPLIT_CHAR, Integer.toString(dexUseInfo.mOwnerUserId),
-                        writeBoolean(dexUseInfo.mIsUsedByOtherApps)));
+                    writeBoolean(dexUseInfo.mIsUsedByOtherApps)));
                 for (String isa : dexUseInfo.mLoaderIsas) {
                     fpw.print(SPLIT_CHAR + isa);
                 }
                 fpw.println();
+                fpw.println(LOADING_PACKAGE_CHAR
+                        + String.join(SPLIT_CHAR, dexUseInfo.mLoadingPackages));
+                fpw.println(dexUseInfo.getClassLoaderContext());
             }
         }
         fpw.flush();
@@ -252,6 +312,7 @@
         BufferedReader in = new BufferedReader(reader);
         // Read header, do version check.
         String versionLine = in.readLine();
+        int version;
         if (versionLine == null) {
             throw new IllegalStateException("No version line found.");
         } else {
@@ -259,48 +320,56 @@
                 // TODO(calin): the caller is responsible to clear the file.
                 throw new IllegalStateException("Invalid version line: " + versionLine);
             }
-            int version = Integer.parseInt(
+            version = Integer.parseInt(
                     versionLine.substring(PACKAGE_DEX_USAGE_VERSION_HEADER.length()));
-            if (version != PACKAGE_DEX_USAGE_VERSION) {
+            if (!isSupportedVersion(version)) {
                 throw new IllegalStateException("Unexpected version: " + version);
             }
         }
 
-        String s = null;
-        String currentPakage = null;
-        PackageUseInfo currentPakageData = null;
+        String line;
+        String currentPackage = null;
+        PackageUseInfo currentPackageData = null;
 
         Set<String> supportedIsas = new HashSet<>();
         for (String abi : Build.SUPPORTED_ABIS) {
             supportedIsas.add(VMRuntime.getInstructionSet(abi));
         }
-        while ((s = in.readLine()) != null) {
-            if (s.startsWith(DEX_LINE_CHAR)) {
+        while ((line = in.readLine()) != null) {
+            if (line.startsWith(DEX_LINE_CHAR)) {
                 // This is the start of the the dex lines.
-                // We expect two lines for each dex entry:
+                // We expect 4 lines for each dex entry:
                 // #dexPaths
+                // @loading_package_1,loading_package_2,...
+                // class_loader_context
                 // onwerUserId,isUsedByOtherApps,isa1,isa2
-                if (currentPakage == null) {
+                if (currentPackage == null) {
                     throw new IllegalStateException(
                         "Malformed PackageDexUsage file. Expected package line before dex line.");
                 }
 
-                // First line is the dex path.
-                String dexPath = s.substring(DEX_LINE_CHAR.length());
-                // Next line is the dex data.
-                s = in.readLine();
-                if (s == null) {
-                    throw new IllegalStateException("Could not fine dexUseInfo for line: " + s);
+                // Line 1 is the dex path.
+                String dexPath = line.substring(DEX_LINE_CHAR.length());
+
+                // Line 2 is the dex data: (userId, isUsedByOtherApps, isa).
+                line = in.readLine();
+                if (line == null) {
+                    throw new IllegalStateException("Could not find dexUseInfo line");
+                }
+                String[] elems = line.split(SPLIT_CHAR);
+                if (elems.length < 3) {
+                    throw new IllegalStateException("Invalid PackageDexUsage line: " + line);
                 }
 
-                // We expect at least 3 elements (isUsedByOtherApps, userId, isa).
-                String[] elems = s.split(SPLIT_CHAR);
-                if (elems.length < 3) {
-                    throw new IllegalStateException("Invalid PackageDexUsage line: " + s);
-                }
+                // In version 2 we added the loading packages and class loader context.
+                Set<String> loadingPackages = maybeReadLoadingPackages(in, version);
+                String classLoaderContext = maybeReadClassLoaderContext(in, version);
+
                 int ownerUserId = Integer.parseInt(elems[0]);
                 boolean isUsedByOtherApps = readBoolean(elems[1]);
-                DexUseInfo dexUseInfo = new DexUseInfo(isUsedByOtherApps, ownerUserId);
+                DexUseInfo dexUseInfo = new DexUseInfo(isUsedByOtherApps, ownerUserId,
+                        classLoaderContext, /*isa*/ null);
+                dexUseInfo.mLoadingPackages.addAll(loadingPackages);
                 for (int i = 2; i < elems.length; i++) {
                     String isa = elems[i];
                     if (supportedIsas.contains(isa)) {
@@ -317,18 +386,37 @@
                             "unsupported isas. dexPath=" + dexPath);
                     continue;
                 }
-                currentPakageData.mDexUseInfoMap.put(dexPath, dexUseInfo);
+                currentPackageData.mDexUseInfoMap.put(dexPath, dexUseInfo);
+            } else if (line.startsWith(CODE_PATH_LINE_CHAR)) {
+                // This is a code path used by other apps line.
+                if (version < PACKAGE_DEX_USAGE_SUPPORTED_VERSION_2) {
+                    throw new IllegalArgumentException("Unexpected code path line when parsing " +
+                            "PackageDexUseData: " + line);
+                }
+
+                // Expects 2 lines:
+                //    +code_paths
+                //    @loading_packages
+                String codePath = line.substring(CODE_PATH_LINE_CHAR.length());
+                Set<String> loadingPackages = maybeReadLoadingPackages(in, version);
+                currentPackageData.mCodePathsUsedByOtherApps.put(codePath, loadingPackages);
             } else {
                 // This is a package line.
-                // We expect it to be: `packageName,isUsedByOtherApps`.
-                String[] elems = s.split(SPLIT_CHAR);
-                if (elems.length != 2) {
-                    throw new IllegalStateException("Invalid PackageDexUsage line: " + s);
+                if (version >= PACKAGE_DEX_USAGE_SUPPORTED_VERSION_2) {
+                    currentPackage = line;
+                    currentPackageData = new PackageUseInfo();
+                } else {
+                    // Old version (<2)
+                    // We expect it to be: `packageName,isUsedByOtherApps`.
+                    String[] elems = line.split(SPLIT_CHAR);
+                    if (elems.length != 2) {
+                        throw new IllegalStateException("Invalid PackageDexUsage line: " + line);
+                    }
+                    currentPackage = elems[0];
+                    currentPackageData = new PackageUseInfo();
+                    currentPackageData.mUsedByOtherAppsBeforeUpgrade = readBoolean(elems[1]);
                 }
-                currentPakage = elems[0];
-                currentPakageData = new PackageUseInfo();
-                currentPakageData.mIsUsedByOtherApps = readBoolean(elems[1]);
-                data.put(currentPakage, currentPakageData);
+                data.put(currentPackage, currentPackageData);
             }
         }
 
@@ -339,9 +427,67 @@
     }
 
     /**
+     * Reads the class loader context encoding from the buffer {@code in} if
+     * {@code version} is at least {PACKAGE_DEX_USAGE_VERSION}.
+     */
+    private String maybeReadClassLoaderContext(BufferedReader in, int version) throws IOException {
+        String context = null;
+        if (version >= PACKAGE_DEX_USAGE_SUPPORTED_VERSION_2) {
+            context = in.readLine();
+            if (context == null) {
+                throw new IllegalStateException("Could not find the classLoaderContext line.");
+            }
+        }
+        // The context might be empty if we didn't have the chance to update it after a version
+        // upgrade. In this case return the special marker so that we recognize this is an unknown
+        // context.
+        return context == null ? UNKNOWN_CLASS_LOADER_CONTEXT : context;
+    }
+
+    /**
+     * Reads the list of loading packages from the buffer {@code in} if
+     * {@code version} is at least {PACKAGE_DEX_USAGE_SUPPORTED_VERSION_2}.
+     */
+    private Set<String> maybeReadLoadingPackages(BufferedReader in, int version)
+            throws IOException {
+        if (version >= PACKAGE_DEX_USAGE_SUPPORTED_VERSION_2) {
+            String line = in.readLine();
+            if (line == null) {
+                throw new IllegalStateException("Could not find the loadingPackages line.");
+            }
+            // We expect that most of the times the list of loading packages will be empty.
+            if (line.length() == LOADING_PACKAGE_CHAR.length()) {
+                return Collections.emptySet();
+            } else {
+                Set<String> result = new HashSet<>();
+                Collections.addAll(result,
+                        line.substring(LOADING_PACKAGE_CHAR.length()).split(SPLIT_CHAR));
+                return result;
+            }
+        } else {
+            return Collections.emptySet();
+        }
+    }
+
+    /**
+     * Utility method which adds {@param loadingPackage} to {@param loadingPackages} only if it's
+     * not equal to {@param owningPackage}
+     */
+    private boolean maybeAddLoadingPackage(String owningPackage, String loadingPackage,
+            Set<String> loadingPackages) {
+        return !owningPackage.equals(loadingPackage) && loadingPackages.add(loadingPackage);
+    }
+
+    private boolean isSupportedVersion(int version) {
+        return version == PACKAGE_DEX_USAGE_SUPPORTED_VERSION_1
+                || version == PACKAGE_DEX_USAGE_SUPPORTED_VERSION_2;
+    }
+
+    /**
      * Syncs the existing data with the set of available packages by removing obsolete entries.
      */
-    public void syncData(Map<String, Set<Integer>> packageToUsersMap) {
+    /*package*/ void syncData(Map<String, Set<Integer>> packageToUsersMap,
+            Map<String, Set<String>> packageToCodePaths) {
         synchronized (mPackageUseInfoMap) {
             Iterator<Map.Entry<String, PackageUseInfo>> pIt =
                     mPackageUseInfoMap.entrySet().iterator();
@@ -365,8 +511,26 @@
                             dIt.remove();
                         }
                     }
-                    if (!packageUseInfo.mIsUsedByOtherApps
-                            && packageUseInfo.mDexUseInfoMap.isEmpty()) {
+
+                    // Sync the code paths.
+                    Set<String> codePaths = packageToCodePaths.get(packageName);
+                    Iterator<Map.Entry<String, Set<String>>> codeIt =
+                        packageUseInfo.mCodePathsUsedByOtherApps.entrySet().iterator();
+                    while (codeIt.hasNext()) {
+                        if (!codePaths.contains(codeIt.next().getKey())) {
+                            codeIt.remove();
+                        }
+                    }
+
+                    // In case the package was marked as used by other apps in a previous version
+                    // propagate the flag to all the code paths.
+                    // See mUsedByOtherAppsBeforeUpgrade docs on why it is important to do it.
+                    if (packageUseInfo.mUsedByOtherAppsBeforeUpgrade) {
+                        for (String codePath : codePaths) {
+                            packageUseInfo.mergeCodePathUsedByOtherApps(codePath, true, null, null);
+                        }
+                    } else if (!packageUseInfo.isAnyCodePathUsedByOtherApps()
+                        && packageUseInfo.mDexUseInfoMap.isEmpty()) {
                         // The package is not used by other apps and we removed all its dex files
                         // records. Remove the entire package record as well.
                         pIt.remove();
@@ -380,14 +544,13 @@
      * Clears the {@code usesByOtherApps} marker for the package {@code packageName}.
      * @return true if the package usage info was updated.
      */
-    public boolean clearUsedByOtherApps(String packageName) {
+    /*package*/ boolean clearUsedByOtherApps(String packageName) {
         synchronized (mPackageUseInfoMap) {
             PackageUseInfo packageUseInfo = mPackageUseInfoMap.get(packageName);
-            if (packageUseInfo == null || !packageUseInfo.mIsUsedByOtherApps) {
+            if (packageUseInfo == null) {
                 return false;
             }
-            packageUseInfo.mIsUsedByOtherApps = false;
-            return true;
+            return packageUseInfo.clearCodePathUsedByOtherApps();
         }
     }
 
@@ -408,7 +571,7 @@
      * @return true if the record was found and actually deleted,
      *         false if the record doesn't exist
      */
-    public boolean removeUserPackage(String packageName, int userId) {
+    /*package*/ boolean removeUserPackage(String packageName, int userId) {
         synchronized (mPackageUseInfoMap) {
             PackageUseInfo packageUseInfo = mPackageUseInfoMap.get(packageName);
             if (packageUseInfo == null) {
@@ -426,7 +589,8 @@
             }
             // If no secondary dex info is left and the package is not used by other apps
             // remove the data since it is now useless.
-            if (packageUseInfo.mDexUseInfoMap.isEmpty() && !packageUseInfo.mIsUsedByOtherApps) {
+            if (packageUseInfo.mDexUseInfoMap.isEmpty()
+                    && !packageUseInfo.isAnyCodePathUsedByOtherApps()) {
                 mPackageUseInfoMap.remove(packageName);
                 updated = true;
             }
@@ -440,7 +604,7 @@
      * @return true if the record was found and actually deleted,
      *         false if the record doesn't exist
      */
-    public boolean removeDexFile(String packageName, String dexFile, int userId) {
+    /*package*/ boolean removeDexFile(String packageName, String dexFile, int userId) {
         synchronized (mPackageUseInfoMap) {
             PackageUseInfo packageUseInfo = mPackageUseInfoMap.get(packageName);
             if (packageUseInfo == null) {
@@ -462,7 +626,7 @@
         return false;
     }
 
-    public PackageUseInfo getPackageUseInfo(String packageName) {
+    /*package*/ PackageUseInfo getPackageUseInfo(String packageName) {
         synchronized (mPackageUseInfoMap) {
             PackageUseInfo useInfo = mPackageUseInfoMap.get(packageName);
             // The useInfo contains a map for secondary dex files which could be modified
@@ -477,7 +641,7 @@
     /**
      * Return all packages that contain records of secondary dex files.
      */
-    public Set<String> getAllPackagesWithSecondaryDexFiles() {
+    /*package*/ Set<String> getAllPackagesWithSecondaryDexFiles() {
         Set<String> packages = new HashSet<>();
         synchronized (mPackageUseInfoMap) {
             for (Map.Entry<String, PackageUseInfo> entry : mPackageUseInfoMap.entrySet()) {
@@ -515,15 +679,6 @@
         throw new IllegalArgumentException("Unknown bool encoding: " + bool);
     }
 
-    private boolean contains(int[] array, int elem) {
-        for (int i = 0; i < array.length; i++) {
-            if (elem == array[i]) {
-                return true;
-            }
-        }
-        return false;
-    }
-
     public String dump() {
         StringWriter sw = new StringWriter();
         write(sw);
@@ -534,39 +689,95 @@
      * Stores data on how a package and its dex files are used.
      */
     public static class PackageUseInfo {
-        // This flag is for the primary and split apks. It is set to true whenever one of them
-        // is loaded by another app.
-        private boolean mIsUsedByOtherApps;
+        // The app's code paths that are used by other apps.
+        // The key is the code path and the value is the set of loading packages.
+        private final Map<String, Set<String>> mCodePathsUsedByOtherApps;
         // Map dex paths to their data (isUsedByOtherApps, owner id, loader isa).
         private final Map<String, DexUseInfo> mDexUseInfoMap;
 
+        // Keeps track of whether or not this package was used by other apps before
+        // we upgraded to VERSION 4 which records the info for each code path separately.
+        // This is unwanted complexity but without it we risk to profile guide compile
+        // something that supposed to be shared. For example:
+        //   1) we determine that chrome is used by another app
+        //   2) we take an OTA which upgrades the way we keep track of usage data
+        //   3) chrome doesn't get used until the background job executes
+        //   4) as part of the backgound job we now think that chrome is not used by others
+        //      and we speed-profile.
+        //   5) as a result the next time someone uses chrome it will extract from apk since
+        //      the compiled code will be private.
+        private boolean mUsedByOtherAppsBeforeUpgrade;
+
         public PackageUseInfo() {
-            mIsUsedByOtherApps = false;
+            mCodePathsUsedByOtherApps = new HashMap<>();
             mDexUseInfoMap = new HashMap<>();
         }
 
         // Creates a deep copy of the `other`.
         public PackageUseInfo(PackageUseInfo other) {
-            mIsUsedByOtherApps = other.mIsUsedByOtherApps;
+            mCodePathsUsedByOtherApps = new HashMap<>();
+            for (Map.Entry<String, Set<String>> e : other.mCodePathsUsedByOtherApps.entrySet()) {
+                mCodePathsUsedByOtherApps.put(e.getKey(), new HashSet<>(e.getValue()));
+            }
+
             mDexUseInfoMap = new HashMap<>();
             for (Map.Entry<String, DexUseInfo> e : other.mDexUseInfoMap.entrySet()) {
                 mDexUseInfoMap.put(e.getKey(), new DexUseInfo(e.getValue()));
             }
         }
 
-        private boolean merge(boolean isUsedByOtherApps) {
-            boolean oldIsUsedByOtherApps = mIsUsedByOtherApps;
-            mIsUsedByOtherApps = mIsUsedByOtherApps || isUsedByOtherApps;
-            return oldIsUsedByOtherApps != this.mIsUsedByOtherApps;
+        private boolean mergeCodePathUsedByOtherApps(String codePath, boolean isUsedByOtherApps,
+                String owningPackageName, String loadingPackage) {
+            if (!isUsedByOtherApps) {
+                // Nothing to update if the the code path is not used by other apps.
+                return false;
+            }
+
+            boolean newCodePath = false;
+            Set<String> loadingPackages = mCodePathsUsedByOtherApps.get(codePath);
+            if (loadingPackages == null) {
+                loadingPackages = new HashSet<>();
+                mCodePathsUsedByOtherApps.put(codePath, loadingPackages);
+                newCodePath = true;
+            }
+            boolean newLoadingPackage = loadingPackage != null
+                    && !loadingPackage.equals(owningPackageName)
+                    && loadingPackages.add(loadingPackage);
+            return newCodePath || newLoadingPackage;
         }
 
-        public boolean isUsedByOtherApps() {
-            return mIsUsedByOtherApps;
+        public boolean isUsedByOtherApps(String codePath) {
+            return mCodePathsUsedByOtherApps.containsKey(codePath);
         }
 
         public Map<String, DexUseInfo> getDexUseInfoMap() {
             return mDexUseInfoMap;
         }
+
+        public Set<String> getLoadingPackages(String codePath) {
+            return mCodePathsUsedByOtherApps.getOrDefault(codePath, null);
+        }
+
+        public boolean isAnyCodePathUsedByOtherApps() {
+            return !mCodePathsUsedByOtherApps.isEmpty();
+        }
+
+        /**
+         * Clears the usedByOtherApps markers from all code paths.
+         * Returns whether or not there was an update.
+         */
+        /*package*/ boolean clearCodePathUsedByOtherApps() {
+            // Update mUsedByOtherAppsBeforeUpgrade as well to be consistent with
+            // the new data. This is not saved to disk so we don't need to return it.
+            mUsedByOtherAppsBeforeUpgrade = true;
+
+            if (mCodePathsUsedByOtherApps.isEmpty()) {
+                return false;
+            } else {
+                mCodePathsUsedByOtherApps.clear();
+                return true;
+            }
+        }
     }
 
     /**
@@ -575,33 +786,59 @@
     public static class DexUseInfo {
         private boolean mIsUsedByOtherApps;
         private final int mOwnerUserId;
+        // The class loader context for the dex file. This encodes the class loader chain
+        // (class loader type + class path) in a format compatible to dex2oat.
+        // See {@code DexoptUtils.processContextForDexLoad}.
+        private String mClassLoaderContext;
+        // The instructions sets of the applications loading the dex file.
         private final Set<String> mLoaderIsas;
+        // Packages who load this dex file.
+        private final Set<String> mLoadingPackages;
 
-        public DexUseInfo(boolean isUsedByOtherApps, int ownerUserId) {
-            this(isUsedByOtherApps, ownerUserId, null);
-        }
-
-        public DexUseInfo(boolean isUsedByOtherApps, int ownerUserId, String loaderIsa) {
+        public DexUseInfo(boolean isUsedByOtherApps, int ownerUserId, String classLoaderContext,
+                String loaderIsa) {
             mIsUsedByOtherApps = isUsedByOtherApps;
             mOwnerUserId = ownerUserId;
+            mClassLoaderContext = classLoaderContext;
             mLoaderIsas = new HashSet<>();
             if (loaderIsa != null) {
                 mLoaderIsas.add(loaderIsa);
             }
+            mLoadingPackages = new HashSet<>();
         }
 
         // Creates a deep copy of the `other`.
         public DexUseInfo(DexUseInfo other) {
             mIsUsedByOtherApps = other.mIsUsedByOtherApps;
             mOwnerUserId = other.mOwnerUserId;
+            mClassLoaderContext = other.mClassLoaderContext;
             mLoaderIsas = new HashSet<>(other.mLoaderIsas);
+            mLoadingPackages = new HashSet<>(other.mLoadingPackages);
         }
 
         private boolean merge(DexUseInfo dexUseInfo) {
             boolean oldIsUsedByOtherApps = mIsUsedByOtherApps;
             mIsUsedByOtherApps = mIsUsedByOtherApps || dexUseInfo.mIsUsedByOtherApps;
             boolean updateIsas = mLoaderIsas.addAll(dexUseInfo.mLoaderIsas);
-            return updateIsas || (oldIsUsedByOtherApps != mIsUsedByOtherApps);
+            boolean updateLoadingPackages = mLoadingPackages.addAll(dexUseInfo.mLoadingPackages);
+
+            String oldClassLoaderContext = mClassLoaderContext;
+            if (UNKNOWN_CLASS_LOADER_CONTEXT.equals(mClassLoaderContext)) {
+                // Can happen if we read a previous version.
+                mClassLoaderContext = dexUseInfo.mClassLoaderContext;
+            } else if (UNSUPPORTED_CLASS_LOADER_CONTEXT.equals(dexUseInfo.mClassLoaderContext)) {
+                // We detected an unsupported context.
+                mClassLoaderContext = UNSUPPORTED_CLASS_LOADER_CONTEXT;
+            } else if (!UNSUPPORTED_CLASS_LOADER_CONTEXT.equals(mClassLoaderContext) &&
+                    !Objects.equal(mClassLoaderContext, dexUseInfo.mClassLoaderContext)) {
+                // We detected a context change.
+                mClassLoaderContext = VARIABLE_CLASS_LOADER_CONTEXT;
+            }
+
+            return updateIsas ||
+                    (oldIsUsedByOtherApps != mIsUsedByOtherApps) ||
+                    updateLoadingPackages
+                    || !Objects.equal(oldClassLoaderContext, mClassLoaderContext);
         }
 
         public boolean isUsedByOtherApps() {
@@ -615,5 +852,25 @@
         public Set<String> getLoaderIsas() {
             return mLoaderIsas;
         }
+
+        public Set<String> getLoadingPackages() {
+            return mLoadingPackages;
+        }
+
+        public String getClassLoaderContext() { return mClassLoaderContext; }
+
+        public boolean isUnsupportedClassLoaderContext() {
+            return UNSUPPORTED_CLASS_LOADER_CONTEXT.equals(mClassLoaderContext);
+        }
+
+        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);
+        }
+
+        public boolean isVariableClassLoaderContext() {
+            return VARIABLE_CLASS_LOADER_CONTEXT.equals(mClassLoaderContext);
+        }
     }
 }
diff --git a/services/core/java/com/android/server/policy/AccessibilityShortcutController.java b/services/core/java/com/android/server/policy/AccessibilityShortcutController.java
index 0b54e5e..55c582e 100644
--- a/services/core/java/com/android/server/policy/AccessibilityShortcutController.java
+++ b/services/core/java/com/android/server/policy/AccessibilityShortcutController.java
@@ -18,11 +18,13 @@
 
 import android.accessibilityservice.AccessibilityServiceInfo;
 import android.app.ActivityManager;
+import android.app.ActivityThread;
 import android.app.AlertDialog;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.pm.PackageManager;
 import android.database.ContentObserver;
 import android.media.AudioAttributes;
 import android.media.Ringtone;
@@ -137,13 +139,18 @@
         final int userId = ActivityManager.getCurrentUser();
         final int dialogAlreadyShown = Settings.Secure.getIntForUser(
                 cr, Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0, userId);
+        // Use USAGE_ASSISTANCE_ACCESSIBILITY for TVs to ensure that TVs play the ringtone as they
+        // have less ways of providing feedback like vibration.
+        final int audioAttributesUsage = hasFeatureLeanback()
+                ? AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY
+                : AudioAttributes.USAGE_NOTIFICATION_EVENT;
 
         // Play a notification tone
         final Ringtone tone =
                 RingtoneManager.getRingtone(mContext, Settings.System.DEFAULT_NOTIFICATION_URI);
         if (tone != null) {
             tone.setAudioAttributes(new AudioAttributes.Builder()
-                .setUsage(AudioAttributes.USAGE_NOTIFICATION_EVENT)
+                .setUsage(audioAttributesUsage)
                 .build());
             tone.play();
         }
@@ -212,7 +219,9 @@
         final String warningMessage = String.format(
                 mContext.getString(R.string.accessibility_shortcut_toogle_warning),
                 serviceInfo.getResolveInfo().loadLabel(mContext.getPackageManager()).toString());
-        final AlertDialog alertDialog = mFrameworkObjectProvider.getAlertDialogBuilder(mContext)
+        final AlertDialog alertDialog = mFrameworkObjectProvider.getAlertDialogBuilder(
+                // Use SystemUI context so we pick up any theme set in a vendor overlay
+                ActivityThread.currentActivityThread().getSystemUiContext())
                 .setTitle(R.string.accessibility_shortcut_warning_dialog_title)
                 .setMessage(warningMessage)
                 .setCancelable(false)
@@ -251,6 +260,10 @@
                 AccessibilityServiceInfo.FEEDBACK_ALL_MASK).contains(serviceInfo);
     }
 
+    private boolean hasFeatureLeanback() {
+        return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK);
+    }
+
     // Class to allow mocking of static framework calls
     public static class FrameworkObjectProvider {
         public AccessibilityManager getAccessibilityManagerInstance(Context context) {
diff --git a/services/core/java/com/android/server/policy/LegacyGlobalActions.java b/services/core/java/com/android/server/policy/LegacyGlobalActions.java
index 14fabc5..8eb6d06 100644
--- a/services/core/java/com/android/server/policy/LegacyGlobalActions.java
+++ b/services/core/java/com/android/server/policy/LegacyGlobalActions.java
@@ -202,11 +202,14 @@
                 && !(mAdapter.getItem(0) instanceof LongPressAction)) {
             ((SinglePressAction) mAdapter.getItem(0)).onPress();
         } else {
-            WindowManager.LayoutParams attrs = mDialog.getWindow().getAttributes();
-            attrs.setTitle("LegacyGlobalActions");
-            mDialog.getWindow().setAttributes(attrs);
-            mDialog.show();
-            mDialog.getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_DISABLE_EXPAND);
+            if (mDialog != null) {
+                WindowManager.LayoutParams attrs = mDialog.getWindow().getAttributes();
+                attrs.setTitle("LegacyGlobalActions");
+                mDialog.getWindow().setAttributes(attrs);
+                mDialog.show();
+                mDialog.getWindow().getDecorView().setSystemUiVisibility(
+                        View.STATUS_BAR_DISABLE_EXPAND);
+            }
         }
     }
 
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 79b5e4a..d3469c2 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -26,8 +26,8 @@
 import static android.content.Context.CONTEXT_RESTRICTED;
 import static android.content.Context.DISPLAY_SERVICE;
 import static android.content.Context.WINDOW_SERVICE;
-import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE;
 import static android.content.pm.PackageManager.FEATURE_LEANBACK;
+import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE;
 import static android.content.pm.PackageManager.FEATURE_WATCH;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 import static android.content.res.Configuration.EMPTY;
@@ -35,6 +35,8 @@
 import static android.content.res.Configuration.UI_MODE_TYPE_MASK;
 import static android.os.Build.VERSION_CODES.M;
 import static android.os.Build.VERSION_CODES.O;
+import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.Display.STATE_OFF;
 import static android.view.WindowManager.DOCKED_LEFT;
 import static android.view.WindowManager.DOCKED_RIGHT;
 import static android.view.WindowManager.DOCKED_TOP;
@@ -57,6 +59,7 @@
 import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
 import static android.view.WindowManager.LayoutParams.LAST_SYSTEM_WINDOW;
 import static android.view.WindowManager.LayoutParams.MATCH_PARENT;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_ACQUIRES_SLEEP_TOKEN;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_DRAW_STATUS_BAR_BACKGROUND;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
@@ -70,8 +73,8 @@
 import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
 import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST;
 import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
 import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS;
 import static android.view.WindowManager.LayoutParams.TYPE_DISPLAY_OVERLAY;
 import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
@@ -120,6 +123,7 @@
 import android.app.ActivityManager.StackId;
 import android.app.ActivityManagerInternal;
 import android.app.ActivityManagerInternal.SleepToken;
+import android.app.ActivityThread;
 import android.app.AppOpsManager;
 import android.app.IUiModeManager;
 import android.app.ProgressDialog;
@@ -177,8 +181,8 @@
 import android.os.SystemProperties;
 import android.os.UEventObserver;
 import android.os.UserHandle;
-import android.os.Vibrator;
 import android.os.VibrationEffect;
+import android.os.Vibrator;
 import android.provider.MediaStore;
 import android.provider.Settings;
 import android.service.dreams.DreamManagerInternal;
@@ -226,6 +230,7 @@
 import android.view.inputmethod.InputMethodManagerInternal;
 
 import com.android.internal.R;
+import com.android.internal.annotations.GuardedBy;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.policy.IKeyguardDismissCallback;
 import com.android.internal.policy.IShortcutService;
@@ -240,8 +245,8 @@
 import com.android.server.policy.keyguard.KeyguardServiceDelegate.DrawnListener;
 import com.android.server.policy.keyguard.KeyguardStateMonitor.StateCallback;
 import com.android.server.statusbar.StatusBarManagerInternal;
-import com.android.server.wm.AppTransition;
 import com.android.server.vr.VrManagerInternal;
+import com.android.server.wm.AppTransition;
 
 import java.io.File;
 import java.io.FileReader;
@@ -330,6 +335,7 @@
     static public final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
     static public final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
     static public final String SYSTEM_DIALOG_REASON_ASSIST = "assist";
+    static public final String SYSTEM_DIALOG_REASON_SCREENSHOT = "screenshot";
 
     /**
      * These are the system UI flags that, when changing, can cause the layout
@@ -676,6 +682,12 @@
     private boolean mLastShowingDream;
     boolean mDreamingLockscreen;
     boolean mDreamingSleepTokenNeeded;
+    private boolean mWindowSleepTokenNeeded;
+    private boolean mLastWindowSleepTokenNeeded;
+
+    @GuardedBy("mHandler")
+    private SleepToken mWindowSleepToken;
+
     SleepToken mDreamingSleepToken;
     SleepToken mScreenOffSleepToken;
     volatile boolean mKeyguardOccluded;
@@ -818,6 +830,7 @@
     private static final int MSG_ACCESSIBILITY_TV = 23;
     private static final int MSG_DISPATCH_BACK_KEY_TO_AUTOFILL = 24;
     private static final int MSG_SYSTEM_KEY_PRESS = 25;
+    private static final int MSG_HANDLE_ALL_APPS = 26;
 
     private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0;
     private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1;
@@ -910,6 +923,9 @@
                 case MSG_SYSTEM_KEY_PRESS:
                     sendSystemKeyToStatusBar(msg.arg1);
                     break;
+                case MSG_HANDLE_ALL_APPS:
+                    launchAllAppsAction();
+                    break;
             }
         }
     }
@@ -1036,6 +1052,22 @@
         }
     };
 
+    private final Runnable mAcquireSleepTokenRunnable = () -> {
+        if (mWindowSleepToken != null) {
+            return;
+        }
+        mWindowSleepToken = mActivityManagerInternal.acquireSleepToken("WindowSleepToken",
+                DEFAULT_DISPLAY);
+    };
+
+    private final Runnable mReleaseSleepTokenRunnable = () -> {
+        if (mWindowSleepToken == null) {
+            return;
+        }
+        mWindowSleepToken.release();
+        mWindowSleepToken = null;
+    };
+
     private ImmersiveModeConfirmation mImmersiveModeConfirmation;
 
     private SystemGesturesPointerEventListener mSystemGestures;
@@ -1120,14 +1152,12 @@
                 + ", mOrientationSensorEnabled=" + mOrientationSensorEnabled
                 + ", mKeyguardDrawComplete=" + mKeyguardDrawComplete
                 + ", mWindowManagerDrawComplete=" + mWindowManagerDrawComplete);
-        final boolean keyguardGoingAway = mWindowManagerInternal.isKeyguardGoingAway();
 
         boolean disable = true;
         // Note: We postpone the rotating of the screen until the keyguard as well as the
         // window manager have reported a draw complete or the keyguard is going away in dismiss
         // mode.
-        if (mScreenOnEarly && mAwake && ((mKeyguardDrawComplete && mWindowManagerDrawComplete)
-                || keyguardGoingAway)) {
+        if (mScreenOnEarly && mAwake && ((mKeyguardDrawComplete && mWindowManagerDrawComplete))) {
             if (needSensorRunningLp()) {
                 disable = false;
                 //enable listener if not already enabled
@@ -1138,7 +1168,7 @@
                     // the sensor reading was cleared which can cause it to relaunch the app that
                     // will show in the wrong orientation first before correcting leading to app
                     // launch delays.
-                    mOrientationListener.enable(!keyguardGoingAway /* clearCurrentRotation */);
+                    mOrientationListener.enable(true /* clearCurrentRotation */);
                     if(localLOGV) Slog.v(TAG, "Enabling listeners");
                     mOrientationSensorEnabled = true;
                 }
@@ -1774,6 +1804,17 @@
 
     private void launchAllAppsAction() {
         Intent intent = new Intent(Intent.ACTION_ALL_APPS);
+        if (mHasFeatureLeanback) {
+            final PackageManager pm = mContext.getPackageManager();
+            Intent intentLauncher = new Intent(Intent.ACTION_MAIN);
+            intentLauncher.addCategory(Intent.CATEGORY_HOME);
+            ResolveInfo resolveInfo = pm.resolveActivityAsUser(intentLauncher,
+                    PackageManager.MATCH_SYSTEM_ONLY,
+                    mCurrentUserId);
+            if (resolveInfo != null) {
+                intent.setPackage(resolveInfo.activityInfo.packageName);
+            }
+        }
         startActivityAsUser(intent, UserHandle.CURRENT);
     }
 
@@ -2153,7 +2194,7 @@
         // This method might be called before the policy has been fully initialized
         // or for other displays we don't care about.
         // TODO(multi-display): Define policy for secondary displays.
-        if (mContext == null || display.getDisplayId() != Display.DEFAULT_DISPLAY) {
+        if (mContext == null || display.getDisplayId() != DEFAULT_DISPLAY) {
             return;
         }
         mDisplay = display;
@@ -2249,7 +2290,7 @@
     @Override
     public void setDisplayOverscan(Display display, int left, int top, int right, int bottom) {
         // TODO(multi-display): Define policy for secondary displays.
-        if (display.getDisplayId() == Display.DEFAULT_DISPLAY) {
+        if (display.getDisplayId() == DEFAULT_DISPLAY) {
             mOverscanLeft = left;
             mOverscanTop = top;
             mOverscanRight = right;
@@ -2585,18 +2626,15 @@
             attrs.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
         }
 
-        if (ActivityManager.isHighEndGfx()) {
-            if ((attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0) {
-                attrs.subtreeSystemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
-            }
-            final boolean forceWindowDrawsStatusBarBackground =
-                    (attrs.privateFlags & PRIVATE_FLAG_FORCE_DRAW_STATUS_BAR_BACKGROUND)
-                            != 0;
-            if ((attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0
-                    || forceWindowDrawsStatusBarBackground
-                            && attrs.height == MATCH_PARENT && attrs.width == MATCH_PARENT) {
-                attrs.subtreeSystemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
-            }
+        if ((attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0) {
+            attrs.subtreeSystemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
+        }
+        final boolean forceWindowDrawsStatusBarBackground =
+                (attrs.privateFlags & PRIVATE_FLAG_FORCE_DRAW_STATUS_BAR_BACKGROUND) != 0;
+        if ((attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0
+                || forceWindowDrawsStatusBarBackground
+                        && attrs.height == MATCH_PARENT && attrs.width == MATCH_PARENT) {
+            attrs.subtreeSystemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
         }
     }
 
@@ -2647,7 +2685,8 @@
     @Override
     public void onConfigurationChanged() {
         // TODO(multi-display): Define policy for secondary displays.
-        final Resources res = mContext.getResources();
+        Context uiContext = ActivityThread.currentActivityThread().getSystemUiContext();
+        final Resources res = uiContext.getResources();
 
         mStatusBarHeight =
                 res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height);
@@ -2704,7 +2743,7 @@
     public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode,
             int displayId) {
         // TODO(multi-display): Support navigation bar on secondary displays.
-        if (displayId == Display.DEFAULT_DISPLAY && mHasNavigationBar) {
+        if (displayId == DEFAULT_DISPLAY && mHasNavigationBar) {
             // For a basic navigation bar, when we are in landscape mode we place
             // the navigation bar to the side.
             if (mNavigationBarCanMove && fullWidth > fullHeight) {
@@ -2726,7 +2765,7 @@
     public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode,
             int displayId) {
         // TODO(multi-display): Support navigation bar on secondary displays.
-        if (displayId == Display.DEFAULT_DISPLAY && mHasNavigationBar) {
+        if (displayId == DEFAULT_DISPLAY && mHasNavigationBar) {
             // For a basic navigation bar, when we are in portrait mode we place
             // the navigation bar to the bottom.
             if (!mNavigationBarCanMove || fullWidth < fullHeight) {
@@ -2750,7 +2789,7 @@
         // we do want to exclude it since applications can't generally use that part
         // of the screen.
         // TODO(multi-display): Support status bars on secondary displays.
-        if (displayId == Display.DEFAULT_DISPLAY) {
+        if (displayId == DEFAULT_DISPLAY) {
             return getNonDecorDisplayHeight(fullWidth, fullHeight, rotation, uiMode, displayId)
                     - mStatusBarHeight;
         }
@@ -2802,7 +2841,7 @@
         boolean keyguardLocked = isKeyguardLocked();
         boolean hideDockDivider = attrs.type == TYPE_DOCK_DIVIDER
                 && !mWindowManagerInternal.isStackVisible(DOCKED_STACK_ID);
-        return (keyguardLocked && !allowWhenLocked && win.getDisplayId() == Display.DEFAULT_DISPLAY)
+        return (keyguardLocked && !allowWhenLocked && win.getDisplayId() == DEFAULT_DISPLAY)
                 || hideDockDivider;
     }
 
@@ -2972,7 +3011,7 @@
 
     /** Obtain proper context for showing splash screen on the provided display. */
     private Context getDisplayContext(Context context, int displayId) {
-        if (displayId == Display.DEFAULT_DISPLAY) {
+        if (displayId == DEFAULT_DISPLAY) {
             // The default context fits.
             return context;
         }
@@ -3375,11 +3414,6 @@
             if (!down) {
                 cancelPreloadRecentApps();
 
-                if (mHasFeatureLeanback) {
-                    // Clear flags
-                    mAccessibilityTvKey2Pressed = down;
-                }
-
                 mHomePressed = false;
                 if (mHomeConsumed) {
                     mHomeConsumed = false;
@@ -3434,13 +3468,6 @@
                     preloadRecentApps();
                 }
             } else if ((event.getFlags() & KeyEvent.FLAG_LONG_PRESS) != 0) {
-                if (mHasFeatureLeanback) {
-                    mAccessibilityTvKey2Pressed = down;
-                    if (interceptAccessibilityGestureTv()) {
-                        return -1;
-                    }
-                }
-
                 if (!keyguardOn) {
                     handleLongPressOnHome(event.getDeviceId());
                 }
@@ -3607,11 +3634,16 @@
             return 0;
         } else if (mHasFeatureLeanback && interceptBugreportGestureTv(keyCode, down)) {
             return -1;
-        } else if (mHasFeatureLeanback && keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
-            mAccessibilityTvKey1Pressed = down;
-            if (interceptAccessibilityGestureTv()) {
-                return -1;
+        } else if (mHasFeatureLeanback && interceptAccessibilityGestureTv(keyCode, down)) {
+            return -1;
+        } else if (keyCode == KeyEvent.KEYCODE_ALL_APPS) {
+            if (!down) {
+                mHandler.removeMessages(MSG_HANDLE_ALL_APPS);
+                Message msg = mHandler.obtainMessage(MSG_HANDLE_ALL_APPS);
+                msg.setAsynchronous(true);
+                msg.sendToTarget();
             }
+            return -1;
         }
 
         // Toggle Caps Lock on META-ALT.
@@ -3832,20 +3864,28 @@
 
     /**
      * TV only: recognizes a remote control gesture as Accessibility shortcut.
-     * Shortcut: Long press (HOME + DPAD_CENTER)
+     * Shortcut: Long press (BACK + DPAD_DOWN)
      */
-    private boolean interceptAccessibilityGestureTv() {
+    private boolean interceptAccessibilityGestureTv(int keyCode, boolean down) {
+        if (keyCode == KeyEvent.KEYCODE_BACK) {
+            mAccessibilityTvKey1Pressed = down;
+        } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
+            mAccessibilityTvKey2Pressed = down;
+        }
+
         if (mAccessibilityTvKey1Pressed && mAccessibilityTvKey2Pressed) {
             if (!mAccessibilityTvScheduled) {
                 mAccessibilityTvScheduled = true;
                 Message msg = Message.obtain(mHandler, MSG_ACCESSIBILITY_TV);
                 msg.setAsynchronous(true);
-                mHandler.sendMessage(msg);
+                mHandler.sendMessageDelayed(msg,
+                        ViewConfiguration.get(mContext).getAccessibilityShortcutKeyTimeout());
             }
         } else if (mAccessibilityTvScheduled) {
             mHandler.removeMessages(MSG_ACCESSIBILITY_TV);
             mAccessibilityTvScheduled = false;
         }
+
         return mAccessibilityTvScheduled;
     }
 
@@ -5370,6 +5410,7 @@
 
         mAllowLockscreenWhenOn = false;
         mShowingDream = false;
+        mWindowSleepTokenNeeded = false;
     }
 
     /** {@inheritDoc} */
@@ -5467,6 +5508,12 @@
                 && stackId == DOCKED_STACK_ID) {
             mTopDockedOpaqueOrDimmingWindowState = win;
         }
+
+        // Take note if a window wants to acquire a sleep token.
+        if (win.isVisibleLw() && (attrs.privateFlags & PRIVATE_FLAG_ACQUIRES_SLEEP_TOKEN) != 0
+                && win.canAcquireSleepToken()) {
+            mWindowSleepTokenNeeded = true;
+        }
     }
 
     private void applyKeyguardPolicyLw(WindowState win, WindowState imeTarget) {
@@ -5522,6 +5569,7 @@
             WindowManager.LayoutParams statusBarAttrs = mStatusBar.getAttrs();
             boolean statusBarExpanded = statusBarAttrs.height == MATCH_PARENT
                     && statusBarAttrs.width == MATCH_PARENT;
+            boolean topAppHidesStatusBar = topAppHidesStatusBar();
             if (mForceStatusBar || mForceStatusBarFromKeyguard || mForceStatusBarTransparent
                     || statusBarExpanded) {
                 if (DEBUG_LAYOUT) Slog.v(TAG, "Showing status bar: forced");
@@ -5542,16 +5590,7 @@
                     }
                 }
             } else if (mTopFullscreenOpaqueWindowState != null) {
-                final int fl = PolicyControl.getWindowFlags(null, lp);
-                if (localLOGV) {
-                    Slog.d(TAG, "frame: " + mTopFullscreenOpaqueWindowState.getFrameLw()
-                            + " shown position: "
-                            + mTopFullscreenOpaqueWindowState.getShownPositionLw());
-                    Slog.d(TAG, "attr: " + mTopFullscreenOpaqueWindowState.getAttrs()
-                            + " lp.flags=0x" + Integer.toHexString(fl));
-                }
-                topIsFullscreen = (fl & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0
-                        || (mLastSystemUiFlags & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0;
+                topIsFullscreen = topAppHidesStatusBar;
                 // The subtle difference between the window for mTopFullscreenOpaqueWindowState
                 // and mTopIsFullscreen is that mTopIsFullscreen is set only if the window
                 // has the FLAG_FULLSCREEN set.  Not sure if there is another way that to be the
@@ -5574,8 +5613,10 @@
                     if (mStatusBarController.setBarShowingLw(true)) {
                         changes |= FINISH_LAYOUT_REDO_LAYOUT;
                     }
+                    topAppHidesStatusBar = false;
                 }
             }
+            mStatusBarController.setTopAppHidesStatusBar(topAppHidesStatusBar);
         }
 
         if (mTopIsFullscreen != topIsFullscreen) {
@@ -5597,11 +5638,45 @@
             mWindowManagerFuncs.notifyShowingDreamChanged();
         }
 
+        updateWindowSleepToken();
+
         // update since mAllowLockscreenWhenOn might have changed
         updateLockScreenTimeout();
         return changes;
     }
 
+    private void updateWindowSleepToken() {
+        if (mWindowSleepTokenNeeded && !mLastWindowSleepTokenNeeded) {
+            mHandler.removeCallbacks(mReleaseSleepTokenRunnable);
+            mHandler.post(mAcquireSleepTokenRunnable);
+        } else if (!mWindowSleepTokenNeeded && mLastWindowSleepTokenNeeded) {
+            mHandler.removeCallbacks(mAcquireSleepTokenRunnable);
+            mHandler.post(mReleaseSleepTokenRunnable);
+        }
+        mLastWindowSleepTokenNeeded = mWindowSleepTokenNeeded;
+    }
+
+    /**
+     * @return Whether the top app should hide the statusbar based on the top fullscreen opaque
+     *         window.
+     */
+    private boolean topAppHidesStatusBar() {
+        if (mTopFullscreenOpaqueWindowState == null) {
+            return false;
+        }
+        final int fl = PolicyControl.getWindowFlags(null,
+                mTopFullscreenOpaqueWindowState.getAttrs());
+        if (localLOGV) {
+            Slog.d(TAG, "frame: " + mTopFullscreenOpaqueWindowState.getFrameLw()
+                    + " shown position: "
+                    + mTopFullscreenOpaqueWindowState.getShownPositionLw());
+            Slog.d(TAG, "attr: " + mTopFullscreenOpaqueWindowState.getAttrs()
+                    + " lp.flags=0x" + Integer.toHexString(fl));
+        }
+        return (fl & LayoutParams.FLAG_FULLSCREEN) != 0
+                || (mLastSystemUiFlags & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0;
+    }
+
     /**
      * Updates the occluded state of the Keyguard.
      *
@@ -6335,7 +6410,7 @@
     }
 
     private boolean shouldDispatchInputWhenNonInteractive(KeyEvent event) {
-        final boolean displayOff = (mDisplay == null || mDisplay.getState() == Display.STATE_OFF);
+        final boolean displayOff = (mDisplay == null || mDisplay.getState() == STATE_OFF);
 
         if (displayOff && !mHasFeatureWatch) {
             return false;
@@ -7471,10 +7546,12 @@
         }
     }
 
+    // TODO (multidisplay): Support multiple displays in WindowManagerPolicy.
     private void updateDreamingSleepToken(boolean acquire) {
         if (acquire) {
             if (mDreamingSleepToken == null) {
-                mDreamingSleepToken = mActivityManagerInternal.acquireSleepToken("Dream");
+                mDreamingSleepToken = mActivityManagerInternal.acquireSleepToken(
+                        "Dream", DEFAULT_DISPLAY);
             }
         } else {
             if (mDreamingSleepToken != null) {
@@ -7484,10 +7561,12 @@
         }
     }
 
+    // TODO (multidisplay): Support multiple displays in WindowManagerPolicy.
     private void updateScreenOffSleepToken(boolean acquire) {
         if (acquire) {
             if (mScreenOffSleepToken == null) {
-                mScreenOffSleepToken = mActivityManagerInternal.acquireSleepToken("ScreenOff");
+                mScreenOffSleepToken = mActivityManagerInternal.acquireSleepToken(
+                        "ScreenOff", DEFAULT_DISPLAY);
             }
         } else {
             if (mScreenOffSleepToken != null) {
@@ -7746,13 +7825,9 @@
     private VibrationEffect getVibrationEffect(int effectId) {
         long[] pattern;
         switch (effectId) {
-            case HapticFeedbackConstants.VIRTUAL_KEY:
-                return VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
             case HapticFeedbackConstants.LONG_PRESS:
                 pattern = mLongPressVibePattern;
                 break;
-            case HapticFeedbackConstants.KEYBOARD_TAP:
-                return VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
             case HapticFeedbackConstants.CLOCK_TICK:
                 return VibrationEffect.get(VibrationEffect.EFFECT_TICK);
             case HapticFeedbackConstants.CALENDAR_DATE:
@@ -7763,10 +7838,16 @@
                 break;
             case HapticFeedbackConstants.CONTEXT_CLICK:
                 return VibrationEffect.get(VibrationEffect.EFFECT_TICK);
+            case HapticFeedbackConstants.VIRTUAL_KEY:
+                return VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
             case HapticFeedbackConstants.VIRTUAL_KEY_RELEASE:
-                return VibrationEffect.get(VibrationEffect.EFFECT_TICK);
+                return VibrationEffect.get(VibrationEffect.EFFECT_TICK, false);
+            case HapticFeedbackConstants.KEYBOARD_PRESS:  // == HapticFeedbackConstants.KEYBOARD_TAP
+                return VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+            case HapticFeedbackConstants.KEYBOARD_RELEASE:
+                return VibrationEffect.get(VibrationEffect.EFFECT_TICK, false);
             case HapticFeedbackConstants.TEXT_HANDLE_MOVE:
-                return VibrationEffect.get(VibrationEffect.EFFECT_TICK);
+                return VibrationEffect.get(VibrationEffect.EFFECT_TICK, false);
             default:
                 return null;
         }
diff --git a/services/core/java/com/android/server/policy/StatusBarController.java b/services/core/java/com/android/server/policy/StatusBarController.java
index 7d67b60..ecc88b5 100644
--- a/services/core/java/com/android/server/policy/StatusBarController.java
+++ b/services/core/java/com/android/server/policy/StatusBarController.java
@@ -112,6 +112,14 @@
                 View.STATUS_BAR_TRANSPARENT);
     }
 
+
+    public void setTopAppHidesStatusBar(boolean hidesStatusBar) {
+        StatusBarManagerInternal statusbar = getStatusBarInternal();
+        if (statusbar != null) {
+            statusbar.setTopAppHidesStatusBar(hidesStatusBar);
+        }
+    }
+
     @Override
     protected boolean skipAnimation() {
         return mWin.getAttrs().height == MATCH_PARENT;
diff --git a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java
index 50e5e7b..5a5471b 100644
--- a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java
+++ b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java
@@ -1,5 +1,7 @@
 package com.android.server.policy.keyguard;
 
+import static android.view.Display.INVALID_DISPLAY;
+
 import android.app.ActivityManager;
 import android.content.ComponentName;
 import android.content.Context;
@@ -201,7 +203,10 @@
             mKeyguardState.reset();
             mHandler.post(() -> {
                 try {
-                    ActivityManager.getService().setLockScreenShown(true);
+                    // There are no longer any keyguard windows on secondary displays, so pass
+                    // INVALID_DISPLAY. All that means is that showWhenLocked activities on
+                    // secondary displays now get to show.
+                    ActivityManager.getService().setLockScreenShown(true, INVALID_DISPLAY);
                 } catch (RemoteException e) {
                     // Local call.
                 }
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 50f4f24..f84b20c 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -1569,12 +1569,15 @@
         return true;
     }
 
-    private void setWakefulnessLocked(int wakefulness, int reason) {
+    @VisibleForTesting
+    void setWakefulnessLocked(int wakefulness, int reason) {
         if (mWakefulness != wakefulness) {
             mWakefulness = wakefulness;
             mWakefulnessChanging = true;
             mDirty |= DIRTY_WAKEFULNESS;
-            mNotifier.onWakefulnessChangeStarted(wakefulness, reason);
+            if (mNotifier != null) {
+                mNotifier.onWakefulnessChangeStarted(wakefulness, reason);
+            }
         }
     }
 
@@ -2432,11 +2435,8 @@
         return value >= -1.0f && value <= 1.0f;
     }
 
-    private int getDesiredScreenPolicyLocked() {
-        if (mIsVrModeEnabled) {
-            return DisplayPowerRequest.POLICY_VR;
-        }
-
+    @VisibleForTesting
+    int getDesiredScreenPolicyLocked() {
         if (mWakefulness == WAKEFULNESS_ASLEEP || sQuiescent) {
             return DisplayPowerRequest.POLICY_OFF;
         }
@@ -2452,6 +2452,13 @@
             // doze after screen off.  This causes the screen off transition to be skipped.
         }
 
+        // It is important that POLICY_VR check happens after the wakefulness checks above so
+        // that VR-mode does not prevent displays from transitioning to the correct state when
+        // dozing or sleeping.
+        if (mIsVrModeEnabled) {
+            return DisplayPowerRequest.POLICY_VR;
+        }
+
         if ((mWakeLockSummary & WAKE_LOCK_SCREEN_BRIGHT) != 0
                 || (mUserActivitySummary & USER_ACTIVITY_SCREEN_BRIGHT) != 0
                 || !mBootCompleted
@@ -2961,8 +2968,15 @@
             boolean disabled = false;
             final int appid = UserHandle.getAppId(wakeLock.mOwnerUid);
             if (appid >= Process.FIRST_APPLICATION_UID) {
+                // Cached inactive processes are never allowed to hold wake locks.
+                if (mConstants.NO_CACHED_WAKE_LOCKS) {
+                    disabled = !wakeLock.mUidState.mActive &&
+                            wakeLock.mUidState.mProcState
+                                    != ActivityManager.PROCESS_STATE_NONEXISTENT &&
+                            wakeLock.mUidState.mProcState > ActivityManager.PROCESS_STATE_RECEIVER;
+                }
                 if (mDeviceIdleMode) {
-                    // If we are in idle mode, we will ignore all partial wake locks that are
+                    // If we are in idle mode, we will also ignore all partial wake locks that are
                     // for application uids that are not whitelisted.
                     final UidState state = wakeLock.mUidState;
                     if (Arrays.binarySearch(mDeviceIdleWhitelist, appid) < 0 &&
@@ -2971,11 +2985,6 @@
                             state.mProcState > ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE) {
                         disabled = true;
                     }
-                } else if (mConstants.NO_CACHED_WAKE_LOCKS) {
-                    disabled = !wakeLock.mUidState.mActive &&
-                            wakeLock.mUidState.mProcState
-                                    != ActivityManager.PROCESS_STATE_NONEXISTENT &&
-                            wakeLock.mUidState.mProcState > ActivityManager.PROCESS_STATE_RECEIVER;
                 }
             }
             if (wakeLock.mDisabled != disabled) {
@@ -3111,6 +3120,11 @@
         }
     }
 
+    @VisibleForTesting
+    void setVrModeEnabled(boolean enabled) {
+        mIsVrModeEnabled = enabled;
+    }
+
     private void powerHintInternal(int hintId, int data) {
         nativeSendPowerHint(hintId, data);
     }
@@ -3808,7 +3822,7 @@
 
             synchronized (mLock) {
                 if (mIsVrModeEnabled != enabled) {
-                    mIsVrModeEnabled = enabled;
+                    setVrModeEnabled(enabled);
                     mDirty |= DIRTY_VR_MODE_CHANGED;
                     updatePowerStateLocked();
                 }
diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java
index 0f61171..853e1b2 100644
--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -45,24 +45,27 @@
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.SystemVibrator;
+import android.os.Trace;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.os.Vibrator;
 import android.os.storage.IStorageManager;
 import android.os.storage.IStorageShutdownObserver;
+import android.util.ArrayMap;
 import android.util.Log;
-import android.view.ViewGroup;
+import android.util.TimingsTraceLog;
 import android.view.WindowManager;
-import android.widget.ProgressBar;
-import android.widget.TextView;
 
 import com.android.internal.telephony.ITelephony;
+import com.android.server.RescueParty;
 import com.android.server.LocalServices;
 import com.android.server.pm.PackageManagerService;
 import com.android.server.statusbar.StatusBarManagerInternal;
 
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 
 public final class ShutdownThread extends Thread {
     // constants
@@ -107,6 +110,23 @@
             .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
             .build();
 
+    // Metrics that will be reported to tron after reboot
+    private static final ArrayMap<String, Long> TRON_METRICS = new ArrayMap<>();
+
+    // File to use for save metrics
+    private static final String METRICS_FILE_BASENAME = "/data/system/shutdown-metrics";
+
+    // Metrics names to be persisted in shutdown-metrics file
+    private static String METRIC_SYSTEM_SERVER = "shutdown_system_server";
+    private static String METRIC_SEND_BROADCAST = "shutdown_send_shutdown_broadcast";
+    private static String METRIC_AM = "shutdown_activity_manager";
+    private static String METRIC_PM = "shutdown_package_manager";
+    private static String METRIC_RADIOS = "shutdown_radios";
+    private static String METRIC_BT = "shutdown_bt";
+    private static String METRIC_RADIO = "shutdown_radio";
+    private static String METRIC_NFC = "shutdown_nfc";
+    private static String METRIC_SM = "shutdown_storage_manager";
+
     private final Object mActionDoneSync = new Object();
     private boolean mActionDone;
     private Context mContext;
@@ -298,11 +318,20 @@
                             com.android.internal.R.string.reboot_to_update_reboot));
             }
         } else if (mReason != null && mReason.equals(PowerManager.REBOOT_RECOVERY)) {
-            // Factory reset path. Set the dialog message accordingly.
-            pd.setTitle(context.getText(com.android.internal.R.string.reboot_to_reset_title));
-            pd.setMessage(context.getText(
-                    com.android.internal.R.string.reboot_to_reset_message));
-            pd.setIndeterminate(true);
+            if (RescueParty.isAttemptingFactoryReset()) {
+                // We're not actually doing a factory reset yet; we're rebooting
+                // to ask the user if they'd like to reset, so give them a less
+                // scary dialog message.
+                pd.setTitle(context.getText(com.android.internal.R.string.power_off));
+                pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));
+                pd.setIndeterminate(true);
+            } else {
+                // Factory reset path. Set the dialog message accordingly.
+                pd.setTitle(context.getText(com.android.internal.R.string.reboot_to_reset_title));
+                pd.setMessage(context.getText(
+                            com.android.internal.R.string.reboot_to_reset_message));
+                pd.setIndeterminate(true);
+            }
         } else {
             if (showSysuiReboot()) {
                 return null;
@@ -392,6 +421,10 @@
      * Shuts off power regardless of radio and bluetooth state if the alloted time has passed.
      */
     public void run() {
+        TimingsTraceLog shutdownTimingLog = newTimingsLog();
+        shutdownTimingLog.traceBegin("SystemServerShutdown");
+        metricStarted(METRIC_SYSTEM_SERVER);
+
         BroadcastReceiver br = new BroadcastReceiver() {
             @Override public void onReceive(Context context, Intent intent) {
                 // We don't allow apps to cancel this, so ignore the result.
@@ -417,6 +450,8 @@
             SystemProperties.set(REBOOT_SAFEMODE_PROPERTY, "1");
         }
 
+        metricStarted(METRIC_SEND_BROADCAST);
+        shutdownTimingLog.traceBegin("SendShutdownBroadcast");
         Log.i(TAG, "Sending shutdown broadcast...");
 
         // First send the high-level shut down broadcast.
@@ -448,8 +483,12 @@
         if (mRebootHasProgressBar) {
             sInstance.setRebootProgress(BROADCAST_STOP_PERCENT, null);
         }
+        shutdownTimingLog.traceEnd(); // SendShutdownBroadcast
+        metricEnded(METRIC_SEND_BROADCAST);
 
         Log.i(TAG, "Shutting down activity manager...");
+        shutdownTimingLog.traceBegin("ShutdownActivityManager");
+        metricStarted(METRIC_AM);
 
         final IActivityManager am =
                 IActivityManager.Stub.asInterface(ServiceManager.checkService("activity"));
@@ -462,8 +501,12 @@
         if (mRebootHasProgressBar) {
             sInstance.setRebootProgress(ACTIVITY_MANAGER_STOP_PERCENT, null);
         }
+        shutdownTimingLog.traceEnd();// ShutdownActivityManager
+        metricEnded(METRIC_AM);
 
         Log.i(TAG, "Shutting down package manager...");
+        shutdownTimingLog.traceBegin("ShutdownPackageManager");
+        metricStarted(METRIC_PM);
 
         final PackageManagerService pm = (PackageManagerService)
             ServiceManager.getService("package");
@@ -473,12 +516,18 @@
         if (mRebootHasProgressBar) {
             sInstance.setRebootProgress(PACKAGE_MANAGER_STOP_PERCENT, null);
         }
+        shutdownTimingLog.traceEnd(); // ShutdownPackageManager
+        metricEnded(METRIC_PM);
 
         // Shutdown radios.
+        shutdownTimingLog.traceBegin("ShutdownRadios");
+        metricStarted(METRIC_RADIOS);
         shutdownRadios(MAX_RADIO_WAIT_TIME);
         if (mRebootHasProgressBar) {
             sInstance.setRebootProgress(RADIO_STOP_PERCENT, null);
         }
+        shutdownTimingLog.traceEnd(); // ShutdownRadios
+        metricEnded(METRIC_RADIOS);
 
         // Shutdown StorageManagerService to ensure media is in a safe state
         IStorageShutdownObserver observer = new IStorageShutdownObserver.Stub() {
@@ -489,6 +538,8 @@
         };
 
         Log.i(TAG, "Shutting down StorageManagerService");
+        shutdownTimingLog.traceBegin("ShutdownStorageManager");
+        metricStarted(METRIC_SM);
 
         // Set initial variables and time out time.
         mActionDone = false;
@@ -508,7 +559,7 @@
             while (!mActionDone) {
                 long delay = endShutTime - SystemClock.elapsedRealtime();
                 if (delay <= 0) {
-                    Log.w(TAG, "Shutdown wait timed out");
+                    Log.w(TAG, "StorageManager shutdown wait timed out");
                     break;
                 } else if (mRebootHasProgressBar) {
                     int status = (int)((MAX_SHUTDOWN_WAIT_TIME - delay) * 1.0 *
@@ -523,6 +574,9 @@
                 }
             }
         }
+        shutdownTimingLog.traceEnd(); // ShutdownStorageManager
+        metricEnded(METRIC_SM);
+
         if (mRebootHasProgressBar) {
             sInstance.setRebootProgress(MOUNT_SERVICE_STOP_PERCENT, null);
 
@@ -531,9 +585,29 @@
             uncrypt();
         }
 
+        shutdownTimingLog.traceEnd(); // SystemServerShutdown
+        metricEnded(METRIC_SYSTEM_SERVER);
+        saveMetrics(mReboot);
         rebootOrShutdown(mContext, mReboot, mReason);
     }
 
+    private static TimingsTraceLog newTimingsLog() {
+        return new TimingsTraceLog("ShutdownTiming", Trace.TRACE_TAG_SYSTEM_SERVER);
+    }
+
+    private static void metricStarted(String metricKey) {
+        synchronized (TRON_METRICS) {
+            TRON_METRICS.put(metricKey, -1 * SystemClock.elapsedRealtime());
+        }
+    }
+
+    private static void metricEnded(String metricKey) {
+        synchronized (TRON_METRICS) {
+            TRON_METRICS
+                    .put(metricKey, SystemClock.elapsedRealtime() + TRON_METRICS.get(metricKey));
+        }
+    }
+
     private void setRebootProgress(final int progress, final CharSequence message) {
         mHandler.post(new Runnable() {
             @Override
@@ -555,6 +629,7 @@
         final boolean[] done = new boolean[1];
         Thread t = new Thread() {
             public void run() {
+                TimingsTraceLog shutdownTimingsTraceLog = newTimingsLog();
                 boolean nfcOff;
                 boolean bluetoothReadyForShutdown;
                 boolean radioOff;
@@ -566,12 +641,12 @@
                 final IBluetoothManager bluetooth =
                         IBluetoothManager.Stub.asInterface(ServiceManager.checkService(
                                 BluetoothAdapter.BLUETOOTH_MANAGER_SERVICE));
-
                 try {
                     nfcOff = nfc == null ||
                              nfc.getState() == NfcAdapter.STATE_OFF;
                     if (!nfcOff) {
                         Log.w(TAG, "Turning off NFC...");
+                        metricStarted(METRIC_NFC);
                         nfc.disable(false); // Don't persist new state
                     }
                 } catch (RemoteException ex) {
@@ -584,6 +659,7 @@
                             bluetooth.getState() == BluetoothAdapter.STATE_OFF;
                     if (!bluetoothReadyForShutdown) {
                         Log.w(TAG, "Disabling Bluetooth...");
+                        metricStarted(METRIC_BT);
                         bluetooth.disable(mContext.getPackageName(), false);  // disable but don't persist new state
                     }
                 } catch (RemoteException ex) {
@@ -595,6 +671,7 @@
                     radioOff = phone == null || !phone.needMobileRadioShutdown();
                     if (!radioOff) {
                         Log.w(TAG, "Turning off cellular radios...");
+                        metricStarted(METRIC_RADIO);
                         phone.shutdownMobileRadios();
                     }
                 } catch (RemoteException ex) {
@@ -627,6 +704,9 @@
                         }
                         if (bluetoothReadyForShutdown) {
                             Log.i(TAG, "Bluetooth turned off.");
+                            metricEnded(METRIC_BT);
+                            shutdownTimingsTraceLog
+                                    .logDuration("ShutdownBt", TRON_METRICS.get(METRIC_BT));
                         }
                     }
                     if (!radioOff) {
@@ -638,6 +718,9 @@
                         }
                         if (radioOff) {
                             Log.i(TAG, "Radio turned off.");
+                            metricEnded(METRIC_RADIO);
+                            shutdownTimingsTraceLog
+                                    .logDuration("ShutdownRadio", TRON_METRICS.get(METRIC_RADIO));
                         }
                     }
                     if (!nfcOff) {
@@ -649,6 +732,9 @@
                         }
                         if (nfcOff) {
                             Log.i(TAG, "NFC turned off.");
+                            metricEnded(METRIC_NFC);
+                            shutdownTimingsTraceLog
+                                    .logDuration("ShutdownNfc", TRON_METRICS.get(METRIC_NFC));
                         }
                     }
 
@@ -676,7 +762,7 @@
 
     /**
      * Do not call this directly. Use {@link #reboot(Context, String, boolean)}
-     * or {@link #shutdown(Context, boolean)} instead.
+     * or {@link #shutdown(Context, String, boolean)} instead.
      *
      * @param context Context used to vibrate or null without vibration
      * @param reboot true to reboot or false to shutdown
@@ -704,12 +790,38 @@
             } catch (InterruptedException unused) {
             }
         }
-
         // Shutdown power
         Log.i(TAG, "Performing low-level shutdown...");
         PowerManagerService.lowLevelShutdown(reason);
     }
 
+    private static void saveMetrics(boolean reboot) {
+        StringBuilder metricValue = new StringBuilder();
+        metricValue.append("reboot:");
+        metricValue.append(reboot ? "y" : "n");
+        final int metricsSize = TRON_METRICS.size();
+        for (int i = 0; i < metricsSize; i++) {
+            final String name = TRON_METRICS.keyAt(i);
+            final long value = TRON_METRICS.valueAt(i);
+            if (value < 0) {
+                Log.e(TAG, "metricEnded wasn't called for " + name);
+                continue;
+            }
+            metricValue.append(',').append(name).append(':').append(value);
+        }
+        File tmp = new File(METRICS_FILE_BASENAME + ".tmp");
+        boolean saved = false;
+        try (FileOutputStream fos = new FileOutputStream(tmp)) {
+            fos.write(metricValue.toString().getBytes(StandardCharsets.UTF_8));
+            saved = true;
+        } catch (IOException e) {
+            Log.e(TAG,"Cannot save shutdown metrics", e);
+        }
+        if (saved) {
+            tmp.renameTo(new File(METRICS_FILE_BASENAME + ".txt"));
+        }
+    }
+
     private void uncrypt() {
         Log.i(TAG, "Calling uncrypt and monitoring the progress...");
 
diff --git a/services/core/java/com/android/server/radio/RadioService.java b/services/core/java/com/android/server/radio/RadioService.java
deleted file mode 100644
index 34bbffd..0000000
--- a/services/core/java/com/android/server/radio/RadioService.java
+++ /dev/null
@@ -1,75 +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.radio;
-
-import android.content.Context;
-import android.hardware.radio.IRadioService;
-import android.hardware.radio.ITuner;
-import android.hardware.radio.ITunerCallback;
-import android.hardware.radio.RadioManager;
-import android.util.Slog;
-
-import com.android.server.SystemService;
-
-public class RadioService extends SystemService {
-    // TODO(b/36863239): rename to RadioService when native service goes away
-    private static final String TAG = "RadioServiceJava";
-
-    private final RadioServiceImpl mServiceImpl = new RadioServiceImpl();
-
-    /**
-     * This field is used by native code, do not access or modify.
-     */
-    private final long mNativeContext = nativeInit();
-
-    private final Object mLock = new Object();
-
-    public RadioService(Context context) {
-        super(context);
-    }
-
-    @Override
-    protected void finalize() throws Throwable {
-        nativeFinalize(mNativeContext);
-        super.finalize();
-    }
-
-    private native long nativeInit();
-    private native void nativeFinalize(long nativeContext);
-    private native Tuner nativeOpenTuner(long nativeContext, int moduleId,
-            RadioManager.BandConfig config, boolean withAudio, ITunerCallback callback);
-
-    @Override
-    public void onStart() {
-        publishBinderService(Context.RADIO_SERVICE, mServiceImpl);
-        Slog.v(TAG, "RadioService started");
-    }
-
-    private class RadioServiceImpl extends IRadioService.Stub {
-        @Override
-        public ITuner openTuner(int moduleId, RadioManager.BandConfig bandConfig,
-                boolean withAudio, ITunerCallback callback) {
-            if (callback == null) {
-                throw new IllegalArgumentException("Callback must not be empty");
-            }
-            synchronized (mLock) {
-                // TODO(b/36863239): add death monitoring for binder
-                return nativeOpenTuner(mNativeContext, moduleId, bandConfig, withAudio, callback);
-            }
-        }
-    }
-}
diff --git a/services/core/java/com/android/server/radio/Tuner.java b/services/core/java/com/android/server/radio/Tuner.java
deleted file mode 100644
index 9915c34..0000000
--- a/services/core/java/com/android/server/radio/Tuner.java
+++ /dev/null
@@ -1,225 +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.radio;
-
-import android.annotation.NonNull;
-import android.hardware.radio.ITuner;
-import android.hardware.radio.ITunerCallback;
-import android.hardware.radio.RadioManager;
-import android.util.Slog;
-
-import java.util.List;
-
-class Tuner extends ITuner.Stub {
-    // TODO(b/36863239): rename to RadioService.Tuner when native service goes away
-    private static final String TAG = "RadioServiceJava.Tuner";
-
-    /**
-     * This field is used by native code, do not access or modify.
-     */
-    private final long mNativeContext;
-
-    @NonNull private final TunerCallback mTunerCallback;
-    private final Object mLock = new Object();
-    private boolean mIsClosed = false;
-    private boolean mIsMuted = false;
-    private int mRegion;  // TODO(b/36863239): find better solution to manage regions
-    private final boolean mWithAudio;
-
-    Tuner(@NonNull ITunerCallback clientCallback, int halRev, int region, boolean withAudio) {
-        mTunerCallback = new TunerCallback(this, clientCallback, halRev);
-        mRegion = region;
-        mWithAudio = withAudio;
-        mNativeContext = nativeInit(halRev);
-    }
-
-    @Override
-    protected void finalize() throws Throwable {
-        nativeFinalize(mNativeContext);
-        super.finalize();
-    }
-
-    private native long nativeInit(int halRev);
-    private native void nativeFinalize(long nativeContext);
-    private native void nativeClose(long nativeContext);
-
-    private native void nativeSetConfiguration(long nativeContext,
-            @NonNull RadioManager.BandConfig config);
-    private native RadioManager.BandConfig nativeGetConfiguration(long nativeContext, int region);
-
-    private native void nativeStep(long nativeContext, boolean directionDown, boolean skipSubChannel);
-    private native void nativeScan(long nativeContext, boolean directionDown, boolean skipSubChannel);
-    private native void nativeTune(long nativeContext, int channel, int subChannel);
-    private native void nativeCancel(long nativeContext);
-
-    private native RadioManager.ProgramInfo nativeGetProgramInformation(long nativeContext);
-    private native boolean nativeStartBackgroundScan(long nativeContext);
-    private native List<RadioManager.ProgramInfo> nativeGetProgramList(long nativeContext,
-            String filter);
-
-    private native boolean nativeIsAnalogForced(long nativeContext);
-    private native void nativeSetAnalogForced(long nativeContext, boolean isForced);
-
-    private native boolean nativeIsAntennaConnected(long nativeContext);
-
-    @Override
-    public void close() {
-        synchronized (mLock) {
-            if (mIsClosed) return;
-            mTunerCallback.detach();
-            nativeClose(mNativeContext);
-            mIsClosed = true;
-        }
-    }
-
-    private void checkNotClosedLocked() {
-        if (mIsClosed) {
-            throw new IllegalStateException("Tuner is closed, no further operations are allowed");
-        }
-    }
-
-    @Override
-    public void setConfiguration(RadioManager.BandConfig config) {
-        if (config == null) {
-            throw new IllegalArgumentException("The argument must not be a null pointer");
-        }
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            nativeSetConfiguration(mNativeContext, config);
-            mRegion = config.getRegion();
-        }
-    }
-
-    @Override
-    public RadioManager.BandConfig getConfiguration() {
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            return nativeGetConfiguration(mNativeContext, mRegion);
-        }
-    }
-
-    @Override
-    public void setMuted(boolean mute) {
-        if (!mWithAudio) {
-            throw new IllegalStateException("Can't operate on mute - no audio requested");
-        }
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            if (mIsMuted == mute) return;
-            mIsMuted = mute;
-
-            // TODO(b/34348946): notifify audio policy manager of media activity on radio audio
-            // device. This task is pulled directly from previous implementation of native service.
-        }
-    }
-
-    @Override
-    public boolean isMuted() {
-        if (!mWithAudio) {
-            Slog.w(TAG, "Tuner did not request audio, pretending it was muted");
-            return true;
-        }
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            return mIsMuted;
-        }
-    }
-
-    @Override
-    public void step(boolean directionDown, boolean skipSubChannel) {
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            nativeStep(mNativeContext, directionDown, skipSubChannel);
-        }
-    }
-
-    @Override
-    public void scan(boolean directionDown, boolean skipSubChannel) {
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            nativeScan(mNativeContext, directionDown, skipSubChannel);
-        }
-    }
-
-    @Override
-    public void tune(int channel, int subChannel) {
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            nativeTune(mNativeContext, channel, subChannel);
-        }
-    }
-
-    @Override
-    public void cancel() {
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            nativeCancel(mNativeContext);
-        }
-    }
-
-    @Override
-    public RadioManager.ProgramInfo getProgramInformation() {
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            return nativeGetProgramInformation(mNativeContext);
-        }
-    }
-
-    @Override
-    public boolean startBackgroundScan() {
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            return nativeStartBackgroundScan(mNativeContext);
-        }
-    }
-
-    @Override
-    public List<RadioManager.ProgramInfo> getProgramList(String filter) {
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            List<RadioManager.ProgramInfo> list = nativeGetProgramList(mNativeContext, filter);
-            if (list == null) {
-                throw new IllegalStateException("Program list is not ready");
-            }
-            return list;
-        }
-    }
-
-    @Override
-    public boolean isAnalogForced() {
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            return nativeIsAnalogForced(mNativeContext);
-        }
-    }
-
-    @Override
-    public void setAnalogForced(boolean isForced) {
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            nativeSetAnalogForced(mNativeContext, isForced);
-        }
-    }
-
-    @Override
-    public boolean isAntennaConnected() {
-        synchronized (mLock) {
-            checkNotClosedLocked();
-            return nativeIsAntennaConnected(mNativeContext);
-        }
-    }
-}
diff --git a/services/core/java/com/android/server/radio/TunerCallback.java b/services/core/java/com/android/server/radio/TunerCallback.java
deleted file mode 100644
index fcc874b..0000000
--- a/services/core/java/com/android/server/radio/TunerCallback.java
+++ /dev/null
@@ -1,97 +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.radio;
-
-import android.annotation.NonNull;
-import android.hardware.radio.ITuner;
-import android.hardware.radio.ITunerCallback;
-import android.hardware.radio.RadioManager;
-import android.hardware.radio.RadioTuner;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.util.Slog;
-
-class TunerCallback implements ITunerCallback {
-    // TODO(b/36863239): rename to RadioService.TunerCallback when native service goes away
-    private static final String TAG = "RadioServiceJava.TunerCallback";
-
-    /**
-     * This field is used by native code, do not access or modify.
-     */
-    private final long mNativeContext;
-
-    @NonNull private final Tuner mTuner;
-    @NonNull private final ITunerCallback mClientCallback;
-
-    TunerCallback(@NonNull Tuner tuner, @NonNull ITunerCallback clientCallback, int halRev) {
-        mTuner = tuner;
-        mClientCallback = clientCallback;
-        mNativeContext = nativeInit(tuner, halRev);
-    }
-
-    @Override
-    protected void finalize() throws Throwable {
-        nativeFinalize(mNativeContext);
-        super.finalize();
-    }
-
-    private native long nativeInit(@NonNull Tuner tuner, int halRev);
-    private native void nativeFinalize(long nativeContext);
-    private native void nativeDetach(long nativeContext);
-
-    public void detach() {
-        nativeDetach(mNativeContext);
-    }
-
-    // called from native side
-    private void handleHwFailure() {
-        onError(RadioTuner.ERROR_HARDWARE_FAILURE);
-        mTuner.close();
-    }
-
-    @Override
-    public void onError(int status) {
-        try {
-            mClientCallback.onError(status);
-        } catch (RemoteException e) {
-            Slog.e(TAG, "client died", e);
-        }
-    }
-
-    @Override
-    public void onConfigurationChanged(RadioManager.BandConfig config) {
-        try {
-            mClientCallback.onConfigurationChanged(config);
-        } catch (RemoteException e) {
-            Slog.e(TAG, "client died", e);
-        }
-    }
-
-    @Override
-    public void onProgramInfoChanged(RadioManager.ProgramInfo info) {
-        try {
-            mClientCallback.onProgramInfoChanged(info);
-        } catch (RemoteException e) {
-            Slog.e(TAG, "client died", e);
-        }
-    }
-
-    @Override
-    public IBinder asBinder() {
-        throw new RuntimeException("Not a binder");
-    }
-}
diff --git a/services/core/java/com/android/server/search/SearchManagerService.java b/services/core/java/com/android/server/search/SearchManagerService.java
index 8969771..c3fa823 100644
--- a/services/core/java/com/android/server/search/SearchManagerService.java
+++ b/services/core/java/com/android/server/search/SearchManagerService.java
@@ -17,7 +17,6 @@
 package com.android.server.search;
 
 import android.app.ActivityManager;
-import android.app.AppGlobals;
 import android.app.IActivityManager;
 import android.app.ISearchManager;
 import android.app.SearchManager;
@@ -26,7 +25,6 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.pm.IPackageManager;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.database.ContentObserver;
@@ -37,6 +35,7 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
+import android.service.voice.VoiceInteractionService;
 import android.util.Log;
 import android.util.SparseArray;
 
@@ -272,24 +271,25 @@
         }
     }
 
+    // Check and return VIS component
     private ComponentName getLegacyAssistComponent(int userHandle) {
         try {
             userHandle = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
-                    Binder.getCallingUid(), userHandle, true, false, "getLegacyAssistComponent", null);
-            IPackageManager pm = AppGlobals.getPackageManager();
-            Intent assistIntent = new Intent(Intent.ACTION_ASSIST);
-            ResolveInfo info =
-                    pm.resolveIntent(assistIntent,
-                            assistIntent.resolveTypeIfNeeded(mContext.getContentResolver()),
-                            PackageManager.MATCH_DEFAULT_ONLY, userHandle);
-            if (info != null) {
+                    Binder.getCallingUid(), userHandle, true, false, "getLegacyAssistComponent",
+                    null);
+            PackageManager pm = mContext.getPackageManager();
+            Intent intentAssistProbe = new Intent(VoiceInteractionService.SERVICE_INTERFACE);
+            List<ResolveInfo> infoListVis = pm.queryIntentServicesAsUser(intentAssistProbe,
+                    PackageManager.MATCH_SYSTEM_ONLY, userHandle);
+            if (infoListVis == null || infoListVis.isEmpty()) {
+                return null;
+            } else {
+                ResolveInfo rInfo = infoListVis.get(0);
                 return new ComponentName(
-                        info.activityInfo.applicationInfo.packageName,
-                        info.activityInfo.name);
+                        rInfo.serviceInfo.applicationInfo.packageName,
+                        rInfo.serviceInfo.name);
+
             }
-        } catch (RemoteException re) {
-            // Local call
-            Log.e(TAG, "RemoteException in getLegacyAssistComponent: " + re);
         } catch (Exception e) {
             Log.e(TAG, "Exception in getLegacyAssistComponent: " + e);
         }
@@ -304,9 +304,15 @@
         }
         long ident = Binder.clearCallingIdentity();
         try {
-            Intent intent = new Intent(Intent.ACTION_ASSIST);
+            Intent intent = new Intent(VoiceInteractionService.SERVICE_INTERFACE);
             intent.setComponent(comp);
+
             IActivityManager am = ActivityManager.getService();
+            if (args != null) {
+                args.putInt(Intent.EXTRA_KEY_EVENT, android.view.KeyEvent.KEYCODE_ASSIST);
+            }
+            intent.putExtras(args);
+
             return am.launchAssistIntent(intent, ActivityManager.ASSIST_CONTEXT_BASIC, hint,
                     userHandle, args);
         } catch (RemoteException e) {
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
index 866fdad..0884678 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
@@ -80,6 +80,13 @@
     void setGlobalActionsListener(GlobalActionsListener listener);
     void showGlobalActions();
 
+    /**
+     * Set whether the top app currently hides the statusbar.
+     *
+     * @param hidesStatusBar whether it is being hidden
+     */
+    void setTopAppHidesStatusBar(boolean hidesStatusBar);
+
     boolean showShutdownUi(boolean isReboot, String requestString);
 
     public interface GlobalActionsListener {
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index 5b252e8..38dc33f 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -20,7 +20,6 @@
 import android.app.StatusBarManager;
 import android.content.ComponentName;
 import android.content.Context;
-import android.content.pm.PackageManager;
 import android.graphics.Rect;
 import android.os.Binder;
 import android.os.Bundle;
@@ -332,6 +331,15 @@
         }
 
         @Override
+        public void setTopAppHidesStatusBar(boolean hidesStatusBar) {
+            if (mBar != null) {
+                try {
+                    mBar.setTopAppHidesStatusBar(hidesStatusBar);
+                } catch (RemoteException ex) {}
+            }
+        }
+
+        @Override
         public boolean showShutdownUi(boolean isReboot, String reason) {
             if (!mContext.getResources().getBoolean(R.bool.config_showSysuiShutdown)) {
                 return false;
@@ -374,6 +382,18 @@
     }
 
     @Override
+    public void togglePanel() {
+        enforceExpandStatusBar();
+
+        if (mBar != null) {
+            try {
+                mBar.togglePanel();
+            } catch (RemoteException ex) {
+            }
+        }
+    }
+
+    @Override
     public void expandSettingsPanel(String subPanel) {
         enforceExpandStatusBar();
 
@@ -936,6 +956,10 @@
                 this, in, out, err, args, callback, resultReceiver);
     }
 
+    public String[] getStatusBarIcons() {
+        return mContext.getResources().getStringArray(R.array.config_statusBarIcons);
+    }
+
     // ================================================================================
     // Can be called from any thread
     // ================================================================================
diff --git a/services/core/java/com/android/server/statusbar/StatusBarShellCommand.java b/services/core/java/com/android/server/statusbar/StatusBarShellCommand.java
index 40bb496..4e20f01 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarShellCommand.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarShellCommand.java
@@ -25,7 +25,7 @@
 
 public class StatusBarShellCommand extends ShellCommand {
 
-    private final IStatusBarService mInterface;
+    private final StatusBarManagerService mInterface;
 
     public StatusBarShellCommand(StatusBarManagerService service) {
         mInterface = service;
@@ -54,6 +54,8 @@
                     final PrintWriter pw = getOutPrintWriter();
                     pw.println(String.valueOf(TileService.isQuickSettingsSupported()));
                     return 0;
+                case "get-status-icons":
+                    return runGetStatusIcons();
                 default:
                     return handleDefaultCommands(cmd);
             }
@@ -94,6 +96,14 @@
         return 0;
     }
 
+    private int runGetStatusIcons() {
+        final PrintWriter pw = getOutPrintWriter();
+        for (String icon : mInterface.getStatusBarIcons()) {
+            pw.println(icon);
+        }
+        return 0;
+    }
+
     @Override
     public void onHelp() {
         final PrintWriter pw = getOutPrintWriter();
@@ -122,5 +132,8 @@
         pw.println("  check-support");
         pw.println("    Check if this device supports QS + APIs");
         pw.println("");
+        pw.println("  get-status-icons");
+        pw.println("    Print the list of status bar icons and the order they appear in");
+        pw.println("");
     }
 }
diff --git a/services/core/java/com/android/server/storage/AppCollector.java b/services/core/java/com/android/server/storage/AppCollector.java
index 03b754f..0b51f9c 100644
--- a/services/core/java/com/android/server/storage/AppCollector.java
+++ b/services/core/java/com/android/server/storage/AppCollector.java
@@ -135,7 +135,7 @@
                                 PackageStats packageStats = new PackageStats(app.packageName,
                                         user.id);
                                 packageStats.cacheSize = storageStats.getCacheBytes();
-                                packageStats.codeSize = storageStats.getCodeBytes();
+                                packageStats.codeSize = storageStats.getAppBytes();
                                 packageStats.dataSize = storageStats.getDataBytes();
                                 stats.add(packageStats);
                             } catch (NameNotFoundException | IOException e) {
diff --git a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
index 88b6d87..a35383f 100644
--- a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
+++ b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
@@ -29,6 +29,7 @@
 import android.os.Environment;
 import android.os.FileObserver;
 import android.os.Handler;
+import android.os.HandlerThread;
 import android.os.Message;
 import android.os.ResultReceiver;
 import android.os.ServiceManager;
@@ -154,20 +155,8 @@
 
     private static final String TV_NOTIFICATION_CHANNEL_ID = "devicestoragemonitor.tv";
 
-    /**
-     * Handler that checks the amount of disk space on the device and sends a
-     * notification if the device runs low on disk space
-     */
-    private final Handler mHandler = new Handler(IoThread.get().getLooper()) {
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MSG_CHECK:
-                    check();
-                    return;
-            }
-        }
-    };
+    private final HandlerThread mHandlerThread;
+    private final Handler mHandler;
 
     private State findOrCreateState(UUID uuid) {
         State state = mStates.get(uuid);
@@ -256,6 +245,20 @@
 
     public DeviceStorageMonitorService(Context context) {
         super(context);
+
+        mHandlerThread = new HandlerThread(TAG, android.os.Process.THREAD_PRIORITY_BACKGROUND);
+        mHandlerThread.start();
+
+        mHandler = new Handler(mHandlerThread.getLooper()) {
+            @Override
+            public void handleMessage(Message msg) {
+                switch (msg.what) {
+                    case MSG_CHECK:
+                        check();
+                        return;
+                }
+            }
+        };
     }
 
     private static boolean isBootImageOnDisk() {
diff --git a/services/core/java/com/android/server/storage/DiskStatsFileLogger.java b/services/core/java/com/android/server/storage/DiskStatsFileLogger.java
index 0094ab5..1db3ec4 100644
--- a/services/core/java/com/android/server/storage/DiskStatsFileLogger.java
+++ b/services/core/java/com/android/server/storage/DiskStatsFileLogger.java
@@ -56,10 +56,12 @@
     public static final String SYSTEM_KEY = "systemSize";
     public static final String MISC_KEY = "otherSize";
     public static final String APP_SIZE_AGG_KEY = "appSize";
+    public static final String APP_DATA_SIZE_AGG_KEY = "appDataSize";
     public static final String APP_CACHE_AGG_KEY = "cacheSize";
     public static final String PACKAGE_NAMES_KEY = "packageNames";
     public static final String APP_SIZES_KEY = "appSizes";
     public static final String APP_CACHES_KEY = "cacheSizes";
+    public static final String APP_DATA_KEY = "appDataSizes";
     public static final String LAST_QUERY_TIMESTAMP_KEY = "queryTime";
 
     private MeasurementResult mResult;
@@ -114,31 +116,39 @@
     private void addAppsToJson(JSONObject json) throws JSONException {
         JSONArray names = new JSONArray();
         JSONArray appSizeList = new JSONArray();
+        JSONArray appDataSizeList = new JSONArray();
         JSONArray cacheSizeList = new JSONArray();
 
         long appSizeSum = 0L;
+        long appDataSizeSum = 0L;
         long cacheSizeSum = 0L;
         boolean isExternal = Environment.isExternalStorageEmulated();
         for (Map.Entry<String, PackageStats> entry : filterOnlyPrimaryUser().entrySet()) {
             PackageStats stat = entry.getValue();
-            long appSize = stat.codeSize + stat.dataSize;
+            long appSize = stat.codeSize;
+            long appDataSize = stat.dataSize;
             long cacheSize = stat.cacheSize;
             if (isExternal) {
-                appSize += stat.externalCodeSize + stat.externalDataSize;
+                appSize += stat.externalCodeSize;
+                appDataSize += stat.externalDataSize;
                 cacheSize += stat.externalCacheSize;
             }
             appSizeSum += appSize;
+            appDataSizeSum += appDataSize;
             cacheSizeSum += cacheSize;
 
             names.put(stat.packageName);
             appSizeList.put(appSize);
+            appDataSizeList.put(appDataSize);
             cacheSizeList.put(cacheSize);
         }
         json.put(PACKAGE_NAMES_KEY, names);
         json.put(APP_SIZES_KEY, appSizeList);
         json.put(APP_CACHES_KEY, cacheSizeList);
+        json.put(APP_DATA_KEY, appDataSizeList);
         json.put(APP_SIZE_AGG_KEY, appSizeSum);
         json.put(APP_CACHE_AGG_KEY, cacheSizeSum);
+        json.put(APP_DATA_SIZE_AGG_KEY, appDataSizeSum);
     }
 
     /**
diff --git a/services/core/java/com/android/server/timezone/CheckToken.java b/services/core/java/com/android/server/timezone/CheckToken.java
new file mode 100644
index 0000000..5128360
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/CheckToken.java
@@ -0,0 +1,98 @@
+/*
+ * 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.timezone;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.Arrays;
+
+/**
+ * A deserialized version of the byte[] sent to the time zone update application to identify a
+ * triggered time zone update check. It encodes the optimistic lock ID used to detect
+ * concurrent checks and the minimal package versions that will have been checked.
+ */
+final class CheckToken {
+
+    final int mOptimisticLockId;
+    final PackageVersions mPackageVersions;
+
+    CheckToken(int optimisticLockId, PackageVersions packageVersions) {
+        this.mOptimisticLockId = optimisticLockId;
+
+        if (packageVersions == null) {
+            throw new NullPointerException("packageVersions == null");
+        }
+        this.mPackageVersions = packageVersions;
+    }
+
+    byte[] toByteArray() {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream(12 /* (3 * sizeof(int)) */);
+        try (DataOutputStream dos = new DataOutputStream(baos)) {
+            dos.writeInt(mOptimisticLockId);
+            dos.writeInt(mPackageVersions.mUpdateAppVersion);
+            dos.writeInt(mPackageVersions.mDataAppVersion);
+        } catch (IOException e) {
+            throw new RuntimeException("Unable to write into a ByteArrayOutputStream", e);
+        }
+        return baos.toByteArray();
+    }
+
+    static CheckToken fromByteArray(byte[] tokenBytes) throws IOException {
+        ByteArrayInputStream bais = new ByteArrayInputStream(tokenBytes);
+        try (DataInputStream dis = new DataInputStream(bais)) {
+            int versionId = dis.readInt();
+            int updateAppVersion = dis.readInt();
+            int dataAppVersion = dis.readInt();
+            return new CheckToken(versionId, new PackageVersions(updateAppVersion, dataAppVersion));
+        }
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        CheckToken checkToken = (CheckToken) o;
+
+        if (mOptimisticLockId != checkToken.mOptimisticLockId) {
+            return false;
+        }
+        return mPackageVersions.equals(checkToken.mPackageVersions);
+    }
+
+    @Override
+    public int hashCode() {
+        int result = mOptimisticLockId;
+        result = 31 * result + mPackageVersions.hashCode();
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "Token{" +
+                "mOptimisticLockId=" + mOptimisticLockId +
+                ", mPackageVersions=" + mPackageVersions +
+                '}';
+    }
+}
diff --git a/services/core/java/com/android/server/timezone/ClockHelper.java b/services/core/java/com/android/server/timezone/ClockHelper.java
new file mode 100644
index 0000000..353728a
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/ClockHelper.java
@@ -0,0 +1,25 @@
+/*
+ * 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.timezone;
+
+/**
+ * An easy-to-mock interface for obtaining a monotonically increasing time value in milliseconds.
+ */
+interface ClockHelper {
+
+    long currentTimestamp();
+}
diff --git a/services/core/java/com/android/server/timezone/ConfigHelper.java b/services/core/java/com/android/server/timezone/ConfigHelper.java
new file mode 100644
index 0000000..f9984fa
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/ConfigHelper.java
@@ -0,0 +1,34 @@
+/*
+ * 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.timezone;
+
+/**
+ * An easy-to-mock interface around device config for use by {@link PackageTracker}; it is not
+ * possible to test various states with the real one because config is fixed in the system image.
+ */
+interface ConfigHelper {
+
+    boolean isTrackingEnabled();
+
+    String getUpdateAppPackageName();
+
+    String getDataAppPackageName();
+
+    int getCheckTimeAllowedMillis();
+
+    int getFailedCheckRetryCount();
+}
diff --git a/services/core/java/com/android/server/timezone/IntentHelper.java b/services/core/java/com/android/server/timezone/IntentHelper.java
new file mode 100644
index 0000000..5de5432
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/IntentHelper.java
@@ -0,0 +1,44 @@
+/*
+ * 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.timezone;
+
+/**
+ * An easy-to-mock interface around intent sending / receiving for use by {@link PackageTracker};
+ * it is not possible to test various cases with the real one because of the need to simulate
+ * receiving and broadcasting intents.
+ */
+interface IntentHelper {
+
+    void initialize(String updateAppPackageName, String dataAppPackageName,
+            PackageTracker packageTracker);
+
+    void sendTriggerUpdateCheck(CheckToken checkToken);
+
+    /**
+     * Schedule a "reliability trigger" after at least minimumDelayMillis, replacing any existing
+     * scheduled one. A reliability trigger ensures that the {@link PackageTracker} can pick up
+     * reliably if a previous update check did not complete for some reason. It can happen when
+     * the device is idle. The trigger is expected to call
+     * {@link PackageTracker#triggerUpdateIfNeeded(boolean)} with a {@code false} value.
+     */
+    void scheduleReliabilityTrigger(long minimumDelayMillis);
+
+    /**
+     * Make sure there is no reliability trigger scheduled. No-op if there wasn't one.
+     */
+    void unscheduleReliabilityTrigger();
+}
diff --git a/services/core/java/com/android/server/timezone/IntentHelperImpl.java b/services/core/java/com/android/server/timezone/IntentHelperImpl.java
new file mode 100644
index 0000000..bc0f6e4
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/IntentHelperImpl.java
@@ -0,0 +1,113 @@
+/*
+ * 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.timezone;
+
+import com.android.server.EventLogTags;
+
+import android.app.timezone.RulesUpdaterContract;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.PatternMatcher;
+import android.util.Slog;
+
+/**
+ * The bona fide implementation of {@link IntentHelper}.
+ */
+final class IntentHelperImpl implements IntentHelper {
+
+    private final static String TAG = "timezone.IntentHelperImpl";
+
+    private final Context mContext;
+    private String mUpdaterAppPackageName;
+
+    IntentHelperImpl(Context context) {
+        mContext = context;
+    }
+
+    @Override
+    public void initialize(String updaterAppPackageName, String dataAppPackageName,
+            PackageTracker packageTracker) {
+        mUpdaterAppPackageName = updaterAppPackageName;
+
+        // Register for events of interest.
+
+        // The intent filter that triggers when package update events happen that indicate there may
+        // be work to do.
+        IntentFilter packageIntentFilter = new IntentFilter();
+
+        packageIntentFilter.addDataScheme("package");
+        packageIntentFilter.addDataSchemeSpecificPart(
+                updaterAppPackageName, PatternMatcher.PATTERN_LITERAL);
+        packageIntentFilter.addDataSchemeSpecificPart(
+                dataAppPackageName, PatternMatcher.PATTERN_LITERAL);
+
+        // ACTION_PACKAGE_ADDED is fired when a package is upgraded or downgraded (in addition to
+        // ACTION_PACKAGE_REMOVED and ACTION_PACKAGE_REPLACED). A system/priv-app can never be
+        // removed entirely so we do not need to trigger on ACTION_PACKAGE_REMOVED or
+        // ACTION_PACKAGE_FULLY_REMOVED.
+        packageIntentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
+
+        // ACTION_PACKAGE_CHANGED is used when a package is disabled / re-enabled. It is not
+        // strictly necessary to trigger on this but it won't hurt anything and may catch some cases
+        // where a package has changed while disabled.
+        // Note: ACTION_PACKAGE_CHANGED is not fired when updating a suspended app, but
+        // ACTION_PACKAGE_ADDED, ACTION_PACKAGE_REMOVED and ACTION_PACKAGE_REPLACED are (and the app
+        // is left in an unsuspended state after this).
+        packageIntentFilter.addAction(Intent.ACTION_PACKAGE_CHANGED);
+
+        // We do not register for ACTION_PACKAGE_RESTARTED because it doesn't imply an update.
+        // We do not register for ACTION_PACKAGE_DATA_CLEARED because the updater / data apps are
+        // not expected to need local data.
+
+        Receiver packageUpdateReceiver = new Receiver(packageTracker);
+        mContext.registerReceiver(packageUpdateReceiver, packageIntentFilter);
+    }
+
+    /** Sends an intent to trigger an update check. */
+    @Override
+    public void sendTriggerUpdateCheck(CheckToken checkToken) {
+        RulesUpdaterContract.sendBroadcast(
+                mContext, mUpdaterAppPackageName, checkToken.toByteArray());
+        EventLogTags.writeTimezoneTriggerCheck(checkToken.toString());
+    }
+
+    @Override
+    public synchronized void scheduleReliabilityTrigger(long minimumDelayMillis) {
+        TimeZoneUpdateIdler.schedule(mContext, minimumDelayMillis);
+    }
+
+    @Override
+    public synchronized void unscheduleReliabilityTrigger() {
+        TimeZoneUpdateIdler.unschedule(mContext);
+    }
+
+    private static class Receiver extends BroadcastReceiver {
+        private final PackageTracker mPackageTracker;
+
+        private Receiver(PackageTracker packageTracker) {
+            mPackageTracker = packageTracker;
+        }
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            Slog.d(TAG, "Received intent: " + intent.toString());
+            mPackageTracker.triggerUpdateIfNeeded(true /* packageChanged */);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/timezone/PackageManagerHelper.java b/services/core/java/com/android/server/timezone/PackageManagerHelper.java
new file mode 100644
index 0000000..804941a
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/PackageManagerHelper.java
@@ -0,0 +1,41 @@
+/*
+ * 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.timezone;
+
+import android.content.Intent;
+import android.content.pm.PackageManager;
+
+/**
+ * An easy-to-mock facade around PackageManager for use by {@link PackageTracker}; it is not
+ * possible to test various cases with the real one because of the need to simulate package versions
+ * and manifest configurations.
+ */
+interface PackageManagerHelper {
+
+    int getInstalledPackageVersion(String packageName)
+            throws PackageManager.NameNotFoundException;
+
+    boolean isPrivilegedApp(String packageName) throws PackageManager.NameNotFoundException;
+
+    boolean usesPermission(String packageName, String requiredPermissionName)
+                    throws PackageManager.NameNotFoundException;
+
+    boolean contentProviderRegistered(String authority, String requiredPackageName);
+
+    boolean receiverRegistered(Intent intent, String requiredPermissionName)
+                            throws PackageManager.NameNotFoundException;
+}
diff --git a/services/core/java/com/android/server/timezone/PackageStatus.java b/services/core/java/com/android/server/timezone/PackageStatus.java
new file mode 100644
index 0000000..6379096
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/PackageStatus.java
@@ -0,0 +1,89 @@
+/*
+ * 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.timezone;
+
+import android.annotation.IntDef;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Information about the status of the time zone update / data packages that are persisted by the
+ * Android system.
+ */
+final class PackageStatus {
+
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({ CHECK_STARTED, CHECK_COMPLETED_SUCCESS, CHECK_COMPLETED_FAILURE })
+    @interface CheckStatus {}
+
+    /** A time zone update check has been started but not yet completed. */
+    static final int CHECK_STARTED = 1;
+    /** A time zone update check has been completed and succeeded. */
+    static final int CHECK_COMPLETED_SUCCESS = 2;
+    /** A time zone update check has been completed and failed. */
+    static final int CHECK_COMPLETED_FAILURE = 3;
+
+    @CheckStatus
+    final int mCheckStatus;
+
+    // Non-null
+    final PackageVersions mVersions;
+
+    PackageStatus(@CheckStatus int checkStatus, PackageVersions versions) {
+        this.mCheckStatus = checkStatus;
+        if (checkStatus < 1 || checkStatus > 3) {
+            throw new IllegalArgumentException("Unknown checkStatus " + checkStatus);
+        }
+        if (versions == null) {
+            throw new NullPointerException("versions == null");
+        }
+        this.mVersions = versions;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        PackageStatus that = (PackageStatus) o;
+
+        if (mCheckStatus != that.mCheckStatus) {
+            return false;
+        }
+        return mVersions.equals(that.mVersions);
+    }
+
+    @Override
+    public int hashCode() {
+        int result = mCheckStatus;
+        result = 31 * result + mVersions.hashCode();
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "PackageStatus{" +
+                "mCheckStatus=" + mCheckStatus +
+                ", mVersions=" + mVersions +
+                '}';
+    }
+}
diff --git a/services/core/java/com/android/server/timezone/PackageStatusStorage.java b/services/core/java/com/android/server/timezone/PackageStatusStorage.java
new file mode 100644
index 0000000..cac7f7b
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/PackageStatusStorage.java
@@ -0,0 +1,385 @@
+/*
+ * 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.timezone;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.util.FastXmlSerializer;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
+import android.util.AtomicFile;
+import android.util.Slog;
+import android.util.Xml;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.text.ParseException;
+import java.io.PrintWriter;
+
+import static com.android.server.timezone.PackageStatus.CHECK_COMPLETED_FAILURE;
+import static com.android.server.timezone.PackageStatus.CHECK_COMPLETED_SUCCESS;
+import static com.android.server.timezone.PackageStatus.CHECK_STARTED;
+import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
+import static org.xmlpull.v1.XmlPullParser.START_TAG;
+
+/**
+ * Storage logic for accessing/mutating the Android system's persistent state related to time zone
+ * update checking. There is expected to be a single instance. All non-private methods are thread
+ * safe.
+ */
+final class PackageStatusStorage {
+
+    private static final String LOG_TAG = "timezone.PackageStatusStorage";
+
+    private static final String TAG_PACKAGE_STATUS = "PackageStatus";
+
+    /**
+     * Attribute that stores a monotonically increasing lock ID, used to detect concurrent update
+     * issues without on-line locks. Incremented on every write.
+     */
+    private static final String ATTRIBUTE_OPTIMISTIC_LOCK_ID = "optimisticLockId";
+
+    /**
+     * Attribute that stores the current "check status" of the time zone update application
+     * packages.
+     */
+    private static final String ATTRIBUTE_CHECK_STATUS = "checkStatus";
+
+    /**
+     * Attribute that stores the version of the time zone rules update application being checked
+     * / last checked.
+     */
+    private static final String ATTRIBUTE_UPDATE_APP_VERSION = "updateAppPackageVersion";
+
+    /**
+     * Attribute that stores the version of the time zone rules data application being checked
+     * / last checked.
+     */
+    private static final String ATTRIBUTE_DATA_APP_VERSION = "dataAppPackageVersion";
+
+    private static final int UNKNOWN_PACKAGE_VERSION = -1;
+
+    private final AtomicFile mPackageStatusFile;
+
+    PackageStatusStorage(File storageDir) {
+        mPackageStatusFile = new AtomicFile(new File(storageDir, "package-status.xml"));
+        if (!mPackageStatusFile.getBaseFile().exists()) {
+            try {
+                insertInitialPackageStatus();
+            } catch (IOException e) {
+                throw new IllegalStateException(e);
+            }
+        }
+    }
+
+    void deleteFileForTests() {
+        synchronized(this) {
+            mPackageStatusFile.delete();
+        }
+    }
+
+    /**
+     * Obtain the current check status of the application packages. Returns {@code null} the first
+     * time it is called, or after {@link #resetCheckState()}.
+     */
+    PackageStatus getPackageStatus() {
+        synchronized (this) {
+            try {
+                return getPackageStatusLocked();
+            } catch (ParseException e) {
+                // This means that data exists in the file but it was bad.
+                Slog.e(LOG_TAG, "Package status invalid, resetting and retrying", e);
+
+                // Reset the storage so it is in a good state again.
+                recoverFromBadData(e);
+                try {
+                    return getPackageStatusLocked();
+                } catch (ParseException e2) {
+                    throw new IllegalStateException("Recovery from bad file failed", e2);
+                }
+            }
+        }
+    }
+
+    @GuardedBy("this")
+    private PackageStatus getPackageStatusLocked() throws ParseException {
+        try (FileInputStream fis = mPackageStatusFile.openRead()) {
+            XmlPullParser parser = parseToPackageStatusTag(fis);
+            Integer checkStatus = getNullableIntAttribute(parser, ATTRIBUTE_CHECK_STATUS);
+            if (checkStatus == null) {
+                return null;
+            }
+            int updateAppVersion = getIntAttribute(parser, ATTRIBUTE_UPDATE_APP_VERSION);
+            int dataAppVersion = getIntAttribute(parser, ATTRIBUTE_DATA_APP_VERSION);
+            return new PackageStatus(checkStatus,
+                    new PackageVersions(updateAppVersion, dataAppVersion));
+        } catch (IOException e) {
+            ParseException e2 = new ParseException("Error reading package status", 0);
+            e2.initCause(e);
+            throw e2;
+        }
+    }
+
+    @GuardedBy("this")
+    private int recoverFromBadData(Exception cause) {
+        mPackageStatusFile.delete();
+        try {
+            return insertInitialPackageStatus();
+        } catch (IOException e) {
+            IllegalStateException fatal = new IllegalStateException(e);
+            fatal.addSuppressed(cause);
+            throw fatal;
+        }
+    }
+
+    /** Insert the initial data, returning the optimistic lock ID */
+    private int insertInitialPackageStatus() throws IOException {
+        // Doesn't matter what it is, but we avoid the obvious starting value each time the data
+        // is reset to ensure that old tokens are unlikely to work.
+        final int initialOptimisticLockId = (int) System.currentTimeMillis();
+
+        writePackageStatusLocked(null /* status */, initialOptimisticLockId,
+                null /* packageVersions */);
+        return initialOptimisticLockId;
+    }
+
+    /**
+     * Generate a new {@link CheckToken} that can be passed to the time zone rules update
+     * application.
+     */
+    CheckToken generateCheckToken(PackageVersions currentInstalledVersions) {
+        if (currentInstalledVersions == null) {
+            throw new NullPointerException("currentInstalledVersions == null");
+        }
+
+        synchronized (this) {
+            int optimisticLockId;
+            try {
+                optimisticLockId = getCurrentOptimisticLockId();
+            } catch (ParseException e) {
+                Slog.w(LOG_TAG, "Unable to find optimistic lock ID from package status");
+
+                // Recover.
+                optimisticLockId = recoverFromBadData(e);
+            }
+
+            int newOptimisticLockId = optimisticLockId + 1;
+            try {
+                boolean statusUpdated = writePackageStatusWithOptimisticLockCheck(
+                        optimisticLockId, newOptimisticLockId, CHECK_STARTED,
+                        currentInstalledVersions);
+                if (!statusUpdated) {
+                    throw new IllegalStateException("Unable to update status to CHECK_STARTED."
+                            + " synchronization failure?");
+                }
+                return new CheckToken(newOptimisticLockId, currentInstalledVersions);
+            } catch (IOException e) {
+                throw new IllegalStateException(e);
+            }
+        }
+    }
+
+    /**
+     * Reset the current device state to "unknown".
+     */
+    void resetCheckState() {
+        synchronized(this) {
+            int optimisticLockId;
+            try {
+                optimisticLockId = getCurrentOptimisticLockId();
+            } catch (ParseException e) {
+                Slog.w(LOG_TAG, "resetCheckState: Unable to find optimistic lock ID from package"
+                        + " status");
+                // Attempt to recover the storage state.
+                optimisticLockId = recoverFromBadData(e);
+            }
+
+            int newOptimisticLockId = optimisticLockId + 1;
+            try {
+                if (!writePackageStatusWithOptimisticLockCheck(optimisticLockId,
+                        newOptimisticLockId, null /* status */, null /* packageVersions */)) {
+                    throw new IllegalStateException("resetCheckState: Unable to reset package"
+                            + " status, newOptimisticLockId=" + newOptimisticLockId);
+                }
+            } catch (IOException e) {
+                throw new IllegalStateException(e);
+            }
+        }
+    }
+
+    /**
+     * Update the current device state if possible. Returns true if the update was successful.
+     * {@code false} indicates the storage has been changed since the {@link CheckToken} was
+     * generated and the update was discarded.
+     */
+    boolean markChecked(CheckToken checkToken, boolean succeeded) {
+        synchronized (this) {
+            int optimisticLockId = checkToken.mOptimisticLockId;
+            int newOptimisticLockId = optimisticLockId + 1;
+            int status = succeeded ? CHECK_COMPLETED_SUCCESS : CHECK_COMPLETED_FAILURE;
+            try {
+                return writePackageStatusWithOptimisticLockCheck(optimisticLockId,
+                        newOptimisticLockId, status, checkToken.mPackageVersions);
+            } catch (IOException e) {
+                throw new IllegalStateException(e);
+            }
+        }
+    }
+
+    @GuardedBy("this")
+    private int getCurrentOptimisticLockId() throws ParseException {
+        try (FileInputStream fis = mPackageStatusFile.openRead()) {
+            XmlPullParser parser = parseToPackageStatusTag(fis);
+            return getIntAttribute(parser, ATTRIBUTE_OPTIMISTIC_LOCK_ID);
+        } catch (IOException e) {
+            ParseException e2 = new ParseException("Unable to read file", 0);
+            e2.initCause(e);
+            throw e2;
+        }
+    }
+
+    /** Returns a parser or throws ParseException, never returns null. */
+    private static XmlPullParser parseToPackageStatusTag(FileInputStream fis)
+            throws ParseException {
+        try {
+            XmlPullParser parser = Xml.newPullParser();
+            parser.setInput(fis, StandardCharsets.UTF_8.name());
+            int type;
+            while ((type = parser.next()) != END_DOCUMENT) {
+                final String tag = parser.getName();
+                if (type == START_TAG && TAG_PACKAGE_STATUS.equals(tag)) {
+                    return parser;
+                }
+            }
+            throw new ParseException("Unable to find " + TAG_PACKAGE_STATUS + " tag", 0);
+        } catch (XmlPullParserException e) {
+            throw new IllegalStateException("Unable to configure parser", e);
+        } catch (IOException e) {
+            ParseException e2 = new ParseException("Error reading XML", 0);
+            e.initCause(e);
+            throw e2;
+        }
+    }
+
+    @GuardedBy("this")
+    private boolean writePackageStatusWithOptimisticLockCheck(int optimisticLockId,
+            int newOptimisticLockId, Integer status, PackageVersions packageVersions)
+            throws IOException {
+
+        int currentOptimisticLockId;
+        try {
+            currentOptimisticLockId = getCurrentOptimisticLockId();
+            if (currentOptimisticLockId != optimisticLockId) {
+                return false;
+            }
+        } catch (ParseException e) {
+            recoverFromBadData(e);
+            return false;
+        }
+
+        writePackageStatusLocked(status, newOptimisticLockId, packageVersions);
+        return true;
+    }
+
+    @GuardedBy("this")
+    private void writePackageStatusLocked(Integer status, int optimisticLockId,
+            PackageVersions packageVersions) throws IOException {
+        if ((status == null) != (packageVersions == null)) {
+            throw new IllegalArgumentException(
+                    "Provide both status and packageVersions, or neither.");
+        }
+
+        FileOutputStream fos = null;
+        try {
+            fos = mPackageStatusFile.startWrite();
+            XmlSerializer serializer = new FastXmlSerializer();
+            serializer.setOutput(fos, StandardCharsets.UTF_8.name());
+            serializer.startDocument(null /* encoding */, true /* standalone */);
+            final String namespace = null;
+            serializer.startTag(namespace, TAG_PACKAGE_STATUS);
+            String statusAttributeValue = status == null ? "" : Integer.toString(status);
+            serializer.attribute(namespace, ATTRIBUTE_CHECK_STATUS, statusAttributeValue);
+            serializer.attribute(namespace, ATTRIBUTE_OPTIMISTIC_LOCK_ID,
+                    Integer.toString(optimisticLockId));
+            int updateAppVersion = status == null
+                    ? UNKNOWN_PACKAGE_VERSION : packageVersions.mUpdateAppVersion;
+            serializer.attribute(namespace, ATTRIBUTE_UPDATE_APP_VERSION,
+                    Integer.toString(updateAppVersion));
+            int dataAppVersion = status == null
+                    ? UNKNOWN_PACKAGE_VERSION : packageVersions.mDataAppVersion;
+            serializer.attribute(namespace, ATTRIBUTE_DATA_APP_VERSION,
+                    Integer.toString(dataAppVersion));
+            serializer.endTag(namespace, TAG_PACKAGE_STATUS);
+            serializer.endDocument();
+            serializer.flush();
+            mPackageStatusFile.finishWrite(fos);
+        } catch (IOException e) {
+            if (fos != null) {
+                mPackageStatusFile.failWrite(fos);
+            }
+            throw e;
+        }
+
+    }
+
+    /** Only used during tests to force a known table state. */
+    public void forceCheckStateForTests(int checkStatus, PackageVersions packageVersions) {
+        synchronized (this) {
+            try {
+                int optimisticLockId = getCurrentOptimisticLockId();
+                writePackageStatusWithOptimisticLockCheck(optimisticLockId, optimisticLockId,
+                        checkStatus, packageVersions);
+            } catch (IOException | ParseException e) {
+                throw new IllegalStateException(e);
+            }
+        }
+    }
+
+    private static Integer getNullableIntAttribute(XmlPullParser parser, String attributeName)
+            throws ParseException {
+        String attributeValue = parser.getAttributeValue(null, attributeName);
+        try {
+            if (attributeValue == null) {
+                throw new ParseException("Attribute " + attributeName + " missing", 0);
+            } else if (attributeValue.isEmpty()) {
+                return null;
+            }
+            return Integer.parseInt(attributeValue);
+        } catch (NumberFormatException e) {
+            throw new ParseException(
+                    "Bad integer for attributeName=" + attributeName + ": " + attributeValue, 0);
+        }
+    }
+
+    private static int getIntAttribute(XmlPullParser parser, String attributeName)
+            throws ParseException {
+        Integer value = getNullableIntAttribute(parser, attributeName);
+        if (value == null) {
+            throw new ParseException("Missing attribute " + attributeName, 0);
+        }
+        return value;
+    }
+
+    public void dump(PrintWriter printWriter) {
+        printWriter.println("Package status: " + getPackageStatus());
+    }
+}
diff --git a/services/core/java/com/android/server/timezone/PackageTracker.java b/services/core/java/com/android/server/timezone/PackageTracker.java
new file mode 100644
index 0000000..f0306b9
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/PackageTracker.java
@@ -0,0 +1,536 @@
+/*
+ * 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.timezone;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import android.app.timezone.RulesUpdaterContract;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.Environment;
+import android.provider.TimeZoneRulesDataContract;
+import android.util.Slog;
+
+import java.io.File;
+import java.io.PrintWriter;
+
+/**
+ * Monitors the installed applications associated with time zone updates. If the app packages are
+ * updated it indicates there <em>might</em> be a time zone rules update to apply so a targeted
+ * broadcast intent is used to trigger the time zone updater app.
+ *
+ * <p>The "update triggering" behavior of this component can be disabled via device configuration.
+ *
+ * <p>The package tracker listens for package updates of the time zone "updater app" and "data app".
+ * It also listens for "reliability" triggers. Reliability triggers are there to ensure that the
+ * package tracker handles failures reliably and are "idle maintenance" events or something similar.
+ * Reliability triggers can cause a time zone update check to take place if the current state is
+ * unclear. For example, it can be unclear after boot or after a failure. If there are repeated
+ * failures reliability updates are halted until the next boot.
+ *
+ * <p>This component keeps persistent track of the most recent app packages checked to avoid
+ * unnecessary expense from broadcasting intents (which will cause other app processes to spawn).
+ * The current status is also stored to detect whether the most recently-generated check is
+ * complete successfully. For example, if the device was interrupted while doing a check and never
+ * acknowledged a check then a check will be retried the next time a "reliability trigger" event
+ * happens.
+ */
+// Also made non-final so it can be mocked.
+@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+public class PackageTracker {
+    private static final String TAG = "timezone.PackageTracker";
+
+    private final PackageManagerHelper mPackageManagerHelper;
+    private final IntentHelper mIntentHelper;
+    private final ConfigHelper mConfigHelper;
+    private final PackageStatusStorage mPackageStatusStorage;
+    private final ClockHelper mClockHelper;
+
+    // False if tracking is disabled.
+    private boolean mTrackingEnabled;
+
+    // These fields may be null if package tracking is disabled.
+    private String mUpdateAppPackageName;
+    private String mDataAppPackageName;
+
+    // The time a triggered check is allowed to take before it is considered overdue.
+    private int mCheckTimeAllowedMillis;
+    // The number of failed checks in a row before reliability checks should stop happening.
+    private long mFailedCheckRetryCount;
+
+    /*
+     * The minimum delay between a successive reliability triggers / other operations. Should to be
+     * larger than mCheckTimeAllowedMillis to avoid reliability triggers happening during package
+     * update checks.
+     */
+    private int mDelayBeforeReliabilityCheckMillis;
+
+    // Reliability check state: If a check was triggered but not acknowledged within
+    // mCheckTimeAllowedMillis then another one can be triggered.
+    private Long mLastTriggerTimestamp = null;
+
+    // Reliability check state: Whether any checks have been triggered at all.
+    private boolean mCheckTriggered;
+
+    // Reliability check state: A count of how many failures have occurred consecutively.
+    private int mCheckFailureCount;
+
+    /** Creates the {@link PackageTracker} for normal use. */
+    static PackageTracker create(Context context) {
+        PackageTrackerHelperImpl helperImpl = new PackageTrackerHelperImpl(context);
+        // TODO(nfuller): Switch to FileUtils.createDir() when available. http://b/31008728
+        File storageDir = new File(Environment.getDataSystemDirectory(), "timezone");
+        if (!storageDir.exists()) {
+            storageDir.mkdir();
+        }
+
+        return new PackageTracker(
+                helperImpl /* clock */,
+                helperImpl /* configHelper */,
+                helperImpl /* packageManagerHelper */,
+                new PackageStatusStorage(storageDir),
+                new IntentHelperImpl(context));
+    }
+
+    // A constructor that can be used by tests to supply mocked / faked dependencies.
+    PackageTracker(ClockHelper clockHelper, ConfigHelper configHelper,
+            PackageManagerHelper packageManagerHelper, PackageStatusStorage packageStatusStorage,
+            IntentHelper intentHelper) {
+        mClockHelper = clockHelper;
+        mConfigHelper = configHelper;
+        mPackageManagerHelper = packageManagerHelper;
+        mPackageStatusStorage = packageStatusStorage;
+        mIntentHelper = intentHelper;
+    }
+
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    protected synchronized void start() {
+        mTrackingEnabled = mConfigHelper.isTrackingEnabled();
+        if (!mTrackingEnabled) {
+            Slog.i(TAG, "Time zone updater / data package tracking explicitly disabled.");
+            return;
+        }
+
+        mUpdateAppPackageName = mConfigHelper.getUpdateAppPackageName();
+        mDataAppPackageName = mConfigHelper.getDataAppPackageName();
+        mCheckTimeAllowedMillis = mConfigHelper.getCheckTimeAllowedMillis();
+        mFailedCheckRetryCount = mConfigHelper.getFailedCheckRetryCount();
+        mDelayBeforeReliabilityCheckMillis = mCheckTimeAllowedMillis + (60 * 1000);
+
+        // Validate the device configuration including the application packages.
+        // The manifest entries in the apps themselves are not validated until use as they can
+        // change and we don't want to prevent the system server starting due to a bad application.
+        throwIfDeviceSettingsOrAppsAreBad();
+
+        // Explicitly start in a reliability state where reliability triggering will do something.
+        mCheckTriggered = false;
+        mCheckFailureCount = 0;
+
+        // Initialize the intent helper.
+        mIntentHelper.initialize(mUpdateAppPackageName, mDataAppPackageName, this);
+
+        // Schedule a reliability trigger so we will have at least one after boot. This will allow
+        // us to catch if a package updated wasn't handled to completion. There's no hurry: it's ok
+        // to delay for a while before doing this even if idle.
+        mIntentHelper.scheduleReliabilityTrigger(mDelayBeforeReliabilityCheckMillis);
+
+        Slog.i(TAG, "Time zone updater / data package tracking enabled");
+    }
+
+    /**
+     * Performs checks that confirm the system image has correctly configured package
+     * tracking configuration. Only called if package tracking is enabled. Throws an exception if
+     * the device is configured badly which will prevent the device booting.
+     */
+    private void throwIfDeviceSettingsOrAppsAreBad() {
+        // None of the checks below can be based on application manifest settings, otherwise a bad
+        // update could leave the device in an unbootable state. See validateDataAppManifest() and
+        // validateUpdaterAppManifest() for softer errors.
+
+        throwRuntimeExceptionIfNullOrEmpty(
+                mUpdateAppPackageName, "Update app package name missing.");
+        throwRuntimeExceptionIfNullOrEmpty(mDataAppPackageName, "Data app package name missing.");
+        if (mFailedCheckRetryCount < 1) {
+            throw logAndThrowRuntimeException("mFailedRetryCount=" + mFailedCheckRetryCount, null);
+        }
+        if (mCheckTimeAllowedMillis < 1000) {
+            throw logAndThrowRuntimeException(
+                    "mCheckTimeAllowedMillis=" + mCheckTimeAllowedMillis, null);
+        }
+
+        // Validate the updater application package.
+        try {
+            if (!mPackageManagerHelper.isPrivilegedApp(mUpdateAppPackageName)) {
+                throw logAndThrowRuntimeException(
+                        "Update app " + mUpdateAppPackageName + " must be a priv-app.", null);
+            }
+        } catch (PackageManager.NameNotFoundException e) {
+            throw logAndThrowRuntimeException("Could not determine update app package details for "
+                    + mUpdateAppPackageName, e);
+        }
+        Slog.d(TAG, "Update app " + mUpdateAppPackageName + " is valid.");
+
+        // Validate the data application package.
+        try {
+            if (!mPackageManagerHelper.isPrivilegedApp(mDataAppPackageName)) {
+                throw logAndThrowRuntimeException(
+                        "Data app " + mDataAppPackageName + " must be a priv-app.", null);
+            }
+        } catch (PackageManager.NameNotFoundException e) {
+            throw logAndThrowRuntimeException("Could not determine data app package details for "
+                    + mDataAppPackageName, e);
+        }
+        Slog.d(TAG, "Data app " + mDataAppPackageName + " is valid.");
+    }
+
+    /**
+     * Inspects the current in-memory state, installed packages and storage state to determine if an
+     * update check is needed and then trigger if it is.
+     *
+     * @param packageChanged true if this method was called because a known packaged definitely
+     *     changed, false if the cause is a reliability trigger
+     */
+    public synchronized void triggerUpdateIfNeeded(boolean packageChanged) {
+        if (!mTrackingEnabled) {
+            throw new IllegalStateException("Unexpected call. Tracking is disabled.");
+        }
+
+        // Validate the applications' current manifest entries: make sure they are configured as
+        // they should be. These are not fatal and just means that no update is triggered: we don't
+        // want to take down the system server if an OEM or Google have pushed a bad update to
+        // an application.
+        boolean updaterAppManifestValid = validateUpdaterAppManifest();
+        boolean dataAppManifestValid = validateDataAppManifest();
+        if (!updaterAppManifestValid || !dataAppManifestValid) {
+            Slog.e(TAG, "No update triggered due to invalid application manifest entries."
+                    + " updaterApp=" + updaterAppManifestValid
+                    + ", dataApp=" + dataAppManifestValid);
+
+            // There's no point in doing any reliability triggers if the current packages are bad.
+            mIntentHelper.unscheduleReliabilityTrigger();
+            return;
+        }
+
+        if (!packageChanged) {
+            // This call was made because the device is doing a "reliability" check.
+            // 4 possible cases:
+            // 1) No check has previously triggered since restart. We want to trigger in this case.
+            // 2) A check has previously triggered and it is in progress. We want to trigger if
+            //    the response is overdue.
+            // 3) A check has previously triggered and it failed. We want to trigger, but only if
+            //    we're not in a persistent failure state.
+            // 4) A check has previously triggered and it succeeded.
+            //    We don't want to trigger, and want to stop future triggers.
+
+            if (!mCheckTriggered) {
+                // Case 1.
+                Slog.d(TAG, "triggerUpdateIfNeeded: First reliability trigger.");
+            } else if (isCheckInProgress()) {
+                // Case 2.
+                if (!isCheckResponseOverdue()) {
+                    // A check is in progress but hasn't been given time to succeed.
+                    Slog.d(TAG,
+                            "triggerUpdateIfNeeded: checkComplete call is not yet overdue."
+                                    + " Not triggering.");
+                    // Don't do any work now but we do schedule a future reliability trigger.
+                    mIntentHelper.scheduleReliabilityTrigger(mDelayBeforeReliabilityCheckMillis);
+                    return;
+                }
+            } else if (mCheckFailureCount > mFailedCheckRetryCount) {
+                // Case 3. If the system is in some kind of persistent failure state we don't want
+                // to keep checking, so just stop.
+                Slog.i(TAG, "triggerUpdateIfNeeded: number of allowed consecutive check failures"
+                        + " exceeded. Stopping reliability triggers until next reboot or package"
+                        + " update.");
+                mIntentHelper.unscheduleReliabilityTrigger();
+                return;
+            } else if (mCheckFailureCount == 0) {
+                // Case 4.
+                Slog.i(TAG, "triggerUpdateIfNeeded: No reliability check required. Last check was"
+                        + " successful.");
+                mIntentHelper.unscheduleReliabilityTrigger();
+                return;
+            }
+        }
+
+        // Read the currently installed data / updater package versions.
+        PackageVersions currentInstalledVersions = lookupInstalledPackageVersions();
+        if (currentInstalledVersions == null) {
+            // This should not happen if the device is configured in a valid way.
+            Slog.e(TAG, "triggerUpdateIfNeeded: currentInstalledVersions was null");
+            mIntentHelper.unscheduleReliabilityTrigger();
+            return;
+        }
+
+        // Establish the current state using package manager and stored state. Determine if we have
+        // already successfully checked the installed versions.
+        PackageStatus packageStatus = mPackageStatusStorage.getPackageStatus();
+        if (packageStatus == null) {
+            // This can imply corrupt, uninitialized storage state (e.g. first check ever on a
+            // device) or after some kind of reset.
+            Slog.i(TAG, "triggerUpdateIfNeeded: No package status data found. Data check needed.");
+        } else if (!packageStatus.mVersions.equals(currentInstalledVersions)) {
+            // The stored package version information differs from the installed version.
+            // Trigger the check in all cases.
+            Slog.i(TAG, "triggerUpdateIfNeeded: Stored package versions="
+                    + packageStatus.mVersions + ", do not match current package versions="
+                    + currentInstalledVersions + ". Triggering check.");
+        } else {
+            Slog.i(TAG, "triggerUpdateIfNeeded: Stored package versions match currently"
+                    + " installed versions, currentInstalledVersions=" + currentInstalledVersions
+                    + ", packageStatus.mCheckStatus=" + packageStatus.mCheckStatus);
+            if (packageStatus.mCheckStatus == PackageStatus.CHECK_COMPLETED_SUCCESS) {
+                // The last check succeeded and nothing has changed. Do nothing and disable
+                // reliability checks.
+                Slog.i(TAG, "triggerUpdateIfNeeded: Prior check succeeded. No need to trigger.");
+                mIntentHelper.unscheduleReliabilityTrigger();
+                return;
+            }
+        }
+
+        // Generate a token to send to the updater app.
+        CheckToken checkToken =
+                mPackageStatusStorage.generateCheckToken(currentInstalledVersions);
+        if (checkToken == null) {
+            Slog.w(TAG, "triggerUpdateIfNeeded: Unable to generate check token."
+                    + " Not sending check request.");
+            // Trigger again later: perhaps we'll have better luck.
+            mIntentHelper.scheduleReliabilityTrigger(mDelayBeforeReliabilityCheckMillis);
+            return;
+        }
+
+        // Trigger the update check.
+        mIntentHelper.sendTriggerUpdateCheck(checkToken);
+        mCheckTriggered = true;
+
+        // Update the reliability check state in case the update fails.
+        setCheckInProgress();
+
+        // Schedule a reliability trigger in case the update check doesn't succeed and there is no
+        // response at all. It will be cancelled if the check is successful in recordCheckResult.
+        mIntentHelper.scheduleReliabilityTrigger(mDelayBeforeReliabilityCheckMillis);
+    }
+
+    /**
+     * Used to record the result of a check. Can be called even if active package tracking is
+     * disabled.
+     */
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    protected synchronized void recordCheckResult(CheckToken checkToken, boolean success) {
+        Slog.i(TAG, "recordOperationResult: checkToken=" + checkToken + " success=" + success);
+
+        // If package tracking is disabled it means no record-keeping is required. However, we do
+        // want to clear out any stored state to make it clear that the current state is unknown and
+        // should tracking become enabled again (perhaps through an OTA) we'd need to perform an
+        // update check.
+        if (!mTrackingEnabled) {
+            // This means an updater has spontaneously modified time zone data without having been
+            // triggered. This can happen if the OEM is handling their own updates, but we don't
+            // need to do any tracking in this case.
+
+            if (checkToken == null) {
+                // This is the expected case if tracking is disabled but an OEM is handling time
+                // zone installs using their own mechanism.
+                Slog.d(TAG, "recordCheckResult: Tracking is disabled and no token has been"
+                        + " provided. Resetting tracking state.");
+            } else {
+                // This is unexpected. If tracking is disabled then no check token should have been
+                // generated by the package tracker. An updater should never create its own token.
+                // This could be a bug in the updater.
+                Slog.w(TAG, "recordCheckResult: Tracking is disabled and a token " + checkToken
+                        + " has been unexpectedly provided. Resetting tracking state.");
+            }
+            mPackageStatusStorage.resetCheckState();
+            return;
+        }
+
+        if (checkToken == null) {
+            /*
+             * If the checkToken is null it suggests an install / uninstall / acknowledgement has
+             * occurred without a prior trigger (or the client didn't return the token it was given
+             * for some reason, perhaps a bug).
+             *
+             * This shouldn't happen under normal circumstances:
+             *
+             * If package tracking is enabled, we assume it is the package tracker responsible for
+             * triggering updates and a token should have been produced and returned.
+             *
+             * If the OEM is handling time zone updates case package tracking should be disabled.
+             *
+             * This could happen in tests. The device should recover back to a known state by
+             * itself rather than be left in an invalid state.
+             *
+             * We treat this as putting the device into an unknown state and make sure that
+             * reliability triggering is enabled so we should recover.
+             */
+            Slog.i(TAG, "recordCheckResult: Unexpectedly missing checkToken, resetting"
+                    + " storage state.");
+            mPackageStatusStorage.resetCheckState();
+
+            // Schedule a reliability trigger and reset the failure count so we know that the
+            // next reliability trigger will do something.
+            mIntentHelper.scheduleReliabilityTrigger(mDelayBeforeReliabilityCheckMillis);
+            mCheckFailureCount = 0;
+        } else {
+            // This is the expected case when tracking is enabled: a check was triggered and it has
+            // completed.
+            boolean recordedCheckCompleteSuccessfully =
+                    mPackageStatusStorage.markChecked(checkToken, success);
+            if (recordedCheckCompleteSuccessfully) {
+                // If we have recorded the result (whatever it was) we know there is no check in
+                // progress.
+                setCheckComplete();
+
+                if (success) {
+                    // Since the check was successful, no reliability trigger is required until
+                    // there is a package change.
+                    mIntentHelper.unscheduleReliabilityTrigger();
+                    mCheckFailureCount = 0;
+                } else {
+                    // Enable schedule a reliability trigger to check again in future.
+                    mIntentHelper.scheduleReliabilityTrigger(mDelayBeforeReliabilityCheckMillis);
+                    mCheckFailureCount++;
+                }
+            } else {
+                // The failure to record the check means an optimistic lock failure and suggests
+                // that another check was triggered after the token was generated.
+                Slog.i(TAG, "recordCheckResult: could not update token=" + checkToken
+                        + " with success=" + success + ". Optimistic lock failure");
+
+                // Schedule a reliability trigger to potentially try again in future.
+                mIntentHelper.scheduleReliabilityTrigger(mDelayBeforeReliabilityCheckMillis);
+                mCheckFailureCount++;
+            }
+        }
+    }
+
+    /** Access to consecutive failure counts for use in tests. */
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    protected int getCheckFailureCountForTests() {
+        return mCheckFailureCount;
+    }
+
+    private void setCheckInProgress() {
+        mLastTriggerTimestamp = mClockHelper.currentTimestamp();
+    }
+
+    private void setCheckComplete() {
+        mLastTriggerTimestamp = null;
+    }
+
+    private boolean isCheckInProgress() {
+        return mLastTriggerTimestamp != null;
+    }
+
+    private boolean isCheckResponseOverdue() {
+        if (mLastTriggerTimestamp == null) {
+            return false;
+        }
+        // Risk of overflow, but highly unlikely given the implementation and not problematic.
+        return mClockHelper.currentTimestamp() > mLastTriggerTimestamp + mCheckTimeAllowedMillis;
+    }
+
+    private PackageVersions lookupInstalledPackageVersions() {
+        int updatePackageVersion;
+        int dataPackageVersion;
+        try {
+            updatePackageVersion =
+                    mPackageManagerHelper.getInstalledPackageVersion(mUpdateAppPackageName);
+            dataPackageVersion =
+                    mPackageManagerHelper.getInstalledPackageVersion(mDataAppPackageName);
+        } catch (PackageManager.NameNotFoundException e) {
+            Slog.w(TAG, "lookupInstalledPackageVersions: Unable to resolve installed package"
+                    + " versions", e);
+            return null;
+        }
+        return new PackageVersions(updatePackageVersion, dataPackageVersion);
+    }
+
+    private boolean validateDataAppManifest() {
+        // We only want to talk to a provider that exposed by the known data app package
+        // so we look up the providers exposed by that app and check the well-known authority is
+        // there. This prevents the case where *even if* the data app doesn't expose the provider
+        // required, another app cannot expose one to replace it.
+        if (!mPackageManagerHelper.contentProviderRegistered(
+                TimeZoneRulesDataContract.AUTHORITY, mDataAppPackageName)) {
+            // Error! Found the package but it didn't expose the correct provider.
+            Slog.w(TAG, "validateDataAppManifest: Data app " + mDataAppPackageName
+                    + " does not expose the required provider with authority="
+                    + TimeZoneRulesDataContract.AUTHORITY);
+            return false;
+        }
+        return true;
+    }
+
+    private boolean validateUpdaterAppManifest() {
+        try {
+            // The updater app is expected to have the UPDATE_TIME_ZONE_RULES permission.
+            // The updater app is expected to have a receiver for the intent we are going to trigger
+            // and require the TRIGGER_TIME_ZONE_RULES_CHECK.
+            if (!mPackageManagerHelper.usesPermission(
+                    mUpdateAppPackageName,
+                    RulesUpdaterContract.UPDATE_TIME_ZONE_RULES_PERMISSION)) {
+                Slog.w(TAG, "validateUpdaterAppManifest: Updater app " + mDataAppPackageName
+                        + " does not use permission="
+                        + RulesUpdaterContract.UPDATE_TIME_ZONE_RULES_PERMISSION);
+                return false;
+            }
+            if (!mPackageManagerHelper.receiverRegistered(
+                    RulesUpdaterContract.createUpdaterIntent(mUpdateAppPackageName),
+                    RulesUpdaterContract.TRIGGER_TIME_ZONE_RULES_CHECK_PERMISSION)) {
+                return false;
+            }
+
+            return true;
+        } catch (PackageManager.NameNotFoundException e) {
+            Slog.w(TAG, "validateUpdaterAppManifest: Updater app " + mDataAppPackageName
+                    + " does not expose the required broadcast receiver.", e);
+            return false;
+        }
+    }
+
+    private static void throwRuntimeExceptionIfNullOrEmpty(String value, String message) {
+        if (value == null || value.trim().isEmpty()) {
+            throw logAndThrowRuntimeException(message, null);
+        }
+    }
+
+    private static RuntimeException logAndThrowRuntimeException(String message, Throwable cause) {
+        Slog.wtf(TAG, message, cause);
+        throw new RuntimeException(message, cause);
+    }
+
+    public void dump(PrintWriter fout) {
+        fout.println("PackageTrackerState: " + toString());
+        mPackageStatusStorage.dump(fout);
+    }
+
+    @Override
+    public String toString() {
+        return "PackageTracker{" +
+                "mTrackingEnabled=" + mTrackingEnabled +
+                ", mUpdateAppPackageName='" + mUpdateAppPackageName + '\'' +
+                ", mDataAppPackageName='" + mDataAppPackageName + '\'' +
+                ", mCheckTimeAllowedMillis=" + mCheckTimeAllowedMillis +
+                ", mDelayBeforeReliabilityCheckMillis=" + mDelayBeforeReliabilityCheckMillis +
+                ", mFailedCheckRetryCount=" + mFailedCheckRetryCount +
+                ", mLastTriggerTimestamp=" + mLastTriggerTimestamp +
+                ", mCheckTriggered=" + mCheckTriggered +
+                ", mCheckFailureCount=" + mCheckFailureCount +
+                '}';
+    }
+}
diff --git a/services/core/java/com/android/server/timezone/PackageTrackerHelperImpl.java b/services/core/java/com/android/server/timezone/PackageTrackerHelperImpl.java
new file mode 100644
index 0000000..2e0c21b
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/PackageTrackerHelperImpl.java
@@ -0,0 +1,154 @@
+/*
+ * 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.timezone;
+
+import com.android.internal.R;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ProviderInfo;
+import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
+import android.os.SystemClock;
+import android.util.Slog;
+
+import java.util.List;
+
+/**
+ * A single class that implements multiple helper interfaces for use by {@link PackageTracker}.
+ */
+final class PackageTrackerHelperImpl implements ClockHelper, ConfigHelper, PackageManagerHelper {
+
+    private static final String TAG = "PackageTrackerHelperImpl";
+
+    private final Context mContext;
+    private final PackageManager mPackageManager;
+
+    PackageTrackerHelperImpl(Context context) {
+        mContext = context;
+        mPackageManager = context.getPackageManager();
+    }
+
+    @Override
+    public boolean isTrackingEnabled() {
+        return mContext.getResources().getBoolean(R.bool.config_timeZoneRulesUpdateTrackingEnabled);
+    }
+
+    @Override
+    public String getUpdateAppPackageName() {
+        return mContext.getResources().getString(R.string.config_timeZoneRulesUpdaterPackage);
+    }
+
+    @Override
+    public String getDataAppPackageName() {
+        Resources resources = mContext.getResources();
+        return resources.getString(R.string.config_timeZoneRulesDataPackage);
+    }
+
+    @Override
+    public int getCheckTimeAllowedMillis() {
+        return mContext.getResources().getInteger(
+                R.integer.config_timeZoneRulesCheckTimeMillisAllowed);
+    }
+
+    @Override
+    public int getFailedCheckRetryCount() {
+        return mContext.getResources().getInteger(R.integer.config_timeZoneRulesCheckRetryCount);
+    }
+
+    @Override
+    public long currentTimestamp() {
+        // Use of elapsedRealtime() because this is in-memory state and elapsedRealtime() shouldn't
+        // change if the system clock changes.
+        return SystemClock.elapsedRealtime();
+    }
+
+    @Override
+    public int getInstalledPackageVersion(String packageName)
+            throws PackageManager.NameNotFoundException {
+        int flags = PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS;
+        PackageInfo packageInfo = mPackageManager.getPackageInfo(packageName, flags);
+        return packageInfo.versionCode;
+    }
+
+    @Override
+    public boolean isPrivilegedApp(String packageName) throws PackageManager.NameNotFoundException {
+        int flags = PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS;
+        PackageInfo packageInfo = mPackageManager.getPackageInfo(packageName, flags);
+        return packageInfo.applicationInfo.isPrivilegedApp();
+    }
+
+    @Override
+    public boolean usesPermission(String packageName, String requiredPermissionName)
+            throws PackageManager.NameNotFoundException {
+        int flags = PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+                | PackageManager.GET_PERMISSIONS;
+        PackageInfo packageInfo = mPackageManager.getPackageInfo(packageName, flags);
+        if (packageInfo.requestedPermissions == null) {
+            return false;
+        }
+        for (String requestedPermission : packageInfo.requestedPermissions) {
+            if (requiredPermissionName.equals(requestedPermission)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean contentProviderRegistered(String authority, String requiredPackageName) {
+        int flags = PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS;
+        ProviderInfo providerInfo =
+                mPackageManager.resolveContentProvider(authority, flags);
+        if (providerInfo == null) {
+            Slog.i(TAG, "contentProviderRegistered: No content provider registered with authority="
+                    + authority);
+            return false;
+        }
+        boolean packageMatches =
+                requiredPackageName.equals(providerInfo.applicationInfo.packageName);
+        if (!packageMatches) {
+            Slog.i(TAG, "contentProviderRegistered: App with packageName=" + requiredPackageName
+                    + " does not expose the a content provider with authority=" + authority);
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public boolean receiverRegistered(Intent intent, String requiredPermissionName)
+            throws PackageManager.NameNotFoundException {
+
+        int flags = PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS;
+        List<ResolveInfo> resolveInfo = mPackageManager.queryBroadcastReceivers(intent, flags);
+        if (resolveInfo.size() != 1) {
+            Slog.i(TAG, "receiverRegistered: Zero or multiple broadcast receiver registered for"
+                    + " intent=" + intent + ", found=" + resolveInfo);
+            return false;
+        }
+
+        ResolveInfo matched = resolveInfo.get(0);
+        boolean requiresPermission = requiredPermissionName.equals(matched.activityInfo.permission);
+        if (!requiresPermission) {
+            Slog.i(TAG, "receiverRegistered: Broadcast receiver registered for intent="
+                    + intent + " must require permission " + requiredPermissionName);
+        }
+        return requiresPermission;
+    }
+}
diff --git a/services/core/java/com/android/server/timezone/PackageVersions.java b/services/core/java/com/android/server/timezone/PackageVersions.java
new file mode 100644
index 0000000..fc0d6e1
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/PackageVersions.java
@@ -0,0 +1,63 @@
+/*
+ * 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.timezone;
+
+/**
+ * Package version information about the time zone updater and time zone data application packages.
+ */
+final class PackageVersions {
+
+    final int mUpdateAppVersion;
+    final int mDataAppVersion;
+
+    PackageVersions(int updateAppVersion, int dataAppVersion) {
+        this.mUpdateAppVersion = updateAppVersion;
+        this.mDataAppVersion = dataAppVersion;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        PackageVersions that = (PackageVersions) o;
+
+        if (mUpdateAppVersion != that.mUpdateAppVersion) {
+            return false;
+        }
+        return mDataAppVersion == that.mDataAppVersion;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = mUpdateAppVersion;
+        result = 31 * result + mDataAppVersion;
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "PackageVersions{" +
+                "mUpdateAppVersion=" + mUpdateAppVersion +
+                ", mDataAppVersion=" + mDataAppVersion +
+                '}';
+    }
+}
diff --git a/services/core/java/com/android/server/timezone/PermissionHelper.java b/services/core/java/com/android/server/timezone/PermissionHelper.java
new file mode 100644
index 0000000..2ec31e2
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/PermissionHelper.java
@@ -0,0 +1,29 @@
+/*
+ * 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.timezone;
+
+import java.io.PrintWriter;
+
+/**
+ * An easy-to-mock interface around permission checks for use by {@link RulesManagerService}.
+ */
+public interface PermissionHelper {
+
+    void enforceCallerHasPermission(String requiredPermission) throws SecurityException;
+
+    boolean checkDumpPermission(String tag, PrintWriter printWriter);
+}
diff --git a/services/core/java/com/android/server/timezone/RulesManagerService.java b/services/core/java/com/android/server/timezone/RulesManagerService.java
new file mode 100644
index 0000000..6824a59
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/RulesManagerService.java
@@ -0,0 +1,560 @@
+/*
+ * 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.timezone;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.server.EventLogTags;
+import com.android.server.SystemService;
+import com.android.timezone.distro.DistroException;
+import com.android.timezone.distro.DistroVersion;
+import com.android.timezone.distro.StagedDistroOperation;
+import com.android.timezone.distro.TimeZoneDistro;
+import com.android.timezone.distro.installer.TimeZoneDistroInstaller;
+
+import android.app.timezone.Callback;
+import android.app.timezone.DistroFormatVersion;
+import android.app.timezone.DistroRulesVersion;
+import android.app.timezone.ICallback;
+import android.app.timezone.IRulesManager;
+import android.app.timezone.RulesManager;
+import android.app.timezone.RulesState;
+import android.content.Context;
+import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
+import android.util.Slog;
+
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.util.Arrays;
+import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicBoolean;
+import libcore.icu.ICU;
+import libcore.util.ZoneInfoDB;
+
+import static android.app.timezone.RulesState.DISTRO_STATUS_INSTALLED;
+import static android.app.timezone.RulesState.DISTRO_STATUS_NONE;
+import static android.app.timezone.RulesState.DISTRO_STATUS_UNKNOWN;
+import static android.app.timezone.RulesState.STAGED_OPERATION_INSTALL;
+import static android.app.timezone.RulesState.STAGED_OPERATION_NONE;
+import static android.app.timezone.RulesState.STAGED_OPERATION_UNINSTALL;
+import static android.app.timezone.RulesState.STAGED_OPERATION_UNKNOWN;
+
+public final class RulesManagerService extends IRulesManager.Stub {
+
+    private static final String TAG = "timezone.RulesManagerService";
+
+    /** The distro format supported by this device. */
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
+    static final DistroFormatVersion DISTRO_FORMAT_VERSION_SUPPORTED =
+            new DistroFormatVersion(
+                    DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
+                    DistroVersion.CURRENT_FORMAT_MINOR_VERSION);
+
+    public static class Lifecycle extends SystemService {
+        public Lifecycle(Context context) {
+            super(context);
+        }
+
+        @Override
+        public void onStart() {
+            RulesManagerService service = RulesManagerService.create(getContext());
+            service.start();
+
+            // Publish the binder service so it can be accessed from other (appropriately
+            // permissioned) processes.
+            publishBinderService(Context.TIME_ZONE_RULES_MANAGER_SERVICE, service);
+
+            // Publish the service instance locally so we can use it directly from within the system
+            // server from TimeZoneUpdateIdler.
+            publishLocalService(RulesManagerService.class, service);
+        }
+    }
+
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
+    static final String REQUIRED_UPDATER_PERMISSION =
+            android.Manifest.permission.UPDATE_TIME_ZONE_RULES;
+    private static final File SYSTEM_TZ_DATA_FILE = new File("/system/usr/share/zoneinfo/tzdata");
+    private static final File TZ_DATA_DIR = new File("/data/misc/zoneinfo");
+
+    private final AtomicBoolean mOperationInProgress = new AtomicBoolean(false);
+    private final PermissionHelper mPermissionHelper;
+    private final PackageTracker mPackageTracker;
+    private final Executor mExecutor;
+    private final TimeZoneDistroInstaller mInstaller;
+
+    private static RulesManagerService create(Context context) {
+        RulesManagerServiceHelperImpl helper = new RulesManagerServiceHelperImpl(context);
+        return new RulesManagerService(
+                helper /* permissionHelper */,
+                helper /* executor */,
+                PackageTracker.create(context),
+                new TimeZoneDistroInstaller(TAG, SYSTEM_TZ_DATA_FILE, TZ_DATA_DIR));
+    }
+
+    // A constructor that can be used by tests to supply mocked / faked dependencies.
+    RulesManagerService(PermissionHelper permissionHelper,
+            Executor executor, PackageTracker packageTracker,
+            TimeZoneDistroInstaller timeZoneDistroInstaller) {
+        mPermissionHelper = permissionHelper;
+        mExecutor = executor;
+        mPackageTracker = packageTracker;
+        mInstaller = timeZoneDistroInstaller;
+    }
+
+    public void start() {
+        mPackageTracker.start();
+    }
+
+    @Override // Binder call
+    public RulesState getRulesState() {
+        mPermissionHelper.enforceCallerHasPermission(REQUIRED_UPDATER_PERMISSION);
+
+        return getRulesStateInternal();
+    }
+
+    /** Like {@link #getRulesState()} without the permission check. */
+    private RulesState getRulesStateInternal() {
+        synchronized(this) {
+            String systemRulesVersion;
+            try {
+                systemRulesVersion = mInstaller.getSystemRulesVersion();
+            } catch (IOException e) {
+                Slog.w(TAG, "Failed to read system rules", e);
+                return null;
+            }
+
+            boolean operationInProgress = this.mOperationInProgress.get();
+
+            // Determine the staged operation status, if possible.
+            DistroRulesVersion stagedDistroRulesVersion = null;
+            int stagedOperationStatus = STAGED_OPERATION_UNKNOWN;
+            if (!operationInProgress) {
+                StagedDistroOperation stagedDistroOperation;
+                try {
+                    stagedDistroOperation = mInstaller.getStagedDistroOperation();
+                    if (stagedDistroOperation == null) {
+                        stagedOperationStatus = STAGED_OPERATION_NONE;
+                    } else if (stagedDistroOperation.isUninstall) {
+                        stagedOperationStatus = STAGED_OPERATION_UNINSTALL;
+                    } else {
+                        // Must be an install.
+                        stagedOperationStatus = STAGED_OPERATION_INSTALL;
+                        DistroVersion stagedDistroVersion = stagedDistroOperation.distroVersion;
+                        stagedDistroRulesVersion = new DistroRulesVersion(
+                                stagedDistroVersion.rulesVersion,
+                                stagedDistroVersion.revision);
+                    }
+                } catch (DistroException | IOException e) {
+                    Slog.w(TAG, "Failed to read staged distro.", e);
+                }
+            }
+
+            // Determine the installed distro state, if possible.
+            DistroVersion installedDistroVersion;
+            int distroStatus = DISTRO_STATUS_UNKNOWN;
+            DistroRulesVersion installedDistroRulesVersion = null;
+            if (!operationInProgress) {
+                try {
+                    installedDistroVersion = mInstaller.getInstalledDistroVersion();
+                    if (installedDistroVersion == null) {
+                        distroStatus = DISTRO_STATUS_NONE;
+                        installedDistroRulesVersion = null;
+                    } else {
+                        distroStatus = DISTRO_STATUS_INSTALLED;
+                        installedDistroRulesVersion = new DistroRulesVersion(
+                                installedDistroVersion.rulesVersion,
+                                installedDistroVersion.revision);
+                    }
+                } catch (DistroException | IOException e) {
+                    Slog.w(TAG, "Failed to read installed distro.", e);
+                }
+            }
+            return new RulesState(systemRulesVersion, DISTRO_FORMAT_VERSION_SUPPORTED,
+                    operationInProgress, stagedOperationStatus, stagedDistroRulesVersion,
+                    distroStatus, installedDistroRulesVersion);
+        }
+    }
+
+    @Override
+    public int requestInstall(ParcelFileDescriptor distroParcelFileDescriptor,
+            byte[] checkTokenBytes, ICallback callback) {
+
+        boolean closeParcelFileDescriptorOnExit = true;
+        try {
+            mPermissionHelper.enforceCallerHasPermission(REQUIRED_UPDATER_PERMISSION);
+
+            CheckToken checkToken = null;
+            if (checkTokenBytes != null) {
+                checkToken = createCheckTokenOrThrow(checkTokenBytes);
+            }
+            EventLogTags.writeTimezoneRequestInstall(toStringOrNull(checkToken));
+
+            synchronized (this) {
+                if (distroParcelFileDescriptor == null) {
+                    throw new NullPointerException("distroParcelFileDescriptor == null");
+                }
+                if (callback == null) {
+                    throw new NullPointerException("observer == null");
+                }
+                if (mOperationInProgress.get()) {
+                    return RulesManager.ERROR_OPERATION_IN_PROGRESS;
+                }
+                mOperationInProgress.set(true);
+
+                // Execute the install asynchronously.
+                mExecutor.execute(
+                        new InstallRunnable(distroParcelFileDescriptor, checkToken, callback));
+
+                // The InstallRunnable now owns the ParcelFileDescriptor, so it will close it after
+                // it executes (and we do not have to).
+                closeParcelFileDescriptorOnExit = false;
+
+                return RulesManager.SUCCESS;
+            }
+        } finally {
+            // We should close() the local ParcelFileDescriptor we were passed if it hasn't been
+            // passed to another thread to handle.
+            if (distroParcelFileDescriptor != null && closeParcelFileDescriptorOnExit) {
+                try {
+                    distroParcelFileDescriptor.close();
+                } catch (IOException e) {
+                    Slog.w(TAG, "Failed to close distroParcelFileDescriptor", e);
+                }
+            }
+        }
+    }
+
+    private class InstallRunnable implements Runnable {
+
+        private final ParcelFileDescriptor mDistroParcelFileDescriptor;
+        private final CheckToken mCheckToken;
+        private final ICallback mCallback;
+
+        InstallRunnable(ParcelFileDescriptor distroParcelFileDescriptor, CheckToken checkToken,
+                ICallback callback) {
+            mDistroParcelFileDescriptor = distroParcelFileDescriptor;
+            mCheckToken = checkToken;
+            mCallback = callback;
+        }
+
+        @Override
+        public void run() {
+            EventLogTags.writeTimezoneInstallStarted(toStringOrNull(mCheckToken));
+
+            boolean success = false;
+            // Adopt the ParcelFileDescriptor into this try-with-resources so it is closed
+            // when we are done.
+            try (ParcelFileDescriptor pfd = mDistroParcelFileDescriptor) {
+                // The ParcelFileDescriptor owns the underlying FileDescriptor and we'll close
+                // it at the end of the try-with-resources.
+                final boolean isFdOwner = false;
+                InputStream is = new FileInputStream(pfd.getFileDescriptor(), isFdOwner);
+
+                TimeZoneDistro distro = new TimeZoneDistro(is);
+                int installerResult = mInstaller.stageInstallWithErrorCode(distro);
+                int resultCode = mapInstallerResultToApiCode(installerResult);
+                EventLogTags.writeTimezoneInstallComplete(toStringOrNull(mCheckToken), resultCode);
+                sendFinishedStatus(mCallback, resultCode);
+
+                // All the installer failure modes are currently non-recoverable and won't be
+                // improved by trying again. Therefore success = true.
+                success = true;
+            } catch (Exception e) {
+                Slog.w(TAG, "Failed to install distro.", e);
+                EventLogTags.writeTimezoneInstallComplete(
+                        toStringOrNull(mCheckToken), Callback.ERROR_UNKNOWN_FAILURE);
+                sendFinishedStatus(mCallback, Callback.ERROR_UNKNOWN_FAILURE);
+            } finally {
+                // Notify the package tracker that the operation is now complete.
+                mPackageTracker.recordCheckResult(mCheckToken, success);
+
+                mOperationInProgress.set(false);
+            }
+        }
+
+        private int mapInstallerResultToApiCode(int installerResult) {
+            switch (installerResult) {
+                case TimeZoneDistroInstaller.INSTALL_SUCCESS:
+                    return Callback.SUCCESS;
+                case TimeZoneDistroInstaller.INSTALL_FAIL_BAD_DISTRO_STRUCTURE:
+                    return Callback.ERROR_INSTALL_BAD_DISTRO_STRUCTURE;
+                case TimeZoneDistroInstaller.INSTALL_FAIL_RULES_TOO_OLD:
+                    return Callback.ERROR_INSTALL_RULES_TOO_OLD;
+                case TimeZoneDistroInstaller.INSTALL_FAIL_BAD_DISTRO_FORMAT_VERSION:
+                    return Callback.ERROR_INSTALL_BAD_DISTRO_FORMAT_VERSION;
+                case TimeZoneDistroInstaller.INSTALL_FAIL_VALIDATION_ERROR:
+                    return Callback.ERROR_INSTALL_VALIDATION_ERROR;
+                default:
+                    return Callback.ERROR_UNKNOWN_FAILURE;
+            }
+        }
+    }
+
+    @Override
+    public int requestUninstall(byte[] checkTokenBytes, ICallback callback) {
+        mPermissionHelper.enforceCallerHasPermission(REQUIRED_UPDATER_PERMISSION);
+
+        CheckToken checkToken = null;
+        if (checkTokenBytes != null) {
+            checkToken = createCheckTokenOrThrow(checkTokenBytes);
+        }
+        EventLogTags.writeTimezoneRequestUninstall(toStringOrNull(checkToken));
+        synchronized(this) {
+            if (callback == null) {
+                throw new NullPointerException("callback == null");
+            }
+
+            if (mOperationInProgress.get()) {
+                return RulesManager.ERROR_OPERATION_IN_PROGRESS;
+            }
+            mOperationInProgress.set(true);
+
+            // Execute the uninstall asynchronously.
+            mExecutor.execute(new UninstallRunnable(checkToken, callback));
+
+            return RulesManager.SUCCESS;
+        }
+    }
+
+    private class UninstallRunnable implements Runnable {
+
+        private final CheckToken mCheckToken;
+        private final ICallback mCallback;
+
+        UninstallRunnable(CheckToken checkToken, ICallback callback) {
+            mCheckToken = checkToken;
+            mCallback = callback;
+        }
+
+        @Override
+        public void run() {
+            EventLogTags.writeTimezoneUninstallStarted(toStringOrNull(mCheckToken));
+            boolean packageTrackerStatus = false;
+            try {
+                int uninstallResult = mInstaller.stageUninstall();
+                packageTrackerStatus = (uninstallResult == TimeZoneDistroInstaller.UNINSTALL_SUCCESS
+                        || uninstallResult == TimeZoneDistroInstaller.UNINSTALL_NOTHING_INSTALLED);
+
+                // Right now we just have Callback.SUCCESS / Callback.ERROR_UNKNOWN_FAILURE for
+                // uninstall. All clients should be checking against SUCCESS. More granular failures
+                // may be added in future.
+                int callbackResultCode =
+                        packageTrackerStatus ? Callback.SUCCESS : Callback.ERROR_UNKNOWN_FAILURE;
+                EventLogTags.writeTimezoneUninstallComplete(
+                        toStringOrNull(mCheckToken), callbackResultCode);
+                sendFinishedStatus(mCallback, callbackResultCode);
+            } catch (Exception e) {
+                EventLogTags.writeTimezoneUninstallComplete(
+                        toStringOrNull(mCheckToken), Callback.ERROR_UNKNOWN_FAILURE);
+                Slog.w(TAG, "Failed to uninstall distro.", e);
+                sendFinishedStatus(mCallback, Callback.ERROR_UNKNOWN_FAILURE);
+            } finally {
+                // Notify the package tracker that the operation is now complete.
+                mPackageTracker.recordCheckResult(mCheckToken, packageTrackerStatus);
+
+                mOperationInProgress.set(false);
+            }
+        }
+    }
+
+    private void sendFinishedStatus(ICallback callback, int resultCode) {
+        try {
+            callback.onFinished(resultCode);
+        } catch (RemoteException e) {
+            Slog.e(TAG, "Unable to notify observer of result", e);
+        }
+    }
+
+    @Override
+    public void requestNothing(byte[] checkTokenBytes, boolean success) {
+        mPermissionHelper.enforceCallerHasPermission(REQUIRED_UPDATER_PERMISSION);
+        CheckToken checkToken = null;
+        if (checkTokenBytes != null) {
+            checkToken = createCheckTokenOrThrow(checkTokenBytes);
+        }
+        EventLogTags.writeTimezoneRequestNothing(toStringOrNull(checkToken));
+        mPackageTracker.recordCheckResult(checkToken, success);
+        EventLogTags.writeTimezoneNothingComplete(toStringOrNull(checkToken));
+    }
+
+    @Override
+    protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+        if (!mPermissionHelper.checkDumpPermission(TAG, pw)) {
+            return;
+        }
+
+        RulesState rulesState = getRulesStateInternal();
+        if (args != null && args.length == 2) {
+            // Formatting options used for automated tests. The format is less free-form than
+            // the -format options, which are intended to be easier to parse.
+            if ("-format_state".equals(args[0]) && args[1] != null) {
+                for (char c : args[1].toCharArray()) {
+                    switch (c) {
+                        case 'p': {
+                            // Report operation in progress
+                            String value = "Unknown";
+                            if (rulesState != null) {
+                                value = Boolean.toString(rulesState.isOperationInProgress());
+                            }
+                            pw.println("Operation in progress: " + value);
+                            break;
+                        }
+                        case 's': {
+                            // Report system image rules version
+                            String value = "Unknown";
+                            if (rulesState != null) {
+                                value = rulesState.getSystemRulesVersion();
+                            }
+                            pw.println("System rules version: " + value);
+                            break;
+                        }
+                        case 'c': {
+                            // Report current installation state
+                            String value = "Unknown";
+                            if (rulesState != null) {
+                                value = distroStatusToString(rulesState.getDistroStatus());
+                            }
+                            pw.println("Current install state: " + value);
+                            break;
+                        }
+                        case 'i': {
+                            // Report currently installed version
+                            String value = "Unknown";
+                            if (rulesState != null) {
+                                DistroRulesVersion installedRulesVersion =
+                                        rulesState.getInstalledDistroRulesVersion();
+                                if (installedRulesVersion == null) {
+                                    value = "<None>";
+                                } else {
+                                    value = installedRulesVersion.toDumpString();
+                                }
+                            }
+                            pw.println("Installed rules version: " + value);
+                            break;
+                        }
+                        case 'o': {
+                            // Report staged operation type
+                            String value = "Unknown";
+                            if (rulesState != null) {
+                                int stagedOperationType = rulesState.getStagedOperationType();
+                                value = stagedOperationToString(stagedOperationType);
+                            }
+                            pw.println("Staged operation: " + value);
+                            break;
+                        }
+                        case 't': {
+                            // Report staged version (i.e. the one that will be installed next boot
+                            // if the staged operation is an install).
+                            String value = "Unknown";
+                            if (rulesState != null) {
+                                DistroRulesVersion stagedDistroRulesVersion =
+                                        rulesState.getStagedDistroRulesVersion();
+                                if (stagedDistroRulesVersion == null) {
+                                    value = "<None>";
+                                } else {
+                                    value = stagedDistroRulesVersion.toDumpString();
+                                }
+                            }
+                            pw.println("Staged rules version: " + value);
+                            break;
+                        }
+                        case 'a': {
+                            // Report the active rules version (i.e. the rules in use by the current
+                            // process).
+                            pw.println("Active rules version (ICU, libcore): "
+                                    + ICU.getTZDataVersion() + ","
+                                    + ZoneInfoDB.getInstance().getVersion());
+                            break;
+                        }
+                        default: {
+                            pw.println("Unknown option: " + c);
+                        }
+                    }
+                }
+                return;
+            }
+        }
+
+        pw.println("RulesManagerService state: " + toString());
+        pw.println("Active rules version (ICU, libcore): " + ICU.getTZDataVersion() + ","
+                + ZoneInfoDB.getInstance().getVersion());
+        pw.println("Distro state: " + rulesState.toString());
+        mPackageTracker.dump(pw);
+    }
+
+    /**
+     * Called when the device is considered idle.
+     */
+    void notifyIdle() {
+        // No package has changed: we are just triggering because the device is idle and there
+        // *might* be work to do.
+        final boolean packageChanged = false;
+        mPackageTracker.triggerUpdateIfNeeded(packageChanged);
+    }
+
+    @Override
+    public String toString() {
+        return "RulesManagerService{" +
+                "mOperationInProgress=" + mOperationInProgress +
+                '}';
+    }
+
+    private static CheckToken createCheckTokenOrThrow(byte[] checkTokenBytes) {
+        CheckToken checkToken;
+        try {
+            checkToken = CheckToken.fromByteArray(checkTokenBytes);
+        } catch (IOException e) {
+            throw new IllegalArgumentException("Unable to read token bytes "
+                    + Arrays.toString(checkTokenBytes), e);
+        }
+        return checkToken;
+    }
+
+    private static String distroStatusToString(int distroStatus) {
+        switch(distroStatus) {
+            case DISTRO_STATUS_NONE:
+                return "None";
+            case DISTRO_STATUS_INSTALLED:
+                return "Installed";
+            case DISTRO_STATUS_UNKNOWN:
+            default:
+                return "Unknown";
+        }
+    }
+
+    private static String stagedOperationToString(int stagedOperationType) {
+        switch(stagedOperationType) {
+            case STAGED_OPERATION_NONE:
+                return "None";
+            case STAGED_OPERATION_UNINSTALL:
+                return "Uninstall";
+            case STAGED_OPERATION_INSTALL:
+                return "Install";
+            case STAGED_OPERATION_UNKNOWN:
+            default:
+                return "Unknown";
+        }
+    }
+
+    private static String toStringOrNull(Object obj) {
+        return obj == null ? null : obj.toString();
+    }
+}
diff --git a/services/core/java/com/android/server/timezone/RulesManagerServiceHelperImpl.java b/services/core/java/com/android/server/timezone/RulesManagerServiceHelperImpl.java
new file mode 100644
index 0000000..0cf61c0
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/RulesManagerServiceHelperImpl.java
@@ -0,0 +1,64 @@
+/*
+ * 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.timezone;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.AsyncTask;
+import android.os.Binder;
+import android.os.ParcelFileDescriptor;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.concurrent.Executor;
+import libcore.io.Streams;
+
+/**
+ * A single class that implements multiple helper interfaces for use by {@link RulesManagerService}.
+ */
+final class RulesManagerServiceHelperImpl implements PermissionHelper, Executor {
+
+    private final Context mContext;
+
+    RulesManagerServiceHelperImpl(Context context) {
+        mContext = context;
+    }
+
+    @Override
+    public void enforceCallerHasPermission(String requiredPermission) {
+        mContext.enforceCallingPermission(requiredPermission, null /* message */);
+    }
+
+    @Override
+    public boolean checkDumpPermission(String tag, PrintWriter pw) {
+        // TODO(nfuller): Switch to DumpUtils.checkDumpPermission() when it is available in AOSP.
+        if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
+                != PackageManager.PERMISSION_GRANTED) {
+            pw.println("Permission Denial: can't dump LocationManagerService from from pid="
+                    + Binder.getCallingPid()
+                    + ", uid=" + Binder.getCallingUid());
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public void execute(Runnable runnable) {
+        AsyncTask.execute(runnable);
+    }
+}
diff --git a/services/core/java/com/android/server/timezone/TimeZoneUpdateIdler.java b/services/core/java/com/android/server/timezone/TimeZoneUpdateIdler.java
new file mode 100644
index 0000000..a7767a4
--- /dev/null
+++ b/services/core/java/com/android/server/timezone/TimeZoneUpdateIdler.java
@@ -0,0 +1,100 @@
+/*
+ * 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.timezone;
+
+import com.android.server.LocalServices;
+
+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.util.Slog;
+
+/**
+ * A JobService used to trigger time zone rules update work when a device falls idle.
+ */
+public final class TimeZoneUpdateIdler extends JobService {
+
+    private static final String TAG = "timezone.TimeZoneUpdateIdler";
+
+    /** The static job ID used to handle on-idle work. */
+    // Must be unique within UID (system service)
+    private static final int TIME_ZONE_UPDATE_IDLE_JOB_ID = 27042305;
+
+    @Override
+    public boolean onStartJob(JobParameters params) {
+        RulesManagerService rulesManagerService =
+                LocalServices.getService(RulesManagerService.class);
+
+        Slog.d(TAG, "onStartJob() called");
+
+        // Note: notifyIdle() explicitly handles canceling / re-scheduling so no need to reschedule
+        // here.
+        rulesManagerService.notifyIdle();
+
+        // Everything is handled synchronously. We are done.
+        return false;
+    }
+
+    @Override
+    public boolean onStopJob(JobParameters params) {
+        // Reschedule if stopped unless it was cancelled due to unschedule().
+        boolean reschedule = params.getStopReason() != JobParameters.REASON_CANCELED;
+        Slog.d(TAG, "onStopJob() called: Reschedule=" + reschedule);
+        return reschedule;
+    }
+
+    /**
+     * Schedules the TimeZoneUpdateIdler job service to run once.
+     *
+     * @param context Context to use to get a job scheduler.
+     */
+    public static void schedule(Context context, long minimumDelayMillis) {
+        // Request that the JobScheduler tell us when the device falls idle.
+        JobScheduler jobScheduler =
+                (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+
+        // The TimeZoneUpdateIdler will send an intent that will trigger the Receiver.
+        ComponentName idlerJobServiceName =
+                new ComponentName(context, TimeZoneUpdateIdler.class);
+
+        // We require the device is idle, but also that it is charging to be as non-invasive as
+        // we can.
+        JobInfo.Builder jobInfoBuilder =
+                new JobInfo.Builder(TIME_ZONE_UPDATE_IDLE_JOB_ID, idlerJobServiceName)
+                        .setRequiresDeviceIdle(true)
+                        .setRequiresCharging(true)
+                        .setMinimumLatency(minimumDelayMillis);
+
+        Slog.d(TAG, "schedule() called: minimumDelayMillis=" + minimumDelayMillis);
+        jobScheduler.schedule(jobInfoBuilder.build());
+    }
+
+    /**
+     * Unschedules the TimeZoneUpdateIdler job service.
+     *
+     * @param context Context to use to get a job scheduler.
+     */
+    public static void unschedule(Context context) {
+        JobScheduler jobScheduler =
+                (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+        Slog.d(TAG, "unschedule() called");
+        jobScheduler.cancel(TIME_ZONE_UPDATE_IDLE_JOB_ID);
+    }
+}
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java
index 8ce59ed..a7cd962 100644
--- a/services/core/java/com/android/server/trust/TrustManagerService.java
+++ b/services/core/java/com/android/server/trust/TrustManagerService.java
@@ -344,7 +344,7 @@
                             + "of user " + userInfo.id + "can unlock user profile.");
                 }
 
-                if (!StorageManager.isUserKeyUnlocked(userInfo.id)
+                if (!mUserManager.isUserUnlockingOrUnlocked(userInfo.id)
                         && !directUnlock) {
                     if (DEBUG) Slog.d(TAG, "refreshAgentList: skipping user " + userInfo.id
                             + "'s trust agent " + name + ": FBE still locked and "
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index 25a0772..1afde55 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -1218,6 +1218,12 @@
 
         @Override
         public void setMainSession(IBinder sessionToken, int userId) {
+            if (mContext.checkCallingPermission(
+                    android.Manifest.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE)
+                    != PackageManager.PERMISSION_GRANTED) {
+                throw new SecurityException(
+                        "The caller does not have CHANGE_HDMI_CEC_ACTIVE_SOURCE permission");
+            }
             if (DEBUG) {
                 Slog.d(TAG, "setMainSession(sessionToken=" + sessionToken + ")");
             }
diff --git a/services/core/java/com/android/server/twilight/TwilightState.java b/services/core/java/com/android/server/twilight/TwilightState.java
index 30a8ccc..71304a7 100644
--- a/services/core/java/com/android/server/twilight/TwilightState.java
+++ b/services/core/java/com/android/server/twilight/TwilightState.java
@@ -18,7 +18,10 @@
 
 import android.text.format.DateFormat;
 
-import java.util.Calendar;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.TimeZone;
 
 /**
  * The twilight state, consisting of the sunrise and sunset times (in millis) for the current
@@ -45,12 +48,11 @@
     }
 
     /**
-     * Returns a new {@link Calendar} instance initialized to {@link #sunriseTimeMillis()}.
+     * Returns a new {@link LocalDateTime} instance initialized to {@link #sunriseTimeMillis()}.
      */
-    public Calendar sunrise() {
-        final Calendar sunrise = Calendar.getInstance();
-        sunrise.setTimeInMillis(mSunriseTimeMillis);
-        return sunrise;
+    public LocalDateTime sunrise() {
+        final ZoneId zoneId = TimeZone.getDefault().toZoneId();
+        return LocalDateTime.ofInstant(Instant.ofEpochMilli(mSunriseTimeMillis), zoneId);
     }
 
     /**
@@ -62,12 +64,11 @@
     }
 
     /**
-     * Returns a new {@link Calendar} instance initialized to {@link #sunsetTimeMillis()}.
+     * Returns a new {@link LocalDateTime} instance initialized to {@link #sunsetTimeMillis()}.
      */
-    public Calendar sunset() {
-        final Calendar sunset = Calendar.getInstance();
-        sunset.setTimeInMillis(mSunsetTimeMillis);
-        return sunset;
+    public LocalDateTime sunset() {
+        final ZoneId zoneId = TimeZone.getDefault().toZoneId();
+        return LocalDateTime.ofInstant(Instant.ofEpochMilli(mSunsetTimeMillis), zoneId);
     }
 
     /**
diff --git a/services/core/java/com/android/server/updates/TzDataInstallReceiver.java b/services/core/java/com/android/server/updates/TzDataInstallReceiver.java
index 3c73c88..cabce18 100644
--- a/services/core/java/com/android/server/updates/TzDataInstallReceiver.java
+++ b/services/core/java/com/android/server/updates/TzDataInstallReceiver.java
@@ -16,11 +16,13 @@
 
 package com.android.server.updates;
 
+import com.android.timezone.distro.TimeZoneDistro;
+import com.android.timezone.distro.installer.TimeZoneDistroInstaller;
+
 import android.util.Slog;
 
 import java.io.File;
 import java.io.IOException;
-import libcore.tzdata.update2.TimeZoneDistroInstaller;
 
 /**
  * An install receiver responsible for installing timezone data updates.
@@ -46,7 +48,8 @@
 
     @Override
     protected void install(byte[] content, int version) throws IOException {
-        boolean valid = installer.install(content);
+        TimeZoneDistro distro = new TimeZoneDistro(content);
+        boolean valid = installer.install(distro);
         Slog.i(TAG, "Timezone data install valid for this device: " + valid);
         // Even if !valid, we call super.install(). Only in the event of an exception should we
         // not. If we didn't do this we could attempt to install repeatedly.
diff --git a/services/core/java/com/android/server/utils/ManagedApplicationService.java b/services/core/java/com/android/server/utils/ManagedApplicationService.java
index 0f251fd..c555388 100644
--- a/services/core/java/com/android/server/utils/ManagedApplicationService.java
+++ b/services/core/java/com/android/server/utils/ManagedApplicationService.java
@@ -16,19 +16,24 @@
 package com.android.server.utils;
 
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.app.PendingIntent;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
+import android.os.Handler;
 import android.os.IBinder;
 import android.os.IBinder.DeathRecipient;
 import android.os.IInterface;
 import android.os.RemoteException;
+import android.os.SystemClock;
 import android.os.UserHandle;
 import android.util.Slog;
 
+import java.text.SimpleDateFormat;
 import java.util.Objects;
+import java.util.Date;
 
 /**
  * Manages the lifecycle of an application-provided service bound from system server.
@@ -38,39 +43,126 @@
 public class ManagedApplicationService {
     private final String TAG = getClass().getSimpleName();
 
+    /**
+     * Attempt to reconnect service forever if an onBindingDied or onServiceDisconnected event
+     * is received.
+     */
+    public static final int RETRY_FOREVER = 1;
+
+    /**
+     * Never attempt to reconnect the service - a single onBindingDied or onServiceDisconnected
+     * event will cause this to fully unbind the service and never attempt to reconnect.
+     */
+    public static final int RETRY_NEVER = 2;
+
+    /**
+     * Attempt to reconnect the service until the maximum number of retries is reached, then stop.
+     *
+     * The first retry will occur MIN_RETRY_DURATION_MS after the disconnection, and each
+     * subsequent retry will occur after 2x the duration used for the previous retry up to the
+     * MAX_RETRY_DURATION_MS duration.
+     *
+     * In this case, retries mean a full unbindService/bindService pair to handle cases when the
+     * usual service re-connection logic in ActiveServices has very high backoff times or when the
+     * serviceconnection has fully died due to a package update or similar.
+     */
+    public static final int RETRY_BEST_EFFORT = 3;
+
+    // Maximum number of retries before giving up (for RETRY_BEST_EFFORT).
+    private static final int MAX_RETRY_COUNT = 4;
+    // Max time between retry attempts.
+    private static final long MAX_RETRY_DURATION_MS = 16000;
+    // Min time between retry attempts.
+    private static final long MIN_RETRY_DURATION_MS = 2000;
+    // Time since the last retry attempt after which to clear the retry attempt counter.
+    private static final long RETRY_RESET_TIME_MS = MAX_RETRY_DURATION_MS * 4;
+
     private final Context mContext;
     private final int mUserId;
     private final ComponentName mComponent;
     private final int mClientLabel;
     private final String mSettingsAction;
     private final BinderChecker mChecker;
-
-    private final DeathRecipient mDeathRecipient = new DeathRecipient() {
-        @Override
-        public void binderDied() {
-            synchronized (mLock) {
-                mBoundInterface = null;
-            }
-        }
-    };
+    private final boolean mIsImportant;
+    private final int mRetryType;
+    private final Handler mHandler;
+    private final Runnable mRetryRunnable = this::doRetry;
+    private final EventCallback mEventCb;
 
     private final Object mLock = new Object();
 
     // State protected by mLock
-    private ServiceConnection mPendingConnection;
     private ServiceConnection mConnection;
     private IInterface mBoundInterface;
     private PendingEvent mPendingEvent;
+    private int mRetryCount;
+    private long mLastRetryTimeMs;
+    private long mNextRetryDurationMs = MIN_RETRY_DURATION_MS;
+    private boolean mRetrying;
+
+    public static interface LogFormattable {
+       String toLogString(SimpleDateFormat dateFormat);
+    }
+
+    /**
+     * Lifecycle event of this managed service.
+     */
+    public static class LogEvent implements LogFormattable {
+        public static final int EVENT_CONNECTED = 1;
+        public static final int EVENT_DISCONNECTED = 2;
+        public static final int EVENT_BINDING_DIED = 3;
+        public static final int EVENT_STOPPED_PERMANENTLY = 4;
+
+        // Time of the events in "current time ms" timebase.
+        public final long timestamp;
+        // Name of the component for this system service.
+        public final ComponentName component;
+        // ID of the event that occurred.
+        public final int event;
+
+        public LogEvent(long timestamp, ComponentName component, int event) {
+            this.timestamp = timestamp;
+            this.component = component;
+            this.event = event;
+        }
+
+        @Override
+        public String toLogString(SimpleDateFormat dateFormat) {
+            return dateFormat.format(new Date(timestamp)) + "   " + eventToString(event)
+                    + " Managed Service: "
+                    + ((component == null) ? "None" : component.flattenToString());
+        }
+
+        public static String eventToString(int event) {
+            switch (event) {
+                case EVENT_CONNECTED:
+                    return "Connected";
+                case EVENT_DISCONNECTED:
+                    return "Disconnected";
+                case EVENT_BINDING_DIED:
+                    return "Binding Died For";
+                case EVENT_STOPPED_PERMANENTLY:
+                    return "Permanently Stopped";
+                default:
+                    return "Unknown Event Occurred";
+            }
+        }
+    }
 
     private ManagedApplicationService(final Context context, final ComponentName component,
             final int userId, int clientLabel, String settingsAction,
-            BinderChecker binderChecker) {
+            BinderChecker binderChecker, boolean isImportant, int retryType, Handler handler,
+            EventCallback eventCallback) {
         mContext = context;
         mComponent = component;
         mUserId = userId;
         mClientLabel = clientLabel;
         mSettingsAction = settingsAction;
         mChecker = binderChecker;
+        mIsImportant = isImportant;
+        mRetryType = retryType;
+        mHandler = handler;
+        mEventCb = eventCallback;
     }
 
     /**
@@ -85,7 +177,17 @@
      * Implement to call IInterface methods after service is connected.
      */
     public interface PendingEvent {
-         void runEvent(IInterface service) throws RemoteException;
+        void runEvent(IInterface service) throws RemoteException;
+    }
+
+    /**
+     * Implement to be notified about any problems with remote service.
+     */
+    public interface EventCallback {
+        /**
+         * Called when an sevice lifecycle event occurs.
+         */
+        void onServiceEvent(LogEvent event);
     }
 
     /**
@@ -95,19 +197,28 @@
      * @param component the {@link ComponentName} of the application service to bind.
      * @param userId the user ID of user to bind the application service as.
      * @param clientLabel the resource ID of a label displayed to the user indicating the
-     *      binding service.
+     *      binding service, or 0 if none is desired.
      * @param settingsAction an action that can be used to open the Settings UI to enable/disable
-     *      binding to these services.
-     * @param binderChecker an interface used to validate the returned binder object.
+     *      binding to these services, or null if none is desired.
+     * @param binderChecker an interface used to validate the returned binder object, or null if
+     *      this interface is unchecked.
+     * @param isImportant bind the user service with BIND_IMPORTANT.
+     * @param retryType reconnect behavior to have when bound service is disconnected.
+     * @param handler the Handler to use for retries and delivering EventCallbacks.
+     * @param eventCallback a callback used to deliver disconnection events, or null if you
+     *      don't care.
      * @return a ManagedApplicationService instance.
      */
     public static ManagedApplicationService build(@NonNull final Context context,
-        @NonNull final ComponentName component, final int userId, @NonNull int clientLabel,
-        @NonNull String settingsAction, @NonNull BinderChecker binderChecker) {
+            @NonNull final ComponentName component, final int userId, int clientLabel,
+            @Nullable String settingsAction, @Nullable BinderChecker binderChecker,
+            boolean isImportant, int retryType, @NonNull Handler handler,
+            @Nullable EventCallback eventCallback) {
         return new ManagedApplicationService(context, component, userId, clientLabel,
-            settingsAction, binderChecker);
+            settingsAction, binderChecker, isImportant, retryType, handler, eventCallback);
     }
 
+
     /**
      * @return the user ID of the user that owns the bound service.
      */
@@ -138,13 +249,12 @@
         return true;
     }
 
-
-  /**
-   * Send an event to run as soon as the binder interface is available.
-   *
-   * @param event a {@link PendingEvent} to send.
-   */
-  public void sendEvent(@NonNull PendingEvent event) {
+    /**
+     * Send an event to run as soon as the binder interface is available.
+     *
+     * @param event a {@link PendingEvent} to send.
+     */
+    public void sendEvent(@NonNull PendingEvent event) {
         IInterface iface;
         synchronized (mLock) {
             iface = mBoundInterface;
@@ -167,15 +277,13 @@
      */
     public void disconnect() {
         synchronized (mLock) {
-            // Wipe out pending connections
-            mPendingConnection = null;
-
             // Unbind existing connection, if it exists
-            if (mConnection != null) {
-                mContext.unbindService(mConnection);
-                mConnection = null;
+            if (mConnection == null) {
+                return;
             }
 
+            mContext.unbindService(mConnection);
+            mConnection = null;
             mBoundInterface = null;
         }
     }
@@ -185,48 +293,70 @@
      */
     public void connect() {
         synchronized (mLock) {
-            if (mConnection != null || mPendingConnection != null) {
+            if (mConnection != null) {
                 // We're already connected or are trying to connect
                 return;
             }
 
-            final PendingIntent pendingIntent = PendingIntent.getActivity(
-                    mContext, 0, new Intent(mSettingsAction), 0);
-            final Intent intent = new Intent().setComponent(mComponent).
-                    putExtra(Intent.EXTRA_CLIENT_LABEL, mClientLabel).
-                    putExtra(Intent.EXTRA_CLIENT_INTENT, pendingIntent);
+            Intent intent  = new Intent().setComponent(mComponent);
+            if (mClientLabel != 0) {
+                intent.putExtra(Intent.EXTRA_CLIENT_LABEL, mClientLabel);
+            }
+            if (mSettingsAction != null) {
+                intent.putExtra(Intent.EXTRA_CLIENT_INTENT,
+                        PendingIntent.getActivity(mContext, 0, new Intent(mSettingsAction), 0));
+            }
 
-            final ServiceConnection serviceConnection = new ServiceConnection() {
+            mConnection = new ServiceConnection() {
+                @Override
+                public void onBindingDied(ComponentName componentName) {
+                    final long timestamp = System.currentTimeMillis();
+                    Slog.w(TAG, "Service binding died: " + componentName);
+                    synchronized (mLock) {
+                        if (mConnection != this) {
+                            return;
+                        }
+                        mHandler.post(() -> {
+                            mEventCb.onServiceEvent(new LogEvent(timestamp, mComponent,
+                                  LogEvent.EVENT_BINDING_DIED));
+                        });
+
+                        mBoundInterface = null;
+                        startRetriesLocked();
+                    }
+                }
+
                 @Override
                 public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
+                    final long timestamp = System.currentTimeMillis();
+                    Slog.i(TAG, "Service connected: " + componentName);
                     IInterface iface = null;
                     PendingEvent pendingEvent = null;
                     synchronized (mLock) {
-                        if (mPendingConnection == this) {
-                            // No longer pending, remove from pending connection
-                            mPendingConnection = null;
-                            mConnection = this;
-                        } else {
-                            // Service connection wasn't pending, must have been disconnected
-                            mContext.unbindService(this);
+                        if (mConnection != this) {
+                            // Must've been unbound.
                             return;
                         }
+                        mHandler.post(() -> {
+                            mEventCb.onServiceEvent(new LogEvent(timestamp, mComponent,
+                                  LogEvent.EVENT_CONNECTED));
+                        });
 
-                        try {
-                            iBinder.linkToDeath(mDeathRecipient, 0);
+                        stopRetriesLocked();
+
+                        mBoundInterface = null;
+                        if (mChecker != null) {
                             mBoundInterface = mChecker.asInterface(iBinder);
                             if (!mChecker.checkType(mBoundInterface)) {
-                                // Received an invalid binder, disconnect
-                                mContext.unbindService(this);
+                                // Received an invalid binder, disconnect.
                                 mBoundInterface = null;
+                                Slog.w(TAG, "Invalid binder from " + componentName);
+                                startRetriesLocked();
+                                return;
                             }
                             iface = mBoundInterface;
                             pendingEvent = mPendingEvent;
                             mPendingEvent = null;
-                        } catch (RemoteException e) {
-                            // DOA
-                            Slog.w(TAG, "Unable to bind service: " + intent, e);
-                            mBoundInterface = null;
                         }
                     }
                     if (iface != null && pendingEvent != null) {
@@ -234,28 +364,44 @@
                             pendingEvent.runEvent(iface);
                         } catch (RuntimeException | RemoteException ex) {
                             Slog.e(TAG, "Received exception from user service: ", ex);
+                            startRetriesLocked();
                         }
                     }
                 }
 
                 @Override
                 public void onServiceDisconnected(ComponentName componentName) {
-                    Slog.w(TAG, "Service disconnected: " + intent);
-                    mConnection = null;
-                    mBoundInterface = null;
+                    final long timestamp = System.currentTimeMillis();
+                    Slog.w(TAG, "Service disconnected: " + componentName);
+                    synchronized (mLock) {
+                        if (mConnection != this) {
+                            return;
+                        }
+
+                        mHandler.post(() -> {
+                            mEventCb.onServiceEvent(new LogEvent(timestamp, mComponent,
+                                  LogEvent.EVENT_DISCONNECTED));
+                        });
+
+                        mBoundInterface = null;
+                        startRetriesLocked();
+                    }
                 }
             };
 
-            mPendingConnection = serviceConnection;
-
+            int flags = Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE;
+            if (mIsImportant) {
+                flags |= Context.BIND_IMPORTANT;
+            }
             try {
-                if (!mContext.bindServiceAsUser(intent, serviceConnection,
-                        Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE,
+                if (!mContext.bindServiceAsUser(intent, mConnection, flags,
                         new UserHandle(mUserId))) {
                     Slog.w(TAG, "Unable to bind service: " + intent);
+                    startRetriesLocked();
                 }
             } catch (SecurityException e) {
                 Slog.w(TAG, "Unable to bind service: " + intent, e);
+                startRetriesLocked();
             }
         }
     }
@@ -263,4 +409,81 @@
     private boolean matches(final ComponentName component, final int userId) {
         return Objects.equals(mComponent, component) && mUserId == userId;
     }
+
+    private void startRetriesLocked() {
+        if (checkAndDeliverServiceDiedCbLocked()) {
+            // If we delivered the service callback, disconnect and stop retrying.
+            disconnect();
+            return;
+        }
+
+        if (mRetrying) {
+            // Retry already queued, don't queue a new one.
+            return;
+        }
+        mRetrying = true;
+        queueRetryLocked();
+    }
+
+    private void stopRetriesLocked() {
+        mRetrying = false;
+        mHandler.removeCallbacks(mRetryRunnable);
+    }
+
+    private void queueRetryLocked() {
+        long now = SystemClock.uptimeMillis();
+        if ((now - mLastRetryTimeMs) > RETRY_RESET_TIME_MS) {
+            // It's been longer than the reset time since we last had to retry.  Re-initialize.
+            mNextRetryDurationMs = MIN_RETRY_DURATION_MS;
+            mRetryCount = 0;
+        }
+        mLastRetryTimeMs = now;
+        mHandler.postDelayed(mRetryRunnable, mNextRetryDurationMs);
+        mNextRetryDurationMs = Math.min(2 * mNextRetryDurationMs, MAX_RETRY_DURATION_MS);
+        mRetryCount++;
+    }
+
+    private boolean checkAndDeliverServiceDiedCbLocked() {
+
+       if (mRetryType == RETRY_NEVER || (mRetryType == RETRY_BEST_EFFORT
+                && mRetryCount >= MAX_RETRY_COUNT)) {
+            // If we never retry, or we've exhausted our retries, post the onServiceDied callback.
+            Slog.e(TAG, "Service " + mComponent + " has died too much, not retrying.");
+            if (mEventCb != null) {
+                final long timestamp = System.currentTimeMillis();
+                mHandler.post(() -> {
+                  mEventCb.onServiceEvent(new LogEvent(timestamp, mComponent,
+                        LogEvent.EVENT_STOPPED_PERMANENTLY));
+                });
+            }
+            return true;
+        }
+        return false;
+    }
+
+    private void doRetry() {
+        synchronized (mLock) {
+            if (mConnection == null) {
+                // We disconnected for good.  Don't attempt to retry.
+                return;
+            }
+            if (!mRetrying) {
+                // We successfully connected.  Don't attempt to retry.
+                return;
+            }
+            Slog.i(TAG, "Attempting to reconnect " + mComponent + "...");
+            // While frameworks may restart the remote Service if we stay bound, we have little
+            // control of the backoff timing for reconnecting the service.  In the event of a
+            // process crash, the backoff time can be very large (1-30 min), which is not
+            // acceptable for the types of services this is used for.  Instead force an unbind/bind
+            // sequence to cause a more immediate retry.
+            disconnect();
+            if (checkAndDeliverServiceDiedCbLocked()) {
+                // No more retries.
+                return;
+            }
+            queueRetryLocked();
+            connect();
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/vr/Vr2dDisplay.java b/services/core/java/com/android/server/vr/Vr2dDisplay.java
index 8f50a39..95d03d4 100644
--- a/services/core/java/com/android/server/vr/Vr2dDisplay.java
+++ b/services/core/java/com/android/server/vr/Vr2dDisplay.java
@@ -294,6 +294,9 @@
 
             int flags = DisplayManager.VIRTUAL_DISPLAY_FLAG_SUPPORTS_TOUCH;
             flags |= DisplayManager.VIRTUAL_DISPLAY_FLAG_ROTATES_WITH_CONTENT;
+            flags |= DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC;
+            flags |= DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY;
+            flags |= DisplayManager.VIRTUAL_DISPLAY_FLAG_DESTROY_CONTENT_ON_REMOVAL;
             mVirtualDisplay = mDisplayManager.createVirtualDisplay(null /* projection */,
                     DISPLAY_NAME, mVirtualDisplayWidth, mVirtualDisplayHeight, mVirtualDisplayDpi,
                     null /* surface */, flags, null /* callback */, null /* handler */,
diff --git a/services/core/java/com/android/server/vr/VrManagerInternal.java b/services/core/java/com/android/server/vr/VrManagerInternal.java
index bdd9de0..7b1e12e 100644
--- a/services/core/java/com/android/server/vr/VrManagerInternal.java
+++ b/services/core/java/com/android/server/vr/VrManagerInternal.java
@@ -74,6 +74,13 @@
     public abstract void onScreenStateChanged(boolean isScreenOn);
 
     /**
+     * Set whether the keyguard is currently active/showing.
+     *
+     * @param isShowing is {@code true} if the keyguard is active/showing.
+     */
+    public abstract void onKeyguardStateChanged(boolean isShowing);
+
+    /**
      * Return NO_ERROR if the given package is installed on the device and enabled as a
      * VrListenerService for the given current user, or a negative error code indicating a failure.
      *
diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java
index 030b74c..b0fd248 100644
--- a/services/core/java/com/android/server/vr/VrManagerService.java
+++ b/services/core/java/com/android/server/vr/VrManagerService.java
@@ -21,6 +21,7 @@
 import android.app.ActivityManagerInternal;
 import android.app.ActivityManager;
 import android.app.AppOpsManager;
+import android.app.INotificationManager;
 import android.app.Vr2dDisplayProperties;
 import android.app.NotificationManager;
 import android.annotation.NonNull;
@@ -42,6 +43,7 @@
 import android.os.Message;
 import android.os.RemoteCallbackList;
 import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.provider.Settings;
@@ -64,6 +66,8 @@
 import com.android.server.SystemConfig;
 import com.android.server.SystemService;
 import com.android.server.utils.ManagedApplicationService.PendingEvent;
+import com.android.server.utils.ManagedApplicationService.LogEvent;
+import com.android.server.utils.ManagedApplicationService.LogFormattable;
 import com.android.server.vr.EnabledComponentsObserver.EnabledComponentChangeListener;
 import com.android.server.utils.ManagedApplicationService;
 import com.android.server.utils.ManagedApplicationService.BinderChecker;
@@ -72,10 +76,12 @@
 import java.io.PrintWriter;
 import java.lang.StringBuilder;
 import java.text.SimpleDateFormat;
+import java.util.Arrays;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -104,16 +110,18 @@
     static final boolean DBG = false;
 
     private static final int PENDING_STATE_DELAY_MS = 300;
-    private static final int EVENT_LOG_SIZE = 32;
+    private static final int EVENT_LOG_SIZE = 64;
     private static final int INVALID_APPOPS_MODE = -1;
     /** Null set of sleep sleep flags. */
     private static final int FLAG_NONE = 0;
     /** Flag set when the device is not sleeping. */
-    private static final int FLAG_AWAKE = 1;
+    private static final int FLAG_AWAKE = 1 << 0;
     /** Flag set when the screen has been turned on. */
-    private static final int FLAG_SCREEN_ON = 2;
+    private static final int FLAG_SCREEN_ON = 1 << 1;
+    /** Flag set when the keyguard is not active. */
+    private static final int FLAG_KEYGUARD_UNLOCKED = 1 << 2;
     /** Flag indicating that all system sleep flags have been set.*/
-    private static final int FLAG_ALL = FLAG_AWAKE | FLAG_SCREEN_ON;
+    private static final int FLAG_ALL = FLAG_AWAKE | FLAG_SCREEN_ON | FLAG_KEYGUARD_UNLOCKED;
 
     private static native void initializeNative();
     private static native void setVrModeNative(boolean enabled);
@@ -130,6 +138,7 @@
     private int mVrAppProcessId;
     private EnabledComponentsObserver mComponentObserver;
     private ManagedApplicationService mCurrentVrService;
+    private ManagedApplicationService mCurrentVrCompositorService;
     private ComponentName mDefaultVrService;
     private Context mContext;
     private ComponentName mCurrentVrModeComponent;
@@ -143,18 +152,45 @@
     private int mPreviousCoarseLocationMode = INVALID_APPOPS_MODE;
     private int mPreviousManageOverlayMode = INVALID_APPOPS_MODE;
     private VrState mPendingState;
-    private final ArrayDeque<VrState> mLoggingDeque = new ArrayDeque<>(EVENT_LOG_SIZE);
+    private boolean mLogLimitHit;
+    private final ArrayDeque<LogFormattable> mLoggingDeque = new ArrayDeque<>(EVENT_LOG_SIZE);
     private final NotificationAccessManager mNotifAccessManager = new NotificationAccessManager();
+    private INotificationManager mNotificationManager;
     /** Tracks the state of the screen and keyguard UI.*/
-    private int mSystemSleepFlags = FLAG_AWAKE;
+    private int mSystemSleepFlags = FLAG_AWAKE | FLAG_KEYGUARD_UNLOCKED;
     /**
      * Set when ACTION_USER_UNLOCKED is fired. We shouldn't try to bind to the
-     * vr service before then.
+     * vr service before then. This gets set only once the first time the user unlocks the device
+     * and stays true thereafter.
      */
     private boolean mUserUnlocked;
     private Vr2dDisplay mVr2dDisplay;
     private boolean mBootsToVr;
 
+    // Handles events from the managed services (e.g. VrListenerService and any bound VR compositor
+    // service).
+    private final ManagedApplicationService.EventCallback mEventCallback
+                = new ManagedApplicationService.EventCallback() {
+        @Override
+        public void onServiceEvent(LogEvent event) {
+            logEvent(event);
+
+            ComponentName component = null;
+            synchronized (mLock) {
+                component = ((mCurrentVrService == null) ? null : mCurrentVrService.getComponent());
+            }
+
+            // If not on an AIO device and we permanently stopped trying to connect to the
+            // VrListenerService (or don't have one bound), leave persistent VR mode and VR mode.
+            if (!mBootsToVr && event.event == LogEvent.EVENT_STOPPED_PERMANENTLY &&
+                    (component == null || component.equals(event.component))) {
+                Slog.e(TAG, "VrListenerSevice has died permanently, leaving system VR mode.");
+                // We're not a native VR device.  Leave VR + persistent mode.
+                setPersistentVrModeEnabled(false);
+            }
+        }
+    };
+
     private static final int MSG_VR_STATE_CHANGE = 0;
     private static final int MSG_PENDING_VR_STATE_CHANGE = 1;
     private static final int MSG_PERSISTENT_VR_MODE_STATE_CHANGE = 2;
@@ -175,7 +211,6 @@
                 if (mBootsToVr) {
                     setPersistentVrModeEnabled(true);
                 }
-                consumeAndApplyPendingStateLocked();
                 if (mBootsToVr && !mVrModeEnabled) {
                   setVrMode(true, mDefaultVrService, 0, -1, null);
                 }
@@ -197,29 +232,40 @@
     }
 
     private void setSleepState(boolean isAsleep) {
-        synchronized(mLock) {
-
-            if (!isAsleep) {
-                mSystemSleepFlags |= FLAG_AWAKE;
-            } else {
-                mSystemSleepFlags &= ~FLAG_AWAKE;
-            }
-
-            updateVrModeAllowedLocked();
-        }
+        setSystemState(FLAG_AWAKE, !isAsleep);
     }
 
     private void setScreenOn(boolean isScreenOn) {
+        setSystemState(FLAG_SCREEN_ON, isScreenOn);
+    }
+
+    private void setKeyguardShowing(boolean isShowing) {
+        setSystemState(FLAG_KEYGUARD_UNLOCKED, !isShowing);
+    }
+
+    private void setSystemState(int flags, boolean isOn) {
         synchronized(mLock) {
-            if (isScreenOn) {
-                mSystemSleepFlags |= FLAG_SCREEN_ON;
+            int oldState = mSystemSleepFlags;
+            if (isOn) {
+                mSystemSleepFlags |= flags;
             } else {
-                mSystemSleepFlags &= ~FLAG_SCREEN_ON;
+                mSystemSleepFlags &= ~flags;
             }
-            updateVrModeAllowedLocked();
+            if (oldState != mSystemSleepFlags) {
+                if (DBG) Slog.d(TAG, "System state: " + getStateAsString());
+                updateVrModeAllowedLocked();
+            }
         }
     }
 
+    private String getStateAsString() {
+        return new StringBuilder()
+                .append((mSystemSleepFlags & FLAG_AWAKE) != 0 ? "awake, " : "")
+                .append((mSystemSleepFlags & FLAG_SCREEN_ON) != 0 ? "screen_on, " : "")
+                .append((mSystemSleepFlags & FLAG_KEYGUARD_UNLOCKED) != 0 ? "keyguard_off" : "")
+                .toString();
+    }
+
     private void setUserUnlocked() {
         synchronized(mLock) {
             mUserUnlocked = true;
@@ -271,7 +317,24 @@
         }
     };
 
-    private static class VrState {
+    // Event used to log when settings are changed for dumpsys logs.
+    private static class SettingEvent implements LogFormattable {
+        public final long timestamp;
+        public final String what;
+
+        SettingEvent(String what) {
+            this.timestamp = System.currentTimeMillis();
+            this.what = what;
+        }
+
+        @Override
+        public String toLogString(SimpleDateFormat dateFormat) {
+            return dateFormat.format(new Date(timestamp)) + "   " + what;
+        }
+    }
+
+    // Event used to track changes of the primary on-screen VR activity.
+    private static class VrState implements LogFormattable {
         final boolean enabled;
         final boolean running2dInVr;
         final int userId;
@@ -281,7 +344,6 @@
         final long timestamp;
         final boolean defaultPermissionsGranted;
 
-
         VrState(boolean enabled, boolean running2dInVr, ComponentName targetPackageName, int userId,
                 int processId, ComponentName callingPackage) {
             this.enabled = enabled;
@@ -305,6 +367,39 @@
             this.defaultPermissionsGranted = defaultPermissionsGranted;
             this.timestamp = System.currentTimeMillis();
         }
+
+        @Override
+        public String toLogString(SimpleDateFormat dateFormat) {
+            String tab = "  ";
+            String newLine = "\n";
+            StringBuilder sb = new StringBuilder(dateFormat.format(new Date(timestamp)));
+            sb.append(tab);
+            sb.append("State changed to:");
+            sb.append(tab);
+            sb.append((enabled) ? "ENABLED" : "DISABLED");
+            sb.append(newLine);
+            if (enabled) {
+                sb.append(tab);
+                sb.append("User=");
+                sb.append(userId);
+                sb.append(newLine);
+                sb.append(tab);
+                sb.append("Current VR Activity=");
+                sb.append((callingPackage == null) ? "None" : callingPackage.flattenToString());
+                sb.append(newLine);
+                sb.append(tab);
+                sb.append("Bound VrListenerService=");
+                sb.append((targetPackageName == null) ? "None"
+                        : targetPackageName.flattenToString());
+                sb.append(newLine);
+                if (defaultPermissionsGranted) {
+                    sb.append(tab);
+                    sb.append("Default permissions granted to the bound VrListenerService.");
+                    sb.append(newLine);
+                }
+            }
+            return sb.toString();
+        }
     }
 
     private static final BinderChecker sBinderChecker = new BinderChecker() {
@@ -410,7 +505,8 @@
 
         @Override
         public void registerListener(IVrStateCallbacks cb) {
-            enforceCallerPermission(Manifest.permission.ACCESS_VR_MANAGER);
+            enforceCallerPermissionAnyOf(Manifest.permission.ACCESS_VR_MANAGER,
+                    Manifest.permission.ACCESS_VR_STATE);
             if (cb == null) {
                 throw new IllegalArgumentException("Callback binder object is null.");
             }
@@ -420,7 +516,8 @@
 
         @Override
         public void unregisterListener(IVrStateCallbacks cb) {
-            enforceCallerPermission(Manifest.permission.ACCESS_VR_MANAGER);
+            enforceCallerPermissionAnyOf(Manifest.permission.ACCESS_VR_MANAGER,
+                    Manifest.permission.ACCESS_VR_STATE);
             if (cb == null) {
                 throw new IllegalArgumentException("Callback binder object is null.");
             }
@@ -430,7 +527,8 @@
 
         @Override
         public void registerPersistentVrStateListener(IPersistentVrStateCallbacks cb) {
-            enforceCallerPermission(Manifest.permission.ACCESS_VR_MANAGER);
+            enforceCallerPermissionAnyOf(Manifest.permission.ACCESS_VR_MANAGER,
+                    Manifest.permission.ACCESS_VR_STATE);
             if (cb == null) {
                 throw new IllegalArgumentException("Callback binder object is null.");
             }
@@ -440,7 +538,8 @@
 
         @Override
         public void unregisterPersistentVrStateListener(IPersistentVrStateCallbacks cb) {
-            enforceCallerPermission(Manifest.permission.ACCESS_VR_MANAGER);
+            enforceCallerPermissionAnyOf(Manifest.permission.ACCESS_VR_MANAGER,
+                    Manifest.permission.ACCESS_VR_STATE);
             if (cb == null) {
                 throw new IllegalArgumentException("Callback binder object is null.");
             }
@@ -450,19 +549,28 @@
 
         @Override
         public boolean getVrModeState() {
+            enforceCallerPermissionAnyOf(Manifest.permission.ACCESS_VR_MANAGER,
+                    Manifest.permission.ACCESS_VR_STATE);
             return VrManagerService.this.getVrMode();
         }
 
         @Override
+        public boolean getPersistentVrModeEnabled() {
+            enforceCallerPermissionAnyOf(Manifest.permission.ACCESS_VR_MANAGER,
+                    Manifest.permission.ACCESS_VR_STATE);
+            return VrManagerService.this.getPersistentVrMode();
+        }
+
+        @Override
         public void setPersistentVrModeEnabled(boolean enabled) {
-            enforceCallerPermission(Manifest.permission.RESTRICTED_VR_ACCESS);
+            enforceCallerPermissionAnyOf(Manifest.permission.RESTRICTED_VR_ACCESS);
             VrManagerService.this.setPersistentVrModeEnabled(enabled);
         }
 
         @Override
         public void setVr2dDisplayProperties(
                 Vr2dDisplayProperties vr2dDisplayProp) {
-            enforceCallerPermission(Manifest.permission.RESTRICTED_VR_ACCESS);
+            enforceCallerPermissionAnyOf(Manifest.permission.RESTRICTED_VR_ACCESS);
             VrManagerService.this.setVr2dDisplayProperties(vr2dDisplayProp);
         }
 
@@ -472,6 +580,13 @@
         }
 
         @Override
+        public void setAndBindCompositor(String componentName) {
+            enforceCallerPermissionAnyOf(Manifest.permission.RESTRICTED_VR_ACCESS);
+            VrManagerService.this.setAndBindCompositor(
+                (componentName == null) ? null : ComponentName.unflattenFromString(componentName));
+        }
+
+        @Override
         protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
             if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
 
@@ -479,6 +594,12 @@
             pw.println("VR mode is currently: " + ((mVrModeAllowed) ? "allowed" : "disallowed"));
             pw.println("Persistent VR mode is currently: " +
                     ((mPersistentVrModeEnabled) ? "enabled" : "disabled"));
+            pw.println("Currently bound VR listener service: "
+                    + ((mCurrentVrCompositorService == null)
+                    ? "None" : mCurrentVrCompositorService.getComponent().flattenToString()));
+            pw.println("Currently bound VR compositor service: "
+                    + ((mCurrentVrCompositorService == null)
+                    ? "None" : mCurrentVrCompositorService.getComponent().flattenToString()));
             pw.println("Previous state transitions:\n");
             String tab = "  ";
             dumpStateTransitions(pw);
@@ -526,11 +647,21 @@
 
     };
 
-    private void enforceCallerPermission(String permission) {
-        if (mContext.checkCallingOrSelfPermission(permission)
-                != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Caller does not hold the permission " + permission);
+    /**
+     * Enforces that at lease one of the specified permissions is held by the caller.
+     * Throws SecurityException if none of the specified permissions are held.
+     *
+     * @param permissions One or more permissions to check against.
+     */
+    private void enforceCallerPermissionAnyOf(String... permissions) {
+        for (String permission : permissions) {
+            if (mContext.checkCallingOrSelfPermission(permission)
+                    == PackageManager.PERMISSION_GRANTED) {
+                return;
+            }
         }
+        throw new SecurityException("Caller does not hold at least one of the permissions: "
+                + Arrays.toString(permissions));
     }
 
     /**
@@ -554,6 +685,11 @@
         }
 
         @Override
+        public void onKeyguardStateChanged(boolean isShowing) {
+            VrManagerService.this.setKeyguardShowing(isShowing);
+        }
+
+        @Override
         public boolean isCurrentVrListener(String packageName, int userId) {
             return VrManagerService.this.isCurrentVrListener(packageName, userId);
         }
@@ -604,6 +740,8 @@
     @Override
     public void onBootPhase(int phase) {
         if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
+            mNotificationManager = INotificationManager.Stub.asInterface(
+                    ServiceManager.getService(Context.NOTIFICATION_SERVICE));
             synchronized (mLock) {
                 Looper looper = Looper.getMainLooper();
                 Handler handler = new Handler(looper);
@@ -755,6 +893,7 @@
                         + mCurrentVrService.getComponent() + " for user "
                         + mCurrentVrService.getUserId());
                     mCurrentVrService.disconnect();
+                    updateCompositorServiceLocked(UserHandle.USER_NULL, null);
                     mCurrentVrService = null;
                 } else {
                     nothingChanged = true;
@@ -768,6 +907,7 @@
                         Slog.i(TAG, "VR mode component changed to " + component
                             + ", disconnecting " + mCurrentVrService.getComponent()
                             + " for user " + mCurrentVrService.getUserId());
+                        updateCompositorServiceLocked(UserHandle.USER_NULL, null);
                         createAndConnectService(component, userId);
                         sendUpdatedCaller = true;
                     } else {
@@ -857,50 +997,28 @@
     }
 
     private void grantNotificationListenerAccess(String pkg, int userId) {
+        NotificationManager nm = mContext.getSystemService(NotificationManager.class);
         PackageManager pm = mContext.getPackageManager();
         ArraySet<ComponentName> possibleServices = EnabledComponentsObserver.loadComponentNames(pm,
                 userId, NotificationListenerService.SERVICE_INTERFACE,
                 android.Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE);
-        ContentResolver resolver = mContext.getContentResolver();
-
-        ArraySet<String> current = getNotificationListeners(resolver, userId);
 
         for (ComponentName c : possibleServices) {
-            String flatName = c.flattenToString();
-            if (Objects.equals(c.getPackageName(), pkg)
-                    && !current.contains(flatName)) {
-                current.add(flatName);
+            if (Objects.equals(c.getPackageName(), pkg)) {
+                nm.setNotificationListenerAccessGrantedForUser(c, userId, true);
             }
         }
-
-        if (current.size() > 0) {
-            String flatSettings = formatSettings(current);
-            Settings.Secure.putStringForUser(resolver,
-                    Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,
-                    flatSettings, userId);
-        }
     }
 
     private void revokeNotificationListenerAccess(String pkg, int userId) {
-        ContentResolver resolver = mContext.getContentResolver();
+        NotificationManager nm = mContext.getSystemService(NotificationManager.class);
+        List<ComponentName> current = nm.getEnabledNotificationListeners(userId);
 
-        ArraySet<String> current = getNotificationListeners(resolver, userId);
-
-        ArrayList<String> toRemove = new ArrayList<>();
-
-        for (String c : current) {
-            ComponentName component = ComponentName.unflattenFromString(c);
+        for (ComponentName component : current) {
             if (component != null && component.getPackageName().equals(pkg)) {
-                toRemove.add(c);
+                nm.setNotificationListenerAccessGrantedForUser(component, userId, false);
             }
         }
-
-        current.removeAll(toRemove);
-
-        String flatSettings = formatSettings(current);
-        Settings.Secure.putStringForUser(resolver,
-                Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,
-                flatSettings, userId);
     }
 
     private void grantCoarseLocationPermissionIfNeeded(String pkg, int userId) {
@@ -977,7 +1095,7 @@
 
 
     private void createAndConnectService(@NonNull ComponentName component, int userId) {
-        mCurrentVrService = VrManagerService.create(mContext, component, userId);
+        mCurrentVrService = createVrListenerService(component, userId);
         mCurrentVrService.connect();
         Slog.i(TAG, "Connecting " + component + " for user " + userId);
     }
@@ -1012,13 +1130,27 @@
     }
 
     /**
-     * Helper function for making ManagedApplicationService instances.
+     * Helper function for making ManagedApplicationService for VrListenerService instances.
      */
-    private static ManagedApplicationService create(@NonNull Context context,
-            @NonNull ComponentName component, int userId) {
-        return ManagedApplicationService.build(context, component, userId,
+    private ManagedApplicationService createVrListenerService(@NonNull ComponentName component,
+            int userId) {
+        int retryType = (mBootsToVr) ? ManagedApplicationService.RETRY_FOREVER
+                : ManagedApplicationService.RETRY_NEVER;
+        return ManagedApplicationService.build(mContext, component, userId,
                 R.string.vr_listener_binding_label, Settings.ACTION_VR_LISTENER_SETTINGS,
-                sBinderChecker);
+                sBinderChecker, /*isImportant*/true, retryType, mHandler, mEventCallback);
+    }
+
+    /**
+     * Helper function for making ManagedApplicationService for VR Compositor instances.
+     */
+    private ManagedApplicationService createVrCompositorService(@NonNull ComponentName component,
+            int userId) {
+        int retryType = (mBootsToVr) ? ManagedApplicationService.RETRY_FOREVER
+                : ManagedApplicationService.RETRY_BEST_EFFORT;
+        return ManagedApplicationService.build(mContext, component, userId, /*clientLabel*/0,
+                /*settingsAction*/null, /*binderChecker*/null, /*isImportant*/true, retryType,
+                mHandler, /*disconnectCallback*/mEventCallback);
     }
 
     /**
@@ -1049,44 +1181,35 @@
 
     private void logStateLocked() {
         ComponentName currentBoundService = (mCurrentVrService == null) ? null :
-            mCurrentVrService.getComponent();
-        VrState current = new VrState(mVrModeEnabled, mRunning2dInVr, currentBoundService,
-            mCurrentVrModeUser, mVrAppProcessId, mCurrentVrModeComponent, mWasDefaultGranted);
-        if (mLoggingDeque.size() == EVENT_LOG_SIZE) {
-            mLoggingDeque.removeFirst();
+                mCurrentVrService.getComponent();
+        logEvent(new VrState(mVrModeEnabled, mRunning2dInVr, currentBoundService,
+                mCurrentVrModeUser, mVrAppProcessId, mCurrentVrModeComponent, mWasDefaultGranted));
+    }
+
+    private void logEvent(LogFormattable event) {
+        synchronized (mLoggingDeque) {
+            if (mLoggingDeque.size() == EVENT_LOG_SIZE) {
+                mLoggingDeque.removeFirst();
+                mLogLimitHit = true;
+            }
+            mLoggingDeque.add(event);
         }
-        mLoggingDeque.add(current);
     }
 
     private void dumpStateTransitions(PrintWriter pw) {
         SimpleDateFormat d = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
-        String tab = "  ";
-        if (mLoggingDeque.size() == 0) {
-            pw.print(tab);
-            pw.println("None");
-        }
-        for (VrState state : mLoggingDeque) {
-            pw.print(d.format(new Date(state.timestamp)));
-            pw.print(tab);
-            pw.print("State changed to:");
-            pw.print(tab);
-            pw.println((state.enabled) ? "ENABLED" : "DISABLED");
-            if (state.enabled) {
-                pw.print(tab);
-                pw.print("User=");
-                pw.println(state.userId);
-                pw.print(tab);
-                pw.print("Current VR Activity=");
-                pw.println((state.callingPackage == null) ?
-                    "None" : state.callingPackage.flattenToString());
-                pw.print(tab);
-                pw.print("Bound VrListenerService=");
-                pw.println((state.targetPackageName == null) ?
-                    "None" : state.targetPackageName.flattenToString());
-                if (state.defaultPermissionsGranted) {
-                    pw.print(tab);
-                    pw.println("Default permissions granted to the bound VrListenerService.");
-                }
+        synchronized (mLoggingDeque) {
+            if (mLoggingDeque.size() == 0) {
+                pw.print("  ");
+                pw.println("None");
+            }
+
+            if (mLogLimitHit) {
+                pw.println("..."); // Indicates log overflow
+            }
+
+            for (LogFormattable event : mLoggingDeque) {
+                pw.println(event.toLogString(d));
             }
         }
     }
@@ -1169,10 +1292,41 @@
         return INVALID_DISPLAY;
     }
 
+    private void setAndBindCompositor(ComponentName componentName) {
+        final int userId = UserHandle.getCallingUserId();
+        final long token = Binder.clearCallingIdentity();
+        synchronized (mLock) {
+            updateCompositorServiceLocked(userId, componentName);
+        }
+        Binder.restoreCallingIdentity(token);
+    }
+
+    private void updateCompositorServiceLocked(int userId, ComponentName componentName) {
+        if (mCurrentVrCompositorService != null
+                && mCurrentVrCompositorService.disconnectIfNotMatching(componentName, userId)) {
+            Slog.i(TAG, "Disconnecting compositor service: "
+                    + mCurrentVrCompositorService.getComponent());
+            // Check if existing service matches the requested one, if not (or if the requested
+            // component is null) disconnect it.
+            mCurrentVrCompositorService = null;
+        }
+
+        if (componentName != null && mCurrentVrCompositorService == null) {
+            // We don't have an existing service matching the requested component, so attempt to
+            // connect one.
+            Slog.i(TAG, "Connecting compositor service: " + componentName);
+            mCurrentVrCompositorService = createVrCompositorService(componentName, userId);
+            mCurrentVrCompositorService.connect();
+        }
+    }
+
     private void setPersistentModeAndNotifyListenersLocked(boolean enabled) {
         if (mPersistentVrModeEnabled == enabled) {
             return;
         }
+        String eventName = "Persistent VR mode " + ((enabled) ? "enabled" : "disabled");
+        Slog.i(TAG, eventName);
+        logEvent(new SettingEvent(eventName));
         mPersistentVrModeEnabled = enabled;
 
         mHandler.sendMessage(mHandler.obtainMessage(MSG_PERSISTENT_VR_MODE_STATE_CHANGE,
@@ -1220,4 +1374,10 @@
             return mVrModeEnabled;
         }
     }
+
+    private boolean getPersistentVrMode() {
+        synchronized (mLock) {
+            return mPersistentVrModeEnabled;
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index 827a5e5..a04a3248 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -283,14 +283,6 @@
                                 Slog.v(TAG, "Crop done; invoking completion callback");
                             }
                             wallpaper.imageWallpaperPending = false;
-                            if (wallpaper.setComplete != null) {
-                                try {
-                                    wallpaper.setComplete.onWallpaperChanged();
-                                } catch (RemoteException e) {
-                                    // if this fails we don't really care; the setting app may just
-                                    // have crashed and that sort of thing is a fact of life.
-                                }
-                            }
                             if (sysWallpaperChanged) {
                                 // If this was the system wallpaper, rebind...
                                 bindWallpaperComponentLocked(mImageWallpaper, true,
@@ -314,6 +306,16 @@
                             }
 
                             saveSettingsLocked(wallpaper.userId);
+
+                            // Publish completion *after* we've persisted the changes
+                            if (wallpaper.setComplete != null) {
+                                try {
+                                    wallpaper.setComplete.onWallpaperChanged();
+                                } catch (RemoteException e) {
+                                    // if this fails we don't really care; the setting app may just
+                                    // have crashed and that sort of thing is a fact of life.
+                                }
+                            }
                         }
                     }
                 }
@@ -1187,7 +1189,13 @@
         mMonitor = new MyPackageMonitor();
         mMonitor.register(context, null, UserHandle.ALL, true);
         getWallpaperDir(UserHandle.USER_SYSTEM).mkdirs();
+
+        // Initialize state from the persistent store, then guarantee that the
+        // WallpaperData for the system imagery is instantiated & active, creating
+        // it from defaults if necessary.
         loadSettingsLocked(UserHandle.USER_SYSTEM, false);
+        getWallpaperSafeLocked(UserHandle.USER_SYSTEM, FLAG_SYSTEM);
+
         mColorsChangedListeners = new SparseArray<>();
     }
 
@@ -1344,15 +1352,13 @@
     }
 
     void switchUser(int userId, IRemoteCallback reply) {
-        WallpaperData systemWallpaper;
-        WallpaperData lockWallpaper;
+        final WallpaperData systemWallpaper;
+        final WallpaperData lockWallpaper;
         synchronized (mLock) {
             mCurrentUserId = userId;
             systemWallpaper = getWallpaperSafeLocked(userId, FLAG_SYSTEM);
-            lockWallpaper = mLockWallpaperMap.get(userId);
-            if (lockWallpaper == null) {
-                lockWallpaper = systemWallpaper;
-            }
+            final WallpaperData tmpLockWallpaper = mLockWallpaperMap.get(userId);
+            lockWallpaper = tmpLockWallpaper == null ? systemWallpaper : tmpLockWallpaper;
             // Not started watching yet, in case wallpaper data was loaded for other reasons.
             if (systemWallpaper.wallpaperObserver == null) {
                 systemWallpaper.wallpaperObserver = new WallpaperObserver(systemWallpaper);
@@ -1360,8 +1366,13 @@
             }
             switchWallpaper(systemWallpaper, reply);
         }
-        notifyWallpaperColorsChanged(systemWallpaper, FLAG_SYSTEM);
-        notifyWallpaperColorsChanged(lockWallpaper, FLAG_LOCK);
+
+        // Offload color extraction to another thread since switchUser will be called
+        // from the main thread.
+        FgThread.getHandler().post(() -> {
+            notifyWallpaperColorsChanged(systemWallpaper, FLAG_SYSTEM);
+            notifyWallpaperColorsChanged(lockWallpaper, FLAG_LOCK);
+        });
     }
 
     void switchWallpaper(WallpaperData wallpaper, IRemoteCallback reply) {
@@ -1645,9 +1656,30 @@
         }
     }
 
+    private void enforceCallingOrSelfPermissionAndAppOp(String permission, final String callingPkg,
+            final int callingUid, String message) {
+        mContext.enforceCallingOrSelfPermission(permission, message);
+
+        final String opName = AppOpsManager.permissionToOp(permission);
+        if (opName != null) {
+            final int appOpMode = mAppOpsManager.noteOp(opName, callingUid, callingPkg);
+            if (appOpMode != AppOpsManager.MODE_ALLOWED) {
+                throw new SecurityException(
+                        message + ": " + callingPkg + " is not allowed to " + permission);
+            }
+        }
+    }
+
     @Override
-    public ParcelFileDescriptor getWallpaper(IWallpaperManagerCallback cb, final int which,
-            Bundle outParams, int wallpaperUserId) {
+    public ParcelFileDescriptor getWallpaper(String callingPkg, IWallpaperManagerCallback cb,
+            final int which, Bundle outParams, int wallpaperUserId) {
+        final int hasPrivilege = mContext.checkCallingOrSelfPermission(
+                android.Manifest.permission.READ_WALLPAPER_INTERNAL);
+        if (hasPrivilege != PackageManager.PERMISSION_GRANTED) {
+            enforceCallingOrSelfPermissionAndAppOp(android.Manifest.permission.READ_EXTERNAL_STORAGE,
+                    callingPkg, Binder.getCallingUid(), "read wallpaper");
+        }
+
         wallpaperUserId = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
                 Binder.getCallingUid(), wallpaperUserId, false, true, "getWallpaper", null);
 
@@ -1660,13 +1692,10 @@
                     (which == FLAG_LOCK) ? mLockWallpaperMap : mWallpaperMap;
             WallpaperData wallpaper = whichSet.get(wallpaperUserId);
             if (wallpaper == null) {
-                // common case, this is the first lookup post-boot of the system or
-                // unified lock, so we bring up the saved state lazily now and recheck.
-                loadSettingsLocked(wallpaperUserId, false);
-                wallpaper = whichSet.get(wallpaperUserId);
-                if (wallpaper == null) {
-                    return null;
-                }
+                // There is no established wallpaper imagery of this type (expected
+                // only for lock wallpapers; a system WallpaperData is established at
+                // user switch)
+                return null;
             }
             try {
                 if (outParams != null) {
@@ -1691,7 +1720,7 @@
     @Override
     public WallpaperInfo getWallpaperInfo(int userId) {
         userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
-                Binder.getCallingUid(), userId, false, true, "getWallpaperIdForUser", null);
+                Binder.getCallingUid(), userId, false, true, "getWallpaperInfo", null);
         synchronized (mLock) {
             WallpaperData wallpaper = mWallpaperMap.get(userId);
             if (wallpaper != null && wallpaper.connection != null) {
@@ -2293,7 +2322,7 @@
     private void writeWallpaperAttributes(XmlSerializer out, String tag, WallpaperData wallpaper)
             throws IllegalArgumentException, IllegalStateException, IOException {
         if (DEBUG) {
-            Slog.v(TAG, "writeWallpaperAttributes");
+            Slog.v(TAG, "writeWallpaperAttributes id=" + wallpaper.wallpaperId);
         }
         out.startTag(null, tag);
         out.attribute(null, "id", Integer.toString(wallpaper.wallpaperId));
@@ -2346,15 +2375,35 @@
     }
 
     private void migrateFromOld() {
-        File oldWallpaper = new File(WallpaperBackupHelper.WALLPAPER_IMAGE_KEY);
-        File oldInfo = new File(WallpaperBackupHelper.WALLPAPER_INFO_KEY);
-        if (oldWallpaper.exists()) {
-            File newWallpaper = new File(getWallpaperDir(0), WALLPAPER);
-            oldWallpaper.renameTo(newWallpaper);
-        }
-        if (oldInfo.exists()) {
-            File newInfo = new File(getWallpaperDir(0), WALLPAPER_INFO);
-            oldInfo.renameTo(newInfo);
+        // Pre-N, what existed is the one we're now using as the display crop
+        File preNWallpaper = new File(getWallpaperDir(0), WALLPAPER_CROP);
+        // In the very-long-ago, imagery lived with the settings app
+        File originalWallpaper = new File(WallpaperBackupHelper.WALLPAPER_IMAGE_KEY);
+        File newWallpaper = new File(getWallpaperDir(0), WALLPAPER);
+
+        // Migrations from earlier wallpaper image storage schemas
+        if (preNWallpaper.exists()) {
+            if (!newWallpaper.exists()) {
+                // we've got the 'wallpaper' crop file but not the nominal source image,
+                // so do the simple "just take everything" straight copy of legacy data
+                if (DEBUG) {
+                    Slog.i(TAG, "Migrating wallpaper schema");
+                }
+                FileUtils.copyFile(preNWallpaper, newWallpaper);
+            } // else we're in the usual modern case: both source & crop exist
+        } else if (originalWallpaper.exists()) {
+            // VERY old schema; make sure things exist and are in the right place
+            if (DEBUG) {
+                Slog.i(TAG, "Migrating antique wallpaper schema");
+            }
+            File oldInfo = new File(WallpaperBackupHelper.WALLPAPER_INFO_KEY);
+            if (oldInfo.exists()) {
+                File newInfo = new File(getWallpaperDir(0), WALLPAPER_INFO);
+                oldInfo.renameTo(newInfo);
+            }
+
+            FileUtils.copyFile(originalWallpaper, preNWallpaper);
+            originalWallpaper.renameTo(newWallpaper);
         }
     }
 
@@ -2372,6 +2421,9 @@
      * the event yet.  We use this safe method when we don't care about this ordering and just
      * want to update the data.  The data is going to be applied when the user switch observer
      * is eventually executed.
+     *
+     * Important: this method loads settings to initialize the given user's wallpaper data if
+     * there is no current in-memory state.
      */
     private WallpaperData getWallpaperSafeLocked(int userId, int which) {
         // We're setting either just system (work with the system wallpaper),
@@ -2410,17 +2462,15 @@
     }
 
     private void loadSettingsLocked(int userId, boolean keepDimensionHints) {
-        if (DEBUG) Slog.v(TAG, "loadSettingsLocked");
-
         JournaledFile journal = makeJournaledFile(userId);
         FileInputStream stream = null;
         File file = journal.chooseForRead();
-        if (!file.exists()) {
-            // This should only happen one time, when upgrading from a legacy system
-            migrateFromOld();
-        }
+
         WallpaperData wallpaper = mWallpaperMap.get(userId);
         if (wallpaper == null) {
+            // Do this once per boot
+            migrateFromOld();
+
             wallpaper = new WallpaperData(userId, WALLPAPER, WALLPAPER_CROP);
             wallpaper.allowBackup = true;
             mWallpaperMap.put(userId, wallpaper);
@@ -2740,6 +2790,7 @@
                 pw.print("  mCropHint="); pw.println(wallpaper.cropHint);
                 pw.print("  mPadding="); pw.println(wallpaper.padding);
                 pw.print("  mName=");  pw.println(wallpaper.name);
+                pw.print("  mAllowBackup="); pw.println(wallpaper.allowBackup);
                 pw.print("  mWallpaperComponent="); pw.println(wallpaper.wallpaperComponent);
                 if (wallpaper.connection != null) {
                     WallpaperConnection conn = wallpaper.connection;
@@ -2770,6 +2821,7 @@
                 pw.print("  mCropHint="); pw.println(wallpaper.cropHint);
                 pw.print("  mPadding="); pw.println(wallpaper.padding);
                 pw.print("  mName=");  pw.println(wallpaper.name);
+                pw.print("  mAllowBackup="); pw.println(wallpaper.allowBackup);
             }
 
         }
diff --git a/services/core/java/com/android/server/webkit/SystemImpl.java b/services/core/java/com/android/server/webkit/SystemImpl.java
index a0381f7..bf769ed 100644
--- a/services/core/java/com/android/server/webkit/SystemImpl.java
+++ b/services/core/java/com/android/server/webkit/SystemImpl.java
@@ -296,7 +296,10 @@
 
     @Override
     public boolean isMultiProcessDefaultEnabled() {
-        return true;
+        // Multiprocess is enabled for all 64-bit devices, since the ability to run the renderer
+        // process in 32-bit when it's a separate process typically results in a net memory saving.
+        // Multiprocess is also enabled for 32-bit devices unless they report they are "low ram".
+        return Build.SUPPORTED_64_BIT_ABIS.length > 0 || !ActivityManager.isLowRamDeviceStatic();
     }
 
     // flags declaring we want extra info from the package manager for webview providers
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
index 805250a..6484a13 100644
--- a/services/core/java/com/android/server/wm/AccessibilityController.java
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -429,6 +429,8 @@
         }
 
         public void getMagnificationRegionLocked(Region outMagnificationRegion) {
+            // Make sure we're working with the most current bounds
+            mMagnifedViewport.recomputeBoundsLocked();
             mMagnifedViewport.getMagnificationRegionLocked(outMagnificationRegion);
         }
 
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index b1ed358..cda3efd 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -49,6 +49,7 @@
 import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_AFTER_ANIM;
 
 import android.annotation.Nullable;
+import android.app.ActivityManager;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
@@ -255,6 +256,7 @@
     private boolean mProlongedAnimationsEnded;
 
     private final boolean mGridLayoutRecentsEnabled;
+    private final boolean mLowRamRecentsEnabled;
 
     AppTransition(Context context, WindowManagerService service) {
         mContext = context;
@@ -295,6 +297,7 @@
         mClipRevealTranslationY = (int) (CLIP_REVEAL_TRANSLATION_Y_DP
                 * mContext.getResources().getDisplayMetrics().density);
         mGridLayoutRecentsEnabled = SystemProperties.getBoolean("ro.recents.grid", false);
+        mLowRamRecentsEnabled = ActivityManager.isLowRamDeviceStatic();
     }
 
     boolean isTransitionSet() {
@@ -1121,7 +1124,8 @@
      */
     Animation createAspectScaledThumbnailEnterExitAnimationLocked(int thumbTransitState,
             int uiMode, int orientation, int transit, Rect containingFrame, Rect contentInsets,
-            @Nullable Rect surfaceInsets, boolean freeform, int taskId) {
+            @Nullable Rect surfaceInsets, @Nullable Rect stableInsets, boolean freeform,
+            int taskId) {
         Animation a;
         final int appWidth = containingFrame.width();
         final int appHeight = containingFrame.height();
@@ -1179,8 +1183,15 @@
                         final float x = containingFrame.width() / 2f
                                 - containingFrame.width() / 2f * scale;
                         final float targetY = (mTmpRect.top - containingFrame.top);
-                        final float y = containingFrame.height() / 2f
+                        float y = containingFrame.height() / 2f
                                 - containingFrame.height() / 2f * scale;
+
+                        // During transition may require clipping offset from any top stable insets
+                        // such as the statusbar height when statusbar is hidden
+                        if (mLowRamRecentsEnabled && contentInsets.top == 0 && scaleUp) {
+                            mTmpFromClipRect.top += stableInsets.top;
+                            y += stableInsets.top;
+                        }
                         final float startX = targetX - x;
                         final float startY = targetY - y;
                         Animation clipAnim = scaleUp
@@ -1497,8 +1508,8 @@
      */
     Animation loadAnimation(WindowManager.LayoutParams lp, int transit, boolean enter, int uiMode,
             int orientation, Rect frame, Rect displayFrame, Rect insets,
-            @Nullable Rect surfaceInsets, boolean isVoiceInteraction, boolean freeform,
-            int taskId) {
+            @Nullable Rect surfaceInsets, @Nullable Rect stableInsets, boolean isVoiceInteraction,
+            boolean freeform, int taskId) {
         Animation a;
         if (isKeyguardGoingAwayTransit(transit) && enter) {
             a = loadKeyguardExitAnimation(transit);
@@ -1582,7 +1593,7 @@
                     (mNextAppTransitionType == NEXT_TRANSIT_TYPE_THUMBNAIL_ASPECT_SCALE_UP);
             a = createAspectScaledThumbnailEnterExitAnimationLocked(
                     getThumbnailTransitionState(enter), uiMode, orientation, transit, frame,
-                    insets, surfaceInsets, freeform, taskId);
+                    insets, surfaceInsets, stableInsets, freeform, taskId);
             if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) {
                 String animName = mNextAppTransitionScaleUp ?
                         "ANIM_THUMBNAIL_ASPECT_SCALE_UP" : "ANIM_THUMBNAIL_ASPECT_SCALE_DOWN";
diff --git a/services/core/java/com/android/server/wm/AppWindowAnimator.java b/services/core/java/com/android/server/wm/AppWindowAnimator.java
index ddbbde1..c76b905 100644
--- a/services/core/java/com/android/server/wm/AppWindowAnimator.java
+++ b/services/core/java/com/android/server/wm/AppWindowAnimator.java
@@ -16,8 +16,8 @@
 
 package com.android.server.wm;
 
+import static android.view.Display.INVALID_DISPLAY;
 import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM;
-
 import static com.android.server.wm.AppTransition.TRANSIT_UNSET;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
@@ -148,7 +148,7 @@
         }
         // Start out animation gone if window is gone, or visible if window is visible.
         transformation.clear();
-        transformation.setAlpha(mAppToken.hasContentToDisplay() ? 1 : 0);
+        transformation.setAlpha(mAppToken.isVisible() ? 1 : 0);
         hasTransformation = true;
         mStackClip = stackClip;
 
@@ -172,7 +172,7 @@
         animation = sDummyAnimation;
         hasTransformation = true;
         transformation.clear();
-        transformation.setAlpha(mAppToken.hasContentToDisplay() ? 1 : 0);
+        transformation.setAlpha(mAppToken.isVisible() ? 1 : 0);
     }
 
     void setNullAnimation() {
@@ -358,7 +358,7 @@
 
     // This must be called while inside a transaction.
     boolean stepAnimationLocked(long currentTime) {
-        if (mService.okToAnimate()) {
+        if (mAppToken.okToAnimate()) {
             // We will run animations as long as the display isn't frozen.
 
             if (animation == sDummyAnimation) {
@@ -423,8 +423,8 @@
 
         if (DEBUG_ANIM) Slog.v(TAG, "Animation done in " + mAppToken
                 + ": reportedVisible=" + mAppToken.reportedVisible
-                + " okToDisplay=" + mService.okToDisplay()
-                + " okToAnimate=" + mService.okToAnimate()
+                + " okToDisplay=" + mAppToken.okToDisplay()
+                + " okToAnimate=" + mAppToken.okToAnimate()
                 + " startingDisplayed=" + mAppToken.startingDisplayed);
 
         transformation.clear();
@@ -450,7 +450,7 @@
         return isAnimating;
     }
 
-    void dump(PrintWriter pw, String prefix, boolean dumpAll) {
+    void dump(PrintWriter pw, String prefix) {
         pw.print(prefix); pw.print("mAppToken="); pw.println(mAppToken);
         pw.print(prefix); pw.print("mAnimator="); pw.println(mAnimator);
         pw.print(prefix); pw.print("freezingScreen="); pw.print(freezingScreen);
diff --git a/services/core/java/com/android/server/wm/AppWindowContainerController.java b/services/core/java/com/android/server/wm/AppWindowContainerController.java
index e9696d2..8b95483 100644
--- a/services/core/java/com/android/server/wm/AppWindowContainerController.java
+++ b/services/core/java/com/android/server/wm/AppWindowContainerController.java
@@ -17,6 +17,7 @@
 package com.android.server.wm;
 
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
+import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
 
 import static com.android.server.wm.AppTransition.TRANSIT_DOCK_TASK_FROM_RECENTS;
@@ -365,7 +366,6 @@
                 // if made visible again.
                 wtoken.removeDeadWindows();
                 wtoken.setVisibleBeforeClientHidden();
-                mService.mUnknownAppVisibilityController.appRemovedOrHidden(wtoken);
             } else {
                 if (!mService.mAppTransition.isTransitionSet()
                         && mService.mAppTransition.isReady()) {
@@ -401,7 +401,7 @@
 
             // If we are preparing an app transition, then delay changing
             // the visibility of this token until we execute that transition.
-            if (mService.okToAnimate() && mService.mAppTransition.isTransitionSet()) {
+            if (wtoken.okToAnimate() && mService.mAppTransition.isTransitionSet()) {
                 // A dummy animation is a placeholder animation which informs others that an
                 // animation is going on (in this case an application transition). If the animation
                 // was transferred from another application/animator, no dummy animator should be
@@ -478,7 +478,7 @@
 
             // If the display is frozen, we won't do anything until the actual window is
             // displayed so there is no reason to put in the starting window.
-            if (!mService.okToDisplay()) {
+            if (!mContainer.okToDisplay()) {
                 return false;
             }
 
@@ -631,9 +631,12 @@
                 mContainer.startingSurface = null;
                 mContainer.startingWindow = null;
                 mContainer.startingDisplayed = false;
-                if (surface == null && DEBUG_STARTING_WINDOW) {
-                    Slog.v(TAG_WM, "startingWindow was set but startingSurface==null, couldn't "
-                            + "remove");
+                if (surface == null) {
+                    if (DEBUG_STARTING_WINDOW) {
+                        Slog.v(TAG_WM, "startingWindow was set but startingSurface==null, couldn't "
+                                + "remove");
+                    }
+                    return;
                 }
             } else {
                 if (DEBUG_STARTING_WINDOW) {
@@ -649,7 +652,7 @@
 
             // Use the same thread to remove the window as we used to add it, as otherwise we end up
             // with things in the view hierarchy being called from different threads.
-            mHandler.post(() -> {
+            mService.mAnimationHandler.post(() -> {
                 if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Removing startingView=" + surface);
                 try {
                     surface.remove();
@@ -699,16 +702,17 @@
 
     public void startFreezingScreen(int configChanges) {
         synchronized(mWindowMap) {
-            if (configChanges == 0 && mService.okToDisplay()) {
-                if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Skipping set freeze of " + mToken);
-                return;
-            }
-
             if (mContainer == null) {
                 Slog.w(TAG_WM,
                         "Attempted to freeze screen with non-existing app token: " + mContainer);
                 return;
             }
+
+            if (configChanges == 0 && mContainer.okToDisplay()) {
+                if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Skipping set freeze of " + mToken);
+                return;
+            }
+
             mContainer.startFreezingScreen();
         }
     }
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index 2e4de8c..7b240c2 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -62,6 +62,7 @@
 import android.view.IApplicationToken;
 import android.view.SurfaceControl;
 import android.view.WindowManager;
+import android.view.WindowManager.LayoutParams;
 import android.view.WindowManagerPolicy.StartingSurface;
 
 import com.android.internal.util.ToBooleanFunction;
@@ -72,8 +73,6 @@
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 
-import static android.os.Build.VERSION_CODES.O;
-
 class AppTokenList extends ArrayList<AppWindowToken> {
 }
 
@@ -366,10 +365,10 @@
 
             boolean runningAppAnimation = false;
 
+            if (mAppAnimator.animation == AppWindowAnimator.sDummyAnimation) {
+                mAppAnimator.setNullAnimation();
+            }
             if (transit != AppTransition.TRANSIT_UNSET) {
-                if (mAppAnimator.animation == AppWindowAnimator.sDummyAnimation) {
-                    mAppAnimator.setNullAnimation();
-                }
                 if (mService.applyAnimationLocked(this, lp, transit, visible, isVoiceInteraction)) {
                     delayed = runningAppAnimation = true;
                 }
@@ -470,6 +469,20 @@
         return delayed;
     }
 
+    /**
+     * @return The to top most child window for which {@link LayoutParams#isFullscreen()} returns
+     *         true.
+     */
+    WindowState getTopFullscreenWindow() {
+        for (int i = mChildren.size() - 1; i >= 0; i--) {
+            final WindowState win = mChildren.get(i);
+            if (win != null && win.mAttrs.isFullscreen()) {
+                return win;
+            }
+        }
+        return null;
+    }
+
     WindowState findMainWindow() {
         WindowState candidate = null;
         int j = mChildren.size();
@@ -1293,15 +1306,6 @@
      */
     @Override
     int getOrientation(int candidate) {
-        // We do not allow non-fullscreen apps to influence orientation beyond O. While we do
-        // throw an exception in {@link Activity#onCreate} and
-        // {@link Activity#setRequestedOrientation}, we also ignore the orientation here so that
-        // other calculations aren't affected.
-        if (!fillsParent() && mTargetSdk > O) {
-            // Can't specify orientation if app doesn't fill parent.
-            return SCREEN_ORIENTATION_UNSET;
-        }
-
         if (candidate == SCREEN_ORIENTATION_BEHIND) {
             // Allow app to specify orientation regardless of its visibility state if the current
             // candidate want us to use orientation behind. I.e. the visible app on-top of this one
@@ -1743,6 +1747,9 @@
         if (mRemovingFromDisplay) {
             pw.println(prefix + "mRemovingFromDisplay=" + mRemovingFromDisplay);
         }
+        if (mAppAnimator.isAnimating()) {
+            mAppAnimator.dump(pw, prefix + "  ");
+        }
     }
 
     @Override
diff --git a/services/core/java/com/android/server/wm/BoundsAnimationController.java b/services/core/java/com/android/server/wm/BoundsAnimationController.java
index cff2fad..7953ee4 100644
--- a/services/core/java/com/android/server/wm/BoundsAnimationController.java
+++ b/services/core/java/com/android/server/wm/BoundsAnimationController.java
@@ -21,7 +21,6 @@
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
 
 import android.animation.AnimationHandler;
-import android.animation.AnimationHandler.AnimationFrameCallbackProvider;
 import android.animation.Animator;
 import android.animation.ValueAnimator;
 import android.annotation.IntDef;
@@ -32,13 +31,11 @@
 import android.os.Debug;
 import android.util.ArrayMap;
 import android.util.Slog;
-import android.view.Choreographer;
 import android.view.animation.AnimationUtils;
 import android.view.animation.Interpolator;
 import android.view.WindowManagerInternal;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -142,9 +139,6 @@
         // True if this this animation was canceled and will be replaced the another animation from
         // the same {@link #BoundsAnimationTarget} target.
         private boolean mSkipFinalResize;
-        // True if this animation replaced a previous animation of the same
-        // {@link #BoundsAnimationTarget} target.
-        private final boolean mSkipAnimationStart;
         // True if this animation was canceled by the user, not as a part of a replacing animation
         private boolean mSkipAnimationEnd;
 
@@ -159,6 +153,7 @@
 
         // Whether to schedule PiP mode changes on animation start/end
         private @SchedulePipModeChangedState int mSchedulePipModeChangedState;
+        private @SchedulePipModeChangedState int mPrevSchedulePipModeChangedState;
 
         // Depending on whether we are animating from
         // a smaller to a larger size
@@ -171,14 +166,14 @@
 
         BoundsAnimator(BoundsAnimationTarget target, Rect from, Rect to,
                 @SchedulePipModeChangedState int schedulePipModeChangedState,
-                boolean moveFromFullscreen, boolean moveToFullscreen,
-                boolean replacingExistingAnimation) {
+                @SchedulePipModeChangedState int prevShedulePipModeChangedState,
+                boolean moveFromFullscreen, boolean moveToFullscreen) {
             super();
             mTarget = target;
             mFrom.set(from);
             mTo.set(to);
-            mSkipAnimationStart = replacingExistingAnimation;
             mSchedulePipModeChangedState = schedulePipModeChangedState;
+            mPrevSchedulePipModeChangedState = prevShedulePipModeChangedState;
             mMoveFromFullscreen = moveFromFullscreen;
             mMoveToFullscreen = moveToFullscreen;
             addUpdateListener(this);
@@ -200,7 +195,7 @@
         @Override
         public void onAnimationStart(Animator animation) {
             if (DEBUG) Slog.d(TAG, "onAnimationStart: mTarget=" + mTarget
-                    + " mSkipAnimationStart=" + mSkipAnimationStart
+                    + " mPrevSchedulePipModeChangedState=" + mPrevSchedulePipModeChangedState
                     + " mSchedulePipModeChangedState=" + mSchedulePipModeChangedState);
             mFinishAnimationAfterTransition = false;
             mTmpRect.set(mFrom.left, mFrom.top, mFrom.left + mFrozenTaskWidth,
@@ -210,18 +205,26 @@
             // running
             updateBooster();
 
-            // Ensure that we have prepared the target for animation before
-            // we trigger any size changes, so it can swap surfaces
-            // in to appropriate modes, or do as it wishes otherwise.
-            if (!mSkipAnimationStart) {
+            // Ensure that we have prepared the target for animation before we trigger any size
+            // changes, so it can swap surfaces in to appropriate modes, or do as it wishes
+            // otherwise.
+            if (mPrevSchedulePipModeChangedState == NO_PIP_MODE_CHANGED_CALLBACKS) {
                 mTarget.onAnimationStart(mSchedulePipModeChangedState ==
-                        SCHEDULE_PIP_MODE_CHANGED_ON_START);
+                        SCHEDULE_PIP_MODE_CHANGED_ON_START, false /* forceUpdate */);
 
                 // When starting an animation from fullscreen, pause here and wait for the
                 // windows-drawn signal before we start the rest of the transition down into PiP.
                 if (mMoveFromFullscreen) {
                     pause();
                 }
+            } else if (mPrevSchedulePipModeChangedState == SCHEDULE_PIP_MODE_CHANGED_ON_END &&
+                    mSchedulePipModeChangedState == SCHEDULE_PIP_MODE_CHANGED_ON_START) {
+                // We are replacing a running animation into PiP, but since it hasn't completed, the
+                // client will not currently receive any picture-in-picture mode change callbacks.
+                // However, we still need to report to them that they are leaving PiP, so this will
+                // force an update via a mode changed callback.
+                mTarget.onAnimationStart(true /* schedulePipModeChangedCallback */,
+                        true /* forceUpdate */);
             }
 
             // Immediately update the task bounds if they have to become larger, but preserve
@@ -388,6 +391,8 @@
             boolean moveFromFullscreen, boolean moveToFullscreen) {
         final BoundsAnimator existing = mRunningAnimations.get(target);
         final boolean replacing = existing != null;
+        @SchedulePipModeChangedState int prevSchedulePipModeChangedState =
+                NO_PIP_MODE_CHANGED_CALLBACKS;
 
         if (DEBUG) Slog.d(TAG, "animateBounds: target=" + target + " from=" + from + " to=" + to
                 + " schedulePipModeChangedState=" + schedulePipModeChangedState
@@ -403,6 +408,9 @@
                 return existing;
             }
 
+            // Save the previous state
+            prevSchedulePipModeChangedState = existing.mSchedulePipModeChangedState;
+
             // Update the PiP callback states if we are replacing the animation
             if (existing.mSchedulePipModeChangedState == SCHEDULE_PIP_MODE_CHANGED_ON_START) {
                 if (schedulePipModeChangedState == SCHEDULE_PIP_MODE_CHANGED_ON_START) {
@@ -428,7 +436,8 @@
             existing.cancel();
         }
         final BoundsAnimator animator = new BoundsAnimator(target, from, to,
-                schedulePipModeChangedState, moveFromFullscreen, moveToFullscreen, replacing);
+                schedulePipModeChangedState, prevSchedulePipModeChangedState,
+                moveFromFullscreen, moveToFullscreen);
         mRunningAnimations.put(target, animator);
         animator.setFloatValues(0f, 1f);
         animator.setDuration((animationDuration != -1 ? animationDuration
diff --git a/services/core/java/com/android/server/wm/BoundsAnimationTarget.java b/services/core/java/com/android/server/wm/BoundsAnimationTarget.java
index 8b1bf7b..647a2d6 100644
--- a/services/core/java/com/android/server/wm/BoundsAnimationTarget.java
+++ b/services/core/java/com/android/server/wm/BoundsAnimationTarget.java
@@ -31,7 +31,7 @@
      * @param schedulePipModeChangedCallback whether or not to schedule the PiP mode changed
      * callbacks
      */
-    void onAnimationStart(boolean schedulePipModeChangedCallback);
+    void onAnimationStart(boolean schedulePipModeChangedCallback, boolean forceUpdate);
 
     /**
      * Sets the size of the target (without any intermediate steps, like scheduling animation)
diff --git a/services/core/java/com/android/server/wm/DimLayerController.java b/services/core/java/com/android/server/wm/DimLayerController.java
index 7414928..6f9e45a 100644
--- a/services/core/java/com/android/server/wm/DimLayerController.java
+++ b/services/core/java/com/android/server/wm/DimLayerController.java
@@ -290,7 +290,7 @@
             state.dimLayer.setLayer(dimLayer);
         }
         if (state.dimLayer.isAnimating()) {
-            if (!mDisplayContent.mService.okToAnimate()) {
+            if (!mDisplayContent.okToAnimate()) {
                 // Jump to the end of the animation.
                 state.dimLayer.show();
             } else {
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 5bc4a6b..ba99f38 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -57,6 +57,7 @@
 import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_CONFIG;
 import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
 import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
+import static com.android.server.wm.AppTransition.TRANSIT_KEYGUARD_UNOCCLUDE;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_BOOT;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DISPLAY;
@@ -949,10 +950,10 @@
         final int lastOrientation = mLastOrientation;
         final boolean oldAltOrientation = mAltOrientation;
         int rotation = mService.mPolicy.rotationForOrientationLw(lastOrientation, oldRotation);
-        final boolean rotateSeamlessly = mService.mPolicy.shouldRotateSeamlessly(oldRotation,
+        boolean mayRotateSeamlessly = mService.mPolicy.shouldRotateSeamlessly(oldRotation,
                 rotation);
 
-        if (rotateSeamlessly) {
+        if (mayRotateSeamlessly) {
             final WindowState seamlessRotated = getWindow((w) -> w.mSeamlesslyRotated);
             if (seamlessRotated != null) {
                 // We can't rotate (seamlessly or not) while waiting for the last seamless rotation
@@ -961,7 +962,20 @@
                 // window-removal.
                 return false;
             }
+
+            // In the presence of the PINNED stack or System Alert
+            // windows we unforuntately can not seamlessly rotate.
+            if (getStackById(PINNED_STACK_ID) != null) {
+                mayRotateSeamlessly = false;
+            }
+            for (int i = 0; i < mService.mSessions.size(); i++) {
+                if (mService.mSessions.valueAt(i).hasAlertWindowSurfaces()) {
+                    mayRotateSeamlessly = false;
+                    break;
+                }
+            }
         }
+        final boolean rotateSeamlessly = mayRotateSeamlessly;
 
         // TODO: Implement forced rotation changes.
         //       Set mAltOrientation to indicate that the application is receiving
@@ -2125,8 +2139,9 @@
             pw.print("x"); pw.print(mDisplayInfo.smallestNominalAppHeight);
             pw.print("-"); pw.print(mDisplayInfo.largestNominalAppWidth);
             pw.print("x"); pw.println(mDisplayInfo.largestNominalAppHeight);
-            pw.println(subPrefix + "deferred=" + mDeferredRemoval
+            pw.print(subPrefix + "deferred=" + mDeferredRemoval
                     + " mLayoutNeeded=" + mLayoutNeeded);
+            pw.println(" mTouchExcludeRegion=" + mTouchExcludeRegion);
 
         pw.println();
         pw.println(prefix + "Application tokens in top down Z order:");
@@ -3018,7 +3033,7 @@
                 final boolean foundTargetWs =
                         (w.mAppToken != null && w.mAppToken.token == appToken)
                                 || (mScreenshotApplicationState.appWin != null && wallpaperOnly);
-                if (foundTargetWs && winAnim.getShown()) {
+                if (foundTargetWs && winAnim.getShown() && winAnim.mLastAlpha > 0f) {
                     mScreenshotApplicationState.screenshotReady = true;
                 }
 
@@ -3204,6 +3219,19 @@
         mService.requestTraversal();
     }
 
+    boolean okToDisplay() {
+        if (mDisplayId == DEFAULT_DISPLAY) {
+            return !mService.mDisplayFrozen
+                    && mService.mDisplayEnabled && mService.mPolicy.isScreenOn();
+        }
+        return mDisplayInfo.state == Display.STATE_ON;
+    }
+
+    boolean okToAnimate() {
+        return okToDisplay() &&
+                (mDisplayId != DEFAULT_DISPLAY || mService.mPolicy.okToAnimate());
+    }
+
     static final class TaskForResizePointSearchResult {
         boolean searchDone;
         Task taskForResize;
@@ -3541,7 +3569,8 @@
 
             mLastWindowForcedOrientation = SCREEN_ORIENTATION_UNSPECIFIED;
 
-            if (policy.isKeyguardShowingAndNotOccluded()) {
+            if (policy.isKeyguardShowingAndNotOccluded()
+                    || mService.mAppTransition.getAppTransition() == TRANSIT_KEYGUARD_UNOCCLUDE) {
                 return mLastKeyguardForcedOrientation;
             }
 
diff --git a/services/core/java/com/android/server/wm/PinnedStackWindowController.java b/services/core/java/com/android/server/wm/PinnedStackWindowController.java
index 989e8f2..fc0baad 100644
--- a/services/core/java/com/android/server/wm/PinnedStackWindowController.java
+++ b/services/core/java/com/android/server/wm/PinnedStackWindowController.java
@@ -202,10 +202,12 @@
      */
 
     /** Calls directly into activity manager so window manager lock shouldn't held. */
-    public void updatePictureInPictureModeForPinnedStackAnimation(Rect targetStackBounds) {
+    public void updatePictureInPictureModeForPinnedStackAnimation(Rect targetStackBounds,
+            boolean forceUpdate) {
         if (mListener != null) {
             PinnedStackWindowListener listener = (PinnedStackWindowListener) mListener;
-            listener.updatePictureInPictureModeForPinnedStackAnimation(targetStackBounds);
+            listener.updatePictureInPictureModeForPinnedStackAnimation(targetStackBounds,
+                    forceUpdate);
         }
     }
 }
diff --git a/services/core/java/com/android/server/wm/PinnedStackWindowListener.java b/services/core/java/com/android/server/wm/PinnedStackWindowListener.java
index 12b9c1f..33e8a60 100644
--- a/services/core/java/com/android/server/wm/PinnedStackWindowListener.java
+++ b/services/core/java/com/android/server/wm/PinnedStackWindowListener.java
@@ -28,5 +28,6 @@
      * Called when the stack container pinned stack animation will change the picture-in-picture
      * mode. This is a direct call into ActivityManager.
      */
-    default void updatePictureInPictureModeForPinnedStackAnimation(Rect targetStackBounds) {}
+    default void updatePictureInPictureModeForPinnedStackAnimation(Rect targetStackBounds,
+            boolean forceUpdate) {}
 }
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index e02164b..5a75262 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -32,6 +32,7 @@
 import android.os.SystemClock;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.util.ArraySet;
 import android.util.EventLog;
 import android.util.Slog;
 import android.util.SparseIntArray;
@@ -671,19 +672,7 @@
                     defaultDisplay.pendingLayoutChanges);
         }
 
-        for (i = mService.mResizingWindows.size() - 1; i >= 0; i--) {
-            WindowState win = mService.mResizingWindows.get(i);
-            if (win.mAppFreezing) {
-                // Don't remove this window until rotation has completed.
-                continue;
-            }
-            // Discard the saved surface if window size is changed, it can't be reused.
-            if (win.mAppToken != null) {
-                win.mAppToken.destroySavedSurfaces();
-            }
-            win.reportResized();
-            mService.mResizingWindows.remove(i);
-        }
+        final ArraySet<DisplayContent> touchExcludeRegionUpdateDisplays = handleResizingWindows();
 
         if (DEBUG_ORIENTATION && mService.mDisplayFrozen) Slog.v(TAG,
                 "With display frozen, orientationChangeComplete=" + mOrientationChangeComplete);
@@ -825,6 +814,16 @@
             mService.mInputMonitor.updateInputWindowsLw(false /*force*/);
         }
         mService.setFocusTaskRegionLocked(null);
+        if (touchExcludeRegionUpdateDisplays != null) {
+            final DisplayContent focusedDc = mService.mFocusedApp != null
+                    ? mService.mFocusedApp.getDisplayContent() : null;
+            for (DisplayContent dc : touchExcludeRegionUpdateDisplays) {
+                // The focused DisplayContent was recalcuated in setFocusTaskRegionLocked
+                if (focusedDc != dc) {
+                    dc.setTouchExcludeRegion(null /* focusedTask */);
+                }
+            }
+        }
 
         // Check to see if we are now in a state where the screen should
         // be enabled, because the window obscured flags have changed.
@@ -876,6 +875,37 @@
     }
 
     /**
+     * Handles resizing windows during surface placement.
+     *
+     * @return A set of any DisplayContent whose touch exclude region needs to be recalculated due
+     *         to a tap-exclude window resizing, or null if no such DisplayContents were found.
+     */
+    private ArraySet<DisplayContent> handleResizingWindows() {
+        ArraySet<DisplayContent> touchExcludeRegionUpdateSet = null;
+        for (int i = mService.mResizingWindows.size() - 1; i >= 0; i--) {
+            WindowState win = mService.mResizingWindows.get(i);
+            if (win.mAppFreezing) {
+                // Don't remove this window until rotation has completed.
+                continue;
+            }
+            // Discard the saved surface if window size is changed, it can't be reused.
+            if (win.mAppToken != null) {
+                win.mAppToken.destroySavedSurfaces();
+            }
+            win.reportResized();
+            mService.mResizingWindows.remove(i);
+            if (WindowManagerService.excludeWindowTypeFromTapOutTask(win.mAttrs.type)) {
+                final DisplayContent dc = win.getDisplayContent();
+                if (touchExcludeRegionUpdateSet == null) {
+                    touchExcludeRegionUpdateSet = new ArraySet<>();
+                }
+                touchExcludeRegionUpdateSet.add(dc);
+            }
+        }
+        return touchExcludeRegionUpdateSet;
+    }
+
+    /**
      * @param w WindowState this method is applied to.
      * @param obscured True if there is a window on top of this obscuring the display.
      * @param syswin System window?
diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
index 83337ca..08a9caa 100644
--- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
+++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
@@ -280,7 +280,7 @@
                 // capture a screenshot into the surface we just created
                 Surface sur = new Surface();
                 sur.copyFrom(mSurfaceControl);
-                // FIXME: we should use the proper display
+                // TODO(multidisplay): we should use the proper display
                 SurfaceControl.screenshot(SurfaceControl.getBuiltInDisplay(
                         SurfaceControl.BUILT_IN_DISPLAY_ID_MAIN), sur);
                 mSurfaceControl.setLayerStack(display.getLayerStack());
diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java
index 7a8c2f9..4dd147e 100644
--- a/services/core/java/com/android/server/wm/Session.java
+++ b/services/core/java/com/android/server/wm/Session.java
@@ -16,6 +16,7 @@
 
 package com.android.server.wm;
 
+import static android.Manifest.permission.DEVICE_POWER;
 import static android.Manifest.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
 import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@@ -84,6 +85,7 @@
     private final Set<WindowSurfaceController> mAlertWindowSurfaces = new HashSet<>();
     final boolean mCanAddInternalSystemWindow;
     final boolean mCanHideNonSystemOverlayWindows;
+    final boolean mCanAcquireSleepToken;
     private AlertWindowNotification mAlertWindowNotification;
     private boolean mShowingAlertWindowNotificationAllowed;
     private boolean mClientDead = false;
@@ -103,6 +105,8 @@
                 INTERNAL_SYSTEM_WINDOW) == PERMISSION_GRANTED;
         mCanHideNonSystemOverlayWindows = service.mContext.checkCallingOrSelfPermission(
                 HIDE_NON_SYSTEM_OVERLAY_WINDOWS) == PERMISSION_GRANTED;
+        mCanAcquireSleepToken = service.mContext.checkCallingOrSelfPermission(DEVICE_POWER)
+                == PERMISSION_GRANTED;
         mShowingAlertWindowNotificationAllowed = mService.mShowAlertWindowNotifications;
         StringBuilder sb = new StringBuilder();
         sb.append("Session{");
@@ -715,4 +719,8 @@
     public String toString() {
         return mStringName;
     }
+
+    boolean hasAlertWindowSurfaces() {
+        return !mAlertWindowSurfaces.isEmpty();
+    }
 }
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java
index b8b9b9a..a1868e6 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotController.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java
@@ -18,6 +18,8 @@
 
 import static android.app.ActivityManager.ENABLE_TASK_SNAPSHOTS;
 
+import static com.android.server.wm.TaskSnapshotPersister.DISABLE_FULL_SIZED_BITMAPS;
+import static com.android.server.wm.TaskSnapshotPersister.REDUCED_SCALE;
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
 
@@ -97,11 +99,25 @@
      */
     private final boolean mIsRunningOnTv;
 
+    /**
+     * Flag indicating whether we are running on an IoT device.
+     */
+    private final boolean mIsRunningOnIoT;
+
+    /**
+     * Flag indicating whether we are running on an Android Wear device.
+     */
+    private final boolean mIsRunningOnWear;
+
     TaskSnapshotController(WindowManagerService service) {
         mService = service;
         mCache = new TaskSnapshotCache(mService, mLoader);
         mIsRunningOnTv = mService.mContext.getPackageManager().hasSystemFeature(
                 PackageManager.FEATURE_LEANBACK);
+        mIsRunningOnIoT = mService.mContext.getPackageManager().hasSystemFeature(
+                PackageManager.FEATURE_EMBEDDED);
+        mIsRunningOnWear = mService.mContext.getPackageManager().hasSystemFeature(
+            PackageManager.FEATURE_WATCH);
     }
 
     void systemReady() {
@@ -174,7 +190,8 @@
      */
     @Nullable TaskSnapshot getSnapshot(int taskId, int userId, boolean restoreFromDisk,
             boolean reducedResolution) {
-        return mCache.getSnapshot(taskId, userId, restoreFromDisk, reducedResolution);
+        return mCache.getSnapshot(taskId, userId, restoreFromDisk, reducedResolution
+                || DISABLE_FULL_SIZED_BITMAPS);
     }
 
     /**
@@ -195,18 +212,20 @@
         if (mainWindow == null) {
             return null;
         }
+        final boolean isLowRamDevice = ActivityManager.isLowRamDeviceStatic();
+        final float scaleFraction = isLowRamDevice ? REDUCED_SCALE : 1f;
         final GraphicBuffer buffer = top.mDisplayContent.screenshotApplicationsToBuffer(top.token,
-                -1, -1, false, 1.0f, false, true);
-        if (buffer == null) {
+                -1, -1, false, scaleFraction, false, true);
+        if (buffer == null || buffer.getWidth() <= 1 || buffer.getHeight() <= 1) {
             return null;
         }
         return new TaskSnapshot(buffer, top.getConfiguration().orientation,
-                minRect(mainWindow.mContentInsets, mainWindow.mStableInsets), false /* reduced */,
-                1f /* scale */);
+                minRect(mainWindow.mContentInsets, mainWindow.mStableInsets),
+                isLowRamDevice /* reduced */, scaleFraction /* scale */);
     }
 
     private boolean shouldDisableSnapshots() {
-        return !ENABLE_TASK_SNAPSHOTS || ActivityManager.isLowRamDeviceStatic() || mIsRunningOnTv;
+        return !ENABLE_TASK_SNAPSHOTS || mIsRunningOnWear || mIsRunningOnTv || mIsRunningOnIoT;
     }
 
     private Rect minRect(Rect rect1, Rect rect2) {
@@ -277,10 +296,12 @@
         decorPainter.drawDecors(c, null /* statusBarExcludeFrame */);
         node.end(c);
         final Bitmap hwBitmap = ThreadedRenderer.createHardwareBitmap(node, width, height);
-
+        if (hwBitmap == null) {
+            return null;
+        }
         return new TaskSnapshot(hwBitmap.createGraphicBufferHandle(),
                 topChild.getConfiguration().orientation, mainWindow.mStableInsets,
-                false /* reduced */, 1.0f /* scale */);
+                ActivityManager.isLowRamDeviceStatic() /* reduced */, 1.0f /* scale */);
     }
 
     /**
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotLoader.java b/services/core/java/com/android/server/wm/TaskSnapshotLoader.java
index ec21d25..537f317 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotLoader.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotLoader.java
@@ -68,7 +68,7 @@
         final File bitmapFile = reducedResolution
                 ? mPersister.getReducedResolutionBitmapFile(taskId, userId)
                 : mPersister.getBitmapFile(taskId, userId);
-        if (!protoFile.exists() || !bitmapFile.exists()) {
+        if (bitmapFile == null || !protoFile.exists() || !bitmapFile.exists()) {
             return null;
         }
         try {
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
index f90b3fb..7b047a8 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
@@ -21,6 +21,7 @@
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
 
 import android.annotation.TestApi;
+import android.app.ActivityManager;
 import android.app.ActivityManager.TaskSnapshot;
 import android.graphics.Bitmap;
 import android.graphics.Bitmap.CompressFormat;
@@ -52,7 +53,8 @@
     private static final String TAG = TAG_WITH_CLASS_NAME ? "TaskSnapshotPersister" : TAG_WM;
     private static final String SNAPSHOTS_DIRNAME = "snapshots";
     private static final String REDUCED_POSTFIX = "_reduced";
-    static final float REDUCED_SCALE = 0.5f;
+    static final float REDUCED_SCALE = ActivityManager.isLowRamDeviceStatic() ? 0.6f : 0.5f;
+    static final boolean DISABLE_FULL_SIZED_BITMAPS = ActivityManager.isLowRamDeviceStatic();
     private static final long DELAY_MS = 100;
     private static final int QUALITY = 95;
     private static final String PROTO_EXTENSION = ".proto";
@@ -183,6 +185,11 @@
     }
 
     File getBitmapFile(int taskId, int userId) {
+        // Full sized bitmaps are disabled on low ram devices
+        if (DISABLE_FULL_SIZED_BITMAPS) {
+            Slog.wtf(TAG, "This device does not support full sized resolution bitmaps.");
+            return null;
+        }
         return new File(getDirectory(userId), taskId + BITMAP_EXTENSION);
     }
 
@@ -197,11 +204,15 @@
 
     private void deleteSnapshot(int taskId, int userId) {
         final File protoFile = getProtoFile(taskId, userId);
-        final File bitmapFile = getBitmapFile(taskId, userId);
         final File bitmapReducedFile = getReducedResolutionBitmapFile(taskId, userId);
         protoFile.delete();
-        bitmapFile.delete();
         bitmapReducedFile.delete();
+
+        // Low ram devices do not have a full sized file to delete
+        if (!DISABLE_FULL_SIZED_BITMAPS) {
+            final File bitmapFile = getBitmapFile(taskId, userId);
+            bitmapFile.delete();
+        }
     }
 
     interface DirectoryResolver {
@@ -322,8 +333,6 @@
         }
 
         boolean writeBuffer() {
-            final File file = getBitmapFile(mTaskId, mUserId);
-            final File reducedFile = getReducedResolutionBitmapFile(mTaskId, mUserId);
             final Bitmap bitmap = Bitmap.createHardwareBitmap(mSnapshot.getSnapshot());
             if (bitmap == null) {
                 Slog.e(TAG, "Invalid task snapshot hw bitmap");
@@ -331,18 +340,33 @@
             }
 
             final Bitmap swBitmap = bitmap.copy(Config.ARGB_8888, false /* isMutable */);
-            final Bitmap reduced = Bitmap.createScaledBitmap(swBitmap,
-                    (int) (bitmap.getWidth() * REDUCED_SCALE),
-                    (int) (bitmap.getHeight() * REDUCED_SCALE), true /* filter */);
+            final File reducedFile = getReducedResolutionBitmapFile(mTaskId, mUserId);
+            final Bitmap reduced = mSnapshot.isReducedResolution()
+                    ? swBitmap
+                    : Bitmap.createScaledBitmap(swBitmap,
+                            (int) (bitmap.getWidth() * REDUCED_SCALE),
+                            (int) (bitmap.getHeight() * REDUCED_SCALE), true /* filter */);
             try {
-                FileOutputStream fos = new FileOutputStream(file);
-                swBitmap.compress(JPEG, QUALITY, fos);
-                fos.close();
                 FileOutputStream reducedFos = new FileOutputStream(reducedFile);
                 reduced.compress(JPEG, QUALITY, reducedFos);
                 reducedFos.close();
             } catch (IOException e) {
-                Slog.e(TAG, "Unable to open " + file + " or " + reducedFile +" for persisting.", e);
+                Slog.e(TAG, "Unable to open " + reducedFile +" for persisting.", e);
+                return false;
+            }
+
+            // For snapshots with reduced resolution, do not create or save full sized bitmaps
+            if (mSnapshot.isReducedResolution()) {
+                return true;
+            }
+
+            final File file = getBitmapFile(mTaskId, mUserId);
+            try {
+                FileOutputStream fos = new FileOutputStream(file);
+                swBitmap.compress(JPEG, QUALITY, fos);
+                fos.close();
+            } catch (IOException e) {
+                Slog.e(TAG, "Unable to open " + file + " for persisting.", e);
                 return false;
             }
             return true;
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotSurface.java b/services/core/java/com/android/server/wm/TaskSnapshotSurface.java
index 1bece69..4698d72 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotSurface.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotSurface.java
@@ -162,7 +162,7 @@
                         + task);
                 return null;
             }
-            final WindowState topFullscreenWindow = topFullscreenToken.findMainWindow();
+            final WindowState topFullscreenWindow = topFullscreenToken.getTopFullscreenWindow();
             if (mainWindow == null || topFullscreenWindow == null) {
                 Slog.w(TAG, "TaskSnapshotSurface.create: Failed to find main window for token="
                         + token);
@@ -320,6 +320,10 @@
             mChildSurfaceControl.show();
             mChildSurfaceControl.setWindowCrop(crop);
             mChildSurfaceControl.setPosition(frame.left, frame.top);
+
+            // Scale the mismatch dimensions to fill the task bounds
+            final float scale = 1 / mSnapshot.getScale();
+            mChildSurfaceControl.setMatrix(scale, 0, 0, scale);
         } finally {
             SurfaceControl.closeTransaction();
         }
@@ -332,6 +336,11 @@
         mSurface.release();
     }
 
+    /**
+     * Calculates the snapshot crop in snapshot coordinate space.
+     *
+     * @return crop rect in snapshot coordinate space.
+     */
     @VisibleForTesting
     Rect calculateSnapshotCrop() {
         final Rect rect = new Rect();
@@ -340,16 +349,28 @@
 
         // Let's remove all system decorations except the status bar, but only if the task is at the
         // very top of the screen.
-        rect.inset(insets.left, mTaskBounds.top != 0 ? insets.top : 0, insets.right, insets.bottom);
+        rect.inset((int) (insets.left * mSnapshot.getScale()),
+                mTaskBounds.top != 0 ? (int) (insets.top * mSnapshot.getScale()) : 0,
+                (int) (insets.right * mSnapshot.getScale()),
+                (int) (insets.bottom * mSnapshot.getScale()));
         return rect;
     }
 
+    /**
+     * Calculates the snapshot frame in window coordinate space from crop.
+     *
+     * @param crop rect that is in snapshot coordinate space.
+     */
     @VisibleForTesting
     Rect calculateSnapshotFrame(Rect crop) {
         final Rect frame = new Rect(crop);
+        final float scale = mSnapshot.getScale();
+
+        // Rescale the frame from snapshot to window coordinate space
+        frame.scale(1 / scale);
 
         // By default, offset it to to top/left corner
-        frame.offsetTo(-crop.left, -crop.top);
+        frame.offsetTo((int) (-crop.left / scale), (int) (-crop.top / scale));
 
         // However, we also need to make space for the navigation bar on the left side.
         final int colorViewLeftInset = getColorViewLeftInset(mStableInsets.left,
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 39878cc..55151a1 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -1498,7 +1498,7 @@
     }
 
     @Override  // AnimatesBounds
-    public void onAnimationStart(boolean schedulePipModeChangedCallback) {
+    public void onAnimationStart(boolean schedulePipModeChangedCallback, boolean forceUpdate) {
         // Hold the lock since this is called from the BoundsAnimator running on the UiThread
         synchronized (mService.mWindowMap) {
             mBoundsAnimatingRequested = false;
@@ -1523,9 +1523,11 @@
             final PinnedStackWindowController controller =
                     (PinnedStackWindowController) getController();
             if (schedulePipModeChangedCallback && controller != null) {
-                // We need to schedule the PiP mode change after the animation down, so use the
-                // final bounds
-                controller.updatePictureInPictureModeForPinnedStackAnimation(null);
+                // We need to schedule the PiP mode change before the animation up. It is possible
+                // in this case for the animation down to not have been completed, so always
+                // force-schedule and update to the client to ensure that it is notified that it
+                // is no longer in picture-in-picture mode
+                controller.updatePictureInPictureModeForPinnedStackAnimation(null, forceUpdate);
             }
         }
     }
@@ -1553,7 +1555,7 @@
                 // We need to schedule the PiP mode change after the animation down, so use the
                 // final bounds
                 controller.updatePictureInPictureModeForPinnedStackAnimation(
-                        mBoundsAnimationTarget);
+                        mBoundsAnimationTarget, false /* forceUpdate */);
             }
 
             if (finalStackSize != null) {
diff --git a/services/core/java/com/android/server/wm/WindowLayersController.java b/services/core/java/com/android/server/wm/WindowLayersController.java
index 5dc79f8..5d1083e 100644
--- a/services/core/java/com/android/server/wm/WindowLayersController.java
+++ b/services/core/java/com/android/server/wm/WindowLayersController.java
@@ -30,6 +30,7 @@
 import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYERS;
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+import static com.android.server.wm.WindowManagerService.TYPE_LAYER_OFFSET;
 import static com.android.server.wm.WindowManagerService.WINDOW_LAYER_MULTIPLIER;
 
 /**
@@ -198,7 +199,7 @@
 
     private void adjustSpecialWindows() {
         // The following adjustments are beyond the highest docked-affected layer
-        int layer = mHighestDockedAffectedLayer +  WINDOW_LAYER_MULTIPLIER;
+        int layer = mHighestDockedAffectedLayer +  TYPE_LAYER_OFFSET;
 
         // Adjust the docked stack windows and dock divider above only the windows that are affected
         // by the docked stack. When this happens, also boost the assistant window layers, otherwise
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 604a22b..5f4c994 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -49,6 +49,7 @@
 import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
 import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
 import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
 import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
@@ -1984,6 +1985,11 @@
                     // No move or resize, but the controller checks for title changes as well
                     mAccessibilityController.onSomeWindowResizedOrMovedLocked();
                 }
+
+                if ((flagChanges & PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS) != 0) {
+                    updateNonSystemOverlayWindowsVisibilityIfNeeded(
+                            win, win.mWinAnimator.getShown());
+                }
             }
 
             if (DEBUG_LAYOUT) Slog.v(TAG_WM, "Relayout " + win + ": viewVisibility=" + viewVisibility
@@ -2027,10 +2033,14 @@
                 Slog.i(TAG_WM, "Relayout " + win + ": oldVis=" + oldVisibility
                         + " newVis=" + viewVisibility, stack);
             }
-            if (viewVisibility == View.VISIBLE &&
-                    (win.mAppToken == null || win.mAttrs.type == TYPE_APPLICATION_STARTING
-                            || !win.mAppToken.isClientHidden())) {
 
+            // We should only relayout if the view is visible, it is a starting window, or the
+            // associated appToken is not hidden.
+            final boolean shouldRelayout = viewVisibility == View.VISIBLE &&
+                (win.mAppToken == null || win.mAttrs.type == TYPE_APPLICATION_STARTING
+                    || !win.mAppToken.isClientHidden());
+
+            if (shouldRelayout) {
                 Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "relayoutWindow: viewVisibility_1");
 
                 // We are about to create a surface, but we didn't run a layout yet. So better run
@@ -2186,8 +2196,18 @@
             // and needs process it before handling the corresponding window frame. the variable
             // {@code mergedConfiguration} is an out parameter that will be passed back to the
             // client over IPC and checked there.
-            win.getMergedConfiguration(mergedConfiguration);
-            win.setReportedConfiguration(mergedConfiguration);
+            // Note: in the cases where the window is tied to an activity, we should not send a
+            // configuration update when the window has requested to be hidden. Doing so can lead
+            // to the client erroneously accepting a configuration that would have otherwise caused
+            // an activity restart. We instead hand back the last reported
+            // {@link MergedConfiguration}.
+            if (shouldRelayout) {
+                win.getMergedConfiguration(mergedConfiguration);
+            } else {
+                win.getLastReportedMergedConfiguration(mergedConfiguration);
+            }
+
+            win.setLastReportedMergedConfiguration(mergedConfiguration);
 
             outFrame.set(win.mCompatFrame);
             outOverscanInsets.set(win.mOverscanInsets);
@@ -2347,7 +2367,7 @@
         // artifacts when we unfreeze the display if some different animation
         // is running.
         Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "WM#applyAnimationLocked");
-        if (okToAnimate()) {
+        if (atoken.okToAnimate()) {
             final DisplayContent displayContent = atoken.getTask().getDisplayContent();
             final DisplayInfo displayInfo = displayContent.getDisplayInfo();
             final int width = displayInfo.appWidth;
@@ -2361,6 +2381,7 @@
             final Rect displayFrame = new Rect(0, 0,
                     displayInfo.logicalWidth, displayInfo.logicalHeight);
             final Rect insets = new Rect();
+            final Rect stableInsets = new Rect();
             Rect surfaceInsets = null;
             final boolean freeform = win != null && win.inFreeformWorkspace();
             if (win != null) {
@@ -2375,6 +2396,7 @@
                 }
                 surfaceInsets = win.getAttrs().surfaceInsets;
                 insets.set(win.mContentInsets);
+                stableInsets.set(win.mStableInsets);
             }
 
             if (atoken.mLaunchTaskBehind) {
@@ -2389,7 +2411,7 @@
             final Configuration displayConfig = displayContent.getConfiguration();
             Animation a = mAppTransition.loadAnimation(lp, transit, enter, displayConfig.uiMode,
                     displayConfig.orientation, frame, displayFrame, insets, surfaceInsets,
-                    isVoiceInteraction, freeform, atoken.getTask().mTaskId);
+                    stableInsets, isVoiceInteraction, freeform, atoken.getTask().mTaskId);
             if (a != null) {
                 if (DEBUG_ANIM) logWithStack(TAG, "Loaded animation " + a + " for " + atoken);
                 final int containingWidth = frame.width();
@@ -2423,14 +2445,6 @@
         return false;
     }
 
-    boolean okToDisplay() {
-        return !mDisplayFrozen && mDisplayEnabled && mPolicy.isScreenOn();
-    }
-
-    boolean okToAnimate() {
-        return okToDisplay() && mPolicy.okToAnimate();
-    }
-
     @Override
     public void addWindowToken(IBinder binder, int type, int displayId) {
         if (!checkCallingPermission(MANAGE_APP_TOKENS, "addWindowToken()")) {
@@ -2697,7 +2711,9 @@
         synchronized(mWindowMap) {
             boolean prepared = mAppTransition.prepareAppTransitionLocked(transit, alwaysKeepCurrent,
                     flags, forceOverride);
-            if (prepared && okToAnimate()) {
+            // TODO (multidisplay): associate app transitions with displays
+            final DisplayContent dc = mRoot.getDisplayContent(DEFAULT_DISPLAY);
+            if (prepared && dc != null && dc.okToAnimate()) {
                 mSkipAppTransitionAnimation = false;
             }
         }
@@ -2989,10 +3005,9 @@
     }
 
     public void setKeyguardGoingAway(boolean keyguardGoingAway) {
-// TODO: Use of this can be removed. Revert ag/I8369723d6a77f2c602f1ef080371fa7cd9ee094e
-//        synchronized (mWindowMap) {
-//            mKeyguardGoingAway = keyguardGoingAway;
-//        }
+        synchronized (mWindowMap) {
+            mKeyguardGoingAway = keyguardGoingAway;
+        }
     }
 
     // -------------------------------------------------------------
@@ -3611,7 +3626,6 @@
     }
 
     private void updateCircularDisplayMaskIfNeeded() {
-        // we're fullscreen and not hosted in an ActivityView
         if (mContext.getResources().getConfiguration().isScreenRound()
                 && mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_windowShowCircularMask)) {
@@ -5829,7 +5843,7 @@
         // If the screen is currently frozen or off, then keep
         // it frozen/off until this window draws at its new
         // orientation.
-        if (!okToDisplay() && mWindowsFreezingScreen != WINDOWS_FREEZING_SCREENS_TIMEOUT) {
+        if (!w.mToken.okToDisplay() && mWindowsFreezingScreen != WINDOWS_FREEZING_SCREENS_TIMEOUT) {
             if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Changing surface while display frozen: " + w);
             w.setOrientationChanging(true);
             w.mLastFreezeDuration = 0;
@@ -6045,7 +6059,7 @@
             return;
         }
 
-        if (!displayContent.isReady() || !mPolicy.isScreenOn() || !okToAnimate()) {
+        if (!displayContent.isReady() || !mPolicy.isScreenOn() || !displayContent.okToAnimate()) {
             // No need to freeze the screen before the display is ready,  if the screen is off,
             // or we can't currently animate.
             return;
@@ -6081,7 +6095,8 @@
             Debug.startMethodTracing(file.toString(), 8 * 1024 * 1024);
         }
 
-        if (CUSTOM_SCREEN_ROTATION) {
+        // TODO(multidisplay): rotation on non-default displays
+        if (CUSTOM_SCREEN_ROTATION && displayContent.isDefaultDisplay) {
             mExitAnimId = exitAnim;
             mEnterAnimId = enterAnim;
             ScreenRotationAnimation screenRotationAnimation =
@@ -6093,7 +6108,6 @@
             // Check whether the current screen contains any secure content.
             boolean isSecure = displayContent.hasSecureWindowOnScreen();
 
-            // TODO(multidisplay): rotation on main screen only.
             displayContent.updateDisplayInfo();
             screenRotationAnimation = new ScreenRotationAnimation(mContext, displayContent,
                     mFxSession, inTransaction, mPolicy.isDefaultOrientationForced(), isSecure,
@@ -7440,11 +7454,6 @@
         }
 
         @Override
-        public boolean isKeyguardGoingAway() {
-            return WindowManagerService.this.mKeyguardGoingAway;
-        }
-
-        @Override
         public boolean isKeyguardShowingAndNotOccluded() {
             return WindowManagerService.this.isKeyguardShowingAndNotOccluded();
         }
@@ -7688,7 +7697,8 @@
     }
 
     void updateNonSystemOverlayWindowsVisibilityIfNeeded(WindowState win, boolean surfaceShown) {
-        if (!win.hideNonSystemOverlayWindowsWhenVisible()) {
+        if (!win.hideNonSystemOverlayWindowsWhenVisible()
+                && !mHidingNonSystemOverlayWindows.contains(win)) {
             return;
         }
         final boolean systemAlertWindowsHidden = !mHidingNonSystemOverlayWindows.isEmpty();
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 4d69c83..77a8fec 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -243,7 +243,7 @@
      * We'll send configuration to client only if it is different from the last applied one and
      * client won't perform unnecessary updates.
      */
-    private final Configuration mLastReportedConfiguration = new Configuration();
+    private final MergedConfiguration mLastReportedConfiguration = new MergedConfiguration();
 
     /**
      * Actual position of the surface shown on-screen (may be modified by animation). These are
@@ -734,6 +734,11 @@
         return mOwnerCanAddInternalSystemWindow;
     }
 
+    @Override
+    public boolean canAcquireSleepToken() {
+        return mSession.mCanAcquireSleepToken;
+    }
+
     /**
      * Subtracts the insets calculated by intersecting {@param layoutFrame} with {@param insetFrame}
      * from {@param frame}. In other words, it applies the insets that would result if
@@ -1236,7 +1241,7 @@
         //                   this is not necessarily what the client has processed yet. Find a
         //                   better indicator consistent with the client.
         return (mOrientationChanging || (isVisible()
-                && getConfiguration().orientation != mLastReportedConfiguration.orientation))
+                && getConfiguration().orientation != getLastReportedConfiguration().orientation))
                 && !mSeamlesslyRotated
                 && !mOrientationChangeTimedOut;
     }
@@ -1493,7 +1498,12 @@
 
         final boolean exiting = exitingSelf || mDestroying || appExiting;
         final boolean translucent = mAttrs.alpha == 0.0f;
-        return shown && !exiting && !translucent;
+
+        // If we are entering with a dummy animation, avoid affecting SystemUI flags until the
+        // transition is starting.
+        final boolean enteringWithDummyAnimation =
+                mWinAnimator.isDummyAnimation() && mWinAnimator.mShownAlpha == 0f;
+        return shown && !exiting && !translucent && !enteringWithDummyAnimation;
     }
 
     /**
@@ -1711,7 +1721,7 @@
         final boolean adjustedForMinimizedDockOrIme = task != null
                 && (task.mStack.isAdjustedForMinimizedDockedStack()
                 || task.mStack.isAdjustedForIme());
-        if (mService.okToAnimate()
+        if (mToken.okToAnimate()
                 && (mAttrs.privateFlags & PRIVATE_FLAG_NO_MOVE_ANIMATION) == 0
                 && !isDragResizing() && !adjustedForMinimizedDockOrIme
                 && (task == null || getTask().mStack.hasMovementAnimations())
@@ -1759,7 +1769,7 @@
 
     /** Returns true if last applied config was not yet requested by client. */
     boolean isConfigChanged() {
-        return !mLastReportedConfiguration.equals(getConfiguration());
+        return !getLastReportedConfiguration().equals(getConfiguration());
     }
 
     void onWindowReplacementTimeout() {
@@ -1880,7 +1890,7 @@
         // First, see if we need to run an animation. If we do, we have to hold off on removing the
         // window until the animation is done. If the display is frozen, just remove immediately,
         // since the animation wouldn't be seen.
-        if (mHasSurface && mService.okToAnimate()) {
+        if (mHasSurface && mToken.okToAnimate()) {
             if (mWillReplaceWindow) {
                 // This window is going to be replaced. We need to keep it around until the new one
                 // gets added, then we will get rid of this one.
@@ -2315,7 +2325,7 @@
             mLayoutNeeded = true;
         }
 
-        if (isDrawnLw() && mService.okToAnimate()) {
+        if (isDrawnLw() && mToken.okToAnimate()) {
             mWinAnimator.applyEnterAnimationLocked();
         }
     }
@@ -2326,8 +2336,16 @@
         outConfiguration.setConfiguration(globalConfig, overrideConfig);
     }
 
-    void setReportedConfiguration(MergedConfiguration config) {
-        mLastReportedConfiguration.setTo(config.getMergedConfiguration());
+    void setLastReportedMergedConfiguration(MergedConfiguration config) {
+        mLastReportedConfiguration.setTo(config);
+    }
+
+    void getLastReportedMergedConfiguration(MergedConfiguration config) {
+        config.setTo(mLastReportedConfiguration);
+    }
+
+    private Configuration getLastReportedConfiguration() {
+        return mLastReportedConfiguration.getMergedConfiguration();
     }
 
     void adjustStartingWindowFlags() {
@@ -2471,7 +2489,7 @@
         if (doAnimation) {
             if (DEBUG_VISIBILITY) Slog.v(TAG, "doAnimation: mPolicyVisibility="
                     + mPolicyVisibility + " mAnimation=" + mWinAnimator.mAnimation);
-            if (!mService.okToAnimate()) {
+            if (!mToken.okToAnimate()) {
                 doAnimation = false;
             } else if (mPolicyVisibility && mWinAnimator.mAnimation == null) {
                 // Check for the case where we are currently visible and
@@ -2501,7 +2519,7 @@
 
     boolean hideLw(boolean doAnimation, boolean requestAnim) {
         if (doAnimation) {
-            if (!mService.okToAnimate()) {
+            if (!mToken.okToAnimate()) {
                 doAnimation = false;
             }
         }
@@ -3117,7 +3135,7 @@
                     new MergedConfiguration(mService.mRoot.getConfiguration(),
                     getMergedOverrideConfiguration());
 
-            setReportedConfiguration(mergedConfiguration);
+            setLastReportedMergedConfiguration(mergedConfiguration);
 
             if (DEBUG_ORIENTATION && mWinAnimator.mDrawState == DRAW_PENDING)
                 Slog.i(TAG, "Resizing " + this + " WITH DRAW PENDING");
@@ -3457,8 +3475,10 @@
                     pw.print(" mAppOpVisibility=");
                     pw.print(mAppOpVisibility);
                     pw.print(" parentHidden="); pw.print(isParentWindowHidden());
+                    pw.print(" mPermanentlyHidden="); pw.print(mPermanentlyHidden);
                     pw.print(" mForceHideNonSystemOverlayWindow="); pw.println(
-                    mForceHideNonSystemOverlayWindow);        }
+                    mForceHideNonSystemOverlayWindow);
+        }
         if (!mRelayoutCalled || mLayoutNeeded) {
             pw.print(prefix); pw.print("mRelayoutCalled="); pw.print(mRelayoutCalled);
                     pw.print(" mLayoutNeeded="); pw.println(mLayoutNeeded);
@@ -3482,7 +3502,7 @@
             }
             pw.print(prefix); pw.print("mFullConfiguration="); pw.println(getConfiguration());
             pw.print(prefix); pw.print("mLastReportedConfiguration=");
-                    pw.println(mLastReportedConfiguration);
+                    pw.println(getLastReportedConfiguration());
         }
         pw.print(prefix); pw.print("mHasSurface="); pw.print(mHasSurface);
                 pw.print(" mShownPosition="); mShownPosition.printShortString(pw);
@@ -3543,7 +3563,7 @@
             pw.print(prefix); pw.print("mOrientationChanging=");
                     pw.print(mOrientationChanging);
                     pw.print(" configOrientationChanging=");
-                    pw.print(mLastReportedConfiguration.orientation
+                    pw.print(getLastReportedConfiguration().orientation
                             != getConfiguration().orientation);
                     pw.print(" mAppFreezing="); pw.print(mAppFreezing);
                     pw.print(" mTurnOnScreen="); pw.print(mTurnOnScreen);
@@ -3970,6 +3990,9 @@
         windowInfo.type = mAttrs.type;
         windowInfo.layer = mLayer;
         windowInfo.token = mClient.asBinder();
+        if (mAppToken != null) {
+            windowInfo.activityToken = mAppToken.appToken.asBinder();
+        }
         windowInfo.title = mAttrs.accessibilityTitle;
         windowInfo.accessibilityIdOfAnchor = mAttrs.accessibilityIdOfAnchor;
         windowInfo.focused = isFocused();
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 86265c29..64ac7ac 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -369,7 +369,7 @@
         // we just started or just stopped animating by comparing mWasAnimating with isAnimationSet().
         mWasAnimating = mAnimating;
         final DisplayContent displayContent = mWin.getDisplayContent();
-        if (displayContent != null && mService.okToAnimate()) {
+        if (mWin.mToken.okToAnimate()) {
             // We will run animations as long as the display isn't frozen.
 
             if (mWin.isDrawnLw() && mAnimation != null) {
@@ -1646,15 +1646,25 @@
                 // hidden while the screen is turning off.
                 // TODO(b/63773439): These cases should be eliminated, though we probably still
                 // want to process mTurnOnScreen in this way for clarity.
-                if (mWin.mTurnOnScreen && mWin.mAppToken.canTurnScreenOn()) {
+                if (mWin.mTurnOnScreen &&
+                        (mWin.mAppToken == null || mWin.mAppToken.canTurnScreenOn())) {
                     if (DEBUG_VISIBILITY) Slog.v(TAG, "Show surface turning screen on: " + mWin);
                     mWin.mTurnOnScreen = false;
 
                     // The window should only turn the screen on once per resume, but
                     // prepareSurfaceLocked can be called multiple times. Set canTurnScreenOn to
                     // false so the window doesn't turn the screen on again during this resume.
-                    mWin.mAppToken.setCanTurnScreenOn(false);
-                    mAnimator.mBulkUpdateParams |= SET_TURN_ON_SCREEN;
+                    if (mWin.mAppToken != null) {
+                        mWin.mAppToken.setCanTurnScreenOn(false);
+                    }
+
+                    // We do not add {@code SET_TURN_ON_SCREEN} when the screen is already
+                    // interactive as the value may persist until the next animation, which could
+                    // potentially occurring while turning off the screen. This would lead to the
+                    // screen incorrectly turning back on.
+                    if (!mService.mPowerManager.isInteractive()) {
+                        mAnimator.mBulkUpdateParams |= SET_TURN_ON_SCREEN;
+                    }
                 }
             }
             if (hasSurface()) {
@@ -1812,7 +1822,7 @@
         // artifacts when we unfreeze the display if some different animation
         // is running.
         Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "WSA#applyAnimationLocked");
-        if (mService.okToAnimate()) {
+        if (mWin.mToken.okToAnimate()) {
             int anim = mPolicy.selectAnimationLw(mWin, transit);
             int attr = -1;
             Animation a = null;
diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index e3033c9..48d1618 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -288,4 +288,12 @@
     String getName() {
         return toString();
     }
+
+    boolean okToDisplay() {
+        return mDisplayContent != null && mDisplayContent.okToDisplay();
+    }
+
+    boolean okToAnimate() {
+        return mDisplayContent != null && mDisplayContent.okToAnimate();
+    }
 }
diff --git a/services/core/jni/Android.mk b/services/core/jni/Android.mk
index e2a82b7..bf9f941 100644
--- a/services/core/jni/Android.mk
+++ b/services/core/jni/Android.mk
@@ -5,8 +5,13 @@
 LOCAL_CFLAGS += -Wall -Werror -Wno-unused-parameter
 
 LOCAL_SRC_FILES += \
-    $(LOCAL_REL_DIR)/JavaRef.cpp \
-    $(LOCAL_REL_DIR)/NativeCallbackThread.cpp \
+    $(LOCAL_REL_DIR)/BroadcastRadio/JavaRef.cpp \
+    $(LOCAL_REL_DIR)/BroadcastRadio/NativeCallbackThread.cpp \
+    $(LOCAL_REL_DIR)/BroadcastRadio/BroadcastRadioService.cpp \
+    $(LOCAL_REL_DIR)/BroadcastRadio/Tuner.cpp \
+    $(LOCAL_REL_DIR)/BroadcastRadio/TunerCallback.cpp \
+    $(LOCAL_REL_DIR)/BroadcastRadio/convert.cpp \
+    $(LOCAL_REL_DIR)/BroadcastRadio/regions.cpp \
     $(LOCAL_REL_DIR)/com_android_server_AlarmManagerService.cpp \
     $(LOCAL_REL_DIR)/com_android_server_am_BatteryStatsService.cpp \
     $(LOCAL_REL_DIR)/com_android_server_connectivity_Vpn.cpp \
@@ -22,10 +27,6 @@
     $(LOCAL_REL_DIR)/com_android_server_location_GnssLocationProvider.cpp \
     $(LOCAL_REL_DIR)/com_android_server_locksettings_SyntheticPasswordManager.cpp \
     $(LOCAL_REL_DIR)/com_android_server_power_PowerManagerService.cpp \
-    $(LOCAL_REL_DIR)/com_android_server_radio_RadioService.cpp \
-    $(LOCAL_REL_DIR)/com_android_server_radio_Tuner.cpp \
-    $(LOCAL_REL_DIR)/com_android_server_radio_Tuner_TunerCallback.cpp \
-    $(LOCAL_REL_DIR)/com_android_server_radio_convert.cpp \
     $(LOCAL_REL_DIR)/com_android_server_SerialService.cpp \
     $(LOCAL_REL_DIR)/com_android_server_storage_AppFuseBridge.cpp \
     $(LOCAL_REL_DIR)/com_android_server_SystemServer.cpp \
@@ -57,6 +58,7 @@
 LOCAL_SHARED_LIBRARIES += \
     libandroid_runtime \
     libandroidfw \
+    libaudioclient \
     libbase \
     libappfuse \
     libbinder \
@@ -107,4 +109,6 @@
     android.frameworks.schedulerservice@1.0 \
     android.frameworks.sensorservice@1.0 \
 
-LOCAL_STATIC_LIBRARIES += libscrypt_static
+LOCAL_STATIC_LIBRARIES += \
+    android.hardware.broadcastradio@1.1-utils-lib \
+    libscrypt_static \
diff --git a/services/core/jni/BroadcastRadio/BroadcastRadioService.cpp b/services/core/jni/BroadcastRadio/BroadcastRadioService.cpp
new file mode 100644
index 0000000..b3817db
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/BroadcastRadioService.cpp
@@ -0,0 +1,277 @@
+/**
+ * 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 "BroadcastRadioService.jni"
+#define LOG_NDEBUG 0
+
+#include "BroadcastRadioService.h"
+
+#include "Tuner.h"
+#include "convert.h"
+
+#include <android/hardware/broadcastradio/1.1/IBroadcastRadio.h>
+#include <android/hardware/broadcastradio/1.1/IBroadcastRadioFactory.h>
+#include <android/hidl/manager/1.0/IServiceManager.h>
+#include <core_jni_helpers.h>
+#include <hidl/ServiceManagement.h>
+#include <nativehelper/JNIHelp.h>
+#include <utils/Log.h>
+
+namespace android {
+namespace server {
+namespace BroadcastRadio {
+namespace BroadcastRadioService {
+
+using std::lock_guard;
+using std::mutex;
+
+using hardware::Return;
+using hardware::hidl_string;
+using hardware::hidl_vec;
+
+namespace V1_0 = hardware::broadcastradio::V1_0;
+namespace V1_1 = hardware::broadcastradio::V1_1;
+
+using V1_0::Class;
+using V1_0::Result;
+
+using V1_0::BandConfig;
+using V1_0::ProgramInfo;
+using V1_0::MetaData;
+using V1_0::ITuner;
+
+static mutex gContextMutex;
+
+static struct {
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+        jmethodID add;
+    } ArrayList;
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+    } Tuner;
+} gjni;
+
+struct ServiceContext {
+    ServiceContext() {}
+
+    std::vector<sp<V1_0::IBroadcastRadio>> mModules;
+
+private:
+    DISALLOW_COPY_AND_ASSIGN(ServiceContext);
+};
+
+const std::vector<Class> gAllClasses = {
+    Class::AM_FM,
+    Class::SAT,
+    Class::DT,
+};
+
+
+/**
+ * Always lock gContextMutex when using native context.
+ */
+static ServiceContext& getNativeContext(jlong nativeContextHandle) {
+    auto nativeContext = reinterpret_cast<ServiceContext*>(nativeContextHandle);
+    LOG_ALWAYS_FATAL_IF(nativeContext == nullptr, "Native context not initialized");
+    return *nativeContext;
+}
+
+static jlong nativeInit(JNIEnv *env, jobject obj) {
+    ALOGV("%s", __func__);
+    lock_guard<mutex> lk(gContextMutex);
+
+    auto nativeContext = new ServiceContext();
+    static_assert(sizeof(jlong) >= sizeof(nativeContext), "jlong is smaller than a pointer");
+    return reinterpret_cast<jlong>(nativeContext);
+}
+
+static void nativeFinalize(JNIEnv *env, jobject obj, jlong nativeContext) {
+    ALOGV("%s", __func__);
+    lock_guard<mutex> lk(gContextMutex);
+
+    auto ctx = reinterpret_cast<ServiceContext*>(nativeContext);
+    delete ctx;
+}
+
+static jobject nativeLoadModules(JNIEnv *env, jobject obj, jlong nativeContext) {
+    ALOGV("%s", __func__);
+    lock_guard<mutex> lk(gContextMutex);
+    auto& ctx = getNativeContext(nativeContext);
+
+    // Get list of registered HIDL HAL implementations.
+    auto manager = hardware::defaultServiceManager();
+    hidl_vec<hidl_string> services;
+    if (manager == nullptr) {
+        ALOGE("Can't reach service manager, using default service implementation only");
+        services = std::vector<hidl_string>({ "default" });
+    } else {
+        manager->listByInterface(V1_0::IBroadcastRadioFactory::descriptor,
+                [&services](const hidl_vec<hidl_string> &registered) {
+            services = registered;
+        });
+    }
+
+    // Scan provided list for actually implemented modules.
+    ctx.mModules.clear();
+    auto jModules = make_javaref(env, env->NewObject(gjni.ArrayList.clazz, gjni.ArrayList.cstor));
+    for (auto&& serviceName : services) {
+        ALOGV("checking service: %s", serviceName.c_str());
+
+        auto factory = V1_0::IBroadcastRadioFactory::getService(serviceName);
+        if (factory == nullptr) {
+            ALOGE("can't load service %s", serviceName.c_str());
+            continue;
+        }
+
+        // Second level of scanning - that's unfortunate.
+        for (auto&& clazz : gAllClasses) {
+            sp<V1_0::IBroadcastRadio> module10 = nullptr;
+            sp<V1_1::IBroadcastRadio> module11 = nullptr;
+            factory->connectModule(clazz, [&](Result res, const sp<V1_0::IBroadcastRadio>& module) {
+                if (res == Result::OK) {
+                    module10 = module;
+                    module11 = V1_1::IBroadcastRadio::castFrom(module).withDefault(nullptr);
+                } else if (res != Result::INVALID_ARGUMENTS) {
+                    ALOGE("couldn't load %s:%s module",
+                            serviceName.c_str(), V1_0::toString(clazz).c_str());
+                }
+            });
+            if (module10 == nullptr) continue;
+
+            auto idx = ctx.mModules.size();
+            ctx.mModules.push_back(module10);
+            ALOGI("loaded broadcast radio module %zu: %s:%s",
+                    idx, serviceName.c_str(), V1_0::toString(clazz).c_str());
+
+            JavaRef<jobject> jModule = nullptr;
+            Result halResult = Result::OK;
+            Return<void> hidlResult;
+            if (module11 != nullptr) {
+                hidlResult = module11->getProperties_1_1([&](const V1_1::Properties& properties) {
+                    jModule = convert::ModulePropertiesFromHal(env, properties, idx, serviceName);
+                });
+            } else {
+                hidlResult = module10->getProperties([&](Result result,
+                        const V1_0::Properties& properties) {
+                    halResult = result;
+                    if (result != Result::OK) return;
+                    jModule = convert::ModulePropertiesFromHal(env, properties, idx, serviceName);
+                });
+            }
+            if (convert::ThrowIfFailed(env, hidlResult, halResult)) return nullptr;
+
+            env->CallBooleanMethod(jModules.get(), gjni.ArrayList.add, jModule.get());
+        }
+    }
+
+    return jModules.release();
+}
+
+static jobject nativeOpenTuner(JNIEnv *env, jobject obj, long nativeContext, jint moduleId,
+        jobject bandConfig, bool withAudio, jobject callback) {
+    ALOGV("%s", __func__);
+    lock_guard<mutex> lk(gContextMutex);
+    auto& ctx = getNativeContext(nativeContext);
+
+    if (callback == nullptr) {
+        ALOGE("Callback is empty");
+        return nullptr;
+    }
+
+    if (moduleId < 0 || static_cast<size_t>(moduleId) >= ctx.mModules.size()) {
+        ALOGE("Invalid module ID: %d", moduleId);
+        return nullptr;
+    }
+    auto module = ctx.mModules[moduleId];
+
+    HalRevision halRev;
+    if (V1_1::IBroadcastRadio::castFrom(module).withDefault(nullptr) != nullptr) {
+        ALOGI("Opening tuner %d with broadcast radio HAL 1.1", moduleId);
+        halRev = HalRevision::V1_1;
+    } else {
+        ALOGI("Opening tuner %d with broadcast radio HAL 1.0", moduleId);
+        halRev = HalRevision::V1_0;
+    }
+
+    Region region;
+    BandConfig bandConfigHal = convert::BandConfigToHal(env, bandConfig, region);
+
+    auto tuner = make_javaref(env, env->NewObject(gjni.Tuner.clazz, gjni.Tuner.cstor,
+            callback, halRev, region, withAudio, bandConfigHal.type));
+    if (tuner == nullptr) {
+        ALOGE("Unable to create new tuner object.");
+        return nullptr;
+    }
+
+    auto tunerCb = Tuner::getNativeCallback(env, tuner);
+    Result halResult;
+    sp<ITuner> halTuner = nullptr;
+
+    auto hidlResult = module->openTuner(bandConfigHal, withAudio, tunerCb,
+            [&](Result result, const sp<ITuner>& tuner) {
+                halResult = result;
+                halTuner = tuner;
+            });
+    if (!hidlResult.isOk() || halResult != Result::OK || halTuner == nullptr) {
+        ALOGE("Couldn't open tuner");
+        ALOGE_IF(hidlResult.isOk(), "halResult = %d", halResult);
+        ALOGE_IF(!hidlResult.isOk(), "hidlResult = %s", hidlResult.description().c_str());
+        return nullptr;
+    }
+
+    Tuner::assignHalInterfaces(env, tuner, module, halTuner);
+    ALOGD("Opened tuner %p", halTuner.get());
+    return tuner.release();
+}
+
+static const JNINativeMethod gRadioServiceMethods[] = {
+    { "nativeInit", "()J", (void*)nativeInit },
+    { "nativeFinalize", "(J)V", (void*)nativeFinalize },
+    { "nativeLoadModules", "(J)Ljava/util/List;", (void*)nativeLoadModules },
+    { "nativeOpenTuner", "(JILandroid/hardware/radio/RadioManager$BandConfig;Z"
+            "Landroid/hardware/radio/ITunerCallback;)Lcom/android/server/broadcastradio/Tuner;",
+            (void*)nativeOpenTuner },
+};
+
+} // namespace BroadcastRadioService
+} // namespace BroadcastRadio
+} // namespace server
+
+void register_android_server_broadcastradio_BroadcastRadioService(JNIEnv *env) {
+    using namespace server::BroadcastRadio::BroadcastRadioService;
+
+    register_android_server_broadcastradio_convert(env);
+
+    auto tunerClass = FindClassOrDie(env, "com/android/server/broadcastradio/Tuner");
+    gjni.Tuner.clazz = MakeGlobalRefOrDie(env, tunerClass);
+    gjni.Tuner.cstor = GetMethodIDOrDie(env, tunerClass, "<init>",
+            "(Landroid/hardware/radio/ITunerCallback;IIZI)V");
+
+    auto arrayListClass = FindClassOrDie(env, "java/util/ArrayList");
+    gjni.ArrayList.clazz = MakeGlobalRefOrDie(env, arrayListClass);
+    gjni.ArrayList.cstor = GetMethodIDOrDie(env, arrayListClass, "<init>", "()V");
+    gjni.ArrayList.add = GetMethodIDOrDie(env, arrayListClass, "add", "(Ljava/lang/Object;)Z");
+
+    auto res = jniRegisterNativeMethods(env,
+            "com/android/server/broadcastradio/BroadcastRadioService",
+            gRadioServiceMethods, NELEM(gRadioServiceMethods));
+    LOG_ALWAYS_FATAL_IF(res < 0, "Unable to register native methods.");
+}
+
+} // namespace android
diff --git a/services/core/jni/BroadcastRadio/BroadcastRadioService.h b/services/core/jni/BroadcastRadio/BroadcastRadioService.h
new file mode 100644
index 0000000..df7af89
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/BroadcastRadioService.h
@@ -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.
+ */
+
+#ifndef _ANDROID_SERVER_BROADCASTRADIO_BROADCASTRADIOSERVICE_H
+#define _ANDROID_SERVER_BROADCASTRADIO_BROADCASTRADIOSERVICE_H
+
+#include <jni.h>
+
+namespace android {
+
+void register_android_server_broadcastradio_BroadcastRadioService(JNIEnv *env);
+
+} // namespace android
+
+#endif // _ANDROID_SERVER_BROADCASTRADIO_BROADCASTRADIOSERVICE_H
diff --git a/services/core/jni/BroadcastRadio/JavaRef.cpp b/services/core/jni/BroadcastRadio/JavaRef.cpp
new file mode 100644
index 0000000..655ffc7
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/JavaRef.cpp
@@ -0,0 +1,27 @@
+/**
+ * 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.
+ */
+
+#include "JavaRef.h"
+
+#include <string>
+
+namespace android {
+
+JavaRef<jstring> make_javastr(JNIEnv *env, const std::string &str) {
+    return make_javaref(env, env->NewStringUTF(str.c_str()));
+}
+
+} // namespace android
diff --git a/services/core/jni/BroadcastRadio/JavaRef.h b/services/core/jni/BroadcastRadio/JavaRef.h
new file mode 100644
index 0000000..1bf146b
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/JavaRef.h
@@ -0,0 +1,44 @@
+/**
+ * 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.
+ */
+
+#ifndef _ANDROID_JAVA_REF_H
+#define _ANDROID_JAVA_REF_H
+
+#include <android-base/macros.h>
+#include <functional>
+#include <jni.h>
+#include <memory>
+#include <type_traits>
+
+namespace android {
+
+template <typename T>
+using JavaRef = std::unique_ptr<typename std::remove_pointer<T>::type, std::function<void(T)>>;
+
+template <typename T>
+JavaRef<T> make_javaref(JNIEnv *env, T ref) {
+    return JavaRef<T>(ref, [env](T ref) {
+        if (env && ref) {
+            env->DeleteLocalRef(ref);
+        }
+    });
+}
+
+JavaRef<jstring> make_javastr(JNIEnv *env, const std::string &str);
+
+} // namespace android
+
+#endif // _ANDROID_JAVA_REF_H
diff --git a/services/core/jni/BroadcastRadio/NativeCallbackThread.cpp b/services/core/jni/BroadcastRadio/NativeCallbackThread.cpp
new file mode 100644
index 0000000..81d46f3
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/NativeCallbackThread.cpp
@@ -0,0 +1,119 @@
+/**
+ * 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 "NativeCallbackThread"
+//#define LOG_NDEBUG 0
+
+#include "NativeCallbackThread.h"
+
+#include <utils/Log.h>
+
+namespace android {
+
+using std::lock_guard;
+using std::mutex;
+using std::unique_lock;
+
+NativeCallbackThread::NativeCallbackThread(JavaVM *vm) : mvm(vm), mExiting(false),
+        mThread(&NativeCallbackThread::threadLoop, this) {
+    ALOGD("Started native callback thread %p", this);
+}
+
+NativeCallbackThread::~NativeCallbackThread() {
+    ALOGV("%s %p", __func__, this);
+    stop();
+}
+
+void NativeCallbackThread::threadLoop() {
+    ALOGV("%s", __func__);
+
+    JNIEnv *env = nullptr;
+    JavaVMAttachArgs aargs = {JNI_VERSION_1_4, "NativeCallbackThread", nullptr};
+    if (mvm->AttachCurrentThread(&env, &aargs) != JNI_OK || env == nullptr) {
+        ALOGE("Couldn't attach thread");
+        mExiting = true;
+        return;
+    }
+
+    while (true) {
+        Task task;
+        {
+            unique_lock<mutex> lk(mQueueMutex);
+
+            if (mExiting) break;
+            if (mQueue.empty()) {
+                ALOGV("Waiting for task...");
+                mQueueCond.wait(lk);
+                if (mExiting) break;
+                if (mQueue.empty()) continue;
+            }
+
+            task = mQueue.front();
+            mQueue.pop();
+        }
+
+        ALOGV("Executing task...");
+        task(env);
+        if (env->ExceptionCheck()) {
+            ALOGE("Unexpected exception:");
+            env->ExceptionDescribe();
+            env->ExceptionClear();
+        }
+    }
+
+    auto res = mvm->DetachCurrentThread();
+    ALOGE_IF(res != JNI_OK, "Couldn't detach thread");
+
+    ALOGV("Native callback thread %p finished", this);
+    ALOGD_IF(!mQueue.empty(), "Skipped execution of %zu tasks", mQueue.size());
+}
+
+void NativeCallbackThread::enqueue(const Task &task) {
+    lock_guard<mutex> lk(mQueueMutex);
+
+    if (mExiting) {
+        ALOGW("Callback thread %p is not serving calls", this);
+        return;
+    }
+
+    ALOGV("Adding task to the queue...");
+    mQueue.push(task);
+    mQueueCond.notify_one();
+}
+
+void NativeCallbackThread::stop() {
+    ALOGV("%s %p", __func__, this);
+
+    {
+        lock_guard<mutex> lk(mQueueMutex);
+
+        if (mExiting) return;
+
+        mExiting = true;
+        mQueueCond.notify_one();
+    }
+
+    if (mThread.get_id() == std::thread::id()) {
+        // you can't self-join a thread, but it's ok when calling from our sub-task
+        ALOGD("About to stop native callback thread %p", this);
+        mThread.detach();
+    } else {
+        mThread.join();
+        ALOGD("Stopped native callback thread %p", this);
+    }
+}
+
+} // namespace android
diff --git a/services/core/jni/BroadcastRadio/NativeCallbackThread.h b/services/core/jni/BroadcastRadio/NativeCallbackThread.h
new file mode 100644
index 0000000..53990be
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/NativeCallbackThread.h
@@ -0,0 +1,53 @@
+/**
+ * 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.
+ */
+
+#ifndef _ANDROID_NATIVE_CALLBACK_THREAD_H
+#define _ANDROID_NATIVE_CALLBACK_THREAD_H
+
+#include <android-base/macros.h>
+#include <functional>
+#include <jni.h>
+#include <queue>
+#include <thread>
+
+namespace android {
+
+class NativeCallbackThread {
+    typedef std::function<void(JNIEnv*)> Task;
+
+    JavaVM *mvm;
+    std::queue<Task> mQueue;
+
+    std::mutex mQueueMutex;
+    std::condition_variable mQueueCond;
+    std::atomic<bool> mExiting;
+    std::thread mThread;
+
+    void threadLoop();
+
+    DISALLOW_COPY_AND_ASSIGN(NativeCallbackThread);
+
+public:
+    NativeCallbackThread(JavaVM *vm);
+    virtual ~NativeCallbackThread();
+
+    void enqueue(const Task &task);
+    void stop();
+};
+
+} // namespace android
+
+#endif // _ANDROID_NATIVE_CALLBACK_THREAD_H
diff --git a/services/core/jni/BroadcastRadio/Tuner.cpp b/services/core/jni/BroadcastRadio/Tuner.cpp
new file mode 100644
index 0000000..e1ade4d
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/Tuner.cpp
@@ -0,0 +1,553 @@
+/**
+ * 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 "BroadcastRadioService.Tuner.jni"
+#define LOG_NDEBUG 0
+
+#include "Tuner.h"
+
+#include "convert.h"
+#include "TunerCallback.h"
+
+#include <android/hardware/broadcastradio/1.1/IBroadcastRadioFactory.h>
+#include <binder/IPCThreadState.h>
+#include <broadcastradio-utils/Utils.h>
+#include <core_jni_helpers.h>
+#include <media/AudioSystem.h>
+#include <nativehelper/JNIHelp.h>
+#include <utils/Log.h>
+
+namespace android {
+namespace server {
+namespace BroadcastRadio {
+namespace Tuner {
+
+using std::lock_guard;
+using std::mutex;
+
+using hardware::Return;
+using hardware::hidl_death_recipient;
+using hardware::hidl_vec;
+
+namespace V1_0 = hardware::broadcastradio::V1_0;
+namespace V1_1 = hardware::broadcastradio::V1_1;
+
+using V1_0::Band;
+using V1_0::BandConfig;
+using V1_0::MetaData;
+using V1_0::Result;
+using V1_1::ITunerCallback;
+using V1_1::ProgramListResult;
+
+static mutex gContextMutex;
+
+static struct {
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+        jmethodID add;
+    } ArrayList;
+    struct {
+        jfieldID nativeContext;
+        jfieldID region;
+        jfieldID tunerCallback;
+    } Tuner;
+} gjni;
+
+static const char* const kAudioDeviceName = "Radio tuner source";
+
+class HalDeathRecipient : public hidl_death_recipient {
+    wp<V1_1::ITunerCallback> mTunerCallback;
+
+public:
+    HalDeathRecipient(wp<V1_1::ITunerCallback> tunerCallback):mTunerCallback(tunerCallback) {}
+
+    virtual void serviceDied(uint64_t cookie, const wp<hidl::base::V1_0::IBase>& who);
+};
+
+struct TunerContext {
+    TunerContext() {}
+
+    bool mIsClosed = false;
+    HalRevision mHalRev;
+    bool mWithAudio;
+    bool mIsAudioConnected = false;
+    Band mBand;
+    wp<V1_0::IBroadcastRadio> mHalModule;
+    wp<V1_1::IBroadcastRadio> mHalModule11;
+    sp<V1_0::ITuner> mHalTuner;
+    sp<V1_1::ITuner> mHalTuner11;
+    sp<HalDeathRecipient> mHalDeathRecipient;
+
+private:
+    DISALLOW_COPY_AND_ASSIGN(TunerContext);
+};
+
+static TunerContext& getNativeContext(jlong nativeContextHandle) {
+    auto nativeContext = reinterpret_cast<TunerContext*>(nativeContextHandle);
+    LOG_ALWAYS_FATAL_IF(nativeContext == nullptr, "Native context not initialized");
+    return *nativeContext;
+}
+
+/**
+ * Always lock gContextMutex when using native context.
+ */
+static TunerContext& getNativeContext(JNIEnv *env, JavaRef<jobject> const &jTuner) {
+    return getNativeContext(env->GetLongField(jTuner.get(), gjni.Tuner.nativeContext));
+}
+
+static jlong nativeInit(JNIEnv *env, jobject obj, jint halRev, bool withAudio, jint band) {
+    ALOGV("%s", __func__);
+    lock_guard<mutex> lk(gContextMutex);
+
+    auto ctx = new TunerContext();
+    ctx->mHalRev = static_cast<HalRevision>(halRev);
+    ctx->mWithAudio = withAudio;
+    ctx->mBand = static_cast<Band>(band);
+
+    static_assert(sizeof(jlong) >= sizeof(ctx), "jlong is smaller than a pointer");
+    return reinterpret_cast<jlong>(ctx);
+}
+
+static void nativeFinalize(JNIEnv *env, jobject obj, jlong nativeContext) {
+    ALOGV("%s", __func__);
+    lock_guard<mutex> lk(gContextMutex);
+
+    auto ctx = reinterpret_cast<TunerContext*>(nativeContext);
+    delete ctx;
+}
+
+void HalDeathRecipient::serviceDied(uint64_t cookie __unused,
+        const wp<hidl::base::V1_0::IBase>& who __unused) {
+    ALOGW("HAL Tuner died unexpectedly");
+
+    auto tunerCallback = mTunerCallback.promote();
+    if (tunerCallback == nullptr) return;
+
+    tunerCallback->hardwareFailure();
+}
+
+// TODO(b/62713378): implement support for multiple tuners open at the same time
+static void notifyAudioService(TunerContext& ctx, bool connected) {
+    if (!ctx.mWithAudio) return;
+    if (ctx.mIsAudioConnected == connected) return;
+    ctx.mIsAudioConnected = connected;
+
+    ALOGD("Notifying AudioService about new state: %d", connected);
+    auto token = IPCThreadState::self()->clearCallingIdentity();
+    AudioSystem::setDeviceConnectionState(AUDIO_DEVICE_IN_FM_TUNER,
+            connected ? AUDIO_POLICY_DEVICE_STATE_AVAILABLE : AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE,
+            nullptr, kAudioDeviceName);
+    IPCThreadState::self()->restoreCallingIdentity(token);
+}
+
+void assignHalInterfaces(JNIEnv *env, JavaRef<jobject> const &jTuner,
+        sp<V1_0::IBroadcastRadio> halModule, sp<V1_0::ITuner> halTuner) {
+    ALOGV("%s(%p)", __func__, halTuner.get());
+    ALOGE_IF(halTuner == nullptr, "HAL tuner is a nullptr");
+    lock_guard<mutex> lk(gContextMutex);
+    auto& ctx = getNativeContext(env, jTuner);
+
+    if (ctx.mIsClosed) {
+        ALOGD("Tuner was closed during initialization");
+        // dropping the last reference will close HAL tuner
+        return;
+    }
+    if (ctx.mHalTuner != nullptr) {
+        ALOGE("HAL tuner is already set.");
+        return;
+    }
+
+    ctx.mHalModule = halModule;
+    ctx.mHalModule11 = V1_1::IBroadcastRadio::castFrom(halModule).withDefault(nullptr);
+
+    ctx.mHalTuner = halTuner;
+    ctx.mHalTuner11 = V1_1::ITuner::castFrom(halTuner).withDefault(nullptr);
+    ALOGW_IF(ctx.mHalRev >= HalRevision::V1_1 && ctx.mHalTuner11 == nullptr,
+            "Provided tuner does not implement 1.1 HAL");
+
+    ctx.mHalDeathRecipient = new HalDeathRecipient(getNativeCallback(env, jTuner));
+    halTuner->linkToDeath(ctx.mHalDeathRecipient, 0);
+
+    notifyAudioService(ctx, true);
+}
+
+static sp<V1_0::ITuner> getHalTuner(const TunerContext& ctx) {
+    auto tuner = ctx.mHalTuner;
+    LOG_ALWAYS_FATAL_IF(tuner == nullptr, "HAL tuner is not open");
+    return tuner;
+}
+
+sp<V1_0::ITuner> getHalTuner(jlong nativeContext) {
+    lock_guard<mutex> lk(gContextMutex);
+    return getHalTuner(getNativeContext(nativeContext));
+}
+
+sp<V1_1::ITuner> getHalTuner11(jlong nativeContext) {
+    lock_guard<mutex> lk(gContextMutex);
+    return getNativeContext(nativeContext).mHalTuner11;
+}
+
+sp<ITunerCallback> getNativeCallback(JNIEnv *env, JavaRef<jobject> const &tuner) {
+    return TunerCallback::getNativeCallback(env,
+            env->GetObjectField(tuner.get(), gjni.Tuner.tunerCallback));
+}
+
+Region getRegion(JNIEnv *env, jobject obj) {
+    return static_cast<Region>(env->GetIntField(obj, gjni.Tuner.region));
+}
+
+static void nativeClose(JNIEnv *env, jobject obj, jlong nativeContext) {
+    lock_guard<mutex> lk(gContextMutex);
+    auto& ctx = getNativeContext(nativeContext);
+
+    if (ctx.mIsClosed) return;
+    ctx.mIsClosed = true;
+
+    if (ctx.mHalTuner == nullptr) {
+        ALOGI("Tuner closed during initialization");
+        return;
+    }
+
+    ALOGI("Closing tuner %p", ctx.mHalTuner.get());
+
+    notifyAudioService(ctx, false);
+
+    ctx.mHalTuner->unlinkToDeath(ctx.mHalDeathRecipient);
+    ctx.mHalDeathRecipient = nullptr;
+
+    ctx.mHalTuner11 = nullptr;
+    ctx.mHalTuner = nullptr;
+}
+
+static void nativeSetConfiguration(JNIEnv *env, jobject obj, jlong nativeContext, jobject config) {
+    ALOGV("%s", __func__);
+    lock_guard<mutex> lk(gContextMutex);
+    auto& ctx = getNativeContext(nativeContext);
+
+    auto halTuner = getHalTuner(ctx);
+    if (halTuner == nullptr) return;
+
+    Region region_unused;
+    BandConfig bandConfigHal = convert::BandConfigToHal(env, config, region_unused);
+
+    if (convert::ThrowIfFailed(env, halTuner->setConfiguration(bandConfigHal))) return;
+
+    ctx.mBand = bandConfigHal.type;
+}
+
+static jobject nativeGetConfiguration(JNIEnv *env, jobject obj, jlong nativeContext,
+        Region region) {
+    ALOGV("%s", __func__);
+    auto halTuner = getHalTuner(nativeContext);
+    if (halTuner == nullptr) return nullptr;
+
+    BandConfig halConfig;
+    Result halResult;
+    auto hidlResult = halTuner->getConfiguration([&](Result result, const BandConfig& config) {
+        halResult = result;
+        halConfig = config;
+    });
+    if (convert::ThrowIfFailed(env, hidlResult, halResult)) {
+        return nullptr;
+    }
+
+    return convert::BandConfigFromHal(env, halConfig, region).release();
+}
+
+static void nativeSetMuted(JNIEnv *env, jobject obj, jlong nativeContext, bool mute) {
+    ALOGV("%s(%d)", __func__, mute);
+    lock_guard<mutex> lk(gContextMutex);
+    auto& ctx = getNativeContext(nativeContext);
+
+    notifyAudioService(ctx, !mute);
+}
+
+static void nativeStep(JNIEnv *env, jobject obj, jlong nativeContext,
+        bool directionDown, bool skipSubChannel) {
+    ALOGV("%s", __func__);
+    auto halTuner = getHalTuner(nativeContext);
+    if (halTuner == nullptr) return;
+
+    auto dir = convert::DirectionToHal(directionDown);
+    convert::ThrowIfFailed(env, halTuner->step(dir, skipSubChannel));
+}
+
+static void nativeScan(JNIEnv *env, jobject obj, jlong nativeContext,
+        bool directionDown, bool skipSubChannel) {
+    ALOGV("%s", __func__);
+    auto halTuner = getHalTuner(nativeContext);
+    if (halTuner == nullptr) return;
+
+    auto dir = convert::DirectionToHal(directionDown);
+    convert::ThrowIfFailed(env, halTuner->scan(dir, skipSubChannel));
+}
+
+static void nativeTune(JNIEnv *env, jobject obj, jlong nativeContext, jobject jSelector) {
+    ALOGV("%s", __func__);
+    lock_guard<mutex> lk(gContextMutex);
+    auto& ctx = getNativeContext(nativeContext);
+
+    auto halTuner10 = getHalTuner(ctx);
+    auto halTuner11 = ctx.mHalTuner11;
+    if (halTuner10 == nullptr) return;
+
+    auto selector = convert::ProgramSelectorToHal(env, jSelector);
+    if (halTuner11 != nullptr) {
+        convert::ThrowIfFailed(env, halTuner11->tuneByProgramSelector(selector));
+    } else {
+        uint32_t channel, subChannel;
+        if (!V1_1::utils::getLegacyChannel(selector, &channel, &subChannel)) {
+            jniThrowException(env, "java/lang/IllegalArgumentException",
+                    "Can't tune to non-AM/FM channel with HAL<1.1");
+            return;
+        }
+        convert::ThrowIfFailed(env, halTuner10->tune(channel, subChannel));
+    }
+}
+
+static void nativeCancel(JNIEnv *env, jobject obj, jlong nativeContext) {
+    ALOGV("%s", __func__);
+    auto halTuner = getHalTuner(nativeContext);
+    if (halTuner == nullptr) return;
+
+    convert::ThrowIfFailed(env, halTuner->cancel());
+}
+
+static void nativeCancelAnnouncement(JNIEnv *env, jobject obj, jlong nativeContext) {
+    ALOGV("%s", __func__);
+    auto halTuner = getHalTuner11(nativeContext);
+    if (halTuner == nullptr) {
+        ALOGI("cancelling announcements is not supported with HAL < 1.1");
+        return;
+    }
+
+    convert::ThrowIfFailed(env, halTuner->cancelAnnouncement());
+}
+
+static jobject nativeGetProgramInformation(JNIEnv *env, jobject obj, jlong nativeContext) {
+    ALOGV("%s", __func__);
+    lock_guard<mutex> lk(gContextMutex);
+    auto& ctx = getNativeContext(nativeContext);
+
+    auto halTuner10 = getHalTuner(ctx);
+    auto halTuner11 = ctx.mHalTuner11;
+    if (halTuner10 == nullptr) return nullptr;
+
+    JavaRef<jobject> jInfo;
+    Result halResult;
+    Return<void> hidlResult;
+    if (halTuner11 != nullptr) {
+        hidlResult = halTuner11->getProgramInformation_1_1([&](Result result,
+                const V1_1::ProgramInfo& info) {
+            halResult = result;
+            if (result != Result::OK) return;
+            jInfo = convert::ProgramInfoFromHal(env, info);
+        });
+    } else {
+        hidlResult = halTuner10->getProgramInformation([&](Result result,
+                const V1_0::ProgramInfo& info) {
+            halResult = result;
+            if (result != Result::OK) return;
+            jInfo = convert::ProgramInfoFromHal(env, info, ctx.mBand);
+        });
+    }
+
+    if (jInfo != nullptr) return jInfo.release();
+    convert::ThrowIfFailed(env, hidlResult, halResult);
+    return nullptr;
+}
+
+static bool nativeStartBackgroundScan(JNIEnv *env, jobject obj, jlong nativeContext) {
+    ALOGV("%s", __func__);
+    auto halTuner = getHalTuner11(nativeContext);
+    if (halTuner == nullptr) {
+        ALOGI("Background scan is not supported with HAL < 1.1");
+        return false;
+    }
+
+    auto halResult = halTuner->startBackgroundScan();
+
+    if (halResult.isOk() && halResult == ProgramListResult::UNAVAILABLE) return false;
+    return !convert::ThrowIfFailed(env, halResult);
+}
+
+static jobject nativeGetProgramList(JNIEnv *env, jobject obj, jlong nativeContext, jobject jVendorFilter) {
+    ALOGV("%s", __func__);
+    auto halTuner = getHalTuner11(nativeContext);
+    if (halTuner == nullptr) {
+        ALOGI("Program list is not supported with HAL < 1.1");
+        return nullptr;
+    }
+
+    JavaRef<jobject> jList;
+    ProgramListResult halResult = ProgramListResult::NOT_INITIALIZED;
+    auto filter = convert::VendorInfoToHal(env, jVendorFilter);
+    auto hidlResult = halTuner->getProgramList(filter,
+            [&](ProgramListResult result, const hidl_vec<V1_1::ProgramInfo>& programList) {
+        halResult = result;
+        if (halResult != ProgramListResult::OK) return;
+
+        jList = make_javaref(env, env->NewObject(gjni.ArrayList.clazz, gjni.ArrayList.cstor));
+        for (auto& program : programList) {
+            auto jProgram = convert::ProgramInfoFromHal(env, program);
+            env->CallBooleanMethod(jList.get(), gjni.ArrayList.add, jProgram.get());
+        }
+    });
+
+    if (convert::ThrowIfFailed(env, hidlResult, halResult)) return nullptr;
+
+    return jList.release();
+}
+
+static jbyteArray nativeGetImage(JNIEnv *env, jobject obj, jlong nativeContext, jint id) {
+    ALOGV("%s(%x)", __func__, id);
+    lock_guard<mutex> lk(gContextMutex);
+    auto& ctx = getNativeContext(nativeContext);
+
+    if (ctx.mHalModule11 == nullptr) {
+        jniThrowException(env, "java/lang/IllegalStateException",
+                "Out-of-band images are not supported with HAL < 1.1");
+        return nullptr;
+    }
+
+    auto halModule = ctx.mHalModule11.promote();
+    if (halModule == nullptr) {
+        ALOGE("HAL module is gone");
+        return nullptr;
+    }
+
+    JavaRef<jbyteArray> jRawImage = nullptr;
+
+    auto hidlResult = halModule->getImage(id, [&](hidl_vec<uint8_t> rawImage) {
+        auto len = rawImage.size();
+        if (len == 0) return;
+
+        jRawImage = make_javaref(env, env->NewByteArray(len));
+        if (jRawImage == nullptr) {
+            ALOGE("Failed to allocate byte array of len %zu", len);
+            return;
+        }
+
+        env->SetByteArrayRegion(jRawImage.get(), 0, len,
+                reinterpret_cast<const jbyte*>(rawImage.data()));
+    });
+
+    if (convert::ThrowIfFailed(env, hidlResult)) return nullptr;
+
+    return jRawImage.get();
+}
+
+static bool nativeIsAnalogForced(JNIEnv *env, jobject obj, jlong nativeContext) {
+    ALOGV("%s", __func__);
+    auto halTuner = getHalTuner11(nativeContext);
+    if (halTuner == nullptr) {
+        jniThrowException(env, "java/lang/IllegalStateException",
+                "Forced analog switch is not supported with HAL < 1.1");
+        return false;
+    }
+
+    bool isForced;
+    Result halResult;
+    auto hidlResult = halTuner->isAnalogForced([&](Result result, bool isForcedRet) {
+        halResult = result;
+        isForced = isForcedRet;
+    });
+
+    if (convert::ThrowIfFailed(env, hidlResult, halResult)) return false;
+
+    return isForced;
+}
+
+static void nativeSetAnalogForced(JNIEnv *env, jobject obj, jlong nativeContext, bool isForced) {
+    ALOGV("%s(%d)", __func__, isForced);
+    auto halTuner = getHalTuner11(nativeContext);
+    if (halTuner == nullptr) {
+        jniThrowException(env, "java/lang/IllegalStateException",
+                "Forced analog switch is not supported with HAL < 1.1");
+        return;
+    }
+
+    auto halResult = halTuner->setAnalogForced(isForced);
+    convert::ThrowIfFailed(env, halResult);
+}
+
+static bool nativeIsAntennaConnected(JNIEnv *env, jobject obj, jlong nativeContext) {
+    ALOGV("%s", __func__);
+    auto halTuner = getHalTuner(nativeContext);
+    if (halTuner == nullptr) return false;
+
+    bool isConnected = false;
+    Result halResult;
+    auto hidlResult = halTuner->getConfiguration([&](Result result, const BandConfig& config) {
+        halResult = result;
+        isConnected = config.antennaConnected;
+    });
+    convert::ThrowIfFailed(env, hidlResult, halResult);
+    return isConnected;
+}
+
+static const JNINativeMethod gTunerMethods[] = {
+    { "nativeInit", "(IZI)J", (void*)nativeInit },
+    { "nativeFinalize", "(J)V", (void*)nativeFinalize },
+    { "nativeClose", "(J)V", (void*)nativeClose },
+    { "nativeSetConfiguration", "(JLandroid/hardware/radio/RadioManager$BandConfig;)V",
+            (void*)nativeSetConfiguration },
+    { "nativeGetConfiguration", "(JI)Landroid/hardware/radio/RadioManager$BandConfig;",
+            (void*)nativeGetConfiguration },
+    { "nativeSetMuted", "(JZ)V", (void*)nativeSetMuted },
+    { "nativeStep", "(JZZ)V", (void*)nativeStep },
+    { "nativeScan", "(JZZ)V", (void*)nativeScan },
+    { "nativeTune", "(JLandroid/hardware/radio/ProgramSelector;)V", (void*)nativeTune },
+    { "nativeCancel", "(J)V", (void*)nativeCancel },
+    { "nativeCancelAnnouncement", "(J)V", (void*)nativeCancelAnnouncement },
+    { "nativeGetProgramInformation", "(J)Landroid/hardware/radio/RadioManager$ProgramInfo;",
+            (void*)nativeGetProgramInformation },
+    { "nativeStartBackgroundScan", "(J)Z", (void*)nativeStartBackgroundScan },
+    { "nativeGetProgramList", "(JLjava/util/Map;)Ljava/util/List;",
+            (void*)nativeGetProgramList },
+    { "nativeGetImage", "(JI)[B", (void*)nativeGetImage},
+    { "nativeIsAnalogForced", "(J)Z", (void*)nativeIsAnalogForced },
+    { "nativeSetAnalogForced", "(JZ)V", (void*)nativeSetAnalogForced },
+    { "nativeIsAntennaConnected", "(J)Z", (void*)nativeIsAntennaConnected },
+};
+
+} // namespace Tuner
+} // namespace BroadcastRadio
+} // namespace server
+
+void register_android_server_broadcastradio_Tuner(JavaVM *vm, JNIEnv *env) {
+    using namespace server::BroadcastRadio::Tuner;
+
+    register_android_server_broadcastradio_TunerCallback(vm, env);
+
+    auto tunerClass = FindClassOrDie(env, "com/android/server/broadcastradio/Tuner");
+    gjni.Tuner.nativeContext = GetFieldIDOrDie(env, tunerClass, "mNativeContext", "J");
+    gjni.Tuner.region = GetFieldIDOrDie(env, tunerClass, "mRegion", "I");
+    gjni.Tuner.tunerCallback = GetFieldIDOrDie(env, tunerClass, "mTunerCallback",
+            "Lcom/android/server/broadcastradio/TunerCallback;");
+
+    auto arrayListClass = FindClassOrDie(env, "java/util/ArrayList");
+    gjni.ArrayList.clazz = MakeGlobalRefOrDie(env, arrayListClass);
+    gjni.ArrayList.cstor = GetMethodIDOrDie(env, arrayListClass, "<init>", "()V");
+    gjni.ArrayList.add = GetMethodIDOrDie(env, arrayListClass, "add", "(Ljava/lang/Object;)Z");
+
+    auto res = jniRegisterNativeMethods(env, "com/android/server/broadcastradio/Tuner",
+            gTunerMethods, NELEM(gTunerMethods));
+    LOG_ALWAYS_FATAL_IF(res < 0, "Unable to register native methods.");
+}
+
+} // namespace android
diff --git a/services/core/jni/BroadcastRadio/Tuner.h b/services/core/jni/BroadcastRadio/Tuner.h
new file mode 100644
index 0000000..818597b
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/Tuner.h
@@ -0,0 +1,52 @@
+/**
+ * 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.
+ */
+
+#ifndef _ANDROID_SERVER_BROADCASTRADIORADIO_TUNER_H
+#define _ANDROID_SERVER_BROADCASTRADIORADIO_TUNER_H
+
+#include "types.h"
+
+#include "JavaRef.h"
+
+#include <android/hardware/broadcastradio/1.1/IBroadcastRadio.h>
+#include <android/hardware/broadcastradio/1.1/ITuner.h>
+#include <android/hardware/broadcastradio/1.1/ITunerCallback.h>
+#include <jni.h>
+#include <utils/StrongPointer.h>
+
+namespace android {
+
+void register_android_server_broadcastradio_Tuner(JavaVM *vm, JNIEnv *env);
+
+namespace server {
+namespace BroadcastRadio {
+namespace Tuner {
+
+void assignHalInterfaces(JNIEnv *env, JavaRef<jobject> const &jTuner,
+        sp<hardware::broadcastradio::V1_0::IBroadcastRadio> halModule,
+        sp<hardware::broadcastradio::V1_0::ITuner> halTuner);
+
+sp<hardware::broadcastradio::V1_1::ITunerCallback>
+getNativeCallback(JNIEnv *env, JavaRef<jobject> const &tuner);
+
+Region getRegion(JNIEnv *env, jobject obj);
+
+} // namespace Tuner
+} // namespace BroadcastRadio
+} // namespace server
+} // namespace android
+
+#endif // _ANDROID_SERVER_BROADCASTRADIORADIO_TUNER_H
diff --git a/services/core/jni/BroadcastRadio/TunerCallback.cpp b/services/core/jni/BroadcastRadio/TunerCallback.cpp
new file mode 100644
index 0000000..d53721f
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/TunerCallback.cpp
@@ -0,0 +1,433 @@
+/**
+ * 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 "BroadcastRadioService.TunerCallback.jni"
+#define LOG_NDEBUG 0
+
+#include "TunerCallback.h"
+
+#include "Tuner.h"
+#include "convert.h"
+
+#include <broadcastradio-utils/Utils.h>
+#include <core_jni_helpers.h>
+#include <nativehelper/JNIHelp.h>
+#include <utils/Log.h>
+
+namespace android {
+namespace server {
+namespace BroadcastRadio {
+namespace TunerCallback {
+
+using std::lock_guard;
+using std::mutex;
+
+using hardware::Return;
+using hardware::hidl_vec;
+
+namespace V1_0 = hardware::broadcastradio::V1_0;
+namespace V1_1 = hardware::broadcastradio::V1_1;
+
+using V1_0::Band;
+using V1_0::BandConfig;
+using V1_0::MetaData;
+using V1_0::Result;
+using V1_1::ITunerCallback;
+using V1_1::ProgramInfo;
+using V1_1::ProgramListResult;
+using V1_1::ProgramSelector;
+
+static JavaVM *gvm = nullptr;
+
+static struct {
+    struct {
+        jclass clazz;
+        jfieldID nativeContext;
+        jmethodID handleHwFailure;
+        jmethodID onError;
+        jmethodID onConfigurationChanged;
+        jmethodID onCurrentProgramInfoChanged;
+        jmethodID onTrafficAnnouncement;
+        jmethodID onEmergencyAnnouncement;
+        jmethodID onAntennaState;
+        jmethodID onBackgroundScanAvailabilityChange;
+        jmethodID onBackgroundScanComplete;
+        jmethodID onProgramListChanged;
+    } TunerCallback;
+} gjni;
+
+// from frameworks/base/core/java/android/hardware/radio/RadioTuner.java
+enum class TunerError : jint {
+    HARDWARE_FAILURE = 0,
+    SERVER_DIED = 1,
+    CANCELLED = 2,
+    SCAN_TIMEOUT = 3,
+    CONFIG = 4,
+    BACKGROUND_SCAN_UNAVAILABLE = 5,
+    BACKGROUND_SCAN_FAILED = 6,
+};
+
+static mutex gContextMutex;
+
+class NativeCallback : public ITunerCallback {
+    mutex mMut;
+
+    jobject mJTuner;
+    jobject mJCallback;
+    NativeCallbackThread mCallbackThread;
+    HalRevision mHalRev;
+
+    Band mBand;
+
+    // Carries current program info data for 1.0 newMetadata callback.
+    V1_0::ProgramInfo mCurrentProgramInfo;
+
+    DISALLOW_COPY_AND_ASSIGN(NativeCallback);
+
+public:
+    NativeCallback(JNIEnv *env, jobject jTuner, jobject jCallback, HalRevision halRev);
+    virtual ~NativeCallback();
+
+    void detach();
+
+    virtual Return<void> hardwareFailure();
+    virtual Return<void> configChange(Result result, const BandConfig& config);
+    virtual Return<void> tuneComplete(Result result, const V1_0::ProgramInfo& info);
+    virtual Return<void> afSwitch(const V1_0::ProgramInfo& info);
+    virtual Return<void> antennaStateChange(bool connected);
+    virtual Return<void> trafficAnnouncement(bool active);
+    virtual Return<void> emergencyAnnouncement(bool active);
+    virtual Return<void> newMetadata(uint32_t channel, uint32_t subChannel,
+            const hidl_vec<MetaData>& metadata);
+    virtual Return<void> tuneComplete_1_1(Result result, const ProgramSelector& selector);
+    virtual Return<void> backgroundScanAvailable(bool isAvailable);
+    virtual Return<void> backgroundScanComplete(ProgramListResult result);
+    virtual Return<void> programListChanged();
+    virtual Return<void> currentProgramInfoChanged(const ProgramInfo& info);
+};
+
+struct TunerCallbackContext {
+    TunerCallbackContext() {}
+
+    sp<NativeCallback> mNativeCallback;
+
+private:
+    DISALLOW_COPY_AND_ASSIGN(TunerCallbackContext);
+};
+
+NativeCallback::NativeCallback(JNIEnv *env, jobject jTuner, jobject jCallback, HalRevision halRev)
+        : mCallbackThread(gvm), mHalRev(halRev) {
+    ALOGV("%s", __func__);
+    mJTuner = env->NewGlobalRef(jTuner);
+    mJCallback = env->NewGlobalRef(jCallback);
+}
+
+NativeCallback::~NativeCallback() {
+    ALOGV("%s", __func__);
+
+    // stop callback thread before dereferencing client callback
+    mCallbackThread.stop();
+
+    JNIEnv *env = nullptr;
+    gvm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_4);
+    if (env != nullptr) {
+        env->DeleteGlobalRef(mJTuner);
+        env->DeleteGlobalRef(mJCallback);
+    }
+}
+
+void NativeCallback::detach() {
+    // stop callback thread to ignore further calls
+    mCallbackThread.stop();
+}
+
+Return<void> NativeCallback::hardwareFailure() {
+    mCallbackThread.enqueue([this](JNIEnv *env) {
+        env->CallVoidMethod(mJCallback, gjni.TunerCallback.handleHwFailure);
+    });
+
+    return Return<void>();
+}
+
+Return<void> NativeCallback::configChange(Result result, const BandConfig& config) {
+    ALOGV("%s(%d)", __func__, result);
+
+    mCallbackThread.enqueue([result, config, this](JNIEnv *env) {
+        if (result == Result::OK) {
+            auto region = Tuner::getRegion(env, mJTuner);
+            auto jConfig = convert::BandConfigFromHal(env, config, region);
+            if (jConfig == nullptr) return;
+            env->CallVoidMethod(mJCallback, gjni.TunerCallback.onConfigurationChanged,
+                    jConfig.get());
+        } else {
+            env->CallVoidMethod(mJCallback, gjni.TunerCallback.onError, TunerError::CONFIG);
+        }
+    });
+
+    return Return<void>();
+}
+
+Return<void> NativeCallback::tuneComplete(Result result, const V1_0::ProgramInfo& info) {
+    ALOGV("%s(%d)", __func__, result);
+
+    if (mHalRev > HalRevision::V1_0) {
+        ALOGW("1.0 callback was ignored");
+        return {};
+    }
+
+    if (result == Result::OK) {
+        {
+            lock_guard<mutex> lk(mMut);
+            mCurrentProgramInfo = info;
+        }
+
+        // tuneComplete_1_1 implementation does not handle success case, see the implementation
+        mCallbackThread.enqueue([this, info](JNIEnv *env) {
+            auto jInfo = convert::ProgramInfoFromHal(env, info, mBand);
+            env->CallVoidMethod(mJCallback, gjni.TunerCallback.onCurrentProgramInfoChanged,
+                    jInfo.get());
+        });
+        return {};
+    }
+
+    auto selector = V1_1::utils::make_selector(mBand, info.channel, info.subChannel);
+    return tuneComplete_1_1(result, selector);
+}
+
+Return<void> NativeCallback::tuneComplete_1_1(Result result, const ProgramSelector& selector) {
+    ALOGV("%s(%d)", __func__, result);
+
+    mCallbackThread.enqueue([result, this](JNIEnv *env) {
+        /* for HAL 1.1, onCurrentProgramInfoChanged will be called from currentProgramInfoChanged,
+         * so we don't need to handle success case here.
+         */
+        if (result == Result::OK) return;
+
+        TunerError cause = TunerError::CANCELLED;
+        if (result == Result::TIMEOUT) cause = TunerError::SCAN_TIMEOUT;
+        env->CallVoidMethod(mJCallback, gjni.TunerCallback.onError, cause);
+    });
+
+    return Return<void>();
+}
+
+Return<void> NativeCallback::afSwitch(const V1_0::ProgramInfo& info) {
+    ALOGV("%s", __func__);
+    return tuneComplete(Result::OK, info);
+}
+
+Return<void> NativeCallback::antennaStateChange(bool connected) {
+    ALOGV("%s(%d)", __func__, connected);
+
+    mCallbackThread.enqueue([this, connected](JNIEnv *env) {
+        env->CallVoidMethod(mJCallback, gjni.TunerCallback.onAntennaState, connected);
+    });
+
+    return Return<void>();
+}
+
+Return<void> NativeCallback::trafficAnnouncement(bool active) {
+    ALOGV("%s(%d)", __func__, active);
+
+    mCallbackThread.enqueue([this, active](JNIEnv *env) {
+        env->CallVoidMethod(mJCallback, gjni.TunerCallback.onTrafficAnnouncement, active);
+    });
+
+    return Return<void>();
+}
+
+Return<void> NativeCallback::emergencyAnnouncement(bool active) {
+    ALOGV("%s(%d)", __func__, active);
+
+    mCallbackThread.enqueue([this, active](JNIEnv *env) {
+        env->CallVoidMethod(mJCallback, gjni.TunerCallback.onEmergencyAnnouncement, active);
+    });
+
+    return Return<void>();
+}
+
+Return<void> NativeCallback::newMetadata(uint32_t channel, uint32_t subChannel,
+        const hidl_vec<MetaData>& metadata) {
+    ALOGV("%s(%d, %d)", __func__, channel, subChannel);
+
+    if (mHalRev > HalRevision::V1_0) {
+        ALOGW("1.0 callback was ignored");
+        return {};
+    }
+
+    V1_0::ProgramInfo info;
+    {
+        lock_guard<mutex> lk(mMut);
+        info = mCurrentProgramInfo;
+    }
+    if (channel != info.channel || subChannel != info.subChannel) {
+        ALOGE("Channel mismatch on newMetadata callback (%d.%d != %d.%d)",
+                channel, subChannel, info.channel, info.subChannel);
+        return {};
+    }
+    info.metadata = metadata;
+
+    mCallbackThread.enqueue([this, info](JNIEnv *env) {
+        auto jInfo = convert::ProgramInfoFromHal(env, info, mBand);
+        env->CallVoidMethod(mJCallback, gjni.TunerCallback.onCurrentProgramInfoChanged,
+                jInfo.get());
+    });
+
+    return {};
+}
+
+Return<void> NativeCallback::backgroundScanAvailable(bool isAvailable) {
+    ALOGV("%s(%d)", __func__, isAvailable);
+
+    mCallbackThread.enqueue([this, isAvailable](JNIEnv *env) {
+        env->CallVoidMethod(mJCallback,
+                gjni.TunerCallback.onBackgroundScanAvailabilityChange, isAvailable);
+    });
+
+    return Return<void>();
+}
+
+Return<void> NativeCallback::backgroundScanComplete(ProgramListResult result) {
+    ALOGV("%s(%d)", __func__, result);
+
+    mCallbackThread.enqueue([this, result](JNIEnv *env) {
+        if (result == ProgramListResult::OK) {
+            env->CallVoidMethod(mJCallback, gjni.TunerCallback.onBackgroundScanComplete);
+        } else {
+            auto cause = (result == ProgramListResult::UNAVAILABLE) ?
+                    TunerError::BACKGROUND_SCAN_UNAVAILABLE : TunerError::BACKGROUND_SCAN_FAILED;
+            env->CallVoidMethod(mJCallback, gjni.TunerCallback.onError, cause);
+        }
+    });
+
+    return Return<void>();
+}
+
+Return<void> NativeCallback::programListChanged() {
+    ALOGV("%s", __func__);
+
+    mCallbackThread.enqueue([this](JNIEnv *env) {
+        env->CallVoidMethod(mJCallback, gjni.TunerCallback.onProgramListChanged);
+    });
+
+    return Return<void>();
+}
+
+Return<void> NativeCallback::currentProgramInfoChanged(const ProgramInfo& info) {
+    ALOGV("%s(%s)", __func__, toString(info).substr(0, 100).c_str());
+
+    mCallbackThread.enqueue([this, info](JNIEnv *env) {
+        auto jInfo = convert::ProgramInfoFromHal(env, info);
+        env->CallVoidMethod(mJCallback, gjni.TunerCallback.onCurrentProgramInfoChanged,
+                jInfo.get());
+    });
+
+    return Return<void>();
+}
+
+static TunerCallbackContext& getNativeContext(jlong nativeContextHandle) {
+    auto nativeContext = reinterpret_cast<TunerCallbackContext*>(nativeContextHandle);
+    LOG_ALWAYS_FATAL_IF(nativeContext == nullptr, "Native context not initialized");
+    return *nativeContext;
+}
+
+/**
+ * Always lock gContextMutex when using native context.
+ */
+static TunerCallbackContext& getNativeContext(JNIEnv *env, jobject jTunerCb) {
+    return getNativeContext(env->GetLongField(jTunerCb, gjni.TunerCallback.nativeContext));
+}
+
+static jlong nativeInit(JNIEnv *env, jobject obj, jobject jTuner, jint jHalRev) {
+    ALOGV("%s", __func__);
+    lock_guard<mutex> lk(gContextMutex);
+
+    auto halRev = static_cast<HalRevision>(jHalRev);
+
+    auto ctx = new TunerCallbackContext();
+    ctx->mNativeCallback = new NativeCallback(env, jTuner, obj, halRev);
+
+    static_assert(sizeof(jlong) >= sizeof(ctx), "jlong is smaller than a pointer");
+    return reinterpret_cast<jlong>(ctx);
+}
+
+static void nativeFinalize(JNIEnv *env, jobject obj, jlong nativeContext) {
+    ALOGV("%s", __func__);
+    lock_guard<mutex> lk(gContextMutex);
+
+    auto ctx = reinterpret_cast<TunerCallbackContext*>(nativeContext);
+    delete ctx;
+}
+
+static void nativeDetach(JNIEnv *env, jobject obj, jlong nativeContext) {
+    ALOGV("%s", __func__);
+    lock_guard<mutex> lk(gContextMutex);
+    auto& ctx = getNativeContext(nativeContext);
+
+    if (ctx.mNativeCallback == nullptr) return;
+    ctx.mNativeCallback->detach();
+    ctx.mNativeCallback = nullptr;
+}
+
+sp<ITunerCallback> getNativeCallback(JNIEnv *env, jobject jTunerCallback) {
+    lock_guard<mutex> lk(gContextMutex);
+    auto& ctx = getNativeContext(env, jTunerCallback);
+    return ctx.mNativeCallback;
+}
+
+static const JNINativeMethod gTunerCallbackMethods[] = {
+    { "nativeInit", "(Lcom/android/server/broadcastradio/Tuner;I)J", (void*)nativeInit },
+    { "nativeFinalize", "(J)V", (void*)nativeFinalize },
+    { "nativeDetach", "(J)V", (void*)nativeDetach },
+};
+
+} // namespace TunerCallback
+} // namespace BroadcastRadio
+} // namespace server
+
+void register_android_server_broadcastradio_TunerCallback(JavaVM *vm, JNIEnv *env) {
+    using namespace server::BroadcastRadio::TunerCallback;
+
+    gvm = vm;
+
+    auto tunerCbClass = FindClassOrDie(env, "com/android/server/broadcastradio/TunerCallback");
+    gjni.TunerCallback.clazz = MakeGlobalRefOrDie(env, tunerCbClass);
+    gjni.TunerCallback.nativeContext = GetFieldIDOrDie(env, tunerCbClass, "mNativeContext", "J");
+    gjni.TunerCallback.handleHwFailure = GetMethodIDOrDie(env, tunerCbClass, "handleHwFailure", "()V");
+    gjni.TunerCallback.onError = GetMethodIDOrDie(env, tunerCbClass, "onError", "(I)V");
+    gjni.TunerCallback.onConfigurationChanged = GetMethodIDOrDie(env, tunerCbClass,
+            "onConfigurationChanged", "(Landroid/hardware/radio/RadioManager$BandConfig;)V");
+    gjni.TunerCallback.onCurrentProgramInfoChanged = GetMethodIDOrDie(env, tunerCbClass,
+            "onCurrentProgramInfoChanged", "(Landroid/hardware/radio/RadioManager$ProgramInfo;)V");
+    gjni.TunerCallback.onTrafficAnnouncement = GetMethodIDOrDie(env, tunerCbClass,
+            "onTrafficAnnouncement", "(Z)V");
+    gjni.TunerCallback.onEmergencyAnnouncement = GetMethodIDOrDie(env, tunerCbClass,
+            "onEmergencyAnnouncement", "(Z)V");
+    gjni.TunerCallback.onAntennaState = GetMethodIDOrDie(env, tunerCbClass,
+            "onAntennaState", "(Z)V");
+    gjni.TunerCallback.onBackgroundScanAvailabilityChange = GetMethodIDOrDie(env, tunerCbClass,
+            "onBackgroundScanAvailabilityChange", "(Z)V");
+    gjni.TunerCallback.onBackgroundScanComplete = GetMethodIDOrDie(env, tunerCbClass,
+            "onBackgroundScanComplete", "()V");
+    gjni.TunerCallback.onProgramListChanged = GetMethodIDOrDie(env, tunerCbClass,
+            "onProgramListChanged", "()V");
+
+    auto res = jniRegisterNativeMethods(env, "com/android/server/broadcastradio/TunerCallback",
+            gTunerCallbackMethods, NELEM(gTunerCallbackMethods));
+    LOG_ALWAYS_FATAL_IF(res < 0, "Unable to register native methods.");
+}
+
+} // namespace android
diff --git a/services/core/jni/BroadcastRadio/TunerCallback.h b/services/core/jni/BroadcastRadio/TunerCallback.h
new file mode 100644
index 0000000..af12d21
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/TunerCallback.h
@@ -0,0 +1,43 @@
+/**
+ * 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.
+ */
+
+#ifndef _ANDROID_SERVER_BROADCASTRADIO_TUNERCALLBACK_H
+#define _ANDROID_SERVER_BROADCASTRADIO_TUNERCALLBACK_H
+
+#include "JavaRef.h"
+#include "NativeCallbackThread.h"
+#include "types.h"
+
+#include <android/hardware/broadcastradio/1.1/ITunerCallback.h>
+#include <jni.h>
+
+namespace android {
+
+void register_android_server_broadcastradio_TunerCallback(JavaVM *vm, JNIEnv *env);
+
+namespace server {
+namespace BroadcastRadio {
+namespace TunerCallback {
+
+sp<hardware::broadcastradio::V1_1::ITunerCallback>
+getNativeCallback(JNIEnv *env, jobject jTunerCallback);
+
+} // namespace TunerCallback
+} // namespace BroadcastRadio
+} // namespace server
+} // namespace android
+
+#endif // _ANDROID_SERVER_BROADCASTRADIO_TUNERCALLBACK_H
diff --git a/services/core/jni/BroadcastRadio/convert.cpp b/services/core/jni/BroadcastRadio/convert.cpp
new file mode 100644
index 0000000..ae278de
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/convert.cpp
@@ -0,0 +1,718 @@
+/**
+ * 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 "BroadcastRadioService.convert.jni"
+#define LOG_NDEBUG 0
+
+#include "convert.h"
+
+#include "regions.h"
+
+#include <broadcastradio-utils/Utils.h>
+#include <core_jni_helpers.h>
+#include <nativehelper/JNIHelp.h>
+#include <utils/Log.h>
+
+namespace android {
+namespace server {
+namespace BroadcastRadio {
+namespace convert {
+
+namespace utils = V1_1::utils;
+
+using hardware::Return;
+using hardware::hidl_vec;
+using regions::RegionalBandConfig;
+
+using V1_0::Band;
+using V1_0::Deemphasis;
+using V1_0::Direction;
+using V1_0::MetadataType;
+using V1_0::Result;
+using V1_0::Rds;
+using V1_1::ProgramIdentifier;
+using V1_1::ProgramListResult;
+using V1_1::ProgramSelector;
+using V1_1::VendorKeyValue;
+
+static JavaRef<jobject> BandDescriptorFromHal(JNIEnv *env, const RegionalBandConfig &config);
+static JavaRef<jobject> BandDescriptorFromHal(JNIEnv *env, const V1_0::BandConfig &config, Region region);
+
+static struct {
+    struct {
+        jfieldID descriptor;
+    } BandConfig;
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+        jfieldID stereo;
+        jfieldID rds;
+        jfieldID ta;
+        jfieldID af;
+        jfieldID ea;
+    } FmBandConfig;
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+        jfieldID stereo;
+    } AmBandConfig;
+
+    struct {
+        jclass clazz;
+        jfieldID region;
+        jfieldID type;
+        jfieldID lowerLimit;
+        jfieldID upperLimit;
+        jfieldID spacing;
+    } BandDescriptor;
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+    } FmBandDescriptor;
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+    } AmBandDescriptor;
+
+    struct {
+        jclass clazz;
+        jmethodID stringMapToNative;
+    } Convert;
+
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+    } HashMap;
+
+    struct {
+        jmethodID put;
+    } Map;
+
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+    } ModuleProperties;
+
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+    } ProgramInfo;
+
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+        jfieldID programType;
+        jfieldID primaryId;
+        jfieldID secondaryIds;
+        jfieldID vendorIds;
+
+        struct {
+            jclass clazz;
+            jmethodID cstor;
+            jfieldID type;
+            jfieldID value;
+        } Identifier;
+    } ProgramSelector;
+
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+        jmethodID putIntFromNative;
+        jmethodID putStringFromNative;
+        jmethodID putBitmapFromNative;
+        jmethodID putClockFromNative;
+    } RadioMetadata;
+
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+    } RuntimeException;
+
+    struct {
+        jclass clazz;
+        jmethodID cstor;
+    } ParcelableException;
+} gjni;
+
+template <>
+bool ThrowIfFailed(JNIEnv *env, const hardware::Return<void> &hidlResult) {
+    return __ThrowIfFailedHidl(env, hidlResult);
+}
+
+bool __ThrowIfFailedHidl(JNIEnv *env, const hardware::details::return_status &hidlResult) {
+    if (hidlResult.isOk()) return false;
+
+    ThrowParcelableRuntimeException(env, "HIDL call failed: " + hidlResult.description());
+    return true;
+}
+
+bool __ThrowIfFailed(JNIEnv *env, const Result halResult) {
+    switch (halResult) {
+        case Result::OK:
+            return false;
+        case Result::NOT_INITIALIZED:
+            ThrowParcelableRuntimeException(env, "Result::NOT_INITIALIZED");
+            return true;
+        case Result::INVALID_ARGUMENTS:
+            jniThrowException(env, "java/lang/IllegalArgumentException",
+                    "Result::INVALID_ARGUMENTS");
+            return true;
+        case Result::INVALID_STATE:
+            jniThrowException(env, "java/lang/IllegalStateException", "Result::INVALID_STATE");
+            return true;
+        case Result::TIMEOUT:
+            ThrowParcelableRuntimeException(env, "Result::TIMEOUT (unexpected here)");
+            return true;
+        default:
+            ThrowParcelableRuntimeException(env, "Unknown failure, result: "
+                    + std::to_string(static_cast<int32_t>(halResult)));
+            return true;
+    }
+}
+
+bool __ThrowIfFailed(JNIEnv *env, const ProgramListResult halResult) {
+    switch (halResult) {
+        case ProgramListResult::NOT_READY:
+            jniThrowException(env, "java/lang/IllegalStateException", "Scan is in progress");
+            return true;
+        case ProgramListResult::NOT_STARTED:
+            jniThrowException(env, "java/lang/IllegalStateException", "Scan has not been started");
+            return true;
+        case ProgramListResult::UNAVAILABLE:
+            ThrowParcelableRuntimeException(env,
+                    "ProgramListResult::UNAVAILABLE (unexpected here)");
+            return true;
+        default:
+            return __ThrowIfFailed(env, static_cast<Result>(halResult));
+    }
+}
+
+void ThrowParcelableRuntimeException(JNIEnv *env, const std::string& msg) {
+    auto jMsg = make_javastr(env, msg);
+    auto runtimeExc = make_javaref(env, env->NewObject(gjni.RuntimeException.clazz,
+            gjni.RuntimeException.cstor, jMsg.get()));
+    auto parcelableExc = make_javaref(env, env->NewObject(gjni.ParcelableException.clazz,
+            gjni.ParcelableException.cstor, runtimeExc.get()));
+
+    auto res = env->Throw(static_cast<jthrowable>(parcelableExc.get()));
+    ALOGE_IF(res != JNI_OK, "Couldn't throw parcelable runtime exception");
+}
+
+static JavaRef<jintArray> ArrayFromHal(JNIEnv *env, const hidl_vec<uint32_t>& vec) {
+    auto jArr = make_javaref(env, env->NewIntArray(vec.size()));
+    auto jArrElements = env->GetIntArrayElements(jArr.get(), nullptr);
+    for (size_t i = 0; i < vec.size(); i++) {
+        jArrElements[i] = vec[i];
+    }
+    env->ReleaseIntArrayElements(jArr.get(), jArrElements, 0);
+    return jArr;
+}
+
+static JavaRef<jlongArray> ArrayFromHal(JNIEnv *env, const hidl_vec<uint64_t>& vec) {
+    auto jArr = make_javaref(env, env->NewLongArray(vec.size()));
+    auto jArrElements = env->GetLongArrayElements(jArr.get(), nullptr);
+    for (size_t i = 0; i < vec.size(); i++) {
+        jArrElements[i] = vec[i];
+    }
+    env->ReleaseLongArrayElements(jArr.get(), jArrElements, 0);
+    return jArr;
+}
+
+template <typename T>
+static JavaRef<jobjectArray> ArrayFromHal(JNIEnv *env, const hidl_vec<T>& vec,
+        jclass jElementClass, std::function<JavaRef<jobject>(JNIEnv*, const T&)> converter) {
+    auto jArr = make_javaref(env, env->NewObjectArray(vec.size(), jElementClass, nullptr));
+    for (size_t i = 0; i < vec.size(); i++) {
+        auto jElement = converter(env, vec[i]);
+        env->SetObjectArrayElement(jArr.get(), i, jElement.get());
+    }
+    return jArr;
+}
+
+template <typename T>
+static JavaRef<jobjectArray> ArrayFromHal(JNIEnv *env, const hidl_vec<T>& vec,
+        jclass jElementClass, JavaRef<jobject>(*converter)(JNIEnv*, const T&)) {
+    return ArrayFromHal(env, vec, jElementClass,
+            std::function<JavaRef<jobject>(JNIEnv*, const T&)>(converter));
+}
+
+static std::string StringFromJava(JNIEnv *env, JavaRef<jstring> &jStr) {
+    auto cstr = (jStr == nullptr) ? nullptr : env->GetStringUTFChars(jStr.get(), nullptr);
+    std::string str(cstr);
+    env->ReleaseStringUTFChars(jStr.get(), cstr);
+    return str;
+}
+
+JavaRef<jobject> VendorInfoFromHal(JNIEnv *env, const hidl_vec<VendorKeyValue> &info) {
+    ALOGV("%s(%s)", __func__, toString(info).substr(0, 100).c_str());
+
+    auto jInfo = make_javaref(env, env->NewObject(gjni.HashMap.clazz, gjni.HashMap.cstor));
+
+    for (auto&& entry : info) {
+        auto jKey = make_javastr(env, entry.key);
+        auto jValue = make_javastr(env, entry.value);
+        env->CallObjectMethod(jInfo.get(), gjni.Map.put, jKey.get(), jValue.get());
+    }
+
+    return jInfo;
+}
+
+hidl_vec<VendorKeyValue> VendorInfoToHal(JNIEnv *env, jobject jInfo) {
+    ALOGV("%s", __func__);
+
+    auto jInfoArr = make_javaref(env, static_cast<jobjectArray>(env->CallStaticObjectMethod(
+            gjni.Convert.clazz, gjni.Convert.stringMapToNative, jInfo)));
+    LOG_FATAL_IF(jInfoArr == nullptr, "Converted array is null");
+
+    auto len = env->GetArrayLength(jInfoArr.get());
+    hidl_vec<VendorKeyValue> vec;
+    vec.resize(len);
+
+    for (jsize i = 0; i < len; i++) {
+        auto entry = make_javaref(env, static_cast<jobjectArray>(
+                env->GetObjectArrayElement(jInfoArr.get(), i)));
+        auto jKey = make_javaref(env, static_cast<jstring>(
+                env->GetObjectArrayElement(entry.get(), 0)));
+        auto jValue = make_javaref(env, static_cast<jstring>(
+                env->GetObjectArrayElement(entry.get(), 1)));
+        auto key = StringFromJava(env, jKey);
+        auto value = StringFromJava(env, jValue);
+        vec[i] = { key, value };
+    }
+
+    return vec;
+}
+
+static Rds RdsForRegion(bool rds, Region region) {
+    if (!rds) return Rds::NONE;
+
+    switch(region) {
+        case Region::ITU_1:
+        case Region::OIRT:
+        case Region::JAPAN:
+        case Region::KOREA:
+            return Rds::WORLD;
+        case Region::ITU_2:
+            return Rds::US;
+        default:
+            ALOGE("Unexpected region: %d", region);
+            return Rds::NONE;
+    }
+}
+
+static Deemphasis DeemphasisForRegion(Region region) {
+    switch(region) {
+        case Region::KOREA:
+        case Region::ITU_2:
+            return Deemphasis::D75;
+        case Region::ITU_1:
+        case Region::OIRT:
+        case Region::JAPAN:
+            return Deemphasis::D50;
+        default:
+            ALOGE("Unexpected region: %d", region);
+            return Deemphasis::D50;
+    }
+}
+
+static JavaRef<jobject> ModulePropertiesFromHal(JNIEnv *env, const V1_0::Properties &prop10,
+        const V1_1::Properties *prop11, jint moduleId, const std::string& serviceName) {
+    ALOGV("%s", __func__);
+    using namespace std::placeholders;
+
+    auto jServiceName = make_javastr(env, serviceName);
+    auto jImplementor = make_javastr(env, prop10.implementor);
+    auto jProduct = make_javastr(env, prop10.product);
+    auto jVersion = make_javastr(env, prop10.version);
+    auto jSerial = make_javastr(env, prop10.serial);
+    bool isBgScanSupported = prop11 ? prop11->supportsBackgroundScanning : false;
+    auto jVendorInfo = prop11 ? VendorInfoFromHal(env, prop11->vendorInfo) : nullptr;
+
+    auto regionalBands = regions::mapRegions(prop10.bands);
+    auto jBands = ArrayFromHal<RegionalBandConfig>(env, regionalBands,
+            gjni.BandDescriptor.clazz, BandDescriptorFromHal);
+    auto jSupportedProgramTypes =
+            prop11 ? ArrayFromHal(env, prop11->supportedProgramTypes) : nullptr;
+    auto jSupportedIdentifierTypes =
+            prop11 ? ArrayFromHal(env, prop11->supportedIdentifierTypes) : nullptr;
+
+    return make_javaref(env, env->NewObject(gjni.ModuleProperties.clazz,
+            gjni.ModuleProperties.cstor, moduleId, jServiceName.get(), prop10.classId,
+            jImplementor.get(), jProduct.get(), jVersion.get(), jSerial.get(), prop10.numTuners,
+            prop10.numAudioSources, prop10.supportsCapture, jBands.get(), isBgScanSupported,
+            jSupportedProgramTypes.get(), jSupportedIdentifierTypes.get(), jVendorInfo.get()));
+}
+
+JavaRef<jobject> ModulePropertiesFromHal(JNIEnv *env, const V1_0::Properties &properties,
+        jint moduleId, const std::string& serviceName) {
+    return ModulePropertiesFromHal(env, properties, nullptr, moduleId, serviceName);
+}
+
+JavaRef<jobject> ModulePropertiesFromHal(JNIEnv *env, const V1_1::Properties &properties,
+        jint moduleId, const std::string& serviceName) {
+    return ModulePropertiesFromHal(env, properties.base, &properties, moduleId, serviceName);
+}
+
+static JavaRef<jobject> BandDescriptorFromHal(JNIEnv *env, const RegionalBandConfig &config) {
+    return BandDescriptorFromHal(env, config.bandConfig, config.region);
+}
+
+static JavaRef<jobject> BandDescriptorFromHal(JNIEnv *env, const V1_0::BandConfig &config, Region region) {
+    ALOGV("%s", __func__);
+
+    jint spacing = config.spacings.size() > 0 ? config.spacings[0] : 0;
+    ALOGW_IF(config.spacings.size() > 1, "Multiple spacings - not a regional config");
+    ALOGW_IF(config.spacings.size() == 0, "No channel spacing specified");
+
+    if (utils::isFm(config.type)) {
+        auto& fm = config.ext.fm;
+        return make_javaref(env, env->NewObject(
+                gjni.FmBandDescriptor.clazz, gjni.FmBandDescriptor.cstor,
+                region, config.type, config.lowerLimit, config.upperLimit, spacing,
+                fm.stereo, fm.rds != Rds::NONE, fm.ta, fm.af, fm.ea));
+    } else if (utils::isAm(config.type)) {
+        auto& am = config.ext.am;
+        return make_javaref(env, env->NewObject(
+                gjni.AmBandDescriptor.clazz, gjni.AmBandDescriptor.cstor,
+                region, config.type, config.lowerLimit, config.upperLimit, spacing, am.stereo));
+    } else {
+        ALOGE("Unsupported band type: %d", config.type);
+        return nullptr;
+    }
+}
+
+JavaRef<jobject> BandConfigFromHal(JNIEnv *env, const V1_0::BandConfig &config, Region region) {
+    ALOGV("%s", __func__);
+
+    auto descriptor = BandDescriptorFromHal(env, config, region);
+    if (descriptor == nullptr) return nullptr;
+
+    if (utils::isFm(config.type)) {
+        return make_javaref(env, env->NewObject(
+                gjni.FmBandConfig.clazz, gjni.FmBandConfig.cstor, descriptor.get()));
+    } else if (utils::isAm(config.type)) {
+        return make_javaref(env, env->NewObject(
+                gjni.AmBandConfig.clazz, gjni.AmBandConfig.cstor, descriptor.get()));
+    } else {
+        ALOGE("Unsupported band type: %d", config.type);
+        return nullptr;
+    }
+}
+
+V1_0::BandConfig BandConfigToHal(JNIEnv *env, jobject jConfig, Region &region) {
+    ALOGV("%s", __func__);
+    auto jDescriptor = env->GetObjectField(jConfig, gjni.BandConfig.descriptor);
+    if (jDescriptor == nullptr) {
+        ALOGE("Descriptor is missing");
+        return {};
+    }
+
+    region = static_cast<Region>(env->GetIntField(jDescriptor, gjni.BandDescriptor.region));
+
+    V1_0::BandConfig config = {};
+    config.type = static_cast<Band>(env->GetIntField(jDescriptor, gjni.BandDescriptor.type));
+    config.antennaConnected = false;  // just don't set it
+    config.lowerLimit = env->GetIntField(jDescriptor, gjni.BandDescriptor.lowerLimit);
+    config.upperLimit = env->GetIntField(jDescriptor, gjni.BandDescriptor.upperLimit);
+    config.spacings = hidl_vec<uint32_t>({
+        static_cast<uint32_t>(env->GetIntField(jDescriptor, gjni.BandDescriptor.spacing))
+    });
+
+    if (env->IsInstanceOf(jConfig, gjni.FmBandConfig.clazz)) {
+        auto& fm = config.ext.fm;
+        fm.deemphasis = DeemphasisForRegion(region);
+        fm.stereo = env->GetBooleanField(jConfig, gjni.FmBandConfig.stereo);
+        fm.rds = RdsForRegion(env->GetBooleanField(jConfig, gjni.FmBandConfig.rds), region);
+        fm.ta = env->GetBooleanField(jConfig, gjni.FmBandConfig.ta);
+        fm.af = env->GetBooleanField(jConfig, gjni.FmBandConfig.af);
+        fm.ea = env->GetBooleanField(jConfig, gjni.FmBandConfig.ea);
+    } else if (env->IsInstanceOf(jConfig, gjni.AmBandConfig.clazz)) {
+        auto& am = config.ext.am;
+        am.stereo = env->GetBooleanField(jConfig, gjni.AmBandConfig.stereo);
+    } else {
+        ALOGE("Unexpected band config type");
+        return {};
+    }
+
+    return config;
+}
+
+Direction DirectionToHal(bool directionDown) {
+    return directionDown ? Direction::DOWN : Direction::UP;
+}
+
+JavaRef<jobject> MetadataFromHal(JNIEnv *env, const hidl_vec<V1_0::MetaData> &metadata) {
+    ALOGV("%s", __func__);
+    if (metadata.size() == 0) return nullptr;
+
+    auto jMetadata = make_javaref(env, env->NewObject(
+            gjni.RadioMetadata.clazz, gjni.RadioMetadata.cstor));
+
+    for (auto& item : metadata) {
+        jint key = static_cast<jint>(item.key);
+        jint status = 0;
+        switch (item.type) {
+            case MetadataType::INT:
+                ALOGV("metadata INT %d", key);
+                status = env->CallIntMethod(jMetadata.get(), gjni.RadioMetadata.putIntFromNative,
+                        key, item.intValue);
+                break;
+            case MetadataType::TEXT: {
+                ALOGV("metadata TEXT %d", key);
+                auto value = make_javastr(env, item.stringValue);
+                status = env->CallIntMethod(jMetadata.get(), gjni.RadioMetadata.putStringFromNative,
+                        key, value.get());
+                break;
+            }
+            case MetadataType::RAW: {
+                ALOGV("metadata RAW %d", key);
+                auto len = item.rawValue.size();
+                if (len == 0) break;
+                auto value = make_javaref(env, env->NewByteArray(len));
+                if (value == nullptr) {
+                    ALOGE("Failed to allocate byte array of len %zu", len);
+                    break;
+                }
+                env->SetByteArrayRegion(value.get(), 0, len,
+                        reinterpret_cast<const jbyte*>(item.rawValue.data()));
+                status = env->CallIntMethod(jMetadata.get(), gjni.RadioMetadata.putBitmapFromNative,
+                        key, value.get());
+                break;
+            }
+            case MetadataType::CLOCK:
+                ALOGV("metadata CLOCK %d", key);
+                status = env->CallIntMethod(jMetadata.get(), gjni.RadioMetadata.putClockFromNative,
+                        key, item.clockValue.utcSecondsSinceEpoch,
+                        item.clockValue.timezoneOffsetInMinutes);
+                break;
+            default:
+                ALOGW("invalid metadata type %d", item.type);
+        }
+        ALOGE_IF(status != 0, "Failed inserting metadata %d (of type %d)", key, item.type);
+    }
+
+    return jMetadata;
+}
+
+static JavaRef<jobject> ProgramIdentifierFromHal(JNIEnv *env, const ProgramIdentifier &id) {
+    ALOGV("%s", __func__);
+    return make_javaref(env, env->NewObject(gjni.ProgramSelector.Identifier.clazz,
+            gjni.ProgramSelector.Identifier.cstor, id.type, id.value));
+}
+
+static JavaRef<jobject> ProgramSelectorFromHal(JNIEnv *env, const ProgramSelector &selector) {
+    ALOGV("%s", __func__);
+    auto jPrimary = ProgramIdentifierFromHal(env, selector.primaryId);
+    auto jSecondary = ArrayFromHal(env, selector.secondaryIds,
+            gjni.ProgramSelector.Identifier.clazz, ProgramIdentifierFromHal);
+    auto jVendor = ArrayFromHal(env, selector.vendorIds);
+
+    return make_javaref(env, env->NewObject(gjni.ProgramSelector.clazz, gjni.ProgramSelector.cstor,
+            selector.programType, jPrimary.get(), jSecondary.get(), jVendor.get()));
+}
+
+static ProgramIdentifier ProgramIdentifierToHal(JNIEnv *env, jobject jId) {
+    ALOGV("%s", __func__);
+
+    ProgramIdentifier id = {};
+    id.type = env->GetIntField(jId, gjni.ProgramSelector.Identifier.type);
+    id.value = env->GetLongField(jId, gjni.ProgramSelector.Identifier.value);
+    return id;
+}
+
+ProgramSelector ProgramSelectorToHal(JNIEnv *env, jobject jSelector) {
+    ALOGV("%s", __func__);
+
+    ProgramSelector selector = {};
+
+    selector.programType = env->GetIntField(jSelector, gjni.ProgramSelector.programType);
+
+    auto jPrimary = env->GetObjectField(jSelector, gjni.ProgramSelector.primaryId);
+    auto jSecondary = reinterpret_cast<jobjectArray>(
+            env->GetObjectField(jSelector, gjni.ProgramSelector.secondaryIds));
+    auto jVendor = reinterpret_cast<jlongArray>(
+            env->GetObjectField(jSelector, gjni.ProgramSelector.vendorIds));
+
+    if (jPrimary == nullptr || jSecondary == nullptr || jVendor == nullptr) {
+        ALOGE("ProgramSelector object is incomplete");
+        return {};
+    }
+
+    selector.primaryId = ProgramIdentifierToHal(env, jPrimary);
+    auto count = env->GetArrayLength(jSecondary);
+    selector.secondaryIds.resize(count);
+    for (jsize i = 0; i < count; i++) {
+        auto jId = env->GetObjectArrayElement(jSecondary, i);
+        selector.secondaryIds[i] = ProgramIdentifierToHal(env, jId);
+    }
+
+    count = env->GetArrayLength(jVendor);
+    selector.vendorIds.resize(count);
+    auto jVendorElements = env->GetLongArrayElements(jVendor, nullptr);
+    for (jint i = 0; i < count; i++) {
+        selector.vendorIds[i] = jVendorElements[i];
+    }
+    env->ReleaseLongArrayElements(jVendor, jVendorElements, 0);
+
+    return selector;
+}
+
+static JavaRef<jobject> ProgramInfoFromHal(JNIEnv *env, const V1_0::ProgramInfo &info10,
+        const V1_1::ProgramInfo *info11, const ProgramSelector &selector) {
+    ALOGV("%s", __func__);
+
+    auto jMetadata = MetadataFromHal(env, info10.metadata);
+    auto jVendorInfo = info11 ? VendorInfoFromHal(env, info11->vendorInfo) : nullptr;
+    auto jSelector = ProgramSelectorFromHal(env, selector);
+
+    return make_javaref(env, env->NewObject(gjni.ProgramInfo.clazz, gjni.ProgramInfo.cstor,
+            jSelector.get(), info10.tuned, info10.stereo, info10.digital, info10.signalStrength,
+            jMetadata.get(), info11 ? info11->flags : 0, jVendorInfo.get()));
+}
+
+JavaRef<jobject> ProgramInfoFromHal(JNIEnv *env, const V1_0::ProgramInfo &info, V1_0::Band band) {
+    auto selector = utils::make_selector(band, info.channel, info.subChannel);
+    return ProgramInfoFromHal(env, info, nullptr, selector);
+}
+
+JavaRef<jobject> ProgramInfoFromHal(JNIEnv *env, const V1_1::ProgramInfo &info) {
+    return ProgramInfoFromHal(env, info.base, &info, info.selector);
+}
+
+} // namespace convert
+} // namespace BroadcastRadio
+} // namespace server
+
+void register_android_server_broadcastradio_convert(JNIEnv *env) {
+    using namespace server::BroadcastRadio::convert;
+
+    auto bandConfigClass = FindClassOrDie(env, "android/hardware/radio/RadioManager$BandConfig");
+    gjni.BandConfig.descriptor = GetFieldIDOrDie(env, bandConfigClass,
+            "mDescriptor", "Landroid/hardware/radio/RadioManager$BandDescriptor;");
+
+    auto fmBandConfigClass = FindClassOrDie(env,
+            "android/hardware/radio/RadioManager$FmBandConfig");
+    gjni.FmBandConfig.clazz = MakeGlobalRefOrDie(env, fmBandConfigClass);
+    gjni.FmBandConfig.cstor = GetMethodIDOrDie(env, fmBandConfigClass,
+            "<init>", "(Landroid/hardware/radio/RadioManager$FmBandDescriptor;)V");
+    gjni.FmBandConfig.stereo = GetFieldIDOrDie(env, fmBandConfigClass, "mStereo", "Z");
+    gjni.FmBandConfig.rds = GetFieldIDOrDie(env, fmBandConfigClass, "mRds", "Z");
+    gjni.FmBandConfig.ta = GetFieldIDOrDie(env, fmBandConfigClass, "mTa", "Z");
+    gjni.FmBandConfig.af = GetFieldIDOrDie(env, fmBandConfigClass, "mAf", "Z");
+    gjni.FmBandConfig.ea = GetFieldIDOrDie(env, fmBandConfigClass, "mEa", "Z");
+
+    auto amBandConfigClass = FindClassOrDie(env,
+            "android/hardware/radio/RadioManager$AmBandConfig");
+    gjni.AmBandConfig.clazz = MakeGlobalRefOrDie(env, amBandConfigClass);
+    gjni.AmBandConfig.cstor = GetMethodIDOrDie(env, amBandConfigClass,
+            "<init>", "(Landroid/hardware/radio/RadioManager$AmBandDescriptor;)V");
+    gjni.AmBandConfig.stereo = GetFieldIDOrDie(env, amBandConfigClass, "mStereo", "Z");
+
+    auto bandDescriptorClass = FindClassOrDie(env,
+            "android/hardware/radio/RadioManager$BandDescriptor");
+    gjni.BandDescriptor.clazz = MakeGlobalRefOrDie(env, bandDescriptorClass);
+    gjni.BandDescriptor.region = GetFieldIDOrDie(env, bandDescriptorClass, "mRegion", "I");
+    gjni.BandDescriptor.type = GetFieldIDOrDie(env, bandDescriptorClass, "mType", "I");
+    gjni.BandDescriptor.lowerLimit = GetFieldIDOrDie(env, bandDescriptorClass, "mLowerLimit", "I");
+    gjni.BandDescriptor.upperLimit = GetFieldIDOrDie(env, bandDescriptorClass, "mUpperLimit", "I");
+    gjni.BandDescriptor.spacing = GetFieldIDOrDie(env, bandDescriptorClass, "mSpacing", "I");
+
+    auto fmBandDescriptorClass = FindClassOrDie(env,
+            "android/hardware/radio/RadioManager$FmBandDescriptor");
+    gjni.FmBandDescriptor.clazz = MakeGlobalRefOrDie(env, fmBandDescriptorClass);
+    gjni.FmBandDescriptor.cstor = GetMethodIDOrDie(env, fmBandDescriptorClass,
+            "<init>", "(IIIIIZZZZZ)V");
+
+    auto amBandDescriptorClass = FindClassOrDie(env,
+            "android/hardware/radio/RadioManager$AmBandDescriptor");
+    gjni.AmBandDescriptor.clazz = MakeGlobalRefOrDie(env, amBandDescriptorClass);
+    gjni.AmBandDescriptor.cstor = GetMethodIDOrDie(env, amBandDescriptorClass,
+            "<init>", "(IIIIIZ)V");
+
+    auto convertClass = FindClassOrDie(env, "com/android/server/broadcastradio/Convert");
+    gjni.Convert.clazz = MakeGlobalRefOrDie(env, convertClass);
+    gjni.Convert.stringMapToNative = GetStaticMethodIDOrDie(env, convertClass, "stringMapToNative",
+            "(Ljava/util/Map;)[[Ljava/lang/String;");
+
+    auto hashMapClass = FindClassOrDie(env, "java/util/HashMap");
+    gjni.HashMap.clazz = MakeGlobalRefOrDie(env, hashMapClass);
+    gjni.HashMap.cstor = GetMethodIDOrDie(env, hashMapClass, "<init>", "()V");
+
+    auto mapClass = FindClassOrDie(env, "java/util/Map");
+    gjni.Map.put = GetMethodIDOrDie(env, mapClass, "put",
+            "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
+
+    auto modulePropertiesClass = FindClassOrDie(env,
+            "android/hardware/radio/RadioManager$ModuleProperties");
+    gjni.ModuleProperties.clazz = MakeGlobalRefOrDie(env, modulePropertiesClass);
+    gjni.ModuleProperties.cstor = GetMethodIDOrDie(env, modulePropertiesClass, "<init>",
+            "(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;"
+            "Ljava/lang/String;IIZ[Landroid/hardware/radio/RadioManager$BandDescriptor;Z"
+            "[I[ILjava/util/Map;)V");
+
+    auto programInfoClass = FindClassOrDie(env, "android/hardware/radio/RadioManager$ProgramInfo");
+    gjni.ProgramInfo.clazz = MakeGlobalRefOrDie(env, programInfoClass);
+    gjni.ProgramInfo.cstor = GetMethodIDOrDie(env, programInfoClass, "<init>",
+            "(Landroid/hardware/radio/ProgramSelector;ZZZILandroid/hardware/radio/RadioMetadata;I"
+            "Ljava/util/Map;)V");
+
+    auto programSelectorClass = FindClassOrDie(env, "android/hardware/radio/ProgramSelector");
+    gjni.ProgramSelector.clazz = MakeGlobalRefOrDie(env, programSelectorClass);
+    gjni.ProgramSelector.cstor = GetMethodIDOrDie(env, programSelectorClass, "<init>",
+            "(ILandroid/hardware/radio/ProgramSelector$Identifier;"
+            "[Landroid/hardware/radio/ProgramSelector$Identifier;[J)V");
+    gjni.ProgramSelector.programType = GetFieldIDOrDie(env, programSelectorClass,
+            "mProgramType", "I");
+    gjni.ProgramSelector.primaryId = GetFieldIDOrDie(env, programSelectorClass,
+            "mPrimaryId", "Landroid/hardware/radio/ProgramSelector$Identifier;");
+    gjni.ProgramSelector.secondaryIds = GetFieldIDOrDie(env, programSelectorClass,
+            "mSecondaryIds", "[Landroid/hardware/radio/ProgramSelector$Identifier;");
+    gjni.ProgramSelector.vendorIds = GetFieldIDOrDie(env, programSelectorClass,
+            "mVendorIds", "[J");
+
+    auto progSelIdClass = FindClassOrDie(env, "android/hardware/radio/ProgramSelector$Identifier");
+    gjni.ProgramSelector.Identifier.clazz = MakeGlobalRefOrDie(env, progSelIdClass);
+    gjni.ProgramSelector.Identifier.cstor = GetMethodIDOrDie(env, progSelIdClass,
+            "<init>", "(IJ)V");
+    gjni.ProgramSelector.Identifier.type = GetFieldIDOrDie(env, progSelIdClass,
+            "mType", "I");
+    gjni.ProgramSelector.Identifier.value = GetFieldIDOrDie(env, progSelIdClass,
+            "mValue", "J");
+
+    auto radioMetadataClass = FindClassOrDie(env, "android/hardware/radio/RadioMetadata");
+    gjni.RadioMetadata.clazz = MakeGlobalRefOrDie(env, radioMetadataClass);
+    gjni.RadioMetadata.cstor = GetMethodIDOrDie(env, radioMetadataClass, "<init>", "()V");
+    gjni.RadioMetadata.putIntFromNative = GetMethodIDOrDie(env, radioMetadataClass,
+            "putIntFromNative", "(II)I");
+    gjni.RadioMetadata.putStringFromNative = GetMethodIDOrDie(env, radioMetadataClass,
+            "putStringFromNative", "(ILjava/lang/String;)I");
+    gjni.RadioMetadata.putBitmapFromNative = GetMethodIDOrDie(env, radioMetadataClass,
+            "putBitmapFromNative", "(I[B)I");
+    gjni.RadioMetadata.putClockFromNative = GetMethodIDOrDie(env, radioMetadataClass,
+            "putClockFromNative", "(IJI)I");
+
+    auto runtimeExcClass = FindClassOrDie(env, "java/lang/RuntimeException");
+    gjni.RuntimeException.clazz = MakeGlobalRefOrDie(env, runtimeExcClass);
+    gjni.RuntimeException.cstor = GetMethodIDOrDie(env, runtimeExcClass, "<init>",
+            "(Ljava/lang/String;)V");
+
+    auto parcelableExcClass = FindClassOrDie(env, "android/os/ParcelableException");
+    gjni.ParcelableException.clazz = MakeGlobalRefOrDie(env, parcelableExcClass);
+    gjni.ParcelableException.cstor = GetMethodIDOrDie(env, parcelableExcClass, "<init>",
+            "(Ljava/lang/Throwable;)V");
+}
+
+} // namespace android
diff --git a/services/core/jni/BroadcastRadio/convert.h b/services/core/jni/BroadcastRadio/convert.h
new file mode 100644
index 0000000..1fc75f0
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/convert.h
@@ -0,0 +1,83 @@
+/**
+ * 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.
+ */
+
+#ifndef _ANDROID_SERVER_BROADCASTRADIO_CONVERT_H
+#define _ANDROID_SERVER_BROADCASTRADIO_CONVERT_H
+
+#include "types.h"
+
+#include "JavaRef.h"
+
+#include <android/hardware/broadcastradio/1.1/types.h>
+#include <jni.h>
+
+namespace android {
+
+void register_android_server_broadcastradio_convert(JNIEnv *env);
+
+namespace server {
+namespace BroadcastRadio {
+namespace convert {
+
+namespace V1_0 = hardware::broadcastradio::V1_0;
+namespace V1_1 = hardware::broadcastradio::V1_1;
+
+JavaRef<jobject> VendorInfoFromHal(JNIEnv *env, const hardware::hidl_vec<V1_1::VendorKeyValue> &info);
+hardware::hidl_vec<V1_1::VendorKeyValue> VendorInfoToHal(JNIEnv *env, jobject jInfo);
+
+JavaRef<jobject> ModulePropertiesFromHal(JNIEnv *env, const V1_0::Properties &properties,
+        jint moduleId, const std::string& serviceName);
+JavaRef<jobject> ModulePropertiesFromHal(JNIEnv *env, const V1_1::Properties &properties,
+        jint moduleId, const std::string& serviceName);
+
+JavaRef<jobject> BandConfigFromHal(JNIEnv *env, const V1_0::BandConfig &config, Region region);
+V1_0::BandConfig BandConfigToHal(JNIEnv *env, jobject jConfig, Region &region);
+
+V1_0::Direction DirectionToHal(bool directionDown);
+
+JavaRef<jobject> MetadataFromHal(JNIEnv *env, const hardware::hidl_vec<V1_0::MetaData> &metadata);
+JavaRef<jobject> ProgramInfoFromHal(JNIEnv *env, const V1_0::ProgramInfo &info, V1_0::Band band);
+JavaRef<jobject> ProgramInfoFromHal(JNIEnv *env, const V1_1::ProgramInfo &info);
+
+V1_1::ProgramSelector ProgramSelectorToHal(JNIEnv *env, jobject jSelector);
+
+void ThrowParcelableRuntimeException(JNIEnv *env, const std::string& msg);
+
+// These three are only for internal use by template functions below.
+bool __ThrowIfFailedHidl(JNIEnv *env,
+        const hardware::details::return_status &hidlResult);
+bool __ThrowIfFailed(JNIEnv *env, const V1_0::Result halResult);
+bool __ThrowIfFailed(JNIEnv *env, const V1_1::ProgramListResult halResult);
+
+template <typename T>
+bool ThrowIfFailed(JNIEnv *env, const hardware::Return<void> &hidlResult, const T halResult) {
+    return __ThrowIfFailedHidl(env, hidlResult) || __ThrowIfFailed(env, halResult);
+}
+
+template <typename T>
+bool ThrowIfFailed(JNIEnv *env, const hardware::Return<T> &hidlResult) {
+    return __ThrowIfFailedHidl(env, hidlResult) || __ThrowIfFailed(env, static_cast<T>(hidlResult));
+}
+
+template <>
+bool ThrowIfFailed(JNIEnv *env, const hardware::Return<void> &hidlResult);
+
+} // namespace convert
+} // namespace BroadcastRadio
+} // namespace server
+} // namespace android
+
+#endif // _ANDROID_SERVER_BROADCASTRADIO_CONVERT_H
diff --git a/services/core/jni/BroadcastRadio/regions.cpp b/services/core/jni/BroadcastRadio/regions.cpp
new file mode 100644
index 0000000..b856419
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/regions.cpp
@@ -0,0 +1,196 @@
+/**
+ * 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 "BroadcastRadioService.regions.jni"
+#define LOG_NDEBUG 0
+
+#include "regions.h"
+
+#include <broadcastradio-utils/Utils.h>
+#include <utils/Log.h>
+
+namespace android {
+namespace server {
+namespace BroadcastRadio {
+namespace regions {
+
+namespace utils = hardware::broadcastradio::V1_1::utils;
+
+using hardware::hidl_vec;
+
+using V1_0::Band;
+using V1_0::BandConfig;
+using V1_0::Deemphasis;
+using V1_0::Rds;
+
+class RegionalBandDefinition {
+public:
+    std::vector<Region> mRegions;
+    std::vector<Band> mTypes;
+    uint32_t mLowerLimit;
+    uint32_t mUpperLimit;
+    uint32_t mSpacing;
+
+    Deemphasis mFmDeemphasis = {};
+    Rds mFmRds = Rds::NONE;
+
+    bool fitsInsideBand(const BandConfig &bandConfig) const;
+    std::vector<RegionalBandConfig> withConfig(BandConfig bandConfig) const;
+};
+
+static const RegionalBandDefinition kKnownRegionConfigs[] = {
+    {
+        { Region::ITU_1 },
+        { Band::FM },
+        87500,
+        108000,
+        100,
+        Deemphasis::D50,
+        Rds::WORLD,
+    },
+    {
+        { Region::ITU_2 },
+        { Band::FM, Band::FM_HD },
+        87700,
+        107900,
+        200,
+        Deemphasis::D75,
+        Rds::US,
+    },
+    {
+        { Region::OIRT },
+        { Band::FM },
+        65800,
+        74000,
+        10,
+        Deemphasis::D50,
+        Rds::WORLD,
+    },
+    {
+        { Region::JAPAN },
+        { Band::FM },
+        76000,
+        90000,
+        100,
+        Deemphasis::D50,
+        Rds::WORLD,
+    },
+    {
+        { Region::KOREA },
+        { Band::FM },
+        87500,
+        108000,
+        100,
+        Deemphasis::D75,
+        Rds::WORLD,
+    },
+    {  // AM LW
+        { Region::ITU_1, Region::OIRT, Region::JAPAN, Region::KOREA },
+        { Band::AM },
+        153,
+        282,
+        9,
+    },
+    {  // AM MW
+        { Region::ITU_1, Region::OIRT, Region::JAPAN, Region::KOREA },
+        { Band::AM },
+        531,
+        1620,
+        9,
+    },
+    {  // AM SW
+        { Region::ITU_1, Region::OIRT, Region::JAPAN, Region::KOREA },
+        { Band::AM },
+        2300,
+        26100,
+        5,
+    },
+    {  // AM LW ITU2
+        { Region::ITU_2 },
+        { Band::AM, Band::AM_HD },
+        153,
+        279,
+        9,
+    },
+    {  // AM MW ITU2
+        { Region::ITU_2 },
+        { Band::AM, Band::AM_HD },
+        530,
+        1700,
+        10,
+    },
+    {  // AM SW ITU2
+        { Region::ITU_2 },
+        { Band::AM, Band::AM_HD },
+        2300,
+        26100,
+        5,
+    },
+};
+
+bool RegionalBandDefinition::fitsInsideBand(const BandConfig &bandConfig) const {
+    if (std::find(mTypes.begin(), mTypes.end(), bandConfig.type) == mTypes.end()) return false;
+    if (mLowerLimit < bandConfig.lowerLimit) return false;
+    if (mUpperLimit > bandConfig.upperLimit) return false;
+    auto&& spacings = bandConfig.spacings;
+    if (std::find(spacings.begin(), spacings.end(), mSpacing) == spacings.end()) return false;
+    if (utils::isFm(bandConfig.type)) {
+        if (0 == (mFmDeemphasis & bandConfig.ext.fm.deemphasis)) return false;
+    }
+
+    return true;
+}
+
+std::vector<RegionalBandConfig> RegionalBandDefinition::withConfig(BandConfig config) const {
+    config.lowerLimit = mLowerLimit;
+    config.upperLimit = mUpperLimit;
+    config.spacings = hidl_vec<uint32_t>({ mSpacing });
+    if (utils::isFm(config.type)) {
+        auto&& fm = config.ext.fm;
+        fm.deemphasis = mFmDeemphasis;
+        fm.rds = static_cast<Rds>(mFmRds & fm.rds);
+    }
+
+    std::vector<RegionalBandConfig> configs;
+    for (auto region : mRegions) {
+        configs.push_back({region, config});
+    }
+
+    return configs;
+}
+
+std::vector<RegionalBandConfig> mapRegions(const hidl_vec<BandConfig>& bands) {
+    ALOGV("%s", __func__);
+
+    std::vector<RegionalBandConfig> out;
+
+    for (auto&& regionalBand : kKnownRegionConfigs) {
+        for (auto&& tunerBand : bands) {
+            if (regionalBand.fitsInsideBand(tunerBand)) {
+                auto mapped = regionalBand.withConfig(tunerBand);
+                out.insert(out.end(), mapped.begin(), mapped.end());
+            }
+        }
+    }
+
+    ALOGI("Mapped %zu tuner bands to %zu regional bands", bands.size(), out.size());
+    return out;
+}
+
+} // namespace regions
+} // namespace BroadcastRadio
+} // namespace server
+} // namespace android
diff --git a/services/core/jni/BroadcastRadio/regions.h b/services/core/jni/BroadcastRadio/regions.h
new file mode 100644
index 0000000..45a32ea
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/regions.h
@@ -0,0 +1,44 @@
+/**
+ * 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.
+ */
+
+#ifndef _ANDROID_SERVER_BROADCASTRADIO_REGIONS_H
+#define _ANDROID_SERVER_BROADCASTRADIO_REGIONS_H
+
+#include "types.h"
+
+#include <android/hardware/broadcastradio/1.1/types.h>
+
+namespace android {
+namespace server {
+namespace BroadcastRadio {
+namespace regions {
+
+namespace V1_0 = hardware::broadcastradio::V1_0;
+
+struct RegionalBandConfig {
+    Region region;
+    V1_0::BandConfig bandConfig;
+};
+
+std::vector<RegionalBandConfig>
+mapRegions(const hardware::hidl_vec<V1_0::BandConfig>& bands);
+
+} // namespace regions
+} // namespace BroadcastRadio
+} // namespace server
+} // namespace android
+
+#endif // _ANDROID_SERVER_BROADCASTRADIO_REGIONS_H
diff --git a/services/core/jni/BroadcastRadio/types.h b/services/core/jni/BroadcastRadio/types.h
new file mode 100644
index 0000000..f726af3
--- /dev/null
+++ b/services/core/jni/BroadcastRadio/types.h
@@ -0,0 +1,60 @@
+/**
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _ANDROID_SERVER_BROADCASTRADIO_TYPES_H
+#define _ANDROID_SERVER_BROADCASTRADIO_TYPES_H
+
+#include <jni.h>
+
+namespace android {
+namespace server {
+namespace BroadcastRadio {
+
+/* Most of these enums are dereived from Java code, based at
+ * frameworks/base/core/java/android/hardware/radio/RadioManager.java.
+ */
+
+enum class HalRevision : jint {
+    V1_0,
+    V1_1,
+};
+
+// Keep in sync with STATUS_* constants from RadioManager.java.
+enum class Status : jint {
+    OK = 0,
+    ERROR = -0x80000000ll,  // Integer.MIN_VALUE
+    PERMISSION_DENIED = -1,  // -EPERM
+    NO_INIT = -19,  // -ENODEV
+    BAD_VALUE = -22,  // -EINVAL
+    DEAD_OBJECT = -32,  // -EPIPE
+    INVALID_OPERATION = -38,  // -ENOSYS
+    TIMED_OUT = -110,  // -ETIMEDOUT
+};
+
+// Keep in sync with REGION_* constants from RadioManager.java.
+enum class Region : jint {
+    ITU_1 = 0,
+    ITU_2 = 1,
+    OIRT = 2,
+    JAPAN = 3,
+    KOREA = 4,
+};
+
+} // namespace BroadcastRadio
+} // namespace server
+} // namespace android
+
+#endif // _ANDROID_SERVER_RADIO_TYPES_H
diff --git a/services/core/jni/JavaRef.cpp b/services/core/jni/JavaRef.cpp
deleted file mode 100644
index ad07afa..0000000
--- a/services/core/jni/JavaRef.cpp
+++ /dev/null
@@ -1,30 +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 "JavaRef"
-//#define LOG_NDEBUG 0
-
-#include "JavaRef.h"
-
-#include <utils/Log.h>
-
-namespace android {
-
-EnvWrapper::EnvWrapper(JNIEnv *env) : mEnv(env) {
-    ALOGE_IF(env == nullptr, "Environment is a nullptr");
-}
-
-} // namespace android
diff --git a/services/core/jni/JavaRef.h b/services/core/jni/JavaRef.h
deleted file mode 100644
index 8a572e2..0000000
--- a/services/core/jni/JavaRef.h
+++ /dev/null
@@ -1,57 +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.
- */
-
-#ifndef _ANDROID_JAVA_REF_H
-#define _ANDROID_JAVA_REF_H
-
-#include <android-base/macros.h>
-#include <functional>
-#include <jni.h>
-#include <memory>
-#include <type_traits>
-
-namespace android {
-
-template <typename T>
-using JavaRef = std::unique_ptr<typename std::remove_pointer<T>::type, std::function<void(T)>>;
-
-template <typename T>
-JavaRef<T> make_javaref(JNIEnv *env, T ref) {
-    return JavaRef<T>(ref, [env](T ref) {
-        if (env && ref) {
-            env->DeleteLocalRef(ref);
-        }
-    });
-}
-
-class EnvWrapper {
-public:
-    EnvWrapper(JNIEnv *env);
-
-    template <typename T>
-    JavaRef<T> operator() (T ref) const {
-        return make_javaref(mEnv, ref);
-    }
-
-private:
-    JNIEnv *mEnv;
-
-    DISALLOW_COPY_AND_ASSIGN(EnvWrapper);
-};
-
-} // namespace android
-
-#endif // _ANDROID_JAVA_REF_H
diff --git a/services/core/jni/NativeCallbackThread.cpp b/services/core/jni/NativeCallbackThread.cpp
deleted file mode 100644
index 7d668e3..0000000
--- a/services/core/jni/NativeCallbackThread.cpp
+++ /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.
- */
-
-#define LOG_TAG "NativeCallbackThread"
-//#define LOG_NDEBUG 0
-
-#include "NativeCallbackThread.h"
-
-#include <utils/Log.h>
-
-namespace android {
-
-NativeCallbackThread::NativeCallbackThread(JavaVM *vm) : mExitting(false), mvm(vm) {
-    auto res = pthread_create(&mThread, nullptr, main, this);
-    if (res != 0) {
-        ALOGE("Couldn't start NativeCallbackThread");
-        mThread = 0;
-        return;
-    }
-    ALOGD("Started native callback thread %p", this);
-}
-
-NativeCallbackThread::~NativeCallbackThread() {
-    ALOGV("~NativeCallbackThread %p", this);
-    stop();
-}
-
-void* NativeCallbackThread::main(void *args) {
-    auto self = reinterpret_cast<NativeCallbackThread*>(args);
-    self->main();
-    return nullptr;
-}
-
-void NativeCallbackThread::main() {
-    ALOGV("NativeCallbackThread::main()");
-
-    JNIEnv *env = nullptr;
-    JavaVMAttachArgs aargs = {JNI_VERSION_1_4, "NativeCallbackThread", nullptr};
-    if (mvm->AttachCurrentThread(&env, &aargs) != JNI_OK || env == nullptr) {
-        ALOGE("Couldn't attach thread");
-        return;
-    }
-
-    while (!mExitting) {
-        ALOGV("Waiting for task...");
-        Task task;
-        {
-            AutoMutex _l(mQueueMutex);
-            auto res = mQueueCond.wait(mQueueMutex);
-            ALOGE_IF(res != 0, "Wait failed: %d", res);
-            if (mExitting || res != 0) break;
-
-            if (mQueue.empty()) continue;
-            task = mQueue.front();
-            mQueue.pop();
-        }
-
-        ALOGV("Executing task...");
-        task(env);
-        if (env->ExceptionCheck()) {
-            ALOGE("Unexpected exception:");
-            env->ExceptionDescribe();
-            env->ExceptionClear();
-        }
-    }
-
-    auto res = mvm->DetachCurrentThread();
-    ALOGE_IF(res != JNI_OK, "Couldn't detach thread");
-
-    ALOGV("Native callback thread %p finished", this);
-}
-
-void NativeCallbackThread::enqueue(const Task &task) {
-    AutoMutex _l(mQueueMutex);
-
-    if (mThread == 0 || mExitting) {
-        ALOGW("Callback thread %p is not serving calls", this);
-        return;
-    }
-
-    mQueue.push(task);
-    mQueueCond.signal();
-}
-
-void NativeCallbackThread::stop() {
-    ALOGV("stop() %p", this);
-
-    {
-        AutoMutex _l(mQueueMutex);
-
-        if (mThread == 0 || mExitting) return;
-
-        mExitting = true;
-        mQueueCond.signal();
-    }
-
-    auto ret = pthread_join(mThread, nullptr);
-    ALOGE_IF(ret != 0, "Couldn't join thread: %d", ret);
-
-    ALOGD("Stopped native callback thread %p", this);
-}
-
-} // namespace android
diff --git a/services/core/jni/NativeCallbackThread.h b/services/core/jni/NativeCallbackThread.h
deleted file mode 100644
index 4e03b11..0000000
--- a/services/core/jni/NativeCallbackThread.h
+++ /dev/null
@@ -1,56 +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.
- */
-
-#ifndef _ANDROID_NATIVE_CALLBACK_THREAD_H
-#define _ANDROID_NATIVE_CALLBACK_THREAD_H
-
-#include <android-base/macros.h>
-#include <functional>
-#include <jni.h>
-#include <pthread.h>
-#include <queue>
-#include <utils/Condition.h>
-#include <utils/Mutex.h>
-
-namespace android {
-
-class NativeCallbackThread {
-    typedef std::function<void(JNIEnv*)> Task;
-
-    pthread_t mThread;
-    Mutex mQueueMutex;
-    Condition mQueueCond;
-    std::atomic<bool> mExitting;
-
-    JavaVM *mvm;
-    std::queue<Task> mQueue;
-
-    static void* main(void *args);
-    void main();
-
-    DISALLOW_COPY_AND_ASSIGN(NativeCallbackThread);
-
-public:
-    NativeCallbackThread(JavaVM *vm);
-    virtual ~NativeCallbackThread();
-
-    void enqueue(const Task &task);
-    void stop();
-};
-
-} // namespace android
-
-#endif // _ANDROID_NATIVE_CALLBACK_THREAD_H
diff --git a/services/core/jni/com_android_server_AlarmManagerService.cpp b/services/core/jni/com_android_server_AlarmManagerService.cpp
index 3a0273d..bcb0b4f 100644
--- a/services/core/jni/com_android_server_AlarmManagerService.cpp
+++ b/services/core/jni/com_android_server_AlarmManagerService.cpp
@@ -17,7 +17,7 @@
 
 #define LOG_TAG "AlarmManagerService"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 #include <utils/Log.h>
 #include <utils/misc.h>
diff --git a/services/core/jni/com_android_server_HardwarePropertiesManagerService.cpp b/services/core/jni/com_android_server_HardwarePropertiesManagerService.cpp
index ba3be67..ed79352 100644
--- a/services/core/jni/com_android_server_HardwarePropertiesManagerService.cpp
+++ b/services/core/jni/com_android_server_HardwarePropertiesManagerService.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "HardwarePropertiesManagerService-JNI"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 
 #include <math.h>
@@ -30,6 +30,8 @@
 
 namespace android {
 
+using android::hidl::base::V1_0::IBase;
+using hardware::hidl_death_recipient;
 using hardware::hidl_vec;
 using hardware::thermal::V1_0::CoolingDevice;
 using hardware::thermal::V1_0::CpuUsage;
@@ -58,7 +60,22 @@
 
 jfloat gUndefinedTemperature;
 
-static sp<IThermal> gThermalModule;
+static void getThermalHalLocked();
+static std::mutex gThermalHalMutex;
+static sp<IThermal> gThermalHal = nullptr;
+
+// struct ThermalHalDeathRecipient;
+struct ThermalHalDeathRecipient : virtual public hidl_death_recipient {
+      // hidl_death_recipient interface
+      virtual void serviceDied(uint64_t cookie, const wp<IBase>& who) override {
+          std::lock_guard<std::mutex> lock(gThermalHalMutex);
+          ALOGE("ThermalHAL just died");
+          gThermalHal = nullptr;
+          getThermalHalLocked();
+      }
+};
+
+sp<ThermalHalDeathRecipient> gThermalHalDeathRecipient = nullptr;
 
 // ----------------------------------------------------------------------------
 
@@ -66,25 +83,50 @@
     return isnan(temperature) ? gUndefinedTemperature : temperature;
 }
 
-static void nativeInit(JNIEnv* env, jobject obj) {
-    // TODO(b/31632518)
-    if (gThermalModule == nullptr) {
-        gThermalModule = IThermal::getService();
+// The caller must be holding gThermalHalMutex.
+static void getThermalHalLocked() {
+    if (gThermalHal != nullptr) {
+        return;
     }
 
-    if (gThermalModule == nullptr) {
+    gThermalHal = IThermal::getService();
+
+    if (gThermalHal == nullptr) {
         ALOGE("Unable to get Thermal service.");
+    } else {
+        if (gThermalHalDeathRecipient == nullptr) {
+            gThermalHalDeathRecipient = new ThermalHalDeathRecipient();
+        }
+        hardware::Return<bool> linked = gThermalHal->linkToDeath(
+            gThermalHalDeathRecipient, 0x451F /* cookie */);
+        if (!linked.isOk()) {
+            ALOGE("Transaction error in linking to ThermalHAL death: %s",
+            linked.description().c_str());
+            gThermalHal = nullptr;
+        } else if (!linked) {
+            ALOGW("Unable to link to ThermalHal death notifications");
+            gThermalHal = nullptr;
+        } else {
+            ALOGD("Link to death notification successful");
+        }
     }
 }
 
+static void nativeInit(JNIEnv* env, jobject obj) {
+    std::lock_guard<std::mutex> lock(gThermalHalMutex);
+    getThermalHalLocked();
+}
+
 static jfloatArray nativeGetFanSpeeds(JNIEnv *env, jclass /* clazz */) {
-    if (gThermalModule == nullptr) {
+    std::lock_guard<std::mutex> lock(gThermalHalMutex);
+    getThermalHalLocked();
+    if (gThermalHal == nullptr) {
         ALOGE("Couldn't get fan speeds because of HAL error.");
         return env->NewFloatArray(0);
     }
 
     hidl_vec<CoolingDevice> list;
-    Return<void> ret = gThermalModule->getCoolingDevices(
+    Return<void> ret = gThermalHal->getCoolingDevices(
             [&list](ThermalStatus status, hidl_vec<CoolingDevice> devices) {
                 if (status.code == ThermalStatusCode::SUCCESS) {
                     list = std::move(devices);
@@ -109,12 +151,14 @@
 
 static jfloatArray nativeGetDeviceTemperatures(JNIEnv *env, jclass /* clazz */, int type,
                                                int source) {
-    if (gThermalModule == nullptr) {
+    std::lock_guard<std::mutex> lock(gThermalHalMutex);
+    getThermalHalLocked();
+    if (gThermalHal == nullptr) {
         ALOGE("Couldn't get device temperatures because of HAL error.");
         return env->NewFloatArray(0);
     }
     hidl_vec<Temperature> list;
-    Return<void> ret = gThermalModule->getTemperatures(
+    Return<void> ret = gThermalHal->getTemperatures(
             [&list](ThermalStatus status, hidl_vec<Temperature> temperatures) {
                 if (status.code == ThermalStatusCode::SUCCESS) {
                     list = std::move(temperatures);
@@ -154,12 +198,14 @@
 }
 
 static jobjectArray nativeGetCpuUsages(JNIEnv *env, jclass /* clazz */) {
-    if (gThermalModule == nullptr || !gCpuUsageInfoClassInfo.initMethod) {
+    std::lock_guard<std::mutex> lock(gThermalHalMutex);
+    getThermalHalLocked();
+    if (gThermalHal == nullptr || !gCpuUsageInfoClassInfo.initMethod) {
         ALOGE("Couldn't get CPU usages because of HAL error.");
         return env->NewObjectArray(0, gCpuUsageInfoClassInfo.clazz, nullptr);
     }
     hidl_vec<CpuUsage> list;
-    Return<void> ret = gThermalModule->getCpuUsages(
+    Return<void> ret = gThermalHal->getCpuUsages(
             [&list](ThermalStatus status, hidl_vec<CpuUsage> cpuUsages) {
                 if (status.code == ThermalStatusCode::SUCCESS) {
                     list = std::move(cpuUsages);
@@ -202,7 +248,6 @@
 };
 
 int register_android_server_HardwarePropertiesManagerService(JNIEnv* env) {
-    gThermalModule = nullptr;
     int res = jniRegisterNativeMethods(env, "com/android/server/HardwarePropertiesManagerService",
                                        gHardwarePropertiesManagerServiceMethods,
                                        NELEM(gHardwarePropertiesManagerServiceMethods));
diff --git a/services/core/jni/com_android_server_PersistentDataBlockService.cpp b/services/core/jni/com_android_server_PersistentDataBlockService.cpp
index f94e5d9..97e69fb 100644
--- a/services/core/jni/com_android_server_PersistentDataBlockService.cpp
+++ b/services/core/jni/com_android_server_PersistentDataBlockService.cpp
@@ -15,9 +15,9 @@
  */
 
 #include <android_runtime/AndroidRuntime.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <jni.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 
 #include <utils/misc.h>
 #include <sys/ioctl.h>
diff --git a/services/core/jni/com_android_server_SerialService.cpp b/services/core/jni/com_android_server_SerialService.cpp
index 1bd7a59..aef0b25 100644
--- a/services/core/jni/com_android_server_SerialService.cpp
+++ b/services/core/jni/com_android_server_SerialService.cpp
@@ -18,7 +18,7 @@
 #include "utils/Log.h"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_runtime/AndroidRuntime.h"
 
 #include <sys/types.h>
diff --git a/services/core/jni/com_android_server_SystemServer.cpp b/services/core/jni/com_android_server_SystemServer.cpp
index 470cc57..3901ceb 100644
--- a/services/core/jni/com_android_server_SystemServer.cpp
+++ b/services/core/jni/com_android_server_SystemServer.cpp
@@ -15,7 +15,7 @@
  */
 
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 
 #include <hidl/HidlTransportSupport.h>
 
diff --git a/services/core/jni/com_android_server_UsbDeviceManager.cpp b/services/core/jni/com_android_server_UsbDeviceManager.cpp
index 3733a55..f37f870 100644
--- a/services/core/jni/com_android_server_UsbDeviceManager.cpp
+++ b/services/core/jni/com_android_server_UsbDeviceManager.cpp
@@ -18,7 +18,7 @@
 #include "utils/Log.h"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/Log.h"
 
diff --git a/services/core/jni/com_android_server_UsbHostManager.cpp b/services/core/jni/com_android_server_UsbHostManager.cpp
index a2b79ff..88ae824 100644
--- a/services/core/jni/com_android_server_UsbHostManager.cpp
+++ b/services/core/jni/com_android_server_UsbHostManager.cpp
@@ -18,7 +18,7 @@
 #include "utils/Log.h"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/Log.h"
 
diff --git a/services/core/jni/com_android_server_UsbMidiDevice.cpp b/services/core/jni/com_android_server_UsbMidiDevice.cpp
index e12a016..79d935f 100644
--- a/services/core/jni/com_android_server_UsbMidiDevice.cpp
+++ b/services/core/jni/com_android_server_UsbMidiDevice.cpp
@@ -19,7 +19,7 @@
 #include "utils/Log.h"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/Log.h"
 
diff --git a/services/core/jni/com_android_server_VibratorService.cpp b/services/core/jni/com_android_server_VibratorService.cpp
index 45e9cc7..d2f374d 100644
--- a/services/core/jni/com_android_server_VibratorService.cpp
+++ b/services/core/jni/com_android_server_VibratorService.cpp
@@ -21,7 +21,7 @@
 #include <android/hardware/vibrator/1.1/IVibrator.h>
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_runtime/AndroidRuntime.h"
 
 #include <utils/misc.h>
@@ -153,9 +153,9 @@
     if (status == Status::OK) {
         return lengthMs;
     } else if (status != Status::UNSUPPORTED_OPERATION) {
-        // Don't warn on UNSUPPORTED_OPERATION, that's a normal even and just means the motor
-        // doesn't have a pre-defined waveform to perform for it, so we should just fall back
-        // to the framework waveforms.
+        // Don't warn on UNSUPPORTED_OPERATION, that's a normal event and just means the motor
+        // doesn't have a pre-defined waveform to perform for it, so we should just give the
+        // opportunity to fall back to the framework waveforms.
         ALOGE("Failed to perform haptic effect: effect=%" PRId64 ", strength=%" PRId32
                 ", error=%" PRIu32 ").", static_cast<int64_t>(effect),
                 static_cast<int32_t>(strength), static_cast<uint32_t>(status));
diff --git a/services/core/jni/com_android_server_am_BatteryStatsService.cpp b/services/core/jni/com_android_server_am_BatteryStatsService.cpp
index 413f430..ae7d6da 100644
--- a/services/core/jni/com_android_server_am_BatteryStatsService.cpp
+++ b/services/core/jni/com_android_server_am_BatteryStatsService.cpp
@@ -33,8 +33,8 @@
 #include <android_runtime/AndroidRuntime.h>
 #include <jni.h>
 
-#include <ScopedLocalRef.h>
-#include <ScopedPrimitiveArray.h>
+#include <nativehelper/ScopedLocalRef.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
 
 #include <log/log.h>
 #include <utils/misc.h>
@@ -63,6 +63,12 @@
 extern std::mutex gPowerHalMutex;
 extern bool getPowerHal();
 
+// Java methods used in getLowPowerStats
+static jmethodID jgetAndUpdatePlatformState = NULL;
+static jmethodID jgetSubsystem = NULL;
+static jmethodID jputVoter = NULL;
+static jmethodID jputState = NULL;
+
 static void wakeup_callback(bool success)
 {
     ALOGV("In wakeup_callback: %s", success ? "resumed from suspend" : "suspend aborted");
@@ -185,6 +191,97 @@
     return mergedreasonpos - mergedreason;
 }
 
+static void getLowPowerStats(JNIEnv* env, jobject /* clazz */, jobject jrpmStats) {
+    if (jrpmStats == NULL) {
+        jniThrowException(env, "java/lang/NullPointerException",
+                "The rpmstats jni input jobject jrpmStats is null.");
+        return;
+    }
+    if (jgetAndUpdatePlatformState == NULL || jgetSubsystem == NULL
+            || jputVoter == NULL || jputState == NULL) {
+        ALOGE("A rpmstats jni jmethodID is null.");
+        return;
+    }
+
+    std::lock_guard<std::mutex> lock(gPowerHalMutex);
+    if (!getPowerHal()) {
+        ALOGE("Power Hal not loaded");
+        return;
+    }
+
+    Return<void> ret = gPowerHalV1_0->getPlatformLowPowerStats(
+            [&env, &jrpmStats](hidl_vec<PowerStatePlatformSleepState> states, Status status) {
+
+            if (status != Status::SUCCESS) return;
+
+            for (size_t i = 0; i < states.size(); i++) {
+                const PowerStatePlatformSleepState& state = states[i];
+
+                jobject jplatformState = env->CallObjectMethod(jrpmStats,
+                        jgetAndUpdatePlatformState,
+                        env->NewStringUTF(state.name.c_str()),
+                        state.residencyInMsecSinceBoot,
+                        state.totalTransitions);
+                if (jplatformState == NULL) {
+                    ALOGE("The rpmstats jni jobject jplatformState is null.");
+                    return;
+                }
+
+                for (size_t j = 0; j < state.voters.size(); j++) {
+                    const PowerStateVoter& voter = state.voters[j];
+                    env->CallVoidMethod(jplatformState, jputVoter,
+                            env->NewStringUTF(voter.name.c_str()),
+                            voter.totalTimeInMsecVotedForSinceBoot,
+                            voter.totalNumberOfTimesVotedSinceBoot);
+                }
+            }
+    });
+    if (!ret.isOk()) {
+        ALOGE("getLowPowerStats() failed: power HAL service not available");
+        gPowerHalV1_0 = nullptr;
+        return;
+    }
+
+    //Trying to cast to IPower 1.1, this will succeed only for devices supporting 1.1
+    sp<android::hardware::power::V1_1::IPower> gPowerHal_1_1
+            = android::hardware::power::V1_1::IPower::castFrom(gPowerHalV1_0);
+    if (gPowerHal_1_1 == nullptr) {
+        //This device does not support IPower@1.1, exiting gracefully
+        return;
+    }
+    ret = gPowerHal_1_1->getSubsystemLowPowerStats(
+            [&env, &jrpmStats](hidl_vec<PowerStateSubsystem> subsystems, Status status) {
+
+        if (status != Status::SUCCESS) return;
+
+        if (subsystems.size() > 0) {
+            for (size_t i = 0; i < subsystems.size(); i++) {
+                const PowerStateSubsystem &subsystem = subsystems[i];
+
+                jobject jsubsystem = env->CallObjectMethod(jrpmStats, jgetSubsystem,
+                        env->NewStringUTF(subsystem.name.c_str()));
+                if (jsubsystem == NULL) {
+                    ALOGE("The rpmstats jni jobject jsubsystem is null.");
+                    return;
+                }
+
+                for (size_t j = 0; j < subsystem.states.size(); j++) {
+                    const PowerStateSubsystemSleepState& state = subsystem.states[j];
+                    env->CallVoidMethod(jsubsystem, jputState,
+                            env->NewStringUTF(state.name.c_str()),
+                            state.residencyInMsecSinceBoot,
+                            state.totalTransitions);
+                }
+            }
+        }
+    });
+    if (!ret.isOk()) {
+        ALOGE("getSubsystemLowPowerStats() failed: power HAL service not available");
+        gPowerHalV1_0 = nullptr;
+    }
+    // gPowerHalMutex released here
+}
+
 static jint getPlatformLowPowerStats(JNIEnv* env, jobject /* clazz */, jobject outBuf) {
     char *output = (char*)env->GetDirectBufferAddress(outBuf);
     char *offset = output;
@@ -369,12 +466,33 @@
 
 static const JNINativeMethod method_table[] = {
     { "nativeWaitWakeup", "(Ljava/nio/ByteBuffer;)I", (void*)nativeWaitWakeup },
+    { "getLowPowerStats", "(Lcom/android/internal/os/RpmStats;)V", (void*)getLowPowerStats },
     { "getPlatformLowPowerStats", "(Ljava/nio/ByteBuffer;)I", (void*)getPlatformLowPowerStats },
     { "getSubsystemLowPowerStats", "(Ljava/nio/ByteBuffer;)I", (void*)getSubsystemLowPowerStats },
 };
 
 int register_android_server_BatteryStatsService(JNIEnv *env)
 {
+    // get java classes and methods
+    jclass clsRpmStats = env->FindClass("com/android/internal/os/RpmStats");
+    jclass clsPowerStatePlatformSleepState =
+            env->FindClass("com/android/internal/os/RpmStats$PowerStatePlatformSleepState");
+    jclass clsPowerStateSubsystem =
+            env->FindClass("com/android/internal/os/RpmStats$PowerStateSubsystem");
+    if (clsRpmStats == NULL || clsPowerStatePlatformSleepState == NULL
+            || clsPowerStateSubsystem == NULL) {
+        ALOGE("A rpmstats jni jclass is null.");
+    } else {
+        jgetAndUpdatePlatformState = env->GetMethodID(clsRpmStats, "getAndUpdatePlatformState",
+                "(Ljava/lang/String;JI)Lcom/android/internal/os/RpmStats$PowerStatePlatformSleepState;");
+        jgetSubsystem = env->GetMethodID(clsRpmStats, "getSubsystem",
+                "(Ljava/lang/String;)Lcom/android/internal/os/RpmStats$PowerStateSubsystem;");
+        jputVoter = env->GetMethodID(clsPowerStatePlatformSleepState, "putVoter",
+                "(Ljava/lang/String;JI)V");
+        jputState = env->GetMethodID(clsPowerStateSubsystem, "putState",
+                "(Ljava/lang/String;JI)V");
+    }
+
     return jniRegisterNativeMethods(env, "com/android/server/am/BatteryStatsService",
             method_table, NELEM(method_table));
 }
diff --git a/services/core/jni/com_android_server_connectivity_Vpn.cpp b/services/core/jni/com_android_server_connectivity_Vpn.cpp
index 4d85d9a..b6bea11 100644
--- a/services/core/jni/com_android_server_connectivity_Vpn.cpp
+++ b/services/core/jni/com_android_server_connectivity_Vpn.cpp
@@ -38,7 +38,7 @@
 #include "netutils/ifc.h"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 
 namespace android
 {
diff --git a/services/core/jni/com_android_server_connectivity_tethering_OffloadHardwareInterface.cpp b/services/core/jni/com_android_server_connectivity_tethering_OffloadHardwareInterface.cpp
index 4e5c27f..3eaf488 100644
--- a/services/core/jni/com_android_server_connectivity_tethering_OffloadHardwareInterface.cpp
+++ b/services/core/jni/com_android_server_connectivity_tethering_OffloadHardwareInterface.cpp
@@ -18,7 +18,7 @@
 #include <error.h>
 #include <hidl/HidlSupport.h>
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 #include <linux/netfilter/nfnetlink.h>
 #include <linux/netlink.h>
 #include <sys/socket.h>
@@ -74,10 +74,9 @@
 hidl_handle handleFromFileDescriptor(base::unique_fd fd) {
     hidl_handle h;
 
-    NATIVE_HANDLE_DECLARE_STORAGE(storage, 0, 0);
     static constexpr int kNumFds = 1;
     static constexpr int kNumInts = 0;
-    native_handle_t *nh = native_handle_init(storage, kNumFds, kNumInts);
+    native_handle_t *nh = native_handle_create(kNumFds, kNumInts);
     nh->data[0] = fd.release();
 
     static constexpr bool kTakeOwnership = true;
@@ -104,8 +103,8 @@
     // fd2   A file descriptor bound to the following netlink groups
     //       (NF_NETLINK_CONNTRACK_UPDATE | NF_NETLINK_CONNTRACK_DESTROY).
     base::unique_fd
-            fd1(conntrackSocket(NFNLGRP_CONNTRACK_NEW | NFNLGRP_CONNTRACK_DESTROY)),
-            fd2(conntrackSocket(NFNLGRP_CONNTRACK_UPDATE | NFNLGRP_CONNTRACK_DESTROY));
+            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;
@@ -114,7 +113,7 @@
     hidl_handle h1(handleFromFileDescriptor(std::move(fd1))),
                 h2(handleFromFileDescriptor(std::move(fd2)));
 
-    bool rval;
+    bool rval(false);
     hidl_string msg;
     const auto status = configInterface->setHandles(h1, h2,
             [&rval, &msg](bool success, const hidl_string& errMsg) {
@@ -124,6 +123,8 @@
     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;
diff --git a/services/core/jni/com_android_server_fingerprint_FingerprintService.cpp b/services/core/jni/com_android_server_fingerprint_FingerprintService.cpp
index 39474ec..503f0cf 100644
--- a/services/core/jni/com_android_server_fingerprint_FingerprintService.cpp
+++ b/services/core/jni/com_android_server_fingerprint_FingerprintService.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "Fingerprint-JNI"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include <inttypes.h>
 
 #include <android_runtime/AndroidRuntime.h>
diff --git a/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp b/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp
index 4df7256..c22109c 100644
--- a/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp
+++ b/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp
@@ -18,8 +18,8 @@
 
 #define LOG_NDEBUG 1
 
-#include <JNIHelp.h>
-#include <ScopedPrimitiveArray.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
 
 #include <android/hardware/tv/cec/1.0/IHdmiCec.h>
 #include <android/hardware/tv/cec/1.0/IHdmiCecCallback.h>
diff --git a/services/core/jni/com_android_server_input_InputApplicationHandle.cpp b/services/core/jni/com_android_server_input_InputApplicationHandle.cpp
index e927b60..232b2c2 100644
--- a/services/core/jni/com_android_server_input_InputApplicationHandle.cpp
+++ b/services/core/jni/com_android_server_input_InputApplicationHandle.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "InputApplicationHandle"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/threads.h>
diff --git a/services/core/jni/com_android_server_input_InputApplicationHandle.h b/services/core/jni/com_android_server_input_InputApplicationHandle.h
index e6f25cc..c9af711 100644
--- a/services/core/jni/com_android_server_input_InputApplicationHandle.h
+++ b/services/core/jni/com_android_server_input_InputApplicationHandle.h
@@ -19,7 +19,7 @@
 
 #include <inputflinger/InputApplication.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 
 namespace android {
diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp
index 41f86c9..21300ed 100644
--- a/services/core/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/core/jni/com_android_server_input_InputManagerService.cpp
@@ -16,6 +16,8 @@
 
 #define LOG_TAG "InputManager-JNI"
 
+#define ATRACE_TAG ATRACE_TAG_INPUT
+
 //#define LOG_NDEBUG 0
 
 // Log debug messages about InputReaderPolicy
@@ -25,7 +27,7 @@
 #define DEBUG_INPUT_DISPATCHER_POLICY 0
 
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 #include <atomic>
 #include <cinttypes>
@@ -36,6 +38,7 @@
 #include <utils/Log.h>
 #include <utils/Looper.h>
 #include <utils/threads.h>
+#include <utils/Trace.h>
 #include <utils/SortedVector.h>
 
 #include <input/PointerController.h>
@@ -51,9 +54,9 @@
 #include <android_view_PointerIcon.h>
 #include <android/graphics/GraphicsJNI.h>
 
-#include <ScopedLocalRef.h>
-#include <ScopedPrimitiveArray.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedLocalRef.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
+#include <nativehelper/ScopedUtfChars.h>
 
 #include "com_android_server_power_PowerManagerService.h"
 #include "com_android_server_input_InputApplicationHandle.h"
@@ -445,16 +448,19 @@
 status_t NativeInputManager::registerInputChannel(JNIEnv* /* env */,
         const sp<InputChannel>& inputChannel,
         const sp<InputWindowHandle>& inputWindowHandle, bool monitor) {
+    ATRACE_CALL();
     return mInputManager->getDispatcher()->registerInputChannel(
             inputChannel, inputWindowHandle, monitor);
 }
 
 status_t NativeInputManager::unregisterInputChannel(JNIEnv* /* env */,
         const sp<InputChannel>& inputChannel) {
+    ATRACE_CALL();
     return mInputManager->getDispatcher()->unregisterInputChannel(inputChannel);
 }
 
 void NativeInputManager::getReaderConfiguration(InputReaderConfiguration* outConfig) {
+    ATRACE_CALL();
     JNIEnv* env = jniEnv();
 
     jint virtualKeyQuietTime = env->CallIntMethod(mServiceObj,
@@ -528,6 +534,7 @@
 }
 
 sp<PointerControllerInterface> NativeInputManager::obtainPointerController(int32_t /* deviceId */) {
+    ATRACE_CALL();
     AutoMutex _l(mLock);
 
     sp<PointerController> controller = mLocked.pointerController.promote();
@@ -560,6 +567,7 @@
 }
 
 void NativeInputManager::notifyInputDevicesChanged(const Vector<InputDeviceInfo>& inputDevices) {
+    ATRACE_CALL();
     JNIEnv* env = jniEnv();
 
     size_t count = inputDevices.size();
@@ -591,6 +599,7 @@
 
 sp<KeyCharacterMap> NativeInputManager::getKeyboardLayoutOverlay(
         const InputDeviceIdentifier& identifier) {
+    ATRACE_CALL();
     JNIEnv* env = jniEnv();
 
     sp<KeyCharacterMap> result;
@@ -616,6 +625,7 @@
 }
 
 String8 NativeInputManager::getDeviceAlias(const InputDeviceIdentifier& identifier) {
+    ATRACE_CALL();
     JNIEnv* env = jniEnv();
 
     ScopedLocalRef<jstring> uniqueIdObj(env, env->NewStringUTF(identifier.uniqueId.string()));
@@ -636,6 +646,7 @@
     ALOGD("notifySwitch - when=%lld, switchValues=0x%08x, switchMask=0x%08x, policyFlags=0x%x",
             when, switchValues, switchMask, policyFlags);
 #endif
+    ATRACE_CALL();
 
     JNIEnv* env = jniEnv();
 
@@ -648,6 +659,7 @@
 #if DEBUG_INPUT_DISPATCHER_POLICY
     ALOGD("notifyConfigurationChanged - when=%lld", when);
 #endif
+    ATRACE_CALL();
 
     JNIEnv* env = jniEnv();
 
@@ -660,6 +672,7 @@
 #if DEBUG_INPUT_DISPATCHER_POLICY
     ALOGD("notifyANR");
 #endif
+    ATRACE_CALL();
 
     JNIEnv* env = jniEnv();
 
@@ -688,6 +701,7 @@
 #if DEBUG_INPUT_DISPATCHER_POLICY
     ALOGD("notifyInputChannelBroken");
 #endif
+    ATRACE_CALL();
 
     JNIEnv* env = jniEnv();
 
@@ -703,6 +717,7 @@
 }
 
 void NativeInputManager::getDispatcherConfiguration(InputDispatcherConfiguration* outConfig) {
+    ATRACE_CALL();
     JNIEnv* env = jniEnv();
 
     jint keyRepeatTimeout = env->CallIntMethod(mServiceObj,
@@ -898,6 +913,7 @@
 
 TouchAffineTransformation NativeInputManager::getTouchAffineTransformation(
         JNIEnv *env, jfloatArray matrixArr) {
+    ATRACE_CALL();
     ScopedFloatArrayRO matrix(env, matrixArr);
     assert(matrix.size() == 6);
 
@@ -934,6 +950,7 @@
 }
 
 bool NativeInputManager::filterInputEvent(const InputEvent* inputEvent, uint32_t policyFlags) {
+    ATRACE_CALL();
     jobject inputEventObj;
 
     JNIEnv* env = jniEnv();
@@ -967,6 +984,7 @@
 
 void NativeInputManager::interceptKeyBeforeQueueing(const KeyEvent* keyEvent,
         uint32_t& policyFlags) {
+    ATRACE_CALL();
     // Policy:
     // - Ignore untrusted events and pass them along.
     // - Ask the window manager what to do with normal events and trusted injected events.
@@ -1003,6 +1021,7 @@
 }
 
 void NativeInputManager::interceptMotionBeforeQueueing(nsecs_t when, uint32_t& policyFlags) {
+    ATRACE_CALL();
     // Policy:
     // - Ignore untrusted events and pass them along.
     // - No special filtering for injected events required at this time.
@@ -1048,6 +1067,7 @@
 nsecs_t NativeInputManager::interceptKeyBeforeDispatching(
         const sp<InputWindowHandle>& inputWindowHandle,
         const KeyEvent* keyEvent, uint32_t policyFlags) {
+    ATRACE_CALL();
     // Policy:
     // - Ignore untrusted events and pass them along.
     // - Filter normal events and trusted injected events through the window manager policy to
@@ -1083,6 +1103,7 @@
 
 bool NativeInputManager::dispatchUnhandledKey(const sp<InputWindowHandle>& inputWindowHandle,
         const KeyEvent* keyEvent, uint32_t policyFlags, KeyEvent* outFallbackKeyEvent) {
+    ATRACE_CALL();
     // Policy:
     // - Ignore untrusted events and do not perform default handling.
     bool result = false;
@@ -1120,12 +1141,14 @@
 }
 
 void NativeInputManager::pokeUserActivity(nsecs_t eventTime, int32_t eventType) {
+    ATRACE_CALL();
     android_server_PowerManagerService_userActivity(eventTime, eventType);
 }
 
 
 bool NativeInputManager::checkInjectEventsPermissionNonReentrant(
         int32_t injectorPid, int32_t injectorUid) {
+    ATRACE_CALL();
     JNIEnv* env = jniEnv();
     jboolean result = env->CallBooleanMethod(mServiceObj,
             gServiceClassInfo.checkInjectEventsPermission, injectorPid, injectorUid);
@@ -1136,6 +1159,7 @@
 }
 
 void NativeInputManager::loadPointerIcon(SpriteIcon* icon) {
+    ATRACE_CALL();
     JNIEnv* env = jniEnv();
 
     ScopedLocalRef<jobject> pointerIconObj(env, env->CallObjectMethod(
@@ -1155,6 +1179,7 @@
 }
 
 void NativeInputManager::loadPointerResources(PointerResources* outResources) {
+    ATRACE_CALL();
     JNIEnv* env = jniEnv();
 
     loadSystemIconAsSprite(env, mContextObj, POINTER_ICON_STYLE_SPOT_HOVER,
@@ -1167,6 +1192,7 @@
 
 void NativeInputManager::loadAdditionalMouseResources(std::map<int32_t, SpriteIcon>* outResources,
         std::map<int32_t, PointerAnimation>* outAnimationResources) {
+    ATRACE_CALL();
     JNIEnv* env = jniEnv();
 
     for (int iconId = POINTER_ICON_STYLE_CONTEXT_MENU; iconId <= POINTER_ICON_STYLE_GRABBING;
diff --git a/services/core/jni/com_android_server_input_InputWindowHandle.cpp b/services/core/jni/com_android_server_input_InputWindowHandle.cpp
index 197d056..2b2a6fa 100644
--- a/services/core/jni/com_android_server_input_InputWindowHandle.cpp
+++ b/services/core/jni/com_android_server_input_InputWindowHandle.cpp
@@ -16,7 +16,7 @@
 
 #define LOG_TAG "InputWindowHandle"
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 #include <android_runtime/AndroidRuntime.h>
 #include <utils/threads.h>
diff --git a/services/core/jni/com_android_server_input_InputWindowHandle.h b/services/core/jni/com_android_server_input_InputWindowHandle.h
index 8d9e7d7..44d4620 100644
--- a/services/core/jni/com_android_server_input_InputWindowHandle.h
+++ b/services/core/jni/com_android_server_input_InputWindowHandle.h
@@ -19,7 +19,7 @@
 
 #include <inputflinger/InputWindow.h>
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 
 namespace android {
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp
index 514e996..c90113f 100644
--- a/services/core/jni/com_android_server_lights_LightsService.cpp
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp
@@ -17,11 +17,12 @@
 #define LOG_TAG "LightsService"
 
 #include "jni.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "android_runtime/AndroidRuntime.h"
 
 #include <android/hardware/light/2.0/ILight.h>
 #include <android/hardware/light/2.0/types.h>
+#include <android-base/chrono_utils.h>
 #include <utils/misc.h>
 #include <utils/Log.h>
 #include <map>
@@ -178,9 +179,10 @@
         colorARGB, flashMode, onMS, offMS, brightnessMode);
 
     {
-        ALOGD_IF_SLOW(50, "Excessive delay setting light");
+        android::base::Timer t;
         Return<Status> ret = hal->setLight(type, state);
         processReturn(ret, type, state);
+        if (t.duration() > 50ms) ALOGD("Excessive delay setting light");
     }
 }
 
diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp
index 3ce9916..2db7dbe 100644
--- a/services/core/jni/com_android_server_power_PowerManagerService.cpp
+++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp
@@ -26,6 +26,7 @@
 
 #include <limits.h>
 
+#include <android-base/chrono_utils.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/Log.h>
 #include <utils/Timers.h>
@@ -166,22 +167,29 @@
 static void nativeSetInteractive(JNIEnv* /* env */, jclass /* clazz */, jboolean enable) {
     std::lock_guard<std::mutex> lock(gPowerHalMutex);
     if (getPowerHal()) {
-        String8 err = String8::format(
-                "Excessive delay in setInteractive(%s) while turning screen %s",
-                enable ? "true" : "false", enable ? "on" : "off");
-        ALOGD_IF_SLOW(20, err);
+        android::base::Timer t;
         Return<void> ret = gPowerHalV1_0->setInteractive(enable);
         processReturn(ret, "setInteractive");
+        if (t.duration() > 20ms) {
+            ALOGD("Excessive delay in setInteractive(%s) while turning screen %s",
+                  enable ? "true" : "false", enable ? "on" : "off");
+        }
     }
 }
 
 static void nativeSetAutoSuspend(JNIEnv* /* env */, jclass /* clazz */, jboolean enable) {
     if (enable) {
-        ALOGD_IF_SLOW(100, "Excessive delay in autosuspend_enable() while turning screen off");
+        android::base::Timer t;
         autosuspend_enable();
+        if (t.duration() > 100ms) {
+            ALOGD("Excessive delay in autosuspend_enable() while turning screen off");
+        }
     } else {
-        ALOGD_IF_SLOW(100, "Excessive delay in autosuspend_disable() while turning screen on");
+        android::base::Timer t;
         autosuspend_disable();
+        if (t.duration() > 100ms) {
+            ALOGD("Excessive delay in autosuspend_disable() while turning screen on");
+        }
     }
 }
 
diff --git a/services/core/jni/com_android_server_power_PowerManagerService.h b/services/core/jni/com_android_server_power_PowerManagerService.h
index f5fd3d6..a17fd65 100644
--- a/services/core/jni/com_android_server_power_PowerManagerService.h
+++ b/services/core/jni/com_android_server_power_PowerManagerService.h
@@ -17,7 +17,7 @@
 #ifndef _ANDROID_SERVER_POWER_MANAGER_SERVICE_H
 #define _ANDROID_SERVER_POWER_MANAGER_SERVICE_H
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 
 #include <powermanager/PowerManager.h>
diff --git a/services/core/jni/com_android_server_radio_RadioService.cpp b/services/core/jni/com_android_server_radio_RadioService.cpp
deleted file mode 100644
index 73887bb..0000000
--- a/services/core/jni/com_android_server_radio_RadioService.cpp
+++ /dev/null
@@ -1,208 +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 "radio.RadioService.jni"
-#define LOG_NDEBUG 0
-
-#include "com_android_server_radio_RadioService.h"
-
-#include "com_android_server_radio_Tuner.h"
-#include "com_android_server_radio_convert.h"
-
-#include <android/hardware/broadcastradio/1.1/IBroadcastRadio.h>
-#include <android/hardware/broadcastradio/1.1/IBroadcastRadioFactory.h>
-#include <core_jni_helpers.h>
-#include <utils/Log.h>
-#include <JNIHelp.h>
-
-namespace android {
-namespace server {
-namespace radio {
-namespace RadioService {
-
-using hardware::Return;
-using hardware::hidl_vec;
-
-namespace V1_0 = hardware::broadcastradio::V1_0;
-namespace V1_1 = hardware::broadcastradio::V1_1;
-
-using V1_0::Class;
-using V1_0::Result;
-
-using V1_0::BandConfig;
-using V1_0::ProgramInfo;
-using V1_0::MetaData;
-using V1_0::ITuner;
-
-static Mutex gContextMutex;
-
-static struct {
-    struct {
-        jclass clazz;
-        jmethodID cstor;
-    } Tuner;
-} gjni;
-
-struct ServiceContext {
-    ServiceContext() {}
-
-    sp<V1_0::IBroadcastRadio> mModule;
-
-private:
-    DISALLOW_COPY_AND_ASSIGN(ServiceContext);
-};
-
-
-/**
- * Always lock gContextMutex when using native context.
- */
-static ServiceContext& getNativeContext(jlong nativeContextHandle) {
-    auto nativeContext = reinterpret_cast<ServiceContext*>(nativeContextHandle);
-    LOG_ALWAYS_FATAL_IF(nativeContext == nullptr, "Native context not initialized");
-    return *nativeContext;
-}
-
-static jlong nativeInit(JNIEnv *env, jobject obj) {
-    ALOGV("nativeInit()");
-    AutoMutex _l(gContextMutex);
-
-    auto nativeContext = new ServiceContext();
-    static_assert(sizeof(jlong) >= sizeof(nativeContext), "jlong is smaller than a pointer");
-    return reinterpret_cast<jlong>(nativeContext);
-}
-
-static void nativeFinalize(JNIEnv *env, jobject obj, jlong nativeContext) {
-    ALOGV("nativeFinalize()");
-    AutoMutex _l(gContextMutex);
-
-    auto ctx = reinterpret_cast<ServiceContext*>(nativeContext);
-    delete ctx;
-}
-
-static sp<V1_0::IBroadcastRadio> getModule(jlong nativeContext) {
-    ALOGV("getModule()");
-    AutoMutex _l(gContextMutex);
-    auto& ctx = getNativeContext(nativeContext);
-
-    if (ctx.mModule != nullptr) {
-        return ctx.mModule;
-    }
-
-    // TODO(b/36863239): what about other HAL implementations?
-    auto factory = V1_0::IBroadcastRadioFactory::getService();
-    if (factory == nullptr) {
-        ALOGE("Can't retrieve radio HAL implementation");
-        return nullptr;
-    }
-
-    sp<V1_0::IBroadcastRadio> module = nullptr;
-    // TODO(b/36863239): not only AM/FM
-    factory->connectModule(Class::AM_FM, [&](Result retval,
-            const sp<V1_0::IBroadcastRadio>& result) {
-        if (retval == Result::OK) {
-            module = result;
-        }
-    });
-
-    ALOGE_IF(module == nullptr, "Couldn't connect module");
-    ctx.mModule = module;
-    return module;
-}
-
-static jobject nativeOpenTuner(JNIEnv *env, jobject obj, long nativeContext, jint moduleId,
-        jobject bandConfig, bool withAudio, jobject callback) {
-    ALOGV("nativeOpenTuner()");
-    EnvWrapper wrap(env);
-
-    if (callback == nullptr) {
-        ALOGE("Callback is empty");
-        return nullptr;
-    }
-
-    // TODO(b/36863239): use moduleId
-    auto module = getModule(nativeContext);
-    if (module == nullptr) {
-        return nullptr;
-    }
-
-    HalRevision halRev;
-    if (V1_1::IBroadcastRadio::castFrom(module).withDefault(nullptr) != nullptr) {
-        ALOGI("Opening tuner with broadcast radio HAL 1.1");
-        halRev = HalRevision::V1_1;
-    } else {
-        ALOGI("Opening tuner with broadcast radio HAL 1.0");
-        halRev = HalRevision::V1_0;
-    }
-
-    Region region;
-    BandConfig bandConfigHal = convert::BandConfigToHal(env, bandConfig, region);
-
-    auto tuner = wrap(env->NewObject(gjni.Tuner.clazz, gjni.Tuner.cstor,
-            callback, halRev, region, withAudio));
-    if (tuner == nullptr) {
-        ALOGE("Unable to create new tuner object.");
-        return nullptr;
-    }
-
-    auto tunerCb = Tuner::getNativeCallback(env, tuner);
-    Result halResult;
-    sp<ITuner> halTuner = nullptr;
-
-    auto hidlResult = module->openTuner(bandConfigHal, withAudio, tunerCb,
-            [&](Result result, const sp<ITuner>& tuner) {
-                halResult = result;
-                halTuner = tuner;
-            });
-    if (!hidlResult.isOk() || halResult != Result::OK || halTuner == nullptr) {
-        ALOGE("Couldn't open tuner");
-        ALOGE_IF(hidlResult.isOk(), "halResult = %d", halResult);
-        ALOGE_IF(!hidlResult.isOk(), "hidlResult = %s", hidlResult.description().c_str());
-        return nullptr;
-    }
-
-    Tuner::setHalTuner(env, tuner, halTuner);
-    ALOGI("Opened tuner %p", halTuner.get());
-    return tuner.release();
-}
-
-static const JNINativeMethod gRadioServiceMethods[] = {
-    { "nativeInit", "()J", (void*)nativeInit },
-    { "nativeFinalize", "(J)V", (void*)nativeFinalize },
-    { "nativeOpenTuner", "(JILandroid/hardware/radio/RadioManager$BandConfig;Z"
-            "Landroid/hardware/radio/ITunerCallback;)Lcom/android/server/radio/Tuner;",
-            (void*)nativeOpenTuner },
-};
-
-} // namespace RadioService
-} // namespace radio
-} // namespace server
-
-void register_android_server_radio_RadioService(JNIEnv *env) {
-    using namespace server::radio::RadioService;
-
-    register_android_server_radio_convert(env);
-
-    auto tunerClass = FindClassOrDie(env, "com/android/server/radio/Tuner");
-    gjni.Tuner.clazz = MakeGlobalRefOrDie(env, tunerClass);
-    gjni.Tuner.cstor = GetMethodIDOrDie(env, tunerClass, "<init>",
-            "(Landroid/hardware/radio/ITunerCallback;IIZ)V");
-
-    auto res = jniRegisterNativeMethods(env, "com/android/server/radio/RadioService",
-            gRadioServiceMethods, NELEM(gRadioServiceMethods));
-    LOG_ALWAYS_FATAL_IF(res < 0, "Unable to register native methods.");
-}
-
-} // namespace android
diff --git a/services/core/jni/com_android_server_radio_RadioService.h b/services/core/jni/com_android_server_radio_RadioService.h
deleted file mode 100644
index 91e119c..0000000
--- a/services/core/jni/com_android_server_radio_RadioService.h
+++ /dev/null
@@ -1,28 +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.
- */
-
-#ifndef _ANDROID_SERVER_RADIO_RADIOSERVICE_H
-#define _ANDROID_SERVER_RADIO_RADIOSERVICE_H
-
-#include <jni.h>
-
-namespace android {
-
-void register_android_server_radio_RadioService(JNIEnv *env);
-
-} // namespace android
-
-#endif // _ANDROID_SERVER_RADIO_RADIOSERVICE_H
diff --git a/services/core/jni/com_android_server_radio_Tuner.cpp b/services/core/jni/com_android_server_radio_Tuner.cpp
deleted file mode 100644
index b92136a..0000000
--- a/services/core/jni/com_android_server_radio_Tuner.cpp
+++ /dev/null
@@ -1,384 +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 "radio.Tuner.jni"
-#define LOG_NDEBUG 0
-
-#include "com_android_server_radio_Tuner.h"
-
-#include "com_android_server_radio_convert.h"
-#include "com_android_server_radio_Tuner_TunerCallback.h"
-
-#include <android/hardware/broadcastradio/1.1/IBroadcastRadioFactory.h>
-#include <core_jni_helpers.h>
-#include <utils/Log.h>
-#include <JNIHelp.h>
-
-namespace android {
-namespace server {
-namespace radio {
-namespace Tuner {
-
-using hardware::Return;
-using hardware::hidl_vec;
-
-namespace V1_0 = hardware::broadcastradio::V1_0;
-namespace V1_1 = hardware::broadcastradio::V1_1;
-
-using V1_0::BandConfig;
-using V1_0::MetaData;
-using V1_0::Result;
-using V1_1::ITunerCallback;
-using V1_1::ProgramListResult;
-
-static Mutex gContextMutex;
-
-static struct {
-    struct {
-        jclass clazz;
-        jmethodID cstor;
-        jmethodID add;
-    } ArrayList;
-    struct {
-        jfieldID nativeContext;
-        jfieldID region;
-        jfieldID tunerCallback;
-    } Tuner;
-} gjni;
-
-struct TunerContext {
-    TunerContext() {}
-
-    HalRevision mHalRev;
-    sp<V1_0::ITuner> mHalTuner;
-    sp<V1_1::ITuner> mHalTuner11;
-
-private:
-    DISALLOW_COPY_AND_ASSIGN(TunerContext);
-};
-
-static TunerContext& getNativeContext(jlong nativeContextHandle) {
-    auto nativeContext = reinterpret_cast<TunerContext*>(nativeContextHandle);
-    LOG_ALWAYS_FATAL_IF(nativeContext == nullptr, "Native context not initialized");
-    return *nativeContext;
-}
-
-/**
- * Always lock gContextMutex when using native context.
- */
-static TunerContext& getNativeContext(JNIEnv *env, JavaRef<jobject> const &jTuner) {
-    return getNativeContext(env->GetLongField(jTuner.get(), gjni.Tuner.nativeContext));
-}
-
-static jlong nativeInit(JNIEnv *env, jobject obj, jint halRev) {
-    ALOGV("nativeInit()");
-    AutoMutex _l(gContextMutex);
-
-    auto ctx = new TunerContext();
-    ctx->mHalRev = static_cast<HalRevision>(halRev);
-
-    static_assert(sizeof(jlong) >= sizeof(ctx), "jlong is smaller than a pointer");
-    return reinterpret_cast<jlong>(ctx);
-}
-
-static void nativeFinalize(JNIEnv *env, jobject obj, jlong nativeContext) {
-    ALOGV("nativeFinalize()");
-    AutoMutex _l(gContextMutex);
-
-    auto ctx = reinterpret_cast<TunerContext*>(nativeContext);
-    delete ctx;
-}
-
-void setHalTuner(JNIEnv *env, JavaRef<jobject> const &jTuner, sp<V1_0::ITuner> halTuner) {
-    ALOGV("setHalTuner(%p)", halTuner.get());
-    ALOGE_IF(halTuner == nullptr, "HAL tuner is a nullptr");
-
-    AutoMutex _l(gContextMutex);
-    auto& ctx = getNativeContext(env, jTuner);
-
-    ctx.mHalTuner = halTuner;
-    ctx.mHalTuner11 = V1_1::ITuner::castFrom(halTuner).withDefault(nullptr);
-    ALOGW_IF(ctx.mHalRev >= HalRevision::V1_1 && ctx.mHalTuner11 == nullptr,
-            "Provided tuner does not implement 1.1 HAL");
-}
-
-sp<V1_0::ITuner> getHalTuner(jlong nativeContext) {
-    AutoMutex _l(gContextMutex);
-    auto tuner = getNativeContext(nativeContext).mHalTuner;
-    LOG_ALWAYS_FATAL_IF(tuner == nullptr, "HAL tuner is not open");
-    return tuner;
-}
-
-sp<V1_1::ITuner> getHalTuner11(jlong nativeContext) {
-    AutoMutex _l(gContextMutex);
-    return getNativeContext(nativeContext).mHalTuner11;
-}
-
-sp<ITunerCallback> getNativeCallback(JNIEnv *env, JavaRef<jobject> const &tuner) {
-    return TunerCallback::getNativeCallback(env,
-            env->GetObjectField(tuner.get(), gjni.Tuner.tunerCallback));
-}
-
-Region getRegion(JNIEnv *env, jobject obj) {
-    return static_cast<Region>(env->GetIntField(obj, gjni.Tuner.region));
-}
-
-static void nativeClose(JNIEnv *env, jobject obj, jlong nativeContext) {
-    AutoMutex _l(gContextMutex);
-    auto& ctx = getNativeContext(nativeContext);
-    if (ctx.mHalTuner == nullptr) return;
-    ALOGI("Closing tuner %p", ctx.mHalTuner.get());
-    ctx.mHalTuner11 = nullptr;
-    ctx.mHalTuner = nullptr;
-}
-
-static void nativeSetConfiguration(JNIEnv *env, jobject obj, jlong nativeContext, jobject config) {
-    ALOGV("nativeSetConfiguration()");
-    auto halTuner = getHalTuner(nativeContext);
-    if (halTuner == nullptr) return;
-
-    Region region_unused;
-    BandConfig bandConfigHal = convert::BandConfigToHal(env, config, region_unused);
-
-    convert::ThrowIfFailed(env, halTuner->setConfiguration(bandConfigHal));
-}
-
-static jobject nativeGetConfiguration(JNIEnv *env, jobject obj, jlong nativeContext,
-        Region region) {
-    ALOGV("nativeSetConfiguration()");
-    auto halTuner = getHalTuner(nativeContext);
-    if (halTuner == nullptr) return nullptr;
-
-    BandConfig halConfig;
-    Result halResult;
-    auto hidlResult = halTuner->getConfiguration([&](Result result, const BandConfig& config) {
-        halResult = result;
-        halConfig = config;
-    });
-    if (convert::ThrowIfFailed(env, hidlResult, halResult)) {
-        return nullptr;
-    }
-
-    return convert::BandConfigFromHal(env, halConfig, region).release();
-}
-
-static void nativeStep(JNIEnv *env, jobject obj, jlong nativeContext,
-        bool directionDown, bool skipSubChannel) {
-    ALOGV("nativeStep()");
-    auto halTuner = getHalTuner(nativeContext);
-    if (halTuner == nullptr) return;
-
-    auto dir = convert::DirectionToHal(directionDown);
-    convert::ThrowIfFailed(env, halTuner->step(dir, skipSubChannel));
-}
-
-static void nativeScan(JNIEnv *env, jobject obj, jlong nativeContext,
-        bool directionDown, bool skipSubChannel) {
-    ALOGV("nativeScan()");
-    auto halTuner = getHalTuner(nativeContext);
-    if (halTuner == nullptr) return;
-
-    auto dir = convert::DirectionToHal(directionDown);
-    convert::ThrowIfFailed(env, halTuner->scan(dir, skipSubChannel));
-}
-
-static void nativeTune(JNIEnv *env, jobject obj, jlong nativeContext,
-        jint channel, jint subChannel) {
-    ALOGV("nativeTune(%d, %d)", channel, subChannel);
-    auto halTuner = getHalTuner(nativeContext);
-    if (halTuner == nullptr) return;
-
-    convert::ThrowIfFailed(env, halTuner->tune(channel, subChannel));
-}
-
-static void nativeCancel(JNIEnv *env, jobject obj, jlong nativeContext) {
-    ALOGV("nativeCancel()");
-    auto halTuner = getHalTuner(nativeContext);
-    if (halTuner == nullptr) return;
-
-    convert::ThrowIfFailed(env, halTuner->cancel());
-}
-
-static jobject nativeGetProgramInformation(JNIEnv *env, jobject obj, jlong nativeContext) {
-    ALOGV("nativeGetProgramInformation()");
-    auto halTuner10 = getHalTuner(nativeContext);
-    auto halTuner11 = getHalTuner11(nativeContext);
-    if (halTuner10 == nullptr) return nullptr;
-
-    JavaRef<jobject> jInfo;
-    Result halResult;
-    Return<void> hidlResult;
-    if (halTuner11 != nullptr) {
-        hidlResult = halTuner11->getProgramInformation_1_1([&](Result result,
-                const V1_1::ProgramInfo& info) {
-            halResult = result;
-            if (result != Result::OK) return;
-            jInfo = convert::ProgramInfoFromHal(env, info);
-        });
-    } else {
-        hidlResult = halTuner10->getProgramInformation([&](Result result,
-                const V1_0::ProgramInfo& info) {
-            halResult = result;
-            if (result != Result::OK) return;
-            jInfo = convert::ProgramInfoFromHal(env, info);
-        });
-    }
-
-    if (jInfo != nullptr) return jInfo.release();
-    convert::ThrowIfFailed(env, hidlResult, halResult);
-    return nullptr;
-}
-
-static bool nativeStartBackgroundScan(JNIEnv *env, jobject obj, jlong nativeContext) {
-    ALOGV("nativeStartBackgroundScan()");
-    auto halTuner = getHalTuner11(nativeContext);
-    if (halTuner == nullptr) {
-        ALOGI("Background scan is not supported with HAL < 1.1");
-        return false;
-    }
-
-    auto halResult = halTuner->startBackgroundScan();
-
-    if (halResult.isOk() && halResult == ProgramListResult::UNAVAILABLE) return false;
-    return !convert::ThrowIfFailed(env, halResult);
-}
-
-static jobject nativeGetProgramList(JNIEnv *env, jobject obj, jlong nativeContext, jstring jFilter) {
-    ALOGV("nativeGetProgramList()");
-    EnvWrapper wrap(env);
-    auto halTuner = getHalTuner11(nativeContext);
-    if (halTuner == nullptr) {
-        ALOGI("Program list is not supported with HAL < 1.1");
-        return nullptr;
-    }
-
-    JavaRef<jobject> jList;
-    ProgramListResult halResult = ProgramListResult::NOT_INITIALIZED;
-    auto filter = env->GetStringUTFChars(jFilter, nullptr);
-    auto hidlResult = halTuner->getProgramList(filter,
-            [&](ProgramListResult result, const hidl_vec<V1_1::ProgramInfo>& programList) {
-        halResult = result;
-        if (halResult != ProgramListResult::OK) return;
-
-        jList = wrap(env->NewObject(gjni.ArrayList.clazz, gjni.ArrayList.cstor));
-        for (auto& program : programList) {
-            auto jProgram = convert::ProgramInfoFromHal(env, program);
-            env->CallBooleanMethod(jList.get(), gjni.ArrayList.add, jProgram.get());
-        }
-    });
-
-    if (convert::ThrowIfFailed(env, hidlResult, halResult)) return nullptr;
-
-    return jList.release();
-}
-
-static bool nativeIsAnalogForced(JNIEnv *env, jobject obj, jlong nativeContext) {
-    ALOGV("nativeIsAnalogForced()");
-    auto halTuner = getHalTuner11(nativeContext);
-    if (halTuner == nullptr) {
-        jniThrowException(env, "java/lang/IllegalStateException",
-                "Forced analog switch is not supported with HAL < 1.1");
-        return false;
-    }
-
-    bool isForced;
-    Result halResult;
-    auto hidlResult = halTuner->isAnalogForced([&](Result result, bool isForcedRet) {
-        halResult = result;
-        isForced = isForcedRet;
-    });
-
-    if (convert::ThrowIfFailed(env, hidlResult, halResult)) return false;
-
-    return isForced;
-}
-
-static void nativeSetAnalogForced(JNIEnv *env, jobject obj, jlong nativeContext, bool isForced) {
-    ALOGV("nativeSetAnalogForced()");
-    auto halTuner = getHalTuner11(nativeContext);
-    if (halTuner == nullptr) {
-        jniThrowException(env, "java/lang/IllegalStateException",
-                "Forced analog switch is not supported with HAL < 1.1");
-        return;
-    }
-
-    auto halResult = halTuner->setAnalogForced(isForced);
-    convert::ThrowIfFailed(env, halResult);
-}
-
-static bool nativeIsAntennaConnected(JNIEnv *env, jobject obj, jlong nativeContext) {
-    ALOGV("nativeIsAntennaConnected()");
-    auto halTuner = getHalTuner(nativeContext);
-    if (halTuner == nullptr) return false;
-
-    bool isConnected = false;
-    Result halResult;
-    auto hidlResult = halTuner->getConfiguration([&](Result result, const BandConfig& config) {
-        halResult = result;
-        isConnected = config.antennaConnected;
-    });
-    convert::ThrowIfFailed(env, hidlResult, halResult);
-    return isConnected;
-}
-
-static const JNINativeMethod gTunerMethods[] = {
-    { "nativeInit", "(I)J", (void*)nativeInit },
-    { "nativeFinalize", "(J)V", (void*)nativeFinalize },
-    { "nativeClose", "(J)V", (void*)nativeClose },
-    { "nativeSetConfiguration", "(JLandroid/hardware/radio/RadioManager$BandConfig;)V",
-            (void*)nativeSetConfiguration },
-    { "nativeGetConfiguration", "(JI)Landroid/hardware/radio/RadioManager$BandConfig;",
-            (void*)nativeGetConfiguration },
-    { "nativeStep", "(JZZ)V", (void*)nativeStep },
-    { "nativeScan", "(JZZ)V", (void*)nativeScan },
-    { "nativeTune", "(JII)V", (void*)nativeTune },
-    { "nativeCancel", "(J)V", (void*)nativeCancel },
-    { "nativeGetProgramInformation", "(J)Landroid/hardware/radio/RadioManager$ProgramInfo;",
-            (void*)nativeGetProgramInformation },
-    { "nativeStartBackgroundScan", "(J)Z", (void*)nativeStartBackgroundScan },
-    { "nativeGetProgramList", "(JLjava/lang/String;)Ljava/util/List;",
-            (void*)nativeGetProgramList },
-    { "nativeIsAnalogForced", "(J)Z", (void*)nativeIsAnalogForced },
-    { "nativeSetAnalogForced", "(JZ)V", (void*)nativeSetAnalogForced },
-    { "nativeIsAntennaConnected", "(J)Z", (void*)nativeIsAntennaConnected },
-};
-
-} // namespace Tuner
-} // namespace radio
-} // namespace server
-
-void register_android_server_radio_Tuner(JavaVM *vm, JNIEnv *env) {
-    using namespace server::radio::Tuner;
-
-    register_android_server_radio_TunerCallback(vm, env);
-
-    auto tunerClass = FindClassOrDie(env, "com/android/server/radio/Tuner");
-    gjni.Tuner.nativeContext = GetFieldIDOrDie(env, tunerClass, "mNativeContext", "J");
-    gjni.Tuner.region = GetFieldIDOrDie(env, tunerClass, "mRegion", "I");
-    gjni.Tuner.tunerCallback = GetFieldIDOrDie(env, tunerClass, "mTunerCallback",
-            "Lcom/android/server/radio/TunerCallback;");
-
-    auto arrayListClass = FindClassOrDie(env, "java/util/ArrayList");
-    gjni.ArrayList.clazz = MakeGlobalRefOrDie(env, arrayListClass);
-    gjni.ArrayList.cstor = GetMethodIDOrDie(env, arrayListClass, "<init>", "()V");
-    gjni.ArrayList.add = GetMethodIDOrDie(env, arrayListClass, "add", "(Ljava/lang/Object;)Z");
-
-    auto res = jniRegisterNativeMethods(env, "com/android/server/radio/Tuner",
-            gTunerMethods, NELEM(gTunerMethods));
-    LOG_ALWAYS_FATAL_IF(res < 0, "Unable to register native methods.");
-}
-
-} // namespace android
diff --git a/services/core/jni/com_android_server_radio_Tuner.h b/services/core/jni/com_android_server_radio_Tuner.h
deleted file mode 100644
index f653832..0000000
--- a/services/core/jni/com_android_server_radio_Tuner.h
+++ /dev/null
@@ -1,50 +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.
- */
-
-#ifndef _ANDROID_SERVER_RADIO_TUNER_H
-#define _ANDROID_SERVER_RADIO_TUNER_H
-
-#include "com_android_server_radio_types.h"
-
-#include "JavaRef.h"
-
-#include <android/hardware/broadcastradio/1.1/ITuner.h>
-#include <android/hardware/broadcastradio/1.1/ITunerCallback.h>
-#include <jni.h>
-#include <utils/StrongPointer.h>
-
-namespace android {
-
-void register_android_server_radio_Tuner(JavaVM *vm, JNIEnv *env);
-
-namespace server {
-namespace radio {
-namespace Tuner {
-
-void setHalTuner(JNIEnv *env, JavaRef<jobject> const &jTuner,
-        sp<hardware::broadcastradio::V1_0::ITuner> halTuner);
-
-sp<hardware::broadcastradio::V1_1::ITunerCallback>
-getNativeCallback(JNIEnv *env, JavaRef<jobject> const &tuner);
-
-Region getRegion(JNIEnv *env, jobject obj);
-
-} // namespace Tuner
-} // namespace radio
-} // namespace server
-} // namespace android
-
-#endif // _ANDROID_SERVER_RADIO_TUNER_H
diff --git a/services/core/jni/com_android_server_radio_Tuner_TunerCallback.cpp b/services/core/jni/com_android_server_radio_Tuner_TunerCallback.cpp
deleted file mode 100644
index 1290c7a..0000000
--- a/services/core/jni/com_android_server_radio_Tuner_TunerCallback.cpp
+++ /dev/null
@@ -1,319 +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 "radio.TunerCallback.jni"
-#define LOG_NDEBUG 0
-
-#include "com_android_server_radio_Tuner_TunerCallback.h"
-
-#include "com_android_server_radio_convert.h"
-#include "com_android_server_radio_Tuner.h"
-
-#include <core_jni_helpers.h>
-#include <utils/Log.h>
-#include <JNIHelp.h>
-
-namespace android {
-namespace server {
-namespace radio {
-namespace TunerCallback {
-
-using hardware::Return;
-using hardware::hidl_vec;
-
-namespace V1_0 = hardware::broadcastradio::V1_0;
-namespace V1_1 = hardware::broadcastradio::V1_1;
-
-using V1_0::BandConfig;
-using V1_0::MetaData;
-using V1_0::Result;
-using V1_1::ITunerCallback;
-using V1_1::ProgramListResult;
-
-static JavaVM *gvm = nullptr;
-
-static struct {
-    struct {
-        jclass clazz;
-        jfieldID nativeContext;
-        jmethodID handleHwFailure;
-        jmethodID onError;
-        jmethodID onConfigurationChanged;
-        jmethodID onProgramInfoChanged;
-    } TunerCallback;
-} gjni;
-
-// from frameworks/base/core/java/android/hardware/radio/RadioTuner.java
-enum class TunerError : jint {
-    HARDWARE_FAILURE = 0,
-    SERVER_DIED = 1,
-    CANCELLED = 2,
-    SCAN_TIMEOUT = 3,
-    CONFIG = 4,
-};
-
-static Mutex gContextMutex;
-
-class NativeCallback : public ITunerCallback {
-    jobject mJTuner;
-    jobject mJCallback;
-    NativeCallbackThread mCallbackThread;
-    HalRevision mHalRev;
-
-    DISALLOW_COPY_AND_ASSIGN(NativeCallback);
-
-public:
-    NativeCallback(JNIEnv *env, jobject jTuner, jobject jCallback, HalRevision halRev);
-    virtual ~NativeCallback();
-
-    void detach();
-
-    virtual Return<void> hardwareFailure();
-    virtual Return<void> configChange(Result result, const BandConfig& config);
-    virtual Return<void> tuneComplete(Result result, const V1_0::ProgramInfo& info);
-    virtual Return<void> afSwitch(const V1_0::ProgramInfo& info);
-    virtual Return<void> antennaStateChange(bool connected);
-    virtual Return<void> trafficAnnouncement(bool active);
-    virtual Return<void> emergencyAnnouncement(bool active);
-    virtual Return<void> newMetadata(uint32_t channel, uint32_t subChannel,
-            const hidl_vec<MetaData>& metadata);
-    virtual Return<void> tuneComplete_1_1(Result result, const V1_1::ProgramInfo& info);
-    virtual Return<void> afSwitch_1_1(const V1_1::ProgramInfo& info);
-    virtual Return<void> backgroundScanAvailable(bool isAvailable);
-    virtual Return<void> backgroundScanComplete(ProgramListResult result);
-    virtual Return<void> programListChanged();
-};
-
-struct TunerCallbackContext {
-    TunerCallbackContext() {}
-
-    sp<NativeCallback> mNativeCallback;
-
-private:
-    DISALLOW_COPY_AND_ASSIGN(TunerCallbackContext);
-};
-
-NativeCallback::NativeCallback(JNIEnv *env, jobject jTuner, jobject jCallback, HalRevision halRev)
-        : mCallbackThread(gvm), mHalRev(halRev) {
-    ALOGV("NativeCallback()");
-    mJTuner = env->NewGlobalRef(jTuner);
-    mJCallback = env->NewGlobalRef(jCallback);
-}
-
-NativeCallback::~NativeCallback() {
-    ALOGV("~NativeCallback()");
-
-    // stop callback thread before dereferencing client callback
-    mCallbackThread.stop();
-
-    JNIEnv *env = nullptr;
-    gvm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_4);
-    if (env != nullptr) {
-        env->DeleteGlobalRef(mJTuner);
-        env->DeleteGlobalRef(mJCallback);
-    }
-}
-
-void NativeCallback::detach() {
-    // stop callback thread to ignore further calls
-    mCallbackThread.stop();
-}
-
-Return<void> NativeCallback::hardwareFailure() {
-    mCallbackThread.enqueue([this](JNIEnv *env) {
-        env->CallVoidMethod(mJCallback, gjni.TunerCallback.handleHwFailure);
-    });
-
-    return Return<void>();
-}
-
-Return<void> NativeCallback::configChange(Result result, const BandConfig& config) {
-    ALOGV("configChange(%d)", result);
-
-    mCallbackThread.enqueue([result, config, this](JNIEnv *env) {
-        if (result == Result::OK) {
-            auto region = Tuner::getRegion(env, mJTuner);
-            auto jConfig = convert::BandConfigFromHal(env, config, region);
-            if (jConfig == nullptr) return;
-            env->CallVoidMethod(mJCallback, gjni.TunerCallback.onConfigurationChanged,
-                    jConfig.get());
-        } else {
-            env->CallVoidMethod(mJCallback, gjni.TunerCallback.onError, TunerError::CONFIG);
-        }
-    });
-
-    return Return<void>();
-}
-
-Return<void> NativeCallback::tuneComplete(Result result, const V1_0::ProgramInfo& info) {
-    ALOGV("tuneComplete(%d)", result);
-
-    if (mHalRev > HalRevision::V1_0) {
-        ALOGD("1.0 callback was ignored");
-        return Return<void>();
-    }
-
-    V1_1::ProgramInfo info_1_1 {
-        .base = info,
-    };
-    return tuneComplete_1_1(result, info_1_1);
-}
-
-Return<void> NativeCallback::tuneComplete_1_1(Result result, const V1_1::ProgramInfo& info) {
-    ALOGV("tuneComplete_1_1(%d)", result);
-
-    mCallbackThread.enqueue([result, info, this](JNIEnv *env) {
-        if (result == Result::OK) {
-            auto jInfo = convert::ProgramInfoFromHal(env, info);
-            if (jInfo == nullptr) return;
-            env->CallVoidMethod(mJCallback, gjni.TunerCallback.onProgramInfoChanged, jInfo.get());
-        } else {
-            TunerError cause = TunerError::CANCELLED;
-            if (result == Result::TIMEOUT) cause = TunerError::SCAN_TIMEOUT;
-            env->CallVoidMethod(mJCallback, gjni.TunerCallback.onError, cause);
-        }
-    });
-
-    return Return<void>();
-}
-
-Return<void> NativeCallback::afSwitch(const V1_0::ProgramInfo& info) {
-    ALOGE("Not implemented: afSwitch");
-    return Return<void>();
-}
-
-Return<void> NativeCallback::afSwitch_1_1(const V1_1::ProgramInfo& info) {
-    ALOGE("Not implemented: afSwitch_1_1");
-    return Return<void>();
-}
-
-Return<void> NativeCallback::antennaStateChange(bool connected) {
-    ALOGE("Not implemented: antennaStateChange");
-    return Return<void>();
-}
-
-Return<void> NativeCallback::trafficAnnouncement(bool active) {
-    ALOGE("Not implemented: trafficAnnouncement");
-    return Return<void>();
-}
-
-Return<void> NativeCallback::emergencyAnnouncement(bool active) {
-    ALOGE("Not implemented: emergencyAnnouncement");
-    return Return<void>();
-}
-
-Return<void> NativeCallback::newMetadata(uint32_t channel, uint32_t subChannel,
-        const hidl_vec<MetaData>& metadata) {
-    ALOGE("Not implemented: newMetadata");
-    return Return<void>();
-}
-
-Return<void> NativeCallback::backgroundScanAvailable(bool isAvailable) {
-    ALOGE("Not implemented: backgroundScanAvailable");
-    return Return<void>();
-}
-
-Return<void> NativeCallback::backgroundScanComplete(ProgramListResult result) {
-    ALOGE("Not implemented: backgroundScanComplete");
-    return Return<void>();
-}
-
-Return<void> NativeCallback::programListChanged() {
-    ALOGE("Not implemented: programListChanged");
-    return Return<void>();
-}
-
-static TunerCallbackContext& getNativeContext(jlong nativeContextHandle) {
-    auto nativeContext = reinterpret_cast<TunerCallbackContext*>(nativeContextHandle);
-    LOG_ALWAYS_FATAL_IF(nativeContext == nullptr, "Native context not initialized");
-    return *nativeContext;
-}
-
-/**
- * Always lock gContextMutex when using native context.
- */
-static TunerCallbackContext& getNativeContext(JNIEnv *env, jobject jTunerCb) {
-    return getNativeContext(env->GetLongField(jTunerCb, gjni.TunerCallback.nativeContext));
-}
-
-static jlong nativeInit(JNIEnv *env, jobject obj, jobject jTuner, jint jHalRev) {
-    ALOGV("nativeInit()");
-    AutoMutex _l(gContextMutex);
-
-    auto halRev = static_cast<HalRevision>(jHalRev);
-
-    auto ctx = new TunerCallbackContext();
-    ctx->mNativeCallback = new NativeCallback(env, jTuner, obj, halRev);
-
-    static_assert(sizeof(jlong) >= sizeof(ctx), "jlong is smaller than a pointer");
-    return reinterpret_cast<jlong>(ctx);
-}
-
-static void nativeFinalize(JNIEnv *env, jobject obj, jlong nativeContext) {
-    ALOGV("nativeFinalize()");
-    AutoMutex _l(gContextMutex);
-
-    auto ctx = reinterpret_cast<TunerCallbackContext*>(nativeContext);
-    delete ctx;
-}
-
-static void nativeDetach(JNIEnv *env, jobject obj, jlong nativeContext) {
-    ALOGV("nativeDetach()");
-    AutoMutex _l(gContextMutex);
-    auto& ctx = getNativeContext(nativeContext);
-
-    if (ctx.mNativeCallback == nullptr) return;
-    ctx.mNativeCallback->detach();
-    ctx.mNativeCallback = nullptr;
-}
-
-sp<ITunerCallback> getNativeCallback(JNIEnv *env, jobject jTunerCallback) {
-    AutoMutex _l(gContextMutex);
-    auto& ctx = getNativeContext(env, jTunerCallback);
-    return ctx.mNativeCallback;
-}
-
-static const JNINativeMethod gTunerCallbackMethods[] = {
-    { "nativeInit", "(Lcom/android/server/radio/Tuner;I)J", (void*)nativeInit },
-    { "nativeFinalize", "(J)V", (void*)nativeFinalize },
-    { "nativeDetach", "(J)V", (void*)nativeDetach },
-};
-
-} // namespace TunerCallback
-} // namespace radio
-} // namespace server
-
-void register_android_server_radio_TunerCallback(JavaVM *vm, JNIEnv *env) {
-    using namespace server::radio::TunerCallback;
-
-    gvm = vm;
-
-    auto tunerCbClass = FindClassOrDie(env, "com/android/server/radio/TunerCallback");
-    gjni.TunerCallback.clazz = MakeGlobalRefOrDie(env, tunerCbClass);
-    gjni.TunerCallback.nativeContext = GetFieldIDOrDie(env, tunerCbClass, "mNativeContext", "J");
-    gjni.TunerCallback.handleHwFailure = GetMethodIDOrDie(env, tunerCbClass, "handleHwFailure", "()V");
-    gjni.TunerCallback.onError = GetMethodIDOrDie(env, tunerCbClass, "onError", "(I)V");
-    gjni.TunerCallback.onConfigurationChanged = GetMethodIDOrDie(env, tunerCbClass,
-            "onConfigurationChanged", "(Landroid/hardware/radio/RadioManager$BandConfig;)V");
-    gjni.TunerCallback.onProgramInfoChanged = GetMethodIDOrDie(env, tunerCbClass,
-            "onProgramInfoChanged", "(Landroid/hardware/radio/RadioManager$ProgramInfo;)V");
-
-    auto res = jniRegisterNativeMethods(env, "com/android/server/radio/TunerCallback",
-            gTunerCallbackMethods, NELEM(gTunerCallbackMethods));
-    LOG_ALWAYS_FATAL_IF(res < 0, "Unable to register native methods.");
-}
-
-} // namespace android
diff --git a/services/core/jni/com_android_server_radio_Tuner_TunerCallback.h b/services/core/jni/com_android_server_radio_Tuner_TunerCallback.h
deleted file mode 100644
index 35a4d69..0000000
--- a/services/core/jni/com_android_server_radio_Tuner_TunerCallback.h
+++ /dev/null
@@ -1,45 +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.
- */
-
-// TODO(b/36863239): rename s/_Tuner_TunerCallback/_TunerCallback/, as this
-// module is no longer a part of Tuner - it's an independent java class.
-#ifndef _ANDROID_SERVER_RADIO_TUNERCALLBACK_H
-#define _ANDROID_SERVER_RADIO_TUNERCALLBACK_H
-
-#include "JavaRef.h"
-#include "NativeCallbackThread.h"
-#include "com_android_server_radio_types.h"
-
-#include <android/hardware/broadcastradio/1.1/ITunerCallback.h>
-#include <jni.h>
-
-namespace android {
-
-void register_android_server_radio_TunerCallback(JavaVM *vm, JNIEnv *env);
-
-namespace server {
-namespace radio {
-namespace TunerCallback {
-
-sp<hardware::broadcastradio::V1_1::ITunerCallback>
-getNativeCallback(JNIEnv *env, jobject jTunerCallback);
-
-} // namespace TunerCallback
-} // namespace radio
-} // namespace server
-} // namespace android
-
-#endif // _ANDROID_SERVER_RADIO_TUNERCALLBACK_H
diff --git a/services/core/jni/com_android_server_radio_convert.cpp b/services/core/jni/com_android_server_radio_convert.cpp
deleted file mode 100644
index 19abf8a..0000000
--- a/services/core/jni/com_android_server_radio_convert.cpp
+++ /dev/null
@@ -1,397 +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 "radio.convert.jni"
-#define LOG_NDEBUG 0
-
-#include "com_android_server_radio_convert.h"
-
-#include <core_jni_helpers.h>
-#include <utils/Log.h>
-#include <JNIHelp.h>
-
-namespace android {
-namespace server {
-namespace radio {
-namespace convert {
-
-using hardware::Return;
-using hardware::hidl_vec;
-
-using V1_0::Band;
-using V1_0::Deemphasis;
-using V1_0::Direction;
-using V1_0::MetadataType;
-using V1_0::Result;
-using V1_0::Rds;
-using V1_1::ProgramListResult;
-
-static struct {
-    struct {
-        jfieldID descriptor;
-    } BandConfig;
-    struct {
-        jclass clazz;
-        jmethodID cstor;
-        jfieldID stereo;
-        jfieldID rds;
-        jfieldID ta;
-        jfieldID af;
-        jfieldID ea;
-    } FmBandConfig;
-    struct {
-        jclass clazz;
-        jmethodID cstor;
-        jfieldID stereo;
-    } AmBandConfig;
-
-    struct {
-        jfieldID region;
-        jfieldID type;
-        jfieldID lowerLimit;
-        jfieldID upperLimit;
-        jfieldID spacing;
-    } BandDescriptor;
-
-    struct {
-        jclass clazz;
-        jmethodID cstor;
-    } ProgramInfo;
-
-    struct {
-        jclass clazz;
-        jmethodID cstor;
-        jmethodID putIntFromNative;
-        jmethodID putStringFromNative;
-        jmethodID putBitmapFromNative;
-        jmethodID putClockFromNative;
-    } RadioMetadata;
-
-    struct {
-        jclass clazz;
-        jmethodID cstor;
-    } RuntimeException;
-
-    struct {
-        jclass clazz;
-        jmethodID cstor;
-    } ParcelableException;
-} gjni;
-
-bool __ThrowIfFailedHidl(JNIEnv *env, const hardware::details::return_status &hidlResult) {
-    if (hidlResult.isOk()) return false;
-
-    ThrowParcelableRuntimeException(env, "HIDL call failed: " + hidlResult.description());
-    return true;
-}
-
-bool __ThrowIfFailed(JNIEnv *env, const Result halResult) {
-    switch (halResult) {
-        case Result::OK:
-            return false;
-        case Result::NOT_INITIALIZED:
-            ThrowParcelableRuntimeException(env, "Result::NOT_INITIALIZED");
-            return true;
-        case Result::INVALID_ARGUMENTS:
-            jniThrowException(env, "java/lang/IllegalArgumentException",
-                    "Result::INVALID_ARGUMENTS");
-            return true;
-        case Result::INVALID_STATE:
-            jniThrowException(env, "java/lang/IllegalStateException", "Result::INVALID_STATE");
-            return true;
-        case Result::TIMEOUT:
-            ThrowParcelableRuntimeException(env, "Result::TIMEOUT (unexpected here)");
-            return true;
-        default:
-            ThrowParcelableRuntimeException(env, "Unknown failure, result: "
-                    + std::to_string(static_cast<int32_t>(halResult)));
-            return true;
-    }
-}
-
-bool __ThrowIfFailed(JNIEnv *env, const ProgramListResult halResult) {
-    switch (halResult) {
-        case ProgramListResult::NOT_READY:
-            jniThrowException(env, "java/lang/IllegalStateException", "Scan is in progress");
-            return true;
-        case ProgramListResult::NOT_STARTED:
-            jniThrowException(env, "java/lang/IllegalStateException", "Scan has not been started");
-            return true;
-        case ProgramListResult::UNAVAILABLE:
-            ThrowParcelableRuntimeException(env,
-                    "ProgramListResult::UNAVAILABLE (unexpected here)");
-            return true;
-        default:
-            return __ThrowIfFailed(env, static_cast<Result>(halResult));
-    }
-}
-
-void ThrowParcelableRuntimeException(JNIEnv *env, const std::string& msg) {
-    EnvWrapper wrap(env);
-
-    auto jMsg = wrap(env->NewStringUTF(msg.c_str()));
-    auto runtimeExc = wrap(env->NewObject(gjni.RuntimeException.clazz,
-            gjni.RuntimeException.cstor, jMsg.get()));
-    auto parcelableExc = wrap(env->NewObject(gjni.ParcelableException.clazz,
-            gjni.ParcelableException.cstor, runtimeExc.get()));
-
-    auto res = env->Throw(static_cast<jthrowable>(parcelableExc.get()));
-    ALOGE_IF(res != JNI_OK, "Couldn't throw parcelable runtime exception");
-}
-
-static Rds RdsForRegion(bool rds, Region region) {
-    if (!rds) return Rds::NONE;
-
-    switch(region) {
-        case Region::ITU_1:
-        case Region::OIRT:
-        case Region::JAPAN:
-        case Region::KOREA:
-            return Rds::WORLD;
-        case Region::ITU_2:
-            return Rds::US;
-        default:
-            ALOGE("Unexpected region: %d", region);
-            return Rds::NONE;
-    }
-}
-
-static Deemphasis DeemphasisForRegion(Region region) {
-    switch(region) {
-        case Region::KOREA:
-        case Region::ITU_2:
-            return Deemphasis::D75;
-        case Region::ITU_1:
-        case Region::OIRT:
-        case Region::JAPAN:
-            return Deemphasis::D50;
-        default:
-            ALOGE("Unexpected region: %d", region);
-            return Deemphasis::D50;
-    }
-}
-
-JavaRef<jobject> BandConfigFromHal(JNIEnv *env, const V1_0::BandConfig &config, Region region) {
-    ALOGV("BandConfigFromHal()");
-    EnvWrapper wrap(env);
-
-    jint spacing = config.spacings.size() > 0 ? config.spacings[0] : 0;
-    ALOGW_IF(config.spacings.size() == 0, "No channel spacing specified");
-
-    switch (config.type) {
-        case Band::FM:
-        case Band::FM_HD: {
-            auto& fm = config.ext.fm;
-            return wrap(env->NewObject(gjni.FmBandConfig.clazz, gjni.FmBandConfig.cstor,
-                    region, config.type, config.lowerLimit, config.upperLimit, spacing,
-                    fm.stereo, fm.rds != Rds::NONE, fm.ta, fm.af, fm.ea));
-        }
-        case Band::AM:
-        case Band::AM_HD: {
-            auto& am = config.ext.am;
-            return wrap(env->NewObject(gjni.AmBandConfig.clazz, gjni.AmBandConfig.cstor,
-                    region, config.type, config.lowerLimit, config.upperLimit, spacing,
-                    am.stereo));
-        }
-        default:
-            ALOGE("Unsupported band type: %d", config.type);
-            return nullptr;
-    }
-}
-
-V1_0::BandConfig BandConfigToHal(JNIEnv *env, jobject jConfig, Region &region) {
-    ALOGV("BandConfigToHal()");
-    auto jDescriptor = env->GetObjectField(jConfig, gjni.BandConfig.descriptor);
-    if (jDescriptor == nullptr) {
-        ALOGE("Descriptor is missing");
-        return {};
-    }
-
-    region = static_cast<Region>(env->GetIntField(jDescriptor, gjni.BandDescriptor.region));
-
-    V1_0::BandConfig config = {};
-    config.type = static_cast<Band>(env->GetIntField(jDescriptor, gjni.BandDescriptor.type));
-    config.antennaConnected = false;  // just don't set it
-    config.lowerLimit = env->GetIntField(jDescriptor, gjni.BandDescriptor.lowerLimit);
-    config.upperLimit = env->GetIntField(jDescriptor, gjni.BandDescriptor.upperLimit);
-    config.spacings = hidl_vec<uint32_t>({
-        static_cast<uint32_t>(env->GetIntField(jDescriptor, gjni.BandDescriptor.spacing))
-    });
-
-    if (env->IsInstanceOf(jConfig, gjni.FmBandConfig.clazz)) {
-        auto& fm = config.ext.fm;
-        fm.deemphasis = DeemphasisForRegion(region);
-        fm.stereo = env->GetBooleanField(jConfig, gjni.FmBandConfig.stereo);
-        fm.rds = RdsForRegion(env->GetBooleanField(jConfig, gjni.FmBandConfig.rds), region);
-        fm.ta = env->GetBooleanField(jConfig, gjni.FmBandConfig.ta);
-        fm.af = env->GetBooleanField(jConfig, gjni.FmBandConfig.af);
-        fm.ea = env->GetBooleanField(jConfig, gjni.FmBandConfig.ea);
-    } else if (env->IsInstanceOf(jConfig, gjni.AmBandConfig.clazz)) {
-        auto& am = config.ext.am;
-        am.stereo = env->GetBooleanField(jConfig, gjni.AmBandConfig.stereo);
-    } else {
-        ALOGE("Unexpected band config type");
-        return {};
-    }
-
-    return config;
-}
-
-Direction DirectionToHal(bool directionDown) {
-    return directionDown ? Direction::DOWN : Direction::UP;
-}
-
-static JavaRef<jobject> MetadataFromHal(JNIEnv *env, const hidl_vec<V1_0::MetaData> metadata) {
-    ALOGV("MetadataFromHal()");
-    EnvWrapper wrap(env);
-
-    if (metadata.size() == 0) return nullptr;
-
-    auto jMetadata = wrap(env->NewObject(gjni.RadioMetadata.clazz, gjni.RadioMetadata.cstor));
-
-    for (auto& item : metadata) {
-        jint key = static_cast<jint>(item.key);
-        jint status = 0;
-        switch (item.type) {
-            case MetadataType::INT:
-                ALOGV("metadata INT %d", key);
-                status = env->CallIntMethod(jMetadata.get(), gjni.RadioMetadata.putIntFromNative,
-                        key, item.intValue);
-                break;
-            case MetadataType::TEXT: {
-                ALOGV("metadata TEXT %d", key);
-                auto value = wrap(env->NewStringUTF(item.stringValue.c_str()));
-                status = env->CallIntMethod(jMetadata.get(), gjni.RadioMetadata.putStringFromNative,
-                        key, value.get());
-                break;
-            }
-            case MetadataType::RAW: {
-                ALOGV("metadata RAW %d", key);
-                auto len = item.rawValue.size();
-                if (len == 0) break;
-                auto value = wrap(env->NewByteArray(len));
-                if (value == nullptr) {
-                    ALOGE("Failed to allocate byte array of len %zu", len);
-                    break;
-                }
-                env->SetByteArrayRegion(value.get(), 0, len,
-                        reinterpret_cast<const jbyte*>(item.rawValue.data()));
-                status = env->CallIntMethod(jMetadata.get(), gjni.RadioMetadata.putBitmapFromNative,
-                        key, value.get());
-                break;
-            }
-            case MetadataType::CLOCK:
-                ALOGV("metadata CLOCK %d", key);
-                status = env->CallIntMethod(jMetadata.get(), gjni.RadioMetadata.putClockFromNative,
-                        key, item.clockValue.utcSecondsSinceEpoch,
-                        item.clockValue.timezoneOffsetInMinutes);
-                break;
-            default:
-                ALOGW("invalid metadata type %d", item.type);
-        }
-        ALOGE_IF(status != 0, "Failed inserting metadata %d (of type %d)", key, item.type);
-    }
-
-    return jMetadata;
-}
-
-static JavaRef<jobject> ProgramInfoFromHal(JNIEnv *env, const V1_0::ProgramInfo &info10,
-        const V1_1::ProgramInfo *info11) {
-    ALOGV("ProgramInfoFromHal()");
-    EnvWrapper wrap(env);
-
-    auto jMetadata = MetadataFromHal(env, info10.metadata);
-    auto jVendorExtension = info11 ?
-            wrap(env->NewStringUTF(info11->vendorExension.c_str())) : nullptr;
-
-    return wrap(env->NewObject(gjni.ProgramInfo.clazz, gjni.ProgramInfo.cstor, info10.channel,
-            info10.subChannel, info10.tuned, info10.stereo, info10.digital, info10.signalStrength,
-            jMetadata.get(), info11 ? info11->flags : 0, jVendorExtension.get()));
-}
-
-JavaRef<jobject> ProgramInfoFromHal(JNIEnv *env, const V1_0::ProgramInfo &info) {
-    return ProgramInfoFromHal(env, info, nullptr);
-}
-
-JavaRef<jobject> ProgramInfoFromHal(JNIEnv *env, const V1_1::ProgramInfo &info) {
-    return ProgramInfoFromHal(env, info.base, &info);
-}
-
-} // namespace convert
-} // namespace radio
-} // namespace server
-
-void register_android_server_radio_convert(JNIEnv *env) {
-    using namespace server::radio::convert;
-
-    auto bandConfigClass = FindClassOrDie(env, "android/hardware/radio/RadioManager$BandConfig");
-    gjni.BandConfig.descriptor = GetFieldIDOrDie(env, bandConfigClass,
-            "mDescriptor", "Landroid/hardware/radio/RadioManager$BandDescriptor;");
-
-    auto fmBandConfigClass = FindClassOrDie(env,
-            "android/hardware/radio/RadioManager$FmBandConfig");
-    gjni.FmBandConfig.clazz = MakeGlobalRefOrDie(env, fmBandConfigClass);
-    gjni.FmBandConfig.cstor = GetMethodIDOrDie(env, fmBandConfigClass,
-            "<init>", "(IIIIIZZZZZ)V");
-    gjni.FmBandConfig.stereo = GetFieldIDOrDie(env, fmBandConfigClass, "mStereo", "Z");
-    gjni.FmBandConfig.rds = GetFieldIDOrDie(env, fmBandConfigClass, "mRds", "Z");
-    gjni.FmBandConfig.ta = GetFieldIDOrDie(env, fmBandConfigClass, "mTa", "Z");
-    gjni.FmBandConfig.af = GetFieldIDOrDie(env, fmBandConfigClass, "mAf", "Z");
-    gjni.FmBandConfig.ea = GetFieldIDOrDie(env, fmBandConfigClass, "mEa", "Z");
-
-    auto amBandConfigClass = FindClassOrDie(env,
-            "android/hardware/radio/RadioManager$AmBandConfig");
-    gjni.AmBandConfig.clazz = MakeGlobalRefOrDie(env, amBandConfigClass);
-    gjni.AmBandConfig.cstor = GetMethodIDOrDie(env, amBandConfigClass, "<init>", "(IIIIIZ)V");
-    gjni.AmBandConfig.stereo = GetFieldIDOrDie(env, amBandConfigClass, "mStereo", "Z");
-
-    auto bandDescriptorClass = FindClassOrDie(env,
-            "android/hardware/radio/RadioManager$BandDescriptor");
-    gjni.BandDescriptor.region = GetFieldIDOrDie(env, bandDescriptorClass, "mRegion", "I");
-    gjni.BandDescriptor.type = GetFieldIDOrDie(env, bandDescriptorClass, "mType", "I");
-    gjni.BandDescriptor.lowerLimit = GetFieldIDOrDie(env, bandDescriptorClass, "mLowerLimit", "I");
-    gjni.BandDescriptor.upperLimit = GetFieldIDOrDie(env, bandDescriptorClass, "mUpperLimit", "I");
-    gjni.BandDescriptor.spacing = GetFieldIDOrDie(env, bandDescriptorClass, "mSpacing", "I");
-
-    auto programInfoClass = FindClassOrDie(env, "android/hardware/radio/RadioManager$ProgramInfo");
-    gjni.ProgramInfo.clazz = MakeGlobalRefOrDie(env, programInfoClass);
-    gjni.ProgramInfo.cstor = GetMethodIDOrDie(env, programInfoClass, "<init>",
-            "(IIZZZILandroid/hardware/radio/RadioMetadata;ILjava/lang/String;)V");
-
-    auto radioMetadataClass = FindClassOrDie(env, "android/hardware/radio/RadioMetadata");
-    gjni.RadioMetadata.clazz = MakeGlobalRefOrDie(env, radioMetadataClass);
-    gjni.RadioMetadata.cstor = GetMethodIDOrDie(env, radioMetadataClass, "<init>", "()V");
-    gjni.RadioMetadata.putIntFromNative = GetMethodIDOrDie(env, radioMetadataClass,
-            "putIntFromNative", "(II)I");
-    gjni.RadioMetadata.putStringFromNative = GetMethodIDOrDie(env, radioMetadataClass,
-            "putStringFromNative", "(ILjava/lang/String;)I");
-    gjni.RadioMetadata.putBitmapFromNative = GetMethodIDOrDie(env, radioMetadataClass,
-            "putBitmapFromNative", "(I[B)I");
-    gjni.RadioMetadata.putClockFromNative = GetMethodIDOrDie(env, radioMetadataClass,
-            "putClockFromNative", "(IJI)I");
-
-    auto runtimeExcClass = FindClassOrDie(env, "java/lang/RuntimeException");
-    gjni.RuntimeException.clazz = MakeGlobalRefOrDie(env, runtimeExcClass);
-    gjni.RuntimeException.cstor = GetMethodIDOrDie(env, runtimeExcClass, "<init>",
-            "(Ljava/lang/String;)V");
-
-    auto parcelableExcClass = FindClassOrDie(env, "android/os/ParcelableException");
-    gjni.ParcelableException.clazz = MakeGlobalRefOrDie(env, parcelableExcClass);
-    gjni.ParcelableException.cstor = GetMethodIDOrDie(env, parcelableExcClass, "<init>",
-            "(Ljava/lang/Throwable;)V");
-}
-
-} // namespace android
diff --git a/services/core/jni/com_android_server_radio_convert.h b/services/core/jni/com_android_server_radio_convert.h
deleted file mode 100644
index 6f6774b..0000000
--- a/services/core/jni/com_android_server_radio_convert.h
+++ /dev/null
@@ -1,69 +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.
- */
-
-#ifndef _ANDROID_SERVER_RADIO_CONVERT_H
-#define _ANDROID_SERVER_RADIO_CONVERT_H
-
-#include "JavaRef.h"
-#include "com_android_server_radio_types.h"
-
-#include <android/hardware/broadcastradio/1.1/types.h>
-#include <jni.h>
-
-namespace android {
-
-void register_android_server_radio_convert(JNIEnv *env);
-
-namespace server {
-namespace radio {
-namespace convert {
-
-namespace V1_0 = hardware::broadcastradio::V1_0;
-namespace V1_1 = hardware::broadcastradio::V1_1;
-
-JavaRef<jobject> BandConfigFromHal(JNIEnv *env, const V1_0::BandConfig &config, Region region);
-V1_0::BandConfig BandConfigToHal(JNIEnv *env, jobject jConfig, Region &region);
-
-V1_0::Direction DirectionToHal(bool directionDown);
-
-JavaRef<jobject> ProgramInfoFromHal(JNIEnv *env, const V1_0::ProgramInfo &info);
-JavaRef<jobject> ProgramInfoFromHal(JNIEnv *env, const V1_1::ProgramInfo &info);
-
-
-void ThrowParcelableRuntimeException(JNIEnv *env, const std::string& msg);
-
-// These three are only for internal use by template functions below.
-bool __ThrowIfFailedHidl(JNIEnv *env,
-        const hardware::details::return_status &hidlResult);
-bool __ThrowIfFailed(JNIEnv *env, const V1_0::Result halResult);
-bool __ThrowIfFailed(JNIEnv *env, const V1_1::ProgramListResult halResult);
-
-template <typename T>
-bool ThrowIfFailed(JNIEnv *env, const hardware::Return<void> &hidlResult, const T halResult) {
-    return __ThrowIfFailedHidl(env, hidlResult) || __ThrowIfFailed(env, halResult);
-}
-
-template <typename T>
-bool ThrowIfFailed(JNIEnv *env, const hardware::Return<T> &hidlResult) {
-    return __ThrowIfFailedHidl(env, hidlResult) || __ThrowIfFailed(env, static_cast<T>(hidlResult));
-}
-
-} // namespace convert
-} // namespace radio
-} // namespace server
-} // namespace android
-
-#endif // _ANDROID_SERVER_RADIO_CONVERT_H
diff --git a/services/core/jni/com_android_server_radio_types.h b/services/core/jni/com_android_server_radio_types.h
deleted file mode 100644
index 36f7643..0000000
--- a/services/core/jni/com_android_server_radio_types.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _ANDROID_SERVER_RADIO_TYPES_H
-#define _ANDROID_SERVER_RADIO_TYPES_H
-
-#include <jni.h>
-
-namespace android {
-namespace server {
-namespace radio {
-
-/* Most of these enums are dereived from Java code, based at
- * frameworks/base/core/java/android/hardware/radio/RadioManager.java.
- */
-
-enum class HalRevision : jint {
-    V1_0,
-    V1_1,
-};
-
-// Keep in sync with STATUS_* constants from RadioManager.java.
-enum class Status : jint {
-    OK = 0,
-    ERROR = -0x80000000ll,  // Integer.MIN_VALUE
-    PERMISSION_DENIED = -1,  // -EPERM
-    NO_INIT = -19,  // -ENODEV
-    BAD_VALUE = -22,  // -EINVAL
-    DEAD_OBJECT = -32,  // -EPIPE
-    INVALID_OPERATION = -38,  // -ENOSYS
-    TIMED_OUT = -110,  // -ETIMEDOUT
-};
-
-// Keep in sync with REGION_* constants from RadioManager.java.
-enum class Region : jint {
-    ITU_1 = 0,
-    ITU_2 = 1,
-    OIRT = 2,
-    JAPAN = 3,
-    KOREA = 4,
-};
-
-} // namespace radio
-} // namespace server
-} // namespace android
-
-#endif // _ANDROID_SERVER_RADIO_TYPES_H
diff --git a/services/core/jni/com_android_server_tv_TvInputHal.cpp b/services/core/jni/com_android_server_tv_TvInputHal.cpp
index 78c0fa7..93c4829 100644
--- a/services/core/jni/com_android_server_tv_TvInputHal.cpp
+++ b/services/core/jni/com_android_server_tv_TvInputHal.cpp
@@ -21,7 +21,7 @@
 #include "android_os_MessageQueue.h"
 #include "android_runtime/AndroidRuntime.h"
 #include "android_runtime/android_view_Surface.h"
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 
 #include <android/hardware/tv/input/1.0/ITvInputCallback.h>
diff --git a/services/core/jni/com_android_server_tv_TvUinputBridge.cpp b/services/core/jni/com_android_server_tv_TvUinputBridge.cpp
index de115c8..980922a 100644
--- a/services/core/jni/com_android_server_tv_TvUinputBridge.cpp
+++ b/services/core/jni/com_android_server_tv_TvUinputBridge.cpp
@@ -20,7 +20,7 @@
 
 #include "jni.h"
 #include <android_runtime/AndroidRuntime.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedUtfChars.h>
 #include <android/keycodes.h>
 
 #include <utils/BitSet.h>
diff --git a/services/core/jni/com_android_server_vr_VrManagerService.cpp b/services/core/jni/com_android_server_vr_VrManagerService.cpp
index 9052697..c675080 100644
--- a/services/core/jni/com_android_server_vr_VrManagerService.cpp
+++ b/services/core/jni/com_android_server_vr_VrManagerService.cpp
@@ -18,7 +18,7 @@
 
 #include <android_runtime/AndroidRuntime.h>
 #include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
 
 #include <android/hardware/vr/1.0/IVr.h>
 #include <utils/Errors.h>
diff --git a/services/core/jni/onload.cpp b/services/core/jni/onload.cpp
index c3617e0..e8ef168 100644
--- a/services/core/jni/onload.cpp
+++ b/services/core/jni/onload.cpp
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-#include "JNIHelp.h"
+#include <nativehelper/JNIHelp.h>
 #include "jni.h"
 #include "utils/Log.h"
 #include "utils/misc.h"
 
-#include "com_android_server_radio_RadioService.h"
-#include "com_android_server_radio_Tuner.h"
+#include "BroadcastRadio/BroadcastRadioService.h"
+#include "BroadcastRadio/Tuner.h"
 
 namespace android {
 int register_android_server_AlarmManagerService(JNIEnv* env);
@@ -67,8 +67,8 @@
     }
     ALOG_ASSERT(env, "Could not retrieve the env!");
 
-    register_android_server_radio_RadioService(env);
-    register_android_server_radio_Tuner(vm, env);
+    register_android_server_broadcastradio_BroadcastRadioService(env);
+    register_android_server_broadcastradio_Tuner(vm, env);
     register_android_server_PowerManagerService(env);
     register_android_server_SerialService(env);
     register_android_server_InputApplicationHandle(env);
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 0b8263f..b0e06eb 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -2022,12 +2022,10 @@
     private void setDeviceOwnerSystemPropertyLocked() {
         final boolean deviceProvisioned =
                 mInjector.settingsGlobalGetInt(Settings.Global.DEVICE_PROVISIONED, 0) != 0;
+        final boolean hasDeviceOwner = mOwners.hasDeviceOwner();
         // If the device is not provisioned and there is currently no device owner, do not set the
-        // read-only system property yet, since Device owner may still be provisioned. For Wear
-        // devices, if there is already a device owner then it's OK to set the property to true now,
-        // regardless the provision state.
-        final boolean isWatchWithDeviceOwner = mIsWatch && mOwners.hasDeviceOwner();
-        if (!isWatchWithDeviceOwner && !deviceProvisioned) {
+        // read-only system property yet, since Device owner may still be provisioned.
+        if (!hasDeviceOwner && !deviceProvisioned) {
             return;
         }
         // Still at the first stage of CryptKeeper double bounce, mOwners.hasDeviceOwner is
@@ -2036,20 +2034,16 @@
             return;
         }
 
-        if (!TextUtils.isEmpty(mInjector.systemPropertiesGet(PROPERTY_DEVICE_OWNER_PRESENT))) {
+        if (!mInjector.systemPropertiesGet(PROPERTY_DEVICE_OWNER_PRESENT, "").isEmpty()) {
             Slog.w(LOG_TAG, "Trying to set ro.device_owner, but it has already been set?");
         } else {
-            if (mOwners.hasDeviceOwner()) {
-                mInjector.systemPropertiesSet(PROPERTY_DEVICE_OWNER_PRESENT, "true");
-                Slog.i(LOG_TAG, "Set ro.device_owner property to true");
+            final String value = Boolean.toString(hasDeviceOwner);
+            mInjector.systemPropertiesSet(PROPERTY_DEVICE_OWNER_PRESENT, value);
+            Slog.i(LOG_TAG, "Set ro.device_owner property to " + value);
 
-                if (mInjector.securityLogGetLoggingEnabledProperty()) {
-                    mSecurityLogMonitor.start();
-                    maybePauseDeviceWideLoggingLocked();
-                }
-            } else {
-                mInjector.systemPropertiesSet(PROPERTY_DEVICE_OWNER_PRESENT, "false");
-                Slog.i(LOG_TAG, "Set ro.device_owner property to false");
+            if (hasDeviceOwner && mInjector.securityLogGetLoggingEnabledProperty()) {
+                mSecurityLogMonitor.start();
+                maybePauseDeviceWideLoggingLocked();
             }
         }
     }
@@ -4088,6 +4082,7 @@
             return true;
         }
         enforceFullCrossUsersPermission(userHandle);
+        enforceUserUnlocked(userHandle, parent);
 
         synchronized (this) {
             // This API can only be called by an active device admin,
@@ -4107,7 +4102,8 @@
         enforceManagedProfile(userHandle, "call APIs refering to the parent profile");
 
         synchronized (this) {
-            int targetUser = getProfileParentId(userHandle);
+            final int targetUser = getProfileParentId(userHandle);
+            enforceUserUnlocked(targetUser, false);
             DevicePolicyData policy = getUserDataUnchecked(getCredentialOwner(userHandle, false));
             return isActivePasswordSufficientForUserLocked(policy, targetUser, false);
         }
@@ -4115,7 +4111,15 @@
 
     private boolean isActivePasswordSufficientForUserLocked(
             DevicePolicyData policy, int userHandle, boolean parent) {
-        enforceUserUnlocked(userHandle, parent);
+        final int requiredPasswordQuality = getPasswordQuality(null, userHandle, parent);
+        if (requiredPasswordQuality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
+            // A special case is when there is no required password quality, then we just return
+            // true since any password would be sufficient. This is for the scenario when a work
+            // profile is first created so there is no information about the current password but
+            // it should be considered sufficient as there is no password requirement either.
+            // This is useful since it short-circuits the password checkpoint for FDE device below.
+            return true;
+        }
 
         if (!mInjector.storageManagerIsFileBasedEncryptionEnabled()
                 && !policy.mPasswordStateHasBeenSetSinceBoot) {
@@ -4127,7 +4131,6 @@
             return policy.mPasswordValidAtLastCheckpoint;
         }
 
-        final int requiredPasswordQuality = getPasswordQuality(null, userHandle, parent);
         if (policy.mActivePasswordMetrics.quality < requiredPasswordQuality) {
             return false;
         }
@@ -4352,18 +4355,16 @@
                 quality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
             }
             final PasswordMetrics metrics = PasswordMetrics.computeForPassword(password);
-            if (quality != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
-                final int realQuality = metrics.quality;
-                if (realQuality < quality
-                        && quality != DevicePolicyManager.PASSWORD_QUALITY_COMPLEX) {
-                    Slog.w(LOG_TAG, "resetPassword: password quality 0x"
-                            + Integer.toHexString(realQuality)
-                            + " does not meet required quality 0x"
-                            + Integer.toHexString(quality));
-                    return false;
-                }
-                quality = Math.max(realQuality, quality);
+            final int realQuality = metrics.quality;
+            if (realQuality < quality
+                    && quality != DevicePolicyManager.PASSWORD_QUALITY_COMPLEX) {
+                Slog.w(LOG_TAG, "resetPassword: password quality 0x"
+                        + Integer.toHexString(realQuality)
+                        + " does not meet required quality 0x"
+                        + Integer.toHexString(quality));
+                return false;
             }
+            quality = Math.max(realQuality, quality);
             int length = getPasswordMinimumLength(null, userHandle, /* parent */ false);
             if (password.length() < length) {
                 Slog.w(LOG_TAG, "resetPassword: password length " + password.length()
@@ -4449,7 +4450,7 @@
                 result = mLockPatternUtils.setLockCredentialWithToken(password,
                         TextUtils.isEmpty(password) ? LockPatternUtils.CREDENTIAL_TYPE_NONE
                                 : LockPatternUtils.CREDENTIAL_TYPE_PASSWORD,
-                        tokenHandle, token, userHandle);
+                        quality, tokenHandle, token, userHandle);
             }
             boolean requireEntry = (flags & DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY) != 0;
             if (requireEntry) {
@@ -5453,6 +5454,11 @@
         }
     }
 
+    /**
+     * Notify DPMS regarding the metric of the current password. This happens when the user changes
+     * the password, but also when the user just unlocks the keyguard. In comparison,
+     * reportPasswordChanged() is only called when the user changes the password.
+     */
     @Override
     public void setActivePasswordState(PasswordMetrics metrics, int userHandle) {
         if (!mHasFeature) {
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 4cdd7fe..4fbd919 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -45,7 +45,7 @@
 import android.os.Trace;
 import android.os.UserHandle;
 import android.os.storage.IStorageManager;
-import android.util.BootTimingsTraceLog;
+import android.util.TimingsTraceLog;
 import android.util.DisplayMetrics;
 import android.util.EventLog;
 import android.util.Slog;
@@ -56,7 +56,6 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.notification.SystemNotificationChannels;
 import com.android.internal.os.BinderInternal;
-import com.android.internal.os.SamplingProfilerIntegration;
 import com.android.internal.util.EmergencyAffordanceManager;
 import com.android.internal.util.ConcurrentUtils;
 import com.android.internal.widget.ILockSettings;
@@ -99,7 +98,7 @@
 import com.android.server.policy.PhoneWindowManager;
 import com.android.server.power.PowerManagerService;
 import com.android.server.power.ShutdownThread;
-import com.android.server.radio.RadioService;
+import com.android.server.broadcastradio.BroadcastRadioService;
 import com.android.server.restrictions.RestrictionsManagerService;
 import com.android.server.security.KeyAttestationApplicationIdProviderService;
 import com.android.server.security.KeyChainSystemService;
@@ -122,7 +121,6 @@
 import java.io.IOException;
 import java.util.Locale;
 import java.util.Timer;
-import java.util.TimerTask;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Future;
 
@@ -136,8 +134,8 @@
     // Tag for timing measurement of non-main asynchronous operations.
     private static final String SYSTEM_SERVER_TIMING_ASYNC_TAG = SYSTEM_SERVER_TIMING_TAG + "Async";
 
-    private static final BootTimingsTraceLog BOOT_TIMINGS_TRACE_LOG
-            = new BootTimingsTraceLog(SYSTEM_SERVER_TIMING_TAG, Trace.TRACE_TAG_SYSTEM_SERVER);
+    private static final TimingsTraceLog BOOT_TIMINGS_TRACE_LOG
+            = new TimingsTraceLog(SYSTEM_SERVER_TIMING_TAG, Trace.TRACE_TAG_SYSTEM_SERVER);
 
     private static final String ENCRYPTING_STATE = "trigger_restart_min_framework";
     private static final String ENCRYPTED_STATE = "1";
@@ -172,6 +170,8 @@
             "com.android.server.wifi.aware.WifiAwareService";
     private static final String WIFI_P2P_SERVICE_CLASS =
             "com.android.server.wifi.p2p.WifiP2pService";
+    private static final String LOWPAN_SERVICE_CLASS =
+            "com.android.server.lowpan.LowpanService";
     private static final String ETHERNET_SERVICE_CLASS =
             "com.android.server.ethernet.EthernetService";
     private static final String JOB_SCHEDULER_SERVICE_CLASS =
@@ -190,6 +190,8 @@
             "com.google.android.clockwork.connectivity.WearConnectivityService";
     private static final String WEAR_DISPLAY_SERVICE_CLASS =
             "com.google.android.clockwork.display.WearDisplayService";
+    private static final String WEAR_LEFTY_SERVICE_CLASS =
+            "com.google.android.clockwork.lefty.WearLeftyService";
     private static final String WEAR_TIME_SERVICE_CLASS =
             "com.google.android.clockwork.time.WearTimeService";
     private static final String ACCOUNT_SERVICE_CLASS =
@@ -200,6 +202,8 @@
             "com.android.server.wallpaper.WallpaperManagerService$Lifecycle";
     private static final String AUTO_FILL_MANAGER_SERVICE_CLASS =
             "com.android.server.autofill.AutofillManagerService";
+    private static final String TIME_ZONE_RULES_MANAGER_SERVICE_CLASS =
+            "com.android.server.timezone.RulesManagerService$Lifecycle";
 
     private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst";
 
@@ -328,18 +332,6 @@
             // the property. http://b/11463182
             SystemProperties.set("persist.sys.dalvik.vm.lib.2", VMRuntime.getRuntime().vmLibrary());
 
-            // Enable the sampling profiler.
-            if (SamplingProfilerIntegration.isEnabled()) {
-                SamplingProfilerIntegration.start();
-                mProfilerSnapshotTimer = new Timer();
-                mProfilerSnapshotTimer.schedule(new TimerTask() {
-                        @Override
-                        public void run() {
-                            SamplingProfilerIntegration.writeSnapshot("system_server", null);
-                        }
-                    }, SNAPSHOT_INTERVAL, SNAPSHOT_INTERVAL);
-            }
-
             // Mmmmmm... more memory!
             VMRuntime.getRuntime().clearGrowthLimit();
 
@@ -645,7 +637,7 @@
         // Start sensor service in a separate thread. Completion should be checked
         // before using it.
         mSensorServiceStart = SystemServerInitThreadPool.get().submit(() -> {
-            BootTimingsTraceLog traceLog = new BootTimingsTraceLog(
+            TimingsTraceLog traceLog = new TimingsTraceLog(
                     SYSTEM_SERVER_TIMING_ASYNC_TAG, Trace.TRACE_TAG_SYSTEM_SERVER);
             traceLog.traceBegin(START_SENSOR_SERVICE);
             startSensorService();
@@ -721,14 +713,11 @@
                 false);
         boolean disableTextServices = SystemProperties.getBoolean("config.disable_textservices",
                 false);
-        boolean disableSamplingProfiler = SystemProperties.getBoolean("config.disable_samplingprof",
-                false);
         boolean disableConsumerIr = SystemProperties.getBoolean("config.disable_consumerir", false);
         boolean disableVrManager = SystemProperties.getBoolean("config.disable_vrmanager", false);
         boolean disableCameraService = SystemProperties.getBoolean("config.disable_cameraservice",
                 false);
-        // TODO(b/36863239): Remove when transitioned from native service.
-        boolean enableRadioService = SystemProperties.getBoolean("config.enable_java_radio", false);
+        boolean enableLeftyService = SystemProperties.getBoolean("config.enable_lefty", false);
 
         boolean isEmulator = SystemProperties.get("ro.kernel.qemu").equals("1");
 
@@ -746,7 +735,7 @@
             mZygotePreload = SystemServerInitThreadPool.get().submit(() -> {
                 try {
                     Slog.i(TAG, SECONDARY_ZYGOTE_PRELOAD);
-                    BootTimingsTraceLog traceLog = new BootTimingsTraceLog(
+                    TimingsTraceLog traceLog = new TimingsTraceLog(
                             SYSTEM_SERVER_TIMING_ASYNC_TAG, Trace.TRACE_TAG_SYSTEM_SERVER);
                     traceLog.traceBegin(SECONDARY_ZYGOTE_PRELOAD);
                     if (!Process.zygoteProcess.preloadDefault(Build.SUPPORTED_32_BIT_ABIS[0])) {
@@ -839,9 +828,11 @@
             // because it need to connect to SensorManager. This have to start
             // after START_SENSOR_SERVICE is done.
             SystemServerInitThreadPool.get().submit(() -> {
-                traceBeginAndSlog(START_HIDL_SERVICES);
+                TimingsTraceLog traceLog = new TimingsTraceLog(
+                        SYSTEM_SERVER_TIMING_ASYNC_TAG, Trace.TRACE_TAG_SYSTEM_SERVER);
+                traceLog.traceBegin(START_HIDL_SERVICES);
                 startHidlServices();
-                traceEnd();
+                traceLog.traceEnd();
             }, START_HIDL_SERVICES);
 
             if (!disableVrManager) {
@@ -1107,6 +1098,13 @@
                     traceEnd();
                 }
 
+                if (context.getPackageManager().hasSystemFeature(
+                        PackageManager.FEATURE_LOWPAN)) {
+                    traceBeginAndSlog("StartLowpan");
+                    mSystemServiceManager.startService(LOWPAN_SERVICE_CLASS);
+                    traceEnd();
+                }
+
                 if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_ETHERNET) ||
                     mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)) {
                     traceBeginAndSlog("StartEthernet");
@@ -1215,10 +1213,9 @@
             mSystemServiceManager.startService(AudioService.Lifecycle.class);
             traceEnd();
 
-            if (enableRadioService &&
-                    mPackageManager.hasSystemFeature(PackageManager.FEATURE_RADIO)) {
-                traceBeginAndSlog("StartRadioService");
-                mSystemServiceManager.startService(RadioService.class);
+            if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_BROADCAST_RADIO)) {
+                traceBeginAndSlog("StartBroadcastRadioService");
+                mSystemServiceManager.startService(BroadcastRadioService.class);
                 traceEnd();
             }
 
@@ -1322,11 +1319,13 @@
                     traceEnd();
                 }
 
-                if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_VOICE_RECOGNIZERS)) {
-                    traceBeginAndSlog("StartVoiceRecognitionManager");
-                    mSystemServiceManager.startService(VOICE_RECOGNITION_MANAGER_SERVICE_CLASS);
-                    traceEnd();
-                }
+                // We need to always start this service, regardless of whether the
+                // FEATURE_VOICE_RECOGNIZERS feature is set, because it needs to take care
+                // of initializing various settings.  It will internally modify its behavior
+                // based on that feature.
+                traceBeginAndSlog("StartVoiceRecognitionManager");
+                mSystemServiceManager.startService(VOICE_RECOGNITION_MANAGER_SERVICE_CLASS);
+                traceEnd();
 
                 if (GestureLauncherService.isGestureLauncherEnabled(context.getResources())) {
                     traceBeginAndSlog("StartGestureLauncher");
@@ -1350,18 +1349,16 @@
             }
             traceEnd();
 
-            if (!disableSamplingProfiler) {
-                traceBeginAndSlog("StartSamplingProfilerService");
-                try {
-                    // need to add this service even if SamplingProfilerIntegration.isEnabled()
-                    // is false, because it is this service that detects system property change and
-                    // turns on SamplingProfilerIntegration. Plus, when sampling profiler doesn't work,
-                    // there is little overhead for running this service.
-                    ServiceManager.addService("samplingprofiler",
-                                new SamplingProfilerService(context));
-                } catch (Throwable e) {
-                    reportWtf("starting SamplingProfiler Service", e);
-                }
+            // timezone.RulesManagerService will prevent a device starting up if the chain of trust
+            // required for safe time zone updates might be broken. RuleManagerService cannot do
+            // this check when mOnlyCore == true, so we don't enable the service in this case.
+            // This service requires that JobSchedulerService is already started when it starts.
+            final boolean startRulesManagerService =
+                    !mOnlyCore && context.getResources().getBoolean(
+                            R.bool.config_enableUpdateableTimeZoneRules);
+            if (startRulesManagerService) {
+                traceBeginAndSlog("StartTimeZoneRulesManagerService");
+                mSystemServiceManager.startService(TIME_ZONE_RULES_MANAGER_SERVICE_CLASS);
                 traceEnd();
             }
 
@@ -1525,6 +1522,12 @@
                 mSystemServiceManager.startService(WEAR_DISPLAY_SERVICE_CLASS);
                 mSystemServiceManager.startService(WEAR_TIME_SERVICE_CLASS);
                 traceEnd();
+
+                if (enableLeftyService) {
+                    traceBeginAndSlog("StartWearLeftyService");
+                    mSystemServiceManager.startService(WEAR_LEFTY_SERVICE_CLASS);
+                    traceEnd();
+                }
             }
         }
 
@@ -1687,7 +1690,7 @@
             if (!mOnlyCore) {
                 webviewPrep = SystemServerInitThreadPool.get().submit(() -> {
                     Slog.i(TAG, WEBVIEW_PREPARATION);
-                    BootTimingsTraceLog traceLog = new BootTimingsTraceLog(
+                    TimingsTraceLog traceLog = new TimingsTraceLog(
                             SYSTEM_SERVER_TIMING_ASYNC_TAG, Trace.TRACE_TAG_SYSTEM_SERVER);
                     traceLog.traceBegin(WEBVIEW_PREPARATION);
                     ConcurrentUtils.waitForFutureNoInterrupt(mZygotePreload, "Zygote preload");
diff --git a/services/net/OWNERS b/services/net/OWNERS
new file mode 100644
index 0000000..fa26997
--- /dev/null
+++ b/services/net/OWNERS
@@ -0,0 +1,7 @@
+set noparent
+
+per-file Android.mk = build.master@android.com
+
+ek@google.com
+hugobenichi@google.com
+lorenzo@google.com
diff --git a/services/net/java/android/net/ip/IpManager.java b/services/net/java/android/net/ip/IpManager.java
index 0231991..facdb85 100644
--- a/services/net/java/android/net/ip/IpManager.java
+++ b/services/net/java/android/net/ip/IpManager.java
@@ -23,6 +23,7 @@
 import android.net.DhcpResults;
 import android.net.INetd;
 import android.net.InterfaceConfiguration;
+import android.net.IpPrefix;
 import android.net.LinkAddress;
 import android.net.LinkProperties.ProvisioningChange;
 import android.net.LinkProperties;
@@ -35,6 +36,8 @@
 import android.net.metrics.IpConnectivityLog;
 import android.net.metrics.IpManagerEvent;
 import android.net.util.MultinetworkPolicyTracker;
+import android.net.util.NetdService;
+import android.net.util.NetworkConstants;
 import android.net.util.SharedLog;
 import android.os.INetworkManagementService;
 import android.os.Message;
@@ -52,17 +55,27 @@
 import com.android.internal.R;
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.internal.util.IState;
+import com.android.internal.util.Preconditions;
 import com.android.internal.util.State;
 import com.android.internal.util.StateMachine;
 import com.android.server.net.NetlinkTracker;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
+import java.net.Inet4Address;
+import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.net.NetworkInterface;
 import java.net.SocketException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
 import java.util.Objects;
+import java.util.List;
+import java.util.Set;
 import java.util.StringJoiner;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
 
 
 /**
@@ -309,6 +322,11 @@
                 return this;
             }
 
+            public Builder withInitialConfiguration(InitialConfiguration initialConfig) {
+                mConfig.mInitialConfig = initialConfig;
+                return this;
+            }
+
             public Builder withStaticConfiguration(StaticIpConfiguration staticConfig) {
                 mConfig.mStaticIpConfig = staticConfig;
                 return this;
@@ -343,18 +361,20 @@
         /* package */ boolean mEnableIPv6 = true;
         /* package */ boolean mUsingIpReachabilityMonitor = true;
         /* package */ int mRequestedPreDhcpActionMs;
+        /* package */ InitialConfiguration mInitialConfig;
         /* package */ StaticIpConfiguration mStaticIpConfig;
         /* package */ ApfCapabilities mApfCapabilities;
         /* package */ int mProvisioningTimeoutMs = DEFAULT_TIMEOUT_MS;
         /* package */ int mIPv6AddrGenMode = INetd.IPV6_ADDR_GEN_MODE_STABLE_PRIVACY;
 
-        public ProvisioningConfiguration() {}
+        public ProvisioningConfiguration() {} // used by Builder
 
         public ProvisioningConfiguration(ProvisioningConfiguration other) {
             mEnableIPv4 = other.mEnableIPv4;
             mEnableIPv6 = other.mEnableIPv6;
             mUsingIpReachabilityMonitor = other.mUsingIpReachabilityMonitor;
             mRequestedPreDhcpActionMs = other.mRequestedPreDhcpActionMs;
+            mInitialConfig = InitialConfiguration.copy(other.mInitialConfig);
             mStaticIpConfig = other.mStaticIpConfig;
             mApfCapabilities = other.mApfCapabilities;
             mProvisioningTimeoutMs = other.mProvisioningTimeoutMs;
@@ -367,12 +387,140 @@
                     .add("mEnableIPv6: " + mEnableIPv6)
                     .add("mUsingIpReachabilityMonitor: " + mUsingIpReachabilityMonitor)
                     .add("mRequestedPreDhcpActionMs: " + mRequestedPreDhcpActionMs)
+                    .add("mInitialConfig: " + mInitialConfig)
                     .add("mStaticIpConfig: " + mStaticIpConfig)
                     .add("mApfCapabilities: " + mApfCapabilities)
                     .add("mProvisioningTimeoutMs: " + mProvisioningTimeoutMs)
                     .add("mIPv6AddrGenMode: " + mIPv6AddrGenMode)
                     .toString();
         }
+
+        public boolean isValid() {
+            return (mInitialConfig == null) || mInitialConfig.isValid();
+        }
+    }
+
+    public static class InitialConfiguration {
+        public final Set<LinkAddress> ipAddresses = new HashSet<>();
+        public final Set<IpPrefix> directlyConnectedRoutes = new HashSet<>();
+        public final Set<InetAddress> dnsServers = new HashSet<>();
+        public Inet4Address gateway; // WiFi legacy behavior with static ipv4 config
+
+        public static InitialConfiguration copy(InitialConfiguration config) {
+            if (config == null) {
+                return null;
+            }
+            InitialConfiguration configCopy = new InitialConfiguration();
+            configCopy.ipAddresses.addAll(config.ipAddresses);
+            configCopy.directlyConnectedRoutes.addAll(config.directlyConnectedRoutes);
+            configCopy.dnsServers.addAll(config.dnsServers);
+            return configCopy;
+        }
+
+        @Override
+        public String toString() {
+            return String.format(
+                    "InitialConfiguration(IPs: {%s}, prefixes: {%s}, DNS: {%s}, v4 gateway: %s)",
+                    join(", ", ipAddresses), join(", ", directlyConnectedRoutes),
+                    join(", ", dnsServers), gateway);
+        }
+
+        public boolean isValid() {
+            if (ipAddresses.isEmpty()) {
+                return false;
+            }
+
+            // For every IP address, there must be at least one prefix containing that address.
+            for (LinkAddress addr : ipAddresses) {
+                if (!any(directlyConnectedRoutes, (p) -> p.contains(addr.getAddress()))) {
+                    return false;
+                }
+            }
+            // For every dns server, there must be at least one prefix containing that address.
+            for (InetAddress addr : dnsServers) {
+                if (!any(directlyConnectedRoutes, (p) -> p.contains(addr))) {
+                    return false;
+                }
+            }
+            // All IPv6 LinkAddresses have an RFC7421-suitable prefix length
+            // (read: compliant with RFC4291#section2.5.4).
+            if (any(ipAddresses, not(InitialConfiguration::isPrefixLengthCompliant))) {
+                return false;
+            }
+            // If directlyConnectedRoutes contains an IPv6 default route
+            // then ipAddresses MUST contain at least one non-ULA GUA.
+            if (any(directlyConnectedRoutes, InitialConfiguration::isIPv6DefaultRoute)
+                    && all(ipAddresses, not(InitialConfiguration::isIPv6GUA))) {
+                return false;
+            }
+            // The prefix length of routes in directlyConnectedRoutes be within reasonable
+            // bounds for IPv6: /48-/64 just as we’d accept in RIOs.
+            if (any(directlyConnectedRoutes, not(InitialConfiguration::isPrefixLengthCompliant))) {
+                return false;
+            }
+            // There no more than one IPv4 address
+            if (ipAddresses.stream().filter(Inet4Address.class::isInstance).count() > 1) {
+                return false;
+            }
+
+            return true;
+        }
+
+        /**
+         * @return true if the given list of addressess and routes satisfies provisioning for this
+         * InitialConfiguration. LinkAddresses and RouteInfo objects are not compared with equality
+         * because addresses and routes seen by Netlink will contain additional fields like flags,
+         * interfaces, and so on. If this InitialConfiguration has no IP address specified, the
+         * provisioning check always fails.
+         *
+         * If the given list of routes is null, only addresses are taken into considerations.
+         */
+        public boolean isProvisionedBy(List<LinkAddress> addresses, List<RouteInfo> routes) {
+            if (ipAddresses.isEmpty()) {
+                return false;
+            }
+
+            for (LinkAddress addr : ipAddresses) {
+                if (!any(addresses, (addrSeen) -> addr.isSameAddressAs(addrSeen))) {
+                    return false;
+                }
+            }
+
+            if (routes != null) {
+                for (IpPrefix prefix : directlyConnectedRoutes) {
+                    if (!any(routes, (routeSeen) -> isDirectlyConnectedRoute(routeSeen, prefix))) {
+                        return false;
+                    }
+                }
+            }
+
+            return true;
+        }
+
+        private static boolean isDirectlyConnectedRoute(RouteInfo route, IpPrefix prefix) {
+            return !route.hasGateway() && prefix.equals(route.getDestination());
+        }
+
+        private static boolean isPrefixLengthCompliant(LinkAddress addr) {
+            return addr.isIPv4() || isCompliantIPv6PrefixLength(addr.getPrefixLength());
+        }
+
+        private static boolean isPrefixLengthCompliant(IpPrefix prefix) {
+            return prefix.isIPv4() || isCompliantIPv6PrefixLength(prefix.getPrefixLength());
+        }
+
+        private static boolean isCompliantIPv6PrefixLength(int prefixLength) {
+            return (NetworkConstants.RFC6177_MIN_PREFIX_LENGTH <= prefixLength)
+                    && (prefixLength <= NetworkConstants.RFC7421_PREFIX_LENGTH);
+        }
+
+        private static boolean isIPv6DefaultRoute(IpPrefix prefix) {
+            return prefix.getAddress().equals(Inet6Address.ANY);
+        }
+
+        private static boolean isIPv6GUA(LinkAddress addr) {
+            return addr.isIPv6() && addr.isGlobalPreferred();
+        }
     }
 
     public static final String DUMP_ARG = "ipmanager";
@@ -420,6 +568,7 @@
     private final LocalLog mConnectivityPacketLog;
     private final MessageHandlingLogger mMsgStateLogger;
     private final IpConnectivityLog mMetricsLog = new IpConnectivityLog();
+    private final INetd mNetd;
 
     private NetworkInterface mNetworkInterface;
 
@@ -437,17 +586,24 @@
     private boolean mMulticastFiltering;
     private long mStartTimeMillis;
 
-    public IpManager(Context context, String ifName, Callback callback)
-                throws IllegalArgumentException {
+    public IpManager(Context context, String ifName, Callback callback) {
         this(context, ifName, callback, INetworkManagementService.Stub.asInterface(
-                ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE)));
+                ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE)),
+                NetdService.getInstance());
     }
 
     /**
      * An expanded constructor, useful for dependency injection.
+     * TODO: migrate all test users to mock IpManager directly and remove this ctor.
      */
     public IpManager(Context context, String ifName, Callback callback,
-            INetworkManagementService nwService) throws IllegalArgumentException {
+            INetworkManagementService nwService) {
+        this(context, ifName, callback, nwService, NetdService.getInstance());
+    }
+
+    @VisibleForTesting
+    IpManager(Context context, String ifName, Callback callback,
+            INetworkManagementService nwService, INetd netd) {
         super(IpManager.class.getSimpleName() + "." + ifName);
         mTag = getName();
 
@@ -456,6 +612,7 @@
         mClatInterfaceName = CLAT_PREFIX + ifName;
         mCallback = new LoggingCallbackWrapper(callback);
         mNwService = nwService;
+        mNetd = netd;
 
         mLog = new SharedLog(MAX_LOG_RECORDS, mTag);
         mConnectivityPacketLog = new LocalLog(MAX_PACKET_RECORDS);
@@ -564,6 +721,11 @@
     }
 
     public void startProvisioning(ProvisioningConfiguration req) {
+        if (!req.isValid()) {
+            doImmediateProvisioningFailure(IpManagerEvent.ERROR_INVALID_PROVISIONING);
+            return;
+        }
+
         getNetworkInterface();
 
         mCallback.setNeighborDiscoveryOffload(true);
@@ -716,7 +878,6 @@
         return shouldLog;
     }
 
-    // TODO: Migrate all Log.e(...) to logError(...).
     private void logError(String fmt, Object... args) {
         final String msg = "ERROR " + String.format(fmt, args);
         Log.e(mTag, msg);
@@ -754,10 +915,20 @@
     }
 
     // For now: use WifiStateMachine's historical notion of provisioned.
-    private static boolean isProvisioned(LinkProperties lp) {
+    @VisibleForTesting
+    static boolean isProvisioned(LinkProperties lp, InitialConfiguration config) {
         // For historical reasons, we should connect even if all we have is
         // an IPv4 address and nothing else.
-        return lp.isProvisioned() || lp.hasIPv4Address();
+        if (lp.hasIPv4Address() || lp.isProvisioned()) {
+            return true;
+        }
+        if (config == null) {
+            return false;
+        }
+
+        // When an InitialConfiguration is specified, ignore any difference with previous
+        // properties and instead check if properties observed match the desired properties.
+        return config.isProvisionedBy(lp.getLinkAddresses(), lp.getRoutes());
     }
 
     // TODO: Investigate folding all this into the existing static function
@@ -766,12 +937,11 @@
     // object that is a correct and complete assessment of what changed, taking
     // account of the asymmetries described in the comments in this function.
     // Then switch to using it everywhere (IpReachabilityMonitor, etc.).
-    private ProvisioningChange compareProvisioning(
-            LinkProperties oldLp, LinkProperties newLp) {
+    private ProvisioningChange compareProvisioning(LinkProperties oldLp, LinkProperties newLp) {
         ProvisioningChange delta;
-
-        final boolean wasProvisioned = isProvisioned(oldLp);
-        final boolean isProvisioned = isProvisioned(newLp);
+        InitialConfiguration config = mConfiguration != null ? mConfiguration.mInitialConfig : null;
+        final boolean wasProvisioned = isProvisioned(oldLp, config);
+        final boolean isProvisioned = isProvisioned(newLp, config);
 
         if (!wasProvisioned && isProvisioned) {
             delta = ProvisioningChange.GAINED_PROVISIONING;
@@ -884,10 +1054,6 @@
         return delta;
     }
 
-    private boolean linkPropertiesUnchanged(LinkProperties newLp) {
-        return Objects.equals(newLp, mLinkProperties);
-    }
-
     private LinkProperties assembleLinkProperties() {
         // [1] Create a new LinkProperties object to populate.
         LinkProperties newLp = new LinkProperties();
@@ -934,9 +1100,26 @@
             newLp.setHttpProxy(mHttpProxy);
         }
 
-        if (VDBG) {
-            Log.d(mTag, "newLp{" + newLp + "}");
+        // [5] Add data from InitialConfiguration
+        if (mConfiguration != null && mConfiguration.mInitialConfig != null) {
+            InitialConfiguration config = mConfiguration.mInitialConfig;
+            // Add InitialConfiguration routes and dns server addresses once all addresses
+            // specified in the InitialConfiguration have been observed with Netlink.
+            if (config.isProvisionedBy(newLp.getLinkAddresses(), null)) {
+                for (IpPrefix prefix : config.directlyConnectedRoutes) {
+                    newLp.addRoute(new RouteInfo(prefix, null, mInterfaceName));
+                }
+            }
+            addAllReachableDnsServers(newLp, config.dnsServers);
         }
+        final LinkProperties oldLp = mLinkProperties;
+        if (VDBG) {
+            Log.d(mTag, String.format("Netlink-seen LPs: %s, new LPs: %s; old LPs: %s",
+                    netlinkLinkProperties, newLp, oldLp));
+        }
+
+        // TODO: also learn via netlink routes specified by an InitialConfiguration and specified
+        // from a static IP v4 config instead of manually patching them in in steps [3] and [5].
         return newLp;
     }
 
@@ -955,7 +1138,7 @@
     // Returns false if we have lost provisioning, true otherwise.
     private boolean handleLinkPropertiesUpdate(boolean sendCallbacks) {
         final LinkProperties newLp = assembleLinkProperties();
-        if (linkPropertiesUnchanged(newLp)) {
+        if (Objects.equals(newLp, mLinkProperties)) {
             return true;
         }
         final ProvisioningChange delta = setLinkProperties(newLp);
@@ -1037,7 +1220,7 @@
     }
 
     private void doImmediateProvisioningFailure(int failureType) {
-        if (DBG) { Log.e(mTag, "onProvisioningFailure(): " + failureType); }
+        logError("onProvisioningFailure(): %s", failureType);
         recordMetric(failureType);
         mCallback.onProvisioningFailure(new LinkProperties(mLinkProperties));
     }
@@ -1086,6 +1269,26 @@
         return true;
     }
 
+    private boolean applyInitialConfig(InitialConfiguration config) {
+        if (mNetd == null) {
+            logError("tried to add %s to %s but INetd was null", config, mInterfaceName);
+            return false;
+        }
+
+        // TODO: also support specifying a static IPv4 configuration in InitialConfiguration.
+        for (LinkAddress addr : findAll(config.ipAddresses, LinkAddress::isIPv6)) {
+            try {
+                mNetd.interfaceAddAddress(
+                        mInterfaceName, addr.getAddress().getHostAddress(), addr.getPrefixLength());
+            } catch (ServiceSpecificException | RemoteException e) {
+                logError("failed to add %s to %s: %s", addr, mInterfaceName, e);
+                return false;
+            }
+        }
+
+        return true;
+    }
+
     private boolean startIpReachabilityMonitor() {
         try {
             mIpReachabilityMonitor = new IpReachabilityMonitor(
@@ -1173,7 +1376,7 @@
 
                 case DhcpClient.CMD_ON_QUIT:
                     // Everything is already stopped.
-                    Log.e(mTag, "Unexpected CMD_ON_QUIT (already stopped).");
+                    logError("Unexpected CMD_ON_QUIT (already stopped).");
                     break;
 
                 default:
@@ -1314,6 +1517,14 @@
                 return;
             }
 
+            InitialConfiguration config = mConfiguration.mInitialConfig;
+            if ((config != null) && !applyInitialConfig(config)) {
+                // TODO introduce a new IpManagerEvent constant to distinguish this error case.
+                doImmediateProvisioningFailure(IpManagerEvent.ERROR_INVALID_PROVISIONING);
+                transitionTo(mStoppingState);
+                return;
+            }
+
             if (mConfiguration.mUsingIpReachabilityMonitor && !startIpReachabilityMonitor()) {
                 doImmediateProvisioningFailure(
                         IpManagerEvent.ERROR_STARTING_IPREACHABILITYMONITOR);
@@ -1383,7 +1594,7 @@
                     break;
 
                 case CMD_START:
-                    Log.e(mTag, "ALERT: START received in StartedState. Please fix caller.");
+                    logError("ALERT: START received in StartedState. Please fix caller.");
                     break;
 
                 case CMD_CONFIRM:
@@ -1482,13 +1693,13 @@
                             handleIPv4Failure();
                             break;
                         default:
-                            Log.e(mTag, "Unknown CMD_POST_DHCP_ACTION status:" + msg.arg1);
+                            logError("Unknown CMD_POST_DHCP_ACTION status: %s", msg.arg1);
                     }
                     break;
 
                 case DhcpClient.CMD_ON_QUIT:
                     // DHCPv4 quit early for some reason.
-                    Log.e(mTag, "Unexpected CMD_ON_QUIT.");
+                    logError("Unexpected CMD_ON_QUIT.");
                     mDhcpClient = null;
                     break;
 
@@ -1520,4 +1731,39 @@
                                  receivedInState, processedInState);
         }
     }
+
+    // TODO: extract out into CollectionUtils.
+    static <T> boolean any(Iterable<T> coll, Predicate<T> fn) {
+        for (T t : coll) {
+            if (fn.test(t)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    static <T> boolean all(Iterable<T> coll, Predicate<T> fn) {
+        return !any(coll, not(fn));
+    }
+
+    static <T> Predicate<T> not(Predicate<T> fn) {
+        return (t) -> !fn.test(t);
+    }
+
+    static <T> String join(String delimiter, Collection<T> coll) {
+        return coll.stream().map(Object::toString).collect(Collectors.joining(delimiter));
+    }
+
+    static <T> T find(Iterable<T> coll, Predicate<T> fn) {
+        for (T t: coll) {
+            if (fn.test(t)) {
+              return t;
+            }
+        }
+        return null;
+    }
+
+    static <T> List<T> findAll(Collection<T> coll, Predicate<T> fn) {
+        return coll.stream().filter(fn).collect(Collectors.toList());
+    }
 }
diff --git a/services/net/java/android/net/ip/IpReachabilityMonitor.java b/services/net/java/android/net/ip/IpReachabilityMonitor.java
index 97c9d82..88bd78c 100644
--- a/services/net/java/android/net/ip/IpReachabilityMonitor.java
+++ b/services/net/java/android/net/ip/IpReachabilityMonitor.java
@@ -183,44 +183,14 @@
         final byte[] msg = RtNetlinkNeighborMessage.newNewNeighborMessage(
                 1, ip, StructNdMsg.NUD_PROBE, ifIndex, null);
 
-        int errno = -OsConstants.EPROTO;
-        try (NetlinkSocket nlSocket = new NetlinkSocket(OsConstants.NETLINK_ROUTE)) {
-            final long IO_TIMEOUT = 300L;
-            nlSocket.connectToKernel();
-            nlSocket.sendMessage(msg, 0, msg.length, IO_TIMEOUT);
-            final ByteBuffer bytes = nlSocket.recvMessage(IO_TIMEOUT);
-            // recvMessage() guaranteed to not return null if it did not throw.
-            final NetlinkMessage response = NetlinkMessage.parse(bytes);
-            if (response != null && response instanceof NetlinkErrorMessage &&
-                    (((NetlinkErrorMessage) response).getNlMsgError() != null)) {
-                errno = ((NetlinkErrorMessage) response).getNlMsgError().error;
-                if (errno != 0) {
-                    // TODO: consider ignoring EINVAL (-22), which appears to be
-                    // normal when probing a neighbor for which the kernel does
-                    // not already have / no longer has a link layer address.
-                    Log.e(TAG, "Error " + msgSnippet + ", errmsg=" + response.toString());
-                }
-            } else {
-                String errmsg;
-                if (response == null) {
-                    bytes.position(0);
-                    errmsg = "raw bytes: " + NetlinkConstants.hexify(bytes);
-                } else {
-                    errmsg = response.toString();
-                }
-                Log.e(TAG, "Error " + msgSnippet + ", errmsg=" + errmsg);
-            }
+        try {
+            NetlinkSocket.sendOneShotKernelMessage(OsConstants.NETLINK_ROUTE, msg);
         } catch (ErrnoException e) {
-            Log.e(TAG, "Error " + msgSnippet, e);
-            errno = -e.errno;
-        } catch (InterruptedIOException e) {
-            Log.e(TAG, "Error " + msgSnippet, e);
-            errno = -OsConstants.ETIMEDOUT;
-        } catch (SocketException e) {
-            Log.e(TAG, "Error " + msgSnippet, e);
-            errno = -OsConstants.EIO;
+            Log.e(TAG, "Error " + msgSnippet + ": " + e);
+            return -e.errno;
         }
-        return errno;
+
+        return 0;
     }
 
     public IpReachabilityMonitor(Context context, String ifName, SharedLog log, Callback callback) {
diff --git a/services/net/java/android/net/netlink/ConntrackMessage.java b/services/net/java/android/net/netlink/ConntrackMessage.java
new file mode 100644
index 0000000..605c46b
--- /dev/null
+++ b/services/net/java/android/net/netlink/ConntrackMessage.java
@@ -0,0 +1,117 @@
+/*
+ * 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.netlink;
+
+import static android.net.netlink.NetlinkConstants.alignedLengthOf;
+import static android.net.netlink.StructNlAttr.makeNestedType;
+import static android.net.netlink.StructNlAttr.NLA_HEADERLEN;
+import static android.net.netlink.StructNlMsgHdr.NLM_F_ACK;
+import static android.net.netlink.StructNlMsgHdr.NLM_F_DUMP;
+import static android.net.netlink.StructNlMsgHdr.NLM_F_REPLACE;
+import static android.net.netlink.StructNlMsgHdr.NLM_F_REQUEST;
+import static android.net.util.NetworkConstants.IPV4_ADDR_LEN;
+import static java.nio.ByteOrder.BIG_ENDIAN;
+
+import android.system.OsConstants;
+import android.util.Log;
+import libcore.io.SizeOf;
+
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+
+/**
+ * A NetlinkMessage subclass for netlink conntrack messages.
+ *
+ * see also: &lt;linux_src&gt;/include/uapi/linux/netfilter/nfnetlink_conntrack.h
+ *
+ * @hide
+ */
+public class ConntrackMessage extends NetlinkMessage {
+    public static final int STRUCT_SIZE = StructNlMsgHdr.STRUCT_SIZE + StructNfGenMsg.STRUCT_SIZE;
+
+    public static final short NFNL_SUBSYS_CTNETLINK = 1;
+    public static final short IPCTNL_MSG_CT_NEW = 0;
+
+    // enum ctattr_type
+    public static final short CTA_TUPLE_ORIG  = 1;
+    public static final short CTA_TUPLE_REPLY = 2;
+    public static final short CTA_TIMEOUT     = 7;
+
+    // enum ctattr_tuple
+    public static final short CTA_TUPLE_IP    = 1;
+    public static final short CTA_TUPLE_PROTO = 2;
+
+    // enum ctattr_ip
+    public static final short CTA_IP_V4_SRC = 1;
+    public static final short CTA_IP_V4_DST = 2;
+
+    // enum ctattr_l4proto
+    public static final short CTA_PROTO_NUM      = 1;
+    public static final short CTA_PROTO_SRC_PORT = 2;
+    public static final short CTA_PROTO_DST_PORT = 3;
+
+    public static byte[] newIPv4TimeoutUpdateRequest(
+            int proto, Inet4Address src, int sport, Inet4Address dst, int dport, int timeoutSec) {
+        // *** STYLE WARNING ***
+        //
+        // Code below this point uses extra block indentation to highlight the
+        // packing of nested tuple netlink attribute types.
+        final StructNlAttr ctaTupleOrig = new StructNlAttr(CTA_TUPLE_ORIG,
+                new StructNlAttr(CTA_TUPLE_IP,
+                        new StructNlAttr(CTA_IP_V4_SRC, src),
+                        new StructNlAttr(CTA_IP_V4_DST, dst)),
+                new StructNlAttr(CTA_TUPLE_PROTO,
+                        new StructNlAttr(CTA_PROTO_NUM, (byte) proto),
+                        new StructNlAttr(CTA_PROTO_SRC_PORT, (short) sport, BIG_ENDIAN),
+                        new StructNlAttr(CTA_PROTO_DST_PORT, (short) dport, BIG_ENDIAN)));
+
+        final StructNlAttr ctaTimeout = new StructNlAttr(CTA_TIMEOUT, timeoutSec, BIG_ENDIAN);
+
+        final int payloadLength = ctaTupleOrig.getAlignedLength() + ctaTimeout.getAlignedLength();
+        final byte[] bytes = new byte[STRUCT_SIZE + payloadLength];
+        final ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
+        byteBuffer.order(ByteOrder.nativeOrder());
+
+        final ConntrackMessage ctmsg = new ConntrackMessage();
+        ctmsg.mHeader.nlmsg_len = bytes.length;
+        ctmsg.mHeader.nlmsg_type = (NFNL_SUBSYS_CTNETLINK << 8) | IPCTNL_MSG_CT_NEW;
+        ctmsg.mHeader.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK | NLM_F_REPLACE;
+        ctmsg.mHeader.nlmsg_seq = 1;
+        ctmsg.pack(byteBuffer);
+
+        ctaTupleOrig.pack(byteBuffer);
+        ctaTimeout.pack(byteBuffer);
+
+        return bytes;
+    }
+
+    protected StructNfGenMsg mNfGenMsg;
+
+    private ConntrackMessage() {
+        super(new StructNlMsgHdr());
+        mNfGenMsg = new StructNfGenMsg((byte) OsConstants.AF_INET);
+    }
+
+    public void pack(ByteBuffer byteBuffer) {
+        mHeader.pack(byteBuffer);
+        mNfGenMsg.pack(byteBuffer);
+    }
+}
diff --git a/services/net/java/android/net/netlink/NetlinkSocket.java b/services/net/java/android/net/netlink/NetlinkSocket.java
index 657d48c..a9e0cd9 100644
--- a/services/net/java/android/net/netlink/NetlinkSocket.java
+++ b/services/net/java/android/net/netlink/NetlinkSocket.java
@@ -51,6 +51,47 @@
     private long mLastRecvTimeoutMs;
     private long mLastSendTimeoutMs;
 
+    public static void sendOneShotKernelMessage(int nlProto, byte[] msg) throws ErrnoException {
+        final String errPrefix = "Error in NetlinkSocket.sendOneShotKernelMessage";
+
+        try (NetlinkSocket nlSocket = new NetlinkSocket(nlProto)) {
+            final long IO_TIMEOUT = 300L;
+            nlSocket.connectToKernel();
+            nlSocket.sendMessage(msg, 0, msg.length, IO_TIMEOUT);
+            final ByteBuffer bytes = nlSocket.recvMessage(IO_TIMEOUT);
+            // recvMessage() guaranteed to not return null if it did not throw.
+            final NetlinkMessage response = NetlinkMessage.parse(bytes);
+            if (response != null && response instanceof NetlinkErrorMessage &&
+                    (((NetlinkErrorMessage) response).getNlMsgError() != null)) {
+                final int errno = ((NetlinkErrorMessage) response).getNlMsgError().error;
+                if (errno != 0) {
+                    // TODO: consider ignoring EINVAL (-22), which appears to be
+                    // normal when probing a neighbor for which the kernel does
+                    // not already have / no longer has a link layer address.
+                    Log.e(TAG, errPrefix + ", errmsg=" + response.toString());
+                    // Note: convert kernel errnos (negative) into userspace errnos (positive).
+                    throw new ErrnoException(response.toString(), Math.abs(errno));
+                }
+            } else {
+                final String errmsg;
+                if (response == null) {
+                    bytes.position(0);
+                    errmsg = "raw bytes: " + NetlinkConstants.hexify(bytes);
+                } else {
+                    errmsg = response.toString();
+                }
+                Log.e(TAG, errPrefix + ", errmsg=" + errmsg);
+                throw new ErrnoException(errmsg, OsConstants.EPROTO);
+            }
+        } catch (InterruptedIOException e) {
+            Log.e(TAG, errPrefix, e);
+            throw new ErrnoException(errPrefix, OsConstants.ETIMEDOUT, e);
+        } catch (SocketException e) {
+            Log.e(TAG, errPrefix, e);
+            throw new ErrnoException(errPrefix, OsConstants.EIO, e);
+        }
+    }
+
     public NetlinkSocket(int nlProto) throws ErrnoException {
         mDescriptor = Os.socket(
                 OsConstants.AF_NETLINK, OsConstants.SOCK_DGRAM, nlProto);
diff --git a/services/net/java/android/net/netlink/RtNetlinkNeighborMessage.java b/services/net/java/android/net/netlink/RtNetlinkNeighborMessage.java
index 02df131..e784fbb 100644
--- a/services/net/java/android/net/netlink/RtNetlinkNeighborMessage.java
+++ b/services/net/java/android/net/netlink/RtNetlinkNeighborMessage.java
@@ -36,7 +36,7 @@
 
 
 /**
- * A NetlinkMessage subclass for netlink error messages.
+ * A NetlinkMessage subclass for rtnetlink neighbor messages.
  *
  * see also: &lt;linux_src&gt;/include/uapi/linux/neighbour.h
  *
diff --git a/services/net/java/android/net/netlink/StructNfGenMsg.java b/services/net/java/android/net/netlink/StructNfGenMsg.java
new file mode 100644
index 0000000..99695e2
--- /dev/null
+++ b/services/net/java/android/net/netlink/StructNfGenMsg.java
@@ -0,0 +1,51 @@
+/*
+ * 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.netlink;
+
+import libcore.io.SizeOf;
+
+import java.nio.ByteBuffer;
+
+
+/**
+ * struct nfgenmsg
+ *
+ * see &lt;linux_src&gt;/include/uapi/linux/netfilter/nfnetlink.h
+ *
+ * @hide
+ */
+public class StructNfGenMsg {
+    public static final int STRUCT_SIZE = 2 + SizeOf.SHORT;
+
+    public static final int NFNETLINK_V0 = 0;
+
+    final public byte nfgen_family;
+    final public byte version;
+    final public short res_id;  // N.B.: this is big endian in the kernel
+
+    public StructNfGenMsg(byte family) {
+        nfgen_family = family;
+        version = (byte) NFNETLINK_V0;
+        res_id = (short) 0;
+    }
+
+    public void pack(ByteBuffer byteBuffer) {
+        byteBuffer.put(nfgen_family);
+        byteBuffer.put(version);
+        byteBuffer.putShort(res_id);
+    }
+}
diff --git a/services/net/java/android/net/netlink/StructNlAttr.java b/services/net/java/android/net/netlink/StructNlAttr.java
index 597a6aa..811bdbb 100644
--- a/services/net/java/android/net/netlink/StructNlAttr.java
+++ b/services/net/java/android/net/netlink/StructNlAttr.java
@@ -34,7 +34,12 @@
  */
 public class StructNlAttr {
     // Already aligned.
-    public static final int NLA_HEADERLEN         = 4;
+    public static final int NLA_HEADERLEN  = 4;
+    public static final int NLA_F_NESTED   = (1 << 15);
+
+    public static short makeNestedType(short type) {
+        return (short) (type | NLA_F_NESTED);
+    }
 
     // Return a (length, type) object only, without consuming any bytes in
     // |byteBuffer| and without copying or interpreting any value bytes.
@@ -46,10 +51,17 @@
         }
         final int baseOffset = byteBuffer.position();
 
-        final StructNlAttr struct = new StructNlAttr();
-        struct.nla_len = byteBuffer.getShort();
-        struct.nla_type = byteBuffer.getShort();
-        struct.mByteOrder = byteBuffer.order();
+        // Assume the byte order of the buffer is the expected byte order of the value.
+        final StructNlAttr struct = new StructNlAttr(byteBuffer.order());
+        // The byte order of nla_len and nla_type is always native.
+        final ByteOrder originalOrder = byteBuffer.order();
+        byteBuffer.order(ByteOrder.nativeOrder());
+        try {
+            struct.nla_len = byteBuffer.getShort();
+            struct.nla_type = byteBuffer.getShort();
+        } finally {
+            byteBuffer.order(originalOrder);
+        }
 
         byteBuffer.position(baseOffset);
         if (struct.nla_len < NLA_HEADERLEN) {
@@ -78,13 +90,65 @@
         return struct;
     }
 
-    public short nla_len;
+    public short nla_len = (short) NLA_HEADERLEN;
     public short nla_type;
     public byte[] nla_value;
-    public ByteOrder mByteOrder;
 
-    public StructNlAttr() {
-        mByteOrder = ByteOrder.nativeOrder();
+    // The byte order used to read/write the value member. Netlink length and
+    // type members are always read/written in native order.
+    private ByteOrder mByteOrder = ByteOrder.nativeOrder();
+
+    public StructNlAttr() {}
+
+    public StructNlAttr(ByteOrder byteOrder) {
+        mByteOrder = byteOrder;
+    }
+
+    public StructNlAttr(short type, byte value) {
+        nla_type = type;
+        setValue(new byte[1]);
+        nla_value[0] = value;
+    }
+
+    public StructNlAttr(short type, short value) {
+        this(type, value, ByteOrder.nativeOrder());
+    }
+
+    public StructNlAttr(short type, short value, ByteOrder order) {
+        this(order);
+        nla_type = type;
+        setValue(new byte[SizeOf.SHORT]);
+        getValueAsByteBuffer().putShort(value);
+    }
+
+    public StructNlAttr(short type, int value) {
+        this(type, value, ByteOrder.nativeOrder());
+    }
+
+    public StructNlAttr(short type, int value, ByteOrder order) {
+        this(order);
+        nla_type = type;
+        setValue(new byte[SizeOf.INT]);
+        getValueAsByteBuffer().putInt(value);
+    }
+
+    public StructNlAttr(short type, InetAddress ip) {
+        nla_type = type;
+        setValue(ip.getAddress());
+    }
+
+    public StructNlAttr(short type, StructNlAttr... nested) {
+        this();
+        nla_type = makeNestedType(type);
+
+        int payloadLength = 0;
+        for (StructNlAttr nla : nested) payloadLength += nla.getAlignedLength();
+        setValue(new byte[payloadLength]);
+
+        final ByteBuffer buf = getValueAsByteBuffer();
+        for (StructNlAttr nla : nested) {
+            nla.pack(buf);
+        }
     }
 
     public int getAlignedLength() {
@@ -117,13 +181,25 @@
     }
 
     public void pack(ByteBuffer byteBuffer) {
+        final ByteOrder originalOrder = byteBuffer.order();
         final int originalPosition = byteBuffer.position();
-        byteBuffer.putShort(nla_len);
-        byteBuffer.putShort(nla_type);
-        byteBuffer.put(nla_value);
+
+        byteBuffer.order(ByteOrder.nativeOrder());
+        try {
+            byteBuffer.putShort(nla_len);
+            byteBuffer.putShort(nla_type);
+            if (nla_value != null) byteBuffer.put(nla_value);
+        } finally {
+            byteBuffer.order(originalOrder);
+        }
         byteBuffer.position(originalPosition + getAlignedLength());
     }
 
+    private void setValue(byte[] value) {
+        nla_value = value;
+        nla_len = (short) (NLA_HEADERLEN + ((nla_value != null) ? nla_value.length : 0));
+    }
+
     @Override
     public String toString() {
         return "StructNlAttr{ "
diff --git a/services/net/java/android/net/util/NetworkConstants.java b/services/net/java/android/net/util/NetworkConstants.java
index a012e0c..6065268 100644
--- a/services/net/java/android/net/util/NetworkConstants.java
+++ b/services/net/java/android/net/util/NetworkConstants.java
@@ -87,6 +87,7 @@
     public static final int IPV4_PROTOCOL_OFFSET = 9;
     public static final int IPV4_SRC_ADDR_OFFSET = 12;
     public static final int IPV4_DST_ADDR_OFFSET = 16;
+    public static final int IPV4_ADDR_BITS = 32;
     public static final int IPV4_ADDR_LEN = 4;
 
     /**
@@ -99,9 +100,11 @@
     public static final int IPV6_PROTOCOL_OFFSET = 6;
     public static final int IPV6_SRC_ADDR_OFFSET = 8;
     public static final int IPV6_DST_ADDR_OFFSET = 24;
+    public static final int IPV6_ADDR_BITS = 128;
     public static final int IPV6_ADDR_LEN = 16;
     public static final int IPV6_MIN_MTU = 1280;
     public static final int RFC7421_PREFIX_LENGTH = 64;
+    public static final int RFC6177_MIN_PREFIX_LENGTH = 48;
 
     /**
      * ICMPv6 constants.
diff --git a/services/net/java/android/net/util/PrefixUtils.java b/services/net/java/android/net/util/PrefixUtils.java
index 962aab4..f60694a 100644
--- a/services/net/java/android/net/util/PrefixUtils.java
+++ b/services/net/java/android/net/util/PrefixUtils.java
@@ -20,6 +20,8 @@
 import android.net.LinkAddress;
 import android.net.LinkProperties;
 
+import java.net.Inet4Address;
+import java.net.InetAddress;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
@@ -68,6 +70,13 @@
         return new IpPrefix(addr.getAddress(), addr.getPrefixLength());
     }
 
+    public static IpPrefix ipAddressAsPrefix(InetAddress ip) {
+        final int bitLength = (ip instanceof Inet4Address)
+                ? NetworkConstants.IPV4_ADDR_BITS
+                : NetworkConstants.IPV6_ADDR_BITS;
+        return new IpPrefix(ip, bitLength);
+    }
+
     private static IpPrefix pfx(String prefixStr) {
         return new IpPrefix(prefixStr);
     }
diff --git a/services/net/java/android/net/util/SharedLog.java b/services/net/java/android/net/util/SharedLog.java
index 343d237..bbd3d13 100644
--- a/services/net/java/android/net/util/SharedLog.java
+++ b/services/net/java/android/net/util/SharedLog.java
@@ -106,6 +106,10 @@
         record(Category.NONE, msg);
     }
 
+    public void logf(String fmt, Object... args) {
+        log(String.format(fmt, args));
+    }
+
     public void mark(String msg) {
         record(Category.MARK, msg);
     }
diff --git a/services/print/java/com/android/server/print/PrintManagerService.java b/services/print/java/com/android/server/print/PrintManagerService.java
index 3ec8380..5121c29 100644
--- a/services/print/java/com/android/server/print/PrintManagerService.java
+++ b/services/print/java/com/android/server/print/PrintManagerService.java
@@ -263,6 +263,8 @@
             Preconditions.checkFlagsArgument(selectionFlags,
                     PrintManager.DISABLED_SERVICES | PrintManager.ENABLED_SERVICES);
 
+            mContext.enforceCallingOrSelfPermission(
+                    android.Manifest.permission.READ_PRINT_SERVICES, null);
             final int resolvedUserId = resolveCallingUserEnforcingPermissions(userId);
             final UserState userState;
             synchronized (mLock) {
@@ -316,6 +318,8 @@
 
         @Override
         public List<RecommendationInfo> getPrintServiceRecommendations(int userId) {
+            mContext.enforceCallingOrSelfPermission(
+                    android.Manifest.permission.READ_PRINT_SERVICE_RECOMMENDATIONS, null);
             final int resolvedUserId = resolveCallingUserEnforcingPermissions(userId);
             final UserState userState;
             synchronized (mLock) {
@@ -538,6 +542,8 @@
                 int userId) throws RemoteException {
             listener = Preconditions.checkNotNull(listener);
 
+            mContext.enforceCallingOrSelfPermission(android.Manifest.permission.READ_PRINT_SERVICES,
+                    null);
             final int resolvedUserId = resolveCallingUserEnforcingPermissions(userId);
             final UserState userState;
             synchronized (mLock) {
@@ -560,6 +566,8 @@
                 int userId) {
             listener = Preconditions.checkNotNull(listener);
 
+            mContext.enforceCallingOrSelfPermission(android.Manifest.permission.READ_PRINT_SERVICES,
+                    null);
             final int resolvedUserId = resolveCallingUserEnforcingPermissions(userId);
             final UserState userState;
             synchronized (mLock) {
@@ -583,6 +591,8 @@
                 throws RemoteException {
             listener = Preconditions.checkNotNull(listener);
 
+            mContext.enforceCallingOrSelfPermission(
+                    android.Manifest.permission.READ_PRINT_SERVICE_RECOMMENDATIONS, null);
             final int resolvedUserId = resolveCallingUserEnforcingPermissions(userId);
             final UserState userState;
             synchronized (mLock) {
@@ -605,6 +615,8 @@
                 IRecommendationsChangeListener listener, int userId) {
             listener = Preconditions.checkNotNull(listener);
 
+            mContext.enforceCallingOrSelfPermission(
+                    android.Manifest.permission.READ_PRINT_SERVICE_RECOMMENDATIONS, null);
             final int resolvedUserId = resolveCallingUserEnforcingPermissions(userId);
             final UserState userState;
             synchronized (mLock) {
@@ -724,14 +736,18 @@
                     UserState userState = getOrCreateUserStateLocked(getChangingUserId(), false,
                             false /* enforceUserUnlockingOrUnlocked */);
 
+                    boolean prunePrintServices = false;
                     synchronized (mLock) {
                         if (hadPrintService(userState, packageName)
                                 || hasPrintService(packageName)) {
                             userState.updateIfNeededLocked();
+                            prunePrintServices = true;
                         }
                     }
 
-                    userState.prunePrintServices();
+                    if (prunePrintServices) {
+                        userState.prunePrintServices();
+                    }
                 }
 
                 @Override
@@ -740,13 +756,17 @@
                     UserState userState = getOrCreateUserStateLocked(getChangingUserId(), false,
                             false /* enforceUserUnlockingOrUnlocked */);
 
+                    boolean prunePrintServices = false;
                     synchronized (mLock) {
                         if (hadPrintService(userState, packageName)) {
                             userState.updateIfNeededLocked();
+                            prunePrintServices = true;
                         }
                     }
 
-                    userState.prunePrintServices();
+                    if (prunePrintServices) {
+                        userState.prunePrintServices();
+                    }
                 }
 
                 @Override
@@ -888,12 +908,12 @@
 
         private int resolveCallingAppEnforcingPermissions(int appId) {
             final int callingUid = Binder.getCallingUid();
-            if (callingUid == 0 || callingUid == Process.SYSTEM_UID
-                    || callingUid == Process.SHELL_UID) {
+            if (callingUid == 0) {
                 return appId;
             }
             final int callingAppId = UserHandle.getAppId(callingUid);
-            if (appId == callingAppId) {
+            if (appId == callingAppId || callingAppId == Process.SHELL_UID
+                    || callingAppId == Process.SYSTEM_UID) {
                 return appId;
             }
             if (mContext.checkCallingPermission(
diff --git a/services/print/java/com/android/server/print/RemotePrintSpooler.java b/services/print/java/com/android/server/print/RemotePrintSpooler.java
index f4c9c86..abd2244 100644
--- a/services/print/java/com/android/server/print/RemotePrintSpooler.java
+++ b/services/print/java/com/android/server/print/RemotePrintSpooler.java
@@ -72,7 +72,7 @@
     private static final boolean DEBUG = false;
 
     private static final long BIND_SPOOLER_SERVICE_TIMEOUT =
-            ("eng".equals(Build.TYPE)) ? 120000 : 10000;
+            (Build.IS_ENG) ? 120000 : 10000;
 
     private final Object mLock = new Object();
 
diff --git a/services/profile-classes b/services/profile-classes
deleted file mode 100644
index a2189bc..0000000
--- a/services/profile-classes
+++ /dev/null
@@ -1,7261 +0,0 @@
-Landroid/accessibilityservice/AccessibilityServiceInfo;
-Landroid/accessibilityservice/AccessibilityServiceInfo$1;
-Landroid/accessibilityservice/IAccessibilityServiceClient;
-Landroid/accessibilityservice/IAccessibilityServiceConnection;
-Landroid/accessibilityservice/IAccessibilityServiceConnection$Stub;
-Landroid/accounts/Account;
-Landroid/accounts/Account$1;
-Landroid/accounts/AccountAndUser;
-Landroid/accounts/AccountManager;
-Landroid/accounts/AccountManager$1;
-Landroid/accounts/AccountManagerInternal;
-Landroid/accounts/AccountManagerInternal$OnAppPermissionChangeListener;
-Landroid/accounts/AuthenticatorDescription;
-Landroid/accounts/AuthenticatorDescription$1;
-Landroid/accounts/IAccountAuthenticator;
-Landroid/accounts/IAccountAuthenticatorResponse;
-Landroid/accounts/IAccountAuthenticatorResponse$Stub;
-Landroid/accounts/IAccountAuthenticator$Stub;
-Landroid/accounts/IAccountAuthenticator$Stub$Proxy;
-Landroid/accounts/IAccountManager;
-Landroid/accounts/IAccountManagerResponse;
-Landroid/accounts/IAccountManagerResponse$Stub;
-Landroid/accounts/IAccountManagerResponse$Stub$Proxy;
-Landroid/accounts/IAccountManager$Stub;
-Landroid/animation/AnimationHandler;
-Landroid/animation/AnimationHandler$1;
-Landroid/animation/AnimationHandler$AnimationFrameCallback;
-Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;
-Landroid/animation/AnimationHandler$MyFrameCallbackProvider;
-Landroid/animation/Animator;
-Landroid/animation/Animator$AnimatorListener;
-Landroid/animation/Animator$AnimatorPauseListener;
-Landroid/animation/AnimatorListenerAdapter;
-Landroid/animation/ArgbEvaluator;
-Landroid/animation/FloatEvaluator;
-Landroid/animation/FloatKeyframeSet;
-Landroid/animation/IntEvaluator;
-Landroid/animation/Keyframe;
-Landroid/animation/Keyframe$FloatKeyframe;
-Landroid/animation/Keyframe$ObjectKeyframe;
-Landroid/animation/Keyframes;
-Landroid/animation/KeyframeSet;
-Landroid/animation/Keyframes$FloatKeyframes;
-Landroid/animation/LayoutTransition$TransitionListener;
-Landroid/animation/ObjectAnimator;
-Landroid/animation/PropertyValuesHolder;
-Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;
-Landroid/animation/PropertyValuesHolder$PropertyValues;
-Landroid/animation/RectEvaluator;
-Landroid/animation/TimeInterpolator;
-Landroid/animation/TypeEvaluator;
-Landroid/animation/ValueAnimator;
-Landroid/animation/ValueAnimator$AnimatorUpdateListener;
-Landroid/app/ActionBar$LayoutParams;
-Landroid/app/Activity;
-Landroid/app/ActivityManager;
-Landroid/app/ActivityManager$1;
-Landroid/app/ActivityManagerInternal;
-Landroid/app/ActivityManagerInternal$SleepToken;
-Landroid/app/ActivityManager$MemoryInfo;
-Landroid/app/ActivityManager$MemoryInfo$1;
-Landroid/app/ActivityManager$OnUidImportanceListener;
-Landroid/app/ActivityManager$RecentTaskInfo;
-Landroid/app/ActivityManager$RecentTaskInfo$1;
-Landroid/app/ActivityManager$RunningAppProcessInfo;
-Landroid/app/ActivityManager$RunningAppProcessInfo$1;
-Landroid/app/ActivityManager$RunningServiceInfo;
-Landroid/app/ActivityManager$RunningServiceInfo$1;
-Landroid/app/ActivityManager$RunningTaskInfo;
-Landroid/app/ActivityManager$RunningTaskInfo$1;
-Landroid/app/ActivityManager$StackId;
-Landroid/app/ActivityManager$StackInfo;
-Landroid/app/ActivityManager$StackInfo$1;
-Landroid/app/ActivityManager$TaskDescription;
-Landroid/app/ActivityManager$TaskDescription$1;
-Landroid/app/ActivityManager$TaskSnapshot;
-Landroid/app/ActivityManager$TaskSnapshot$1;
-Landroid/app/ActivityManager$TaskThumbnail;
-Landroid/app/ActivityManager$TaskThumbnailInfo;
-Landroid/app/ActivityManager$TaskThumbnailInfo$1;
-Landroid/app/ActivityManager$UidObserver;
-Landroid/app/ActivityOptions;
-Landroid/app/ActivityThread;
-Landroid/app/ActivityThread$3;
-Landroid/app/ActivityThread$ApplicationThread;
-Landroid/app/ActivityThread$BindServiceData;
-Landroid/app/ActivityThread$ContextCleanupInfo;
-Landroid/app/ActivityThread$CreateServiceData;
-Landroid/app/ActivityThread$DropBoxReporter;
-Landroid/app/ActivityThread$DumpComponentInfo;
-Landroid/app/ActivityThread$GcIdler;
-Landroid/app/ActivityThread$H;
-Landroid/app/ActivityThread$Profiler;
-Landroid/app/ActivityThread$ProviderClientRecord;
-Landroid/app/ActivityThread$ProviderKey;
-Landroid/app/ActivityThread$ProviderRefCount;
-Landroid/app/ActivityThread$ReceiverData;
-Landroid/app/ActivityThread$ServiceArgsData;
-Landroid/app/admin/DevicePolicyManager;
-Landroid/app/admin/DevicePolicyManagerInternal;
-Landroid/app/admin/DevicePolicyManagerInternal$OnCrossProfileWidgetProvidersChangeListener;
-Landroid/app/admin/IDevicePolicyManager;
-Landroid/app/admin/IDevicePolicyManager$Stub;
-Landroid/app/admin/PasswordMetrics;
-Landroid/app/admin/PasswordMetrics$1;
-Landroid/app/admin/SecurityLog;
-Landroid/app/admin/SecurityLog$SecurityEvent;
-Landroid/app/admin/SecurityLog$SecurityEvent$1;
-Landroid/app/admin/SystemUpdateInfo;
-Landroid/app/admin/SystemUpdatePolicy;
-Landroid/app/AlarmManager;
-Landroid/app/AlarmManager$AlarmClockInfo;
-Landroid/app/AlarmManager$ListenerWrapper;
-Landroid/app/AlarmManager$OnAlarmListener;
-Landroid/app/AppGlobals;
-Landroid/app/Application;
-Landroid/app/ApplicationErrorReport$CrashInfo;
-Landroid/app/ApplicationErrorReport$ParcelableCrashInfo;
-Landroid/app/ApplicationLoaders;
-Landroid/app/ApplicationPackageManager;
-Landroid/app/ApplicationPackageManager$OnPermissionsChangeListenerDelegate;
-Landroid/app/ApplicationPackageManager$ResourceName;
-Landroid/app/AppOpsManager;
-Landroid/app/AppOpsManager$1;
-Landroid/app/AppOpsManager$OnOpChangedInternalListener;
-Landroid/app/AppOpsManager$OnOpChangedListener;
-Landroid/app/AppOpsManager$OpEntry;
-Landroid/app/AppOpsManager$OpEntry$1;
-Landroid/app/AppOpsManager$PackageOps;
-Landroid/app/AppOpsManager$PackageOps$1;
-Landroid/app/assist/AssistContent;
-Landroid/app/assist/AssistContent$1;
-Landroid/app/assist/AssistStructure;
-Landroid/app/assist/AssistStructure$1;
-Landroid/app/AutomaticZenRule;
-Landroid/app/backup/BackupAgent;
-Landroid/app/backup/BackupDataInput;
-Landroid/app/backup/BackupDataInput$EntityHeader;
-Landroid/app/backup/BackupDataOutput;
-Landroid/app/backup/BackupHelper;
-Landroid/app/backup/BackupHelperDispatcher;
-Landroid/app/backup/BackupHelperDispatcher$Header;
-Landroid/app/backup/BackupManager;
-Landroid/app/backup/BackupTransport;
-Landroid/app/backup/BackupTransport$TransportImpl;
-Landroid/app/backup/FileBackupHelperBase;
-Landroid/app/backup/FullBackup;
-Landroid/app/backup/FullBackupDataOutput;
-Landroid/app/backup/IBackupManager;
-Landroid/app/backup/IBackupManager$Stub;
-Landroid/app/backup/IBackupObserver;
-Landroid/app/backup/IFullBackupRestoreObserver;
-Landroid/app/backup/IRestoreSession;
-Landroid/app/backup/ISelectBackupTransportCallback;
-Landroid/app/BroadcastOptions;
-Landroid/app/ContentProviderHolder;
-Landroid/app/ContentProviderHolder$1;
-Landroid/app/ContextImpl;
-Landroid/app/ContextImpl$ApplicationContentResolver;
-Landroid/app/DownloadManager;
-Landroid/app/IActivityContainer;
-Landroid/app/IActivityContainerCallback;
-Landroid/app/IActivityContainer$Stub;
-Landroid/app/IActivityController;
-Landroid/app/IActivityManager;
-Landroid/app/IActivityManager$Stub;
-Landroid/app/IAlarmCompleteListener;
-Landroid/app/IAlarmCompleteListener$Stub;
-Landroid/app/IAlarmListener;
-Landroid/app/IAlarmListener$Stub;
-Landroid/app/IAlarmManager;
-Landroid/app/IAlarmManager$Stub;
-Landroid/app/IApplicationThread;
-Landroid/app/IApplicationThread$Stub;
-Landroid/app/IApplicationThread$Stub$Proxy;
-Landroid/app/IAppTask;
-Landroid/app/IAppTask$Stub;
-Landroid/app/IInstrumentationWatcher;
-Landroid/app/INotificationManager;
-Landroid/app/INotificationManager$Stub;
-Landroid/app/Instrumentation;
-Landroid/app/IntentReceiverLeaked;
-Landroid/app/IProcessObserver;
-Landroid/app/IProcessObserver$Stub;
-Landroid/app/IProcessObserver$Stub$Proxy;
-Landroid/app/ISearchManager;
-Landroid/app/ISearchManager$Stub;
-Landroid/app/IServiceConnection;
-Landroid/app/IServiceConnection$Stub;
-Landroid/app/IServiceConnection$Stub$Proxy;
-Landroid/app/IStopUserCallback;
-Landroid/app/ITaskStackListener;
-Landroid/app/ITaskStackListener$Stub;
-Landroid/app/ITaskStackListener$Stub$Proxy;
-Landroid/app/ITransientNotification;
-Landroid/app/ITransientNotification$Stub;
-Landroid/app/ITransientNotification$Stub$Proxy;
-Landroid/app/IUiAutomationConnection;
-Landroid/app/IUidObserver;
-Landroid/app/IUidObserver$Stub;
-Landroid/app/IUiModeManager;
-Landroid/app/IUiModeManager$Stub;
-Landroid/app/IUserSwitchObserver;
-Landroid/app/IUserSwitchObserver$Stub;
-Landroid/app/IUserSwitchObserver$Stub$Proxy;
-Landroid/app/IWallpaperManager;
-Landroid/app/IWallpaperManagerCallback;
-Landroid/app/IWallpaperManagerCallback$Stub;
-Landroid/app/IWallpaperManagerCallback$Stub$Proxy;
-Landroid/app/IWallpaperManager$Stub;
-Landroid/app/job/IJobCallback;
-Landroid/app/job/IJobCallback$Stub;
-Landroid/app/job/IJobScheduler;
-Landroid/app/job/IJobScheduler$Stub;
-Landroid/app/job/IJobService;
-Landroid/app/job/IJobService$Stub;
-Landroid/app/job/IJobService$Stub$Proxy;
-Landroid/app/job/JobInfo;
-Landroid/app/job/JobInfo$1;
-Landroid/app/job/JobInfo$Builder;
-Landroid/app/job/JobInfo$TriggerContentUri;
-Landroid/app/job/JobInfo$TriggerContentUri$1;
-Landroid/app/job/JobParameters;
-Landroid/app/job/JobParameters$1;
-Landroid/app/job/JobScheduler;
-Landroid/app/job/JobService;
-Landroid/app/job/JobService$JobHandler;
-Landroid/app/job/JobService$JobInterface;
-Landroid/app/JobSchedulerImpl;
-Landroid/app/KeyguardManager;
-Landroid/app/LoadedApk;
-Landroid/app/LoadedApk$ReceiverDispatcher;
-Landroid/app/LoadedApk$ReceiverDispatcher$Args;
-Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;
-Landroid/app/LoadedApk$ServiceDispatcher;
-Landroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo;
-Landroid/app/LoadedApk$ServiceDispatcher$DeathMonitor;
-Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;
-Landroid/app/LoadedApk$ServiceDispatcher$RunConnection;
-Landroid/app/LoadedApk$WarningContextClassLoader;
-Landroid/app/NativeActivity;
-Landroid/app/Notification;
-Landroid/app/Notification$1;
-Landroid/app/Notification$Action;
-Landroid/app/Notification$Action$1;
-Landroid/app/Notification$BigPictureStyle;
-Landroid/app/Notification$BigTextStyle;
-Landroid/app/Notification$Builder;
-Landroid/app/Notification$BuilderRemoteViews;
-Landroid/app/NotificationChannel;
-Landroid/app/NotificationChannel$1;
-Landroid/app/Notification$DecoratedCustomViewStyle;
-Landroid/app/Notification$DecoratedMediaCustomViewStyle;
-Landroid/app/Notification$InboxStyle;
-Landroid/app/NotificationManager;
-Landroid/app/NotificationManager$Policy;
-Landroid/app/NotificationManager$Policy$1;
-Landroid/app/Notification$MediaStyle;
-Landroid/app/Notification$MessagingStyle;
-Landroid/app/Notification$StandardTemplateParams;
-Landroid/app/Notification$Style;
-Landroid/app/PendingIntent;
-Landroid/app/PendingIntent$1;
-Landroid/app/PendingIntent$CanceledException;
-Landroid/app/PendingIntent$FinishedDispatcher;
-Landroid/app/PendingIntent$OnFinished;
-Landroid/app/PendingIntent$OnMarshaledListener;
-Landroid/app/PictureInPictureArgs;
-Landroid/app/PictureInPictureArgs$1;
-Landroid/app/ProfilerInfo;
-Landroid/app/QueuedWork;
-Landroid/app/QueuedWork$QueuedWorkHandler;
-Landroid/app/ReceiverRestrictedContext;
-Landroid/app/RemoteInput;
-Landroid/app/RemoteInput$1;
-Landroid/app/ResourcesManager;
-Landroid/app/ResourcesManager$1;
-Landroid/app/ResultInfo;
-Landroid/app/ResultInfo$1;
-Landroid/app/SearchableInfo;
-Landroid/app/SearchableInfo$1;
-Landroid/app/SearchManager;
-Landroid/app/Service;
-Landroid/app/ServiceConnectionLeaked;
-Landroid/app/StatusBarManager;
-Landroid/app/SynchronousUserSwitchObserver;
-Landroid/app/SystemServiceRegistry;
-Landroid/app/SystemServiceRegistry$1;
-Landroid/app/SystemServiceRegistry$10;
-Landroid/app/SystemServiceRegistry$11;
-Landroid/app/SystemServiceRegistry$12;
-Landroid/app/SystemServiceRegistry$13;
-Landroid/app/SystemServiceRegistry$14;
-Landroid/app/SystemServiceRegistry$15;
-Landroid/app/SystemServiceRegistry$16;
-Landroid/app/SystemServiceRegistry$17;
-Landroid/app/SystemServiceRegistry$18;
-Landroid/app/SystemServiceRegistry$19;
-Landroid/app/SystemServiceRegistry$2;
-Landroid/app/SystemServiceRegistry$20;
-Landroid/app/SystemServiceRegistry$21;
-Landroid/app/SystemServiceRegistry$22;
-Landroid/app/SystemServiceRegistry$23;
-Landroid/app/SystemServiceRegistry$24;
-Landroid/app/SystemServiceRegistry$25;
-Landroid/app/SystemServiceRegistry$26;
-Landroid/app/SystemServiceRegistry$27;
-Landroid/app/SystemServiceRegistry$28;
-Landroid/app/SystemServiceRegistry$29;
-Landroid/app/SystemServiceRegistry$3;
-Landroid/app/SystemServiceRegistry$30;
-Landroid/app/SystemServiceRegistry$31;
-Landroid/app/SystemServiceRegistry$32;
-Landroid/app/SystemServiceRegistry$33;
-Landroid/app/SystemServiceRegistry$34;
-Landroid/app/SystemServiceRegistry$35;
-Landroid/app/SystemServiceRegistry$36;
-Landroid/app/SystemServiceRegistry$37;
-Landroid/app/SystemServiceRegistry$38;
-Landroid/app/SystemServiceRegistry$39;
-Landroid/app/SystemServiceRegistry$4;
-Landroid/app/SystemServiceRegistry$40;
-Landroid/app/SystemServiceRegistry$41;
-Landroid/app/SystemServiceRegistry$42;
-Landroid/app/SystemServiceRegistry$43;
-Landroid/app/SystemServiceRegistry$44;
-Landroid/app/SystemServiceRegistry$45;
-Landroid/app/SystemServiceRegistry$46;
-Landroid/app/SystemServiceRegistry$47;
-Landroid/app/SystemServiceRegistry$48;
-Landroid/app/SystemServiceRegistry$49;
-Landroid/app/SystemServiceRegistry$5;
-Landroid/app/SystemServiceRegistry$50;
-Landroid/app/SystemServiceRegistry$51;
-Landroid/app/SystemServiceRegistry$52;
-Landroid/app/SystemServiceRegistry$53;
-Landroid/app/SystemServiceRegistry$54;
-Landroid/app/SystemServiceRegistry$55;
-Landroid/app/SystemServiceRegistry$56;
-Landroid/app/SystemServiceRegistry$57;
-Landroid/app/SystemServiceRegistry$58;
-Landroid/app/SystemServiceRegistry$59;
-Landroid/app/SystemServiceRegistry$6;
-Landroid/app/SystemServiceRegistry$60;
-Landroid/app/SystemServiceRegistry$61;
-Landroid/app/SystemServiceRegistry$62;
-Landroid/app/SystemServiceRegistry$63;
-Landroid/app/SystemServiceRegistry$64;
-Landroid/app/SystemServiceRegistry$65;
-Landroid/app/SystemServiceRegistry$66;
-Landroid/app/SystemServiceRegistry$67;
-Landroid/app/SystemServiceRegistry$68;
-Landroid/app/SystemServiceRegistry$69;
-Landroid/app/SystemServiceRegistry$7;
-Landroid/app/SystemServiceRegistry$70;
-Landroid/app/SystemServiceRegistry$71;
-Landroid/app/SystemServiceRegistry$72;
-Landroid/app/SystemServiceRegistry$73;
-Landroid/app/SystemServiceRegistry$74;
-Landroid/app/SystemServiceRegistry$75;
-Landroid/app/SystemServiceRegistry$76;
-Landroid/app/SystemServiceRegistry$77;
-Landroid/app/SystemServiceRegistry$78;
-Landroid/app/SystemServiceRegistry$79;
-Landroid/app/SystemServiceRegistry$8;
-Landroid/app/SystemServiceRegistry$9;
-Landroid/app/SystemServiceRegistry$CachedServiceFetcher;
-Landroid/app/SystemServiceRegistry$ServiceFetcher;
-Landroid/app/SystemServiceRegistry$StaticApplicationContextServiceFetcher;
-Landroid/app/SystemServiceRegistry$StaticServiceFetcher;
-Landroid/app/trust/IStrongAuthTracker;
-Landroid/app/trust/IStrongAuthTracker$Stub;
-Landroid/app/trust/IStrongAuthTracker$Stub$Proxy;
-Landroid/app/trust/ITrustListener;
-Landroid/app/trust/ITrustListener$Stub;
-Landroid/app/trust/ITrustListener$Stub$Proxy;
-Landroid/app/trust/ITrustManager;
-Landroid/app/trust/ITrustManager$Stub;
-Landroid/app/trust/TrustManager;
-Landroid/app/UiModeManager;
-Landroid/app/usage/ConfigurationStats;
-Landroid/app/usage/ConfigurationStats$1;
-Landroid/app/usage/ExternalStorageStats;
-Landroid/app/usage/IStorageStatsManager;
-Landroid/app/usage/IStorageStatsManager$Stub;
-Landroid/app/usage/IUsageStatsManager;
-Landroid/app/usage/IUsageStatsManager$Stub;
-Landroid/app/usage/NetworkStatsManager;
-Landroid/app/usage/StorageStats;
-Landroid/app/usage/StorageStatsManager;
-Landroid/app/usage/TimeSparseArray;
-Landroid/app/usage/UsageEvents;
-Landroid/app/usage/UsageEvents$1;
-Landroid/app/usage/UsageEvents$Event;
-Landroid/app/usage/UsageStats;
-Landroid/app/usage/UsageStats$1;
-Landroid/app/usage/UsageStatsManager;
-Landroid/app/usage/UsageStatsManagerInternal;
-Landroid/app/usage/UsageStatsManagerInternal$AppIdleStateChangeListener;
-Landroid/app/UserSwitchObserver;
-Landroid/app/WaitResult;
-Landroid/app/WallpaperInfo;
-Landroid/app/WallpaperInfo$1;
-Landroid/app/WallpaperManager;
-Landroid/appwidget/AppWidgetManager;
-Landroid/appwidget/AppWidgetProviderInfo;
-Landroid/appwidget/AppWidgetProviderInfo$1;
-Landroid/bluetooth/BluetoothA2dp;
-Landroid/bluetooth/BluetoothA2dp$1;
-Landroid/bluetooth/BluetoothA2dp$2;
-Landroid/bluetooth/BluetoothActivityEnergyInfo;
-Landroid/bluetooth/BluetoothActivityEnergyInfo$1;
-Landroid/bluetooth/BluetoothAdapter;
-Landroid/bluetooth/BluetoothAdapter$1;
-Landroid/bluetooth/BluetoothDevice;
-Landroid/bluetooth/BluetoothHeadset;
-Landroid/bluetooth/BluetoothHeadset$1;
-Landroid/bluetooth/BluetoothHeadset$2;
-Landroid/bluetooth/BluetoothHeadset$3;
-Landroid/bluetooth/BluetoothManager;
-Landroid/bluetooth/BluetoothProfile;
-Landroid/bluetooth/BluetoothProfile$ServiceListener;
-Landroid/bluetooth/IBluetooth;
-Landroid/bluetooth/IBluetoothA2dp;
-Landroid/bluetooth/IBluetoothA2dp$Stub;
-Landroid/bluetooth/IBluetoothA2dp$Stub$Proxy;
-Landroid/bluetooth/IBluetoothCallback;
-Landroid/bluetooth/IBluetoothCallback$Stub;
-Landroid/bluetooth/IBluetoothGatt;
-Landroid/bluetooth/IBluetoothGatt$Stub;
-Landroid/bluetooth/IBluetoothGatt$Stub$Proxy;
-Landroid/bluetooth/IBluetoothHeadset;
-Landroid/bluetooth/IBluetoothHeadsetPhone;
-Landroid/bluetooth/IBluetoothHeadsetPhone$Stub;
-Landroid/bluetooth/IBluetoothHeadset$Stub;
-Landroid/bluetooth/IBluetoothHeadset$Stub$Proxy;
-Landroid/bluetooth/IBluetoothManager;
-Landroid/bluetooth/IBluetoothManagerCallback;
-Landroid/bluetooth/IBluetoothManagerCallback$Stub;
-Landroid/bluetooth/IBluetoothManagerCallback$Stub$Proxy;
-Landroid/bluetooth/IBluetoothManager$Stub;
-Landroid/bluetooth/IBluetoothProfileServiceConnection;
-Landroid/bluetooth/IBluetoothProfileServiceConnection$Stub;
-Landroid/bluetooth/IBluetoothProfileServiceConnection$Stub$Proxy;
-Landroid/bluetooth/IBluetoothStateChangeCallback;
-Landroid/bluetooth/IBluetoothStateChangeCallback$Stub;
-Landroid/bluetooth/IBluetoothStateChangeCallback$Stub$Proxy;
-Landroid/bluetooth/IBluetooth$Stub;
-Landroid/bluetooth/IBluetooth$Stub$Proxy;
-Landroid/bluetooth/UidTraffic;
-Landroid/bluetooth/UidTraffic$1;
-Landroid/content/ActivityNotFoundException;
-Landroid/content/AsyncQueryHandler;
-Landroid/content/AsyncQueryHandler$WorkerArgs;
-Landroid/content/AsyncQueryHandler$WorkerHandler;
-Landroid/content/BroadcastReceiver;
-Landroid/content/BroadcastReceiver$PendingResult;
-Landroid/content/ClipboardManager;
-Landroid/content/ClipData;
-Landroid/content/ClipDescription;
-Landroid/content/ComponentCallbacks;
-Landroid/content/ComponentCallbacks2;
-Landroid/content/ComponentName;
-Landroid/content/ComponentName$1;
-Landroid/content/ContentProvider;
-Landroid/content/ContentProviderNative;
-Landroid/content/ContentProviderProxy;
-Landroid/content/ContentProvider$Transport;
-Landroid/content/ContentResolver;
-Landroid/content/ContentResolver$CursorWrapperInner;
-Landroid/content/ContentUris;
-Landroid/content/ContentValues;
-Landroid/content/ContentValues$1;
-Landroid/content/Context;
-Landroid/content/ContextWrapper;
-Landroid/content/DialogInterface$OnCancelListener;
-Landroid/content/DialogInterface$OnDismissListener;
-Landroid/content/IClipboard;
-Landroid/content/IClipboard$Stub;
-Landroid/content/IContentProvider;
-Landroid/content/IContentService;
-Landroid/content/IContentService$Stub;
-Landroid/content/IIntentReceiver;
-Landroid/content/IIntentReceiver$Stub;
-Landroid/content/IIntentReceiver$Stub$Proxy;
-Landroid/content/IIntentSender;
-Landroid/content/IIntentSender$Stub;
-Landroid/content/Intent;
-Landroid/content/Intent$1;
-Landroid/content/IntentFilter;
-Landroid/content/IntentFilter$1;
-Landroid/content/IntentFilter$AuthorityEntry;
-Landroid/content/Intent$FilterComparison;
-Landroid/content/IntentFilter$MalformedMimeTypeException;
-Landroid/content/IntentSender;
-Landroid/content/IntentSender$SendIntentException;
-Landroid/content/IOnPrimaryClipChangedListener;
-Landroid/content/IOnPrimaryClipChangedListener$Stub;
-Landroid/content/IOnPrimaryClipChangedListener$Stub$Proxy;
-Landroid/content/IRestrictionsManager;
-Landroid/content/IRestrictionsManager$Stub;
-Landroid/content/ISyncAdapter;
-Landroid/content/ISyncAdapter$Stub;
-Landroid/content/ISyncAdapter$Stub$Proxy;
-Landroid/content/ISyncContext;
-Landroid/content/ISyncContext$Stub;
-Landroid/content/ISyncStatusObserver;
-Landroid/content/ISyncStatusObserver$Stub;
-Landroid/content/ISyncStatusObserver$Stub$Proxy;
-Landroid/content/PeriodicSync;
-Landroid/content/PeriodicSync$1;
-Landroid/content/pm/ActivityInfo;
-Landroid/content/pm/ActivityInfo$1;
-Landroid/content/pm/ActivityInfo$WindowLayout;
-Landroid/content/pm/ApplicationInfo;
-Landroid/content/pm/ApplicationInfo$1;
-Landroid/content/pm/ComponentInfo;
-Landroid/content/pm/ConfigurationInfo;
-Landroid/content/pm/ConfigurationInfo$1;
-Landroid/content/pm/EphemeralResponse;
-Landroid/content/pm/FallbackCategoryProvider;
-Landroid/content/pm/FeatureInfo;
-Landroid/content/pm/FeatureInfo$1;
-Landroid/content/pm/ILauncherApps;
-Landroid/content/pm/ILauncherApps$Stub;
-Landroid/content/pm/InstrumentationInfo;
-Landroid/content/pm/IntentFilterVerificationInfo;
-Landroid/content/pm/IntentFilterVerificationInfo$1;
-Landroid/content/pm/IOnAppsChangedListener;
-Landroid/content/pm/IOnAppsChangedListener$Stub;
-Landroid/content/pm/IOnAppsChangedListener$Stub$Proxy;
-Landroid/content/pm/IOnPermissionsChangeListener;
-Landroid/content/pm/IOnPermissionsChangeListener$Stub;
-Landroid/content/pm/IOnPermissionsChangeListener$Stub$Proxy;
-Landroid/content/pm/IOtaDexopt;
-Landroid/content/pm/IOtaDexopt$Stub;
-Landroid/content/pm/IPackageDataObserver;
-Landroid/content/pm/IPackageDeleteObserver;
-Landroid/content/pm/IPackageDeleteObserver2;
-Landroid/content/pm/IPackageInstaller;
-Landroid/content/pm/IPackageInstallerCallback;
-Landroid/content/pm/IPackageInstallerCallback$Stub;
-Landroid/content/pm/IPackageInstallerCallback$Stub$Proxy;
-Landroid/content/pm/IPackageInstallerSession;
-Landroid/content/pm/IPackageInstaller$Stub;
-Landroid/content/pm/IPackageInstallObserver2;
-Landroid/content/pm/IPackageManager;
-Landroid/content/pm/IPackageManager$Stub;
-Landroid/content/pm/IPackageMoveObserver;
-Landroid/content/pm/IPackageMoveObserver$Stub;
-Landroid/content/pm/IPackageMoveObserver$Stub$Proxy;
-Landroid/content/pm/IPackageStatsObserver;
-Landroid/content/pm/IPackageStatsObserver$Stub;
-Landroid/content/pm/IPackageStatsObserver$Stub$Proxy;
-Landroid/content/pm/IShortcutService;
-Landroid/content/pm/IShortcutService$Stub;
-Landroid/content/pm/KeySet;
-Landroid/content/pm/LauncherApps;
-Landroid/content/pm/PackageCleanItem;
-Landroid/content/pm/PackageInfo;
-Landroid/content/pm/PackageInfo$1;
-Landroid/content/pm/PackageInstaller$SessionInfo;
-Landroid/content/pm/PackageInstaller$SessionParams;
-Landroid/content/pm/PackageItemInfo;
-Landroid/content/pm/PackageManager;
-Landroid/content/pm/PackageManagerInternal;
-Landroid/content/pm/PackageManagerInternal$ExternalSourcesPolicy;
-Landroid/content/pm/PackageManagerInternal$PackagesProvider;
-Landroid/content/pm/PackageManagerInternal$SyncAdapterPackagesProvider;
-Landroid/content/pm/PackageManager$NameNotFoundException;
-Landroid/content/pm/PackageManager$OnPermissionsChangedListener;
-Landroid/content/pm/PackageParser;
-Landroid/content/pm/PackageParser$Activity;
-Landroid/content/pm/PackageParser$Activity$1;
-Landroid/content/pm/PackageParser$ActivityIntentInfo;
-Landroid/content/pm/PackageParser$ApkLite;
-Landroid/content/pm/PackageParser$Component;
-Landroid/content/pm/PackageParser$IntentInfo;
-Landroid/content/pm/PackageParser$NewPermissionInfo;
-Landroid/content/pm/PackageParser$Package;
-Landroid/content/pm/PackageParser$Package$1;
-Landroid/content/pm/PackageParser$PackageParserException;
-Landroid/content/pm/PackageParser$Permission;
-Landroid/content/pm/PackageParser$Permission$1;
-Landroid/content/pm/PackageParser$PermissionGroup;
-Landroid/content/pm/PackageParser$PermissionGroup$1;
-Landroid/content/pm/PackageParser$Provider;
-Landroid/content/pm/PackageParser$Provider$1;
-Landroid/content/pm/PackageParser$ProviderIntentInfo;
-Landroid/content/pm/PackageParser$Service;
-Landroid/content/pm/PackageParser$Service$1;
-Landroid/content/pm/PackageParser$ServiceIntentInfo;
-Landroid/content/pm/PackageParser$SplitNameComparator;
-Landroid/content/pm/PackageParser$SplitPermissionInfo;
-Landroid/content/pm/PackageStats;
-Landroid/content/pm/PackageStats$1;
-Landroid/content/pm/PackageUserState;
-Landroid/content/pm/ParceledListSlice;
-Landroid/content/pm/ParceledListSlice$1;
-Landroid/content/pm/ParceledListSlice$2;
-Landroid/content/pm/PathPermission;
-Landroid/content/pm/PathPermission$1;
-Landroid/content/pm/PermissionGroupInfo;
-Landroid/content/pm/PermissionGroupInfo$1;
-Landroid/content/pm/PermissionInfo;
-Landroid/content/pm/PermissionInfo$1;
-Landroid/content/pm/ProviderInfo;
-Landroid/content/pm/ProviderInfo$1;
-Landroid/content/pm/RegisteredServicesCache;
-Landroid/content/pm/RegisteredServicesCache$1;
-Landroid/content/pm/RegisteredServicesCache$2;
-Landroid/content/pm/RegisteredServicesCache$3;
-Landroid/content/pm/RegisteredServicesCacheListener;
-Landroid/content/pm/RegisteredServicesCache$ServiceInfo;
-Landroid/content/pm/RegisteredServicesCache$UserServices;
-Landroid/content/pm/ResolveInfo;
-Landroid/content/pm/ResolveInfo$1;
-Landroid/content/pm/ServiceInfo;
-Landroid/content/pm/ServiceInfo$1;
-Landroid/content/pm/SharedLibraryInfo;
-Landroid/content/pm/SharedLibraryInfo$1;
-Landroid/content/pm/ShortcutInfo;
-Landroid/content/pm/ShortcutInfo$1;
-Landroid/content/pm/ShortcutManager;
-Landroid/content/pm/ShortcutServiceInternal;
-Landroid/content/pm/ShortcutServiceInternal$ShortcutChangeListener;
-Landroid/content/pm/Signature;
-Landroid/content/pm/Signature$1;
-Landroid/content/pm/UserInfo;
-Landroid/content/pm/UserInfo$1;
-Landroid/content/pm/VerifierDeviceIdentity;
-Landroid/content/pm/VersionedPackage;
-Landroid/content/pm/VersionedPackage$1;
-Landroid/content/pm/XmlSerializerAndParser;
-Landroid/content/res/AssetFileDescriptor;
-Landroid/content/res/AssetFileDescriptor$1;
-Landroid/content/res/AssetManager;
-Landroid/content/res/AssetManager$AssetInputStream;
-Landroid/content/res/ColorStateList;
-Landroid/content/res/ColorStateList$1;
-Landroid/content/res/ColorStateList$ColorStateListFactory;
-Landroid/content/res/CompatibilityInfo;
-Landroid/content/res/CompatibilityInfo$1;
-Landroid/content/res/CompatibilityInfo$2;
-Landroid/content/res/ComplexColor;
-Landroid/content/res/Configuration;
-Landroid/content/res/Configuration$1;
-Landroid/content/res/ConfigurationBoundResourceCache;
-Landroid/content/res/ConstantState;
-Landroid/content/res/DrawableCache;
-Landroid/content/res/GradientColor;
-Landroid/content/res/ObbInfo;
-Landroid/content/res/ObbInfo$1;
-Landroid/content/res/ObbScanner;
-Landroid/content/res/Resources;
-Landroid/content/res/ResourcesImpl;
-Landroid/content/res/ResourcesImpl$ThemeImpl;
-Landroid/content/res/ResourcesKey;
-Landroid/content/res/Resources$NotFoundException;
-Landroid/content/res/Resources$Theme;
-Landroid/content/res/Resources$ThemeKey;
-Landroid/content/res/StringBlock;
-Landroid/content/res/ThemedResourceCache;
-Landroid/content/RestrictionsManager;
-Landroid/content/res/TypedArray;
-Landroid/content/res/XmlBlock;
-Landroid/content/res/XmlBlock$Parser;
-Landroid/content/res/XmlResourceParser;
-Landroid/content/ServiceConnection;
-Landroid/content/SyncAdaptersCache;
-Landroid/content/SyncAdaptersCache$MySerializer;
-Landroid/content/SyncAdapterType;
-Landroid/content/SyncAdapterType$1;
-Landroid/content/SyncInfo;
-Landroid/content/SyncInfo$1;
-Landroid/content/SyncRequest;
-Landroid/content/SyncRequest$1;
-Landroid/content/SyncResult;
-Landroid/content/SyncResult$1;
-Landroid/content/SyncStats;
-Landroid/content/SyncStats$1;
-Landroid/content/SyncStatusInfo;
-Landroid/content/SyncStatusInfo$1;
-Landroid/database/AbstractCursor;
-Landroid/database/AbstractCursor$SelfContentObserver;
-Landroid/database/AbstractWindowedCursor;
-Landroid/database/BulkCursorDescriptor;
-Landroid/database/BulkCursorDescriptor$1;
-Landroid/database/BulkCursorNative;
-Landroid/database/BulkCursorProxy;
-Landroid/database/BulkCursorToCursorAdaptor;
-Landroid/database/CharArrayBuffer;
-Landroid/database/ContentObservable;
-Landroid/database/ContentObserver;
-Landroid/database/ContentObserver$NotificationRunnable;
-Landroid/database/ContentObserver$Transport;
-Landroid/database/CrossProcessCursor;
-Landroid/database/CrossProcessCursorWrapper;
-Landroid/database/Cursor;
-Landroid/database/CursorWindow;
-Landroid/database/CursorWindow$1;
-Landroid/database/CursorWrapper;
-Landroid/database/DatabaseErrorHandler;
-Landroid/database/DatabaseUtils;
-Landroid/database/DataSetObservable;
-Landroid/database/DefaultDatabaseErrorHandler;
-Landroid/database/IBulkCursor;
-Landroid/database/IContentObserver;
-Landroid/database/IContentObserver$Stub;
-Landroid/database/IContentObserver$Stub$Proxy;
-Landroid/database/Observable;
-Landroid/database/SQLException;
-Landroid/database/sqlite/DatabaseObjectNotClosedException;
-Landroid/database/sqlite/SQLiteClosable;
-Landroid/database/sqlite/SQLiteConnection;
-Landroid/database/sqlite/SQLiteConnection$Operation;
-Landroid/database/sqlite/SQLiteConnection$OperationLog;
-Landroid/database/sqlite/SQLiteConnectionPool;
-Landroid/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;
-Landroid/database/sqlite/SQLiteConnection$PreparedStatement;
-Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;
-Landroid/database/sqlite/SQLiteCursor;
-Landroid/database/sqlite/SQLiteCursorDriver;
-Landroid/database/sqlite/SQLiteCustomFunction;
-Landroid/database/sqlite/SQLiteDatabase;
-Landroid/database/sqlite/SQLiteDatabase$1;
-Landroid/database/sqlite/SQLiteDatabaseConfiguration;
-Landroid/database/sqlite/SQLiteDatabaseCorruptException;
-Landroid/database/sqlite/SQLiteDatabaseLockedException;
-Landroid/database/sqlite/SQLiteDebug;
-Landroid/database/sqlite/SQLiteDebug$PagerStats;
-Landroid/database/sqlite/SQLiteDirectCursorDriver;
-Landroid/database/sqlite/SQLiteException;
-Landroid/database/sqlite/SQLiteGlobal;
-Landroid/database/sqlite/SQLiteOpenHelper;
-Landroid/database/sqlite/SQLiteProgram;
-Landroid/database/sqlite/SQLiteQuery;
-Landroid/database/sqlite/SQLiteQueryBuilder;
-Landroid/database/sqlite/SQLiteSession;
-Landroid/database/sqlite/SQLiteSession$Transaction;
-Landroid/database/sqlite/SQLiteStatement;
-Landroid/database/sqlite/SQLiteStatementInfo;
-Landroid/ddm/DdmHandleAppName;
-Landroid/ddm/DdmHandleExit;
-Landroid/ddm/DdmHandleHeap;
-Landroid/ddm/DdmHandleHello;
-Landroid/ddm/DdmHandleNativeHeap;
-Landroid/ddm/DdmHandleProfiling;
-Landroid/ddm/DdmHandleThread;
-Landroid/ddm/DdmHandleViewDebug;
-Landroid/ddm/DdmRegister;
-Landroid/graphics/BaseCanvas;
-Landroid/graphics/Bitmap;
-Landroid/graphics/Bitmap$1;
-Landroid/graphics/Bitmap$CompressFormat;
-Landroid/graphics/Bitmap$Config;
-Landroid/graphics/BitmapFactory;
-Landroid/graphics/BitmapFactory$Options;
-Landroid/graphics/BitmapRegionDecoder;
-Landroid/graphics/BitmapShader;
-Landroid/graphics/BlurMaskFilter;
-Landroid/graphics/BlurMaskFilter$Blur;
-Landroid/graphics/Camera;
-Landroid/graphics/Canvas;
-Landroid/graphics/Canvas$EdgeType;
-Landroid/graphics/Canvas$NoImagePreloadHolder;
-Landroid/graphics/CanvasProperty;
-Landroid/graphics/Color;
-Landroid/graphics/ColorFilter;
-Landroid/graphics/ColorMatrix;
-Landroid/graphics/ColorMatrixColorFilter;
-Landroid/graphics/ComposePathEffect;
-Landroid/graphics/ComposeShader;
-Landroid/graphics/CornerPathEffect;
-Landroid/graphics/DashPathEffect;
-Landroid/graphics/DiscretePathEffect;
-Landroid/graphics/drawable/Animatable;
-Landroid/graphics/drawable/Animatable2;
-Landroid/graphics/drawable/AnimatedStateListDrawable;
-Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;
-Landroid/graphics/drawable/AnimatedVectorDrawable;
-Landroid/graphics/drawable/AnimatedVectorDrawable$1;
-Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;
-Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator;
-Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;
-Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;
-Landroid/graphics/drawable/AnimationDrawable;
-Landroid/graphics/drawable/AnimationDrawable$AnimationState;
-Landroid/graphics/drawable/BitmapDrawable;
-Landroid/graphics/drawable/BitmapDrawable$BitmapState;
-Landroid/graphics/drawable/ColorDrawable;
-Landroid/graphics/drawable/ColorDrawable$ColorState;
-Landroid/graphics/drawable/Drawable;
-Landroid/graphics/drawable/Drawable$Callback;
-Landroid/graphics/drawable/Drawable$ConstantState;
-Landroid/graphics/drawable/DrawableContainer;
-Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;
-Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;
-Landroid/graphics/drawable/DrawableInflater;
-Landroid/graphics/drawable/DrawableWrapper;
-Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;
-Landroid/graphics/drawable/GradientDrawable;
-Landroid/graphics/drawable/GradientDrawable$GradientState;
-Landroid/graphics/drawable/GradientDrawable$Orientation;
-Landroid/graphics/drawable/Icon;
-Landroid/graphics/drawable/Icon$1;
-Landroid/graphics/drawable/InsetDrawable;
-Landroid/graphics/drawable/InsetDrawable$InsetState;
-Landroid/graphics/drawable/LayerDrawable;
-Landroid/graphics/drawable/LayerDrawable$ChildDrawable;
-Landroid/graphics/drawable/LayerDrawable$LayerState;
-Landroid/graphics/drawable/NinePatchDrawable;
-Landroid/graphics/drawable/NinePatchDrawable$NinePatchState;
-Landroid/graphics/drawable/RippleBackground;
-Landroid/graphics/drawable/RippleBackground$1;
-Landroid/graphics/drawable/RippleBackground$BackgroundProperty;
-Landroid/graphics/drawable/RippleComponent;
-Landroid/graphics/drawable/RippleDrawable;
-Landroid/graphics/drawable/RippleDrawable$RippleState;
-Landroid/graphics/drawable/RippleForeground;
-Landroid/graphics/drawable/RippleForeground$1;
-Landroid/graphics/drawable/RippleForeground$2;
-Landroid/graphics/drawable/RippleForeground$3;
-Landroid/graphics/drawable/RippleForeground$4;
-Landroid/graphics/drawable/RippleForeground$LogDecelerateInterpolator;
-Landroid/graphics/drawable/ScaleDrawable;
-Landroid/graphics/drawable/ScaleDrawable$ScaleState;
-Landroid/graphics/drawable/StateListDrawable;
-Landroid/graphics/drawable/StateListDrawable$StateListState;
-Landroid/graphics/drawable/VectorDrawable;
-Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;
-Landroid/graphics/drawable/VectorDrawable$VectorDrawableState$1;
-Landroid/graphics/drawable/VectorDrawable$VFullPath;
-Landroid/graphics/drawable/VectorDrawable$VFullPath$1;
-Landroid/graphics/drawable/VectorDrawable$VFullPath$10;
-Landroid/graphics/drawable/VectorDrawable$VFullPath$2;
-Landroid/graphics/drawable/VectorDrawable$VFullPath$3;
-Landroid/graphics/drawable/VectorDrawable$VFullPath$4;
-Landroid/graphics/drawable/VectorDrawable$VFullPath$5;
-Landroid/graphics/drawable/VectorDrawable$VFullPath$6;
-Landroid/graphics/drawable/VectorDrawable$VFullPath$7;
-Landroid/graphics/drawable/VectorDrawable$VFullPath$8;
-Landroid/graphics/drawable/VectorDrawable$VFullPath$9;
-Landroid/graphics/drawable/VectorDrawable$VGroup;
-Landroid/graphics/drawable/VectorDrawable$VGroup$1;
-Landroid/graphics/drawable/VectorDrawable$VGroup$2;
-Landroid/graphics/drawable/VectorDrawable$VGroup$3;
-Landroid/graphics/drawable/VectorDrawable$VGroup$4;
-Landroid/graphics/drawable/VectorDrawable$VGroup$5;
-Landroid/graphics/drawable/VectorDrawable$VGroup$6;
-Landroid/graphics/drawable/VectorDrawable$VGroup$7;
-Landroid/graphics/drawable/VectorDrawable$VGroup$8;
-Landroid/graphics/drawable/VectorDrawable$VGroup$9;
-Landroid/graphics/drawable/VectorDrawable$VObject;
-Landroid/graphics/drawable/VectorDrawable$VPath;
-Landroid/graphics/drawable/VectorDrawable$VPath$1;
-Landroid/graphics/DrawFilter;
-Landroid/graphics/EmbossMaskFilter;
-Landroid/graphics/FontFamily;
-Landroid/graphics/FontListParser;
-Landroid/graphics/GraphicBuffer;
-Landroid/graphics/GraphicBuffer$1;
-Landroid/graphics/Insets;
-Landroid/graphics/Interpolator;
-Landroid/graphics/LightingColorFilter;
-Landroid/graphics/LinearGradient;
-Landroid/graphics/MaskFilter;
-Landroid/graphics/Matrix;
-Landroid/graphics/Matrix$1;
-Landroid/graphics/Matrix$NoImagePreloadHolder;
-Landroid/graphics/Matrix$ScaleToFit;
-Landroid/graphics/Movie;
-Landroid/graphics/NinePatch;
-Landroid/graphics/NinePatch$InsetStruct;
-Landroid/graphics/Outline;
-Landroid/graphics/Paint;
-Landroid/graphics/Paint$Align;
-Landroid/graphics/Paint$Cap;
-Landroid/graphics/PaintFlagsDrawFilter;
-Landroid/graphics/Paint$FontMetrics;
-Landroid/graphics/Paint$FontMetricsInt;
-Landroid/graphics/Paint$Join;
-Landroid/graphics/Paint$NoImagePreloadHolder;
-Landroid/graphics/Paint$Style;
-Landroid/graphics/Path;
-Landroid/graphics/PathDashPathEffect;
-Landroid/graphics/PathEffect;
-Landroid/graphics/Path$FillType;
-Landroid/graphics/PathMeasure;
-Landroid/graphics/pdf/PdfDocument;
-Landroid/graphics/pdf/PdfEditor;
-Landroid/graphics/pdf/PdfRenderer;
-Landroid/graphics/Picture;
-Landroid/graphics/PixelFormat;
-Landroid/graphics/Point;
-Landroid/graphics/Point$1;
-Landroid/graphics/PointF;
-Landroid/graphics/PointF$1;
-Landroid/graphics/PorterDuff;
-Landroid/graphics/PorterDuffColorFilter;
-Landroid/graphics/PorterDuff$Mode;
-Landroid/graphics/RadialGradient;
-Landroid/graphics/Rect;
-Landroid/graphics/Rect$1;
-Landroid/graphics/RectF;
-Landroid/graphics/RectF$1;
-Landroid/graphics/Region;
-Landroid/graphics/Region$1;
-Landroid/graphics/RegionIterator;
-Landroid/graphics/Region$Op;
-Landroid/graphics/Shader;
-Landroid/graphics/Shader$TileMode;
-Landroid/graphics/SumPathEffect;
-Landroid/graphics/SurfaceTexture;
-Landroid/graphics/SweepGradient;
-Landroid/graphics/TableMaskFilter;
-Landroid/graphics/TemporaryBuffer;
-Landroid/graphics/Typeface;
-Landroid/graphics/YuvImage;
-Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;
-Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;
-Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback$Stub;
-Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;
-Landroid/hardware/Camera;
-Landroid/hardware/camera2/CameraAccessException;
-Landroid/hardware/camera2/CameraCharacteristics$Key;
-Landroid/hardware/camera2/CameraManager;
-Landroid/hardware/camera2/CaptureRequest$Key;
-Landroid/hardware/camera2/CaptureResult$Key;
-Landroid/hardware/camera2/DngCreator;
-Landroid/hardware/camera2/impl/CameraMetadataNative;
-Landroid/hardware/camera2/legacy/LegacyCameraDevice;
-Landroid/hardware/camera2/legacy/PerfMeasurement;
-Landroid/hardware/Camera$CameraInfo;
-Landroid/hardware/Camera$Face;
-Landroid/hardware/ConsumerIrManager;
-Landroid/hardware/display/DisplayManager;
-Landroid/hardware/display/DisplayManager$DisplayListener;
-Landroid/hardware/display/DisplayManagerGlobal;
-Landroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;
-Landroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;
-Landroid/hardware/display/DisplayManagerInternal;
-Landroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;
-Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;
-Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;
-Landroid/hardware/display/DisplayViewport;
-Landroid/hardware/display/IDisplayManager;
-Landroid/hardware/display/IDisplayManagerCallback;
-Landroid/hardware/display/IDisplayManagerCallback$Stub;
-Landroid/hardware/display/IDisplayManagerCallback$Stub$Proxy;
-Landroid/hardware/display/IDisplayManager$Stub;
-Landroid/hardware/display/IVirtualDisplayCallback;
-Landroid/hardware/display/WifiDisplay;
-Landroid/hardware/display/WifiDisplay$1;
-Landroid/hardware/display/WifiDisplaySessionInfo;
-Landroid/hardware/display/WifiDisplaySessionInfo$1;
-Landroid/hardware/display/WifiDisplayStatus;
-Landroid/hardware/display/WifiDisplayStatus$1;
-Landroid/hardware/fingerprint/FingerprintManager;
-Landroid/hardware/fingerprint/IFingerprintClientActiveCallback;
-Landroid/hardware/fingerprint/IFingerprintService;
-Landroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback;
-Landroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback$Stub;
-Landroid/hardware/fingerprint/IFingerprintServiceLockoutResetCallback$Stub$Proxy;
-Landroid/hardware/fingerprint/IFingerprintServiceReceiver;
-Landroid/hardware/fingerprint/IFingerprintService$Stub;
-Landroid/hardware/HardwareBuffer;
-Landroid/hardware/HardwareBuffer$1;
-Landroid/hardware/hdmi/HdmiControlManager;
-Landroid/hardware/hdmi/HdmiPlaybackClient$DisplayStatusCallback;
-Landroid/hardware/ICameraService;
-Landroid/hardware/ICameraServiceProxy;
-Landroid/hardware/ICameraServiceProxy$Stub;
-Landroid/hardware/ICameraService$Stub;
-Landroid/hardware/ICameraService$Stub$Proxy;
-Landroid/hardware/IConsumerIrService;
-Landroid/hardware/IConsumerIrService$Stub;
-Landroid/hardware/input/IInputDevicesChangedListener;
-Landroid/hardware/input/IInputDevicesChangedListener$Stub;
-Landroid/hardware/input/IInputDevicesChangedListener$Stub$Proxy;
-Landroid/hardware/input/IInputManager;
-Landroid/hardware/input/IInputManager$Stub;
-Landroid/hardware/input/InputDeviceIdentifier;
-Landroid/hardware/input/InputDeviceIdentifier$1;
-Landroid/hardware/input/InputManager;
-Landroid/hardware/input/InputManager$InputDeviceListener;
-Landroid/hardware/input/InputManagerInternal;
-Landroid/hardware/input/ITabletModeChangedListener;
-Landroid/hardware/input/KeyboardLayout;
-Landroid/hardware/input/KeyboardLayout$1;
-Landroid/hardware/input/TouchCalibration;
-Landroid/hardware/input/TouchCalibration$1;
-Landroid/hardware/ISerialManager;
-Landroid/hardware/ISerialManager$Stub;
-Landroid/hardware/location/ActivityRecognitionHardware;
-Landroid/hardware/location/ContextHubInfo;
-Landroid/hardware/location/ContextHubInfo$1;
-Landroid/hardware/location/ContextHubManager;
-Landroid/hardware/location/ContextHubMessage;
-Landroid/hardware/location/ContextHubMessage$1;
-Landroid/hardware/location/GeofenceHardwareImpl;
-Landroid/hardware/location/GeofenceHardwareImpl$1;
-Landroid/hardware/location/GeofenceHardwareImpl$2;
-Landroid/hardware/location/GeofenceHardwareImpl$3;
-Landroid/hardware/location/GeofenceHardwareImpl$Reaper;
-Landroid/hardware/location/GeofenceHardwareService;
-Landroid/hardware/location/GeofenceHardwareService$1;
-Landroid/hardware/location/IActivityRecognitionHardware;
-Landroid/hardware/location/IActivityRecognitionHardwareClient;
-Landroid/hardware/location/IActivityRecognitionHardwareClient$Stub;
-Landroid/hardware/location/IActivityRecognitionHardwareClient$Stub$Proxy;
-Landroid/hardware/location/IActivityRecognitionHardware$Stub;
-Landroid/hardware/location/IActivityRecognitionHardwareWatcher;
-Landroid/hardware/location/IContextHubCallback;
-Landroid/hardware/location/IContextHubCallback$Stub;
-Landroid/hardware/location/IContextHubCallback$Stub$Proxy;
-Landroid/hardware/location/IContextHubService;
-Landroid/hardware/location/IContextHubService$Stub;
-Landroid/hardware/location/IGeofenceHardware;
-Landroid/hardware/location/IGeofenceHardwareMonitorCallback;
-Landroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub;
-Landroid/hardware/location/IGeofenceHardwareMonitorCallback$Stub$Proxy;
-Landroid/hardware/location/IGeofenceHardware$Stub;
-Landroid/hardware/location/MemoryRegion;
-Landroid/hardware/location/NanoApp;
-Landroid/hardware/location/NanoAppFilter;
-Landroid/hardware/location/NanoAppFilter$1;
-Landroid/hardware/location/NanoAppInstanceInfo;
-Landroid/hardware/location/NanoAppInstanceInfo$1;
-Landroid/hardware/radio/RadioManager;
-Landroid/hardware/radio/RadioManager$AmBandConfig;
-Landroid/hardware/radio/RadioManager$AmBandConfig$1;
-Landroid/hardware/radio/RadioManager$AmBandDescriptor;
-Landroid/hardware/radio/RadioManager$AmBandDescriptor$1;
-Landroid/hardware/radio/RadioManager$BandConfig;
-Landroid/hardware/radio/RadioManager$BandConfig$1;
-Landroid/hardware/radio/RadioManager$BandDescriptor;
-Landroid/hardware/radio/RadioManager$BandDescriptor$1;
-Landroid/hardware/radio/RadioManager$FmBandConfig;
-Landroid/hardware/radio/RadioManager$FmBandConfig$1;
-Landroid/hardware/radio/RadioManager$FmBandDescriptor;
-Landroid/hardware/radio/RadioManager$FmBandDescriptor$1;
-Landroid/hardware/radio/RadioManager$ModuleProperties;
-Landroid/hardware/radio/RadioManager$ModuleProperties$1;
-Landroid/hardware/radio/RadioManager$ProgramInfo;
-Landroid/hardware/radio/RadioManager$ProgramInfo$1;
-Landroid/hardware/radio/RadioMetadata;
-Landroid/hardware/radio/RadioMetadata$1;
-Landroid/hardware/radio/RadioModule;
-Landroid/hardware/radio/RadioTuner;
-Landroid/hardware/Sensor;
-Landroid/hardware/SensorEvent;
-Landroid/hardware/SensorEventListener;
-Landroid/hardware/SensorManager;
-Landroid/hardware/SerialManager;
-Landroid/hardware/SerialPort;
-Landroid/hardware/soundtrigger/IRecognitionStatusCallback;
-Landroid/hardware/soundtrigger/SoundTrigger;
-Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;
-Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel$1;
-Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent;
-Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent$1;
-Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;
-Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;
-Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase$1;
-Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;
-Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent$1;
-Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;
-Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra$1;
-Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;
-Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel$1;
-Landroid/hardware/soundtrigger/SoundTriggerModule;
-Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
-Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties$1;
-Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;
-Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig$1;
-Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;
-Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent$1;
-Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;
-Landroid/hardware/soundtrigger/SoundTrigger$SoundModelEvent;
-Landroid/hardware/soundtrigger/SoundTrigger$SoundModelEvent$1;
-Landroid/hardware/soundtrigger/SoundTrigger$StatusListener;
-Landroid/hardware/SystemSensorManager;
-Landroid/hardware/SystemSensorManager$BaseEventQueue;
-Landroid/hardware/SystemSensorManager$SensorEventQueue;
-Landroid/hardware/TriggerEvent;
-Landroid/hardware/TriggerEventListener;
-Landroid/hardware/usb/IUsbManager;
-Landroid/hardware/usb/IUsbManager$Stub;
-Landroid/hardware/usb/UsbAccessory;
-Landroid/hardware/usb/UsbDevice;
-Landroid/hardware/usb/UsbDeviceConnection;
-Landroid/hardware/usb/UsbManager;
-Landroid/hardware/usb/UsbPort;
-Landroid/hardware/usb/UsbPort$1;
-Landroid/hardware/usb/UsbPortStatus;
-Landroid/hardware/usb/UsbPortStatus$1;
-Landroid/hardware/usb/UsbRequest;
-Landroid/hardware/usb/V1_0/IUsb;
-Landroid/hardware/usb/V1_0/IUsbCallback;
-Landroid/hardware/usb/V1_0/IUsbCallback$Stub;
-Landroid/hardware/usb/V1_0/IUsb$Proxy;
-Landroid/hardware/usb/V1_0/PortStatus;
-Landroid/hardware/wifi/V1_0/IWifiEventCallback;
-Landroid/hardware/wifi/V1_0/IWifiEventCallback$Stub;
-Landroid/hidl/base/V1_0/IBase;
-Landroid/hidl/manager/V1_0/IServiceManager;
-Landroid/hidl/manager/V1_0/IServiceManager$Proxy;
-Landroid/hidl/manager/V1_0/IServiceNotification;
-Landroid/hidl/manager/V1_0/IServiceNotification$Stub;
-Landroid/icu/impl/BMPSet;
-Landroid/icu/impl/CacheBase;
-Landroid/icu/impl/CacheValue;
-Landroid/icu/impl/CacheValue$NullValue;
-Landroid/icu/impl/CacheValue$SoftValue;
-Landroid/icu/impl/CacheValue$Strength;
-Landroid/icu/impl/CharTrie;
-Landroid/icu/impl/ClassLoaderUtil;
-Landroid/icu/impl/CurrencyData;
-Landroid/icu/impl/CurrencyData$CurrencyDisplayInfo;
-Landroid/icu/impl/CurrencyData$CurrencyDisplayInfoProvider;
-Landroid/icu/impl/CurrencyData$CurrencySpacingInfo;
-Landroid/icu/impl/CurrencyData$CurrencySpacingInfo$SpacingPattern;
-Landroid/icu/impl/CurrencyData$CurrencySpacingInfo$SpacingType;
-Landroid/icu/impl/ICUBinary;
-Landroid/icu/impl/ICUBinary$Authenticate;
-Landroid/icu/impl/ICUBinary$DataFile;
-Landroid/icu/impl/ICUBinary$DatPackageReader;
-Landroid/icu/impl/ICUBinary$DatPackageReader$IsAcceptable;
-Landroid/icu/impl/ICUBinary$PackageDataFile;
-Landroid/icu/impl/ICUCache;
-Landroid/icu/impl/ICUConfig;
-Landroid/icu/impl/ICUCurrencyDisplayInfoProvider;
-Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;
-Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$SpacingInfoSink;
-Landroid/icu/impl/ICUCurrencyMetaInfo;
-Landroid/icu/impl/ICUCurrencyMetaInfo$Collector;
-Landroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector;
-Landroid/icu/impl/ICUCurrencyMetaInfo$UniqueList;
-Landroid/icu/impl/ICUData;
-Landroid/icu/impl/ICUDebug;
-Landroid/icu/impl/ICULangDataTables;
-Landroid/icu/impl/ICURegionDataTables;
-Landroid/icu/impl/ICUResourceBundle;
-Landroid/icu/impl/ICUResourceBundle$1;
-Landroid/icu/impl/ICUResourceBundle$2;
-Landroid/icu/impl/ICUResourceBundle$4;
-Landroid/icu/impl/ICUResourceBundleImpl;
-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/ICUResourceBundle$Loader;
-Landroid/icu/impl/ICUResourceBundle$OpenType;
-Landroid/icu/impl/ICUResourceBundleReader;
-Landroid/icu/impl/ICUResourceBundleReader$Array;
-Landroid/icu/impl/ICUResourceBundleReader$Array16;
-Landroid/icu/impl/ICUResourceBundleReader$Array32;
-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;
-Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;
-Landroid/icu/impl/ICUResourceBundleReader$Table;
-Landroid/icu/impl/ICUResourceBundleReader$Table16;
-Landroid/icu/impl/ICUResourceBundleReader$Table1632;
-Landroid/icu/impl/ICUResourceBundle$WholeBundle;
-Landroid/icu/impl/ICUResourceTableAccess;
-Landroid/icu/impl/IDNA2003;
-Landroid/icu/impl/locale/AsciiUtil;
-Landroid/icu/impl/locale/BaseLocale;
-Landroid/icu/impl/locale/BaseLocale$Cache;
-Landroid/icu/impl/locale/BaseLocale$Key;
-Landroid/icu/impl/LocaleDisplayNamesImpl;
-Landroid/icu/impl/LocaleDisplayNamesImpl$Cache;
-Landroid/icu/impl/LocaleDisplayNamesImpl$CapitalizationContextUsage;
-Landroid/icu/impl/LocaleDisplayNamesImpl$DataTable;
-Landroid/icu/impl/LocaleDisplayNamesImpl$DataTables;
-Landroid/icu/impl/LocaleDisplayNamesImpl$ICUDataTable;
-Landroid/icu/impl/LocaleDisplayNamesImpl$ICUDataTables;
-Landroid/icu/impl/LocaleDisplayNamesImpl$LangDataTables;
-Landroid/icu/impl/LocaleDisplayNamesImpl$RegionDataTables;
-Landroid/icu/impl/LocaleIDParser;
-Landroid/icu/impl/LocaleIDs;
-Landroid/icu/impl/locale/LocaleObjectCache;
-Landroid/icu/impl/locale/LocaleObjectCache$CacheEntry;
-Landroid/icu/impl/locale/LocaleSyntaxException;
-Landroid/icu/impl/Norm2AllModes;
-Landroid/icu/impl/Norm2AllModes$1;
-Landroid/icu/impl/Norm2AllModes$ComposeNormalizer2;
-Landroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;
-Landroid/icu/impl/Norm2AllModes$FCDNormalizer2;
-Landroid/icu/impl/Norm2AllModes$NFKCSingleton;
-Landroid/icu/impl/Norm2AllModes$NoopNormalizer2;
-Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;
-Landroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;
-Landroid/icu/impl/Normalizer2Impl;
-Landroid/icu/impl/Normalizer2Impl$1;
-Landroid/icu/impl/Normalizer2Impl$IsAcceptable;
-Landroid/icu/impl/Pair;
-Landroid/icu/impl/ReplaceableUCharacterIterator;
-Landroid/icu/impl/SimpleCache;
-Landroid/icu/impl/SimpleFormatterImpl;
-Landroid/icu/impl/SoftCache;
-Landroid/icu/impl/StringPrepDataReader;
-Landroid/icu/impl/Trie;
-Landroid/icu/impl/Trie2;
-Landroid/icu/impl/Trie2$1;
-Landroid/icu/impl/Trie2_16;
-Landroid/icu/impl/Trie2$UTrie2Header;
-Landroid/icu/impl/Trie2$ValueMapper;
-Landroid/icu/impl/Trie2$ValueWidth;
-Landroid/icu/impl/Trie$DataManipulate;
-Landroid/icu/impl/Trie$DefaultGetFoldingOffset;
-Landroid/icu/impl/UBiDiProps;
-Landroid/icu/impl/UBiDiProps$IsAcceptable;
-Landroid/icu/impl/UCharacterProperty;
-Landroid/icu/impl/UCharacterProperty$1;
-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$2;
-Landroid/icu/impl/UCharacterProperty$20;
-Landroid/icu/impl/UCharacterProperty$21;
-Landroid/icu/impl/UCharacterProperty$22;
-Landroid/icu/impl/UCharacterProperty$23;
-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/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/Utility;
-Landroid/icu/lang/UCharacter;
-Landroid/icu/lang/UCharacterEnums$ECharacterCategory;
-Landroid/icu/lang/UCharacterEnums$ECharacterDirection;
-Landroid/icu/math/BigDecimal;
-Landroid/icu/math/MathContext;
-Landroid/icu/text/CurrencyDisplayNames;
-Landroid/icu/text/CurrencyMetaInfo;
-Landroid/icu/text/CurrencyMetaInfo$CurrencyDigits;
-Landroid/icu/text/CurrencyMetaInfo$CurrencyFilter;
-Landroid/icu/text/DecimalFormat;
-Landroid/icu/text/DecimalFormatSymbols;
-Landroid/icu/text/DecimalFormatSymbols$1;
-Landroid/icu/text/DecimalFormatSymbols$CacheData;
-Landroid/icu/text/DecimalFormatSymbols$DecFmtDataSink;
-Landroid/icu/text/DecimalFormat$Unit;
-Landroid/icu/text/DigitList;
-Landroid/icu/text/DisplayContext;
-Landroid/icu/text/DisplayContext$Type;
-Landroid/icu/text/IDNA;
-Landroid/icu/text/LocaleDisplayNames;
-Landroid/icu/text/LocaleDisplayNames$DialectHandling;
-Landroid/icu/text/Normalizer;
-Landroid/icu/text/Normalizer2;
-Landroid/icu/text/Normalizer$FCDMode;
-Landroid/icu/text/Normalizer$Mode;
-Landroid/icu/text/Normalizer$ModeImpl;
-Landroid/icu/text/Normalizer$NFCMode;
-Landroid/icu/text/Normalizer$NFDMode;
-Landroid/icu/text/Normalizer$NFKCMode;
-Landroid/icu/text/Normalizer$NFKDMode;
-Landroid/icu/text/Normalizer$NFKDModeImpl;
-Landroid/icu/text/Normalizer$NONEMode;
-Landroid/icu/text/Normalizer$QuickCheckResult;
-Landroid/icu/text/NumberFormat;
-Landroid/icu/text/NumberFormat$Field;
-Landroid/icu/text/NumberingSystem;
-Landroid/icu/text/NumberingSystem$1;
-Landroid/icu/text/NumberingSystem$2;
-Landroid/icu/text/NumberingSystem$LocaleLookupData;
-Landroid/icu/text/Replaceable;
-Landroid/icu/text/ReplaceableString;
-Landroid/icu/text/StringPrep;
-Landroid/icu/text/StringPrepParseException;
-Landroid/icu/text/TimeZoneNames$NameType;
-Landroid/icu/text/UCharacterIterator;
-Landroid/icu/text/UFieldPosition;
-Landroid/icu/text/UFormat;
-Landroid/icu/text/UForwardCharacterIterator;
-Landroid/icu/text/UnicodeFilter;
-Landroid/icu/text/UnicodeMatcher;
-Landroid/icu/text/UnicodeSet;
-Landroid/icu/text/UTF16;
-Landroid/icu/util/Currency;
-Landroid/icu/util/Currency$1;
-Landroid/icu/util/Currency$CurrencyUsage;
-Landroid/icu/util/Currency$EquivalenceRelation;
-Landroid/icu/util/Freezable;
-Landroid/icu/util/MeasureUnit;
-Landroid/icu/util/MeasureUnit$1;
-Landroid/icu/util/MeasureUnit$2;
-Landroid/icu/util/MeasureUnit$3;
-Landroid/icu/util/MeasureUnit$Factory;
-Landroid/icu/util/TimeUnit;
-Landroid/icu/util/TimeZone;
-Landroid/icu/util/TimeZone$ConstantZone;
-Landroid/icu/util/ULocale;
-Landroid/icu/util/ULocale$1;
-Landroid/icu/util/ULocale$2;
-Landroid/icu/util/ULocale$Category;
-Landroid/icu/util/ULocale$JDKLocaleHelper;
-Landroid/icu/util/ULocale$Type;
-Landroid/icu/util/UResourceBundle;
-Landroid/icu/util/UResourceBundle$RootType;
-Landroid/icu/util/UResourceTypeMismatchException;
-Landroid/icu/util/VersionInfo;
-Landroid/location/Address;
-Landroid/location/Address$1;
-Landroid/location/Country;
-Landroid/location/Country$1;
-Landroid/location/CountryDetector;
-Landroid/location/CountryDetector$ListenerTransport;
-Landroid/location/CountryListener;
-Landroid/location/Criteria;
-Landroid/location/Geocoder;
-Landroid/location/GeocoderParams;
-Landroid/location/GeocoderParams$1;
-Landroid/location/Geofence;
-Landroid/location/GnssMeasurementCallbackTransport;
-Landroid/location/GnssMeasurementCallbackTransport$ListenerTransport;
-Landroid/location/GnssNavigationMessageCallbackTransport;
-Landroid/location/GnssNavigationMessageCallbackTransport$ListenerTransport;
-Landroid/location/ICountryDetector;
-Landroid/location/ICountryDetector$Stub;
-Landroid/location/ICountryListener;
-Landroid/location/ICountryListener$Stub;
-Landroid/location/ICountryListener$Stub$Proxy;
-Landroid/location/IGeocodeProvider;
-Landroid/location/IGeocodeProvider$Stub;
-Landroid/location/IGeocodeProvider$Stub$Proxy;
-Landroid/location/IGeofenceProvider;
-Landroid/location/IGeofenceProvider$Stub;
-Landroid/location/IGeofenceProvider$Stub$Proxy;
-Landroid/location/IGnssMeasurementsListener;
-Landroid/location/IGnssMeasurementsListener$Stub;
-Landroid/location/IGnssNavigationMessageListener;
-Landroid/location/IGnssNavigationMessageListener$Stub;
-Landroid/location/IGnssStatusListener;
-Landroid/location/IGnssStatusListener$Stub;
-Landroid/location/IGnssStatusListener$Stub$Proxy;
-Landroid/location/IGnssStatusProvider;
-Landroid/location/IGnssStatusProvider$Stub;
-Landroid/location/IGpsGeofenceHardware;
-Landroid/location/IGpsGeofenceHardware$Stub;
-Landroid/location/ILocationListener;
-Landroid/location/ILocationListener$Stub;
-Landroid/location/ILocationListener$Stub$Proxy;
-Landroid/location/ILocationManager;
-Landroid/location/ILocationManager$Stub;
-Landroid/location/INetInitiatedListener;
-Landroid/location/INetInitiatedListener$Stub;
-Landroid/location/LocalListenerHelper;
-Landroid/location/Location;
-Landroid/location/Location$1;
-Landroid/location/Location$2;
-Landroid/location/LocationListener;
-Landroid/location/LocationManager;
-Landroid/location/LocationManager$ListenerTransport;
-Landroid/location/LocationManager$ListenerTransport$1;
-Landroid/location/LocationManager$ListenerTransport$2;
-Landroid/location/LocationRequest;
-Landroid/location/LocationRequest$1;
-Landroid/media/AudioAttributes;
-Landroid/media/AudioAttributes$1;
-Landroid/media/AudioAttributes$Builder;
-Landroid/media/AudioDeviceCallback;
-Landroid/media/AudioDeviceInfo;
-Landroid/media/AudioDevicePort;
-Landroid/media/AudioDevicePortConfig;
-Landroid/media/AudioFocusInfo;
-Landroid/media/AudioFocusInfo$1;
-Landroid/media/AudioFormat;
-Landroid/media/AudioFormat$1;
-Landroid/media/AudioFormat$Builder;
-Landroid/media/AudioGain;
-Landroid/media/AudioGainConfig;
-Landroid/media/AudioHandle;
-Landroid/media/AudioManager;
-Landroid/media/AudioManager$1;
-Landroid/media/AudioManager$2;
-Landroid/media/AudioManager$3;
-Landroid/media/AudioManagerInternal;
-Landroid/media/AudioManagerInternal$RingerModeDelegate;
-Landroid/media/AudioManager$NativeEventHandlerDelegate;
-Landroid/media/AudioManager$NativeEventHandlerDelegate$1;
-Landroid/media/AudioManager$OnAmPortUpdateListener;
-Landroid/media/AudioManager$OnAudioPortUpdateListener;
-Landroid/media/AudioManager$ServiceEventHandlerDelegate;
-Landroid/media/AudioManager$ServiceEventHandlerDelegate$1;
-Landroid/media/AudioMixPort;
-Landroid/media/AudioMixPortConfig;
-Landroid/media/AudioPatch;
-Landroid/media/AudioPlaybackConfiguration;
-Landroid/media/AudioPlaybackConfiguration$1;
-Landroid/media/AudioPlaybackConfiguration$IPlayerShell;
-Landroid/media/AudioPlaybackConfiguration$PlayerDeathMonitor;
-Landroid/media/audiopolicy/AudioMix;
-Landroid/media/audiopolicy/AudioMixingRule;
-Landroid/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion;
-Landroid/media/audiopolicy/AudioPolicyConfig;
-Landroid/media/audiopolicy/IAudioPolicyCallback;
-Landroid/media/audiopolicy/IAudioPolicyCallback$Stub;
-Landroid/media/AudioPort;
-Landroid/media/AudioPortConfig;
-Landroid/media/AudioPortEventHandler;
-Landroid/media/AudioPortEventHandler$1;
-Landroid/media/AudioRecord;
-Landroid/media/AudioRecordingConfiguration;
-Landroid/media/AudioRecordingConfiguration$1;
-Landroid/media/AudioRoutesInfo;
-Landroid/media/AudioRoutesInfo$1;
-Landroid/media/AudioRouting;
-Landroid/media/AudioSystem;
-Landroid/media/AudioSystem$AudioRecordingCallback;
-Landroid/media/AudioSystem$DynamicPolicyCallback;
-Landroid/media/AudioSystem$ErrorCallback;
-Landroid/media/AudioTimestamp;
-Landroid/media/AudioTrack;
-Landroid/media/CamcorderProfile;
-Landroid/media/CameraProfile;
-Landroid/media/DecoderCapabilities;
-Landroid/media/EncoderCapabilities;
-Landroid/media/IAudioFocusDispatcher;
-Landroid/media/IAudioFocusDispatcher$Stub;
-Landroid/media/IAudioFocusDispatcher$Stub$Proxy;
-Landroid/media/IAudioRoutesObserver;
-Landroid/media/IAudioRoutesObserver$Stub;
-Landroid/media/IAudioRoutesObserver$Stub$Proxy;
-Landroid/media/IAudioService;
-Landroid/media/IAudioService$Stub;
-Landroid/media/Image;
-Landroid/media/ImageReader;
-Landroid/media/ImageReader$SurfaceImage;
-Landroid/media/ImageWriter;
-Landroid/media/ImageWriter$WriterSurfaceImage;
-Landroid/media/IMediaHTTPConnection;
-Landroid/media/IMediaHTTPConnection$Stub;
-Landroid/media/IMediaResourceMonitor;
-Landroid/media/IMediaResourceMonitor$Stub;
-Landroid/media/IMediaRouterClient;
-Landroid/media/IMediaRouterClient$Stub;
-Landroid/media/IMediaRouterClient$Stub$Proxy;
-Landroid/media/IMediaRouterService;
-Landroid/media/IMediaRouterService$Stub;
-Landroid/media/IPlaybackConfigDispatcher;
-Landroid/media/IPlaybackConfigDispatcher$Stub;
-Landroid/media/IPlayer;
-Landroid/media/IPlayer$Stub;
-Landroid/media/IPlayer$Stub$Proxy;
-Landroid/media/IRecordingConfigDispatcher;
-Landroid/media/IRecordingConfigDispatcher$Stub;
-Landroid/media/IRemoteVolumeController;
-Landroid/media/IRemoteVolumeController$Stub;
-Landroid/media/IRemoteVolumeController$Stub$Proxy;
-Landroid/media/IRemoteVolumeObserver;
-Landroid/media/IRemoteVolumeObserver$Stub;
-Landroid/media/IRingtonePlayer;
-Landroid/media/IRingtonePlayer$Stub;
-Landroid/media/IRingtonePlayer$Stub$Proxy;
-Landroid/media/IVolumeController;
-Landroid/media/IVolumeController$Stub;
-Landroid/media/IVolumeController$Stub$Proxy;
-Landroid/media/JetPlayer;
-Landroid/media/MediaCodec;
-Landroid/media/MediaCodecList;
-Landroid/media/MediaCrypto;
-Landroid/media/MediaDescription;
-Landroid/media/MediaDescription$1;
-Landroid/media/MediaDrm;
-Landroid/media/MediaExtractor;
-Landroid/media/MediaHTTPConnection;
-Landroid/media/MediaMetadata;
-Landroid/media/MediaMetadata$1;
-Landroid/media/MediaMetadata$Builder;
-Landroid/media/MediaMetadataRetriever;
-Landroid/media/MediaMuxer;
-Landroid/media/MediaPlayer;
-Landroid/media/MediaRecorder;
-Landroid/media/MediaRouter;
-Landroid/media/MediaRouter$Callback;
-Landroid/media/MediaRouter$CallbackInfo;
-Landroid/media/MediaRouterClientState;
-Landroid/media/MediaRouterClientState$1;
-Landroid/media/MediaRouter$RouteCategory;
-Landroid/media/MediaRouter$RouteInfo;
-Landroid/media/MediaRouter$RouteInfo$1;
-Landroid/media/MediaRouter$SimpleCallback;
-Landroid/media/MediaRouter$Static;
-Landroid/media/MediaRouter$Static$1;
-Landroid/media/MediaRouter$Static$Client;
-Landroid/media/MediaRouter$Static$Client$1;
-Landroid/media/MediaRouter$VolumeChangeReceiver;
-Landroid/media/MediaRouter$WifiDisplayStatusChangedReceiver;
-Landroid/media/MediaScanner;
-Landroid/media/MediaSync;
-Landroid/media/midi/IMidiDeviceListener;
-Landroid/media/midi/IMidiDeviceOpenCallback;
-Landroid/media/midi/IMidiDeviceServer;
-Landroid/media/midi/IMidiManager;
-Landroid/media/midi/IMidiManager$Stub;
-Landroid/media/midi/MidiDeviceInfo;
-Landroid/media/midi/MidiDeviceStatus;
-Landroid/media/midi/MidiManager;
-Landroid/media/PlaybackParams;
-Landroid/media/PlaybackParams$1;
-Landroid/media/PlayerBase;
-Landroid/media/PlayerBase$1;
-Landroid/media/PlayerBase$2;
-Landroid/media/PlayerBase$PlayerIdCard;
-Landroid/media/PlayerBase$PlayerIdCard$1;
-Landroid/media/projection/IMediaProjection;
-Landroid/media/projection/IMediaProjectionManager;
-Landroid/media/projection/IMediaProjectionManager$Stub;
-Landroid/media/projection/IMediaProjectionWatcherCallback;
-Landroid/media/projection/IMediaProjectionWatcherCallback$Stub;
-Landroid/media/projection/IMediaProjectionWatcherCallback$Stub$Proxy;
-Landroid/media/projection/MediaProjectionInfo;
-Landroid/media/projection/MediaProjectionManager;
-Landroid/media/Rating;
-Landroid/media/Rating$1;
-Landroid/media/RemoteDisplay;
-Landroid/media/ResampleInputStream;
-Landroid/media/session/IActiveSessionsListener;
-Landroid/media/session/IActiveSessionsListener$Stub;
-Landroid/media/session/IActiveSessionsListener$Stub$Proxy;
-Landroid/media/session/IOnMediaKeyListener;
-Landroid/media/session/IOnVolumeKeyLongPressListener;
-Landroid/media/session/ISession;
-Landroid/media/session/ISessionCallback;
-Landroid/media/session/ISessionCallback$Stub;
-Landroid/media/session/ISessionCallback$Stub$Proxy;
-Landroid/media/session/ISessionController;
-Landroid/media/session/ISessionControllerCallback;
-Landroid/media/session/ISessionControllerCallback$Stub;
-Landroid/media/session/ISessionControllerCallback$Stub$Proxy;
-Landroid/media/session/ISessionController$Stub;
-Landroid/media/session/ISessionManager;
-Landroid/media/session/ISessionManager$Stub;
-Landroid/media/session/ISession$Stub;
-Landroid/media/session/MediaController;
-Landroid/media/session/MediaController$CallbackStub;
-Landroid/media/session/MediaController$TransportControls;
-Landroid/media/session/MediaSession;
-Landroid/media/session/MediaSession$Callback;
-Landroid/media/session/MediaSession$CallbackMessageHandler;
-Landroid/media/session/MediaSession$CallbackStub;
-Landroid/media/session/MediaSessionManager;
-Landroid/media/session/MediaSession$QueueItem;
-Landroid/media/session/MediaSession$QueueItem$1;
-Landroid/media/session/MediaSession$Token;
-Landroid/media/session/MediaSession$Token$1;
-Landroid/media/session/ParcelableVolumeInfo;
-Landroid/media/session/ParcelableVolumeInfo$1;
-Landroid/media/session/PlaybackState;
-Landroid/media/session/PlaybackState$1;
-Landroid/media/session/PlaybackState$Builder;
-Landroid/media/session/PlaybackState$CustomAction;
-Landroid/media/session/PlaybackState$CustomAction$1;
-Landroid/media/SoundPool;
-Landroid/media/SoundPool$Builder;
-Landroid/media/SoundPool$EventHandler;
-Landroid/media/SoundPool$OnLoadCompleteListener;
-Landroid/media/soundtrigger/SoundTriggerManager;
-Landroid/media/SubtitleController$Listener;
-Landroid/media/ToneGenerator;
-Landroid/media/tv/TvInputHardwareInfo$Builder;
-Landroid/media/tv/TvInputManager;
-Landroid/media/tv/TvStreamConfig;
-Landroid/media/tv/TvStreamConfig$Builder;
-Landroid/media/VolumePolicy;
-Landroid/media/VolumePolicy$1;
-Landroid/metrics/LogMaker;
-Landroid/mtp/MtpDatabase;
-Landroid/mtp/MtpDevice;
-Landroid/mtp/MtpDeviceInfo;
-Landroid/mtp/MtpEvent;
-Landroid/mtp/MtpObjectInfo;
-Landroid/mtp/MtpPropertyGroup;
-Landroid/mtp/MtpPropertyList;
-Landroid/mtp/MtpServer;
-Landroid/mtp/MtpStorage;
-Landroid/mtp/MtpStorageInfo;
-Landroid/net/apf/ApfCapabilities;
-Landroid/net/apf/ApfFilter;
-Landroid/net/apf/ApfFilter$ProcessRaResult;
-Landroid/net/apf/ApfFilter$Ra;
-Landroid/net/apf/ApfFilter$ReceiveThread;
-Landroid/net/apf/ApfGenerator;
-Landroid/net/apf/ApfGenerator$ExtendedOpcodes;
-Landroid/net/apf/ApfGenerator$IllegalInstructionException;
-Landroid/net/apf/ApfGenerator$Instruction;
-Landroid/net/apf/ApfGenerator$Opcodes;
-Landroid/net/apf/ApfGenerator$Register;
-Landroid/net/ConnectivityManager;
-Landroid/net/ConnectivityManager$CallbackHandler;
-Landroid/net/ConnectivityManager$NetworkCallback;
-Landroid/net/ConnectivityManager$OnNetworkActiveListener;
-Landroid/net/ConnectivityMetricsEvent;
-Landroid/net/ConnectivityMetricsEvent$1;
-Landroid/net/ConnectivityMetricsEvent$Reference;
-Landroid/net/ConnectivityThread;
-Landroid/net/ConnectivityThread$Singleton;
-Landroid/net/Credentials;
-Landroid/net/DataUsageRequest;
-Landroid/net/dhcp/DhcpAckPacket;
-Landroid/net/dhcp/DhcpClient;
-Landroid/net/dhcp/DhcpClient$ConfiguringInterfaceState;
-Landroid/net/dhcp/DhcpClient$DhcpBoundState;
-Landroid/net/dhcp/DhcpClient$DhcpHaveLeaseState;
-Landroid/net/dhcp/DhcpClient$DhcpInitRebootState;
-Landroid/net/dhcp/DhcpClient$DhcpInitState;
-Landroid/net/dhcp/DhcpClient$DhcpReacquiringState;
-Landroid/net/dhcp/DhcpClient$DhcpRebindingState;
-Landroid/net/dhcp/DhcpClient$DhcpRebootingState;
-Landroid/net/dhcp/DhcpClient$DhcpRenewingState;
-Landroid/net/dhcp/DhcpClient$DhcpRequestingState;
-Landroid/net/dhcp/DhcpClient$DhcpSelectingState;
-Landroid/net/dhcp/DhcpClient$DhcpState;
-Landroid/net/dhcp/DhcpClient$LoggingState;
-Landroid/net/dhcp/DhcpClient$PacketRetransmittingState;
-Landroid/net/dhcp/DhcpClient$ReceiveThread;
-Landroid/net/dhcp/DhcpClient$StoppedState;
-Landroid/net/dhcp/DhcpClient$WaitBeforeOtherState;
-Landroid/net/dhcp/DhcpClient$WaitBeforeRenewalState;
-Landroid/net/dhcp/DhcpClient$WaitBeforeStartState;
-Landroid/net/dhcp/DhcpDiscoverPacket;
-Landroid/net/dhcp/DhcpOfferPacket;
-Landroid/net/dhcp/DhcpPacket;
-Landroid/net/dhcp/DhcpPacket$ParseException;
-Landroid/net/dhcp/DhcpRequestPacket;
-Landroid/net/DhcpInfo;
-Landroid/net/DhcpInfo$1;
-Landroid/net/DhcpResults;
-Landroid/net/DhcpResults$1;
-Landroid/net/EthernetManager;
-Landroid/net/EthernetManager$1;
-Landroid/net/EthernetManager$2;
-Landroid/net/EventLogTags;
-Landroid/net/IConnectivityManager;
-Landroid/net/IConnectivityManager$Stub;
-Landroid/net/IConnectivityMetricsLogger;
-Landroid/net/IConnectivityMetricsLogger$Stub;
-Landroid/net/IEthernetManager;
-Landroid/net/IEthernetManager$Stub;
-Landroid/net/IEthernetServiceListener;
-Landroid/net/IEthernetServiceListener$Stub;
-Landroid/net/IIpConnectivityMetrics;
-Landroid/net/IIpConnectivityMetrics$Stub;
-Landroid/net/INetd;
-Landroid/net/INetdEventCallback;
-Landroid/net/INetd$Stub;
-Landroid/net/INetd$Stub$Proxy;
-Landroid/net/INetworkManagementEventObserver;
-Landroid/net/INetworkManagementEventObserver$Stub;
-Landroid/net/INetworkPolicyListener;
-Landroid/net/INetworkPolicyListener$Stub;
-Landroid/net/INetworkPolicyListener$Stub$Proxy;
-Landroid/net/INetworkPolicyManager;
-Landroid/net/INetworkPolicyManager$Stub;
-Landroid/net/INetworkScoreCache;
-Landroid/net/INetworkScoreCache$Stub;
-Landroid/net/INetworkScoreCache$Stub$Proxy;
-Landroid/net/INetworkScoreService;
-Landroid/net/INetworkScoreService$Stub;
-Landroid/net/INetworkStatsService;
-Landroid/net/INetworkStatsService$Stub;
-Landroid/net/INetworkStatsSession;
-Landroid/net/INetworkStatsSession$Stub;
-Landroid/net/InterfaceConfiguration;
-Landroid/net/InterfaceConfiguration$1;
-Landroid/net/IpConfiguration;
-Landroid/net/IpConfiguration$1;
-Landroid/net/IpConfiguration$IpAssignment;
-Landroid/net/IpConfiguration$ProxySettings;
-Landroid/net/ip/ConnectivityPacketTracker;
-Landroid/net/ip/ConnectivityPacketTracker$PacketListener;
-Landroid/net/ip/IpManager;
-Landroid/net/ip/IpManager$1;
-Landroid/net/ip/IpManager$2;
-Landroid/net/ip/IpManager$3;
-Landroid/net/ip/IpManager$Callback;
-Landroid/net/ip/IpManager$LoggingCallbackWrapper;
-Landroid/net/ip/IpManager$MessageHandlingLogger;
-Landroid/net/ip/IpManager$ProvisioningConfiguration;
-Landroid/net/ip/IpManager$ProvisioningConfiguration$Builder;
-Landroid/net/ip/IpManager$RunningState;
-Landroid/net/ip/IpManager$StartedState;
-Landroid/net/ip/IpManager$StoppedState;
-Landroid/net/ip/IpManager$StoppingState;
-Landroid/net/ip/IpReachabilityMonitor;
-Landroid/net/ip/IpReachabilityMonitor$Callback;
-Landroid/net/ip/IpReachabilityMonitor$NetlinkSocketObserver;
-Landroid/net/IpPrefix;
-Landroid/net/IpPrefix$1;
-Landroid/net/LinkAddress;
-Landroid/net/LinkAddress$1;
-Landroid/net/LinkProperties;
-Landroid/net/LinkProperties$1;
-Landroid/net/LinkProperties$CompareResult;
-Landroid/net/LinkProperties$ProvisioningChange;
-Landroid/net/LocalServerSocket;
-Landroid/net/LocalSocket;
-Landroid/net/LocalSocketAddress;
-Landroid/net/LocalSocketAddress$Namespace;
-Landroid/net/LocalSocketImpl;
-Landroid/net/LocalSocketImpl$SocketInputStream;
-Landroid/net/LocalSocketImpl$SocketOutputStream;
-Landroid/net/metrics/ApfProgramEvent;
-Landroid/net/metrics/ApfProgramEvent$1;
-Landroid/net/metrics/ConnectStats;
-Landroid/net/metrics/DefaultNetworkEvent;
-Landroid/net/metrics/DefaultNetworkEvent$1;
-Landroid/net/metrics/DhcpClientEvent;
-Landroid/net/metrics/DhcpClientEvent$1;
-Landroid/net/metrics/DnsEvent;
-Landroid/net/metrics/DnsEvent$1;
-Landroid/net/metrics/INetdEventListener;
-Landroid/net/metrics/INetdEventListener$Stub;
-Landroid/net/metrics/IpConnectivityLog;
-Landroid/net/metrics/IpManagerEvent;
-Landroid/net/metrics/IpManagerEvent$1;
-Landroid/net/metrics/NetworkEvent;
-Landroid/net/metrics/NetworkEvent$1;
-Landroid/net/metrics/RaEvent;
-Landroid/net/metrics/RaEvent$1;
-Landroid/net/metrics/RaEvent$Builder;
-Landroid/net/metrics/ValidationProbeEvent;
-Landroid/net/metrics/ValidationProbeEvent$1;
-Landroid/net/metrics/ValidationProbeEvent$Decoder;
-Landroid/net/netlink/NetlinkConstants;
-Landroid/net/netlink/NetlinkErrorMessage;
-Landroid/net/netlink/NetlinkMessage;
-Landroid/net/netlink/NetlinkSocket;
-Landroid/net/netlink/RtNetlinkNeighborMessage;
-Landroid/net/netlink/StructNdaCacheInfo;
-Landroid/net/netlink/StructNdMsg;
-Landroid/net/netlink/StructNlAttr;
-Landroid/net/netlink/StructNlMsgHdr;
-Landroid/net/Network;
-Landroid/net/Network$1;
-Landroid/net/Network$2;
-Landroid/net/NetworkAgent;
-Landroid/net/NetworkCapabilities;
-Landroid/net/NetworkCapabilities$1;
-Landroid/net/NetworkConfig;
-Landroid/net/NetworkFactory;
-Landroid/net/NetworkFactory$NetworkRequestInfo;
-Landroid/net/NetworkIdentity;
-Landroid/net/NetworkInfo;
-Landroid/net/NetworkInfo$1;
-Landroid/net/NetworkInfo$DetailedState;
-Landroid/net/NetworkInfo$State;
-Landroid/net/NetworkKey;
-Landroid/net/NetworkKey$1;
-Landroid/net/NetworkMisc;
-Landroid/net/NetworkMisc$1;
-Landroid/net/Network$NetworkBoundSocketFactory;
-Landroid/net/NetworkPolicy;
-Landroid/net/NetworkPolicyManager;
-Landroid/net/NetworkQuotaInfo;
-Landroid/net/NetworkRequest;
-Landroid/net/NetworkRequest$1;
-Landroid/net/NetworkRequest$Builder;
-Landroid/net/NetworkRequest$Type;
-Landroid/net/NetworkScoreManager;
-Landroid/net/NetworkScorerAppManager;
-Landroid/net/NetworkState;
-Landroid/net/NetworkState$1;
-Landroid/net/NetworkStats;
-Landroid/net/NetworkStats$1;
-Landroid/net/NetworkStats$Entry;
-Landroid/net/NetworkStatsHistory;
-Landroid/net/NetworkStatsHistory$1;
-Landroid/net/NetworkStatsHistory$DataStreamUtils;
-Landroid/net/NetworkStatsHistory$Entry;
-Landroid/net/NetworkStatsHistory$ParcelUtils;
-Landroid/net/NetworkStats$NonMonotonicObserver;
-Landroid/net/NetworkTemplate;
-Landroid/net/NetworkTemplate$1;
-Landroid/net/NetworkUtils;
-Landroid/net/nsd/INsdManager;
-Landroid/net/nsd/INsdManager$Stub;
-Landroid/net/nsd/NsdManager;
-Landroid/net/ProxyInfo;
-Landroid/net/RecommendationRequest;
-Landroid/net/RecommendationResult;
-Landroid/net/RouteInfo;
-Landroid/net/RouteInfo$1;
-Landroid/net/ScoredNetwork;
-Landroid/net/SntpClient;
-Landroid/net/StaticIpConfiguration;
-Landroid/net/StaticIpConfiguration$1;
-Landroid/net/TrafficStats;
-Landroid/net/UidRange;
-Landroid/net/Uri;
-Landroid/net/Uri$1;
-Landroid/net/Uri$AbstractHierarchicalUri;
-Landroid/net/Uri$AbstractPart;
-Landroid/net/Uri$Builder;
-Landroid/net/Uri$HierarchicalUri;
-Landroid/net/Uri$OpaqueUri;
-Landroid/net/Uri$Part;
-Landroid/net/Uri$Part$EmptyPart;
-Landroid/net/Uri$PathPart;
-Landroid/net/Uri$PathSegments;
-Landroid/net/Uri$PathSegmentsBuilder;
-Landroid/net/Uri$StringUri;
-Landroid/net/util/BlockingSocketReader;
-Landroid/net/util/ConnectivityPacketSummary;
-Landroid/net/util/MultinetworkPolicyTracker;
-Landroid/net/util/MultinetworkPolicyTracker$1;
-Landroid/net/util/MultinetworkPolicyTracker$SettingObserver;
-Landroid/net/util/NetworkConstants;
-Landroid/net/util/Stopwatch;
-Landroid/net/wifi/aware/WifiAwareManager;
-Landroid/net/wifi/hotspot2/PasspointConfiguration;
-Landroid/net/wifi/IApInterface;
-Landroid/net/wifi/IClientInterface;
-Landroid/net/wifi/IClientInterface$Stub;
-Landroid/net/wifi/IClientInterface$Stub$Proxy;
-Landroid/net/wifi/IInterfaceEventCallback;
-Landroid/net/wifi/IInterfaceEventCallback$Stub;
-Landroid/net/wifi/IRttManager;
-Landroid/net/wifi/IRttManager$Stub;
-Landroid/net/wifi/IWificond;
-Landroid/net/wifi/IWificond$Stub;
-Landroid/net/wifi/IWificond$Stub$Proxy;
-Landroid/net/wifi/IWifiManager;
-Landroid/net/wifi/IWifiManager$Stub;
-Landroid/net/wifi/IWifiScanner;
-Landroid/net/wifi/IWifiScanner$Stub;
-Landroid/net/WifiKey;
-Landroid/net/WifiKey$1;
-Landroid/net/wifi/p2p/IWifiP2pManager;
-Landroid/net/wifi/p2p/IWifiP2pManager$Stub;
-Landroid/net/wifi/p2p/WifiP2pConfig;
-Landroid/net/wifi/p2p/WifiP2pConfig$1;
-Landroid/net/wifi/p2p/WifiP2pDevice;
-Landroid/net/wifi/p2p/WifiP2pDevice$1;
-Landroid/net/wifi/p2p/WifiP2pDeviceList;
-Landroid/net/wifi/p2p/WifiP2pDeviceList$1;
-Landroid/net/wifi/p2p/WifiP2pGroup;
-Landroid/net/wifi/p2p/WifiP2pGroup$1;
-Landroid/net/wifi/p2p/WifiP2pGroupList;
-Landroid/net/wifi/p2p/WifiP2pGroupList$1;
-Landroid/net/wifi/p2p/WifiP2pGroupList$2;
-Landroid/net/wifi/p2p/WifiP2pGroupList$GroupDeleteListener;
-Landroid/net/wifi/p2p/WifiP2pInfo;
-Landroid/net/wifi/p2p/WifiP2pInfo$1;
-Landroid/net/wifi/p2p/WifiP2pManager;
-Landroid/net/wifi/p2p/WifiP2pWfdInfo;
-Landroid/net/wifi/p2p/WifiP2pWfdInfo$1;
-Landroid/net/wifi/ParcelUtil;
-Landroid/net/wifi/RssiPacketCountInfo;
-Landroid/net/wifi/RttManager;
-Landroid/net/wifi/RttManager$RttCapabilities;
-Landroid/net/wifi/ScanResult;
-Landroid/net/wifi/ScanResult$1;
-Landroid/net/wifi/ScanResult$InformationElement;
-Landroid/net/wifi/ScanSettings;
-Landroid/net/wifi/SupplicantState;
-Landroid/net/wifi/SupplicantState$1;
-Landroid/net/wifi/WifiActivityEnergyInfo;
-Landroid/net/wifi/WifiActivityEnergyInfo$1;
-Landroid/net/wifi/WifiChannel;
-Landroid/net/wifi/WifiConfiguration;
-Landroid/net/wifi/WifiConfiguration$1;
-Landroid/net/wifi/WifiConfiguration$AuthAlgorithm;
-Landroid/net/wifi/WifiConfiguration$GroupCipher;
-Landroid/net/wifi/WifiConfiguration$KeyMgmt;
-Landroid/net/wifi/WifiConfiguration$NetworkSelectionStatus;
-Landroid/net/wifi/WifiConfiguration$PairwiseCipher;
-Landroid/net/wifi/WifiConfiguration$Protocol;
-Landroid/net/wifi/WifiConfiguration$Visibility;
-Landroid/net/wifi/WifiConnectionStatistics;
-Landroid/net/wifi/WifiConnectionStatistics$1;
-Landroid/net/wifi/WifiEnterpriseConfig;
-Landroid/net/wifi/WifiEnterpriseConfig$1;
-Landroid/net/wifi/WifiInfo;
-Landroid/net/wifi/WifiInfo$1;
-Landroid/net/wifi/WifiLinkLayerStats;
-Landroid/net/wifi/WifiLinkLayerStats$1;
-Landroid/net/wifi/WifiManager;
-Landroid/net/wifi/WifiNetworkScoreCache;
-Landroid/net/wifi/WifiScanner;
-Landroid/net/wifi/WifiScanner$ActionListener;
-Landroid/net/wifi/WifiScanner$ChannelSpec;
-Landroid/net/wifi/WifiScanner$ParcelableScanData;
-Landroid/net/wifi/WifiScanner$ParcelableScanData$1;
-Landroid/net/wifi/WifiScanner$ParcelableScanResults;
-Landroid/net/wifi/WifiScanner$ParcelableScanResults$1;
-Landroid/net/wifi/WifiScanner$PnoScanListener;
-Landroid/net/wifi/WifiScanner$ScanData;
-Landroid/net/wifi/WifiScanner$ScanData$1;
-Landroid/net/wifi/WifiScanner$ScanListener;
-Landroid/net/wifi/WifiScanner$ScanSettings;
-Landroid/net/wifi/WifiScanner$ScanSettings$1;
-Landroid/net/wifi/WifiScanner$ScanSettings$HiddenNetwork;
-Landroid/net/wifi/WifiScanner$ServiceHandler;
-Landroid/net/wifi/WifiSsid;
-Landroid/net/wifi/WifiSsid$1;
-Landroid/net/wifi/WifiWakeReasonAndCounts;
-Landroid/net/wifi/WpsInfo;
-Landroid/net/wifi/WpsInfo$1;
-Landroid/nfc/INfcAdapter;
-Landroid/nfc/INfcAdapter$Stub;
-Landroid/nfc/INfcAdapter$Stub$Proxy;
-Landroid/nfc/NfcManager;
-Landroid/opengl/EGL14;
-Landroid/opengl/EGLConfig;
-Landroid/opengl/EGLContext;
-Landroid/opengl/EGLDisplay;
-Landroid/opengl/EGLExt;
-Landroid/opengl/EGLObjectHandle;
-Landroid/opengl/EGLSurface;
-Landroid/opengl/ETC1;
-Landroid/opengl/GLES10;
-Landroid/opengl/GLES10Ext;
-Landroid/opengl/GLES11;
-Landroid/opengl/GLES11Ext;
-Landroid/opengl/GLES20;
-Landroid/opengl/GLES30;
-Landroid/opengl/GLES31;
-Landroid/opengl/GLES31Ext;
-Landroid/opengl/GLES32;
-Landroid/opengl/GLUtils;
-Landroid/opengl/Matrix;
-Landroid/opengl/Visibility;
-Landroid/os/AsyncTask;
-Landroid/os/AsyncTask$1;
-Landroid/os/AsyncTask$2;
-Landroid/os/AsyncTask$3;
-Landroid/os/AsyncTask$AsyncTaskResult;
-Landroid/os/AsyncTask$InternalHandler;
-Landroid/os/AsyncTask$SerialExecutor;
-Landroid/os/AsyncTask$SerialExecutor$1;
-Landroid/os/AsyncTask$Status;
-Landroid/os/AsyncTask$WorkerRunnable;
-Landroid/os/BadParcelableException;
-Landroid/os/BaseBundle;
-Landroid/os/BaseBundle$NoImagePreloadHolder;
-Landroid/os/BatteryManager;
-Landroid/os/BatteryManagerInternal;
-Landroid/os/BatteryProperties;
-Landroid/os/BatteryProperties$1;
-Landroid/os/BatteryStats;
-Landroid/os/BatteryStats$BitDescription;
-Landroid/os/BatteryStats$ControllerActivityCounter;
-Landroid/os/BatteryStats$Counter;
-Landroid/os/BatteryStats$DailyItem;
-Landroid/os/BatteryStats$HistoryEventTracker;
-Landroid/os/BatteryStats$HistoryItem;
-Landroid/os/BatteryStats$HistoryPrinter;
-Landroid/os/BatteryStats$HistoryStepDetails;
-Landroid/os/BatteryStats$HistoryTag;
-Landroid/os/BatteryStats$IntToString;
-Landroid/os/BatteryStats$LevelStepTracker;
-Landroid/os/BatteryStats$LongCounter;
-Landroid/os/BatteryStats$PackageChange;
-Landroid/os/BatteryStats$Timer;
-Landroid/os/BatteryStats$Uid;
-Landroid/os/BatteryStats$Uid$Pid;
-Landroid/os/BatteryStats$Uid$Pkg;
-Landroid/os/BatteryStats$Uid$Pkg$Serv;
-Landroid/os/BatteryStats$Uid$Proc;
-Landroid/os/BatteryStats$Uid$Sensor;
-Landroid/os/BatteryStats$Uid$Wakelock;
-Landroid/os/Binder;
-Landroid/os/BinderProxy;
-Landroid/os/Build;
-Landroid/os/Build$VERSION;
-Landroid/os/Bundle;
-Landroid/os/Bundle$1;
-Landroid/os/CancellationSignal;
-Landroid/os/CancellationSignal$OnCancelListener;
-Landroid/os/CancellationSignal$Transport;
-Landroid/os/CommonTimeConfig$OnServerDiedListener;
-Landroid/os/CpuUsageInfo;
-Landroid/os/CpuUsageInfo$1;
-Landroid/os/DeadObjectException;
-Landroid/os/DeadSystemException;
-Landroid/os/Debug;
-Landroid/os/Debug$MemoryInfo;
-Landroid/os/Debug$MemoryInfo$1;
-Landroid/os/DropBoxManager;
-Landroid/os/DropBoxManager$Entry;
-Landroid/os/DropBoxManager$Entry$1;
-Landroid/os/Environment;
-Landroid/os/Environment$UserEnvironment;
-Landroid/os/FactoryTest;
-Landroid/os/FileObserver;
-Landroid/os/FileObserver$ObserverThread;
-Landroid/os/FileUtils;
-Landroid/os/GraphicsEnvironment;
-Landroid/os/Handler;
-Landroid/os/Handler$BlockingRunnable;
-Landroid/os/Handler$Callback;
-Landroid/os/Handler$MessengerImpl;
-Landroid/os/HandlerThread;
-Landroid/os/HardwarePropertiesManager;
-Landroid/os/health/HealthStatsParceler;
-Landroid/os/health/SystemHealthManager;
-Landroid/os/HwBinder;
-Landroid/os/HwBlob;
-Landroid/os/HwParcel;
-Landroid/os/HwRemoteBinder;
-Landroid/os/IBatteryPropertiesListener;
-Landroid/os/IBatteryPropertiesListener$Stub;
-Landroid/os/IBatteryPropertiesRegistrar;
-Landroid/os/IBatteryPropertiesRegistrar$Stub;
-Landroid/os/IBatteryPropertiesRegistrar$Stub$Proxy;
-Landroid/os/IBinder;
-Landroid/os/IBinder$DeathRecipient;
-Landroid/os/ICancellationSignal;
-Landroid/os/ICancellationSignal$Stub;
-Landroid/os/IDeviceIdentifiersPolicyService;
-Landroid/os/IDeviceIdentifiersPolicyService$Stub;
-Landroid/os/IDeviceIdleController;
-Landroid/os/IDeviceIdleController$Stub;
-Landroid/os/IHardwarePropertiesManager;
-Landroid/os/IHardwarePropertiesManager$Stub;
-Landroid/os/IHwBinder;
-Landroid/os/IHwBinder$DeathRecipient;
-Landroid/os/IHwInterface;
-Landroid/os/IIncidentManager;
-Landroid/os/IIncidentManager$Stub;
-Landroid/os/IInstalld;
-Landroid/os/IInstalld$Stub;
-Landroid/os/IInstalld$Stub$Proxy;
-Landroid/os/IInterface;
-Landroid/os/IMaintenanceActivityListener;
-Landroid/os/IMessenger;
-Landroid/os/IMessenger$Stub;
-Landroid/os/IMessenger$Stub$Proxy;
-Landroid/os/IncidentManager;
-Landroid/os/INetworkActivityListener;
-Landroid/os/INetworkManagementService;
-Landroid/os/INetworkManagementService$Stub;
-Landroid/os/IPermissionController;
-Landroid/os/IPermissionController$Stub;
-Landroid/os/IPowerManager;
-Landroid/os/IPowerManager$Stub;
-Landroid/os/IProcessInfoService;
-Landroid/os/IProcessInfoService$Stub;
-Landroid/os/IProgressListener;
-Landroid/os/IRecoverySystem;
-Landroid/os/IRecoverySystemProgressListener;
-Landroid/os/IRecoverySystem$Stub;
-Landroid/os/IRemoteCallback;
-Landroid/os/IRemoteCallback$Stub;
-Landroid/os/IRemoteCallback$Stub$Proxy;
-Landroid/os/ISchedulingPolicyService;
-Landroid/os/ISchedulingPolicyService$Stub;
-Landroid/os/IServiceManager;
-Landroid/os/IUpdateLock;
-Landroid/os/IUpdateLock$Stub;
-Landroid/os/IUserManager;
-Landroid/os/IUserManager$Stub;
-Landroid/os/IVibratorService;
-Landroid/os/IVibratorService$Stub;
-Landroid/os/LocaleList;
-Landroid/os/LocaleList$1;
-Landroid/os/Looper;
-Landroid/os/MemoryFile;
-Landroid/os/Message;
-Landroid/os/Message$1;
-Landroid/os/MessageQueue;
-Landroid/os/MessageQueue$IdleHandler;
-Landroid/os/Messenger;
-Landroid/os/Messenger$1;
-Landroid/os/OperationCanceledException;
-Landroid/os/Parcel;
-Landroid/os/Parcel$1;
-Landroid/os/Parcelable;
-Landroid/os/Parcelable$ClassLoaderCreator;
-Landroid/os/Parcelable$Creator;
-Landroid/os/ParcelFileDescriptor;
-Landroid/os/ParcelFileDescriptor$1;
-Landroid/os/ParcelFileDescriptor$AutoCloseInputStream;
-Landroid/os/ParcelFileDescriptor$AutoCloseOutputStream;
-Landroid/os/ParcelFormatException;
-Landroid/os/ParcelUuid;
-Landroid/os/PatternMatcher;
-Landroid/os/PatternMatcher$1;
-Landroid/os/PersistableBundle;
-Landroid/os/PersistableBundle$1;
-Landroid/os/PersistableBundle$MyReadMapCallback;
-Landroid/os/PowerManager;
-Landroid/os/PowerManagerInternal;
-Landroid/os/PowerManagerInternal$LowPowerModeListener;
-Landroid/os/PowerManager$WakeLock;
-Landroid/os/PowerManager$WakeLock$1;
-Landroid/os/Process;
-Landroid/os/Process$ProcessStartResult;
-Landroid/os/RecoverySystem;
-Landroid/os/RemoteCallback;
-Landroid/os/RemoteCallbackList;
-Landroid/os/RemoteCallbackList$Callback;
-Landroid/os/RemoteException;
-Landroid/os/ResultReceiver;
-Landroid/os/ResultReceiver$1;
-Landroid/os/ResultReceiver$MyResultReceiver;
-Landroid/os/SELinux;
-Landroid/os/ServiceManager;
-Landroid/os/ServiceManagerNative;
-Landroid/os/ServiceManagerProxy;
-Landroid/os/ServiceManager$ServiceNotFoundException;
-Landroid/os/ServiceSpecificException;
-Landroid/os/ShellCallback;
-Landroid/os/ShellCallback$1;
-Landroid/os/ShellCommand;
-Landroid/os/StatFs;
-Landroid/os/storage/DiskInfo;
-Landroid/os/storage/IObbActionListener;
-Landroid/os/storage/IObbActionListener$Stub;
-Landroid/os/storage/IStorageEventListener;
-Landroid/os/storage/IStorageEventListener$Stub;
-Landroid/os/storage/IStorageEventListener$Stub$Proxy;
-Landroid/os/storage/IStorageManager;
-Landroid/os/storage/IStorageManager$Stub;
-Landroid/os/storage/IStorageShutdownObserver;
-Landroid/os/storage/StorageEventListener;
-Landroid/os/storage/StorageManager;
-Landroid/os/storage/StorageManagerInternal;
-Landroid/os/storage/StorageManagerInternal$ExternalStorageMountPolicy;
-Landroid/os/storage/StorageManager$ObbActionListener;
-Landroid/os/storage/StorageManager$StorageEventListenerDelegate;
-Landroid/os/storage/StorageVolume;
-Landroid/os/storage/StorageVolume$1;
-Landroid/os/storage/VolumeInfo;
-Landroid/os/storage/VolumeInfo$1;
-Landroid/os/storage/VolumeInfo$2;
-Landroid/os/storage/VolumeRecord;
-Landroid/os/StrictMode;
-Landroid/os/StrictMode$1;
-Landroid/os/StrictMode$2;
-Landroid/os/StrictMode$3;
-Landroid/os/StrictMode$4;
-Landroid/os/StrictMode$5;
-Landroid/os/StrictMode$6;
-Landroid/os/StrictMode$7;
-Landroid/os/StrictMode$8;
-Landroid/os/StrictMode$9;
-Landroid/os/StrictMode$AndroidBlockGuardPolicy;
-Landroid/os/StrictMode$AndroidBlockGuardPolicy$1;
-Landroid/os/StrictMode$AndroidCloseGuardReporter;
-Landroid/os/StrictMode$InstanceCountViolation;
-Landroid/os/StrictMode$Span;
-Landroid/os/StrictMode$StrictModeDiskReadViolation;
-Landroid/os/StrictMode$StrictModeDiskWriteViolation;
-Landroid/os/StrictMode$StrictModeViolation;
-Landroid/os/StrictMode$ThreadPolicy;
-Landroid/os/StrictMode$ThreadSpanState;
-Landroid/os/StrictMode$ViolationInfo;
-Landroid/os/StrictMode$ViolationInfo$1;
-Landroid/os/StrictMode$VmPolicy;
-Landroid/os/StrictMode$VmPolicy$Builder;
-Landroid/os/SynchronousResultReceiver;
-Landroid/os/SynchronousResultReceiver$Result;
-Landroid/os/SystemClock;
-Landroid/os/SystemProperties;
-Landroid/os/SystemService;
-Landroid/os/SystemService$1;
-Landroid/os/SystemService$State;
-Landroid/os/SystemVibrator;
-Landroid/os/TokenWatcher;
-Landroid/os/TokenWatcher$1;
-Landroid/os/Trace;
-Landroid/os/Trace$1;
-Landroid/os/TransactionTooLargeException;
-Landroid/os/UEventObserver;
-Landroid/os/UEventObserver$UEvent;
-Landroid/os/UEventObserver$UEventThread;
-Landroid/os/UpdateLock;
-Landroid/os/UserHandle;
-Landroid/os/UserHandle$1;
-Landroid/os/UserManager;
-Landroid/os/UserManagerInternal;
-Landroid/os/UserManagerInternal$UserRestrictionsListener;
-Landroid/os/Vibrator;
-Landroid/os/WorkSource;
-Landroid/os/WorkSource$1;
-Landroid/os/ZygoteProcess;
-Landroid/os/ZygoteProcess$ZygoteState;
-Landroid/os/ZygoteStartFailedEx;
-Landroid/print/IPrintDocumentAdapter;
-Landroid/print/IPrinterDiscoveryObserver;
-Landroid/print/IPrintJobStateChangeListener;
-Landroid/print/IPrintManager;
-Landroid/print/IPrintManager$Stub;
-Landroid/print/IPrintServicesChangeListener;
-Landroid/print/IPrintServicesChangeListener$Stub;
-Landroid/print/IPrintServicesChangeListener$Stub$Proxy;
-Landroid/print/IPrintSpooler;
-Landroid/print/IPrintSpoolerCallbacks;
-Landroid/print/IPrintSpoolerCallbacks$Stub;
-Landroid/print/IPrintSpoolerClient;
-Landroid/print/IPrintSpoolerClient$Stub;
-Landroid/print/IPrintSpooler$Stub;
-Landroid/print/IPrintSpooler$Stub$Proxy;
-Landroid/print/PrintAttributes;
-Landroid/print/PrinterId;
-Landroid/print/PrintJobId;
-Landroid/print/PrintJobInfo;
-Landroid/print/PrintManager;
-Landroid/printservice/IPrintServiceClient;
-Landroid/printservice/IPrintServiceClient$Stub;
-Landroid/printservice/PrintServiceInfo;
-Landroid/printservice/PrintServiceInfo$1;
-Landroid/printservice/recommendation/IRecommendationsChangeListener;
-Landroid/provider/BaseColumns;
-Landroid/provider/CalendarContract$Attendees;
-Landroid/provider/CalendarContract$AttendeesColumns;
-Landroid/provider/CalendarContract$CalendarColumns;
-Landroid/provider/CalendarContract$Calendars;
-Landroid/provider/CalendarContract$CalendarSyncColumns;
-Landroid/provider/CalendarContract$Events;
-Landroid/provider/CalendarContract$EventsColumns;
-Landroid/provider/CalendarContract$Instances;
-Landroid/provider/CalendarContract$SyncColumns;
-Landroid/provider/CallLog$Calls;
-Landroid/provider/ContactsContract;
-Landroid/provider/ContactsContract$CommonDataKinds$BaseTypes;
-Landroid/provider/ContactsContract$CommonDataKinds$Callable;
-Landroid/provider/ContactsContract$CommonDataKinds$CommonColumns;
-Landroid/provider/ContactsContract$CommonDataKinds$Phone;
-Landroid/provider/ContactsContract$ContactCounts;
-Landroid/provider/ContactsContract$ContactNameColumns;
-Landroid/provider/ContactsContract$ContactOptionsColumns;
-Landroid/provider/ContactsContract$Contacts;
-Landroid/provider/ContactsContract$ContactsColumns;
-Landroid/provider/ContactsContract$ContactStatusColumns;
-Landroid/provider/ContactsContract$Data;
-Landroid/provider/ContactsContract$DataColumns;
-Landroid/provider/ContactsContract$DataColumnsWithJoins;
-Landroid/provider/ContactsContract$DataUsageFeedback;
-Landroid/provider/ContactsContract$DataUsageStatColumns;
-Landroid/provider/ContactsContract$PhoneLookup;
-Landroid/provider/ContactsContract$PhoneLookupColumns;
-Landroid/provider/ContactsContract$RawContactsColumns;
-Landroid/provider/ContactsContract$StatusColumns;
-Landroid/provider/Downloads;
-Landroid/provider/Downloads$Impl;
-Landroid/provider/Settings;
-Landroid/provider/Settings$ContentProviderHolder;
-Landroid/provider/Settings$GenerationTracker;
-Landroid/provider/Settings$Global;
-Landroid/provider/Settings$NameValueCache;
-Landroid/provider/Settings$NameValueTable;
-Landroid/provider/Settings$Secure;
-Landroid/provider/Settings$SettingNotFoundException;
-Landroid/provider/Settings$System;
-Landroid/provider/Settings$System$1;
-Landroid/provider/Settings$System$2;
-Landroid/provider/Settings$System$3;
-Landroid/provider/Settings$System$4;
-Landroid/provider/Settings$System$5;
-Landroid/provider/Settings$System$6;
-Landroid/provider/Settings$System$7;
-Landroid/provider/Settings$System$8;
-Landroid/provider/Settings$System$9;
-Landroid/provider/Settings$System$DiscreteValueValidator;
-Landroid/provider/Settings$System$InclusiveFloatRangeValidator;
-Landroid/provider/Settings$System$InclusiveIntegerRangeValidator;
-Landroid/provider/Settings$System$Validator;
-Landroid/R$styleable;
-Landroid/security/IKeyChainService;
-Landroid/security/IKeyChainService$Stub;
-Landroid/security/IKeyChainService$Stub$Proxy;
-Landroid/security/IKeystoreService;
-Landroid/security/IKeystoreService$Stub;
-Landroid/security/IKeystoreService$Stub$Proxy;
-Landroid/security/KeyChain;
-Landroid/security/KeyChain$1;
-Landroid/security/KeyChain$KeyChainConnection;
-Landroid/security/keymaster/IKeyAttestationApplicationIdProvider;
-Landroid/security/keymaster/IKeyAttestationApplicationIdProvider$Stub;
-Landroid/security/keymaster/KeyAttestationApplicationId;
-Landroid/security/KeyStore;
-Landroid/security/keystore/AndroidKeyStoreBCWorkaroundProvider;
-Landroid/security/keystore/AndroidKeyStoreProvider;
-Landroid/security/keystore/AndroidKeyStoreSpi;
-Landroid/service/autofill/IAutoFillManagerService;
-Landroid/service/autofill/IAutoFillManagerService$Stub;
-Landroid/service/dreams/DreamManagerInternal;
-Landroid/service/dreams/IDreamManager;
-Landroid/service/dreams/IDreamManager$Stub;
-Landroid/service/dreams/IDreamService;
-Landroid/service/dreams/IDreamService$Stub;
-Landroid/service/dreams/IDreamService$Stub$Proxy;
-Landroid/service/gatekeeper/IGateKeeperService;
-Landroid/service/gatekeeper/IGateKeeperService$Stub;
-Landroid/service/gatekeeper/IGateKeeperService$Stub$Proxy;
-Landroid/service/notification/Adjustment;
-Landroid/service/notification/Condition;
-Landroid/service/notification/Condition$1;
-Landroid/service/notification/ConditionProviderService;
-Landroid/service/notification/ConditionProviderService$H;
-Landroid/service/notification/ConditionProviderService$Provider;
-Landroid/service/notification/IConditionProvider;
-Landroid/service/notification/IConditionProvider$Stub;
-Landroid/service/notification/IConditionProvider$Stub$Proxy;
-Landroid/service/notification/INotificationListener;
-Landroid/service/notification/INotificationListener$Stub;
-Landroid/service/notification/INotificationListener$Stub$Proxy;
-Landroid/service/notification/IStatusBarNotificationHolder;
-Landroid/service/notification/IStatusBarNotificationHolder$Stub;
-Landroid/service/notification/NotificationListenerService$Ranking;
-Landroid/service/notification/NotificationRankingUpdate;
-Landroid/service/notification/NotificationRankingUpdate$1;
-Landroid/service/notification/StatusBarNotification;
-Landroid/service/notification/StatusBarNotification$1;
-Landroid/service/notification/ZenModeConfig;
-Landroid/service/notification/ZenModeConfig$1;
-Landroid/service/notification/ZenModeConfig$Diff;
-Landroid/service/notification/ZenModeConfig$EventInfo;
-Landroid/service/notification/ZenModeConfig$ScheduleInfo;
-Landroid/service/notification/ZenModeConfig$ZenRule;
-Landroid/service/notification/ZenModeConfig$ZenRule$1;
-Landroid/service/persistentdata/IPersistentDataBlockService;
-Landroid/service/persistentdata/IPersistentDataBlockService$Stub;
-Landroid/service/persistentdata/PersistentDataBlockManager;
-Landroid/service/voice/IVoiceInteractionService;
-Landroid/service/voice/IVoiceInteractionService$Stub;
-Landroid/service/voice/IVoiceInteractionService$Stub$Proxy;
-Landroid/service/voice/IVoiceInteractionSession;
-Landroid/service/voice/IVoiceInteractionSessionService;
-Landroid/service/voice/IVoiceInteractionSessionService$Stub;
-Landroid/service/voice/IVoiceInteractionSessionService$Stub$Proxy;
-Landroid/service/voice/IVoiceInteractionSession$Stub;
-Landroid/service/voice/IVoiceInteractionSession$Stub$Proxy;
-Landroid/service/voice/VoiceInteractionManagerInternal;
-Landroid/service/voice/VoiceInteractionServiceInfo;
-Landroid/service/vr/IVrManager;
-Landroid/service/vr/IVrManager$Stub;
-Landroid/service/vr/IVrStateCallbacks;
-Landroid/service/vr/IVrStateCallbacks$Stub;
-Landroid/service/vr/IVrStateCallbacks$Stub$Proxy;
-Landroid/service/wallpaper/IWallpaperConnection;
-Landroid/service/wallpaper/IWallpaperConnection$Stub;
-Landroid/service/wallpaper/IWallpaperEngine;
-Landroid/service/wallpaper/IWallpaperEngine$Stub;
-Landroid/service/wallpaper/IWallpaperEngine$Stub$Proxy;
-Landroid/service/wallpaper/IWallpaperService;
-Landroid/service/wallpaper/IWallpaperService$Stub;
-Landroid/service/wallpaper/IWallpaperService$Stub$Proxy;
-Landroid/system/ErrnoException;
-Landroid/system/GaiException;
-Landroid/system/NetlinkSocketAddress;
-Landroid/system/Os;
-Landroid/system/OsConstants;
-Landroid/system/PacketSocketAddress;
-Landroid/system/StructAddrinfo;
-Landroid/system/StructFlock;
-Landroid/system/StructGroupReq;
-Landroid/system/StructGroupSourceReq;
-Landroid/system/StructIfaddrs;
-Landroid/system/StructLinger;
-Landroid/system/StructPasswd;
-Landroid/system/StructPollfd;
-Landroid/system/StructStat;
-Landroid/system/StructStatVfs;
-Landroid/system/StructTimeval;
-Landroid/system/StructUcred;
-Landroid/system/StructUtsname;
-Landroid/system/UnixSocketAddress;
-Landroid/telecom/CallAudioState;
-Landroid/telecom/CallAudioState$1;
-Landroid/telecom/Conferenceable;
-Landroid/telecom/Connection;
-Landroid/telecom/ConnectionRequest;
-Landroid/telecom/ConnectionRequest$1;
-Landroid/telecom/DefaultDialerManager;
-Landroid/telecom/DisconnectCause;
-Landroid/telecom/DisconnectCause$1;
-Landroid/telecom/Log;
-Landroid/telecom/Log$1;
-Landroid/telecom/Logging/EventManager;
-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/Runnable;
-Landroid/telecom/Logging/Runnable$1;
-Landroid/telecom/Logging/Session;
-Landroid/telecom/Logging/Session$Info;
-Landroid/telecom/Logging/Session$Info$1;
-Landroid/telecom/Logging/SessionManager;
-Landroid/telecom/Logging/SessionManager$ICurrentThreadId;
-Landroid/telecom/Logging/SessionManager$ISessionCleanupTimeoutMs;
-Landroid/telecom/Logging/SessionManager$ISessionIdQueryHandler;
-Landroid/telecom/Logging/SessionManager$ISessionListener;
-Landroid/telecom/ParcelableCall;
-Landroid/telecom/ParcelableCall$1;
-Landroid/telecom/ParcelableConference;
-Landroid/telecom/ParcelableConnection;
-Landroid/telecom/ParcelableConnection$1;
-Landroid/telecom/PhoneAccount;
-Landroid/telecom/PhoneAccount$1;
-Landroid/telecom/PhoneAccount$Builder;
-Landroid/telecom/PhoneAccountHandle;
-Landroid/telecom/PhoneAccountHandle$1;
-Landroid/telecom/StatusHints;
-Landroid/telecom/TelecomAnalytics;
-Landroid/telecom/TelecomAnalytics$SessionTiming;
-Landroid/telecom/TelecomAnalytics$SessionTiming$1;
-Landroid/telecom/TelecomManager;
-Landroid/telecom/TimedEvent;
-Landroid/telecom/VideoProfile;
-Landroid/telecom/VideoProfile$1;
-Landroid/telephony/CarrierConfigManager;
-Landroid/telephony/CellLocation;
-Landroid/telephony/gsm/GsmCellLocation;
-Landroid/telephony/ModemActivityInfo;
-Landroid/telephony/ModemActivityInfo$1;
-Landroid/telephony/PhoneNumberUtils;
-Landroid/telephony/PhoneStateListener;
-Landroid/telephony/PhoneStateListener$1;
-Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;
-Landroid/telephony/PreciseCallState;
-Landroid/telephony/PreciseCallState$1;
-Landroid/telephony/PreciseDataConnectionState;
-Landroid/telephony/PreciseDataConnectionState$1;
-Landroid/telephony/Rlog;
-Landroid/telephony/ServiceState;
-Landroid/telephony/ServiceState$1;
-Landroid/telephony/SignalStrength;
-Landroid/telephony/SignalStrength$1;
-Landroid/telephony/SubscriptionInfo;
-Landroid/telephony/SubscriptionInfo$1;
-Landroid/telephony/SubscriptionManager;
-Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;
-Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$1;
-Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$2;
-Landroid/telephony/TelephonyManager;
-Landroid/telephony/TelephonyManager$MultiSimVariants;
-Landroid/telephony/VoLteServiceState;
-Landroid/telephony/VoLteServiceState$1;
-Landroid/text/AndroidBidi;
-Landroid/text/AndroidCharacter;
-Landroid/text/BoringLayout;
-Landroid/text/BoringLayout$Metrics;
-Landroid/text/ClipboardManager;
-Landroid/text/Editable;
-Landroid/text/Editable$Factory;
-Landroid/text/FontConfig;
-Landroid/text/FontConfig$1;
-Landroid/text/FontConfig$Alias;
-Landroid/text/FontConfig$Alias$1;
-Landroid/text/FontConfig$Axis;
-Landroid/text/FontConfig$Axis$1;
-Landroid/text/FontConfig$Family;
-Landroid/text/FontConfig$Family$1;
-Landroid/text/FontConfig$Font;
-Landroid/text/FontConfig$Font$1;
-Landroid/text/format/DateFormat;
-Landroid/text/format/Time;
-Landroid/text/format/Time$TimeCalculator;
-Landroid/text/GetChars;
-Landroid/text/GraphicsOperations;
-Landroid/text/Hyphenator;
-Landroid/text/InputFilter;
-Landroid/text/InputType;
-Landroid/text/ITextClassificationService;
-Landroid/text/ITextClassificationService$Stub;
-Landroid/text/Layout;
-Landroid/text/Layout$Alignment;
-Landroid/text/Layout$Directions;
-Landroid/text/method/AllCapsTransformationMethod;
-Landroid/text/method/PasswordTransformationMethod;
-Landroid/text/method/ReplacementTransformationMethod;
-Landroid/text/method/SingleLineTransformationMethod;
-Landroid/text/method/TransformationMethod;
-Landroid/text/method/TransformationMethod2;
-Landroid/text/NoCopySpan;
-Landroid/text/ParcelableSpan;
-Landroid/text/Selection;
-Landroid/text/Selection$END;
-Landroid/text/Selection$START;
-Landroid/text/Spannable;
-Landroid/text/Spannable$Factory;
-Landroid/text/SpannableString;
-Landroid/text/SpannableStringBuilder;
-Landroid/text/SpannableStringInternal;
-Landroid/text/Spanned;
-Landroid/text/SpannedString;
-Landroid/text/SpanSet;
-Landroid/text/SpanWatcher;
-Landroid/text/StaticLayout;
-Landroid/text/StaticLayout$LineBreaks;
-Landroid/text/style/CharacterStyle;
-Landroid/text/style/MetricAffectingSpan;
-Landroid/text/style/ParagraphStyle;
-Landroid/text/style/ReplacementSpan;
-Landroid/text/style/SpellCheckSpan;
-Landroid/text/style/StyleSpan;
-Landroid/text/style/SuggestionSpan;
-Landroid/text/style/UpdateAppearance;
-Landroid/text/style/UpdateLayout;
-Landroid/text/TextDirectionHeuristic;
-Landroid/text/TextDirectionHeuristics;
-Landroid/text/TextDirectionHeuristics$AnyStrong;
-Landroid/text/TextDirectionHeuristics$FirstStrong;
-Landroid/text/TextDirectionHeuristics$TextDirectionAlgorithm;
-Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;
-Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;
-Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;
-Landroid/text/TextLine;
-Landroid/text/TextPaint;
-Landroid/text/TextUtils;
-Landroid/text/TextUtils$1;
-Landroid/text/TextUtils$EllipsizeCallback;
-Landroid/text/TextUtils$SimpleStringSplitter;
-Landroid/text/TextUtils$StringSplitter;
-Landroid/text/TextUtils$TruncateAt;
-Landroid/text/TextWatcher;
-Landroid/transition/AutoTransition;
-Landroid/transition/ChangeBounds;
-Landroid/transition/ChangeBounds$1;
-Landroid/transition/ChangeBounds$2;
-Landroid/transition/ChangeBounds$3;
-Landroid/transition/ChangeBounds$4;
-Landroid/transition/ChangeBounds$5;
-Landroid/transition/ChangeBounds$6;
-Landroid/transition/ChangeClipBounds;
-Landroid/transition/ChangeImageTransform;
-Landroid/transition/ChangeImageTransform$1;
-Landroid/transition/ChangeImageTransform$2;
-Landroid/transition/ChangeTransform;
-Landroid/transition/ChangeTransform$1;
-Landroid/transition/ChangeTransform$2;
-Landroid/transition/Fade;
-Landroid/transition/PathMotion;
-Landroid/transition/Transition;
-Landroid/transition/Transition$1;
-Landroid/transition/TransitionInflater;
-Landroid/transition/TransitionManager;
-Landroid/transition/TransitionSet;
-Landroid/transition/TransitionValuesMaps;
-Landroid/transition/Visibility;
-Landroid/util/AndroidException;
-Landroid/util/AndroidRuntimeException;
-Landroid/util/apk/ApkSignatureSchemeV2Verifier;
-Landroid/util/apk/ApkSignatureSchemeV2Verifier$ByteBufferDataSource;
-Landroid/util/apk/ApkSignatureSchemeV2Verifier$DataSource;
-Landroid/util/apk/ApkSignatureSchemeV2Verifier$MemoryMappedFileDataSource;
-Landroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureInfo;
-Landroid/util/apk/ApkSignatureSchemeV2Verifier$SignatureNotFoundException;
-Landroid/util/apk/ApkSignatureSchemeV2Verifier$VerbatimX509Certificate;
-Landroid/util/apk/ApkSignatureSchemeV2Verifier$WrappedX509Certificate;
-Landroid/util/apk/ZipUtils;
-Landroid/util/ArrayMap;
-Landroid/util/ArrayMap$1;
-Landroid/util/ArraySet;
-Landroid/util/ArraySet$1;
-Landroid/util/AtomicFile;
-Landroid/util/AttributeSet;
-Landroid/util/Base64;
-Landroid/util/Base64$Coder;
-Landroid/util/Base64$Decoder;
-Landroid/util/Base64$Encoder;
-Landroid/util/BootTimingsTraceLog;
-Landroid/util/ContainerHelpers;
-Landroid/util/DebugUtils;
-Landroid/util/DisplayMetrics;
-Landroid/util/EventLog;
-Landroid/util/EventLog$Event;
-Landroid/util/FastImmutableArraySet;
-Landroid/util/FastImmutableArraySet$FastIterator;
-Landroid/util/FloatProperty;
-Landroid/util/IntArray;
-Landroid/util/IntProperty;
-Landroid/util/jar/StrictJarFile;
-Landroid/util/KeyValueListParser;
-Landroid/util/LocalLog;
-Landroid/util/LocalLog$ReadOnlyLocalLog;
-Landroid/util/Log;
-Landroid/util/Log$1;
-Landroid/util/Log$ImmediateLogWriter;
-Landroid/util/Log$NoPreloadHolder;
-Landroid/util/LogPrinter;
-Landroid/util/Log$TerribleFailureHandler;
-Landroid/util/LongArray;
-Landroid/util/LongSparseArray;
-Landroid/util/LongSparseLongArray;
-Landroid/util/LruCache;
-Landroid/util/MapCollections;
-Landroid/util/MapCollections$ArrayIterator;
-Landroid/util/MapCollections$EntrySet;
-Landroid/util/MapCollections$KeySet;
-Landroid/util/MapCollections$MapIterator;
-Landroid/util/MapCollections$ValuesCollection;
-Landroid/util/MathUtils;
-Landroid/util/MemoryIntArray;
-Landroid/util/MemoryIntArray$1;
-Landroid/util/MutableBoolean;
-Landroid/util/MutableInt;
-Landroid/util/MutableLong;
-Landroid/util/NtpTrustedTime;
-Landroid/util/Pair;
-Landroid/util/PathParser;
-Landroid/util/PathParser$PathData;
-Landroid/util/Pools$Pool;
-Landroid/util/Pools$SimplePool;
-Landroid/util/Pools$SynchronizedPool;
-Landroid/util/Printer;
-Landroid/util/Property;
-Landroid/util/Rational;
-Landroid/util/Singleton;
-Landroid/util/Size;
-Landroid/util/Slog;
-Landroid/util/SparseArray;
-Landroid/util/SparseBooleanArray;
-Landroid/util/SparseIntArray;
-Landroid/util/SparseLongArray;
-Landroid/util/Spline;
-Landroid/util/Spline$MonotoneCubicSpline;
-Landroid/util/StateSet;
-Landroid/util/SuperNotCalledException;
-Landroid/util/TimedRemoteCaller;
-Landroid/util/TimeUtils;
-Landroid/util/TrustedTime;
-Landroid/util/TypedValue;
-Landroid/util/Xml;
-Landroid/util/Xml$XmlSerializerFactory;
-Landroid/view/accessibility/AccessibilityEvent;
-Landroid/view/accessibility/AccessibilityEventSource;
-Landroid/view/accessibility/AccessibilityManager;
-Landroid/view/accessibility/AccessibilityManager$1;
-Landroid/view/accessibility/AccessibilityManager$AccessibilityServicesStateChangeListener;
-Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;
-Landroid/view/accessibility/AccessibilityManager$HighTextContrastChangeListener;
-Landroid/view/accessibility/AccessibilityManager$MyHandler;
-Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;
-Landroid/view/accessibility/AccessibilityRecord;
-Landroid/view/accessibility/CaptioningManager;
-Landroid/view/accessibility/IAccessibilityInteractionConnection;
-Landroid/view/accessibility/IAccessibilityManager;
-Landroid/view/accessibility/IAccessibilityManagerClient;
-Landroid/view/accessibility/IAccessibilityManagerClient$Stub;
-Landroid/view/accessibility/IAccessibilityManagerClient$Stub$Proxy;
-Landroid/view/accessibility/IAccessibilityManager$Stub;
-Landroid/view/ActionMode;
-Landroid/view/ActionMode$Callback;
-Landroid/view/animation/AccelerateDecelerateInterpolator;
-Landroid/view/animation/AccelerateInterpolator;
-Landroid/view/animation/AlphaAnimation;
-Landroid/view/animation/Animation;
-Landroid/view/animation/Animation$Description;
-Landroid/view/animation/Animation$NoImagePreloadHolder;
-Landroid/view/animation/AnimationSet;
-Landroid/view/animation/AnimationUtils;
-Landroid/view/animation/AnimationUtils$1;
-Landroid/view/animation/AnimationUtils$AnimationState;
-Landroid/view/animation/BaseInterpolator;
-Landroid/view/animation/ClipRectAnimation;
-Landroid/view/animation/DecelerateInterpolator;
-Landroid/view/animation/Interpolator;
-Landroid/view/animation/LinearInterpolator;
-Landroid/view/animation/PathInterpolator;
-Landroid/view/animation/RotateAnimation;
-Landroid/view/animation/ScaleAnimation;
-Landroid/view/animation/Transformation;
-Landroid/view/animation/TranslateAnimation;
-Landroid/view/AppTransitionAnimationSpec;
-Landroid/view/AppTransitionAnimationSpec$1;
-Landroid/view/autofill/AutoFillId;
-Landroid/view/autofill/AutoFillId$1;
-Landroid/view/autofill/AutoFillManager;
-Landroid/view/Choreographer;
-Landroid/view/Choreographer$1;
-Landroid/view/Choreographer$2;
-Landroid/view/Choreographer$CallbackQueue;
-Landroid/view/Choreographer$CallbackRecord;
-Landroid/view/Choreographer$FrameCallback;
-Landroid/view/Choreographer$FrameDisplayEventReceiver;
-Landroid/view/Choreographer$FrameHandler;
-Landroid/view/ContextMenu;
-Landroid/view/ContextThemeWrapper;
-Landroid/view/Display;
-Landroid/view/DisplayAdjustments;
-Landroid/view/DisplayEventReceiver;
-Landroid/view/Display$HdrCapabilities;
-Landroid/view/Display$HdrCapabilities$1;
-Landroid/view/DisplayInfo;
-Landroid/view/DisplayInfo$1;
-Landroid/view/DisplayListCanvas;
-Landroid/view/Display$Mode;
-Landroid/view/Display$Mode$1;
-Landroid/view/DragEvent;
-Landroid/view/FallbackEventHandler;
-Landroid/view/FrameInfo;
-Landroid/view/FrameMetrics;
-Landroid/view/FrameMetricsObserver;
-Landroid/view/FrameStats;
-Landroid/view/GestureDetector;
-Landroid/view/GestureDetector$GestureHandler;
-Landroid/view/GestureDetector$OnContextClickListener;
-Landroid/view/GestureDetector$OnDoubleTapListener;
-Landroid/view/GestureDetector$OnGestureListener;
-Landroid/view/GestureDetector$SimpleOnGestureListener;
-Landroid/view/Gravity;
-Landroid/view/HandlerActionQueue;
-Landroid/view/HardwareLayer;
-Landroid/view/IApplicationToken;
-Landroid/view/IApplicationToken$Stub;
-Landroid/view/IAppTransitionAnimationSpecsFuture;
-Landroid/view/IAppTransitionAnimationSpecsFuture$Stub;
-Landroid/view/IAppTransitionAnimationSpecsFuture$Stub$Proxy;
-Landroid/view/IDockedStackListener;
-Landroid/view/IDockedStackListener$Stub;
-Landroid/view/IDockedStackListener$Stub$Proxy;
-Landroid/view/IGraphicsStats;
-Landroid/view/IGraphicsStats$Stub;
-Landroid/view/IInputFilter;
-Landroid/view/InflateException;
-Landroid/view/InputChannel;
-Landroid/view/InputChannel$1;
-Landroid/view/InputDevice;
-Landroid/view/InputDevice$1;
-Landroid/view/InputDevice$MotionRange;
-Landroid/view/InputEvent;
-Landroid/view/InputEvent$1;
-Landroid/view/InputEventConsistencyVerifier;
-Landroid/view/InputEventReceiver;
-Landroid/view/InputEventReceiver$Factory;
-Landroid/view/InputEventSender;
-Landroid/view/inputmethod/BaseInputConnection;
-Landroid/view/inputmethod/ComposingText;
-Landroid/view/inputmethod/EditorInfo;
-Landroid/view/inputmethod/EditorInfo$1;
-Landroid/view/inputmethod/InputBinding;
-Landroid/view/inputmethod/InputBinding$1;
-Landroid/view/inputmethod/InputConnection;
-Landroid/view/inputmethod/InputMethodInfo;
-Landroid/view/inputmethod/InputMethodInfo$1;
-Landroid/view/inputmethod/InputMethodManager;
-Landroid/view/inputmethod/InputMethodManager$1;
-Landroid/view/inputmethod/InputMethodManager$2;
-Landroid/view/inputmethod/InputMethodManager$ControlledInputConnectionWrapper;
-Landroid/view/inputmethod/InputMethodManager$FinishedInputEventCallback;
-Landroid/view/inputmethod/InputMethodManager$H;
-Landroid/view/inputmethod/InputMethodManagerInternal;
-Landroid/view/inputmethod/InputMethodSubtype;
-Landroid/view/inputmethod/InputMethodSubtype$1;
-Landroid/view/inputmethod/InputMethodSubtypeArray;
-Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;
-Landroid/view/InputQueue;
-Landroid/view/InputQueue$Callback;
-Landroid/view/InputQueue$FinishedInputEventCallback;
-Landroid/view/IOnKeyguardExitResult;
-Landroid/view/IPinnedStackController;
-Landroid/view/IPinnedStackController$Stub;
-Landroid/view/IPinnedStackListener;
-Landroid/view/IPinnedStackListener$Stub;
-Landroid/view/IPinnedStackListener$Stub$Proxy;
-Landroid/view/IRotationWatcher;
-Landroid/view/IRotationWatcher$Stub;
-Landroid/view/IRotationWatcher$Stub$Proxy;
-Landroid/view/IWindow;
-Landroid/view/IWindowFocusObserver;
-Landroid/view/IWindowId;
-Landroid/view/IWindowId$Stub;
-Landroid/view/IWindowManager;
-Landroid/view/IWindowManager$Stub;
-Landroid/view/IWindowSession;
-Landroid/view/IWindowSessionCallback;
-Landroid/view/IWindowSessionCallback$Stub;
-Landroid/view/IWindowSessionCallback$Stub$Proxy;
-Landroid/view/IWindowSession$Stub;
-Landroid/view/IWindow$Stub;
-Landroid/view/IWindow$Stub$Proxy;
-Landroid/view/KeyCharacterMap;
-Landroid/view/KeyCharacterMap$1;
-Landroid/view/KeyCharacterMap$FallbackAction;
-Landroid/view/KeyEvent;
-Landroid/view/KeyEvent$1;
-Landroid/view/KeyEvent$Callback;
-Landroid/view/KeyEvent$DispatcherState;
-Landroid/view/LayoutInflater;
-Landroid/view/LayoutInflater$Factory;
-Landroid/view/LayoutInflater$Factory2;
-Landroid/view/LayoutInflater$Filter;
-Landroid/view/MagnificationSpec;
-Landroid/view/Menu;
-Landroid/view/MenuItem;
-Landroid/view/MotionEvent;
-Landroid/view/MotionEvent$1;
-Landroid/view/MotionEvent$PointerCoords;
-Landroid/view/MotionEvent$PointerProperties;
-Landroid/view/PointerIcon;
-Landroid/view/PointerIcon$1;
-Landroid/view/RecordingCanvas;
-Landroid/view/RenderNode;
-Landroid/view/RenderNodeAnimator;
-Landroid/view/RenderNodeAnimator$1;
-Landroid/view/RenderNode$NoImagePreloadHolder;
-Landroid/view/Surface;
-Landroid/view/Surface$1;
-Landroid/view/Surface$CompatibleCanvas;
-Landroid/view/SurfaceControl;
-Landroid/view/SurfaceControl$PhysicalDisplayInfo;
-Landroid/view/SurfaceHolder;
-Landroid/view/SurfaceHolder$Callback;
-Landroid/view/SurfaceHolder$Callback2;
-Landroid/view/Surface$HwuiContext;
-Landroid/view/Surface$OutOfResourcesException;
-Landroid/view/SurfaceSession;
-Landroid/view/SurfaceView;
-Landroid/view/textclassifier/TextClassificationManager;
-Landroid/view/textservice/SpellCheckerInfo;
-Landroid/view/textservice/SpellCheckerInfo$1;
-Landroid/view/textservice/SpellCheckerSubtype;
-Landroid/view/textservice/SpellCheckerSubtype$1;
-Landroid/view/textservice/TextServicesManager;
-Landroid/view/TextureView;
-Landroid/view/ThreadedRenderer;
-Landroid/view/ThreadedRenderer$DrawCallbacks;
-Landroid/view/ThreadedRenderer$ProcessInitializer;
-Landroid/view/VelocityTracker;
-Landroid/view/VelocityTracker$Estimator;
-Landroid/view/View;
-Landroid/view/View$1;
-Landroid/view/View$10;
-Landroid/view/View$11;
-Landroid/view/View$12;
-Landroid/view/View$2;
-Landroid/view/View$3;
-Landroid/view/View$4;
-Landroid/view/View$5;
-Landroid/view/View$6;
-Landroid/view/View$7;
-Landroid/view/View$8;
-Landroid/view/View$9;
-Landroid/view/View$AttachInfo;
-Landroid/view/View$AttachInfo$Callbacks;
-Landroid/view/ViewConfiguration;
-Landroid/view/View$ForegroundInfo;
-Landroid/view/ViewGroup;
-Landroid/view/ViewGroup$1;
-Landroid/view/ViewGroup$2;
-Landroid/view/ViewGroup$LayoutParams;
-Landroid/view/ViewGroup$MarginLayoutParams;
-Landroid/view/ViewGroup$TouchTarget;
-Landroid/view/View$ListenerInfo;
-Landroid/view/ViewManager;
-Landroid/view/View$MeasureSpec;
-Landroid/view/View$OnClickListener;
-Landroid/view/View$OnCreateContextMenuListener;
-Landroid/view/ViewOutlineProvider;
-Landroid/view/ViewOutlineProvider$1;
-Landroid/view/ViewOutlineProvider$2;
-Landroid/view/ViewOutlineProvider$3;
-Landroid/view/ViewParent;
-Landroid/view/View$PerformClick;
-Landroid/view/ViewPropertyAnimator;
-Landroid/view/ViewPropertyAnimator$1;
-Landroid/view/ViewPropertyAnimator$2;
-Landroid/view/ViewPropertyAnimator$3;
-Landroid/view/ViewPropertyAnimator$AnimatorEventListener;
-Landroid/view/ViewPropertyAnimator$NameValuesHolder;
-Landroid/view/ViewPropertyAnimator$PropertyBundle;
-Landroid/view/ViewRootImpl;
-Landroid/view/ViewRootImpl$1;
-Landroid/view/ViewRootImpl$4;
-Landroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;
-Landroid/view/ViewRootImpl$AsyncInputStage;
-Landroid/view/ViewRootImpl$ConsumeBatchedInputImmediatelyRunnable;
-Landroid/view/ViewRootImpl$ConsumeBatchedInputRunnable;
-Landroid/view/ViewRootImpl$EarlyPostImeInputStage;
-Landroid/view/ViewRootImpl$HighContrastTextManager;
-Landroid/view/ViewRootImpl$ImeInputStage;
-Landroid/view/ViewRootImpl$InputStage;
-Landroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;
-Landroid/view/ViewRootImpl$NativePostImeInputStage;
-Landroid/view/ViewRootImpl$NativePreImeInputStage;
-Landroid/view/ViewRootImpl$QueuedInputEvent;
-Landroid/view/ViewRootImpl$SyntheticInputStage;
-Landroid/view/ViewRootImpl$SyntheticJoystickHandler;
-Landroid/view/ViewRootImpl$SyntheticKeyboardHandler;
-Landroid/view/ViewRootImpl$SyntheticTouchNavigationHandler;
-Landroid/view/ViewRootImpl$SyntheticTouchNavigationHandler$1;
-Landroid/view/ViewRootImpl$SyntheticTrackballHandler;
-Landroid/view/ViewRootImpl$TrackballAxis;
-Landroid/view/ViewRootImpl$TraversalRunnable;
-Landroid/view/ViewRootImpl$ViewPostImeInputStage;
-Landroid/view/ViewRootImpl$ViewPreImeInputStage;
-Landroid/view/ViewRootImpl$ViewRootHandler;
-Landroid/view/ViewRootImpl$W;
-Landroid/view/ViewRootImpl$WindowInputEventReceiver;
-Landroid/view/ViewStub;
-Landroid/view/View$TransformationInfo;
-Landroid/view/ViewTreeObserver;
-Landroid/view/ViewTreeObserver$CopyOnWriteArray;
-Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;
-Landroid/view/ViewTreeObserver$InternalInsetsInfo;
-Landroid/view/ViewTreeObserver$OnComputeInternalInsetsListener;
-Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;
-Landroid/view/ViewTreeObserver$OnPreDrawListener;
-Landroid/view/View$UnsetPressedState;
-Landroid/view/Window;
-Landroid/view/WindowAnimationFrameStats;
-Landroid/view/WindowAnimationFrameStats$1;
-Landroid/view/Window$Callback;
-Landroid/view/WindowCallbacks;
-Landroid/view/WindowContentFrameStats;
-Landroid/view/WindowContentFrameStats$1;
-Landroid/view/WindowInsets;
-Landroid/view/WindowLeaked;
-Landroid/view/WindowManager;
-Landroid/view/WindowManager$BadTokenException;
-Landroid/view/WindowManagerGlobal;
-Landroid/view/WindowManagerGlobal$1;
-Landroid/view/WindowManagerGlobal$2;
-Landroid/view/WindowManagerImpl;
-Landroid/view/WindowManagerInternal;
-Landroid/view/WindowManagerInternal$AppTransitionListener;
-Landroid/view/WindowManagerInternal$MagnificationCallbacks;
-Landroid/view/WindowManagerInternal$OnHardKeyboardStatusChangeListener;
-Landroid/view/WindowManagerInternal$WindowsForAccessibilityCallback;
-Landroid/view/WindowManager$LayoutParams;
-Landroid/view/WindowManager$LayoutParams$1;
-Landroid/view/WindowManagerPolicy;
-Landroid/view/WindowManagerPolicy$InputConsumer;
-Landroid/view/WindowManagerPolicy$OnKeyguardExitResult;
-Landroid/view/WindowManagerPolicy$PointerEventListener;
-Landroid/view/WindowManagerPolicy$ScreenOnListener;
-Landroid/view/WindowManagerPolicy$StartingSurface;
-Landroid/view/WindowManagerPolicy$WindowManagerFuncs;
-Landroid/view/WindowManagerPolicy$WindowState;
-Landroid/view/Window$OnWindowDismissedCallback;
-Landroid/view/Window$WindowControllerCallback;
-Landroid/webkit/IWebViewUpdateService;
-Landroid/webkit/IWebViewUpdateService$Stub;
-Landroid/webkit/UserPackage;
-Landroid/webkit/WebViewFactory;
-Landroid/webkit/WebViewFactory$1;
-Landroid/webkit/WebViewFactory$MissingWebViewPackageException;
-Landroid/webkit/WebViewFactory$RelroFileCreator;
-Landroid/webkit/WebViewProviderInfo;
-Landroid/webkit/WebViewProviderInfo$1;
-Landroid/webkit/WebViewProviderResponse;
-Landroid/webkit/WebViewProviderResponse$1;
-Landroid/webkit/WebViewZygote;
-Landroid/widget/ActionMenuView$OnMenuItemClickListener;
-Landroid/widget/Button;
-Landroid/widget/FrameLayout;
-Landroid/widget/FrameLayout$LayoutParams;
-Landroid/widget/ImageButton;
-Landroid/widget/ImageView;
-Landroid/widget/ImageView$ScaleType;
-Landroid/widget/LinearLayout;
-Landroid/widget/LinearLayout$LayoutParams;
-Landroid/widget/OverScroller;
-Landroid/widget/OverScroller$SplineOverScroller;
-Landroid/widget/RelativeLayout;
-Landroid/widget/RelativeLayout$DependencyGraph;
-Landroid/widget/RelativeLayout$DependencyGraph$Node;
-Landroid/widget/RelativeLayout$LayoutParams;
-Landroid/widget/RemoteViews;
-Landroid/widget/RemoteViews$1;
-Landroid/widget/RemoteViews$2;
-Landroid/widget/RemoteViews$3;
-Landroid/widget/RemoteViews$Action;
-Landroid/widget/RemoteViews$ActionException;
-Landroid/widget/RemoteViews$BitmapCache;
-Landroid/widget/RemoteViews$BitmapReflectionAction;
-Landroid/widget/RemoteViews$MemoryUsageCounter;
-Landroid/widget/RemoteViews$MutablePair;
-Landroid/widget/RemoteViews$OnClickHandler;
-Landroid/widget/RemoteViews$ReflectionAction;
-Landroid/widget/RemoteViews$RuntimeAction;
-Landroid/widget/RemoteViews$SetOnClickPendingIntent;
-Landroid/widget/RtlSpacingHelper;
-Landroid/widget/Scroller$ViscousFluidInterpolator;
-Landroid/widget/TextView;
-Landroid/widget/TextView$BufferType;
-Landroid/widget/TextView$CharWrapper;
-Landroid/widget/Toolbar;
-Landroid/widget/Toolbar$1;
-Landroid/widget/Toolbar$2;
-Landroid/widget/Toolbar$LayoutParams;
-LB;
-LC;
-Lcom/android/dex/ClassData;
-Lcom/android/dex/ClassData$Method;
-Lcom/android/dex/ClassDef;
-Lcom/android/dex/Code;
-Lcom/android/dex/Dex;
-Lcom/android/dex/Dex$ClassDefIterable;
-Lcom/android/dex/DexException;
-Lcom/android/dex/Dex$FieldIdTable;
-Lcom/android/dex/DexFormat;
-Lcom/android/dex/Dex$MethodIdTable;
-Lcom/android/dex/Dex$ProtoIdTable;
-Lcom/android/dex/Dex$Section;
-Lcom/android/dex/Dex$StringTable;
-Lcom/android/dex/Dex$TypeIndexToDescriptorIndexTable;
-Lcom/android/dex/Dex$TypeIndexToDescriptorTable;
-Lcom/android/dex/FieldId;
-Lcom/android/dex/Leb128;
-Lcom/android/dex/MethodId;
-Lcom/android/dex/Mutf8;
-Lcom/android/dex/TableOfContents;
-Lcom/android/dex/TableOfContents$Section;
-Lcom/android/dex/TypeList;
-Lcom/android/dex/util/ByteInput;
-Lcom/android/dex/util/ByteOutput;
-Lcom/android/dex/util/ExceptionWithContext;
-Lcom/android/dex/util/FileUtils;
-Lcom/android/framework/protobuf/nano/CodedInputByteBufferNano;
-Lcom/android/framework/protobuf/nano/CodedOutputByteBufferNano;
-Lcom/android/framework/protobuf/nano/InternalNano;
-Lcom/android/framework/protobuf/nano/InvalidProtocolBufferNanoException;
-Lcom/android/framework/protobuf/nano/MessageNano;
-Lcom/android/framework/protobuf/nano/WireFormatNano;
-Lcom/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet;
-Lcom/android/i18n/phonenumbers/CountryCodeToRegionCodeMap;
-Lcom/android/i18n/phonenumbers/MetadataLoader;
-Lcom/android/i18n/phonenumbers/MetadataManager;
-Lcom/android/i18n/phonenumbers/MetadataManager$1;
-Lcom/android/i18n/phonenumbers/MetadataSource;
-Lcom/android/i18n/phonenumbers/MultiFileMetadataSourceImpl;
-Lcom/android/i18n/phonenumbers/NumberParseException;
-Lcom/android/i18n/phonenumbers/NumberParseException$ErrorType;
-Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;
-Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadataCollection;
-Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
-Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;
-Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
-Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult;
-Lcom/android/i18n/phonenumbers/RegexCache;
-Lcom/android/i18n/phonenumbers/RegexCache$LRUCache;
-Lcom/android/i18n/phonenumbers/RegexCache$LRUCache$1;
-Lcom/android/i18n/phonenumbers/ShortNumbersRegionCodeSet;
-Lcom/android/internal/alsa/AlsaCardsParser;
-Lcom/android/internal/alsa/AlsaCardsParser$AlsaCardRecord;
-Lcom/android/internal/alsa/AlsaDevicesParser;
-Lcom/android/internal/alsa/LineTokenizer;
-Lcom/android/internal/app/AssistUtils;
-Lcom/android/internal/app/IAppOpsCallback;
-Lcom/android/internal/app/IAppOpsCallback$Stub;
-Lcom/android/internal/app/IAppOpsCallback$Stub$Proxy;
-Lcom/android/internal/app/IAppOpsService;
-Lcom/android/internal/app/IAppOpsService$Stub;
-Lcom/android/internal/app/IAssistScreenshotReceiver;
-Lcom/android/internal/app/IAssistScreenshotReceiver$Stub;
-Lcom/android/internal/app/IBatteryStats;
-Lcom/android/internal/app/IBatteryStats$Stub;
-Lcom/android/internal/app/IMediaContainerService;
-Lcom/android/internal/app/IMediaContainerService$Stub;
-Lcom/android/internal/app/IMediaContainerService$Stub$Proxy;
-Lcom/android/internal/app/ISoundTriggerService;
-Lcom/android/internal/app/ISoundTriggerService$Stub;
-Lcom/android/internal/app/IVoiceInteractionManagerService;
-Lcom/android/internal/app/IVoiceInteractionManagerService$Stub;
-Lcom/android/internal/app/IVoiceInteractionSessionListener;
-Lcom/android/internal/app/IVoiceInteractionSessionListener$Stub;
-Lcom/android/internal/app/IVoiceInteractionSessionListener$Stub$Proxy;
-Lcom/android/internal/app/IVoiceInteractionSessionShowCallback;
-Lcom/android/internal/app/IVoiceInteractionSessionShowCallback$Stub;
-Lcom/android/internal/app/IVoiceInteractionSessionShowCallback$Stub$Proxy;
-Lcom/android/internal/app/IVoiceInteractor;
-Lcom/android/internal/app/IVoiceInteractor$Stub;
-Lcom/android/internal/app/IVoiceInteractor$Stub$Proxy;
-Lcom/android/internal/app/NightDisplayController;
-Lcom/android/internal/app/NightDisplayController$1;
-Lcom/android/internal/app/NightDisplayController$Callback;
-Lcom/android/internal/app/NightDisplayController$LocalTime;
-Lcom/android/internal/app/ProcessMap;
-Lcom/android/internal/app/procstats/DumpUtils;
-Lcom/android/internal/app/procstats/DurationsTable;
-Lcom/android/internal/app/procstats/IProcessStats;
-Lcom/android/internal/app/procstats/IProcessStats$Stub;
-Lcom/android/internal/app/procstats/ProcessState;
-Lcom/android/internal/app/procstats/ProcessState$1;
-Lcom/android/internal/app/procstats/ProcessState$PssAggr;
-Lcom/android/internal/app/procstats/ProcessStats;
-Lcom/android/internal/app/procstats/ProcessStats$1;
-Lcom/android/internal/app/procstats/ProcessStats$PackageState;
-Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;
-Lcom/android/internal/app/procstats/ProcessStats$TotalMemoryUseCollection;
-Lcom/android/internal/app/procstats/PssTable;
-Lcom/android/internal/app/procstats/ServiceState;
-Lcom/android/internal/app/procstats/SparseMappingTable;
-Lcom/android/internal/app/procstats/SparseMappingTable$Table;
-Lcom/android/internal/app/procstats/SysMemUsageTable;
-Lcom/android/internal/app/ResolverActivity;
-Lcom/android/internal/appwidget/IAppWidgetHost;
-Lcom/android/internal/appwidget/IAppWidgetHost$Stub;
-Lcom/android/internal/appwidget/IAppWidgetHost$Stub$Proxy;
-Lcom/android/internal/appwidget/IAppWidgetService;
-Lcom/android/internal/appwidget/IAppWidgetService$Stub;
-Lcom/android/internal/backup/IBackupTransport;
-Lcom/android/internal/backup/IBackupTransport$Stub;
-Lcom/android/internal/backup/IBackupTransport$Stub$Proxy;
-Lcom/android/internal/backup/LocalTransport;
-Lcom/android/internal/backup/LocalTransportService;
-Lcom/android/internal/content/NativeLibraryHelper;
-Lcom/android/internal/content/PackageHelper;
-Lcom/android/internal/content/PackageMonitor;
-Lcom/android/internal/content/ReferrerIntent;
-Lcom/android/internal/content/ReferrerIntent$1;
-Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable;
-Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;
-Lcom/android/internal/hardware/AmbientDisplayConfiguration;
-Lcom/android/internal/inputmethod/IInputContentUriToken;
-Lcom/android/internal/inputmethod/InputMethodSubtypeHandle;
-Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController;
-Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ControllerImpl;
-Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$DynamicRotationList;
-Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$ImeSubtypeListItem;
-Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList;
-Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList$1;
-Lcom/android/internal/inputmethod/InputMethodSubtypeSwitchingController$StaticRotationList;
-Lcom/android/internal/inputmethod/InputMethodUtils;
-Lcom/android/internal/inputmethod/InputMethodUtils$1;
-Lcom/android/internal/inputmethod/InputMethodUtils$InputMethodListBuilder;
-Lcom/android/internal/inputmethod/InputMethodUtils$InputMethodSettings;
-Lcom/android/internal/inputmethod/LocaleUtils;
-Lcom/android/internal/inputmethod/LocaleUtils$LocaleExtractor;
-Lcom/android/internal/inputmethod/LocaleUtils$ScoreEntry;
-Lcom/android/internal/location/GpsNetInitiatedHandler;
-Lcom/android/internal/location/GpsNetInitiatedHandler$1;
-Lcom/android/internal/location/GpsNetInitiatedHandler$2;
-Lcom/android/internal/location/ILocationProvider;
-Lcom/android/internal/location/ILocationProvider$Stub;
-Lcom/android/internal/location/ILocationProvider$Stub$Proxy;
-Lcom/android/internal/location/ProviderProperties;
-Lcom/android/internal/location/ProviderProperties$1;
-Lcom/android/internal/location/ProviderRequest;
-Lcom/android/internal/location/ProviderRequest$1;
-Lcom/android/internal/logging/AndroidConfig;
-Lcom/android/internal/logging/AndroidHandler;
-Lcom/android/internal/logging/AndroidHandler$1;
-Lcom/android/internal/logging/EventLogTags;
-Lcom/android/internal/logging/MetricsLogger;
-Lcom/android/internal/net/LegacyVpnInfo;
-Lcom/android/internal/net/NetworkStatsFactory;
-Lcom/android/internal/net/VpnConfig;
-Lcom/android/internal/net/VpnInfo;
-Lcom/android/internal/net/VpnProfile;
-Lcom/android/internal/os/AndroidPrintStream;
-Lcom/android/internal/os/AppFuseMount;
-Lcom/android/internal/os/AtomicFile;
-Lcom/android/internal/os/BackgroundThread;
-Lcom/android/internal/os/BatterySipper;
-Lcom/android/internal/os/BatterySipper$DrainType;
-Lcom/android/internal/os/BatteryStatsHelper;
-Lcom/android/internal/os/BatteryStatsHelper$1;
-Lcom/android/internal/os/BatteryStatsImpl;
-Lcom/android/internal/os/BatteryStatsImpl$1;
-Lcom/android/internal/os/BatteryStatsImpl$5;
-Lcom/android/internal/os/BatteryStatsImpl$BatchTimer;
-Lcom/android/internal/os/BatteryStatsImpl$BatteryCallback;
-Lcom/android/internal/os/BatteryStatsImpl$Clocks;
-Lcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;
-Lcom/android/internal/os/BatteryStatsImpl$Counter;
-Lcom/android/internal/os/BatteryStatsImpl$DurationTimer;
-Lcom/android/internal/os/BatteryStatsImpl$ExternalStatsSync;
-Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;
-Lcom/android/internal/os/BatteryStatsImpl$MyHandler;
-Lcom/android/internal/os/BatteryStatsImpl$OverflowArrayMap;
-Lcom/android/internal/os/BatteryStatsImpl$PlatformIdleStateCallback;
-Lcom/android/internal/os/BatteryStatsImpl$SamplingTimer;
-Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
-Lcom/android/internal/os/BatteryStatsImpl$SystemClocks;
-Lcom/android/internal/os/BatteryStatsImpl$TimeBase;
-Lcom/android/internal/os/BatteryStatsImpl$TimeBaseObs;
-Lcom/android/internal/os/BatteryStatsImpl$Timer;
-Lcom/android/internal/os/BatteryStatsImpl$Uid;
-Lcom/android/internal/os/BatteryStatsImpl$Uid$1;
-Lcom/android/internal/os/BatteryStatsImpl$Uid$2;
-Lcom/android/internal/os/BatteryStatsImpl$Uid$3;
-Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;
-Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
-Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;
-Lcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;
-Lcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;
-Lcom/android/internal/os/BinderInternal;
-Lcom/android/internal/os/BinderInternal$GcWatcher;
-Lcom/android/internal/os/BluetoothPowerCalculator;
-Lcom/android/internal/os/CameraPowerCalculator;
-Lcom/android/internal/os/CpuPowerCalculator;
-Lcom/android/internal/os/FlashlightPowerCalculator;
-Lcom/android/internal/os/FuseAppLoop;
-Lcom/android/internal/os/FuseAppLoop$1;
-Lcom/android/internal/os/FuseAppLoop$UnmountedException;
-Lcom/android/internal/os/HandlerCaller;
-Lcom/android/internal/os/HandlerCaller$Callback;
-Lcom/android/internal/os/HandlerCaller$MyHandler;
-Lcom/android/internal/os/IDropBoxManagerService;
-Lcom/android/internal/os/IDropBoxManagerService$Stub;
-Lcom/android/internal/os/IResultReceiver;
-Lcom/android/internal/os/IResultReceiver$Stub;
-Lcom/android/internal/os/IResultReceiver$Stub$Proxy;
-Lcom/android/internal/os/IShellCallback;
-Lcom/android/internal/os/IShellCallback$Stub;
-Lcom/android/internal/os/IShellCallback$Stub$Proxy;
-Lcom/android/internal/os/KernelCpuSpeedReader;
-Lcom/android/internal/os/KernelMemoryBandwidthStats;
-Lcom/android/internal/os/KernelUidCpuTimeReader;
-Lcom/android/internal/os/KernelWakelockReader;
-Lcom/android/internal/os/KernelWakelockStats;
-Lcom/android/internal/os/KernelWakelockStats$Entry;
-Lcom/android/internal/os/LoggingPrintStream;
-Lcom/android/internal/os/LoggingPrintStream$1;
-Lcom/android/internal/os/MemoryPowerCalculator;
-Lcom/android/internal/os/MobileRadioPowerCalculator;
-Lcom/android/internal/os/PathClassLoaderFactory;
-Lcom/android/internal/os/PowerCalculator;
-Lcom/android/internal/os/PowerProfile;
-Lcom/android/internal/os/PowerProfile$CpuClusterKey;
-Lcom/android/internal/os/ProcessCpuTracker;
-Lcom/android/internal/os/ProcessCpuTracker$1;
-Lcom/android/internal/os/ProcessCpuTracker$FilterStats;
-Lcom/android/internal/os/ProcessCpuTracker$Stats;
-Lcom/android/internal/os/RoSystemProperties;
-Lcom/android/internal/os/RuntimeInit;
-Lcom/android/internal/os/RuntimeInit$1;
-Lcom/android/internal/os/RuntimeInit$Arguments;
-Lcom/android/internal/os/RuntimeInit$KillApplicationHandler;
-Lcom/android/internal/os/RuntimeInit$LoggingHandler;
-Lcom/android/internal/os/SamplingProfilerIntegration;
-Lcom/android/internal/os/SensorPowerCalculator;
-Lcom/android/internal/os/SomeArgs;
-Lcom/android/internal/os/TransferPipe;
-Lcom/android/internal/os/WakelockPowerCalculator;
-Lcom/android/internal/os/WifiPowerCalculator;
-Lcom/android/internal/os/Zygote;
-Lcom/android/internal/os/ZygoteConnection;
-Lcom/android/internal/os/ZygoteConnection$Arguments;
-Lcom/android/internal/os/ZygoteInit;
-Lcom/android/internal/os/Zygote$MethodAndArgsCaller;
-Lcom/android/internal/os/ZygoteSecurityException;
-Lcom/android/internal/os/ZygoteServer;
-Lcom/android/internal/policy/DecorContext;
-Lcom/android/internal/policy/DecorView;
-Lcom/android/internal/policy/DecorView$ColorViewState;
-Lcom/android/internal/policy/DividerSnapAlgorithm;
-Lcom/android/internal/policy/DividerSnapAlgorithm$SnapTarget;
-Lcom/android/internal/policy/DockedDividerUtils;
-Lcom/android/internal/policy/IKeyguardDismissCallback;
-Lcom/android/internal/policy/IKeyguardDrawnCallback;
-Lcom/android/internal/policy/IKeyguardDrawnCallback$Stub;
-Lcom/android/internal/policy/IKeyguardExitCallback;
-Lcom/android/internal/policy/IKeyguardService;
-Lcom/android/internal/policy/IKeyguardService$Stub;
-Lcom/android/internal/policy/IKeyguardService$Stub$Proxy;
-Lcom/android/internal/policy/IKeyguardStateCallback;
-Lcom/android/internal/policy/IKeyguardStateCallback$Stub;
-Lcom/android/internal/policy/IShortcutService;
-Lcom/android/internal/policy/IShortcutService$Stub;
-Lcom/android/internal/policy/IShortcutService$Stub$Proxy;
-Lcom/android/internal/policy/PhoneFallbackEventHandler;
-Lcom/android/internal/policy/PhoneLayoutInflater;
-Lcom/android/internal/policy/PhoneWindow;
-Lcom/android/internal/policy/PhoneWindow$1;
-Lcom/android/internal/policy/PhoneWindow$PanelFeatureState;
-Lcom/android/internal/policy/PhoneWindow$PhoneWindowMenuCallback;
-Lcom/android/internal/policy/PhoneWindow$RotationWatcher;
-Lcom/android/internal/policy/PhoneWindow$RotationWatcher$1;
-Lcom/android/internal/policy/PipMotionHelper;
-Lcom/android/internal/policy/PipSnapAlgorithm;
-Lcom/android/internal/R$styleable;
-Lcom/android/internal/statusbar/IStatusBar;
-Lcom/android/internal/statusbar/IStatusBarService;
-Lcom/android/internal/statusbar/IStatusBarService$Stub;
-Lcom/android/internal/statusbar/IStatusBar$Stub;
-Lcom/android/internal/statusbar/IStatusBar$Stub$Proxy;
-Lcom/android/internal/statusbar/NotificationVisibility;
-Lcom/android/internal/statusbar/NotificationVisibility$1;
-Lcom/android/internal/statusbar/StatusBarIcon;
-Lcom/android/internal/telecom/IConnectionService;
-Lcom/android/internal/telecom/IConnectionServiceAdapter;
-Lcom/android/internal/telecom/IConnectionServiceAdapter$Stub;
-Lcom/android/internal/telecom/IConnectionService$Stub;
-Lcom/android/internal/telecom/IConnectionService$Stub$Proxy;
-Lcom/android/internal/telecom/IInCallAdapter;
-Lcom/android/internal/telecom/IInCallAdapter$Stub;
-Lcom/android/internal/telecom/IInCallService;
-Lcom/android/internal/telecom/IInCallService$Stub;
-Lcom/android/internal/telecom/IInCallService$Stub$Proxy;
-Lcom/android/internal/telecom/ITelecomService;
-Lcom/android/internal/telecom/ITelecomService$Stub;
-Lcom/android/internal/telecom/IVideoProvider;
-Lcom/android/internal/telecom/IVideoProvider$Stub;
-Lcom/android/internal/telecom/RemoteServiceCallback;
-Lcom/android/internal/telecom/RemoteServiceCallback$Stub;
-Lcom/android/internal/telecom/RemoteServiceCallback$Stub$Proxy;
-Lcom/android/internal/telephony/CallerInfo;
-Lcom/android/internal/telephony/CallerInfoAsyncQuery;
-Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;
-Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler$CallerInfoWorkerHandler;
-Lcom/android/internal/telephony/CallerInfoAsyncQuery$CookieWrapper;
-Lcom/android/internal/telephony/CallerInfoAsyncQuery$OnQueryCompleteListener;
-Lcom/android/internal/telephony/CarrierAppUtils;
-Lcom/android/internal/telephony/DefaultPhoneNotifier;
-Lcom/android/internal/telephony/ICarrierConfigLoader;
-Lcom/android/internal/telephony/ICarrierConfigLoader$Stub;
-Lcom/android/internal/telephony/ICarrierConfigLoader$Stub$Proxy;
-Lcom/android/internal/telephony/IccCardConstants$State;
-Lcom/android/internal/telephony/IMms;
-Lcom/android/internal/telephony/IMms$Stub;
-Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;
-Lcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub;
-Lcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub$Proxy;
-Lcom/android/internal/telephony/IPhoneStateListener;
-Lcom/android/internal/telephony/IPhoneStateListener$Stub;
-Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;
-Lcom/android/internal/telephony/IPhoneSubInfo;
-Lcom/android/internal/telephony/IPhoneSubInfo$Stub;
-Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;
-Lcom/android/internal/telephony/ISub;
-Lcom/android/internal/telephony/ISub$Stub;
-Lcom/android/internal/telephony/ISub$Stub$Proxy;
-Lcom/android/internal/telephony/ITelephony;
-Lcom/android/internal/telephony/ITelephonyRegistry;
-Lcom/android/internal/telephony/ITelephonyRegistry$Stub;
-Lcom/android/internal/telephony/ITelephony$Stub;
-Lcom/android/internal/telephony/ITelephony$Stub$Proxy;
-Lcom/android/internal/telephony/PhoneConstants$DataState;
-Lcom/android/internal/telephony/PhoneConstants$State;
-Lcom/android/internal/telephony/PhoneNotifier;
-Lcom/android/internal/telephony/SmsApplication;
-Lcom/android/internal/textservice/ISpellCheckerService;
-Lcom/android/internal/textservice/ISpellCheckerService$Stub;
-Lcom/android/internal/textservice/ISpellCheckerService$Stub$Proxy;
-Lcom/android/internal/textservice/ISpellCheckerSession;
-Lcom/android/internal/textservice/ISpellCheckerSessionListener;
-Lcom/android/internal/textservice/ISpellCheckerSessionListener$Stub;
-Lcom/android/internal/textservice/ISpellCheckerSessionListener$Stub$Proxy;
-Lcom/android/internal/textservice/ISpellCheckerSession$Stub;
-Lcom/android/internal/textservice/ISpellCheckerSession$Stub$Proxy;
-Lcom/android/internal/textservice/ITextServicesManager;
-Lcom/android/internal/textservice/ITextServicesManager$Stub;
-Lcom/android/internal/textservice/ITextServicesSessionListener;
-Lcom/android/internal/textservice/ITextServicesSessionListener$Stub;
-Lcom/android/internal/textservice/ITextServicesSessionListener$Stub$Proxy;
-Lcom/android/internal/util/ArrayUtils;
-Lcom/android/internal/util/AsyncChannel;
-Lcom/android/internal/util/AsyncChannel$AsyncChannelConnection;
-Lcom/android/internal/util/AsyncChannel$DeathMonitor;
-Lcom/android/internal/util/AsyncChannel$SyncMessenger;
-Lcom/android/internal/util/AsyncChannel$SyncMessenger$SyncHandler;
-Lcom/android/internal/util/ConcurrentUtils;
-Lcom/android/internal/util/ConcurrentUtils$1;
-Lcom/android/internal/util/ConcurrentUtils$1$1;
-Lcom/android/internal/util/DumpUtils$Dump;
-Lcom/android/internal/util/FastPrintWriter;
-Lcom/android/internal/util/FastPrintWriter$DummyWriter;
-Lcom/android/internal/util/FastXmlSerializer;
-Lcom/android/internal/util/FileRotator;
-Lcom/android/internal/util/FileRotator$FileInfo;
-Lcom/android/internal/util/FileRotator$Reader;
-Lcom/android/internal/util/FileRotator$Rewriter;
-Lcom/android/internal/util/FileRotator$Writer;
-Lcom/android/internal/util/GrowingArrayUtils;
-Lcom/android/internal/util/HexDump;
-Lcom/android/internal/util/IndentingPrintWriter;
-Lcom/android/internal/util/IState;
-Lcom/android/internal/util/JournaledFile;
-Lcom/android/internal/util/LineBreakBufferedWriter;
-Lcom/android/internal/util/LocalLog;
-Lcom/android/internal/util/MemInfoReader;
-Lcom/android/internal/util/MessageUtils;
-Lcom/android/internal/util/Preconditions;
-Lcom/android/internal/util/ProcFileReader;
-Lcom/android/internal/util/ProgressReporter;
-Lcom/android/internal/util/RingBufferIndices;
-Lcom/android/internal/util/ScreenShapeHelper;
-Lcom/android/internal/util/State;
-Lcom/android/internal/util/StateMachine;
-Lcom/android/internal/util/StateMachine$LogRec;
-Lcom/android/internal/util/StateMachine$LogRecords;
-Lcom/android/internal/util/StateMachine$SmHandler;
-Lcom/android/internal/util/StateMachine$SmHandler$HaltingState;
-Lcom/android/internal/util/StateMachine$SmHandler$QuittingState;
-Lcom/android/internal/util/StateMachine$SmHandler$StateInfo;
-Lcom/android/internal/util/ToBooleanFunction;
-Lcom/android/internal/util/TokenBucket;
-Lcom/android/internal/util/VirtualRefBasePtr;
-Lcom/android/internal/util/WakeupMessage;
-Lcom/android/internal/util/XmlUtils;
-Lcom/android/internal/util/XmlUtils$ReadMapCallback;
-Lcom/android/internal/util/XmlUtils$WriteMapCallback;
-Lcom/android/internal/view/animation/NativeInterpolatorFactory;
-Lcom/android/internal/view/animation/NativeInterpolatorFactoryHelper;
-Lcom/android/internal/view/BaseIWindow;
-Lcom/android/internal/view/IInputConnectionWrapper;
-Lcom/android/internal/view/IInputConnectionWrapper$MyHandler;
-Lcom/android/internal/view/IInputContext;
-Lcom/android/internal/view/IInputContext$Stub;
-Lcom/android/internal/view/IInputContext$Stub$Proxy;
-Lcom/android/internal/view/IInputMethod;
-Lcom/android/internal/view/IInputMethodClient;
-Lcom/android/internal/view/IInputMethodClient$Stub;
-Lcom/android/internal/view/IInputMethodClient$Stub$Proxy;
-Lcom/android/internal/view/IInputMethodManager;
-Lcom/android/internal/view/IInputMethodManager$Stub;
-Lcom/android/internal/view/IInputMethodSession;
-Lcom/android/internal/view/IInputMethodSession$Stub;
-Lcom/android/internal/view/IInputMethodSession$Stub$Proxy;
-Lcom/android/internal/view/IInputMethod$Stub;
-Lcom/android/internal/view/IInputMethod$Stub$Proxy;
-Lcom/android/internal/view/IInputSessionCallback;
-Lcom/android/internal/view/IInputSessionCallback$Stub;
-Lcom/android/internal/view/InputBindResult;
-Lcom/android/internal/view/InputBindResult$1;
-Lcom/android/internal/view/menu/ActionMenuItem;
-Lcom/android/internal/view/menu/MenuBuilder$Callback;
-Lcom/android/internal/view/menu/MenuPresenter$Callback;
-Lcom/android/internal/view/RootViewSurfaceTaker;
-Lcom/android/internal/view/WindowManagerPolicyThread;
-Lcom/android/internal/widget/AbsActionBarView;
-Lcom/android/internal/widget/AbsActionBarView$VisibilityAnimListener;
-Lcom/android/internal/widget/ActionBarContainer;
-Lcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable;
-Lcom/android/internal/widget/ActionBarContextView;
-Lcom/android/internal/widget/ActionBarOverlayLayout;
-Lcom/android/internal/widget/ActionBarOverlayLayout$1;
-Lcom/android/internal/widget/ActionBarOverlayLayout$2;
-Lcom/android/internal/widget/ActionBarOverlayLayout$3;
-Lcom/android/internal/widget/ActionBarOverlayLayout$4;
-Lcom/android/internal/widget/ActionBarOverlayLayout$5;
-Lcom/android/internal/widget/ActionBarOverlayLayout$LayoutParams;
-Lcom/android/internal/widget/BackgroundFallback;
-Lcom/android/internal/widget/DecorContentParent;
-Lcom/android/internal/widget/DecorToolbar;
-Lcom/android/internal/widget/ICheckCredentialProgressCallback;
-Lcom/android/internal/widget/ILockSettings;
-Lcom/android/internal/widget/ILockSettings$Stub;
-Lcom/android/internal/widget/LockPatternUtils;
-Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;
-Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$1;
-Lcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$H;
-Lcom/android/internal/widget/ToolbarWidgetWrapper;
-Lcom/android/internal/widget/ToolbarWidgetWrapper$1;
-Lcom/android/internal/widget/VerifyCredentialResponse;
-Lcom/android/location/fused/FusedLocationProvider;
-Lcom/android/location/fused/FusedLocationProvider$1;
-Lcom/android/location/fused/FusedLocationProvider$2;
-Lcom/android/location/fused/FusedLocationService;
-Lcom/android/location/fused/FusionEngine;
-Lcom/android/location/fused/FusionEngine$Callback;
-Lcom/android/location/fused/FusionEngine$ProviderStats;
-Lcom/android/location/provider/LocationProviderBase;
-Lcom/android/location/provider/LocationProviderBase$Service;
-Lcom/android/location/provider/ProviderPropertiesUnbundled;
-Lcom/android/okhttp/Address;
-Lcom/android/okhttp/Authenticator;
-Lcom/android/okhttp/CacheControl;
-Lcom/android/okhttp/CacheControl$Builder;
-Lcom/android/okhttp/CertificatePinner;
-Lcom/android/okhttp/CertificatePinner$Builder;
-Lcom/android/okhttp/CipherSuite;
-Lcom/android/okhttp/ConfigAwareConnectionPool;
-Lcom/android/okhttp/Connection;
-Lcom/android/okhttp/ConnectionPool;
-Lcom/android/okhttp/ConnectionPool$1;
-Lcom/android/okhttp/ConnectionSpec;
-Lcom/android/okhttp/ConnectionSpec$Builder;
-Lcom/android/okhttp/Dispatcher;
-Lcom/android/okhttp/Dns;
-Lcom/android/okhttp/Handshake;
-Lcom/android/okhttp/Headers;
-Lcom/android/okhttp/Headers$Builder;
-Lcom/android/okhttp/HttpHandler;
-Lcom/android/okhttp/HttpHandler$CleartextURLFilter;
-Lcom/android/okhttp/HttpsHandler;
-Lcom/android/okhttp/HttpUrl;
-Lcom/android/okhttp/HttpUrl$Builder;
-Lcom/android/okhttp/HttpUrl$Builder$ParseResult;
-Lcom/android/okhttp/internal/ConnectionSpecSelector;
-Lcom/android/okhttp/internal/http/AuthenticatorAdapter;
-Lcom/android/okhttp/internal/http/CacheStrategy;
-Lcom/android/okhttp/internal/http/CacheStrategy$Factory;
-Lcom/android/okhttp/internal/http/Http1xStream;
-Lcom/android/okhttp/internal/http/Http1xStream$AbstractSource;
-Lcom/android/okhttp/internal/http/Http1xStream$FixedLengthSource;
-Lcom/android/okhttp/internal/http/HttpEngine;
-Lcom/android/okhttp/internal/http/HttpEngine$1;
-Lcom/android/okhttp/internal/http/HttpMethod;
-Lcom/android/okhttp/internal/http/HttpStream;
-Lcom/android/okhttp/internal/http/OkHeaders;
-Lcom/android/okhttp/internal/http/OkHeaders$1;
-Lcom/android/okhttp/internal/http/RealResponseBody;
-Lcom/android/okhttp/internal/http/RequestException;
-Lcom/android/okhttp/internal/http/RequestLine;
-Lcom/android/okhttp/internal/http/RetryableSink;
-Lcom/android/okhttp/internal/http/RouteException;
-Lcom/android/okhttp/internal/http/RouteSelector;
-Lcom/android/okhttp/internal/http/StatusLine;
-Lcom/android/okhttp/internal/http/StreamAllocation;
-Lcom/android/okhttp/internal/huc/DelegatingHttpsURLConnection;
-Lcom/android/okhttp/internal/huc/HttpsURLConnectionImpl;
-Lcom/android/okhttp/internal/huc/HttpURLConnectionImpl;
-Lcom/android/okhttp/internal/Internal;
-Lcom/android/okhttp/internal/io/RealConnection;
-Lcom/android/okhttp/internal/OptionalMethod;
-Lcom/android/okhttp/internal/Platform;
-Lcom/android/okhttp/internal/RouteDatabase;
-Lcom/android/okhttp/internal/tls/OkHostnameVerifier;
-Lcom/android/okhttp/internal/URLFilter;
-Lcom/android/okhttp/internal/Util;
-Lcom/android/okhttp/internal/Util$1;
-Lcom/android/okhttp/OkHttpClient;
-Lcom/android/okhttp/OkHttpClient$1;
-Lcom/android/okhttp/okio/AsyncTimeout;
-Lcom/android/okhttp/okio/AsyncTimeout$1;
-Lcom/android/okhttp/okio/AsyncTimeout$2;
-Lcom/android/okhttp/okio/AsyncTimeout$Watchdog;
-Lcom/android/okhttp/okio/Buffer;
-Lcom/android/okhttp/okio/BufferedSink;
-Lcom/android/okhttp/okio/BufferedSource;
-Lcom/android/okhttp/okio/ForwardingTimeout;
-Lcom/android/okhttp/okio/Okio;
-Lcom/android/okhttp/okio/Okio$1;
-Lcom/android/okhttp/okio/Okio$2;
-Lcom/android/okhttp/okio/Okio$3;
-Lcom/android/okhttp/okio/RealBufferedSink;
-Lcom/android/okhttp/okio/RealBufferedSource;
-Lcom/android/okhttp/okio/Segment;
-Lcom/android/okhttp/okio/SegmentPool;
-Lcom/android/okhttp/okio/Sink;
-Lcom/android/okhttp/okio/Source;
-Lcom/android/okhttp/okio/Timeout;
-Lcom/android/okhttp/okio/Timeout$1;
-Lcom/android/okhttp/okio/Util;
-Lcom/android/okhttp/OkUrlFactory;
-Lcom/android/okhttp/Protocol;
-Lcom/android/okhttp/Request;
-Lcom/android/okhttp/RequestBody;
-Lcom/android/okhttp/RequestBody$2;
-Lcom/android/okhttp/Request$Builder;
-Lcom/android/okhttp/Response;
-Lcom/android/okhttp/ResponseBody;
-Lcom/android/okhttp/Response$Builder;
-Lcom/android/okhttp/Route;
-Lcom/android/okhttp/TlsVersion;
-Lcom/android/org/bouncycastle/asn1/ASN1Encodable;
-Lcom/android/org/bouncycastle/asn1/ASN1Object;
-Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;
-Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle;
-Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
-Lcom/android/org/bouncycastle/asn1/bc/BCObjectIdentifiers;
-Lcom/android/org/bouncycastle/asn1/iana/IANAObjectIdentifiers;
-Lcom/android/org/bouncycastle/asn1/misc/MiscObjectIdentifiers;
-Lcom/android/org/bouncycastle/asn1/nist/NISTObjectIdentifiers;
-Lcom/android/org/bouncycastle/asn1/OIDTokenizer;
-Lcom/android/org/bouncycastle/asn1/oiw/OIWObjectIdentifiers;
-Lcom/android/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers;
-Lcom/android/org/bouncycastle/asn1/x509/X509ObjectIdentifiers;
-Lcom/android/org/bouncycastle/asn1/x9/X9ObjectIdentifiers;
-Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyFactorySpi;
-Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/DH$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil;
-Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/KeyFactorySpi;
-Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/DSA$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi;
-Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$EC;
-Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/EC$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyFactorySpi;
-Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi;
-Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/X509$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/config/ConfigurableProvider;
-Lcom/android/org/bouncycastle/jcajce/provider/config/ProviderConfiguration;
-Lcom/android/org/bouncycastle/jcajce/provider/config/ProviderConfigurationPermission;
-Lcom/android/org/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider;
-Lcom/android/org/bouncycastle/jcajce/provider/digest/MD5;
-Lcom/android/org/bouncycastle/jcajce/provider/digest/MD5$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA1;
-Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA1$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA224;
-Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA224$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA256;
-Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA256$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA384;
-Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA384$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA512;
-Lcom/android/org/bouncycastle/jcajce/provider/digest/SHA512$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi;
-Lcom/android/org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$Std;
-Lcom/android/org/bouncycastle/jcajce/provider/keystore/BC$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/keystore/PKCS12$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/AES;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/AES$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/ARC4;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/ARC4$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/Blowfish;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/Blowfish$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/DES;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/DESede;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/DESede$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/DES$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/PBEPKCS12;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/PBES2AlgorithmParameters;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/PBES2AlgorithmParameters$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/RC2;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/RC2$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/Twofish;
-Lcom/android/org/bouncycastle/jcajce/provider/symmetric/Twofish$Mappings;
-Lcom/android/org/bouncycastle/jcajce/provider/util/AlgorithmProvider;
-Lcom/android/org/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;
-Lcom/android/org/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;
-Lcom/android/org/bouncycastle/jcajce/util/BCJcaJceHelper;
-Lcom/android/org/bouncycastle/jcajce/util/JcaJceHelper;
-Lcom/android/org/bouncycastle/jcajce/util/ProviderJcaJceHelper;
-Lcom/android/org/bouncycastle/jce/interfaces/BCKeyStore;
-Lcom/android/org/bouncycastle/jce/provider/BouncyCastleProvider;
-Lcom/android/org/bouncycastle/jce/provider/BouncyCastleProvider$1;
-Lcom/android/org/bouncycastle/jce/provider/BouncyCastleProviderConfiguration;
-Lcom/android/org/bouncycastle/util/Arrays;
-Lcom/android/org/bouncycastle/util/Encodable;
-Lcom/android/org/bouncycastle/util/Strings;
-Lcom/android/org/bouncycastle/util/Strings$1;
-Lcom/android/org/conscrypt/AbstractOpenSSLSession;
-Lcom/android/org/conscrypt/AbstractSessionContext;
-Lcom/android/org/conscrypt/AbstractSessionContext$1;
-Lcom/android/org/conscrypt/AddressUtils;
-Lcom/android/org/conscrypt/ByteArray;
-Lcom/android/org/conscrypt/CertBlacklist;
-Lcom/android/org/conscrypt/CertificatePriorityComparator;
-Lcom/android/org/conscrypt/ChainStrengthAnalyzer;
-Lcom/android/org/conscrypt/ClientSessionContext;
-Lcom/android/org/conscrypt/ClientSessionContext$HostAndPort;
-Lcom/android/org/conscrypt/CryptoUpcalls;
-Lcom/android/org/conscrypt/ct/CTLogInfo;
-Lcom/android/org/conscrypt/ct/CTLogStore;
-Lcom/android/org/conscrypt/ct/CTLogStoreImpl;
-Lcom/android/org/conscrypt/ct/CTLogStoreImpl$InvalidLogFileException;
-Lcom/android/org/conscrypt/ct/CTPolicy;
-Lcom/android/org/conscrypt/ct/CTPolicyImpl;
-Lcom/android/org/conscrypt/ct/CTVerifier;
-Lcom/android/org/conscrypt/ct/KnownLogs;
-Lcom/android/org/conscrypt/ct/SerializationException;
-Lcom/android/org/conscrypt/EvpMdRef$MD5;
-Lcom/android/org/conscrypt/EvpMdRef$SHA1;
-Lcom/android/org/conscrypt/EvpMdRef$SHA256;
-Lcom/android/org/conscrypt/Hex;
-Lcom/android/org/conscrypt/JSSEProvider;
-Lcom/android/org/conscrypt/KeyManagerFactoryImpl;
-Lcom/android/org/conscrypt/KeyManagerImpl;
-Lcom/android/org/conscrypt/NativeCrypto;
-Lcom/android/org/conscrypt/NativeCryptoJni;
-Lcom/android/org/conscrypt/NativeCrypto$SSLHandshakeCallbacks;
-Lcom/android/org/conscrypt/NativeRef;
-Lcom/android/org/conscrypt/NativeRef$EC_GROUP;
-Lcom/android/org/conscrypt/NativeRef$EVP_MD_CTX;
-Lcom/android/org/conscrypt/NativeRef$EVP_PKEY;
-Lcom/android/org/conscrypt/OpenSSLBIOInputStream;
-Lcom/android/org/conscrypt/OpenSSLContextImpl;
-Lcom/android/org/conscrypt/OpenSSLContextImpl$TLSv12;
-Lcom/android/org/conscrypt/OpenSSLECGroupContext;
-Lcom/android/org/conscrypt/OpenSSLECPublicKey;
-Lcom/android/org/conscrypt/OpenSSLExtendedSessionImpl;
-Lcom/android/org/conscrypt/OpenSSLKey;
-Lcom/android/org/conscrypt/OpenSSLKeyHolder;
-Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK;
-Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$MD5;
-Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA1;
-Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA256;
-Lcom/android/org/conscrypt/OpenSSLProvider;
-Lcom/android/org/conscrypt/OpenSSLRandom;
-Lcom/android/org/conscrypt/OpenSSLRSAKeyFactory;
-Lcom/android/org/conscrypt/OpenSSLRSAPublicKey;
-Lcom/android/org/conscrypt/OpenSSLSessionImpl;
-Lcom/android/org/conscrypt/OpenSSLSignature;
-Lcom/android/org/conscrypt/OpenSSLSignature$EngineType;
-Lcom/android/org/conscrypt/OpenSSLSignature$RSAPKCS1Padding;
-Lcom/android/org/conscrypt/OpenSSLSignature$SHA256RSA;
-Lcom/android/org/conscrypt/OpenSSLSocketFactoryImpl;
-Lcom/android/org/conscrypt/OpenSSLSocketImpl;
-Lcom/android/org/conscrypt/OpenSSLSocketImpl$SSLInputStream;
-Lcom/android/org/conscrypt/OpenSSLSocketImpl$SSLOutputStream;
-Lcom/android/org/conscrypt/OpenSSLSocketImplWrapper;
-Lcom/android/org/conscrypt/OpenSSLX509Certificate;
-Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory;
-Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory$1;
-Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory$2;
-Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory$Parser;
-Lcom/android/org/conscrypt/OpenSSLX509CertificateFactory$ParsingException;
-Lcom/android/org/conscrypt/OpenSSLX509CertPath;
-Lcom/android/org/conscrypt/OpenSSLX509CertPath$Encoding;
-Lcom/android/org/conscrypt/Platform;
-Lcom/android/org/conscrypt/Platform$NoPreloadHolder;
-Lcom/android/org/conscrypt/ServerSessionContext;
-Lcom/android/org/conscrypt/SSLParametersImpl;
-Lcom/android/org/conscrypt/SSLParametersImpl$AliasChooser;
-Lcom/android/org/conscrypt/SSLParametersImpl$PSKCallbacks;
-Lcom/android/org/conscrypt/TrustedCertificateIndex;
-Lcom/android/org/conscrypt/TrustedCertificateKeyStoreSpi;
-Lcom/android/org/conscrypt/TrustedCertificateStore;
-Lcom/android/org/conscrypt/TrustedCertificateStore$1;
-Lcom/android/org/conscrypt/TrustedCertificateStore$2;
-Lcom/android/org/conscrypt/TrustedCertificateStore$4;
-Lcom/android/org/conscrypt/TrustedCertificateStore$5;
-Lcom/android/org/conscrypt/TrustedCertificateStore$CertSelector;
-Lcom/android/org/conscrypt/TrustManagerFactoryImpl;
-Lcom/android/org/conscrypt/TrustManagerImpl;
-Lcom/android/org/conscrypt/TrustManagerImpl$ExtendedKeyUsagePKIXCertPathChecker;
-Lcom/android/org/conscrypt/TrustManagerImpl$TrustAnchorComparator;
-Lcom/android/org/conscrypt/util/ArrayUtils;
-Lcom/android/providers/settings/GenerationRegistry;
-Lcom/android/providers/settings/SettingsProvider;
-Lcom/android/providers/settings/SettingsProvider$1;
-Lcom/android/providers/settings/SettingsProvider$2;
-Lcom/android/providers/settings/SettingsProvider$SettingsRegistry;
-Lcom/android/providers/settings/SettingsProvider$SettingsRegistry$MyHandler;
-Lcom/android/providers/settings/SettingsProvider$SettingsRegistry$UpgradeController;
-Lcom/android/providers/settings/SettingsService;
-Lcom/android/providers/settings/SettingsService$MyShellCommand;
-Lcom/android/providers/settings/SettingsService$MyShellCommand$CommandVerb;
-Lcom/android/providers/settings/SettingsState;
-Lcom/android/providers/settings/SettingsState$1;
-Lcom/android/providers/settings/SettingsState$HistoricalOperation;
-Lcom/android/providers/settings/SettingsState$MyHandler;
-Lcom/android/providers/settings/SettingsState$Setting;
-Lcom/android/server/accessibility/AccessibilityManagerService;
-Lcom/android/server/accessibility/AccessibilityManagerService$1;
-Lcom/android/server/accessibility/AccessibilityManagerService$2;
-Lcom/android/server/accessibility/AccessibilityManagerService$AccessibilityContentObserver;
-Lcom/android/server/accessibility/AccessibilityManagerService$MainHandler;
-Lcom/android/server/accessibility/AccessibilityManagerService$SecurityPolicy;
-Lcom/android/server/accessibility/AccessibilityManagerService$Service;
-Lcom/android/server/accessibility/AccessibilityManagerService$UserState;
-Lcom/android/server/accessibility/AccessibilityManagerService$UserState$1;
-Lcom/android/server/accessibility/DisplayAdjustmentUtils;
-Lcom/android/server/accessibility/FingerprintGestureDispatcher$FingerprintGestureClient;
-Lcom/android/server/accessibility/KeyEventDispatcher$KeyEventFilter;
-Lcom/android/server/accounts/AccountAuthenticatorCache;
-Lcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;
-Lcom/android/server/accounts/AccountManagerService;
-Lcom/android/server/accounts/AccountManagerService$1;
-Lcom/android/server/accounts/AccountManagerService$2;
-Lcom/android/server/accounts/AccountManagerService$3;
-Lcom/android/server/accounts/AccountManagerService$4;
-Lcom/android/server/accounts/AccountManagerService$8;
-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$Session;
-Lcom/android/server/accounts/AccountManagerService$TestFeaturesSession;
-Lcom/android/server/accounts/AccountManagerService$UserAccounts;
-Lcom/android/server/accounts/AccountsDb;
-Lcom/android/server/accounts/AccountsDb$CeDatabaseHelper;
-Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;
-Lcom/android/server/accounts/IAccountAuthenticatorCache;
-Lcom/android/server/accounts/TokenCache;
-Lcom/android/server/accounts/TokenCache$Key;
-Lcom/android/server/accounts/TokenCache$TokenLruCache;
-Lcom/android/server/accounts/TokenCache$TokenLruCache$Evictor;
-Lcom/android/server/accounts/TokenCache$Value;
-Lcom/android/server/AlarmManagerService;
-Lcom/android/server/AlarmManagerService$1;
-Lcom/android/server/AlarmManagerService$2;
-Lcom/android/server/AlarmManagerService$Alarm;
-Lcom/android/server/AlarmManagerService$AlarmHandler;
-Lcom/android/server/AlarmManagerService$AlarmThread;
-Lcom/android/server/AlarmManagerService$Batch;
-Lcom/android/server/AlarmManagerService$BatchTimeOrder;
-Lcom/android/server/AlarmManagerService$BroadcastStats;
-Lcom/android/server/AlarmManagerService$ClockReceiver;
-Lcom/android/server/AlarmManagerService$Constants;
-Lcom/android/server/AlarmManagerService$DeliveryTracker;
-Lcom/android/server/AlarmManagerService$FilterStats;
-Lcom/android/server/AlarmManagerService$IncreasingTimeOrder;
-Lcom/android/server/AlarmManagerService$InFlight;
-Lcom/android/server/AlarmManagerService$InteractiveStateReceiver;
-Lcom/android/server/AlarmManagerService$LocalService;
-Lcom/android/server/AlarmManagerService$PriorityClass;
-Lcom/android/server/AlarmManagerService$UidObserver;
-Lcom/android/server/AlarmManagerService$UninstallReceiver;
-Lcom/android/server/am/ActiveServices;
-Lcom/android/server/am/ActiveServices$1;
-Lcom/android/server/am/ActiveServices$ServiceLookupResult;
-Lcom/android/server/am/ActiveServices$ServiceMap;
-Lcom/android/server/am/ActiveServices$ServiceRestarter;
-Lcom/android/server/am/ActivityManagerConstants;
-Lcom/android/server/am/ActivityManagerDebugConfig;
-Lcom/android/server/am/ActivityManagerService;
-Lcom/android/server/am/ActivityManagerService$1;
-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$2;
-Lcom/android/server/am/ActivityManagerService$20;
-Lcom/android/server/am/ActivityManagerService$21;
-Lcom/android/server/am/ActivityManagerService$22;
-Lcom/android/server/am/ActivityManagerService$24;
-Lcom/android/server/am/ActivityManagerService$3;
-Lcom/android/server/am/ActivityManagerService$30;
-Lcom/android/server/am/ActivityManagerService$4;
-Lcom/android/server/am/ActivityManagerService$5;
-Lcom/android/server/am/ActivityManagerService$6;
-Lcom/android/server/am/ActivityManagerService$AppDeathRecipient;
-Lcom/android/server/am/ActivityManagerService$AppTaskImpl;
-Lcom/android/server/am/ActivityManagerService$CpuBinder;
-Lcom/android/server/am/ActivityManagerService$DbBinder;
-Lcom/android/server/am/ActivityManagerService$FontScaleSettingObserver;
-Lcom/android/server/am/ActivityManagerService$ForegroundToken;
-Lcom/android/server/am/ActivityManagerService$GrantUri;
-Lcom/android/server/am/ActivityManagerService$GraphicsBinder;
-Lcom/android/server/am/ActivityManagerService$Identity;
-Lcom/android/server/am/ActivityManagerService$IntentFirewallInterface;
-Lcom/android/server/am/ActivityManagerService$KillHandler;
-Lcom/android/server/am/ActivityManagerService$Lifecycle;
-Lcom/android/server/am/ActivityManagerService$LocalService;
-Lcom/android/server/am/ActivityManagerService$MainHandler;
-Lcom/android/server/am/ActivityManagerService$MemBinder;
-Lcom/android/server/am/ActivityManagerService$PendingAssistExtras;
-Lcom/android/server/am/ActivityManagerService$PermissionController;
-Lcom/android/server/am/ActivityManagerService$PriorityState;
-Lcom/android/server/am/ActivityManagerService$ProcessChangeItem;
-Lcom/android/server/am/ActivityManagerService$ProcessInfoService;
-Lcom/android/server/am/ActivityManagerService$SleepTokenImpl;
-Lcom/android/server/am/ActivityManagerService$UidObserverRegistration;
-Lcom/android/server/am/ActivityManagerService$UiHandler;
-Lcom/android/server/am/ActivityManagerService$UpdateConfigurationResult;
-Lcom/android/server/am/ActivityMetricsLogger;
-Lcom/android/server/am/ActivityRecord;
-Lcom/android/server/am/ActivityRecord$Token;
-Lcom/android/server/am/ActivityResult;
-Lcom/android/server/am/ActivityStack;
-Lcom/android/server/am/ActivityStack$ActivityStackHandler;
-Lcom/android/server/am/ActivityStack$ActivityState;
-Lcom/android/server/am/ActivityStackSupervisor;
-Lcom/android/server/am/ActivityStackSupervisor$ActivityContainer;
-Lcom/android/server/am/ActivityStackSupervisor$ActivityDisplay;
-Lcom/android/server/am/ActivityStackSupervisor$ActivityStackSupervisorHandler;
-Lcom/android/server/am/ActivityStackSupervisor$FindTaskResult;
-Lcom/android/server/am/ActivityStarter;
-Lcom/android/server/am/ActivityStartInterceptor;
-Lcom/android/server/am/AppBindRecord;
-Lcom/android/server/am/AppErrors;
-Lcom/android/server/am/BatteryStatsService;
-Lcom/android/server/am/BatteryStatsService$1;
-Lcom/android/server/am/BatteryStatsService$BatteryStatsHandler;
-Lcom/android/server/am/BatteryStatsService$WakeupReasonThread;
-Lcom/android/server/am/BroadcastFilter;
-Lcom/android/server/am/BroadcastQueue;
-Lcom/android/server/am/BroadcastQueue$AppNotResponding;
-Lcom/android/server/am/BroadcastQueue$BroadcastHandler;
-Lcom/android/server/am/BroadcastRecord;
-Lcom/android/server/am/BroadcastStats;
-Lcom/android/server/am/BroadcastStats$1;
-Lcom/android/server/am/BroadcastStats$ActionEntry;
-Lcom/android/server/am/BroadcastStats$PackageEntry;
-Lcom/android/server/am/CompatModePackages;
-Lcom/android/server/am/CompatModePackages$CompatHandler;
-Lcom/android/server/am/ConfigurationContainer;
-Lcom/android/server/am/ConnectionRecord;
-Lcom/android/server/am/ContentProviderConnection;
-Lcom/android/server/am/ContentProviderRecord;
-Lcom/android/server/am/CoreSettingsObserver;
-Lcom/android/server/am/DumpHeapProvider;
-Lcom/android/server/am/EventLogTags;
-Lcom/android/server/am/InstrumentationReporter;
-Lcom/android/server/am/IntentBindRecord;
-Lcom/android/server/am/KeyguardController;
-Lcom/android/server/am/NativeCrashListener;
-Lcom/android/server/am/PendingIntentRecord;
-Lcom/android/server/am/PendingIntentRecord$Key;
-Lcom/android/server/am/ProcessList;
-Lcom/android/server/am/ProcessRecord;
-Lcom/android/server/am/ProcessStatsService;
-Lcom/android/server/am/ProcessStatsService$1;
-Lcom/android/server/am/ProcessStatsService$2;
-Lcom/android/server/am/ProcessStatsService$3;
-Lcom/android/server/am/ProviderMap;
-Lcom/android/server/am/ReceiverList;
-Lcom/android/server/am/RecentTasks;
-Lcom/android/server/am/RecentTasks$1;
-Lcom/android/server/am/ServiceRecord;
-Lcom/android/server/am/ServiceRecord$1;
-Lcom/android/server/am/ServiceRecord$2;
-Lcom/android/server/am/ServiceRecord$3;
-Lcom/android/server/am/ServiceRecord$StartItem;
-Lcom/android/server/am/TaskChangeNotificationController;
-Lcom/android/server/am/TaskChangeNotificationController$MainHandler;
-Lcom/android/server/am/TaskChangeNotificationController$TaskStackConsumer;
-Lcom/android/server/am/TaskPersister;
-Lcom/android/server/am/TaskPersister$1;
-Lcom/android/server/am/TaskPersister$ImageWriteQueueItem;
-Lcom/android/server/am/TaskPersister$LazyTaskWriterThread;
-Lcom/android/server/am/TaskPersister$TaskWriteQueueItem;
-Lcom/android/server/am/TaskPersister$WriteQueueItem;
-Lcom/android/server/am/TaskRecord;
-Lcom/android/server/am/UidRecord;
-Lcom/android/server/am/UidRecord$ChangeItem;
-Lcom/android/server/am/UriPermission;
-Lcom/android/server/am/UriPermissionOwner;
-Lcom/android/server/am/UriPermissionOwner$ExternalToken;
-Lcom/android/server/am/UserController;
-Lcom/android/server/am/UserController$Injector;
-Lcom/android/server/am/UserState;
-Lcom/android/server/AnyMotionDetector;
-Lcom/android/server/AnyMotionDetector$1;
-Lcom/android/server/AnyMotionDetector$2;
-Lcom/android/server/AnyMotionDetector$3;
-Lcom/android/server/AnyMotionDetector$4;
-Lcom/android/server/AnyMotionDetector$DeviceIdleCallback;
-Lcom/android/server/AnyMotionDetector$RunningSignalStats;
-Lcom/android/server/AnyMotionDetector$Vector3;
-Lcom/android/server/AppOpsService;
-Lcom/android/server/AppOpsService$1;
-Lcom/android/server/AppOpsService$1$1;
-Lcom/android/server/AppOpsService$2;
-Lcom/android/server/AppOpsService$3;
-Lcom/android/server/AppOpsService$Callback;
-Lcom/android/server/AppOpsService$ClientRestrictionState;
-Lcom/android/server/AppOpsService$ClientState;
-Lcom/android/server/AppOpsService$Op;
-Lcom/android/server/AppOpsService$Ops;
-Lcom/android/server/AppOpsService$Restriction;
-Lcom/android/server/AppOpsService$UidState;
-Lcom/android/server/appwidget/AppWidgetService;
-Lcom/android/server/appwidget/AppWidgetServiceImpl;
-Lcom/android/server/appwidget/AppWidgetServiceImpl$1;
-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/AppWidgetBackupBridge;
-Lcom/android/server/AttributeCache;
-Lcom/android/server/AttributeCache$Entry;
-Lcom/android/server/AttributeCache$Package;
-Lcom/android/server/audio/AudioService;
-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$AudioHandler;
-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$ForceControlStreamClient;
-Lcom/android/server/audio/AudioService$Lifecycle;
-Lcom/android/server/audio/AudioService$MyDisplayStatusCallback;
-Lcom/android/server/audio/AudioService$SetModeDeathHandler;
-Lcom/android/server/audio/AudioService$SettingsObserver;
-Lcom/android/server/audio/AudioService$SoundPoolCallback;
-Lcom/android/server/audio/AudioService$SoundPoolListenerThread;
-Lcom/android/server/audio/AudioService$VolumeController;
-Lcom/android/server/audio/AudioService$VolumeStreamState;
-Lcom/android/server/audio/FocusRequester;
-Lcom/android/server/audio/MediaFocusControl;
-Lcom/android/server/audio/MediaFocusControl$AudioFocusDeathHandler;
-Lcom/android/server/audio/PlaybackActivityMonitor;
-Lcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;
-Lcom/android/server/audio/RecordingActivityMonitor;
-Lcom/android/server/audio/RecordingActivityMonitor$RecMonitorClient;
-Lcom/android/server/autofill/AutoFillManagerService;
-Lcom/android/server/autofill/AutoFillManagerService$1;
-Lcom/android/server/autofill/AutoFillManagerService$AutoFillManagerServiceStub;
-Lcom/android/server/autofill/AutoFillManagerServiceImpl;
-Lcom/android/server/autofill/AutoFillManagerService$SettingsObserver;
-Lcom/android/server/BackgroundDexOptJobService;
-Lcom/android/server/BackgroundDexOptJobService$1;
-Lcom/android/server/backup/AccountSyncSettingsBackupHelper;
-Lcom/android/server/backup/BackupManagerService;
-Lcom/android/server/backup/BackupManagerService$1;
-Lcom/android/server/backup/BackupManagerService$2;
-Lcom/android/server/backup/BackupManagerService$3;
-Lcom/android/server/backup/BackupManagerService$4;
-Lcom/android/server/backup/BackupManagerService$6;
-Lcom/android/server/backup/BackupManagerService$BackupHandler;
-Lcom/android/server/backup/BackupManagerService$BackupRequest;
-Lcom/android/server/backup/BackupManagerService$FullBackupEntry;
-Lcom/android/server/backup/BackupManagerService$Lifecycle;
-Lcom/android/server/backup/BackupManagerService$ProvisionedObserver;
-Lcom/android/server/backup/BackupManagerService$RunBackupReceiver;
-Lcom/android/server/backup/BackupManagerService$RunInitializeReceiver;
-Lcom/android/server/backup/FullBackupJob;
-Lcom/android/server/backup/KeyValueBackupJob;
-Lcom/android/server/backup/PackageManagerBackupAgent;
-Lcom/android/server/backup/Trampoline;
-Lcom/android/server/backup/TransportManager;
-Lcom/android/server/backup/TransportManager$TransportBoundListener;
-Lcom/android/server/backup/TransportManager$TransportConnection;
-Lcom/android/server/BatteryService;
-Lcom/android/server/BatteryService$2;
-Lcom/android/server/BatteryService$9;
-Lcom/android/server/BatteryService$BatteryListener;
-Lcom/android/server/BatteryService$BinderService;
-Lcom/android/server/BatteryService$Led;
-Lcom/android/server/BatteryService$LocalService;
-Lcom/android/server/BluetoothManagerService;
-Lcom/android/server/BluetoothManagerService$1;
-Lcom/android/server/BluetoothManagerService$2;
-Lcom/android/server/BluetoothManagerService$3;
-Lcom/android/server/BluetoothManagerService$4;
-Lcom/android/server/BluetoothManagerService$ActiveLog;
-Lcom/android/server/BluetoothManagerService$BluetoothHandler;
-Lcom/android/server/BluetoothManagerService$BluetoothServiceConnection;
-Lcom/android/server/BluetoothManagerService$ProfileServiceConnections;
-Lcom/android/server/BluetoothService;
-Lcom/android/server/BootReceiver;
-Lcom/android/server/BootReceiver$1;
-Lcom/android/server/camera/CameraService;
-Lcom/android/server/camera/CameraService$1;
-Lcom/android/server/camera/CameraService$2;
-Lcom/android/server/CertBlacklister;
-Lcom/android/server/CertBlacklister$BlacklistObserver;
-Lcom/android/server/clipboard/ClipboardService;
-Lcom/android/server/clipboard/ClipboardService$ClipboardImpl;
-Lcom/android/server/clipboard/ClipboardService$ListenerInfo;
-Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;
-Lcom/android/server/CommonTimeManagementService;
-Lcom/android/server/CommonTimeManagementService$1;
-Lcom/android/server/CommonTimeManagementService$2;
-Lcom/android/server/CommonTimeManagementService$3;
-Lcom/android/server/CommonTimeManagementService$4;
-Lcom/android/server/CommonTimeManagementService$5;
-Lcom/android/server/CommonTimeManagementService$InterfaceScoreRule;
-Lcom/android/server/connectivity/DataConnectionStats;
-Lcom/android/server/connectivity/DataConnectionStats$1;
-Lcom/android/server/connectivity/IpConnectivityMetrics;
-Lcom/android/server/connectivity/IpConnectivityMetrics$Impl;
-Lcom/android/server/connectivity/KeepalivePacketData;
-Lcom/android/server/connectivity/KeepalivePacketData$InvalidPacketException;
-Lcom/android/server/connectivity/KeepaliveTracker;
-Lcom/android/server/connectivity/LingerMonitor;
-Lcom/android/server/connectivity/MetricsLoggerService;
-Lcom/android/server/connectivity/MetricsLoggerService$MetricsLoggerImpl;
-Lcom/android/server/connectivity/MockableSystemProperties;
-Lcom/android/server/connectivity/Nat464Xlat;
-Lcom/android/server/connectivity/NetdEventListenerService;
-Lcom/android/server/connectivity/NetdEventListenerService$1;
-Lcom/android/server/connectivity/NetdEventListenerService$DnsEventBatch;
-Lcom/android/server/connectivity/NetworkAgentInfo;
-Lcom/android/server/connectivity/NetworkAgentInfo$LingerTimer;
-Lcom/android/server/connectivity/NetworkMonitor;
-Lcom/android/server/connectivity/NetworkMonitor$1ProbeThread;
-Lcom/android/server/connectivity/NetworkMonitor$CaptivePortalProbeResult;
-Lcom/android/server/connectivity/NetworkMonitor$CaptivePortalState;
-Lcom/android/server/connectivity/NetworkMonitor$DefaultState;
-Lcom/android/server/connectivity/NetworkMonitor$EvaluatingState;
-Lcom/android/server/connectivity/NetworkMonitor$EvaluationResult;
-Lcom/android/server/connectivity/NetworkMonitor$MaybeNotifyState;
-Lcom/android/server/connectivity/NetworkMonitor$ValidatedState;
-Lcom/android/server/connectivity/NetworkMonitor$ValidationStage;
-Lcom/android/server/connectivity/NetworkNotificationManager;
-Lcom/android/server/connectivity/PacManager;
-Lcom/android/server/connectivity/PacManager$1;
-Lcom/android/server/connectivity/PacManager$PacRefreshIntentReceiver;
-Lcom/android/server/connectivity/PermissionMonitor;
-Lcom/android/server/connectivity/PermissionMonitor$1;
-Lcom/android/server/ConnectivityService;
-Lcom/android/server/ConnectivityService$1;
-Lcom/android/server/ConnectivityService$2;
-Lcom/android/server/ConnectivityService$3;
-Lcom/android/server/ConnectivityService$InternalHandler;
-Lcom/android/server/ConnectivityService$LegacyTypeTracker;
-Lcom/android/server/ConnectivityService$NetworkFactoryInfo;
-Lcom/android/server/ConnectivityService$NetworkRequestInfo;
-Lcom/android/server/ConnectivityService$NetworkStateTrackerHandler;
-Lcom/android/server/ConnectivityService$ReapUnvalidatedNetworks;
-Lcom/android/server/ConnectivityService$SettingsObserver;
-Lcom/android/server/ConnectivityService$UnneededFor;
-Lcom/android/server/ConnectivityService$ValidationLog;
-Lcom/android/server/connectivity/Tethering;
-Lcom/android/server/connectivity/tethering/IControlsTethering;
-Lcom/android/server/connectivity/tethering/IPv6TetheringCoordinator;
-Lcom/android/server/connectivity/tethering/IPv6TetheringInterfaceServices;
-Lcom/android/server/connectivity/Tethering$StateReceiver;
-Lcom/android/server/connectivity/tethering/TetheringConfiguration;
-Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine;
-Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine$InitialState;
-Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine$TetheredState;
-Lcom/android/server/connectivity/tethering/TetherInterfaceStateMachine$UnavailableState;
-Lcom/android/server/connectivity/Tethering$TetherMasterSM;
-Lcom/android/server/connectivity/Tethering$TetherMasterSM$ErrorState;
-Lcom/android/server/connectivity/Tethering$TetherMasterSM$InitialState;
-Lcom/android/server/connectivity/Tethering$TetherMasterSM$SetDnsForwardersErrorState;
-Lcom/android/server/connectivity/Tethering$TetherMasterSM$SetIpForwardingDisabledErrorState;
-Lcom/android/server/connectivity/Tethering$TetherMasterSM$SetIpForwardingEnabledErrorState;
-Lcom/android/server/connectivity/Tethering$TetherMasterSM$SimChangeListener;
-Lcom/android/server/connectivity/Tethering$TetherMasterSM$StartTetheringErrorState;
-Lcom/android/server/connectivity/Tethering$TetherMasterSM$StopTetheringErrorState;
-Lcom/android/server/connectivity/Tethering$TetherMasterSM$TetherMasterUtilState;
-Lcom/android/server/connectivity/Tethering$TetherMasterSM$TetherModeAliveState;
-Lcom/android/server/connectivity/Tethering$TetherState;
-Lcom/android/server/connectivity/tethering/UpstreamNetworkMonitor;
-Lcom/android/server/connectivity/Vpn;
-Lcom/android/server/connectivity/Vpn$1;
-Lcom/android/server/connectivity/Vpn$2;
-Lcom/android/server/ConsumerIrService;
-Lcom/android/server/content/ContentService;
-Lcom/android/server/content/ContentService$1;
-Lcom/android/server/content/ContentService$3;
-Lcom/android/server/content/ContentService$Lifecycle;
-Lcom/android/server/content/ContentService$ObserverCall;
-Lcom/android/server/content/ContentService$ObserverNode;
-Lcom/android/server/content/ContentService$ObserverNode$ObserverEntry;
-Lcom/android/server/content/SyncJobService;
-Lcom/android/server/content/SyncManager;
-Lcom/android/server/content/SyncManager$1;
-Lcom/android/server/content/SyncManager$10;
-Lcom/android/server/content/SyncManager$11;
-Lcom/android/server/content/SyncManager$13;
-Lcom/android/server/content/SyncManager$2;
-Lcom/android/server/content/SyncManager$3;
-Lcom/android/server/content/SyncManager$4;
-Lcom/android/server/content/SyncManager$5;
-Lcom/android/server/content/SyncManager$6;
-Lcom/android/server/content/SyncManager$7;
-Lcom/android/server/content/SyncManager$8;
-Lcom/android/server/content/SyncManager$9;
-Lcom/android/server/content/SyncManager$ActiveSyncContext;
-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/SyncOperation;
-Lcom/android/server/content/SyncStorageEngine;
-Lcom/android/server/content/SyncStorageEngine$AccountInfo;
-Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;
-Lcom/android/server/content/SyncStorageEngine$DayStats;
-Lcom/android/server/content/SyncStorageEngine$EndPoint;
-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/ContextHubSystemService;
-Lcom/android/server/CountryDetectorService;
-Lcom/android/server/CountryDetectorService$1;
-Lcom/android/server/CountryDetectorService$1$1;
-Lcom/android/server/CountryDetectorService$2;
-Lcom/android/server/CountryDetectorService$Receiver;
-Lcom/android/server/coverage/CoverageService;
-Lcom/android/server/DeviceIdleController;
-Lcom/android/server/DeviceIdleController$1;
-Lcom/android/server/DeviceIdleController$2;
-Lcom/android/server/DeviceIdleController$3;
-Lcom/android/server/DeviceIdleController$4;
-Lcom/android/server/DeviceIdleController$5;
-Lcom/android/server/DeviceIdleController$6;
-Lcom/android/server/DeviceIdleController$7;
-Lcom/android/server/DeviceIdleController$8;
-Lcom/android/server/DeviceIdleController$BinderService;
-Lcom/android/server/DeviceIdleController$Constants;
-Lcom/android/server/DeviceIdleController$LocalService;
-Lcom/android/server/DeviceIdleController$MotionListener;
-Lcom/android/server/DeviceIdleController$MyHandler;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService$1;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService$2;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService$3;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService$4;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService$4$1;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService$9;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService$ActiveAdmin;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyData;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService$MonitoringCertNotificationTask;
-Lcom/android/server/devicepolicy/DevicePolicyManagerService$SetupContentObserver;
-Lcom/android/server/devicepolicy/Owners;
-Lcom/android/server/devicepolicy/Owners$DeviceOwnerReadWriter;
-Lcom/android/server/devicepolicy/Owners$FileReadWriter;
-Lcom/android/server/devicepolicy/Owners$OwnerInfo;
-Lcom/android/server/devicepolicy/Owners$ProfileOwnerReadWriter;
-Lcom/android/server/devicepolicy/SecurityLogMonitor;
-Lcom/android/server/DiskStatsService;
-Lcom/android/server/display/AutomaticBrightnessController;
-Lcom/android/server/display/AutomaticBrightnessController$1;
-Lcom/android/server/display/AutomaticBrightnessController$2;
-Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;
-Lcom/android/server/display/AutomaticBrightnessController$AutomaticBrightnessHandler;
-Lcom/android/server/display/AutomaticBrightnessController$Callbacks;
-Lcom/android/server/display/ColorFade;
-Lcom/android/server/display/ColorFade$NaturalSurfaceLayout;
-Lcom/android/server/display/DisplayAdapter;
-Lcom/android/server/display/DisplayAdapter$1;
-Lcom/android/server/display/DisplayAdapter$2;
-Lcom/android/server/display/DisplayAdapter$Listener;
-Lcom/android/server/display/DisplayBlanker;
-Lcom/android/server/display/DisplayDevice;
-Lcom/android/server/display/DisplayDeviceInfo;
-Lcom/android/server/display/DisplayManagerService;
-Lcom/android/server/display/DisplayManagerService$BinderService;
-Lcom/android/server/display/DisplayManagerService$CallbackRecord;
-Lcom/android/server/display/DisplayManagerService$DisplayAdapterListener;
-Lcom/android/server/display/DisplayManagerService$DisplayManagerHandler;
-Lcom/android/server/display/DisplayManagerService$LocalService;
-Lcom/android/server/display/DisplayManagerService$LocalService$1;
-Lcom/android/server/display/DisplayManagerService$SyncRoot;
-Lcom/android/server/display/DisplayPowerController;
-Lcom/android/server/display/DisplayPowerController$1;
-Lcom/android/server/display/DisplayPowerController$2;
-Lcom/android/server/display/DisplayPowerController$3;
-Lcom/android/server/display/DisplayPowerController$4;
-Lcom/android/server/display/DisplayPowerController$5;
-Lcom/android/server/display/DisplayPowerController$6;
-Lcom/android/server/display/DisplayPowerController$7;
-Lcom/android/server/display/DisplayPowerController$DisplayControllerHandler;
-Lcom/android/server/display/DisplayPowerController$ScreenOnUnblocker;
-Lcom/android/server/display/DisplayPowerState;
-Lcom/android/server/display/DisplayPowerState$1;
-Lcom/android/server/display/DisplayPowerState$2;
-Lcom/android/server/display/DisplayPowerState$3;
-Lcom/android/server/display/DisplayPowerState$4;
-Lcom/android/server/display/DisplayPowerState$PhotonicModulator;
-Lcom/android/server/display/DisplayTransformManager;
-Lcom/android/server/display/HysteresisLevels;
-Lcom/android/server/display/LocalDisplayAdapter;
-Lcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;
-Lcom/android/server/display/LocalDisplayAdapter$HotplugDisplayEventReceiver;
-Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;
-Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;
-Lcom/android/server/display/LogicalDisplay;
-Lcom/android/server/display/NightDisplayService;
-Lcom/android/server/display/NightDisplayService$1;
-Lcom/android/server/display/NightDisplayService$3;
-Lcom/android/server/display/NightDisplayService$4;
-Lcom/android/server/display/NightDisplayService$ColorMatrixEvaluator;
-Lcom/android/server/display/OverlayDisplayAdapter;
-Lcom/android/server/display/OverlayDisplayAdapter$1;
-Lcom/android/server/display/OverlayDisplayAdapter$1$1;
-Lcom/android/server/display/PersistentDataStore;
-Lcom/android/server/display/PersistentDataStore$DisplayState;
-Lcom/android/server/display/RampAnimator;
-Lcom/android/server/display/RampAnimator$1;
-Lcom/android/server/display/RampAnimator$Listener;
-Lcom/android/server/DisplayThread;
-Lcom/android/server/display/VirtualDisplayAdapter;
-Lcom/android/server/DockObserver;
-Lcom/android/server/DockObserver$1;
-Lcom/android/server/DockObserver$2;
-Lcom/android/server/DockObserver$BinderService;
-Lcom/android/server/dreams/DreamController;
-Lcom/android/server/dreams/DreamController$1;
-Lcom/android/server/dreams/DreamController$2;
-Lcom/android/server/dreams/DreamController$3;
-Lcom/android/server/dreams/DreamController$DreamRecord;
-Lcom/android/server/dreams/DreamController$DreamRecord$1;
-Lcom/android/server/dreams/DreamController$DreamRecord$3;
-Lcom/android/server/dreams/DreamController$Listener;
-Lcom/android/server/dreams/DreamManagerService;
-Lcom/android/server/dreams/DreamManagerService$1;
-Lcom/android/server/dreams/DreamManagerService$2;
-Lcom/android/server/dreams/DreamManagerService$3;
-Lcom/android/server/dreams/DreamManagerService$4;
-Lcom/android/server/dreams/DreamManagerService$6;
-Lcom/android/server/dreams/DreamManagerService$BinderService;
-Lcom/android/server/dreams/DreamManagerService$DreamHandler;
-Lcom/android/server/dreams/DreamManagerService$LocalService;
-Lcom/android/server/DropBoxManagerService;
-Lcom/android/server/DropBoxManagerService$1;
-Lcom/android/server/DropBoxManagerService$1$1;
-Lcom/android/server/DropBoxManagerService$2;
-Lcom/android/server/DropBoxManagerService$3;
-Lcom/android/server/DropBoxManagerService$4;
-Lcom/android/server/DropBoxManagerService$EntryFile;
-Lcom/android/server/DropBoxManagerService$FileList;
-Lcom/android/server/emergency/EmergencyAffordanceService;
-Lcom/android/server/emergency/EmergencyAffordanceService$1;
-Lcom/android/server/emergency/EmergencyAffordanceService$2;
-Lcom/android/server/emergency/EmergencyAffordanceService$3;
-Lcom/android/server/emergency/EmergencyAffordanceService$MyHandler;
-Lcom/android/server/EntropyMixer;
-Lcom/android/server/EntropyMixer$1;
-Lcom/android/server/EntropyMixer$2;
-Lcom/android/server/ethernet/EthernetConfigStore;
-Lcom/android/server/ethernet/EthernetNetworkFactory;
-Lcom/android/server/ethernet/EthernetNetworkFactory$InterfaceObserver;
-Lcom/android/server/ethernet/EthernetNetworkFactory$LocalNetworkFactory;
-Lcom/android/server/ethernet/EthernetService;
-Lcom/android/server/ethernet/EthernetServiceImpl;
-Lcom/android/server/EventLogTags;
-Lcom/android/server/FgThread;
-Lcom/android/server/fingerprint/FingerprintService;
-Lcom/android/server/fingerprint/FingerprintService$1;
-Lcom/android/server/fingerprint/FingerprintService$10;
-Lcom/android/server/fingerprint/FingerprintService$2;
-Lcom/android/server/fingerprint/FingerprintService$3;
-Lcom/android/server/fingerprint/FingerprintService$4;
-Lcom/android/server/fingerprint/FingerprintService$5;
-Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceLockoutResetMonitor;
-Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceLockoutResetMonitor$1;
-Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper;
-Lcom/android/server/fingerprint/FingerprintService$FingerprintServiceWrapper$9;
-Lcom/android/server/fingerprint/FingerprintService$PerformanceStats;
-Lcom/android/server/fingerprint/FingerprintsUserState;
-Lcom/android/server/fingerprint/FingerprintsUserState$1;
-Lcom/android/server/fingerprint/FingerprintUtils;
-Lcom/android/server/firewall/AndFilter;
-Lcom/android/server/firewall/AndFilter$1;
-Lcom/android/server/firewall/CategoryFilter;
-Lcom/android/server/firewall/CategoryFilter$1;
-Lcom/android/server/firewall/Filter;
-Lcom/android/server/firewall/FilterFactory;
-Lcom/android/server/firewall/FilterList;
-Lcom/android/server/firewall/IntentFirewall;
-Lcom/android/server/firewall/IntentFirewall$AMSInterface;
-Lcom/android/server/firewall/IntentFirewall$FirewallHandler;
-Lcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;
-Lcom/android/server/firewall/IntentFirewall$Rule;
-Lcom/android/server/firewall/IntentFirewall$RuleObserver;
-Lcom/android/server/firewall/NotFilter;
-Lcom/android/server/firewall/NotFilter$1;
-Lcom/android/server/firewall/OrFilter;
-Lcom/android/server/firewall/OrFilter$1;
-Lcom/android/server/firewall/PortFilter;
-Lcom/android/server/firewall/PortFilter$1;
-Lcom/android/server/firewall/SenderFilter;
-Lcom/android/server/firewall/SenderFilter$1;
-Lcom/android/server/firewall/SenderFilter$2;
-Lcom/android/server/firewall/SenderFilter$3;
-Lcom/android/server/firewall/SenderFilter$4;
-Lcom/android/server/firewall/SenderFilter$5;
-Lcom/android/server/firewall/SenderPackageFilter;
-Lcom/android/server/firewall/SenderPackageFilter$1;
-Lcom/android/server/firewall/SenderPermissionFilter;
-Lcom/android/server/firewall/SenderPermissionFilter$1;
-Lcom/android/server/firewall/StringFilter;
-Lcom/android/server/firewall/StringFilter$1;
-Lcom/android/server/firewall/StringFilter$10;
-Lcom/android/server/firewall/StringFilter$2;
-Lcom/android/server/firewall/StringFilter$3;
-Lcom/android/server/firewall/StringFilter$4;
-Lcom/android/server/firewall/StringFilter$5;
-Lcom/android/server/firewall/StringFilter$6;
-Lcom/android/server/firewall/StringFilter$7;
-Lcom/android/server/firewall/StringFilter$8;
-Lcom/android/server/firewall/StringFilter$9;
-Lcom/android/server/firewall/StringFilter$ValueProvider;
-Lcom/android/server/GestureLauncherService;
-Lcom/android/server/GestureLauncherService$1;
-Lcom/android/server/GestureLauncherService$2;
-Lcom/android/server/GestureLauncherService$GestureEventListener;
-Lcom/android/server/GraphicsStatsService;
-Lcom/android/server/GraphicsStatsService$ActiveBuffer;
-Lcom/android/server/GraphicsStatsService$HistoricalData;
-Lcom/android/server/HardwarePropertiesManagerService;
-Lcom/android/server/hdmi/HdmiCecController;
-Lcom/android/server/INativeDaemonConnectorCallbacks;
-Lcom/android/server/input/InputApplicationHandle;
-Lcom/android/server/input/InputManagerService;
-Lcom/android/server/input/InputManagerService$1;
-Lcom/android/server/input/InputManagerService$10;
-Lcom/android/server/input/InputManagerService$11;
-Lcom/android/server/input/InputManagerService$12;
-Lcom/android/server/input/InputManagerService$2;
-Lcom/android/server/input/InputManagerService$3;
-Lcom/android/server/input/InputManagerService$5;
-Lcom/android/server/input/InputManagerService$InputDevicesChangedListenerRecord;
-Lcom/android/server/input/InputManagerService$InputManagerHandler;
-Lcom/android/server/input/InputManagerService$KeyboardLayoutDescriptor;
-Lcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;
-Lcom/android/server/input/InputManagerService$LocalService;
-Lcom/android/server/input/InputManagerService$WindowManagerCallbacks;
-Lcom/android/server/input/InputManagerService$WiredAccessoryCallbacks;
-Lcom/android/server/input/InputWindowHandle;
-Lcom/android/server/InputMethodManagerService;
-Lcom/android/server/InputMethodManagerService$1;
-Lcom/android/server/InputMethodManagerService$2;
-Lcom/android/server/InputMethodManagerService$ClientState;
-Lcom/android/server/InputMethodManagerService$HardKeyboardListener;
-Lcom/android/server/InputMethodManagerService$ImmsBroadcastReceiver;
-Lcom/android/server/InputMethodManagerService$InputMethodFileManager;
-Lcom/android/server/InputMethodManagerService$Lifecycle;
-Lcom/android/server/InputMethodManagerService$LocalServiceImpl;
-Lcom/android/server/InputMethodManagerService$MethodCallback;
-Lcom/android/server/InputMethodManagerService$MyPackageMonitor;
-Lcom/android/server/InputMethodManagerService$SessionState;
-Lcom/android/server/InputMethodManagerService$SettingsObserver;
-Lcom/android/server/input/PersistentDataStore;
-Lcom/android/server/input/PersistentDataStore$InputDeviceState;
-Lcom/android/server/IntentResolver;
-Lcom/android/server/IntentResolver$1;
-Lcom/android/server/IntentResolver$IteratorWrapper;
-Lcom/android/server/IoThread;
-Lcom/android/server/job/controllers/AppIdleController;
-Lcom/android/server/job/controllers/AppIdleController$AppIdleStateChangeListener;
-Lcom/android/server/job/controllers/AppIdleController$GlobalUpdateFunc;
-Lcom/android/server/job/controllers/AppIdleController$PackageUpdateFunc;
-Lcom/android/server/job/controllers/BatteryController;
-Lcom/android/server/job/controllers/BatteryController$ChargingTracker;
-Lcom/android/server/job/controllers/ConnectivityController;
-Lcom/android/server/job/controllers/ConnectivityController$1;
-Lcom/android/server/job/controllers/ConnectivityController$2;
-Lcom/android/server/job/controllers/ContentObserverController;
-Lcom/android/server/job/controllers/ContentObserverController$JobInstance;
-Lcom/android/server/job/controllers/ContentObserverController$ObserverInstance;
-Lcom/android/server/job/controllers/ContentObserverController$TriggerRunnable;
-Lcom/android/server/job/controllers/DeviceIdleJobsController;
-Lcom/android/server/job/controllers/DeviceIdleJobsController$1;
-Lcom/android/server/job/controllers/DeviceIdleJobsController$2;
-Lcom/android/server/job/controllers/IdleController;
-Lcom/android/server/job/controllers/IdleController$IdlenessTracker;
-Lcom/android/server/job/controllers/JobStatus;
-Lcom/android/server/job/controllers/StateController;
-Lcom/android/server/job/controllers/TimeController;
-Lcom/android/server/job/controllers/TimeController$1;
-Lcom/android/server/job/controllers/TimeController$2;
-Lcom/android/server/job/JobCompletedListener;
-Lcom/android/server/job/JobPackageTracker;
-Lcom/android/server/job/JobPackageTracker$DataSet;
-Lcom/android/server/job/JobPackageTracker$PackageEntry;
-Lcom/android/server/job/JobSchedulerInternal;
-Lcom/android/server/job/JobSchedulerService;
-Lcom/android/server/job/JobSchedulerService$1;
-Lcom/android/server/job/JobSchedulerService$2;
-Lcom/android/server/job/JobSchedulerService$3;
-Lcom/android/server/job/JobSchedulerService$Constants;
-Lcom/android/server/job/JobSchedulerService$JobHandler;
-Lcom/android/server/job/JobSchedulerService$JobHandler$MaybeReadyJobQueueFunctor;
-Lcom/android/server/job/JobSchedulerService$JobHandler$ReadyJobQueueFunctor;
-Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;
-Lcom/android/server/job/JobSchedulerService$LocalService;
-Lcom/android/server/job/JobSchedulerService$LocalService$1;
-Lcom/android/server/job/JobServiceContext;
-Lcom/android/server/job/JobServiceContext$JobServiceHandler;
-Lcom/android/server/job/JobStore;
-Lcom/android/server/job/JobStore$JobSet;
-Lcom/android/server/job/JobStore$JobStatusFunctor;
-Lcom/android/server/job/JobStore$ReadJobMapFromDiskRunnable;
-Lcom/android/server/job/JobStore$WriteJobsMapToDiskRunnable;
-Lcom/android/server/job/JobStore$WriteJobsMapToDiskRunnable$1;
-Lcom/android/server/job/StateChangedListener;
-Lcom/android/server/lights/Light;
-Lcom/android/server/lights/LightsManager;
-Lcom/android/server/lights/LightsService;
-Lcom/android/server/lights/LightsService$1;
-Lcom/android/server/lights/LightsService$2;
-Lcom/android/server/lights/LightsService$LightImpl;
-Lcom/android/server/LocalServices;
-Lcom/android/server/location/ActivityRecognitionProxy;
-Lcom/android/server/location/ActivityRecognitionProxy$1;
-Lcom/android/server/location/ComprehensiveCountryDetector;
-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/ContextHubService;
-Lcom/android/server/location/CountryDetectorBase;
-Lcom/android/server/location/FlpHardwareProvider;
-Lcom/android/server/location/GeocoderProxy;
-Lcom/android/server/location/GeofenceManager;
-Lcom/android/server/location/GeofenceManager$GeofenceHandler;
-Lcom/android/server/location/GeofenceProxy;
-Lcom/android/server/location/GeofenceProxy$1;
-Lcom/android/server/location/GeofenceProxy$2;
-Lcom/android/server/location/GeofenceProxy$3;
-Lcom/android/server/location/GnssLocationProvider;
-Lcom/android/server/location/GnssLocationProvider$1;
-Lcom/android/server/location/GnssLocationProvider$10;
-Lcom/android/server/location/GnssLocationProvider$11;
-Lcom/android/server/location/GnssLocationProvider$12;
-Lcom/android/server/location/GnssLocationProvider$14;
-Lcom/android/server/location/GnssLocationProvider$2;
-Lcom/android/server/location/GnssLocationProvider$3;
-Lcom/android/server/location/GnssLocationProvider$4;
-Lcom/android/server/location/GnssLocationProvider$5;
-Lcom/android/server/location/GnssLocationProvider$6;
-Lcom/android/server/location/GnssLocationProvider$7;
-Lcom/android/server/location/GnssLocationProvider$8;
-Lcom/android/server/location/GnssLocationProvider$9;
-Lcom/android/server/location/GnssLocationProvider$BackOff;
-Lcom/android/server/location/GnssLocationProvider$GnssSystemInfoProvider;
-Lcom/android/server/location/GnssLocationProvider$GpsRequest;
-Lcom/android/server/location/GnssLocationProvider$NetworkLocationListener;
-Lcom/android/server/location/GnssLocationProvider$ProviderHandler;
-Lcom/android/server/location/GnssLocationProvider$SetCarrierProperty;
-Lcom/android/server/location/GnssMeasurementsProvider;
-Lcom/android/server/location/GnssNavigationMessageProvider;
-Lcom/android/server/location/GnssNavigationMessageProvider$StatusChangedOperation;
-Lcom/android/server/location/GnssStatusListenerHelper;
-Lcom/android/server/location/GnssStatusListenerHelper$1;
-Lcom/android/server/location/GnssStatusListenerHelper$2;
-Lcom/android/server/location/GnssStatusListenerHelper$3;
-Lcom/android/server/location/GnssStatusListenerHelper$4;
-Lcom/android/server/location/GnssStatusListenerHelper$5;
-Lcom/android/server/location/GnssStatusListenerHelper$Operation;
-Lcom/android/server/location/LocationBasedCountryDetector;
-Lcom/android/server/location/LocationBasedCountryDetector$1;
-Lcom/android/server/location/LocationBasedCountryDetector$2;
-Lcom/android/server/location/LocationBasedCountryDetector$3;
-Lcom/android/server/location/LocationBlacklist;
-Lcom/android/server/location/LocationFudger;
-Lcom/android/server/location/LocationFudger$1;
-Lcom/android/server/location/LocationProviderInterface;
-Lcom/android/server/location/LocationProviderProxy;
-Lcom/android/server/location/LocationProviderProxy$1;
-Lcom/android/server/location/LocationRequestStatistics;
-Lcom/android/server/location/LocationRequestStatistics$PackageProviderKey;
-Lcom/android/server/location/LocationRequestStatistics$PackageStatistics;
-Lcom/android/server/LocationManagerService;
-Lcom/android/server/LocationManagerService$1;
-Lcom/android/server/LocationManagerService$2;
-Lcom/android/server/LocationManagerService$3;
-Lcom/android/server/LocationManagerService$4;
-Lcom/android/server/LocationManagerService$5;
-Lcom/android/server/LocationManagerService$6;
-Lcom/android/server/LocationManagerService$7;
-Lcom/android/server/LocationManagerService$8;
-Lcom/android/server/LocationManagerService$9;
-Lcom/android/server/LocationManagerService$LocationWorkerHandler;
-Lcom/android/server/LocationManagerService$Receiver;
-Lcom/android/server/LocationManagerService$UpdateRecord;
-Lcom/android/server/location/PassiveProvider;
-Lcom/android/server/location/RemoteListenerHelper;
-Lcom/android/server/location/RemoteListenerHelper$HandlerRunnable;
-Lcom/android/server/location/RemoteListenerHelper$LinkedListener;
-Lcom/android/server/location/RemoteListenerHelper$ListenerOperation;
-Lcom/android/server/LockSettingsService;
-Lcom/android/server/LockSettingsService$1;
-Lcom/android/server/LockSettingsService$GateKeeperDiedRecipient;
-Lcom/android/server/LockSettingsService$Injector;
-Lcom/android/server/LockSettingsService$Injector$1;
-Lcom/android/server/LockSettingsService$Lifecycle;
-Lcom/android/server/LockSettingsService$SynchronizedStrongAuthTracker;
-Lcom/android/server/LockSettingsStorage;
-Lcom/android/server/LockSettingsStorage$Cache;
-Lcom/android/server/LockSettingsStorage$Cache$CacheKey;
-Lcom/android/server/LockSettingsStorage$Callback;
-Lcom/android/server/LockSettingsStorage$CredentialHash;
-Lcom/android/server/LockSettingsStorage$DatabaseHelper;
-Lcom/android/server/LockSettingsStrongAuth;
-Lcom/android/server/LockSettingsStrongAuth$1;
-Lcom/android/server/media/MediaResourceMonitorService;
-Lcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;
-Lcom/android/server/media/MediaRouterService;
-Lcom/android/server/media/MediaRouterService$1;
-Lcom/android/server/media/MediaRouterService$ClientRecord;
-Lcom/android/server/media/MediaRouterService$UserHandler;
-Lcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;
-Lcom/android/server/media/MediaRouterService$UserRecord;
-Lcom/android/server/media/MediaSessionRecord;
-Lcom/android/server/media/MediaSessionRecord$1;
-Lcom/android/server/media/MediaSessionRecord$ControllerStub;
-Lcom/android/server/media/MediaSessionRecord$MessageHandler;
-Lcom/android/server/media/MediaSessionRecord$SessionCb;
-Lcom/android/server/media/MediaSessionRecord$SessionStub;
-Lcom/android/server/media/MediaSessionService;
-Lcom/android/server/media/MediaSessionService$MessageHandler;
-Lcom/android/server/media/MediaSessionService$SessionManagerImpl;
-Lcom/android/server/media/MediaSessionService$SessionManagerImpl$1;
-Lcom/android/server/media/MediaSessionService$SessionManagerImpl$4;
-Lcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;
-Lcom/android/server/media/MediaSessionService$SessionsListenerRecord;
-Lcom/android/server/media/MediaSessionService$SettingsObserver;
-Lcom/android/server/media/MediaSessionService$UserRecord;
-Lcom/android/server/media/MediaSessionStack;
-Lcom/android/server/media/projection/MediaProjectionManagerService;
-Lcom/android/server/media/projection/MediaProjectionManagerService$1;
-Lcom/android/server/media/projection/MediaProjectionManagerService$BinderService;
-Lcom/android/server/media/projection/MediaProjectionManagerService$CallbackDelegate;
-Lcom/android/server/media/projection/MediaProjectionManagerService$MediaRouterCallback;
-Lcom/android/server/media/RemoteDisplayProviderProxy;
-Lcom/android/server/media/RemoteDisplayProviderProxy$1;
-Lcom/android/server/media/RemoteDisplayProviderProxy$Callback;
-Lcom/android/server/media/RemoteDisplayProviderWatcher;
-Lcom/android/server/media/RemoteDisplayProviderWatcher$1;
-Lcom/android/server/media/RemoteDisplayProviderWatcher$2;
-Lcom/android/server/media/RemoteDisplayProviderWatcher$Callback;
-Lcom/android/server/midi/MidiService;
-Lcom/android/server/midi/MidiService$1;
-Lcom/android/server/midi/MidiService$Lifecycle;
-Lcom/android/server/MmsServiceBroker;
-Lcom/android/server/MmsServiceBroker$1;
-Lcom/android/server/MmsServiceBroker$2;
-Lcom/android/server/MmsServiceBroker$3;
-Lcom/android/server/MmsServiceBroker$BinderService;
-Lcom/android/server/MountServiceIdler;
-Lcom/android/server/NativeDaemonConnector;
-Lcom/android/server/NativeDaemonConnector$Command;
-Lcom/android/server/NativeDaemonConnectorException;
-Lcom/android/server/NativeDaemonConnector$NativeDaemonFailureException;
-Lcom/android/server/NativeDaemonConnector$ResponseQueue;
-Lcom/android/server/NativeDaemonConnector$ResponseQueue$PendingCmd;
-Lcom/android/server/NativeDaemonConnector$SensitiveArg;
-Lcom/android/server/NativeDaemonEvent;
-Lcom/android/server/NativeDaemonTimeoutException;
-Lcom/android/server/net/BaseNetworkObserver;
-Lcom/android/server/net/DelayedDiskWrite;
-Lcom/android/server/net/DelayedDiskWrite$Writer;
-Lcom/android/server/net/DnsServerEntry;
-Lcom/android/server/net/DnsServerRepository;
-Lcom/android/server/net/IpConfigStore;
-Lcom/android/server/net/LockdownVpnTracker;
-Lcom/android/server/net/NetlinkTracker;
-Lcom/android/server/net/NetlinkTracker$Callback;
-Lcom/android/server/net/NetworkIdentitySet;
-Lcom/android/server/net/NetworkPolicyManagerInternal;
-Lcom/android/server/net/NetworkPolicyManagerService;
-Lcom/android/server/net/NetworkPolicyManagerService$1;
-Lcom/android/server/net/NetworkPolicyManagerService$10;
-Lcom/android/server/net/NetworkPolicyManagerService$11;
-Lcom/android/server/net/NetworkPolicyManagerService$12;
-Lcom/android/server/net/NetworkPolicyManagerService$13;
-Lcom/android/server/net/NetworkPolicyManagerService$14;
-Lcom/android/server/net/NetworkPolicyManagerService$15;
-Lcom/android/server/net/NetworkPolicyManagerService$2;
-Lcom/android/server/net/NetworkPolicyManagerService$3;
-Lcom/android/server/net/NetworkPolicyManagerService$4;
-Lcom/android/server/net/NetworkPolicyManagerService$5;
-Lcom/android/server/net/NetworkPolicyManagerService$6;
-Lcom/android/server/net/NetworkPolicyManagerService$7;
-Lcom/android/server/net/NetworkPolicyManagerService$8;
-Lcom/android/server/net/NetworkPolicyManagerService$9;
-Lcom/android/server/net/NetworkPolicyManagerService$AppIdleStateChangeListener;
-Lcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;
-Lcom/android/server/net/NetworkStatsAccess;
-Lcom/android/server/net/NetworkStatsCollection;
-Lcom/android/server/net/NetworkStatsCollection$Key;
-Lcom/android/server/net/NetworkStatsObservers;
-Lcom/android/server/net/NetworkStatsObservers$1;
-Lcom/android/server/net/NetworkStatsObservers$StatsContext;
-Lcom/android/server/net/NetworkStatsRecorder;
-Lcom/android/server/net/NetworkStatsRecorder$CombiningRewriter;
-Lcom/android/server/net/NetworkStatsService;
-Lcom/android/server/net/NetworkStatsService$1;
-Lcom/android/server/net/NetworkStatsService$2;
-Lcom/android/server/net/NetworkStatsService$3;
-Lcom/android/server/net/NetworkStatsService$4;
-Lcom/android/server/net/NetworkStatsService$5;
-Lcom/android/server/net/NetworkStatsService$6;
-Lcom/android/server/net/NetworkStatsService$7;
-Lcom/android/server/net/NetworkStatsService$DefaultNetworkStatsSettings;
-Lcom/android/server/net/NetworkStatsService$DropBoxNonMonotonicObserver;
-Lcom/android/server/net/NetworkStatsService$HandlerCallback;
-Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings;
-Lcom/android/server/net/NetworkStatsService$NetworkStatsSettings$Config;
-Lcom/android/server/NetworkManagementService;
-Lcom/android/server/NetworkManagementService$1;
-Lcom/android/server/NetworkManagementService$IdleTimerParams;
-Lcom/android/server/NetworkManagementService$NetdCallbackReceiver;
-Lcom/android/server/NetworkManagementService$NetworkManagementEventCallback;
-Lcom/android/server/NetworkManagementSocketTagger;
-Lcom/android/server/NetworkManagementSocketTagger$1;
-Lcom/android/server/NetworkManagementSocketTagger$SocketTags;
-Lcom/android/server/NetworkScoreService;
-Lcom/android/server/NetworkScoreService$1;
-Lcom/android/server/NetworkScoreService$2;
-Lcom/android/server/NetworkScoreService$DispatchingContentObserver;
-Lcom/android/server/NetworkScoreService$NetworkScorerPackageMonitor;
-Lcom/android/server/NetworkScoreService$RequestRecommendationCaller;
-Lcom/android/server/NetworkScoreService$RequestRecommendationCaller$1;
-Lcom/android/server/NetworkScoreService$ServiceHandler;
-Lcom/android/server/NetworkTimeUpdateService;
-Lcom/android/server/NetworkTimeUpdateService$1;
-Lcom/android/server/NetworkTimeUpdateService$2;
-Lcom/android/server/NetworkTimeUpdateService$3;
-Lcom/android/server/NetworkTimeUpdateService$MyHandler;
-Lcom/android/server/NetworkTimeUpdateService$SettingsObserver;
-Lcom/android/server/notification/BadgeExtractor;
-Lcom/android/server/notification/CalendarTracker;
-Lcom/android/server/notification/CalendarTracker$1;
-Lcom/android/server/notification/CalendarTracker$Callback;
-Lcom/android/server/notification/CalendarTracker$CheckEventResult;
-Lcom/android/server/notification/ConditionProviders;
-Lcom/android/server/notification/ConditionProviders$Callback;
-Lcom/android/server/notification/ConditionProviders$ConditionRecord;
-Lcom/android/server/notification/CountdownConditionProvider;
-Lcom/android/server/notification/CountdownConditionProvider$Receiver;
-Lcom/android/server/notification/EventConditionProvider;
-Lcom/android/server/notification/EventConditionProvider$1;
-Lcom/android/server/notification/EventConditionProvider$2;
-Lcom/android/server/notification/EventConditionProvider$3;
-Lcom/android/server/notification/EventConditionProvider$4;
-Lcom/android/server/notification/GlobalSortKeyComparator;
-Lcom/android/server/notification/GroupHelper;
-Lcom/android/server/notification/GroupHelper$Callback;
-Lcom/android/server/notification/ImportanceExtractor;
-Lcom/android/server/notification/ManagedServices;
-Lcom/android/server/notification/ManagedServices$1;
-Lcom/android/server/notification/ManagedServices$Config;
-Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
-Lcom/android/server/notification/ManagedServices$SettingRestoredReceiver;
-Lcom/android/server/notification/ManagedServices$SettingsObserver;
-Lcom/android/server/notification/ManagedServices$UserProfiles;
-Lcom/android/server/notification/NotificationComparator;
-Lcom/android/server/notification/NotificationComparator$1;
-Lcom/android/server/notification/NotificationComparator$2;
-Lcom/android/server/notification/NotificationDelegate;
-Lcom/android/server/notification/NotificationIntrusivenessExtractor;
-Lcom/android/server/notification/NotificationIntrusivenessExtractor$1;
-Lcom/android/server/notification/NotificationManagerInternal;
-Lcom/android/server/notification/NotificationManagerService;
-Lcom/android/server/notification/NotificationManagerService$1;
-Lcom/android/server/notification/NotificationManagerService$10;
-Lcom/android/server/notification/NotificationManagerService$11;
-Lcom/android/server/notification/NotificationManagerService$12;
-Lcom/android/server/notification/NotificationManagerService$13;
-Lcom/android/server/notification/NotificationManagerService$16;
-Lcom/android/server/notification/NotificationManagerService$2;
-Lcom/android/server/notification/NotificationManagerService$3;
-Lcom/android/server/notification/NotificationManagerService$4;
-Lcom/android/server/notification/NotificationManagerService$5;
-Lcom/android/server/notification/NotificationManagerService$6;
-Lcom/android/server/notification/NotificationManagerService$6$1;
-Lcom/android/server/notification/NotificationManagerService$7;
-Lcom/android/server/notification/NotificationManagerService$7$1;
-Lcom/android/server/notification/NotificationManagerService$8;
-Lcom/android/server/notification/NotificationManagerService$9;
-Lcom/android/server/notification/NotificationManagerService$Archive;
-Lcom/android/server/notification/NotificationManagerService$DumpFilter;
-Lcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;
-Lcom/android/server/notification/NotificationManagerService$FlagChecker;
-Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
-Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
-Lcom/android/server/notification/NotificationManagerService$NotificationListeners$2;
-Lcom/android/server/notification/NotificationManagerService$NotificationListeners$3;
-Lcom/android/server/notification/NotificationManagerService$NotificationListeners$6;
-Lcom/android/server/notification/NotificationManagerService$PolicyAccess;
-Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;
-Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable$1;
-Lcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;
-Lcom/android/server/notification/NotificationManagerService$SettingsObserver;
-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/NotificationRecord;
-Lcom/android/server/notification/NotificationSignalExtractor;
-Lcom/android/server/notification/NotificationUsageStats;
-Lcom/android/server/notification/NotificationUsageStats$1;
-Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
-Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;
-Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;
-Lcom/android/server/notification/NotificationUsageStats$SQLiteLog;
-Lcom/android/server/notification/NotificationUsageStats$SQLiteLog$1;
-Lcom/android/server/notification/NotificationUsageStats$SQLiteLog$2;
-Lcom/android/server/notification/PriorityExtractor;
-Lcom/android/server/notification/PropConfig;
-Lcom/android/server/notification/RankingConfig;
-Lcom/android/server/notification/RankingHandler;
-Lcom/android/server/notification/RankingHelper;
-Lcom/android/server/notification/RankingHelper$Record;
-Lcom/android/server/notification/RankingReconsideration;
-Lcom/android/server/notification/RateEstimator;
-Lcom/android/server/notification/ScheduleCalendar;
-Lcom/android/server/notification/ScheduleConditionProvider;
-Lcom/android/server/notification/ScheduleConditionProvider$1;
-Lcom/android/server/notification/SnoozeHelper;
-Lcom/android/server/notification/SnoozeHelper$1;
-Lcom/android/server/notification/SnoozeHelper$Callback;
-Lcom/android/server/notification/SystemConditionProviderService;
-Lcom/android/server/notification/ValidateNotificationPeople;
-Lcom/android/server/notification/ValidateNotificationPeople$1;
-Lcom/android/server/notification/VisibilityExtractor;
-Lcom/android/server/notification/ZenLog;
-Lcom/android/server/notification/ZenModeConditions;
-Lcom/android/server/notification/ZenModeFiltering;
-Lcom/android/server/notification/ZenModeFiltering$RepeatCallers;
-Lcom/android/server/notification/ZenModeHelper;
-Lcom/android/server/notification/ZenModeHelper$Callback;
-Lcom/android/server/notification/ZenModeHelper$H;
-Lcom/android/server/notification/ZenModeHelper$H$ConfigMessageData;
-Lcom/android/server/notification/ZenModeHelper$Metrics;
-Lcom/android/server/notification/ZenModeHelper$RingerModeDelegate;
-Lcom/android/server/notification/ZenModeHelper$SettingsObserver;
-Lcom/android/server/NsdService;
-Lcom/android/server/NsdService$NativeCallbackReceiver;
-Lcom/android/server/NsdService$NsdStateMachine;
-Lcom/android/server/NsdService$NsdStateMachine$1;
-Lcom/android/server/NsdService$NsdStateMachine$DefaultState;
-Lcom/android/server/NsdService$NsdStateMachine$DisabledState;
-Lcom/android/server/NsdService$NsdStateMachine$EnabledState;
-Lcom/android/server/os/DeviceIdentifiersPolicyService;
-Lcom/android/server/os/DeviceIdentifiersPolicyService$DeviceIdentifiersPolicy;
-Lcom/android/server/os/SchedulingPolicyService;
-Lcom/android/server/PersistentDataBlockService;
-Lcom/android/server/PersistentDataBlockService$1;
-Lcom/android/server/PinnerService;
-Lcom/android/server/PinnerService$BinderService;
-Lcom/android/server/PinnerService$PinnedFile;
-Lcom/android/server/PinnerService$PinnerHandler;
-Lcom/android/server/pm/AbstractStatsBase;
-Lcom/android/server/pm/AbstractStatsBase$1;
-Lcom/android/server/pm/BasePermission;
-Lcom/android/server/pm/CompilerStats;
-Lcom/android/server/pm/CompilerStats$PackageStats;
-Lcom/android/server/pm/CrossProfileIntentResolver;
-Lcom/android/server/pm/DefaultPermissionGrantPolicy;
-Lcom/android/server/pm/DefaultPermissionGrantPolicy$1;
-Lcom/android/server/pm/DefaultPermissionGrantPolicy$DefaultPermissionGrant;
-Lcom/android/server/pm/dex/DexManager;
-Lcom/android/server/pm/dex/DexManager$DexSearchResult;
-Lcom/android/server/pm/dex/DexManager$PackageCodeLocations;
-Lcom/android/server/pm/dex/PackageDexUsage;
-Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;
-Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;
-Lcom/android/server/pm/EphemeralResolverConnection;
-Lcom/android/server/pm/EphemeralResolverConnection$GetEphemeralResolveInfoCaller;
-Lcom/android/server/pm/EphemeralResolverConnection$GetEphemeralResolveInfoCaller$1;
-Lcom/android/server/pm/EphemeralResolverConnection$MyServiceConnection;
-Lcom/android/server/pm/Installer;
-Lcom/android/server/pm/Installer$1;
-Lcom/android/server/pm/Installer$InstallerException;
-Lcom/android/server/pm/InstantAppRegistry;
-Lcom/android/server/pm/InstantAppRegistry$CookiePersistence;
-Lcom/android/server/pm/InstructionSets;
-Lcom/android/server/pm/KeySetHandle;
-Lcom/android/server/pm/KeySetManagerService;
-Lcom/android/server/pm/KeySetManagerService$PublicKeyHandle;
-Lcom/android/server/pm/LauncherAppsService;
-Lcom/android/server/pm/LauncherAppsService$BroadcastCookie;
-Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;
-Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;
-Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageCallbackList;
-Lcom/android/server/pm/OtaDexoptService;
-Lcom/android/server/pm/PackageDexOptimizer;
-Lcom/android/server/pm/PackageInstallerService;
-Lcom/android/server/pm/PackageInstallerService$1;
-Lcom/android/server/pm/PackageInstallerService$Callbacks;
-Lcom/android/server/pm/PackageInstallerService$InternalCallback;
-Lcom/android/server/pm/PackageKeySetData;
-Lcom/android/server/pm/PackageManagerException;
-Lcom/android/server/pm/PackageManagerService;
-Lcom/android/server/pm/PackageManagerService$1;
-Lcom/android/server/pm/PackageManagerService$11;
-Lcom/android/server/pm/PackageManagerService$2;
-Lcom/android/server/pm/PackageManagerService$21;
-Lcom/android/server/pm/PackageManagerService$3;
-Lcom/android/server/pm/PackageManagerService$8;
-Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver;
-Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver$ActionIterGenerator;
-Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver$AuthoritiesIterGenerator;
-Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver$CategoriesIterGenerator;
-Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver$IterGenerator;
-Lcom/android/server/pm/PackageManagerService$ActivityIntentResolver$SchemesIterGenerator;
-Lcom/android/server/pm/PackageManagerServiceCompilerMapping;
-Lcom/android/server/pm/PackageManagerService$DefaultContainerConnection;
-Lcom/android/server/pm/PackageManagerService$DumpState;
-Lcom/android/server/pm/PackageManagerService$HandlerParams;
-Lcom/android/server/pm/PackageManagerService$IntentFilterVerifier;
-Lcom/android/server/pm/PackageManagerService$IntentVerifierProxy;
-Lcom/android/server/pm/PackageManagerService$MeasureParams;
-Lcom/android/server/pm/PackageManagerService$MoveCallbacks;
-Lcom/android/server/pm/PackageManagerService$OnPermissionChangeListeners;
-Lcom/android/server/pm/PackageManagerService$PackageHandler;
-Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-Lcom/android/server/pm/PackageManagerService$PendingPackageBroadcasts;
-Lcom/android/server/pm/PackageManagerService$ProviderIntentResolver;
-Lcom/android/server/pm/PackageManagerService$ServiceIntentResolver;
-Lcom/android/server/pm/PackageManagerService$SharedLibraryEntry;
-Lcom/android/server/pm/PackageManagerServiceUtils;
-Lcom/android/server/pm/PackageSetting;
-Lcom/android/server/pm/PackageSettingBase;
-Lcom/android/server/pm/PackageSignatures;
-Lcom/android/server/pm/PackageUsage;
-Lcom/android/server/pm/ParallelPackageParser;
-Lcom/android/server/pm/ParallelPackageParser$ParseResult;
-Lcom/android/server/pm/PermissionsState;
-Lcom/android/server/pm/PermissionsState$PermissionData;
-Lcom/android/server/pm/PermissionsState$PermissionState;
-Lcom/android/server/pm/PersistentPreferredIntentResolver;
-Lcom/android/server/pm/Policy;
-Lcom/android/server/pm/PolicyComparator;
-Lcom/android/server/pm/Policy$PolicyBuilder;
-Lcom/android/server/pm/PreferredActivity;
-Lcom/android/server/pm/PreferredComponent;
-Lcom/android/server/pm/PreferredComponent$Callbacks;
-Lcom/android/server/pm/PreferredIntentResolver;
-Lcom/android/server/pm/ProcessLoggingHandler;
-Lcom/android/server/pm/ProtectedPackages;
-Lcom/android/server/pm/SELinuxMMAC;
-Lcom/android/server/pm/SettingBase;
-Lcom/android/server/pm/Settings;
-Lcom/android/server/pm/Settings$RuntimePermissionPersistence;
-Lcom/android/server/pm/Settings$RuntimePermissionPersistence$MyHandler;
-Lcom/android/server/pm/Settings$VersionInfo;
-Lcom/android/server/pm/SharedUserSetting;
-Lcom/android/server/pm/ShortcutLauncher;
-Lcom/android/server/pm/ShortcutPackage;
-Lcom/android/server/pm/ShortcutPackageInfo;
-Lcom/android/server/pm/ShortcutPackageItem;
-Lcom/android/server/pm/ShortcutParser;
-Lcom/android/server/pm/ShortcutRequestPinProcessor;
-Lcom/android/server/pm/ShortcutService;
-Lcom/android/server/pm/ShortcutService$1;
-Lcom/android/server/pm/ShortcutService$2;
-Lcom/android/server/pm/ShortcutService$3;
-Lcom/android/server/pm/ShortcutService$4;
-Lcom/android/server/pm/ShortcutService$5;
-Lcom/android/server/pm/ShortcutService$FileOutputStreamWithPath;
-Lcom/android/server/pm/ShortcutService$InvalidFileFormatException;
-Lcom/android/server/pm/ShortcutService$Lifecycle;
-Lcom/android/server/pm/ShortcutService$LocalService;
-Lcom/android/server/pm/ShortcutUser;
-Lcom/android/server/pm/ShortcutUser$PackageWithUser;
-Lcom/android/server/pm/UserDataPreparer;
-Lcom/android/server/pm/UserManagerService;
-Lcom/android/server/pm/UserManagerService$1;
-Lcom/android/server/pm/UserManagerService$2;
-Lcom/android/server/pm/UserManagerService$3;
-Lcom/android/server/pm/UserManagerService$LifeCycle;
-Lcom/android/server/pm/UserManagerService$LocalService;
-Lcom/android/server/pm/UserManagerService$MainHandler;
-Lcom/android/server/pm/UserManagerService$UserData;
-Lcom/android/server/pm/UserRestrictionsUtils;
-Lcom/android/server/policy/AccessibilityShortcutController;
-Lcom/android/server/policy/AccessibilityShortcutController$1;
-Lcom/android/server/policy/AccessibilityShortcutController$FrameworkObjectProvider;
-Lcom/android/server/policy/BarController;
-Lcom/android/server/policy/BarController$1;
-Lcom/android/server/policy/GlobalKeyManager;
-Lcom/android/server/policy/IconUtilities;
-Lcom/android/server/policy/ImmersiveModeConfirmation;
-Lcom/android/server/policy/ImmersiveModeConfirmation$1;
-Lcom/android/server/policy/ImmersiveModeConfirmation$2;
-Lcom/android/server/policy/ImmersiveModeConfirmation$ClingWindowView;
-Lcom/android/server/policy/ImmersiveModeConfirmation$ClingWindowView$1;
-Lcom/android/server/policy/ImmersiveModeConfirmation$ClingWindowView$2;
-Lcom/android/server/policy/ImmersiveModeConfirmation$ClingWindowView$3;
-Lcom/android/server/policy/ImmersiveModeConfirmation$ClingWindowView$4;
-Lcom/android/server/policy/ImmersiveModeConfirmation$ClingWindowView$5;
-Lcom/android/server/policy/ImmersiveModeConfirmation$ClingWindowView$5$1;
-Lcom/android/server/policy/ImmersiveModeConfirmation$H;
-Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;
-Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$1;
-Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$DrawnListener;
-Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardShowDelegate;
-Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardState;
-Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;
-Lcom/android/server/policy/keyguard/KeyguardStateMonitor;
-Lcom/android/server/policy/keyguard/KeyguardStateMonitor$StateCallback;
-Lcom/android/server/policy/LogDecelerateInterpolator;
-Lcom/android/server/policy/PhoneWindowManager;
-Lcom/android/server/policy/PhoneWindowManager$1;
-Lcom/android/server/policy/PhoneWindowManager$10;
-Lcom/android/server/policy/PhoneWindowManager$11;
-Lcom/android/server/policy/PhoneWindowManager$12;
-Lcom/android/server/policy/PhoneWindowManager$13;
-Lcom/android/server/policy/PhoneWindowManager$16;
-Lcom/android/server/policy/PhoneWindowManager$17;
-Lcom/android/server/policy/PhoneWindowManager$19;
-Lcom/android/server/policy/PhoneWindowManager$2;
-Lcom/android/server/policy/PhoneWindowManager$3;
-Lcom/android/server/policy/PhoneWindowManager$4;
-Lcom/android/server/policy/PhoneWindowManager$5;
-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$MyOrientationListener;
-Lcom/android/server/policy/PhoneWindowManager$MyOrientationListener$1;
-Lcom/android/server/policy/PhoneWindowManager$MyWakeGestureListener;
-Lcom/android/server/policy/PhoneWindowManager$PolicyHandler;
-Lcom/android/server/policy/PhoneWindowManager$ScreenLockTimeout;
-Lcom/android/server/policy/PhoneWindowManager$ScreenshotRunnable;
-Lcom/android/server/policy/PhoneWindowManager$SettingsObserver;
-Lcom/android/server/policy/PolicyControl;
-Lcom/android/server/policy/ShortcutManager;
-Lcom/android/server/policy/ShortcutManager$ShortcutInfo;
-Lcom/android/server/policy/SplashScreenSurface;
-Lcom/android/server/policy/StatusBarController;
-Lcom/android/server/policy/StatusBarController$1;
-Lcom/android/server/policy/StatusBarController$1$1;
-Lcom/android/server/policy/StatusBarController$1$2;
-Lcom/android/server/policy/StatusBarController$1$3;
-Lcom/android/server/policy/StatusBarController$1$4;
-Lcom/android/server/policy/SystemGesturesPointerEventListener;
-Lcom/android/server/policy/SystemGesturesPointerEventListener$Callbacks;
-Lcom/android/server/policy/SystemGesturesPointerEventListener$FlingGestureDetector;
-Lcom/android/server/policy/WakeGestureListener;
-Lcom/android/server/policy/WakeGestureListener$1;
-Lcom/android/server/policy/WakeGestureListener$2;
-Lcom/android/server/policy/WindowOrientationListener;
-Lcom/android/server/policy/WindowOrientationListener$OrientationJudge;
-Lcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge;
-Lcom/android/server/policy/WindowOrientationListener$OrientationSensorJudge$1;
-Lcom/android/server/power/Notifier;
-Lcom/android/server/power/Notifier$1;
-Lcom/android/server/power/Notifier$2;
-Lcom/android/server/power/Notifier$3;
-Lcom/android/server/power/Notifier$4;
-Lcom/android/server/power/Notifier$5;
-Lcom/android/server/power/Notifier$6;
-Lcom/android/server/power/Notifier$7;
-Lcom/android/server/power/Notifier$8;
-Lcom/android/server/power/Notifier$NotifierHandler;
-Lcom/android/server/power/PowerManagerService;
-Lcom/android/server/power/PowerManagerService$1;
-Lcom/android/server/power/PowerManagerService$2;
-Lcom/android/server/power/PowerManagerService$BatteryReceiver;
-Lcom/android/server/power/PowerManagerService$BinderService;
-Lcom/android/server/power/PowerManagerService$Constants;
-Lcom/android/server/power/PowerManagerService$DockReceiver;
-Lcom/android/server/power/PowerManagerService$DreamReceiver;
-Lcom/android/server/power/PowerManagerService$LocalService;
-Lcom/android/server/power/PowerManagerService$PowerManagerHandler;
-Lcom/android/server/power/PowerManagerService$SettingsObserver;
-Lcom/android/server/power/PowerManagerService$SuspendBlockerImpl;
-Lcom/android/server/power/PowerManagerService$UidState;
-Lcom/android/server/power/PowerManagerService$UserSwitchedReceiver;
-Lcom/android/server/power/PowerManagerService$WakeLock;
-Lcom/android/server/power/SuspendBlocker;
-Lcom/android/server/power/WirelessChargerDetector;
-Lcom/android/server/power/WirelessChargerDetector$1;
-Lcom/android/server/power/WirelessChargerDetector$2;
-Lcom/android/server/print/PrintManagerService;
-Lcom/android/server/print/PrintManagerService$PrintManagerImpl;
-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/RemotePrintService;
-Lcom/android/server/print/RemotePrintService$MyHandler;
-Lcom/android/server/print/RemotePrintService$PrintServiceCallbacks;
-Lcom/android/server/print/RemotePrintServiceRecommendationService$RemotePrintServiceRecommendationServiceCallbacks;
-Lcom/android/server/print/RemotePrintService$RemotePrintServiceClient;
-Lcom/android/server/print/RemotePrintService$RemoteServiceConneciton;
-Lcom/android/server/print/RemotePrintSpooler;
-Lcom/android/server/print/RemotePrintSpooler$BasePrintSpoolerServiceCallbacks;
-Lcom/android/server/print/RemotePrintSpooler$ClearCustomPrinterIconCacheCaller;
-Lcom/android/server/print/RemotePrintSpooler$ClearCustomPrinterIconCacheCaller$1;
-Lcom/android/server/print/RemotePrintSpooler$GetCustomPrinterIconCaller;
-Lcom/android/server/print/RemotePrintSpooler$GetCustomPrinterIconCaller$1;
-Lcom/android/server/print/RemotePrintSpooler$GetPrintJobInfoCaller;
-Lcom/android/server/print/RemotePrintSpooler$GetPrintJobInfoCaller$1;
-Lcom/android/server/print/RemotePrintSpooler$GetPrintJobInfosCaller;
-Lcom/android/server/print/RemotePrintSpooler$GetPrintJobInfosCaller$1;
-Lcom/android/server/print/RemotePrintSpooler$MyServiceConnection;
-Lcom/android/server/print/RemotePrintSpooler$OnCustomPrinterIconLoadedCaller;
-Lcom/android/server/print/RemotePrintSpooler$OnCustomPrinterIconLoadedCaller$1;
-Lcom/android/server/print/RemotePrintSpooler$PrintSpoolerCallbacks;
-Lcom/android/server/print/RemotePrintSpooler$PrintSpoolerClient;
-Lcom/android/server/print/RemotePrintSpooler$SetPrintJobStateCaller;
-Lcom/android/server/print/RemotePrintSpooler$SetPrintJobStateCaller$1;
-Lcom/android/server/print/RemotePrintSpooler$SetPrintJobTagCaller;
-Lcom/android/server/print/RemotePrintSpooler$SetPrintJobTagCaller$1;
-Lcom/android/server/print/UserState;
-Lcom/android/server/print/UserState$4;
-Lcom/android/server/print/UserState$ListenerRecord;
-Lcom/android/server/print/UserState$PrintJobForAppCache;
-Lcom/android/server/print/UserState$UserStateHandler;
-Lcom/android/server/PruneInstantAppsJobService;
-Lcom/android/server/RandomBlock;
-Lcom/android/server/RecoverySystemService;
-Lcom/android/server/RecoverySystemService$BinderService;
-Lcom/android/server/RescueParty;
-Lcom/android/server/RescueParty$BootThreshold;
-Lcom/android/server/RescueParty$Threshold;
-Lcom/android/server/restrictions/RestrictionsManagerService;
-Lcom/android/server/restrictions/RestrictionsManagerService$RestrictionsManagerImpl;
-Lcom/android/server/SamplingProfilerService;
-Lcom/android/server/SamplingProfilerService$1;
-Lcom/android/server/SamplingProfilerService$SamplingProfilerSettingsObserver;
-Lcom/android/server/search/Searchables;
-Lcom/android/server/search/Searchables$1;
-Lcom/android/server/search/SearchManagerService;
-Lcom/android/server/search/SearchManagerService$GlobalSearchProviderObserver;
-Lcom/android/server/search/SearchManagerService$Lifecycle;
-Lcom/android/server/search/SearchManagerService$Lifecycle$1;
-Lcom/android/server/search/SearchManagerService$MyPackageMonitor;
-Lcom/android/server/security/KeyAttestationApplicationIdProviderService;
-Lcom/android/server/SensorNotificationService;
-Lcom/android/server/SerialService;
-Lcom/android/server/ServiceThread;
-Lcom/android/server/ServiceWatcher;
-Lcom/android/server/ServiceWatcher$1;
-Lcom/android/server/ServiceWatcher$2;
-Lcom/android/server/soundtrigger/SoundTriggerDbHelper;
-Lcom/android/server/soundtrigger/SoundTriggerHelper;
-Lcom/android/server/soundtrigger/SoundTriggerHelper$MyCallStateListener;
-Lcom/android/server/soundtrigger/SoundTriggerInternal;
-Lcom/android/server/soundtrigger/SoundTriggerService;
-Lcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;
-Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerServiceStub;
-Lcom/android/server/statusbar/StatusBarManagerInternal;
-Lcom/android/server/statusbar/StatusBarManagerService;
-Lcom/android/server/statusbar/StatusBarManagerService$1;
-Lcom/android/server/statusbar/StatusBarManagerService$2;
-Lcom/android/server/statusbar/StatusBarManagerService$3;
-Lcom/android/server/statusbar/StatusBarManagerService$4;
-Lcom/android/server/statusbar/StatusBarManagerService$5;
-Lcom/android/server/statusbar/StatusBarManagerService$DisableRecord;
-Lcom/android/server/storage/AppFuseBridge;
-Lcom/android/server/storage/DeviceStorageMonitorInternal;
-Lcom/android/server/storage/DeviceStorageMonitorService;
-Lcom/android/server/storage/DeviceStorageMonitorService$1;
-Lcom/android/server/storage/DeviceStorageMonitorService$2;
-Lcom/android/server/storage/DeviceStorageMonitorService$3;
-Lcom/android/server/storage/DeviceStorageMonitorService$CacheFileDeletedObserver;
-Lcom/android/server/storage/DiskStatsLoggingService;
-Lcom/android/server/StorageManagerService;
-Lcom/android/server/StorageManagerService$1;
-Lcom/android/server/StorageManagerService$Callbacks;
-Lcom/android/server/StorageManagerService$DefaultContainerConnection;
-Lcom/android/server/StorageManagerService$Lifecycle;
-Lcom/android/server/StorageManagerService$ObbActionHandler;
-Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;
-Lcom/android/server/StorageManagerService$StorageManagerServiceHandler;
-Lcom/android/server/SystemConfig;
-Lcom/android/server/SystemConfig$PermissionEntry;
-Lcom/android/server/SystemServer;
-Lcom/android/server/SystemServerInitThreadPool;
-Lcom/android/server/SystemService;
-Lcom/android/server/SystemServiceManager;
-Lcom/android/server/telecom/Analytics;
-Lcom/android/server/telecom/Analytics$1;
-Lcom/android/server/telecom/Analytics$2;
-Lcom/android/server/telecom/Analytics$3;
-Lcom/android/server/telecom/Analytics$CallInfo;
-Lcom/android/server/telecom/Analytics$CallInfoImpl;
-Lcom/android/server/telecom/AsyncRingtonePlayer;
-Lcom/android/server/telecom/BluetoothAdapterProxy;
-Lcom/android/server/telecom/bluetooth/BluetoothDeviceManager;
-Lcom/android/server/telecom/bluetooth/BluetoothDeviceManager$1;
-Lcom/android/server/telecom/bluetooth/BluetoothDeviceManager$2;
-Lcom/android/server/telecom/bluetooth/BluetoothRouteManager;
-Lcom/android/server/telecom/bluetooth/BluetoothRouteManager$1;
-Lcom/android/server/telecom/bluetooth/BluetoothRouteManager$2;
-Lcom/android/server/telecom/bluetooth/BluetoothRouteManager$AudioOffState;
-Lcom/android/server/telecom/bluetooth/BluetoothRouteManager$BluetoothStateListener;
-Lcom/android/server/telecom/BluetoothHeadsetProxy;
-Lcom/android/server/telecom/BluetoothPhoneServiceImpl;
-Lcom/android/server/telecom/BluetoothPhoneServiceImpl$1;
-Lcom/android/server/telecom/BluetoothPhoneServiceImpl$2;
-Lcom/android/server/telecom/BluetoothPhoneServiceImpl$3;
-Lcom/android/server/telecom/BluetoothPhoneServiceImpl$4;
-Lcom/android/server/telecom/BluetoothPhoneServiceImpl$BluetoothPhoneServiceImplFactory;
-Lcom/android/server/telecom/Call;
-Lcom/android/server/telecom/Call$1;
-Lcom/android/server/telecom/CallAudioManager;
-Lcom/android/server/telecom/CallAudioManager$1;
-Lcom/android/server/telecom/CallAudioManager$AudioServiceFactory;
-Lcom/android/server/telecom/CallAudioModeStateMachine;
-Lcom/android/server/telecom/CallAudioModeStateMachine$1;
-Lcom/android/server/telecom/CallAudioModeStateMachine$BaseState;
-Lcom/android/server/telecom/CallAudioModeStateMachine$MessageArgs;
-Lcom/android/server/telecom/CallAudioModeStateMachine$OtherFocusState;
-Lcom/android/server/telecom/CallAudioModeStateMachine$RingingFocusState;
-Lcom/android/server/telecom/CallAudioModeStateMachine$SimCallFocusState;
-Lcom/android/server/telecom/CallAudioModeStateMachine$UnfocusedState;
-Lcom/android/server/telecom/CallAudioModeStateMachine$VoipCallFocusState;
-Lcom/android/server/telecom/CallAudioRoutePeripheralAdapter;
-Lcom/android/server/telecom/CallAudioRouteStateMachine;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$1;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$2;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$3;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$ActiveBluetoothRoute;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$ActiveEarpieceRoute;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$ActiveHeadsetRoute;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$ActiveSpeakerRoute;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$AudioState;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$BluetoothRoute;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$EarpieceRoute;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$HeadsetRoute;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$QuiescentBluetoothRoute;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$QuiescentEarpieceRoute;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$QuiescentHeadsetRoute;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$QuiescentSpeakerRoute;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$RingingBluetoothRoute;
-Lcom/android/server/telecom/CallAudioRouteStateMachine$SpeakerRoute;
-Lcom/android/server/telecom/CallerInfoAsyncQueryFactory;
-Lcom/android/server/telecom/CallerInfoLookupHelper;
-Lcom/android/server/telecom/CallerInfoLookupHelper$1;
-Lcom/android/server/telecom/CallerInfoLookupHelper$CallerInfoQueryInfo;
-Lcom/android/server/telecom/CallerInfoLookupHelper$OnQueryCompleteListener;
-Lcom/android/server/telecom/callfiltering/CallFilterResultCallback;
-Lcom/android/server/telecom/CallIdMapper;
-Lcom/android/server/telecom/CallIdMapper$BiMap;
-Lcom/android/server/telecom/CallIdMapper$ICallInfo;
-Lcom/android/server/telecom/CallIntentProcessor;
-Lcom/android/server/telecom/CallIntentProcessor$Adapter;
-Lcom/android/server/telecom/CallIntentProcessor$AdapterImpl;
-Lcom/android/server/telecom/Call$Listener;
-Lcom/android/server/telecom/Call$ListenerBase;
-Lcom/android/server/telecom/CallLogManager;
-Lcom/android/server/telecom/CallLogManager$AddCallArgs;
-Lcom/android/server/telecom/CallLogManager$LogCallAsyncTask;
-Lcom/android/server/telecom/CallLogManager$LogCallCompletedListener;
-Lcom/android/server/telecom/CallsManager;
-Lcom/android/server/telecom/CallsManager$CallsManagerListener;
-Lcom/android/server/telecom/CallsManagerListenerBase;
-Lcom/android/server/telecom/CallState;
-Lcom/android/server/telecom/components/BluetoothPhoneService;
-Lcom/android/server/telecom/components/PrimaryCallReceiver;
-Lcom/android/server/telecom/components/TelecomBroadcastReceiver;
-Lcom/android/server/telecom/components/TelecomService;
-Lcom/android/server/telecom/components/TelecomService$1;
-Lcom/android/server/telecom/components/TelecomService$2;
-Lcom/android/server/telecom/components/TelecomService$3;
-Lcom/android/server/telecom/components/TelecomService$4;
-Lcom/android/server/telecom/components/TelecomService$5;
-Lcom/android/server/telecom/components/TelecomService$6;
-Lcom/android/server/telecom/components/TelecomService$7;
-Lcom/android/server/telecom/components/TelecomService$8;
-Lcom/android/server/telecom/components/UserCallIntentProcessor;
-Lcom/android/server/telecom/components/UserCallIntentProcessorFactory;
-Lcom/android/server/telecom/ConnectionServiceRepository;
-Lcom/android/server/telecom/ConnectionServiceRepository$1;
-Lcom/android/server/telecom/ConnectionServiceWrapper;
-Lcom/android/server/telecom/ConnectionServiceWrapper$1;
-Lcom/android/server/telecom/ConnectionServiceWrapper$2;
-Lcom/android/server/telecom/ConnectionServiceWrapper$Adapter;
-Lcom/android/server/telecom/ContactsAsyncHelper;
-Lcom/android/server/telecom/ContactsAsyncHelper$ContentResolverAdapter;
-Lcom/android/server/telecom/CreateConnectionProcessor;
-Lcom/android/server/telecom/CreateConnectionProcessor$CallAttemptRecord;
-Lcom/android/server/telecom/CreateConnectionResponse;
-Lcom/android/server/telecom/CreateConnectionTimeout;
-Lcom/android/server/telecom/CurrentUserProxy;
-Lcom/android/server/telecom/DefaultDialerCache;
-Lcom/android/server/telecom/DefaultDialerCache$1;
-Lcom/android/server/telecom/DefaultDialerCache$2;
-Lcom/android/server/telecom/DefaultDialerCache$DefaultDialerManagerAdapter;
-Lcom/android/server/telecom/DefaultDialerCache$DefaultDialerManagerAdapterImpl;
-Lcom/android/server/telecom/DialerCodeReceiver;
-Lcom/android/server/telecom/DockManager;
-Lcom/android/server/telecom/DockManager$DockBroadcastReceiver;
-Lcom/android/server/telecom/DockManager$Listener;
-Lcom/android/server/telecom/DtmfLocalTonePlayer;
-Lcom/android/server/telecom/DtmfLocalTonePlayer$1;
-Lcom/android/server/telecom/EmergencyCallHelper;
-Lcom/android/server/telecom/HeadsetMediaButton;
-Lcom/android/server/telecom/HeadsetMediaButton$1;
-Lcom/android/server/telecom/HeadsetMediaButton$2;
-Lcom/android/server/telecom/HeadsetMediaButtonFactory;
-Lcom/android/server/telecom/InCallAdapter;
-Lcom/android/server/telecom/InCallController;
-Lcom/android/server/telecom/InCallController$1;
-Lcom/android/server/telecom/InCallController$2;
-Lcom/android/server/telecom/InCallController$3;
-Lcom/android/server/telecom/InCallController$CarSwappingInCallServiceConnection;
-Lcom/android/server/telecom/InCallController$EmergencyInCallServiceConnection;
-Lcom/android/server/telecom/InCallController$EmergencyInCallServiceConnection$1;
-Lcom/android/server/telecom/InCallController$InCallServiceBindingConnection;
-Lcom/android/server/telecom/InCallController$InCallServiceBindingConnection$1;
-Lcom/android/server/telecom/InCallController$InCallServiceConnection;
-Lcom/android/server/telecom/InCallController$InCallServiceConnection$Listener;
-Lcom/android/server/telecom/InCallController$InCallServiceInfo;
-Lcom/android/server/telecom/InCallController$NonUIInCallServiceConnectionCollection;
-Lcom/android/server/telecom/InCallTonePlayer$Factory;
-Lcom/android/server/telecom/InCallWakeLockController;
-Lcom/android/server/telecom/InCallWakeLockControllerFactory;
-Lcom/android/server/telecom/InterruptionFilterProxy;
-Lcom/android/server/telecom/LogUtils;
-Lcom/android/server/telecom/LogUtils$Events$Timings;
-Lcom/android/server/telecom/MissedCallNotifier;
-Lcom/android/server/telecom/MissedCallNotifier$CallInfoFactory;
-Lcom/android/server/telecom/nano/TelecomLogClass$InCallServiceInfo;
-Lcom/android/server/telecom/NewOutgoingCallIntentBroadcaster;
-Lcom/android/server/telecom/NewOutgoingCallIntentBroadcaster$NewOutgoingCallBroadcastIntentReceiver;
-Lcom/android/server/telecom/ParcelableCallUtils;
-Lcom/android/server/telecom/PhoneAccountRegistrar;
-Lcom/android/server/telecom/PhoneAccountRegistrar$1;
-Lcom/android/server/telecom/PhoneAccountRegistrar$2;
-Lcom/android/server/telecom/PhoneAccountRegistrar$3;
-Lcom/android/server/telecom/PhoneAccountRegistrar$4;
-Lcom/android/server/telecom/PhoneAccountRegistrar$5;
-Lcom/android/server/telecom/PhoneAccountRegistrar$AsyncXmlWriter;
-Lcom/android/server/telecom/PhoneAccountRegistrar$DefaultPhoneAccountHandle;
-Lcom/android/server/telecom/PhoneAccountRegistrar$Listener;
-Lcom/android/server/telecom/PhoneAccountRegistrar$PhoneAccountRegistrarWriteLock;
-Lcom/android/server/telecom/PhoneAccountRegistrar$State;
-Lcom/android/server/telecom/PhoneAccountRegistrar$XmlSerialization;
-Lcom/android/server/telecom/PhoneNumberUtilsAdapter;
-Lcom/android/server/telecom/PhoneNumberUtilsAdapterImpl;
-Lcom/android/server/telecom/PhoneStateBroadcaster;
-Lcom/android/server/telecom/ProximitySensorManager;
-Lcom/android/server/telecom/ProximitySensorManagerFactory;
-Lcom/android/server/telecom/RespondViaSmsManager;
-Lcom/android/server/telecom/RespondViaSmsManager$1;
-Lcom/android/server/telecom/RingbackPlayer;
-Lcom/android/server/telecom/Ringer;
-Lcom/android/server/telecom/RingtoneFactory;
-Lcom/android/server/telecom/ServiceBinder;
-Lcom/android/server/telecom/ServiceBinder$BindCallback;
-Lcom/android/server/telecom/ServiceBinder$Binder2;
-Lcom/android/server/telecom/ServiceBinder$Listener;
-Lcom/android/server/telecom/ServiceBinder$ServiceBinderConnection;
-Lcom/android/server/telecom/StatusBarNotifier;
-Lcom/android/server/telecom/SystemSettingsUtil;
-Lcom/android/server/telecom/SystemStateProvider;
-Lcom/android/server/telecom/SystemStateProvider$1;
-Lcom/android/server/telecom/SystemStateProvider$SystemStateListener;
-Lcom/android/server/telecom/TelecomBroadcastIntentProcessor;
-Lcom/android/server/telecom/TelecomLoaderService;
-Lcom/android/server/telecom/TelecomLoaderService$1;
-Lcom/android/server/telecom/TelecomLoaderService$2;
-Lcom/android/server/telecom/TelecomLoaderService$3;
-Lcom/android/server/telecom/TelecomLoaderService$4;
-Lcom/android/server/telecom/TelecomLoaderService$5;
-Lcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;
-Lcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection$1;
-Lcom/android/server/telecom/TelecomServiceImpl;
-Lcom/android/server/telecom/TelecomServiceImpl$1;
-Lcom/android/server/telecom/TelecomServiceImpl$SubscriptionManagerAdapter;
-Lcom/android/server/telecom/TelecomServiceImpl$SubscriptionManagerAdapterImpl;
-Lcom/android/server/telecom/TelecomSystem;
-Lcom/android/server/telecom/TelecomSystem$1;
-Lcom/android/server/telecom/TelecomSystem$2;
-Lcom/android/server/telecom/TelecomSystem$3;
-Lcom/android/server/telecom/TelecomSystem$4;
-Lcom/android/server/telecom/TelecomSystem$5;
-Lcom/android/server/telecom/TelecomSystem$6;
-Lcom/android/server/telecom/TelecomSystem$SyncRoot;
-Lcom/android/server/telecom/TelecomWakeLock;
-Lcom/android/server/telecom/TelecomWakeLock$WakeLockAdapter;
-Lcom/android/server/telecom/TelephonyUtil;
-Lcom/android/server/telecom/Timeouts;
-Lcom/android/server/telecom/Timeouts$Adapter;
-Lcom/android/server/telecom/TtyManager;
-Lcom/android/server/telecom/TtyManager$TtyBroadcastReceiver;
-Lcom/android/server/telecom/ui/MissedCallNotifierImpl;
-Lcom/android/server/telecom/ui/MissedCallNotifierImpl$2;
-Lcom/android/server/telecom/ui/MissedCallNotifierImpl$DefaultNotificationBuilderFactory;
-Lcom/android/server/telecom/ui/MissedCallNotifierImpl$MissedCallNotifierImplFactory;
-Lcom/android/server/telecom/ui/MissedCallNotifierImpl$NotificationBuilderFactory;
-Lcom/android/server/telecom/UserUtil;
-Lcom/android/server/telecom/VideoProviderProxy$Listener;
-Lcom/android/server/telecom/WiredHeadsetManager;
-Lcom/android/server/telecom/WiredHeadsetManager$Listener;
-Lcom/android/server/telecom/WiredHeadsetManager$WiredHeadsetCallback;
-Lcom/android/server/TelephonyRegistry;
-Lcom/android/server/TelephonyRegistry$1;
-Lcom/android/server/TelephonyRegistry$2;
-Lcom/android/server/TelephonyRegistry$LogSSC;
-Lcom/android/server/TelephonyRegistry$Record;
-Lcom/android/server/TextServicesManagerService;
-Lcom/android/server/TextServicesManagerService$InternalDeathRecipient;
-Lcom/android/server/TextServicesManagerService$InternalServiceConnection;
-Lcom/android/server/TextServicesManagerService$Lifecycle;
-Lcom/android/server/TextServicesManagerService$SpellCheckerBindGroup;
-Lcom/android/server/TextServicesManagerService$TextServicesBroadcastReceiver;
-Lcom/android/server/TextServicesManagerService$TextServicesMonitor;
-Lcom/android/server/TextServicesManagerService$TextServicesSettings;
-Lcom/android/server/text/TextClassificationService;
-Lcom/android/server/text/TextClassificationService$Lifecycle;
-Lcom/android/server/trust/TrustArchive;
-Lcom/android/server/trust/TrustManagerService;
-Lcom/android/server/trust/TrustManagerService$1;
-Lcom/android/server/trust/TrustManagerService$2;
-Lcom/android/server/trust/TrustManagerService$3;
-Lcom/android/server/trust/TrustManagerService$Receiver;
-Lcom/android/server/trust/TrustManagerService$StrongAuthTracker;
-Lcom/android/server/tv/TvInputHal;
-Lcom/android/server/tv/UinputBridge;
-Lcom/android/server/twilight/TwilightListener;
-Lcom/android/server/twilight/TwilightManager;
-Lcom/android/server/twilight/TwilightService;
-Lcom/android/server/twilight/TwilightService$1;
-Lcom/android/server/UiModeManagerService;
-Lcom/android/server/UiModeManagerService$1;
-Lcom/android/server/UiModeManagerService$2;
-Lcom/android/server/UiModeManagerService$3;
-Lcom/android/server/UiModeManagerService$4;
-Lcom/android/server/UiModeManagerService$5;
-Lcom/android/server/UiModeManagerService$6;
-Lcom/android/server/UiThread;
-Lcom/android/server/UpdateLockService;
-Lcom/android/server/UpdateLockService$LockWatcher;
-Lcom/android/server/usage/AppIdleHistory;
-Lcom/android/server/usage/AppIdleHistory$PackageHistory;
-Lcom/android/server/usage/IntervalStats;
-Lcom/android/server/usage/StorageStatsService;
-Lcom/android/server/usage/StorageStatsService$1;
-Lcom/android/server/usage/StorageStatsService$Lifecycle;
-Lcom/android/server/usage/UnixCalendar;
-Lcom/android/server/usage/UsageStatsDatabase;
-Lcom/android/server/usage/UsageStatsDatabase$1;
-Lcom/android/server/usage/UsageStatsDatabase$StatCombiner;
-Lcom/android/server/usage/UsageStatsService;
-Lcom/android/server/usage/UsageStatsService$1;
-Lcom/android/server/usage/UsageStatsService$2;
-Lcom/android/server/usage/UsageStatsService$BinderService;
-Lcom/android/server/usage/UsageStatsService$DeviceStateReceiver;
-Lcom/android/server/usage/UsageStatsService$H;
-Lcom/android/server/usage/UsageStatsService$LocalService;
-Lcom/android/server/usage/UsageStatsService$PackageReceiver;
-Lcom/android/server/usage/UsageStatsService$SettingsObserver;
-Lcom/android/server/usage/UsageStatsService$UserActionsReceiver;
-Lcom/android/server/usage/UsageStatsXml;
-Lcom/android/server/usage/UsageStatsXmlV1;
-Lcom/android/server/usage/UserUsageStatsService;
-Lcom/android/server/usage/UserUsageStatsService$1;
-Lcom/android/server/usage/UserUsageStatsService$2;
-Lcom/android/server/usage/UserUsageStatsService$3;
-Lcom/android/server/usage/UserUsageStatsService$StatsUpdatedListener;
-Lcom/android/server/usb/MtpNotificationManager;
-Lcom/android/server/usb/MtpNotificationManager$OnOpenInAppListener;
-Lcom/android/server/usb/MtpNotificationManager$Receiver;
-Lcom/android/server/usb/UsbAlsaManager;
-Lcom/android/server/usb/UsbAlsaManager$1;
-Lcom/android/server/usb/UsbAlsaManager$AlsaDevice;
-Lcom/android/server/usb/UsbDebuggingManager;
-Lcom/android/server/usb/UsbDebuggingManager$UsbDebuggingHandler;
-Lcom/android/server/usb/UsbDebuggingManager$UsbDebuggingThread;
-Lcom/android/server/usb/UsbDeviceManager;
-Lcom/android/server/usb/UsbDeviceManager$1;
-Lcom/android/server/usb/UsbDeviceManager$2;
-Lcom/android/server/usb/UsbDeviceManager$AdbSettingsObserver;
-Lcom/android/server/usb/UsbDeviceManager$UsbHandler;
-Lcom/android/server/usb/UsbHostManager;
-Lcom/android/server/usb/UsbHostManager$1;
-Lcom/android/server/usb/UsbMidiDevice;
-Lcom/android/server/usb/UsbPortManager;
-Lcom/android/server/usb/UsbPortManager$1;
-Lcom/android/server/usb/UsbPortManager$2;
-Lcom/android/server/usb/UsbPortManager$DeathRecipient;
-Lcom/android/server/usb/UsbPortManager$HALCallback;
-Lcom/android/server/usb/UsbPortManager$PortInfo;
-Lcom/android/server/usb/UsbPortManager$RawPortInfo;
-Lcom/android/server/usb/UsbPortManager$RawPortInfo$1;
-Lcom/android/server/usb/UsbPortManager$ServiceNotification;
-Lcom/android/server/usb/UsbProfileGroupSettingsManager;
-Lcom/android/server/usb/UsbProfileGroupSettingsManager$1;
-Lcom/android/server/usb/UsbProfileGroupSettingsManager$AccessoryFilter;
-Lcom/android/server/usb/UsbProfileGroupSettingsManager$MyPackageMonitor;
-Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;
-Lcom/android/server/usb/UsbService;
-Lcom/android/server/usb/UsbService$1;
-Lcom/android/server/usb/UsbService$Lifecycle;
-Lcom/android/server/usb/UsbSettingsManager;
-Lcom/android/server/utils/ManagedApplicationService$BinderChecker;
-Lcom/android/server/VibratorService;
-Lcom/android/server/VibratorService$1;
-Lcom/android/server/VibratorService$2;
-Lcom/android/server/VibratorService$3;
-Lcom/android/server/VibratorService$4;
-Lcom/android/server/VibratorService$SettingsObserver;
-Lcom/android/server/VibratorService$VibrateThread;
-Lcom/android/server/VibratorService$Vibration;
-Lcom/android/server/VibratorService$VibrationInfo;
-Lcom/android/server/voiceinteraction/DatabaseHelper;
-Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;
-Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$1;
-Lcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;
-Lcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$1;
-Lcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$2;
-Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$LocalService;
-Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;
-Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$1;
-Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$SettingsObserver;
-Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;
-Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$1;
-Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$2;
-Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$3;
-Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$4;
-Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$5;
-Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$AssistDataForActivity;
-Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$Callback;
-Lcom/android/server/vr/CompatibilityDisplay;
-Lcom/android/server/vr/CompatibilityDisplay$1;
-Lcom/android/server/vr/EnabledComponentsObserver;
-Lcom/android/server/vr/EnabledComponentsObserver$1;
-Lcom/android/server/vr/EnabledComponentsObserver$EnabledComponentChangeListener;
-Lcom/android/server/vr/SettingsObserver;
-Lcom/android/server/vr/SettingsObserver$1;
-Lcom/android/server/vr/SettingsObserver$2;
-Lcom/android/server/vr/SettingsObserver$SettingChangeListener;
-Lcom/android/server/vr/VrManagerInternal;
-Lcom/android/server/vr/VrManagerService;
-Lcom/android/server/vr/VrManagerService$1;
-Lcom/android/server/vr/VrManagerService$2;
-Lcom/android/server/vr/VrManagerService$3;
-Lcom/android/server/vr/VrManagerService$LocalService;
-Lcom/android/server/vr/VrManagerService$NotificationAccessManager;
-Lcom/android/server/vr/VrManagerService$VrState;
-Lcom/android/server/wallpaper/WallpaperManagerService;
-Lcom/android/server/wallpaper/WallpaperManagerService$1;
-Lcom/android/server/wallpaper/WallpaperManagerService$2;
-Lcom/android/server/wallpaper/WallpaperManagerService$3;
-Lcom/android/server/wallpaper/WallpaperManagerService$4;
-Lcom/android/server/wallpaper/WallpaperManagerService$Lifecycle;
-Lcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;
-Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;
-Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;
-Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperObserver;
-Lcom/android/server/Watchdog;
-Lcom/android/server/Watchdog$BinderThreadMonitor;
-Lcom/android/server/Watchdog$HandlerChecker;
-Lcom/android/server/Watchdog$Monitor;
-Lcom/android/server/Watchdog$RebootRequestReceiver;
-Lcom/android/server/webkit/SystemImpl;
-Lcom/android/server/webkit/SystemImpl$LazyHolder;
-Lcom/android/server/webkit/SystemInterface;
-Lcom/android/server/webkit/WebViewUpdateService;
-Lcom/android/server/webkit/WebViewUpdateService$1;
-Lcom/android/server/webkit/WebViewUpdateService$BinderService;
-Lcom/android/server/webkit/WebViewUpdateServiceImpl;
-Lcom/android/server/webkit/WebViewUpdateServiceImpl$WebViewUpdater;
-Lcom/android/server/webkit/WebViewUpdateServiceImpl$WebViewUpdater$ProviderAndPackageInfo;
-Lcom/android/server/webkit/WebViewUpdateServiceImpl$WebViewUpdater$WebViewPackageMissingException;
-Lcom/android/server/WidgetBackupProvider;
-Lcom/android/server/wifi/BackupManagerProxy;
-Lcom/android/server/wifi/BaseWifiDiagnostics;
-Lcom/android/server/wifi/BuildProperties;
-Lcom/android/server/wifi/Clock;
-Lcom/android/server/wifi/ConfigurationMap;
-Lcom/android/server/wifi/ExternalScoreEvaluator;
-Lcom/android/server/wifi/FrameworkFacade;
-Lcom/android/server/wifi/HalDeviceManager;
-Lcom/android/server/wifi/HalDeviceManager$ManagerStatusListener;
-Lcom/android/server/wifi/HalDeviceManager$WifiEventCallback;
-Lcom/android/server/wifi/hotspot2/AnqpCache;
-Lcom/android/server/wifi/hotspot2/anqp/Constants$ANQPElementType;
-Lcom/android/server/wifi/hotspot2/ANQPRequestManager;
-Lcom/android/server/wifi/hotspot2/NetworkDetail;
-Lcom/android/server/wifi/hotspot2/NetworkDetail$Ant;
-Lcom/android/server/wifi/hotspot2/NetworkDetail$HSRelease;
-Lcom/android/server/wifi/hotspot2/PasspointEventHandler;
-Lcom/android/server/wifi/hotspot2/PasspointEventHandler$Callbacks;
-Lcom/android/server/wifi/hotspot2/PasspointManager;
-Lcom/android/server/wifi/hotspot2/PasspointManager$CallbackHandler;
-Lcom/android/server/wifi/hotspot2/PasspointNetworkEvaluator;
-Lcom/android/server/wifi/hotspot2/PasspointObjectFactory;
-Lcom/android/server/wifi/hotspot2/Utils;
-Lcom/android/server/wifi/LastMileLogger;
-Lcom/android/server/wifi/LogcatLog;
-Lcom/android/server/wifi/LogcatLog$RealLogMessage;
-Lcom/android/server/wifi/nano/WifiMetricsProto$AlertReasonCount;
-Lcom/android/server/wifi/nano/WifiMetricsProto$ConnectionEvent;
-Lcom/android/server/wifi/nano/WifiMetricsProto$RouterFingerPrint;
-Lcom/android/server/wifi/nano/WifiMetricsProto$RssiPollCount;
-Lcom/android/server/wifi/nano/WifiMetricsProto$SoftApDurationBucket;
-Lcom/android/server/wifi/nano/WifiMetricsProto$SoftApReturnCodeCount;
-Lcom/android/server/wifi/nano/WifiMetricsProto$WifiLog;
-Lcom/android/server/wifi/nano/WifiMetricsProto$WifiLog$ScanReturnEntry;
-Lcom/android/server/wifi/nano/WifiMetricsProto$WifiLog$WifiSystemStateEntry;
-Lcom/android/server/wifi/nano/WifiMetricsProto$WifiScoreCount;
-Lcom/android/server/wifi/p2p/WifiP2pService;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$1;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$ClientHandler;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$1;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$DefaultState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$FrequencyConflictState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$GroupCreatedState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$GroupCreatingState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$GroupNegotiationState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$InactiveState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$OngoingGroupRemovalState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pDisabledState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pDisablingState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pEnabledState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pEnablingState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$P2pNotSupportedState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$ProvisionDiscoveryState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$UserAuthorizingInviteRequestState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$UserAuthorizingJoinState;
-Lcom/android/server/wifi/p2p/WifiP2pServiceImpl$P2pStateMachine$UserAuthorizingNegotiationRequestState;
-Lcom/android/server/wifi/PropertyService;
-Lcom/android/server/wifi/RecommendedNetworkEvaluator;
-Lcom/android/server/wifi/RecommendedNetworkEvaluator$1;
-Lcom/android/server/wifi/RttService;
-Lcom/android/server/wifi/RttService$RttServiceImpl;
-Lcom/android/server/wifi/RttService$RttServiceImpl$1;
-Lcom/android/server/wifi/RttService$RttServiceImpl$2;
-Lcom/android/server/wifi/RttService$RttServiceImpl$ClientHandler;
-Lcom/android/server/wifi/RttService$RttServiceImpl$ClientInfo;
-Lcom/android/server/wifi/RttService$RttServiceImpl$InterfaceEventHandler;
-Lcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine;
-Lcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine$DefaultState;
-Lcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine$EnabledState;
-Lcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine$InitiatorEnabledState;
-Lcom/android/server/wifi/RttService$RttServiceImpl$RttStateMachine$ResponderEnabledState;
-Lcom/android/server/wifi/SavedNetworkEvaluator;
-Lcom/android/server/wifi/SavedNetworkEvaluator$1;
-Lcom/android/server/wifi/ScanDetail;
-Lcom/android/server/wifi/ScanDetailCache;
-Lcom/android/server/wifi/scanner/BackgroundScanScheduler;
-Lcom/android/server/wifi/scanner/BackgroundScanScheduler$Bucket;
-Lcom/android/server/wifi/scanner/BackgroundScanScheduler$BucketList;
-Lcom/android/server/wifi/scanner/BackgroundScanScheduler$BucketList$1;
-Lcom/android/server/wifi/scanner/ChannelHelper;
-Lcom/android/server/wifi/scanner/ChannelHelper$ChannelCollection;
-Lcom/android/server/wifi/scanner/HalChannelHelper;
-Lcom/android/server/wifi/scanner/HalWifiScannerImpl;
-Lcom/android/server/wifi/scanner/KnownBandsChannelHelper;
-Lcom/android/server/wifi/scanner/KnownBandsChannelHelper$KnownBandsChannelCollection;
-Lcom/android/server/wifi/scanner/ScanScheduleUtil;
-Lcom/android/server/wifi/scanner/SupplicantWifiScannerImpl;
-Lcom/android/server/wifi/scanner/SupplicantWifiScannerImpl$1;
-Lcom/android/server/wifi/scanner/SupplicantWifiScannerImpl$2;
-Lcom/android/server/wifi/scanner/SupplicantWifiScannerImpl$3;
-Lcom/android/server/wifi/scanner/SupplicantWifiScannerImpl$ChangeBuffer;
-Lcom/android/server/wifi/scanner/SupplicantWifiScannerImpl$HwPnoDebouncer;
-Lcom/android/server/wifi/scanner/SupplicantWifiScannerImpl$HwPnoDebouncer$1;
-Lcom/android/server/wifi/scanner/SupplicantWifiScannerImpl$HwPnoDebouncer$Listener;
-Lcom/android/server/wifi/scanner/SupplicantWifiScannerImpl$LastScanSettings;
-Lcom/android/server/wifi/scanner/SupplicantWifiScannerImpl$ScanBuffer;
-Lcom/android/server/wifi/scanner/WifiScannerImpl;
-Lcom/android/server/wifi/scanner/WifiScannerImpl$1;
-Lcom/android/server/wifi/scanner/WifiScannerImpl$2;
-Lcom/android/server/wifi/scanner/WifiScannerImpl$WifiScannerImplFactory;
-Lcom/android/server/wifi/scanner/WifiScanningService;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$1;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientHandler;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$ClientInfo;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$ExternalClientInfo;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestInfo;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$RequestList;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine$DefaultState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine$PausedState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiBackgroundScanStateMachine$StartedState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiChangeStateMachine;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiChangeStateMachine$DefaultState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiChangeStateMachine$MovingState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiChangeStateMachine$StationaryState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$DefaultState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$HwPnoScanState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$SingleScanState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$StartedState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiPnoScanStateMachine$SwPnoScanState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$DefaultState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$DriverStartedState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$IdleState;
-Lcom/android/server/wifi/scanner/WifiScanningServiceImpl$WifiSingleScanStateMachine$ScanningState;
-Lcom/android/server/wifi/SIMAccessor;
-Lcom/android/server/wifi/StateChangeResult;
-Lcom/android/server/wifi/StateMachineDeathRecipient;
-Lcom/android/server/wifi/SupplicantStateTracker;
-Lcom/android/server/wifi/SupplicantStateTracker$CompletedState;
-Lcom/android/server/wifi/SupplicantStateTracker$ConnectionActiveState;
-Lcom/android/server/wifi/SupplicantStateTracker$DefaultState;
-Lcom/android/server/wifi/SupplicantStateTracker$DisconnectedState;
-Lcom/android/server/wifi/SupplicantStateTracker$DormantState;
-Lcom/android/server/wifi/SupplicantStateTracker$HandshakeState;
-Lcom/android/server/wifi/SupplicantStateTracker$InactiveState;
-Lcom/android/server/wifi/SupplicantStateTracker$ScanState;
-Lcom/android/server/wifi/SupplicantStateTracker$UninitializedState;
-Lcom/android/server/wifi/SystemBuildProperties;
-Lcom/android/server/wifi/SystemPropertyService;
-Lcom/android/server/wifi/util/ByteArrayRingBuffer;
-Lcom/android/server/wifi/util/InformationElementUtil;
-Lcom/android/server/wifi/util/InformationElementUtil$BssLoad;
-Lcom/android/server/wifi/util/InformationElementUtil$Capabilities;
-Lcom/android/server/wifi/util/InformationElementUtil$ExtendedCapabilities;
-Lcom/android/server/wifi/util/InformationElementUtil$HtOperation;
-Lcom/android/server/wifi/util/InformationElementUtil$Interworking;
-Lcom/android/server/wifi/util/InformationElementUtil$RoamingConsortium;
-Lcom/android/server/wifi/util/InformationElementUtil$SupportedRates;
-Lcom/android/server/wifi/util/InformationElementUtil$TrafficIndicationMap;
-Lcom/android/server/wifi/util/InformationElementUtil$VhtOperation;
-Lcom/android/server/wifi/util/InformationElementUtil$Vsa;
-Lcom/android/server/wifi/util/InformationElementUtil$WifiMode;
-Lcom/android/server/wifi/util/ScanResultUtil;
-Lcom/android/server/wifi/util/TelephonyUtil;
-Lcom/android/server/wifi/util/TelephonyUtil$SimAuthRequestData;
-Lcom/android/server/wifi/util/TelephonyUtil$SimAuthResponseData;
-Lcom/android/server/wifi/util/WifiAsyncChannel;
-Lcom/android/server/wifi/util/WifiHandler;
-Lcom/android/server/wifi/util/WifiPermissionsUtil;
-Lcom/android/server/wifi/util/WifiPermissionsWrapper;
-Lcom/android/server/wifi/util/XmlUtil;
-Lcom/android/server/wifi/util/XmlUtil$IpConfigurationXmlUtil;
-Lcom/android/server/wifi/util/XmlUtil$NetworkSelectionStatusXmlUtil;
-Lcom/android/server/wifi/util/XmlUtil$WifiConfigurationXmlUtil;
-Lcom/android/server/wifi/WifiApConfigStore;
-Lcom/android/server/wifi/WifiBackupRestore;
-Lcom/android/server/wifi/WifiCertManager;
-Lcom/android/server/wifi/WifiCertManager$1;
-Lcom/android/server/wifi/WifiConfigManager;
-Lcom/android/server/wifi/WifiConfigManager$1;
-Lcom/android/server/wifi/WifiConfigStore;
-Lcom/android/server/wifi/WifiConfigStore$1;
-Lcom/android/server/wifi/WifiConfigStoreData;
-Lcom/android/server/wifi/WifiConfigStoreData$SharedData;
-Lcom/android/server/wifi/WifiConfigStoreData$UserData;
-Lcom/android/server/wifi/WifiConfigStoreLegacy;
-Lcom/android/server/wifi/WifiConfigStore$StoreFile;
-Lcom/android/server/wifi/WifiConfigurationUtil;
-Lcom/android/server/wifi/WifiConfigurationUtil$WifiConfigurationComparator;
-Lcom/android/server/wifi/WifiConnectivityManager;
-Lcom/android/server/wifi/WifiConnectivityManager$1;
-Lcom/android/server/wifi/WifiConnectivityManager$2;
-Lcom/android/server/wifi/WifiConnectivityManager$3;
-Lcom/android/server/wifi/WifiConnectivityManager$AllSingleScanListener;
-Lcom/android/server/wifi/WifiConnectivityManager$PnoScanListener;
-Lcom/android/server/wifi/WifiConnectivityManager$SingleScanListener;
-Lcom/android/server/wifi/WifiController;
-Lcom/android/server/wifi/WifiController$1;
-Lcom/android/server/wifi/WifiController$2;
-Lcom/android/server/wifi/WifiController$3;
-Lcom/android/server/wifi/WifiController$4;
-Lcom/android/server/wifi/WifiController$ApEnabledState;
-Lcom/android/server/wifi/WifiController$ApStaDisabledState;
-Lcom/android/server/wifi/WifiController$DefaultState;
-Lcom/android/server/wifi/WifiController$DeviceActiveState;
-Lcom/android/server/wifi/WifiController$DeviceInactiveState;
-Lcom/android/server/wifi/WifiController$EcmState;
-Lcom/android/server/wifi/WifiController$FullHighPerfLockHeldState;
-Lcom/android/server/wifi/WifiController$FullLockHeldState;
-Lcom/android/server/wifi/WifiController$NoLockHeldState;
-Lcom/android/server/wifi/WifiController$ScanOnlyLockHeldState;
-Lcom/android/server/wifi/WifiController$StaDisabledWithScanState;
-Lcom/android/server/wifi/WifiController$StaEnabledState;
-Lcom/android/server/wifi/WifiCountryCode;
-Lcom/android/server/wifi/WifiDiagnostics;
-Lcom/android/server/wifi/WifiDiagnostics$1;
-Lcom/android/server/wifi/WifiDiagnostics$LimitedCircularArray;
-Lcom/android/server/wifi/WifiInjector;
-Lcom/android/server/wifi/WifiKeyStore;
-Lcom/android/server/wifi/WifiLastResortWatchdog;
-Lcom/android/server/wifi/WifiLastResortWatchdog$AvailableNetworkFailureCount;
-Lcom/android/server/wifi/WifiLockManager;
-Lcom/android/server/wifi/WifiLockManager$WifiLock;
-Lcom/android/server/wifi/WifiLog;
-Lcom/android/server/wifi/WifiLog$LogMessage;
-Lcom/android/server/wifi/WifiMetrics;
-Lcom/android/server/wifi/WifiMetrics$ConnectionEvent;
-Lcom/android/server/wifi/WifiMetrics$RouterFingerPrint;
-Lcom/android/server/wifi/WifiMonitor;
-Lcom/android/server/wifi/WifiMonitor$1;
-Lcom/android/server/wifi/WifiMonitor$MonitorThread;
-Lcom/android/server/wifi/WifiMulticastLockManager;
-Lcom/android/server/wifi/WifiMulticastLockManager$FilterController;
-Lcom/android/server/wifi/WifiMulticastLockManager$Multicaster;
-Lcom/android/server/wifi/WifiNative;
-Lcom/android/server/wifi/WifiNative$BucketSettings;
-Lcom/android/server/wifi/WifiNative$ChannelSettings;
-Lcom/android/server/wifi/WifiNative$HotlistEventHandler;
-Lcom/android/server/wifi/WifiNative$MonitorThread;
-Lcom/android/server/wifi/WifiNative$PnoEventHandler;
-Lcom/android/server/wifi/WifiNative$RingBufferStatus;
-Lcom/android/server/wifi/WifiNative$RttEventHandler;
-Lcom/android/server/wifi/WifiNative$ScanCapabilities;
-Lcom/android/server/wifi/WifiNative$ScanEventHandler;
-Lcom/android/server/wifi/WifiNative$ScanSettings;
-Lcom/android/server/wifi/WifiNative$SignificantWifiChangeEventHandler;
-Lcom/android/server/wifi/WifiNative$WifiLoggerEventHandler;
-Lcom/android/server/wifi/WifiNative$WifiRssiEventHandler;
-Lcom/android/server/wifi/WifiNetworkHistory;
-Lcom/android/server/wifi/WifiNetworkHistory$1;
-Lcom/android/server/wifi/WifiNetworkSelector;
-Lcom/android/server/wifi/WifiNetworkSelector$BssidBlacklistStatus;
-Lcom/android/server/wifi/WifiNetworkSelector$NetworkEvaluator;
-Lcom/android/server/wifi/WifiScoreReport;
-Lcom/android/server/wifi/WifiService;
-Lcom/android/server/wifi/WifiServiceImpl;
-Lcom/android/server/wifi/WifiServiceImpl$1;
-Lcom/android/server/wifi/WifiServiceImpl$2;
-Lcom/android/server/wifi/WifiServiceImpl$3;
-Lcom/android/server/wifi/WifiServiceImpl$4;
-Lcom/android/server/wifi/WifiServiceImpl$5;
-Lcom/android/server/wifi/WifiServiceImpl$ClientHandler;
-Lcom/android/server/wifi/WifiServiceImpl$WifiStateMachineHandler;
-Lcom/android/server/wifi/WifiSettingsStore;
-Lcom/android/server/wifi/WifiStateMachine;
-Lcom/android/server/wifi/WifiStateMachine$1;
-Lcom/android/server/wifi/WifiStateMachine$2;
-Lcom/android/server/wifi/WifiStateMachine$3;
-Lcom/android/server/wifi/WifiStateMachine$4;
-Lcom/android/server/wifi/WifiStateMachine$ConnectedState;
-Lcom/android/server/wifi/WifiStateMachine$ConnectModeState;
-Lcom/android/server/wifi/WifiStateMachine$DefaultState;
-Lcom/android/server/wifi/WifiStateMachine$DisconnectedState;
-Lcom/android/server/wifi/WifiStateMachine$DisconnectingState;
-Lcom/android/server/wifi/WifiStateMachine$InitialState;
-Lcom/android/server/wifi/WifiStateMachine$IpManagerCallback;
-Lcom/android/server/wifi/WifiStateMachine$L2ConnectedState;
-Lcom/android/server/wifi/WifiStateMachine$ObtainingIpState;
-Lcom/android/server/wifi/WifiStateMachine$RoamingState;
-Lcom/android/server/wifi/WifiStateMachine$ScanModeState;
-Lcom/android/server/wifi/WifiStateMachine$SoftApState;
-Lcom/android/server/wifi/WifiStateMachine$SupplicantStartedState;
-Lcom/android/server/wifi/WifiStateMachine$SupplicantStartingState;
-Lcom/android/server/wifi/WifiStateMachine$SupplicantStoppingState;
-Lcom/android/server/wifi/WifiStateMachine$UntrustedWifiNetworkFactory;
-Lcom/android/server/wifi/WifiStateMachine$WaitForP2pDisableState;
-Lcom/android/server/wifi/WifiStateMachine$WifiNetworkAgent;
-Lcom/android/server/wifi/WifiStateMachine$WifiNetworkFactory;
-Lcom/android/server/wifi/WifiStateMachine$WpsRunningState;
-Lcom/android/server/wifi/WifiSupplicantControl;
-Lcom/android/server/wifi/WifiSupplicantControl$WpaConfigFileObserver;
-Lcom/android/server/wifi/WifiSupplicantHal;
-Lcom/android/server/wifi/WifiSupplicantHal$HalDeviceManagerStatusListener;
-Lcom/android/server/wifi/WifiTrafficPoller;
-Lcom/android/server/wifi/WifiTrafficPoller$1;
-Lcom/android/server/wifi/WifiTrafficPoller$TrafficHandler;
-Lcom/android/server/wifi/WifiVendorHal;
-Lcom/android/server/wifi/WifiVendorHal$HalDeviceManagerStatusListener;
-Lcom/android/server/WiredAccessoryManager;
-Lcom/android/server/WiredAccessoryManager$1;
-Lcom/android/server/WiredAccessoryManager$WiredAccessoryObserver;
-Lcom/android/server/WiredAccessoryManager$WiredAccessoryObserver$UEventInfo;
-Lcom/android/server/wm/animation/ClipRectLRAnimation;
-Lcom/android/server/wm/animation/ClipRectTBAnimation;
-Lcom/android/server/wm/AppTokenList;
-Lcom/android/server/wm/AppTransition;
-Lcom/android/server/wm/AppTransition$1;
-Lcom/android/server/wm/AppTransition$2;
-Lcom/android/server/wm/AppTransition$4;
-Lcom/android/server/wm/AppWindowAnimator;
-Lcom/android/server/wm/AppWindowAnimator$DummyAnimation;
-Lcom/android/server/wm/AppWindowContainerController;
-Lcom/android/server/wm/AppWindowContainerListener;
-Lcom/android/server/wm/AppWindowToken;
-Lcom/android/server/wm/BlackFrame;
-Lcom/android/server/wm/BlackFrame$BlackSurface;
-Lcom/android/server/wm/BoundsAnimationController;
-Lcom/android/server/wm/BoundsAnimationController$AnimateBoundsUser;
-Lcom/android/server/wm/BoundsAnimationController$AppTransitionNotifier;
-Lcom/android/server/wm/DimLayer;
-Lcom/android/server/wm/DimLayerController;
-Lcom/android/server/wm/DimLayerController$DimLayerState;
-Lcom/android/server/wm/DimLayer$DimLayerUser;
-Lcom/android/server/wm/DisplayContent;
-Lcom/android/server/wm/DisplayContent$ApplySurfaceChangesTransactionState;
-Lcom/android/server/wm/DisplayContent$DisplayChildWindowContainer;
-Lcom/android/server/wm/DisplayContent$NonAppWindowContainers;
-Lcom/android/server/wm/DisplayContent$ScreenshotApplicationState;
-Lcom/android/server/wm/DisplayContent$Screenshoter;
-Lcom/android/server/wm/DisplayContent$TaskForResizePointSearchResult;
-Lcom/android/server/wm/DisplayContent$TaskStackContainers;
-Lcom/android/server/wm/DisplaySettings;
-Lcom/android/server/wm/DisplaySettings$Entry;
-Lcom/android/server/wm/DockedStackDividerController;
-Lcom/android/server/wm/InputConsumerImpl;
-Lcom/android/server/wm/InputMonitor;
-Lcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;
-Lcom/android/server/wm/KeyguardDisableHandler;
-Lcom/android/server/wm/nano/WindowManagerProtos$TaskSnapshotProto;
-Lcom/android/server/wm/PinnedStackController;
-Lcom/android/server/wm/PinnedStackController$PinnedStackControllerCallback;
-Lcom/android/server/wm/PinnedStackController$PinnedStackListenerDeathHandler;
-Lcom/android/server/wm/PointerEventDispatcher;
-Lcom/android/server/wm/RootWindowContainer;
-Lcom/android/server/wm/ScreenRotationAnimation;
-Lcom/android/server/wm/Session;
-Lcom/android/server/wm/SnapshotStartingData;
-Lcom/android/server/wm/SplashScreenStartingData;
-Lcom/android/server/wm/StackWindowController;
-Lcom/android/server/wm/StackWindowController$H;
-Lcom/android/server/wm/StackWindowListener;
-Lcom/android/server/wm/StartingData;
-Lcom/android/server/wm/Task;
-Lcom/android/server/wm/TaskSnapshotCache;
-Lcom/android/server/wm/TaskSnapshotCache$CacheEntry;
-Lcom/android/server/wm/TaskSnapshotController;
-Lcom/android/server/wm/TaskSnapshotLoader;
-Lcom/android/server/wm/TaskSnapshotPersister;
-Lcom/android/server/wm/TaskSnapshotPersister$1;
-Lcom/android/server/wm/TaskSnapshotPersister$DeleteWriteQueueItem;
-Lcom/android/server/wm/TaskSnapshotPersister$DirectoryResolver;
-Lcom/android/server/wm/TaskSnapshotPersister$RemoveObsoleteFilesQueueItem;
-Lcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;
-Lcom/android/server/wm/TaskSnapshotPersister$WriteQueueItem;
-Lcom/android/server/wm/TaskSnapshotSurface;
-Lcom/android/server/wm/TaskSnapshotSurface$1;
-Lcom/android/server/wm/TaskSnapshotSurface$Window;
-Lcom/android/server/wm/TaskStack;
-Lcom/android/server/wm/TaskTapPointerEventListener;
-Lcom/android/server/wm/TaskWindowContainerController;
-Lcom/android/server/wm/TaskWindowContainerController$H;
-Lcom/android/server/wm/TaskWindowContainerListener;
-Lcom/android/server/wm/UnknownAppVisibilityController;
-Lcom/android/server/wm/WallpaperController;
-Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;
-Lcom/android/server/wm/WallpaperWindowToken;
-Lcom/android/server/wm/WindowAnimator;
-Lcom/android/server/wm/WindowAnimator$1;
-Lcom/android/server/wm/WindowAnimator$DisplayContentsAnimator;
-Lcom/android/server/wm/WindowContainer;
-Lcom/android/server/wm/WindowContainerController;
-Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;
-Lcom/android/server/wm/WindowContainerListener;
-Lcom/android/server/wm/WindowLayersController;
-Lcom/android/server/wm/WindowManagerService;
-Lcom/android/server/wm/WindowManagerService$1;
-Lcom/android/server/wm/WindowManagerService$2;
-Lcom/android/server/wm/WindowManagerService$3;
-Lcom/android/server/wm/WindowManagerService$4;
-Lcom/android/server/wm/WindowManagerService$6;
-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/WindowState;
-Lcom/android/server/wm/WindowState$1;
-Lcom/android/server/wm/WindowState$2;
-Lcom/android/server/wm/WindowState$3;
-Lcom/android/server/wm/WindowStateAnimator;
-Lcom/android/server/wm/WindowState$DeathRecipient;
-Lcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;
-Lcom/android/server/wm/WindowSurfaceController;
-Lcom/android/server/wm/WindowSurfaceController$SurfaceControlWithBackground;
-Lcom/android/server/wm/WindowSurfacePlacer;
-Lcom/android/server/wm/WindowSurfacePlacer$LayerAndToken;
-Lcom/android/server/wm/WindowToken;
-Lcom/google/android/collect/Lists;
-Lcom/google/android/collect/Maps;
-Lcom/google/android/collect/Sets;
-Lcom/google/android/gles_jni/EGLImpl;
-Lcom/google/android/gles_jni/GLImpl;
-Lcom/google/protobuf/nano/InvalidProtocolBufferNanoException;
-Lcom/google/protobuf/nano/MessageNano;
-LD;
-Ldalvik/annotation/optimization/CriticalNative;
-Ldalvik/annotation/optimization/FastNative;
-Ldalvik/system/BaseDexClassLoader;
-Ldalvik/system/BaseDexClassLoader$Reporter;
-Ldalvik/system/BlockGuard;
-Ldalvik/system/BlockGuard$1;
-Ldalvik/system/BlockGuard$2;
-Ldalvik/system/BlockGuard$BlockGuardPolicyException;
-Ldalvik/system/BlockGuard$Policy;
-Ldalvik/system/ClassExt;
-Ldalvik/system/CloseGuard;
-Ldalvik/system/CloseGuard$DefaultReporter;
-Ldalvik/system/CloseGuard$DefaultTracker;
-Ldalvik/system/CloseGuard$Reporter;
-Ldalvik/system/CloseGuard$Tracker;
-Ldalvik/system/DalvikLogHandler;
-Ldalvik/system/DexClassLoader;
-Ldalvik/system/DexFile;
-Ldalvik/system/DexFile$DFEnum;
-Ldalvik/system/DexPathList;
-Ldalvik/system/DexPathList$Element;
-Ldalvik/system/DexPathList$NativeLibraryElement;
-Ldalvik/system/EmulatedStackFrame;
-Ldalvik/system/EmulatedStackFrame$Range;
-Ldalvik/system/InMemoryDexClassLoader$DexData;
-Ldalvik/system/PathClassLoader;
-Ldalvik/system/SocketTagger;
-Ldalvik/system/SocketTagger$1;
-Ldalvik/system/VMDebug;
-Ldalvik/system/VMRuntime;
-Ldalvik/system/VMStack;
-Ldalvik/system/ZygoteHooks;
-LF;
-LI;
-LJ;
-Ljava/io/Bits;
-Ljava/io/BufferedInputStream;
-Ljava/io/BufferedOutputStream;
-Ljava/io/BufferedReader;
-Ljava/io/BufferedWriter;
-Ljava/io/ByteArrayInputStream;
-Ljava/io/ByteArrayOutputStream;
-Ljava/io/CharArrayWriter;
-Ljava/io/Closeable;
-Ljava/io/Console;
-Ljava/io/DataInput;
-Ljava/io/DataInputStream;
-Ljava/io/DataOutput;
-Ljava/io/DataOutputStream;
-Ljava/io/DefaultFileSystem;
-Ljava/io/EOFException;
-Ljava/io/ExpiringCache;
-Ljava/io/ExpiringCache$1;
-Ljava/io/ExpiringCache$Entry;
-Ljava/io/Externalizable;
-Ljava/io/File;
-Ljava/io/FileDescriptor;
-Ljava/io/FileDescriptor$1;
-Ljava/io/FileInputStream;
-Ljava/io/FileInputStream$UseManualSkipException;
-Ljava/io/FilenameFilter;
-Ljava/io/FileNotFoundException;
-Ljava/io/FileOutputStream;
-Ljava/io/File$PathStatus;
-Ljava/io/FileReader;
-Ljava/io/FileSystem;
-Ljava/io/File$TempDirectory;
-Ljava/io/FileWriter;
-Ljava/io/FilterInputStream;
-Ljava/io/FilterOutputStream;
-Ljava/io/Flushable;
-Ljava/io/InputStream;
-Ljava/io/InputStreamReader;
-Ljava/io/InterruptedIOException;
-Ljava/io/InvalidObjectException;
-Ljava/io/IOException;
-Ljava/io/ObjectInput;
-Ljava/io/ObjectInputStream;
-Ljava/io/ObjectInputStream$BlockDataInputStream;
-Ljava/io/ObjectInputStream$HandleTable;
-Ljava/io/ObjectInputStream$HandleTable$HandleList;
-Ljava/io/ObjectInputStream$PeekInputStream;
-Ljava/io/ObjectInputStream$ValidationList;
-Ljava/io/ObjectOutput;
-Ljava/io/ObjectOutputStream;
-Ljava/io/ObjectOutputStream$PutField;
-Ljava/io/ObjectStreamClass;
-Ljava/io/ObjectStreamConstants;
-Ljava/io/ObjectStreamException;
-Ljava/io/ObjectStreamField;
-Ljava/io/OutputStream;
-Ljava/io/OutputStreamWriter;
-Ljava/io/PrintStream;
-Ljava/io/PrintWriter;
-Ljava/io/PushbackInputStream;
-Ljava/io/RandomAccessFile;
-Ljava/io/Reader;
-Ljava/io/Serializable;
-Ljava/io/SerializablePermission;
-Ljava/io/StringWriter;
-Ljava/io/UnixFileSystem;
-Ljava/io/UnsupportedEncodingException;
-Ljava/io/UTFDataFormatException;
-Ljava/io/Writer;
-Ljava/lang/AbstractMethodError;
-Ljava/lang/AbstractStringBuilder;
-Ljava/lang/AndroidHardcodedSystemProperties;
-Ljava/lang/annotation/Annotation;
-Ljava/lang/annotation/AnnotationTypeMismatchException;
-Ljava/lang/annotation/IncompleteAnnotationException;
-Ljava/lang/annotation/Inherited;
-Ljava/lang/Appendable;
-Ljava/lang/ArithmeticException;
-Ljava/lang/ArrayIndexOutOfBoundsException;
-Ljava/lang/ArrayStoreException;
-Ljava/lang/AssertionError;
-Ljava/lang/AutoCloseable;
-Ljava/lang/Boolean;
-Ljava/lang/BootClassLoader;
-Ljava/lang/Byte;
-Ljava/lang/Byte$ByteCache;
-Ljava/lang/CaseMapper;
-Ljava/lang/CaseMapper$1;
-Ljava/lang/Character;
-Ljava/lang/Character$CharacterCache;
-Ljava/lang/Character$Subset;
-Ljava/lang/Character$UnicodeBlock;
-Ljava/lang/CharSequence;
-Ljava/lang/CharSequence$1CharIterator;
-Ljava/lang/CharSequence$1CodePointIterator;
-Ljava/lang/Class;
-Ljava/lang/Class$Caches;
-Ljava/lang/ClassCastException;
-Ljava/lang/ClassLoader;
-Ljava/lang/ClassLoader$SystemClassLoader;
-Ljava/lang/ClassNotFoundException;
-Ljava/lang/Cloneable;
-Ljava/lang/CloneNotSupportedException;
-Ljava/lang/Comparable;
-Ljava/lang/Daemons;
-Ljava/lang/Daemons$Daemon;
-Ljava/lang/Daemons$FinalizerDaemon;
-Ljava/lang/Daemons$FinalizerWatchdogDaemon;
-Ljava/lang/Daemons$HeapTaskDaemon;
-Ljava/lang/Daemons$ReferenceQueueDaemon;
-Ljava/lang/DexCache;
-Ljava/lang/Double;
-Ljava/lang/Enum;
-Ljava/lang/Enum$1;
-Ljava/lang/EnumConstantNotPresentException;
-Ljava/lang/Error;
-Ljava/lang/Exception;
-Ljava/lang/ExceptionInInitializerError;
-Ljava/lang/Float;
-Ljava/lang/IllegalAccessError;
-Ljava/lang/IllegalAccessException;
-Ljava/lang/IllegalArgumentException;
-Ljava/lang/IllegalStateException;
-Ljava/lang/IllegalThreadStateException;
-Ljava/lang/IncompatibleClassChangeError;
-Ljava/lang/IndexOutOfBoundsException;
-Ljava/lang/InheritableThreadLocal;
-Ljava/lang/InstantiationException;
-Ljava/lang/Integer;
-Ljava/lang/Integer$IntegerCache;
-Ljava/lang/InternalError;
-Ljava/lang/InterruptedException;
-Ljava/lang/invoke/MethodHandle;
-Ljava/lang/invoke/MethodHandleImpl;
-Ljava/lang/invoke/MethodHandleImpl$HandleInfo;
-Ljava/lang/invoke/MethodHandleInfo;
-Ljava/lang/invoke/MethodHandles;
-Ljava/lang/invoke/MethodHandleStatics;
-Ljava/lang/invoke/MethodType;
-Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet;
-Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry;
-Ljava/lang/invoke/MethodTypeForm;
-Ljava/lang/invoke/Transformers$BindTo;
-Ljava/lang/invoke/Transformers$Collector;
-Ljava/lang/invoke/Transformers$Spreader;
-Ljava/lang/invoke/Transformers$Transformer;
-Ljava/lang/invoke/Transformers$VarargsCollector;
-Ljava/lang/invoke/WrongMethodTypeException;
-Ljava/lang/Iterable;
-Ljava/lang/JavaLangAccess;
-Ljava/lang/LinkageError;
-Ljava/lang/Long;
-Ljava/lang/Long$LongCache;
-Ljava/lang/Math;
-Ljava/lang/Math$RandomNumberGeneratorHolder;
-Ljava/lang/NoClassDefFoundError;
-Ljava/lang/NoSuchFieldError;
-Ljava/lang/NoSuchFieldException;
-Ljava/lang/NoSuchMethodError;
-Ljava/lang/NoSuchMethodException;
-Ljava/lang/NullPointerException;
-Ljava/lang/Number;
-Ljava/lang/NumberFormatException;
-Ljava/lang/Object;
-Ljava/lang/OutOfMemoryError;
-Ljava/lang/Package;
-Ljava/lang/Process;
-Ljava/lang/ProcessBuilder;
-Ljava/lang/ProcessEnvironment;
-Ljava/lang/Readable;
-Ljava/lang/ref/FinalizerReference;
-Ljava/lang/ref/FinalizerReference$Sentinel;
-Ljava/lang/reflect/AccessibleObject;
-Ljava/lang/reflect/AnnotatedElement;
-Ljava/lang/reflect/Array;
-Ljava/lang/reflect/Constructor;
-Ljava/lang/reflect/Executable;
-Ljava/lang/reflect/Executable$GenericInfo;
-Ljava/lang/reflect/Field;
-Ljava/lang/reflect/GenericDeclaration;
-Ljava/lang/reflect/InvocationHandler;
-Ljava/lang/reflect/InvocationTargetException;
-Ljava/lang/ReflectiveOperationException;
-Ljava/lang/reflect/MalformedParametersException;
-Ljava/lang/reflect/Member;
-Ljava/lang/reflect/Method;
-Ljava/lang/reflect/Method$1;
-Ljava/lang/reflect/Modifier;
-Ljava/lang/reflect/Parameter;
-Ljava/lang/reflect/ParameterizedType;
-Ljava/lang/reflect/Proxy;
-Ljava/lang/reflect/Proxy$1;
-Ljava/lang/reflect/Proxy$Key1;
-Ljava/lang/reflect/Proxy$Key2;
-Ljava/lang/reflect/Proxy$KeyFactory;
-Ljava/lang/reflect/Proxy$KeyX;
-Ljava/lang/reflect/Proxy$ProxyClassFactory;
-Ljava/lang/reflect/Type;
-Ljava/lang/reflect/TypeVariable;
-Ljava/lang/reflect/WeakCache;
-Ljava/lang/reflect/WeakCache$CacheKey;
-Ljava/lang/reflect/WeakCache$Factory;
-Ljava/lang/reflect/WeakCache$LookupValue;
-Ljava/lang/reflect/WeakCache$Value;
-Ljava/lang/ref/PhantomReference;
-Ljava/lang/ref/Reference;
-Ljava/lang/ref/ReferenceQueue;
-Ljava/lang/ref/SoftReference;
-Ljava/lang/ref/WeakReference;
-Ljava/lang/Runnable;
-Ljava/lang/Runtime;
-Ljava/lang/RuntimeException;
-Ljava/lang/RuntimePermission;
-Ljava/lang/SecurityException;
-Ljava/lang/Short;
-Ljava/lang/Short$ShortCache;
-Ljava/lang/StackOverflowError;
-Ljava/lang/StackTraceElement;
-Ljava/lang/StrictMath;
-Ljava/lang/String;
-Ljava/lang/StringBuffer;
-Ljava/lang/StringBuilder;
-Ljava/lang/String$CaseInsensitiveComparator;
-Ljava/lang/StringFactory;
-Ljava/lang/StringIndexOutOfBoundsException;
-Ljava/lang/System;
-Ljava/lang/System$PropertiesWithNonOverrideableDefaults;
-Ljava/lang/Thread;
-Ljava/lang/Thread$1;
-Ljava/lang/Thread$Caches;
-Ljava/lang/ThreadDeath;
-Ljava/lang/ThreadGroup;
-Ljava/lang/ThreadLocal;
-Ljava/lang/ThreadLocal$ThreadLocalMap;
-Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
-Ljava/lang/Thread$State;
-Ljava/lang/Thread$UncaughtExceptionHandler;
-Ljava/lang/Thread$WeakClassKey;
-Ljava/lang/Throwable;
-Ljava/lang/Throwable$PrintStreamOrWriter;
-Ljava/lang/Throwable$SentinelHolder;
-Ljava/lang/Throwable$WrappedPrintStream;
-Ljava/lang/Throwable$WrappedPrintWriter;
-Ljava/lang/TypeNotPresentException;
-Ljava/lang/UNIXProcess;
-Ljava/lang/UnsatisfiedLinkError;
-Ljava/lang/UnsupportedOperationException;
-Ljava/lang/VirtualMachineError;
-Ljava/lang/VMClassLoader;
-Ljava/lang/Void;
-Ljava/math/BigInt;
-Ljava/math/BigInteger;
-Ljava/math/NativeBN;
-Ljava/math/RoundingMode;
-Ljava/net/AbstractPlainDatagramSocketImpl;
-Ljava/net/AbstractPlainSocketImpl;
-Ljava/net/AddressCache;
-Ljava/net/AddressCache$AddressCacheEntry;
-Ljava/net/AddressCache$AddressCacheKey;
-Ljava/net/ConnectException;
-Ljava/net/CookieHandler;
-Ljava/net/DatagramPacket;
-Ljava/net/DatagramSocket;
-Ljava/net/DatagramSocket$1;
-Ljava/net/DatagramSocketImpl;
-Ljava/net/DefaultDatagramSocketImplFactory;
-Ljava/net/DefaultInterface;
-Ljava/net/HttpURLConnection;
-Ljava/net/IDN;
-Ljava/net/Inet4Address;
-Ljava/net/Inet6Address;
-Ljava/net/Inet6AddressImpl;
-Ljava/net/Inet6Address$Inet6AddressHolder;
-Ljava/net/InetAddress;
-Ljava/net/InetAddress$1;
-Ljava/net/InetAddressImpl;
-Ljava/net/InetAddress$InetAddressHolder;
-Ljava/net/InetSocketAddress;
-Ljava/net/InetSocketAddress$InetSocketAddressHolder;
-Ljava/net/InterfaceAddress;
-Ljava/net/JarURLConnection;
-Ljava/net/MalformedURLException;
-Ljava/net/MulticastSocket;
-Ljava/net/NetworkInterface;
-Ljava/net/Parts;
-Ljava/net/PlainDatagramSocketImpl;
-Ljava/net/PlainSocketImpl;
-Ljava/net/ProtocolException;
-Ljava/net/Proxy;
-Ljava/net/ProxySelector;
-Ljava/net/Proxy$Type;
-Ljava/net/ResponseCache;
-Ljava/net/ServerSocket;
-Ljava/net/Socket;
-Ljava/net/Socket$2;
-Ljava/net/Socket$3;
-Ljava/net/SocketAddress;
-Ljava/net/SocketException;
-Ljava/net/SocketImpl;
-Ljava/net/SocketInputStream;
-Ljava/net/SocketOptions;
-Ljava/net/SocketOutputStream;
-Ljava/net/SocketTimeoutException;
-Ljava/net/SocksConsts;
-Ljava/net/SocksSocketImpl;
-Ljava/net/UnknownHostException;
-Ljava/net/URI;
-Ljava/net/URI$Parser;
-Ljava/net/URISyntaxException;
-Ljava/net/URL;
-Ljava/net/URLConnection;
-Ljava/net/URLEncoder;
-Ljava/net/URLStreamHandler;
-Ljava/net/URLStreamHandlerFactory;
-Ljava/nio/Bits;
-Ljava/nio/Buffer;
-Ljava/nio/BufferOverflowException;
-Ljava/nio/BufferUnderflowException;
-Ljava/nio/ByteBuffer;
-Ljava/nio/ByteBufferAsCharBuffer;
-Ljava/nio/ByteBufferAsDoubleBuffer;
-Ljava/nio/ByteBufferAsFloatBuffer;
-Ljava/nio/ByteBufferAsIntBuffer;
-Ljava/nio/ByteBufferAsLongBuffer;
-Ljava/nio/ByteBufferAsShortBuffer;
-Ljava/nio/ByteOrder;
-Ljava/nio/channels/AsynchronousCloseException;
-Ljava/nio/channels/ByteChannel;
-Ljava/nio/channels/Channel;
-Ljava/nio/channels/Channels;
-Ljava/nio/channels/ClosedByInterruptException;
-Ljava/nio/channels/ClosedChannelException;
-Ljava/nio/channels/DatagramChannel;
-Ljava/nio/channels/FileChannel;
-Ljava/nio/channels/FileChannel$MapMode;
-Ljava/nio/channels/GatheringByteChannel;
-Ljava/nio/channels/InterruptibleChannel;
-Ljava/nio/channels/MulticastChannel;
-Ljava/nio/channels/NetworkChannel;
-Ljava/nio/channels/ReadableByteChannel;
-Ljava/nio/channels/ScatteringByteChannel;
-Ljava/nio/channels/SeekableByteChannel;
-Ljava/nio/channels/SelectableChannel;
-Ljava/nio/channels/ServerSocketChannel;
-Ljava/nio/channels/SocketChannel;
-Ljava/nio/channels/spi/AbstractInterruptibleChannel;
-Ljava/nio/channels/spi/AbstractInterruptibleChannel$1;
-Ljava/nio/channels/spi/AbstractSelectableChannel;
-Ljava/nio/channels/WritableByteChannel;
-Ljava/nio/CharBuffer;
-Ljava/nio/charset/CharacterCodingException;
-Ljava/nio/charset/Charset;
-Ljava/nio/charset/CharsetDecoder;
-Ljava/nio/charset/CharsetDecoderICU;
-Ljava/nio/charset/CharsetEncoder;
-Ljava/nio/charset/CharsetEncoderICU;
-Ljava/nio/charset/CharsetICU;
-Ljava/nio/charset/CoderResult;
-Ljava/nio/charset/CoderResult$1;
-Ljava/nio/charset/CoderResult$2;
-Ljava/nio/charset/CoderResult$Cache;
-Ljava/nio/charset/CodingErrorAction;
-Ljava/nio/charset/IllegalCharsetNameException;
-Ljava/nio/charset/StandardCharsets;
-Ljava/nio/charset/UnsupportedCharsetException;
-Ljava/nio/DirectByteBuffer;
-Ljava/nio/DirectByteBuffer$MemoryRef;
-Ljava/nio/DoubleBuffer;
-Ljava/nio/file/attribute/BasicFileAttributes;
-Ljava/nio/file/attribute/FileAttribute;
-Ljava/nio/file/attribute/PosixFileAttributes;
-Ljava/nio/file/FileAlreadyExistsException;
-Ljava/nio/file/Files;
-Ljava/nio/file/FileSystem;
-Ljava/nio/file/FileSystemException;
-Ljava/nio/file/FileSystems;
-Ljava/nio/file/FileSystems$DefaultFileSystemHolder;
-Ljava/nio/file/FileSystems$DefaultFileSystemHolder$1;
-Ljava/nio/file/NoSuchFileException;
-Ljava/nio/file/OpenOption;
-Ljava/nio/file/Path;
-Ljava/nio/file/spi/FileSystemProvider;
-Ljava/nio/file/Watchable;
-Ljava/nio/FloatBuffer;
-Ljava/nio/HeapByteBuffer;
-Ljava/nio/HeapCharBuffer;
-Ljava/nio/IntBuffer;
-Ljava/nio/InvalidMarkException;
-Ljava/nio/LongBuffer;
-Ljava/nio/MappedByteBuffer;
-Ljava/nio/NIOAccess;
-Ljava/nio/NioUtils;
-Ljava/nio/ReadOnlyBufferException;
-Ljava/nio/ShortBuffer;
-Ljava/nio/StringCharBuffer;
-Ljava/security/AccessControlContext;
-Ljava/security/AccessControlException;
-Ljava/security/AccessController;
-Ljava/security/AlgorithmConstraints;
-Ljava/security/BasicPermission;
-Ljava/security/cert/Certificate;
-Ljava/security/cert/CertificateEncodingException;
-Ljava/security/cert/CertificateException;
-Ljava/security/cert/CertificateExpiredException;
-Ljava/security/cert/CertificateFactory;
-Ljava/security/cert/CertificateFactorySpi;
-Ljava/security/cert/CertificateNotYetValidException;
-Ljava/security/cert/CertificateParsingException;
-Ljava/security/cert/CertPath;
-Ljava/security/cert/CertPathChecker;
-Ljava/security/cert/CertPathHelperImpl;
-Ljava/security/cert/CertPathParameters;
-Ljava/security/cert/CertPathValidator;
-Ljava/security/cert/CertPathValidatorException;
-Ljava/security/cert/CertPathValidatorResult;
-Ljava/security/cert/CertPathValidatorSpi;
-Ljava/security/cert/CertSelector;
-Ljava/security/cert/CRLException;
-Ljava/security/cert/Extension;
-Ljava/security/cert/PKIXCertPathChecker;
-Ljava/security/cert/PKIXCertPathValidatorResult;
-Ljava/security/cert/PKIXParameters;
-Ljava/security/cert/PKIXRevocationChecker;
-Ljava/security/cert/PolicyNode;
-Ljava/security/cert/TrustAnchor;
-Ljava/security/cert/X509Certificate;
-Ljava/security/cert/X509CertSelector;
-Ljava/security/cert/X509Extension;
-Ljava/security/CryptoPrimitive;
-Ljava/security/DigestException;
-Ljava/security/GeneralSecurityException;
-Ljava/security/Guard;
-Ljava/security/interfaces/DSAKey;
-Ljava/security/interfaces/DSAPublicKey;
-Ljava/security/interfaces/ECKey;
-Ljava/security/interfaces/ECPrivateKey;
-Ljava/security/interfaces/ECPublicKey;
-Ljava/security/interfaces/RSAKey;
-Ljava/security/interfaces/RSAPrivateKey;
-Ljava/security/interfaces/RSAPublicKey;
-Ljava/security/InvalidAlgorithmParameterException;
-Ljava/security/InvalidKeyException;
-Ljava/security/Key;
-Ljava/security/KeyException;
-Ljava/security/KeyFactory;
-Ljava/security/KeyFactorySpi;
-Ljava/security/KeyManagementException;
-Ljava/security/KeyStore;
-Ljava/security/KeyStore$1;
-Ljava/security/KeyStoreException;
-Ljava/security/KeyStoreSpi;
-Ljava/security/MessageDigest;
-Ljava/security/MessageDigest$Delegate;
-Ljava/security/MessageDigestSpi;
-Ljava/security/NoSuchAlgorithmException;
-Ljava/security/NoSuchProviderException;
-Ljava/security/Permission;
-Ljava/security/PermissionCollection;
-Ljava/security/Permissions;
-Ljava/security/Principal;
-Ljava/security/PrivateKey;
-Ljava/security/PrivilegedAction;
-Ljava/security/PrivilegedActionException;
-Ljava/security/PrivilegedExceptionAction;
-Ljava/security/ProtectionDomain;
-Ljava/security/Provider;
-Ljava/security/Provider$EngineDescription;
-Ljava/security/Provider$Service;
-Ljava/security/Provider$ServiceKey;
-Ljava/security/Provider$UString;
-Ljava/security/PublicKey;
-Ljava/security/SecureRandom;
-Ljava/security/SecureRandomSpi;
-Ljava/security/Security;
-Ljava/security/Signature;
-Ljava/security/Signature$Delegate;
-Ljava/security/SignatureException;
-Ljava/security/SignatureSpi;
-Ljava/security/spec/AlgorithmParameterSpec;
-Ljava/security/spec/EncodedKeySpec;
-Ljava/security/spec/InvalidKeySpecException;
-Ljava/security/spec/KeySpec;
-Ljava/security/spec/RSAPublicKeySpec;
-Ljava/security/spec/X509EncodedKeySpec;
-Ljava/security/UnrecoverableEntryException;
-Ljava/security/UnrecoverableKeyException;
-Ljava/text/AttributedCharacterIterator$Attribute;
-Ljava/text/DateFormat;
-Ljava/text/DateFormat$Field;
-Ljava/text/DateFormatSymbols;
-Ljava/text/DecimalFormat;
-Ljava/text/DecimalFormatSymbols;
-Ljava/text/DontCareFieldPosition;
-Ljava/text/DontCareFieldPosition$1;
-Ljava/text/FieldPosition;
-Ljava/text/FieldPosition$Delegate;
-Ljava/text/Format;
-Ljava/text/Format$Field;
-Ljava/text/Format$FieldDelegate;
-Ljava/text/Normalizer;
-Ljava/text/Normalizer$Form;
-Ljava/text/NumberFormat;
-Ljava/text/ParseException;
-Ljava/text/SimpleDateFormat;
-Ljava/time/DateTimeException;
-Ljava/util/AbstractCollection;
-Ljava/util/AbstractList;
-Ljava/util/AbstractList$Itr;
-Ljava/util/AbstractList$ListItr;
-Ljava/util/AbstractMap;
-Ljava/util/AbstractMap$1;
-Ljava/util/AbstractMap$2;
-Ljava/util/AbstractMap$SimpleImmutableEntry;
-Ljava/util/AbstractQueue;
-Ljava/util/AbstractSequentialList;
-Ljava/util/AbstractSet;
-Ljava/util/ArrayDeque;
-Ljava/util/ArrayDeque$DeqIterator;
-Ljava/util/ArrayList;
-Ljava/util/ArrayList$ArrayListSpliterator;
-Ljava/util/ArrayList$Itr;
-Ljava/util/ArrayList$ListItr;
-Ljava/util/ArrayList$SubList;
-Ljava/util/ArrayList$SubList$1;
-Ljava/util/ArrayPrefixHelpers$CumulateTask;
-Ljava/util/ArrayPrefixHelpers$DoubleCumulateTask;
-Ljava/util/ArrayPrefixHelpers$IntCumulateTask;
-Ljava/util/ArrayPrefixHelpers$LongCumulateTask;
-Ljava/util/Arrays;
-Ljava/util/Arrays$ArrayList;
-Ljava/util/Arrays$NaturalOrder;
-Ljava/util/ArraysParallelSortHelpers$FJByte$Sorter;
-Ljava/util/ArraysParallelSortHelpers$FJChar$Sorter;
-Ljava/util/ArraysParallelSortHelpers$FJDouble$Sorter;
-Ljava/util/ArraysParallelSortHelpers$FJFloat$Sorter;
-Ljava/util/ArraysParallelSortHelpers$FJInt$Sorter;
-Ljava/util/ArraysParallelSortHelpers$FJLong$Sorter;
-Ljava/util/ArraysParallelSortHelpers$FJObject$Sorter;
-Ljava/util/ArraysParallelSortHelpers$FJShort$Sorter;
-Ljava/util/Base64;
-Ljava/util/Base64$Decoder;
-Ljava/util/Base64$Encoder;
-Ljava/util/BitSet;
-Ljava/util/Calendar;
-Ljava/util/Collection;
-Ljava/util/Collections;
-Ljava/util/Collections$1;
-Ljava/util/Collections$2;
-Ljava/util/Collections$3;
-Ljava/util/Collections$AsLIFOQueue;
-Ljava/util/Collections$CheckedCollection;
-Ljava/util/Collections$CheckedList;
-Ljava/util/Collections$CheckedMap;
-Ljava/util/Collections$CheckedNavigableMap;
-Ljava/util/Collections$CheckedNavigableSet;
-Ljava/util/Collections$CheckedQueue;
-Ljava/util/Collections$CheckedRandomAccessList;
-Ljava/util/Collections$CheckedSet;
-Ljava/util/Collections$CheckedSortedMap;
-Ljava/util/Collections$CheckedSortedSet;
-Ljava/util/Collections$CopiesList;
-Ljava/util/Collections$EmptyEnumeration;
-Ljava/util/Collections$EmptyIterator;
-Ljava/util/Collections$EmptyList;
-Ljava/util/Collections$EmptyListIterator;
-Ljava/util/Collections$EmptyMap;
-Ljava/util/Collections$EmptySet;
-Ljava/util/Collections$ReverseComparator;
-Ljava/util/Collections$ReverseComparator2;
-Ljava/util/Collections$SetFromMap;
-Ljava/util/Collections$SingletonList;
-Ljava/util/Collections$SingletonMap;
-Ljava/util/Collections$SingletonSet;
-Ljava/util/Collections$SynchronizedCollection;
-Ljava/util/Collections$SynchronizedList;
-Ljava/util/Collections$SynchronizedMap;
-Ljava/util/Collections$SynchronizedNavigableMap;
-Ljava/util/Collections$SynchronizedNavigableSet;
-Ljava/util/Collections$SynchronizedRandomAccessList;
-Ljava/util/Collections$SynchronizedSet;
-Ljava/util/Collections$SynchronizedSortedMap;
-Ljava/util/Collections$SynchronizedSortedSet;
-Ljava/util/Collections$UnmodifiableCollection;
-Ljava/util/Collections$UnmodifiableCollection$1;
-Ljava/util/Collections$UnmodifiableList;
-Ljava/util/Collections$UnmodifiableList$1;
-Ljava/util/Collections$UnmodifiableMap;
-Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;
-Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;
-Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;
-Ljava/util/Collections$UnmodifiableNavigableMap;
-Ljava/util/Collections$UnmodifiableNavigableMap$EmptyNavigableMap;
-Ljava/util/Collections$UnmodifiableNavigableSet;
-Ljava/util/Collections$UnmodifiableNavigableSet$EmptyNavigableSet;
-Ljava/util/Collections$UnmodifiableRandomAccessList;
-Ljava/util/Collections$UnmodifiableSet;
-Ljava/util/Collections$UnmodifiableSortedMap;
-Ljava/util/Collections$UnmodifiableSortedSet;
-Ljava/util/ComparableTimSort;
-Ljava/util/Comparator;
-Ljava/util/Comparators$NaturalOrderComparator;
-Ljava/util/Comparators$NullComparator;
-Ljava/util/concurrent/AbstractExecutorService;
-Ljava/util/concurrent/ArrayBlockingQueue;
-Ljava/util/concurrent/atomic/AtomicBoolean;
-Ljava/util/concurrent/atomic/AtomicInteger;
-Ljava/util/concurrent/atomic/AtomicLong;
-Ljava/util/concurrent/atomic/AtomicReference;
-Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;
-Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl;
-Ljava/util/concurrent/BlockingQueue;
-Ljava/util/concurrent/Callable;
-Ljava/util/concurrent/CancellationException;
-Ljava/util/concurrent/CompletableFuture;
-Ljava/util/concurrent/CompletableFuture$AltResult;
-Ljava/util/concurrent/CompletableFuture$AsynchronousCompletionTask;
-Ljava/util/concurrent/CompletableFuture$Completion;
-Ljava/util/concurrent/CompletableFuture$Signaller;
-Ljava/util/concurrent/CompletionStage;
-Ljava/util/concurrent/ConcurrentHashMap;
-Ljava/util/concurrent/ConcurrentHashMap$BaseIterator;
-Ljava/util/concurrent/ConcurrentHashMap$BulkTask;
-Ljava/util/concurrent/ConcurrentHashMap$CollectionView;
-Ljava/util/concurrent/ConcurrentHashMap$CounterCell;
-Ljava/util/concurrent/ConcurrentHashMap$EntryIterator;
-Ljava/util/concurrent/ConcurrentHashMap$EntrySetView;
-Ljava/util/concurrent/ConcurrentHashMap$ForEachEntryTask;
-Ljava/util/concurrent/ConcurrentHashMap$ForEachKeyTask;
-Ljava/util/concurrent/ConcurrentHashMap$ForEachMappingTask;
-Ljava/util/concurrent/ConcurrentHashMap$ForEachTransformedEntryTask;
-Ljava/util/concurrent/ConcurrentHashMap$ForEachTransformedKeyTask;
-Ljava/util/concurrent/ConcurrentHashMap$ForEachTransformedMappingTask;
-Ljava/util/concurrent/ConcurrentHashMap$ForEachTransformedValueTask;
-Ljava/util/concurrent/ConcurrentHashMap$ForEachValueTask;
-Ljava/util/concurrent/ConcurrentHashMap$ForwardingNode;
-Ljava/util/concurrent/ConcurrentHashMap$KeyIterator;
-Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesToDoubleTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesToIntTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesToLongTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysToDoubleTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysToIntTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysToLongTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsToDoubleTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsToIntTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsToLongTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesToDoubleTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesToIntTask;
-Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesToLongTask;
-Ljava/util/concurrent/ConcurrentHashMap$Node;
-Ljava/util/concurrent/ConcurrentHashMap$ReduceEntriesTask;
-Ljava/util/concurrent/ConcurrentHashMap$ReduceKeysTask;
-Ljava/util/concurrent/ConcurrentHashMap$ReduceValuesTask;
-Ljava/util/concurrent/ConcurrentHashMap$ReservationNode;
-Ljava/util/concurrent/ConcurrentHashMap$SearchEntriesTask;
-Ljava/util/concurrent/ConcurrentHashMap$SearchKeysTask;
-Ljava/util/concurrent/ConcurrentHashMap$SearchMappingsTask;
-Ljava/util/concurrent/ConcurrentHashMap$SearchValuesTask;
-Ljava/util/concurrent/ConcurrentHashMap$Segment;
-Ljava/util/concurrent/ConcurrentHashMap$Traverser;
-Ljava/util/concurrent/ConcurrentHashMap$TreeBin;
-Ljava/util/concurrent/ConcurrentHashMap$TreeNode;
-Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;
-Ljava/util/concurrent/ConcurrentHashMap$ValuesView;
-Ljava/util/concurrent/ConcurrentLinkedQueue;
-Ljava/util/concurrent/ConcurrentLinkedQueue$Node;
-Ljava/util/concurrent/ConcurrentMap;
-Ljava/util/concurrent/CopyOnWriteArrayList;
-Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
-Ljava/util/concurrent/CopyOnWriteArraySet;
-Ljava/util/concurrent/CountDownLatch;
-Ljava/util/concurrent/CountDownLatch$Sync;
-Ljava/util/concurrent/CountedCompleter;
-Ljava/util/concurrent/ExecutionException;
-Ljava/util/concurrent/Executor;
-Ljava/util/concurrent/Executors;
-Ljava/util/concurrent/Executors$DefaultThreadFactory;
-Ljava/util/concurrent/Executors$DelegatedExecutorService;
-Ljava/util/concurrent/ExecutorService;
-Ljava/util/concurrent/Executors$FinalizableDelegatedExecutorService;
-Ljava/util/concurrent/Executors$RunnableAdapter;
-Ljava/util/concurrent/ForkJoinPool;
-Ljava/util/concurrent/ForkJoinPool$1;
-Ljava/util/concurrent/ForkJoinPool$DefaultForkJoinWorkerThreadFactory;
-Ljava/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory;
-Ljava/util/concurrent/ForkJoinPool$ManagedBlocker;
-Ljava/util/concurrent/ForkJoinTask;
-Ljava/util/concurrent/ForkJoinTask$ExceptionNode;
-Ljava/util/concurrent/ForkJoinWorkerThread;
-Ljava/util/concurrent/Future;
-Ljava/util/concurrent/FutureTask;
-Ljava/util/concurrent/FutureTask$WaitNode;
-Ljava/util/concurrent/LinkedBlockingQueue;
-Ljava/util/concurrent/LinkedBlockingQueue$Node;
-Ljava/util/concurrent/locks/AbstractOwnableSynchronizer;
-Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
-Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
-Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
-Ljava/util/concurrent/locks/Condition;
-Ljava/util/concurrent/locks/Lock;
-Ljava/util/concurrent/locks/LockSupport;
-Ljava/util/concurrent/locks/ReadWriteLock;
-Ljava/util/concurrent/locks/ReentrantLock;
-Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
-Ljava/util/concurrent/locks/ReentrantLock$Sync;
-Ljava/util/concurrent/locks/ReentrantReadWriteLock;
-Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
-Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;
-Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;
-Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;
-Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
-Ljava/util/ConcurrentModificationException;
-Ljava/util/concurrent/RejectedExecutionHandler;
-Ljava/util/concurrent/RunnableFuture;
-Ljava/util/concurrent/ThreadFactory;
-Ljava/util/concurrent/ThreadLocalRandom;
-Ljava/util/concurrent/ThreadPoolExecutor;
-Ljava/util/concurrent/ThreadPoolExecutor$AbortPolicy;
-Ljava/util/concurrent/ThreadPoolExecutor$Worker;
-Ljava/util/concurrent/TimeoutException;
-Ljava/util/concurrent/TimeUnit;
-Ljava/util/concurrent/TimeUnit$1;
-Ljava/util/concurrent/TimeUnit$2;
-Ljava/util/concurrent/TimeUnit$3;
-Ljava/util/concurrent/TimeUnit$4;
-Ljava/util/concurrent/TimeUnit$5;
-Ljava/util/concurrent/TimeUnit$6;
-Ljava/util/concurrent/TimeUnit$7;
-Ljava/util/Currency;
-Ljava/util/Date;
-Ljava/util/Deque;
-Ljava/util/Dictionary;
-Ljava/util/DualPivotQuicksort;
-Ljava/util/Enumeration;
-Ljava/util/EnumMap;
-Ljava/util/EnumMap$1;
-Ljava/util/EnumSet;
-Ljava/util/Formattable;
-Ljava/util/Formatter;
-Ljava/util/Formatter$Conversion;
-Ljava/util/Formatter$DateTime;
-Ljava/util/Formatter$FixedString;
-Ljava/util/Formatter$Flags;
-Ljava/util/Formatter$FormatSpecifier;
-Ljava/util/Formatter$FormatSpecifierParser;
-Ljava/util/Formatter$FormatString;
-Ljava/util/function/BiConsumer;
-Ljava/util/function/BiFunction;
-Ljava/util/function/BinaryOperator;
-Ljava/util/function/Consumer;
-Ljava/util/function/DoubleBinaryOperator;
-Ljava/util/function/Function;
-Ljava/util/function/IntBinaryOperator;
-Ljava/util/function/IntConsumer;
-Ljava/util/function/IntFunction;
-Ljava/util/function/IntToDoubleFunction;
-Ljava/util/function/IntToLongFunction;
-Ljava/util/function/IntUnaryOperator;
-Ljava/util/function/LongBinaryOperator;
-Ljava/util/function/LongUnaryOperator;
-Ljava/util/function/Predicate;
-Ljava/util/function/Supplier;
-Ljava/util/function/ToDoubleBiFunction;
-Ljava/util/function/ToDoubleFunction;
-Ljava/util/function/ToIntBiFunction;
-Ljava/util/function/ToIntFunction;
-Ljava/util/function/ToLongBiFunction;
-Ljava/util/function/ToLongFunction;
-Ljava/util/function/UnaryOperator;
-Ljava/util/GregorianCalendar;
-Ljava/util/HashMap;
-Ljava/util/HashMap$EntryIterator;
-Ljava/util/HashMap$EntrySet;
-Ljava/util/HashMap$HashIterator;
-Ljava/util/HashMap$KeyIterator;
-Ljava/util/HashMap$KeySet;
-Ljava/util/HashMap$Node;
-Ljava/util/HashMap$TreeNode;
-Ljava/util/HashMap$ValueIterator;
-Ljava/util/HashMap$Values;
-Ljava/util/HashSet;
-Ljava/util/Hashtable;
-Ljava/util/Hashtable$Enumerator;
-Ljava/util/Hashtable$HashtableEntry;
-Ljava/util/Hashtable$KeySet;
-Ljava/util/Hashtable$ValueCollection;
-Ljava/util/IdentityHashMap;
-Ljava/util/IdentityHashMap$KeySet;
-Ljava/util/IllegalFormatException;
-Ljava/util/IllformedLocaleException;
-Ljava/util/Iterator;
-Ljava/util/jar/JarEntry;
-Ljava/util/jar/JarFile;
-Ljava/util/jar/JarFile$JarEntryIterator;
-Ljava/util/jar/JarFile$JarFileEntry;
-Ljava/util/LinkedHashMap;
-Ljava/util/LinkedHashMap$LinkedEntryIterator;
-Ljava/util/LinkedHashMap$LinkedEntrySet;
-Ljava/util/LinkedHashMap$LinkedHashIterator;
-Ljava/util/LinkedHashMap$LinkedHashMapEntry;
-Ljava/util/LinkedHashMap$LinkedKeyIterator;
-Ljava/util/LinkedHashMap$LinkedKeySet;
-Ljava/util/LinkedHashMap$LinkedValueIterator;
-Ljava/util/LinkedHashMap$LinkedValues;
-Ljava/util/LinkedHashSet;
-Ljava/util/LinkedList;
-Ljava/util/LinkedList$ListItr;
-Ljava/util/LinkedList$Node;
-Ljava/util/List;
-Ljava/util/ListIterator;
-Ljava/util/Locale;
-Ljava/util/Locale$Builder;
-Ljava/util/Locale$Cache;
-Ljava/util/Locale$Category;
-Ljava/util/Locale$FilteringMode;
-Ljava/util/Locale$LanguageRange;
-Ljava/util/Locale$LocaleKey;
-Ljava/util/logging/ErrorManager;
-Ljava/util/logging/Formatter;
-Ljava/util/logging/Handler;
-Ljava/util/logging/Level;
-Ljava/util/logging/Level$KnownLevel;
-Ljava/util/logging/Logger;
-Ljava/util/logging/Logger$LoggerBundle;
-Ljava/util/logging/LoggingPermission;
-Ljava/util/logging/LoggingProxyImpl;
-Ljava/util/logging/LogManager;
-Ljava/util/logging/LogManager$1;
-Ljava/util/logging/LogManager$2;
-Ljava/util/logging/LogManager$3;
-Ljava/util/logging/LogManager$5;
-Ljava/util/logging/LogManager$Cleaner;
-Ljava/util/logging/LogManager$LoggerContext;
-Ljava/util/logging/LogManager$LoggerContext$1;
-Ljava/util/logging/LogManager$LoggerWeakRef;
-Ljava/util/logging/LogManager$LogNode;
-Ljava/util/logging/LogManager$RootLogger;
-Ljava/util/logging/LogManager$SystemLoggerContext;
-Ljava/util/Map;
-Ljava/util/Map$Entry;
-Ljava/util/MissingResourceException;
-Ljava/util/NavigableMap;
-Ljava/util/NavigableSet;
-Ljava/util/NoSuchElementException;
-Ljava/util/Objects;
-Ljava/util/prefs/AbstractPreferences;
-Ljava/util/prefs/FileSystemPreferences;
-Ljava/util/prefs/Preferences;
-Ljava/util/PrimitiveIterator;
-Ljava/util/PrimitiveIterator$OfInt;
-Ljava/util/Properties;
-Ljava/util/Properties$LineReader;
-Ljava/util/Queue;
-Ljava/util/Random;
-Ljava/util/RandomAccess;
-Ljava/util/RandomAccessSubList;
-Ljava/util/regex/Matcher;
-Ljava/util/regex/MatchResult;
-Ljava/util/regex/Pattern;
-Ljava/util/regex/PatternSyntaxException;
-Ljava/util/RegularEnumSet;
-Ljava/util/ResourceBundle;
-Ljava/util/ResourceBundle$1;
-Ljava/util/Set;
-Ljava/util/SimpleTimeZone;
-Ljava/util/SortedMap;
-Ljava/util/SortedSet;
-Ljava/util/Spliterator;
-Ljava/util/Spliterator$OfDouble;
-Ljava/util/Spliterator$OfInt;
-Ljava/util/Spliterator$OfLong;
-Ljava/util/Spliterator$OfPrimitive;
-Ljava/util/Spliterators;
-Ljava/util/Spliterators$EmptySpliterator;
-Ljava/util/Spliterators$EmptySpliterator$OfDouble;
-Ljava/util/Spliterators$EmptySpliterator$OfInt;
-Ljava/util/Spliterators$EmptySpliterator$OfLong;
-Ljava/util/Spliterators$EmptySpliterator$OfRef;
-Ljava/util/Stack;
-Ljava/util/stream/BaseStream;
-Ljava/util/stream/DoubleStream;
-Ljava/util/stream/IntStream;
-Ljava/util/stream/LongStream;
-Ljava/util/stream/Stream;
-Ljava/util/stream/StreamSupport;
-Ljava/util/StringJoiner;
-Ljava/util/StringTokenizer;
-Ljava/util/SubList;
-Ljava/util/TaskQueue;
-Ljava/util/Timer;
-Ljava/util/Timer$1;
-Ljava/util/TimerTask;
-Ljava/util/TimerThread;
-Ljava/util/TimeZone;
-Ljava/util/TimSort;
-Ljava/util/TreeMap;
-Ljava/util/TreeMap$AscendingSubMap;
-Ljava/util/TreeMap$AscendingSubMap$AscendingEntrySetView;
-Ljava/util/TreeMap$EntryIterator;
-Ljava/util/TreeMap$EntrySet;
-Ljava/util/TreeMap$KeyIterator;
-Ljava/util/TreeMap$KeySet;
-Ljava/util/TreeMap$NavigableSubMap;
-Ljava/util/TreeMap$NavigableSubMap$EntrySetView;
-Ljava/util/TreeMap$NavigableSubMap$SubMapIterator;
-Ljava/util/TreeMap$NavigableSubMap$SubMapKeyIterator;
-Ljava/util/TreeMap$PrivateEntryIterator;
-Ljava/util/TreeMap$TreeMapEntry;
-Ljava/util/TreeMap$ValueIterator;
-Ljava/util/TreeMap$Values;
-Ljava/util/TreeSet;
-Ljava/util/UUID;
-Ljava/util/UUID$Holder;
-Ljava/util/Vector;
-Ljava/util/Vector$Itr;
-Ljava/util/WeakHashMap;
-Ljava/util/WeakHashMap$Entry;
-Ljava/util/WeakHashMap$EntrySet;
-Ljava/util/WeakHashMap$KeySet;
-Ljava/util/WeakHashMap$Values;
-Ljava/util/zip/Adler32;
-Ljava/util/zip/Checksum;
-Ljava/util/zip/CRC32;
-Ljava/util/zip/DataFormatException;
-Ljava/util/zip/Deflater;
-Ljava/util/zip/DeflaterOutputStream;
-Ljava/util/zip/GZIPOutputStream;
-Ljava/util/zip/Inflater;
-Ljava/util/zip/InflaterInputStream;
-Ljava/util/zip/ZipCoder;
-Ljava/util/zip/ZipConstants;
-Ljava/util/zip/ZipEntry;
-Ljava/util/zip/ZipFile;
-Ljava/util/zip/ZipFile$ZipEntryIterator;
-Ljava/util/zip/ZipFile$ZipFileInflaterInputStream;
-Ljava/util/zip/ZipFile$ZipFileInputStream;
-Ljava/util/zip/ZipUtils;
-Ljava/util/zip/ZStreamRef;
-Ljavax/crypto/BadPaddingException;
-Ljavax/crypto/IllegalBlockSizeException;
-Ljavax/crypto/NoSuchPaddingException;
-Ljavax/crypto/SecretKey;
-Ljavax/microedition/khronos/egl/EGL;
-Ljavax/microedition/khronos/egl/EGL10;
-Ljavax/microedition/khronos/opengles/GL;
-Ljavax/microedition/khronos/opengles/GL10;
-Ljavax/microedition/khronos/opengles/GL10Ext;
-Ljavax/microedition/khronos/opengles/GL11;
-Ljavax/microedition/khronos/opengles/GL11Ext;
-Ljavax/microedition/khronos/opengles/GL11ExtensionPack;
-Ljavax/net/SocketFactory;
-Ljavax/net/ssl/ExtendedSSLSession;
-Ljavax/net/ssl/HostnameVerifier;
-Ljavax/net/ssl/HttpsURLConnection;
-Ljavax/net/ssl/HttpsURLConnection$NoPreloadHolder;
-Ljavax/net/ssl/KeyManager;
-Ljavax/net/ssl/KeyManagerFactory;
-Ljavax/net/ssl/KeyManagerFactory$1;
-Ljavax/net/ssl/KeyManagerFactorySpi;
-Ljavax/net/ssl/SNIHostName;
-Ljavax/net/ssl/SNIServerName;
-Ljavax/net/ssl/SSLContext;
-Ljavax/net/ssl/SSLContextSpi;
-Ljavax/net/ssl/SSLException;
-Ljavax/net/ssl/SSLParameters;
-Ljavax/net/ssl/SSLPeerUnverifiedException;
-Ljavax/net/ssl/SSLProtocolException;
-Ljavax/net/ssl/SSLSession;
-Ljavax/net/ssl/SSLSessionContext;
-Ljavax/net/ssl/SSLSocket;
-Ljavax/net/ssl/SSLSocketFactory;
-Ljavax/net/ssl/SSLSocketFactory$1;
-Ljavax/net/ssl/TrustManager;
-Ljavax/net/ssl/TrustManagerFactory;
-Ljavax/net/ssl/TrustManagerFactory$1;
-Ljavax/net/ssl/TrustManagerFactorySpi;
-Ljavax/net/ssl/X509ExtendedKeyManager;
-Ljavax/net/ssl/X509ExtendedTrustManager;
-Ljavax/net/ssl/X509KeyManager;
-Ljavax/net/ssl/X509TrustManager;
-Ljavax/security/auth/callback/UnsupportedCallbackException;
-Ljavax/security/auth/Destroyable;
-Ljavax/security/auth/x500/X500Principal;
-Ljavax/security/cert/CertificateException;
-Llibcore/icu/ICU;
-Llibcore/icu/LocaleData;
-Llibcore/icu/NativeConverter;
-Llibcore/icu/TimeZoneNames;
-Llibcore/icu/TimeZoneNames$1;
-Llibcore/icu/TimeZoneNames$ZoneStringsCache;
-Llibcore/internal/StringPool;
-Llibcore/io/AsynchronousCloseMonitor;
-Llibcore/io/BlockGuardOs;
-Llibcore/io/BufferIterator;
-Llibcore/io/ClassPathURLStreamHandler;
-Llibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection;
-Llibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection$1;
-Llibcore/io/DropBox;
-Llibcore/io/DropBox$DefaultReporter;
-Llibcore/io/DropBox$Reporter;
-Llibcore/io/ForwardingOs;
-Llibcore/io/IoBridge;
-Llibcore/io/IoTracker;
-Llibcore/io/IoTracker$Mode;
-Llibcore/io/IoUtils;
-Llibcore/io/IoUtils$FileReader;
-Llibcore/io/Libcore;
-Llibcore/io/Memory;
-Llibcore/io/MemoryMappedFile;
-Llibcore/io/NioBufferIterator;
-Llibcore/io/Os;
-Llibcore/io/Posix;
-Llibcore/io/Streams;
-Llibcore/net/event/NetworkEventDispatcher;
-Llibcore/net/NetworkSecurityPolicy;
-Llibcore/net/NetworkSecurityPolicy$DefaultNetworkSecurityPolicy;
-Llibcore/net/UriCodec;
-Llibcore/reflect/AnnotatedElements;
-Llibcore/reflect/AnnotationFactory;
-Llibcore/reflect/AnnotationMember;
-Llibcore/reflect/AnnotationMember$DefaultValues;
-Llibcore/reflect/GenericSignatureParser;
-Llibcore/reflect/InternalNames;
-Llibcore/reflect/ListOfTypes;
-Llibcore/reflect/Types;
-Llibcore/util/BasicLruCache;
-Llibcore/util/CharsetUtils;
-Llibcore/util/CollectionUtils;
-Llibcore/util/EmptyArray;
-Llibcore/util/HexEncoding;
-Llibcore/util/NativeAllocationRegistry;
-Llibcore/util/NativeAllocationRegistry$CleanerRunner;
-Llibcore/util/NativeAllocationRegistry$CleanerThunk;
-Llibcore/util/Objects;
-Llibcore/util/ZoneInfo;
-Llibcore/util/ZoneInfo$CheckedArithmeticException;
-Llibcore/util/ZoneInfoDB;
-Llibcore/util/ZoneInfoDB$TzData;
-Llibcore/util/ZoneInfoDB$TzData$1;
-Llibcore/util/ZoneInfo$WallTime;
-Lorg/apache/harmony/dalvik/ddmc/Chunk;
-Lorg/apache/harmony/dalvik/ddmc/ChunkHandler;
-Lorg/apache/harmony/dalvik/ddmc/DdmServer;
-Lorg/apache/harmony/dalvik/ddmc/DdmVmInternal;
-Lorg/apache/harmony/dalvik/NativeTestTarget;
-Lorg/apache/harmony/luni/internal/util/TimezoneGetter;
-Lorg/apache/harmony/xml/ExpatAttributes;
-Lorg/apache/harmony/xml/ExpatParser;
-Lorg/json/JSON;
-Lorg/json/JSONArray;
-Lorg/json/JSONException;
-Lorg/json/JSONObject;
-Lorg/json/JSONObject$1;
-Lorg/json/JSONStringer;
-Lorg/json/JSONStringer$Scope;
-Lorg/json/JSONTokener;
-Lorg/kxml2/io/KXmlParser;
-Lorg/kxml2/io/KXmlParser$ValueContext;
-Lorg/kxml2/io/KXmlSerializer;
-Lorg/xmlpull/v1/XmlPullParser;
-Lorg/xmlpull/v1/XmlPullParserException;
-Lorg/xmlpull/v1/XmlPullParserFactory;
-Lorg/xmlpull/v1/XmlSerializer;
-Lorg/xml/sax/Attributes;
-LS;
-Lsun/invoke/util/BytecodeDescriptor;
-Lsun/invoke/util/Wrapper;
-Lsun/misc/Cleaner;
-Lsun/misc/CompoundEnumeration;
-Lsun/misc/FDBigInteger;
-Lsun/misc/FloatingDecimal;
-Lsun/misc/FloatingDecimal$1;
-Lsun/misc/FloatingDecimal$ASCIIToBinaryBuffer;
-Lsun/misc/FloatingDecimal$ASCIIToBinaryConverter;
-Lsun/misc/FloatingDecimal$BinaryToASCIIBuffer;
-Lsun/misc/FloatingDecimal$BinaryToASCIIConverter;
-Lsun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer;
-Lsun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer;
-Lsun/misc/FormattedFloatingDecimal;
-Lsun/misc/FormattedFloatingDecimal$1;
-Lsun/misc/FormattedFloatingDecimal$Form;
-Lsun/misc/IOUtils;
-Lsun/misc/JavaIOFileDescriptorAccess;
-Lsun/misc/SharedSecrets;
-Lsun/misc/Unsafe;
-Lsun/misc/Version;
-Lsun/misc/VM;
-Lsun/net/ConnectionResetException;
-Lsun/net/NetHooks;
-Lsun/net/ResourceManager;
-Lsun/net/spi/DefaultProxySelector;
-Lsun/net/spi/nameservice/NameService;
-Lsun/net/util/IPAddressUtil;
-Lsun/net/www/ParseUtil;
-Lsun/net/www/protocol/file/Handler;
-Lsun/net/www/protocol/jar/Handler;
-Lsun/nio/ch/ChannelInputStream;
-Lsun/nio/ch/DatagramChannelImpl;
-Lsun/nio/ch/DatagramDispatcher;
-Lsun/nio/ch/DirectBuffer;
-Lsun/nio/ch/EPollArrayWrapper;
-Lsun/nio/ch/FileChannelImpl;
-Lsun/nio/ch/FileChannelImpl$Unmapper;
-Lsun/nio/ch/FileDispatcher;
-Lsun/nio/ch/FileDispatcherImpl;
-Lsun/nio/ch/FileKey;
-Lsun/nio/ch/Interruptible;
-Lsun/nio/ch/IOStatus;
-Lsun/nio/ch/IOUtil;
-Lsun/nio/ch/NativeDispatcher;
-Lsun/nio/ch/NativeThread;
-Lsun/nio/ch/NativeThreadSet;
-Lsun/nio/ch/Net;
-Lsun/nio/ch/SelChImpl;
-Lsun/nio/ch/ServerSocketChannelImpl;
-Lsun/nio/ch/SocketChannelImpl;
-Lsun/nio/ch/Util;
-Lsun/nio/ch/Util$1;
-Lsun/nio/ch/Util$BufferCache;
-Lsun/nio/cs/ArrayEncoder;
-Lsun/nio/cs/StreamDecoder;
-Lsun/nio/cs/StreamEncoder;
-Lsun/nio/fs/AbstractFileSystemProvider;
-Lsun/nio/fs/AbstractPath;
-Lsun/nio/fs/DefaultFileSystemProvider;
-Lsun/nio/fs/LinuxFileSystem;
-Lsun/nio/fs/LinuxFileSystemProvider;
-Lsun/nio/fs/NativeBuffer;
-Lsun/nio/fs/NativeBuffer$Deallocator;
-Lsun/nio/fs/NativeBuffers;
-Lsun/nio/fs/UnixChannelFactory;
-Lsun/nio/fs/UnixChannelFactory$Flags;
-Lsun/nio/fs/UnixConstants;
-Lsun/nio/fs/UnixException;
-Lsun/nio/fs/UnixFileAttributes;
-Lsun/nio/fs/UnixFileModeAttribute;
-Lsun/nio/fs/UnixFileStoreAttributes;
-Lsun/nio/fs/UnixFileSystem;
-Lsun/nio/fs/UnixFileSystemProvider;
-Lsun/nio/fs/UnixMountEntry;
-Lsun/nio/fs/UnixNativeDispatcher;
-Lsun/nio/fs/UnixPath;
-Lsun/nio/fs/Util;
-Lsun/security/action/GetBooleanAction;
-Lsun/security/action/GetPropertyAction;
-Lsun/security/jca/GetInstance;
-Lsun/security/jca/GetInstance$Instance;
-Lsun/security/jca/ProviderConfig;
-Lsun/security/jca/ProviderConfig$2;
-Lsun/security/jca/ProviderList;
-Lsun/security/jca/ProviderList$1;
-Lsun/security/jca/ProviderList$2;
-Lsun/security/jca/ProviderList$3;
-Lsun/security/jca/ProviderList$ServiceList;
-Lsun/security/jca/ProviderList$ServiceList$1;
-Lsun/security/jca/Providers;
-Lsun/security/jca/ServiceId;
-Lsun/security/pkcs/PKCS9Attribute;
-Lsun/security/pkcs/SignerInfo;
-Lsun/security/provider/certpath/AdaptableX509CertSelector;
-Lsun/security/provider/certpath/AlgorithmChecker;
-Lsun/security/provider/certpath/BasicChecker;
-Lsun/security/provider/certpath/CertPathHelper;
-Lsun/security/provider/certpath/ConstraintsChecker;
-Lsun/security/provider/certpath/KeyChecker;
-Lsun/security/provider/certpath/PKIX;
-Lsun/security/provider/certpath/PKIXCertPathValidator;
-Lsun/security/provider/certpath/PKIXMasterCertPathValidator;
-Lsun/security/provider/certpath/PKIX$ValidatorParams;
-Lsun/security/provider/certpath/PolicyChecker;
-Lsun/security/provider/certpath/PolicyNodeImpl;
-Lsun/security/provider/CertPathProvider;
-Lsun/security/provider/X509Factory;
-Lsun/security/util/AbstractAlgorithmConstraints;
-Lsun/security/util/AlgorithmDecomposer;
-Lsun/security/util/BitArray;
-Lsun/security/util/ByteArrayLexOrder;
-Lsun/security/util/ByteArrayTagOrder;
-Lsun/security/util/Cache;
-Lsun/security/util/Cache$EqualByteArray;
-Lsun/security/util/Debug;
-Lsun/security/util/DerEncoder;
-Lsun/security/util/DerIndefLenConverter;
-Lsun/security/util/DerInputBuffer;
-Lsun/security/util/DerInputStream;
-Lsun/security/util/DerOutputStream;
-Lsun/security/util/DerValue;
-Lsun/security/util/DisabledAlgorithmConstraints;
-Lsun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint;
-Lsun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint$Operator;
-Lsun/security/util/DisabledAlgorithmConstraints$KeySizeConstraints;
-Lsun/security/util/KeyUtil;
-Lsun/security/util/Length;
-Lsun/security/util/MemoryCache;
-Lsun/security/util/MemoryCache$CacheEntry;
-Lsun/security/util/MemoryCache$SoftCacheEntry;
-Lsun/security/util/ObjectIdentifier;
-Lsun/security/x509/AccessDescription;
-Lsun/security/x509/AlgorithmId;
-Lsun/security/x509/AuthorityInfoAccessExtension;
-Lsun/security/x509/AuthorityKeyIdentifierExtension;
-Lsun/security/x509/AVA;
-Lsun/security/x509/AVAKeyword;
-Lsun/security/x509/BasicConstraintsExtension;
-Lsun/security/x509/CertAttrSet;
-Lsun/security/x509/CertificateAlgorithmId;
-Lsun/security/x509/CertificateExtensions;
-Lsun/security/x509/CertificateIssuerExtension;
-Lsun/security/x509/CertificatePoliciesExtension;
-Lsun/security/x509/CertificatePolicyId;
-Lsun/security/x509/CertificateSerialNumber;
-Lsun/security/x509/CertificateValidity;
-Lsun/security/x509/CertificateVersion;
-Lsun/security/x509/CertificateX509Key;
-Lsun/security/x509/CRLDistributionPointsExtension;
-Lsun/security/x509/CRLNumberExtension;
-Lsun/security/x509/CRLReasonCodeExtension;
-Lsun/security/x509/DeltaCRLIndicatorExtension;
-Lsun/security/x509/DistributionPoint;
-Lsun/security/x509/DNSName;
-Lsun/security/x509/ExtendedKeyUsageExtension;
-Lsun/security/x509/Extension;
-Lsun/security/x509/FreshestCRLExtension;
-Lsun/security/x509/GeneralName;
-Lsun/security/x509/GeneralNameInterface;
-Lsun/security/x509/GeneralNames;
-Lsun/security/x509/InhibitAnyPolicyExtension;
-Lsun/security/x509/IssuerAlternativeNameExtension;
-Lsun/security/x509/IssuingDistributionPointExtension;
-Lsun/security/x509/KeyIdentifier;
-Lsun/security/x509/KeyUsageExtension;
-Lsun/security/x509/NameConstraintsExtension;
-Lsun/security/x509/NetscapeCertTypeExtension;
-Lsun/security/x509/OCSPNoCheckExtension;
-Lsun/security/x509/OIDMap;
-Lsun/security/x509/OIDMap$OIDInfo;
-Lsun/security/x509/PKIXExtensions;
-Lsun/security/x509/PolicyConstraintsExtension;
-Lsun/security/x509/PolicyInformation;
-Lsun/security/x509/PolicyMappingsExtension;
-Lsun/security/x509/PrivateKeyUsageExtension;
-Lsun/security/x509/RDN;
-Lsun/security/x509/SerialNumber;
-Lsun/security/x509/SubjectAlternativeNameExtension;
-Lsun/security/x509/SubjectInfoAccessExtension;
-Lsun/security/x509/SubjectKeyIdentifierExtension;
-Lsun/security/x509/URIName;
-Lsun/security/x509/X500Name;
-Lsun/security/x509/X500Name$1;
-Lsun/security/x509/X509AttributeName;
-Lsun/security/x509/X509CertImpl;
-Lsun/security/x509/X509CertInfo;
-Lsun/security/x509/X509Key;
-Lsun/util/calendar/AbstractCalendar;
-Lsun/util/calendar/BaseCalendar;
-Lsun/util/calendar/BaseCalendar$Date;
-Lsun/util/calendar/CalendarDate;
-Lsun/util/calendar/CalendarSystem;
-Lsun/util/calendar/CalendarUtils;
-Lsun/util/calendar/Gregorian;
-Lsun/util/calendar/Gregorian$Date;
-Lsun/util/calendar/JulianCalendar;
-Lsun/util/calendar/LocalGregorianCalendar;
-Lsun/util/locale/BaseLocale;
-Lsun/util/locale/BaseLocale$Cache;
-Lsun/util/locale/BaseLocale$Key;
-Lsun/util/locale/InternalLocaleBuilder;
-Lsun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar;
-Lsun/util/locale/LanguageTag;
-Lsun/util/locale/LocaleObjectCache;
-Lsun/util/locale/LocaleObjectCache$CacheEntry;
-Lsun/util/locale/LocaleSyntaxException;
-Lsun/util/locale/LocaleUtils;
-Lsun/util/locale/ParseStatus;
-Lsun/util/locale/StringTokenIterator;
-Lsun/util/logging/LoggingProxy;
-Lsun/util/logging/LoggingSupport;
-Lsun/util/logging/LoggingSupport$1;
-Lsun/util/logging/PlatformLogger;
-Lsun/util/logging/PlatformLogger$1;
-Lsun/util/logging/PlatformLogger$Level;
-LV;
-LZ;
diff --git a/services/tests/notification/Android.mk b/services/tests/notification/Android.mk
index 79f96fd..597a584 100644
--- a/services/tests/notification/Android.mk
+++ b/services/tests/notification/Android.mk
@@ -28,6 +28,7 @@
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
 LOCAL_JACK_FLAGS := --multi-dex native
+LOCAL_DX_FLAGS := --multi-dex
 
 LOCAL_PACKAGE_NAME := FrameworksNotificationTests
 LOCAL_COMPATIBILITY_SUITE := device-tests
@@ -51,9 +52,4 @@
 
 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
 
-# Code coverage puts us over the dex limit, so enable multi-dex for coverage-enabled builds
-ifeq (true,$(EMMA_INSTRUMENT))
-LOCAL_JACK_FLAGS := --multi-dex native
-endif # EMMA_INSTRUMENT_STATIC
-
 include $(BUILD_PACKAGE)
diff --git a/services/tests/notification/src/com/android/server/notification/BuzzBeepBlinkTest.java b/services/tests/notification/src/com/android/server/notification/BuzzBeepBlinkTest.java
index ef347fd..0b4d61f 100644
--- a/services/tests/notification/src/com/android/server/notification/BuzzBeepBlinkTest.java
+++ b/services/tests/notification/src/com/android/server/notification/BuzzBeepBlinkTest.java
@@ -19,6 +19,7 @@
 import static android.app.Notification.GROUP_ALERT_CHILDREN;
 import static android.app.Notification.GROUP_ALERT_SUMMARY;
 import static android.app.NotificationManager.IMPORTANCE_HIGH;
+import static android.app.NotificationManager.IMPORTANCE_MIN;
 
 import static junit.framework.Assert.assertNull;
 import static junit.framework.Assert.assertTrue;
@@ -30,7 +31,12 @@
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.argThat;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.timeout;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.app.ActivityManager;
 import android.app.Notification;
@@ -52,9 +58,13 @@
 import android.service.notification.StatusBarNotification;
 import android.support.test.runner.AndroidJUnit4;
 import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Slog;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.IAccessibilityManager;
+import android.view.accessibility.IAccessibilityManagerClient;
 
+import com.android.internal.util.IntPair;
 import com.android.server.lights.Light;
 
 import org.junit.Before;
@@ -64,6 +74,8 @@
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
 
 @SmallTest
 @RunWith(AndroidJUnit4.class)
@@ -73,8 +85,12 @@
     @Mock Vibrator mVibrator;
     @Mock android.media.IRingtonePlayer mRingtonePlayer;
     @Mock Light mLight;
-    @Mock Handler mHandler;
-    @Mock NotificationUsageStats mUsageStats;
+    @Mock
+    NotificationManagerService.WorkerHandler mHandler;
+    @Mock
+    NotificationUsageStats mUsageStats;
+    @Mock
+    IAccessibilityManager mAccessibilityService;
 
     private NotificationManagerService mService;
     private String mPkg = "com.android.server.notification";
@@ -106,21 +122,25 @@
     private static final int MAX_VIBRATION_DELAY = 1000;
 
     @Before
-    public void setUp() {
-        // Magic to allow spying package-private methods on system classes
-        System.setProperty("dexmaker.share_classloader", "true");
-
+    public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
 
         when(mAudioManager.isAudioFocusExclusive()).thenReturn(false);
         when(mAudioManager.getRingtonePlayer()).thenReturn(mRingtonePlayer);
         when(mAudioManager.getStreamVolume(anyInt())).thenReturn(10);
         when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_NORMAL);
-
         when(mUsageStats.isAlertRateLimited(any())).thenReturn(false);
 
+        long serviceReturnValue = IntPair.of(
+                AccessibilityManager.STATE_FLAG_ACCESSIBILITY_ENABLED,
+                AccessibilityEvent.TYPES_ALL_MASK);
+        when(mAccessibilityService.addClient(any(), anyInt())).thenReturn(serviceReturnValue);
+        AccessibilityManager accessibilityManager =
+                new AccessibilityManager(Handler.getMain(), mAccessibilityService, 0);
+        verify(mAccessibilityService).addClient(any(IAccessibilityManagerClient.class), anyInt());
+        assertTrue(accessibilityManager.isEnabled());
+
         mService = spy(new NotificationManagerService(getContext()));
-        doNothing().when(mService).sendAccessibilityEvent((Notification) any(), anyString());
         mService.setAudioManager(mAudioManager);
         mService.setVibrator(mVibrator);
         mService.setSystemReady(true);
@@ -129,6 +149,7 @@
         mService.setScreenOn(false);
         mService.setFallbackVibrationPattern(FALLBACK_VIBRATION_PATTERN);
         mService.setUsageStats(mUsageStats);
+        mService.setAccessibilityManager(accessibilityManager);
     }
 
     //
@@ -358,16 +379,6 @@
                 eq(CUSTOM_LIGHT_COLOR), anyInt(), eq(CUSTOM_LIGHT_ON), eq(CUSTOM_LIGHT_OFF));
     }
 
-    private void verifySendAccessibilityEvent() {
-        verify(mService, times(1))
-                .sendAccessibilityEvent((Notification) anyObject(), anyString());
-    }
-
-    private void verifyNoAccessibilityEvent() {
-        verify(mService, never())
-                .sendAccessibilityEvent((Notification) anyObject(), anyString());
-    }
-
     //
     // Tests
     //
@@ -390,7 +401,7 @@
 
         verifyBeepLooped();
         verifyNeverVibrate();
-        verifySendAccessibilityEvent();
+        verify(mAccessibilityService, times(1)).sendAccessibilityEvent(any(), anyInt());
     }
 
     @Test
@@ -400,7 +411,6 @@
         mService.buzzBeepBlinkLocked(r);
 
         verifyBeep();
-        verifySendAccessibilityEvent();
     }
 
     @Test
@@ -421,7 +431,6 @@
 
         verifyNeverBeep();
         verifyNeverVibrate();
-        verifyNoAccessibilityEvent();
     }
 
     @Test
@@ -433,7 +442,6 @@
 
         verifyNeverBeep();
         verifyNeverVibrate();
-        verifyNoAccessibilityEvent();
     }
 
     @Test
@@ -448,6 +456,7 @@
         r.isUpdate = true;
         mService.buzzBeepBlinkLocked(r);
         verifyBeepLooped();
+        verify(mAccessibilityService, times(2)).sendAccessibilityEvent(any(), anyInt());
     }
 
     @Test
@@ -459,12 +468,11 @@
         // set up internal state
         mService.buzzBeepBlinkLocked(r);
         Mockito.reset(mRingtonePlayer);
-        Mockito.reset(mService);
 
         // update should not beep
         mService.buzzBeepBlinkLocked(s);
         verifyNeverBeep();
-        verifyNoAccessibilityEvent();
+        verify(mAccessibilityService, times(1)).sendAccessibilityEvent(any(), anyInt());
     }
 
     @Test
@@ -552,12 +560,28 @@
     }
 
     @Test
+    public void testInCallNotification() throws Exception {
+        NotificationRecord r = getBeepyNotification();
+
+        // set up internal state
+        mService.buzzBeepBlinkLocked(r);
+        Mockito.reset(mRingtonePlayer);
+
+        mService.mInCall = true;
+        mService.buzzBeepBlinkLocked(r);
+
+        verify(mService, times(1)).playInCallNotification();
+        verifyNeverBeep(); // doesn't play normal beep
+    }
+
+    @Test
     public void testNoDemoteSoundToVibrateIfVibrateGiven() throws Exception {
         NotificationRecord r = getBuzzyBeepyNotification();
         assertTrue(r.getSound() != null);
 
         // the phone is quiet
         when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE);
+        when(mAudioManager.getStreamVolume(anyInt())).thenReturn(0);
 
         mService.buzzBeepBlinkLocked(r);
 
@@ -568,6 +592,22 @@
     }
 
     @Test
+    public void testNoDemoteSoundToVibrateIfNonNotificationStream() throws Exception {
+        NotificationRecord r = getBeepyNotification();
+        assertTrue(r.getSound() != null);
+        assertNull(r.getVibration());
+
+        // the phone is quiet
+        when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE);
+        when(mAudioManager.getStreamVolume(anyInt())).thenReturn(1);
+
+        mService.buzzBeepBlinkLocked(r);
+
+        verifyNeverVibrate();
+        verifyBeepLooped();
+    }
+
+    @Test
     public void testDemoteSoundToVibrate() throws Exception {
         NotificationRecord r = getBeepyNotification();
         assertTrue(r.getSound() != null);
@@ -575,6 +615,7 @@
 
         // the phone is quiet
         when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE);
+        when(mAudioManager.getStreamVolume(anyInt())).thenReturn(0);
 
         mService.buzzBeepBlinkLocked(r);
 
@@ -607,7 +648,6 @@
 
         verifyNeverBeep();
         verifyVibrate();
-        verifySendAccessibilityEvent();
     }
 
     @Test
@@ -706,12 +746,10 @@
         // set up internal state
         mService.buzzBeepBlinkLocked(r);
         Mockito.reset(mVibrator);
-        Mockito.reset(mService);
 
         // update should not beep
         mService.buzzBeepBlinkLocked(s);
         verifyNeverVibrate();
-        verifyNoAccessibilityEvent();
     }
 
     @Test
@@ -827,7 +865,6 @@
         mService.addNotification(r);
 
         mService.buzzBeepBlinkLocked(r);
-
         verifyNeverBeep();
     }
 
@@ -855,7 +892,6 @@
         summary.getNotification().flags |= Notification.FLAG_GROUP_SUMMARY;
 
         mService.buzzBeepBlinkLocked(summary);
-
         verify(mUsageStats, never()).isAlertRateLimited(any());
     }
 
@@ -874,6 +910,30 @@
         verifyNeverBeep();
     }
 
+    @Test
+    public void testA11yMinInitialPost() throws Exception {
+        NotificationRecord r = getQuietNotification();
+        r.setImportance(IMPORTANCE_MIN, "");
+        mService.buzzBeepBlinkLocked(r);
+        verify(mAccessibilityService, never()).sendAccessibilityEvent(any(), anyInt());
+    }
+
+    @Test
+    public void testA11yQuietInitialPost() throws Exception {
+        NotificationRecord r = getQuietNotification();
+        mService.buzzBeepBlinkLocked(r);
+        verify(mAccessibilityService, times(1)).sendAccessibilityEvent(any(), anyInt());
+    }
+
+    @Test
+    public void testA11yQuietUpdate() throws Exception {
+        NotificationRecord r = getQuietNotification();
+        mService.buzzBeepBlinkLocked(r);
+        r.isUpdate = true;
+        mService.buzzBeepBlinkLocked(r);
+        verify(mAccessibilityService, times(1)).sendAccessibilityEvent(any(), anyInt());
+    }
+
     static class VibrateRepeatMatcher implements ArgumentMatcher<VibrationEffect> {
         private final int mRepeatIndex;
 
diff --git a/services/tests/notification/src/com/android/server/notification/GroupHelperTest.java b/services/tests/notification/src/com/android/server/notification/GroupHelperTest.java
index 8dd1779..f75c648 100644
--- a/services/tests/notification/src/com/android/server/notification/GroupHelperTest.java
+++ b/services/tests/notification/src/com/android/server/notification/GroupHelperTest.java
@@ -15,6 +15,9 @@
  */
 package com.android.server.notification;
 
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
@@ -29,18 +32,16 @@
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
 
-import android.app.AlarmManager;
 import android.app.Notification;
-import android.app.NotificationChannel;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
 import android.os.UserHandle;
 import android.service.notification.StatusBarNotification;
 import android.support.test.runner.AndroidJUnit4;
 import android.test.suitebuilder.annotation.SmallTest;
 
 import java.util.ArrayList;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Map;
 
 @SmallTest
 @RunWith(AndroidJUnit4.class)
@@ -77,7 +78,8 @@
     public void testNoGroup_postingUnderLimit() throws Exception {
         final String pkg = "package";
         for (int i = 0; i < GroupHelper.AUTOGROUP_AT_COUNT - 1; i++) {
-            mGroupHelper.onNotificationPosted(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM));
+            mGroupHelper.onNotificationPosted(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM),
+                    false);
         }
         verify(mCallback, never()).addAutoGroupSummary(
                 eq(UserHandle.USER_SYSTEM), eq(pkg), anyString());
@@ -91,10 +93,11 @@
         final String pkg = "package";
         final String pkg2 = "package2";
         for (int i = 0; i < GroupHelper.AUTOGROUP_AT_COUNT - 1; i++) {
-            mGroupHelper.onNotificationPosted(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM));
+            mGroupHelper.onNotificationPosted(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM),
+                    false);
         }
         mGroupHelper.onNotificationPosted(
-                getSbn(pkg2, GroupHelper.AUTOGROUP_AT_COUNT, "four", UserHandle.SYSTEM));
+                getSbn(pkg2, GroupHelper.AUTOGROUP_AT_COUNT, "four", UserHandle.SYSTEM), false);
         verify(mCallback, never()).addAutoGroupSummary(
                 eq(UserHandle.USER_SYSTEM), eq(pkg), anyString());
         verify(mCallback, never()).addAutoGroup(anyString());
@@ -106,10 +109,12 @@
     public void testNoGroup_multiUser() throws Exception {
         final String pkg = "package";
         for (int i = 0; i < GroupHelper.AUTOGROUP_AT_COUNT - 1; i++) {
-            mGroupHelper.onNotificationPosted(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM));
+            mGroupHelper.onNotificationPosted(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM),
+                    false);
         }
         mGroupHelper.onNotificationPosted(
-                getSbn(pkg, GroupHelper.AUTOGROUP_AT_COUNT, "four", UserHandle.ALL));
+                getSbn(pkg, GroupHelper.AUTOGROUP_AT_COUNT, "four", UserHandle.ALL),
+                false);
         verify(mCallback, never()).addAutoGroupSummary(anyInt(), eq(pkg), anyString());
         verify(mCallback, never()).addAutoGroup(anyString());
         verify(mCallback, never()).removeAutoGroup(anyString());
@@ -120,10 +125,12 @@
     public void testNoGroup_someAreGrouped() throws Exception {
         final String pkg = "package";
         for (int i = 0; i < GroupHelper.AUTOGROUP_AT_COUNT - 1; i++) {
-            mGroupHelper.onNotificationPosted(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM));
+            mGroupHelper.onNotificationPosted(
+                    getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM), false);
         }
         mGroupHelper.onNotificationPosted(
-                getSbn(pkg, GroupHelper.AUTOGROUP_AT_COUNT, "four", UserHandle.SYSTEM, "a"));
+                getSbn(pkg, GroupHelper.AUTOGROUP_AT_COUNT, "four", UserHandle.SYSTEM, "a"),
+                false);
         verify(mCallback, never()).addAutoGroupSummary(
                 eq(UserHandle.USER_SYSTEM), eq(pkg), anyString());
         verify(mCallback, never()).addAutoGroup(anyString());
@@ -136,7 +143,8 @@
     public void testPostingOverLimit() throws Exception {
         final String pkg = "package";
         for (int i = 0; i < GroupHelper.AUTOGROUP_AT_COUNT; i++) {
-            mGroupHelper.onNotificationPosted(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM));
+            mGroupHelper.onNotificationPosted(
+                    getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM), false);
         }
         verify(mCallback, times(1)).addAutoGroupSummary(anyInt(), eq(pkg), anyString());
         verify(mCallback, times(GroupHelper.AUTOGROUP_AT_COUNT)).addAutoGroup(anyString());
@@ -151,7 +159,7 @@
         for (int i = 0; i < GroupHelper.AUTOGROUP_AT_COUNT; i++) {
             final StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
             posted.add(sbn);
-            mGroupHelper.onNotificationPosted(sbn);
+            mGroupHelper.onNotificationPosted(sbn, false);
         }
         verify(mCallback, times(1)).addAutoGroupSummary(anyInt(), eq(pkg), anyString());
         verify(mCallback, times(GroupHelper.AUTOGROUP_AT_COUNT)).addAutoGroup(anyString());
@@ -178,7 +186,7 @@
         for (int i = 0; i < GroupHelper.AUTOGROUP_AT_COUNT; i++) {
             final StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
             posted.add(sbn);
-            mGroupHelper.onNotificationPosted(sbn);
+            mGroupHelper.onNotificationPosted(sbn, false);
         }
         verify(mCallback, times(1)).addAutoGroupSummary(anyInt(), eq(pkg), anyString());
         verify(mCallback, times(GroupHelper.AUTOGROUP_AT_COUNT)).addAutoGroup(anyString());
@@ -190,7 +198,7 @@
         for (i = 0; i < GroupHelper.AUTOGROUP_AT_COUNT - 2; i++) {
             final StatusBarNotification sbn =
                     getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM, "app group");
-            mGroupHelper.onNotificationPosted(sbn);
+            mGroupHelper.onNotificationPosted(sbn, false);
         }
         verify(mCallback, times(GroupHelper.AUTOGROUP_AT_COUNT - 2)).removeAutoGroup(anyString());
         verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
@@ -199,9 +207,48 @@
         for (; i < GroupHelper.AUTOGROUP_AT_COUNT; i++) {
             final StatusBarNotification sbn =
                     getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM, "app group");
-            mGroupHelper.onNotificationPosted(sbn);
+            mGroupHelper.onNotificationPosted(sbn, false);
         }
         verify(mCallback, times(2)).removeAutoGroup(anyString());
         verify(mCallback, times(1)).removeAutoGroupSummary(anyInt(), anyString());
     }
+
+    @Test
+    public void testNewNotificationsAddedToAutogroup_ifOriginalNotificationsCanceled()
+            throws Exception {
+        final String pkg = "package";
+        List<StatusBarNotification> posted = new ArrayList<>();
+        for (int i = 0; i < GroupHelper.AUTOGROUP_AT_COUNT; i++) {
+            final StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            posted.add(sbn);
+            mGroupHelper.onNotificationPosted(sbn, false);
+        }
+        verify(mCallback, times(1)).addAutoGroupSummary(anyInt(), eq(pkg), anyString());
+        verify(mCallback, times(GroupHelper.AUTOGROUP_AT_COUNT)).addAutoGroup(anyString());
+        verify(mCallback, never()).removeAutoGroup(anyString());
+        verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
+        Mockito.reset(mCallback);
+
+        for (int i = posted.size() - 2; i >= 0; i--) {
+            mGroupHelper.onNotificationRemoved(posted.remove(i));
+        }
+        verify(mCallback, never()).removeAutoGroup(anyString());
+        verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
+        Mockito.reset(mCallback);
+
+        // only one child remains
+        Map<String, LinkedHashSet<String>> ungroupedForUser =
+                mGroupHelper.mUngroupedNotifications.get(UserHandle.USER_SYSTEM);
+        assertNotNull(ungroupedForUser);
+        assertEquals(1, ungroupedForUser.get(pkg).size());
+
+        // Add new notification; it should be autogrouped even though the total count is
+        // < AUTOGROUP_AT_COUNT
+        final StatusBarNotification sbn = getSbn(pkg, 5, String.valueOf(5), UserHandle.SYSTEM);
+        posted.add(sbn);
+        mGroupHelper.onNotificationPosted(sbn, true);
+        verify(mCallback, times(posted.size())).addAutoGroup(anyString());
+        verify(mCallback, never()).removeAutoGroup(anyString());
+        verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
+    }
 }
diff --git a/services/tests/notification/src/com/android/server/notification/ManagedServicesTest.java b/services/tests/notification/src/com/android/server/notification/ManagedServicesTest.java
new file mode 100644
index 0000000..a4b9b25
--- /dev/null
+++ b/services/tests/notification/src/com/android/server/notification/ManagedServicesTest.java
@@ -0,0 +1,803 @@
+/*
+ * 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.notification;
+
+import static com.android.server.notification.ManagedServices.APPROVAL_BY_COMPONENT;
+import static com.android.server.notification.ManagedServices.APPROVAL_BY_PACKAGE;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.content.pm.UserInfo;
+import android.os.Build;
+import android.os.IBinder;
+import android.os.IInterface;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.util.ArrayMap;
+import android.util.Xml;
+
+import com.android.internal.util.FastXmlSerializer;
+
+import com.google.android.collect.Lists;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ManagedServicesTest extends NotificationTestCase {
+
+    @Mock
+    private IPackageManager mIpm;
+    @Mock
+    private PackageManager mPm;
+    @Mock
+    private UserManager mUm;
+    @Mock
+    private ManagedServices.UserProfiles mUserProfiles;
+    Object mLock = new Object();
+
+    UserInfo mZero = new UserInfo(0, "zero", 0);
+    UserInfo mTen = new UserInfo(10, "ten", 0);
+
+    private static final String SETTING = "setting";
+    private static final String SECONDARY_SETTING = "secondary_setting";
+
+    private ArrayMap<Integer, String> mExpectedPrimaryPackages;
+    private ArrayMap<Integer, String> mExpectedPrimaryComponentNames;
+    private ArrayMap<Integer, String> mExpectedSecondaryPackages;
+    private ArrayMap<Integer, String> mExpectedSecondaryComponentNames;
+
+    // type : user : list of approved
+    private ArrayMap<Integer, ArrayMap<Integer, String>> mExpectedPrimary = new ArrayMap<>();
+    private ArrayMap<Integer, ArrayMap<Integer, String>> mExpectedSecondary = new ArrayMap<>();
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+
+        getContext().setMockPackageManager(mPm);
+        getContext().addMockSystemService(Context.USER_SERVICE, mUm);
+
+        List<UserInfo> users = new ArrayList<>();
+        users.add(mZero);
+        users.add(mTen);
+        users.add(new UserInfo(11, "11", 0));
+        users.add(new UserInfo(12, "12", 0));
+        for (UserInfo user : users) {
+            when(mUm.getUserInfo(eq(user.id))).thenReturn(user);
+        }
+        when(mUm.getUsers()).thenReturn(users);
+        when(mUserProfiles.getCurrentProfileIds()).thenReturn(new int[] {0, 10, 11, 12});
+
+        mExpectedPrimaryPackages = new ArrayMap<>();
+        mExpectedPrimaryPackages.put(0, "this.is.a.package.name:another.package");
+        mExpectedPrimaryPackages.put(10, "this.is.another.package");
+        mExpectedPrimaryPackages.put(11, "");
+        mExpectedPrimaryPackages.put(12, "bananas!");
+        mExpectedPrimaryComponentNames = new ArrayMap<>();
+        mExpectedPrimaryComponentNames.put(0, "this.is.a.package.name/Ba:another.package/B1");
+        mExpectedPrimaryComponentNames.put(10, "this.is.another.package/M1");
+        mExpectedPrimaryComponentNames.put(11, "");
+        mExpectedPrimaryComponentNames.put(12, "bananas!/Bananas!");
+        mExpectedPrimary.put(APPROVAL_BY_PACKAGE, mExpectedPrimaryPackages);
+        mExpectedPrimary.put(APPROVAL_BY_COMPONENT, mExpectedPrimaryComponentNames);
+
+        mExpectedSecondaryComponentNames = new ArrayMap<>();
+        mExpectedSecondaryComponentNames.put(0, "secondary/component.Name");
+        mExpectedSecondaryComponentNames.put(10,
+                "this.is.another.package/with.Component:component/2:package/component2");
+        mExpectedSecondaryPackages = new ArrayMap<>();
+        mExpectedSecondaryPackages.put(0, "secondary");
+        mExpectedSecondaryPackages.put(10,
+                "this.is.another.package:component:package");
+        mExpectedSecondary.put(APPROVAL_BY_PACKAGE, mExpectedSecondaryPackages);
+        mExpectedSecondary.put(APPROVAL_BY_COMPONENT, mExpectedSecondaryComponentNames);
+    }
+
+    @Test
+    public void testBackupAndRestore_migration() throws Exception {
+        for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
+            ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
+                    mIpm, approvalLevel);
+
+            for (int userId : mExpectedPrimary.get(approvalLevel).keySet()) {
+                service.onSettingRestored(
+                        service.getConfig().secureSettingName,
+                        mExpectedPrimary.get(approvalLevel).get(userId),
+                        Build.VERSION_CODES.O, userId);
+            }
+            verifyExpectedApprovedEntries(service, true);
+
+            for (int userId : mExpectedSecondary.get(approvalLevel).keySet()) {
+                service.onSettingRestored(service.getConfig().secondarySettingName,
+                        mExpectedSecondary.get(approvalLevel).get(userId), Build.VERSION_CODES.O,
+                        userId);
+            }
+            verifyExpectedApprovedEntries(service);
+        }
+    }
+
+    @Test
+    public void testBackupAndRestore_migration_preO() throws Exception {
+        ArrayMap backupPrimaryPackages = new ArrayMap<>();
+        backupPrimaryPackages.put(0, "backup.0:backup:0a");
+        backupPrimaryPackages.put(10, "10.backup");
+        backupPrimaryPackages.put(11, "eleven");
+        backupPrimaryPackages.put(12, "");
+        ArrayMap backupPrimaryComponentNames = new ArrayMap<>();
+        backupPrimaryComponentNames.put(0, "backup.first/whatever:a/b");
+        backupPrimaryComponentNames.put(10, "again/M1");
+        backupPrimaryComponentNames.put(11, "orange/youglad:itisnot/banana");
+        backupPrimaryComponentNames.put(12, "");
+        ArrayMap<Integer, ArrayMap<Integer, String>> backupPrimary = new ArrayMap<>();
+        backupPrimary.put(APPROVAL_BY_PACKAGE, backupPrimaryPackages);
+        backupPrimary.put(APPROVAL_BY_COMPONENT, backupPrimaryComponentNames);
+
+        ArrayMap backupSecondaryComponentNames = new ArrayMap<>();
+        backupSecondaryComponentNames.put(0, "secondary.1/component.Name");
+        backupSecondaryComponentNames.put(10,
+                "this.is.another.package.backup/with.Component:component.backup/2");
+        ArrayMap backupSecondaryPackages = new ArrayMap<>();
+        backupSecondaryPackages.put(0, "");
+        backupSecondaryPackages.put(10,
+                "this.is.another.package.backup:package.backup");
+        ArrayMap<Integer, ArrayMap<Integer, String>> backupSecondary = new ArrayMap<>();
+        backupSecondary.put(APPROVAL_BY_PACKAGE, backupSecondaryPackages);
+        backupSecondary.put(APPROVAL_BY_COMPONENT, backupSecondaryComponentNames);
+
+        for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
+            ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
+                    mIpm, approvalLevel);
+
+            // not an expected flow but a way to get data into the settings
+            for (int userId : mExpectedPrimary.get(approvalLevel).keySet()) {
+                service.onSettingRestored(
+                        service.getConfig().secureSettingName,
+                        mExpectedPrimary.get(approvalLevel).get(userId),
+                        Build.VERSION_CODES.O, userId);
+            }
+
+            for (int userId : mExpectedSecondary.get(approvalLevel).keySet()) {
+                service.onSettingRestored(service.getConfig().secondarySettingName,
+                        mExpectedSecondary.get(approvalLevel).get(userId), Build.VERSION_CODES.O,
+                        userId);
+            }
+
+            // actual test
+            for (int userId : backupPrimary.get(approvalLevel).keySet()) {
+                service.onSettingRestored(
+                        service.getConfig().secureSettingName,
+                        backupPrimary.get(approvalLevel).get(userId),
+                        Build.VERSION_CODES.N_MR1, userId);
+            }
+            verifyExpectedApprovedEntries(service, true);
+
+            for (int userId : backupSecondary.get(approvalLevel).keySet()) {
+                service.onSettingRestored(service.getConfig().secondarySettingName,
+                        backupSecondary.get(approvalLevel).get(userId),
+                        Build.VERSION_CODES.N_MR1, userId);
+            }
+            verifyExpectedApprovedEntries(service);
+            verifyExpectedApprovedEntries(service, backupPrimary.get(approvalLevel));
+            verifyExpectedApprovedEntries(service, backupSecondary.get(approvalLevel));
+        }
+    }
+
+    @Test
+    public void testReadXml_migrationFromSettings() throws Exception {
+        for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
+            ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
+                    mIpm, approvalLevel);
+
+            // approved services aren't in xml
+            XmlPullParser parser = Xml.newPullParser();
+            parser.setInput(new BufferedInputStream(new ByteArrayInputStream(new byte[]{})),
+                    null);
+            writeExpectedValuesToSettings(approvalLevel);
+
+            service.migrateToXml();
+
+            verifyExpectedApprovedEntries(service);
+        }
+    }
+
+    @Test
+    public void testReadXml() throws Exception {
+        for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
+            ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
+                    mIpm, approvalLevel);
+
+            loadXml(service);
+
+            verifyExpectedApprovedEntries(service);
+
+            int[] invalidUsers = new int[] {98, 99};
+            for (int invalidUser : invalidUsers) {
+                assertFalse("service type " + service.mApprovalLevel + ":"
+                                + invalidUser + " is allowed for user " + invalidUser,
+                        service.isPackageOrComponentAllowed(
+                                String.valueOf(invalidUser), invalidUser));
+            }
+        }
+    }
+
+    @Test
+    public void testWriteXml_trimsMissingServices() throws Exception {
+        for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
+            ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
+                    mIpm, approvalLevel);
+            loadXml(service);
+
+            // remove missing
+            mExpectedPrimaryPackages.put(0, "another.package");
+            mExpectedPrimaryPackages.remove(12);
+            mExpectedPrimaryComponentNames.put(0, "another.package/B1");
+            mExpectedPrimaryComponentNames.remove(12);
+            mExpectedSecondaryPackages.put(10, "this.is.another.package:component");
+            mExpectedSecondaryComponentNames.put(
+                    10, "this.is.another.package/with.Component:component/2");
+
+            for (UserInfo userInfo : mUm.getUsers()) {
+                List<String> entriesExpectedToHaveServices = new ArrayList<>();
+                if (mExpectedPrimary.get(approvalLevel).containsKey(userInfo.id)) {
+                    for (String packageOrComponent :
+                            mExpectedPrimary.get(approvalLevel).get(userInfo.id).split(":")) {
+                        if (!TextUtils.isEmpty(packageOrComponent)) {
+                            entriesExpectedToHaveServices.add(
+                                    service.getPackageName(packageOrComponent));
+                        }
+                    }
+                }
+                if (mExpectedSecondary.get(approvalLevel).containsKey(userInfo.id)) {
+                    for (String packageOrComponent :
+                            mExpectedSecondary.get(approvalLevel).get(userInfo.id).split(":")) {
+                        if (!TextUtils.isEmpty(packageOrComponent)) {
+                            entriesExpectedToHaveServices.add(
+                                    service.getPackageName(packageOrComponent));
+                        }
+                    }
+                }
+                addExpectedServices(service, entriesExpectedToHaveServices, userInfo.id);
+            }
+
+            XmlSerializer serializer = new FastXmlSerializer();
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            serializer.setOutput(new BufferedOutputStream(baos), "utf-8");
+            serializer.startDocument(null, true);
+            service.writeXml(serializer, true);
+            serializer.endDocument();
+            serializer.flush();
+
+            XmlPullParser parser = Xml.newPullParser();
+            parser.setInput(new BufferedInputStream(
+                    new ByteArrayInputStream(baos.toByteArray())), null);
+            parser.nextTag();
+            service.readXml(parser);
+
+            verifyExpectedApprovedEntries(service);
+            assertFalse(service.isPackageOrComponentAllowed("this.is.a.package.name", 0));
+            assertFalse(service.isPackageOrComponentAllowed("bananas!", 12));
+            assertFalse(service.isPackageOrComponentAllowed("package/component2", 10));
+        }
+    }
+
+    @Test
+    public void testWriteXml_writesSetting() throws Exception {
+        for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
+            ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
+                    mIpm, approvalLevel);
+            loadXml(service);
+
+            XmlSerializer serializer = new FastXmlSerializer();
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            serializer.setOutput(new BufferedOutputStream(baos), "utf-8");
+            serializer.startDocument(null, true);
+            service.writeXml(serializer, false);
+            serializer.endDocument();
+            serializer.flush();
+
+            for (int userId : mUserProfiles.getCurrentProfileIds()) {
+                List<String> expected =
+                        stringToList(mExpectedPrimary.get(approvalLevel).get(userId));
+                List<String> actual = stringToList(Settings.Secure.getStringForUser(
+                        getContext().getContentResolver(),
+                        service.getConfig().secureSettingName, userId));
+                assertContentsInAnyOrder(actual, expected);
+            }
+        }
+    }
+
+    @Test
+    public void rebindServices_onlyBindsExactMatchesIfComponent() throws Exception {
+        // If the primary and secondary lists contain component names, only those components within
+        // the package should be matched
+        ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
+                mIpm,
+                ManagedServices.APPROVAL_BY_COMPONENT);
+
+        List<String> packages = new ArrayList<>();
+        packages.add("package");
+        packages.add("anotherPackage");
+        addExpectedServices(service, packages, 0);
+
+        // only 2 components are approved per package
+        mExpectedPrimaryComponentNames.clear();
+        mExpectedPrimaryComponentNames.put(0, "package/C1:package/C2");
+        mExpectedSecondaryComponentNames.clear();
+        mExpectedSecondaryComponentNames.put(0, "anotherPackage/C1:anotherPackage/C2");
+
+        loadXml(service);
+
+        // verify the 2 components per package are enabled (bound)
+        verifyExpectedBoundEntries(service, true);
+        verifyExpectedBoundEntries(service, false);
+
+        // verify the last component per package is not enabled/we don't try to bind to it
+        for (String pkg : packages) {
+            ComponentName unapprovedAdditionalComponent =
+                    ComponentName.unflattenFromString(pkg + "/C3");
+            assertFalse(
+                    service.isComponentEnabledForCurrentProfiles(
+                            unapprovedAdditionalComponent));
+            verify(mIpm, never()).getServiceInfo(
+                    eq(unapprovedAdditionalComponent), anyInt(), anyInt());
+        }
+    }
+
+    @Test
+    public void rebindServices_bindsEverythingInAPackage() throws Exception {
+        // If the primary and secondary lists contain packages, all components within those packages
+        // should be bound
+        ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles, mIpm,
+                APPROVAL_BY_PACKAGE);
+
+        List<String> packages = new ArrayList<>();
+        packages.add("package");
+        packages.add("packagea");
+        addExpectedServices(service, packages, 0);
+
+        // 2 approved packages
+        mExpectedPrimaryPackages.clear();
+        mExpectedPrimaryPackages.put(0, "package");
+        mExpectedSecondaryPackages.clear();
+        mExpectedSecondaryPackages.put(0, "packagea");
+
+        loadXml(service);
+
+        // verify the 3 components per package are enabled (bound)
+        verifyExpectedBoundEntries(service, true);
+        verifyExpectedBoundEntries(service, false);
+    }
+
+    @Test
+    public void testPackageUninstall_packageNoLongerInApprovedList() throws Exception {
+        for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
+            ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
+                    mIpm, approvalLevel);
+            writeExpectedValuesToSettings(approvalLevel);
+            service.migrateToXml();
+
+            mExpectedPrimaryPackages.put(0, "another.package");
+            mExpectedPrimaryComponentNames.put(0, "another.package/B1");
+            service.onPackagesChanged(true, new String[]{"this.is.a.package.name"}, new int[]{103});
+
+            verifyExpectedApprovedEntries(service);
+        }
+    }
+
+    @Test
+    public void testPackageUninstall_componentNoLongerInApprovedList() throws Exception {
+        for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
+            ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
+                    mIpm, approvalLevel);
+            writeExpectedValuesToSettings(approvalLevel);
+            service.migrateToXml();
+
+            mExpectedSecondaryComponentNames.put(10, "component/2");
+            mExpectedSecondaryPackages.put(10, "component");
+            service.onPackagesChanged(true, new String[]{"this.is.another.package"}, new int[]{
+                    UserHandle.PER_USER_RANGE + 1});
+
+            verifyExpectedApprovedEntries(service);
+        }
+    }
+
+    @Test
+    public void testSetPackageOrComponentEnabled() throws Exception {
+        for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
+            ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
+                    mIpm, approvalLevel);
+            ArrayMap<Integer, ArrayList<String>> expectedEnabled = new ArrayMap<>();
+            expectedEnabled.put(0,
+                    Lists.newArrayList(new String[]{"package/Comp", "package/C2", "again/M4"}));
+            expectedEnabled.put(10,
+                    Lists.newArrayList(new String[]{"user10package/B", "user10/Component",
+                            "user10package1/K", "user10.3/Component", "user10package2/L",
+                            "user10.4/Component"}));
+
+            for (int userId : expectedEnabled.keySet()) {
+                ArrayList<String> expectedForUser = expectedEnabled.get(userId);
+                for (int i = 0; i < expectedForUser.size(); i++) {
+                    boolean primary = i % 2 == 0;
+                    service.setPackageOrComponentEnabled(expectedForUser.get(i), userId, primary,
+                            true);
+                }
+            }
+
+            // verify everything added is approved
+            for (int userId : expectedEnabled.keySet()) {
+                ArrayList<String> expectedForUser = expectedEnabled.get(userId);
+                for (int i = 0; i < expectedForUser.size(); i++) {
+                    String verifyValue  = (approvalLevel == APPROVAL_BY_COMPONENT)
+                            ? expectedForUser.get(i)
+                            : service.getPackageName(expectedForUser.get(i));
+                    assertTrue("Not allowed: user: " + userId + " entry: " + verifyValue
+                            + " for approval level " + approvalLevel,
+                            service.isPackageOrComponentAllowed(verifyValue, userId));
+                }
+            }
+
+            ArrayMap<Integer, ArrayList<String>> expectedNoAccess = new ArrayMap<>();
+            for (int userId : expectedEnabled.keySet()) {
+                ArrayList<String> expectedForUser = expectedEnabled.get(userId);
+                for (int i = expectedForUser.size() - 1; i >= 0; i--) {
+                    ArrayList<String> removed = new ArrayList<>();
+                    if (i % 3 == 0) {
+                        String revokeAccessFor = expectedForUser.remove(i);
+                        removed.add(revokeAccessFor);
+                        service.setPackageOrComponentEnabled(
+                                revokeAccessFor, userId, i % 2 == 0, false);
+                    }
+                    expectedNoAccess.put(userId, removed);
+                }
+            }
+
+            // verify everything still there is approved
+            for (int userId : expectedEnabled.keySet()) {
+                ArrayList<String> expectedForUser = expectedEnabled.get(userId);
+                for (int i = 0; i < expectedForUser.size(); i++) {
+                    String verifyValue  = (approvalLevel == APPROVAL_BY_COMPONENT)
+                            ? expectedForUser.get(i)
+                            : service.getPackageName(expectedForUser.get(i));
+                    assertTrue("Not allowed: user: " + userId + " entry: " + verifyValue,
+                            service.isPackageOrComponentAllowed(verifyValue, userId));
+                }
+            }
+            // verify everything removed isn't
+            for (int userId : expectedNoAccess.keySet()) {
+                ArrayList<String> notExpectedForUser = expectedNoAccess.get(userId);
+                for (int i = 0; i < notExpectedForUser.size(); i++) {
+                    assertFalse(
+                            "Is allowed: user: " + userId + " entry: " + notExpectedForUser.get(i),
+                            service.isPackageOrComponentAllowed(notExpectedForUser.get(i), userId));
+                }
+            }
+        }
+    }
+
+    @Test
+    public void testGetAllowedPackages() throws Exception {
+        for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
+            ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
+                    mIpm, approvalLevel);
+            loadXml(service);
+
+            List<String> allowedPackagesForUser0 = new ArrayList<>();
+            allowedPackagesForUser0.add("this.is.a.package.name");
+            allowedPackagesForUser0.add("another.package");
+            allowedPackagesForUser0.add("secondary");
+
+            List<String> actual = service.getAllowedPackages(0);
+            assertEquals(3, actual.size());
+            for (String pkg : allowedPackagesForUser0) {
+                assertTrue(actual.contains(pkg));
+            }
+
+            List<String> allowedPackagesForUser10 = new ArrayList<>();
+            allowedPackagesForUser10.add("this.is.another.package");
+            allowedPackagesForUser10.add("package");
+            allowedPackagesForUser10.add("this.is.another.package");
+            allowedPackagesForUser10.add("component");
+
+            actual = service.getAllowedPackages(10);
+            assertEquals(4, actual.size());
+            for (String pkg : allowedPackagesForUser10) {
+                assertTrue(actual.contains(pkg));
+            }
+        }
+    }
+
+    @Test
+    public void testGetAllowedComponents() throws Exception {
+        ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles, mIpm,
+                APPROVAL_BY_COMPONENT);
+        loadXml(service);
+
+        List<ComponentName> expected = new ArrayList<>();
+        expected.add(ComponentName.unflattenFromString("this.is.another.package/M1"));
+        expected.add(ComponentName.unflattenFromString("this.is.another.package/with.Component"));
+        expected.add(ComponentName.unflattenFromString("component/2"));
+        expected.add(ComponentName.unflattenFromString("package/component2"));
+
+        List<ComponentName> actual = service.getAllowedComponents(10);
+
+        assertContentsInAnyOrder(expected, actual);
+
+        assertEquals(expected.size(), actual.size());
+
+        for (ComponentName cn : expected) {
+            assertTrue("Actual missing " + cn, actual.contains(cn));
+        }
+
+        for (ComponentName cn : actual) {
+            assertTrue("Actual contains extra " + cn, expected.contains(cn));
+        }
+    }
+
+    @Test
+    public void testGetAllowedComponents_approvalByPackage() throws Exception {
+        ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles, mIpm,
+                APPROVAL_BY_PACKAGE);
+        loadXml(service);
+
+        assertEquals(0, service.getAllowedComponents(10).size());
+    }
+
+    @Test
+    public void testOnUserRemoved() throws Exception {
+        for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
+            ManagedServices service = new TestManagedServices(getContext(), mLock, mUserProfiles,
+                    mIpm, approvalLevel);
+            loadXml(service);
+
+            ArrayMap<Integer, String> verifyMap = mExpectedPrimary.get(service.mApprovalLevel);
+            String user0 = verifyMap.remove(0);
+            verifyMap = mExpectedSecondary.get(service.mApprovalLevel);
+            user0 = user0 + ":" + verifyMap.remove(0);
+
+            service.onUserRemoved(0);
+
+            for (String verifyValue : user0.split(":")) {
+                if (!TextUtils.isEmpty(verifyValue)) {
+                    assertFalse("service type " + service.mApprovalLevel + ":" + verifyValue
+                            + " is still allowed",
+                            service.isPackageOrComponentAllowed(verifyValue, 0));
+                }
+            }
+
+            verifyExpectedApprovedEntries(service);
+        }
+    }
+
+    private void loadXml(ManagedServices service) throws Exception {
+        final StringBuffer xml = new StringBuffer();
+        xml.append("<" + service.getConfig().xmlTag + ">\n");
+        for (int userId : mExpectedPrimary.get(service.mApprovalLevel).keySet()) {
+            xml.append(getXmlEntry(
+                    mExpectedPrimary.get(service.mApprovalLevel).get(userId), userId, true));
+        }
+        for (int userId : mExpectedSecondary.get(service.mApprovalLevel).keySet()) {
+            xml.append(getXmlEntry(
+                    mExpectedSecondary.get(service.mApprovalLevel).get(userId), userId, false));
+        }
+        xml.append("<" + ManagedServices.TAG_MANAGED_SERVICES + " "
+                        + ManagedServices.ATT_USER_ID + "=\"99\" "
+                        + ManagedServices.ATT_IS_PRIMARY + "=\"true\" "
+                        + ManagedServices.ATT_APPROVED_LIST + "=\"99\" />\n");
+        xml.append("<" + ManagedServices.TAG_MANAGED_SERVICES + " "
+                + ManagedServices.ATT_USER_ID + "=\"98\" "
+                + ManagedServices.ATT_IS_PRIMARY + "=\"false\" "
+                + ManagedServices.ATT_APPROVED_LIST + "=\"98\" />\n");
+        xml.append("</" + service.getConfig().xmlTag + ">");
+
+        XmlPullParser parser = Xml.newPullParser();
+        parser.setInput(new BufferedInputStream(
+                new ByteArrayInputStream(xml.toString().getBytes())), null);
+        parser.nextTag();
+        service.readXml(parser);
+    }
+
+    private void addExpectedServices(final ManagedServices service, final List<String> packages,
+            int userId) {
+        when(mPm.queryIntentServicesAsUser(any(), anyInt(), eq(userId))).
+                thenAnswer(new Answer<List<ResolveInfo>>() {
+                    @Override
+                    public List<ResolveInfo> answer(InvocationOnMock invocationOnMock)
+                            throws Throwable {
+                        Object[] args = invocationOnMock.getArguments();
+                        Intent invocationIntent = (Intent) args[0];
+                        if (invocationIntent != null) {
+                            if (invocationIntent.getAction().equals(
+                                    service.getConfig().serviceInterface)
+                                    && packages.contains(invocationIntent.getPackage())) {
+                                List<ResolveInfo> dummyServices = new ArrayList<>();
+                                for (int i = 1; i <= 3; i ++) {
+                                    ResolveInfo resolveInfo = new ResolveInfo();
+                                    ServiceInfo serviceInfo = new ServiceInfo();
+                                    serviceInfo.packageName = invocationIntent.getPackage();
+                                    serviceInfo.name = "C"+i;
+                                    serviceInfo.permission = service.getConfig().bindPermission;
+                                    resolveInfo.serviceInfo = serviceInfo;
+                                    dummyServices.add(resolveInfo);
+                                }
+                                return dummyServices;
+                            }
+                        }
+                        return new ArrayList<>();
+                    }
+                });
+    }
+
+    private List<String> stringToList(String list) {
+        if (list == null) {
+            list = "";
+        }
+        return new ArrayList<>(Lists.newArrayList(list.split(
+                ManagedServices.ENABLED_SERVICES_SEPARATOR)));
+    }
+
+    private void assertContentsInAnyOrder(List<?> expected, List<?> actual) {
+        assertEquals(expected.size(), actual.size());
+
+        for (Object o : expected) {
+            assertTrue("Actual missing " + o, actual.contains(o));
+        }
+
+        for (Object o : actual) {
+            assertTrue("Actual contains extra " + o, expected.contains(o));
+        }
+    }
+
+    private void verifyExpectedBoundEntries(ManagedServices service, boolean primary)
+            throws Exception {
+        ArrayMap<Integer, String> verifyMap = primary ? mExpectedPrimary.get(service.mApprovalLevel)
+                : mExpectedSecondary.get(service.mApprovalLevel);
+        for (int userId : verifyMap.keySet()) {
+            for (String packageOrComponent : verifyMap.get(userId).split(":")) {
+                if (!TextUtils.isEmpty(packageOrComponent)) {
+                    if (service.mApprovalLevel == APPROVAL_BY_PACKAGE) {
+                        assertTrue(packageOrComponent,
+                                service.isComponentEnabledForPackage(packageOrComponent));
+                        for (int i = 1; i <= 3; i ++) {
+                            ComponentName componentName = ComponentName.unflattenFromString(
+                                    packageOrComponent +"/C" + i);
+                            assertTrue(service.isComponentEnabledForCurrentProfiles(
+                                    componentName));
+                            verify(mIpm, times(1)).getServiceInfo(
+                                    eq(componentName), anyInt(), anyInt());
+                        }
+                    } else {
+                        ComponentName componentName =
+                                ComponentName.unflattenFromString(packageOrComponent);
+                        assertTrue(service.isComponentEnabledForCurrentProfiles(componentName));
+                        verify(mIpm, times(1)).getServiceInfo(
+                                eq(componentName), anyInt(), anyInt());
+                    }
+                }
+            }
+        }
+    }
+
+    private void verifyExpectedApprovedEntries(ManagedServices service) {
+        verifyExpectedApprovedEntries(service, true);
+        verifyExpectedApprovedEntries(service, false);
+    }
+
+    private void verifyExpectedApprovedEntries(ManagedServices service, boolean primary) {
+        ArrayMap<Integer, String> verifyMap = primary
+                ? mExpectedPrimary.get(service.mApprovalLevel)
+                : mExpectedSecondary.get(service.mApprovalLevel);
+        verifyExpectedApprovedEntries(service, verifyMap);
+    }
+
+    private void verifyExpectedApprovedEntries(ManagedServices service,
+            ArrayMap<Integer, String> verifyMap) {
+        for (int userId : verifyMap.keySet()) {
+            for (String verifyValue : verifyMap.get(userId).split(":")) {
+                if (!TextUtils.isEmpty(verifyValue)) {
+                    assertTrue("service type " + service.mApprovalLevel + ":"
+                                    + verifyValue + " is not allowed for user " + userId,
+                            service.isPackageOrComponentAllowed(verifyValue, userId));
+                }
+            }
+        }
+    }
+
+    private void writeExpectedValuesToSettings(int approvalLevel) {
+        for (int userId : mExpectedPrimary.get(approvalLevel).keySet()) {
+            Settings.Secure.putStringForUser(getContext().getContentResolver(), SETTING,
+                    mExpectedPrimary.get(approvalLevel).get(userId), userId);
+        }
+        for (int userId : mExpectedSecondary.get(approvalLevel).keySet()) {
+            Settings.Secure.putStringForUser(getContext().getContentResolver(), SECONDARY_SETTING,
+                    mExpectedSecondary.get(approvalLevel).get(userId), userId);
+        }
+    }
+
+    private String getXmlEntry(String approved, int userId, boolean isPrimary) {
+        return "<" + ManagedServices.TAG_MANAGED_SERVICES + " "
+                + ManagedServices.ATT_USER_ID + "=\"" + userId +"\" "
+                + ManagedServices.ATT_IS_PRIMARY + "=\"" + isPrimary +"\" "
+                + ManagedServices.ATT_APPROVED_LIST + "=\"" + approved +"\" "
+                + "/>\n";
+    }
+
+    class TestManagedServices extends ManagedServices {
+
+        public TestManagedServices(Context context, Object mutex, UserProfiles userProfiles,
+                IPackageManager pm, int approvedServiceType) {
+            super(context, mutex, userProfiles, pm);
+            mApprovalLevel = approvedServiceType;
+        }
+
+        @Override
+        protected Config getConfig() {
+            final Config c = new Config();
+            c.xmlTag = "test";
+            c.secureSettingName = SETTING;
+            c.secondarySettingName = SECONDARY_SETTING;
+            c.bindPermission = "permission";
+            c.serviceInterface = "serviceInterface";
+            return c;
+        }
+
+        @Override
+        protected IInterface asInterface(IBinder binder) {
+            return null;
+        }
+
+        @Override
+        protected boolean checkType(IInterface service) {
+            return false;
+        }
+
+        @Override
+        protected void onServiceAdded(ManagedServiceInfo info) {
+
+        }
+    }
+}
diff --git a/services/tests/notification/src/com/android/server/notification/NotificationAdjustmentExtractorTest.java b/services/tests/notification/src/com/android/server/notification/NotificationAdjustmentExtractorTest.java
new file mode 100644
index 0000000..e527644
--- /dev/null
+++ b/services/tests/notification/src/com/android/server/notification/NotificationAdjustmentExtractorTest.java
@@ -0,0 +1,115 @@
+/*
+ * 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.notification;
+
+import static android.app.NotificationManager.IMPORTANCE_LOW;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNull;
+import static junit.framework.Assert.assertTrue;
+
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.service.notification.Adjustment;
+import android.service.notification.SnoozeCriterion;
+import android.service.notification.StatusBarNotification;
+
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Objects;
+
+public class NotificationAdjustmentExtractorTest extends NotificationTestCase {
+
+    @Test
+    public void testExtractsAdjustment() {
+        NotificationAdjustmentExtractor extractor = new NotificationAdjustmentExtractor();
+
+        NotificationRecord r = generateRecord();
+
+        Bundle signals = new Bundle();
+        signals.putString(Adjustment.KEY_GROUP_KEY, GroupHelper.AUTOGROUP_KEY);
+        ArrayList<SnoozeCriterion> snoozeCriteria = new ArrayList<>();
+        snoozeCriteria.add(new SnoozeCriterion("n", "n", "n"));
+        signals.putParcelableArrayList(Adjustment.KEY_SNOOZE_CRITERIA, snoozeCriteria);
+        ArrayList<String> people = new ArrayList<>();
+        people.add("you");
+        signals.putStringArrayList(Adjustment.KEY_PEOPLE, people);
+        Adjustment adjustment = new Adjustment("pkg", r.getKey(), signals, "", 0);
+        r.addAdjustment(adjustment);
+
+        assertFalse(r.getGroupKey().contains(GroupHelper.AUTOGROUP_KEY));
+        assertFalse(Objects.equals(people, r.getPeopleOverride()));
+        assertFalse(Objects.equals(snoozeCriteria, r.getSnoozeCriteria()));
+
+        assertNull(extractor.process(r));
+
+        assertTrue(r.getGroupKey().contains(GroupHelper.AUTOGROUP_KEY));
+        assertEquals(people, r.getPeopleOverride());
+        assertEquals(snoozeCriteria, r.getSnoozeCriteria());
+    }
+
+    @Test
+    public void testExtractsAdjustments() {
+        NotificationAdjustmentExtractor extractor = new NotificationAdjustmentExtractor();
+
+        NotificationRecord r = generateRecord();
+
+        Bundle pSignals = new Bundle();
+        ArrayList<String> people = new ArrayList<>();
+        people.add("you");
+        pSignals.putStringArrayList(Adjustment.KEY_PEOPLE, people);
+        Adjustment pAdjustment = new Adjustment("pkg", r.getKey(), pSignals, "", 0);
+        r.addAdjustment(pAdjustment);
+
+        Bundle sSignals = new Bundle();
+        ArrayList<SnoozeCriterion> snoozeCriteria = new ArrayList<>();
+        snoozeCriteria.add(new SnoozeCriterion("n", "n", "n"));
+        sSignals.putParcelableArrayList(Adjustment.KEY_SNOOZE_CRITERIA, snoozeCriteria);
+        Adjustment sAdjustment = new Adjustment("pkg", r.getKey(), sSignals, "", 0);
+        r.addAdjustment(sAdjustment);
+
+        Bundle gSignals = new Bundle();
+        gSignals.putString(Adjustment.KEY_GROUP_KEY, GroupHelper.AUTOGROUP_KEY);
+        Adjustment gAdjustment = new Adjustment("pkg", r.getKey(), gSignals, "", 0);
+        r.addAdjustment(gAdjustment);
+
+        assertFalse(r.getGroupKey().contains(GroupHelper.AUTOGROUP_KEY));
+        assertFalse(Objects.equals(people, r.getPeopleOverride()));
+        assertFalse(Objects.equals(snoozeCriteria, r.getSnoozeCriteria()));
+
+        assertNull(extractor.process(r));
+
+        assertTrue(r.getGroupKey().contains(GroupHelper.AUTOGROUP_KEY));
+        assertEquals(people, r.getPeopleOverride());
+        assertEquals(snoozeCriteria, r.getSnoozeCriteria());
+    }
+
+    private NotificationRecord generateRecord() {
+        NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_LOW);
+        final Notification.Builder builder = new Notification.Builder(getContext())
+                .setContentTitle("foo")
+                .setSmallIcon(android.R.drawable.sym_def_app_icon);
+        Notification n = builder.build();
+        StatusBarNotification sbn = new StatusBarNotification("", "", 0, "", 0,
+                0, n, UserHandle.ALL, null, System.currentTimeMillis());
+       return new NotificationRecord(getContext(), sbn, channel);
+    }
+}
diff --git a/services/tests/notification/src/com/android/server/notification/NotificationChannelExtractorTest.java b/services/tests/notification/src/com/android/server/notification/NotificationChannelExtractorTest.java
new file mode 100644
index 0000000..d75213c
--- /dev/null
+++ b/services/tests/notification/src/com/android/server/notification/NotificationChannelExtractorTest.java
@@ -0,0 +1,76 @@
+/*
+ * 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.notification;
+
+import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
+import static android.app.NotificationManager.IMPORTANCE_HIGH;
+import static android.app.NotificationManager.IMPORTANCE_LOW;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertNull;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.when;
+
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.os.UserHandle;
+import android.service.notification.StatusBarNotification;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class NotificationChannelExtractorTest extends NotificationTestCase {
+
+    @Mock RankingConfig mConfig;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void testExtractsUpdatedChannel() {
+        NotificationChannelExtractor extractor = new NotificationChannelExtractor();
+        extractor.setConfig(mConfig);
+
+        NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_LOW);
+        final Notification.Builder builder = new Notification.Builder(getContext())
+                .setContentTitle("foo")
+                .setSmallIcon(android.R.drawable.sym_def_app_icon);
+        Notification n = builder.build();
+        StatusBarNotification sbn = new StatusBarNotification("", "", 0, "", 0,
+                0, n, UserHandle.ALL, null, System.currentTimeMillis());
+        NotificationRecord r = new NotificationRecord(getContext(), sbn, channel);
+
+        NotificationChannel updatedChannel =
+                new NotificationChannel("a", "", IMPORTANCE_HIGH);
+        when(mConfig.getNotificationChannel(any(), anyInt(), eq("a"), eq(false)))
+                .thenReturn(updatedChannel);
+
+        assertNull(extractor.process(r));
+        assertEquals(updatedChannel, r.getChannel());
+    }
+
+}
diff --git a/services/tests/notification/src/com/android/server/notification/NotificationIntrusivenessExtractorTest.java b/services/tests/notification/src/com/android/server/notification/NotificationIntrusivenessExtractorTest.java
new file mode 100644
index 0000000..85852f9
--- /dev/null
+++ b/services/tests/notification/src/com/android/server/notification/NotificationIntrusivenessExtractorTest.java
@@ -0,0 +1,90 @@
+/*
+ * 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.notification;
+
+import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
+import static android.app.NotificationManager.IMPORTANCE_LOW;
+
+import static com.android.server.notification.NotificationIntrusivenessExtractor.HANG_TIME_MS;
+
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertNull;
+
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.os.UserHandle;
+import android.service.notification.StatusBarNotification;
+
+import org.junit.Test;
+
+public class NotificationIntrusivenessExtractorTest extends NotificationTestCase {
+
+    @Test
+    public void testNonIntrusive() {
+        NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_LOW);
+        final Notification.Builder builder = new Notification.Builder(getContext())
+                .setContentTitle("foo")
+                .setSmallIcon(android.R.drawable.sym_def_app_icon);
+
+        Notification n = builder.build();
+        StatusBarNotification sbn = new StatusBarNotification("", "", 0, "", 0,
+                0, n, UserHandle.ALL, null, System.currentTimeMillis());
+        NotificationRecord r = new NotificationRecord(getContext(), sbn, channel);
+
+        assertNull(new NotificationIntrusivenessExtractor().process(r));
+    }
+
+    @Test
+    public void testIntrusive_fillScreen() {
+        NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_DEFAULT);
+        final Notification.Builder builder = new Notification.Builder(getContext())
+                .setContentTitle("foo")
+                .setFullScreenIntent(PendingIntent.getActivity(
+                        getContext(), 0, new Intent(""), 0), true)
+                .setSmallIcon(android.R.drawable.sym_def_app_icon);
+
+        Notification n = builder.build();
+        StatusBarNotification sbn = new StatusBarNotification("", "", 0, "", 0,
+                0, n, UserHandle.ALL, null,
+                System.currentTimeMillis());
+        NotificationRecord r = new NotificationRecord(getContext(), sbn, channel);
+
+        assertNotNull(new NotificationIntrusivenessExtractor().process(r));
+    }
+
+    @Test
+    public void testOldNotificationsNotIntrusive() {
+        NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_DEFAULT);
+        final Notification.Builder builder = new Notification.Builder(getContext())
+                .setContentTitle("foo")
+                .setFullScreenIntent(PendingIntent.getActivity(
+                        getContext(), 0, new Intent(""), 0), true)
+                .setSmallIcon(android.R.drawable.sym_def_app_icon);
+
+        Notification n = builder.build();
+        StatusBarNotification sbn = new StatusBarNotification("", "", 0, "", 0,
+                0, n, UserHandle.ALL, null,
+                System.currentTimeMillis() - HANG_TIME_MS);
+
+        NotificationRecord r = new NotificationRecord(getContext(), sbn, channel);
+        assertNull(new NotificationIntrusivenessExtractor().process(r));
+        assertFalse(r.isRecentlyIntrusive());
+    }
+}
diff --git a/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java
index cacbc66..51de2c2 100644
--- a/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -16,12 +16,16 @@
 
 package com.android.server.notification;
 
+import static android.app.NotificationManager.IMPORTANCE_HIGH;
 import static android.app.NotificationManager.IMPORTANCE_LOW;
 import static android.app.NotificationManager.IMPORTANCE_NONE;
+import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
 import static android.content.pm.PackageManager.PERMISSION_DENIED;
 
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertNull;
 import static junit.framework.Assert.assertTrue;
 import static junit.framework.Assert.fail;
 
@@ -31,13 +35,16 @@
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.ActivityManager;
 import android.app.INotificationManager;
 import android.app.Notification;
 import android.app.NotificationChannel;
@@ -46,6 +53,7 @@
 import android.companion.ICompanionDeviceManager;
 import android.content.ComponentName;
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.IPackageManager;
 import android.content.pm.PackageManager;
@@ -53,6 +61,7 @@
 import android.graphics.Color;
 import android.media.AudioManager;
 import android.os.Binder;
+import android.os.Build;
 import android.os.Process;
 import android.os.UserHandle;
 import android.provider.Settings.Secure;
@@ -60,21 +69,34 @@
 import android.service.notification.StatusBarNotification;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.testing.AndroidTestingRunner;
+import android.testing.TestableContext;
 import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
+import android.util.ArrayMap;
+import android.util.AtomicFile;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import com.android.server.lights.Light;
+import com.android.server.lights.LightsManager;
+import com.android.server.notification.NotificationManagerService.NotificationAssistants;
+import com.android.server.notification.NotificationManagerService.NotificationListeners;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.mockito.stubbing.Answer;
 
-import com.android.server.lights.Light;
-import com.android.server.lights.LightsManager;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
 
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
@@ -89,22 +111,31 @@
     private IPackageManager mPackageManager;
     @Mock
     private PackageManager mPackageManagerClient;
-    private Context mContext = getContext();
+    private TestableContext mContext = spy(getContext());
     private final String PKG = mContext.getPackageName();
     private TestableLooper mTestableLooper;
     @Mock
     private RankingHelper mRankingHelper;
+    AtomicFile mPolicyFile;
+    File mFile;
     @Mock
     private NotificationUsageStats mUsageStats;
     @Mock
     private AudioManager mAudioManager;
+    @Mock
+    ActivityManager mActivityManager;
+    NotificationManagerService.WorkerHandler mHandler;
+
     private NotificationChannel mTestNotificationChannel = new NotificationChannel(
             TEST_CHANNEL_ID, TEST_CHANNEL_ID, NotificationManager.IMPORTANCE_DEFAULT);
     @Mock
-    private NotificationManagerService.NotificationListeners mNotificationListeners;
+    private NotificationListeners mListeners;
+    @Mock private NotificationAssistants mAssistants;
+    @Mock private ConditionProviders mConditionProviders;
     private ManagedServices.ManagedServiceInfo mListener;
     @Mock private ICompanionDeviceManager mCompanionMgr;
     @Mock SnoozeHelper mSnoozeHelper;
+    @Mock GroupHelper mGroupHelper;
 
     // Use a Testable subclass so we can simulate calls from the system without failing.
     private static class TestableNotificationManagerService extends NotificationManagerService {
@@ -137,38 +168,71 @@
 
         mNotificationManagerService = new TestableNotificationManagerService(mContext);
 
+        // Use this testable looper.
+        mTestableLooper = TestableLooper.get(this);
+        mHandler = mNotificationManagerService.new WorkerHandler(mTestableLooper.getLooper());
         // MockPackageManager - default returns ApplicationInfo with matching calling UID
+        mContext.setMockPackageManager(mPackageManagerClient);
         final ApplicationInfo applicationInfo = new ApplicationInfo();
         applicationInfo.uid = mUid;
         when(mPackageManager.getApplicationInfo(anyString(), anyInt(), anyInt()))
                 .thenReturn(applicationInfo);
         when(mPackageManagerClient.getApplicationInfoAsUser(anyString(), anyInt(), anyInt()))
                 .thenReturn(applicationInfo);
+        when(mPackageManagerClient.getPackageUidAsUser(any(), anyInt())).thenReturn(mUid);
         final LightsManager mockLightsManager = mock(LightsManager.class);
         when(mockLightsManager.getLight(anyInt())).thenReturn(mock(Light.class));
         when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_NORMAL);
-        // Use this testable looper.
-        mTestableLooper = TestableLooper.get(this);
 
-        mListener = mNotificationListeners.new ManagedServiceInfo(
+        // write to a test file; the system file isn't readable from tests
+        mFile = new File(mContext.getCacheDir(), "test.xml");
+        mFile.createNewFile();
+        final String preupgradeXml = "<notification-policy></notification-policy>";
+        mPolicyFile = new AtomicFile(mFile);
+        FileOutputStream fos = mPolicyFile.startWrite();
+        fos.write(preupgradeXml.getBytes());
+        mPolicyFile.finishWrite(fos);
+        FileInputStream fStream = new FileInputStream(mFile);
+
+        // Setup managed services
+        mListener = mListeners.new ManagedServiceInfo(
                 null, new ComponentName(PKG, "test_class"), mUid, true, null, 0);
-        when(mNotificationListeners.checkServiceTokenLocked(any())).thenReturn(mListener);
+        when(mListeners.checkServiceTokenLocked(any())).thenReturn(mListener);
+        ManagedServices.Config listenerConfig = new ManagedServices.Config();
+        listenerConfig.xmlTag = NotificationListeners.TAG_ENABLED_NOTIFICATION_LISTENERS;
+        when(mListeners.getConfig()).thenReturn(listenerConfig);
+        ManagedServices.Config assistantConfig = new ManagedServices.Config();
+        assistantConfig.xmlTag = NotificationAssistants.TAG_ENABLED_NOTIFICATION_ASSISTANTS;
+        when(mAssistants.getConfig()).thenReturn(assistantConfig);
+        ManagedServices.Config dndConfig = new ManagedServices.Config();
+        dndConfig.xmlTag = ConditionProviders.TAG_ENABLED_DND_APPS;
+        when(mConditionProviders.getConfig()).thenReturn(dndConfig);
+
         try {
-            mNotificationManagerService.init(mTestableLooper.getLooper(), mPackageManager,
-                    mPackageManagerClient, mockLightsManager, mNotificationListeners,
-                    mCompanionMgr, mSnoozeHelper, mUsageStats);
+            mNotificationManagerService.init(mTestableLooper.getLooper(),
+                    mPackageManager, mPackageManagerClient, mockLightsManager,
+                    mListeners, mAssistants, mConditionProviders,
+                    mCompanionMgr, mSnoozeHelper, mUsageStats, mPolicyFile, mActivityManager,
+                    mGroupHelper);
         } catch (SecurityException e) {
             if (!e.getMessage().contains("Permission Denial: not allowed to send broadcast")) {
                 throw e;
             }
         }
         mNotificationManagerService.setAudioManager(mAudioManager);
+
         // Tests call directly into the Binder.
         mBinderService = mNotificationManagerService.getBinderService();
         mInternalService = mNotificationManagerService.getInternalService();
 
         mBinderService.createNotificationChannels(
                 PKG, new ParceledListSlice(Arrays.asList(mTestNotificationChannel)));
+        assertNotNull(mBinderService.getNotificationChannel(PKG, TEST_CHANNEL_ID));
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        mFile.delete();
     }
 
     public void waitForIdle() throws Exception {
@@ -187,6 +251,7 @@
                 nb.build(), new UserHandle(mUid), null, 0);
         return new NotificationRecord(mContext, sbn, channel);
     }
+
     private NotificationRecord generateNotificationRecord(NotificationChannel channel) {
         return generateNotificationRecord(channel, null);
     }
@@ -207,6 +272,43 @@
         return new NotificationRecord(mContext, sbn, channel);
     }
 
+    private Map<String, Answer> getSignalExtractorSideEffects() {
+        Map<String, Answer> answers = new ArrayMap<>();
+
+        answers.put("override group key", invocationOnMock -> {
+            ((NotificationRecord) invocationOnMock.getArguments()[0])
+                    .setOverrideGroupKey("bananas");
+            return null;
+        });
+        answers.put("override people", invocationOnMock -> {
+            ((NotificationRecord) invocationOnMock.getArguments()[0])
+                    .setPeopleOverride(new ArrayList<>());
+            return null;
+        });
+        answers.put("snooze criteria", invocationOnMock -> {
+            ((NotificationRecord) invocationOnMock.getArguments()[0])
+                    .setSnoozeCriteria(new ArrayList<>());
+            return null;
+        });
+        answers.put("notification channel", invocationOnMock -> {
+            ((NotificationRecord) invocationOnMock.getArguments()[0])
+                    .updateNotificationChannel(new NotificationChannel("a", "", IMPORTANCE_LOW));
+            return null;
+        });
+        answers.put("badging", invocationOnMock -> {
+            NotificationRecord r = (NotificationRecord) invocationOnMock.getArguments()[0];
+            r.setShowBadge(!r.canShowBadge());
+            return null;
+        });
+        answers.put("package visibility", invocationOnMock -> {
+            ((NotificationRecord) invocationOnMock.getArguments()[0]).setPackageVisibilityOverride(
+                    Notification.VISIBILITY_SECRET);
+            return null;
+        });
+
+        return answers;
+    }
+
     @Test
     public void testCreateNotificationChannels_SingleChannel() throws Exception {
         final NotificationChannel channel =
@@ -242,6 +344,42 @@
     }
 
     @Test
+    public void testCreateNotificationChannels_SecondCreateDoesNotChangeImportance()
+            throws Exception {
+        final NotificationChannel channel =
+                new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_DEFAULT);
+        mBinderService.createNotificationChannels(PKG,
+                new ParceledListSlice(Arrays.asList(channel)));
+
+        // Recreating the channel doesn't throw, but ignores importance.
+        final NotificationChannel dupeChannel =
+                new NotificationChannel("id", "name", IMPORTANCE_HIGH);
+        mBinderService.createNotificationChannels(PKG,
+                new ParceledListSlice(Arrays.asList(dupeChannel)));
+        final NotificationChannel createdChannel =
+                mBinderService.getNotificationChannel(PKG, "id");
+        assertEquals(NotificationManager.IMPORTANCE_DEFAULT, createdChannel.getImportance());
+    }
+
+    @Test
+    public void testCreateNotificationChannels_SecondCreateAllowedToDowngradeImportance()
+            throws Exception {
+        final NotificationChannel channel =
+                new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_DEFAULT);
+        mBinderService.createNotificationChannels(PKG,
+                new ParceledListSlice(Arrays.asList(channel)));
+
+        // Recreating with a lower importance is allowed to modify the channel.
+        final NotificationChannel dupeChannel =
+                new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_LOW);
+        mBinderService.createNotificationChannels(PKG,
+                new ParceledListSlice(Arrays.asList(dupeChannel)));
+        final NotificationChannel createdChannel =
+                mBinderService.getNotificationChannel(PKG, "id");
+        assertEquals(NotificationManager.IMPORTANCE_LOW, createdChannel.getImportance());
+    }
+
+    @Test
     public void testCreateNotificationChannels_CannotDowngradeImportanceIfAlreadyUpdated()
             throws Exception {
         final NotificationChannel channel =
@@ -251,7 +389,7 @@
 
         // The user modifies importance directly, can no longer be changed by the app.
         final NotificationChannel updatedChannel =
-                new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_HIGH);
+                new NotificationChannel("id", "name", IMPORTANCE_HIGH);
         mBinderService.updateNotificationChannelForPackage(PKG, mUid, updatedChannel);
 
         // Recreating with a lower importance leaves channel unchanged.
@@ -261,7 +399,7 @@
                 new ParceledListSlice(Arrays.asList(dupeChannel)));
         final NotificationChannel createdChannel =
                 mBinderService.getNotificationChannel(PKG, "id");
-        assertEquals(NotificationManager.IMPORTANCE_HIGH, createdChannel.getImportance());
+        assertEquals(IMPORTANCE_HIGH, createdChannel.getImportance());
     }
 
     @Test
@@ -270,7 +408,7 @@
         final NotificationChannel channel1 =
                 new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_DEFAULT);
         final NotificationChannel channel2 =
-                new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_HIGH);
+                new NotificationChannel("id", "name", IMPORTANCE_HIGH);
         mBinderService.createNotificationChannels(PKG,
                 new ParceledListSlice(Arrays.asList(channel1, channel2)));
         final NotificationChannel createdChannel =
@@ -283,7 +421,7 @@
         when(mPackageManager.isPackageSuspendedForUser(anyString(), anyInt())).thenReturn(true);
 
         NotificationChannel channel = new NotificationChannel("id", "name",
-                NotificationManager.IMPORTANCE_HIGH);
+                IMPORTANCE_HIGH);
         NotificationRecord r = generateNotificationRecord(channel);
         assertTrue(mNotificationManagerService.isBlocked(r, mUsageStats));
         verify(mUsageStats, times(1)).registerSuspendedByAdmin(eq(r));
@@ -294,11 +432,68 @@
         when(mPackageManager.isPackageSuspendedForUser(anyString(), anyInt())).thenReturn(false);
 
         NotificationChannel channel = new NotificationChannel("id", "name",
-                NotificationManager.IMPORTANCE_HIGH);
-        channel.setImportance(NotificationManager.IMPORTANCE_NONE);
+                NotificationManager.IMPORTANCE_NONE);
         NotificationRecord r = generateNotificationRecord(channel);
         assertTrue(mNotificationManagerService.isBlocked(r, mUsageStats));
         verify(mUsageStats, times(1)).registerBlocked(eq(r));
+
+        mBinderService.createNotificationChannels(
+                PKG, new ParceledListSlice(Arrays.asList(channel)));
+        final StatusBarNotification sbn = generateNotificationRecord(channel).sbn;
+        mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag",
+                sbn.getId(), sbn.getNotification(), sbn.getUserId());
+        waitForIdle();
+        assertEquals(0, mBinderService.getActiveNotifications(sbn.getPackageName()).length);
+    }
+
+    @Test
+    public void testEnqueuedBlockedNotifications_appBlockedChannelForegroundService()
+            throws Exception {
+        when(mPackageManager.isPackageSuspendedForUser(anyString(), anyInt())).thenReturn(false);
+
+        NotificationChannel channel = new NotificationChannel("blocked", "name",
+                NotificationManager.IMPORTANCE_NONE);
+        mBinderService.createNotificationChannels(
+                PKG, new ParceledListSlice(Arrays.asList(channel)));
+
+        final StatusBarNotification sbn = generateNotificationRecord(channel).sbn;
+        sbn.getNotification().flags |= Notification.FLAG_FOREGROUND_SERVICE;
+        mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag",
+                sbn.getId(), sbn.getNotification(), sbn.getUserId());
+        waitForIdle();
+        assertEquals(1, mBinderService.getActiveNotifications(sbn.getPackageName()).length);
+        assertEquals(IMPORTANCE_LOW,
+                mNotificationManagerService.getNotificationRecord(sbn.getKey()).getImportance());
+        assertEquals(IMPORTANCE_LOW,
+                mBinderService.getNotificationChannel(PKG, channel.getId()).getImportance());
+    }
+
+    @Test
+    public void testEnqueuedBlockedNotifications_userBlockedChannelForegroundService()
+            throws Exception {
+        when(mPackageManager.isPackageSuspendedForUser(anyString(), anyInt())).thenReturn(false);
+
+        NotificationChannel channel =
+                new NotificationChannel("blockedbyuser", "name", IMPORTANCE_HIGH);
+        mBinderService.createNotificationChannels(
+                PKG, new ParceledListSlice(Arrays.asList(channel)));
+
+        NotificationChannel update =
+                new NotificationChannel("blockedbyuser", "name", IMPORTANCE_NONE);
+        mBinderService.updateNotificationChannelForPackage(PKG, mUid, update);
+        waitForIdle();
+        assertEquals(IMPORTANCE_NONE,
+                mBinderService.getNotificationChannel(PKG, channel.getId()).getImportance());
+
+        final StatusBarNotification sbn = generateNotificationRecord(channel).sbn;
+        sbn.getNotification().flags |= Notification.FLAG_FOREGROUND_SERVICE;
+        mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag",
+                sbn.getId(), sbn.getNotification(), sbn.getUserId());
+        waitForIdle();
+        assertEquals(0, mBinderService.getActiveNotifications(sbn.getPackageName()).length);
+        assertNull(mNotificationManagerService.getNotificationRecord(sbn.getKey()));
+        assertEquals(IMPORTANCE_NONE,
+                mBinderService.getNotificationChannel(PKG, channel.getId()).getImportance());
     }
 
     @Test
@@ -315,6 +510,21 @@
     }
 
     @Test
+    public void testEnqueuedBlockedNotifications_blockedAppForegroundService() throws Exception {
+        when(mPackageManager.isPackageSuspendedForUser(anyString(), anyInt())).thenReturn(false);
+
+        mBinderService.setNotificationsEnabledForPackage(PKG, mUid, false);
+
+        final StatusBarNotification sbn = generateNotificationRecord(null).sbn;
+        sbn.getNotification().flags |= Notification.FLAG_FOREGROUND_SERVICE;
+        mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag",
+                sbn.getId(), sbn.getNotification(), sbn.getUserId());
+        waitForIdle();
+        assertEquals(0, mBinderService.getActiveNotifications(sbn.getPackageName()).length);
+        assertNull(mNotificationManagerService.getNotificationRecord(sbn.getKey()));
+    }
+
+    @Test
     public void testEnqueueNotificationWithTag_PopulatesGetActiveNotifications() throws Exception {
         mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag", 0,
                 generateNotificationRecord(null).getNotification(), 0);
@@ -347,8 +557,8 @@
                 sbn.getId(), sbn.getNotification(), sbn.getUserId());
         mBinderService.cancelNotificationWithTag(PKG, "tag", sbn.getId(), sbn.getUserId());
         waitForIdle();
-        verify(mNotificationListeners, times(1)).notifyPostedLocked(any(), any());
-        verify(mNotificationListeners, times(1)).notifyRemovedLocked(any(), anyInt());
+        verify(mListeners, times(1)).notifyPostedLocked(any(), any());
+        verify(mListeners, times(1)).notifyRemovedLocked(any(), anyInt());
     }
 
     @Test
@@ -525,6 +735,93 @@
     }
 
     @Test
+    public void testAppInitiatedCancelAllNotifications_CancelsNoClearFlag() throws Exception {
+        final StatusBarNotification sbn = generateNotificationRecord(null).sbn;
+        sbn.getNotification().flags |= Notification.FLAG_NO_CLEAR;
+        mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag",
+                sbn.getId(), sbn.getNotification(), sbn.getUserId());
+        mBinderService.cancelAllNotifications(PKG, sbn.getUserId());
+        waitForIdle();
+        StatusBarNotification[] notifs =
+                mBinderService.getActiveNotifications(sbn.getPackageName());
+        assertEquals(0, notifs.length);
+    }
+
+    @Test
+    public void testCancelAllNotifications_CancelsNoClearFlag() throws Exception {
+        final NotificationRecord notif = generateNotificationRecord(
+                mTestNotificationChannel, 1, "group", true);
+        notif.getNotification().flags |= Notification.FLAG_NO_CLEAR;
+        mNotificationManagerService.addNotification(notif);
+        mNotificationManagerService.cancelAllNotificationsInt(mUid, 0, PKG, null, 0, 0, true,
+                notif.getUserId(), 0, null);
+        waitForIdle();
+        StatusBarNotification[] notifs =
+                mBinderService.getActiveNotifications(notif.sbn.getPackageName());
+        assertEquals(0, notifs.length);
+    }
+
+    @Test
+    public void testUserInitiatedCancelAllOnClearAll_NoClearFlag() throws Exception {
+        final NotificationRecord notif = generateNotificationRecord(
+                mTestNotificationChannel, 1, "group", true);
+        notif.getNotification().flags |= Notification.FLAG_NO_CLEAR;
+        mNotificationManagerService.addNotification(notif);
+
+        mNotificationManagerService.mNotificationDelegate.onClearAll(mUid, Binder.getCallingPid(),
+                notif.getUserId());
+        waitForIdle();
+        StatusBarNotification[] notifs =
+                mBinderService.getActiveNotifications(notif.sbn.getPackageName());
+        assertEquals(1, notifs.length);
+    }
+
+    @Test
+    public void testCancelAllCancelNotificationsFromListener_NoClearFlag() throws Exception {
+        final NotificationRecord parent = generateNotificationRecord(
+                mTestNotificationChannel, 1, "group", true);
+        final NotificationRecord child = generateNotificationRecord(
+                mTestNotificationChannel, 2, "group", false);
+        final NotificationRecord child2 = generateNotificationRecord(
+                mTestNotificationChannel, 3, "group", false);
+        child2.getNotification().flags |= Notification.FLAG_NO_CLEAR;
+        final NotificationRecord newGroup = generateNotificationRecord(
+                mTestNotificationChannel, 4, "group2", false);
+        mNotificationManagerService.addNotification(parent);
+        mNotificationManagerService.addNotification(child);
+        mNotificationManagerService.addNotification(child2);
+        mNotificationManagerService.addNotification(newGroup);
+        mNotificationManagerService.getBinderService().cancelNotificationsFromListener(null, null);
+        waitForIdle();
+        StatusBarNotification[] notifs =
+                mBinderService.getActiveNotifications(parent.sbn.getPackageName());
+        assertEquals(1, notifs.length);
+    }
+
+    @Test
+    public void testUserInitiatedCancelAllWithGroup_NoClearFlag() throws Exception {
+        final NotificationRecord parent = generateNotificationRecord(
+                mTestNotificationChannel, 1, "group", true);
+        final NotificationRecord child = generateNotificationRecord(
+                mTestNotificationChannel, 2, "group", false);
+        final NotificationRecord child2 = generateNotificationRecord(
+                mTestNotificationChannel, 3, "group", false);
+        child2.getNotification().flags |= Notification.FLAG_NO_CLEAR;
+        final NotificationRecord newGroup = generateNotificationRecord(
+                mTestNotificationChannel, 4, "group2", false);
+        mNotificationManagerService.addNotification(parent);
+        mNotificationManagerService.addNotification(child);
+        mNotificationManagerService.addNotification(child2);
+        mNotificationManagerService.addNotification(newGroup);
+        mNotificationManagerService.mNotificationDelegate.onClearAll(mUid, Binder.getCallingPid(),
+                parent.getUserId());
+        waitForIdle();
+        StatusBarNotification[] notifs =
+                mBinderService.getActiveNotifications(parent.sbn.getPackageName());
+        assertEquals(1, notifs.length);
+    }
+
+    @Test
     public void testRemoveForegroundServiceFlag_ImmediatelyAfterEnqueue() throws Exception {
         final StatusBarNotification sbn = generateNotificationRecord(null).sbn;
         sbn.getNotification().flags |= Notification.FLAG_FOREGROUND_SERVICE;
@@ -599,7 +896,7 @@
         mNotificationManagerService.setRankingHelper(mRankingHelper);
         when(mRankingHelper.getNotificationChannel(
                 anyString(), anyInt(), eq("foo"), anyBoolean())).thenReturn(
-                        new NotificationChannel("foo", "foo", NotificationManager.IMPORTANCE_HIGH));
+                        new NotificationChannel("foo", "foo", IMPORTANCE_HIGH));
 
         Notification.TvExtender tv = new Notification.TvExtender().setChannelId("foo");
         mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag", 0,
@@ -637,13 +934,13 @@
                 eq(channel2.getId()), anyBoolean()))
                 .thenReturn(channel2);
 
-        reset(mNotificationListeners);
+        reset(mListeners);
         mBinderService.createNotificationChannels(PKG,
                 new ParceledListSlice(Arrays.asList(mTestNotificationChannel, channel2)));
-        verify(mNotificationListeners, times(1)).notifyNotificationChannelChanged(eq(PKG),
+        verify(mListeners, times(1)).notifyNotificationChannelChanged(eq(PKG),
                 eq(Process.myUserHandle()), eq(mTestNotificationChannel),
                 eq(NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_ADDED));
-        verify(mNotificationListeners, times(1)).notifyNotificationChannelChanged(eq(PKG),
+        verify(mListeners, times(1)).notifyNotificationChannelChanged(eq(PKG),
                 eq(Process.myUserHandle()), eq(channel2),
                 eq(NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_ADDED));
     }
@@ -657,13 +954,13 @@
         NotificationChannelGroup group1 = new NotificationChannelGroup("a", "b");
         NotificationChannelGroup group2 = new NotificationChannelGroup("n", "m");
 
-        reset(mNotificationListeners);
+        reset(mListeners);
         mBinderService.createNotificationChannelGroups(PKG,
                 new ParceledListSlice(Arrays.asList(group1, group2)));
-        verify(mNotificationListeners, times(1)).notifyNotificationChannelGroupChanged(eq(PKG),
+        verify(mListeners, times(1)).notifyNotificationChannelGroupChanged(eq(PKG),
                 eq(Process.myUserHandle()), eq(group1),
                 eq(NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_ADDED));
-        verify(mNotificationListeners, times(1)).notifyNotificationChannelGroupChanged(eq(PKG),
+        verify(mListeners, times(1)).notifyNotificationChannelGroupChanged(eq(PKG),
                 eq(Process.myUserHandle()), eq(group2),
                 eq(NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_ADDED));
     }
@@ -679,9 +976,9 @@
                 eq(mTestNotificationChannel.getId()), anyBoolean()))
                 .thenReturn(mTestNotificationChannel);
 
-        reset(mNotificationListeners);
+        reset(mListeners);
         mBinderService.updateNotificationChannelForPackage(PKG, 0, mTestNotificationChannel);
-        verify(mNotificationListeners, times(1)).notifyNotificationChannelChanged(eq(PKG),
+        verify(mListeners, times(1)).notifyNotificationChannelChanged(eq(PKG),
                 eq(Process.myUserHandle()), eq(mTestNotificationChannel),
                 eq(NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_UPDATED));
     }
@@ -695,9 +992,9 @@
         when(mRankingHelper.getNotificationChannel(eq(PKG), anyInt(),
                 eq(mTestNotificationChannel.getId()), anyBoolean()))
                 .thenReturn(mTestNotificationChannel);
-        reset(mNotificationListeners);
+        reset(mListeners);
         mBinderService.deleteNotificationChannel(PKG, mTestNotificationChannel.getId());
-        verify(mNotificationListeners, times(1)).notifyNotificationChannelChanged(eq(PKG),
+        verify(mListeners, times(1)).notifyNotificationChannelChanged(eq(PKG),
                 eq(Process.myUserHandle()), eq(mTestNotificationChannel),
                 eq(NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_DELETED));
     }
@@ -711,9 +1008,9 @@
         mNotificationManagerService.setRankingHelper(mRankingHelper);
         when(mRankingHelper.getNotificationChannelGroup(eq(ncg.getId()), eq(PKG), anyInt()))
                 .thenReturn(ncg);
-        reset(mNotificationListeners);
+        reset(mListeners);
         mBinderService.deleteNotificationChannelGroup(PKG, ncg.getId());
-        verify(mNotificationListeners, times(1)).notifyNotificationChannelGroupChanged(eq(PKG),
+        verify(mListeners, times(1)).notifyNotificationChannelGroupChanged(eq(PKG),
                 eq(Process.myUserHandle()), eq(ncg),
                 eq(NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_DELETED));
     }
@@ -728,9 +1025,10 @@
         mBinderService.updateNotificationChannelFromPrivilegedListener(
                 null, PKG, Process.myUserHandle(), mTestNotificationChannel);
 
-        verify(mRankingHelper, times(1)).updateNotificationChannel(anyString(), anyInt(), any());
+        verify(mRankingHelper, times(1)).updateNotificationChannel(
+                anyString(), anyInt(), any(), anyBoolean());
 
-        verify(mNotificationListeners, never()).notifyNotificationChannelChanged(eq(PKG),
+        verify(mListeners, never()).notifyNotificationChannelChanged(eq(PKG),
                 eq(Process.myUserHandle()), eq(mTestNotificationChannel),
                 eq(NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_UPDATED));
     }
@@ -749,9 +1047,10 @@
             // pass
         }
 
-        verify(mRankingHelper, never()).updateNotificationChannel(anyString(), anyInt(), any());
+        verify(mRankingHelper, never()).updateNotificationChannel(
+                anyString(), anyInt(), any(), anyBoolean());
 
-        verify(mNotificationListeners, never()).notifyNotificationChannelChanged(eq(PKG),
+        verify(mListeners, never()).notifyNotificationChannelChanged(eq(PKG),
                 eq(Process.myUserHandle()), eq(mTestNotificationChannel),
                 eq(NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_UPDATED));
     }
@@ -765,7 +1064,7 @@
         mListener = mock(ManagedServices.ManagedServiceInfo.class);
         mListener.component = new ComponentName(PKG, PKG);
         when(mListener.enabledAndUserMatches(anyInt())).thenReturn(false);
-        when(mNotificationListeners.checkServiceTokenLocked(any())).thenReturn(mListener);
+        when(mListeners.checkServiceTokenLocked(any())).thenReturn(mListener);
 
         try {
             mBinderService.updateNotificationChannelFromPrivilegedListener(
@@ -775,9 +1074,10 @@
             // pass
         }
 
-        verify(mRankingHelper, never()).updateNotificationChannel(anyString(), anyInt(), any());
+        verify(mRankingHelper, never()).updateNotificationChannel(
+                anyString(), anyInt(), any(), anyBoolean());
 
-        verify(mNotificationListeners, never()).notifyNotificationChannelChanged(eq(PKG),
+        verify(mListeners, never()).notifyNotificationChannelChanged(eq(PKG),
                 eq(Process.myUserHandle()), eq(mTestNotificationChannel),
                 eq(NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_UPDATED));
     }
@@ -822,7 +1122,7 @@
         when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations);
         mListener = mock(ManagedServices.ManagedServiceInfo.class);
         when(mListener.enabledAndUserMatches(anyInt())).thenReturn(false);
-        when(mNotificationListeners.checkServiceTokenLocked(any())).thenReturn(mListener);
+        when(mListeners.checkServiceTokenLocked(any())).thenReturn(mListener);
 
         try {
             mBinderService.getNotificationChannelsFromPrivilegedListener(
@@ -873,7 +1173,7 @@
         when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations);
         mListener = mock(ManagedServices.ManagedServiceInfo.class);
         when(mListener.enabledAndUserMatches(anyInt())).thenReturn(false);
-        when(mNotificationListeners.checkServiceTokenLocked(any())).thenReturn(mListener);
+        when(mListeners.checkServiceTokenLocked(any())).thenReturn(mListener);
 
         try {
             mBinderService.getNotificationChannelGroupsFromPrivilegedListener(
@@ -1032,6 +1332,217 @@
     }
 
     @Test
+    public void testSetListenerAccessForUser() throws Exception {
+        UserHandle user = UserHandle.of(10);
+        ComponentName c = ComponentName.unflattenFromString("package/Component");
+        try {
+            mBinderService.setNotificationListenerAccessGrantedForUser(
+                    c, user.getIdentifier(), true);
+        } catch (SecurityException e) {
+            if (!e.getMessage().contains("Permission Denial: not allowed to send broadcast")) {
+                throw e;
+            }
+        }
+
+        verify(mContext, times(1)).sendBroadcastAsUser(any(), eq(user), any());
+        verify(mListeners, times(1)).setPackageOrComponentEnabled(
+                c.flattenToString(), user.getIdentifier(), true, true);
+        verify(mConditionProviders, times(1)).setPackageOrComponentEnabled(
+                c.flattenToString(), user.getIdentifier(), false, true);
+        verify(mAssistants, never()).setPackageOrComponentEnabled(
+                any(), anyInt(), anyBoolean(), anyBoolean());
+    }
+
+    @Test
+    public void testSetAssistantAccessForUser() throws Exception {
+        UserHandle user = UserHandle.of(10);
+        ComponentName c = ComponentName.unflattenFromString("package/Component");
+        try {
+            mBinderService.setNotificationAssistantAccessGrantedForUser(
+                    c, user.getIdentifier(), true);
+        } catch (SecurityException e) {
+            if (!e.getMessage().contains("Permission Denial: not allowed to send broadcast")) {
+                throw e;
+            }
+        }
+
+        verify(mContext, times(1)).sendBroadcastAsUser(any(), eq(user), any());
+        verify(mAssistants, times(1)).setPackageOrComponentEnabled(
+                c.flattenToString(), user.getIdentifier(), true, true);
+        verify(mConditionProviders, times(1)).setPackageOrComponentEnabled(
+                c.flattenToString(), user.getIdentifier(), false, true);
+        verify(mListeners, never()).setPackageOrComponentEnabled(
+                any(), anyInt(), anyBoolean(), anyBoolean());
+    }
+
+    @Test
+    public void testSetDndAccessForUser() throws Exception {
+        UserHandle user = UserHandle.of(10);
+        ComponentName c = ComponentName.unflattenFromString("package/Component");
+        try {
+            mBinderService.setNotificationPolicyAccessGrantedForUser(
+                    c.getPackageName(), user.getIdentifier(), true);
+        } catch (SecurityException e) {
+            if (!e.getMessage().contains("Permission Denial: not allowed to send broadcast")) {
+                throw e;
+            }
+        }
+
+        verify(mContext, times(1)).sendBroadcastAsUser(any(), eq(user), any());
+        verify(mConditionProviders, times(1)).setPackageOrComponentEnabled(
+                c.getPackageName(), user.getIdentifier(), true, true);
+        verify(mAssistants, never()).setPackageOrComponentEnabled(
+                any(), anyInt(), anyBoolean(), anyBoolean());
+        verify(mListeners, never()).setPackageOrComponentEnabled(
+                any(), anyInt(), anyBoolean(), anyBoolean());
+    }
+
+    @Test
+    public void testSetListenerAccess() throws Exception {
+        ComponentName c = ComponentName.unflattenFromString("package/Component");
+        try {
+            mBinderService.setNotificationListenerAccessGranted(c, true);
+        } catch (SecurityException e) {
+            if (!e.getMessage().contains("Permission Denial: not allowed to send broadcast")) {
+                throw e;
+            }
+        }
+
+        verify(mListeners, times(1)).setPackageOrComponentEnabled(
+                c.flattenToString(), 0, true, true);
+        verify(mConditionProviders, times(1)).setPackageOrComponentEnabled(
+                c.flattenToString(), 0, false, true);
+        verify(mAssistants, never()).setPackageOrComponentEnabled(
+                any(), anyInt(), anyBoolean(), anyBoolean());
+    }
+
+    @Test
+    public void testSetAssistantAccess() throws Exception {
+        ComponentName c = ComponentName.unflattenFromString("package/Component");
+        try {
+            mBinderService.setNotificationAssistantAccessGranted(c, true);
+        } catch (SecurityException e) {
+            if (!e.getMessage().contains("Permission Denial: not allowed to send broadcast")) {
+                throw e;
+            }
+        }
+
+        verify(mAssistants, times(1)).setPackageOrComponentEnabled(
+                c.flattenToString(), 0, true, true);
+        verify(mConditionProviders, times(1)).setPackageOrComponentEnabled(
+                c.flattenToString(), 0, false, true);
+        verify(mListeners, never()).setPackageOrComponentEnabled(
+                any(), anyInt(), anyBoolean(), anyBoolean());
+    }
+
+    @Test
+    public void testSetDndAccess() throws Exception {
+        ComponentName c = ComponentName.unflattenFromString("package/Component");
+        try {
+            mBinderService.setNotificationPolicyAccessGranted(c.getPackageName(), true);
+        } catch (SecurityException e) {
+            if (!e.getMessage().contains("Permission Denial: not allowed to send broadcast")) {
+                throw e;
+            }
+        }
+
+        verify(mConditionProviders, times(1)).setPackageOrComponentEnabled(
+                c.getPackageName(), 0, true, true);
+        verify(mAssistants, never()).setPackageOrComponentEnabled(
+                any(), anyInt(), anyBoolean(), anyBoolean());
+        verify(mListeners, never()).setPackageOrComponentEnabled(
+                any(), anyInt(), anyBoolean(), anyBoolean());
+    }
+
+    @Test
+    public void testSetListenerAccess_doesNothingOnLowRam() throws Exception {
+        when(mActivityManager.isLowRamDevice()).thenReturn(true);
+        ComponentName c = ComponentName.unflattenFromString("package/Component");
+        mBinderService.setNotificationListenerAccessGranted(c, true);
+
+        verify(mListeners, never()).setPackageOrComponentEnabled(
+                c.flattenToString(), 0, true, true);
+        verify(mConditionProviders, never()).setPackageOrComponentEnabled(
+                c.flattenToString(), 0, false, true);
+        verify(mAssistants, never()).setPackageOrComponentEnabled(
+                any(), anyInt(), anyBoolean(), anyBoolean());
+    }
+
+    @Test
+    public void testSetAssistantAccess_doesNothingOnLowRam() throws Exception {
+        when(mActivityManager.isLowRamDevice()).thenReturn(true);
+        ComponentName c = ComponentName.unflattenFromString("package/Component");
+        mBinderService.setNotificationAssistantAccessGranted(c, true);
+
+
+        verify(mListeners, never()).setPackageOrComponentEnabled(
+                c.flattenToString(), 0, true, true);
+        verify(mConditionProviders, never()).setPackageOrComponentEnabled(
+                c.flattenToString(), 0, false, true);
+        verify(mAssistants, never()).setPackageOrComponentEnabled(
+                any(), anyInt(), anyBoolean(), anyBoolean());
+    }
+
+    @Test
+    public void testSetDndAccess_doesNothingOnLowRam() throws Exception {
+        when(mActivityManager.isLowRamDevice()).thenReturn(true);
+        ComponentName c = ComponentName.unflattenFromString("package/Component");
+        mBinderService.setNotificationPolicyAccessGranted(c.getPackageName(), true);
+
+        verify(mListeners, never()).setPackageOrComponentEnabled(
+                c.flattenToString(), 0, true, true);
+        verify(mConditionProviders, never()).setPackageOrComponentEnabled(
+                c.flattenToString(), 0, false, true);
+        verify(mAssistants, never()).setPackageOrComponentEnabled(
+                any(), anyInt(), anyBoolean(), anyBoolean());
+    }
+
+    @Test
+    public void testOnlyAutogroupIfGroupChanged_noPriorNoti_autogroups() throws Exception {
+        NotificationRecord r = generateNotificationRecord(mTestNotificationChannel, 0, null, false);
+        mNotificationManagerService.addEnqueuedNotification(r);
+        NotificationManagerService.PostNotificationRunnable runnable =
+                mNotificationManagerService.new PostNotificationRunnable(r.getKey());
+        runnable.run();
+        waitForIdle();
+
+        verify(mGroupHelper, times(1)).onNotificationPosted(any(), anyBoolean());
+    }
+
+    @Test
+    public void testOnlyAutogroupIfGroupChanged_groupChanged_autogroups()
+            throws Exception {
+        NotificationRecord r =
+                generateNotificationRecord(mTestNotificationChannel, 0, "group", false);
+        mNotificationManagerService.addNotification(r);
+
+        r = generateNotificationRecord(mTestNotificationChannel, 0, null, false);
+        mNotificationManagerService.addEnqueuedNotification(r);
+        NotificationManagerService.PostNotificationRunnable runnable =
+                mNotificationManagerService.new PostNotificationRunnable(r.getKey());
+        runnable.run();
+        waitForIdle();
+
+        verify(mGroupHelper, times(1)).onNotificationPosted(any(), anyBoolean());
+    }
+
+    @Test
+    public void testOnlyAutogroupIfGroupChanged_noGroupChanged_autogroups()
+            throws Exception {
+        NotificationRecord r = generateNotificationRecord(mTestNotificationChannel, 0, "group",
+                false);
+        mNotificationManagerService.addNotification(r);
+        mNotificationManagerService.addEnqueuedNotification(r);
+
+        NotificationManagerService.PostNotificationRunnable runnable =
+                mNotificationManagerService.new PostNotificationRunnable(r.getKey());
+        runnable.run();
+        waitForIdle();
+
+        verify(mGroupHelper, never()).onNotificationPosted(any(), anyBoolean());
+    }
+
+    @Test
     public void testNoFakeColorizedPermission() throws Exception {
         when(mPackageManagerClient.checkPermission(any(), any())).thenReturn(PERMISSION_DENIED);
         Notification.Builder nb = new Notification.Builder(mContext,
@@ -1081,15 +1592,191 @@
         mNotificationManagerService.addNotification(otherPackage);
 
         // Same notifications are enqueued as posted, everything counts b/c id and tag don't match
-        assertEquals(40, mNotificationManagerService.getNotificationCountLocked(
-                PKG, new UserHandle(mUid).getIdentifier(), 0, null));
-        assertEquals(40, mNotificationManagerService.getNotificationCountLocked(
-                PKG, new UserHandle(mUid).getIdentifier(), 0, "tag2"));
-        assertEquals(2, mNotificationManagerService.getNotificationCountLocked(
-                "a", new UserHandle(mUid).getIdentifier(), 0, "banana"));
+        int userId = new UserHandle(mUid).getIdentifier();
+        assertEquals(40,
+                mNotificationManagerService.getNotificationCountLocked(PKG, userId, 0, null));
+        assertEquals(40,
+                mNotificationManagerService.getNotificationCountLocked(PKG, userId, 0, "tag2"));
+        assertEquals(2,
+                mNotificationManagerService.getNotificationCountLocked("a", userId, 0, "banana"));
 
         // exclude a known notification - it's excluded from only the posted list, not enqueued
-        assertEquals(39, mNotificationManagerService.getNotificationCountLocked(
-                PKG, new UserHandle(mUid).getIdentifier(), 0, "tag"));
+        assertEquals(39,
+                mNotificationManagerService.getNotificationCountLocked(PKG, userId, 0, "tag"));
+    }
+
+    @Test
+    public void testAddAutogroup_requestsSort() throws Exception {
+        RankingHandler rh = mock(RankingHandler.class);
+        mNotificationManagerService.setRankingHandler(rh);
+
+        final NotificationRecord r = generateNotificationRecord(mTestNotificationChannel);
+        mNotificationManagerService.addNotification(r);
+        mNotificationManagerService.addAutogroupKeyLocked(r.getKey());
+
+        verify(rh, times(1)).requestSort();
+    }
+
+    @Test
+    public void testRemoveAutogroup_requestsSort() throws Exception {
+        RankingHandler rh = mock(RankingHandler.class);
+        mNotificationManagerService.setRankingHandler(rh);
+
+        final NotificationRecord r = generateNotificationRecord(mTestNotificationChannel);
+        r.setOverrideGroupKey("TEST");
+        mNotificationManagerService.addNotification(r);
+        mNotificationManagerService.removeAutogroupKeyLocked(r.getKey());
+
+        verify(rh, times(1)).requestSort();
+    }
+
+    @Test
+    public void testReaddAutogroup_noSort() throws Exception {
+        RankingHandler rh = mock(RankingHandler.class);
+        mNotificationManagerService.setRankingHandler(rh);
+
+        final NotificationRecord r = generateNotificationRecord(mTestNotificationChannel);
+        r.setOverrideGroupKey("TEST");
+        mNotificationManagerService.addNotification(r);
+        mNotificationManagerService.addAutogroupKeyLocked(r.getKey());
+
+        verify(rh, never()).requestSort();
+    }
+
+    @Test
+    public void testHandleRankingSort_sendsUpdateOnSignalExtractorChange() throws Exception {
+        mNotificationManagerService.setRankingHelper(mRankingHelper);
+        NotificationManagerService.WorkerHandler handler = mock(
+                NotificationManagerService.WorkerHandler.class);
+        mNotificationManagerService.setHandler(handler);
+
+        Map<String, Answer> answers = getSignalExtractorSideEffects();
+        for (String message : answers.keySet()) {
+            mNotificationManagerService.clearNotifications();
+            final NotificationRecord r = generateNotificationRecord(mTestNotificationChannel);
+            mNotificationManagerService.addNotification(r);
+
+            doAnswer(answers.get(message)).when(mRankingHelper).extractSignals(r);
+
+            mNotificationManagerService.handleRankingSort();
+        }
+        verify(handler, times(answers.size())).scheduleSendRankingUpdate();
+    }
+
+    @Test
+    public void testHandleRankingSort_noUpdateWhenNoSignalChange() throws Exception {
+        mNotificationManagerService.setRankingHelper(mRankingHelper);
+        NotificationManagerService.WorkerHandler handler = mock(
+                NotificationManagerService.WorkerHandler.class);
+        mNotificationManagerService.setHandler(handler);
+
+        final NotificationRecord r = generateNotificationRecord(mTestNotificationChannel);
+        mNotificationManagerService.addNotification(r);
+
+        mNotificationManagerService.handleRankingSort();
+        verify(handler, never()).scheduleSendRankingUpdate();
+    }
+
+    @Test
+    public void testReadPolicyXml_readApprovedServicesFromXml() throws Exception {
+        final String preupgradeXml = "<notification-policy version=\"1\">"
+                + "<zen></zen>"
+                + "<ranking></ranking>"
+                + "<enabled_listeners>"
+                + "<service_listing approved=\"test\" user=\"0\" primary=\"true\" />"
+                + "</enabled_listeners>"
+                + "<enabled_assistants>"
+                + "<service_listing approved=\"test\" user=\"0\" primary=\"true\" />"
+                + "</enabled_assistants>"
+                + "<dnd_apps>"
+                + "<service_listing approved=\"test\" user=\"0\" primary=\"true\" />"
+                + "</dnd_apps>"
+                + "</notification-policy>";
+        mNotificationManagerService.readPolicyXml(
+                new BufferedInputStream(new ByteArrayInputStream(preupgradeXml.getBytes())), false);
+        verify(mListeners, times(1)).readXml(any());
+        verify(mConditionProviders, times(1)).readXml(any());
+        verify(mAssistants, times(1)).readXml(any());
+
+        // numbers are inflated for setup
+        verify(mListeners, times(1)).migrateToXml();
+        verify(mConditionProviders, times(1)).migrateToXml();
+        verify(mAssistants, times(1)).migrateToXml();
+    }
+
+    @Test
+    public void testReadPolicyXml_readApprovedServicesFromSettings() throws Exception {
+        final String preupgradeXml = "<notification-policy version=\"1\">"
+                + "<zen></zen>"
+                + "<ranking></ranking>"
+                + "</notification-policy>";
+        mNotificationManagerService.readPolicyXml(
+                new BufferedInputStream(new ByteArrayInputStream(preupgradeXml.getBytes())), false);
+        verify(mListeners, never()).readXml(any());
+        verify(mConditionProviders, never()).readXml(any());
+        verify(mAssistants, never()).readXml(any());
+
+        // numbers are inflated for setup
+        verify(mListeners, times(2)).migrateToXml();
+        verify(mConditionProviders, times(2)).migrateToXml();
+        verify(mAssistants, times(2)).migrateToXml();
+    }
+
+
+    @Test
+    public void testLocaleChangedCallsUpdateDefaultZenModeRules() throws Exception {
+        ZenModeHelper mZenModeHelper = mock(ZenModeHelper.class);
+        mNotificationManagerService.mZenModeHelper = mZenModeHelper;
+        mNotificationManagerService.mLocaleChangeReceiver.onReceive(mContext,
+                new Intent(Intent.ACTION_LOCALE_CHANGED));
+
+        verify(mZenModeHelper, times(1)).updateDefaultZenRules();
+    }
+
+    @Test
+    public void testBumpFGImportance_noChannelChangePreOApp() throws Exception {
+        String preOPkg = "preO";
+        int preOUid = 145;
+        final ApplicationInfo legacy = new ApplicationInfo();
+        legacy.targetSdkVersion = Build.VERSION_CODES.N_MR1;
+        when(mPackageManagerClient.getApplicationInfoAsUser(eq(preOPkg), anyInt(), anyInt()))
+                .thenReturn(legacy);
+        when(mPackageManagerClient.getPackageUidAsUser(eq(preOPkg), anyInt())).thenReturn(preOUid);
+        getContext().setMockPackageManager(mPackageManagerClient);
+
+        Notification.Builder nb = new Notification.Builder(mContext,
+                NotificationChannel.DEFAULT_CHANNEL_ID)
+                .setContentTitle("foo")
+                .setSmallIcon(android.R.drawable.sym_def_app_icon)
+                .setFlag(Notification.FLAG_FOREGROUND_SERVICE, true)
+                .setPriority(Notification.PRIORITY_MIN);
+
+        StatusBarNotification sbn = new StatusBarNotification(preOPkg, preOPkg, 9, "tag", preOUid,
+                0, nb.build(), new UserHandle(preOUid), null, 0);
+
+        mBinderService.enqueueNotificationWithTag(preOPkg, preOPkg, "tag",
+                sbn.getId(), sbn.getNotification(), sbn.getUserId());
+        waitForIdle();
+        assertEquals(IMPORTANCE_LOW,
+                mNotificationManagerService.getNotificationRecord(sbn.getKey()).getImportance());
+
+        nb = new Notification.Builder(mContext)
+                .setContentTitle("foo")
+                .setSmallIcon(android.R.drawable.sym_def_app_icon)
+                .setFlag(Notification.FLAG_FOREGROUND_SERVICE, true)
+                .setPriority(Notification.PRIORITY_MIN);
+
+        sbn = new StatusBarNotification(preOPkg, preOPkg, 9, "tag", preOUid,
+                0, nb.build(), new UserHandle(preOUid), null, 0);
+
+        mBinderService.enqueueNotificationWithTag(preOPkg, preOPkg, "tag",
+                sbn.getId(), sbn.getNotification(), sbn.getUserId());
+        waitForIdle();
+        assertEquals(IMPORTANCE_LOW,
+                mNotificationManagerService.getNotificationRecord(sbn.getKey()).getImportance());
+
+        NotificationChannel defaultChannel = mBinderService.getNotificationChannel(
+                preOPkg, NotificationChannel.DEFAULT_CHANNEL_ID);
+        assertEquals(IMPORTANCE_UNSPECIFIED, defaultChannel.getImportance());
     }
 }
diff --git a/services/tests/notification/src/com/android/server/notification/NotificationTest.java b/services/tests/notification/src/com/android/server/notification/NotificationTest.java
new file mode 100644
index 0000000..4165e9e
--- /dev/null
+++ b/services/tests/notification/src/com/android/server/notification/NotificationTest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.notification;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertNull;
+
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.app.ActivityManager;
+import android.app.Notification;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.graphics.Color;
+import android.os.Build;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class NotificationTest extends NotificationTestCase {
+
+    @Mock
+    ActivityManager mAm;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void testStripsExtendersInLowRamMode() {
+        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, true);
+
+        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 testStripsRemoteViewsInLowRamMode() {
+        Context context = spy(getContext());
+        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);
+        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);
+
+        assertTrue(before == after);
+
+        assertEquals("different channel", new Notification.TvExtender(before).getChannelId());
+        assertEquals(Color.RED, new Notification.CarExtender(before).getColor());
+        assertEquals("dismiss", new Notification.WearableExtender(before).getDismissalId());
+    }
+}
+
diff --git a/services/tests/notification/src/com/android/server/notification/NotificationTestCase.java b/services/tests/notification/src/com/android/server/notification/NotificationTestCase.java
index cc30aab..1ee3412 100644
--- a/services/tests/notification/src/com/android/server/notification/NotificationTestCase.java
+++ b/services/tests/notification/src/com/android/server/notification/NotificationTestCase.java
@@ -27,7 +27,7 @@
     public final TestableContext mContext =
             new TestableContext(InstrumentationRegistry.getContext(), null);
 
-    protected Context getContext() {
+    protected TestableContext getContext() {
         return mContext;
     }
 }
diff --git a/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java b/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java
index 5a72e6b..c382e53 100644
--- a/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java
+++ b/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java
@@ -25,40 +25,43 @@
 import static junit.framework.Assert.assertNull;
 import static junit.framework.Assert.fail;
 
-import org.json.JSONArray;
-import org.json.JSONObject;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.android.internal.util.FastXmlSerializer;
-
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlSerializer;
-
 import android.app.Notification;
-import android.app.NotificationChannelGroup;
-import android.content.Context;
 import android.app.NotificationChannel;
+import android.app.NotificationChannelGroup;
 import android.app.NotificationManager;
+import android.content.ContentProvider;
+import android.content.Context;
+import android.content.IContentProvider;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.content.res.Resources;
 import android.graphics.Color;
 import android.media.AudioAttributes;
 import android.net.Uri;
 import android.os.Build;
 import android.os.UserHandle;
+import android.provider.Settings;
 import android.provider.Settings.Secure;
 import android.service.notification.StatusBarNotification;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.runner.AndroidJUnit4;
 import android.test.suitebuilder.annotation.SmallTest;
+import android.testing.TestableContentResolver;
 import android.util.ArrayMap;
 import android.util.Xml;
 
+import com.android.internal.util.FastXmlSerializer;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlSerializer;
+
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayInputStream;
@@ -75,9 +78,14 @@
 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.Matchers.anyInt;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
+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;
 
 @SmallTest
@@ -90,10 +98,17 @@
     private static final int UID2 = 1111;
     private static final UserHandle USER2 = UserHandle.of(10);
     private static final String TEST_CHANNEL_ID = "test_channel_id";
+    private static final String TEST_AUTHORITY = "test";
+    private static final Uri SOUND_URI =
+            Uri.parse("content://" + TEST_AUTHORITY + "/internal/audio/media/10");
+    private static final Uri CANONICAL_SOUND_URI =
+            Uri.parse("content://" + TEST_AUTHORITY
+                    + "/internal/audio/media/10?title=Test&canonical=1");
 
     @Mock NotificationUsageStats mUsageStats;
     @Mock RankingHandler mHandler;
     @Mock PackageManager mPm;
+    @Mock IContentProvider mTestIContentProvider;
     @Mock Context mContext;
 
     private Notification mNotiGroupGSortA;
@@ -124,12 +139,27 @@
         when(mPm.getPackageUidAsUser(eq(UPDATED_PKG), anyInt())).thenReturn(UID2);
         when(mContext.getResources()).thenReturn(
                 InstrumentationRegistry.getContext().getResources());
+        when(mContext.getContentResolver()).thenReturn(
+                InstrumentationRegistry.getContext().getContentResolver());
         when(mContext.getPackageManager()).thenReturn(mPm);
         when(mContext.getApplicationInfo()).thenReturn(legacy);
         // most tests assume badging is enabled
-        Secure.putIntForUser(getContext().getContentResolver(),
+        TestableContentResolver contentResolver = getContext().getContentResolver();
+        contentResolver.setFallbackToExisting(false);
+        Secure.putIntForUser(contentResolver,
                 Secure.NOTIFICATION_BADGING, 1, UserHandle.getUserId(UID));
 
+        ContentProvider testContentProvider = mock(ContentProvider.class);
+        when(testContentProvider.getIContentProvider()).thenReturn(mTestIContentProvider);
+        contentResolver.addProvider(TEST_AUTHORITY, testContentProvider);
+
+        when(mTestIContentProvider.canonicalize(any(), eq(SOUND_URI)))
+                .thenReturn(CANONICAL_SOUND_URI);
+        when(mTestIContentProvider.canonicalize(any(), eq(CANONICAL_SOUND_URI)))
+                .thenReturn(CANONICAL_SOUND_URI);
+        when(mTestIContentProvider.uncanonicalize(any(), eq(CANONICAL_SOUND_URI)))
+                .thenReturn(SOUND_URI);
+
         mHelper = new RankingHelper(getContext(), mPm, mHandler, mUsageStats,
                 new String[] {ImportanceExtractor.class.getName()});
 
@@ -207,9 +237,12 @@
     }
 
     private void loadStreamXml(ByteArrayOutputStream stream, boolean forRestore) throws Exception {
+        loadByteArrayXml(stream.toByteArray(), forRestore);
+    }
+
+    private void loadByteArrayXml(byte[] byteArray, boolean forRestore) throws Exception {
         XmlPullParser parser = Xml.newPullParser();
-        parser.setInput(new BufferedInputStream(new ByteArrayInputStream(stream.toByteArray())),
-                null);
+        parser.setInput(new BufferedInputStream(new ByteArrayInputStream(byteArray)), null);
         parser.nextTag();
         mHelper.readXml(parser, forRestore);
     }
@@ -357,7 +390,7 @@
         NotificationChannel channel2 =
                 new NotificationChannel("id2", "name2", IMPORTANCE_LOW);
         channel2.setDescription("descriptions for all");
-        channel2.setSound(new Uri.Builder().scheme("test").build(), mAudioAttributes);
+        channel2.setSound(SOUND_URI, mAudioAttributes);
         channel2.enableLights(true);
         channel2.setBypassDnd(true);
         channel2.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
@@ -419,6 +452,109 @@
     }
 
     @Test
+    public void testBackupXml_backupCanonicalizedSoundUri() throws Exception {
+        NotificationChannel channel =
+                new NotificationChannel("id", "name", IMPORTANCE_LOW);
+        channel.setSound(SOUND_URI, mAudioAttributes);
+        mHelper.createNotificationChannel(PKG, UID, channel, true);
+
+        ByteArrayOutputStream baos = writeXmlAndPurge(PKG, UID, true, channel.getId());
+
+        // Testing that in restore we are given the canonical version
+        loadStreamXml(baos, true);
+        verify(mTestIContentProvider).uncanonicalize(any(), eq(CANONICAL_SOUND_URI));
+    }
+
+    @Test
+    public void testRestoreXml_withExistentCanonicalizedSoundUri() throws Exception {
+        Uri localUri = Uri.parse("content://" + TEST_AUTHORITY + "/local/url");
+        Uri canonicalBasedOnLocal = localUri.buildUpon()
+                .appendQueryParameter("title", "Test")
+                .appendQueryParameter("canonical", "1")
+                .build();
+        when(mTestIContentProvider.canonicalize(any(), eq(CANONICAL_SOUND_URI)))
+                .thenReturn(canonicalBasedOnLocal);
+        when(mTestIContentProvider.uncanonicalize(any(), eq(CANONICAL_SOUND_URI)))
+                .thenReturn(localUri);
+        when(mTestIContentProvider.uncanonicalize(any(), eq(canonicalBasedOnLocal)))
+                .thenReturn(localUri);
+
+        NotificationChannel channel =
+                new NotificationChannel("id", "name", IMPORTANCE_LOW);
+        channel.setSound(SOUND_URI, mAudioAttributes);
+        mHelper.createNotificationChannel(PKG, UID, channel, true);
+        ByteArrayOutputStream baos = writeXmlAndPurge(PKG, UID, true, channel.getId());
+
+        loadStreamXml(baos, true);
+
+        NotificationChannel actualChannel = mHelper.getNotificationChannel(
+                PKG, UID, channel.getId(), false);
+        assertEquals(localUri, actualChannel.getSound());
+    }
+
+    @Test
+    public void testRestoreXml_withNonExistentCanonicalizedSoundUri() throws Exception {
+        Thread.sleep(3000);
+        when(mTestIContentProvider.canonicalize(any(), eq(CANONICAL_SOUND_URI)))
+                .thenReturn(null);
+        when(mTestIContentProvider.uncanonicalize(any(), eq(CANONICAL_SOUND_URI)))
+                .thenReturn(null);
+
+        NotificationChannel channel =
+                new NotificationChannel("id", "name", IMPORTANCE_LOW);
+        channel.setSound(SOUND_URI, mAudioAttributes);
+        mHelper.createNotificationChannel(PKG, UID, channel, true);
+        ByteArrayOutputStream baos = writeXmlAndPurge(PKG, UID, true, channel.getId());
+
+        loadStreamXml(baos, true);
+
+        NotificationChannel actualChannel = mHelper.getNotificationChannel(
+                PKG, UID, channel.getId(), false);
+        assertEquals(Settings.System.DEFAULT_NOTIFICATION_URI, actualChannel.getSound());
+    }
+
+
+    /**
+     * Although we don't make backups with uncanonicalized uris anymore, we used to, so we have to
+     * handle its restore properly.
+     */
+    @Test
+    public void testRestoreXml_withUncanonicalizedNonLocalSoundUri() throws Exception {
+        // Not a local uncanonicalized uri, simulating that it fails to exist locally
+        when(mTestIContentProvider.canonicalize(any(), eq(SOUND_URI))).thenReturn(null);
+        String id = "id";
+        String backupWithUncanonicalizedSoundUri = "<ranking version=\"1\">\n"
+                + "<package name=\"com.android.server.notification\" show_badge=\"true\">\n"
+                + "<channel id=\"" + id + "\" name=\"name\" importance=\"2\" "
+                + "sound=\"" + SOUND_URI + "\" "
+                + "usage=\"6\" content_type=\"0\" flags=\"1\" show_badge=\"true\" />\n"
+                + "<channel id=\"miscellaneous\" name=\"Uncategorized\" usage=\"5\" "
+                + "content_type=\"4\" flags=\"0\" show_badge=\"true\" />\n"
+                + "</package>\n"
+                + "</ranking>\n";
+
+        loadByteArrayXml(backupWithUncanonicalizedSoundUri.getBytes(), true);
+
+        NotificationChannel actualChannel = mHelper.getNotificationChannel(PKG, UID, id, false);
+        assertEquals(Settings.System.DEFAULT_NOTIFICATION_URI, actualChannel.getSound());
+    }
+
+    @Test
+    public void testBackupRestoreXml_withNullSoundUri() throws Exception {
+        NotificationChannel channel =
+                new NotificationChannel("id", "name", IMPORTANCE_LOW);
+        channel.setSound(null, mAudioAttributes);
+        mHelper.createNotificationChannel(PKG, UID, channel, true);
+        ByteArrayOutputStream baos = writeXmlAndPurge(PKG, UID, true, channel.getId());
+
+        loadStreamXml(baos, true);
+
+        NotificationChannel actualChannel = mHelper.getNotificationChannel(
+                PKG, UID, channel.getId(), false);
+        assertEquals(null, actualChannel.getSound());
+    }
+
+    @Test
     public void testChannelXml_backup() throws Exception {
         NotificationChannelGroup ncg = new NotificationChannelGroup("1", "bye");
         NotificationChannelGroup ncg2 = new NotificationChannelGroup("2", "hello");
@@ -477,7 +613,7 @@
         final NotificationChannel defaultChannel = mHelper.getNotificationChannel(PKG, UID,
                 NotificationChannel.DEFAULT_CHANNEL_ID, false);
         defaultChannel.setImportance(NotificationManager.IMPORTANCE_LOW);
-        mHelper.updateNotificationChannel(PKG, UID, defaultChannel);
+        mHelper.updateNotificationChannel(PKG, UID, defaultChannel, true);
 
         ByteArrayOutputStream baos = writeXmlAndPurge(PKG, UID, false,
                 NotificationChannel.DEFAULT_CHANNEL_ID);
@@ -626,10 +762,12 @@
         channel2.setBypassDnd(false);
         channel2.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
 
-        mHelper.updateNotificationChannel(PKG, UID, channel2);
+        mHelper.updateNotificationChannel(PKG, UID, channel2, true);
 
         // all fields should be changed
         assertEquals(channel2, mHelper.getNotificationChannel(PKG, UID, channel.getId(), false));
+
+        verify(mHandler, times(1)).requestSort();
     }
 
     @Test
@@ -648,7 +786,7 @@
         defaultChannel.setBypassDnd(true);
         defaultChannel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
 
-        mHelper.updateNotificationChannel(PKG, UID, defaultChannel);
+        mHelper.updateNotificationChannel(PKG, UID, defaultChannel, true);
 
         // ensure app level fields are changed
         assertFalse(mHelper.canShowBadge(PKG, UID));
@@ -672,7 +810,7 @@
         channel.setBypassDnd(true);
         channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
 
-        mHelper.updateNotificationChannel(PKG, UID, channel);
+        mHelper.updateNotificationChannel(PKG, UID, channel, true);
 
         // ensure app level fields are not changed
         assertTrue(mHelper.canShowBadge(PKG, UID));
@@ -712,6 +850,8 @@
         assertFalse(savedChannel.canBypassDnd());
         assertFalse(Notification.VISIBILITY_SECRET == savedChannel.getLockscreenVisibility());
         assertEquals(channel.canShowBadge(), savedChannel.canShowBadge());
+
+        verify(mHandler, never()).requestSort();
     }
 
     @Test
@@ -761,14 +901,14 @@
         update1.setSound(new Uri.Builder().scheme("test").build(),
                 new AudioAttributes.Builder().build());
         update1.lockFields(NotificationChannel.USER_LOCKED_PRIORITY); // should be ignored
-        mHelper.updateNotificationChannel(PKG, UID, update1);
+        mHelper.updateNotificationChannel(PKG, UID, update1, true);
         assertEquals(NotificationChannel.USER_LOCKED_SOUND,
                 mHelper.getNotificationChannel(PKG, UID, update1.getId(), false)
                         .getUserLockedFields());
 
         NotificationChannel update2 = getChannel();
         update2.enableVibration(true);
-        mHelper.updateNotificationChannel(PKG, UID, update2);
+        mHelper.updateNotificationChannel(PKG, UID, update2, true);
         assertEquals(NotificationChannel.USER_LOCKED_SOUND
                         | NotificationChannel.USER_LOCKED_VIBRATION,
                 mHelper.getNotificationChannel(PKG, UID, update2.getId(), false)
@@ -781,14 +921,14 @@
 
         final NotificationChannel update1 = getChannel();
         update1.setVibrationPattern(new long[]{7945, 46 ,246});
-        mHelper.updateNotificationChannel(PKG, UID, update1);
+        mHelper.updateNotificationChannel(PKG, UID, update1, true);
         assertEquals(NotificationChannel.USER_LOCKED_VIBRATION,
                 mHelper.getNotificationChannel(PKG, UID, update1.getId(), false)
                         .getUserLockedFields());
 
         final NotificationChannel update2 = getChannel();
         update2.enableLights(true);
-        mHelper.updateNotificationChannel(PKG, UID, update2);
+        mHelper.updateNotificationChannel(PKG, UID, update2, true);
         assertEquals(NotificationChannel.USER_LOCKED_VIBRATION
                         | NotificationChannel.USER_LOCKED_LIGHTS,
                 mHelper.getNotificationChannel(PKG, UID, update2.getId(), false)
@@ -801,14 +941,14 @@
 
         final NotificationChannel update1 = getChannel();
         update1.setLightColor(Color.GREEN);
-        mHelper.updateNotificationChannel(PKG, UID, update1);
+        mHelper.updateNotificationChannel(PKG, UID, update1, true);
         assertEquals(NotificationChannel.USER_LOCKED_LIGHTS,
                 mHelper.getNotificationChannel(PKG, UID, update1.getId(), false)
                         .getUserLockedFields());
 
         final NotificationChannel update2 = getChannel();
         update2.setImportance(IMPORTANCE_DEFAULT);
-        mHelper.updateNotificationChannel(PKG, UID, update2);
+        mHelper.updateNotificationChannel(PKG, UID, update2, true);
         assertEquals(NotificationChannel.USER_LOCKED_LIGHTS
                         | NotificationChannel.USER_LOCKED_IMPORTANCE,
                 mHelper.getNotificationChannel(PKG, UID, update2.getId(), false)
@@ -824,14 +964,14 @@
 
         final NotificationChannel update1 = getChannel();
         update1.setBypassDnd(true);
-        mHelper.updateNotificationChannel(PKG, UID, update1);
+        mHelper.updateNotificationChannel(PKG, UID, update1, true);
         assertEquals(NotificationChannel.USER_LOCKED_PRIORITY,
                 mHelper.getNotificationChannel(PKG, UID, update1.getId(), false)
                         .getUserLockedFields());
 
         final NotificationChannel update2 = getChannel();
         update2.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
-        mHelper.updateNotificationChannel(PKG, UID, update2);
+        mHelper.updateNotificationChannel(PKG, UID, update2, true);
         assertEquals(NotificationChannel.USER_LOCKED_PRIORITY
                         | NotificationChannel.USER_LOCKED_VISIBILITY,
                 mHelper.getNotificationChannel(PKG, UID, update2.getId(), false)
@@ -839,7 +979,7 @@
 
         final NotificationChannel update3 = getChannel();
         update3.setShowBadge(false);
-        mHelper.updateNotificationChannel(PKG, UID, update3);
+        mHelper.updateNotificationChannel(PKG, UID, update3, true);
         assertEquals(NotificationChannel.USER_LOCKED_PRIORITY
                         | NotificationChannel.USER_LOCKED_VISIBILITY
                         | NotificationChannel.USER_LOCKED_SHOW_BADGE,
@@ -1058,6 +1198,8 @@
 
         // notDeleted
         assertEquals(1, mHelper.getNotificationChannelGroups(PKG, UID).size());
+
+        verify(mHandler, never()).requestSort();
     }
 
     @Test
@@ -1159,6 +1301,7 @@
         NotificationChannelGroup ncg = new NotificationChannelGroup("group1", "name1");
         mHelper.createNotificationChannelGroup(PKG, UID, ncg, true);
         assertEquals(ncg, mHelper.getNotificationChannelGroups(PKG, UID).iterator().next());
+        verify(mHandler, never()).requestSort();
     }
 
     @Test
@@ -1249,7 +1392,7 @@
         mHelper.getNotificationChannelGroups(PKG, UID, true).getList();
 
         channel1.setImportance(IMPORTANCE_LOW);
-        mHelper.updateNotificationChannel(PKG, UID, channel1);
+        mHelper.updateNotificationChannel(PKG, UID, channel1, true);
 
         List<NotificationChannelGroup> actual =
                 mHelper.getNotificationChannelGroups(PKG, UID, true).getList();
@@ -1275,6 +1418,8 @@
         actual = mHelper.getNotificationChannel(PKG, UID, "id", false);
         assertEquals("goodbye", actual.getName());
         assertEquals(IMPORTANCE_DEFAULT, actual.getImportance());
+
+        verify(mHandler, times(1)).requestSort();
     }
 
     @Test
@@ -1354,4 +1499,22 @@
         assertFalse(mHelper.badgingEnabled(USER));
         assertTrue(mHelper.badgingEnabled(USER2));
     }
+
+    @Test
+    public void testOnLocaleChanged_updatesDefaultChannels() throws Exception {
+        String newLabel = "bananas!";
+        final NotificationChannel defaultChannel = mHelper.getNotificationChannel(PKG, UID,
+                NotificationChannel.DEFAULT_CHANNEL_ID, false);
+        assertFalse(newLabel.equals(defaultChannel.getName()));
+
+        Resources res = mock(Resources.class);
+        when(mContext.getResources()).thenReturn(res);
+        when(res.getString(com.android.internal.R.string.default_notification_channel_label))
+                .thenReturn(newLabel);
+
+        mHelper.onLocaleChanged(mContext, USER.getIdentifier());
+
+        assertEquals(newLabel, mHelper.getNotificationChannel(PKG, UID,
+                NotificationChannel.DEFAULT_CHANNEL_ID, false).getName());
+    }
 }
diff --git a/services/tests/servicestests/Android.mk b/services/tests/servicestests/Android.mk
index e3a6dae..19396d4 100644
--- a/services/tests/servicestests/Android.mk
+++ b/services/tests/servicestests/Android.mk
@@ -29,9 +29,10 @@
 
 LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/aidl
 
-LOCAL_SRC_FILES += aidl/com/android/servicestests/aidl/INetworkStateObserver.aidl
+LOCAL_SRC_FILES += aidl/com/android/servicestests/aidl/INetworkStateObserver.aidl \
+    aidl/com/android/servicestests/aidl/ICmdReceiverService.aidl
 
-LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_JAVA_LIBRARIES := android.test.mock legacy-android-test
 
 LOCAL_PACKAGE_NAME := FrameworksServicesTests
 LOCAL_COMPATIBILITY_SUITE := device-tests
@@ -61,3 +62,5 @@
 LOCAL_STATIC_JAVA_LIBRARIES += ub-uiautomator
 
 include $(BUILD_PACKAGE)
+
+include $(call all-makefiles-under, $(LOCAL_PATH))
\ No newline at end of file
diff --git a/services/tests/servicestests/AndroidManifest.xml b/services/tests/servicestests/AndroidManifest.xml
index e12032d..59d205e 100644
--- a/services/tests/servicestests/AndroidManifest.xml
+++ b/services/tests/servicestests/AndroidManifest.xml
@@ -35,7 +35,6 @@
     <uses-permission android:name="android.permission.REORDER_TASKS" />
     <uses-permission android:name="android.permission.MANAGE_NETWORK_POLICY" />
     <uses-permission android:name="android.permission.READ_NETWORK_USAGE_HISTORY" />
-    <uses-permission android:name="android.permission.MODIFY_NETWORK_ACCOUNTING" />
     <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.MANAGE_USERS" />
diff --git a/services/tests/servicestests/AndroidTest.xml b/services/tests/servicestests/AndroidTest.xml
index 63f3b75..6a9983e 100644
--- a/services/tests/servicestests/AndroidTest.xml
+++ b/services/tests/servicestests/AndroidTest.xml
@@ -16,6 +16,7 @@
 <configuration description="Runs Frameworks Services Tests.">
     <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
         <option name="test-file-name" value="FrameworksServicesTests.apk" />
+        <option name="test-file-name" value="ConnTestApp.apk" />
     </target_preparer>
 
     <option name="test-suite-tag" value="apct" />
diff --git a/services/tests/servicestests/aidl/Android.mk b/services/tests/servicestests/aidl/Android.mk
index 0c9b839..166da1d 100644
--- a/services/tests/servicestests/aidl/Android.mk
+++ b/services/tests/servicestests/aidl/Android.mk
@@ -18,6 +18,7 @@
 LOCAL_MODULE_TAGS := tests
 LOCAL_SDK_VERSION := current
 LOCAL_SRC_FILES := \
-        com/android/servicestests/aidl/INetworkStateObserver.aidl
+        com/android/servicestests/aidl/INetworkStateObserver.aidl \
+        com/android/servicestests/aidl/ICmdReceiverService.aidl
 LOCAL_MODULE := servicestests-aidl
 include $(BUILD_STATIC_JAVA_LIBRARY)
\ No newline at end of file
diff --git a/services/tests/servicestests/aidl/com/android/servicestests/aidl/ICmdReceiverService.aidl b/services/tests/servicestests/aidl/com/android/servicestests/aidl/ICmdReceiverService.aidl
new file mode 100644
index 0000000..d964504
--- /dev/null
+++ b/services/tests/servicestests/aidl/com/android/servicestests/aidl/ICmdReceiverService.aidl
@@ -0,0 +1,21 @@
+/*
+ * 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.servicestests.aidl;
+
+interface ICmdReceiverService {
+    void finishActivity();
+}
\ No newline at end of file
diff --git a/services/tests/servicestests/res/raw/conntestapp b/services/tests/servicestests/res/raw/conntestapp
deleted file mode 100644
index 6093303..0000000
--- a/services/tests/servicestests/res/raw/conntestapp
+++ /dev/null
Binary files differ
diff --git a/services/tests/servicestests/src/com/android/server/DropBoxTest.java b/services/tests/servicestests/src/com/android/server/DropBoxTest.java
index 7f28d44..56773e8 100644
--- a/services/tests/servicestests/src/com/android/server/DropBoxTest.java
+++ b/services/tests/servicestests/src/com/android/server/DropBoxTest.java
@@ -18,18 +18,20 @@
 
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.ContextWrapper;
 import android.content.Intent;
 import android.os.DropBoxManager;
+import android.os.Looper;
 import android.os.Parcel;
-import android.os.Parcelable;
 import android.os.ParcelFileDescriptor;
+import android.os.Parcelable;
 import android.os.Process;
-import android.os.ServiceManager;
 import android.os.StatFs;
+import android.os.UserHandle;
 import android.provider.Settings;
 import android.test.AndroidTestCase;
 
-import com.android.server.DropBoxManagerService;
+import com.android.server.DropBoxManagerService.EntryFile;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -41,8 +43,28 @@
 import java.util.Random;
 import java.util.zip.GZIPOutputStream;
 
-/** Test {@link DropBoxManager} functionality. */
+/**
+ * Test {@link DropBoxManager} functionality.
+ *
+ * Run with:
+ * bit FrameworksServicesTests:com.android.server.DropBoxTest
+ */
 public class DropBoxTest extends AndroidTestCase {
+    private Context mContext;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        mContext = new ContextWrapper(super.getContext()) {
+            @Override
+            public void sendBroadcastAsUser(Intent intent,
+                    UserHandle user, String receiverPermission) {
+                // Don't actually send broadcasts.
+            }
+        };
+    }
+
     public void tearDown() throws Exception {
         ContentResolver cr = getContext().getContentResolver();
         Settings.Global.putString(cr, Settings.Global.DROPBOX_AGE_SECONDS, "");
@@ -51,9 +73,15 @@
         Settings.Global.putString(cr, Settings.Global.DROPBOX_TAG_PREFIX + "DropBoxTest", "");
     }
 
+    @Override
+    public Context getContext() {
+        return mContext;
+    }
+
     public void testAddText() throws Exception {
         File dir = getEmptyDir("testAddText");
-        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir);
+        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir,
+                Looper.getMainLooper());
         DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub());
 
         long before = System.currentTimeMillis();
@@ -89,15 +117,19 @@
 
     public void testAddData() throws Exception {
         File dir = getEmptyDir("testAddData");
-        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir);
+        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir,
+                Looper.getMainLooper());
         DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub());
 
         long before = System.currentTimeMillis();
+        Thread.sleep(1);
         dropbox.addData("DropBoxTest", "TEST".getBytes(), 0);
+        Thread.sleep(1);
         long after = System.currentTimeMillis();
 
         DropBoxManager.Entry e = dropbox.getNextEntry("DropBoxTest", before);
-        assertTrue(null == dropbox.getNextEntry("DropBoxTest", e.getTimeMillis()));
+        assertNotNull(e);
+        assertNull(dropbox.getNextEntry("DropBoxTest", e.getTimeMillis()));
 
         assertEquals("DropBoxTest", e.getTag());
         assertTrue(e.getTimeMillis() >= before);
@@ -114,10 +146,12 @@
         File dir = getEmptyDir("testAddFile");
         long before = System.currentTimeMillis();
 
-        File f0 = new File(dir, "f0.txt");
-        File f1 = new File(dir, "f1.txt.gz");
-        File f2 = new File(dir, "f2.dat");
-        File f3 = new File(dir, "f2.dat.gz");
+        File clientDir = getEmptyDir("testAddFile_client");
+
+        File f0 = new File(clientDir, "f0.txt");
+        File f1 = new File(clientDir, "f1.txt.gz");
+        File f2 = new File(clientDir, "f2.dat");
+        File f3 = new File(clientDir, "f2.dat.gz");
 
         FileWriter w0 = new FileWriter(f0);
         GZIPOutputStream gz1 = new GZIPOutputStream(new FileOutputStream(f1));
@@ -134,7 +168,8 @@
         os2.close();
         gz3.close();
 
-        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir);
+        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir,
+                Looper.getMainLooper());
         DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub());
 
         dropbox.addFile("DropBoxTest", f0, DropBoxManager.IS_TEXT);
@@ -200,7 +235,8 @@
         // Tombstone in the far future
         new FileOutputStream(new File(dir, "DropBoxTest@" + (before + 100002) + ".lost")).close();
 
-        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir);
+        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir,
+                Looper.getMainLooper());
         DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub());
 
         // Until a write, the timestamps are taken at face value
@@ -251,7 +287,8 @@
 
     public void testIsTagEnabled() throws Exception {
         File dir = getEmptyDir("testIsTagEnabled");
-        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir);
+        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir,
+                Looper.getMainLooper());
         DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub());
 
         long before = System.currentTimeMillis();
@@ -284,7 +321,8 @@
 
     public void testGetNextEntry() throws Exception {
         File dir = getEmptyDir("testGetNextEntry");
-        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir);
+        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir,
+                Looper.getMainLooper());
         DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub());
 
         long before = System.currentTimeMillis();
@@ -346,7 +384,8 @@
 
         final int overhead = 64;
         long before = System.currentTimeMillis();
-        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir);
+        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir,
+                Looper.getMainLooper());
         DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub());
 
         addRandomEntry(dropbox, "DropBoxTest0", blockSize - overhead);
@@ -440,7 +479,8 @@
 
         // Write one normal entry and another so big that it is instantly tombstoned
         long before = System.currentTimeMillis();
-        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir);
+        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir,
+                Looper.getMainLooper());
         DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub());
 
         dropbox.addText("DropBoxTest", "TEST");
@@ -471,7 +511,8 @@
     public void testFileCountLimits() throws Exception {
         File dir = getEmptyDir("testFileCountLimits");
 
-        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir);
+        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir,
+                Looper.getMainLooper());
         DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub());
         dropbox.addText("DropBoxTest", "TEST0");
         dropbox.addText("DropBoxTest", "TEST1");
@@ -524,7 +565,8 @@
 
         File dir = new File(getEmptyDir("testCreateDropBoxManagerWith"), "InvalidDirectory");
         new FileOutputStream(dir).close();  // Create an empty file
-        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir);
+        DropBoxManagerService service = new DropBoxManagerService(getContext(), dir,
+                Looper.getMainLooper());
         DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub());
 
         dropbox.addText("DropBoxTest", "should be ignored");
@@ -735,6 +777,223 @@
         assertTrue(after < before + 20);
     }
 
+    public void testEntryFile() throws Exception {
+        File fromDir = getEmptyDir("testEntryFile_from");
+        File toDir = getEmptyDir("testEntryFile_to");
+
+        {
+            File f = new File(fromDir, "f0.txt");
+            try (FileWriter w = new FileWriter(f)) {
+                w.write("abc");
+            }
+
+            EntryFile e = new EntryFile(f, toDir, "tag:!", 12345, DropBoxManager.IS_TEXT, 1024);
+
+            assertEquals("tag:!", e.tag);
+            assertEquals(12345, e.timestampMillis);
+            assertEquals(DropBoxManager.IS_TEXT, e.flags);
+            assertEquals(1, e.blocks);
+
+            assertFalse(f.exists()); // Because it should be renamed.
+
+            assertTrue(e.hasFile());
+            assertEquals(new File(toDir, "tag%3A!@12345.txt"), e.getFile(toDir));
+            assertTrue(e.getFile(toDir).exists());
+        }
+        // Same test with gzip.
+        {
+            File f = new File(fromDir, "f0.txt.gz"); // It's a lie; it's not actually gz.
+            try (FileWriter w = new FileWriter(f)) {
+                w.write("abc");
+            }
+
+            EntryFile e = new EntryFile(f, toDir, "tag:!", 12345,
+                    DropBoxManager.IS_TEXT | DropBoxManager.IS_GZIPPED, 1024);
+
+            assertEquals("tag:!", e.tag);
+
+            assertFalse(f.exists()); // Because it should be renamed.
+
+            assertTrue(e.hasFile());
+            assertEquals(new File(toDir, "tag%3A!@12345.txt.gz"), e.getFile(toDir));
+            assertTrue(e.getFile(toDir).exists());
+
+        }
+        // binary, gzip.
+        {
+            File f = new File(fromDir, "f0.dat.gz"); // It's a lie; it's not actually gz.
+            try (FileWriter w = new FileWriter(f)) {
+                w.write("abc");
+            }
+
+            EntryFile e = new EntryFile(f, toDir, "tag:!", 12345,
+                    DropBoxManager.IS_GZIPPED, 1024);
+
+            assertEquals("tag:!", e.tag);
+
+            assertFalse(f.exists()); // Because it should be renamed.
+
+            assertTrue(e.hasFile());
+            assertEquals(new File(toDir, "tag%3A!@12345.dat.gz"), e.getFile(toDir));
+            assertTrue(e.getFile(toDir).exists());
+
+        }
+
+        // Tombstone.
+        {
+            EntryFile e = new EntryFile(toDir, "tag:!", 12345);
+
+            assertEquals("tag:!", e.tag);
+            assertEquals(12345, e.timestampMillis);
+            assertEquals(DropBoxManager.IS_EMPTY, e.flags);
+            assertEquals(0, e.blocks);
+
+            assertTrue(e.hasFile());
+            assertEquals(new File(toDir, "tag%3A!@12345.lost"), e.getFile(toDir));
+            assertTrue(e.getFile(toDir).exists());
+        }
+
+        // From existing files.
+        {
+            File f = new File(fromDir, "tag%3A!@12345.dat");
+            f.createNewFile();
+
+            EntryFile e = new EntryFile(f, 1024);
+
+            assertEquals("tag:!", e.tag);
+            assertEquals(12345, e.timestampMillis);
+            assertEquals(0, e.flags);
+            assertEquals(0, e.blocks);
+
+            assertTrue(f.exists());
+        }
+        {
+            File f = new File(fromDir, "tag%3A!@12345.dat.gz");
+            f.createNewFile();
+
+            EntryFile e = new EntryFile(f, 1024);
+
+            assertEquals("tag:!", e.tag);
+            assertEquals(12345, e.timestampMillis);
+            assertEquals(DropBoxManager.IS_GZIPPED, e.flags);
+            assertEquals(0, e.blocks);
+
+            assertTrue(f.exists());
+        }
+        {
+            File f = new File(fromDir, "tag%3A!@12345.txt");
+            try (FileWriter w = new FileWriter(f)) {
+                w.write(new char[1024]);
+            }
+
+            EntryFile e = new EntryFile(f, 1024);
+
+            assertEquals("tag:!", e.tag);
+            assertEquals(12345, e.timestampMillis);
+            assertEquals(DropBoxManager.IS_TEXT, e.flags);
+            assertEquals(1, e.blocks);
+
+            assertTrue(f.exists());
+        }
+        {
+            File f = new File(fromDir, "tag%3A!@12345.txt.gz");
+            try (FileWriter w = new FileWriter(f)) {
+                w.write(new char[1025]);
+            }
+
+            EntryFile e = new EntryFile(f, 1024);
+
+            assertEquals("tag:!", e.tag);
+            assertEquals(12345, e.timestampMillis);
+            assertEquals(DropBoxManager.IS_TEXT | DropBoxManager.IS_GZIPPED, e.flags);
+            assertEquals(2, e.blocks);
+
+            assertTrue(f.exists());
+        }
+        {
+            File f = new File(fromDir, "tag%3A!@12345.lost");
+            f.createNewFile();
+
+            EntryFile e = new EntryFile(f, 1024);
+
+            assertEquals("tag:!", e.tag);
+            assertEquals(12345, e.timestampMillis);
+            assertEquals(DropBoxManager.IS_EMPTY, e.flags);
+            assertEquals(0, e.blocks);
+
+            assertTrue(f.exists());
+        }
+        {
+            File f = new File(fromDir, "@12345.dat"); // Empty tag -- this actually works.
+            f.createNewFile();
+
+            EntryFile e = new EntryFile(f, 1024);
+
+            assertEquals("", e.tag);
+            assertEquals(12345, e.timestampMillis);
+            assertEquals(0, e.flags);
+            assertEquals(0, e.blocks);
+
+            assertTrue(f.exists());
+        }
+        // From invalid filenames.
+        {
+            File f = new File(fromDir, "tag.dat"); // No @.
+            f.createNewFile();
+
+            EntryFile e = new EntryFile(f, 1024);
+
+            assertEquals(null, e.tag);
+            assertEquals(0, e.timestampMillis);
+            assertEquals(DropBoxManager.IS_EMPTY, e.flags);
+            assertEquals(0, e.blocks);
+
+            assertFalse(f.exists());
+        }
+        {
+            File f = new File(fromDir, "tag@.dat"); // Invalid timestamp.
+            f.createNewFile();
+
+            EntryFile e = new EntryFile(f, 1024);
+
+            assertEquals(null, e.tag);
+            assertEquals(0, e.timestampMillis);
+            assertEquals(DropBoxManager.IS_EMPTY, e.flags);
+            assertEquals(0, e.blocks);
+
+            assertFalse(f.exists());
+        }
+        {
+            File f = new File(fromDir, "tag@12345.daxt"); // Invalid extension.
+            f.createNewFile();
+
+            EntryFile e = new EntryFile(f, 1024);
+
+            assertEquals(null, e.tag);
+            assertEquals(0, e.timestampMillis);
+            assertEquals(DropBoxManager.IS_EMPTY, e.flags);
+            assertEquals(0, e.blocks);
+
+            assertFalse(f.exists());
+        }
+    }
+
+    public void testCompareEntries() {
+        File dir = getEmptyDir("testCompareEntries");
+        assertEquals(-1,
+                new EntryFile(new File(dir, "aaa@100.dat"), 1).compareTo(
+                new EntryFile(new File(dir, "bbb@200.dat"), 1)));
+        assertEquals(1,
+                new EntryFile(new File(dir, "aaa@200.dat"), 1).compareTo(
+                new EntryFile(new File(dir, "bbb@100.dat"), 1)));
+        assertEquals(-1,
+                new EntryFile(new File(dir, "aaa@100.dat"), 1).compareTo(
+                new EntryFile(new File(dir, "bbb@100.dat"), 1)));
+        assertEquals(1,
+                new EntryFile(new File(dir, "bbb@100.dat"), 1).compareTo(
+                new EntryFile(new File(dir, "aaa@100.dat"), 1)));
+    }
+
     private void addRandomEntry(DropBoxManager dropbox, String tag, int size) throws Exception {
         byte[] bytes = new byte[size];
         new Random(System.currentTimeMillis()).nextBytes(bytes);
diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
index ad8303a..8decb96 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
@@ -24,27 +24,24 @@
 import static android.net.NetworkPolicyManager.POLICY_ALLOW_METERED_BACKGROUND;
 import static android.net.NetworkPolicyManager.POLICY_NONE;
 import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
-import static android.net.NetworkPolicyManager.computeLastCycleBoundary;
-import static android.net.NetworkPolicyManager.computeNextCycleBoundary;
 import static android.net.NetworkPolicyManager.uidPoliciesToString;
 import static android.net.NetworkTemplate.buildTemplateMobileAll;
 import static android.net.TrafficStats.KB_IN_BYTES;
 import static android.net.TrafficStats.MB_IN_BYTES;
 import static android.telephony.CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED;
-import static android.telephony.CarrierConfigManager.DATA_CYCLE_USE_PLATFORM_DEFAULT;
 import static android.telephony.CarrierConfigManager.DATA_CYCLE_THRESHOLD_DISABLED;
+import static android.telephony.CarrierConfigManager.DATA_CYCLE_USE_PLATFORM_DEFAULT;
 import static android.telephony.CarrierConfigManager.KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG;
 import static android.telephony.CarrierConfigManager.KEY_DATA_WARNING_THRESHOLD_BYTES_LONG;
 import static android.telephony.CarrierConfigManager.KEY_MONTHLY_DATA_CYCLE_DAY_INT;
-import static android.text.format.DateUtils.DAY_IN_MILLIS;
 import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
 import static android.text.format.Time.TIMEZONE_UTC;
 
 import static com.android.server.net.NetworkPolicyManagerService.MAX_PROC_STATE_SEQ_HISTORY;
-import static com.android.server.net.NetworkPolicyManagerService.ProcStateSeqHistory;
 import static com.android.server.net.NetworkPolicyManagerService.TYPE_LIMIT;
 import static com.android.server.net.NetworkPolicyManagerService.TYPE_LIMIT_SNOOZED;
 import static com.android.server.net.NetworkPolicyManagerService.TYPE_WARNING;
+
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.junit.Assert.assertEquals;
@@ -53,22 +50,19 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Matchers.isA;
-import static org.mockito.Matchers.isNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isA;
+import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.Mockito.atLeast;
 import static org.mockito.Mockito.atLeastOnce;
 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.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;
 
@@ -116,14 +110,17 @@
 import android.text.TextUtils;
 import android.text.format.Time;
 import android.util.Log;
+import android.util.Pair;
+import android.util.RecurrenceRule;
 import android.util.TrustedTime;
 
-import com.android.internal.util.IndentingPrintWriter;
 import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.util.IndentingPrintWriter;
 import com.android.internal.util.test.BroadcastInterceptingContext;
 import com.android.internal.util.test.BroadcastInterceptingContext.FutureIntent;
 import com.android.server.net.NetworkPolicyManagerInternal;
 import com.android.server.net.NetworkPolicyManagerService;
+import com.android.server.net.NetworkPolicyManagerService.ProcStateSeqHistory;
 
 import libcore.io.IoUtils;
 import libcore.io.Streams;
@@ -132,7 +129,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.MethodRule;
@@ -156,8 +152,14 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
+import java.time.Clock;
+import java.time.Instant;
+import java.time.Period;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.util.Arrays;
 import java.util.Calendar;
+import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
@@ -393,6 +395,11 @@
         LocalServices.removeServiceForTest(UsageStatsManagerInternal.class);
     }
 
+    @After
+    public void resetClock() throws Exception {
+        RecurrenceRule.sClock = Clock.systemDefaultZone();
+    }
+
     @Test
     public void testTurnRestrictBackgroundOn() throws Exception {
         assertRestrictBackgroundOff(); // Sanity check.
@@ -778,6 +785,26 @@
         assertTrue(mService.isUidForeground(UID_B));
     }
 
+    private static long computeLastCycleBoundary(long currentTime, NetworkPolicy policy) {
+        RecurrenceRule.sClock = Clock.fixed(Instant.ofEpochMilli(currentTime),
+                ZoneId.systemDefault());
+        final Iterator<Pair<ZonedDateTime, ZonedDateTime>> it = policy.cycleIterator();
+        while (it.hasNext()) {
+            final Pair<ZonedDateTime, ZonedDateTime> cycle = it.next();
+            if (cycle.first.toInstant().toEpochMilli() < currentTime) {
+                return cycle.first.toInstant().toEpochMilli();
+            }
+        }
+        throw new IllegalStateException(
+                "Failed to find current cycle for " + policy + " at " + currentTime);
+    }
+
+    private static long computeNextCycleBoundary(long currentTime, NetworkPolicy policy) {
+        RecurrenceRule.sClock = Clock.fixed(Instant.ofEpochMilli(currentTime),
+                ZoneId.systemDefault());
+        return policy.cycleIterator().next().second.toInstant().toEpochMilli();
+    }
+
     @Test
     public void testLastCycleBoundaryThisMonth() throws Exception {
         // assume cycle day of "5th", which should be in same month
@@ -818,7 +845,7 @@
     public void testLastCycleBoundaryLastMonthFebruary() throws Exception {
         // assume cycle day of "30th" in february, which should clamp
         final long currentTime = parseTime("2007-03-14T00:00:00.000Z");
-        final long expectedCycle = parseTime("2007-02-28T23:59:59.000Z");
+        final long expectedCycle = parseTime("2007-02-28T23:59:59.999Z");
 
         final NetworkPolicy policy = new NetworkPolicy(
                 sTemplateWifi, 30, TIMEZONE_UTC, 1024L, 1024L, false);
@@ -842,9 +869,9 @@
 
         assertTimeEquals(parseTime("2007-01-29T00:00:00.000Z"),
                 computeNextCycleBoundary(parseTime("2007-01-14T00:00:00.000Z"), policy));
-        assertTimeEquals(parseTime("2007-02-28T23:59:59.000Z"),
+        assertTimeEquals(parseTime("2007-02-28T23:59:59.999Z"),
                 computeNextCycleBoundary(parseTime("2007-02-14T00:00:00.000Z"), policy));
-        assertTimeEquals(parseTime("2007-02-28T23:59:59.000Z"),
+        assertTimeEquals(parseTime("2007-02-28T23:59:59.999Z"),
                 computeLastCycleBoundary(parseTime("2007-03-14T00:00:00.000Z"), policy));
         assertTimeEquals(parseTime("2007-03-29T00:00:00.000Z"),
                 computeNextCycleBoundary(parseTime("2007-03-14T00:00:00.000Z"), policy));
@@ -869,38 +896,6 @@
     }
 
     @Test
-    public void testNextCycleSane() throws Exception {
-        final NetworkPolicy policy = new NetworkPolicy(
-                sTemplateWifi, 31, TIMEZONE_UTC, WARNING_DISABLED, LIMIT_DISABLED, false);
-        final LinkedHashSet<Long> seen = new LinkedHashSet<Long>();
-
-        // walk forwards, ensuring that cycle boundaries don't get stuck
-        long currentCycle = computeNextCycleBoundary(parseTime("2011-08-01T00:00:00.000Z"), policy);
-        for (int i = 0; i < 128; i++) {
-            long nextCycle = computeNextCycleBoundary(currentCycle, policy);
-            assertEqualsFuzzy(DAY_IN_MILLIS * 30, nextCycle - currentCycle, DAY_IN_MILLIS * 3);
-            assertUnique(seen, nextCycle);
-            currentCycle = nextCycle;
-        }
-    }
-
-    @Test
-    public void testLastCycleSane() throws Exception {
-        final NetworkPolicy policy = new NetworkPolicy(
-                sTemplateWifi, 31, TIMEZONE_UTC, WARNING_DISABLED, LIMIT_DISABLED, false);
-        final LinkedHashSet<Long> seen = new LinkedHashSet<Long>();
-
-        // walk backwards, ensuring that cycle boundaries look sane
-        long currentCycle = computeLastCycleBoundary(parseTime("2011-08-04T00:00:00.000Z"), policy);
-        for (int i = 0; i < 128; i++) {
-            long lastCycle = computeLastCycleBoundary(currentCycle, policy);
-            assertEqualsFuzzy(DAY_IN_MILLIS * 30, currentCycle - lastCycle, DAY_IN_MILLIS * 3);
-            assertUnique(seen, lastCycle);
-            currentCycle = lastCycle;
-        }
-    }
-
-    @Test
     public void testCycleTodayJanuary() throws Exception {
         final NetworkPolicy policy = new NetworkPolicy(
                 sTemplateWifi, 14, "US/Pacific", 1024L, 1024L, false);
@@ -921,37 +916,16 @@
     }
 
     @Test
-    public void testLastCycleBoundaryDST() throws Exception {
-        final long currentTime = parseTime("1989-01-02T07:30:00.000");
-        final long expectedCycle = parseTime("1988-12-03T02:00:00.000Z");
-
-        final NetworkPolicy policy = new NetworkPolicy(
-                sTemplateWifi, 3, "America/Argentina/Buenos_Aires", 1024L, 1024L, false);
-        final long actualCycle = computeLastCycleBoundary(currentTime, policy);
-        assertTimeEquals(expectedCycle, actualCycle);
-    }
-
-    @Test
-    public void testLastCycleBoundaryJanuaryDST() throws Exception {
-        final long currentTime = parseTime("1989-01-26T21:00:00.000Z");
-        final long expectedCycle = parseTime("1989-01-01T01:59:59.000Z");
-
-        final NetworkPolicy policy = new NetworkPolicy(
-                sTemplateWifi, 32, "America/Argentina/Buenos_Aires", 1024L, 1024L, false);
-        final long actualCycle = computeLastCycleBoundary(currentTime, policy);
-        assertTimeEquals(expectedCycle, actualCycle);
-    }
-
-    @Test
     public void testNetworkPolicyAppliedCycleLastMonth() throws Exception {
         NetworkState[] state = null;
         NetworkStats stats = null;
 
-        final long TIME_FEB_15 = 1171497600000L;
-        final long TIME_MAR_10 = 1173484800000L;
         final int CYCLE_DAY = 15;
+        final long NOW = parseTime("2007-03-10T00:00Z");
+        final long CYCLE_START = parseTime("2007-02-15T00:00Z");
+        final long CYCLE_END = parseTime("2007-03-15T00:00Z");
 
-        setCurrentTimeMillis(TIME_MAR_10);
+        setCurrentTimeMillis(NOW);
 
         // first, pretend that wifi network comes online. no policy active,
         // which means we shouldn't push limit to interface.
@@ -971,7 +945,7 @@
         // pretend that 512 bytes total have happened
         stats = new NetworkStats(getElapsedRealtime(), 1)
                 .addIfaceValues(TEST_IFACE, 256L, 2L, 256L, 2L);
-        when(mStatsService.getNetworkTotalBytes(sTemplateWifi, TIME_FEB_15, TIME_MAR_10))
+        when(mStatsService.getNetworkTotalBytes(sTemplateWifi, CYCLE_START, CYCLE_END))
                 .thenReturn(stats.getTotalBytes());
 
         mPolicyListener.expect().onMeteredIfacesChanged(any());
@@ -991,11 +965,12 @@
         NetworkStats stats = null;
         Future<String> tagFuture = null;
 
-        final long TIME_FEB_15 = 1171497600000L;
-        final long TIME_MAR_10 = 1173484800000L;
         final int CYCLE_DAY = 15;
+        final long NOW = parseTime("2007-03-10T00:00Z");
+        final long CYCLE_START = parseTime("2007-02-15T00:00Z");
+        final long CYCLE_END = parseTime("2007-03-15T00:00Z");
 
-        setCurrentTimeMillis(TIME_MAR_10);
+        setCurrentTimeMillis(NOW);
 
         // assign wifi policy
         state = new NetworkState[] {};
@@ -1005,8 +980,8 @@
         {
             expectCurrentTime();
             when(mConnManager.getAllNetworkState()).thenReturn(state);
-            when(mStatsService.getNetworkTotalBytes(sTemplateWifi, TIME_FEB_15,
-                    currentTimeMillis())).thenReturn(stats.getTotalBytes());
+            when(mStatsService.getNetworkTotalBytes(sTemplateWifi, CYCLE_START,
+                    CYCLE_END)).thenReturn(stats.getTotalBytes());
 
             mPolicyListener.expect().onMeteredIfacesChanged(any());
             setNetworkPolicies(new NetworkPolicy(sTemplateWifi, CYCLE_DAY, TIMEZONE_UTC, 1
@@ -1024,8 +999,8 @@
         {
             expectCurrentTime();
             when(mConnManager.getAllNetworkState()).thenReturn(state);
-            when(mStatsService.getNetworkTotalBytes(sTemplateWifi, TIME_FEB_15,
-                    currentTimeMillis())).thenReturn(stats.getTotalBytes());
+            when(mStatsService.getNetworkTotalBytes(sTemplateWifi, CYCLE_START,
+                    CYCLE_END)).thenReturn(stats.getTotalBytes());
 
             mPolicyListener.expect().onMeteredIfacesChanged(any());
             mServiceContext.sendBroadcast(new Intent(CONNECTIVITY_ACTION));
@@ -1043,8 +1018,8 @@
 
         {
             expectCurrentTime();
-            when(mStatsService.getNetworkTotalBytes(sTemplateWifi, TIME_FEB_15,
-                    currentTimeMillis())).thenReturn(stats.getTotalBytes());
+            when(mStatsService.getNetworkTotalBytes(sTemplateWifi, CYCLE_START,
+                    CYCLE_END)).thenReturn(stats.getTotalBytes());
             tagFuture = expectEnqueueNotification();
 
             mNetworkObserver.limitReached(null, TEST_IFACE);
@@ -1061,8 +1036,8 @@
 
         {
             expectCurrentTime();
-            when(mStatsService.getNetworkTotalBytes(sTemplateWifi, TIME_FEB_15,
-                    currentTimeMillis())).thenReturn(stats.getTotalBytes());
+            when(mStatsService.getNetworkTotalBytes(sTemplateWifi, CYCLE_START,
+                    CYCLE_END)).thenReturn(stats.getTotalBytes());
             tagFuture = expectEnqueueNotification();
 
             mNetworkObserver.limitReached(null, TEST_IFACE);
@@ -1077,8 +1052,8 @@
         {
             expectCurrentTime();
             when(mConnManager.getAllNetworkState()).thenReturn(state);
-            when(mStatsService.getNetworkTotalBytes(sTemplateWifi, TIME_FEB_15,
-                    currentTimeMillis())).thenReturn(stats.getTotalBytes());
+            when(mStatsService.getNetworkTotalBytes(sTemplateWifi, CYCLE_START,
+                    CYCLE_END)).thenReturn(stats.getTotalBytes());
             tagFuture = expectEnqueueNotification();
 
             mPolicyListener.expect().onMeteredIfacesChanged(any());
@@ -1447,7 +1422,9 @@
     private NetworkPolicy buildDefaultFakeMobilePolicy() {
         NetworkPolicy p = mService.buildDefaultMobilePolicy(FAKE_SUB_ID, FAKE_SUBSCRIBER_ID);
         // set a deterministic cycle date
-        p.cycleDay = DEFAULT_CYCLE_DAY;
+        p.cycleRule = new RecurrenceRule(
+                p.cycleRule.start.withDayOfMonth(DEFAULT_CYCLE_DAY),
+                p.cycleRule.end, Period.ofMonths(1));
         return p;
     }
 
@@ -1470,9 +1447,7 @@
     }
 
     private static long parseTime(String time) {
-        final Time result = new Time();
-        result.parse3339(time);
-        return result.toMillis(true);
+        return ZonedDateTime.parse(time).toInstant().toEpochMilli();
     }
 
     private void setNetworkPolicies(NetworkPolicy... policies) {
@@ -1559,16 +1534,15 @@
     }
 
     private static String formatTime(long millis) {
-        final Time time = new Time(Time.TIMEZONE_UTC);
-        time.set(millis);
-        return time.format3339(false);
+        return Instant.ofEpochMilli(millis) + " [" + millis + "]";
     }
 
     private static void assertEqualsFuzzy(long expected, long actual, long fuzzy) {
         final long low = expected - fuzzy;
         final long high = expected + fuzzy;
         if (actual < low || actual > high) {
-            fail("value " + actual + " is outside [" + low + "," + high + "]");
+            fail("value " + formatTime(actual) + " is outside [" + formatTime(low) + ","
+                    + formatTime(high) + "]");
         }
     }
 
@@ -1643,6 +1617,8 @@
     }
 
     private void setCurrentTimeMillis(long currentTimeMillis) {
+        RecurrenceRule.sClock = Clock.fixed(Instant.ofEpochMilli(currentTimeMillis),
+                ZoneId.systemDefault());
         mStartTime = currentTimeMillis;
         mElapsedRealtime = 0L;
     }
diff --git a/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java
index bb7e20b..be6a1a5 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java
@@ -56,13 +56,11 @@
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiSsid;
 import android.os.Binder;
-import android.os.Bundle;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
-import android.os.RemoteCallback;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.support.test.InstrumentationRegistry;
@@ -518,6 +516,49 @@
     }
 
     @Test
+    public void testGetActiveScorerPackage_missingRequiredPermissions() throws Exception {
+        when(mContext.checkCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES))
+                .thenReturn(PackageManager.PERMISSION_DENIED);
+        when(mContext.checkCallingOrSelfPermission(permission.SCORE_NETWORKS))
+                .thenReturn(PackageManager.PERMISSION_DENIED);
+
+        try {
+            mNetworkScoreService.getActiveScorerPackage();
+            fail("SecurityException expected");
+        } catch (SecurityException e) {
+            // expected
+        }
+    }
+
+    @Test
+    public void testGetActiveScorerPackage_noRequestScoresPermission() throws Exception {
+        when(mContext.checkCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES))
+                .thenReturn(PackageManager.PERMISSION_DENIED);
+        when(mContext.checkCallingOrSelfPermission(permission.SCORE_NETWORKS))
+                .thenReturn(PackageManager.PERMISSION_GRANTED);
+
+        try {
+            mNetworkScoreService.getActiveScorerPackage();
+        } catch (SecurityException e) {
+            fail("Unexpected SecurityException");
+        }
+    }
+
+    @Test
+    public void testGetActiveScorerPackage_noScoreNetworksPermission() throws Exception {
+        when(mContext.checkCallingOrSelfPermission(permission.REQUEST_NETWORK_SCORES))
+                .thenReturn(PackageManager.PERMISSION_GRANTED);
+        when(mContext.checkCallingOrSelfPermission(permission.SCORE_NETWORKS))
+                .thenReturn(PackageManager.PERMISSION_DENIED);
+
+        try {
+            mNetworkScoreService.getActiveScorerPackage();
+        } catch (SecurityException e) {
+            fail("Unexpected SecurityException");
+        }
+    }
+
+    @Test
     public void testCacheUpdatingConsumer_nullFilter() throws Exception {
         List<ScoredNetwork> scoredNetworkList = Lists.newArrayList(SCORED_NETWORK);
         NetworkScoreService.FilteringCacheUpdatingConsumer consumer =
diff --git a/services/tests/servicestests/src/com/android/server/NetworkScorerAppManagerTest.java b/services/tests/servicestests/src/com/android/server/NetworkScorerAppManagerTest.java
index ceb92de..82ff0d8 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkScorerAppManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkScorerAppManagerTest.java
@@ -31,6 +31,7 @@
 import static org.mockito.Mockito.when;
 
 import android.Manifest.permission;
+import android.app.AppOpsManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -61,15 +62,18 @@
 
 @RunWith(AndroidJUnit4.class)
 public class NetworkScorerAppManagerTest {
+    private static final int PACKAGE_UID = 924;
     private static String MOCK_SERVICE_LABEL = "Mock Service";
     private static String MOCK_OVERRIDEN_SERVICE_LABEL = "Mock Service Label Override";
     private static String MOCK_NETWORK_AVAILABLE_NOTIFICATION_CHANNEL_ID =
             "Mock Network Available Notification Channel Id";
+    private static final ComponentName RECO_COMPONENT = new ComponentName("package1", "class1");
 
     @Mock private Context mMockContext;
     @Mock private PackageManager mMockPm;
     @Mock private Resources mResources;
     @Mock private NetworkScorerAppManager.SettingsFacade mSettingsFacade;
+    @Mock private AppOpsManager mAppOpsManager;
     private NetworkScorerAppManager mNetworkScorerAppManager;
     private List<ResolveInfo> mAvailableServices;
 
@@ -86,45 +90,69 @@
             }
         }), eq(PackageManager.GET_META_DATA))).thenReturn(mAvailableServices);
         when(mMockContext.getResources()).thenReturn(mResources);
+        when(mMockContext.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManager);
+
+        mockLocationModeOn();
+        mockLocationPermissionGranted(PACKAGE_UID, RECO_COMPONENT.getPackageName());
 
         mNetworkScorerAppManager = new NetworkScorerAppManager(mMockContext, mSettingsFacade);
     }
 
     @Test
     public void testGetActiveScorer_providerAvailable() throws Exception {
-        final ComponentName recoComponent = new ComponentName("package1", "class1");
-        setNetworkRecoPackageSetting(recoComponent.getPackageName());
-        mockScoreNetworksGranted(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */);
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */);
 
         final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
         assertNotNull(activeScorer);
-        assertEquals(recoComponent, activeScorer.getRecommendationServiceComponent());
-        assertEquals(924, activeScorer.packageUid);
+        assertEquals(RECO_COMPONENT, activeScorer.getRecommendationServiceComponent());
+        assertEquals(PACKAGE_UID, activeScorer.packageUid);
         assertEquals(MOCK_SERVICE_LABEL, activeScorer.getRecommendationServiceLabel());
     }
 
     @Test
     public void testGetActiveScorer_providerAvailable_serviceLabelOverride() throws Exception {
-        final ComponentName recoComponent = new ComponentName("package1", "class1");
-        setNetworkRecoPackageSetting(recoComponent.getPackageName());
-        mockScoreNetworksGranted(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */,
                 null /* enableUseOpenWifiPackageActivityPackage*/, true /* serviceLabelOverride */);
 
         final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
         assertNotNull(activeScorer);
-        assertEquals(recoComponent, activeScorer.getRecommendationServiceComponent());
-        assertEquals(924, activeScorer.packageUid);
+        assertEquals(RECO_COMPONENT, activeScorer.getRecommendationServiceComponent());
+        assertEquals(PACKAGE_UID, activeScorer.packageUid);
         assertEquals(MOCK_OVERRIDEN_SERVICE_LABEL, activeScorer.getRecommendationServiceLabel());
     }
 
     @Test
-    public void testGetActiveScorer_permissionMissing() throws Exception {
-        final ComponentName recoComponent = new ComponentName("package1", "class1");
-        setNetworkRecoPackageSetting(recoComponent.getPackageName());
-        mockScoreNetworksDenied(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */);
+    public void testGetActiveScorer_scoreNetworksPermissionMissing() throws Exception {
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksDenied(RECO_COMPONENT.getPackageName());
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */);
+
+        final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
+        assertNull(activeScorer);
+    }
+
+    @Test
+    public void testGetActiveScorer_locationPermissionMissing() throws Exception {
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
+        mockLocationPermissionDenied(PACKAGE_UID, RECO_COMPONENT.getPackageName());
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */);
+
+        final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
+        assertNull(activeScorer);
+    }
+
+    @Test
+    public void testGetActiveScorer_locationModeOff() throws Exception {
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
+        mockLocationPermissionGranted(PACKAGE_UID, RECO_COMPONENT.getPackageName());
+        mockLocationModeOff();
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */);
 
         final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
         assertNull(activeScorer);
@@ -133,67 +161,63 @@
     @Test
     public void testGetActiveScorer_providerAvailable_enableUseOpenWifiActivityNotSet()
             throws Exception {
-        final ComponentName recoComponent = new ComponentName("package1", "class1");
-        setNetworkRecoPackageSetting(recoComponent.getPackageName());
-        mockScoreNetworksGranted(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */,
                 null /* enableUseOpenWifiPackageActivityPackage*/);
 
         final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
         assertNotNull(activeScorer);
-        assertEquals(recoComponent, activeScorer.getRecommendationServiceComponent());
-        assertEquals(924, activeScorer.packageUid);
+        assertEquals(RECO_COMPONENT, activeScorer.getRecommendationServiceComponent());
+        assertEquals(PACKAGE_UID, activeScorer.packageUid);
         assertNull(activeScorer.getEnableUseOpenWifiActivity());
     }
 
     @Test
     public void testGetActiveScorer_providerAvailable_enableUseOpenWifiActivityNotResolved()
             throws Exception {
-        final ComponentName recoComponent = new ComponentName("package1", "class1");
-        setNetworkRecoPackageSetting(recoComponent.getPackageName());
-        mockScoreNetworksGranted(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */,
                 "package2" /* enableUseOpenWifiPackageActivityPackage*/);
 
         final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
         assertNotNull(activeScorer);
-        assertEquals(recoComponent, activeScorer.getRecommendationServiceComponent());
-        assertEquals(924, activeScorer.packageUid);
+        assertEquals(RECO_COMPONENT, activeScorer.getRecommendationServiceComponent());
+        assertEquals(PACKAGE_UID, activeScorer.packageUid);
         assertNull(activeScorer.getEnableUseOpenWifiActivity());
     }
 
     @Test
     public void testGetActiveScorer_providerAvailable_enableUseOpenWifiActivityResolved()
             throws Exception {
-        final ComponentName recoComponent = new ComponentName("package1", "class1");
         final ComponentName enableUseOpenWifiComponent = new ComponentName("package2", "class2");
-        setNetworkRecoPackageSetting(recoComponent.getPackageName());
-        mockScoreNetworksGranted(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */,
                 enableUseOpenWifiComponent.getPackageName());
         mockEnableUseOpenWifiActivity(enableUseOpenWifiComponent);
 
         final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
         assertNotNull(activeScorer);
-        assertEquals(recoComponent, activeScorer.getRecommendationServiceComponent());
-        assertEquals(924, activeScorer.packageUid);
+        assertEquals(RECO_COMPONENT, activeScorer.getRecommendationServiceComponent());
+        assertEquals(PACKAGE_UID, activeScorer.packageUid);
         assertEquals(enableUseOpenWifiComponent, activeScorer.getEnableUseOpenWifiActivity());
         assertNull(activeScorer.getNetworkAvailableNotificationChannelId());
     }
 
     @Test
     public void testGetActiveScorer_providerAvailable_networkAvailableNotificationChannelIdSet() {
-        final ComponentName recoComponent = new ComponentName("package1", "class1");
-        setNetworkRecoPackageSetting(recoComponent.getPackageName());
-        mockScoreNetworksGranted(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */,
                 null /* enableUseOpenWifiActivityPackage */, false /* serviceLabelOverride */,
                 true /* setNotificationChannelId */);
 
         final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
         assertNotNull(activeScorer);
-        assertEquals(recoComponent, activeScorer.getRecommendationServiceComponent());
-        assertEquals(924, activeScorer.packageUid);
+        assertEquals(RECO_COMPONENT, activeScorer.getRecommendationServiceComponent());
+        assertEquals(PACKAGE_UID, activeScorer.packageUid);
         assertEquals(MOCK_NETWORK_AVAILABLE_NOTIFICATION_CHANNEL_ID,
                 activeScorer.getNetworkAvailableNotificationChannelId());
     }
@@ -209,9 +233,8 @@
 
     @Test
     public void testGetActiveScorer_packageSettingIsInvalid() throws Exception {
-        final ComponentName recoComponent = new ComponentName("package1", "class1");
-        setDefaultNetworkRecommendationPackage(recoComponent.getPackageName());
-        mockScoreNetworksGranted(recoComponent.getPackageName());
+        setDefaultNetworkRecommendationPackage(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
         // NETWORK_RECOMMENDATIONS_PACKAGE is set to a package that isn't a recommender.
 
         final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
@@ -249,12 +272,12 @@
 
     @Test
     public void testSetActiveScorer_validPackage() throws Exception {
-        String packageName = "package";
         String newPackage = "newPackage";
-        setNetworkRecoPackageSetting(packageName);
+        int newAppUid = 621;
         final ComponentName recoComponent = new ComponentName(newPackage, "class1");
         mockScoreNetworksGranted(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */, null);
+        mockRecommendationServiceAvailable(recoComponent, newAppUid, null);
+        mockLocationPermissionGranted(newAppUid, recoComponent.getPackageName());
 
         assertTrue(mNetworkScorerAppManager.setActiveScorer(newPackage));
         verify(mSettingsFacade).putString(mMockContext,
@@ -289,11 +312,9 @@
 
     @Test
     public void testUpdateState_currentPackageValid() throws Exception {
-        String packageName = "package";
-        setNetworkRecoPackageSetting(packageName);
-        final ComponentName recoComponent = new ComponentName(packageName, "class1");
-        mockScoreNetworksGranted(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */, null);
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID , null);
 
         mNetworkScorerAppManager.updateState();
 
@@ -306,11 +327,13 @@
 
     @Test
     public void testUpdateState_currentPackageNotValid_validDefault() throws Exception {
-        String defaultPackage = "defaultPackage";
-        setDefaultNetworkRecommendationPackage(defaultPackage);
+        final String defaultPackage = "defaultPackage";
+        final int defaultAppUid = 621;
         final ComponentName recoComponent = new ComponentName(defaultPackage, "class1");
+        setDefaultNetworkRecommendationPackage(defaultPackage);
         mockScoreNetworksGranted(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */, null);
+        mockRecommendationServiceAvailable(recoComponent, defaultAppUid, null);
+        mockLocationPermissionGranted(defaultAppUid, defaultPackage);
 
         mNetworkScorerAppManager.updateState();
 
@@ -329,8 +352,6 @@
 
         mNetworkScorerAppManager.updateState();
 
-        verify(mSettingsFacade).putString(mMockContext,
-                Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE, defaultPackage);
         verify(mSettingsFacade).putInt(mMockContext,
                 Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED,
                 NetworkScoreManager.RECOMMENDATIONS_ENABLED_OFF);
@@ -345,8 +366,9 @@
 
         verify(mSettingsFacade, never()).putString(any(),
                 eq(Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE), anyString());
-        verify(mSettingsFacade, never()).putInt(any(),
-                eq(Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED), anyInt());
+        verify(mSettingsFacade).putInt(mMockContext,
+                Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED,
+                NetworkScoreManager.RECOMMENDATIONS_ENABLED_OFF);
     }
 
     @Test
@@ -358,8 +380,9 @@
 
         verify(mSettingsFacade, never()).putString(any(),
                 eq(Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE), anyString());
-        verify(mSettingsFacade, never()).putInt(any(),
-                eq(Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED), anyInt());
+        verify(mSettingsFacade).putInt(mMockContext,
+                Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED,
+                NetworkScoreManager.RECOMMENDATIONS_ENABLED_OFF);
     }
 
     @Test
@@ -370,8 +393,9 @@
 
         mNetworkScorerAppManager.updateState();
 
-        verify(mSettingsFacade, never()).putString(any(),
-                eq(Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE), any());
+        verify(mSettingsFacade).putInt(mMockContext,
+                Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED,
+                NetworkScoreManager.RECOMMENDATIONS_ENABLED_OFF);
     }
 
     @Test
@@ -415,11 +439,10 @@
     @Test
     public void testMigrateNetworkScorerAppSettingIfNeeded_useOpenWifiSettingIsNotEmpty()
             throws Exception {
-        final ComponentName recoComponent = new ComponentName("package1", "class1");
         final ComponentName enableUseOpenWifiComponent = new ComponentName("package2", "class2");
-        setNetworkRecoPackageSetting(recoComponent.getPackageName());
-        mockScoreNetworksGranted(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */,
                 enableUseOpenWifiComponent.getPackageName());
         mockEnableUseOpenWifiActivity(enableUseOpenWifiComponent);
         when(mSettingsFacade.getString(mMockContext,
@@ -441,13 +464,12 @@
     @Test
     public void testMigrateNetworkScorerAppSettingIfNeeded_useOpenWifiActivityNotAvail()
             throws Exception {
-        final ComponentName recoComponent = new ComponentName("package1", "class1");
         final ComponentName enableUseOpenWifiComponent = new ComponentName("package2", "class2");
-        setNetworkRecoPackageSetting(recoComponent.getPackageName());
-        mockScoreNetworksGranted(recoComponent.getPackageName());
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
         // The active component doesn't have an open wifi activity so the migration shouldn't
         // set USE_OPEN_WIFI_PACKAGE.
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */,
                 null /*useOpenWifiActivityPackage*/);
         when(mSettingsFacade.getString(mMockContext,
                 Settings.Global.NETWORK_SCORER_APP))
@@ -466,11 +488,10 @@
     @Test
     public void testMigrateNetworkScorerAppSettingIfNeeded_packageMismatch_activity()
             throws Exception {
-        final ComponentName recoComponent = new ComponentName("package1", "class1");
         final ComponentName enableUseOpenWifiComponent = new ComponentName("package2", "class2");
-        setNetworkRecoPackageSetting(recoComponent.getPackageName());
-        mockScoreNetworksGranted(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */,
                 enableUseOpenWifiComponent.getPackageName());
         mockEnableUseOpenWifiActivity(enableUseOpenWifiComponent);
         // The older network scorer app setting doesn't match the new use open wifi activity package
@@ -492,18 +513,17 @@
     @Test
     public void testMigrateNetworkScorerAppSettingIfNeeded_packageMismatch_service()
             throws Exception {
-        final ComponentName recoComponent = new ComponentName("package1", "class1");
         final ComponentName enableUseOpenWifiComponent = new ComponentName("package2", "class2");
-        setNetworkRecoPackageSetting(recoComponent.getPackageName());
-        mockScoreNetworksGranted(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */,
                 enableUseOpenWifiComponent.getPackageName());
         mockEnableUseOpenWifiActivity(enableUseOpenWifiComponent);
         // The older network scorer app setting doesn't match the active package so the migration
         // shouldn't set USE_OPEN_WIFI_PACKAGE.
         when(mSettingsFacade.getString(mMockContext,
                 Settings.Global.NETWORK_SCORER_APP))
-                .thenReturn(recoComponent.getPackageName() + ".diff");
+                .thenReturn(RECO_COMPONENT.getPackageName() + ".diff");
         when(mSettingsFacade.getString(mMockContext,
                 Settings.Global.USE_OPEN_WIFI_PACKAGE)).thenReturn(null);
 
@@ -518,11 +538,10 @@
     @Test
     public void testMigrateNetworkScorerAppSettingIfNeeded_packageMatch_activity()
             throws Exception {
-        final ComponentName recoComponent = new ComponentName("package1", "class1");
         final ComponentName enableUseOpenWifiComponent = new ComponentName("package2", "class2");
-        setNetworkRecoPackageSetting(recoComponent.getPackageName());
-        mockScoreNetworksGranted(recoComponent.getPackageName());
-        mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
+        setNetworkRecoPackageSetting(RECO_COMPONENT.getPackageName());
+        mockScoreNetworksGranted(RECO_COMPONENT.getPackageName());
+        mockRecommendationServiceAvailable(RECO_COMPONENT, PACKAGE_UID /* packageUid */,
                 enableUseOpenWifiComponent.getPackageName());
         mockEnableUseOpenWifiActivity(enableUseOpenWifiComponent);
         // Old setting matches the new activity package, migration should happen.
@@ -566,6 +585,33 @@
                 .thenReturn(PackageManager.PERMISSION_DENIED);
     }
 
+    private void mockLocationModeOn() {
+        mockLocationModeValue(Settings.Secure.LOCATION_MODE_HIGH_ACCURACY);
+    }
+
+    private void mockLocationModeOff() {
+        mockLocationModeValue(Settings.Secure.LOCATION_MODE_OFF);
+    }
+
+    private void mockLocationModeValue(int returnVal) {
+        when(mSettingsFacade.getSecureInt(eq(mMockContext),
+                eq(Settings.Secure.LOCATION_MODE), anyInt())).thenReturn(returnVal);
+    }
+
+    private void mockLocationPermissionGranted(int uid, String packageName) {
+        when(mMockPm.checkPermission(permission.ACCESS_COARSE_LOCATION, packageName))
+                .thenReturn(PackageManager.PERMISSION_GRANTED);
+        when(mAppOpsManager.noteOp(AppOpsManager.OP_COARSE_LOCATION, uid, packageName))
+                .thenReturn(AppOpsManager.MODE_ALLOWED);
+    }
+
+    private void mockLocationPermissionDenied(int uid, String packageName) {
+        when(mMockPm.checkPermission(permission.ACCESS_COARSE_LOCATION, packageName))
+                .thenReturn(PackageManager.PERMISSION_DENIED);
+        when(mAppOpsManager.noteOp(AppOpsManager.OP_COARSE_LOCATION, uid, packageName))
+                .thenReturn(AppOpsManager.MODE_IGNORED);
+    }
+
     private void mockRecommendationServiceAvailable(final ComponentName compName, int packageUid) {
         mockRecommendationServiceAvailable(compName, packageUid, null, false);
     }
diff --git a/services/tests/servicestests/src/com/android/server/NightDisplayServiceTest.java b/services/tests/servicestests/src/com/android/server/NightDisplayServiceTest.java
index 58a4456..3a92d63 100644
--- a/services/tests/servicestests/src/com/android/server/NightDisplayServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NightDisplayServiceTest.java
@@ -30,13 +30,14 @@
 import android.test.mock.MockContentResolver;
 
 import com.android.internal.app.NightDisplayController;
-import com.android.internal.app.NightDisplayController.LocalTime;
 import com.android.internal.util.test.FakeSettingsProvider;
 import com.android.server.display.DisplayTransformManager;
 import com.android.server.display.NightDisplayService;
 import com.android.server.twilight.TwilightListener;
 import com.android.server.twilight.TwilightManager;
 import com.android.server.twilight.TwilightState;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -45,6 +46,7 @@
 
 import java.util.Calendar;
 import java.util.HashMap;
+import java.time.LocalTime;
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -926,11 +928,10 @@
      */
     private void setActivated(boolean activated, int lastActivatedTimeOffset) {
         mNightDisplayController.setActivated(activated);
-
-        final Calendar c = Calendar.getInstance();
-        c.add(Calendar.MINUTE, lastActivatedTimeOffset);
-        Secure.putLongForUser(mContext.getContentResolver(),
-                Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, c.getTimeInMillis(), mUserId);
+        Secure.putStringForUser(mContext.getContentResolver(),
+                Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME,
+                LocalDateTime.now().plusMinutes(lastActivatedTimeOffset).toString(),
+                mUserId);
     }
 
     /**
@@ -969,7 +970,7 @@
     private static LocalTime getLocalTimeRelativeToNow(int offsetMinutes) {
         final Calendar c = Calendar.getInstance();
         c.add(Calendar.MINUTE, offsetMinutes);
-        return new LocalTime(c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE));
+        return LocalTime.of(c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE));
     }
 
     /**
@@ -984,13 +985,27 @@
         final LocalTime sunset = getLocalTimeRelativeToNow(sunsetOffset);
         final LocalTime sunrise = getLocalTimeRelativeToNow(sunriseOffset);
 
-        final Calendar now = Calendar.getInstance();
-        long sunsetMillis = sunset.getDateTimeBefore(now).getTimeInMillis();
-        long sunriseMillis = sunrise.getDateTimeBefore(now).getTimeInMillis();
+        final LocalDateTime now = LocalDateTime.now();
+        final ZoneId zoneId = ZoneId.systemDefault();
+
+        long sunsetMillis = NightDisplayService.getDateTimeBefore(sunset, now)
+                .atZone(zoneId)
+                .toInstant()
+                .toEpochMilli();
+        long sunriseMillis = NightDisplayService.getDateTimeBefore(sunrise, now)
+                .atZone(zoneId)
+                .toInstant()
+                .toEpochMilli();
         if (sunsetMillis < sunriseMillis) {
-            sunsetMillis = sunset.getDateTimeAfter(now).getTimeInMillis();
+            sunsetMillis = NightDisplayService.getDateTimeAfter(sunset, now)
+                    .atZone(zoneId)
+                    .toInstant()
+                    .toEpochMilli();
         } else {
-            sunriseMillis = sunrise.getDateTimeAfter(now).getTimeInMillis();
+            sunriseMillis = NightDisplayService.getDateTimeAfter(sunrise, now)
+                    .atZone(zoneId)
+                    .toInstant()
+                    .toEpochMilli();
         }
 
         return new TwilightState(sunriseMillis, sunsetMillis);
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityCacheTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityCacheTest.java
index 02f645a..c8dc9ff 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityCacheTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityCacheTest.java
@@ -77,7 +77,6 @@
         mAccessibilityCache.clear();
         AccessibilityInteractionClient.getInstance().clearCache();
         assertEquals(0, numA11yWinInfosInUse.get());
-        assertEquals(0, numA11yNodeInfosInUse.get());
     }
 
     @Test
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityNodeInfoTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityNodeInfoTest.java
new file mode 100644
index 0000000..7f97973
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityNodeInfoTest.java
@@ -0,0 +1,63 @@
+package com.android.server.accessibility;
+
+import static org.junit.Assert.fail;
+
+import android.support.test.runner.AndroidJUnit4;
+import android.util.ArraySet;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
+
+import com.android.internal.util.CollectionUtils;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+
+@RunWith(AndroidJUnit4.class)
+public class AccessibilityNodeInfoTest {
+
+    @Test
+    public void testStandardActions_serializationFlagIsValid() {
+        AccessibilityAction brokenStandardAction = CollectionUtils.find(
+                new ArrayList<>(AccessibilityAction.sStandardActions),
+                action -> Integer.bitCount(action.mSerializationFlag) != 1);
+        if (brokenStandardAction != null) {
+            String message = "Invalid serialization flag(0x"
+                    + Integer.toHexString(brokenStandardAction.mSerializationFlag)
+                    + ") in " + brokenStandardAction;
+            if (brokenStandardAction.mSerializationFlag == 0L) {
+                message += "\nThis is likely due to an overflow";
+            }
+            fail(message);
+        }
+
+        brokenStandardAction = CollectionUtils.find(
+                new ArrayList<>(AccessibilityAction.sStandardActions),
+                action -> Integer.bitCount(action.getId()) == 1
+                        && action.getId() <= AccessibilityNodeInfo.LAST_LEGACY_STANDARD_ACTION
+                        && action.getId() != action.mSerializationFlag);
+        if (brokenStandardAction != null) {
+            fail("Serialization flag(0x"
+                    + Integer.toHexString(brokenStandardAction.mSerializationFlag)
+                    + ") is different from legacy action id(0x"
+                    + Integer.toHexString(brokenStandardAction.getId())
+                    + ") in " + brokenStandardAction);
+        }
+    }
+
+    @Test
+    public void testStandardActions_idsAreUnique() {
+        ArraySet<AccessibilityAction> actions = AccessibilityAction.sStandardActions;
+        for (int i = 0; i < actions.size(); i++) {
+            for (int j = 0; j < i; j++) {
+                int id = actions.valueAt(i).getId();
+                if (id == actions.valueAt(j).getId()) {
+                    fail("Id 0x" + Integer.toHexString(id)
+                            + " is duplicated for standard actions #" + i + " and #" + j);
+                }
+            }
+        }
+    }
+
+}
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/KeyboardInterceptorTest.java b/services/tests/servicestests/src/com/android/server/accessibility/KeyboardInterceptorTest.java
new file mode 100644
index 0000000..5db397f
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/accessibility/KeyboardInterceptorTest.java
@@ -0,0 +1,218 @@
+/*
+ * 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.accessibility;
+
+import static junit.framework.Assert.assertTrue;
+
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertFalse;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.isNull;
+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 static org.mockito.hamcrest.MockitoHamcrest.argThat;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.TypeSafeMatcher;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InOrder;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import android.os.Looper;
+import android.support.test.runner.AndroidJUnit4;
+import android.view.KeyEvent;
+import android.view.WindowManagerPolicy;
+import android.view.WindowManagerPolicy.WindowState;
+
+/**
+ * Tests for KeyboardInterceptor
+ */
+@RunWith(AndroidJUnit4.class)
+public class KeyboardInterceptorTest {
+    private KeyboardInterceptor mInterceptor;
+    private MessageCapturingHandler mHandler = new MessageCapturingHandler(
+            msg -> mInterceptor.handleMessage(msg));
+    @Mock AccessibilityManagerService mMockAms;
+    @Mock WindowManagerPolicy mMockPolicy;
+
+    @BeforeClass
+    public static void oneTimeInitialization() {
+        if (Looper.myLooper() == null) {
+            Looper.prepare();
+        }
+    }
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mInterceptor = new KeyboardInterceptor(mMockAms, mMockPolicy, mHandler);
+    }
+
+    @Test
+    public void whenNonspecialKeyArrives_withNothingInQueue_eventGoesToAms() {
+        KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_0);
+        mInterceptor.onKeyEvent(event, 0);
+        verify(mMockAms).notifyKeyEvent(argThat(matchesKeyEvent(event)), eq(0));
+    }
+
+    @Test
+    public void whenVolumeKeyArrives_andPolicySaysUseIt_eventGoesToAms() {
+        KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_VOLUME_DOWN);
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(event)), eq(0))).thenReturn(0L);
+        mInterceptor.onKeyEvent(event, 0);
+        verify(mMockAms).notifyKeyEvent(argThat(matchesKeyEvent(event)), eq(0));
+    }
+
+    @Test
+    public void whenVolumeKeyArrives_andPolicySaysDropIt_eventDropped() {
+        KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_VOLUME_UP);
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(event)), eq(0))).thenReturn(-1L);
+        mInterceptor.onKeyEvent(event, 0);
+        verify(mMockAms, times(0)).notifyKeyEvent(anyObject(), anyInt());
+        assertFalse(mHandler.hasMessages());
+    }
+
+    @Test
+    public void whenVolumeKeyArrives_andPolicySaysDelayThenUse_eventQueuedThenSentToAms() {
+        KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_VOLUME_UP);
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(event)), eq(0))).thenReturn(150L);
+        mInterceptor.onKeyEvent(event, 0);
+
+        assertTrue(mHandler.hasMessages());
+        verify(mMockAms, times(0)).notifyKeyEvent(anyObject(), anyInt());
+
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(event)), eq(0))).thenReturn(0L);
+        mHandler.sendAllMessages();
+
+        verify(mMockAms).notifyKeyEvent(argThat(matchesKeyEvent(event)), eq(0));
+    }
+
+    @Test
+    public void whenVolumeKeyArrives_andPolicySaysDelayThenDrop_eventQueuedThenDropped() {
+        KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_VOLUME_DOWN);
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(event)), eq(0))).thenReturn(150L);
+        mInterceptor.onKeyEvent(event, 0);
+
+        assertTrue(mHandler.hasMessages());
+        verify(mMockAms, times(0)).notifyKeyEvent(anyObject(), anyInt());
+
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(event)), eq(0))).thenReturn(-1L);
+        mHandler.sendAllMessages();
+
+        verify(mMockAms, times(0)).notifyKeyEvent(anyObject(), anyInt());
+    }
+
+    @Test
+    public void whenSomeEventsGetDelayed_allEventsStillInOrder() {
+        KeyEvent[] events = {new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_0),
+                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_VOLUME_UP),
+                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A),
+                new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_VOLUME_UP),
+                new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_0)};
+
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(events[1])), eq(0))).thenReturn(150L);
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(events[3])), eq(0))).thenReturn(75L);
+
+        for (KeyEvent event : events) {
+            mInterceptor.onKeyEvent(event, 0);
+        }
+
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(events[1])), eq(0))).thenReturn(0L);
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(events[3])), eq(0))).thenReturn(0L);
+
+        mHandler.sendAllMessages();
+
+        InOrder inOrder = Mockito.inOrder(mMockAms);
+        for (KeyEvent event : events) {
+            inOrder.verify(mMockAms).notifyKeyEvent(argThat(matchesKeyEvent(event)), eq(0));
+        }
+    }
+
+    @Test
+    public void whenSomeEventsGetDropped_otherEventsStillInOrder() {
+        KeyEvent[] events = {new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_0),
+                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_VOLUME_UP),
+                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A),
+                new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_VOLUME_UP),
+                new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_0)};
+
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(events[1])), eq(0))).thenReturn(150L);
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(events[3])), eq(0))).thenReturn(75L);
+
+        for (KeyEvent event : events) {
+            mInterceptor.onKeyEvent(event, 0);
+        }
+
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(events[1])), eq(0))).thenReturn(-1L);
+        when(mMockPolicy.interceptKeyBeforeDispatching((WindowState) argThat(nullValue()),
+                argThat(matchesKeyEvent(events[3])), eq(0))).thenReturn(-1L);
+
+        mHandler.sendAllMessages();
+
+        InOrder inOrder = Mockito.inOrder(mMockAms);
+        for (KeyEvent event : events) {
+            if ((event == events[1]) || (event == events[3])) continue;
+            inOrder.verify(mMockAms).notifyKeyEvent(argThat(matchesKeyEvent(event)), eq(0));
+        }
+    }
+
+    private static KeyEventMatcher matchesKeyEvent(KeyEvent event) {
+        return new KeyEventMatcher(event);
+    }
+
+    private static class KeyEventMatcher extends TypeSafeMatcher<KeyEvent> {
+        private KeyEvent mEventToMatch;
+
+        public KeyEventMatcher(KeyEvent eventToMatch) {
+            mEventToMatch = eventToMatch;
+        }
+
+        @Override
+        protected boolean matchesSafely(KeyEvent item) {
+            return (mEventToMatch.getKeyCode() == item.getKeyCode())
+                    && (mEventToMatch.getAction() == item.getAction());
+        }
+
+        @Override
+        public void describeTo(Description description) {
+            description.appendText("Matches key event");
+        }
+    }
+}
\ No newline at end of file
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java
index 6701b71..0ffc61a 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java
@@ -113,7 +113,7 @@
     private static final int[] UID_RECORD_CHANGES = {
         UidRecord.CHANGE_PROCSTATE,
         UidRecord.CHANGE_GONE,
-        UidRecord.CHANGE_GONE_IDLE,
+        UidRecord.CHANGE_GONE | UidRecord.CHANGE_IDLE,
         UidRecord.CHANGE_IDLE,
         UidRecord.CHANGE_ACTIVE
     };
@@ -417,7 +417,7 @@
                 // delivered to this observer.
                 final int[] changesToVerify = {
                     UidRecord.CHANGE_IDLE,
-                    UidRecord.CHANGE_GONE_IDLE
+                    UidRecord.CHANGE_GONE | UidRecord.CHANGE_IDLE
                 };
                 verifyObserverReceivedChanges(observerToTest, changesToVerify, changeItems,
                         (observer, changeItem) -> {
@@ -439,7 +439,7 @@
                 // delivered to this observer.
                 final int[] changesToVerify = {
                         UidRecord.CHANGE_GONE,
-                        UidRecord.CHANGE_GONE_IDLE
+                        UidRecord.CHANGE_GONE | UidRecord.CHANGE_IDLE
                 };
                 verifyObserverReceivedChanges(observerToTest, changesToVerify, changeItems,
                         (observer, changeItem) -> {
@@ -585,7 +585,7 @@
         for (int i = 0; i < pendingItemsForUids.size(); ++i) {
             final UidRecord.ChangeItem item = pendingItemsForUids.get(i);
             final UidRecord validateUidRecord = mAms.mValidateUids.get(item.uid);
-            if (item.change == UidRecord.CHANGE_GONE || item.change == UidRecord.CHANGE_GONE_IDLE) {
+            if ((item.change & UidRecord.CHANGE_GONE) != 0) {
                 assertNull("validateUidRecord should be null since the change is either "
                         + "CHANGE_GONE or CHANGE_GONE_IDLE", validateUidRecord);
             } else {
@@ -614,7 +614,8 @@
             final UidRecord.ChangeItem item = pendingItemsForUids.get(i);
             // Assign CHANGE_GONE_IDLE to some items and CHANGE_GONE to the others, using even/odd
             // distribution for this assignment.
-            item.change = (i % 2) == 0 ? UidRecord.CHANGE_GONE_IDLE : UidRecord.CHANGE_GONE;
+            item.change = (i % 2) == 0 ? (UidRecord.CHANGE_GONE | UidRecord.CHANGE_IDLE)
+                    : UidRecord.CHANGE_GONE;
         }
         mAms.mPendingUidChanges.addAll(pendingItemsForUids);
         mAms.dispatchUidsChanged();
@@ -653,8 +654,7 @@
             mAms.enqueueUidChangeLocked(uidRecord, uid, changeToDispatch);
             // Verify there is no effect on curProcStateSeq.
             assertEquals(curProcstateSeq, uidRecord.curProcStateSeq);
-            if (changeToDispatch == UidRecord.CHANGE_GONE
-                    || changeToDispatch == UidRecord.CHANGE_GONE_IDLE) {
+            if ((changeToDispatch & UidRecord.CHANGE_GONE) != 0) {
                 // Since the change is CHANGE_GONE or CHANGE_GONE_IDLE, verify that
                 // lastProcStateSeqDispatchedToObservers is not updated.
                 assertNotEquals(uidRecord.curProcStateSeq,
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java
index 2252c85..e51f7a9 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java
@@ -20,15 +20,19 @@
 import static android.view.WindowManagerPolicy.NAV_BAR_LEFT;
 import static android.view.WindowManagerPolicy.NAV_BAR_RIGHT;
 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 static org.mockito.Mockito.when;
 
 import android.content.ComponentName;
+import android.content.pm.ActivityInfo;
 import android.graphics.Rect;
 import android.platform.test.annotations.Presubmit;
 import android.support.test.filters.MediumTest;
 import android.support.test.runner.AndroidJUnit4;
 
+import android.view.Display;
 import org.junit.runner.RunWith;
 import org.junit.Test;
 
@@ -46,6 +50,8 @@
 
     private final ComponentName testActivityComponent =
             ComponentName.unflattenFromString("com.foo/.BarActivity");
+    private final ComponentName secondaryActivityComponent =
+            ComponentName.unflattenFromString("com.foo/.BarActivity2");
     @Test
     public void testStackCleanupOnClearingTask() throws Exception {
         final ActivityManagerService service = createActivityManagerService();
@@ -131,4 +137,45 @@
         record.ensureActivityConfigurationLocked(0 /* globalChanges */, false /* preserveWindow */);
         assertEquals(expectedActivityBounds, record.getBounds());
     }
+
+
+    @Test
+    public void testCanBeLaunchedOnDisplay() throws Exception {
+        testSupportsLaunchingResizeable(false /*taskPresent*/, true /*taskResizeable*/,
+                true /*activityResizeable*/, true /*expected*/);
+
+        testSupportsLaunchingResizeable(false /*taskPresent*/, true /*taskResizeable*/,
+                false /*activityResizeable*/, false /*expected*/);
+
+        testSupportsLaunchingResizeable(true /*taskPresent*/, false /*taskResizeable*/,
+                true /*activityResizeable*/, false /*expected*/);
+
+        testSupportsLaunchingResizeable(true /*taskPresent*/, true /*taskResizeable*/,
+                false /*activityResizeable*/, true /*expected*/);
+    }
+
+    private void testSupportsLaunchingResizeable(boolean taskPresent, boolean taskResizeable,
+            boolean activityResizeable, boolean expected) {
+        final ActivityManagerService service = createActivityManagerService();
+        service.mSupportsMultiWindow = true;
+
+
+        final TaskRecord task = taskPresent
+                ? createTask(service, testActivityComponent, TEST_STACK_ID) : null;
+
+        if (task != null) {
+            task.setResizeMode(taskResizeable ? ActivityInfo.RESIZE_MODE_RESIZEABLE
+                    : ActivityInfo.RESIZE_MODE_UNRESIZEABLE);
+        }
+
+        final ActivityRecord record = createActivity(service, secondaryActivityComponent,
+                task);
+        record.info.resizeMode = activityResizeable ? ActivityInfo.RESIZE_MODE_RESIZEABLE
+                : ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
+
+        record.canBeLaunchedOnDisplay(Display.DEFAULT_DISPLAY);
+
+        assertEquals(((TestActivityStackSupervisor) service.mStackSupervisor)
+                .getLastResizeableFromCanPlaceEntityOnDisplay(), expected);
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java
index fc9ab96..661dd4f 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java
@@ -21,6 +21,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
 
 import android.content.ComponentName;
 import android.graphics.Rect;
@@ -117,4 +118,21 @@
             assertTrue(stackTasks.contains(task));
         }
     }
+
+    /**
+     * Ensures that an activity is removed from the stopping activities list once it is resumed.
+     */
+    @Test
+    public void testStoppingActivityRemovedWhenResumed() throws Exception {
+        final ActivityManagerService service = createActivityManagerService();
+        final TaskRecord firstTask = createTask(service, testActivityComponent,
+            FULLSCREEN_WORKSPACE_STACK_ID);
+        final ActivityRecord firstActivity = createActivity(service, testActivityComponent,
+            firstTask);
+        service.mStackSupervisor.mStoppingActivities.add(firstActivity);
+
+        firstActivity.completeResumeLocked();
+
+        assertFalse(service.mStackSupervisor.mStoppingActivities.contains(firstActivity));
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java
index 711c36b..02fba08 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java
@@ -17,13 +17,14 @@
 package com.android.server.am;
 
 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 android.app.ActivityManager;
 import android.content.ComponentName;
 import android.content.pm.ActivityInfo;
+import android.os.UserHandle;
 import android.platform.test.annotations.Presubmit;
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
@@ -44,6 +45,8 @@
     private static final int TEST_STACK_ID = 100;
     private static final ComponentName testActivityComponent =
             ComponentName.unflattenFromString("com.foo/.BarActivity");
+    private static final ComponentName testOverlayComponent =
+            ComponentName.unflattenFromString("com.foo/.OverlayActivity");
 
     @Test
     public void testEmptyTaskCleanupOnRemove() throws Exception {
@@ -78,10 +81,10 @@
         service.mStackSupervisor.inResumeTopActivity = true;
         testStack.mResumedActivity = activityRecord;
 
-        final boolean waiting = testStack.checkReadyForSleepLocked();
+        final boolean waiting = testStack.goToSleepIfPossible(false);
 
         // Ensure we report not being ready for sleep.
-        assertTrue(waiting);
+        assertFalse(waiting);
 
         // Make sure the resumed activity is untouched.
         assertEquals(testStack.mResumedActivity, activityRecord);
@@ -99,24 +102,24 @@
         testStack.stopActivityLocked(activityRecord);
     }
 
-    /**
-     * This test verifies that {@link ActivityStack#STACK_VISIBLE_ACTIVITY_BEHIND} is returned from
-     * {@link ActivityStack#shouldBeVisible(ActivityRecord)} from a fullscreen workspace stack with
-     * a visible behind activity when top focused stack is the home stack.
-     */
     @Test
-    public void testShouldBeVisibleWithVisibleBehindActivity() throws Exception {
+    public void testFindTaskWithOverlay() throws Exception {
         final ActivityManagerService service = createActivityManagerService();
-        final TaskRecord task = createTask(service, testActivityComponent,
-                ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID);
-        final ActivityStack fullscreenWorkspaceStackId = task.getStack();
-        final ActivityStack homeStack = service.mStackSupervisor.getStack(
-                ActivityManager.StackId.HOME_STACK_ID, true /*createStaticStackIfNeeded*/,
-                true /*onTop*/);
-        final ActivityRecord activityRecord = createActivity(service, testActivityComponent, task);
-        service.mStackSupervisor.setFocusStackUnchecked("testEmptyStackShouldBeVisible", homeStack);
-        service.mStackSupervisor.requestVisibleBehindLocked(activityRecord, true);
-        assertEquals(ActivityStack.STACK_VISIBLE_ACTIVITY_BEHIND,
-                fullscreenWorkspaceStackId.shouldBeVisible(null /*starting*/));
+        final TaskRecord task = createTask(service, testActivityComponent, TEST_STACK_ID);
+        final ActivityRecord activityRecord = createActivity(service, testActivityComponent, task,
+                0);
+        // Overlay must be for a different user to prevent recognizing a matching top activity
+        final ActivityRecord taskOverlay = createActivity(service, testOverlayComponent, task,
+                UserHandle.PER_USER_RANGE * 2);
+        taskOverlay.mTaskOverlay = true;
+
+        final ActivityStack testStack = service.mStackSupervisor.getStack(TEST_STACK_ID);
+        final ActivityStackSupervisor.FindTaskResult result =
+                new ActivityStackSupervisor.FindTaskResult();
+        testStack.findTaskLocked(activityRecord, result);
+
+        assertEquals(task.getTopActivity(false /* includeOverlays */), activityRecord);
+        assertEquals(task.getTopActivity(true /* includeOverlays */), taskOverlay);
+        assertNotNull(result.r);
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java
index 16bc011..04ddae9 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java
@@ -16,6 +16,7 @@
 
 package com.android.server.am;
 
+import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.any;
@@ -78,7 +79,7 @@
             int stackId, int displayId, boolean onTop) {
         if (service.mStackSupervisor instanceof TestActivityStackSupervisor) {
             return ((TestActivityStackSupervisor) service.mStackSupervisor)
-                    .createTestStack(service, stackId, onTop);
+                    .createTestStack(stackId, onTop);
         }
 
         return null;
@@ -86,18 +87,23 @@
 
     protected static ActivityRecord createActivity(ActivityManagerService service,
             ComponentName component, TaskRecord task) {
+        return createActivity(service, component, task, 0 /* userId */);
+    }
+
+    protected static ActivityRecord createActivity(ActivityManagerService service,
+            ComponentName component, TaskRecord task, int uid) {
         Intent intent = new Intent();
         intent.setComponent(component);
         final ActivityInfo aInfo = new ActivityInfo();
         aInfo.applicationInfo = new ApplicationInfo();
         aInfo.applicationInfo.packageName = component.getPackageName();
+        aInfo.applicationInfo.uid = uid;
         AttributeCache.init(service.mContext);
         final ActivityRecord activity = new ActivityRecord(service, null /* caller */,
                 0 /* launchedFromPid */, 0, null, intent, null,
                 aInfo /*aInfo*/, new Configuration(), null /* resultTo */, null /* resultWho */,
                 0 /* reqCode */, false /*componentSpecified*/, false /* rootVoiceInteraction */,
-                service.mStackSupervisor, null /* container */, null /* options */,
-                null /* sourceRecord */);
+                service.mStackSupervisor, null /* options */, null /* sourceRecord */);
         activity.mWindowContainerController = mock(AppWindowContainerController.class);
 
         if (task != null) {
@@ -145,6 +151,10 @@
         protected ActivityStackSupervisor createStackSupervisor() {
             return new TestActivityStackSupervisor(this, mHandlerThread.getLooper());
         }
+
+        @Override
+        void updateUsageStats(ActivityRecord component, boolean resumed) {
+        }
     }
 
     /**
@@ -153,6 +163,7 @@
      */
     protected static class TestActivityStackSupervisor extends ActivityStackSupervisor {
         private final ActivityDisplay mDisplay;
+        private boolean mLastResizeable;
 
         public TestActivityStackSupervisor(ActivityManagerService service, Looper looper) {
             super(service, looper);
@@ -160,6 +171,22 @@
             mDisplay = new ActivityDisplay();
         }
 
+        // TODO: Use Mockito spy instead. Currently not possible due to TestActivityStackSupervisor
+        // access to ActivityDisplay
+        @Override
+        boolean canPlaceEntityOnDisplay(int displayId, boolean resizeable, int callingPid,
+                int callingUid, ActivityInfo activityInfo) {
+            mLastResizeable = resizeable;
+            return super.canPlaceEntityOnDisplay(displayId, resizeable, callingPid, callingUid,
+                    activityInfo);
+        }
+
+        // TODO: remove and use Mockito verify once {@link #canPlaceEntityOnDisplay} override is
+        // removed.
+        public boolean getLastResizeableFromCanPlaceEntityOnDisplay() {
+            return mLastResizeable;
+        }
+
         // No home stack is set.
         @Override
         void moveHomeStackToFront(String reason) {
@@ -187,12 +214,24 @@
                 boolean preserveWindows) {
         }
 
-        public <T extends ActivityStack> T createTestStack(ActivityManagerService service,
-                int stackId, boolean onTop) {
-            final TestActivityContainer container =
-                    new TestActivityContainer(service, stackId, mDisplay, onTop);
-            mActivityContainers.put(stackId, container);
-            return (T) container.getStack();
+        <T extends ActivityStack> T createTestStack(int stackId, boolean onTop) {
+            return (T) createStack(stackId, mDisplay, onTop);
+        }
+
+        @Override
+        ActivityStack createStack(int stackId, ActivityDisplay display, boolean onTop) {
+            final RecentTasks recents =
+                    new RecentTasks(mService, mService.mStackSupervisor);
+            if (stackId == PINNED_STACK_ID) {
+                return new PinnedActivityStack(display, stackId, this, recents, onTop) {
+                    @Override
+                    Rect getDefaultPictureInPictureBounds(float aspectRatio) {
+                        return new Rect(50, 50, 100, 100);
+                    }
+                };
+            } else {
+                return new TestActivityStack(display, stackId, this, recents, onTop);
+            }
         }
 
         @Override
@@ -204,49 +243,13 @@
                 return stack;
             }
 
-            return createTestStack(mService, stackId, createOnTop);
+            return createTestStack(stackId, createOnTop);
         }
 
-        private class TestActivityContainer extends ActivityContainer {
-            private final ActivityManagerService mService;
-
-            private boolean mOnTop;
-            private int mStackId;
-            private ActivityStack mStack;
-
-            TestActivityContainer(ActivityManagerService service, int stackId,
-                    ActivityDisplay activityDisplay, boolean onTop) {
-                super(stackId, activityDisplay, onTop);
-                mService = service;
-            }
-
-            @Override
-            protected void createStack(int stackId, boolean onTop) {
-                // normally stack creation is done here. However we need to do it on demand since
-                // we cannot set {@link mService} by the time the super constructor calling this
-                // method is invoked.
-                mOnTop = onTop;
-                mStackId = stackId;
-            }
-
-            public ActivityStack getStack() {
-                if (mStack == null) {
-                    final RecentTasks recents =
-                            new RecentTasks(mService, mService.mStackSupervisor);
-                    if (mStackId == ActivityManager.StackId.PINNED_STACK_ID) {
-                        mStack = new PinnedActivityStack(this, recents, mOnTop) {
-                            @Override
-                            Rect getDefaultPictureInPictureBounds(float aspectRatio) {
-                                return new Rect(50, 50, 100, 100);
-                            }
-                        };
-                    } else {
-                        mStack = new TestActivityStack(this, recents, mOnTop);
-                    }
-                }
-
-                return mStack;
-            }
+        // Always keep things awake
+        @Override
+        boolean hasAwakeDisplay() {
+            return true;
         }
     }
 
@@ -277,9 +280,9 @@
             extends ActivityStack<T> implements ActivityStackReporter {
         private int mOnActivityRemovedFromStackCount = 0;
         private T mContainerController;
-        TestActivityStack(ActivityStackSupervisor.ActivityContainer activityContainer,
-                RecentTasks recentTasks, boolean onTop) {
-            super(activityContainer, recentTasks, onTop);
+        TestActivityStack(ActivityStackSupervisor.ActivityDisplay display, int stackId,
+                ActivityStackSupervisor supervisor, RecentTasks recentTasks, boolean onTop) {
+            super(display, stackId, supervisor, recentTasks, onTop);
         }
 
         @Override
diff --git a/services/tests/servicestests/src/com/android/server/backup/BackupPasswordManagerTest.java b/services/tests/servicestests/src/com/android/server/backup/BackupPasswordManagerTest.java
new file mode 100644
index 0000000..04c0251
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/backup/BackupPasswordManagerTest.java
@@ -0,0 +1,232 @@
+/*
+ * 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.backup;
+
+import static com.android.server.testutis.TestUtils.assertExpectException;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doThrow;
+
+import android.content.Context;
+import android.platform.test.annotations.Presubmit;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import com.android.server.backup.utils.PasswordUtils;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.security.SecureRandom;
+
+@SmallTest
+@Presubmit
+@RunWith(AndroidJUnit4.class)
+public class BackupPasswordManagerTest {
+    private static final String PASSWORD_VERSION_FILE_NAME = "pwversion";
+    private static final String PASSWORD_HASH_FILE_NAME = "pwhash";
+    private static final String V1_HASH_ALGORITHM = "PBKDF2WithHmacSHA1And8bit";
+
+    @Rule public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+
+    @Mock private Context mContext;
+
+    private File mStateFolder;
+    private BackupPasswordManager mPasswordManager;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        mStateFolder = mTemporaryFolder.newFolder();
+        mPasswordManager = new BackupPasswordManager(mContext, mStateFolder, new SecureRandom());
+    }
+
+    @Test
+    public void hasBackupPassword_isFalseIfFileDoesNotExist() {
+        assertThat(mPasswordManager.hasBackupPassword()).isFalse();
+    }
+
+    @Test
+    public void hasBackupPassword_isTrueIfFileExists() throws Exception {
+        mPasswordManager.setBackupPassword(null, "password1234");
+        assertThat(mPasswordManager.hasBackupPassword()).isTrue();
+    }
+
+    @Test
+    public void hasBackupPassword_throwsSecurityExceptionIfLacksPermission() {
+        setDoesNotHavePermission();
+
+        assertExpectException(
+                SecurityException.class,
+                /* expectedExceptionMessageRegex */ null,
+                () -> mPasswordManager.hasBackupPassword());
+    }
+
+    @Test
+    public void backupPasswordMatches_isTrueIfNoPassword() {
+        assertThat(mPasswordManager.backupPasswordMatches("anything")).isTrue();
+    }
+
+    @Test
+    public void backupPasswordMatches_isTrueForSamePassword() {
+        String password = "password1234";
+        mPasswordManager.setBackupPassword(null, password);
+        assertThat(mPasswordManager.backupPasswordMatches(password)).isTrue();
+    }
+
+    @Test
+    public void backupPasswordMatches_isFalseForDifferentPassword() {
+        mPasswordManager.setBackupPassword(null, "shiba");
+        assertThat(mPasswordManager.backupPasswordMatches("corgi")).isFalse();
+    }
+
+    @Test
+    public void backupPasswordMatches_worksForV1HashIfVersionIsV1() throws Exception {
+        String password = "corgi\uFFFF";
+        writePasswordVersionToFile(1);
+        writeV1HashToFile(password, saltFixture());
+
+        // Reconstruct so it reloads from filesystem
+        mPasswordManager = new BackupPasswordManager(mContext, mStateFolder, new SecureRandom());
+
+        assertThat(mPasswordManager.backupPasswordMatches(password)).isTrue();
+    }
+
+    @Test
+    public void backupPasswordMatches_failsForV1HashIfVersionIsV2() throws Exception {
+        // The algorithms produce identical hashes except if the password contains higher-order
+        // unicode. See
+        // https://android-developers.googleblog.com/2013/12/changes-to-secretkeyfactory-api-in.html
+        String password = "corgi\uFFFF";
+        writePasswordVersionToFile(2);
+        writeV1HashToFile(password, saltFixture());
+
+        // Reconstruct so it reloads from filesystem
+        mPasswordManager = new BackupPasswordManager(mContext, mStateFolder, new SecureRandom());
+
+        assertThat(mPasswordManager.backupPasswordMatches(password)).isFalse();
+    }
+
+    @Test
+    public void backupPasswordMatches_throwsSecurityExceptionIfLacksPermission() {
+        setDoesNotHavePermission();
+
+        assertExpectException(
+                SecurityException.class,
+                /* expectedExceptionMessageRegex */ null,
+                () -> mPasswordManager.backupPasswordMatches("password123"));
+    }
+
+    @Test
+    public void setBackupPassword_persistsPasswordToFile() {
+        String password = "shiba";
+
+        mPasswordManager.setBackupPassword(null, password);
+
+        BackupPasswordManager newManager = new BackupPasswordManager(
+                mContext, mStateFolder, new SecureRandom());
+        assertThat(newManager.backupPasswordMatches(password)).isTrue();
+    }
+
+    @Test
+    public void setBackupPassword_failsIfCurrentPasswordIsWrong() {
+        String secondPassword = "second password";
+        mPasswordManager.setBackupPassword(null, "first password");
+
+        boolean result = mPasswordManager.setBackupPassword(
+                "incorrect pass", secondPassword);
+
+        BackupPasswordManager newManager = new BackupPasswordManager(
+                mContext, mStateFolder, new SecureRandom());
+        assertThat(result).isFalse();
+        assertThat(newManager.backupPasswordMatches(secondPassword)).isFalse();
+    }
+
+    @Test
+    public void setBackupPassword_throwsSecurityExceptionIfLacksPermission() {
+        setDoesNotHavePermission();
+
+        assertExpectException(
+                SecurityException.class,
+                /* expectedExceptionMessageRegex */ null,
+                () -> mPasswordManager.setBackupPassword(
+                        "password123", "password111"));
+    }
+
+    private byte[] saltFixture() {
+        byte[] bytes = new byte[64];
+        for (int i = 0; i < 64; i++) {
+            bytes[i] = (byte) i;
+        }
+        return bytes;
+    }
+
+    private void setDoesNotHavePermission() {
+        doThrow(new SecurityException()).when(mContext)
+                .enforceCallingOrSelfPermission(anyString(), anyString());
+    }
+
+    private void writeV1HashToFile(String password, byte[] salt) throws Exception {
+        String hash = PasswordUtils.buildPasswordHash(
+                V1_HASH_ALGORITHM, password, salt, PasswordUtils.PBKDF2_HASH_ROUNDS);
+        writeHashAndSaltToFile(hash, salt);
+    }
+
+    private void writeHashAndSaltToFile(String hash, byte[] salt) throws Exception {
+        FileOutputStream fos = null;
+        DataOutputStream dos = null;
+
+        try {
+            File passwordHash = new File(mStateFolder, PASSWORD_HASH_FILE_NAME);
+            fos = new FileOutputStream(passwordHash);
+            dos = new DataOutputStream(fos);
+            dos.writeInt(salt.length);
+            dos.write(salt);
+            dos.writeUTF(hash);
+            dos.flush();
+        } finally {
+            if (dos != null) dos.close();
+            if (fos != null) fos.close();
+        }
+    }
+
+    private void writePasswordVersionToFile(int version) throws Exception {
+        FileOutputStream fos = null;
+        DataOutputStream dos = null;
+
+        try {
+            File passwordVersion = new File(mStateFolder, PASSWORD_VERSION_FILE_NAME);
+            fos = new FileOutputStream(passwordVersion);
+            dos = new DataOutputStream(fos);
+            dos.writeInt(version);
+            dos.flush();
+        } finally {
+            if (dos != null) dos.close();
+            if (fos != null) fos.close();
+        }
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/backup/DataChangedJournalTest.java b/services/tests/servicestests/src/com/android/server/backup/DataChangedJournalTest.java
new file mode 100644
index 0000000..c27fd07
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/backup/DataChangedJournalTest.java
@@ -0,0 +1,132 @@
+/*
+ * 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.backup;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.platform.test.annotations.Presubmit;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+import org.mockito.InOrder;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.ArrayList;
+
+@SmallTest
+@Presubmit
+@RunWith(AndroidJUnit4.class)
+public class DataChangedJournalTest {
+    private static final String GMAIL = "com.google.gmail";
+    private static final String DOCS = "com.google.docs";
+    private static final String GOOGLE_PLUS = "com.google.plus";
+
+    @Rule public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+
+    @Mock private DataChangedJournal.Consumer mConsumer;
+
+    private File mFile;
+    private DataChangedJournal mJournal;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        mFile = mTemporaryFolder.newFile();
+        mJournal = new DataChangedJournal(mFile);
+    }
+
+    @Test
+    public void addPackage_addsPackagesToEndOfFile() throws Exception {
+        mJournal.addPackage(GMAIL);
+        mJournal.addPackage(DOCS);
+        mJournal.addPackage(GOOGLE_PLUS);
+
+        FileInputStream fos = new FileInputStream(mFile);
+        DataInputStream dos = new DataInputStream(fos);
+        assertThat(dos.readUTF()).isEqualTo(GMAIL);
+        assertThat(dos.readUTF()).isEqualTo(DOCS);
+        assertThat(dos.readUTF()).isEqualTo(GOOGLE_PLUS);
+        assertThat(dos.available()).isEqualTo(0);
+    }
+
+    @Test
+    public void delete_deletesTheFile() throws Exception {
+        mJournal.addPackage(GMAIL);
+
+        mJournal.delete();
+
+        assertThat(mFile.exists()).isFalse();
+    }
+
+    @Test
+    public void equals_isTrueForTheSameFile() throws Exception {
+        assertThat(mJournal.equals(new DataChangedJournal(mFile))).isTrue();
+    }
+
+    @Test
+    public void equals_isFalseForDifferentFiles() throws Exception {
+        assertThat(mJournal.equals(new DataChangedJournal(mTemporaryFolder.newFile()))).isFalse();
+    }
+
+    @Test
+    public void forEach_iteratesThroughPackagesInFileInOrder() throws Exception {
+        mJournal.addPackage(GMAIL);
+        mJournal.addPackage(DOCS);
+
+        mJournal.forEach(mConsumer);
+
+        InOrder inOrder = Mockito.inOrder(mConsumer);
+        inOrder.verify(mConsumer).accept(GMAIL);
+        inOrder.verify(mConsumer).accept(DOCS);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void listJournals_returnsJournalsForEveryFileInDirectory() throws Exception {
+        File folder = mTemporaryFolder.newFolder();
+        DataChangedJournal.newJournal(folder);
+        DataChangedJournal.newJournal(folder);
+
+        ArrayList<DataChangedJournal> journals = DataChangedJournal.listJournals(folder);
+
+        assertThat(journals).hasSize(2);
+    }
+
+    @Test
+    public void newJournal_createsANewTemporaryFile() throws Exception {
+        File folder = mTemporaryFolder.newFolder();
+
+        DataChangedJournal.newJournal(folder);
+
+        assertThat(folder.listFiles()).hasLength(1);
+    }
+
+    @Test
+    public void toString_isSameAsFileToString() throws Exception {
+        assertThat(mJournal.toString()).isEqualTo(mFile.toString());
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/backup/testutils/PackageManagerStub.java b/services/tests/servicestests/src/com/android/server/backup/testutils/PackageManagerStub.java
index 45b107d..0e940f2 100644
--- a/services/tests/servicestests/src/com/android/server/backup/testutils/PackageManagerStub.java
+++ b/services/tests/servicestests/src/com/android/server/backup/testutils/PackageManagerStub.java
@@ -275,6 +275,11 @@
     }
 
     @Override
+    public String[] getNamesForUids(int uid[]) {
+        return null;
+    }
+
+    @Override
     public int getUidForSharedUser(String sharedUserName)
             throws NameNotFoundException {
         return 0;
diff --git a/services/tests/servicestests/src/com/android/server/backup/utils/AppBackupUtilsTest.java b/services/tests/servicestests/src/com/android/server/backup/utils/AppBackupUtilsTest.java
index 650681e..db0ec07 100644
--- a/services/tests/servicestests/src/com/android/server/backup/utils/AppBackupUtilsTest.java
+++ b/services/tests/servicestests/src/com/android/server/backup/utils/AppBackupUtilsTest.java
@@ -31,8 +31,6 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import java.util.Random;
-
 @SmallTest
 @Presubmit
 @RunWith(AndroidJUnit4.class)
@@ -40,7 +38,10 @@
     private static final String CUSTOM_BACKUP_AGENT_NAME = "custom.backup.agent";
     private static final String TEST_PACKAGE_NAME = "test_package";
 
-    private final Random mRandom = new Random(1000000009);
+    private static final Signature SIGNATURE_1 = generateSignature((byte) 1);
+    private static final Signature SIGNATURE_2 = generateSignature((byte) 2);
+    private static final Signature SIGNATURE_3 = generateSignature((byte) 3);
+    private static final Signature SIGNATURE_4 = generateSignature((byte) 4);
 
     @Test
     public void appIsEligibleForBackup_backupNotAllowed_returnsFalse() throws Exception {
@@ -220,7 +221,7 @@
 
     @Test
     public void signaturesMatch_targetIsNull_returnsFalse() throws Exception {
-        boolean result = AppBackupUtils.signaturesMatch(new Signature[0], null);
+        boolean result = AppBackupUtils.signaturesMatch(new Signature[] {SIGNATURE_1}, null);
 
         assertThat(result).isFalse();
     }
@@ -237,61 +238,10 @@
     }
 
     @Test
-    public void signaturesMatch_allowsUnsignedApps_bothSignaturesNull_returnsTrue()
+    public void signaturesMatch_disallowsUnsignedApps_storedSignatureNull_returnsFalse()
             throws Exception {
         PackageInfo packageInfo = new PackageInfo();
-        packageInfo.signatures = null;
-        packageInfo.applicationInfo = new ApplicationInfo();
-
-        boolean result = AppBackupUtils.signaturesMatch(null, packageInfo);
-
-        assertThat(result).isTrue();
-    }
-
-    @Test
-    public void signaturesMatch_allowsUnsignedApps_bothSignaturesEmpty_returnsTrue()
-            throws Exception {
-        PackageInfo packageInfo = new PackageInfo();
-        packageInfo.signatures = new Signature[0];
-        packageInfo.applicationInfo = new ApplicationInfo();
-
-        boolean result = AppBackupUtils.signaturesMatch(new Signature[0], packageInfo);
-
-        assertThat(result).isTrue();
-    }
-
-    @Test
-    public void
-    signaturesMatch_allowsUnsignedApps_storedSignatureNullTargetSignatureEmpty_returnsTrue()
-            throws Exception {
-        PackageInfo packageInfo = new PackageInfo();
-        packageInfo.signatures = new Signature[0];
-        packageInfo.applicationInfo = new ApplicationInfo();
-
-        boolean result = AppBackupUtils.signaturesMatch(null, packageInfo);
-
-        assertThat(result).isTrue();
-    }
-
-    @Test
-    public void
-    signaturesMatch_allowsUnsignedApps_storedSignatureEmptyTargetSignatureNull_returnsTrue()
-            throws Exception {
-        PackageInfo packageInfo = new PackageInfo();
-        packageInfo.signatures = null;
-        packageInfo.applicationInfo = new ApplicationInfo();
-
-        boolean result = AppBackupUtils.signaturesMatch(new Signature[0], packageInfo);
-
-        assertThat(result).isTrue();
-    }
-
-    @Test
-    public void
-    signaturesMatch_disallowsAppsUnsignedOnOnlyOneDevice_storedSignatureIsNull_returnsFalse()
-            throws Exception {
-        PackageInfo packageInfo = new PackageInfo();
-        packageInfo.signatures = new Signature[]{generateRandomSignature()};
+        packageInfo.signatures = new Signature[] {SIGNATURE_1};
         packageInfo.applicationInfo = new ApplicationInfo();
 
         boolean result = AppBackupUtils.signaturesMatch(null, packageInfo);
@@ -300,37 +250,78 @@
     }
 
     @Test
-    public void
-    signaturesMatch_disallowsAppsUnsignedOnOnlyOneDevice_targetSignatureIsNull_returnsFalse()
+    public void signaturesMatch_disallowsUnsignedApps_storedSignatureEmpty_returnsFalse()
             throws Exception {
         PackageInfo packageInfo = new PackageInfo();
-        packageInfo.signatures = null;
+        packageInfo.signatures = new Signature[] {SIGNATURE_1};
         packageInfo.applicationInfo = new ApplicationInfo();
 
-        boolean result = AppBackupUtils.signaturesMatch(new Signature[]{generateRandomSignature()},
+        boolean result = AppBackupUtils.signaturesMatch(new Signature[0], packageInfo);
+
+        assertThat(result).isFalse();
+    }
+
+
+    @Test
+    public void
+    signaturesMatch_disallowsUnsignedApps_targetSignatureEmpty_returnsFalse()
+            throws Exception {
+        PackageInfo packageInfo = new PackageInfo();
+        packageInfo.signatures = new Signature[0];
+        packageInfo.applicationInfo = new ApplicationInfo();
+
+        boolean result = AppBackupUtils.signaturesMatch(new Signature[] {SIGNATURE_1},
                 packageInfo);
 
         assertThat(result).isFalse();
     }
 
     @Test
-    public void signaturesMatch_signaturesMatch_returnsTrue() throws Exception {
-        Signature signature1 = generateRandomSignature();
-        Signature signature2 = generateRandomSignature();
-        Signature signature3 = generateRandomSignature();
-        assertThat(signature1).isNotEqualTo(signature2);
-        assertThat(signature2).isNotEqualTo(signature3);
-        assertThat(signature1).isNotEqualTo(signature3);
+    public void
+    signaturesMatch_disallowsUnsignedApps_targetSignatureNull_returnsFalse()
+            throws Exception {
+        PackageInfo packageInfo = new PackageInfo();
+        packageInfo.signatures = null;
+        packageInfo.applicationInfo = new ApplicationInfo();
 
-        Signature signature1Copy = new Signature(signature1.toByteArray());
-        Signature signature2Copy = new Signature(signature2.toByteArray());
-        Signature signature3Copy = new Signature(signature3.toByteArray());
-        assertThat(signature1Copy).isEqualTo(signature1);
-        assertThat(signature2Copy).isEqualTo(signature2);
-        assertThat(signature3Copy).isEqualTo(signature3);
+        boolean result = AppBackupUtils.signaturesMatch(new Signature[] {SIGNATURE_1},
+                packageInfo);
+
+        assertThat(result).isFalse();
+    }
+
+    @Test
+    public void signaturesMatch_disallowsUnsignedApps_bothSignaturesNull_returnsFalse()
+            throws Exception {
+        PackageInfo packageInfo = new PackageInfo();
+        packageInfo.signatures = null;
+        packageInfo.applicationInfo = new ApplicationInfo();
+
+        boolean result = AppBackupUtils.signaturesMatch(null, packageInfo);
+
+        assertThat(result).isFalse();
+    }
+
+    @Test
+    public void signaturesMatch_disallowsUnsignedApps_bothSignaturesEmpty_returnsFalse()
+            throws Exception {
+        PackageInfo packageInfo = new PackageInfo();
+        packageInfo.signatures = new Signature[0];
+        packageInfo.applicationInfo = new ApplicationInfo();
+
+        boolean result = AppBackupUtils.signaturesMatch(new Signature[0], packageInfo);
+
+        assertThat(result).isFalse();
+    }
+
+    @Test
+    public void signaturesMatch_equalSignatures_returnsTrue() throws Exception {
+        Signature signature1Copy = new Signature(SIGNATURE_1.toByteArray());
+        Signature signature2Copy = new Signature(SIGNATURE_2.toByteArray());
+        Signature signature3Copy = new Signature(SIGNATURE_3.toByteArray());
 
         PackageInfo packageInfo = new PackageInfo();
-        packageInfo.signatures = new Signature[]{signature1, signature2, signature3};
+        packageInfo.signatures = new Signature[]{SIGNATURE_1, SIGNATURE_2, SIGNATURE_3};
         packageInfo.applicationInfo = new ApplicationInfo();
 
         boolean result = AppBackupUtils.signaturesMatch(
@@ -341,20 +332,11 @@
 
     @Test
     public void signaturesMatch_extraSignatureInTarget_returnsTrue() throws Exception {
-        Signature signature1 = generateRandomSignature();
-        Signature signature2 = generateRandomSignature();
-        Signature signature3 = generateRandomSignature();
-        assertThat(signature1).isNotEqualTo(signature2);
-        assertThat(signature2).isNotEqualTo(signature3);
-        assertThat(signature1).isNotEqualTo(signature3);
-
-        Signature signature1Copy = new Signature(signature1.toByteArray());
-        Signature signature2Copy = new Signature(signature2.toByteArray());
-        assertThat(signature1Copy).isEqualTo(signature1);
-        assertThat(signature2Copy).isEqualTo(signature2);
+        Signature signature1Copy = new Signature(SIGNATURE_1.toByteArray());
+        Signature signature2Copy = new Signature(SIGNATURE_2.toByteArray());
 
         PackageInfo packageInfo = new PackageInfo();
-        packageInfo.signatures = new Signature[]{signature1, signature2, signature3};
+        packageInfo.signatures = new Signature[]{SIGNATURE_1, SIGNATURE_2, SIGNATURE_3};
         packageInfo.applicationInfo = new ApplicationInfo();
 
         boolean result = AppBackupUtils.signaturesMatch(
@@ -365,96 +347,37 @@
 
     @Test
     public void signaturesMatch_extraSignatureInStored_returnsFalse() throws Exception {
-        Signature signature1 = generateRandomSignature();
-        Signature signature2 = generateRandomSignature();
-        Signature signature3 = generateRandomSignature();
-        assertThat(signature1).isNotEqualTo(signature2);
-        assertThat(signature2).isNotEqualTo(signature3);
-        assertThat(signature1).isNotEqualTo(signature3);
-
-        Signature signature1Copy = new Signature(signature1.toByteArray());
-        Signature signature2Copy = new Signature(signature2.toByteArray());
-        assertThat(signature1Copy).isEqualTo(signature1);
-        assertThat(signature2Copy).isEqualTo(signature2);
+        Signature signature1Copy = new Signature(SIGNATURE_1.toByteArray());
+        Signature signature2Copy = new Signature(SIGNATURE_2.toByteArray());
 
         PackageInfo packageInfo = new PackageInfo();
         packageInfo.signatures = new Signature[]{signature1Copy, signature2Copy};
         packageInfo.applicationInfo = new ApplicationInfo();
 
         boolean result = AppBackupUtils.signaturesMatch(
-                new Signature[]{signature1, signature2, signature3}, packageInfo);
-
-        assertThat(result).isFalse();
-    }
-
-    @Test
-    public void signaturesMatch_emptyStoredSignatures_returnsTrue() throws Exception {
-        Signature signature1 = generateRandomSignature();
-        Signature signature2 = generateRandomSignature();
-        Signature signature3 = generateRandomSignature();
-        assertThat(signature1).isNotEqualTo(signature2);
-        assertThat(signature2).isNotEqualTo(signature3);
-        assertThat(signature1).isNotEqualTo(signature3);
-
-        PackageInfo packageInfo = new PackageInfo();
-        packageInfo.signatures = new Signature[]{signature1, signature2, signature3};
-        packageInfo.applicationInfo = new ApplicationInfo();
-
-        boolean result = AppBackupUtils.signaturesMatch(new Signature[0], packageInfo);
-
-        assertThat(result).isTrue();
-    }
-
-    @Test
-    public void signaturesMatch_emptyTargetSignatures_returnsFalse() throws Exception {
-        Signature signature1 = generateRandomSignature();
-        Signature signature2 = generateRandomSignature();
-        Signature signature3 = generateRandomSignature();
-        assertThat(signature1).isNotEqualTo(signature2);
-        assertThat(signature2).isNotEqualTo(signature3);
-        assertThat(signature1).isNotEqualTo(signature3);
-
-        PackageInfo packageInfo = new PackageInfo();
-        packageInfo.signatures = new Signature[0];
-        packageInfo.applicationInfo = new ApplicationInfo();
-
-        boolean result = AppBackupUtils.signaturesMatch(
-                new Signature[]{signature1, signature2, signature3}, packageInfo);
+                new Signature[]{SIGNATURE_1, SIGNATURE_2, SIGNATURE_3}, packageInfo);
 
         assertThat(result).isFalse();
     }
 
     @Test
     public void signaturesMatch_oneNonMatchingSignature_returnsFalse() throws Exception {
-        Signature signature1 = generateRandomSignature();
-        Signature signature2 = generateRandomSignature();
-        Signature signature3 = generateRandomSignature();
-        Signature signature4 = generateRandomSignature();
-        assertThat(signature1).isNotEqualTo(signature2);
-        assertThat(signature2).isNotEqualTo(signature3);
-        assertThat(signature1).isNotEqualTo(signature3);
-        assertThat(signature1).isNotEqualTo(signature4);
-        assertThat(signature2).isNotEqualTo(signature4);
-        assertThat(signature3).isNotEqualTo(signature4);
-
-        Signature signature1Copy = new Signature(signature1.toByteArray());
-        Signature signature2Copy = new Signature(signature2.toByteArray());
-        assertThat(signature1Copy).isEqualTo(signature1);
-        assertThat(signature2Copy).isEqualTo(signature2);
+        Signature signature1Copy = new Signature(SIGNATURE_1.toByteArray());
+        Signature signature2Copy = new Signature(SIGNATURE_2.toByteArray());
 
         PackageInfo packageInfo = new PackageInfo();
-        packageInfo.signatures = new Signature[]{signature1, signature2, signature3};
+        packageInfo.signatures = new Signature[]{SIGNATURE_1, SIGNATURE_2, SIGNATURE_3};
         packageInfo.applicationInfo = new ApplicationInfo();
 
         boolean result = AppBackupUtils.signaturesMatch(
-                new Signature[]{signature1Copy, signature2Copy, signature4}, packageInfo);
+                new Signature[]{signature1Copy, signature2Copy, SIGNATURE_4}, packageInfo);
 
         assertThat(result).isFalse();
     }
 
-    private Signature generateRandomSignature() {
+    private static Signature generateSignature(byte i) {
         byte[] signatureBytes = new byte[256];
-        mRandom.nextBytes(signatureBytes);
+        signatureBytes[0] = i;
         return new Signature(signatureBytes);
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/backup/utils/DataStreamFileCodecTest.java b/services/tests/servicestests/src/com/android/server/backup/utils/DataStreamFileCodecTest.java
new file mode 100644
index 0000000..bfb95c1
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/backup/utils/DataStreamFileCodecTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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.backup.utils;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.platform.test.annotations.Presubmit;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.IOException;
+
+@SmallTest
+@Presubmit
+@RunWith(AndroidJUnit4.class)
+public final class DataStreamFileCodecTest {
+    @Rule public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+
+    @Test
+    public void serialize_writesToTheFile() throws Exception {
+        File unicornFile = mTemporaryFolder.newFile();
+
+        DataStreamFileCodec<MythicalCreature> mythicalCreatureCodec = new DataStreamFileCodec<>(
+                unicornFile, new MythicalCreatureDataStreamCodec());
+        MythicalCreature unicorn = new MythicalCreature(
+                10000, "Unicorn");
+        mythicalCreatureCodec.serialize(unicorn);
+
+        DataStreamFileCodec<MythicalCreature> newCodecWithSameFile = new DataStreamFileCodec<>(
+                unicornFile, new MythicalCreatureDataStreamCodec());
+        MythicalCreature deserializedUnicorn = newCodecWithSameFile.deserialize();
+
+        assertThat(deserializedUnicorn.averageLifespanInYears)
+                .isEqualTo(unicorn.averageLifespanInYears);
+        assertThat(deserializedUnicorn.name).isEqualTo(unicorn.name);
+    }
+
+    private static class MythicalCreature {
+        int averageLifespanInYears;
+        String name;
+
+        MythicalCreature(int averageLifespanInYears, String name) {
+            this.averageLifespanInYears = averageLifespanInYears;
+            this.name = name;
+        }
+    }
+
+    private static class MythicalCreatureDataStreamCodec implements
+            DataStreamCodec<MythicalCreature> {
+        @Override
+        public void serialize(MythicalCreature mythicalCreature,
+                DataOutputStream dataOutputStream) throws IOException {
+            dataOutputStream.writeInt(mythicalCreature.averageLifespanInYears);
+            dataOutputStream.writeUTF(mythicalCreature.name);
+        }
+
+        @Override
+        public MythicalCreature deserialize(DataInputStream dataInputStream)
+                throws IOException {
+            int years = dataInputStream.readInt();
+            String name = dataInputStream.readUTF();
+            return new MythicalCreature(years, name);
+        }
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/backup/utils/SparseArrayUtilsTest.java b/services/tests/servicestests/src/com/android/server/backup/utils/SparseArrayUtilsTest.java
new file mode 100644
index 0000000..db55120
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/backup/utils/SparseArrayUtilsTest.java
@@ -0,0 +1,55 @@
+/*
+ * 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.backup.utils;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.platform.test.annotations.Presubmit;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.SparseArray;
+
+import com.google.android.collect.Sets;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.HashSet;
+
+@SmallTest
+@Presubmit
+@RunWith(AndroidJUnit4.class)
+public class SparseArrayUtilsTest {
+    @Test
+    public void union_mergesSets() {
+        SparseArray<HashSet<String>> sparseArray = new SparseArray<>();
+        sparseArray.append(12, Sets.newHashSet("a", "b", "c"));
+        sparseArray.append(45, Sets.newHashSet("d", "e"));
+        sparseArray.append(46, Sets.newHashSet());
+        sparseArray.append(66, Sets.newHashSet("a", "e", "f"));
+
+        assertThat(SparseArrayUtils.union(sparseArray)).isEqualTo(
+                Sets.newHashSet("a", "b", "c", "d", "e", "f"));
+    }
+
+    @Test
+    public void union_returnsEmptySetForEmptyList() {
+        SparseArray<HashSet<String>> sparseArray = new SparseArray<>();
+
+        assertThat(SparseArrayUtils.union(sparseArray)).isEqualTo(Sets.newHashSet());
+    }
+}
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 23330f1..3eb659a 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
@@ -69,6 +69,7 @@
 import android.os.Process;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.platform.test.annotations.Presubmit;
 import android.provider.Settings;
 import android.security.KeyChain;
 import android.telephony.TelephonyManager;
@@ -112,6 +113,7 @@
  * runtest -c com.android.server.devicepolicy.DevicePolicyManagerTest frameworks-services
  */
 @SmallTest
+@Presubmit
 public class DevicePolicyManagerTest extends DpmTestBase {
     private static final List<String> OWNER_SETUP_PERMISSIONS = Arrays.asList(
             permission.MANAGE_DEVICE_ADMINS, permission.MANAGE_PROFILE_AND_DEVICE_OWNERS,
@@ -2309,11 +2311,6 @@
         // restore to the debuggable build state
         getServices().buildMock.isDebuggable = true;
 
-        // Always return the default (second arg) when getting system property for long type
-        when(getServices().systemProperties.getLong(anyString(), anyLong())).thenAnswer(
-                invocation -> invocation.getArguments()[1]
-        );
-
         // reset to default (0 means the admin is not participating, so default should be returned)
         dpm.setRequiredStrongAuthTimeout(admin1, 0);
 
@@ -3656,7 +3653,8 @@
 
         // test reset password with token
         when(getServices().lockPatternUtils.setLockCredentialWithToken(eq(password),
-                eq(LockPatternUtils.CREDENTIAL_TYPE_PASSWORD), eq(handle), eq(token),
+                eq(LockPatternUtils.CREDENTIAL_TYPE_PASSWORD),
+                eq(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC), eq(handle), eq(token),
                 eq(UserHandle.USER_SYSTEM)))
                 .thenReturn(true);
         assertTrue(dpm.resetPasswordWithToken(admin1, password, token, 0));
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java
index e0ea573..0c8a787 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java
@@ -16,9 +16,13 @@
 
 package com.android.server.devicepolicy;
 
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
 
 import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
@@ -62,6 +66,7 @@
         adminAnotherPackage = new ComponentName(DpmMockContext.ANOTHER_PACKAGE_NAME,
                 "whatever.random.class");
         adminNoPerm = new ComponentName(mRealTestContext, DummyDeviceAdmins.AdminNoPerm.class);
+        mockSystemPropertiesToReturnDefault();
     }
 
     @Override
@@ -213,4 +218,25 @@
         // Set up getPackageInfo().
         markPackageAsInstalled(admin.getPackageName(), ai, UserHandle.getUserId(packageUid));
     }
+
+    /**
+     * By default, system properties are mocked to return default value. Override the mock if you
+     * want a specific value.
+     */
+    private void mockSystemPropertiesToReturnDefault() {
+        when(getServices().systemProperties.get(
+                anyString(), anyString())).thenAnswer(
+                invocation -> invocation.getArguments()[1]
+        );
+
+        when(getServices().systemProperties.getBoolean(
+                anyString(), anyBoolean())).thenAnswer(
+                invocation -> invocation.getArguments()[1]
+        );
+
+        when(getServices().systemProperties.getLong(
+                anyString(), anyLong())).thenAnswer(
+                invocation -> invocation.getArguments()[1]
+        );
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java
index 689c8f7..31ed8ba 100644
--- a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java
+++ b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java
@@ -10,6 +10,7 @@
 import android.test.AndroidTestCase;
 import android.test.RenamingDelegatingContext;
 import android.util.Log;
+import android.util.Pair;
 
 import com.android.server.job.JobStore.JobSet;
 import com.android.server.job.controllers.JobStatus;
@@ -63,7 +64,7 @@
         Thread.sleep(IO_WAIT);
         // Manually load tasks from xml file.
         final JobSet jobStatusSet = new JobSet();
-        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet);
+        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true);
 
         assertEquals("Didn't get expected number of persisted tasks.", 1, jobStatusSet.size());
         final JobStatus loadedTaskStatus = jobStatusSet.getAllJobs().get(0);
@@ -98,7 +99,7 @@
         Thread.sleep(IO_WAIT);
 
         final JobSet jobStatusSet = new JobSet();
-        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet);
+        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true);
         assertEquals("Incorrect # of persisted tasks.", 2, jobStatusSet.size());
         Iterator<JobStatus> it = jobStatusSet.getAllJobs().iterator();
         JobStatus loaded1 = it.next();
@@ -146,7 +147,7 @@
         Thread.sleep(IO_WAIT);
 
         final JobSet jobStatusSet = new JobSet();
-        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet);
+        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true);
         assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size());
         JobStatus loaded = jobStatusSet.getAllJobs().iterator().next();
         assertTasksEqual(task, loaded.getJob());
@@ -164,7 +165,7 @@
         Thread.sleep(IO_WAIT);
 
         final JobSet jobStatusSet = new JobSet();
-        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet);
+        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true);
         assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size());
         JobStatus loaded = jobStatusSet.getAllJobs().iterator().next();
         assertEquals("Source package not equal.", loaded.getSourcePackageName(),
@@ -185,7 +186,7 @@
         Thread.sleep(IO_WAIT);
 
         final JobSet jobStatusSet = new JobSet();
-        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet);
+        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true);
         assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size());
         JobStatus loaded = jobStatusSet.getAllJobs().iterator().next();
         assertEquals("Period not equal.", loaded.getJob().getIntervalMillis(),
@@ -200,20 +201,23 @@
         JobInfo.Builder b = new Builder(8, mComponent)
                 .setPeriodic(TWO_HOURS, ONE_HOUR)
                 .setPersisted(true);
+        final long rtcNow = System.currentTimeMillis();
         final long invalidLateRuntimeElapsedMillis =
                 SystemClock.elapsedRealtime() + (TWO_HOURS * ONE_HOUR) + TWO_HOURS;  // > period+flex
         final long invalidEarlyRuntimeElapsedMillis =
                 invalidLateRuntimeElapsedMillis - TWO_HOURS;  // Early is (late - period).
+        final Pair<Long, Long> persistedExecutionTimesUTC = new Pair<>(rtcNow, rtcNow + ONE_HOUR);
         final JobStatus js = new JobStatus(b.build(), SOME_UID, "somePackage",
                 0 /* sourceUserId */, "someTag",
                 invalidEarlyRuntimeElapsedMillis, invalidLateRuntimeElapsedMillis,
-                0 /* lastSuccessfulRunTime */, 0 /* lastFailedRunTime */);
+                0 /* lastSuccessfulRunTime */, 0 /* lastFailedRunTime */,
+                persistedExecutionTimesUTC);
 
         mTaskStoreUnderTest.add(js);
         Thread.sleep(IO_WAIT);
 
         final JobSet jobStatusSet = new JobSet();
-        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet);
+        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true);
         assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size());
         JobStatus loaded = jobStatusSet.getAllJobs().iterator().next();
 
@@ -236,7 +240,7 @@
         mTaskStoreUnderTest.add(js);
         Thread.sleep(IO_WAIT);
         final JobSet jobStatusSet = new JobSet();
-        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet);
+        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true);
         JobStatus loaded = jobStatusSet.getAllJobs().iterator().next();
         assertEquals("Priority not correctly persisted.", 42, loaded.getPriority());
     }
@@ -257,7 +261,7 @@
         mTaskStoreUnderTest.add(jsPersisted);
         Thread.sleep(IO_WAIT);
         final JobSet jobStatusSet = new JobSet();
-        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet);
+        mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true);
         assertEquals("Job count is incorrect.", 1, jobStatusSet.size());
         JobStatus jobStatus = jobStatusSet.getAllJobs().iterator().next();
         assertEquals("Wrong job persisted.", 43, jobStatus.getJobId());
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java b/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java
index 84cca0e..7cba280 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java
@@ -20,21 +20,26 @@
 import static org.mockito.Matchers.anyBoolean;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import android.app.IActivityManager;
 import android.app.NotificationManager;
 import android.app.admin.DevicePolicyManager;
+import android.app.trust.TrustManager;
 import android.content.ComponentName;
 import android.content.pm.UserInfo;
 import android.os.FileUtils;
 import android.os.IProgressListener;
+import android.os.RemoteException;
 import android.os.UserManager;
 import android.os.storage.StorageManager;
+import android.os.storage.IStorageManager;
 import android.security.KeyStore;
 import android.test.AndroidTestCase;
 
+import com.android.internal.widget.ILockSettings;
 import com.android.internal.widget.LockPatternUtils;
 
 import org.mockito.invocation.InvocationOnMock;
@@ -64,10 +69,10 @@
     LockSettingsStorageTestable mStorage;
 
     LockPatternUtils mLockPatternUtils;
-    MockGateKeeperService mGateKeeperService;
+    FakeGateKeeperService mGateKeeperService;
     NotificationManager mNotificationManager;
     UserManager mUserManager;
-    MockStorageManager mStorageManager;
+    FakeStorageManager mStorageManager;
     IActivityManager mActivityManager;
     DevicePolicyManager mDevicePolicyManager;
     KeyStore mKeyStore;
@@ -77,16 +82,15 @@
     protected void setUp() throws Exception {
         super.setUp();
 
-        mLockPatternUtils = mock(LockPatternUtils.class);
-        mGateKeeperService = new MockGateKeeperService();
+        mGateKeeperService = new FakeGateKeeperService();
         mNotificationManager = mock(NotificationManager.class);
         mUserManager = mock(UserManager.class);
-        mStorageManager = new MockStorageManager();
+        mStorageManager = new FakeStorageManager();
         mActivityManager = mock(IActivityManager.class);
         mDevicePolicyManager = mock(DevicePolicyManager.class);
 
         mContext = new MockLockSettingsContext(getContext(), mUserManager, mNotificationManager,
-                mDevicePolicyManager, mock(StorageManager.class));
+                mDevicePolicyManager, mock(StorageManager.class), mock(TrustManager.class));
         mStorage = new LockSettingsStorageTestable(mContext,
                 new File(getContext().getFilesDir(), "locksettings"));
         File storageDir = mStorage.mStorageDir;
@@ -96,9 +100,16 @@
             storageDir.mkdirs();
         }
 
-        mSpManager = new MockSyntheticPasswordManager(mStorage, mGateKeeperService, mUserManager);
-        mService = new LockSettingsServiceTestable(mContext, mLockPatternUtils,
-                mStorage, mGateKeeperService, mKeyStore, mStorageManager, mActivityManager,
+        mLockPatternUtils = new LockPatternUtils(mContext) {
+            @Override
+            public ILockSettings getLockSettings() {
+                return mService;
+            }
+        };
+        mSpManager = new MockSyntheticPasswordManager(mContext, mStorage, mGateKeeperService,
+                mUserManager);
+        mService = new LockSettingsServiceTestable(mContext, mLockPatternUtils, mStorage,
+                mGateKeeperService, mKeyStore, setUpStorageManagerMock(), mActivityManager,
                 mSpManager);
         when(mUserManager.getUserInfo(eq(PRIMARY_USER_ID))).thenReturn(PRIMARY_USER_INFO);
         mPrimaryUserProfiles.add(PRIMARY_USER_INFO);
@@ -119,8 +130,6 @@
             }
         });
 
-        when(mLockPatternUtils.getLockSettings()).thenReturn(mService);
-
         // Adding a fake Device Owner app which will enable escrow token support in LSS.
         when(mDevicePolicyManager.getDeviceOwnerComponentOnAnyUser()).thenReturn(
                 new ComponentName("com.dummy.package", ".FakeDeviceOwner"));
@@ -145,6 +154,33 @@
         return userInfo;
     }
 
+    private IStorageManager setUpStorageManagerMock() throws RemoteException {
+        final IStorageManager sm = mock(IStorageManager.class);
+
+        doAnswer(new Answer<Void>() {
+            @Override
+            public Void answer(InvocationOnMock invocation) throws Throwable {
+                Object[] args = invocation.getArguments();
+                mStorageManager.addUserKeyAuth((int) args[0] /* userId */,
+                        (int) args[1] /* serialNumber */,
+                        (byte[]) args[2] /* token */,
+                        (byte[]) args[3] /* secret */);
+                return null;
+            }
+        }).when(sm).addUserKeyAuth(anyInt(), anyInt(), any(), any());
+
+        doAnswer(
+                new Answer<Void>() {
+            @Override
+            public Void answer(InvocationOnMock invocation) throws Throwable {
+                Object[] args = invocation.getArguments();
+                mStorageManager.fixateNewestUserKeyAuth((int) args[0] /* userId */);
+                return null;
+            }
+        }).when(sm).fixateNewestUserKeyAuth(anyInt());
+        return sm;
+    }
+
     @Override
     protected void tearDown() throws Exception {
         super.tearDown();
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/FakeGateKeeperService.java b/services/tests/servicestests/src/com/android/server/locksettings/FakeGateKeeperService.java
new file mode 100644
index 0000000..094b7af
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/locksettings/FakeGateKeeperService.java
@@ -0,0 +1,198 @@
+/*
+ * 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.locksettings;
+
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.service.gatekeeper.GateKeeperResponse;
+import android.service.gatekeeper.IGateKeeperService;
+import android.util.ArrayMap;
+
+import junit.framework.AssertionFailedError;
+
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import java.util.Random;
+
+public class FakeGateKeeperService implements IGateKeeperService {
+    static class VerifyHandle {
+        public byte[] password;
+        public long sid;
+
+        public VerifyHandle(byte[] password, long sid) {
+            this.password = password;
+            this.sid = sid;
+        }
+
+        public VerifyHandle(byte[] handle) {
+            ByteBuffer buffer = ByteBuffer.allocate(handle.length);
+            buffer.put(handle, 0, handle.length);
+            buffer.flip();
+            int version = buffer.get();
+            sid = buffer.getLong();
+            password = new byte[buffer.remaining()];
+            buffer.get(password);
+        }
+
+        public byte[] toBytes() {
+            ByteBuffer buffer = ByteBuffer.allocate(1 + Long.BYTES + password.length);
+            buffer.put((byte)0);
+            buffer.putLong(sid);
+            buffer.put(password);
+            return buffer.array();
+        }
+    }
+
+    static class AuthToken {
+        public long challenge;
+        public long sid;
+
+        public AuthToken(long challenge, long sid) {
+            this.challenge = challenge;
+            this.sid = sid;
+        }
+
+        public AuthToken(byte[] handle) {
+            ByteBuffer buffer = ByteBuffer.allocate(handle.length);
+            buffer.put(handle, 0, handle.length);
+            buffer.flip();
+            int version = buffer.get();
+            challenge = buffer.getLong();
+            sid = buffer.getLong();
+        }
+
+        public byte[] toBytes() {
+            ByteBuffer buffer = ByteBuffer.allocate(1 + Long.BYTES + Long.BYTES);
+            buffer.put((byte)0);
+            buffer.putLong(challenge);
+            buffer.putLong(sid);
+            return buffer.array();
+        }
+    }
+
+    private ArrayMap<Integer, Long> sidMap = new ArrayMap<>();
+    private ArrayMap<Integer, AuthToken> authTokenMap = new ArrayMap<>();
+
+    private ArrayMap<Integer, byte[]> handleMap = new ArrayMap<>();
+
+    @Override
+    public GateKeeperResponse enroll(int uid, byte[] currentPasswordHandle, byte[] currentPassword,
+            byte[] desiredPassword) throws android.os.RemoteException {
+        if (currentPasswordHandle != null) {
+            VerifyHandle handle = new VerifyHandle(currentPasswordHandle);
+            if (Arrays.equals(currentPassword, handle.password)) {
+                // Trusted enroll
+                VerifyHandle newHandle = new VerifyHandle(desiredPassword, handle.sid);
+                refreshSid(uid, handle.sid, false);
+                handleMap.put(uid, newHandle.toBytes());
+                return GateKeeperResponse.createOkResponse(newHandle.toBytes(), false);
+            } else if (currentPassword != null) {
+                // current password is provided but does not match handle, this is an error case.
+                return null;
+            }
+            // Fall through: password handle is provided, but no password
+        }
+        // Untrusted/new enrollment: generate a new SID
+        long newSid = new Random().nextLong();
+        VerifyHandle newHandle = new VerifyHandle(desiredPassword, newSid);
+        refreshSid(uid, newSid, true);
+        handleMap.put(uid, newHandle.toBytes());
+        return GateKeeperResponse.createOkResponse(newHandle.toBytes(), false);
+    }
+
+    @Override
+    public GateKeeperResponse verify(int uid, byte[] enrolledPasswordHandle,
+            byte[] providedPassword) throws android.os.RemoteException {
+        return verifyChallenge(uid, 0, enrolledPasswordHandle, providedPassword);
+    }
+
+    @Override
+    public GateKeeperResponse verifyChallenge(int uid, long challenge,
+            byte[] enrolledPasswordHandle, byte[] providedPassword) throws RemoteException {
+
+        VerifyHandle handle = new VerifyHandle(enrolledPasswordHandle);
+        if (Arrays.equals(handle.password, providedPassword)) {
+            byte[] knownHandle = handleMap.get(uid);
+            if (knownHandle != null) {
+                if (!Arrays.equals(knownHandle, enrolledPasswordHandle)) {
+                    throw new AssertionFailedError("Got correct but obsolete handle");
+                }
+            }
+            refreshSid(uid, handle.sid, false);
+            AuthToken token = new AuthToken(challenge, handle.sid);
+            refreshAuthToken(uid, token);
+            return GateKeeperResponse.createOkResponse(token.toBytes(), false);
+        } else {
+            return GateKeeperResponse.createGenericResponse(GateKeeperResponse.RESPONSE_ERROR);
+        }
+    }
+
+    private void refreshAuthToken(int uid, AuthToken token) {
+        authTokenMap.put(uid, token);
+    }
+
+    public AuthToken getAuthToken(int uid) {
+        return authTokenMap.get(uid);
+    }
+
+    public AuthToken getAuthTokenForSid(long sid) {
+        for(AuthToken token : authTokenMap.values()) {
+            if (token.sid == sid) {
+                return token;
+            }
+        }
+        return null;
+    }
+
+    public void clearAuthToken(int uid) {
+        authTokenMap.remove(uid);
+    }
+
+    @Override
+    public IBinder asBinder() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void clearSecureUserId(int userId) throws RemoteException {
+        sidMap.remove(userId);
+    }
+
+    @Override
+    public void reportDeviceSetupComplete() throws RemoteException {
+    }
+
+    @Override
+    public long getSecureUserId(int userId) throws RemoteException {
+        if (sidMap.containsKey(userId)) {
+            return sidMap.get(userId);
+        } else {
+            return 0L;
+        }
+    }
+
+    private void refreshSid(int uid, long sid, boolean force) {
+        if (!sidMap.containsKey(uid) || force) {
+            sidMap.put(uid, sid);
+        } else{
+            if (sidMap.get(uid) != sid) {
+                throw new AssertionFailedError("Inconsistent SID");
+            }
+        }
+    }
+
+}
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/FakeStorageManager.java b/services/tests/servicestests/src/com/android/server/locksettings/FakeStorageManager.java
new file mode 100644
index 0000000..dbdb41b
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/locksettings/FakeStorageManager.java
@@ -0,0 +1,86 @@
+/*
+ * 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.locksettings;
+
+import android.os.IProgressListener;
+import android.os.RemoteException;
+import android.util.ArrayMap;
+import android.util.Pair;
+
+
+import junit.framework.AssertionFailedError;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+public class FakeStorageManager {
+
+    private ArrayMap<Integer, ArrayList<Pair<byte[], byte[]>>> mAuth = new ArrayMap<>();
+    private boolean mIgnoreBadUnlock;
+
+    public void addUserKeyAuth(int userId, int serialNumber, byte[] token, byte[] secret) {
+        getUserAuth(userId).add(new Pair<>(token, secret));
+    }
+
+    public void fixateNewestUserKeyAuth(int userId) {
+        ArrayList<Pair<byte[], byte[]>> auths = mAuth.get(userId);
+        Pair<byte[], byte[]> latest = auths.get(auths.size() - 1);
+        auths.clear();
+        auths.add(latest);
+    }
+
+    private ArrayList<Pair<byte[], byte[]>> getUserAuth(int userId) {
+        if (!mAuth.containsKey(userId)) {
+            ArrayList<Pair<byte[], byte[]>> auths = new ArrayList<Pair<byte[], byte[]>>();
+            auths.add(new Pair(null, null));
+            mAuth.put(userId,  auths);
+        }
+        return mAuth.get(userId);
+    }
+
+    public byte[] getUserUnlockToken(int userId) {
+        ArrayList<Pair<byte[], byte[]>> auths = getUserAuth(userId);
+        if (auths.size() != 1) {
+            throw new AssertionFailedError("More than one secret exists");
+        }
+        return auths.get(0).second;
+    }
+
+    public void unlockUser(int userId, byte[] secret, IProgressListener listener)
+            throws RemoteException {
+        listener.onStarted(userId, null);
+        listener.onFinished(userId, null);
+        ArrayList<Pair<byte[], byte[]>> auths = getUserAuth(userId);
+        if (secret != null) {
+            if (auths.size() > 1) {
+                throw new AssertionFailedError("More than one secret exists");
+            }
+            Pair<byte[], byte[]> auth = auths.get(0);
+            if ((!mIgnoreBadUnlock) && auth.second != null && !Arrays.equals(secret, auth.second)) {
+                throw new AssertionFailedError("Invalid secret to unlock user");
+            }
+        } else {
+            if (auths != null && auths.size() > 0) {
+                throw new AssertionFailedError("Cannot unlock encrypted user with empty token");
+            }
+        }
+    }
+
+    public void setIgnoreBadUnlock(boolean ignore) {
+        mIgnoreBadUnlock = ignore;
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTestable.java b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTestable.java
index 3a4aa2d..0916a33 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTestable.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTestable.java
@@ -21,6 +21,7 @@
 import android.app.IActivityManager;
 import android.content.Context;
 import android.os.Handler;
+import android.os.Looper;
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.storage.IStorageManager;
@@ -56,7 +57,7 @@
 
         @Override
         public Handler getHandler() {
-            return mock(Handler.class);
+            return new Handler(Looper.getMainLooper());
         }
 
         @Override
@@ -103,12 +104,10 @@
         public int binderGetCallingUid() {
             return Process.SYSTEM_UID;
         }
-
-
     }
 
     protected LockSettingsServiceTestable(Context context, LockPatternUtils lockPatternUtils,
-            LockSettingsStorage storage, MockGateKeeperService gatekeeper, KeyStore keystore,
+            LockSettingsStorage storage, FakeGateKeeperService gatekeeper, KeyStore keystore,
             IStorageManager storageManager, IActivityManager mActivityManager,
             SyntheticPasswordManager spManager) {
         super(new MockInjector(context, storage, keystore, mActivityManager, lockPatternUtils,
@@ -137,4 +136,5 @@
         }
         return new String(storedData);
     }
+
 }
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java
index cb32492..e12f6d3 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java
@@ -26,12 +26,13 @@
 import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PATTERN;
 
 import android.os.RemoteException;
+import android.os.UserHandle;
 import android.service.gatekeeper.GateKeeperResponse;
 
 import com.android.internal.widget.LockPatternUtils;
 import com.android.internal.widget.VerifyCredentialResponse;
 import com.android.server.locksettings.LockSettingsStorage.CredentialHash;
-import com.android.server.locksettings.MockGateKeeperService.VerifyHandle;
+import com.android.server.locksettings.FakeGateKeeperService.VerifyHandle;
 
 /**
  * runtest frameworks-services -c com.android.server.locksettings.LockSettingsServiceTests
@@ -80,13 +81,6 @@
         } catch (RemoteException expected) {
             assertTrue(expected.getMessage().equals(FAILED_MESSAGE));
         }
-        try {
-            mService.setLockCredential("newpwd", CREDENTIAL_TYPE_PASSWORD, null,
-                    PASSWORD_QUALITY_UNSPECIFIED, PRIMARY_USER_ID);
-            fail("Did not fail when enrolling using incorrect credential");
-        } catch (RemoteException expected) {
-            assertTrue(expected.getMessage().equals(FAILED_MESSAGE));
-        }
         assertVerifyCredentials(PRIMARY_USER_ID, "password", CREDENTIAL_TYPE_PASSWORD, sid);
     }
 
@@ -101,9 +95,10 @@
     }
 
     public void testManagedProfileUnifiedChallenge() throws RemoteException {
-        final String UnifiedPassword = "testManagedProfileUnifiedChallenge-pwd";
-        mService.setLockCredential(UnifiedPassword, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, null,
-                PASSWORD_QUALITY_COMPLEX, PRIMARY_USER_ID);
+        final String firstUnifiedPassword = "testManagedProfileUnifiedChallenge-pwd-1";
+        final String secondUnifiedPassword = "testManagedProfileUnifiedChallenge-pwd-2";
+        mService.setLockCredential(firstUnifiedPassword, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD,
+                null, PASSWORD_QUALITY_COMPLEX, PRIMARY_USER_ID);
         mService.setSeparateProfileChallengeEnabled(MANAGED_PROFILE_USER_ID, false, null);
         final long primarySid = mGateKeeperService.getSecureUserId(PRIMARY_USER_ID);
         final long profileSid = mGateKeeperService.getSecureUserId(MANAGED_PROFILE_USER_ID);
@@ -121,7 +116,7 @@
         mGateKeeperService.clearAuthToken(TURNED_OFF_PROFILE_USER_ID);
         // verify credential
         assertEquals(VerifyCredentialResponse.RESPONSE_OK, mService.verifyCredential(
-                UnifiedPassword, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, 0, PRIMARY_USER_ID)
+                firstUnifiedPassword, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, 0, PRIMARY_USER_ID)
                 .getResponseCode());
 
         // Verify that we have a new auth token for the profile
@@ -137,15 +132,15 @@
          */
         mStorageManager.setIgnoreBadUnlock(true);
         // Change primary password and verify that profile SID remains
-        mService.setLockCredential("pwd", LockPatternUtils.CREDENTIAL_TYPE_PASSWORD,
-                UnifiedPassword, PASSWORD_QUALITY_ALPHABETIC, PRIMARY_USER_ID);
+        mService.setLockCredential(secondUnifiedPassword, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD,
+                firstUnifiedPassword, PASSWORD_QUALITY_ALPHABETIC, PRIMARY_USER_ID);
         mStorageManager.setIgnoreBadUnlock(false);
         assertEquals(profileSid, mGateKeeperService.getSecureUserId(MANAGED_PROFILE_USER_ID));
         assertNull(mGateKeeperService.getAuthToken(TURNED_OFF_PROFILE_USER_ID));
 
         // Clear unified challenge
-        mService.setLockCredential(null, LockPatternUtils.CREDENTIAL_TYPE_NONE, UnifiedPassword,
-                PASSWORD_QUALITY_UNSPECIFIED, PRIMARY_USER_ID);
+        mService.setLockCredential(null, LockPatternUtils.CREDENTIAL_TYPE_NONE,
+                secondUnifiedPassword, PASSWORD_QUALITY_UNSPECIFIED, PRIMARY_USER_ID);
         assertEquals(0, mGateKeeperService.getSecureUserId(PRIMARY_USER_ID));
         assertEquals(0, mGateKeeperService.getSecureUserId(MANAGED_PROFILE_USER_ID));
         assertEquals(0, mGateKeeperService.getSecureUserId(TURNED_OFF_PROFILE_USER_ID));
@@ -241,14 +236,21 @@
                 type, challenge, userId).getResponseCode());
     }
 
-    private void initializeStorageWithCredential(int userId, String credential, int type, long sid) {
+    private void initializeStorageWithCredential(int userId, String credential, int type, long sid)
+            throws RemoteException {
         byte[] oldHash = new VerifyHandle(credential.getBytes(), sid).toBytes();
-        if (type == LockPatternUtils.CREDENTIAL_TYPE_PASSWORD) {
-            mStorage.writeCredentialHash(CredentialHash.create(oldHash,
-                    LockPatternUtils.CREDENTIAL_TYPE_PASSWORD), userId);
+        if (mService.shouldMigrateToSyntheticPasswordLocked(userId)) {
+            mService.initializeSyntheticPasswordLocked(oldHash, credential, type,
+                    type == LockPatternUtils.CREDENTIAL_TYPE_PASSWORD ? PASSWORD_QUALITY_ALPHABETIC
+                            : PASSWORD_QUALITY_SOMETHING, userId);
         } else {
-            mStorage.writeCredentialHash(CredentialHash.create(oldHash,
-                    LockPatternUtils.CREDENTIAL_TYPE_PATTERN), userId);
+            if (type == LockPatternUtils.CREDENTIAL_TYPE_PASSWORD) {
+                mStorage.writeCredentialHash(CredentialHash.create(oldHash,
+                        LockPatternUtils.CREDENTIAL_TYPE_PASSWORD), userId);
+            } else {
+                mStorage.writeCredentialHash(CredentialHash.create(oldHash,
+                        LockPatternUtils.CREDENTIAL_TYPE_PATTERN), userId);
+            }
         }
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java
index a0578c9..b0325cb 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java
@@ -22,6 +22,7 @@
 
 import android.app.NotificationManager;
 import android.app.admin.DevicePolicyManager;
+import android.app.trust.TrustManager;
 import android.content.pm.UserInfo;
 import android.database.sqlite.SQLiteDatabase;
 import android.os.FileUtils;
@@ -74,7 +75,7 @@
 
         MockLockSettingsContext context = new MockLockSettingsContext(getContext(), mockUserManager,
                 mock(NotificationManager.class), mock(DevicePolicyManager.class),
-                mock(StorageManager.class));
+                mock(StorageManager.class), mock(TrustManager.class));
         mStorage = new LockSettingsStorageTestable(context,
                 new File(getContext().getFilesDir(), "locksettings"));
         mStorage.setDatabaseOnCreateCallback(new LockSettingsStorage.Callback() {
@@ -346,11 +347,11 @@
     }
 
     public void testPersistentData_serializeUnserialize() {
-        byte[] serialized = PersistentData.toBytes(PersistentData.TYPE_GATEKEEPER, SOME_USER_ID,
+        byte[] serialized = PersistentData.toBytes(PersistentData.TYPE_SP, SOME_USER_ID,
                 DevicePolicyManager.PASSWORD_QUALITY_COMPLEX, PAYLOAD);
         PersistentData deserialized = PersistentData.fromBytes(serialized);
 
-        assertEquals(PersistentData.TYPE_GATEKEEPER, deserialized.type);
+        assertEquals(PersistentData.TYPE_SP, deserialized.type);
         assertEquals(DevicePolicyManager.PASSWORD_QUALITY_COMPLEX, deserialized.qualityForUi);
         assertArrayEquals(PAYLOAD, deserialized.payload);
     }
@@ -370,7 +371,7 @@
         // the wire format in the future.
         byte[] serializedVersion1 = new byte[] {
                 1, /* PersistentData.VERSION_1 */
-                2, /* PersistentData.TYPE_SP */
+                1, /* PersistentData.TYPE_SP */
                 0x00, 0x00, 0x04, 0x0A,  /* SOME_USER_ID */
                 0x00, 0x03, 0x00, 0x00,  /* PASSWORD_NUMERIC_COMPLEX */
                 1, 2, -1, -2, 33, /* PAYLOAD */
@@ -384,9 +385,8 @@
 
         // Make sure the constants we use on the wire do not change.
         assertEquals(0, PersistentData.TYPE_NONE);
-        assertEquals(1, PersistentData.TYPE_GATEKEEPER);
-        assertEquals(2, PersistentData.TYPE_SP);
-        assertEquals(3, PersistentData.TYPE_SP_WEAVER);
+        assertEquals(1, PersistentData.TYPE_SP);
+        assertEquals(2, PersistentData.TYPE_SP_WEAVER);
     }
 
     public void testCredentialHash_serializeUnserialize() {
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/MockGateKeeperService.java b/services/tests/servicestests/src/com/android/server/locksettings/MockGateKeeperService.java
deleted file mode 100644
index b89c1d1..0000000
--- a/services/tests/servicestests/src/com/android/server/locksettings/MockGateKeeperService.java
+++ /dev/null
@@ -1,198 +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.locksettings;
-
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.service.gatekeeper.GateKeeperResponse;
-import android.service.gatekeeper.IGateKeeperService;
-import android.util.ArrayMap;
-
-import junit.framework.AssertionFailedError;
-
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-import java.util.Random;
-
-public class MockGateKeeperService implements IGateKeeperService {
-    static class VerifyHandle {
-        public byte[] password;
-        public long sid;
-
-        public VerifyHandle(byte[] password, long sid) {
-            this.password = password;
-            this.sid = sid;
-        }
-
-        public VerifyHandle(byte[] handle) {
-            ByteBuffer buffer = ByteBuffer.allocate(handle.length);
-            buffer.put(handle, 0, handle.length);
-            buffer.flip();
-            int version = buffer.get();
-            sid = buffer.getLong();
-            password = new byte[buffer.remaining()];
-            buffer.get(password);
-        }
-
-        public byte[] toBytes() {
-            ByteBuffer buffer = ByteBuffer.allocate(1 + Long.BYTES + password.length);
-            buffer.put((byte)0);
-            buffer.putLong(sid);
-            buffer.put(password);
-            return buffer.array();
-        }
-    }
-
-    static class AuthToken {
-        public long challenge;
-        public long sid;
-
-        public AuthToken(long challenge, long sid) {
-            this.challenge = challenge;
-            this.sid = sid;
-        }
-
-        public AuthToken(byte[] handle) {
-            ByteBuffer buffer = ByteBuffer.allocate(handle.length);
-            buffer.put(handle, 0, handle.length);
-            buffer.flip();
-            int version = buffer.get();
-            challenge = buffer.getLong();
-            sid = buffer.getLong();
-        }
-
-        public byte[] toBytes() {
-            ByteBuffer buffer = ByteBuffer.allocate(1 + Long.BYTES + Long.BYTES);
-            buffer.put((byte)0);
-            buffer.putLong(challenge);
-            buffer.putLong(sid);
-            return buffer.array();
-        }
-    }
-
-    private ArrayMap<Integer, Long> sidMap = new ArrayMap<>();
-    private ArrayMap<Integer, AuthToken> authTokenMap = new ArrayMap<>();
-
-    private ArrayMap<Integer, byte[]> handleMap = new ArrayMap<>();
-
-    @Override
-    public GateKeeperResponse enroll(int uid, byte[] currentPasswordHandle, byte[] currentPassword,
-            byte[] desiredPassword) throws android.os.RemoteException {
-
-        if (currentPasswordHandle != null) {
-            VerifyHandle handle = new VerifyHandle(currentPasswordHandle);
-            if (Arrays.equals(currentPassword, handle.password)) {
-                // Trusted enroll
-                VerifyHandle newHandle = new VerifyHandle(desiredPassword, handle.sid);
-                refreshSid(uid, handle.sid, false);
-                handleMap.put(uid, newHandle.toBytes());
-                return GateKeeperResponse.createOkResponse(newHandle.toBytes(), false);
-            } else {
-                return null;
-            }
-        } else {
-            // Untrusted enroll
-            long newSid = new Random().nextLong();
-            VerifyHandle newHandle = new VerifyHandle(desiredPassword, newSid);
-            refreshSid(uid, newSid, true);
-            handleMap.put(uid, newHandle.toBytes());
-            return GateKeeperResponse.createOkResponse(newHandle.toBytes(), false);
-        }
-    }
-
-    @Override
-    public GateKeeperResponse verify(int uid, byte[] enrolledPasswordHandle,
-            byte[] providedPassword) throws android.os.RemoteException {
-        return verifyChallenge(uid, 0, enrolledPasswordHandle, providedPassword);
-    }
-
-    @Override
-    public GateKeeperResponse verifyChallenge(int uid, long challenge,
-            byte[] enrolledPasswordHandle, byte[] providedPassword) throws RemoteException {
-
-        VerifyHandle handle = new VerifyHandle(enrolledPasswordHandle);
-        if (Arrays.equals(handle.password, providedPassword)) {
-            byte[] knownHandle = handleMap.get(uid);
-            if (knownHandle != null) {
-                if (!Arrays.equals(knownHandle, enrolledPasswordHandle)) {
-                    throw new AssertionFailedError("Got correct but obsolete handle");
-                }
-            }
-            refreshSid(uid, handle.sid, false);
-            AuthToken token = new AuthToken(challenge, handle.sid);
-            refreshAuthToken(uid, token);
-            return GateKeeperResponse.createOkResponse(token.toBytes(), false);
-        } else {
-            return GateKeeperResponse.createGenericResponse(GateKeeperResponse.RESPONSE_ERROR);
-        }
-    }
-
-    private void refreshAuthToken(int uid, AuthToken token) {
-        authTokenMap.put(uid, token);
-    }
-
-    public AuthToken getAuthToken(int uid) {
-        return authTokenMap.get(uid);
-    }
-
-    public AuthToken getAuthTokenForSid(long sid) {
-        for(AuthToken token : authTokenMap.values()) {
-            if (token.sid == sid) {
-                return token;
-            }
-        }
-        return null;
-    }
-
-    public void clearAuthToken(int uid) {
-        authTokenMap.remove(uid);
-    }
-
-    @Override
-    public IBinder asBinder() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void clearSecureUserId(int userId) throws RemoteException {
-        sidMap.remove(userId);
-    }
-
-    @Override
-    public void reportDeviceSetupComplete() throws RemoteException {
-    }
-
-    @Override
-    public long getSecureUserId(int userId) throws RemoteException {
-        if (sidMap.containsKey(userId)) {
-            return sidMap.get(userId);
-        } else {
-            return 0L;
-        }
-    }
-
-    private void refreshSid(int uid, long sid, boolean force) {
-        if (!sidMap.containsKey(uid) || force) {
-            sidMap.put(uid, sid);
-        } else{
-            if (sidMap.get(uid) != sid) {
-                throw new AssertionFailedError("Inconsistent SID");
-            }
-        }
-    }
-
-}
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/MockLockSettingsContext.java b/services/tests/servicestests/src/com/android/server/locksettings/MockLockSettingsContext.java
index 8da33a8..3ad30f3 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/MockLockSettingsContext.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/MockLockSettingsContext.java
@@ -18,8 +18,10 @@
 
 import android.app.NotificationManager;
 import android.app.admin.DevicePolicyManager;
+import android.app.trust.TrustManager;
 import android.content.Context;
 import android.content.ContextWrapper;
+import android.content.pm.PackageManager;
 import android.os.UserManager;
 import android.os.storage.StorageManager;
 
@@ -29,15 +31,17 @@
     private NotificationManager mNotificationManager;
     private DevicePolicyManager mDevicePolicyManager;
     private StorageManager mStorageManager;
+    private TrustManager mTrustManager;
 
     public MockLockSettingsContext(Context base, UserManager userManager,
             NotificationManager notificationManager, DevicePolicyManager devicePolicyManager,
-            StorageManager storageManager) {
+            StorageManager storageManager, TrustManager trustManager) {
         super(base);
         mUserManager = userManager;
         mNotificationManager = notificationManager;
         mDevicePolicyManager = devicePolicyManager;
         mStorageManager = storageManager;
+        mTrustManager = trustManager;
     }
 
     @Override
@@ -50,6 +54,8 @@
             return mDevicePolicyManager;
         } else if (STORAGE_SERVICE.equals(name)) {
             return mStorageManager;
+        } else if (TRUST_SERVICE.equals(name)) {
+            return mTrustManager;
         } else {
             throw new RuntimeException("System service not mocked: " + name);
         }
@@ -60,4 +66,8 @@
         // Skip permission checks for unit tests.
     }
 
+    @Override
+    public int checkCallingOrSelfPermission(String permission) {
+        return PackageManager.PERMISSION_GRANTED;
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/MockStorageManager.java b/services/tests/servicestests/src/com/android/server/locksettings/MockStorageManager.java
deleted file mode 100644
index 40e114b..0000000
--- a/services/tests/servicestests/src/com/android/server/locksettings/MockStorageManager.java
+++ /dev/null
@@ -1,507 +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.locksettings;
-
-import android.content.pm.IPackageMoveObserver;
-import android.os.IBinder;
-import android.os.IProgressListener;
-import android.os.ParcelFileDescriptor;
-import android.os.RemoteException;
-import android.os.storage.DiskInfo;
-import android.os.storage.IObbActionListener;
-import android.os.storage.IStorageEventListener;
-import android.os.storage.IStorageManager;
-import android.os.storage.IStorageShutdownObserver;
-import android.os.storage.StorageVolume;
-import android.os.storage.VolumeInfo;
-import android.os.storage.VolumeRecord;
-import android.util.ArrayMap;
-import android.util.Pair;
-
-import com.android.internal.os.AppFuseMount;
-
-import junit.framework.AssertionFailedError;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-
-public class MockStorageManager implements IStorageManager {
-
-    private ArrayMap<Integer, ArrayList<Pair<byte[], byte[]>>> mAuth = new ArrayMap<>();
-    private boolean mIgnoreBadUnlock;
-
-    @Override
-    public void addUserKeyAuth(int userId, int serialNumber, byte[] token, byte[] secret)
-            throws RemoteException {
-        getUserAuth(userId).add(new Pair<>(token, secret));
-    }
-
-    @Override
-    public void fixateNewestUserKeyAuth(int userId) throws RemoteException {
-        ArrayList<Pair<byte[], byte[]>> auths = mAuth.get(userId);
-        Pair<byte[], byte[]> latest = auths.get(auths.size() - 1);
-        auths.clear();
-        auths.add(latest);
-    }
-
-    private ArrayList<Pair<byte[], byte[]>> getUserAuth(int userId) {
-        if (!mAuth.containsKey(userId)) {
-            ArrayList<Pair<byte[], byte[]>> auths = new ArrayList<Pair<byte[], byte[]>>();
-            auths.add(new Pair(null, null));
-            mAuth.put(userId,  auths);
-        }
-        return mAuth.get(userId);
-    }
-
-    public byte[] getUserUnlockToken(int userId) {
-        ArrayList<Pair<byte[], byte[]>> auths = getUserAuth(userId);
-        if (auths.size() != 1) {
-            throw new AssertionFailedError("More than one secret exists");
-        }
-        return auths.get(0).second;
-    }
-
-    public void unlockUser(int userId, byte[] secret, IProgressListener listener)
-            throws RemoteException {
-        listener.onStarted(userId, null);
-        listener.onFinished(userId, null);
-        ArrayList<Pair<byte[], byte[]>> auths = getUserAuth(userId);
-        if (secret != null) {
-            if (auths.size() > 1) {
-                throw new AssertionFailedError("More than one secret exists");
-            }
-            Pair<byte[], byte[]> auth = auths.get(0);
-            if ((!mIgnoreBadUnlock) && auth.second != null && !Arrays.equals(secret, auth.second)) {
-                throw new AssertionFailedError("Invalid secret to unlock user");
-            }
-        } else {
-            if (auths != null && auths.size() > 0) {
-                throw new AssertionFailedError("Cannot unlock encrypted user with empty token");
-            }
-        }
-    }
-
-    public void setIgnoreBadUnlock(boolean ignore) {
-        mIgnoreBadUnlock = ignore;
-    }
-
-    @Override
-    public IBinder asBinder() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void registerListener(IStorageEventListener listener) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void unregisterListener(IStorageEventListener listener) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isUsbMassStorageConnected() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setUsbMassStorageEnabled(boolean enable) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isUsbMassStorageEnabled() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int mountVolume(String mountPoint) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void unmountVolume(String mountPoint, boolean force, boolean removeEncryption)
-            throws RemoteException {
-        throw new UnsupportedOperationException();
-
-    }
-
-    @Override
-    public int formatVolume(String mountPoint) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int[] getStorageUsers(String path) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getVolumeState(String mountPoint) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int createSecureContainer(String id, int sizeMb, String fstype, String key, int ownerUid,
-            boolean external) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int finalizeSecureContainer(String id) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int destroySecureContainer(String id, boolean force) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int mountSecureContainer(String id, String key, int ownerUid, boolean readOnly)
-            throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int unmountSecureContainer(String id, boolean force) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isSecureContainerMounted(String id) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int renameSecureContainer(String oldId, String newId) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getSecureContainerPath(String id) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String[] getSecureContainerList() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void shutdown(IStorageShutdownObserver observer) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void finishMediaUpdate() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void mountObb(String rawPath, String canonicalPath, String key, IObbActionListener token,
-            int nonce) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void unmountObb(String rawPath, boolean force, IObbActionListener token, int nonce)
-            throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isObbMounted(String rawPath) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getMountedObbPath(String rawPath) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isExternalStorageEmulated() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int decryptStorage(String password) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int encryptStorage(int type, String password) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int changeEncryptionPassword(int type, String password) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public StorageVolume[] getVolumeList(int uid, String packageName, int flags)
-            throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getSecureContainerFilesystemPath(String cid) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int getEncryptionState() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int verifyEncryptionPassword(String password) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int fixPermissionsSecureContainer(String id, int gid, String filename)
-            throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int mkdirs(String callingPkg, String path) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int getPasswordType() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getPassword() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void clearPassword() throws RemoteException {
-        throw new UnsupportedOperationException();
-
-    }
-
-    @Override
-    public void setField(String field, String contents) throws RemoteException {
-        throw new UnsupportedOperationException();
-
-    }
-
-    @Override
-    public String getField(String field) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int resizeSecureContainer(String id, int sizeMb, String key) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public long lastMaintenance() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void runMaintenance() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void waitForAsecScan() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public DiskInfo[] getDisks() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public VolumeInfo[] getVolumes(int flags) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public VolumeRecord[] getVolumeRecords(int flags) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void mount(String volId) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void unmount(String volId) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void format(String volId) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void partitionPublic(String diskId) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void partitionPrivate(String diskId) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void partitionMixed(String diskId, int ratio) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setVolumeNickname(String fsUuid, String nickname) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setVolumeUserFlags(String fsUuid, int flags, int mask) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void forgetVolume(String fsUuid) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void forgetAllVolumes() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getPrimaryStorageUuid() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setPrimaryStorageUuid(String volumeUuid, IPackageMoveObserver callback)
-            throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public long benchmark(String volId) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setDebugFlags(int flags, int mask) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void createUserKey(int userId, int serialNumber, boolean ephemeral)
-            throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void destroyUserKey(int userId) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void unlockUserKey(int userId, int serialNumber, byte[] token, byte[] secret)
-            throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void lockUserKey(int userId) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isUserKeyUnlocked(int userId) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void prepareUserStorage(String volumeUuid, int userId, int serialNumber, int flags)
-            throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void destroyUserStorage(String volumeUuid, int userId, int flags)
-            throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isConvertibleToFBE() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void fstrim(int flags) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public AppFuseMount mountProxyFileDescriptorBridge() throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ParcelFileDescriptor openProxyFileDescriptor(int mountPointId, int fileId, int mode)
-            throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public long getCacheQuotaBytes(String volumeUuid, int uid) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public long getCacheSizeBytes(String volumeUuid, int uid) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public long getAllocatableBytes(String path, int flags, String callingPackage) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void allocateBytes(String path, long bytes, int flags, String callingPackage) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void secdiscard(String path) throws RemoteException {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/MockSyntheticPasswordManager.java b/services/tests/servicestests/src/com/android/server/locksettings/MockSyntheticPasswordManager.java
index d7468c2..6f68179 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/MockSyntheticPasswordManager.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/MockSyntheticPasswordManager.java
@@ -15,6 +15,7 @@
  */
 package com.android.server.locksettings;
 
+import android.content.Context;
 import android.hardware.weaver.V1_0.IWeaver;
 import android.os.RemoteException;
 import android.os.UserManager;
@@ -32,12 +33,12 @@
 
 public class MockSyntheticPasswordManager extends SyntheticPasswordManager {
 
-    private MockGateKeeperService mGateKeeper;
+    private FakeGateKeeperService mGateKeeper;
     private IWeaver mWeaverService;
 
-    public MockSyntheticPasswordManager(LockSettingsStorage storage,
-            MockGateKeeperService gatekeeper, UserManager userManager) {
-        super(storage, userManager);
+    public MockSyntheticPasswordManager(Context context, LockSettingsStorage storage,
+            FakeGateKeeperService gatekeeper, UserManager userManager) {
+        super(context, storage, userManager);
         mGateKeeper = gatekeeper;
     }
 
@@ -88,7 +89,7 @@
 
     @Override
     protected long sidFromPasswordHandle(byte[] handle) {
-        return new MockGateKeeperService.VerifyHandle(handle).sid;
+        return new FakeGateKeeperService.VerifyHandle(handle).sid;
     }
 
     @Override
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java b/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java
index ba4ff33..2ad0580 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java
@@ -23,8 +23,9 @@
 import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PASSWORD;
 import static com.android.internal.widget.LockPatternUtils.SYNTHETIC_PASSWORD_ENABLED_KEY;
 import static com.android.internal.widget.LockPatternUtils.SYNTHETIC_PASSWORD_HANDLE_KEY;
+import static org.mockito.Mockito.verify;
 
-import android.app.admin.DevicePolicyManager;
+import android.app.admin.PasswordMetrics;
 import android.os.RemoteException;
 import android.os.UserHandle;
 
@@ -57,7 +58,7 @@
         final int USER_ID = 10;
         final String PASSWORD = "user-password";
         final String BADPASSWORD = "bad-password";
-        MockSyntheticPasswordManager manager = new MockSyntheticPasswordManager(mStorage,
+        MockSyntheticPasswordManager manager = new MockSyntheticPasswordManager(mContext, mStorage,
                 mGateKeeperService, mUserManager);
         AuthenticationToken authToken = manager.newSyntheticPasswordAndSid(mGateKeeperService, null,
                 null, USER_ID);
@@ -72,11 +73,11 @@
         assertNull(result.authToken);
     }
 
-    private void disableSyntheticPassword(int userId) throws RemoteException {
+    private void disableSyntheticPassword() throws RemoteException {
         mService.setLong(SYNTHETIC_PASSWORD_ENABLED_KEY, 0, UserHandle.USER_SYSTEM);
     }
 
-    private void enableSyntheticPassword(int userId) throws RemoteException {
+    private void enableSyntheticPassword() throws RemoteException {
         mService.setLong(SYNTHETIC_PASSWORD_ENABLED_KEY, 1, UserHandle.USER_SYSTEM);
     }
 
@@ -87,12 +88,12 @@
     public void testPasswordMigration() throws RemoteException {
         final String PASSWORD = "testPasswordMigration-password";
 
-        disableSyntheticPassword(PRIMARY_USER_ID);
+        disableSyntheticPassword();
         mService.setLockCredential(PASSWORD, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, null,
                 PASSWORD_QUALITY_ALPHABETIC, PRIMARY_USER_ID);
         long sid = mGateKeeperService.getSecureUserId(PRIMARY_USER_ID);
         final byte[] primaryStorageKey = mStorageManager.getUserUnlockToken(PRIMARY_USER_ID);
-        enableSyntheticPassword(PRIMARY_USER_ID);
+        enableSyntheticPassword();
         // Performs migration
         assertEquals(VerifyCredentialResponse.RESPONSE_OK,
                 mService.verifyCredential(PASSWORD, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, 0, PRIMARY_USER_ID).getResponseCode());
@@ -106,7 +107,7 @@
     }
 
     private void initializeCredentialUnderSP(String password, int userId) throws RemoteException {
-        enableSyntheticPassword(userId);
+        enableSyntheticPassword();
         int quality = password != null ? PASSWORD_QUALITY_ALPHABETIC
                 : PASSWORD_QUALITY_UNSPECIFIED;
         int type = password != null ? LockPatternUtils.CREDENTIAL_TYPE_PASSWORD
@@ -198,8 +199,7 @@
 
     public void testManagedProfileUnifiedChallengeMigration() throws RemoteException {
         final String UnifiedPassword = "testManagedProfileUnifiedChallengeMigration-pwd";
-        disableSyntheticPassword(PRIMARY_USER_ID);
-        disableSyntheticPassword(MANAGED_PROFILE_USER_ID);
+        disableSyntheticPassword();
         mService.setLockCredential(UnifiedPassword, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, null,
                 PASSWORD_QUALITY_ALPHABETIC, PRIMARY_USER_ID);
         mService.setSeparateProfileChallengeEnabled(MANAGED_PROFILE_USER_ID, false, null);
@@ -212,8 +212,7 @@
         assertTrue(profileSid != primarySid);
 
         // do migration
-        enableSyntheticPassword(PRIMARY_USER_ID);
-        enableSyntheticPassword(MANAGED_PROFILE_USER_ID);
+        enableSyntheticPassword();
         assertEquals(VerifyCredentialResponse.RESPONSE_OK,
                 mService.verifyCredential(UnifiedPassword, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, 0, PRIMARY_USER_ID).getResponseCode());
 
@@ -231,6 +230,7 @@
     public void testManagedProfileSeparateChallengeMigration() throws RemoteException {
         final String primaryPassword = "testManagedProfileSeparateChallengeMigration-primary";
         final String profilePassword = "testManagedProfileSeparateChallengeMigration-profile";
+        disableSyntheticPassword();
         mService.setLockCredential(primaryPassword, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, null,
                 PASSWORD_QUALITY_ALPHABETIC, PRIMARY_USER_ID);
         mService.setLockCredential(profilePassword, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, null,
@@ -244,8 +244,7 @@
         assertTrue(profileSid != primarySid);
 
         // do migration
-        enableSyntheticPassword(PRIMARY_USER_ID);
-        enableSyntheticPassword(MANAGED_PROFILE_USER_ID);
+        enableSyntheticPassword();
         assertEquals(VerifyCredentialResponse.RESPONSE_OK,
                 mService.verifyCredential(primaryPassword, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, 0, PRIMARY_USER_ID).getResponseCode());
         assertEquals(VerifyCredentialResponse.RESPONSE_OK,
@@ -274,14 +273,22 @@
         long handle = mService.addEscrowToken(TOKEN.getBytes(), PRIMARY_USER_ID);
         assertFalse(mService.isEscrowTokenActive(handle, PRIMARY_USER_ID));
 
-        mService.verifyCredential(PASSWORD, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, 0, PRIMARY_USER_ID).getResponseCode();
+        mService.verifyCredential(PASSWORD, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, 0,
+                PRIMARY_USER_ID).getResponseCode();
         assertTrue(mService.isEscrowTokenActive(handle, PRIMARY_USER_ID));
 
         mService.setLockCredentialWithToken(PATTERN, LockPatternUtils.CREDENTIAL_TYPE_PATTERN,
                 handle, TOKEN.getBytes(), PASSWORD_QUALITY_SOMETHING, PRIMARY_USER_ID);
 
+        // Verify DPM gets notified about new device lock
+        mService.mHandler.runWithScissors(() -> {}, 0 /*now*/); // Flush runnables on handler
+        PasswordMetrics metric = PasswordMetrics.computeForPassword(PATTERN);
+        metric.quality = PASSWORD_QUALITY_SOMETHING;
+        verify(mDevicePolicyManager).setActivePasswordState(metric, PRIMARY_USER_ID);
+
         assertEquals(VerifyCredentialResponse.RESPONSE_OK,
-                mService.verifyCredential(PATTERN, LockPatternUtils.CREDENTIAL_TYPE_PATTERN, 0, PRIMARY_USER_ID).getResponseCode());
+                mService.verifyCredential(PATTERN, LockPatternUtils.CREDENTIAL_TYPE_PATTERN, 0,
+                        PRIMARY_USER_ID).getResponseCode());
         assertArrayEquals(storageKey, mStorageManager.getUserUnlockToken(PRIMARY_USER_ID));
     }
 
@@ -335,7 +342,7 @@
 
     public void testEscrowTokenActivatedImmediatelyIfNoUserPasswordNeedsMigration() throws RemoteException {
         final String TOKEN = "some-high-entropy-secure-token";
-        enableSyntheticPassword(PRIMARY_USER_ID);
+        enableSyntheticPassword();
         long handle = mService.addEscrowToken(TOKEN.getBytes(), PRIMARY_USER_ID);
         assertTrue(mService.isEscrowTokenActive(handle, PRIMARY_USER_ID));
         assertEquals(0, mGateKeeperService.getSecureUserId(PRIMARY_USER_ID));
@@ -355,10 +362,10 @@
         final String TOKEN = "some-high-entropy-secure-token";
         final String PASSWORD = "password";
         // Set up pre-SP user password
-        disableSyntheticPassword(PRIMARY_USER_ID);
+        disableSyntheticPassword();
         mService.setLockCredential(PASSWORD, LockPatternUtils.CREDENTIAL_TYPE_PASSWORD, null,
                 PASSWORD_QUALITY_ALPHABETIC, PRIMARY_USER_ID);
-        enableSyntheticPassword(PRIMARY_USER_ID);
+        enableSyntheticPassword();
 
         long handle = mService.addEscrowToken(TOKEN.getBytes(), PRIMARY_USER_ID);
         // Token not activated immediately since user password exists
diff --git a/services/tests/servicestests/src/com/android/server/net/ConnOnActivityStartTest.java b/services/tests/servicestests/src/com/android/server/net/ConnOnActivityStartTest.java
index f02cf51..7f48b8e 100644
--- a/services/tests/servicestests/src/com/android/server/net/ConnOnActivityStartTest.java
+++ b/services/tests/servicestests/src/com/android/server/net/ConnOnActivityStartTest.java
@@ -16,51 +16,37 @@
 
 package com.android.server.net;
 
-import static android.util.DebugUtils.valueToString;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import com.android.frameworks.servicestests.R;
+import com.android.servicestests.aidl.ICmdReceiverService;
 import com.android.servicestests.aidl.INetworkStateObserver;
 
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.IntentSender;
-import android.content.pm.IPackageDeleteObserver;
-import android.content.pm.PackageInstaller;
+import android.content.ServiceConnection;
 import android.content.pm.PackageManager;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.net.Uri;
 import android.os.BatteryManager;
 import android.os.Bundle;
-import android.os.RemoteException;
+import android.os.IBinder;
 import android.os.SystemClock;
+import android.provider.Settings;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.LargeTest;
 import android.support.test.runner.AndroidJUnit4;
 import android.support.test.uiautomator.UiDevice;
 import android.util.Log;
 
-import libcore.io.IoUtils;
-
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -79,74 +65,122 @@
  * Run: adb shell am instrument -e class com.android.server.net.ConnOnActivityStartTest -w \
  *     com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner
  */
-@Ignore
 @LargeTest
 @RunWith(AndroidJUnit4.class)
 public class ConnOnActivityStartTest {
     private static final String TAG = ConnOnActivityStartTest.class.getSimpleName();
 
-    private static final String ACTION_INSTALL_COMPLETE = "com.android.server.net.INSTALL_COMPLETE";
-
-    private static final String TEST_APP_URI =
-            "android.resource://com.android.frameworks.servicestests/raw/conntestapp";
     private static final String TEST_PKG = "com.android.servicestests.apps.conntestapp";
     private static final String TEST_ACTIVITY_CLASS = TEST_PKG + ".ConnTestActivity";
-
-    private static final String ACTION_FINISH_ACTIVITY = TEST_PKG + ".FINISH";
+    private static final String TEST_SERVICE_CLASS = TEST_PKG + ".CmdReceiverService";
 
     private static final String EXTRA_NETWORK_STATE_OBSERVER = TEST_PKG + ".observer";
 
     private static final long BATTERY_OFF_TIMEOUT_MS = 2000; // 2 sec
     private static final long BATTERY_OFF_CHECK_INTERVAL_MS = 200; // 0.2 sec
 
-    private static final long WAIT_FOR_INSTALL_TIMEOUT_MS = 2000; // 2 sec
-
-    private static final long NETWORK_CHECK_TIMEOUT_MS = 6000; // 6 sec
+    private static final long NETWORK_CHECK_TIMEOUT_MS = 4000; // 4 sec
 
     private static final long SCREEN_ON_DELAY_MS = 500; // 0.5 sec
 
-    private static final String NETWORK_STATUS_SEPARATOR = "\\|";
+    private static final long BIND_SERVICE_TIMEOUT_SEC = 4;
 
     private static final int REPEAT_TEST_COUNT = 5;
 
+    private static final String KEY_PAROLE_DURATION = "parole_duration";
+    private static final String DESIRED_PAROLE_DURATION = "0";
+
     private static Context mContext;
     private static UiDevice mUiDevice;
     private static int mTestPkgUid;
     private static BatteryManager mBatteryManager;
-    private static ConnectivityManager mConnectivityManager;
+
+    private static boolean mAppIdleConstsUpdated;
+    private static String mOriginalAppIdleConsts;
+
+    private static ServiceConnection mServiceConnection;
+    private static ICmdReceiverService mCmdReceiverService;
 
     @BeforeClass
     public static void setUpOnce() throws Exception {
         mContext = InstrumentationRegistry.getContext();
         mUiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
 
-        installAppAndAssertInstalled();
+        setDesiredParoleDuration();
         mContext.getPackageManager().setApplicationEnabledSetting(TEST_PKG,
                 PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
         mTestPkgUid = mContext.getPackageManager().getPackageUid(TEST_PKG, 0);
 
         mBatteryManager = (BatteryManager) mContext.getSystemService(Context.BATTERY_SERVICE);
-        mConnectivityManager = (ConnectivityManager) mContext.getSystemService(
-                Context.CONNECTIVITY_SERVICE);
+        bindService();
     }
 
     @AfterClass
     public static void tearDownOnce() {
-        mContext.getPackageManager().deletePackage(TEST_PKG,
-                new IPackageDeleteObserver.Stub() {
-                    @Override
-                    public void packageDeleted(String packageName, int returnCode)
-                            throws RemoteException {
-                        Log.e(TAG, packageName + " deleted, returnCode: " + returnCode);
-                    }
-                }, 0);
+        if (mAppIdleConstsUpdated) {
+            Settings.Global.putString(mContext.getContentResolver(),
+                    Settings.Global.APP_IDLE_CONSTANTS, mOriginalAppIdleConsts);
+        }
+        unbindService();
+    }
+
+    private static void bindService() throws Exception {
+        final CountDownLatch bindLatch = new CountDownLatch(1);
+        mServiceConnection = new ServiceConnection() {
+            @Override
+            public void onServiceConnected(ComponentName name, IBinder service) {
+                Log.i(TAG, "Service connected");
+                mCmdReceiverService = ICmdReceiverService.Stub.asInterface(service);
+                bindLatch.countDown();
+            }
+
+            @Override
+            public void onServiceDisconnected(ComponentName name) {
+                Log.i(TAG, "Service disconnected");
+            }
+        };
+        final Intent intent = new Intent()
+                .setComponent(new ComponentName(TEST_PKG, TEST_SERVICE_CLASS));
+        // Needs to use BIND_ALLOW_OOM_MANAGEMENT and BIND_NOT_FOREGROUND so that the test app
+        // does not run in the same process state as this app.
+        mContext.bindService(intent, mServiceConnection,
+                Context.BIND_AUTO_CREATE
+                        | Context.BIND_ALLOW_OOM_MANAGEMENT
+                        | Context.BIND_NOT_FOREGROUND);
+        if (!bindLatch.await(BIND_SERVICE_TIMEOUT_SEC, TimeUnit.SECONDS)) {
+            fail("Timed out waiting for the service to bind in " + mTestPkgUid);
+        }
+    }
+
+    private static void unbindService() {
+        if (mCmdReceiverService != null) {
+            mContext.unbindService(mServiceConnection);
+        }
+    }
+
+    private static void setDesiredParoleDuration() {
+        mOriginalAppIdleConsts = Settings.Global.getString(mContext.getContentResolver(),
+                Settings.Global.APP_IDLE_CONSTANTS);
+        String newAppIdleConstants;
+        final String newConstant = KEY_PAROLE_DURATION + "=" + DESIRED_PAROLE_DURATION;
+        if (mOriginalAppIdleConsts == null || "null".equals(mOriginalAppIdleConsts)) {
+            // app_idle_constants is initially empty, so just assign the desired value.
+            newAppIdleConstants = newConstant;
+        } else if (mOriginalAppIdleConsts.contains(KEY_PAROLE_DURATION)) {
+            // app_idle_constants contains parole_duration, so replace it with the desired value.
+            newAppIdleConstants = mOriginalAppIdleConsts.replaceAll(
+                    KEY_PAROLE_DURATION + "=\\d+", newConstant);
+        } else {
+            // app_idle_constants didn't have parole_duration, so append the desired value.
+            newAppIdleConstants = mOriginalAppIdleConsts + "," + newConstant;
+        }
+        Settings.Global.putString(mContext.getContentResolver(),
+                Settings.Global.APP_IDLE_CONSTANTS, newAppIdleConstants);
+        mAppIdleConstsUpdated = true;
     }
 
     @Test
     public void testStartActivity_batterySaver() throws Exception {
-        if (!isNetworkAvailable()) {
-            fail("Device doesn't have network connectivity");
-        }
         setBatterySaverMode(true);
         try {
             testConnOnActivityStart("testStartActivity_batterySaver");
@@ -157,9 +191,6 @@
 
     @Test
     public void testStartActivity_dataSaver() throws Exception {
-        if (!isNetworkAvailable()) {
-            fail("Device doesn't have network connectivity");
-        }
         setDataSaverMode(true);
         try {
             testConnOnActivityStart("testStartActivity_dataSaver");
@@ -170,9 +201,6 @@
 
     @Test
     public void testStartActivity_dozeMode() throws Exception {
-        if (!isNetworkAvailable()) {
-            fail("Device doesn't have network connectivity");
-        }
         setDozeMode(true);
         try {
             testConnOnActivityStart("testStartActivity_dozeMode");
@@ -183,9 +211,6 @@
 
     @Test
     public void testStartActivity_appStandby() throws Exception {
-        if (!isNetworkAvailable()) {
-            fail("Device doesn't have network connectivity");
-        }
         try{
             turnBatteryOff();
             setAppIdle(true);
@@ -194,15 +219,13 @@
             startActivityAndCheckNetworkAccess();
         } finally {
             turnBatteryOn();
+            finishActivity();
             setAppIdle(false);
         }
     }
 
     @Test
     public void testStartActivity_backgroundRestrict() throws Exception {
-        if (!isNetworkAvailable()) {
-            fail("Device doesn't have network connectivity");
-        }
         updateRestrictBackgroundBlacklist(true);
         try {
             testConnOnActivityStart("testStartActivity_backgroundRestrict");
@@ -218,9 +241,9 @@
                 turnScreenOn();
                 SystemClock.sleep(SCREEN_ON_DELAY_MS);
                 startActivityAndCheckNetworkAccess();
-                Log.d(TAG, testName + " end #" + i);
             } finally {
                 finishActivity();
+                Log.d(TAG, testName + " end #" + i);
             }
         }
     }
@@ -347,11 +370,6 @@
                 + maxTries + " attempts. Last result: '" + result + "'");
     }
 
-    private boolean isNetworkAvailable() throws Exception {
-        final NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
-        return networkInfo != null && networkInfo.isConnected();
-    }
-
     private void startActivityAndCheckNetworkAccess() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
         final Intent launchIntent = new Intent().setComponent(
@@ -361,126 +379,22 @@
         extras.putBinder(EXTRA_NETWORK_STATE_OBSERVER, new INetworkStateObserver.Stub() {
             @Override
             public void onNetworkStateChecked(String resultData) {
-                errors[0] = checkForAvailability(resultData);
+                errors[0] = resultData;
                 latch.countDown();
             }
         });
         launchIntent.putExtras(extras);
         mContext.startActivity(launchIntent);
         if (latch.await(NETWORK_CHECK_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
-            if (!errors[0].isEmpty()) {
-                fail("Network not available for test app " + mTestPkgUid);
+            if (errors[0] != null) {
+                fail("Network not available for test app " + mTestPkgUid + ". " + errors[0]);
             }
         } else {
             fail("Timed out waiting for network availability status from test app " + mTestPkgUid);
         }
     }
 
-    private void finishActivity() {
-        final Intent finishIntent = new Intent(ACTION_FINISH_ACTIVITY)
-                .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
-        mContext.sendBroadcast(finishIntent);
-    }
-
-    private String checkForAvailability(String resultData) {
-        if (resultData == null) {
-            assertNotNull("Network status from app2 is null, Uid: " + mTestPkgUid, resultData);
-        }
-        // Network status format is described on MyBroadcastReceiver.checkNetworkStatus()
-        final String[] parts = resultData.split(NETWORK_STATUS_SEPARATOR);
-        assertEquals("Wrong network status: " + resultData + ", Uid: " + mTestPkgUid,
-                5, parts.length); // Sanity check
-        final NetworkInfo.State state = parts[0].equals("null")
-                ? null : NetworkInfo.State.valueOf(parts[0]);
-        final NetworkInfo.DetailedState detailedState = parts[1].equals("null")
-                ? null : NetworkInfo.DetailedState.valueOf(parts[1]);
-        final boolean connected = Boolean.valueOf(parts[2]);
-        final String connectionCheckDetails = parts[3];
-        final String networkInfo = parts[4];
-
-        final StringBuilder errors = new StringBuilder();
-        final NetworkInfo.State expectedState = NetworkInfo.State.CONNECTED;
-        final NetworkInfo.DetailedState expectedDetailedState = NetworkInfo.DetailedState.CONNECTED;
-
-        if (true != connected) {
-            errors.append(String.format("External site connection failed: expected %s, got %s\n",
-                    true, connected));
-        }
-        if (expectedState != state || expectedDetailedState != detailedState) {
-            errors.append(String.format("Connection state mismatch: expected %s/%s, got %s/%s\n",
-                    expectedState, expectedDetailedState, state, detailedState));
-        }
-
-        if (errors.length() > 0) {
-            errors.append("\tnetworkInfo: " + networkInfo + "\n");
-            errors.append("\tconnectionCheckDetails: " + connectionCheckDetails + "\n");
-        }
-        return errors.toString();
-    }
-
-    private static void installAppAndAssertInstalled() throws Exception {
-        final CountDownLatch latch = new CountDownLatch(1);
-        final int[] result = {PackageInstaller.STATUS_SUCCESS};
-        final BroadcastReceiver installStatusReceiver = new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                final String pkgName = intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME);
-                if (!TEST_PKG.equals(pkgName)) {
-                    return;
-                }
-                result[0] = intent.getIntExtra(PackageInstaller.EXTRA_STATUS,
-                        PackageInstaller.STATUS_FAILURE);
-                latch.countDown();
-            }
-        };
-        mContext.registerReceiver(installStatusReceiver, new IntentFilter(ACTION_INSTALL_COMPLETE));
-        try {
-            installApp();
-            if (latch.await(WAIT_FOR_INSTALL_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
-                if (result[0] != PackageInstaller.STATUS_SUCCESS) {
-                    fail("Couldn't install test app, result: "
-                            + valueToString(PackageInstaller.class, "STATUS_", result[0]));
-                }
-            } else {
-                fail("Timed out waiting for the test app to install");
-            }
-        } finally {
-            mContext.unregisterReceiver(installStatusReceiver);
-        }
-    }
-
-    private static void installApp() throws Exception {
-        final Uri packageUri = Uri.parse(TEST_APP_URI);
-        final InputStream in = mContext.getContentResolver().openInputStream(packageUri);
-
-        final PackageInstaller packageInstaller
-                = mContext.getPackageManager().getPackageInstaller();
-        final PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
-                PackageInstaller.SessionParams.MODE_FULL_INSTALL);
-        params.setAppPackageName(TEST_PKG);
-
-        final int sessionId = packageInstaller.createSession(params);
-        final PackageInstaller.Session session = packageInstaller.openSession(sessionId);
-
-        OutputStream out = null;
-        try {
-            out = session.openWrite(TAG, 0, -1);
-            final byte[] buffer = new byte[65536];
-            int c;
-            while ((c = in.read(buffer)) != -1) {
-                out.write(buffer, 0, c);
-            }
-            session.fsync(out);
-        } finally {
-            IoUtils.closeQuietly(in);
-            IoUtils.closeQuietly(out);
-        }
-        session.commit(createIntentSender(mContext, sessionId));
-    }
-
-    private static IntentSender createIntentSender(Context context, int sessionId) {
-        PendingIntent pendingIntent = PendingIntent.getBroadcast(
-                context, sessionId, new Intent(ACTION_INSTALL_COMPLETE), 0);
-        return pendingIntent.getIntentSender();
+    private void finishActivity() throws Exception {
+        mCmdReceiverService.finishActivity();
     }
 }
\ No newline at end of file
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 8f2f34e..beffcee 100644
--- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java
@@ -47,7 +47,7 @@
         }
 
         public void sendPackageAddedForNewUsers(String packageName,
-            boolean isSystem, int appId, int... userIds) {
+            boolean sendBootComplete, boolean includeStopped, int appId, int... userIds) {
         }
       }
 
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 25ba66e..3cd24b8 100644
--- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
@@ -382,6 +382,7 @@
                 null /*installUser*/,
                 false /*allowInstall*/,
                 false /*instantApp*/,
+                false /*virtualPreload*/,
                 null /*parentPkgName*/,
                 null /*childPkgNames*/,
                 UserManagerService.getInstance(),
@@ -423,6 +424,7 @@
                 UserHandle.SYSTEM /*installUser*/,
                 true /*allowInstall*/,
                 false /*instantApp*/,
+                false /*virtualPreload*/,
                 null /*parentPkgName*/,
                 null /*childPkgNames*/,
                 UserManagerService.getInstance(),
@@ -467,6 +469,7 @@
                 null /*installUser*/,
                 false /*allowInstall*/,
                 false /*instantApp*/,
+                false /*virtualPreload*/,
                 null /*parentPkgName*/,
                 null /*childPkgNames*/,
                 UserManagerService.getInstance(),
@@ -511,6 +514,7 @@
                 null /*installUser*/,
                 false /*allowInstall*/,
                 false /*instantApp*/,
+                false /*virtualPreload*/,
                 null /*parentPkgName*/,
                 null /*childPkgNames*/,
                 UserManagerService.getInstance(),
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 0e8960e..fa8feb0 100644
--- a/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java
@@ -467,7 +467,8 @@
         pkg.staticSharedLibVersion = 100;
         pkg.usesStaticLibraries = new ArrayList<>();
         pkg.usesStaticLibraries.add("foo23");
-        pkg.usesStaticLibrariesCertDigests = new String[] { "digest" };
+        pkg.usesStaticLibrariesCertDigests = new String[1][];
+        pkg.usesStaticLibrariesCertDigests[0] = new String[] { "digest" };
         pkg.usesStaticLibrariesVersions = new int[] { 100 };
 
         pkg.libraryNames = new ArrayList<>();
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserLifecycleStressTest.java b/services/tests/servicestests/src/com/android/server/pm/UserLifecycleStressTest.java
new file mode 100644
index 0000000..304e0e9
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/UserLifecycleStressTest.java
@@ -0,0 +1,113 @@
+/*
+ * 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.pm;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import android.app.ActivityManager;
+import android.app.IStopUserCallback;
+import android.content.Context;
+import android.content.pm.UserInfo;
+import android.os.RemoteException;
+import android.os.UserManager;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.LargeTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.Log;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.IOException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * To run the test:
+ * bit FrameworksServicesTests:com.android.server.pm.UserLifecycleStressTest
+ */
+@RunWith(AndroidJUnit4.class)
+@LargeTest
+public class UserLifecycleStressTest {
+    private static final String TAG = "UserLifecycleStressTest";
+    // TODO: Make this smaller once we have improved it.
+    private static final int MAX_TIME_STOP_USER_IN_SECOND = 30;
+    private static final int NUM_ITERATIONS_STOP_USER = 10;
+    private static final int WAIT_BEFORE_STOP_USER_IN_SECOND = 3;
+
+    private Context mContext;
+    private UserManager mUserManager;
+    private ActivityManager mActivityManager;
+
+    @Before
+    public void setup() {
+        mContext = InstrumentationRegistry.getInstrumentation().getContext();
+        mUserManager = mContext.getSystemService(UserManager.class);
+        mActivityManager = mContext.getSystemService(ActivityManager.class);
+    }
+
+    /**
+     * Create and stop user 10 times in a row. Check stop user can be finished in a reasonable
+     * amount of time.
+     */
+    @Test
+    public void stopManagedProfileStressTest()
+            throws IOException, RemoteException, InterruptedException {
+        for (int i = 0; i < NUM_ITERATIONS_STOP_USER; i++) {
+            final UserInfo userInfo = mUserManager.createProfileForUser("TestUser",
+                    UserInfo.FLAG_MANAGED_PROFILE, mActivityManager.getCurrentUser());
+            assertNotNull(userInfo);
+            try {
+                assertTrue(
+                        "Failed to start the profile",
+                        ActivityManager.getService().startUserInBackground(userInfo.id));
+                // Seems the broadcast queue is getting more busy if we wait a few seconds before
+                // stopping the user.
+                TimeUnit.SECONDS.sleep(WAIT_BEFORE_STOP_USER_IN_SECOND);
+                stopUser(userInfo.id);
+            } finally {
+                mUserManager.removeUser(userInfo.id);
+            }
+        }
+    }
+
+    private void stopUser(int userId) throws RemoteException, InterruptedException {
+        final long startTime = System.currentTimeMillis();
+        CountDownLatch countDownLatch = new CountDownLatch(1);
+        ActivityManager.getService().
+                stopUser(userId, true,
+                        new IStopUserCallback.Stub() {
+                            @Override
+                            public void userStopped(int userId) throws RemoteException {
+                                countDownLatch.countDown();
+                            }
+
+                            @Override
+                            public void userStopAborted(int userId) throws RemoteException {
+
+                            }
+                        });
+        boolean stoppedBeforeTimeout =
+                countDownLatch.await(MAX_TIME_STOP_USER_IN_SECOND, TimeUnit.SECONDS);
+        assertTrue(
+                "Take more than " + MAX_TIME_STOP_USER_IN_SECOND + "s to stop user",
+                stoppedBeforeTimeout);
+        Log.d(TAG, "stopUser takes " + (System.currentTimeMillis() - startTime) + " ms");
+    }
+}
+
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java
index 9f77297..d136614 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java
@@ -55,11 +55,11 @@
     public void testWriteReadApplicationRestrictions() throws IOException {
         AtomicFile atomicFile = new AtomicFile(restrictionsFile);
         Bundle bundle = createBundle();
-        UserManagerService.writeApplicationRestrictionsLP(bundle, atomicFile);
+        UserManagerService.writeApplicationRestrictionsLAr(bundle, atomicFile);
         assertTrue(atomicFile.getBaseFile().exists());
         String s = FileUtils.readTextFile(restrictionsFile, 10000, "");
         System.out.println("restrictionsFile: " + s);
-        bundle = UserManagerService.readApplicationRestrictionsLP(atomicFile);
+        bundle = UserManagerService.readApplicationRestrictionsLAr(atomicFile);
         System.out.println("readApplicationRestrictionsLocked bundle: " + bundle);
         assertBundle(bundle);
     }
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 afc0f67..4db9a30 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
@@ -23,10 +23,14 @@
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
 
+import dalvik.system.DelegateLastClassLoader;
+import dalvik.system.PathClassLoader;
 import dalvik.system.VMRuntime;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -48,6 +52,10 @@
 @RunWith(AndroidJUnit4.class)
 @SmallTest
 public class DexManagerTests {
+    private static final String PATH_CLASS_LOADER_NAME = PathClassLoader.class.getName();
+    private static final String DELEGATE_LAST_CLASS_LOADER_NAME =
+            DelegateLastClassLoader.class.getName();
+
     private DexManager mDexManager;
 
     private TestData mFooUser0;
@@ -56,6 +64,9 @@
     private TestData mInvalidIsa;
     private TestData mDoesNotExist;
 
+    private TestData mBarUser0UnsupportedClassLoader;
+    private TestData mBarUser0DelegateLastClassLoader;
+
     private int mUser0;
     private int mUser1;
 
@@ -68,12 +79,17 @@
         String foo = "foo";
         String bar = "bar";
 
-        mFooUser0 = new TestData(foo, isa, mUser0);
-        mBarUser0 = new TestData(bar, isa, mUser0);
-        mBarUser1 = new TestData(bar, isa, mUser1);
+        mFooUser0 = new TestData(foo, isa, mUser0, PATH_CLASS_LOADER_NAME);
+        mBarUser0 = new TestData(bar, isa, mUser0, PATH_CLASS_LOADER_NAME);
+        mBarUser1 = new TestData(bar, isa, mUser1, PATH_CLASS_LOADER_NAME);
         mInvalidIsa = new TestData("INVALID", "INVALID_ISA", mUser0);
         mDoesNotExist = new TestData("DOES.NOT.EXIST", isa, mUser1);
 
+        mBarUser0UnsupportedClassLoader = new TestData(bar, isa, mUser0,
+                "unsupported.class_loader");
+        mBarUser0DelegateLastClassLoader = new TestData(bar, isa, mUser0,
+                DELEGATE_LAST_CLASS_LOADER_NAME);
+
         mDexManager = new DexManager(null, null, null, null);
 
         // Foo and Bar are available to user0.
@@ -90,7 +106,7 @@
         notifyDexLoad(mFooUser0, mFooUser0.getBaseAndSplitDexPaths(), mUser0);
 
         // Package is not used by others, so we should get nothing back.
-        assertNull(getPackageUseInfo(mFooUser0));
+        assertNoUseInfo(mFooUser0);
     }
 
     @Test
@@ -100,8 +116,7 @@
 
         // Bar is used by others now and should be in our records
         PackageUseInfo pui = getPackageUseInfo(mBarUser0);
-        assertNotNull(pui);
-        assertTrue(pui.isUsedByOtherApps());
+        assertIsUsedByOtherApps(mBarUser0, pui, true);
         assertTrue(pui.getDexUseInfoMap().isEmpty());
     }
 
@@ -112,8 +127,7 @@
         notifyDexLoad(mFooUser0, fooSecondaries, mUser0);
 
         PackageUseInfo pui = getPackageUseInfo(mFooUser0);
-        assertNotNull(pui);
-        assertFalse(pui.isUsedByOtherApps());
+        assertIsUsedByOtherApps(mFooUser0, pui, false);
         assertEquals(fooSecondaries.size(), pui.getDexUseInfoMap().size());
         assertSecondaryUse(mFooUser0, pui, fooSecondaries, /*isUsedByOtherApps*/false, mUser0);
     }
@@ -125,8 +139,7 @@
         notifyDexLoad(mFooUser0, barSecondaries, mUser0);
 
         PackageUseInfo pui = getPackageUseInfo(mBarUser0);
-        assertNotNull(pui);
-        assertFalse(pui.isUsedByOtherApps());
+        assertIsUsedByOtherApps(mBarUser0, pui, false);
         assertEquals(barSecondaries.size(), pui.getDexUseInfoMap().size());
         assertSecondaryUse(mFooUser0, pui, barSecondaries, /*isUsedByOtherApps*/true, mUser0);
     }
@@ -149,8 +162,7 @@
 
         // Check bar usage. Should be used by other app (for primary and barSecondaries).
         PackageUseInfo pui = getPackageUseInfo(mBarUser0);
-        assertNotNull(pui);
-        assertTrue(pui.isUsedByOtherApps());
+        assertIsUsedByOtherApps(mBarUser0, pui, true);
         assertEquals(barSecondaries.size() + barSecondariesForOwnUse.size(),
                 pui.getDexUseInfoMap().size());
 
@@ -160,8 +172,7 @@
 
         // Check foo usage. Should not be used by other app.
         pui = getPackageUseInfo(mFooUser0);
-        assertNotNull(pui);
-        assertFalse(pui.isUsedByOtherApps());
+        assertIsUsedByOtherApps(mFooUser0, pui, false);
         assertEquals(fooSecondaries.size(), pui.getDexUseInfoMap().size());
         assertSecondaryUse(mFooUser0, pui, fooSecondaries, /*isUsedByOtherApps*/false, mUser0);
     }
@@ -169,22 +180,22 @@
     @Test
     public void testPackageUseInfoNotFound() {
         // Assert we don't get back data we did not previously record.
-        assertNull(getPackageUseInfo(mFooUser0));
+        assertNoUseInfo(mFooUser0);
     }
 
     @Test
     public void testInvalidIsa() {
         // Notifying with an invalid ISA should be ignored.
         notifyDexLoad(mInvalidIsa, mInvalidIsa.getSecondaryDexPaths(), mUser0);
-        assertNull(getPackageUseInfo(mInvalidIsa));
+        assertNoUseInfo(mInvalidIsa);
     }
 
     @Test
-    public void testNotExistingPackate() {
+    public void testNotExistingPackage() {
         // Notifying about the load of a package which was previously not
         // register in DexManager#load should be ignored.
         notifyDexLoad(mDoesNotExist, mDoesNotExist.getBaseAndSplitDexPaths(), mUser0);
-        assertNull(getPackageUseInfo(mDoesNotExist));
+        assertNoUseInfo(mDoesNotExist);
     }
 
     @Test
@@ -192,7 +203,7 @@
         // Bar from User1 tries to load secondary dex files from User0 Bar.
         // Request should be ignored.
         notifyDexLoad(mBarUser1, mBarUser0.getSecondaryDexPaths(), mUser1);
-        assertNull(getPackageUseInfo(mBarUser1));
+        assertNoUseInfo(mBarUser1);
     }
 
     @Test
@@ -201,7 +212,7 @@
         // Note that the PackageManagerService already filters this out but we
         // still check that nothing goes unexpected in DexManager.
         notifyDexLoad(mBarUser0, mFooUser0.getBaseAndSplitDexPaths(), mUser1);
-        assertNull(getPackageUseInfo(mBarUser1));
+        assertNoUseInfo(mBarUser1);
     }
 
     @Test
@@ -213,7 +224,7 @@
         // Before we notify about the installation of the newPackage if mFoo
         // is trying to load something from it we should not find it.
         notifyDexLoad(mFooUser0, newSecondaries, mUser0);
-        assertNull(getPackageUseInfo(newPackage));
+        assertNoUseInfo(newPackage);
 
         // Notify about newPackage install and let mFoo load its dexes.
         mDexManager.notifyPackageInstalled(newPackage.mPackageInfo, mUser0);
@@ -221,8 +232,7 @@
 
         // We should get back the right info.
         PackageUseInfo pui = getPackageUseInfo(newPackage);
-        assertNotNull(pui);
-        assertFalse(pui.isUsedByOtherApps());
+        assertIsUsedByOtherApps(newPackage, pui, false);
         assertEquals(newSecondaries.size(), pui.getDexUseInfoMap().size());
         assertSecondaryUse(newPackage, pui, newSecondaries, /*isUsedByOtherApps*/true, mUser0);
     }
@@ -238,8 +248,7 @@
         notifyDexLoad(newPackage, newSecondaries, mUser0);
 
         PackageUseInfo pui = getPackageUseInfo(newPackage);
-        assertNotNull(pui);
-        assertFalse(pui.isUsedByOtherApps());
+        assertIsUsedByOtherApps(newPackage, pui, false);
         assertEquals(newSecondaries.size(), pui.getDexUseInfoMap().size());
         assertSecondaryUse(newPackage, pui, newSecondaries, /*isUsedByOtherApps*/false, mUser0);
     }
@@ -251,8 +260,7 @@
 
         // Bar is used by others now and should be in our records.
         PackageUseInfo pui = getPackageUseInfo(mBarUser0);
-        assertNotNull(pui);
-        assertTrue(pui.isUsedByOtherApps());
+        assertIsUsedByOtherApps(mBarUser0, pui, true);
         assertTrue(pui.getDexUseInfoMap().isEmpty());
 
         // Notify that bar is updated.
@@ -262,8 +270,7 @@
 
         // The usedByOtherApps flag should be clear now.
         pui = getPackageUseInfo(mBarUser0);
-        assertNotNull(pui);
-        assertFalse(pui.isUsedByOtherApps());
+        assertIsUsedByOtherApps(mBarUser0, pui, false);
     }
 
     @Test
@@ -275,8 +282,7 @@
 
         // We shouldn't find yet the new split as we didn't notify the package update.
         notifyDexLoad(mFooUser0, newSplits, mUser0);
-        PackageUseInfo pui = getPackageUseInfo(mBarUser0);
-        assertNull(pui);
+        assertNoUseInfo(mBarUser0);
 
         // Notify that bar is updated. splitSourceDirs will contain the updated path.
         mDexManager.notifyPackageUpdated(mBarUser0.getPackageName(),
@@ -285,9 +291,9 @@
 
         // Now, when the split is loaded we will find it and we should mark Bar as usedByOthers.
         notifyDexLoad(mFooUser0, newSplits, mUser0);
-        pui = getPackageUseInfo(mBarUser0);
+        PackageUseInfo pui = getPackageUseInfo(mBarUser0);
         assertNotNull(pui);
-        assertTrue(pui.isUsedByOtherApps());
+        assertIsUsedByOtherApps(newSplits, pui, true);
     }
 
     @Test
@@ -319,8 +325,7 @@
         // Foo should still be around since it's used by other apps but with no
         // secondary dex info.
         PackageUseInfo pui = getPackageUseInfo(mFooUser0);
-        assertNotNull(pui);
-        assertTrue(pui.isUsedByOtherApps());
+        assertIsUsedByOtherApps(mFooUser0, pui, true);
         assertTrue(pui.getDexUseInfoMap().isEmpty());
     }
 
@@ -334,8 +339,7 @@
 
         // Foo should not be around since all its secondary dex info were deleted
         // and it is not used by other apps.
-        PackageUseInfo pui = getPackageUseInfo(mFooUser0);
-        assertNull(pui);
+        assertNoUseInfo(mFooUser0);
     }
 
     @Test
@@ -347,8 +351,7 @@
         mDexManager.notifyPackageDataDestroyed(mBarUser0.getPackageName(), UserHandle.USER_ALL);
 
         // Bar should not be around since it was removed for all users.
-        PackageUseInfo pui = getPackageUseInfo(mBarUser0);
-        assertNull(pui);
+        assertNoUseInfo(mBarUser0);
     }
 
     @Test
@@ -357,7 +360,7 @@
         // Load a dex file from framework.
         notifyDexLoad(mFooUser0, Arrays.asList(frameworkDex), mUser0);
         // The dex file should not be recognized as a package.
-        assertNull(mDexManager.getPackageUseInfo(frameworkDex));
+        assertFalse(mDexManager.hasInfoOnPackage(frameworkDex));
     }
 
     @Test
@@ -367,14 +370,83 @@
         notifyDexLoad(mFooUser0, fooSecondaries, mUser0);
 
         PackageUseInfo pui = getPackageUseInfo(mFooUser0);
-        assertNotNull(pui);
-        assertFalse(pui.isUsedByOtherApps());
+        assertIsUsedByOtherApps(mFooUser0, pui, false);
         assertEquals(fooSecondaries.size(), pui.getDexUseInfoMap().size());
         assertSecondaryUse(mFooUser0, pui, fooSecondaries, /*isUsedByOtherApps*/false, mUser0);
     }
 
+    @Test
+    public void testNotifyUnsupportedClassLoader() {
+        List<String> secondaries = mBarUser0UnsupportedClassLoader.getSecondaryDexPaths();
+        notifyDexLoad(mBarUser0UnsupportedClassLoader, secondaries, mUser0);
+
+        PackageUseInfo pui = getPackageUseInfo(mBarUser0UnsupportedClassLoader);
+        assertIsUsedByOtherApps(mBarUser0UnsupportedClassLoader, pui, false);
+        assertEquals(secondaries.size(), pui.getDexUseInfoMap().size());
+        // We expect that all the contexts are unsupported.
+        String[] expectedContexts =
+                Collections.nCopies(secondaries.size(),
+                        PackageDexUsage.UNSUPPORTED_CLASS_LOADER_CONTEXT).toArray(new String[0]);
+        assertSecondaryUse(mBarUser0UnsupportedClassLoader, pui, secondaries,
+                /*isUsedByOtherApps*/false, mUser0, expectedContexts);
+    }
+
+    @Test
+    public void testNotifyVariableClassLoader() {
+        // Record bar secondaries with the default PathClassLoader.
+        List<String> secondaries = mBarUser0.getSecondaryDexPaths();
+
+        notifyDexLoad(mBarUser0, secondaries, mUser0);
+        PackageUseInfo pui = getPackageUseInfo(mBarUser0);
+        assertIsUsedByOtherApps(mBarUser0, pui, false);
+        assertEquals(secondaries.size(), pui.getDexUseInfoMap().size());
+        assertSecondaryUse(mFooUser0, pui, secondaries, /*isUsedByOtherApps*/false, mUser0);
+
+        // Record bar secondaries again with a different class loader. This will change the context.
+        notifyDexLoad(mBarUser0DelegateLastClassLoader, secondaries, mUser0);
+
+        pui = getPackageUseInfo(mBarUser0);
+        assertIsUsedByOtherApps(mBarUser0, pui, false);
+        assertEquals(secondaries.size(), pui.getDexUseInfoMap().size());
+        // We expect that all the contexts to be changed to variable now.
+        String[] expectedContexts =
+                Collections.nCopies(secondaries.size(),
+                        PackageDexUsage.VARIABLE_CLASS_LOADER_CONTEXT).toArray(new String[0]);
+        assertSecondaryUse(mFooUser0, pui, secondaries, /*isUsedByOtherApps*/false, mUser0,
+                expectedContexts);
+    }
+
+    @Test
+    public void testNotifyUnsupportedClassLoaderDoesNotChange() {
+        List<String> secondaries = mBarUser0UnsupportedClassLoader.getSecondaryDexPaths();
+        notifyDexLoad(mBarUser0UnsupportedClassLoader, secondaries, mUser0);
+
+        PackageUseInfo pui = getPackageUseInfo(mBarUser0UnsupportedClassLoader);
+        assertIsUsedByOtherApps(mBarUser0UnsupportedClassLoader, pui, false);
+        assertEquals(secondaries.size(), pui.getDexUseInfoMap().size());
+        // We expect that all the contexts are unsupported.
+        String[] expectedContexts =
+                Collections.nCopies(secondaries.size(),
+                        PackageDexUsage.UNSUPPORTED_CLASS_LOADER_CONTEXT).toArray(new String[0]);
+        assertSecondaryUse(mBarUser0UnsupportedClassLoader, pui, secondaries,
+                /*isUsedByOtherApps*/false, mUser0, expectedContexts);
+
+        // Record bar secondaries again with a different class loader. This will change the context.
+        // However, because the context was already marked as unsupported we should not chage it.
+        notifyDexLoad(mBarUser0DelegateLastClassLoader, secondaries, mUser0);
+        pui = getPackageUseInfo(mBarUser0UnsupportedClassLoader);
+        assertSecondaryUse(mBarUser0UnsupportedClassLoader, pui, secondaries,
+                /*isUsedByOtherApps*/false, mUser0, expectedContexts);
+
+    }
+
+
     private void assertSecondaryUse(TestData testData, PackageUseInfo pui,
-            List<String> secondaries, boolean isUsedByOtherApps, int ownerUserId) {
+            List<String> secondaries, boolean isUsedByOtherApps, int ownerUserId,
+            String[] expectedContexts) {
+        assertNotNull(expectedContexts);
+        assertEquals(expectedContexts.length, secondaries.size());
+        int index = 0;
         for (String dex : secondaries) {
             DexUseInfo dui = pui.getDexUseInfoMap().get(dex);
             assertNotNull(dui);
@@ -382,16 +454,50 @@
             assertEquals(ownerUserId, dui.getOwnerUserId());
             assertEquals(1, dui.getLoaderIsas().size());
             assertTrue(dui.getLoaderIsas().contains(testData.mLoaderIsa));
+            assertEquals(expectedContexts[index++], dui.getClassLoaderContext());
         }
     }
+    private void assertSecondaryUse(TestData testData, PackageUseInfo pui,
+            List<String> secondaries, boolean isUsedByOtherApps, int ownerUserId) {
+        String[] expectedContexts = DexoptUtils.processContextForDexLoad(
+                Arrays.asList(testData.mClassLoader),
+                Arrays.asList(String.join(File.pathSeparator, secondaries)));
+        assertSecondaryUse(testData, pui, secondaries, isUsedByOtherApps, ownerUserId,
+                expectedContexts);
+    }
 
+    private void assertIsUsedByOtherApps(TestData testData, PackageUseInfo pui,
+            boolean isUsedByOtherApps) {
+        assertIsUsedByOtherApps(testData.getBaseAndSplitDexPaths(), pui, isUsedByOtherApps);
+    }
+
+    private void assertIsUsedByOtherApps(List<String> codePaths, PackageUseInfo pui,
+            boolean isUsedByOtherApps) {
+        for (String codePath : codePaths) {
+            assertEquals(codePath, isUsedByOtherApps, pui.isUsedByOtherApps(codePath));
+        }
+    }
     private void notifyDexLoad(TestData testData, List<String> dexPaths, int loaderUserId) {
-        mDexManager.notifyDexLoad(testData.mPackageInfo.applicationInfo, dexPaths,
+        // 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 = Arrays.asList(String.join(File.pathSeparator, dexPaths));
+        notifyDexLoad(testData, classLoaders, classPaths, loaderUserId);
+    }
+
+    private void notifyDexLoad(TestData testData, List<String> classLoader, List<String> classPaths,
+            int loaderUserId) {
+        mDexManager.notifyDexLoad(testData.mPackageInfo.applicationInfo, classLoader, classPaths,
                 testData.mLoaderIsa, loaderUserId);
     }
 
     private PackageUseInfo getPackageUseInfo(TestData testData) {
-        return mDexManager.getPackageUseInfo(testData.mPackageInfo.packageName);
+        assertTrue(mDexManager.hasInfoOnPackage(testData.mPackageInfo.packageName));
+        return mDexManager.getPackageUseInfoOrDefault(testData.mPackageInfo.packageName);
+    }
+
+    private void assertNoUseInfo(TestData testData) {
+        assertFalse(mDexManager.hasInfoOnPackage(testData.mPackageInfo.packageName));
     }
 
     private static PackageInfo getMockPackageInfo(String packageName, int userId) {
@@ -416,10 +522,16 @@
     private static class TestData {
         private final PackageInfo mPackageInfo;
         private final String mLoaderIsa;
+        private final String mClassLoader;
 
-        private TestData(String  packageName, String loaderIsa, int userId) {
+        private TestData(String packageName, String loaderIsa, int userId, String classLoader) {
             mPackageInfo = getMockPackageInfo(packageName, userId);
             mLoaderIsa = loaderIsa;
+            mClassLoader = classLoader;
+        }
+
+        private TestData(String packageName, String loaderIsa, int userId) {
+            this(packageName, loaderIsa, userId, PATH_CLASS_LOADER_NAME);
         }
 
         private String getPackageName() {
diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexoptOptionsTests.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptOptionsTests.java
new file mode 100644
index 0000000..b64716c
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptOptionsTests.java
@@ -0,0 +1,140 @@
+/*
+ * 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.pm.dex;
+
+
+import static com.android.server.pm.PackageManagerServiceCompilerMapping.getCompilerFilterForReason;
+
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import com.android.server.pm.PackageManagerService;
+import com.android.server.pm.PackageManagerServiceCompilerMapping;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class DexoptOptionsTests {
+    private final static String mPackageName = "test.android.com";
+    private final static String mCompilerFilter =
+            PackageManagerServiceCompilerMapping.getDefaultCompilerFilter();
+    private final static String mSplitName = "split-A.apk";
+
+    @Test
+    public void testCreateDexoptOptionsEmpty() {
+        DexoptOptions opt = new DexoptOptions(mPackageName, mCompilerFilter, /*flags*/ 0);
+        assertEquals(mPackageName, opt.getPackageName());
+        assertEquals(mCompilerFilter, opt.getCompilerFilter());
+        assertEquals(null, opt.getSplitName());
+        assertFalse(opt.isBootComplete());
+        assertFalse(opt.isCheckForProfileUpdates());
+        assertFalse(opt.isDexoptOnlySecondaryDex());
+        assertFalse(opt.isDexoptOnlySharedDex());
+        assertFalse(opt.isDowngrade());
+        assertFalse(opt.isForce());
+    }
+
+    @Test
+    public void testCreateDexoptOptionsFull() {
+        int flags =
+                DexoptOptions.DEXOPT_FORCE |
+                DexoptOptions.DEXOPT_BOOT_COMPLETE |
+                DexoptOptions.DEXOPT_CHECK_FOR_PROFILES_UPDATES |
+                DexoptOptions.DEXOPT_ONLY_SECONDARY_DEX |
+                DexoptOptions.DEXOPT_ONLY_SHARED_DEX |
+                DexoptOptions.DEXOPT_DOWNGRADE  |
+                DexoptOptions.DEXOPT_AS_SHARED_LIBRARY;
+
+        DexoptOptions opt = new DexoptOptions(mPackageName, mCompilerFilter, flags);
+        assertEquals(mPackageName, opt.getPackageName());
+        assertEquals(mCompilerFilter, opt.getCompilerFilter());
+        assertEquals(null, opt.getSplitName());
+        assertTrue(opt.isBootComplete());
+        assertTrue(opt.isCheckForProfileUpdates());
+        assertTrue(opt.isDexoptOnlySecondaryDex());
+        assertTrue(opt.isDexoptOnlySharedDex());
+        assertTrue(opt.isDowngrade());
+        assertTrue(opt.isForce());
+        assertTrue(opt.isDexoptAsSharedLibrary());
+    }
+
+    @Test
+    public void testCreateDexoptOptionsReason() {
+        int flags =
+                DexoptOptions.DEXOPT_FORCE |
+                DexoptOptions.DEXOPT_BOOT_COMPLETE |
+                DexoptOptions.DEXOPT_CHECK_FOR_PROFILES_UPDATES;
+
+        int[] reasons = new int[] {
+                PackageManagerService.REASON_FIRST_BOOT,
+                PackageManagerService.REASON_BOOT,
+                PackageManagerService.REASON_INSTALL,
+                PackageManagerService.REASON_BACKGROUND_DEXOPT,
+                PackageManagerService.REASON_AB_OTA,
+                PackageManagerService.REASON_INACTIVE_PACKAGE_DOWNGRADE,};
+
+        for (int reason : reasons) {
+            DexoptOptions opt = new DexoptOptions(mPackageName, reason, flags);
+            assertEquals(mPackageName, opt.getPackageName());
+            assertEquals(getCompilerFilterForReason(reason), opt.getCompilerFilter());
+            assertEquals(null, opt.getSplitName());
+            assertTrue(opt.isBootComplete());
+            assertTrue(opt.isCheckForProfileUpdates());
+            assertFalse(opt.isDexoptOnlySecondaryDex());
+            assertFalse(opt.isDexoptOnlySharedDex());
+            assertFalse(opt.isDowngrade());
+            assertTrue(opt.isForce());
+            assertFalse(opt.isDexoptAsSharedLibrary());
+        }
+    }
+
+    @Test
+    public void testCreateDexoptOptionsSplit() {
+        int flags = DexoptOptions.DEXOPT_FORCE | DexoptOptions.DEXOPT_BOOT_COMPLETE;
+
+        DexoptOptions opt = new DexoptOptions(mPackageName, mCompilerFilter, mSplitName, flags);
+        assertEquals(mPackageName, opt.getPackageName());
+        assertEquals(mCompilerFilter, opt.getCompilerFilter());
+        assertEquals(mSplitName, opt.getSplitName());
+        assertTrue(opt.isBootComplete());
+        assertFalse(opt.isCheckForProfileUpdates());
+        assertFalse(opt.isDexoptOnlySecondaryDex());
+        assertFalse(opt.isDexoptOnlySharedDex());
+        assertFalse(opt.isDowngrade());
+        assertTrue(opt.isForce());
+        assertFalse(opt.isDexoptAsSharedLibrary());
+    }
+
+    @Test
+    public void testCreateDexoptInvalid() {
+        boolean gotException = false;
+        try {
+            int invalidFlags = 999;
+            new DexoptOptions(mPackageName, mCompilerFilter, invalidFlags);
+        } catch (IllegalArgumentException ignore) {
+            gotException = true;
+        }
+
+        assertTrue(gotException);
+    }
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..150f7f0
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java
@@ -0,0 +1,421 @@
+/*
+ * 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.pm.dex;
+
+import com.android.server.pm.PackageDexOptimizer;
+
+import static com.android.server.pm.PackageDexOptimizer.SKIP_SHARED_LIBRARY_CHECK;
+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.content.pm.ApplicationInfo;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.SparseArray;
+
+import dalvik.system.DelegateLastClassLoader;
+import dalvik.system.DexClassLoader;
+import dalvik.system.PathClassLoader;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class DexoptUtilsTest {
+    private static final String DEX_CLASS_LOADER_NAME = DexClassLoader.class.getName();
+    private static final String PATH_CLASS_LOADER_NAME = PathClassLoader.class.getName();
+    private static final String DELEGATE_LAST_CLASS_LOADER_NAME =
+            DelegateLastClassLoader.class.getName();
+
+    private static class TestData {
+        ApplicationInfo info;
+        boolean[] pathsWithCode;
+    }
+
+    private TestData createMockApplicationInfo(String baseClassLoader, boolean addSplits,
+            boolean addSplitDependencies) {
+        ApplicationInfo ai = new ApplicationInfo();
+        String codeDir = "/data/app/mock.android.com";
+        ai.setBaseCodePath(codeDir + "/base.dex");
+        ai.classLoaderName = baseClassLoader;
+        ai.privateFlags = ai.privateFlags | ApplicationInfo.PRIVATE_FLAG_ISOLATED_SPLIT_LOADING;
+        boolean[] pathsWithCode;
+        if (!addSplits) {
+            pathsWithCode = new boolean[] {true};
+        } else {
+            pathsWithCode = new boolean[9];
+            Arrays.fill(pathsWithCode, true);
+            pathsWithCode[7] = false;  // config split
+
+            ai.setSplitCodePaths(new String[]{
+                    codeDir + "/base-1.dex",
+                    codeDir + "/base-2.dex",
+                    codeDir + "/base-3.dex",
+                    codeDir + "/base-4.dex",
+                    codeDir + "/base-5.dex",
+                    codeDir + "/base-6.dex",
+                    codeDir + "/config-split-7.dex",
+                    codeDir + "/feature-no-deps.dex"});
+
+            ai.splitClassLoaderNames = new String[]{
+                    DELEGATE_LAST_CLASS_LOADER_NAME,
+                    DELEGATE_LAST_CLASS_LOADER_NAME,
+                    PATH_CLASS_LOADER_NAME,
+                    DEX_CLASS_LOADER_NAME,
+                    PATH_CLASS_LOADER_NAME,
+                    null,   // A null class loader name should default to PathClassLoader.
+                    null,   // The config split gets a null class loader.
+                    null};  // The feature split with no dependency and no specified class loader.
+            if (addSplitDependencies) {
+                ai.splitDependencies = new SparseArray<>(ai.splitClassLoaderNames.length + 1);
+                ai.splitDependencies.put(0, new int[] {-1}); // base has no dependency
+                ai.splitDependencies.put(1, new int[] {2}); // split 1 depends on 2
+                ai.splitDependencies.put(2, new int[] {4}); // split 2 depends on 4
+                ai.splitDependencies.put(3, new int[] {4}); // split 3 depends on 4
+                ai.splitDependencies.put(4, new int[] {0}); // split 4 depends on base
+                ai.splitDependencies.put(5, new int[] {0}); // split 5 depends on base
+                ai.splitDependencies.put(6, new int[] {5}); // split 6 depends on 5
+                // Do not add the config split to the dependency list.
+                // Do not add the feature split with no dependency to the dependency list.
+            }
+        }
+        TestData data = new TestData();
+        data.info = ai;
+        data.pathsWithCode = pathsWithCode;
+        return data;
+    }
+
+    @Test
+    public void testSplitChain() {
+        TestData data = createMockApplicationInfo(PATH_CLASS_LOADER_NAME, true, true);
+        String[] sharedLibrary = new String[] {"a.dex", "b.dex"};
+        String[] contexts = DexoptUtils.getClassLoaderContexts(
+                data.info, sharedLibrary, data.pathsWithCode);
+
+        assertEquals(9, contexts.length);
+        assertEquals("PCL[a.dex:b.dex]", contexts[0]);
+        assertEquals("DLC[];DLC[base-2.dex];PCL[base-4.dex];PCL[a.dex:b.dex:base.dex]",
+                contexts[1]);
+        assertEquals("DLC[];PCL[base-4.dex];PCL[a.dex:b.dex:base.dex]", contexts[2]);
+        assertEquals("PCL[];PCL[base-4.dex];PCL[a.dex:b.dex:base.dex]", contexts[3]);
+        assertEquals("PCL[];PCL[a.dex:b.dex:base.dex]", contexts[4]);
+        assertEquals("PCL[];PCL[a.dex:b.dex:base.dex]", contexts[5]);
+        assertEquals("PCL[];PCL[base-5.dex];PCL[a.dex:b.dex:base.dex]", contexts[6]);
+        assertEquals(null, contexts[7]);  // config split
+        assertEquals("PCL[]", contexts[8]);  // feature split with no dependency
+    }
+
+    @Test
+    public void testSplitChainNoSplitDependencies() {
+        TestData data = createMockApplicationInfo(PATH_CLASS_LOADER_NAME, true, false);
+        String[] sharedLibrary = new String[] {"a.dex", "b.dex"};
+        String[] contexts = DexoptUtils.getClassLoaderContexts(
+                data.info, sharedLibrary, data.pathsWithCode);
+
+        assertEquals(9, contexts.length);
+        assertEquals("PCL[a.dex:b.dex]", contexts[0]);
+        assertEquals("PCL[a.dex:b.dex:base.dex]", contexts[1]);
+        assertEquals("PCL[a.dex:b.dex:base.dex:base-1.dex]", contexts[2]);
+        assertEquals("PCL[a.dex:b.dex:base.dex:base-1.dex:base-2.dex]", contexts[3]);
+        assertEquals("PCL[a.dex:b.dex:base.dex:base-1.dex:base-2.dex:base-3.dex]", contexts[4]);
+        assertEquals(
+                "PCL[a.dex:b.dex:base.dex:base-1.dex:base-2.dex:base-3.dex:base-4.dex]",
+                contexts[5]);
+        assertEquals(
+                "PCL[a.dex:b.dex:base.dex:base-1.dex:base-2.dex:base-3.dex:base-4.dex:base-5.dex]",
+                contexts[6]);
+        assertEquals(null, contexts[7]);  // config split
+        assertEquals(
+                "PCL[a.dex:b.dex:base.dex:base-1.dex:base-2.dex:base-3.dex:base-4.dex:base-5.dex:base-6.dex:config-split-7.dex]",
+                contexts[8]);  // feature split with no dependency
+    }
+
+    @Test
+    public void testSplitChainNoIsolationNoSharedLibrary() {
+        TestData data = createMockApplicationInfo(PATH_CLASS_LOADER_NAME, true, true);
+        data.info.privateFlags = data.info.privateFlags
+                & (~ApplicationInfo.PRIVATE_FLAG_ISOLATED_SPLIT_LOADING);
+        String[] contexts = DexoptUtils.getClassLoaderContexts(
+                data.info, null, data.pathsWithCode);
+
+        assertEquals(9, contexts.length);
+        assertEquals("PCL[]", contexts[0]);
+        assertEquals("PCL[base.dex]", contexts[1]);
+        assertEquals("PCL[base.dex:base-1.dex]", contexts[2]);
+        assertEquals("PCL[base.dex:base-1.dex:base-2.dex]", contexts[3]);
+        assertEquals("PCL[base.dex:base-1.dex:base-2.dex:base-3.dex]", contexts[4]);
+        assertEquals("PCL[base.dex:base-1.dex:base-2.dex:base-3.dex:base-4.dex]", contexts[5]);
+        assertEquals(
+                "PCL[base.dex:base-1.dex:base-2.dex:base-3.dex:base-4.dex:base-5.dex]",
+                contexts[6]);
+        assertEquals(null, contexts[7]);  // config split
+        assertEquals(
+                "PCL[base.dex:base-1.dex:base-2.dex:base-3.dex:base-4.dex:base-5.dex:base-6.dex:config-split-7.dex]",
+                contexts[8]);  // feature split with no dependency
+    }
+
+    @Test
+    public void testSplitChainNoSharedLibraries() {
+        TestData data = createMockApplicationInfo(
+                DELEGATE_LAST_CLASS_LOADER_NAME, true, true);
+        String[] contexts = DexoptUtils.getClassLoaderContexts(
+                data.info, null, data.pathsWithCode);
+
+        assertEquals(9, contexts.length);
+        assertEquals("DLC[]", contexts[0]);
+        assertEquals("DLC[];DLC[base-2.dex];PCL[base-4.dex];DLC[base.dex]", contexts[1]);
+        assertEquals("DLC[];PCL[base-4.dex];DLC[base.dex]", contexts[2]);
+        assertEquals("PCL[];PCL[base-4.dex];DLC[base.dex]", contexts[3]);
+        assertEquals("PCL[];DLC[base.dex]", contexts[4]);
+        assertEquals("PCL[];DLC[base.dex]", contexts[5]);
+        assertEquals("PCL[];PCL[base-5.dex];DLC[base.dex]", contexts[6]);
+        assertEquals(null, contexts[7]);  // config split
+        assertEquals("PCL[]", contexts[8]);  // feature split with no dependency
+    }
+
+    @Test
+    public void testSplitChainWithNullPrimaryClassLoader() {
+        // A null classLoaderName should mean PathClassLoader.
+        TestData data = createMockApplicationInfo(null, true, true);
+        String[] sharedLibrary = new String[] {"a.dex", "b.dex"};
+        String[] contexts = DexoptUtils.getClassLoaderContexts(
+                data.info, sharedLibrary, data.pathsWithCode);
+
+        assertEquals(9, contexts.length);
+        assertEquals("PCL[a.dex:b.dex]", contexts[0]);
+        assertEquals("DLC[];DLC[base-2.dex];PCL[base-4.dex];PCL[a.dex:b.dex:base.dex]", contexts[1]);
+        assertEquals("DLC[];PCL[base-4.dex];PCL[a.dex:b.dex:base.dex]", contexts[2]);
+        assertEquals("PCL[];PCL[base-4.dex];PCL[a.dex:b.dex:base.dex]", contexts[3]);
+        assertEquals("PCL[];PCL[a.dex:b.dex:base.dex]", contexts[4]);
+        assertEquals("PCL[];PCL[a.dex:b.dex:base.dex]", contexts[5]);
+        assertEquals("PCL[];PCL[base-5.dex];PCL[a.dex:b.dex:base.dex]", contexts[6]);
+        assertEquals(null, contexts[7]);  // config split
+        assertEquals("PCL[]", contexts[8]);  // feature split with no dependency
+    }
+
+    @Test
+    public void tesNoSplits() {
+        TestData data = createMockApplicationInfo(PATH_CLASS_LOADER_NAME, false, false);
+        String[] sharedLibrary = new String[] {"a.dex", "b.dex"};
+        String[] contexts = DexoptUtils.getClassLoaderContexts(
+                data.info, sharedLibrary, data.pathsWithCode);
+
+        assertEquals(1, contexts.length);
+        assertEquals("PCL[a.dex:b.dex]", contexts[0]);
+    }
+
+    @Test
+    public void tesNoSplitsNullClassLoaderName() {
+        TestData data = createMockApplicationInfo(null, false, false);
+        String[] sharedLibrary = new String[] {"a.dex", "b.dex"};
+        String[] contexts = DexoptUtils.getClassLoaderContexts(
+                data.info, sharedLibrary, data.pathsWithCode);
+
+        assertEquals(1, contexts.length);
+        assertEquals("PCL[a.dex:b.dex]", contexts[0]);
+    }
+
+    @Test
+    public void tesNoSplitDelegateLast() {
+        TestData data = createMockApplicationInfo(
+                DELEGATE_LAST_CLASS_LOADER_NAME, false, false);
+        String[] sharedLibrary = new String[] {"a.dex", "b.dex"};
+        String[] contexts = DexoptUtils.getClassLoaderContexts(
+                data.info, sharedLibrary, data.pathsWithCode);
+
+        assertEquals(1, contexts.length);
+        assertEquals("DLC[a.dex:b.dex]", contexts[0]);
+    }
+
+    @Test
+    public void tesNoSplitsNoSharedLibraries() {
+        TestData data = createMockApplicationInfo(PATH_CLASS_LOADER_NAME, false, false);
+        String[] contexts = DexoptUtils.getClassLoaderContexts(
+                data.info, null, data.pathsWithCode);
+
+        assertEquals(1, contexts.length);
+        assertEquals("PCL[]", contexts[0]);
+    }
+
+    @Test
+    public void tesNoSplitDelegateLastNoSharedLibraries() {
+        TestData data = createMockApplicationInfo(
+                DELEGATE_LAST_CLASS_LOADER_NAME, false, false);
+        String[] contexts = DexoptUtils.getClassLoaderContexts(
+                data.info, null, data.pathsWithCode);
+
+        assertEquals(1, contexts.length);
+        assertEquals("DLC[]", contexts[0]);
+    }
+
+    @Test
+    public void testContextWithNoCode() {
+        TestData data = createMockApplicationInfo(null, true, false);
+        Arrays.fill(data.pathsWithCode, false);
+
+        String[] sharedLibrary = new String[] {"a.dex", "b.dex"};
+        String[] contexts = DexoptUtils.getClassLoaderContexts(
+                data.info, sharedLibrary, data.pathsWithCode);
+
+        assertEquals(9, contexts.length);
+        assertEquals(null, contexts[0]);
+        assertEquals(null, contexts[1]);
+        assertEquals(null, contexts[2]);
+        assertEquals(null, contexts[3]);
+        assertEquals(null, contexts[4]);
+        assertEquals(null, contexts[5]);
+        assertEquals(null, contexts[6]);
+        assertEquals(null, contexts[7]);
+    }
+
+    @Test
+    public void testContextBaseNoCode() {
+        TestData data = createMockApplicationInfo(null, true, true);
+        data.pathsWithCode[0] = false;
+        String[] sharedLibrary = new String[] {"a.dex", "b.dex"};
+        String[] contexts = DexoptUtils.getClassLoaderContexts(
+                data.info, sharedLibrary, data.pathsWithCode);
+
+        assertEquals(9, contexts.length);
+        assertEquals(null, contexts[0]);
+        assertEquals("DLC[];DLC[base-2.dex];PCL[base-4.dex];PCL[a.dex:b.dex:base.dex]", contexts[1]);
+        assertEquals("DLC[];PCL[base-4.dex];PCL[a.dex:b.dex:base.dex]", contexts[2]);
+        assertEquals("PCL[];PCL[base-4.dex];PCL[a.dex:b.dex:base.dex]", contexts[3]);
+        assertEquals("PCL[];PCL[a.dex:b.dex:base.dex]", contexts[4]);
+        assertEquals("PCL[];PCL[a.dex:b.dex:base.dex]", contexts[5]);
+        assertEquals("PCL[];PCL[base-5.dex];PCL[a.dex:b.dex:base.dex]", contexts[6]);
+        assertEquals(null, contexts[7]);
+    }
+
+    @Test
+    public void testProcessContextForDexLoad() {
+        List<String> classLoaders = Arrays.asList(
+                DELEGATE_LAST_CLASS_LOADER_NAME,
+                PATH_CLASS_LOADER_NAME,
+                PATH_CLASS_LOADER_NAME);
+        List<String> classPaths = Arrays.asList(
+                String.join(File.pathSeparator, "foo.dex", "bar.dex"),
+                String.join(File.pathSeparator, "parent1.dex"),
+                String.join(File.pathSeparator, "parent2.dex", "parent3.dex"));
+        String[] context = DexoptUtils.processContextForDexLoad(classLoaders, classPaths);
+        assertNotNull(context);
+        assertEquals(2, context.length);
+        assertEquals("DLC[];PCL[parent1.dex];PCL[parent2.dex:parent3.dex]", context[0]);
+        assertEquals("DLC[foo.dex];PCL[parent1.dex];PCL[parent2.dex:parent3.dex]", context[1]);
+    }
+
+    @Test
+    public void testProcessContextForDexLoadSingleElement() {
+        List<String> classLoaders = Arrays.asList(PATH_CLASS_LOADER_NAME);
+        List<String> classPaths = Arrays.asList(
+                String.join(File.pathSeparator, "foo.dex", "bar.dex", "zoo.dex"));
+        String[] context = DexoptUtils.processContextForDexLoad(classLoaders, classPaths);
+        assertNotNull(context);
+        assertEquals(3, context.length);
+        assertEquals("PCL[]", context[0]);
+        assertEquals("PCL[foo.dex]", context[1]);
+        assertEquals("PCL[foo.dex:bar.dex]", context[2]);
+    }
+
+    @Test
+    public void testProcessContextForDexLoadUnsupported() {
+        List<String> classLoaders = Arrays.asList(
+                DELEGATE_LAST_CLASS_LOADER_NAME,
+                "unsupported.class.loader");
+        List<String> classPaths = Arrays.asList(
+                String.join(File.pathSeparator, "foo.dex", "bar.dex"),
+                String.join(File.pathSeparator, "parent1.dex"));
+        String[] context = DexoptUtils.processContextForDexLoad(classLoaders, classPaths);
+        assertNull(context);
+    }
+
+    @Test
+    public void testProcessContextForDexLoadIllegalCallEmptyList() {
+        boolean gotException = false;
+        try {
+            DexoptUtils.processContextForDexLoad(Collections.emptyList(), Collections.emptyList());
+        } catch (IllegalArgumentException ignore) {
+            gotException = true;
+        }
+        assertTrue(gotException);
+    }
+
+    @Test
+    public void testProcessContextForDexLoadIllegalCallDifferentSize() {
+        boolean gotException = false;
+        try {
+            DexoptUtils.processContextForDexLoad(Collections.emptyList(), Arrays.asList("a"));
+        } catch (IllegalArgumentException ignore) {
+            gotException = true;
+        }
+        assertTrue(gotException);
+    }
+
+    @Test
+    public void testEncodeClassLoader() {
+        assertEquals(SKIP_SHARED_LIBRARY_CHECK, DexoptUtils.encodeClassLoader(
+                SKIP_SHARED_LIBRARY_CHECK, "dalvik.system.PathClassLoader"));
+        assertEquals(SKIP_SHARED_LIBRARY_CHECK, DexoptUtils.encodeClassLoader(
+                SKIP_SHARED_LIBRARY_CHECK, "dalvik.system.DexClassLoader"));
+        assertEquals(SKIP_SHARED_LIBRARY_CHECK, DexoptUtils.encodeClassLoader(
+                SKIP_SHARED_LIBRARY_CHECK, "dalvik.system.DelegateLastClassLoader"));
+        assertEquals("PCL[xyz]", DexoptUtils.encodeClassLoader("xyz",
+                "dalvik.system.PathClassLoader"));
+        assertEquals("PCL[xyz]", DexoptUtils.encodeClassLoader("xyz",
+                "dalvik.system.DexClassLoader"));
+        assertEquals("DLC[xyz]", DexoptUtils.encodeClassLoader("xyz",
+                "dalvik.system.DelegateLastClassLoader"));
+        assertEquals("PCL[xyz]", DexoptUtils.encodeClassLoader("xyz", null));
+        assertEquals("abc[xyz]", DexoptUtils.encodeClassLoader("xyz", "abc"));
+
+        try {
+            DexoptUtils.encodeClassLoader(null, "abc");
+            fail(); // Exception should be caught.
+        } catch (NullPointerException expected) {}
+    }
+
+    @Test
+    public void testEncodeClassLoaderChain() {
+        assertEquals(SKIP_SHARED_LIBRARY_CHECK, DexoptUtils.encodeClassLoaderChain(
+                SKIP_SHARED_LIBRARY_CHECK, "PCL[a]"));
+        assertEquals(SKIP_SHARED_LIBRARY_CHECK, DexoptUtils.encodeClassLoaderChain("PCL[a]",
+                SKIP_SHARED_LIBRARY_CHECK));
+        assertEquals("PCL[a];DLC[b]", DexoptUtils.encodeClassLoaderChain("PCL[a]",
+                "DLC[b]"));
+        assertEquals(SKIP_SHARED_LIBRARY_CHECK, DexoptUtils.encodeClassLoaderChain("PCL[a]",
+                SKIP_SHARED_LIBRARY_CHECK));
+
+        try {
+            DexoptUtils.encodeClassLoaderChain("a", null);
+            fail(); // exception is expected
+        } catch (NullPointerException expected) {}
+
+        try {
+            DexoptUtils.encodeClassLoaderChain(null, "b");
+            fail(); // exception is expected
+        } catch (NullPointerException expected) {}
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/PackageDexUsageTests.java b/services/tests/servicestests/src/com/android/server/pm/dex/PackageDexUsageTests.java
index 2e99433..69a148d 100644
--- a/services/tests/servicestests/src/com/android/server/pm/dex/PackageDexUsageTests.java
+++ b/services/tests/servicestests/src/com/android/server/pm/dex/PackageDexUsageTests.java
@@ -21,6 +21,7 @@
 import android.support.test.runner.AndroidJUnit4;
 import dalvik.system.VMRuntime;
 
+import java.util.Collections;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -72,25 +73,25 @@
         String isa = VMRuntime.getInstructionSet(Build.SUPPORTED_ABIS[0]);
 
         mFooBaseUser0 = new TestData(fooPackageName,
-                fooCodeDir + "base.apk", 0, isa, false, true);
+                fooCodeDir + "base.apk", 0, isa, false, true, fooPackageName);
 
         mFooSplit1User0 = new TestData(fooPackageName,
-                fooCodeDir + "split-1.apk", 0, isa, false, true);
+                fooCodeDir + "split-1.apk", 0, isa, false, true, fooPackageName);
 
         mFooSplit2UsedByOtherApps0 = new TestData(fooPackageName,
-                fooCodeDir + "split-2.apk", 0, isa, true, true);
+                fooCodeDir + "split-2.apk", 0, isa, true, true, "used.by.other.com");
 
         mFooSecondary1User0 = new TestData(fooPackageName,
-                fooDataDir + "sec-1.dex", 0, isa, false, false);
+                fooDataDir + "sec-1.dex", 0, isa, false, false, fooPackageName);
 
         mFooSecondary1User1 = new TestData(fooPackageName,
-                fooDataDir + "sec-1.dex", 1, isa, false, false);
+                fooDataDir + "sec-1.dex", 1, isa, false, false, fooPackageName);
 
         mFooSecondary2UsedByOtherApps0 = new TestData(fooPackageName,
-                fooDataDir + "sec-2.dex", 0, isa, true, false);
+                fooDataDir + "sec-2.dex", 0, isa, true, false, "used.by.other.com");
 
         mInvalidIsa = new TestData(fooPackageName,
-                fooCodeDir + "base.apk", 0, "INVALID_ISA", false, true);
+                fooCodeDir + "base.apk", 0, "INVALID_ISA", false, true, "INALID_USER");
 
         String barPackageName = "com.google.bar";
         String barCodeDir = "/data/app/com.google.bar/";
@@ -98,11 +99,11 @@
         String barDataDir1 = "/data/user/1/com.google.bar/";
 
         mBarBaseUser0 = new TestData(barPackageName,
-                barCodeDir + "base.apk", 0, isa, false, true);
+                barCodeDir + "base.apk", 0, isa, false, true, barPackageName);
         mBarSecondary1User0 = new TestData(barPackageName,
-                barDataDir + "sec-1.dex", 0, isa, false, false);
+                barDataDir + "sec-1.dex", 0, isa, false, false, barPackageName);
         mBarSecondary2User1 = new TestData(barPackageName,
-                barDataDir1 + "sec-2.dex", 1, isa, false, false);
+                barDataDir1 + "sec-2.dex", 1, isa, false, false, barPackageName);
     }
 
     @Test
@@ -249,7 +250,10 @@
         Map<String, Set<Integer>> packageToUsersMap = new HashMap<>();
         packageToUsersMap.put(mBarSecondary2User1.mPackageName,
                 new HashSet<>(Arrays.asList(mBarSecondary2User1.mOwnerUserId)));
-        mPackageDexUsage.syncData(packageToUsersMap);
+        Map<String, Set<String>> packageToCodePaths = new HashMap<>();
+        packageToCodePaths.put(mBarBaseUser0.mPackageName,
+                new HashSet<>(Arrays.asList(mBarBaseUser0.mDexFile)));
+        mPackageDexUsage.syncData(packageToUsersMap, packageToCodePaths);
 
         // Assert that only user 1 files are there.
         assertPackageDexUsage(mBarBaseUser0, mBarSecondary2User1);
@@ -319,7 +323,8 @@
             mFooSplit2UsedByOtherApps0.mOwnerUserId,
             mFooSplit2UsedByOtherApps0.mLoaderIsa,
             /*mIsUsedByOtherApps*/false,
-            mFooSplit2UsedByOtherApps0.mPrimaryOrSplit);
+            mFooSplit2UsedByOtherApps0.mPrimaryOrSplit,
+            mFooSplit2UsedByOtherApps0.mUsedBy);
         assertPackageDexUsage(noLongerUsedByOtherApps);
     }
 
@@ -332,14 +337,223 @@
         assertFalse(mPackageDexUsage.clearUsedByOtherApps(mFooSplit2UsedByOtherApps0.mPackageName));
     }
 
+    @Test
+    public void testRecordDexFileUsers() {
+        PackageDexUsage packageDexUsageRecordUsers = new PackageDexUsage();
+        Set<String> users = new HashSet<>(Arrays.asList(
+                new String[] {"another.package.1"}));
+        Set<String> usersExtra = new HashSet<>(Arrays.asList(
+                new String[] {"another.package.2", "another.package.3"}));
+
+        assertTrue(record(packageDexUsageRecordUsers, mFooSplit2UsedByOtherApps0, users));
+        assertTrue(record(packageDexUsageRecordUsers, mFooSplit2UsedByOtherApps0, usersExtra));
+
+        assertTrue(record(packageDexUsageRecordUsers, mFooSecondary1User0, users));
+        assertTrue(record(packageDexUsageRecordUsers, mFooSecondary1User0, usersExtra));
+
+        packageDexUsageRecordUsers = writeAndReadBack(packageDexUsageRecordUsers);
+        // Verify that the users were recorded.
+        Set<String> userAll = new HashSet<>(users);
+        userAll.addAll(usersExtra);
+        assertPackageDexUsage(packageDexUsageRecordUsers, userAll, mFooSplit2UsedByOtherApps0,
+                mFooSecondary1User0);
+    }
+
+    @Test
+    public void testRecordDexFileUsersNotTheOwningPackage() {
+        PackageDexUsage packageDexUsageRecordUsers = new PackageDexUsage();
+        Set<String> users = new HashSet<>(Arrays.asList(
+                new String[] {mFooSplit2UsedByOtherApps0.mPackageName}));
+        Set<String> usersExtra = new HashSet<>(Arrays.asList(
+                new String[] {"another.package.2", "another.package.3"}));
+
+        assertTrue(record(packageDexUsageRecordUsers, mFooSplit2UsedByOtherApps0, users));
+        assertTrue(record(packageDexUsageRecordUsers, mFooSplit2UsedByOtherApps0, usersExtra));
+
+        assertTrue(record(packageDexUsageRecordUsers, mFooSecondary1User0, users));
+        assertTrue(record(packageDexUsageRecordUsers, mFooSecondary1User0, usersExtra));
+
+        packageDexUsageRecordUsers = writeAndReadBack(packageDexUsageRecordUsers);
+        // Verify that only the non owning packages were recorded.
+        assertPackageDexUsage(packageDexUsageRecordUsers, usersExtra, mFooSplit2UsedByOtherApps0,
+                mFooSecondary1User0);
+    }
+
+    @Test
+    public void testRecordClassLoaderContextVariableContext() {
+        // Record a secondary dex file.
+        assertTrue(record(mFooSecondary1User0));
+        // Now update its context.
+        TestData fooSecondary1User0NewContext = mFooSecondary1User0.updateClassLoaderContext(
+                "PCL[new_context.dex]");
+        assertTrue(record(fooSecondary1User0NewContext));
+
+        // Not check that the context was switch to variable.
+        TestData expectedContext = mFooSecondary1User0.updateClassLoaderContext(
+                PackageDexUsage.VARIABLE_CLASS_LOADER_CONTEXT);
+
+        assertPackageDexUsage(null, expectedContext);
+        writeAndReadBack();
+        assertPackageDexUsage(null, expectedContext);
+    }
+
+    @Test
+    public void testRecordClassLoaderContextUnsupportedContext() {
+        // Record a secondary dex file.
+        assertTrue(record(mFooSecondary1User0));
+        // Now update its context.
+        TestData unsupportedContext = mFooSecondary1User0.updateClassLoaderContext(
+                PackageDexUsage.UNSUPPORTED_CLASS_LOADER_CONTEXT);
+        assertTrue(record(unsupportedContext));
+
+        assertPackageDexUsage(null, unsupportedContext);
+        writeAndReadBack();
+        assertPackageDexUsage(null, unsupportedContext);
+    }
+
+    @Test
+    public void testRecordClassLoaderContextTransitionFromUnknown() {
+        // Record a secondary dex file.
+        TestData unknownContext = mFooSecondary1User0.updateClassLoaderContext(
+                PackageDexUsage.UNKNOWN_CLASS_LOADER_CONTEXT);
+        assertTrue(record(unknownContext));
+
+        assertPackageDexUsage(null, unknownContext);
+        writeAndReadBack();
+        assertPackageDexUsage(null, unknownContext);
+
+        // Now update the secondary dex record with a class loader context. This simulates the
+        // version 2 to version 3 upgrade.
+
+        assertTrue(record(mFooSecondary1User0));
+
+        assertPackageDexUsage(null, mFooSecondary1User0);
+        writeAndReadBack();
+        assertPackageDexUsage(null, mFooSecondary1User0);
+    }
+
+    @Test
+    public void testDexUsageClassLoaderContext() {
+        final boolean isUsedByOtherApps = false;
+        final int userId = 0;
+        PackageDexUsage.DexUseInfo validContext = new DexUseInfo(isUsedByOtherApps, userId,
+                "valid_context", "arm");
+        assertFalse(validContext.isUnknownClassLoaderContext());
+        assertFalse(validContext.isUnsupportedClassLoaderContext());
+        assertFalse(validContext.isVariableClassLoaderContext());
+
+        PackageDexUsage.DexUseInfo unsupportedContext = new DexUseInfo(isUsedByOtherApps, userId,
+                PackageDexUsage.UNSUPPORTED_CLASS_LOADER_CONTEXT, "arm");
+        assertFalse(unsupportedContext.isUnknownClassLoaderContext());
+        assertTrue(unsupportedContext.isUnsupportedClassLoaderContext());
+        assertFalse(unsupportedContext.isVariableClassLoaderContext());
+
+        PackageDexUsage.DexUseInfo variableContext = new DexUseInfo(isUsedByOtherApps, userId,
+                PackageDexUsage.VARIABLE_CLASS_LOADER_CONTEXT, "arm");
+        assertFalse(variableContext.isUnknownClassLoaderContext());
+        assertFalse(variableContext.isUnsupportedClassLoaderContext());
+        assertTrue(variableContext.isVariableClassLoaderContext());
+
+        PackageDexUsage.DexUseInfo unknownContext = new DexUseInfo(isUsedByOtherApps, userId,
+                PackageDexUsage.UNKNOWN_CLASS_LOADER_CONTEXT, "arm");
+        assertTrue(unknownContext.isUnknownClassLoaderContext());
+        assertFalse(unknownContext.isUnsupportedClassLoaderContext());
+        assertFalse(unknownContext.isVariableClassLoaderContext());
+    }
+
+    @Test
+    public void testReadVersion1() {
+        String isa = VMRuntime.getInstructionSet(Build.SUPPORTED_ABIS[0]);
+        // Equivalent to
+        //   record(mFooSplit2UsedByOtherApps0);
+        //   record(mFooSecondary1User0);
+        //   record(mFooSecondary2UsedByOtherApps0);
+        //   record(mBarBaseUser0);
+        //   record(mBarSecondary1User0);
+        String content = "PACKAGE_MANAGER__PACKAGE_DEX_USAGE__1\n"
+                + "com.google.foo,1\n"
+                + "#/data/user/0/com.google.foo/sec-1.dex\n"
+                + "0,0," + isa + "\n"
+                + "#/data/user/0/com.google.foo/sec-2.dex\n"
+                + "0,1," + isa + "\n"
+                + "com.google.bar,0\n"
+                + "#/data/user/0/com.google.bar/sec-1.dex\n"
+                + "0,0," + isa + "\n";
+
+        PackageDexUsage packageDexUsage = new PackageDexUsage();
+        try {
+            packageDexUsage.read(new StringReader(content));
+        } catch (IOException e) {
+            fail();
+        }
+
+        // After the read we must sync the data to fill the missing information on the code paths.
+        Map<String, Set<Integer>> packageToUsersMap = new HashMap<>();
+        Map<String, Set<String>> packageToCodePaths = new HashMap<>();
+
+        // Handle foo package.
+        packageToUsersMap.put(mFooSplit2UsedByOtherApps0.mPackageName,
+            new HashSet<>(Arrays.asList(mFooSplit2UsedByOtherApps0.mOwnerUserId)));
+        packageToCodePaths.put(mFooSplit2UsedByOtherApps0.mPackageName,
+            new HashSet<>(Arrays.asList(mFooSplit2UsedByOtherApps0.mDexFile,
+                mFooSplit1User0.mDexFile, mFooBaseUser0.mDexFile)));
+        // Handle bar package.
+        packageToUsersMap.put(mBarBaseUser0.mPackageName,
+            new HashSet<>(Arrays.asList(mBarBaseUser0.mOwnerUserId)));
+        packageToCodePaths.put(mBarBaseUser0.mPackageName,
+            new HashSet<>(Arrays.asList(mBarBaseUser0.mDexFile)));
+
+        // Sync the data.
+        packageDexUsage.syncData(packageToUsersMap, packageToCodePaths);
+
+        // Update the class loaders to unknown before asserting if needed. Before version 2 we
+        // didn't have any.
+        String unknown = PackageDexUsage.UNKNOWN_CLASS_LOADER_CONTEXT;
+        TestData fooBaseUser0 = mFooBaseUser0.updateClassLoaderContext(unknown);
+        TestData fooSplit1User0 = mFooSplit1User0.updateClassLoaderContext(unknown);
+        TestData fooSplit2UsedByOtherApps0 =
+            mFooSplit2UsedByOtherApps0.updateClassLoaderContext(unknown);
+        TestData fooSecondary1User0 = mFooSecondary1User0.updateClassLoaderContext(unknown);
+        TestData fooSecondary2UsedByOtherApps0 =
+            mFooSecondary2UsedByOtherApps0.updateClassLoaderContext(unknown);
+        TestData barBaseUser0 = mBarBaseUser0.updateClassLoaderContext(unknown);
+        TestData barSecondary1User0 = mBarSecondary1User0.updateClassLoaderContext(unknown);
+
+        // Assert foo code paths. Note that we ignore the users during upgrade.
+        final Set<String> ignoredUsers = null;
+        assertPackageDexUsage(packageDexUsage, ignoredUsers,
+            fooSplit2UsedByOtherApps0, fooSecondary1User0, fooSecondary2UsedByOtherApps0);
+        // Because fooSplit2UsedByOtherApps0 is used by others, all the other code paths must
+        // share the same data.
+        assertPackageDexUsage(packageDexUsage, ignoredUsers,
+            fooSplit1User0.updateUseByOthers(true),
+            fooSecondary1User0, fooSecondary2UsedByOtherApps0);
+        assertPackageDexUsage(packageDexUsage, ignoredUsers, fooBaseUser0.updateUseByOthers(true),
+            fooSecondary1User0, fooSecondary2UsedByOtherApps0);
+
+        // Assert bar code paths. Note that we ignore the users during upgrade.
+        assertPackageDexUsage(packageDexUsage, ignoredUsers, barBaseUser0, barSecondary1User0);
+    }
+
     private void assertPackageDexUsage(TestData primary, TestData... secondaries) {
+        assertPackageDexUsage(mPackageDexUsage, null, primary, secondaries);
+    }
+
+    private void assertPackageDexUsage(PackageDexUsage packageDexUsage, Set<String> users,
+            TestData primary, TestData... secondaries) {
         String packageName = primary == null ? secondaries[0].mPackageName : primary.mPackageName;
-        boolean primaryUsedByOtherApps = primary == null ? false : primary.mUsedByOtherApps;
-        PackageUseInfo pInfo = mPackageDexUsage.getPackageUseInfo(packageName);
+        boolean primaryUsedByOtherApps = primary != null && primary.mUsedByOtherApps;
+        PackageUseInfo pInfo = packageDexUsage.getPackageUseInfo(packageName);
 
         // Check package use info
         assertNotNull(pInfo);
-        assertEquals(primaryUsedByOtherApps, pInfo.isUsedByOtherApps());
+        if (primary != null) {
+            assertEquals(primaryUsedByOtherApps, pInfo.isUsedByOtherApps(primary.mDexFile));
+            if (users != null) {
+                assertEquals(pInfo.getLoadingPackages(primary.mDexFile), users);
+            }
+        }
+
         Map<String, DexUseInfo> dexUseInfoMap = pInfo.getDexUseInfoMap();
         assertEquals(secondaries.length, dexUseInfoMap.size());
 
@@ -351,24 +565,45 @@
             assertEquals(testData.mOwnerUserId, dInfo.getOwnerUserId());
             assertEquals(1, dInfo.getLoaderIsas().size());
             assertTrue(dInfo.getLoaderIsas().contains(testData.mLoaderIsa));
+            if (users != null) {
+                 assertEquals(dInfo.getLoadingPackages(), users);
+            }
+
+            assertEquals(testData.mClassLoaderContext, dInfo.getClassLoaderContext());
         }
     }
 
     private boolean record(TestData testData) {
         return mPackageDexUsage.record(testData.mPackageName, testData.mDexFile,
-                testData.mOwnerUserId, testData.mLoaderIsa, testData.mUsedByOtherApps,
-                testData.mPrimaryOrSplit);
+               testData.mOwnerUserId, testData.mLoaderIsa, testData.mUsedByOtherApps,
+               testData.mPrimaryOrSplit, testData.mUsedBy, testData.mClassLoaderContext);
+    }
+
+    private boolean record(PackageDexUsage packageDexUsage, TestData testData, Set<String> users) {
+        boolean result = true;
+        for (String user : users) {
+            result = result && packageDexUsage.record(testData.mPackageName, testData.mDexFile,
+                    testData.mOwnerUserId, testData.mLoaderIsa, testData.mUsedByOtherApps,
+                    testData.mPrimaryOrSplit, user, testData.mClassLoaderContext);
+        }
+        return result;
     }
 
     private void writeAndReadBack() {
+        mPackageDexUsage = writeAndReadBack(mPackageDexUsage);
+    }
+
+    private PackageDexUsage writeAndReadBack(PackageDexUsage packageDexUsage) {
         try {
             StringWriter writer = new StringWriter();
-            mPackageDexUsage.write(writer);
+            packageDexUsage.write(writer);
 
-            mPackageDexUsage = new PackageDexUsage();
-            mPackageDexUsage.read(new StringReader(writer.toString()));
+            PackageDexUsage newPackageDexUsage = new PackageDexUsage();
+            newPackageDexUsage.read(new StringReader(writer.toString()));
+            return newPackageDexUsage;
         } catch (IOException e) {
             fail("Unexpected IOException: " + e.getMessage());
+            return null;
         }
     }
 
@@ -379,16 +614,35 @@
         private final String mLoaderIsa;
         private final boolean mUsedByOtherApps;
         private final boolean mPrimaryOrSplit;
+        private final String mUsedBy;
+        private final String mClassLoaderContext;
 
         private TestData(String packageName, String dexFile, int ownerUserId,
-                 String loaderIsa, boolean isUsedByOtherApps, boolean primaryOrSplit) {
+                String loaderIsa, boolean isUsedByOtherApps, boolean primaryOrSplit, String usedBy) {
+            this(packageName, dexFile, ownerUserId, loaderIsa, isUsedByOtherApps, primaryOrSplit,
+                    usedBy, "DefaultClassLoaderContextFor_" + dexFile);
+        }
+        private TestData(String packageName, String dexFile, int ownerUserId,
+                String loaderIsa, boolean isUsedByOtherApps, boolean primaryOrSplit, String usedBy,
+                String classLoaderContext) {
             mPackageName = packageName;
             mDexFile = dexFile;
             mOwnerUserId = ownerUserId;
             mLoaderIsa = loaderIsa;
             mUsedByOtherApps = isUsedByOtherApps;
             mPrimaryOrSplit = primaryOrSplit;
+            mUsedBy = usedBy;
+            mClassLoaderContext = classLoaderContext;
         }
 
+        private TestData updateClassLoaderContext(String newContext) {
+            return new TestData(mPackageName, mDexFile, mOwnerUserId, mLoaderIsa, mUsedByOtherApps,
+                    mPrimaryOrSplit, mUsedBy, newContext);
+        }
+
+        private TestData updateUseByOthers(boolean newUsedByOthers) {
+            return new TestData(mPackageName, mDexFile, mOwnerUserId, mLoaderIsa, newUsedByOthers,
+                mPrimaryOrSplit, mUsedBy, mClassLoaderContext);
+        }
     }
 }
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 d12c07a..7c31e80 100644
--- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
@@ -32,6 +32,10 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP;
+import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE;
+import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING;
+import static android.os.PowerManagerInternal.WAKEFULNESS_DREAMING;
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Matchers.anyBoolean;
 import static org.mockito.Matchers.eq;
@@ -92,4 +96,33 @@
         int reason = mService.getLastShutdownReasonInternal(mTempReason);
         assertThat(reason).isEqualTo(PowerManager.SHUTDOWN_REASON_THERMAL_SHUTDOWN);
     }
+
+    @SmallTest
+    public void testGetDesiredScreenPolicy_WithVR() throws Exception {
+        // Brighten up the screen
+        mService.setWakefulnessLocked(WAKEFULNESS_AWAKE, 0);
+        assertThat(mService.getDesiredScreenPolicyLocked()).isEqualTo(
+                DisplayPowerRequest.POLICY_BRIGHT);
+
+        // Move to VR
+        mService.setVrModeEnabled(true);
+        assertThat(mService.getDesiredScreenPolicyLocked()).isEqualTo(
+                DisplayPowerRequest.POLICY_VR);
+
+        // Then take a nap
+        mService.setWakefulnessLocked(WAKEFULNESS_ASLEEP, 0);
+        assertThat(mService.getDesiredScreenPolicyLocked()).isEqualTo(
+                DisplayPowerRequest.POLICY_OFF);
+
+        // Wake up to VR
+        mService.setWakefulnessLocked(WAKEFULNESS_AWAKE, 0);
+        assertThat(mService.getDesiredScreenPolicyLocked()).isEqualTo(
+                DisplayPowerRequest.POLICY_VR);
+
+        // And back to normal
+        mService.setVrModeEnabled(false);
+        assertThat(mService.getDesiredScreenPolicyLocked()).isEqualTo(
+                DisplayPowerRequest.POLICY_BRIGHT);
+
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/storage/DiskStatsLoggingServiceTest.java b/services/tests/servicestests/src/com/android/server/storage/DiskStatsLoggingServiceTest.java
index 375edf3..b647b99 100644
--- a/services/tests/servicestests/src/com/android/server/storage/DiskStatsLoggingServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/storage/DiskStatsLoggingServiceTest.java
@@ -149,11 +149,13 @@
         assertThat(json.getLong(DiskStatsFileLogger.DOWNLOADS_KEY)).isEqualTo(3L);
         assertThat(json.getLong(DiskStatsFileLogger.SYSTEM_KEY)).isEqualTo(10L);
         assertThat(json.getLong(DiskStatsFileLogger.MISC_KEY)).isEqualTo(7L);
-        assertThat(json.getLong(DiskStatsFileLogger.APP_SIZE_AGG_KEY)).isEqualTo(15L);
+        assertThat(json.getLong(DiskStatsFileLogger.APP_SIZE_AGG_KEY)).isEqualTo(10L);
+        assertThat(json.getLong(DiskStatsFileLogger.APP_DATA_SIZE_AGG_KEY)).isEqualTo(5L);
         assertThat(json.getLong(DiskStatsFileLogger.APP_CACHE_AGG_KEY)).isEqualTo(55L);
         assertThat(
                 json.getJSONArray(DiskStatsFileLogger.PACKAGE_NAMES_KEY).length()).isEqualTo(1L);
         assertThat(json.getJSONArray(DiskStatsFileLogger.APP_SIZES_KEY).length()).isEqualTo(1L);
+        assertThat(json.getJSONArray(DiskStatsFileLogger.APP_DATA_KEY).length()).isEqualTo(1L);
         assertThat(json.getJSONArray(DiskStatsFileLogger.APP_CACHES_KEY).length()).isEqualTo(1L);
     }
 
diff --git a/services/tests/servicestests/src/com/android/server/timezone/CheckTokenTest.java b/services/tests/servicestests/src/com/android/server/timezone/CheckTokenTest.java
new file mode 100644
index 0000000..9603a06
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/timezone/CheckTokenTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.timezone;
+
+import org.junit.Test;
+
+import android.support.test.filters.SmallTest;
+
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.fail;
+
+@SmallTest
+public class CheckTokenTest {
+
+    @Test
+    public void toByteArray() throws Exception {
+        PackageVersions packageVersions =
+                new PackageVersions(1 /* updateAppVersion */, 1 /* dataAppVersion */);
+        CheckToken originalToken = new CheckToken(1 /* optimisticLockId */, packageVersions);
+        assertEquals(originalToken, CheckToken.fromByteArray(originalToken.toByteArray()));
+    }
+
+    @Test
+    public void fromByteArray() {
+        PackageVersions packageVersions =
+                new PackageVersions(1 /* updateAppVersion */, 1 /* dataAppVersion */);
+        CheckToken token = new CheckToken(1, packageVersions);
+        byte[] validTokenBytes = token.toByteArray();
+        byte[] shortTokenBytes = new byte[validTokenBytes.length - 1];
+        System.arraycopy(validTokenBytes, 0, shortTokenBytes, 0, shortTokenBytes.length);
+
+        try {
+            CheckToken.fromByteArray(shortTokenBytes);
+            fail();
+        } catch (IOException expected) {}
+    }
+
+    @Test
+    public void equals() {
+        PackageVersions packageVersions1 =
+                new PackageVersions(1 /* updateAppVersion */, 1 /* dataAppVersion */);
+        PackageVersions packageVersions2 =
+                new PackageVersions(2 /* updateAppVersion */, 2 /* dataAppVersion */);
+        assertFalse(packageVersions1.equals(packageVersions2));
+
+        CheckToken baseline = new CheckToken(1, packageVersions1);
+        assertEquals(baseline, baseline);
+
+        CheckToken deepEqual = new CheckToken(1, packageVersions1);
+        assertEquals(baseline, deepEqual);
+
+        CheckToken differentOptimisticLockId = new CheckToken(2, packageVersions1);
+        assertFalse(differentOptimisticLockId.equals(baseline));
+
+        CheckToken differentPackageVersions = new CheckToken(1, packageVersions2);
+        assertFalse(differentPackageVersions.equals(baseline));
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/timezone/PackageStatusStorageTest.java b/services/tests/servicestests/src/com/android/server/timezone/PackageStatusStorageTest.java
new file mode 100644
index 0000000..b57cac0
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/timezone/PackageStatusStorageTest.java
@@ -0,0 +1,256 @@
+/*
+ * 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.timezone;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import static junit.framework.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+@SmallTest
+public class PackageStatusStorageTest {
+    private static final PackageVersions VALID_PACKAGE_VERSIONS = new PackageVersions(1, 2);
+
+    private PackageStatusStorage mPackageStatusStorage;
+
+    @Before
+    public void setUp() throws Exception {
+        Context context = InstrumentationRegistry.getContext();
+        File dataDir = context.getFilesDir();
+
+        // Using the instrumentation context means the database is created in a test app-specific
+        // directory.
+        mPackageStatusStorage = new PackageStatusStorage(dataDir);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        mPackageStatusStorage.deleteFileForTests();
+    }
+
+    @Test
+    public void getPackageStatus_initialState() {
+        assertNull(mPackageStatusStorage.getPackageStatus());
+    }
+
+    @Test
+    public void resetCheckState() {
+        // Assert initial state.
+        assertNull(mPackageStatusStorage.getPackageStatus());
+
+        CheckToken token1 = mPackageStatusStorage.generateCheckToken(VALID_PACKAGE_VERSIONS);
+
+        // There should now be a state.
+        assertNotNull(mPackageStatusStorage.getPackageStatus());
+
+        // Now clear the state.
+        mPackageStatusStorage.resetCheckState();
+
+        // After reset, there should be no package state again.
+        assertNull(mPackageStatusStorage.getPackageStatus());
+
+        CheckToken token2 = mPackageStatusStorage.generateCheckToken(VALID_PACKAGE_VERSIONS);
+
+        // Token after a reset should still be distinct.
+        assertFalse(token1.equals(token2));
+
+        // Now clear the state again.
+        mPackageStatusStorage.resetCheckState();
+
+        // After reset, there should be no package state again.
+        assertNull(mPackageStatusStorage.getPackageStatus());
+
+        CheckToken token3 = mPackageStatusStorage.generateCheckToken(VALID_PACKAGE_VERSIONS);
+
+        // A CheckToken generated after a reset should still be distinct.
+        assertFalse(token2.equals(token3));
+    }
+
+    @Test
+    public void generateCheckToken_missingFileBehavior() {
+        // Assert initial state.
+        assertNull(mPackageStatusStorage.getPackageStatus());
+
+        CheckToken token1 = mPackageStatusStorage.generateCheckToken(VALID_PACKAGE_VERSIONS);
+        assertNotNull(token1);
+
+        // There should now be state.
+        assertNotNull(mPackageStatusStorage.getPackageStatus());
+
+        // Corrupt the data by removing the file.
+        mPackageStatusStorage.deleteFileForTests();
+
+        // Check that generateCheckToken recovers.
+        assertNotNull(mPackageStatusStorage.generateCheckToken(VALID_PACKAGE_VERSIONS));
+    }
+
+    @Test
+    public void getPackageStatus_missingFileBehavior() {
+        // Assert initial state.
+        assertNull(mPackageStatusStorage.getPackageStatus());
+
+        CheckToken token1 = mPackageStatusStorage.generateCheckToken(VALID_PACKAGE_VERSIONS);
+        assertNotNull(token1);
+
+        // There should now be a state.
+        assertNotNull(mPackageStatusStorage.getPackageStatus());
+
+        // Corrupt the data by removing the file.
+        mPackageStatusStorage.deleteFileForTests();
+
+        assertNull(mPackageStatusStorage.getPackageStatus());
+    }
+
+    @Test
+    public void markChecked_missingFileBehavior() {
+        // Assert initial state.
+        CheckToken token1 = mPackageStatusStorage.generateCheckToken(VALID_PACKAGE_VERSIONS);
+        assertNotNull(token1);
+
+        // There should now be a state.
+        assertNotNull(mPackageStatusStorage.getPackageStatus());
+
+        // Corrupt the data by removing the file.
+        mPackageStatusStorage.deleteFileForTests();
+
+        // The missing file should mean token1 is now considered invalid, so we should get a false.
+        assertFalse(mPackageStatusStorage.markChecked(token1, true /* succeeded */));
+
+        // The storage should have recovered and we should be able to carry on like before.
+        CheckToken token2 = mPackageStatusStorage.generateCheckToken(VALID_PACKAGE_VERSIONS);
+        assertTrue(mPackageStatusStorage.markChecked(token2, true /* succeeded */));
+    }
+
+    @Test
+    public void checkToken_tokenIsUnique() {
+        PackageVersions packageVersions = VALID_PACKAGE_VERSIONS;
+        PackageStatus expectedPackageStatus =
+                new PackageStatus(PackageStatus.CHECK_STARTED, packageVersions);
+
+        CheckToken token1 = mPackageStatusStorage.generateCheckToken(packageVersions);
+        assertEquals(packageVersions, token1.mPackageVersions);
+
+        PackageStatus actualPackageStatus1 = mPackageStatusStorage.getPackageStatus();
+        assertEquals(expectedPackageStatus, actualPackageStatus1);
+
+        CheckToken token2 = mPackageStatusStorage.generateCheckToken(packageVersions);
+        assertEquals(packageVersions, token1.mPackageVersions);
+        assertFalse(token1.mOptimisticLockId == token2.mOptimisticLockId);
+        assertFalse(token1.equals(token2));
+    }
+
+    @Test
+    public void markChecked_checkSucceeded() {
+        PackageVersions packageVersions = VALID_PACKAGE_VERSIONS;
+
+        CheckToken token = mPackageStatusStorage.generateCheckToken(packageVersions);
+        boolean writeOk = mPackageStatusStorage.markChecked(token, true /* succeeded */);
+        assertTrue(writeOk);
+
+        PackageStatus expectedPackageStatus =
+                new PackageStatus(PackageStatus.CHECK_COMPLETED_SUCCESS, packageVersions);
+        assertEquals(expectedPackageStatus, mPackageStatusStorage.getPackageStatus());
+    }
+
+    @Test
+    public void markChecked_checkFailed() {
+        PackageVersions packageVersions = VALID_PACKAGE_VERSIONS;
+
+        CheckToken token = mPackageStatusStorage.generateCheckToken(packageVersions);
+        boolean writeOk = mPackageStatusStorage.markChecked(token, false /* succeeded */);
+        assertTrue(writeOk);
+
+        PackageStatus expectedPackageStatus =
+                new PackageStatus(PackageStatus.CHECK_COMPLETED_FAILURE, packageVersions);
+        assertEquals(expectedPackageStatus, mPackageStatusStorage.getPackageStatus());
+    }
+
+    @Test
+    public void markChecked_optimisticLocking_multipleToken() {
+        PackageVersions packageVersions = VALID_PACKAGE_VERSIONS;
+        CheckToken token1 = mPackageStatusStorage.generateCheckToken(packageVersions);
+        CheckToken token2 = mPackageStatusStorage.generateCheckToken(packageVersions);
+
+        PackageStatus packageStatusBeforeChecked = mPackageStatusStorage.getPackageStatus();
+
+        boolean writeOk1 = mPackageStatusStorage.markChecked(token1, true /* succeeded */);
+        // Generation of token2 should mean that token1 is no longer valid.
+        assertFalse(writeOk1);
+        assertEquals(packageStatusBeforeChecked, mPackageStatusStorage.getPackageStatus());
+
+        boolean writeOk2 = mPackageStatusStorage.markChecked(token2, true /* succeeded */);
+        // token2 should still be valid, and the attempt with token1 should have had no effect.
+        assertTrue(writeOk2);
+        PackageStatus expectedPackageStatus =
+                new PackageStatus(PackageStatus.CHECK_COMPLETED_SUCCESS, packageVersions);
+        assertEquals(expectedPackageStatus, mPackageStatusStorage.getPackageStatus());
+    }
+
+    @Test
+    public void markChecked_optimisticLocking_repeatedTokenUse() {
+        PackageVersions packageVersions = VALID_PACKAGE_VERSIONS;
+        CheckToken token = mPackageStatusStorage.generateCheckToken(packageVersions);
+
+        boolean writeOk1 = mPackageStatusStorage.markChecked(token, true /* succeeded */);
+        assertTrue(writeOk1);
+
+        PackageStatus expectedPackageStatus =
+                new PackageStatus(PackageStatus.CHECK_COMPLETED_SUCCESS, packageVersions);
+        assertEquals(expectedPackageStatus, mPackageStatusStorage.getPackageStatus());
+
+        // token cannot be reused.
+        boolean writeOk2 = mPackageStatusStorage.markChecked(token, true /* succeeded */);
+        assertFalse(writeOk2);
+        assertEquals(expectedPackageStatus, mPackageStatusStorage.getPackageStatus());
+    }
+
+    @Test
+    public void dump() {
+        StringWriter stringWriter = new StringWriter();
+        PrintWriter printWriter = new PrintWriter(stringWriter);
+
+        // Dump initial state.
+        mPackageStatusStorage.dump(printWriter);
+
+        // No crash and it does something.
+        assertFalse(stringWriter.toString().isEmpty());
+
+        // Reset
+        stringWriter.getBuffer().setLength(0);
+        assertTrue(stringWriter.toString().isEmpty());
+
+        // Store something.
+        mPackageStatusStorage.generateCheckToken(VALID_PACKAGE_VERSIONS);
+
+        mPackageStatusStorage.dump(printWriter);
+
+        assertFalse(stringWriter.toString().isEmpty());
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/timezone/PackageStatusTest.java b/services/tests/servicestests/src/com/android/server/timezone/PackageStatusTest.java
new file mode 100644
index 0000000..c0ae81e
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/timezone/PackageStatusTest.java
@@ -0,0 +1,53 @@
+/*
+ * 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.timezone;
+
+import org.junit.Test;
+
+import android.support.test.filters.SmallTest;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+@SmallTest
+public class PackageStatusTest {
+
+    @Test
+    public void equals() {
+        PackageVersions packageVersions1 =
+                new PackageVersions(1 /* updateAppVersion */, 1 /* dataAppVersion */);
+        PackageVersions packageVersions2 =
+                new PackageVersions(2 /* updateAppVersion */, 1 /* dataAppVersion */);
+        assertFalse(packageVersions1.equals(packageVersions2));
+
+        PackageStatus baseline =
+                new PackageStatus(PackageStatus.CHECK_STARTED, packageVersions1);
+        assertEquals(baseline, baseline);
+
+        PackageStatus deepEqual =
+                new PackageStatus(PackageStatus.CHECK_STARTED, packageVersions1);
+        assertEquals(baseline, deepEqual);
+
+        PackageStatus differentStatus =
+                new PackageStatus(PackageStatus.CHECK_COMPLETED_SUCCESS, packageVersions1);
+        assertFalse(differentStatus.equals(baseline));
+
+        PackageStatus differentPackageVersions =
+                new PackageStatus(PackageStatus.CHECK_STARTED, packageVersions2);
+        assertFalse(differentPackageVersions.equals(baseline));
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/timezone/PackageTrackerTest.java b/services/tests/servicestests/src/com/android/server/timezone/PackageTrackerTest.java
new file mode 100644
index 0000000..7d73e82
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/timezone/PackageTrackerTest.java
@@ -0,0 +1,1478 @@
+/*
+ * 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.timezone;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import android.app.timezone.RulesUpdaterContract;
+import android.content.Context;
+import android.content.Intent;
+import android.provider.TimeZoneRulesDataContract;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+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.junit.Assert.fail;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.mockito.hamcrest.MockitoHamcrest.argThat;
+
+/**
+ * White box interaction / unit testing of the {@link PackageTracker}.
+ */
+@SmallTest
+public class PackageTrackerTest {
+    private static final String UPDATE_APP_PACKAGE_NAME = "updateAppPackageName";
+    private static final String DATA_APP_PACKAGE_NAME = "dataAppPackageName";
+    private static final PackageVersions INITIAL_APP_PACKAGE_VERSIONS =
+            new PackageVersions(2 /* updateAppVersion */, 2 /* dataAppVersion */);
+
+    private ConfigHelper mMockConfigHelper;
+    private PackageManagerHelper mMockPackageManagerHelper;
+
+    private FakeClockHelper mFakeClock;
+    private FakeIntentHelper mFakeIntentHelper;
+    private PackageStatusStorage mPackageStatusStorage;
+    private PackageTracker mPackageTracker;
+
+    @Before
+    public void setUp() throws Exception {
+        Context context = InstrumentationRegistry.getContext();
+
+        mFakeClock = new FakeClockHelper();
+
+        // Read-only interfaces so are easy to mock.
+        mMockConfigHelper = mock(ConfigHelper.class);
+        mMockPackageManagerHelper = mock(PackageManagerHelper.class);
+
+        // Using the instrumentation context means the database is created in a test app-specific
+        // directory. We can use the real thing for this test.
+        mPackageStatusStorage = new PackageStatusStorage(context.getFilesDir());
+
+        // For other interactions with the Android framework we create a fake object.
+        mFakeIntentHelper = new FakeIntentHelper();
+
+        // Create the PackageTracker to use in tests.
+        mPackageTracker = new PackageTracker(
+                mFakeClock,
+                mMockConfigHelper,
+                mMockPackageManagerHelper,
+                mPackageStatusStorage,
+                mFakeIntentHelper);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        if (mPackageStatusStorage != null) {
+            mPackageStatusStorage.deleteFileForTests();
+        }
+    }
+
+    @Test
+    public void trackingDisabled_intentHelperNotUsed() {
+        // Set up device configuration.
+        configureTrackingDisabled();
+
+        // Initialize the tracker.
+        mPackageTracker.start();
+
+        // Check the IntentHelper was not initialized.
+        mFakeIntentHelper.assertNotInitialized();
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+    }
+
+    @Test
+    public void trackingDisabled_triggerUpdateIfNeededNotAllowed() {
+        // Set up device configuration.
+        configureTrackingDisabled();
+
+        // Initialize the tracker.
+        mPackageTracker.start();
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+
+        try {
+            // This call should also not be allowed and will throw an exception if tracking is
+            // disabled.
+            mPackageTracker.triggerUpdateIfNeeded(true);
+            fail();
+        } catch (IllegalStateException expected) {}
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+    }
+
+    @Test
+    public void trackingDisabled_unsolicitedResultsIgnored_withoutToken() {
+        // Set up device configuration.
+        configureTrackingDisabled();
+
+        // Initialize the tracker.
+        mPackageTracker.start();
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+
+        // Receiving a check result when tracking is disabled should cause the storage to be
+        // reset.
+        mPackageTracker.recordCheckResult(null /* checkToken */, true /* success */);
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+
+        // Assert the storage was reset.
+        checkPackageStorageStatusIsInitialOrReset();
+    }
+
+    @Test
+    public void trackingDisabled_unsolicitedResultsIgnored_withToken() {
+        // Set up device configuration.
+        configureTrackingDisabled();
+
+        // Set the storage into an arbitrary state so we can detect a reset.
+        mPackageStatusStorage.generateCheckToken(INITIAL_APP_PACKAGE_VERSIONS);
+
+        // Initialize the tracker.
+        mPackageTracker.start();
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+
+        // Receiving a check result when tracking is disabled should cause the storage to be reset.
+        mPackageTracker.recordCheckResult(createArbitraryCheckToken(), true /* success */);
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+
+        // Assert the storage was reset.
+        checkPackageStorageStatusIsInitialOrReset();
+    }
+
+    @Test
+    public void trackingEnabled_updateAppConfigMissing() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureUpdateAppPackageNameMissing();
+        configureDataAppPackageOk(DATA_APP_PACKAGE_NAME);
+
+        try {
+            // Initialize the tracker.
+            mPackageTracker.start();
+            fail();
+        } catch (RuntimeException expected) {}
+
+        mFakeIntentHelper.assertNotInitialized();
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+    }
+
+    @Test
+    public void trackingEnabled_updateAppNotPrivileged() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureUpdateAppPackageNotPrivileged(UPDATE_APP_PACKAGE_NAME);
+        configureDataAppPackageOk(DATA_APP_PACKAGE_NAME);
+
+        try {
+            // Initialize the tracker.
+            mPackageTracker.start();
+            fail();
+        } catch (RuntimeException expected) {}
+
+        mFakeIntentHelper.assertNotInitialized();
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+    }
+
+    @Test
+    public void trackingEnabled_dataAppConfigMissing() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureUpdateAppPackageOk(UPDATE_APP_PACKAGE_NAME);
+        configureDataAppPackageNameMissing();
+
+        try {
+            // Initialize the tracker.
+            mPackageTracker.start();
+            fail();
+        } catch (RuntimeException expected) {}
+
+        mFakeIntentHelper.assertNotInitialized();
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+    }
+
+    @Test
+    public void trackingEnabled_dataAppNotPrivileged() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureUpdateAppPackageOk(UPDATE_APP_PACKAGE_NAME);
+        configureDataAppPackageNotPrivileged(DATA_APP_PACKAGE_NAME);
+
+        try {
+            // Initialize the tracker.
+            mPackageTracker.start();
+            fail();
+        } catch (RuntimeException expected) {}
+
+        mFakeIntentHelper.assertNotInitialized();
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+     }
+
+    @Test
+    public void trackingEnabled_packageUpdate_badUpdateAppManifestEntry() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureValidApplications();
+
+        // Initialize the tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatusIsInitialOrReset();
+
+        // Configure a bad manifest for the update app. Should effectively turn off tracking.
+        PackageVersions packageVersions =
+                new PackageVersions(2 /* updateAppPackageVersion */, 3 /* dataAppPackageVersion */);
+        configureUpdateAppManifestBad(UPDATE_APP_PACKAGE_NAME);
+        configureDataAppManifestOk(DATA_APP_PACKAGE_NAME);
+        configureUpdateAppPackageVersion(
+                UPDATE_APP_PACKAGE_NAME, packageVersions.mUpdateAppVersion);
+        configureDataAppPackageVersion(DATA_APP_PACKAGE_NAME, packageVersions.mDataAppVersion);
+        // Simulate a tracked package being updated.
+        mFakeIntentHelper.simulatePackageUpdatedEvent();
+
+        // Assert the PackageTracker did not attempt to trigger an update.
+        mFakeIntentHelper.assertUpdateNotTriggered();
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+
+        // Assert the storage was not touched.
+        checkPackageStorageStatusIsInitialOrReset();
+    }
+
+    @Test
+    public void trackingEnabled_packageUpdate_badDataAppManifestEntry() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureValidApplications();
+
+        // Initialize the tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatusIsInitialOrReset();
+
+        // Configure a bad manifest for the data app. Should effectively turn off tracking.
+        PackageVersions packageVersions =
+                new PackageVersions(2 /* updateAppPackageVersion */, 3 /* dataAppPackageVersion */);
+        configureUpdateAppManifestOk(UPDATE_APP_PACKAGE_NAME);
+        configureDataAppManifestBad(DATA_APP_PACKAGE_NAME);
+        configureUpdateAppPackageVersion(
+                UPDATE_APP_PACKAGE_NAME, packageVersions.mUpdateAppVersion);
+        configureDataAppPackageVersion(DATA_APP_PACKAGE_NAME, packageVersions.mDataAppVersion);
+        mFakeIntentHelper.simulatePackageUpdatedEvent();
+
+        // Assert the PackageTracker did not attempt to trigger an update.
+        mFakeIntentHelper.assertUpdateNotTriggered();
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+
+        // Assert the storage was not touched.
+        checkPackageStorageStatusIsInitialOrReset();
+    }
+
+    @Test
+    public void trackingEnabled_packageUpdate_responseWithToken_success() throws Exception {
+        trackingEnabled_packageUpdate_responseWithToken(true);
+    }
+
+    @Test
+    public void trackingEnabled_packageUpdate_responseWithToken_failed() throws Exception {
+        trackingEnabled_packageUpdate_responseWithToken(false);
+    }
+
+    private void trackingEnabled_packageUpdate_responseWithToken(boolean success) throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureValidApplications();
+
+        // Initialize the tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatusIsInitialOrReset();
+
+        // Simulate a tracked package being updated.
+        PackageVersions packageVersions =
+                new PackageVersions(2 /* updateAppPackageVersion */, 3 /* dataAppPackageVersion */);
+        simulatePackageInstallation(packageVersions);
+
+        // Confirm an update was triggered.
+        checkUpdateCheckTriggered(packageVersions);
+
+        // Get the token that was passed to the intent helper, and pass it back.
+        CheckToken token = mFakeIntentHelper.captureAndResetLastToken();
+        mPackageTracker.recordCheckResult(token, success);
+
+        // Check storage and reliability triggering state.
+        if (success) {
+            checkUpdateCheckSuccessful(packageVersions);
+        } else {
+            checkUpdateCheckFailed(packageVersions);
+        }
+    }
+
+    @Test
+    public void trackingEnabled_packageUpdate_responseWithoutTokenCausesStorageReset_success()
+            throws Exception {
+        trackingEnabled_packageUpdate_responseWithoutTokenCausesStorageReset(true);
+    }
+
+    @Test
+    public void trackingEnabled_packageUpdate_responseWithoutTokenCausesStorageReset_failed()
+            throws Exception {
+        trackingEnabled_packageUpdate_responseWithoutTokenCausesStorageReset(false);
+    }
+
+    private void trackingEnabled_packageUpdate_responseWithoutTokenCausesStorageReset(
+            boolean success) throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureValidApplications();
+
+        // Initialize the tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatusIsInitialOrReset();
+
+        // Set up installed app versions / manifests.
+        PackageVersions packageVersions =
+                new PackageVersions(2 /* updateAppPackageVersion */, 3 /* dataAppPackageVersion */);
+        simulatePackageInstallation(packageVersions);
+
+        // Confirm an update was triggered.
+        checkUpdateCheckTriggered(packageVersions);
+
+        // Ignore the token that was given to the intent helper, just pass null.
+        mPackageTracker.recordCheckResult(null /* checkToken */, success);
+
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerScheduled();
+
+        // Assert the storage was reset.
+        checkPackageStorageStatusIsInitialOrReset();
+    }
+
+    /**
+     * Two package updates triggered for the same package versions. The second is triggered while
+     * the first is still happening.
+     */
+    @Test
+    public void trackingEnabled_packageUpdate_twoChecksNoPackageChange_secondWhileFirstInProgress()
+            throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureValidApplications();
+
+        // Initialize the tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatusIsInitialOrReset();
+
+        // Simulate package installation.
+        PackageVersions packageVersions =
+                new PackageVersions(2 /* updateAppPackageVersion */, 3 /* dataAppPackageVersion */);
+        simulatePackageInstallation(packageVersions);
+
+        // Confirm an update was triggered.
+        checkUpdateCheckTriggered(packageVersions);
+
+        // Get the first token.
+        CheckToken token1 = mFakeIntentHelper.captureAndResetLastToken();
+        assertEquals(packageVersions, token1.mPackageVersions);
+
+        // Now attempt to generate another check while the first is in progress and without having
+        // updated the package versions. The PackageTracker should trigger again for safety.
+        simulatePackageInstallation(packageVersions);
+
+        // Confirm an update was triggered.
+        checkUpdateCheckTriggered(packageVersions);
+
+        CheckToken token2 = mFakeIntentHelper.captureAndResetLastToken();
+        assertEquals(packageVersions, token2.mPackageVersions);
+        assertEquals(token1.mPackageVersions, token2.mPackageVersions);
+        assertTrue(token1.mOptimisticLockId != token2.mOptimisticLockId);
+    }
+
+    /**
+     * Two package updates triggered for the same package versions. The second happens after
+     * the first has succeeded.
+     */
+    @Test
+    public void trackingEnabled_packageUpdate_twoChecksNoPackageChange_sequential()
+            throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureValidApplications();
+
+        // Initialize the tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatusIsInitialOrReset();
+
+        // Simulate package installation.
+        PackageVersions packageVersions =
+                new PackageVersions(2 /* updateAppPackageVersion */, 3 /* dataAppPackageVersion */);
+        simulatePackageInstallation(packageVersions);
+
+        // Confirm an update was triggered.
+        checkUpdateCheckTriggered(packageVersions);
+
+        // Get the token.
+        CheckToken token = mFakeIntentHelper.captureAndResetLastToken();
+        assertEquals(packageVersions, token.mPackageVersions);
+
+        // Simulate a successful check.
+        mPackageTracker.recordCheckResult(token, true /* success */);
+
+        // Check storage and reliability triggering state.
+        checkUpdateCheckSuccessful(packageVersions);
+
+        // Now attempt to generate another check, but without having updated the package. The
+        // PackageTracker should be smart enough to recognize there's nothing to do here.
+        simulatePackageInstallation(packageVersions);
+
+        // Assert the PackageTracker did not attempt to trigger an update.
+        mFakeIntentHelper.assertUpdateNotTriggered();
+
+        // Check storage and reliability triggering state.
+        checkUpdateCheckSuccessful(packageVersions);
+    }
+
+    /**
+     * Two package updates triggered for the same package versions. The second is triggered after
+     * the first has failed.
+     */
+    @Test
+    public void trackingEnabled_packageUpdate_afterFailure() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureValidApplications();
+
+        // Initialize the tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatusIsInitialOrReset();
+
+        // Simulate package installation.
+        PackageVersions packageVersions =
+                new PackageVersions(2 /* updateAppPackageVersion */, 3 /* dataAppPackageVersion */);
+        simulatePackageInstallation(packageVersions);
+
+        // Confirm an update was triggered.
+        checkUpdateCheckTriggered(packageVersions);
+
+        // Get the first token.
+        CheckToken token1 = mFakeIntentHelper.captureAndResetLastToken();
+        assertEquals(packageVersions, token1.mPackageVersions);
+
+        // Simulate an *unsuccessful* check.
+        mPackageTracker.recordCheckResult(token1, false /* success */);
+
+        // Check storage and reliability triggering state.
+        checkUpdateCheckFailed(packageVersions);
+
+        // Now generate another check, but without having updated the package. The
+        // PackageTracker should recognize the last check failed and trigger again.
+        simulatePackageInstallation(packageVersions);
+
+        // Confirm an update was triggered.
+        checkUpdateCheckTriggered(packageVersions);
+
+        // Get the second token.
+        CheckToken token2 = mFakeIntentHelper.captureAndResetLastToken();
+
+        // Assert some things about the tokens.
+        assertEquals(packageVersions, token2.mPackageVersions);
+        assertTrue(token1.mOptimisticLockId != token2.mOptimisticLockId);
+
+        // For completeness, now simulate this check was successful.
+        mPackageTracker.recordCheckResult(token2, true /* success */);
+
+        // Check storage and reliability triggering state.
+        checkUpdateCheckSuccessful(packageVersions);
+    }
+
+    /**
+     * Two package updates triggered for different package versions. The second is triggered while
+     * the first is still happening.
+     */
+    @Test
+    public void trackingEnabled_packageUpdate_twoChecksWithPackageChange_firstCheckInProcess()
+            throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureValidApplications();
+
+        // Initialize the package tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatusIsInitialOrReset();
+
+        // Simulate package installation.
+        PackageVersions packageVersions1 =
+                new PackageVersions(2 /* updateAppPackageVersion */, 3 /* dataAppPackageVersion */);
+        simulatePackageInstallation(packageVersions1);
+
+        // Confirm an update was triggered.
+        checkUpdateCheckTriggered(packageVersions1);
+
+        // Get the first token.
+        CheckToken token1 = mFakeIntentHelper.captureAndResetLastToken();
+        assertEquals(packageVersions1, token1.mPackageVersions);
+
+        // Simulate a tracked package being updated a second time (before the response for the
+        // first has been received).
+        PackageVersions packageVersions2 =
+                new PackageVersions(3 /* updateAppPackageVersion */, 4 /* dataAppPackageVersion */);
+        simulatePackageInstallation(packageVersions2);
+
+        // Confirm an update was triggered.
+        checkUpdateCheckTriggered(packageVersions2);
+
+        // Get the second token.
+        CheckToken token2 = mFakeIntentHelper.captureAndResetLastToken();
+        assertEquals(packageVersions2, token2.mPackageVersions);
+
+        // token1 should be invalid because the token2 was generated.
+        mPackageTracker.recordCheckResult(token1, true /* success */);
+
+        // Reliability triggering should still be enabled.
+        mFakeIntentHelper.assertReliabilityTriggerScheduled();
+
+        // Check the expected storage state.
+        checkPackageStorageStatus(PackageStatus.CHECK_STARTED, packageVersions2);
+
+        // token2 should still be accepted.
+        mPackageTracker.recordCheckResult(token2, true /* success */);
+
+        // Check storage and reliability triggering state.
+        checkUpdateCheckSuccessful(packageVersions2);
+    }
+
+    /**
+     * Two package updates triggered for different package versions. The second is triggered after
+     * the first has completed successfully.
+     */
+    @Test
+    public void trackingEnabled_packageUpdate_twoChecksWithPackageChange_sequential()
+            throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureValidApplications();
+
+        // Initialize the package tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatusIsInitialOrReset();
+
+        // Simulate package installation.
+        PackageVersions packageVersions1 =
+                new PackageVersions(2 /* updateAppPackageVersion */, 3 /* dataAppPackageVersion */);
+        simulatePackageInstallation(packageVersions1);
+
+        // Confirm an update was triggered.
+        checkUpdateCheckTriggered(packageVersions1);
+
+        // Get the first token.
+        CheckToken token1 = mFakeIntentHelper.captureAndResetLastToken();
+        assertEquals(packageVersions1, token1.mPackageVersions);
+
+        // token1 should be accepted.
+        mPackageTracker.recordCheckResult(token1, true /* success */);
+
+        // Check storage and reliability triggering state.
+        checkUpdateCheckSuccessful(packageVersions1);
+
+        // Simulate a tracked package being updated a second time.
+        PackageVersions packageVersions2 =
+                new PackageVersions(3 /* updateAppPackageVersion */, 4 /* dataAppPackageVersion */);
+        simulatePackageInstallation(packageVersions2);
+
+        // Confirm an update was triggered.
+        checkUpdateCheckTriggered(packageVersions2);
+
+        // Get the second token.
+        CheckToken token2 = mFakeIntentHelper.captureAndResetLastToken();
+        assertEquals(packageVersions2, token2.mPackageVersions);
+
+        // token2 should still be accepted.
+        mPackageTracker.recordCheckResult(token2, true /* success */);
+
+        // Check storage and reliability triggering state.
+        checkUpdateCheckSuccessful(packageVersions2);
+    }
+
+    /**
+     * Replaying the same token twice.
+     */
+    @Test
+    public void trackingEnabled_packageUpdate_sameTokenReplayFails() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        configureValidApplications();
+
+        // Initialize the package tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatusIsInitialOrReset();
+
+        // Simulate package installation.
+        PackageVersions packageVersions1 =
+                new PackageVersions(2 /* updateAppPackageVersion */, 3 /* dataAppPackageVersion */);
+        simulatePackageInstallation(packageVersions1);
+
+        // Confirm an update was triggered.
+        checkUpdateCheckTriggered(packageVersions1);
+
+        // Get the first token.
+        CheckToken token1 = mFakeIntentHelper.captureAndResetLastToken();
+        assertEquals(packageVersions1, token1.mPackageVersions);
+
+        // token1 should be accepted.
+        mPackageTracker.recordCheckResult(token1, true /* success */);
+
+        // Check storage and reliability triggering state.
+        checkUpdateCheckSuccessful(packageVersions1);
+
+        // Apply token1 again.
+        mPackageTracker.recordCheckResult(token1, true /* success */);
+
+        // Check the expected storage state. No real way to tell if it has been updated, but
+        // we can check the final state is still what it should be.
+        checkPackageStorageStatus(PackageStatus.CHECK_COMPLETED_SUCCESS, packageVersions1);
+
+        // Under the covers we expect it to fail to update because the storage should recognize that
+        // the token is no longer valid.
+        mFakeIntentHelper.assertReliabilityTriggerScheduled();
+
+        // Peek inside the package tracker to make sure it is tracking failure counts properly.
+        assertEquals(1, mPackageTracker.getCheckFailureCountForTests());
+    }
+
+    @Test
+    public void trackingEnabled_reliabilityTrigger_firstTime_initialStorage() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        PackageVersions packageVersions = configureValidApplications();
+
+        // Initialize the package tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatusIsInitialOrReset();
+
+        // Simulate a reliability trigger.
+        mPackageTracker.triggerUpdateIfNeeded(false /* packageChanged */);
+
+        // Assert the PackageTracker did trigger an update.
+        checkUpdateCheckTriggered(packageVersions);
+
+        // Confirm the token was correct.
+        CheckToken token1 = mFakeIntentHelper.captureAndResetLastToken();
+        assertEquals(packageVersions, token1.mPackageVersions);
+
+        // token1 should be accepted.
+        mPackageTracker.recordCheckResult(token1, true /* success */);
+
+        // Check storage and reliability triggering state.
+        checkUpdateCheckSuccessful(packageVersions);
+    }
+
+    @Test
+    public void trackingEnabled_reliabilityTrigger_afterRebootNoTriggerNeeded() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+        PackageVersions packageVersions = configureValidApplications();
+
+        // Force the storage into a state we want.
+        mPackageStatusStorage.forceCheckStateForTests(
+                PackageStatus.CHECK_COMPLETED_SUCCESS, packageVersions);
+
+        // Initialize the package tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatus(PackageStatus.CHECK_COMPLETED_SUCCESS, packageVersions);
+
+        // Simulate a reliability trigger.
+        mPackageTracker.triggerUpdateIfNeeded(false /* packageChanged */);
+
+        // Assert the PackageTracker did not attempt to trigger an update.
+        mFakeIntentHelper.assertUpdateNotTriggered();
+
+        // Check storage and reliability triggering state.
+        checkUpdateCheckSuccessful(packageVersions);
+    }
+
+    /**
+     * Simulates the device starting where the storage records do not match the installed app
+     * versions. The reliability trigger should cause the package tracker to perform a check.
+     */
+    @Test
+    public void trackingEnabled_reliabilityTrigger_afterRebootTriggerNeededBecausePreviousFailed()
+            throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+        configureReliabilityConfigSettingsOk();
+
+        PackageVersions oldPackageVersions = new PackageVersions(1, 1);
+        PackageVersions currentPackageVersions = new PackageVersions(2, 2);
+
+        // Simulate there being a newer version installed than the one recorded in storage.
+        configureValidApplications(currentPackageVersions);
+
+        // Force the storage into a state we want.
+        mPackageStatusStorage.forceCheckStateForTests(
+                PackageStatus.CHECK_COMPLETED_FAILURE, oldPackageVersions);
+
+        // Initialize the package tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatus(PackageStatus.CHECK_COMPLETED_FAILURE, oldPackageVersions);
+
+        // Simulate a reliability trigger.
+        mPackageTracker.triggerUpdateIfNeeded(false /* packageChanged */);
+
+        // Assert the PackageTracker did trigger an update.
+        checkUpdateCheckTriggered(currentPackageVersions);
+
+        // Simulate the update check completing successfully.
+        CheckToken checkToken = mFakeIntentHelper.captureAndResetLastToken();
+        mPackageTracker.recordCheckResult(checkToken, true /* success */);
+
+        // Check storage and reliability triggering state.
+        checkUpdateCheckSuccessful(currentPackageVersions);
+    }
+
+    /**
+     * Simulates persistent failures of the reliability check. It should stop after the configured
+     * number of checks.
+     */
+    @Test
+    public void trackingEnabled_reliabilityTrigger_repeatedFailures() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+
+        int retriesAllowed = 3;
+        int checkDelayMillis = 5 * 60 * 1000;
+        configureReliabilityConfigSettings(retriesAllowed, checkDelayMillis);
+
+        PackageVersions oldPackageVersions = new PackageVersions(1, 1);
+        PackageVersions currentPackageVersions = new PackageVersions(2, 2);
+
+        // Simulate there being a newer version installed than the one recorded in storage.
+        configureValidApplications(currentPackageVersions);
+
+        // Force the storage into a state we want.
+        mPackageStatusStorage.forceCheckStateForTests(
+                PackageStatus.CHECK_COMPLETED_FAILURE, oldPackageVersions);
+
+        // Initialize the package tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatus(PackageStatus.CHECK_COMPLETED_FAILURE, oldPackageVersions);
+
+        for (int i = 0; i < retriesAllowed + 1; i++) {
+            // Simulate a reliability trigger.
+            mPackageTracker.triggerUpdateIfNeeded(false /* packageChanged */);
+
+            // Assert the PackageTracker did trigger an update.
+            checkUpdateCheckTriggered(currentPackageVersions);
+
+            // Check the PackageTracker failure count before calling recordCheckResult.
+            assertEquals(i, mPackageTracker.getCheckFailureCountForTests());
+
+            // Simulate a check failure.
+            CheckToken checkToken = mFakeIntentHelper.captureAndResetLastToken();
+            mPackageTracker.recordCheckResult(checkToken, false /* success */);
+
+            // Peek inside the package tracker to make sure it is tracking failure counts properly.
+            assertEquals(i + 1, mPackageTracker.getCheckFailureCountForTests());
+
+            // Confirm nothing has changed.
+            mFakeIntentHelper.assertUpdateNotTriggered();
+            checkPackageStorageStatus(PackageStatus.CHECK_COMPLETED_FAILURE,
+                    currentPackageVersions);
+
+            // Check reliability triggering is in the correct state.
+            if (i <= retriesAllowed) {
+                mFakeIntentHelper.assertReliabilityTriggerScheduled();
+            } else {
+                mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+            }
+        }
+    }
+
+    @Test
+    public void trackingEnabled_reliabilityTrigger_failureCountIsReset() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+
+        int retriesAllowed = 3;
+        int checkDelayMillis = 5 * 60 * 1000;
+        configureReliabilityConfigSettings(retriesAllowed, checkDelayMillis);
+
+        PackageVersions oldPackageVersions = new PackageVersions(1, 1);
+        PackageVersions currentPackageVersions = new PackageVersions(2, 2);
+
+        // Simulate there being a newer version installed than the one recorded in storage.
+        configureValidApplications(currentPackageVersions);
+
+        // Force the storage into a state we want.
+        mPackageStatusStorage.forceCheckStateForTests(
+                PackageStatus.CHECK_COMPLETED_FAILURE, oldPackageVersions);
+
+        // Initialize the package tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatus(PackageStatus.CHECK_COMPLETED_FAILURE, oldPackageVersions);
+
+        // Fail (retries - 1) times.
+        for (int i = 0; i < retriesAllowed - 1; i++) {
+            // Simulate a reliability trigger.
+            mPackageTracker.triggerUpdateIfNeeded(false /* packageChanged */);
+
+            // Assert the PackageTracker did trigger an update.
+            checkUpdateCheckTriggered(currentPackageVersions);
+
+            // Check the PackageTracker failure count before calling recordCheckResult.
+            assertEquals(i, mPackageTracker.getCheckFailureCountForTests());
+
+            // Simulate a check failure.
+            CheckToken checkToken = mFakeIntentHelper.captureAndResetLastToken();
+            mPackageTracker.recordCheckResult(checkToken, false /* success */);
+
+            // Peek inside the package tracker to make sure it is tracking failure counts properly.
+            assertEquals(i + 1, mPackageTracker.getCheckFailureCountForTests());
+
+            // Confirm nothing has changed.
+            mFakeIntentHelper.assertUpdateNotTriggered();
+            checkPackageStorageStatus(PackageStatus.CHECK_COMPLETED_FAILURE,
+                    currentPackageVersions);
+
+            // Check reliability triggering is still enabled.
+            mFakeIntentHelper.assertReliabilityTriggerScheduled();
+        }
+
+        // Simulate a reliability trigger.
+        mPackageTracker.triggerUpdateIfNeeded(false /* packageChanged */);
+
+        // Assert the PackageTracker did trigger an update.
+        checkUpdateCheckTriggered(currentPackageVersions);
+
+        // Check the PackageTracker failure count before calling recordCheckResult.
+        assertEquals(retriesAllowed - 1, mPackageTracker.getCheckFailureCountForTests());
+
+        // On the last possible try, succeed.
+        CheckToken checkToken = mFakeIntentHelper.captureAndResetLastToken();
+        mPackageTracker.recordCheckResult(checkToken, true /* success */);
+
+        checkUpdateCheckSuccessful(currentPackageVersions);
+    }
+
+    /**
+     * Simulates reliability triggers happening too close together. Package tracker should ignore
+     * the ones it doesn't need.
+     */
+    @Test
+    public void trackingEnabled_reliabilityTrigger_tooSoon() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+
+        int retriesAllowed = 5;
+        int checkDelayMillis = 5 * 60 * 1000;
+        configureReliabilityConfigSettings(retriesAllowed, checkDelayMillis);
+
+        PackageVersions oldPackageVersions = new PackageVersions(1, 1);
+        PackageVersions currentPackageVersions = new PackageVersions(2, 2);
+
+        // Simulate there being a newer version installed than the one recorded in storage.
+        configureValidApplications(currentPackageVersions);
+
+        // Force the storage into a state we want.
+        mPackageStatusStorage.forceCheckStateForTests(
+                PackageStatus.CHECK_COMPLETED_FAILURE, oldPackageVersions);
+
+        // Initialize the package tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatus(PackageStatus.CHECK_COMPLETED_FAILURE, oldPackageVersions);
+
+        // Simulate a reliability trigger.
+        mPackageTracker.triggerUpdateIfNeeded(false /* packageChanged */);
+
+        // Assert the PackageTracker did trigger an update.
+        checkUpdateCheckTriggered(currentPackageVersions);
+        CheckToken token1 = mFakeIntentHelper.captureAndResetLastToken();
+
+        // Increment the clock, but not enough.
+        mFakeClock.incrementClock(checkDelayMillis - 1);
+
+        // Simulate a reliability trigger.
+        mPackageTracker.triggerUpdateIfNeeded(false /* packageChanged */);
+
+        // Assert the PackageTracker did not trigger an update.
+        mFakeIntentHelper.assertUpdateNotTriggered();
+        checkPackageStorageStatus(PackageStatus.CHECK_STARTED, currentPackageVersions);
+        mFakeIntentHelper.assertReliabilityTriggerScheduled();
+
+        // Increment the clock slightly more. Should now consider the response overdue.
+        mFakeClock.incrementClock(2);
+
+        // Simulate a reliability trigger.
+        mPackageTracker.triggerUpdateIfNeeded(false /* packageChanged */);
+
+        // Triggering should have happened.
+        checkUpdateCheckTriggered(currentPackageVersions);
+        CheckToken token2 = mFakeIntentHelper.captureAndResetLastToken();
+
+        // Check a new token was generated.
+        assertFalse(token1.equals(token2));
+    }
+
+    /**
+     * Tests what happens when a package update doesn't complete and a reliability trigger cleans
+     * up for it.
+     */
+    @Test
+    public void trackingEnabled_reliabilityTrigger_afterPackageUpdateDidNotComplete()
+            throws Exception {
+
+        // Set up device configuration.
+        configureTrackingEnabled();
+
+        int retriesAllowed = 5;
+        int checkDelayMillis = 5 * 60 * 1000;
+        configureReliabilityConfigSettings(retriesAllowed, checkDelayMillis);
+
+        PackageVersions currentPackageVersions = new PackageVersions(1, 1);
+        PackageVersions newPackageVersions = new PackageVersions(2, 2);
+
+        // Simulate there being a newer version installed than the one recorded in storage.
+        configureValidApplications(currentPackageVersions);
+
+        // Force the storage into a state we want.
+        mPackageStatusStorage.forceCheckStateForTests(
+                PackageStatus.CHECK_COMPLETED_SUCCESS, currentPackageVersions);
+
+        // Initialize the package tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Simulate a reliability trigger.
+        simulatePackageInstallation(newPackageVersions);
+
+        // Assert the PackageTracker did trigger an update.
+        checkUpdateCheckTriggered(newPackageVersions);
+        CheckToken token1 = mFakeIntentHelper.captureAndResetLastToken();
+
+        // Increment the clock, but not enough.
+        mFakeClock.incrementClock(checkDelayMillis + 1);
+
+        // Simulate a reliability trigger.
+        mPackageTracker.triggerUpdateIfNeeded(false /* packageChanged */);
+
+        // Assert the PackageTracker triggered an update.
+        checkUpdateCheckTriggered(newPackageVersions);
+        CheckToken token2 = mFakeIntentHelper.captureAndResetLastToken();
+
+        // Check a new token was generated.
+        assertFalse(token1.equals(token2));
+
+        // Simulate the reliability check completing.
+        mPackageTracker.recordCheckResult(token2, true /* success */);
+
+        // Check everything is now as it should be.
+        checkUpdateCheckSuccessful(newPackageVersions);
+    }
+
+    /**
+     * Simulates a reliability trigger happening too soon after a package update trigger occurred.
+     */
+    @Test
+    public void trackingEnabled_reliabilityTriggerAfterUpdate_tooSoon() throws Exception {
+        // Set up device configuration.
+        configureTrackingEnabled();
+
+        int retriesAllowed = 5;
+        int checkDelayMillis = 5 * 60 * 1000;
+        configureReliabilityConfigSettings(retriesAllowed, checkDelayMillis);
+
+        PackageVersions currentPackageVersions = new PackageVersions(1, 1);
+        PackageVersions newPackageVersions = new PackageVersions(2, 2);
+
+        // Simulate there being a newer version installed than the one recorded in storage.
+        configureValidApplications(currentPackageVersions);
+
+        // Force the storage into a state we want.
+        mPackageStatusStorage.forceCheckStateForTests(
+                PackageStatus.CHECK_COMPLETED_SUCCESS, currentPackageVersions);
+
+        // Initialize the package tracker.
+        mPackageTracker.start();
+
+        // Check the intent helper is properly configured.
+        checkIntentHelperInitializedAndReliabilityTrackingEnabled();
+
+        // Check the initial storage state.
+        checkPackageStorageStatus(PackageStatus.CHECK_COMPLETED_SUCCESS, currentPackageVersions);
+
+        // Simulate a package update trigger.
+        simulatePackageInstallation(newPackageVersions);
+
+        // Assert the PackageTracker did trigger an update.
+        checkUpdateCheckTriggered(newPackageVersions);
+        CheckToken token1 = mFakeIntentHelper.captureAndResetLastToken();
+
+        // Increment the clock, but not enough.
+        mFakeClock.incrementClock(checkDelayMillis - 1);
+
+        // Simulate a reliability trigger.
+        mPackageTracker.triggerUpdateIfNeeded(false /* packageChanged */);
+
+        // Assert the PackageTracker did not trigger an update.
+        mFakeIntentHelper.assertUpdateNotTriggered();
+        checkPackageStorageStatus(PackageStatus.CHECK_STARTED, newPackageVersions);
+        mFakeIntentHelper.assertReliabilityTriggerScheduled();
+
+        // Increment the clock slightly more. Should now consider the response overdue.
+        mFakeClock.incrementClock(2);
+
+        // Simulate a reliability trigger.
+        mPackageTracker.triggerUpdateIfNeeded(false /* packageChanged */);
+
+        // Triggering should have happened.
+        checkUpdateCheckTriggered(newPackageVersions);
+        CheckToken token2 = mFakeIntentHelper.captureAndResetLastToken();
+
+        // Check a new token was generated.
+        assertFalse(token1.equals(token2));
+    }
+
+    @Test
+    public void dump() {
+        StringWriter stringWriter = new StringWriter();
+        PrintWriter printWriter = new PrintWriter(stringWriter);
+
+        mPackageTracker.dump(printWriter);
+
+        assertFalse(stringWriter.toString().isEmpty());
+    }
+
+    private void simulatePackageInstallation(PackageVersions packageVersions) throws Exception {
+        configureApplicationsValidManifests(packageVersions);
+
+        // Simulate a tracked package being updated.
+        mFakeIntentHelper.simulatePackageUpdatedEvent();
+    }
+
+    /**
+     * Checks an update check was triggered, reliability triggering is therefore enabled and the
+     * storage state reflects that there is a check in progress.
+     */
+    private void checkUpdateCheckTriggered(PackageVersions packageVersions) {
+        // Assert the PackageTracker attempted to trigger an update.
+        mFakeIntentHelper.assertUpdateTriggered();
+
+        // If an update check was triggered reliability triggering should always be enabled to
+        // ensure that it can be completed if it fails.
+        mFakeIntentHelper.assertReliabilityTriggerScheduled();
+
+        // Check the expected storage state.
+        checkPackageStorageStatus(PackageStatus.CHECK_STARTED, packageVersions);
+    }
+
+    private void checkUpdateCheckFailed(PackageVersions packageVersions) {
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerScheduled();
+
+        // Assert the storage was updated.
+        checkPackageStorageStatus(PackageStatus.CHECK_COMPLETED_FAILURE, packageVersions);
+    }
+
+    private void checkUpdateCheckSuccessful(PackageVersions packageVersions) {
+        // Check reliability triggering state.
+        mFakeIntentHelper.assertReliabilityTriggerNotScheduled();
+
+        // Assert the storage was updated.
+        checkPackageStorageStatus(PackageStatus.CHECK_COMPLETED_SUCCESS, packageVersions);
+
+        // Peek inside the package tracker to make sure it is tracking failure counts properly.
+        assertEquals(0, mPackageTracker.getCheckFailureCountForTests());
+    }
+
+    private PackageVersions configureValidApplications() throws Exception {
+        configureValidApplications(INITIAL_APP_PACKAGE_VERSIONS);
+        return INITIAL_APP_PACKAGE_VERSIONS;
+    }
+
+    private void configureValidApplications(PackageVersions versions) throws Exception {
+        configureUpdateAppPackageOk(UPDATE_APP_PACKAGE_NAME);
+        configureDataAppPackageOk(DATA_APP_PACKAGE_NAME);
+        configureApplicationsValidManifests(versions);
+    }
+
+    private void configureApplicationsValidManifests(PackageVersions versions) throws Exception {
+        configureUpdateAppManifestOk(UPDATE_APP_PACKAGE_NAME);
+        configureDataAppManifestOk(DATA_APP_PACKAGE_NAME);
+        configureUpdateAppPackageVersion(UPDATE_APP_PACKAGE_NAME, versions.mUpdateAppVersion);
+        configureDataAppPackageVersion(DATA_APP_PACKAGE_NAME, versions.mDataAppVersion);
+    }
+
+    private void configureUpdateAppPackageVersion(String updateAppPackageName,
+            int updataAppPackageVersion) throws Exception {
+        when(mMockPackageManagerHelper.getInstalledPackageVersion(updateAppPackageName))
+                .thenReturn(updataAppPackageVersion);
+    }
+
+    private void configureDataAppPackageVersion(String dataAppPackageName,
+            int dataAppPackageVersion) throws Exception {
+        when(mMockPackageManagerHelper.getInstalledPackageVersion(dataAppPackageName))
+                .thenReturn(dataAppPackageVersion);
+    }
+
+    private void configureUpdateAppManifestOk(String updateAppPackageName) throws Exception {
+        Intent expectedIntent = RulesUpdaterContract.createUpdaterIntent(updateAppPackageName);
+        when(mMockPackageManagerHelper.receiverRegistered(
+                filterEquals(expectedIntent),
+                eq(RulesUpdaterContract.TRIGGER_TIME_ZONE_RULES_CHECK_PERMISSION)))
+                .thenReturn(true);
+        when(mMockPackageManagerHelper.usesPermission(
+                updateAppPackageName, RulesUpdaterContract.UPDATE_TIME_ZONE_RULES_PERMISSION))
+                .thenReturn(true);
+    }
+
+    private void configureUpdateAppManifestBad(String updateAppPackageName) throws Exception {
+        Intent expectedIntent = RulesUpdaterContract.createUpdaterIntent(updateAppPackageName);
+        when(mMockPackageManagerHelper.receiverRegistered(
+                filterEquals(expectedIntent),
+                eq(RulesUpdaterContract.TRIGGER_TIME_ZONE_RULES_CHECK_PERMISSION)))
+                .thenReturn(false);
+        // Has permission, but that shouldn't matter if the check above is false.
+        when(mMockPackageManagerHelper.usesPermission(
+                updateAppPackageName, RulesUpdaterContract.UPDATE_TIME_ZONE_RULES_PERMISSION))
+                .thenReturn(true);
+    }
+
+    private void configureDataAppManifestOk(String dataAppPackageName) throws Exception {
+        when(mMockPackageManagerHelper.contentProviderRegistered(
+                TimeZoneRulesDataContract.AUTHORITY, dataAppPackageName))
+                .thenReturn(true);
+    }
+
+    private void configureDataAppManifestBad(String dataAppPackageName) throws Exception {
+        // Simulate the data app not exposing the content provider we require.
+        when(mMockPackageManagerHelper.contentProviderRegistered(
+                TimeZoneRulesDataContract.AUTHORITY, dataAppPackageName))
+                .thenReturn(false);
+    }
+
+    private void configureTrackingEnabled() {
+        when(mMockConfigHelper.isTrackingEnabled()).thenReturn(true);
+    }
+
+    private void configureTrackingDisabled() {
+        when(mMockConfigHelper.isTrackingEnabled()).thenReturn(false);
+    }
+
+    private void configureReliabilityConfigSettings(int retriesAllowed, int checkDelayMillis) {
+        when(mMockConfigHelper.getFailedCheckRetryCount()).thenReturn(retriesAllowed);
+        when(mMockConfigHelper.getCheckTimeAllowedMillis()).thenReturn(checkDelayMillis);
+    }
+
+    private void configureReliabilityConfigSettingsOk() {
+        configureReliabilityConfigSettings(5, 5 * 60 * 1000);
+    }
+
+    private void configureUpdateAppPackageOk(String updateAppPackageName) throws Exception {
+        when(mMockConfigHelper.getUpdateAppPackageName()).thenReturn(updateAppPackageName);
+        when(mMockPackageManagerHelper.isPrivilegedApp(updateAppPackageName)).thenReturn(true);
+    }
+
+    private void configureUpdateAppPackageNotPrivileged(String updateAppPackageName)
+            throws Exception {
+        when(mMockConfigHelper.getUpdateAppPackageName()).thenReturn(updateAppPackageName);
+        when(mMockPackageManagerHelper.isPrivilegedApp(updateAppPackageName)).thenReturn(false);
+    }
+
+    private void configureUpdateAppPackageNameMissing() {
+        when(mMockConfigHelper.getUpdateAppPackageName()).thenReturn(null);
+    }
+
+    private void configureDataAppPackageOk(String dataAppPackageName) throws Exception {
+        when(mMockConfigHelper.getDataAppPackageName()).thenReturn(dataAppPackageName);
+        when(mMockPackageManagerHelper.isPrivilegedApp(dataAppPackageName)).thenReturn(true);
+    }
+
+    private void configureDataAppPackageNotPrivileged(String dataAppPackageName)
+            throws Exception {
+        when(mMockConfigHelper.getUpdateAppPackageName()).thenReturn(dataAppPackageName);
+        when(mMockPackageManagerHelper.isPrivilegedApp(dataAppPackageName)).thenReturn(false);
+    }
+
+    private void configureDataAppPackageNameMissing() {
+        when(mMockConfigHelper.getDataAppPackageName()).thenThrow(new RuntimeException());
+    }
+
+    private void checkIntentHelperInitializedAndReliabilityTrackingEnabled() {
+        // Verify that calling start initialized the IntentHelper as well.
+        mFakeIntentHelper.assertInitialized(UPDATE_APP_PACKAGE_NAME, DATA_APP_PACKAGE_NAME);
+
+        // Assert that reliability tracking is always enabled after initialization.
+        mFakeIntentHelper.assertReliabilityTriggerScheduled();
+    }
+
+    private void checkPackageStorageStatus(
+            int expectedCheckStatus, PackageVersions expectedPackageVersions) {
+        PackageStatus packageStatus = mPackageStatusStorage.getPackageStatus();
+        assertEquals(expectedCheckStatus, packageStatus.mCheckStatus);
+        assertEquals(expectedPackageVersions, packageStatus.mVersions);
+    }
+
+    private void checkPackageStorageStatusIsInitialOrReset() {
+        assertNull(mPackageStatusStorage.getPackageStatus());
+    }
+
+    private static CheckToken createArbitraryCheckToken() {
+        return new CheckToken(1, INITIAL_APP_PACKAGE_VERSIONS);
+    }
+
+    /**
+     * A fake IntentHelper implementation for use in tests.
+     */
+    private static class FakeIntentHelper implements IntentHelper {
+
+        private PackageTracker mPackageTracker;
+        private String mUpdateAppPackageName;
+        private String mDataAppPackageName;
+
+        private CheckToken mLastToken;
+
+        private boolean mReliabilityTriggerScheduled;
+
+        @Override
+        public void initialize(String updateAppPackageName, String dataAppPackageName,
+                PackageTracker packageTracker) {
+            assertNotNull(updateAppPackageName);
+            assertNotNull(dataAppPackageName);
+            assertNotNull(packageTracker);
+            mPackageTracker = packageTracker;
+            mUpdateAppPackageName = updateAppPackageName;
+            mDataAppPackageName = dataAppPackageName;
+        }
+
+        public void assertInitialized(
+                String expectedUpdateAppPackageName, String expectedDataAppPackageName) {
+            assertNotNull(mPackageTracker);
+            assertEquals(expectedUpdateAppPackageName, mUpdateAppPackageName);
+            assertEquals(expectedDataAppPackageName, mDataAppPackageName);
+        }
+
+        public void assertNotInitialized() {
+            assertNull(mPackageTracker);
+        }
+
+        @Override
+        public void sendTriggerUpdateCheck(CheckToken checkToken) {
+            if (mLastToken != null) {
+                fail("lastToken already set");
+            }
+            mLastToken = checkToken;
+        }
+
+        @Override
+        public void scheduleReliabilityTrigger(long minimumDelayMillis) {
+            mReliabilityTriggerScheduled = true;
+        }
+
+        @Override
+        public void unscheduleReliabilityTrigger() {
+            mReliabilityTriggerScheduled = false;
+        }
+
+        public void assertReliabilityTriggerScheduled() {
+            assertTrue(mReliabilityTriggerScheduled);
+        }
+
+        public void assertReliabilityTriggerNotScheduled() {
+            assertFalse(mReliabilityTriggerScheduled);
+        }
+
+        public void assertUpdateTriggered() {
+            assertNotNull(mLastToken);
+        }
+
+        public void assertUpdateNotTriggered() {
+            assertNull(mLastToken);
+        }
+
+        public CheckToken captureAndResetLastToken() {
+            CheckToken toReturn = mLastToken;
+            assertNotNull("No update triggered", toReturn);
+            mLastToken = null;
+            return toReturn;
+        }
+
+        public void simulatePackageUpdatedEvent() {
+            mPackageTracker.triggerUpdateIfNeeded(true /* packageChanged */);
+        }
+    }
+
+    private static class FakeClockHelper implements ClockHelper {
+
+        private long currentTime = 1000;
+
+        @Override
+        public long currentTimestamp() {
+            return currentTime;
+        }
+
+        public void incrementClock(long millis) {
+            currentTime += millis;
+        }
+    }
+
+    /**
+     * Registers a mockito parameter matcher that uses {@link Intent#filterEquals(Intent)}. to
+     * check the parameter against the intent supplied.
+     */
+    private static Intent filterEquals(final Intent expected) {
+        final Matcher<Intent> m = new BaseMatcher<Intent>() {
+            @Override
+            public boolean matches(Object actual) {
+                return actual != null && expected.filterEquals((Intent) actual);
+            }
+            @Override
+            public void describeTo(Description description) {
+                description.appendText(expected.toString());
+            }
+        };
+        return argThat(m);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/timezone/PackageVersionsTest.java b/services/tests/servicestests/src/com/android/server/timezone/PackageVersionsTest.java
new file mode 100644
index 0000000..a470f8f
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/timezone/PackageVersionsTest.java
@@ -0,0 +1,47 @@
+/*
+ * 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.timezone;
+
+import org.junit.Test;
+
+import android.support.test.filters.SmallTest;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+@SmallTest
+public class PackageVersionsTest {
+
+    @Test
+    public void equals() {
+        PackageVersions baseline =
+                new PackageVersions(1 /* updateAppVersion */, 1 /* dataAppVersion */);
+        assertEquals(baseline, baseline);
+
+        PackageVersions deepEqual =
+                new PackageVersions(1 /* updateAppVersion */, 1 /* dataAppVersion */);
+        assertEquals(baseline, deepEqual);
+
+        PackageVersions differentUpdateAppVersion =
+                new PackageVersions(2 /* updateAppVersion */, 1 /* dataAppVersion */);
+        assertFalse(baseline.equals(differentUpdateAppVersion));
+
+        PackageVersions differentDataAppVersion =
+                new PackageVersions(1 /* updateAppVersion */, 2 /* dataAppVersion */);
+        assertFalse(baseline.equals(differentDataAppVersion));
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java
new file mode 100644
index 0000000..d09d0c8
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java
@@ -0,0 +1,1033 @@
+/*
+ * 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.timezone;
+
+import com.android.timezone.distro.DistroVersion;
+import com.android.timezone.distro.StagedDistroOperation;
+import com.android.timezone.distro.TimeZoneDistro;
+import com.android.timezone.distro.installer.TimeZoneDistroInstaller;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import android.app.timezone.Callback;
+import android.app.timezone.DistroRulesVersion;
+import android.app.timezone.ICallback;
+import android.app.timezone.RulesManager;
+import android.app.timezone.RulesState;
+import android.os.ParcelFileDescriptor;
+
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.concurrent.Executor;
+import javax.annotation.Nullable;
+
+import libcore.io.IoUtils;
+
+import static com.android.server.timezone.RulesManagerService.REQUIRED_UPDATER_PERMISSION;
+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.junit.Assert.fail;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
+
+/**
+ * White box interaction / unit testing of the {@link RulesManagerService}.
+ */
+public class RulesManagerServiceTest {
+
+    private RulesManagerService mRulesManagerService;
+
+    private FakeExecutor mFakeExecutor;
+    private PermissionHelper mMockPermissionHelper;
+    private PackageTracker mMockPackageTracker;
+    private TimeZoneDistroInstaller mMockTimeZoneDistroInstaller;
+
+    @Before
+    public void setUp() {
+        mFakeExecutor = new FakeExecutor();
+
+        mMockPackageTracker = mock(PackageTracker.class);
+        mMockPermissionHelper = mock(PermissionHelper.class);
+        mMockTimeZoneDistroInstaller = mock(TimeZoneDistroInstaller.class);
+
+        mRulesManagerService = new RulesManagerService(
+                mMockPermissionHelper,
+                mFakeExecutor,
+                mMockPackageTracker,
+                mMockTimeZoneDistroInstaller);
+    }
+
+    @Test(expected = SecurityException.class)
+    public void getRulesState_noCallerPermission() throws Exception {
+        configureCallerDoesNotHavePermission();
+        mRulesManagerService.getRulesState();
+    }
+
+    @Test(expected = SecurityException.class)
+    public void requestInstall_noCallerPermission() throws Exception {
+        configureCallerDoesNotHavePermission();
+        mRulesManagerService.requestInstall(null, null, null);
+    }
+
+    @Test(expected = SecurityException.class)
+    public void requestUninstall_noCallerPermission() throws Exception {
+        configureCallerDoesNotHavePermission();
+        mRulesManagerService.requestUninstall(null, null);
+    }
+
+    @Test(expected = SecurityException.class)
+    public void requestNothing_noCallerPermission() throws Exception {
+        configureCallerDoesNotHavePermission();
+        mRulesManagerService.requestNothing(null, true);
+    }
+
+    @Test
+    public void getRulesState_systemRulesError() throws Exception {
+        configureDeviceCannotReadSystemRulesVersion();
+
+        assertNull(mRulesManagerService.getRulesState());
+    }
+
+    @Test
+    public void getRulesState_stagedInstall() throws Exception {
+        configureCallerHasPermission();
+
+        configureDeviceSystemRulesVersion("2016a");
+
+        DistroVersion stagedDistroVersion = new DistroVersion(
+                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
+                DistroVersion.CURRENT_FORMAT_MINOR_VERSION - 1,
+                "2016c",
+                3);
+        configureStagedInstall(stagedDistroVersion);
+
+        DistroVersion installedDistroVersion = new DistroVersion(
+                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
+                DistroVersion.CURRENT_FORMAT_MINOR_VERSION - 1,
+                "2016b",
+                4);
+        configureInstalledDistroVersion(installedDistroVersion);
+
+        DistroRulesVersion stagedDistroRulesVersion = new DistroRulesVersion(
+                stagedDistroVersion.rulesVersion, stagedDistroVersion.revision);
+        DistroRulesVersion installedDistroRulesVersion = new DistroRulesVersion(
+                installedDistroVersion.rulesVersion, installedDistroVersion.revision);
+        RulesState expectedRuleState = new RulesState(
+                "2016a", RulesManagerService.DISTRO_FORMAT_VERSION_SUPPORTED,
+                false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_INSTALL, stagedDistroRulesVersion,
+                RulesState.DISTRO_STATUS_INSTALLED, installedDistroRulesVersion);
+        assertEquals(expectedRuleState, mRulesManagerService.getRulesState());
+    }
+
+    @Test
+    public void getRulesState_nothingStaged() throws Exception {
+        configureCallerHasPermission();
+
+        configureDeviceSystemRulesVersion("2016a");
+
+        configureNoStagedOperation();
+
+        DistroVersion installedDistroVersion = new DistroVersion(
+                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
+                DistroVersion.CURRENT_FORMAT_MINOR_VERSION - 1,
+                "2016b",
+                4);
+        configureInstalledDistroVersion(installedDistroVersion);
+
+        DistroRulesVersion installedDistroRulesVersion = new DistroRulesVersion(
+                installedDistroVersion.rulesVersion, installedDistroVersion.revision);
+        RulesState expectedRuleState = new RulesState(
+                "2016a", RulesManagerService.DISTRO_FORMAT_VERSION_SUPPORTED,
+                false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_NONE, null /* stagedDistroRulesVersion */,
+                RulesState.DISTRO_STATUS_INSTALLED, installedDistroRulesVersion);
+        assertEquals(expectedRuleState, mRulesManagerService.getRulesState());
+    }
+
+    @Test
+    public void getRulesState_uninstallStaged() throws Exception {
+        configureCallerHasPermission();
+
+        configureDeviceSystemRulesVersion("2016a");
+
+        configureStagedUninstall();
+
+        DistroVersion installedDistroVersion = new DistroVersion(
+                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
+                DistroVersion.CURRENT_FORMAT_MINOR_VERSION - 1,
+                "2016b",
+                4);
+        configureInstalledDistroVersion(installedDistroVersion);
+
+        DistroRulesVersion installedDistroRulesVersion = new DistroRulesVersion(
+                installedDistroVersion.rulesVersion, installedDistroVersion.revision);
+        RulesState expectedRuleState = new RulesState(
+                "2016a", RulesManagerService.DISTRO_FORMAT_VERSION_SUPPORTED,
+                false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_UNINSTALL, null /* stagedDistroRulesVersion */,
+                RulesState.DISTRO_STATUS_INSTALLED, installedDistroRulesVersion);
+        assertEquals(expectedRuleState, mRulesManagerService.getRulesState());
+    }
+
+    @Test
+    public void getRulesState_installedRulesError() throws Exception {
+        configureCallerHasPermission();
+
+        String systemRulesVersion = "2016a";
+        configureDeviceSystemRulesVersion(systemRulesVersion);
+
+        configureStagedUninstall();
+        configureDeviceCannotReadInstalledDistroVersion();
+
+        RulesState expectedRuleState = new RulesState(
+                "2016a", RulesManagerService.DISTRO_FORMAT_VERSION_SUPPORTED,
+                false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_UNINSTALL, null /* stagedDistroRulesVersion */,
+                RulesState.DISTRO_STATUS_UNKNOWN, null /* installedDistroRulesVersion */);
+        assertEquals(expectedRuleState, mRulesManagerService.getRulesState());
+    }
+
+    @Test
+    public void getRulesState_stagedRulesError() throws Exception {
+        configureCallerHasPermission();
+
+        String systemRulesVersion = "2016a";
+        configureDeviceSystemRulesVersion(systemRulesVersion);
+
+        configureDeviceCannotReadStagedDistroOperation();
+
+        DistroVersion installedDistroVersion = new DistroVersion(
+                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
+                DistroVersion.CURRENT_FORMAT_MINOR_VERSION - 1,
+                "2016b",
+                4);
+        configureInstalledDistroVersion(installedDistroVersion);
+
+        DistroRulesVersion installedDistroRulesVersion = new DistroRulesVersion(
+                installedDistroVersion.rulesVersion, installedDistroVersion.revision);
+        RulesState expectedRuleState = new RulesState(
+                "2016a", RulesManagerService.DISTRO_FORMAT_VERSION_SUPPORTED,
+                false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_UNKNOWN, null /* stagedDistroRulesVersion */,
+                RulesState.DISTRO_STATUS_INSTALLED, installedDistroRulesVersion);
+        assertEquals(expectedRuleState, mRulesManagerService.getRulesState());
+    }
+
+    @Test
+    public void getRulesState_noInstalledRules() throws Exception {
+        configureCallerHasPermission();
+
+        String systemRulesVersion = "2016a";
+        configureDeviceSystemRulesVersion(systemRulesVersion);
+        configureNoStagedOperation();
+        configureInstalledDistroVersion(null);
+
+        RulesState expectedRuleState = new RulesState(
+                systemRulesVersion, RulesManagerService.DISTRO_FORMAT_VERSION_SUPPORTED,
+                false /* operationInProgress */,
+                RulesState.STAGED_OPERATION_NONE, null /* stagedDistroRulesVersion */,
+                RulesState.DISTRO_STATUS_NONE, null /* installedDistroRulesVersion */);
+        assertEquals(expectedRuleState, mRulesManagerService.getRulesState());
+    }
+
+    @Test
+    public void getRulesState_operationInProgress() throws Exception {
+        configureCallerHasPermission();
+
+        String systemRulesVersion = "2016a";
+        String installedRulesVersion = "2016b";
+        int revision = 3;
+
+        configureDeviceSystemRulesVersion(systemRulesVersion);
+
+        DistroVersion installedDistroVersion = new DistroVersion(
+                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
+                DistroVersion.CURRENT_FORMAT_MINOR_VERSION - 1,
+                installedRulesVersion,
+                revision);
+        configureInstalledDistroVersion(installedDistroVersion);
+
+        ParcelFileDescriptor parcelFileDescriptor =
+                createParcelFileDescriptor(createArbitraryBytes(1000));
+
+        // Start an async operation so there is one in progress. The mFakeExecutor won't actually
+        // execute it.
+        byte[] tokenBytes = createArbitraryTokenBytes();
+        ICallback callback = new StubbedCallback();
+
+        mRulesManagerService.requestInstall(parcelFileDescriptor, tokenBytes, callback);
+
+        // Request the rules state while the async operation is "happening".
+        RulesState actualRulesState = mRulesManagerService.getRulesState();
+        RulesState expectedRuleState = new RulesState(
+                systemRulesVersion, RulesManagerService.DISTRO_FORMAT_VERSION_SUPPORTED,
+                true /* operationInProgress */,
+                RulesState.STAGED_OPERATION_UNKNOWN, null /* stagedDistroRulesVersion */,
+                RulesState.DISTRO_STATUS_UNKNOWN, null /* installedDistroRulesVersion */);
+        assertEquals(expectedRuleState, actualRulesState);
+    }
+
+    @Test
+    public void requestInstall_operationInProgress() throws Exception {
+        configureCallerHasPermission();
+
+        ParcelFileDescriptor parcelFileDescriptor1 =
+                createParcelFileDescriptor(createArbitraryBytes(1000));
+
+        byte[] tokenBytes = createArbitraryTokenBytes();
+        ICallback callback = new StubbedCallback();
+
+        // First request should succeed.
+        assertEquals(RulesManager.SUCCESS,
+                mRulesManagerService.requestInstall(parcelFileDescriptor1, tokenBytes, callback));
+
+        // Something async should be enqueued. Clear it but do not execute it so we can detect the
+        // second request does nothing.
+        mFakeExecutor.getAndResetLastCommand();
+
+        // Second request should fail.
+        ParcelFileDescriptor parcelFileDescriptor2 =
+                createParcelFileDescriptor(createArbitraryBytes(1000));
+        assertEquals(RulesManager.ERROR_OPERATION_IN_PROGRESS,
+                mRulesManagerService.requestInstall(parcelFileDescriptor2, tokenBytes, callback));
+
+        assertClosed(parcelFileDescriptor2);
+
+        // Assert nothing async was enqueued.
+        mFakeExecutor.assertNothingQueued();
+        verifyNoInstallerCallsMade();
+        verifyNoPackageTrackerCallsMade();
+    }
+
+    @Test
+    public void requestInstall_badToken() throws Exception {
+        configureCallerHasPermission();
+
+        ParcelFileDescriptor parcelFileDescriptor =
+                createParcelFileDescriptor(createArbitraryBytes(1000));
+
+        byte[] badTokenBytes = new byte[2];
+        ICallback callback = new StubbedCallback();
+
+        try {
+            mRulesManagerService.requestInstall(parcelFileDescriptor, badTokenBytes, callback);
+            fail();
+        } catch (IllegalArgumentException expected) {
+        }
+
+        assertClosed(parcelFileDescriptor);
+
+        // Assert nothing async was enqueued.
+        mFakeExecutor.assertNothingQueued();
+        verifyNoInstallerCallsMade();
+        verifyNoPackageTrackerCallsMade();
+    }
+
+    @Test
+    public void requestInstall_nullParcelFileDescriptor() throws Exception {
+        configureCallerHasPermission();
+
+        ParcelFileDescriptor parcelFileDescriptor = null;
+        byte[] tokenBytes = createArbitraryTokenBytes();
+        ICallback callback = new StubbedCallback();
+
+        try {
+            mRulesManagerService.requestInstall(parcelFileDescriptor, tokenBytes, callback);
+            fail();
+        } catch (NullPointerException expected) {}
+
+        // Assert nothing async was enqueued.
+        mFakeExecutor.assertNothingQueued();
+        verifyNoInstallerCallsMade();
+        verifyNoPackageTrackerCallsMade();
+    }
+
+    @Test
+    public void requestInstall_nullCallback() throws Exception {
+        configureCallerHasPermission();
+
+        ParcelFileDescriptor parcelFileDescriptor =
+                createParcelFileDescriptor(createArbitraryBytes(1000));
+        byte[] tokenBytes = createArbitraryTokenBytes();
+        ICallback callback = null;
+
+        try {
+            mRulesManagerService.requestInstall(parcelFileDescriptor, tokenBytes, callback);
+            fail();
+        } catch (NullPointerException expected) {}
+
+        assertClosed(parcelFileDescriptor);
+
+        // Assert nothing async was enqueued.
+        mFakeExecutor.assertNothingQueued();
+        verifyNoInstallerCallsMade();
+        verifyNoPackageTrackerCallsMade();
+    }
+
+    @Test
+    public void requestInstall_asyncSuccess() throws Exception {
+        configureCallerHasPermission();
+
+        ParcelFileDescriptor parcelFileDescriptor =
+                createParcelFileDescriptor(createArbitraryBytes(1000));
+
+        CheckToken token = createArbitraryToken();
+        byte[] tokenBytes = token.toByteArray();
+
+        TestCallback callback = new TestCallback();
+
+        // Request the install.
+        assertEquals(RulesManager.SUCCESS,
+                mRulesManagerService.requestInstall(parcelFileDescriptor, tokenBytes, callback));
+
+        // Assert nothing has happened yet.
+        callback.assertNoResultReceived();
+        verifyNoInstallerCallsMade();
+        verifyNoPackageTrackerCallsMade();
+
+        // Set up the installer.
+        configureStageInstallExpectation(TimeZoneDistroInstaller.INSTALL_SUCCESS);
+
+        // Simulate the async execution.
+        mFakeExecutor.simulateAsyncExecutionOfLastCommand();
+
+        assertClosed(parcelFileDescriptor);
+
+        // Verify the expected calls were made to other components.
+        verifyStageInstallCalled();
+        verifyPackageTrackerCalled(token, true /* success */);
+
+        // Check the callback was called.
+        callback.assertResultReceived(Callback.SUCCESS);
+    }
+
+    @Test
+    public void requestInstall_nullTokenBytes() throws Exception {
+        configureCallerHasPermission();
+
+        ParcelFileDescriptor parcelFileDescriptor =
+                createParcelFileDescriptor(createArbitraryBytes(1000));
+
+        TestCallback callback = new TestCallback();
+
+        // Request the install.
+        assertEquals(RulesManager.SUCCESS,
+                mRulesManagerService.requestInstall(
+                        parcelFileDescriptor, null /* tokenBytes */, callback));
+
+        // Assert nothing has happened yet.
+        verifyNoInstallerCallsMade();
+        callback.assertNoResultReceived();
+
+        // Set up the installer.
+        configureStageInstallExpectation(TimeZoneDistroInstaller.INSTALL_SUCCESS);
+
+        // Simulate the async execution.
+        mFakeExecutor.simulateAsyncExecutionOfLastCommand();
+
+        assertClosed(parcelFileDescriptor);
+
+        // Verify the expected calls were made to other components.
+        verifyStageInstallCalled();
+        verifyPackageTrackerCalled(null /* expectedToken */, true /* success */);
+
+        // Check the callback was received.
+        callback.assertResultReceived(Callback.SUCCESS);
+    }
+
+    @Test
+    public void requestInstall_asyncInstallFail() throws Exception {
+        configureCallerHasPermission();
+
+        ParcelFileDescriptor parcelFileDescriptor =
+                createParcelFileDescriptor(createArbitraryBytes(1000));
+
+        CheckToken token = createArbitraryToken();
+        byte[] tokenBytes = token.toByteArray();
+
+        TestCallback callback = new TestCallback();
+
+        // Request the install.
+        assertEquals(RulesManager.SUCCESS,
+                mRulesManagerService.requestInstall(parcelFileDescriptor, tokenBytes, callback));
+
+        // Assert nothing has happened yet.
+        verifyNoInstallerCallsMade();
+        callback.assertNoResultReceived();
+
+        // Set up the installer.
+        configureStageInstallExpectation(TimeZoneDistroInstaller.INSTALL_FAIL_VALIDATION_ERROR);
+
+        // Simulate the async execution.
+        mFakeExecutor.simulateAsyncExecutionOfLastCommand();
+
+        assertClosed(parcelFileDescriptor);
+
+        // Verify the expected calls were made to other components.
+        verifyStageInstallCalled();
+
+        // Validation failure is treated like a successful check: repeating it won't improve things.
+        boolean expectedSuccess = true;
+        verifyPackageTrackerCalled(token, expectedSuccess);
+
+        // Check the callback was received.
+        callback.assertResultReceived(Callback.ERROR_INSTALL_VALIDATION_ERROR);
+    }
+
+    @Test
+    public void requestUninstall_operationInProgress() throws Exception {
+        configureCallerHasPermission();
+
+        byte[] tokenBytes = createArbitraryTokenBytes();
+        ICallback callback = new StubbedCallback();
+
+        // First request should succeed.
+        assertEquals(RulesManager.SUCCESS,
+                mRulesManagerService.requestUninstall(tokenBytes, callback));
+
+        // Something async should be enqueued. Clear it but do not execute it so we can detect the
+        // second request does nothing.
+        mFakeExecutor.getAndResetLastCommand();
+
+        // Second request should fail.
+        assertEquals(RulesManager.ERROR_OPERATION_IN_PROGRESS,
+                mRulesManagerService.requestUninstall(tokenBytes, callback));
+
+        // Assert nothing async was enqueued.
+        mFakeExecutor.assertNothingQueued();
+        verifyNoInstallerCallsMade();
+        verifyNoPackageTrackerCallsMade();
+    }
+
+    @Test
+    public void requestUninstall_badToken() throws Exception {
+        configureCallerHasPermission();
+
+        byte[] badTokenBytes = new byte[2];
+        ICallback callback = new StubbedCallback();
+
+        try {
+            mRulesManagerService.requestUninstall(badTokenBytes, callback);
+            fail();
+        } catch (IllegalArgumentException expected) {
+        }
+
+        // Assert nothing async was enqueued.
+        mFakeExecutor.assertNothingQueued();
+        verifyNoInstallerCallsMade();
+        verifyNoPackageTrackerCallsMade();
+    }
+
+    @Test
+    public void requestUninstall_nullCallback() throws Exception {
+        configureCallerHasPermission();
+
+        byte[] tokenBytes = createArbitraryTokenBytes();
+        ICallback callback = null;
+
+        try {
+            mRulesManagerService.requestUninstall(tokenBytes, callback);
+            fail();
+        } catch (NullPointerException expected) {}
+
+        // Assert nothing async was enqueued.
+        mFakeExecutor.assertNothingQueued();
+        verifyNoInstallerCallsMade();
+        verifyNoPackageTrackerCallsMade();
+    }
+
+    @Test
+    public void requestUninstall_asyncSuccess() throws Exception {
+        configureCallerHasPermission();
+
+        CheckToken token = createArbitraryToken();
+        byte[] tokenBytes = token.toByteArray();
+
+        TestCallback callback = new TestCallback();
+
+        // Request the uninstall.
+        assertEquals(RulesManager.SUCCESS,
+                mRulesManagerService.requestUninstall(tokenBytes, callback));
+
+        // Assert nothing has happened yet.
+        callback.assertNoResultReceived();
+        verifyNoInstallerCallsMade();
+        verifyNoPackageTrackerCallsMade();
+
+        // Set up the installer.
+        configureStageUninstallExpectation(TimeZoneDistroInstaller.UNINSTALL_SUCCESS);
+
+        // Simulate the async execution.
+        mFakeExecutor.simulateAsyncExecutionOfLastCommand();
+
+        // Verify the expected calls were made to other components.
+        verifyStageUninstallCalled();
+        verifyPackageTrackerCalled(token, true /* success */);
+
+        // Check the callback was called.
+        callback.assertResultReceived(Callback.SUCCESS);
+    }
+
+    @Test
+    public void requestUninstall_asyncNothingInstalled() throws Exception {
+        configureCallerHasPermission();
+
+        CheckToken token = createArbitraryToken();
+        byte[] tokenBytes = token.toByteArray();
+
+        TestCallback callback = new TestCallback();
+
+        // Request the uninstall.
+        assertEquals(RulesManager.SUCCESS,
+                mRulesManagerService.requestUninstall(tokenBytes, callback));
+
+        // Assert nothing has happened yet.
+        callback.assertNoResultReceived();
+        verifyNoInstallerCallsMade();
+        verifyNoPackageTrackerCallsMade();
+
+        // Set up the installer.
+        configureStageUninstallExpectation(TimeZoneDistroInstaller.UNINSTALL_NOTHING_INSTALLED);
+
+        // Simulate the async execution.
+        mFakeExecutor.simulateAsyncExecutionOfLastCommand();
+
+        // Verify the expected calls were made to other components.
+        verifyStageUninstallCalled();
+        verifyPackageTrackerCalled(token, true /* success */);
+
+        // Check the callback was called.
+        callback.assertResultReceived(Callback.SUCCESS);
+    }
+
+    @Test
+    public void requestUninstall_nullTokenBytes() throws Exception {
+        configureCallerHasPermission();
+
+        TestCallback callback = new TestCallback();
+
+        // Request the uninstall.
+        assertEquals(RulesManager.SUCCESS,
+                mRulesManagerService.requestUninstall(null /* tokenBytes */, callback));
+
+        // Assert nothing has happened yet.
+        verifyNoInstallerCallsMade();
+        callback.assertNoResultReceived();
+
+        // Set up the installer.
+        configureStageUninstallExpectation(TimeZoneDistroInstaller.UNINSTALL_SUCCESS);
+
+        // Simulate the async execution.
+        mFakeExecutor.simulateAsyncExecutionOfLastCommand();
+
+        // Verify the expected calls were made to other components.
+        verifyStageUninstallCalled();
+        verifyPackageTrackerCalled(null /* expectedToken */, true /* success */);
+
+        // Check the callback was received.
+        callback.assertResultReceived(Callback.SUCCESS);
+    }
+
+    @Test
+    public void requestUninstall_asyncUninstallFail() throws Exception {
+        configureCallerHasPermission();
+
+        CheckToken token = createArbitraryToken();
+        byte[] tokenBytes = token.toByteArray();
+
+        TestCallback callback = new TestCallback();
+
+        // Request the uninstall.
+        assertEquals(RulesManager.SUCCESS,
+                mRulesManagerService.requestUninstall(tokenBytes, callback));
+
+        // Assert nothing has happened yet.
+        verifyNoInstallerCallsMade();
+        callback.assertNoResultReceived();
+
+        // Set up the installer.
+        configureStageUninstallExpectation(TimeZoneDistroInstaller.UNINSTALL_FAIL);
+
+        // Simulate the async execution.
+        mFakeExecutor.simulateAsyncExecutionOfLastCommand();
+
+        // Verify the expected calls were made to other components.
+        verifyStageUninstallCalled();
+        verifyPackageTrackerCalled(token, false /* success */);
+
+        // Check the callback was received.
+        callback.assertResultReceived(Callback.ERROR_UNKNOWN_FAILURE);
+    }
+
+    @Test
+    public void requestNothing_operationInProgressOk() throws Exception {
+        configureCallerHasPermission();
+
+        // Set up a parallel operation.
+        assertEquals(RulesManager.SUCCESS,
+                mRulesManagerService.requestUninstall(null, new StubbedCallback()));
+        // Something async should be enqueued. Clear it but do not execute it to simulate it still
+        // being in progress.
+        mFakeExecutor.getAndResetLastCommand();
+
+        CheckToken token = createArbitraryToken();
+        byte[] tokenBytes = token.toByteArray();
+
+        // Make the call.
+        mRulesManagerService.requestNothing(tokenBytes, true /* success */);
+
+        // Assert nothing async was enqueued.
+        mFakeExecutor.assertNothingQueued();
+
+        // Verify the expected calls were made to other components.
+        verifyPackageTrackerCalled(token, true /* success */);
+        verifyNoInstallerCallsMade();
+    }
+
+    @Test
+    public void requestNothing_badToken() throws Exception {
+        configureCallerHasPermission();
+
+        byte[] badTokenBytes = new byte[2];
+
+        try {
+            mRulesManagerService.requestNothing(badTokenBytes, true /* success */);
+            fail();
+        } catch (IllegalArgumentException expected) {
+        }
+
+        // Assert nothing async was enqueued.
+        mFakeExecutor.assertNothingQueued();
+
+        // Assert no other calls were made.
+        verifyNoInstallerCallsMade();
+        verifyNoPackageTrackerCallsMade();
+    }
+
+    @Test
+    public void requestNothing() throws Exception {
+        configureCallerHasPermission();
+
+        CheckToken token = createArbitraryToken();
+        byte[] tokenBytes = token.toByteArray();
+
+        // Make the call.
+        mRulesManagerService.requestNothing(tokenBytes, false /* success */);
+
+        // Assert everything required was done.
+        verifyNoInstallerCallsMade();
+        verifyPackageTrackerCalled(token, false /* success */);
+    }
+
+    @Test
+    public void requestNothing_nullTokenBytes() throws Exception {
+        configureCallerHasPermission();
+
+        // Make the call.
+        mRulesManagerService.requestNothing(null /* tokenBytes */, true /* success */);
+
+        // Assert everything required was done.
+        verifyNoInstallerCallsMade();
+        verifyPackageTrackerCalled(null /* token */, true /* success */);
+    }
+
+    @Test
+    public void dump_noPermission() throws Exception {
+        when(mMockPermissionHelper.checkDumpPermission(any(String.class), any(PrintWriter.class)))
+                .thenReturn(false);
+
+        doDumpCallAndCapture(mRulesManagerService, null);
+        verifyZeroInteractions(mMockPackageTracker, mMockTimeZoneDistroInstaller);
+    }
+
+    @Test
+    public void dump_emptyArgs() throws Exception {
+        doSuccessfulDumpCall(mRulesManagerService, new String[0]);
+
+        // Verify the package tracker was consulted.
+        verify(mMockPackageTracker).dump(any(PrintWriter.class));
+    }
+
+    @Test
+    public void dump_nullArgs() throws Exception {
+        doSuccessfulDumpCall(mRulesManagerService, null);
+        // Verify the package tracker was consulted.
+        verify(mMockPackageTracker).dump(any(PrintWriter.class));
+    }
+
+    @Test
+    public void dump_unknownArgs() throws Exception {
+        String dumpedTextUnknownArgs = doSuccessfulDumpCall(
+                mRulesManagerService, new String[] { "foo", "bar"});
+
+        // Verify the package tracker was consulted.
+        verify(mMockPackageTracker).dump(any(PrintWriter.class));
+
+        String dumpedTextZeroArgs = doSuccessfulDumpCall(mRulesManagerService, null);
+        assertEquals(dumpedTextZeroArgs, dumpedTextUnknownArgs);
+    }
+
+    @Test
+    public void dump_formatState() throws Exception {
+        // Just expect these to not throw exceptions, not return nothing, and not interact with the
+        // package tracker.
+        doSuccessfulDumpCall(mRulesManagerService, dumpFormatArgs("p"));
+        doSuccessfulDumpCall(mRulesManagerService, dumpFormatArgs("s"));
+        doSuccessfulDumpCall(mRulesManagerService, dumpFormatArgs("c"));
+        doSuccessfulDumpCall(mRulesManagerService, dumpFormatArgs("i"));
+        doSuccessfulDumpCall(mRulesManagerService, dumpFormatArgs("o"));
+        doSuccessfulDumpCall(mRulesManagerService, dumpFormatArgs("t"));
+        doSuccessfulDumpCall(mRulesManagerService, dumpFormatArgs("a"));
+        doSuccessfulDumpCall(mRulesManagerService, dumpFormatArgs("z" /* Unknown */));
+        doSuccessfulDumpCall(mRulesManagerService, dumpFormatArgs("piscotz"));
+
+        verifyZeroInteractions(mMockPackageTracker);
+    }
+
+    private static String[] dumpFormatArgs(String argsString) {
+        return new String[] { "-format_state", argsString};
+    }
+
+    private String doSuccessfulDumpCall(RulesManagerService rulesManagerService, String[] args)
+            throws Exception {
+        when(mMockPermissionHelper.checkDumpPermission(any(String.class), any(PrintWriter.class)))
+                .thenReturn(true);
+
+        // Set up the mocks to return (arbitrary) information about the current device state.
+        when(mMockTimeZoneDistroInstaller.getSystemRulesVersion()).thenReturn("2017a");
+        when(mMockTimeZoneDistroInstaller.getInstalledDistroVersion()).thenReturn(
+                new DistroVersion(2, 3, "2017b", 4));
+        when(mMockTimeZoneDistroInstaller.getStagedDistroOperation()).thenReturn(
+                StagedDistroOperation.install(new DistroVersion(5, 6, "2017c", 7)));
+
+        // Do the dump call.
+        String dumpedOutput = doDumpCallAndCapture(rulesManagerService, args);
+
+        assertFalse(dumpedOutput.isEmpty());
+
+        return dumpedOutput;
+    }
+
+    private static String doDumpCallAndCapture(
+            RulesManagerService rulesManagerService, String[] args) throws IOException {
+        File file = File.createTempFile("dump", null);
+        try {
+            try (FileOutputStream fos = new FileOutputStream(file)) {
+                FileDescriptor fd = fos.getFD();
+                rulesManagerService.dump(fd, args);
+            }
+            return IoUtils.readFileAsString(file.getAbsolutePath());
+        } finally {
+            file.delete();
+        }
+    }
+
+    private void verifyNoPackageTrackerCallsMade() {
+        verifyNoMoreInteractions(mMockPackageTracker);
+        reset(mMockPackageTracker);
+    }
+
+    private void verifyPackageTrackerCalled(
+            CheckToken expectedCheckToken, boolean expectedSuccess) {
+        verify(mMockPackageTracker).recordCheckResult(expectedCheckToken, expectedSuccess);
+        reset(mMockPackageTracker);
+    }
+
+    private void configureCallerHasPermission() throws Exception {
+        doNothing()
+                .when(mMockPermissionHelper)
+                .enforceCallerHasPermission(REQUIRED_UPDATER_PERMISSION);
+    }
+
+    private void configureCallerDoesNotHavePermission() {
+        doThrow(new SecurityException("Simulated permission failure"))
+                .when(mMockPermissionHelper)
+                .enforceCallerHasPermission(REQUIRED_UPDATER_PERMISSION);
+    }
+
+    private void configureStageInstallExpectation(int resultCode)
+            throws Exception {
+        when(mMockTimeZoneDistroInstaller.stageInstallWithErrorCode(any(TimeZoneDistro.class)))
+                .thenReturn(resultCode);
+    }
+
+    private void configureStageUninstallExpectation(int resultCode) throws Exception {
+        doReturn(resultCode).when(mMockTimeZoneDistroInstaller).stageUninstall();
+    }
+
+    private void verifyStageInstallCalled() throws Exception {
+        verify(mMockTimeZoneDistroInstaller).stageInstallWithErrorCode(any(TimeZoneDistro.class));
+        verifyNoMoreInteractions(mMockTimeZoneDistroInstaller);
+        reset(mMockTimeZoneDistroInstaller);
+    }
+
+    private void verifyStageUninstallCalled() throws Exception {
+        verify(mMockTimeZoneDistroInstaller).stageUninstall();
+        verifyNoMoreInteractions(mMockTimeZoneDistroInstaller);
+        reset(mMockTimeZoneDistroInstaller);
+    }
+
+    private void verifyNoInstallerCallsMade() {
+        verifyNoMoreInteractions(mMockTimeZoneDistroInstaller);
+        reset(mMockTimeZoneDistroInstaller);
+    }
+
+    private static byte[] createArbitraryBytes(int length) {
+        byte[] bytes = new byte[length];
+        for (int i = 0; i < length; i++) {
+            bytes[i] = (byte) i;
+        }
+        return bytes;
+    }
+
+    private byte[] createArbitraryTokenBytes() {
+        return createArbitraryToken().toByteArray();
+    }
+
+    private CheckToken createArbitraryToken() {
+        return new CheckToken(1, new PackageVersions(1, 1));
+    }
+
+    private void configureDeviceSystemRulesVersion(String systemRulesVersion) throws Exception {
+        when(mMockTimeZoneDistroInstaller.getSystemRulesVersion()).thenReturn(systemRulesVersion);
+    }
+
+    private void configureInstalledDistroVersion(@Nullable DistroVersion installedDistroVersion)
+            throws Exception {
+        when(mMockTimeZoneDistroInstaller.getInstalledDistroVersion())
+                .thenReturn(installedDistroVersion);
+    }
+
+    private void configureStagedInstall(DistroVersion stagedDistroVersion) throws Exception {
+        when(mMockTimeZoneDistroInstaller.getStagedDistroOperation())
+                .thenReturn(StagedDistroOperation.install(stagedDistroVersion));
+    }
+
+    private void configureStagedUninstall() throws Exception {
+        when(mMockTimeZoneDistroInstaller.getStagedDistroOperation())
+                .thenReturn(StagedDistroOperation.uninstall());
+    }
+
+    private void configureNoStagedOperation() throws Exception {
+        when(mMockTimeZoneDistroInstaller.getStagedDistroOperation()).thenReturn(null);
+    }
+
+    private void configureDeviceCannotReadStagedDistroOperation() throws Exception {
+        when(mMockTimeZoneDistroInstaller.getStagedDistroOperation())
+                .thenThrow(new IOException("Simulated failure"));
+    }
+
+    private void configureDeviceCannotReadSystemRulesVersion() throws Exception {
+        when(mMockTimeZoneDistroInstaller.getSystemRulesVersion())
+                .thenThrow(new IOException("Simulated failure"));
+    }
+
+    private void configureDeviceCannotReadInstalledDistroVersion() throws Exception {
+        when(mMockTimeZoneDistroInstaller.getInstalledDistroVersion())
+                .thenThrow(new IOException("Simulated failure"));
+    }
+
+    private static void assertClosed(ParcelFileDescriptor parcelFileDescriptor) {
+        assertFalse(parcelFileDescriptor.getFileDescriptor().valid());
+    }
+
+    private static class FakeExecutor implements Executor {
+
+        private Runnable mLastCommand;
+
+        @Override
+        public void execute(Runnable command) {
+            assertNull(mLastCommand);
+            assertNotNull(command);
+            mLastCommand = command;
+        }
+
+        public Runnable getAndResetLastCommand() {
+            assertNotNull(mLastCommand);
+            Runnable toReturn = mLastCommand;
+            mLastCommand = null;
+            return toReturn;
+        }
+
+        public void simulateAsyncExecutionOfLastCommand() {
+            Runnable toRun = getAndResetLastCommand();
+            toRun.run();
+        }
+
+        public void assertNothingQueued() {
+            assertNull(mLastCommand);
+        }
+    }
+
+    private static class TestCallback extends ICallback.Stub {
+
+        private boolean mOnFinishedCalled;
+        private int mLastError;
+
+        @Override
+        public void onFinished(int error) {
+            assertFalse(mOnFinishedCalled);
+            mOnFinishedCalled = true;
+            mLastError = error;
+        }
+
+        public void assertResultReceived(int expectedResult) {
+            assertTrue(mOnFinishedCalled);
+            assertEquals(expectedResult, mLastError);
+        }
+
+        public void assertNoResultReceived() {
+            assertFalse(mOnFinishedCalled);
+        }
+    }
+
+    private static class StubbedCallback extends ICallback.Stub {
+        @Override
+        public void onFinished(int error) {
+            fail("Unexpected call");
+        }
+    }
+
+    private static ParcelFileDescriptor createParcelFileDescriptor(byte[] bytes)
+            throws IOException {
+        File file = File.createTempFile("pfd", null);
+        try (FileOutputStream fos = new FileOutputStream(file)) {
+            fos.write(bytes);
+        }
+        ParcelFileDescriptor pfd =
+                ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
+        // This should now be safe to delete. The ParcelFileDescriptor has an open fd.
+        file.delete();
+        return pfd;
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/wallpaper/WallpaperServiceTests.java b/services/tests/servicestests/src/com/android/server/wallpaper/WallpaperServiceTests.java
new file mode 100644
index 0000000..9c010a0
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/wallpaper/WallpaperServiceTests.java
@@ -0,0 +1,88 @@
+/*
+ * 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.wallpaper;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import android.app.WallpaperColors;
+import android.os.Handler;
+import android.os.Message;
+import android.os.SystemClock;
+import android.service.wallpaper.WallpaperService;
+import android.support.test.annotation.UiThreadTest;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.function.Supplier;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class WallpaperServiceTests {
+
+    @UiThreadTest
+    @Test
+    public void testNotifyColorsChanged_rateLimit() throws Exception {
+        long[] clockOffset = {0};
+        boolean[] postDelayed = {false};
+        Supplier<Long> clockFunction = () -> SystemClock.elapsedRealtime() + clockOffset[0];
+        Handler handler = new Handler() {
+            @Override
+            public boolean sendMessageAtTime(Message msg, long uptimeMillis) {
+                postDelayed[0] = true;
+                return super.sendMessageAtTime(msg, uptimeMillis);
+            }
+        };
+
+        CountDownLatch eventCountdown = new CountDownLatch(2);
+        WallpaperService service = new WallpaperService() {
+            @Override
+            public Engine onCreateEngine() {
+                return new WallpaperService.Engine(clockFunction, handler) {
+                    @Override
+                    public WallpaperColors onComputeColors() {
+                        eventCountdown.countDown();
+                        return null;
+                    }
+                };
+            }
+        };
+        WallpaperService.Engine engine = service.onCreateEngine();
+
+        // Called because it's the first time.
+        engine.notifyColorsChanged();
+        assertEquals("OnComputeColors should have been called.",
+                1, eventCountdown.getCount());
+
+        // Ignored since the call should be throttled.
+        engine.notifyColorsChanged();
+        assertEquals("OnComputeColors should have been throttled.",
+                1, eventCountdown.getCount());
+        // Should have been posted to the handler.
+        assertTrue("Event should have been delayed", postDelayed[0]);
+
+        // Called again after being deferred.
+        clockOffset[0] = 1500;
+        engine.notifyColorsChanged();
+        assertEquals("OnComputeColors should have been deferred.",
+                0, eventCountdown.getCount());
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java
index b09601e..25d700f 100644
--- a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java
@@ -97,6 +97,24 @@
     }
 
     @Test
+    public void testGetTopFullscreenWindow() throws Exception {
+        final WindowTestUtils.TestAppWindowToken token =
+                new WindowTestUtils.TestAppWindowToken(mDisplayContent);
+
+        assertNull(token.getTopFullscreenWindow());
+
+        final WindowState window1 = createWindow(null, TYPE_BASE_APPLICATION, token, "window1");
+        final WindowState window11 = createWindow(null, TYPE_APPLICATION, token, "window11");
+        final WindowState window12 = createWindow(null, TYPE_APPLICATION, token, "window12");
+        assertEquals(window12, token.getTopFullscreenWindow());
+        window12.mAttrs.width = 500;
+        assertEquals(window11, token.getTopFullscreenWindow());
+        window11.mAttrs.width = 500;
+        assertEquals(window1, token.getTopFullscreenWindow());
+        token.removeImmediately();
+    }
+
+    @Test
     public void testLandscapeSeascapeRotationByApp() throws Exception {
         // Some plumbing to get the service ready for rotation updates.
         sWm.mDisplayReady = true;
@@ -175,7 +193,7 @@
         token.setOrientation(SCREEN_ORIENTATION_LANDSCAPE);
 
         token.setFillsParent(false);
-        // Can specify orientation if app doesn't fill parent. Allowed for SDK <= 25.
+        // Can specify orientation if doesn't fill parent.
         assertEquals(SCREEN_ORIENTATION_LANDSCAPE, token.getOrientation());
 
         token.setFillsParent(true);
diff --git a/services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java
index 9d32496..0081214 100644
--- a/services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java
@@ -126,6 +126,7 @@
         boolean mMovedToFullscreen;
         boolean mAnimationStarted;
         boolean mSchedulePipModeChangedOnStart;
+        boolean mForcePipModeChangedCallback;
         boolean mAnimationEnded;
         Rect mAnimationEndFinalStackBounds;
         boolean mSchedulePipModeChangedOnEnd;
@@ -140,6 +141,7 @@
             mAnimationStarted = false;
             mAnimationEnded = false;
             mAnimationEndFinalStackBounds = null;
+            mForcePipModeChangedCallback = false;
             mSchedulePipModeChangedOnStart = false;
             mSchedulePipModeChangedOnEnd = false;
             mStackBounds = from;
@@ -148,10 +150,11 @@
         }
 
         @Override
-        public void onAnimationStart(boolean schedulePipModeChangedCallback) {
+        public void onAnimationStart(boolean schedulePipModeChangedCallback, boolean forceUpdate) {
             mAwaitingAnimationStart = false;
             mAnimationStarted = true;
             mSchedulePipModeChangedOnStart = schedulePipModeChangedCallback;
+            mForcePipModeChangedCallback = forceUpdate;
         }
 
         @Override
@@ -232,7 +235,7 @@
             return this;
         }
 
-        BoundsAnimationDriver restart(Rect to) {
+        BoundsAnimationDriver restart(Rect to, boolean expectStartedAndPipModeChangedCallback) {
             if (mAnimator == null) {
                 throw new IllegalArgumentException("Call start() to start a new animation");
             }
@@ -251,8 +254,15 @@
                 assertSame(oldAnimator, mAnimator);
             }
 
-            // No animation start for replacing animation
-            assertTrue(!mTarget.mAnimationStarted);
+            if (expectStartedAndPipModeChangedCallback) {
+                // Replacing animation with pending pip mode changed callback, ensure we update
+                assertTrue(mTarget.mAnimationStarted);
+                assertTrue(mTarget.mSchedulePipModeChangedOnStart);
+                assertTrue(mTarget.mForcePipModeChangedCallback);
+            } else {
+                // No animation start for replacing animation
+                assertTrue(!mTarget.mAnimationStarted);
+            }
             mTarget.mAnimationStarted = true;
             return this;
         }
@@ -467,7 +477,7 @@
         mDriver.start(BOUNDS_FULL, BOUNDS_FLOATING)
                 .expectStarted(!SCHEDULE_PIP_MODE_CHANGED)
                 .update(0.25f)
-                .restart(BOUNDS_FLOATING)
+                .restart(BOUNDS_FLOATING, false /* expectStartedAndPipModeChangedCallback */)
                 .end()
                 .expectEnded(SCHEDULE_PIP_MODE_CHANGED, !MOVE_TO_FULLSCREEN);
     }
@@ -478,7 +488,8 @@
         mDriver.start(BOUNDS_FULL, BOUNDS_FLOATING)
                 .expectStarted(!SCHEDULE_PIP_MODE_CHANGED)
                 .update(0.25f)
-                .restart(BOUNDS_SMALLER_FLOATING)
+                .restart(BOUNDS_SMALLER_FLOATING,
+                        false /* expectStartedAndPipModeChangedCallback */)
                 .end()
                 .expectEnded(SCHEDULE_PIP_MODE_CHANGED, !MOVE_TO_FULLSCREEN);
     }
@@ -486,10 +497,12 @@
     @UiThreadTest
     @Test
     public void testFullscreenToFloatingCancelFromAnimationToFullscreenBounds() throws Exception {
+        // When animating from fullscreen and the animation is interruped, we expect the animation
+        // start callback to be made, with a forced pip mode change callback
         mDriver.start(BOUNDS_FULL, BOUNDS_FLOATING)
                 .expectStarted(!SCHEDULE_PIP_MODE_CHANGED)
                 .update(0.25f)
-                .restart(BOUNDS_FULL)
+                .restart(BOUNDS_FULL, true /* expectStartedAndPipModeChangedCallback */)
                 .end()
                 .expectEnded(!SCHEDULE_PIP_MODE_CHANGED, MOVE_TO_FULLSCREEN);
     }
@@ -512,7 +525,7 @@
         mDriver.start(BOUNDS_FLOATING, BOUNDS_FULL)
                 .expectStarted(SCHEDULE_PIP_MODE_CHANGED)
                 .update(0.25f)
-                .restart(BOUNDS_FULL)
+                .restart(BOUNDS_FULL, false /* expectStartedAndPipModeChangedCallback */)
                 .end()
                 .expectEnded(!SCHEDULE_PIP_MODE_CHANGED, MOVE_TO_FULLSCREEN);
     }
@@ -523,7 +536,8 @@
         mDriver.start(BOUNDS_FLOATING, BOUNDS_FULL)
                 .expectStarted(SCHEDULE_PIP_MODE_CHANGED)
                 .update(0.25f)
-                .restart(BOUNDS_SMALLER_FLOATING)
+                .restart(BOUNDS_SMALLER_FLOATING,
+                        false /* expectStartedAndPipModeChangedCallback */)
                 .end()
                 .expectEnded(SCHEDULE_PIP_MODE_CHANGED, !MOVE_TO_FULLSCREEN);
     }
diff --git a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
index 1e167f0..a6cada7 100644
--- a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
@@ -17,12 +17,16 @@
 package com.android.server.wm;
 
 import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
 import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
 import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
 import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION;
+
 import static com.android.server.wm.WindowContainer.POSITION_TOP;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -31,6 +35,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import android.annotation.SuppressLint;
 import android.content.res.Configuration;
 import android.os.SystemClock;
 import android.platform.test.annotations.Presubmit;
@@ -398,6 +403,31 @@
         assertEquals(-1, orderedDisplayIds.indexOfValue(dc.getDisplayId()));
     }
 
+    @Test
+    @SuppressLint("InlinedApi")
+    public void testOrientationDefinedByKeyguard() {
+        final DisplayContent dc = createNewDisplay();
+        // Create a window that requests landscape orientation. It will define device orientation
+        // by default.
+        final WindowState window = createWindow(null /* parent */, TYPE_BASE_APPLICATION, dc, "w");
+        window.mAppToken.setOrientation(SCREEN_ORIENTATION_LANDSCAPE);
+
+        final WindowState keyguard = createWindow(null, TYPE_STATUS_BAR, dc, "keyguard");
+        keyguard.mHasSurface = true;
+        keyguard.mAttrs.screenOrientation = SCREEN_ORIENTATION_UNSPECIFIED;
+
+        assertEquals("Screen orientation must be defined by the app window by default",
+                SCREEN_ORIENTATION_LANDSCAPE, dc.getOrientation());
+
+        keyguard.mAttrs.screenOrientation = SCREEN_ORIENTATION_PORTRAIT;
+        assertEquals("Visible keyguard must influence device orientation",
+                SCREEN_ORIENTATION_PORTRAIT, dc.getOrientation());
+
+        sWm.setKeyguardGoingAway(true);
+        assertEquals("Keyguard that is going away must not influence device orientation",
+                SCREEN_ORIENTATION_LANDSCAPE, dc.getOrientation());
+    }
+
     private static void verifySizes(DisplayContent displayContent, int expectedBaseWidth,
                              int expectedBaseHeight, int expectedBaseDensity) {
         assertEquals(displayContent.mBaseDisplayWidth, expectedBaseWidth);
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java
index 39c0de8..99f2685 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java
@@ -19,6 +19,7 @@
 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.junit.Assert.fail;
 
@@ -140,6 +141,29 @@
     }
 
     @Test
+    public void testLowResolutionPersistAndLoadSnapshot() {
+        TaskSnapshot a = createSnapshot(0.5f /* reducedResolution */);
+        assertTrue(a.isReducedResolution());
+        mPersister.persistSnapshot(1 , mTestUserId, a);
+        mPersister.waitForQueueEmpty();
+        final File[] files = new File[] { new File(sFilesDir.getPath() + "/snapshots/1.proto"),
+                new File(sFilesDir.getPath() + "/snapshots/1_reduced.jpg")};
+        final File[] nonExistsFiles = new File[] {
+                new File(sFilesDir.getPath() + "/snapshots/1.jpg"),
+        };
+        assertTrueForFiles(files, File::exists, " must exist");
+        assertTrueForFiles(nonExistsFiles, file -> !file.exists(), " must not exist");
+        final TaskSnapshot snapshot = mLoader.loadTask(1, mTestUserId, true /* reduced */);
+        assertNotNull(snapshot);
+        assertEquals(TEST_INSETS, snapshot.getContentInsets());
+        assertNotNull(snapshot.getSnapshot());
+        assertEquals(Configuration.ORIENTATION_PORTRAIT, snapshot.getOrientation());
+
+        final TaskSnapshot snapshotNotExist = mLoader.loadTask(1, mTestUserId, false /* reduced */);
+        assertNull(snapshotNotExist);
+    }
+
+    @Test
     public void testRemoveObsoleteFiles() {
         mPersister.persistSnapshot(1, mTestUserId, createSnapshot());
         mPersister.persistSnapshot(2, mTestUserId, createSnapshot());
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterTestBase.java b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterTestBase.java
index 8146763..b49a0fd 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterTestBase.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterTestBase.java
@@ -80,12 +80,16 @@
     }
 
     TaskSnapshot createSnapshot() {
+        return createSnapshot(1f /* scale */);
+    }
+
+    TaskSnapshot createSnapshot(float scale) {
         final GraphicBuffer buffer = GraphicBuffer.create(100, 100, PixelFormat.RGBA_8888,
                 USAGE_HW_TEXTURE | USAGE_SW_READ_RARELY | USAGE_SW_READ_RARELY);
         Canvas c = buffer.lockCanvas();
         c.drawColor(Color.RED);
         buffer.unlockCanvasAndPost(c);
         return new TaskSnapshot(buffer, ORIENTATION_PORTRAIT, TEST_INSETS,
-                false /* reducedResolution */, 1f /* scale */);
+                scale < 1f /* reducedResolution */, scale);
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
index 07373e1..27ea325 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
@@ -17,7 +17,7 @@
 package com.android.server.wm;
 
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
-import static android.view.WindowManagerPolicy.NAV_BAR_BOTTOM;
+import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
 
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
 
@@ -189,7 +189,7 @@
 
     @Override
     public boolean isKeyguardHostWindow(WindowManager.LayoutParams attrs) {
-        return false;
+        return attrs.type == TYPE_STATUS_BAR;
     }
 
     @Override
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java
index 7ff1110..272e451 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java
@@ -32,6 +32,7 @@
 import static android.content.res.Configuration.EMPTY;
 import static com.android.server.wm.WindowContainer.POSITION_TOP;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 /**
  * A collection of static functions that can be referenced by other test packages to provide access
@@ -51,7 +52,10 @@
      * Retrieves an instance of a mock {@link WindowManagerService}.
      */
     public static WindowManagerService getMockWindowManagerService() {
-        return mock(WindowManagerService.class);
+        final WindowManagerService service = mock(WindowManagerService.class);
+        final WindowHashMap windowMap = new WindowHashMap();
+        when(service.getWindowManagerLock()).thenReturn(windowMap);
+        return service;
     }
 
     /**
diff --git a/services/tests/servicestests/test-apps/Android.mk b/services/tests/servicestests/test-apps/Android.mk
new file mode 100644
index 0000000..5053e7d
--- /dev/null
+++ b/services/tests/servicestests/test-apps/Android.mk
@@ -0,0 +1 @@
+include $(call all-subdir-makefiles)
diff --git a/services/tests/servicestests/test-apps/ConnTestApp/Android.mk b/services/tests/servicestests/test-apps/ConnTestApp/Android.mk
index 02afe83..fbfa28a 100644
--- a/services/tests/servicestests/test-apps/ConnTestApp/Android.mk
+++ b/services/tests/servicestests/test-apps/ConnTestApp/Android.mk
@@ -17,7 +17,8 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_TAGS := tests
-LOCAL_SDK_VERSION := current
+
+LOCAL_COMPATIBILITY_SUITE := device-tests
 
 LOCAL_STATIC_JAVA_LIBRARIES := servicestests-aidl
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
diff --git a/services/tests/servicestests/test-apps/ConnTestApp/AndroidManifest.xml b/services/tests/servicestests/test-apps/ConnTestApp/AndroidManifest.xml
index 0da3562..909e9bb 100644
--- a/services/tests/servicestests/test-apps/ConnTestApp/AndroidManifest.xml
+++ b/services/tests/servicestests/test-apps/ConnTestApp/AndroidManifest.xml
@@ -17,12 +17,15 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.android.servicestests.apps.conntestapp">
 
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.MANAGE_NETWORK_POLICY" />
+    <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
 
     <application>
         <activity android:name=".ConnTestActivity"
                   android:exported="true" />
+        <service android:name=".CmdReceiverService"
+                 android:exported="true" />
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/services/tests/servicestests/test-apps/ConnTestApp/src/com/android/servicestests/apps/conntestapp/CmdReceiverService.java b/services/tests/servicestests/test-apps/ConnTestApp/src/com/android/servicestests/apps/conntestapp/CmdReceiverService.java
new file mode 100644
index 0000000..6130f3a
--- /dev/null
+++ b/services/tests/servicestests/test-apps/ConnTestApp/src/com/android/servicestests/apps/conntestapp/CmdReceiverService.java
@@ -0,0 +1,36 @@
+/*
+ * 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.servicestests.apps.conntestapp;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+import com.android.servicestests.aidl.ICmdReceiverService;
+
+public class CmdReceiverService extends Service {
+    private ICmdReceiverService.Stub mBinder = new ICmdReceiverService.Stub() {
+        @Override
+        public void finishActivity() {
+            ConnTestActivity.finishSelf();
+        }
+    };
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return mBinder;
+    }
+}
\ No newline at end of file
diff --git a/services/tests/servicestests/test-apps/ConnTestApp/src/com/android/servicestests/apps/conntestapp/ConnTestActivity.java b/services/tests/servicestests/test-apps/ConnTestApp/src/com/android/servicestests/apps/conntestapp/ConnTestActivity.java
index 11ebfca..b26cc7fd 100644
--- a/services/tests/servicestests/test-apps/ConnTestApp/src/com/android/servicestests/apps/conntestapp/ConnTestActivity.java
+++ b/services/tests/servicestests/test-apps/ConnTestApp/src/com/android/servicestests/apps/conntestapp/ConnTestActivity.java
@@ -21,19 +21,18 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
+import android.net.INetworkPolicyManager;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.os.INetworkManagementService;
+import android.os.Process;
 import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.util.Log;
 
+import com.android.internal.annotations.GuardedBy;
 import com.android.servicestests.aidl.INetworkStateObserver;
 
-import java.net.HttpURLConnection;
-import java.net.URL;
-
 public class ConnTestActivity extends Activity {
     private static final String TAG = ConnTestActivity.class.getSimpleName();
 
@@ -41,21 +40,26 @@
     private static final String ACTION_FINISH_ACTIVITY = TEST_PKG + ".FINISH";
     private static final String EXTRA_NETWORK_STATE_OBSERVER = TEST_PKG + ".observer";
 
-    private static final int NETWORK_TIMEOUT_MS = 5 * 1000;
-
-    private static final String NETWORK_STATUS_TEMPLATE = "%s|%s|%s|%s|%s";
+    private static final Object INSTANCE_LOCK = new Object();
+    @GuardedBy("instanceLock")
+    private static Activity sInstance;
 
     private BroadcastReceiver finishCommandReceiver = null;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        synchronized (INSTANCE_LOCK) {
+            sInstance = this;
+        }
+        Log.i(TAG, "onCreate called");
 
         notifyNetworkStateObserver();
 
         finishCommandReceiver = new BroadcastReceiver() {
             @Override
             public void onReceive(Context context, Intent intent) {
+                Log.i(TAG, "finish command received");
                 ConnTestActivity.this.finish();
             }
         };
@@ -63,13 +67,37 @@
     }
 
     @Override
+    public void onResume() {
+        super.onResume();
+        Log.i(TAG, "onResume called");
+    }
+
+    @Override
     public void onStop() {
+        Log.i(TAG, "onStop called");
         if (finishCommandReceiver != null) {
             unregisterReceiver(finishCommandReceiver);
         }
         super.onStop();
     }
 
+    @Override
+    public void finish() {
+        synchronized (INSTANCE_LOCK) {
+            sInstance = null;
+        }
+        Log.i(TAG, "finish called");
+        super.finish();
+    }
+
+    public static void finishSelf() {
+        synchronized (INSTANCE_LOCK) {
+            if (sInstance != null) {
+                sInstance.finish();
+            }
+        }
+    }
+
     private void notifyNetworkStateObserver() {
         if (getIntent() == null) {
             return;
@@ -84,7 +112,7 @@
         if (observer != null) {
             AsyncTask.execute(() -> {
                 try {
-                    observer.onNetworkStateChecked(checkNetworkStatus(ConnTestActivity.this));
+                    observer.onNetworkStateChecked(checkNetworkStatus());
                 } catch (RemoteException e) {
                     Log.e(TAG, "Error occured while notifying the observer: " + e);
                 }
@@ -93,78 +121,25 @@
     }
 
     /**
-     * Checks whether the network is available and return a string which can then be send as a
-     * result data for the ordered broadcast.
+     * Checks whether the network is restricted.
      *
-     * <p>
-     * The string has the following format:
-     *
-     * <p><pre><code>
-     * NetinfoState|NetinfoDetailedState|RealConnectionCheck|RealConnectionCheckDetails|Netinfo
-     * </code></pre>
-     *
-     * <p>Where:
-     *
-     * <ul>
-     * <li>{@code NetinfoState}: enum value of {@link NetworkInfo.State}.
-     * <li>{@code NetinfoDetailedState}: enum value of {@link NetworkInfo.DetailedState}.
-     * <li>{@code RealConnectionCheck}: boolean value of a real connection check (i.e., an attempt
-     *     to access an external website.
-     * <li>{@code RealConnectionCheckDetails}: if HTTP output core or exception string of the real
-     *     connection attempt
-     * <li>{@code Netinfo}: string representation of the {@link NetworkInfo}.
-     * </ul>
-     *
-     * For example, if the connection was established fine, the result would be something like:
-     * <p><pre><code>
-     * CONNECTED|CONNECTED|true|200|[type: WIFI[], state: CONNECTED/CONNECTED, reason: ...]
-     * </code></pre>
+     * @return null if network is not restricted, otherwise an error message.
      */
-    private String checkNetworkStatus(Context context) {
-        final ConnectivityManager cm =
-                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
-        final String address = "http://example.com";
-        final NetworkInfo networkInfo = cm.getActiveNetworkInfo();
-        Log.d(TAG, "Running checkNetworkStatus() on thread "
-                + Thread.currentThread().getName() + " for UID " + getUid(context)
-                + "\n\tactiveNetworkInfo: " + networkInfo + "\n\tURL: " + address);
-        boolean checkStatus = false;
-        String checkDetails = "N/A";
+    private String checkNetworkStatus() {
+        final INetworkManagementService nms = INetworkManagementService.Stub.asInterface(
+                ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE));
+        final INetworkPolicyManager npms = INetworkPolicyManager.Stub.asInterface(
+                ServiceManager.getService(Context.NETWORK_POLICY_SERVICE));
         try {
-            final URL url = new URL(address);
-            final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-            conn.setReadTimeout(NETWORK_TIMEOUT_MS);
-            conn.setConnectTimeout(NETWORK_TIMEOUT_MS / 2);
-            conn.setRequestMethod("GET");
-            conn.setDoInput(true);
-            conn.connect();
-            final int response = conn.getResponseCode();
-            checkStatus = true;
-            checkDetails = "HTTP response for " + address + ": " + response;
-        } catch (Exception e) {
-            checkStatus = false;
-            checkDetails = "Exception getting " + address + ": " + e;
-        }
-        Log.d(TAG, checkDetails);
-        final String state, detailedState;
-        if (networkInfo != null) {
-            state = networkInfo.getState().name();
-            detailedState = networkInfo.getDetailedState().name();
-        } else {
-            state = detailedState = "null";
-        }
-        final String status = String.format(NETWORK_STATUS_TEMPLATE, state, detailedState,
-                Boolean.valueOf(checkStatus), checkDetails, networkInfo);
-        Log.d(TAG, "Offering " + status);
-        return status;
-    }
-
-    private int getUid(Context context) {
-        final String packageName = context.getPackageName();
-        try {
-            return context.getPackageManager().getPackageUid(packageName, 0);
-        } catch (PackageManager.NameNotFoundException e) {
-            throw new IllegalStateException("Could not get UID for " + packageName, e);
+            final boolean restrictedByFwRules = nms.isNetworkRestricted(Process.myUid());
+            final boolean restrictedByUidRules = npms.isUidNetworkingBlocked(Process.myUid(), true);
+            if (restrictedByFwRules || restrictedByUidRules) {
+                return "Network is restricted by fwRules: " + restrictedByFwRules
+                        + " and uidRules: " + restrictedByUidRules;
+            }
+            return null;
+        } catch (RemoteException e) {
+            return "Error talking to system server: " + e;
         }
     }
 }
\ No newline at end of file
diff --git a/services/usage/java/com/android/server/usage/StorageStatsService.java b/services/usage/java/com/android/server/usage/StorageStatsService.java
index 9f4fb85..21b11b0 100644
--- a/services/usage/java/com/android/server/usage/StorageStatsService.java
+++ b/services/usage/java/com/android/server/usage/StorageStatsService.java
@@ -392,6 +392,7 @@
         res.videoBytes = stats[2];
         res.imageBytes = stats[3];
         res.appBytes = stats[4];
+        res.obbBytes = stats[5];
         return res;
     }
 
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index 073a17e..25e471c 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -363,19 +363,22 @@
         }
 
         @Override
-        public void onUidIdle(int uid, boolean disabled) throws RemoteException {
+        public void onUidIdle(int uid, boolean disabled) {
             // Ignored
         }
 
         @Override
-        public void onUidGone(int uid, boolean disabled) throws RemoteException {
+        public void onUidGone(int uid, boolean disabled) {
             onUidStateChanged(uid, ActivityManager.PROCESS_STATE_NONEXISTENT, 0);
         }
 
         @Override
-        public void onUidActive(int uid) throws RemoteException {
+        public void onUidActive(int uid) {
             // Ignored
         }
+
+        @Override public void onUidCachedChanged(int uid, boolean cached) {
+        }
     };
 
     @Override
diff --git a/services/usb/java/com/android/server/usb/UsbDebuggingManager.java b/services/usb/java/com/android/server/usb/UsbDebuggingManager.java
index f6d9e9a..703f1a1 100644
--- a/services/usb/java/com/android/server/usb/UsbDebuggingManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDebuggingManager.java
@@ -43,12 +43,10 @@
 import com.android.server.FgThread;
 
 import java.io.File;
-import java.io.FileDescriptor;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.io.PrintWriter;
 import java.security.MessageDigest;
 import java.util.Arrays;
 
@@ -56,10 +54,10 @@
     private static final String TAG = "UsbDebuggingManager";
     private static final boolean DEBUG = false;
 
-    private final String ADBD_SOCKET = "adbd";
-    private final String ADB_DIRECTORY = "misc/adb";
-    private final String ADB_KEYS_FILE = "adb_keys";
-    private final int BUFFER_SIZE = 4096;
+    private static final String ADBD_SOCKET = "adbd";
+    private static final String ADB_DIRECTORY = "misc/adb";
+    private static final String ADB_KEYS_FILE = "adb_keys";
+    private static final int BUFFER_SIZE = 4096;
 
     private final Context mContext;
     private final Handler mHandler;
@@ -346,7 +344,7 @@
     }
 
     /**
-     * @returns true if the componentName led to an Activity that was started.
+     * @return true if the componentName led to an Activity that was started.
      */
     private boolean startConfirmationActivity(ComponentName componentName, UserHandle userHandle,
             String key, String fingerprints) {
@@ -365,7 +363,7 @@
     }
 
     /**
-     * @returns true if the componentName led to a Service that was started.
+     * @return true if the componentName led to a Service that was started.
      */
     private boolean startConfirmationService(ComponentName componentName, UserHandle userHandle,
             String key, String fingerprints) {
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index 2219863..7437332 100644
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -92,14 +92,6 @@
     private static final String USB_CONFIG_PROPERTY = "sys.usb.config";
 
     /**
-     * The property which stores the current build type (user/userdebug/eng).
-     */
-    private static final String BUILD_TYPE_PROPERTY = "ro.build.type";
-
-    private static final String BUILD_TYPE_USERDEBUG = "userdebug";
-    private static final String BUILD_TYPE_ENG = "eng";
-
-    /**
      * The non-persistent property which stores the current USB actual state.
      */
     private static final String USB_STATE_PROPERTY = "sys.usb.state";
@@ -179,7 +171,7 @@
     private static Set<Integer> sBlackListedInterfaces;
 
     static {
-        sBlackListedInterfaces = new HashSet<Integer>();
+        sBlackListedInterfaces = new HashSet<>();
         sBlackListedInterfaces.add(UsbConstants.USB_CLASS_AUDIO);
         sBlackListedInterfaces.add(UsbConstants.USB_CLASS_COMM);
         sBlackListedInterfaces.add(UsbConstants.USB_CLASS_HID);
@@ -191,7 +183,7 @@
         sBlackListedInterfaces.add(UsbConstants.USB_CLASS_CONTENT_SEC);
         sBlackListedInterfaces.add(UsbConstants.USB_CLASS_VIDEO);
         sBlackListedInterfaces.add(UsbConstants.USB_CLASS_WIRELESS_CONTROLLER);
-    };
+    }
 
     private class AdbSettingsObserver extends ContentObserver {
         public AdbSettingsObserver() {
@@ -225,44 +217,6 @@
         }
     };
 
-    private final BroadcastReceiver mPortReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            UsbPort port = intent.getParcelableExtra(UsbManager.EXTRA_PORT);
-            UsbPortStatus status = intent.getParcelableExtra(UsbManager.EXTRA_PORT_STATUS);
-            mHandler.updateHostState(port, status);
-        }
-    };
-
-    private final BroadcastReceiver mChargingReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
-            boolean usbCharging = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
-            mHandler.sendMessage(MSG_UPDATE_CHARGING_STATE, usbCharging);
-        }
-    };
-
-    private final BroadcastReceiver mHostReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            Iterator devices = ((UsbManager) context.getSystemService(Context.USB_SERVICE))
-                    .getDeviceList().entrySet().iterator();
-            if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) {
-                mHandler.sendMessage(MSG_UPDATE_HOST_STATE, devices, true);
-            } else {
-                mHandler.sendMessage(MSG_UPDATE_HOST_STATE, devices, false);
-            }
-        }
-    };
-
-    private final BroadcastReceiver mLanguageChangedReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            mHandler.sendEmptyMessage(MSG_LOCALE_CHANGED);
-        }
-    };
-
     public UsbDeviceManager(Context context, UsbAlsaManager alsaManager,
             UsbSettingsManager settingsManager) {
         mContext = context;
@@ -287,17 +241,56 @@
         if (secureAdbEnabled && !dataEncrypted) {
             mDebuggingManager = new UsbDebuggingManager(context);
         }
-        mContext.registerReceiver(mPortReceiver,
+
+        BroadcastReceiver portReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                UsbPort port = intent.getParcelableExtra(UsbManager.EXTRA_PORT);
+                UsbPortStatus status = intent.getParcelableExtra(UsbManager.EXTRA_PORT_STATUS);
+                mHandler.updateHostState(port, status);
+            }
+        };
+
+        BroadcastReceiver chargingReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+                boolean usbCharging = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
+                mHandler.sendMessage(MSG_UPDATE_CHARGING_STATE, usbCharging);
+            }
+        };
+
+        BroadcastReceiver hostReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                Iterator devices = ((UsbManager) context.getSystemService(Context.USB_SERVICE))
+                        .getDeviceList().entrySet().iterator();
+                if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) {
+                    mHandler.sendMessage(MSG_UPDATE_HOST_STATE, devices, true);
+                } else {
+                    mHandler.sendMessage(MSG_UPDATE_HOST_STATE, devices, false);
+                }
+            }
+        };
+
+        BroadcastReceiver languageChangedReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                mHandler.sendEmptyMessage(MSG_LOCALE_CHANGED);
+            }
+        };
+
+        mContext.registerReceiver(portReceiver,
                 new IntentFilter(UsbManager.ACTION_USB_PORT_CHANGED));
-        mContext.registerReceiver(mChargingReceiver,
+        mContext.registerReceiver(chargingReceiver,
                 new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
 
         IntentFilter filter =
                 new IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED);
         filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
-        mContext.registerReceiver(mHostReceiver, filter);
+        mContext.registerReceiver(hostReceiver, filter);
 
-        mContext.registerReceiver(mLanguageChangedReceiver,
+        mContext.registerReceiver(languageChangedReceiver,
                 new IntentFilter(Intent.ACTION_LOCALE_CHANGED));
     }
 
@@ -326,7 +319,7 @@
 
         // We do not show the USB notification if the primary volume supports mass storage.
         // The legacy mass storage UI will be used instead.
-        boolean massStorageSupported = false;
+        boolean massStorageSupported;
         final StorageManager storageManager = StorageManager.from(mContext);
         final StorageVolume primary = storageManager.getPrimaryVolume();
         massStorageSupported = primary != null && primary.allowMassStorage();
@@ -454,7 +447,7 @@
                             SystemProperties.get(USB_STATE_PROPERTY));
                 }
 
-                /**
+                /*
                  * Use the normal bootmode persistent prop to maintain state of adb across
                  * all boot modes.
                  */
@@ -462,7 +455,7 @@
                         SystemProperties.get(USB_PERSISTENT_CONFIG_PROPERTY),
                         UsbManager.USB_FUNCTION_ADB);
 
-                /**
+                /*
                  * Previous versions can set persist config to mtp/ptp but it does not
                  * get reset on OTA. Reset the property here instead.
                  */
@@ -652,10 +645,7 @@
 
         private boolean isNormalBoot() {
             String bootMode = SystemProperties.get(BOOT_MODE_PROPERTY, "unknown");
-            if (bootMode.equals(NORMAL_BOOT) || bootMode.equals("unknown")) {
-                return true;
-            }
-            return false;
+            return bootMode.equals(NORMAL_BOOT) || bootMode.equals("unknown");
         }
 
         private boolean trySetEnabledFunctions(String functions, boolean forceRestart) {
@@ -1027,7 +1017,7 @@
                             Slog.v(TAG, "Current user switched to " + msg.arg1
                                     + "; resetting USB host stack for MTP or PTP");
                             // avoid leaking sensitive data from previous user
-                            setEnabledFunctions(mCurrentFunctions, true, false);
+                            setEnabledFunctions(null, true, false);
                         }
                         mCurrentUser = msg.arg1;
                     }
@@ -1037,7 +1027,9 @@
                     if (DEBUG) {
                         Slog.v(TAG, "Accessory mode enter timeout: " + mConnected);
                     }
-                    if (!mConnected) {
+                    if (!mConnected || !UsbManager.containsFunction(
+                            mCurrentFunctions,
+                            UsbManager.USB_FUNCTION_ACCESSORY)) {
                         notifyAccessoryModeExit();
                     }
                     break;
@@ -1325,25 +1317,21 @@
                 String[] items = config.split(":");
                 if (items.length == 3 || items.length == 4) {
                     if (mOemModeMap == null) {
-                        mOemModeMap = new HashMap<String, HashMap<String,
-                                Pair<String, String>>>();
+                        mOemModeMap = new HashMap<>();
                     }
                     HashMap<String, Pair<String, String>> overrideMap
                             = mOemModeMap.get(items[0]);
                     if (overrideMap == null) {
-                        overrideMap = new HashMap<String,
-                                Pair<String, String>>();
+                        overrideMap = new HashMap<>();
                         mOemModeMap.put(items[0], overrideMap);
                     }
 
                     // Favoring the first combination if duplicate exists
                     if (!overrideMap.containsKey(items[1])) {
                         if (items.length == 3) {
-                            overrideMap.put(items[1],
-                                    new Pair<String, String>(items[2], ""));
+                            overrideMap.put(items[1], new Pair<>(items[2], ""));
                         } else {
-                            overrideMap.put(items[1],
-                                    new Pair<String, String>(items[2], items[3]));
+                            overrideMap.put(items[1], new Pair<>(items[2], items[3]));
                         }
                     }
                 }
@@ -1404,7 +1392,7 @@
         String bootMode = SystemProperties.get(BOOT_MODE_PROPERTY, "unknown");
         String persistProp = USB_PERSISTENT_CONFIG_PROPERTY;
         if (!(bootMode.equals(NORMAL_BOOT) || bootMode.equals("unknown"))) {
-            if (functions == true) {
+            if (functions) {
                 persistProp = "persist.sys.usb." + bootMode + ".func";
             } else {
                 persistProp = "persist.sys.usb." + bootMode + ".config";
diff --git a/services/usb/java/com/android/server/usb/UsbHostManager.java b/services/usb/java/com/android/server/usb/UsbHostManager.java
index 3279fa6..c657a1b 100644
--- a/services/usb/java/com/android/server/usb/UsbHostManager.java
+++ b/services/usb/java/com/android/server/usb/UsbHostManager.java
@@ -22,8 +22,10 @@
 import android.hardware.usb.UsbConfiguration;
 import android.hardware.usb.UsbConstants;
 import android.hardware.usb.UsbDevice;
+import android.hardware.usb.UsbDeviceConnection;
 import android.hardware.usb.UsbEndpoint;
 import android.hardware.usb.UsbInterface;
+import android.hardware.usb.UsbManager;
 import android.os.Bundle;
 import android.os.ParcelFileDescriptor;
 import android.text.TextUtils;
@@ -32,8 +34,11 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.usb.descriptors.UsbDescriptorParser;
+import com.android.server.usb.descriptors.report.TextReportCanvas;
+import com.android.server.usb.descriptors.tree.UsbDescriptorsTree;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 
 /**
@@ -43,14 +48,14 @@
     private static final String TAG = UsbHostManager.class.getSimpleName();
     private static final boolean DEBUG = false;
 
-    // contains all connected USB devices
-    private final HashMap<String, UsbDevice> mDevices = new HashMap<String, UsbDevice>();
+    private final Context mContext;
 
+    // contains all connected USB devices
+    private final HashMap<String, UsbDevice> mDevices = new HashMap<>();
 
     // USB busses to exclude from USB host support
     private final String[] mHostBlacklist;
 
-    private final Context mContext;
     private final Object mLock = new Object();
 
     private UsbDevice mNewDevice;
@@ -72,6 +77,7 @@
     public UsbHostManager(Context context, UsbAlsaManager alsaManager,
             UsbSettingsManager settingsManager) {
         mContext = context;
+
         mHostBlacklist = context.getResources().getStringArray(
                 com.android.internal.R.array.config_usbHostBlacklist);
         mUsbAlsaManager = alsaManager;
@@ -119,17 +125,14 @@
     }
 
     /* returns true if the USB device should not be accessible by applications */
-    private boolean isBlackListed(int clazz, int subClass, int protocol) {
+    private boolean isBlackListed(int clazz, int subClass) {
         // blacklist hubs
         if (clazz == UsbConstants.USB_CLASS_HUB) return true;
 
         // blacklist HID boot devices (mouse and keyboard)
-        if (clazz == UsbConstants.USB_CLASS_HID &&
-                subClass == UsbConstants.USB_INTERFACE_SUBCLASS_BOOT) {
-            return true;
-        }
+        return clazz == UsbConstants.USB_CLASS_HID
+                && subClass == UsbConstants.USB_INTERFACE_SUBCLASS_BOOT;
 
-        return false;
     }
 
     /* Called from JNI in monitorUsbHostBus() to report new USB devices
@@ -137,6 +140,7 @@
        interfaces and endpoints, and finally call endUsbDeviceAdded after all descriptors
        have been processed
      */
+    @SuppressWarnings("unused")
     private boolean beginUsbDeviceAdded(String deviceName, int vendorID, int productID,
             int deviceClass, int deviceSubclass, int deviceProtocol,
             String manufacturerName, String productName, int version, String serialNumber) {
@@ -161,7 +165,7 @@
         // such test until endUsbDeviceAdded() when we have that info.
 
         if (isBlackListed(deviceName) ||
-                isBlackListed(deviceClass, deviceSubclass, deviceProtocol)) {
+                isBlackListed(deviceClass, deviceSubclass)) {
             return false;
         }
 
@@ -183,9 +187,9 @@
                     deviceClass, deviceSubclass, deviceProtocol,
                     manufacturerName, productName, versionString, serialNumber);
 
-            mNewConfigurations = new ArrayList<UsbConfiguration>();
-            mNewInterfaces = new ArrayList<UsbInterface>();
-            mNewEndpoints = new ArrayList<UsbEndpoint>();
+            mNewConfigurations = new ArrayList<>();
+            mNewInterfaces = new ArrayList<>();
+            mNewEndpoints = new ArrayList<>();
         }
 
         return true;
@@ -194,6 +198,7 @@
     /* Called from JNI in monitorUsbHostBus() to report new USB configuration for the device
        currently being added.  Returns true if successful, false in case of error.
      */
+    @SuppressWarnings("unused")
     private void addUsbConfiguration(int id, String name, int attributes, int maxPower) {
         if (mNewConfiguration != null) {
             mNewConfiguration.setInterfaces(
@@ -208,6 +213,7 @@
     /* Called from JNI in monitorUsbHostBus() to report new USB interface for the device
        currently being added.  Returns true if successful, false in case of error.
      */
+    @SuppressWarnings("unused")
     private void addUsbInterface(int id, String name, int altSetting,
             int Class, int subClass, int protocol) {
         if (mNewInterface != null) {
@@ -223,11 +229,13 @@
     /* Called from JNI in monitorUsbHostBus() to report new USB endpoint for the device
        currently being added.  Returns true if successful, false in case of error.
      */
+    @SuppressWarnings("unused")
     private void addUsbEndpoint(int address, int attributes, int maxPacketSize, int interval) {
         mNewEndpoints.add(new UsbEndpoint(address, attributes, maxPacketSize, interval));
     }
 
     /* Called from JNI in monitorUsbHostBus() to finish adding a new device */
+    @SuppressWarnings("unused")
     private void endUsbDeviceAdded() {
         if (DEBUG) {
             Slog.d(TAG, "usb:UsbHostManager.endUsbDeviceAdded()");
@@ -266,8 +274,8 @@
                 if (parser.parseDevice(mNewDevice.getDeviceName())) {
                     isInputHeadset = parser.isInputHeadset();
                     isOutputHeadset = parser.isOutputHeadset();
-                    Slog.i(TAG, "---- isHeadset[in:" + isInputHeadset
-                            + " , out:" + isOutputHeadset + "]");
+                    Slog.i(TAG, "---- isHeadset[in: " + isInputHeadset
+                            + " , out: " + isOutputHeadset + "]");
                 }
                 mUsbAlsaManager.usbDeviceAdded(mNewDevice,
                         isInputHeadset, isOutputHeadset);
@@ -284,6 +292,7 @@
     }
 
     /* Called from JNI in monitorUsbHostBus to report USB device removal */
+    @SuppressWarnings("unused")
     private void usbDeviceRemoved(String deviceName) {
         synchronized (mLock) {
             UsbDevice device = mDevices.remove(deviceName);
@@ -299,11 +308,7 @@
         synchronized (mLock) {
             // Create a thread to call into native code to wait for USB host events.
             // This thread will call us back on usbDeviceAdded and usbDeviceRemoved.
-            Runnable runnable = new Runnable() {
-                public void run() {
-                    monitorUsbHostBus();
-                }
-            };
+            Runnable runnable = this::monitorUsbHostBus;
             new Thread(null, runnable, "UsbService host thread").start();
         }
     }
@@ -343,6 +348,33 @@
             if (mUsbDeviceConnectionHandler != null) {
                 pw.println("Default USB Host Connection handler: " + mUsbDeviceConnectionHandler);
             }
+
+            Collection<UsbDevice> devices = mDevices.values();
+            if (devices.size() != 0) {
+                pw.println("USB Peripheral Descriptors");
+                for (UsbDevice device : devices) {
+                    StringBuilder stringBuilder = new StringBuilder();
+
+                    UsbDescriptorParser parser = new UsbDescriptorParser();
+                    if (parser.parseDevice(device.getDeviceName())) {
+                        UsbDescriptorsTree descriptorTree = new UsbDescriptorsTree();
+                        descriptorTree.parse(parser);
+
+                        UsbManager usbManager =
+                                (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
+                        UsbDeviceConnection connection = usbManager.openDevice(device);
+
+                        descriptorTree.report(new TextReportCanvas(connection, stringBuilder));
+                        connection.close();
+
+                        stringBuilder.append("isHeadset[in: " + parser.isInputHeadset()
+                                + " , out: " + parser.isOutputHeadset() + "]");
+                    } else {
+                        stringBuilder.append("Error Parsing USB Descriptors");
+                    }
+                    pw.println(stringBuilder.toString());
+                }
+            }
         }
     }
 
diff --git a/services/usb/java/com/android/server/usb/UsbPortManager.java b/services/usb/java/com/android/server/usb/UsbPortManager.java
index 7e2496c..e28513a 100644
--- a/services/usb/java/com/android/server/usb/UsbPortManager.java
+++ b/services/usb/java/com/android/server/usb/UsbPortManager.java
@@ -87,9 +87,6 @@
     // Mostly due a command sent by the remote Usb device.
     private HALCallback mHALCallback = new HALCallback(null, this);
 
-    // Notification object used to listen to the start of the usb daemon.
-    private final ServiceNotification mServiceNotification = new ServiceNotification();
-
     // Cookie sent for usb hal death notification.
     private static final int USB_HAL_DEATH_COOKIE = 1000;
 
@@ -107,18 +104,20 @@
     // Ports may temporarily have different dispositions as they are added or removed
     // but the class invariant is that this list will only contain ports with DISPOSITION_READY
     // except while updatePortsLocked() is in progress.
-    private final ArrayMap<String, PortInfo> mPorts = new ArrayMap<String, PortInfo>();
+    private final ArrayMap<String, PortInfo> mPorts = new ArrayMap<>();
 
     // List of all simulated ports, indexed by id.
     private final ArrayMap<String, RawPortInfo> mSimulatedPorts =
-            new ArrayMap<String, RawPortInfo>();
+            new ArrayMap<>();
 
     public UsbPortManager(Context context) {
         mContext = context;
         try {
+            ServiceNotification serviceNotification = new ServiceNotification();
+
             boolean ret = IServiceManager.getService()
                     .registerForNotifications("android.hardware.usb@1.0::IUsb",
-                            "", mServiceNotification);
+                            "", serviceNotification);
             if (!ret) {
                 logAndPrint(Log.ERROR, null,
                         "Failed to register service start notification");
@@ -258,7 +257,6 @@
                         logAndPrintException(pw, "Failed to set the USB port mode: "
                                 + "portId=" + portId
                                 + ", newMode=" + UsbPort.modeToString(newRole.role), e);
-                        return;
                     }
                 } else {
                     // Change power and data role independently as needed.
@@ -289,7 +287,6 @@
                                             + ", newDataRole=" + UsbPort.dataRoleToString(newRole
                                             .role),
                                     e);
-                            return;
                         }
                     }
                 }
@@ -415,10 +412,6 @@
         public IndentingPrintWriter pw;
         public UsbPortManager portManager;
 
-        HALCallback() {
-            super();
-        }
-
         HALCallback(IndentingPrintWriter pw, UsbPortManager portManager) {
             this.pw = pw;
             this.portManager = portManager;
@@ -434,7 +427,7 @@
                 return;
             }
 
-            ArrayList<RawPortInfo> newPortInfo = new ArrayList<RawPortInfo>();
+            ArrayList<RawPortInfo> newPortInfo = new ArrayList<>();
 
             for (PortStatus current : currentPortStatus) {
                 RawPortInfo temp = new RawPortInfo(current.portName,
@@ -452,7 +445,6 @@
             message.what = MSG_UPDATE_PORTS;
             message.setData(bundle);
             portManager.mHandler.sendMessage(message);
-            return;
         }
 
 
@@ -467,7 +459,7 @@
                 return;
             }
 
-            ArrayList<RawPortInfo> newPortInfo = new ArrayList<RawPortInfo>();
+            ArrayList<RawPortInfo> newPortInfo = new ArrayList<>();
 
             for (PortStatus_1_1 current : currentPortStatus) {
                 RawPortInfo temp = new RawPortInfo(current.status.portName,
@@ -485,7 +477,6 @@
             message.what = MSG_UPDATE_PORTS;
             message.setData(bundle);
             portManager.mHandler.sendMessage(message);
-            return;
         }
 
         public void notifyRoleSwitchStatus(String portName, PortRole role, int retval) {
@@ -495,7 +486,7 @@
                 logAndPrint(Log.ERROR, pw, portName + " role switch failed");
             }
         }
-    };
+    }
 
     final class DeathRecipient implements HwBinder.DeathRecipient {
         public IndentingPrintWriter pw;
@@ -701,12 +692,7 @@
 
         // Guard against possible reentrance by posting the broadcast from the handler
         // instead of from within the critical section.
-        mHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
-            }
-        });
+        mHandler.post(() -> mContext.sendBroadcastAsUser(intent, UserHandle.ALL));
     }
 
     private static void logAndPrint(int priority, IndentingPrintWriter pw, String msg) {
diff --git a/services/usb/java/com/android/server/usb/UsbProfileGroupSettingsManager.java b/services/usb/java/com/android/server/usb/UsbProfileGroupSettingsManager.java
index 840ae22..ebb5a62 100644
--- a/services/usb/java/com/android/server/usb/UsbProfileGroupSettingsManager.java
+++ b/services/usb/java/com/android/server/usb/UsbProfileGroupSettingsManager.java
@@ -225,7 +225,7 @@
                 } else if ("serial-number".equals(name)) {
                     serialNumber = value;
                 } else {
-                    int intValue = -1;
+                    int intValue;
                     int radix = 10;
                     if (value != null && value.length() > 2 && value.charAt(0) == '0' &&
                         (value.charAt(1) == 'x' || value.charAt(1) == 'X')) {
@@ -388,9 +388,9 @@
                      (filter.mSerialNumber != null &&
                         mSerialNumber != null &&
                         !mSerialNumber.equals(filter.mSerialNumber))) {
-                    return(false);
+                    return false;
                 }
-                return(true);
+                return true;
             }
             if (obj instanceof UsbDevice) {
                 UsbDevice device = (UsbDevice)obj;
@@ -415,7 +415,7 @@
                             !mProductName.equals(device.getProductName())) ||
                         (device.getSerialNumber() != null &&
                             !mSerialNumber.equals(device.getSerialNumber()))) {
-                    return(false);
+                    return false;
                 }
                 return true;
             }
@@ -501,8 +501,7 @@
         public boolean matches(UsbAccessory acc) {
             if (mManufacturer != null && !acc.getManufacturer().equals(mManufacturer)) return false;
             if (mModel != null && !acc.getModel().equals(mModel)) return false;
-            if (mVersion != null && !acc.getVersion().equals(mVersion)) return false;
-            return true;
+            return !(mVersion != null && !acc.getVersion().equals(mVersion));
         }
 
         /**
@@ -517,8 +516,7 @@
                 return false;
             }
             if (mModel != null && !Objects.equals(accessory.mModel, mModel)) return false;
-            if (mVersion != null && !Objects.equals(accessory.mVersion, mVersion)) return false;
-            return true;
+            return !(mVersion != null && !Objects.equals(accessory.mVersion, mVersion));
         }
 
         @Override
@@ -624,13 +622,8 @@
         mPackageMonitor.register(context, null, UserHandle.ALL, true);
         mMtpNotificationManager = new MtpNotificationManager(
                 parentUserContext,
-                new MtpNotificationManager.OnOpenInAppListener() {
-                    @Override
-                    public void onOpenInApp(UsbDevice device) {
-                        resolveActivity(createDeviceAttachedIntent(device),
-                                device, false /* showMtpNotification */);
-                    }
-                });
+                device -> resolveActivity(createDeviceAttachedIntent(device),
+                        device, false /* showMtpNotification */));
     }
 
     /**
@@ -727,9 +720,7 @@
                         XmlUtils.nextElement(parser);
                     }
                 }
-            } catch (IOException e) {
-                Log.wtf(TAG, "Failed to read single-user settings", e);
-            } catch (XmlPullParserException e) {
+            } catch (IOException | XmlPullParserException e) {
                 Log.wtf(TAG, "Failed to read single-user settings", e);
             } finally {
                 IoUtils.closeQuietly(fis);
@@ -1015,8 +1006,8 @@
         }
     }
 
-    private final ArrayList<ResolveInfo> getDeviceMatchesLocked(UsbDevice device, Intent intent) {
-        ArrayList<ResolveInfo> matches = new ArrayList<ResolveInfo>();
+    private ArrayList<ResolveInfo> getDeviceMatchesLocked(UsbDevice device, Intent intent) {
+        ArrayList<ResolveInfo> matches = new ArrayList<>();
         List<ResolveInfo> resolveInfos = queryIntentActivitiesForAllProfiles(intent);
         int count = resolveInfos.size();
         for (int i = 0; i < count; i++) {
@@ -1029,9 +1020,9 @@
         return removeForwardIntentIfNotNeeded(preferHighPriority(matches));
     }
 
-    private final ArrayList<ResolveInfo> getAccessoryMatchesLocked(
+    private ArrayList<ResolveInfo> getAccessoryMatchesLocked(
             UsbAccessory accessory, Intent intent) {
-        ArrayList<ResolveInfo> matches = new ArrayList<ResolveInfo>();
+        ArrayList<ResolveInfo> matches = new ArrayList<>();
         List<ResolveInfo> resolveInfos = queryIntentActivitiesForAllProfiles(intent);
         int count = resolveInfos.size();
         for (int i = 0; i < count; i++) {
@@ -1402,7 +1393,7 @@
     void setDevicePackage(@NonNull UsbDevice device, @Nullable String packageName,
             @NonNull UserHandle user) {
         DeviceFilter filter = new DeviceFilter(device);
-        boolean changed = false;
+        boolean changed;
         synchronized (mLock) {
             if (packageName == null) {
                 changed = (mDevicePreferenceMap.remove(filter) != null);
@@ -1430,7 +1421,7 @@
     void setAccessoryPackage(@NonNull UsbAccessory accessory, @Nullable String packageName,
             @NonNull UserHandle user) {
         AccessoryFilter filter = new AccessoryFilter(accessory);
-        boolean changed = false;
+        boolean changed;
         synchronized (mLock) {
             if (packageName == null) {
                 changed = (mAccessoryPreferenceMap.remove(filter) != null);
@@ -1460,8 +1451,7 @@
         UserPackage userPackage = new UserPackage(packageName, user);
         synchronized (mLock) {
             if (mDevicePreferenceMap.values().contains(userPackage)) return true;
-            if (mAccessoryPreferenceMap.values().contains(userPackage)) return true;
-            return false;
+            return mAccessoryPreferenceMap.values().contains(userPackage);
         }
     }
 
@@ -1493,9 +1483,9 @@
         synchronized (mLock) {
             if (mDevicePreferenceMap.containsValue(userPackage)) {
                 // make a copy of the key set to avoid ConcurrentModificationException
-                Object[] keys = mDevicePreferenceMap.keySet().toArray();
+                DeviceFilter[] keys = mDevicePreferenceMap.keySet().toArray(new DeviceFilter[0]);
                 for (int i = 0; i < keys.length; i++) {
-                    Object key = keys[i];
+                    DeviceFilter key = keys[i];
                     if (userPackage.equals(mDevicePreferenceMap.get(key))) {
                         mDevicePreferenceMap.remove(key);
                         cleared = true;
@@ -1504,9 +1494,10 @@
             }
             if (mAccessoryPreferenceMap.containsValue(userPackage)) {
                 // make a copy of the key set to avoid ConcurrentModificationException
-                Object[] keys = mAccessoryPreferenceMap.keySet().toArray();
+                AccessoryFilter[] keys =
+                        mAccessoryPreferenceMap.keySet().toArray(new AccessoryFilter[0]);
                 for (int i = 0; i < keys.length; i++) {
-                    Object key = keys[i];
+                    AccessoryFilter key = keys[i];
                     if (userPackage.equals(mAccessoryPreferenceMap.get(key))) {
                         mAccessoryPreferenceMap.remove(key);
                         cleared = true;
diff --git a/services/usb/java/com/android/server/usb/UsbService.java b/services/usb/java/com/android/server/usb/UsbService.java
index 61e1e8f..e4fcea7 100644
--- a/services/usb/java/com/android/server/usb/UsbService.java
+++ b/services/usb/java/com/android/server/usb/UsbService.java
@@ -134,25 +134,25 @@
 
         onSwitchUser(UserHandle.USER_SYSTEM);
 
+        BroadcastReceiver receiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                final String action = intent.getAction();
+                if (DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED
+                        .equals(action)) {
+                    if (mDeviceManager != null) {
+                        mDeviceManager.updateUserRestrictions();
+                    }
+                }
+            }
+        };
+
         final IntentFilter filter = new IntentFilter();
         filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
         filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
-        mContext.registerReceiver(mReceiver, filter, null, null);
+        mContext.registerReceiver(receiver, filter, null, null);
     }
 
-    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            final String action = intent.getAction();
-            if (DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED
-                    .equals(action)) {
-                if (mDeviceManager != null) {
-                    mDeviceManager.updateUserRestrictions();
-                }
-            }
-        }
-    };
-
     /**
      * Set new {@link #mCurrentUserId} and propagate it to other modules.
      *
@@ -681,7 +681,7 @@
         }
     }
 
-    private static final String removeLastChar(String value) {
+    private static String removeLastChar(String value) {
         return value.substring(0, value.length() - 1);
     }
 }
diff --git a/services/usb/java/com/android/server/usb/UsbSettingsManager.java b/services/usb/java/com/android/server/usb/UsbSettingsManager.java
index 7a55be4..c7e5998d 100644
--- a/services/usb/java/com/android/server/usb/UsbSettingsManager.java
+++ b/services/usb/java/com/android/server/usb/UsbSettingsManager.java
@@ -28,6 +28,7 @@
 import android.os.UserManager;
 import android.util.Slog;
 import android.util.SparseArray;
+
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.IndentingPrintWriter;
 
diff --git a/services/usb/java/com/android/server/usb/UsbUserSettingsManager.java b/services/usb/java/com/android/server/usb/UsbUserSettingsManager.java
index 4a34ece..96c5211 100644
--- a/services/usb/java/com/android/server/usb/UsbUserSettingsManager.java
+++ b/services/usb/java/com/android/server/usb/UsbUserSettingsManager.java
@@ -32,6 +32,7 @@
 import android.os.UserHandle;
 import android.util.Slog;
 import android.util.SparseBooleanArray;
+
 import com.android.internal.util.IndentingPrintWriter;
 
 import java.util.HashMap;
@@ -48,10 +49,10 @@
 
     // Temporary mapping USB device name to list of UIDs with permissions for the device
     private final HashMap<String, SparseBooleanArray> mDevicePermissionMap =
-            new HashMap<String, SparseBooleanArray>();
+            new HashMap<>();
     // Temporary mapping UsbAccessory to list of UIDs with permissions for the accessory
     private final HashMap<UsbAccessory, SparseBooleanArray> mAccessoryPermissionMap =
-            new HashMap<UsbAccessory, SparseBooleanArray>();
+            new HashMap<>();
 
     private final Object mLock = new Object();
 
diff --git a/services/usb/java/com/android/server/usb/descriptors/ByteStream.java b/services/usb/java/com/android/server/usb/descriptors/ByteStream.java
index d678931..1e823b6 100644
--- a/services/usb/java/com/android/server/usb/descriptors/ByteStream.java
+++ b/services/usb/java/com/android/server/usb/descriptors/ByteStream.java
@@ -15,7 +15,11 @@
  */
 package com.android.server.usb.descriptors;
 
+// Framework builds and Android Studio builds use different imports for NonNull.
+// This one for Framework builds
 import android.annotation.NonNull;
+// this one in the AndroidStudio project
+// import android.support.annotation.NonNull;
 
 /**
  * @hide
@@ -23,7 +27,7 @@
  * but with the capability to "back up" in situations where the parser discovers that a
  * UsbDescriptor has overrun its length.
  */
-public class ByteStream {
+public final class ByteStream {
     private static final String TAG = "ByteStream";
 
     /** The byte array being wrapped */
@@ -104,6 +108,20 @@
     }
 
     /**
+     * @return the next byte from the stream and advances the stream and the read count. Note
+     * that this is an unsigned byte encoded in a Java int.
+     * @throws IndexOutOfBoundsException
+     */
+    public int getUnsignedByte() {
+        if (available() > 0) {
+            mReadCount++;
+            return mBytes[mIndex++] & 0x000000FF;
+        } else {
+            throw new IndexOutOfBoundsException();
+        }
+    }
+
+    /**
      * Reads 2 bytes in *little endian format* from the stream and composes a 16-bit integer.
      * As we are storing the 2-byte value in a 4-byte integer, the upper 2 bytes are always
      * 0, essentially making the returned value *unsigned*.
@@ -111,11 +129,11 @@
      * next 2 bytes in the stream.
      * @throws IndexOutOfBoundsException
      */
-    public int unpackUsbWord() {
+    public int unpackUsbShort() {
         if (available() >= 2) {
-            int b0 = getByte();
-            int b1 = getByte();
-            return ((b1 << 8) & 0x0000FF00) | (b0 & 0x000000FF);
+            int b0 = getUnsignedByte();
+            int b1 = getUnsignedByte();
+            return (b1 << 8) | b0;
         } else {
             throw new IndexOutOfBoundsException();
         }
@@ -131,16 +149,32 @@
      */
     public int unpackUsbTriple() {
         if (available() >= 3) {
-            int b0 = getByte();
-            int b1 = getByte();
-            int b2 = getByte();
-            return ((b2 << 16) & 0x00FF0000) | ((b1 << 8) & 0x0000FF00) | (b0 & 0x000000FF);
+            int b0 = getUnsignedByte();
+            int b1 = getUnsignedByte();
+            int b2 = getUnsignedByte();
+            return (b2 << 16) | (b1 << 8) | b0;
         } else {
             throw new IndexOutOfBoundsException();
         }
     }
 
     /**
+     * Reads 4 bytes in *little endian format* from the stream and composes a 32-bit integer.
+     * @return The 32-bit integer encoded by the next 4 bytes in the stream.
+     * @throws IndexOutOfBoundsException
+     */
+    public int unpackUsbInt() {
+        if (available() >= 4) {
+            int b0 = getUnsignedByte();
+            int b1 = getUnsignedByte();
+            int b2 = getUnsignedByte();
+            int b3 = getUnsignedByte();
+            return (b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
+        } else {
+            throw new IndexOutOfBoundsException();
+        }
+    }
+    /**
      * Advances the logical position in the stream. Affects the running count also.
      * @param numBytes The number of bytes to advance.
      * @throws IndexOutOfBoundsException
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb10ACHeader.java b/services/usb/java/com/android/server/usb/descriptors/Usb10ACHeader.java
new file mode 100644
index 0000000..a35b463
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb10ACHeader.java
@@ -0,0 +1,93 @@
+/*
+ * 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.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Interface Header.
+ * see audio10.pdf section 4.3.2
+ */
+public final class Usb10ACHeader extends UsbACHeaderInterface {
+    private static final String TAG = "Usb10ACHeader";
+
+    private byte mNumInterfaces = 0; // 7:1 The number of AudioStreaming and MIDIStreaming
+                                     // interfaces in the Audio Interface Collection to which this
+                                     // AudioControl interface belongs: n
+    private byte[] mInterfaceNums = null;   // 8:n List of Audio/MIDI streaming interface
+                                            // numbers associate with this endpoint
+    private byte mControls;                 // Vers 2.0 thing
+
+    public Usb10ACHeader(int length, byte type, byte subtype, byte subclass, int spec) {
+        super(length, type, subtype, subclass, spec);
+    }
+
+    public byte getNumInterfaces() {
+        return mNumInterfaces;
+    }
+
+    public byte[] getInterfaceNums() {
+        return mInterfaceNums;
+    }
+
+    public byte getControls() {
+        return mControls;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+
+        mTotalLength = stream.unpackUsbShort();
+        if (mADCRelease >= 0x200) {
+            mControls = stream.getByte();
+        } else {
+            mNumInterfaces = stream.getByte();
+            mInterfaceNums = new byte[mNumInterfaces];
+            for (int index = 0; index < mNumInterfaces; index++) {
+                mInterfaceNums[index] = stream.getByte();
+            }
+        }
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        int numInterfaces = getNumInterfaces();
+        StringBuilder sb = new StringBuilder();
+        sb.append("" + numInterfaces + " Interfaces");
+        if (numInterfaces > 0) {
+            sb.append(" [");
+            byte[] interfaceNums = getInterfaceNums();
+            if (interfaceNums != null) {
+                for (int index = 0; index < numInterfaces; index++) {
+                    sb.append("" + interfaceNums[index]);
+                    if (index < numInterfaces - 1) {
+                        sb.append(" ");
+                    }
+                }
+            }
+            sb.append("]");
+        }
+        canvas.writeListItem(sb.toString());
+        canvas.writeListItem("Controls: " + ReportCanvas.getHexString(getControls()));
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb10ACInputTerminal.java b/services/usb/java/com/android/server/usb/descriptors/Usb10ACInputTerminal.java
new file mode 100644
index 0000000..2363c4d
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb10ACInputTerminal.java
@@ -0,0 +1,78 @@
+/*
+ * 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.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Input Terminal interface.
+ * see audio10.pdf section 4.3.2.1
+ */
+public final class Usb10ACInputTerminal extends UsbACTerminal {
+    private static final String TAG = "Usb10ACInputTerminal";
+
+    private byte mNrChannels;       // 7:1 1 Channel (0x01)
+                                    // Number of logical output channels in the
+                                    // Terminal’s output audio channel cluster
+    private int mChannelConfig;     // 8:2 Mono (0x0000)
+    private byte mChannelNames;     // 10:1 Unused (0x00)
+    private byte mTerminal;         // 11:1 Unused (0x00)
+
+    public Usb10ACInputTerminal(int length, byte type, byte subtype, byte subclass) {
+        super(length, type, subtype, subclass);
+    }
+
+    public byte getNrChannels() {
+        return mNrChannels;
+    }
+
+    public int getChannelConfig() {
+        return mChannelConfig;
+    }
+
+    public byte getChannelNames() {
+        return mChannelNames;
+    }
+
+    public byte getTerminal() {
+        return mTerminal;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        super.parseRawDescriptors(stream);
+
+        mNrChannels = stream.getByte();
+        mChannelConfig = stream.unpackUsbShort();
+        mChannelNames = stream.getByte();
+        mTerminal = stream.getByte();
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Associated Terminal: "
+                + ReportCanvas.getHexString(getAssocTerminal()));
+        canvas.writeListItem("" + getNrChannels() + " Chans. Config: "
+                + ReportCanvas.getHexString(getChannelConfig()));
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb10ACMixerUnit.java b/services/usb/java/com/android/server/usb/descriptors/Usb10ACMixerUnit.java
new file mode 100644
index 0000000..d348664
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb10ACMixerUnit.java
@@ -0,0 +1,108 @@
+/*
+ * 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.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Mixer Interface.
+ * see audio10.pdf section 4.3.2.3
+ */
+public final class Usb10ACMixerUnit extends UsbACMixerUnit {
+    private static final String TAG = "Usb10ACMixerUnit";
+
+    private int mChannelConfig; // Spatial location of output channels
+    private byte mChanNameID;   // First channel name string descriptor ID
+    private byte[] mControls;   // bitmasks of which controls are present for each channel
+    private byte mNameID;       // string descriptor ID of mixer name
+
+    public Usb10ACMixerUnit(int length, byte type, byte subtype, byte subClass) {
+        super(length, type, subtype, subClass);
+    }
+
+    public int getChannelConfig() {
+        return mChannelConfig;
+    }
+
+    public byte getChanNameID() {
+        return mChanNameID;
+    }
+
+    public byte[] getControls() {
+        return mControls;
+    }
+
+    public byte getNameID() {
+        return mNameID;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        super.parseRawDescriptors(stream);
+
+        mChannelConfig = stream.unpackUsbShort();
+        mChanNameID = stream.getByte();
+
+        int controlArraySize = calcControlArraySize(mNumInputs, mNumOutputs);
+        mControls = new byte[controlArraySize];
+        for (int index = 0; index < controlArraySize; index++) {
+            mControls[index] = stream.getByte();
+        }
+
+        mNameID = stream.getByte();
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.writeParagraph("Mixer Unit", false);
+        canvas.openList();
+
+        canvas.writeListItem("Unit ID: " + ReportCanvas.getHexString(getUnitID()));
+        byte numInputs = getNumInputs();
+        byte[] inputIDs = getInputIDs();
+        canvas.openListItem();
+        canvas.write("Num Inputs: " + numInputs + " [");
+        for (int input = 0; input < numInputs; input++) {
+            canvas.write("" + ReportCanvas.getHexString(inputIDs[input]));
+            if (input < numInputs - 1) {
+                canvas.write(" ");
+            }
+        }
+        canvas.write("]");
+        canvas.closeListItem();
+
+        canvas.writeListItem("Num Outputs: " + getNumOutputs());
+        canvas.writeListItem("Channel Config: " + ReportCanvas.getHexString(getChannelConfig()));
+
+        byte[] controls = getControls();
+        canvas.openListItem();
+        canvas.write("Controls: " + controls.length + " [");
+        for (int ctrl = 0; ctrl < controls.length; ctrl++) {
+            canvas.write("" + controls[ctrl]);
+            if (ctrl < controls.length - 1) {
+                canvas.write(" ");
+            }
+        }
+        canvas.write("]");
+        canvas.closeListItem();
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb10ACOutputTerminal.java b/services/usb/java/com/android/server/usb/descriptors/Usb10ACOutputTerminal.java
new file mode 100644
index 0000000..9f2f09e
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb10ACOutputTerminal.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.server.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Output Terminal Interface.
+ * see audio10.pdf section 4.3.2.2
+ */
+public final class Usb10ACOutputTerminal extends UsbACTerminal {
+    private static final String TAG = "Usb10ACOutputTerminal";
+
+    private byte mSourceID;         // 7:1 From Input Terminal. (0x01)
+    private byte mTerminal;         // 8:1 Unused.
+
+    public Usb10ACOutputTerminal(int length, byte type, byte subtype, byte subClass) {
+        super(length, type, subtype, subClass);
+    }
+
+    public byte getSourceID() {
+        return mSourceID;
+    }
+
+    public byte getTerminal() {
+        return mTerminal;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        super.parseRawDescriptors(stream);
+
+        mSourceID = stream.getByte();
+        mTerminal = stream.getByte();
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Source ID: " + ReportCanvas.getHexString(getSourceID()));
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb10ASFormatI.java b/services/usb/java/com/android/server/usb/descriptors/Usb10ASFormatI.java
new file mode 100644
index 0000000..1523bb5
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb10ASFormatI.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 com.android.server.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Format I interface.
+ * see Frmts10.pdf section 2.2
+ */
+public final class Usb10ASFormatI extends UsbASFormat {
+    private static final String TAG = "Usb10ASFormatI";
+
+    private byte mNumChannels;      // 4:1
+    private byte mSubframeSize;     // 5:1 frame size in bytes
+    private byte mBitResolution;    // 6:1 sample size in bits
+    private byte mSampleFreqType;   // 7:1
+    private int[] mSampleRates;     // if mSamFreqType == 0, there will be 2 values: the
+                                    // min & max rates otherwise mSamFreqType rates.
+                                    // All 3-byte values. All rates in Hz
+
+    public Usb10ASFormatI(int length, byte type, byte subtype, byte formatType, byte subclass) {
+        super(length, type, subtype, formatType, subclass);
+    }
+
+    public byte getNumChannels() {
+        return mNumChannels;
+    }
+
+    public byte getSubframeSize() {
+        return mSubframeSize;
+    }
+
+    public byte getBitResolution() {
+        return mBitResolution;
+    }
+
+    public byte getSampleFreqType() {
+        return mSampleFreqType;
+    }
+
+    @Override
+    public int[] getSampleRates() {
+        return mSampleRates;
+    }
+
+    @Override
+    public int[] getBitDepths() {
+        int[] depths = {mBitResolution};
+        return depths;
+    }
+
+    @Override
+    public int[] getChannelCounts() {
+        int[] counts = {mNumChannels};
+        return counts;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        mNumChannels = stream.getByte();
+        mSubframeSize = stream.getByte();
+        mBitResolution = stream.getByte();
+        mSampleFreqType = stream.getByte();
+        if (mSampleFreqType == 0) {
+            mSampleRates = new int[2];
+            mSampleRates[0] = stream.unpackUsbTriple();
+            mSampleRates[1] = stream.unpackUsbTriple();
+        } else {
+            mSampleRates = new int[mSampleFreqType];
+            for (int index = 0; index < mSampleFreqType; index++) {
+                mSampleRates[index] = stream.unpackUsbTriple();
+            }
+        }
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("" + getNumChannels() + " Channels.");
+        canvas.writeListItem("Subframe Size: " + getSubframeSize());
+        canvas.writeListItem("Bit Resolution: " + getBitResolution());
+        byte sampleFreqType = getSampleFreqType();
+        int[] sampleRates = getSampleRates();
+        canvas.writeListItem("Sample Freq Type: " + sampleFreqType);
+        canvas.openList();
+        if (sampleFreqType == 0) {
+            canvas.writeListItem("min: " + sampleRates[0]);
+            canvas.writeListItem("max: " + sampleRates[1]);
+        } else {
+            for (int index = 0; index < sampleFreqType; index++) {
+                canvas.writeListItem("" + sampleRates[index]);
+            }
+        }
+        canvas.closeList();
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb10ASFormatII.java b/services/usb/java/com/android/server/usb/descriptors/Usb10ASFormatII.java
new file mode 100644
index 0000000..b1e7680
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb10ASFormatII.java
@@ -0,0 +1,99 @@
+/*
+ * 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.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Format II interface.
+ * see Frmts10.pdf section 2.3
+ */
+public final class Usb10ASFormatII extends UsbASFormat {
+    private static final String TAG = "Usb10ASFormatII";
+
+    private int mMaxBitRate; // 4:2 Indicates the maximum number of bits per second this
+                            // interface can handle. Expressed in kbits/s.
+    private int mSamplesPerFrame;   // 6:2 Indicates the number of PCM audio samples contained
+                                    // in one encoded audio frame.
+    private byte mSamFreqType;  // Indicates how the sampling frequency can be programmed:
+                                // 0: Continuous sampling frequency
+                                // 1..255: The number of discrete sampling frequencies supported
+                                // by the isochronous data endpoint of the AudioStreaming
+                                // interface (ns)
+    private int[] mSampleRates; // if mSamFreqType == 0, there will be 2 values:
+                                // the min & max rates. otherwise mSamFreqType rates.
+                                // All 3-byte values. All rates in Hz
+
+    public Usb10ASFormatII(int length, byte type, byte subtype, byte formatType, byte subclass) {
+        super(length, type, subtype, formatType, subclass);
+    }
+
+    public int getMaxBitRate() {
+        return mMaxBitRate;
+    }
+
+    public int getSamplesPerFrame() {
+        return mSamplesPerFrame;
+    }
+
+    public byte getSamFreqType() {
+        return mSamFreqType;
+    }
+
+    public int[] getSampleRates() {
+        return mSampleRates;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        mMaxBitRate = stream.unpackUsbShort();
+        mSamplesPerFrame = stream.unpackUsbShort();
+        mSamFreqType = stream.getByte();
+        int numFreqs = mSamFreqType == 0 ? 2 : mSamFreqType;
+        mSampleRates = new int[numFreqs];
+        for (int index = 0; index < numFreqs; index++) {
+            mSampleRates[index] = stream.unpackUsbTriple();
+        }
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Max Bit Rate: " + getMaxBitRate());
+        canvas.writeListItem("Samples Per Frame: " + getMaxBitRate());
+        byte sampleFreqType = getSamFreqType();
+        int[] sampleRates = getSampleRates();
+        canvas.writeListItem("Sample Freq Type: " + sampleFreqType);
+        canvas.openList();
+        if (sampleFreqType == 0) {
+            canvas.writeListItem("min: " + sampleRates[0]);
+            canvas.writeListItem("max: " + sampleRates[1]);
+        } else {
+            for (int index = 0; index < sampleFreqType; index++) {
+                canvas.writeListItem("" + sampleRates[index]);
+            }
+        }
+        canvas.closeList();
+
+        canvas.closeList();
+    }
+
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb10ASGeneral.java b/services/usb/java/com/android/server/usb/descriptors/Usb10ASGeneral.java
new file mode 100644
index 0000000..2d4f604
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb10ASGeneral.java
@@ -0,0 +1,73 @@
+/*
+ * 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.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+import com.android.server.usb.descriptors.report.UsbStrings;
+
+/**
+ * @hide
+ * An audio class-specific General interface.
+ * see audio10.pdf section 4.5.2
+ */
+public final class Usb10ASGeneral extends UsbACInterface {
+    private static final String TAG = "Usb10ASGeneral";
+
+    // audio10.pdf - section 4.5.2
+    private byte mTerminalLink; // 3:1 The Terminal ID of the Terminal to which the endpoint
+                                // of this interface is connected.
+    private byte mDelay;        // 4:1 Delay introduced by the data path (see Section 3.4,
+                                // “Inter Channel Synchronization”). Expressed in number of frames.
+    private int mFormatTag;     // 5:2 The Audio Data Format that has to be used to communicate
+                                // with this interface.
+
+    public Usb10ASGeneral(int length, byte type, byte subtype, byte subclass) {
+        super(length, type, subtype, subclass);
+    }
+
+    public byte getTerminalLink() {
+        return mTerminalLink;
+    }
+
+    public byte getDelay() {
+        return mDelay;
+    }
+
+    public int getFormatTag() {
+        return mFormatTag;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        mTerminalLink = stream.getByte();
+        mDelay = stream.getByte();
+        mFormatTag = stream.unpackUsbShort();
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Delay: " + mDelay);
+        canvas.writeListItem("Terminal Link: " + mTerminalLink);
+        canvas.writeListItem("Format: " + UsbStrings.getAudioFormatName(mFormatTag) + " - "
+                + ReportCanvas.getHexString(mFormatTag));
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb20ACHeader.java b/services/usb/java/com/android/server/usb/descriptors/Usb20ACHeader.java
new file mode 100644
index 0000000..eefae3d
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb20ACHeader.java
@@ -0,0 +1,62 @@
+/*
+ * 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.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Header descriptor.
+ * see Audio20.pdf section 4.7.2 Class-Specific AC Interface Descriptor
+ */
+public final class Usb20ACHeader extends UsbACHeaderInterface {
+    private static final String TAG = "Usb20ACHeader";
+
+    private byte mCategory;     // 5:1 Constant, indicating the primary use of this audio function.
+                                // See audio20.pdf Appendix A.7, “Audio Function Category Codes.”
+    private byte mControls;     // 8:1 See audio20.pdf Table 4-5.
+
+    public Usb20ACHeader(int length, byte type, byte subtype, byte subclass, int spec) {
+        super(length, type, subtype, subclass, spec);
+    }
+
+    public byte getCategory() {
+        return mCategory;
+    }
+
+    public byte getControls() {
+        return mControls;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        mCategory = stream.getByte();
+        mTotalLength = stream.unpackUsbShort();
+        mControls = stream.getByte();
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Category: " + ReportCanvas.getHexString(getCategory()));
+        canvas.writeListItem("Controls: " + ReportCanvas.getHexString(getControls()));
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb20ACInputTerminal.java b/services/usb/java/com/android/server/usb/descriptors/Usb20ACInputTerminal.java
new file mode 100644
index 0000000..3e2ac39
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb20ACInputTerminal.java
@@ -0,0 +1,86 @@
+/*
+ * 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.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Input Terminal interface.
+ * see Audio20.pdf section 3.13.2 Input Terminal
+ */
+public final class Usb20ACInputTerminal extends UsbACTerminal {
+    private static final String TAG = "Usb20ACInputTerminal";
+
+    // See Audio20.pdf - Table 4-9
+    // Always 17 bytes
+    private byte mClkSourceID;  // 7:1 - ID of the Clock Entity to which this Input
+                                // Terminal is connected.
+    private byte mNumChannels;  // 8:1 - Number of logical output channels in the
+                                // Terminal’s output audio channel cluster.
+    private int mChanConfig;    // 9:4 - Describes the spatial location of the
+                                // logical channels.
+    private byte mChanNames;    // 13:1 - Index of a string descriptor, describing the
+                                // name of the first logical channel.
+    private int mControls;      // 14:2 - Bitmask (see Audio20.pdf Table 4-9)
+    private byte mTerminalName; // 16:1 - Index of a string descriptor, describing the
+                                // Input Terminal.
+
+    public Usb20ACInputTerminal(int length, byte type, byte subtype, byte subclass) {
+        super(length, type, subtype, subclass);
+    }
+
+    public byte getClkSourceID() {
+        return mClkSourceID;
+    }
+
+    public byte getNumChannels() {
+        return mNumChannels;
+    }
+
+    public int getChanConfig() {
+        return mChanConfig;
+    }
+
+    public int getControls() {
+        return mControls;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        super.parseRawDescriptors(stream);
+
+        mClkSourceID = stream.getByte();
+        mNumChannels = stream.getByte();
+        mChanConfig = stream.unpackUsbInt();
+        mChanNames = stream.getByte();
+        mControls = stream.unpackUsbShort();
+        mTerminalName = stream.getByte();
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Clock Source: " + getClkSourceID());
+        canvas.writeListItem("" + getNumChannels() + " Channels. Config: "
+                + ReportCanvas.getHexString(getChanConfig()));
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb20ACMixerUnit.java b/services/usb/java/com/android/server/usb/descriptors/Usb20ACMixerUnit.java
new file mode 100644
index 0000000..1b267a6
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb20ACMixerUnit.java
@@ -0,0 +1,56 @@
+/*
+ * 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.usb.descriptors;
+
+/**
+ * @hide
+ * An audio class-specific Mixer Unit interface.
+ * see Audio20.pdf section 4.7.2.6 Mixer Unit Descriptor
+ */
+public final class Usb20ACMixerUnit extends UsbACMixerUnit {
+    private static final String TAG = "Usb20ACMixerUnit";
+
+    private int mChanConfig;    // 6+p:4 Describes the spatial location of the
+                                // logical channels.
+    private byte mChanNames;    // 10+p:1 Index of a string descriptor, describing the
+                                // name of the first logical channel.
+    private byte[] mControls;   // 11+p:N bitmasks of which controls are present for each channel
+                                // for N, see UsbACMixerUnit.calcControlArraySize()
+    private byte mControlsMask; // 11+p+N:1 bitmasks of which controls are present for each channel
+    private byte mNameID;       // 12+p+N:1 Index of a string descriptor, describing the
+                                // Mixer Unit.
+
+    public Usb20ACMixerUnit(int length, byte type, byte subtype, byte subClass) {
+        super(length, type, subtype, subClass);
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        super.parseRawDescriptors(stream);
+
+        mChanConfig = stream.unpackUsbInt();
+        mChanNames = stream.getByte();
+        int controlArraySize = calcControlArraySize(mNumInputs, mNumOutputs);
+        mControls = new byte[controlArraySize];
+        for (int index = 0; index < controlArraySize; index++) {
+            mControls[index] = stream.getByte();
+        }
+        mControlsMask = stream.getByte();
+        mNameID = stream.getByte();
+
+        return mLength;
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb20ACOutputTerminal.java b/services/usb/java/com/android/server/usb/descriptors/Usb20ACOutputTerminal.java
new file mode 100644
index 0000000..67478aa
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb20ACOutputTerminal.java
@@ -0,0 +1,79 @@
+/*
+ * 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.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Output Terminal interface.
+ * see Audio20.pdf section 3.13.3 Output Terminal
+ */
+public final class Usb20ACOutputTerminal extends UsbACTerminal {
+    private static final String TAG = "Usb20ACOutputTerminal";
+
+    // Audio20.pdf - section 4.7.2.5, Table  4-10
+    // Always 12 bytes
+    private byte mSourceID;     // 7:1 - ID of the Unit or Terminal to which this
+                                // Terminal is connected.
+    private byte mClkSoureID;   // 8:1 - ID of the Clock Entity to which this Output
+    // Terminal is connected.
+    private int mControls;      // 9:2 - see Audio20.pdf Table 4-10
+    private byte mTerminalID;   // 11:1 - Index of a string descriptor, describing the
+
+    public Usb20ACOutputTerminal(int length, byte type, byte subtype, byte subClass) {
+        super(length, type, subtype, subClass);
+    }
+
+    public byte getSourceID() {
+        return mSourceID;
+    }
+
+    public byte getClkSourceID() {
+        return mClkSoureID;
+    }
+
+    public int getControls() {
+        return mControls;
+    }
+
+    public byte getTerminalID() {
+        return mTerminalID;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        super.parseRawDescriptors(stream);
+
+        mSourceID = stream.getByte();
+        mClkSoureID = stream.getByte();
+        mControls = stream.unpackUsbShort();
+        mTerminalID = stream.getByte();
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Clock Source ID: " + getClkSourceID());
+        canvas.writeListItem("Controls: " + ReportCanvas.getHexString(getControls()));
+        canvas.writeListItem("Terminal Name ID: " + getTerminalID());
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb20ASFormatI.java b/services/usb/java/com/android/server/usb/descriptors/Usb20ASFormatI.java
new file mode 100644
index 0000000..c031996
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb20ASFormatI.java
@@ -0,0 +1,69 @@
+/*
+ * 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.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Format I interface.
+ * see Frmts20.pdf section 2.3.1.6 Type I Format Type Descriptor
+ */
+public final class Usb20ASFormatI extends UsbASFormat {
+    private static final String TAG = "Usb20ASFormatI";
+
+    // Frmts20.pdf Table 2-2: Type I Format Type Descriptor
+    private byte mSubSlotSize;      // 4:1 The number of bytes occupied by one
+                                    // audio subslot. Can be 1, 2, 3 or 4.
+    private byte mBitResolution;    // 5:1 The number of effectively used bits from
+                                    // the available bits in an audio subslot.
+
+    public Usb20ASFormatI(int length, byte type, byte subtype, byte formatType, byte subclass) {
+        super(length, type, subtype, formatType, subclass);
+    }
+
+    /**
+     * TBD
+     */
+    public byte getSubSlotSize() {
+        return mSubSlotSize;
+    }
+
+    /**
+     * TBD
+     */
+    public byte getBitResolution() {
+        return mBitResolution;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        mSubSlotSize = stream.getByte();
+        mBitResolution = stream.getByte();
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Subslot Size: " + getSubSlotSize());
+        canvas.writeListItem("Bit Resolution: " + getBitResolution());
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb20ASFormatII.java b/services/usb/java/com/android/server/usb/descriptors/Usb20ASFormatII.java
new file mode 100644
index 0000000..dc44ff0
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb20ASFormatII.java
@@ -0,0 +1,72 @@
+/*
+ * 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.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Format II interface.
+ * see Frmts20.pdf section 2.3.2.6 Type II Format Type Descriptor
+ */
+public final class Usb20ASFormatII extends UsbASFormat {
+    private static final String TAG = "Usb20ASFormatII";
+
+    // Frmts20.pdf Table 2-3: Type II Format Type Descriptor
+    private int mMaxBitRate;    // 4:2 Indicates the maximum number of bits per
+                                // second this interface can handle in kbits/s.
+    private int mSlotsPerFrame; // 6:2 Indicates the number of PCM audio slots
+                                // contained in one encoded audio frame.
+
+    /**
+     * TBD
+     */
+    public Usb20ASFormatII(int length, byte type, byte subtype, byte formatType, byte subclass) {
+        super(length, type, subtype, formatType, subclass);
+    }
+
+    /**
+     * TBD
+     */
+    public int getmaxBitRate() {
+        return mMaxBitRate;
+    }
+
+    /**
+     * TBD
+     */
+    public int getSlotsPerFrame() {
+        return mSlotsPerFrame;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        mMaxBitRate = stream.unpackUsbShort();
+        mSlotsPerFrame = stream.unpackUsbShort();
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Max Bit Rate: " + getmaxBitRate());
+        canvas.writeListItem("slots Per Frame: " + getSlotsPerFrame());
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb20ASFormatIIEx.java b/services/usb/java/com/android/server/usb/descriptors/Usb20ASFormatIIEx.java
new file mode 100644
index 0000000..d7dfba3
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb20ASFormatIIEx.java
@@ -0,0 +1,78 @@
+/*
+ * 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.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Format II interface.
+ * see Frmts20.pdf section 2.4.2.1 Extended Type II Format Type Descriptor
+ */
+public final class Usb20ASFormatIIEx extends UsbASFormat {
+    private static final String TAG = "Usb20ASFormatIIEx";
+
+    // Frmts20.pdf Table 2-7: Extended Type II Format Type Descriptor
+    private int mMaxBitRate;    // 4:2 Indicates the maximum number of bits per
+                                // second this interface can handle in kbits/s
+    private int mSamplesPerFrame;   // 6:2 Indicates the number of PCM audio
+                                    // samples contained in one encoded audio frame.
+    private byte mHeaderLength;     // 8:1 Size of the Packet Header, in bytes.
+    private byte mSidebandProtocol; // 9:1 Constant, identifying the Side Band
+                                    // Protocol used for the Packet Header content.
+
+    public Usb20ASFormatIIEx(int length, byte type, byte subtype, byte formatType, byte subclass) {
+        super(length, type, subtype, formatType, subclass);
+    }
+
+    public int getMaxBitRate() {
+        return mMaxBitRate;
+    }
+
+    public int getSamplesPerFrame() {
+        return mSamplesPerFrame;
+    }
+
+    public byte getHeaderLength() {
+        return mHeaderLength;
+    }
+
+    public byte getSidebandProtocol() {
+        return mSidebandProtocol;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        mMaxBitRate = stream.unpackUsbShort();
+        mSamplesPerFrame = stream.unpackUsbShort();
+        mHeaderLength = stream.getByte();
+        mSidebandProtocol = stream.getByte();
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Max Bit Rate: " + getMaxBitRate());
+        canvas.writeListItem("Samples Per Frame: " + getSamplesPerFrame());
+        canvas.writeListItem("Header Length: " + getHeaderLength());
+        canvas.writeListItem("Sideband Protocol: " + getSidebandProtocol());
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb20ASFormatIII.java b/services/usb/java/com/android/server/usb/descriptors/Usb20ASFormatIII.java
new file mode 100644
index 0000000..b44a216
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb20ASFormatIII.java
@@ -0,0 +1,63 @@
+/*
+ * 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.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Format III interface.
+ * see Frmts20.pdf section 2.3.1.6 2.3.3.1 Type III Format Type Descriptor
+ */
+public final class Usb20ASFormatIII extends UsbASFormat {
+    private static final String TAG = "Usb20ASFormatIII";
+
+    // frmts20.pdf Table 2-4: Type III Format Type Descriptor
+    private byte mSubslotSize;      // 4:1 The number of bytes occupied by one
+                                    // audio subslot. Must be set to two.
+    private byte mBitResolution;    // 5:1 The number of effectively used bits from
+                                    // the available bits in an audio subframe.
+
+    public Usb20ASFormatIII(int length, byte type, byte subtype, byte formatType, byte subclass) {
+        super(length, type, subtype, formatType, subclass);
+    }
+
+    public byte getSubslotSize() {
+        return mSubslotSize;
+    }
+
+    public byte getBitResolution() {
+        return mBitResolution;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+        mSubslotSize = stream.getByte();
+        mBitResolution = stream.getByte();
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Subslot Size: " + getSubslotSize());
+        canvas.writeListItem("Bit Resolution: " + getBitResolution());
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/Usb20ASGeneral.java b/services/usb/java/com/android/server/usb/descriptors/Usb20ASGeneral.java
new file mode 100644
index 0000000..18d48a0
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/Usb20ASGeneral.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.server.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * Audio20.pdf - 4.9.2 Class-Specific AS Interface Descriptor
+ * 16 bytes
+ */
+public final class Usb20ASGeneral extends UsbACInterface {
+    private static final String TAG = "Usb20ASGeneral";
+
+    // Audio20.pdf - Table 4-27
+    private byte mTerminalLink; // 3:1 The Terminal ID of the Terminal to which
+                                // this interface is connected.
+    private byte mControls;     // 4:1 see audio20.pdf Table 4-27
+    private byte mFormatType;   // 5:1 Constant identifying the Format Type the
+                                // AudioStreaming interface is using.
+    private int mFormats;       // 6:4 The Audio Data Format(s) that can be
+                                // used to communicate with this interface.
+                                // See the USB Audio Data Formats
+                                // document for further details.
+    private byte mNumChannels;  // 10:1 Number of physical channels in the AS
+                                // Interface audio channel cluster.
+    private int mChannelConfig; // 11:4 Describes the spatial location of the
+                                // physical channels.
+    private byte mChannelNames; // 15:1 Index of a string descriptor, describing the
+                                // name of the first physical channel.
+
+    public Usb20ASGeneral(int length, byte type, byte subtype, byte subclass) {
+        super(length, type, subtype, subclass);
+    }
+
+    public byte getTerminalLink() {
+        return mTerminalLink;
+    }
+
+    public byte getControls() {
+        return mControls;
+    }
+
+    public byte getFormatType() {
+        return mFormatType;
+    }
+
+    public int getFormats() {
+        return mFormats;
+    }
+
+    public byte getNumChannels() {
+        return mNumChannels;
+    }
+
+    public int getChannelConfig() {
+        return mChannelConfig;
+    }
+
+    public byte getChannelNames() {
+        return mChannelNames;
+    }
+
+    @Override
+    public int parseRawDescriptors(ByteStream stream) {
+
+        mTerminalLink = stream.getByte();
+        mControls = stream.getByte();
+        mFormatType = stream.getByte();
+        mFormats = stream.unpackUsbInt();
+        mNumChannels = stream.getByte();
+        mChannelConfig = stream.unpackUsbInt();
+        mChannelNames = stream.getByte();
+
+        return mLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Terminal Link: " + getTerminalLink());
+        canvas.writeListItem("Controls: " + ReportCanvas.getHexString(getControls()));
+        canvas.writeListItem("Format Type: " + ReportCanvas.getHexString(getFormatType()));
+        canvas.writeListItem("Formats: " + ReportCanvas.getHexString(getFormats()));
+        canvas.writeListItem("Num Channels: " + getNumChannels());
+        canvas.writeListItem("Channel Config: " + ReportCanvas.getHexString(getChannelConfig()));
+        canvas.writeListItem("Channel Names String ID: " + getChannelNames());
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACAudioControlEndpoint.java b/services/usb/java/com/android/server/usb/descriptors/UsbACAudioControlEndpoint.java
index 96fcc6a..6e1ce07 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbACAudioControlEndpoint.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbACAudioControlEndpoint.java
@@ -21,7 +21,7 @@
  * audio10.pdf section 4.4.2.1
  */
 public class UsbACAudioControlEndpoint extends UsbACEndpoint {
-    private static final String TAG = "ACAudioControlEndpoint";
+    private static final String TAG = "UsbACAudioControlEndpoint";
 
     private byte mAddress;  // 2:1 The address of the endpoint on the USB device.
                             // D7: Direction. 1 = IN endpoint
@@ -64,7 +64,7 @@
 
         mAddress = stream.getByte();
         mAttribs = stream.getByte();
-        mMaxPacketSize = stream.unpackUsbWord();
+        mMaxPacketSize = stream.unpackUsbShort();
         mInterval = stream.getByte();
 
         return mLength;
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACAudioStreamEndpoint.java b/services/usb/java/com/android/server/usb/descriptors/UsbACAudioStreamEndpoint.java
index d387883..d351902 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbACAudioStreamEndpoint.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbACAudioStreamEndpoint.java
@@ -21,7 +21,7 @@
  * see audio10.pdf section 3.7.2
  */
 public class UsbACAudioStreamEndpoint extends UsbACEndpoint {
-    private static final String TAG = "ACAudioStreamEndpoint";
+    private static final String TAG = "UsbACAudioStreamEndpoint";
 
     //TODO data fields...
     public UsbACAudioStreamEndpoint(int length, byte type, byte subclass) {
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACEndpoint.java b/services/usb/java/com/android/server/usb/descriptors/UsbACEndpoint.java
index 223496ab..4a6839d 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbACEndpoint.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbACEndpoint.java
@@ -23,7 +23,7 @@
  * see audio10.pdf section 4.4.1.2
  */
 abstract class UsbACEndpoint extends UsbDescriptor {
-    private static final String TAG = "ACEndpoint";
+    private static final String TAG = "UsbACEndpoint";
 
     protected final byte mSubclass; // from the mSubclass member of the "enclosing"
                                     // Interface Descriptor, not the stream.
@@ -50,7 +50,7 @@
     }
 
     public static UsbDescriptor allocDescriptor(UsbDescriptorParser parser,
-            int length, byte type) {
+                                                int length, byte type) {
         UsbInterfaceDescriptor interfaceDesc = parser.getCurInterface();
         byte subClass = interfaceDesc.getUsbSubclass();
         switch (subClass) {
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACFeatureUnit.java b/services/usb/java/com/android/server/usb/descriptors/UsbACFeatureUnit.java
index 739fe55..ab3903b 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbACFeatureUnit.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbACFeatureUnit.java
@@ -20,8 +20,8 @@
  * An audio class-specific Feature Unit Interface
  * see audio10.pdf section 3.5.5
  */
-public class UsbACFeatureUnit extends UsbACInterface {
-    private static final String TAG = "ACFeatureUnit";
+public final class UsbACFeatureUnit extends UsbACInterface {
+    private static final String TAG = "UsbACFeatureUnit";
 
     // audio10.pdf section 4.3.2.5
     public static final int CONTROL_MASK_MUTE =    0x0001;
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACHeader.java b/services/usb/java/com/android/server/usb/descriptors/UsbACHeader.java
deleted file mode 100644
index e31438c..0000000
--- a/services/usb/java/com/android/server/usb/descriptors/UsbACHeader.java
+++ /dev/null
@@ -1,78 +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.usb.descriptors;
-
-/**
- * @hide
- * An audio class-specific Interface Header.
- * see audio10.pdf section 4.3.2
- */
-public class UsbACHeader extends UsbACInterface {
-    private static final String TAG = "ACHeader";
-
-    private int mADCRelease;    // 3:2 Audio Device Class Specification Release (BCD).
-    private int mTotalLength;   // 5:2 Total number of bytes returned for the class-specific
-                                // AudioControl interface descriptor. Includes the combined length
-                                // of this descriptor header and all Unit and Terminal descriptors.
-    private byte mNumInterfaces = 0; // 7:1 The number of AudioStreaming and MIDIStreaming
-                                     // interfaces in the Audio Interface Collection to which this
-                                     // AudioControl interface belongs: n
-    private byte[] mInterfaceNums = null;   // 8:n List of Audio/MIDI streaming interface
-                                            // numbers associate with this endpoint
-    private byte mControls;                 // Vers 2.0 thing
-
-    public UsbACHeader(int length, byte type, byte subtype, byte subclass) {
-        super(length, type, subtype, subclass);
-    }
-
-    public int getADCRelease() {
-        return mADCRelease;
-    }
-
-    public int getTotalLength() {
-        return mTotalLength;
-    }
-
-    public byte getNumInterfaces() {
-        return mNumInterfaces;
-    }
-
-    public byte[] getInterfaceNums() {
-        return mInterfaceNums;
-    }
-
-    public byte getControls() {
-        return mControls;
-    }
-
-    @Override
-    public int parseRawDescriptors(ByteStream stream) {
-        mADCRelease = stream.unpackUsbWord();
-
-        mTotalLength = stream.unpackUsbWord();
-        if (mADCRelease >= 0x200) {
-            mControls = stream.getByte();
-        } else {
-            mNumInterfaces = stream.getByte();
-            mInterfaceNums = new byte[mNumInterfaces];
-            for (int index = 0; index < mNumInterfaces; index++) {
-                mInterfaceNums[index] = stream.getByte();
-            }
-        }
-
-        return mLength;
-    }
-}
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACHeaderInterface.java b/services/usb/java/com/android/server/usb/descriptors/UsbACHeaderInterface.java
new file mode 100644
index 0000000..01a355e
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbACHeaderInterface.java
@@ -0,0 +1,56 @@
+/*
+ * 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.usb.descriptors;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * An audio class-specific Interface Header super class.
+ * see audio10.pdf section 4.3.2 & Audio20.pdf section 4.7.2
+ */
+public abstract class UsbACHeaderInterface extends UsbACInterface {
+    private static final String TAG = "UsbACHeaderInterface";
+
+    protected int mADCRelease;  // Audio Device Class Specification Release (BCD).
+    protected int mTotalLength; // Total number of bytes returned for the class-specific
+                                // AudioControl interface descriptor. Includes the combined length
+                                // of this descriptor header and all Unit and Terminal descriptors.
+
+    public UsbACHeaderInterface(
+            int length, byte type, byte subtype, byte subclass, int adcRelease) {
+        super(length, type, subtype, subclass);
+        mADCRelease = adcRelease;
+    }
+
+    public int getADCRelease() {
+        return mADCRelease;
+    }
+
+    public int getTotalLength() {
+        return mTotalLength;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Release: " + ReportCanvas.getBCDString(getADCRelease()));
+        canvas.writeListItem("Total Length: " + getTotalLength());
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACInputTerminal.java b/services/usb/java/com/android/server/usb/descriptors/UsbACInputTerminal.java
deleted file mode 100644
index 653a7de..0000000
--- a/services/usb/java/com/android/server/usb/descriptors/UsbACInputTerminal.java
+++ /dev/null
@@ -1,64 +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.usb.descriptors;
-
-/**
- * @hide
- * An audio class-specific Input Terminal interface.
- * see audio10.pdf section 4.3.2.1
- */
-public class UsbACInputTerminal extends UsbACTerminal {
-    private static final String TAG = "ACInputTerminal";
-
-    private byte mNrChannels;       // 7:1 1 Channel (0x01)
-                                    // Number of logical output channels in the
-                                    // Terminal’s output audio channel cluster
-    private int mChannelConfig;     // 8:2 Mono (0x0000)
-    private byte mChannelNames;     // 10:1 Unused (0x00)
-    private byte mTerminal;         // 11:1 Unused (0x00)
-
-    public UsbACInputTerminal(int length, byte type, byte subtype, byte subclass) {
-        super(length, type, subtype, subclass);
-    }
-
-    public byte getNrChannels() {
-        return mNrChannels;
-    }
-
-    public int getChannelConfig() {
-        return mChannelConfig;
-    }
-
-    public byte getChannelNames() {
-        return mChannelNames;
-    }
-
-    public byte getTerminal() {
-        return mTerminal;
-    }
-
-    @Override
-    public int parseRawDescriptors(ByteStream stream) {
-        super.parseRawDescriptors(stream);
-
-        mNrChannels = stream.getByte();
-        mChannelConfig = stream.unpackUsbWord();
-        mChannelNames = stream.getByte();
-        mTerminal = stream.getByte();
-
-        return mLength;
-    }
-}
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACInterface.java b/services/usb/java/com/android/server/usb/descriptors/UsbACInterface.java
index 0ab7fcc..df6c53f 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbACInterface.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbACInterface.java
@@ -17,13 +17,16 @@
 
 import android.util.Log;
 
+import com.android.server.usb.descriptors.report.ReportCanvas;
+import com.android.server.usb.descriptors.report.UsbStrings;
+
 /**
  * @hide
  * An audio class-specific Interface.
  * see audio10.pdf section 4.3.2
  */
 public abstract class UsbACInterface extends UsbDescriptor {
-    private static final String TAG = "ACInterface";
+    private static final String TAG = "UsbACInterface";
 
     // Audio Control Subtypes
     public static final byte ACI_UNDEFINED = 0;
@@ -35,6 +38,11 @@
     public static final byte ACI_FEATURE_UNIT = 6;
     public static final byte ACI_PROCESSING_UNIT = 7;
     public static final byte ACI_EXTENSION_UNIT = 8;
+    // Not handled yet
+    public static final byte ACI_CLOCK_SOURCE = 0x0A;
+    public static final byte ACI_CLOCK_SELECTOR = 0x0B;
+    public static final byte ACI_CLOCK_MULTIPLIER = 0x0C;
+    public static final byte ACI_SAMPLE_RATE_CONVERTER =  0x0D;
 
     // Audio Streaming Subtypes
     public static final byte ASI_UNDEFINED = 0;
@@ -87,17 +95,39 @@
         return mSubclass;
     }
 
-    private static UsbDescriptor allocAudioControlDescriptor(ByteStream stream,
-            int length, byte type, byte subtype, byte subClass) {
+    private static UsbDescriptor allocAudioControlDescriptor(UsbDescriptorParser parser,
+            ByteStream stream, int length, byte type, byte subtype, byte subClass) {
         switch (subtype) {
             case ACI_HEADER:
-                return new UsbACHeader(length, type, subtype, subClass);
+            {
+                int acInterfaceSpec = stream.unpackUsbShort();
+                parser.setACInterfaceSpec(acInterfaceSpec);
+                if (acInterfaceSpec == UsbDeviceDescriptor.USBSPEC_2_0) {
+                    return new Usb20ACHeader(length, type, subtype, subClass, acInterfaceSpec);
+                } else {
+                    return new Usb10ACHeader(length, type, subtype, subClass, acInterfaceSpec);
+                }
+            }
 
             case ACI_INPUT_TERMINAL:
-                return new UsbACInputTerminal(length, type, subtype, subClass);
+            {
+                int acInterfaceSpec = parser.getACInterfaceSpec();
+                if (acInterfaceSpec == UsbDeviceDescriptor.USBSPEC_2_0) {
+                    return new Usb20ACInputTerminal(length, type, subtype, subClass);
+                } else {
+                    return new Usb10ACInputTerminal(length, type, subtype, subClass);
+                }
+            }
 
             case ACI_OUTPUT_TERMINAL:
-                return new UsbACOutputTerminal(length, type, subtype, subClass);
+            {
+                int acInterfaceSpec = parser.getACInterfaceSpec();
+                if (acInterfaceSpec == UsbDeviceDescriptor.USBSPEC_2_0) {
+                    return new Usb20ACOutputTerminal(length, type, subtype, subClass);
+                } else {
+                    return new Usb10ACOutputTerminal(length, type, subtype, subClass);
+                }
+            }
 
             case ACI_SELECTOR_UNIT:
                 return new UsbACSelectorUnit(length, type, subtype, subClass);
@@ -106,7 +136,14 @@
                 return new UsbACFeatureUnit(length, type, subtype, subClass);
 
             case ACI_MIXER_UNIT:
-                return new UsbACMixerUnit(length, type, subtype, subClass);
+            {
+                int acInterfaceSpec = parser.getACInterfaceSpec();
+                if (acInterfaceSpec == UsbDeviceDescriptor.USBSPEC_2_0) {
+                    return new Usb20ACMixerUnit(length, type, subtype, subClass);
+                } else {
+                    return new Usb10ACMixerUnit(length, type, subtype, subClass);
+                }
+            }
 
             case ACI_PROCESSING_UNIT:
             case ACI_EXTENSION_UNIT:
@@ -115,18 +152,24 @@
             default:
                 Log.w(TAG, "Unknown Audio Class Interface subtype:0x"
                         + Integer.toHexString(subtype));
-                return null;
+                return new UsbACInterfaceUnparsed(length, type, subtype, subClass);
         }
     }
 
-    private static UsbDescriptor allocAudioStreamingDescriptor(ByteStream stream,
-            int length, byte type, byte subtype, byte subClass) {
+    private static UsbDescriptor allocAudioStreamingDescriptor(UsbDescriptorParser parser,
+            ByteStream stream, int length, byte type, byte subtype, byte subClass) {
+        //int spec = parser.getUsbSpec();
+        int acInterfaceSpec = parser.getACInterfaceSpec();
         switch (subtype) {
             case ASI_GENERAL:
-                return new UsbASGeneral(length, type, subtype, subClass);
+                if (acInterfaceSpec == UsbDeviceDescriptor.USBSPEC_2_0) {
+                    return new Usb20ASGeneral(length, type, subtype, subClass);
+                } else {
+                    return new Usb10ASGeneral(length, type, subtype, subClass);
+                }
 
             case ASI_FORMAT_TYPE:
-                return UsbASFormat.allocDescriptor(stream, length, type, subtype, subClass);
+                return UsbASFormat.allocDescriptor(parser, stream, length, type, subtype, subClass);
 
             case ASI_FORMAT_SPECIFIC:
             case ASI_UNDEFINED:
@@ -155,7 +198,6 @@
                 // Fall through until we implement that descriptor
 
             case MSI_UNDEFINED:
-                // break; Fall through until we implement this descriptor
             default:
                 Log.w(TAG, "Unknown MIDI Streaming Interface subtype:0x"
                         + Integer.toHexString(subtype));
@@ -173,10 +215,12 @@
         byte subClass = interfaceDesc.getUsbSubclass();
         switch (subClass) {
             case AUDIO_AUDIOCONTROL:
-                return allocAudioControlDescriptor(stream, length, type, subtype, subClass);
+                return allocAudioControlDescriptor(
+                        parser, stream, length, type, subtype, subClass);
 
             case AUDIO_AUDIOSTREAMING:
-                return allocAudioStreamingDescriptor(stream, length, type, subtype, subClass);
+                return allocAudioStreamingDescriptor(
+                        parser, stream, length, type, subtype, subClass);
 
             case AUDIO_MIDISTREAMING:
                 return allocMidiStreamingDescriptor(length, type, subtype, subClass);
@@ -187,4 +231,21 @@
                 return null;
         }
     }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        byte subClass = getSubclass();
+        String subClassName = UsbStrings.getACInterfaceSubclassName(subClass);
+
+        byte subtype = getSubtype();
+        String subTypeName = UsbStrings.getACControlInterfaceName(subtype);
+
+        canvas.openList();
+        canvas.writeListItem("Subclass: " + ReportCanvas.getHexString(subClass)
+                + " " + subClassName);
+        canvas.writeListItem("Subtype: " + ReportCanvas.getHexString(subtype) + " " + subTypeName);
+        canvas.closeList();
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACInterfaceUnparsed.java b/services/usb/java/com/android/server/usb/descriptors/UsbACInterfaceUnparsed.java
new file mode 100644
index 0000000..9e00a79
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbACInterfaceUnparsed.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.server.usb.descriptors;
+
+/**
+ * @hide
+ * A holder class for as yet unparsed audio-class interfaces.
+ */
+public final class UsbACInterfaceUnparsed extends UsbACInterface {
+    private static final String TAG = "UsbACInterfaceUnparsed";
+
+    public UsbACInterfaceUnparsed(int length, byte type, byte subtype, byte subClass) {
+        super(length, type, subtype, subClass);
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACMidiEndpoint.java b/services/usb/java/com/android/server/usb/descriptors/UsbACMidiEndpoint.java
index 9c07242..9c31457 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbACMidiEndpoint.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbACMidiEndpoint.java
@@ -15,13 +15,15 @@
  */
 package com.android.server.usb.descriptors;
 
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
 /**
  * @hide
  * An audio class-specific Midi Endpoint.
  * see midi10.pdf section 6.2.2
  */
-public class UsbACMidiEndpoint extends UsbACEndpoint {
-    private static final String TAG = "ACMidiEndpoint";
+public final class UsbACMidiEndpoint extends UsbACEndpoint {
+    private static final String TAG = "UsbACMidiEndpoint";
 
     private byte mNumJacks;
     private byte[] mJackIds;
@@ -49,4 +51,15 @@
         }
         return mLength;
     }
-}
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.writeHeader(3, "AC Midi Endpoint: " + ReportCanvas.getHexString(getType())
+                + " Length: " + getLength());
+        canvas.openList();
+        canvas.writeListItem("" + getNumJacks() + " Jacks.");
+        canvas.closeList();
+    }
+}
\ No newline at end of file
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACMixerUnit.java b/services/usb/java/com/android/server/usb/descriptors/UsbACMixerUnit.java
index 552b5ae..88faed9 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbACMixerUnit.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbACMixerUnit.java
@@ -15,23 +15,14 @@
  */
 package com.android.server.usb.descriptors;
 
-/**
- * @hide
- * An audio class-specific Mixer Interface.
- * see audio10.pdf section 4.3.2.3
- */
 public class UsbACMixerUnit extends UsbACInterface {
-    private static final String TAG = "ACMixerUnit";
+    private static final String TAG = "UsbACMixerUnit";
 
-    private byte mUnitID;       // 3:1
-    private byte mNumInputs;    // 4:1 Number of Input Pins of this Unit.
-    private byte[] mInputIDs;   // 5...:1 ID of the Unit or Terminal to which the Input Pins
-                                // are connected.
-    private byte mNumOutputs;   // The number of output channels
-    private int mChannelConfig; // Spacial location of output channels
-    private byte mChanNameID;   // First channel name string descriptor ID
-    private byte[] mControls;   // bitmasks of which controls are present for each channel
-    private byte mNameID;       // string descriptor ID of mixer name
+    protected byte mUnitID;         // 3:1
+    protected byte mNumInputs;      // 4:1 Number of Input Pins of this Unit.
+    protected byte[] mInputIDs;     // 5...:1 ID of the Unit or Terminal to which the Input Pins
+                                    // are connected.
+    protected byte mNumOutputs;     // The number of output channels
 
     public UsbACMixerUnit(int length, byte type, byte subtype, byte subClass) {
         super(length, type, subtype, subClass);
@@ -53,20 +44,9 @@
         return mNumOutputs;
     }
 
-    public int getChannelConfig() {
-        return mChannelConfig;
-    }
-
-    public byte getChanNameID() {
-        return mChanNameID;
-    }
-
-    public byte[] getControls() {
-        return mControls;
-    }
-
-    public byte getNameID() {
-        return mNameID;
+    protected static int calcControlArraySize(int numInputs, int numOutputs) {
+        int totalChannels = numInputs * numOutputs;
+        return (totalChannels + 7) / 8;
     }
 
     @Override
@@ -78,22 +58,6 @@
             mInputIDs[input] = stream.getByte();
         }
         mNumOutputs = stream.getByte();
-        mChannelConfig = stream.unpackUsbWord();
-        mChanNameID = stream.getByte();
-
-        int controlArraySize;
-        int totalChannels = mNumInputs * mNumOutputs;
-        if (totalChannels % 8 == 0) {
-            controlArraySize = totalChannels / 8;
-        } else {
-            controlArraySize = totalChannels / 8 + 1;
-        }
-        mControls = new byte[controlArraySize];
-        for (int index = 0; index < controlArraySize; index++) {
-            mControls[index] = stream.getByte();
-        }
-
-        mNameID = stream.getByte();
 
         return mLength;
     }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACOutputTerminal.java b/services/usb/java/com/android/server/usb/descriptors/UsbACOutputTerminal.java
deleted file mode 100644
index f957e3d..0000000
--- a/services/usb/java/com/android/server/usb/descriptors/UsbACOutputTerminal.java
+++ /dev/null
@@ -1,49 +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.usb.descriptors;
-
-/**
- * @hide
- * An audio class-specific Output Terminal Interface.
- * see audio10.pdf section 4.3.2.2
- */
-public class UsbACOutputTerminal extends UsbACTerminal {
-    private static final String TAG = "ACOutputTerminal";
-
-    private byte mSourceID;         // 7:1 From Input Terminal. (0x01)
-    private byte mTerminal;         // 8:1 Unused.
-
-    public UsbACOutputTerminal(int length, byte type, byte subtype, byte subClass) {
-        super(length, type, subtype, subClass);
-    }
-
-    public byte getSourceID() {
-        return mSourceID;
-    }
-
-    public byte getTerminal() {
-        return mTerminal;
-    }
-
-    @Override
-    public int parseRawDescriptors(ByteStream stream) {
-        super.parseRawDescriptors(stream);
-
-        mSourceID = stream.getByte();
-        mTerminal = stream.getByte();
-        return mLength;
-    }
-}
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACSelectorUnit.java b/services/usb/java/com/android/server/usb/descriptors/UsbACSelectorUnit.java
index b1f60bd..b16bc57 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbACSelectorUnit.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbACSelectorUnit.java
@@ -15,13 +15,15 @@
  */
 package com.android.server.usb.descriptors;
 
+// import com.android.server.usb.descriptors.report.ReportCanvas;
+
 /**
  * @hide
  * An audio class-specific Selector Unit Interface.
  * see audio10.pdf section 4.3.2.4
  */
-public class UsbACSelectorUnit extends UsbACInterface {
-    private static final String TAG = "ACSelectorUnit";
+public final class UsbACSelectorUnit extends UsbACInterface {
+    private static final String TAG = "UsbACSelectorUnit";
 
     private byte mUnitID;   // 3:1 Constant uniquely identifying the Unit within the audio function.
                             // This value is used in all requests to address this Unit.
@@ -62,4 +64,11 @@
 
         return mLength;
     }
+
+//    @Override
+//    public void report(ReportCanvas canvas) {
+//        super.report(canvas);
+//
+//        //TODO
+//    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbACTerminal.java b/services/usb/java/com/android/server/usb/descriptors/UsbACTerminal.java
index ea80208..2836508 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbACTerminal.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbACTerminal.java
@@ -15,10 +15,15 @@
  */
 package com.android.server.usb.descriptors;
 
+import com.android.server.usb.descriptors.report.ReportCanvas;
+import com.android.server.usb.descriptors.report.UsbStrings;
+
 /**
  * @hide
  */
 public abstract class UsbACTerminal extends UsbACInterface {
+    private static final String TAG = "UsbACTerminal";
+
     // Note that these fields are the same for both the
     // audio class-specific Output Terminal Interface.(audio10.pdf section 4.3.2.2)
     // and audio class-specific Input Terminal interface.(audio10.pdf section 4.3.2.1)
@@ -46,9 +51,21 @@
     @Override
     public int parseRawDescriptors(ByteStream stream) {
         mTerminalID = stream.getByte();
-        mTerminalType = stream.unpackUsbWord();
+        mTerminalType = stream.unpackUsbShort();
         mAssocTerminal = stream.getByte();
 
         return mLength;
     }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        int terminalType = getTerminalType();
+        canvas.writeListItem("Type: " + ReportCanvas.getHexString(terminalType) + ": "
+                + UsbStrings.getTerminalName(terminalType));
+        canvas.writeListItem("ID: " + ReportCanvas.getHexString(getTerminalID()));
+        canvas.closeList();
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbASFormat.java b/services/usb/java/com/android/server/usb/descriptors/UsbASFormat.java
index d7c84c6..7a92f9e 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbASFormat.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbASFormat.java
@@ -15,19 +15,30 @@
  */
 package com.android.server.usb.descriptors;
 
+import com.android.server.usb.descriptors.report.ReportCanvas;
+import com.android.server.usb.descriptors.report.UsbStrings;
+
 /**
  * @hide
  * An audio class-specific Format Interface.
  *   Subclasses: UsbACFormatI and UsbACFormatII.
  * see audio10.pdf section 4.5.3 & & Frmts10.pdf
  */
-public abstract class UsbASFormat extends UsbACInterface {
-    private static final String TAG = "ASFormat";
+public class UsbASFormat extends UsbACInterface {
+    private static final String TAG = "UsbASFormat";
 
     private final byte mFormatType;   // 3:1 FORMAT_TYPE_*
 
-    public static final byte FORMAT_TYPE_I = 1;
-    public static final byte FORMAT_TYPE_II = 2;
+    public static final byte FORMAT_TYPE_I      = 1;
+    public static final byte FORMAT_TYPE_II     = 2;
+    // these showed up in USB 2.0
+    public static final byte FORMAT_TYPE_III    = 3;
+    public static final byte FORMAT_TYPE_IV     = 4;
+
+    // "extended" formats
+    public static final byte EXT_FORMAT_TYPE_I      = (byte) 0x81;
+    public static final byte EXT_FORMAT_TYPE_II     = (byte) 0x82;
+    public static final byte EXT_FORMAT_TYPE_III    = (byte) 0x83;
 
     public UsbASFormat(int length, byte type, byte subtype, byte formatType, byte mSubclass) {
         super(length, type, subtype, mSubclass);
@@ -38,27 +49,59 @@
         return mFormatType;
     }
 
+    public int[] getSampleRates() {
+        return null;
+    }
+
+    public int[] getBitDepths() {
+        return null;
+    }
+
+    public int[] getChannelCounts() {
+        return null;
+    }
+
     /**
      * Allocates the audio-class format subtype associated with the format type read from the
      * stream.
      */
-    public static UsbDescriptor allocDescriptor(ByteStream stream, int length, byte type,
+    public static UsbDescriptor allocDescriptor(UsbDescriptorParser parser,
+                                                ByteStream stream, int length, byte type,
             byte subtype, byte subclass) {
 
         byte formatType = stream.getByte();
-        //TODO
-        // There is an issue parsing format descriptors on (some) USB 2.0 pro-audio interfaces
-        // Since we don't need this info for headset detection, just skip these descriptors
-        // for now to avoid the (low) possibility of an IndexOutOfBounds exception.
-        switch (formatType) {
-//            case FORMAT_TYPE_I:
-//                return new UsbASFormatI(length, type, subtype, formatType, subclass);
-//
-//            case FORMAT_TYPE_II:
-//                return new UsbASFormatII(length, type, subtype, formatType, subclass);
+        int acInterfaceSpec = parser.getACInterfaceSpec();
 
+        switch (formatType) {
+            case FORMAT_TYPE_I:
+                if (acInterfaceSpec == UsbDeviceDescriptor.USBSPEC_2_0) {
+                    return new Usb20ASFormatI(length, type, subtype, formatType, subclass);
+                } else {
+                    return new Usb10ASFormatI(length, type, subtype, formatType, subclass);
+                }
+
+            case FORMAT_TYPE_II:
+                if (acInterfaceSpec == UsbDeviceDescriptor.USBSPEC_2_0) {
+                    return new Usb20ASFormatII(length, type, subtype, formatType, subclass);
+                } else {
+                    return new Usb10ASFormatII(length, type, subtype, formatType, subclass);
+                }
+
+            // USB 2.0 Exclusive Format Types
+            case FORMAT_TYPE_III:
+                return new Usb20ASFormatIII(length, type, subtype, formatType, subclass);
+
+            case FORMAT_TYPE_IV:
+                //TODO - implement this type.
             default:
-                return null;
+                return new UsbASFormat(length, type, subtype, formatType, subclass);
         }
     }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.writeParagraph(UsbStrings.getFormatName(getFormatType()), /*emphasis*/false);
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbASFormatI.java b/services/usb/java/com/android/server/usb/descriptors/UsbASFormatI.java
deleted file mode 100644
index 347a6cf..0000000
--- a/services/usb/java/com/android/server/usb/descriptors/UsbASFormatI.java
+++ /dev/null
@@ -1,77 +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.usb.descriptors;
-
-/**
- * @hide
- * An audio class-specific Format I interface.
- * see Frmts10.pdf section 2.2
- */
-public class UsbASFormatI extends UsbASFormat {
-    private static final String TAG = "ASFormatI";
-
-    private byte mNumChannels;      // 4:1
-    private byte mSubframeSize;     // 5:1 frame size in bytes
-    private byte mBitResolution;    // 6:1 sample size in bits
-    private byte mSampleFreqType;   // 7:1
-    private int[] mSampleRates;     // if mSamFreqType == 0, there will be 2 values: the
-                                    // min & max rates otherwise mSamFreqType rates.
-                                    // All 3-byte values. All rates in Hz
-
-    public UsbASFormatI(int length, byte type, byte subtype, byte formatType, byte subclass) {
-        super(length, type, subtype, formatType, subclass);
-    }
-
-    public byte getNumChannels() {
-        return mNumChannels;
-    }
-
-    public byte getSubframeSize() {
-        return mSubframeSize;
-    }
-
-    public byte getBitResolution() {
-        return mBitResolution;
-    }
-
-    public byte getSampleFreqType() {
-        return mSampleFreqType;
-    }
-
-    public int[] getSampleRates() {
-        return mSampleRates;
-    }
-
-    @Override
-    public int parseRawDescriptors(ByteStream stream) {
-        mNumChannels = stream.getByte();
-        mSubframeSize = stream.getByte();
-        mBitResolution = stream.getByte();
-        mSampleFreqType = stream.getByte();
-        if (mSampleFreqType == 0) {
-            mSampleRates = new int[2];
-            mSampleRates[0] = stream.unpackUsbTriple();
-            mSampleRates[1] = stream.unpackUsbTriple();
-        } else {
-            mSampleRates = new int[mSampleFreqType];
-            for (int index = 0; index < mSampleFreqType; index++) {
-                mSampleRates[index] = stream.unpackUsbTriple();
-            }
-        }
-
-        return mLength;
-    }
-}
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbASFormatII.java b/services/usb/java/com/android/server/usb/descriptors/UsbASFormatII.java
deleted file mode 100644
index abdc621..0000000
--- a/services/usb/java/com/android/server/usb/descriptors/UsbASFormatII.java
+++ /dev/null
@@ -1,72 +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.usb.descriptors;
-
-/**
- * @hide
- * An audio class-specific Format II interface.
- * see Frmts10.pdf section 2.3
- */
-public class UsbASFormatII extends UsbASFormat {
-    private static final String TAG = "ASFormatII";
-
-    private int mMaxBitRate; // 4:2 Indicates the maximum number of bits per second this
-                            // interface can handle. Expressed in kbits/s.
-    private int mSamplesPerFrame;   // 6:2 Indicates the number of PCM audio samples contained
-                                    // in one encoded audio frame.
-    private byte mSamFreqType;  // Indicates how the sampling frequency can be programmed:
-                                // 0: Continuous sampling frequency
-                                // 1..255: The number of discrete sampling frequencies supported
-                                // by the isochronous data endpoint of the AudioStreaming
-                                // interface (ns)
-    private int[] mSampleRates; // if mSamFreqType == 0, there will be 2 values:
-                                // the min & max rates. otherwise mSamFreqType rates.
-                                // All 3-byte values. All rates in Hz
-
-    public UsbASFormatII(int length, byte type, byte subtype, byte formatType, byte subclass) {
-        super(length, type, subtype, formatType, subclass);
-    }
-
-    public int getMaxBitRate() {
-        return mMaxBitRate;
-    }
-
-    public int getSamplesPerFrame() {
-        return mSamplesPerFrame;
-    }
-
-    public byte getSamFreqType() {
-        return mSamFreqType;
-    }
-
-    public int[] getSampleRates() {
-        return mSampleRates;
-    }
-
-    @Override
-    public int parseRawDescriptors(ByteStream stream) {
-        mMaxBitRate = stream.unpackUsbWord();
-        mSamplesPerFrame = stream.unpackUsbWord();
-        mSamFreqType = stream.getByte();
-        int numFreqs = mSamFreqType == 0 ? 2 : mSamFreqType;
-        mSampleRates = new int[numFreqs];
-        for (int index = 0; index < numFreqs; index++) {
-            mSampleRates[index] = stream.unpackUsbTriple();
-        }
-
-        return mLength;
-    }
-}
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbASGeneral.java b/services/usb/java/com/android/server/usb/descriptors/UsbASGeneral.java
deleted file mode 100644
index c4f42d3..0000000
--- a/services/usb/java/com/android/server/usb/descriptors/UsbASGeneral.java
+++ /dev/null
@@ -1,58 +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.usb.descriptors;
-
-/**
- * @hide
- * An audio class-specific General interface.
- * see audio10.pdf section 4.5.2
- */
-public class UsbASGeneral extends UsbACInterface {
-    private static final String TAG = "ACGeneral";
-
-    // audio10.pdf - section 4.5.2
-    private byte mTerminalLink; // 3:1 The Terminal ID of the Terminal to which the endpoint
-                                // of this interface is connected.
-    private byte mDelay;        // 4:1 Delay introduced by the data path (see Section 3.4,
-                                // “Inter Channel Synchronization”). Expressed in number of frames.
-    private int mFormatTag;     // 5:2 The Audio Data Format that has to be used to communicate
-                                // with this interface.
-
-    public UsbASGeneral(int length, byte type, byte subtype, byte subclass) {
-        super(length, type, subtype, subclass);
-    }
-
-    public byte getTerminalLink() {
-        return mTerminalLink;
-    }
-
-    public byte getDelay() {
-        return mDelay;
-    }
-
-    public int getFormatTag() {
-        return mFormatTag;
-    }
-
-    @Override
-    public int parseRawDescriptors(ByteStream stream) {
-        mTerminalLink = stream.getByte();
-        mDelay = stream.getByte();
-        mFormatTag = stream.unpackUsbWord();
-
-        return mLength;
-    }
-}
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbBinaryParser.java b/services/usb/java/com/android/server/usb/descriptors/UsbBinaryParser.java
index 185cee2..9710ac6 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbBinaryParser.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbBinaryParser.java
@@ -25,7 +25,7 @@
  * A class that just walks the descriptors and does a hex dump of the contained values.
  * Usefull as a debugging tool.
  */
-public class UsbBinaryParser {
+public final class UsbBinaryParser {
     private static final String TAG = "UsbBinaryParser";
     private static final boolean LOGGING = false;
 
@@ -33,7 +33,7 @@
 
         // Log
         if (LOGGING) {
-            Log.i(TAG, "l:" + length + " t:" + Integer.toHexString(type) + " "
+            Log.i(TAG, "l: " + length + " t: " + Integer.toHexString(type) + " "
                     + UsbStrings.getDescriptorName(type));
             StringBuilder sb = new StringBuilder();
             for (int index = 2; index < length; index++) {
@@ -43,7 +43,7 @@
         } else {
             // Screen Dump
             builder.append("<p>");
-            builder.append("<b> l:" + length
+            builder.append("<b> l: " + length
                     + " t:0x" + Integer.toHexString(type) + " "
                     + UsbStrings.getDescriptorName(type) + "</b><br>");
             for (int index = 2; index < length; index++) {
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbConfigDescriptor.java b/services/usb/java/com/android/server/usb/descriptors/UsbConfigDescriptor.java
index 8ae6d0f..75279c6 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbConfigDescriptor.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbConfigDescriptor.java
@@ -15,13 +15,15 @@
  */
 package com.android.server.usb.descriptors;
 
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
 /**
  * @hide
  * An USB Config Descriptor.
  * see usb11.pdf section 9.6.2
  */
-public class UsbConfigDescriptor extends UsbDescriptor {
-    private static final String TAG = "Config";
+public final class UsbConfigDescriptor extends UsbDescriptor {
+    private static final String TAG = "UsbConfigDescriptor";
 
     private int mTotalLength;   // 2:2 Total length in bytes of data returned
     private byte mNumInterfaces; // 4:1 Number of Interfaces
@@ -35,6 +37,7 @@
 
     UsbConfigDescriptor(int length, byte type) {
         super(length, type);
+        mHierarchyLevel = 2;
     }
 
     public int getTotalLength() {
@@ -63,7 +66,7 @@
 
     @Override
     public int parseRawDescriptors(ByteStream stream) {
-        mTotalLength = stream.unpackUsbWord();
+        mTotalLength = stream.unpackUsbShort();
         mNumInterfaces = stream.getByte();
         mConfigValue = stream.getByte();
         mConfigIndex = stream.getByte();
@@ -72,4 +75,15 @@
 
         return mLength;
     }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Config # " + getConfigValue());
+        canvas.writeListItem(getNumInterfaces() + " Interfaces.");
+        canvas.writeListItem("Attributes: " + ReportCanvas.getHexString(getAttribs()));
+        canvas.closeList();
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptor.java b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptor.java
index 63b2d7f..8c7565b 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptor.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptor.java
@@ -19,6 +19,10 @@
 import android.hardware.usb.UsbDeviceConnection;
 import android.util.Log;
 
+import com.android.server.usb.descriptors.report.ReportCanvas;
+import com.android.server.usb.descriptors.report.Reporting;
+import com.android.server.usb.descriptors.report.UsbStrings;
+
 /*
  * Some notes about UsbDescriptor and its subclasses.
  *
@@ -33,8 +37,10 @@
  * @hide
  * Common superclass for all USB Descriptors.
  */
-public abstract class UsbDescriptor {
-    private static final String TAG = "Descriptor";
+public abstract class UsbDescriptor implements Reporting {
+    private static final String TAG = "UsbDescriptor";
+
+    protected int mHierarchyLevel;
 
     protected final int mLength;    // 0:1 bLength Number Size of the Descriptor in Bytes (18 bytes)
                                     // we store this as an int because Java bytes are SIGNED.
@@ -50,11 +56,15 @@
     public static final int STATUS_PARSED_OK        = 1;
     public static final int STATUS_PARSED_UNDERRUN  = 2;
     public static final int STATUS_PARSED_OVERRUN   = 3;
+    public static final int STATUS_PARSE_EXCEPTION  = 4;
+
     private int mStatus = STATUS_UNPARSED;
 
     private static String[] sStatusStrings = {
             "UNPARSED", "PARSED - OK", "PARSED - UNDERRUN", "PARSED - OVERRUN"};
 
+    private int mOverUnderRunCount;
+
     // Descriptor Type IDs
     public static final byte DESCRIPTORTYPE_DEVICE = 0x01;            // 1
     public static final byte DESCRIPTORTYPE_CONFIG = 0x02;            // 2
@@ -147,6 +157,10 @@
         mStatus = status;
     }
 
+    public int getOverUnderRunCount() {
+        return mOverUnderRunCount;
+    }
+
     public String getStatusString() {
         return sStatusStrings[mStatus];
     }
@@ -165,14 +179,16 @@
             // Too cold...
             stream.advance(mLength - bytesRead);
             mStatus = STATUS_PARSED_UNDERRUN;
+            mOverUnderRunCount = mLength - bytesRead;
             Log.w(TAG, "UNDERRUN t:0x" + Integer.toHexString(mType)
-                    + " r:" + bytesRead + " < l:" + mLength);
+                    + " r: " + bytesRead + " < l: " + mLength);
         } else if (bytesRead > mLength) {
             // Too hot...
             stream.reverse(bytesRead - mLength);
             mStatus = STATUS_PARSED_OVERRUN;
+            mOverUnderRunCount = bytesRead - mLength;
             Log.w(TAG, "OVERRRUN t:0x" + Integer.toHexString(mType)
-                    + " r:" + bytesRead + " > l:" + mLength);
+                    + " r: " + bytesRead + " > l: " + mLength);
         } else {
             // Just right!
             mStatus = STATUS_PARSED_OK;
@@ -220,4 +236,43 @@
         }
         return usbStr;
     }
+
+    private void reportParseStatus(ReportCanvas canvas) {
+        int status = getStatus();
+        switch (status) {
+            case UsbDescriptor.STATUS_PARSED_OK:
+                break;  // no need to report
+
+            case UsbDescriptor.STATUS_UNPARSED:
+            case UsbDescriptor.STATUS_PARSED_UNDERRUN:
+            case UsbDescriptor.STATUS_PARSED_OVERRUN:
+                canvas.writeParagraph("status: " + getStatusString()
+                        + " [" + getOverUnderRunCount() + "]", true);
+                break;
+        }
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        String descTypeStr = UsbStrings.getDescriptorName(getType());
+        String text = descTypeStr + ": " + ReportCanvas.getHexString(getType())
+                + " Len: " + getLength();
+        if (mHierarchyLevel != 0) {
+            canvas.writeHeader(mHierarchyLevel, text);
+        } else {
+            canvas.writeParagraph(text, false);
+        }
+
+        if (getStatus() != STATUS_PARSED_OK) {
+            reportParseStatus(canvas);
+        }
+    }
+
+    @Override
+    public void shortReport(ReportCanvas canvas) {
+        String descTypeStr = UsbStrings.getDescriptorName(getType());
+        String text = descTypeStr + ": " + ReportCanvas.getHexString(getType())
+                + " Len: " + getLength();
+        canvas.writeParagraph(text, false);
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java
index d4a0ac4..ad7bde5c 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java
@@ -23,8 +23,8 @@
  * @hide
  * Class for parsing a binary stream of USB Descriptors.
  */
-public class UsbDescriptorParser {
-    private static final String TAG = "DescriptorParser";
+public final class UsbDescriptorParser {
+    private static final String TAG = "UsbDescriptorParser";
 
     // Descriptor Objects
     private ArrayList<UsbDescriptor> mDescriptors = new ArrayList<UsbDescriptor>();
@@ -32,9 +32,35 @@
     private UsbDeviceDescriptor mDeviceDescriptor;
     private UsbInterfaceDescriptor mCurInterfaceDescriptor;
 
+    // The AudioClass spec implemented by the AudioClass Interfaces
+    // This may well be different than the overall USB Spec.
+    // Obtained from the first AudioClass Header descriptor.
+    private int mACInterfacesSpec = UsbDeviceDescriptor.USBSPEC_1_0;
+
     public UsbDescriptorParser() {}
 
     /**
+     * @return the USB Spec value associated with the Device descriptor for the
+     * descriptors stream being parsed.
+     *
+     * @throws IllegalArgumentException
+     */
+    public int getUsbSpec() {
+        if (mDeviceDescriptor != null) {
+            return mDeviceDescriptor.getSpec();
+        } else {
+            throw new IllegalArgumentException();
+        }
+    }
+
+    public void setACInterfaceSpec(int spec) {
+        mACInterfacesSpec = spec;
+    }
+
+    public int getACInterfaceSpec() {
+        return mACInterfacesSpec;
+    }
+    /**
      * The probability (as returned by getHeadsetProbability() at which we conclude
      * the peripheral is a headset.
      */
@@ -44,7 +70,7 @@
     private UsbDescriptor allocDescriptor(ByteStream stream) {
         stream.resetReadCount();
 
-        int length = (int) stream.getByte() & 0x000000FF;
+        int length = stream.getUnsignedByte();
         byte type = stream.getByte();
 
         UsbDescriptor descriptor = null;
@@ -99,7 +125,7 @@
 
         if (descriptor == null) {
             // Unknown Descriptor
-            Log.i(TAG, "Unknown Descriptor len:" + length + " type:0x"
+            Log.i(TAG, "Unknown Descriptor len: " + length + " type:0x"
                     + Integer.toHexString(type));
             descriptor = new UsbUnknown(length, type);
         }
@@ -135,14 +161,15 @@
                 try {
                     descriptor.parseRawDescriptors(stream);
 
-                    // Its OK to add the invalid descriptor as the postParse()
-                    // routine will mark it as invalid.
-                    mDescriptors.add(descriptor);
-
                     // Clean up
                     descriptor.postParse(stream);
                 } catch (Exception ex) {
                     Log.e(TAG, "Exception parsing USB descriptors.", ex);
+
+                    // Clean up
+                    descriptor.setStatus(UsbDescriptor.STATUS_PARSE_EXCEPTION);
+                } finally {
+                    mDescriptors.add(descriptor);
                 }
             }
         }
@@ -197,7 +224,7 @@
                         list.add(descriptor);
                     }
                 } else {
-                    Log.w(TAG, "Unrecognized Interface l:" + descriptor.getLength()
+                    Log.w(TAG, "Unrecognized Interface l: " + descriptor.getLength()
                             + " t:0x" + Integer.toHexString(descriptor.getType()));
                 }
             }
@@ -220,7 +247,7 @@
                         list.add(descriptor);
                     }
                 } else {
-                    Log.w(TAG, "Unrecognized Audio Interface l:" + descriptor.getLength()
+                    Log.w(TAG, "Unrecognized Audio Interface l: " + descriptor.getLength()
                             + " t:0x" + Integer.toHexString(descriptor.getType()));
                 }
             }
@@ -251,7 +278,7 @@
                     return true;
                 }
             } else {
-                Log.w(TAG, "Undefined Audio Class Interface l:" + descriptor.getLength()
+                Log.w(TAG, "Undefined Audio Class Interface l: " + descriptor.getLength()
                         + " t:0x" + Integer.toHexString(descriptor.getType()));
             }
         }
@@ -274,8 +301,8 @@
         acDescriptors = getACInterfaceDescriptors(UsbACInterface.ACI_INPUT_TERMINAL,
                 UsbACInterface.AUDIO_AUDIOCONTROL);
         for (UsbDescriptor descriptor : acDescriptors) {
-            if (descriptor instanceof UsbACInputTerminal) {
-                UsbACInputTerminal inDescr = (UsbACInputTerminal) descriptor;
+            if (descriptor instanceof UsbACTerminal) {
+                UsbACTerminal inDescr = (UsbACTerminal) descriptor;
                 if (inDescr.getTerminalType() == UsbTerminalTypes.TERMINAL_IN_MIC
                         || inDescr.getTerminalType() == UsbTerminalTypes.TERMINAL_BIDIR_HEADSET
                         || inDescr.getTerminalType() == UsbTerminalTypes.TERMINAL_BIDIR_UNDEFINED
@@ -284,7 +311,7 @@
                     break;
                 }
             } else {
-                Log.w(TAG, "Undefined Audio Input terminal l:" + descriptor.getLength()
+                Log.w(TAG, "Undefined Audio Input terminal l: " + descriptor.getLength()
                         + " t:0x" + Integer.toHexString(descriptor.getType()));
             }
         }
@@ -295,8 +322,8 @@
                 getACInterfaceDescriptors(UsbACInterface.ACI_OUTPUT_TERMINAL,
                         UsbACInterface.AUDIO_AUDIOCONTROL);
         for (UsbDescriptor descriptor : acDescriptors) {
-            if (descriptor instanceof UsbACOutputTerminal) {
-                UsbACOutputTerminal outDescr = (UsbACOutputTerminal) descriptor;
+            if (descriptor instanceof UsbACTerminal) {
+                UsbACTerminal outDescr = (UsbACTerminal) descriptor;
                 if (outDescr.getTerminalType() == UsbTerminalTypes.TERMINAL_OUT_SPEAKER
                         || outDescr.getTerminalType()
                             == UsbTerminalTypes.TERMINAL_OUT_HEADPHONES
@@ -305,7 +332,7 @@
                     break;
                 }
             } else {
-                Log.w(TAG, "Undefined Audio Output terminal l:" + descriptor.getLength()
+                Log.w(TAG, "Undefined Audio Output terminal l: " + descriptor.getLength()
                         + " t:0x" + Integer.toHexString(descriptor.getType()));
             }
         }
@@ -328,6 +355,8 @@
      * to count on the peripheral being a headset.
      */
     public boolean isInputHeadset() {
+        // TEMP
+        Log.i(TAG, "---- isInputHeadset() prob:" + (getInputHeadsetProbability() * 100f) + "%");
         return getInputHeadsetProbability() >= IN_HEADSET_TRIGGER;
     }
 
@@ -348,8 +377,8 @@
                 getACInterfaceDescriptors(UsbACInterface.ACI_OUTPUT_TERMINAL,
                         UsbACInterface.AUDIO_AUDIOCONTROL);
         for (UsbDescriptor descriptor : acDescriptors) {
-            if (descriptor instanceof UsbACOutputTerminal) {
-                UsbACOutputTerminal outDescr = (UsbACOutputTerminal) descriptor;
+            if (descriptor instanceof UsbACTerminal) {
+                UsbACTerminal outDescr = (UsbACTerminal) descriptor;
                 if (outDescr.getTerminalType() == UsbTerminalTypes.TERMINAL_OUT_SPEAKER
                         || outDescr.getTerminalType()
                             == UsbTerminalTypes.TERMINAL_OUT_HEADPHONES
@@ -358,7 +387,7 @@
                     break;
                 }
             } else {
-                Log.w(TAG, "Undefined Audio Output terminal l:" + descriptor.getLength()
+                Log.w(TAG, "Undefined Audio Output terminal l: " + descriptor.getLength()
                         + " t:0x" + Integer.toHexString(descriptor.getType()));
             }
         }
@@ -381,6 +410,8 @@
      * to count on the peripheral being a headset.
      */
     public boolean isOutputHeadset() {
+        // TEMP
+        Log.i(TAG, "---- isOutputHeadset() prob:" + (getOutputHeadsetProbability() * 100f) + "%");
         return getOutputHeadsetProbability() >= OUT_HEADSET_TRIGGER;
     }
 
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java b/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java
index 90848ca..d5cb89e 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java
@@ -15,13 +15,20 @@
  */
 package com.android.server.usb.descriptors;
 
+import com.android.server.usb.descriptors.report.ReportCanvas;
+import com.android.server.usb.descriptors.report.UsbStrings;
+
 /**
  * @hide
  * A USB Device Descriptor.
  * see usb11.pdf section 9.6.1
  */
-/* public */ public class UsbDeviceDescriptor extends UsbDescriptor {
-    private static final String TAG = "Device";
+public final class UsbDeviceDescriptor extends UsbDescriptor {
+    private static final String TAG = "UsbDeviceDescriptor";
+
+    public static final int USBSPEC_1_0 = 0x0100;
+    public static final int USBSPEC_1_1 = 0x0110;
+    public static final int USBSPEC_2_0 = 0x0200;
 
     private int mSpec;          // 2:2 bcdUSB 2 BCD USB Specification Number - BCD
     private byte mDevClass;     // 4:1 class code
@@ -39,6 +46,7 @@
 
     UsbDeviceDescriptor(int length, byte type) {
         super(length, type);
+        mHierarchyLevel = 1;
     }
 
     public int getSpec() {
@@ -91,14 +99,14 @@
 
     @Override
     public int parseRawDescriptors(ByteStream stream) {
-        mSpec = stream.unpackUsbWord();
+        mSpec = stream.unpackUsbShort();
         mDevClass = stream.getByte();
         mDevSubClass = stream.getByte();
         mProtocol = stream.getByte();
         mPacketSize = stream.getByte();
-        mVendorID = stream.unpackUsbWord();
-        mProductID = stream.unpackUsbWord();
-        mDeviceRelease = stream.unpackUsbWord();
+        mVendorID = stream.unpackUsbShort();
+        mProductID = stream.unpackUsbShort();
+        mDeviceRelease = stream.unpackUsbShort();
         mMfgIndex = stream.getByte();
         mProductIndex = stream.getByte();
         mSerialNum = stream.getByte();
@@ -106,4 +114,35 @@
 
         return mLength;
     }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+
+        int spec = getSpec();
+        canvas.writeListItem("Spec: " + ReportCanvas.getBCDString(spec));
+
+        byte devClass = getDevClass();
+        String classStr = UsbStrings.getClassName(devClass);
+        byte devSubClass = getDevSubClass();
+        String subClasStr = UsbStrings.getClassName(devSubClass);
+        canvas.writeListItem("Class " + devClass + ": " + classStr + " Subclass"
+                + devSubClass + ": " + subClasStr);
+        canvas.writeListItem("Vendor ID: " + ReportCanvas.getHexString(getVendorID())
+                + " Product ID: " + ReportCanvas.getHexString(getProductID())
+                + " Product Release: " + ReportCanvas.getBCDString(getDeviceRelease()));
+
+        byte mfgIndex = getMfgIndex();
+        String manufacturer =
+                UsbDescriptor.getUsbDescriptorString(canvas.getConnection(), mfgIndex);
+        byte productIndex = getProductIndex();
+        String product =
+                UsbDescriptor.getUsbDescriptorString(canvas.getConnection(), productIndex);
+
+        canvas.writeListItem("Manufacturer " + mfgIndex + ": " + manufacturer
+                + " Product " + productIndex + ": " + product);
+        canvas.closeList();
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbEndpointDescriptor.java b/services/usb/java/com/android/server/usb/descriptors/UsbEndpointDescriptor.java
index def6700..6322fbe 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbEndpointDescriptor.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbEndpointDescriptor.java
@@ -15,36 +15,38 @@
  */
 package com.android.server.usb.descriptors;
 
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
 /**
  * @hide
  * A Usb Endpoint Descriptor.
  * see usb11.pdf section 9.6.4
  */
 public class UsbEndpointDescriptor extends UsbDescriptor {
-    private static final String TAG = "EndPoint";
+    private static final String TAG = "UsbEndpointDescriptor";
 
-    public static final byte MASK_ENDPOINT_ADDRESS     = 0b0001111;
-    public static final byte MASK_ENDPOINT_DIRECTION   = (byte) 0b10000000;
-    public static final byte DIRECTION_OUTPUT          = 0x00;
-    public static final byte DIRECTION_INPUT           = (byte) 0x80;
+    public static final byte MASK_ENDPOINT_ADDRESS = 0b0001111;
+    public static final byte MASK_ENDPOINT_DIRECTION = (byte) 0b10000000;
+    public static final byte DIRECTION_OUTPUT = 0x00;
+    public static final byte DIRECTION_INPUT = (byte) 0x80;
 
     public static final byte MASK_ATTRIBS_TRANSTYPE = 0b00000011;
-    public static final byte TRANSTYPE_CONTROL     = 0x00;
-    public static final byte TRANSTYPE_ISO         = 0x01;
-    public static final byte TRANSTYPE_BULK        = 0x02;
-    public static final byte TRANSTYPE_INTERRUPT   = 0x03;
+    public static final byte TRANSTYPE_CONTROL = 0x00;
+    public static final byte TRANSTYPE_ISO = 0x01;
+    public static final byte TRANSTYPE_BULK = 0x02;
+    public static final byte TRANSTYPE_INTERRUPT = 0x03;
 
-    public static final byte MASK_ATTRIBS_SYNCTYPE  = 0b00001100;
-    public static final byte SYNCTYPE_NONE          = 0b00000000;
-    public static final byte SYNCTYPE_ASYNC         = 0b00000100;
-    public static final byte SYNCTYPE_ADAPTSYNC     = 0b00001000;
-    public static final byte SYNCTYPE_RESERVED      = 0b00001100;
+    public static final byte MASK_ATTRIBS_SYNCTYPE = 0b00001100;
+    public static final byte SYNCTYPE_NONE = 0b00000000;
+    public static final byte SYNCTYPE_ASYNC = 0b00000100;
+    public static final byte SYNCTYPE_ADAPTSYNC = 0b00001000;
+    public static final byte SYNCTYPE_RESERVED = 0b00001100;
 
-    public static final byte MASK_ATTRIBS_USEAGE    = 0b00110000;
-    public static final byte USEAGE_DATA            = 0b00000000;
-    public static final byte USEAGE_FEEDBACK        = 0b00010000;
-    public static final byte USEAGE_EXPLICIT        = 0b00100000;
-    public static final byte USEAGE_RESERVED        = 0b00110000;
+    public static final byte MASK_ATTRIBS_USEAGE = 0b00110000;
+    public static final byte USEAGE_DATA = 0b00000000;
+    public static final byte USEAGE_FEEDBACK = 0b00010000;
+    public static final byte USEAGE_EXPLICIT = 0b00100000;
+    public static final byte USEAGE_RESERVED = 0b00110000;
 
     private byte mEndpointAddress;  // 2:1 Endpoint Address
                                     // Bits 0..3b Endpoint Number.
@@ -76,6 +78,7 @@
 
     public UsbEndpointDescriptor(int length, byte type) {
         super(length, type);
+        mHierarchyLevel = 4;
     }
 
     public byte getEndpointAddress() {
@@ -106,7 +109,7 @@
     public int parseRawDescriptors(ByteStream stream) {
         mEndpointAddress = stream.getByte();
         mAttributes = stream.getByte();
-        mPacketSize = stream.unpackUsbWord();
+        mPacketSize = stream.unpackUsbShort();
         mInterval = stream.getByte();
         if (mLength == 9) {
             mRefresh = stream.getByte();
@@ -114,4 +117,76 @@
         }
         return mLength;
     }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+
+        byte address = getEndpointAddress();
+        canvas.writeListItem("Address: "
+                + ReportCanvas.getHexString(address & UsbEndpointDescriptor.MASK_ENDPOINT_ADDRESS)
+                + ((address & UsbEndpointDescriptor.MASK_ENDPOINT_DIRECTION)
+                == UsbEndpointDescriptor.DIRECTION_OUTPUT ? " [out]" : " [in]"));
+
+        byte attributes = getAttributes();
+        canvas.openListItem();
+        canvas.write("Attributes: " + ReportCanvas.getHexString(attributes) + " ");
+        switch (attributes & UsbEndpointDescriptor.MASK_ATTRIBS_TRANSTYPE) {
+            case UsbEndpointDescriptor.TRANSTYPE_CONTROL:
+                canvas.write("Control");
+                break;
+            case UsbEndpointDescriptor.TRANSTYPE_ISO:
+                canvas.write("Iso");
+                break;
+            case UsbEndpointDescriptor.TRANSTYPE_BULK:
+                canvas.write("Bulk");
+                break;
+            case UsbEndpointDescriptor.TRANSTYPE_INTERRUPT:
+                canvas.write("Interrupt");
+                break;
+        }
+        canvas.closeListItem();
+
+        // These flags are only relevant for ISO transfer type
+        if ((attributes & UsbEndpointDescriptor.MASK_ATTRIBS_TRANSTYPE)
+                == UsbEndpointDescriptor.TRANSTYPE_ISO) {
+            canvas.openListItem();
+            canvas.write("Aync: ");
+            switch (attributes & UsbEndpointDescriptor.MASK_ATTRIBS_SYNCTYPE) {
+                case UsbEndpointDescriptor.SYNCTYPE_NONE:
+                    canvas.write("NONE");
+                    break;
+                case UsbEndpointDescriptor.SYNCTYPE_ASYNC:
+                    canvas.write("ASYNC");
+                    break;
+                case UsbEndpointDescriptor.SYNCTYPE_ADAPTSYNC:
+                    canvas.write("ADAPTIVE ASYNC");
+                    break;
+            }
+            canvas.closeListItem();
+
+            canvas.openListItem();
+            canvas.write("Useage: ");
+            switch (attributes & UsbEndpointDescriptor.MASK_ATTRIBS_USEAGE) {
+                case UsbEndpointDescriptor.USEAGE_DATA:
+                    canvas.write("DATA");
+                    break;
+                case UsbEndpointDescriptor.USEAGE_FEEDBACK:
+                    canvas.write("FEEDBACK");
+                    break;
+                case UsbEndpointDescriptor.USEAGE_EXPLICIT:
+                    canvas.write("EXPLICIT FEEDBACK");
+                    break;
+                case UsbEndpointDescriptor.USEAGE_RESERVED:
+                    canvas.write("RESERVED");
+                    break;
+            }
+            canvas.closeListItem();
+        }
+        canvas.writeListItem("Package Size: " + getPacketSize());
+        canvas.writeListItem("Interval: " + getInterval());
+        canvas.closeList();
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbHIDDescriptor.java b/services/usb/java/com/android/server/usb/descriptors/UsbHIDDescriptor.java
index 56c07ec..b4cc87e 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbHIDDescriptor.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbHIDDescriptor.java
@@ -15,13 +15,15 @@
  */
 package com.android.server.usb.descriptors;
 
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
 /**
  * @hide
  * A USB HID (Human Interface Descriptor).
  * see HID1_11.pdf - 6.2.1
  */
-public class UsbHIDDescriptor extends UsbDescriptor {
-    private static final String TAG = "HID";
+public final class UsbHIDDescriptor extends UsbDescriptor {
+    private static final String TAG = "UsbHIDDescriptor";
 
     private int mRelease;           // 2:2 the HID Class Specification release.
     private byte mCountryCode;      // 4:1 country code of the localized hardware.
@@ -35,6 +37,7 @@
 
     public UsbHIDDescriptor(int length, byte type) {
         super(length, type);
+        mHierarchyLevel = 3;
     }
 
     public int getRelease() {
@@ -59,12 +62,24 @@
 
     @Override
     public int parseRawDescriptors(ByteStream stream) {
-        mRelease = stream.unpackUsbWord();
+        mRelease = stream.unpackUsbShort();
         mCountryCode = stream.getByte();
         mNumDescriptors = stream.getByte();
         mDescriptorType = stream.getByte();
-        mDescriptorLen = stream.unpackUsbWord();
+        mDescriptorLen = stream.unpackUsbShort();
 
         return mLength;
     }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.openList();
+        canvas.writeListItem("Spec: " + ReportCanvas.getBCDString(getRelease()));
+        canvas.writeListItem("Type: " + ReportCanvas.getBCDString(getDescriptorType()));
+        canvas.writeListItem("" + getNumDescriptors() + " Descriptors Len: "
+                + getDescriptorLen());
+        canvas.closeList();
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbInterfaceAssoc.java b/services/usb/java/com/android/server/usb/descriptors/UsbInterfaceAssoc.java
index 4b18a01..d680e54 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbInterfaceAssoc.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbInterfaceAssoc.java
@@ -15,14 +15,16 @@
  */
 package com.android.server.usb.descriptors;
 
+// import com.android.server.usb.descriptors.report.ReportCanvas;
+
 /**
  * @hide
  * A USB Interface Association Descriptor.
  * found this one here: http://www.usb.org/developers/docs/whitepapers/iadclasscode_r10.pdf
  * also: https://msdn.microsoft.com/en-us/library/windows/hardware/ff540054(v=vs.85).aspx
  */
-public class UsbInterfaceAssoc extends UsbDescriptor {
-    private static final String TAG = "InterfaceAssoc";
+public final class UsbInterfaceAssoc extends UsbDescriptor {
+    private static final String TAG = "UsbInterfaceAssoc";
 
     private byte mFirstInterface;
     private byte mInterfaceCount;
@@ -70,4 +72,11 @@
 
         return mLength;
     }
+
+    // TODO - Report fields
+//    @Override
+//    public void report(ReportCanvas canvas) {
+//        super.report(canvas);
+//
+//    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbInterfaceDescriptor.java b/services/usb/java/com/android/server/usb/descriptors/UsbInterfaceDescriptor.java
index 21b5e0c..4eef6ca 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbInterfaceDescriptor.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbInterfaceDescriptor.java
@@ -15,13 +15,16 @@
  */
 package com.android.server.usb.descriptors;
 
+import com.android.server.usb.descriptors.report.ReportCanvas;
+import com.android.server.usb.descriptors.report.UsbStrings;
+
 /**
  * @hide
  * A common super-class for all USB Interface Descritor subtypes.
  * see usb11.pdf section 9.6.3
  */
 public class UsbInterfaceDescriptor extends UsbDescriptor {
-    private static final String TAG = "Interface";
+    private static final String TAG = "UsbInterfaceDescriptor";
 
     protected byte mInterfaceNumber;  // 2:1 Number of Interface
     protected byte mAlternateSetting; // 3:1 Value used to select alternative setting
@@ -33,6 +36,7 @@
 
     UsbInterfaceDescriptor(int length, byte type) {
         super(length, type);
+        mHierarchyLevel = 3;
     }
 
     @Override
@@ -75,4 +79,27 @@
     public byte getDescrIndex() {
         return mDescrIndex;
     }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        byte usbClass = getUsbClass();
+        byte usbSubclass = getUsbSubclass();
+        byte protocol = getProtocol();
+        String className = UsbStrings.getClassName(usbClass);
+        String subclassName = "";
+        if (usbClass == UsbDescriptor.CLASSID_AUDIO) {
+            subclassName = UsbStrings.getAudioSubclassName(usbSubclass);
+        }
+
+        canvas.openList();
+        canvas.writeListItem("Interface #" + getInterfaceNumber());
+        canvas.writeListItem("Class: " + ReportCanvas.getHexString(usbClass) + ": " + className);
+        canvas.writeListItem("Subclass: "
+                + ReportCanvas.getHexString(usbSubclass) + ": " + subclassName);
+        canvas.writeListItem("Protocol: " + protocol + ": " + ReportCanvas.getHexString(protocol));
+        canvas.writeListItem("Endpoints: " + getNumEndpoints());
+        canvas.closeList();
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbMSMidiHeader.java b/services/usb/java/com/android/server/usb/descriptors/UsbMSMidiHeader.java
index 4452b23..85a3e68 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbMSMidiHeader.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbMSMidiHeader.java
@@ -15,13 +15,15 @@
  */
 package com.android.server.usb.descriptors;
 
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
 /**
  * @hide
  * An audio class-specific Midi Streaming Interface.
  * see midi10.pdf section 6.1.2.1
  */
-public class UsbMSMidiHeader extends UsbACInterface {
-    private static final String TAG = "MSMidiHeader";
+public final class UsbMSMidiHeader extends UsbACInterface {
+    private static final String TAG = "UsbMSMidiHeader";
 
     public UsbMSMidiHeader(int length, byte type, byte subtype, byte subclass) {
         super(length, type, subtype, subclass);
@@ -33,4 +35,13 @@
         stream.advance(mLength - stream.getReadCount());
         return mLength;
     }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.writeHeader(3, "MS Midi Header: " + ReportCanvas.getHexString(getType())
+                + " SubType: " + ReportCanvas.getHexString(getSubclass())
+                + " Length: " + getLength());
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbMSMidiInputJack.java b/services/usb/java/com/android/server/usb/descriptors/UsbMSMidiInputJack.java
index 2d33ba7..1d5cbf2 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbMSMidiInputJack.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbMSMidiInputJack.java
@@ -15,13 +15,15 @@
  */
 package com.android.server.usb.descriptors;
 
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
 /**
  * @hide
  * An audio class-specific Midi Input Jack Interface.
  * see midi10.pdf section B.4.3
  */
-public class UsbMSMidiInputJack extends UsbACInterface {
-    private static final String TAG = "MSMidiInputJack";
+public final class UsbMSMidiInputJack extends UsbACInterface {
+    private static final String TAG = "UsbMSMidiInputJack";
 
     UsbMSMidiInputJack(int length, byte type, byte subtype, byte subclass) {
         super(length, type, subtype, subclass);
@@ -33,4 +35,13 @@
         stream.advance(mLength - stream.getReadCount());
         return mLength;
     }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.writeHeader(3, "MS Midi Input Jack: " + ReportCanvas.getHexString(getType())
+                + " SubType: " + ReportCanvas.getHexString(getSubclass())
+                + " Length: " + getLength());
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbMSMidiOutputJack.java b/services/usb/java/com/android/server/usb/descriptors/UsbMSMidiOutputJack.java
index bd2dc11..9f50240a 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbMSMidiOutputJack.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbMSMidiOutputJack.java
@@ -15,13 +15,15 @@
  */
 package com.android.server.usb.descriptors;
 
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
 /**
  * @hide
  * An audio class-specific Midi Output Jack Interface.
  * see midi10.pdf section B.4.4
  */
-public class UsbMSMidiOutputJack extends UsbACInterface {
-    private static final String TAG = "MSMidiOutputJack";
+public final class UsbMSMidiOutputJack extends UsbACInterface {
+    private static final String TAG = "UsbMSMidiOutputJack";
 
     public UsbMSMidiOutputJack(int length, byte type, byte subtype, byte subclass) {
         super(length, type, subtype, subclass);
@@ -33,4 +35,13 @@
         stream.advance(mLength - stream.getReadCount());
         return mLength;
     }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        super.report(canvas);
+
+        canvas.writeHeader(3, "MS Midi Output Jack: " + ReportCanvas.getHexString(getType())
+                + " SubType: " + ReportCanvas.getHexString(getSubclass())
+                + " Length: " + getLength());
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbTerminalTypes.java b/services/usb/java/com/android/server/usb/descriptors/UsbTerminalTypes.java
index b521462..9bd6cb9 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbTerminalTypes.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbTerminalTypes.java
@@ -20,8 +20,8 @@
  * A class for decoding information in Terminal Descriptors.
  * see termt10.pdf
  */
-public class UsbTerminalTypes {
-    private static final String TAG = "TerminalTypes";
+public final class UsbTerminalTypes {
+    private static final String TAG = "UsbTerminalTypes";
 
     // USB
     public static final int TERMINAL_USB_STREAMING   = 0x0101;
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbUnknown.java b/services/usb/java/com/android/server/usb/descriptors/UsbUnknown.java
index a6fe8bb..6e6dccf 100644
--- a/services/usb/java/com/android/server/usb/descriptors/UsbUnknown.java
+++ b/services/usb/java/com/android/server/usb/descriptors/UsbUnknown.java
@@ -19,8 +19,8 @@
  * @hide
  * A holder for any unrecognized descriptor encountered in the descriptor stream.
  */
-public class UsbUnknown extends UsbDescriptor {
-    static final String TAG = "Unknown";
+public final class UsbUnknown extends UsbDescriptor {
+    static final String TAG = "UsbUnknown";
 
     public UsbUnknown(int length, byte type) {
         super(length, type);
diff --git a/services/usb/java/com/android/server/usb/descriptors/report/HTMLReportCanvas.java b/services/usb/java/com/android/server/usb/descriptors/report/HTMLReportCanvas.java
new file mode 100644
index 0000000..99ebcca
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/report/HTMLReportCanvas.java
@@ -0,0 +1,97 @@
+/*
+ * 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.usb.descriptors.report;
+
+import android.hardware.usb.UsbDeviceConnection;
+
+/**
+ * @hide
+ * A concrete implementation of ReportCanvas class which generates HTML.
+ */
+public final class HTMLReportCanvas extends ReportCanvas {
+    private static final String TAG = "HTMLReportCanvas";
+
+    private final StringBuilder mStringBuilder;
+
+    /**
+     * Constructor. Connects HTML output to the provided StringBuilder.
+     * @param connection    The USB connection object used to retrieve strings
+     * from the USB device.
+     * @param stringBuilder Generated output gets written into this object.
+     */
+    public HTMLReportCanvas(UsbDeviceConnection connection, StringBuilder stringBuilder) {
+        super(connection);
+
+        mStringBuilder = stringBuilder;
+    }
+
+    @Override
+    public void write(String text) {
+        mStringBuilder.append(text);
+    }
+
+    @Override
+    public void openHeader(int level) {
+        mStringBuilder.append("<h").append(level).append('>');
+    }
+
+    @Override
+    public void closeHeader(int level) {
+        mStringBuilder.append("</h").append(level).append('>');
+    }
+
+    // we can be cleverer (more clever?) with styles, but this will do for now.
+    @Override
+    public void openParagraph(boolean emphasis) {
+        if (emphasis) {
+            mStringBuilder.append("<p style=\"color:red\">");
+        } else {
+            mStringBuilder.append("<p>");
+        }
+    }
+
+    @Override
+    public void closeParagraph() {
+        mStringBuilder.append("</p>");
+    }
+
+    @Override
+    public void writeParagraph(String text, boolean inRed) {
+        openParagraph(inRed);
+        mStringBuilder.append(text);
+        closeParagraph();
+    }
+
+    @Override
+    public void openList() {
+        mStringBuilder.append("<ul>");
+    }
+
+    @Override
+    public void closeList() {
+        mStringBuilder.append("</ul>");
+    }
+
+    @Override
+    public void openListItem() {
+        mStringBuilder.append("<li>");
+    }
+
+    @Override
+    public void closeListItem() {
+        mStringBuilder.append("</li>");
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/report/HTMLReporter.java b/services/usb/java/com/android/server/usb/descriptors/report/HTMLReporter.java
deleted file mode 100644
index c98789d..0000000
--- a/services/usb/java/com/android/server/usb/descriptors/report/HTMLReporter.java
+++ /dev/null
@@ -1,572 +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.usb.descriptors.report;
-
-import android.hardware.usb.UsbDeviceConnection;
-
-import com.android.server.usb.descriptors.UsbACAudioControlEndpoint;
-import com.android.server.usb.descriptors.UsbACAudioStreamEndpoint;
-import com.android.server.usb.descriptors.UsbACFeatureUnit;
-import com.android.server.usb.descriptors.UsbACHeader;
-import com.android.server.usb.descriptors.UsbACInputTerminal;
-import com.android.server.usb.descriptors.UsbACInterface;
-import com.android.server.usb.descriptors.UsbACMidiEndpoint;
-import com.android.server.usb.descriptors.UsbACMixerUnit;
-import com.android.server.usb.descriptors.UsbACOutputTerminal;
-import com.android.server.usb.descriptors.UsbACSelectorUnit;
-import com.android.server.usb.descriptors.UsbACTerminal;
-import com.android.server.usb.descriptors.UsbASFormat;
-import com.android.server.usb.descriptors.UsbASFormatI;
-import com.android.server.usb.descriptors.UsbASFormatII;
-import com.android.server.usb.descriptors.UsbASGeneral;
-import com.android.server.usb.descriptors.UsbConfigDescriptor;
-import com.android.server.usb.descriptors.UsbDescriptor;
-import com.android.server.usb.descriptors.UsbDeviceDescriptor;
-import com.android.server.usb.descriptors.UsbEndpointDescriptor;
-import com.android.server.usb.descriptors.UsbHIDDescriptor;
-import com.android.server.usb.descriptors.UsbInterfaceAssoc;
-import com.android.server.usb.descriptors.UsbInterfaceDescriptor;
-import com.android.server.usb.descriptors.UsbMSMidiHeader;
-import com.android.server.usb.descriptors.UsbMSMidiInputJack;
-import com.android.server.usb.descriptors.UsbMSMidiOutputJack;
-import com.android.server.usb.descriptors.UsbUnknown;
-
-/**
- * Implements the Reporter inteface to provide HTML reporting for UsbDescriptor subclasses.
- */
-public class HTMLReporter implements Reporter {
-    private final StringBuilder mStringBuilder;
-    private final UsbDeviceConnection mConnection;
-
-    public HTMLReporter(StringBuilder stringBuilder, UsbDeviceConnection connection) {
-        mStringBuilder = stringBuilder;
-        mConnection = connection;
-    }
-
-    /*
-     * HTML Helpers
-     */
-    private void writeHeader(int level, String text) {
-        mStringBuilder
-                .append("<h").append(level).append('>')
-                .append(text)
-                .append("</h").append(level).append('>');
-    }
-
-    private void openParagraph() {
-        mStringBuilder.append("<p>");
-    }
-
-    private void closeParagraph() {
-        mStringBuilder.append("</p>");
-    }
-
-    private void writeParagraph(String text) {
-        openParagraph();
-        mStringBuilder.append(text);
-        closeParagraph();
-    }
-
-    private void openList() {
-        mStringBuilder.append("<ul>");
-    }
-
-    private void closeList() {
-        mStringBuilder.append("</ul>");
-    }
-
-    private void openListItem() {
-        mStringBuilder.append("<li>");
-    }
-
-    private void closeListItem() {
-        mStringBuilder.append("</li>");
-    }
-
-    private void writeListItem(String text) {
-        openListItem();
-        mStringBuilder.append(text);
-        closeListItem();
-    }
-
-    /*
-     * Data Formating Helpers
-     */
-    private static String getHexString(byte value) {
-        return "0x" + Integer.toHexString(((int) value) & 0xFF).toUpperCase();
-    }
-
-    private static String getBCDString(int value) {
-        int major = value >> 8;
-        int minor = (value >> 4) & 0x0F;
-        int subminor = value & 0x0F;
-
-        return "" + major + "." + minor + subminor;
-    }
-
-    private static String getHexString(int value) {
-        int intValue = value & 0xFFFF;
-        return "0x" + Integer.toHexString(intValue).toUpperCase();
-    }
-
-    private void dumpHexArray(byte[] rawData, StringBuilder builder) {
-        if (rawData != null) {
-            // Assume the type and Length and perhaps sub-type have been displayed
-            openParagraph();
-            for (int index = 0; index < rawData.length; index++) {
-                builder.append(getHexString(rawData[index]) + " ");
-            }
-            closeParagraph();
-        }
-    }
-
-    /**
-     * Decode ACTUAL UsbDescriptor sub classes and call type-specific report methods.
-     */
-    @Override
-    public void report(UsbDescriptor descriptor) {
-        if (descriptor instanceof UsbDeviceDescriptor) {
-            tsReport((UsbDeviceDescriptor) descriptor);
-        } else if (descriptor instanceof UsbConfigDescriptor) {
-            tsReport((UsbConfigDescriptor) descriptor);
-        } else if (descriptor instanceof UsbInterfaceDescriptor) {
-            tsReport((UsbInterfaceDescriptor) descriptor);
-        } else if (descriptor instanceof UsbEndpointDescriptor) {
-            tsReport((UsbEndpointDescriptor) descriptor);
-        } else if (descriptor instanceof UsbHIDDescriptor) {
-            tsReport((UsbHIDDescriptor) descriptor);
-        } else if (descriptor instanceof UsbACAudioControlEndpoint) {
-            tsReport((UsbACAudioControlEndpoint) descriptor);
-        } else if (descriptor instanceof UsbACAudioStreamEndpoint) {
-            tsReport((UsbACAudioStreamEndpoint) descriptor);
-        } else if (descriptor instanceof UsbACHeader) {
-            tsReport((UsbACHeader) descriptor);
-        } else if (descriptor instanceof UsbACFeatureUnit) {
-            tsReport((UsbACFeatureUnit) descriptor);
-        } else if (descriptor instanceof UsbACInputTerminal) {
-            tsReport((UsbACInputTerminal) descriptor);
-        } else if (descriptor instanceof UsbACOutputTerminal) {
-            tsReport((UsbACOutputTerminal) descriptor);
-        } else if (descriptor instanceof UsbACMidiEndpoint) {
-            tsReport((UsbACMidiEndpoint) descriptor);
-        } else if (descriptor instanceof UsbACMixerUnit) {
-            tsReport((UsbACMixerUnit) descriptor);
-        } else if (descriptor instanceof UsbACSelectorUnit) {
-            tsReport((UsbACSelectorUnit) descriptor);
-        } else if (descriptor instanceof UsbASFormatI) {
-            tsReport((UsbASFormatI) descriptor);
-        } else if (descriptor instanceof UsbASFormatII) {
-            tsReport((UsbASFormatII) descriptor);
-        } else if (descriptor instanceof UsbASFormat) {
-            tsReport((UsbASFormat) descriptor);
-        } else if (descriptor instanceof UsbASGeneral) {
-            tsReport((UsbASGeneral) descriptor);
-        } else if (descriptor instanceof UsbInterfaceAssoc) {
-            tsReport((UsbInterfaceAssoc) descriptor);
-        } else if (descriptor instanceof UsbMSMidiHeader) {
-            tsReport((UsbMSMidiHeader) descriptor);
-        } else if (descriptor instanceof UsbMSMidiInputJack) {
-            tsReport((UsbMSMidiInputJack) descriptor);
-        } else if (descriptor instanceof UsbMSMidiOutputJack) {
-            tsReport((UsbMSMidiOutputJack) descriptor);
-        } else if (descriptor instanceof UsbUnknown) {
-            tsReport((UsbUnknown) descriptor);
-        } else if (descriptor instanceof UsbACInterface) {
-            tsReport((UsbACInterface) descriptor);
-        } else if (descriptor instanceof UsbDescriptor) {
-            tsReport((UsbDescriptor) descriptor);
-        }
-    }
-
-    //
-    // Type-specific report() implementations
-    //
-    private void tsReport(UsbDescriptor descriptor) {
-        int length = descriptor.getLength();
-        byte type = descriptor.getType();
-        int status = descriptor.getStatus();
-
-        String descTypeStr = UsbStrings.getDescriptorName(type);
-        writeParagraph(descTypeStr + ":" + type + " l:" + length + " s:" + status);
-    }
-
-    private void tsReport(UsbDeviceDescriptor descriptor) {
-        writeHeader(1, "Device len:" + descriptor.getLength());
-        openList();
-
-        int spec = descriptor.getSpec();
-        writeListItem("spec:" + getBCDString(spec));
-
-        byte devClass = descriptor.getDevClass();
-        String classStr = UsbStrings.getClassName(devClass);
-        byte devSubClass = descriptor.getDevSubClass();
-        String subClasStr = UsbStrings.getClassName(devSubClass);
-        writeListItem("class " + devClass + ":" + classStr + " subclass"
-                + devSubClass + ":" + subClasStr);
-        writeListItem("vendorID:" + descriptor.getVendorID()
-                + " prodID:" + descriptor.getProductID()
-                + " prodRel:" + getBCDString(descriptor.getDeviceRelease()));
-
-        byte mfgIndex = descriptor.getMfgIndex();
-        String manufacturer = UsbDescriptor.getUsbDescriptorString(mConnection, mfgIndex);
-        byte productIndex = descriptor.getProductIndex();
-        String product = UsbDescriptor.getUsbDescriptorString(mConnection, productIndex);
-
-        writeListItem("mfg " + mfgIndex + ":" + manufacturer
-                + " prod " + productIndex + ":" + product);
-        closeList();
-    }
-
-    private void tsReport(UsbConfigDescriptor descriptor) {
-        writeHeader(2, "Config #" + descriptor.getConfigValue()
-                + " len:" + descriptor.getLength());
-
-        openList();
-        writeListItem(descriptor.getNumInterfaces() + " interfaces.");
-        writeListItem("attribs:" + getHexString(descriptor.getAttribs()));
-        closeList();
-    }
-
-    private void tsReport(UsbInterfaceDescriptor descriptor) {
-        byte usbClass = descriptor.getUsbClass();
-        byte usbSubclass = descriptor.getUsbSubclass();
-        String descr = UsbStrings.getDescriptorName(descriptor.getType());
-        String className = UsbStrings.getClassName(usbClass);
-        String subclassName = "";
-        if (usbClass == UsbDescriptor.CLASSID_AUDIO) {
-            subclassName = UsbStrings.getAudioSubclassName(usbSubclass);
-        }
-
-        writeHeader(2, descr + " #" + descriptor.getInterfaceNumber()
-                        + " len:" + descriptor.getLength());
-        String descrStr =
-                UsbDescriptor.getUsbDescriptorString(mConnection, descriptor.getDescrIndex());
-        if (descrStr.length() > 0) {
-            mStringBuilder.append("<br>" + descrStr);
-        }
-        openList();
-        writeListItem("class " + getHexString(usbClass) + ":" + className
-                + " subclass " + getHexString(usbSubclass) + ":" + subclassName);
-        writeListItem(""  + descriptor.getNumEndpoints() + " endpoints");
-        closeList();
-    }
-
-    private void tsReport(UsbEndpointDescriptor descriptor) {
-        writeHeader(3, "Endpoint " + getHexString(descriptor.getType())
-                + " len:" + descriptor.getLength());
-        openList();
-
-        byte address = descriptor.getEndpointAddress();
-        writeListItem("address:"
-                + getHexString(address & UsbEndpointDescriptor.MASK_ENDPOINT_ADDRESS)
-                + ((address & UsbEndpointDescriptor.MASK_ENDPOINT_DIRECTION)
-                        == UsbEndpointDescriptor.DIRECTION_OUTPUT ? " [out]" : " [in]"));
-
-        byte attributes = descriptor.getAttributes();
-        openListItem();
-        mStringBuilder.append("attribs:" + getHexString(attributes) + " ");
-        switch (attributes & UsbEndpointDescriptor.MASK_ATTRIBS_TRANSTYPE) {
-            case UsbEndpointDescriptor.TRANSTYPE_CONTROL:
-                mStringBuilder.append("Control");
-                break;
-            case UsbEndpointDescriptor.TRANSTYPE_ISO:
-                mStringBuilder.append("Iso");
-                break;
-            case UsbEndpointDescriptor.TRANSTYPE_BULK:
-                mStringBuilder.append("Bulk");
-                break;
-            case UsbEndpointDescriptor.TRANSTYPE_INTERRUPT:
-                mStringBuilder.append("Interrupt");
-                break;
-        }
-        closeListItem();
-
-        // These flags are only relevant for ISO transfer type
-        if ((attributes & UsbEndpointDescriptor.MASK_ATTRIBS_TRANSTYPE)
-                == UsbEndpointDescriptor.TRANSTYPE_ISO) {
-            openListItem();
-            mStringBuilder.append("sync:");
-            switch (attributes & UsbEndpointDescriptor.MASK_ATTRIBS_SYNCTYPE) {
-                case UsbEndpointDescriptor.SYNCTYPE_NONE:
-                    mStringBuilder.append("NONE");
-                    break;
-                case UsbEndpointDescriptor.SYNCTYPE_ASYNC:
-                    mStringBuilder.append("ASYNC");
-                    break;
-                case UsbEndpointDescriptor.SYNCTYPE_ADAPTSYNC:
-                    mStringBuilder.append("ADAPTIVE ASYNC");
-                    break;
-            }
-            closeListItem();
-
-            openListItem();
-            mStringBuilder.append("useage:");
-            switch (attributes & UsbEndpointDescriptor.MASK_ATTRIBS_USEAGE) {
-                case UsbEndpointDescriptor.USEAGE_DATA:
-                    mStringBuilder.append("DATA");
-                    break;
-                case UsbEndpointDescriptor.USEAGE_FEEDBACK:
-                    mStringBuilder.append("FEEDBACK");
-                    break;
-                case UsbEndpointDescriptor.USEAGE_EXPLICIT:
-                    mStringBuilder.append("EXPLICIT FEEDBACK");
-                    break;
-                case UsbEndpointDescriptor.USEAGE_RESERVED:
-                    mStringBuilder.append("RESERVED");
-                    break;
-            }
-            closeListItem();
-        }
-        writeListItem("package size:" + descriptor.getPacketSize());
-        writeListItem("interval:" + descriptor.getInterval());
-        closeList();
-    }
-
-    private void tsReport(UsbHIDDescriptor descriptor) {
-        String descr = UsbStrings.getDescriptorName(descriptor.getType());
-        writeHeader(2, descr + " len:" + descriptor.getLength());
-        openList();
-        writeListItem("spec:" + getBCDString(descriptor.getRelease()));
-        writeListItem("type:" + getBCDString(descriptor.getDescriptorType()));
-        writeListItem("descriptor.getNumDescriptors()  descriptors len:"
-                + descriptor.getDescriptorLen());
-        closeList();
-    }
-
-    private void tsReport(UsbACAudioControlEndpoint descriptor) {
-        writeHeader(3, "AC Audio Control Endpoint:" + getHexString(descriptor.getType())
-                + " length:" + descriptor.getLength());
-    }
-
-    private void tsReport(UsbACAudioStreamEndpoint descriptor) {
-        writeHeader(3, "AC Audio Streaming Endpoint:"
-                + getHexString(descriptor.getType())
-                + " length:" + descriptor.getLength());
-    }
-
-    private void tsReport(UsbACHeader descriptor) {
-        tsReport((UsbACInterface) descriptor);
-
-        openList();
-        writeListItem("spec:" + getBCDString(descriptor.getADCRelease()));
-        int numInterfaces = descriptor.getNumInterfaces();
-        writeListItem("" + numInterfaces + " interfaces");
-        if (numInterfaces > 0) {
-            openListItem();
-            mStringBuilder.append("[");
-            byte[] interfaceNums = descriptor.getInterfaceNums();
-            if (numInterfaces != 0 && interfaceNums != null) {
-                for (int index = 0; index < numInterfaces; index++) {
-                    mStringBuilder.append("" + interfaceNums[index]);
-                    if (index < numInterfaces - 1) {
-                        mStringBuilder.append(" ");
-                    }
-                }
-            }
-            mStringBuilder.append("]");
-            closeListItem();
-        }
-        writeListItem("controls:" + getHexString(descriptor.getControls()));
-        closeList();
-    }
-
-    private void tsReport(UsbACFeatureUnit descriptor) {
-        tsReport((UsbACInterface) descriptor);
-    }
-
-    private void tsReport(UsbACInterface descriptor) {
-        String subClassName =
-                descriptor.getSubclass() == UsbDescriptor.AUDIO_AUDIOCONTROL
-                        ? "AC Control"
-                        : "AC Streaming";
-        byte subtype = descriptor.getSubtype();
-        String subTypeStr = UsbStrings.getACControlInterfaceName(subtype);
-        writeHeader(4, subClassName + " - " + getHexString(subtype)
-                + ":" + subTypeStr + " len:" + descriptor.getLength());
-    }
-
-    private void tsReport(UsbACTerminal descriptor) {
-        tsReport((UsbACInterface) descriptor);
-    }
-
-    private void tsReport(UsbACInputTerminal descriptor) {
-        tsReport((UsbACTerminal) descriptor);
-
-        openList();
-        writeListItem("ID:" + getHexString(descriptor.getTerminalID()));
-        int terminalType = descriptor.getTerminalType();
-        writeListItem("Type:<b>" + getHexString(terminalType) + ":"
-                + UsbStrings.getTerminalName(terminalType) + "</b>");
-        writeListItem("AssocTerminal:" + getHexString(descriptor.getAssocTerminal()));
-        writeListItem("" + descriptor.getNrChannels() + " chans. config:"
-                + getHexString(descriptor.getChannelConfig()));
-        closeList();
-    }
-
-    private void tsReport(UsbACOutputTerminal descriptor) {
-        tsReport((UsbACTerminal) descriptor);
-
-        openList();
-        writeListItem("ID:" + getHexString(descriptor.getTerminalID()));
-        int terminalType = descriptor.getTerminalType();
-        writeListItem("Type:<b>" + getHexString(terminalType) + ":"
-                + UsbStrings.getTerminalName(terminalType) + "</b>");
-        writeListItem("AssocTerminal:" + getHexString(descriptor.getAssocTerminal()));
-        writeListItem("Source:" + getHexString(descriptor.getSourceID()));
-        closeList();
-    }
-
-    private void tsReport(UsbACMidiEndpoint descriptor) {
-        writeHeader(3, "AC Midi Endpoint:" + getHexString(descriptor.getType())
-                + " length:" + descriptor.getLength());
-        openList();
-        writeListItem("" + descriptor.getNumJacks() + " jacks.");
-        closeList();
-    }
-
-    private void tsReport(UsbACMixerUnit descriptor) {
-        tsReport((UsbACInterface) descriptor);
-        openList();
-
-        writeListItem("Unit ID:" + getHexString(descriptor.getUnitID()));
-        byte numInputs = descriptor.getNumInputs();
-        byte[] inputIDs = descriptor.getInputIDs();
-        openListItem();
-        mStringBuilder.append("Num Inputs:" + numInputs + " [");
-        for (int input = 0; input < numInputs; input++) {
-            mStringBuilder.append("" + getHexString(inputIDs[input]));
-            if (input < numInputs - 1) {
-                mStringBuilder.append(" ");
-            }
-        }
-        mStringBuilder.append("]");
-        closeListItem();
-
-        writeListItem("Num Outputs:" + descriptor.getNumOutputs());
-        writeListItem("Chan Config:" + getHexString(descriptor.getChannelConfig()));
-
-        byte[] controls = descriptor.getControls();
-        openListItem();
-        mStringBuilder.append("controls:" + controls.length + " [");
-        for (int ctrl = 0; ctrl < controls.length; ctrl++) {
-            mStringBuilder.append("" + controls[ctrl]);
-            if (ctrl < controls.length - 1) {
-                mStringBuilder.append(" ");
-            }
-        }
-        mStringBuilder.append("]");
-        closeListItem();
-        closeList();
-        // byte mChanNameID; // First channel name string descriptor ID
-        // byte mNameID;       // string descriptor ID of mixer name
-    }
-
-    private void tsReport(UsbACSelectorUnit descriptor) {
-        tsReport((UsbACInterface) descriptor);
-    }
-
-    private void tsReport(UsbASFormat descriptor) {
-        writeHeader(4, "AC Streaming Format "
-                + (descriptor.getFormatType() ==  UsbASFormat.FORMAT_TYPE_I  ? "I" : "II")
-                + " - " + getHexString(descriptor.getSubtype()) + ":"
-                + " len:" + descriptor.getLength());
-    }
-
-    private void tsReport(UsbASFormatI descriptor) {
-        tsReport((UsbASFormat) descriptor);
-        openList();
-        writeListItem("chans:" + descriptor.getNumChannels());
-        writeListItem("subframe size:" + descriptor.getSubframeSize());
-        writeListItem("bit resolution:" + descriptor.getBitResolution());
-        byte sampleFreqType = descriptor.getSampleFreqType();
-        int[] sampleRates = descriptor.getSampleRates();
-        writeListItem("sample freq type:" + sampleFreqType);
-        if (sampleFreqType == 0) {
-            openList();
-            writeListItem("min:" + sampleRates[0]);
-            writeListItem("max:" + sampleRates[1]);
-            closeList();
-        } else {
-            openList();
-            for (int index = 0; index < sampleFreqType; index++) {
-                writeListItem("" + sampleRates[index]);
-            }
-            closeList();
-        }
-        closeList();
-    }
-
-    private void tsReport(UsbASFormatII descriptor) {
-        tsReport((UsbASFormat) descriptor);
-        openList();
-        writeListItem("max bit rate:" + descriptor.getMaxBitRate());
-        writeListItem("samples per frame:" + descriptor.getMaxBitRate());
-        byte sampleFreqType = descriptor.getSamFreqType();
-        int[] sampleRates = descriptor.getSampleRates();
-        writeListItem("sample freq type:" + sampleFreqType);
-        if (sampleFreqType == 0) {
-            openList();
-            writeListItem("min:" + sampleRates[0]);
-            writeListItem("max:" + sampleRates[1]);
-            closeList();
-        } else {
-            openList();
-            for (int index = 0; index < sampleFreqType; index++) {
-                writeListItem("" + sampleRates[index]);
-            }
-            closeList();
-        }
-
-        closeList();
-    }
-
-    private void tsReport(UsbASGeneral descriptor) {
-        tsReport((UsbACInterface) descriptor);
-        openList();
-        int formatTag = descriptor.getFormatTag();
-        writeListItem("fmt:" + UsbStrings.getAudioFormatName(formatTag) + " - "
-                + getHexString(formatTag));
-        closeList();
-    }
-
-    private void tsReport(UsbInterfaceAssoc descriptor) {
-        tsReport((UsbDescriptor) descriptor);
-    }
-
-    private void tsReport(UsbMSMidiHeader descriptor) {
-        writeHeader(3, "MS Midi Header:" + getHexString(descriptor.getType())
-                + " subType:" + getHexString(descriptor.getSubclass())
-                + " length:" + descriptor.getSubclass());
-    }
-
-    private void tsReport(UsbMSMidiInputJack descriptor) {
-        writeHeader(3, "MS Midi Input Jack:" + getHexString(descriptor.getType())
-                + " subType:" + getHexString(descriptor.getSubclass())
-                + " length:" + descriptor.getSubclass());
-    }
-
-    private void tsReport(UsbMSMidiOutputJack descriptor) {
-        writeHeader(3, "MS Midi Output Jack:" + getHexString(descriptor.getType())
-                + " subType:" + getHexString(descriptor.getSubclass())
-                + " length:" + descriptor.getSubclass());
-    }
-
-    private void tsReport(UsbUnknown descriptor) {
-        writeParagraph("<i><b>Unknown Descriptor " + getHexString(descriptor.getType())
-                + " len:" + descriptor.getLength() + "</b></i>");
-        dumpHexArray(descriptor.getRawData(), mStringBuilder);
-    }
-}
diff --git a/services/usb/java/com/android/server/usb/descriptors/report/ReportCanvas.java b/services/usb/java/com/android/server/usb/descriptors/report/ReportCanvas.java
new file mode 100644
index 0000000..9e0adf5
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/report/ReportCanvas.java
@@ -0,0 +1,174 @@
+/*
+ * 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.usb.descriptors.report;
+
+import android.hardware.usb.UsbDeviceConnection;
+
+/**
+ * @hide
+ * Defines a class for generating report data in a variety of potential formats.
+ */
+public abstract class ReportCanvas {
+    private static final String TAG = "ReportCanvas";
+
+    private final UsbDeviceConnection mConnection;
+
+    /**
+     * Constructor.
+     * @param connection    The USB connection object used to retrieve strings
+     * from the USB device.
+     */
+    public ReportCanvas(UsbDeviceConnection connection) {
+        mConnection = connection;
+    }
+
+    /**
+     * @returns the UsbDeviceConnection member (mConnection).
+     */
+    public UsbDeviceConnection getConnection() {
+        return mConnection;
+    }
+
+    /**
+     * Writes a plain string to the output.
+     */
+    public abstract void write(String text);
+
+    /**
+     * Opens a "header" formatted section in the output.
+     * @param level Specifies the logical level of the header.
+     */
+    public abstract void openHeader(int level);
+
+    /**
+     * Closes a "header" formatted section in the output.
+     * @param level Specifies the logical level of the header.
+     */
+    public abstract void closeHeader(int level);
+
+    /**
+     * Writes a "header" formatted string to the output.
+     * @param level Specifies the logical level of the header.
+     * @param text  Specifies the text to display in the header.
+     */
+    public void writeHeader(int level, String text) {
+        openHeader(level);
+        write(text);
+        closeHeader(level);
+    }
+
+    /**
+     * Opens a paragraph construct in the output.
+     * @param emphasis Specifies whether the text in the paragraph should
+     * be displayed with "emphasis" formatting.
+     */
+    public abstract void openParagraph(boolean emphasis);
+
+    /**
+     * Closes a paragraph construct in the output.
+     */
+    public abstract void closeParagraph();
+
+    /**
+     * Writes a paragraph construct to the output.
+     * @param text  The text to display with "paragraph" formatting.
+     * @param emphasis Specifies whether the text in the paragraph should
+     * be displayed with "emphasis" formatting.
+     */
+    public abstract void writeParagraph(String text, boolean emphasis);
+
+    /**
+     * Opens a "list" formatted section in the output.
+     */
+    public abstract void openList();
+
+    /**
+     * Closes a "list" formatted section in the output.
+     */
+    public abstract void closeList();
+
+    /**
+     * Opens a "list item" formatted section in the output.
+     */
+    public abstract void openListItem();
+
+    /**
+     * Closes a "list item" formatted section in the output.
+     */
+    public abstract void closeListItem();
+
+    /**
+     * Writes a "list item" formatted section in the output.
+     * @param text  Specifies the text of the list item.
+     */
+    public void writeListItem(String text) {
+        openListItem();
+        write(text);
+        closeListItem();
+    }
+
+    /*
+     * Data Formating Helpers
+     */
+    /**
+     * Generates a hex representation of the specified byte value.
+     * @param value The value to format.
+     */
+    //TODO Look into renaming the "getHexString()" functions to be more
+    // representative of the types they handle.
+    public static String getHexString(byte value) {
+        return "0x" + Integer.toHexString(((int) value) & 0xFF).toUpperCase();
+    }
+
+    /**
+     * Generates a string representing a USB Binary-Coded Decimal value.
+     * @param valueBCD The value to format.
+     */
+    public static String getBCDString(int valueBCD) {
+        int major = (valueBCD >> 8) & 0x0F;
+        int minor = (valueBCD >> 4) & 0x0F;
+        int subminor = valueBCD & 0x0F;
+
+        return "" + major + "." + minor + subminor;
+    }
+
+    /**
+     * Generates a hex representation of the specified 16-bit integer value.
+     * @param value The value to format.
+     */
+    //TODO Look into renaming the "getHexString()" functions to be more
+    // representative of the types they handle.
+    public static String getHexString(int value) {
+        int intValue = value & 0xFFFF;
+        return "0x" + Integer.toHexString(intValue).toUpperCase();
+    }
+
+    /**
+     * Writes out the specified byte array to the provided StringBuilder.
+     * @param rawData   The byte values.
+     * @param builder The StringBuilder to write text into.
+     */
+    public void dumpHexArray(byte[] rawData, StringBuilder builder) {
+        if (rawData != null) {
+            // Assume the type and Length and perhaps sub-type have been displayed
+            openParagraph(false);
+            for (int index = 0; index < rawData.length; index++) {
+                builder.append(getHexString(rawData[index]) + " ");
+            }
+            closeParagraph();
+        }
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/report/Reporter.java b/services/usb/java/com/android/server/usb/descriptors/report/Reporter.java
deleted file mode 100644
index 2944c10..0000000
--- a/services/usb/java/com/android/server/usb/descriptors/report/Reporter.java
+++ /dev/null
@@ -1,40 +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.usb.descriptors.report;
-
-import com.android.server.usb.descriptors.UsbDescriptor;
-
-/**
- * Declares the Reporter interface to provide HTML reporting for UsbDescriptor (sub)classes.
- *
- * NOTE: It is the responsibility of the implementor of this interface to correctly
- * interpret/decode the SPECIFIC UsbDescriptor subclass (perhaps with 'instanceof') that is
- * passed and handle that in the appropriate manner. This appears to be a
- * not very object-oriented approach, and that is true. This approach DOES however move the
- * complexity and 'plumbing' of reporting into the Reporter implementation and avoids needing
- * a (trivial) type-specific call to 'report()' in each UsbDescriptor (sub)class, instead
- * having just one in the top-level UsbDescriptor class. It also removes the need to add new
- * type-specific 'report()' methods to be added to Reporter interface whenever a
- * new UsbDescriptor subclass is defined. This seems like a pretty good trade-off.
- *
- * See HTMLReporter.java in this package for an example of type decoding.
- */
-public interface Reporter {
-    /**
-     * Generate report for this UsbDescriptor descriptor
-     */
-    void report(UsbDescriptor descriptor);
-}
diff --git a/services/usb/java/com/android/server/usb/descriptors/report/Reporting.java b/services/usb/java/com/android/server/usb/descriptors/report/Reporting.java
index c13111b..be7c12e 100644
--- a/services/usb/java/com/android/server/usb/descriptors/report/Reporting.java
+++ b/services/usb/java/com/android/server/usb/descriptors/report/Reporting.java
@@ -16,12 +16,16 @@
 package com.android.server.usb.descriptors.report;
 
 /**
- * Declares the interface for classes that provide reporting functionality.
- * (This is the double-indirection aspect of the "Visitor" pattern.
+ * @hide
  */
 public interface Reporting {
     /**
-     * Declares the report method that UsbDescriptor subclasses call.
+     * TBD
      */
-    void report(Reporter reporter);
+    void report(ReportCanvas canvas);
+
+    /**
+     * TBD
+     */
+    void shortReport(ReportCanvas canvas);
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/report/TextReportCanvas.java b/services/usb/java/com/android/server/usb/descriptors/report/TextReportCanvas.java
new file mode 100644
index 0000000..a43569d
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/report/TextReportCanvas.java
@@ -0,0 +1,106 @@
+/*
+ * 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.usb.descriptors.report;
+
+import android.hardware.usb.UsbDeviceConnection;
+
+/**
+ * @hide
+ * A concrete implementation of ReportCanvas class which generates "Plain Text" output.
+ */
+public final class TextReportCanvas extends ReportCanvas {
+    private static final String TAG = "TextReportCanvas";
+
+    private final StringBuilder mStringBuilder;
+    private int mListIndent;
+    private static final int LIST_INDENT_AMNT = 2;
+
+    /**
+     * Constructor. Connects plain-text output to the provided StringBuilder.
+     * @param connection    The USB connection object used to retrieve strings
+     * from the USB device.
+     * @param stringBuilder Generated output gets written into this object.
+     */
+    public TextReportCanvas(UsbDeviceConnection connection, StringBuilder stringBuilder) {
+        super(connection);
+
+        mStringBuilder = stringBuilder;
+    }
+
+    private void writeListIndent() {
+        for (int space = 0; space < mListIndent; space++) {
+            mStringBuilder.append(" ");
+        }
+    }
+
+    @Override
+    public void write(String text) {
+        mStringBuilder.append(text);
+    }
+
+    @Override
+    public void openHeader(int level) {
+        writeListIndent();
+        mStringBuilder.append("[");
+    }
+
+    @Override
+    public void closeHeader(int level) {
+        mStringBuilder.append("]\n");
+    }
+
+    @Override
+    public void openParagraph(boolean emphasis) {
+        writeListIndent();
+    }
+
+    @Override
+    public void closeParagraph() {
+        mStringBuilder.append("\n");
+    }
+
+    @Override
+    public void writeParagraph(String text, boolean inRed) {
+        openParagraph(inRed);
+        if (inRed) {
+            mStringBuilder.append("*" + text + "*");
+        } else {
+            mStringBuilder.append(text);
+        }
+        closeParagraph();
+    }
+
+    @Override
+    public void openList() {
+        mListIndent += LIST_INDENT_AMNT;
+    }
+
+    @Override
+    public void closeList() {
+        mListIndent -= LIST_INDENT_AMNT;
+    }
+
+    @Override
+    public void openListItem() {
+        writeListIndent();
+        mStringBuilder.append("- ");
+    }
+
+    @Override
+    public void closeListItem() {
+        mStringBuilder.append("\n");
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/report/UsbStrings.java b/services/usb/java/com/android/server/usb/descriptors/report/UsbStrings.java
index 0461150..64ecebc 100644
--- a/services/usb/java/com/android/server/usb/descriptors/report/UsbStrings.java
+++ b/services/usb/java/com/android/server/usb/descriptors/report/UsbStrings.java
@@ -16,6 +16,7 @@
 package com.android.server.usb.descriptors.report;
 
 import com.android.server.usb.descriptors.UsbACInterface;
+import com.android.server.usb.descriptors.UsbASFormat;
 import com.android.server.usb.descriptors.UsbDescriptor;
 import com.android.server.usb.descriptors.UsbTerminalTypes;
 
@@ -25,7 +26,7 @@
  * @hide
  * A class to provide human-readable strings for various USB constants.
  */
-public class UsbStrings {
+public final class UsbStrings {
     private static final String TAG = "UsbStrings";
 
     private static HashMap<Byte, String> sDescriptorNames;
@@ -35,6 +36,11 @@
     private static HashMap<Byte, String> sAudioSubclassNames;
     private static HashMap<Integer, String> sAudioEncodingNames;
     private static HashMap<Integer, String> sTerminalNames;
+    private static HashMap<Integer, String> sFormatNames;
+
+    static {
+        allocUsbStrings();
+    }
 
     private static void initDescriptorNames() {
         sDescriptorNames = new HashMap<Byte, String>();
@@ -70,6 +76,11 @@
         sACControlInterfaceNames.put(UsbACInterface.ACI_FEATURE_UNIT, "Feature Unit");
         sACControlInterfaceNames.put(UsbACInterface.ACI_PROCESSING_UNIT, "Processing Unit");
         sACControlInterfaceNames.put(UsbACInterface.ACI_EXTENSION_UNIT, "Extension Unit");
+        sACControlInterfaceNames.put(UsbACInterface.ACI_CLOCK_SOURCE, "Clock Source");
+        sACControlInterfaceNames.put(UsbACInterface.ACI_CLOCK_SELECTOR, "Clock Selector");
+        sACControlInterfaceNames.put(UsbACInterface.ACI_CLOCK_MULTIPLIER, "Clock Multiplier");
+        sACControlInterfaceNames.put(UsbACInterface.ACI_SAMPLE_RATE_CONVERTER,
+                "Sample Rate Converter");
     }
 
     private static void initACStreamingInterfaceNames() {
@@ -213,10 +224,33 @@
                 ? name
                 : "Unknown Terminal Type 0x" + Integer.toHexString(terminalType);
     }
+
+    private static void initFormatNames() {
+        sFormatNames = new HashMap<Integer, String>();
+
+        sFormatNames.put((int) UsbASFormat.FORMAT_TYPE_I, "FORMAT_TYPE_I");
+        sFormatNames.put((int) UsbASFormat.FORMAT_TYPE_II, "FORMAT_TYPE_II");
+        sFormatNames.put((int) UsbASFormat.FORMAT_TYPE_III, "FORMAT_TYPE_III");
+        sFormatNames.put((int) UsbASFormat.FORMAT_TYPE_IV, "FORMAT_TYPE_IV");
+        sFormatNames.put((int) UsbASFormat.EXT_FORMAT_TYPE_I, "EXT_FORMAT_TYPE_I");
+        sFormatNames.put((int) UsbASFormat.EXT_FORMAT_TYPE_II, "EXT_FORMAT_TYPE_II");
+        sFormatNames.put((int) UsbASFormat.EXT_FORMAT_TYPE_III, "EXT_FORMAT_TYPE_III");
+    }
+
+    /**
+     * Retrieves the name for the specified format (encoding) type ID.
+     */
+    public static String getFormatName(int format) {
+        String name = sFormatNames.get(format);
+        return name != null
+                ? name
+                : "Unknown Format Type 0x" + Integer.toHexString(format);
+    }
+
     /**
      * Initializes string tables.
      */
-    public static void allocUsbStrings() {
+    private static void allocUsbStrings() {
         initDescriptorNames();
         initACControlInterfaceNames();
         initACStreamingInterfaceNames();
@@ -224,19 +258,7 @@
         initAudioSubclassNames();
         initAudioEncodingNames();
         initTerminalNames();
-    }
-
-    /**
-     * Initializes string tables.
-     */
-    public static void releaseUsbStrings() {
-        sDescriptorNames = null;
-        sACControlInterfaceNames = null;
-        sACStreamingInterfaceNames = null;
-        sClassNames = null;
-        sAudioSubclassNames = null;
-        sAudioEncodingNames = null;
-        sTerminalNames = null;
+        initFormatNames();
     }
 
     /**
@@ -309,4 +331,11 @@
                 : "Unknown Format (encoding) ID [0x" + Integer.toHexString(formatID) + ":"
                     + formatID + "]";
     }
+
+    /**
+     * Retrieves the name for the specified USB audio interface subclass ID.
+     */
+    public static String getACInterfaceSubclassName(byte subClassID) {
+        return subClassID == UsbDescriptor.AUDIO_AUDIOCONTROL ? "AC Control" : "AC Streaming";
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsACInterfaceNode.java b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsACInterfaceNode.java
new file mode 100644
index 0000000..6dbf415
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsACInterfaceNode.java
@@ -0,0 +1,46 @@
+/*
+ * 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.usb.descriptors.tree;
+
+import com.android.server.usb.descriptors.UsbACInterface;
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * A tree node containing some sort-of Audio Class Descriptor.
+ */
+public final class UsbDescriptorsACInterfaceNode extends UsbDescriptorsTreeNode {
+    private static final String TAG = "UsbDescriptorsACInterfaceNode";
+
+    private final UsbACInterface mACInterface;
+
+    /**
+     * Constructor.
+     * @param acInterface   The Audio Class Inteface object wrapped by this tree node.
+     */
+    public UsbDescriptorsACInterfaceNode(UsbACInterface acInterface) {
+        mACInterface = acInterface;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        canvas.writeListItem("AC Interface type: 0x"
+                + Integer.toHexString(mACInterface.getSubtype()));
+        canvas.openList();
+        mACInterface.report(canvas);
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsConfigNode.java b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsConfigNode.java
new file mode 100644
index 0000000..64f9496
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsConfigNode.java
@@ -0,0 +1,63 @@
+/*
+ * 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.usb.descriptors.tree;
+
+import com.android.server.usb.descriptors.UsbConfigDescriptor;
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+import java.util.ArrayList;
+
+/**
+ * @hide
+ * Represents a configuration in the descriptors tree.
+ */
+public final class UsbDescriptorsConfigNode extends UsbDescriptorsTreeNode {
+    private static final String TAG = "UsbDescriptorsConfigNode";
+
+    private final UsbConfigDescriptor mConfigDescriptor;
+
+    private final ArrayList<UsbDescriptorsInterfaceNode> mInterfaceNodes = new ArrayList<>();
+
+    /**
+     * Constructor.
+     * @param configDescriptor   The Config Descriptor object wrapped by this tree node.
+     */
+    public UsbDescriptorsConfigNode(UsbConfigDescriptor configDescriptor) {
+        mConfigDescriptor = configDescriptor;
+    }
+
+    /**
+     * Adds the inteface node logical contained in this configuration.
+     * @param interfaceNode The inteface treenode to assocate with this configuration.
+     */
+    public void addInterfaceNode(UsbDescriptorsInterfaceNode interfaceNode) {
+        mInterfaceNodes.add(interfaceNode);
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        mConfigDescriptor.report(canvas);
+
+        canvas.openList();
+
+        // Interfaces
+        for (UsbDescriptorsInterfaceNode node : mInterfaceNodes) {
+            node.report(canvas);
+        }
+
+        canvas.closeList();
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsDeviceNode.java b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsDeviceNode.java
new file mode 100644
index 0000000..898a06e
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsDeviceNode.java
@@ -0,0 +1,56 @@
+/*
+ * 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.usb.descriptors.tree;
+
+import com.android.server.usb.descriptors.UsbDeviceDescriptor;
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+import java.util.ArrayList;
+
+/**
+ * @hide
+ * A class to contain THE device descriptor at the root of the tree.
+ */
+public final class UsbDescriptorsDeviceNode extends UsbDescriptorsTreeNode {
+    private static final String TAG = "UsbDescriptorsDeviceNode";
+
+    private final UsbDeviceDescriptor mDeviceDescriptor;
+
+    private final ArrayList<UsbDescriptorsConfigNode> mConfigNodes = new ArrayList<>();
+
+    /**
+     * Constructor.
+     * @param deviceDescriptor   The Device Descriptor object wrapped by this tree node.
+     */
+    public UsbDescriptorsDeviceNode(UsbDeviceDescriptor deviceDescriptor) {
+        mDeviceDescriptor = deviceDescriptor;
+    }
+
+    /**
+     * Adds a Configuration node to the assocated device node.
+     */
+    public void addConfigDescriptorNode(UsbDescriptorsConfigNode configNode) {
+        mConfigNodes.add(configNode);
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        mDeviceDescriptor.report(canvas);
+        for (UsbDescriptorsConfigNode node : mConfigNodes) {
+            node.report(canvas);
+        }
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsEndpointNode.java b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsEndpointNode.java
new file mode 100644
index 0000000..7286417
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsEndpointNode.java
@@ -0,0 +1,42 @@
+/*
+ * 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.usb.descriptors.tree;
+
+import com.android.server.usb.descriptors.UsbEndpointDescriptor;
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+/**
+ * @hide
+ * Represents an endpoint in the descriptors tree.
+ */
+public final class UsbDescriptorsEndpointNode extends UsbDescriptorsTreeNode {
+    private static final String TAG = "UsbDescriptorsEndpointNode";
+
+    private final UsbEndpointDescriptor mEndpointDescriptor;
+
+    /**
+     * Constructor.
+     * @param endpointDescriptor   The Device Descriptor object wrapped by this tree node.
+     */
+    public UsbDescriptorsEndpointNode(UsbEndpointDescriptor endpointDescriptor) {
+        mEndpointDescriptor = endpointDescriptor;
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        mEndpointDescriptor.report(canvas);
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsInterfaceNode.java b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsInterfaceNode.java
new file mode 100644
index 0000000..d49d88d
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsInterfaceNode.java
@@ -0,0 +1,83 @@
+/*
+ * 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.usb.descriptors.tree;
+
+import com.android.server.usb.descriptors.UsbInterfaceDescriptor;
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+import java.util.ArrayList;
+
+/**
+ * @hide
+ * Represents an interface in the descriptors tree.
+ */
+public final class UsbDescriptorsInterfaceNode extends UsbDescriptorsTreeNode {
+    private static final String TAG = "UsbDescriptorsInterfaceNode";
+
+    private final UsbInterfaceDescriptor mInterfaceDescriptor;
+
+    private final ArrayList<UsbDescriptorsEndpointNode> mEndpointNodes = new ArrayList<>();
+    private final ArrayList<UsbDescriptorsACInterfaceNode> mACInterfaceNodes = new ArrayList<>();
+
+    /**
+     * Constructor.
+     * @param interfaceDescriptor   The Interface Descriptor object wrapped by this tree node.
+     */
+    public UsbDescriptorsInterfaceNode(UsbInterfaceDescriptor interfaceDescriptor) {
+        mInterfaceDescriptor = interfaceDescriptor;
+    }
+
+    /**
+     * Adds an endpoint descriptor as a child of this interface node.
+     * @param endpointNode The endpoint descriptor node to add to this interface node.
+     */
+    public void addEndpointNode(UsbDescriptorsEndpointNode endpointNode) {
+        mEndpointNodes.add(endpointNode);
+    }
+
+    /**
+     * Adds an Audio-class interface descriptor as a child of this interface node.
+     * @param acInterfaceNode The audio-class descriptor node to add to this interface node.
+     */
+    public void addACInterfaceNode(UsbDescriptorsACInterfaceNode acInterfaceNode) {
+        mACInterfaceNodes.add(acInterfaceNode);
+    }
+
+    @Override
+    public void report(ReportCanvas canvas) {
+        mInterfaceDescriptor.report(canvas);
+
+        // Audio Class Interfaces
+        if (mACInterfaceNodes.size() > 0) {
+            canvas.writeParagraph("Audio Class Interfaces", false);
+            canvas.openList();
+            for (UsbDescriptorsACInterfaceNode node : mACInterfaceNodes) {
+                node.report(canvas);
+            }
+            canvas.closeList();
+        }
+
+        // Endpoints
+        if (mEndpointNodes.size() > 0) {
+            canvas.writeParagraph("Endpoints", false);
+            canvas.openList();
+            for (UsbDescriptorsEndpointNode node : mEndpointNodes) {
+                node.report(canvas);
+            }
+            canvas.closeList();
+        }
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsTree.java b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsTree.java
new file mode 100644
index 0000000..1aa30fa
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsTree.java
@@ -0,0 +1,145 @@
+/*
+ * 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.usb.descriptors.tree;
+
+import com.android.server.usb.descriptors.UsbACInterface;
+import com.android.server.usb.descriptors.UsbConfigDescriptor;
+import com.android.server.usb.descriptors.UsbDescriptor;
+import com.android.server.usb.descriptors.UsbDescriptorParser;
+import com.android.server.usb.descriptors.UsbDeviceDescriptor;
+import com.android.server.usb.descriptors.UsbEndpointDescriptor;
+import com.android.server.usb.descriptors.UsbInterfaceDescriptor;
+import com.android.server.usb.descriptors.report.ReportCanvas;
+
+import java.util.ArrayList;
+
+/*
+ * The general layout of the tree looks like this, though no guarentee about
+ * ordering of descriptors beyond the Device -> Config -> Interface.
+ *
+ * Device Descriptor
+ *   +- Config Descriptor
+ *       +- Interface Descriptor
+ *       |   +- Audio Class Interface
+ *       |   +- Audio Class Interface
+ *       |   +- Audio Class Interface
+ *       |   +- Endpoint Descriptor
+ *       |   +- Endpoint Descriptor
+ *       +- Interface Descriptor
+ *           +- Endpoint Descriptor
+ */
+/**
+ * @hide
+ *
+ * A class which builds a tree representation from the results of a (linear)
+ * parse of USB descriptors.
+ *
+ * @see {@link com.android.server.usb.descriptors.UsbDescriptorsParser UsbDescriptorsParser}
+ */
+public final class UsbDescriptorsTree {
+    private static final String TAG = "UsbDescriptorsTree";
+
+    private UsbDescriptorsDeviceNode mDeviceNode;
+    private UsbDescriptorsConfigNode mConfigNode;   // being parsed
+    private UsbDescriptorsInterfaceNode mInterfaceNode; // being parsed
+
+    /**
+     * Adds THE device descriptor as the root of the tree.
+     */
+    private void addDeviceDescriptor(UsbDeviceDescriptor deviceDescriptor) {
+        mDeviceNode = new UsbDescriptorsDeviceNode(deviceDescriptor);
+    }
+
+    /**
+     * Adds A config descriptor to the tree.
+     */
+    private void addConfigDescriptor(UsbConfigDescriptor configDescriptor) {
+        mConfigNode = new UsbDescriptorsConfigNode(configDescriptor);
+        mDeviceNode.addConfigDescriptorNode(mConfigNode);
+    }
+
+    /**
+     * Adds AN interface descriptor to the current configuration in the tree.
+     */
+    private void addInterfaceDescriptor(UsbInterfaceDescriptor interfaceDescriptor) {
+        mInterfaceNode = new UsbDescriptorsInterfaceNode(interfaceDescriptor);
+        mConfigNode.addInterfaceNode(mInterfaceNode);
+    }
+
+    /**
+     * Adds an endpoint descriptor to the current interface in the tree.
+     */
+    private void addEndpointDescriptor(UsbEndpointDescriptor endpointDescriptor) {
+        mInterfaceNode.addEndpointNode(new UsbDescriptorsEndpointNode(endpointDescriptor));
+    }
+
+    /**
+     * Adds an audio-class interface descriptor to the current interface in the tree.
+     */
+    private void addACInterface(UsbACInterface acInterface) {
+        mInterfaceNode.addACInterfaceNode(new UsbDescriptorsACInterfaceNode(acInterface));
+    }
+
+    /**
+     * Parses the linear descriptor list contained in the parser argument, into a tree
+     * representation corresponding to the logical structure of the USB descriptors.
+     */
+    public void parse(UsbDescriptorParser parser) {
+
+        ArrayList<UsbDescriptor> descriptors = parser.getDescriptors();
+
+        for (int descrIndex = 0; descrIndex < descriptors.size(); descrIndex++) {
+            UsbDescriptor descriptor = descriptors.get(descrIndex);
+            switch (descriptor.getType()) {
+                //
+                // Basic Descriptors
+                //
+                case UsbDescriptor.DESCRIPTORTYPE_DEVICE:
+                    addDeviceDescriptor((UsbDeviceDescriptor) descriptor);
+                    break;
+
+                case UsbDescriptor.DESCRIPTORTYPE_CONFIG:
+                    addConfigDescriptor((UsbConfigDescriptor) descriptor);
+                    break;
+
+                case UsbDescriptor.DESCRIPTORTYPE_INTERFACE:
+                    addInterfaceDescriptor((UsbInterfaceDescriptor) descriptor);
+                    break;
+
+                case UsbDescriptor.DESCRIPTORTYPE_ENDPOINT:
+                    addEndpointDescriptor((UsbEndpointDescriptor) descriptor);
+                    break;
+
+                //
+                // Audio Class Descriptors
+                //
+                case UsbDescriptor.DESCRIPTORTYPE_AUDIO_INTERFACE:
+                    addACInterface((UsbACInterface) descriptor);
+                    break;
+
+                case UsbDescriptor.DESCRIPTORTYPE_AUDIO_ENDPOINT:
+                    break;
+            }
+        }
+    }
+
+    /**
+     * Generate a report of the descriptors tree.
+     */
+    public void report(ReportCanvas canvas) {
+        mDeviceNode.report(canvas);
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsTreeNode.java b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsTreeNode.java
new file mode 100644
index 0000000..aca3cd9
--- /dev/null
+++ b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsTreeNode.java
@@ -0,0 +1,41 @@
+/*
+ * 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.usb.descriptors.tree;
+
+import com.android.server.usb.descriptors.report.ReportCanvas;
+import com.android.server.usb.descriptors.report.Reporting;
+
+/**
+ * @hide
+ * A shared super class for UsbDescriptor tree nodes.
+ */
+public class UsbDescriptorsTreeNode implements Reporting {
+    private static final String TAG = "UsbDescriptorsTreeNode";
+
+    /**
+     * Implements generate a comprehehensive report of descriptor.
+     */
+    @Override
+    public void report(ReportCanvas canvas) {
+    }
+
+    /**
+     * Implements generate an abreviated report of descriptor.
+     */
+    @Override
+    public void shortReport(ReportCanvas canvas) {
+    }
+}
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index 4ffacfd..1569ac3 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -183,7 +183,7 @@
         private final boolean mEnableService;
 
         VoiceInteractionManagerServiceStub() {
-            mEnableService = shouldEnableService(mContext.getResources());
+            mEnableService = shouldEnableService(mContext);
         }
 
         // TODO: VI Make sure the caller is the current user or profile
@@ -348,10 +348,15 @@
             }
         }
 
-        private boolean shouldEnableService(Resources res) {
-            // VoiceInteractionService should not be enabled on low ram devices unless it has the config flag.
-            return !ActivityManager.isLowRamDeviceStatic() ||
-                    getForceVoiceInteractionServicePackage(res) != null;
+        private boolean shouldEnableService(Context context) {
+            // VoiceInteractionService should not be enabled on any low RAM devices
+            // or devices that have not declared the recognition feature, unless the
+            // device's configuration has explicitly set the config flag for a fixed
+            // voice interaction service.
+            return (!ActivityManager.isLowRamDeviceStatic()
+                            && context.getPackageManager().hasSystemFeature(
+                                    PackageManager.FEATURE_VOICE_RECOGNIZERS)) ||
+                    getForceVoiceInteractionServicePackage(context.getResources()) != null;
         }
 
         private String getForceVoiceInteractionServicePackage(Resources res) {
diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java
index e8e0680..6114a20 100644
--- a/telecomm/java/android/telecom/Call.java
+++ b/telecomm/java/android/telecom/Call.java
@@ -19,7 +19,6 @@
 import android.annotation.IntDef;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
-import android.annotation.TestApi;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -417,8 +416,15 @@
          */
         public static final int PROPERTY_SELF_MANAGED = 0x00000100;
 
+        /**
+         * Indicates the call used Assisted Dialing.
+         * See also {@link Connection#PROPERTY_ASSISTED_DIALING_USED}
+         * @hide
+         */
+        public static final int PROPERTY_ASSISTED_DIALING_USED = 0x00000200;
+
         //******************************************************************************************
-        // Next PROPERTY value: 0x00000200
+        // Next PROPERTY value: 0x00000400
         //******************************************************************************************
 
         private final String mTelecomCallId;
@@ -578,6 +584,9 @@
             if(hasProperty(properties, PROPERTY_HAS_CDMA_VOICE_PRIVACY)) {
                 builder.append(" PROPERTY_HAS_CDMA_VOICE_PRIVACY");
             }
+            if(hasProperty(properties, PROPERTY_ASSISTED_DIALING_USED)) {
+                builder.append(" PROPERTY_ASSISTED_DIALING_USED");
+            }
             builder.append("]");
             return builder.toString();
         }
@@ -1099,8 +1108,8 @@
                 return new String(mReadBuffer, 0, numRead);
             } catch (IOException e) {
                 Log.w(this, "Exception encountered when reading from InputStreamReader: %s", e);
+                return null;
             }
-            return null;
         }
 
         /**
@@ -1108,12 +1117,14 @@
          * be read.
          * @return A string containing text entered by the user, or {@code null} if the user has
          * not entered any new text yet.
-         * @hide
          */
-        @TestApi
         public String readImmediately() throws IOException {
             if (mReceiveStream.ready()) {
-                return read();
+                int numRead = mReceiveStream.read(mReadBuffer, 0, READ_BUFFER_SIZE);
+                if (numRead < 0) {
+                    return null;
+                }
+                return new String(mReadBuffer, 0, numRead);
             } else {
                 return null;
             }
diff --git a/telecomm/java/android/telecom/Conference.java b/telecomm/java/android/telecom/Conference.java
index db49391..0626c49 100644
--- a/telecomm/java/android/telecom/Conference.java
+++ b/telecomm/java/android/telecom/Conference.java
@@ -20,6 +20,7 @@
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.os.Bundle;
+import android.os.SystemClock;
 import android.telecom.Connection.VideoProvider;
 import android.util.ArraySet;
 
@@ -81,6 +82,7 @@
     private int mConnectionProperties;
     private String mDisconnectMessage;
     private long mConnectTimeMillis = CONNECT_TIME_NOT_SPECIFIED;
+    private long mConnectElapsedTimeMillis = CONNECT_TIME_NOT_SPECIFIED;
     private StatusHints mStatusHints;
     private Bundle mExtras;
     private Set<String> mPreviousExtraKeys;
@@ -582,7 +584,8 @@
     }
 
     /**
-     * Sets the connection start time of the {@code Conference}.
+     * Sets the connection start time of the {@code Conference}.  Should be specified in wall-clock
+     * time returned by {@link System#currentTimeMillis()}.
      *
      * @param connectionTimeMillis The connection time, in milliseconds.
      */
@@ -591,6 +594,21 @@
     }
 
     /**
+     * Sets the elapsed time since system boot when the {@link Conference} was connected.
+     * This is used to determine the duration of the {@link Conference}.
+     * <p>
+     * When setting the connection elapsed time, you should always set the connection time via
+     * {@link #setConnectionTime(long)}.
+     *
+     * @param connectionElapsedTime The connection time, as measured by
+     * {@link SystemClock#elapsedRealtime()}.
+     * @hide
+     */
+    public final void setConnectionElapsedTime(long connectionElapsedTime) {
+        mConnectElapsedTimeMillis = connectionElapsedTime;
+    }
+
+    /**
      * @hide
      * @deprecated Use {@link #getConnectionTime}.
      */
@@ -612,6 +630,21 @@
     }
 
     /**
+     * Retrieves the connection start time of the {@link Conference}, if specified.  A value of
+     * {@link #CONNECT_TIME_NOT_SPECIFIED} indicates that Telecom should determine the start time
+     * of the conference.
+     *
+     * This is based on the value of {@link SystemClock#elapsedRealtime()} to ensure that it is not
+     * impacted by wall clock changes (user initiated, network initiated, time zone change, etc).
+     *
+     * @return The elapsed time at which the {@link Conference} was connected.
+     * @hide
+     */
+    public final long getConnectElapsedTime() {
+        return mConnectElapsedTimeMillis;
+    }
+
+    /**
      * Inform this Conference that the state of its audio output has been changed externally.
      *
      * @param state The new audio state.
diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java
index f5d37bb..abbf5df 100644
--- a/telecomm/java/android/telecom/Connection.java
+++ b/telecomm/java/android/telecom/Connection.java
@@ -20,7 +20,6 @@
 import com.android.internal.telecom.IVideoCallback;
 import com.android.internal.telecom.IVideoProvider;
 
-import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
@@ -37,14 +36,13 @@
 import android.os.Message;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
+import android.os.SystemClock;
 import android.util.ArraySet;
 import android.view.Surface;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -403,8 +401,14 @@
     @TestApi
     public static final int PROPERTY_IS_RTT = 1 << 8;
 
+    /**
+     * Set by the framework to indicate that a connection is using assisted dialing.
+     * @hide
+     */
+    public static final int PROPERTY_ASSISTED_DIALING_USED = 1 << 9;
+
     //**********************************************************************************************
-    // Next PROPERTY value: 1<<9
+    // Next PROPERTY value: 1<<10
     //**********************************************************************************************
 
     /**
@@ -1696,6 +1700,7 @@
     private VideoProvider mVideoProvider;
     private boolean mAudioModeIsVoip;
     private long mConnectTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED;
+    private long mConnectElapsedTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED;
     private StatusHints mStatusHints;
     private int mVideoState;
     private DisconnectCause mDisconnectCause;
@@ -1840,6 +1845,22 @@
     }
 
     /**
+     * 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.
+     *
+     * Based on the value of {@link SystemClock#elapsedRealtime()}, which ensures that wall-clock
+     * changes do not impact the call duration.
+     *
+     * @return The time at which the {@link Connection} was connected.
+     *
+     * @hide
+     */
+    public final long getConnectElapsedTimeMillis() {
+        return mConnectElapsedTimeMillis;
+    }
+
+    /**
      * @return The status hints for this connection.
      */
     public final StatusHints getStatusHints() {
@@ -2250,7 +2271,8 @@
      * 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.
      *
-     * @param connectionTimeMillis The connection time, in milliseconds.
+     * @param connectTimeMillis The connection time, in milliseconds.  Should be set using a value
+     *                          obtained from {@link System#currentTimeMillis()}.
      *
      * @hide
      */
@@ -2259,6 +2281,19 @@
     }
 
     /**
+     * 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.
+     *
+     * @param connectElapsedTimeMillis The connection time, in milliseconds.  Stored in the format
+     *                              {@link SystemClock#elapsedRealtime()}.
+     *
+     * @hide
+     */
+    public final void setConnectElapsedTimeMillis(long connectElapsedTimeMillis) {
+        mConnectElapsedTimeMillis = connectElapsedTimeMillis;
+    }
+
+    /**
      * Sets the label and icon status to display in the in-call UI.
      *
      * @param statusHints The status label and icon to set.
diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java
index e3b027a..e814d02 100644
--- a/telecomm/java/android/telecom/ConnectionService.java
+++ b/telecomm/java/android/telecom/ConnectionService.java
@@ -1405,6 +1405,7 @@
                         connection.isRingbackRequested(),
                         connection.getAudioModeIsVoip(),
                         connection.getConnectTimeMillis(),
+                        connection.getConnectElapsedTimeMillis(),
                         connection.getStatusHints(),
                         connection.getDisconnectCause(),
                         createIdList(connection.getConferenceables()),
@@ -1440,6 +1441,12 @@
      */
     private void notifyCreateConnectionComplete(final String callId) {
         Log.i(this, "notifyCreateConnectionComplete %s", callId);
+        if (callId == null) {
+            // This could happen if the connection fails quickly and is removed from the
+            // ConnectionService before Telecom sends the create connection complete callback.
+            Log.w(this, "notifyCreateConnectionComplete: callId is null.");
+            return;
+        }
         onCreateConnectionComplete(findConnectionForAction(callId,
                 "notifyCreateConnectionComplete"));
     }
@@ -1816,6 +1823,7 @@
                             null : conference.getVideoProvider().getInterface(),
                     conference.getVideoState(),
                     conference.getConnectTimeMillis(),
+                    conference.getConnectElapsedTime(),
                     conference.getStatusHints(),
                     conference.getExtras());
 
@@ -1881,6 +1889,7 @@
                     connection.isRingbackRequested(),
                     connection.getAudioModeIsVoip(),
                     connection.getConnectTimeMillis(),
+                    connection.getConnectElapsedTimeMillis(),
                     connection.getStatusHints(),
                     connection.getDisconnectCause(),
                     emptyList,
@@ -2166,7 +2175,7 @@
     }
 
     private Connection findConnectionForAction(String callId, String action) {
-        if (mConnectionById.containsKey(callId)) {
+        if (callId != null && mConnectionById.containsKey(callId)) {
             return mConnectionById.get(callId);
         }
         Log.w(this, "%s - Cannot find Connection %s", action, callId);
diff --git a/telecomm/java/android/telecom/DefaultDialerManager.java b/telecomm/java/android/telecom/DefaultDialerManager.java
index cd65232..1806aee 100644
--- a/telecomm/java/android/telecom/DefaultDialerManager.java
+++ b/telecomm/java/android/telecom/DefaultDialerManager.java
@@ -22,6 +22,7 @@
 import android.content.pm.ResolveInfo;
 import android.net.Uri;
 import android.os.Process;
+import android.os.UserHandle;
 import android.provider.Settings;
 import android.text.TextUtils;
 
@@ -163,14 +164,17 @@
 
         for (ResolveInfo resolveInfo : resolveInfoList) {
             final ActivityInfo activityInfo = resolveInfo.activityInfo;
-            if (activityInfo != null && !packageNames.contains(activityInfo.packageName)) {
+            if (activityInfo != null
+                    && !packageNames.contains(activityInfo.packageName)
+                    // ignore cross profile intent handler
+                    && resolveInfo.targetUserId == UserHandle.USER_CURRENT) {
                 packageNames.add(activityInfo.packageName);
             }
         }
 
         final Intent dialIntentWithTelScheme = new Intent(Intent.ACTION_DIAL);
         dialIntentWithTelScheme.setData(Uri.fromParts(PhoneAccount.SCHEME_TEL, "", null));
-        return filterByIntent(context, packageNames, dialIntentWithTelScheme);
+        return filterByIntent(context, packageNames, dialIntentWithTelScheme, userId);
     }
 
     public static List<String> getInstalledDialerApplications(Context context) {
@@ -204,17 +208,18 @@
      *
      * @param context A valid context
      * @param packageNames List of package names to filter.
+     * @param userId The UserId
      * @return The filtered list.
      */
     private static List<String> filterByIntent(Context context, List<String> packageNames,
-            Intent intent) {
+            Intent intent, int userId) {
         if (packageNames == null || packageNames.isEmpty()) {
             return new ArrayList<>();
         }
 
         final List<String> result = new ArrayList<>();
         final List<ResolveInfo> resolveInfoList = context.getPackageManager()
-                .queryIntentActivities(intent, 0);
+                .queryIntentActivitiesAsUser(intent, 0, userId);
         final int length = resolveInfoList.size();
         for (int i = 0; i < length; i++) {
             final ActivityInfo info = resolveInfoList.get(i).activityInfo;
diff --git a/telecomm/java/android/telecom/Log.java b/telecomm/java/android/telecom/Log.java
index de20538..3361b5b 100644
--- a/telecomm/java/android/telecom/Log.java
+++ b/telecomm/java/android/telecom/Log.java
@@ -56,7 +56,7 @@
     public static boolean ERROR = isLoggable(android.util.Log.ERROR);
 
     private static final boolean FORCE_LOGGING = false; /* STOP SHIP if true */
-    private static final boolean USER_BUILD = Build.TYPE.equals("user");
+    private static final boolean USER_BUILD = Build.IS_USER;
 
     // Used to synchronize singleton logging lazy initialization
     private static final Object sSingletonSync = new Object();
diff --git a/telecomm/java/android/telecom/Logging/EventManager.java b/telecomm/java/android/telecom/Logging/EventManager.java
index fddbfce..4fc3385 100644
--- a/telecomm/java/android/telecom/Logging/EventManager.java
+++ b/telecomm/java/android/telecom/Logging/EventManager.java
@@ -36,6 +36,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.TimeZone;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.stream.Collectors;
 
@@ -268,6 +269,7 @@
 
     public EventManager(@NonNull SessionManager.ISessionIdQueryHandler l) {
         mSessionIdHandler = l;
+        sDateFormat.setTimeZone(TimeZone.getDefault());
     }
 
     public void event(Loggable recordEntry, String event, Object data) {
diff --git a/telecomm/java/android/telecom/ParcelableConference.java b/telecomm/java/android/telecom/ParcelableConference.java
index f5689d8..a6221d4 100644
--- a/telecomm/java/android/telecom/ParcelableConference.java
+++ b/telecomm/java/android/telecom/ParcelableConference.java
@@ -41,6 +41,7 @@
     private final int mVideoState;
     private StatusHints mStatusHints;
     private Bundle mExtras;
+    private long mConnectElapsedTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED;
 
     public ParcelableConference(
             PhoneAccountHandle phoneAccount,
@@ -51,6 +52,7 @@
             IVideoProvider videoProvider,
             int videoState,
             long connectTimeMillis,
+            long connectElapsedTimeMillis,
             StatusHints statusHints,
             Bundle extras) {
         mPhoneAccount = phoneAccount;
@@ -58,12 +60,12 @@
         mConnectionCapabilities = connectionCapabilities;
         mConnectionProperties = connectionProperties;
         mConnectionIds = connectionIds;
-        mConnectTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED;
         mVideoProvider = videoProvider;
         mVideoState = videoState;
         mConnectTimeMillis = connectTimeMillis;
         mStatusHints = statusHints;
         mExtras = extras;
+        mConnectElapsedTimeMillis = connectElapsedTimeMillis;
     }
 
     @Override
@@ -111,6 +113,11 @@
     public long getConnectTimeMillis() {
         return mConnectTimeMillis;
     }
+
+    public long getConnectElapsedTimeMillis() {
+        return mConnectElapsedTimeMillis;
+    }
+
     public IVideoProvider getVideoProvider() {
         return mVideoProvider;
     }
@@ -144,10 +151,11 @@
             StatusHints statusHints = source.readParcelable(classLoader);
             Bundle extras = source.readBundle(classLoader);
             int properties = source.readInt();
+            long connectElapsedTimeMillis = source.readLong();
 
             return new ParcelableConference(phoneAccount, state, capabilities, properties,
-                    connectionIds, videoCallProvider, videoState, connectTimeMillis, statusHints,
-                    extras);
+                    connectionIds, videoCallProvider, videoState, connectTimeMillis,
+                    connectElapsedTimeMillis, statusHints, extras);
         }
 
         @Override
@@ -176,5 +184,6 @@
         destination.writeParcelable(mStatusHints, 0);
         destination.writeBundle(mExtras);
         destination.writeInt(mConnectionProperties);
+        destination.writeLong(mConnectElapsedTimeMillis);
     }
 }
diff --git a/telecomm/java/android/telecom/ParcelableConnection.java b/telecomm/java/android/telecom/ParcelableConnection.java
index 434abf5..61d5a12 100644
--- a/telecomm/java/android/telecom/ParcelableConnection.java
+++ b/telecomm/java/android/telecom/ParcelableConnection.java
@@ -47,6 +47,7 @@
     private final boolean mRingbackRequested;
     private final boolean mIsVoipAudioMode;
     private final long mConnectTimeMillis;
+    private final long mConnectElapsedTimeMillis;
     private final StatusHints mStatusHints;
     private final DisconnectCause mDisconnectCause;
     private final List<String> mConferenceableConnectionIds;
@@ -69,6 +70,7 @@
             boolean ringbackRequested,
             boolean isVoipAudioMode,
             long connectTimeMillis,
+            long connectElapsedTimeMillis,
             StatusHints statusHints,
             DisconnectCause disconnectCause,
             List<String> conferenceableConnectionIds,
@@ -77,7 +79,8 @@
         this(phoneAccount, state, capabilities, properties, supportedAudioRoutes, address,
                 addressPresentation, callerDisplayName, callerDisplayNamePresentation,
                 videoProvider, videoState, ringbackRequested, isVoipAudioMode, connectTimeMillis,
-                statusHints, disconnectCause, conferenceableConnectionIds, extras);
+                connectElapsedTimeMillis, statusHints, disconnectCause, conferenceableConnectionIds,
+                extras);
         mParentCallId = parentCallId;
     }
 
@@ -97,6 +100,7 @@
             boolean ringbackRequested,
             boolean isVoipAudioMode,
             long connectTimeMillis,
+            long connectElapsedTimeMillis,
             StatusHints statusHints,
             DisconnectCause disconnectCause,
             List<String> conferenceableConnectionIds,
@@ -115,6 +119,7 @@
         mRingbackRequested = ringbackRequested;
         mIsVoipAudioMode = isVoipAudioMode;
         mConnectTimeMillis = connectTimeMillis;
+        mConnectElapsedTimeMillis = connectElapsedTimeMillis;
         mStatusHints = statusHints;
         mDisconnectCause = disconnectCause;
         mConferenceableConnectionIds = conferenceableConnectionIds;
@@ -190,6 +195,10 @@
         return mConnectTimeMillis;
     }
 
+    public long getConnectElapsedTimeMillis() {
+        return mConnectElapsedTimeMillis;
+    }
+
     public final StatusHints getStatusHints() {
         return mStatusHints;
     }
@@ -255,6 +264,7 @@
             int properties = source.readInt();
             int supportedAudioRoutes = source.readInt();
             String parentCallId = source.readString();
+            long connectElapsedTimeMillis = source.readLong();
 
             return new ParcelableConnection(
                     phoneAccount,
@@ -271,6 +281,7 @@
                     ringbackRequested,
                     audioModeIsVoip,
                     connectTimeMillis,
+                    connectElapsedTimeMillis,
                     statusHints,
                     disconnectCause,
                     conferenceableConnectionIds,
@@ -313,5 +324,6 @@
         destination.writeInt(mConnectionProperties);
         destination.writeInt(mSupportedAudioRoutes);
         destination.writeString(mParentCallId);
+        destination.writeLong(mConnectElapsedTimeMillis);
     }
 }
diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java
index b1eedf5..53ebbe4 100644
--- a/telecomm/java/android/telecom/TelecomManager.java
+++ b/telecomm/java/android/telecom/TelecomManager.java
@@ -582,6 +582,14 @@
             "android.telecom.extra.CALL_BACK_INTENT";
 
     /**
+     * The boolean indicated by this extra controls whether or not a call is eligible to undergo
+     * assisted dialing. This extra is stored under {@link #EXTRA_OUTGOING_CALL_EXTRAS}.
+     * @hide
+     */
+    public static final String EXTRA_USE_ASSISTED_DIALING =
+            "android.telecom.extra.USE_ASSISTED_DIALING";
+
+    /**
      * The following 4 constants define how properties such as phone numbers and names are
      * displayed to the user.
      */
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 11f99cf..725d7e2 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -26,6 +26,7 @@
 import android.os.PersistableBundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.service.carrier.CarrierService;
 
 import com.android.ims.ImsReasonInfo;
 import com.android.internal.telephony.ICarrierConfigLoader;
@@ -262,6 +263,19 @@
             "config_ims_package_override_string";
 
     /**
+     * Override the package that will manage {@link SubscriptionPlan}
+     * information instead of the {@link CarrierService} that defines this
+     * value.
+     *
+     * @see SubscriptionManager#getSubscriptionPlans(int)
+     * @see SubscriptionManager#setSubscriptionPlans(int, java.util.List)
+     * @hide
+     */
+    @SystemApi
+    public static final String KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING =
+            "config_plans_package_override_string";
+
+    /**
      * Override the platform's notion of a network operator being considered roaming.
      * Value is string array of SIDs to be considered roaming for 3GPP2 RATs.
      */
@@ -280,10 +294,10 @@
      * If true all networks are considered as home network a.k.a non-roaming.  When false,
      * the 2 pairs of CMDA and GSM roaming/non-roaming arrays are consulted.
      *
-     * @see KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY
-     * @see KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY
-     * @see KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY
-     * @see KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY
+     * @see #KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY
+     * @see #KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY
+     * @see #KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY
+     * @see #KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY
      */
     public static final String
             KEY_FORCE_HOME_NETWORK_BOOL = "force_home_network_bool";
@@ -317,6 +331,19 @@
             "notify_handover_video_from_wifi_to_lte_bool";
 
     /**
+     * Flag specifying whether the carrier wants to notify the user when a VT call has been handed
+     * over from LTE to WIFI.
+     * <p>
+     * The handover notification is sent as a
+     * {@link TelephonyManager#EVENT_HANDOVER_VIDEO_FROM_LTE_TO_WIFI}
+     * {@link android.telecom.Connection} event, which an {@link android.telecom.InCallService}
+     * should use to trigger the display of a user-facing message.
+     * @hide
+     */
+    public static final String KEY_NOTIFY_HANDOVER_VIDEO_FROM_LTE_TO_WIFI_BOOL =
+            "notify_handover_video_from_lte_to_wifi_bool";
+
+    /**
      * Flag specifying whether the carrier supports downgrading a video call (tx, rx or tx/rx)
      * directly to an audio call.
      * @hide
@@ -332,14 +359,29 @@
     public static final String KEY_DEFAULT_VM_NUMBER_STRING = "default_vm_number_string";
 
     /**
-     * Flag indicating whether we should downgrade/terminate VT calls and disable VT when
-     * data enabled changed (e.g. reach data limit or turn off data).
+     * When {@code true}, changes to the mobile data enabled switch will not cause the VT
+     * registration state to change.  That is, turning on or off mobile data will not cause VT to be
+     * enabled or disabled.
+     * When {@code false}, disabling mobile data will cause VT to be de-registered.
+     * <p>
+     * See also {@link #KEY_VILTE_DATA_IS_METERED_BOOL}.
      * @hide
      */
     public static final String KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS =
             "ignore_data_enabled_changed_for_video_calls";
 
     /**
+     * Flag indicating whether data used for a video call over LTE is metered or not.
+     * <p>
+     * When {@code true}, if the device hits the data limit or data is disabled during a ViLTE call,
+     * the call will be downgraded to audio-only (or paused if
+     * {@link #KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL} is {@code true}).
+     *
+     * @hide
+     */
+    public static final String KEY_VILTE_DATA_IS_METERED_BOOL = "vilte_data_is_metered_bool";
+
+    /**
      * Flag specifying whether WFC over IMS should be available for carrier: independent of
      * carrier provisioning. If false: hard disabled. If true: then depends on carrier
      * provisioning, availability etc.
@@ -553,20 +595,27 @@
             "carrier_data_call_retry_config_strings";
 
     /**
-     * Delay between trying APN from the pool
+     * Delay in milliseconds between trying APN from the pool
      * @hide
      */
     public static final String KEY_CARRIER_DATA_CALL_APN_DELAY_DEFAULT_LONG =
             "carrier_data_call_apn_delay_default_long";
 
     /**
-     * Faster delay between trying APN from the pool
+     * Faster delay in milliseconds between trying APN from the pool
      * @hide
      */
     public static final String KEY_CARRIER_DATA_CALL_APN_DELAY_FASTER_LONG =
             "carrier_data_call_apn_delay_faster_long";
 
     /**
+     * Delay in milliseconds for retrying APN after disconnect
+     * @hide
+     */
+    public static final String KEY_CARRIER_DATA_CALL_APN_RETRY_AFTER_DISCONNECT_LONG =
+            "carrier_data_call_apn_retry_after_disconnect_long";
+
+    /**
      * Data call setup permanent failure causes by the carrier
      */
     public static final String KEY_CARRIER_DATA_CALL_PERMANENT_FAILURE_STRINGS =
@@ -727,6 +776,18 @@
     public static final String KEY_CDMA_DTMF_TONE_DELAY_INT = "cdma_dtmf_tone_delay_int";
 
     /**
+     * Some carriers will send call forwarding responses for voicemail in a format that is not 3gpp
+     * compliant, which causes issues during parsing. This causes the
+     * {@link com.android.internal.telephony.CallForwardInfo#number} to contain non-numerical
+     * characters instead of a number.
+     *
+     * If true, we will detect the non-numerical characters and replace them with "Voicemail".
+     * @hide
+     */
+    public static final String KEY_CALL_FORWARDING_MAP_NON_NUMBER_TO_VOICEMAIL_BOOL =
+            "call_forwarding_map_non_number_to_voicemail_bool";
+
+    /**
      * Determines whether conference calls are supported by a carrier.  When {@code true},
      * conference calling is supported, {@code false otherwise}.
      */
@@ -754,7 +815,6 @@
      * Determines whether High Definition audio property is displayed in the dialer UI.
      * If {@code false}, remove the HD audio property from the connection so that HD audio related
      * UI is not displayed. If {@code true}, keep HD audio property as it is configured.
-     * @hide
      */
     public static final String KEY_DISPLAY_HD_AUDIO_PROPERTY_BOOL =
             "display_hd_audio_property_bool";
@@ -1153,8 +1213,6 @@
     /** @hide */
     public static final int CDMA_ROAMING_MODE_AFFILIATED = 1;
     /** @hide */
-    public static final int IMSI_ENCRYPTION_DAYS_TIME_DISABLED = -1;
-    /** @hide */
     public static final int CDMA_ROAMING_MODE_ANY = 2;
     /**
      * Boolean indicating if support is provided for directly dialing FDN number from FDN list.
@@ -1349,6 +1407,16 @@
             "network_notification_delay_int";
 
     /**
+     * Time delay (in ms) after which we show the notification for emergency calls,
+     * while the device is registered over WFC. Default value is -1, which indicates
+     * that this notification is not pertinent for a particular carrier. We've added a delay
+     * to prevent false positives.
+     * @hide
+     */
+    public static final String KEY_EMERGENCY_NOTIFICATION_DELAY_INT =
+            "emergency_notification_delay_int";
+
+    /**
      * When {@code true}, the carrier allows the user of the
      * {@link TelephonyManager#sendUssdRequest(String, TelephonyManager.UssdResponseCallback,
      * Handler)} API to perform USSD requests.  {@code True} by default.
@@ -1374,17 +1442,6 @@
             "notify_international_call_on_wfc_bool";
 
     /**
-     * Determine whether user edited tether APN (type dun) has effect
-     * {@code false} - Default. APN with dun type in telephony database has no effect.
-     *
-     * {@code true}  - DUN APN added/edited in ApnEditor will be used for tethering data call.
-     *
-     * @hide
-     */
-    public static final String KEY_EDITABLE_TETHER_APN_BOOL =
-            "editable_tether_apn_bool";
-
-    /**
      * An array containing custom call forwarding number prefixes that will be blocked while the
      * device is reporting that it is roaming. By default, there are no custom call
      * forwarding prefixes and none of these numbers will be filtered. If one or more entries are
@@ -1399,11 +1456,11 @@
     /**
      * The day of the month (1-31) on which the data cycle rolls over.
      * <p>
-     * If the current month does not have this day, the cycle will roll over at the start of the
-     * next month.
+     * If the current month does not have this day, the cycle will roll over at
+     * the start of the next month.
      * <p>
-     * This setting may be still overridden by explicit user choice. By default, the platform value
-     * will be used.
+     * This setting may be still overridden by explicit user choice. By default,
+     * the platform value will be used.
      */
     public static final String KEY_MONTHLY_DATA_CYCLE_DAY_INT =
             "monthly_data_cycle_day_int";
@@ -1415,6 +1472,7 @@
      *
      * @hide
      */
+    @Deprecated
     public static final int DATA_CYCLE_USE_PLATFORM_DEFAULT = -1;
 
     /**
@@ -1482,6 +1540,30 @@
             "disable_voice_barring_notification_bool";
 
     /**
+     * List of operators considered non-roaming which won't show roaming icon.
+     * <p>
+     * Can use mcc or mcc+mnc as item. For example, 302 or 21407.
+     * If operators, 21404 and 21407, make roaming agreements, users of 21404 should not see
+     * the roaming icon as using 21407 network.
+     * @hide
+     */
+    public static final String KEY_NON_ROAMING_OPERATOR_STRING_ARRAY =
+            "non_roaming_operator_string_array";
+
+    /**
+     * List of operators considered roaming with the roaming icon.
+     * <p>
+     * Can use mcc or mcc+mnc as item. For example, 302 or 21407.
+     * If operators, 21404 and 21407, make roaming agreements, users of 21404 should see
+     * the roaming icon as using 21407 network.
+     * <p>
+     * A match on this supersedes a match on {@link #KEY_NON_ROAMING_OPERATOR_STRING_ARRAY}.
+     * @hide
+     */
+    public static final String KEY_ROAMING_OPERATOR_STRING_ARRAY =
+            "roaming_operator_string_array";
+
+    /**
      * URL from which the proto containing the public key of the Carrier used for
      * IMSI encryption will be downloaded.
      * @hide
@@ -1489,14 +1571,15 @@
     public static final String IMSI_KEY_DOWNLOAD_URL_STRING = "imsi_key_download_url_string";
 
     /**
-     * Time in days, after which the key will expire, and a new key will need to be downloaded.
-     * default value is {@link IMSI_ENCRYPTION_DAYS_TIME_DISABLED}, and indicates that IMSI
-     * encryption is not enabled by default for a carrier. Value of 0 indicates that the key
-     * does not expire.
+     * Identifies if the key is available for WLAN or EPDG or both. The value is a bitmask.
+     * 0 indicates that neither EPDG or WLAN is enabled.
+     * 1 indicates that key type {@link TelephonyManager#KEY_TYPE_EPDG} is enabled.
+     * 2 indicates that key type {@link TelephonyManager#KEY_TYPE_WLAN} is enabled.
+     * 3 indicates that both are enabled.
      * @hide
      */
-    public static final String IMSI_KEY_EXPIRATION_DAYS_TIME_INT =
-            "imsi_key_expiration_days_time_int";
+    public static final String IMSI_KEY_AVAILABILITY_INT = "imsi_key_availability_int";
+
 
     /**
      * Key identifying if the CDMA Caller ID presentation and suppression MMI codes
@@ -1524,9 +1607,11 @@
         sDefaults.putBoolean(KEY_CARRIER_VOLTE_AVAILABLE_BOOL, false);
         sDefaults.putBoolean(KEY_CARRIER_VT_AVAILABLE_BOOL, false);
         sDefaults.putBoolean(KEY_NOTIFY_HANDOVER_VIDEO_FROM_WIFI_TO_LTE_BOOL, false);
+        sDefaults.putBoolean(KEY_NOTIFY_HANDOVER_VIDEO_FROM_LTE_TO_WIFI_BOOL, false);
         sDefaults.putBoolean(KEY_SUPPORT_DOWNGRADE_VT_TO_AUDIO_BOOL, true);
         sDefaults.putString(KEY_DEFAULT_VM_NUMBER_STRING, "");
-        sDefaults.putBoolean(KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS, false);
+        sDefaults.putBoolean(KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS, true);
+        sDefaults.putBoolean(KEY_VILTE_DATA_IS_METERED_BOOL, true);
         sDefaults.putBoolean(KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL, false);
         sDefaults.putBoolean(KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, false);
         sDefaults.putBoolean(KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL, false);
@@ -1608,6 +1693,7 @@
                 "others:max_retries=3, 5000, 5000, 5000"});
         sDefaults.putLong(KEY_CARRIER_DATA_CALL_APN_DELAY_DEFAULT_LONG, 20000);
         sDefaults.putLong(KEY_CARRIER_DATA_CALL_APN_DELAY_FASTER_LONG, 3000);
+        sDefaults.putLong(KEY_CARRIER_DATA_CALL_APN_RETRY_AFTER_DISCONNECT_LONG, 10000);
         sDefaults.putString(KEY_CARRIER_ERI_FILE_NAME_STRING, "eri.xml");
         sDefaults.putInt(KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT, 7200);
         sDefaults.putStringArray(KEY_CARRIER_METERED_APN_TYPES_STRINGS,
@@ -1637,6 +1723,7 @@
         sDefaults.putInt(KEY_GSM_DTMF_TONE_DELAY_INT, 0);
         sDefaults.putInt(KEY_IMS_DTMF_TONE_DELAY_INT, 0);
         sDefaults.putInt(KEY_CDMA_DTMF_TONE_DELAY_INT, 100);
+        sDefaults.putBoolean(KEY_CALL_FORWARDING_MAP_NON_NUMBER_TO_VOICEMAIL_BOOL, false);
         sDefaults.putInt(KEY_CDMA_3WAYCALL_FLASH_DELAY_INT , 0);
         sDefaults.putBoolean(KEY_SUPPORT_CONFERENCE_CALL_BOOL, true);
         sDefaults.putBoolean(KEY_SUPPORT_IMS_CONFERENCE_CALL_BOOL, true);
@@ -1704,8 +1791,8 @@
         sDefaults.putString(KEY_CARRIER_SETUP_APP_STRING, "");
         sDefaults.putStringArray(KEY_CARRIER_APP_WAKE_SIGNAL_CONFIG_STRING_ARRAY,
                 new String[]{
-                        "com.android.carrierdefaultapp/.CarrierDefaultBroadcastReceiver:" +
-                                "com.android.internal.telephony.CARRIER_SIGNAL_RESET"
+                        "com.android.carrierdefaultapp/.CarrierDefaultBroadcastReceiver:"
+                                + "com.android.internal.telephony.CARRIER_SIGNAL_RESET"
                 });
         sDefaults.putStringArray(KEY_CARRIER_APP_NO_WAKE_SIGNAL_CONFIG_STRING_ARRAY, null);
 
@@ -1758,19 +1845,21 @@
         sDefaults.putBoolean(KEY_PERSIST_LPP_MODE_BOOL, false);
         sDefaults.putStringArray(KEY_CARRIER_WIFI_STRING_ARRAY, null);
         sDefaults.putInt(KEY_PREF_NETWORK_NOTIFICATION_DELAY_INT, -1);
+        sDefaults.putInt(KEY_EMERGENCY_NOTIFICATION_DELAY_INT, -1);
         sDefaults.putBoolean(KEY_ALLOW_USSD_REQUESTS_VIA_TELEPHONY_MANAGER_BOOL, true);
         sDefaults.putBoolean(KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL, true);
         sDefaults.putBoolean(KEY_NOTIFY_INTERNATIONAL_CALL_ON_WFC_BOOL, false);
-        sDefaults.putBoolean(KEY_EDITABLE_TETHER_APN_BOOL, false);
         sDefaults.putStringArray(KEY_CALL_FORWARDING_BLOCKS_WHILE_ROAMING_STRING_ARRAY,
                 null);
         sDefaults.putInt(KEY_LTE_EARFCNS_RSRP_BOOST_INT, 0);
         sDefaults.putStringArray(KEY_BOOSTED_LTE_EARFCNS_STRING_ARRAY, null);
         sDefaults.putBoolean(KEY_DISABLE_VOICE_BARRING_NOTIFICATION_BOOL, false);
-        sDefaults.putInt(IMSI_KEY_EXPIRATION_DAYS_TIME_INT, IMSI_ENCRYPTION_DAYS_TIME_DISABLED);
+        sDefaults.putInt(IMSI_KEY_AVAILABILITY_INT, 0);
         sDefaults.putString(IMSI_KEY_DOWNLOAD_URL_STRING, null);
         sDefaults.putBoolean(KEY_CONVERT_CDMA_CALLER_ID_MMI_CODES_WHILE_ROAMING_ON_3GPP_BOOL,
                 false);
+        sDefaults.putStringArray(KEY_NON_ROAMING_OPERATOR_STRING_ARRAY, null);
+        sDefaults.putStringArray(KEY_ROAMING_OPERATOR_STRING_ARRAY, null);
     }
 
     /**
@@ -1828,7 +1917,7 @@
      * {@link android.service.carrier.CarrierService#onLoadConfig} will be called from an
      * arbitrary thread.
      * </p>
-     * @see #hasCarrierPrivileges
+     * @see TelephonyManager#hasCarrierPrivileges
      */
     public void notifyConfigChangedForSubId(int subId) {
         try {
@@ -1869,6 +1958,15 @@
         }
     }
 
+    /** {@hide} */
+    public String getDefaultCarrierServicePackageName() {
+        try {
+            return getICarrierConfigLoader().getDefaultCarrierServicePackageName();
+        } catch (Throwable t) {
+            return null;
+        }
+    }
+
     /**
      * Returns a new bundle with the default value for every supported configuration variable.
      *
diff --git a/telephony/java/android/telephony/DisconnectCause.java b/telephony/java/android/telephony/DisconnectCause.java
index 9513517..3f0acde 100644
--- a/telephony/java/android/telephony/DisconnectCause.java
+++ b/telephony/java/android/telephony/DisconnectCause.java
@@ -258,6 +258,16 @@
      */
     public static final int IMS_ACCESS_BLOCKED = 60;
 
+    /**
+     * The call has ended (mid-call) because the device's battery is too low.
+     */
+    public static final int LOW_BATTERY = 61;
+
+    /**
+     * A call was not dialed because the device's battery is too low.
+     */
+    public static final int DIAL_LOW_BATTERY = 62;
+
     //*********************************************************************************************
     // When adding a disconnect type:
     // 1) Update toString() with the newly added disconnect type.
@@ -392,6 +402,10 @@
             return "WIFI_LOST";
         case IMS_ACCESS_BLOCKED:
             return "IMS_ACCESS_BLOCKED";
+        case LOW_BATTERY:
+            return "LOW_BATTERY";
+        case DIAL_LOW_BATTERY:
+            return "DIAL_LOW_BATTERY";
         default:
             return "INVALID: " + cause;
         }
diff --git a/telephony/java/android/telephony/MbmsDownloadManager.java b/telephony/java/android/telephony/MbmsDownloadManager.java
deleted file mode 100644
index a9ec299..0000000
--- a/telephony/java/android/telephony/MbmsDownloadManager.java
+++ /dev/null
@@ -1,327 +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.telephony;
-
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.RemoteException;
-import android.telephony.mbms.IDownloadCallback;
-import android.telephony.mbms.DownloadRequest;
-import android.telephony.mbms.DownloadStatus;
-import android.telephony.mbms.IMbmsDownloadManagerCallback;
-import android.telephony.mbms.MbmsException;
-import android.telephony.mbms.vendor.IMbmsDownloadService;
-import android.util.Log;
-
-import java.util.List;
-
-import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
-
-/** @hide */
-public class MbmsDownloadManager {
-    private static final String LOG_TAG = MbmsDownloadManager.class.getSimpleName();
-
-    /**
-     * The MBMS middleware should send this when a download of single file has completed or
-     * failed. Mandatory extras are
-     * {@link #EXTRA_RESULT}
-     * {@link #EXTRA_INFO}
-     * {@link #EXTRA_REQUEST}
-     * {@link #EXTRA_TEMP_LIST}
-     * {@link #EXTRA_FINAL_URI}
-     *
-     * TODO: future systemapi
-     */
-    public static final String ACTION_DOWNLOAD_RESULT_INTERNAL =
-            "android.telephony.mbms.action.DOWNLOAD_RESULT_INTERNAL";
-
-    /**
-     * The MBMS middleware should send this when it wishes to request {@code content://} URIs to
-     * serve as temp files for downloads or when it wishes to resume paused downloads. Mandatory
-     * extras are
-     * {@link #EXTRA_REQUEST}
-     *
-     * Optional extras are
-     * {@link #EXTRA_FD_COUNT} (0 if not present)
-     * {@link #EXTRA_PAUSED_LIST} (empty if not present)
-     *
-     * TODO: future systemapi
-     */
-    public static final String ACTION_FILE_DESCRIPTOR_REQUEST =
-            "android.telephony.mbms.action.FILE_DESCRIPTOR_REQUEST";
-
-    /**
-     * The MBMS middleware should send this when it wishes to clean up temp  files in the app's
-     * filesystem. Mandatory extras are:
-     * {@link #EXTRA_TEMP_FILES_IN_USE}
-     *
-     * TODO: future systemapi
-     */
-    public static final String ACTION_CLEANUP =
-            "android.telephony.mbms.action.CLEANUP";
-
-    /**
-     * Integer extra indicating the result code of the download.
-     * TODO: put in link to error list
-     * TODO: future systemapi (here and and all extras)
-     */
-    public static final String EXTRA_RESULT = "android.telephony.mbms.extra.RESULT";
-
-    /**
-     * Extra containing the {@link android.telephony.mbms.FileInfo} for which the download result
-     * is for. Must not be null.
-     */
-    public static final String EXTRA_INFO = "android.telephony.mbms.extra.INFO";
-
-    /**
-     * Extra containing the {@link DownloadRequest} for which the download result or file
-     * descriptor request is for. Must not be null.
-     */
-    public static final String EXTRA_REQUEST = "android.telephony.mbms.extra.REQUEST";
-
-    /**
-     * Extra containing a {@link List} of {@link Uri}s that were used as temp files for this
-     * completed file. These {@link Uri}s should have scheme {@code file://}, and the temp
-     * files will be deleted upon receipt of the intent.
-     * May be null.
-     */
-    public static final String EXTRA_TEMP_LIST = "android.telephony.mbms.extra.TEMP_LIST";
-
-    /**
-     * Extra containing a single {@link Uri} indicating the path to the temp file in which the
-     * decoded downloaded file resides. Must not be null.
-     */
-    public static final String EXTRA_FINAL_URI = "android.telephony.mbms.extra.FINAL_URI";
-
-    /**
-     * Extra containing an integer indicating the number of temp files requested.
-     */
-    public static final String EXTRA_FD_COUNT = "android.telephony.mbms.extra.FD_COUNT";
-
-    /**
-     * Extra containing a list of {@link Uri}s that the middleware is requesting access to via
-     * {@link #ACTION_FILE_DESCRIPTOR_REQUEST} in order to resume downloading. These {@link Uri}s
-     * should have scheme {@code file://}.
-     */
-    public static final String EXTRA_PAUSED_LIST = "android.telephony.mbms.extra.PAUSED_LIST";
-
-    /**
-     * Extra containing a list of {@link android.telephony.mbms.UriPathPair}s, used in the
-     * response to {@link #ACTION_FILE_DESCRIPTOR_REQUEST}. These are temp files that are meant
-     * to be used for new file downloads.
-     */
-    public static final String EXTRA_FREE_URI_LIST = "android.telephony.mbms.extra.FREE_URI_LIST";
-
-    /**
-     * Extra containing a list of {@link android.telephony.mbms.UriPathPair}s, used in the
-     * response to {@link #ACTION_FILE_DESCRIPTOR_REQUEST}. These
-     * {@link android.telephony.mbms.UriPathPair}s contain {@code content://} URIs that provide
-     * access to previously paused downloads.
-     */
-    public static final String EXTRA_PAUSED_URI_LIST =
-            "android.telephony.mbms.extra.PAUSED_URI_LIST";
-
-    /**
-     * Extra containing a list of {@link Uri}s indicating temp files which the middleware is
-     * still using.
-     */
-    public static final String EXTRA_TEMP_FILES_IN_USE =
-            "android.telephony.mbms.extra.TEMP_FILES_IN_USE";
-
-    public static final int RESULT_SUCCESSFUL = 1;
-    public static final int RESULT_CANCELLED  = 2;
-    public static final int RESULT_EXPIRED    = 3;
-    // TODO - more results!
-
-    private final Context mContext;
-    private int mSubId = INVALID_SUBSCRIPTION_ID;
-
-    private IMbmsDownloadService mService;
-    private final IMbmsDownloadManagerCallback mCallback;
-    private final String mDownloadAppName;
-
-    private MbmsDownloadManager(Context context, IMbmsDownloadManagerCallback callback,
-            String downloadAppName, int subId) {
-        mContext = context;
-        mCallback = callback;
-        mDownloadAppName = downloadAppName;
-        mSubId = subId;
-    }
-
-    /**
-     * Create a new MbmsDownloadManager using the system default data subscription ID.
-     *
-     * Note that this call will bind a remote service and that may take a bit.  This
-     * may throw an Illegal ArgumentException or RemoteException.
-     *
-     * @hide
-     */
-    public static MbmsDownloadManager createManager(Context context,
-            IMbmsDownloadManagerCallback listener, String downloadAppName)
-            throws MbmsException {
-        MbmsDownloadManager mdm = new MbmsDownloadManager(context, listener, downloadAppName,
-                SubscriptionManager.getDefaultSubscriptionId());
-        mdm.bindAndInitialize();
-        return mdm;
-    }
-
-    /**
-     * Create a new MbmsDownloadManager using the given subscription ID.
-     *
-     * Note that this call will bind a remote service and that may take a bit.  This
-     * may throw an Illegal ArgumentException or RemoteException.
-     *
-     * @hide
-     */
-
-    public static MbmsDownloadManager createManager(Context context,
-            IMbmsDownloadManagerCallback listener, String downloadAppName, int subId)
-            throws MbmsException {
-        MbmsDownloadManager mdm = new MbmsDownloadManager(context, listener, downloadAppName,
-                subId);
-        mdm.bindAndInitialize();
-        return mdm;
-    }
-
-    private void bindAndInitialize() throws MbmsException {
-        // TODO: bind
-        try {
-            mService.initialize(mDownloadAppName, mSubId, mCallback);
-        } catch (RemoteException e) {
-            throw new MbmsException(0); // TODO: proper error code
-        }
-    }
-
-    /**
-     * Gets the list of files published for download.
-     * They may occur at times far in the future.
-     * servicesClasses lets the app filter on types of files and is opaque data between
-     *     the app and the carrier
-     *
-     * Multiple calls replace trhe list of serviceClasses of interest.
-     *
-     * May throw an IllegalArgumentException or RemoteException.
-     *
-     * Synchronous responses include
-     * <li>SUCCESS</li>
-     * <li>ERROR_MSDC_CONCURRENT_SERVICE_LIMIT_REACHED</li>
-     *
-     * Asynchronous errors through the listener include any of the errors except
-     * <li>ERROR_MSDC_UNABLE_TO_)START_SERVICE</li>
-     * <li>ERROR_MSDC_INVALID_SERVICE_ID</li>
-     * <li>ERROR_MSDC_END_OF_SESSION</li>
-     */
-    public int getFileServices(List<String> serviceClasses) {
-        return 0;
-    }
-
-
-    /**
-     * Requests a future download.
-     * returns a token which may be used to cancel a download.
-     * downloadListener is an optional callback object which can be used to get progress reports
-     *     of a currently occuring download.  Note this can only run while the calling app
-     *     is running, so future downloads will simply result in resultIntents being sent
-     *     for completed or errored-out downloads.  A NULL indicates no callbacks are needed.
-     *
-     * May throw an IllegalArgumentException or RemoteExcpetion.
-     *
-     * Asynchronous errors through the listener include any of the errors
-     */
-    public DownloadRequest download(DownloadRequest request, IDownloadCallback listener) {
-        request.setAppName(mDownloadAppName);
-        return request;
-    }
-
-    /**
-     * Returns a list DownloadRequests that originated from this application (UID).
-     *
-     * May throw a RemoteException.
-     *
-     * Asynchronous errors through the listener include any of the errors except
-     * <li>ERROR_UNABLED_TO_START_SERVICE</li>
-     * <li>ERROR_MSDC_INVALID_SERVICE_ID</li>
-     * <li>ERROR_MSDC_END_OF_SESSION</li>
-     */
-    public List<DownloadRequest> listPendingDownloads() {
-        return null;
-    }
-
-    /**
-     * Attempts to cancel the specified DownloadRequest.
-     *
-     * May throw a RemoteException.
-     *
-     * Synchronous responses may include
-     * <li>SUCCESS</li>
-     * <li>ERROR_MSDC_CONCURRENT_SERVICE_LIMIT_REACHED</li>
-     * <li>ERROR_MSDC_UNKNOWN_REQUEST</li>
-     */
-    public int cancelDownload(DownloadRequest downloadRequest) {
-        return 0;
-    }
-
-    /**
-     * Gets information about current and known upcoming downloads.
-     *
-     * Current is a straightforward count of the files being downloaded "now"
-     * for some definition of now (may be racey).
-     * Future downloads include counts of files with pending repair operations, counts of
-     * files with future downloads and indication of scheduled download times with unknown
-     * file details.
-     *
-     * May throw an IllegalArgumentException or RemoteException.
-     *
-     * If the DownloadRequest is unknown the results will be null.
-     */
-    public DownloadStatus getDownloadStatus(DownloadRequest downloadRequest) {
-        return null;
-    }
-
-    /**
-     * Resets middleware knowledge regarding this download request.
-     *
-     * This state consists of knowledge of what files have already been downloaded.
-     * Normally the middleware won't download files who's hash matches previously downloaded
-     * content, even if that content has since been deleted.  If this function is called
-     * repeated content will be downloaded again when available.  This does not interrupt
-     * in-progress downloads.
-     *
-     * May throw an IllegalArgumentException or RemoteException.
-     *
-     * <li>SUCCESS</li>
-     * <li>ERROR_MSDC_CONCURRENT_SERVICE_LIMIT_REACHED</li>
-     * <li>ERROR_MSDC_UNKNOWN_REQUEST</li>
-     */
-    public int resetDownloadKnowledge(DownloadRequest downloadRequest) {
-        return 0;
-    }
-
-    public void dispose() {
-        try {
-            if (mService != null) {
-                mService.dispose(mDownloadAppName, mSubId);
-            } else {
-                Log.i(LOG_TAG, "Service already dead");
-            }
-        } catch (RemoteException e) {
-            // Ignore
-            Log.i(LOG_TAG, "Remote exception while disposing of service");
-        }
-    }
-}
diff --git a/telephony/java/android/telephony/MbmsDownloadSession.java b/telephony/java/android/telephony/MbmsDownloadSession.java
new file mode 100644
index 0000000..b35a9b8
--- /dev/null
+++ b/telephony/java/android/telephony/MbmsDownloadSession.java
@@ -0,0 +1,774 @@
+/*
+ * 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.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.content.SharedPreferences;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.telephony.mbms.DownloadStateCallback;
+import android.telephony.mbms.FileInfo;
+import android.telephony.mbms.DownloadRequest;
+import android.telephony.mbms.InternalDownloadSessionCallback;
+import android.telephony.mbms.InternalDownloadStateCallback;
+import android.telephony.mbms.MbmsDownloadSessionCallback;
+import android.telephony.mbms.MbmsDownloadReceiver;
+import android.telephony.mbms.MbmsErrors;
+import android.telephony.mbms.MbmsTempFileProvider;
+import android.telephony.mbms.MbmsUtils;
+import android.telephony.mbms.vendor.IMbmsDownloadService;
+import android.util.Log;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+
+import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+
+/**
+ * This class provides functionality for file download over MBMS.
+ * @hide
+ */
+public class MbmsDownloadSession implements AutoCloseable {
+    private static final String LOG_TAG = MbmsDownloadSession.class.getSimpleName();
+
+    /**
+     * Service action which must be handled by the middleware implementing the MBMS file download
+     * interface.
+     * @hide
+     */
+    //@SystemApi
+    @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION)
+    public static final String MBMS_DOWNLOAD_SERVICE_ACTION =
+            "android.telephony.action.EmbmsDownload";
+
+    /**
+     * Integer extra that Android will attach to the intent supplied via
+     * {@link android.telephony.mbms.DownloadRequest.Builder#setAppIntent(Intent)}
+     * Indicates the result code of the download. One of
+     * {@link #RESULT_SUCCESSFUL}, {@link #RESULT_EXPIRED}, {@link #RESULT_CANCELLED}, or
+     * {@link #RESULT_IO_ERROR}.
+     *
+     * This extra may also be used by the middleware when it is sending intents to the app.
+     */
+    public static final String EXTRA_MBMS_DOWNLOAD_RESULT =
+            "android.telephony.extra.MBMS_DOWNLOAD_RESULT";
+
+    /**
+     * {@link FileInfo} extra that Android will attach to the intent supplied via
+     * {@link android.telephony.mbms.DownloadRequest.Builder#setAppIntent(Intent)}
+     * Indicates the file for which the download result is for. Never null.
+     *
+     * This extra may also be used by the middleware when it is sending intents to the app.
+     */
+    public static final String EXTRA_MBMS_FILE_INFO = "android.telephony.extra.MBMS_FILE_INFO";
+
+    /**
+     * {@link Uri} extra that Android will attach to the intent supplied via
+     * {@link android.telephony.mbms.DownloadRequest.Builder#setAppIntent(Intent)}
+     * Indicates the location of the successfully downloaded file within the temp file root set
+     * via {@link #setTempFileRootDirectory(File)}.
+     * While you may use this file in-place, it is highly encouraged that you move
+     * this file to a different location after receiving the download completion intent, as this
+     * file resides within the temp file directory.
+     *
+     * Will always be set to a non-null value if
+     * {@link #EXTRA_MBMS_DOWNLOAD_RESULT} is set to {@link #RESULT_SUCCESSFUL}.
+     */
+    public static final String EXTRA_MBMS_COMPLETED_FILE_URI =
+            "android.telephony.extra.MBMS_COMPLETED_FILE_URI";
+
+    /**
+     * Extra containing the {@link DownloadRequest} for which the download result or file
+     * descriptor request is for. Must not be null.
+     */
+    public static final String EXTRA_MBMS_DOWNLOAD_REQUEST =
+            "android.telephony.extra.MBMS_DOWNLOAD_REQUEST";
+
+    /**
+     * The default directory name for all MBMS temp files. If you call
+     * {@link #download(DownloadRequest)} without first calling
+     * {@link #setTempFileRootDirectory(File)}, this directory will be created for you under the
+     * path returned by {@link Context#getFilesDir()}.
+     */
+    public static final String DEFAULT_TOP_LEVEL_TEMP_DIRECTORY = "androidMbmsTempFileRoot";
+
+    /**
+     * Indicates that the download was successful.
+     */
+    public static final int RESULT_SUCCESSFUL = 1;
+
+    /**
+     * Indicates that the download was cancelled via {@link #cancelDownload(DownloadRequest)}.
+     */
+    public static final int RESULT_CANCELLED = 2;
+
+    /**
+     * Indicates that the download will not be completed due to the expiration of its download
+     * window on the carrier's network.
+     */
+    public static final int RESULT_EXPIRED = 3;
+
+    /**
+     * Indicates that the download will not be completed due to an I/O error incurred while
+     * writing to temp files. This commonly indicates that the device is out of storage space,
+     * but may indicate other conditions as well (such as an SD card being removed).
+     */
+    public static final int RESULT_IO_ERROR = 4;
+    // TODO - more results!
+
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({STATUS_UNKNOWN, STATUS_ACTIVELY_DOWNLOADING, STATUS_PENDING_DOWNLOAD,
+            STATUS_PENDING_REPAIR, STATUS_PENDING_DOWNLOAD_WINDOW})
+    public @interface DownloadStatus {}
+
+    /**
+     * Indicates that the middleware has no information on the file.
+     */
+    public static final int STATUS_UNKNOWN = 0;
+
+    /**
+     * Indicates that the file is actively downloading.
+     */
+    public static final int STATUS_ACTIVELY_DOWNLOADING = 1;
+
+    /**
+     * TODO: I don't know...
+     */
+    public static final int STATUS_PENDING_DOWNLOAD = 2;
+
+    /**
+     * Indicates that the file is being repaired after the download being interrupted.
+     */
+    public static final int STATUS_PENDING_REPAIR = 3;
+
+    /**
+     * Indicates that the file is waiting to download because its download window has not yet
+     * started.
+     */
+    public static final int STATUS_PENDING_DOWNLOAD_WINDOW = 4;
+
+    private static AtomicBoolean sIsInitialized = new AtomicBoolean(false);
+
+    private final Context mContext;
+    private int mSubscriptionId = INVALID_SUBSCRIPTION_ID;
+    private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
+        @Override
+        public void binderDied() {
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, "Received death notification");
+        }
+    };
+
+    private AtomicReference<IMbmsDownloadService> mService = new AtomicReference<>(null);
+    private final InternalDownloadSessionCallback mInternalCallback;
+    private final Map<DownloadStateCallback, InternalDownloadStateCallback>
+            mInternalDownloadCallbacks = new HashMap<>();
+
+    private MbmsDownloadSession(Context context, MbmsDownloadSessionCallback callback,
+            int subscriptionId, Handler handler) {
+        mContext = context;
+        mSubscriptionId = subscriptionId;
+        if (handler == null) {
+            handler = new Handler(Looper.getMainLooper());
+        }
+        mInternalCallback = new InternalDownloadSessionCallback(callback, handler);
+    }
+
+    /**
+     * Create a new {@link MbmsDownloadSession} using the system default data subscription ID.
+     * See {@link #create(Context, MbmsDownloadSessionCallback, int, Handler)}
+     */
+    public static MbmsDownloadSession create(@NonNull Context context,
+            @NonNull MbmsDownloadSessionCallback callback, @NonNull Handler handler) {
+        return create(context, callback, SubscriptionManager.getDefaultSubscriptionId(), handler);
+    }
+
+    /**
+     * Create a new MbmsDownloadManager using the given subscription ID.
+     *
+     * Note that this call will bind a remote service and that may take a bit. The instance of
+     * {@link MbmsDownloadSession} that is returned will not be ready for use until
+     * {@link MbmsDownloadSessionCallback#onMiddlewareReady()} is called on the provided callback.
+     * If you attempt to use the instance before it is ready, an {@link IllegalStateException}
+     * will be thrown or an error will be delivered through
+     * {@link MbmsDownloadSessionCallback#onError(int, String)}.
+     *
+     * This also may throw an {@link IllegalArgumentException}.
+     *
+     * You may only have one instance of {@link MbmsDownloadSession} per UID. If you call this
+     * method while there is an active instance of {@link MbmsDownloadSession} in your process
+     * (in other words, one that has not had {@link #close()} called on it), this method will
+     * throw an {@link IllegalStateException}. If you call this method in a different process
+     * running under the same UID, an error will be indicated via
+     * {@link MbmsDownloadSessionCallback#onError(int, String)}.
+     *
+     * Note that initialization may fail asynchronously. If you wish to try again after you
+     * receive such an asynchronous error, you must call {@link #close()} on the instance of
+     * {@link MbmsDownloadSession} that you received before calling this method again.
+     *
+     * @param context The instance of {@link Context} to use
+     * @param callback A callback to get asynchronous error messages and file service updates.
+     * @param subscriptionId The data subscription ID to use
+     * @param handler The {@link Handler} on which callbacks should be enqueued.
+     * @return A new instance of {@link MbmsDownloadSession}, or null if an error occurred during
+     * setup.
+     */
+    public static @Nullable MbmsDownloadSession create(@NonNull Context context,
+            final @NonNull MbmsDownloadSessionCallback callback,
+            int subscriptionId, @NonNull Handler handler) {
+        if (!sIsInitialized.compareAndSet(false, true)) {
+            throw new IllegalStateException("Cannot have two active instances");
+        }
+        MbmsDownloadSession session =
+                new MbmsDownloadSession(context, callback, subscriptionId, handler);
+        final int result = session.bindAndInitialize();
+        if (result != MbmsErrors.SUCCESS) {
+            sIsInitialized.set(false);
+            handler.post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onError(result, null);
+                }
+            });
+            return null;
+        }
+        return session;
+    }
+
+    private int bindAndInitialize() {
+        return MbmsUtils.startBinding(mContext, MBMS_DOWNLOAD_SERVICE_ACTION,
+                new ServiceConnection() {
+                    @Override
+                    public void onServiceConnected(ComponentName name, IBinder service) {
+                        IMbmsDownloadService downloadService =
+                                IMbmsDownloadService.Stub.asInterface(service);
+                        int result;
+                        try {
+                            result = downloadService.initialize(mSubscriptionId, mInternalCallback);
+                        } catch (RemoteException e) {
+                            Log.e(LOG_TAG, "Service died before initialization");
+                            sIsInitialized.set(false);
+                            return;
+                        } catch (RuntimeException e) {
+                            Log.e(LOG_TAG, "Runtime exception during initialization");
+                            sendErrorToApp(
+                                    MbmsErrors.InitializationErrors.ERROR_UNABLE_TO_INITIALIZE,
+                                    e.toString());
+                            sIsInitialized.set(false);
+                            return;
+                        }
+                        if (result != MbmsErrors.SUCCESS) {
+                            sendErrorToApp(result, "Error returned during initialization");
+                            sIsInitialized.set(false);
+                            return;
+                        }
+                        try {
+                            downloadService.asBinder().linkToDeath(mDeathRecipient, 0);
+                        } catch (RemoteException e) {
+                            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST,
+                                    "Middleware lost during initialization");
+                            sIsInitialized.set(false);
+                            return;
+                        }
+                        mService.set(downloadService);
+                    }
+
+                    @Override
+                    public void onServiceDisconnected(ComponentName name) {
+                        sIsInitialized.set(false);
+                        mService.set(null);
+                    }
+                });
+    }
+
+    /**
+     * An inspection API to retrieve the list of available
+     * {@link android.telephony.mbms.FileServiceInfo}s currently being advertised.
+     * The results are returned asynchronously via a call to
+     * {@link MbmsDownloadSessionCallback#onFileServicesUpdated(List)}
+     *
+     * Asynchronous error codes via the {@link MbmsDownloadSessionCallback#onError(int, String)}
+     * callback may include any of the errors that are not specific to the streaming use-case.
+     *
+     * May throw an {@link IllegalStateException} or {@link IllegalArgumentException}.
+     *
+     * @param classList A list of service classes which the app wishes to receive
+     *                  {@link MbmsDownloadSessionCallback#onFileServicesUpdated(List)} callbacks
+     *                  about. Subsequent calls to this method will replace this list of service
+     *                  classes (i.e. the middleware will no longer send updates for services
+     *                  matching classes only in the old list).
+     *                  Values in this list should be negotiated with the wireless carrier prior
+     *                  to using this API.
+     */
+    public void requestUpdateFileServices(@NonNull List<String> classList) {
+        IMbmsDownloadService downloadService = mService.get();
+        if (downloadService == null) {
+            throw new IllegalStateException("Middleware not yet bound");
+        }
+        try {
+            int returnCode = downloadService.requestUpdateFileServices(mSubscriptionId, classList);
+            if (returnCode != MbmsErrors.SUCCESS) {
+                sendErrorToApp(returnCode, null);
+            }
+        } catch (RemoteException e) {
+            Log.w(LOG_TAG, "Remote process died");
+            mService.set(null);
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
+        }
+    }
+
+    /**
+     * Sets the temp file root for downloads.
+     * All temp files created for the middleware to write to will be contained in the specified
+     * directory. Applications that wish to specify a location only need to call this method once
+     * as long their data is persisted in storage -- the argument will be stored both in a
+     * local instance of {@link android.content.SharedPreferences} and by the middleware.
+     *
+     * If this method is not called at least once before calling
+     * {@link #download(DownloadRequest)}, the framework
+     * will default to a directory formed by the concatenation of the app's files directory and
+     * {@link MbmsDownloadSession#DEFAULT_TOP_LEVEL_TEMP_DIRECTORY}.
+     *
+     * Before calling this method, the app must cancel all of its pending
+     * {@link DownloadRequest}s via {@link #cancelDownload(DownloadRequest)}. If this is not done,
+     * you will receive an asynchronous error with code
+     * {@link MbmsErrors.DownloadErrors#ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT} unless the
+     * provided directory is the same as what has been previously configured.
+     *
+     * The {@link File} supplied as a root temp file directory must already exist. If not, an
+     * {@link IllegalArgumentException} will be thrown. In addition, as an additional sanity
+     * check, an {@link IllegalArgumentException} will be thrown if you attempt to set the temp
+     * file root directory to one of your data roots (the value of {@link Context#getDataDir()},
+     * {@link Context#getFilesDir()}, or {@link Context#getCacheDir()}).
+     * @param tempFileRootDirectory A directory to place temp files in.
+     */
+    public void setTempFileRootDirectory(@NonNull File tempFileRootDirectory) {
+        IMbmsDownloadService downloadService = mService.get();
+        if (downloadService == null) {
+            throw new IllegalStateException("Middleware not yet bound");
+        }
+        try {
+            validateTempFileRootSanity(tempFileRootDirectory);
+        } catch (IOException e) {
+            throw new IllegalStateException("Got IOException checking directory sanity");
+        }
+        String filePath;
+        try {
+            filePath = tempFileRootDirectory.getCanonicalPath();
+        } catch (IOException e) {
+            throw new IllegalArgumentException("Unable to canonicalize the provided path: " + e);
+        }
+
+        try {
+            int result = downloadService.setTempFileRootDirectory(mSubscriptionId, filePath);
+            if (result != MbmsErrors.SUCCESS) {
+                sendErrorToApp(result, null);
+            }
+        } catch (RemoteException e) {
+            mService.set(null);
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
+            return;
+        }
+
+        SharedPreferences prefs = mContext.getSharedPreferences(
+                MbmsTempFileProvider.TEMP_FILE_ROOT_PREF_FILE_NAME, 0);
+        prefs.edit().putString(MbmsTempFileProvider.TEMP_FILE_ROOT_PREF_NAME, filePath).apply();
+    }
+
+    private void validateTempFileRootSanity(File tempFileRootDirectory) throws IOException {
+        if (!tempFileRootDirectory.exists()) {
+            throw new IllegalArgumentException("Provided directory does not exist");
+        }
+        if (!tempFileRootDirectory.isDirectory()) {
+            throw new IllegalArgumentException("Provided File is not a directory");
+        }
+        String canonicalTempFilePath = tempFileRootDirectory.getCanonicalPath();
+        if (mContext.getDataDir().getCanonicalPath().equals(canonicalTempFilePath)) {
+            throw new IllegalArgumentException("Temp file root cannot be your data dir");
+        }
+        if (mContext.getCacheDir().getCanonicalPath().equals(canonicalTempFilePath)) {
+            throw new IllegalArgumentException("Temp file root cannot be your cache dir");
+        }
+        if (mContext.getFilesDir().getCanonicalPath().equals(canonicalTempFilePath)) {
+            throw new IllegalArgumentException("Temp file root cannot be your files dir");
+        }
+    }
+    /**
+     * Retrieves the currently configured temp file root directory. Returns the file that was
+     * configured via {@link #setTempFileRootDirectory(File)} or the default directory
+     * {@link #download(DownloadRequest)} was called without ever
+     * setting the temp file root. If neither method has been called since the last time the app's
+     * shared preferences were reset, returns {@code null}.
+     *
+     * @return A {@link File} pointing to the configured temp file directory, or null if not yet
+     *         configured.
+     */
+    public @Nullable File getTempFileRootDirectory() {
+        SharedPreferences prefs = mContext.getSharedPreferences(
+                MbmsTempFileProvider.TEMP_FILE_ROOT_PREF_FILE_NAME, 0);
+        String path = prefs.getString(MbmsTempFileProvider.TEMP_FILE_ROOT_PREF_NAME, null);
+        if (path != null) {
+            return new File(path);
+        }
+        return null;
+    }
+
+    /**
+     * Requests the download of a file or set of files that the carrier has indicated to be
+     * available.
+     *
+     * May throw an {@link IllegalArgumentException}
+     *
+     * If {@link #setTempFileRootDirectory(File)} has not called after the app has been installed,
+     * this method will create a directory at the default location defined at
+     * {@link MbmsDownloadSession#DEFAULT_TOP_LEVEL_TEMP_DIRECTORY} and store that as the temp
+     * file root directory.
+     *
+     * Asynchronous errors through the callback may include any error not specific to the
+     * streaming use-case.
+     * @param request The request that specifies what should be downloaded.
+     */
+    public void download(@NonNull DownloadRequest request) {
+        IMbmsDownloadService downloadService = mService.get();
+        if (downloadService == null) {
+            throw new IllegalStateException("Middleware not yet bound");
+        }
+
+        // Check to see whether the app's set a temp root dir yet, and set it if not.
+        SharedPreferences prefs = mContext.getSharedPreferences(
+                MbmsTempFileProvider.TEMP_FILE_ROOT_PREF_FILE_NAME, 0);
+        if (prefs.getString(MbmsTempFileProvider.TEMP_FILE_ROOT_PREF_NAME, null) == null) {
+            File tempRootDirectory = new File(mContext.getFilesDir(),
+                    DEFAULT_TOP_LEVEL_TEMP_DIRECTORY);
+            tempRootDirectory.mkdirs();
+            setTempFileRootDirectory(tempRootDirectory);
+        }
+
+        writeDownloadRequestToken(request);
+        try {
+            downloadService.download(request);
+        } catch (RemoteException e) {
+            mService.set(null);
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
+        }
+    }
+
+    /**
+     * Returns a list of pending {@link DownloadRequest}s that originated from this application.
+     * A pending request is one that was issued via
+     * {@link #download(DownloadRequest)} but not cancelled through
+     * {@link #cancelDownload(DownloadRequest)}.
+     * @return A list, possibly empty, of {@link DownloadRequest}s
+     */
+    public @NonNull List<DownloadRequest> listPendingDownloads() {
+        IMbmsDownloadService downloadService = mService.get();
+        if (downloadService == null) {
+            throw new IllegalStateException("Middleware not yet bound");
+        }
+
+        try {
+            return downloadService.listPendingDownloads(mSubscriptionId);
+        } catch (RemoteException e) {
+            mService.set(null);
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
+            return Collections.emptyList();
+        }
+    }
+
+    /**
+     * Registers a callback for a {@link DownloadRequest} previously requested via
+     * {@link #download(DownloadRequest)}. This callback will only be called as long as both this
+     * app and the middleware are both running -- if either one stops, no further calls on the
+     * provided {@link DownloadStateCallback} will be enqueued.
+     *
+     * If the middleware is not aware of the specified download request,
+     * this method will throw an {@link IllegalArgumentException}.
+     *
+     * @param request The {@link DownloadRequest} that you want updates on.
+     * @param callback The callback that should be called when the middleware has information to
+     *                 share on the download.
+     * @param handler The {@link Handler} on which calls to {@code callback} should be enqueued on.
+     */
+    public void registerStateCallback(@NonNull DownloadRequest request,
+            @NonNull DownloadStateCallback callback, @NonNull Handler handler) {
+        IMbmsDownloadService downloadService = mService.get();
+        if (downloadService == null) {
+            throw new IllegalStateException("Middleware not yet bound");
+        }
+
+        InternalDownloadStateCallback internalCallback =
+                new InternalDownloadStateCallback(callback, handler);
+
+        try {
+            int result = downloadService.registerStateCallback(request, internalCallback,
+                    callback.getCallbackFilterFlags());
+            if (result != MbmsErrors.SUCCESS) {
+                if (result == MbmsErrors.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST) {
+                    throw new IllegalArgumentException("Unknown download request.");
+                }
+                sendErrorToApp(result, null);
+                return;
+            }
+        } catch (RemoteException e) {
+            mService.set(null);
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
+            return;
+        }
+        mInternalDownloadCallbacks.put(callback, internalCallback);
+    }
+
+    /**
+     * Un-register a callback previously registered via
+     * {@link #registerStateCallback(DownloadRequest, DownloadStateCallback, Handler)}. After
+     * this method is called, no further callbacks will be enqueued on the {@link Handler}
+     * provided upon registration, even if this method throws an exception.
+     *
+     * If the middleware is not aware of the specified download request,
+     * this method will throw an {@link IllegalArgumentException}.
+     *
+     * @param request The {@link DownloadRequest} provided during registration
+     * @param callback The callback provided during registration.
+     */
+    public void unregisterStateCallback(@NonNull DownloadRequest request,
+            @NonNull DownloadStateCallback callback) {
+        try {
+            IMbmsDownloadService downloadService = mService.get();
+            if (downloadService == null) {
+                throw new IllegalStateException("Middleware not yet bound");
+            }
+
+            InternalDownloadStateCallback internalCallback =
+                    mInternalDownloadCallbacks.get(callback);
+
+            try {
+                int result = downloadService.unregisterStateCallback(request, internalCallback);
+                if (result != MbmsErrors.SUCCESS) {
+                    if (result == MbmsErrors.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST) {
+                        throw new IllegalArgumentException("Unknown download request.");
+                    }
+                    sendErrorToApp(result, null);
+                }
+            } catch (RemoteException e) {
+                mService.set(null);
+                sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
+            }
+        } finally {
+            InternalDownloadStateCallback internalCallback =
+                    mInternalDownloadCallbacks.remove(callback);
+            if (internalCallback != null) {
+                internalCallback.stop();
+            }
+        }
+    }
+
+    /**
+     * Attempts to cancel the specified {@link DownloadRequest}.
+     *
+     * If the middleware is not aware of the specified download request,
+     * this method will throw an {@link IllegalArgumentException}.
+     *
+     * @param downloadRequest The download request that you wish to cancel.
+     */
+    public void cancelDownload(@NonNull DownloadRequest downloadRequest) {
+        IMbmsDownloadService downloadService = mService.get();
+        if (downloadService == null) {
+            throw new IllegalStateException("Middleware not yet bound");
+        }
+
+        try {
+            int result = downloadService.cancelDownload(downloadRequest);
+            if (result != MbmsErrors.SUCCESS) {
+                if (result == MbmsErrors.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST) {
+                    throw new IllegalArgumentException("Unknown download request.");
+                }
+                sendErrorToApp(result, null);
+                return;
+            }
+        } catch (RemoteException e) {
+            mService.set(null);
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
+            return;
+        }
+        deleteDownloadRequestToken(downloadRequest);
+    }
+
+    /**
+     * Gets information about the status of a file pending download.
+     *
+     * If there was a problem communicating with the middleware or if it has no records of the
+     * file indicated by {@code fileInfo} being associated with {@code downloadRequest},
+     * {@link #STATUS_UNKNOWN} will be returned.
+     *
+     * @param downloadRequest The download request to query.
+     * @param fileInfo The particular file within the request to get information on.
+     * @return The status of the download.
+     */
+    @DownloadStatus
+    public int getDownloadStatus(DownloadRequest downloadRequest, FileInfo fileInfo) {
+        IMbmsDownloadService downloadService = mService.get();
+        if (downloadService == null) {
+            throw new IllegalStateException("Middleware not yet bound");
+        }
+
+        try {
+            return downloadService.getDownloadStatus(downloadRequest, fileInfo);
+        } catch (RemoteException e) {
+            mService.set(null);
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
+            return STATUS_UNKNOWN;
+        }
+    }
+
+    /**
+     * Resets the middleware's knowledge of previously-downloaded files in this download request.
+     *
+     * Normally, the middleware keeps track of the hashes of downloaded files and won't re-download
+     * files whose server-reported hash matches one of the already-downloaded files. This means
+     * that if the file is accidentally deleted by the user or by the app, the middleware will
+     * not try to download it again.
+     * This method will reset the middleware's cache of hashes for the provided
+     * {@link DownloadRequest}, so that previously downloaded content will be downloaded again
+     * when available.
+     * This will not interrupt in-progress downloads.
+     *
+     * This is distinct from cancelling and re-issuing the download request -- if you cancel and
+     * re-issue, the middleware will not clear its cache of download state information.
+     *
+     * If the middleware is not aware of the specified download request, an
+     * {@link IllegalArgumentException} will be thrown.
+     *
+     * @param downloadRequest The request to re-download files for.
+     */
+    public void resetDownloadKnowledge(DownloadRequest downloadRequest) {
+        IMbmsDownloadService downloadService = mService.get();
+        if (downloadService == null) {
+            throw new IllegalStateException("Middleware not yet bound");
+        }
+
+        try {
+            int result = downloadService.resetDownloadKnowledge(downloadRequest);
+            if (result != MbmsErrors.SUCCESS) {
+                if (result == MbmsErrors.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST) {
+                    throw new IllegalArgumentException("Unknown download request.");
+                }
+                sendErrorToApp(result, null);
+            }
+        } catch (RemoteException e) {
+            mService.set(null);
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
+        }
+    }
+
+    /**
+     * Terminates this instance.
+     *
+     * After this method returns,
+     * no further callbacks originating from the middleware will be enqueued on the provided
+     * instance of {@link MbmsDownloadSessionCallback}, but callbacks that have already been
+     * enqueued will still be delivered.
+     *
+     * It is safe to call {@link #create(Context, MbmsDownloadSessionCallback, int, Handler)} to
+     * obtain another instance of {@link MbmsDownloadSession} immediately after this method
+     * returns.
+     *
+     * May throw an {@link IllegalStateException}
+     */
+    @Override
+    public void close() {
+        try {
+            IMbmsDownloadService downloadService = mService.get();
+            if (downloadService == null) {
+                Log.i(LOG_TAG, "Service already dead");
+                return;
+            }
+            downloadService.dispose(mSubscriptionId);
+        } catch (RemoteException e) {
+            // Ignore
+            Log.i(LOG_TAG, "Remote exception while disposing of service");
+        } finally {
+            mService.set(null);
+            sIsInitialized.set(false);
+            mInternalCallback.stop();
+        }
+    }
+
+    private void writeDownloadRequestToken(DownloadRequest request) {
+        File token = getDownloadRequestTokenPath(request);
+        if (!token.getParentFile().exists()) {
+            token.getParentFile().mkdirs();
+        }
+        if (token.exists()) {
+            Log.w(LOG_TAG, "Download token " + token.getName() + " already exists");
+            return;
+        }
+        try {
+            if (!token.createNewFile()) {
+                throw new RuntimeException("Failed to create download token for request "
+                        + request);
+            }
+        } catch (IOException e) {
+            throw new RuntimeException("Failed to create download token for request " + request
+                    + " due to IOException " + e);
+        }
+    }
+
+    private void deleteDownloadRequestToken(DownloadRequest request) {
+        File token = getDownloadRequestTokenPath(request);
+        if (!token.isFile()) {
+            Log.w(LOG_TAG, "Attempting to delete non-existent download token at " + token);
+            return;
+        }
+        if (!token.delete()) {
+            Log.w(LOG_TAG, "Couldn't delete download token at " + token);
+        }
+    }
+
+    private File getDownloadRequestTokenPath(DownloadRequest request) {
+        File tempFileLocation = MbmsUtils.getEmbmsTempFileDirForService(mContext,
+                request.getFileServiceId());
+        String downloadTokenFileName = request.getHash()
+                + MbmsDownloadReceiver.DOWNLOAD_TOKEN_SUFFIX;
+        return new File(tempFileLocation, downloadTokenFileName);
+    }
+
+    private void sendErrorToApp(int errorCode, String message) {
+        try {
+            mInternalCallback.onError(errorCode, message);
+        } catch (RemoteException e) {
+            // Ignore, should not happen locally.
+        }
+    }
+}
diff --git a/telephony/java/android/telephony/MbmsStreamingManager.java b/telephony/java/android/telephony/MbmsStreamingManager.java
deleted file mode 100644
index e90a63c..0000000
--- a/telephony/java/android/telephony/MbmsStreamingManager.java
+++ /dev/null
@@ -1,295 +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.telephony;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.os.DeadObjectException;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.telephony.mbms.MbmsException;
-import android.telephony.mbms.MbmsStreamingManagerCallback;
-import android.telephony.mbms.StreamingService;
-import android.telephony.mbms.StreamingServiceCallback;
-import android.telephony.mbms.StreamingServiceInfo;
-import android.telephony.mbms.vendor.IMbmsStreamingService;
-import android.util.Log;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
-
-/** @hide */
-public class MbmsStreamingManager {
-    private interface ServiceListener {
-        void onServiceConnected();
-        void onServiceDisconnected();
-    }
-
-    private static final String LOG_TAG = "MbmsStreamingManager";
-    public static final String MBMS_STREAMING_SERVICE_ACTION =
-            "android.telephony.action.EmbmsStreaming";
-
-    private static final boolean DEBUG = true;
-    private static final int BIND_TIMEOUT_MS = 3000;
-
-    private IMbmsStreamingService mService;
-    private ServiceConnection mServiceConnection = new ServiceConnection() {
-        @Override
-        public void onServiceConnected(ComponentName name, IBinder service) {
-            if (service != null) {
-                Log.i(LOG_TAG, String.format("Connected to service %s", name));
-                synchronized (MbmsStreamingManager.this) {
-                    mService = IMbmsStreamingService.Stub.asInterface(service);
-                    mServiceListeners.forEach(ServiceListener::onServiceConnected);
-                }
-            }
-        }
-
-        @Override
-        public void onServiceDisconnected(ComponentName name) {
-            Log.i(LOG_TAG, String.format("Disconnected from service %s", name));
-            synchronized (MbmsStreamingManager.this) {
-                mService = null;
-                mServiceListeners.forEach(ServiceListener::onServiceDisconnected);
-            }
-        }
-    };
-    private List<ServiceListener> mServiceListeners = new LinkedList<>();
-
-    private MbmsStreamingManagerCallback mCallbackToApp;
-    private final String mAppName;
-
-    private final Context mContext;
-    private int mSubscriptionId = INVALID_SUBSCRIPTION_ID;
-
-    /** @hide */
-    private MbmsStreamingManager(Context context, MbmsStreamingManagerCallback listener,
-                    String streamingAppName, int subscriptionId) {
-        mContext = context;
-        mAppName = streamingAppName;
-        mCallbackToApp = listener;
-        mSubscriptionId = subscriptionId;
-    }
-
-    /**
-     * Create a new MbmsStreamingManager using the given subscription ID.
-     *
-     * Note that this call will bind a remote service. You may not call this method on your app's
-     * main thread. This may throw an {@link MbmsException}, indicating errors that may happen
-     * during the initialization or binding process.
-     *
-     * @param context The {@link Context} to use.
-     * @param listener A callback object on which you wish to receive results of asynchronous
-     *                 operations.
-     * @param streamingAppName The name of the streaming app, as specified by the carrier.
-     * @param subscriptionId The subscription ID to use.
-     */
-    public static MbmsStreamingManager create(Context context,
-            MbmsStreamingManagerCallback listener, String streamingAppName, int subscriptionId)
-            throws MbmsException {
-        MbmsStreamingManager manager = new MbmsStreamingManager(context, listener,
-                streamingAppName, subscriptionId);
-        manager.bindAndInitialize();
-        return manager;
-    }
-
-    /**
-     * Create a new MbmsStreamingManager using the system default data subscription ID.
-     * See {@link #create(Context, MbmsStreamingManagerCallback, String, int)}.
-     */
-    public static MbmsStreamingManager create(Context context,
-            MbmsStreamingManagerCallback listener, String streamingAppName)
-            throws MbmsException {
-        int subId = SubscriptionManager.getDefaultSubscriptionId();
-        MbmsStreamingManager manager = new MbmsStreamingManager(context, listener,
-                streamingAppName, subId);
-        manager.bindAndInitialize();
-        return manager;
-    }
-
-    /**
-     * Terminates this instance, ending calls to the registered listener.  Also terminates
-     * any streaming services spawned from this instance.
-     */
-    public synchronized void dispose() {
-        if (mService == null) {
-            // Ignore and return, assume already disposed.
-            return;
-        }
-        try {
-            mService.dispose(mAppName, mSubscriptionId);
-        } catch (RemoteException e) {
-            // Ignore for now
-        }
-        mService = null;
-    }
-
-    /**
-     * An inspection API to retrieve the list of streaming media currently be advertised.
-     * The results are returned asynchronously through the previously registered callback.
-     * serviceClasses lets the app filter on types of programming and is opaque data between
-     * the app and the carrier.
-     *
-     * Multiple calls replace the list of serviceClasses of interest.
-     *
-     * This may throw an {@link MbmsException} containing one of the following errors:
-     * {@link MbmsException#ERROR_MIDDLEWARE_NOT_BOUND}
-     * {@link MbmsException#ERROR_CONCURRENT_SERVICE_LIMIT_REACHED}
-     * {@link MbmsException#ERROR_SERVICE_LOST}
-     *
-     * Asynchronous error codes via the {@link MbmsStreamingManagerCallback#error(int, String)}
-     * callback can include any of the errors except:
-     * {@link MbmsException#ERROR_UNABLE_TO_START_SERVICE}
-     * {@link MbmsException#ERROR_END_OF_SESSION}
-     */
-    public void getStreamingServices(List<String> classList) throws MbmsException {
-        if (mService == null) {
-            throw new MbmsException(MbmsException.ERROR_MIDDLEWARE_NOT_BOUND);
-        }
-        try {
-            int returnCode = mService.getStreamingServices(mAppName, mSubscriptionId, classList);
-            if (returnCode != MbmsException.SUCCESS) {
-                throw new MbmsException(returnCode);
-            }
-        } catch (RemoteException e) {
-            Log.w(LOG_TAG, "Remote process died");
-            mService = null;
-            throw new MbmsException(MbmsException.ERROR_SERVICE_LOST);
-        }
-    }
-
-    /**
-     * Starts streaming a requested service, reporting status to the indicated listener.
-     * Returns an object used to control that stream. The stream may not be ready for consumption
-     * immediately upon return from this method -- wait until the streaming state has been
-     * reported via {@link android.telephony.mbms.StreamingServiceCallback#streamStateChanged(int)}.
-     *
-     * May throw an {@link MbmsException} containing any of the following error codes:
-     * {@link MbmsException#ERROR_MIDDLEWARE_NOT_BOUND}
-     * {@link MbmsException#ERROR_CONCURRENT_SERVICE_LIMIT_REACHED}
-     * {@link MbmsException#ERROR_SERVICE_LOST}
-     *
-     * May also throw an {@link IllegalArgumentException} or an {@link IllegalStateException}
-     *
-     * Asynchronous errors through the listener include any of the errors
-     */
-    public StreamingService startStreaming(StreamingServiceInfo serviceInfo,
-            StreamingServiceCallback listener) throws MbmsException {
-        if (mService == null) {
-            throw new MbmsException(MbmsException.ERROR_MIDDLEWARE_NOT_BOUND);
-        }
-
-        try {
-            int returnCode = mService.startStreaming(
-                    mAppName, mSubscriptionId, serviceInfo.getServiceId(), listener);
-            if (returnCode != MbmsException.SUCCESS) {
-                throw new MbmsException(returnCode);
-            }
-        } catch (RemoteException e) {
-            Log.w(LOG_TAG, "Remote process died");
-            mService = null;
-            throw new MbmsException(MbmsException.ERROR_SERVICE_LOST);
-        }
-
-        return new StreamingService(
-                mAppName, mSubscriptionId, mService, serviceInfo, listener);
-    }
-
-    private void bindAndInitialize() throws MbmsException {
-        // Query for the proper service
-        PackageManager packageManager = mContext.getPackageManager();
-        Intent queryIntent = new Intent();
-        queryIntent.setAction(MBMS_STREAMING_SERVICE_ACTION);
-        List<ResolveInfo> streamingServices = packageManager.queryIntentServices(queryIntent,
-                PackageManager.MATCH_SYSTEM_ONLY);
-
-        if (streamingServices == null || streamingServices.size() == 0) {
-            throw new MbmsException(
-                    MbmsException.ERROR_NO_SERVICE_INSTALLED);
-        }
-        if (streamingServices.size() > 1) {
-            throw new MbmsException(
-                    MbmsException.ERROR_MULTIPLE_SERVICES_INSTALLED);
-        }
-
-        // Kick off the binding, and synchronously wait until binding is complete
-        final CountDownLatch latch = new CountDownLatch(1);
-        ServiceListener bindListener = new ServiceListener() {
-            @Override
-            public void onServiceConnected() {
-                latch.countDown();
-            }
-
-            @Override
-            public void onServiceDisconnected() {
-            }
-        };
-
-        synchronized (this) {
-            mServiceListeners.add(bindListener);
-        }
-
-        Intent bindIntent = new Intent();
-        bindIntent.setComponent(streamingServices.get(0).getComponentInfo().getComponentName());
-
-        mContext.bindService(bindIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
-
-        waitOnLatchWithTimeout(latch, BIND_TIMEOUT_MS);
-
-        // Remove the listener and call the initialization method through the interface.
-        synchronized (this) {
-            mServiceListeners.remove(bindListener);
-
-            if (mService == null) {
-                throw new MbmsException(MbmsException.ERROR_BIND_TIMEOUT_OR_FAILURE);
-            }
-
-            try {
-                int returnCode = mService.initialize(mCallbackToApp, mAppName, mSubscriptionId);
-                if (returnCode != MbmsException.SUCCESS) {
-                    throw new MbmsException(returnCode);
-                }
-            } catch (RemoteException e) {
-                mService = null;
-                Log.e(LOG_TAG, "Service died before initialization");
-                throw new MbmsException(MbmsException.ERROR_SERVICE_LOST);
-            }
-        }
-    }
-
-    private static void waitOnLatchWithTimeout(CountDownLatch l, long timeoutMs) {
-        long endTime = System.currentTimeMillis() + timeoutMs;
-        while (System.currentTimeMillis() < endTime) {
-            try {
-                l.await(timeoutMs, TimeUnit.MILLISECONDS);
-            } catch (InterruptedException e) {
-                // keep waiting
-            }
-            if (l.getCount() <= 0) {
-                return;
-            }
-        }
-    }
-}
diff --git a/telephony/java/android/telephony/MbmsStreamingSession.java b/telephony/java/android/telephony/MbmsStreamingSession.java
new file mode 100644
index 0000000..efb6055
--- /dev/null
+++ b/telephony/java/android/telephony/MbmsStreamingSession.java
@@ -0,0 +1,331 @@
+/*
+ * 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.telephony;
+
+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.ServiceConnection;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.telephony.mbms.InternalStreamingSessionCallback;
+import android.telephony.mbms.InternalStreamingServiceCallback;
+import android.telephony.mbms.MbmsErrors;
+import android.telephony.mbms.MbmsStreamingSessionCallback;
+import android.telephony.mbms.MbmsUtils;
+import android.telephony.mbms.StreamingService;
+import android.telephony.mbms.StreamingServiceCallback;
+import android.telephony.mbms.StreamingServiceInfo;
+import android.telephony.mbms.vendor.IMbmsStreamingService;
+import android.util.ArraySet;
+import android.util.Log;
+
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+
+import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+
+/**
+ * This class provides functionality for streaming media over MBMS.
+ * @hide
+ */
+public class MbmsStreamingSession implements AutoCloseable {
+    private static final String LOG_TAG = "MbmsStreamingSession";
+
+    /**
+     * Service action which must be handled by the middleware implementing the MBMS streaming
+     * interface.
+     * @hide
+     */
+    @SystemApi
+    @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION)
+    public static final String MBMS_STREAMING_SERVICE_ACTION =
+            "android.telephony.action.EmbmsStreaming";
+
+    private static AtomicBoolean sIsInitialized = new AtomicBoolean(false);
+
+    private AtomicReference<IMbmsStreamingService> mService = new AtomicReference<>(null);
+    private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
+        @Override
+        public void binderDied() {
+            sIsInitialized.set(false);
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, "Received death notification");
+        }
+    };
+
+    private InternalStreamingSessionCallback mInternalCallback;
+    private Set<StreamingService> mKnownActiveStreamingServices = new ArraySet<>();
+
+    private final Context mContext;
+    private int mSubscriptionId = INVALID_SUBSCRIPTION_ID;
+
+    /** @hide */
+    private MbmsStreamingSession(Context context, MbmsStreamingSessionCallback callback,
+                    int subscriptionId, Handler handler) {
+        mContext = context;
+        mSubscriptionId = subscriptionId;
+        if (handler == null) {
+            handler = new Handler(Looper.getMainLooper());
+        }
+        mInternalCallback = new InternalStreamingSessionCallback(callback, handler);
+    }
+
+    /**
+     * Create a new {@link MbmsStreamingSession} using the given subscription ID.
+     *
+     * Note that this call will bind a remote service. You may not call this method on your app's
+     * main thread.
+     *
+     * You may only have one instance of {@link MbmsStreamingSession} per UID. If you call this
+     * method while there is an active instance of {@link MbmsStreamingSession} in your process
+     * (in other words, one that has not had {@link #close()} called on it), this method will
+     * throw an {@link IllegalStateException}. If you call this method in a different process
+     * running under the same UID, an error will be indicated via
+     * {@link MbmsStreamingSessionCallback#onError(int, String)}.
+     *
+     * Note that initialization may fail asynchronously. If you wish to try again after you
+     * receive such an asynchronous error, you must call {@link #close()} on the instance of
+     * {@link MbmsStreamingSession} that you received before calling this method again.
+     *
+     * @param context The {@link Context} to use.
+     * @param callback A callback object on which you wish to receive results of asynchronous
+     *                 operations.
+     * @param subscriptionId The subscription ID to use.
+     * @param handler The handler you wish to receive callbacks on.
+     * @return An instance of {@link MbmsStreamingSession}, or null if an error occurred.
+     */
+    public static @Nullable MbmsStreamingSession create(@NonNull Context context,
+            final @NonNull MbmsStreamingSessionCallback callback, int subscriptionId,
+            @NonNull Handler handler) {
+        if (!sIsInitialized.compareAndSet(false, true)) {
+            throw new IllegalStateException("Cannot create two instances of MbmsStreamingSession");
+        }
+        MbmsStreamingSession session = new MbmsStreamingSession(context, callback,
+                subscriptionId, handler);
+
+        final int result = session.bindAndInitialize();
+        if (result != MbmsErrors.SUCCESS) {
+            sIsInitialized.set(false);
+            handler.post(new Runnable() {
+                @Override
+                public void run() {
+                    callback.onError(result, null);
+                }
+            });
+            return null;
+        }
+        return session;
+    }
+
+    /**
+     * Create a new {@link MbmsStreamingSession} using the system default data subscription ID.
+     * See {@link #create(Context, MbmsStreamingSessionCallback, int, Handler)}.
+     */
+    public static MbmsStreamingSession create(@NonNull Context context,
+            @NonNull MbmsStreamingSessionCallback callback, @NonNull Handler handler) {
+        return create(context, callback, SubscriptionManager.getDefaultSubscriptionId(), handler);
+    }
+
+    /**
+     * Terminates this instance. Also terminates
+     * any streaming services spawned from this instance as if
+     * {@link StreamingService#stopStreaming()} had been called on them. After this method returns,
+     * no further callbacks originating from the middleware will be enqueued on the provided
+     * instance of {@link MbmsStreamingSessionCallback}, but callbacks that have already been
+     * enqueued will still be delivered.
+     *
+     * It is safe to call {@link #create(Context, MbmsStreamingSessionCallback, int, Handler)} to
+     * obtain another instance of {@link MbmsStreamingSession} immediately after this method
+     * returns.
+     *
+     * May throw an {@link IllegalStateException}
+     */
+    public void close() {
+        try {
+            IMbmsStreamingService streamingService = mService.get();
+            if (streamingService == null) {
+                // Ignore and return, assume already disposed.
+                return;
+            }
+            streamingService.dispose(mSubscriptionId);
+            for (StreamingService s : mKnownActiveStreamingServices) {
+                s.getCallback().stop();
+            }
+            mKnownActiveStreamingServices.clear();
+        } catch (RemoteException e) {
+            // Ignore for now
+        } finally {
+            mService.set(null);
+            sIsInitialized.set(false);
+            mInternalCallback.stop();
+        }
+    }
+
+    /**
+     * An inspection API to retrieve the list of streaming media currently be advertised.
+     * The results are returned asynchronously via
+     * {@link MbmsStreamingSessionCallback#onStreamingServicesUpdated(List)} on the callback
+     * provided upon creation.
+     *
+     * Multiple calls replace the list of service classes of interest.
+     *
+     * May throw an {@link IllegalArgumentException} or an {@link IllegalStateException}.
+     *
+     * @param serviceClassList A list of streaming service classes that the app would like updates
+     *                         on. The exact names of these classes should be negotiated with the
+     *                         wireless carrier separately.
+     */
+    public void requestUpdateStreamingServices(List<String> serviceClassList) {
+        IMbmsStreamingService streamingService = mService.get();
+        if (streamingService == null) {
+            throw new IllegalStateException("Middleware not yet bound");
+        }
+        try {
+            int returnCode = streamingService.requestUpdateStreamingServices(
+                    mSubscriptionId, serviceClassList);
+            if (returnCode != MbmsErrors.SUCCESS) {
+                sendErrorToApp(returnCode, null);
+            }
+        } catch (RemoteException e) {
+            Log.w(LOG_TAG, "Remote process died");
+            mService.set(null);
+            sIsInitialized.set(false);
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
+        }
+    }
+
+    /**
+     * Starts streaming a requested service, reporting status to the indicated callback.
+     * Returns an object used to control that stream. The stream may not be ready for consumption
+     * immediately upon return from this method -- wait until the streaming state has been
+     * reported via
+     * {@link android.telephony.mbms.StreamingServiceCallback#onStreamStateUpdated(int, int)}
+     *
+     * May throw an {@link IllegalArgumentException} or an {@link IllegalStateException}
+     *
+     * Asynchronous errors through the callback include any of the errors in
+     * {@link MbmsErrors.GeneralErrors} or
+     * {@link MbmsErrors.StreamingErrors}.
+     *
+     * @param serviceInfo The information about the service to stream.
+     * @param callback A callback that'll be called when something about the stream changes.
+     * @param handler A handler that calls to {@code callback} should be called on.
+     * @return An instance of {@link StreamingService} through which the stream can be controlled.
+     *         May be {@code null} if an error occurred.
+     */
+    public @Nullable StreamingService startStreaming(StreamingServiceInfo serviceInfo,
+            StreamingServiceCallback callback, @NonNull Handler handler) {
+        IMbmsStreamingService streamingService = mService.get();
+        if (streamingService == null) {
+            throw new IllegalStateException("Middleware not yet bound");
+        }
+
+        InternalStreamingServiceCallback serviceCallback = new InternalStreamingServiceCallback(
+                callback, handler);
+
+        StreamingService serviceForApp = new StreamingService(
+                mSubscriptionId, streamingService, this, serviceInfo, serviceCallback);
+        mKnownActiveStreamingServices.add(serviceForApp);
+
+        try {
+            int returnCode = streamingService.startStreaming(
+                    mSubscriptionId, serviceInfo.getServiceId(), serviceCallback);
+            if (returnCode != MbmsErrors.SUCCESS) {
+                sendErrorToApp(returnCode, null);
+                return null;
+            }
+        } catch (RemoteException e) {
+            Log.w(LOG_TAG, "Remote process died");
+            mService.set(null);
+            sIsInitialized.set(false);
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
+            return null;
+        }
+
+        return serviceForApp;
+    }
+
+    /** @hide */
+    public void onStreamingServiceStopped(StreamingService service) {
+        mKnownActiveStreamingServices.remove(service);
+    }
+
+    private int bindAndInitialize() {
+        return MbmsUtils.startBinding(mContext, MBMS_STREAMING_SERVICE_ACTION,
+                new ServiceConnection() {
+                    @Override
+                    public void onServiceConnected(ComponentName name, IBinder service) {
+                        IMbmsStreamingService streamingService =
+                                IMbmsStreamingService.Stub.asInterface(service);
+                        int result;
+                        try {
+                            result = streamingService.initialize(mInternalCallback,
+                                    mSubscriptionId);
+                        } catch (RemoteException e) {
+                            Log.e(LOG_TAG, "Service died before initialization");
+                            sendErrorToApp(
+                                    MbmsErrors.InitializationErrors.ERROR_UNABLE_TO_INITIALIZE,
+                                    e.toString());
+                            sIsInitialized.set(false);
+                            return;
+                        } catch (RuntimeException e) {
+                            Log.e(LOG_TAG, "Runtime exception during initialization");
+                            sendErrorToApp(
+                                    MbmsErrors.InitializationErrors.ERROR_UNABLE_TO_INITIALIZE,
+                                    e.toString());
+                            sIsInitialized.set(false);
+                            return;
+                        }
+                        if (result != MbmsErrors.SUCCESS) {
+                            sendErrorToApp(result, "Error returned during initialization");
+                            sIsInitialized.set(false);
+                            return;
+                        }
+                        try {
+                            streamingService.asBinder().linkToDeath(mDeathRecipient, 0);
+                        } catch (RemoteException e) {
+                            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST,
+                                    "Middleware lost during initialization");
+                            sIsInitialized.set(false);
+                            return;
+                        }
+                        mService.set(streamingService);
+                    }
+
+                    @Override
+                    public void onServiceDisconnected(ComponentName name) {
+                        sIsInitialized.set(false);
+                        mService.set(null);
+                    }
+                });
+    }
+
+    private void sendErrorToApp(int errorCode, String message) {
+        try {
+            mInternalCallback.onError(errorCode, message);
+        } catch (RemoteException e) {
+            // Ignore, should not happen locally.
+        }
+    }
+}
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java
index 8705446..d5ff1ad 100644
--- a/telephony/java/android/telephony/PhoneNumberUtils.java
+++ b/telephony/java/android/telephony/PhoneNumberUtils.java
@@ -2540,11 +2540,11 @@
     }
 
     // Split a phone number like "+20(123)-456#" using spaces, ignoring anything that is not
-    // a digit, to produce a result like "20 123 456".
+    // a digit or the characters * and #, to produce a result like "20 123 456#".
     private static String splitAtNonNumerics(CharSequence number) {
         StringBuilder sb = new StringBuilder(number.length());
         for (int i = 0; i < number.length(); i++) {
-            sb.append(PhoneNumberUtils.isISODigit(number.charAt(i))
+            sb.append(PhoneNumberUtils.is12Key(number.charAt(i))
                     ? number.charAt(i)
                     : " ");
         }
diff --git a/telephony/java/android/telephony/Rlog.java b/telephony/java/android/telephony/Rlog.java
index 2a31e3a..e0b46e1 100644
--- a/telephony/java/android/telephony/Rlog.java
+++ b/telephony/java/android/telephony/Rlog.java
@@ -33,7 +33,7 @@
  */
 public final class Rlog {
 
-    private static final boolean USER_BUILD = Build.TYPE.equals("user");
+    private static final boolean USER_BUILD = Build.IS_USER;
 
     private Rlog() {
     }
diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java
index 5fb83ab..e448fb2 100644
--- a/telephony/java/android/telephony/ServiceState.java
+++ b/telephony/java/android/telephony/ServiceState.java
@@ -795,34 +795,57 @@
         return rtString;
     }
 
+    /**
+     * Convert RIL Service State to String
+     *
+     * @param serviceState
+     * @return String representation of the ServiceState
+     *
+     * @hide
+     */
+    public static String rilServiceStateToString(int serviceState) {
+        switch(serviceState) {
+            case STATE_IN_SERVICE:
+                return "IN_SERVICE";
+            case STATE_OUT_OF_SERVICE:
+                return "OUT_OF_SERVICE";
+            case STATE_EMERGENCY_ONLY:
+                return "EMERGENCY_ONLY";
+            case STATE_POWER_OFF:
+                return "POWER_OFF";
+            default:
+                return "UNKNOWN";
+        }
+    }
+
     @Override
     public String toString() {
-        String radioTechnology = rilRadioTechnologyToString(mRilVoiceRadioTechnology);
-        String dataRadioTechnology = rilRadioTechnologyToString(mRilDataRadioTechnology);
-
-        return (mVoiceRegState + " " + mDataRegState
-                + " "
-                + "voice " + getRoamingLogString(mVoiceRoamingType)
-                + " "
-                + "data " + getRoamingLogString(mDataRoamingType)
-                + " " + mVoiceOperatorAlphaLong
-                + " " + mVoiceOperatorAlphaShort
-                + " " + mVoiceOperatorNumeric
-                + " " + mDataOperatorAlphaLong
-                + " " + mDataOperatorAlphaShort
-                + " " + mDataOperatorNumeric
-                + " " + (mIsManualNetworkSelection ? "(manual)" : "")
-                + " " + radioTechnology
-                + " " + dataRadioTechnology
-                + " " + (mCssIndicator ? "CSS supported" : "CSS not supported")
-                + " " + mNetworkId
-                + " " + mSystemId
-                + " RoamInd=" + mCdmaRoamingIndicator
-                + " DefRoamInd=" + mCdmaDefaultRoamingIndicator
-                + " EmergOnly=" + mIsEmergencyOnly
-                + " IsDataRoamingFromRegistration=" + mIsDataRoamingFromRegistration
-                + " IsUsingCarrierAggregation=" + mIsUsingCarrierAggregation
-                + " mLteEarfcnRsrpBoost=" + mLteEarfcnRsrpBoost);
+        return new StringBuilder().append("{mVoiceRegState=").append(mVoiceRegState)
+            .append("(" + rilServiceStateToString(mVoiceRegState) + ")")
+            .append(", mDataRegState=").append(mDataRegState)
+            .append("(" + rilServiceStateToString(mDataRegState) + ")")
+            .append(", mVoiceRoamingType=").append(getRoamingLogString(mVoiceRoamingType))
+            .append(", mDataRoamingType=").append(getRoamingLogString(mDataRoamingType))
+            .append(", mVoiceOperatorAlphaLong=").append(mVoiceOperatorAlphaLong)
+            .append(", mVoiceOperatorAlphaShort=").append(mVoiceOperatorAlphaShort)
+            .append(", mDataOperatorAlphaLong=").append(mDataOperatorAlphaLong)
+            .append(", mDataOperatorAlphaShort=").append(mDataOperatorAlphaShort)
+            .append(", isManualNetworkSelection=").append(mIsManualNetworkSelection)
+            .append(mIsManualNetworkSelection ? "(manual)" : "(automatic)")
+            .append(", mRilVoiceRadioTechnology=").append(mRilVoiceRadioTechnology)
+            .append("(" + rilRadioTechnologyToString(mRilVoiceRadioTechnology) + ")")
+            .append(", mRilDataRadioTechnology=").append(mRilDataRadioTechnology)
+            .append("(" + rilRadioTechnologyToString(mRilDataRadioTechnology) + ")")
+            .append(", mCssIndicator=").append(mCssIndicator ? "supported" : "unsupported")
+            .append(", mNetworkId=").append(mNetworkId)
+            .append(", mSystemId=").append(mSystemId)
+            .append(", mCdmaRoamingIndicator=").append(mCdmaRoamingIndicator)
+            .append(", mCdmaDefaultRoamingIndicator=").append(mCdmaDefaultRoamingIndicator)
+            .append(", mIsEmergencyOnly=").append(mIsEmergencyOnly)
+            .append(", mIsDataRoamingFromRegistration=").append(mIsDataRoamingFromRegistration)
+            .append(", mIsUsingCarrierAggregation=").append(mIsUsingCarrierAggregation)
+            .append(", mLteEarfcnRsrpBoost=").append(mLteEarfcnRsrpBoost)
+            .append("}").toString();
     }
 
     private void setNullState(int state) {
diff --git a/telephony/java/android/telephony/SmsManager.java b/telephony/java/android/telephony/SmsManager.java
index 1eac263..6029995 100644
--- a/telephony/java/android/telephony/SmsManager.java
+++ b/telephony/java/android/telephony/SmsManager.java
@@ -1131,10 +1131,14 @@
     static public final int RESULT_ERROR_NULL_PDU           = 3;
     /** Failed because service is currently unavailable */
     static public final int RESULT_ERROR_NO_SERVICE         = 4;
-    /** Failed because we reached the sending queue limit.  {@hide} */
+    /** Failed because we reached the sending queue limit. */
     static public final int RESULT_ERROR_LIMIT_EXCEEDED     = 5;
     /** Failed because FDN is enabled. {@hide} */
     static public final int RESULT_ERROR_FDN_CHECK_FAILURE  = 6;
+    /** Failed because user denied the sending of this short code. */
+    static public final int RESULT_ERROR_SHORT_CODE_NOT_ALLOWED = 7;
+    /** Failed because the user has denied this app ever send premium short codes. */
+    static public final int RESULT_ERROR_SHORT_CODE_NEVER_ALLOWED = 8;
 
     static private final String PHONE_PACKAGE_NAME = "com.android.phone";
 
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index 0d1764b..88f4880 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -18,25 +18,27 @@
 
 import android.annotation.NonNull;
 import android.annotation.SdkConstant;
-import android.annotation.SystemService;
+import android.annotation.SystemApi;
 import android.annotation.SdkConstant.SdkConstantType;
+import android.annotation.SystemService;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Configuration;
 import android.content.res.Resources;
+import android.net.INetworkPolicyManager;
 import android.net.Uri;
 import android.os.Handler;
 import android.os.Message;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.util.DisplayMetrics;
-
 import com.android.internal.telephony.IOnSubscriptionsChangedListener;
 import com.android.internal.telephony.ISub;
 import com.android.internal.telephony.ITelephonyRegistry;
 import com.android.internal.telephony.PhoneConstants;
-
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -57,7 +59,7 @@
 
     /** Base value for Dummy SUBSCRIPTION_ID's. */
     /** FIXME: Remove DummySubId's, but for now have them map just below INVALID_SUBSCRIPTION_ID
-    /** @hide */
+     /** @hide */
     public static final int DUMMY_SUBSCRIPTION_ID_BASE = INVALID_SUBSCRIPTION_ID - 1;
 
     /** An invalid phone identifier */
@@ -366,7 +368,7 @@
      */
     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
     public static final String SUB_DEFAULT_CHANGED_ACTION =
-        "android.intent.action.SUB_DEFAULT_CHANGED";
+            "android.intent.action.SUB_DEFAULT_CHANGED";
 
     /**
      * Broadcast Action: The default subscription has changed.  This has the following
@@ -619,7 +621,7 @@
         }
 
         if (result == null) {
-            result = new ArrayList<SubscriptionInfo>();
+            result = new ArrayList<>();
         }
         return result;
     }
@@ -1448,8 +1450,8 @@
         try {
             ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
             if (iSub != null) {
-                resultValue = iSub.getSubscriptionProperty(subId, propKey, 
-                    context.getOpPackageName());
+                resultValue = iSub.getSubscriptionProperty(subId, propKey,
+                        context.getOpPackageName());
             }
         } catch (RemoteException ex) {
             // ignore it
@@ -1539,4 +1541,63 @@
         }
         return false;
     }
+
+    /**
+     * Get the description of the billing relationship plan between a carrier
+     * and a specific subscriber.
+     * <p>
+     * This method is only accessible to the following narrow set of apps:
+     * <ul>
+     * <li>The carrier app for this subscriberId, as determined by
+     * {@link TelephonyManager#hasCarrierPrivileges(int)}.
+     * <li>The carrier app explicitly delegated access through
+     * {@link CarrierConfigManager#KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING}.
+     * </ul>
+     *
+     * @param subId the subscriber this relationship applies to
+     * @hide
+     */
+    @SystemApi
+    public @NonNull List<SubscriptionPlan> getSubscriptionPlans(int subId) {
+        final INetworkPolicyManager npm = INetworkPolicyManager.Stub
+                .asInterface(ServiceManager.getService(Context.NETWORK_POLICY_SERVICE));
+        try {
+            SubscriptionPlan[] subscriptionPlans =
+                    npm.getSubscriptionPlans(subId, mContext.getOpPackageName());
+            return subscriptionPlans == null
+                    ? Collections.emptyList() : Arrays.asList(subscriptionPlans);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Set the description of the billing relationship plan between a carrier
+     * and a specific subscriber.
+     * <p>
+     * This method is only accessible to the following narrow set of apps:
+     * <ul>
+     * <li>The carrier app for this subscriberId, as determined by
+     * {@link TelephonyManager#hasCarrierPrivileges(int)}.
+     * <li>The carrier app explicitly delegated access through
+     * {@link CarrierConfigManager#KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING}.
+     * </ul>
+     *
+     * @param subId the subscriber this relationship applies to
+     * @param plans the list of plans. The first plan is always the primary and
+     *            most important plan. Any additional plans are secondary and
+     *            may not be displayed or used by decision making logic.
+     * @hide
+     */
+    @SystemApi
+    public void setSubscriptionPlans(int subId, @NonNull List<SubscriptionPlan> plans) {
+        final INetworkPolicyManager npm = INetworkPolicyManager.Stub
+                .asInterface(ServiceManager.getService(Context.NETWORK_POLICY_SERVICE));
+        try {
+            npm.setSubscriptionPlans(subId, plans.toArray(new SubscriptionPlan[plans.size()]),
+                    mContext.getOpPackageName());
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
 }
diff --git a/telephony/java/android/telephony/SubscriptionPlan.aidl b/telephony/java/android/telephony/SubscriptionPlan.aidl
new file mode 100755
index 0000000..655df3a
--- /dev/null
+++ b/telephony/java/android/telephony/SubscriptionPlan.aidl
@@ -0,0 +1,19 @@
+/*
+ * 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.telephony;
+
+parcelable SubscriptionPlan;
diff --git a/telephony/java/android/telephony/SubscriptionPlan.java b/telephony/java/android/telephony/SubscriptionPlan.java
new file mode 100644
index 0000000..265e3e7
--- /dev/null
+++ b/telephony/java/android/telephony/SubscriptionPlan.java
@@ -0,0 +1,301 @@
+/*
+ * 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.telephony;
+
+import android.annotation.BytesLong;
+import android.annotation.CurrentTimeMillisLong;
+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 android.util.Pair;
+import android.util.RecurrenceRule;
+
+import com.android.internal.util.Preconditions;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.time.Period;
+import java.time.ZonedDateTime;
+import java.util.Iterator;
+
+/**
+ * Description of a billing relationship plan between a carrier and a specific
+ * subscriber. This information is used to present more useful UI to users, such
+ * as explaining how much mobile data they have remaining, and what will happen
+ * when they run out.
+ *
+ * @see SubscriptionManager#setSubscriptionPlans(int, java.util.List)
+ * @see SubscriptionManager#getSubscriptionPlans(int)
+ * @hide
+ */
+@SystemApi
+public final class SubscriptionPlan implements Parcelable {
+    /** {@hide} */
+    @IntDef(prefix = "LIMIT_BEHAVIOR_", value = {
+            LIMIT_BEHAVIOR_UNKNOWN,
+            LIMIT_BEHAVIOR_DISABLED,
+            LIMIT_BEHAVIOR_BILLED,
+            LIMIT_BEHAVIOR_THROTTLED,
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface LimitBehavior {}
+
+    /** When a resource limit is hit, the behavior is unknown. */
+    public static final int LIMIT_BEHAVIOR_UNKNOWN = -1;
+    /** When a resource limit is hit, access is disabled. */
+    public static final int LIMIT_BEHAVIOR_DISABLED = 0;
+    /** When a resource limit is hit, the user is billed automatically. */
+    public static final int LIMIT_BEHAVIOR_BILLED = 1;
+    /** When a resource limit is hit, access is throttled to a slower rate. */
+    public static final int LIMIT_BEHAVIOR_THROTTLED = 2;
+
+    /** Value indicating a number of bytes is unknown. */
+    public static final long BYTES_UNKNOWN = -1;
+    /** Value indicating a number of bytes is unlimited. */
+    public static final long BYTES_UNLIMITED = Long.MAX_VALUE;
+
+    /** Value indicating a timestamp is unknown. */
+    public static final long TIME_UNKNOWN = -1;
+
+    private final RecurrenceRule cycleRule;
+    private CharSequence title;
+    private CharSequence summary;
+    private long dataLimitBytes = BYTES_UNKNOWN;
+    private int dataLimitBehavior = LIMIT_BEHAVIOR_UNKNOWN;
+    private long dataUsageBytes = BYTES_UNKNOWN;
+    private long dataUsageTime = TIME_UNKNOWN;
+
+    private SubscriptionPlan(RecurrenceRule cycleRule) {
+        this.cycleRule = Preconditions.checkNotNull(cycleRule);
+    }
+
+    private SubscriptionPlan(Parcel source) {
+        cycleRule = source.readParcelable(null);
+        title = source.readCharSequence();
+        summary = source.readCharSequence();
+        dataLimitBytes = source.readLong();
+        dataLimitBehavior = source.readInt();
+        dataUsageBytes = source.readLong();
+        dataUsageTime = source.readLong();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeParcelable(cycleRule, flags);
+        dest.writeCharSequence(title);
+        dest.writeCharSequence(summary);
+        dest.writeLong(dataLimitBytes);
+        dest.writeInt(dataLimitBehavior);
+        dest.writeLong(dataUsageBytes);
+        dest.writeLong(dataUsageTime);
+    }
+
+    @Override
+    public String toString() {
+        return new StringBuilder("SubscriptionPlan{")
+                .append("cycleRule=").append(cycleRule)
+                .append(" title=").append(title)
+                .append(" summary=").append(summary)
+                .append(" dataLimitBytes=").append(dataLimitBytes)
+                .append(" dataLimitBehavior=").append(dataLimitBehavior)
+                .append(" dataUsageBytes=").append(dataUsageBytes)
+                .append(" dataUsageTime=").append(dataUsageTime)
+                .append("}").toString();
+    }
+
+    public static final Parcelable.Creator<SubscriptionPlan> CREATOR = new Parcelable.Creator<SubscriptionPlan>() {
+        @Override
+        public SubscriptionPlan createFromParcel(Parcel source) {
+            return new SubscriptionPlan(source);
+        }
+
+        @Override
+        public SubscriptionPlan[] newArray(int size) {
+            return new SubscriptionPlan[size];
+        }
+    };
+
+    /** {@hide} */
+    public @NonNull RecurrenceRule getCycleRule() {
+        return cycleRule;
+    }
+
+    /** Return the short title of this plan. */
+    public @Nullable CharSequence getTitle() {
+        return title;
+    }
+
+    /** Return the short summary of this plan. */
+    public @Nullable CharSequence getSummary() {
+        return summary;
+    }
+
+    /**
+     * Return the usage threshold at which data access changes according to
+     * {@link #getDataLimitBehavior()}.
+     */
+    public @BytesLong long getDataLimitBytes() {
+        return dataLimitBytes;
+    }
+
+    /**
+     * Return the behavior of data access when usage reaches
+     * {@link #getDataLimitBytes()}.
+     */
+    public @LimitBehavior int getDataLimitBehavior() {
+        return dataLimitBehavior;
+    }
+
+    /**
+     * Return a snapshot of currently known mobile data usage at
+     * {@link #getDataUsageTime()}.
+     */
+    public @BytesLong long getDataUsageBytes() {
+        return dataUsageBytes;
+    }
+
+    /**
+     * Return the time at which {@link #getDataUsageBytes()} was valid.
+     */
+    public @CurrentTimeMillisLong long getDataUsageTime() {
+        return dataUsageTime;
+    }
+
+    /**
+     * Return an iterator that will return all valid data usage cycles based on
+     * any recurrence rules. The iterator starts from the currently active cycle
+     * and walks backwards through time.
+     */
+    public Iterator<Pair<ZonedDateTime, ZonedDateTime>> cycleIterator() {
+        return cycleRule.cycleIterator();
+    }
+
+    /**
+     * Builder for a {@link SubscriptionPlan}.
+     */
+    public static class Builder {
+        private final SubscriptionPlan plan;
+
+        /** {@hide} */
+        public Builder(ZonedDateTime start, ZonedDateTime end, Period period) {
+            plan = new SubscriptionPlan(new RecurrenceRule(start, end, period));
+        }
+
+        /**
+         * Start defining a {@link SubscriptionPlan} that covers a very specific
+         * window of time, and never automatically recurs.
+         */
+        public static Builder createNonrecurring(ZonedDateTime start, ZonedDateTime end) {
+            if (!end.isAfter(start)) {
+                throw new IllegalArgumentException(
+                        "End " + end + " isn't after start " + start);
+            }
+            return new Builder(start, end, null);
+        }
+
+        /**
+         * Start defining a {@link SubscriptionPlan} that will recur
+         * automatically every month. It will always recur on the same day of a
+         * particular month. When a particular month ends before the defined
+         * recurrence day, the plan will recur on the last instant of that
+         * month.
+         */
+        public static Builder createRecurringMonthly(ZonedDateTime start) {
+            return new Builder(start, null, Period.ofMonths(1));
+        }
+
+        /**
+         * Start defining a {@link SubscriptionPlan} that will recur
+         * automatically every week.
+         */
+        public static Builder createRecurringWeekly(ZonedDateTime start) {
+            return new Builder(start, null, Period.ofDays(7));
+        }
+
+        /**
+         * Start defining a {@link SubscriptionPlan} that will recur
+         * automatically every day.
+         */
+        public static Builder createRecurringDaily(ZonedDateTime start) {
+            return new Builder(start, null, Period.ofDays(1));
+        }
+
+        public SubscriptionPlan build() {
+            return plan;
+        }
+
+        /** Set the short title of this plan. */
+        public Builder setTitle(@Nullable CharSequence title) {
+            plan.title = title;
+            return this;
+        }
+
+        /** Set the short summary of this plan. */
+        public Builder setSummary(@Nullable CharSequence summary) {
+            plan.summary = summary;
+            return this;
+        }
+
+        /**
+         * Set the usage threshold at which data access changes.
+         *
+         * @param dataLimitBytes the usage threshold at which data access
+         *            changes
+         * @param dataLimitBehavior the behavior of data access when usage
+         *            reaches the threshold
+         */
+        public Builder setDataLimit(@BytesLong long dataLimitBytes,
+                @LimitBehavior int dataLimitBehavior) {
+            if (dataLimitBytes < 0) {
+                throw new IllegalArgumentException("Limit bytes must be positive");
+            }
+            if (dataLimitBehavior < 0) {
+                throw new IllegalArgumentException("Limit behavior must be defined");
+            }
+            plan.dataLimitBytes = dataLimitBytes;
+            plan.dataLimitBehavior = dataLimitBehavior;
+            return this;
+        }
+
+        /**
+         * Set a snapshot of currently known mobile data usage.
+         *
+         * @param dataUsageBytes the currently known mobile data usage
+         * @param dataUsageTime the time at which this snapshot was valid
+         */
+        public Builder setDataUsage(@BytesLong long dataUsageBytes,
+                @CurrentTimeMillisLong long dataUsageTime) {
+            if (dataUsageBytes < 0) {
+                throw new IllegalArgumentException("Usage bytes must be positive");
+            }
+            if (dataUsageTime < 0) {
+                throw new IllegalArgumentException("Usage time must be positive");
+            }
+            plan.dataUsageBytes = dataUsageBytes;
+            plan.dataUsageTime = dataUsageTime;
+            return this;
+        }
+    }
+}
diff --git a/telephony/java/android/telephony/Telephony.java b/telephony/java/android/telephony/Telephony.java
index e64e815..216d28c 100644
--- a/telephony/java/android/telephony/Telephony.java
+++ b/telephony/java/android/telephony/Telephony.java
@@ -1176,6 +1176,29 @@
     }
 
     /**
+     * Base column for the table that contain Carrier Public key.
+     * @hide
+     */
+    public interface CarrierColumns extends BaseColumns {
+
+        public static final String MCC = "mcc";
+        public static final String MNC = "mnc";
+        public static final String KEY_TYPE = "key_type";
+        public static final String MVNO_TYPE = "mvno_type";
+        public static final String MVNO_MATCH_DATA = "mvno_match_data";
+        public static final String PUBLIC_KEY = "public_key";
+        public static final String KEY_IDENTIFIER = "key_identifier";
+        public static final String EXPIRATION_TIME = "expiration_time";
+        public static final String LAST_MODIFIED = "last_modified";
+
+        /**
+         * The {@code content://} style URL for this table.
+         * @hide
+         */
+        public static final Uri CONTENT_URI = Uri.parse("content://carrier_information/carrier");
+    }
+
+    /**
      * Base columns for tables that contain MMSs.
      */
     public interface BaseMmsColumns extends BaseColumns {
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 03b635d..d4a8066 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -106,8 +106,6 @@
     public static final String MODEM_ACTIVITY_RESULT_KEY =
             BatteryStats.RESULT_RECEIVER_CONTROLLER_KEY;
 
-    private static ITelephonyRegistry sRegistry;
-
     /**
      * The allowed states of Wi-Fi calling.
      *
@@ -137,7 +135,7 @@
 
 
     /** @hide */
-    static public final int KEY_TYPE_EPDDG = 1;
+    static public final int KEY_TYPE_EPDG = 1;
 
     /** @hide */
     static public final int KEY_TYPE_WLAN = 2;
@@ -178,11 +176,6 @@
             mContext = context;
         }
         mSubscriptionManager = SubscriptionManager.from(mContext);
-
-        if (sRegistry == null) {
-            sRegistry = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService(
-                    "telephony.registry"));
-        }
     }
 
     /** @hide */
@@ -767,12 +760,15 @@
      * The {@link #EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT} extra is a
      * {@link android.app.PendingIntent} that will launch the voicemail settings. This extra is only
      * available when the voicemail number is not set.
+     * The {@link #EXTRA_IS_REFRESH} extra indicates whether the notification is a refresh or a new
+     * notification.
      *
      * @see #EXTRA_PHONE_ACCOUNT_HANDLE
      * @see #EXTRA_NOTIFICATION_COUNT
      * @see #EXTRA_VOICEMAIL_NUMBER
      * @see #EXTRA_CALL_VOICEMAIL_INTENT
      * @see #EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT
+     * @see #EXTRA_IS_REFRESH
      */
     public static final String ACTION_SHOW_VOICEMAIL_NOTIFICATION =
             "android.telephony.action.SHOW_VOICEMAIL_NOTIFICATION";
@@ -811,6 +807,15 @@
             "android.telephony.extra.LAUNCH_VOICEMAIL_SETTINGS_INTENT";
 
     /**
+     * Boolean value representing whether the {@link
+     * TelephonyManager#ACTION_SHOW_VOICEMAIL_NOTIFICATION} is new or a refresh of an existing
+     * notification. Notification refresh happens after reboot or connectivity changes. The user has
+     * already been notified for the voicemail so it should not alert the user, and should not be
+     * shown again if the user has dismissed it.
+     */
+    public static final String EXTRA_IS_REFRESH = "android.telephony.extra.IS_REFRESH";
+
+    /**
      * {@link android.telecom.Connection} event used to indicate that an IMS call has be
      * successfully handed over from WIFI to LTE.
      * <p>
@@ -822,6 +827,17 @@
             "android.telephony.event.EVENT_HANDOVER_VIDEO_FROM_WIFI_TO_LTE";
 
     /**
+     * {@link android.telecom.Connection} event used to indicate that an IMS call has be
+     * successfully handed over from LTE to WIFI.
+     * <p>
+     * Sent via {@link android.telecom.Connection#sendConnectionEvent(String, Bundle)}.
+     * The {@link Bundle} parameter is expected to be null when this connection event is used.
+     * @hide
+     */
+    public static final String EVENT_HANDOVER_VIDEO_FROM_LTE_TO_WIFI =
+            "android.telephony.event.EVENT_HANDOVER_VIDEO_FROM_LTE_TO_WIFI";
+
+    /**
      * {@link android.telecom.Connection} event used to indicate that an IMS call failed to be
      * handed over from LTE to WIFI.
      * <p>
@@ -2361,33 +2377,75 @@
      * Requires Permission:
      *   {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
      * @param keyType whether the key is being used for wlan or epdg. Valid key types are
-     *        {@link TelephonyManager#KEY_TYPE_EPDDG} or
+     *        {@link TelephonyManager#KEY_TYPE_EPDG} or
      *        {@link TelephonyManager#KEY_TYPE_WLAN}.
      * @return ImsiEncryptionInfo Carrier specific information that will be used to encrypt the
      *         IMSI and IMPI. This includes the public key and the key identifier. This information
-     *         will be stored in the device keystore.
+     *         will be stored in the device keystore. The system will return a null when no key was
+     *         found, and the carrier does not require a key. The system will throw the following
+     *         exceptions:
+     *         1. IllegalArgumentException when an invalid key is sent.
+     *         2. RuntimeException if the key is required but not found; and also if there was an
+     *         internal exception.
      * @hide
      */
     public ImsiEncryptionInfo getCarrierInfoForImsiEncryption(int keyType) {
         try {
             IPhoneSubInfo info = getSubscriberInfo();
-            if (info == null) return null;
-            int subId = getSubId(SubscriptionManager.getDefaultDataSubscriptionId());
-            if (keyType != KEY_TYPE_EPDDG && keyType != KEY_TYPE_WLAN) {
-                throw new IllegalArgumentException("Invalid key type");
+            if (info == null) {
+                throw new RuntimeException("IMSI error: Subscriber Info is null");
             }
-            return info.getCarrierInfoForImsiEncryption(subId, keyType,
-                    mContext.getOpPackageName());
+            int subId = getSubId(SubscriptionManager.getDefaultDataSubscriptionId());
+            if (keyType != KEY_TYPE_EPDG && keyType != KEY_TYPE_WLAN) {
+                throw new IllegalArgumentException("IMSI error: Invalid key type");
+            }
+            ImsiEncryptionInfo imsiEncryptionInfo = info.getCarrierInfoForImsiEncryption(
+                    subId, keyType, mContext.getOpPackageName());
+            if (imsiEncryptionInfo  == null
+                    && isImsiEncryptionRequired(subId, keyType)) {
+                Rlog.e(TAG, "IMSI error: key is required but not found");
+                throw new RuntimeException("IMSI error: key is required but not found");
+            }
+            return imsiEncryptionInfo;
         } catch (RemoteException ex) {
-            Rlog.e(TAG, "getCarrierInfoForImsiEncryption RemoteException", ex);
-            return null;
+            Rlog.e(TAG, "getCarrierInfoForImsiEncryption RemoteException" + ex);
+            throw new RuntimeException("IMSI error: Remote Exception");
         } catch (NullPointerException ex) {
             // This could happen before phone restarts due to crashing
-            Rlog.e(TAG, "getCarrierInfoForImsiEncryption NullPointerException", ex);
-            return null;
+            Rlog.e(TAG, "getCarrierInfoForImsiEncryption NullPointerException" + ex);
+            throw new RuntimeException("IMSI error: Null Pointer exception");
         }
     }
 
+   /**
+     * @param keyAvailability bitmask that defines the availabilty of keys for a type.
+     * @param keyType the key type which is being checked. (WLAN, EPDG)
+     * @return true if the digit at position keyType is 1, else false.
+     * @hide
+     */
+    private static boolean isKeyEnabled(int keyAvailability, int keyType) {
+        int returnValue = (keyAvailability >> (keyType - 1)) & 1;
+        return (returnValue == 1) ? true : false;
+    }
+
+    /**
+     * If Carrier requires Imsi to be encrypted.
+     * @hide
+     */
+    private boolean isImsiEncryptionRequired(int subId, int keyType) {
+        CarrierConfigManager configManager =
+                (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE);
+        if (configManager == null) {
+            return false;
+        }
+        PersistableBundle pb = configManager.getConfigForSubId(subId);
+        if (pb == null) {
+            return false;
+        }
+        int keyAvailability = pb.getInt(CarrierConfigManager.IMSI_KEY_AVAILABILITY_INT);
+        return isKeyEnabled(keyAvailability, keyType);
+    }
+
     /**
      * Sets the Carrier specific information that will be used to encrypt the IMSI and IMPI.
      * This includes the public key and the key identifier. This information will be stored in the
@@ -3452,6 +3510,10 @@
         return ITelecomService.Stub.asInterface(ServiceManager.getService(Context.TELECOM_SERVICE));
     }
 
+    private ITelephonyRegistry getTelephonyRegistry() {
+        return ITelephonyRegistry.Stub.asInterface(ServiceManager.getService("telephony.registry"));
+    }
+
     //
     //
     // PhoneStateListener
@@ -3491,12 +3553,16 @@
             if (listener.mSubId == null) {
                 listener.mSubId = mSubId;
             }
-            sRegistry.listenForSubscriber(listener.mSubId, getOpPackageName(),
-                    listener.callback, events, notifyNow);
+
+            ITelephonyRegistry registry = getTelephonyRegistry();
+            if (registry != null) {
+                registry.listenForSubscriber(listener.mSubId, getOpPackageName(),
+                        listener.callback, events, notifyNow);
+            } else {
+                Rlog.w(TAG, "telephony registry not ready.");
+            }
         } catch (RemoteException ex) {
             // system process dead
-        } catch (NullPointerException ex) {
-            // system process dead
         }
     }
 
@@ -6683,11 +6749,13 @@
      * 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.
+     * @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(boolean perUidStats) {
+    public NetworkStats getVtDataUsage(int how) {
+        boolean perUidStats = (how == NetworkStats.STATS_PER_UID);
         try {
             ITelephony service = getITelephony();
             if (service != null) {
diff --git a/telephony/java/android/telephony/euicc/EuiccManager.java b/telephony/java/android/telephony/euicc/EuiccManager.java
index 8304d84..a13af5f 100644
--- a/telephony/java/android/telephony/euicc/EuiccManager.java
+++ b/telephony/java/android/telephony/euicc/EuiccManager.java
@@ -154,6 +154,14 @@
             "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_RESOLUTION_CALLBACK_INTENT";
 
     /**
+     * Key for an extra set on the {@link #ACTION_PROVISION_EMBEDDED_SUBSCRIPTION} intent for
+     * whether the user choses to use eUICC to set up network in SUW.
+     * @hide
+     */
+    public static final String EXTRA_FORCE_PROVISION =
+            "android.telephony.euicc.extra.FORCE_PROVISION";
+
+    /**
      * Optional meta-data attribute for a carrier app providing an icon to use to represent the
      * carrier. If not provided, the app's launcher icon will be used as a fallback.
      */
diff --git a/telephony/java/android/telephony/mbms/DownloadCallback.java b/telephony/java/android/telephony/mbms/DownloadCallback.java
deleted file mode 100644
index 0c6fec4..0000000
--- a/telephony/java/android/telephony/mbms/DownloadCallback.java
+++ /dev/null
@@ -1,41 +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.telephony.mbms;
-
-/**
- * A optional listener class used by download clients to track progress.
- * @hide
- */
-public class DownloadCallback extends IDownloadCallback.Stub {
-    /**
-     * Gives process callbacks for a given DownloadRequest.
-     * request indicates which download is being referenced.
-     * fileInfo gives information about the file being downloaded.  Note that
-     *   the request may result in many files being downloaded and the client
-     *   may not have been able to get a list of them in advance.
-     * downloadSize is the final amount to be downloaded.  This may be different
-     *   from the decoded final size, but is useful in gauging download progress.
-     * currentSize is the amount currently downloaded.
-     * decodedPercent is the percent from 0 to 100 of the file decoded.  After the
-     *   download completes the contents needs to be processed.  It is perhaps
-     *   uncompressed, transcoded and/or decrypted.  Generally the download completes
-     *   before the decode is started, but that's not required.
-     */
-    public void progress(DownloadRequest request, FileInfo fileInfo,
-            int downloadSize, int currentSize, int decodedPercent) {
-    }
-}
diff --git a/telephony/java/android/telephony/mbms/DownloadRequest.java b/telephony/java/android/telephony/mbms/DownloadRequest.java
index f3ca058..95c6590 100644
--- a/telephony/java/android/telephony/mbms/DownloadRequest.java
+++ b/telephony/java/android/telephony/mbms/DownloadRequest.java
@@ -16,82 +16,166 @@
 
 package android.telephony.mbms;
 
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.util.Base64;
+import android.util.Log;
 
-import java.lang.IllegalStateException;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
 import java.net.URISyntaxException;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Objects;
 
 /**
- * A Parcelable class describing a pending Cell-Broadcast download request
+ * Describes a request to download files over cell-broadcast. Instances of this class should be
+ * created by the app when requesting a download, and instances of this class will be passed back
+ * to the app when the middleware updates the status of the download.
  * @hide
  */
-public class DownloadRequest implements Parcelable {
+public final class DownloadRequest implements Parcelable {
+    // Version code used to keep token calculation consistent.
+    private static final int CURRENT_VERSION = 1;
+    private static final String LOG_TAG = "MbmsDownloadRequest";
+
     /** @hide */
+    public static final int MAX_APP_INTENT_SIZE = 50000;
+
+    /** @hide */
+    public static final int MAX_DESTINATION_URI_SIZE = 50000;
+
+    /** @hide */
+    private static class OpaqueDataContainer implements Serializable {
+        private final String appIntent;
+        private final int version;
+
+        public OpaqueDataContainer(String appIntent, int version) {
+            this.appIntent = appIntent;
+            this.version = version;
+        }
+    }
+
     public static class Builder {
-        private int id;
-        private FileServiceInfo serviceInfo;
+        private String fileServiceId;
         private Uri source;
-        private Uri dest;
-        private int sub;
+        private int subscriptionId;
         private String appIntent;
-        private String appName;  // not the Android app Name, the embms app Name
+        private int version = CURRENT_VERSION;
 
-        public Builder setId(int id) {
-            this.id = id;
-            return this;
+
+        /**
+         * Builds a new DownloadRequest.
+         * @param sourceUri the source URI for the DownloadRequest to be built. This URI should
+         *     never be null.
+         */
+        public Builder(@NonNull Uri sourceUri) {
+            if (sourceUri == null) {
+                throw new IllegalArgumentException("Source URI must be non-null.");
+            }
+            source = sourceUri;
         }
 
+        /**
+         * Sets the service from which the download request to be built will download from.
+         * @param serviceInfo
+         * @return
+         */
         public Builder setServiceInfo(FileServiceInfo serviceInfo) {
-            this.serviceInfo = serviceInfo;
+            fileServiceId = serviceInfo.getServiceId();
             return this;
         }
 
-        public Builder setSource(Uri source) {
-            this.source = source;
+        /**
+         * Set the service ID for the download request. For use by the middleware only.
+         * @hide
+         */
+        //@SystemApi
+        public Builder setServiceId(String serviceId) {
+            fileServiceId = serviceId;
             return this;
         }
 
-        public Builder setDest(Uri dest) {
-            this.dest = dest;
+        /**
+         * Set the subscription ID on which the file(s) should be downloaded.
+         * @param subscriptionId
+         */
+        public Builder setSubscriptionId(int subscriptionId) {
+            this.subscriptionId = subscriptionId;
             return this;
         }
 
-        public Builder setSub(int sub) {
-            this.sub = sub;
-            return this;
-        }
-
+        /**
+         * Set the {@link Intent} that should be sent when the download completes or fails. This
+         * should be an intent with a explicit {@link android.content.ComponentName} targeted to a
+         * {@link android.content.BroadcastReceiver} in the app's package.
+         *
+         * The middleware should not use this method.
+         * @param intent
+         */
         public Builder setAppIntent(Intent intent) {
             this.appIntent = intent.toUri(0);
+            if (this.appIntent.length() > MAX_APP_INTENT_SIZE) {
+                throw new IllegalArgumentException("App intent must not exceed length " +
+                        MAX_APP_INTENT_SIZE);
+            }
+            return this;
+        }
+
+        /**
+         * For use by the middleware to set the byte array of opaque data. The opaque data
+         * includes information about the download request that is used by the client app and the
+         * manager code, but is irrelevant to the middleware.
+         * @param data A byte array, the contents of which should have been originally obtained
+         *             from {@link DownloadRequest#getOpaqueData()}.
+         * @hide
+         */
+        //@SystemApi
+        public Builder setOpaqueData(byte[] data) {
+            try {
+                ObjectInputStream stream = new ObjectInputStream(new ByteArrayInputStream(data));
+                OpaqueDataContainer dataContainer = (OpaqueDataContainer) stream.readObject();
+                version = dataContainer.version;
+                appIntent = dataContainer.appIntent;
+            } catch (IOException e) {
+                // Really should never happen
+                Log.e(LOG_TAG, "Got IOException trying to parse opaque data");
+                throw new IllegalArgumentException(e);
+            } catch (ClassNotFoundException e) {
+                Log.e(LOG_TAG, "Got ClassNotFoundException trying to parse opaque data");
+                throw new IllegalArgumentException(e);
+            }
             return this;
         }
 
         public DownloadRequest build() {
-            return new DownloadRequest(id, serviceInfo, source, dest, sub, appIntent, appName);
+            return new DownloadRequest(fileServiceId, source, subscriptionId, appIntent, version);
         }
     }
 
-    private final int downloadId;
-    private final FileServiceInfo fileServiceInfo;
+    private final String fileServiceId;
     private final Uri sourceUri;
-    private final Uri destinationUri;
-    private final int subId;
+    private final int subscriptionId;
     private final String serializedResultIntentForApp;
-    private String appName; // not the Android app Name, the embms app name
+    private final int version;
 
-    private DownloadRequest(int id, FileServiceInfo serviceInfo,
-            Uri source, Uri dest,
-            int sub, String appIntent, String name) {
-        downloadId = id;
-        fileServiceInfo = serviceInfo;
+    private DownloadRequest(String fileServiceId,
+            Uri source, int sub,
+            String appIntent, int version) {
+        this.fileServiceId = fileServiceId;
         sourceUri = source;
-        destinationUri = dest;
-        subId = sub;
+        subscriptionId = sub;
         serializedResultIntentForApp = appIntent;
-        appName = name;
+        this.version = version;
     }
 
     public static DownloadRequest copy(DownloadRequest other) {
@@ -99,23 +183,19 @@
     }
 
     private DownloadRequest(DownloadRequest dr) {
-        downloadId = dr.downloadId;
-        fileServiceInfo = dr.fileServiceInfo;
+        fileServiceId = dr.fileServiceId;
         sourceUri = dr.sourceUri;
-        destinationUri = dr.destinationUri;
-        subId = dr.subId;
+        subscriptionId = dr.subscriptionId;
         serializedResultIntentForApp = dr.serializedResultIntentForApp;
-        appName = dr.appName;
+        version = dr.version;
     }
 
     private DownloadRequest(Parcel in) {
-        downloadId = in.readInt();
-        fileServiceInfo = in.readParcelable(getClass().getClassLoader());
+        fileServiceId = in.readString();
         sourceUri = in.readParcelable(getClass().getClassLoader());
-        destinationUri = in.readParcelable(getClass().getClassLoader());
-        subId = in.readInt();
+        subscriptionId = in.readInt();
         serializedResultIntentForApp = in.readString();
-        appName = in.readString();
+        version = in.readInt();
     }
 
     public int describeContents() {
@@ -123,35 +203,39 @@
     }
 
     public void writeToParcel(Parcel out, int flags) {
-        out.writeInt(downloadId);
-        out.writeParcelable(fileServiceInfo, flags);
+        out.writeString(fileServiceId);
         out.writeParcelable(sourceUri, flags);
-        out.writeParcelable(destinationUri, flags);
-        out.writeInt(subId);
+        out.writeInt(subscriptionId);
         out.writeString(serializedResultIntentForApp);
-        out.writeString(appName);
+        out.writeInt(version);
     }
 
-    public int getDownloadId() {
-        return downloadId;
+    /**
+     * @return The ID of the file service to download from.
+     */
+    public String getFileServiceId() {
+        return fileServiceId;
     }
 
-    public FileServiceInfo getFileServiceInfo() {
-        return fileServiceInfo;
-    }
-
+    /**
+     * @return The source URI to download from
+     */
     public Uri getSourceUri() {
         return sourceUri;
     }
 
-    public Uri getDestinationUri() {
-        return destinationUri;
+    /**
+     * @return The subscription ID on which to perform MBMS operations.
+     */
+    public int getSubscriptionId() {
+        return subscriptionId;
     }
 
-    public int getSubId() {
-        return subId;
-    }
-
+    /**
+     * For internal use -- returns the intent to send to the app after download completion or
+     * failure.
+     * @hide
+     */
     public Intent getIntentForApp() {
         try {
             return Intent.parseUri(serializedResultIntentForApp, 0);
@@ -160,16 +244,33 @@
         }
     }
 
-    /** @hide */
-    public synchronized void setAppName(String newAppName) {
-        if (appName != null) {
-            throw new IllegalStateException("Attempting to reset appName");
+    /**
+     * For use by the middleware only. The byte array returned from this method should be
+     * persisted and sent back to the app upon download completion or failure by passing it into
+     * {@link Builder#setOpaqueData(byte[])}.
+     * @return A byte array of opaque data to persist.
+     * @hide
+     */
+    //@SystemApi
+    public byte[] getOpaqueData() {
+        try {
+            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+            ObjectOutputStream stream = new ObjectOutputStream(byteArrayOutputStream);
+            OpaqueDataContainer container = new OpaqueDataContainer(
+                    serializedResultIntentForApp, version);
+            stream.writeObject(container);
+            stream.flush();
+            return byteArrayOutputStream.toByteArray();
+        } catch (IOException e) {
+            // Really should never happen
+            Log.e(LOG_TAG, "Got IOException trying to serialize opaque data");
+            return null;
         }
-        appName = newAppName;
     }
 
-    public String getAppName() {
-        return appName;
+    /** @hide */
+    public int getVersion() {
+        return version;
     }
 
     public static final Parcelable.Creator<DownloadRequest> CREATOR =
@@ -181,4 +282,75 @@
             return new DownloadRequest[size];
         }
     };
+
+    /**
+     * Maximum permissible length for the app's destination path, when serialized via
+     * {@link Uri#toString()}.
+     */
+    public static int getMaxAppIntentSize() {
+        return MAX_APP_INTENT_SIZE;
+    }
+
+    /**
+     * Maximum permissible length for the app's download-completion intent, when serialized via
+     * {@link Intent#toUri(int)}.
+     */
+    public static int getMaxDestinationUriSize() {
+        return MAX_DESTINATION_URI_SIZE;
+    }
+
+    /**
+     * @hide
+     */
+    public boolean isMultipartDownload() {
+        // TODO: figure out what qualifies a request as a multipart download request.
+        return getSourceUri().getLastPathSegment() != null &&
+                getSourceUri().getLastPathSegment().contains("*");
+    }
+
+    /**
+     * Retrieves the hash string that should be used as the filename when storing a token for
+     * this DownloadRequest.
+     * @hide
+     */
+    public String getHash() {
+        MessageDigest digest;
+        try {
+            digest = MessageDigest.getInstance("SHA-256");
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException("Could not get sha256 hash object");
+        }
+        if (version >= 1) {
+            // Hash the source URI and the app intent
+            digest.update(sourceUri.toString().getBytes(StandardCharsets.UTF_8));
+            if (serializedResultIntentForApp != null) {
+                digest.update(serializedResultIntentForApp.getBytes(StandardCharsets.UTF_8));
+            }
+        }
+        // Add updates for future versions here
+        return Base64.encodeToString(digest.digest(), Base64.URL_SAFE | Base64.NO_WRAP);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null) {
+            return false;
+        }
+        if (!(o instanceof DownloadRequest)) {
+            return false;
+        }
+        DownloadRequest request = (DownloadRequest) o;
+        return subscriptionId == request.subscriptionId &&
+                version == request.version &&
+                Objects.equals(fileServiceId, request.fileServiceId) &&
+                Objects.equals(sourceUri, request.sourceUri) &&
+                Objects.equals(serializedResultIntentForApp, request.serializedResultIntentForApp);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(fileServiceId, sourceUri,
+                subscriptionId, serializedResultIntentForApp, version);
+    }
 }
diff --git a/telephony/java/android/telephony/mbms/DownloadStateCallback.java b/telephony/java/android/telephony/mbms/DownloadStateCallback.java
new file mode 100644
index 0000000..cab238e
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/DownloadStateCallback.java
@@ -0,0 +1,132 @@
+/*
+ * 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.telephony.mbms;
+
+import android.annotation.IntDef;
+import android.telephony.MbmsDownloadSession;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * A optional listener class used by download clients to track progress. Apps should extend this
+ * class and pass an instance into
+ * {@link MbmsDownloadSession#download(DownloadRequest)}
+ *
+ * This is optionally specified when requesting a download and will only be called while the app
+ * is running.
+ * @hide
+ */
+public class DownloadStateCallback {
+
+    /**
+     * Bitmask flags used for filtering out callback methods. Used when constructing the
+     * DownloadStateCallback as an optional parameter.
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({ALL_UPDATES, PROGRESS_UPDATES, STATE_UPDATES})
+    public @interface FilterFlag {}
+
+    /**
+     * Receive all callbacks.
+     * Default value.
+     */
+    public static final int ALL_UPDATES = 0x00;
+    /**
+     * Receive callbacks for {@link #onProgressUpdated}.
+     */
+    public static final int PROGRESS_UPDATES = 0x01;
+    /**
+     * Receive callbacks for {@link #onStateUpdated}.
+     */
+    public static final int STATE_UPDATES = 0x02;
+
+    private final int mCallbackFilterFlags;
+
+    /**
+     * Creates a DownloadStateCallback that will receive all callbacks.
+     */
+    public DownloadStateCallback() {
+        mCallbackFilterFlags = ALL_UPDATES;
+    }
+
+    /**
+     * Creates a DownloadStateCallback that will only receive callbacks for the methods specified
+     * via the filterFlags parameter.
+     * @param filterFlags A bitmask of filter flags that will specify which callback this instance
+     *     is interested in.
+     */
+    public DownloadStateCallback(int filterFlags) {
+        mCallbackFilterFlags = filterFlags;
+    }
+
+    /**
+     * Return the currently set filter flags.
+     * @return An integer containing the bitmask of flags that this instance is interested in.
+     * @hide
+     */
+    public int getCallbackFilterFlags() {
+        return mCallbackFilterFlags;
+    }
+
+    /**
+     * Returns true if a filter flag is set for a particular callback method. If the flag is set,
+     * the callback will be delivered to the listening process.
+     * @param flag A filter flag specifying whether or not a callback method is registered to
+     *     receive callbacks.
+     * @return true if registered to receive callbacks in the listening process, false if not.
+     */
+    public final boolean isFilterFlagSet(@FilterFlag int flag) {
+        if (mCallbackFilterFlags == ALL_UPDATES) {
+            return true;
+        }
+        return (mCallbackFilterFlags & flag) > 0;
+    }
+
+    /**
+     * Called when the middleware wants to report progress for a file in a {@link DownloadRequest}.
+     *
+     * @param request a {@link DownloadRequest}, indicating which download is being referenced.
+     * @param fileInfo a {@link FileInfo} specifying the file to report progress on.  Note that
+     *   the request may result in many files being downloaded and the client
+     *   may not have been able to get a list of them in advance.
+     * @param currentDownloadSize is the current amount downloaded.
+     * @param fullDownloadSize is the total number of bytes that make up the downloaded content.
+     *   This may be different from the decoded final size, but is useful in gauging download
+     *   progress.
+     * @param currentDecodedSize is the number of bytes that have been decoded.
+     * @param fullDecodedSize is the total number of bytes that make up the final decoded content.
+     */
+    public void onProgressUpdated(DownloadRequest request, FileInfo fileInfo,
+            int currentDownloadSize, int fullDownloadSize,
+            int currentDecodedSize, int fullDecodedSize) {
+    }
+
+    /**
+     * Gives download state callbacks for a file in a {@link DownloadRequest}.
+     *
+     * @param request a {@link DownloadRequest}, indicating which download is being referenced.
+     * @param fileInfo a {@link FileInfo} specifying the file to report progress on.  Note that
+     *   the request may result in many files being downloaded and the client
+     *   may not have been able to get a list of them in advance.
+     * @param state The current state of the download.
+     */
+    public void onStateUpdated(DownloadRequest request, FileInfo fileInfo,
+            @MbmsDownloadSession.DownloadStatus int state) {
+    }
+}
diff --git a/telephony/java/android/telephony/mbms/DownloadStatus.aidl b/telephony/java/android/telephony/mbms/DownloadStatus.aidl
deleted file mode 100755
index e7cfd39..0000000
--- a/telephony/java/android/telephony/mbms/DownloadStatus.aidl
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-** Copyright 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.telephony.mbms;
-
-parcelable DownloadStatus;
diff --git a/telephony/java/android/telephony/mbms/DownloadStatus.java b/telephony/java/android/telephony/mbms/DownloadStatus.java
deleted file mode 100644
index 90eb53f..0000000
--- a/telephony/java/android/telephony/mbms/DownloadStatus.java
+++ /dev/null
@@ -1,77 +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.telephony.mbms;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-/**
- * A Parcelable class describing the status of a Cell-Broadcast download request
- * @hide
- */
-public class DownloadStatus implements Parcelable {
-    // includes downloads and active repair work
-    public final int activelyDownloading;
-
-    // files scheduled for future broadcast
-    public final int pendingDownloads;
-
-    // files scheduled for future repairs
-    public final int pendingRepairs;
-
-    // is a future download window scheduled with unknown
-    // number of files
-    public final boolean windowPending;
-
-    public DownloadStatus(int downloading, int downloads, int repairs, boolean window) {
-        activelyDownloading = downloading;
-        pendingDownloads = downloads;
-        pendingRepairs = repairs;
-        windowPending = window;
-    }
-
-    public static final Parcelable.Creator<DownloadStatus> CREATOR =
-            new Parcelable.Creator<DownloadStatus>() {
-        @Override
-        public DownloadStatus createFromParcel(Parcel in) {
-            return new DownloadStatus(in);
-        }
-
-        @Override
-        public DownloadStatus[] newArray(int size) {
-            return new DownloadStatus[size];
-        }
-    };
-
-    DownloadStatus(Parcel in) {
-        activelyDownloading = in.readInt();
-        pendingDownloads = in.readInt();
-        pendingRepairs = in.readInt();
-        windowPending = (in.readInt() == 1);
-    }
-
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeInt(activelyDownloading);
-        dest.writeInt(pendingDownloads);
-        dest.writeInt(pendingRepairs);
-        dest.writeInt((windowPending ? 1 : 0));
-    }
-
-    public int describeContents() {
-        return 0;
-    }
-}
diff --git a/telephony/java/android/telephony/mbms/FileInfo.java b/telephony/java/android/telephony/mbms/FileInfo.java
index d3888bd..bfa99e3 100644
--- a/telephony/java/android/telephony/mbms/FileInfo.java
+++ b/telephony/java/android/telephony/mbms/FileInfo.java
@@ -16,44 +16,20 @@
 
 package android.telephony.mbms;
 
+import android.annotation.SystemApi;
 import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
 
 /**
- * A Parcelable class Cell-Broadcast downloadable file information.
+ * Describes a single file that is available over MBMS.
  * @hide
  */
-public class FileInfo implements Parcelable {
+public final class FileInfo implements Parcelable {
 
-    /**
-     * The URI into the carriers infrastructure which points to this file.
-     * This is used internally but is also one of the few pieces of data about the content that is
-     * exposed and may be needed for disambiguation by the application.
-     */
-    final Uri uri;
+    private final Uri uri;
 
-    /**
-     * The mime type of the content.
-     */
-    final String mimeType;
-
-    /**
-     * The size of the file in bytes.
-     */
-    final long size;
-
-    /**
-     * The MD5 hash of the file.
-     */
-    final byte md5Hash[];
-
-    /**
-     * Gets the parent service for this file.
-     */
-    public FileServiceInfo getFileServiceInfo() {
-        return null;
-    }
+    private final String mimeType;
 
     public static final Parcelable.Creator<FileInfo> CREATOR =
             new Parcelable.Creator<FileInfo>() {
@@ -68,26 +44,43 @@
         }
     };
 
+    /**
+     * @hide
+     */
+    //@SystemApi
+    public FileInfo(Uri uri, String mimeType) {
+        this.uri = uri;
+        this.mimeType = mimeType;
+    }
+
     private FileInfo(Parcel in) {
         uri = in.readParcelable(null);
         mimeType = in.readString();
-        size = in.readLong();
-        int arraySize = in.readInt();
-        md5Hash = new byte[arraySize];
-        in.readByteArray(md5Hash);
     }
 
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeParcelable(uri, flags);
         dest.writeString(mimeType);
-        dest.writeLong(size);
-        dest.writeInt(md5Hash.length);
-        dest.writeByteArray(md5Hash);
     }
 
     @Override
     public int describeContents() {
         return 0;
     }
+
+    /**
+     * @return The URI in the carrier's infrastructure which points to this file. Apps should
+     * negotiate the contents of this URI separately with the carrier.
+     */
+    public Uri getUri() {
+        return uri;
+    }
+
+    /**
+     * @return The MIME type of the file.
+     */
+    public String getMimeType() {
+        return mimeType;
+    }
 }
diff --git a/telephony/java/android/telephony/mbms/FileServiceInfo.java b/telephony/java/android/telephony/mbms/FileServiceInfo.java
index 8bda370..51e20a3 100644
--- a/telephony/java/android/telephony/mbms/FileServiceInfo.java
+++ b/telephony/java/android/telephony/mbms/FileServiceInfo.java
@@ -16,6 +16,7 @@
 
 package android.telephony.mbms;
 
+import android.annotation.SystemApi;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -26,16 +27,20 @@
 import java.util.Map;
 
 /**
- * A Parcelable class Cell-Broadcast downloadable file information.
+ * Describes a file service available from the carrier from which files can be downloaded via
+ * cell-broadcast.
  * @hide
  */
-public class FileServiceInfo extends ServiceInfo implements Parcelable {
-    public List<FileInfo> files;
+public final class FileServiceInfo extends ServiceInfo implements Parcelable {
+    private final List<FileInfo> files;
 
-    public FileServiceInfo(Map<Locale, String> newNames, String newClassName, Locale newLocale,
-            String newServiceId, Date start, Date end, List<FileInfo> newFiles) {
-        super(newNames, newClassName, newLocale, newServiceId, start, end);
-        files = new ArrayList(newFiles);
+    /** @hide */
+    //@SystemApi
+    public FileServiceInfo(Map<Locale, String> newNames, String newClassName,
+            List<Locale> newLocales, String newServiceId, Date start, Date end,
+            List<FileInfo> newFiles) {
+        super(newNames, newClassName, newLocales, newServiceId, start, end);
+        files = new ArrayList<>(newFiles);
     }
 
     public static final Parcelable.Creator<FileServiceInfo> CREATOR =
@@ -54,7 +59,7 @@
     FileServiceInfo(Parcel in) {
         super(in);
         files = new ArrayList<FileInfo>();
-        in.readList(files, null);
+        in.readList(files, FileInfo.class.getClassLoader());
     }
 
     @Override
@@ -67,4 +72,13 @@
     public int describeContents() {
         return 0;
     }
+
+    /**
+     * @return A list of files available from this service. Note that this list may not be
+     * exhaustive -- the middleware may not have information on all files that are available.
+     * Consult the carrier for an authoritative and exhaustive list.
+     */
+    public List<FileInfo> getFiles() {
+        return files;
+    }
 }
diff --git a/telephony/java/android/telephony/mbms/IDownloadCallback.aidl b/telephony/java/android/telephony/mbms/IDownloadCallback.aidl
deleted file mode 100755
index a6bd7e5..0000000
--- a/telephony/java/android/telephony/mbms/IDownloadCallback.aidl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-** Copyright 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.telephony.mbms;
-
-import android.telephony.mbms.DownloadRequest;
-import android.telephony.mbms.FileInfo;
-
-/**
- * The optional interface used by download clients to track progress.
- * @hide
- */
-interface IDownloadCallback
-{
-    /**
-     * Gives progress callbacks for a given DownloadRequest.  Includes a FileInfo
-     * as the list of files may not have been known at request-time.
-     */
-    void progress(in DownloadRequest request, in FileInfo fileInfo, int downloadSize,
-            int currentSize, int decodedPercent);
-}
diff --git a/telephony/java/android/telephony/mbms/IDownloadStateCallback.aidl b/telephony/java/android/telephony/mbms/IDownloadStateCallback.aidl
new file mode 100755
index 0000000..cebc70d
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/IDownloadStateCallback.aidl
@@ -0,0 +1,37 @@
+/*
+** Copyright 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.telephony.mbms;
+
+import android.telephony.mbms.DownloadRequest;
+import android.telephony.mbms.FileInfo;
+
+/**
+ * The optional interface used by download clients to track progress.
+ * @hide
+ */
+interface IDownloadStateCallback
+{
+    /**
+     * Gives progress callbacks for a given DownloadRequest.  Includes a FileInfo
+     * as the list of files may not have been known at request-time.
+     */
+    void onProgressUpdated(in DownloadRequest request, in FileInfo fileInfo,
+            int currentDownloadSize, int fullDownloadSize,
+            int currentDecodedSize, int fullDecodedSize);
+
+    void onStateUpdated(in DownloadRequest request, in FileInfo fileInfo, int state);
+}
diff --git a/telephony/java/android/telephony/mbms/IMbmsDownloadManagerCallback.aidl b/telephony/java/android/telephony/mbms/IMbmsDownloadManagerCallback.aidl
deleted file mode 100755
index 03227d0..0000000
--- a/telephony/java/android/telephony/mbms/IMbmsDownloadManagerCallback.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-** Copyright 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.telephony.mbms;
-
-import android.telephony.mbms.FileServiceInfo;
-
-import java.util.List;
-
-/**
- * The interface the clients top-level file download listener will satisfy.
- * @hide
- */
-interface IMbmsDownloadManagerCallback
-{
-    void error(int errorCode, String message);
-
-    /**
-     * Called to indicate published File Services have changed.
-     *
-     * This will only be called after the application has requested
-     * a list of file services and specified a service class list
-     * of interest AND the results of a subsequent getFileServices
-     * call with the same service class list would
-     * return different
-     * results.
-     */
-    void fileServicesUpdated(in List<FileServiceInfo> services);
-}
diff --git a/telephony/java/android/telephony/mbms/IMbmsDownloadSessionCallback.aidl b/telephony/java/android/telephony/mbms/IMbmsDownloadSessionCallback.aidl
new file mode 100755
index 0000000..0d813a7
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/IMbmsDownloadSessionCallback.aidl
@@ -0,0 +1,34 @@
+/*
+** Copyright 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.telephony.mbms;
+
+import android.telephony.mbms.FileServiceInfo;
+
+import java.util.List;
+
+/**
+ * The interface the clients top-level file download listener will satisfy.
+ * @hide
+ */
+oneway interface IMbmsDownloadSessionCallback
+{
+    void onError(int errorCode, String message);
+
+    void onFileServicesUpdated(in List<FileServiceInfo> services);
+
+    void onMiddlewareReady();
+}
diff --git a/telephony/java/android/telephony/mbms/IMbmsStreamingManagerCallback.aidl b/telephony/java/android/telephony/mbms/IMbmsStreamingManagerCallback.aidl
deleted file mode 100755
index cbf0fca..0000000
--- a/telephony/java/android/telephony/mbms/IMbmsStreamingManagerCallback.aidl
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-** Copyright 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.telephony.mbms;
-
-import android.telephony.mbms.StreamingServiceInfo;
-
-import java.util.List;
-
-/**
- * The interface the clients top-level streaming listener will satisfy.
- * @hide
- */
-interface IMbmsStreamingManagerCallback
-{
-    void error(int errorCode, String message);
-
-    /**
-     * Called to indicate published Streaming Services have changed.
-     *
-     * This will only be called after the application has requested
-     * a list of streaming services and specified a service class list
-     * of interest AND the results of a subsequent getStreamServices
-     * call with the same service class list would
-     * return different
-     * results.
-     */
-    void streamingServicesUpdated(in List<StreamingServiceInfo> services);
-
-    /**
-     * Called to indicate the active Streaming Services have changed.
-     * 
-     * This will be caused whenever a new service starts streaming or whenever
-     * MbmsStreamServiceManager.getActiveStreamingServices is called.
-     *
-     * @param services a list of StreamingServiceInfos.  May be empty if
-     *                 there are no active StreamingServices
-     */
-    void activeStreamingServicesUpdated(in List<StreamingServiceInfo> services);
-}
diff --git a/telephony/java/android/telephony/mbms/IMbmsStreamingSessionCallback.aidl b/telephony/java/android/telephony/mbms/IMbmsStreamingSessionCallback.aidl
new file mode 100755
index 0000000..0bf0ebc
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/IMbmsStreamingSessionCallback.aidl
@@ -0,0 +1,34 @@
+/*
+** Copyright 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.telephony.mbms;
+
+import android.telephony.mbms.StreamingServiceInfo;
+
+import java.util.List;
+
+/**
+ * The interface the clients top-level streaming listener will satisfy.
+ * @hide
+ */
+oneway interface IMbmsStreamingSessionCallback
+{
+    void onError(int errorCode, String message);
+
+    void onStreamingServicesUpdated(in List<StreamingServiceInfo> services);
+
+    void onMiddlewareReady();
+}
diff --git a/telephony/java/android/telephony/mbms/IStreamingServiceCallback.aidl b/telephony/java/android/telephony/mbms/IStreamingServiceCallback.aidl
index 891edad..164cefb 100755
--- a/telephony/java/android/telephony/mbms/IStreamingServiceCallback.aidl
+++ b/telephony/java/android/telephony/mbms/IStreamingServiceCallback.aidl
@@ -16,14 +16,13 @@
 
 package android.telephony.mbms;
 
-import android.net.Uri;
-
 /**
  * @hide
  */
 oneway interface IStreamingServiceCallback {
-    void error(int errorCode, String message);
-    void streamStateChanged(int state);
-    void uriUpdated(in Uri uri);
-    void broadcastSignalStrengthUpdated(int signalStrength);
+    void onError(int errorCode, String message);
+    void onStreamStateUpdated(int state, int reason);
+    void onMediaDescriptionUpdated();
+    void onBroadcastSignalStrengthUpdated(int signalStrength);
+    void onStreamMethodUpdated(int methodType);
 }
diff --git a/telephony/java/android/telephony/mbms/InternalDownloadSessionCallback.java b/telephony/java/android/telephony/mbms/InternalDownloadSessionCallback.java
new file mode 100644
index 0000000..a7a5958
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/InternalDownloadSessionCallback.java
@@ -0,0 +1,86 @@
+/*
+ * 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.telephony.mbms;
+
+import android.os.Handler;
+import android.os.RemoteException;
+
+import java.util.List;
+
+/** @hide */
+public class InternalDownloadSessionCallback extends IMbmsDownloadSessionCallback.Stub {
+
+    private final Handler mHandler;
+    private final MbmsDownloadSessionCallback mAppCallback;
+    private volatile boolean mIsStopped = false;
+
+    public InternalDownloadSessionCallback(MbmsDownloadSessionCallback appCallback,
+            Handler handler) {
+        mAppCallback = appCallback;
+        mHandler = handler;
+    }
+
+    @Override
+    public void onError(final int errorCode, final String message) throws RemoteException {
+        if (mIsStopped) {
+            return;
+        }
+
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mAppCallback.onError(errorCode, message);
+            }
+        });
+    }
+
+    @Override
+    public void onFileServicesUpdated(final List<FileServiceInfo> services) throws RemoteException {
+        if (mIsStopped) {
+            return;
+        }
+
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mAppCallback.onFileServicesUpdated(services);
+            }
+        });
+    }
+
+    @Override
+    public void onMiddlewareReady() throws RemoteException {
+        if (mIsStopped) {
+            return;
+        }
+
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mAppCallback.onMiddlewareReady();
+            }
+        });
+    }
+
+    public Handler getHandler() {
+        return mHandler;
+    }
+
+    public void stop() {
+        mIsStopped = true;
+    }
+}
diff --git a/telephony/java/android/telephony/mbms/InternalDownloadStateCallback.java b/telephony/java/android/telephony/mbms/InternalDownloadStateCallback.java
new file mode 100644
index 0000000..8702952
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/InternalDownloadStateCallback.java
@@ -0,0 +1,70 @@
+/*
+ * 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.telephony.mbms;
+
+import android.os.Handler;
+import android.os.RemoteException;
+
+/**
+ * @hide
+ */
+public class InternalDownloadStateCallback extends IDownloadStateCallback.Stub {
+    private final Handler mHandler;
+    private final DownloadStateCallback mAppCallback;
+    private volatile boolean mIsStopped = false;
+
+    public InternalDownloadStateCallback(DownloadStateCallback appCallback, Handler handler) {
+        mAppCallback = appCallback;
+        mHandler = handler;
+    }
+
+    @Override
+    public void onProgressUpdated(final DownloadRequest request, final FileInfo fileInfo,
+            final int currentDownloadSize, final int fullDownloadSize, final int currentDecodedSize,
+            final int fullDecodedSize) throws RemoteException {
+        if (mIsStopped) {
+            return;
+        }
+
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mAppCallback.onProgressUpdated(request, fileInfo, currentDownloadSize,
+                        fullDownloadSize, currentDecodedSize, fullDecodedSize);
+            }
+        });
+    }
+
+    @Override
+    public void onStateUpdated(final DownloadRequest request, final FileInfo fileInfo,
+            final int state) throws RemoteException {
+        if (mIsStopped) {
+            return;
+        }
+
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mAppCallback.onStateUpdated(request, fileInfo, state);
+            }
+        });
+    }
+
+    public void stop() {
+        mIsStopped = true;
+    }
+}
diff --git a/telephony/java/android/telephony/mbms/InternalStreamingServiceCallback.java b/telephony/java/android/telephony/mbms/InternalStreamingServiceCallback.java
new file mode 100644
index 0000000..eb6579ce
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/InternalStreamingServiceCallback.java
@@ -0,0 +1,106 @@
+/*
+ * 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.telephony.mbms;
+
+import android.os.Handler;
+import android.os.RemoteException;
+
+/** @hide */
+public class InternalStreamingServiceCallback extends IStreamingServiceCallback.Stub {
+    private final StreamingServiceCallback mAppCallback;
+    private final Handler mHandler;
+    private volatile boolean mIsStopped = false;
+
+    public InternalStreamingServiceCallback(StreamingServiceCallback appCallback, Handler handler) {
+        mAppCallback = appCallback;
+        mHandler = handler;
+    }
+
+    @Override
+    public void onError(final int errorCode, final String message) throws RemoteException {
+        if (mIsStopped) {
+            return;
+        }
+
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mAppCallback.onError(errorCode, message);
+            }
+        });
+    }
+
+    @Override
+    public void onStreamStateUpdated(final int state, final int reason) throws RemoteException {
+        if (mIsStopped) {
+            return;
+        }
+
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mAppCallback.onStreamStateUpdated(state, reason);
+            }
+        });
+    }
+
+    @Override
+    public void onMediaDescriptionUpdated() throws RemoteException {
+        if (mIsStopped) {
+            return;
+        }
+
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mAppCallback.onMediaDescriptionUpdated();
+            }
+        });
+    }
+
+    @Override
+    public void onBroadcastSignalStrengthUpdated(final int signalStrength) throws RemoteException {
+        if (mIsStopped) {
+            return;
+        }
+
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mAppCallback.onBroadcastSignalStrengthUpdated(signalStrength);
+            }
+        });
+    }
+
+    @Override
+    public void onStreamMethodUpdated(final int methodType) throws RemoteException {
+        if (mIsStopped) {
+            return;
+        }
+
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mAppCallback.onStreamMethodUpdated(methodType);
+            }
+        });
+    }
+
+    public void stop() {
+        mIsStopped = true;
+    }
+}
diff --git a/telephony/java/android/telephony/mbms/InternalStreamingSessionCallback.java b/telephony/java/android/telephony/mbms/InternalStreamingSessionCallback.java
new file mode 100644
index 0000000..d782d12
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/InternalStreamingSessionCallback.java
@@ -0,0 +1,86 @@
+/*
+ * 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.telephony.mbms;
+
+import android.os.Handler;
+import android.os.RemoteException;
+
+import java.util.List;
+
+/** @hide */
+public class InternalStreamingSessionCallback extends IMbmsStreamingSessionCallback.Stub {
+    private final Handler mHandler;
+    private final MbmsStreamingSessionCallback mAppCallback;
+    private volatile boolean mIsStopped = false;
+
+    public InternalStreamingSessionCallback(MbmsStreamingSessionCallback appCallback,
+            Handler handler) {
+        mAppCallback = appCallback;
+        mHandler = handler;
+    }
+
+    @Override
+    public void onError(final int errorCode, final String message) throws RemoteException {
+        if (mIsStopped) {
+            return;
+        }
+
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mAppCallback.onError(errorCode, message);
+            }
+        });
+    }
+
+    @Override
+    public void onStreamingServicesUpdated(final List<StreamingServiceInfo> services)
+            throws RemoteException {
+        if (mIsStopped) {
+            return;
+        }
+
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mAppCallback.onStreamingServicesUpdated(services);
+            }
+        });
+    }
+
+    @Override
+    public void onMiddlewareReady() throws RemoteException {
+        if (mIsStopped) {
+            return;
+        }
+
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mAppCallback.onMiddlewareReady();
+            }
+        });
+    }
+
+    public Handler getHandler() {
+        return mHandler;
+    }
+
+    public void stop() {
+        mIsStopped = true;
+    }
+}
diff --git a/telephony/java/android/telephony/mbms/MbmsDownloadManagerCallback.java b/telephony/java/android/telephony/mbms/MbmsDownloadManagerCallback.java
deleted file mode 100644
index 16fafe4..0000000
--- a/telephony/java/android/telephony/mbms/MbmsDownloadManagerCallback.java
+++ /dev/null
@@ -1,51 +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.telephony.mbms;
-
-import java.util.List;
-
-/**
- * A Parcelable class with Cell-Broadcast service information.
- * @hide
- */
-public class MbmsDownloadManagerCallback extends IMbmsDownloadManagerCallback.Stub {
-
-    public final static int ERROR_CARRIER_NOT_SUPPORTED      = 1;
-    public final static int ERROR_UNABLE_TO_INITIALIZE       = 2;
-    public final static int ERROR_UNABLE_TO_ALLOCATE_MEMORY  = 3;
-
-
-    public void error(int errorCode, String message) {
-        // default implementation empty
-    }
-
-    /**
-     * Called to indicate published File Services have changed.
-     *
-     * This will only be called after the application has requested
-     * a list of file services and specified a service class list
-     * of interest AND the results of a subsequent getFileServices
-     * call with the same service class list would return different
-     * results.
-     *
-     * @param services a List of FileServiceInfos
-     *
-     */
-    public void fileServicesUpdated(List<FileServiceInfo> services) {
-        // default implementation empty
-    }
-}
diff --git a/telephony/java/android/telephony/mbms/MbmsDownloadReceiver.java b/telephony/java/android/telephony/mbms/MbmsDownloadReceiver.java
new file mode 100644
index 0000000..5523f71
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/MbmsDownloadReceiver.java
@@ -0,0 +1,551 @@
+/*
+ * 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.telephony.mbms;
+
+import android.annotation.SystemApi;
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.telephony.MbmsDownloadSession;
+import android.telephony.mbms.vendor.VendorUtils;
+import android.util.Log;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.UUID;
+
+/**
+ * The {@link BroadcastReceiver} responsible for handling intents sent from the middleware. Apps
+ * that wish to download using MBMS APIs should declare this class in their AndroidManifest.xml as
+ * follows:
+<pre>{@code
+<receiver
+    android:name="android.telephony.mbms.MbmsDownloadReceiver"
+    android:permission="android.permission.SEND_EMBMS_INTENTS"
+    android:enabled="true"
+    android:exported="true">
+</receiver>}</pre>
+ * @hide
+ */
+public class MbmsDownloadReceiver extends BroadcastReceiver {
+    /** @hide */
+    public static final String DOWNLOAD_TOKEN_SUFFIX = ".download_token";
+    /** @hide */
+    public static final String MBMS_FILE_PROVIDER_META_DATA_KEY = "mbms-file-provider-authority";
+
+    /**
+     * Indicates that the requested operation completed without error.
+     * @hide
+     */
+    //@SystemApi
+    public static final int RESULT_OK = 0;
+
+    /**
+     * Indicates that the intent sent had an invalid action. This will be the result if
+     * {@link Intent#getAction()} returns anything other than
+     * {@link VendorUtils#ACTION_DOWNLOAD_RESULT_INTERNAL},
+     * {@link VendorUtils#ACTION_FILE_DESCRIPTOR_REQUEST}, or
+     * {@link VendorUtils#ACTION_CLEANUP}.
+     * This is a fatal result code and no result extras should be expected.
+     * @hide
+     */
+    //@SystemApi
+    public static final int RESULT_INVALID_ACTION = 1;
+
+    /**
+     * Indicates that the intent was missing some required extras.
+     * This is a fatal result code and no result extras should be expected.
+     * @hide
+     */
+    //@SystemApi
+    public static final int RESULT_MALFORMED_INTENT = 2;
+
+    /**
+     * Indicates that the supplied value for {@link VendorUtils#EXTRA_TEMP_FILE_ROOT}
+     * does not match what the app has stored.
+     * This is a fatal result code and no result extras should be expected.
+     * @hide
+     */
+    //@SystemApi
+    public static final int RESULT_BAD_TEMP_FILE_ROOT = 3;
+
+    /**
+     * Indicates that the manager was unable to move the completed download to its final location.
+     * This is a fatal result code and no result extras should be expected.
+     * @hide
+     */
+    //@SystemApi
+    public static final int RESULT_DOWNLOAD_FINALIZATION_ERROR = 4;
+
+    /**
+     * Indicates that the manager was unable to generate one or more of the requested file
+     * descriptors.
+     * This is a non-fatal result code -- some file descriptors may still be generated, but there
+     * is no guarantee that they will be the same number as requested.
+     * @hide
+     */
+    //@SystemApi
+    public static final int RESULT_TEMP_FILE_GENERATION_ERROR = 5;
+
+    /**
+     * Indicates that the manager was unable to notify the app of the completed download.
+     * This is a fatal result code and no result extras should be expected.
+     * @hide
+     */
+    @SystemApi
+    public static final int RESULT_APP_NOTIFICATION_ERROR = 6;
+
+
+    private static final String LOG_TAG = "MbmsDownloadReceiver";
+    private static final String TEMP_FILE_SUFFIX = ".embms.temp";
+    private static final String TEMP_FILE_STAGING_LOCATION = "staged_completed_files";
+
+    private static final int MAX_TEMP_FILE_RETRIES = 5;
+
+    private String mFileProviderAuthorityCache = null;
+    private String mMiddlewarePackageNameCache = null;
+
+    /** @hide */
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        if (!verifyIntentContents(context, intent)) {
+            setResultCode(RESULT_MALFORMED_INTENT);
+            return;
+        }
+        if (!Objects.equals(intent.getStringExtra(VendorUtils.EXTRA_TEMP_FILE_ROOT),
+                MbmsTempFileProvider.getEmbmsTempFileDir(context).getPath())) {
+            setResultCode(RESULT_BAD_TEMP_FILE_ROOT);
+            return;
+        }
+
+        if (VendorUtils.ACTION_DOWNLOAD_RESULT_INTERNAL.equals(intent.getAction())) {
+            moveDownloadedFile(context, intent);
+            cleanupPostMove(context, intent);
+        } else if (VendorUtils.ACTION_FILE_DESCRIPTOR_REQUEST.equals(intent.getAction())) {
+            generateTempFiles(context, intent);
+        } else if (VendorUtils.ACTION_CLEANUP.equals(intent.getAction())) {
+            cleanupTempFiles(context, intent);
+        } else {
+            setResultCode(RESULT_INVALID_ACTION);
+        }
+    }
+
+    private boolean verifyIntentContents(Context context, Intent intent) {
+        if (VendorUtils.ACTION_DOWNLOAD_RESULT_INTERNAL.equals(intent.getAction())) {
+            if (!intent.hasExtra(MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_RESULT)) {
+                Log.w(LOG_TAG, "Download result did not include a result code. Ignoring.");
+                return false;
+            }
+            // We do not need to verify below extras if the result is not success.
+            if (MbmsDownloadSession.RESULT_SUCCESSFUL !=
+                    intent.getIntExtra(MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_RESULT,
+                    MbmsDownloadSession.RESULT_CANCELLED)) {
+                return true;
+            }
+            if (!intent.hasExtra(MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_REQUEST)) {
+                Log.w(LOG_TAG, "Download result did not include the associated request. Ignoring.");
+                return false;
+            }
+            if (!intent.hasExtra(VendorUtils.EXTRA_TEMP_FILE_ROOT)) {
+                Log.w(LOG_TAG, "Download result did not include the temp file root. Ignoring.");
+                return false;
+            }
+            if (!intent.hasExtra(MbmsDownloadSession.EXTRA_MBMS_FILE_INFO)) {
+                Log.w(LOG_TAG, "Download result did not include the associated file info. " +
+                        "Ignoring.");
+                return false;
+            }
+            if (!intent.hasExtra(VendorUtils.EXTRA_FINAL_URI)) {
+                Log.w(LOG_TAG, "Download result did not include the path to the final " +
+                        "temp file. Ignoring.");
+                return false;
+            }
+            DownloadRequest request = intent.getParcelableExtra(
+                    MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_REQUEST);
+            String expectedTokenFileName = request.getHash() + DOWNLOAD_TOKEN_SUFFIX;
+            File expectedTokenFile = new File(
+                    MbmsUtils.getEmbmsTempFileDirForService(context, request.getFileServiceId()),
+                    expectedTokenFileName);
+            if (!expectedTokenFile.exists()) {
+                Log.w(LOG_TAG, "Supplied download request does not match a token that we have. " +
+                        "Expected " + expectedTokenFile);
+                return false;
+            }
+        } else if (VendorUtils.ACTION_FILE_DESCRIPTOR_REQUEST.equals(intent.getAction())) {
+            if (!intent.hasExtra(VendorUtils.EXTRA_SERVICE_ID)) {
+                Log.w(LOG_TAG, "Temp file request did not include the associated service id." +
+                        " Ignoring.");
+                return false;
+            }
+            if (!intent.hasExtra(VendorUtils.EXTRA_TEMP_FILE_ROOT)) {
+                Log.w(LOG_TAG, "Download result did not include the temp file root. Ignoring.");
+                return false;
+            }
+        } else if (VendorUtils.ACTION_CLEANUP.equals(intent.getAction())) {
+            if (!intent.hasExtra(VendorUtils.EXTRA_SERVICE_ID)) {
+                Log.w(LOG_TAG, "Cleanup request did not include the associated service id." +
+                        " Ignoring.");
+                return false;
+            }
+            if (!intent.hasExtra(VendorUtils.EXTRA_TEMP_FILE_ROOT)) {
+                Log.w(LOG_TAG, "Cleanup request did not include the temp file root. Ignoring.");
+                return false;
+            }
+            if (!intent.hasExtra(VendorUtils.EXTRA_TEMP_FILES_IN_USE)) {
+                Log.w(LOG_TAG, "Cleanup request did not include the list of temp files in use. " +
+                        "Ignoring.");
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private void moveDownloadedFile(Context context, Intent intent) {
+        DownloadRequest request = intent.getParcelableExtra(
+                MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_REQUEST);
+        Intent intentForApp = request.getIntentForApp();
+        if (intentForApp == null) {
+            Log.i(LOG_TAG, "Malformed app notification intent");
+            setResultCode(RESULT_APP_NOTIFICATION_ERROR);
+            return;
+        }
+
+        int result = intent.getIntExtra(MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_RESULT,
+                MbmsDownloadSession.RESULT_CANCELLED);
+        intentForApp.putExtra(MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_RESULT, result);
+
+        if (result != MbmsDownloadSession.RESULT_SUCCESSFUL) {
+            Log.i(LOG_TAG, "Download request indicated a failed download. Aborting.");
+            context.sendBroadcast(intentForApp);
+            return;
+        }
+
+        Uri finalTempFile = intent.getParcelableExtra(VendorUtils.EXTRA_FINAL_URI);
+        if (!verifyTempFilePath(context, request.getFileServiceId(), finalTempFile)) {
+            Log.w(LOG_TAG, "Download result specified an invalid temp file " + finalTempFile);
+            setResultCode(RESULT_DOWNLOAD_FINALIZATION_ERROR);
+            return;
+        }
+
+        FileInfo completedFileInfo =
+                (FileInfo) intent.getParcelableExtra(MbmsDownloadSession.EXTRA_MBMS_FILE_INFO);
+        Path stagingDirectory = FileSystems.getDefault().getPath(
+                MbmsTempFileProvider.getEmbmsTempFileDir(context).getPath(),
+                TEMP_FILE_STAGING_LOCATION);
+
+        Uri stagedFileLocation;
+        try {
+            stagedFileLocation = stageTempFile(finalTempFile, stagingDirectory);
+        } catch (IOException e) {
+            Log.w(LOG_TAG, "Failed to move temp file to final destination");
+            setResultCode(RESULT_DOWNLOAD_FINALIZATION_ERROR);
+            return;
+        }
+        intentForApp.putExtra(MbmsDownloadSession.EXTRA_MBMS_COMPLETED_FILE_URI,
+                stagedFileLocation);
+        intentForApp.putExtra(MbmsDownloadSession.EXTRA_MBMS_FILE_INFO, completedFileInfo);
+        intentForApp.putExtra(MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_REQUEST, request);
+
+        context.sendBroadcast(intentForApp);
+        setResultCode(RESULT_OK);
+    }
+
+    private void cleanupPostMove(Context context, Intent intent) {
+        DownloadRequest request = intent.getParcelableExtra(
+                MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_REQUEST);
+        if (request == null) {
+            Log.w(LOG_TAG, "Intent does not include a DownloadRequest. Ignoring.");
+            return;
+        }
+
+        List<Uri> tempFiles = intent.getParcelableArrayListExtra(VendorUtils.EXTRA_TEMP_LIST);
+        if (tempFiles == null) {
+            return;
+        }
+
+        for (Uri tempFileUri : tempFiles) {
+            if (verifyTempFilePath(context, request.getFileServiceId(), tempFileUri)) {
+                File tempFile = new File(tempFileUri.getSchemeSpecificPart());
+                tempFile.delete();
+            }
+        }
+    }
+
+    private void generateTempFiles(Context context, Intent intent) {
+        String serviceId = intent.getStringExtra(VendorUtils.EXTRA_SERVICE_ID);
+        if (serviceId == null) {
+            Log.w(LOG_TAG, "Temp file request did not include the associated service id. " +
+                    "Ignoring.");
+            setResultCode(RESULT_MALFORMED_INTENT);
+            return;
+        }
+        int fdCount = intent.getIntExtra(VendorUtils.EXTRA_FD_COUNT, 0);
+        List<Uri> pausedList = intent.getParcelableArrayListExtra(VendorUtils.EXTRA_PAUSED_LIST);
+
+        if (fdCount == 0 && (pausedList == null || pausedList.size() == 0)) {
+            Log.i(LOG_TAG, "No temp files actually requested. Ending.");
+            setResultCode(RESULT_OK);
+            setResultExtras(Bundle.EMPTY);
+            return;
+        }
+
+        ArrayList<UriPathPair> freshTempFiles =
+                generateFreshTempFiles(context, serviceId, fdCount);
+        ArrayList<UriPathPair> pausedFiles =
+                generateUrisForPausedFiles(context, serviceId, pausedList);
+
+        Bundle result = new Bundle();
+        result.putParcelableArrayList(VendorUtils.EXTRA_FREE_URI_LIST, freshTempFiles);
+        result.putParcelableArrayList(VendorUtils.EXTRA_PAUSED_URI_LIST, pausedFiles);
+        setResultCode(RESULT_OK);
+        setResultExtras(result);
+    }
+
+    private ArrayList<UriPathPair> generateFreshTempFiles(Context context, String serviceId,
+            int freshFdCount) {
+        File tempFileDir = MbmsUtils.getEmbmsTempFileDirForService(context, serviceId);
+        if (!tempFileDir.exists()) {
+            tempFileDir.mkdirs();
+        }
+
+        // Name the files with the template "N-UUID", where N is the request ID and UUID is a
+        // random uuid.
+        ArrayList<UriPathPair> result = new ArrayList<>(freshFdCount);
+        for (int i = 0; i < freshFdCount; i++) {
+            File tempFile = generateSingleTempFile(tempFileDir);
+            if (tempFile == null) {
+                setResultCode(RESULT_TEMP_FILE_GENERATION_ERROR);
+                Log.w(LOG_TAG, "Failed to generate a temp file. Moving on.");
+                continue;
+            }
+            Uri fileUri = Uri.fromFile(tempFile);
+            Uri contentUri = MbmsTempFileProvider.getUriForFile(
+                    context, getFileProviderAuthorityCached(context), tempFile);
+            context.grantUriPermission(getMiddlewarePackageCached(context), contentUri,
+                    Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+            result.add(new UriPathPair(fileUri, contentUri));
+        }
+
+        return result;
+    }
+
+    private static File generateSingleTempFile(File tempFileDir) {
+        int numTries = 0;
+        while (numTries < MAX_TEMP_FILE_RETRIES) {
+            numTries++;
+            String fileName =  UUID.randomUUID() + TEMP_FILE_SUFFIX;
+            File tempFile = new File(tempFileDir, fileName);
+            try {
+                if (tempFile.createNewFile()) {
+                    return tempFile.getCanonicalFile();
+                }
+            } catch (IOException e) {
+                continue;
+            }
+        }
+        return null;
+    }
+
+    private ArrayList<UriPathPair> generateUrisForPausedFiles(Context context,
+            String serviceId, List<Uri> pausedFiles) {
+        if (pausedFiles == null) {
+            return new ArrayList<>(0);
+        }
+        ArrayList<UriPathPair> result = new ArrayList<>(pausedFiles.size());
+
+        for (Uri fileUri : pausedFiles) {
+            if (!verifyTempFilePath(context, serviceId, fileUri)) {
+                Log.w(LOG_TAG, "Supplied file " + fileUri + " is not a valid temp file to resume");
+                setResultCode(RESULT_TEMP_FILE_GENERATION_ERROR);
+                continue;
+            }
+            File tempFile = new File(fileUri.getSchemeSpecificPart());
+            if (!tempFile.exists()) {
+                Log.w(LOG_TAG, "Supplied file " + fileUri + " does not exist.");
+                setResultCode(RESULT_TEMP_FILE_GENERATION_ERROR);
+                continue;
+            }
+            Uri contentUri = MbmsTempFileProvider.getUriForFile(
+                    context, getFileProviderAuthorityCached(context), tempFile);
+            context.grantUriPermission(getMiddlewarePackageCached(context), contentUri,
+                    Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+
+            result.add(new UriPathPair(fileUri, contentUri));
+        }
+        return result;
+    }
+
+    private void cleanupTempFiles(Context context, Intent intent) {
+        String serviceId = intent.getStringExtra(VendorUtils.EXTRA_SERVICE_ID);
+        File tempFileDir = MbmsUtils.getEmbmsTempFileDirForService(context, serviceId);
+        final List<Uri> filesInUse =
+                intent.getParcelableArrayListExtra(VendorUtils.EXTRA_TEMP_FILES_IN_USE);
+        File[] filesToDelete = tempFileDir.listFiles(new FileFilter() {
+            @Override
+            public boolean accept(File file) {
+                File canonicalFile;
+                try {
+                    canonicalFile = file.getCanonicalFile();
+                } catch (IOException e) {
+                    Log.w(LOG_TAG, "Got IOException canonicalizing " + file + ", not deleting.");
+                    return false;
+                }
+                // Reject all files that don't match what we think a temp file should look like
+                // e.g. download tokens
+                if (!canonicalFile.getName().endsWith(TEMP_FILE_SUFFIX)) {
+                    return false;
+                }
+                // If any of the files in use match the uri, return false to reject it from the
+                // list to delete.
+                Uri fileInUseUri = Uri.fromFile(canonicalFile);
+                return !filesInUse.contains(fileInUseUri);
+            }
+        });
+        for (File fileToDelete : filesToDelete) {
+            fileToDelete.delete();
+        }
+    }
+
+    /*
+     * Moves a tempfile located at fromPath to a new location in the staging directory.
+     */
+    private static Uri stageTempFile(Uri fromPath, Path stagingDirectory) throws IOException {
+        if (!ContentResolver.SCHEME_FILE.equals(fromPath.getScheme())) {
+            Log.w(LOG_TAG, "Moving source uri " + fromPath+ " does not have a file scheme");
+            return null;
+        }
+
+        Path fromFile = FileSystems.getDefault().getPath(fromPath.getPath());
+        if (!Files.isDirectory(stagingDirectory)) {
+            Files.createDirectory(stagingDirectory);
+        }
+        Path result = Files.move(fromFile, stagingDirectory.resolve(fromFile.getFileName()));
+
+        return Uri.fromFile(result.toFile());
+    }
+
+    private static boolean verifyTempFilePath(Context context, String serviceId,
+            Uri filePath) {
+        if (!ContentResolver.SCHEME_FILE.equals(filePath.getScheme())) {
+            Log.w(LOG_TAG, "Uri " + filePath + " does not have a file scheme");
+            return false;
+        }
+
+        String path = filePath.getSchemeSpecificPart();
+        File tempFile = new File(path);
+        if (!tempFile.exists()) {
+            Log.w(LOG_TAG, "File at " + path + " does not exist.");
+            return false;
+        }
+
+        if (!MbmsUtils.isContainedIn(
+                MbmsUtils.getEmbmsTempFileDirForService(context, serviceId), tempFile)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    private String getFileProviderAuthorityCached(Context context) {
+        if (mFileProviderAuthorityCache != null) {
+            return mFileProviderAuthorityCache;
+        }
+
+        mFileProviderAuthorityCache = getFileProviderAuthority(context);
+        return mFileProviderAuthorityCache;
+    }
+
+    private static String getFileProviderAuthority(Context context) {
+        ApplicationInfo appInfo;
+        try {
+            appInfo = context.getPackageManager()
+                    .getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
+        } catch (PackageManager.NameNotFoundException e) {
+            throw new RuntimeException("Package manager couldn't find " + context.getPackageName());
+        }
+        if (appInfo.metaData == null) {
+            throw new RuntimeException("App must declare the file provider authority as metadata " +
+                    "in the manifest.");
+        }
+        String authority = appInfo.metaData.getString(MBMS_FILE_PROVIDER_META_DATA_KEY);
+        if (authority == null) {
+            throw new RuntimeException("App must declare the file provider authority as metadata " +
+                    "in the manifest.");
+        }
+        return authority;
+    }
+
+    private String getMiddlewarePackageCached(Context context) {
+        if (mMiddlewarePackageNameCache == null) {
+            mMiddlewarePackageNameCache = MbmsUtils.getMiddlewareServiceInfo(context,
+                    MbmsDownloadSession.MBMS_DOWNLOAD_SERVICE_ACTION).packageName;
+        }
+        return mMiddlewarePackageNameCache;
+    }
+
+    private static boolean manualMove(File src, File dst) {
+        InputStream in = null;
+        OutputStream out = null;
+        try {
+            if (!dst.exists()) {
+                dst.createNewFile();
+            }
+            in = new FileInputStream(src);
+            out = new FileOutputStream(dst);
+            byte[] buffer = new byte[2048];
+            int len;
+            do {
+                len = in.read(buffer);
+                out.write(buffer, 0, len);
+            } while (len > 0);
+        } catch (IOException e) {
+            Log.w(LOG_TAG, "Manual file move failed due to exception "  + e);
+            if (dst.exists()) {
+                dst.delete();
+            }
+            return false;
+        } finally {
+            try {
+                if (in != null) {
+                    in.close();
+                }
+                if (out != null) {
+                    out.close();
+                }
+            } catch (IOException e) {
+                Log.w(LOG_TAG, "Error closing streams: " + e);
+            }
+        }
+        return true;
+    }
+}
diff --git a/telephony/java/android/telephony/mbms/MbmsDownloadSessionCallback.java b/telephony/java/android/telephony/mbms/MbmsDownloadSessionCallback.java
new file mode 100644
index 0000000..42bc775
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/MbmsDownloadSessionCallback.java
@@ -0,0 +1,67 @@
+/*
+ * 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.telephony.mbms;
+
+import android.telephony.MbmsDownloadSession;
+
+import java.util.List;
+
+/**
+ * A callback class that apps should use to receive information on file downloads over
+ * cell-broadcast.
+ * @hide
+ */
+public class MbmsDownloadSessionCallback {
+
+    /**
+     * Indicates that the middleware has encountered an asynchronous error.
+     * @param errorCode Any error code listed in {@link MbmsErrors}
+     * @param message A message, intended for debugging purposes, describing the error in further
+     *                detail.
+     */
+    public void onError(int errorCode, String message) {
+        // default implementation empty
+    }
+
+    /**
+     * Called to indicate published File Services have changed.
+     *
+     * This will only be called after the application has requested a list of file services and
+     * specified a service class list of interest via
+     * {@link MbmsDownloadSession#requestUpdateFileServices(List)}. If there are subsequent calls to
+     * {@link MbmsDownloadSession#requestUpdateFileServices(List)},
+     * this method may not be called again if
+     * the list of service classes would remain the same.
+     *
+     * @param services The most recently updated list of available file services.
+     */
+    public void onFileServicesUpdated(List<FileServiceInfo> services) {
+        // default implementation empty
+    }
+
+    /**
+     * Called to indicate that the middleware has been initialized and is ready.
+     *
+     * Before this method is called, calling any method on an instance of
+     * {@link MbmsDownloadSession} will result in an {@link IllegalStateException}
+     * being thrown or {@link #onError(int, String)} being called with error code
+     * {@link MbmsErrors.GeneralErrors#ERROR_MIDDLEWARE_NOT_YET_READY}
+     */
+    public void onMiddlewareReady() {
+        // default implementation empty
+    }
+}
diff --git a/telephony/java/android/telephony/mbms/MbmsErrors.java b/telephony/java/android/telephony/mbms/MbmsErrors.java
new file mode 100644
index 0000000..0195869
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/MbmsErrors.java
@@ -0,0 +1,135 @@
+/*
+ * 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.telephony.mbms;
+
+import android.telephony.MbmsStreamingSession;
+
+/** @hide */
+public class MbmsErrors {
+    /** Indicates that the operation was successful. */
+    public static final int SUCCESS = 0;
+
+    // Following errors are generated in the manager and should not be returned from the
+    // middleware
+    /**
+     * Indicates that either no MBMS middleware app is installed on the device or multiple
+     * middleware apps are installed on the device.
+     */
+    public static final int ERROR_NO_UNIQUE_MIDDLEWARE = 1;
+
+    /**
+     * Indicates that the app attempted to perform an operation on an instance of
+     * {@link android.telephony.MbmsDownloadSession} or
+     * {@link MbmsStreamingSession} without being bound to the middleware.
+     */
+    public static final int ERROR_MIDDLEWARE_NOT_BOUND = 2;
+
+    /** Indicates that the middleware has died and the requested operation was not completed.*/
+    public static final int ERROR_MIDDLEWARE_LOST = 3;
+
+    /**
+     * Indicates errors that may be generated during initialization by the
+     * middleware. They are applicable to both streaming and file-download use-cases.
+     */
+    public static class InitializationErrors {
+        private InitializationErrors() {}
+        /**
+         * Indicates that the app tried to create more than one instance each of
+         * {@link MbmsStreamingSession} or {@link android.telephony.MbmsDownloadSession}.
+         */
+        public static final int ERROR_DUPLICATE_INITIALIZE = 101;
+        /** Indicates that the app is not authorized to access media via MBMS.*/
+        public static final int ERROR_APP_PERMISSIONS_NOT_GRANTED = 102;
+        /** Indicates that the middleware was unable to initialize for this app. */
+        public static final int ERROR_UNABLE_TO_INITIALIZE = 103;
+    }
+
+    /**
+     * Indicates the errors that may occur at any point and are applicable to both
+     * streaming and file-download.
+     */
+    public static class GeneralErrors {
+        private GeneralErrors() {}
+        /**
+         * Indicates that the app attempted to perform an operation before receiving notification
+         * that the middleware is ready via {@link MbmsStreamingSessionCallback#onMiddlewareReady()}
+         * or {@link MbmsDownloadSessionCallback#onMiddlewareReady()}.
+         */
+        public static final int ERROR_MIDDLEWARE_NOT_YET_READY = 201;
+        /**
+         * Indicates that the middleware ran out of memory and was unable to complete the requested
+         * operation.
+         */
+        public static final int ERROR_OUT_OF_MEMORY = 202;
+        /**
+         * Indicates that the requested operation failed due to the middleware being unavailable due
+         * to a transient condition. The app may retry the operation at a later time.
+         */
+        public static final int ERROR_MIDDLEWARE_TEMPORARILY_UNAVAILABLE = 203;
+        /**
+         * Indicates that the requested operation was not performed due to being in emergency
+         * callback mode.
+         */
+        public static final int ERROR_IN_E911 = 204;
+        /** Indicates that MBMS is not available due to the device being in roaming. */
+        public static final int ERROR_NOT_CONNECTED_TO_HOME_CARRIER_LTE = 205;
+        /** Indicates that MBMS is not available due to a SIM read error. */
+        public static final int ERROR_UNABLE_TO_READ_SIM = 206;
+        /**
+         * Indicates that MBMS is not available due to the inserted SIM being from an unsupported
+         * carrier.
+         */
+        public static final int ERROR_CARRIER_CHANGE_NOT_ALLOWED = 207;
+    }
+
+    /**
+     * Indicates the errors that are applicable only to the streaming use-case
+     */
+    public static class StreamingErrors {
+        private StreamingErrors() {}
+        /** Indicates that the middleware cannot start a stream due to too many ongoing streams */
+        public static final int ERROR_CONCURRENT_SERVICE_LIMIT_REACHED = 301;
+
+        /** Indicates that the middleware was unable to start the streaming service */
+        public static final int ERROR_UNABLE_TO_START_SERVICE = 302;
+
+        /**
+         * Indicates that the app called
+         * {@link MbmsStreamingSession#startStreaming(
+         * StreamingServiceInfo, StreamingServiceCallback, android.os.Handler)}
+         * more than once for the same {@link StreamingServiceInfo}.
+         */
+        public static final int ERROR_DUPLICATE_START_STREAM = 303;
+    }
+
+    /**
+     * Indicates the errors that are applicable only to the file-download use-case
+     */
+    public static class DownloadErrors {
+        private DownloadErrors() { }
+        /**
+         * Indicates that the app is not allowed to change the temp file root at this time due to
+         * outstanding download requests.
+         */
+        public static final int ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT = 401;
+
+        /** Indicates that the middleware has no record of the supplied {@link DownloadRequest}. */
+        public static final int ERROR_UNKNOWN_DOWNLOAD_REQUEST = 402;
+    }
+
+    private MbmsErrors() {}
+}
diff --git a/telephony/java/android/telephony/mbms/MbmsException.java b/telephony/java/android/telephony/mbms/MbmsException.java
deleted file mode 100644
index 6b90592..0000000
--- a/telephony/java/android/telephony/mbms/MbmsException.java
+++ /dev/null
@@ -1,53 +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.telephony.mbms;
-
-/** @hide */
-public class MbmsException extends Exception {
-    public static final int SUCCESS = 0;
-    public static final int ERROR_NO_SERVICE_INSTALLED = 1;
-    public static final int ERROR_MULTIPLE_SERVICES_INSTALLED = 2;
-    public static final int ERROR_BIND_TIMEOUT_OR_FAILURE = 3;
-    public static final int ERROR_UNABLE_TO_INITIALIZE = 4;
-    public static final int ERROR_ALREADY_INITIALIZED = 5;
-    public static final int ERROR_CONCURRENT_SERVICE_LIMIT_REACHED = 6;
-    public static final int ERROR_MIDDLEWARE_NOT_BOUND = 7;
-    public static final int ERROR_UNABLE_TO_START_SERVICE = 8;
-    public static final int ERROR_STREAM_ALREADY_STARTED = 9;
-    public static final int ERROR_END_OF_SESSION = 10;
-    public static final int ERROR_SERVICE_LOST = 11;
-    public static final int ERROR_APP_PERMISSIONS_NOT_GRANTED = 12;
-    public static final int ERROR_IN_E911 = 13;
-    public static final int ERROR_OUT_OF_MEMORY = 14;
-    public static final int ERROR_NOT_CONNECTED_TO_HOME_CARRIER_LTE = 15;
-    public static final int ERROR_UNABLE_TO_READ_SIM = 16;
-    public static final int ERROR_CARRIER_CHANGE_NOT_ALLOWED = 17;
-
-    private final int mErrorCode;
-
-    /** @hide
-     * TODO: future systemapi
-     */
-    public MbmsException(int errorCode) {
-        super();
-        mErrorCode = errorCode;
-    }
-
-    public int getErrorCode() {
-        return mErrorCode;
-    }
-}
diff --git a/telephony/java/android/telephony/mbms/MbmsStreamingManagerCallback.java b/telephony/java/android/telephony/mbms/MbmsStreamingManagerCallback.java
deleted file mode 100644
index b3bc814..0000000
--- a/telephony/java/android/telephony/mbms/MbmsStreamingManagerCallback.java
+++ /dev/null
@@ -1,64 +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.telephony.mbms;
-
-import java.util.List;
-
-/**
- * A Parcelable class with Cell-Broadcast service information.
- * @hide
- */
-public class MbmsStreamingManagerCallback extends IMbmsStreamingManagerCallback.Stub {
-
-    public final static int ERROR_CARRIER_NOT_SUPPORTED      = 1;
-    public final static int ERROR_UNABLE_TO_INITIALIZE       = 2;
-    public final static int ERROR_UNABLE_TO_ALLOCATE_MEMORY  = 3;
-
-
-    public void error(int errorCode, String message) {
-        // default implementation empty
-    }
-
-    /**
-     * Called to indicate published Streaming Services have changed.
-     *
-     * This will only be called after the application has requested
-     * a list of streaming services and specified a service class list
-     * of interest AND the results of a subsequent getStreamServices
-     * call with the same service class list would return different
-     * results.
-     *
-     * @param services a List of StreamingServiceInfos
-     *
-     */
-    public void streamingServicesUpdated(List<StreamingServiceInfo> services) {
-        // default implementation empty
-    }
-
-    /**
-     * Called to indicate the active Streaming Services have changed.
-     *
-     * This will be caused whenever a new service starts streaming or whenever
-     * MbmsStreamServiceManager.getActiveStreamingServices is called.
-     *
-     * @param services a list of StreamingServiceInfos.  May be empty if
-     *                 there are no active StreamingServices
-     */
-    public void activeStreamingServicesUpdated(List<StreamingServiceInfo> services) {
-        // default implementation empty
-    }
-}
diff --git a/telephony/java/android/telephony/mbms/MbmsStreamingSessionCallback.java b/telephony/java/android/telephony/mbms/MbmsStreamingSessionCallback.java
new file mode 100644
index 0000000..d714927
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/MbmsStreamingSessionCallback.java
@@ -0,0 +1,69 @@
+/*
+ * 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.telephony.mbms;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.os.Handler;
+import android.telephony.MbmsStreamingSession;
+
+import java.util.List;
+
+/**
+ * A callback class that is used to receive information from the middleware on MBMS streaming
+ * services. An instance of this object should be passed into
+ * {@link MbmsStreamingSession#create(Context, MbmsStreamingSessionCallback, int, Handler)}.
+ * @hide
+ */
+public class MbmsStreamingSessionCallback {
+    /**
+     * Called by the middleware when it has detected an error condition. The possible error codes
+     * are listed in {@link MbmsErrors}.
+     * @param errorCode The error code.
+     * @param message A human-readable message generated by the middleware for debugging purposes.
+     */
+    public void onError(int errorCode, @Nullable String message) {
+        // default implementation empty
+    }
+
+    /**
+     * Called to indicate published Streaming Services have changed.
+     *
+     * This will only be called after the application has requested
+     * a list of streaming services and specified a service class list
+     * of interest AND the results of a subsequent getStreamServices
+     * call with the same service class list would return different
+     * results.
+     *
+     * @param services The list of available services.
+     */
+    public void onStreamingServicesUpdated(List<StreamingServiceInfo> services) {
+        // default implementation empty
+    }
+
+    /**
+     * Called to indicate that the middleware has been initialized and is ready.
+     *
+     * Before this method is called, calling any method on an instance of
+     * {@link MbmsStreamingSession} will result in an {@link IllegalStateException} or an error
+     * delivered via {@link #onError(int, String)} with error code
+     * {@link MbmsErrors.GeneralErrors#ERROR_MIDDLEWARE_NOT_YET_READY}.
+     */
+    public void onMiddlewareReady() {
+        // default implementation empty
+    }
+}
diff --git a/telephony/java/android/telephony/mbms/MbmsTempFileProvider.java b/telephony/java/android/telephony/mbms/MbmsTempFileProvider.java
new file mode 100644
index 0000000..689becd
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/MbmsTempFileProvider.java
@@ -0,0 +1,190 @@
+/*
+ * 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.telephony.mbms;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.ContentProvider;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.pm.ProviderInfo;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.ParcelFileDescriptor;
+import android.telephony.MbmsDownloadSession;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Objects;
+
+/**
+ * @hide
+ */
+public class MbmsTempFileProvider extends ContentProvider {
+    public static final String TEMP_FILE_ROOT_PREF_FILE_NAME = "MbmsTempFileRootPrefs";
+    public static final String TEMP_FILE_ROOT_PREF_NAME = "mbms_temp_file_root";
+
+    private String mAuthority;
+    private Context mContext;
+
+    @Override
+    public boolean onCreate() {
+        return true;
+    }
+
+    @Override
+    public Cursor query(@NonNull Uri uri, @Nullable String[] projection,
+            @Nullable String selection, @Nullable String[] selectionArgs,
+            @Nullable String sortOrder) {
+        throw new UnsupportedOperationException("No querying supported");
+    }
+
+    @Override
+    public String getType(@NonNull Uri uri) {
+        // EMBMS temp files can contain arbitrary content.
+        return "application/octet-stream";
+    }
+
+    @Override
+    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
+        throw new UnsupportedOperationException("No inserting supported");
+    }
+
+    @Override
+    public int delete(@NonNull Uri uri, @Nullable String selection,
+            @Nullable String[] selectionArgs) {
+        throw new UnsupportedOperationException("No deleting supported");
+    }
+
+    @Override
+    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String
+            selection, @Nullable String[] selectionArgs) {
+        throw new UnsupportedOperationException("No updating supported");
+    }
+
+    @Override
+    public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
+        // ContentProvider has already checked granted permissions
+        final File file = getFileForUri(mContext, mAuthority, uri);
+        final int fileMode = ParcelFileDescriptor.parseMode(mode);
+        return ParcelFileDescriptor.open(file, fileMode);
+    }
+
+    @Override
+    public void attachInfo(Context context, ProviderInfo info) {
+        super.attachInfo(context, info);
+
+        // Sanity check our security
+        if (info.exported) {
+            throw new SecurityException("Provider must not be exported");
+        }
+        if (!info.grantUriPermissions) {
+            throw new SecurityException("Provider must grant uri permissions");
+        }
+
+        mAuthority = info.authority;
+        mContext = context;
+    }
+
+    public static Uri getUriForFile(Context context, String authority, File file) {
+        // Get the canonical path of the temp file
+        String filePath;
+        try {
+            filePath = file.getCanonicalPath();
+        } catch (IOException e) {
+            throw new IllegalArgumentException("Could not get canonical path for file " + file);
+        }
+
+        // Make sure the temp file is contained in the temp file directory as configured in the
+        // manifest
+        File tempFileDir = getEmbmsTempFileDir(context);
+        if (!MbmsUtils.isContainedIn(tempFileDir, file)) {
+            throw new IllegalArgumentException("File " + file + " is not contained in the temp " +
+                    "file directory, which is " + tempFileDir);
+        }
+
+        // Get the canonical path of the temp file directory
+        String tempFileDirPath;
+        try {
+            tempFileDirPath = tempFileDir.getCanonicalPath();
+        } catch (IOException e) {
+            throw new RuntimeException(
+                    "Could not get canonical path for temp file root dir " + tempFileDir);
+        }
+
+        // Start at first char of path under temp file directory
+        String pathFragment;
+        if (tempFileDirPath.endsWith("/")) {
+            pathFragment = filePath.substring(tempFileDirPath.length());
+        } else {
+            pathFragment = filePath.substring(tempFileDirPath.length() + 1);
+        }
+
+        String encodedPath = Uri.encode(pathFragment);
+        return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT)
+                .authority(authority).encodedPath(encodedPath).build();
+    }
+
+    public static File getFileForUri(Context context, String authority, Uri uri)
+            throws FileNotFoundException {
+        if (!ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
+            throw new IllegalArgumentException("Uri must have scheme content");
+        }
+        if (!Objects.equals(authority, uri.getAuthority())) {
+            throw new IllegalArgumentException("Uri does not have a matching authority: " +
+                    authority + ", " + uri.getAuthority());
+        }
+
+        String relPath = Uri.decode(uri.getEncodedPath());
+        File file;
+        File tempFileDir;
+
+        try {
+            tempFileDir = getEmbmsTempFileDir(context).getCanonicalFile();
+            file = new File(tempFileDir, relPath).getCanonicalFile();
+        } catch (IOException e) {
+            throw new FileNotFoundException("Could not resolve paths");
+        }
+
+        if (!file.getPath().startsWith(tempFileDir.getPath())) {
+            throw new SecurityException("Resolved path jumped beyond configured root");
+        }
+
+        return file;
+    }
+
+    /**
+     * Returns a File for the directory used to store temp files for this app
+     */
+    public static File getEmbmsTempFileDir(Context context) {
+        SharedPreferences prefs = context.getSharedPreferences(TEMP_FILE_ROOT_PREF_FILE_NAME, 0);
+        String storedTempFileRoot = prefs.getString(TEMP_FILE_ROOT_PREF_NAME, null);
+        try {
+            if (storedTempFileRoot != null) {
+                return new File(storedTempFileRoot).getCanonicalFile();
+            } else {
+                return new File(context.getFilesDir(),
+                        MbmsDownloadSession.DEFAULT_TOP_LEVEL_TEMP_DIRECTORY).getCanonicalFile();
+            }
+        } catch (IOException e) {
+            throw new RuntimeException("Unable to canonicalize temp file root path " + e);
+        }
+    }
+}
diff --git a/telephony/java/android/telephony/mbms/MbmsUtils.java b/telephony/java/android/telephony/mbms/MbmsUtils.java
new file mode 100644
index 0000000..d38d8a7
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/MbmsUtils.java
@@ -0,0 +1,95 @@
+/*
+ * 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.telephony.mbms;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.content.pm.*;
+import android.content.pm.ServiceInfo;
+import android.util.Log;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * @hide
+ */
+public class MbmsUtils {
+    private static final String LOG_TAG = "MbmsUtils";
+
+    public static boolean isContainedIn(File parent, File child) {
+        try {
+            String parentPath = parent.getCanonicalPath();
+            String childPath = child.getCanonicalPath();
+            return childPath.startsWith(parentPath);
+        } catch (IOException e) {
+            throw new RuntimeException("Failed to resolve canonical paths: " + e);
+        }
+    }
+
+    public static ComponentName toComponentName(ComponentInfo ci) {
+        return new ComponentName(ci.packageName, ci.name);
+    }
+
+    public static ServiceInfo getMiddlewareServiceInfo(Context context, String serviceAction) {
+        // Query for the proper service
+        PackageManager packageManager = context.getPackageManager();
+        Intent queryIntent = new Intent();
+        queryIntent.setAction(serviceAction);
+        List<ResolveInfo> downloadServices = packageManager.queryIntentServices(queryIntent,
+                PackageManager.MATCH_SYSTEM_ONLY);
+
+        if (downloadServices == null || downloadServices.size() == 0) {
+            Log.w(LOG_TAG, "No download services found, cannot get service info");
+            return null;
+        }
+
+        if (downloadServices.size() > 1) {
+            Log.w(LOG_TAG, "More than one download service found, cannot get unique service");
+            return null;
+        }
+        return downloadServices.get(0).serviceInfo;
+    }
+
+    public static int startBinding(Context context, String serviceAction,
+            ServiceConnection serviceConnection) {
+        Intent bindIntent = new Intent();
+        ServiceInfo mbmsServiceInfo =
+                MbmsUtils.getMiddlewareServiceInfo(context, serviceAction);
+
+        if (mbmsServiceInfo == null) {
+            return MbmsErrors.ERROR_NO_UNIQUE_MIDDLEWARE;
+        }
+
+        bindIntent.setComponent(MbmsUtils.toComponentName(mbmsServiceInfo));
+
+        context.bindService(bindIntent, serviceConnection, Context.BIND_AUTO_CREATE);
+        return MbmsErrors.SUCCESS;
+    }
+
+    /**
+     * Returns a File linked to the directory used to store temp files for this file service
+     */
+    public static File getEmbmsTempFileDirForService(Context context, String serviceId) {
+        File embmsTempFileDir = MbmsTempFileProvider.getEmbmsTempFileDir(context);
+
+        return new File(embmsTempFileDir, serviceId);
+    }
+}
diff --git a/telephony/java/android/telephony/mbms/ServiceInfo.java b/telephony/java/android/telephony/mbms/ServiceInfo.java
index f167f0ab..9404c19 100644
--- a/telephony/java/android/telephony/mbms/ServiceInfo.java
+++ b/telephony/java/android/telephony/mbms/ServiceInfo.java
@@ -16,90 +16,68 @@
 
 package android.telephony.mbms;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.text.TextUtils;
 
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Objects;
 import java.util.Set;
 
 /**
- * A Parcelable class with Cell-Broadcast service information.
+ * Describes a cell-broadcast service. This class should not be instantiated directly -- use
+ * {@link StreamingServiceInfo} or {@link FileServiceInfo}
  * @hide
  */
-public class ServiceInfo implements Parcelable {
+public class ServiceInfo {
     // arbitrary limit on the number of locale -> name pairs we support
     final static int MAP_LIMIT = 1000;
-    /**
-     * User displayable names listed by language.  Unmodifiable.
-     */
-    final Map<Locale, String> names;
 
-    /**
-     * The class name for this service - used to catagorize and filter
-     */
-    final String className;
+    private final Map<Locale, String> names;
+    private final String className;
+    private final List<Locale> locales;
+    private final String serviceId;
+    private final Date sessionStartTime;
+    private final Date sessionEndTime;
 
-    /**
-     * The language for this service content
-     */
-    final Locale locale;
-
-    /**
-     * The carrier's identifier for the service.
-     */
-    final String serviceId;
-
-    /**
-     * The start time indicating when this service will be available.
-     */
-    final Date sessionStartTime;
-
-    /**
-     * The end time indicating when this sesion stops being available.
-     */
-    final Date sessionEndTime;
-
-
-    public ServiceInfo(Map<Locale, String> newNames, String newClassName, Locale newLocale,
+    /** @hide */
+    public ServiceInfo(Map<Locale, String> newNames, String newClassName, List<Locale> newLocales,
             String newServiceId, Date start, Date end) {
         if (newNames == null || newNames.isEmpty() || TextUtils.isEmpty(newClassName)
-                || newLocale == null || TextUtils.isEmpty(newServiceId)
+                || newLocales == null || newLocales.isEmpty() || TextUtils.isEmpty(newServiceId)
                 || start == null || end == null) {
             throw new IllegalArgumentException("Bad ServiceInfo construction");
         }
         if (newNames.size() > MAP_LIMIT) {
-            throw new RuntimeException("bad map length" + newNames.size());
+            throw new RuntimeException("bad map length " + newNames.size());
         }
+        if (newLocales.size() > MAP_LIMIT) {
+            throw new RuntimeException("bad locales length " + newLocales.size());
+        }
+
         names = new HashMap(newNames.size());
         names.putAll(newNames);
         className = newClassName;
-        locale = (Locale)newLocale.clone();
+        locales = new ArrayList(newLocales);
         serviceId = newServiceId;
         sessionStartTime = (Date)start.clone();
         sessionEndTime = (Date)end.clone();
     }
 
-    public static final Parcelable.Creator<FileServiceInfo> CREATOR =
-            new Parcelable.Creator<FileServiceInfo>() {
-        @Override
-        public FileServiceInfo createFromParcel(Parcel source) {
-            return new FileServiceInfo(source);
-        }
-
-        @Override
-        public FileServiceInfo[] newArray(int size) {
-            return new FileServiceInfo[size];
-        }
-    };
-
-    ServiceInfo(Parcel in) {
+    /** @hide */
+    protected ServiceInfo(Parcel in) {
         int mapCount = in.readInt();
         if (mapCount > MAP_LIMIT || mapCount < 0) {
-              throw new RuntimeException("bad map length" + mapCount);
+            throw new RuntimeException("bad map length" + mapCount);
         }
         names = new HashMap(mapCount);
         while (mapCount-- > 0) {
@@ -108,13 +86,21 @@
             names.put(locale, name);
         }
         className = in.readString();
-        locale = (java.util.Locale) in.readSerializable();
+        int localesCount = in.readInt();
+        if (localesCount > MAP_LIMIT || localesCount < 0) {
+            throw new RuntimeException("bad locale length " + localesCount);
+        }
+        locales = new ArrayList<Locale>(localesCount);
+        while (localesCount-- > 0) {
+            Locale l = (java.util.Locale) in.readSerializable();
+            locales.add(l);
+        }
         serviceId = in.readString();
         sessionStartTime = (java.util.Date) in.readSerializable();
         sessionEndTime = (java.util.Date) in.readSerializable();
     }
 
-    @Override
+    /** @hide */
     public void writeToParcel(Parcel dest, int flags) {
         Set<Locale> keySet = names.keySet();
         dest.writeInt(keySet.size());
@@ -123,39 +109,98 @@
             dest.writeString(names.get(l));
         }
         dest.writeString(className);
-        dest.writeSerializable(locale);
+        int localesCount = locales.size();
+        dest.writeInt(localesCount);
+        for (Locale l : locales) {
+            dest.writeSerializable(l);
+        }
         dest.writeString(serviceId);
         dest.writeSerializable(sessionStartTime);
         dest.writeSerializable(sessionEndTime);
     }
 
-    @Override
-    public int describeContents() {
-        return 0;
+    /**
+     * Get the user-displayable name for this cell-broadcast service corresponding to the
+     * provided {@link Locale}.
+     * @param locale The {@link Locale} in which you want the name of the service. This must be a
+     *               value from the set returned by {@link #getNamedContentLocales()} -- an
+     *               {@link java.util.NoSuchElementException} may be thrown otherwise.
+     * @return The {@link CharSequence} providing the name of the service in the given
+     *         {@link Locale}
+     */
+    public @NonNull CharSequence getNameForLocale(@NonNull Locale locale) {
+        if (!names.containsKey(locale)) {
+            throw new NoSuchElementException("Locale not supported");
+        }
+        return names.get(locale);
     }
 
-    public Map<Locale, String> getNames() {
-        return names;
+    /**
+     * Return an unmodifiable set of the current {@link Locale}s that have a user-displayable name
+     * associated with them. The user-displayable name associated with any {@link Locale} in this
+     * set can be retrieved with {@link #getNameForLocale(Locale)}.
+     * @return An unmodifiable set of {@link Locale} objects corresponding to a user-displayable
+     * content name in that locale.
+     */
+    public @NonNull Set<Locale> getNamedContentLocales() {
+        return Collections.unmodifiableSet(names.keySet());
     }
 
-    public String getClassName() {
+    /**
+     * The class name for this service - used to categorize and filter
+     */
+    public String getServiceClassName() {
         return className;
     }
 
-    public Locale getLocale() {
-        return locale;
+    /**
+     * The languages available for this service content
+     */
+    public List<Locale> getLocales() {
+        return locales;
     }
 
+    /**
+     * The carrier's identifier for the service.
+     */
     public String getServiceId() {
         return serviceId;
     }
 
+    /**
+     * The start time indicating when this service will be available.
+     */
     public Date getSessionStartTime() {
         return sessionStartTime;
     }
 
+    /**
+     * The end time indicating when this session stops being available.
+     */
     public Date getSessionEndTime() {
         return sessionEndTime;
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null) {
+            return false;
+        }
+        if (!(o instanceof ServiceInfo)) {
+            return false;
+        }
+        ServiceInfo that = (ServiceInfo) o;
+        return Objects.equals(names, that.names) &&
+                Objects.equals(className, that.className) &&
+                Objects.equals(locales, that.locales) &&
+                Objects.equals(serviceId, that.serviceId) &&
+                Objects.equals(sessionStartTime, that.sessionStartTime) &&
+                Objects.equals(sessionEndTime, that.sessionEndTime);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(names, className, locales, serviceId, sessionStartTime, sessionEndTime);
+    }
 }
diff --git a/telephony/java/android/telephony/mbms/StreamingService.java b/telephony/java/android/telephony/mbms/StreamingService.java
index 85ba625..ea9d70a 100644
--- a/telephony/java/android/telephony/mbms/StreamingService.java
+++ b/telephony/java/android/telephony/mbms/StreamingService.java
@@ -16,101 +16,178 @@
 
 package android.telephony.mbms;
 
+import android.annotation.IntDef;
+import android.annotation.Nullable;
 import android.net.Uri;
-import android.os.DeadObjectException;
 import android.os.RemoteException;
+import android.telephony.MbmsStreamingSession;
 import android.telephony.mbms.vendor.IMbmsStreamingService;
 import android.util.Log;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /**
+ * Class used to represent a single MBMS stream. After a stream has been started with
+ * {@link MbmsStreamingSession#startStreaming(StreamingServiceInfo,
+ * StreamingServiceCallback, android.os.Handler)},
+ * this class is used to hold information about the stream and control it.
  * @hide
  */
 public class StreamingService {
     private static final String LOG_TAG = "MbmsStreamingService";
+
+    /**
+     * The state of a stream, reported via {@link StreamingServiceCallback#onStreamStateUpdated}
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({STATE_STOPPED, STATE_STARTED, STATE_STALLED})
+    public @interface StreamingState {}
     public final static int STATE_STOPPED = 1;
     public final static int STATE_STARTED = 2;
     public final static int STATE_STALLED = 3;
 
-    private final String mAppName;
+    /**
+     * The reason for a stream state change, reported via
+     * {@link StreamingServiceCallback#onStreamStateUpdated}
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({REASON_BY_USER_REQUEST, REASON_END_OF_SESSION, REASON_FREQUENCY_CONFLICT,
+            REASON_OUT_OF_MEMORY, REASON_NOT_CONNECTED_TO_HOMECARRIER_LTE,
+            REASON_LEFT_MBMS_BROADCAST_AREA, REASON_NONE})
+    public @interface StreamingStateChangeReason {}
+
+    /**
+     * Indicates that the middleware does not have a reason to provide for the state change.
+     */
+    public static final int REASON_NONE = 0;
+
+    /**
+     * State changed due to a call to {@link #stopStreaming()} or
+     * {@link MbmsStreamingSession#startStreaming(StreamingServiceInfo,
+     * StreamingServiceCallback, android.os.Handler)}
+     */
+    public static final int REASON_BY_USER_REQUEST = 1;
+
+    /**
+     * State changed due to the streaming session ending at the carrier.
+     */
+    public static final int REASON_END_OF_SESSION = 2;
+
+    /**
+     * State changed due to a frequency conflict with another requested stream.
+     */
+    public static final int REASON_FREQUENCY_CONFLICT = 3;
+
+    /**
+     * State changed due to the middleware running out of memory
+     */
+    public static final int REASON_OUT_OF_MEMORY = 4;
+
+    /**
+     * State changed due to the device leaving the home carrier's LTE network.
+     */
+    public static final int REASON_NOT_CONNECTED_TO_HOMECARRIER_LTE = 5;
+
+    /**
+     * State changed due to the device leaving the where this stream is being broadcast.
+     */
+    public static final int REASON_LEFT_MBMS_BROADCAST_AREA = 6;
+
+    /**
+     * The method of transmission currently used for a stream,
+     * reported via {@link StreamingServiceCallback#onStreamMethodUpdated}
+     */
+    public final static int BROADCAST_METHOD = 1;
+    public final static int UNICAST_METHOD   = 2;
+
     private final int mSubscriptionId;
+    private final MbmsStreamingSession mParentSession;
     private final StreamingServiceInfo mServiceInfo;
-    private final IStreamingServiceCallback mCallback;
+    private final InternalStreamingServiceCallback mCallback;
 
     private IMbmsStreamingService mService;
+
     /**
      * @hide
      */
-    public StreamingService(String appName,
-            int subscriptionId,
+    public StreamingService(int subscriptionId,
             IMbmsStreamingService service,
+            MbmsStreamingSession session,
             StreamingServiceInfo streamingServiceInfo,
-            IStreamingServiceCallback callback) {
-        mAppName = appName;
+            InternalStreamingServiceCallback callback) {
         mSubscriptionId = subscriptionId;
+        mParentSession = session;
         mService = service;
         mServiceInfo = streamingServiceInfo;
         mCallback = callback;
     }
 
     /**
-     * Retreive the Uri used to play this stream.
+     * Retrieve the Uri used to play this stream.
      *
-     * This may throw a {@link MbmsException} with the error code
-     * {@link MbmsException#ERROR_SERVICE_LOST}
+     * May throw an {@link IllegalArgumentException} or an {@link IllegalStateException}.
      *
-     * @return The {@link Uri} to pass to the streaming client.
+     * @return The {@link Uri} to pass to the streaming client, or {@code null} if an error
+     *         occurred.
      */
-    public Uri getPlaybackUri() throws MbmsException {
+    public @Nullable Uri getPlaybackUri() {
         if (mService == null) {
             throw new IllegalStateException("No streaming service attached");
         }
 
         try {
-            return mService.getPlaybackUri(mAppName, mSubscriptionId, mServiceInfo.getServiceId());
+            return mService.getPlaybackUri(mSubscriptionId, mServiceInfo.getServiceId());
         } catch (RemoteException e) {
             Log.w(LOG_TAG, "Remote process died");
             mService = null;
-            throw new MbmsException(MbmsException.ERROR_SERVICE_LOST);
+            mParentSession.onStreamingServiceStopped(this);
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
+            return null;
         }
     }
 
     /**
-     * Retreive the info for this StreamingService.
+     * Retrieve the {@link StreamingServiceInfo} corresponding to this stream.
      */
     public StreamingServiceInfo getInfo() {
         return mServiceInfo;
     }
 
     /**
-     * Stop streaming this service.
-     * This may throw a {@link MbmsException} with the error code
-     * {@link MbmsException#ERROR_SERVICE_LOST}
+     * Stop streaming this service. Further operations on this object will fail with an
+     * {@link IllegalStateException}.
+     *
+     * May throw an {@link IllegalArgumentException} or an {@link IllegalStateException}
      */
-    public void stopStreaming() throws MbmsException {
+    public void stopStreaming() {
         if (mService == null) {
             throw new IllegalStateException("No streaming service attached");
         }
 
         try {
-            mService.stopStreaming(mAppName, mSubscriptionId, mServiceInfo.getServiceId());
+            mService.stopStreaming(mSubscriptionId, mServiceInfo.getServiceId());
         } catch (RemoteException e) {
             Log.w(LOG_TAG, "Remote process died");
             mService = null;
-            throw new MbmsException(MbmsException.ERROR_SERVICE_LOST);
+            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
+        } finally {
+            mParentSession.onStreamingServiceStopped(this);
         }
     }
 
-    public void dispose() throws MbmsException {
-        if (mService == null) {
-            throw new IllegalStateException("No streaming service attached");
-        }
+    /** @hide */
+    public InternalStreamingServiceCallback getCallback() {
+        return mCallback;
+    }
 
+    private void sendErrorToApp(int errorCode, String message) {
         try {
-            mService.disposeStream(mAppName, mSubscriptionId, mServiceInfo.getServiceId());
+            mCallback.onError(errorCode, message);
         } catch (RemoteException e) {
-            Log.w(LOG_TAG, "Remote process died");
-            mService = null;
-            throw new MbmsException(MbmsException.ERROR_SERVICE_LOST);
+            // Ignore, should not happen locally.
         }
     }
 }
diff --git a/telephony/java/android/telephony/mbms/StreamingServiceCallback.java b/telephony/java/android/telephony/mbms/StreamingServiceCallback.java
index bd0a1b3..3c07961 100644
--- a/telephony/java/android/telephony/mbms/StreamingServiceCallback.java
+++ b/telephony/java/android/telephony/mbms/StreamingServiceCallback.java
@@ -16,13 +16,14 @@
 
 package android.telephony.mbms;
 
-import android.net.Uri;
+import android.annotation.Nullable;
 
 /**
- * A Callback class for use when the application is actively streaming content.
+ * A callback class for use when the application is actively streaming content. The middleware
+ * will provide updates on the status of the stream via this callback.
  * @hide
  */
-public class StreamingServiceCallback extends IStreamingServiceCallback.Stub {
+public class StreamingServiceCallback {
 
     /**
      * Indicates broadcast signal strength is not available for this service.
@@ -33,7 +34,13 @@
      */
     public static final int SIGNAL_STRENGTH_UNAVAILABLE = -1;
 
-    public void error(int errorCode, String message) {
+    /**
+     * Called by the middleware when it has detected an error condition in this stream. The
+     * possible error codes are listed in {@link MbmsErrors}.
+     * @param errorCode The error code.
+     * @param message A human-readable message generated by the middleware for debugging purposes.
+     */
+    public void onError(int errorCode, @Nullable String message) {
         // default implementation empty
     }
 
@@ -43,17 +50,22 @@
      * See {@link StreamingService#STATE_STOPPED}, {@link StreamingService#STATE_STARTED}
      * and {@link StreamingService#STATE_STALLED}.
      */
-    public void streamStateChanged(int state) {
+    public void onStreamStateUpdated(@StreamingService.StreamingState int state,
+            @StreamingService.StreamingStateChangeReason int reason) {
         // default implementation empty
     }
 
     /**
-     * Called to indicate published Download Services have changed.
+     * Called to indicate the mpd of a the stream has changed.
+     *
+     * Depending on the Dash Client it may need to be either reset
+     * (less drastic, but original spec didn't allow mpd to change so not
+     * always supported) or restarted.
      *
      * This may be called when a looping stream hits the end or
-     * when the a new URI should be used to correct for time drift.
+     * when parameters have changed to account for time drift.
      */
-    public void uriUpdated(Uri uri) {
+    public void onMediaDescriptionUpdated() {
         // default implementation empty
     }
 
@@ -67,7 +79,27 @@
      * {@link #SIGNAL_STRENGTH_UNAVAILABLE} if broadcast is not available
      * for this service due to timing, geography or popularity.
      */
-    public void broadcastSignalStrengthUpdated(int signalStrength) {
+    public void onBroadcastSignalStrengthUpdated(int signalStrength) {
+        // default implementation empty
+    }
+
+    /**
+     * Notify of bcast/unicast method being used.
+     *
+     * This is intended to be informational.  Indicates
+     * whether we're able to use cell broadcast or have
+     * had to fallback to unicast for this stream.
+     *
+     * This must be called once at the beginning of the stream
+     * around the same time as we change to STATE_STARTED, but
+     * strict ordering is not specified.  It must be called
+     * again if we change modes, but if that doesn't happen
+     * the callback won't be used again.
+     *
+     * See {@link StreamingService#BROADCAST_METHOD} and
+     * {@link StreamingService#UNICAST_METHOD}
+     */
+    public void onStreamMethodUpdated(int methodType) {
         // default implementation empty
     }
 }
diff --git a/telephony/java/android/telephony/mbms/StreamingServiceInfo.java b/telephony/java/android/telephony/mbms/StreamingServiceInfo.java
index f559585..8e7917a 100644
--- a/telephony/java/android/telephony/mbms/StreamingServiceInfo.java
+++ b/telephony/java/android/telephony/mbms/StreamingServiceInfo.java
@@ -16,23 +16,35 @@
 
 package android.telephony.mbms;
 
+import android.annotation.SystemApi;
 import android.os.Parcel;
 import android.os.Parcelable;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
 /**
- * A Parcelable class Cell-Broadcast media stream information.
- * This may not have any more info than ServiceInfo, but kept for completeness.
+ * Describes a single MBMS streaming service.
  * @hide
  */
-public class StreamingServiceInfo extends ServiceInfo implements Parcelable {
+public final class StreamingServiceInfo extends ServiceInfo implements Parcelable {
 
-    public StreamingServiceInfo(Map<Locale, String> newNames, String newClassName,
-            Locale newLocale, String newServiceId, Date start, Date end) {
-        super(newNames, newClassName, newLocale, newServiceId, start, end);
+    /**
+     * @param names User displayable names listed by language.
+     * @param className The class name for this service - used by frontend apps to categorize and
+     *                  filter.
+     * @param locales The languages available for this service content.
+     * @param serviceId The carrier's identifier for the service.
+     * @param start The start time indicating when this service will be available.
+     * @param end The end time indicating when this session stops being available.
+     * @hide
+     */
+    @SystemApi
+    public StreamingServiceInfo(Map<Locale, String> names, String className,
+            List<Locale> locales, String serviceId, Date start, Date end) {
+        super(names, className, locales, serviceId, start, end);
     }
 
     public static final Parcelable.Creator<StreamingServiceInfo> CREATOR =
@@ -48,7 +60,7 @@
         }
     };
 
-    StreamingServiceInfo(Parcel in) {
+    private StreamingServiceInfo(Parcel in) {
         super(in);
     }
 
diff --git a/telephony/java/android/telephony/mbms/UriPathPair.java b/telephony/java/android/telephony/mbms/UriPathPair.java
index 7acc270..33bf785 100644
--- a/telephony/java/android/telephony/mbms/UriPathPair.java
+++ b/telephony/java/android/telephony/mbms/UriPathPair.java
@@ -16,13 +16,20 @@
 
 package android.telephony.mbms;
 
+import android.annotation.SystemApi;
 import android.content.ContentResolver;
 import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.telephony.mbms.vendor.VendorUtils;
 
-/** @hide */
-public class UriPathPair implements Parcelable {
+/**
+ * Wrapper for a pair of {@link Uri}s that describe a temp file used by the middleware to
+ * download files via cell-broadcast.
+ * @hide
+ */
+//@SystemApi
+public final class UriPathPair implements Parcelable {
     private final Uri mFilePathUri;
     private final Uri mContentUri;
 
@@ -40,7 +47,7 @@
     }
 
     /** @hide */
-    protected UriPathPair(Parcel in) {
+    private UriPathPair(Parcel in) {
         mFilePathUri = in.readParcelable(Uri.class.getClassLoader());
         mContentUri = in.readParcelable(Uri.class.getClassLoader());
     }
@@ -57,12 +64,23 @@
         }
     };
 
-    /** future systemapi */
+    /**
+     * Returns the file-path {@link Uri}. This has scheme {@code file} and points to the actual
+     * location on disk where the temp file resides. Use this when sending {@link Uri}s back to the
+     * app in the intents in {@link VendorUtils}.
+     * @return A {@code file} {@link Uri}.
+     */
     public Uri getFilePathUri() {
         return mFilePathUri;
     }
 
-    /** future systemapi */
+    /**
+     * Returns the content {@link Uri} that may be used with
+     * {@link ContentResolver#openFileDescriptor(Uri, String)} to obtain a
+     * {@link android.os.ParcelFileDescriptor} to a temp file to write to. This {@link Uri} will
+     * expire if the middleware process dies.
+     * @return A {@code content} {@link Uri}
+     */
     public Uri getContentUri() {
         return mContentUri;
     }
diff --git a/telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl b/telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl
index 6c2b816..cb93542 100755
--- a/telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl
+++ b/telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl
@@ -19,55 +19,36 @@
 import android.app.PendingIntent;
 import android.net.Uri;
 import android.telephony.mbms.DownloadRequest;
-import android.telephony.mbms.DownloadStatus;
-import android.telephony.mbms.IMbmsDownloadManagerCallback;
-import android.telephony.mbms.IDownloadCallback;
+import android.telephony.mbms.FileInfo;
+import android.telephony.mbms.IMbmsDownloadSessionCallback;
+import android.telephony.mbms.IDownloadStateCallback;
 
 /**
- * The interface the opaque MbmsStreamingService will satisfy.
  * @hide
  */
 interface IMbmsDownloadService
 {
-    /**
-     * Initialize download service
-     * Registers this listener, subId with this appName
-     *
-     * No return value.  Async errors may be reported, but none expected (not doing anything yet).
-     */
-    void initialize(String appName, int subId, IMbmsDownloadManagerCallback listener);
+    int initialize(int subId, IMbmsDownloadSessionCallback listener);
 
-    /**
-     * - Registers serviceClasses of interest with the uid/appName/subId key.
-     * - Starts asynch fetching data on download services of matching classes to be reported
-     * later by callback.
-     *
-     * Note that subsequent calls with the same callback, appName, subId and uid will replace
-     * the service class list.
-     */
-    int getFileServices(String appName, int subId, in List<String> serviceClasses);
+    int requestUpdateFileServices(int subId, in List<String> serviceClasses);
 
-    /**
-     * should move the params into a DownloadRequest parcelable
-     */
-    int download(in DownloadRequest downloadRequest, IDownloadCallback listener);
+    int setTempFileRootDirectory(int subId, String rootDirectoryPath);
 
-    List<DownloadRequest> listPendingDownloads(String appName, int subscriptionId);
+    int download(in DownloadRequest downloadRequest);
+
+    int registerStateCallback(in DownloadRequest downloadRequest, IDownloadStateCallback listener,
+        int flags);
+
+    int unregisterStateCallback(in DownloadRequest downloadRequest,
+        IDownloadStateCallback listener);
+
+    List<DownloadRequest> listPendingDownloads(int subscriptionId);
 
     int cancelDownload(in DownloadRequest downloadRequest);
 
-    DownloadStatus getDownloadStatus(in DownloadRequest downloadRequest);
+    int getDownloadStatus(in DownloadRequest downloadRequest, in FileInfo fileInfo);
 
-    /*
-     * named this for 2 reasons:
-     *  1 don't want 'State' here as it conflicts with 'Status' of the previous function
-     *  2 want to perfect typing 'Knowledge'
-     */
-    void resetDownloadKnowledge(in DownloadRequest downloadRequest);
+    int resetDownloadKnowledge(in DownloadRequest downloadRequest);
 
-    /**
-     * End of life for this MbmsDownloadManager.
-     * Any pending downloads remain in affect and may start up independently in the future.
-     */
-    void dispose(String appName, int subId);
+    void dispose(int subId);
 }
diff --git a/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl b/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl
index 8ff7fa7..c90ffc7 100755
--- a/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl
+++ b/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl
@@ -17,38 +17,25 @@
 package android.telephony.mbms.vendor;
 
 import android.net.Uri;
-import android.telephony.mbms.IMbmsStreamingManagerCallback;
+import android.telephony.mbms.IMbmsStreamingSessionCallback;
 import android.telephony.mbms.IStreamingServiceCallback;
 import android.telephony.mbms.StreamingServiceInfo;
 
 /**
- * The interface the opaque MbmsStreamingService will satisfy.
  * @hide
  */
 interface IMbmsStreamingService
 {
-    int initialize(IMbmsStreamingManagerCallback listener, String appName, int subId);
+    int initialize(IMbmsStreamingSessionCallback callback, int subId);
 
-    int getStreamingServices(String appName, int subId, in List<String> serviceClasses);
+    int requestUpdateStreamingServices(int subId, in List<String> serviceClasses);
 
-    int startStreaming(String appName, int subId, String serviceId,
-            IStreamingServiceCallback listener);
+    int startStreaming(int subId, String serviceId,
+            IStreamingServiceCallback callback);
 
-    /**
-     * Per-stream api.  Note each specifies what stream they apply to.
-     */
+    Uri getPlaybackUri(int subId, String serviceId);
 
-    Uri getPlaybackUri(String appName, int subId, String serviceId);
+    void stopStreaming(int subId, String serviceId);
 
-    void stopStreaming(String appName, int subId, String serviceId);
-
-    void disposeStream(String appName, int subId, String serviceId);
-
-    /**
-     * End of life for all MbmsStreamingManager's created by this uid/appName/subId.
-     * Ends any streams run under this uid/appname/subId and calls the disposed methods
-     * an callbacks registered for this uid/appName/subId and the disposed methods on any
-     * listeners registered with startStreaming.
-     */
-    void dispose(String appName, int subId);
+    void dispose(int subId);
 }
diff --git a/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java b/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java
index 505aeae..c6dbc22 100644
--- a/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java
+++ b/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java
@@ -16,61 +16,389 @@
 
 package android.telephony.mbms.vendor;
 
+import android.annotation.NonNull;
+import android.annotation.SystemApi;
+import android.content.Intent;
+import android.os.Binder;
+import android.os.IBinder;
 import android.os.RemoteException;
+import android.telephony.MbmsDownloadSession;
 import android.telephony.mbms.DownloadRequest;
-import android.telephony.mbms.DownloadStatus;
-import android.telephony.mbms.IDownloadCallback;
-import android.telephony.mbms.IMbmsDownloadManagerCallback;
+import android.telephony.mbms.DownloadStateCallback;
+import android.telephony.mbms.FileInfo;
+import android.telephony.mbms.FileServiceInfo;
+import android.telephony.mbms.IDownloadStateCallback;
+import android.telephony.mbms.IMbmsDownloadSessionCallback;
+import android.telephony.mbms.MbmsDownloadSessionCallback;
+import android.telephony.mbms.MbmsErrors;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
- * Base class for MbmsDownloadService. The middleware should extend this base class rather than
- * the aidl stub for compatibility
+ * Base class for MbmsDownloadService. The middleware should return an instance of this object from
+ * its {@link android.app.Service#onBind(Intent)} method.
  * @hide
- * TODO: future systemapi
  */
+//@SystemApi
 public class MbmsDownloadServiceBase extends IMbmsDownloadService.Stub {
-    @Override
-    public void initialize(String appName, int subId, IMbmsDownloadManagerCallback listener)
-            throws RemoteException {
+    private final Map<IBinder, DownloadStateCallback> mDownloadCallbackBinderMap = new HashMap<>();
+    private final Map<IBinder, DeathRecipient> mDownloadCallbackDeathRecipients = new HashMap<>();
+
+
+    // Filters the DownloadStateCallbacks by its configuration from the app.
+    private abstract static class FilteredDownloadStateCallback extends DownloadStateCallback {
+
+        private final IDownloadStateCallback mCallback;
+        public FilteredDownloadStateCallback(IDownloadStateCallback callback, int callbackFlags) {
+            super(callbackFlags);
+            mCallback = callback;
+        }
+
+        @Override
+        public void onProgressUpdated(DownloadRequest request, FileInfo fileInfo,
+                int currentDownloadSize, int fullDownloadSize, int currentDecodedSize,
+                int fullDecodedSize) {
+            if (!isFilterFlagSet(PROGRESS_UPDATES)) {
+                return;
+            }
+            try {
+                mCallback.onProgressUpdated(request, fileInfo, currentDownloadSize,
+                        fullDownloadSize, currentDecodedSize, fullDecodedSize);
+            } catch (RemoteException e) {
+                onRemoteException(e);
+            }
+        }
+
+        @Override
+        public void onStateUpdated(DownloadRequest request, FileInfo fileInfo,
+                @MbmsDownloadSession.DownloadStatus int state) {
+            if (!isFilterFlagSet(STATE_UPDATES)) {
+                return;
+            }
+            try {
+                mCallback.onStateUpdated(request, fileInfo, state);
+            } catch (RemoteException e) {
+                onRemoteException(e);
+            }
+        }
+
+        protected abstract void onRemoteException(RemoteException e);
     }
 
-    @Override
-    public int getFileServices(String appName, int subId, List<String> serviceClasses) throws
-            RemoteException {
-        return 0;
-    }
-
-    @Override
-    public int download(DownloadRequest downloadRequest, IDownloadCallback listener)
+    /**
+     * Initialize the download service for this app and subId, registering the listener.
+     *
+     * May throw an {@link IllegalArgumentException} or an {@link IllegalStateException}, which
+     * will be intercepted and passed to the app as
+     * {@link MbmsErrors.InitializationErrors#ERROR_UNABLE_TO_INITIALIZE}
+     *
+     * May return any value from {@link MbmsErrors.InitializationErrors}
+     * or {@link MbmsErrors#SUCCESS}. Non-successful error codes will be passed to the app via
+     * {@link IMbmsDownloadSessionCallback#onError(int, String)}.
+     *
+     * @param callback The callback to use to communicate with the app.
+     * @param subscriptionId The subscription ID to use.
+     */
+    public int initialize(int subscriptionId, MbmsDownloadSessionCallback callback)
             throws RemoteException {
         return 0;
     }
 
+    /**
+     * Actual AIDL implementation -- hides the callback AIDL from the API.
+     * @hide
+     */
     @Override
-    public List<DownloadRequest> listPendingDownloads(String appName, int subscriptionId)
+    public final int initialize(final int subscriptionId,
+            final IMbmsDownloadSessionCallback callback) throws RemoteException {
+        final int uid = Binder.getCallingUid();
+        callback.asBinder().linkToDeath(new DeathRecipient() {
+            @Override
+            public void binderDied() {
+                onAppCallbackDied(uid, subscriptionId);
+            }
+        }, 0);
+
+        return initialize(subscriptionId, new MbmsDownloadSessionCallback() {
+            @Override
+            public void onError(int errorCode, String message) {
+                try {
+                    callback.onError(errorCode, message);
+                } catch (RemoteException e) {
+                    onAppCallbackDied(uid, subscriptionId);
+                }
+            }
+
+            @Override
+            public void onFileServicesUpdated(List<FileServiceInfo> services) {
+                try {
+                    callback.onFileServicesUpdated(services);
+                } catch (RemoteException e) {
+                    onAppCallbackDied(uid, subscriptionId);
+                }
+            }
+
+            @Override
+            public void onMiddlewareReady() {
+                try {
+                    callback.onMiddlewareReady();
+                } catch (RemoteException e) {
+                    onAppCallbackDied(uid, subscriptionId);
+                }
+            }
+        });
+    }
+
+    /**
+     * Registers serviceClasses of interest with the appName/subId key.
+     * Starts async fetching data on streaming services of matching classes to be reported
+     * later via {@link IMbmsDownloadSessionCallback#onFileServicesUpdated(List)}
+     *
+     * Note that subsequent calls with the same uid and subId will replace
+     * the service class list.
+     *
+     * May throw an {@link IllegalArgumentException} or an {@link IllegalStateException}
+     *
+     * @param subscriptionId The subscription id to use.
+     * @param serviceClasses The service classes that the app wishes to get info on. The strings
+     *                       may contain arbitrary data as negotiated between the app and the
+     *                       carrier.
+     * @return One of {@link MbmsErrors#SUCCESS} or
+     *         {@link MbmsErrors.GeneralErrors#ERROR_MIDDLEWARE_NOT_YET_READY},
+     */
+    @Override
+    public int requestUpdateFileServices(int subscriptionId, List<String> serviceClasses)
+            throws RemoteException {
+        return 0;
+    }
+
+    /**
+     * Sets the temp file root directory for this app/subscriptionId combination. The middleware
+     * should persist {@code rootDirectoryPath} and send it back when sending intents to the
+     * app's {@link android.telephony.mbms.MbmsDownloadReceiver}.
+     *
+     * If the calling app (as identified by the calling UID) currently has any pending download
+     * requests that have not been canceled, the middleware must return
+     * {@link MbmsErrors.DownloadErrors#ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT} here.
+     *
+     * @param subscriptionId The subscription id the download is operating under.
+     * @param rootDirectoryPath The path to the app's temp file root directory.
+     * @return {@link MbmsErrors#SUCCESS},
+     *         {@link MbmsErrors.GeneralErrors#ERROR_MIDDLEWARE_NOT_YET_READY} or
+     *         {@link MbmsErrors.DownloadErrors#ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT}
+     */
+    @Override
+    public int setTempFileRootDirectory(int subscriptionId,
+            String rootDirectoryPath) throws RemoteException {
+        return 0;
+    }
+
+    /**
+     * Issues a request to download a set of files.
+     *
+     * The middleware should expect that {@link #setTempFileRootDirectory(int, String)} has been
+     * called for this app between when the app was installed and when this method is called. If
+     * this is not the case, an {@link IllegalStateException} may be thrown.
+     *
+     * @param downloadRequest An object describing the set of files to be downloaded.
+     * @return Any error from {@link MbmsErrors.GeneralErrors}
+     *         or {@link MbmsErrors#SUCCESS}
+     */
+    @Override
+    public int download(DownloadRequest downloadRequest) throws RemoteException {
+        return 0;
+    }
+
+    /**
+     * Registers a download state callbacks for the provided {@link DownloadRequest}.
+     *
+     * This method is called by the app when it wants to request updates on the progress or
+     * status of the download.
+     *
+     * If the middleware is not aware of a download having been requested with the provided
+     *
+     * {@link DownloadRequest} in the past,
+     * {@link MbmsErrors.DownloadErrors#ERROR_UNKNOWN_DOWNLOAD_REQUEST}
+     * must be returned.
+     *
+     * @param downloadRequest The {@link DownloadRequest} that was used to initiate the download
+     *                        for which progress updates are being requested.
+     * @param callback The callback object to use.
+     */
+    public int registerStateCallback(DownloadRequest downloadRequest,
+            DownloadStateCallback callback) throws RemoteException {
+        return 0;
+    }
+
+    /**
+     * Actual AIDL implementation -- hides the callback AIDL from the API.
+     * @hide
+     */
+    @Override
+    public final int registerStateCallback(final DownloadRequest downloadRequest,
+            final IDownloadStateCallback callback, int flags) throws RemoteException {
+        final int uid = Binder.getCallingUid();
+        DeathRecipient deathRecipient = new DeathRecipient() {
+            @Override
+            public void binderDied() {
+                onAppCallbackDied(uid, downloadRequest.getSubscriptionId());
+                mDownloadCallbackBinderMap.remove(callback.asBinder());
+                mDownloadCallbackDeathRecipients.remove(callback.asBinder());
+            }
+        };
+        mDownloadCallbackDeathRecipients.put(callback.asBinder(), deathRecipient);
+        callback.asBinder().linkToDeath(deathRecipient, 0);
+
+        DownloadStateCallback exposedCallback = new FilteredDownloadStateCallback(callback, flags) {
+            @Override
+            protected void onRemoteException(RemoteException e) {
+                onAppCallbackDied(uid, downloadRequest.getSubscriptionId());
+            }
+        };
+
+        mDownloadCallbackBinderMap.put(callback.asBinder(), exposedCallback);
+
+        return registerStateCallback(downloadRequest, exposedCallback);
+    }
+
+    /**
+     * Un-registers a download state callbacks for the provided {@link DownloadRequest}.
+     *
+     * This method is called by the app when it no longer wants to request updates on the
+     * download.
+     *
+     * If the middleware is not aware of a download having been requested with the provided
+     * {@link DownloadRequest} in the past,
+     * {@link MbmsErrors.DownloadErrors#ERROR_UNKNOWN_DOWNLOAD_REQUEST}
+     * must be returned.
+     *
+     * @param downloadRequest The {@link DownloadRequest} that was used to register the callback
+     * @param callback The callback object that
+     *                 {@link #registerStateCallback(DownloadRequest, DownloadStateCallback)}
+     *                 was called with.
+     */
+    public int unregisterStateCallback(DownloadRequest downloadRequest,
+            DownloadStateCallback callback) throws RemoteException {
+        return 0;
+    }
+
+    /**
+     * Actual AIDL implementation -- hides the callback AIDL from the API.
+     * @hide
+     */
+    @Override
+    public final int unregisterStateCallback(
+            final DownloadRequest downloadRequest, final IDownloadStateCallback callback)
+            throws RemoteException {
+        DeathRecipient deathRecipient =
+                mDownloadCallbackDeathRecipients.remove(callback.asBinder());
+        if (deathRecipient == null) {
+            throw new IllegalArgumentException("Unknown callback");
+        }
+
+        callback.asBinder().unlinkToDeath(deathRecipient, 0);
+
+        DownloadStateCallback exposedCallback =
+                mDownloadCallbackBinderMap.remove(callback.asBinder());
+        if (exposedCallback == null) {
+            throw new IllegalArgumentException("Unknown callback");
+        }
+
+        return unregisterStateCallback(downloadRequest, exposedCallback);
+    }
+
+    /**
+     * Returns a list of pending {@link DownloadRequest}s that originated from the calling
+     * application, identified by its uid. A pending request is one that was issued via
+     * {@link #download(DownloadRequest)} but not cancelled through
+     * {@link #cancelDownload(DownloadRequest)}.
+     * The middleware must return a non-null result synchronously or throw an exception
+     * inheriting from {@link RuntimeException}.
+     * @return A list, possibly empty, of {@link DownloadRequest}s
+     */
+    @Override
+    public @NonNull List<DownloadRequest> listPendingDownloads(int subscriptionId)
             throws RemoteException {
         return null;
     }
 
+    /**
+     * Issues a request to cancel the specified download request.
+     *
+     * If the middleware is unable to cancel the request for whatever reason, it should return
+     * synchronously with an error. If this method returns {@link MbmsErrors#SUCCESS}, the app
+     * will no longer be expecting any more file-completed intents from the middleware for this
+     * {@link DownloadRequest}.
+     * @param downloadRequest The request to cancel
+     * @return {@link MbmsErrors#SUCCESS},
+     *         {@link MbmsErrors.DownloadErrors#ERROR_UNKNOWN_DOWNLOAD_REQUEST},
+     *         {@link MbmsErrors.GeneralErrors#ERROR_MIDDLEWARE_NOT_YET_READY}
+     */
     @Override
     public int cancelDownload(DownloadRequest downloadRequest) throws RemoteException {
         return 0;
     }
 
+    /**
+     * Gets information about the status of a file pending download.
+     *
+     * If the middleware has not yet been properly initialized or if it has no records of the
+     * file indicated by {@code fileInfo} being associated with {@code downloadRequest},
+     * {@link MbmsDownloadSession#STATUS_UNKNOWN} must be returned.
+     *
+     * @param downloadRequest The download request to query.
+     * @param fileInfo The particular file within the request to get information on.
+     * @return The status of the download.
+     */
     @Override
-    public DownloadStatus getDownloadStatus(DownloadRequest downloadRequest)
+    public int getDownloadStatus(DownloadRequest downloadRequest, FileInfo fileInfo)
             throws RemoteException {
-        return null;
+        return 0;
     }
 
+    /**
+     * Resets the middleware's knowledge of previously-downloaded files in this download request.
+     *
+     * When this method is called, the middleware must attempt to re-download all the files
+     * specified by the {@link DownloadRequest}, even if the files have not changed on the server.
+     * In addition, current in-progress downloads must not be interrupted.
+     *
+     * If the middleware is not aware of the specified download request, return
+     * {@link MbmsErrors.DownloadErrors#ERROR_UNKNOWN_DOWNLOAD_REQUEST}.
+     *
+     * @param downloadRequest The request to re-download files for.
+     */
     @Override
-    public void resetDownloadKnowledge(DownloadRequest downloadRequest)
+    public int resetDownloadKnowledge(DownloadRequest downloadRequest)
             throws RemoteException {
+        return 0;
     }
 
+    /**
+     * Signals that the app wishes to dispose of the session identified by the
+     * {@code subscriptionId} argument and the caller's uid. No notification back to the
+     * app is required for this operation, and the corresponding callback provided via
+     * {@link #initialize(int, IMbmsDownloadSessionCallback)} should no longer be used
+     * after this method has been called by the app.
+     *
+     * Any download requests issued by the app should remain in effect until the app calls
+     * {@link #cancelDownload(DownloadRequest)} on another session.
+     *
+     * May throw an {@link IllegalStateException}
+     *
+     * @param subscriptionId The subscription id to use.
+     */
     @Override
-    public void dispose(String appName, int subscriptionId) throws RemoteException {
+    public void dispose(int subscriptionId) throws RemoteException {
+    }
+
+    /**
+     * Indicates that the app identified by the given UID and subscription ID has died.
+     * @param uid the UID of the app, as returned by {@link Binder#getCallingUid()}.
+     * @param subscriptionId The subscription ID the app is using.
+     */
+    public void onAppCallbackDied(int uid, int subscriptionId) {
     }
 }
diff --git a/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java b/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java
index 5b74312..f998f2e 100644
--- a/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java
+++ b/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java
@@ -17,56 +17,112 @@
 package android.telephony.mbms.vendor;
 
 import android.annotation.Nullable;
+import android.annotation.SystemApi;
+import android.content.Intent;
 import android.net.Uri;
+import android.os.Binder;
 import android.os.RemoteException;
-import android.telephony.mbms.IMbmsStreamingManagerCallback;
+import android.telephony.mbms.IMbmsStreamingSessionCallback;
 import android.telephony.mbms.IStreamingServiceCallback;
-import android.telephony.mbms.MbmsException;
+import android.telephony.mbms.MbmsErrors;
+import android.telephony.mbms.MbmsStreamingSessionCallback;
+import android.telephony.mbms.StreamingService;
+import android.telephony.mbms.StreamingServiceCallback;
+import android.telephony.mbms.StreamingServiceInfo;
 
 import java.util.List;
 
 /**
+ * Base class for MBMS streaming services. The middleware should return an instance of this
+ * object from its {@link android.app.Service#onBind(Intent)} method.
  * @hide
- * TODO: future systemapi
  */
+//@SystemApi
 public class MbmsStreamingServiceBase extends IMbmsStreamingService.Stub {
     /**
      * Initialize streaming service for this app and subId, registering the listener.
      *
-     * May throw an {@link IllegalArgumentException} or a {@link SecurityException}
+     * May throw an {@link IllegalArgumentException} or a {@link SecurityException}, which
+     * will be intercepted and passed to the app as
+     * {@link MbmsErrors.InitializationErrors#ERROR_UNABLE_TO_INITIALIZE}
      *
-     * @param listener The callback to use to communicate with the app.
-     * @param appName The app name as negotiated with the wireless carrier.
+     * May return any value from {@link MbmsErrors.InitializationErrors}
+     * or {@link MbmsErrors#SUCCESS}. Non-successful error codes will be passed to the app via
+     * {@link IMbmsStreamingSessionCallback#onError(int, String)}.
+     *
+     * @param callback The callback to use to communicate with the app.
      * @param subscriptionId The subscription ID to use.
-     * @return {@link MbmsException#SUCCESS} or {@link MbmsException#ERROR_ALREADY_INITIALIZED}
      */
-    @Override
-    public int initialize(IMbmsStreamingManagerCallback listener, String appName,
-            int subscriptionId) throws RemoteException {
+    public int initialize(MbmsStreamingSessionCallback callback, int subscriptionId)
+            throws RemoteException {
         return 0;
     }
 
     /**
+     * Actual AIDL implementation that hides the callback AIDL from the middleware.
+     * @hide
+     */
+    @Override
+    public final int initialize(final IMbmsStreamingSessionCallback callback,
+            final int subscriptionId) throws RemoteException {
+        final int uid = Binder.getCallingUid();
+        callback.asBinder().linkToDeath(new DeathRecipient() {
+            @Override
+            public void binderDied() {
+                onAppCallbackDied(uid, subscriptionId);
+            }
+        }, 0);
+
+        return initialize(new MbmsStreamingSessionCallback() {
+            @Override
+            public void onError(final int errorCode, final String message) {
+                try {
+                    callback.onError(errorCode, message);
+                } catch (RemoteException e) {
+                    onAppCallbackDied(uid, subscriptionId);
+                }
+            }
+
+            @Override
+            public void onStreamingServicesUpdated(final List<StreamingServiceInfo> services) {
+                try {
+                    callback.onStreamingServicesUpdated(services);
+                } catch (RemoteException e) {
+                    onAppCallbackDied(uid, subscriptionId);
+                }
+            }
+
+            @Override
+            public void onMiddlewareReady() {
+                try {
+                    callback.onMiddlewareReady();
+                } catch (RemoteException e) {
+                    onAppCallbackDied(uid, subscriptionId);
+                }
+            }
+        }, subscriptionId);
+    }
+
+
+    /**
      * Registers serviceClasses of interest with the appName/subId key.
      * Starts async fetching data on streaming services of matching classes to be reported
-     * later via {@link IMbmsStreamingManagerCallback#streamingServicesUpdated(List)}
+     * later via {@link IMbmsStreamingSessionCallback#onStreamingServicesUpdated(List)}
      *
-     * Note that subsequent calls with the same uid, appName and subId will replace
+     * Note that subsequent calls with the same uid and subId will replace
      * the service class list.
      *
      * May throw an {@link IllegalArgumentException} or an {@link IllegalStateException}
      *
-     * @param appName The app name as negotiated with the wireless carrier.
      * @param subscriptionId The subscription id to use.
      * @param serviceClasses The service classes that the app wishes to get info on. The strings
      *                       may contain arbitrary data as negotiated between the app and the
      *                       carrier.
-     * @return One of {@link MbmsException#SUCCESS},
-     *         {@link MbmsException#ERROR_MIDDLEWARE_NOT_BOUND},
-     *         {@link MbmsException#ERROR_CONCURRENT_SERVICE_LIMIT_REACHED}
+     * @return {@link MbmsErrors#SUCCESS} or any of the errors in
+     * {@link MbmsErrors.GeneralErrors}
      */
     @Override
-    public int getStreamingServices(String appName, int subscriptionId,
+    public int requestUpdateStreamingServices(int subscriptionId,
             List<String> serviceClasses) throws RemoteException {
         return 0;
     }
@@ -74,20 +130,83 @@
     /**
      * Starts streaming on a particular service. This method may perform asynchronous work. When
      * the middleware is ready to send bits to the frontend, it should inform the app via
-     * {@link IStreamingServiceCallback#streamStateChanged(int)}.
+     * {@link IStreamingServiceCallback#onStreamStateUpdated(int, int)}.
      *
      * May throw an {@link IllegalArgumentException} or an {@link IllegalStateException}
      *
-     * @param appName The app name as negotiated with the wireless carrier.
      * @param subscriptionId The subscription id to use.
      * @param serviceId The ID of the streaming service that the app has requested.
-     * @param listener The listener object on which the app wishes to receive updates.
-     * @return TODO: document possible errors
+     * @param callback The callback object on which the app wishes to receive updates.
+     * @return Any error in {@link MbmsErrors.GeneralErrors}
+     */
+    public int startStreaming(int subscriptionId, String serviceId,
+            StreamingServiceCallback callback) throws RemoteException {
+        return 0;
+    }
+
+    /**
+     * Actual AIDL implementation of startStreaming that hides the callback AIDL from the
+     * middleware.
+     * @hide
      */
     @Override
-    public int startStreaming(String appName, int subscriptionId,
-            String serviceId, IStreamingServiceCallback listener) throws RemoteException {
-        return 0;
+    public int startStreaming(final int subscriptionId, String serviceId,
+            final IStreamingServiceCallback callback) throws RemoteException {
+        final int uid = Binder.getCallingUid();
+        callback.asBinder().linkToDeath(new DeathRecipient() {
+            @Override
+            public void binderDied() {
+                onAppCallbackDied(uid, subscriptionId);
+            }
+        }, 0);
+
+        return startStreaming(subscriptionId, serviceId, new StreamingServiceCallback() {
+            @Override
+            public void onError(final int errorCode, final String message) {
+                try {
+                    callback.onError(errorCode, message);
+                } catch (RemoteException e) {
+                    onAppCallbackDied(uid, subscriptionId);
+                }
+            }
+
+            @Override
+            public void onStreamStateUpdated(@StreamingService.StreamingState final int state,
+                    @StreamingService.StreamingStateChangeReason final int reason) {
+                try {
+                    callback.onStreamStateUpdated(state, reason);
+                } catch (RemoteException e) {
+                    onAppCallbackDied(uid, subscriptionId);
+                }
+            }
+
+            @Override
+            public void onMediaDescriptionUpdated() {
+                try {
+                    callback.onMediaDescriptionUpdated();
+                } catch (RemoteException e) {
+                    onAppCallbackDied(uid, subscriptionId);
+                }
+            }
+
+            @Override
+            public void onBroadcastSignalStrengthUpdated(final int signalStrength) {
+                try {
+                    callback.onBroadcastSignalStrengthUpdated(signalStrength);
+                } catch (RemoteException e) {
+                    onAppCallbackDied(uid, subscriptionId);
+                }
+            }
+
+            @Override
+            public void onStreamMethodUpdated(final int methodType) {
+                try {
+                    callback.onStreamMethodUpdated(methodType);
+                } catch (RemoteException e) {
+                    onAppCallbackDied(uid, subscriptionId);
+                }
+            }
+        });
     }
 
     /**
@@ -96,13 +215,12 @@
      *
      * May throw an {@link IllegalArgumentException} or an {@link IllegalStateException}
      *
-     * @param appName The app name as negotiated with the wireless carrier.
      * @param subscriptionId The subscription id to use.
      * @param serviceId The ID of the streaming service that the app has requested.
      * @return An opaque {@link Uri} to be passed to a video player that understands the format.
      */
     @Override
-    public @Nullable Uri getPlaybackUri(String appName, int subscriptionId, String serviceId)
+    public @Nullable Uri getPlaybackUri(int subscriptionId, String serviceId)
             throws RemoteException {
         return null;
     }
@@ -110,41 +228,42 @@
     /**
      * Stop streaming the stream identified by {@code serviceId}. Notification of the resulting
      * stream state change should be reported to the app via
-     * {@link IStreamingServiceCallback#streamStateChanged(int)}.
-     * @param appName The app name as negotiated with the wireless carrier.
+     * {@link IStreamingServiceCallback#onStreamStateUpdated(int, int)}.
+     *
+     * In addition, the callback provided via
+     * {@link #startStreaming(int, String, IStreamingServiceCallback)} should no longer be
+     * used after this method has called by the app.
+     *
+     * May throw an {@link IllegalArgumentException} or an {@link IllegalStateException}
+     *
      * @param subscriptionId The subscription id to use.
      * @param serviceId The ID of the streaming service that the app wishes to stop.
      */
     @Override
-    public void stopStreaming(String appName, int subscriptionId, String serviceId)
+    public void stopStreaming(int subscriptionId, String serviceId)
             throws RemoteException {
     }
 
     /**
-     * Dispose of the stream identified by {@code serviceId} for the app identified by the
-     * {@code appName} and {@code subscriptionId} arguments along with the caller's uid.
-     * No notification back to the app is required for this operation, and the callback provided via
-     * {@link #startStreaming(String, int, String, IStreamingServiceCallback)} should no longer be
-     * used after this method has called by the app.
-     * @param appName The app name as negotiated with the wireless carrier.
-     * @param subscriptionId The subscription id to use.
-     * @param serviceId The ID of the streaming service that the app wishes to dispose of.
-     */
-    @Override
-    public void disposeStream(String appName, int subscriptionId, String serviceId)
-            throws RemoteException {
-    }
-
-    /**
-     * Signals that the app wishes to dispose of the session identified by the {@code appName} and
-     * {@code subscriptionId} arguments, as well as the caller's uid. No notification back to the
+     * Signals that the app wishes to dispose of the session identified by the
+     * {@code subscriptionId} argument and the caller's uid. No notification back to the
      * app is required for this operation, and the corresponding callback provided via
-     * {@link #initialize(IMbmsStreamingManagerCallback, String, int)} should no longer be used
+     * {@link #initialize(IMbmsStreamingSessionCallback, int)} should no longer be used
      * after this method has been called by the app.
-     * @param appName The app name as negotiated with the wireless carrier.
+     *
+     * May throw an {@link IllegalStateException}
+     *
      * @param subscriptionId The subscription id to use.
      */
     @Override
-    public void dispose(String appName, int subscriptionId) throws RemoteException {
+    public void dispose(int subscriptionId) throws RemoteException {
+    }
+
+    /**
+     * Indicates that the app identified by the given UID and subscription ID has died.
+     * @param uid the UID of the app, as returned by {@link Binder#getCallingUid()}.
+     * @param subscriptionId The subscription ID the app is using.
+     */
+    public void onAppCallbackDied(int uid, int subscriptionId) {
     }
 }
diff --git a/telephony/java/android/telephony/mbms/vendor/VendorUtils.java b/telephony/java/android/telephony/mbms/vendor/VendorUtils.java
new file mode 100644
index 0000000..e3abe2c
--- /dev/null
+++ b/telephony/java/android/telephony/mbms/vendor/VendorUtils.java
@@ -0,0 +1,157 @@
+/*
+ * 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.telephony.mbms.vendor;
+
+import android.annotation.SystemApi;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ResolveInfo;
+import android.net.Uri;
+import android.telephony.MbmsDownloadSession;
+import android.telephony.mbms.MbmsDownloadReceiver;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * Contains constants and utility methods for MBMS Download middleware apps to communicate with
+ * frontend apps.
+ * @hide
+ */
+//@SystemApi
+public class VendorUtils {
+
+    /**
+     * The MBMS middleware should send this when a download of single file has completed or
+     * failed. The only mandatory extra is
+     * {@link MbmsDownloadSession#EXTRA_MBMS_DOWNLOAD_RESULT}
+     * and the following are required when the download has completed:
+     * {@link MbmsDownloadSession#EXTRA_MBMS_FILE_INFO}
+     * {@link MbmsDownloadSession#EXTRA_MBMS_DOWNLOAD_REQUEST}
+     * {@link #EXTRA_TEMP_LIST}
+     * {@link #EXTRA_FINAL_URI}
+     */
+    public static final String ACTION_DOWNLOAD_RESULT_INTERNAL =
+            "android.telephony.mbms.action.DOWNLOAD_RESULT_INTERNAL";
+
+    /**
+     * The MBMS middleware should send this when it wishes to request {@code content://} URIs to
+     * serve as temp files for downloads or when it wishes to resume paused downloads. Mandatory
+     * extras are
+     * {@link #EXTRA_SERVICE_ID}
+     *
+     * Optional extras are
+     * {@link #EXTRA_FD_COUNT} (0 if not present)
+     * {@link #EXTRA_PAUSED_LIST} (empty if not present)
+     */
+    public static final String ACTION_FILE_DESCRIPTOR_REQUEST =
+            "android.telephony.mbms.action.FILE_DESCRIPTOR_REQUEST";
+
+    /**
+     * The MBMS middleware should send this when it wishes to clean up temp  files in the app's
+     * filesystem. Mandatory extras are:
+     * {@link #EXTRA_TEMP_FILES_IN_USE}
+     */
+    public static final String ACTION_CLEANUP =
+            "android.telephony.mbms.action.CLEANUP";
+
+    /**
+     * Extra containing a {@link List} of {@link Uri}s that were used as temp files for this
+     * completed file. These {@link Uri}s should have scheme {@code file://}, and the temp
+     * files will be deleted upon receipt of the intent.
+     * May be null.
+     */
+    public static final String EXTRA_TEMP_LIST = "android.telephony.mbms.extra.TEMP_LIST";
+
+    /**
+     * Extra containing an integer indicating the number of temp files requested.
+     */
+    public static final String EXTRA_FD_COUNT = "android.telephony.mbms.extra.FD_COUNT";
+
+    /**
+     * Extra containing a list of {@link Uri}s that the middleware is requesting access to via
+     * {@link #ACTION_FILE_DESCRIPTOR_REQUEST} in order to resume downloading. These {@link Uri}s
+     * should have scheme {@code file://}.
+     */
+    public static final String EXTRA_PAUSED_LIST = "android.telephony.mbms.extra.PAUSED_LIST";
+
+    /**
+     * Extra containing a list of {@link android.telephony.mbms.UriPathPair}s, used in the
+     * response to {@link #ACTION_FILE_DESCRIPTOR_REQUEST}. These are temp files that are meant
+     * to be used for new file downloads.
+     */
+    public static final String EXTRA_FREE_URI_LIST = "android.telephony.mbms.extra.FREE_URI_LIST";
+
+    /**
+     * Extra containing a list of {@link android.telephony.mbms.UriPathPair}s, used in the
+     * response to {@link #ACTION_FILE_DESCRIPTOR_REQUEST}. These
+     * {@link android.telephony.mbms.UriPathPair}s contain {@code content://} URIs that provide
+     * access to previously paused downloads.
+     */
+    public static final String EXTRA_PAUSED_URI_LIST =
+            "android.telephony.mbms.extra.PAUSED_URI_LIST";
+
+    /**
+     * Extra containing a string that points to the middleware's knowledge of where the temp file
+     * root for the app is. The path should be a canonical path as returned by
+     * {@link File#getCanonicalPath()}
+     */
+    public static final String EXTRA_TEMP_FILE_ROOT =
+            "android.telephony.mbms.extra.TEMP_FILE_ROOT";
+
+    /**
+     * Extra containing a list of {@link Uri}s indicating temp files which the middleware is
+     * still using.
+     */
+    public static final String EXTRA_TEMP_FILES_IN_USE =
+            "android.telephony.mbms.extra.TEMP_FILES_IN_USE";
+
+    /**
+     * Extra containing a single {@link Uri} indicating the path to the temp file in which the
+     * decoded downloaded file resides. Must not be null.
+     */
+    public static final String EXTRA_FINAL_URI = "android.telephony.mbms.extra.FINAL_URI";
+
+    /**
+     * Extra containing a String representing a service ID, used by
+     * file-descriptor requests and cleanup requests to specify which service they want to
+     * request temp files or clean up temp files for, respectively.
+     */
+    public static final String EXTRA_SERVICE_ID =
+            "android.telephony.mbms.extra.SERVICE_ID";
+
+    /**
+     * Retrieves the {@link ComponentName} for the {@link android.content.BroadcastReceiver} that
+     * the various intents from the middleware should be targeted towards.
+     * @param packageName The package name of the app.
+     * @return The component name of the receiver that the middleware should send its intents to,
+     * or null if the app didn't declare it in the manifest.
+     */
+    public static ComponentName getAppReceiverFromPackageName(Context context, String packageName) {
+        ComponentName candidate = new ComponentName(packageName,
+                MbmsDownloadReceiver.class.getCanonicalName());
+        Intent queryIntent = new Intent();
+        queryIntent.setComponent(candidate);
+        List<ResolveInfo> receivers =
+                context.getPackageManager().queryBroadcastReceivers(queryIntent, 0);
+        if (receivers != null && receivers.size() > 0) {
+            return candidate;
+        }
+        return null;
+    }
+}
diff --git a/telephony/java/com/android/ims/ImsConferenceState.java b/telephony/java/com/android/ims/ImsConferenceState.java
index c57ef98..0afde88 100644
--- a/telephony/java/com/android/ims/ImsConferenceState.java
+++ b/telephony/java/com/android/ims/ImsConferenceState.java
@@ -79,6 +79,8 @@
     public static final String STATUS_DISCONNECTED = "disconnected";
     public static final String STATUS_MUTED_VIA_FOCUS = "muted-via-focus";
     public static final String STATUS_CONNECT_FAIL = "connect-fail";
+    public static final String STATUS_SEND_ONLY = "sendonly";
+    public static final String STATUS_SEND_RECV = "sendrecv";
 
     /**
      * conference-info : SIP status code (integer)
@@ -156,15 +158,53 @@
         } else if (status.equals(STATUS_ALERTING) ||
                 status.equals(STATUS_DIALING_OUT)) {
             return Connection.STATE_DIALING;
-        } else if (status.equals(STATUS_ON_HOLD)) {
+        } else if (status.equals(STATUS_ON_HOLD) ||
+                status.equals(STATUS_SEND_ONLY)) {
             return Connection.STATE_HOLDING;
         } else if (status.equals(STATUS_CONNECTED) ||
                 status.equals(STATUS_MUTED_VIA_FOCUS) ||
-                status.equals(STATUS_DISCONNECTING)) {
+                status.equals(STATUS_DISCONNECTING) ||
+                status.equals(STATUS_SEND_RECV)) {
             return Connection.STATE_ACTIVE;
         } else if (status.equals(STATUS_DISCONNECTED)) {
             return Connection.STATE_DISCONNECTED;
         }
         return Call.STATE_ACTIVE;
     }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("[");
+        sb.append(ImsConferenceState.class.getSimpleName());
+        sb.append(" ");
+        if (mParticipants.size() > 0) {
+            Set<Entry<String, Bundle>> entries = mParticipants.entrySet();
+
+            if (entries != null) {
+                Iterator<Entry<String, Bundle>> iterator = entries.iterator();
+                sb.append("<");
+                while (iterator.hasNext()) {
+                    Entry<String, Bundle> entry = iterator.next();
+                    sb.append(entry.getKey());
+                    sb.append(": ");
+                    Bundle participantData = entry.getValue();
+
+                    for (String key : participantData.keySet()) {
+                        sb.append(key);
+                        sb.append("=");
+                        if (ENDPOINT.equals(key) || USER.equals(key)) {
+                            sb.append(android.telecom.Log.pii(participantData.get(key)));
+                        } else {
+                            sb.append(participantData.get(key));
+                        }
+                        sb.append(", ");
+                    }
+                }
+                sb.append(">");
+            }
+        }
+        sb.append("]");
+        return sb.toString();
+    }
 }
diff --git a/telephony/java/com/android/ims/ImsConfig.java b/telephony/java/com/android/ims/ImsConfig.java
index e7b22bd..cf4c47b 100644
--- a/telephony/java/com/android/ims/ImsConfig.java
+++ b/telephony/java/com/android/ims/ImsConfig.java
@@ -524,6 +524,7 @@
     * Defines IMS feature value.
     */
     public static class FeatureValueConstants {
+        public static final int ERROR = -1;
         public static final int OFF = 0;
         public static final int ON = 1;
     }
diff --git a/telephony/java/com/android/internal/telephony/DctConstants.java b/telephony/java/com/android/internal/telephony/DctConstants.java
index 256e13b..91032f3 100644
--- a/telephony/java/com/android/internal/telephony/DctConstants.java
+++ b/telephony/java/com/android/internal/telephony/DctConstants.java
@@ -107,6 +107,7 @@
     public static final int EVENT_PCO_DATA_RECEIVED = BASE + 45;
     public static final int EVENT_SET_CARRIER_DATA_ENABLED = BASE + 46;
     public static final int EVENT_DATA_RECONNECT = BASE + 47;
+    public static final int EVENT_ROAMING_SETTING_CHANGE = BASE + 48;
 
     /***** Constants *****/
 
diff --git a/telephony/java/com/android/internal/telephony/ExponentialBackoff.java b/telephony/java/com/android/internal/telephony/ExponentialBackoff.java
new file mode 100644
index 0000000..80958c0
--- /dev/null
+++ b/telephony/java/com/android/internal/telephony/ExponentialBackoff.java
@@ -0,0 +1,84 @@
+/*
+ * 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.internal.telephony;
+
+import android.annotation.NonNull;
+import android.os.Handler;
+import android.os.Looper;
+
+/** The implementation of exponential backoff with jitter applied. */
+public class ExponentialBackoff {
+    private int mRetryCounter;
+    private long mStartDelayMs;
+    private long mMaximumDelayMs;
+    private long mCurrentDelayMs;
+    private int mMultiplier;
+    private Runnable mRunnable;
+    private Handler mHandler;
+
+    public ExponentialBackoff(
+            long initialDelayMs,
+            long maximumDelayMs,
+            int multiplier,
+            @NonNull Looper looper,
+            @NonNull Runnable runnable) {
+        this(initialDelayMs, maximumDelayMs, multiplier, new Handler(looper), runnable);
+    }
+
+    public ExponentialBackoff(
+            long initialDelayMs,
+            long maximumDelayMs,
+            int multiplier,
+            @NonNull Handler handler,
+            @NonNull Runnable runnable) {
+        mRetryCounter = 0;
+        mStartDelayMs = initialDelayMs;
+        mMaximumDelayMs = maximumDelayMs;
+        mMultiplier = multiplier;
+        mHandler = handler;
+        mRunnable = runnable;
+    }
+
+    /** Starts the backoff, the runnable will be executed after {@link #mStartDelayMs}. */
+    public void start() {
+        mRetryCounter = 0;
+        mCurrentDelayMs = mStartDelayMs;
+        mHandler.removeCallbacks(mRunnable);
+        mHandler.postDelayed(mRunnable, mCurrentDelayMs);
+    }
+
+    /** Stops the backoff, all pending messages will be removed from the message queue. */
+    public void stop() {
+        mRetryCounter = 0;
+        mHandler.removeCallbacks(mRunnable);
+    }
+
+    /** Should call when the retry action has failed and we want to retry after a longer delay. */
+    public void notifyFailed() {
+        mRetryCounter++;
+        long temp = Math.min(
+                mMaximumDelayMs, (long) (mStartDelayMs * Math.pow(mMultiplier, mRetryCounter)));
+        mCurrentDelayMs = (long) (((1 + Math.random()) / 2) * temp);
+        mHandler.removeCallbacks(mRunnable);
+        mHandler.postDelayed(mRunnable, mCurrentDelayMs);
+    }
+
+    /** Returns the delay for the most recently posted message. */
+    public long getCurrentDelay() {
+        return mCurrentDelayMs;
+    }
+}
diff --git a/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl b/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl
index d77b27f..5115731 100644
--- a/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl
+++ b/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl
@@ -28,4 +28,7 @@
     void notifyConfigChangedForSubId(int subId);
 
     void updateConfigForPhoneId(int phoneId, String simState);
+
+    String getDefaultCarrierServicePackageName();
+
 }
diff --git a/test-runner/Android.mk b/test-runner/Android.mk
index 0752661..060a518 100644
--- a/test-runner/Android.mk
+++ b/test-runner/Android.mk
@@ -16,23 +16,142 @@
 
 LOCAL_PATH:= $(call my-dir)
 
+android_test_mock_source_files := $(call all-java-files-under, src/android/test/mock)
+
 # Build the android.test.runner library
 # =====================================
 include $(CLEAR_VARS)
 
+LOCAL_SRC_FILES := \
+    $(filter-out $(android_test_mock_source_files), $(call all-java-files-under, src))
+
+LOCAL_JAVA_LIBRARIES := \
+    core-oj \
+    core-libart \
+    framework \
+    legacy-test \
+    android.test.mock \
+
+LOCAL_MODULE:= android.test.runner
+
+include $(BUILD_JAVA_LIBRARY)
+
+# Build the repackaged.android.test.runner library
+# ================================================
+include $(CLEAR_VARS)
+
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_JAVA_LIBRARIES := core-oj core-libart framework legacy-test
 
-LOCAL_MODULE:= android.test.runner
+LOCAL_JARJAR_RULES := $(LOCAL_PATH)/../legacy-test/jarjar-rules.txt
 
-include $(BUILD_JAVA_LIBRARY)
+LOCAL_MODULE:= repackaged.android.test.runner
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+# Generate the stub source files for android.test.runner.stubs
+# ============================================================
+include $(CLEAR_VARS)
+
+# Exclude android.test.mock classes as stubs for them are created in the
+# android.test.mock.stubs target
+LOCAL_SRC_FILES := \
+    $(filter-out $(android_test_mock_source_files), $(call all-java-files-under, src))
+
+LOCAL_JAVA_LIBRARIES := \
+    core-oj \
+    core-libart \
+    framework \
+    legacy-test \
+    android.test.mock \
+
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+LOCAL_DROIDDOC_SOURCE_PATH := $(LOCAL_PATH)/src
+
+ANDROID_TEST_RUNNER_OUTPUT_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/android.test.runner.stubs_intermediates/api.txt
+ANDROID_TEST_RUNNER_OUTPUT_REMOVED_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/android.test.runner.stubs_intermediates/removed.txt
+
+ANDROID_TEST_RUNNER_API_FILE := $(LOCAL_PATH)/api/android-test-runner-current.txt
+ANDROID_TEST_RUNNER_REMOVED_API_FILE := $(LOCAL_PATH)/api/android-test-runner-removed.txt
+
+LOCAL_DROIDDOC_OPTIONS:= \
+    -stubpackages android.test:android.test.suitebuilder:junit.runner:junit.textui \
+    -stubsourceonly \
+    -stubs $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/android.test.runner.stubs_intermediates/src \
+    -nodocs \
+    -api $(ANDROID_TEST_RUNNER_OUTPUT_API_FILE) \
+    -removedApi $(ANDROID_TEST_RUNNER_OUTPUT_REMOVED_API_FILE) \
+
+LOCAL_UNINSTALLABLE_MODULE := true
+LOCAL_MODULE := android-test-runner-api-stubs-gen
+
+include $(BUILD_DROIDDOC)
+
+# Remember the target that will trigger the code generation.
+android_test_runner_api_gen_stamp := $(full_target)
+
+# Add some additional dependencies
+$(ANDROID_TEST_RUNNER_OUTPUT_API_FILE): $(full_target)
+$(ANDROID_TEST_RUNNER_OUTPUT_REMOVED_API_FILE): $(full_target)
+
+# Build the android.test.runner.stubs library
+# ===========================================
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := android.test.runner.stubs
+
+LOCAL_JAVA_LIBRARIES := \
+    legacy.test.stubs \
+    android.test.mock.stubs \
+
+LOCAL_SOURCE_FILES_ALL_GENERATED := true
+
+# Make sure to run droiddoc first to generate the stub source files.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(android_test_runner_api_gen_stamp)
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+# Archive a copy of the classes.jar in SDK build.
+$(call dist-for-goals,sdk win_sdk,$(full_classes_jar):android.test.runner.stubs.jar)
+
+# Check that the android.test.runner.stubs library has not changed
+# ================================================================
+
+# Check that the API we're building hasn't changed from the not-yet-released
+# SDK version.
+$(eval $(call check-api, \
+    check-android-test-runner-api-current, \
+    $(ANDROID_TEST_RUNNER_API_FILE), \
+    $(ANDROID_TEST_RUNNER_OUTPUT_API_FILE), \
+    $(ANDROID_TEST_RUNNER_REMOVED_API_FILE), \
+    $(ANDROID_TEST_RUNNER_OUTPUT_REMOVED_API_FILE), \
+    -error 2 -error 3 -error 4 -error 5 -error 6 \
+    -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
+    -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \
+    -error 25 -error 26 -error 27, \
+    cat $(LOCAL_PATH)/api/apicheck_msg_android_test_runner.txt, \
+    check-android-test-runner-api, \
+    $(call doc-timestamp-for,android-test-runner-api-stubs-gen) \
+    ))
+
+.PHONY: check-android-test-runner-api
+checkapi: check-android-test-runner-api
+
+.PHONY: update-android-test-runner-api
+update-api: update-android-test-runner-api
+
+update-android-test-runner-api: $(ANDROID_TEST_RUNNER_OUTPUT_API_FILE) | $(ACP)
+	@echo Copying current.txt
+	$(hide) $(ACP) $(ANDROID_TEST_RUNNER_OUTPUT_API_FILE) $(ANDROID_TEST_RUNNER_API_FILE)
+	@echo Copying removed.txt
+	$(hide) $(ACP) $(ANDROID_TEST_RUNNER_OUTPUT_REMOVED_API_FILE) $(ANDROID_TEST_RUNNER_REMOVED_API_FILE)
 
 # Build the android.test.mock library
 # ===================================
 include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES := $(call all-java-files-under, src/android/test/mock)
+LOCAL_SRC_FILES := $(android_test_mock_source_files)
 
 LOCAL_JAVA_LIBRARIES := core-oj core-libart framework
 
@@ -40,44 +159,97 @@
 
 include $(BUILD_JAVA_LIBRARY)
 
-# Generate the stub source files for android.test.mock.sdk
-# ========================================================
+# Generate the stub source files for android.test.mock.stubs
+# ==========================================================
 include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(call all-java-files-under, src/android/test/mock)
+LOCAL_SRC_FILES := $(android_test_mock_source_files)
 
 LOCAL_JAVA_LIBRARIES := core-oj core-libart framework
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 LOCAL_DROIDDOC_SOURCE_PATH := $(LOCAL_PATH)/src/android/test/mock
 
+ANDROID_TEST_MOCK_OUTPUT_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/android.test.mock.stubs_intermediates/api.txt
+ANDROID_TEST_MOCK_OUTPUT_REMOVED_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/android.test.mock.stubs_intermediates/removed.txt
+
+ANDROID_TEST_MOCK_API_FILE := $(LOCAL_PATH)/api/android-test-mock-current.txt
+ANDROID_TEST_MOCK_REMOVED_API_FILE := $(LOCAL_PATH)/api/android-test-mock-removed.txt
+
 LOCAL_DROIDDOC_OPTIONS:= \
     -stubpackages android.test.mock \
-    -stubs $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/android.test.mock.sdk_intermediates/src \
-    -nodocs
+    -stubs $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/android.test.mock.stubs_intermediates/src \
+    -nodocs \
+    -api $(ANDROID_TEST_MOCK_OUTPUT_API_FILE) \
+    -removedApi $(ANDROID_TEST_MOCK_OUTPUT_REMOVED_API_FILE) \
 
 LOCAL_UNINSTALLABLE_MODULE := true
-LOCAL_MODULE := android-test-mock-stubs-gen
+LOCAL_MODULE := android-test-mock-api-stubs-gen
 
 include $(BUILD_DROIDDOC)
 
 # Remember the target that will trigger the code generation.
 android_test_mock_gen_stamp := $(full_target)
 
+# Add some additional dependencies
+$(ANDROID_TEST_MOCK_OUTPUT_API_FILE): $(full_target)
+$(ANDROID_TEST_MOCK_OUTPUT_REMOVED_API_FILE): $(full_target)
+
+# Build the android.test.mock.stubs library
+# =========================================
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := android.test.mock.stubs
+
+LOCAL_SOURCE_FILES_ALL_GENERATED := true
+
+# Make sure to run droiddoc first to generate the stub source files.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(android_test_mock_gen_stamp)
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+# Archive a copy of the classes.jar in SDK build.
+$(call dist-for-goals,sdk win_sdk,$(full_classes_jar):android.test.mock.stubs.jar)
+
+# Check that the android.test.mock.stubs library has not changed
+# ==============================================================
+
+# Check that the API we're building hasn't changed from the not-yet-released
+# SDK version.
+$(eval $(call check-api, \
+    check-android-test-mock-api-current, \
+    $(ANDROID_TEST_MOCK_API_FILE), \
+    $(ANDROID_TEST_MOCK_OUTPUT_API_FILE), \
+    $(ANDROID_TEST_MOCK_REMOVED_API_FILE), \
+    $(ANDROID_TEST_MOCK_OUTPUT_REMOVED_API_FILE), \
+    -error 2 -error 3 -error 4 -error 5 -error 6 \
+    -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
+    -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \
+    -error 25 -error 26 -error 27, \
+    cat $(LOCAL_PATH)/api/apicheck_msg_android_test_mock.txt, \
+    check-android-test-mock-api, \
+    $(call doc-timestamp-for,android-test-mock-api-stubs-gen) \
+    ))
+
+.PHONY: check-android-test-mock-api
+checkapi: check-android-test-mock-api
+
+.PHONY: update-android-test-mock-api
+update-api: update-android-test-mock-api
+
+update-android-test-mock-api: $(ANDROID_TEST_MOCK_OUTPUT_API_FILE) | $(ACP)
+	@echo Copying current.txt
+	$(hide) $(ACP) $(ANDROID_TEST_MOCK_OUTPUT_API_FILE) $(ANDROID_TEST_MOCK_API_FILE)
+	@echo Copying removed.txt
+	$(hide) $(ACP) $(ANDROID_TEST_MOCK_OUTPUT_REMOVED_API_FILE) $(ANDROID_TEST_MOCK_REMOVED_API_FILE)
+
 # Build the android.test.mock.sdk library
 # =======================================
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := android.test.mock.sdk
 
-LOCAL_SOURCE_FILES_ALL_GENERATED := true
+LOCAL_STATIC_JAVA_LIBRARIES := android.test.mock.stubs
 
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
-# Make sure to run droiddoc first to generate the stub source files.
-$(full_classes_compiled_jar) : $(android_test_mock_gen_stamp)
-$(full_classes_jack) : $(android_test_mock_gen_stamp)
-
-# Archive a copy of the classes.jar in SDK build.
-$(call dist-for-goals,sdk win_sdk,$(full_classes_jar):android.test.mock.jar)
-
 # additionally, build unit tests in a separate .apk
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/test-runner/api/android-test-mock-current.txt b/test-runner/api/android-test-mock-current.txt
new file mode 100644
index 0000000..93bbf6c
--- /dev/null
+++ b/test-runner/api/android-test-mock-current.txt
@@ -0,0 +1,414 @@
+package android.test.mock {
+
+  public deprecated class MockApplication extends android.app.Application {
+    ctor public MockApplication();
+  }
+
+  public class MockContentProvider extends android.content.ContentProvider {
+    ctor protected MockContentProvider();
+    ctor public MockContentProvider(android.content.Context);
+    ctor public MockContentProvider(android.content.Context, java.lang.String, java.lang.String, android.content.pm.PathPermission[]);
+    method public android.content.ContentProviderResult[] applyBatch(java.util.ArrayList<android.content.ContentProviderOperation>);
+    method public int delete(android.net.Uri, java.lang.String, java.lang.String[]);
+    method public java.lang.String getType(android.net.Uri);
+    method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public boolean onCreate();
+    method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle);
+    method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+    method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
+  }
+
+  public class MockContentResolver extends android.content.ContentResolver {
+    ctor public MockContentResolver();
+    ctor public MockContentResolver(android.content.Context);
+    method protected android.content.IContentProvider acquireProvider(android.content.Context, java.lang.String);
+    method protected android.content.IContentProvider acquireUnstableProvider(android.content.Context, java.lang.String);
+    method public void addProvider(java.lang.String, android.content.ContentProvider);
+    method public boolean releaseProvider(android.content.IContentProvider);
+    method public boolean releaseUnstableProvider(android.content.IContentProvider);
+    method public void unstableProviderDied(android.content.IContentProvider);
+  }
+
+  public class MockContext extends android.content.Context {
+    ctor public MockContext();
+    method public boolean bindService(android.content.Intent, android.content.ServiceConnection, int);
+    method public boolean canLoadUnsafeResources();
+    method public int checkCallingOrSelfPermission(java.lang.String);
+    method public int checkCallingOrSelfUriPermission(android.net.Uri, int);
+    method public int checkCallingPermission(java.lang.String);
+    method public int checkCallingUriPermission(android.net.Uri, int);
+    method public int checkPermission(java.lang.String, int, int);
+    method public int checkPermission(java.lang.String, int, int, android.os.IBinder);
+    method public int checkSelfPermission(java.lang.String);
+    method public int checkUriPermission(android.net.Uri, int, int, int);
+    method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int);
+    method public int checkUriPermission(android.net.Uri, int, int, int, android.os.IBinder);
+    method public void clearWallpaper();
+    method public android.content.Context createApplicationContext(android.content.pm.ApplicationInfo, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.Context createConfigurationContext(android.content.res.Configuration);
+    method public android.content.Context createContextForSplit(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.Context createCredentialProtectedStorageContext();
+    method public android.content.Context createDeviceProtectedStorageContext();
+    method public android.content.Context createDisplayContext(android.view.Display);
+    method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.Context createPackageContextAsUser(java.lang.String, int, android.os.UserHandle) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public java.lang.String[] databaseList();
+    method public boolean deleteDatabase(java.lang.String);
+    method public boolean deleteFile(java.lang.String);
+    method public boolean deleteSharedPreferences(java.lang.String);
+    method public void enforceCallingOrSelfPermission(java.lang.String, java.lang.String);
+    method public void enforceCallingOrSelfUriPermission(android.net.Uri, int, java.lang.String);
+    method public void enforceCallingPermission(java.lang.String, java.lang.String);
+    method public void enforceCallingUriPermission(android.net.Uri, int, java.lang.String);
+    method public void enforcePermission(java.lang.String, int, int, java.lang.String);
+    method public void enforceUriPermission(android.net.Uri, int, int, int, java.lang.String);
+    method public void enforceUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int, java.lang.String);
+    method public java.lang.String[] fileList();
+    method public android.content.Context getApplicationContext();
+    method public android.content.pm.ApplicationInfo getApplicationInfo();
+    method public android.content.res.AssetManager getAssets();
+    method public java.lang.String getBasePackageName();
+    method public java.io.File getCacheDir();
+    method public java.lang.ClassLoader getClassLoader();
+    method public java.io.File getCodeCacheDir();
+    method public android.content.ContentResolver getContentResolver();
+    method public java.io.File getDataDir();
+    method public java.io.File getDatabasePath(java.lang.String);
+    method public java.io.File getDir(java.lang.String, int);
+    method public android.view.Display getDisplay();
+    method public android.view.DisplayAdjustments getDisplayAdjustments(int);
+    method public java.io.File getExternalCacheDir();
+    method public java.io.File[] getExternalCacheDirs();
+    method public java.io.File getExternalFilesDir(java.lang.String);
+    method public java.io.File[] getExternalFilesDirs(java.lang.String);
+    method public java.io.File[] getExternalMediaDirs();
+    method public java.io.File getFileStreamPath(java.lang.String);
+    method public java.io.File getFilesDir();
+    method public android.os.Looper getMainLooper();
+    method public java.io.File getNoBackupFilesDir();
+    method public java.io.File getObbDir();
+    method public java.io.File[] getObbDirs();
+    method public java.lang.String getOpPackageName();
+    method public java.lang.String getPackageCodePath();
+    method public android.content.pm.PackageManager getPackageManager();
+    method public java.lang.String getPackageName();
+    method public java.lang.String getPackageResourcePath();
+    method public java.io.File getPreloadsFileCache();
+    method public android.content.res.Resources getResources();
+    method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
+    method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+    method public java.io.File getSharedPreferencesPath(java.lang.String);
+    method public java.lang.Object getSystemService(java.lang.String);
+    method public java.lang.String getSystemServiceName(java.lang.Class<?>);
+    method public android.content.res.Resources.Theme getTheme();
+    method public int getUserId();
+    method public android.graphics.drawable.Drawable getWallpaper();
+    method public int getWallpaperDesiredMinimumHeight();
+    method public int getWallpaperDesiredMinimumWidth();
+    method public void grantUriPermission(java.lang.String, android.net.Uri, int);
+    method public boolean isCredentialProtectedStorage();
+    method public boolean isDeviceProtectedStorage();
+    method public boolean moveDatabaseFrom(android.content.Context, java.lang.String);
+    method public boolean moveSharedPreferencesFrom(android.content.Context, java.lang.String);
+    method public java.io.FileInputStream openFileInput(java.lang.String) throws java.io.FileNotFoundException;
+    method public java.io.FileOutputStream openFileOutput(java.lang.String, int) throws java.io.FileNotFoundException;
+    method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler);
+    method public android.graphics.drawable.Drawable peekWallpaper();
+    method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter);
+    method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, int);
+    method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler);
+    method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, int);
+    method public android.content.Intent registerReceiverAsUser(android.content.BroadcastReceiver, android.os.UserHandle, android.content.IntentFilter, java.lang.String, android.os.Handler);
+    method public void reloadSharedPreferences();
+    method public void removeStickyBroadcast(android.content.Intent);
+    method public void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle);
+    method public void revokeUriPermission(android.net.Uri, int);
+    method public void revokeUriPermission(java.lang.String, android.net.Uri, int);
+    method public void sendBroadcast(android.content.Intent);
+    method public void sendBroadcast(android.content.Intent, java.lang.String);
+    method public void sendBroadcast(android.content.Intent, java.lang.String, android.os.Bundle);
+    method public void sendBroadcast(android.content.Intent, java.lang.String, int);
+    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle);
+    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String);
+    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String, android.os.Bundle);
+    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String, int);
+    method public void sendBroadcastMultiplePermissions(android.content.Intent, java.lang.String[]);
+    method public void sendOrderedBroadcast(android.content.Intent, java.lang.String);
+    method public void sendOrderedBroadcast(android.content.Intent, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle);
+    method public void sendOrderedBroadcast(android.content.Intent, java.lang.String, android.os.Bundle, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle);
+    method public void sendOrderedBroadcast(android.content.Intent, java.lang.String, int, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle);
+    method public void sendOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle);
+    method public void sendOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String, int, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle);
+    method public void sendOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, java.lang.String, int, android.os.Bundle, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle);
+    method public void sendStickyBroadcast(android.content.Intent);
+    method public void sendStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle);
+    method public void sendStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle, android.os.Bundle);
+    method public void sendStickyOrderedBroadcast(android.content.Intent, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle);
+    method public void sendStickyOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle);
+    method public void setTheme(int);
+    method public void setWallpaper(android.graphics.Bitmap) throws java.io.IOException;
+    method public void setWallpaper(java.io.InputStream) throws java.io.IOException;
+    method public void startActivities(android.content.Intent[]);
+    method public void startActivities(android.content.Intent[], android.os.Bundle);
+    method public void startActivity(android.content.Intent);
+    method public void startActivity(android.content.Intent, android.os.Bundle);
+    method public android.content.ComponentName startForegroundService(android.content.Intent);
+    method public android.content.ComponentName startForegroundServiceAsUser(android.content.Intent, android.os.UserHandle);
+    method public boolean startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle);
+    method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
+    method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method public android.content.ComponentName startService(android.content.Intent);
+    method public android.content.ComponentName startServiceAsUser(android.content.Intent, android.os.UserHandle);
+    method public boolean stopService(android.content.Intent);
+    method public boolean stopServiceAsUser(android.content.Intent, android.os.UserHandle);
+    method public void unbindService(android.content.ServiceConnection);
+    method public void unregisterReceiver(android.content.BroadcastReceiver);
+    method public void updateDisplay(int);
+  }
+
+  public deprecated class MockCursor implements android.database.Cursor {
+    ctor public MockCursor();
+    method public void close();
+    method public void copyStringToBuffer(int, android.database.CharArrayBuffer);
+    method public deprecated void deactivate();
+    method public byte[] getBlob(int);
+    method public int getColumnCount();
+    method public int getColumnIndex(java.lang.String);
+    method public int getColumnIndexOrThrow(java.lang.String);
+    method public java.lang.String getColumnName(int);
+    method public java.lang.String[] getColumnNames();
+    method public int getCount();
+    method public double getDouble(int);
+    method public android.os.Bundle getExtras();
+    method public float getFloat(int);
+    method public int getInt(int);
+    method public long getLong(int);
+    method public android.net.Uri getNotificationUri();
+    method public int getPosition();
+    method public short getShort(int);
+    method public java.lang.String getString(int);
+    method public int getType(int);
+    method public boolean getWantsAllOnMoveCalls();
+    method public boolean isAfterLast();
+    method public boolean isBeforeFirst();
+    method public boolean isClosed();
+    method public boolean isFirst();
+    method public boolean isLast();
+    method public boolean isNull(int);
+    method public boolean move(int);
+    method public boolean moveToFirst();
+    method public boolean moveToLast();
+    method public boolean moveToNext();
+    method public boolean moveToPosition(int);
+    method public boolean moveToPrevious();
+    method public void registerContentObserver(android.database.ContentObserver);
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public deprecated boolean requery();
+    method public android.os.Bundle respond(android.os.Bundle);
+    method public void setExtras(android.os.Bundle);
+    method public void setNotificationUri(android.content.ContentResolver, android.net.Uri);
+    method public void unregisterContentObserver(android.database.ContentObserver);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+  }
+
+  public deprecated class MockDialogInterface implements android.content.DialogInterface {
+    ctor public MockDialogInterface();
+    method public void cancel();
+    method public void dismiss();
+  }
+
+  public deprecated class MockPackageManager extends android.content.pm.PackageManager {
+    ctor public MockPackageManager();
+    method public void addCrossProfileIntentFilter(android.content.IntentFilter, int, int, int);
+    method public void addOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener);
+    method public void addPackageToPreferred(java.lang.String);
+    method public boolean addPermission(android.content.pm.PermissionInfo);
+    method public boolean addPermissionAsync(android.content.pm.PermissionInfo);
+    method public void addPreferredActivity(android.content.IntentFilter, int, android.content.ComponentName[], android.content.ComponentName);
+    method public boolean canRequestPackageInstalls();
+    method public java.lang.String[] canonicalToCurrentPackageNames(java.lang.String[]);
+    method public int checkPermission(java.lang.String, java.lang.String);
+    method public int checkSignatures(java.lang.String, java.lang.String);
+    method public int checkSignatures(int, int);
+    method public void clearApplicationUserData(java.lang.String, android.content.pm.IPackageDataObserver);
+    method public void clearCrossProfileIntentFilters(int);
+    method public void clearInstantAppCookie();
+    method public void clearPackagePreferredActivities(java.lang.String);
+    method public java.lang.String[] currentToCanonicalPackageNames(java.lang.String[]);
+    method public void deleteApplicationCacheFiles(java.lang.String, android.content.pm.IPackageDataObserver);
+    method public void deleteApplicationCacheFilesAsUser(java.lang.String, int, android.content.pm.IPackageDataObserver);
+    method public void deletePackage(java.lang.String, android.content.pm.IPackageDeleteObserver, int);
+    method public void deletePackageAsUser(java.lang.String, android.content.pm.IPackageDeleteObserver, int, int);
+    method public void extendVerificationTimeout(int, int, long);
+    method public void flushPackageRestrictionsAsUser(int);
+    method public void freeStorage(java.lang.String, long, android.content.IntentSender);
+    method public void freeStorageAndNotify(java.lang.String, long, android.content.pm.IPackageDataObserver);
+    method public android.graphics.drawable.Drawable getActivityBanner(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.graphics.drawable.Drawable getActivityBanner(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.graphics.drawable.Drawable getActivityIcon(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.graphics.drawable.Drawable getActivityIcon(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.ActivityInfo getActivityInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.graphics.drawable.Drawable getActivityLogo(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.graphics.drawable.Drawable getActivityLogo(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public java.util.List<android.content.IntentFilter> getAllIntentFilters(java.lang.String);
+    method public java.util.List<android.content.pm.PermissionGroupInfo> getAllPermissionGroups(int);
+    method public android.graphics.drawable.Drawable getApplicationBanner(android.content.pm.ApplicationInfo);
+    method public android.graphics.drawable.Drawable getApplicationBanner(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public int getApplicationEnabledSetting(java.lang.String);
+    method public boolean getApplicationHiddenSettingAsUser(java.lang.String, android.os.UserHandle);
+    method public android.graphics.drawable.Drawable getApplicationIcon(android.content.pm.ApplicationInfo);
+    method public android.graphics.drawable.Drawable getApplicationIcon(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.ApplicationInfo getApplicationInfoAsUser(java.lang.String, int, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public java.lang.CharSequence getApplicationLabel(android.content.pm.ApplicationInfo);
+    method public android.graphics.drawable.Drawable getApplicationLogo(android.content.pm.ApplicationInfo);
+    method public android.graphics.drawable.Drawable getApplicationLogo(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.ChangedPackages getChangedPackages(int);
+    method public int getComponentEnabledSetting(android.content.ComponentName);
+    method public android.graphics.drawable.Drawable getDefaultActivityIcon();
+    method public java.lang.String getDefaultBrowserPackageNameAsUser(int);
+    method public android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo);
+    method public android.content.ComponentName getHomeActivities(java.util.List<android.content.pm.ResolveInfo>);
+    method public int getInstallReason(java.lang.String, android.os.UserHandle);
+    method public java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int);
+    method public java.util.List<android.content.pm.ApplicationInfo> getInstalledApplicationsAsUser(int, int);
+    method public java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
+    method public java.util.List<android.content.pm.PackageInfo> getInstalledPackagesAsUser(int, int);
+    method public java.lang.String getInstallerPackageName(java.lang.String);
+    method public java.lang.String getInstantAppAndroidId(java.lang.String, android.os.UserHandle);
+    method public byte[] getInstantAppCookie();
+    method public int getInstantAppCookieMaxBytes();
+    method public int getInstantAppCookieMaxSize();
+    method public android.graphics.drawable.Drawable getInstantAppIcon(java.lang.String);
+    method public android.content.ComponentName getInstantAppInstallerComponent();
+    method public android.content.ComponentName getInstantAppResolverSettingsComponent();
+    method public java.util.List<android.content.pm.InstantAppInfo> getInstantApps();
+    method public android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(java.lang.String);
+    method public int getIntentVerificationStatusAsUser(java.lang.String, int);
+    method public android.content.pm.KeySet getKeySetByAlias(java.lang.String, java.lang.String);
+    method public android.content.Intent getLaunchIntentForPackage(java.lang.String);
+    method public android.content.Intent getLeanbackLaunchIntentForPackage(java.lang.String);
+    method public int getMoveStatus(int);
+    method public java.lang.String getNameForUid(int);
+    method public java.lang.String[] getNamesForUids(int[]);
+    method public java.util.List<android.os.storage.VolumeInfo> getPackageCandidateVolumes(android.content.pm.ApplicationInfo);
+    method public android.os.storage.VolumeInfo getPackageCurrentVolume(android.content.pm.ApplicationInfo);
+    method public int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public int[] getPackageGids(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.PackageInfo getPackageInfo(android.content.pm.VersionedPackage, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.PackageInfo getPackageInfoAsUser(java.lang.String, int, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.PackageInstaller getPackageInstaller();
+    method public void getPackageSizeInfoAsUser(java.lang.String, int, android.content.pm.IPackageStatsObserver);
+    method public int getPackageUid(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public int getPackageUidAsUser(java.lang.String, int, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public int getPackageUidAsUser(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public java.lang.String[] getPackagesForUid(int);
+    method public java.util.List<android.content.pm.PackageInfo> getPackagesHoldingPermissions(java.lang.String[], int);
+    method public java.lang.String getPermissionControllerPackageName();
+    method public int getPermissionFlags(java.lang.String, java.lang.String, android.os.UserHandle);
+    method public android.content.pm.PermissionGroupInfo getPermissionGroupInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.PermissionInfo getPermissionInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public int getPreferredActivities(java.util.List<android.content.IntentFilter>, java.util.List<android.content.ComponentName>, java.lang.String);
+    method public java.util.List<android.content.pm.PackageInfo> getPreferredPackages(int);
+    method public java.util.List<android.os.storage.VolumeInfo> getPrimaryStorageCandidateVolumes();
+    method public android.os.storage.VolumeInfo getPrimaryStorageCurrentVolume();
+    method public android.content.pm.ProviderInfo getProviderInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.ActivityInfo getReceiverInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.res.Resources getResourcesForActivity(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.res.Resources getResourcesForApplication(android.content.pm.ApplicationInfo);
+    method public android.content.res.Resources getResourcesForApplication(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.res.Resources getResourcesForApplicationAsUser(java.lang.String, int);
+    method public android.content.pm.ServiceInfo getServiceInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public java.lang.String getServicesSystemSharedLibraryPackageName();
+    method public java.util.List<android.content.pm.SharedLibraryInfo> getSharedLibraries(int);
+    method public java.util.List<android.content.pm.SharedLibraryInfo> getSharedLibrariesAsUser(int, int);
+    method public java.lang.String getSharedSystemSharedLibraryPackageName();
+    method public android.content.pm.KeySet getSigningKeySet(java.lang.String);
+    method public android.content.pm.FeatureInfo[] getSystemAvailableFeatures();
+    method public java.lang.String[] getSystemSharedLibraryNames();
+    method public java.lang.CharSequence getText(java.lang.String, int, android.content.pm.ApplicationInfo);
+    method public int getUidForSharedUser(java.lang.String);
+    method public android.graphics.drawable.Drawable getUserBadgeForDensity(android.os.UserHandle, int);
+    method public android.graphics.drawable.Drawable getUserBadgeForDensityNoBackground(android.os.UserHandle, int);
+    method public android.graphics.drawable.Drawable getUserBadgedDrawableForDensity(android.graphics.drawable.Drawable, android.os.UserHandle, android.graphics.Rect, int);
+    method public android.graphics.drawable.Drawable getUserBadgedIcon(android.graphics.drawable.Drawable, android.os.UserHandle);
+    method public java.lang.CharSequence getUserBadgedLabel(java.lang.CharSequence, android.os.UserHandle);
+    method public android.content.pm.VerifierDeviceIdentity getVerifierDeviceIdentity();
+    method public android.content.res.XmlResourceParser getXml(java.lang.String, int, android.content.pm.ApplicationInfo);
+    method public void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
+    method public boolean hasSystemFeature(java.lang.String);
+    method public boolean hasSystemFeature(java.lang.String, int);
+    method public int installExistingPackage(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public int installExistingPackage(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public int installExistingPackageAsUser(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public void installPackage(android.net.Uri, android.content.pm.IPackageInstallObserver, int, java.lang.String);
+    method public void installPackage(android.net.Uri, android.app.PackageInstallObserver, int, java.lang.String);
+    method public boolean isInstantApp();
+    method public boolean isInstantApp(java.lang.String);
+    method public boolean isPackageAvailable(java.lang.String);
+    method public boolean isPackageSuspendedForUser(java.lang.String, int);
+    method public boolean isPermissionReviewModeEnabled();
+    method public boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
+    method public boolean isSafeMode();
+    method public boolean isSignedBy(java.lang.String, android.content.pm.KeySet);
+    method public boolean isSignedByExactly(java.lang.String, android.content.pm.KeySet);
+    method public boolean isUpgrade();
+    method public android.graphics.drawable.Drawable loadItemIcon(android.content.pm.PackageItemInfo, android.content.pm.ApplicationInfo);
+    method public android.graphics.drawable.Drawable loadUnbadgedItemIcon(android.content.pm.PackageItemInfo, android.content.pm.ApplicationInfo);
+    method public int movePackage(java.lang.String, android.os.storage.VolumeInfo);
+    method public int movePrimaryStorage(android.os.storage.VolumeInfo);
+    method public java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(android.content.Intent, int);
+    method public java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceiversAsUser(android.content.Intent, int, int);
+    method public java.util.List<android.content.pm.ProviderInfo> queryContentProviders(java.lang.String, int, int);
+    method public java.util.List<android.content.pm.InstrumentationInfo> queryInstrumentation(java.lang.String, int);
+    method public java.util.List<android.content.pm.ResolveInfo> queryIntentActivities(android.content.Intent, int);
+    method public java.util.List<android.content.pm.ResolveInfo> queryIntentActivitiesAsUser(android.content.Intent, int, int);
+    method public java.util.List<android.content.pm.ResolveInfo> queryIntentActivityOptions(android.content.ComponentName, android.content.Intent[], android.content.Intent, int);
+    method public java.util.List<android.content.pm.ResolveInfo> queryIntentContentProviders(android.content.Intent, int);
+    method public java.util.List<android.content.pm.ResolveInfo> queryIntentContentProvidersAsUser(android.content.Intent, int, int);
+    method public java.util.List<android.content.pm.ResolveInfo> queryIntentServices(android.content.Intent, int);
+    method public java.util.List<android.content.pm.ResolveInfo> queryIntentServicesAsUser(android.content.Intent, int, int);
+    method public java.util.List<android.content.pm.PermissionInfo> queryPermissionsByGroup(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public void registerDexModule(java.lang.String, android.content.pm.PackageManager.DexModuleRegisterCallback);
+    method public void registerMoveCallback(android.content.pm.PackageManager.MoveCallback, android.os.Handler);
+    method public void removeOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener);
+    method public void removePackageFromPreferred(java.lang.String);
+    method public void removePermission(java.lang.String);
+    method public void replacePreferredActivity(android.content.IntentFilter, int, android.content.ComponentName[], android.content.ComponentName);
+    method public android.content.pm.ResolveInfo resolveActivity(android.content.Intent, int);
+    method public android.content.pm.ResolveInfo resolveActivityAsUser(android.content.Intent, int, int);
+    method public android.content.pm.ProviderInfo resolveContentProvider(java.lang.String, int);
+    method public android.content.pm.ProviderInfo resolveContentProviderAsUser(java.lang.String, int, int);
+    method public android.content.pm.ResolveInfo resolveService(android.content.Intent, int);
+    method public void revokeRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
+    method public void setApplicationCategoryHint(java.lang.String, int);
+    method public void setApplicationEnabledSetting(java.lang.String, int, int);
+    method public boolean setApplicationHiddenSettingAsUser(java.lang.String, boolean, android.os.UserHandle);
+    method public void setComponentEnabledSetting(android.content.ComponentName, int, int);
+    method public boolean setDefaultBrowserPackageNameAsUser(java.lang.String, int);
+    method public void setInstallerPackageName(java.lang.String, java.lang.String);
+    method public boolean setInstantAppCookie(byte[]);
+    method public java.lang.String[] setPackagesSuspendedAsUser(java.lang.String[], boolean, int);
+    method public void setUpdateAvailable(java.lang.String, boolean);
+    method public boolean shouldShowRequestPermissionRationale(java.lang.String);
+    method public void unregisterMoveCallback(android.content.pm.PackageManager.MoveCallback);
+    method public void updateInstantAppCookie(byte[]);
+    method public boolean updateIntentVerificationStatusAsUser(java.lang.String, int, int);
+    method public void updatePermissionFlags(java.lang.String, java.lang.String, int, int, android.os.UserHandle);
+    method public void verifyIntentFilter(int, int, java.util.List<java.lang.String>);
+    method public void verifyPendingInstall(int, int);
+  }
+
+  public deprecated class MockResources extends android.content.res.Resources {
+    ctor public MockResources();
+    method public int getColor(int) throws android.content.res.Resources.NotFoundException;
+    method public android.content.res.ColorStateList getColorStateList(int) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
+    method public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics);
+  }
+
+}
+
diff --git a/test-runner/api/android-test-mock-removed.txt b/test-runner/api/android-test-mock-removed.txt
new file mode 100644
index 0000000..9920f63d
--- /dev/null
+++ b/test-runner/api/android-test-mock-removed.txt
@@ -0,0 +1,9 @@
+package android.test.mock {
+
+  public deprecated class MockPackageManager extends android.content.pm.PackageManager {
+    method public deprecated java.lang.String getDefaultBrowserPackageName(int);
+    method public deprecated boolean setDefaultBrowserPackageName(java.lang.String, int);
+  }
+
+}
+
diff --git a/test-runner/api/android-test-runner-current.txt b/test-runner/api/android-test-runner-current.txt
new file mode 100644
index 0000000..905cfe7
--- /dev/null
+++ b/test-runner/api/android-test-runner-current.txt
@@ -0,0 +1,336 @@
+package android.test {
+
+  public abstract deprecated class ActivityInstrumentationTestCase<T extends android.app.Activity> extends android.test.ActivityTestCase {
+    ctor public ActivityInstrumentationTestCase(java.lang.String, java.lang.Class<T>);
+    ctor public ActivityInstrumentationTestCase(java.lang.String, java.lang.Class<T>, boolean);
+    method public T getActivity();
+    method public void testActivityTestCaseSetUpProperly() throws java.lang.Exception;
+  }
+
+  public abstract deprecated class ActivityInstrumentationTestCase2<T extends android.app.Activity> extends android.test.ActivityTestCase {
+    ctor public deprecated ActivityInstrumentationTestCase2(java.lang.String, java.lang.Class<T>);
+    ctor public ActivityInstrumentationTestCase2(java.lang.Class<T>);
+    method public T getActivity();
+    method public void setActivityInitialTouchMode(boolean);
+    method public void setActivityIntent(android.content.Intent);
+  }
+
+  public abstract deprecated class ActivityTestCase extends android.test.InstrumentationTestCase {
+    ctor public ActivityTestCase();
+    method protected android.app.Activity getActivity();
+    method protected void scrubClass(java.lang.Class<?>) throws java.lang.IllegalAccessException;
+    method protected void setActivity(android.app.Activity);
+  }
+
+  public abstract deprecated class ActivityUnitTestCase<T extends android.app.Activity> extends android.test.ActivityTestCase {
+    ctor public ActivityUnitTestCase(java.lang.Class<T>);
+    method public T getActivity();
+    method public int getFinishedActivityRequest();
+    method public int getRequestedOrientation();
+    method public android.content.Intent getStartedActivityIntent();
+    method public int getStartedActivityRequest();
+    method public boolean isFinishCalled();
+    method public void setActivityContext(android.content.Context);
+    method public void setApplication(android.app.Application);
+    method protected T startActivity(android.content.Intent, android.os.Bundle, java.lang.Object);
+  }
+
+  public deprecated class AndroidTestRunner extends junit.runner.BaseTestRunner {
+    ctor public AndroidTestRunner();
+    method public void addTestListener(junit.framework.TestListener);
+    method public void clearTestListeners();
+    method protected junit.framework.TestResult createTestResult();
+    method public java.util.List<junit.framework.TestCase> getTestCases();
+    method public java.lang.String getTestClassName();
+    method public junit.framework.TestResult getTestResult();
+    method protected java.lang.Class loadSuiteClass(java.lang.String) throws java.lang.ClassNotFoundException;
+    method protected void runFailed(java.lang.String);
+    method public void runTest();
+    method public void runTest(junit.framework.TestResult);
+    method public void setContext(android.content.Context);
+    method public deprecated void setInstrumentaiton(android.app.Instrumentation);
+    method public void setInstrumentation(android.app.Instrumentation);
+    method public void setTest(junit.framework.Test);
+    method public void setTestClassName(java.lang.String, java.lang.String);
+    method public void testEnded(java.lang.String);
+    method public void testFailed(int, junit.framework.Test, java.lang.Throwable);
+    method public void testStarted(java.lang.String);
+  }
+
+  public abstract deprecated class ApplicationTestCase<T extends android.app.Application> extends android.test.AndroidTestCase {
+    ctor public ApplicationTestCase(java.lang.Class<T>);
+    method protected final void createApplication();
+    method public T getApplication();
+    method public android.content.Context getSystemContext();
+    method protected final void terminateApplication();
+    method public final void testApplicationTestCaseSetUpProperly() throws java.lang.Exception;
+  }
+
+  public deprecated class AssertionFailedError extends java.lang.Error {
+    ctor public AssertionFailedError();
+    ctor public AssertionFailedError(java.lang.String);
+  }
+
+  public deprecated class ComparisonFailure extends android.test.AssertionFailedError {
+    ctor public ComparisonFailure(java.lang.String, java.lang.String, java.lang.String);
+  }
+
+  public deprecated class InstrumentationTestRunner extends android.app.Instrumentation implements android.test.TestSuiteProvider {
+    ctor public InstrumentationTestRunner();
+    method public junit.framework.TestSuite getAllTests();
+    method protected android.test.AndroidTestRunner getAndroidTestRunner();
+    method public android.os.Bundle getArguments();
+    method public java.lang.ClassLoader getLoader();
+    method public junit.framework.TestSuite getTestSuite();
+    field public static final java.lang.String REPORT_KEY_NAME_CLASS = "class";
+    field public static final java.lang.String REPORT_KEY_NAME_TEST = "test";
+    field public static final java.lang.String REPORT_KEY_NUM_CURRENT = "current";
+    field public static final java.lang.String REPORT_KEY_NUM_TOTAL = "numtests";
+    field public static final java.lang.String REPORT_KEY_STACK = "stack";
+    field public static final java.lang.String REPORT_VALUE_ID = "InstrumentationTestRunner";
+    field public static final int REPORT_VALUE_RESULT_ERROR = -1; // 0xffffffff
+    field public static final int REPORT_VALUE_RESULT_FAILURE = -2; // 0xfffffffe
+    field public static final int REPORT_VALUE_RESULT_OK = 0; // 0x0
+    field public static final int REPORT_VALUE_RESULT_START = 1; // 0x1
+  }
+
+  public deprecated class IsolatedContext extends android.content.ContextWrapper {
+    ctor public IsolatedContext(android.content.ContentResolver, android.content.Context);
+    method public java.util.List<android.content.Intent> getAndClearBroadcastIntents();
+  }
+
+  public class LoaderTestCase extends android.test.AndroidTestCase {
+    ctor public LoaderTestCase();
+    method public <T> T getLoaderResultSynchronously(android.content.Loader<T>);
+  }
+
+  public final deprecated class MoreAsserts {
+    method public static void assertAssignableFrom(java.lang.Class<?>, java.lang.Object);
+    method public static void assertAssignableFrom(java.lang.Class<?>, java.lang.Class<?>);
+    method public static java.util.regex.MatchResult assertContainsRegex(java.lang.String, java.lang.String, java.lang.String);
+    method public static java.util.regex.MatchResult assertContainsRegex(java.lang.String, java.lang.String);
+    method public static void assertContentsInAnyOrder(java.lang.String, java.lang.Iterable<?>, java.lang.Object...);
+    method public static void assertContentsInAnyOrder(java.lang.Iterable<?>, java.lang.Object...);
+    method public static void assertContentsInOrder(java.lang.String, java.lang.Iterable<?>, java.lang.Object...);
+    method public static void assertContentsInOrder(java.lang.Iterable<?>, java.lang.Object...);
+    method public static void assertEmpty(java.lang.String, java.lang.Iterable<?>);
+    method public static void assertEmpty(java.lang.Iterable<?>);
+    method public static void assertEmpty(java.lang.String, java.util.Map<?, ?>);
+    method public static void assertEmpty(java.util.Map<?, ?>);
+    method public static void assertEquals(java.lang.String, byte[], byte[]);
+    method public static void assertEquals(byte[], byte[]);
+    method public static void assertEquals(java.lang.String, int[], int[]);
+    method public static void assertEquals(int[], int[]);
+    method public static void assertEquals(java.lang.String, double[], double[]);
+    method public static void assertEquals(double[], double[]);
+    method public static void assertEquals(java.lang.String, java.lang.Object[], java.lang.Object[]);
+    method public static void assertEquals(java.lang.Object[], java.lang.Object[]);
+    method public static void assertEquals(java.lang.String, java.util.Set<? extends java.lang.Object>, java.util.Set<? extends java.lang.Object>);
+    method public static void assertEquals(java.util.Set<? extends java.lang.Object>, java.util.Set<? extends java.lang.Object>);
+    method public static java.util.regex.MatchResult assertMatchesRegex(java.lang.String, java.lang.String, java.lang.String);
+    method public static java.util.regex.MatchResult assertMatchesRegex(java.lang.String, java.lang.String);
+    method public static void assertNotContainsRegex(java.lang.String, java.lang.String, java.lang.String);
+    method public static void assertNotContainsRegex(java.lang.String, java.lang.String);
+    method public static void assertNotEmpty(java.lang.String, java.lang.Iterable<?>);
+    method public static void assertNotEmpty(java.lang.Iterable<?>);
+    method public static void assertNotEmpty(java.lang.String, java.util.Map<?, ?>);
+    method public static void assertNotEmpty(java.util.Map<?, ?>);
+    method public static void assertNotEqual(java.lang.String, java.lang.Object, java.lang.Object);
+    method public static void assertNotEqual(java.lang.Object, java.lang.Object);
+    method public static void assertNotMatchesRegex(java.lang.String, java.lang.String, java.lang.String);
+    method public static void assertNotMatchesRegex(java.lang.String, java.lang.String);
+    method public static void checkEqualsAndHashCodeMethods(java.lang.String, java.lang.Object, java.lang.Object, boolean);
+    method public static void checkEqualsAndHashCodeMethods(java.lang.Object, java.lang.Object, boolean);
+  }
+
+  public abstract deprecated class ProviderTestCase<T extends android.content.ContentProvider> extends android.test.InstrumentationTestCase {
+    ctor public ProviderTestCase(java.lang.Class<T>, java.lang.String);
+    method public android.test.mock.MockContentResolver getMockContentResolver();
+    method public android.test.IsolatedContext getMockContext();
+    method public T getProvider();
+    method public static <T extends android.content.ContentProvider> android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+  }
+
+  public abstract class ProviderTestCase2<T extends android.content.ContentProvider> extends android.test.AndroidTestCase {
+    ctor public ProviderTestCase2(java.lang.Class<T>, java.lang.String);
+    method public android.test.mock.MockContentResolver getMockContentResolver();
+    method public android.test.IsolatedContext getMockContext();
+    method public T getProvider();
+    method public static <T extends android.content.ContentProvider> android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.String, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+  }
+
+  public deprecated class RenamingDelegatingContext extends android.content.ContextWrapper {
+    ctor public RenamingDelegatingContext(android.content.Context, java.lang.String);
+    ctor public RenamingDelegatingContext(android.content.Context, android.content.Context, java.lang.String);
+    method public java.lang.String getDatabasePrefix();
+    method public void makeExistingFilesAndDbsAccessible();
+    method public static <T extends android.content.ContentProvider> T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static <T extends android.content.ContentProvider> T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String, boolean) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+  }
+
+  public abstract deprecated class ServiceTestCase<T extends android.app.Service> extends android.test.AndroidTestCase {
+    ctor public ServiceTestCase(java.lang.Class<T>);
+    method protected android.os.IBinder bindService(android.content.Intent);
+    method public android.app.Application getApplication();
+    method public T getService();
+    method public android.content.Context getSystemContext();
+    method public void setApplication(android.app.Application);
+    method protected void setupService();
+    method protected void shutdownService();
+    method protected void startService(android.content.Intent);
+    method public void testServiceTestCaseSetUpProperly() throws java.lang.Exception;
+  }
+
+  public abstract deprecated class SingleLaunchActivityTestCase<T extends android.app.Activity> extends android.test.InstrumentationTestCase {
+    ctor public SingleLaunchActivityTestCase(java.lang.String, java.lang.Class<T>);
+    method public T getActivity();
+    method public void testActivityTestCaseSetUpProperly() throws java.lang.Exception;
+  }
+
+  public deprecated class SyncBaseInstrumentation extends android.test.InstrumentationTestCase {
+    ctor public SyncBaseInstrumentation();
+    method protected void cancelSyncsandDisableAutoSync();
+    method protected void syncProvider(android.net.Uri, java.lang.String, java.lang.String) throws java.lang.Exception;
+  }
+
+  public abstract deprecated interface TestSuiteProvider {
+    method public abstract junit.framework.TestSuite getTestSuite();
+  }
+
+  public deprecated class TouchUtils {
+    ctor public TouchUtils();
+    method public static void clickView(android.test.InstrumentationTestCase, android.view.View);
+    method public static deprecated void drag(android.test.ActivityInstrumentationTestCase, float, float, float, float, int);
+    method public static void drag(android.test.InstrumentationTestCase, float, float, float, float, int);
+    method public static deprecated void dragQuarterScreenDown(android.test.ActivityInstrumentationTestCase);
+    method public static void dragQuarterScreenDown(android.test.InstrumentationTestCase, android.app.Activity);
+    method public static deprecated void dragQuarterScreenUp(android.test.ActivityInstrumentationTestCase);
+    method public static void dragQuarterScreenUp(android.test.InstrumentationTestCase, android.app.Activity);
+    method public static deprecated int dragViewBy(android.test.ActivityInstrumentationTestCase, android.view.View, int, int, int);
+    method public static deprecated int dragViewBy(android.test.InstrumentationTestCase, android.view.View, int, int, int);
+    method public static deprecated int dragViewTo(android.test.ActivityInstrumentationTestCase, android.view.View, int, int, int);
+    method public static int dragViewTo(android.test.InstrumentationTestCase, android.view.View, int, int, int);
+    method public static deprecated void dragViewToBottom(android.test.ActivityInstrumentationTestCase, android.view.View);
+    method public static void dragViewToBottom(android.test.InstrumentationTestCase, android.app.Activity, android.view.View);
+    method public static deprecated void dragViewToBottom(android.test.ActivityInstrumentationTestCase, android.view.View, int);
+    method public static void dragViewToBottom(android.test.InstrumentationTestCase, android.app.Activity, android.view.View, int);
+    method public static deprecated void dragViewToTop(android.test.ActivityInstrumentationTestCase, android.view.View);
+    method public static deprecated void dragViewToTop(android.test.ActivityInstrumentationTestCase, android.view.View, int);
+    method public static void dragViewToTop(android.test.InstrumentationTestCase, android.view.View);
+    method public static void dragViewToTop(android.test.InstrumentationTestCase, android.view.View, int);
+    method public static deprecated int dragViewToX(android.test.ActivityInstrumentationTestCase, android.view.View, int, int);
+    method public static int dragViewToX(android.test.InstrumentationTestCase, android.view.View, int, int);
+    method public static deprecated int dragViewToY(android.test.ActivityInstrumentationTestCase, android.view.View, int, int);
+    method public static int dragViewToY(android.test.InstrumentationTestCase, android.view.View, int, int);
+    method public static deprecated void longClickView(android.test.ActivityInstrumentationTestCase, android.view.View);
+    method public static void longClickView(android.test.InstrumentationTestCase, android.view.View);
+    method public static deprecated void scrollToBottom(android.test.ActivityInstrumentationTestCase, android.view.ViewGroup);
+    method public static void scrollToBottom(android.test.InstrumentationTestCase, android.app.Activity, android.view.ViewGroup);
+    method public static deprecated void scrollToTop(android.test.ActivityInstrumentationTestCase, android.view.ViewGroup);
+    method public static void scrollToTop(android.test.InstrumentationTestCase, android.app.Activity, android.view.ViewGroup);
+    method public static void tapView(android.test.InstrumentationTestCase, android.view.View);
+    method public static void touchAndCancelView(android.test.InstrumentationTestCase, android.view.View);
+  }
+
+  public deprecated class ViewAsserts {
+    method public static void assertBaselineAligned(android.view.View, android.view.View);
+    method public static void assertBottomAligned(android.view.View, android.view.View);
+    method public static void assertBottomAligned(android.view.View, android.view.View, int);
+    method public static void assertGroupContains(android.view.ViewGroup, android.view.View);
+    method public static void assertGroupIntegrity(android.view.ViewGroup);
+    method public static void assertGroupNotContains(android.view.ViewGroup, android.view.View);
+    method public static void assertHasScreenCoordinates(android.view.View, android.view.View, int, int);
+    method public static void assertHorizontalCenterAligned(android.view.View, android.view.View);
+    method public static void assertLeftAligned(android.view.View, android.view.View);
+    method public static void assertLeftAligned(android.view.View, android.view.View, int);
+    method public static void assertOffScreenAbove(android.view.View, android.view.View);
+    method public static void assertOffScreenBelow(android.view.View, android.view.View);
+    method public static void assertOnScreen(android.view.View, android.view.View);
+    method public static void assertRightAligned(android.view.View, android.view.View);
+    method public static void assertRightAligned(android.view.View, android.view.View, int);
+    method public static void assertTopAligned(android.view.View, android.view.View);
+    method public static void assertTopAligned(android.view.View, android.view.View, int);
+    method public static void assertVerticalCenterAligned(android.view.View, android.view.View);
+  }
+
+}
+
+package android.test.suitebuilder {
+
+  public deprecated class TestMethod {
+    ctor public TestMethod(java.lang.reflect.Method, java.lang.Class<? extends junit.framework.TestCase>);
+    ctor public TestMethod(java.lang.String, java.lang.Class<? extends junit.framework.TestCase>);
+    ctor public TestMethod(junit.framework.TestCase);
+    method public junit.framework.TestCase createTest() throws java.lang.IllegalAccessException, java.lang.InstantiationException, java.lang.reflect.InvocationTargetException;
+    method public <T extends java.lang.annotation.Annotation> T getAnnotation(java.lang.Class<T>);
+    method public java.lang.Class<? extends junit.framework.TestCase> getEnclosingClass();
+    method public java.lang.String getEnclosingClassname();
+    method public java.lang.String getName();
+  }
+
+  public deprecated class TestSuiteBuilder {
+    ctor public TestSuiteBuilder(java.lang.Class);
+    ctor public TestSuiteBuilder(java.lang.String, java.lang.ClassLoader);
+    method public android.test.suitebuilder.TestSuiteBuilder addRequirements(java.util.List<com.android.internal.util.Predicate<android.test.suitebuilder.TestMethod>>);
+    method public final android.test.suitebuilder.TestSuiteBuilder addRequirements(com.android.internal.util.Predicate<android.test.suitebuilder.TestMethod>...);
+    method public final junit.framework.TestSuite build();
+    method public android.test.suitebuilder.TestSuiteBuilder excludePackages(java.lang.String...);
+    method protected java.lang.String getSuiteName();
+    method public final android.test.suitebuilder.TestSuiteBuilder includeAllPackagesUnderHere();
+    method public android.test.suitebuilder.TestSuiteBuilder includePackages(java.lang.String...);
+    method public android.test.suitebuilder.TestSuiteBuilder named(java.lang.String);
+  }
+
+  public static deprecated class TestSuiteBuilder.FailedToCreateTests extends junit.framework.TestCase {
+    ctor public TestSuiteBuilder.FailedToCreateTests(java.lang.Exception);
+    method public void testSuiteConstructionFailed();
+  }
+
+}
+
+package junit.runner {
+
+  public abstract class BaseTestRunner implements junit.framework.TestListener {
+    ctor public BaseTestRunner();
+    method public synchronized void addError(junit.framework.Test, java.lang.Throwable);
+    method public synchronized void addFailure(junit.framework.Test, junit.framework.AssertionFailedError);
+    method protected void clearStatus();
+    method public java.lang.String elapsedTimeAsString(long);
+    method public synchronized void endTest(junit.framework.Test);
+    method public java.lang.String extractClassName(java.lang.String);
+    method public static java.lang.String getFilteredTrace(java.lang.Throwable);
+    method public static java.lang.String getFilteredTrace(java.lang.String);
+    method public deprecated junit.runner.TestSuiteLoader getLoader();
+    method public static java.lang.String getPreference(java.lang.String);
+    method public static int getPreference(java.lang.String, int);
+    method protected static java.util.Properties getPreferences();
+    method public junit.framework.Test getTest(java.lang.String);
+    method public static deprecated boolean inVAJava();
+    method protected java.lang.Class<?> loadSuiteClass(java.lang.String) throws java.lang.ClassNotFoundException;
+    method protected java.lang.String processArguments(java.lang.String[]);
+    method protected abstract void runFailed(java.lang.String);
+    method public static void savePreferences() throws java.io.IOException;
+    method public void setLoading(boolean);
+    method public void setPreference(java.lang.String, java.lang.String);
+    method protected static void setPreferences(java.util.Properties);
+    method protected static boolean showStackRaw();
+    method public synchronized void startTest(junit.framework.Test);
+    method public abstract void testEnded(java.lang.String);
+    method public abstract void testFailed(int, junit.framework.Test, java.lang.Throwable);
+    method public abstract void testStarted(java.lang.String);
+    method public static java.lang.String truncate(java.lang.String);
+    method protected boolean useReloadingTestSuiteLoader();
+    field public static final java.lang.String SUITE_METHODNAME = "suite";
+  }
+
+  public abstract interface TestSuiteLoader {
+    method public abstract java.lang.Class load(java.lang.String) throws java.lang.ClassNotFoundException;
+    method public abstract java.lang.Class reload(java.lang.Class) throws java.lang.ClassNotFoundException;
+  }
+
+  public class Version {
+    method public static java.lang.String id();
+  }
+
+}
+
diff --git a/test-runner/api/android-test-runner-removed.txt b/test-runner/api/android-test-runner-removed.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test-runner/api/android-test-runner-removed.txt
diff --git a/test-runner/api/apicheck_msg_android_test_mock.txt b/test-runner/api/apicheck_msg_android_test_mock.txt
new file mode 100644
index 0000000..e388935
--- /dev/null
+++ b/test-runner/api/apicheck_msg_android_test_mock.txt
@@ -0,0 +1,17 @@
+
+******************************
+You have tried to change the API from what has been previously approved.
+
+To make these errors go away, you have two choices:
+   1) You can add "@hide" javadoc comments to the methods, etc. listed in the
+      errors above.
+
+   2) You can update android-test-mock-current.txt by executing the following command:
+         make update-android-test-mock-api
+
+      To submit the revised android-test-mock-current.txt to the main Android repository,
+      you will need approval.
+******************************
+
+
+
diff --git a/test-runner/api/apicheck_msg_android_test_runner.txt b/test-runner/api/apicheck_msg_android_test_runner.txt
new file mode 100644
index 0000000..cf2d15e
--- /dev/null
+++ b/test-runner/api/apicheck_msg_android_test_runner.txt
@@ -0,0 +1,17 @@
+
+******************************
+You have tried to change the API from what has been previously approved.
+
+To make these errors go away, you have two choices:
+   1) You can add "@hide" javadoc comments to the methods, etc. listed in the
+      errors above.
+
+   2) You can update android-test-runner-current.txt by executing the following command:
+         make update-android-test-runner-api
+
+      To submit the revised android-test-runner-current.txt to the main Android repository,
+      you will need approval.
+******************************
+
+
+
diff --git a/test-runner/src/android/test/AndroidTestRunner.java b/test-runner/src/android/test/AndroidTestRunner.java
index 7313a28..f898516 100644
--- a/test-runner/src/android/test/AndroidTestRunner.java
+++ b/test-runner/src/android/test/AndroidTestRunner.java
@@ -18,7 +18,6 @@
 
 import android.app.Instrumentation;
 import android.content.Context;
-import android.os.PerformanceCollector.PerformanceResultsWriter;
 
 import java.util.ArrayList;
 import junit.framework.Test;
@@ -49,7 +48,6 @@
 
     private List<TestListener> mTestListeners = new ArrayList<>();
     private Instrumentation mInstrumentation;
-    private PerformanceResultsWriter mPerfWriter;
 
     @SuppressWarnings("unchecked")
     public void setTestClassName(String testClassName, String testMethodName) {
@@ -194,7 +192,6 @@
         for (TestCase testCase : mTestCases) {
             setContextIfAndroidTestCase(testCase, mContext, testContext);
             setInstrumentationIfInstrumentationTestCase(testCase, mInstrumentation);
-            setPerformanceWriterIfPerformanceCollectorTestCase(testCase, mPerfWriter);
             testCase.run(mTestResult);
         }
     }
@@ -217,13 +214,6 @@
         }
     }
 
-    private void setPerformanceWriterIfPerformanceCollectorTestCase(
-            Test test, PerformanceResultsWriter writer) {
-        if (PerformanceCollectorTestCase.class.isAssignableFrom(test.getClass())) {
-            ((PerformanceCollectorTestCase) test).setPerformanceResultsWriter(writer);
-        }
-    }
-
     public void setInstrumentation(Instrumentation instrumentation) {
         mInstrumentation = instrumentation;
     }
@@ -237,13 +227,6 @@
         setInstrumentation(instrumentation);
     }
 
-    /**
-     * {@hide} Pending approval for public API.
-     */
-    public void setPerformanceResultsWriter(PerformanceResultsWriter writer) {
-        mPerfWriter = writer;
-    }
-
     @Override
     protected Class loadSuiteClass(String suiteClassName) throws ClassNotFoundException {
         return mContext.getClassLoader().loadClass(suiteClassName);
diff --git a/test-runner/src/android/test/ClassPathPackageInfo.java b/test-runner/src/android/test/ClassPathPackageInfo.java
deleted file mode 100644
index 2cf76af..0000000
--- a/test-runner/src/android/test/ClassPathPackageInfo.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * The Package object doesn't allow you to iterate over the contained
- * classes and subpackages of that package.  This is a version that does.
- *
- * {@hide} Not needed for 1.0 SDK.
- */
-@Deprecated
-public class ClassPathPackageInfo {
-
-    private final ClassPathPackageInfoSource source;
-    private final String packageName;
-    private final Set<String> subpackageNames;
-    private final Set<Class<?>> topLevelClasses;
-
-    ClassPathPackageInfo(ClassPathPackageInfoSource source, String packageName,
-            Set<String> subpackageNames, Set<Class<?>> topLevelClasses) {
-        this.source = source;
-        this.packageName = packageName;
-        this.subpackageNames = Collections.unmodifiableSet(subpackageNames);
-        this.topLevelClasses = Collections.unmodifiableSet(topLevelClasses);
-    }
-
-    public Set<ClassPathPackageInfo> getSubpackages() {
-        Set<ClassPathPackageInfo> info = new HashSet<>();
-        for (String name : subpackageNames) {
-            info.add(source.getPackageInfo(name));
-        }
-        return info;
-    }
-
-    public Set<Class<?>> getTopLevelClassesRecursive() {
-        Set<Class<?>> set = new HashSet<>();
-        addTopLevelClassesTo(set);
-        return set;
-    }
-
-    private void addTopLevelClassesTo(Set<Class<?>> set) {
-        set.addAll(topLevelClasses);
-        for (ClassPathPackageInfo info : getSubpackages()) {
-            info.addTopLevelClassesTo(set);
-        }
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof ClassPathPackageInfo) {
-            ClassPathPackageInfo that = (ClassPathPackageInfo) obj;
-            return (this.packageName).equals(that.packageName);
-        }
-        return false;
-    }
-
-    @Override
-    public int hashCode() {
-        return packageName.hashCode();
-    }
-}
diff --git a/test-runner/src/android/test/ClassPathPackageInfoSource.java b/test-runner/src/android/test/ClassPathPackageInfoSource.java
index 9bcc25a..755b540 100644
--- a/test-runner/src/android/test/ClassPathPackageInfoSource.java
+++ b/test-runner/src/android/test/ClassPathPackageInfoSource.java
@@ -21,15 +21,12 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Collections;
 import java.util.Enumeration;
-import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 import java.util.regex.Pattern;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
 
 /**
  * Generate {@link ClassPathPackageInfo}s by scanning apk paths.
@@ -39,11 +36,13 @@
 @Deprecated
 public class ClassPathPackageInfoSource {
 
-    private static final String CLASS_EXTENSION = ".class";
-
     private static final ClassLoader CLASS_LOADER
             = ClassPathPackageInfoSource.class.getClassLoader();
 
+    private static String[] apkPaths;
+
+    private static ClassPathPackageInfoSource classPathSource;
+
     private final SimpleCache<String, ClassPathPackageInfo> cache =
             new SimpleCache<String, ClassPathPackageInfo>() {
                 @Override
@@ -54,23 +53,28 @@
 
     // The class path of the running application
     private final String[] classPath;
-    private static String[] apkPaths;
 
-    // A cache of jar file contents
-    private final Map<File, Set<String>> jarFiles = new HashMap<>();
-    private ClassLoader classLoader;
+    private final ClassLoader classLoader;
 
-    ClassPathPackageInfoSource() {
+    private ClassPathPackageInfoSource(ClassLoader classLoader) {
+        this.classLoader = classLoader;
         classPath = getClassPath();
     }
 
-
-    public static void setApkPaths(String[] apkPaths) {
+    static void setApkPaths(String[] apkPaths) {
         ClassPathPackageInfoSource.apkPaths = apkPaths;
     }
 
-    public ClassPathPackageInfo getPackageInfo(String pkgName) {
-        return cache.get(pkgName);
+    public static ClassPathPackageInfoSource forClassPath(ClassLoader classLoader) {
+        if (classPathSource == null) {
+            classPathSource = new ClassPathPackageInfoSource(classLoader);
+        }
+        return classPathSource;
+    }
+
+    public Set<Class<?>> getTopLevelClassesRecursive(String packageName) {
+        ClassPathPackageInfo packageInfo = cache.get(packageName);
+        return packageInfo.getTopLevelClassesRecursive();
     }
 
     private ClassPathPackageInfo createPackageInfo(String packageName) {
@@ -96,7 +100,7 @@
                         + "'. Message: " + e.getMessage(), e);
             }
         }
-        return new ClassPathPackageInfo(this, packageName, subpackageNames,
+        return new ClassPathPackageInfo(packageName, subpackageNames,
                 topLevelClasses);
     }
 
@@ -107,9 +111,6 @@
      */
     private void findClasses(String packageName, Set<String> classNames,
             Set<String> subpackageNames) {
-        String packagePrefix = packageName + '.';
-        String pathPrefix = packagePrefix.replace('.', '/');
-
         for (String entryName : classPath) {
             File classPathEntry = new File(entryName);
 
@@ -150,58 +151,6 @@
 
     /**
      * Finds all classes and sub packages that are below the packageName and
-     * add them to the respective sets. Searches the package in a class directory.
-     */
-    private void findClassesInDirectory(File classDir,
-            String packagePrefix, String pathPrefix, Set<String> classNames,
-            Set<String> subpackageNames)
-            throws IOException {
-        File directory = new File(classDir, pathPrefix);
-
-        if (directory.exists()) {
-            for (File f : directory.listFiles()) {
-                String name = f.getName();
-                if (name.endsWith(CLASS_EXTENSION) && isToplevelClass(name)) {
-                    classNames.add(packagePrefix + getClassName(name));
-                } else if (f.isDirectory()) {
-                    subpackageNames.add(packagePrefix + name);
-                }
-            }
-        }
-    }
-
-    /**
-     * Finds all classes and sub packages that are below the packageName and
-     * add them to the respective sets. Searches the package in a single jar file.
-     */
-    private void findClassesInJar(File jarFile, String pathPrefix,
-            Set<String> classNames, Set<String> subpackageNames)
-            throws IOException {
-        Set<String> entryNames = getJarEntries(jarFile);
-        // check if the Jar contains the package.
-        if (!entryNames.contains(pathPrefix)) {
-            return;
-        }
-        int prefixLength = pathPrefix.length();
-        for (String entryName : entryNames) {
-            if (entryName.startsWith(pathPrefix)) {
-                if (entryName.endsWith(CLASS_EXTENSION)) {
-                    // check if the class is in the package itself or in one of its
-                    // subpackages.
-                    int index = entryName.indexOf('/', prefixLength);
-                    if (index >= 0) {
-                        String p = entryName.substring(0, index).replace('/', '.');
-                        subpackageNames.add(p);
-                    } else if (isToplevelClass(entryName)) {
-                        classNames.add(getClassName(entryName).replace('/', '.'));
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Finds all classes and sub packages that are below the packageName and
      * add them to the respective sets. Searches the package in a single apk file.
      */
     private void findClassesInApk(String apkPath, String packageName,
@@ -242,47 +191,6 @@
     }
 
     /**
-     * Gets the class and package entries from a Jar.
-     */
-    private Set<String> getJarEntries(File jarFile)
-            throws IOException {
-        Set<String> entryNames = jarFiles.get(jarFile);
-        if (entryNames == null) {
-            entryNames = new HashSet<>();
-            ZipFile zipFile = new ZipFile(jarFile);
-            Enumeration<? extends ZipEntry> entries = zipFile.entries();
-            while (entries.hasMoreElements()) {
-                String entryName = entries.nextElement().getName();
-                if (entryName.endsWith(CLASS_EXTENSION)) {
-                    // add the entry name of the class
-                    entryNames.add(entryName);
-
-                    // add the entry name of the classes package, i.e. the entry name of
-                    // the directory that the class is in. Used to quickly skip jar files
-                    // if they do not contain a certain package.
-                    //
-                    // Also add parent packages so that a JAR that contains
-                    // pkg1/pkg2/Foo.class will be marked as containing pkg1/ in addition
-                    // to pkg1/pkg2/ and pkg1/pkg2/Foo.class.  We're still interested in
-                    // JAR files that contains subpackages of a given package, even if
-                    // an intermediate package contains no direct classes.
-                    //
-                    // Classes in the default package will cause a single package named
-                    // "" to be added instead.
-                    int lastIndex = entryName.lastIndexOf('/');
-                    do {
-                        String packageName = entryName.substring(0, lastIndex + 1);
-                        entryNames.add(packageName);
-                        lastIndex = entryName.lastIndexOf('/', lastIndex - 1);
-                    } while (lastIndex > 0);
-                }
-            }
-            jarFiles.put(jarFile, entryNames);
-        }
-        return entryNames;
-    }
-
-    /**
      * Checks if a given file name represents a toplevel class.
      */
     private static boolean isToplevelClass(String fileName) {
@@ -290,14 +198,6 @@
     }
 
     /**
-     * Given the absolute path of a class file, return the class name.
-     */
-    private static String getClassName(String className) {
-        int classNameEnd = className.length() - CLASS_EXTENSION.length();
-        return className.substring(0, classNameEnd);
-    }
-
-    /**
      * Gets the class path from the System Property "java.class.path" and splits
      * it up into the individual elements.
      */
@@ -307,7 +207,56 @@
         return classPath.split(Pattern.quote(separator));
     }
 
-    public void setClassLoader(ClassLoader classLoader) {
-        this.classLoader = classLoader;
+    /**
+     * The Package object doesn't allow you to iterate over the contained
+     * classes and subpackages of that package.  This is a version that does.
+     */
+    private class ClassPathPackageInfo {
+
+        private final String packageName;
+        private final Set<String> subpackageNames;
+        private final Set<Class<?>> topLevelClasses;
+
+        private ClassPathPackageInfo(String packageName,
+                Set<String> subpackageNames, Set<Class<?>> topLevelClasses) {
+            this.packageName = packageName;
+            this.subpackageNames = Collections.unmodifiableSet(subpackageNames);
+            this.topLevelClasses = Collections.unmodifiableSet(topLevelClasses);
+        }
+
+        private Set<ClassPathPackageInfo> getSubpackages() {
+            Set<ClassPathPackageInfo> info = new HashSet<>();
+            for (String name : subpackageNames) {
+                info.add(cache.get(name));
+            }
+            return info;
+        }
+
+        private Set<Class<?>> getTopLevelClassesRecursive() {
+            Set<Class<?>> set = new HashSet<>();
+            addTopLevelClassesTo(set);
+            return set;
+        }
+
+        private void addTopLevelClassesTo(Set<Class<?>> set) {
+            set.addAll(topLevelClasses);
+            for (ClassPathPackageInfo info : getSubpackages()) {
+                info.addTopLevelClassesTo(set);
+            }
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (obj instanceof ClassPathPackageInfo) {
+                ClassPathPackageInfo that = (ClassPathPackageInfo) obj;
+                return (this.packageName).equals(that.packageName);
+            }
+            return false;
+        }
+
+        @Override
+        public int hashCode() {
+            return packageName.hashCode();
+        }
     }
 }
diff --git a/test-runner/src/android/test/DatabaseTestUtils.java b/test-runner/src/android/test/DatabaseTestUtils.java
deleted file mode 100644
index 1980d92..0000000
--- a/test-runner/src/android/test/DatabaseTestUtils.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test;
-
-import android.database.sqlite.SQLiteDatabase;
-import android.database.Cursor;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * A collection of utilities for writing unit tests for database code.
- * @hide pending API council approval
- */
-@Deprecated
-public class DatabaseTestUtils {
-
-    /**
-     * Compares the schema of two databases and asserts that they are equal.
-     * @param expectedDb the db that is known to have the correct schema
-     * @param db the db whose schema should be checked
-     */
-    public static void assertSchemaEquals(SQLiteDatabase expectedDb, SQLiteDatabase db) {
-        Set<String> expectedSchema = getSchemaSet(expectedDb);
-        Set<String> schema = getSchemaSet(db);
-        MoreAsserts.assertEquals(expectedSchema, schema);
-    }
-
-    private static Set<String> getSchemaSet(SQLiteDatabase db) {
-        Set<String> schemaSet = new HashSet<>();
-
-        Cursor entityCursor = db.rawQuery("SELECT sql FROM sqlite_master", null);
-        try {
-            while (entityCursor.moveToNext()) {
-                String sql = entityCursor.getString(0);
-                schemaSet.add(sql);
-            }
-        } finally {
-            entityCursor.close();
-        }
-        return schemaSet;
-    }
-}
diff --git a/test-runner/src/android/test/InstrumentationCoreTestRunner.java b/test-runner/src/android/test/InstrumentationCoreTestRunner.java
deleted file mode 100644
index 2b05e4a..0000000
--- a/test-runner/src/android/test/InstrumentationCoreTestRunner.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test;
-
-import java.io.File;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.List;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestListener;
-import android.os.Bundle;
-import android.test.suitebuilder.TestMethod;
-import android.test.suitebuilder.annotation.HasAnnotation;
-import android.util.Log;
-
-/**
- * This test runner extends the default InstrumentationTestRunner. It overrides
- * the {@code onCreate(Bundle)} method and sets the system properties necessary
- * for many core tests to run. This is needed because there are some core tests
- * that need writing access to the file system. We also need to set the harness
- * Thread's context ClassLoader. Otherwise some classes and resources will not
- * be found. Finally, we add a means to free memory allocated by a TestCase
- * after its execution.
- *
- * @hide
- */
-@Deprecated
-public class InstrumentationCoreTestRunner extends InstrumentationTestRunner {
-
-    /**
-     * Convenience definition of our log tag.
-     */
-    private static final String TAG = "InstrumentationCoreTestRunner";
-
-    /**
-     * True if (and only if) we are running in single-test mode (as opposed to
-     * batch mode).
-     */
-    private boolean singleTest = false;
-
-    @Override
-    public void onCreate(Bundle arguments) {
-        // We might want to move this to /sdcard, if is is mounted/writable.
-        File cacheDir = getTargetContext().getCacheDir();
-
-        // Set some properties that the core tests absolutely need.
-        System.setProperty("user.language", "en");
-        System.setProperty("user.region", "US");
-
-        System.setProperty("java.home", cacheDir.getAbsolutePath());
-        System.setProperty("user.home", cacheDir.getAbsolutePath());
-        System.setProperty("java.io.tmpdir", cacheDir.getAbsolutePath());
-
-        if (arguments != null) {
-            String classArg = arguments.getString(ARGUMENT_TEST_CLASS);
-            singleTest = classArg != null && classArg.contains("#");
-        }
-
-        super.onCreate(arguments);
-    }
-
-    @Override
-    protected AndroidTestRunner getAndroidTestRunner() {
-        AndroidTestRunner runner = super.getAndroidTestRunner();
-
-        runner.addTestListener(new TestListener() {
-            /**
-             * The last test class we executed code from.
-             */
-            private Class<?> lastClass;
-
-            /**
-             * The minimum time we expect a test to take.
-             */
-            private static final int MINIMUM_TIME = 100;
-
-            /**
-             * The start time of our current test in System.currentTimeMillis().
-             */
-            private long startTime;
-
-            public void startTest(Test test) {
-                if (test.getClass() != lastClass) {
-                    lastClass = test.getClass();
-                    printMemory(test.getClass());
-                }
-
-                Thread.currentThread().setContextClassLoader(
-                        test.getClass().getClassLoader());
-
-                startTime = System.currentTimeMillis();
-            }
-
-            public void endTest(Test test) {
-                if (test instanceof TestCase) {
-                    cleanup((TestCase)test);
-
-                    /*
-                     * Make sure all tests take at least MINIMUM_TIME to
-                     * complete. If they don't, we wait a bit. The Cupcake
-                     * Binder can't handle too many operations in a very
-                     * short time, which causes headache for the CTS.
-                     */
-                    long timeTaken = System.currentTimeMillis() - startTime;
-
-                    if (timeTaken < MINIMUM_TIME) {
-                        try {
-                            Thread.sleep(MINIMUM_TIME - timeTaken);
-                        } catch (InterruptedException ignored) {
-                            // We don't care.
-                        }
-                    }
-                }
-            }
-
-            public void addError(Test test, Throwable t) {
-                // This space intentionally left blank.
-            }
-
-            public void addFailure(Test test, AssertionFailedError t) {
-                // This space intentionally left blank.
-            }
-
-            /**
-             * Dumps some memory info.
-             */
-            private void printMemory(Class<? extends Test> testClass) {
-                Runtime runtime = Runtime.getRuntime();
-
-                long total = runtime.totalMemory();
-                long free = runtime.freeMemory();
-                long used = total - free;
-
-                Log.d(TAG, "Total memory  : " + total);
-                Log.d(TAG, "Used memory   : " + used);
-                Log.d(TAG, "Free memory   : " + free);
-                Log.d(TAG, "Now executing : " + testClass.getName());
-            }
-
-            /**
-             * Nulls all non-static reference fields in the given test class.
-             * This method helps us with those test classes that don't have an
-             * explicit tearDown() method. Normally the garbage collector should
-             * take care of everything, but since JUnit keeps references to all
-             * test cases, a little help might be a good idea.
-             */
-            private void cleanup(TestCase test) {
-                Class<?> clazz = test.getClass();
-
-                while (clazz != TestCase.class) {
-                    Field[] fields = clazz.getDeclaredFields();
-                    for (int i = 0; i < fields.length; i++) {
-                        Field f = fields[i];
-                        if (!f.getType().isPrimitive() &&
-                                !Modifier.isStatic(f.getModifiers())) {
-                            try {
-                                f.setAccessible(true);
-                                f.set(test, null);
-                            } catch (Exception ignored) {
-                                // Nothing we can do about it.
-                            }
-                        }
-                    }
-
-                    clazz = clazz.getSuperclass();
-                }
-            }
-
-        });
-
-        return runner;
-    }
-}
diff --git a/test-runner/src/android/test/InstrumentationTestRunner.java b/test-runner/src/android/test/InstrumentationTestRunner.java
index 9bd4c96..b2582c1 100644
--- a/test-runner/src/android/test/InstrumentationTestRunner.java
+++ b/test-runner/src/android/test/InstrumentationTestRunner.java
@@ -16,21 +16,18 @@
 
 package android.test;
 
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.SmallTest;
 import com.android.internal.util.Predicate;
-import com.android.internal.util.Predicates;
 
 import android.app.Activity;
 import android.app.Instrumentation;
 import android.os.Bundle;
 import android.os.Debug;
 import android.os.Looper;
-import android.os.Parcelable;
-import android.os.PerformanceCollector;
-import android.os.PerformanceCollector.PerformanceResultsWriter;
 import android.test.suitebuilder.TestMethod;
 import android.test.suitebuilder.TestPredicates;
 import android.test.suitebuilder.TestSuiteBuilder;
-import android.test.suitebuilder.annotation.HasAnnotation;
 import android.test.suitebuilder.annotation.LargeTest;
 import android.util.Log;
 
@@ -52,6 +49,8 @@
 import junit.runner.BaseTestRunner;
 import junit.textui.ResultPrinter;
 
+import static android.test.suitebuilder.TestPredicates.hasAnnotation;
+
 /**
  * An {@link Instrumentation} that runs various types of {@link junit.framework.TestCase}s against
  * an Android package (application).
@@ -178,13 +177,13 @@
 public class InstrumentationTestRunner extends Instrumentation implements TestSuiteProvider {
 
     /** @hide */
-    public static final String ARGUMENT_TEST_CLASS = "class";
+    static final String ARGUMENT_TEST_CLASS = "class";
     /** @hide */
-    public static final String ARGUMENT_TEST_PACKAGE = "package";
+    private static final String ARGUMENT_TEST_PACKAGE = "package";
     /** @hide */
-    public static final String ARGUMENT_TEST_SIZE_PREDICATE = "size";
+    private static final String ARGUMENT_TEST_SIZE_PREDICATE = "size";
     /** @hide */
-    public static final String ARGUMENT_DELAY_MSEC = "delay_msec";
+    static final String ARGUMENT_DELAY_MSEC = "delay_msec";
 
     private static final String SMALL_SUITE = "small";
     private static final String MEDIUM_SUITE = "medium";
@@ -196,6 +195,12 @@
     /** @hide */
     static final String ARGUMENT_NOT_ANNOTATION = "notAnnotation";
 
+    private static final Predicate<TestMethod> SELECT_SMALL = hasAnnotation(SmallTest.class);
+
+    private static final Predicate<TestMethod> SELECT_MEDIUM = hasAnnotation(MediumTest.class);
+
+    private static final Predicate<TestMethod> SELECT_LARGE = hasAnnotation(LargeTest.class);
+
     /**
      * This constant defines the maximum allowed runtime (in ms) for a test included in the "small"
      * suite. It is used to make an educated guess at what suite an unlabeled test belongs.
@@ -208,7 +213,7 @@
      */
     private static final float MEDIUM_SUITE_MAX_RUNTIME = 1000;
 
-    /**
+    /*
      * The following keys are used in the status bundle to provide structured reports to
      * an IInstrumentationWatcher.
      */
@@ -390,7 +395,6 @@
             WatcherResultPrinter resultPrinter = new WatcherResultPrinter(mTestCount);
             mTestRunner.addTestListener(new TestPrinter("TestRunner", false));
             mTestRunner.addTestListener(resultPrinter);
-            mTestRunner.setPerformanceResultsWriter(resultPrinter);
         }
         start();
     }
@@ -464,11 +468,11 @@
     private Predicate<TestMethod> getSizePredicateFromArg(String sizeArg) {
 
         if (SMALL_SUITE.equals(sizeArg)) {
-            return TestPredicates.SELECT_SMALL;
+            return SELECT_SMALL;
         } else if (MEDIUM_SUITE.equals(sizeArg)) {
-            return TestPredicates.SELECT_MEDIUM;
+            return SELECT_MEDIUM;
         } else if (LARGE_SUITE.equals(sizeArg)) {
-            return TestPredicates.SELECT_LARGE;
+            return SELECT_LARGE;
         } else {
             return null;
         }
@@ -476,28 +480,28 @@
 
    /**
     * Returns the test predicate object, corresponding to the annotation class value provided via
-    * the {@link ARGUMENT_ANNOTATION} argument.
+    * the {@link #ARGUMENT_ANNOTATION} argument.
     *
     * @return the predicate or <code>null</code>
     */
     private Predicate<TestMethod> getAnnotationPredicate(String annotationClassName) {
         Class<? extends Annotation> annotationClass = getAnnotationClass(annotationClassName);
         if (annotationClass != null) {
-            return new HasAnnotation(annotationClass);
+            return hasAnnotation(annotationClass);
         }
         return null;
     }
 
     /**
      * Returns the negative test predicate object, corresponding to the annotation class value
-     * provided via the {@link ARGUMENT_NOT_ANNOTATION} argument.
+     * provided via the {@link #ARGUMENT_NOT_ANNOTATION} argument.
      *
      * @return the predicate or <code>null</code>
      */
      private Predicate<TestMethod> getNotAnnotationPredicate(String annotationClassName) {
          Class<? extends Annotation> annotationClass = getAnnotationClass(annotationClassName);
          if (annotationClass != null) {
-             return Predicates.not(new HasAnnotation(annotationClass));
+             return TestPredicates.not(hasAnnotation(annotationClass));
          }
          return null;
      }
@@ -743,15 +747,12 @@
     /**
      * This class sends status reports back to the IInstrumentationWatcher
      */
-    private class WatcherResultPrinter implements TestListener, PerformanceResultsWriter {
+    private class WatcherResultPrinter implements TestListener {
         private final Bundle mResultTemplate;
         Bundle mTestResult;
         int mTestNum = 0;
         int mTestResultCode = 0;
         String mTestClass = null;
-        PerformanceCollector mPerfCollector = new PerformanceCollector();
-        boolean mIsTimedTest = false;
-        boolean mIncludeDetailedStats = false;
 
         public WatcherResultPrinter(int numTests) {
             mResultTemplate = new Bundle();
@@ -806,30 +807,6 @@
 
             sendStatus(REPORT_VALUE_RESULT_START, mTestResult);
             mTestResultCode = 0;
-
-            mIsTimedTest = false;
-            mIncludeDetailedStats = false;
-            try {
-                // Look for TimedTest annotation on both test class and test method
-                if (testMethod != null && testMethod.isAnnotationPresent(TimedTest.class)) {
-                    mIsTimedTest = true;
-                    mIncludeDetailedStats = testMethod.getAnnotation(
-                            TimedTest.class).includeDetailedStats();
-                } else if (test.getClass().isAnnotationPresent(TimedTest.class)) {
-                    mIsTimedTest = true;
-                    mIncludeDetailedStats = test.getClass().getAnnotation(
-                            TimedTest.class).includeDetailedStats();
-                }
-            } catch (SecurityException e) {
-                // ignore - the test with given name cannot be accessed. Will be handled during
-                // test execution
-            }
-
-            if (mIsTimedTest && mIncludeDetailedStats) {
-                mPerfCollector.beginSnapshot("");
-            } else if (mIsTimedTest) {
-                mPerfCollector.startTiming("");
-            }
         }
 
         /**
@@ -860,12 +837,6 @@
          * @see junit.framework.TestListener#endTest(Test)
          */
         public void endTest(Test test) {
-            if (mIsTimedTest && mIncludeDetailedStats) {
-                mTestResult.putAll(mPerfCollector.endSnapshot());
-            } else if (mIsTimedTest) {
-                writeStopTiming(mPerfCollector.stopTiming(""));
-            }
-
             if (mTestResultCode == 0) {
                 mTestResult.putString(Instrumentation.REPORT_KEY_STREAMRESULT, ".");
             }
@@ -878,50 +849,6 @@
             }
         }
 
-        public void writeBeginSnapshot(String label) {
-            // Do nothing
-        }
-
-        public void writeEndSnapshot(Bundle results) {
-            // Copy all snapshot data fields into mResults, which is outputted
-            // via Instrumentation.finish
-            mResults.putAll(results);
-        }
-
-        public void writeStartTiming(String label) {
-            // Do nothing
-        }
-
-        public void writeStopTiming(Bundle results) {
-            // Copy results into mTestResult by flattening list of iterations,
-            // which is outputted via WatcherResultPrinter.endTest
-            int i = 0;
-            for (Parcelable p :
-                    results.getParcelableArrayList(PerformanceCollector.METRIC_KEY_ITERATIONS)) {
-                Bundle iteration = (Bundle)p;
-                String index = "iteration" + i + ".";
-                mTestResult.putString(index + PerformanceCollector.METRIC_KEY_LABEL,
-                        iteration.getString(PerformanceCollector.METRIC_KEY_LABEL));
-                mTestResult.putLong(index + PerformanceCollector.METRIC_KEY_CPU_TIME,
-                        iteration.getLong(PerformanceCollector.METRIC_KEY_CPU_TIME));
-                mTestResult.putLong(index + PerformanceCollector.METRIC_KEY_EXECUTION_TIME,
-                        iteration.getLong(PerformanceCollector.METRIC_KEY_EXECUTION_TIME));
-                i++;
-            }
-        }
-
-        public void writeMeasurement(String label, long value) {
-            mTestResult.putLong(label, value);
-        }
-
-        public void writeMeasurement(String label, float value) {
-            mTestResult.putFloat(label, value);
-        }
-
-        public void writeMeasurement(String label, String value) {
-            mTestResult.putString(label, value);
-        }
-
         // TODO report the end of the cycle
     }
 }
diff --git a/test-runner/src/android/test/InstrumentationUtils.java b/test-runner/src/android/test/InstrumentationUtils.java
deleted file mode 100644
index cc50813..0000000
--- a/test-runner/src/android/test/InstrumentationUtils.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test;
-
-/**
- * The InstrumentationUtils class has all the utility functions needed for
- * instrumentation tests.
- *
- * {@hide} - Not currently used.
- */
-@Deprecated
-public class InstrumentationUtils {
-    /**
-     * An utility function that returns the menu identifier for a particular
-     * menu item.
-     *
-     * @param cls Class object of the class that handles the menu ite,.
-     * @param identifier Menu identifier.
-     * @return The integer corresponding to the menu item.
-     */
-    public static int getMenuIdentifier(Class cls, String identifier) {
-        int id = -1;
-        try {
-            Integer field = (Integer)cls.getDeclaredField(identifier).get(cls);
-            id = field.intValue();
-        } catch (NoSuchFieldException e) {
-            e.printStackTrace();
-        } catch (IllegalAccessException e) {
-            e.printStackTrace();
-        }
-        return id;
-    }
-
-}
diff --git a/test-runner/src/android/test/PackageInfoSources.java b/test-runner/src/android/test/PackageInfoSources.java
deleted file mode 100644
index 205f86b..0000000
--- a/test-runner/src/android/test/PackageInfoSources.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test;
-
-/**
- * {@hide} Not needed for SDK.
- */
-@Deprecated
-public class PackageInfoSources {
-
-    private static ClassPathPackageInfoSource classPathSource;
-
-    private PackageInfoSources() {
-    }
-
-    public static ClassPathPackageInfoSource forClassPath(ClassLoader classLoader) {
-        if (classPathSource == null) {
-            classPathSource = new ClassPathPackageInfoSource();
-            classPathSource.setClassLoader(classLoader);
-        }
-        return classPathSource;
-    }
-
-}
diff --git a/test-runner/src/android/test/PerformanceCollectorTestCase.java b/test-runner/src/android/test/PerformanceCollectorTestCase.java
deleted file mode 100644
index 3a5dafc..0000000
--- a/test-runner/src/android/test/PerformanceCollectorTestCase.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test;
-
-import android.os.PerformanceCollector;
-import android.os.PerformanceCollector.PerformanceResultsWriter;
-
-/**
- * A simple interface for passing in a PerformanceResultsWriter instance to be used with
- * PerformanceCollector.
- * <p/>
- * A one line implementation of {@link #setPerformanceResultsWriter(PerformanceResultsWriter)}
- * is sufficient in most cases:
- * <p/>
- * <code>mPerfCollector.setPerformanceResultsWriter(writer);</code>
- *
- * {@hide} Not needed for SDK.
- */
-@Deprecated
-public interface PerformanceCollectorTestCase {
-    public PerformanceCollector mPerfCollector = new PerformanceCollector();
-
-    public void setPerformanceResultsWriter(PerformanceResultsWriter writer);
-}
diff --git a/test-runner/src/android/test/TestCase.java b/test-runner/src/android/test/TestCase.java
deleted file mode 100644
index b234f44..0000000
--- a/test-runner/src/android/test/TestCase.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test;
-
-import android.content.Context;
-
-/**
- * {@hide}
- * More complex interface for test cases.
- *
- * <p>Just implementing Runnable is enough for many test cases.  If you
- * have additional setup or teardown, this interface might be for you,
- * especially if you need to share it between different test cases, or your
- * teardown code must execute regardless of whether your test passed.
- *
- * <p>See the android.test package documentation (click the more... link)
- * for a full description
- */
-@Deprecated
-public interface TestCase extends Runnable
-{
-    /**
-     * Called before run() is called.
-     */
-    public void setUp(Context context);
-
-    /**
-     * Called after run() is called, even if run() threw an exception, but
-     * not if setUp() threw an execption.
-     */
-    public void tearDown();
-}
-
diff --git a/test-runner/src/android/test/TestCaseUtil.java b/test-runner/src/android/test/TestCaseUtil.java
index dc053a2..1562909 100644
--- a/test-runner/src/android/test/TestCaseUtil.java
+++ b/test-runner/src/android/test/TestCaseUtil.java
@@ -40,16 +40,6 @@
     private TestCaseUtil() {
     }
 
-    @SuppressWarnings("unchecked")
-    public static List<String> getTestCaseNames(Test test, boolean flatten) {
-        List<Test> tests = (List<Test>) getTests(test, flatten);
-        List<String> testCaseNames = new ArrayList<>();
-        for (Test aTest : tests) {
-            testCaseNames.add(getTestName(aTest));
-        }
-        return testCaseNames;
-    }
-
     public static List<? extends Test> getTests(Test test, boolean flatten) {
         return getTests(test, flatten, new HashSet<Class<?>>());
     }
@@ -92,7 +82,7 @@
         return testCases;
     }
 
-    private static Test invokeSuiteMethodIfPossible(Class testClass,
+    static Test invokeSuiteMethodIfPossible(Class testClass,
             Set<Class<?>> seen) {
         try {
             Method suiteMethod = testClass.getMethod(
@@ -120,7 +110,7 @@
         return null;
     }
 
-    public static String getTestName(Test test) {
+    static String getTestName(Test test) {
         if (test instanceof TestCase) {
             TestCase testCase = (TestCase) test;
             return testCase.getName();
@@ -138,34 +128,4 @@
         }
         return "";
     }
-
-    public static Test getTestAtIndex(TestSuite testSuite, int position) {
-        int index = 0;
-        Enumeration enumeration = testSuite.tests();
-        while (enumeration.hasMoreElements()) {
-            Test test = (Test) enumeration.nextElement();
-            if (index == position) {
-                return test;
-            }
-            index++;
-        }
-        return null;
-    }
-
-    public static TestSuite createTestSuite(Class<? extends Test> testClass)
-            throws InstantiationException, IllegalAccessException {
-
-        Test test = invokeSuiteMethodIfPossible(testClass,
-                new HashSet<Class<?>>());
-        if (test == null) {
-            return new TestSuite(testClass);
-
-        } else if (TestCase.class.isAssignableFrom(test.getClass())) {
-            TestSuite testSuite = new TestSuite(test.getClass().getName());
-            testSuite.addTest(test);
-            return testSuite;
-        }
-
-        return (TestSuite) test;
-    }
 }
diff --git a/test-runner/src/android/test/TestPrinter.java b/test-runner/src/android/test/TestPrinter.java
index a23f06d..01d392d 100644
--- a/test-runner/src/android/test/TestPrinter.java
+++ b/test-runner/src/android/test/TestPrinter.java
@@ -21,7 +21,6 @@
 import junit.framework.TestListener;
 
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
 /**
@@ -34,52 +33,37 @@
  * {@hide} Not needed for 1.0 SDK.
  */
 @Deprecated
-public class TestPrinter implements TestRunner.Listener, TestListener {
+class TestPrinter implements TestListener {
 
     private String mTag;
     private boolean mOnlyFailures;
     private Set<String> mFailedTests = new HashSet<String>();
 
 
-    public TestPrinter(String tag, boolean onlyFailures) {
+    TestPrinter(String tag, boolean onlyFailures) {
         mTag = tag;
         mOnlyFailures = onlyFailures;
     }
 
-    public void started(String className) {
+    private void started(String className) {
         if (!mOnlyFailures) {
             Log.i(mTag, "started: " + className);
         }
     }
 
-    public void finished(String className) {
+    private void finished(String className) {
         if (!mOnlyFailures) {
             Log.i(mTag, "finished: " + className);
         }
     }
 
-    public void performance(String className,
-            long itemTimeNS, int iterations,
-            List<TestRunner.IntermediateTime> intermediates) {
-        Log.i(mTag, "perf: " + className + " = " + itemTimeNS + "ns/op (done "
-                + iterations + " times)");
-        if (intermediates != null && intermediates.size() > 0) {
-            int N = intermediates.size();
-            for (int i = 0; i < N; i++) {
-                TestRunner.IntermediateTime time = intermediates.get(i);
-                Log.i(mTag, "  intermediate: " + time.name + " = "
-                        + time.timeInNS + "ns");
-            }
-        }
-    }
-
-    public void passed(String className) {
+    private void passed(String className) {
         if (!mOnlyFailures) {
             Log.i(mTag, "passed: " + className);
         }
     }
 
-    public void failed(String className, Throwable exception) {
+    private void failed(String className, Throwable exception) {
         Log.i(mTag, "failed: " + className);
         Log.i(mTag, "----- begin exception -----");
         Log.i(mTag, "", exception);
diff --git a/test-runner/src/android/test/TestRunner.java b/test-runner/src/android/test/TestRunner.java
deleted file mode 100644
index ff045c3..0000000
--- a/test-runner/src/android/test/TestRunner.java
+++ /dev/null
@@ -1,725 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test;
-
-import android.content.Context;
-import android.util.Log;
-import android.os.Debug;
-import android.os.SystemClock;
-
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.TestSuite;
-import junit.framework.TestListener;
-import junit.framework.Test;
-import junit.framework.TestResult;
-
-/**
- * Support class that actually runs a test. Android uses this class,
- * and you probably will not need to instantiate, extend, or call this
- * class yourself. See the full {@link android.test} package description
- * to learn more about testing Android applications.
- *
- * {@hide} Not needed for 1.0 SDK.
- */
-@Deprecated
-public class TestRunner implements PerformanceTestCase.Intermediates {
-    public static final int REGRESSION = 0;
-    public static final int PERFORMANCE = 1;
-    public static final int PROFILING = 2;
-
-    public static final int CLEARSCREEN = 0;
-    private static final String TAG = "TestHarness";
-    private Context mContext;
-
-    private int mMode = REGRESSION;
-
-    private List<Listener> mListeners = new ArrayList<>();
-    private int mPassed;
-    private int mFailed;
-
-    private int mInternalIterations;
-    private long mStartTime;
-    private long mEndTime;
-
-    private String mClassName;
-
-    List<IntermediateTime> mIntermediates = null;
-
-    private static Class mRunnableClass;
-    private static Class mJUnitClass;
-
-    static {
-        try {
-            mRunnableClass = Class.forName("java.lang.Runnable", false, null);
-            mJUnitClass = Class.forName("junit.framework.TestCase", false, null);
-        } catch (ClassNotFoundException ex) {
-            throw new RuntimeException("shouldn't happen", ex);
-        }
-    }
-
-    public class JunitTestSuite extends TestSuite implements TestListener {
-        boolean mError = false;
-
-        public JunitTestSuite() {
-            super();
-        }
-
-        @Override
-        public void run(TestResult result) {
-            result.addListener(this);
-            super.run(result);
-            result.removeListener(this);
-        }
-
-        /**
-         * Implemented method of the interface TestListener which will listen for the
-         * start of a test.
-         *
-         * @param test
-         */
-        public void startTest(Test test) {
-            started(test.toString());
-        }
-
-        /**
-         * Implemented method of the interface TestListener which will listen for the
-         * end of the test.
-         *
-         * @param test
-         */
-        public void endTest(Test test) {
-            finished(test.toString());
-            if (!mError) {
-                passed(test.toString());
-            }
-        }
-
-        /**
-         * Implemented method of the interface TestListener which will listen for an
-         * mError while running the test.
-         *
-         * @param test
-         */
-        public void addError(Test test, Throwable t) {
-            mError = true;
-            failed(test.toString(), t);
-        }
-
-        public void addFailure(Test test, junit.framework.AssertionFailedError t) {
-            mError = true;
-            failed(test.toString(), t);
-        }
-    }
-
-    /**
-     * Listener.performance() 'intermediates' argument is a list of these.
-     */
-    public static class IntermediateTime {
-        public IntermediateTime(String name, long timeInNS) {
-            this.name = name;
-            this.timeInNS = timeInNS;
-        }
-
-        public String name;
-        public long timeInNS;
-    }
-
-    /**
-     * Support class that receives status on test progress. You should not need to
-     * extend this interface yourself.
-     */
-    public interface Listener {
-        void started(String className);
-        void finished(String className);
-        void performance(String className,
-                long itemTimeNS, int iterations,
-                List<IntermediateTime> itermediates);
-        void passed(String className);
-        void failed(String className, Throwable execption);
-    }
-
-    public TestRunner(Context context) {
-        mContext = context;
-    }
-
-    public void addListener(Listener listener) {
-        mListeners.add(listener);
-    }
-
-    public void startProfiling() {
-        File file = new File("/tmp/trace");
-        file.mkdir();
-        String base = "/tmp/trace/" + mClassName + ".dmtrace";
-        Debug.startMethodTracing(base, 8 * 1024 * 1024);
-    }
-
-    public void finishProfiling() {
-        Debug.stopMethodTracing();
-    }
-
-    private void started(String className) {
-
-        int count = mListeners.size();
-        for (int i = 0; i < count; i++) {
-            mListeners.get(i).started(className);
-        }
-    }
-
-    private void finished(String className) {
-        int count = mListeners.size();
-        for (int i = 0; i < count; i++) {
-            mListeners.get(i).finished(className);
-        }
-    }
-
-    private void performance(String className,
-            long itemTimeNS,
-            int iterations,
-            List<IntermediateTime> intermediates) {
-        int count = mListeners.size();
-        for (int i = 0; i < count; i++) {
-            mListeners.get(i).performance(className,
-                    itemTimeNS,
-                    iterations,
-                    intermediates);
-        }
-    }
-
-    public void passed(String className) {
-        mPassed++;
-        int count = mListeners.size();
-        for (int i = 0; i < count; i++) {
-            mListeners.get(i).passed(className);
-        }
-    }
-
-    public void failed(String className, Throwable exception) {
-        mFailed++;
-        int count = mListeners.size();
-        for (int i = 0; i < count; i++) {
-            mListeners.get(i).failed(className, exception);
-        }
-    }
-
-    public int passedCount() {
-        return mPassed;
-    }
-
-    public int failedCount() {
-        return mFailed;
-    }
-
-    public void run(String[] classes) {
-        for (String cl : classes) {
-            run(cl);
-        }
-    }
-
-    public void setInternalIterations(int count) {
-        mInternalIterations = count;
-    }
-
-    public void startTiming(boolean realTime) {
-        if (realTime) {
-            mStartTime = System.currentTimeMillis();
-        } else {
-            mStartTime = SystemClock.currentThreadTimeMillis();
-        }
-    }
-
-    public void addIntermediate(String name) {
-        addIntermediate(name, (System.currentTimeMillis() - mStartTime) * 1000000);
-    }
-
-    public void addIntermediate(String name, long timeInNS) {
-        mIntermediates.add(new IntermediateTime(name, timeInNS));
-    }
-
-    public void finishTiming(boolean realTime) {
-        if (realTime) {
-            mEndTime = System.currentTimeMillis();
-        } else {
-            mEndTime = SystemClock.currentThreadTimeMillis();
-        }
-    }
-
-    public void setPerformanceMode(int mode) {
-        mMode = mode;
-    }
-
-    private void missingTest(String className, Throwable e) {
-        started(className);
-        finished(className);
-        failed(className, e);
-    }
-
-    /*
-    This class determines if more suites are added to this class then adds all individual
-    test classes to a test suite for run
-     */
-    public void run(String className) {
-        try {
-            mClassName = className;
-            Class clazz = mContext.getClassLoader().loadClass(className);
-            Method method = getChildrenMethod(clazz);
-            if (method != null) {
-                String[] children = getChildren(method);
-                run(children);
-            } else if (mRunnableClass.isAssignableFrom(clazz)) {
-                Runnable test = (Runnable) clazz.newInstance();
-                TestCase testcase = null;
-                if (test instanceof TestCase) {
-                    testcase = (TestCase) test;
-                }
-                Throwable e = null;
-                boolean didSetup = false;
-                started(className);
-                try {
-                    if (testcase != null) {
-                        testcase.setUp(mContext);
-                        didSetup = true;
-                    }
-                    if (mMode == PERFORMANCE) {
-                        runInPerformanceMode(test, className, false, className);
-                    } else if (mMode == PROFILING) {
-                        //Need a way to mark a test to be run in profiling mode or not.
-                        startProfiling();
-                        test.run();
-                        finishProfiling();
-                    } else {
-                        test.run();
-                    }
-                } catch (Throwable ex) {
-                    e = ex;
-                }
-                if (testcase != null && didSetup) {
-                    try {
-                        testcase.tearDown();
-                    } catch (Throwable ex) {
-                        e = ex;
-                    }
-                }
-                finished(className);
-                if (e == null) {
-                    passed(className);
-                } else {
-                    failed(className, e);
-                }
-            } else if (mJUnitClass.isAssignableFrom(clazz)) {
-                Throwable e = null;
-                //Create a Junit Suite.
-                JunitTestSuite suite = new JunitTestSuite();
-                Method[] methods = getAllTestMethods(clazz);
-                for (Method m : methods) {
-                    junit.framework.TestCase test = (junit.framework.TestCase) clazz.newInstance();
-                    test.setName(m.getName());
-
-                    if (test instanceof AndroidTestCase) {
-                        AndroidTestCase testcase = (AndroidTestCase) test;
-                        try {
-                            testcase.setContext(mContext);
-                            testcase.setTestContext(mContext);
-                        } catch (Exception ex) {
-                            Log.i("TestHarness", ex.toString());
-                        }
-                    }
-                    suite.addTest(test);
-                }
-                if (mMode == PERFORMANCE) {
-                    final int testCount = suite.testCount();
-
-                    for (int j = 0; j < testCount; j++) {
-                        Test test = suite.testAt(j);
-                        started(test.toString());
-                        try {
-                            runInPerformanceMode(test, className, true, test.toString());
-                        } catch (Throwable ex) {
-                            e = ex;
-                        }
-                        finished(test.toString());
-                        if (e == null) {
-                            passed(test.toString());
-                        } else {
-                            failed(test.toString(), e);
-                        }
-                    }
-                } else if (mMode == PROFILING) {
-                    //Need a way to mark a test to be run in profiling mode or not.
-                    startProfiling();
-                    junit.textui.TestRunner.run(suite);
-                    finishProfiling();
-                } else {
-                    junit.textui.TestRunner.run(suite);
-                }
-            } else {
-                System.out.println("Test wasn't Runnable and didn't have a"
-                        + " children method: " + className);
-            }
-        } catch (ClassNotFoundException e) {
-            Log.e("ClassNotFoundException for " + className, e.toString());
-            if (isJunitTest(className)) {
-                runSingleJunitTest(className);
-            } else {
-                missingTest(className, e);
-            }
-        } catch (InstantiationException e) {
-            System.out.println("InstantiationException for " + className);
-            missingTest(className, e);
-        } catch (IllegalAccessException e) {
-            System.out.println("IllegalAccessException for " + className);
-            missingTest(className, e);
-        }
-    }
-
-    public void runInPerformanceMode(Object testCase, String className, boolean junitTest,
-            String testNameInDb) throws Exception {
-        boolean increaseIterations = true;
-        int iterations = 1;
-        long duration = 0;
-        mIntermediates = null;
-
-        mInternalIterations = 1;
-        Class clazz = mContext.getClassLoader().loadClass(className);
-        Object perftest = clazz.newInstance();
-
-        PerformanceTestCase perftestcase = null;
-        if (perftest instanceof PerformanceTestCase) {
-            perftestcase = (PerformanceTestCase) perftest;
-            // only run the test if it is not marked as a performance only test
-            if (mMode == REGRESSION && perftestcase.isPerformanceOnly()) return;
-        }
-
-        // First force GCs, to avoid GCs happening during out
-        // test and skewing its time.
-        Runtime.getRuntime().runFinalization();
-        Runtime.getRuntime().gc();
-
-        if (perftestcase != null) {
-            mIntermediates = new ArrayList<IntermediateTime>();
-            iterations = perftestcase.startPerformance(this);
-            if (iterations > 0) {
-                increaseIterations = false;
-            } else {
-                iterations = 1;
-            }
-        }
-
-        // Pause briefly to let things settle down...
-        Thread.sleep(1000);
-        do {
-            mEndTime = 0;
-            if (increaseIterations) {
-                // Test case does not implement
-                // PerformanceTestCase or returned 0 iterations,
-                // so we take care of measure the whole test time.
-                mStartTime = SystemClock.currentThreadTimeMillis();
-            } else {
-                // Try to make it obvious if the test case
-                // doesn't call startTiming().
-                mStartTime = 0;
-            }
-
-            if (junitTest) {
-                for (int i = 0; i < iterations; i++) {
-                    junit.textui.TestRunner.run((junit.framework.Test) testCase);
-                }
-            } else {
-                Runnable test = (Runnable) testCase;
-                for (int i = 0; i < iterations; i++) {
-                    test.run();
-                }
-            }
-
-            long endTime = mEndTime;
-            if (endTime == 0) {
-                endTime = SystemClock.currentThreadTimeMillis();
-            }
-
-            duration = endTime - mStartTime;
-            if (!increaseIterations) {
-                break;
-            }
-            if (duration <= 1) {
-                iterations *= 1000;
-            } else if (duration <= 10) {
-                iterations *= 100;
-            } else if (duration < 100) {
-                iterations *= 10;
-            } else if (duration < 1000) {
-                iterations *= (int) ((1000 / duration) + 2);
-            } else {
-                break;
-            }
-        } while (true);
-
-        if (duration != 0) {
-            iterations *= mInternalIterations;
-            performance(testNameInDb, (duration * 1000000) / iterations,
-                    iterations, mIntermediates);
-        }
-    }
-
-    public void runSingleJunitTest(String className) {
-        Throwable excep = null;
-        int index = className.lastIndexOf('$');
-        String testName = "";
-        String originalClassName = className;
-        if (index >= 0) {
-            className = className.substring(0, index);
-            testName = originalClassName.substring(index + 1);
-        }
-        try {
-            Class clazz = mContext.getClassLoader().loadClass(className);
-            if (mJUnitClass.isAssignableFrom(clazz)) {
-                junit.framework.TestCase test = (junit.framework.TestCase) clazz.newInstance();
-                JunitTestSuite newSuite = new JunitTestSuite();
-                test.setName(testName);
-
-                if (test instanceof AndroidTestCase) {
-                    AndroidTestCase testcase = (AndroidTestCase) test;
-                    try {
-                        testcase.setContext(mContext);
-                    } catch (Exception ex) {
-                        Log.w(TAG, "Exception encountered while trying to set the context.", ex);
-                    }
-                }
-                newSuite.addTest(test);
-
-                if (mMode == PERFORMANCE) {
-                    try {
-                        started(test.toString());
-                        runInPerformanceMode(test, className, true, test.toString());
-                        finished(test.toString());
-                        if (excep == null) {
-                            passed(test.toString());
-                        } else {
-                            failed(test.toString(), excep);
-                        }
-                    } catch (Throwable ex) {
-                        excep = ex;
-                    }
-
-                } else if (mMode == PROFILING) {
-                    startProfiling();
-                    junit.textui.TestRunner.run(newSuite);
-                    finishProfiling();
-                } else {
-                    junit.textui.TestRunner.run(newSuite);
-                }
-            }
-        } catch (ClassNotFoundException e) {
-            Log.e("TestHarness", "No test case to run", e);
-        } catch (IllegalAccessException e) {
-            Log.e("TestHarness", "Illegal Access Exception", e);
-        } catch (InstantiationException e) {
-            Log.e("TestHarness", "Instantiation Exception", e);
-        }
-    }
-
-    public static Method getChildrenMethod(Class clazz) {
-        try {
-            return clazz.getMethod("children", (Class[]) null);
-        } catch (NoSuchMethodException e) {
-        }
-
-        return null;
-    }
-
-    public static Method getChildrenMethod(Context c, String className) {
-        try {
-            return getChildrenMethod(c.getClassLoader().loadClass(className));
-        } catch (ClassNotFoundException e) {
-        }
-        return null;
-    }
-
-    public static String[] getChildren(Context c, String className) {
-        Method m = getChildrenMethod(c, className);
-        String[] testChildren = getTestChildren(c, className);
-        if (m == null & testChildren == null) {
-            throw new RuntimeException("couldn't get children method for "
-                    + className);
-        }
-        if (m != null) {
-            String[] children = getChildren(m);
-            if (testChildren != null) {
-                String[] allChildren = new String[testChildren.length + children.length];
-                System.arraycopy(children, 0, allChildren, 0, children.length);
-                System.arraycopy(testChildren, 0, allChildren, children.length, testChildren.length);
-                return allChildren;
-            } else {
-                return children;
-            }
-        } else {
-            if (testChildren != null) {
-                return testChildren;
-            }
-        }
-        return null;
-    }
-
-    public static String[] getChildren(Method m) {
-        try {
-            if (!Modifier.isStatic(m.getModifiers())) {
-                throw new RuntimeException("children method is not static");
-            }
-            return (String[]) m.invoke(null, (Object[]) null);
-        } catch (IllegalAccessException e) {
-        } catch (InvocationTargetException e) {
-        }
-        return new String[0];
-    }
-
-    public static String[] getTestChildren(Context c, String className) {
-        try {
-            Class clazz = c.getClassLoader().loadClass(className);
-
-            if (mJUnitClass.isAssignableFrom(clazz)) {
-                return getTestChildren(clazz);
-            }
-        } catch (ClassNotFoundException e) {
-            Log.e("TestHarness", "No class found", e);
-        }
-        return null;
-    }
-
-    public static String[] getTestChildren(Class clazz) {
-        Method[] methods = getAllTestMethods(clazz);
-
-        String[] onScreenTestNames = new String[methods.length];
-        int index = 0;
-        for (Method m : methods) {
-            onScreenTestNames[index] = clazz.getName() + "$" + m.getName();
-            index++;
-        }
-        return onScreenTestNames;
-    }
-
-    public static Method[] getAllTestMethods(Class clazz) {
-        Method[] allMethods = clazz.getDeclaredMethods();
-        int numOfMethods = 0;
-        for (Method m : allMethods) {
-            boolean mTrue = isTestMethod(m);
-            if (mTrue) {
-                numOfMethods++;
-            }
-        }
-        int index = 0;
-        Method[] testMethods = new Method[numOfMethods];
-        for (Method m : allMethods) {
-            boolean mTrue = isTestMethod(m);
-            if (mTrue) {
-                testMethods[index] = m;
-                index++;
-            }
-        }
-        return testMethods;
-    }
-
-    private static boolean isTestMethod(Method m) {
-        return m.getName().startsWith("test") &&
-                m.getReturnType() == void.class &&
-                m.getParameterTypes().length == 0;
-    }
-
-    public static int countJunitTests(Class clazz) {
-        Method[] allTestMethods = getAllTestMethods(clazz);
-        int numberofMethods = allTestMethods.length;
-
-        return numberofMethods;
-    }
-
-    public static boolean isTestSuite(Context c, String className) {
-        boolean childrenMethods = getChildrenMethod(c, className) != null;
-
-        try {
-            Class clazz = c.getClassLoader().loadClass(className);
-            if (mJUnitClass.isAssignableFrom(clazz)) {
-                int numTests = countJunitTests(clazz);
-                if (numTests > 0)
-                    childrenMethods = true;
-            }
-        } catch (ClassNotFoundException e) {
-        }
-        return childrenMethods;
-    }
-
-
-    public boolean isJunitTest(String className) {
-        int index = className.lastIndexOf('$');
-        if (index >= 0) {
-            className = className.substring(0, index);
-        }
-        try {
-            Class clazz = mContext.getClassLoader().loadClass(className);
-            if (mJUnitClass.isAssignableFrom(clazz)) {
-                return true;
-            }
-        } catch (ClassNotFoundException e) {
-        }
-        return false;
-    }
-
-    /**
-     * Returns the number of tests that will be run if you try to do this.
-     */
-    public static int countTests(Context c, String className) {
-        try {
-            Class clazz = c.getClassLoader().loadClass(className);
-            Method method = getChildrenMethod(clazz);
-            if (method != null) {
-
-                String[] children = getChildren(method);
-                int rv = 0;
-                for (String child : children) {
-                    rv += countTests(c, child);
-                }
-                return rv;
-            } else if (mRunnableClass.isAssignableFrom(clazz)) {
-                return 1;
-            } else if (mJUnitClass.isAssignableFrom(clazz)) {
-                return countJunitTests(clazz);
-            }
-        } catch (ClassNotFoundException e) {
-            return 1; // this gets the count right, because either this test
-            // is missing, and it will fail when run or it is a single Junit test to be run.
-        }
-        return 0;
-    }
-
-    /**
-     * Returns a title to display given the className of a test.
-     * <p/>
-     * <p>Currently this function just returns the portion of the
-     * class name after the last '.'
-     */
-    public static String getTitle(String className) {
-        int indexDot = className.lastIndexOf('.');
-        int indexDollar = className.lastIndexOf('$');
-        int index = indexDot > indexDollar ? indexDot : indexDollar;
-        if (index >= 0) {
-            className = className.substring(index + 1);
-        }
-        return className;
-    }
-}
diff --git a/test-runner/src/android/test/TimedTest.java b/test-runner/src/android/test/TimedTest.java
deleted file mode 100644
index cb15ef9..0000000
--- a/test-runner/src/android/test/TimedTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * This annotation can be used on an {@link junit.framework.TestCase}'s test methods. When the
- * annotation is present, the test method is timed and the results written through instrumentation
- * output. It can also be used on the class itself, which is equivalent to tagging all test methods
- * with this annotation.
- * <p/>
- * Setting {@link #includeDetailedStats()} to true causes additional metrics such as memory usage
- * and binder transactions to be gathered and written through instrumentation output.
- *
- * {@hide} Pending approval for public API.
- */
-@Deprecated
-@Retention(RetentionPolicy.RUNTIME)
-public @interface TimedTest {
-    boolean includeDetailedStats() default false;
-}
diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java
index 3cb1f39..7e08f51 100644
--- a/test-runner/src/android/test/mock/MockPackageManager.java
+++ b/test-runner/src/android/test/mock/MockPackageManager.java
@@ -321,6 +321,12 @@
         throw new UnsupportedOperationException();
     }
 
+    /** @hide */
+    @Override
+    public String[] getNamesForUids(int uid[]) {
+        throw new UnsupportedOperationException();
+    }
+
     /**
      * @hide - to match hiding in superclass
      */
diff --git a/test-runner/src/android/test/suitebuilder/AssignableFrom.java b/test-runner/src/android/test/suitebuilder/AssignableFrom.java
index 38b4ee3..84db066 100644
--- a/test-runner/src/android/test/suitebuilder/AssignableFrom.java
+++ b/test-runner/src/android/test/suitebuilder/AssignableFrom.java
@@ -20,9 +20,9 @@
 
 class AssignableFrom implements Predicate<TestMethod> {
 
-    private final Class root;
+    private final Class<?> root;
 
-    AssignableFrom(Class root) {
+    AssignableFrom(Class<?> root) {
         this.root = root;
     }
 
diff --git a/test-runner/src/android/test/suitebuilder/InstrumentationTestSuiteBuilder.java b/test-runner/src/android/test/suitebuilder/InstrumentationTestSuiteBuilder.java
deleted file mode 100644
index 128396e..0000000
--- a/test-runner/src/android/test/suitebuilder/InstrumentationTestSuiteBuilder.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test.suitebuilder;
-
-/**
- * A suite builder that finds instrumentation tests.
- * 
- * {@hide} Not needed for 1.0 SDK.
- */
-public class InstrumentationTestSuiteBuilder extends TestSuiteBuilder {
-
-    public InstrumentationTestSuiteBuilder(Class clazz) {
-        this(clazz.getName(), clazz.getClassLoader());
-    }
-
-
-    public InstrumentationTestSuiteBuilder(String name, ClassLoader classLoader) {
-        super(name, classLoader);
-        addRequirements(TestPredicates.SELECT_INSTRUMENTATION);
-    }
-}
diff --git a/test-runner/src/android/test/suitebuilder/TestGrouping.java b/test-runner/src/android/test/suitebuilder/TestGrouping.java
index a2b94ff..030bc42 100644
--- a/test-runner/src/android/test/suitebuilder/TestGrouping.java
+++ b/test-runner/src/android/test/suitebuilder/TestGrouping.java
@@ -16,9 +16,7 @@
 
 package android.test.suitebuilder;
 
-import android.test.ClassPathPackageInfo;
 import android.test.ClassPathPackageInfoSource;
-import android.test.PackageInfoSources;
 import android.util.Log;
 import com.android.internal.util.Predicate;
 import junit.framework.TestCase;
@@ -44,23 +42,23 @@
  * 
  * {@hide} Not needed for 1.0 SDK.
  */
-public class TestGrouping {
+class TestGrouping {
 
     private static final String LOG_TAG = "TestGrouping";
 
-    SortedSet<Class<? extends TestCase>> testCaseClasses;
+    private final SortedSet<Class<? extends TestCase>> testCaseClasses;
 
-    public static final Comparator<Class<? extends TestCase>> SORT_BY_SIMPLE_NAME
+    static final Comparator<Class<? extends TestCase>> SORT_BY_SIMPLE_NAME
             = new SortBySimpleName();
 
-    public static final Comparator<Class<? extends TestCase>> SORT_BY_FULLY_QUALIFIED_NAME
+    static final Comparator<Class<? extends TestCase>> SORT_BY_FULLY_QUALIFIED_NAME
             = new SortByFullyQualifiedName();
 
-    protected String firstIncludedPackage = null;
-    private ClassLoader classLoader;
+    private final ClassLoader classLoader;
 
-    public TestGrouping(Comparator<Class<? extends TestCase>> comparator) {
+    TestGrouping(Comparator<Class<? extends TestCase>> comparator, ClassLoader classLoader) {
         testCaseClasses = new TreeSet<Class<? extends TestCase>>(comparator);
+        this.classLoader = classLoader;
     }
 
     /**
@@ -77,15 +75,11 @@
         return testMethods;
     }
 
-    protected List<Method> getTestMethods(Class<? extends TestCase> testCaseClass) {
+    private List<Method> getTestMethods(Class<? extends TestCase> testCaseClass) {
         List<Method> methods = Arrays.asList(testCaseClass.getMethods());
         return select(methods, new TestMethodPredicate());
     }
 
-    SortedSet<Class<? extends TestCase>> getTestCaseClasses() {
-        return testCaseClasses;
-    }
-
     public boolean equals(Object o) {
         if (this == o) {
             return true;
@@ -110,9 +104,8 @@
      * or in a sub-package.
      *
      * @param packageNames Names of packages to add.
-     * @return The {@link TestGrouping} for method chaining.
      */
-    public TestGrouping addPackagesRecursive(String... packageNames) {
+    void addPackagesRecursive(String... packageNames) {
         for (String packageName : packageNames) {
             List<Class<? extends TestCase>> addedClasses = testCaseClassesInPackage(packageName);
             if (addedClasses.isEmpty()) {
@@ -120,11 +113,7 @@
                         + "' could not be found or has no tests");
             }
             testCaseClasses.addAll(addedClasses);
-            if (firstIncludedPackage == null) {
-                firstIncludedPackage = packageName;
-            }
         }
-        return this;
     }
 
     /**
@@ -132,28 +121,17 @@
      * specified.
      *
      * @param packageNames Names of packages to remove.
-     * @return The {@link TestGrouping} for method chaining.
      */
-    public TestGrouping removePackagesRecursive(String... packageNames) {
+    void removePackagesRecursive(String... packageNames) {
         for (String packageName : packageNames) {
             testCaseClasses.removeAll(testCaseClassesInPackage(packageName));
         }
-        return this;
-    }
-
-    /**
-     * @return The first package name passed to {@link #addPackagesRecursive(String[])}, or null
-     *         if that method was never called.
-     */
-    public String getFirstIncludedPackage() {
-        return firstIncludedPackage;
     }
 
     private List<Class<? extends TestCase>> testCaseClassesInPackage(String packageName) {
-        ClassPathPackageInfoSource source = PackageInfoSources.forClassPath(classLoader);
-        ClassPathPackageInfo packageInfo = source.getPackageInfo(packageName);
+        ClassPathPackageInfoSource source = ClassPathPackageInfoSource.forClassPath(classLoader);
 
-        return selectTestClasses(packageInfo.getTopLevelClassesRecursive());
+        return selectTestClasses(source.getTopLevelClassesRecursive(packageName));
     }
 
     @SuppressWarnings("unchecked")
@@ -176,10 +154,6 @@
         return selectedItems;
     }
 
-    public void setClassLoader(ClassLoader classLoader) {
-        this.classLoader = classLoader;
-    }
-
     /**
      * Sort classes by their simple names (i.e. without the package prefix), using
      * their packages to sort classes with the same name.
diff --git a/test-runner/src/android/test/suitebuilder/TestPredicates.java b/test-runner/src/android/test/suitebuilder/TestPredicates.java
index 47aca55..616d1a9 100644
--- a/test-runner/src/android/test/suitebuilder/TestPredicates.java
+++ b/test-runner/src/android/test/suitebuilder/TestPredicates.java
@@ -17,30 +17,63 @@
 package android.test.suitebuilder;
 
 import android.test.InstrumentationTestCase;
-import android.test.suitebuilder.annotation.HasAnnotation;
-import android.test.suitebuilder.annotation.Suppress;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
 import android.test.suitebuilder.annotation.Smoke;
+import android.test.suitebuilder.annotation.Suppress;
 import com.android.internal.util.Predicate;
-import com.android.internal.util.Predicates;
+import java.lang.annotation.Annotation;
 
 /**
  * {@hide} Not needed for 1.0 SDK.
  */
 public class TestPredicates {
 
-    public static final Predicate<TestMethod> SELECT_INSTRUMENTATION =
-            new AssignableFrom(InstrumentationTestCase.class);
-    public static final Predicate<TestMethod> REJECT_INSTRUMENTATION =
-            Predicates.not(SELECT_INSTRUMENTATION);
+    static final Predicate<TestMethod> REJECT_INSTRUMENTATION =
+            not(new AssignableFrom(InstrumentationTestCase.class));
 
-    public static final Predicate<TestMethod> SELECT_SMOKE = new HasAnnotation(Smoke.class);
-    public static final Predicate<TestMethod> SELECT_SMALL = new HasAnnotation(SmallTest.class);
-    public static final Predicate<TestMethod> SELECT_MEDIUM = new HasAnnotation(MediumTest.class);
-    public static final Predicate<TestMethod> SELECT_LARGE = new HasAnnotation(LargeTest.class);
-    public static final Predicate<TestMethod> REJECT_SUPPRESSED =
-            Predicates.not(new HasAnnotation(Suppress.class));
+    static final Predicate<TestMethod> SELECT_SMOKE = hasAnnotation(Smoke.class);
 
+    static final Predicate<TestMethod> REJECT_SUPPRESSED = not(hasAnnotation(Suppress.class));
+
+    /**
+     * Return a predicate that checks to see if a {@link TestMethod} has an instance of the supplied
+     * annotation class, either on the method or on the containing class.
+     */
+    public static Predicate<TestMethod> hasAnnotation(Class<? extends Annotation> annotationClass) {
+        return new HasAnnotation(annotationClass);
+    }
+
+    private static class HasAnnotation implements Predicate<TestMethod> {
+
+        private final Class<? extends Annotation> annotationClass;
+
+        private HasAnnotation(Class<? extends Annotation> annotationClass) {
+            this.annotationClass = annotationClass;
+        }
+
+        @Override
+        public boolean apply(TestMethod testMethod) {
+            return testMethod.getAnnotation(annotationClass) != null ||
+                    testMethod.getEnclosingClass().getAnnotation(annotationClass) != null;
+        }
+    }
+
+    /**
+     * Returns a Predicate that evaluates to true iff the given Predicate
+     * evaluates to false.
+     */
+    public static <T> Predicate<T> not(Predicate<? super T> predicate) {
+        return new NotPredicate<T>(predicate);
+    }
+
+    private static class NotPredicate<T> implements Predicate<T> {
+        private final Predicate<? super T> predicate;
+
+        private NotPredicate(Predicate<? super T> predicate) {
+            this.predicate = predicate;
+        }
+
+        public boolean apply(T t) {
+            return !predicate.apply(t);
+        }
+    }
 }
diff --git a/test-runner/src/android/test/suitebuilder/TestSuiteBuilder.java b/test-runner/src/android/test/suitebuilder/TestSuiteBuilder.java
index cf6936b..6158e0c 100644
--- a/test-runner/src/android/test/suitebuilder/TestSuiteBuilder.java
+++ b/test-runner/src/android/test/suitebuilder/TestSuiteBuilder.java
@@ -44,8 +44,7 @@
 @Deprecated
 public class TestSuiteBuilder {
 
-    private Context context;
-    private final TestGrouping testGrouping = new TestGrouping(SORT_BY_FULLY_QUALIFIED_NAME);
+    private final TestGrouping testGrouping;
     private final Set<Predicate<TestMethod>> predicates = new HashSet<Predicate<TestMethod>>();
     private List<TestCase> testCases;
     private TestSuite rootSuite;
@@ -67,7 +66,7 @@
 
     public TestSuiteBuilder(String name, ClassLoader classLoader) {
         this.suiteName = name;
-        this.testGrouping.setClassLoader(classLoader);
+        this.testGrouping = new TestGrouping(SORT_BY_FULLY_QUALIFIED_NAME, classLoader);
         this.testCases = new ArrayList<>();
         addRequirements(REJECT_SUPPRESSED);
     }
@@ -244,15 +243,6 @@
         }
     }
 
-    /**
-     * @return the test package that represents the packages that were included for our test suite.
-     *
-     * {@hide} Not needed for 1.0 SDK.
-     */
-    protected TestGrouping getTestGrouping() {
-        return testGrouping;
-    }
-
     private boolean satisfiesAllPredicates(TestMethod test) {
         for (Predicate<TestMethod> predicate : predicates) {
             if (!predicate.apply(test)) {
diff --git a/test-runner/src/android/test/suitebuilder/annotation/HasAnnotation.java b/test-runner/src/android/test/suitebuilder/annotation/HasAnnotation.java
deleted file mode 100644
index a2868fc..0000000
--- a/test-runner/src/android/test/suitebuilder/annotation/HasAnnotation.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test.suitebuilder.annotation;
-
-import static com.android.internal.util.Predicates.or;
-import com.android.internal.util.Predicate;
-import android.test.suitebuilder.TestMethod;
-
-import java.lang.annotation.Annotation;
-
-/**
- * A predicate that checks to see if a {@link TestMethod} has a specific annotation, either on the
- * method or on the containing class.
- * 
- * {@hide} Not needed for 1.0 SDK.
- */
-public class HasAnnotation implements Predicate<TestMethod> {
-
-    private Predicate<TestMethod> hasMethodOrClassAnnotation;
-
-    public HasAnnotation(Class<? extends Annotation> annotationClass) {
-        this.hasMethodOrClassAnnotation = or(
-                new HasMethodAnnotation(annotationClass),
-                new HasClassAnnotation(annotationClass));
-    }
-
-    public boolean apply(TestMethod testMethod) {
-        return hasMethodOrClassAnnotation.apply(testMethod);
-    }
-}
diff --git a/test-runner/src/android/test/suitebuilder/annotation/HasClassAnnotation.java b/test-runner/src/android/test/suitebuilder/annotation/HasClassAnnotation.java
deleted file mode 100644
index ac76f4c..0000000
--- a/test-runner/src/android/test/suitebuilder/annotation/HasClassAnnotation.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test.suitebuilder.annotation;
-
-import java.lang.annotation.Annotation;
-
-import android.test.suitebuilder.TestMethod;
-import com.android.internal.util.Predicate;
-
-/**
- * A predicate that checks to see if a {@link android.test.suitebuilder.TestMethod} has a specific annotation on the
- * containing class. Consider using the public {@link HasAnnotation} class instead of this class.
- * 
- * {@hide} Not needed for 1.0 SDK.
- */
-class HasClassAnnotation implements Predicate<TestMethod> {
-
-    private Class<? extends Annotation> annotationClass;
-
-    public HasClassAnnotation(Class<? extends Annotation> annotationClass) {
-        this.annotationClass = annotationClass;
-    }
-
-    public boolean apply(TestMethod testMethod) {
-        return testMethod.getEnclosingClass().getAnnotation(annotationClass) != null;
-    }
-}
diff --git a/test-runner/src/android/test/suitebuilder/annotation/HasMethodAnnotation.java b/test-runner/src/android/test/suitebuilder/annotation/HasMethodAnnotation.java
deleted file mode 100644
index 96bd922..0000000
--- a/test-runner/src/android/test/suitebuilder/annotation/HasMethodAnnotation.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test.suitebuilder.annotation;
-
-import com.android.internal.util.Predicate;
-import android.test.suitebuilder.TestMethod;
-
-import java.lang.annotation.Annotation;
-
-/**
- * A predicate that checks to see if a the method represented by {@link TestMethod} has a certain
- * annotation on it. Consider using the public {@link HasAnnotation} class instead of this class.
- * 
- * {@hide} Not needed for 1.0 SDK.
- */
-class HasMethodAnnotation implements Predicate<TestMethod> {
-
-    private final Class<? extends Annotation> annotationClass;
-
-    public HasMethodAnnotation(Class<? extends Annotation> annotationClass) {
-        this.annotationClass = annotationClass;
-    }
-
-    public boolean apply(TestMethod testMethod) {
-        return testMethod.getAnnotation(annotationClass) != null;
-    }
-}
diff --git a/test-runner/tests/Android.mk b/test-runner/tests/Android.mk
index 68fd662..7ee047e4 100644
--- a/test-runner/tests/Android.mk
+++ b/test-runner/tests/Android.mk
@@ -16,6 +16,13 @@
 include $(CLEAR_VARS)
 
 # We only want this apk build for tests.
+#
+# Run the tests using the following commands:
+#   adb install -r ${ANDROID_PRODUCT_OUT}/data/app/FrameworkTestRunnerTests/FrameworkTestRunnerTests.apk
+#   adb shell am instrument \
+        -e notAnnotation android.test.suitebuilder.examples.error.RunAsPartOfSeparateTest \
+        -w com.android.frameworks.testrunner.tests/android.test.InstrumentationTestRunner
+#
 LOCAL_MODULE_TAGS := tests
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
diff --git a/test-runner/tests/src/android/test/TestCaseUtilTest.java b/test-runner/tests/src/android/test/TestCaseUtilTest.java
index bc6fa92..6d424b0 100644
--- a/test-runner/tests/src/android/test/TestCaseUtilTest.java
+++ b/test-runner/tests/src/android/test/TestCaseUtilTest.java
@@ -16,6 +16,8 @@
 
 package android.test;
 
+import java.util.ArrayList;
+import java.util.HashSet;
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
@@ -24,40 +26,50 @@
 
 public class TestCaseUtilTest extends TestCase {
 
-    public void testGetTestCaseNamesForTestSuiteWithSuiteMethod() throws Exception {
+    @SuppressWarnings("unchecked")
+    private static List<String> getTestCaseNames(Test test) {
+        List<Test> tests = (List<Test>) TestCaseUtil.getTests(test, false);
+        List<String> testCaseNames = new ArrayList<>();
+        for (Test aTest : tests) {
+            testCaseNames.add(TestCaseUtil.getTestName(aTest));
+        }
+        return testCaseNames;
+    }
+
+    public void testGetTests_ForTestSuiteWithSuiteMethod() throws Exception {
         TestSuite testSuite = new TwoTestsInTestSuite();
 
-        List<String> testCaseNames = TestCaseUtil.getTestCaseNames(testSuite, false);
+        List<String> testCaseNames = getTestCaseNames(testSuite);
 
-        assertEquals(2, testCaseNames.size());
-        assertTrue(testCaseNames.get(0).endsWith("OneTestTestCase"));
-        assertTrue(testCaseNames.get(1).endsWith("OneTestTestSuite"));
+        assertEquals(0, testCaseNames.size());
     }
     
-    public void testGetTestCaseNamesForTestCaseWithSuiteMethod() throws Exception {
+    public void testGetTests_ForTestCaseWithSuiteMethod() throws Exception {
         TestCase testCase = new OneTestTestCaseWithSuite();
 
-        List<String> testCaseNames = TestCaseUtil.getTestCaseNames(testCase, false);
+        List<String> testCaseNames = getTestCaseNames(testCase);
 
         assertEquals(1, testCaseNames.size());
         assertTrue(testCaseNames.get(0).endsWith("testOne"));
     }
 
-    public void testCreateTestForTestCase() throws Exception {
-        Test test = TestCaseUtil.createTestSuite(OneTestTestCase.class);
-        assertEquals(1, test.countTestCases());
+    public void testInvokeSuiteMethodIfPossible_ForTestCase() throws Exception {
+        Test test = TestCaseUtil.invokeSuiteMethodIfPossible(OneTestTestCase.class, new HashSet<>());
+        assertNull(test);
     }
-    
-    public void testCreateTestForTestSuiteWithSuiteMethod() throws Exception {
-        Test test = TestCaseUtil.createTestSuite(TwoTestsInTestSuite.class);
+
+    public void testInvokeSuiteMethodIfPossible_ForTestSuiteWithSuiteMethod() throws Exception {
+        Test test = TestCaseUtil.invokeSuiteMethodIfPossible(TwoTestsInTestSuite.class, new HashSet<>());
+        assertNotNull(test);
         assertEquals(2, test.countTestCases());
     }
 
-    public void testCreateTestForTestCaseWithSuiteMethod() throws Exception {
-        Test test = TestCaseUtil.createTestSuite(OneTestTestCaseWithSuite.class);
+    public void testInvokeSuiteMethodIfPossible_ForTestCaseWithSuiteMethod() throws Exception {
+        Test test = TestCaseUtil.invokeSuiteMethodIfPossible(OneTestTestCaseWithSuite.class, new HashSet<>());
+        assertNotNull(test);
         assertEquals(1, test.countTestCases());
     }
-    
+
     public void testReturnEmptyStringForTestSuiteWithNoName() throws Exception {
         assertEquals("", TestCaseUtil.getTestName(new TestSuite()));
     }
diff --git a/test-runner/tests/src/android/test/suitebuilder/InstrumentationTestSuiteBuilderTest.java b/test-runner/tests/src/android/test/suitebuilder/InstrumentationTestSuiteBuilderTest.java
deleted file mode 100644
index 1872803..0000000
--- a/test-runner/tests/src/android/test/suitebuilder/InstrumentationTestSuiteBuilderTest.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test.suitebuilder;
-
-import static android.test.suitebuilder.ListTestCaseNames.getTestCaseNames;
-import android.test.suitebuilder.examples.OuterTest;
-import android.test.suitebuilder.examples.instrumentation.InstrumentationTest;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestListener;
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-public class InstrumentationTestSuiteBuilderTest extends TestCase {
-
-    private InstrumentationTestSuiteBuilder instrumentationTestSuiteBuilder;
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        instrumentationTestSuiteBuilder = new InstrumentationTestSuiteBuilder(getClass());
-    }
-
-    public void testShouldIncludeIntrumentationTests() throws Exception {
-        instrumentationTestSuiteBuilder.includePackages(packageFor(InstrumentationTest.class));
-
-        SuiteExecutionRecorder recorder = runSuite(instrumentationTestSuiteBuilder);
-
-        assertEquals(1, recorder.testsSeen.size());
-        assertTrue(recorder.saw("InstrumentationTest.testInstrumentation"));
-    }
-
-    public void testShouldOnlyIncludeIntrumentationTests() throws Exception {
-        TestSuite testSuite = new OuterTest()
-                .buildTestsUnderHereWith(instrumentationTestSuiteBuilder);
-        List<String> testCaseNames = getTestCaseNames(testSuite);
-        assertEquals(1, testCaseNames.size());
-        assertEquals("testInstrumentation", testCaseNames.get(0));
-    }
-
-    private static String packageFor(Class clazz) {
-        String className = clazz.getName();
-        return className.substring(0, className.lastIndexOf('.'));
-    }
-
-    private SuiteExecutionRecorder runSuite(TestSuiteBuilder builder) {
-        TestSuite suite = builder.build();
-        SuiteExecutionRecorder recorder = new SuiteExecutionRecorder();
-        TestResult result = new TestResult();
-        result.addListener(recorder);
-        suite.run(result);
-        return recorder;
-    }
-
-    private class SuiteExecutionRecorder implements TestListener {
-
-        private Set<String> failures = new HashSet<String>();
-        private Set<String> errors = new HashSet<String>();
-        private Set<String> testsSeen = new HashSet<String>();
-
-        public void addError(Test test, Throwable t) {
-            errors.add(testName(test));
-        }
-
-        public void addFailure(Test test, AssertionFailedError t) {
-            failures.add(testName(test));
-        }
-
-        public void endTest(Test test) {
-        }
-
-        public void startTest(Test test) {
-            testsSeen.add(testName(test));
-        }
-
-        public boolean saw(String testName) {
-            return testsSeen.contains(testName);
-        }
-
-        public boolean failed(String testName) {
-            return failures.contains(testName);
-        }
-
-        public boolean errored(String testName) {
-            return errors.contains(testName);
-        }
-
-        public boolean passed(String testName) {
-            return saw(testName) && !failed(testName) && !errored(testName);
-        }
-
-        private String testName(Test test) {
-            TestCase testCase = (TestCase) test;
-            return testCase.getClass().getSimpleName() + "." + testCase.getName();
-        }
-    }
-}
diff --git a/test-runner/tests/src/android/test/suitebuilder/TestGroupingTest.java b/test-runner/tests/src/android/test/suitebuilder/TestGroupingTest.java
index f4477d1..972bfb4 100644
--- a/test-runner/tests/src/android/test/suitebuilder/TestGroupingTest.java
+++ b/test-runner/tests/src/android/test/suitebuilder/TestGroupingTest.java
@@ -30,7 +30,7 @@
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        mGrouping = new TestGrouping(TestGrouping.SORT_BY_SIMPLE_NAME);
+        mGrouping = new TestGrouping(TestGrouping.SORT_BY_SIMPLE_NAME, getClass().getClassLoader());
     }
 
     /**
diff --git a/test-runner/tests/src/android/test/suitebuilder/TestPredicatesTest.java b/test-runner/tests/src/android/test/suitebuilder/TestPredicatesTest.java
new file mode 100644
index 0000000..3d8d5f1
--- /dev/null
+++ b/test-runner/tests/src/android/test/suitebuilder/TestPredicatesTest.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.test.suitebuilder;
+
+import com.android.internal.util.Predicate;
+import junit.framework.TestCase;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.reflect.Method;
+
+public class TestPredicatesTest extends TestCase {
+
+    public void testThatMethodWithAnnotationIsReportedAsBeingAnnotated() throws Exception {
+        assertTrue(hasExampleAnnotation(ClassWithAnnotation.class, "testWithAnnotation"));
+        assertTrue(hasExampleAnnotation(ClassWithoutAnnotation.class, "testWithAnnotation"));
+    }
+
+    public void testThatMethodWithOutAnnotationIsNotReportedAsBeingAnnotated() throws Exception {
+        assertFalse(hasExampleAnnotation(ClassWithoutAnnotation.class, "testWithoutAnnotation"));
+    }
+
+    public void testThatClassAnnotatioCausesAllMethodsToBeReportedAsBeingAnnotated()
+            throws Exception {
+        assertTrue(hasExampleAnnotation(ClassWithAnnotation.class, "testWithoutAnnotation"));
+    }
+
+    private boolean hasExampleAnnotation(Class<? extends TestCase> aClass, String methodName)
+            throws NoSuchMethodException {
+        Method method = aClass.getMethod(methodName);
+        TestMethod testMethod = new TestMethod(method, aClass);
+        return TestPredicates.hasAnnotation(Example.class).apply(testMethod);
+    }
+
+    @Retention(RetentionPolicy.RUNTIME)
+    @Target({ElementType.TYPE, ElementType.METHOD})
+    public @interface Example {
+    }
+
+    @Example
+    static class ClassWithAnnotation extends TestCase {
+
+        @Example
+        public void testWithAnnotation() {
+        }
+
+        public void testWithoutAnnotation() {
+        }
+    }
+
+    static class ClassWithoutAnnotation extends TestCase {
+
+        @Example
+        public void testWithAnnotation() {
+        }
+
+        public void testWithoutAnnotation() {
+        }
+    }
+
+    private static final Predicate<Object> TRUE = new Predicate<Object>() {
+        public boolean apply(Object o) {
+            return true;
+        }
+    };
+
+    private static final Predicate<Object> FALSE = new Predicate<Object>() {
+        public boolean apply(Object o) {
+            return false;
+        }
+    };
+
+    public void testNotPredicate() throws Exception {
+        assertTrue(TestPredicates.not(FALSE).apply(null));
+        assertFalse(TestPredicates.not(TRUE).apply(null));
+    }
+}
diff --git a/test-runner/tests/src/android/test/suitebuilder/TestSuiteBuilderTest.java b/test-runner/tests/src/android/test/suitebuilder/TestSuiteBuilderTest.java
index 293c813..a2e51a1 100644
--- a/test-runner/tests/src/android/test/suitebuilder/TestSuiteBuilderTest.java
+++ b/test-runner/tests/src/android/test/suitebuilder/TestSuiteBuilderTest.java
@@ -135,10 +135,23 @@
 
         TestSuite testSuite = new OuterTest().buildTestsUnderHereRecursively();
         assertContentsInOrder(getTestCaseNames(testSuite),
-                "testOuter", "testErrorOne", "testErrorTwo", "testFailOne", "testFailTwo",
-                "testInstrumentation", "testLevel1", "testLevel2", "testAnotherOne",
-                "testSimpleOne", "testSimpleTwo", "testNonSmoke", "testSmoke", "testSubclass",
-                "testSuperclass", "testUnSuppressedMethod");
+                "testOuter",
+                "testPublicConstructor",
+                "testErrorOne",
+                "testErrorTwo",
+                "testFailOne",
+                "testFailTwo",
+                "testInstrumentation",
+                "testLevel1",
+                "testLevel2",
+                "testAnotherOne",
+                "testSimpleOne",
+                "testSimpleTwo",
+                "testNonSmoke",
+                "testSmoke",
+                "testSubclass",
+                "testSuperclass",
+                "testUnSuppressedMethod");
     }
 
     private void assertContentsInOrder(List<String> actual, String... source) {
diff --git a/test-runner/tests/src/android/test/suitebuilder/annotation/HasAnnotationTest.java b/test-runner/tests/src/android/test/suitebuilder/annotation/HasAnnotationTest.java
deleted file mode 100644
index edf067d..0000000
--- a/test-runner/tests/src/android/test/suitebuilder/annotation/HasAnnotationTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test.suitebuilder.annotation;
-
-import android.test.suitebuilder.TestMethod;
-import junit.framework.TestCase;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.reflect.Method;
-
-public class HasAnnotationTest extends TestCase {
-
-    public void testThatMethodWithAnnotationIsReportedAsBeingAnnotated() throws Exception {
-        assertTrue(hasExampleAnnotation(ClassWithAnnotation.class, "testWithAnnotation"));
-        assertTrue(hasExampleAnnotation(ClassWithoutAnnotation.class, "testWithAnnotation"));
-    }
-
-    public void testThatMethodWithOutAnnotationIsNotReportedAsBeingAnnotated() throws Exception {
-        assertFalse(hasExampleAnnotation(ClassWithoutAnnotation.class, "testWithoutAnnotation"));
-    }
-
-    public void testThatClassAnnotatioCausesAllMethodsToBeReportedAsBeingAnnotated()
-            throws Exception {
-        assertTrue(hasExampleAnnotation(ClassWithAnnotation.class, "testWithoutAnnotation"));
-    }
-
-    private boolean hasExampleAnnotation(Class<? extends TestCase> aClass, String methodName)
-            throws NoSuchMethodException {
-        Method method = aClass.getMethod(methodName);
-        TestMethod testMethod = new TestMethod(method, aClass);
-        return new HasAnnotation(Example.class).apply(testMethod);
-    }
-
-    @Retention(RetentionPolicy.RUNTIME)
-    @Target({ElementType.TYPE, ElementType.METHOD})
-    public @interface Example {
-    }
-
-    @Example
-    static class ClassWithAnnotation extends TestCase {
-
-        @Example
-        public void testWithAnnotation() {
-        }
-
-        public void testWithoutAnnotation() {
-        }
-    }
-
-    static class ClassWithoutAnnotation extends TestCase {
-
-        @Example
-        public void testWithAnnotation() {
-        }
-
-        public void testWithoutAnnotation() {
-        }
-    }
-}
diff --git a/test-runner/tests/src/android/test/suitebuilder/annotation/HasClassAnnotationTest.java b/test-runner/tests/src/android/test/suitebuilder/annotation/HasClassAnnotationTest.java
deleted file mode 100644
index 051ea54..0000000
--- a/test-runner/tests/src/android/test/suitebuilder/annotation/HasClassAnnotationTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test.suitebuilder.annotation;
-
-import android.test.suitebuilder.TestMethod;
-import junit.framework.TestCase;
-
-import java.lang.reflect.Method;
-
-public class HasClassAnnotationTest extends TestCase {
-
-    public void testShouldTellIfParentClassHasSpecifiedClassification()
-            throws NoSuchMethodException {
-        assertTrue(classHasAnnotation(SmokeTestExample.class, Smoke.class));
-    }
-
-    public void testShouldTellIfParentClassDoesNotHaveSpecifiedClassification()
-            throws NoSuchMethodException {
-        assertFalse(classHasAnnotation(NonSmokeTestExample.class, Smoke.class));
-    }
-
-    private boolean classHasAnnotation(
-            Class<? extends TestCase> aClass,
-            Class<Smoke> expectedClassification) throws NoSuchMethodException {
-        Method method = aClass.getMethod("testSomeTest");
-
-        TestMethod testMethod = new TestMethod(method, aClass);
-        return new HasClassAnnotation(expectedClassification).apply(testMethod);
-    }
-
-    @Smoke
-    static class SmokeTestExample extends TestCase {
-
-        public void testSomeTest() {
-        }
-    }
-
-    static class NonSmokeTestExample extends TestCase {
-
-        public void testSomeTest() {
-        }
-    }
-}
diff --git a/test-runner/tests/src/android/test/suitebuilder/annotation/HasMethodAnnotationTest.java b/test-runner/tests/src/android/test/suitebuilder/annotation/HasMethodAnnotationTest.java
deleted file mode 100644
index c864e28..0000000
--- a/test-runner/tests/src/android/test/suitebuilder/annotation/HasMethodAnnotationTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.test.suitebuilder.annotation;
-
-import android.test.suitebuilder.TestMethod;
-import junit.framework.TestCase;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-
-
-public class HasMethodAnnotationTest extends TestCase {
-
-    public void testMethodWithSpecifiedAttribute() throws Exception {
-        assertTrue(methodHasAnnotation(AnnotatedMethodExample.class,
-                "testThatIsAnnotated", Smoke.class));
-    }
-
-    public void testMethodWithoutSpecifiedAttribute() throws Exception {
-        assertFalse(methodHasAnnotation(AnnotatedMethodExample.class,
-                "testThatIsNotAnnotated", Smoke.class));
-    }
-
-    private boolean methodHasAnnotation(Class<? extends TestCase> aClass,
-            String methodName,
-            Class<? extends Annotation> expectedClassification
-    ) throws NoSuchMethodException {
-        Method method = aClass.getMethod(methodName);
-        TestMethod testMethod = new TestMethod(method, aClass);
-        return new HasMethodAnnotation(expectedClassification).apply(testMethod);
-    }
-
-    static class AnnotatedMethodExample extends TestCase {
-
-        @Smoke
-        public void testThatIsAnnotated() {
-        }
-
-        public void testThatIsNotAnnotated() {
-        }
-    }
-}
diff --git a/test-runner/tests/src/android/test/suitebuilder/examples/error/ErrorTest.java b/test-runner/tests/src/android/test/suitebuilder/examples/error/ErrorTest.java
index f1f6113..ddf5dd1 100644
--- a/test-runner/tests/src/android/test/suitebuilder/examples/error/ErrorTest.java
+++ b/test-runner/tests/src/android/test/suitebuilder/examples/error/ErrorTest.java
@@ -18,6 +18,7 @@
 
 import junit.framework.TestCase;
 
+@RunAsPartOfSeparateTest
 public class ErrorTest extends TestCase {
 
     public void testErrorOne() throws Exception {
diff --git a/test-runner/tests/src/android/test/suitebuilder/examples/error/FailingTest.java b/test-runner/tests/src/android/test/suitebuilder/examples/error/FailingTest.java
index 428fd23..0170b2f 100644
--- a/test-runner/tests/src/android/test/suitebuilder/examples/error/FailingTest.java
+++ b/test-runner/tests/src/android/test/suitebuilder/examples/error/FailingTest.java
@@ -18,6 +18,7 @@
 
 import junit.framework.TestCase;
 
+@RunAsPartOfSeparateTest
 public class FailingTest extends TestCase {
 
     public void testFailOne() throws Exception {
diff --git a/test-runner/tests/src/android/test/suitebuilder/examples/error/RunAsPartOfSeparateTest.java b/test-runner/tests/src/android/test/suitebuilder/examples/error/RunAsPartOfSeparateTest.java
new file mode 100644
index 0000000..2b3a252
--- /dev/null
+++ b/test-runner/tests/src/android/test/suitebuilder/examples/error/RunAsPartOfSeparateTest.java
@@ -0,0 +1,30 @@
+/*
+ * 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.test.suitebuilder.examples.error;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation that marks tests that should only be run as part of a separate test and not on their
+ * own.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface RunAsPartOfSeparateTest {
+}
diff --git a/tests/AppLaunch/Android.mk b/tests/AppLaunch/Android.mk
index 9435893..d01b1f9 100644
--- a/tests/AppLaunch/Android.mk
+++ b/tests/AppLaunch/Android.mk
@@ -9,9 +9,9 @@
 LOCAL_PACKAGE_NAME := AppLaunch
 
 LOCAL_CERTIFICATE := platform
-LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_JAVA_LIBRARIES := legacy-android-test
 
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-test legacy-android-test
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
 
 include $(BUILD_PACKAGE)
 
diff --git a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
index 4d2f97f..1443fc1 100644
--- a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
+++ b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
@@ -101,7 +101,7 @@
     private static final String PROFILE_COMPILE_SUCCESS = "Success";
     private static final String THIS_TIME = "ThisTime:";
     private static final String LAUNCH_ITERATION = "LAUNCH_ITERATION - %d";
-    private static final String TRACE_ITERATION = "TRACE_ITERATION - %d";
+    private static final String TRACE_ITERATION = "TRACE_ITERATION-%d";
     private static final String LAUNCH_ITERATION_PREFIX = "LAUNCH_ITERATION";
     private static final String TRACE_ITERATION_PREFIX = "TRACE_ITERATION";
     private static final String LAUNCH_ORDER_CYCLIC = "cyclic";
diff --git a/tests/Camera2Tests/SmartCamera/SimpleCamera/tests/Android.mk b/tests/Camera2Tests/SmartCamera/SimpleCamera/tests/Android.mk
index 1f14f03..527d1bbf 100644
--- a/tests/Camera2Tests/SmartCamera/SimpleCamera/tests/Android.mk
+++ b/tests/Camera2Tests/SmartCamera/SimpleCamera/tests/Android.mk
@@ -24,8 +24,8 @@
 
 LOCAL_SRC_FILES += $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := guava junit legacy-android-test
+LOCAL_JAVA_LIBRARIES := legacy-android-test
+LOCAL_STATIC_JAVA_LIBRARIES := guava junit
 
 LOCAL_PROGUARD_ENABLED := disabled
 
diff --git a/tests/Compatibility/Android.mk b/tests/Compatibility/Android.mk
index 99e84bd..82e2126 100644
--- a/tests/Compatibility/Android.mk
+++ b/tests/Compatibility/Android.mk
@@ -17,9 +17,7 @@
 
 # We only want this apk build for tests.
 LOCAL_MODULE_TAGS := tests
-
-LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := junit legacy-android-test
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
 # Include all test java files.
 LOCAL_SRC_FILES := \
 	$(call all-java-files-under, src)
diff --git a/tests/Compatibility/AndroidManifest.xml b/tests/Compatibility/AndroidManifest.xml
index 7017431..5d1317e 100644
--- a/tests/Compatibility/AndroidManifest.xml
+++ b/tests/Compatibility/AndroidManifest.xml
@@ -15,12 +15,12 @@
 -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.android.compatibilitytest" >
+    package="com.android.compatibilitytest"
+    android:sharedUserId="android.uid.system">
     <uses-sdk android:minSdkVersion="21"
               android:targetSdkVersion="21" />
-    <application >
-        <uses-library android:name="android.test.runner" />
-    </application>
+    <application />
+    <uses-permission android:name="android.permission.READ_LOGS" />
     <uses-permission android:name="android.permission.REAL_GET_TASKS" />
     <instrumentation
         android:name=".AppCompatibilityRunner"
diff --git a/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java b/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java
index f81b001..95eb5c9 100644
--- a/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java
+++ b/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibility.java
@@ -17,62 +17,93 @@
 package com.android.compatibilitytest;
 
 import android.app.ActivityManager;
-import android.app.UiAutomation;
-import android.app.UiModeManager;
 import android.app.ActivityManager.ProcessErrorStateInfo;
 import android.app.ActivityManager.RunningTaskInfo;
+import android.app.IActivityController;
+import android.app.IActivityManager;
+import android.app.Instrumentation;
+import android.app.UiAutomation;
+import android.app.UiModeManager;
 import android.content.Context;
 import android.content.Intent;
-import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.ResolveInfo;
 import android.content.res.Configuration;
 import android.os.Bundle;
-import android.test.InstrumentationTestCase;
+import android.os.DropBoxManager;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 
-import junit.framework.Assert;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * Application Compatibility Test that launches an application and detects
  * crashes.
  */
-public class AppCompatibility extends InstrumentationTestCase {
+@RunWith(AndroidJUnit4.class)
+public class AppCompatibility {
 
     private static final String TAG = AppCompatibility.class.getSimpleName();
     private static final String PACKAGE_TO_LAUNCH = "package_to_launch";
     private static final String APP_LAUNCH_TIMEOUT_MSECS = "app_launch_timeout_ms";
     private static final String WORKSPACE_LAUNCH_TIMEOUT_MSECS = "workspace_launch_timeout_ms";
+    private static final Set<String> DROPBOX_TAGS = new HashSet<>();
+    static {
+        DROPBOX_TAGS.add("SYSTEM_TOMBSTONE");
+        DROPBOX_TAGS.add("system_app_anr");
+        DROPBOX_TAGS.add("system_app_native_crash");
+        DROPBOX_TAGS.add("system_app_crash");
+        DROPBOX_TAGS.add("data_app_anr");
+        DROPBOX_TAGS.add("data_app_native_crash");
+        DROPBOX_TAGS.add("data_app_crash");
+    }
+    private static final int MAX_CRASH_SNIPPET_LINES = 20;
+    private static final int MAX_NUM_CRASH_SNIPPET = 3;
 
+    // time waiting for app to launch
     private int mAppLaunchTimeout = 7000;
+    // time waiting for launcher home screen to show up
     private int mWorkspaceLaunchTimeout = 2000;
 
     private Context mContext;
     private ActivityManager mActivityManager;
     private PackageManager mPackageManager;
-    private AppCompatibilityRunner mRunner;
     private Bundle mArgs;
+    private Instrumentation mInstrumentation;
+    private String mLauncherPackageName;
+    private IActivityController mCrashSupressor = new CrashSuppressor();
+    private Map<String, List<String>> mAppErrors = new HashMap<>();
 
-    @Override
+    @Before
     public void setUp() throws Exception {
-        super.setUp();
-        mRunner = (AppCompatibilityRunner) getInstrumentation();
-        assertNotNull("Could not fetch InstrumentationTestRunner.", mRunner);
-
-        mContext = mRunner.getTargetContext();
-        Assert.assertNotNull("Could not get the Context", mContext);
-
-        mActivityManager = (ActivityManager)
-                mContext.getSystemService(Context.ACTIVITY_SERVICE);
-        Assert.assertNotNull("Could not get Activity Manager", mActivityManager);
-
+        mInstrumentation = InstrumentationRegistry.getInstrumentation();
+        mContext = InstrumentationRegistry.getTargetContext();
+        mActivityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
         mPackageManager = mContext.getPackageManager();
-        Assert.assertNotNull("Missing Package Manager", mPackageManager);
+        mArgs = InstrumentationRegistry.getArguments();
 
-        mArgs = mRunner.getBundle();
+        // resolve launcher package name
+        Intent intent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME);
+        ResolveInfo resolveInfo = mPackageManager.resolveActivity(
+                intent, PackageManager.MATCH_DEFAULT_ONLY);
+        mLauncherPackageName = resolveInfo.activityInfo.packageName;
+        Assert.assertNotNull("failed to resolve package name for launcher", mLauncherPackageName);
+        Log.v(TAG, "Using launcher package name: " + mLauncherPackageName);
 
         // Parse optional inputs.
         String appLaunchTimeoutMsecs = mArgs.getString(APP_LAUNCH_TIMEOUT_MSECS);
@@ -83,13 +114,20 @@
         if (workspaceLaunchTimeoutMsecs != null) {
             mWorkspaceLaunchTimeout = Integer.parseInt(workspaceLaunchTimeoutMsecs);
         }
-        getInstrumentation().getUiAutomation().setRotation(UiAutomation.ROTATION_FREEZE_0);
+        mInstrumentation.getUiAutomation().setRotation(UiAutomation.ROTATION_FREEZE_0);
+
+        // set activity controller to suppress crash dialogs and collects them by process name
+        mAppErrors.clear();
+        IActivityManager.Stub.asInterface(ServiceManager.checkService(Context.ACTIVITY_SERVICE))
+            .setActivityController(mCrashSupressor, false);
     }
 
-    @Override
-    protected void tearDown() throws Exception {
-        getInstrumentation().getUiAutomation().setRotation(UiAutomation.ROTATION_UNFREEZE);
-        super.tearDown();
+    @After
+    public void tearDown() throws Exception {
+        // unset activity controller
+        IActivityManager.Stub.asInterface(ServiceManager.checkService(Context.ACTIVITY_SERVICE))
+            .setActivityController(null, false);
+        mInstrumentation.getUiAutomation().setRotation(UiAutomation.ROTATION_UNFREEZE);
     }
 
     /**
@@ -98,6 +136,7 @@
      *
      * @throws Exception
      */
+    @Test
     public void testAppStability() throws Exception {
         String packageName = mArgs.getString(PACKAGE_TO_LAUNCH);
         if (packageName != null) {
@@ -107,13 +146,30 @@
                 Log.w(TAG, String.format("Skipping %s; no launch intent", packageName));
                 return;
             }
-            ProcessErrorStateInfo err = launchActivity(packageName, intent);
-            // Make sure there are no errors when launching the application,
-            // otherwise raise an
-            // exception with the first error encountered.
-            assertNull(getStackTrace(err), err);
+            long startTime = System.currentTimeMillis();
+            launchActivity(packageName, intent);
             try {
-                assertTrue("App crashed after launch.", processStillUp(packageName));
+                checkDropbox(startTime, packageName);
+                if (mAppErrors.containsKey(packageName)) {
+                    StringBuilder message = new StringBuilder("Error(s) detected for package: ")
+                            .append(packageName);
+                    List<String> errors = mAppErrors.get(packageName);
+                    for (int i = 0; i < MAX_NUM_CRASH_SNIPPET && i < errors.size(); i++) {
+                        String err = errors.get(i);
+                        message.append("\n\n");
+                        // limit the size of each crash snippet
+                        message.append(truncate(err, MAX_CRASH_SNIPPET_LINES));
+                    }
+                    if (errors.size() > MAX_NUM_CRASH_SNIPPET) {
+                        message.append(String.format("\n... %d more errors omitted ...",
+                                errors.size() - MAX_NUM_CRASH_SNIPPET));
+                    }
+                    Assert.fail(message.toString());
+                }
+                // last check: see if app process is still running
+                Assert.assertTrue("app package \"" + packageName + "\" no longer found in running "
+                    + "tasks, but no explicit crashes were detected; check logcat for details",
+                    processStillUp(packageName));
             } finally {
                 returnHome();
             }
@@ -124,31 +180,52 @@
     }
 
     /**
-     * Gets the stack trace for the error.
-     *
-     * @param in {@link ProcessErrorStateInfo} to parse.
-     * @return {@link String} the long message of the error.
+     * Truncate the text to at most the specified number of lines, and append a marker at the end
+     * when truncated
+     * @param text
+     * @param maxLines
+     * @return
      */
-    private String getStackTrace(ProcessErrorStateInfo in) {
-        if (in == null) {
-            return null;
-        } else {
-            return in.stackTrace;
+    private static String truncate(String text, int maxLines) {
+        String[] lines = text.split("\\r?\\n");
+        StringBuilder ret = new StringBuilder();
+        for (int i = 0; i < maxLines && i < lines.length; i++) {
+            ret.append(lines[i]);
+            ret.append('\n');
         }
+        if (lines.length > maxLines) {
+            ret.append("... ");
+            ret.append(lines.length - maxLines);
+            ret.append(" more lines truncated ...\n");
+        }
+        return ret.toString();
     }
 
     /**
-     * Returns the process name that the package is going to use.
-     *
-     * @param packageName name of the package
-     * @return process name of the package
+     * Check dropbox for entries of interest regarding the specified process
+     * @param startTime if not 0, only check entries with timestamp later than the start time
+     * @param processName the process name to check for
      */
-    private String getProcessName(String packageName) {
-        try {
-            PackageInfo pi = mPackageManager.getPackageInfo(packageName, 0);
-            return pi.applicationInfo.processName;
-        } catch (NameNotFoundException e) {
-            return packageName;
+    private void checkDropbox(long startTime, String processName) {
+        DropBoxManager dropbox = (DropBoxManager) mContext
+                .getSystemService(Context.DROPBOX_SERVICE);
+        DropBoxManager.Entry entry = null;
+        while (null != (entry = dropbox.getNextEntry(null, startTime))) {
+            try {
+                // only check entries with tag that's of interest
+                String tag = entry.getTag();
+                if (DROPBOX_TAGS.contains(tag)) {
+                    String content = entry.getText(4096);
+                    if (content != null) {
+                        if (content.contains(processName)) {
+                            addProcessError(processName, "dropbox:" + tag, content);
+                        }
+                    }
+                }
+                startTime = entry.getTimeMillis();
+            } finally {
+                entry.close();
+            }
         }
     }
 
@@ -166,8 +243,7 @@
     }
 
     private Intent getLaunchIntentForPackage(String packageName) {
-        UiModeManager umm = (UiModeManager)
-                getInstrumentation().getContext().getSystemService(Context.UI_MODE_SERVICE);
+        UiModeManager umm = (UiModeManager) mContext.getSystemService(Context.UI_MODE_SERVICE);
         boolean isLeanback = umm.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION;
         Intent intent = null;
         if (isLeanback) {
@@ -186,35 +262,32 @@
      * @return {@link Collection} of {@link ProcessErrorStateInfo} detected
      *         during the app launch.
      */
-    private ProcessErrorStateInfo launchActivity(String packageName, Intent intent) {
+    private void launchActivity(String packageName, Intent intent) {
         Log.d(TAG, String.format("launching package \"%s\" with intent: %s",
                 packageName, intent.toString()));
 
-        String processName = getProcessName(packageName);
-
         // Launch Activity
         mContext.startActivity(intent);
 
         try {
+            // artificial delay: in case app crashes after doing some work during launch
             Thread.sleep(mAppLaunchTimeout);
         } catch (InterruptedException e) {
             // ignore
         }
+    }
 
-        // See if there are any errors. We wait until down here to give ANRs as much time as
-        // possible to occur.
-        final Collection<ProcessErrorStateInfo> postErr =
-                mActivityManager.getProcessesInErrorState();
-
-        if (postErr == null) {
-            return null;
+    private void addProcessError(String processName, String errorType, String errorInfo) {
+        // parse out the package name if necessary, for apps with multiple proceses
+        String pkgName = processName.split(":", 2)[0];
+        List<String> errors;
+        if (mAppErrors.containsKey(pkgName)) {
+            errors = mAppErrors.get(pkgName);
+        }  else {
+            errors = new ArrayList<>();
         }
-        for (ProcessErrorStateInfo error : postErr) {
-            if (error.processName.equals(processName)) {
-                return error;
-            }
-        }
-        return null;
+        errors.add(String.format("### Type: %s, Details:\n%s", errorType, errorInfo));
+        mAppErrors.put(pkgName, errors);
     }
 
     /**
@@ -233,4 +306,55 @@
         }
         return false;
     }
+
+    /**
+     * An {@link IActivityController} that instructs framework to kill processes hitting crashes
+     * directly without showing crash dialogs
+     *
+     */
+    private class CrashSuppressor extends IActivityController.Stub {
+
+        @Override
+        public boolean activityStarting(Intent intent, String pkg) throws RemoteException {
+            Log.d(TAG, "activity starting: " + intent.getComponent().toShortString());
+            return true;
+        }
+
+        @Override
+        public boolean activityResuming(String pkg) throws RemoteException {
+            Log.d(TAG, "activity resuming: " + pkg);
+            return true;
+        }
+
+        @Override
+        public boolean appCrashed(String processName, int pid, String shortMsg, String longMsg,
+                long timeMillis, String stackTrace) throws RemoteException {
+            Log.d(TAG, "app crash: " + processName);
+            addProcessError(processName, "crash", stackTrace);
+            // don't show dialog
+            return false;
+        }
+
+        @Override
+        public int appEarlyNotResponding(String processName, int pid, String annotation)
+                throws RemoteException {
+            // ignore
+            return 0;
+        }
+
+        @Override
+        public int appNotResponding(String processName, int pid, String processStats)
+                throws RemoteException {
+            Log.d(TAG, "app ANR: " + processName);
+            addProcessError(processName, "ANR", processStats);
+            // don't show dialog
+            return -1;
+        }
+
+        @Override
+        public int systemNotResponding(String msg) throws RemoteException {
+            // ignore
+            return -1;
+        }
+    }
 }
diff --git a/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibilityRunner.java b/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibilityRunner.java
index 258937f..b61ec34 100644
--- a/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibilityRunner.java
+++ b/tests/Compatibility/src/com/android/compatibilitytest/AppCompatibilityRunner.java
@@ -16,20 +16,7 @@
 
 package com.android.compatibilitytest;
 
-import android.os.Bundle;
-import android.test.InstrumentationTestRunner;
+import android.support.test.runner.AndroidJUnitRunner;
 
-public class AppCompatibilityRunner extends InstrumentationTestRunner {
-
-    private Bundle mArgs;
-
-    @Override
-    public void onCreate(Bundle args) {
-        super.onCreate(args);
-        mArgs = args;
-    }
-
-    public Bundle getBundle() {
-        return mArgs;
-    }
-}
+// empty subclass to maintain backwards compatibility on host-side harness
+public class AppCompatibilityRunner extends AndroidJUnitRunner {}
diff --git a/tests/FeatureSplit/base/Android.mk b/tests/FeatureSplit/base/Android.mk
index 93f6d7a..6da1b38 100644
--- a/tests/FeatureSplit/base/Android.mk
+++ b/tests/FeatureSplit/base/Android.mk
@@ -17,6 +17,7 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
+LOCAL_USE_AAPT2 := true
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 LOCAL_PACKAGE_NAME := FeatureSplitBase
 LOCAL_EXPORT_PACKAGE_RESOURCES := true
diff --git a/tests/FeatureSplit/feature1/res/values/values.xml b/tests/FeatureSplit/feature1/res/values/values.xml
index 10dbd97..7d58865 100644
--- a/tests/FeatureSplit/feature1/res/values/values.xml
+++ b/tests/FeatureSplit/feature1/res/values/values.xml
@@ -20,7 +20,7 @@
     <integer name="test_integer2">200</integer>
     <color name="test_color2">#00ff00</color>
     <string-array name="string_array2">
-        <item>@*string/app_title</item>
+        <item>@string/app_title</item>
     </string-array>
 </resources>
 
diff --git a/tests/Internal/src/android/app/WallpaperColorsTest.java b/tests/Internal/src/android/app/WallpaperColorsTest.java
index fb529b9..881f628 100644
--- a/tests/Internal/src/android/app/WallpaperColorsTest.java
+++ b/tests/Internal/src/android/app/WallpaperColorsTest.java
@@ -36,12 +36,12 @@
         final Color color = Color.valueOf(Color.WHITE);
         // Default should not support dark text!
         WallpaperColors colors = new WallpaperColors(color, null, null, 0);
-        Assert.assertTrue("Default behavior is not to support dark text",
+        Assert.assertTrue("Default behavior is not to support dark text.",
                 (colors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) == 0);
 
         // Override it
         colors = new WallpaperColors(color, null, null, WallpaperColors.HINT_SUPPORTS_DARK_TEXT);
-        Assert.assertFalse("Forcing dark text support doesn't work",
+        Assert.assertFalse("Forcing dark text support doesn't work.",
                 (colors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) == 0);
     }
 
@@ -57,15 +57,18 @@
         int hints = WallpaperColors.fromBitmap(image).getColorHints();
         boolean supportsDarkText = (hints & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0;
         boolean supportsDarkTheme = (hints & WallpaperColors.HINT_SUPPORTS_DARK_THEME) != 0;
-        Assert.assertTrue("White surface should support dark text", supportsDarkText);
-        Assert.assertFalse("White surface shouldn't support dark theme", supportsDarkTheme);
+        boolean fromBitmap = (hints & WallpaperColors.HINT_FROM_BITMAP) != 0;
+        Assert.assertTrue("White surface should support dark text.", supportsDarkText);
+        Assert.assertFalse("White surface shouldn't support dark theme.", supportsDarkTheme);
+        Assert.assertTrue("From bitmap should be true if object was created "
+                + "using WallpaperColors#fromBitmap.", fromBitmap);
 
         canvas.drawColor(Color.BLACK);
         hints = WallpaperColors.fromBitmap(image).getColorHints();
         supportsDarkText = (hints & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0;
         supportsDarkTheme = (hints & WallpaperColors.HINT_SUPPORTS_DARK_THEME) != 0;
-        Assert.assertFalse("Black surface shouldn't support dark text", supportsDarkText);
-        Assert.assertTrue("Black surface should support dark theme", supportsDarkTheme);
+        Assert.assertFalse("Black surface shouldn't support dark text.", supportsDarkText);
+        Assert.assertTrue("Black surface should support dark theme.", supportsDarkTheme);
 
         Paint paint = new Paint();
         paint.setStyle(Paint.Style.FILL);
@@ -75,7 +78,12 @@
         supportsDarkText = (WallpaperColors.fromBitmap(image)
                 .getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0;
         Assert.assertFalse("Light surface shouldn't support dark text "
-                + "when it contains dark pixels", supportsDarkText);
+                + "when it contains dark pixels.", supportsDarkText);
+
+        WallpaperColors colors = new WallpaperColors(Color.valueOf(Color.GREEN), null, null);
+        fromBitmap = (colors.getColorHints() & WallpaperColors.HINT_FROM_BITMAP) != 0;
+        Assert.assertFalse("Object created from public constructor should not contain "
+                + "HINT_FROM_BITMAP.", fromBitmap);
     }
 
     /**
diff --git a/tests/Internal/src/com/android/internal/colorextraction/types/TonalTest.java b/tests/Internal/src/com/android/internal/colorextraction/types/TonalTest.java
index 6dc9ba7..d46fff4 100644
--- a/tests/Internal/src/com/android/internal/colorextraction/types/TonalTest.java
+++ b/tests/Internal/src/com/android/internal/colorextraction/types/TonalTest.java
@@ -99,20 +99,39 @@
     }
 
     @Test
-    public void tonal_excludeBlacklistedColor() {
+    public void tonal_blacklistTest() {
         // Make sure that palette generation will fail.
-        Tonal tonal = new Tonal(InstrumentationRegistry.getContext());
+        final Tonal tonal = new Tonal(InstrumentationRegistry.getContext());
 
         // Creating a WallpaperColors object that contains *only* blacklisted colors.
-        float[] hsl = tonal.getBlacklistedColors().get(0).getCenter();
-        WallpaperColors colors = new WallpaperColors(Color.valueOf(ColorUtils.HSLToColor(hsl)),
-                null, null, 0);
+        final float[] hsl = tonal.getBlacklistedColors().get(0).getCenter();
+        final int blacklistedColor = ColorUtils.HSLToColor(hsl);
+        WallpaperColors colorsFromBitmap = new WallpaperColors(Color.valueOf(blacklistedColor),
+                null, null, WallpaperColors.HINT_FROM_BITMAP);
 
         // Make sure that palette generation will fail
-        GradientColors normal = new GradientColors();
-        tonal.extractInto(colors, normal, new GradientColors(),
+        final GradientColors normal = new GradientColors();
+        tonal.extractInto(colorsFromBitmap, normal, new GradientColors(),
                 new GradientColors());
         assertTrue("Cannot generate a tonal palette from blacklisted colors.",
                 normal.getMainColor() == Tonal.MAIN_COLOR_DARK);
     }
+
+    @Test
+    public void tonal_ignoreBlacklistTest() {
+        final Tonal tonal = new Tonal(InstrumentationRegistry.getContext());
+
+        // Creating a WallpaperColors object that contains *only* blacklisted colors.
+        final float[] hsl = tonal.getBlacklistedColors().get(0).getCenter();
+        final int blacklistedColor = ColorUtils.HSLToColor(hsl);
+        WallpaperColors colors = new WallpaperColors(Color.valueOf(blacklistedColor),
+                null, null);
+
+        // Blacklist should be ignored when HINT_FROM_BITMAP isn't present.
+        final GradientColors normal = new GradientColors();
+        tonal.extractInto(colors, normal, new GradientColors(),
+                new GradientColors());
+        assertTrue("Blacklist should never be used on WallpaperColors generated using "
+                + "default constructor.", normal.getMainColor() == blacklistedColor);
+    }
 }
diff --git a/tests/MusicBrowserDemo/Android.mk b/tests/MusicBrowserDemo/Android.mk
deleted file mode 100644
index 207774b..0000000
--- a/tests/MusicBrowserDemo/Android.mk
+++ /dev/null
@@ -1,35 +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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_PACKAGE_NAME := MusicBrowserDemo
-#LOCAL_SDK_VERSION := current
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    android-support-v4 \
-    android-support-v7-appcompat
-
-LOCAL_RESOURCE_DIR := \
-        $(LOCAL_PATH)/res \
-        frameworks/support/v7/appcompat/res
-LOCAL_PROGUARD_ENABLED := disabled
-#LOCAL_PROGUARD_FLAG_FILES := proguard.flags
-
-LOCAL_AAPT_FLAGS := \
-        --auto-add-overlay \
-        --extra-packages android.support.v7.appcompat
-include $(BUILD_PACKAGE)
diff --git a/tests/MusicBrowserDemo/AndroidManifest.xml b/tests/MusicBrowserDemo/AndroidManifest.xml
deleted file mode 100644
index d2acfe2..0000000
--- a/tests/MusicBrowserDemo/AndroidManifest.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.musicbrowserdemo"
-    android:versionCode="1"
-    android:versionName="1.0" >
-
-    <uses-sdk
-        android:minSdkVersion="9"
-        android:targetSdkVersion="19" />
-
-    <application
-        android:allowBackup="true"
-        android:icon="@drawable/ic_launcher"
-        android:label="@string/app_name"
-        android:theme="@style/AppTheme"
-        >
-
-        <activity
-            android:name="com.example.android.musicbrowserdemo.MainActivity"
-            android:label="@string/app_name"
-            >
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-
-    </application>
-
-</manifest>
diff --git a/tests/MusicBrowserDemo/res/drawable-hdpi/ic_launcher.png b/tests/MusicBrowserDemo/res/drawable-hdpi/ic_launcher.png
deleted file mode 100644
index 47d6854..0000000
--- a/tests/MusicBrowserDemo/res/drawable-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/MusicBrowserDemo/res/drawable-mdpi/ic_launcher.png b/tests/MusicBrowserDemo/res/drawable-mdpi/ic_launcher.png
deleted file mode 100644
index 01b53fd..0000000
--- a/tests/MusicBrowserDemo/res/drawable-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/MusicBrowserDemo/res/drawable-xhdpi/ic_launcher.png b/tests/MusicBrowserDemo/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100644
index af762f2..0000000
--- a/tests/MusicBrowserDemo/res/drawable-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/MusicBrowserDemo/res/drawable-xxhdpi/ic_launcher.png b/tests/MusicBrowserDemo/res/drawable-xxhdpi/ic_launcher.png
deleted file mode 100644
index eef47aa..0000000
--- a/tests/MusicBrowserDemo/res/drawable-xxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/MusicBrowserDemo/res/values/strings.xml b/tests/MusicBrowserDemo/res/values/strings.xml
deleted file mode 100644
index 858f278f..0000000
--- a/tests/MusicBrowserDemo/res/values/strings.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<resources>
-
-    <string name="app_name">Music Browser</string>
-
-</resources>
diff --git a/tests/MusicBrowserDemo/res/values/styles.xml b/tests/MusicBrowserDemo/res/values/styles.xml
deleted file mode 100644
index b83662d..0000000
--- a/tests/MusicBrowserDemo/res/values/styles.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<resources>
-
-    <!--
-        Base application theme, dependent on API level. This theme is replaced
-        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-    -->
-    <style name="AppBaseTheme" parent="Theme.AppCompat.Light">
-        <!--
-            Theme customizations available in newer API levels can go in
-            res/values-vXX/styles.xml, while customizations related to
-            backward-compatibility can go here.
-        -->
-    </style>
-
-    <!-- Application theme. -->
-    <style name="AppTheme" parent="AppBaseTheme">
-        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
-    </style>
-
-</resources>
diff --git a/tests/MusicBrowserDemo/src/com/example/android/musicbrowserdemo/AppListFragment.java b/tests/MusicBrowserDemo/src/com/example/android/musicbrowserdemo/AppListFragment.java
deleted file mode 100644
index 4e18ce9..0000000
--- a/tests/MusicBrowserDemo/src/com/example/android/musicbrowserdemo/AppListFragment.java
+++ /dev/null
@@ -1,149 +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.example.android.musicbrowserdemo;
-
-import android.content.Context;
-import android.content.ComponentName;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.service.media.MediaBrowserService;
-import android.os.Bundle;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v4.app.ListFragment;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
-
-import java.util.ArrayList;
-import java.util.List;
-
-// TODO: Include an icon.
-
-public class AppListFragment extends ListFragment {
-
-    private Adapter mAdapter;
-    private List<Item> mItems;
-
-    public AppListFragment() {
-    }
-
-    @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-        mAdapter = new Adapter();
-        setListAdapter(mAdapter);
-    }
-
-    @Override
-    public void onListItemClick(ListView l, View v, int position, long id) {
-        final Item item = mItems.get(position);
-
-        Log.i("AppListFragment", "Item clicked: " + position + " -- " + item.component);
-
-        final BrowserListFragment fragment = new BrowserListFragment();
-
-        final Bundle args = new Bundle();
-        args.putParcelable(BrowserListFragment.ARG_COMPONENT, item.component);
-        fragment.setArguments(args);
-
-        getFragmentManager().beginTransaction()
-                .replace(android.R.id.content, fragment)
-                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
-                .addToBackStack(null)
-                .commit();
-    }
-
-    private static class Item {
-        final String label;
-        final ComponentName component;
-
-        Item(String l, ComponentName c) {
-            this.label = l;
-            this.component = c;
-        }
-    }
-
-    private class Adapter extends BaseAdapter {
-        private final LayoutInflater mInflater;
-
-        Adapter() {
-            super();
-
-            final Context context = getActivity();
-            mInflater = LayoutInflater.from(context);
-
-            // Load the data
-            final PackageManager pm = context.getPackageManager();
-            final Intent intent = new Intent(MediaBrowserService.SERVICE_INTERFACE);
-            final List<ResolveInfo> list = pm.queryIntentServices(intent, 0);
-            final int N = list.size();
-            mItems = new ArrayList(N);
-            for (int i=0; i<N; i++) {
-                final ResolveInfo ri = list.get(i);
-                mItems.add(new Item(ri.loadLabel(pm).toString(), new ComponentName(
-                            ri.serviceInfo.applicationInfo.packageName,
-                            ri.serviceInfo.name)));
-            }
-        }
-
-        @Override
-        public int getCount() {
-            return mItems.size();
-        }
-
-        @Override
-        public Item getItem(int position) {
-            return mItems.get(position);
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-
-        @Override
-        public int getItemViewType(int position) {
-            return 1;
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            if (convertView == null) {
-                convertView = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false);
-            }
-
-            final TextView tv = (TextView)convertView;
-            final Item item = mItems.get(position);
-            tv.setText(item.label);
-
-            return convertView;
-        }
-
-        @Override
-        public int getViewTypeCount() {
-            return 1;
-        }
-    }
-}
-
-
diff --git a/tests/MusicBrowserDemo/src/com/example/android/musicbrowserdemo/BrowserListFragment.java b/tests/MusicBrowserDemo/src/com/example/android/musicbrowserdemo/BrowserListFragment.java
deleted file mode 100644
index 8cc9b97..0000000
--- a/tests/MusicBrowserDemo/src/com/example/android/musicbrowserdemo/BrowserListFragment.java
+++ /dev/null
@@ -1,212 +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.example.android.musicbrowserdemo;
-
-import android.content.Context;
-import android.content.ComponentName;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.media.browse.MediaBrowser;
-import android.service.media.MediaBrowserService;
-import android.os.Bundle;
-import android.net.Uri;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v4.app.ListFragment;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class BrowserListFragment extends ListFragment {
-    private static final String TAG = "BrowserListFragment";
-
-    // Hints
-    public static final String HINT_DISPLAY = "com.example.android.musicbrowserdemo.DISPLAY";
-
-    // For args
-    public static final String ARG_COMPONENT = "component";
-    public static final String ARG_ID = "uri";
-
-    private Adapter mAdapter;
-    private List<Item> mItems = new ArrayList();
-    private ComponentName mComponent;
-    private String mNodeId;
-    private MediaBrowser mBrowser;
-
-    private static class Item {
-        final MediaBrowser.MediaItem media;
-
-        Item(MediaBrowser.MediaItem m) {
-            this.media = m;
-        }
-    }
-
-    public BrowserListFragment() {
-    }
-
-    @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-        Log.d(TAG, "onActivityCreated -- " + hashCode());
-        mAdapter = new Adapter();
-        setListAdapter(mAdapter);
-
-        // Get our arguments
-        final Bundle args = getArguments();
-        mComponent = args.getParcelable(ARG_COMPONENT);
-        mNodeId = args.getString(ARG_ID);
-
-        // A hint about who we are, so the service can customize the results if it wants to.
-        final Bundle rootHints = new Bundle();
-        rootHints.putBoolean(HINT_DISPLAY, true);
-
-        mBrowser = new MediaBrowser(getActivity(), mComponent, mConnectionCallbacks, rootHints);
-    }
-
-    @Override
-    public void onStart() {
-        super.onStart();
-        mBrowser.connect();
-    }
-
-    @Override
-    public void onStop() {
-        super.onStop();
-        mBrowser.disconnect();
-    }
-
-    @Override
-    public void onListItemClick(ListView l, View v, int position, long id) {
-        final Item item = mItems.get(position);
-
-        Log.i("BrowserListFragment", "Item clicked: " + position + " -- "
-                + mAdapter.getItem(position).media.getDescription().getIconUri());
-
-        final BrowserListFragment fragment = new BrowserListFragment();
-
-        final Bundle args = new Bundle();
-        args.putParcelable(BrowserListFragment.ARG_COMPONENT, mComponent);
-        args.putParcelable(BrowserListFragment.ARG_ID, item.media.getDescription().getIconUri());
-        fragment.setArguments(args);
-
-        getFragmentManager().beginTransaction()
-                .replace(android.R.id.content, fragment)
-                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
-                .addToBackStack(null)
-                .commit();
-
-    }
-
-    final MediaBrowser.ConnectionCallback mConnectionCallbacks
-            = new MediaBrowser.ConnectionCallback() {
-        @Override
-        public void onConnected() {
-            Log.d(TAG, "mConnectionCallbacks.onConnected");
-            if (mNodeId == null) {
-                mNodeId = mBrowser.getRoot();
-            }
-            mBrowser.subscribe(mNodeId, new MediaBrowser.SubscriptionCallback() {
-                    @Override
-                public void onChildrenLoaded(String parentId,
-                            List<MediaBrowser.MediaItem> children) {
-                    Log.d(TAG, "onChildrenLoaded parentId=" + parentId
-                                + " children= " + children);
-                        mItems.clear();
-                        final int N = children.size();
-                        for (int i=0; i<N; i++) {
-                            mItems.add(new Item(children.get(i)));
-                        }
-                        mAdapter.notifyDataSetChanged();
-                    }
-
-                    @Override
-                public void onError(String parentId) {
-                    Log.d(TAG, "onError parentId=" + parentId);
-                    }
-                });
-        }
-
-        @Override
-        public void onConnectionSuspended() {
-            Log.d(TAG, "mConnectionCallbacks.onConnectionSuspended");
-        }
-
-        @Override
-        public void onConnectionFailed() {
-            Log.d(TAG, "mConnectionCallbacks.onConnectionFailed");
-        }
-    };
-
-    private class Adapter extends BaseAdapter {
-        private final LayoutInflater mInflater;
-
-        Adapter() {
-            super();
-
-            final Context context = getActivity();
-            mInflater = LayoutInflater.from(context);
-        }
-
-        @Override
-        public int getCount() {
-            return mItems.size();
-        }
-
-        @Override
-        public Item getItem(int position) {
-            return mItems.get(position);
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-
-        @Override
-        public int getItemViewType(int position) {
-            return 1;
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            if (convertView == null) {
-                convertView = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false);
-            }
-
-            final TextView tv = (TextView)convertView;
-            final Item item = mItems.get(position);
-            tv.setText(item.media.getDescription().getTitle());
-
-            return convertView;
-        }
-
-        @Override
-        public int getViewTypeCount() {
-            return 1;
-        }
-    }
-}
-
-
diff --git a/tests/MusicBrowserDemo/src/com/example/android/musicbrowserdemo/MainActivity.java b/tests/MusicBrowserDemo/src/com/example/android/musicbrowserdemo/MainActivity.java
deleted file mode 100644
index 4c28234..0000000
--- a/tests/MusicBrowserDemo/src/com/example/android/musicbrowserdemo/MainActivity.java
+++ /dev/null
@@ -1,48 +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.example.android.musicbrowserdemo;
-
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.app.FragmentManager;
-
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-import android.widget.ArrayAdapter;
-import android.widget.ListView;
-
-/**
- * Main activity class.
- */
-public class MainActivity extends FragmentActivity {
-
-    private static final String BROWSER_FRAGMENT_TAG = "browser";
-
-    @Override
-    protected void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        Log.d("MainActivity", "-------------------------------------------------------");
-
-        // If we are starting afresh, start at the app list.
-        final FragmentManager fm = getSupportFragmentManager();
-        if (fm.findFragmentById(android.R.id.content) == null) {
-            fm.beginTransaction().add(android.R.id.content, new AppListFragment()).commit();
-        }
-    }
-}
-
diff --git a/tests/MusicServiceDemo/Android.mk b/tests/MusicServiceDemo/Android.mk
deleted file mode 100644
index feef67a..0000000
--- a/tests/MusicServiceDemo/Android.mk
+++ /dev/null
@@ -1,35 +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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_PACKAGE_NAME := MusicServiceDemo
-#LOCAL_SDK_VERSION := current
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    android-support-v4 \
-    android-support-v7-appcompat
-
-LOCAL_RESOURCE_DIR := \
-        $(LOCAL_PATH)/res \
-        frameworks/support/v7/appcompat/res
-LOCAL_PROGUARD_ENABLED := disabled
-#LOCAL_PROGUARD_FLAG_FILES := proguard.flags
-
-LOCAL_AAPT_FLAGS := \
-        --auto-add-overlay \
-        --extra-packages android.support.v7.appcompat
-include $(BUILD_PACKAGE)
diff --git a/tests/MusicServiceDemo/AndroidManifest.xml b/tests/MusicServiceDemo/AndroidManifest.xml
deleted file mode 100644
index e00e2e2..0000000
--- a/tests/MusicServiceDemo/AndroidManifest.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.musicservicedemo"
-    android:versionCode="1"
-    android:versionName="1.0" >
-
-    <uses-permission android:name="android.permission.INTERNET" />
-    <uses-permission android:name="android.permission.WAKE_LOCK" />
-
-    <uses-sdk
-        android:minSdkVersion="9"
-        android:targetSdkVersion="19" />
-
-    <application
-        android:allowBackup="true"
-        android:icon="@drawable/ic_launcher"
-        android:label="@string/app_name"
-        android:theme="@style/AppTheme"
-        >
-
-        <activity
-            android:name="com.example.android.automotive.musicplayer.MainActivity"
-            android:label="@string/app_name" >
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-
-        <service
-            android:name=".BrowserService"
-            android:exported="true"
-            >
-            <intent-filter>
-                <action android:name="android.media.browse.MediaBrowserService" />
-            </intent-filter>
-        </service>
-    </application>
-
-</manifest>
diff --git a/tests/MusicServiceDemo/proguard-project.txt b/tests/MusicServiceDemo/proguard-project.txt
deleted file mode 100644
index f2fe155..0000000
--- a/tests/MusicServiceDemo/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
-#}
diff --git a/tests/MusicServiceDemo/res/drawable-hdpi/ic_launcher.png b/tests/MusicServiceDemo/res/drawable-hdpi/ic_launcher.png
deleted file mode 100644
index 47d6854..0000000
--- a/tests/MusicServiceDemo/res/drawable-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/MusicServiceDemo/res/drawable-mdpi/ic_launcher.png b/tests/MusicServiceDemo/res/drawable-mdpi/ic_launcher.png
deleted file mode 100644
index 01b53fd..0000000
--- a/tests/MusicServiceDemo/res/drawable-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/MusicServiceDemo/res/drawable-xhdpi/ic_launcher.png b/tests/MusicServiceDemo/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100644
index af762f2..0000000
--- a/tests/MusicServiceDemo/res/drawable-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/MusicServiceDemo/res/drawable-xxhdpi/ic_launcher.png b/tests/MusicServiceDemo/res/drawable-xxhdpi/ic_launcher.png
deleted file mode 100644
index eef47aa..0000000
--- a/tests/MusicServiceDemo/res/drawable-xxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/MusicServiceDemo/res/drawable-xxhdpi/thumbsup.png b/tests/MusicServiceDemo/res/drawable-xxhdpi/thumbsup.png
deleted file mode 100644
index ea98c95..0000000
--- a/tests/MusicServiceDemo/res/drawable-xxhdpi/thumbsup.png
+++ /dev/null
Binary files differ
diff --git a/tests/MusicServiceDemo/res/layout/activity_main.xml b/tests/MusicServiceDemo/res/layout/activity_main.xml
deleted file mode 100644
index 71753e3..0000000
--- a/tests/MusicServiceDemo/res/layout/activity_main.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context="com.example.android.automotive.musicplayer.MainActivity"
-    tools:ignore="MergeRootFrame" />
diff --git a/tests/MusicServiceDemo/res/layout/fragment_main.xml b/tests/MusicServiceDemo/res/layout/fragment_main.xml
deleted file mode 100644
index 8796e86..0000000
--- a/tests/MusicServiceDemo/res/layout/fragment_main.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:paddingBottom="@dimen/activity_vertical_margin"
-    android:paddingLeft="@dimen/activity_horizontal_margin"
-    android:paddingRight="@dimen/activity_horizontal_margin"
-    android:paddingTop="@dimen/activity_vertical_margin"
-    tools:context="com.example.android.automotive.musicplayer.MainActivity$PlaceholderFragment" >
-
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/app_name" />
-
-</RelativeLayout>
diff --git a/tests/MusicServiceDemo/res/values/colors.xml b/tests/MusicServiceDemo/res/values/colors.xml
deleted file mode 100644
index 44dd05d..0000000
--- a/tests/MusicServiceDemo/res/values/colors.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<resources>
-    <color name="yellow">#ffffff00</color>
-    <color name="green">#ff00ff00</color>
-    <color name="blue">#ff0000ff</color>
-    <color name="red">#ffff0000</color>
-</resources>
diff --git a/tests/MusicServiceDemo/res/values/dimens.xml b/tests/MusicServiceDemo/res/values/dimens.xml
deleted file mode 100644
index 9f63ef2..0000000
--- a/tests/MusicServiceDemo/res/values/dimens.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<resources>
-
-    <!-- Default screen margins, per the Android Design guidelines. -->
-    <dimen name="activity_horizontal_margin">16dp</dimen>
-    <dimen name="activity_vertical_margin">16dp</dimen>
-
-</resources>
diff --git a/tests/MusicServiceDemo/res/values/strings.xml b/tests/MusicServiceDemo/res/values/strings.xml
deleted file mode 100644
index 14c0171..0000000
--- a/tests/MusicServiceDemo/res/values/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<resources>
-
-    <string name="app_name">Music Service Demo</string>
-    <string name="action_settings">Settings</string>
-    <string name="thumbs_up">Thumbs Up</string>
-    <string name="music_error">No music found</string>
-    <string name="now_playing">Now Playing</string>
-
-</resources>
diff --git a/tests/MusicServiceDemo/res/values/styles.xml b/tests/MusicServiceDemo/res/values/styles.xml
deleted file mode 100644
index b83662d..0000000
--- a/tests/MusicServiceDemo/res/values/styles.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<resources>
-
-    <!--
-        Base application theme, dependent on API level. This theme is replaced
-        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-    -->
-    <style name="AppBaseTheme" parent="Theme.AppCompat.Light">
-        <!--
-            Theme customizations available in newer API levels can go in
-            res/values-vXX/styles.xml, while customizations related to
-            backward-compatibility can go here.
-        -->
-    </style>
-
-    <!-- Application theme. -->
-    <style name="AppTheme" parent="AppBaseTheme">
-        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
-    </style>
-
-</resources>
diff --git a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/BrowserService.java b/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/BrowserService.java
deleted file mode 100644
index 4e2e47e..0000000
--- a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/BrowserService.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright (C) 2014 Google Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.musicservicedemo;
-
-import android.app.SearchManager;
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.content.UriMatcher;
-import android.content.res.Resources.NotFoundException;
-import android.database.MatrixCursor;
-import android.graphics.Bitmap;
-import android.media.AudioManager;
-import android.media.MediaDescription;
-import android.media.MediaPlayer;
-import android.media.MediaPlayer.OnCompletionListener;
-import android.media.MediaPlayer.OnErrorListener;
-import android.media.MediaPlayer.OnPreparedListener;
-import android.media.browse.MediaBrowser;
-import android.service.media.MediaBrowserService;
-import android.service.media.MediaBrowserService.BrowserRoot;
-import android.media.session.MediaSession;
-import android.net.Uri;
-import android.net.wifi.WifiManager;
-import android.net.wifi.WifiManager.WifiLock;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.PowerManager;
-import android.os.RemoteException;
-import android.os.SystemClock;
-import android.util.Log;
-
-import com.example.android.musicservicedemo.browser.MusicProvider;
-import com.example.android.musicservicedemo.browser.MusicProviderTask;
-import com.example.android.musicservicedemo.browser.MusicProviderTaskListener;
-import com.example.android.musicservicedemo.browser.MusicTrack;
-
-import org.json.JSONException;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Service that implements MediaBrowserService and returns our menu hierarchy.
- */
-public class BrowserService extends MediaBrowserService {
-    private static final String TAG = "BrowserService";
-
-    // URI paths for browsing music
-    public static final String BROWSE_ROOT_BASE_PATH = "browse";
-    public static final String NOW_PLAYING_PATH = "now_playing";
-    public static final String PIANO_BASE_PATH = "piano";
-    public static final String VOICE_BASE_PATH = "voice";
-
-    // Content URIs
-    public static final String AUTHORITY = "com.example.android.automotive.musicplayer";
-    public static final Uri BASE_URI = Uri.parse("content://" + AUTHORITY);
-    public static final Uri BROWSE_URI = Uri.withAppendedPath(BASE_URI, BROWSE_ROOT_BASE_PATH);
-
-    // URI matcher constants for browsing paths
-    public static final int BROWSE_ROOT = 1;
-    public static final int NOW_PLAYING = 2;
-    public static final int PIANO = 3;
-    public static final int VOICE = 4;
-
-    // Map the the URI paths with the URI matcher constants
-    private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
-    static {
-        sUriMatcher.addURI(AUTHORITY, BROWSE_ROOT_BASE_PATH, BROWSE_ROOT);
-        sUriMatcher.addURI(AUTHORITY, NOW_PLAYING_PATH, NOW_PLAYING);
-        sUriMatcher.addURI(AUTHORITY, PIANO_BASE_PATH, PIANO);
-        sUriMatcher.addURI(AUTHORITY, VOICE_BASE_PATH, VOICE);
-    }
-
-    // Media metadata that will be provided for a media container
-    public static final String[] MEDIA_CONTAINER_PROJECTION = {
-            "uri",
-            "title",
-            "subtitle",
-            "image_uri",
-            "supported_actions"
-    };
-
-    // MusicProvider will download the music catalog
-    private MusicProvider mMusicProvider;
-
-    private MediaSession mSession;
-
-    @Override
-    public void onCreate() {
-        super.onCreate();
-
-        mSession = new MediaSession(this, "com.example.android.musicservicedemo.BrowserService");
-        setSessionToken(mSession.getSessionToken());
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-    }
-
-    @Override
-    public BrowserRoot onGetRoot(String clientPackageName, int clientUid, Bundle rootHints) {
-        return new BrowserRoot(BROWSE_URI.toString(), null);
-    }
-
-    @Override
-    public void onLoadChildren(final String parentId,
-            final Result<List<MediaBrowser.MediaItem>> result) {
-        new Handler().postDelayed(new Runnable() {
-                public void run() {
-                    final ArrayList<MediaBrowser.MediaItem> list = new ArrayList();
-
-                    for (int i=0; i<10; i++) {
-                        MediaDescription.Builder bob = new MediaDescription.Builder();
-                        bob.setTitle("Title " + i);
-                        bob.setSubtitle("Summary " + i);
-                        bob.setMediaId(Uri.withAppendedPath(BASE_URI,
-                                Integer.toString(i)).toString());
-                        list.add(new MediaBrowser.MediaItem(bob.build(),
-                                MediaBrowser.MediaItem.FLAG_BROWSABLE));
-                    }
-
-                    result.sendResult(list);
-                }
-            }, 2000);
-        result.detach();
-    }
-
-    /*
-    @Override
-    public void query(final Query query, final IMetadataResultHandler metadataResultHandler,
-            final IErrorHandler errorHandler)
-            throws RemoteException {
-        Log.d(TAG, "query: " + query);
-        Utils.checkNotNull(query);
-        Utils.checkNotNull(metadataResultHandler);
-        Utils.checkNotNull(errorHandler);
-
-        // Handle async response
-        new Thread(new Runnable() {
-            public void run() {
-                try {
-                    // Pre-load the list of music
-                    List<MusicTrack> musicTracks = getMusicList();
-                    if (musicTracks == null) {
-                        notifyListenersOnPlaybackStateUpdate(getCurrentPlaybackState());
-                        errorHandler.onError(new Error(Error.UNKNOWN,
-                                getString(R.string.music_error)));
-                        return;
-                    }
-
-                    final Uri uri = query.getUri();
-                    int match = sUriMatcher.match(uri);
-                    Log.d(TAG, "Queried: " + uri + "; match: " + match);
-                    switch (match) {
-                        case BROWSE_ROOT:
-                        {
-                            Log.d(TAG, "Browse_root");
-
-                            try {
-                                MatrixCursor matrixCursor = mMusicProvider
-                                        .getRootContainerCurser();
-                                DataHolder holder = new DataHolder(MEDIA_CONTAINER_PROJECTION,
-                                        matrixCursor, null);
-
-                                Log.d(TAG, "on metadata response called " + holder.getCount());
-                                metadataResultHandler.onMetadataResponse(holder);
-                            } catch (RemoteException e) {
-                                Log.w(TAG, "Error delivering metadata in the callback.", e);
-                            }
-                            break;
-                        }
-                        case NOW_PLAYING:
-                        {
-                            try {
-                                Log.d(TAG, "query NOW_PLAYING");
-                                MatrixCursor matrixCursor = mMusicProvider
-                                        .getRootItemCursor(
-                                        PIANO);
-                                DataHolder holder = new DataHolder(MEDIA_CONTAINER_PROJECTION,
-                                        matrixCursor, null);
-                                Log.d(TAG, "on metadata response called " + holder.getCount());
-                                metadataResultHandler.onMetadataResponse(holder);
-                            } catch (RemoteException e) {
-                                Log.w(TAG, "Error querying NOW_PLAYING");
-                            }
-                            break;
-                        }
-                        case PIANO:
-                        {
-                            try {
-                                Log.d(TAG, "query PIANO");
-                                MatrixCursor matrixCursor = mMusicProvider
-                                        .getRootItemCursor(
-                                        PIANO);
-                                DataHolder holder = new DataHolder(MEDIA_CONTAINER_PROJECTION,
-                                        matrixCursor, null);
-                                Log.d(TAG, "on metadata response called " + holder.getCount());
-                                metadataResultHandler.onMetadataResponse(holder);
-                            } catch (RemoteException e) {
-                                Log.w(TAG, "Error querying PIANO");
-                            }
-                            break;
-                        }
-                        case VOICE:
-                        {
-                            try {
-                                Log.d(TAG, "query VOICE");
-                                MatrixCursor matrixCursor = mMusicProvider
-                                        .getRootItemCursor(
-                                        VOICE);
-                                DataHolder holder = new DataHolder(MEDIA_CONTAINER_PROJECTION,
-                                        matrixCursor, null);
-                                Log.d(TAG, "on metadata response called " + holder.getCount());
-                                metadataResultHandler.onMetadataResponse(holder);
-                            } catch (RemoteException e) {
-                                Log.w(TAG, "Error querying VOICE");
-                            }
-                            break;
-                        }
-                        default:
-                        {
-                            Log.w(TAG, "Skipping unmatched URI: " + uri);
-                        }
-                    }
-                } catch (NotFoundException e) {
-                    Log.e(TAG, "::run:", e);
-                } catch (RemoteException e) {
-                    Log.e(TAG, "::run:", e);
-                }
-            } // end run
-        }).start();
-    }
-
-    */
-}
diff --git a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/MainActivity.java b/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/MainActivity.java
deleted file mode 100644
index 99d44e6..0000000
--- a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/MainActivity.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Copyright 2014 Google Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.musicservicedemo;
-
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v7.app.AppCompatActivity;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.example.android.musicservicedemo.R;
-
-// TODO Local UI
-
-/**
- * Main activity of the app.
- */
-public class MainActivity extends AppCompatActivity {
-
-    private static final String LOG = "MainActivity";
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_main);
-
-        if (savedInstanceState == null) {
-            getSupportFragmentManager().beginTransaction()
-                    .add(R.id.container, new PlaceholderFragment())
-                    .commit();
-        }
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
-     */
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-
-        // Inflate the menu; this adds items to the action bar if it is present.
-        //getMenuInflater().inflate(R.menu.main, menu);
-        return true;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem)
-     */
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        // Handle action bar item clicks here. The action bar will
-        // automatically handle clicks on the Home/Up button, so long
-        // as you specify a parent activity in AndroidManifest.xml.
-        int id = item.getItemId();
-        // if (id == R.id.action_settings) {
-        // return true;
-        // }
-        return super.onOptionsItemSelected(item);
-    }
-
-    /**
-     * A placeholder fragment containing a simple view.
-     */
-    public static class PlaceholderFragment extends Fragment {
-
-        public PlaceholderFragment() {
-        }
-
-        /*
-         * (non-Javadoc)
-         * @see
-         * android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater
-         * , android.view.ViewGroup, android.os.Bundle)
-         */
-        @Override
-        public View onCreateView(LayoutInflater inflater, ViewGroup container,
-                Bundle savedInstanceState) {
-            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
-            return rootView;
-        }
-    }
-
-}
diff --git a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/Utils.java b/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/Utils.java
deleted file mode 100644
index 3589761..0000000
--- a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/Utils.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2014 Google Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.musicservicedemo;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.util.Log;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-
-public class Utils {
-
-    private static final String TAG = "Utils";
-
-    /**
-     * Utility method to check that parameters are not null
-     *
-     * @param object
-     */
-    public static final void checkNotNull(Object object) {
-        if (object == null) {
-            throw new NullPointerException();
-        }
-    }
-
-    /**
-     * Utility to download a bitmap
-     *
-     * @param source
-     * @return
-     */
-    public static Bitmap getBitmapFromURL(String source) {
-        try {
-            URL url = new URL(source);
-            HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
-            httpConnection.setDoInput(true);
-            httpConnection.connect();
-            InputStream inputStream = httpConnection.getInputStream();
-            return BitmapFactory.decodeStream(inputStream);
-        } catch (IOException e) {
-            Log.e(TAG, "getBitmapFromUrl: " + source, e);
-        }
-        return null;
-    }
-
-    /**
-     * Utility method to wrap an index
-     *
-     * @param i
-     * @param size
-     * @return
-     */
-    public static int wrapIndex(int i, int size) {
-        int m = i % size;
-        if (m < 0) { // java modulus can be negative
-            m += size;
-        }
-        return m;
-    }
-}
diff --git a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/browser/MusicProvider.java b/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/browser/MusicProvider.java
deleted file mode 100644
index 15038d7..0000000
--- a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/browser/MusicProvider.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright (C) 2014 Google Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.musicservicedemo.browser;
-
-import android.database.MatrixCursor;
-import android.media.session.PlaybackState;
-import android.net.Uri;
-import android.util.Log;
-
-import com.example.android.musicservicedemo.BrowserService;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URLConnection;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Utility class to get a list of MusicTrack's based on a server-side JSON
- * configuration.
- */
-public class MusicProvider {
-
-    private static final String TAG = "MusicProvider";
-
-    private static final String MUSIC_URL = "http://storage.googleapis.com/automotive-media/music.json";
-
-    private static String MUSIC = "music";
-    private static String TITLE = "title";
-    private static String ALBUM = "album";
-    private static String ARTIST = "artist";
-    private static String GENRE = "genre";
-    private static String SOURCE = "source";
-    private static String IMAGE = "image";
-    private static String TRACK_NUMBER = "trackNumber";
-    private static String TOTAL_TRACK_COUNT = "totalTrackCount";
-    private static String DURATION = "duration";
-
-    // Cache for music track data
-    private static List<MusicTrack> mMusicList;
-
-    /**
-     * Get the cached list of music tracks
-     *
-     * @return
-     * @throws JSONException
-     */
-    public List<MusicTrack> getMedia() throws JSONException {
-        if (null != mMusicList && mMusicList.size() > 0) {
-            return mMusicList;
-        }
-        return null;
-    }
-
-    /**
-     * Get the list of music tracks from a server and return the list of
-     * MusicTrack objects.
-     *
-     * @return
-     * @throws JSONException
-     */
-    public List<MusicTrack> retreiveMedia() throws JSONException {
-        if (null != mMusicList) {
-            return mMusicList;
-        }
-        int slashPos = MUSIC_URL.lastIndexOf('/');
-        String path = MUSIC_URL.substring(0, slashPos + 1);
-        JSONObject jsonObj = parseUrl(MUSIC_URL);
-
-        try {
-            JSONArray videos = jsonObj.getJSONArray(MUSIC);
-            if (null != videos) {
-                mMusicList = new ArrayList<MusicTrack>();
-                for (int j = 0; j < videos.length(); j++) {
-                    JSONObject music = videos.getJSONObject(j);
-                    String title = music.getString(TITLE);
-                    String album = music.getString(ALBUM);
-                    String artist = music.getString(ARTIST);
-                    String genre = music.getString(GENRE);
-                    String source = music.getString(SOURCE);
-                    // Media is stored relative to JSON file
-                    if (!source.startsWith("http")) {
-                        source = path + source;
-                    }
-                    String image = music.getString(IMAGE);
-                    if (!image.startsWith("http")) {
-                        image = path + image;
-                    }
-                    int trackNumber = music.getInt(TRACK_NUMBER);
-                    int totalTrackCount = music.getInt(TOTAL_TRACK_COUNT);
-                    int duration = music.getInt(DURATION) * 1000; // ms
-
-                    mMusicList.add(new MusicTrack(title, album, artist, genre, source,
-                            image, trackNumber, totalTrackCount, duration));
-                }
-            }
-        } catch (NullPointerException e) {
-            Log.e(TAG, "retreiveMedia", e);
-        }
-        return mMusicList;
-    }
-
-    /**
-     * Download a JSON file from a server, parse the content and return the JSON
-     * object.
-     *
-     * @param urlString
-     * @return
-     */
-    private JSONObject parseUrl(String urlString) {
-        InputStream is = null;
-        try {
-            java.net.URL url = new java.net.URL(urlString);
-            URLConnection urlConnection = url.openConnection();
-            is = new BufferedInputStream(urlConnection.getInputStream());
-            BufferedReader reader = new BufferedReader(new InputStreamReader(
-                    urlConnection.getInputStream(), "iso-8859-1"), 8);
-            StringBuilder sb = new StringBuilder();
-            String line = null;
-            while ((line = reader.readLine()) != null) {
-                sb.append(line);
-            }
-            return new JSONObject(sb.toString());
-        } catch (Exception e) {
-            Log.d(TAG, "Failed to parse the json for media list", e);
-            return null;
-        } finally {
-            if (null != is) {
-                try {
-                    is.close();
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-        }
-    }
-
-    public MatrixCursor getRootContainerCurser() {
-        MatrixCursor matrixCursor = new MatrixCursor(BrowserService.MEDIA_CONTAINER_PROJECTION);
-        Uri.Builder pianoBuilder = new Uri.Builder();
-        pianoBuilder.authority(BrowserService.AUTHORITY);
-        pianoBuilder.appendPath(BrowserService.PIANO_BASE_PATH);
-        matrixCursor.addRow(new Object[] {
-                pianoBuilder.build(),
-                BrowserService.PIANO_BASE_PATH,
-                "subtitle",
-                null,
-                0
-        });
-
-        Uri.Builder voiceBuilder = new Uri.Builder();
-        voiceBuilder.authority(BrowserService.AUTHORITY);
-        voiceBuilder.appendPath(BrowserService.VOICE_BASE_PATH);
-        matrixCursor.addRow(new Object[] {
-                voiceBuilder.build(),
-                BrowserService.VOICE_BASE_PATH,
-                "subtitle",
-                null,
-                0
-        });
-        return matrixCursor;
-    }
-
-    public MatrixCursor getRootItemCursor(int type) {
-        if (type == BrowserService.NOW_PLAYING) {
-            MatrixCursor matrixCursor = new MatrixCursor(BrowserService.MEDIA_CONTAINER_PROJECTION);
-
-            try {
-                // Just return all of the tracks for now
-                List<MusicTrack> musicTracks = retreiveMedia();
-                for (MusicTrack musicTrack : musicTracks) {
-                    Uri.Builder builder = new Uri.Builder();
-                    builder.authority(BrowserService.AUTHORITY);
-                    builder.appendPath(BrowserService.NOW_PLAYING_PATH);
-                    builder.appendPath(musicTrack.getTitle());
-                    matrixCursor.addRow(new Object[] {
-                            builder.build(),
-                            musicTrack.getTitle(),
-                            musicTrack.getArtist(),
-                            musicTrack.getImage(),
-                            PlaybackState.ACTION_PLAY
-                    });
-                    Log.d(TAG, "Uri " + builder.build());
-                }
-            } catch (JSONException e) {
-                Log.e(TAG, "::getRootItemCursor:", e);
-            }
-
-            Log.d(TAG, "cursor: " + matrixCursor.getCount());
-            return matrixCursor;
-        } else if (type == BrowserService.PIANO) {
-            MatrixCursor matrixCursor = new MatrixCursor(BrowserService.MEDIA_CONTAINER_PROJECTION);
-
-            try {
-                List<MusicTrack> musicTracks = retreiveMedia();
-                for (MusicTrack musicTrack : musicTracks) {
-                    Uri.Builder builder = new Uri.Builder();
-                    builder.authority(BrowserService.AUTHORITY);
-                    builder.appendPath(BrowserService.PIANO_BASE_PATH);
-                    builder.appendPath(musicTrack.getTitle());
-                    matrixCursor.addRow(new Object[] {
-                            builder.build(),
-                            musicTrack.getTitle(),
-                            musicTrack.getArtist(),
-                            musicTrack.getImage(),
-                            PlaybackState.ACTION_PLAY
-                    });
-                    Log.d(TAG, "Uri " + builder.build());
-                }
-            } catch (JSONException e) {
-                Log.e(TAG, "::getRootItemCursor:", e);
-            }
-
-            Log.d(TAG, "cursor: " + matrixCursor.getCount());
-            return matrixCursor;
-        } else if (type == BrowserService.VOICE) {
-            MatrixCursor matrixCursor = new MatrixCursor(BrowserService.MEDIA_CONTAINER_PROJECTION);
-
-            try {
-                List<MusicTrack> musicTracks = retreiveMedia();
-                for (MusicTrack musicTrack : musicTracks) {
-                    Uri.Builder builder = new Uri.Builder();
-                    builder.authority(BrowserService.AUTHORITY);
-                    builder.appendPath(BrowserService.VOICE_BASE_PATH);
-                    builder.appendPath(musicTrack.getTitle());
-                    matrixCursor.addRow(new Object[] {
-                            builder.build(),
-                            musicTrack.getTitle(),
-                            musicTrack.getArtist(),
-                            musicTrack.getImage(),
-                            PlaybackState.ACTION_PLAY
-                    });
-                    Log.d(TAG, "Uri " + builder.build());
-                }
-            } catch (JSONException e) {
-                Log.e(TAG, "::getRootItemCursor:", e);
-            }
-
-            Log.d(TAG, "cursor: " + matrixCursor.getCount());
-            return matrixCursor;
-
-        }
-        return null;
-    }
-}
diff --git a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/browser/MusicProviderTask.java b/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/browser/MusicProviderTask.java
deleted file mode 100644
index ffda110..0000000
--- a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/browser/MusicProviderTask.java
+++ /dev/null
@@ -1,70 +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.example.android.musicservicedemo.browser;
-
-import android.os.AsyncTask;
-import android.util.Log;
-
-import org.json.JSONException;
-
-/**
- * Asynchronous task to retrieve the music data using MusicProvider.
- */
-public class MusicProviderTask extends AsyncTask<Void, Void, Void> {
-
-    private static final String TAG = "MusicProviderTask";
-
-    MusicProvider mMusicProvider;
-    MusicProviderTaskListener mMusicProviderTaskListener;
-
-    /**
-     * Initialize the task with the provider to download the music data and the
-     * listener to be informed when the task is done.
-     *
-     * @param musicProvider
-     * @param listener
-     */
-    public MusicProviderTask(MusicProvider musicProvider,
-            MusicProviderTaskListener listener) {
-        mMusicProvider = musicProvider;
-        mMusicProviderTaskListener = listener;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see android.os.AsyncTask#doInBackground(java.lang.Object[])
-     */
-    @Override
-    protected Void doInBackground(Void... arg0) {
-        try {
-            mMusicProvider.retreiveMedia();
-        } catch (JSONException e) {
-            Log.e(TAG, "::doInBackground:", e);
-        }
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
-     */
-    @Override
-    protected void onPostExecute(Void result) {
-        mMusicProviderTaskListener.onMusicProviderTaskCompleted();
-    }
-
-}
diff --git a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/browser/MusicProviderTaskListener.java b/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/browser/MusicProviderTaskListener.java
deleted file mode 100644
index b1d168f..0000000
--- a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/browser/MusicProviderTaskListener.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2014 Google Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.musicservicedemo.browser;
-
-/**
- * Callback listener for completion of MusicProviderTask
- */
-public interface MusicProviderTaskListener {
-    public void onMusicProviderTaskCompleted();
-}
diff --git a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/browser/MusicTrack.java b/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/browser/MusicTrack.java
deleted file mode 100644
index 02ea899..0000000
--- a/tests/MusicServiceDemo/src/com/example/android/musicservicedemo/browser/MusicTrack.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (C) 2014 Google Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.musicservicedemo.browser;
-
-/**
- * A class to model music track metadata.
- */
-public class MusicTrack {
-
-    private static final String TAG = "MusicTrack";
-
-    private String mTitle;
-    private String mAlbum;
-    private String mArtist;
-    private String mGenre;
-    private String mSource;
-    private String mImage;
-    private int mTrackNumber;
-    private int mTotalTrackCount;
-    private int mDuration;
-
-    /**
-     * Constructor creating a MusicTrack instance.
-     *
-     * @param title
-     * @param album
-     * @param artist
-     * @param genre
-     * @param source
-     * @param image
-     * @param trackNumber
-     * @param totalTrackCount
-     * @param duration
-     */
-    public MusicTrack(String title, String album, String artist, String genre, String source,
-            String image, int trackNumber, int totalTrackCount, int duration) {
-        this.mTitle = title;
-        this.mAlbum = album;
-        this.mArtist = artist;
-        this.mGenre = genre;
-        this.mSource = source;
-        this.mImage = image;
-        this.mTrackNumber = trackNumber;
-        this.mTotalTrackCount = totalTrackCount;
-        this.mDuration = duration;
-    }
-
-    public String getTitle() {
-        return mTitle;
-    }
-
-    public void setTitle(String mTitle) {
-        this.mTitle = mTitle;
-    }
-
-    public String getAlbum() {
-        return mAlbum;
-    }
-
-    public void setAlbum(String mAlbum) {
-        this.mAlbum = mAlbum;
-    }
-
-    public String getArtist() {
-        return mArtist;
-    }
-
-    public void setArtist(String mArtist) {
-        this.mArtist = mArtist;
-    }
-
-    public String getGenre() {
-        return mGenre;
-    }
-
-    public void setGenre(String mGenre) {
-        this.mGenre = mGenre;
-    }
-
-    public String getSource() {
-        return mSource;
-    }
-
-    public void setSource(String mSource) {
-        this.mSource = mSource;
-    }
-
-    public String getImage() {
-        return mImage;
-    }
-
-    public void setImage(String mImage) {
-        this.mImage = mImage;
-    }
-
-    public int getTrackNumber() {
-        return mTrackNumber;
-    }
-
-    public void setTrackNumber(int mTrackNumber) {
-        this.mTrackNumber = mTrackNumber;
-    }
-
-    public int getTotalTrackCount() {
-        return mTotalTrackCount;
-    }
-
-    public void setTotalTrackCount(int mTotalTrackCount) {
-        this.mTotalTrackCount = mTotalTrackCount;
-    }
-
-    public int getDuration() {
-        return mDuration;
-    }
-
-    public void setDuration(int mDuration) {
-        this.mDuration = mDuration;
-    }
-
-    public String toString() {
-        return mTitle;
-    }
-
-}
diff --git a/tests/ServiceCrashTest/Android.mk b/tests/ServiceCrashTest/Android.mk
new file mode 100644
index 0000000..d1f8456
--- /dev/null
+++ b/tests/ServiceCrashTest/Android.mk
@@ -0,0 +1,19 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+# Only compile source java files in this apk.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := ServiceCrashTest
+
+LOCAL_CERTIFICATE := platform
+LOCAL_JAVA_LIBRARIES := legacy-android-test
+
+LOCAL_STATIC_JAVA_LIBRARIES := compatibility-device-util android-support-test
+
+include $(BUILD_PACKAGE)
+
+# Use the following include to make our test apk.
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/ServiceCrashTest/AndroidManifest.xml b/tests/ServiceCrashTest/AndroidManifest.xml
new file mode 100644
index 0000000..387c8b8
--- /dev/null
+++ b/tests/ServiceCrashTest/AndroidManifest.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.tests.servicecrashtest">
+
+    <application android:label="Service Crash Test">
+        <uses-library android:name="android.test.runner" />
+
+        <service android:name=".CrashingService"
+                android:process=":badservice" />
+
+        <activity android:name=".MainActivity" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+            </intent-filter>
+        </activity>
+    </application>
+
+    <instrumentation android:label="Test bound service crash restart"
+            android:name="android.test.InstrumentationTestRunner"
+            android:targetPackage="com.android.tests.servicecrashtest" />
+
+</manifest>
diff --git a/tests/ServiceCrashTest/src/com/android/tests/servicecrashtest/CrashingService.java b/tests/ServiceCrashTest/src/com/android/tests/servicecrashtest/CrashingService.java
new file mode 100644
index 0000000..8593bce
--- /dev/null
+++ b/tests/ServiceCrashTest/src/com/android/tests/servicecrashtest/CrashingService.java
@@ -0,0 +1,66 @@
+/*
+ * 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.tests.servicecrashtest;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.Process;
+import android.widget.Toast;
+
+public class CrashingService extends Service {
+    private ServiceHandler mServiceHandler;
+
+    static long CRASH_DELAY = 1000;
+
+    // Handler that receives messages from the thread
+    private final class ServiceHandler extends Handler {
+        public ServiceHandler(Looper looper) {
+            super(looper);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            throw new RuntimeException("Crashing!");
+        }
+    }
+
+    @Override
+    public void onCreate() {
+        mServiceHandler = new ServiceHandler(Looper.getMainLooper());
+        Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
+
+        Message msg = mServiceHandler.obtainMessage();
+        mServiceHandler.sendMessageDelayed(msg, CRASH_DELAY);
+    }
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        // If we get killed, after returning from here, restart
+        return START_STICKY;
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        // We don't provide binding, so return null
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/tests/ServiceCrashTest/src/com/android/tests/servicecrashtest/MainActivity.java b/tests/ServiceCrashTest/src/com/android/tests/servicecrashtest/MainActivity.java
new file mode 100644
index 0000000..8fffecc
--- /dev/null
+++ b/tests/ServiceCrashTest/src/com/android/tests/servicecrashtest/MainActivity.java
@@ -0,0 +1,70 @@
+/*
+ * 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.tests.servicecrashtest;
+
+import android.app.Activity;
+import android.app.Service;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.util.Log;
+import android.widget.TextView;
+
+import java.util.concurrent.CountDownLatch;
+
+public class MainActivity extends Activity {
+
+    private static final String TAG = "ServiceCrashTest";
+
+    static final CountDownLatch sBindingDiedLatch = new CountDownLatch(1);
+
+    private ServiceConnection mServiceConnection = new ServiceConnection() {
+
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            Log.i(TAG, "Service connected");
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            Log.i(TAG, "Service disconnected");
+        }
+
+        @Override
+        public void onBindingDied(ComponentName componentName) {
+            Log.i(TAG, "Binding died");
+            sBindingDiedLatch.countDown();
+        }
+    };
+
+    @Override
+    public void onCreate(Bundle savedInstance) {
+        super.onCreate(savedInstance);
+
+        setContentView(new TextView(this));
+    }
+
+    public void onResume() {
+        Intent intent = new Intent();
+        intent.setClass(this, CrashingService.class);
+        bindService(intent, mServiceConnection, Service.BIND_AUTO_CREATE);
+
+        super.onResume();
+    }
+}
diff --git a/tests/ServiceCrashTest/src/com/android/tests/servicecrashtest/ServiceCrashTest.java b/tests/ServiceCrashTest/src/com/android/tests/servicecrashtest/ServiceCrashTest.java
new file mode 100644
index 0000000..fb0fa4b
--- /dev/null
+++ b/tests/ServiceCrashTest/src/com/android/tests/servicecrashtest/ServiceCrashTest.java
@@ -0,0 +1,76 @@
+/*
+ * 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.tests.servicecrashtest;
+
+import android.app.UiAutomation;
+import android.content.Context;
+import android.content.Intent;
+import android.os.RemoteException;
+import android.provider.Settings;
+import android.test.InstrumentationTestCase;
+
+import com.android.compatibility.common.util.SystemUtil;
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+public class ServiceCrashTest extends InstrumentationTestCase {
+
+    private static final String TAG = ServiceCrashTest.class.getSimpleName();
+
+    private String mResetConstants = "foo=bar";
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        mResetConstants = Settings.Global.getString(
+                getInstrumentation().getContext().getContentResolver(),
+                Settings.Global.ACTIVITY_MANAGER_CONSTANTS);
+        setAMConstants("service_crash_restart_duration=5000,service_crash_max_retry=4");
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        // Reset the activity manager constants
+        setAMConstants(mResetConstants);
+        super.tearDown();
+    }
+
+    private void setAMConstants(String value) throws IOException {
+        // Set the activity manager constants
+        if (value == null) {
+            SystemUtil.runShellCommand(getInstrumentation(),
+                    "settings delete global activity_manager_constants");
+        } else {
+            SystemUtil.runShellCommand(getInstrumentation(), "settings put global "
+                    + "activity_manager_constants " + value);
+        }
+    }
+
+    public void testCrashQuickly() throws RemoteException {
+        Context ctx = getInstrumentation().getContext();
+        // Start the activity, which will bind the crashing service
+        Intent intent = new Intent();
+        intent.setAction(Intent.ACTION_MAIN);
+        intent.setClass(ctx, MainActivity.class);
+        ctx.startActivity(intent);
+        try {
+            assertTrue(MainActivity.sBindingDiedLatch.await(200, TimeUnit.SECONDS));
+        } catch (InterruptedException ie) {
+        }
+    }
+}
diff --git a/tests/ShowWhenLockedApp/Android.mk b/tests/ShowWhenLockedApp/Android.mk
new file mode 100644
index 0000000..0064167
--- /dev/null
+++ b/tests/ShowWhenLockedApp/Android.mk
@@ -0,0 +1,10 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_PACKAGE_NAME := ShowWhenLocked
+
+LOCAL_MODULE_TAGS := tests
+
+include $(BUILD_PACKAGE)
\ No newline at end of file
diff --git a/tests/ShowWhenLockedApp/AndroidManifest.xml b/tests/ShowWhenLockedApp/AndroidManifest.xml
new file mode 100644
index 0000000..a872e06
--- /dev/null
+++ b/tests/ShowWhenLockedApp/AndroidManifest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.showwhenlocked">
+    <application android:label="ShowWhenLocked">
+        <activity android:name=".ShowWhenLockedActivity"
+                  android:showWhenLocked="true"
+                  android:turnScreenOn="true"
+                  android:launchMode="singleTask">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/tests/ShowWhenLockedApp/src/com/android/showwhenlocked/ShowWhenLockedActivity.java b/tests/ShowWhenLockedApp/src/com/android/showwhenlocked/ShowWhenLockedActivity.java
new file mode 100644
index 0000000..f714831
--- /dev/null
+++ b/tests/ShowWhenLockedApp/src/com/android/showwhenlocked/ShowWhenLockedActivity.java
@@ -0,0 +1,164 @@
+/*
+ * 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.showwhenlocked;
+
+import android.app.Activity;
+import android.app.KeyguardManager;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+
+/**
+ * Sample app to test the manifest attrs {@link android.R.attr#showWhenLocked}
+ * and {@link android.R.attr#turnScreenOn}.
+ *
+ * <p>Run with adb shell am start -n com.android.showwhenlocked/.ShowWhenLockedActivity to test
+ * when the phone has a keyguard enabled and/or the screen is off.
+ *
+ * Use the extra {@link #EXTRA_SHOW_WHEN_LOCKED} and {@link #EXTRA_TURN_SCREEN_ON} to test
+ * multiple scenarios.
+ *
+ * Ex: adb shell am start -n com.android.showwhenlocked/.ShowWhenLockedActivity --ez \
+ *      showWhenLocked false \
+ *      setTurnScreenOnAtStop false
+ *
+ * Note: Behavior may change if values are set to true after the Activity is already created
+ * and only brought to the front. For example, turnScreenOn only takes effect on the next launch
+ * if set using the extra value.
+ */
+public class ShowWhenLockedActivity extends Activity {
+    private static final String TAG = ShowWhenLockedActivity.class.getSimpleName();
+
+    /**
+     * The value set for this extra sets {@link #setShowWhenLocked(boolean)} as soon as the app
+     * is launched. This may cause delays in when the value set takes affect.
+     */
+    private static final String EXTRA_SHOW_WHEN_LOCKED = "showWhenLocked";
+
+    /**
+     * The value set for this extra sets {@link #setTurnScreenOn(boolean)} as soon as the app
+     * is launched. This may cause delays in when the value set takes affect.
+     */
+    private static final String EXTRA_TURN_SCREEN_ON = "turnScreenOn";
+
+    /**
+     * The value set for this extra will call {@link #setShowWhenLocked(boolean)} at onStop so
+     * it take effect on the next launch.
+     */
+    private static final String EXTRA_SHOW_WHEN_LOCKED_STOP = "setShowWhenLockedAtStop";
+
+    /**
+     * The value set for this extra will call {@link #setTurnScreenOn(boolean)} at onStop so
+     * it take effect on the next launch.
+     */
+    private static final String EXTRA_TURN_SCREEN_ON_STOP = "setTurnScreenOnAtStop";
+
+    /**
+     * The value set for this extra will call
+     * {@link KeyguardManager#requestDismissKeyguard(Activity, KeyguardManager.KeyguardDismissCallback)}
+     * as soon as the app is launched.
+     */
+    private static final String EXTRA_DISMISS_KEYGUARD = "dismissKeyguard";
+
+    private boolean showWhenLockedAtStop = true;
+    private boolean turnScreenOnAtStop = true;
+
+    private KeyguardManager mKeyguardManager;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Log.v(TAG, "onCreate");
+        mKeyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
+        handleExtras(getIntent().getExtras());
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        Log.v(TAG, "onStart");
+    }
+
+    @Override
+    protected void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+        handleExtras(intent.getExtras());
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        Log.v(TAG, "onResume");
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        Log.v(TAG, "onPause");
+    }
+
+    @Override
+    protected void onStop() {
+        super.onStop();
+        Log.v(TAG, "onStop");
+
+        setShowWhenLocked(showWhenLockedAtStop);
+        setTurnScreenOn(turnScreenOnAtStop);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        Log.v(TAG, "onDestroy");
+    }
+
+    private void handleExtras(Bundle extras) {
+        if (extras == null) {
+            return;
+        }
+
+        if (extras.containsKey(EXTRA_SHOW_WHEN_LOCKED)) {
+            boolean showWhenLocked = extras.getBoolean(EXTRA_SHOW_WHEN_LOCKED, true);
+            Log.v(TAG, "Setting showWhenLocked to " + showWhenLocked);
+            setShowWhenLocked(showWhenLocked);
+        }
+
+        if (extras.containsKey(EXTRA_TURN_SCREEN_ON)) {
+            boolean turnScreenOn = extras.getBoolean(EXTRA_TURN_SCREEN_ON, true);
+            Log.v(TAG, "Setting turnScreenOn to " + turnScreenOn);
+            setTurnScreenOn(turnScreenOn);
+        }
+
+        if (extras.containsKey(EXTRA_SHOW_WHEN_LOCKED_STOP)) {
+            showWhenLockedAtStop = extras.getBoolean(EXTRA_SHOW_WHEN_LOCKED_STOP, true);
+            Log.v(TAG, "Setting showWhenLockedAtStop to " + showWhenLockedAtStop);
+        }
+
+        if (extras.containsKey(EXTRA_TURN_SCREEN_ON_STOP)) {
+            turnScreenOnAtStop = extras.getBoolean(EXTRA_TURN_SCREEN_ON_STOP, true);
+            Log.v(TAG, "Setting turnScreenOnAtStop to " + turnScreenOnAtStop);
+        }
+
+        if (extras.containsKey(EXTRA_DISMISS_KEYGUARD)) {
+            if (extras.getBoolean(EXTRA_DISMISS_KEYGUARD, false)) {
+                Log.v(TAG, "Requesting dismiss keyguard");
+                mKeyguardManager.requestDismissKeyguard(this, null);
+            }
+        }
+    }
+}
+
diff --git a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
index 8210403..163250d 100644
--- a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
+++ b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
@@ -296,6 +296,7 @@
                     Notification n = new Notification.Builder(NotificationTestList.this, "min")
                             .setSmallIcon(R.drawable.icon2)
                             .setContentTitle("Min priority")
+                            .setTicker("Min priority")
                             .build();
                     mNM.notify("min", 7000, n);
                 }
@@ -306,6 +307,7 @@
                     Notification n = new Notification.Builder(NotificationTestList.this, "low")
                             .setSmallIcon(R.drawable.icon2)
                             .setContentTitle("Low priority")
+                            .setTicker("Low priority")
                             .build();
                     mNM.notify("low", 7002, n);
                 }
@@ -326,6 +328,7 @@
                     Notification n = new Notification.Builder(NotificationTestList.this, "high")
                             .setSmallIcon(R.drawable.icon2)
                             .setContentTitle("High priority")
+                            .setTicker("High priority")
                             .build();
                     mNM.notify("high", 7006, n);
                 }
diff --git a/tests/TouchLatency/.gitignore b/tests/TouchLatency/.gitignore
index cfb7164..bd79078 100644
--- a/tests/TouchLatency/.gitignore
+++ b/tests/TouchLatency/.gitignore
@@ -3,3 +3,4 @@
 /.idea
 .DS_Store
 /build
+.iml
diff --git a/tests/TouchLatency/Android.mk b/tests/TouchLatency/Android.mk
index 6ad4705..969283d 100644
--- a/tests/TouchLatency/Android.mk
+++ b/tests/TouchLatency/Android.mk
@@ -8,19 +8,11 @@
 # omit gradle 'build' dir
 LOCAL_SRC_FILES := $(call all-java-files-under,app/src/main/java)
 
-# use appcompat/support lib from the tree, so improvements/
-# regressions are reflected in test data
 LOCAL_RESOURCE_DIR := \
-    $(LOCAL_PATH)/app/src/main/res \
-    frameworks/support/v7/appcompat/res
+    $(LOCAL_PATH)/app/src/main/res
 
 LOCAL_AAPT_FLAGS := \
-    --auto-add-overlay \
-    --extra-packages android.support.v7.appcompat
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    android-support-v4 \
-    android-support-v7-appcompat
+    --auto-add-overlay
 
 LOCAL_PACKAGE_NAME := TouchLatency
 
diff --git a/tests/TouchLatency/TouchLatency.iml b/tests/TouchLatency/TouchLatency.iml
deleted file mode 100644
index cd87cea..0000000
--- a/tests/TouchLatency/TouchLatency.iml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="java-gradle" name="Java-Gradle">
-      <configuration>
-        <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
-        <option name="BUILDABLE" value="false" />
-      </configuration>
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <excludeFolder url="file://$MODULE_DIR$/.gradle" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/tests/TouchLatency/app/app.iml b/tests/TouchLatency/app/app.iml
deleted file mode 100644
index 689e5e0..0000000
--- a/tests/TouchLatency/app/app.iml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="TouchLatency" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="android-gradle" name="Android-Gradle">
-      <configuration>
-        <option name="GRADLE_PROJECT_PATH" value=":app" />
-      </configuration>
-    </facet>
-    <facet type="android" name="Android">
-      <configuration>
-        <option name="SELECTED_BUILD_VARIANT" value="debug" />
-        <option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
-        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
-        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
-        <option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
-        <option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" />
-        <option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugAndroidTestSources" />
-        <option name="ALLOW_USER_CONFIGURATION" value="false" />
-        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
-        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
-        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
-        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
-      </configuration>
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" inherit-compiler-output="false">
-    <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
-    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/androidTest/debug" />
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/debug" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/androidTest/debug" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
-      <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
-      <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
-    </content>
-    <orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" exported="" name="appcompat-v7-21.0.3" level="project" />
-    <orderEntry type="library" exported="" name="support-annotations-21.0.3" level="project" />
-    <orderEntry type="library" exported="" name="support-v4-21.0.3" level="project" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/tests/TouchLatency/app/build.gradle b/tests/TouchLatency/app/build.gradle
index 7133beb..2337110 100644
--- a/tests/TouchLatency/app/build.gradle
+++ b/tests/TouchLatency/app/build.gradle
@@ -18,8 +18,3 @@
         }
     }
 }
-
-dependencies {
-    compile fileTree(dir: 'libs', include: ['*.jar'])
-    compile 'com.android.support:appcompat-v7:21.0.3'
-}
diff --git a/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java b/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java
index 55440c8..b763c78 100644
--- a/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java
+++ b/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java
@@ -16,12 +16,12 @@
 
 package com.prefabulated.touchlatency;
 
+import android.app.Activity;
 import android.content.Context;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
 import android.os.CountDownTimer;
-import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.text.method.Touch;
 import android.util.AttributeSet;
@@ -173,7 +173,7 @@
     private float mVelocityX, mVelocityY;
 }
 
-public class TouchLatencyActivity extends AppCompatActivity {
+public class TouchLatencyActivity extends Activity {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
diff --git a/tests/TouchLatency/app/src/main/res/menu/menu_touch_latency.xml b/tests/TouchLatency/app/src/main/res/menu/menu_touch_latency.xml
index 1824f4a..5aef72e 100644
--- a/tests/TouchLatency/app/src/main/res/menu/menu_touch_latency.xml
+++ b/tests/TouchLatency/app/src/main/res/menu/menu_touch_latency.xml
@@ -14,8 +14,7 @@
      limitations under the License.
 -->
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools" tools:context=".TouchLatencyActivity">
     <item android:id="@+id/action_settings" android:title="@string/mode"
-        android:orderInCategory="100" app:showAsAction="always" />
+        android:orderInCategory="100" android:showAsAction="always" />
 </menu>
diff --git a/tests/TouchLatency/app/src/main/res/values/styles.xml b/tests/TouchLatency/app/src/main/res/values/styles.xml
index aa7c09f..22da7c1 100644
--- a/tests/TouchLatency/app/src/main/res/values/styles.xml
+++ b/tests/TouchLatency/app/src/main/res/values/styles.xml
@@ -16,7 +16,7 @@
 <resources>
 
     <!-- Base application theme. -->
-    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+    <style name="AppTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
         <!-- Customize your theme here. -->
     </style>
 
diff --git a/tests/UiBench/Android.mk b/tests/UiBench/Android.mk
index 71067ae..e6af4b02 100644
--- a/tests/UiBench/Android.mk
+++ b/tests/UiBench/Android.mk
@@ -15,21 +15,24 @@
     frameworks/support/design/res \
     frameworks/support/v7/appcompat/res \
     frameworks/support/v7/cardview/res \
-    frameworks/support/v7/recyclerview/res
+    frameworks/support/v7/recyclerview/res \
+    frameworks/support/v17/leanback/res
 
 LOCAL_AAPT_FLAGS := \
     --auto-add-overlay \
     --extra-packages android.support.design \
     --extra-packages android.support.v7.appcompat \
     --extra-packages android.support.v7.cardview \
-    --extra-packages android.support.v7.recyclerview
+    --extra-packages android.support.v7.recyclerview \
+    --extra-packages android.support.v17.leanback
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     android-support-design \
     android-support-v4 \
     android-support-v7-appcompat \
     android-support-v7-cardview \
-    android-support-v7-recyclerview
+    android-support-v7-recyclerview \
+    android-support-v17-leanback
 
 LOCAL_PACKAGE_NAME := UiBench
 
diff --git a/tests/UiBench/AndroidManifest.xml b/tests/UiBench/AndroidManifest.xml
index c20be51..2521dc9 100644
--- a/tests/UiBench/AndroidManifest.xml
+++ b/tests/UiBench/AndroidManifest.xml
@@ -257,5 +257,15 @@
                 <category android:name="com.android.test.uibench.TEST" />
             </intent-filter>
         </activity>
+
+        <activity
+            android:name=".leanback.BrowseActivity"
+            android:theme="@style/Theme.Leanback.Browse"
+            android:label="Leanback/Browse Fragment" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.android.test.uibench.TEST" />
+            </intent-filter>
+        </activity>
     </application>
 </manifest>
diff --git a/tests/UiBench/build.gradle b/tests/UiBench/build.gradle
index 03ef7f1..fa2cfcd 100644
--- a/tests/UiBench/build.gradle
+++ b/tests/UiBench/build.gradle
@@ -36,4 +36,5 @@
     compile 'com.android.support:cardview-v7:23.0.1'
     compile 'com.android.support:recyclerview-v7:23.0.1'
     compile 'com.android.support:design:23.0.1'
+    compile 'com.android.support:leanback-v17:23.0.1'
 }
diff --git a/tests/UiBench/src/com/android/test/uibench/leanback/BitmapLoader.java b/tests/UiBench/src/com/android/test/uibench/leanback/BitmapLoader.java
new file mode 100644
index 0000000..8af9d3b
--- /dev/null
+++ b/tests/UiBench/src/com/android/test/uibench/leanback/BitmapLoader.java
@@ -0,0 +1,144 @@
+/*
+ * 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.test.uibench.leanback;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.os.AsyncTask;
+import android.support.v4.util.LruCache;
+import android.util.DisplayMetrics;
+import android.widget.ImageView;
+
+/**
+ * This class simulates a typical Bitmap memory cache with up to 1.5 times of screen pixels.
+ * The sample bitmap is generated in worker threads in AsyncTask.THREAD_POOL_EXECUTOR.
+ * The class does not involve decoding, disk cache i/o, network i/o, as the test is mostly focusing
+ * on the graphics side.
+ * There will be two general use cases for cards in leanback test:
+ * 1. As a typical app, each card has its own id and load its own Bitmap, the test result will
+ *    include impact of texture upload.
+ * 2. All cards share same id/Bitmap and there wont be texture upload.
+ */
+public class BitmapLoader {
+
+    /**
+     * Caches bitmaps with bytes adds up to 1.5 x screen
+     * DO NOT CHANGE this defines baseline of test result.
+     */
+    static final float CACHE_SIZE_TO_SCREEN = 1.5f;
+    /**
+     * 4 bytes per pixel for RGBA_8888
+     */
+    static final int BYTES_PER_PIXEL = 4;
+
+    static LruCache<Long, Bitmap> sLruCache;
+    static Paint sTextPaint = new Paint();
+
+    static {
+        sTextPaint.setColor(Color.BLACK);
+    }
+
+    /**
+     * get or initialize LruCache, the max is set to full screen pixels.
+     */
+    static LruCache<Long, Bitmap> getLruCache(Context context) {
+        if (sLruCache == null) {
+            DisplayMetrics metrics = context.getResources().getDisplayMetrics();
+            int width = metrics.widthPixels;
+            int height = metrics.heightPixels;
+            int maxBytes = (int) (width * height * BYTES_PER_PIXEL * CACHE_SIZE_TO_SCREEN);
+            sLruCache = new LruCache<Long, Bitmap>(maxBytes) {
+                @Override
+                protected int sizeOf(Long key, Bitmap value) {
+                    return value.getByteCount();
+                }
+            };
+        }
+        return sLruCache;
+    }
+
+    static class BitmapAsyncTask extends AsyncTask<Void, Void, Bitmap> {
+
+        ImageView mImageView;
+        long mId;
+        int mWidth;
+        int mHeight;
+
+        BitmapAsyncTask(ImageView view, long id, int width, int height) {
+            mImageView = view;
+            mId = id;
+            mImageView.setTag(this);
+            mWidth = width;
+            mHeight = height;
+        }
+
+        @Override
+        protected Bitmap doInBackground(Void... voids) {
+            // generate a sample bitmap: white background and text showing id
+            Bitmap bitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
+            Canvas canvas = new Canvas(bitmap);
+            canvas.drawARGB(0xff, 0xff, 0xff, 0xff);
+            canvas.drawText(Long.toString(mId), 0f, mHeight / 2, sTextPaint);
+            canvas.setBitmap(null);
+            bitmap.prepareToDraw();
+            return bitmap;
+        }
+
+        @Override
+        protected void onCancelled() {
+            if (mImageView.getTag() == this) {
+                mImageView.setTag(null);
+            }
+        }
+
+        @Override
+        protected void onPostExecute(Bitmap bitmap) {
+            if (mImageView.getTag() == this) {
+                mImageView.setTag(null);
+                sLruCache.put(mId, bitmap);
+                mImageView.setImageBitmap(bitmap);
+            }
+        }
+    }
+
+    public static void loadBitmap(ImageView view, long id, int width, int height) {
+        Context context = view.getContext();
+        Bitmap bitmap = getLruCache(context).get(id);
+        if (bitmap != null) {
+            view.setImageBitmap(bitmap);
+            return;
+        }
+        new BitmapAsyncTask(view, id, width, height)
+                .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+    }
+
+    public static void cancel(ImageView view) {
+        BitmapAsyncTask task = (BitmapAsyncTask) view.getTag();
+        if (task != null && task.mImageView == view) {
+            task.mImageView.setTag(null);
+            task.cancel(false);
+        }
+    }
+
+    public static void clear() {
+        if (sLruCache != null) {
+            sLruCache.evictAll();
+        }
+    }
+}
diff --git a/tests/UiBench/src/com/android/test/uibench/leanback/BrowseActivity.java b/tests/UiBench/src/com/android/test/uibench/leanback/BrowseActivity.java
new file mode 100644
index 0000000..d29f0ea
--- /dev/null
+++ b/tests/UiBench/src/com/android/test/uibench/leanback/BrowseActivity.java
@@ -0,0 +1,31 @@
+/*
+ * 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.test.uibench.leanback;
+
+import android.support.v4.app.FragmentActivity;
+import android.app.Activity;
+import android.os.Bundle;
+
+public class BrowseActivity extends FragmentActivity {
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        if (savedInstanceState == null) {
+            getSupportFragmentManager().beginTransaction()
+                    .add(android.R.id.content, new BrowseFragment())
+                    .commit();
+        }
+    }
+
+}
diff --git a/tests/UiBench/src/com/android/test/uibench/leanback/BrowseFragment.java b/tests/UiBench/src/com/android/test/uibench/leanback/BrowseFragment.java
new file mode 100644
index 0000000..11ea361
--- /dev/null
+++ b/tests/UiBench/src/com/android/test/uibench/leanback/BrowseFragment.java
@@ -0,0 +1,40 @@
+/*
+ * 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.test.uibench.leanback;
+
+import android.os.Bundle;
+
+public class BrowseFragment extends android.support.v17.leanback.app.BrowseSupportFragment {
+
+    public BrowseFragment() {
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        BitmapLoader.clear();
+        TestHelper.initBackground(getActivity());
+        boolean runEntranceTransition = TestHelper.runEntranceTransition(getActivity());
+        if (runEntranceTransition) {
+            prepareEntranceTransition();
+        }
+        setAdapter(TestHelper.initRowsAdapterBuilder(getActivity()).build());
+        if (runEntranceTransition) {
+            startEntranceTransition();
+        }
+    }
+
+}
diff --git a/tests/UiBench/src/com/android/test/uibench/leanback/CardPresenter.java b/tests/UiBench/src/com/android/test/uibench/leanback/CardPresenter.java
new file mode 100644
index 0000000..5194555
--- /dev/null
+++ b/tests/UiBench/src/com/android/test/uibench/leanback/CardPresenter.java
@@ -0,0 +1,62 @@
+/*
+ * 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.test.uibench.leanback;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.support.v17.leanback.widget.ImageCardView;
+import android.support.v17.leanback.widget.Presenter;
+import android.support.v4.content.res.ResourcesCompat;
+import android.view.ContextThemeWrapper;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+
+public class CardPresenter extends Presenter {
+
+    private int mImageWidth = 0;
+    private int mImageHeight = 0;
+
+    public CardPresenter(int width, int height) {
+        mImageWidth = width;
+        mImageHeight = height;
+    }
+
+    @Override
+    public ViewHolder onCreateViewHolder(ViewGroup parent) {
+        Context context = parent.getContext();
+        ImageCardView v = new ImageCardView(context);
+        v.setFocusable(true);
+        v.setFocusableInTouchMode(true);
+        v.setMainImageAdjustViewBounds(true);
+        v.setMainImageDimensions(mImageWidth, mImageHeight);
+        return new ViewHolder(v);
+    }
+
+    @Override
+    public void onBindViewHolder(ViewHolder viewHolder, Object item) {
+        PhotoItem photoItem = (PhotoItem) item;
+        ImageCardView cardView = (ImageCardView) viewHolder.view;
+        cardView.setTitleText(photoItem.getTitle());
+        BitmapLoader.loadBitmap(cardView.getMainImageView(), photoItem.getId(),
+                mImageWidth, mImageHeight);
+    }
+
+    @Override
+    public void onUnbindViewHolder(ViewHolder viewHolder) {
+        ImageCardView cardView = (ImageCardView) viewHolder.view;
+        BitmapLoader.cancel(cardView.getMainImageView());
+    }
+}
diff --git a/tests/UiBench/src/com/android/test/uibench/leanback/PhotoItem.java b/tests/UiBench/src/com/android/test/uibench/leanback/PhotoItem.java
new file mode 100644
index 0000000..acb9a5d0
--- /dev/null
+++ b/tests/UiBench/src/com/android/test/uibench/leanback/PhotoItem.java
@@ -0,0 +1,72 @@
+/*
+ * 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.test.uibench.leanback;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class PhotoItem implements Parcelable {
+
+    private String mTitle;
+    private long mId;
+
+    public PhotoItem(String title, long id) {
+        mTitle = title;
+        mId = id;
+    }
+
+    public long getId() {
+        return mId;
+    }
+
+    public String getTitle() {
+        return mTitle;
+    }
+
+    @Override
+    public String toString() {
+        return mTitle;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mTitle);
+        dest.writeLong(mId);
+    }
+
+    public static final Creator<PhotoItem> CREATOR
+            = new Creator<PhotoItem>() {
+        @Override
+        public PhotoItem createFromParcel(Parcel in) {
+            return new PhotoItem(in);
+        }
+
+        @Override
+        public PhotoItem[] newArray(int size) {
+            return new PhotoItem[size];
+        }
+    };
+
+    private PhotoItem(Parcel in) {
+        mTitle = in.readString();
+        mId = in.readLong();
+    }
+}
diff --git a/tests/UiBench/src/com/android/test/uibench/leanback/TestHelper.java b/tests/UiBench/src/com/android/test/uibench/leanback/TestHelper.java
new file mode 100644
index 0000000..2bf3885
--- /dev/null
+++ b/tests/UiBench/src/com/android/test/uibench/leanback/TestHelper.java
@@ -0,0 +1,238 @@
+/*
+ * 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.test.uibench.leanback;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.support.v17.leanback.app.BackgroundManager;
+import android.support.v17.leanback.widget.ArrayObjectAdapter;
+import android.support.v17.leanback.widget.HeaderItem;
+import android.support.v17.leanback.widget.ListRow;
+import android.support.v17.leanback.widget.ListRowPresenter;
+import android.support.v17.leanback.widget.ObjectAdapter;
+import android.support.v17.leanback.widget.Presenter;
+import android.util.DisplayMetrics;
+import android.util.TypedValue;
+
+public class TestHelper {
+
+    public static final String EXTRA_BACKGROUND = "extra_bg";
+    public static final String EXTRA_ROWS = "extra_rows";
+    public static final String EXTRA_CARDS_PER_ROW = "extra_cards_per_row";
+    public static final String EXTRA_CARD_HEIGHT_DP = "extra_card_height";
+    public static final String EXTRA_CARD_WIDTH_DP = "extra_card_width";
+    public static final String EXTRA_CARD_SHADOW = "extra_card_shadow";
+    public static final String EXTRA_CARD_ROUND_RECT = "extra_card_round_rect";
+    public static final String EXTRA_ENTRANCE_TRANSITION = "extra_entrance_transition";
+    public static final String EXTRA_BITMAP_UPLOAD = "extra_bitmap_upload";
+
+    /**
+     * Dont change the default values, they gave baseline for measuring the performance
+     */
+    static final int DEFAULT_CARD_HEIGHT_DP = 180;
+    static final int DEFAULT_CARD_WIDTH_DP = 125;
+    static final int DEFAULT_CARDS_PER_ROW = 20;
+    static final int DEFAULT_ROWS = 10;
+    static final boolean DEFAULT_ENTRANCE_TRANSITION = false;
+    static final boolean DEFAULT_BACKGROUND = true;
+    static final boolean DEFAULT_CARD_SHADOW = true;
+    static final boolean DEFAULT_CARD_ROUND_RECT = true;
+    static final boolean DEFAULT_BITMAP_UPLOAD = true;
+
+    static long sCardIdSeed = 0;
+    static long sRowIdSeed = 0;
+
+    public static class ListRowPresenterBuilder {
+
+        boolean mShadow = DEFAULT_CARD_SHADOW;
+        boolean mRoundedCorner = DEFAULT_CARD_ROUND_RECT;
+
+        ListRowPresenterBuilder(Context context) {
+        }
+
+        public ListRowPresenterBuilder configShadow(boolean shadow) {
+            mShadow = shadow;
+            return this;
+        }
+
+        public ListRowPresenterBuilder configRoundedCorner(boolean roundedCorner) {
+            mRoundedCorner = roundedCorner;
+            return this;
+        }
+
+        public ListRowPresenter build() {
+            ListRowPresenter listRowPresenter = new ListRowPresenter();
+            listRowPresenter.setShadowEnabled(mShadow);
+            listRowPresenter.enableChildRoundedCorners(mRoundedCorner);
+            return listRowPresenter;
+        }
+    }
+
+    public static class CardPresenterBuilder {
+        Context mContext;
+        int mWidthDP = DEFAULT_CARD_WIDTH_DP;
+        int mHeightDP = DEFAULT_CARD_HEIGHT_DP;
+
+        CardPresenterBuilder(Context context) {
+            mContext = context;
+        }
+
+        public CardPresenterBuilder configWidthDP(int widthDP) {
+            mWidthDP = widthDP;
+            return this;
+        }
+
+        public CardPresenterBuilder configHeightDP(int hightDP) {
+            mHeightDP = hightDP;
+            return this;
+        }
+
+        public Presenter build() {
+            DisplayMetrics dm = mContext.getResources().getDisplayMetrics();
+            return new CardPresenter(
+                    (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mWidthDP, dm),
+                    (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mHeightDP, dm));
+        }
+    }
+
+    public static class RowsAdapterBuilder {
+
+        Context mContext;
+        int mCardsPerRow = DEFAULT_CARDS_PER_ROW;
+        int mRows = DEFAULT_ROWS;
+        CardPresenterBuilder mCardPresenterBuilder;
+        ListRowPresenterBuilder mListRowPresenterBuilder;
+        Presenter mCardPresenter;
+        boolean mBitmapUpload = DEFAULT_BITMAP_UPLOAD;
+
+        static final String[] sSampleStrings = new String[] {
+                "Hello world", "This is a test", "Android TV", "UI Jank Test",
+                "Scroll Up", "Scroll Down", "Load Bitmaps"
+        };
+
+        /**
+         * Create a RowsAdapterBuilder with default settings
+         */
+        public RowsAdapterBuilder(Context context) {
+            mContext = context;
+            mCardPresenterBuilder = new CardPresenterBuilder(context);
+            mListRowPresenterBuilder = new ListRowPresenterBuilder(context);
+        }
+
+        public ListRowPresenterBuilder getListRowPresenterBuilder() {
+            return mListRowPresenterBuilder;
+        }
+
+        public CardPresenterBuilder getCardPresenterBuilder() {
+            return mCardPresenterBuilder;
+        }
+
+        public RowsAdapterBuilder configRows(int rows) {
+            mRows = rows;
+            return this;
+        }
+
+        public RowsAdapterBuilder configCardsPerRow(int cardsPerRow) {
+            mCardsPerRow = cardsPerRow;
+            return this;
+        }
+
+        public RowsAdapterBuilder configBitmapUpLoad(boolean bitmapUpload) {
+            mBitmapUpload = bitmapUpload;
+            return this;
+        }
+
+        public ListRow buildListRow() {
+            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(mCardPresenter);
+            ListRow listRow = new ListRow(new HeaderItem(sRowIdSeed++, "Row"), listRowAdapter);
+            int indexSample = 0;
+            for (int i = 0; i < mCardsPerRow; i++) {
+                // when doing bitmap upload, use different id so each card has different bitmap
+                // otherwise all cards share the same bitmap
+                listRowAdapter.add(new PhotoItem(sSampleStrings[indexSample],
+                        (mBitmapUpload ? sCardIdSeed++ : 0)));
+                indexSample++;
+                if (indexSample >= sSampleStrings.length) {
+                    indexSample = 0;
+                }
+            }
+            return listRow;
+        }
+
+        public ObjectAdapter build() {
+            try {
+                mCardPresenter = mCardPresenterBuilder.build();
+                ArrayObjectAdapter adapter = new ArrayObjectAdapter(
+                        mListRowPresenterBuilder.build());
+                for (int i = 0; i < mRows; i++) {
+                    adapter.add(buildListRow());
+                }
+                return adapter;
+            } finally {
+                mCardPresenter = null;
+            }
+        }
+    }
+
+    public static boolean runEntranceTransition(Activity activity) {
+        return activity.getIntent().getBooleanExtra(EXTRA_ENTRANCE_TRANSITION,
+                DEFAULT_ENTRANCE_TRANSITION);
+    }
+
+    public static RowsAdapterBuilder initRowsAdapterBuilder(Activity activity) {
+        RowsAdapterBuilder builder = new RowsAdapterBuilder(activity);
+        boolean shadow = activity.getIntent().getBooleanExtra(EXTRA_CARD_SHADOW,
+                DEFAULT_CARD_SHADOW);
+        boolean roundRect = activity.getIntent().getBooleanExtra(EXTRA_CARD_ROUND_RECT,
+                DEFAULT_CARD_ROUND_RECT);
+        int widthDp = activity.getIntent().getIntExtra(EXTRA_CARD_WIDTH_DP,
+                DEFAULT_CARD_WIDTH_DP);
+        int heightDp = activity.getIntent().getIntExtra(EXTRA_CARD_HEIGHT_DP,
+                DEFAULT_CARD_HEIGHT_DP);
+        int rows = activity.getIntent().getIntExtra(EXTRA_ROWS, DEFAULT_ROWS);
+        int cardsPerRow = activity.getIntent().getIntExtra(EXTRA_CARDS_PER_ROW,
+                DEFAULT_CARDS_PER_ROW);
+        boolean bitmapUpload = activity.getIntent().getBooleanExtra(EXTRA_BITMAP_UPLOAD,
+                DEFAULT_BITMAP_UPLOAD);
+        builder.configRows(rows)
+                .configCardsPerRow(cardsPerRow)
+                .configBitmapUpLoad(bitmapUpload);
+        builder.getListRowPresenterBuilder()
+                .configRoundedCorner(roundRect)
+                .configShadow(shadow);
+        builder.getCardPresenterBuilder()
+                .configWidthDP(widthDp)
+                .configHeightDP(heightDp);
+        return builder;
+    }
+
+    public static void initBackground(Activity activity) {
+        if (activity.getIntent().getBooleanExtra(EXTRA_BACKGROUND, DEFAULT_BACKGROUND)) {
+            BackgroundManager manager = BackgroundManager.getInstance(activity);
+            manager.attach(activity.getWindow());
+            DisplayMetrics metrics = activity.getResources().getDisplayMetrics();
+            int width = metrics.widthPixels;
+            int height = metrics.heightPixels;
+            Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+            Canvas canvas = new Canvas(bitmap);
+            canvas.drawARGB(255, 128, 128, 128);
+            canvas.setBitmap(null);
+            manager.setBitmap(bitmap);
+        }
+    }
+}
diff --git a/tests/net/AndroidManifest.xml b/tests/net/AndroidManifest.xml
index e069dd0..ba1a2ea 100644
--- a/tests/net/AndroidManifest.xml
+++ b/tests/net/AndroidManifest.xml
@@ -32,7 +32,6 @@
     <uses-permission android:name="android.permission.GET_DETAILED_TASKS" />
     <uses-permission android:name="android.permission.MANAGE_NETWORK_POLICY" />
     <uses-permission android:name="android.permission.READ_NETWORK_USAGE_HISTORY" />
-    <uses-permission android:name="android.permission.MODIFY_NETWORK_ACCOUNTING" />
     <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.MANAGE_USERS" />
diff --git a/tests/net/OWNERS b/tests/net/OWNERS
new file mode 100644
index 0000000..fa26997
--- /dev/null
+++ b/tests/net/OWNERS
@@ -0,0 +1,7 @@
+set noparent
+
+per-file Android.mk = build.master@android.com
+
+ek@google.com
+hugobenichi@google.com
+lorenzo@google.com
diff --git a/tests/net/java/android/net/IpPrefixTest.java b/tests/net/java/android/net/IpPrefixTest.java
new file mode 100644
index 0000000..b5b2c07
--- /dev/null
+++ b/tests/net/java/android/net/IpPrefixTest.java
@@ -0,0 +1,343 @@
+/*
+ * 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.net;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import android.os.Parcel;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import java.net.InetAddress;
+import java.util.Random;
+
+import org.junit.runner.RunWith;
+import org.junit.Test;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class IpPrefixTest {
+
+    private static InetAddress Address(String addr) {
+        return InetAddress.parseNumericAddress(addr);
+    }
+
+    // Explicitly cast everything to byte because "error: possible loss of precision".
+    private static final byte[] IPV4_BYTES = { (byte) 192, (byte) 0, (byte) 2, (byte) 4};
+    private static final byte[] IPV6_BYTES = {
+        (byte) 0x20, (byte) 0x01, (byte) 0x0d, (byte) 0xb8,
+        (byte) 0xde, (byte) 0xad, (byte) 0xbe, (byte) 0xef,
+        (byte) 0x0f, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+        (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xa0
+    };
+
+    @Test
+    public void testConstructor() {
+        IpPrefix p;
+        try {
+            p = new IpPrefix((byte[]) null, 9);
+            fail("Expected NullPointerException: null byte array");
+        } catch(RuntimeException expected) {}
+
+        try {
+            p = new IpPrefix((InetAddress) null, 10);
+            fail("Expected NullPointerException: null InetAddress");
+        } catch(RuntimeException expected) {}
+
+        try {
+            p = new IpPrefix((String) null);
+            fail("Expected NullPointerException: null String");
+        } catch(RuntimeException expected) {}
+
+
+        try {
+            byte[] b2 = {1, 2, 3, 4, 5};
+            p = new IpPrefix(b2, 29);
+            fail("Expected IllegalArgumentException: invalid array length");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            p = new IpPrefix("1.2.3.4");
+            fail("Expected IllegalArgumentException: no prefix length");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            p = new IpPrefix("1.2.3.4/");
+            fail("Expected IllegalArgumentException: empty prefix length");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            p = new IpPrefix("foo/32");
+            fail("Expected IllegalArgumentException: invalid address");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            p = new IpPrefix("1/32");
+            fail("Expected IllegalArgumentException: deprecated IPv4 format");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            p = new IpPrefix("1.2.3.256/32");
+            fail("Expected IllegalArgumentException: invalid IPv4 address");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            p = new IpPrefix("foo/32");
+            fail("Expected IllegalArgumentException: non-address");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            p = new IpPrefix("f00:::/32");
+            fail("Expected IllegalArgumentException: invalid IPv6 address");
+        } catch(IllegalArgumentException expected) {}
+    }
+
+    @Test
+    public void testTruncation() {
+        IpPrefix p;
+
+        p = new IpPrefix(IPV4_BYTES, 32);
+        assertEquals("192.0.2.4/32", p.toString());
+
+        p = new IpPrefix(IPV4_BYTES, 29);
+        assertEquals("192.0.2.0/29", p.toString());
+
+        p = new IpPrefix(IPV4_BYTES, 8);
+        assertEquals("192.0.0.0/8", p.toString());
+
+        p = new IpPrefix(IPV4_BYTES, 0);
+        assertEquals("0.0.0.0/0", p.toString());
+
+        try {
+            p = new IpPrefix(IPV4_BYTES, 33);
+            fail("Expected IllegalArgumentException: invalid prefix length");
+        } catch(RuntimeException expected) {}
+
+        try {
+            p = new IpPrefix(IPV4_BYTES, 128);
+            fail("Expected IllegalArgumentException: invalid prefix length");
+        } catch(RuntimeException expected) {}
+
+        try {
+            p = new IpPrefix(IPV4_BYTES, -1);
+            fail("Expected IllegalArgumentException: negative prefix length");
+        } catch(RuntimeException expected) {}
+
+        p = new IpPrefix(IPV6_BYTES, 128);
+        assertEquals("2001:db8:dead:beef:f00::a0/128", p.toString());
+
+        p = new IpPrefix(IPV6_BYTES, 122);
+        assertEquals("2001:db8:dead:beef:f00::80/122", p.toString());
+
+        p = new IpPrefix(IPV6_BYTES, 64);
+        assertEquals("2001:db8:dead:beef::/64", p.toString());
+
+        p = new IpPrefix(IPV6_BYTES, 3);
+        assertEquals("2000::/3", p.toString());
+
+        p = new IpPrefix(IPV6_BYTES, 0);
+        assertEquals("::/0", p.toString());
+
+        try {
+            p = new IpPrefix(IPV6_BYTES, -1);
+            fail("Expected IllegalArgumentException: negative prefix length");
+        } catch(RuntimeException expected) {}
+
+        try {
+            p = new IpPrefix(IPV6_BYTES, 129);
+            fail("Expected IllegalArgumentException: negative prefix length");
+        } catch(RuntimeException expected) {}
+
+    }
+
+    private void assertAreEqual(Object o1, Object o2) {
+        assertTrue(o1.equals(o2));
+        assertTrue(o2.equals(o1));
+    }
+
+    private void assertAreNotEqual(Object o1, Object o2) {
+        assertFalse(o1.equals(o2));
+        assertFalse(o2.equals(o1));
+    }
+
+    @Test
+    public void testEquals() {
+        IpPrefix p1, p2;
+
+        p1 = new IpPrefix("192.0.2.251/23");
+        p2 = new IpPrefix(new byte[]{(byte) 192, (byte) 0, (byte) 2, (byte) 251}, 23);
+        assertAreEqual(p1, p2);
+
+        p1 = new IpPrefix("192.0.2.5/23");
+        assertAreEqual(p1, p2);
+
+        p1 = new IpPrefix("192.0.2.5/24");
+        assertAreNotEqual(p1, p2);
+
+        p1 = new IpPrefix("192.0.4.5/23");
+        assertAreNotEqual(p1, p2);
+
+
+        p1 = new IpPrefix("2001:db8:dead:beef:f00::80/122");
+        p2 = new IpPrefix(IPV6_BYTES, 122);
+        assertEquals("2001:db8:dead:beef:f00::80/122", p2.toString());
+        assertAreEqual(p1, p2);
+
+        p1 = new IpPrefix("2001:db8:dead:beef:f00::bf/122");
+        assertAreEqual(p1, p2);
+
+        p1 = new IpPrefix("2001:db8:dead:beef:f00::8:0/123");
+        assertAreNotEqual(p1, p2);
+
+        p1 = new IpPrefix("2001:db8:dead:beef::/122");
+        assertAreNotEqual(p1, p2);
+
+        // 192.0.2.4/32 != c000:0204::/32.
+        byte[] ipv6bytes = new byte[16];
+        System.arraycopy(IPV4_BYTES, 0, ipv6bytes, 0, IPV4_BYTES.length);
+        p1 = new IpPrefix(ipv6bytes, 32);
+        assertAreEqual(p1, new IpPrefix("c000:0204::/32"));
+
+        p2 = new IpPrefix(IPV4_BYTES, 32);
+        assertAreNotEqual(p1, p2);
+    }
+
+    @Test
+    public void testContains() {
+        IpPrefix p = new IpPrefix("2001:db8:f00::ace:d00d/127");
+        assertTrue(p.contains(Address("2001:db8:f00::ace:d00c")));
+        assertTrue(p.contains(Address("2001:db8:f00::ace:d00d")));
+        assertFalse(p.contains(Address("2001:db8:f00::ace:d00e")));
+        assertFalse(p.contains(Address("2001:db8:f00::bad:d00d")));
+        assertFalse(p.contains(Address("2001:4868:4860::8888")));
+        assertFalse(p.contains(null));
+        assertFalse(p.contains(Address("8.8.8.8")));
+
+        p = new IpPrefix("192.0.2.0/23");
+        assertTrue(p.contains(Address("192.0.2.43")));
+        assertTrue(p.contains(Address("192.0.3.21")));
+        assertFalse(p.contains(Address("192.0.0.21")));
+        assertFalse(p.contains(Address("8.8.8.8")));
+        assertFalse(p.contains(Address("2001:4868:4860::8888")));
+
+        IpPrefix ipv6Default = new IpPrefix("::/0");
+        assertTrue(ipv6Default.contains(Address("2001:db8::f00")));
+        assertFalse(ipv6Default.contains(Address("192.0.2.1")));
+
+        IpPrefix ipv4Default = new IpPrefix("0.0.0.0/0");
+        assertTrue(ipv4Default.contains(Address("255.255.255.255")));
+        assertTrue(ipv4Default.contains(Address("192.0.2.1")));
+        assertFalse(ipv4Default.contains(Address("2001:db8::f00")));
+    }
+
+    @Test
+    public void testHashCode() {
+        IpPrefix p = new IpPrefix(new byte[4], 0);
+        Random random = new Random();
+        for (int i = 0; i < 100; i++) {
+            final IpPrefix oldP = p;
+            if (random.nextBoolean()) {
+                // IPv4.
+                byte[] b = new byte[4];
+                random.nextBytes(b);
+                p = new IpPrefix(b, random.nextInt(33));
+            } else {
+                // IPv6.
+                byte[] b = new byte[16];
+                random.nextBytes(b);
+                p = new IpPrefix(b, random.nextInt(129));
+            }
+            if (p.equals(oldP)) {
+              assertEquals(p.hashCode(), oldP.hashCode());
+            }
+            if (p.hashCode() != oldP.hashCode()) {
+              assertNotEquals(p, oldP);
+            }
+        }
+    }
+
+    @Test
+    public void testHashCodeIsNotConstant() {
+        IpPrefix[] prefixes = {
+            new IpPrefix("2001:db8:f00::ace:d00d/127"),
+            new IpPrefix("192.0.2.0/23"),
+            new IpPrefix("::/0"),
+            new IpPrefix("0.0.0.0/0"),
+        };
+        for (int i = 0; i < prefixes.length; i++) {
+          for (int j = i + 1; j < prefixes.length; j++) {
+            assertNotEquals(prefixes[i].hashCode(), prefixes[j].hashCode());
+          }
+        }
+    }
+
+    @Test
+    public void testMappedAddressesAreBroken() {
+        // 192.0.2.0/24 != ::ffff:c000:0204/120, but because we use InetAddress,
+        // we are unable to comprehend that.
+        byte[] ipv6bytes = {
+            (byte) 0, (byte) 0, (byte) 0, (byte) 0,
+            (byte) 0, (byte) 0, (byte) 0, (byte) 0,
+            (byte) 0, (byte) 0, (byte) 0xff, (byte) 0xff,
+            (byte) 192, (byte) 0, (byte) 2, (byte) 0};
+        IpPrefix p = new IpPrefix(ipv6bytes, 120);
+        assertEquals(16, p.getRawAddress().length);       // Fine.
+        assertArrayEquals(ipv6bytes, p.getRawAddress());  // Fine.
+
+        // Broken.
+        assertEquals("192.0.2.0/120", p.toString());
+        assertEquals(InetAddress.parseNumericAddress("192.0.2.0"), p.getAddress());
+    }
+
+    public IpPrefix passThroughParcel(IpPrefix p) {
+        Parcel parcel = Parcel.obtain();
+        IpPrefix p2 = null;
+        try {
+            p.writeToParcel(parcel, 0);
+            parcel.setDataPosition(0);
+            p2 = IpPrefix.CREATOR.createFromParcel(parcel);
+        } finally {
+            parcel.recycle();
+        }
+        assertNotNull(p2);
+        return p2;
+    }
+
+    public void assertParcelingIsLossless(IpPrefix p) {
+      IpPrefix p2 = passThroughParcel(p);
+      assertEquals(p, p2);
+    }
+
+    @Test
+    public void testParceling() {
+        IpPrefix p;
+
+        p = new IpPrefix("2001:4860:db8::/64");
+        assertParcelingIsLossless(p);
+        assertTrue(p.isIPv6());
+
+        p = new IpPrefix("192.0.2.0/25");
+        assertParcelingIsLossless(p);
+        assertTrue(p.isIPv4());
+    }
+}
diff --git a/tests/net/java/android/net/LinkAddressTest.java b/tests/net/java/android/net/LinkAddressTest.java
new file mode 100644
index 0000000..c1ad946
--- /dev/null
+++ b/tests/net/java/android/net/LinkAddressTest.java
@@ -0,0 +1,422 @@
+/*
+ * 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.
+ */
+
+package android.net;
+
+import static android.system.OsConstants.IFA_F_DADFAILED;
+import static android.system.OsConstants.IFA_F_DEPRECATED;
+import static android.system.OsConstants.IFA_F_OPTIMISTIC;
+import static android.system.OsConstants.IFA_F_PERMANENT;
+import static android.system.OsConstants.IFA_F_TEMPORARY;
+import static android.system.OsConstants.IFA_F_TENTATIVE;
+import static android.system.OsConstants.RT_SCOPE_HOST;
+import static android.system.OsConstants.RT_SCOPE_LINK;
+import static android.system.OsConstants.RT_SCOPE_SITE;
+import static android.system.OsConstants.RT_SCOPE_UNIVERSE;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.InterfaceAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import android.os.Parcel;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.runner.RunWith;
+import org.junit.Test;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class LinkAddressTest {
+
+    private static final String V4 = "192.0.2.1";
+    private static final String V6 = "2001:db8::1";
+    private static final InetAddress V4_ADDRESS = NetworkUtils.numericToInetAddress(V4);
+    private static final InetAddress V6_ADDRESS = NetworkUtils.numericToInetAddress(V6);
+
+    @Test
+    public void testConstants() {
+        // RT_SCOPE_UNIVERSE = 0, but all the other constants should be nonzero.
+        assertNotEquals(0, RT_SCOPE_HOST);
+        assertNotEquals(0, RT_SCOPE_LINK);
+        assertNotEquals(0, RT_SCOPE_SITE);
+
+        assertNotEquals(0, IFA_F_DEPRECATED);
+        assertNotEquals(0, IFA_F_PERMANENT);
+        assertNotEquals(0, IFA_F_TENTATIVE);
+    }
+
+    @Test
+    public void testConstructors() throws SocketException {
+        LinkAddress address;
+
+        // Valid addresses work as expected.
+        address = new LinkAddress(V4_ADDRESS, 25);
+        assertEquals(V4_ADDRESS, address.getAddress());
+        assertEquals(25, address.getPrefixLength());
+        assertEquals(0, address.getFlags());
+        assertEquals(RT_SCOPE_UNIVERSE, address.getScope());
+        assertTrue(address.isIPv4());
+
+        address = new LinkAddress(V6_ADDRESS, 127);
+        assertEquals(V6_ADDRESS, address.getAddress());
+        assertEquals(127, address.getPrefixLength());
+        assertEquals(0, address.getFlags());
+        assertEquals(RT_SCOPE_UNIVERSE, address.getScope());
+        assertTrue(address.isIPv6());
+
+        // Nonsensical flags/scopes or combinations thereof are acceptable.
+        address = new LinkAddress(V6 + "/64", IFA_F_DEPRECATED | IFA_F_PERMANENT, RT_SCOPE_LINK);
+        assertEquals(V6_ADDRESS, address.getAddress());
+        assertEquals(64, address.getPrefixLength());
+        assertEquals(IFA_F_DEPRECATED | IFA_F_PERMANENT, address.getFlags());
+        assertEquals(RT_SCOPE_LINK, address.getScope());
+        assertTrue(address.isIPv6());
+
+        address = new LinkAddress(V4 + "/23", 123, 456);
+        assertEquals(V4_ADDRESS, address.getAddress());
+        assertEquals(23, address.getPrefixLength());
+        assertEquals(123, address.getFlags());
+        assertEquals(456, address.getScope());
+        assertTrue(address.isIPv4());
+
+        // InterfaceAddress doesn't have a constructor. Fetch some from an interface.
+        List<InterfaceAddress> addrs = NetworkInterface.getByName("lo").getInterfaceAddresses();
+
+        // We expect to find 127.0.0.1/8 and ::1/128, in any order.
+        LinkAddress ipv4Loopback, ipv6Loopback;
+        assertEquals(2, addrs.size());
+        if (addrs.get(0).getAddress() instanceof Inet4Address) {
+            ipv4Loopback = new LinkAddress(addrs.get(0));
+            ipv6Loopback = new LinkAddress(addrs.get(1));
+        } else {
+            ipv4Loopback = new LinkAddress(addrs.get(1));
+            ipv6Loopback = new LinkAddress(addrs.get(0));
+        }
+
+        assertEquals(NetworkUtils.numericToInetAddress("127.0.0.1"), ipv4Loopback.getAddress());
+        assertEquals(8, ipv4Loopback.getPrefixLength());
+
+        assertEquals(NetworkUtils.numericToInetAddress("::1"), ipv6Loopback.getAddress());
+        assertEquals(128, ipv6Loopback.getPrefixLength());
+
+        // Null addresses are rejected.
+        try {
+            address = new LinkAddress(null, 24);
+            fail("Null InetAddress should cause IllegalArgumentException");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            address = new LinkAddress((String) null, IFA_F_PERMANENT, RT_SCOPE_UNIVERSE);
+            fail("Null string should cause IllegalArgumentException");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            address = new LinkAddress((InterfaceAddress) null);
+            fail("Null string should cause NullPointerException");
+        } catch(NullPointerException expected) {}
+
+        // Invalid prefix lengths are rejected.
+        try {
+            address = new LinkAddress(V4_ADDRESS, -1);
+            fail("Negative IPv4 prefix length should cause IllegalArgumentException");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            address = new LinkAddress(V6_ADDRESS, -1);
+            fail("Negative IPv6 prefix length should cause IllegalArgumentException");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            address = new LinkAddress(V4_ADDRESS, 33);
+            fail("/33 IPv4 prefix length should cause IllegalArgumentException");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            address = new LinkAddress(V4 + "/33", IFA_F_PERMANENT, RT_SCOPE_UNIVERSE);
+            fail("/33 IPv4 prefix length should cause IllegalArgumentException");
+        } catch(IllegalArgumentException expected) {}
+
+
+        try {
+            address = new LinkAddress(V6_ADDRESS, 129, IFA_F_PERMANENT, RT_SCOPE_UNIVERSE);
+            fail("/129 IPv6 prefix length should cause IllegalArgumentException");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            address = new LinkAddress(V6 + "/129", IFA_F_PERMANENT, RT_SCOPE_UNIVERSE);
+            fail("/129 IPv6 prefix length should cause IllegalArgumentException");
+        } catch(IllegalArgumentException expected) {}
+
+        // Multicast addresses are rejected.
+        try {
+            address = new LinkAddress("224.0.0.2/32");
+            fail("IPv4 multicast address should cause IllegalArgumentException");
+        } catch(IllegalArgumentException expected) {}
+
+        try {
+            address = new LinkAddress("ff02::1/128");
+            fail("IPv6 multicast address should cause IllegalArgumentException");
+        } catch(IllegalArgumentException expected) {}
+    }
+
+    @Test
+    public void testAddressScopes() {
+        assertEquals(RT_SCOPE_HOST, new LinkAddress("::/128").getScope());
+        assertEquals(RT_SCOPE_HOST, new LinkAddress("0.0.0.0/32").getScope());
+
+        assertEquals(RT_SCOPE_LINK, new LinkAddress("::1/128").getScope());
+        assertEquals(RT_SCOPE_LINK, new LinkAddress("127.0.0.5/8").getScope());
+        assertEquals(RT_SCOPE_LINK, new LinkAddress("fe80::ace:d00d/64").getScope());
+        assertEquals(RT_SCOPE_LINK, new LinkAddress("169.254.5.12/16").getScope());
+
+        assertEquals(RT_SCOPE_SITE, new LinkAddress("fec0::dead/64").getScope());
+
+        assertEquals(RT_SCOPE_UNIVERSE, new LinkAddress("10.1.2.3/21").getScope());
+        assertEquals(RT_SCOPE_UNIVERSE, new LinkAddress("192.0.2.1/25").getScope());
+        assertEquals(RT_SCOPE_UNIVERSE, new LinkAddress("2001:db8::/64").getScope());
+        assertEquals(RT_SCOPE_UNIVERSE, new LinkAddress("5000::/127").getScope());
+    }
+
+    private void assertIsSameAddressAs(LinkAddress l1, LinkAddress l2) {
+        assertTrue(l1 + " unexpectedly does not have same address as " + l2,
+                l1.isSameAddressAs(l2));
+        assertTrue(l2 + " unexpectedly does not have same address as " + l1,
+                l2.isSameAddressAs(l1));
+    }
+
+    private void assertIsNotSameAddressAs(LinkAddress l1, LinkAddress l2) {
+        assertFalse(l1 + " unexpectedly has same address as " + l2,
+                l1.isSameAddressAs(l2));
+        assertFalse(l2 + " unexpectedly has same address as " + l1,
+                l1.isSameAddressAs(l2));
+    }
+
+    private void assertLinkAddressesEqual(LinkAddress l1, LinkAddress l2) {
+        assertTrue(l1 + " unexpectedly not equal to " + l2, l1.equals(l2));
+        assertTrue(l2 + " unexpectedly not equal to " + l1, l2.equals(l1));
+        assertEquals(l1.hashCode(), l2.hashCode());
+    }
+
+    private void assertLinkAddressesNotEqual(LinkAddress l1, LinkAddress l2) {
+        assertFalse(l1 + " unexpectedly equal to " + l2, l1.equals(l2));
+        assertFalse(l2 + " unexpectedly equal to " + l1, l2.equals(l1));
+    }
+
+    @Test
+    public void testEqualsAndSameAddressAs() {
+        LinkAddress l1, l2, l3;
+
+        l1 = new LinkAddress("2001:db8::1/64");
+        l2 = new LinkAddress("2001:db8::1/64");
+        assertLinkAddressesEqual(l1, l2);
+        assertIsSameAddressAs(l1, l2);
+
+        l2 = new LinkAddress("2001:db8::1/65");
+        assertLinkAddressesNotEqual(l1, l2);
+        assertIsNotSameAddressAs(l1, l2);
+
+        l2 = new LinkAddress("2001:db8::2/64");
+        assertLinkAddressesNotEqual(l1, l2);
+        assertIsNotSameAddressAs(l1, l2);
+
+
+        l1 = new LinkAddress("192.0.2.1/24");
+        l2 = new LinkAddress("192.0.2.1/24");
+        assertLinkAddressesEqual(l1, l2);
+        assertIsSameAddressAs(l1, l2);
+
+        l2 = new LinkAddress("192.0.2.1/23");
+        assertLinkAddressesNotEqual(l1, l2);
+        assertIsNotSameAddressAs(l1, l2);
+
+        l2 = new LinkAddress("192.0.2.2/24");
+        assertLinkAddressesNotEqual(l1, l2);
+        assertIsNotSameAddressAs(l1, l2);
+
+
+        // Check equals() and isSameAddressAs() on identical addresses with different flags.
+        l1 = new LinkAddress(V6_ADDRESS, 64);
+        l2 = new LinkAddress(V6_ADDRESS, 64, 0, RT_SCOPE_UNIVERSE);
+        assertLinkAddressesEqual(l1, l2);
+        assertIsSameAddressAs(l1, l2);
+
+        l2 = new LinkAddress(V6_ADDRESS, 64, IFA_F_DEPRECATED, RT_SCOPE_UNIVERSE);
+        assertLinkAddressesNotEqual(l1, l2);
+        assertIsSameAddressAs(l1, l2);
+
+        // Check equals() and isSameAddressAs() on identical addresses with different scope.
+        l1 = new LinkAddress(V4_ADDRESS, 24);
+        l2 = new LinkAddress(V4_ADDRESS, 24, 0, RT_SCOPE_UNIVERSE);
+        assertLinkAddressesEqual(l1, l2);
+        assertIsSameAddressAs(l1, l2);
+
+        l2 = new LinkAddress(V4_ADDRESS, 24, 0, RT_SCOPE_HOST);
+        assertLinkAddressesNotEqual(l1, l2);
+        assertIsSameAddressAs(l1, l2);
+
+        // Addresses with the same start or end bytes aren't equal between families.
+        l1 = new LinkAddress("32.1.13.184/24");
+        l2 = new LinkAddress("2001:db8::1/24");
+        l3 = new LinkAddress("::2001:db8/24");
+
+        byte[] ipv4Bytes = l1.getAddress().getAddress();
+        byte[] l2FirstIPv6Bytes = Arrays.copyOf(l2.getAddress().getAddress(), 4);
+        byte[] l3LastIPv6Bytes = Arrays.copyOfRange(l3.getAddress().getAddress(), 12, 16);
+        assertTrue(Arrays.equals(ipv4Bytes, l2FirstIPv6Bytes));
+        assertTrue(Arrays.equals(ipv4Bytes, l3LastIPv6Bytes));
+
+        assertLinkAddressesNotEqual(l1, l2);
+        assertIsNotSameAddressAs(l1, l2);
+
+        assertLinkAddressesNotEqual(l1, l3);
+        assertIsNotSameAddressAs(l1, l3);
+
+        // Because we use InetAddress, an IPv4 address is equal to its IPv4-mapped address.
+        // TODO: Investigate fixing this.
+        String addressString = V4 + "/24";
+        l1 = new LinkAddress(addressString);
+        l2 = new LinkAddress("::ffff:" + addressString);
+        assertLinkAddressesEqual(l1, l2);
+        assertIsSameAddressAs(l1, l2);
+    }
+
+    @Test
+    public void testHashCode() {
+        LinkAddress l1, l2;
+
+        l1 = new LinkAddress(V4_ADDRESS, 23);
+        l2 = new LinkAddress(V4_ADDRESS, 23, 0, RT_SCOPE_HOST);
+        assertNotEquals(l1.hashCode(), l2.hashCode());
+
+        l1 = new LinkAddress(V6_ADDRESS, 128);
+        l2 = new LinkAddress(V6_ADDRESS, 128, IFA_F_TENTATIVE, RT_SCOPE_UNIVERSE);
+        assertNotEquals(l1.hashCode(), l2.hashCode());
+    }
+
+    private LinkAddress passThroughParcel(LinkAddress l) {
+        Parcel p = Parcel.obtain();
+        LinkAddress l2 = null;
+        try {
+            l.writeToParcel(p, 0);
+            p.setDataPosition(0);
+            l2 = LinkAddress.CREATOR.createFromParcel(p);
+        } finally {
+            p.recycle();
+        }
+        assertNotNull(l2);
+        return l2;
+    }
+
+    private void assertParcelingIsLossless(LinkAddress l) {
+      LinkAddress l2 = passThroughParcel(l);
+      assertEquals(l, l2);
+    }
+
+    @Test
+    public void testParceling() {
+        LinkAddress l;
+
+        l = new LinkAddress(V6_ADDRESS, 64, 123, 456);
+        assertParcelingIsLossless(l);
+
+        l = new LinkAddress(V4 + "/28", IFA_F_PERMANENT, RT_SCOPE_LINK);
+        assertParcelingIsLossless(l);
+    }
+
+    private void assertGlobalPreferred(LinkAddress l, String msg) {
+        assertTrue(msg, l.isGlobalPreferred());
+    }
+
+    private void assertNotGlobalPreferred(LinkAddress l, String msg) {
+        assertFalse(msg, l.isGlobalPreferred());
+    }
+
+    @Test
+    public void testIsGlobalPreferred() {
+        LinkAddress l;
+
+        l = new LinkAddress(V4_ADDRESS, 32, 0, RT_SCOPE_UNIVERSE);
+        assertGlobalPreferred(l, "v4,global,noflags");
+
+        l = new LinkAddress("10.10.1.7/23", 0, RT_SCOPE_UNIVERSE);
+        assertGlobalPreferred(l, "v4-rfc1918,global,noflags");
+
+        l = new LinkAddress("10.10.1.7/23", 0, RT_SCOPE_SITE);
+        assertNotGlobalPreferred(l, "v4-rfc1918,site-local,noflags");
+
+        l = new LinkAddress("127.0.0.7/8", 0, RT_SCOPE_HOST);
+        assertNotGlobalPreferred(l, "v4-localhost,node-local,noflags");
+
+        l = new LinkAddress(V6_ADDRESS, 64, 0, RT_SCOPE_UNIVERSE);
+        assertGlobalPreferred(l, "v6,global,noflags");
+
+        l = new LinkAddress(V6_ADDRESS, 64, IFA_F_PERMANENT, RT_SCOPE_UNIVERSE);
+        assertGlobalPreferred(l, "v6,global,permanent");
+
+        // IPv6 ULAs are not acceptable "global preferred" addresses.
+        l = new LinkAddress("fc12::1/64", 0, RT_SCOPE_UNIVERSE);
+        assertNotGlobalPreferred(l, "v6,ula1,noflags");
+
+        l = new LinkAddress("fd34::1/64", 0, RT_SCOPE_UNIVERSE);
+        assertNotGlobalPreferred(l, "v6,ula2,noflags");
+
+        l = new LinkAddress(V6_ADDRESS, 64, IFA_F_TEMPORARY, RT_SCOPE_UNIVERSE);
+        assertGlobalPreferred(l, "v6,global,tempaddr");
+
+        l = new LinkAddress(V6_ADDRESS, 64, (IFA_F_TEMPORARY|IFA_F_DADFAILED),
+                            RT_SCOPE_UNIVERSE);
+        assertNotGlobalPreferred(l, "v6,global,tempaddr+dadfailed");
+
+        l = new LinkAddress(V6_ADDRESS, 64, (IFA_F_TEMPORARY|IFA_F_DEPRECATED),
+                            RT_SCOPE_UNIVERSE);
+        assertNotGlobalPreferred(l, "v6,global,tempaddr+deprecated");
+
+        l = new LinkAddress(V6_ADDRESS, 64, IFA_F_TEMPORARY, RT_SCOPE_SITE);
+        assertNotGlobalPreferred(l, "v6,site-local,tempaddr");
+
+        l = new LinkAddress(V6_ADDRESS, 64, IFA_F_TEMPORARY, RT_SCOPE_LINK);
+        assertNotGlobalPreferred(l, "v6,link-local,tempaddr");
+
+        l = new LinkAddress(V6_ADDRESS, 64, IFA_F_TEMPORARY, RT_SCOPE_HOST);
+        assertNotGlobalPreferred(l, "v6,node-local,tempaddr");
+
+        l = new LinkAddress("::1/128", IFA_F_PERMANENT, RT_SCOPE_HOST);
+        assertNotGlobalPreferred(l, "v6-localhost,node-local,permanent");
+
+        l = new LinkAddress(V6_ADDRESS, 64, (IFA_F_TEMPORARY|IFA_F_TENTATIVE),
+                            RT_SCOPE_UNIVERSE);
+        assertNotGlobalPreferred(l, "v6,global,tempaddr+tentative");
+
+        l = new LinkAddress(V6_ADDRESS, 64,
+                            (IFA_F_TEMPORARY|IFA_F_TENTATIVE|IFA_F_OPTIMISTIC),
+                            RT_SCOPE_UNIVERSE);
+        assertGlobalPreferred(l, "v6,global,tempaddr+optimistic");
+    }
+}
diff --git a/tests/net/java/android/net/NetworkCapabilitiesTest.java b/tests/net/java/android/net/NetworkCapabilitiesTest.java
index 7346f9f..743344f 100644
--- a/tests/net/java/android/net/NetworkCapabilitiesTest.java
+++ b/tests/net/java/android/net/NetworkCapabilitiesTest.java
@@ -17,6 +17,7 @@
 package android.net;
 
 import static android.net.NetworkCapabilities.NET_CAPABILITY_CBS;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_DUN;
 import static android.net.NetworkCapabilities.NET_CAPABILITY_EIMS;
 import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
 import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED;
@@ -143,6 +144,14 @@
         assertEquals("", nc1.describeImmutableDifferences(nc2));
         assertEquals("", nc1.describeImmutableDifferences(nc1));
 
+        // DUN changing (http://b/65257223)
+        nc1 = new NetworkCapabilities()
+                .addCapability(NET_CAPABILITY_DUN)
+                .addCapability(NET_CAPABILITY_INTERNET);
+        nc2 = new NetworkCapabilities().addCapability(NET_CAPABILITY_INTERNET);
+        assertEquals("", nc1.describeImmutableDifferences(nc2));
+        assertEquals("", nc1.describeImmutableDifferences(nc1));
+
         // Immutable capability changing
         nc1 = new NetworkCapabilities()
                 .addCapability(NET_CAPABILITY_INTERNET)
diff --git a/tests/net/java/android/net/NetworkStatsHistoryTest.java b/tests/net/java/android/net/NetworkStatsHistoryTest.java
index e7b91b5..1c0c14e 100644
--- a/tests/net/java/android/net/NetworkStatsHistoryTest.java
+++ b/tests/net/java/android/net/NetworkStatsHistoryTest.java
@@ -485,6 +485,21 @@
         assertTrue(stats.intersects(Long.MIN_VALUE, TEST_START + 1));
     }
 
+    public void testSetValues() throws Exception {
+        stats = new NetworkStatsHistory(HOUR_IN_MILLIS);
+        stats.recordData(TEST_START, TEST_START + 1,
+                new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 2L));
+
+        assertEquals(1024L + 2048L, stats.getTotalBytes());
+
+        final NetworkStatsHistory.Entry entry = stats.getValues(0, null);
+        entry.rxBytes /= 2;
+        entry.txBytes *= 2;
+        stats.setValues(0, entry);
+
+        assertEquals(512L + 4096L, stats.getTotalBytes());
+    }
+
     private static void assertIndexBeforeAfter(
             NetworkStatsHistory stats, int before, int after, long time) {
         assertEquals("unexpected before", before, stats.getIndexBefore(time));
diff --git a/tests/net/java/android/net/ip/IpManagerTest.java b/tests/net/java/android/net/ip/IpManagerTest.java
index 025b017..541f91ad 100644
--- a/tests/net/java/android/net/ip/IpManagerTest.java
+++ b/tests/net/java/android/net/ip/IpManagerTest.java
@@ -16,11 +16,32 @@
 
 package android.net.ip;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.timeout;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.AlarmManager;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.res.Resources;
+import android.net.INetd;
+import android.net.IpPrefix;
+import android.net.LinkAddress;
+import android.net.LinkProperties;
+import android.net.RouteInfo;
+import android.net.ip.IpManager.Callback;
+import android.net.ip.IpManager.InitialConfiguration;
+import android.net.ip.IpManager.ProvisioningConfiguration;
 import android.os.INetworkManagementService;
 import android.provider.Settings;
 import android.support.test.filters.SmallTest;
@@ -29,13 +50,23 @@
 
 import com.android.internal.util.test.FakeSettingsProvider;
 import com.android.internal.R;
+import com.android.server.net.BaseNetworkObserver;
 
 import org.junit.Before;
-import org.junit.runner.RunWith;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.util.Arrays;
+import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
+
 /**
  * Tests for IpManager.
  */
@@ -44,14 +75,24 @@
 public class IpManagerTest {
     private static final int DEFAULT_AVOIDBADWIFI_CONFIG_VALUE = 1;
 
+    private static final String VALID = "VALID";
+    private static final String INVALID = "INVALID";
+
     @Mock private Context mContext;
     @Mock private INetworkManagementService mNMService;
+    @Mock private INetd mNetd;
     @Mock private Resources mResources;
+    @Mock private Callback mCb;
+    @Mock private AlarmManager mAlarm;
     private MockContentResolver mContentResolver;
 
-    @Before public void setUp() throws Exception {
+    BaseNetworkObserver mObserver;
+
+    @Before
+    public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
 
+        when(mContext.getSystemService(eq(Context.ALARM_SERVICE))).thenReturn(mAlarm);
         when(mContext.getResources()).thenReturn(mResources);
         when(mResources.getInteger(R.integer.config_networkAvoidBadWifi))
                 .thenReturn(DEFAULT_AVOIDBADWIFI_CONFIG_VALUE);
@@ -61,6 +102,18 @@
         when(mContext.getContentResolver()).thenReturn(mContentResolver);
     }
 
+    private IpManager makeIpManager(String ifname) throws Exception {
+        final IpManager ipm = new IpManager(mContext, ifname, mCb, mNMService, mNetd);
+        verify(mNMService, timeout(100).times(1)).disableIpv6(ifname);
+        verify(mNMService, timeout(100).times(1)).clearInterfaceAddresses(ifname);
+        ArgumentCaptor<BaseNetworkObserver> arg =
+                ArgumentCaptor.forClass(BaseNetworkObserver.class);
+        verify(mNMService, times(1)).registerObserver(arg.capture());
+        mObserver = arg.getValue();
+        reset(mNMService);
+        return ipm;
+    }
+
     @Test
     public void testNullCallbackDoesNotThrow() throws Exception {
         final IpManager ipm = new IpManager(mContext, "lo", null, mNMService);
@@ -68,7 +121,338 @@
 
     @Test
     public void testInvalidInterfaceDoesNotThrow() throws Exception {
-        final IpManager.Callback cb = new IpManager.Callback();
-        final IpManager ipm = new IpManager(mContext, "test_wlan0", cb, mNMService);
+        final IpManager ipm = new IpManager(mContext, "test_wlan0", mCb, mNMService);
+    }
+
+    @Test
+    public void testDefaultProvisioningConfiguration() throws Exception {
+        final String iface = "test_wlan0";
+        final IpManager ipm = makeIpManager(iface);
+
+        ProvisioningConfiguration config = new ProvisioningConfiguration.Builder()
+                .withoutIPv4()
+                // TODO: mock IpReachabilityMonitor's dependencies (NetworkInterface, PowerManager)
+                // and enable it in this test
+                .withoutIpReachabilityMonitor()
+                .build();
+
+        ipm.startProvisioning(config);
+        verify(mCb, times(1)).setNeighborDiscoveryOffload(true);
+        verify(mCb, timeout(100).times(1)).setFallbackMulticastFilter(false);
+        verify(mCb, never()).onProvisioningFailure(any());
+
+        ipm.stop();
+        verify(mNMService, timeout(100).times(1)).disableIpv6(iface);
+        verify(mNMService, timeout(100).times(1)).clearInterfaceAddresses(iface);
+    }
+
+    @Test
+    public void testProvisioningWithInitialConfiguration() throws Exception {
+        final String iface = "test_wlan0";
+        final IpManager ipm = makeIpManager(iface);
+
+        String[] addresses = {
+            "fe80::a4be:f92:e1f7:22d1/64",
+            "fe80::f04a:8f6:6a32:d756/64",
+            "fd2c:4e57:8e3c:0:548d:2db2:4fcf:ef75/64"
+        };
+        String[] prefixes = { "fe80::/64", "fd2c:4e57:8e3c::/64" };
+
+        ProvisioningConfiguration config = new ProvisioningConfiguration.Builder()
+                .withoutIPv4()
+                .withoutIpReachabilityMonitor()
+                .withInitialConfiguration(conf(links(addresses), prefixes(prefixes), ips()))
+                .build();
+
+        ipm.startProvisioning(config);
+        verify(mCb, times(1)).setNeighborDiscoveryOffload(true);
+        verify(mCb, timeout(100).times(1)).setFallbackMulticastFilter(false);
+        verify(mCb, never()).onProvisioningFailure(any());
+
+        for (String addr : addresses) {
+            String[] parts = addr.split("/");
+            verify(mNetd, timeout(100).times(1))
+                    .interfaceAddAddress(iface, parts[0], Integer.parseInt(parts[1]));
+        }
+
+        final int lastAddr = addresses.length - 1;
+
+        // Add N - 1 addresses
+        for (int i = 0; i < lastAddr; i++) {
+            mObserver.addressUpdated(iface, new LinkAddress(addresses[i]));
+            verify(mCb, timeout(100).times(1)).onLinkPropertiesChange(any());
+        }
+
+        // Add Nth address
+        mObserver.addressUpdated(iface, new LinkAddress(addresses[lastAddr]));
+        LinkProperties want = linkproperties(links(addresses), routes(prefixes));
+        want.setInterfaceName(iface);
+        verify(mCb, timeout(100).times(1)).onProvisioningSuccess(eq(want));
+
+        ipm.stop();
+        verify(mNMService, timeout(100).times(1)).disableIpv6(iface);
+        verify(mNMService, timeout(100).times(1)).clearInterfaceAddresses(iface);
+    }
+
+    @Test
+    public void testIsProvisioned() throws Exception {
+        InitialConfiguration empty = conf(links(), prefixes());
+        IsProvisionedTestCase[] testcases = {
+            // nothing
+            notProvisionedCase(links(), routes(), dns(), null),
+            notProvisionedCase(links(), routes(), dns(), empty),
+
+            // IPv4
+            provisionedCase(links("192.0.2.12/24"), routes(), dns(), empty),
+
+            // IPv6
+            notProvisionedCase(
+                    links("fe80::a4be:f92:e1f7:22d1/64", "fd2c:4e57:8e3c:0:548d:2db2:4fcf:ef75/64"),
+                    routes(), dns(), empty),
+            notProvisionedCase(
+                    links("fe80::a4be:f92:e1f7:22d1/64", "fd2c:4e57:8e3c:0:548d:2db2:4fcf:ef75/64"),
+                    routes("fe80::/64", "fd2c:4e57:8e3c::/64"), dns("fd00:1234:5678::1000"), empty),
+            provisionedCase(
+                    links("2001:db8:dead:beef:f00::a0/64", "fe80::1/64"),
+                    routes("::/0"),
+                    dns("2001:db8:dead:beef:f00::02"), empty),
+
+            // Initial configuration
+            provisionedCase(
+                    links("fe80::e1f7:22d1/64", "fd2c:4e57:8e3c:0:548d:2db2:4fcf:ef75/64"),
+                    routes("fe80::/64", "fd2c:4e57:8e3c::/64"),
+                    dns(),
+                    conf(links("fe80::e1f7:22d1/64", "fd2c:4e57:8e3c:0:548d:2db2:4fcf:ef75/64"),
+                        prefixes( "fe80::/64", "fd2c:4e57:8e3c::/64"), ips()))
+        };
+
+        for (IsProvisionedTestCase testcase : testcases) {
+            if (IpManager.isProvisioned(testcase.lp, testcase.config) != testcase.isProvisioned) {
+                fail(testcase.errorMessage());
+            }
+        }
+    }
+
+    static class IsProvisionedTestCase {
+        boolean isProvisioned;
+        LinkProperties lp;
+        InitialConfiguration config;
+
+        String errorMessage() {
+            return String.format("expected %s with config %s to be %s, but was %s",
+                     lp, config, provisioned(isProvisioned), provisioned(!isProvisioned));
+        }
+
+        static String provisioned(boolean isProvisioned) {
+            return isProvisioned ? "provisioned" : "not provisioned";
+        }
+    }
+
+    static IsProvisionedTestCase provisionedCase(Set<LinkAddress> lpAddrs, Set<RouteInfo> lpRoutes,
+            Set<InetAddress> lpDns, InitialConfiguration config) {
+        return provisioningTest(true, lpAddrs, lpRoutes, lpDns, config);
+    }
+
+    static IsProvisionedTestCase notProvisionedCase(Set<LinkAddress> lpAddrs,
+            Set<RouteInfo> lpRoutes, Set<InetAddress> lpDns, InitialConfiguration config) {
+        return provisioningTest(false, lpAddrs, lpRoutes, lpDns, config);
+    }
+
+    static IsProvisionedTestCase provisioningTest(boolean isProvisioned, Set<LinkAddress> lpAddrs,
+            Set<RouteInfo> lpRoutes, Set<InetAddress> lpDns, InitialConfiguration config) {
+        IsProvisionedTestCase testcase = new IsProvisionedTestCase();
+        testcase.isProvisioned = isProvisioned;
+        testcase.lp = new LinkProperties();
+        testcase.lp.setLinkAddresses(lpAddrs);
+        for (RouteInfo route : lpRoutes) {
+            testcase.lp.addRoute(route);
+        }
+        for (InetAddress dns : lpDns) {
+            testcase.lp.addDnsServer(dns);
+        }
+        testcase.config = config;
+        return testcase;
+    }
+
+    @Test
+    public void testInitialConfigurations() throws Exception {
+        InitialConfigurationTestCase[] testcases = {
+            validConf("valid IPv4 configuration",
+                    links("192.0.2.12/24"), prefixes("192.0.2.0/24"), dns("192.0.2.2")),
+            validConf("another valid IPv4 configuration",
+                    links("192.0.2.12/24"), prefixes("192.0.2.0/24"), dns()),
+            validConf("valid IPv6 configurations",
+                    links("2001:db8:dead:beef:f00::a0/64", "fe80::1/64"),
+                    prefixes("2001:db8:dead:beef::/64", "fe80::/64"),
+                    dns("2001:db8:dead:beef:f00::02")),
+            validConf("valid IPv6 configurations",
+                    links("fe80::1/64"), prefixes("fe80::/64"), dns()),
+            validConf("valid IPv6/v4 configuration",
+                    links("2001:db8:dead:beef:f00::a0/48", "192.0.2.12/24"),
+                    prefixes("2001:db8:dead:beef::/64", "192.0.2.0/24"),
+                    dns("192.0.2.2", "2001:db8:dead:beef:f00::02")),
+            validConf("valid IPv6 configuration without any GUA.",
+                    links("fd00:1234:5678::1/48"),
+                    prefixes("fd00:1234:5678::/48"),
+                    dns("fd00:1234:5678::1000")),
+
+            invalidConf("empty configuration", links(), prefixes(), dns()),
+            invalidConf("v4 addr and dns not in any prefix",
+                    links("192.0.2.12/24"), prefixes("198.51.100.0/24"), dns("192.0.2.2")),
+            invalidConf("v4 addr not in any prefix",
+                    links("198.51.2.12/24"), prefixes("198.51.100.0/24"), dns("192.0.2.2")),
+            invalidConf("v4 dns addr not in any prefix",
+                    links("192.0.2.12/24"), prefixes("192.0.2.0/24"), dns("198.51.100.2")),
+            invalidConf("v6 addr not in any prefix",
+                    links("2001:db8:dead:beef:f00::a0/64", "fe80::1/64"),
+                    prefixes("2001:db8:dead:beef::/64"),
+                    dns("2001:db8:dead:beef:f00::02")),
+            invalidConf("v6 dns addr not in any prefix",
+                    links("fe80::1/64"), prefixes("fe80::/64"), dns("2001:db8:dead:beef:f00::02")),
+            invalidConf("default ipv6 route and no GUA",
+                    links("fd01:1111:2222:3333::a0/128"), prefixes("::/0"), dns()),
+            invalidConf("invalid v6 prefix length",
+                    links("2001:db8:dead:beef:f00::a0/128"), prefixes("2001:db8:dead:beef::/32"),
+                    dns()),
+            invalidConf("another invalid v6 prefix length",
+                    links("2001:db8:dead:beef:f00::a0/128"), prefixes("2001:db8:dead:beef::/72"),
+                    dns())
+        };
+
+        for (InitialConfigurationTestCase testcase : testcases) {
+            if (testcase.config.isValid() != testcase.isValid) {
+                fail(testcase.errorMessage());
+            }
+        }
+    }
+
+    static class InitialConfigurationTestCase {
+        String descr;
+        boolean isValid;
+        InitialConfiguration config;
+        public String errorMessage() {
+            return String.format("%s: expected configuration %s to be %s, but was %s",
+                    descr, config, validString(isValid), validString(!isValid));
+        }
+        static String validString(boolean isValid) {
+            return isValid ? VALID : INVALID;
+        }
+    }
+
+    static InitialConfigurationTestCase validConf(String descr, Set<LinkAddress> links,
+            Set<IpPrefix> prefixes, Set<InetAddress> dns) {
+        return confTestCase(descr, true, conf(links, prefixes, dns));
+    }
+
+    static InitialConfigurationTestCase invalidConf(String descr, Set<LinkAddress> links,
+            Set<IpPrefix> prefixes, Set<InetAddress> dns) {
+        return confTestCase(descr, false, conf(links, prefixes, dns));
+    }
+
+    static InitialConfigurationTestCase confTestCase(
+            String descr, boolean isValid, InitialConfiguration config) {
+        InitialConfigurationTestCase testcase = new InitialConfigurationTestCase();
+        testcase.descr = descr;
+        testcase.isValid = isValid;
+        testcase.config = config;
+        return testcase;
+    }
+
+    static LinkProperties linkproperties(Set<LinkAddress> addresses, Set<RouteInfo> routes) {
+        LinkProperties lp = new LinkProperties();
+        lp.setLinkAddresses(addresses);
+        for (RouteInfo route : routes) {
+            lp.addRoute(route);
+        }
+        return lp;
+    }
+
+    static InitialConfiguration conf(Set<LinkAddress> links, Set<IpPrefix> prefixes) {
+        return conf(links, prefixes, new HashSet<>());
+    }
+
+    static InitialConfiguration conf(
+            Set<LinkAddress> links, Set<IpPrefix> prefixes, Set<InetAddress> dns) {
+        InitialConfiguration conf = new InitialConfiguration();
+        conf.ipAddresses.addAll(links);
+        conf.directlyConnectedRoutes.addAll(prefixes);
+        conf.dnsServers.addAll(dns);
+        return conf;
+    }
+
+    static Set<RouteInfo> routes(String... routes) {
+        return mapIntoSet(routes, (r) -> new RouteInfo(new IpPrefix(r)));
+    }
+
+    static Set<IpPrefix> prefixes(String... prefixes) {
+        return mapIntoSet(prefixes, IpPrefix::new);
+    }
+
+    static Set<LinkAddress> links(String... addresses) {
+        return mapIntoSet(addresses, LinkAddress::new);
+    }
+
+    static Set<InetAddress> ips(String... addresses) {
+        return mapIntoSet(addresses, InetAddress::getByName);
+    }
+
+    static Set<InetAddress> dns(String... addresses) {
+        return ips(addresses);
+    }
+
+    static <A, B> Set<B> mapIntoSet(A[] in, Fn<A, B> fn) {
+        Set<B> out = new HashSet<>(in.length);
+        for (A item : in) {
+            try {
+                out.add(fn.call(item));
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+        return out;
+    }
+
+    interface Fn<A,B> {
+        B call(A a) throws Exception;
+    }
+
+    @Test
+    public void testAll() {
+        List<String> list1 = Arrays.asList();
+        List<String> list2 = Arrays.asList("foo");
+        List<String> list3 = Arrays.asList("bar", "baz");
+        List<String> list4 = Arrays.asList("foo", "bar", "baz");
+
+        assertTrue(IpManager.all(list1, (x) -> false));
+        assertFalse(IpManager.all(list2, (x) -> false));
+        assertTrue(IpManager.all(list3, (x) -> true));
+        assertTrue(IpManager.all(list2, (x) -> x.charAt(0) == 'f'));
+        assertFalse(IpManager.all(list4, (x) -> x.charAt(0) == 'f'));
+    }
+
+    @Test
+    public void testAny() {
+        List<String> list1 = Arrays.asList();
+        List<String> list2 = Arrays.asList("foo");
+        List<String> list3 = Arrays.asList("bar", "baz");
+        List<String> list4 = Arrays.asList("foo", "bar", "baz");
+
+        assertFalse(IpManager.any(list1, (x) -> true));
+        assertTrue(IpManager.any(list2, (x) -> true));
+        assertTrue(IpManager.any(list2, (x) -> x.charAt(0) == 'f'));
+        assertFalse(IpManager.any(list3, (x) -> x.charAt(0) == 'f'));
+        assertTrue(IpManager.any(list4, (x) -> x.charAt(0) == 'f'));
+    }
+
+    @Test
+    public void testFindAll() {
+        List<String> list1 = Arrays.asList();
+        List<String> list2 = Arrays.asList("foo");
+        List<String> list3 = Arrays.asList("foo", "bar", "baz");
+
+        assertEquals(list1, IpManager.findAll(list1, (x) -> true));
+        assertEquals(list1, IpManager.findAll(list3, (x) -> false));
+        assertEquals(list3, IpManager.findAll(list3, (x) -> true));
+        assertEquals(list2, IpManager.findAll(list3, (x) -> x.charAt(0) == 'f'));
     }
 }
diff --git a/tests/net/java/android/net/netlink/ConntrackMessageTest.java b/tests/net/java/android/net/netlink/ConntrackMessageTest.java
new file mode 100644
index 0000000..3aab942
--- /dev/null
+++ b/tests/net/java/android/net/netlink/ConntrackMessageTest.java
@@ -0,0 +1,131 @@
+/*
+ * 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.netlink;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assume.assumeTrue;
+
+import android.system.OsConstants;
+import libcore.util.HexEncoding;
+
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import org.junit.runner.RunWith;
+import org.junit.Test;
+
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.Arrays;
+
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class ConntrackMessageTest {
+    private static final boolean USING_LE = (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN);
+
+    // Example 1: TCP (192.168.43.209, 44333) -> (23.211.13.26, 443)
+    public static final String CT_V4UPDATE_TCP_HEX =
+            // struct nlmsghdr
+            "50000000" +      // length = 80
+            "0001" +          // type = (1 << 8) | 0
+            "0501" +          // flags
+            "01000000" +      // seqno = 1
+            "00000000" +      // pid = 0
+            // struct nfgenmsg
+            "02" +            // nfgen_family  = AF_INET
+            "00" +            // version = NFNETLINK_V0
+            "0000" +          // res_id
+            // struct nlattr
+            "3400" +          // nla_len = 52
+            "0180" +          // nla_type = nested CTA_TUPLE_ORIG
+                // struct nlattr
+                "1400" +      // nla_len = 20
+                "0180" +      // nla_type = nested CTA_TUPLE_IP
+                    "0800 0100 C0A82BD1" +  // nla_type=CTA_IP_V4_SRC, ip=192.168.43.209
+                    "0800 0200 17D30D1A" +  // nla_type=CTA_IP_V4_DST, ip=23.211.13.26
+                // struct nlattr
+                "1C00" +      // nla_len = 28
+                "0280" +      // nla_type = nested CTA_TUPLE_PROTO
+                    "0500 0100 06 000000" +  // nla_type=CTA_PROTO_NUM, proto=6
+                    "0600 0200 AD2D 0000" +  // nla_type=CTA_PROTO_SRC_PORT, port=44333 (big endian)
+                    "0600 0300 01BB 0000" +  // nla_type=CTA_PROTO_DST_PORT, port=443 (big endian)
+            // struct nlattr
+            "0800" +          // nla_len = 8
+            "0700" +          // nla_type = CTA_TIMEOUT
+            "00069780";       // nla_value = 432000 (big endian)
+    public static final byte[] CT_V4UPDATE_TCP_BYTES =
+            HexEncoding.decode(CT_V4UPDATE_TCP_HEX.replaceAll(" ", "").toCharArray(), false);
+
+    // Example 2: UDP (100.96.167.146, 37069) -> (216.58.197.10, 443)
+    public static final String CT_V4UPDATE_UDP_HEX =
+            // struct nlmsghdr
+            "50000000" +      // length = 80
+            "0001" +          // type = (1 << 8) | 0
+            "0501" +          // flags
+            "01000000" +      // seqno = 1
+            "00000000" +      // pid = 0
+            // struct nfgenmsg
+            "02" +            // nfgen_family  = AF_INET
+            "00" +            // version = NFNETLINK_V0
+            "0000" +          // res_id
+            // struct nlattr
+            "3400" +          // nla_len = 52
+            "0180" +          // nla_type = nested CTA_TUPLE_ORIG
+                // struct nlattr
+                "1400" +      // nla_len = 20
+                "0180" +      // nla_type = nested CTA_TUPLE_IP
+                    "0800 0100 6460A792" +  // nla_type=CTA_IP_V4_SRC, ip=100.96.167.146
+                    "0800 0200 D83AC50A" +  // nla_type=CTA_IP_V4_DST, ip=216.58.197.10
+                // struct nlattr
+                "1C00" +      // nla_len = 28
+                "0280" +      // nla_type = nested CTA_TUPLE_PROTO
+                    "0500 0100 11 000000" +  // nla_type=CTA_PROTO_NUM, proto=17
+                    "0600 0200 90CD 0000" +  // nla_type=CTA_PROTO_SRC_PORT, port=37069 (big endian)
+                    "0600 0300 01BB 0000" +  // nla_type=CTA_PROTO_DST_PORT, port=443 (big endian)
+            // struct nlattr
+            "0800" +          // nla_len = 8
+            "0700" +          // nla_type = CTA_TIMEOUT
+            "000000B4";       // nla_value = 180 (big endian)
+    public static final byte[] CT_V4UPDATE_UDP_BYTES =
+            HexEncoding.decode(CT_V4UPDATE_UDP_HEX.replaceAll(" ", "").toCharArray(), false);
+
+    @Test
+    public void testConntrackIPv4TcpTimeoutUpdate() throws Exception {
+        assumeTrue(USING_LE);
+
+        final byte[] tcp = ConntrackMessage.newIPv4TimeoutUpdateRequest(
+                OsConstants.IPPROTO_TCP,
+                (Inet4Address) InetAddress.getByName("192.168.43.209"), 44333,
+                (Inet4Address) InetAddress.getByName("23.211.13.26"), 443,
+                432000);
+        assertArrayEquals(CT_V4UPDATE_TCP_BYTES, tcp);
+    }
+
+    @Test
+    public void testConntrackIPv4UdpTimeoutUpdate() throws Exception {
+        assumeTrue(USING_LE);
+
+        final byte[] udp = ConntrackMessage.newIPv4TimeoutUpdateRequest(
+                OsConstants.IPPROTO_UDP,
+                (Inet4Address) InetAddress.getByName("100.96.167.146"), 37069,
+                (Inet4Address) InetAddress.getByName("216.58.197.10"), 443,
+                180);
+        assertArrayEquals(CT_V4UPDATE_UDP_BYTES, udp);
+    }
+}
diff --git a/tests/net/java/android/net/nsd/NsdManagerTest.java b/tests/net/java/android/net/nsd/NsdManagerTest.java
index adf6998..f77608f 100644
--- a/tests/net/java/android/net/nsd/NsdManagerTest.java
+++ b/tests/net/java/android/net/nsd/NsdManagerTest.java
@@ -349,7 +349,6 @@
                 chan.connect(mContext, this, msg.replyTo);
                 chan.sendMessage(AsyncChannel.CMD_CHANNEL_FULLY_CONNECTED);
             }
-
         }
 
         public static MockServiceHandler create(Context context) {
diff --git a/tests/net/java/android/net/util/SharedLogTest.java b/tests/net/java/android/net/util/SharedLogTest.java
index 7fd7a63..d46facf 100644
--- a/tests/net/java/android/net/util/SharedLogTest.java
+++ b/tests/net/java/android/net/util/SharedLogTest.java
@@ -33,9 +33,8 @@
 @RunWith(AndroidJUnit4.class)
 @SmallTest
 public class SharedLogTest {
-    private static final String TIMESTAMP_PATTERN =
-            "^[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9]";
-    private static final String TIMESTAMP = "mm-dd HH:MM:SS.xxx";
+    private static final String TIMESTAMP_PATTERN = "\\d{2}:\\d{2}:\\d{2}";
+    private static final String TIMESTAMP = "HH:MM:SS";
 
     @Test
     public void testBasicOperation() {
@@ -53,12 +52,12 @@
         logLevel2a.mark("ok: last post");
 
         final String[] expected = {
-            TIMESTAMP + " - MARK first post!",
-            TIMESTAMP + " - [twoB] ERROR 2b or not 2b",
-            TIMESTAMP + " - [twoA] WARN second post?",
-            TIMESTAMP + " - still logging",
-            TIMESTAMP + " - [twoA.three] 3 >> 2",
-            TIMESTAMP + " - [twoA] MARK ok: last post",
+            " - MARK first post!",
+            " - [twoB] ERROR 2b or not 2b",
+            " - [twoA] WARN second post?",
+            " - still logging",
+            " - [twoA.three] 3 >> 2",
+            " - [twoA] MARK ok: last post",
         };
         // Verify the logs are all there and in the correct order.
         verifyLogLines(expected, logTop);
@@ -82,13 +81,12 @@
         final String[] lines = dumpOutput.split("\n");
         assertEquals(expected.length, lines.length);
 
-        for (int i = 0; i < lines.length; i++) {
-            // Fix up the timestamps.
-            lines[i] = lines[i].replaceAll(TIMESTAMP_PATTERN, TIMESTAMP);
-        }
-
         for (int i = 0; i < expected.length; i++) {
-            assertEquals(expected[i], lines[i]);
+            String got = lines[i];
+            String want = expected[i];
+            assertTrue(String.format("'%s' did not contain '%s'", got, want), got.endsWith(want));
+            assertTrue(String.format("'%s' did not contain a %s timestamp", got, TIMESTAMP),
+                    got.replaceFirst(TIMESTAMP_PATTERN, TIMESTAMP).contains(TIMESTAMP));
         }
     }
 }
diff --git a/tests/net/java/com/android/internal/util/TestUtils.java b/tests/net/java/com/android/internal/util/TestUtils.java
new file mode 100644
index 0000000..c9fa340
--- /dev/null
+++ b/tests/net/java/com/android/internal/util/TestUtils.java
@@ -0,0 +1,54 @@
+/*
+ * 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.internal.util;
+
+import static org.junit.Assert.fail;
+
+import android.os.ConditionVariable;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Looper;
+
+public final class TestUtils {
+    private TestUtils() { }
+
+    /**
+     * Block until the given Handler thread becomes idle, or until timeoutMs has passed.
+     */
+    public static void waitForIdleHandler(HandlerThread handlerThread, long timeoutMs) {
+        // TODO: convert to getThreadHandler once it is available on aosp
+        waitForIdleLooper(handlerThread.getLooper(), timeoutMs);
+    }
+
+    /**
+     * Block until the given Looper becomes idle, or until timeoutMs has passed.
+     */
+    public static void waitForIdleLooper(Looper looper, long timeoutMs) {
+        waitForIdleHandler(new Handler(looper), timeoutMs);
+    }
+
+    /**
+     * Block until the given Handler becomes idle, or until timeoutMs has passed.
+     */
+    public static void waitForIdleHandler(Handler handler, long timeoutMs) {
+        final ConditionVariable cv = new ConditionVariable();
+        handler.post(() -> cv.open());
+        if (!cv.block(timeoutMs)) {
+            fail(handler.toString() + " did not become idle after " + timeoutMs + " ms");
+        }
+    }
+}
diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java
index 198ddc6..504a2db 100644
--- a/tests/net/java/com/android/server/ConnectivityServiceTest.java
+++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java
@@ -19,10 +19,16 @@
 import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
 import static android.net.ConnectivityManager.TYPE_ETHERNET;
 import static android.net.ConnectivityManager.TYPE_MOBILE;
+import static android.net.ConnectivityManager.TYPE_MOBILE_FOTA;
+import static android.net.ConnectivityManager.TYPE_MOBILE_MMS;
+import static android.net.ConnectivityManager.TYPE_NONE;
+import static android.net.ConnectivityManager.TYPE_VPN;
 import static android.net.ConnectivityManager.TYPE_WIFI;
 import static android.net.ConnectivityManager.getNetworkTypeName;
 import static android.net.NetworkCapabilities.*;
 
+import static com.android.internal.util.TestUtils.waitForIdleHandler;
+
 import static org.mockito.Mockito.anyBoolean;
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.eq;
@@ -61,6 +67,7 @@
 import android.net.NetworkMisc;
 import android.net.NetworkRequest;
 import android.net.NetworkSpecifier;
+import android.net.NetworkUtils;
 import android.net.RouteInfo;
 import android.net.StringNetworkSpecifier;
 import android.net.metrics.IpConnectivityLog;
@@ -85,6 +92,7 @@
 import android.test.mock.MockContentResolver;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.text.TextUtils;
+import android.util.ArraySet;
 import android.util.Log;
 import android.util.LogPrinter;
 
@@ -95,6 +103,7 @@
 import com.android.server.connectivity.NetworkAgentInfo;
 import com.android.server.connectivity.NetworkMonitor;
 import com.android.server.connectivity.NetworkMonitor.CaptivePortalProbeResult;
+import com.android.server.connectivity.Vpn;
 import com.android.server.net.NetworkPinner;
 import com.android.server.net.NetworkPolicyManagerInternal;
 
@@ -106,12 +115,16 @@
 import java.net.InetAddress;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.BooleanSupplier;
+import java.util.function.Predicate;
 
 /**
  * Tests for {@link ConnectivityService}.
@@ -212,20 +225,8 @@
         }
     }
 
-    /**
-     * Block until the given handler becomes idle, or until timeoutMs has passed.
-     */
-    private static void waitForIdleHandler(HandlerThread handlerThread, int timeoutMs) {
-        final ConditionVariable cv = new ConditionVariable();
-        final Handler handler = new Handler(handlerThread.getLooper());
-        handler.post(() -> cv.open());
-        if (!cv.block(timeoutMs)) {
-            fail("HandlerThread " + handlerThread.getName() +
-                    " did not become idle after " + timeoutMs + " ms");
-        }
-    }
-
-    public void waitForIdle(int timeoutMs) {
+    public void waitForIdle(int timeoutMsAsInt) {
+        long timeoutMs = timeoutMsAsInt;
         waitForIdleHandler(mService.mHandlerThread, timeoutMs);
         waitForIdle(mCellNetworkAgent, timeoutMs);
         waitForIdle(mWiFiNetworkAgent, timeoutMs);
@@ -233,7 +234,7 @@
         waitForIdleHandler(mService.mHandlerThread, timeoutMs);
     }
 
-    public void waitForIdle(MockNetworkAgent agent, int timeoutMs) {
+    public void waitForIdle(MockNetworkAgent agent, long timeoutMs) {
         if (agent == null) {
             return;
         }
@@ -312,6 +313,10 @@
         private String mRedirectUrl;
 
         MockNetworkAgent(int transport) {
+            this(transport, new LinkProperties());
+        }
+
+        MockNetworkAgent(int transport, LinkProperties linkProperties) {
             final int type = transportToLegacyType(transport);
             final String typeName = ConnectivityManager.getNetworkTypeName(type);
             mNetworkInfo = new NetworkInfo(type, 0, typeName, "Mock");
@@ -327,6 +332,12 @@
                 case TRANSPORT_CELLULAR:
                     mScore = 50;
                     break;
+                case TRANSPORT_WIFI_AWARE:
+                    mScore = 20;
+                    break;
+                case TRANSPORT_VPN:
+                    mScore = 0;
+                    break;
                 default:
                     throw new UnsupportedOperationException("unimplemented network type");
             }
@@ -334,7 +345,7 @@
             mHandlerThread.start();
             mNetworkAgent = new NetworkAgent(mHandlerThread.getLooper(), mServiceContext,
                     "Mock-" + typeName, mNetworkInfo, mNetworkCapabilities,
-                    new LinkProperties(), mScore, new NetworkMisc()) {
+                    linkProperties, mScore, new NetworkMisc()) {
                 @Override
                 public void unwanted() { mDisconnected.open(); }
 
@@ -408,6 +419,15 @@
          * @param validated Indicate if network should pretend to be validated.
          */
         public void connect(boolean validated) {
+            connect(validated, true);
+        }
+
+        /**
+         * Transition this NetworkAgent to CONNECTED state.
+         * @param validated Indicate if network should pretend to be validated.
+         * @param hasInternet Indicate if network should pretend to have NET_CAPABILITY_INTERNET.
+         */
+        public void connect(boolean validated, boolean hasInternet) {
             assertEquals("MockNetworkAgents can only be connected once",
                     mNetworkInfo.getDetailedState(), DetailedState.IDLE);
             assertFalse(mNetworkCapabilities.hasCapability(NET_CAPABILITY_INTERNET));
@@ -430,7 +450,9 @@
                 };
                 mCm.registerNetworkCallback(request, callback);
             }
-            addCapability(NET_CAPABILITY_INTERNET);
+            if (hasInternet) {
+                addCapability(NET_CAPABILITY_INTERNET);
+            }
 
             connectWithoutInternet();
 
@@ -766,6 +788,13 @@
             return new FakeWakeupMessage(context, handler, cmdName, cmd, 0, 0, obj);
         }
 
+        @Override
+        public boolean hasService(String name) {
+            // Currenty, the only relevant service that ConnectivityService checks for is
+            // ETHERNET_SERVICE.
+            return Context.ETHERNET_SERVICE.equals(name);
+        }
+
         public WrappedNetworkMonitor getLastCreatedWrappedNetworkMonitor() {
             return mLastCreatedNetworkMonitor;
         }
@@ -784,7 +813,10 @@
      * Fails if TIMEOUT_MS goes by before {@code conditionVariable} opens.
      */
     static private void waitFor(ConditionVariable conditionVariable) {
-        assertTrue(conditionVariable.block(TIMEOUT_MS));
+        if (conditionVariable.block(TIMEOUT_MS)) {
+            return;
+        }
+        fail("ConditionVariable was blocked for more than " + TIMEOUT_MS + "ms");
     }
 
     @Override
@@ -841,8 +873,10 @@
                 return TYPE_WIFI;
             case TRANSPORT_CELLULAR:
                 return TYPE_MOBILE;
+            case TRANSPORT_VPN:
+                return TYPE_VPN;
             default:
-                throw new IllegalStateException("Unknown transport " + transport);
+                return TYPE_NONE;
         }
     }
 
@@ -853,6 +887,9 @@
         // Test getActiveNetwork()
         assertNotNull(mCm.getActiveNetwork());
         assertEquals(mCm.getActiveNetwork(), mCm.getActiveNetworkForUid(Process.myUid()));
+        if (!NetworkCapabilities.isValidTransport(transport)) {
+            throw new IllegalStateException("Unknown transport " + transport);
+        }
         switch (transport) {
             case TRANSPORT_WIFI:
                 assertEquals(mCm.getActiveNetwork(), mWiFiNetworkAgent.getNetwork());
@@ -861,7 +898,7 @@
                 assertEquals(mCm.getActiveNetwork(), mCellNetworkAgent.getNetwork());
                 break;
             default:
-                throw new IllegalStateException("Unknown transport" + transport);
+                break;
         }
         // Test getNetworkInfo(Network)
         assertNotNull(mCm.getNetworkInfo(mCm.getActiveNetwork()));
@@ -873,13 +910,14 @@
     }
 
     private void verifyNoNetwork() {
+        waitForIdle();
         // Test getActiveNetworkInfo()
         assertNull(mCm.getActiveNetworkInfo());
         // Test getActiveNetwork()
         assertNull(mCm.getActiveNetwork());
         assertNull(mCm.getActiveNetworkForUid(Process.myUid()));
         // Test getAllNetworks()
-        assertEquals(0, mCm.getAllNetworks().length);
+        assertEmpty(mCm.getAllNetworks());
     }
 
     /**
@@ -906,6 +944,13 @@
         // will fail. Failing here is much easier to debug.
         assertTrue(mCm.isNetworkSupported(TYPE_WIFI));
         assertTrue(mCm.isNetworkSupported(TYPE_MOBILE));
+        assertTrue(mCm.isNetworkSupported(TYPE_MOBILE_MMS));
+        assertFalse(mCm.isNetworkSupported(TYPE_MOBILE_FOTA));
+
+        // Check that TYPE_ETHERNET is supported. Unlike the asserts above, which only validate our
+        // mocks, this assert exercises the ConnectivityService code path that ensures that
+        // TYPE_ETHERNET is supported if the ethernet service is running.
+        assertTrue(mCm.isNetworkSupported(TYPE_ETHERNET));
     }
 
     @SmallTest
@@ -920,7 +965,7 @@
         mCellNetworkAgent.connect(true);
         waitFor(cv);
         verifyActiveNetwork(TRANSPORT_CELLULAR);
-        assertEquals(2, mCm.getAllNetworks().length);
+        assertLength(2, mCm.getAllNetworks());
         assertTrue(mCm.getAllNetworks()[0].equals(mCm.getActiveNetwork()) ||
                 mCm.getAllNetworks()[1].equals(mCm.getActiveNetwork()));
         assertTrue(mCm.getAllNetworks()[0].equals(mWiFiNetworkAgent.getNetwork()) ||
@@ -930,7 +975,7 @@
         mWiFiNetworkAgent.connect(true);
         waitFor(cv);
         verifyActiveNetwork(TRANSPORT_WIFI);
-        assertEquals(2, mCm.getAllNetworks().length);
+        assertLength(2, mCm.getAllNetworks());
         assertTrue(mCm.getAllNetworks()[0].equals(mCm.getActiveNetwork()) ||
                 mCm.getAllNetworks()[1].equals(mCm.getActiveNetwork()));
         assertTrue(mCm.getAllNetworks()[0].equals(mCellNetworkAgent.getNetwork()) ||
@@ -938,9 +983,9 @@
         // Test cellular linger timeout.
         waitFor(mCellNetworkAgent.getDisconnectedCV());
         waitForIdle();
-        assertEquals(1, mCm.getAllNetworks().length);
+        assertLength(1, mCm.getAllNetworks());
         verifyActiveNetwork(TRANSPORT_WIFI);
-        assertEquals(1, mCm.getAllNetworks().length);
+        assertLength(1, mCm.getAllNetworks());
         assertEquals(mCm.getAllNetworks()[0], mCm.getActiveNetwork());
         // Test WiFi disconnect.
         cv = waitForConnectivityBroadcasts(1);
@@ -1281,7 +1326,26 @@
             return expectCallback(state, agent, TIMEOUT_MS);
         }
 
-        void expectAvailableCallbacks(MockNetworkAgent agent, boolean expectSuspended, int timeoutMs) {
+        CallbackInfo expectCallbackLike(Predicate<CallbackInfo> fn) {
+            return expectCallbackLike(fn, TIMEOUT_MS);
+        }
+
+        CallbackInfo expectCallbackLike(Predicate<CallbackInfo> fn, int timeoutMs) {
+            int timeLeft = timeoutMs;
+            while (timeLeft > 0) {
+                long start = SystemClock.elapsedRealtime();
+                CallbackInfo info = nextCallback(timeLeft);
+                if (fn.test(info)) {
+                    return info;
+                }
+                timeLeft -= (SystemClock.elapsedRealtime() - start);
+            }
+            fail("Did not receive expected callback after " + timeoutMs + "ms");
+            return null;
+        }
+
+        void expectAvailableCallbacks(
+                MockNetworkAgent agent, boolean expectSuspended, int timeoutMs) {
             expectCallback(CallbackState.AVAILABLE, agent, timeoutMs);
             if (expectSuspended) {
                 expectCallback(CallbackState.SUSPENDED, agent, timeoutMs);
@@ -1838,26 +1902,18 @@
     @SmallTest
     public void testNoMutableNetworkRequests() throws Exception {
         PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, new Intent("a"), 0);
-        NetworkRequest.Builder builder = new NetworkRequest.Builder();
-        builder.addCapability(NET_CAPABILITY_VALIDATED);
-        try {
-            mCm.requestNetwork(builder.build(), new NetworkCallback());
-            fail();
-        } catch (IllegalArgumentException expected) {}
-        try {
-            mCm.requestNetwork(builder.build(), pendingIntent);
-            fail();
-        } catch (IllegalArgumentException expected) {}
-        builder = new NetworkRequest.Builder();
-        builder.addCapability(NET_CAPABILITY_CAPTIVE_PORTAL);
-        try {
-            mCm.requestNetwork(builder.build(), new NetworkCallback());
-            fail();
-        } catch (IllegalArgumentException expected) {}
-        try {
-            mCm.requestNetwork(builder.build(), pendingIntent);
-            fail();
-        } catch (IllegalArgumentException expected) {}
+        NetworkRequest request1 = new NetworkRequest.Builder()
+                .addCapability(NET_CAPABILITY_VALIDATED)
+                .build();
+        NetworkRequest request2 = new NetworkRequest.Builder()
+                .addCapability(NET_CAPABILITY_CAPTIVE_PORTAL)
+                .build();
+
+        Class<IllegalArgumentException> expected = IllegalArgumentException.class;
+        assertException(() -> { mCm.requestNetwork(request1, new NetworkCallback()); }, expected);
+        assertException(() -> { mCm.requestNetwork(request1, pendingIntent); }, expected);
+        assertException(() -> { mCm.requestNetwork(request2, new NetworkCallback()); }, expected);
+        assertException(() -> { mCm.requestNetwork(request2, pendingIntent); }, expected);
     }
 
     @SmallTest
@@ -1869,7 +1925,7 @@
         mCellNetworkAgent.connectWithoutInternet();
         waitFor(cv);
         waitForIdle();
-        assertEquals(0, mCm.getAllNetworks().length);
+        assertEmpty(mCm.getAllNetworks());
         verifyNoNetwork();
 
         // Test bringing up validated WiFi.
@@ -2543,7 +2599,7 @@
         assertTrue(testFactory.getMyStartRequested());
 
         // Bring up cell data and check that the factory stops looking.
-        assertEquals(1, mCm.getAllNetworks().length);
+        assertLength(1, mCm.getAllNetworks());
         mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
         testFactory.expectAddRequests(2);  // Because the cell request changes score twice.
         mCellNetworkAgent.connect(true);
@@ -2554,7 +2610,7 @@
         // Check that cell data stays up.
         waitForIdle();
         verifyActiveNetwork(TRANSPORT_WIFI);
-        assertEquals(2, mCm.getAllNetworks().length);
+        assertLength(2, mCm.getAllNetworks());
 
         // Turn off mobile data always on and expect the request to disappear...
         testFactory.expectRemoveRequests(1);
@@ -2563,7 +2619,7 @@
 
         // ...  and cell data to be torn down.
         cellNetworkCallback.expectCallback(CallbackState.LOST, mCellNetworkAgent);
-        assertEquals(1, mCm.getAllNetworks().length);
+        assertLength(1, mCm.getAllNetworks());
 
         testFactory.unregister();
         mCm.unregisterNetworkCallback(cellNetworkCallback);
@@ -2784,19 +2840,17 @@
         NetworkRequest nr = new NetworkRequest.Builder().addTransportType(
                 NetworkCapabilities.TRANSPORT_WIFI).build();
         final TestNetworkCallback networkCallback = new TestNetworkCallback();
-        final int requestTimeoutMs = 100;
+        final int requestTimeoutMs = 50;
         mCm.requestNetwork(nr, networkCallback, requestTimeoutMs);
 
         mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
         mWiFiNetworkAgent.connect(false);
-        final int assertTimeoutMs = 150;
+        final int assertTimeoutMs = 100;
         networkCallback.expectAvailableCallbacks(mWiFiNetworkAgent, false, assertTimeoutMs);
-        sleepFor(20);
         mWiFiNetworkAgent.disconnect();
         networkCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent);
 
-        // pass timeout and validate that UNAVAILABLE is not called
-        sleepFor(100);
+        // Validate that UNAVAILABLE is not called
         networkCallback.assertNoCallback();
     }
 
@@ -2823,24 +2877,20 @@
     }
 
     /**
-     * Validate that when a network request is unregistered (cancelled) the time-out for that
-     * request doesn't trigger the onUnavailable() callback.
+     * Validate that when a network request is unregistered (cancelled), no posterior event can
+     * trigger the callback.
      */
     @SmallTest
-    public void testTimedoutAfterUnregisteredNetworkRequest() {
+    public void testNoCallbackAfterUnregisteredNetworkRequest() {
         NetworkRequest nr = new NetworkRequest.Builder().addTransportType(
                 NetworkCapabilities.TRANSPORT_WIFI).build();
         final TestNetworkCallback networkCallback = new TestNetworkCallback();
         final int timeoutMs = 10;
+
         mCm.requestNetwork(nr, networkCallback, timeoutMs);
-
-        // remove request
         mCm.unregisterNetworkCallback(networkCallback);
-
-        // pass timeout and validate that no callbacks
-        // Note: doesn't validate that nothing called from CS since even if called the CM already
-        // unregisters the callback and won't pass it through!
-        sleepFor(15);
+        // Regardless of the timeout, unregistering the callback in ConnectivityManager ensures
+        // that this callback will not be called.
         networkCallback.assertNoCallback();
 
         // create a network satisfying request - validate that request not triggered
@@ -3259,12 +3309,229 @@
         }
     }
 
-    /* test utilities */
-    // TODO: eliminate all usages of sleepFor and replace by proper timeouts/waitForIdle.
-    static private void sleepFor(int ms) {
-        try {
-            Thread.sleep(ms);
-        } catch (InterruptedException e) {
+    @SmallTest
+    public void testNetworkInfoOfTypeNone() {
+        ConditionVariable broadcastCV = waitForConnectivityBroadcasts(1);
+
+        verifyNoNetwork();
+        MockNetworkAgent wifiAware = new MockNetworkAgent(TRANSPORT_WIFI_AWARE);
+        assertNull(mCm.getActiveNetworkInfo());
+
+        Network[] allNetworks = mCm.getAllNetworks();
+        assertLength(1, allNetworks);
+        Network network = allNetworks[0];
+        NetworkCapabilities capabilities = mCm.getNetworkCapabilities(network);
+        assertTrue(capabilities.hasTransport(TRANSPORT_WIFI_AWARE));
+
+        final NetworkRequest request =
+                new NetworkRequest.Builder().addTransportType(TRANSPORT_WIFI_AWARE).build();
+        final TestNetworkCallback callback = new TestNetworkCallback();
+        mCm.registerNetworkCallback(request, callback);
+
+        // Bring up wifi aware network.
+        wifiAware.connect(false, false);
+        callback.expectAvailableCallbacks(wifiAware);
+
+        assertNull(mCm.getActiveNetworkInfo());
+        assertNull(mCm.getActiveNetwork());
+        // TODO: getAllNetworkInfo is dirty and returns a non-empty array right from the start
+        // of this test. Fix it and uncomment the assert below.
+        //assertEmpty(mCm.getAllNetworkInfo());
+
+        // Disconnect wifi aware network.
+        wifiAware.disconnect();
+        callback.expectCallbackLike((info) -> info.state == CallbackState.LOST, TIMEOUT_MS);
+        mCm.unregisterNetworkCallback(callback);
+
+        verifyNoNetwork();
+        if (broadcastCV.block(10)) {
+            fail("expected no broadcast, but got CONNECTIVITY_ACTION broadcast");
         }
     }
+
+    @SmallTest
+    public void testDeprecatedAndUnsupportedOperations() throws Exception {
+        final int TYPE_NONE = ConnectivityManager.TYPE_NONE;
+        assertNull(mCm.getNetworkInfo(TYPE_NONE));
+        assertNull(mCm.getNetworkForType(TYPE_NONE));
+        assertNull(mCm.getLinkProperties(TYPE_NONE));
+        assertFalse(mCm.isNetworkSupported(TYPE_NONE));
+
+        assertException(() -> { mCm.networkCapabilitiesForType(TYPE_NONE); },
+                IllegalArgumentException.class);
+
+        Class<UnsupportedOperationException> unsupported = UnsupportedOperationException.class;
+        assertException(() -> { mCm.startUsingNetworkFeature(TYPE_WIFI, ""); }, unsupported);
+        assertException(() -> { mCm.stopUsingNetworkFeature(TYPE_WIFI, ""); }, unsupported);
+        // TODO: let test context have configuration application target sdk version
+        // and test that pre-M requesting for TYPE_NONE sends back APN_REQUEST_FAILED
+        assertException(() -> { mCm.startUsingNetworkFeature(TYPE_NONE, ""); }, unsupported);
+        assertException(() -> { mCm.stopUsingNetworkFeature(TYPE_NONE, ""); }, unsupported);
+        assertException(() -> { mCm.requestRouteToHostAddress(TYPE_NONE, null); }, unsupported);
+    }
+
+    @SmallTest
+    public void testLinkPropertiesEnsuresDirectlyConnectedRoutes() {
+        final NetworkRequest networkRequest = new NetworkRequest.Builder()
+                .addTransportType(TRANSPORT_WIFI).build();
+        final TestNetworkCallback networkCallback = new TestNetworkCallback();
+        mCm.registerNetworkCallback(networkRequest, networkCallback);
+
+        LinkProperties lp = new LinkProperties();
+        lp.setInterfaceName("wlan0");
+        LinkAddress myIpv4Address = new LinkAddress("192.168.12.3/24");
+        RouteInfo myIpv4DefaultRoute = new RouteInfo((IpPrefix) null,
+                NetworkUtils.numericToInetAddress("192.168.12.1"), lp.getInterfaceName());
+        lp.addLinkAddress(myIpv4Address);
+        lp.addRoute(myIpv4DefaultRoute);
+
+        // Verify direct routes are added when network agent is first registered in
+        // ConnectivityService.
+        MockNetworkAgent networkAgent = new MockNetworkAgent(TRANSPORT_WIFI, lp);
+        networkAgent.connect(true);
+        networkCallback.expectCallback(CallbackState.AVAILABLE, networkAgent);
+        networkCallback.expectCallback(CallbackState.NETWORK_CAPABILITIES, networkAgent);
+        CallbackInfo cbi = networkCallback.expectCallback(CallbackState.LINK_PROPERTIES,
+                networkAgent);
+        networkCallback.expectCapabilitiesWith(NET_CAPABILITY_VALIDATED, networkAgent);
+        networkCallback.assertNoCallback();
+        checkDirectlyConnectedRoutes(cbi.arg, Arrays.asList(myIpv4Address),
+                Arrays.asList(myIpv4DefaultRoute));
+        checkDirectlyConnectedRoutes(mCm.getLinkProperties(networkAgent.getNetwork()),
+                Arrays.asList(myIpv4Address), Arrays.asList(myIpv4DefaultRoute));
+
+        // Verify direct routes are added during subsequent link properties updates.
+        LinkProperties newLp = new LinkProperties(lp);
+        LinkAddress myIpv6Address1 = new LinkAddress("fe80::cafe/64");
+        LinkAddress myIpv6Address2 = new LinkAddress("2001:db8::2/64");
+        newLp.addLinkAddress(myIpv6Address1);
+        newLp.addLinkAddress(myIpv6Address2);
+        networkAgent.sendLinkProperties(newLp);
+        cbi = networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, networkAgent);
+        networkCallback.assertNoCallback();
+        checkDirectlyConnectedRoutes(cbi.arg,
+                Arrays.asList(myIpv4Address, myIpv6Address1, myIpv6Address2),
+                Arrays.asList(myIpv4DefaultRoute));
+        mCm.unregisterNetworkCallback(networkCallback);
+    }
+
+    private void checkDirectlyConnectedRoutes(Object callbackObj,
+            Collection<LinkAddress> linkAddresses, Collection<RouteInfo> otherRoutes) {
+        assertTrue(callbackObj instanceof LinkProperties);
+        LinkProperties lp = (LinkProperties) callbackObj;
+
+        Set<RouteInfo> expectedRoutes = new ArraySet<>();
+        expectedRoutes.addAll(otherRoutes);
+        for (LinkAddress address : linkAddresses) {
+            RouteInfo localRoute = new RouteInfo(address, null, lp.getInterfaceName());
+            // Duplicates in linkAddresses are considered failures
+            assertTrue(expectedRoutes.add(localRoute));
+        }
+        List<RouteInfo> observedRoutes = lp.getRoutes();
+        assertEquals(expectedRoutes.size(), observedRoutes.size());
+        assertTrue(observedRoutes.containsAll(expectedRoutes));
+    }
+
+    private static <T> void assertEmpty(T[] ts) {
+        int length = ts.length;
+        assertEquals("expected empty array, but length was " + length, 0, length);
+    }
+
+    private static <T> void assertLength(int expected, T[] got) {
+        int length = got.length;
+        assertEquals(String.format("expected array of length %s, but length was %s for %s",
+                expected, length, Arrays.toString(got)), expected, length);
+    }
+
+    private static <T> void assertException(Runnable block, Class<T> expected) {
+        try {
+            block.run();
+            fail("Expected exception of type " + expected);
+        } catch (Exception got) {
+            if (!got.getClass().equals(expected)) {
+                fail("Expected exception of type " + expected + " but got " + got);
+            }
+            return;
+        }
+    }
+
+    @SmallTest
+    public void testVpnNetworkMetered() {
+        final TestNetworkCallback callback = new TestNetworkCallback();
+        mCm.registerDefaultNetworkCallback(callback);
+
+        final NetworkRequest cellRequest = new NetworkRequest.Builder()
+                .addTransportType(TRANSPORT_CELLULAR).build();
+        final TestNetworkCallback cellCallback = new TestNetworkCallback();
+        mCm.registerNetworkCallback(cellRequest, cellCallback);
+
+        // Setup cellular
+        mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
+        mCellNetworkAgent.connect(true);
+        callback.expectAvailableAndValidatedCallbacks(mCellNetworkAgent);
+        cellCallback.expectAvailableAndValidatedCallbacks(mCellNetworkAgent);
+        verifyActiveNetwork(TRANSPORT_CELLULAR);
+
+        // Verify meteredness of cellular
+        assertTrue(mCm.isActiveNetworkMetered());
+
+        // Setup Wifi
+        mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
+        mWiFiNetworkAgent.connect(true);
+        callback.expectAvailableAndValidatedCallbacks(mWiFiNetworkAgent);
+        cellCallback.expectCallback(CallbackState.LOSING, mCellNetworkAgent);
+        verifyActiveNetwork(TRANSPORT_WIFI);
+
+        // Verify meteredness of WiFi
+        assertTrue(mCm.isActiveNetworkMetered());
+
+        // Verify that setting unmetered on Wifi changes ActiveNetworkMetered
+        mWiFiNetworkAgent.addCapability(NET_CAPABILITY_NOT_METERED);
+        callback.expectCapabilitiesWith(NET_CAPABILITY_NOT_METERED, mWiFiNetworkAgent);
+        assertFalse(mCm.isActiveNetworkMetered());
+
+        // Setup VPN
+        final MockNetworkAgent vpnNetworkAgent = new MockNetworkAgent(TRANSPORT_VPN);
+        vpnNetworkAgent.connect(true);
+
+        Vpn mockVpn = mock(Vpn.class);
+        when(mockVpn.appliesToUid(anyInt())).thenReturn(true);
+        when(mockVpn.getNetId()).thenReturn(vpnNetworkAgent.getNetwork().netId);
+
+        Vpn oldVpn = mService.getVpn(UserHandle.myUserId());
+        mService.setVpn(UserHandle.myUserId(), mockVpn);
+        assertEquals(vpnNetworkAgent.getNetwork(), mCm.getActiveNetwork());
+
+        // Verify meteredness of VPN on default network
+        when(mockVpn.getUnderlyingNetworks()).thenReturn(null);
+        assertFalse(mCm.isActiveNetworkMetered());
+        assertFalse(mCm.isActiveNetworkMeteredForUid(Process.myUid()));
+
+        // Verify meteredness of VPN on unmetered wifi
+        when(mockVpn.getUnderlyingNetworks())
+                .thenReturn(new Network[] {mWiFiNetworkAgent.getNetwork()});
+        assertFalse(mCm.isActiveNetworkMetered());
+        assertFalse(mCm.isActiveNetworkMeteredForUid(Process.myUid()));
+
+        // Set WiFi as metered, then check to see that it has been updated on the VPN
+        mWiFiNetworkAgent.removeCapability(NET_CAPABILITY_NOT_METERED);
+        callback.expectCapabilitiesWithout(NET_CAPABILITY_NOT_METERED, mWiFiNetworkAgent);
+        assertTrue(mCm.isActiveNetworkMetered());
+        assertTrue(mCm.isActiveNetworkMeteredForUid(Process.myUid()));
+
+        // Switch to cellular
+        when(mockVpn.getUnderlyingNetworks())
+                .thenReturn(new Network[] {mCellNetworkAgent.getNetwork()});
+        assertTrue(mCm.isActiveNetworkMetered());
+        assertTrue(mCm.isActiveNetworkMeteredForUid(Process.myUid()));
+
+        // Test unmetered cellular
+        mCellNetworkAgent.addCapability(NET_CAPABILITY_NOT_METERED);
+        cellCallback.expectCapabilitiesWith(NET_CAPABILITY_NOT_METERED, mCellNetworkAgent);
+        assertFalse(mCm.isActiveNetworkMetered());
+        assertFalse(mCm.isActiveNetworkMeteredForUid(Process.myUid()));
+
+        mService.setVpn(UserHandle.myUserId(), oldVpn);
+        mCm.unregisterNetworkCallback(callback);
+    }
 }
diff --git a/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java b/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java
index d11565a..2624176 100644
--- a/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java
+++ b/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java
@@ -16,6 +16,8 @@
 
 package com.android.server.connectivity;
 
+import static android.net.metrics.INetdEventListener.EVENT_GETADDRINFO;
+import static android.net.metrics.INetdEventListener.EVENT_GETHOSTBYNAME;
 import static com.android.server.connectivity.MetricsTestUtil.aBool;
 import static com.android.server.connectivity.MetricsTestUtil.aByteArray;
 import static com.android.server.connectivity.MetricsTestUtil.aLong;
@@ -31,29 +33,41 @@
 import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.ETHERNET;
 import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.MULTIPLE;
 import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.WIFI;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
 
 import android.net.ConnectivityMetricsEvent;
 import android.net.metrics.ApfProgramEvent;
 import android.net.metrics.ApfStats;
+import android.net.metrics.ConnectStats;
 import android.net.metrics.DefaultNetworkEvent;
 import android.net.metrics.DhcpClientEvent;
 import android.net.metrics.DhcpErrorEvent;
 import android.net.metrics.DnsEvent;
+import android.net.metrics.DnsEvent;
 import android.net.metrics.IpManagerEvent;
 import android.net.metrics.IpReachabilityEvent;
 import android.net.metrics.NetworkEvent;
 import android.net.metrics.RaEvent;
 import android.net.metrics.ValidationProbeEvent;
+import android.net.metrics.WakeupStats;
+import android.support.test.runner.AndroidJUnit4;
 import android.test.suitebuilder.annotation.SmallTest;
+
 import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityEvent;
+
 import java.util.Arrays;
 import java.util.List;
-import junit.framework.TestCase;
+
+import org.junit.runner.RunWith;
+import org.junit.Test;
 
 // TODO: instead of comparing textpb to textpb, parse textpb and compare proto to proto.
-public class IpConnectivityEventBuilderTest extends TestCase {
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class IpConnectivityEventBuilderTest {
 
-    @SmallTest
+    @Test
     public void testLinkLayerInferrence() {
         ConnectivityMetricsEvent ev = describeIpEvent(
                 aType(IpReachabilityEvent.class),
@@ -182,7 +196,7 @@
         verifySerialization(want, ev);
     }
 
-    @SmallTest
+    @Test
     public void testDefaultNetworkEventSerialization() {
         ConnectivityMetricsEvent ev = describeIpEvent(
                 aType(DefaultNetworkEvent.class),
@@ -201,9 +215,14 @@
                 "  time_ms: 1",
                 "  transports: 0",
                 "  default_network_event <",
+                "    default_network_duration_ms: 0",
+                "    final_score: 0",
+                "    initial_score: 0",
+                "    ip_support: 0",
                 "    network_id <",
                 "      network_id: 102",
                 "    >",
+                "    no_default_network_duration_ms: 0",
                 "    previous_network_id <",
                 "      network_id: 101",
                 "    >",
@@ -218,7 +237,7 @@
         verifySerialization(want, ev);
     }
 
-    @SmallTest
+    @Test
     public void testDhcpClientEventSerialization() {
         ConnectivityMetricsEvent ev = describeIpEvent(
                 aType(DhcpClientEvent.class),
@@ -244,7 +263,7 @@
         verifySerialization(want, ev);
     }
 
-    @SmallTest
+    @Test
     public void testDhcpErrorEventSerialization() {
         ConnectivityMetricsEvent ev = describeIpEvent(
                 aType(DhcpErrorEvent.class),
@@ -269,7 +288,7 @@
         verifySerialization(want, ev);
     }
 
-    @SmallTest
+    @Test
     public void testIpManagerEventSerialization() {
         ConnectivityMetricsEvent ev = describeIpEvent(
                 aType(IpManagerEvent.class),
@@ -295,7 +314,7 @@
         verifySerialization(want, ev);
     }
 
-    @SmallTest
+    @Test
     public void testIpReachabilityEventSerialization() {
         ConnectivityMetricsEvent ev = describeIpEvent(
                 aType(IpReachabilityEvent.class),
@@ -319,7 +338,7 @@
         verifySerialization(want, ev);
     }
 
-    @SmallTest
+    @Test
     public void testNetworkEventSerialization() {
         ConnectivityMetricsEvent ev = describeIpEvent(
                 aType(NetworkEvent.class),
@@ -348,7 +367,7 @@
         verifySerialization(want, ev);
     }
 
-    @SmallTest
+    @Test
     public void testValidationProbeEventSerialization() {
         ConnectivityMetricsEvent ev = describeIpEvent(
                 aType(ValidationProbeEvent.class),
@@ -375,7 +394,7 @@
         verifySerialization(want, ev);
     }
 
-    @SmallTest
+    @Test
     public void testApfProgramEventSerialization() {
         ConnectivityMetricsEvent ev = describeIpEvent(
                 aType(ApfProgramEvent.class),
@@ -409,7 +428,7 @@
         verifySerialization(want, ev);
     }
 
-    @SmallTest
+    @Test
     public void testApfStatsSerialization() {
         ConnectivityMetricsEvent ev = describeIpEvent(
                 aType(ApfStats.class),
@@ -442,6 +461,8 @@
                 "    program_updates_all: 7",
                 "    program_updates_allowing_multicast: 3",
                 "    received_ras: 10",
+                "    total_packet_dropped: 0",
+                "    total_packet_processed: 0",
                 "    zero_lifetime_ras: 1",
                 "  >",
                 ">",
@@ -450,7 +471,7 @@
         verifySerialization(want, ev);
     }
 
-    @SmallTest
+    @Test
     public void testRaEventSerialization() {
         ConnectivityMetricsEvent ev = describeIpEvent(
                 aType(RaEvent.class),
@@ -483,11 +504,49 @@
         verifySerialization(want, ev);
     }
 
+    @Test
+    public void testWakeupStatsSerialization() {
+        WakeupStats stats = new WakeupStats("wlan0");
+        stats.totalWakeups = 14;
+        stats.applicationWakeups = 5;
+        stats.nonApplicationWakeups = 1;
+        stats.rootWakeups = 2;
+        stats.systemWakeups = 3;
+        stats.noUidWakeups = 3;
+
+        IpConnectivityEvent got = IpConnectivityEventBuilder.toProto(stats);
+        String want = String.join("\n",
+                "dropped_events: 0",
+                "events <",
+                "  if_name: \"\"",
+                "  link_layer: 4",
+                "  network_id: 0",
+                "  time_ms: 0",
+                "  transports: 0",
+                "  wakeup_stats <",
+                "    application_wakeups: 5",
+                "    duration_sec: 0",
+                "    no_uid_wakeups: 3",
+                "    non_application_wakeups: 1",
+                "    root_wakeups: 2",
+                "    system_wakeups: 3",
+                "    total_wakeups: 14",
+                "  >",
+                ">",
+                "version: 2\n");
+
+        verifySerialization(want, got);
+    }
+
     static void verifySerialization(String want, ConnectivityMetricsEvent... input) {
+        List<IpConnectivityEvent> protoInput =
+                IpConnectivityEventBuilder.toProto(Arrays.asList(input));
+        verifySerialization(want, protoInput.toArray(new IpConnectivityEvent[0]));
+    }
+
+    static void verifySerialization(String want, IpConnectivityEvent... input) {
         try {
-            List<IpConnectivityEvent> proto =
-                    IpConnectivityEventBuilder.toProto(Arrays.asList(input));
-            byte[] got = IpConnectivityEventBuilder.serialize(0, proto);
+            byte[] got = IpConnectivityEventBuilder.serialize(0, Arrays.asList(input));
             IpConnectivityLog log = IpConnectivityLog.parseFrom(got);
             assertEquals(want, log.toString());
         } catch (Exception e) {
diff --git a/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java b/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java
index e01469b..a395c48 100644
--- a/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java
+++ b/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java
@@ -224,6 +224,15 @@
         dnsEvent(101, EVENT_GETADDRINFO, 0, 56);
         dnsEvent(101, EVENT_GETHOSTBYNAME, 0, 34);
 
+        // iface, uid
+        wakeupEvent("wlan0", 1000);
+        wakeupEvent("rmnet0", 10123);
+        wakeupEvent("wlan0", 1000);
+        wakeupEvent("rmnet0", 10008);
+        wakeupEvent("wlan0", -1);
+        wakeupEvent("wlan0", 10008);
+        wakeupEvent("rmnet0", 1000);
+
         String want = String.join("\n",
                 "dropped_events: 0",
                 "events <",
@@ -256,9 +265,14 @@
                 "  time_ms: 300",
                 "  transports: 0",
                 "  default_network_event <",
+                "    default_network_duration_ms: 0",
+                "    final_score: 0",
+                "    initial_score: 0",
+                "    ip_support: 0",
                 "    network_id <",
                 "      network_id: 102",
                 "    >",
+                "    no_default_network_duration_ms: 0",
                 "    previous_network_id <",
                 "      network_id: 101",
                 "    >",
@@ -308,6 +322,8 @@
                 "    program_updates_all: 7",
                 "    program_updates_allowing_multicast: 3",
                 "    received_ras: 10",
+                "    total_packet_dropped: 0",
+                "    total_packet_processed: 0",
                 "    zero_lifetime_ras: 1",
                 "  >",
                 ">",
@@ -367,6 +383,10 @@
                 "    event_types: 1",
                 "    event_types: 1",
                 "    event_types: 2",
+                "    getaddrinfo_error_count: 0",
+                "    getaddrinfo_query_count: 0",
+                "    gethostbyname_error_count: 0",
+                "    gethostbyname_query_count: 0",
                 "    latencies_ms: 3456",
                 "    latencies_ms: 45",
                 "    latencies_ms: 638",
@@ -384,12 +404,48 @@
                 "  dns_lookup_batch <",
                 "    event_types: 1",
                 "    event_types: 2",
+                "    getaddrinfo_error_count: 0",
+                "    getaddrinfo_query_count: 0",
+                "    gethostbyname_error_count: 0",
+                "    gethostbyname_query_count: 0",
                 "    latencies_ms: 56",
                 "    latencies_ms: 34",
                 "    return_codes: 0",
                 "    return_codes: 0",
                 "  >",
                 ">",
+                "events <",
+                "  if_name: \"\"",
+                "  link_layer: 2",
+                "  network_id: 0",
+                "  time_ms: 0",
+                "  transports: 0",
+                "  wakeup_stats <",
+                "    application_wakeups: 2",
+                "    duration_sec: 0",
+                "    no_uid_wakeups: 0",
+                "    non_application_wakeups: 0",
+                "    root_wakeups: 0",
+                "    system_wakeups: 1",
+                "    total_wakeups: 3",
+                "  >",
+                ">",
+                "events <",
+                "  if_name: \"\"",
+                "  link_layer: 4",
+                "  network_id: 0",
+                "  time_ms: 0",
+                "  transports: 0",
+                "  wakeup_stats <",
+                "    application_wakeups: 1",
+                "    duration_sec: 0",
+                "    no_uid_wakeups: 1",
+                "    non_application_wakeups: 0",
+                "    root_wakeups: 0",
+                "    system_wakeups: 2",
+                "    total_wakeups: 4",
+                "  >",
+                ">",
                 "version: 2\n");
 
         verifySerialization(want, getdump("flush"));
@@ -410,6 +466,11 @@
         mNetdListener.onDnsEvent(netId, type, result, latency, "", null, 0, 0);
     }
 
+    void wakeupEvent(String iface, int uid) throws Exception {
+        String prefix = NetdEventListenerService.WAKEUP_EVENT_IFACE_PREFIX + iface;
+        mNetdListener.onWakeupEvent(prefix, uid, uid, 0);
+    }
+
     List<ConnectivityMetricsEvent> verifyEvents(int n, int timeoutMs) throws Exception {
         ArgumentCaptor<ConnectivityMetricsEvent> captor =
                 ArgumentCaptor.forClass(ConnectivityMetricsEvent.class);
diff --git a/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java b/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java
new file mode 100644
index 0000000..e3f46a4
--- /dev/null
+++ b/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java
@@ -0,0 +1,226 @@
+/*
+ * 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.connectivity;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.eq;
+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.net.ConnectivityManager;
+import android.net.InterfaceConfiguration;
+import android.net.LinkAddress;
+import android.net.LinkProperties;
+import android.net.NetworkInfo;
+import android.os.Handler;
+import android.os.INetworkManagementService;
+import android.os.test.TestLooper;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import com.android.server.ConnectivityService;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class Nat464XlatTest {
+
+    static final String BASE_IFACE = "test0";
+    static final String STACKED_IFACE = "v4-test0";
+    static final LinkAddress ADDR = new LinkAddress("192.0.2.5/29");
+
+    @Mock ConnectivityService mConnectivity;
+    @Mock INetworkManagementService mNms;
+    @Mock InterfaceConfiguration mConfig;
+    @Mock NetworkAgentInfo mNai;
+
+    TestLooper mLooper;
+    Handler mHandler;
+
+    Nat464Xlat makeNat464Xlat() {
+        return new Nat464Xlat(mNms, mNai);
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        mLooper = new TestLooper();
+        mHandler = new Handler(mLooper.getLooper());
+
+        MockitoAnnotations.initMocks(this);
+
+        mNai.linkProperties = new LinkProperties();
+        mNai.linkProperties.setInterfaceName(BASE_IFACE);
+        mNai.networkInfo = new NetworkInfo(null);
+        mNai.networkInfo.setType(ConnectivityManager.TYPE_WIFI);
+        when(mNai.connService()).thenReturn(mConnectivity);
+        when(mNai.handler()).thenReturn(mHandler);
+
+        when(mNms.getInterfaceConfig(eq(STACKED_IFACE))).thenReturn(mConfig);
+        when(mConfig.getLinkAddress()).thenReturn(ADDR);
+    }
+
+    @Test
+    public void testNormalStartAndStop() throws Exception {
+        Nat464Xlat nat = makeNat464Xlat();
+        ArgumentCaptor<LinkProperties> c = ArgumentCaptor.forClass(LinkProperties.class);
+
+        // ConnectivityService starts clat.
+        nat.start();
+
+        verify(mNms).registerObserver(eq(nat));
+        verify(mNms).startClatd(eq(BASE_IFACE));
+
+        // Stacked interface up notification arrives.
+        nat.interfaceLinkStateChanged(STACKED_IFACE, true);
+        mLooper.dispatchNext();
+
+        verify(mNms).getInterfaceConfig(eq(STACKED_IFACE));
+        verify(mNms).setInterfaceIpv6NdOffload(eq(BASE_IFACE), eq(false));
+        verify(mConnectivity).handleUpdateLinkProperties(eq(mNai), c.capture());
+        assertFalse(c.getValue().getStackedLinks().isEmpty());
+        assertTrue(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
+        assertRunning(nat);
+
+        // ConnectivityService stops clat (Network disconnects, IPv4 addr appears, ...).
+        nat.stop();
+
+        verify(mNms).stopClatd(eq(BASE_IFACE));
+        verify(mNms).setInterfaceIpv6NdOffload(eq(BASE_IFACE), eq(true));
+
+        // Stacked interface removed notification arrives.
+        nat.interfaceRemoved(STACKED_IFACE);
+        mLooper.dispatchNext();
+
+        verify(mNms).unregisterObserver(eq(nat));
+        verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture());
+        assertTrue(c.getValue().getStackedLinks().isEmpty());
+        assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
+        assertIdle(nat);
+
+        verifyNoMoreInteractions(mNms, mConnectivity);
+    }
+
+    @Test
+    public void testClatdCrashWhileRunning() throws Exception {
+        Nat464Xlat nat = makeNat464Xlat();
+        ArgumentCaptor<LinkProperties> c = ArgumentCaptor.forClass(LinkProperties.class);
+
+        // ConnectivityService starts clat.
+        nat.start();
+
+        verify(mNms).registerObserver(eq(nat));
+        verify(mNms).startClatd(eq(BASE_IFACE));
+
+        // Stacked interface up notification arrives.
+        nat.interfaceLinkStateChanged(STACKED_IFACE, true);
+        mLooper.dispatchNext();
+
+        verify(mNms).getInterfaceConfig(eq(STACKED_IFACE));
+        verify(mNms).setInterfaceIpv6NdOffload(eq(BASE_IFACE), eq(false));
+        verify(mConnectivity, times(1)).handleUpdateLinkProperties(eq(mNai), c.capture());
+        assertFalse(c.getValue().getStackedLinks().isEmpty());
+        assertTrue(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
+        assertRunning(nat);
+
+        // Stacked interface removed notification arrives (clatd crashed, ...).
+        nat.interfaceRemoved(STACKED_IFACE);
+        mLooper.dispatchNext();
+
+        verify(mNms).unregisterObserver(eq(nat));
+        verify(mNms).stopClatd(eq(BASE_IFACE));
+        verify(mNms).setInterfaceIpv6NdOffload(eq(BASE_IFACE), eq(true));
+        verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture());
+        assertTrue(c.getValue().getStackedLinks().isEmpty());
+        assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
+        assertIdle(nat);
+
+        // ConnectivityService stops clat: no-op.
+        nat.stop();
+
+        verifyNoMoreInteractions(mNms, mConnectivity);
+    }
+
+    @Test
+    public void testStopBeforeClatdStarts() throws Exception {
+        Nat464Xlat nat = makeNat464Xlat();
+
+        // ConnectivityService starts clat.
+        nat.start();
+
+        verify(mNms).registerObserver(eq(nat));
+        verify(mNms).startClatd(eq(BASE_IFACE));
+
+        // ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...)
+        nat.stop();
+
+        verify(mNms).unregisterObserver(eq(nat));
+        verify(mNms).stopClatd(eq(BASE_IFACE));
+        assertIdle(nat);
+
+        // In-flight interface up notification arrives: no-op
+        nat.interfaceLinkStateChanged(STACKED_IFACE, true);
+        mLooper.dispatchNext();
+
+
+        // Interface removed notification arrives after stopClatd() takes effect: no-op.
+        nat.interfaceRemoved(STACKED_IFACE);
+        mLooper.dispatchNext();
+
+        assertIdle(nat);
+
+        verifyNoMoreInteractions(mNms, mConnectivity);
+    }
+
+    @Test
+    public void testStopAndClatdNeverStarts() throws Exception {
+        Nat464Xlat nat = makeNat464Xlat();
+
+        // ConnectivityService starts clat.
+        nat.start();
+
+        verify(mNms).registerObserver(eq(nat));
+        verify(mNms).startClatd(eq(BASE_IFACE));
+
+        // ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...)
+        nat.stop();
+
+        verify(mNms).unregisterObserver(eq(nat));
+        verify(mNms).stopClatd(eq(BASE_IFACE));
+        assertIdle(nat);
+
+        verifyNoMoreInteractions(mNms, mConnectivity);
+    }
+
+    static void assertIdle(Nat464Xlat nat) {
+        assertTrue("Nat464Xlat was not IDLE", !nat.isStarted());
+    }
+
+    static void assertRunning(Nat464Xlat nat) {
+        assertTrue("Nat464Xlat was not RUNNING", nat.isRunning());
+    }
+}
diff --git a/tests/net/java/com/android/server/connectivity/NetdEventListenerServiceTest.java b/tests/net/java/com/android/server/connectivity/NetdEventListenerServiceTest.java
index f98ab3d..6723601 100644
--- a/tests/net/java/com/android/server/connectivity/NetdEventListenerServiceTest.java
+++ b/tests/net/java/com/android/server/connectivity/NetdEventListenerServiceTest.java
@@ -19,6 +19,7 @@
 import static android.net.metrics.INetdEventListener.EVENT_GETADDRINFO;
 import static android.net.metrics.INetdEventListener.EVENT_GETHOSTBYNAME;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.mock;
@@ -37,9 +38,11 @@
 import android.system.OsConstants;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.util.Base64;
+
 import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.DNSLookupBatch;
 import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityEvent;
 import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityLog;
+
 import java.io.FileOutputStream;
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -47,6 +50,7 @@
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -75,6 +79,118 @@
     }
 
     @Test
+    public void testWakeupEventLogging() throws Exception {
+        final int BUFFER_LENGTH = NetdEventListenerService.WAKEUP_EVENT_BUFFER_LENGTH;
+
+        // Assert no events
+        String[] events1 = listNetdEvent();
+        assertEquals(new String[]{""}, events1);
+
+        long now = System.currentTimeMillis();
+        String prefix = "iface:wlan0";
+        int[] uids = { 10001, 10002, 10004, 1000, 10052, 10023, 10002, 10123, 10004 };
+        for (int uid : uids) {
+            mNetdEventListenerService.onWakeupEvent(prefix, uid, uid, now);
+        }
+
+        String[] events2 = listNetdEvent();
+        int expectedLength2 = uids.length + 1; // +1 for the WakeupStats line
+        assertEquals(expectedLength2, events2.length);
+        assertContains(events2[0], "WakeupStats");
+        assertContains(events2[0], "wlan0");
+        for (int i = 0; i < uids.length; i++) {
+            String got = events2[i+1];
+            assertContains(got, "WakeupEvent");
+            assertContains(got, "wlan0");
+            assertContains(got, "uid: " + uids[i]);
+        }
+
+        int uid = 20000;
+        for (int i = 0; i < BUFFER_LENGTH * 2; i++) {
+            long ts = now + 10;
+            mNetdEventListenerService.onWakeupEvent(prefix, uid, uid, ts);
+        }
+
+        String[] events3 = listNetdEvent();
+        int expectedLength3 = BUFFER_LENGTH + 1; // +1 for the WakeupStats line
+        assertEquals(expectedLength3, events3.length);
+        assertContains(events2[0], "WakeupStats");
+        assertContains(events2[0], "wlan0");
+        for (int i = 1; i < expectedLength3; i++) {
+            String got = events3[i];
+            assertContains(got, "WakeupEvent");
+            assertContains(got, "wlan0");
+            assertContains(got, "uid: " + uid);
+        }
+
+        uid = 45678;
+        mNetdEventListenerService.onWakeupEvent(prefix, uid, uid, now);
+
+        String[] events4 = listNetdEvent();
+        String lastEvent = events4[events4.length - 1];
+        assertContains(lastEvent, "WakeupEvent");
+        assertContains(lastEvent, "wlan0");
+        assertContains(lastEvent, "uid: " + uid);
+    }
+
+    @Test
+    public void testWakeupStatsLogging() throws Exception {
+        wakeupEvent("wlan0", 1000);
+        wakeupEvent("rmnet0", 10123);
+        wakeupEvent("wlan0", 1000);
+        wakeupEvent("rmnet0", 10008);
+        wakeupEvent("wlan0", -1);
+        wakeupEvent("wlan0", 10008);
+        wakeupEvent("rmnet0", 1000);
+        wakeupEvent("wlan0", 10004);
+        wakeupEvent("wlan0", 1000);
+        wakeupEvent("wlan0", 0);
+        wakeupEvent("wlan0", -1);
+        wakeupEvent("rmnet0", 10052);
+        wakeupEvent("wlan0", 0);
+        wakeupEvent("rmnet0", 1000);
+        wakeupEvent("wlan0", 1010);
+
+        String got = flushStatistics();
+        String want = String.join("\n",
+                "dropped_events: 0",
+                "events <",
+                "  if_name: \"\"",
+                "  link_layer: 2",
+                "  network_id: 0",
+                "  time_ms: 0",
+                "  transports: 0",
+                "  wakeup_stats <",
+                "    application_wakeups: 3",
+                "    duration_sec: 0",
+                "    no_uid_wakeups: 0",
+                "    non_application_wakeups: 0",
+                "    root_wakeups: 0",
+                "    system_wakeups: 2",
+                "    total_wakeups: 5",
+                "  >",
+                ">",
+                "events <",
+                "  if_name: \"\"",
+                "  link_layer: 4",
+                "  network_id: 0",
+                "  time_ms: 0",
+                "  transports: 0",
+                "  wakeup_stats <",
+                "    application_wakeups: 2",
+                "    duration_sec: 0",
+                "    no_uid_wakeups: 2",
+                "    non_application_wakeups: 1",
+                "    root_wakeups: 2",
+                "    system_wakeups: 3",
+                "    total_wakeups: 10",
+                "  >",
+                ">",
+                "version: 2\n");
+        assertEquals(want, got);
+    }
+
+    @Test
     public void testDnsLogging() throws Exception {
         asyncDump(100);
 
@@ -111,6 +227,10 @@
                 "    event_types: 1",
                 "    event_types: 2",
                 "    event_types: 2",
+                "    getaddrinfo_error_count: 0",
+                "    getaddrinfo_query_count: 0",
+                "    gethostbyname_error_count: 0",
+                "    gethostbyname_query_count: 0",
                 "    latencies_ms: 3456",
                 "    latencies_ms: 267",
                 "    latencies_ms: 1230",
@@ -142,6 +262,10 @@
                 "    event_types: 2",
                 "    event_types: 1",
                 "    event_types: 1",
+                "    getaddrinfo_error_count: 0",
+                "    getaddrinfo_query_count: 0",
+                "    gethostbyname_error_count: 0",
+                "    gethostbyname_query_count: 0",
                 "    latencies_ms: 56",
                 "    latencies_ms: 78",
                 "    latencies_ms: 14",
@@ -289,6 +413,11 @@
         mNetdEventListenerService.onDnsEvent(netId, type, result, latency, "", null, 0, 0);
     }
 
+    void wakeupEvent(String iface, int uid) throws Exception {
+        String prefix = NetdEventListenerService.WAKEUP_EVENT_IFACE_PREFIX + iface;
+        mNetdEventListenerService.onWakeupEvent(prefix, uid, uid, 0);
+    }
+
     void asyncDump(long durationMs) throws Exception {
         final long stop = System.currentTimeMillis() + durationMs;
         final PrintWriter pw = new PrintWriter(new FileOutputStream("/dev/null"));
@@ -321,4 +450,15 @@
         }
         return log.toString();
     }
+
+    String[] listNetdEvent() throws Exception {
+        StringWriter buffer = new StringWriter();
+        PrintWriter writer = new PrintWriter(buffer);
+        mNetdEventListenerService.list(writer);
+        return buffer.toString().split("\\n");
+    }
+
+    static void assertContains(String got, String want) {
+        assertTrue(got + " did not contain \"" + want + "\"", got.contains(want));
+    }
 }
diff --git a/tests/net/java/com/android/server/connectivity/VpnTest.java b/tests/net/java/com/android/server/connectivity/VpnTest.java
index 506d9e5..296cb76 100644
--- a/tests/net/java/com/android/server/connectivity/VpnTest.java
+++ b/tests/net/java/com/android/server/connectivity/VpnTest.java
@@ -27,13 +27,16 @@
 import android.app.AppOpsManager;
 import android.app.NotificationManager;
 import android.content.Context;
-import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
 import android.content.pm.UserInfo;
 import android.net.NetworkInfo.DetailedState;
 import android.net.UidRange;
-import android.os.Build;
+import android.net.VpnService;
+import android.os.Build.VERSION_CODES;
+import android.os.Bundle;
 import android.os.INetworkManagementService;
 import android.os.Looper;
 import android.os.UserHandle;
@@ -45,22 +48,22 @@
 
 import com.android.internal.net.VpnConfig;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.Set;
-
 import org.mockito.Answers;
-import org.mockito.ArgumentCaptor;
 import org.mockito.InOrder;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
 /**
  * Tests for {@link Vpn}.
  *
  * Build, install and run with:
- *  runtest --path src/com/android/server/connectivity/VpnTest.java
+ *  runtest --path java/com/android/server/connectivity/VpnTest.java
  */
 public class VpnTest extends AndroidTestCase {
     private static final String TAG = "VpnTest";
@@ -116,7 +119,7 @@
 
         // Used by {@link Notification.Builder}
         ApplicationInfo applicationInfo = new ApplicationInfo();
-        applicationInfo.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
+        applicationInfo.targetSdkVersion = VERSION_CODES.CUR_DEVELOPMENT;
         when(mContext.getApplicationInfo()).thenReturn(applicationInfo);
 
         doNothing().when(mNetService).registerObserver(any());
@@ -315,6 +318,40 @@
     }
 
     @SmallTest
+    public void testIsAlwaysOnPackageSupported() throws Exception {
+        final Vpn vpn = createVpn(primaryUser.id);
+
+        ApplicationInfo appInfo = new ApplicationInfo();
+        when(mPackageManager.getApplicationInfoAsUser(eq(PKGS[0]), anyInt(), eq(primaryUser.id)))
+                .thenReturn(appInfo);
+
+        ServiceInfo svcInfo = new ServiceInfo();
+        ResolveInfo resInfo = new ResolveInfo();
+        resInfo.serviceInfo = svcInfo;
+        when(mPackageManager.queryIntentServicesAsUser(any(), eq(PackageManager.GET_META_DATA),
+                eq(primaryUser.id)))
+                .thenReturn(Collections.singletonList(resInfo));
+
+        // null package name should return false
+        assertFalse(vpn.isAlwaysOnPackageSupported(null));
+
+        // Pre-N apps are not supported
+        appInfo.targetSdkVersion = VERSION_CODES.M;
+        assertFalse(vpn.isAlwaysOnPackageSupported(PKGS[0]));
+
+        // N+ apps are supported by default
+        appInfo.targetSdkVersion = VERSION_CODES.N;
+        assertTrue(vpn.isAlwaysOnPackageSupported(PKGS[0]));
+
+        // 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]));
+    }
+
+    @SmallTest
     public void testNotificationShownForAlwaysOnApp() {
         final UserHandle userHandle = UserHandle.of(primaryUser.id);
         final Vpn vpn = createVpn(primaryUser.id);
diff --git a/tests/net/java/com/android/server/connectivity/tethering/OffloadControllerTest.java b/tests/net/java/com/android/server/connectivity/tethering/OffloadControllerTest.java
index dcb9723..b98f63b 100644
--- a/tests/net/java/com/android/server/connectivity/tethering/OffloadControllerTest.java
+++ b/tests/net/java/com/android/server/connectivity/tethering/OffloadControllerTest.java
@@ -17,7 +17,10 @@
 package com.android.server.connectivity.tethering;
 
 import static android.net.NetworkStats.SET_DEFAULT;
+import static android.net.NetworkStats.STATS_PER_IFACE;
+import static android.net.NetworkStats.STATS_PER_UID;
 import static android.net.NetworkStats.TAG_NONE;
+import static android.net.NetworkStats.UID_ALL;
 import static android.net.TrafficStats.UID_TETHERING;
 import static android.provider.Settings.Global.TETHER_OFFLOAD_DISABLED;
 import static com.android.server.connectivity.tethering.OffloadHardwareInterface.ForwardedStats;
@@ -25,15 +28,17 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyLong;
 import static org.mockito.Matchers.anyObject;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.inOrder;
 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.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
@@ -45,6 +50,7 @@
 import android.net.NetworkStats;
 import android.net.RouteInfo;
 import android.net.util.SharedLog;
+import android.os.ConditionVariable;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.INetworkManagementService;
@@ -74,6 +80,15 @@
 @RunWith(AndroidJUnit4.class)
 @SmallTest
 public class OffloadControllerTest {
+    private static final String RNDIS0 = "test_rndis0";
+    private static final String RMNET0 = "test_rmnet_data0";
+    private static final String WLAN0 = "test_wlan0";
+
+    private static final String IPV6_LINKLOCAL = "fe80::/64";
+    private static final String IPV6_DOC_PREFIX = "2001:db8::/64";
+    private static final String IPV6_DISCARD_PREFIX = "100::/64";
+    private static final String USB_PREFIX = "192.168.42.0/24";
+    private static final String WIFI_PREFIX = "192.168.43.0/24";
 
     @Mock private OffloadHardwareInterface mHardware;
     @Mock private ApplicationInfo mApplicationInfo;
@@ -83,6 +98,8 @@
             ArgumentCaptor.forClass(ArrayList.class);
     private final ArgumentCaptor<ITetheringStatsProvider.Stub> mTetherStatsProviderCaptor =
             ArgumentCaptor.forClass(ITetheringStatsProvider.Stub.class);
+    private final ArgumentCaptor<OffloadHardwareInterface.ControlCallback> mControlCallbackCaptor =
+            ArgumentCaptor.forClass(OffloadHardwareInterface.ControlCallback.class);
     private MockContentResolver mContentResolver;
 
     @Before public void setUp() {
@@ -101,15 +118,23 @@
 
     private void setupFunctioningHardwareInterface() {
         when(mHardware.initOffloadConfig()).thenReturn(true);
-        when(mHardware.initOffloadControl(any(OffloadHardwareInterface.ControlCallback.class)))
+        when(mHardware.initOffloadControl(mControlCallbackCaptor.capture()))
                 .thenReturn(true);
+        when(mHardware.setUpstreamParameters(anyString(), any(), any(), any())).thenReturn(true);
         when(mHardware.getForwardedStats(any())).thenReturn(new ForwardedStats());
+        when(mHardware.setDataLimit(anyString(), anyLong())).thenReturn(true);
     }
 
     private void enableOffload() {
         Settings.Global.putInt(mContentResolver, TETHER_OFFLOAD_DISABLED, 0);
     }
 
+    private void waitForIdle() {
+        ConditionVariable cv = new ConditionVariable();
+        new Handler(Looper.getMainLooper()).post(() -> { cv.open(); });
+        cv.block();
+    }
+
     private OffloadController makeOffloadController() throws Exception {
         OffloadController offload = new OffloadController(new Handler(Looper.getMainLooper()),
                 mHardware, mContentResolver, mNMService, new SharedLog("test"));
@@ -219,10 +244,8 @@
         inOrder.verify(mHardware, times(1)).setLocalPrefixes(mStringArrayCaptor.capture());
         ArrayList<String> localPrefixes = mStringArrayCaptor.getValue();
         assertEquals(4, localPrefixes.size());
-        assertTrue(localPrefixes.contains("127.0.0.0/8"));
-        assertTrue(localPrefixes.contains("192.0.2.0/24"));
-        assertTrue(localPrefixes.contains("fe80::/64"));
-        assertTrue(localPrefixes.contains("2001:db8::/64"));
+        assertArrayListContains(localPrefixes,
+                "127.0.0.0/8", "192.0.2.0/24", "fe80::/64", "2001:db8::/64");
         inOrder.verifyNoMoreInteractions();
 
         offload.setUpstreamLinkProperties(null);
@@ -243,6 +266,7 @@
         inOrder.verify(mHardware, never()).setLocalPrefixes(mStringArrayCaptor.capture());
         inOrder.verify(mHardware, times(1)).setUpstreamParameters(
                 eq(testIfName), eq(null), eq(null), eq(null));
+        inOrder.verify(mHardware, times(1)).setDataLimit(eq(testIfName), eq(Long.MAX_VALUE));
         inOrder.verifyNoMoreInteractions();
 
         final String ipv4Addr = "192.0.2.5";
@@ -260,6 +284,7 @@
         inOrder.verify(mHardware, times(1)).setUpstreamParameters(
                 eq(testIfName), eq(ipv4Addr), eq(null), eq(null));
         inOrder.verify(mHardware, times(1)).getForwardedStats(eq(testIfName));
+        inOrder.verify(mHardware, times(1)).setDataLimit(eq(testIfName), eq(Long.MAX_VALUE));
         inOrder.verifyNoMoreInteractions();
 
         final String ipv4Gateway = "192.0.2.1";
@@ -270,6 +295,7 @@
         inOrder.verify(mHardware, times(1)).setUpstreamParameters(
                 eq(testIfName), eq(ipv4Addr), eq(ipv4Gateway), eq(null));
         inOrder.verify(mHardware, times(1)).getForwardedStats(eq(testIfName));
+        inOrder.verify(mHardware, times(1)).setDataLimit(eq(testIfName), eq(Long.MAX_VALUE));
         inOrder.verifyNoMoreInteractions();
 
         final String ipv6Gw1 = "fe80::cafe";
@@ -283,6 +309,7 @@
         ArrayList<String> v6gws = mStringArrayCaptor.getValue();
         assertEquals(1, v6gws.size());
         assertTrue(v6gws.contains(ipv6Gw1));
+        inOrder.verify(mHardware, times(1)).setDataLimit(eq(testIfName), eq(Long.MAX_VALUE));
         inOrder.verifyNoMoreInteractions();
 
         final String ipv6Gw2 = "fe80::d00d";
@@ -297,6 +324,7 @@
         assertEquals(2, v6gws.size());
         assertTrue(v6gws.contains(ipv6Gw1));
         assertTrue(v6gws.contains(ipv6Gw2));
+        inOrder.verify(mHardware, times(1)).setDataLimit(eq(testIfName), eq(Long.MAX_VALUE));
         inOrder.verifyNoMoreInteractions();
 
         final LinkProperties stacked = new LinkProperties();
@@ -315,6 +343,7 @@
         assertEquals(2, v6gws.size());
         assertTrue(v6gws.contains(ipv6Gw1));
         assertTrue(v6gws.contains(ipv6Gw2));
+        inOrder.verify(mHardware, times(1)).setDataLimit(eq(testIfName), eq(Long.MAX_VALUE));
         inOrder.verifyNoMoreInteractions();
 
         // Add in some IPv6 upstream info. When there is a tethered downstream
@@ -331,12 +360,9 @@
         inOrder.verify(mHardware, times(1)).setLocalPrefixes(mStringArrayCaptor.capture());
         localPrefixes = mStringArrayCaptor.getValue();
         assertEquals(6, localPrefixes.size());
-        assertTrue(localPrefixes.contains("127.0.0.0/8"));
-        assertTrue(localPrefixes.contains("192.0.2.0/24"));
-        assertTrue(localPrefixes.contains("fe80::/64"));
-        assertTrue(localPrefixes.contains("2001:db8::/64"));
-        assertTrue(localPrefixes.contains("2001:db8::6173:7369:676e:6564/128"));
-        assertTrue(localPrefixes.contains("2001:db8::7261:6e64:6f6d/128"));
+        assertArrayListContains(localPrefixes,
+                "127.0.0.0/8", "192.0.2.0/24", "fe80::/64", "2001:db8::/64",
+                "2001:db8::6173:7369:676e:6564/128", "2001:db8::7261:6e64:6f6d/128");
         // The relevant parts of the LinkProperties have not changed, but at the
         // moment we do not de-dup upstream LinkProperties this carefully.
         inOrder.verify(mHardware, times(1)).setUpstreamParameters(
@@ -346,6 +372,7 @@
         assertTrue(v6gws.contains(ipv6Gw1));
         assertTrue(v6gws.contains(ipv6Gw2));
         inOrder.verify(mHardware, times(1)).getForwardedStats(eq(testIfName));
+        inOrder.verify(mHardware, times(1)).setDataLimit(eq(testIfName), eq(Long.MAX_VALUE));
         inOrder.verifyNoMoreInteractions();
 
         // Completely identical LinkProperties updates are de-duped.
@@ -363,7 +390,6 @@
         assertEquals(stats.txBytes, entry.txBytes);
         assertEquals(SET_DEFAULT, entry.set);
         assertEquals(TAG_NONE, entry.tag);
-        assertEquals(UID_TETHERING, entry.uid);
     }
 
     @Test
@@ -388,33 +414,325 @@
         when(mHardware.getForwardedStats(eq(ethernetIface))).thenReturn(ethernetStats);
         when(mHardware.getForwardedStats(eq(mobileIface))).thenReturn(mobileStats);
 
+        InOrder inOrder = inOrder(mHardware);
+
         final LinkProperties lp = new LinkProperties();
         lp.setInterfaceName(ethernetIface);
         offload.setUpstreamLinkProperties(lp);
+        // Previous upstream was null, so no stats are fetched.
+        inOrder.verify(mHardware, never()).getForwardedStats(any());
 
         lp.setInterfaceName(mobileIface);
         offload.setUpstreamLinkProperties(lp);
+        // Expect that we fetch stats from the previous upstream.
+        inOrder.verify(mHardware, times(1)).getForwardedStats(eq(ethernetIface));
 
         lp.setInterfaceName(ethernetIface);
         offload.setUpstreamLinkProperties(lp);
+        // Expect that we fetch stats from the previous upstream.
+        inOrder.verify(mHardware, times(1)).getForwardedStats(eq(mobileIface));
 
+        ethernetStats = new ForwardedStats();
         ethernetStats.rxBytes = 100000;
         ethernetStats.txBytes = 100000;
+        when(mHardware.getForwardedStats(eq(ethernetIface))).thenReturn(ethernetStats);
         offload.setUpstreamLinkProperties(null);
+        // Expect that we first clear the HAL's upstream parameters.
+        inOrder.verify(mHardware, times(1)).setUpstreamParameters(
+                eq(""), eq("0.0.0.0"), eq("0.0.0.0"), eq(null));
+        // Expect that we fetch stats from the previous upstream.
+        inOrder.verify(mHardware, times(1)).getForwardedStats(eq(ethernetIface));
 
-        NetworkStats stats = mTetherStatsProviderCaptor.getValue().getTetherStats();
+        ITetheringStatsProvider provider = mTetherStatsProviderCaptor.getValue();
+        NetworkStats stats = provider.getTetherStats(STATS_PER_IFACE);
+        NetworkStats perUidStats = provider.getTetherStats(STATS_PER_UID);
+        waitForIdle();
+        // There is no current upstream, so no stats are fetched.
+        inOrder.verify(mHardware, never()).getForwardedStats(any());
+        inOrder.verifyNoMoreInteractions();
+
         assertEquals(2, stats.size());
+        assertEquals(2, perUidStats.size());
 
         NetworkStats.Entry entry = null;
+        for (int i = 0; i < stats.size(); i++) {
+            assertEquals(UID_ALL, stats.getValues(i, entry).uid);
+            assertEquals(UID_TETHERING, perUidStats.getValues(i, entry).uid);
+        }
+
         int ethernetPosition = ethernetIface.equals(stats.getValues(0, entry).iface) ? 0 : 1;
         int mobilePosition = 1 - ethernetPosition;
 
         entry = stats.getValues(mobilePosition, entry);
         assertNetworkStats(mobileIface, mobileStats, entry);
+        entry = perUidStats.getValues(mobilePosition, entry);
+        assertNetworkStats(mobileIface, mobileStats, entry);
 
         ethernetStats.rxBytes = 12345 + 100000;
         ethernetStats.txBytes = 54321 + 100000;
         entry = stats.getValues(ethernetPosition, entry);
         assertNetworkStats(ethernetIface, ethernetStats, entry);
+        entry = perUidStats.getValues(ethernetPosition, entry);
+        assertNetworkStats(ethernetIface, ethernetStats, entry);
+    }
+
+    @Test
+    public void testSetInterfaceQuota() throws Exception {
+        setupFunctioningHardwareInterface();
+        enableOffload();
+
+        final OffloadController offload = makeOffloadController();
+        offload.start();
+
+        final String ethernetIface = "eth1";
+        final String mobileIface = "rmnet_data0";
+        final long ethernetLimit = 12345;
+        final long mobileLimit = 12345678;
+
+        final LinkProperties lp = new LinkProperties();
+        lp.setInterfaceName(ethernetIface);
+        offload.setUpstreamLinkProperties(lp);
+
+        ITetheringStatsProvider provider = mTetherStatsProviderCaptor.getValue();
+        final InOrder inOrder = inOrder(mHardware);
+        when(mHardware.setUpstreamParameters(any(), any(), any(), any())).thenReturn(true);
+        when(mHardware.setDataLimit(anyString(), anyLong())).thenReturn(true);
+
+        // Applying an interface quota to the current upstream immediately sends it to the hardware.
+        provider.setInterfaceQuota(ethernetIface, ethernetLimit);
+        waitForIdle();
+        inOrder.verify(mHardware).setDataLimit(ethernetIface, ethernetLimit);
+        inOrder.verifyNoMoreInteractions();
+
+        // Applying an interface quota to another upstream does not take any immediate action.
+        provider.setInterfaceQuota(mobileIface, mobileLimit);
+        waitForIdle();
+        inOrder.verify(mHardware, never()).setDataLimit(anyString(), anyLong());
+
+        // Switching to that upstream causes the quota to be applied if the parameters were applied
+        // correctly.
+        lp.setInterfaceName(mobileIface);
+        offload.setUpstreamLinkProperties(lp);
+        waitForIdle();
+        inOrder.verify(mHardware).setDataLimit(mobileIface, mobileLimit);
+
+        // Setting a limit of ITetheringStatsProvider.QUOTA_UNLIMITED causes the limit to be set
+        // to Long.MAX_VALUE.
+        provider.setInterfaceQuota(mobileIface, ITetheringStatsProvider.QUOTA_UNLIMITED);
+        waitForIdle();
+        inOrder.verify(mHardware).setDataLimit(mobileIface, Long.MAX_VALUE);
+
+        // If setting upstream parameters fails, then the data limit is not set.
+        when(mHardware.setUpstreamParameters(any(), any(), any(), any())).thenReturn(false);
+        lp.setInterfaceName(ethernetIface);
+        offload.setUpstreamLinkProperties(lp);
+        provider.setInterfaceQuota(mobileIface, mobileLimit);
+        waitForIdle();
+        inOrder.verify(mHardware, never()).setDataLimit(anyString(), anyLong());
+
+        // If setting the data limit fails while changing upstreams, offload is stopped.
+        when(mHardware.setUpstreamParameters(any(), any(), any(), any())).thenReturn(true);
+        when(mHardware.setDataLimit(anyString(), anyLong())).thenReturn(false);
+        lp.setInterfaceName(mobileIface);
+        offload.setUpstreamLinkProperties(lp);
+        provider.setInterfaceQuota(mobileIface, mobileLimit);
+        waitForIdle();
+        inOrder.verify(mHardware).getForwardedStats(ethernetIface);
+        inOrder.verify(mHardware).stopOffloadControl();
+    }
+
+    @Test
+    public void testDataLimitCallback() throws Exception {
+        setupFunctioningHardwareInterface();
+        enableOffload();
+
+        final OffloadController offload = makeOffloadController();
+        offload.start();
+
+        OffloadHardwareInterface.ControlCallback callback = mControlCallbackCaptor.getValue();
+        callback.onStoppedLimitReached();
+        verify(mNMService, times(1)).tetherLimitReached(mTetherStatsProviderCaptor.getValue());
+    }
+
+    @Test
+    public void testAddRemoveDownstreams() throws Exception {
+        setupFunctioningHardwareInterface();
+        enableOffload();
+
+        final OffloadController offload = makeOffloadController();
+        offload.start();
+
+        final InOrder inOrder = inOrder(mHardware);
+        inOrder.verify(mHardware, times(1)).initOffloadConfig();
+        inOrder.verify(mHardware, times(1)).initOffloadControl(
+                any(OffloadHardwareInterface.ControlCallback.class));
+        inOrder.verifyNoMoreInteractions();
+
+        // Tethering makes several calls to setLocalPrefixes() before add/remove
+        // downstream calls are made. This is not tested here; only the behavior
+        // of notifyDownstreamLinkProperties() and removeDownstreamInterface()
+        // are tested.
+
+        // [1] USB tethering is started.
+        final LinkProperties usbLinkProperties = new LinkProperties();
+        usbLinkProperties.setInterfaceName(RNDIS0);
+        usbLinkProperties.addLinkAddress(new LinkAddress("192.168.42.1/24"));
+        usbLinkProperties.addRoute(new RouteInfo(new IpPrefix(USB_PREFIX)));
+        offload.notifyDownstreamLinkProperties(usbLinkProperties);
+        inOrder.verify(mHardware, times(1)).addDownstreamPrefix(RNDIS0, USB_PREFIX);
+        inOrder.verifyNoMoreInteractions();
+
+        // [2] Routes for IPv6 link-local prefixes should never be added.
+        usbLinkProperties.addRoute(new RouteInfo(new IpPrefix(IPV6_LINKLOCAL)));
+        offload.notifyDownstreamLinkProperties(usbLinkProperties);
+        inOrder.verify(mHardware, never()).addDownstreamPrefix(eq(RNDIS0), anyString());
+        inOrder.verifyNoMoreInteractions();
+
+        // [3] Add an IPv6 prefix for good measure. Only new offload-able
+        // prefixes should be passed to the HAL.
+        usbLinkProperties.addLinkAddress(new LinkAddress("2001:db8::1/64"));
+        usbLinkProperties.addRoute(new RouteInfo(new IpPrefix(IPV6_DOC_PREFIX)));
+        offload.notifyDownstreamLinkProperties(usbLinkProperties);
+        inOrder.verify(mHardware, times(1)).addDownstreamPrefix(RNDIS0, IPV6_DOC_PREFIX);
+        inOrder.verifyNoMoreInteractions();
+
+        // [4] Adding addresses doesn't affect notifyDownstreamLinkProperties().
+        // The address is passed in by a separate setLocalPrefixes() invocation.
+        usbLinkProperties.addLinkAddress(new LinkAddress("2001:db8::2/64"));
+        offload.notifyDownstreamLinkProperties(usbLinkProperties);
+        inOrder.verify(mHardware, never()).addDownstreamPrefix(eq(RNDIS0), anyString());
+
+        // [5] Differences in local routes are converted into addDownstream()
+        // and removeDownstream() invocations accordingly.
+        usbLinkProperties.removeRoute(new RouteInfo(new IpPrefix(IPV6_DOC_PREFIX), null, RNDIS0));
+        usbLinkProperties.addRoute(new RouteInfo(new IpPrefix(IPV6_DISCARD_PREFIX)));
+        offload.notifyDownstreamLinkProperties(usbLinkProperties);
+        inOrder.verify(mHardware, times(1)).removeDownstreamPrefix(RNDIS0, IPV6_DOC_PREFIX);
+        inOrder.verify(mHardware, times(1)).addDownstreamPrefix(RNDIS0, IPV6_DISCARD_PREFIX);
+        inOrder.verifyNoMoreInteractions();
+
+        // [6] Removing a downstream interface which was never added causes no
+        // interactions with the HAL.
+        offload.removeDownstreamInterface(WLAN0);
+        inOrder.verifyNoMoreInteractions();
+
+        // [7] Removing an active downstream removes all remaining prefixes.
+        offload.removeDownstreamInterface(RNDIS0);
+        inOrder.verify(mHardware, times(1)).removeDownstreamPrefix(RNDIS0, USB_PREFIX);
+        inOrder.verify(mHardware, times(1)).removeDownstreamPrefix(RNDIS0, IPV6_DISCARD_PREFIX);
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void testControlCallbackOnStoppedUnsupportedFetchesAllStats() throws Exception {
+        setupFunctioningHardwareInterface();
+        enableOffload();
+
+        final OffloadController offload = makeOffloadController();
+        offload.start();
+
+        // Pretend to set a few different upstreams (only the interface name
+        // matters for this test; we're ignoring IP and route information).
+        final LinkProperties upstreamLp = new LinkProperties();
+        for (String ifname : new String[]{RMNET0, WLAN0, RMNET0}) {
+            upstreamLp.setInterfaceName(ifname);
+            offload.setUpstreamLinkProperties(upstreamLp);
+        }
+
+        // Clear invocation history, especially the getForwardedStats() calls
+        // that happen with setUpstreamParameters().
+        clearInvocations(mHardware);
+
+        OffloadHardwareInterface.ControlCallback callback = mControlCallbackCaptor.getValue();
+        callback.onStoppedUnsupported();
+
+        // Verify forwarded stats behaviour.
+        verify(mHardware, times(1)).getForwardedStats(eq(RMNET0));
+        verify(mHardware, times(1)).getForwardedStats(eq(WLAN0));
+        verifyNoMoreInteractions(mHardware);
+        verify(mNMService, times(1)).tetherLimitReached(mTetherStatsProviderCaptor.getValue());
+        verifyNoMoreInteractions(mNMService);
+    }
+
+    @Test
+    public void testControlCallbackOnSupportAvailableFetchesAllStatsAndPushesAllParameters()
+            throws Exception {
+        setupFunctioningHardwareInterface();
+        enableOffload();
+
+        final OffloadController offload = makeOffloadController();
+        offload.start();
+
+        // Pretend to set a few different upstreams (only the interface name
+        // matters for this test; we're ignoring IP and route information).
+        final LinkProperties upstreamLp = new LinkProperties();
+        for (String ifname : new String[]{RMNET0, WLAN0, RMNET0}) {
+            upstreamLp.setInterfaceName(ifname);
+            offload.setUpstreamLinkProperties(upstreamLp);
+        }
+
+        // Pretend that some local prefixes and downstreams have been added
+        // (and removed, for good measure).
+        final Set<IpPrefix> minimumLocalPrefixes = new HashSet<>();
+        for (String s : new String[]{
+                "127.0.0.0/8", "192.0.2.0/24", "fe80::/64", "2001:db8::/64"}) {
+            minimumLocalPrefixes.add(new IpPrefix(s));
+        }
+        offload.setLocalPrefixes(minimumLocalPrefixes);
+
+        final LinkProperties usbLinkProperties = new LinkProperties();
+        usbLinkProperties.setInterfaceName(RNDIS0);
+        usbLinkProperties.addLinkAddress(new LinkAddress("192.168.42.1/24"));
+        usbLinkProperties.addRoute(new RouteInfo(new IpPrefix(USB_PREFIX)));
+        offload.notifyDownstreamLinkProperties(usbLinkProperties);
+
+        final LinkProperties wifiLinkProperties = new LinkProperties();
+        wifiLinkProperties.setInterfaceName(WLAN0);
+        wifiLinkProperties.addLinkAddress(new LinkAddress("192.168.43.1/24"));
+        wifiLinkProperties.addRoute(new RouteInfo(new IpPrefix(WIFI_PREFIX)));
+        wifiLinkProperties.addRoute(new RouteInfo(new IpPrefix(IPV6_LINKLOCAL)));
+        // Use a benchmark prefix (RFC 5180 + erratum), since the documentation
+        // prefix is included in the excluded prefix list.
+        wifiLinkProperties.addLinkAddress(new LinkAddress("2001:2::1/64"));
+        wifiLinkProperties.addLinkAddress(new LinkAddress("2001:2::2/64"));
+        wifiLinkProperties.addRoute(new RouteInfo(new IpPrefix("2001:2::/64")));
+        offload.notifyDownstreamLinkProperties(wifiLinkProperties);
+
+        offload.removeDownstreamInterface(RNDIS0);
+
+        // Clear invocation history, especially the getForwardedStats() calls
+        // that happen with setUpstreamParameters().
+        clearInvocations(mHardware);
+
+        OffloadHardwareInterface.ControlCallback callback = mControlCallbackCaptor.getValue();
+        callback.onSupportAvailable();
+
+        // Verify forwarded stats behaviour.
+        verify(mHardware, times(1)).getForwardedStats(eq(RMNET0));
+        verify(mHardware, times(1)).getForwardedStats(eq(WLAN0));
+        verify(mNMService, times(1)).tetherLimitReached(mTetherStatsProviderCaptor.getValue());
+        verifyNoMoreInteractions(mNMService);
+
+        // TODO: verify local prefixes and downstreams are also pushed to the HAL.
+        verify(mHardware, times(1)).setLocalPrefixes(mStringArrayCaptor.capture());
+        ArrayList<String> localPrefixes = mStringArrayCaptor.getValue();
+        assertEquals(4, localPrefixes.size());
+        assertArrayListContains(localPrefixes,
+                // TODO: The logic to find and exclude downstream IP prefixes
+                // is currently in Tethering's OffloadWrapper but must be moved
+                // into OffloadController proper. After this, also check for:
+                //     "192.168.43.1/32", "2001:2::1/128", "2001:2::2/128"
+                "127.0.0.0/8", "192.0.2.0/24", "fe80::/64", "2001:db8::/64");
+        verify(mHardware, times(1)).addDownstreamPrefix(WLAN0, "192.168.43.0/24");
+        verify(mHardware, times(1)).addDownstreamPrefix(WLAN0, "2001:2::/64");
+        verify(mHardware, times(1)).setUpstreamParameters(eq(RMNET0), any(), any(), any());
+        verify(mHardware, times(1)).setDataLimit(eq(RMNET0), anyLong());
+        verifyNoMoreInteractions(mHardware);
+    }
+
+    private static void assertArrayListContains(ArrayList<String> list, String... elems) {
+        for (String element : elems) {
+            assertTrue(element + " not in list", list.contains(element));
+        }
     }
 }
diff --git a/tests/net/java/com/android/server/net/NetworkStatsCollectionTest.java b/tests/net/java/com/android/server/net/NetworkStatsCollectionTest.java
index 2a32b73..9c10264 100644
--- a/tests/net/java/com/android/server/net/NetworkStatsCollectionTest.java
+++ b/tests/net/java/com/android/server/net/NetworkStatsCollectionTest.java
@@ -17,26 +17,39 @@
 package com.android.server.net;
 
 import static android.net.ConnectivityManager.TYPE_MOBILE;
+import static android.net.NetworkStats.SET_ALL;
 import static android.net.NetworkStats.SET_DEFAULT;
 import static android.net.NetworkStats.TAG_NONE;
 import static android.net.NetworkStats.UID_ALL;
+import static android.net.NetworkStatsHistory.FIELD_ALL;
 import static android.net.NetworkTemplate.buildTemplateMobileAll;
+import static android.os.Process.myUid;
 import static android.text.format.DateUtils.HOUR_IN_MILLIS;
 import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
 
+import static com.android.server.net.NetworkStatsCollection.multiplySafe;
+
 import android.content.res.Resources;
+import android.net.ConnectivityManager;
 import android.net.NetworkIdentity;
 import android.net.NetworkStats;
+import android.net.NetworkStatsHistory;
 import android.net.NetworkTemplate;
 import android.os.Process;
 import android.os.UserHandle;
+import android.telephony.SubscriptionPlan;
 import android.telephony.TelephonyManager;
-import android.support.test.filters.SmallTest;
 import android.test.AndroidTestCase;
 import android.test.MoreAsserts;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.text.format.DateUtils;
+import android.util.RecurrenceRule;
 
 import com.android.frameworks.tests.net.R;
 
+import libcore.io.IoUtils;
+import libcore.io.Streams;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.DataOutputStream;
@@ -44,9 +57,12 @@
 import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
-
-import libcore.io.IoUtils;
-import libcore.io.Streams;
+import java.time.Clock;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Tests for {@link NetworkStatsCollection}.
@@ -57,14 +73,31 @@
     private static final String TEST_FILE = "test.bin";
     private static final String TEST_IMSI = "310260000000000";
 
+    private static final long TIME_A = 1326088800000L; // UTC: Monday 9th January 2012 06:00:00 AM
+    private static final long TIME_B = 1326110400000L; // UTC: Monday 9th January 2012 12:00:00 PM
+    private static final long TIME_C = 1326132000000L; // UTC: Monday 9th January 2012 06:00:00 PM
+
+    private static Clock sOriginalClock;
+
     @Override
     public void setUp() throws Exception {
         super.setUp();
+        sOriginalClock = RecurrenceRule.sClock;
 
         // ignore any device overlay while testing
         NetworkTemplate.forceAllNetworkTypes();
     }
 
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        RecurrenceRule.sClock = sOriginalClock;
+    }
+
+    private void setClock(Instant instant) {
+        RecurrenceRule.sClock = Clock.fixed(instant, ZoneId.systemDefault());
+    }
+
     public void testReadLegacyNetwork() throws Exception {
         final File testFile = new File(getContext().getFilesDir(), TEST_FILE);
         stageFile(R.raw.netstats_v1, testFile);
@@ -198,11 +231,11 @@
                 collection.getRelevantUids(NetworkStatsAccess.Level.DEVICE));
 
         // Verify security check in getHistory.
-        assertNotNull(collection.getHistory(buildTemplateMobileAll(TEST_IMSI), myUid, SET_DEFAULT,
-                TAG_NONE, 0, NetworkStatsAccess.Level.DEFAULT));
+        assertNotNull(collection.getHistory(buildTemplateMobileAll(TEST_IMSI), null, myUid, SET_DEFAULT,
+                TAG_NONE, 0, 0L, 0L, NetworkStatsAccess.Level.DEFAULT, myUid));
         try {
-            collection.getHistory(buildTemplateMobileAll(TEST_IMSI), otherUidInSameUser,
-                    SET_DEFAULT, TAG_NONE, 0, NetworkStatsAccess.Level.DEFAULT);
+            collection.getHistory(buildTemplateMobileAll(TEST_IMSI), null, otherUidInSameUser,
+                    SET_DEFAULT, TAG_NONE, 0, 0L, 0L, NetworkStatsAccess.Level.DEFAULT, myUid);
             fail("Should have thrown SecurityException for accessing different UID");
         } catch (SecurityException e) {
             // expected
@@ -217,6 +250,257 @@
                 0, NetworkStatsAccess.Level.DEVICE);
     }
 
+    public void testAugmentPlan() throws Exception {
+        final File testFile = new File(getContext().getFilesDir(), TEST_FILE);
+        stageFile(R.raw.netstats_v1, testFile);
+
+        final NetworkStatsCollection emptyCollection = new NetworkStatsCollection(30 * MINUTE_IN_MILLIS);
+        final NetworkStatsCollection collection = new NetworkStatsCollection(30 * MINUTE_IN_MILLIS);
+        collection.readLegacyNetwork(testFile);
+
+        // We're in the future, but not that far off
+        setClock(Instant.parse("2012-06-01T00:00:00.00Z"));
+
+        // Test a bunch of plans that should result in no augmentation
+        final List<SubscriptionPlan> plans = new ArrayList<>();
+
+        // No plan
+        plans.add(null);
+        // No usage anchor
+        plans.add(SubscriptionPlan.Builder
+                .createRecurringMonthly(ZonedDateTime.parse("2011-01-14T00:00:00.00Z")).build());
+        // Usage anchor far in past
+        plans.add(SubscriptionPlan.Builder
+                .createRecurringMonthly(ZonedDateTime.parse("2011-01-14T00:00:00.00Z"))
+                .setDataUsage(1000L, TIME_A - DateUtils.YEAR_IN_MILLIS).build());
+        // Usage anchor far in future
+        plans.add(SubscriptionPlan.Builder
+                .createRecurringMonthly(ZonedDateTime.parse("2011-01-14T00:00:00.00Z"))
+                .setDataUsage(1000L, TIME_A + DateUtils.YEAR_IN_MILLIS).build());
+        // Usage anchor near but outside cycle
+        plans.add(SubscriptionPlan.Builder
+                .createNonrecurring(ZonedDateTime.parse("2012-01-09T09:00:00.00Z"),
+                        ZonedDateTime.parse("2012-01-09T15:00:00.00Z"))
+                .setDataUsage(1000L, TIME_C).build());
+
+        for (SubscriptionPlan plan : plans) {
+            int i;
+            NetworkStatsHistory history;
+
+            // Empty collection should be untouched
+            history = getHistory(emptyCollection, plan, TIME_A, TIME_C);
+            assertEquals(0L, history.getTotalBytes());
+
+            // Normal collection should be untouched
+            history = getHistory(collection, plan, TIME_A, TIME_C); i = 0;
+            assertEntry(100647, 197, 23649, 185, history.getValues(i++, null));
+            assertEntry(100647, 196, 23648, 185, history.getValues(i++, null));
+            assertEntry(18323, 76, 15032, 76, history.getValues(i++, null));
+            assertEntry(18322, 75, 15031, 75, history.getValues(i++, null));
+            assertEntry(527798, 761, 78570, 652, history.getValues(i++, null));
+            assertEntry(527797, 760, 78570, 651, history.getValues(i++, null));
+            assertEntry(10747, 50, 16838, 55, history.getValues(i++, null));
+            assertEntry(10747, 49, 16838, 54, history.getValues(i++, null));
+            assertEntry(89191, 151, 18021, 140, history.getValues(i++, null));
+            assertEntry(89190, 150, 18020, 139, history.getValues(i++, null));
+            assertEntry(3821, 22, 4525, 26, history.getValues(i++, null));
+            assertEntry(3820, 22, 4524, 26, history.getValues(i++, null));
+            assertEntry(91686, 159, 18575, 146, history.getValues(i++, null));
+            assertEntry(91685, 159, 18575, 146, history.getValues(i++, null));
+            assertEntry(8289, 35, 6863, 38, history.getValues(i++, null));
+            assertEntry(8289, 35, 6863, 38, history.getValues(i++, null));
+            assertEntry(113914, 174, 18364, 157, history.getValues(i++, null));
+            assertEntry(113913, 173, 18364, 157, history.getValues(i++, null));
+            assertEntry(11378, 49, 9261, 49, history.getValues(i++, null));
+            assertEntry(11377, 48, 9261, 49, history.getValues(i++, null));
+            assertEntry(201765, 328, 41808, 291, history.getValues(i++, null));
+            assertEntry(201765, 328, 41807, 290, history.getValues(i++, null));
+            assertEntry(106106, 218, 39917, 201, history.getValues(i++, null));
+            assertEntry(106105, 217, 39917, 201, history.getValues(i++, null));
+            assertEquals(history.size(), i);
+
+            // Slice from middle should be untouched
+            history = getHistory(collection, plan, TIME_B - HOUR_IN_MILLIS,
+                    TIME_B + HOUR_IN_MILLIS); i = 0;
+            assertEntry(3821, 22, 4525, 26, history.getValues(i++, null));
+            assertEntry(3820, 22, 4524, 26, history.getValues(i++, null));
+            assertEntry(91686, 159, 18575, 146, history.getValues(i++, null));
+            assertEntry(91685, 159, 18575, 146, history.getValues(i++, null));
+            assertEquals(history.size(), i);
+        }
+
+        // Lower anchor in the middle of plan
+        {
+            int i;
+            NetworkStatsHistory history;
+
+            final SubscriptionPlan plan = SubscriptionPlan.Builder
+                    .createNonrecurring(ZonedDateTime.parse("2012-01-09T09:00:00.00Z"),
+                            ZonedDateTime.parse("2012-01-09T15:00:00.00Z"))
+                    .setDataUsage(200000L, TIME_B).build();
+
+            // Empty collection should be augmented
+            history = getHistory(emptyCollection, plan, TIME_A, TIME_C);
+            assertEquals(200000L, history.getTotalBytes());
+
+            // Normal collection should be augmented
+            history = getHistory(collection, plan, TIME_A, TIME_C); i = 0;
+            assertEntry(100647, 197, 23649, 185, history.getValues(i++, null));
+            assertEntry(100647, 196, 23648, 185, history.getValues(i++, null));
+            assertEntry(18323, 76, 15032, 76, history.getValues(i++, null));
+            assertEntry(18322, 75, 15031, 75, history.getValues(i++, null));
+            assertEntry(527798, 761, 78570, 652, history.getValues(i++, null));
+            assertEntry(527797, 760, 78570, 651, history.getValues(i++, null));
+            // Cycle point; start data normalization
+            assertEntry(7507, 0, 11763, 0, history.getValues(i++, null));
+            assertEntry(7507, 0, 11763, 0, history.getValues(i++, null));
+            assertEntry(62309, 0, 12589, 0, history.getValues(i++, null));
+            assertEntry(62309, 0, 12588, 0, history.getValues(i++, null));
+            assertEntry(2669, 0, 3161, 0, history.getValues(i++, null));
+            assertEntry(2668, 0, 3160, 0, history.getValues(i++, null));
+            // Anchor point; end data normalization
+            assertEntry(91686, 159, 18575, 146, history.getValues(i++, null));
+            assertEntry(91685, 159, 18575, 146, history.getValues(i++, null));
+            assertEntry(8289, 35, 6863, 38, history.getValues(i++, null));
+            assertEntry(8289, 35, 6863, 38, history.getValues(i++, null));
+            assertEntry(113914, 174, 18364, 157, history.getValues(i++, null));
+            assertEntry(113913, 173, 18364, 157, history.getValues(i++, null));
+            // Cycle point
+            assertEntry(11378, 49, 9261, 49, history.getValues(i++, null));
+            assertEntry(11377, 48, 9261, 49, history.getValues(i++, null));
+            assertEntry(201765, 328, 41808, 291, history.getValues(i++, null));
+            assertEntry(201765, 328, 41807, 290, history.getValues(i++, null));
+            assertEntry(106106, 218, 39917, 201, history.getValues(i++, null));
+            assertEntry(106105, 217, 39917, 201, history.getValues(i++, null));
+            assertEquals(history.size(), i);
+
+            // Slice from middle should be augmented
+            history = getHistory(collection, plan, TIME_B - HOUR_IN_MILLIS,
+                    TIME_B + HOUR_IN_MILLIS); i = 0;
+            assertEntry(2669, 0, 3161, 0, history.getValues(i++, null));
+            assertEntry(2668, 0, 3160, 0, history.getValues(i++, null));
+            assertEntry(91686, 159, 18575, 146, history.getValues(i++, null));
+            assertEntry(91685, 159, 18575, 146, history.getValues(i++, null));
+            assertEquals(history.size(), i);
+        }
+
+        // Higher anchor in the middle of plan
+        {
+            int i;
+            NetworkStatsHistory history;
+
+            final SubscriptionPlan plan = SubscriptionPlan.Builder
+                    .createNonrecurring(ZonedDateTime.parse("2012-01-09T09:00:00.00Z"),
+                            ZonedDateTime.parse("2012-01-09T15:00:00.00Z"))
+                    .setDataUsage(400000L, TIME_B + MINUTE_IN_MILLIS).build();
+
+            // Empty collection should be augmented
+            history = getHistory(emptyCollection, plan, TIME_A, TIME_C);
+            assertEquals(400000L, history.getTotalBytes());
+
+            // Normal collection should be augmented
+            history = getHistory(collection, plan, TIME_A, TIME_C); i = 0;
+            assertEntry(100647, 197, 23649, 185, history.getValues(i++, null));
+            assertEntry(100647, 196, 23648, 185, history.getValues(i++, null));
+            assertEntry(18323, 76, 15032, 76, history.getValues(i++, null));
+            assertEntry(18322, 75, 15031, 75, history.getValues(i++, null));
+            assertEntry(527798, 761, 78570, 652, history.getValues(i++, null));
+            assertEntry(527797, 760, 78570, 651, history.getValues(i++, null));
+            // Cycle point; start data normalization
+            assertEntry(15015, 0, 23526, 0, history.getValues(i++, null));
+            assertEntry(15015, 0, 23526, 0, history.getValues(i++, null));
+            assertEntry(124619, 0, 25179, 0, history.getValues(i++, null));
+            assertEntry(124618, 0, 25177, 0, history.getValues(i++, null));
+            assertEntry(5338, 0, 6322, 0, history.getValues(i++, null));
+            assertEntry(5337, 0, 6320, 0, history.getValues(i++, null));
+            // Anchor point; end data normalization
+            assertEntry(91686, 159, 18575, 146, history.getValues(i++, null));
+            assertEntry(91685, 159, 18575, 146, history.getValues(i++, null));
+            assertEntry(8289, 35, 6863, 38, history.getValues(i++, null));
+            assertEntry(8289, 35, 6863, 38, history.getValues(i++, null));
+            assertEntry(113914, 174, 18364, 157, history.getValues(i++, null));
+            assertEntry(113913, 173, 18364, 157, history.getValues(i++, null));
+            // Cycle point
+            assertEntry(11378, 49, 9261, 49, history.getValues(i++, null));
+            assertEntry(11377, 48, 9261, 49, history.getValues(i++, null));
+            assertEntry(201765, 328, 41808, 291, history.getValues(i++, null));
+            assertEntry(201765, 328, 41807, 290, history.getValues(i++, null));
+            assertEntry(106106, 218, 39917, 201, history.getValues(i++, null));
+            assertEntry(106105, 217, 39917, 201, history.getValues(i++, null));
+
+            // Slice from middle should be augmented
+            history = getHistory(collection, plan, TIME_B - HOUR_IN_MILLIS,
+                    TIME_B + HOUR_IN_MILLIS); i = 0;
+            assertEntry(5338, 0, 6322, 0, history.getValues(i++, null));
+            assertEntry(5337, 0, 6320, 0, history.getValues(i++, null));
+            assertEntry(91686, 159, 18575, 146, history.getValues(i++, null));
+            assertEntry(91685, 159, 18575, 146, history.getValues(i++, null));
+            assertEquals(history.size(), i);
+        }
+    }
+
+    public void testAugmentPlanGigantic() throws Exception {
+        // We're in the future, but not that far off
+        setClock(Instant.parse("2012-06-01T00:00:00.00Z"));
+
+        // Create a simple history with a ton of measured usage
+        final NetworkStatsCollection large = new NetworkStatsCollection(HOUR_IN_MILLIS);
+        final NetworkIdentitySet ident = new NetworkIdentitySet();
+        ident.add(new NetworkIdentity(ConnectivityManager.TYPE_MOBILE, -1, TEST_IMSI, null,
+                false, true));
+        large.recordData(ident, UID_ALL, SET_ALL, TAG_NONE, TIME_A, TIME_B,
+                new NetworkStats.Entry(12_730_893_164L, 1, 0, 0, 0));
+
+        // Verify untouched total
+        assertEquals(12_730_893_164L, getHistory(large, null, TIME_A, TIME_C).getTotalBytes());
+
+        // Verify anchor that might cause overflows
+        final SubscriptionPlan plan = SubscriptionPlan.Builder
+                .createRecurringMonthly(ZonedDateTime.parse("2012-01-09T00:00:00.00Z"))
+                .setDataUsage(4_939_212_390L, TIME_B).build();
+        assertEquals(4_939_212_386L, getHistory(large, plan, TIME_A, TIME_C).getTotalBytes());
+    }
+
+    public void testRounding() throws Exception {
+        final NetworkStatsCollection coll = new NetworkStatsCollection(HOUR_IN_MILLIS);
+
+        // Special values should remain unchanged
+        for (long time : new long[] {
+                Long.MIN_VALUE, Long.MAX_VALUE, SubscriptionPlan.TIME_UNKNOWN
+        }) {
+            assertEquals(time, coll.roundUp(time));
+            assertEquals(time, coll.roundDown(time));
+        }
+
+        assertEquals(TIME_A, coll.roundUp(TIME_A));
+        assertEquals(TIME_A, coll.roundDown(TIME_A));
+
+        assertEquals(TIME_A + HOUR_IN_MILLIS, coll.roundUp(TIME_A + 1));
+        assertEquals(TIME_A, coll.roundDown(TIME_A + 1));
+
+        assertEquals(TIME_A, coll.roundUp(TIME_A - 1));
+        assertEquals(TIME_A - HOUR_IN_MILLIS, coll.roundDown(TIME_A - 1));
+    }
+
+    public void testMultiplySafe() {
+        assertEquals(25, multiplySafe(50, 1, 2));
+        assertEquals(100, multiplySafe(50, 2, 1));
+
+        assertEquals(-10, multiplySafe(30, -1, 3));
+        assertEquals(0, multiplySafe(30, 0, 3));
+        assertEquals(10, multiplySafe(30, 1, 3));
+        assertEquals(20, multiplySafe(30, 2, 3));
+        assertEquals(30, multiplySafe(30, 3, 3));
+        assertEquals(40, multiplySafe(30, 4, 3));
+
+        assertEquals(100_000_000_000L,
+                multiplySafe(300_000_000_000L, 10_000_000_000L, 30_000_000_000L));
+        assertEquals(100_000_000_010L,
+                multiplySafe(300_000_000_000L, 10_000_000_001L, 30_000_000_000L));
+        assertEquals(823_202_048L,
+                multiplySafe(4_939_212_288L, 2_121_815_528L, 12_730_893_165L));
+    }
+
     /**
      * Copy a {@link Resources#openRawResource(int)} into {@link File} for
      * testing purposes.
@@ -235,28 +519,50 @@
         }
     }
 
+    private static NetworkStatsHistory getHistory(NetworkStatsCollection collection,
+            SubscriptionPlan augmentPlan, long start, long end) {
+        return collection.getHistory(buildTemplateMobileAll(TEST_IMSI), augmentPlan, UID_ALL,
+                SET_ALL, TAG_NONE, FIELD_ALL, start, end, NetworkStatsAccess.Level.DEVICE, myUid());
+    }
+
     private static void assertSummaryTotal(NetworkStatsCollection collection,
             NetworkTemplate template, long rxBytes, long rxPackets, long txBytes, long txPackets,
             @NetworkStatsAccess.Level int accessLevel) {
-        final NetworkStats.Entry entry = collection.getSummary(
-                template, Long.MIN_VALUE, Long.MAX_VALUE, accessLevel)
+        final NetworkStats.Entry actual = collection.getSummary(
+                template, Long.MIN_VALUE, Long.MAX_VALUE, accessLevel, myUid())
                 .getTotal(null);
-        assertEntry(entry, rxBytes, rxPackets, txBytes, txPackets);
+        assertEntry(rxBytes, rxPackets, txBytes, txPackets, actual);
     }
 
     private static void assertSummaryTotalIncludingTags(NetworkStatsCollection collection,
             NetworkTemplate template, long rxBytes, long rxPackets, long txBytes, long txPackets) {
-        final NetworkStats.Entry entry = collection.getSummary(
-                template, Long.MIN_VALUE, Long.MAX_VALUE, NetworkStatsAccess.Level.DEVICE)
+        final NetworkStats.Entry actual = collection.getSummary(
+                template, Long.MIN_VALUE, Long.MAX_VALUE, NetworkStatsAccess.Level.DEVICE, myUid())
                 .getTotalIncludingTags(null);
-        assertEntry(entry, rxBytes, rxPackets, txBytes, txPackets);
+        assertEntry(rxBytes, rxPackets, txBytes, txPackets, actual);
     }
 
-    private static void assertEntry(
-            NetworkStats.Entry entry, long rxBytes, long rxPackets, long txBytes, long txPackets) {
-        assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes);
-        assertEquals("unexpected rxPackets", rxPackets, entry.rxPackets);
-        assertEquals("unexpected txBytes", txBytes, entry.txBytes);
-        assertEquals("unexpected txPackets", txPackets, entry.txPackets);
+    private static void assertEntry(long rxBytes, long rxPackets, long txBytes, long txPackets,
+            NetworkStats.Entry actual) {
+        assertEntry(new NetworkStats.Entry(rxBytes, rxPackets, txBytes, txPackets, 0L), actual);
+    }
+
+    private static void assertEntry(long rxBytes, long rxPackets, long txBytes, long txPackets,
+            NetworkStatsHistory.Entry actual) {
+        assertEntry(new NetworkStats.Entry(rxBytes, rxPackets, txBytes, txPackets, 0L), actual);
+    }
+
+    private static void assertEntry(NetworkStats.Entry expected,
+            NetworkStatsHistory.Entry actual) {
+        assertEntry(expected, new NetworkStats.Entry(actual.rxBytes, actual.rxPackets,
+                actual.txBytes, actual.txPackets, 0L));
+    }
+
+    private static void assertEntry(NetworkStats.Entry expected,
+            NetworkStats.Entry actual) {
+        assertEquals("unexpected rxBytes", expected.rxBytes, actual.rxBytes);
+        assertEquals("unexpected rxPackets", expected.rxPackets, actual.rxPackets);
+        assertEquals("unexpected txBytes", expected.txBytes, actual.txBytes);
+        assertEquals("unexpected txPackets", expected.txPackets, actual.txPackets);
     }
 }
diff --git a/tests/net/java/com/android/server/net/NetworkStatsObserversTest.java b/tests/net/java/com/android/server/net/NetworkStatsObserversTest.java
index 92dcdac..2be5dae 100644
--- a/tests/net/java/com/android/server/net/NetworkStatsObserversTest.java
+++ b/tests/net/java/com/android/server/net/NetworkStatsObserversTest.java
@@ -27,6 +27,8 @@
 import static android.net.TrafficStats.MB_IN_BYTES;
 import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
 
+import static com.android.internal.util.TestUtils.waitForIdleHandler;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -56,7 +58,6 @@
 
 import com.android.internal.net.VpnInfo;
 import com.android.server.net.NetworkStatsService;
-import com.android.server.net.NetworkStatsServiceTest.IdleableHandlerThread;
 import com.android.server.net.NetworkStatsServiceTest.LatchedHandler;
 
 import java.util.ArrayList;
@@ -102,7 +103,7 @@
 
     private long mElapsedRealtime;
 
-    private IdleableHandlerThread mObserverHandlerThread;
+    private HandlerThread mObserverHandlerThread;
     private Handler mObserverNoopHandler;
 
     private LatchedHandler mHandler;
@@ -118,7 +119,7 @@
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
 
-        mObserverHandlerThread = new IdleableHandlerThread("HandlerThread");
+        mObserverHandlerThread = new HandlerThread("HandlerThread");
         mObserverHandlerThread.start();
         final Looper observerLooper = mObserverHandlerThread.getLooper();
         mStatsObservers = new NetworkStatsObservers() {
@@ -319,7 +320,7 @@
                 xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces,
                 VPN_INFO, TEST_START);
         waitForObserverToIdle();
-        assertEquals(NetworkStatsManager.CALLBACK_LIMIT_REACHED, mHandler.mLastMessageType);
+        assertEquals(NetworkStatsManager.CALLBACK_LIMIT_REACHED, mHandler.lastMessageType);
     }
 
     @Test
@@ -356,7 +357,7 @@
                 xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces,
                 VPN_INFO, TEST_START);
         waitForObserverToIdle();
-        assertEquals(NetworkStatsManager.CALLBACK_LIMIT_REACHED, mHandler.mLastMessageType);
+        assertEquals(NetworkStatsManager.CALLBACK_LIMIT_REACHED, mHandler.lastMessageType);
     }
 
     @Test
@@ -429,7 +430,7 @@
                 xtSnapshot, uidSnapshot, mActiveIfaces, mActiveUidIfaces,
                 VPN_INFO, TEST_START);
         waitForObserverToIdle();
-        assertEquals(NetworkStatsManager.CALLBACK_LIMIT_REACHED, mHandler.mLastMessageType);
+        assertEquals(NetworkStatsManager.CALLBACK_LIMIT_REACHED, mHandler.lastMessageType);
     }
 
     @Test
@@ -470,19 +471,7 @@
     }
 
     private void waitForObserverToIdle() {
-        waitForIdleLooper(mObserverHandlerThread.getLooper(), WAIT_TIMEOUT_MS);
-        waitForIdleLooper(mHandler.getLooper(), WAIT_TIMEOUT_MS);
+        waitForIdleHandler(mObserverHandlerThread, WAIT_TIMEOUT_MS);
+        waitForIdleHandler(mHandler, WAIT_TIMEOUT_MS);
     }
-
-    // TODO: unify with ConnectivityService.waitForIdleHandler and
-    // NetworkServiceStatsTest.IdleableHandlerThread
-    private static void waitForIdleLooper(Looper looper, long timeoutMs) {
-        final ConditionVariable cv = new ConditionVariable();
-        final Handler handler = new Handler(looper);
-        handler.post(() -> cv.open());
-        if (!cv.block(timeoutMs)) {
-            fail("Looper did not become idle after " + timeoutMs + " ms");
-        }
-    }
-
 }
diff --git a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java
index 029693f..814a626 100644
--- a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java
+++ b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java
@@ -31,6 +31,8 @@
 import static android.net.NetworkStats.SET_ALL;
 import static android.net.NetworkStats.SET_DEFAULT;
 import static android.net.NetworkStats.SET_FOREGROUND;
+import static android.net.NetworkStats.STATS_PER_IFACE;
+import static android.net.NetworkStats.STATS_PER_UID;
 import static android.net.NetworkStats.TAG_NONE;
 import static android.net.NetworkStats.UID_ALL;
 import static android.net.NetworkStatsHistory.FIELD_ALL;
@@ -44,18 +46,17 @@
 import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
 import static android.text.format.DateUtils.WEEK_IN_MILLIS;
 
+import static com.android.internal.util.TestUtils.waitForIdleHandler;
 import static com.android.server.net.NetworkStatsService.ACTION_NETWORK_STATS_POLL;
 
 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 static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Mockito.when;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.app.AlarmManager;
 import android.app.usage.NetworkStatsManager;
@@ -76,24 +77,21 @@
 import android.os.ConditionVariable;
 import android.os.Handler;
 import android.os.HandlerThread;
-import android.os.INetworkManagementService;
 import android.os.IBinder;
+import android.os.INetworkManagementService;
 import android.os.Looper;
-import android.os.Messenger;
-import android.os.MessageQueue;
-import android.os.MessageQueue.IdleHandler;
 import android.os.Message;
+import android.os.Messenger;
 import android.os.PowerManager;
 import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
 import android.telephony.TelephonyManager;
-import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Log;
 import android.util.TrustedTime;
 
 import com.android.internal.net.VpnInfo;
 import com.android.internal.util.test.BroadcastInterceptingContext;
-import com.android.server.net.NetworkStatsService;
 import com.android.server.net.NetworkStatsService.NetworkStatsSettings;
 import com.android.server.net.NetworkStatsService.NetworkStatsSettings.Config;
 
@@ -109,9 +107,7 @@
 import org.mockito.MockitoAnnotations;
 
 import java.io.File;
-import java.util.ArrayList;
 import java.util.Objects;
-import java.util.List;
 
 /**
  * Tests for {@link NetworkStatsService}.
@@ -154,7 +150,7 @@
     private @Mock IConnectivityManager mConnManager;
     private @Mock IBinder mBinder;
     private @Mock AlarmManager mAlarmManager;
-    private IdleableHandlerThread mHandlerThread;
+    private HandlerThread mHandlerThread;
     private Handler mHandler;
 
     private NetworkStatsService mService;
@@ -181,7 +177,7 @@
                 mServiceContext, mNetManager, mAlarmManager, wakeLock, mTime,
                 TelephonyManager.getDefault(), mSettings, new NetworkStatsObservers(),
                 mStatsDir, getBaseDir(mStatsDir));
-        mHandlerThread = new IdleableHandlerThread("HandlerThread");
+        mHandlerThread = new HandlerThread("HandlerThread");
         mHandlerThread.start();
         Handler.Callback callback = new NetworkStatsService.HandlerCallback(mService);
         mHandler = new Handler(mHandlerThread.getLooper(), callback);
@@ -822,17 +818,24 @@
         incrementCurrentTime(HOUR_IN_MILLIS);
         expectCurrentTime();
         expectDefaultSettings();
-        expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
-                .addIfaceValues(TEST_IFACE, 2048L, 16L, 512L, 4L));
 
+        // Traffic seen by kernel counters (includes software tethering).
+        final NetworkStats ifaceStats = new NetworkStats(getElapsedRealtime(), 1)
+                .addIfaceValues(TEST_IFACE, 1536L, 12L, 384L, 3L);
+        // Hardware tethering traffic, not seen by kernel counters.
+        final NetworkStats tetherStatsHardware = new NetworkStats(getElapsedRealtime(), 1)
+                .addIfaceValues(TEST_IFACE, 512L, 4L, 128L, 1L);
+
+        // Traffic for UID_RED.
         final NetworkStats uidStats = new NetworkStats(getElapsedRealtime(), 1)
                 .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 128L, 2L, 128L, 2L, 0L);
-        final String[] tetherIfacePairs = new String[] { TEST_IFACE, "wlan0" };
+        // All tethering traffic, both hardware and software.
         final NetworkStats tetherStats = new NetworkStats(getElapsedRealtime(), 1)
                 .addValues(TEST_IFACE, UID_TETHERING, SET_DEFAULT, TAG_NONE, 1920L, 14L, 384L, 2L,
                         0L);
 
-        expectNetworkStatsUidDetail(uidStats, tetherIfacePairs, tetherStats);
+        expectNetworkStatsSummary(ifaceStats, tetherStatsHardware);
+        expectNetworkStatsUidDetail(uidStats, tetherStats);
         forcePollAndWaitForIdle();
 
         // verify service recorded history
@@ -886,7 +889,7 @@
 
         // Send dummy message to make sure that any previous message has been handled
         mHandler.sendMessage(mHandler.obtainMessage(-1));
-        mHandlerThread.waitForIdle(WAIT_TIMEOUT);
+        waitForIdleHandler(mHandler, WAIT_TIMEOUT);
 
 
 
@@ -908,7 +911,7 @@
         assertNetworkTotal(sTemplateWifi, 1024L, 1L, 2048L, 2L, 0);
 
         // make sure callback has not being called
-        assertEquals(INVALID_TYPE, latchedHandler.mLastMessageType);
+        assertEquals(INVALID_TYPE, latchedHandler.lastMessageType);
 
         // and bump forward again, with counters going higher. this is
         // important, since it will trigger the data usage callback
@@ -926,7 +929,7 @@
 
         // Wait for the caller to ack receipt of CALLBACK_LIMIT_REACHED
         assertTrue(cv.block(WAIT_TIMEOUT));
-        assertEquals(NetworkStatsManager.CALLBACK_LIMIT_REACHED, latchedHandler.mLastMessageType);
+        assertEquals(NetworkStatsManager.CALLBACK_LIMIT_REACHED, latchedHandler.lastMessageType);
         cv.close();
 
         // Allow binder to disconnect
@@ -937,7 +940,7 @@
 
         // Wait for the caller to ack receipt of CALLBACK_RELEASED
         assertTrue(cv.block(WAIT_TIMEOUT));
-        assertEquals(NetworkStatsManager.CALLBACK_RELEASED, latchedHandler.mLastMessageType);
+        assertEquals(NetworkStatsManager.CALLBACK_RELEASED, latchedHandler.lastMessageType);
 
         // Make sure that the caller binder gets disconnected
         verify(mBinder).unlinkToDeath(any(IBinder.DeathRecipient.class), anyInt());
@@ -973,7 +976,7 @@
 
         // verify summary API
         final NetworkStats stats = mSession.getSummaryForNetwork(template, start, end);
-        assertValues(stats, IFACE_ALL, UID_ALL, SET_DEFAULT, TAG_NONE, METERED_ALL, ROAMING_NO,
+        assertValues(stats, IFACE_ALL, UID_ALL, SET_ALL, TAG_NONE, METERED_ALL, ROAMING_ALL,
                 rxBytes, rxPackets, txBytes, txPackets, operations);
     }
 
@@ -1012,10 +1015,16 @@
     }
 
     private void expectNetworkStatsSummary(NetworkStats summary) throws Exception {
+        expectNetworkStatsSummary(summary, new NetworkStats(0L, 0));
+    }
+
+    private void expectNetworkStatsSummary(NetworkStats summary, NetworkStats tetherStats)
+            throws Exception {
         when(mConnManager.getAllVpnInfo()).thenReturn(new VpnInfo[0]);
 
-        expectNetworkStatsSummaryDev(summary);
-        expectNetworkStatsSummaryXt(summary);
+        expectNetworkStatsTethering(STATS_PER_IFACE, tetherStats);
+        expectNetworkStatsSummaryDev(summary.clone());
+        expectNetworkStatsSummaryXt(summary.clone());
     }
 
     private void expectNetworkStatsSummaryDev(NetworkStats summary) throws Exception {
@@ -1026,17 +1035,21 @@
         when(mNetManager.getNetworkStatsSummaryXt()).thenReturn(summary);
     }
 
-    private void expectNetworkStatsUidDetail(NetworkStats detail) throws Exception {
-        expectNetworkStatsUidDetail(detail, new String[0], new NetworkStats(0L, 0));
+    private void expectNetworkStatsTethering(int how, NetworkStats stats)
+            throws Exception {
+        when(mNetManager.getNetworkStatsTethering(how)).thenReturn(stats);
     }
 
-    private void expectNetworkStatsUidDetail(
-            NetworkStats detail, String[] tetherIfacePairs, NetworkStats tetherStats)
+    private void expectNetworkStatsUidDetail(NetworkStats detail) throws Exception {
+        expectNetworkStatsUidDetail(detail, new NetworkStats(0L, 0));
+    }
+
+    private void expectNetworkStatsUidDetail(NetworkStats detail, NetworkStats tetherStats)
             throws Exception {
         when(mNetManager.getNetworkStatsUidDetail(UID_ALL)).thenReturn(detail);
 
         // also include tethering details, since they are folded into UID
-        when(mNetManager.getNetworkStatsTethering()).thenReturn(tetherStats);
+        when(mNetManager.getNetworkStatsTethering(STATS_PER_UID)).thenReturn(tetherStats);
     }
 
     private void expectDefaultSettings() throws Exception {
@@ -1087,28 +1100,25 @@
             int tag, int metered, int roaming, long rxBytes, long rxPackets, long txBytes,
             long txPackets, int operations) {
         final NetworkStats.Entry entry = new NetworkStats.Entry();
-        List<Integer> sets = new ArrayList<>();
-        if (set == SET_DEFAULT || set == SET_ALL) {
-            sets.add(SET_DEFAULT);
-        }
-        if (set == SET_FOREGROUND || set == SET_ALL) {
-            sets.add(SET_FOREGROUND);
+        final int[] sets;
+        if (set == SET_ALL) {
+            sets = new int[] { SET_ALL, SET_DEFAULT, SET_FOREGROUND };
+        } else {
+            sets = new int[] { set };
         }
 
-        List<Integer> roamings = new ArrayList<>();
-        if (roaming == ROAMING_NO || roaming == ROAMING_ALL) {
-            roamings.add(ROAMING_NO);
-        }
-        if (roaming == ROAMING_YES || roaming == ROAMING_ALL) {
-            roamings.add(ROAMING_YES);
+        final int[] roamings;
+        if (roaming == ROAMING_ALL) {
+            roamings = new int[] { ROAMING_ALL, ROAMING_YES, ROAMING_NO };
+        } else {
+            roamings = new int[] { roaming };
         }
 
-        List<Integer> meterings = new ArrayList<>();
-        if (metered == METERED_NO || metered == METERED_ALL) {
-            meterings.add(METERED_NO);
-        }
-        if (metered == METERED_YES || metered == METERED_ALL) {
-            meterings.add(METERED_YES);
+        final int[] meterings;
+        if (metered == METERED_ALL) {
+            meterings = new int[] { METERED_ALL, METERED_YES, METERED_NO };
+        } else {
+            meterings = new int[] { metered };
         }
 
         for (int s : sets) {
@@ -1203,12 +1213,12 @@
         mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
         // Send dummy message to make sure that any previous message has been handled
         mHandler.sendMessage(mHandler.obtainMessage(-1));
-        mHandlerThread.waitForIdle(WAIT_TIMEOUT);
+        waitForIdleHandler(mHandler, WAIT_TIMEOUT);
     }
 
     static class LatchedHandler extends Handler {
         private final ConditionVariable mCv;
-        int mLastMessageType = INVALID_TYPE;
+        int lastMessageType = INVALID_TYPE;
 
         LatchedHandler(Looper looper, ConditionVariable cv) {
             super(looper);
@@ -1217,49 +1227,9 @@
 
         @Override
         public void handleMessage(Message msg) {
-            mLastMessageType = msg.what;
+            lastMessageType = msg.what;
             mCv.open();
             super.handleMessage(msg);
         }
     }
-
-    /**
-     * A subclass of HandlerThread that allows callers to wait for it to become idle. waitForIdle
-     * will return immediately if the handler is already idle.
-     */
-    static class IdleableHandlerThread extends HandlerThread {
-        private IdleHandler mIdleHandler;
-
-        public IdleableHandlerThread(String name) {
-            super(name);
-        }
-
-        public void waitForIdle(long timeoutMs) {
-            final ConditionVariable cv = new ConditionVariable();
-            final MessageQueue queue = getLooper().getQueue();
-
-            synchronized (queue) {
-                if (queue.isIdle()) {
-                    return;
-                }
-
-                assertNull("BUG: only one idle handler allowed", mIdleHandler);
-                mIdleHandler = new IdleHandler() {
-                    public boolean queueIdle() {
-                        cv.open();
-                        mIdleHandler = null;
-                        return false;  // Remove the handler.
-                    }
-                };
-                queue.addIdleHandler(mIdleHandler);
-            }
-
-            if (!cv.block(timeoutMs)) {
-                fail("HandlerThread " + getName() + " did not become idle after " + timeoutMs
-                        + " ms");
-                queue.removeIdleHandler(mIdleHandler);
-            }
-        }
-    }
-
 }
diff --git a/tests/net/jni/apf_jni.cpp b/tests/net/jni/apf_jni.cpp
index dc108c1..d415d22 100644
--- a/tests/net/jni/apf_jni.cpp
+++ b/tests/net/jni/apf_jni.cpp
@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
-#include <JNIHelp.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedUtfChars.h>
 #include <jni.h>
 #include <pcap.h>
 #include <stdlib.h>
diff --git a/tests/radio/Android.mk b/tests/radio/Android.mk
deleted file mode 100644
index dc55d0b..0000000
--- a/tests/radio/Android.mk
+++ /dev/null
@@ -1,33 +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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_PACKAGE_NAME := RadioTests
-
-LOCAL_MODULE_TAGS := tests
-# TODO(b/13282254): uncomment when b/13282254 is fixed
-# LOCAL_SDK_VERSION := current
-
-LOCAL_STATIC_JAVA_LIBRARIES := compatibility-device-util android-support-test testng
-
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_DEX_PREOPT := false
-LOCAL_PROGUARD_ENABLED := disabled
-
-include $(BUILD_PACKAGE)
diff --git a/tests/radio/AndroidManifest.xml b/tests/radio/AndroidManifest.xml
deleted file mode 100644
index 150edbf..0000000
--- a/tests/radio/AndroidManifest.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="android.hardware.radio.tests">
-
-    <application>
-        <uses-library android:name="android.test.runner" />
-    </application>
-
-    <instrumentation
-        android:name="android.support.test.runner.AndroidJUnitRunner"
-        android:targetPackage="android.hardware.radio.tests"
-        android:label="Tests for broadcast radio API" >
-    </instrumentation>
-</manifest>
diff --git a/tests/radio/src/android/hardware/radio/tests/RadioTest.java b/tests/radio/src/android/hardware/radio/tests/RadioTest.java
deleted file mode 100644
index 47e104c..0000000
--- a/tests/radio/src/android/hardware/radio/tests/RadioTest.java
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.hardware.radio.tests;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.hardware.radio.RadioManager;
-import android.hardware.radio.RadioTuner;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
-import android.util.Log;
-
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.List;
-
-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 static org.junit.Assert.*;
-import static org.junit.Assume.*;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Mockito.after;
-import static org.mockito.Mockito.atMost;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.timeout;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.testng.Assert.assertThrows;
-
-/**
- * A test for broadcast radio API.
- */
-@RunWith(AndroidJUnit4.class)
-public class RadioTest {
-    private static final String TAG = "RadioTest";
-
-    public final Context mContext = InstrumentationRegistry.getContext();
-
-    private final int kConfigCallbackTimeoutMs = 10000;
-    private final int kCancelTimeoutMs = 1000;
-    private final int kTuneCallbackTimeoutMs = 30000;
-
-    private RadioManager mRadioManager;
-    private RadioTuner mRadioTuner;
-    private RadioManager.ModuleProperties mModule;
-    private final List<RadioManager.ModuleProperties> mModules = new ArrayList<>();
-    @Mock private RadioTuner.Callback mCallback;
-
-    RadioManager.AmBandDescriptor mAmBandDescriptor;
-    RadioManager.FmBandDescriptor mFmBandDescriptor;
-
-    RadioManager.BandConfig mAmBandConfig;
-    RadioManager.BandConfig mFmBandConfig;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-
-        // check if radio is supported and skip the test if it's not
-        PackageManager packageManager = mContext.getPackageManager();
-        boolean isRadioSupported = packageManager.hasSystemFeature(PackageManager.FEATURE_RADIO);
-        assumeTrue(isRadioSupported);
-
-        mRadioManager = (RadioManager)mContext.getSystemService(Context.RADIO_SERVICE);
-        assertNotNull(mRadioManager);
-
-        int status = mRadioManager.listModules(mModules);
-        assertEquals(RadioManager.STATUS_OK, status);
-        assertFalse(mModules.isEmpty());
-    }
-
-    @After
-    public void tearDown() {
-        mRadioManager = null;
-        mModules.clear();
-        if (mRadioTuner != null) {
-            mRadioTuner.close();
-            mRadioTuner = null;
-        }
-        verifyNoMoreInteractions(mCallback);
-    }
-
-    private void openTuner() {
-        openTuner(true);
-    }
-
-    private void resetCallback() {
-        verifyNoMoreInteractions(mCallback);
-        Mockito.reset(mCallback);
-    }
-
-    private void openTuner(boolean withAudio) {
-        assertNull(mRadioTuner);
-
-        // find FM band and build its config
-        mModule = mModules.get(0);
-        for (RadioManager.BandDescriptor band : mModule.getBands()) {
-            if (band.getType() == RadioManager.BAND_AM) {
-                mAmBandDescriptor = (RadioManager.AmBandDescriptor)band;
-            }
-            if (band.getType() == RadioManager.BAND_FM) {
-                mFmBandDescriptor = (RadioManager.FmBandDescriptor)band;
-            }
-        }
-        assertNotNull(mAmBandDescriptor);
-        assertNotNull(mFmBandDescriptor);
-        mAmBandConfig = new RadioManager.AmBandConfig.Builder(mAmBandDescriptor).build();
-        mFmBandConfig = new RadioManager.FmBandConfig.Builder(mFmBandDescriptor).build();
-
-        mRadioTuner = mRadioManager.openTuner(mModule.getId(),
-                mFmBandConfig, withAudio, mCallback, null);
-        assertNotNull(mRadioTuner);
-        verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any());
-        resetCallback();
-    }
-
-    private void checkAntenna() {
-        boolean isConnected = mRadioTuner.isAntennaConnected();
-        assertTrue(isConnected);
-    }
-
-    @Test
-    public void testOpenTuner() {
-        openTuner();
-    }
-
-    @Test
-    public void testReopenTuner() throws Throwable {
-        openTuner();
-        mRadioTuner.close();
-        mRadioTuner = null;
-        Thread.sleep(100);  // TODO(b/36122635): force reopen
-        openTuner();
-    }
-
-    @Test
-    public void testDoubleClose() {
-        openTuner();
-        mRadioTuner.close();
-        mRadioTuner.close();
-    }
-
-    @Test
-    public void testUseAfterClose() {
-        openTuner();
-        mRadioTuner.close();
-        int ret = mRadioTuner.cancel();
-        assertEquals(RadioManager.STATUS_INVALID_OPERATION, ret);
-    }
-
-    @Test
-    public void testSetAndGetConfiguration() {
-        openTuner();
-
-        // set
-        int ret = mRadioTuner.setConfiguration(mAmBandConfig);
-        assertEquals(RadioManager.STATUS_OK, ret);
-        verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any());
-
-        // get
-        RadioManager.BandConfig[] config = new RadioManager.BandConfig[1];
-        ret = mRadioTuner.getConfiguration(config);
-        assertEquals(RadioManager.STATUS_OK, ret);
-
-        assertEquals(mAmBandConfig, config[0]);
-    }
-
-    @Test
-    public void testSetBadConfiguration() throws Throwable {
-        openTuner();
-
-        // set bad config
-        Constructor<RadioManager.AmBandConfig> configConstr =
-                RadioManager.AmBandConfig.class.getDeclaredConstructor(
-                        int.class, int.class, int.class, int.class, int.class, boolean.class);
-        configConstr.setAccessible(true);
-        RadioManager.AmBandConfig badConfig = configConstr.newInstance(
-                0 /*region*/, RadioManager.BAND_AM /*type*/,
-                10000 /*lowerLimit*/, 1 /*upperLimit*/, 100 /*spacing*/, false /*stereo*/);
-        int ret = mRadioTuner.setConfiguration(badConfig);
-        assertEquals(RadioManager.STATUS_BAD_VALUE, ret);
-        verify(mCallback, never()).onConfigurationChanged(any());
-
-        // set null config
-        ret = mRadioTuner.setConfiguration(null);
-        assertEquals(RadioManager.STATUS_BAD_VALUE, ret);
-        verify(mCallback, never()).onConfigurationChanged(any());
-
-        // setting good config should recover
-        ret = mRadioTuner.setConfiguration(mAmBandConfig);
-        assertEquals(RadioManager.STATUS_OK, ret);
-        verify(mCallback, timeout(kConfigCallbackTimeoutMs)).onConfigurationChanged(any());
-    }
-
-    @Test
-    public void testMute() {
-        openTuner();
-
-        boolean isMuted = mRadioTuner.getMute();
-        assertFalse(isMuted);
-
-        int ret = mRadioTuner.setMute(true);
-        assertEquals(RadioManager.STATUS_OK, ret);
-        isMuted = mRadioTuner.getMute();
-        assertTrue(isMuted);
-
-        ret = mRadioTuner.setMute(false);
-        assertEquals(RadioManager.STATUS_OK, ret);
-        isMuted = mRadioTuner.getMute();
-        assertFalse(isMuted);
-    }
-
-    @Test
-    public void testMuteNoAudio() {
-        openTuner(false);
-
-        int ret = mRadioTuner.setMute(false);
-        assertEquals(RadioManager.STATUS_ERROR, ret);
-
-        boolean isMuted = mRadioTuner.getMute();
-        assertTrue(isMuted);
-    }
-
-    @Test
-    public void testStep() {
-        openTuner();
-        checkAntenna();
-
-        int ret = mRadioTuner.step(RadioTuner.DIRECTION_DOWN, true);
-        assertEquals(RadioManager.STATUS_OK, ret);
-        verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any());
-
-        resetCallback();
-
-        ret = mRadioTuner.step(RadioTuner.DIRECTION_UP, false);
-        assertEquals(RadioManager.STATUS_OK, ret);
-        verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any());
-    }
-
-    @Test
-    public void testTuneAndGetPI() {
-        openTuner();
-        checkAntenna();
-
-        int channel = mFmBandConfig.getLowerLimit() + mFmBandConfig.getSpacing();
-
-        // test tune
-        int ret = mRadioTuner.tune(channel, 0);
-        assertEquals(RadioManager.STATUS_OK, ret);
-        ArgumentCaptor<RadioManager.ProgramInfo> infoc =
-                ArgumentCaptor.forClass(RadioManager.ProgramInfo.class);
-        verify(mCallback, timeout(kTuneCallbackTimeoutMs))
-                .onProgramInfoChanged(infoc.capture());
-        assertEquals(channel, infoc.getValue().getChannel());
-
-        // test getProgramInformation
-        RadioManager.ProgramInfo[] info = new RadioManager.ProgramInfo[1];
-        ret = mRadioTuner.getProgramInformation(info);
-        assertEquals(RadioManager.STATUS_OK, ret);
-        assertNotNull(info[0]);
-        assertEquals(channel, info[0].getChannel());
-    }
-
-    @Test
-    public void testDummyCancel() {
-        openTuner();
-
-        int ret = mRadioTuner.cancel();
-        assertEquals(RadioManager.STATUS_OK, ret);
-    }
-
-    @Test
-    public void testLateCancel() {
-        openTuner();
-        checkAntenna();
-
-        int ret = mRadioTuner.step(RadioTuner.DIRECTION_DOWN, false);
-        assertEquals(RadioManager.STATUS_OK, ret);
-        verify(mCallback, timeout(kTuneCallbackTimeoutMs)).onProgramInfoChanged(any());
-
-        int cancelRet = mRadioTuner.cancel();
-        assertEquals(RadioManager.STATUS_OK, cancelRet);
-    }
-
-    @Test
-    public void testScanAndCancel() {
-        openTuner();
-        checkAntenna();
-
-        /* There is a possible race condition between scan and cancel commands - the scan may finish
-         * before cancel command is issued. Thus we accept both outcomes in this test.
-         */
-        int scanRet = mRadioTuner.scan(RadioTuner.DIRECTION_DOWN, true);
-        int cancelRet = mRadioTuner.cancel();
-
-        assertEquals(RadioManager.STATUS_OK, scanRet);
-        assertEquals(RadioManager.STATUS_OK, cancelRet);
-
-        verify(mCallback, after(kCancelTimeoutMs).atMost(1)).onError(RadioTuner.ERROR_CANCELLED);
-        verify(mCallback, atMost(1)).onProgramInfoChanged(any());
-    }
-
-    @Test
-    public void testStartBackgroundScan() {
-        openTuner();
-        checkAntenna();
-
-        boolean ret = mRadioTuner.startBackgroundScan();
-        boolean isSupported = mModule.isBackgroundScanningSupported();
-        assertEquals(isSupported, ret);
-    }
-
-    @Test
-    public void testGetProgramList() {
-        openTuner();
-        checkAntenna();
-
-        try {
-            List<RadioManager.ProgramInfo> list = mRadioTuner.getProgramList(null);
-            assertNotNull(list);
-        } catch (IllegalStateException e) {
-            // the list may or may not be ready at this point
-            Log.i(TAG, "Background list is not ready");
-        }
-    }
-
-    @Test
-    public void testForcedAnalog() {
-        openTuner();
-
-        boolean isSupported = true;
-        boolean isForced;
-        try {
-            isForced = mRadioTuner.isAnalogForced();
-            assertFalse(isForced);
-        } catch (IllegalStateException ex) {
-            Log.i(TAG, "Forced analog switch is not supported by this tuner");
-            isSupported = false;
-        }
-
-        if (isSupported) {
-            mRadioTuner.setAnalogForced(true);
-            isForced = mRadioTuner.isAnalogForced();
-            assertTrue(isForced);
-
-            mRadioTuner.setAnalogForced(false);
-            isForced = mRadioTuner.isAnalogForced();
-            assertFalse(isForced);
-        } else {
-            assertThrows(IllegalStateException.class, () -> mRadioTuner.setAnalogForced(true));
-        }
-    }
-}
diff --git a/tests/testables/src/android/testing/TestableSettingsProvider.java b/tests/testables/src/android/testing/TestableSettingsProvider.java
index fe97bca1..5f2a224 100644
--- a/tests/testables/src/android/testing/TestableSettingsProvider.java
+++ b/tests/testables/src/android/testing/TestableSettingsProvider.java
@@ -36,7 +36,7 @@
 public class TestableSettingsProvider extends MockContentProvider {
 
     private static final String TAG = "TestableSettingsProvider";
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = true;
     private static final String MY_UNIQUE_KEY = "Key_" + TestableSettingsProvider.class.getName();
     private static TestableSettingsProvider sInstance;
 
diff --git a/tools/aapt/AaptXml.cpp b/tools/aapt/AaptXml.cpp
index b04a55d..6801a4e 100644
--- a/tools/aapt/AaptXml.cpp
+++ b/tools/aapt/AaptXml.cpp
@@ -99,24 +99,40 @@
     if (idx < 0) {
         return String8();
     }
+
     Res_value value;
-    if (tree.getAttributeValue(idx, &value) != NO_ERROR) {
-        if (value.dataType == Res_value::TYPE_STRING) {
-            size_t len;
-            const char16_t* str = tree.getAttributeStringValue(idx, &len);
-            return str ? String8(str, len) : String8();
+    if (tree.getAttributeValue(idx, &value) == BAD_TYPE) {
+        if (outError != NULL) {
+            *outError = "attribute value is corrupt";
         }
-        resTable.resolveReference(&value, 0);
-        if (value.dataType != Res_value::TYPE_STRING) {
-            if (outError != NULL) {
-                *outError = "attribute is not a string value";
-            }
-            return String8();
-        }
+        return String8();
     }
+
+    // Check if the string is inline in the XML.
+    if (value.dataType == Res_value::TYPE_STRING) {
+        size_t len;
+        const char16_t* str = tree.getAttributeStringValue(idx, &len);
+        return str ? String8(str, len) : String8();
+    }
+
+    // Resolve the reference if there is one.
+    ssize_t block = resTable.resolveReference(&value, 0);
+    if (block < 0) {
+        if (outError != NULL) {
+            *outError = "attribute value reference does not exist";
+        }
+        return String8();
+    }
+
+    if (value.dataType != Res_value::TYPE_STRING) {
+        if (outError != NULL) {
+            *outError = "attribute is not a string value";
+        }
+        return String8();
+    }
+
     size_t len;
-    const Res_value* value2 = &value;
-    const char16_t* str = resTable.valueToString(value2, 0, NULL, &len);
+    const char16_t* str = resTable.valueToString(&value, static_cast<size_t>(block), NULL, &len);
     return str ? String8(str, len) : String8();
 }
 
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index ba73180..63f1802 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -757,12 +757,8 @@
 
     AssetManager assets;
     int32_t assetsCookie;
-    if (!assets.addAssetPath(String8(filename), &assetsCookie)) {
-        fprintf(stderr, "ERROR: dump failed because assets could not be loaded\n");
-        return 1;
-    }
 
-    // Now add any dependencies passed in.
+    // Add any dependencies passed in.
     for (size_t i = 0; i < bundle->getPackageIncludes().size(); i++) {
       const String8& assetPath = bundle->getPackageIncludes()[i];
       if (!assets.addAssetPath(assetPath, NULL)) {
@@ -771,6 +767,11 @@
       }
     }
 
+    if (!assets.addAssetPath(String8(filename), &assetsCookie)) {
+        fprintf(stderr, "ERROR: dump failed because assets could not be loaded\n");
+        return 1;
+    }
+
     // Make a dummy config for retrieving resources...  we need to supply
     // non-default values for some configs so that we can retrieve resources
     // in the app that don't have a default.  The most important of these is
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index 52b93a9..734a5ab 100644
--- a/tools/aapt/ResourceTable.cpp
+++ b/tools/aapt/ResourceTable.cpp
@@ -4847,6 +4847,8 @@
     const String16 animatedVector16("animated-vector");
     const String16 pathInterpolator16("pathInterpolator");
     const String16 objectAnimator16("objectAnimator");
+    const String16 gradient16("gradient");
+    const String16 animatedSelector16("animated-selector");
 
     const int minSdk = getMinSdkVersion(bundle);
     if (minSdk >= SDK_LOLLIPOP_MR1) {
@@ -4874,7 +4876,9 @@
         if (bundle->getNoVersionVectors() && (node->getElementName() == vector16 ||
                     node->getElementName() == animatedVector16 ||
                     node->getElementName() == objectAnimator16 ||
-                    node->getElementName() == pathInterpolator16)) {
+                    node->getElementName() == pathInterpolator16 ||
+                    node->getElementName() == gradient16 ||
+                    node->getElementName() == animatedSelector16)) {
             // We were told not to version vector tags, so skip the children here.
             continue;
         }
diff --git a/tools/aapt/SdkConstants.h b/tools/aapt/SdkConstants.h
index d92de06..bf56ec0 100644
--- a/tools/aapt/SdkConstants.h
+++ b/tools/aapt/SdkConstants.h
@@ -41,7 +41,8 @@
     SDK_MNC = 23,
     SDK_NOUGAT = 24,
     SDK_NOUGAT_MR1 = 25,
-    SDK_O = 26, // STOPSHIP replace with real version
+    SDK_O = 26,
+    SDK_O_MR1 = 27,
 };
 
 #endif // H_AAPT_SDK_CONSTANTS
diff --git a/tools/aapt/pseudolocalize.cpp b/tools/aapt/pseudolocalize.cpp
index c7fee2c..5c47e0f 100644
--- a/tools/aapt/pseudolocalize.cpp
+++ b/tools/aapt/pseudolocalize.cpp
@@ -360,9 +360,15 @@
     String16 result;
     bool lastspace = true;
     bool space = true;
+    bool escape = false;
+    const char16_t ESCAPE_CHAR = '\\';
     for (size_t i=0; i<source.size(); i++) {
         char16_t c = s[i];
-        space = is_space(c);
+        if (!escape && c == ESCAPE_CHAR) {
+          escape = true;
+          continue;
+        }
+        space = (!escape && is_space(c)) || (escape && (c == 'n' || c == 't'));
         if (lastspace && !space) {
           // Word start
           result += k_rlm + k_rlo;
@@ -371,6 +377,10 @@
           result += k_pdf + k_rlm;
         }
         lastspace = space;
+        if (escape) {
+          result.append(&ESCAPE_CHAR, 1);
+          escape=false;
+        }
         result.append(&c, 1);
     }
     if (!lastspace) {
diff --git a/tools/aapt/tests/Pseudolocales_test.cpp b/tools/aapt/tests/Pseudolocales_test.cpp
index 4670e9f..a6aed3a 100644
--- a/tools/aapt/tests/Pseudolocales_test.cpp
+++ b/tools/aapt/tests/Pseudolocales_test.cpp
@@ -87,6 +87,10 @@
                 "\xe2\x80\x8f\xE2\x80\xaehello\xE2\x80\xac\xe2\x80\x8f\n" \
                 "  \xe2\x80\x8f\xE2\x80\xaeworld\xE2\x80\xac\xe2\x80\x8f\n",
                 PSEUDO_BIDI);
+  simple_helper("hello\\nworld\\n",
+                "\xe2\x80\x8f\xE2\x80\xaehello\xE2\x80\xac\xe2\x80\x8f\\n"
+                "\xe2\x80\x8f\xE2\x80\xaeworld\xE2\x80\xac\xe2\x80\x8f\\n",
+                PSEUDO_BIDI);
 }
 
 TEST(Pseudolocales, SimpleICU) {
diff --git a/tools/aapt2/Android.bp b/tools/aapt2/Android.bp
index 1dc47f8..7622574 100644
--- a/tools/aapt2/Android.bp
+++ b/tools/aapt2/Android.bp
@@ -85,13 +85,16 @@
         "compile/Pseudolocalizer.cpp",
         "compile/XmlIdCollector.cpp",
         "configuration/ConfigurationParser.cpp",
+        "filter/AbiFilter.cpp",
         "filter/ConfigFilter.cpp",
         "flatten/Archive.cpp",
         "flatten/TableFlattener.cpp",
         "flatten/XmlFlattener.cpp",
         "io/BigBufferStreams.cpp",
         "io/File.cpp",
+        "io/FileInputStream.cpp",
         "io/FileSystem.cpp",
+        "io/StringInputStream.cpp",
         "io/Util.cpp",
         "io/ZipArchive.cpp",
         "link/AutoVersioner.cpp",
@@ -110,6 +113,8 @@
         "proto/TableProtoDeserializer.cpp",
         "proto/TableProtoSerializer.cpp",
         "split/TableSplitter.cpp",
+        "text/Unicode.cpp",
+        "text/Utf8Iterator.cpp",
         "unflatten/BinaryResourceParser.cpp",
         "unflatten/ResChunkPullParser.cpp",
         "util/BigBuffer.cpp",
@@ -137,7 +142,8 @@
         "xml/XmlDom.cpp",
         "xml/XmlPullParser.cpp",
         "xml/XmlUtil.cpp",
-        "Format.proto",
+        "Resources.proto",
+        "ResourcesInternal.proto",
     ],
     proto: {
         export_proto_headers: true,
@@ -161,9 +167,10 @@
 cc_test_host {
     name: "aapt2_tests",
     srcs: [
+        "test/Builders.cpp",
         "test/Common.cpp",
         "**/*_test.cpp",
-    ],
+    ] + toolSources,
     static_libs: [
         "libaapt2",
         "libgmock",
diff --git a/tools/aapt2/ConfigDescription.cpp b/tools/aapt2/ConfigDescription.cpp
index 7ff0c72..a9278c1 100644
--- a/tools/aapt2/ConfigDescription.cpp
+++ b/tools/aapt2/ConfigDescription.cpp
@@ -70,7 +70,7 @@
 
 static bool parseMnc(const char* name, ResTable_config* out) {
   if (strcmp(name, kWildcardName) == 0) {
-    if (out) out->mcc = 0;
+    if (out) out->mnc = 0;
     return true;
   }
   const char* c = name;
@@ -967,8 +967,6 @@
                o.screenLayout & MASK_LAYOUTDIR) ||
          !pred(screenLayout & MASK_SCREENLONG,
                o.screenLayout & MASK_SCREENLONG) ||
-         !pred(screenLayout & MASK_UI_MODE_TYPE,
-               o.screenLayout & MASK_UI_MODE_TYPE) ||
          !pred(uiMode & MASK_UI_MODE_TYPE, o.uiMode & MASK_UI_MODE_TYPE) ||
          !pred(uiMode & MASK_UI_MODE_NIGHT, o.uiMode & MASK_UI_MODE_NIGHT) ||
          !pred(screenLayout2 & MASK_SCREENROUND,
diff --git a/tools/aapt2/ConfigDescription_test.cpp b/tools/aapt2/ConfigDescription_test.cpp
index 14a5656..1f351bf 100644
--- a/tools/aapt2/ConfigDescription_test.cpp
+++ b/tools/aapt2/ConfigDescription_test.cpp
@@ -140,4 +140,16 @@
   EXPECT_EQ(std::string("vrheadset-v26"), config.toString().string());
 }
 
+TEST(ConfigDescriptionTest, RangeQualifiersDoNotConflict) {
+  using test::ParseConfigOrDie;
+
+  EXPECT_FALSE(ParseConfigOrDie("large").ConflictsWith(ParseConfigOrDie("normal-land")));
+  EXPECT_FALSE(ParseConfigOrDie("long-hdpi").ConflictsWith(ParseConfigOrDie("xhdpi")));
+  EXPECT_FALSE(ParseConfigOrDie("sw600dp").ConflictsWith(ParseConfigOrDie("sw700dp")));
+  EXPECT_FALSE(ParseConfigOrDie("v11").ConflictsWith(ParseConfigOrDie("v21")));
+  EXPECT_FALSE(ParseConfigOrDie("h600dp").ConflictsWith(ParseConfigOrDie("h300dp")));
+  EXPECT_FALSE(ParseConfigOrDie("w400dp").ConflictsWith(ParseConfigOrDie("w300dp")));
+  EXPECT_FALSE(ParseConfigOrDie("600x400").ConflictsWith(ParseConfigOrDie("300x200")));
+}
+
 }  // namespace aapt
diff --git a/tools/aapt2/Debug.cpp b/tools/aapt2/Debug.cpp
index b872ebb..49ed778 100644
--- a/tools/aapt2/Debug.cpp
+++ b/tools/aapt2/Debug.cpp
@@ -33,6 +33,8 @@
 
 namespace aapt {
 
+namespace {
+
 class PrintVisitor : public ValueVisitor {
  public:
   using ValueVisitor::Visit;
@@ -88,9 +90,13 @@
     }
   }
 
-  void Visit(Array* array) override { array->Print(&std::cout); }
+  void Visit(Array* array) override {
+    array->Print(&std::cout);
+  }
 
-  void Visit(Plural* plural) override { plural->Print(&std::cout); }
+  void Visit(Plural* plural) override {
+    plural->Print(&std::cout);
+  }
 
   void Visit(Styleable* styleable) override {
     std::cout << "(styleable)";
@@ -110,11 +116,14 @@
     }
   }
 
-  void VisitItem(Item* item) override { item->Print(&std::cout); }
+  void VisitItem(Item* item) override {
+    item->Print(&std::cout);
+  }
 };
 
-void Debug::PrintTable(ResourceTable* table,
-                       const DebugPrintTableOptions& options) {
+}  // namespace
+
+void Debug::PrintTable(ResourceTable* table, const DebugPrintTableOptions& options) {
   PrintVisitor visitor;
 
   for (auto& package : table->packages) {
@@ -148,10 +157,9 @@
       }
 
       for (const ResourceEntry* entry : sorted_entries) {
-        ResourceId id(package->id ? package->id.value() : uint8_t(0),
-                      type->id ? type->id.value() : uint8_t(0),
-                      entry->id ? entry->id.value() : uint16_t(0));
-        ResourceName name(package->name, type->type, entry->name);
+        const ResourceId id(package->id.value_or_default(0), type->id.value_or_default(0),
+                            entry->id.value_or_default(0));
+        const ResourceName name(package->name, type->type, entry->name);
 
         std::cout << "    spec resource " << id << " " << name;
         switch (entry->symbol_status.state) {
@@ -180,16 +188,14 @@
   }
 }
 
-static size_t GetNodeIndex(const std::vector<ResourceName>& names,
-                           const ResourceName& name) {
+static size_t GetNodeIndex(const std::vector<ResourceName>& names, const ResourceName& name) {
   auto iter = std::lower_bound(names.begin(), names.end(), name);
   CHECK(iter != names.end());
   CHECK(*iter == name);
   return std::distance(names.begin(), iter);
 }
 
-void Debug::PrintStyleGraph(ResourceTable* table,
-                            const ResourceName& target_style) {
+void Debug::PrintStyleGraph(ResourceTable* table, const ResourceName& target_style) {
   std::map<ResourceName, std::set<ResourceName>> graph;
 
   std::queue<ResourceName> styles_to_visit;
@@ -223,8 +229,7 @@
 
   std::cout << "digraph styles {\n";
   for (const auto& name : names) {
-    std::cout << "  node_" << GetNodeIndex(names, name) << " [label=\"" << name
-              << "\"];\n";
+    std::cout << "  node_" << GetNodeIndex(names, name) << " [label=\"" << name << "\"];\n";
   }
 
   for (const auto& entry : graph) {
@@ -243,8 +248,7 @@
 void Debug::DumpHex(const void* data, size_t len) {
   const uint8_t* d = (const uint8_t*)data;
   for (size_t i = 0; i < len; i++) {
-    std::cerr << std::hex << std::setfill('0') << std::setw(2) << (uint32_t)d[i]
-              << " ";
+    std::cerr << std::hex << std::setfill('0') << std::setw(2) << (uint32_t)d[i] << " ";
     if (i % 8 == 7) {
       std::cerr << "\n";
     }
@@ -262,8 +266,15 @@
   using xml::Visitor::Visit;
 
   void Visit(xml::Element* el) override {
-    std::cerr << prefix_;
-    std::cerr << "E: ";
+    const size_t previous_size = prefix_.size();
+
+    for (const xml::NamespaceDecl& decl : el->namespace_decls) {
+      std::cerr << prefix_ << "N: " << decl.prefix << "=" << decl.uri
+                << " (line=" << decl.line_number << ")\n";
+      prefix_ += "  ";
+    }
+
+    std::cerr << prefix_ << "E: ";
     if (!el->namespace_uri.empty()) {
       std::cerr << el->namespace_uri << ":";
     }
@@ -283,26 +294,13 @@
       std::cerr << "=" << attr.value << "\n";
     }
 
-    const size_t previous_size = prefix_.size();
     prefix_ += "  ";
     xml::Visitor::Visit(el);
     prefix_.resize(previous_size);
   }
 
-  void Visit(xml::Namespace* ns) override {
-    std::cerr << prefix_;
-    std::cerr << "N: " << ns->namespace_prefix << "=" << ns->namespace_uri
-              << " (line=" << ns->line_number << ")\n";
-
-    const size_t previous_size = prefix_.size();
-    prefix_ += "  ";
-    xml::Visitor::Visit(ns);
-    prefix_.resize(previous_size);
-  }
-
   void Visit(xml::Text* text) override {
-    std::cerr << prefix_;
-    std::cerr << "T: '" << text->text << "'\n";
+    std::cerr << prefix_ << "T: '" << text->text << "'\n";
   }
 
  private:
diff --git a/tools/aapt2/Format.proto b/tools/aapt2/Format.proto
deleted file mode 100644
index 870b735..0000000
--- a/tools/aapt2/Format.proto
+++ /dev/null
@@ -1,211 +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.
- */
-
-syntax = "proto2";
-
-option optimize_for = LITE_RUNTIME;
-
-package aapt.pb;
-
-message ConfigDescription {
-	optional bytes data = 1;
-	optional string product = 2;
-}
-
-message StringPool {
-	optional bytes data = 1;
-}
-
-message CompiledFile {
-	message Symbol {
-		optional string resource_name = 1;
-		optional uint32 line_no = 2;
-	}
-
-	optional string resource_name = 1;
-	optional ConfigDescription config = 2;
-	optional string source_path = 3;
-	repeated Symbol exported_symbols = 4;
-}
-
-message ResourceTable {
-	optional StringPool string_pool = 1;
-	optional StringPool source_pool = 2;
-	optional StringPool symbol_pool = 3;
-	repeated Package packages = 4;
-}
-
-message Package {
-	optional uint32 package_id = 1;
-	optional string package_name = 2;
-	repeated Type types = 3;
-}
-
-message Type {	
-	optional uint32 id = 1;
-	optional string name = 2;
-	repeated Entry entries = 3;
-}
-
-message SymbolStatus {
-	enum Visibility {
-		Unknown = 0;
-		Private = 1;
-		Public = 2;
-	}
-	optional Visibility visibility = 1;
-	optional Source source = 2;
-	optional string comment = 3;
-	optional bool allow_new = 4;
-}
-
-message Entry {
-	optional uint32 id = 1;
-	optional string name = 2;
-	optional SymbolStatus symbol_status = 3;
-	repeated ConfigValue config_values = 4;
-}
-
-message ConfigValue {
-	optional ConfigDescription config = 1;
-	optional Value value = 2;
-}
-
-message Source {
-	optional uint32 path_idx = 1;
-	optional uint32 line_no = 2;
-	optional uint32 col_no = 3;
-}
-
-message Reference {
-	enum Type {
-		Ref = 0;
-		Attr = 1;
-	}
-	optional Type type = 1;
-	optional uint32 id = 2;
-	optional uint32 symbol_idx = 3;
-	optional bool private = 4;
-}
-
-message Id {
-}
-
-message String {
-	optional uint32 idx = 1;
-}
-
-message RawString {
-	optional uint32 idx = 1;
-}
-
-message FileReference {
-	optional uint32 path_idx = 1;
-}
-
-message Primitive {
-	optional uint32 type = 1;
-	optional uint32 data = 2;
-}
-
-message Attribute {
-	message Symbol {
-		optional Source source = 1;
-		optional string comment = 2;
-		optional Reference name = 3;
-		optional uint32 value = 4;
-	}
-	optional uint32 format_flags = 1;
-	optional int32 min_int = 2;
-	optional int32 max_int = 3;
-	repeated Symbol symbols = 4;
-}
-
-message Style {
-	message Entry {
-		optional Source source = 1;
-		optional string comment = 2;
-		optional Reference key = 3;
-		optional Item item = 4;
-	}
-
-	optional Reference parent = 1;
-	optional Source parent_source = 2;
-	repeated Entry entries = 3;
-}
-
-message Styleable {
-	message Entry {
-		optional Source source = 1;
-		optional string comment = 2;
-		optional Reference attr = 3;
-	}
-	repeated Entry entries = 1;
-}
-
-message Array {
-	message Entry {
-		optional Source source = 1;
-		optional string comment = 2;
-		optional Item item = 3;
-	}
-	repeated Entry entries = 1;
-}
-
-message Plural {
-	enum Arity {
-		Zero = 0;
-		One = 1;
-		Two = 2;
-		Few = 3;
-		Many = 4;
-		Other = 5;
-	}
-		
-	message Entry {
-		optional Source source = 1;
-		optional string comment = 2;
-		optional Arity arity = 3;
-		optional Item item = 4;
-	}
-	repeated Entry entries = 1;
-}
-
-message Item {
-	optional Reference ref = 1;
-	optional String str = 2;
-	optional RawString raw_str = 3;
-	optional FileReference file = 4;
-	optional Id id = 5;
-	optional Primitive prim = 6;
-}
-
-message CompoundValue {
-	optional Attribute attr = 1;
-	optional Style style = 2;
-	optional Styleable styleable = 3;
-	optional Array array = 4;
-	optional Plural plural = 5;
-}
-
-message Value {
-	optional Source source = 1;
-	optional string comment = 2;
-	optional bool weak = 3;
-	
-	optional Item item = 4;
-	optional CompoundValue compound_value = 5;	
-}
diff --git a/tools/aapt2/LoadedApk.cpp b/tools/aapt2/LoadedApk.cpp
index 8a8f8be..7e5efa1 100644
--- a/tools/aapt2/LoadedApk.cpp
+++ b/tools/aapt2/LoadedApk.cpp
@@ -57,6 +57,12 @@
 
 bool LoadedApk::WriteToArchive(IAaptContext* context, const TableFlattenerOptions& options,
                                IArchiveWriter* writer) {
+  FilterChain empty;
+  return WriteToArchive(context, options, &empty, writer);
+}
+
+bool LoadedApk::WriteToArchive(IAaptContext* context, const TableFlattenerOptions& options,
+                               FilterChain* filters, IArchiveWriter* writer) {
   std::set<std::string> referenced_resources;
   // List the files being referenced in the resource table.
   for (auto& pkg : table_->packages) {
@@ -89,6 +95,13 @@
       continue;
     }
 
+    if (!filters->Keep(path)) {
+      if (context->IsVerbose()) {
+        context->GetDiagnostics()->Note(DiagMessage() << "Filtered '" << path << "' from APK.");
+      }
+      continue;
+    }
+
     // The resource table needs to be re-serialized since it might have changed.
     if (path == "resources.arsc") {
       BigBuffer buffer(4096);
diff --git a/tools/aapt2/LoadedApk.h b/tools/aapt2/LoadedApk.h
index 59eb816..8aa9674 100644
--- a/tools/aapt2/LoadedApk.h
+++ b/tools/aapt2/LoadedApk.h
@@ -20,6 +20,7 @@
 #include "androidfw/StringPiece.h"
 
 #include "ResourceTable.h"
+#include "filter/Filter.h"
 #include "flatten/Archive.h"
 #include "flatten/TableFlattener.h"
 #include "io/ZipArchive.h"
@@ -49,6 +50,14 @@
   bool WriteToArchive(IAaptContext* context, const TableFlattenerOptions& options,
                       IArchiveWriter* writer);
 
+  /**
+   * Writes the APK on disk at the given path, while also removing the resource
+   * files that are not referenced in the resource table. The provided filter
+   * chain is applied to each entry in the APK file.
+   */
+  bool WriteToArchive(IAaptContext* context, const TableFlattenerOptions& options,
+                      FilterChain* filters, IArchiveWriter* writer);
+
   static std::unique_ptr<LoadedApk> LoadApkFromPath(IAaptContext* context,
                                                     const android::StringPiece& path);
 
diff --git a/tools/aapt2/Main.cpp b/tools/aapt2/Main.cpp
index 1d2e3a4..36ab30c 100644
--- a/tools/aapt2/Main.cpp
+++ b/tools/aapt2/Main.cpp
@@ -14,12 +14,26 @@
  * limitations under the License.
  */
 
+#ifdef _WIN32
+// clang-format off
+#include <windows.h>
+#include <shellapi.h>
+// clang-format on
+#endif
+
 #include <iostream>
 #include <vector>
 
+#include "android-base/stringprintf.h"
+#include "android-base/utf8.h"
 #include "androidfw/StringPiece.h"
 
 #include "Diagnostics.h"
+#include "util/Files.h"
+#include "util/Util.h"
+
+using ::android::StringPiece;
+using ::android::base::StringPrintf;
 
 namespace aapt {
 
@@ -27,54 +41,136 @@
 static const char* sMajorVersion = "2";
 
 // Update minor version whenever a feature or flag is added.
-static const char* sMinorVersion = "16";
+static const char* sMinorVersion = "19";
 
-int PrintVersion() {
-  std::cerr << "Android Asset Packaging Tool (aapt) " << sMajorVersion << "."
-            << sMinorVersion << std::endl;
-  return 0;
+static void PrintVersion() {
+  std::cerr << StringPrintf("Android Asset Packaging Tool (aapt) %s:%s", sMajorVersion,
+                            sMinorVersion)
+            << std::endl;
 }
 
-extern int Compile(const std::vector<android::StringPiece>& args, IDiagnostics* diagnostics);
-extern int Link(const std::vector<android::StringPiece>& args, IDiagnostics* diagnostics);
-extern int Dump(const std::vector<android::StringPiece>& args);
-extern int Diff(const std::vector<android::StringPiece>& args);
-extern int Optimize(const std::vector<android::StringPiece>& args);
+static void PrintUsage() {
+  std::cerr << "\nusage: aapt2 [compile|link|dump|diff|optimize|version] ..." << std::endl;
+}
+
+extern int Compile(const std::vector<StringPiece>& args, IDiagnostics* diagnostics);
+extern int Link(const std::vector<StringPiece>& args, IDiagnostics* diagnostics);
+extern int Dump(const std::vector<StringPiece>& args);
+extern int Diff(const std::vector<StringPiece>& args);
+extern int Optimize(const std::vector<StringPiece>& args);
+
+static int ExecuteCommand(const StringPiece& command, const std::vector<StringPiece>& args,
+                          IDiagnostics* diagnostics) {
+  if (command == "compile" || command == "c") {
+    return Compile(args, diagnostics);
+  } else if (command == "link" || command == "l") {
+    return Link(args, diagnostics);
+  } else if (command == "dump" || command == "d") {
+    return Dump(args);
+  } else if (command == "diff") {
+    return Diff(args);
+  } else if (command == "optimize") {
+    return Optimize(args);
+  } else if (command == "version") {
+    PrintVersion();
+    return 0;
+  }
+  diagnostics->Error(DiagMessage() << "unknown command '" << command << "'");
+  return -1;
+}
+
+static void RunDaemon(IDiagnostics* diagnostics) {
+  std::cout << "Ready" << std::endl;
+
+  // Run in daemon mode. The first line of input is the command. This can be 'quit' which ends
+  // the daemon mode. Each subsequent line is a single parameter to the command. The end of a
+  // invocation is signaled by providing an empty line. At any point, an EOF signal or the
+  // command 'quit' will end the daemon mode.
+  while (true) {
+    std::vector<std::string> raw_args;
+    for (std::string line; std::getline(std::cin, line) && !line.empty();) {
+      raw_args.push_back(line);
+    }
+
+    if (!std::cin) {
+      break;
+    }
+
+    // An empty command does nothing.
+    if (raw_args.empty()) {
+      continue;
+    }
+
+    if (raw_args[0] == "quit") {
+      break;
+    }
+
+    std::vector<StringPiece> args;
+    args.insert(args.end(), ++raw_args.begin(), raw_args.end());
+    int ret = ExecuteCommand(raw_args[0], args, diagnostics);
+    if (ret != 0) {
+      std::cerr << "Error" << std::endl;
+    }
+    std::cerr << "Done" << std::endl;
+  }
+  std::cout << "Exiting daemon" << std::endl;
+}
 
 }  // namespace aapt
 
-int main(int argc, char** argv) {
-  if (argc >= 2) {
-    argv += 1;
-    argc -= 1;
-
-    std::vector<android::StringPiece> args;
-    for (int i = 1; i < argc; i++) {
-      args.push_back(argv[i]);
-    }
-
-    android::StringPiece command(argv[0]);
-    if (command == "compile" || command == "c") {
-      aapt::StdErrDiagnostics diagnostics;
-      return aapt::Compile(args, &diagnostics);
-    } else if (command == "link" || command == "l") {
-      aapt::StdErrDiagnostics diagnostics;
-      return aapt::Link(args, &diagnostics);
-    } else if (command == "dump" || command == "d") {
-      return aapt::Dump(args);
-    } else if (command == "diff") {
-      return aapt::Diff(args);
-    } else if (command == "optimize") {
-      return aapt::Optimize(args);
-    } else if (command == "version") {
-      return aapt::PrintVersion();
-    }
-    std::cerr << "unknown command '" << command << "'\n";
-  } else {
+int MainImpl(int argc, char** argv) {
+  if (argc < 2) {
     std::cerr << "no command specified\n";
+    aapt::PrintUsage();
+    return -1;
   }
 
-  std::cerr << "\nusage: aapt2 [compile|link|dump|diff|optimize|version] ..."
-            << std::endl;
-  return 1;
+  argv += 1;
+  argc -= 1;
+
+  aapt::StdErrDiagnostics diagnostics;
+
+  // Collect the arguments starting after the program name and command name.
+  std::vector<StringPiece> args;
+  for (int i = 1; i < argc; i++) {
+    args.push_back(argv[i]);
+  }
+
+  const StringPiece command(argv[0]);
+  if (command != "daemon" && command != "m") {
+    // Single execution.
+    const int result = aapt::ExecuteCommand(command, args, &diagnostics);
+    if (result < 0) {
+      aapt::PrintUsage();
+    }
+    return result;
+  }
+
+  aapt::RunDaemon(&diagnostics);
+  return 0;
+}
+
+int main(int argc, char** argv) {
+#ifdef _WIN32
+  LPWSTR* wide_argv = CommandLineToArgvW(GetCommandLineW(), &argc);
+  CHECK(wide_argv != nullptr) << "invalid command line parameters passed to process";
+
+  std::vector<std::string> utf8_args;
+  for (int i = 0; i < argc; i++) {
+    std::string utf8_arg;
+    if (!::android::base::WideToUTF8(wide_argv[i], &utf8_arg)) {
+      std::cerr << "error converting input arguments to UTF-8" << std::endl;
+      return 1;
+    }
+    utf8_args.push_back(std::move(utf8_arg));
+  }
+  LocalFree(wide_argv);
+
+  std::unique_ptr<char* []> utf8_argv(new char*[utf8_args.size()]);
+  for (int i = 0; i < argc; i++) {
+    utf8_argv[i] = const_cast<char*>(utf8_args[i].c_str());
+  }
+  argv = utf8_argv.get();
+#endif
+  return MainImpl(argc, argv);
 }
diff --git a/tools/aapt2/OWNERS b/tools/aapt2/OWNERS
new file mode 100644
index 0000000..d76233e
--- /dev/null
+++ b/tools/aapt2/OWNERS
@@ -0,0 +1,2 @@
+set noparent
+adamlesinski@google.com
diff --git a/tools/aapt2/Resource.cpp b/tools/aapt2/Resource.cpp
index 35971e7..a9f5f29 100644
--- a/tools/aapt2/Resource.cpp
+++ b/tools/aapt2/Resource.cpp
@@ -61,6 +61,8 @@
       return "menu";
     case ResourceType::kMipmap:
       return "mipmap";
+    case ResourceType::kNavigation:
+      return "navigation";
     case ResourceType::kPlurals:
       return "plurals";
     case ResourceType::kRaw:
@@ -98,6 +100,7 @@
     {"layout", ResourceType::kLayout},
     {"menu", ResourceType::kMenu},
     {"mipmap", ResourceType::kMipmap},
+    {"navigation", ResourceType::kNavigation},
     {"plurals", ResourceType::kPlurals},
     {"raw", ResourceType::kRaw},
     {"string", ResourceType::kString},
diff --git a/tools/aapt2/Resource.h b/tools/aapt2/Resource.h
index 0a74c1a..cbcc8fb 100644
--- a/tools/aapt2/Resource.h
+++ b/tools/aapt2/Resource.h
@@ -59,6 +59,7 @@
   kLayout,
   kMenu,
   kMipmap,
+  kNavigation,
   kPlurals,
   kRaw,
   kString,
diff --git a/tools/aapt2/ResourceParser.cpp b/tools/aapt2/ResourceParser.cpp
index 9a37913..1c3ac2a 100644
--- a/tools/aapt2/ResourceParser.cpp
+++ b/tools/aapt2/ResourceParser.cpp
@@ -268,8 +268,7 @@
       continue;
     }
 
-    if (!parser->element_namespace().empty() ||
-        parser->element_name() != "resources") {
+    if (!parser->element_namespace().empty() || parser->element_name() != "resources") {
       diag_->Error(DiagMessage(source_.WithLine(parser->line_number()))
                    << "root element must be <resources>");
       return false;
@@ -328,8 +327,7 @@
     parsed_resource.comment = std::move(comment);
 
     // Extract the product name if it exists.
-    if (Maybe<StringPiece> maybe_product =
-            xml::FindNonEmptyAttribute(parser, "product")) {
+    if (Maybe<StringPiece> maybe_product = xml::FindNonEmptyAttribute(parser, "product")) {
       parsed_resource.product = maybe_product.value().to_string();
     }
 
@@ -348,10 +346,8 @@
   for (const ResourceName& stripped_resource : stripped_resources) {
     if (!table_->FindResource(stripped_resource)) {
       // Failed to find the resource.
-      diag_->Error(DiagMessage(source_)
-                   << "resource '" << stripped_resource
-                   << "' "
-                      "was filtered out but no product variant remains");
+      diag_->Error(DiagMessage(source_) << "resource '" << stripped_resource
+                                        << "' was filtered out but no product variant remains");
       error = true;
     }
   }
@@ -589,7 +585,7 @@
     // This can only be a StyledString.
     std::unique_ptr<StyledString> styled_string =
         util::make_unique<StyledString>(table_->string_pool.MakeRef(
-            style_string, StringPool::Context(StringPool::Context::kStylePriority, config_)));
+            style_string, StringPool::Context(StringPool::Context::kNormalPriority, config_)));
     styled_string->untranslatable_sections = std::move(untranslatable_sections);
     return std::move(styled_string);
   }
@@ -1223,7 +1219,7 @@
         continue;
       }
       item->SetSource(item_source);
-      array->items.emplace_back(std::move(item));
+      array->elements.emplace_back(std::move(item));
 
     } else if (!ShouldIgnoreElement(element_namespace, element_name)) {
       diag_->Error(DiagMessage(source_.WithLine(parser->line_number()))
diff --git a/tools/aapt2/ResourceParser_test.cpp b/tools/aapt2/ResourceParser_test.cpp
index c6382b1..144ebd2 100644
--- a/tools/aapt2/ResourceParser_test.cpp
+++ b/tools/aapt2/ResourceParser_test.cpp
@@ -22,14 +22,22 @@
 #include "ResourceTable.h"
 #include "ResourceUtils.h"
 #include "ResourceValues.h"
+#include "io/StringInputStream.h"
 #include "test/Test.h"
 #include "xml/XmlPullParser.h"
 
+using ::aapt::io::StringInputStream;
+using ::aapt::test::StrValueEq;
 using ::aapt::test::ValueEq;
+using ::android::ResTable_map;
+using ::android::Res_value;
 using ::android::StringPiece;
 using ::testing::Eq;
+using ::testing::IsEmpty;
+using ::testing::IsNull;
 using ::testing::NotNull;
 using ::testing::Pointee;
+using ::testing::SizeIs;
 
 namespace aapt {
 
@@ -37,11 +45,13 @@
 
 TEST(ResourceParserSingleTest, FailToParseWithNoRootResourcesElement) {
   std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
-  std::stringstream input(kXmlPreamble);
-  input << R"(<attr name="foo"/>)" << std::endl;
   ResourceTable table;
   ResourceParser parser(context->GetDiagnostics(), &table, Source{"test"}, {});
-  xml::XmlPullParser xml_parser(input);
+
+  std::string input = kXmlPreamble;
+  input += R"(<attr name="foo"/>)";
+  StringInputStream in(input);
+  xml::XmlPullParser xml_parser(&in);
   ASSERT_FALSE(parser.Parse(&xml_parser));
 }
 
@@ -56,12 +66,16 @@
   }
 
   ::testing::AssertionResult TestParse(const StringPiece& str, const ConfigDescription& config) {
-    std::stringstream input(kXmlPreamble);
-    input << "<resources>\n" << str << "\n</resources>" << std::endl;
     ResourceParserOptions parserOptions;
     ResourceParser parser(context_->GetDiagnostics(), &table_, Source{"test"}, config,
                           parserOptions);
-    xml::XmlPullParser xmlParser(input);
+
+    std::string input = kXmlPreamble;
+    input += "<resources>\n";
+    input.append(str.data(), str.size());
+    input += "\n</resources>";
+    StringInputStream in(input);
+    xml::XmlPullParser xmlParser(&in);
     if (parser.Parse(&xmlParser)) {
       return ::testing::AssertionSuccess();
     }
@@ -74,31 +88,31 @@
 };
 
 TEST_F(ResourceParserTest, ParseQuotedString) {
-  std::string input = "<string name=\"foo\">   \"  hey there \" </string>";
-  ASSERT_TRUE(TestParse(input));
+  ASSERT_TRUE(TestParse(R"(<string name="foo">   "  hey there " </string>)"));
 
   String* str = test::GetValue<String>(&table_, "string/foo");
-  ASSERT_NE(nullptr, str);
-  EXPECT_EQ(std::string("  hey there "), *str->value);
-  EXPECT_TRUE(str->untranslatable_sections.empty());
+  ASSERT_THAT(str, NotNull());
+  EXPECT_THAT(*str, StrValueEq("  hey there "));
+  EXPECT_THAT(str->untranslatable_sections, IsEmpty());
 }
 
 TEST_F(ResourceParserTest, ParseEscapedString) {
-  std::string input = "<string name=\"foo\">\\?123</string>";
-  ASSERT_TRUE(TestParse(input));
+  ASSERT_TRUE(TestParse(R"(<string name="foo">\?123</string>)"));
 
   String* str = test::GetValue<String>(&table_, "string/foo");
-  ASSERT_NE(nullptr, str);
-  EXPECT_EQ(std::string("?123"), *str->value);
-  EXPECT_TRUE(str->untranslatable_sections.empty());
+  ASSERT_THAT(str, NotNull());
+  EXPECT_THAT(*str, StrValueEq("?123"));
+  EXPECT_THAT(str->untranslatable_sections, IsEmpty());
+
+  ASSERT_TRUE(TestParse(R"(<string name="bar">This isn\’t a bad string</string>)"));
+  str = test::GetValue<String>(&table_, "string/bar");
+  ASSERT_THAT(str, NotNull());
+  EXPECT_THAT(*str, StrValueEq("This isn’t a bad string"));
 }
 
 TEST_F(ResourceParserTest, ParseFormattedString) {
-  std::string input = "<string name=\"foo\">%d %s</string>";
-  ASSERT_FALSE(TestParse(input));
-
-  input = "<string name=\"foo\">%1$d %2$s</string>";
-  ASSERT_TRUE(TestParse(input));
+  ASSERT_FALSE(TestParse(R"(<string name="foo">%d %s</string>)"));
+  ASSERT_TRUE(TestParse(R"(<string name="foo">%1$d %2$s</string>)"));
 }
 
 TEST_F(ResourceParserTest, ParseStyledString) {
@@ -109,98 +123,93 @@
   ASSERT_TRUE(TestParse(input));
 
   StyledString* str = test::GetValue<StyledString>(&table_, "string/foo");
-  ASSERT_NE(nullptr, str);
+  ASSERT_THAT(str, NotNull());
 
-  const std::string expected_str = "This is my aunt\u2019s fickle string";
-  EXPECT_EQ(expected_str, *str->value->str);
-  EXPECT_EQ(2u, str->value->spans.size());
-  EXPECT_TRUE(str->untranslatable_sections.empty());
+  EXPECT_THAT(str->value->value, Eq("This is my aunt\u2019s fickle string"));
+  EXPECT_THAT(str->value->spans, SizeIs(2));
+  EXPECT_THAT(str->untranslatable_sections, IsEmpty());
 
-  EXPECT_EQ(std::string("b"), *str->value->spans[0].name);
-  EXPECT_EQ(17u, str->value->spans[0].first_char);
-  EXPECT_EQ(30u, str->value->spans[0].last_char);
+  EXPECT_THAT(*str->value->spans[0].name, Eq("b"));
+  EXPECT_THAT(str->value->spans[0].first_char, Eq(17u));
+  EXPECT_THAT(str->value->spans[0].last_char, Eq(30u));
 
-  EXPECT_EQ(std::string("small"), *str->value->spans[1].name);
-  EXPECT_EQ(24u, str->value->spans[1].first_char);
-  EXPECT_EQ(30u, str->value->spans[1].last_char);
+  EXPECT_THAT(*str->value->spans[1].name, Eq("small"));
+  EXPECT_THAT(str->value->spans[1].first_char, Eq(24u));
+  EXPECT_THAT(str->value->spans[1].last_char, Eq(30u));
 }
 
 TEST_F(ResourceParserTest, ParseStringWithWhitespace) {
-  std::string input = "<string name=\"foo\">  This is what  I think  </string>";
-  ASSERT_TRUE(TestParse(input));
+  ASSERT_TRUE(TestParse(R"(<string name="foo">  This is what  I think  </string>)"));
 
   String* str = test::GetValue<String>(&table_, "string/foo");
-  ASSERT_NE(nullptr, str);
-  EXPECT_EQ(std::string("This is what I think"), *str->value);
-  EXPECT_TRUE(str->untranslatable_sections.empty());
+  ASSERT_THAT(str, NotNull());
+  EXPECT_THAT(*str->value, Eq("This is what I think"));
+  EXPECT_THAT(str->untranslatable_sections, IsEmpty());
 
-  input = "<string name=\"foo2\">\"  This is what  I think  \"</string>";
-  ASSERT_TRUE(TestParse(input));
+  ASSERT_TRUE(TestParse(R"(<string name="foo2">"  This is what  I think  "</string>)"));
 
   str = test::GetValue<String>(&table_, "string/foo2");
-  ASSERT_NE(nullptr, str);
-  EXPECT_EQ(std::string("  This is what  I think  "), *str->value);
+  ASSERT_THAT(str, NotNull());
+  EXPECT_THAT(*str, StrValueEq("  This is what  I think  "));
 }
 
 TEST_F(ResourceParserTest, IgnoreXliffTagsOtherThanG) {
-  std::string input = R"EOF(
+  std::string input = R"(
       <string name="foo" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-          There are <xliff:source>no</xliff:source> apples</string>)EOF";
+          There are <xliff:source>no</xliff:source> apples</string>)";
   ASSERT_TRUE(TestParse(input));
 
   String* str = test::GetValue<String>(&table_, "string/foo");
-  ASSERT_NE(nullptr, str);
-  EXPECT_EQ(StringPiece("There are no apples"), StringPiece(*str->value));
-  EXPECT_TRUE(str->untranslatable_sections.empty());
+  ASSERT_THAT(str, NotNull());
+  EXPECT_THAT(*str, StrValueEq("There are no apples"));
+  EXPECT_THAT(str->untranslatable_sections, IsEmpty());
 }
 
 TEST_F(ResourceParserTest, NestedXliffGTagsAreIllegal) {
-  std::string input = R"EOF(
+  std::string input = R"(
       <string name="foo" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-          Do not <xliff:g>translate <xliff:g>this</xliff:g></xliff:g></string>)EOF";
+          Do not <xliff:g>translate <xliff:g>this</xliff:g></xliff:g></string>)";
   EXPECT_FALSE(TestParse(input));
 }
 
 TEST_F(ResourceParserTest, RecordUntranslateableXliffSectionsInString) {
-  std::string input = R"EOF(
+  std::string input = R"(
       <string name="foo" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-          There are <xliff:g id="count">%1$d</xliff:g> apples</string>)EOF";
+          There are <xliff:g id="count">%1$d</xliff:g> apples</string>)";
   ASSERT_TRUE(TestParse(input));
 
   String* str = test::GetValue<String>(&table_, "string/foo");
-  ASSERT_NE(nullptr, str);
-  EXPECT_EQ(StringPiece("There are %1$d apples"), StringPiece(*str->value));
-
-  ASSERT_EQ(1u, str->untranslatable_sections.size());
+  ASSERT_THAT(str, NotNull());
+  EXPECT_THAT(*str, StrValueEq("There are %1$d apples"));
+  ASSERT_THAT(str->untranslatable_sections, SizeIs(1));
 
   // We expect indices and lengths that span to include the whitespace
   // before %1$d. This is due to how the StringBuilder withholds whitespace unless
   // needed (to deal with line breaks, etc.).
-  EXPECT_EQ(9u, str->untranslatable_sections[0].start);
-  EXPECT_EQ(14u, str->untranslatable_sections[0].end);
+  EXPECT_THAT(str->untranslatable_sections[0].start, Eq(9u));
+  EXPECT_THAT(str->untranslatable_sections[0].end, Eq(14u));
 }
 
 TEST_F(ResourceParserTest, RecordUntranslateableXliffSectionsInStyledString) {
-  std::string input = R"EOF(
+  std::string input = R"(
       <string name="foo" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-          There are <b><xliff:g id="count">%1$d</xliff:g></b> apples</string>)EOF";
+          There are <b><xliff:g id="count">%1$d</xliff:g></b> apples</string>)";
   ASSERT_TRUE(TestParse(input));
 
   StyledString* str = test::GetValue<StyledString>(&table_, "string/foo");
-  ASSERT_NE(nullptr, str);
-  EXPECT_EQ(StringPiece("There are %1$d apples"), StringPiece(*str->value->str));
-
-  ASSERT_EQ(1u, str->untranslatable_sections.size());
+  ASSERT_THAT(str, NotNull());
+  EXPECT_THAT(str->value->value, Eq("There are %1$d apples"));
+  ASSERT_THAT(str->untranslatable_sections, SizeIs(1));
 
   // We expect indices and lengths that span to include the whitespace
   // before %1$d. This is due to how the StringBuilder withholds whitespace unless
   // needed (to deal with line breaks, etc.).
-  EXPECT_EQ(9u, str->untranslatable_sections[0].start);
-  EXPECT_EQ(14u, str->untranslatable_sections[0].end);
+  EXPECT_THAT(str->untranslatable_sections[0].start, Eq(9u));
+  EXPECT_THAT(str->untranslatable_sections[0].end, Eq(14u));
 }
 
 TEST_F(ResourceParserTest, ParseNull) {
-  std::string input = "<integer name=\"foo\">@null</integer>";
+  std::string input = R"(<integer name="foo">@null</integer>)";
   ASSERT_TRUE(TestParse(input));
 
   // The Android runtime treats a value of android::Res_value::TYPE_NULL as
@@ -211,38 +220,36 @@
   ASSERT_THAT(null_ref, NotNull());
   EXPECT_FALSE(null_ref->name);
   EXPECT_FALSE(null_ref->id);
-  EXPECT_EQ(Reference::Type::kResource, null_ref->reference_type);
+  EXPECT_THAT(null_ref->reference_type, Eq(Reference::Type::kResource));
 }
 
 TEST_F(ResourceParserTest, ParseEmpty) {
-  std::string input = "<integer name=\"foo\">@empty</integer>";
+  std::string input = R"(<integer name="foo">@empty</integer>)";
   ASSERT_TRUE(TestParse(input));
 
   BinaryPrimitive* integer = test::GetValue<BinaryPrimitive>(&table_, "integer/foo");
-  ASSERT_NE(nullptr, integer);
-  EXPECT_EQ(uint16_t(android::Res_value::TYPE_NULL), integer->value.dataType);
-  EXPECT_EQ(uint32_t(android::Res_value::DATA_NULL_EMPTY), integer->value.data);
+  ASSERT_THAT(integer, NotNull());
+  EXPECT_THAT(integer->value.dataType, Eq(Res_value::TYPE_NULL));
+  EXPECT_THAT(integer->value.data, Eq(Res_value::DATA_NULL_EMPTY));
 }
 
 TEST_F(ResourceParserTest, ParseAttr) {
-  std::string input =
-      "<attr name=\"foo\" format=\"string\"/>\n"
-      "<attr name=\"bar\"/>";
+  std::string input = R"(
+      <attr name="foo" format="string"/>
+      <attr name="bar"/>)";
   ASSERT_TRUE(TestParse(input));
 
   Attribute* attr = test::GetValue<Attribute>(&table_, "attr/foo");
-  ASSERT_NE(nullptr, attr);
-  EXPECT_EQ(uint32_t(android::ResTable_map::TYPE_STRING), attr->type_mask);
+  ASSERT_THAT(attr, NotNull());
+  EXPECT_THAT(attr->type_mask, Eq(ResTable_map::TYPE_STRING));
 
   attr = test::GetValue<Attribute>(&table_, "attr/bar");
-  ASSERT_NE(nullptr, attr);
-  EXPECT_EQ(uint32_t(android::ResTable_map::TYPE_ANY), attr->type_mask);
+  ASSERT_THAT(attr, NotNull());
+  EXPECT_THAT(attr->type_mask, Eq(ResTable_map::TYPE_ANY));
 }
 
-// Old AAPT allowed attributes to be defined under different configurations, but
-// ultimately
-// stored them with the default configuration. Check that we have the same
-// behavior.
+// Old AAPT allowed attributes to be defined under different configurations, but ultimately
+// stored them with the default configuration. Check that we have the same behavior.
 TEST_F(ResourceParserTest, ParseAttrAndDeclareStyleableUnderConfigButRecordAsNoConfig) {
   const ConfigDescription watch_config = test::ParseConfigOrDie("watch");
   std::string input = R"(
@@ -252,583 +259,519 @@
       </declare-styleable>)";
   ASSERT_TRUE(TestParse(input, watch_config));
 
-  EXPECT_EQ(nullptr, test::GetValueForConfig<Attribute>(&table_, "attr/foo", watch_config));
-  EXPECT_EQ(nullptr, test::GetValueForConfig<Attribute>(&table_, "attr/baz", watch_config));
-  EXPECT_EQ(nullptr, test::GetValueForConfig<Styleable>(&table_, "styleable/bar", watch_config));
+  EXPECT_THAT(test::GetValueForConfig<Attribute>(&table_, "attr/foo", watch_config), IsNull());
+  EXPECT_THAT(test::GetValueForConfig<Attribute>(&table_, "attr/baz", watch_config), IsNull());
+  EXPECT_THAT(test::GetValueForConfig<Styleable>(&table_, "styleable/bar", watch_config), IsNull());
 
-  EXPECT_NE(nullptr, test::GetValue<Attribute>(&table_, "attr/foo"));
-  EXPECT_NE(nullptr, test::GetValue<Attribute>(&table_, "attr/baz"));
-  EXPECT_NE(nullptr, test::GetValue<Styleable>(&table_, "styleable/bar"));
+  EXPECT_THAT(test::GetValue<Attribute>(&table_, "attr/foo"), NotNull());
+  EXPECT_THAT(test::GetValue<Attribute>(&table_, "attr/baz"), NotNull());
+  EXPECT_THAT(test::GetValue<Styleable>(&table_, "styleable/bar"), NotNull());
 }
 
 TEST_F(ResourceParserTest, ParseAttrWithMinMax) {
-  std::string input =
-      "<attr name=\"foo\" min=\"10\" max=\"23\" format=\"integer\"/>";
+  std::string input = R"(<attr name="foo" min="10" max="23" format="integer"/>)";
   ASSERT_TRUE(TestParse(input));
 
   Attribute* attr = test::GetValue<Attribute>(&table_, "attr/foo");
-  ASSERT_NE(nullptr, attr);
-  EXPECT_EQ(uint32_t(android::ResTable_map::TYPE_INTEGER), attr->type_mask);
-  EXPECT_EQ(10, attr->min_int);
-  EXPECT_EQ(23, attr->max_int);
+  ASSERT_THAT(attr, NotNull());
+  EXPECT_THAT(attr->type_mask, Eq(ResTable_map::TYPE_INTEGER));
+  EXPECT_THAT(attr->min_int, Eq(10));
+  EXPECT_THAT(attr->max_int, Eq(23));
 }
 
 TEST_F(ResourceParserTest, FailParseAttrWithMinMaxButNotInteger) {
-  std::string input =
-      "<attr name=\"foo\" min=\"10\" max=\"23\" format=\"string\"/>";
-  ASSERT_FALSE(TestParse(input));
+  ASSERT_FALSE(TestParse(R"(<attr name="foo" min="10" max="23" format="string"/>)"));
 }
 
 TEST_F(ResourceParserTest, ParseUseAndDeclOfAttr) {
-  std::string input =
-      "<declare-styleable name=\"Styleable\">\n"
-      "  <attr name=\"foo\" />\n"
-      "</declare-styleable>\n"
-      "<attr name=\"foo\" format=\"string\"/>";
+  std::string input = R"(
+      <declare-styleable name="Styleable">
+        <attr name="foo" />
+      </declare-styleable>
+      <attr name="foo" format="string"/>)";
   ASSERT_TRUE(TestParse(input));
 
   Attribute* attr = test::GetValue<Attribute>(&table_, "attr/foo");
-  ASSERT_NE(nullptr, attr);
-  EXPECT_EQ(uint32_t(android::ResTable_map::TYPE_STRING), attr->type_mask);
+  ASSERT_THAT(attr, NotNull());
+  EXPECT_THAT(attr->type_mask, Eq(ResTable_map::TYPE_STRING));
 }
 
 TEST_F(ResourceParserTest, ParseDoubleUseOfAttr) {
-  std::string input =
-      "<declare-styleable name=\"Theme\">"
-      "  <attr name=\"foo\" />\n"
-      "</declare-styleable>\n"
-      "<declare-styleable name=\"Window\">\n"
-      "  <attr name=\"foo\" format=\"boolean\"/>\n"
-      "</declare-styleable>";
+  std::string input = R"(
+      <declare-styleable name="Theme">
+        <attr name="foo" />
+      </declare-styleable>
+      <declare-styleable name="Window">
+        <attr name="foo" format="boolean"/>
+      </declare-styleable>)";
   ASSERT_TRUE(TestParse(input));
 
   Attribute* attr = test::GetValue<Attribute>(&table_, "attr/foo");
-  ASSERT_NE(nullptr, attr);
-  EXPECT_EQ(uint32_t(android::ResTable_map::TYPE_BOOLEAN), attr->type_mask);
+  ASSERT_THAT(attr, NotNull());
+  EXPECT_THAT(attr->type_mask, Eq(ResTable_map::TYPE_BOOLEAN));
 }
 
 TEST_F(ResourceParserTest, ParseEnumAttr) {
-  std::string input =
-      "<attr name=\"foo\">\n"
-      "  <enum name=\"bar\" value=\"0\"/>\n"
-      "  <enum name=\"bat\" value=\"1\"/>\n"
-      "  <enum name=\"baz\" value=\"2\"/>\n"
-      "</attr>";
+  std::string input = R"(
+      <attr name="foo">
+        <enum name="bar" value="0"/>
+        <enum name="bat" value="1"/>
+        <enum name="baz" value="2"/>
+      </attr>)";
   ASSERT_TRUE(TestParse(input));
 
   Attribute* enum_attr = test::GetValue<Attribute>(&table_, "attr/foo");
-  ASSERT_NE(enum_attr, nullptr);
-  EXPECT_EQ(enum_attr->type_mask, android::ResTable_map::TYPE_ENUM);
-  ASSERT_EQ(enum_attr->symbols.size(), 3u);
+  ASSERT_THAT(enum_attr, NotNull());
+  EXPECT_THAT(enum_attr->type_mask, Eq(ResTable_map::TYPE_ENUM));
+  ASSERT_THAT(enum_attr->symbols, SizeIs(3));
 
-  AAPT_ASSERT_TRUE(enum_attr->symbols[0].symbol.name);
-  EXPECT_EQ(enum_attr->symbols[0].symbol.name.value().entry, "bar");
-  EXPECT_EQ(enum_attr->symbols[0].value, 0u);
+  ASSERT_TRUE(enum_attr->symbols[0].symbol.name);
+  EXPECT_THAT(enum_attr->symbols[0].symbol.name.value().entry, Eq("bar"));
+  EXPECT_THAT(enum_attr->symbols[0].value, Eq(0u));
 
-  AAPT_ASSERT_TRUE(enum_attr->symbols[1].symbol.name);
-  EXPECT_EQ(enum_attr->symbols[1].symbol.name.value().entry, "bat");
-  EXPECT_EQ(enum_attr->symbols[1].value, 1u);
+  ASSERT_TRUE(enum_attr->symbols[1].symbol.name);
+  EXPECT_THAT(enum_attr->symbols[1].symbol.name.value().entry, Eq("bat"));
+  EXPECT_THAT(enum_attr->symbols[1].value, Eq(1u));
 
-  AAPT_ASSERT_TRUE(enum_attr->symbols[2].symbol.name);
-  EXPECT_EQ(enum_attr->symbols[2].symbol.name.value().entry, "baz");
-  EXPECT_EQ(enum_attr->symbols[2].value, 2u);
+  ASSERT_TRUE(enum_attr->symbols[2].symbol.name);
+  EXPECT_THAT(enum_attr->symbols[2].symbol.name.value().entry, Eq("baz"));
+  EXPECT_THAT(enum_attr->symbols[2].value, Eq(2u));
 }
 
 TEST_F(ResourceParserTest, ParseFlagAttr) {
-  std::string input =
-      "<attr name=\"foo\">\n"
-      "  <flag name=\"bar\" value=\"0\"/>\n"
-      "  <flag name=\"bat\" value=\"1\"/>\n"
-      "  <flag name=\"baz\" value=\"2\"/>\n"
-      "</attr>";
+  std::string input = R"(
+      <attr name="foo">
+        <flag name="bar" value="0"/>
+        <flag name="bat" value="1"/>
+        <flag name="baz" value="2"/>
+      </attr>)";
   ASSERT_TRUE(TestParse(input));
 
   Attribute* flag_attr = test::GetValue<Attribute>(&table_, "attr/foo");
-  ASSERT_NE(nullptr, flag_attr);
-  EXPECT_EQ(flag_attr->type_mask, android::ResTable_map::TYPE_FLAGS);
-  ASSERT_EQ(flag_attr->symbols.size(), 3u);
+  ASSERT_THAT(flag_attr, NotNull());
+  EXPECT_THAT(flag_attr->type_mask, Eq(ResTable_map::TYPE_FLAGS));
+  ASSERT_THAT(flag_attr->symbols, SizeIs(3));
 
-  AAPT_ASSERT_TRUE(flag_attr->symbols[0].symbol.name);
-  EXPECT_EQ(flag_attr->symbols[0].symbol.name.value().entry, "bar");
-  EXPECT_EQ(flag_attr->symbols[0].value, 0u);
+  ASSERT_TRUE(flag_attr->symbols[0].symbol.name);
+  EXPECT_THAT(flag_attr->symbols[0].symbol.name.value().entry, Eq("bar"));
+  EXPECT_THAT(flag_attr->symbols[0].value, Eq(0u));
 
-  AAPT_ASSERT_TRUE(flag_attr->symbols[1].symbol.name);
-  EXPECT_EQ(flag_attr->symbols[1].symbol.name.value().entry, "bat");
-  EXPECT_EQ(flag_attr->symbols[1].value, 1u);
+  ASSERT_TRUE(flag_attr->symbols[1].symbol.name);
+  EXPECT_THAT(flag_attr->symbols[1].symbol.name.value().entry, Eq("bat"));
+  EXPECT_THAT(flag_attr->symbols[1].value, Eq(1u));
 
-  AAPT_ASSERT_TRUE(flag_attr->symbols[2].symbol.name);
-  EXPECT_EQ(flag_attr->symbols[2].symbol.name.value().entry, "baz");
-  EXPECT_EQ(flag_attr->symbols[2].value, 2u);
+  ASSERT_TRUE(flag_attr->symbols[2].symbol.name);
+  EXPECT_THAT(flag_attr->symbols[2].symbol.name.value().entry, Eq("baz"));
+  EXPECT_THAT(flag_attr->symbols[2].value, Eq(2u));
 
   std::unique_ptr<BinaryPrimitive> flag_value =
       ResourceUtils::TryParseFlagSymbol(flag_attr, "baz|bat");
-  ASSERT_NE(nullptr, flag_value);
-  EXPECT_EQ(flag_value->value.data, 1u | 2u);
+  ASSERT_THAT(flag_value, NotNull());
+  EXPECT_THAT(flag_value->value.data, Eq(1u | 2u));
 }
 
 TEST_F(ResourceParserTest, FailToParseEnumAttrWithNonUniqueKeys) {
-  std::string input =
-      "<attr name=\"foo\">\n"
-      "  <enum name=\"bar\" value=\"0\"/>\n"
-      "  <enum name=\"bat\" value=\"1\"/>\n"
-      "  <enum name=\"bat\" value=\"2\"/>\n"
-      "</attr>";
+  std::string input = R"(
+      <attr name="foo">
+        <enum name="bar" value="0"/>
+        <enum name="bat" value="1"/>
+        <enum name="bat" value="2"/>
+      </attr>)";
   ASSERT_FALSE(TestParse(input));
 }
 
 TEST_F(ResourceParserTest, ParseStyle) {
-  std::string input =
-      "<style name=\"foo\" parent=\"@style/fu\">\n"
-      "  <item name=\"bar\">#ffffffff</item>\n"
-      "  <item name=\"bat\">@string/hey</item>\n"
-      "  <item name=\"baz\"><b>hey</b></item>\n"
-      "</style>";
+  std::string input = R"(
+      <style name="foo" parent="@style/fu">
+        <item name="bar">#ffffffff</item>
+        <item name="bat">@string/hey</item>
+        <item name="baz"><b>hey</b></item>
+      </style>)";
   ASSERT_TRUE(TestParse(input));
 
   Style* style = test::GetValue<Style>(&table_, "style/foo");
-  ASSERT_NE(nullptr, style);
-  AAPT_ASSERT_TRUE(style->parent);
-  AAPT_ASSERT_TRUE(style->parent.value().name);
-  EXPECT_EQ(test::ParseNameOrDie("style/fu"),
-            style->parent.value().name.value());
-  ASSERT_EQ(3u, style->entries.size());
+  ASSERT_THAT(style, NotNull());
+  ASSERT_TRUE(style->parent);
+  EXPECT_THAT(style->parent.value().name, Eq(make_value(test::ParseNameOrDie("style/fu"))));
+  ASSERT_THAT(style->entries, SizeIs(3));
 
-  AAPT_ASSERT_TRUE(style->entries[0].key.name);
-  EXPECT_EQ(test::ParseNameOrDie("attr/bar"),
-            style->entries[0].key.name.value());
-
-  AAPT_ASSERT_TRUE(style->entries[1].key.name);
-  EXPECT_EQ(test::ParseNameOrDie("attr/bat"),
-            style->entries[1].key.name.value());
-
-  AAPT_ASSERT_TRUE(style->entries[2].key.name);
-  EXPECT_EQ(test::ParseNameOrDie("attr/baz"),
-            style->entries[2].key.name.value());
+  EXPECT_THAT(style->entries[0].key.name, Eq(make_value(test::ParseNameOrDie("attr/bar"))));
+  EXPECT_THAT(style->entries[1].key.name, Eq(make_value(test::ParseNameOrDie("attr/bat"))));
+  EXPECT_THAT(style->entries[2].key.name, Eq(make_value(test::ParseNameOrDie("attr/baz"))));
 }
 
 TEST_F(ResourceParserTest, ParseStyleWithShorthandParent) {
-  std::string input = "<style name=\"foo\" parent=\"com.app:Theme\"/>";
-  ASSERT_TRUE(TestParse(input));
+  ASSERT_TRUE(TestParse(R"(<style name="foo" parent="com.app:Theme"/>)"));
 
   Style* style = test::GetValue<Style>(&table_, "style/foo");
-  ASSERT_NE(nullptr, style);
-  AAPT_ASSERT_TRUE(style->parent);
-  AAPT_ASSERT_TRUE(style->parent.value().name);
-  EXPECT_EQ(test::ParseNameOrDie("com.app:style/Theme"),
-            style->parent.value().name.value());
+  ASSERT_THAT(style, NotNull());
+  ASSERT_TRUE(style->parent);
+  EXPECT_THAT(style->parent.value().name, Eq(make_value(test::ParseNameOrDie("com.app:style/Theme"))));
 }
 
 TEST_F(ResourceParserTest, ParseStyleWithPackageAliasedParent) {
-  std::string input =
-      "<style xmlns:app=\"http://schemas.android.com/apk/res/android\"\n"
-      "       name=\"foo\" parent=\"app:Theme\"/>";
+  std::string input = R"(
+      <style xmlns:app="http://schemas.android.com/apk/res/android"
+          name="foo" parent="app:Theme"/>)";
   ASSERT_TRUE(TestParse(input));
 
   Style* style = test::GetValue<Style>(&table_, "style/foo");
-  ASSERT_NE(nullptr, style);
-  AAPT_ASSERT_TRUE(style->parent);
-  AAPT_ASSERT_TRUE(style->parent.value().name);
-  EXPECT_EQ(test::ParseNameOrDie("android:style/Theme"),
-            style->parent.value().name.value());
+  ASSERT_THAT(style, NotNull());
+  ASSERT_TRUE(style->parent);
+  ASSERT_TRUE(style->parent.value().name);
+  EXPECT_THAT(style->parent.value().name, Eq(make_value(test::ParseNameOrDie("android:style/Theme"))));
 }
 
 TEST_F(ResourceParserTest, ParseStyleWithPackageAliasedItems) {
-  std::string input =
-      "<style xmlns:app=\"http://schemas.android.com/apk/res/android\" "
-      "name=\"foo\">\n"
-      "  <item name=\"app:bar\">0</item>\n"
-      "</style>";
+  std::string input = R"(
+      <style xmlns:app="http://schemas.android.com/apk/res/android" name="foo">
+        <item name="app:bar">0</item>
+      </style>)";
   ASSERT_TRUE(TestParse(input));
 
   Style* style = test::GetValue<Style>(&table_, "style/foo");
-  ASSERT_NE(nullptr, style);
-  ASSERT_EQ(1u, style->entries.size());
-  EXPECT_EQ(test::ParseNameOrDie("android:attr/bar"),
-            style->entries[0].key.name.value());
+  ASSERT_THAT(style, NotNull());
+  ASSERT_THAT(style->entries, SizeIs(1));
+  EXPECT_THAT(style->entries[0].key.name, Eq(make_value(test::ParseNameOrDie("android:attr/bar"))));
 }
 
 TEST_F(ResourceParserTest, ParseStyleWithInferredParent) {
-  std::string input = "<style name=\"foo.bar\"/>";
-  ASSERT_TRUE(TestParse(input));
+  ASSERT_TRUE(TestParse(R"(<style name="foo.bar"/>)"));
 
   Style* style = test::GetValue<Style>(&table_, "style/foo.bar");
-  ASSERT_NE(nullptr, style);
-  AAPT_ASSERT_TRUE(style->parent);
-  AAPT_ASSERT_TRUE(style->parent.value().name);
-  EXPECT_EQ(style->parent.value().name.value(),
-            test::ParseNameOrDie("style/foo"));
+  ASSERT_THAT(style, NotNull());
+  ASSERT_TRUE(style->parent);
+  EXPECT_THAT(style->parent.value().name, Eq(make_value(test::ParseNameOrDie("style/foo"))));
   EXPECT_TRUE(style->parent_inferred);
 }
 
-TEST_F(ResourceParserTest,
-       ParseStyleWithInferredParentOverridenByEmptyParentAttribute) {
-  std::string input = "<style name=\"foo.bar\" parent=\"\"/>";
-  ASSERT_TRUE(TestParse(input));
+TEST_F(ResourceParserTest, ParseStyleWithInferredParentOverridenByEmptyParentAttribute) {
+  ASSERT_TRUE(TestParse(R"(<style name="foo.bar" parent=""/>)"));
 
   Style* style = test::GetValue<Style>(&table_, "style/foo.bar");
-  ASSERT_NE(nullptr, style);
-  AAPT_EXPECT_FALSE(style->parent);
+  ASSERT_THAT(style, NotNull());
+  EXPECT_FALSE(style->parent);
   EXPECT_FALSE(style->parent_inferred);
 }
 
 TEST_F(ResourceParserTest, ParseStyleWithPrivateParentReference) {
-  std::string input =
-      R"EOF(<style name="foo" parent="*android:style/bar" />)EOF";
-  ASSERT_TRUE(TestParse(input));
+  ASSERT_TRUE(TestParse(R"(<style name="foo" parent="*android:style/bar" />)"));
 
   Style* style = test::GetValue<Style>(&table_, "style/foo");
-  ASSERT_NE(nullptr, style);
-  AAPT_ASSERT_TRUE(style->parent);
+  ASSERT_THAT(style, NotNull());
+  ASSERT_TRUE(style->parent);
   EXPECT_TRUE(style->parent.value().private_reference);
 }
 
 TEST_F(ResourceParserTest, ParseAutoGeneratedIdReference) {
-  std::string input = "<string name=\"foo\">@+id/bar</string>";
-  ASSERT_TRUE(TestParse(input));
-
-  Id* id = test::GetValue<Id>(&table_, "id/bar");
-  ASSERT_NE(id, nullptr);
+  ASSERT_TRUE(TestParse(R"(<string name="foo">@+id/bar</string>)"));
+  ASSERT_THAT(test::GetValue<Id>(&table_, "id/bar"), NotNull());
 }
 
 TEST_F(ResourceParserTest, ParseAttributesDeclareStyleable) {
-  std::string input =
-      "<declare-styleable name=\"foo\">\n"
-      "  <attr name=\"bar\" />\n"
-      "  <attr name=\"bat\" format=\"string|reference\"/>\n"
-      "  <attr name=\"baz\">\n"
-      "    <enum name=\"foo\" value=\"1\"/>\n"
-      "  </attr>\n"
-      "</declare-styleable>";
+  std::string input = R"(
+      <declare-styleable name="foo">
+        <attr name="bar" />
+        <attr name="bat" format="string|reference"/>
+        <attr name="baz">
+          <enum name="foo" value="1"/>
+        </attr>
+      </declare-styleable>)";
   ASSERT_TRUE(TestParse(input));
 
   Maybe<ResourceTable::SearchResult> result =
       table_.FindResource(test::ParseNameOrDie("styleable/foo"));
-  AAPT_ASSERT_TRUE(result);
-  EXPECT_EQ(SymbolState::kPublic, result.value().entry->symbol_status.state);
+  ASSERT_TRUE(result);
+  EXPECT_THAT(result.value().entry->symbol_status.state, Eq(SymbolState::kPublic));
 
   Attribute* attr = test::GetValue<Attribute>(&table_, "attr/bar");
-  ASSERT_NE(attr, nullptr);
+  ASSERT_THAT(attr, NotNull());
   EXPECT_TRUE(attr->IsWeak());
 
   attr = test::GetValue<Attribute>(&table_, "attr/bat");
-  ASSERT_NE(attr, nullptr);
+  ASSERT_THAT(attr, NotNull());
   EXPECT_TRUE(attr->IsWeak());
 
   attr = test::GetValue<Attribute>(&table_, "attr/baz");
-  ASSERT_NE(attr, nullptr);
+  ASSERT_THAT(attr, NotNull());
   EXPECT_TRUE(attr->IsWeak());
-  EXPECT_EQ(1u, attr->symbols.size());
+  EXPECT_THAT(attr->symbols, SizeIs(1));
 
-  EXPECT_NE(nullptr, test::GetValue<Id>(&table_, "id/foo"));
+  EXPECT_THAT(test::GetValue<Id>(&table_, "id/foo"), NotNull());
 
   Styleable* styleable = test::GetValue<Styleable>(&table_, "styleable/foo");
-  ASSERT_NE(styleable, nullptr);
-  ASSERT_EQ(3u, styleable->entries.size());
+  ASSERT_THAT(styleable, NotNull());
+  ASSERT_THAT(styleable->entries, SizeIs(3));
 
-  EXPECT_EQ(test::ParseNameOrDie("attr/bar"),
-            styleable->entries[0].name.value());
-  EXPECT_EQ(test::ParseNameOrDie("attr/bat"),
-            styleable->entries[1].name.value());
+  EXPECT_THAT(styleable->entries[0].name, Eq(make_value(test::ParseNameOrDie("attr/bar"))));
+  EXPECT_THAT(styleable->entries[1].name, Eq(make_value(test::ParseNameOrDie("attr/bat"))));
+  EXPECT_THAT(styleable->entries[2].name, Eq(make_value(test::ParseNameOrDie("attr/baz"))));
 }
 
 TEST_F(ResourceParserTest, ParsePrivateAttributesDeclareStyleable) {
-  std::string input =
-      "<declare-styleable name=\"foo\" "
-      "xmlns:privAndroid=\"http://schemas.android.com/apk/prv/res/android\">\n"
-      "  <attr name=\"*android:bar\" />\n"
-      "  <attr name=\"privAndroid:bat\" />\n"
-      "</declare-styleable>";
+  std::string input = R"(
+      <declare-styleable xmlns:privAndroid="http://schemas.android.com/apk/prv/res/android"
+          name="foo">
+        <attr name="*android:bar" />
+        <attr name="privAndroid:bat" />
+      </declare-styleable>)";
   ASSERT_TRUE(TestParse(input));
   Styleable* styleable = test::GetValue<Styleable>(&table_, "styleable/foo");
-  ASSERT_NE(nullptr, styleable);
-  ASSERT_EQ(2u, styleable->entries.size());
+  ASSERT_THAT(styleable, NotNull());
+  ASSERT_THAT(styleable->entries, SizeIs(2));
 
   EXPECT_TRUE(styleable->entries[0].private_reference);
-  AAPT_ASSERT_TRUE(styleable->entries[0].name);
-  EXPECT_EQ(std::string("android"), styleable->entries[0].name.value().package);
+  ASSERT_TRUE(styleable->entries[0].name);
+  EXPECT_THAT(styleable->entries[0].name.value().package, Eq("android"));
 
   EXPECT_TRUE(styleable->entries[1].private_reference);
-  AAPT_ASSERT_TRUE(styleable->entries[1].name);
-  EXPECT_EQ(std::string("android"), styleable->entries[1].name.value().package);
+  ASSERT_TRUE(styleable->entries[1].name);
+  EXPECT_THAT(styleable->entries[1].name.value().package, Eq("android"));
 }
 
 TEST_F(ResourceParserTest, ParseArray) {
-  std::string input =
-      "<array name=\"foo\">\n"
-      "  <item>@string/ref</item>\n"
-      "  <item>hey</item>\n"
-      "  <item>23</item>\n"
-      "</array>";
+  std::string input = R"(
+      <array name="foo">
+        <item>@string/ref</item>
+        <item>hey</item>
+        <item>23</item>
+      </array>)";
   ASSERT_TRUE(TestParse(input));
 
   Array* array = test::GetValue<Array>(&table_, "array/foo");
-  ASSERT_NE(array, nullptr);
-  ASSERT_EQ(3u, array->items.size());
+  ASSERT_THAT(array, NotNull());
+  ASSERT_THAT(array->elements, SizeIs(3));
 
-  EXPECT_NE(nullptr, ValueCast<Reference>(array->items[0].get()));
-  EXPECT_NE(nullptr, ValueCast<String>(array->items[1].get()));
-  EXPECT_NE(nullptr, ValueCast<BinaryPrimitive>(array->items[2].get()));
+  EXPECT_THAT(ValueCast<Reference>(array->elements[0].get()), NotNull());
+  EXPECT_THAT(ValueCast<String>(array->elements[1].get()), NotNull());
+  EXPECT_THAT(ValueCast<BinaryPrimitive>(array->elements[2].get()), NotNull());
 }
 
 TEST_F(ResourceParserTest, ParseStringArray) {
-  std::string input = R"EOF(
+  std::string input = R"(
       <string-array name="foo">
         <item>"Werk"</item>"
-      </string-array>)EOF";
+      </string-array>)";
   ASSERT_TRUE(TestParse(input));
-  EXPECT_NE(nullptr, test::GetValue<Array>(&table_, "array/foo"));
+  EXPECT_THAT(test::GetValue<Array>(&table_, "array/foo"), NotNull());
 }
 
 TEST_F(ResourceParserTest, ParseArrayWithFormat) {
-  std::string input = R"EOF(
+  std::string input = R"(
       <array name="foo" format="string">
         <item>100</item>
-      </array>)EOF";
+      </array>)";
   ASSERT_TRUE(TestParse(input));
 
   Array* array = test::GetValue<Array>(&table_, "array/foo");
-  ASSERT_NE(nullptr, array);
+  ASSERT_THAT(array, NotNull());
+  ASSERT_THAT(array->elements, SizeIs(1));
 
-  ASSERT_EQ(1u, array->items.size());
-
-  String* str = ValueCast<String>(array->items[0].get());
-  ASSERT_NE(nullptr, str);
-  EXPECT_EQ(std::string("100"), *str->value);
+  String* str = ValueCast<String>(array->elements[0].get());
+  ASSERT_THAT(str, NotNull());
+  EXPECT_THAT(*str, StrValueEq("100"));
 }
 
 TEST_F(ResourceParserTest, ParseArrayWithBadFormat) {
-  std::string input = R"EOF(
+  std::string input = R"(
       <array name="foo" format="integer">
         <item>Hi</item>
-      </array>)EOF";
+      </array>)";
   ASSERT_FALSE(TestParse(input));
 }
 
 TEST_F(ResourceParserTest, ParsePlural) {
-  std::string input =
-      "<plurals name=\"foo\">\n"
-      "  <item quantity=\"other\">apples</item>\n"
-      "  <item quantity=\"one\">apple</item>\n"
-      "</plurals>";
+  std::string input = R"(
+      <plurals name="foo">
+        <item quantity="other">apples</item>
+        <item quantity="one">apple</item>
+      </plurals>)";
   ASSERT_TRUE(TestParse(input));
 
   Plural* plural = test::GetValue<Plural>(&table_, "plurals/foo");
-  ASSERT_NE(nullptr, plural);
-  EXPECT_EQ(nullptr, plural->values[Plural::Zero]);
-  EXPECT_EQ(nullptr, plural->values[Plural::Two]);
-  EXPECT_EQ(nullptr, plural->values[Plural::Few]);
-  EXPECT_EQ(nullptr, plural->values[Plural::Many]);
+  ASSERT_THAT(plural, NotNull());
+  EXPECT_THAT(plural->values[Plural::Zero], IsNull());
+  EXPECT_THAT(plural->values[Plural::Two], IsNull());
+  EXPECT_THAT(plural->values[Plural::Few], IsNull());
+  EXPECT_THAT(plural->values[Plural::Many], IsNull());
 
-  EXPECT_NE(nullptr, plural->values[Plural::One]);
-  EXPECT_NE(nullptr, plural->values[Plural::Other]);
+  EXPECT_THAT(plural->values[Plural::One], NotNull());
+  EXPECT_THAT(plural->values[Plural::Other], NotNull());
 }
 
 TEST_F(ResourceParserTest, ParseCommentsWithResource) {
-  std::string input =
-      "<!--This is a comment-->\n"
-      "<string name=\"foo\">Hi</string>";
+  std::string input = R"(
+      <!--This is a comment-->
+      <string name="foo">Hi</string>)";
   ASSERT_TRUE(TestParse(input));
 
   String* value = test::GetValue<String>(&table_, "string/foo");
-  ASSERT_NE(nullptr, value);
-  EXPECT_EQ(value->GetComment(), "This is a comment");
+  ASSERT_THAT(value, NotNull());
+  EXPECT_THAT(value->GetComment(), Eq("This is a comment"));
 }
 
 TEST_F(ResourceParserTest, DoNotCombineMultipleComments) {
-  std::string input =
-      "<!--One-->\n"
-      "<!--Two-->\n"
-      "<string name=\"foo\">Hi</string>";
+  std::string input = R"(
+      <!--One-->
+      <!--Two-->
+      <string name="foo">Hi</string>)";
 
   ASSERT_TRUE(TestParse(input));
 
   String* value = test::GetValue<String>(&table_, "string/foo");
-  ASSERT_NE(nullptr, value);
-  EXPECT_EQ(value->GetComment(), "Two");
+  ASSERT_THAT(value, NotNull());
+  EXPECT_THAT(value->GetComment(), Eq("Two"));
 }
 
 TEST_F(ResourceParserTest, IgnoreCommentBeforeEndTag) {
-  std::string input =
-      "<!--One-->\n"
-      "<string name=\"foo\">\n"
-      "  Hi\n"
-      "<!--Two-->\n"
-      "</string>";
-
+  std::string input = R"(
+      <!--One-->
+      <string name="foo">
+        Hi
+      <!--Two-->
+      </string>)";
   ASSERT_TRUE(TestParse(input));
 
   String* value = test::GetValue<String>(&table_, "string/foo");
-  ASSERT_NE(nullptr, value);
-  EXPECT_EQ(value->GetComment(), "One");
+  ASSERT_THAT(value, NotNull());
+  EXPECT_THAT(value->GetComment(), Eq("One"));
 }
 
 TEST_F(ResourceParserTest, ParseNestedComments) {
   // We only care about declare-styleable and enum/flag attributes because
-  // comments
-  // from those end up in R.java
-  std::string input = R"EOF(
-        <declare-styleable name="foo">
-          <!-- The name of the bar -->
-          <attr name="barName" format="string|reference" />
-        </declare-styleable>
+  // comments from those end up in R.java
+  std::string input = R"(
+      <declare-styleable name="foo">
+        <!-- The name of the bar -->
+        <attr name="barName" format="string|reference" />
+      </declare-styleable>
 
-        <attr name="foo">
-          <!-- The very first -->
-          <enum name="one" value="1" />
-        </attr>)EOF";
+      <attr name="foo">
+        <!-- The very first -->
+        <enum name="one" value="1" />
+      </attr>)";
   ASSERT_TRUE(TestParse(input));
 
   Styleable* styleable = test::GetValue<Styleable>(&table_, "styleable/foo");
-  ASSERT_NE(nullptr, styleable);
-  ASSERT_EQ(1u, styleable->entries.size());
-
-  EXPECT_EQ(StringPiece("The name of the bar"),
-            styleable->entries.front().GetComment());
+  ASSERT_THAT(styleable, NotNull());
+  ASSERT_THAT(styleable->entries, SizeIs(1));
+  EXPECT_THAT(styleable->entries[0].GetComment(), Eq("The name of the bar"));
 
   Attribute* attr = test::GetValue<Attribute>(&table_, "attr/foo");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_EQ(1u, attr->symbols.size());
-
-  EXPECT_EQ(StringPiece("The very first"),
-            attr->symbols.front().symbol.GetComment());
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->symbols, SizeIs(1));
+  EXPECT_THAT(attr->symbols[0].symbol.GetComment(), Eq("The very first"));
 }
 
-/*
- * Declaring an ID as public should not require a separate definition
- * (as an ID has no value).
- */
+// Declaring an ID as public should not require a separate definition (as an ID has no value).
 TEST_F(ResourceParserTest, ParsePublicIdAsDefinition) {
-  std::string input = "<public type=\"id\" name=\"foo\"/>";
-  ASSERT_TRUE(TestParse(input));
-
-  Id* id = test::GetValue<Id>(&table_, "id/foo");
-  ASSERT_NE(nullptr, id);
+  ASSERT_TRUE(TestParse(R"(<public type="id" name="foo"/>)"));
+  ASSERT_THAT(test::GetValue<Id>(&table_, "id/foo"), NotNull());
 }
 
 TEST_F(ResourceParserTest, KeepAllProducts) {
-  std::string input = R"EOF(
-        <string name="foo" product="phone">hi</string>
-        <string name="foo" product="no-sdcard">ho</string>
-        <string name="bar" product="">wee</string>
-        <string name="baz">woo</string>
-        <string name="bit" product="phablet">hoot</string>
-        <string name="bot" product="default">yes</string>
-    )EOF";
+  std::string input = R"(
+      <string name="foo" product="phone">hi</string>
+      <string name="foo" product="no-sdcard">ho</string>
+      <string name="bar" product="">wee</string>
+      <string name="baz">woo</string>
+      <string name="bit" product="phablet">hoot</string>
+      <string name="bot" product="default">yes</string>)";
   ASSERT_TRUE(TestParse(input));
 
-  EXPECT_NE(nullptr, test::GetValueForConfigAndProduct<String>(
-                         &table_, "string/foo",
-                         ConfigDescription::DefaultConfig(), "phone"));
-  EXPECT_NE(nullptr, test::GetValueForConfigAndProduct<String>(
-                         &table_, "string/foo",
-                         ConfigDescription::DefaultConfig(), "no-sdcard"));
-  EXPECT_NE(nullptr,
-            test::GetValueForConfigAndProduct<String>(
-                &table_, "string/bar", ConfigDescription::DefaultConfig(), ""));
-  EXPECT_NE(nullptr,
-            test::GetValueForConfigAndProduct<String>(
-                &table_, "string/baz", ConfigDescription::DefaultConfig(), ""));
-  EXPECT_NE(nullptr, test::GetValueForConfigAndProduct<String>(
-                         &table_, "string/bit",
-                         ConfigDescription::DefaultConfig(), "phablet"));
-  EXPECT_NE(nullptr, test::GetValueForConfigAndProduct<String>(
-                         &table_, "string/bot",
-                         ConfigDescription::DefaultConfig(), "default"));
+  ASSERT_THAT(test::GetValueForConfigAndProduct<String>(&table_, "string/foo", ConfigDescription::DefaultConfig(), "phone"), NotNull());
+  ASSERT_THAT(test::GetValueForConfigAndProduct<String>(&table_, "string/foo",ConfigDescription::DefaultConfig(), "no-sdcard"), NotNull());
+  ASSERT_THAT(test::GetValueForConfigAndProduct<String>(&table_, "string/bar", ConfigDescription::DefaultConfig(), ""), NotNull());
+  ASSERT_THAT(test::GetValueForConfigAndProduct<String>(&table_, "string/baz", ConfigDescription::DefaultConfig(), ""), NotNull());
+  ASSERT_THAT(test::GetValueForConfigAndProduct<String>(&table_, "string/bit", ConfigDescription::DefaultConfig(), "phablet"), NotNull());
+  ASSERT_THAT(test::GetValueForConfigAndProduct<String>(&table_, "string/bot", ConfigDescription::DefaultConfig(), "default"), NotNull());
 }
 
 TEST_F(ResourceParserTest, AutoIncrementIdsInPublicGroup) {
-  std::string input = R"EOF(
-    <public-group type="attr" first-id="0x01010040">
-      <public name="foo" />
-      <public name="bar" />
-    </public-group>)EOF";
+  std::string input = R"(
+      <public-group type="attr" first-id="0x01010040">
+        <public name="foo" />
+        <public name="bar" />
+      </public-group>)";
   ASSERT_TRUE(TestParse(input));
 
-  Maybe<ResourceTable::SearchResult> result =
-      table_.FindResource(test::ParseNameOrDie("attr/foo"));
-  AAPT_ASSERT_TRUE(result);
+  Maybe<ResourceTable::SearchResult> result = table_.FindResource(test::ParseNameOrDie("attr/foo"));
+  ASSERT_TRUE(result);
 
-  AAPT_ASSERT_TRUE(result.value().package->id);
-  AAPT_ASSERT_TRUE(result.value().type->id);
-  AAPT_ASSERT_TRUE(result.value().entry->id);
+  ASSERT_TRUE(result.value().package->id);
+  ASSERT_TRUE(result.value().type->id);
+  ASSERT_TRUE(result.value().entry->id);
   ResourceId actual_id(result.value().package->id.value(),
                        result.value().type->id.value(),
                        result.value().entry->id.value());
-  EXPECT_EQ(ResourceId(0x01010040), actual_id);
+  EXPECT_THAT(actual_id, Eq(ResourceId(0x01010040)));
 
   result = table_.FindResource(test::ParseNameOrDie("attr/bar"));
-  AAPT_ASSERT_TRUE(result);
+  ASSERT_TRUE(result);
 
-  AAPT_ASSERT_TRUE(result.value().package->id);
-  AAPT_ASSERT_TRUE(result.value().type->id);
-  AAPT_ASSERT_TRUE(result.value().entry->id);
+  ASSERT_TRUE(result.value().package->id);
+  ASSERT_TRUE(result.value().type->id);
+  ASSERT_TRUE(result.value().entry->id);
   actual_id = ResourceId(result.value().package->id.value(),
                          result.value().type->id.value(),
                          result.value().entry->id.value());
-  EXPECT_EQ(ResourceId(0x01010041), actual_id);
+  EXPECT_THAT(actual_id, Eq(ResourceId(0x01010041)));
 }
 
 TEST_F(ResourceParserTest, ExternalTypesShouldOnlyBeReferences) {
-  std::string input =
-      R"EOF(<item type="layout" name="foo">@layout/bar</item>)EOF";
-  ASSERT_TRUE(TestParse(input));
-
-  input = R"EOF(<item type="layout" name="bar">"this is a string"</item>)EOF";
-  ASSERT_FALSE(TestParse(input));
+  ASSERT_TRUE(TestParse(R"(<item type="layout" name="foo">@layout/bar</item>)"));
+  ASSERT_FALSE(TestParse(R"(<item type="layout" name="bar">"this is a string"</item>)"));
 }
 
 TEST_F(ResourceParserTest, AddResourcesElementShouldAddEntryWithUndefinedSymbol) {
-  std::string input = R"EOF(<add-resource name="bar" type="string" />)EOF";
-  ASSERT_TRUE(TestParse(input));
+  ASSERT_TRUE(TestParse(R"(<add-resource name="bar" type="string" />)"));
 
   Maybe<ResourceTable::SearchResult> result =
       table_.FindResource(test::ParseNameOrDie("string/bar"));
-  AAPT_ASSERT_TRUE(result);
+  ASSERT_TRUE(result);
   const ResourceEntry* entry = result.value().entry;
-  ASSERT_NE(nullptr, entry);
-  EXPECT_EQ(SymbolState::kUndefined, entry->symbol_status.state);
+  ASSERT_THAT(entry, NotNull());
+  EXPECT_THAT(entry->symbol_status.state, Eq(SymbolState::kUndefined));
   EXPECT_TRUE(entry->symbol_status.allow_new);
 }
 
 TEST_F(ResourceParserTest, ParseItemElementWithFormat) {
-  std::string input = R"(<item name="foo" type="integer" format="float">0.3</item>)";
-  ASSERT_TRUE(TestParse(input));
+  ASSERT_TRUE(TestParse(R"(<item name="foo" type="integer" format="float">0.3</item>)"));
 
   BinaryPrimitive* val = test::GetValue<BinaryPrimitive>(&table_, "integer/foo");
   ASSERT_THAT(val, NotNull());
-  EXPECT_THAT(val->value.dataType, Eq(android::Res_value::TYPE_FLOAT));
+  EXPECT_THAT(val->value.dataType, Eq(Res_value::TYPE_FLOAT));
 
-  input = R"(<item name="bar" type="integer" format="fraction">100</item>)";
-  ASSERT_FALSE(TestParse(input));
+  ASSERT_FALSE(TestParse(R"(<item name="bar" type="integer" format="fraction">100</item>)"));
 }
 
 // An <item> without a format specifier accepts all types of values.
 TEST_F(ResourceParserTest, ParseItemElementWithoutFormat) {
-  std::string input = R"(<item name="foo" type="integer">100%p</item>)";
-  ASSERT_TRUE(TestParse(input));
+  ASSERT_TRUE(TestParse(R"(<item name="foo" type="integer">100%p</item>)"));
 
   BinaryPrimitive* val = test::GetValue<BinaryPrimitive>(&table_, "integer/foo");
   ASSERT_THAT(val, NotNull());
-  EXPECT_THAT(val->value.dataType, Eq(android::Res_value::TYPE_FRACTION));
+  EXPECT_THAT(val->value.dataType, Eq(Res_value::TYPE_FRACTION));
 }
 
 TEST_F(ResourceParserTest, ParseConfigVaryingItem) {
-  std::string input = R"EOF(<item name="foo" type="configVarying">Hey</item>)EOF";
-  ASSERT_TRUE(TestParse(input));
-  ASSERT_NE(nullptr, test::GetValue<String>(&table_, "configVarying/foo"));
+  ASSERT_TRUE(TestParse(R"(<item name="foo" type="configVarying">Hey</item>)"));
+  ASSERT_THAT(test::GetValue<String>(&table_, "configVarying/foo"), NotNull());
 }
 
 TEST_F(ResourceParserTest, ParseBagElement) {
-  std::string input =
-      R"EOF(<bag name="bag" type="configVarying"><item name="test">Hello!</item></bag>)EOF";
+  std::string input = R"(
+      <bag name="bag" type="configVarying">
+        <item name="test">Hello!</item>
+      </bag>)";
   ASSERT_TRUE(TestParse(input));
 
   Style* val = test::GetValue<Style>(&table_, "configVarying/bag");
-  ASSERT_NE(nullptr, val);
+  ASSERT_THAT(val, NotNull());
+  ASSERT_THAT(val->entries, SizeIs(1));
 
-  ASSERT_EQ(1u, val->entries.size());
-  EXPECT_EQ(Reference(test::ParseNameOrDie("attr/test")), val->entries[0].key);
-  EXPECT_NE(nullptr, ValueCast<RawString>(val->entries[0].value.get()));
+  EXPECT_THAT(val->entries[0].key, Eq(Reference(test::ParseNameOrDie("attr/test"))));
+  EXPECT_THAT(ValueCast<RawString>(val->entries[0].value.get()), NotNull());
 }
 
 TEST_F(ResourceParserTest, ParseElementWithNoValue) {
@@ -840,12 +783,11 @@
 
   String* str = test::GetValue<String>(&table_, "string/foo");
   ASSERT_THAT(str, NotNull());
-  EXPECT_THAT(*str->value, Eq(""));
+  EXPECT_THAT(*str, StrValueEq(""));
 }
 
 TEST_F(ResourceParserTest, ParsePlatformIndependentNewline) {
-  std::string input = R"(<string name="foo">%1$s %n %2$s</string>)";
-  ASSERT_TRUE(TestParse(input));
+  ASSERT_TRUE(TestParse(R"(<string name="foo">%1$s %n %2$s</string>)"));
 }
 
 }  // namespace aapt
diff --git a/tools/aapt2/ResourceTable.cpp b/tools/aapt2/ResourceTable.cpp
index 168004f..ab59560 100644
--- a/tools/aapt2/ResourceTable.cpp
+++ b/tools/aapt2/ResourceTable.cpp
@@ -15,20 +15,24 @@
  */
 
 #include "ResourceTable.h"
-#include "ConfigDescription.h"
-#include "NameMangler.h"
-#include "ResourceValues.h"
-#include "ValueVisitor.h"
-#include "util/Util.h"
 
-#include <android-base/logging.h>
-#include <androidfw/ResourceTypes.h>
 #include <algorithm>
 #include <memory>
 #include <string>
 #include <tuple>
 
-using android::StringPiece;
+#include "android-base/logging.h"
+#include "androidfw/ResourceTypes.h"
+
+#include "ConfigDescription.h"
+#include "NameMangler.h"
+#include "ResourceValues.h"
+#include "ValueVisitor.h"
+#include "text/Unicode.h"
+#include "util/Util.h"
+
+using ::aapt::text::IsValidResourceEntryName;
+using ::android::StringPiece;
 
 namespace aapt {
 
@@ -283,12 +287,9 @@
   return CollisionResult::kConflict;
 }
 
-static constexpr const char* kValidNameChars = "._-";
-
 static StringPiece ValidateName(const StringPiece& name) {
-  auto iter = util::FindNonAlphaNumericAndNotInSet(name, kValidNameChars);
-  if (iter != name.end()) {
-    return StringPiece(iter, 1);
+  if (!IsValidResourceEntryName(name)) {
+    return name;
   }
   return {};
 }
diff --git a/tools/aapt2/ResourceTable_test.cpp b/tools/aapt2/ResourceTable_test.cpp
index e2b37be..2a3c131 100644
--- a/tools/aapt2/ResourceTable_test.cpp
+++ b/tools/aapt2/ResourceTable_test.cpp
@@ -24,6 +24,8 @@
 #include <ostream>
 #include <string>
 
+using ::testing::NotNull;
+
 namespace aapt {
 
 TEST(ResourceTableTest, FailToAddResourceWithBadName) {
@@ -56,7 +58,7 @@
       test::ValueBuilder<Id>().SetSource("test/path/file.xml", 23u).Build(),
       test::GetDiagnostics()));
 
-  ASSERT_NE(nullptr, test::GetValue<Id>(&table, "android:attr/id"));
+  EXPECT_THAT(test::GetValue<Id>(&table, "android:attr/id"), NotNull());
 }
 
 TEST(ResourceTableTest, AddMultipleResources) {
@@ -88,11 +90,10 @@
           .Build(),
       test::GetDiagnostics()));
 
-  ASSERT_NE(nullptr, test::GetValue<Id>(&table, "android:attr/layout_width"));
-  ASSERT_NE(nullptr, test::GetValue<Id>(&table, "android:attr/id"));
-  ASSERT_NE(nullptr, test::GetValue<Id>(&table, "android:string/ok"));
-  ASSERT_NE(nullptr, test::GetValueForConfig<BinaryPrimitive>(
-                         &table, "android:string/ok", language_config));
+  EXPECT_THAT(test::GetValue<Id>(&table, "android:attr/layout_width"), NotNull());
+  EXPECT_THAT(test::GetValue<Id>(&table, "android:attr/id"), NotNull());
+  EXPECT_THAT(test::GetValue<Id>(&table, "android:string/ok"), NotNull());
+  EXPECT_THAT(test::GetValueForConfig<BinaryPrimitive>(&table, "android:string/ok", language_config), NotNull());
 }
 
 TEST(ResourceTableTest, OverrideWeakResourceValue) {
@@ -103,7 +104,7 @@
       util::make_unique<Attribute>(true), test::GetDiagnostics()));
 
   Attribute* attr = test::GetValue<Attribute>(&table, "android:attr/foo");
-  ASSERT_NE(nullptr, attr);
+  ASSERT_THAT(attr, NotNull());
   EXPECT_TRUE(attr->IsWeak());
 
   ASSERT_TRUE(table.AddResource(
@@ -111,7 +112,7 @@
       util::make_unique<Attribute>(false), test::GetDiagnostics()));
 
   attr = test::GetValue<Attribute>(&table, "android:attr/foo");
-  ASSERT_NE(nullptr, attr);
+  ASSERT_THAT(attr, NotNull());
   EXPECT_FALSE(attr->IsWeak());
 }
 
@@ -127,16 +128,12 @@
                                 util::make_unique<Id>(),
                                 test::GetDiagnostics()));
 
-  EXPECT_NE(nullptr, test::GetValueForConfigAndProduct<Id>(
-                         &table, "android:string/foo",
-                         test::ParseConfigOrDie("land"), "tablet"));
-  EXPECT_NE(nullptr, test::GetValueForConfigAndProduct<Id>(
-                         &table, "android:string/foo",
-                         test::ParseConfigOrDie("land"), "phone"));
+  EXPECT_THAT(test::GetValueForConfigAndProduct<Id>(&table, "android:string/foo",test::ParseConfigOrDie("land"), "tablet"), NotNull());
+  EXPECT_THAT(test::GetValueForConfigAndProduct<Id>(&table, "android:string/foo",test::ParseConfigOrDie("land"), "phone"), NotNull());
 
   Maybe<ResourceTable::SearchResult> sr =
       table.FindResource(test::ParseNameOrDie("android:string/foo"));
-  AAPT_ASSERT_TRUE(sr);
+  ASSERT_TRUE(sr);
   std::vector<ResourceConfigValue*> values =
       sr.value().entry->FindAllValues(test::ParseConfigOrDie("land"));
   ASSERT_EQ(2u, values.size());
diff --git a/tools/aapt2/ResourceUtils.cpp b/tools/aapt2/ResourceUtils.cpp
index deeef6e..f193fe0 100644
--- a/tools/aapt2/ResourceUtils.cpp
+++ b/tools/aapt2/ResourceUtils.cpp
@@ -512,7 +512,7 @@
 }
 
 std::unique_ptr<BinaryPrimitive> TryParseInt(const StringPiece& str) {
-  std::u16string str16 = util::Utf8ToUtf16(str);
+  std::u16string str16 = util::Utf8ToUtf16(util::TrimWhitespace(str));
   android::Res_value value;
   if (!android::ResTable::stringToInt(str16.data(), str16.size(), &value)) {
     return {};
@@ -521,7 +521,7 @@
 }
 
 std::unique_ptr<BinaryPrimitive> TryParseFloat(const StringPiece& str) {
-  std::u16string str16 = util::Utf8ToUtf16(str);
+  std::u16string str16 = util::Utf8ToUtf16(util::TrimWhitespace(str));
   android::Res_value value;
   if (!android::ResTable::stringToFloat(str16.data(), str16.size(), &value)) {
     return {};
@@ -700,7 +700,7 @@
           spans++;
         }
         return util::make_unique<StyledString>(dst_pool->MakeRef(
-            style_str, StringPool::Context(StringPool::Context::kStylePriority, config)));
+            style_str, StringPool::Context(StringPool::Context::kNormalPriority, config)));
       } else {
         if (type != ResourceType::kString && util::StartsWith(str, "res/")) {
           // This must be a FileReference.
diff --git a/tools/aapt2/ResourceUtils_test.cpp b/tools/aapt2/ResourceUtils_test.cpp
index cdc34f1..e637c3e 100644
--- a/tools/aapt2/ResourceUtils_test.cpp
+++ b/tools/aapt2/ResourceUtils_test.cpp
@@ -20,96 +20,90 @@
 #include "test/Test.h"
 
 using ::aapt::test::ValueEq;
+using ::android::Res_value;
+using ::android::ResTable_map;
+using ::testing::Eq;
+using ::testing::NotNull;
 using ::testing::Pointee;
 
 namespace aapt {
 
 TEST(ResourceUtilsTest, ParseBool) {
-  EXPECT_EQ(Maybe<bool>(true), ResourceUtils::ParseBool("true"));
-  EXPECT_EQ(Maybe<bool>(true), ResourceUtils::ParseBool("TRUE"));
-  EXPECT_EQ(Maybe<bool>(true), ResourceUtils::ParseBool("True"));
-  EXPECT_EQ(Maybe<bool>(false), ResourceUtils::ParseBool("false"));
-  EXPECT_EQ(Maybe<bool>(false), ResourceUtils::ParseBool("FALSE"));
-  EXPECT_EQ(Maybe<bool>(false), ResourceUtils::ParseBool("False"));
+  EXPECT_THAT(ResourceUtils::ParseBool("true"), Eq(Maybe<bool>(true)));
+  EXPECT_THAT(ResourceUtils::ParseBool("TRUE"), Eq(Maybe<bool>(true)));
+  EXPECT_THAT(ResourceUtils::ParseBool("True"), Eq(Maybe<bool>(true)));
+
+  EXPECT_THAT(ResourceUtils::ParseBool("false"), Eq(Maybe<bool>(false)));
+  EXPECT_THAT(ResourceUtils::ParseBool("FALSE"), Eq(Maybe<bool>(false)));
+  EXPECT_THAT(ResourceUtils::ParseBool("False"), Eq(Maybe<bool>(false)));
+
+  EXPECT_THAT(ResourceUtils::ParseBool(" False\n "), Eq(Maybe<bool>(false)));
 }
 
 TEST(ResourceUtilsTest, ParseResourceName) {
   ResourceNameRef actual;
   bool actual_priv = false;
-  EXPECT_TRUE(ResourceUtils::ParseResourceName("android:color/foo", &actual,
-                                               &actual_priv));
-  EXPECT_EQ(ResourceNameRef("android", ResourceType::kColor, "foo"), actual);
+  EXPECT_TRUE(ResourceUtils::ParseResourceName("android:color/foo", &actual, &actual_priv));
+  EXPECT_THAT(actual, Eq(ResourceNameRef("android", ResourceType::kColor, "foo")));
   EXPECT_FALSE(actual_priv);
 
-  EXPECT_TRUE(
-      ResourceUtils::ParseResourceName("color/foo", &actual, &actual_priv));
-  EXPECT_EQ(ResourceNameRef({}, ResourceType::kColor, "foo"), actual);
+  EXPECT_TRUE(ResourceUtils::ParseResourceName("color/foo", &actual, &actual_priv));
+  EXPECT_THAT(actual, Eq(ResourceNameRef({}, ResourceType::kColor, "foo")));
   EXPECT_FALSE(actual_priv);
 
-  EXPECT_TRUE(ResourceUtils::ParseResourceName("*android:color/foo", &actual,
-                                               &actual_priv));
-  EXPECT_EQ(ResourceNameRef("android", ResourceType::kColor, "foo"), actual);
+  EXPECT_TRUE(ResourceUtils::ParseResourceName("*android:color/foo", &actual, &actual_priv));
+  EXPECT_THAT(actual, Eq(ResourceNameRef("android", ResourceType::kColor, "foo")));
   EXPECT_TRUE(actual_priv);
 
   EXPECT_FALSE(ResourceUtils::ParseResourceName(android::StringPiece(), &actual, &actual_priv));
 }
 
 TEST(ResourceUtilsTest, ParseReferenceWithNoPackage) {
-  ResourceNameRef expected({}, ResourceType::kColor, "foo");
   ResourceNameRef actual;
   bool create = false;
   bool private_ref = false;
-  EXPECT_TRUE(ResourceUtils::ParseReference("@color/foo", &actual, &create,
-                                            &private_ref));
-  EXPECT_EQ(expected, actual);
+  EXPECT_TRUE(ResourceUtils::ParseReference("@color/foo", &actual, &create, &private_ref));
+  EXPECT_THAT(actual, Eq(ResourceNameRef({}, ResourceType::kColor, "foo")));
   EXPECT_FALSE(create);
   EXPECT_FALSE(private_ref);
 }
 
 TEST(ResourceUtilsTest, ParseReferenceWithPackage) {
-  ResourceNameRef expected("android", ResourceType::kColor, "foo");
   ResourceNameRef actual;
   bool create = false;
   bool private_ref = false;
-  EXPECT_TRUE(ResourceUtils::ParseReference("@android:color/foo", &actual,
-                                            &create, &private_ref));
-  EXPECT_EQ(expected, actual);
+  EXPECT_TRUE(ResourceUtils::ParseReference("@android:color/foo", &actual, &create, &private_ref));
+  EXPECT_THAT(actual, Eq(ResourceNameRef("android", ResourceType::kColor, "foo")));
   EXPECT_FALSE(create);
   EXPECT_FALSE(private_ref);
 }
 
 TEST(ResourceUtilsTest, ParseReferenceWithSurroundingWhitespace) {
-  ResourceNameRef expected("android", ResourceType::kColor, "foo");
   ResourceNameRef actual;
   bool create = false;
   bool private_ref = false;
-  EXPECT_TRUE(ResourceUtils::ParseReference("\t @android:color/foo\n \n\t",
-                                            &actual, &create, &private_ref));
-  EXPECT_EQ(expected, actual);
+  EXPECT_TRUE(ResourceUtils::ParseReference("\t @android:color/foo\n \n\t", &actual, &create, &private_ref));
+  EXPECT_THAT(actual, Eq(ResourceNameRef("android", ResourceType::kColor, "foo")));
   EXPECT_FALSE(create);
   EXPECT_FALSE(private_ref);
 }
 
 TEST(ResourceUtilsTest, ParseAutoCreateIdReference) {
-  ResourceNameRef expected("android", ResourceType::kId, "foo");
   ResourceNameRef actual;
   bool create = false;
   bool private_ref = false;
-  EXPECT_TRUE(ResourceUtils::ParseReference("@+android:id/foo", &actual,
-                                            &create, &private_ref));
-  EXPECT_EQ(expected, actual);
+  EXPECT_TRUE(ResourceUtils::ParseReference("@+android:id/foo", &actual, &create, &private_ref));
+  EXPECT_THAT(actual, Eq(ResourceNameRef("android", ResourceType::kId, "foo")));
   EXPECT_TRUE(create);
   EXPECT_FALSE(private_ref);
 }
 
 TEST(ResourceUtilsTest, ParsePrivateReference) {
-  ResourceNameRef expected("android", ResourceType::kId, "foo");
   ResourceNameRef actual;
   bool create = false;
   bool private_ref = false;
-  EXPECT_TRUE(ResourceUtils::ParseReference("@*android:id/foo", &actual,
-                                            &create, &private_ref));
-  EXPECT_EQ(expected, actual);
+  EXPECT_TRUE(ResourceUtils::ParseReference("@*android:id/foo", &actual, &create, &private_ref));
+  EXPECT_THAT(actual, Eq(ResourceNameRef("android", ResourceType::kId, "foo")));
   EXPECT_FALSE(create);
   EXPECT_TRUE(private_ref);
 }
@@ -118,8 +112,7 @@
   bool create = false;
   bool private_ref = false;
   ResourceNameRef actual;
-  EXPECT_FALSE(ResourceUtils::ParseReference("@+android:color/foo", &actual,
-                                             &create, &private_ref));
+  EXPECT_FALSE(ResourceUtils::ParseReference("@+android:color/foo", &actual, &create, &private_ref));
 }
 
 TEST(ResourceUtilsTest, ParseAttributeReferences) {
@@ -143,82 +136,81 @@
 }
 
 TEST(ResourceUtilsTest, ParseStyleParentReference) {
-  const ResourceName kAndroidStyleFooName("android", ResourceType::kStyle,
-                                          "foo");
+  const ResourceName kAndroidStyleFooName("android", ResourceType::kStyle, "foo");
   const ResourceName kStyleFooName({}, ResourceType::kStyle, "foo");
 
   std::string err_str;
-  Maybe<Reference> ref =
-      ResourceUtils::ParseStyleParentReference("@android:style/foo", &err_str);
-  AAPT_ASSERT_TRUE(ref);
-  EXPECT_EQ(ref.value().name.value(), kAndroidStyleFooName);
+  Maybe<Reference> ref = ResourceUtils::ParseStyleParentReference("@android:style/foo", &err_str);
+  ASSERT_TRUE(ref);
+  EXPECT_THAT(ref.value().name, Eq(make_value(kAndroidStyleFooName)));
 
   ref = ResourceUtils::ParseStyleParentReference("@style/foo", &err_str);
-  AAPT_ASSERT_TRUE(ref);
-  EXPECT_EQ(ref.value().name.value(), kStyleFooName);
+  ASSERT_TRUE(ref);
+  EXPECT_THAT(ref.value().name, Eq(make_value(kStyleFooName)));
 
-  ref =
-      ResourceUtils::ParseStyleParentReference("?android:style/foo", &err_str);
-  AAPT_ASSERT_TRUE(ref);
-  EXPECT_EQ(ref.value().name.value(), kAndroidStyleFooName);
+  ref = ResourceUtils::ParseStyleParentReference("?android:style/foo", &err_str);
+  ASSERT_TRUE(ref);
+  EXPECT_THAT(ref.value().name, Eq(make_value(kAndroidStyleFooName)));
 
   ref = ResourceUtils::ParseStyleParentReference("?style/foo", &err_str);
-  AAPT_ASSERT_TRUE(ref);
-  EXPECT_EQ(ref.value().name.value(), kStyleFooName);
+  ASSERT_TRUE(ref);
+  EXPECT_THAT(ref.value().name, Eq(make_value(kStyleFooName)));
 
   ref = ResourceUtils::ParseStyleParentReference("android:style/foo", &err_str);
-  AAPT_ASSERT_TRUE(ref);
-  EXPECT_EQ(ref.value().name.value(), kAndroidStyleFooName);
+  ASSERT_TRUE(ref);
+  EXPECT_THAT(ref.value().name, Eq(make_value(kAndroidStyleFooName)));
 
   ref = ResourceUtils::ParseStyleParentReference("android:foo", &err_str);
-  AAPT_ASSERT_TRUE(ref);
-  EXPECT_EQ(ref.value().name.value(), kAndroidStyleFooName);
+  ASSERT_TRUE(ref);
+  EXPECT_THAT(ref.value().name, Eq(make_value(kAndroidStyleFooName)));
 
   ref = ResourceUtils::ParseStyleParentReference("@android:foo", &err_str);
-  AAPT_ASSERT_TRUE(ref);
-  EXPECT_EQ(ref.value().name.value(), kAndroidStyleFooName);
+  ASSERT_TRUE(ref);
+  EXPECT_THAT(ref.value().name, Eq(make_value(kAndroidStyleFooName)));
 
   ref = ResourceUtils::ParseStyleParentReference("foo", &err_str);
-  AAPT_ASSERT_TRUE(ref);
-  EXPECT_EQ(ref.value().name.value(), kStyleFooName);
+  ASSERT_TRUE(ref);
+  EXPECT_THAT(ref.value().name, Eq(make_value(kStyleFooName)));
 
-  ref =
-      ResourceUtils::ParseStyleParentReference("*android:style/foo", &err_str);
-  AAPT_ASSERT_TRUE(ref);
-  EXPECT_EQ(ref.value().name.value(), kAndroidStyleFooName);
+  ref = ResourceUtils::ParseStyleParentReference("*android:style/foo", &err_str);
+  ASSERT_TRUE(ref);
+  EXPECT_THAT(ref.value().name, Eq(make_value(kAndroidStyleFooName)));
   EXPECT_TRUE(ref.value().private_reference);
 }
 
 TEST(ResourceUtilsTest, ParseEmptyFlag) {
   std::unique_ptr<Attribute> attr =
       test::AttributeBuilder(false)
-          .SetTypeMask(android::ResTable_map::TYPE_FLAGS)
+          .SetTypeMask(ResTable_map::TYPE_FLAGS)
           .AddItem("one", 0x01)
           .AddItem("two", 0x02)
           .Build();
 
-  std::unique_ptr<BinaryPrimitive> result =
-      ResourceUtils::TryParseFlagSymbol(attr.get(), "");
-  ASSERT_NE(nullptr, result);
-  EXPECT_EQ(0u, result->value.data);
+  std::unique_ptr<BinaryPrimitive> result = ResourceUtils::TryParseFlagSymbol(attr.get(), "");
+  ASSERT_THAT(result, NotNull());
+  EXPECT_THAT(result->value.data, Eq(0u));
 }
 
 TEST(ResourceUtilsTest, NullIsEmptyReference) {
-  auto null_value = ResourceUtils::MakeNull();
-  ASSERT_THAT(null_value, Pointee(ValueEq(Reference())));
-
-  auto value = ResourceUtils::TryParseNullOrEmpty("@null");
-  ASSERT_THAT(value, Pointee(ValueEq(Reference())));
+  ASSERT_THAT(ResourceUtils::MakeNull(), Pointee(ValueEq(Reference())));
+  ASSERT_THAT(ResourceUtils::TryParseNullOrEmpty("@null"), Pointee(ValueEq(Reference())));
 }
 
 TEST(ResourceUtilsTest, EmptyIsBinaryPrimitive) {
-  auto empty_value = ResourceUtils::MakeEmpty();
-  ASSERT_THAT(empty_value, Pointee(ValueEq(BinaryPrimitive(android::Res_value::TYPE_NULL,
-                                                           android::Res_value::DATA_NULL_EMPTY))));
+  ASSERT_THAT(ResourceUtils::MakeEmpty(), Pointee(ValueEq(BinaryPrimitive(Res_value::TYPE_NULL, Res_value::DATA_NULL_EMPTY))));
+  ASSERT_THAT(ResourceUtils::TryParseNullOrEmpty("@empty"), Pointee(ValueEq(BinaryPrimitive(Res_value::TYPE_NULL, Res_value::DATA_NULL_EMPTY))));
+}
 
-  auto value = ResourceUtils::TryParseNullOrEmpty("@empty");
-  ASSERT_THAT(value, Pointee(ValueEq(BinaryPrimitive(android::Res_value::TYPE_NULL,
-                                                     android::Res_value::DATA_NULL_EMPTY))));
+TEST(ResourceUtilsTest, ItemsWithWhitespaceAreParsedCorrectly) {
+  EXPECT_THAT(ResourceUtils::TryParseItemForAttribute(" 12\n   ", ResTable_map::TYPE_INTEGER),
+              Pointee(ValueEq(BinaryPrimitive(Res_value::TYPE_INT_DEC, 12u))));
+  EXPECT_THAT(ResourceUtils::TryParseItemForAttribute(" true\n   ", ResTable_map::TYPE_BOOLEAN),
+              Pointee(ValueEq(BinaryPrimitive(Res_value::TYPE_INT_BOOLEAN, 0xffffffffu))));
+
+  const float expected_float = 12.0f;
+  const uint32_t expected_float_flattened = *(uint32_t*)&expected_float;
+  EXPECT_THAT(ResourceUtils::TryParseItemForAttribute(" 12.0\n   ", ResTable_map::TYPE_FLOAT),
+              Pointee(ValueEq(BinaryPrimitive(Res_value::TYPE_FLOAT, expected_float_flattened))));
 }
 
 }  // namespace aapt
diff --git a/tools/aapt2/ResourceValues.cpp b/tools/aapt2/ResourceValues.cpp
index e808984..0fe1a1f 100644
--- a/tools/aapt2/ResourceValues.cpp
+++ b/tools/aapt2/ResourceValues.cpp
@@ -55,7 +55,7 @@
 }
 
 RawString* RawString::Clone(StringPool* new_pool) const {
-  RawString* rs = new RawString(new_pool->MakeRef(*value));
+  RawString* rs = new RawString(new_pool->MakeRef(value));
   rs->comment_ = comment_;
   rs->source_ = source_;
   return rs;
@@ -95,7 +95,7 @@
 bool Reference::Flatten(android::Res_value* out_value) const {
   const ResourceId resid = id.value_or_default(ResourceId(0));
   const bool dynamic = resid.is_valid_dynamic() && resid.package_id() != kFrameworkPackageId &&
-                       resid.package_id() != kAppPackageId;
+                       resid.package_id() < kAppPackageId;
 
   if (reference_type == Reference::Type::kResource) {
     if (dynamic) {
@@ -197,7 +197,7 @@
 }
 
 String* String::Clone(StringPool* new_pool) const {
-  String* str = new String(new_pool->MakeRef(*value));
+  String* str = new String(new_pool->MakeRef(value));
   str->comment_ = comment_;
   str->source_ = source_;
   str->untranslatable_sections = untranslatable_sections;
@@ -253,10 +253,9 @@
 }
 
 void StyledString::Print(std::ostream* out) const {
-  *out << "(styled string) \"" << *value->str << "\"";
+  *out << "(styled string) \"" << value->value << "\"";
   for (const StringPool::Span& span : value->spans) {
-    *out << " " << *span.name << ":" << span.first_char << ","
-         << span.last_char;
+    *out << " " << *span.name << ":" << span.first_char << "," << span.last_char;
   }
 }
 
@@ -281,7 +280,7 @@
 }
 
 FileReference* FileReference::Clone(StringPool* new_pool) const {
-  FileReference* fr = new FileReference(new_pool->MakeRef(*path));
+  FileReference* fr = new FileReference(new_pool->MakeRef(path));
   fr->file = file;
   fr->comment_ = comment_;
   fr->source_ = source_;
@@ -533,75 +532,119 @@
   }
 }
 
-static void BuildAttributeMismatchMessage(DiagMessage* msg,
-                                          const Attribute* attr,
-                                          const Item* value) {
-  *msg << "expected";
-  if (attr->type_mask & android::ResTable_map::TYPE_BOOLEAN) {
-    *msg << " boolean";
+static void BuildAttributeMismatchMessage(const Attribute& attr, const Item& value,
+                                          DiagMessage* out_msg) {
+  *out_msg << "expected";
+  if (attr.type_mask & android::ResTable_map::TYPE_BOOLEAN) {
+    *out_msg << " boolean";
   }
 
-  if (attr->type_mask & android::ResTable_map::TYPE_COLOR) {
-    *msg << " color";
+  if (attr.type_mask & android::ResTable_map::TYPE_COLOR) {
+    *out_msg << " color";
   }
 
-  if (attr->type_mask & android::ResTable_map::TYPE_DIMENSION) {
-    *msg << " dimension";
+  if (attr.type_mask & android::ResTable_map::TYPE_DIMENSION) {
+    *out_msg << " dimension";
   }
 
-  if (attr->type_mask & android::ResTable_map::TYPE_ENUM) {
-    *msg << " enum";
+  if (attr.type_mask & android::ResTable_map::TYPE_ENUM) {
+    *out_msg << " enum";
   }
 
-  if (attr->type_mask & android::ResTable_map::TYPE_FLAGS) {
-    *msg << " flags";
+  if (attr.type_mask & android::ResTable_map::TYPE_FLAGS) {
+    *out_msg << " flags";
   }
 
-  if (attr->type_mask & android::ResTable_map::TYPE_FLOAT) {
-    *msg << " float";
+  if (attr.type_mask & android::ResTable_map::TYPE_FLOAT) {
+    *out_msg << " float";
   }
 
-  if (attr->type_mask & android::ResTable_map::TYPE_FRACTION) {
-    *msg << " fraction";
+  if (attr.type_mask & android::ResTable_map::TYPE_FRACTION) {
+    *out_msg << " fraction";
   }
 
-  if (attr->type_mask & android::ResTable_map::TYPE_INTEGER) {
-    *msg << " integer";
+  if (attr.type_mask & android::ResTable_map::TYPE_INTEGER) {
+    *out_msg << " integer";
   }
 
-  if (attr->type_mask & android::ResTable_map::TYPE_REFERENCE) {
-    *msg << " reference";
+  if (attr.type_mask & android::ResTable_map::TYPE_REFERENCE) {
+    *out_msg << " reference";
   }
 
-  if (attr->type_mask & android::ResTable_map::TYPE_STRING) {
-    *msg << " string";
+  if (attr.type_mask & android::ResTable_map::TYPE_STRING) {
+    *out_msg << " string";
   }
 
-  *msg << " but got " << *value;
+  *out_msg << " but got " << value;
 }
 
-bool Attribute::Matches(const Item* item, DiagMessage* out_msg) const {
+bool Attribute::Matches(const Item& item, DiagMessage* out_msg) const {
+  constexpr const uint32_t TYPE_ENUM = android::ResTable_map::TYPE_ENUM;
+  constexpr const uint32_t TYPE_FLAGS = android::ResTable_map::TYPE_FLAGS;
+  constexpr const uint32_t TYPE_INTEGER = android::ResTable_map::TYPE_INTEGER;
+  constexpr const uint32_t TYPE_REFERENCE = android::ResTable_map::TYPE_REFERENCE;
+
   android::Res_value val = {};
-  item->Flatten(&val);
+  item.Flatten(&val);
+
+  const uint32_t flattened_data = util::DeviceToHost32(val.data);
 
   // Always allow references.
-  const uint32_t mask = type_mask | android::ResTable_map::TYPE_REFERENCE;
-  if (!(mask & ResourceUtils::AndroidTypeToAttributeTypeMask(val.dataType))) {
+  const uint32_t actual_type = ResourceUtils::AndroidTypeToAttributeTypeMask(val.dataType);
+
+  // Only one type must match between the actual and expected.
+  if ((actual_type & (type_mask | TYPE_REFERENCE)) == 0) {
     if (out_msg) {
-      BuildAttributeMismatchMessage(out_msg, this, item);
+      BuildAttributeMismatchMessage(*this, item, out_msg);
     }
     return false;
+  }
 
-  } else if (ResourceUtils::AndroidTypeToAttributeTypeMask(val.dataType) &
-             android::ResTable_map::TYPE_INTEGER) {
-    if (static_cast<int32_t>(util::DeviceToHost32(val.data)) < min_int) {
+  // Enums and flags are encoded as integers, so check them first before doing any range checks.
+  if ((type_mask & TYPE_ENUM) != 0 && (actual_type & TYPE_ENUM) != 0) {
+    for (const Symbol& s : symbols) {
+      if (flattened_data == s.value) {
+        return true;
+      }
+    }
+
+    // If the attribute accepts integers, we can't fail here.
+    if ((type_mask & TYPE_INTEGER) == 0) {
       if (out_msg) {
-        *out_msg << *item << " is less than minimum integer " << min_int;
+        *out_msg << item << " is not a valid enum";
       }
       return false;
-    } else if (static_cast<int32_t>(util::DeviceToHost32(val.data)) > max_int) {
+    }
+  }
+
+  if ((type_mask & TYPE_FLAGS) != 0 && (actual_type & TYPE_FLAGS) != 0) {
+    uint32_t mask = 0u;
+    for (const Symbol& s : symbols) {
+      mask |= s.value;
+    }
+
+    // Check if the flattened data is covered by the flag bit mask.
+    // If the attribute accepts integers, we can't fail here.
+    if ((mask & flattened_data) == flattened_data) {
+      return true;
+    } else if ((type_mask & TYPE_INTEGER) == 0) {
       if (out_msg) {
-        *out_msg << *item << " is greater than maximum integer " << max_int;
+        *out_msg << item << " is not a valid flag";
+      }
+      return false;
+    }
+  }
+
+  // Finally check the integer range of the value.
+  if ((type_mask & TYPE_INTEGER) != 0 && (actual_type & TYPE_INTEGER) != 0) {
+    if (static_cast<int32_t>(flattened_data) < min_int) {
+      if (out_msg) {
+        *out_msg << item << " is less than minimum integer " << min_int;
+      }
+      return false;
+    } else if (static_cast<int32_t>(flattened_data) > max_int) {
+      if (out_msg) {
+        *out_msg << item << " is greater than maximum integer " << max_int;
       }
       return false;
     }
@@ -762,13 +805,12 @@
     return false;
   }
 
-  if (items.size() != other->items.size()) {
+  if (elements.size() != other->elements.size()) {
     return false;
   }
 
-  return std::equal(items.begin(), items.end(), other->items.begin(),
-                    [](const std::unique_ptr<Item>& a,
-                       const std::unique_ptr<Item>& b) -> bool {
+  return std::equal(elements.begin(), elements.end(), other->elements.begin(),
+                    [](const std::unique_ptr<Item>& a, const std::unique_ptr<Item>& b) -> bool {
                       return a->Equals(b.get());
                     });
 }
@@ -777,14 +819,14 @@
   Array* array = new Array();
   array->comment_ = comment_;
   array->source_ = source_;
-  for (auto& item : items) {
-    array->items.emplace_back(std::unique_ptr<Item>(item->Clone(new_pool)));
+  for (auto& item : elements) {
+    array->elements.emplace_back(std::unique_ptr<Item>(item->Clone(new_pool)));
   }
   return array;
 }
 
 void Array::Print(std::ostream* out) const {
-  *out << "(array) [" << util::Joiner(items, ", ") << "]";
+  *out << "(array) [" << util::Joiner(elements, ", ") << "]";
 }
 
 bool Plural::Equals(const Value* value) const {
diff --git a/tools/aapt2/ResourceValues.h b/tools/aapt2/ResourceValues.h
index ac5795f..275864b 100644
--- a/tools/aapt2/ResourceValues.h
+++ b/tools/aapt2/ResourceValues.h
@@ -264,7 +264,7 @@
   Attribute* Clone(StringPool* new_pool) const override;
   void PrintMask(std::ostream* out) const;
   void Print(std::ostream* out) const override;
-  bool Matches(const Item* item, DiagMessage* out_msg) const;
+  bool Matches(const Item& item, DiagMessage* out_msg = nullptr) const;
 };
 
 struct Style : public BaseValue<Style> {
@@ -292,7 +292,7 @@
 };
 
 struct Array : public BaseValue<Array> {
-  std::vector<std::unique_ptr<Item>> items;
+  std::vector<std::unique_ptr<Item>> elements;
 
   bool Equals(const Value* value) const override;
   Array* Clone(StringPool* new_pool) const override;
diff --git a/tools/aapt2/ResourceValues_test.cpp b/tools/aapt2/ResourceValues_test.cpp
index 69f8e67..a80a9dc 100644
--- a/tools/aapt2/ResourceValues_test.cpp
+++ b/tools/aapt2/ResourceValues_test.cpp
@@ -18,6 +18,10 @@
 
 #include "test/Test.h"
 
+using ::testing::Eq;
+using ::testing::SizeIs;
+using ::testing::StrEq;
+
 namespace aapt {
 
 TEST(ResourceValuesTest, PluralEquals) {
@@ -54,19 +58,19 @@
   StringPool pool;
 
   Array a;
-  a.items.push_back(util::make_unique<String>(pool.MakeRef("one")));
-  a.items.push_back(util::make_unique<String>(pool.MakeRef("two")));
+  a.elements.push_back(util::make_unique<String>(pool.MakeRef("one")));
+  a.elements.push_back(util::make_unique<String>(pool.MakeRef("two")));
 
   Array b;
-  b.items.push_back(util::make_unique<String>(pool.MakeRef("une")));
-  b.items.push_back(util::make_unique<String>(pool.MakeRef("deux")));
+  b.elements.push_back(util::make_unique<String>(pool.MakeRef("une")));
+  b.elements.push_back(util::make_unique<String>(pool.MakeRef("deux")));
 
   Array c;
-  c.items.push_back(util::make_unique<String>(pool.MakeRef("uno")));
+  c.elements.push_back(util::make_unique<String>(pool.MakeRef("uno")));
 
   Array d;
-  d.items.push_back(util::make_unique<String>(pool.MakeRef("one")));
-  d.items.push_back(util::make_unique<String>(pool.MakeRef("two")));
+  d.elements.push_back(util::make_unique<String>(pool.MakeRef("one")));
+  d.elements.push_back(util::make_unique<String>(pool.MakeRef("two")));
 
   EXPECT_FALSE(a.Equals(&b));
   EXPECT_FALSE(a.Equals(&c));
@@ -78,8 +82,8 @@
   StringPool pool;
 
   Array a;
-  a.items.push_back(util::make_unique<String>(pool.MakeRef("one")));
-  a.items.push_back(util::make_unique<String>(pool.MakeRef("two")));
+  a.elements.push_back(util::make_unique<String>(pool.MakeRef("one")));
+  a.elements.push_back(util::make_unique<String>(pool.MakeRef("two")));
 
   std::unique_ptr<Array> b(a.Clone(&pool));
   EXPECT_TRUE(a.Equals(b.get()));
@@ -148,6 +152,22 @@
   EXPECT_TRUE(a->Equals(b.get()));
 }
 
+TEST(ResourcesValuesTest, StringClones) {
+  StringPool pool_a;
+  StringPool pool_b;
+
+  String str_a(pool_a.MakeRef("hello", StringPool::Context(test::ParseConfigOrDie("en"))));
+
+  ASSERT_THAT(pool_a, SizeIs(1u));
+  EXPECT_THAT(pool_a.strings()[0]->context.config, Eq(test::ParseConfigOrDie("en")));
+  EXPECT_THAT(pool_a.strings()[0]->value, StrEq("hello"));
+
+  std::unique_ptr<String> str_b(str_a.Clone(&pool_b));
+  ASSERT_THAT(pool_b, SizeIs(1u));
+  EXPECT_THAT(pool_b.strings()[0]->context.config, Eq(test::ParseConfigOrDie("en")));
+  EXPECT_THAT(pool_b.strings()[0]->value, StrEq("hello"));
+}
+
 TEST(ResourceValuesTest, StyleMerges) {
   StringPool pool_a;
   StringPool pool_b;
@@ -190,4 +210,52 @@
   EXPECT_EQ(0x0u, value.data);
 }
 
+TEST(ResourcesValuesTest, AttributeMatches) {
+  constexpr const uint32_t TYPE_DIMENSION = android::ResTable_map::TYPE_DIMENSION;
+  constexpr const uint32_t TYPE_ENUM = android::ResTable_map::TYPE_ENUM;
+  constexpr const uint32_t TYPE_FLAGS = android::ResTable_map::TYPE_FLAGS;
+  constexpr const uint32_t TYPE_INTEGER = android::ResTable_map::TYPE_INTEGER;
+  constexpr const uint8_t TYPE_INT_DEC = android::Res_value::TYPE_INT_DEC;
+
+  Attribute attr1(false /*weak*/, TYPE_DIMENSION);
+  EXPECT_FALSE(attr1.Matches(*ResourceUtils::TryParseColor("#7fff00")));
+  EXPECT_TRUE(attr1.Matches(*ResourceUtils::TryParseFloat("23dp")));
+  EXPECT_TRUE(attr1.Matches(*ResourceUtils::TryParseReference("@android:string/foo")));
+
+  Attribute attr2(false /*weak*/, TYPE_INTEGER | TYPE_ENUM);
+  attr2.min_int = 0;
+  attr2.symbols.push_back(Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/foo")),
+                                            static_cast<uint32_t>(-1)});
+  EXPECT_FALSE(attr2.Matches(*ResourceUtils::TryParseColor("#7fff00")));
+  EXPECT_TRUE(attr2.Matches(BinaryPrimitive(TYPE_INT_DEC, static_cast<uint32_t>(-1))));
+  EXPECT_TRUE(attr2.Matches(BinaryPrimitive(TYPE_INT_DEC, 1u)));
+  EXPECT_FALSE(attr2.Matches(BinaryPrimitive(TYPE_INT_DEC, static_cast<uint32_t>(-2))));
+
+  Attribute attr3(false /*weak*/, TYPE_INTEGER | TYPE_FLAGS);
+  attr3.max_int = 100;
+  attr3.symbols.push_back(
+      Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/foo")), 0x01u});
+  attr3.symbols.push_back(
+      Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/bar")), 0x02u});
+  attr3.symbols.push_back(
+      Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/baz")), 0x04u});
+  attr3.symbols.push_back(
+      Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/bat")), 0x80u});
+  EXPECT_FALSE(attr3.Matches(*ResourceUtils::TryParseColor("#7fff00")));
+  EXPECT_TRUE(attr3.Matches(BinaryPrimitive(TYPE_INT_DEC, 0x01u | 0x02u)));
+  EXPECT_TRUE(attr3.Matches(BinaryPrimitive(TYPE_INT_DEC, 0x01u | 0x02u | 0x80u)));
+
+  // Not a flag, but a value less than max_int.
+  EXPECT_TRUE(attr3.Matches(BinaryPrimitive(TYPE_INT_DEC, 0x08u)));
+
+  // Not a flag and greater than max_int.
+  EXPECT_FALSE(attr3.Matches(BinaryPrimitive(TYPE_INT_DEC, 127u)));
+
+  Attribute attr4(false /*weak*/, TYPE_ENUM);
+  attr4.symbols.push_back(
+      Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/foo")), 0x01u});
+  EXPECT_TRUE(attr4.Matches(BinaryPrimitive(TYPE_INT_DEC, 0x01u)));
+  EXPECT_FALSE(attr4.Matches(BinaryPrimitive(TYPE_INT_DEC, 0x02u)));
+}
+
 } // namespace aapt
diff --git a/tools/aapt2/Resource_test.cpp b/tools/aapt2/Resource_test.cpp
index ad4e3ce..c557f3c 100644
--- a/tools/aapt2/Resource_test.cpp
+++ b/tools/aapt2/Resource_test.cpp
@@ -93,6 +93,10 @@
   ASSERT_NE(type, nullptr);
   EXPECT_EQ(*type, ResourceType::kMipmap);
 
+  type = ParseResourceType("navigation");
+  ASSERT_NE(type, nullptr);
+  EXPECT_EQ(*type, ResourceType::kNavigation);
+
   type = ParseResourceType("plurals");
   ASSERT_NE(type, nullptr);
   EXPECT_EQ(*type, ResourceType::kPlurals);
diff --git a/tools/aapt2/Resources.proto b/tools/aapt2/Resources.proto
new file mode 100644
index 0000000..71f33b0
--- /dev/null
+++ b/tools/aapt2/Resources.proto
@@ -0,0 +1,471 @@
+/*
+ * 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.
+ */
+
+// Keep proto2 syntax because we require the distinction between fields that
+// are set and unset.
+syntax = "proto2";
+
+option java_package = "com.android.aapt";
+option optimize_for = LITE_RUNTIME;
+
+package aapt.pb;
+
+// A configuration description that wraps the binary form of the C++ class
+// aapt::ConfigDescription, with an added product definition.
+// TODO(adamlesinski): Flesh this out to be represented in proto.
+message ConfigDescription {
+  optional bytes data = 1;
+  optional string product = 2;
+}
+
+// A string pool that wraps the binary form of the C++ class android::ResStringPool.
+message StringPool {
+  optional bytes data = 1;
+}
+
+// The position of a declared entity within a file.
+message SourcePosition {
+  optional uint32 line_number = 1;
+  optional uint32 column_number = 2;
+}
+
+// Developer friendly source file information for an entity in the resource table.
+message Source {
+  // The index of the string path within the source string pool of a ResourceTable.
+  optional uint32 path_idx = 1;
+  optional SourcePosition position = 2;
+}
+
+// Top level message representing a resource table.
+message ResourceTable {
+  // The string pool containing source paths referenced throughout the resource table. This does
+  // not end up in the final binary ARSC file.
+  optional StringPool source_pool = 1;
+
+  // Resource definitions corresponding to an Android package.
+  repeated Package package = 2;
+}
+
+// Defines resources for an Android package.
+message Package {
+  // The package ID of this package, in the range [0x00, 0xff].
+  // The ID 0x00 is reserved for shared libraries, or when the ID is assigned at run-time.
+  // The ID 0x01 is reserved for the 'android' package (framework).
+  // The ID range [0x02, 0x7f) is reserved for auto-assignment to shared libraries at run-time.
+  // The ID 0x7f is reserved for the application package.
+  // IDs > 0x7f are reserved for the application as well and are treated as feature splits.
+  optional uint32 package_id = 1;
+
+  // The Java compatible Android package name of the app.
+  optional string package_name = 2;
+
+  // The series of types defined by the package.
+  repeated Type type = 3;
+}
+
+// A set of resources grouped under a common type. Such types include string, layout, xml, dimen,
+// attr, etc. This maps to the second part of a resource identifier in Java (R.type.entry).
+message Type {
+  // The ID of the type. This may be 0, which indicates no ID is set.
+  optional uint32 id = 1;
+
+  // The name of the type. This corresponds to the 'type' part of a full resource name of the form
+  // package:type/entry. The set of legal type names is listed in Resource.cpp.
+  optional string name = 2;
+
+  // The entries defined for this type.
+  repeated Entry entry = 3;
+}
+
+// The status of a symbol/entry. This contains information like visibility (public/private),
+// comments, and whether the entry can be overridden.
+message SymbolStatus {
+  // The visibility of the resource outside of its package.
+  enum Visibility {
+    // No visibility was explicitly specified. This is typically treated as private.
+    // The distinction is important when two separate R.java files are generated: a public and
+    // private one. An unknown visibility, in this case, would cause the resource to be omitted
+    // from either R.java.
+    UNKNOWN = 0;
+
+    // A resource was explicitly marked as private. This means the resource can not be accessed
+    // outside of its package unless the @*package:type/entry notation is used (the asterisk being
+    // the private accessor). If two R.java files are generated (private + public), the resource
+    // will only be emitted to the private R.java file.
+    PRIVATE = 1;
+
+    // A resource was explicitly marked as public. This means the resource can be accessed
+    // from any package, and is emitted into all R.java files, public and private.
+    PUBLIC = 2;
+  }
+
+  optional Visibility visibility = 1;
+
+  // The path at which this entry's visibility was defined (eg. public.xml).
+  optional Source source = 2;
+
+  // The comment associated with the <public> tag.
+  optional string comment = 3;
+
+  // Whether the symbol can be merged into another resource table without there being an existing
+  // definition to override. Used for overlays and set to true when <add-resource> is specified.
+  optional bool allow_new = 4;
+}
+
+// An entry declaration. An entry has a full resource ID that is the combination of package ID,
+// type ID, and its own entry ID. An entry on its own has no value, but values are defined for
+// various configurations/variants.
+message Entry {
+  // The ID of this entry. Together with the package ID and type ID, this forms a full resource ID
+  // of the form 0xPPTTEEEE, where PP is the package ID, TT is the type ID, and EEEE is the entry
+  // ID.
+  optional uint32 id = 1;
+
+  // The name of this entry. This corresponds to the 'entry' part of a full resource name of the
+  // form package:type/entry.
+  optional string name = 2;
+
+  // The symbol status of this entry, which includes visibility information.
+  optional SymbolStatus symbol_status = 3;
+
+  // The set of values defined for this entry, each corresponding to a different
+  // configuration/variant.
+  repeated ConfigValue config_value = 4;
+}
+
+// A Configuration/Value pair.
+message ConfigValue {
+  optional ConfigDescription config = 1;
+  optional Value value = 2;
+}
+
+// The generic meta-data for every value in a resource table.
+message Value {
+  // Where the value was defined.
+  optional Source source = 1;
+
+  // Any comment associated with the value.
+  optional string comment = 2;
+
+  // Whether the value can be overridden.
+  optional bool weak = 3;
+
+  // If the value is an Item, this is set.
+  optional Item item = 4;
+
+  // If the value is a CompoundValue, this is set.
+  optional CompoundValue compound_value = 5;
+}
+
+// An Item is an abstract type. It represents a value that can appear inline in many places, such
+// as XML attribute values or on the right hand side of style attribute definitions. The concrete
+// type is one of the types below. Only one can be set.
+message Item {
+  optional Reference ref = 1;
+  optional String str = 2;
+  optional RawString raw_str = 3;
+  optional StyledString styled_str = 4;
+  optional FileReference file = 5;
+  optional Id id = 6;
+  optional Primitive prim = 7;
+}
+
+// A CompoundValue is an abstract type. It represents a value that is a made of other values.
+// These can only usually appear as top-level resources. The concrete type is one of the types
+// below. Only one can be set.
+message CompoundValue {
+  optional Attribute attr = 1;
+  optional Style style = 2;
+  optional Styleable styleable = 3;
+  optional Array array = 4;
+  optional Plural plural = 5;
+}
+
+// A value that is a reference to another resource. This reference can be by name or resource ID.
+message Reference {
+  enum Type {
+    // A plain reference (@package:type/entry).
+    REFERENCE = 0;
+
+    // A reference to a theme attribute (?package:type/entry).
+    ATTRIBUTE = 1;
+  }
+
+  optional Type type = 1;
+
+  // The resource ID (0xPPTTEEEE) of the resource being referred.
+  optional uint32 id = 2;
+
+  // The optional resource name.
+  optional string name = 3;
+
+  // Whether this reference is referencing a private resource (@*package:type/entry).
+  optional bool private = 4;
+}
+
+// A value that represents an ID. This is just a placeholder, as ID values are used to occupy a
+// resource ID (0xPPTTEEEE) as a unique identifier. Their value is unimportant.
+message Id {
+}
+
+// A value that is a string.
+message String {
+  optional string value = 1;
+}
+
+// A value that is a raw string, which is unescaped/uninterpreted. This is typically used to
+// represent the value of a style attribute before the attribute is compiled and the set of
+// allowed values is known.
+message RawString {
+  optional string value = 1;
+}
+
+// A string with styling information, like html tags that specify boldness, italics, etc.
+message StyledString {
+  // The raw text of the string.
+  optional string value = 1;
+
+  // A Span marks a region of the string text that is styled.
+  message Span {
+    // The name of the tag, and its attributes, encoded as follows:
+    // tag_name;attr1=value1;attr2=value2;[...]
+    optional string tag = 1;
+
+    // The first character position this span applies to, in UTF-16 offset.
+    optional uint32 first_char = 2;
+
+    // The last character position this span applies to, in UTF-16 offset.
+    optional uint32 last_char = 3;
+  }
+
+  repeated Span span = 2;
+}
+
+// A value that is a reference to an external entity, like an XML file or a PNG.
+message FileReference {
+  // Path to a file within the APK (typically res/type-config/entry.ext).
+  optional string path = 1;
+}
+
+// A value that represents a primitive data type (float, int, boolean, etc.).
+// Corresponds to the fields (type/data) of the C struct android::Res_value.
+message Primitive {
+  optional uint32 type = 1;
+  optional uint32 data = 2;
+}
+
+// A value that represents an XML attribute and what values it accepts.
+message Attribute {
+  // A Symbol used to represent an enum or a flag.
+  message Symbol {
+    // Where the enum/flag item was defined.
+    optional Source source = 1;
+
+    // Any comments associated with the enum or flag.
+    optional string comment = 2;
+
+    // The name of the enum/flag as a reference. Enums/flag items are generated as ID resource
+    // values.
+    optional Reference name = 3;
+
+    // The value of the enum/flag.
+    optional uint32 value = 4;
+  }
+
+  // Bitmask of formats allowed for an attribute.
+  enum FormatFlags {
+    ANY = 0x0000ffff;    // Allows any type except ENUM and FLAGS.
+    REFERENCE = 0x01;    // Allows Reference values.
+    STRING = 0x02;       // Allows String/StyledString values.
+    INTEGER = 0x04;      // Allows any integer BinaryPrimitive values.
+    BOOLEAN = 0x08;      // Allows any boolean BinaryPrimitive values.
+    COLOR = 0x010;       // Allows any color BinaryPrimitive values.
+    FLOAT = 0x020;       // Allows any float BinaryPrimitive values.
+    DIMENSION = 0x040;   // Allows any dimension BinaryPrimitive values.
+    FRACTION = 0x080;    // Allows any fraction BinaryPrimitive values.
+    ENUM = 0x00010000;   // Allows enums that are defined in the Attribute's symbols.
+                         // ENUM and FLAGS cannot BOTH be set.
+    FLAGS = 0x00020000;  // Allows flags that are defined in the Attribute's symbols.
+                         // ENUM and FLAGS cannot BOTH be set.
+  }
+
+  // A bitmask of types that this XML attribute accepts. Corresponds to the flags in the
+  // enum FormatFlags.
+  optional uint32 format_flags = 1;
+
+  // The smallest integer allowed for this XML attribute. Only makes sense if the format includes
+  // FormatFlags::INTEGER.
+  optional int32 min_int = 2;
+
+  // The largest integer allowed for this XML attribute. Only makes sense if the format includes
+  // FormatFlags::INTEGER.
+  optional int32 max_int = 3;
+
+  // The set of enums/flags defined in this attribute. Only makes sense if the format includes
+  // either FormatFlags::ENUM or FormatFlags::FLAGS. Having both is an error.
+  repeated Symbol symbol = 4;
+}
+
+// A value that represents a style.
+message Style {
+  // An XML attribute/value pair defined in the style.
+  message Entry {
+    // Where the entry was defined.
+    optional Source source = 1;
+
+    // Any comments associated with the entry.
+    optional string comment = 2;
+
+    // A reference to the XML attribute.
+    optional Reference key = 3;
+
+    // The Item defined for this XML attribute.
+    optional Item item = 4;
+  }
+
+  // The optinal style from which this style inherits attributes.
+  optional Reference parent = 1;
+
+  // The source file information of the parent inheritance declaration.
+  optional Source parent_source = 2;
+
+  // The set of XML attribute/value pairs for this style.
+  repeated Entry entry = 3;
+}
+
+// A value that represents a <declare-styleable> XML resource. These are not real resources and
+// only end up as Java fields in the generated R.java. They do not end up in the binary ARSC file.
+message Styleable {
+  // An attribute defined for this styleable.
+  message Entry {
+    // Where the attribute was defined within the <declare-styleable> block.
+    optional Source source = 1;
+
+    // Any comments associated with the declaration.
+    optional string comment = 2;
+
+    // The reference to the attribute.
+    optional Reference attr = 3;
+  }
+
+  // The set of attribute declarations.
+  repeated Entry entry = 1;
+}
+
+// A value that represents an array of resource values.
+message Array {
+  // A single element of the array.
+  message Element {
+    // Where the element was defined.
+    optional Source source = 1;
+
+    // Any comments associated with the element.
+    optional string comment = 2;
+
+    // The value assigned to this element.
+    optional Item item = 3;
+  }
+
+  // The list of array elements.
+  repeated Element element = 1;
+}
+
+// A value that represents a string and its many variations based on plurality.
+message Plural {
+  // The arity of the plural.
+  enum Arity {
+    ZERO = 0;
+    ONE = 1;
+    TWO = 2;
+    FEW = 3;
+    MANY = 4;
+    OTHER = 5;
+  }
+
+  // The plural value for a given arity.
+  message Entry {
+    // Where the plural was defined.
+    optional Source source = 1;
+
+    // Any comments associated with the plural.
+    optional string comment = 2;
+
+    // The arity of the plural.
+    optional Arity arity = 3;
+
+    // The value assigned to this plural.
+    optional Item item = 4;
+  }
+
+  // The set of arity/plural mappings.
+  repeated Entry entry = 1;
+}
+
+// Defines an abstract XmlNode that must be either an XmlElement, or
+// a text node represented by a string.
+message XmlNode {
+  // If set, this node is an element/tag.
+  optional XmlElement element = 1;
+
+  // If set, this node is a chunk of text.
+  optional string text = 2;
+
+  // Source line and column info.
+  optional SourcePosition source = 3;
+}
+
+// An <element> in an XML document.
+message XmlElement {
+  // Namespaces defined on this element.
+  repeated XmlNamespace namespace_declaration = 1;
+
+  // The namespace URI of this element.
+  optional string namespace_uri = 2;
+
+  // The name of this element.
+  optional string name = 3;
+
+  // The attributes of this element.
+  repeated XmlAttribute attribute = 4;
+
+  // The children of this element.
+  repeated XmlNode child = 5;
+}
+
+// A namespace declaration on an XmlElement (xmlns:android="http://...").
+message XmlNamespace {
+  optional string prefix = 1;
+  optional string uri = 2;
+
+  // Source line and column info.
+  optional SourcePosition source = 3;
+}
+
+// An attribute defined on an XmlElement (android:text="...").
+message XmlAttribute {
+  optional string namespace_uri = 1;
+  optional string name = 2;
+  optional string value = 3;
+
+  // Source line and column info.
+  optional SourcePosition source = 4;
+
+  // The resource ID (0xPPTTEEEE) of the attribute.
+  optional uint32 resource_id = 5;
+
+  // The interpreted/compiled version of the `value` string.
+  optional Item compiled_item = 6;
+}
diff --git a/tools/aapt2/ResourcesInternal.proto b/tools/aapt2/ResourcesInternal.proto
new file mode 100644
index 0000000..3117917
--- /dev/null
+++ b/tools/aapt2/ResourcesInternal.proto
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+
+syntax = "proto2";
+
+option java_package = "android.aapt.pb.internal";
+option optimize_for = LITE_RUNTIME;
+
+import "frameworks/base/tools/aapt2/Resources.proto";
+
+package aapt.pb.internal;
+
+// The top level message representing an external resource file (layout XML, PNG, etc).
+// This is used to represent a compiled file before it is linked. Only useful to aapt2.
+message CompiledFile {
+  message Symbol {
+    // The name of the symbol (in the form package:type/name).
+    optional string resource_name = 1;
+
+    // The position in the file at which this symbol is defined. For debug use.
+    optional aapt.pb.SourcePosition source = 2;
+  }
+
+  // The name of the resource (in the form package:type/name).
+  optional string resource_name = 1;
+
+  // The configuration for which the resource is defined.
+  optional aapt.pb.ConfigDescription config = 2;
+
+  // The filesystem path to where the source file originated.
+  // Mainly used to display helpful error messages.
+  optional string source_path = 3;
+
+  // Any symbols this file auto-generates/exports (eg. @+id/foo in an XML file).
+  repeated Symbol exported_symbol = 4;
+
+  // If this is a compiled XML file, this is the root node.
+  optional aapt.pb.XmlNode xml_root = 5;
+}
diff --git a/tools/aapt2/SdkConstants.h b/tools/aapt2/SdkConstants.h
index e3745e8..5c32ed4 100644
--- a/tools/aapt2/SdkConstants.h
+++ b/tools/aapt2/SdkConstants.h
@@ -52,6 +52,7 @@
   SDK_NOUGAT = 24,
   SDK_NOUGAT_MR1 = 25,
   SDK_O = 26,
+  SDK_O_MR1 = 27,
 };
 
 ApiVersion FindAttributeSdkLevel(const ResourceId& id);
diff --git a/tools/aapt2/StringPool.cpp b/tools/aapt2/StringPool.cpp
index 57da5f0..3a1a18c 100644
--- a/tools/aapt2/StringPool.cpp
+++ b/tools/aapt2/StringPool.cpp
@@ -27,7 +27,7 @@
 #include "util/BigBuffer.h"
 #include "util/Util.h"
 
-using android::StringPiece;
+using ::android::StringPiece;
 
 namespace aapt {
 
@@ -75,9 +75,14 @@
   return &entry_->value;
 }
 
-const std::string& StringPool::Ref::operator*() const { return entry_->value; }
+const std::string& StringPool::Ref::operator*() const {
+  return entry_->value;
+}
 
-size_t StringPool::Ref::index() const { return entry_->index; }
+size_t StringPool::Ref::index() const {
+  // Account for the styles, which *always* come first.
+  return entry_->pool_->styles_.size() + entry_->index_;
+}
 
 const StringPool::Context& StringPool::Ref::GetContext() const {
   return entry_->context;
@@ -104,8 +109,7 @@
   }
 }
 
-StringPool::StyleRef& StringPool::StyleRef::operator=(
-    const StringPool::StyleRef& rhs) {
+StringPool::StyleRef& StringPool::StyleRef::operator=(const StringPool::StyleRef& rhs) {
   if (rhs.entry_ != nullptr) {
     rhs.entry_->ref_++;
   }
@@ -118,7 +122,7 @@
 }
 
 bool StringPool::StyleRef::operator==(const StyleRef& rhs) const {
-  if (entry_->str != rhs.entry_->str) {
+  if (entry_->value != rhs.entry_->value) {
     return false;
   }
 
@@ -137,7 +141,9 @@
   return true;
 }
 
-bool StringPool::StyleRef::operator!=(const StyleRef& rhs) const { return !operator==(rhs); }
+bool StringPool::StyleRef::operator!=(const StyleRef& rhs) const {
+  return !operator==(rhs);
+}
 
 const StringPool::StyleEntry* StringPool::StyleRef::operator->() const {
   return entry_;
@@ -147,23 +153,24 @@
   return *entry_;
 }
 
-size_t StringPool::StyleRef::index() const { return entry_->str.index(); }
+size_t StringPool::StyleRef::index() const {
+  return entry_->index_;
+}
 
 const StringPool::Context& StringPool::StyleRef::GetContext() const {
-  return entry_->str.GetContext();
+  return entry_->context;
 }
 
 StringPool::Ref StringPool::MakeRef(const StringPiece& str) {
   return MakeRefImpl(str, Context{}, true);
 }
 
-StringPool::Ref StringPool::MakeRef(const StringPiece& str,
-                                    const Context& context) {
+StringPool::Ref StringPool::MakeRef(const StringPiece& str, const Context& context) {
   return MakeRefImpl(str, context, true);
 }
 
-StringPool::Ref StringPool::MakeRefImpl(const StringPiece& str,
-                                        const Context& context, bool unique) {
+StringPool::Ref StringPool::MakeRefImpl(const StringPiece& str, const Context& context,
+                                        bool unique) {
   if (unique) {
     auto iter = indexed_strings_.find(str);
     if (iter != std::end(indexed_strings_)) {
@@ -171,82 +178,94 @@
     }
   }
 
-  Entry* entry = new Entry();
+  std::unique_ptr<Entry> entry(new Entry());
   entry->value = str.to_string();
   entry->context = context;
-  entry->index = strings_.size();
+  entry->index_ = strings_.size();
   entry->ref_ = 0;
-  strings_.emplace_back(entry);
-  indexed_strings_.insert(std::make_pair(StringPiece(entry->value), entry));
-  return Ref(entry);
+  entry->pool_ = this;
+
+  Entry* borrow = entry.get();
+  strings_.emplace_back(std::move(entry));
+  indexed_strings_.insert(std::make_pair(StringPiece(borrow->value), borrow));
+  return Ref(borrow);
+}
+
+StringPool::Ref StringPool::MakeRef(const Ref& ref) {
+  if (ref.entry_->pool_ == this) {
+    return ref;
+  }
+  return MakeRef(ref.entry_->value, ref.entry_->context);
 }
 
 StringPool::StyleRef StringPool::MakeRef(const StyleString& str) {
   return MakeRef(str, Context{});
 }
 
-StringPool::StyleRef StringPool::MakeRef(const StyleString& str,
-                                         const Context& context) {
-  Entry* entry = new Entry();
+StringPool::StyleRef StringPool::MakeRef(const StyleString& str, const Context& context) {
+  std::unique_ptr<StyleEntry> entry(new StyleEntry());
   entry->value = str.str;
   entry->context = context;
-  entry->index = strings_.size();
+  entry->index_ = styles_.size();
   entry->ref_ = 0;
-  strings_.emplace_back(entry);
-  indexed_strings_.insert(std::make_pair(StringPiece(entry->value), entry));
-
-  StyleEntry* style_entry = new StyleEntry();
-  style_entry->str = Ref(entry);
   for (const aapt::Span& span : str.spans) {
-    style_entry->spans.emplace_back(
-        Span{MakeRef(span.name), span.first_char, span.last_char});
+    entry->spans.emplace_back(Span{MakeRef(span.name), span.first_char, span.last_char});
   }
-  style_entry->ref_ = 0;
-  styles_.emplace_back(style_entry);
-  return StyleRef(style_entry);
+
+  StyleEntry* borrow = entry.get();
+  styles_.emplace_back(std::move(entry));
+  return StyleRef(borrow);
 }
 
 StringPool::StyleRef StringPool::MakeRef(const StyleRef& ref) {
-  Entry* entry = new Entry();
-  entry->value = *ref.entry_->str;
-  entry->context = ref.entry_->str.entry_->context;
-  entry->index = strings_.size();
+  std::unique_ptr<StyleEntry> entry(new StyleEntry());
+  entry->value = ref.entry_->value;
+  entry->context = ref.entry_->context;
+  entry->index_ = styles_.size();
   entry->ref_ = 0;
-  strings_.emplace_back(entry);
-  indexed_strings_.insert(std::make_pair(StringPiece(entry->value), entry));
-
-  StyleEntry* style_entry = new StyleEntry();
-  style_entry->str = Ref(entry);
   for (const Span& span : ref.entry_->spans) {
-    style_entry->spans.emplace_back(
-        Span{MakeRef(*span.name), span.first_char, span.last_char});
+    entry->spans.emplace_back(Span{MakeRef(*span.name), span.first_char, span.last_char});
   }
-  style_entry->ref_ = 0;
-  styles_.emplace_back(style_entry);
-  return StyleRef(style_entry);
+
+  StyleEntry* borrow = entry.get();
+  styles_.emplace_back(std::move(entry));
+  return StyleRef(borrow);
+}
+
+void StringPool::ReAssignIndices() {
+  // Assign the style indices.
+  const size_t style_len = styles_.size();
+  for (size_t index = 0; index < style_len; index++) {
+    styles_[index]->index_ = index;
+  }
+
+  // Assign the string indices.
+  const size_t string_len = strings_.size();
+  for (size_t index = 0; index < string_len; index++) {
+    strings_[index]->index_ = index;
+  }
 }
 
 void StringPool::Merge(StringPool&& pool) {
-  indexed_strings_.insert(pool.indexed_strings_.begin(),
-                          pool.indexed_strings_.end());
-  pool.indexed_strings_.clear();
-  std::move(pool.strings_.begin(), pool.strings_.end(),
-            std::back_inserter(strings_));
-  pool.strings_.clear();
-  std::move(pool.styles_.begin(), pool.styles_.end(),
-            std::back_inserter(styles_));
-  pool.styles_.clear();
-
-  // Assign the indices.
-  const size_t len = strings_.size();
-  for (size_t index = 0; index < len; index++) {
-    strings_[index]->index = index;
+  // First, change the owning pool for the incoming strings.
+  for (std::unique_ptr<Entry>& entry : pool.strings_) {
+    entry->pool_ = this;
   }
+
+  // Now move the styles, strings, and indices over.
+  std::move(pool.styles_.begin(), pool.styles_.end(), std::back_inserter(styles_));
+  pool.styles_.clear();
+  std::move(pool.strings_.begin(), pool.strings_.end(), std::back_inserter(strings_));
+  pool.strings_.clear();
+  indexed_strings_.insert(pool.indexed_strings_.begin(), pool.indexed_strings_.end());
+  pool.indexed_strings_.clear();
+
+  ReAssignIndices();
 }
 
-void StringPool::HintWillAdd(size_t stringCount, size_t styleCount) {
-  strings_.reserve(strings_.size() + stringCount);
-  styles_.reserve(styles_.size() + styleCount);
+void StringPool::HintWillAdd(size_t string_count, size_t style_count) {
+  strings_.reserve(strings_.size() + string_count);
+  styles_.reserve(styles_.size() + style_count);
 }
 
 void StringPool::Prune() {
@@ -262,47 +281,42 @@
 
   auto end_iter2 =
       std::remove_if(strings_.begin(), strings_.end(),
-                     [](const std::unique_ptr<Entry>& entry) -> bool {
-                       return entry->ref_ <= 0;
-                     });
+                     [](const std::unique_ptr<Entry>& entry) -> bool { return entry->ref_ <= 0; });
+  auto end_iter3 = std::remove_if(
+      styles_.begin(), styles_.end(),
+      [](const std::unique_ptr<StyleEntry>& entry) -> bool { return entry->ref_ <= 0; });
 
-  auto end_iter3 =
-      std::remove_if(styles_.begin(), styles_.end(),
-                     [](const std::unique_ptr<StyleEntry>& entry) -> bool {
-                       return entry->ref_ <= 0;
-                     });
-
-  // Remove the entries at the end or else we'll be accessing
-  // a deleted string from the StyleEntry.
+  // Remove the entries at the end or else we'll be accessing a deleted string from the StyleEntry.
   strings_.erase(end_iter2, strings_.end());
   styles_.erase(end_iter3, styles_.end());
 
-  // Reassign the indices.
-  const size_t len = strings_.size();
-  for (size_t index = 0; index < len; index++) {
-    strings_[index]->index = index;
+  ReAssignIndices();
+}
+
+template <typename E>
+static void SortEntries(
+    std::vector<std::unique_ptr<E>>& entries,
+    const std::function<int(const StringPool::Context&, const StringPool::Context&)>& cmp) {
+  using UEntry = std::unique_ptr<E>;
+
+  if (cmp != nullptr) {
+    std::sort(entries.begin(), entries.end(), [&cmp](const UEntry& a, const UEntry& b) -> bool {
+      int r = cmp(a->context, b->context);
+      if (r == 0) {
+        r = a->value.compare(b->value);
+      }
+      return r < 0;
+    });
+  } else {
+    std::sort(entries.begin(), entries.end(),
+              [](const UEntry& a, const UEntry& b) -> bool { return a->value < b->value; });
   }
 }
 
-void StringPool::Sort(
-    const std::function<bool(const Entry&, const Entry&)>& cmp) {
-  std::sort(
-      strings_.begin(), strings_.end(),
-      [&cmp](const std::unique_ptr<Entry>& a,
-             const std::unique_ptr<Entry>& b) -> bool { return cmp(*a, *b); });
-
-  // Assign the indices.
-  const size_t len = strings_.size();
-  for (size_t index = 0; index < len; index++) {
-    strings_[index]->index = index;
-  }
-
-  // Reorder the styles.
-  std::sort(styles_.begin(), styles_.end(),
-            [](const std::unique_ptr<StyleEntry>& lhs,
-               const std::unique_ptr<StyleEntry>& rhs) -> bool {
-              return lhs->str.index() < rhs->str.index();
-            });
+void StringPool::Sort(const std::function<int(const Context&, const Context&)>& cmp) {
+  SortEntries(styles_, cmp);
+  SortEntries(strings_, cmp);
+  ReAssignIndices();
 }
 
 template <typename T>
@@ -327,60 +341,31 @@
   return length > kMaxSize ? 2 : 1;
 }
 
-bool StringPool::Flatten(BigBuffer* out, const StringPool& pool, bool utf8) {
-  const size_t start_index = out->size();
-  android::ResStringPool_header* header =
-      out->NextBlock<android::ResStringPool_header>();
-  header->header.type = android::RES_STRING_POOL_TYPE;
-  header->header.headerSize = sizeof(*header);
-  header->stringCount = pool.size();
+static void EncodeString(const std::string& str, const bool utf8, BigBuffer* out) {
   if (utf8) {
-    header->flags |= android::ResStringPool_header::UTF8_FLAG;
-  }
+    const std::string& encoded = str;
+    const ssize_t utf16_length =
+        utf8_to_utf16_length(reinterpret_cast<const uint8_t*>(str.data()), str.size());
+    CHECK(utf16_length >= 0);
 
-  uint32_t* indices =
-      pool.size() != 0 ? out->NextBlock<uint32_t>(pool.size()) : nullptr;
+    const size_t total_size = EncodedLengthUnits<char>(utf16_length) +
+                              EncodedLengthUnits<char>(encoded.length()) + encoded.size() + 1;
 
-  uint32_t* style_indices = nullptr;
-  if (!pool.styles_.empty()) {
-    header->styleCount = pool.styles_.back()->str.index() + 1;
-    style_indices = out->NextBlock<uint32_t>(header->styleCount);
-  }
+    char* data = out->NextBlock<char>(total_size);
 
-  const size_t before_strings_index = out->size();
-  header->stringsStart = before_strings_index - start_index;
+    // First encode the UTF16 string length.
+    data = EncodeLength(data, utf16_length);
 
-  for (const auto& entry : pool) {
-    *indices = out->size() - before_strings_index;
-    indices++;
-
-    if (utf8) {
-      const std::string& encoded = entry->value;
-      const ssize_t utf16_length = utf8_to_utf16_length(
-          reinterpret_cast<const uint8_t*>(entry->value.data()),
-          entry->value.size());
-      CHECK(utf16_length >= 0);
-
-      const size_t total_size = EncodedLengthUnits<char>(utf16_length) +
-                                EncodedLengthUnits<char>(encoded.length()) +
-                                encoded.size() + 1;
-
-      char* data = out->NextBlock<char>(total_size);
-
-      // First encode the UTF16 string length.
-      data = EncodeLength(data, utf16_length);
-
-      // Now encode the size of the real UTF8 string.
-      data = EncodeLength(data, encoded.length());
-      strncpy(data, encoded.data(), encoded.size());
+    // Now encode the size of the real UTF8 string.
+    data = EncodeLength(data, encoded.length());
+    strncpy(data, encoded.data(), encoded.size());
 
     } else {
-      const std::u16string encoded = util::Utf8ToUtf16(entry->value);
+      const std::u16string encoded = util::Utf8ToUtf16(str);
       const ssize_t utf16_length = encoded.size();
 
       // Total number of 16-bit words to write.
-      const size_t total_size =
-          EncodedLengthUnits<char16_t>(utf16_length) + encoded.size() + 1;
+      const size_t total_size = EncodedLengthUnits<char16_t>(utf16_length) + encoded.size() + 1;
 
       char16_t* data = out->NextBlock<char16_t>(total_size);
 
@@ -395,31 +380,55 @@
       // The null-terminating character is already here due to the block of data
       // being set to 0s on allocation.
     }
+}
+
+bool StringPool::Flatten(BigBuffer* out, const StringPool& pool, bool utf8) {
+  const size_t start_index = out->size();
+  android::ResStringPool_header* header = out->NextBlock<android::ResStringPool_header>();
+  header->header.type = util::HostToDevice16(android::RES_STRING_POOL_TYPE);
+  header->header.headerSize = util::HostToDevice16(sizeof(*header));
+  header->stringCount = util::HostToDevice32(pool.size());
+  header->styleCount = util::HostToDevice32(pool.styles_.size());
+  if (utf8) {
+    header->flags |= android::ResStringPool_header::UTF8_FLAG;
+  }
+
+  uint32_t* indices = pool.size() != 0 ? out->NextBlock<uint32_t>(pool.size()) : nullptr;
+  uint32_t* style_indices =
+      pool.styles_.size() != 0 ? out->NextBlock<uint32_t>(pool.styles_.size()) : nullptr;
+
+  const size_t before_strings_index = out->size();
+  header->stringsStart = before_strings_index - start_index;
+
+  // Styles always come first.
+  for (const std::unique_ptr<StyleEntry>& entry : pool.styles_) {
+    *indices++ = out->size() - before_strings_index;
+    EncodeString(entry->value, utf8, out);
+  }
+
+  for (const std::unique_ptr<Entry>& entry : pool.strings_) {
+    *indices++ = out->size() - before_strings_index;
+    EncodeString(entry->value, utf8, out);
   }
 
   out->Align4();
 
-  if (!pool.styles_.empty()) {
+  if (style_indices != nullptr) {
     const size_t before_styles_index = out->size();
-    header->stylesStart = before_styles_index - start_index;
+    header->stylesStart = util::HostToDevice32(before_styles_index - start_index);
 
-    size_t current_index = 0;
-    for (const auto& entry : pool.styles_) {
-      while (entry->str.index() > current_index) {
-        style_indices[current_index++] = out->size() - before_styles_index;
+    for (const std::unique_ptr<StyleEntry>& entry : pool.styles_) {
+      *style_indices++ = out->size() - before_styles_index;
 
-        uint32_t* span_offset = out->NextBlock<uint32_t>();
-        *span_offset = android::ResStringPool_span::END;
-      }
-      style_indices[current_index++] = out->size() - before_styles_index;
-
-      android::ResStringPool_span* span =
-          out->NextBlock<android::ResStringPool_span>(entry->spans.size());
-      for (const auto& s : entry->spans) {
-        span->name.index = s.name.index();
-        span->firstChar = s.first_char;
-        span->lastChar = s.last_char;
-        span++;
+      if (!entry->spans.empty()) {
+        android::ResStringPool_span* span =
+            out->NextBlock<android::ResStringPool_span>(entry->spans.size());
+        for (const Span& s : entry->spans) {
+          span->name.index = util::HostToDevice32(s.name.index());
+          span->firstChar = util::HostToDevice32(s.first_char);
+          span->lastChar = util::HostToDevice32(s.last_char);
+          span++;
+        }
       }
 
       uint32_t* spanEnd = out->NextBlock<uint32_t>();
@@ -436,7 +445,7 @@
     memset(padding, 0xff, padding_length);
     out->Align4();
   }
-  header->header.size = out->size() - start_index;
+  header->header.size = util::HostToDevice32(out->size() - start_index);
   return true;
 }
 
diff --git a/tools/aapt2/StringPool.h b/tools/aapt2/StringPool.h
index d1232a2..3c1f3dc 100644
--- a/tools/aapt2/StringPool.h
+++ b/tools/aapt2/StringPool.h
@@ -42,12 +42,18 @@
   std::vector<Span> spans;
 };
 
+// A StringPool for storing the value of String and StyledString resources.
+// Styles and Strings are stored separately, since the runtime variant of this
+// class -- ResStringPool -- requires that styled strings *always* appear first, since their
+// style data is stored as an array indexed by the same indices as the main string pool array.
+// Otherwise, the style data array would have to be sparse and take up more space.
 class StringPool {
  public:
+  using size_type = size_t;
+
   class Context {
    public:
     enum : uint32_t {
-      kStylePriority = 0u,
       kHighPriority = 1u,
       kNormalPriority = 0x7fffffffu,
       kLowPriority = 0xffffffffu,
@@ -58,8 +64,8 @@
     Context() = default;
     Context(uint32_t p, const ConfigDescription& c) : priority(p), config(c) {}
     explicit Context(uint32_t p) : priority(p) {}
-    explicit Context(const ConfigDescription& c)
-        : priority(kNormalPriority), config(c) {}
+    explicit Context(const ConfigDescription& c) : priority(kNormalPriority), config(c) {
+    }
   };
 
   class Entry;
@@ -116,13 +122,14 @@
    public:
     std::string value;
     Context context;
-    size_t index;
 
    private:
     friend class StringPool;
     friend class Ref;
 
+    size_t index_;
     int ref_;
+    const StringPool* pool_;
   };
 
   struct Span {
@@ -133,18 +140,18 @@
 
   class StyleEntry {
    public:
-    Ref str;
+    std::string value;
+    Context context;
     std::vector<Span> spans;
 
    private:
     friend class StringPool;
     friend class StyleRef;
 
+    size_t index_;
     int ref_;
   };
 
-  using const_iterator = std::vector<std::unique_ptr<Entry>>::const_iterator;
-
   static bool FlattenUtf8(BigBuffer* out, const StringPool& pool);
   static bool FlattenUtf16(BigBuffer* out, const StringPool& pool);
 
@@ -152,92 +159,64 @@
   StringPool(StringPool&&) = default;
   StringPool& operator=(StringPool&&) = default;
 
-  /**
-   * Adds a string to the pool, unless it already exists. Returns
-   * a reference to the string in the pool.
-   */
+  // Adds a string to the pool, unless it already exists. Returns a reference to the string in the
+  // pool.
   Ref MakeRef(const android::StringPiece& str);
 
-  /**
-   * Adds a string to the pool, unless it already exists, with a context
-   * object that can be used when sorting the string pool. Returns
-   * a reference to the string in the pool.
-   */
+  // Adds a string to the pool, unless it already exists, with a context object that can be used
+  // when sorting the string pool. Returns a reference to the string in the pool.
   Ref MakeRef(const android::StringPiece& str, const Context& context);
 
-  /**
-   * Adds a style to the string pool and returns a reference to it.
-   */
+  // Adds a string from another string pool. Returns a reference to the string in the string pool.
+  Ref MakeRef(const Ref& ref);
+
+  // Adds a style to the string pool and returns a reference to it.
   StyleRef MakeRef(const StyleString& str);
 
-  /**
-   * Adds a style to the string pool with a context object that
-   * can be used when sorting the string pool. Returns a reference
-   * to the style in the string pool.
-   */
+  // Adds a style to the string pool with a context object that can be used when sorting the string
+  // pool. Returns a reference to the style in the string pool.
   StyleRef MakeRef(const StyleString& str, const Context& context);
 
-  /**
-   * Adds a style from another string pool. Returns a reference to the
-   * style in the string pool.
-   */
+  // Adds a style from another string pool. Returns a reference to the style in the string pool.
   StyleRef MakeRef(const StyleRef& ref);
 
-  /**
-   * Moves pool into this one without coalescing strings. When this
-   * function returns, pool will be empty.
-   */
+  // Moves pool into this one without coalescing strings. When this function returns, pool will be
+  // empty.
   void Merge(StringPool&& pool);
 
-  /**
-   * Returns the number of strings in the table.
-   */
-  inline size_t size() const;
+  inline const std::vector<std::unique_ptr<Entry>>& strings() const {
+    return strings_;
+  }
 
-  /**
-   * Reserves space for strings and styles as an optimization.
-   */
+  // Returns the number of strings in the table.
+  inline size_t size() const {
+    return styles_.size() + strings_.size();
+  }
+
+  // Reserves space for strings and styles as an optimization.
   void HintWillAdd(size_t string_count, size_t style_count);
 
-  /**
-   * Sorts the strings according to some comparison function.
-   */
-  void Sort(const std::function<bool(const Entry&, const Entry&)>& cmp);
+  // Sorts the strings according to their Context using some comparison function.
+  // Equal Contexts are further sorted by string value, lexicographically.
+  // If no comparison function is provided, values are only sorted lexicographically.
+  void Sort(const std::function<int(const Context&, const Context&)>& cmp = nullptr);
 
-  /**
-   * Removes any strings that have no references.
-   */
+  // Removes any strings that have no references.
   void Prune();
 
  private:
   DISALLOW_COPY_AND_ASSIGN(StringPool);
 
-  friend const_iterator begin(const StringPool& pool);
-  friend const_iterator end(const StringPool& pool);
-
   static bool Flatten(BigBuffer* out, const StringPool& pool, bool utf8);
 
   Ref MakeRefImpl(const android::StringPiece& str, const Context& context, bool unique);
+  void ReAssignIndices();
 
   std::vector<std::unique_ptr<Entry>> strings_;
   std::vector<std::unique_ptr<StyleEntry>> styles_;
   std::unordered_multimap<android::StringPiece, Entry*> indexed_strings_;
 };
 
-//
-// Inline implementation
-//
-
-inline size_t StringPool::size() const { return strings_.size(); }
-
-inline StringPool::const_iterator begin(const StringPool& pool) {
-  return pool.strings_.begin();
-}
-
-inline StringPool::const_iterator end(const StringPool& pool) {
-  return pool.strings_.end();
-}
-
 }  // namespace aapt
 
 #endif  // AAPT_STRING_POOL_H
diff --git a/tools/aapt2/StringPool_test.cpp b/tools/aapt2/StringPool_test.cpp
index f64a8cf..b1e5ce2 100644
--- a/tools/aapt2/StringPool_test.cpp
+++ b/tools/aapt2/StringPool_test.cpp
@@ -23,8 +23,12 @@
 #include "test/Test.h"
 #include "util/Util.h"
 
-using android::StringPiece;
-using android::StringPiece16;
+using ::android::StringPiece;
+using ::android::StringPiece16;
+using ::testing::Eq;
+using ::testing::Ne;
+using ::testing::NotNull;
+using ::testing::Pointee;
 
 namespace aapt {
 
@@ -32,129 +36,127 @@
   StringPool pool;
 
   StringPool::Ref ref = pool.MakeRef("wut");
-  EXPECT_EQ(*ref, "wut");
+  EXPECT_THAT(*ref, Eq("wut"));
 }
 
 TEST(StringPoolTest, InsertTwoUniqueStrings) {
   StringPool pool;
 
-  StringPool::Ref ref = pool.MakeRef("wut");
-  StringPool::Ref ref2 = pool.MakeRef("hey");
+  StringPool::Ref ref_a = pool.MakeRef("wut");
+  StringPool::Ref ref_b = pool.MakeRef("hey");
 
-  EXPECT_EQ(*ref, "wut");
-  EXPECT_EQ(*ref2, "hey");
+  EXPECT_THAT(*ref_a, Eq("wut"));
+  EXPECT_THAT(*ref_b, Eq("hey"));
 }
 
 TEST(StringPoolTest, DoNotInsertNewDuplicateString) {
   StringPool pool;
 
-  StringPool::Ref ref = pool.MakeRef("wut");
-  StringPool::Ref ref2 = pool.MakeRef("wut");
+  StringPool::Ref ref_a = pool.MakeRef("wut");
+  StringPool::Ref ref_b = pool.MakeRef("wut");
 
-  EXPECT_EQ(*ref, "wut");
-  EXPECT_EQ(*ref2, "wut");
-  EXPECT_EQ(1u, pool.size());
+  EXPECT_THAT(*ref_a, Eq("wut"));
+  EXPECT_THAT(*ref_b, Eq("wut"));
+  EXPECT_THAT(pool.size(), Eq(1u));
 }
 
 TEST(StringPoolTest, MaintainInsertionOrderIndex) {
   StringPool pool;
 
-  StringPool::Ref ref = pool.MakeRef("z");
-  StringPool::Ref ref2 = pool.MakeRef("a");
-  StringPool::Ref ref3 = pool.MakeRef("m");
+  StringPool::Ref ref_a = pool.MakeRef("z");
+  StringPool::Ref ref_b = pool.MakeRef("a");
+  StringPool::Ref ref_c = pool.MakeRef("m");
 
-  EXPECT_EQ(0u, ref.index());
-  EXPECT_EQ(1u, ref2.index());
-  EXPECT_EQ(2u, ref3.index());
+  EXPECT_THAT(ref_a.index(), Eq(0u));
+  EXPECT_THAT(ref_b.index(), Eq(1u));
+  EXPECT_THAT(ref_c.index(), Eq(2u));
 }
 
 TEST(StringPoolTest, PruneStringsWithNoReferences) {
   StringPool pool;
 
-  StringPool::Ref refA = pool.MakeRef("foo");
-  {
-    StringPool::Ref ref = pool.MakeRef("wut");
-    EXPECT_EQ(*ref, "wut");
-    EXPECT_EQ(2u, pool.size());
-  }
-  StringPool::Ref refB = pool.MakeRef("bar");
+  StringPool::Ref ref_a = pool.MakeRef("foo");
 
-  EXPECT_EQ(3u, pool.size());
+  {
+    StringPool::Ref ref_b = pool.MakeRef("wut");
+    EXPECT_THAT(*ref_b, Eq("wut"));
+    EXPECT_THAT(pool.size(), Eq(2u));
+    pool.Prune();
+    EXPECT_THAT(pool.size(), Eq(2u));
+  }
+  EXPECT_THAT(pool.size(), Eq(2u));
+
+  {
+    StringPool::Ref ref_c = pool.MakeRef("bar");
+    EXPECT_THAT(pool.size(), Eq(3u));
+
+    pool.Prune();
+    EXPECT_THAT(pool.size(), Eq(2u));
+  }
+  EXPECT_THAT(pool.size(), Eq(2u));
+
   pool.Prune();
-  EXPECT_EQ(2u, pool.size());
-  StringPool::const_iterator iter = begin(pool);
-  EXPECT_EQ((*iter)->value, "foo");
-  EXPECT_LT((*iter)->index, 2u);
-  ++iter;
-  EXPECT_EQ((*iter)->value, "bar");
-  EXPECT_LT((*iter)->index, 2u);
+  EXPECT_THAT(pool.size(), Eq(1u));
 }
 
-TEST(StringPoolTest, SortAndMaintainIndexesInReferences) {
+TEST(StringPoolTest, SortAndMaintainIndexesInStringReferences) {
   StringPool pool;
 
-  StringPool::Ref ref = pool.MakeRef("z");
-  StringPool::StyleRef ref2 = pool.MakeRef(StyleString{{"a"}});
-  StringPool::Ref ref3 = pool.MakeRef("m");
+  StringPool::Ref ref_a = pool.MakeRef("z");
+  StringPool::Ref ref_b = pool.MakeRef("a");
+  StringPool::Ref ref_c = pool.MakeRef("m");
 
-  EXPECT_EQ(*ref, "z");
-  EXPECT_EQ(0u, ref.index());
+  EXPECT_THAT(*ref_a, Eq("z"));
+  EXPECT_THAT(ref_a.index(), Eq(0u));
 
-  EXPECT_EQ(*(ref2->str), "a");
-  EXPECT_EQ(1u, ref2.index());
+  EXPECT_THAT(*ref_b, Eq("a"));
+  EXPECT_THAT(ref_b.index(), Eq(1u));
 
-  EXPECT_EQ(*ref3, "m");
-  EXPECT_EQ(2u, ref3.index());
+  EXPECT_THAT(*ref_c, Eq("m"));
+  EXPECT_THAT(ref_c.index(), Eq(2u));
 
-  pool.Sort([](const StringPool::Entry& a, const StringPool::Entry& b) -> bool {
-    return a.value < b.value;
-  });
+  pool.Sort();
 
-  EXPECT_EQ(*ref, "z");
-  EXPECT_EQ(2u, ref.index());
+  EXPECT_THAT(*ref_a, Eq("z"));
+  EXPECT_THAT(ref_a.index(), Eq(2u));
 
-  EXPECT_EQ(*(ref2->str), "a");
-  EXPECT_EQ(0u, ref2.index());
+  EXPECT_THAT(*ref_b, Eq("a"));
+  EXPECT_THAT(ref_b.index(), Eq(0u));
 
-  EXPECT_EQ(*ref3, "m");
-  EXPECT_EQ(1u, ref3.index());
+  EXPECT_THAT(*ref_c, Eq("m"));
+  EXPECT_THAT(ref_c.index(), Eq(1u));
 }
 
 TEST(StringPoolTest, SortAndStillDedupe) {
   StringPool pool;
 
-  StringPool::Ref ref = pool.MakeRef("z");
-  StringPool::Ref ref2 = pool.MakeRef("a");
-  StringPool::Ref ref3 = pool.MakeRef("m");
+  StringPool::Ref ref_a = pool.MakeRef("z");
+  StringPool::Ref ref_b = pool.MakeRef("a");
+  StringPool::Ref ref_c = pool.MakeRef("m");
 
-  pool.Sort([](const StringPool::Entry& a, const StringPool::Entry& b) -> bool {
-    return a.value < b.value;
-  });
+  pool.Sort();
 
-  StringPool::Ref ref4 = pool.MakeRef("z");
-  StringPool::Ref ref5 = pool.MakeRef("a");
-  StringPool::Ref ref6 = pool.MakeRef("m");
+  StringPool::Ref ref_d = pool.MakeRef("z");
+  StringPool::Ref ref_e = pool.MakeRef("a");
+  StringPool::Ref ref_f = pool.MakeRef("m");
 
-  EXPECT_EQ(ref4.index(), ref.index());
-  EXPECT_EQ(ref5.index(), ref2.index());
-  EXPECT_EQ(ref6.index(), ref3.index());
+  EXPECT_THAT(ref_d.index(), Eq(ref_a.index()));
+  EXPECT_THAT(ref_e.index(), Eq(ref_b.index()));
+  EXPECT_THAT(ref_f.index(), Eq(ref_c.index()));
 }
 
 TEST(StringPoolTest, AddStyles) {
   StringPool pool;
 
-  StyleString str{{"android"}, {Span{{"b"}, 2, 6}}};
-
-  StringPool::StyleRef ref = pool.MakeRef(str);
-
-  EXPECT_EQ(0u, ref.index());
-  EXPECT_EQ(std::string("android"), *(ref->str));
-  ASSERT_EQ(1u, ref->spans.size());
+  StringPool::StyleRef ref = pool.MakeRef(StyleString{{"android"}, {Span{{"b"}, 2, 6}}});
+  EXPECT_THAT(ref.index(), Eq(0u));
+  EXPECT_THAT(ref->value, Eq("android"));
+  ASSERT_THAT(ref->spans.size(), Eq(1u));
 
   const StringPool::Span& span = ref->spans.front();
-  EXPECT_EQ(*(span.name), "b");
-  EXPECT_EQ(2u, span.first_char);
-  EXPECT_EQ(6u, span.last_char);
+  EXPECT_THAT(*span.name, Eq("b"));
+  EXPECT_THAT(span.first_char, Eq(2u));
+  EXPECT_THAT(span.last_char, Eq(6u));
 }
 
 TEST(StringPoolTest, DoNotDedupeStyleWithSameStringAsNonStyle) {
@@ -163,9 +165,25 @@
   StringPool::Ref ref = pool.MakeRef("android");
 
   StyleString str{{"android"}};
-  StringPool::StyleRef styleRef = pool.MakeRef(str);
+  StringPool::StyleRef style_ref = pool.MakeRef(StyleString{{"android"}});
 
-  EXPECT_NE(ref.index(), styleRef.index());
+  EXPECT_THAT(ref.index(), Ne(style_ref.index()));
+}
+
+TEST(StringPoolTest, StylesAndStringsAreSeparateAfterSorting) {
+  StringPool pool;
+
+  StringPool::StyleRef ref_a = pool.MakeRef(StyleString{{"beta"}});
+  StringPool::Ref ref_b = pool.MakeRef("alpha");
+  StringPool::StyleRef ref_c = pool.MakeRef(StyleString{{"alpha"}});
+
+  EXPECT_THAT(ref_b.index(), Ne(ref_c.index()));
+
+  pool.Sort();
+
+  EXPECT_THAT(ref_c.index(), Eq(0u));
+  EXPECT_THAT(ref_a.index(), Eq(1u));
+  EXPECT_THAT(ref_b.index(), Eq(2u));
 }
 
 TEST(StringPoolTest, FlattenEmptyStringPoolUtf8) {
@@ -177,7 +195,7 @@
 
   std::unique_ptr<uint8_t[]> data = util::Copy(buffer);
   ResStringPool test;
-  ASSERT_EQ(test.setTo(data.get(), buffer.size()), NO_ERROR);
+  ASSERT_THAT(test.setTo(data.get(), buffer.size()), Eq(NO_ERROR));
 }
 
 TEST(StringPoolTest, FlattenOddCharactersUtf16) {
@@ -193,9 +211,9 @@
   ASSERT_EQ(test.setTo(data.get(), buffer.size()), NO_ERROR);
   size_t len = 0;
   const char16_t* str = test.stringAt(0, &len);
-  EXPECT_EQ(1u, len);
-  EXPECT_EQ(u'\u093f', *str);
-  EXPECT_EQ(0u, str[1]);
+  EXPECT_THAT(len, Eq(1u));
+  EXPECT_THAT(str, Pointee(Eq(u'\u093f')));
+  EXPECT_THAT(str[1], Eq(0u));
 }
 
 constexpr const char* sLongString =
@@ -210,18 +228,20 @@
 
   StringPool pool;
 
-  StringPool::Ref ref1 = pool.MakeRef("hello");
-  StringPool::Ref ref2 = pool.MakeRef("goodbye");
-  StringPool::Ref ref3 = pool.MakeRef(sLongString);
-  StringPool::Ref ref4 = pool.MakeRef("");
-  StringPool::StyleRef ref5 = pool.MakeRef(
-      StyleString{{"style"}, {Span{{"b"}, 0, 1}, Span{{"i"}, 2, 3}}});
+  StringPool::Ref ref_a = pool.MakeRef("hello");
+  StringPool::Ref ref_b = pool.MakeRef("goodbye");
+  StringPool::Ref ref_c = pool.MakeRef(sLongString);
+  StringPool::Ref ref_d = pool.MakeRef("");
+  StringPool::StyleRef ref_e =
+      pool.MakeRef(StyleString{{"style"}, {Span{{"b"}, 0, 1}, Span{{"i"}, 2, 3}}});
 
-  EXPECT_EQ(0u, ref1.index());
-  EXPECT_EQ(1u, ref2.index());
-  EXPECT_EQ(2u, ref3.index());
-  EXPECT_EQ(3u, ref4.index());
-  EXPECT_EQ(4u, ref5.index());
+  // Styles are always first.
+  EXPECT_THAT(ref_e.index(), Eq(0u));
+
+  EXPECT_THAT(ref_a.index(), Eq(1u));
+  EXPECT_THAT(ref_b.index(), Eq(2u));
+  EXPECT_THAT(ref_c.index(), Eq(3u));
+  EXPECT_THAT(ref_d.index(), Eq(4u));
 
   BigBuffer buffers[2] = {BigBuffer(1024), BigBuffer(1024)};
   StringPool::FlattenUtf8(&buffers[0], pool);
@@ -234,38 +254,37 @@
     ResStringPool test;
     ASSERT_EQ(test.setTo(data.get(), buffer.size()), NO_ERROR);
 
-    EXPECT_EQ(std::string("hello"), util::GetString(test, 0));
-    EXPECT_EQ(StringPiece16(u"hello"), util::GetString16(test, 0));
+    EXPECT_THAT(util::GetString(test, 1), Eq("hello"));
+    EXPECT_THAT(util::GetString16(test, 1), Eq(u"hello"));
 
-    EXPECT_EQ(std::string("goodbye"), util::GetString(test, 1));
-    EXPECT_EQ(StringPiece16(u"goodbye"), util::GetString16(test, 1));
+    EXPECT_THAT(util::GetString(test, 2), Eq("goodbye"));
+    EXPECT_THAT(util::GetString16(test, 2), Eq(u"goodbye"));
 
-    EXPECT_EQ(StringPiece(sLongString), util::GetString(test, 2));
-    EXPECT_EQ(util::Utf8ToUtf16(sLongString), util::GetString16(test, 2).to_string());
+    EXPECT_THAT(util::GetString(test, 3), Eq(sLongString));
+    EXPECT_THAT(util::GetString16(test, 3), Eq(util::Utf8ToUtf16(sLongString)));
 
     size_t len;
-    EXPECT_TRUE(test.stringAt(3, &len) != nullptr ||
-                test.string8At(3, &len) != nullptr);
+    EXPECT_TRUE(test.stringAt(4, &len) != nullptr || test.string8At(4, &len) != nullptr);
 
-    EXPECT_EQ(std::string("style"), util::GetString(test, 4));
-    EXPECT_EQ(StringPiece16(u"style"), util::GetString16(test, 4));
+    EXPECT_THAT(util::GetString(test, 0), Eq("style"));
+    EXPECT_THAT(util::GetString16(test, 0), Eq(u"style"));
 
-    const ResStringPool_span* span = test.styleAt(4);
-    ASSERT_NE(nullptr, span);
-    EXPECT_EQ(std::string("b"), util::GetString(test, span->name.index));
-    EXPECT_EQ(StringPiece16(u"b"), util::GetString16(test, span->name.index));
-    EXPECT_EQ(0u, span->firstChar);
-    EXPECT_EQ(1u, span->lastChar);
+    const ResStringPool_span* span = test.styleAt(0);
+    ASSERT_THAT(span, NotNull());
+    EXPECT_THAT(util::GetString(test, span->name.index), Eq("b"));
+    EXPECT_THAT(util::GetString16(test, span->name.index), Eq(u"b"));
+    EXPECT_THAT(span->firstChar, Eq(0u));
+    EXPECT_THAT(span->lastChar, Eq(1u));
     span++;
 
-    ASSERT_NE(ResStringPool_span::END, span->name.index);
-    EXPECT_EQ(std::string("i"), util::GetString(test, span->name.index));
-    EXPECT_EQ(StringPiece16(u"i"), util::GetString16(test, span->name.index));
-    EXPECT_EQ(2u, span->firstChar);
-    EXPECT_EQ(3u, span->lastChar);
+    ASSERT_THAT(span->name.index, Ne(ResStringPool_span::END));
+    EXPECT_THAT(util::GetString(test, span->name.index), Eq("i"));
+    EXPECT_THAT(util::GetString16(test, span->name.index), Eq(u"i"));
+    EXPECT_THAT(span->firstChar, Eq(2u));
+    EXPECT_THAT(span->lastChar, Eq(3u));
     span++;
 
-    EXPECT_EQ(ResStringPool_span::END, span->name.index);
+    EXPECT_THAT(span->name.index, Eq(ResStringPool_span::END));
   }
 }
 
diff --git a/tools/aapt2/ValueVisitor.h b/tools/aapt2/ValueVisitor.h
index 2763d49..eb4fa49 100644
--- a/tools/aapt2/ValueVisitor.h
+++ b/tools/aapt2/ValueVisitor.h
@@ -80,7 +80,7 @@
   }
 
   void VisitSubValues(Array* array) {
-    for (std::unique_ptr<Item>& item : array->items) {
+    for (std::unique_ptr<Item>& item : array->elements) {
       item->Accept(this);
     }
   }
diff --git a/tools/aapt2/cmd/Compile.cpp b/tools/aapt2/cmd/Compile.cpp
index b64cd8c..7f5bbf0 100644
--- a/tools/aapt2/cmd/Compile.cpp
+++ b/tools/aapt2/cmd/Compile.cpp
@@ -16,11 +16,11 @@
 
 #include <dirent.h>
 
-#include <fstream>
 #include <string>
 
 #include "android-base/errors.h"
 #include "android-base/file.h"
+#include "android-base/utf8.h"
 #include "androidfw/StringPiece.h"
 #include "google/protobuf/io/coded_stream.h"
 #include "google/protobuf/io/zero_copy_stream_impl_lite.h"
@@ -38,6 +38,7 @@
 #include "flatten/Archive.h"
 #include "flatten/XmlFlattener.h"
 #include "io/BigBufferOutputStream.h"
+#include "io/FileInputStream.h"
 #include "io/Util.h"
 #include "proto/ProtoSerialize.h"
 #include "util/Files.h"
@@ -46,8 +47,9 @@
 #include "xml/XmlDom.h"
 #include "xml/XmlPullParser.h"
 
-using android::StringPiece;
-using google::protobuf::io::CopyingOutputStreamAdaptor;
+using ::aapt::io::FileInputStream;
+using ::android::StringPiece;
+using ::google::protobuf::io::CopyingOutputStreamAdaptor;
 
 namespace aapt {
 
@@ -57,19 +59,14 @@
   std::string name;
   std::string extension;
 
-  // Original config str. We keep this because when we parse the config, we may
-  // add on
-  // version qualifiers. We want to preserve the original input so the output is
-  // easily
+  // Original config str. We keep this because when we parse the config, we may add on
+  // version qualifiers. We want to preserve the original input so the output is easily
   // computed before hand.
   std::string config_str;
   ConfigDescription config;
 };
 
-/**
- * Resource file paths are expected to look like:
- * [--/res/]type[-config]/name
- */
+// Resource file paths are expected to look like: [--/res/]type[-config]/name
 static Maybe<ResourcePathData> ExtractResourcePathData(const std::string& path,
                                                        std::string* out_error) {
   std::vector<std::string> parts = util::Split(path, file::sDirSep);
@@ -137,9 +134,7 @@
   return util::StartsWith(filename, ".");
 }
 
-/**
- * Walks the res directory structure, looking for resource files.
- */
+// Walks the res directory structure, looking for resource files.
 static bool LoadInputFilesFromDir(IAaptContext* context, const CompileOptions& options,
                                   std::vector<ResourcePathData>* out_path_data) {
   const std::string& root_dir = options.res_dir.value();
@@ -195,22 +190,20 @@
                          const std::string& output_path) {
   ResourceTable table;
   {
-    std::ifstream fin(path_data.source.path, std::ifstream::binary);
-    if (!fin) {
+    FileInputStream fin(path_data.source.path);
+    if (fin.HadError()) {
       context->GetDiagnostics()->Error(DiagMessage(path_data.source)
-                                       << "failed to open file: "
-                                       << android::base::SystemErrorCodeToString(errno));
+                                       << "failed to open file: " << fin.GetError());
       return false;
     }
 
     // Parse the values file from XML.
-    xml::XmlPullParser xml_parser(fin);
+    xml::XmlPullParser xml_parser(&fin);
 
     ResourceParserOptions parser_options;
     parser_options.error_on_positional_arguments = !options.legacy_mode;
 
-    // If the filename includes donottranslate, then the default translatable is
-    // false.
+    // If the filename includes donottranslate, then the default translatable is false.
     parser_options.translatable = path_data.name.find("donottranslate") == std::string::npos;
 
     ResourceParser res_parser(context->GetDiagnostics(), &table, path_data.source, path_data.config,
@@ -218,8 +211,6 @@
     if (!res_parser.Parse(&xml_parser)) {
       return false;
     }
-
-    fin.close();
   }
 
   if (options.pseudolocalize) {
@@ -239,8 +230,7 @@
   // Assign an ID to any package that has resources.
   for (auto& pkg : table.packages) {
     if (!pkg->id) {
-      // If no package ID was set while parsing (public identifiers), auto
-      // assign an ID.
+      // If no package ID was set while parsing (public identifiers), auto assign an ID.
       pkg->id = context->GetPackageId();
     }
   }
@@ -292,7 +282,7 @@
     // Number of CompiledFiles.
     output_stream.WriteLittleEndian32(1);
 
-    std::unique_ptr<pb::CompiledFile> compiled_file = SerializeCompiledFileToPb(file);
+    std::unique_ptr<pb::internal::CompiledFile> compiled_file = SerializeCompiledFileToPb(file);
     output_stream.WriteCompiledFile(compiled_file.get());
     output_stream.WriteData(&buffer);
 
@@ -329,7 +319,7 @@
     // Number of CompiledFiles.
     output_stream.WriteLittleEndian32(1);
 
-    std::unique_ptr<pb::CompiledFile> compiled_file = SerializeCompiledFileToPb(file);
+    std::unique_ptr<pb::internal::CompiledFile> compiled_file = SerializeCompiledFileToPb(file);
     output_stream.WriteCompiledFile(compiled_file.get());
     output_stream.WriteData(map.getDataPtr(), map.getDataLength());
 
@@ -356,7 +346,8 @@
     return false;
   }
 
-  std::unique_ptr<pb::CompiledFile> pb_compiled_file = SerializeCompiledFileToPb(xmlres->file);
+  std::unique_ptr<pb::internal::CompiledFile> pb_compiled_file =
+      SerializeCompiledFileToPb(xmlres->file);
   out->WriteCompiledFile(pb_compiled_file.get());
   out->WriteData(&buffer);
 
@@ -367,7 +358,7 @@
   return true;
 }
 
-static bool IsValidFile(IAaptContext* context, const StringPiece& input_path) {
+static bool IsValidFile(IAaptContext* context, const std::string& input_path) {
   const file::FileType file_type = file::GetFileType(input_path);
   if (file_type != file::FileType::kRegular && file_type != file::FileType::kSymlink) {
     if (file_type == file::FileType::kDirectory) {
@@ -393,17 +384,14 @@
 
   std::unique_ptr<xml::XmlResource> xmlres;
   {
-    std::ifstream fin(path_data.source.path, std::ifstream::binary);
-    if (!fin) {
+    FileInputStream fin(path_data.source.path);
+    if (fin.HadError()) {
       context->GetDiagnostics()->Error(DiagMessage(path_data.source)
-                                       << "failed to open file: "
-                                       << android::base::SystemErrorCodeToString(errno));
+                                       << "failed to open file: " << fin.GetError());
       return false;
     }
 
     xmlres = xml::Inflate(&fin, context->GetDiagnostics(), path_data.source);
-
-    fin.close();
   }
 
   if (!xmlres) {
@@ -432,12 +420,9 @@
     return false;
   }
 
-  // Make sure CopyingOutputStreamAdaptor is deleted before we call
-  // writer->FinishEntry().
+  // Make sure CopyingOutputStreamAdaptor is deleted before we call writer->FinishEntry().
   {
-    // Wrap our IArchiveWriter with an adaptor that implements the
-    // ZeroCopyOutputStream
-    // interface.
+    // Wrap our IArchiveWriter with an adaptor that implements the ZeroCopyOutputStream interface.
     CopyingOutputStreamAdaptor copying_adaptor(writer);
     CompiledFileOutputStream output_stream(&copying_adaptor);
 
diff --git a/tools/aapt2/cmd/Dump.cpp b/tools/aapt2/cmd/Dump.cpp
index aa94723..0965910 100644
--- a/tools/aapt2/cmd/Dump.cpp
+++ b/tools/aapt2/cmd/Dump.cpp
@@ -27,11 +27,11 @@
 #include "unflatten/BinaryResourceParser.h"
 #include "util/Files.h"
 
-using android::StringPiece;
+using ::android::StringPiece;
 
 namespace aapt {
 
-bool DumpCompiledFile(const pb::CompiledFile& pb_file, const void* data, size_t len,
+bool DumpCompiledFile(const pb::internal::CompiledFile& pb_file, const void* data, size_t len,
                       const Source& source, IAaptContext* context) {
   std::unique_ptr<ResourceFile> file =
       DeserializeCompiledFileFromPb(pb_file, source, context->GetDiagnostics());
@@ -118,7 +118,7 @@
       }
 
       for (uint32_t i = 0; i < num_files; i++) {
-        pb::CompiledFile compiled_file;
+        pb::internal::CompiledFile compiled_file;
         if (!input.ReadCompiledFile(&compiled_file)) {
           context->GetDiagnostics()->Warn(DiagMessage() << "failed to read compiled file");
           return false;
diff --git a/tools/aapt2/cmd/Link.cpp b/tools/aapt2/cmd/Link.cpp
index 740a401..1f56300 100644
--- a/tools/aapt2/cmd/Link.cpp
+++ b/tools/aapt2/cmd/Link.cpp
@@ -40,6 +40,7 @@
 #include "flatten/TableFlattener.h"
 #include "flatten/XmlFlattener.h"
 #include "io/BigBufferInputStream.h"
+#include "io/FileInputStream.h"
 #include "io/FileSystem.h"
 #include "io/Util.h"
 #include "io/ZipArchive.h"
@@ -61,8 +62,9 @@
 #include "util/Files.h"
 #include "xml/XmlDom.h"
 
-using android::StringPiece;
-using android::base::StringPrintf;
+using ::aapt::io::FileInputStream;
+using ::android::StringPiece;
+using ::android::base::StringPrintf;
 
 namespace aapt {
 
@@ -249,10 +251,11 @@
 };
 
 static bool FlattenXml(IAaptContext* context, xml::XmlResource* xml_res, const StringPiece& path,
-                       bool keep_raw_values, IArchiveWriter* writer) {
+                       bool keep_raw_values, bool utf16, IArchiveWriter* writer) {
   BigBuffer buffer(1024);
   XmlFlattenerOptions options = {};
   options.keep_raw_values = keep_raw_values;
+  options.use_utf16 = utf16;
   XmlFlattener flattener(&buffer, options);
   if (!flattener.Consume(context, xml_res)) {
     return false;
@@ -284,13 +287,11 @@
   return table;
 }
 
-/**
- * Inflates an XML file from the source path.
- */
+// Inflates an XML file from the source path.
 static std::unique_ptr<xml::XmlResource> LoadXml(const std::string& path, IDiagnostics* diag) {
-  std::ifstream fin(path, std::ifstream::binary);
-  if (!fin) {
-    diag->Error(DiagMessage(path) << strerror(errno));
+  FileInputStream fin(path);
+  if (fin.HadError()) {
+    diag->Error(DiagMessage(path) << "failed to load XML file: " << fin.GetError());
     return {};
   }
   return xml::Inflate(&fin, diag, Source(path));
@@ -441,7 +442,7 @@
 
 static bool IsVectorElement(const std::string& name) {
   return name == "vector" || name == "animated-vector" || name == "pathInterpolator" ||
-         name == "objectAnimator";
+         name == "objectAnimator" || name == "gradient" || name == "animated-selector";
 }
 
 template <typename T>
@@ -482,7 +483,7 @@
 
   if (options_.no_version_vectors || options_.no_version_transitions) {
     // Skip this if it is a vector or animated-vector.
-    xml::Element* el = xml::FindRootElement(doc);
+    xml::Element* el = doc->root.get();
     if (el && el->namespace_uri.empty()) {
       if ((options_.no_version_vectors && IsVectorElement(el->name)) ||
           (options_.no_version_transitions && IsTransitionElement(el->name))) {
@@ -574,6 +575,11 @@
         if (file_op.xml_to_flatten) {
           std::vector<std::unique_ptr<xml::XmlResource>> versioned_docs =
               LinkAndVersionXmlFile(table, &file_op);
+          if (versioned_docs.empty()) {
+            error = true;
+            continue;
+          }
+
           for (std::unique_ptr<xml::XmlResource>& doc : versioned_docs) {
             std::string dst_path = file_op.dst_path;
             if (doc->file.config != file_op.config) {
@@ -594,7 +600,7 @@
               }
             }
             error |= !FlattenXml(context_, doc.get(), dst_path, options_.keep_raw_values,
-                                 archive_writer);
+                                 false /*utf16*/, archive_writer);
           }
         } else {
           error |= !io::CopyFileToArchive(context_, file_op.file_to_copy, file_op.dst_path,
@@ -748,6 +754,9 @@
     for (auto& entry : asset_source->GetAssignedPackageIds()) {
       if (entry.first > kFrameworkPackageId && entry.first < kAppPackageId) {
         final_table_.included_packages_[entry.first] = entry.second;
+      } else if (entry.first == kAppPackageId) {
+        // Capture the included base feature package.
+        included_feature_base_ = entry.second;
       }
     }
 
@@ -989,7 +998,8 @@
       manifest_class->GetCommentBuilder()->AppendComment(proper_annotation);
     }
 
-    const std::string& package_utf8 = context_->GetCompilationPackage();
+    const std::string package_utf8 =
+        options_.custom_java_package.value_or_default(context_->GetCompilationPackage());
 
     std::string out_path = options_.generate_java_class_path.value();
     file::AppendPath(&out_path, file::PackageToPath(package_utf8));
@@ -1289,7 +1299,7 @@
       }
 
       for (uint32_t i = 0; i < num_files; i++) {
-        pb::CompiledFile compiled_file;
+        pb::internal::CompiledFile compiled_file;
         if (!input_stream.ReadCompiledFile(&compiled_file)) {
           context_->GetDiagnostics()->Error(DiagMessage(src)
                                             << "failed to read compiled file header");
@@ -1377,7 +1387,8 @@
   bool WriteApk(IArchiveWriter* writer, proguard::KeepSet* keep_set, xml::XmlResource* manifest,
                 ResourceTable* table) {
     const bool keep_raw_values = context_->GetPackageType() == PackageType::kStaticLib;
-    bool result = FlattenXml(context_, manifest, "AndroidManifest.xml", keep_raw_values, writer);
+    bool result = FlattenXml(context_, manifest, "AndroidManifest.xml", keep_raw_values,
+                             true /*utf16*/, writer);
     if (!result) {
       return false;
     }
@@ -1400,17 +1411,53 @@
       return false;
     }
 
-    if (context_->GetPackageType() == PackageType::kStaticLib) {
-      if (!FlattenTableToPb(table, writer)) {
-        return false;
-      }
-    } else {
-      if (!FlattenTable(table, writer)) {
-        context_->GetDiagnostics()->Error(DiagMessage() << "failed to write resources.arsc");
-        return false;
+    // Hack to fix b/68820737.
+    // We need to modify the ResourceTable's package name, but that should NOT affect
+    // anything else being generated, which includes the Java classes.
+    // If required, the package name is modifed before flattening, and then modified back
+    // to its original name.
+    ResourceTablePackage* package_to_rewrite = nullptr;
+    if (context_->GetPackageId() > kAppPackageId &&
+        included_feature_base_ == make_value(context_->GetCompilationPackage())) {
+      // The base APK is included, and this is a feature split. If the base package is
+      // the same as this package, then we are building an old style Android Instant Apps feature
+      // split and must apply this workaround to avoid requiring namespaces support.
+      package_to_rewrite = table->FindPackage(context_->GetCompilationPackage());
+      if (package_to_rewrite != nullptr) {
+        CHECK_EQ(1u, table->packages.size()) << "can't change name of package when > 1 package";
+
+        std::string new_package_name =
+            StringPrintf("%s.%s", package_to_rewrite->name.c_str(),
+                         app_info_.split_name.value_or_default("feature").c_str());
+
+        if (context_->IsVerbose()) {
+          context_->GetDiagnostics()->Note(
+              DiagMessage() << "rewriting resource package name for feature split to '"
+                            << new_package_name << "'");
+        }
+        package_to_rewrite->name = new_package_name;
       }
     }
-    return true;
+
+    bool success;
+    if (context_->GetPackageType() == PackageType::kStaticLib) {
+      success = FlattenTableToPb(table, writer);
+    } else {
+      success = FlattenTable(table, writer);
+    }
+
+    if (package_to_rewrite != nullptr) {
+      // Change the name back.
+      package_to_rewrite->name = context_->GetCompilationPackage();
+      if (package_to_rewrite->id) {
+        table->included_packages_.erase(package_to_rewrite->id.value());
+      }
+    }
+
+    if (!success) {
+      context_->GetDiagnostics()->Error(DiagMessage() << "failed to write resource table");
+    }
+    return success;
   }
 
   int Run(const std::vector<std::string>& input_files) {
@@ -1439,8 +1486,8 @@
       return 1;
     }
 
-    const AppInfo& app_info = maybe_app_info.value();
-    context_->SetMinSdkVersion(app_info.min_sdk_version.value_or_default(0));
+    app_info_ = maybe_app_info.value();
+    context_->SetMinSdkVersion(app_info_.min_sdk_version.value_or_default(0));
 
     context_->SetNameManglerPolicy(NameManglerPolicy{context_->GetCompilationPackage()});
 
@@ -1639,7 +1686,7 @@
 
         // Generate an AndroidManifest.xml for each split.
         std::unique_ptr<xml::XmlResource> split_manifest =
-            GenerateSplitManifest(app_info, *split_constraints_iter);
+            GenerateSplitManifest(app_info_, *split_constraints_iter);
 
         XmlReferenceLinker linker;
         if (!linker.Consume(context_, split_manifest.get())) {
@@ -1807,6 +1854,8 @@
   LinkContext* context_;
   ResourceTable final_table_;
 
+  AppInfo app_info_;
+
   std::unique_ptr<TableMerger> table_merger_;
 
   // A pointer to the FileCollection representing the filesystem (not archives).
@@ -1822,6 +1871,9 @@
 
   // The set of shared libraries being used, mapping their assigned package ID to package name.
   std::map<size_t, std::string> shared_libs_;
+
+  // The package name of the base application, if it is included.
+  Maybe<std::string> included_feature_base_;
 };
 
 int Link(const std::vector<StringPiece>& args, IDiagnostics* diagnostics) {
diff --git a/tools/aapt2/cmd/Optimize.cpp b/tools/aapt2/cmd/Optimize.cpp
index 194c0c8..9d71775 100644
--- a/tools/aapt2/cmd/Optimize.cpp
+++ b/tools/aapt2/cmd/Optimize.cpp
@@ -17,6 +17,7 @@
 #include <memory>
 #include <vector>
 
+#include "android-base/stringprintf.h"
 #include "androidfw/StringPiece.h"
 
 #include "Diagnostics.h"
@@ -26,6 +27,8 @@
 #include "SdkConstants.h"
 #include "ValueVisitor.h"
 #include "cmd/Util.h"
+#include "configuration/ConfigurationParser.h"
+#include "filter/AbiFilter.h"
 #include "flatten/TableFlattener.h"
 #include "flatten/XmlFlattener.h"
 #include "io/BigBufferInputStream.h"
@@ -33,14 +36,21 @@
 #include "optimize/ResourceDeduper.h"
 #include "optimize/VersionCollapser.h"
 #include "split/TableSplitter.h"
+#include "util/Files.h"
 
-using android::StringPiece;
+using ::aapt::configuration::Abi;
+using ::aapt::configuration::Artifact;
+using ::aapt::configuration::PostProcessingConfiguration;
+using ::android::StringPiece;
+using ::android::base::StringPrintf;
 
 namespace aapt {
 
 struct OptimizeOptions {
   // Path to the output APK.
-  std::string output_path;
+  Maybe<std::string> output_path;
+  // Path to the output APK directory for splits.
+  Maybe<std::string> output_dir;
 
   // Details of the app extracted from the AndroidManifest.xml
   AppInfo app_info;
@@ -55,6 +65,8 @@
   std::vector<SplitConstraints> split_constraints;
 
   TableFlattenerOptions table_flattener_options;
+
+  Maybe<PostProcessingConfiguration> configuration;
 };
 
 class OptimizeContext : public IAaptContext {
@@ -175,10 +187,52 @@
       ++split_constraints_iter;
     }
 
-    std::unique_ptr<IArchiveWriter> writer =
-        CreateZipFileArchiveWriter(context_->GetDiagnostics(), options_.output_path);
-    if (!apk->WriteToArchive(context_, options_.table_flattener_options, writer.get())) {
-      return 1;
+    if (options_.configuration && options_.output_dir) {
+      PostProcessingConfiguration& config = options_.configuration.value();
+
+      // For now, just write out the stripped APK since ABI splitting doesn't modify anything else.
+      for (const Artifact& artifact : config.artifacts) {
+        if (artifact.abi_group) {
+          const std::string& group = artifact.abi_group.value();
+
+          auto abi_group = config.abi_groups.find(group);
+          // TODO: Remove validation when configuration parser ensures referential integrity.
+          if (abi_group == config.abi_groups.end()) {
+            context_->GetDiagnostics()->Note(
+                DiagMessage() << "could not find referenced ABI group '" << group << "'");
+            return 1;
+          }
+          FilterChain filters;
+          filters.AddFilter(AbiFilter::FromAbiList(abi_group->second));
+
+          const std::string& path = apk->GetSource().path;
+          const StringPiece ext = file::GetExtension(path);
+          const std::string name = path.substr(0, path.rfind(ext.to_string()));
+
+          // Name is hard coded for now since only one split dimension is supported.
+          // TODO: Incorporate name generation into the configuration objects.
+          const std::string file_name =
+              StringPrintf("%s.%s%s", name.c_str(), group.c_str(), ext.data());
+          std::string out = options_.output_dir.value();
+          file::AppendPath(&out, file_name);
+
+          std::unique_ptr<IArchiveWriter> writer =
+              CreateZipFileArchiveWriter(context_->GetDiagnostics(), out);
+
+          if (!apk->WriteToArchive(context_, options_.table_flattener_options, &filters,
+                                   writer.get())) {
+            return 1;
+          }
+        }
+      }
+    }
+
+    if (options_.output_path) {
+      std::unique_ptr<IArchiveWriter> writer =
+          CreateZipFileArchiveWriter(context_->GetDiagnostics(), options_.output_path.value());
+      if (!apk->WriteToArchive(context_, options_.table_flattener_options, writer.get())) {
+        return 1;
+      }
     }
 
     return 0;
@@ -214,8 +268,8 @@
             if (file_ref->file == nullptr) {
               ResourceNameRef name(pkg->name, type->type, entry->name);
               context_->GetDiagnostics()->Warn(DiagMessage(file_ref->GetSource())
-                                                << "file for resource " << name << " with config '"
-                                                << config_value->config << "' not found");
+                                               << "file for resource " << name << " with config '"
+                                               << config_value->config << "' not found");
               continue;
             }
 
@@ -293,13 +347,16 @@
 int Optimize(const std::vector<StringPiece>& args) {
   OptimizeContext context;
   OptimizeOptions options;
+  Maybe<std::string> config_path;
   Maybe<std::string> target_densities;
   std::vector<std::string> configs;
   std::vector<std::string> split_args;
   bool verbose = false;
   Flags flags =
       Flags()
-          .RequiredFlag("-o", "Path to the output APK.", &options.output_path)
+          .OptionalFlag("-o", "Path to the output APK.", &options.output_path)
+          .OptionalFlag("-d", "Path to the output directory (for splits).", &options.output_dir)
+          .OptionalFlag("-x", "Path to XML configuration file.", &config_path)
           .OptionalFlag(
               "--target-densities",
               "Comma separated list of the screen densities that the APK will be optimized for.\n"
@@ -369,6 +426,22 @@
     }
   }
 
+  if (config_path) {
+    if (!options.output_dir) {
+      context.GetDiagnostics()->Error(
+          DiagMessage() << "Output directory is required when using a configuration file");
+      return 1;
+    }
+    std::string& path = config_path.value();
+    Maybe<ConfigurationParser> for_path = ConfigurationParser::ForPath(path);
+    if (for_path) {
+      options.configuration = for_path.value().WithDiagnostics(context.GetDiagnostics()).Parse();
+    } else {
+      context.GetDiagnostics()->Error(DiagMessage() << "Could not parse config file " << path);
+      return 1;
+    }
+  }
+
   if (!ExtractAppDataFromManifest(&context, apk.get(), &options)) {
     return 1;
   }
diff --git a/tools/aapt2/cmd/Util.cpp b/tools/aapt2/cmd/Util.cpp
index 8741b7b..90fc10a 100644
--- a/tools/aapt2/cmd/Util.cpp
+++ b/tools/aapt2/cmd/Util.cpp
@@ -28,7 +28,7 @@
 #include "util/Maybe.h"
 #include "util/Util.h"
 
-using android::StringPiece;
+using ::android::StringPiece;
 
 namespace aapt {
 
@@ -72,7 +72,6 @@
   }
 
   *out_path = parts[0];
-  std::vector<ConfigDescription> configs;
   for (const StringPiece& config_str : util::Tokenize(parts[1], ',')) {
     ConfigDescription config;
     if (!ConfigDescription::Parse(config_str, &config)) {
@@ -134,19 +133,46 @@
   return xml::AaptAttribute(Attribute(), id);
 }
 
+static xml::NamespaceDecl CreateAndroidNamespaceDecl() {
+  xml::NamespaceDecl decl;
+  decl.prefix = "android";
+  decl.uri = xml::kSchemaAndroid;
+  return decl;
+}
+
+// Returns a copy of 'name' which conforms to the regex '[a-zA-Z]+[a-zA-Z0-9_]*' by
+// replacing nonconforming characters with underscores.
+//
+// See frameworks/base/core/java/android/content/pm/PackageParser.java which
+// checks this at runtime.
+static std::string MakePackageSafeName(const std::string &name) {
+  std::string result(name);
+  bool first = true;
+  for (char &c : result) {
+    if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
+      first = false;
+      continue;
+    }
+    if (!first) {
+      if (c >= '0' && c <= '9') {
+        continue;
+      }
+    }
+
+    c = '_';
+    first = false;
+  }
+  return result;
+}
+
 std::unique_ptr<xml::XmlResource> GenerateSplitManifest(const AppInfo& app_info,
                                                         const SplitConstraints& constraints) {
   const ResourceId kVersionCode(0x0101021b);
   const ResourceId kRevisionCode(0x010104d5);
   const ResourceId kHasCode(0x0101000c);
 
-  std::unique_ptr<xml::XmlResource> doc = util::make_unique<xml::XmlResource>();
-
-  std::unique_ptr<xml::Namespace> namespace_android = util::make_unique<xml::Namespace>();
-  namespace_android->namespace_uri = xml::kSchemaAndroid;
-  namespace_android->namespace_prefix = "android";
-
   std::unique_ptr<xml::Element> manifest_el = util::make_unique<xml::Element>();
+  manifest_el->namespace_decls.push_back(CreateAndroidNamespaceDecl());
   manifest_el->name = "manifest";
   manifest_el->attributes.push_back(xml::Attribute{"", "package", app_info.package});
 
@@ -170,7 +196,11 @@
   if (app_info.split_name) {
     split_name << app_info.split_name.value() << ".";
   }
-  split_name << "config." << util::Joiner(constraints.configs, "_");
+  std::vector<std::string> sanitized_config_names;
+  for (const auto &config : constraints.configs) {
+    sanitized_config_names.push_back(MakePackageSafeName(config.toString().string()));
+  }
+  split_name << "config." << util::Joiner(sanitized_config_names, "_");
 
   manifest_el->attributes.push_back(xml::Attribute{"", "split", split_name.str()});
 
@@ -179,6 +209,13 @@
         xml::Attribute{"", "configForSplit", app_info.split_name.value()});
   }
 
+  // Splits may contain more configurations than originally desired (fall-back densities, etc.).
+  // This makes programmatic discovery of split targeting difficult. Encode the original
+  // split constraints intended for this split.
+  std::stringstream target_config_str;
+  target_config_str << util::Joiner(constraints.configs, ",");
+  manifest_el->attributes.push_back(xml::Attribute{"", "targetConfig", target_config_str.str()});
+
   std::unique_ptr<xml::Element> application_el = util::make_unique<xml::Element>();
   application_el->name = "application";
   application_el->attributes.push_back(
@@ -186,8 +223,9 @@
                      util::make_unique<BinaryPrimitive>(android::Res_value::TYPE_INT_BOOLEAN, 0u)});
 
   manifest_el->AppendChild(std::move(application_el));
-  namespace_android->AppendChild(std::move(manifest_el));
-  doc->root = std::move(namespace_android);
+
+  std::unique_ptr<xml::XmlResource> doc = util::make_unique<xml::XmlResource>();
+  doc->root = std::move(manifest_el);
   return doc;
 }
 
@@ -277,7 +315,7 @@
 
 Maybe<AppInfo> ExtractAppInfoFromBinaryManifest(xml::XmlResource* xml_res, IDiagnostics* diag) {
   // Make sure the first element is <manifest> with package attribute.
-  xml::Element* manifest_el = xml::FindRootElement(xml_res->root.get());
+  xml::Element* manifest_el = xml_res->root.get();
   if (manifest_el == nullptr) {
     return {};
   }
diff --git a/tools/aapt2/cmd/Util_test.cpp b/tools/aapt2/cmd/Util_test.cpp
new file mode 100644
index 0000000..0c527f6
--- /dev/null
+++ b/tools/aapt2/cmd/Util_test.cpp
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+
+#include "Util.h"
+
+#include "AppInfo.h"
+#include "split/TableSplitter.h"
+#include "test/Test.h"
+
+namespace aapt {
+
+TEST(UtilTest, SplitNamesAreSanitized) {
+    AppInfo app_info{"com.pkg"};
+    SplitConstraints split_constraints{
+        {test::ParseConfigOrDie("en-rUS-land"), test::ParseConfigOrDie("b+sr+Latn")}};
+
+    const auto doc = GenerateSplitManifest(app_info, split_constraints);
+    const auto &root = doc->root;
+    EXPECT_EQ(root->name, "manifest");
+    // split names cannot contain hyphens or plus signs.
+    EXPECT_EQ(root->FindAttribute("", "split")->value, "config.b_sr_Latn_en_rUS_land");
+    // but we should use resource qualifiers verbatim in 'targetConfig'.
+    EXPECT_EQ(root->FindAttribute("", "targetConfig")->value, "b+sr+Latn,en-rUS-land");
+}
+
+}  // namespace aapt
diff --git a/tools/aapt2/compile/IdAssigner_test.cpp b/tools/aapt2/compile/IdAssigner_test.cpp
index d465091..5cff004 100644
--- a/tools/aapt2/compile/IdAssigner_test.cpp
+++ b/tools/aapt2/compile/IdAssigner_test.cpp
@@ -64,12 +64,12 @@
   // Expect to fill in the gaps between 0x0101XXXX and 0x0104XXXX.
 
   maybe_result = table->FindResource(test::ParseNameOrDie("android:dimen/two"));
-  AAPT_ASSERT_TRUE(maybe_result);
+  ASSERT_TRUE(maybe_result);
   EXPECT_EQ(make_value<uint8_t>(2), maybe_result.value().type->id);
 
   maybe_result =
       table->FindResource(test::ParseNameOrDie("android:integer/three"));
-  AAPT_ASSERT_TRUE(maybe_result);
+  ASSERT_TRUE(maybe_result);
   EXPECT_EQ(make_value<uint8_t>(3), maybe_result.value().type->id);
 
   // Expect to bypass the reserved 0x0104XXXX IDs and use the next 0x0105XXXX
@@ -77,17 +77,17 @@
 
   maybe_result =
       table->FindResource(test::ParseNameOrDie("android:string/five"));
-  AAPT_ASSERT_TRUE(maybe_result);
+  ASSERT_TRUE(maybe_result);
   EXPECT_EQ(make_value<uint8_t>(5), maybe_result.value().type->id);
 
   // Expect to fill in the gaps between 0x01040000 and 0x01040006.
 
   maybe_result = table->FindResource(test::ParseNameOrDie("android:attr/bar"));
-  AAPT_ASSERT_TRUE(maybe_result);
+  ASSERT_TRUE(maybe_result);
   EXPECT_EQ(make_value<uint16_t>(1), maybe_result.value().entry->id);
 
   maybe_result = table->FindResource(test::ParseNameOrDie("android:attr/baz"));
-  AAPT_ASSERT_TRUE(maybe_result);
+  ASSERT_TRUE(maybe_result);
   EXPECT_EQ(make_value<uint16_t>(2), maybe_result.value().entry->id);
 }
 
@@ -121,7 +121,7 @@
   ASSERT_TRUE(VerifyIds(table.get()));
   Maybe<ResourceTable::SearchResult> result =
       table->FindResource(test::ParseNameOrDie("android:attr/foo"));
-  AAPT_ASSERT_TRUE(result);
+  ASSERT_TRUE(result);
 
   const ResourceTable::SearchResult& search_result = result.value();
   EXPECT_EQ(make_value<uint8_t>(0x01), search_result.package->id);
diff --git a/tools/aapt2/compile/InlineXmlFormatParser.cpp b/tools/aapt2/compile/InlineXmlFormatParser.cpp
index 786494b..73a90da 100644
--- a/tools/aapt2/compile/InlineXmlFormatParser.cpp
+++ b/tools/aapt2/compile/InlineXmlFormatParser.cpp
@@ -16,12 +16,8 @@
 
 #include "compile/InlineXmlFormatParser.h"
 
-#include <sstream>
 #include <string>
 
-#include "android-base/macros.h"
-
-#include "Debug.h"
 #include "ResourceUtils.h"
 #include "util/Util.h"
 #include "xml/XmlDom.h"
@@ -31,19 +27,17 @@
 
 namespace {
 
-/**
- * XML Visitor that will find all <aapt:attr> elements for extraction.
- */
+struct InlineDeclaration {
+  xml::Element* el;
+  std::string attr_namespace_uri;
+  std::string attr_name;
+};
+
+// XML Visitor that will find all <aapt:attr> elements for extraction.
 class Visitor : public xml::PackageAwareVisitor {
  public:
   using xml::PackageAwareVisitor::Visit;
 
-  struct InlineDeclaration {
-    xml::Element* el;
-    std::string attr_namespace_uri;
-    std::string attr_name;
-  };
-
   explicit Visitor(IAaptContext* context, xml::XmlResource* xml_resource)
       : context_(context), xml_resource_(xml_resource) {}
 
@@ -53,51 +47,44 @@
       return;
     }
 
-    const Source& src = xml_resource_->file.source.WithLine(el->line_number);
+    const Source src = xml_resource_->file.source.WithLine(el->line_number);
 
     xml::Attribute* attr = el->FindAttribute({}, "name");
     if (!attr) {
-      context_->GetDiagnostics()->Error(DiagMessage(src)
-                                        << "missing 'name' attribute");
+      context_->GetDiagnostics()->Error(DiagMessage(src) << "missing 'name' attribute");
       error_ = true;
       return;
     }
 
     Maybe<Reference> ref = ResourceUtils::ParseXmlAttributeName(attr->value);
     if (!ref) {
-      context_->GetDiagnostics()->Error(
-          DiagMessage(src) << "invalid XML attribute '" << attr->value << "'");
+      context_->GetDiagnostics()->Error(DiagMessage(src) << "invalid XML attribute '" << attr->value
+                                                         << "'");
       error_ = true;
       return;
     }
 
     const ResourceName& name = ref.value().name.value();
 
-    // Use an empty string for the compilation package because we don't want to
-    // default to
-    // the local package if the user specified name="style" or something. This
-    // should just
+    // Use an empty string for the compilation package because we don't want to default to
+    // the local package if the user specified name="style" or something. This should just
     // be the default namespace.
-    Maybe<xml::ExtractedPackage> maybe_pkg =
-        TransformPackageAlias(name.package, {});
+    Maybe<xml::ExtractedPackage> maybe_pkg = TransformPackageAlias(name.package, {});
     if (!maybe_pkg) {
-      context_->GetDiagnostics()->Error(DiagMessage(src)
-                                        << "invalid namespace prefix '"
-                                        << name.package << "'");
+      context_->GetDiagnostics()->Error(DiagMessage(src) << "invalid namespace prefix '"
+                                                         << name.package << "'");
       error_ = true;
       return;
     }
 
     const xml::ExtractedPackage& pkg = maybe_pkg.value();
-    const bool private_namespace =
-        pkg.private_namespace || ref.value().private_reference;
+    const bool private_namespace = pkg.private_namespace || ref.value().private_reference;
 
     InlineDeclaration decl;
     decl.el = el;
     decl.attr_name = name.entry;
     if (!pkg.package.empty()) {
-      decl.attr_namespace_uri =
-          xml::BuildPackageNamespace(pkg.package, private_namespace);
+      decl.attr_namespace_uri = xml::BuildPackageNamespace(pkg.package, private_namespace);
     }
 
     inline_declarations_.push_back(std::move(decl));
@@ -107,7 +94,9 @@
     return inline_declarations_;
   }
 
-  bool HasError() const { return error_; }
+  bool HasError() const {
+    return error_;
+  }
 
  private:
   DISALLOW_COPY_AND_ASSIGN(Visitor);
@@ -120,8 +109,7 @@
 
 }  // namespace
 
-bool InlineXmlFormatParser::Consume(IAaptContext* context,
-                                    xml::XmlResource* doc) {
+bool InlineXmlFormatParser::Consume(IAaptContext* context, xml::XmlResource* doc) {
   Visitor visitor(context, doc);
   doc->root->Accept(&visitor);
   if (visitor.HasError()) {
@@ -129,69 +117,57 @@
   }
 
   size_t name_suffix_counter = 0;
-  for (const Visitor::InlineDeclaration& decl :
-       visitor.GetInlineDeclarations()) {
+  for (const InlineDeclaration& decl : visitor.GetInlineDeclarations()) {
     auto new_doc = util::make_unique<xml::XmlResource>();
     new_doc->file.config = doc->file.config;
     new_doc->file.source = doc->file.source.WithLine(decl.el->line_number);
     new_doc->file.name = doc->file.name;
 
     // Modify the new entry name. We need to suffix the entry with a number to
-    // avoid
-    // local collisions, then mangle it with the empty package, such that it
-    // won't show up
+    // avoid local collisions, then mangle it with the empty package, such that it won't show up
     // in R.java.
-
-    new_doc->file.name.entry =
-        NameMangler::MangleEntry({}, new_doc->file.name.entry + "__" +
-                                         std::to_string(name_suffix_counter));
+    new_doc->file.name.entry = NameMangler::MangleEntry(
+        {}, new_doc->file.name.entry + "__" + std::to_string(name_suffix_counter));
 
     // Extracted elements must be the only child of <aapt:attr>.
     // Make sure there is one root node in the children (ignore empty text).
-    for (auto& child : decl.el->children) {
+    for (std::unique_ptr<xml::Node>& child : decl.el->children) {
       const Source child_source = doc->file.source.WithLine(child->line_number);
       if (xml::Text* t = xml::NodeCast<xml::Text>(child.get())) {
         if (!util::TrimWhitespace(t->text).empty()) {
-          context->GetDiagnostics()->Error(
-              DiagMessage(child_source)
-              << "can't extract text into its own resource");
+          context->GetDiagnostics()->Error(DiagMessage(child_source)
+                                           << "can't extract text into its own resource");
           return false;
         }
       } else if (new_doc->root) {
-        context->GetDiagnostics()->Error(
-            DiagMessage(child_source)
-            << "inline XML resources must have a single root");
+        context->GetDiagnostics()->Error(DiagMessage(child_source)
+                                         << "inline XML resources must have a single root");
         return false;
       } else {
-        new_doc->root = std::move(child);
+        new_doc->root.reset(static_cast<xml::Element*>(child.release()));
         new_doc->root->parent = nullptr;
+        // Copy down the namespace declarations
+        new_doc->root->namespace_decls = doc->root->namespace_decls;
+        // Recurse for nested inlines
+        Consume(context, new_doc.get());
       }
     }
 
-    // Walk up and find the parent element.
-    xml::Node* node = decl.el;
-    xml::Element* parent_el = nullptr;
-    while (node->parent &&
-           (parent_el = xml::NodeCast<xml::Element>(node->parent)) == nullptr) {
-      node = node->parent;
-    }
-
+    // Get the parent element of <aapt:attr>
+    xml::Element* parent_el = decl.el->parent;
     if (!parent_el) {
-      context->GetDiagnostics()->Error(
-          DiagMessage(new_doc->file.source)
-          << "no suitable parent for inheriting attribute");
+      context->GetDiagnostics()->Error(DiagMessage(new_doc->file.source)
+                                       << "no suitable parent for inheriting attribute");
       return false;
     }
 
     // Add the inline attribute to the parent.
-    parent_el->attributes.push_back(
-        xml::Attribute{decl.attr_namespace_uri, decl.attr_name,
-                       "@" + new_doc->file.name.ToString()});
+    parent_el->attributes.push_back(xml::Attribute{decl.attr_namespace_uri, decl.attr_name,
+                                                   "@" + new_doc->file.name.ToString()});
 
     // Delete the subtree.
-    for (auto iter = parent_el->children.begin();
-         iter != parent_el->children.end(); ++iter) {
-      if (iter->get() == node) {
+    for (auto iter = parent_el->children.begin(); iter != parent_el->children.end(); ++iter) {
+      if (iter->get() == decl.el) {
         parent_el->children.erase(iter);
         break;
       }
diff --git a/tools/aapt2/compile/InlineXmlFormatParser.h b/tools/aapt2/compile/InlineXmlFormatParser.h
index 1a658fd..4300023 100644
--- a/tools/aapt2/compile/InlineXmlFormatParser.h
+++ b/tools/aapt2/compile/InlineXmlFormatParser.h
@@ -26,35 +26,30 @@
 
 namespace aapt {
 
-/**
- * Extracts Inline XML definitions into their own xml::XmlResource objects.
- *
- * Inline XML looks like:
- *
- * <animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- *                  xmlns:aapt="http://schemas.android.com/aapt" >
- *   <aapt:attr name="android:drawable" >
- *     <vector
- *       android:height="64dp"
- *       android:width="64dp"
- *       android:viewportHeight="600"
- *       android:viewportWidth="600"/>
- *   </aapt:attr>
- * </animated-vector>
- *
- * The <vector> will be extracted into its own XML file and <animated-vector>
- * will
- * gain an attribute 'android:drawable' set to a reference to the extracted
- * <vector> resource.
- */
+// Extracts Inline XML definitions into their own xml::XmlResource objects.
+//
+// Inline XML looks like:
+//
+// <animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
+//                  xmlns:aapt="http://schemas.android.com/aapt" >
+//   <aapt:attr name="android:drawable" >
+//     <vector
+//       android:height="64dp"
+//       android:width="64dp"
+//       android:viewportHeight="600"
+//       android:viewportWidth="600"/>
+//   </aapt:attr>
+// </animated-vector>
+//
+// The <vector> will be extracted into its own XML file and <animated-vector> will
+// gain an attribute 'android:drawable' set to a reference to the extracted <vector> resource.
 class InlineXmlFormatParser : public IXmlResourceConsumer {
  public:
   explicit InlineXmlFormatParser() = default;
 
   bool Consume(IAaptContext* context, xml::XmlResource* doc) override;
 
-  std::vector<std::unique_ptr<xml::XmlResource>>&
-  GetExtractedInlineXmlDocuments() {
+  std::vector<std::unique_ptr<xml::XmlResource>>& GetExtractedInlineXmlDocuments() {
     return queue_;
   }
 
diff --git a/tools/aapt2/compile/InlineXmlFormatParser_test.cpp b/tools/aapt2/compile/InlineXmlFormatParser_test.cpp
index 348796c..a4c602c 100644
--- a/tools/aapt2/compile/InlineXmlFormatParser_test.cpp
+++ b/tools/aapt2/compile/InlineXmlFormatParser_test.cpp
@@ -18,25 +18,32 @@
 
 #include "test/Test.h"
 
+using ::testing::Eq;
+using ::testing::IsNull;
+using ::testing::Not;
+using ::testing::NotNull;
+using ::testing::SizeIs;
+using ::testing::StrEq;
+
 namespace aapt {
 
 TEST(InlineXmlFormatParserTest, PassThrough) {
   std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
-  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDom(R"EOF(
+  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDom(R"(
       <View xmlns:android="http://schemas.android.com/apk/res/android">
         <View android:text="hey">
           <View android:id="hi" />
         </View>
-      </View>)EOF");
+      </View>)");
 
   InlineXmlFormatParser parser;
   ASSERT_TRUE(parser.Consume(context.get(), doc.get()));
-  EXPECT_EQ(0u, parser.GetExtractedInlineXmlDocuments().size());
+  EXPECT_THAT(parser.GetExtractedInlineXmlDocuments(), SizeIs(0u));
 }
 
 TEST(InlineXmlFormatParserTest, ExtractOneXmlResource) {
   std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
-  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDom(R"EOF(
+  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDom(R"(
       <View1 xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:aapt="http://schemas.android.com/aapt">
         <aapt:attr name="android:text">
@@ -44,7 +51,7 @@
             <View3 android:id="hi" />
           </View2>
         </aapt:attr>
-      </View1>)EOF");
+      </View1>)");
 
   doc->file.name = test::ParseNameOrDie("layout/main");
 
@@ -52,42 +59,38 @@
   ASSERT_TRUE(parser.Consume(context.get(), doc.get()));
 
   // One XML resource should have been extracted.
-  EXPECT_EQ(1u, parser.GetExtractedInlineXmlDocuments().size());
+  EXPECT_THAT(parser.GetExtractedInlineXmlDocuments(), SizeIs(1u));
 
-  xml::Element* el = xml::FindRootElement(doc.get());
-  ASSERT_NE(nullptr, el);
-
-  EXPECT_EQ("View1", el->name);
+  xml::Element* el = doc->root.get();
+  ASSERT_THAT(el, NotNull());
+  EXPECT_THAT(el->name, StrEq("View1"));
 
   // The <aapt:attr> tag should be extracted.
-  EXPECT_EQ(nullptr, el->FindChild(xml::kSchemaAapt, "attr"));
+  EXPECT_THAT(el->FindChild(xml::kSchemaAapt, "attr"), IsNull());
 
   // The 'android:text' attribute should be set with a reference.
   xml::Attribute* attr = el->FindAttribute(xml::kSchemaAndroid, "text");
-  ASSERT_NE(nullptr, attr);
+  ASSERT_THAT(attr, NotNull());
 
   ResourceNameRef name_ref;
   ASSERT_TRUE(ResourceUtils::ParseReference(attr->value, &name_ref));
 
-  xml::XmlResource* extracted_doc =
-      parser.GetExtractedInlineXmlDocuments()[0].get();
-  ASSERT_NE(nullptr, extracted_doc);
+  xml::XmlResource* extracted_doc = parser.GetExtractedInlineXmlDocuments()[0].get();
+  ASSERT_THAT(extracted_doc, NotNull());
 
   // Make sure the generated reference is correct.
-  EXPECT_EQ(name_ref.package, extracted_doc->file.name.package);
-  EXPECT_EQ(name_ref.type, extracted_doc->file.name.type);
-  EXPECT_EQ(name_ref.entry, extracted_doc->file.name.entry);
+  EXPECT_THAT(extracted_doc->file.name, Eq(name_ref));
 
   // Verify the structure of the extracted XML.
-  el = xml::FindRootElement(extracted_doc);
-  ASSERT_NE(nullptr, el);
-  EXPECT_EQ("View2", el->name);
-  EXPECT_NE(nullptr, el->FindChild({}, "View3"));
+  el = extracted_doc->root.get();
+  ASSERT_THAT(el, NotNull());
+  EXPECT_THAT(el->name, StrEq("View2"));
+  EXPECT_THAT(el->FindChild({}, "View3"), NotNull());
 }
 
 TEST(InlineXmlFormatParserTest, ExtractTwoXmlResources) {
   std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
-  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDom(R"EOF(
+  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDom(R"(
       <View1 xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:aapt="http://schemas.android.com/aapt">
         <aapt:attr name="android:text">
@@ -99,45 +102,82 @@
         <aapt:attr name="android:drawable">
           <vector />
         </aapt:attr>
-      </View1>)EOF");
+      </View1>)");
 
   doc->file.name = test::ParseNameOrDie("layout/main");
 
   InlineXmlFormatParser parser;
   ASSERT_TRUE(parser.Consume(context.get(), doc.get()));
-  ASSERT_EQ(2u, parser.GetExtractedInlineXmlDocuments().size());
+  ASSERT_THAT(parser.GetExtractedInlineXmlDocuments(), SizeIs(2u));
 
-  xml::Element* el = xml::FindRootElement(doc.get());
-  ASSERT_NE(nullptr, el);
-
-  EXPECT_EQ("View1", el->name);
+  xml::Element* el = doc->root.get();
+  ASSERT_THAT(el, NotNull());
+  EXPECT_THAT(el->name, StrEq("View1"));
 
   xml::Attribute* attr_text = el->FindAttribute(xml::kSchemaAndroid, "text");
-  ASSERT_NE(nullptr, attr_text);
+  ASSERT_THAT(attr_text, NotNull());
 
-  xml::Attribute* attr_drawable =
-      el->FindAttribute(xml::kSchemaAndroid, "drawable");
-  ASSERT_NE(nullptr, attr_drawable);
+  xml::Attribute* attr_drawable = el->FindAttribute(xml::kSchemaAndroid, "drawable");
+  ASSERT_THAT(attr_drawable, NotNull());
 
   // The two extracted resources should have different names.
-  EXPECT_NE(attr_text->value, attr_drawable->value);
+  EXPECT_THAT(attr_text->value, Not(Eq(attr_drawable->value)));
 
   // The child <aapt:attr> elements should be gone.
-  EXPECT_EQ(nullptr, el->FindChild(xml::kSchemaAapt, "attr"));
+  EXPECT_THAT(el->FindChild(xml::kSchemaAapt, "attr"), IsNull());
 
-  xml::XmlResource* extracted_doc_text =
-      parser.GetExtractedInlineXmlDocuments()[0].get();
-  ASSERT_NE(nullptr, extracted_doc_text);
-  el = xml::FindRootElement(extracted_doc_text);
-  ASSERT_NE(nullptr, el);
-  EXPECT_EQ("View2", el->name);
+  xml::XmlResource* extracted_doc_text = parser.GetExtractedInlineXmlDocuments()[0].get();
+  ASSERT_THAT(extracted_doc_text, NotNull());
+  ASSERT_THAT(extracted_doc_text->root, NotNull());
+  EXPECT_THAT(extracted_doc_text->root->name, StrEq("View2"));
 
-  xml::XmlResource* extracted_doc_drawable =
-      parser.GetExtractedInlineXmlDocuments()[1].get();
-  ASSERT_NE(nullptr, extracted_doc_drawable);
-  el = xml::FindRootElement(extracted_doc_drawable);
-  ASSERT_NE(nullptr, el);
-  EXPECT_EQ("vector", el->name);
+  xml::XmlResource* extracted_doc_drawable = parser.GetExtractedInlineXmlDocuments()[1].get();
+  ASSERT_THAT(extracted_doc_drawable, NotNull());
+  ASSERT_THAT(extracted_doc_drawable->root, NotNull());
+  EXPECT_THAT(extracted_doc_drawable->root->name, StrEq("vector"));
 }
 
+TEST(InlineXmlFormatParserTest, ExtractNestedXmlResources) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDom(R"(
+      <base_root xmlns:android="http://schemas.android.com/apk/res/android"
+            xmlns:aapt="http://schemas.android.com/aapt">
+          <aapt:attr name="inline_xml">
+              <inline_root>
+                  <aapt:attr name="nested_inline_xml">
+                      <nested_inline_root/>
+                  </aapt:attr>
+                  <aapt:attr name="another_nested_inline_xml">
+                      <root/>
+                  </aapt:attr>
+              </inline_root>
+          </aapt:attr>
+          <aapt:attr name="turtles">
+              <root1>
+                  <aapt:attr name="all">
+                      <root2>
+                          <aapt:attr name="the">
+                              <root3>
+                                  <aapt:attr name="way">
+                                      <root4>
+                                          <aapt:attr name="down">
+                                              <root5/>
+                                          </aapt:attr>
+                                      </root4>
+                                  </aapt:attr>
+                              </root3>
+                          </aapt:attr>
+                      </root2>
+                  </aapt:attr>
+              </root1>
+          </aapt:attr>
+      </base_root>)");
+
+  doc->file.name = test::ParseNameOrDie("layout/main");
+
+  InlineXmlFormatParser parser;
+  ASSERT_TRUE(parser.Consume(context.get(), doc.get()));
+  // Confirm that all of the nested inline xmls are parsed out.
+  ASSERT_THAT(parser.GetExtractedInlineXmlDocuments(), SizeIs(8u));
+}
 }  // namespace aapt
diff --git a/tools/aapt2/compile/PseudolocaleGenerator.cpp b/tools/aapt2/compile/PseudolocaleGenerator.cpp
index a031ea4..871ed4f 100644
--- a/tools/aapt2/compile/PseudolocaleGenerator.cpp
+++ b/tools/aapt2/compile/PseudolocaleGenerator.cpp
@@ -120,7 +120,7 @@
 
   // All Span indices are UTF-16 based, according to the resources.arsc format expected by the
   // runtime. So we will do all our processing in UTF-16, then convert back.
-  const std::u16string text16 = util::Utf8ToUtf16(*string->value->str);
+  const std::u16string text16 = util::Utf8ToUtf16(string->value->value);
 
   // Convenient wrapper around the text that allows us to work with StringPieces.
   const StringPiece16 text(text16);
diff --git a/tools/aapt2/compile/PseudolocaleGenerator_test.cpp b/tools/aapt2/compile/PseudolocaleGenerator_test.cpp
index b08e1da..711558a 100644
--- a/tools/aapt2/compile/PseudolocaleGenerator_test.cpp
+++ b/tools/aapt2/compile/PseudolocaleGenerator_test.cpp
@@ -31,7 +31,7 @@
       util::make_unique<StyledString>(pool.MakeRef(original_style)).get(),
       Pseudolocalizer::Method::kNone, &pool);
 
-  EXPECT_EQ(original_style.str, *new_string->value->str);
+  EXPECT_EQ(original_style.str, new_string->value->value);
   ASSERT_EQ(original_style.spans.size(), new_string->value->spans.size());
 
   EXPECT_EQ(std::string("i"), *new_string->value->spans[0].name);
@@ -52,7 +52,7 @@
       util::make_unique<StyledString>(pool.MakeRef(original_style)).get(),
       Pseudolocalizer::Method::kAccent, &pool);
 
-  EXPECT_EQ(std::string("[Ĥéļļö ŵöŕļð¡ one two]"), *new_string->value->str);
+  EXPECT_EQ(std::string("[Ĥéļļö ŵöŕļð¡ one two]"), new_string->value->value);
   ASSERT_EQ(original_style.spans.size(), new_string->value->spans.size());
 
   EXPECT_EQ(std::u16string(u"[").size(), new_string->value->spans[0].first_char);
@@ -79,7 +79,7 @@
       Pseudolocalizer::Method::kAccent, &pool);
   ASSERT_NE(nullptr, new_string);
   ASSERT_EQ(2u, new_string->value->spans.size());
-  EXPECT_EQ(std::string("[ɓöļð one]"), *new_string->value->str);
+  EXPECT_EQ(std::string("[ɓöļð one]"), new_string->value->value);
 
   EXPECT_EQ(std::string("b"), *new_string->value->spans[0].name);
   EXPECT_EQ(std::u16string(u"[").size(), new_string->value->spans[0].first_char);
@@ -101,7 +101,7 @@
       Pseudolocalizer::Method::kAccent, &pool);
   ASSERT_NE(nullptr, new_string);
   ASSERT_EQ(2u, new_string->value->spans.size());
-  EXPECT_EQ(std::string("[ɓöļð one]"), *new_string->value->str);
+  EXPECT_EQ(std::string("[ɓöļð one]"), new_string->value->value);
 
   EXPECT_EQ(std::string("b"), *new_string->value->spans[0].name);
   EXPECT_EQ(std::u16string(u"[").size(), new_string->value->spans[0].first_char);
@@ -126,7 +126,7 @@
   ASSERT_EQ(4u, new_string->value->spans.size());
   EXPECT_EQ(std::string(
                 "[Ţĥîš šéñţéñçé îš ñöţ ŵĥåţ ýöû ţĥîñķ îţ îš åţ åļļ. one two three four five six]"),
-            *new_string->value->str);
+            new_string->value->value);
 
   EXPECT_EQ(std::string("b"), *new_string->value->spans[0].name);
   EXPECT_EQ(std::u16string(u"[Ţĥîš šéñţéñçé îš").size(), new_string->value->spans[0].first_char);
@@ -165,7 +165,7 @@
   ASSERT_NE(nullptr, new_string);
   ASSERT_EQ(2u, new_string->value->spans.size());
   EXPECT_EQ(std::string("[Ţĥîš šĥöûļð NOT ɓé þšéûðöļöçåļîžéð. one two three four]"),
-            *new_string->value->str);
+            new_string->value->value);
 
   EXPECT_EQ(std::string("em"), *new_string->value->spans[0].name);
   EXPECT_EQ(std::u16string(u"[Ţĥîš").size(), new_string->value->spans[0].first_char);
@@ -265,7 +265,7 @@
   ASSERT_NE(nullptr, new_styled_string);
 
   // "world" should be untranslated.
-  EXPECT_NE(std::string::npos, new_styled_string->value->str->find("world"));
+  EXPECT_NE(std::string::npos, new_styled_string->value->value.find("world"));
 
   String* new_string = test::GetValueForConfig<String>(table.get(), "android:string/bar",
                                                        test::ParseConfigOrDie("en-rXA"));
diff --git a/tools/aapt2/compile/Pseudolocalizer.cpp b/tools/aapt2/compile/Pseudolocalizer.cpp
index 15a3d8c..3a515fa 100644
--- a/tools/aapt2/compile/Pseudolocalizer.cpp
+++ b/tools/aapt2/compile/Pseudolocalizer.cpp
@@ -445,9 +445,15 @@
   std::string result;
   bool lastspace = true;
   bool space = true;
+  bool escape = false;
+  const char ESCAPE_CHAR = '\\';
   for (size_t i = 0; i < source.size(); i++) {
     char c = s[i];
-    space = isspace(c);
+    if (!escape && c == ESCAPE_CHAR) {
+      escape = true;
+      continue;
+    }
+    space = (!escape && isspace(c)) || (escape && (c == 'n' || c == 't'));
     if (lastspace && !space) {
       // Word start
       result += kRlm + kRlo;
@@ -456,6 +462,10 @@
       result += kPdf + kRlm;
     }
     lastspace = space;
+    if (escape) {
+      result.append(&ESCAPE_CHAR, 1);
+      escape=false;
+    }
     result.append(&c, 1);
   }
   if (!lastspace) {
diff --git a/tools/aapt2/compile/Pseudolocalizer_test.cpp b/tools/aapt2/compile/Pseudolocalizer_test.cpp
index d3b7b02..65d2472 100644
--- a/tools/aapt2/compile/Pseudolocalizer_test.cpp
+++ b/tools/aapt2/compile/Pseudolocalizer_test.cpp
@@ -97,6 +97,11 @@
       "\xe2\x80\x8f\xE2\x80\xaehello\xE2\x80\xac\xe2\x80\x8f\n"
       "  \xe2\x80\x8f\xE2\x80\xaeworld\xE2\x80\xac\xe2\x80\x8f\n",
       Pseudolocalizer::Method::kBidi));
+  EXPECT_TRUE(
+      SimpleHelper("hello\\nworld\\n",
+                   "\xe2\x80\x8f\xE2\x80\xaehello\xE2\x80\xac\xe2\x80\x8f\\n"
+                   "\xe2\x80\x8f\xE2\x80\xaeworld\xE2\x80\xac\xe2\x80\x8f\\n",
+                   Pseudolocalizer::Method::kBidi));
 }
 
 TEST(PseudolocalizerTest, SimpleICU) {
diff --git a/tools/aapt2/configuration/ConfigurationParser.cpp b/tools/aapt2/configuration/ConfigurationParser.cpp
index 89618d3..bdccf8b 100644
--- a/tools/aapt2/configuration/ConfigurationParser.cpp
+++ b/tools/aapt2/configuration/ConfigurationParser.cpp
@@ -18,13 +18,19 @@
 
 #include <algorithm>
 #include <functional>
+#include <map>
 #include <memory>
 #include <utility>
 
-#include <android-base/logging.h>
+#include "android-base/file.h"
+#include "android-base/logging.h"
 
 #include "ConfigDescription.h"
 #include "Diagnostics.h"
+#include "io/File.h"
+#include "io/FileSystem.h"
+#include "io/StringInputStream.h"
+#include "util/Maybe.h"
 #include "util/Util.h"
 #include "xml/XmlActionExecutor.h"
 #include "xml/XmlDom.h"
@@ -38,27 +44,30 @@
 using ::aapt::configuration::AndroidManifest;
 using ::aapt::configuration::AndroidSdk;
 using ::aapt::configuration::Artifact;
-using ::aapt::configuration::Configuration;
+using ::aapt::configuration::PostProcessingConfiguration;
 using ::aapt::configuration::GlTexture;
 using ::aapt::configuration::Group;
 using ::aapt::configuration::Locale;
+using ::aapt::io::IFile;
+using ::aapt::io::RegularFile;
+using ::aapt::io::StringInputStream;
 using ::aapt::util::TrimWhitespace;
 using ::aapt::xml::Element;
-using ::aapt::xml::FindRootElement;
 using ::aapt::xml::NodeCast;
 using ::aapt::xml::XmlActionExecutor;
 using ::aapt::xml::XmlActionExecutorPolicy;
 using ::aapt::xml::XmlNodeAction;
+using ::android::base::ReadFileToString;
 
-const std::unordered_map<std::string, Abi> kAbiMap = {
-    {"armeabi", Abi::kArmeV6},
-    {"armeabi-v7a", Abi::kArmV7a},
-    {"arm64-v8a", Abi::kArm64V8a},
-    {"x86", Abi::kX86},
-    {"x86_64", Abi::kX86_64},
-    {"mips", Abi::kMips},
-    {"mips64", Abi::kMips64},
-    {"universal", Abi::kUniversal},
+const std::unordered_map<std::string, Abi> kStringToAbiMap = {
+    {"armeabi", Abi::kArmeV6}, {"armeabi-v7a", Abi::kArmV7a},  {"arm64-v8a", Abi::kArm64V8a},
+    {"x86", Abi::kX86},        {"x86_64", Abi::kX86_64},       {"mips", Abi::kMips},
+    {"mips64", Abi::kMips64},  {"universal", Abi::kUniversal},
+};
+const std::map<Abi, std::string> kAbiToStringMap = {
+    {Abi::kArmeV6, "armeabi"}, {Abi::kArmV7a, "armeabi-v7a"},  {Abi::kArm64V8a, "arm64-v8a"},
+    {Abi::kX86, "x86"},        {Abi::kX86_64, "x86_64"},       {Abi::kMips, "mips"},
+    {Abi::kMips64, "mips64"},  {Abi::kUniversal, "universal"},
 };
 
 constexpr const char* kAaptXmlNs = "http://schemas.android.com/tools/aapt";
@@ -96,21 +105,92 @@
 
 }  // namespace
 
+namespace configuration {
+
+const std::string& AbiToString(Abi abi) {
+  return kAbiToStringMap.find(abi)->second;
+}
+
+/**
+ * Attempts to replace the placeholder in the name string with the provided value. Returns true on
+ * success, or false if the either the placeholder is not found in the name, or the value is not
+ * present and the placeholder was.
+ */
+static bool ReplacePlaceholder(const std::string& placeholder, const Maybe<std::string>& value,
+                               std::string* name, IDiagnostics* diag) {
+  size_t offset = name->find(placeholder);
+  if (value) {
+    if (offset == std::string::npos) {
+      diag->Error(DiagMessage() << "Missing placeholder for artifact: " << placeholder);
+      return false;
+    }
+    name->replace(offset, placeholder.length(), value.value());
+    return true;
+  }
+
+  // Make sure the placeholder was not present if the desired value was not present.
+  bool result = (offset == std::string::npos);
+  if (!result) {
+    diag->Error(DiagMessage() << "Placeholder present but no value for artifact: " << placeholder);
+  }
+  return result;
+}
+
+Maybe<std::string> Artifact::ToArtifactName(const std::string& format, IDiagnostics* diag) const {
+  std::string result = format;
+
+  if (!ReplacePlaceholder("{abi}", abi_group, &result, diag)) {
+    return {};
+  }
+
+  if (!ReplacePlaceholder("{density}", screen_density_group, &result, diag)) {
+    return {};
+  }
+
+  if (!ReplacePlaceholder("{locale}", locale_group, &result, diag)) {
+    return {};
+  }
+
+  if (!ReplacePlaceholder("{sdk}", android_sdk_group, &result, diag)) {
+    return {};
+  }
+
+  if (!ReplacePlaceholder("{feature}", device_feature_group, &result, diag)) {
+    return {};
+  }
+
+  if (!ReplacePlaceholder("{gl}", gl_texture_group, &result, diag)) {
+    return {};
+  }
+
+  return result;
+}
+
+}  // namespace configuration
+
+/** Returns a ConfigurationParser for the file located at the provided path. */
+Maybe<ConfigurationParser> ConfigurationParser::ForPath(const std::string& path) {
+  std::string contents;
+  if (!ReadFileToString(path, &contents, true)) {
+    return {};
+  }
+  return ConfigurationParser(contents);
+}
+
 ConfigurationParser::ConfigurationParser(std::string contents)
     : contents_(std::move(contents)),
       diag_(&noop_) {
 }
 
-Maybe<Configuration> ConfigurationParser::Parse() {
-  std::istringstream in(contents_);
-
-  auto doc = xml::Inflate(&in, diag_, Source("config.xml"));
+Maybe<PostProcessingConfiguration> ConfigurationParser::Parse() {
+  StringInputStream in(contents_);
+  std::unique_ptr<xml::XmlResource> doc = xml::Inflate(&in, diag_, Source("config.xml"));
   if (!doc) {
     return {};
   }
 
   // Strip any namespaces from the XML as the XmlActionExecutor ignores anything with a namespace.
-  auto* root = FindRootElement(doc.get());
+  Element* root = doc->root.get();
   if (root == nullptr) {
     diag_->Error(DiagMessage() << "Could not find the root element in the XML document");
     return {};
@@ -133,10 +213,11 @@
   XmlNodeAction& artifacts_action = root_action["artifacts"];
   XmlNodeAction& groups_action = root_action["groups"];
 
-  Configuration config;
+  PostProcessingConfiguration config;
 
   // Helper to bind a static method to an action handler in the DOM executor.
-  auto bind_handler = [&config](std::function<bool(Configuration*, Element*, IDiagnostics*)> h)
+  auto bind_handler =
+      [&config](std::function<bool(PostProcessingConfiguration*, Element*, IDiagnostics*)> h)
       -> XmlNodeAction::ActionFuncWithDiag {
     return std::bind(h, &config, std::placeholders::_1, std::placeholders::_2);
   };
@@ -158,275 +239,266 @@
     return {};
   }
 
+  // TODO: Validate all references in the configuration are valid. It should be safe to assume from
+  // this point on that any references from one section to another will be present.
+
   return {config};
 }
 
 ConfigurationParser::ActionHandler ConfigurationParser::artifact_handler_ =
-    [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
-      Artifact artifact{};
-      for (const auto& attr : root_element->attributes) {
-        if (attr.name == "name") {
-          artifact.name = attr.value;
-        } else if (attr.name == "abi-group") {
-          artifact.abi_group = {attr.value};
-        } else if (attr.name == "screen-density-group") {
-          artifact.screen_density_group = {attr.value};
-        } else if (attr.name == "locale-group") {
-          artifact.locale_group = {attr.value};
-        } else if (attr.name == "android-sdk-group") {
-          artifact.android_sdk_group = {attr.value};
-        } else if (attr.name == "gl-texture-group") {
-          artifact.gl_texture_group = {attr.value};
-        } else if (attr.name == "device-feature-group") {
-          artifact.device_feature_group = {attr.value};
-        } else {
-          diag->Note(
-              DiagMessage() << "Unknown artifact attribute: " << attr.name << " = " << attr.value);
-        }
-      }
-      config->artifacts[artifact.name] = artifact;
-      return true;
-    };
+    [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+  Artifact artifact{};
+  for (const auto& attr : root_element->attributes) {
+    if (attr.name == "name") {
+      artifact.name = attr.value;
+    } else if (attr.name == "abi-group") {
+      artifact.abi_group = {attr.value};
+    } else if (attr.name == "screen-density-group") {
+      artifact.screen_density_group = {attr.value};
+    } else if (attr.name == "locale-group") {
+      artifact.locale_group = {attr.value};
+    } else if (attr.name == "android-sdk-group") {
+      artifact.android_sdk_group = {attr.value};
+    } else if (attr.name == "gl-texture-group") {
+      artifact.gl_texture_group = {attr.value};
+    } else if (attr.name == "device-feature-group") {
+      artifact.device_feature_group = {attr.value};
+    } else {
+      diag->Note(DiagMessage() << "Unknown artifact attribute: " << attr.name << " = "
+                               << attr.value);
+    }
+  }
+  config->artifacts.push_back(artifact);
+  return true;
+};
 
 ConfigurationParser::ActionHandler ConfigurationParser::artifact_format_handler_ =
-    [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
-      for (auto& node : root_element->children) {
+    [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+  for (auto& node : root_element->children) {
+    xml::Text* t;
+    if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
+      config->artifact_format = TrimWhitespace(t->text).to_string();
+      break;
+    }
+  }
+  return true;
+};
+
+ConfigurationParser::ActionHandler ConfigurationParser::abi_group_handler_ =
+    [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+  std::string label = GetLabel(root_element, diag);
+  if (label.empty()) {
+    return false;
+  }
+
+  auto& group = config->abi_groups[label];
+  bool valid = true;
+
+  for (auto* child : root_element->GetChildElements()) {
+    if (child->name != "abi") {
+      diag->Error(DiagMessage() << "Unexpected element in ABI group: " << child->name);
+      valid = false;
+    } else {
+      for (auto& node : child->children) {
         xml::Text* t;
         if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
-          config->artifact_format = TrimWhitespace(t->text).to_string();
+          group.push_back(kStringToAbiMap.at(TrimWhitespace(t->text).to_string()));
           break;
         }
       }
-      return true;
-    };
+    }
+  }
 
-ConfigurationParser::ActionHandler ConfigurationParser::abi_group_handler_ =
-    [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
-      std::string label = GetLabel(root_element, diag);
-      if (label.empty()) {
-        return false;
-      }
-
-      auto& group = config->abi_groups[label];
-      bool valid = true;
-
-      for (auto* child : root_element->GetChildElements()) {
-        if (child->name != "abi") {
-          diag->Error(
-              DiagMessage() << "Unexpected element in ABI group: " << child->name);
-          valid = false;
-        } else {
-          for (auto& node : child->children) {
-            xml::Text* t;
-            if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
-              group.push_back(kAbiMap.at(TrimWhitespace(t->text).to_string()));
-              break;
-            }
-          }
-        }
-      }
-
-      return valid;
-    };
+  return valid;
+};
 
 ConfigurationParser::ActionHandler ConfigurationParser::screen_density_group_handler_ =
-    [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
-      std::string label = GetLabel(root_element, diag);
-      if (label.empty()) {
-        return false;
-      }
+    [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+  std::string label = GetLabel(root_element, diag);
+  if (label.empty()) {
+    return false;
+  }
 
-      auto& group = config->screen_density_groups[label];
-      bool valid = true;
+  auto& group = config->screen_density_groups[label];
+  bool valid = true;
 
-      for (auto* child : root_element->GetChildElements()) {
-        if (child->name != "screen-density") {
-          diag->Error(
-              DiagMessage() << "Unexpected root_element in screen density group: "
-                            << child->name);
-          valid = false;
-        } else {
-          for (auto& node : child->children) {
-            xml::Text* t;
-            if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
-              ConfigDescription config_descriptor;
-              const android::StringPiece& text = TrimWhitespace(t->text);
-              if (ConfigDescription::Parse(text, &config_descriptor)) {
-                // Copy the density with the minimum SDK version stripped out.
-                group.push_back(config_descriptor.CopyWithoutSdkVersion());
-              } else {
-                diag->Error(
-                    DiagMessage() << "Could not parse config descriptor for screen-density: "
-                                  << text);
-                valid = false;
-              }
-              break;
-            }
+  for (auto* child : root_element->GetChildElements()) {
+    if (child->name != "screen-density") {
+      diag->Error(DiagMessage() << "Unexpected root_element in screen density group: "
+                                << child->name);
+      valid = false;
+    } else {
+      for (auto& node : child->children) {
+        xml::Text* t;
+        if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
+          ConfigDescription config_descriptor;
+          const android::StringPiece& text = TrimWhitespace(t->text);
+          if (ConfigDescription::Parse(text, &config_descriptor)) {
+            // Copy the density with the minimum SDK version stripped out.
+            group.push_back(config_descriptor.CopyWithoutSdkVersion());
+          } else {
+            diag->Error(DiagMessage()
+                        << "Could not parse config descriptor for screen-density: " << text);
+            valid = false;
           }
+          break;
         }
       }
+    }
+  }
 
-      return valid;
-    };
+  return valid;
+};
 
 ConfigurationParser::ActionHandler ConfigurationParser::locale_group_handler_ =
-    [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
-      std::string label = GetLabel(root_element, diag);
-      if (label.empty()) {
-        return false;
-      }
+    [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+  std::string label = GetLabel(root_element, diag);
+  if (label.empty()) {
+    return false;
+  }
 
-      auto& group = config->locale_groups[label];
-      bool valid = true;
+  auto& group = config->locale_groups[label];
+  bool valid = true;
 
-      for (auto* child : root_element->GetChildElements()) {
-        if (child->name != "locale") {
-          diag->Error(
-              DiagMessage() << "Unexpected root_element in screen density group: "
-                            << child->name);
-          valid = false;
+  for (auto* child : root_element->GetChildElements()) {
+    if (child->name != "locale") {
+      diag->Error(DiagMessage() << "Unexpected root_element in screen density group: "
+                                << child->name);
+      valid = false;
+    } else {
+      Locale entry;
+      for (const auto& attr : child->attributes) {
+        if (attr.name == "lang") {
+          entry.lang = {attr.value};
+        } else if (attr.name == "region") {
+          entry.region = {attr.value};
         } else {
-          Locale entry;
-          for (const auto& attr : child->attributes) {
-            if (attr.name == "lang") {
-              entry.lang = {attr.value};
-            } else if (attr.name == "region") {
-              entry.region = {attr.value};
-            } else {
-              diag->Warn(DiagMessage() << "Unknown attribute: " << attr.name
-                                       << " = " << attr.value);
-            }
-          }
-          group.push_back(entry);
+          diag->Warn(DiagMessage() << "Unknown attribute: " << attr.name << " = " << attr.value);
         }
       }
+      group.push_back(entry);
+    }
+  }
 
-      return valid;
-    };
+  return valid;
+};
 
 ConfigurationParser::ActionHandler ConfigurationParser::android_sdk_group_handler_ =
-    [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
-      std::string label = GetLabel(root_element, diag);
-      if (label.empty()) {
-        return false;
-      }
+    [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+  std::string label = GetLabel(root_element, diag);
+  if (label.empty()) {
+    return false;
+  }
 
-      auto& group = config->android_sdk_groups[label];
-      bool valid = true;
+  auto& group = config->android_sdk_groups[label];
+  bool valid = true;
 
-      for (auto* child : root_element->GetChildElements()) {
-        if (child->name != "android-sdk") {
-          diag->Error(
-              DiagMessage() << "Unexpected root_element in ABI group: " << child->name);
-          valid = false;
+  for (auto* child : root_element->GetChildElements()) {
+    if (child->name != "android-sdk") {
+      diag->Error(DiagMessage() << "Unexpected root_element in ABI group: " << child->name);
+      valid = false;
+    } else {
+      AndroidSdk entry;
+      for (const auto& attr : child->attributes) {
+        if (attr.name == "minSdkVersion") {
+          entry.min_sdk_version = {attr.value};
+        } else if (attr.name == "targetSdkVersion") {
+          entry.target_sdk_version = {attr.value};
+        } else if (attr.name == "maxSdkVersion") {
+          entry.max_sdk_version = {attr.value};
         } else {
-          AndroidSdk entry;
-          for (const auto& attr : child->attributes) {
-            if (attr.name == "minSdkVersion") {
-              entry.min_sdk_version = {attr.value};
-            } else if (attr.name == "targetSdkVersion") {
-              entry.target_sdk_version = {attr.value};
-            } else if (attr.name == "maxSdkVersion") {
-              entry.max_sdk_version = {attr.value};
-            } else {
-              diag->Warn(DiagMessage() << "Unknown attribute: " << attr.name
-                                       << " = " << attr.value);
-            }
-          }
-
-          // TODO: Fill in the manifest details when they are finalised.
-          for (auto node : child->GetChildElements()) {
-            if (node->name == "manifest") {
-              if (entry.manifest) {
-                diag->Warn(DiagMessage() << "Found multiple manifest tags. Ignoring duplicates.");
-                continue;
-              }
-              entry.manifest = {AndroidManifest()};
-            }
-          }
-
-          group.push_back(entry);
+          diag->Warn(DiagMessage() << "Unknown attribute: " << attr.name << " = " << attr.value);
         }
       }
 
-      return valid;
-    };
+      // TODO: Fill in the manifest details when they are finalised.
+      for (auto node : child->GetChildElements()) {
+        if (node->name == "manifest") {
+          if (entry.manifest) {
+            diag->Warn(DiagMessage() << "Found multiple manifest tags. Ignoring duplicates.");
+            continue;
+          }
+          entry.manifest = {AndroidManifest()};
+        }
+      }
+
+      group.push_back(entry);
+    }
+  }
+
+  return valid;
+};
 
 ConfigurationParser::ActionHandler ConfigurationParser::gl_texture_group_handler_ =
-    [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
-      std::string label = GetLabel(root_element, diag);
-      if (label.empty()) {
-        return false;
+    [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+  std::string label = GetLabel(root_element, diag);
+  if (label.empty()) {
+    return false;
+  }
+
+  auto& group = config->gl_texture_groups[label];
+  bool valid = true;
+
+  GlTexture result;
+  for (auto* child : root_element->GetChildElements()) {
+    if (child->name != "gl-texture") {
+      diag->Error(DiagMessage() << "Unexpected element in GL texture group: " << child->name);
+      valid = false;
+    } else {
+      for (const auto& attr : child->attributes) {
+        if (attr.name == "name") {
+          result.name = attr.value;
+          break;
+        }
       }
 
-      auto& group = config->gl_texture_groups[label];
-      bool valid = true;
-
-      GlTexture result;
-      for (auto* child : root_element->GetChildElements()) {
-        if (child->name != "gl-texture") {
-          diag->Error(
-              DiagMessage() << "Unexpected element in GL texture group: "
-                            << child->name);
+      for (auto* element : child->GetChildElements()) {
+        if (element->name != "texture-path") {
+          diag->Error(DiagMessage() << "Unexpected element in gl-texture element: " << child->name);
           valid = false;
-        } else {
-          for (const auto& attr : child->attributes) {
-            if (attr.name == "name") {
-              result.name = attr.value;
-              break;
-            }
-          }
-
-          for (auto* element : child->GetChildElements()) {
-            if (element->name != "texture-path") {
-              diag->Error(
-                  DiagMessage() << "Unexpected element in gl-texture element: "
-                                << child->name);
-              valid = false;
-              continue;
-            }
-            for (auto& node : element->children) {
-              xml::Text* t;
-              if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
-                result.texture_paths.push_back(TrimWhitespace(t->text).to_string());
-              }
-            }
+          continue;
+        }
+        for (auto& node : element->children) {
+          xml::Text* t;
+          if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
+            result.texture_paths.push_back(TrimWhitespace(t->text).to_string());
           }
         }
-        group.push_back(result);
       }
+    }
+    group.push_back(result);
+  }
 
-      return valid;
-    };
+  return valid;
+};
 
 ConfigurationParser::ActionHandler ConfigurationParser::device_feature_group_handler_ =
-    [](Configuration* config, Element* root_element, IDiagnostics* diag) -> bool {
-      std::string label = GetLabel(root_element, diag);
-      if (label.empty()) {
-        return false;
-      }
+    [](PostProcessingConfiguration* config, Element* root_element, IDiagnostics* diag) -> bool {
+  std::string label = GetLabel(root_element, diag);
+  if (label.empty()) {
+    return false;
+  }
 
-      auto& group = config->device_feature_groups[label];
-      bool valid = true;
+  auto& group = config->device_feature_groups[label];
+  bool valid = true;
 
-      for (auto* child : root_element->GetChildElements()) {
-        if (child->name != "supports-feature") {
-          diag->Error(
-              DiagMessage() << "Unexpected root_element in device feature group: "
-                            << child->name);
-          valid = false;
-        } else {
-          for (auto& node : child->children) {
-            xml::Text* t;
-            if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
-              group.push_back(TrimWhitespace(t->text).to_string());
-              break;
-            }
-          }
+  for (auto* child : root_element->GetChildElements()) {
+    if (child->name != "supports-feature") {
+      diag->Error(DiagMessage() << "Unexpected root_element in device feature group: "
+                                << child->name);
+      valid = false;
+    } else {
+      for (auto& node : child->children) {
+        xml::Text* t;
+        if ((t = NodeCast<xml::Text>(node.get())) != nullptr) {
+          group.push_back(TrimWhitespace(t->text).to_string());
+          break;
         }
       }
+    }
+  }
 
-      return valid;
-    };
+  return valid;
+};
 
 }  // namespace aapt
diff --git a/tools/aapt2/configuration/ConfigurationParser.h b/tools/aapt2/configuration/ConfigurationParser.h
index 0fb2f71..28c355e 100644
--- a/tools/aapt2/configuration/ConfigurationParser.h
+++ b/tools/aapt2/configuration/ConfigurationParser.h
@@ -20,8 +20,9 @@
 #include <string>
 #include <unordered_map>
 #include <vector>
-#include <ConfigDescription.h>
 
+#include "ConfigDescription.h"
+#include "Diagnostics.h"
 #include "util/Maybe.h"
 
 namespace aapt {
@@ -48,6 +49,9 @@
   Maybe<std::string> device_feature_group;
   /** If present, uses the OpenGL texture group with this name. */
   Maybe<std::string> gl_texture_group;
+
+  /** Convert an artifact name template into a name string based on configuration contents. */
+  Maybe<std::string> ToArtifactName(const std::string& format, IDiagnostics* diag) const;
 };
 
 /** Enumeration of currently supported ABIs. */
@@ -62,6 +66,9 @@
   kUniversal
 };
 
+/** Helper method to convert an ABI to a string representing the path within the APK. */
+const std::string& AbiToString(Abi abi);
+
 /**
  * Represents an individual locale. When a locale is included, it must be
  * declared from least specific to most specific, as a region does not make
@@ -114,11 +121,10 @@
   }
 };
 
-/**
- * AAPT2 XML configuration binary representation.
- */
-struct Configuration {
-  std::unordered_map<std::string, Artifact> artifacts;
+/** AAPT2 XML configuration file binary representation. */
+struct PostProcessingConfiguration {
+  // TODO: Support named artifacts?
+  std::vector<Artifact> artifacts;
   Maybe<std::string> artifact_format;
 
   Group<Abi> abi_groups;
@@ -142,18 +148,16 @@
  */
 class ConfigurationParser {
  public:
+
+  /** Returns a ConfigurationParser for the file located at the provided path. */
+  static Maybe<ConfigurationParser> ForPath(const std::string& path);
+
   /** Returns a ConfigurationParser for the configuration in the provided file contents. */
   static ConfigurationParser ForContents(const std::string& contents) {
     ConfigurationParser parser{contents};
     return parser;
   }
 
-  /** Returns a ConfigurationParser for the file located at the provided path. */
-  static ConfigurationParser ForPath(const std::string& path) {
-    // TODO: Read XML file into memory.
-    return ForContents(path);
-  }
-
   /** Sets the diagnostics context to use when parsing. */
   ConfigurationParser& WithDiagnostics(IDiagnostics* diagnostics) {
     diag_ = diagnostics;
@@ -164,7 +168,7 @@
    * Parses the configuration file and returns the results. If the configuration could not be parsed
    * the result is empty and any errors will be displayed with the provided diagnostics context.
    */
-  Maybe<configuration::Configuration> Parse();
+  Maybe<configuration::PostProcessingConfiguration> Parse();
 
  protected:
   /**
@@ -183,9 +187,8 @@
    * An ActionHandler for processing XML elements in the XmlActionExecutor. Returns true if the
    * element was successfully processed, otherwise returns false.
    */
-  using ActionHandler = std::function<bool(configuration::Configuration* config,
-                                           xml::Element* element,
-                                           IDiagnostics* diag)>;
+  using ActionHandler = std::function<bool(configuration::PostProcessingConfiguration* config,
+                                           xml::Element* element, IDiagnostics* diag)>;
 
   /** Handler for <artifact> tags. */
   static ActionHandler artifact_handler_;
@@ -213,4 +216,4 @@
 
 }  // namespace aapt
 
-#endif //AAPT2_CONFIGURATION_H
+#endif  // AAPT2_CONFIGURATION_H
diff --git a/tools/aapt2/configuration/ConfigurationParser_test.cpp b/tools/aapt2/configuration/ConfigurationParser_test.cpp
index 72a97b2..f897737 100644
--- a/tools/aapt2/configuration/ConfigurationParser_test.cpp
+++ b/tools/aapt2/configuration/ConfigurationParser_test.cpp
@@ -18,9 +18,6 @@
 
 #include <string>
 
-#include <gmock/gmock.h>
-#include <gtest/gtest.h>
-
 #include "androidfw/ResourceTypes.h"
 
 #include "test/Test.h"
@@ -29,15 +26,16 @@
 namespace aapt {
 namespace {
 
-using android::ResTable_config;
+using ::android::ResTable_config;
 using configuration::Abi;
 using configuration::AndroidSdk;
-using configuration::Configuration;
+using configuration::Artifact;
+using configuration::PostProcessingConfiguration;
 using configuration::DeviceFeature;
 using configuration::GlTexture;
 using configuration::Locale;
 using configuration::AndroidManifest;
-using testing::ElementsAre;
+using ::testing::ElementsAre;
 using xml::Element;
 using xml::NodeCast;
 
@@ -130,11 +128,16 @@
   StdErrDiagnostics diag_;
 };
 
+TEST_F(ConfigurationParserTest, ForPath_NoFile) {
+  auto result = ConfigurationParser::ForPath("./does_not_exist.xml");
+  EXPECT_FALSE(result);
+}
+
 TEST_F(ConfigurationParserTest, ValidateFile) {
   auto parser = ConfigurationParser::ForContents(kValidConfig).WithDiagnostics(&diag_);
   auto result = parser.Parse();
   ASSERT_TRUE(result);
-  Configuration& value = result.value();
+  PostProcessingConfiguration& value = result.value();
   EXPECT_EQ(2ul, value.artifacts.size());
   ASSERT_TRUE(value.artifact_format);
   EXPECT_EQ(
@@ -185,13 +188,13 @@
 
   auto doc = test::BuildXmlDom(xml);
 
-  Configuration config;
-  bool ok = artifact_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
+  PostProcessingConfiguration config;
+  bool ok = artifact_handler_(&config, NodeCast<Element>(doc->root.get()), &diag_);
   ASSERT_TRUE(ok);
 
   EXPECT_EQ(1ul, config.artifacts.size());
 
-  auto& artifact = config.artifacts.begin()->second;
+  auto& artifact = config.artifacts.front();
   EXPECT_EQ("", artifact.name); // TODO: make this fail.
   EXPECT_EQ("arm", artifact.abi_group.value());
   EXPECT_EQ("large", artifact.screen_density_group.value());
@@ -199,6 +202,21 @@
   EXPECT_EQ("19", artifact.android_sdk_group.value());
   EXPECT_EQ("dxt1", artifact.gl_texture_group.value());
   EXPECT_EQ("low-latency", artifact.device_feature_group.value());
+
+  // Perform a second action to ensure we get 2 artifacts.
+  static constexpr const char* second = R"xml(
+    <artifact
+        abi-group="other"
+        screen-density-group="large"
+        locale-group="europe"
+        android-sdk-group="19"
+        gl-texture-group="dxt1"
+        device-feature-group="low-latency"/>)xml";
+  doc = test::BuildXmlDom(second);
+
+  ok = artifact_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
+  ASSERT_TRUE(ok);
+  EXPECT_EQ(2ul, config.artifacts.size());
 }
 
 TEST_F(ConfigurationParserTest, ArtifactFormatAction) {
@@ -209,7 +227,7 @@
 
   auto doc = test::BuildXmlDom(xml);
 
-  Configuration config;
+  PostProcessingConfiguration config;
   bool ok = artifact_format_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
   ASSERT_TRUE(ok);
   ASSERT_TRUE(config.artifact_format);
@@ -232,7 +250,7 @@
 
   auto doc = test::BuildXmlDom(xml);
 
-  Configuration config;
+  PostProcessingConfiguration config;
   bool ok = abi_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
   ASSERT_TRUE(ok);
 
@@ -255,7 +273,7 @@
 
   auto doc = test::BuildXmlDom(xml);
 
-  Configuration config;
+  PostProcessingConfiguration config;
   bool ok =
       screen_density_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
   ASSERT_TRUE(ok);
@@ -285,7 +303,7 @@
 
   auto doc = test::BuildXmlDom(xml);
 
-  Configuration config;
+  PostProcessingConfiguration config;
   bool ok = locale_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
   ASSERT_TRUE(ok);
 
@@ -321,7 +339,7 @@
 
   auto doc = test::BuildXmlDom(xml);
 
-  Configuration config;
+  PostProcessingConfiguration config;
   bool ok = android_sdk_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
   ASSERT_TRUE(ok);
 
@@ -353,7 +371,7 @@
 
   auto doc = test::BuildXmlDom(xml);
 
-  Configuration config;
+  PostProcessingConfiguration config;
   bool ok = gl_texture_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
   ASSERT_TRUE(ok);
 
@@ -382,7 +400,7 @@
 
   auto doc = test::BuildXmlDom(xml);
 
-  Configuration config;
+  PostProcessingConfiguration config;
   bool ok
       = device_feature_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_);
   ASSERT_TRUE(ok);
@@ -397,5 +415,55 @@
   ASSERT_THAT(out, ElementsAre(low_latency, pro));
 }
 
+TEST(ArtifactTest, Simple) {
+  StdErrDiagnostics diag;
+  Artifact x86;
+  x86.abi_group = {"x86"};
+
+  auto x86_result = x86.ToArtifactName("something.{abi}.apk", &diag);
+  ASSERT_TRUE(x86_result);
+  EXPECT_EQ(x86_result.value(), "something.x86.apk");
+
+  Artifact arm;
+  arm.abi_group = {"armeabi-v7a"};
+
+  auto arm_result = arm.ToArtifactName("app.{abi}.apk", &diag);
+  ASSERT_TRUE(arm_result);
+  EXPECT_EQ(arm_result.value(), "app.armeabi-v7a.apk");
+}
+
+TEST(ArtifactTest, Complex) {
+  StdErrDiagnostics diag;
+  Artifact artifact;
+  artifact.abi_group = {"mips64"};
+  artifact.screen_density_group = {"ldpi"};
+  artifact.device_feature_group = {"df1"};
+  artifact.gl_texture_group = {"glx1"};
+  artifact.locale_group = {"en-AU"};
+  artifact.android_sdk_group = {"26"};
+
+  auto result =
+      artifact.ToArtifactName("app.{density}_{locale}_{feature}_{gl}.sdk{sdk}.{abi}.apk", &diag);
+  ASSERT_TRUE(result);
+  EXPECT_EQ(result.value(), "app.ldpi_en-AU_df1_glx1.sdk26.mips64.apk");
+}
+
+TEST(ArtifactTest, Missing) {
+  StdErrDiagnostics diag;
+  Artifact x86;
+  x86.abi_group = {"x86"};
+
+  EXPECT_FALSE(x86.ToArtifactName("something.{density}.apk", &diag));
+  EXPECT_FALSE(x86.ToArtifactName("something.apk", &diag));
+}
+
+TEST(ArtifactTest, Empty) {
+  StdErrDiagnostics diag;
+  Artifact artifact;
+
+  EXPECT_FALSE(artifact.ToArtifactName("something.{density}.apk", &diag));
+  EXPECT_TRUE(artifact.ToArtifactName("something.apk", &diag));
+}
+
 }  // namespace
 }  // namespace aapt
diff --git a/tools/aapt2/configuration/example/config.xml b/tools/aapt2/configuration/example/config.xml
index a8360f8..ce31e61 100644
--- a/tools/aapt2/configuration/example/config.xml
+++ b/tools/aapt2/configuration/example/config.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" ?>
-<post-process xmlns="http://schemas.android.com/tools/aapt2">
+<post-process xmlns="http://schemas.android.com/tools/aapt">
   <groups>
     <abi-group label="arm">
       <abi>armeabi-v7a</abi>
diff --git a/tools/aapt2/filter/AbiFilter.cpp b/tools/aapt2/filter/AbiFilter.cpp
new file mode 100644
index 0000000..cb96235
--- /dev/null
+++ b/tools/aapt2/filter/AbiFilter.cpp
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ */
+
+#include "AbiFilter.h"
+
+#include <memory>
+
+#include "io/Util.h"
+
+namespace aapt {
+
+std::unique_ptr<AbiFilter> AbiFilter::FromAbiList(const std::vector<configuration::Abi>& abi_list) {
+  std::unordered_set<std::string> abi_set;
+  for (auto& abi : abi_list) {
+    abi_set.insert(configuration::AbiToString(abi));
+  }
+  // Make unique by hand as the constructor is private.
+  return std::unique_ptr<AbiFilter>(new AbiFilter(abi_set));
+}
+
+bool AbiFilter::Keep(const std::string& path) {
+  // We only care about libraries.
+  if (!util::StartsWith(path, kLibPrefix)) {
+    return true;
+  }
+
+  auto abi_end = path.find('/', kLibPrefixLen);
+  if (abi_end == std::string::npos) {
+    // Ignore any files in the top level lib directory.
+    return true;
+  }
+
+  // Strip the lib/ prefix.
+  const std::string& path_abi = path.substr(kLibPrefixLen, abi_end - kLibPrefixLen);
+  return (abis_.find(path_abi) != abis_.end());
+}
+
+}  // namespace aapt
diff --git a/tools/aapt2/filter/AbiFilter.h b/tools/aapt2/filter/AbiFilter.h
new file mode 100644
index 0000000..d875cb2
--- /dev/null
+++ b/tools/aapt2/filter/AbiFilter.h
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+
+#ifndef AAPT2_ABISPLITTER_H
+#define AAPT2_ABISPLITTER_H
+
+#include <memory>
+#include <string>
+#include <unordered_set>
+#include <vector>
+
+#include "configuration/ConfigurationParser.h"
+#include "filter/Filter.h"
+
+namespace aapt {
+
+/**
+ * Filters native library paths by ABI. ABIs present in the filter list are kept and all over
+ * libraries are removed. The filter is only applied to native library paths (this under lib/).
+ */
+class AbiFilter : public IPathFilter {
+ public:
+  /** Factory method to create a filter from a list of configuration::Abi. */
+  static std::unique_ptr<AbiFilter> FromAbiList(const std::vector<configuration::Abi>& abi_list);
+
+  /** Returns true if the path is for a native library in the list of desired ABIs. */
+  bool Keep(const std::string& path) override;
+
+ private:
+  explicit AbiFilter(std::unordered_set<std::string> abis) : abis_(std::move(abis)) {
+  }
+
+  /** The path prefix to where all native libs end up inside an APK file. */
+  static constexpr const char* kLibPrefix = "lib/";
+  static constexpr size_t kLibPrefixLen = 4;
+  const std::unordered_set<std::string> abis_;
+};
+
+}  // namespace aapt
+
+#endif  // AAPT2_ABISPLITTER_H
diff --git a/tools/aapt2/filter/AbiFilter_test.cpp b/tools/aapt2/filter/AbiFilter_test.cpp
new file mode 100644
index 0000000..0c8ea35
--- /dev/null
+++ b/tools/aapt2/filter/AbiFilter_test.cpp
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+
+#include "filter/AbiFilter.h"
+
+#include <string>
+
+#include "gtest/gtest.h"
+
+namespace aapt {
+namespace {
+
+using ::aapt::configuration::Abi;
+
+struct TestData {
+  std::string path;
+  bool kept;
+};
+
+const TestData kTestData[] = {
+    /* Keep. */
+    {"lib/mips/libnative.so", true},
+    {"not/native/file.txt", true},
+    // Not sure if this is a valid use case.
+    {"lib/listing.txt", true},
+    {"lib/mips/foo/bar/baz.so", true},
+    {"lib/mips/x86/foo.so", true},
+    /* Discard. */
+    {"lib/mips_horse/foo.so", false},
+    {"lib/horse_mips/foo.so", false},
+    {"lib/mips64/armeabi-v7a/foo.so", false},
+    {"lib/mips64/x86_64/x86.so", false},
+    {"lib/x86/libnative.so", false},
+    {"lib/x86/foo/bar/baz.so", false},
+    {"lib/x86/x86/foo.so", false},
+    {"lib/x86_horse/foo.so", false},
+    {"lib/horse_x86/foo.so", false},
+    {"lib/x86/armeabi-v7a/foo.so", false},
+    {"lib/x86_64/x86_64/x86.so", false},
+};
+
+class AbiFilterTest : public ::testing::TestWithParam<TestData> {};
+
+TEST_P(AbiFilterTest, Keep) {
+  auto mips = AbiFilter::FromAbiList({Abi::kMips});
+  const TestData& data = GetParam();
+  EXPECT_EQ(mips->Keep(data.path), data.kept);
+}
+
+INSTANTIATE_TEST_CASE_P(NativePaths, AbiFilterTest, ::testing::ValuesIn(kTestData));
+
+}  // namespace
+}  // namespace aapt
diff --git a/tools/aapt2/filter/Filter.h b/tools/aapt2/filter/Filter.h
new file mode 100644
index 0000000..d737dc9
--- /dev/null
+++ b/tools/aapt2/filter/Filter.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef AAPT2_FILTER_H
+#define AAPT2_FILTER_H
+
+#include <string>
+#include <vector>
+
+#include "util/Util.h"
+
+namespace aapt {
+
+/** A filter to be applied to a path segment. */
+class IPathFilter {
+ public:
+  ~IPathFilter() = default;
+
+  /** Returns true if the path should be kept. */
+  virtual bool Keep(const std::string& path) = 0;
+};
+
+/**
+ * Path filter that keeps anything that matches the provided prefix.
+ */
+class PrefixFilter : public IPathFilter {
+ public:
+  explicit PrefixFilter(std::string prefix) : prefix_(std::move(prefix)) {
+  }
+
+  /** Returns true if the provided path matches the prefix. */
+  bool Keep(const std::string& path) override {
+    return util::StartsWith(path, prefix_);
+  }
+
+ private:
+  const std::string prefix_;
+};
+
+/** Applies a set of IPathFilters to a path and returns true iif all filters keep the path. */
+class FilterChain : public IPathFilter {
+ public:
+  /** Adds a filter to the list to be applied to each path. */
+  void AddFilter(std::unique_ptr<IPathFilter> filter) {
+    filters_.push_back(std::move(filter));
+  }
+
+  /** Returns true if all filters keep the path. */
+  bool Keep(const std::string& path) override {
+    for (auto& filter : filters_) {
+      if (!filter->Keep(path)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+ private:
+  std::vector<std::unique_ptr<IPathFilter>> filters_;
+};
+
+}  // namespace aapt
+
+#endif  // AAPT2_FILTER_H
diff --git a/tools/aapt2/filter/Filter_test.cpp b/tools/aapt2/filter/Filter_test.cpp
new file mode 100644
index 0000000..fb75a4b
--- /dev/null
+++ b/tools/aapt2/filter/Filter_test.cpp
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+
+#include "filter/Filter.h"
+
+#include <string>
+
+#include "io/Util.h"
+
+#include "gtest/gtest.h"
+
+namespace aapt {
+namespace {
+
+TEST(FilterChainTest, EmptyChain) {
+  FilterChain chain;
+  ASSERT_TRUE(chain.Keep("some/random/path"));
+}
+
+TEST(FilterChainTest, SingleFilter) {
+  FilterChain chain;
+  chain.AddFilter(util::make_unique<PrefixFilter>("keep/"));
+
+  ASSERT_FALSE(chain.Keep("removed/path"));
+  ASSERT_TRUE(chain.Keep("keep/path/1"));
+  ASSERT_TRUE(chain.Keep("keep/path/2"));
+}
+
+TEST(FilterChainTest, MultipleFilters) {
+  FilterChain chain;
+  chain.AddFilter(util::make_unique<PrefixFilter>("keep/"));
+  chain.AddFilter(util::make_unique<PrefixFilter>("keep/really/"));
+
+  ASSERT_FALSE(chain.Keep("removed/path"));
+  ASSERT_FALSE(chain.Keep("/keep/really/wrong/prefix"));
+  ASSERT_FALSE(chain.Keep("keep/maybe/1"));
+  ASSERT_TRUE(chain.Keep("keep/really/1"));
+}
+
+}  // namespace
+}  // namespace aapt
diff --git a/tools/aapt2/flatten/Archive.cpp b/tools/aapt2/flatten/Archive.cpp
index 826f91b..5f8bd06 100644
--- a/tools/aapt2/flatten/Archive.cpp
+++ b/tools/aapt2/flatten/Archive.cpp
@@ -23,12 +23,14 @@
 
 #include "android-base/errors.h"
 #include "android-base/macros.h"
+#include "android-base/utf8.h"
 #include "androidfw/StringPiece.h"
 #include "ziparchive/zip_writer.h"
 
 #include "util/Files.h"
 
-using android::StringPiece;
+using ::android::StringPiece;
+using ::android::base::SystemErrorCodeToString;
 
 namespace aapt {
 
@@ -58,11 +60,11 @@
 
     std::string full_path = dir_;
     file::AppendPath(&full_path, path);
-    file::mkdirs(file::GetStem(full_path));
+    file::mkdirs(file::GetStem(full_path).to_string());
 
-    file_ = {fopen(full_path.data(), "wb"), fclose};
+    file_ = {::android::base::utf8::fopen(full_path.c_str(), "wb"), fclose};
     if (!file_) {
-      error_ = android::base::SystemErrorCodeToString(errno);
+      error_ = SystemErrorCodeToString(errno);
       return false;
     }
     return true;
@@ -74,7 +76,7 @@
     }
 
     if (fwrite(data, 1, len, file_.get()) != static_cast<size_t>(len)) {
-      error_ = android::base::SystemErrorCodeToString(errno);
+      error_ = SystemErrorCodeToString(errno);
       file_.reset(nullptr);
       return false;
     }
@@ -121,9 +123,9 @@
   ZipFileWriter() = default;
 
   bool Open(const StringPiece& path) {
-    file_ = {fopen(path.data(), "w+b"), fclose};
+    file_ = {::android::base::utf8::fopen(path.to_string().c_str(), "w+b"), fclose};
     if (!file_) {
-      error_ = android::base::SystemErrorCodeToString(errno);
+      error_ = SystemErrorCodeToString(errno);
       return false;
     }
     writer_ = util::make_unique<ZipWriter>(file_.get());
diff --git a/tools/aapt2/flatten/TableFlattener.cpp b/tools/aapt2/flatten/TableFlattener.cpp
index f4d0226..3292421 100644
--- a/tools/aapt2/flatten/TableFlattener.cpp
+++ b/tools/aapt2/flatten/TableFlattener.cpp
@@ -23,6 +23,7 @@
 
 #include "android-base/logging.h"
 #include "android-base/macros.h"
+#include "android-base/stringprintf.h"
 
 #include "ResourceTable.h"
 #include "ResourceValues.h"
@@ -133,7 +134,7 @@
   }
 
   void Visit(Array* array) override {
-    for (auto& item : array->items) {
+    for (auto& item : array->elements) {
       ResTable_map* out_entry = buffer_->NextBlock<ResTable_map>();
       FlattenValue(item.get(), out_entry);
       out_entry->value.size = util::HostToDevice16(sizeof(out_entry->value));
@@ -557,33 +558,21 @@
 }  // namespace
 
 bool TableFlattener::Consume(IAaptContext* context, ResourceTable* table) {
-  // We must do this before writing the resources, since the string pool IDs may
-  // change.
-  table->string_pool.Sort(
-      [](const StringPool::Entry& a, const StringPool::Entry& b) -> bool {
-        int diff = a.context.priority - b.context.priority;
-        if (diff < 0) return true;
-        if (diff > 0) return false;
-        diff = a.context.config.compare(b.context.config);
-        if (diff < 0) return true;
-        if (diff > 0) return false;
-        return a.value < b.value;
-      });
+  // We must do this before writing the resources, since the string pool IDs may change.
   table->string_pool.Prune();
+  table->string_pool.Sort([](const StringPool::Context& a, const StringPool::Context& b) -> int {
+    int diff = util::compare(a.priority, b.priority);
+    if (diff == 0) {
+      diff = a.config.compare(b.config);
+    }
+    return diff;
+  });
 
   // Write the ResTable header.
   ChunkWriter table_writer(buffer_);
   ResTable_header* table_header = table_writer.StartChunk<ResTable_header>(RES_TABLE_TYPE);
   table_header->packageCount = util::HostToDevice32(table->packages.size());
 
-  // Write a self mapping entry for this package if the ID is non-standard (0x7f).
-  if (context->GetPackageType() == PackageType::kApp) {
-    const uint8_t package_id = context->GetPackageId();
-    if (package_id != kFrameworkPackageId && package_id != kAppPackageId) {
-      table->included_packages_[package_id] = context->GetCompilationPackage();
-    }
-  }
-
   // Flatten the values string pool.
   StringPool::FlattenUtf8(table_writer.buffer(), table->string_pool);
 
@@ -591,6 +580,22 @@
 
   // Flatten each package.
   for (auto& package : table->packages) {
+    if (context->GetPackageType() == PackageType::kApp) {
+      // Write a self mapping entry for this package if the ID is non-standard (0x7f).
+      const uint8_t package_id = package->id.value();
+      if (package_id != kFrameworkPackageId && package_id != kAppPackageId) {
+        auto result = table->included_packages_.insert({package_id, package->name});
+        if (!result.second && result.first->second != package->name) {
+          // A mapping for this package ID already exists, and is a different package. Error!
+          context->GetDiagnostics()->Error(
+              DiagMessage() << android::base::StringPrintf(
+                  "can't map package ID %02x to '%s'. Already mapped to '%s'", package_id,
+                  package->name.c_str(), result.first->second.c_str()));
+          return false;
+        }
+      }
+    }
+
     PackageFlattener flattener(context, package.get(), &table->included_packages_,
                                options_.use_sparse_entries);
     if (!flattener.FlattenPackage(&package_buffer)) {
diff --git a/tools/aapt2/flatten/TableFlattener_test.cpp b/tools/aapt2/flatten/TableFlattener_test.cpp
index 6d1350d..4fdb2ec 100644
--- a/tools/aapt2/flatten/TableFlattener_test.cpp
+++ b/tools/aapt2/flatten/TableFlattener_test.cpp
@@ -26,6 +26,9 @@
 
 using namespace android;
 
+using ::testing::IsNull;
+using ::testing::NotNull;
+
 namespace aapt {
 
 class TableFlattenerTest : public ::testing::Test {
@@ -235,13 +238,12 @@
   ResourceTable result;
   ASSERT_TRUE(Flatten(context_.get(), {}, table.get(), &result));
 
-  Attribute* actualAttr =
-      test::GetValue<Attribute>(&result, "android:attr/foo");
-  ASSERT_NE(nullptr, actualAttr);
-  EXPECT_EQ(attr.IsWeak(), actualAttr->IsWeak());
-  EXPECT_EQ(attr.type_mask, actualAttr->type_mask);
-  EXPECT_EQ(attr.min_int, actualAttr->min_int);
-  EXPECT_EQ(attr.max_int, actualAttr->max_int);
+  Attribute* actual_attr = test::GetValue<Attribute>(&result, "android:attr/foo");
+  ASSERT_THAT(actual_attr, NotNull());
+  EXPECT_EQ(attr.IsWeak(), actual_attr->IsWeak());
+  EXPECT_EQ(attr.type_mask, actual_attr->type_mask);
+  EXPECT_EQ(attr.min_int, actual_attr->min_int);
+  EXPECT_EQ(attr.max_int, actual_attr->max_int);
 }
 
 static std::unique_ptr<ResourceTable> BuildTableWithSparseEntries(
@@ -303,15 +305,13 @@
 
   auto value = test::GetValueForConfig<BinaryPrimitive>(&sparse_table, "android:string/foo_0",
                                                         sparse_config);
-  ASSERT_NE(nullptr, value);
+  ASSERT_THAT(value, NotNull());
   EXPECT_EQ(0u, value->value.data);
 
-  ASSERT_EQ(nullptr, test::GetValueForConfig<BinaryPrimitive>(&sparse_table, "android:string/foo_1",
-                                                              sparse_config));
+  ASSERT_THAT(test::GetValueForConfig<BinaryPrimitive>(&sparse_table, "android:string/foo_1", sparse_config), IsNull());
 
-  value = test::GetValueForConfig<BinaryPrimitive>(&sparse_table, "android:string/foo_4",
-                                                   sparse_config);
-  ASSERT_NE(nullptr, value);
+  value = test::GetValueForConfig<BinaryPrimitive>(&sparse_table, "android:string/foo_4", sparse_config);
+  ASSERT_THAT(value, NotNull());
   EXPECT_EQ(4u, value->value.data);
 }
 
@@ -372,7 +372,7 @@
 
   Maybe<ResourceTable::SearchResult> search_result =
       result.FindResource(test::ParseNameOrDie("lib:id/foo"));
-  AAPT_ASSERT_TRUE(search_result);
+  ASSERT_TRUE(search_result);
   EXPECT_EQ(0x00u, search_result.value().package->id.value());
 
   auto iter = result.included_packages_.find(0x00);
@@ -398,7 +398,7 @@
   ASSERT_TRUE(Flatten(context.get(), {}, table.get(), &result));
 
   const DynamicRefTable* dynamic_ref_table = result.getDynamicRefTableForCookie(1);
-  ASSERT_NE(nullptr, dynamic_ref_table);
+  ASSERT_THAT(dynamic_ref_table, NotNull());
 
   const KeyedVector<String16, uint8_t>& entries = dynamic_ref_table->entries();
 
@@ -423,7 +423,7 @@
   ASSERT_TRUE(Flatten(context.get(), {}, table.get(), &result));
 
   const DynamicRefTable* dynamic_ref_table = result.getDynamicRefTableForCookie(1);
-  ASSERT_NE(nullptr, dynamic_ref_table);
+  ASSERT_THAT(dynamic_ref_table, NotNull());
 
   const KeyedVector<String16, uint8_t>& entries = dynamic_ref_table->entries();
   ssize_t idx = entries.indexOfKey(android::String16("app"));
diff --git a/tools/aapt2/flatten/XmlFlattener.cpp b/tools/aapt2/flatten/XmlFlattener.cpp
index bfebedef..6214d70 100644
--- a/tools/aapt2/flatten/XmlFlattener.cpp
+++ b/tools/aapt2/flatten/XmlFlattener.cpp
@@ -38,12 +38,10 @@
 
 constexpr uint32_t kLowPriority = 0xffffffffu;
 
-static bool cmp_xml_attribute_by_id(const xml::Attribute* a,
-                                    const xml::Attribute* b) {
+static bool cmp_xml_attribute_by_id(const xml::Attribute* a, const xml::Attribute* b) {
   if (a->compiled_attribute && a->compiled_attribute.value().id) {
     if (b->compiled_attribute && b->compiled_attribute.value().id) {
-      return a->compiled_attribute.value().id.value() <
-             b->compiled_attribute.value().id.value();
+      return a->compiled_attribute.value().id.value() < b->compiled_attribute.value().id.value();
     }
     return true;
   } else if (!b->compiled_attribute) {
@@ -75,17 +73,6 @@
   XmlFlattenerVisitor(BigBuffer* buffer, XmlFlattenerOptions options)
       : buffer_(buffer), options_(options) {}
 
-  void Visit(xml::Namespace* node) override {
-    if (node->namespace_uri == xml::kSchemaTools) {
-      // Skip dedicated tools namespace.
-      xml::Visitor::Visit(node);
-    } else {
-      WriteNamespace(node, android::RES_XML_START_NAMESPACE_TYPE);
-      xml::Visitor::Visit(node);
-      WriteNamespace(node, android::RES_XML_END_NAMESPACE_TYPE);
-    }
-  }
-
   void Visit(xml::Text* node) override {
     if (util::TrimWhitespace(node->text).empty()) {
       // Skip whitespace only text nodes.
@@ -93,8 +80,7 @@
     }
 
     ChunkWriter writer(buffer_);
-    ResXMLTree_node* flat_node =
-        writer.StartChunk<ResXMLTree_node>(RES_XML_CDATA_TYPE);
+    ResXMLTree_node* flat_node = writer.StartChunk<ResXMLTree_node>(RES_XML_CDATA_TYPE);
     flat_node->lineNumber = util::HostToDevice32(node->line_number);
     flat_node->comment.index = util::HostToDevice32(-1);
 
@@ -109,6 +95,13 @@
   }
 
   void Visit(xml::Element* node) override {
+    for (const xml::NamespaceDecl& decl : node->namespace_decls) {
+      // Skip dedicated tools namespace.
+      if (decl.uri != xml::kSchemaTools) {
+        WriteNamespace(decl, android::RES_XML_START_NAMESPACE_TYPE);
+      }
+    }
+
     {
       ChunkWriter start_writer(buffer_);
       ResXMLTree_node* flat_node =
@@ -116,19 +109,15 @@
       flat_node->lineNumber = util::HostToDevice32(node->line_number);
       flat_node->comment.index = util::HostToDevice32(-1);
 
-      ResXMLTree_attrExt* flat_elem =
-          start_writer.NextBlock<ResXMLTree_attrExt>();
+      ResXMLTree_attrExt* flat_elem = start_writer.NextBlock<ResXMLTree_attrExt>();
 
-      // A missing namespace must be null, not an empty string. Otherwise the
-      // runtime complains.
+      // A missing namespace must be null, not an empty string. Otherwise the runtime complains.
       AddString(node->namespace_uri, kLowPriority, &flat_elem->ns,
                 true /* treat_empty_string_as_null */);
-      AddString(node->name, kLowPriority, &flat_elem->name,
-                true /* treat_empty_string_as_null */);
+      AddString(node->name, kLowPriority, &flat_elem->name, true /* treat_empty_string_as_null */);
 
       flat_elem->attributeStart = util::HostToDevice16(sizeof(*flat_elem));
-      flat_elem->attributeSize =
-          util::HostToDevice16(sizeof(ResXMLTree_attribute));
+      flat_elem->attributeSize = util::HostToDevice16(sizeof(ResXMLTree_attribute));
 
       WriteAttributes(node, flat_elem, &start_writer);
 
@@ -144,14 +133,20 @@
       flat_end_node->lineNumber = util::HostToDevice32(node->line_number);
       flat_end_node->comment.index = util::HostToDevice32(-1);
 
-      ResXMLTree_endElementExt* flat_end_elem =
-          end_writer.NextBlock<ResXMLTree_endElementExt>();
+      ResXMLTree_endElementExt* flat_end_elem = end_writer.NextBlock<ResXMLTree_endElementExt>();
       AddString(node->namespace_uri, kLowPriority, &flat_end_elem->ns,
                 true /* treat_empty_string_as_null */);
       AddString(node->name, kLowPriority, &flat_end_elem->name);
 
       end_writer.Finish();
     }
+
+    for (auto iter = node->namespace_decls.rbegin(); iter != node->namespace_decls.rend(); ++iter) {
+      // Skip dedicated tools namespace.
+      if (iter->uri != xml::kSchemaTools) {
+        WriteNamespace(*iter, android::RES_XML_END_NAMESPACE_TYPE);
+      }
+    }
   }
 
  private:
@@ -173,17 +168,16 @@
     string_refs.push_back(StringFlattenDest{ref, dest});
   }
 
-  void WriteNamespace(xml::Namespace* node, uint16_t type) {
+  void WriteNamespace(const xml::NamespaceDecl& decl, uint16_t type) {
     ChunkWriter writer(buffer_);
 
     ResXMLTree_node* flatNode = writer.StartChunk<ResXMLTree_node>(type);
-    flatNode->lineNumber = util::HostToDevice32(node->line_number);
+    flatNode->lineNumber = util::HostToDevice32(decl.line_number);
     flatNode->comment.index = util::HostToDevice32(-1);
 
-    ResXMLTree_namespaceExt* flat_ns =
-        writer.NextBlock<ResXMLTree_namespaceExt>();
-    AddString(node->namespace_prefix, kLowPriority, &flat_ns->prefix);
-    AddString(node->namespace_uri, kLowPriority, &flat_ns->uri);
+    ResXMLTree_namespaceExt* flat_ns = writer.NextBlock<ResXMLTree_namespaceExt>();
+    AddString(decl.prefix, kLowPriority, &flat_ns->prefix);
+    AddString(decl.uri, kLowPriority, &flat_ns->uri);
 
     writer.Finish();
   }
@@ -289,8 +283,7 @@
   BigBuffer* buffer_;
   XmlFlattenerOptions options_;
 
-  // Scratch vector to filter attributes. We avoid allocations
-  // making this a member.
+  // Scratch vector to filter attributes. We avoid allocations making this a member.
   std::vector<xml::Attribute*> filtered_attrs_;
 };
 
@@ -307,10 +300,9 @@
   }
 
   // Sort the string pool so that attribute resource IDs show up first.
-  visitor.pool.Sort(
-      [](const StringPool::Entry& a, const StringPool::Entry& b) -> bool {
-        return a.context.priority < b.context.priority;
-      });
+  visitor.pool.Sort([](const StringPool::Context& a, const StringPool::Context& b) -> int {
+    return util::compare(a.priority, b.priority);
+  });
 
   // Now we flatten the string pool references into the correct places.
   for (const auto& ref_entry : visitor.string_refs) {
@@ -322,21 +314,23 @@
   xml_header_writer.StartChunk<ResXMLTree_header>(RES_XML_TYPE);
 
   // Flatten the StringPool.
-  StringPool::FlattenUtf8(buffer_, visitor.pool);
+  if (options_.use_utf16) {
+    StringPool::FlattenUtf16(buffer_, visitor.pool);
+  } else {
+    StringPool::FlattenUtf8(buffer_, visitor.pool);
+  }
 
   {
     // Write the array of resource IDs, indexed by StringPool order.
     ChunkWriter res_id_map_writer(buffer_);
     res_id_map_writer.StartChunk<ResChunk_header>(RES_XML_RESOURCE_MAP_TYPE);
-    for (const auto& str : visitor.pool) {
-      ResourceId id = {str->context.priority};
-      if (id.id == kLowPriority || !id.is_valid()) {
-        // When we see the first non-resource ID,
-        // we're done.
+    for (const auto& str : visitor.pool.strings()) {
+      ResourceId id(str->context.priority);
+      if (str->context.priority == kLowPriority || !id.is_valid()) {
+        // When we see the first non-resource ID, we're done.
         break;
       }
-
-      *res_id_map_writer.NextBlock<uint32_t>() = id.id;
+      *res_id_map_writer.NextBlock<uint32_t>() = util::HostToDevice32(id.id);
     }
     res_id_map_writer.Finish();
   }
diff --git a/tools/aapt2/flatten/XmlFlattener.h b/tools/aapt2/flatten/XmlFlattener.h
index 87557f2..9e436ac 100644
--- a/tools/aapt2/flatten/XmlFlattener.h
+++ b/tools/aapt2/flatten/XmlFlattener.h
@@ -30,6 +30,10 @@
    * Keep attribute raw string values along with typed values.
    */
   bool keep_raw_values = false;
+
+  // Encode the strings in UTF-16. Only needed for AndroidManifest.xml to avoid a bug in
+  // certain non-AOSP platforms: https://issuetracker.google.com/64434571
+  bool use_utf16 = false;
 };
 
 class XmlFlattener : public IXmlResourceConsumer {
diff --git a/tools/aapt2/integration-tests/AppOne/res/navigation/home.xml b/tools/aapt2/integration-tests/AppOne/res/navigation/home.xml
new file mode 100644
index 0000000..ade271d
--- /dev/null
+++ b/tools/aapt2/integration-tests/AppOne/res/navigation/home.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<navigation />
diff --git a/tools/aapt2/integration-tests/AppOne/res/values/styles.xml b/tools/aapt2/integration-tests/AppOne/res/values/styles.xml
index f05845c..19d96c0 100644
--- a/tools/aapt2/integration-tests/AppOne/res/values/styles.xml
+++ b/tools/aapt2/integration-tests/AppOne/res/values/styles.xml
@@ -25,6 +25,7 @@
     <style name="Pop">
         <item name="custom">@android:drawable/btn_default</item>
         <item name="android:focusable">true</item>
+        <item name="android:numColumns">auto_fit</item>
     </style>
     <string name="yo">@string/wow</string>
 
diff --git a/tools/aapt2/io/FileInputStream.cpp b/tools/aapt2/io/FileInputStream.cpp
new file mode 100644
index 0000000..07dbb5a
--- /dev/null
+++ b/tools/aapt2/io/FileInputStream.cpp
@@ -0,0 +1,102 @@
+/*
+ * 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.
+ */
+
+#include "io/FileInputStream.h"
+
+#include <errno.h>   // for errno
+#include <fcntl.h>   // for O_RDONLY
+#include <unistd.h>  // for read
+
+#include "android-base/errors.h"
+#include "android-base/file.h"  // for O_BINARY
+#include "android-base/macros.h"
+#include "android-base/utf8.h"
+
+using ::android::base::SystemErrorCodeToString;
+
+namespace aapt {
+namespace io {
+
+FileInputStream::FileInputStream(const std::string& path, size_t buffer_capacity)
+    : FileInputStream(::android::base::utf8::open(path.c_str(), O_RDONLY | O_BINARY),
+                      buffer_capacity) {
+}
+
+FileInputStream::FileInputStream(int fd, size_t buffer_capacity)
+    : fd_(fd),
+      buffer_capacity_(buffer_capacity),
+      buffer_offset_(0u),
+      buffer_size_(0u),
+      total_byte_count_(0u) {
+  if (fd_ == -1) {
+    error_ = SystemErrorCodeToString(errno);
+  } else {
+    buffer_.reset(new uint8_t[buffer_capacity_]);
+  }
+}
+
+bool FileInputStream::Next(const void** data, size_t* size) {
+  if (HadError()) {
+    return false;
+  }
+
+  // Deal with any remaining bytes after BackUp was called.
+  if (buffer_offset_ != buffer_size_) {
+    *data = buffer_.get() + buffer_offset_;
+    *size = buffer_size_ - buffer_offset_;
+    total_byte_count_ += buffer_size_ - buffer_offset_;
+    buffer_offset_ = buffer_size_;
+    return true;
+  }
+
+  ssize_t n = TEMP_FAILURE_RETRY(read(fd_, buffer_.get(), buffer_capacity_));
+  if (n < 0) {
+    error_ = SystemErrorCodeToString(errno);
+    fd_.reset();
+    return false;
+  }
+
+  buffer_size_ = static_cast<size_t>(n);
+  buffer_offset_ = buffer_size_;
+  total_byte_count_ += buffer_size_;
+
+  *data = buffer_.get();
+  *size = buffer_size_;
+  return buffer_size_ != 0u;
+}
+
+void FileInputStream::BackUp(size_t count) {
+  if (count > buffer_offset_) {
+    count = buffer_offset_;
+  }
+  buffer_offset_ -= count;
+  total_byte_count_ -= count;
+}
+
+size_t FileInputStream::ByteCount() const {
+  return total_byte_count_;
+}
+
+bool FileInputStream::HadError() const {
+  return !error_.empty();
+}
+
+std::string FileInputStream::GetError() const {
+  return error_;
+}
+
+}  // namespace io
+}  // namespace aapt
diff --git a/tools/aapt2/io/FileInputStream.h b/tools/aapt2/io/FileInputStream.h
new file mode 100644
index 0000000..6beb9a1
--- /dev/null
+++ b/tools/aapt2/io/FileInputStream.h
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ */
+
+#ifndef AAPT_IO_FILEINPUTSTREAM_H
+#define AAPT_IO_FILEINPUTSTREAM_H
+
+#include "io/Io.h"
+
+#include <memory>
+#include <string>
+
+#include "android-base/macros.h"
+#include "android-base/unique_fd.h"
+
+namespace aapt {
+namespace io {
+
+class FileInputStream : public InputStream {
+ public:
+  explicit FileInputStream(const std::string& path, size_t buffer_capacity = 4096);
+
+  // Takes ownership of `fd`.
+  explicit FileInputStream(int fd, size_t buffer_capacity = 4096);
+
+  bool Next(const void** data, size_t* size) override;
+
+  void BackUp(size_t count) override;
+
+  size_t ByteCount() const override;
+
+  bool HadError() const override;
+
+  std::string GetError() const override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FileInputStream);
+
+  android::base::unique_fd fd_;
+  std::string error_;
+  std::unique_ptr<uint8_t[]> buffer_;
+  size_t buffer_capacity_;
+  size_t buffer_offset_;
+  size_t buffer_size_;
+  size_t total_byte_count_;
+};
+
+}  // namespace io
+}  // namespace aapt
+
+#endif  // AAPT_IO_FILEINPUTSTREAM_H
diff --git a/tools/aapt2/io/FileInputStream_test.cpp b/tools/aapt2/io/FileInputStream_test.cpp
new file mode 100644
index 0000000..7314ab7
--- /dev/null
+++ b/tools/aapt2/io/FileInputStream_test.cpp
@@ -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.
+ */
+
+#include "io/FileInputStream.h"
+
+#include "android-base/macros.h"
+#include "android-base/test_utils.h"
+
+#include "test/Test.h"
+
+using ::android::StringPiece;
+using ::testing::Eq;
+using ::testing::NotNull;
+using ::testing::StrEq;
+
+namespace aapt {
+namespace io {
+
+TEST(FileInputStreamTest, NextAndBackup) {
+  std::string input = "this is a cool string";
+  TemporaryFile file;
+  ASSERT_THAT(TEMP_FAILURE_RETRY(write(file.fd, input.c_str(), input.size())), Eq(21));
+  lseek64(file.fd, 0, SEEK_SET);
+
+  // Use a small buffer size so that we can call Next() a few times.
+  FileInputStream in(file.fd, 10u);
+  ASSERT_FALSE(in.HadError());
+  EXPECT_THAT(in.ByteCount(), Eq(0u));
+
+  const char* buffer;
+  size_t size;
+  ASSERT_TRUE(in.Next(reinterpret_cast<const void**>(&buffer), &size)) << in.GetError();
+  ASSERT_THAT(size, Eq(10u));
+  ASSERT_THAT(buffer, NotNull());
+  EXPECT_THAT(in.ByteCount(), Eq(10u));
+  EXPECT_THAT(StringPiece(buffer, size), Eq("this is a "));
+
+  ASSERT_TRUE(in.Next(reinterpret_cast<const void**>(&buffer), &size));
+  ASSERT_THAT(size, Eq(10u));
+  ASSERT_THAT(buffer, NotNull());
+  EXPECT_THAT(in.ByteCount(), Eq(20u));
+  EXPECT_THAT(StringPiece(buffer, size), Eq("cool strin"));
+
+  in.BackUp(5u);
+  EXPECT_THAT(in.ByteCount(), Eq(15u));
+
+  ASSERT_TRUE(in.Next(reinterpret_cast<const void**>(&buffer), &size));
+  ASSERT_THAT(size, Eq(5u));
+  ASSERT_THAT(buffer, NotNull());
+  ASSERT_THAT(in.ByteCount(), Eq(20u));
+  EXPECT_THAT(StringPiece(buffer, size), Eq("strin"));
+
+  // Backup 1 more than possible. Should clamp.
+  in.BackUp(11u);
+  EXPECT_THAT(in.ByteCount(), Eq(10u));
+
+  ASSERT_TRUE(in.Next(reinterpret_cast<const void**>(&buffer), &size));
+  ASSERT_THAT(size, Eq(10u));
+  ASSERT_THAT(buffer, NotNull());
+  ASSERT_THAT(in.ByteCount(), Eq(20u));
+  EXPECT_THAT(StringPiece(buffer, size), Eq("cool strin"));
+
+  ASSERT_TRUE(in.Next(reinterpret_cast<const void**>(&buffer), &size));
+  ASSERT_THAT(size, Eq(1u));
+  ASSERT_THAT(buffer, NotNull());
+  ASSERT_THAT(in.ByteCount(), Eq(21u));
+  EXPECT_THAT(StringPiece(buffer, size), Eq("g"));
+
+  EXPECT_FALSE(in.Next(reinterpret_cast<const void**>(&buffer), &size));
+  EXPECT_FALSE(in.HadError());
+}
+
+}  // namespace io
+}  // namespace aapt
diff --git a/tools/aapt2/io/StringInputStream.cpp b/tools/aapt2/io/StringInputStream.cpp
new file mode 100644
index 0000000..51a18a7
--- /dev/null
+++ b/tools/aapt2/io/StringInputStream.cpp
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ */
+
+#include "io/StringInputStream.h"
+
+using ::android::StringPiece;
+
+namespace aapt {
+namespace io {
+
+StringInputStream::StringInputStream(const StringPiece& str) : str_(str), offset_(0u) {
+}
+
+bool StringInputStream::Next(const void** data, size_t* size) {
+  if (offset_ == str_.size()) {
+    return false;
+  }
+
+  *data = str_.data() + offset_;
+  *size = str_.size() - offset_;
+  offset_ = str_.size();
+  return true;
+}
+
+void StringInputStream::BackUp(size_t count) {
+  if (count > offset_) {
+    count = offset_;
+  }
+  offset_ -= count;
+}
+
+size_t StringInputStream::ByteCount() const {
+  return offset_;
+}
+
+}  // namespace io
+}  // namespace aapt
diff --git a/tools/aapt2/io/StringInputStream.h b/tools/aapt2/io/StringInputStream.h
new file mode 100644
index 0000000..ff5b112
--- /dev/null
+++ b/tools/aapt2/io/StringInputStream.h
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+
+#ifndef AAPT_IO_STRINGINPUTSTREAM_H
+#define AAPT_IO_STRINGINPUTSTREAM_H
+
+#include "io/Io.h"
+
+#include "android-base/macros.h"
+#include "androidfw/StringPiece.h"
+
+namespace aapt {
+namespace io {
+
+class StringInputStream : public InputStream {
+ public:
+  explicit StringInputStream(const android::StringPiece& str);
+
+  bool Next(const void** data, size_t* size) override;
+
+  void BackUp(size_t count) override;
+
+  size_t ByteCount() const override;
+
+  inline bool HadError() const override {
+    return false;
+  }
+
+  inline std::string GetError() const override {
+    return {};
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(StringInputStream);
+
+  android::StringPiece str_;
+  size_t offset_;
+};
+
+}  // namespace io
+}  // namespace aapt
+
+#endif  // AAPT_IO_STRINGINPUTSTREAM_H
diff --git a/tools/aapt2/io/StringInputStream_test.cpp b/tools/aapt2/io/StringInputStream_test.cpp
new file mode 100644
index 0000000..cc57bc4
--- /dev/null
+++ b/tools/aapt2/io/StringInputStream_test.cpp
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ */
+
+#include "io/StringInputStream.h"
+
+#include "test/Test.h"
+
+using ::android::StringPiece;
+using ::testing::Eq;
+using ::testing::NotNull;
+using ::testing::StrEq;
+
+namespace aapt {
+namespace io {
+
+TEST(StringInputStreamTest, OneCallToNextShouldReturnEntireBuffer) {
+  constexpr const size_t kCount = 1000;
+  std::string input;
+  input.resize(kCount, 0x7f);
+  input[0] = 0x00;
+  input[kCount - 1] = 0xff;
+  StringInputStream in(input);
+
+  const char* buffer;
+  size_t size;
+  ASSERT_TRUE(in.Next(reinterpret_cast<const void**>(&buffer), &size));
+  ASSERT_THAT(size, Eq(kCount));
+  ASSERT_THAT(buffer, NotNull());
+
+  EXPECT_THAT(buffer[0], Eq(0x00));
+  EXPECT_THAT(buffer[kCount - 1], Eq('\xff'));
+
+  EXPECT_FALSE(in.Next(reinterpret_cast<const void**>(&buffer), &size));
+  EXPECT_FALSE(in.HadError());
+}
+
+TEST(StringInputStreamTest, BackUp) {
+  std::string input = "hello this is a string";
+  StringInputStream in(input);
+
+  const char* buffer;
+  size_t size;
+  ASSERT_TRUE(in.Next(reinterpret_cast<const void**>(&buffer), &size));
+  ASSERT_THAT(size, Eq(input.size()));
+  ASSERT_THAT(buffer, NotNull());
+  EXPECT_THAT(in.ByteCount(), Eq(input.size()));
+
+  in.BackUp(6u);
+  EXPECT_THAT(in.ByteCount(), Eq(input.size() - 6u));
+
+  ASSERT_TRUE(in.Next(reinterpret_cast<const void**>(&buffer), &size));
+  ASSERT_THAT(size, Eq(6u));
+  ASSERT_THAT(buffer, NotNull());
+  ASSERT_THAT(buffer, StrEq("string"));
+  EXPECT_THAT(in.ByteCount(), Eq(input.size()));
+}
+
+}  // namespace io
+}  // namespace aapt
diff --git a/tools/aapt2/java/AnnotationProcessor.cpp b/tools/aapt2/java/AnnotationProcessor.cpp
index a0ef00b..1f83fa0 100644
--- a/tools/aapt2/java/AnnotationProcessor.cpp
+++ b/tools/aapt2/java/AnnotationProcessor.cpp
@@ -18,12 +18,29 @@
 
 #include <algorithm>
 
+#include "text/Unicode.h"
+#include "text/Utf8Iterator.h"
 #include "util/Util.h"
 
-using android::StringPiece;
+using ::aapt::text::Utf8Iterator;
+using ::android::StringPiece;
 
 namespace aapt {
 
+StringPiece AnnotationProcessor::ExtractFirstSentence(const StringPiece& comment) {
+  Utf8Iterator iter(comment);
+  while (iter.HasNext()) {
+    const char32_t codepoint = iter.Next();
+    if (codepoint == U'.') {
+      const size_t current_position = iter.Position();
+      if (!iter.HasNext() || text::IsWhitespace(iter.Next())) {
+        return comment.substr(0, current_position);
+      }
+    }
+  }
+  return comment;
+}
+
 void AnnotationProcessor::AppendCommentLine(std::string& comment) {
   static const std::string sDeprecated = "@deprecated";
   static const std::string sSystemApi = "@SystemApi";
diff --git a/tools/aapt2/java/AnnotationProcessor.h b/tools/aapt2/java/AnnotationProcessor.h
index 99cd44f..a06eda0 100644
--- a/tools/aapt2/java/AnnotationProcessor.h
+++ b/tools/aapt2/java/AnnotationProcessor.h
@@ -53,6 +53,8 @@
  */
 class AnnotationProcessor {
  public:
+  static android::StringPiece ExtractFirstSentence(const android::StringPiece& comment);
+
   /**
    * Adds more comments. Since resources can have various values with different
    * configurations,
diff --git a/tools/aapt2/java/AnnotationProcessor_test.cpp b/tools/aapt2/java/AnnotationProcessor_test.cpp
index 3e43c42..9ccac88 100644
--- a/tools/aapt2/java/AnnotationProcessor_test.cpp
+++ b/tools/aapt2/java/AnnotationProcessor_test.cpp
@@ -18,6 +18,10 @@
 
 #include "test/Test.h"
 
+using ::testing::Eq;
+using ::testing::HasSubstr;
+using ::testing::Not;
+
 namespace aapt {
 
 TEST(AnnotationProcessorTest, EmitsDeprecated) {
@@ -33,7 +37,7 @@
   processor.WriteToStream(&result, "");
   std::string annotations = result.str();
 
-  EXPECT_NE(std::string::npos, annotations.find("@Deprecated"));
+  EXPECT_THAT(annotations, HasSubstr("@Deprecated"));
 }
 
 TEST(AnnotationProcessorTest, EmitsSystemApiAnnotationAndRemovesFromComment) {
@@ -44,10 +48,20 @@
   processor.WriteToStream(&result, "");
   std::string annotations = result.str();
 
-  EXPECT_NE(std::string::npos,
-            annotations.find("@android.annotation.SystemApi"));
-  EXPECT_EQ(std::string::npos, annotations.find("@SystemApi"));
-  EXPECT_NE(std::string::npos, annotations.find("This is a system API"));
+  EXPECT_THAT(annotations, HasSubstr("@android.annotation.SystemApi"));
+  EXPECT_THAT(annotations, Not(HasSubstr("@SystemApi")));
+  EXPECT_THAT(annotations, HasSubstr("This is a system API"));
+}
+
+TEST(AnnotationProcessor, ExtractsFirstSentence) {
+  EXPECT_THAT(AnnotationProcessor::ExtractFirstSentence("This is the only sentence"),
+              Eq("This is the only sentence"));
+  EXPECT_THAT(AnnotationProcessor::ExtractFirstSentence(
+                  "This is the\n  first sentence.  This is the rest of the paragraph."),
+              Eq("This is the\n  first sentence."));
+  EXPECT_THAT(AnnotationProcessor::ExtractFirstSentence(
+                  "This is the first sentence with a {@link android.R.styleable.Theme}."),
+              Eq("This is the first sentence with a {@link android.R.styleable.Theme}."));
 }
 
 }  // namespace aapt
diff --git a/tools/aapt2/java/ClassDefinition.cpp b/tools/aapt2/java/ClassDefinition.cpp
index 0cec9ae..c139b73 100644
--- a/tools/aapt2/java/ClassDefinition.cpp
+++ b/tools/aapt2/java/ClassDefinition.cpp
@@ -39,9 +39,23 @@
   *out << prefix << "}";
 }
 
+ClassDefinition::Result ClassDefinition::AddMember(std::unique_ptr<ClassMember> member) {
+  Result result = Result::kAdded;
+  auto iter = indexed_members_.find(member->GetName());
+  if (iter != indexed_members_.end()) {
+    // Overwrite the entry.
+    ordered_members_[iter->second].reset();
+    result = Result::kOverridden;
+  }
+
+  indexed_members_[member->GetName()] = ordered_members_.size();
+  ordered_members_.push_back(std::move(member));
+  return result;
+}
+
 bool ClassDefinition::empty() const {
-  for (const std::unique_ptr<ClassMember>& member : members_) {
-    if (!member->empty()) {
+  for (const std::unique_ptr<ClassMember>& member : ordered_members_) {
+    if (member != nullptr && !member->empty()) {
       return false;
     }
   }
@@ -50,7 +64,7 @@
 
 void ClassDefinition::WriteToStream(const StringPiece& prefix, bool final,
                                     std::ostream* out) const {
-  if (members_.empty() && !create_if_empty_) {
+  if (empty() && !create_if_empty_) {
     return;
   }
 
@@ -65,9 +79,14 @@
   std::string new_prefix = prefix.to_string();
   new_prefix.append(kIndent);
 
-  for (const std::unique_ptr<ClassMember>& member : members_) {
-    member->WriteToStream(new_prefix, final, out);
-    *out << "\n";
+  for (const std::unique_ptr<ClassMember>& member : ordered_members_) {
+    // There can be nullptr members when a member is added to the ClassDefinition
+    // and takes precedence over a previous member with the same name. The overridden member is
+    // set to nullptr.
+    if (member != nullptr) {
+      member->WriteToStream(new_prefix, final, out);
+      *out << "\n";
+    }
   }
 
   *out << prefix << "}";
diff --git a/tools/aapt2/java/ClassDefinition.h b/tools/aapt2/java/ClassDefinition.h
index ca76421..28a3489 100644
--- a/tools/aapt2/java/ClassDefinition.h
+++ b/tools/aapt2/java/ClassDefinition.h
@@ -19,6 +19,8 @@
 
 #include <ostream>
 #include <string>
+#include <unordered_map>
+#include <vector>
 
 #include "android-base/macros.h"
 #include "androidfw/StringPiece.h"
@@ -37,10 +39,14 @@
  public:
   virtual ~ClassMember() = default;
 
-  AnnotationProcessor* GetCommentBuilder() { return &processor_; }
+  AnnotationProcessor* GetCommentBuilder() {
+    return &processor_;
+  }
 
   virtual bool empty() const = 0;
 
+  virtual const std::string& GetName() const = 0;
+
   // Writes the class member to the out stream. Subclasses should derive this method
   // to write their own data. Call this base method from the subclass to write out
   // this member's comments/annotations.
@@ -57,33 +63,42 @@
   PrimitiveMember(const android::StringPiece& name, const T& val)
       : name_(name.to_string()), val_(val) {}
 
-  bool empty() const override { return false; }
+  bool empty() const override {
+    return false;
+  }
+
+  const std::string& GetName() const override {
+    return name_;
+  }
 
   void WriteToStream(const android::StringPiece& prefix, bool final,
                      std::ostream* out) const override {
     ClassMember::WriteToStream(prefix, final, out);
-
-    *out << prefix << "public static " << (final ? "final " : "") << "int "
-         << name_ << "=" << val_ << ";";
+    *out << prefix << "public static " << (final ? "final " : "") << "int " << name_ << "=" << val_
+         << ";";
   }
 
  private:
+  DISALLOW_COPY_AND_ASSIGN(PrimitiveMember);
+
   std::string name_;
   T val_;
-
-  DISALLOW_COPY_AND_ASSIGN(PrimitiveMember);
 };
 
-/**
- * Specialization for strings so they get the right type and are quoted with "".
- */
+// Specialization for strings so they get the right type and are quoted with "".
 template <>
 class PrimitiveMember<std::string> : public ClassMember {
  public:
   PrimitiveMember(const android::StringPiece& name, const std::string& val)
       : name_(name.to_string()), val_(val) {}
 
-  bool empty() const override { return false; }
+  bool empty() const override {
+    return false;
+  }
+
+  const std::string& GetName() const override {
+    return name_;
+  }
 
   void WriteToStream(const android::StringPiece& prefix, bool final,
                      std::ostream* out) const override {
@@ -94,10 +109,10 @@
   }
 
  private:
+  DISALLOW_COPY_AND_ASSIGN(PrimitiveMember);
+
   std::string name_;
   std::string val_;
-
-  DISALLOW_COPY_AND_ASSIGN(PrimitiveMember);
 };
 
 using IntMember = PrimitiveMember<uint32_t>;
@@ -109,9 +124,17 @@
  public:
   explicit PrimitiveArrayMember(const android::StringPiece& name) : name_(name.to_string()) {}
 
-  void AddElement(const T& val) { elements_.push_back(val); }
+  void AddElement(const T& val) {
+    elements_.push_back(val);
+  }
 
-  bool empty() const override { return false; }
+  bool empty() const override {
+    return false;
+  }
+
+  const std::string& GetName() const override {
+    return name_;
+  }
 
   void WriteToStream(const android::StringPiece& prefix, bool final,
                      std::ostream* out) const override {
@@ -135,10 +158,10 @@
   }
 
  private:
+  DISALLOW_COPY_AND_ASSIGN(PrimitiveArrayMember);
+
   std::string name_;
   std::vector<T> elements_;
-
-  DISALLOW_COPY_AND_ASSIGN(PrimitiveArrayMember);
 };
 
 using ResourceArrayMember = PrimitiveArrayMember<ResourceId>;
@@ -154,13 +177,22 @@
   // formatting may be broken.
   void AppendStatement(const android::StringPiece& statement);
 
+  // Not quite the same as a name, but good enough.
+  const std::string& GetName() const override {
+    return signature_;
+  }
+
   // Even if the method is empty, we always want to write the method signature.
-  bool empty() const override { return false; }
+  bool empty() const override {
+    return false;
+  }
 
   void WriteToStream(const android::StringPiece& prefix, bool final,
                      std::ostream* out) const override;
 
  private:
+  DISALLOW_COPY_AND_ASSIGN(MethodDefinition);
+
   std::string signature_;
   std::vector<std::string> statements_;
 };
@@ -175,21 +207,30 @@
   ClassDefinition(const android::StringPiece& name, ClassQualifier qualifier, bool createIfEmpty)
       : name_(name.to_string()), qualifier_(qualifier), create_if_empty_(createIfEmpty) {}
 
-  void AddMember(std::unique_ptr<ClassMember> member) {
-    members_.push_back(std::move(member));
-  }
+  enum class Result {
+    kAdded,
+    kOverridden,
+  };
+
+  Result AddMember(std::unique_ptr<ClassMember> member);
 
   bool empty() const override;
+
+  const std::string& GetName() const override {
+    return name_;
+  }
+
   void WriteToStream(const android::StringPiece& prefix, bool final,
                      std::ostream* out) const override;
 
  private:
+  DISALLOW_COPY_AND_ASSIGN(ClassDefinition);
+
   std::string name_;
   ClassQualifier qualifier_;
   bool create_if_empty_;
-  std::vector<std::unique_ptr<ClassMember>> members_;
-
-  DISALLOW_COPY_AND_ASSIGN(ClassDefinition);
+  std::vector<std::unique_ptr<ClassMember>> ordered_members_;
+  std::unordered_map<android::StringPiece, size_t> indexed_members_;
 };
 
 }  // namespace aapt
diff --git a/tools/aapt2/java/JavaClassGenerator.cpp b/tools/aapt2/java/JavaClassGenerator.cpp
index 2a23aa9..44fa0f1 100644
--- a/tools/aapt2/java/JavaClassGenerator.cpp
+++ b/tools/aapt2/java/JavaClassGenerator.cpp
@@ -299,24 +299,16 @@
       }
 
       const ResourceName& attr_name = entry.attr_ref->name.value();
-      styleable_comment << "<tr><td>";
-      styleable_comment << "<code>{@link #" << entry.field_name << " "
-                        << (!attr_name.package.empty()
-                                ? attr_name.package
-                                : context_->GetCompilationPackage())
-                        << ":" << attr_name.entry << "}</code>";
-      styleable_comment << "</td>";
-
-      styleable_comment << "<td>";
+      styleable_comment << "<tr><td><code>{@link #" << entry.field_name << " "
+                        << (!attr_name.package.empty() ? attr_name.package
+                                                       : context_->GetCompilationPackage())
+                        << ":" << attr_name.entry << "}</code></td>";
 
       // Only use the comment up until the first '.'. This is to stay compatible with
       // the way old AAPT did it (presumably to keep it short and to avoid including
       // annotations like @hide which would affect this Styleable).
-      auto iter = std::find(attr_comment_line.begin(), attr_comment_line.end(), '.');
-      if (iter != attr_comment_line.end()) {
-        attr_comment_line = attr_comment_line.substr(0, (iter - attr_comment_line.begin()) + 1);
-      }
-      styleable_comment << attr_comment_line << "</td></tr>\n";
+      styleable_comment << "<td>" << AnnotationProcessor::ExtractFirstSentence(attr_comment_line)
+                        << "</td></tr>\n";
     }
     styleable_comment << "</table>\n";
 
diff --git a/tools/aapt2/java/JavaClassGenerator_test.cpp b/tools/aapt2/java/JavaClassGenerator_test.cpp
index 271279f..84bf041 100644
--- a/tools/aapt2/java/JavaClassGenerator_test.cpp
+++ b/tools/aapt2/java/JavaClassGenerator_test.cpp
@@ -23,6 +23,8 @@
 #include "util/Util.h"
 
 using android::StringPiece;
+using ::testing::Lt;
+using ::testing::Ne;
 
 namespace aapt {
 
@@ -329,6 +331,53 @@
   EXPECT_NE(std::string::npos, actual.find(styleable.GetComment().data()));
 }
 
+TEST(JavaClassGeneratorTest, StyleableAndIndicesAreColocated) {
+  std::unique_ptr<ResourceTable> table =
+      test::ResourceTableBuilder()
+          .SetPackageId("android", 0x01)
+          .AddValue("android:attr/layout_gravity", util::make_unique<Attribute>())
+          .AddValue("android:attr/background", util::make_unique<Attribute>())
+          .AddValue("android:styleable/ActionBar",
+                    test::StyleableBuilder()
+                        .AddItem("android:attr/background", ResourceId(0x01010000))
+                        .Build())
+          .AddValue("android:styleable/ActionBar.LayoutParams",
+                    test::StyleableBuilder()
+                        .AddItem("android:attr/layout_gravity", ResourceId(0x01010001))
+                        .Build())
+          .Build();
+
+  std::unique_ptr<IAaptContext> context =
+      test::ContextBuilder()
+          .AddSymbolSource(util::make_unique<ResourceTableSymbolSource>(table.get()))
+          .SetNameManglerPolicy(NameManglerPolicy{"android"})
+          .Build();
+
+  JavaClassGeneratorOptions options;
+  JavaClassGenerator generator(context.get(), table.get(), {});
+  std::stringstream out;
+  ASSERT_TRUE(generator.Generate("android", &out));
+  std::string output = out.str();
+
+  std::string::size_type actionbar_pos = output.find("int[] ActionBar");
+  ASSERT_THAT(actionbar_pos, Ne(std::string::npos));
+
+  std::string::size_type actionbar_background_pos = output.find("int ActionBar_background");
+  ASSERT_THAT(actionbar_background_pos, Ne(std::string::npos));
+
+  std::string::size_type actionbar_layout_params_pos = output.find("int[] ActionBar_LayoutParams");
+  ASSERT_THAT(actionbar_layout_params_pos, Ne(std::string::npos));
+
+  std::string::size_type actionbar_layout_params_layout_gravity_pos =
+      output.find("int ActionBar_LayoutParams_layout_gravity");
+  ASSERT_THAT(actionbar_layout_params_layout_gravity_pos, Ne(std::string::npos));
+
+  EXPECT_THAT(actionbar_pos, Lt(actionbar_background_pos));
+  EXPECT_THAT(actionbar_pos, Lt(actionbar_layout_params_pos));
+  EXPECT_THAT(actionbar_background_pos, Lt(actionbar_layout_params_pos));
+  EXPECT_THAT(actionbar_layout_params_pos, Lt(actionbar_layout_params_layout_gravity_pos));
+}
+
 TEST(JavaClassGeneratorTest, CommentsForRemovedAttributesAreNotPresentInClass) {
   Attribute attr(false);
   attr.SetComment(StringPiece("removed"));
diff --git a/tools/aapt2/java/ManifestClassGenerator.cpp b/tools/aapt2/java/ManifestClassGenerator.cpp
index f49e498..8981e07 100644
--- a/tools/aapt2/java/ManifestClassGenerator.cpp
+++ b/tools/aapt2/java/ManifestClassGenerator.cpp
@@ -21,24 +21,21 @@
 #include "Source.h"
 #include "java/AnnotationProcessor.h"
 #include "java/ClassDefinition.h"
+#include "text/Unicode.h"
 #include "util/Maybe.h"
 #include "xml/XmlDom.h"
 
 using android::StringPiece;
+using ::aapt::text::IsJavaIdentifier;
 
 namespace aapt {
 
-static Maybe<StringPiece> ExtractJavaIdentifier(IDiagnostics* diag,
-                                                const Source& source,
-                                                const StringPiece& value) {
-  const StringPiece sep = ".";
-  auto iter = std::find_end(value.begin(), value.end(), sep.begin(), sep.end());
-
-  StringPiece result;
-  if (iter != value.end()) {
-    result.assign(iter + sep.size(), value.end() - (iter + sep.size()));
-  } else {
-    result = value;
+static Maybe<StringPiece> ExtractJavaIdentifier(IDiagnostics* diag, const Source& source,
+                                                const std::string& value) {
+  StringPiece result = value;
+  size_t pos = value.rfind('.');
+  if (pos != std::string::npos) {
+    result = result.substr(pos + 1);
   }
 
   if (result.empty()) {
@@ -46,19 +43,10 @@
     return {};
   }
 
-  iter = util::FindNonAlphaNumericAndNotInSet(result, "_");
-  if (iter != result.end()) {
-    diag->Error(DiagMessage(source) << "invalid character '"
-                                    << StringPiece(iter, 1) << "' in '"
-                                    << result << "'");
+  if (!IsJavaIdentifier(result)) {
+    diag->Error(DiagMessage(source) << "invalid Java identifier '" << result << "'");
     return {};
   }
-
-  if (*result.begin() >= '0' && *result.begin() <= '9') {
-    diag->Error(DiagMessage(source) << "symbol can not start with a digit");
-    return {};
-  }
-
   return result;
 }
 
@@ -81,7 +69,10 @@
       util::make_unique<StringMember>(result.value(), attr->value);
   string_member->GetCommentBuilder()->AppendComment(el->comment);
 
-  class_def->AddMember(std::move(string_member));
+  if (class_def->AddMember(std::move(string_member)) == ClassDefinition::Result::kOverridden) {
+    diag->Warn(DiagMessage(source.WithLine(el->line_number))
+               << "duplicate definitions of '" << result.value() << "', overriding previous");
+  }
   return true;
 }
 
diff --git a/tools/aapt2/java/ManifestClassGenerator_test.cpp b/tools/aapt2/java/ManifestClassGenerator_test.cpp
index 5ebf508..44b6a1f 100644
--- a/tools/aapt2/java/ManifestClassGenerator_test.cpp
+++ b/tools/aapt2/java/ManifestClassGenerator_test.cpp
@@ -18,10 +18,116 @@
 
 #include "test/Test.h"
 
+using ::testing::HasSubstr;
+using ::testing::Not;
+
 namespace aapt {
 
-static ::testing::AssertionResult GetManifestClassText(IAaptContext* context,
-                                                       xml::XmlResource* res,
+static ::testing::AssertionResult GetManifestClassText(IAaptContext* context, xml::XmlResource* res,
+                                                       std::string* out_str);
+
+TEST(ManifestClassGeneratorTest, NameIsProperlyGeneratedFromSymbol) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  std::unique_ptr<xml::XmlResource> manifest = test::BuildXmlDom(R"(
+      <manifest xmlns:android="http://schemas.android.com/apk/res/android">
+        <permission android:name="android.permission.ACCESS_INTERNET" />
+        <permission android:name="android.DO_DANGEROUS_THINGS" />
+        <permission android:name="com.test.sample.permission.HUH" />
+        <permission-group android:name="foo.bar.PERMISSION" />
+      </manifest>)");
+
+  std::string actual;
+  ASSERT_TRUE(GetManifestClassText(context.get(), manifest.get(), &actual));
+
+  ASSERT_THAT(actual, HasSubstr("public static final class permission {"));
+  ASSERT_THAT(actual, HasSubstr("public static final class permission_group {"));
+
+  const size_t permission_start_pos = actual.find("public static final class permission {");
+  const size_t permission_group_start_pos =
+      actual.find("public static final class permission_group {");
+
+  //
+  // Make sure these permissions are in the permission class.
+  //
+  const std::string permission_class =
+      actual.substr(permission_start_pos, permission_group_start_pos - permission_start_pos);
+
+  EXPECT_THAT(
+      permission_class,
+      HasSubstr(
+          "public static final String ACCESS_INTERNET=\"android.permission.ACCESS_INTERNET\";"));
+  EXPECT_THAT(
+      permission_class,
+      HasSubstr("public static final String DO_DANGEROUS_THINGS=\"android.DO_DANGEROUS_THINGS\";"));
+  EXPECT_THAT(permission_class,
+              HasSubstr("public static final String HUH=\"com.test.sample.permission.HUH\";"));
+
+  //
+  // Make sure these permissions are in the permission_group class
+  //
+  const std::string permission_group_class = actual.substr(permission_group_start_pos);
+
+  EXPECT_THAT(permission_group_class,
+              HasSubstr("public static final String PERMISSION=\"foo.bar.PERMISSION\";"));
+}
+
+TEST(ManifestClassGeneratorTest, CommentsAndAnnotationsArePresent) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  std::unique_ptr<xml::XmlResource> manifest = test::BuildXmlDom(R"(
+      <manifest xmlns:android="http://schemas.android.com/apk/res/android">
+        <!-- Required to access the internet.
+             Added in API 1. -->
+        <permission android:name="android.permission.ACCESS_INTERNET" />
+        <!-- @deprecated This permission is for playing outside. -->
+        <permission android:name="android.permission.PLAY_OUTSIDE" />
+        <!-- This is a private permission for system only!
+             @hide
+             @SystemApi -->
+        <permission android:name="android.permission.SECRET" />
+      </manifest>)");
+
+  std::string actual;
+  ASSERT_TRUE(GetManifestClassText(context.get(), manifest.get(), &actual));
+
+  const char* expected_access_internet = R"(    /**
+     * Required to access the internet.
+     * Added in API 1.
+     */
+    public static final String ACCESS_INTERNET="android.permission.ACCESS_INTERNET";)";
+  EXPECT_THAT(actual, HasSubstr(expected_access_internet));
+
+  const char* expected_play_outside = R"(    /**
+     * @deprecated This permission is for playing outside.
+     */
+    @Deprecated
+    public static final String PLAY_OUTSIDE="android.permission.PLAY_OUTSIDE";)";
+  EXPECT_THAT(actual, HasSubstr(expected_play_outside));
+
+  const char* expected_secret = R"(    /**
+     * This is a private permission for system only!
+     * @hide
+     */
+    @android.annotation.SystemApi
+    public static final String SECRET="android.permission.SECRET";)";
+  EXPECT_THAT(actual, HasSubstr(expected_secret));
+}
+
+// This is bad but part of public API behaviour so we need to preserve it.
+TEST(ManifestClassGeneratorTest, LastSeenPermissionWithSameLeafNameTakesPrecedence) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  std::unique_ptr<xml::XmlResource> manifest = test::BuildXmlDom(R"(
+      <manifest xmlns:android="http://schemas.android.com/apk/res/android">
+        <permission android:name="android.permission.ACCESS_INTERNET" />
+        <permission android:name="com.android.aapt.test.ACCESS_INTERNET" />
+      </manifest>)");
+
+  std::string actual;
+  ASSERT_TRUE(GetManifestClassText(context.get(), manifest.get(), &actual));
+  EXPECT_THAT(actual, HasSubstr("ACCESS_INTERNET=\"com.android.aapt.test.ACCESS_INTERNET\";"));
+  EXPECT_THAT(actual, Not(HasSubstr("ACCESS_INTERNET=\"android.permission.ACCESS_INTERNET\";")));
+}
+
+static ::testing::AssertionResult GetManifestClassText(IAaptContext* context, xml::XmlResource* res,
                                                        std::string* out_str) {
   std::unique_ptr<ClassDefinition> manifest_class =
       GenerateManifestClass(context->GetDiagnostics(), res);
@@ -30,8 +136,7 @@
   }
 
   std::stringstream out;
-  if (!manifest_class->WriteJavaFile(manifest_class.get(), "android", true,
-                                     &out)) {
+  if (!manifest_class->WriteJavaFile(manifest_class.get(), "android", true, &out)) {
     return ::testing::AssertionFailure() << "failed to write java file";
   }
 
@@ -39,103 +144,4 @@
   return ::testing::AssertionSuccess();
 }
 
-TEST(ManifestClassGeneratorTest, NameIsProperlyGeneratedFromSymbol) {
-  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
-  std::unique_ptr<xml::XmlResource> manifest = test::BuildXmlDom(R"EOF(
-        <manifest xmlns:android="http://schemas.android.com/apk/res/android">
-          <permission android:name="android.permission.ACCESS_INTERNET" />
-          <permission android:name="android.DO_DANGEROUS_THINGS" />
-          <permission android:name="com.test.sample.permission.HUH" />
-          <permission-group android:name="foo.bar.PERMISSION" />
-        </manifest>)EOF");
-
-  std::string actual;
-  ASSERT_TRUE(GetManifestClassText(context.get(), manifest.get(), &actual));
-
-  const size_t permission_class_pos =
-      actual.find("public static final class permission {");
-  const size_t permission_croup_class_pos =
-      actual.find("public static final class permission_group {");
-  ASSERT_NE(std::string::npos, permission_class_pos);
-  ASSERT_NE(std::string::npos, permission_croup_class_pos);
-
-  //
-  // Make sure these permissions are in the permission class.
-  //
-
-  size_t pos = actual.find(
-      "public static final String ACCESS_INTERNET="
-      "\"android.permission.ACCESS_INTERNET\";");
-  EXPECT_GT(pos, permission_class_pos);
-  EXPECT_LT(pos, permission_croup_class_pos);
-
-  pos = actual.find(
-      "public static final String DO_DANGEROUS_THINGS="
-      "\"android.DO_DANGEROUS_THINGS\";");
-  EXPECT_GT(pos, permission_class_pos);
-  EXPECT_LT(pos, permission_croup_class_pos);
-
-  pos = actual.find(
-      "public static final String HUH=\"com.test.sample.permission.HUH\";");
-  EXPECT_GT(pos, permission_class_pos);
-  EXPECT_LT(pos, permission_croup_class_pos);
-
-  //
-  // Make sure these permissions are in the permission_group class
-  //
-
-  pos = actual.find(
-      "public static final String PERMISSION="
-      "\"foo.bar.PERMISSION\";");
-  EXPECT_GT(pos, permission_croup_class_pos);
-  EXPECT_LT(pos, std::string::npos);
-}
-
-TEST(ManifestClassGeneratorTest, CommentsAndAnnotationsArePresent) {
-  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
-  std::unique_ptr<xml::XmlResource> manifest = test::BuildXmlDom(R"EOF(
-        <manifest xmlns:android="http://schemas.android.com/apk/res/android">
-          <!-- Required to access the internet.
-               Added in API 1. -->
-          <permission android:name="android.permission.ACCESS_INTERNET" />
-          <!-- @deprecated This permission is for playing outside. -->
-          <permission android:name="android.permission.PLAY_OUTSIDE" />
-          <!-- This is a private permission for system only!
-               @hide
-               @SystemApi -->
-          <permission android:name="android.permission.SECRET" />
-        </manifest>)EOF");
-
-  std::string actual;
-  ASSERT_TRUE(GetManifestClassText(context.get(), manifest.get(), &actual));
-
-  const char* expected_access_internet =
-      R"EOF(    /**
-     * Required to access the internet.
-     * Added in API 1.
-     */
-    public static final String ACCESS_INTERNET="android.permission.ACCESS_INTERNET";)EOF";
-
-  EXPECT_NE(std::string::npos, actual.find(expected_access_internet));
-
-  const char* expected_play_outside =
-      R"EOF(    /**
-     * @deprecated This permission is for playing outside.
-     */
-    @Deprecated
-    public static final String PLAY_OUTSIDE="android.permission.PLAY_OUTSIDE";)EOF";
-
-  EXPECT_NE(std::string::npos, actual.find(expected_play_outside));
-
-  const char* expected_secret =
-      R"EOF(    /**
-     * This is a private permission for system only!
-     * @hide
-     */
-    @android.annotation.SystemApi
-    public static final String SECRET="android.permission.SECRET";)EOF";
-
-  EXPECT_NE(std::string::npos, actual.find(expected_secret));
-}
-
 }  // namespace aapt
diff --git a/tools/aapt2/java/ProguardRules.cpp b/tools/aapt2/java/ProguardRules.cpp
index 624a559..10c4610 100644
--- a/tools/aapt2/java/ProguardRules.cpp
+++ b/tools/aapt2/java/ProguardRules.cpp
@@ -29,18 +29,12 @@
 
 class BaseVisitor : public xml::Visitor {
  public:
-  BaseVisitor(const Source& source, KeepSet* keep_set)
-      : source_(source), keep_set_(keep_set) {}
+  using xml::Visitor::Visit;
 
-  virtual void Visit(xml::Text*) override{};
-
-  virtual void Visit(xml::Namespace* node) override {
-    for (const auto& child : node->children) {
-      child->Accept(this);
-    }
+  BaseVisitor(const Source& source, KeepSet* keep_set) : source_(source), keep_set_(keep_set) {
   }
 
-  virtual void Visit(xml::Element* node) override {
+  void Visit(xml::Element* node) override {
     if (!node->namespace_uri.empty()) {
       Maybe<xml::ExtractedPackage> maybe_package =
           xml::ExtractPackageFromNamespace(node->namespace_uri);
@@ -78,14 +72,18 @@
 
 class LayoutVisitor : public BaseVisitor {
  public:
-  LayoutVisitor(const Source& source, KeepSet* keep_set)
-      : BaseVisitor(source, keep_set) {}
+  LayoutVisitor(const Source& source, KeepSet* keep_set) : BaseVisitor(source, keep_set) {
+  }
 
-  virtual void Visit(xml::Element* node) override {
+  void Visit(xml::Element* node) override {
     bool check_class = false;
     bool check_name = false;
     if (node->namespace_uri.empty()) {
-      check_class = node->name == "view" || node->name == "fragment";
+      if (node->name == "view") {
+        check_class = true;
+      } else if (node->name == "fragment") {
+        check_class = check_name = true;
+      }
     } else if (node->namespace_uri == xml::kSchemaAndroid) {
       check_name = node->name == "fragment";
     }
@@ -110,12 +108,38 @@
   DISALLOW_COPY_AND_ASSIGN(LayoutVisitor);
 };
 
+class MenuVisitor : public BaseVisitor {
+ public:
+  MenuVisitor(const Source& source, KeepSet* keep_set) : BaseVisitor(source, keep_set) {
+  }
+
+  void Visit(xml::Element* node) override {
+    if (node->namespace_uri.empty() && node->name == "item") {
+      for (const auto& attr : node->attributes) {
+        if (attr.namespace_uri == xml::kSchemaAndroid) {
+          if ((attr.name == "actionViewClass" || attr.name == "actionProviderClass") &&
+              util::IsJavaClassName(attr.value)) {
+            AddClass(node->line_number, attr.value);
+          } else if (attr.name == "onClick") {
+            AddMethod(node->line_number, attr.value);
+          }
+        }
+      }
+    }
+
+    BaseVisitor::Visit(node);
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MenuVisitor);
+};
+
 class XmlResourceVisitor : public BaseVisitor {
  public:
-  XmlResourceVisitor(const Source& source, KeepSet* keep_set)
-      : BaseVisitor(source, keep_set) {}
+  XmlResourceVisitor(const Source& source, KeepSet* keep_set) : BaseVisitor(source, keep_set) {
+  }
 
-  virtual void Visit(xml::Element* node) override {
+  void Visit(xml::Element* node) override {
     bool check_fragment = false;
     if (node->namespace_uri.empty()) {
       check_fragment =
@@ -139,13 +163,12 @@
 
 class TransitionVisitor : public BaseVisitor {
  public:
-  TransitionVisitor(const Source& source, KeepSet* keep_set)
-      : BaseVisitor(source, keep_set) {}
+  TransitionVisitor(const Source& source, KeepSet* keep_set) : BaseVisitor(source, keep_set) {
+  }
 
-  virtual void Visit(xml::Element* node) override {
+  void Visit(xml::Element* node) override {
     bool check_class =
-        node->namespace_uri.empty() &&
-        (node->name == "transition" || node->name == "pathMotion");
+        node->namespace_uri.empty() && (node->name == "transition" || node->name == "pathMotion");
     if (check_class) {
       xml::Attribute* attr = node->FindAttribute({}, "class");
       if (attr && util::IsJavaClassName(attr->value)) {
@@ -165,7 +188,7 @@
   ManifestVisitor(const Source& source, KeepSet* keep_set, bool main_dex_only)
       : BaseVisitor(source, keep_set), main_dex_only_(main_dex_only) {}
 
-  virtual void Visit(xml::Element* node) override {
+  void Visit(xml::Element* node) override {
     if (node->namespace_uri.empty()) {
       bool get_name = false;
       if (node->name == "manifest") {
@@ -175,18 +198,15 @@
         }
       } else if (node->name == "application") {
         get_name = true;
-        xml::Attribute* attr =
-            node->FindAttribute(xml::kSchemaAndroid, "backupAgent");
+        xml::Attribute* attr = node->FindAttribute(xml::kSchemaAndroid, "backupAgent");
         if (attr) {
-          Maybe<std::string> result =
-              util::GetFullyQualifiedClassName(package_, attr->value);
+          Maybe<std::string> result = util::GetFullyQualifiedClassName(package_, attr->value);
           if (result) {
             AddClass(node->line_number, result.value());
           }
         }
         if (main_dex_only_) {
-          xml::Attribute* default_process =
-              node->FindAttribute(xml::kSchemaAndroid, "process");
+          xml::Attribute* default_process = node->FindAttribute(xml::kSchemaAndroid, "process");
           if (default_process) {
             default_process_ = default_process->value;
           }
@@ -196,8 +216,7 @@
         get_name = true;
 
         if (main_dex_only_) {
-          xml::Attribute* component_process =
-              node->FindAttribute(xml::kSchemaAndroid, "process");
+          xml::Attribute* component_process = node->FindAttribute(xml::kSchemaAndroid, "process");
 
           const std::string& process =
               component_process ? component_process->value : default_process_;
@@ -212,8 +231,7 @@
         get_name = attr != nullptr;
 
         if (get_name) {
-          Maybe<std::string> result =
-              util::GetFullyQualifiedClassName(package_, attr->value);
+          Maybe<std::string> result = util::GetFullyQualifiedClassName(package_, attr->value);
           if (result) {
             AddClass(node->line_number, result.value());
           }
@@ -231,8 +249,7 @@
   std::string default_process_;
 };
 
-bool CollectProguardRulesForManifest(const Source& source,
-                                     xml::XmlResource* res, KeepSet* keep_set,
+bool CollectProguardRulesForManifest(const Source& source, xml::XmlResource* res, KeepSet* keep_set,
                                      bool main_dex_only) {
   ManifestVisitor visitor(source, keep_set, main_dex_only);
   if (res->root) {
@@ -242,8 +259,7 @@
   return false;
 }
 
-bool CollectProguardRules(const Source& source, xml::XmlResource* res,
-                          KeepSet* keep_set) {
+bool CollectProguardRules(const Source& source, xml::XmlResource* res, KeepSet* keep_set) {
   if (!res->root) {
     return false;
   }
@@ -267,6 +283,12 @@
       break;
     }
 
+    case ResourceType::kMenu: {
+      MenuVisitor visitor(source, keep_set);
+      res->root->Accept(&visitor);
+      break;
+    }
+
     default:
       break;
   }
@@ -285,8 +307,7 @@
     for (const Source& source : entry.second) {
       *out << "# Referenced at " << source << "\n";
     }
-    *out << "-keepclassmembers class * { *** " << entry.first << "(...); }\n"
-         << std::endl;
+    *out << "-keepclassmembers class * { *** " << entry.first << "(...); }\n" << std::endl;
   }
   return true;
 }
diff --git a/tools/aapt2/java/ProguardRules_test.cpp b/tools/aapt2/java/ProguardRules_test.cpp
new file mode 100644
index 0000000..900b073
--- /dev/null
+++ b/tools/aapt2/java/ProguardRules_test.cpp
@@ -0,0 +1,119 @@
+/*
+ * 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.
+ */
+
+#include "java/ProguardRules.h"
+
+#include "test/Test.h"
+
+using ::testing::HasSubstr;
+using ::testing::Not;
+
+namespace aapt {
+
+TEST(ProguardRulesTest, FragmentNameRuleIsEmitted) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  std::unique_ptr<xml::XmlResource> layout = test::BuildXmlDom(R"(
+      <fragment xmlns:android="http://schemas.android.com/apk/res/android"
+          android:name="com.foo.Bar"/>)");
+  layout->file.name = test::ParseNameOrDie("layout/foo");
+
+  proguard::KeepSet set;
+  ASSERT_TRUE(proguard::CollectProguardRules({}, layout.get(), &set));
+
+  std::stringstream out;
+  ASSERT_TRUE(proguard::WriteKeepSet(&out, set));
+
+  std::string actual = out.str();
+  EXPECT_THAT(actual, HasSubstr("com.foo.Bar"));
+}
+
+TEST(ProguardRulesTest, FragmentClassRuleIsEmitted) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  std::unique_ptr<xml::XmlResource> layout =
+      test::BuildXmlDom(R"(<fragment class="com.foo.Bar"/>)");
+  layout->file.name = test::ParseNameOrDie("layout/foo");
+
+  proguard::KeepSet set;
+  ASSERT_TRUE(proguard::CollectProguardRules({}, layout.get(), &set));
+
+  std::stringstream out;
+  ASSERT_TRUE(proguard::WriteKeepSet(&out, set));
+
+  std::string actual = out.str();
+  EXPECT_THAT(actual, HasSubstr("com.foo.Bar"));
+}
+
+TEST(ProguardRulesTest, FragmentNameAndClassRulesAreEmitted) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  std::unique_ptr<xml::XmlResource> layout = test::BuildXmlDom(R"(
+      <fragment xmlns:android="http://schemas.android.com/apk/res/android"
+          android:name="com.foo.Baz"
+          class="com.foo.Bar"/>)");
+  layout->file.name = test::ParseNameOrDie("layout/foo");
+
+  proguard::KeepSet set;
+  ASSERT_TRUE(proguard::CollectProguardRules({}, layout.get(), &set));
+
+  std::stringstream out;
+  ASSERT_TRUE(proguard::WriteKeepSet(&out, set));
+
+  std::string actual = out.str();
+  EXPECT_THAT(actual, HasSubstr("com.foo.Bar"));
+  EXPECT_THAT(actual, HasSubstr("com.foo.Baz"));
+}
+
+TEST(ProguardRulesTest, ViewOnClickRuleIsEmitted) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  std::unique_ptr<xml::XmlResource> layout = test::BuildXmlDom(R"(
+      <View xmlns:android="http://schemas.android.com/apk/res/android"
+          android:onClick="bar_method" />)");
+  layout->file.name = test::ParseNameOrDie("layout/foo");
+
+  proguard::KeepSet set;
+  ASSERT_TRUE(proguard::CollectProguardRules({}, layout.get(), &set));
+
+  std::stringstream out;
+  ASSERT_TRUE(proguard::WriteKeepSet(&out, set));
+
+  std::string actual = out.str();
+  EXPECT_THAT(actual, HasSubstr("bar_method"));
+}
+
+TEST(ProguardRulesTest, MenuRulesAreEmitted) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  std::unique_ptr<xml::XmlResource> menu = test::BuildXmlDom(R"(
+      <menu xmlns:android="http://schemas.android.com/apk/res/android">
+        <item android:onClick="on_click"
+            android:actionViewClass="com.foo.Bar"
+            android:actionProviderClass="com.foo.Baz"
+            android:name="com.foo.Bat" />
+      </menu>)");
+  menu->file.name = test::ParseNameOrDie("menu/foo");
+
+  proguard::KeepSet set;
+  ASSERT_TRUE(proguard::CollectProguardRules({}, menu.get(), &set));
+
+  std::stringstream out;
+  ASSERT_TRUE(proguard::WriteKeepSet(&out, set));
+
+  std::string actual = out.str();
+  EXPECT_THAT(actual, HasSubstr("on_click"));
+  EXPECT_THAT(actual, HasSubstr("com.foo.Bar"));
+  EXPECT_THAT(actual, HasSubstr("com.foo.Baz"));
+  EXPECT_THAT(actual, Not(HasSubstr("com.foo.Bat")));
+}
+
+}  // namespace aapt
diff --git a/tools/aapt2/link/AutoVersioner_test.cpp b/tools/aapt2/link/AutoVersioner_test.cpp
index 755af0a..49639f8 100644
--- a/tools/aapt2/link/AutoVersioner_test.cpp
+++ b/tools/aapt2/link/AutoVersioner_test.cpp
@@ -19,43 +19,34 @@
 #include "ConfigDescription.h"
 #include "test/Test.h"
 
+using ::testing::NotNull;
+
 namespace aapt {
 
 TEST(AutoVersionerTest, GenerateVersionedResources) {
   const ConfigDescription land_config = test::ParseConfigOrDie("land");
-  const ConfigDescription sw600dp_land_config =
-      test::ParseConfigOrDie("sw600dp-land");
+  const ConfigDescription sw600dp_land_config = test::ParseConfigOrDie("sw600dp-land");
 
   ResourceEntry entry("foo");
-  entry.values.push_back(util::make_unique<ResourceConfigValue>(
-      ConfigDescription::DefaultConfig(), ""));
-  entry.values.push_back(
-      util::make_unique<ResourceConfigValue>(land_config, ""));
-  entry.values.push_back(
-      util::make_unique<ResourceConfigValue>(sw600dp_land_config, ""));
+  entry.values.push_back(util::make_unique<ResourceConfigValue>(ConfigDescription::DefaultConfig(), ""));
+  entry.values.push_back(util::make_unique<ResourceConfigValue>(land_config, ""));
+  entry.values.push_back(util::make_unique<ResourceConfigValue>(sw600dp_land_config, ""));
 
-  EXPECT_TRUE(ShouldGenerateVersionedResource(
-      &entry, ConfigDescription::DefaultConfig(), 17));
+  EXPECT_TRUE(ShouldGenerateVersionedResource(&entry, ConfigDescription::DefaultConfig(), 17));
   EXPECT_TRUE(ShouldGenerateVersionedResource(&entry, land_config, 17));
 }
 
 TEST(AutoVersionerTest, GenerateVersionedResourceWhenHigherVersionExists) {
-  const ConfigDescription sw600dp_v13_config =
-      test::ParseConfigOrDie("sw600dp-v13");
+  const ConfigDescription sw600dp_v13_config = test::ParseConfigOrDie("sw600dp-v13");
   const ConfigDescription v21_config = test::ParseConfigOrDie("v21");
 
   ResourceEntry entry("foo");
-  entry.values.push_back(util::make_unique<ResourceConfigValue>(
-      ConfigDescription::DefaultConfig(), ""));
-  entry.values.push_back(
-      util::make_unique<ResourceConfigValue>(sw600dp_v13_config, ""));
-  entry.values.push_back(
-      util::make_unique<ResourceConfigValue>(v21_config, ""));
+  entry.values.push_back(util::make_unique<ResourceConfigValue>(ConfigDescription::DefaultConfig(), ""));
+  entry.values.push_back(util::make_unique<ResourceConfigValue>(sw600dp_v13_config, ""));
+  entry.values.push_back(util::make_unique<ResourceConfigValue>(v21_config, ""));
 
-  EXPECT_TRUE(ShouldGenerateVersionedResource(
-      &entry, ConfigDescription::DefaultConfig(), 17));
-  EXPECT_FALSE(ShouldGenerateVersionedResource(
-      &entry, ConfigDescription::DefaultConfig(), 22));
+  EXPECT_TRUE(ShouldGenerateVersionedResource(&entry, ConfigDescription::DefaultConfig(), 17));
+  EXPECT_FALSE(ShouldGenerateVersionedResource(&entry, ConfigDescription::DefaultConfig(), 22));
 }
 
 TEST(AutoVersionerTest, VersionStylesForTable) {
@@ -92,46 +83,28 @@
   AutoVersioner versioner;
   ASSERT_TRUE(versioner.Consume(context.get(), table.get()));
 
-  Style* style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo",
-                                                test::ParseConfigOrDie("v4"));
-  ASSERT_NE(style, nullptr);
+  Style* style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo", test::ParseConfigOrDie("v4"));
+  ASSERT_THAT(style, NotNull());
   ASSERT_EQ(style->entries.size(), 1u);
-  AAPT_ASSERT_TRUE(style->entries.front().key.name);
-  EXPECT_EQ(style->entries.front().key.name.value(),
-            test::ParseNameOrDie("android:attr/onClick"));
+  EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/onClick")), style->entries.front().key.name);
 
-  style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo",
-                                         test::ParseConfigOrDie("v13"));
-  ASSERT_NE(style, nullptr);
+  style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo", test::ParseConfigOrDie("v13"));
+  ASSERT_THAT(style, NotNull());
   ASSERT_EQ(style->entries.size(), 2u);
-  AAPT_ASSERT_TRUE(style->entries[0].key.name);
-  EXPECT_EQ(style->entries[0].key.name.value(),
-            test::ParseNameOrDie("android:attr/onClick"));
-  AAPT_ASSERT_TRUE(style->entries[1].key.name);
-  EXPECT_EQ(style->entries[1].key.name.value(),
-            test::ParseNameOrDie("android:attr/requiresSmallestWidthDp"));
+  EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/onClick")),style->entries[0].key.name);
+  EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/requiresSmallestWidthDp")), style->entries[1].key.name);
 
-  style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo",
-                                         test::ParseConfigOrDie("v17"));
-  ASSERT_NE(style, nullptr);
+  style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo", test::ParseConfigOrDie("v17"));
+  ASSERT_THAT(style, NotNull());
   ASSERT_EQ(style->entries.size(), 3u);
-  AAPT_ASSERT_TRUE(style->entries[0].key.name);
-  EXPECT_EQ(style->entries[0].key.name.value(),
-            test::ParseNameOrDie("android:attr/onClick"));
-  AAPT_ASSERT_TRUE(style->entries[1].key.name);
-  EXPECT_EQ(style->entries[1].key.name.value(),
-            test::ParseNameOrDie("android:attr/requiresSmallestWidthDp"));
-  AAPT_ASSERT_TRUE(style->entries[2].key.name);
-  EXPECT_EQ(style->entries[2].key.name.value(),
-            test::ParseNameOrDie("android:attr/paddingStart"));
+  EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/onClick")), style->entries[0].key.name);
+  EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/requiresSmallestWidthDp")), style->entries[1].key.name);
+  EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/paddingStart")), style->entries[2].key.name);
 
-  style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo",
-                                         test::ParseConfigOrDie("v21"));
-  ASSERT_NE(style, nullptr);
-  ASSERT_EQ(style->entries.size(), 1u);
-  AAPT_ASSERT_TRUE(style->entries.front().key.name);
-  EXPECT_EQ(style->entries.front().key.name.value(),
-            test::ParseNameOrDie("android:attr/paddingEnd"));
+  style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo", test::ParseConfigOrDie("v21"));
+  ASSERT_THAT(style, NotNull());
+  ASSERT_EQ(1u, style->entries.size());
+  EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/paddingEnd")), style->entries.front().key.name);
 }
 
 }  // namespace aapt
diff --git a/tools/aapt2/link/ManifestFixer.cpp b/tools/aapt2/link/ManifestFixer.cpp
index 99fd95b..2a4af78 100644
--- a/tools/aapt2/link/ManifestFixer.cpp
+++ b/tools/aapt2/link/ManifestFixer.cpp
@@ -127,9 +127,9 @@
     diag->Error(DiagMessage(el->line_number)
                 << "attribute 'package' in <manifest> tag must not be a reference");
     return false;
-  } else if (!util::IsJavaPackageName(attr->value)) {
+  } else if (!util::IsAndroidPackageName(attr->value)) {
     diag->Error(DiagMessage(el->line_number)
-                << "attribute 'package' in <manifest> tag is not a valid Java package name: '"
+                << "attribute 'package' in <manifest> tag is not a valid Android package name: '"
                 << attr->value << "'");
     return false;
   }
@@ -309,6 +309,9 @@
   manifest_action["meta-data"] = meta_data_action;
   manifest_action["uses-split"].Action(RequiredNameIsJavaPackage);
 
+  manifest_action["key-sets"]["key-set"]["public-key"];
+  manifest_action["key-sets"]["upgrade-key-set"];
+
   // Application actions.
   xml::XmlNodeAction& application_action = manifest_action["application"];
   application_action.Action(OptionalNameIsJavaClassName);
diff --git a/tools/aapt2/link/ManifestFixer_test.cpp b/tools/aapt2/link/ManifestFixer_test.cpp
index 064d365..da7f410 100644
--- a/tools/aapt2/link/ManifestFixer_test.cpp
+++ b/tools/aapt2/link/ManifestFixer_test.cpp
@@ -18,7 +18,8 @@
 
 #include "test/Test.h"
 
-using android::StringPiece;
+using ::android::StringPiece;
+using ::testing::NotNull;
 
 namespace aapt {
 
@@ -121,7 +122,7 @@
   xml::Element* el;
   xml::Attribute* attr;
 
-  el = xml::FindRootElement(doc.get());
+  el = doc->root.get();
   ASSERT_NE(nullptr, el);
   el = el->FindChild({}, "uses-sdk");
   ASSERT_NE(nullptr, el);
@@ -140,7 +141,7 @@
                           options);
   ASSERT_NE(nullptr, doc);
 
-  el = xml::FindRootElement(doc.get());
+  el = doc->root.get();
   ASSERT_NE(nullptr, el);
   el = el->FindChild({}, "uses-sdk");
   ASSERT_NE(nullptr, el);
@@ -159,7 +160,7 @@
                           options);
   ASSERT_NE(nullptr, doc);
 
-  el = xml::FindRootElement(doc.get());
+  el = doc->root.get();
   ASSERT_NE(nullptr, el);
   el = el->FindChild({}, "uses-sdk");
   ASSERT_NE(nullptr, el);
@@ -176,7 +177,7 @@
                           options);
   ASSERT_NE(nullptr, doc);
 
-  el = xml::FindRootElement(doc.get());
+  el = doc->root.get();
   ASSERT_NE(nullptr, el);
   el = el->FindChild({}, "uses-sdk");
   ASSERT_NE(nullptr, el);
@@ -198,7 +199,7 @@
                                                             options);
   ASSERT_NE(nullptr, doc);
 
-  xml::Element* manifest_el = xml::FindRootElement(doc.get());
+  xml::Element* manifest_el = doc->root.get();
   ASSERT_NE(nullptr, manifest_el);
   ASSERT_EQ("manifest", manifest_el->name);
 
@@ -247,7 +248,7 @@
                                                             options);
   ASSERT_NE(nullptr, doc);
 
-  xml::Element* manifestEl = xml::FindRootElement(doc.get());
+  xml::Element* manifestEl = doc->root.get();
   ASSERT_NE(nullptr, manifestEl);
 
   xml::Attribute* attr = nullptr;
@@ -296,7 +297,7 @@
                                                             options);
   ASSERT_NE(nullptr, doc);
 
-  xml::Element* manifest_el = xml::FindRootElement(doc.get());
+  xml::Element* manifest_el = doc->root.get();
   ASSERT_NE(nullptr, manifest_el);
 
   xml::Element* instrumentation_el =
@@ -320,7 +321,7 @@
                                                             options);
   ASSERT_NE(nullptr, doc);
 
-  xml::Element* manifest_el = xml::FindRootElement(doc.get());
+  xml::Element* manifest_el = doc->root.get();
   ASSERT_NE(nullptr, manifest_el);
 
   xml::Attribute* attr =
@@ -343,7 +344,7 @@
       Verify("<manifest package=\"android\" coreApp=\"true\" />");
   ASSERT_NE(nullptr, doc);
 
-  xml::Element* el = xml::FindRootElement(doc.get());
+  xml::Element* el = doc->root.get();
   ASSERT_NE(nullptr, el);
 
   EXPECT_EQ("manifest", el->name);
@@ -420,4 +421,22 @@
   EXPECT_EQ(nullptr, Verify(input));
 }
 
+TEST_F(ManifestFixerTest, SupportKeySets) {
+  std::string input = R"(
+      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="android">
+        <key-sets>
+          <key-set android:name="old-set">
+            <public-key android:name="old-key" android:value="some+old+key" />
+          </key-set>
+          <key-set android:name="new-set">
+            <public-key android:name="new-key" android:value="some+new+key" />
+          </key-set>
+          <upgrade-key-set android:name="old-set" />
+          <upgrade-key-set android:name="new-set" />
+        </key-sets>
+      </manifest>)";
+  EXPECT_THAT(Verify(input), NotNull());
+}
+
 }  // namespace aapt
diff --git a/tools/aapt2/link/ReferenceLinker.cpp b/tools/aapt2/link/ReferenceLinker.cpp
index a8e510c..414e56e 100644
--- a/tools/aapt2/link/ReferenceLinker.cpp
+++ b/tools/aapt2/link/ReferenceLinker.cpp
@@ -109,18 +109,15 @@
         entry.value->Accept(this);
 
         // Now verify that the type of this item is compatible with the
-        // attribute it
-        // is defined for. We pass `nullptr` as the DiagMessage so that this
-        // check is
-        // fast and we avoid creating a DiagMessage when the match is
-        // successful.
-        if (!symbol->attribute->Matches(entry.value.get(), nullptr)) {
+        // attribute it is defined for. We pass `nullptr` as the DiagMessage so that this
+        // check is fast and we avoid creating a DiagMessage when the match is successful.
+        if (!symbol->attribute->Matches(*entry.value, nullptr)) {
           // The actual type of this item is incompatible with the attribute.
           DiagMessage msg(entry.key.GetSource());
 
           // Call the matches method again, this time with a DiagMessage so we
           // fill in the actual error message.
-          symbol->attribute->Matches(entry.value.get(), &msg);
+          symbol->attribute->Matches(*entry.value, &msg);
           context_->GetDiagnostics()->Error(msg);
           error_ = true;
         }
diff --git a/tools/aapt2/link/ReferenceLinker_test.cpp b/tools/aapt2/link/ReferenceLinker_test.cpp
index d8e33a4..72a9168 100644
--- a/tools/aapt2/link/ReferenceLinker_test.cpp
+++ b/tools/aapt2/link/ReferenceLinker_test.cpp
@@ -19,6 +19,7 @@
 #include "test/Test.h"
 
 using android::ResTable_map;
+using ::testing::NotNull;
 
 namespace aapt {
 
@@ -54,18 +55,18 @@
   ASSERT_TRUE(linker.Consume(context.get(), table.get()));
 
   Reference* ref = test::GetValue<Reference>(table.get(), "com.app.test:string/foo");
-  ASSERT_NE(nullptr, ref);
-  AAPT_ASSERT_TRUE(ref->id);
+  ASSERT_THAT(ref, NotNull());
+  ASSERT_TRUE(ref->id);
   EXPECT_EQ(ResourceId(0x7f020001), ref->id.value());
 
   ref = test::GetValue<Reference>(table.get(), "com.app.test:string/bar");
-  ASSERT_NE(nullptr, ref);
-  AAPT_ASSERT_TRUE(ref->id);
+  ASSERT_THAT(ref, NotNull());
+  ASSERT_TRUE(ref->id);
   EXPECT_EQ(ResourceId(0x7f020002), ref->id.value());
 
   ref = test::GetValue<Reference>(table.get(), "com.app.test:string/baz");
-  ASSERT_NE(nullptr, ref);
-  AAPT_ASSERT_TRUE(ref->id);
+  ASSERT_THAT(ref, NotNull());
+  ASSERT_TRUE(ref->id);
   EXPECT_EQ(ResourceId(0x01040034), ref->id.value());
 }
 
@@ -84,10 +85,9 @@
 
   {
     // We need to fill in the value for the attribute android:attr/bar after we
-    // build the
-    // table, because we need access to the string pool.
+    // build the table, because we need access to the string pool.
     Style* style = test::GetValue<Style>(table.get(), "com.app.test:style/Theme");
-    ASSERT_NE(nullptr, style);
+    ASSERT_THAT(style, NotNull());
     style->entries.back().value =
         util::make_unique<RawString>(table->string_pool.MakeRef("one|two"));
   }
@@ -118,20 +118,20 @@
   ASSERT_TRUE(linker.Consume(context.get(), table.get()));
 
   Style* style = test::GetValue<Style>(table.get(), "com.app.test:style/Theme");
-  ASSERT_NE(nullptr, style);
-  AAPT_ASSERT_TRUE(style->parent);
-  AAPT_ASSERT_TRUE(style->parent.value().id);
+  ASSERT_THAT(style, NotNull());
+  ASSERT_TRUE(style->parent);
+  ASSERT_TRUE(style->parent.value().id);
   EXPECT_EQ(ResourceId(0x01060000), style->parent.value().id.value());
 
   ASSERT_EQ(2u, style->entries.size());
 
-  AAPT_ASSERT_TRUE(style->entries[0].key.id);
+  ASSERT_TRUE(style->entries[0].key.id);
   EXPECT_EQ(ResourceId(0x01010001), style->entries[0].key.id.value());
-  ASSERT_NE(nullptr, ValueCast<BinaryPrimitive>(style->entries[0].value.get()));
+  ASSERT_THAT(ValueCast<BinaryPrimitive>(style->entries[0].value.get()), NotNull());
 
-  AAPT_ASSERT_TRUE(style->entries[1].key.id);
+  ASSERT_TRUE(style->entries[1].key.id);
   EXPECT_EQ(ResourceId(0x01010002), style->entries[1].key.id.value());
-  ASSERT_NE(nullptr, ValueCast<BinaryPrimitive>(style->entries[1].value.get()));
+  ASSERT_THAT(ValueCast<BinaryPrimitive>(style->entries[1].value.get()), NotNull());
 }
 
 TEST(ReferenceLinkerTest, LinkMangledReferencesAndAttributes) {
@@ -165,9 +165,9 @@
   ASSERT_TRUE(linker.Consume(context.get(), table.get()));
 
   Style* style = test::GetValue<Style>(table.get(), "com.app.test:style/Theme");
-  ASSERT_NE(nullptr, style);
+  ASSERT_THAT(style, NotNull());
   ASSERT_EQ(1u, style->entries.size());
-  AAPT_ASSERT_TRUE(style->entries.front().key.id);
+  ASSERT_TRUE(style->entries.front().key.id);
   EXPECT_EQ(ResourceId(0x7f010000), style->entries.front().key.id.value());
 }
 
@@ -266,7 +266,7 @@
   const CallSite call_site{ResourceNameRef("com.app.test", ResourceType::kString, "foo")};
   const SymbolTable::Symbol* symbol = ReferenceLinker::ResolveSymbolCheckVisibility(
       *test::BuildReference("com.app.test:string/foo"), call_site, &table, &error);
-  ASSERT_NE(nullptr, symbol);
+  ASSERT_THAT(symbol, NotNull());
   EXPECT_TRUE(error.empty());
 }
 
@@ -283,12 +283,12 @@
   std::string error;
   const CallSite call_site{ResourceNameRef("com.app.ext", ResourceType::kLayout, "foo")};
 
-  AAPT_EXPECT_FALSE(ReferenceLinker::CompileXmlAttribute(
+  EXPECT_FALSE(ReferenceLinker::CompileXmlAttribute(
       *test::BuildReference("com.app.test:attr/foo"), call_site, &table, &error));
   EXPECT_FALSE(error.empty());
 
   error = "";
-  AAPT_ASSERT_TRUE(ReferenceLinker::CompileXmlAttribute(
+  ASSERT_TRUE(ReferenceLinker::CompileXmlAttribute(
       *test::BuildReference("com.app.test:attr/public_foo"), call_site, &table, &error));
   EXPECT_TRUE(error.empty());
 }
diff --git a/tools/aapt2/link/XmlCompatVersioner.cpp b/tools/aapt2/link/XmlCompatVersioner.cpp
index f1f4e3b..20ebdc6 100644
--- a/tools/aapt2/link/XmlCompatVersioner.cpp
+++ b/tools/aapt2/link/XmlCompatVersioner.cpp
@@ -107,7 +107,7 @@
   std::unique_ptr<xml::XmlResource> cloned_doc = util::make_unique<xml::XmlResource>(doc->file);
   cloned_doc->file.config.sdkVersion = static_cast<uint16_t>(target_api);
 
-  cloned_doc->root = doc->root->Clone([&](const xml::Element& el, xml::Element* out_el) {
+  cloned_doc->root = doc->root->CloneElement([&](const xml::Element& el, xml::Element* out_el) {
     for (const auto& attr : el.attributes) {
       if (!attr.compiled_attribute) {
         // Just copy if this isn't a compiled attribute.
diff --git a/tools/aapt2/link/XmlCompatVersioner_test.cpp b/tools/aapt2/link/XmlCompatVersioner_test.cpp
index ce6605c..29ad25f 100644
--- a/tools/aapt2/link/XmlCompatVersioner_test.cpp
+++ b/tools/aapt2/link/XmlCompatVersioner_test.cpp
@@ -19,6 +19,12 @@
 #include "Linkers.h"
 #include "test/Test.h"
 
+using ::aapt::test::ValueEq;
+using ::testing::Eq;
+using ::testing::IsNull;
+using ::testing::NotNull;
+using ::testing::SizeIs;
+
 namespace aapt {
 
 constexpr auto TYPE_DIMENSION = android::ResTable_map::TYPE_DIMENSION;
@@ -68,12 +74,12 @@
 };
 
 TEST_F(XmlCompatVersionerTest, NoRulesOnlyStripsAndCopies) {
-  auto doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF(
+  auto doc = test::BuildXmlDomForPackageName(context_.get(), R"(
       <View xmlns:android="http://schemas.android.com/apk/res/android"
           xmlns:app="http://schemas.android.com/apk/res-auto"
           android:paddingHorizontal="24dp"
           app:foo="16dp"
-          foo="bar"/>)EOF");
+          foo="bar"/>)");
 
   XmlReferenceLinker linker;
   ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
@@ -84,35 +90,35 @@
   XmlCompatVersioner versioner(&rules);
   std::vector<std::unique_ptr<xml::XmlResource>> versioned_docs =
       versioner.Process(context_.get(), doc.get(), api_range);
-  ASSERT_EQ(2u, versioned_docs.size());
+  ASSERT_THAT(versioned_docs, SizeIs(2u));
 
   xml::Element* el;
 
   // Source XML file's sdkVersion == 0, so the first one must also have the same sdkVersion.
-  EXPECT_EQ(static_cast<uint16_t>(0), versioned_docs[0]->file.config.sdkVersion);
-  el = xml::FindRootElement(versioned_docs[0].get());
-  ASSERT_NE(nullptr, el);
-  EXPECT_EQ(2u, el->attributes.size());
-  EXPECT_EQ(nullptr, el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"));
-  EXPECT_NE(nullptr, el->FindAttribute(xml::kSchemaAuto, "foo"));
-  EXPECT_NE(nullptr, el->FindAttribute({}, "foo"));
+  EXPECT_THAT(versioned_docs[0]->file.config.sdkVersion, Eq(0u));
+  el = versioned_docs[0]->root.get();
+  ASSERT_THAT(el, NotNull());
+  EXPECT_THAT(el->attributes, SizeIs(2u));
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"), IsNull());
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAuto, "foo"), NotNull());
+  EXPECT_THAT(el->FindAttribute({}, "foo"), NotNull());
 
-  EXPECT_EQ(static_cast<uint16_t>(SDK_LOLLIPOP_MR1), versioned_docs[1]->file.config.sdkVersion);
-  el = xml::FindRootElement(versioned_docs[1].get());
-  ASSERT_NE(nullptr, el);
-  EXPECT_EQ(3u, el->attributes.size());
-  EXPECT_NE(nullptr, el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"));
-  EXPECT_NE(nullptr, el->FindAttribute(xml::kSchemaAuto, "foo"));
-  EXPECT_NE(nullptr, el->FindAttribute({}, "foo"));
+  EXPECT_THAT(versioned_docs[1]->file.config.sdkVersion, Eq(SDK_LOLLIPOP_MR1));
+  el = versioned_docs[1]->root.get();
+  ASSERT_THAT(el, NotNull());
+  EXPECT_THAT(el->attributes, SizeIs(3u));
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"), NotNull());
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAuto, "foo"), NotNull());
+  EXPECT_THAT(el->FindAttribute({}, "foo"), NotNull());
 }
 
 TEST_F(XmlCompatVersionerTest, SingleRule) {
-  auto doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF(
+  auto doc = test::BuildXmlDomForPackageName(context_.get(), R"(
       <View xmlns:android="http://schemas.android.com/apk/res/android"
           xmlns:app="http://schemas.android.com/apk/res-auto"
           android:paddingHorizontal="24dp"
           app:foo="16dp"
-          foo="bar"/>)EOF");
+          foo="bar"/>)");
 
   XmlReferenceLinker linker;
   ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
@@ -129,51 +135,51 @@
   XmlCompatVersioner versioner(&rules);
   std::vector<std::unique_ptr<xml::XmlResource>> versioned_docs =
       versioner.Process(context_.get(), doc.get(), api_range);
-  ASSERT_EQ(2u, versioned_docs.size());
+  ASSERT_THAT(versioned_docs, SizeIs(2u));
 
   xml::Element* el;
 
-  EXPECT_EQ(static_cast<uint16_t>(0), versioned_docs[0]->file.config.sdkVersion);
-  el = xml::FindRootElement(versioned_docs[0].get());
-  ASSERT_NE(nullptr, el);
-  EXPECT_EQ(4u, el->attributes.size());
-  EXPECT_EQ(nullptr, el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"));
-  EXPECT_NE(nullptr, el->FindAttribute(xml::kSchemaAuto, "foo"));
-  EXPECT_NE(nullptr, el->FindAttribute({}, "foo"));
+  EXPECT_THAT(versioned_docs[0]->file.config.sdkVersion, Eq(0u));
+  el = versioned_docs[0]->root.get();
+  ASSERT_THAT(el, NotNull());
+  EXPECT_THAT(el->attributes, SizeIs(4u));
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"), IsNull());
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAuto, "foo"), NotNull());
+  EXPECT_THAT(el->FindAttribute({}, "foo"), NotNull());
 
   xml::Attribute* attr = el->FindAttribute(xml::kSchemaAndroid, "paddingLeft");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
 
   attr = el->FindAttribute(xml::kSchemaAndroid, "paddingRight");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
 
-  EXPECT_EQ(static_cast<uint16_t>(SDK_LOLLIPOP_MR1), versioned_docs[1]->file.config.sdkVersion);
-  el = xml::FindRootElement(versioned_docs[1].get());
-  ASSERT_NE(nullptr, el);
-  EXPECT_EQ(5u, el->attributes.size());
-  EXPECT_NE(nullptr, el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"));
-  EXPECT_NE(nullptr, el->FindAttribute(xml::kSchemaAuto, "foo"));
-  EXPECT_NE(nullptr, el->FindAttribute({}, "foo"));
+  EXPECT_THAT(versioned_docs[1]->file.config.sdkVersion, Eq(SDK_LOLLIPOP_MR1));
+  el = versioned_docs[1]->root.get();
+  ASSERT_THAT(el, NotNull());
+  EXPECT_THAT(el->attributes, SizeIs(5u));
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"), NotNull());
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAuto, "foo"), NotNull());
+  EXPECT_THAT(el->FindAttribute({}, "foo"), NotNull());
 
   attr = el->FindAttribute(xml::kSchemaAndroid, "paddingLeft");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
 
   attr = el->FindAttribute(xml::kSchemaAndroid, "paddingRight");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
 }
 
 TEST_F(XmlCompatVersionerTest, ChainedRule) {
-  auto doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF(
+  auto doc = test::BuildXmlDomForPackageName(context_.get(), R"(
       <View xmlns:android="http://schemas.android.com/apk/res/android"
-          android:paddingHorizontal="24dp" />)EOF");
+          android:paddingHorizontal="24dp" />)");
 
   XmlReferenceLinker linker;
   ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
@@ -193,71 +199,70 @@
   XmlCompatVersioner versioner(&rules);
   std::vector<std::unique_ptr<xml::XmlResource>> versioned_docs =
       versioner.Process(context_.get(), doc.get(), api_range);
-  ASSERT_EQ(3u, versioned_docs.size());
+  ASSERT_THAT(versioned_docs, SizeIs(3u));
 
   xml::Element* el;
 
-  EXPECT_EQ(static_cast<uint16_t>(0), versioned_docs[0]->file.config.sdkVersion);
-  el = xml::FindRootElement(versioned_docs[0].get());
-  ASSERT_NE(nullptr, el);
-  EXPECT_EQ(2u, el->attributes.size());
-  EXPECT_EQ(nullptr, el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"));
+  EXPECT_THAT(versioned_docs[0]->file.config.sdkVersion, Eq(0u));
+  el = versioned_docs[0]->root.get();
+  ASSERT_THAT(el, NotNull());
+  EXPECT_THAT(el->attributes, SizeIs(2u));
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"), IsNull());
 
   xml::Attribute* attr = el->FindAttribute(xml::kSchemaAndroid, "paddingLeft");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
 
   attr = el->FindAttribute(xml::kSchemaAndroid, "paddingRight");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
 
-  EXPECT_EQ(static_cast<uint16_t>(SDK_HONEYCOMB), versioned_docs[1]->file.config.sdkVersion);
-  el = xml::FindRootElement(versioned_docs[1].get());
-  ASSERT_NE(nullptr, el);
-  EXPECT_EQ(1u, el->attributes.size());
-  EXPECT_EQ(nullptr, el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"));
-  EXPECT_EQ(nullptr, el->FindAttribute(xml::kSchemaAndroid, "paddingLeft"));
-  EXPECT_EQ(nullptr, el->FindAttribute(xml::kSchemaAndroid, "paddingRight"));
+  EXPECT_THAT(versioned_docs[1]->file.config.sdkVersion, Eq(SDK_HONEYCOMB));
+  el = versioned_docs[1]->root.get();
+  ASSERT_THAT(el, NotNull());
+  EXPECT_THAT(el->attributes, SizeIs(1u));
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"), IsNull());
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAndroid, "paddingLeft"), IsNull());
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAndroid, "paddingRight"), IsNull());
 
   attr = el->FindAttribute(xml::kSchemaAndroid, "progressBarPadding");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
 
-  EXPECT_EQ(static_cast<uint16_t>(SDK_LOLLIPOP_MR1), versioned_docs[2]->file.config.sdkVersion);
-  el = xml::FindRootElement(versioned_docs[2].get());
-  ASSERT_NE(nullptr, el);
-  EXPECT_EQ(2u, el->attributes.size());
-  EXPECT_EQ(nullptr, el->FindAttribute(xml::kSchemaAndroid, "paddingLeft"));
-  EXPECT_EQ(nullptr, el->FindAttribute(xml::kSchemaAndroid, "paddingRight"));
+  EXPECT_THAT(versioned_docs[2]->file.config.sdkVersion, Eq(SDK_LOLLIPOP_MR1));
+  el = versioned_docs[2]->root.get();
+  ASSERT_THAT(el, NotNull());
+  EXPECT_THAT(el->attributes, SizeIs(2u));
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAndroid, "paddingLeft"), IsNull());
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAndroid, "paddingRight"), IsNull());
 
   attr = el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
 
   attr = el->FindAttribute(xml::kSchemaAndroid, "progressBarPadding");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
 }
 
 TEST_F(XmlCompatVersionerTest, DegradeRuleOverridesExistingAttribute) {
-  auto doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF(
+  auto doc = test::BuildXmlDomForPackageName(context_.get(), R"(
       <View xmlns:android="http://schemas.android.com/apk/res/android"
           android:paddingHorizontal="24dp"
           android:paddingLeft="16dp"
-          android:paddingRight="16dp"/>)EOF");
+          android:paddingRight="16dp"/>)");
 
   XmlReferenceLinker linker;
   ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
 
-  Item* padding_horizontal_value = xml::FindRootElement(doc.get())
-                                       ->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal")
-                                       ->compiled_value.get();
-  ASSERT_NE(nullptr, padding_horizontal_value);
+  Item* padding_horizontal_value =
+      doc->root->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal")->compiled_value.get();
+  ASSERT_THAT(padding_horizontal_value, NotNull());
 
   XmlCompatVersioner::Rules rules;
   rules[R::attr::paddingHorizontal] =
@@ -271,50 +276,50 @@
   XmlCompatVersioner versioner(&rules);
   std::vector<std::unique_ptr<xml::XmlResource>> versioned_docs =
       versioner.Process(context_.get(), doc.get(), api_range);
-  ASSERT_EQ(2u, versioned_docs.size());
+  ASSERT_THAT(versioned_docs, SizeIs(2u));
 
   xml::Element* el;
 
-  EXPECT_EQ(static_cast<uint16_t>(0), versioned_docs[0]->file.config.sdkVersion);
-  el = xml::FindRootElement(versioned_docs[0].get());
-  ASSERT_NE(nullptr, el);
-  EXPECT_EQ(2u, el->attributes.size());
-  EXPECT_EQ(nullptr, el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"));
+  EXPECT_THAT(versioned_docs[0]->file.config.sdkVersion, Eq(0u));
+  el = versioned_docs[0]->root.get();
+  ASSERT_THAT(el, NotNull());
+  EXPECT_THAT(el->attributes, SizeIs(2u));
+  EXPECT_THAT(el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal"), IsNull());
 
   xml::Attribute* attr = el->FindAttribute(xml::kSchemaAndroid, "paddingLeft");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
-  ASSERT_TRUE(padding_horizontal_value->Equals(attr->compiled_value.get()));
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
+  ASSERT_THAT(*attr->compiled_value, ValueEq(padding_horizontal_value));
 
   attr = el->FindAttribute(xml::kSchemaAndroid, "paddingRight");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
-  ASSERT_TRUE(padding_horizontal_value->Equals(attr->compiled_value.get()));
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
+  ASSERT_THAT(*attr->compiled_value, ValueEq(padding_horizontal_value));
 
-  EXPECT_EQ(static_cast<uint16_t>(SDK_LOLLIPOP_MR1), versioned_docs[1]->file.config.sdkVersion);
-  el = xml::FindRootElement(versioned_docs[1].get());
-  ASSERT_NE(nullptr, el);
-  EXPECT_EQ(3u, el->attributes.size());
+  EXPECT_THAT(versioned_docs[1]->file.config.sdkVersion, Eq(SDK_LOLLIPOP_MR1));
+  el = versioned_docs[1]->root.get();
+  ASSERT_THAT(el, NotNull());
+  EXPECT_THAT(el->attributes, SizeIs(3u));
 
   attr = el->FindAttribute(xml::kSchemaAndroid, "paddingHorizontal");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
-  ASSERT_TRUE(padding_horizontal_value->Equals(attr->compiled_value.get()));
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
+  ASSERT_THAT(*attr->compiled_value, ValueEq(padding_horizontal_value));
 
   attr = el->FindAttribute(xml::kSchemaAndroid, "paddingLeft");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
-  ASSERT_TRUE(padding_horizontal_value->Equals(attr->compiled_value.get()));
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
+  ASSERT_THAT(*attr->compiled_value, ValueEq(padding_horizontal_value));
 
   attr = el->FindAttribute(xml::kSchemaAndroid, "paddingRight");
-  ASSERT_NE(nullptr, attr);
-  ASSERT_NE(nullptr, attr->compiled_value);
-  ASSERT_TRUE(padding_horizontal_value->Equals(attr->compiled_value.get()));
+  ASSERT_THAT(attr, NotNull());
+  ASSERT_THAT(attr->compiled_value, NotNull());
   ASSERT_TRUE(attr->compiled_attribute);
+  ASSERT_THAT(*attr->compiled_value, ValueEq(padding_horizontal_value));
 }
 
 }  // namespace aapt
diff --git a/tools/aapt2/link/XmlNamespaceRemover.cpp b/tools/aapt2/link/XmlNamespaceRemover.cpp
index 24aa566..b5e2423 100644
--- a/tools/aapt2/link/XmlNamespaceRemover.cpp
+++ b/tools/aapt2/link/XmlNamespaceRemover.cpp
@@ -24,37 +24,19 @@
 
 namespace {
 
-/**
- * Visits each xml Node, removing URI references and nested namespaces.
- */
+// Visits each xml Node, removing URI references and nested namespaces.
 class XmlVisitor : public xml::Visitor {
  public:
   explicit XmlVisitor(bool keep_uris) : keep_uris_(keep_uris) {}
 
   void Visit(xml::Element* el) override {
-    // Strip namespaces
-    for (auto& child : el->children) {
-      while (child && xml::NodeCast<xml::Namespace>(child.get())) {
-        if (child->children.empty()) {
-          child = {};
-        } else {
-          child = std::move(child->children.front());
-          child->parent = el;
-        }
-      }
-    }
-    el->children.erase(
-        std::remove_if(el->children.begin(), el->children.end(),
-                       [](const std::unique_ptr<xml::Node>& child) -> bool {
-                         return child == nullptr;
-                       }),
-        el->children.end());
+    el->namespace_decls.clear();
 
     if (!keep_uris_) {
       for (xml::Attribute& attr : el->attributes) {
-        attr.namespace_uri = std::string();
+        attr.namespace_uri.clear();
       }
-      el->namespace_uri = std::string();
+      el->namespace_uri.clear();
     }
     xml::Visitor::Visit(el);
   }
@@ -67,19 +49,11 @@
 
 }  // namespace
 
-bool XmlNamespaceRemover::Consume(IAaptContext* context,
-                                  xml::XmlResource* resource) {
+bool XmlNamespaceRemover::Consume(IAaptContext* context, xml::XmlResource* resource) {
   if (!resource->root) {
     return false;
   }
-  // Replace any root namespaces until the root is a non-namespace node
-  while (xml::NodeCast<xml::Namespace>(resource->root.get())) {
-    if (resource->root->children.empty()) {
-      break;
-    }
-    resource->root = std::move(resource->root->children.front());
-    resource->root->parent = nullptr;
-  }
+
   XmlVisitor visitor(keep_uris_);
   resource->root->Accept(&visitor);
   return true;
diff --git a/tools/aapt2/link/XmlNamespaceRemover_test.cpp b/tools/aapt2/link/XmlNamespaceRemover_test.cpp
index a176c03..df4920f 100644
--- a/tools/aapt2/link/XmlNamespaceRemover_test.cpp
+++ b/tools/aapt2/link/XmlNamespaceRemover_test.cpp
@@ -18,6 +18,10 @@
 
 #include "test/Test.h"
 
+using ::testing::NotNull;
+using ::testing::SizeIs;
+using ::testing::StrEq;
+
 namespace aapt {
 
 class XmlUriTestVisitor : public xml::Visitor {
@@ -25,16 +29,14 @@
   XmlUriTestVisitor() = default;
 
   void Visit(xml::Element* el) override {
-    for (const auto& attr : el->attributes) {
-      EXPECT_EQ(std::string(), attr.namespace_uri);
-    }
-    EXPECT_EQ(std::string(), el->namespace_uri);
-    xml::Visitor::Visit(el);
-  }
+    EXPECT_THAT(el->namespace_decls, SizeIs(0u));
 
-  void Visit(xml::Namespace* ns) override {
-    EXPECT_EQ(std::string(), ns->namespace_uri);
-    xml::Visitor::Visit(ns);
+    for (const auto& attr : el->attributes) {
+      EXPECT_THAT(attr.namespace_uri, StrEq(""));
+    }
+    EXPECT_THAT(el->namespace_uri, StrEq(""));
+
+    xml::Visitor::Visit(el);
   }
 
  private:
@@ -45,10 +47,9 @@
  public:
   XmlNamespaceTestVisitor() = default;
 
-  void Visit(xml::Namespace* ns) override {
-    ADD_FAILURE() << "Detected namespace: " << ns->namespace_prefix << "=\""
-                  << ns->namespace_uri << "\"";
-    xml::Visitor::Visit(ns);
+  void Visit(xml::Element* el) override {
+    EXPECT_THAT(el->namespace_decls, SizeIs(0u));
+    xml::Visitor::Visit(el);
   }
 
  private:
@@ -58,8 +59,7 @@
 class XmlNamespaceRemoverTest : public ::testing::Test {
  public:
   void SetUp() override {
-    context_ =
-        test::ContextBuilder().SetCompilationPackage("com.app.test").Build();
+    context_ = test::ContextBuilder().SetCompilationPackage("com.app.test").Build();
   }
 
  protected:
@@ -75,8 +75,8 @@
   XmlNamespaceRemover remover;
   ASSERT_TRUE(remover.Consume(context_.get(), doc.get()));
 
-  xml::Node* root = doc.get()->root.get();
-  ASSERT_NE(root, nullptr);
+  xml::Node* root = doc->root.get();
+  ASSERT_THAT(root, NotNull());
 
   XmlUriTestVisitor visitor;
   root->Accept(&visitor);
@@ -93,8 +93,8 @@
   XmlNamespaceRemover remover;
   ASSERT_TRUE(remover.Consume(context_.get(), doc.get()));
 
-  xml::Node* root = doc.get()->root.get();
-  ASSERT_NE(root, nullptr);
+  xml::Node* root = doc->root.get();
+  ASSERT_THAT(root, NotNull());
 
   XmlNamespaceTestVisitor visitor;
   root->Accept(&visitor);
@@ -112,8 +112,8 @@
   XmlNamespaceRemover remover;
   ASSERT_TRUE(remover.Consume(context_.get(), doc.get()));
 
-  xml::Node* root = doc.get()->root.get();
-  ASSERT_NE(root, nullptr);
+  xml::Node* root = doc->root.get();
+  ASSERT_THAT(root, NotNull());
 
   XmlNamespaceTestVisitor visitor;
   root->Accept(&visitor);
diff --git a/tools/aapt2/link/XmlReferenceLinker.cpp b/tools/aapt2/link/XmlReferenceLinker.cpp
index 721fc26..bcecd20 100644
--- a/tools/aapt2/link/XmlReferenceLinker.cpp
+++ b/tools/aapt2/link/XmlReferenceLinker.cpp
@@ -144,7 +144,9 @@
     xml::PackageAwareVisitor::Visit(el);
   }
 
-  bool HasError() { return error_ || reference_visitor_.HasError(); }
+  bool HasError() {
+    return error_ || reference_visitor_.HasError();
+  }
 
  private:
   DISALLOW_COPY_AND_ASSIGN(XmlVisitor);
diff --git a/tools/aapt2/link/XmlReferenceLinker_test.cpp b/tools/aapt2/link/XmlReferenceLinker_test.cpp
index de81e73..ef99355 100644
--- a/tools/aapt2/link/XmlReferenceLinker_test.cpp
+++ b/tools/aapt2/link/XmlReferenceLinker_test.cpp
@@ -18,6 +18,9 @@
 
 #include "test/Test.h"
 
+using ::testing::IsNull;
+using ::testing::NotNull;
+
 namespace aapt {
 
 class XmlReferenceLinkerTest : public ::testing::Test {
@@ -76,199 +79,179 @@
 };
 
 TEST_F(XmlReferenceLinkerTest, LinkBasicAttributes) {
-  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF(
-        <View xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="match_parent"
-              android:background="@color/green"
-              android:text="hello"
-              android:attr="\?hello"
-              nonAaptAttr="1"
-              nonAaptAttrRef="@id/id"
-              class="hello" />)EOF");
+  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+      <View xmlns:android="http://schemas.android.com/apk/res/android"
+            android:layout_width="match_parent"
+            android:background="@color/green"
+            android:text="hello"
+            android:attr="\?hello"
+            nonAaptAttr="1"
+            nonAaptAttrRef="@id/id"
+            class="hello" />)");
 
   XmlReferenceLinker linker;
   ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
 
-  xml::Element* view_el = xml::FindRootElement(doc.get());
-  ASSERT_NE(nullptr, view_el);
+  xml::Element* view_el = doc->root.get();
+  ASSERT_THAT(view_el, NotNull());
 
   xml::Attribute* xml_attr = view_el->FindAttribute(xml::kSchemaAndroid, "layout_width");
-  ASSERT_NE(nullptr, xml_attr);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
-  EXPECT_EQ(ResourceId(0x01010000), xml_attr->compiled_attribute.value().id.value());
-  ASSERT_NE(nullptr, xml_attr->compiled_value);
-  ASSERT_NE(nullptr, ValueCast<BinaryPrimitive>(xml_attr->compiled_value.get()));
+  ASSERT_THAT(xml_attr, NotNull());
+  ASSERT_TRUE(xml_attr->compiled_attribute);
+  EXPECT_EQ(make_value(ResourceId(0x01010000)), xml_attr->compiled_attribute.value().id);
+  EXPECT_THAT(ValueCast<BinaryPrimitive>(xml_attr->compiled_value.get()), NotNull());
 
   xml_attr = view_el->FindAttribute(xml::kSchemaAndroid, "background");
-  ASSERT_NE(nullptr, xml_attr);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
-  EXPECT_EQ(ResourceId(0x01010001), xml_attr->compiled_attribute.value().id.value());
-  ASSERT_NE(nullptr, xml_attr->compiled_value);
+  ASSERT_THAT(xml_attr, NotNull());
+  ASSERT_TRUE(xml_attr->compiled_attribute);
+  EXPECT_EQ(make_value(ResourceId(0x01010001)), xml_attr->compiled_attribute.value().id);
   Reference* ref = ValueCast<Reference>(xml_attr->compiled_value.get());
-  ASSERT_NE(nullptr, ref);
-  AAPT_ASSERT_TRUE(ref->name);
-  EXPECT_EQ(test::ParseNameOrDie("color/green"), ref->name.value());  // Make sure the name
-                                                                      // didn't change.
-  AAPT_ASSERT_TRUE(ref->id);
-  EXPECT_EQ(ResourceId(0x7f020000), ref->id.value());
+  ASSERT_THAT(ref, NotNull());
+  EXPECT_EQ(make_value(test::ParseNameOrDie("color/green")), ref->name);  // Make sure the name
+                                                                          // didn't change.
+  EXPECT_EQ(make_value(ResourceId(0x7f020000)), ref->id);
 
   xml_attr = view_el->FindAttribute(xml::kSchemaAndroid, "text");
-  ASSERT_NE(nullptr, xml_attr);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
-  ASSERT_FALSE(xml_attr->compiled_value);  // Strings don't get compiled for memory sake.
+  ASSERT_THAT(xml_attr, NotNull());
+  EXPECT_TRUE(xml_attr->compiled_attribute);
+  EXPECT_THAT(xml_attr->compiled_value, IsNull());  // Strings don't get compiled for memory sake.
 
   xml_attr = view_el->FindAttribute(xml::kSchemaAndroid, "attr");
-  ASSERT_NE(nullptr, xml_attr);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
-  ASSERT_FALSE(xml_attr->compiled_value);  // Should be a plain string.
+  ASSERT_THAT(xml_attr, NotNull());
+  EXPECT_TRUE(xml_attr->compiled_attribute);
+  EXPECT_THAT(xml_attr->compiled_value, IsNull());  // Should be a plain string.
 
   xml_attr = view_el->FindAttribute("", "nonAaptAttr");
-  ASSERT_NE(nullptr, xml_attr);
-  AAPT_ASSERT_FALSE(xml_attr->compiled_attribute);
-  ASSERT_NE(nullptr, xml_attr->compiled_value);
-  ASSERT_NE(nullptr, ValueCast<BinaryPrimitive>(xml_attr->compiled_value.get()));
+  ASSERT_THAT(xml_attr, NotNull());
+  EXPECT_FALSE(xml_attr->compiled_attribute);
+  EXPECT_THAT(ValueCast<BinaryPrimitive>(xml_attr->compiled_value.get()), NotNull());
 
   xml_attr = view_el->FindAttribute("", "nonAaptAttrRef");
-  ASSERT_NE(nullptr, xml_attr);
-  AAPT_ASSERT_FALSE(xml_attr->compiled_attribute);
-  ASSERT_NE(nullptr, xml_attr->compiled_value);
-  ASSERT_NE(nullptr, ValueCast<Reference>(xml_attr->compiled_value.get()));
+  ASSERT_THAT(xml_attr, NotNull());
+  EXPECT_FALSE(xml_attr->compiled_attribute);
+  EXPECT_THAT(ValueCast<Reference>(xml_attr->compiled_value.get()), NotNull());
 
   xml_attr = view_el->FindAttribute("", "class");
-  ASSERT_NE(nullptr, xml_attr);
-  AAPT_ASSERT_FALSE(xml_attr->compiled_attribute);
-  ASSERT_EQ(nullptr, xml_attr->compiled_value);
+  ASSERT_THAT(xml_attr, NotNull());
+  EXPECT_FALSE(xml_attr->compiled_attribute);
+  EXPECT_THAT(xml_attr->compiled_value, IsNull());
 }
 
 TEST_F(XmlReferenceLinkerTest, PrivateSymbolsAreNotLinked) {
-  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF(
-        <View xmlns:android="http://schemas.android.com/apk/res/android"
-              android:colorAccent="@android:color/hidden" />)EOF");
+  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+      <View xmlns:android="http://schemas.android.com/apk/res/android"
+          android:colorAccent="@android:color/hidden" />)");
 
   XmlReferenceLinker linker;
   ASSERT_FALSE(linker.Consume(context_.get(), doc.get()));
 }
 
 TEST_F(XmlReferenceLinkerTest, PrivateSymbolsAreLinkedWhenReferenceHasStarPrefix) {
-  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF(
+  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"(
     <View xmlns:android="http://schemas.android.com/apk/res/android"
-          android:colorAccent="@*android:color/hidden" />)EOF");
+          android:colorAccent="@*android:color/hidden" />)");
 
   XmlReferenceLinker linker;
   ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
 }
 
 TEST_F(XmlReferenceLinkerTest, LinkMangledAttributes) {
-  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF(
-            <View xmlns:support="http://schemas.android.com/apk/res/com.android.support"
-                  support:colorAccent="#ff0000" />)EOF");
+  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+      <View xmlns:support="http://schemas.android.com/apk/res/com.android.support"
+          support:colorAccent="#ff0000" />)");
 
   XmlReferenceLinker linker;
   ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
 
-  xml::Element* view_el = xml::FindRootElement(doc.get());
-  ASSERT_NE(view_el, nullptr);
+  xml::Element* view_el = doc->root.get();
+  ASSERT_THAT(view_el, NotNull());
 
   xml::Attribute* xml_attr =
       view_el->FindAttribute(xml::BuildPackageNamespace("com.android.support"), "colorAccent");
-  ASSERT_NE(xml_attr, nullptr);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
-  EXPECT_EQ(xml_attr->compiled_attribute.value().id.value(), ResourceId(0x7f010001));
-  ASSERT_NE(ValueCast<BinaryPrimitive>(xml_attr->compiled_value.get()), nullptr);
+  ASSERT_THAT(xml_attr, NotNull());
+  ASSERT_TRUE(xml_attr->compiled_attribute);
+  EXPECT_EQ(make_value(ResourceId(0x7f010001)), xml_attr->compiled_attribute.value().id);
+  EXPECT_THAT(ValueCast<BinaryPrimitive>(xml_attr->compiled_value.get()), NotNull());
 }
 
 TEST_F(XmlReferenceLinkerTest, LinkAutoResReference) {
-  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF(
-            <View xmlns:app="http://schemas.android.com/apk/res-auto"
-                  app:colorAccent="@app:color/red" />)EOF");
+  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+      <View xmlns:app="http://schemas.android.com/apk/res-auto"
+          app:colorAccent="@app:color/red" />)");
 
   XmlReferenceLinker linker;
   ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
 
-  xml::Element* view_el = xml::FindRootElement(doc.get());
-  ASSERT_NE(view_el, nullptr);
+  xml::Element* view_el = doc->root.get();
+  ASSERT_THAT(view_el, NotNull());
 
   xml::Attribute* xml_attr = view_el->FindAttribute(xml::kSchemaAuto, "colorAccent");
-  ASSERT_NE(xml_attr, nullptr);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
-  EXPECT_EQ(xml_attr->compiled_attribute.value().id.value(), ResourceId(0x7f010000));
+  ASSERT_THAT(xml_attr, NotNull());
+  ASSERT_TRUE(xml_attr->compiled_attribute);
+  EXPECT_EQ(make_value(ResourceId(0x7f010000)), xml_attr->compiled_attribute.value().id);
   Reference* ref = ValueCast<Reference>(xml_attr->compiled_value.get());
-  ASSERT_NE(ref, nullptr);
-  AAPT_ASSERT_TRUE(ref->name);
-  AAPT_ASSERT_TRUE(ref->id);
-  EXPECT_EQ(ref->id.value(), ResourceId(0x7f020001));
+  ASSERT_THAT(ref, NotNull());
+  ASSERT_TRUE(ref->name);
+  EXPECT_EQ(make_value(ResourceId(0x7f020001)), ref->id);
 }
 
 TEST_F(XmlReferenceLinkerTest, LinkViewWithShadowedPackageAlias) {
-  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF(
-            <View xmlns:app="http://schemas.android.com/apk/res/android"
-                  app:attr="@app:id/id">
-              <View xmlns:app="http://schemas.android.com/apk/res/com.app.test"
-                    app:attr="@app:id/id"/>
-            </View>)EOF");
+  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+      <View xmlns:app="http://schemas.android.com/apk/res/android" app:attr="@app:id/id">
+        <View xmlns:app="http://schemas.android.com/apk/res/com.app.test" app:attr="@app:id/id"/>
+      </View>)");
 
   XmlReferenceLinker linker;
   ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
 
-  xml::Element* view_el = xml::FindRootElement(doc.get());
-  ASSERT_NE(view_el, nullptr);
+  xml::Element* view_el = doc->root.get();
+  ASSERT_THAT(view_el, NotNull());
 
   // All attributes and references in this element should be referring to
   // "android" (0x01).
   xml::Attribute* xml_attr = view_el->FindAttribute(xml::kSchemaAndroid, "attr");
-  ASSERT_NE(xml_attr, nullptr);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
-  EXPECT_EQ(xml_attr->compiled_attribute.value().id.value(), ResourceId(0x01010002));
+  ASSERT_THAT(xml_attr, NotNull());
+  ASSERT_TRUE(xml_attr->compiled_attribute);
+  EXPECT_EQ(make_value(ResourceId(0x01010002)), xml_attr->compiled_attribute.value().id);
   Reference* ref = ValueCast<Reference>(xml_attr->compiled_value.get());
-  ASSERT_NE(ref, nullptr);
-  AAPT_ASSERT_TRUE(ref->id);
-  EXPECT_EQ(ref->id.value(), ResourceId(0x01030000));
+  ASSERT_THAT(ref, NotNull());
+  EXPECT_EQ(make_value(ResourceId(0x01030000)), ref->id);
 
   ASSERT_FALSE(view_el->GetChildElements().empty());
   view_el = view_el->GetChildElements().front();
-  ASSERT_NE(view_el, nullptr);
+  ASSERT_THAT(view_el, NotNull());
 
   // All attributes and references in this element should be referring to
   // "com.app.test" (0x7f).
   xml_attr = view_el->FindAttribute(xml::BuildPackageNamespace("com.app.test"), "attr");
-  ASSERT_NE(xml_attr, nullptr);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
-  EXPECT_EQ(xml_attr->compiled_attribute.value().id.value(), ResourceId(0x7f010002));
+  ASSERT_THAT(xml_attr, NotNull());
+  ASSERT_TRUE(xml_attr->compiled_attribute);
+  EXPECT_EQ(make_value(ResourceId(0x7f010002)), xml_attr->compiled_attribute.value().id);
   ref = ValueCast<Reference>(xml_attr->compiled_value.get());
-  ASSERT_NE(ref, nullptr);
-  AAPT_ASSERT_TRUE(ref->id);
-  EXPECT_EQ(ref->id.value(), ResourceId(0x7f030000));
+  ASSERT_THAT(ref, NotNull());
+  EXPECT_EQ(make_value(ResourceId(0x7f030000)), ref->id);
 }
 
 TEST_F(XmlReferenceLinkerTest, LinkViewWithLocalPackageAndAliasOfTheSameName) {
-  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF(
-            <View xmlns:android="http://schemas.android.com/apk/res/com.app.test"
-                  android:attr="@id/id"/>)EOF");
+  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDomForPackageName(context_.get(), R"(
+      <View xmlns:android="http://schemas.android.com/apk/res/com.app.test"
+          android:attr="@id/id"/>)");
 
   XmlReferenceLinker linker;
   ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
 
-  xml::Element* view_el = xml::FindRootElement(doc.get());
-  ASSERT_NE(view_el, nullptr);
+  xml::Element* view_el = doc->root.get();
+  ASSERT_THAT(view_el, NotNull());
 
   // All attributes and references in this element should be referring to
   // "com.app.test" (0x7f).
-  xml::Attribute* xml_attr =
-      view_el->FindAttribute(xml::BuildPackageNamespace("com.app.test"), "attr");
-  ASSERT_NE(xml_attr, nullptr);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
-  AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
-  EXPECT_EQ(xml_attr->compiled_attribute.value().id.value(), ResourceId(0x7f010002));
+  xml::Attribute* xml_attr = view_el->FindAttribute(xml::BuildPackageNamespace("com.app.test"), "attr");
+  ASSERT_THAT(xml_attr, NotNull());
+  ASSERT_TRUE(xml_attr->compiled_attribute);
+  EXPECT_EQ(make_value(ResourceId(0x7f010002)), xml_attr->compiled_attribute.value().id);
   Reference* ref = ValueCast<Reference>(xml_attr->compiled_value.get());
-  ASSERT_NE(ref, nullptr);
-  AAPT_ASSERT_TRUE(ref->id);
-  EXPECT_EQ(ref->id.value(), ResourceId(0x7f030000));
+  ASSERT_THAT(ref, NotNull());
+  EXPECT_EQ(make_value(ResourceId(0x7f030000)), ref->id);
 }
 
 }  // namespace aapt
diff --git a/tools/aapt2/proto/ProtoHelpers.cpp b/tools/aapt2/proto/ProtoHelpers.cpp
index 38bf4e3..aa99c98 100644
--- a/tools/aapt2/proto/ProtoHelpers.cpp
+++ b/tools/aapt2/proto/ProtoHelpers.cpp
@@ -18,8 +18,7 @@
 
 namespace aapt {
 
-void SerializeStringPoolToPb(const StringPool& pool,
-                             pb::StringPool* out_pb_pool) {
+void SerializeStringPoolToPb(const StringPool& pool, pb::StringPool* out_pb_pool) {
   BigBuffer buffer(1024);
   StringPool::FlattenUtf8(&buffer, pool);
 
@@ -28,51 +27,47 @@
 
   size_t offset = 0;
   for (const BigBuffer::Block& block : buffer) {
-    data->insert(data->begin() + offset, block.buffer.get(),
-                 block.buffer.get() + block.size);
+    data->insert(data->begin() + offset, block.buffer.get(), block.buffer.get() + block.size);
     offset += block.size;
   }
 }
 
-void SerializeSourceToPb(const Source& source, StringPool* src_pool,
-                         pb::Source* out_pb_source) {
+void SerializeSourceToPb(const Source& source, StringPool* src_pool, pb::Source* out_pb_source) {
   StringPool::Ref ref = src_pool->MakeRef(source.path);
   out_pb_source->set_path_idx(static_cast<uint32_t>(ref.index()));
   if (source.line) {
-    out_pb_source->set_line_no(static_cast<uint32_t>(source.line.value()));
+    out_pb_source->mutable_position()->set_line_number(static_cast<uint32_t>(source.line.value()));
   }
 }
 
-void DeserializeSourceFromPb(const pb::Source& pb_source,
-                             const android::ResStringPool& src_pool,
+void DeserializeSourceFromPb(const pb::Source& pb_source, const android::ResStringPool& src_pool,
                              Source* out_source) {
   if (pb_source.has_path_idx()) {
     out_source->path = util::GetString(src_pool, pb_source.path_idx());
   }
 
-  if (pb_source.has_line_no()) {
-    out_source->line = static_cast<size_t>(pb_source.line_no());
+  if (pb_source.has_position()) {
+    out_source->line = static_cast<size_t>(pb_source.position().line_number());
   }
 }
 
 pb::SymbolStatus_Visibility SerializeVisibilityToPb(SymbolState state) {
   switch (state) {
     case SymbolState::kPrivate:
-      return pb::SymbolStatus_Visibility_Private;
+      return pb::SymbolStatus_Visibility_PRIVATE;
     case SymbolState::kPublic:
-      return pb::SymbolStatus_Visibility_Public;
+      return pb::SymbolStatus_Visibility_PUBLIC;
     default:
       break;
   }
-  return pb::SymbolStatus_Visibility_Unknown;
+  return pb::SymbolStatus_Visibility_UNKNOWN;
 }
 
-SymbolState DeserializeVisibilityFromPb(
-    pb::SymbolStatus_Visibility pb_visibility) {
+SymbolState DeserializeVisibilityFromPb(pb::SymbolStatus_Visibility pb_visibility) {
   switch (pb_visibility) {
-    case pb::SymbolStatus_Visibility_Private:
+    case pb::SymbolStatus_Visibility_PRIVATE:
       return SymbolState::kPrivate;
-    case pb::SymbolStatus_Visibility_Public:
+    case pb::SymbolStatus_Visibility_PUBLIC:
       return SymbolState::kPublic;
     default:
       break;
@@ -80,8 +75,7 @@
   return SymbolState::kUndefined;
 }
 
-void SerializeConfig(const ConfigDescription& config,
-                     pb::ConfigDescription* out_pb_config) {
+void SerializeConfig(const ConfigDescription& config, pb::ConfigDescription* out_pb_config) {
   android::ResTable_config flat_config = config;
   flat_config.size = sizeof(flat_config);
   flat_config.swapHtoD();
@@ -99,8 +93,7 @@
     return false;
   }
 
-  config = reinterpret_cast<const android::ResTable_config*>(
-      pb_config.data().data());
+  config = reinterpret_cast<const android::ResTable_config*>(pb_config.data().data());
   out_config->copyFromDtoH(*config);
   return true;
 }
@@ -108,20 +101,20 @@
 pb::Reference_Type SerializeReferenceTypeToPb(Reference::Type type) {
   switch (type) {
     case Reference::Type::kResource:
-      return pb::Reference_Type_Ref;
+      return pb::Reference_Type_REFERENCE;
     case Reference::Type::kAttribute:
-      return pb::Reference_Type_Attr;
+      return pb::Reference_Type_ATTRIBUTE;
     default:
       break;
   }
-  return pb::Reference_Type_Ref;
+  return pb::Reference_Type_REFERENCE;
 }
 
 Reference::Type DeserializeReferenceTypeFromPb(pb::Reference_Type pb_type) {
   switch (pb_type) {
-    case pb::Reference_Type_Ref:
+    case pb::Reference_Type_REFERENCE:
       return Reference::Type::kResource;
-    case pb::Reference_Type_Attr:
+    case pb::Reference_Type_ATTRIBUTE:
       return Reference::Type::kAttribute;
     default:
       break;
@@ -132,32 +125,32 @@
 pb::Plural_Arity SerializePluralEnumToPb(size_t plural_idx) {
   switch (plural_idx) {
     case Plural::Zero:
-      return pb::Plural_Arity_Zero;
+      return pb::Plural_Arity_ZERO;
     case Plural::One:
-      return pb::Plural_Arity_One;
+      return pb::Plural_Arity_ONE;
     case Plural::Two:
-      return pb::Plural_Arity_Two;
+      return pb::Plural_Arity_TWO;
     case Plural::Few:
-      return pb::Plural_Arity_Few;
+      return pb::Plural_Arity_FEW;
     case Plural::Many:
-      return pb::Plural_Arity_Many;
+      return pb::Plural_Arity_MANY;
     default:
       break;
   }
-  return pb::Plural_Arity_Other;
+  return pb::Plural_Arity_OTHER;
 }
 
 size_t DeserializePluralEnumFromPb(pb::Plural_Arity arity) {
   switch (arity) {
-    case pb::Plural_Arity_Zero:
+    case pb::Plural_Arity_ZERO:
       return Plural::Zero;
-    case pb::Plural_Arity_One:
+    case pb::Plural_Arity_ONE:
       return Plural::One;
-    case pb::Plural_Arity_Two:
+    case pb::Plural_Arity_TWO:
       return Plural::Two;
-    case pb::Plural_Arity_Few:
+    case pb::Plural_Arity_FEW:
       return Plural::Few;
-    case pb::Plural_Arity_Many:
+    case pb::Plural_Arity_MANY:
       return Plural::Many;
     default:
       break;
diff --git a/tools/aapt2/proto/ProtoHelpers.h b/tools/aapt2/proto/ProtoHelpers.h
index 344e947..2f268f4 100644
--- a/tools/aapt2/proto/ProtoHelpers.h
+++ b/tools/aapt2/proto/ProtoHelpers.h
@@ -23,27 +23,23 @@
 #include "ResourceTable.h"
 #include "Source.h"
 #include "StringPool.h"
-#include "Format.pb.h"
+#include "Resources.pb.h"
+#include "ResourcesInternal.pb.h"
 
 namespace aapt {
 
-void SerializeStringPoolToPb(const StringPool& pool,
-                             pb::StringPool* out_pb_pool);
+void SerializeStringPoolToPb(const StringPool& pool, pb::StringPool* out_pb_pool);
 
-void SerializeSourceToPb(const Source& source, StringPool* src_pool,
-                         pb::Source* out_pb_source);
+void SerializeSourceToPb(const Source& source, StringPool* src_pool, pb::Source* out_pb_source);
 
-void DeserializeSourceFromPb(const pb::Source& pb_source,
-                             const android::ResStringPool& src_pool,
+void DeserializeSourceFromPb(const pb::Source& pb_source, const android::ResStringPool& src_pool,
                              Source* out_source);
 
 pb::SymbolStatus_Visibility SerializeVisibilityToPb(SymbolState state);
 
-SymbolState DeserializeVisibilityFromPb(
-    pb::SymbolStatus_Visibility pb_visibility);
+SymbolState DeserializeVisibilityFromPb(pb::SymbolStatus_Visibility pb_visibility);
 
-void SerializeConfig(const ConfigDescription& config,
-                     pb::ConfigDescription* out_pb_config);
+void SerializeConfig(const ConfigDescription& config, pb::ConfigDescription* out_pb_config);
 
 bool DeserializeConfigDescriptionFromPb(const pb::ConfigDescription& pb_config,
                                         ConfigDescription* out_config);
diff --git a/tools/aapt2/proto/ProtoSerialize.h b/tools/aapt2/proto/ProtoSerialize.h
index 39c5003..8c46642 100644
--- a/tools/aapt2/proto/ProtoSerialize.h
+++ b/tools/aapt2/proto/ProtoSerialize.h
@@ -30,11 +30,10 @@
 
 class CompiledFileOutputStream {
  public:
-  explicit CompiledFileOutputStream(
-      google::protobuf::io::ZeroCopyOutputStream* out);
+  explicit CompiledFileOutputStream(google::protobuf::io::ZeroCopyOutputStream* out);
 
   void WriteLittleEndian32(uint32_t value);
-  void WriteCompiledFile(const pb::CompiledFile* compiledFile);
+  void WriteCompiledFile(const pb::internal::CompiledFile* compiledFile);
   void WriteData(const BigBuffer* buffer);
   void WriteData(const void* data, size_t len);
   bool HadError();
@@ -52,7 +51,7 @@
   explicit CompiledFileInputStream(const void* data, size_t size);
 
   bool ReadLittleEndian32(uint32_t* outVal);
-  bool ReadCompiledFile(pb::CompiledFile* outVal);
+  bool ReadCompiledFile(pb::internal::CompiledFile* outVal);
   bool ReadDataMetaData(uint64_t* outOffset, uint64_t* outLen);
 
  private:
@@ -64,13 +63,12 @@
 };
 
 std::unique_ptr<pb::ResourceTable> SerializeTableToPb(ResourceTable* table);
-std::unique_ptr<ResourceTable> DeserializeTableFromPb(
-    const pb::ResourceTable& pbTable, const Source& source, IDiagnostics* diag);
+std::unique_ptr<ResourceTable> DeserializeTableFromPb(const pb::ResourceTable& pbTable,
+                                                      const Source& source, IDiagnostics* diag);
 
-std::unique_ptr<pb::CompiledFile> SerializeCompiledFileToPb(
-    const ResourceFile& file);
+std::unique_ptr<pb::internal::CompiledFile> SerializeCompiledFileToPb(const ResourceFile& file);
 std::unique_ptr<ResourceFile> DeserializeCompiledFileFromPb(
-    const pb::CompiledFile& pbFile, const Source& source, IDiagnostics* diag);
+    const pb::internal::CompiledFile& pbFile, const Source& source, IDiagnostics* diag);
 
 }  // namespace aapt
 
diff --git a/tools/aapt2/proto/TableProtoDeserializer.cpp b/tools/aapt2/proto/TableProtoDeserializer.cpp
index 4b56192..b9d5878 100644
--- a/tools/aapt2/proto/TableProtoDeserializer.cpp
+++ b/tools/aapt2/proto/TableProtoDeserializer.cpp
@@ -55,66 +55,61 @@
 
 class PackagePbDeserializer {
  public:
-  PackagePbDeserializer(const android::ResStringPool* valuePool,
-                        const android::ResStringPool* sourcePool,
-                        const android::ResStringPool* symbolPool,
-                        const Source& source, IDiagnostics* diag)
-      : value_pool_(valuePool),
-        source_pool_(sourcePool),
-        symbol_pool_(symbolPool),
-        source_(source),
-        diag_(diag) {}
+  PackagePbDeserializer(const android::ResStringPool* sourcePool, const Source& source,
+                        IDiagnostics* diag)
+      : source_pool_(sourcePool), source_(source), diag_(diag) {
+  }
 
  public:
-  bool DeserializeFromPb(const pb::Package& pbPackage, ResourceTable* table) {
+  bool DeserializeFromPb(const pb::Package& pb_package, ResourceTable* table) {
     Maybe<uint8_t> id;
-    if (pbPackage.has_package_id()) {
-      id = static_cast<uint8_t>(pbPackage.package_id());
+    if (pb_package.has_package_id()) {
+      id = static_cast<uint8_t>(pb_package.package_id());
     }
 
-    std::map<ResourceId, ResourceNameRef> idIndex;
+    std::map<ResourceId, ResourceNameRef> id_index;
 
-    ResourceTablePackage* pkg = table->CreatePackage(pbPackage.package_name(), id);
-    for (const pb::Type& pbType : pbPackage.types()) {
-      const ResourceType* resType = ParseResourceType(pbType.name());
-      if (!resType) {
-        diag_->Error(DiagMessage(source_) << "unknown type '" << pbType.name() << "'");
+    ResourceTablePackage* pkg = table->CreatePackage(pb_package.package_name(), id);
+    for (const pb::Type& pb_type : pb_package.type()) {
+      const ResourceType* res_type = ParseResourceType(pb_type.name());
+      if (res_type == nullptr) {
+        diag_->Error(DiagMessage(source_) << "unknown type '" << pb_type.name() << "'");
         return {};
       }
 
-      ResourceTableType* type = pkg->FindOrCreateType(*resType);
+      ResourceTableType* type = pkg->FindOrCreateType(*res_type);
 
-      for (const pb::Entry& pbEntry : pbType.entries()) {
-        ResourceEntry* entry = type->FindOrCreateEntry(pbEntry.name());
+      for (const pb::Entry& pb_entry : pb_type.entry()) {
+        ResourceEntry* entry = type->FindOrCreateEntry(pb_entry.name());
 
-        // Deserialize the symbol status (public/private with source and
-        // comments).
-        if (pbEntry.has_symbol_status()) {
-          const pb::SymbolStatus& pbStatus = pbEntry.symbol_status();
-          if (pbStatus.has_source()) {
-            DeserializeSourceFromPb(pbStatus.source(), *source_pool_, &entry->symbol_status.source);
+        // Deserialize the symbol status (public/private with source and comments).
+        if (pb_entry.has_symbol_status()) {
+          const pb::SymbolStatus& pb_status = pb_entry.symbol_status();
+          if (pb_status.has_source()) {
+            DeserializeSourceFromPb(pb_status.source(), *source_pool_,
+                                    &entry->symbol_status.source);
           }
 
-          if (pbStatus.has_comment()) {
-            entry->symbol_status.comment = pbStatus.comment();
+          if (pb_status.has_comment()) {
+            entry->symbol_status.comment = pb_status.comment();
           }
 
-          entry->symbol_status.allow_new = pbStatus.allow_new();
+          entry->symbol_status.allow_new = pb_status.allow_new();
 
-          SymbolState visibility = DeserializeVisibilityFromPb(pbStatus.visibility());
+          SymbolState visibility = DeserializeVisibilityFromPb(pb_status.visibility());
           entry->symbol_status.state = visibility;
 
           if (visibility == SymbolState::kPublic) {
             // This is a public symbol, we must encode the ID now if there is one.
-            if (pbEntry.has_id()) {
-              entry->id = static_cast<uint16_t>(pbEntry.id());
+            if (pb_entry.has_id()) {
+              entry->id = static_cast<uint16_t>(pb_entry.id());
             }
 
             if (type->symbol_status.state != SymbolState::kPublic) {
               // If the type has not been made public, do so now.
               type->symbol_status.state = SymbolState::kPublic;
-              if (pbType.has_id()) {
-                type->id = static_cast<uint8_t>(pbType.id());
+              if (pb_type.has_id()) {
+                type->id = static_cast<uint8_t>(pb_type.id());
               }
             }
           } else if (visibility == SymbolState::kPrivate) {
@@ -124,45 +119,44 @@
           }
         }
 
-        ResourceId resId(pbPackage.package_id(), pbType.id(), pbEntry.id());
-        if (resId.is_valid()) {
-          idIndex[resId] = ResourceNameRef(pkg->name, type->type, entry->name);
+        ResourceId resid(pb_package.package_id(), pb_type.id(), pb_entry.id());
+        if (resid.is_valid()) {
+          id_index[resid] = ResourceNameRef(pkg->name, type->type, entry->name);
         }
 
-        for (const pb::ConfigValue& pbConfigValue : pbEntry.config_values()) {
-          const pb::ConfigDescription& pbConfig = pbConfigValue.config();
+        for (const pb::ConfigValue& pb_config_value : pb_entry.config_value()) {
+          const pb::ConfigDescription& pb_config = pb_config_value.config();
 
           ConfigDescription config;
-          if (!DeserializeConfigDescriptionFromPb(pbConfig, &config)) {
+          if (!DeserializeConfigDescriptionFromPb(pb_config, &config)) {
             diag_->Error(DiagMessage(source_) << "invalid configuration");
             return {};
           }
 
-          ResourceConfigValue* configValue = entry->FindOrCreateValue(config, pbConfig.product());
-          if (configValue->value) {
+          ResourceConfigValue* config_value = entry->FindOrCreateValue(config, pb_config.product());
+          if (config_value->value) {
             // Duplicate config.
             diag_->Error(DiagMessage(source_) << "duplicate configuration");
             return {};
           }
 
-          configValue->value =
-              DeserializeValueFromPb(pbConfigValue.value(), config, &table->string_pool);
-          if (!configValue->value) {
+          config_value->value =
+              DeserializeValueFromPb(pb_config_value.value(), config, &table->string_pool);
+          if (!config_value->value) {
             return {};
           }
         }
       }
     }
 
-    ReferenceIdToNameVisitor visitor(&idIndex);
+    ReferenceIdToNameVisitor visitor(&id_index);
     VisitAllValuesInPackage(pkg, &visitor);
     return true;
   }
 
  private:
   std::unique_ptr<Item> DeserializeItemFromPb(const pb::Item& pb_item,
-                                              const ConfigDescription& config,
-                                              StringPool* pool) {
+                                              const ConfigDescription& config, StringPool* pool) {
     if (pb_item.has_ref()) {
       const pb::Reference& pb_ref = pb_item.ref();
       std::unique_ptr<Reference> ref = util::make_unique<Reference>();
@@ -173,46 +167,32 @@
 
     } else if (pb_item.has_prim()) {
       const pb::Primitive& pb_prim = pb_item.prim();
-      android::Res_value prim = {};
-      prim.dataType = static_cast<uint8_t>(pb_prim.type());
-      prim.data = pb_prim.data();
-      return util::make_unique<BinaryPrimitive>(prim);
+      return util::make_unique<BinaryPrimitive>(static_cast<uint8_t>(pb_prim.type()),
+                                                pb_prim.data());
 
     } else if (pb_item.has_id()) {
       return util::make_unique<Id>();
 
     } else if (pb_item.has_str()) {
-      const uint32_t idx = pb_item.str().idx();
-      const std::string str = util::GetString(*value_pool_, idx);
-
-      const android::ResStringPool_span* spans = value_pool_->styleAt(idx);
-      if (spans && spans->name.index != android::ResStringPool_span::END) {
-        StyleString style_str = {str};
-        while (spans->name.index != android::ResStringPool_span::END) {
-          style_str.spans.push_back(
-              Span{util::GetString(*value_pool_, spans->name.index),
-                   spans->firstChar, spans->lastChar});
-          spans++;
-        }
-        return util::make_unique<StyledString>(pool->MakeRef(
-            style_str,
-            StringPool::Context(StringPool::Context::kStylePriority, config)));
-      }
       return util::make_unique<String>(
-          pool->MakeRef(str, StringPool::Context(config)));
+          pool->MakeRef(pb_item.str().value(), StringPool::Context(config)));
 
     } else if (pb_item.has_raw_str()) {
-      const uint32_t idx = pb_item.raw_str().idx();
-      const std::string str = util::GetString(*value_pool_, idx);
       return util::make_unique<RawString>(
-          pool->MakeRef(str, StringPool::Context(config)));
+          pool->MakeRef(pb_item.raw_str().value(), StringPool::Context(config)));
+
+    } else if (pb_item.has_styled_str()) {
+      const pb::StyledString& pb_str = pb_item.styled_str();
+      StyleString style_str{pb_str.value()};
+      for (const pb::StyledString::Span& pb_span : pb_str.span()) {
+        style_str.spans.push_back(Span{pb_span.tag(), pb_span.first_char(), pb_span.last_char()});
+      }
+      return util::make_unique<StyledString>(pool->MakeRef(
+          style_str, StringPool::Context(StringPool::Context::kNormalPriority, config)));
 
     } else if (pb_item.has_file()) {
-      const uint32_t idx = pb_item.file().path_idx();
-      const std::string str = util::GetString(*value_pool_, idx);
       return util::make_unique<FileReference>(pool->MakeRef(
-          str,
-          StringPool::Context(StringPool::Context::kHighPriority, config)));
+          pb_item.file().path(), StringPool::Context(StringPool::Context::kHighPriority, config)));
 
     } else {
       diag_->Error(DiagMessage(source_) << "unknown item");
@@ -223,8 +203,6 @@
   std::unique_ptr<Value> DeserializeValueFromPb(const pb::Value& pb_value,
                                                 const ConfigDescription& config,
                                                 StringPool* pool) {
-    const bool is_weak = pb_value.has_weak() ? pb_value.weak() : false;
-
     std::unique_ptr<Value> value;
     if (pb_value.has_item()) {
       value = DeserializeItemFromPb(pb_value.item(), config, pool);
@@ -236,11 +214,11 @@
       const pb::CompoundValue& pb_compound_value = pb_value.compound_value();
       if (pb_compound_value.has_attr()) {
         const pb::Attribute& pb_attr = pb_compound_value.attr();
-        std::unique_ptr<Attribute> attr = util::make_unique<Attribute>(is_weak);
+        std::unique_ptr<Attribute> attr = util::make_unique<Attribute>();
         attr->type_mask = pb_attr.format_flags();
         attr->min_int = pb_attr.min_int();
         attr->max_int = pb_attr.max_int();
-        for (const pb::Attribute_Symbol& pb_symbol : pb_attr.symbols()) {
+        for (const pb::Attribute_Symbol& pb_symbol : pb_attr.symbol()) {
           Attribute::Symbol symbol;
           DeserializeItemCommon(pb_symbol, &symbol.symbol);
           if (!DeserializeReferenceFromPb(pb_symbol.name(), &symbol.symbol)) {
@@ -256,20 +234,18 @@
         std::unique_ptr<Style> style = util::make_unique<Style>();
         if (pb_style.has_parent()) {
           style->parent = Reference();
-          if (!DeserializeReferenceFromPb(pb_style.parent(),
-                                          &style->parent.value())) {
+          if (!DeserializeReferenceFromPb(pb_style.parent(), &style->parent.value())) {
             return {};
           }
 
           if (pb_style.has_parent_source()) {
             Source parent_source;
-            DeserializeSourceFromPb(pb_style.parent_source(), *source_pool_,
-                                    &parent_source);
+            DeserializeSourceFromPb(pb_style.parent_source(), *source_pool_, &parent_source);
             style->parent.value().SetSource(std::move(parent_source));
           }
         }
 
-        for (const pb::Style_Entry& pb_entry : pb_style.entries()) {
+        for (const pb::Style_Entry& pb_entry : pb_style.entry()) {
           Style::Entry entry;
           DeserializeItemCommon(pb_entry, &entry.key);
           if (!DeserializeReferenceFromPb(pb_entry.key(), &entry.key)) {
@@ -289,7 +265,7 @@
       } else if (pb_compound_value.has_styleable()) {
         const pb::Styleable& pb_styleable = pb_compound_value.styleable();
         std::unique_ptr<Styleable> styleable = util::make_unique<Styleable>();
-        for (const pb::Styleable_Entry& pb_entry : pb_styleable.entries()) {
+        for (const pb::Styleable_Entry& pb_entry : pb_styleable.entry()) {
           Reference attr_ref;
           DeserializeItemCommon(pb_entry, &attr_ref);
           DeserializeReferenceFromPb(pb_entry.attr(), &attr_ref);
@@ -300,25 +276,23 @@
       } else if (pb_compound_value.has_array()) {
         const pb::Array& pb_array = pb_compound_value.array();
         std::unique_ptr<Array> array = util::make_unique<Array>();
-        for (const pb::Array_Entry& pb_entry : pb_array.entries()) {
-          std::unique_ptr<Item> item =
-              DeserializeItemFromPb(pb_entry.item(), config, pool);
+        for (const pb::Array_Element& pb_entry : pb_array.element()) {
+          std::unique_ptr<Item> item = DeserializeItemFromPb(pb_entry.item(), config, pool);
           if (!item) {
             return {};
           }
 
           DeserializeItemCommon(pb_entry, item.get());
-          array->items.push_back(std::move(item));
+          array->elements.push_back(std::move(item));
         }
         value = std::move(array);
 
       } else if (pb_compound_value.has_plural()) {
         const pb::Plural& pb_plural = pb_compound_value.plural();
         std::unique_ptr<Plural> plural = util::make_unique<Plural>();
-        for (const pb::Plural_Entry& pb_entry : pb_plural.entries()) {
+        for (const pb::Plural_Entry& pb_entry : pb_plural.entry()) {
           size_t pluralIdx = DeserializePluralEnumFromPb(pb_entry.arity());
-          plural->values[pluralIdx] =
-              DeserializeItemFromPb(pb_entry.item(), config, pool);
+          plural->values[pluralIdx] = DeserializeItemFromPb(pb_entry.item(), config, pool);
           if (!plural->values[pluralIdx]) {
             return {};
           }
@@ -338,7 +312,7 @@
 
     CHECK(value) << "forgot to set value";
 
-    value->SetWeak(is_weak);
+    value->SetWeak(pb_value.weak());
     DeserializeItemCommon(pb_value, value.get());
     return value;
   }
@@ -351,11 +325,10 @@
       out_ref->id = ResourceId(pb_ref.id());
     }
 
-    if (pb_ref.has_symbol_idx()) {
-      const std::string str_symbol = util::GetString(*symbol_pool_, pb_ref.symbol_idx());
+    if (pb_ref.has_name()) {
       ResourceNameRef name_ref;
-      if (!ResourceUtils::ParseResourceName(str_symbol, &name_ref, nullptr)) {
-        diag_->Error(DiagMessage(source_) << "invalid reference name '" << str_symbol << "'");
+      if (!ResourceUtils::ParseResourceName(pb_ref.name(), &name_ref, nullptr)) {
+        diag_->Error(DiagMessage(source_) << "invalid reference name '" << pb_ref.name() << "'");
         return false;
       }
 
@@ -378,61 +351,33 @@
   }
 
  private:
-  const android::ResStringPool* value_pool_;
   const android::ResStringPool* source_pool_;
-  const android::ResStringPool* symbol_pool_;
   const Source source_;
   IDiagnostics* diag_;
 };
 
 }  // namespace
 
-std::unique_ptr<ResourceTable> DeserializeTableFromPb(
-    const pb::ResourceTable& pb_table, const Source& source,
-    IDiagnostics* diag) {
-  // We import the android namespace because on Windows NO_ERROR is a macro, not
-  // an enum, which
+std::unique_ptr<ResourceTable> DeserializeTableFromPb(const pb::ResourceTable& pb_table,
+                                                      const Source& source, IDiagnostics* diag) {
+  // We import the android namespace because on Windows NO_ERROR is a macro, not an enum, which
   // causes errors when qualifying it with android::
   using namespace android;
 
   std::unique_ptr<ResourceTable> table = util::make_unique<ResourceTable>();
 
-  if (!pb_table.has_string_pool()) {
-    diag->Error(DiagMessage(source) << "no string pool found");
-    return {};
-  }
-
-  ResStringPool value_pool;
-  status_t result = value_pool.setTo(pb_table.string_pool().data().data(),
-                                     pb_table.string_pool().data().size());
-  if (result != NO_ERROR) {
-    diag->Error(DiagMessage(source) << "invalid string pool");
-    return {};
-  }
-
   ResStringPool source_pool;
   if (pb_table.has_source_pool()) {
-    result = source_pool.setTo(pb_table.source_pool().data().data(),
-                               pb_table.source_pool().data().size());
+    status_t result = source_pool.setTo(pb_table.source_pool().data().data(),
+                                        pb_table.source_pool().data().size());
     if (result != NO_ERROR) {
       diag->Error(DiagMessage(source) << "invalid source pool");
       return {};
     }
   }
 
-  ResStringPool symbol_pool;
-  if (pb_table.has_symbol_pool()) {
-    result = symbol_pool.setTo(pb_table.symbol_pool().data().data(),
-                               pb_table.symbol_pool().data().size());
-    if (result != NO_ERROR) {
-      diag->Error(DiagMessage(source) << "invalid symbol pool");
-      return {};
-    }
-  }
-
-  PackagePbDeserializer package_pb_deserializer(&value_pool, &source_pool,
-                                                &symbol_pool, source, diag);
-  for (const pb::Package& pb_package : pb_table.packages()) {
+  PackagePbDeserializer package_pb_deserializer(&source_pool, source, diag);
+  for (const pb::Package& pb_package : pb_table.package()) {
     if (!package_pb_deserializer.DeserializeFromPb(pb_package, table.get())) {
       return {};
     }
@@ -441,7 +386,7 @@
 }
 
 std::unique_ptr<ResourceFile> DeserializeCompiledFileFromPb(
-    const pb::CompiledFile& pb_file, const Source& source, IDiagnostics* diag) {
+    const pb::internal::CompiledFile& pb_file, const Source& source, IDiagnostics* diag) {
   std::unique_ptr<ResourceFile> file = util::make_unique<ResourceFile>();
 
   ResourceNameRef name_ref;
@@ -457,19 +402,20 @@
   file->source.path = pb_file.source_path();
   DeserializeConfigDescriptionFromPb(pb_file.config(), &file->config);
 
-  for (const pb::CompiledFile_Symbol& pb_symbol : pb_file.exported_symbols()) {
-    // Need to create an lvalue here so that nameRef can point to something
-    // real.
-    if (!ResourceUtils::ParseResourceName(pb_symbol.resource_name(),
-                                          &name_ref)) {
+  for (const pb::internal::CompiledFile_Symbol& pb_symbol : pb_file.exported_symbol()) {
+    // Need to create an lvalue here so that nameRef can point to something real.
+    if (!ResourceUtils::ParseResourceName(pb_symbol.resource_name(), &name_ref)) {
       diag->Error(DiagMessage(source)
                   << "invalid resource name for exported symbol in "
                      "compiled file header: "
                   << pb_file.resource_name());
       return {};
     }
-    file->exported_symbols.push_back(
-        SourcedResourceName{name_ref.ToResourceName(), pb_symbol.line_no()});
+    size_t line = 0u;
+    if (pb_symbol.has_source()) {
+      line = pb_symbol.source().line_number();
+    }
+    file->exported_symbols.push_back(SourcedResourceName{name_ref.ToResourceName(), line});
   }
   return file;
 }
diff --git a/tools/aapt2/proto/TableProtoSerializer.cpp b/tools/aapt2/proto/TableProtoSerializer.cpp
index d87d64e..a08df71 100644
--- a/tools/aapt2/proto/TableProtoSerializer.cpp
+++ b/tools/aapt2/proto/TableProtoSerializer.cpp
@@ -24,9 +24,9 @@
 
 #include "android-base/logging.h"
 
-using google::protobuf::io::CodedOutputStream;
-using google::protobuf::io::CodedInputStream;
-using google::protobuf::io::ZeroCopyOutputStream;
+using ::google::protobuf::io::CodedInputStream;
+using ::google::protobuf::io::CodedOutputStream;
+using ::google::protobuf::io::ZeroCopyOutputStream;
 
 namespace aapt {
 
@@ -36,46 +36,46 @@
  public:
   using RawValueVisitor::Visit;
 
-  /**
-   * Constructor to use when expecting to serialize any value.
-   */
-  PbSerializerVisitor(StringPool* source_pool, StringPool* symbol_pool,
-                      pb::Value* out_pb_value)
-      : source_pool_(source_pool),
-        symbol_pool_(symbol_pool),
-        out_pb_value_(out_pb_value),
-        out_pb_item_(nullptr) {}
+  // Constructor to use when expecting to serialize any value.
+  PbSerializerVisitor(StringPool* source_pool, pb::Value* out_pb_value)
+      : source_pool_(source_pool), out_pb_value_(out_pb_value), out_pb_item_(nullptr) {
+  }
 
-  /**
-   * Constructor to use when expecting to serialize an Item.
-   */
-  PbSerializerVisitor(StringPool* sourcePool, StringPool* symbolPool,
-                      pb::Item* outPbItem)
-      : source_pool_(sourcePool),
-        symbol_pool_(symbolPool),
-        out_pb_value_(nullptr),
-        out_pb_item_(outPbItem) {}
+  // Constructor to use when expecting to serialize an Item.
+  PbSerializerVisitor(StringPool* sourcePool, pb::Item* outPbItem)
+      : source_pool_(sourcePool), out_pb_value_(nullptr), out_pb_item_(outPbItem) {
+  }
 
   void Visit(Reference* ref) override {
     SerializeReferenceToPb(*ref, pb_item()->mutable_ref());
   }
 
   void Visit(String* str) override {
-    pb_item()->mutable_str()->set_idx(str->value.index());
+    pb_item()->mutable_str()->set_value(*str->value);
+  }
+
+  void Visit(RawString* str) override {
+    pb_item()->mutable_raw_str()->set_value(*str->value);
   }
 
   void Visit(StyledString* str) override {
-    pb_item()->mutable_str()->set_idx(str->value.index());
+    pb::StyledString* pb_str = pb_item()->mutable_styled_str();
+    pb_str->set_value(str->value->value);
+
+    for (const StringPool::Span& span : str->value->spans) {
+      pb::StyledString::Span* pb_span = pb_str->add_span();
+      pb_span->set_tag(*span.name);
+      pb_span->set_first_char(span.first_char);
+      pb_span->set_last_char(span.last_char);
+    }
   }
 
   void Visit(FileReference* file) override {
-    pb_item()->mutable_file()->set_path_idx(file->path.index());
+    pb_item()->mutable_file()->set_path(*file->path);
   }
 
-  void Visit(Id* id) override { pb_item()->mutable_id(); }
-
-  void Visit(RawString* raw_str) override {
-    pb_item()->mutable_raw_str()->set_idx(raw_str->value.index());
+  void Visit(Id* /*id*/) override {
+    pb_item()->mutable_id();
   }
 
   void Visit(BinaryPrimitive* prim) override {
@@ -87,7 +87,9 @@
     pb_prim->set_data(val.data);
   }
 
-  void VisitItem(Item* item) override { LOG(FATAL) << "unimplemented item"; }
+  void VisitItem(Item* item) override {
+    LOG(FATAL) << "unimplemented item";
+  }
 
   void Visit(Attribute* attr) override {
     pb::Attribute* pb_attr = pb_compound_value()->mutable_attr();
@@ -96,7 +98,7 @@
     pb_attr->set_max_int(attr->max_int);
 
     for (auto& symbol : attr->symbols) {
-      pb::Attribute_Symbol* pb_symbol = pb_attr->add_symbols();
+      pb::Attribute_Symbol* pb_symbol = pb_attr->add_symbol();
       SerializeItemCommonToPb(symbol.symbol, pb_symbol);
       SerializeReferenceToPb(symbol.symbol, pb_symbol->mutable_name());
       pb_symbol->set_value(symbol.value);
@@ -112,12 +114,12 @@
     }
 
     for (Style::Entry& entry : style->entries) {
-      pb::Style_Entry* pb_entry = pb_style->add_entries();
+      pb::Style_Entry* pb_entry = pb_style->add_entry();
       SerializeReferenceToPb(entry.key, pb_entry->mutable_key());
 
       pb::Item* pb_item = pb_entry->mutable_item();
       SerializeItemCommonToPb(entry.key, pb_entry);
-      PbSerializerVisitor sub_visitor(source_pool_, symbol_pool_, pb_item);
+      PbSerializerVisitor sub_visitor(source_pool_, pb_item);
       entry.value->Accept(&sub_visitor);
     }
   }
@@ -125,7 +127,7 @@
   void Visit(Styleable* styleable) override {
     pb::Styleable* pb_styleable = pb_compound_value()->mutable_styleable();
     for (Reference& entry : styleable->entries) {
-      pb::Styleable_Entry* pb_entry = pb_styleable->add_entries();
+      pb::Styleable_Entry* pb_entry = pb_styleable->add_entry();
       SerializeItemCommonToPb(entry, pb_entry);
       SerializeReferenceToPb(entry, pb_entry->mutable_attr());
     }
@@ -133,11 +135,10 @@
 
   void Visit(Array* array) override {
     pb::Array* pb_array = pb_compound_value()->mutable_array();
-    for (auto& value : array->items) {
-      pb::Array_Entry* pb_entry = pb_array->add_entries();
-      SerializeItemCommonToPb(*value, pb_entry);
-      PbSerializerVisitor sub_visitor(source_pool_, symbol_pool_,
-                                      pb_entry->mutable_item());
+    for (auto& value : array->elements) {
+      pb::Array_Element* pb_element = pb_array->add_element();
+      SerializeItemCommonToPb(*value, pb_element);
+      PbSerializerVisitor sub_visitor(source_pool_, pb_element->mutable_item());
       value->Accept(&sub_visitor);
     }
   }
@@ -151,11 +152,11 @@
         continue;
       }
 
-      pb::Plural_Entry* pb_entry = pb_plural->add_entries();
+      pb::Plural_Entry* pb_entry = pb_plural->add_entry();
       pb_entry->set_arity(SerializePluralEnumToPb(i));
       pb::Item* pb_element = pb_entry->mutable_item();
       SerializeItemCommonToPb(*plural->values[i], pb_entry);
-      PbSerializerVisitor sub_visitor(source_pool_, symbol_pool_, pb_element);
+      PbSerializerVisitor sub_visitor(source_pool_, pb_element);
       plural->values[i]->Accept(&sub_visitor);
     }
   }
@@ -177,8 +178,7 @@
 
   template <typename T>
   void SerializeItemCommonToPb(const Item& item, T* pb_item) {
-    SerializeSourceToPb(item.GetSource(), source_pool_,
-                        pb_item->mutable_source());
+    SerializeSourceToPb(item.GetSource(), source_pool_, pb_item->mutable_source());
     if (!item.GetComment().empty()) {
       pb_item->set_comment(item.GetComment());
     }
@@ -190,8 +190,7 @@
     }
 
     if (ref.name) {
-      StringPool::Ref symbol_ref = symbol_pool_->MakeRef(ref.name.value().ToString());
-      pb_ref->set_symbol_idx(static_cast<uint32_t>(symbol_ref.index()));
+      pb_ref->set_name(ref.name.value().ToString());
     }
 
     pb_ref->set_private_(ref.private_reference);
@@ -199,7 +198,6 @@
   }
 
   StringPool* source_pool_;
-  StringPool* symbol_pool_;
   pb::Value* out_pb_value_;
   pb::Item* out_pb_item_;
 };
@@ -207,41 +205,35 @@
 }  // namespace
 
 std::unique_ptr<pb::ResourceTable> SerializeTableToPb(ResourceTable* table) {
-  // We must do this before writing the resources, since the string pool IDs may
-  // change.
-  table->string_pool.Sort(
-      [](const StringPool::Entry& a, const StringPool::Entry& b) -> bool {
-        int diff = a.context.priority - b.context.priority;
-        if (diff < 0) return true;
-        if (diff > 0) return false;
-        diff = a.context.config.compare(b.context.config);
-        if (diff < 0) return true;
-        if (diff > 0) return false;
-        return a.value < b.value;
-      });
+  // We must do this before writing the resources, since the string pool IDs may change.
   table->string_pool.Prune();
+  table->string_pool.Sort([](const StringPool::Context& a, const StringPool::Context& b) -> int {
+    int diff = util::compare(a.priority, b.priority);
+    if (diff == 0) {
+      diff = a.config.compare(b.config);
+    }
+    return diff;
+  });
 
   auto pb_table = util::make_unique<pb::ResourceTable>();
-  SerializeStringPoolToPb(table->string_pool, pb_table->mutable_string_pool());
-
-  StringPool source_pool, symbol_pool;
+  StringPool source_pool;
 
   for (auto& package : table->packages) {
-    pb::Package* pb_package = pb_table->add_packages();
+    pb::Package* pb_package = pb_table->add_package();
     if (package->id) {
       pb_package->set_package_id(package->id.value());
     }
     pb_package->set_package_name(package->name);
 
     for (auto& type : package->types) {
-      pb::Type* pb_type = pb_package->add_types();
+      pb::Type* pb_type = pb_package->add_type();
       if (type->id) {
         pb_type->set_id(type->id.value());
       }
       pb_type->set_name(ToString(type->type).to_string());
 
       for (auto& entry : type->entries) {
-        pb::Entry* pb_entry = pb_type->add_entries();
+        pb::Entry* pb_entry = pb_type->add_entry();
         if (entry->id) {
           pb_entry->set_id(entry->id.value());
         }
@@ -255,7 +247,7 @@
         pb_status->set_allow_new(entry->symbol_status.allow_new);
 
         for (auto& config_value : entry->values) {
-          pb::ConfigValue* pb_config_value = pb_entry->add_config_values();
+          pb::ConfigValue* pb_config_value = pb_entry->add_config_value();
           SerializeConfig(config_value->config, pb_config_value->mutable_config());
           if (!config_value->product.empty()) {
             pb_config_value->mutable_config()->set_product(config_value->product);
@@ -272,7 +264,7 @@
             pb_value->set_weak(true);
           }
 
-          PbSerializerVisitor visitor(&source_pool, &symbol_pool, pb_value);
+          PbSerializerVisitor visitor(&source_pool, pb_value);
           config_value->value->Accept(&visitor);
         }
       }
@@ -280,27 +272,25 @@
   }
 
   SerializeStringPoolToPb(source_pool, pb_table->mutable_source_pool());
-  SerializeStringPoolToPb(symbol_pool, pb_table->mutable_symbol_pool());
   return pb_table;
 }
 
-std::unique_ptr<pb::CompiledFile> SerializeCompiledFileToPb(
-    const ResourceFile& file) {
-  auto pb_file = util::make_unique<pb::CompiledFile>();
+std::unique_ptr<pb::internal::CompiledFile> SerializeCompiledFileToPb(const ResourceFile& file) {
+  auto pb_file = util::make_unique<pb::internal::CompiledFile>();
   pb_file->set_resource_name(file.name.ToString());
   pb_file->set_source_path(file.source.path);
   SerializeConfig(file.config, pb_file->mutable_config());
 
   for (const SourcedResourceName& exported : file.exported_symbols) {
-    pb::CompiledFile_Symbol* pb_symbol = pb_file->add_exported_symbols();
+    pb::internal::CompiledFile_Symbol* pb_symbol = pb_file->add_exported_symbol();
     pb_symbol->set_resource_name(exported.name.ToString());
-    pb_symbol->set_line_no(exported.line);
+    pb_symbol->mutable_source()->set_line_number(exported.line);
   }
   return pb_file;
 }
 
-CompiledFileOutputStream::CompiledFileOutputStream(ZeroCopyOutputStream* out)
-    : out_(out) {}
+CompiledFileOutputStream::CompiledFileOutputStream(ZeroCopyOutputStream* out) : out_(out) {
+}
 
 void CompiledFileOutputStream::EnsureAlignedWrite() {
   const int padding = out_.ByteCount() % 4;
@@ -315,8 +305,7 @@
   out_.WriteLittleEndian32(val);
 }
 
-void CompiledFileOutputStream::WriteCompiledFile(
-    const pb::CompiledFile* compiled_file) {
+void CompiledFileOutputStream::WriteCompiledFile(const pb::internal::CompiledFile* compiled_file) {
   EnsureAlignedWrite();
   out_.WriteLittleEndian64(static_cast<uint64_t>(compiled_file->ByteSize()));
   compiled_file->SerializeWithCachedSizes(&out_);
@@ -336,7 +325,9 @@
   out_.WriteRaw(data, len);
 }
 
-bool CompiledFileOutputStream::HadError() { return out_.HadError(); }
+bool CompiledFileOutputStream::HadError() {
+  return out_.HadError();
+}
 
 CompiledFileInputStream::CompiledFileInputStream(const void* data, size_t size)
     : in_(static_cast<const uint8_t*>(data), size) {}
@@ -354,7 +345,7 @@
   return in_.ReadLittleEndian32(out_val);
 }
 
-bool CompiledFileInputStream::ReadCompiledFile(pb::CompiledFile* out_val) {
+bool CompiledFileInputStream::ReadCompiledFile(pb::internal::CompiledFile* out_val) {
   EnsureAlignedRead();
 
   google::protobuf::uint64 pb_size = 0u;
@@ -381,8 +372,7 @@
   return true;
 }
 
-bool CompiledFileInputStream::ReadDataMetaData(uint64_t* out_offset,
-                                               uint64_t* out_len) {
+bool CompiledFileInputStream::ReadDataMetaData(uint64_t* out_offset, uint64_t* out_len) {
   EnsureAlignedRead();
 
   google::protobuf::uint64 pb_size = 0u;
diff --git a/tools/aapt2/proto/TableProtoSerializer_test.cpp b/tools/aapt2/proto/TableProtoSerializer_test.cpp
index e6ce6d3..80608b3 100644
--- a/tools/aapt2/proto/TableProtoSerializer_test.cpp
+++ b/tools/aapt2/proto/TableProtoSerializer_test.cpp
@@ -20,6 +20,9 @@
 #include "test/Test.h"
 
 using ::google::protobuf::io::StringOutputStream;
+using ::testing::Eq;
+using ::testing::NotNull;
+using ::testing::SizeIs;
 
 namespace aapt {
 
@@ -37,21 +40,29 @@
 
   Symbol public_symbol;
   public_symbol.state = SymbolState::kPublic;
-  ASSERT_TRUE(table->SetSymbolState(
-      test::ParseNameOrDie("com.app.a:layout/main"), ResourceId(0x7f020000),
-      public_symbol, context->GetDiagnostics()));
+  ASSERT_TRUE(table->SetSymbolState(test::ParseNameOrDie("com.app.a:layout/main"),
+                                    ResourceId(0x7f020000), public_symbol,
+                                    context->GetDiagnostics()));
 
   Id* id = test::GetValue<Id>(table.get(), "com.app.a:id/foo");
-  ASSERT_NE(nullptr, id);
+  ASSERT_THAT(id, NotNull());
 
   // Make a plural.
   std::unique_ptr<Plural> plural = util::make_unique<Plural>();
-  plural->values[Plural::One] =
-      util::make_unique<String>(table->string_pool.MakeRef("one"));
+  plural->values[Plural::One] = util::make_unique<String>(table->string_pool.MakeRef("one"));
   ASSERT_TRUE(table->AddResource(test::ParseNameOrDie("com.app.a:plurals/hey"),
                                  ConfigDescription{}, {}, std::move(plural),
                                  context->GetDiagnostics()));
 
+  // Make a styled string.
+  StyleString style_string;
+  style_string.str = "hello";
+  style_string.spans.push_back(Span{"b", 0u, 4u});
+  ASSERT_TRUE(
+      table->AddResource(test::ParseNameOrDie("com.app.a:string/styled"), ConfigDescription{}, {},
+                         util::make_unique<StyledString>(table->string_pool.MakeRef(style_string)),
+                         context->GetDiagnostics()));
+
   // Make a resource with different products.
   ASSERT_TRUE(table->AddResource(
       test::ParseNameOrDie("com.app.a:integer/one"),
@@ -65,9 +76,8 @@
       context->GetDiagnostics()));
 
   // Make a reference with both resource name and resource ID.
-  // The reference should point to a resource outside of this table to test that
-  // both
-  // name and id get serialized.
+  // The reference should point to a resource outside of this table to test that both name and id
+  // get serialized.
   Reference expected_ref;
   expected_ref.name = test::ParseNameOrDie("android:layout/main");
   expected_ref.id = ResourceId(0x01020000);
@@ -77,44 +87,53 @@
                                  context->GetDiagnostics()));
 
   std::unique_ptr<pb::ResourceTable> pb_table = SerializeTableToPb(table.get());
-  ASSERT_NE(nullptr, pb_table);
+  ASSERT_THAT(pb_table, NotNull());
 
   std::unique_ptr<ResourceTable> new_table = DeserializeTableFromPb(
       *pb_table, Source{"test"}, context->GetDiagnostics());
-  ASSERT_NE(nullptr, new_table);
+  ASSERT_THAT(new_table, NotNull());
 
   Id* new_id = test::GetValue<Id>(new_table.get(), "com.app.a:id/foo");
-  ASSERT_NE(nullptr, new_id);
-  EXPECT_EQ(id->IsWeak(), new_id->IsWeak());
+  ASSERT_THAT(new_id, NotNull());
+  EXPECT_THAT(new_id->IsWeak(), Eq(id->IsWeak()));
 
   Maybe<ResourceTable::SearchResult> result =
       new_table->FindResource(test::ParseNameOrDie("com.app.a:layout/main"));
-  AAPT_ASSERT_TRUE(result);
-  EXPECT_EQ(SymbolState::kPublic, result.value().type->symbol_status.state);
-  EXPECT_EQ(SymbolState::kPublic, result.value().entry->symbol_status.state);
+  ASSERT_TRUE(result);
+
+  EXPECT_THAT(result.value().type->symbol_status.state, Eq(SymbolState::kPublic));
+  EXPECT_THAT(result.value().entry->symbol_status.state, Eq(SymbolState::kPublic));
 
   result = new_table->FindResource(test::ParseNameOrDie("com.app.a:bool/foo"));
   ASSERT_TRUE(result);
-  EXPECT_EQ(SymbolState::kUndefined, result.value().entry->symbol_status.state);
+  EXPECT_THAT(result.value().entry->symbol_status.state, Eq(SymbolState::kUndefined));
   EXPECT_TRUE(result.value().entry->symbol_status.allow_new);
 
   // Find the product-dependent values
   BinaryPrimitive* prim = test::GetValueForConfigAndProduct<BinaryPrimitive>(
       new_table.get(), "com.app.a:integer/one", test::ParseConfigOrDie("land"), "");
-  ASSERT_NE(nullptr, prim);
-  EXPECT_EQ(123u, prim->value.data);
+  ASSERT_THAT(prim, NotNull());
+  EXPECT_THAT(prim->value.data, Eq(123u));
 
   prim = test::GetValueForConfigAndProduct<BinaryPrimitive>(
       new_table.get(), "com.app.a:integer/one", test::ParseConfigOrDie("land"), "tablet");
-  ASSERT_NE(nullptr, prim);
-  EXPECT_EQ(321u, prim->value.data);
+  ASSERT_THAT(prim, NotNull());
+  EXPECT_THAT(prim->value.data, Eq(321u));
 
   Reference* actual_ref = test::GetValue<Reference>(new_table.get(), "com.app.a:layout/abc");
-  ASSERT_NE(nullptr, actual_ref);
-  AAPT_ASSERT_TRUE(actual_ref->name);
-  AAPT_ASSERT_TRUE(actual_ref->id);
-  EXPECT_EQ(expected_ref.name.value(), actual_ref->name.value());
-  EXPECT_EQ(expected_ref.id.value(), actual_ref->id.value());
+  ASSERT_THAT(actual_ref, NotNull());
+  ASSERT_TRUE(actual_ref->name);
+  ASSERT_TRUE(actual_ref->id);
+  EXPECT_THAT(*actual_ref, Eq(expected_ref));
+
+  StyledString* actual_styled_str =
+      test::GetValue<StyledString>(new_table.get(), "com.app.a:string/styled");
+  ASSERT_THAT(actual_styled_str, NotNull());
+  EXPECT_THAT(actual_styled_str->value->value, Eq("hello"));
+  ASSERT_THAT(actual_styled_str->value->spans, SizeIs(1u));
+  EXPECT_THAT(*actual_styled_str->value->spans[0].name, Eq("b"));
+  EXPECT_THAT(actual_styled_str->value->spans[0].first_char, Eq(0u));
+  EXPECT_THAT(actual_styled_str->value->spans[0].last_char, Eq(4u));
 }
 
 TEST(TableProtoSerializer, SerializeFileHeader) {
@@ -132,10 +151,10 @@
 
   std::string output_str;
   {
-    std::unique_ptr<pb::CompiledFile> pb_file1 = SerializeCompiledFileToPb(f);
+    std::unique_ptr<pb::internal::CompiledFile> pb_file1 = SerializeCompiledFileToPb(f);
 
     f.name.entry = "__" + f.name.entry + "$0";
-    std::unique_ptr<pb::CompiledFile> pb_file2 = SerializeCompiledFileToPb(f);
+    std::unique_ptr<pb::internal::CompiledFile> pb_file2 = SerializeCompiledFileToPb(f);
 
     StringOutputStream out_stream(&output_str);
     CompiledFileOutputStream out_file_stream(&out_stream);
@@ -154,12 +173,12 @@
 
   // Read the first compiled file.
 
-  pb::CompiledFile new_pb_file;
+  pb::internal::CompiledFile new_pb_file;
   ASSERT_TRUE(in_file_stream.ReadCompiledFile(&new_pb_file));
 
   std::unique_ptr<ResourceFile> file = DeserializeCompiledFileFromPb(
       new_pb_file, Source("test"), context->GetDiagnostics());
-  ASSERT_NE(nullptr, file);
+  ASSERT_THAT(file, NotNull());
 
   uint64_t offset, len;
   ASSERT_TRUE(in_file_stream.ReadDataMetaData(&offset, &len));
@@ -171,16 +190,14 @@
   EXPECT_EQ(0u, offset & 0x03);
 
   ASSERT_EQ(1u, file->exported_symbols.size());
-  EXPECT_EQ(test::ParseNameOrDie("id/unchecked"),
-            file->exported_symbols[0].name);
+  EXPECT_EQ(test::ParseNameOrDie("id/unchecked"), file->exported_symbols[0].name);
 
   // Read the second compiled file.
 
   ASSERT_TRUE(in_file_stream.ReadCompiledFile(&new_pb_file));
 
-  file = DeserializeCompiledFileFromPb(new_pb_file, Source("test"),
-                                       context->GetDiagnostics());
-  ASSERT_NE(nullptr, file);
+  file = DeserializeCompiledFileFromPb(new_pb_file, Source("test"), context->GetDiagnostics());
+  ASSERT_THAT(file, NotNull());
 
   ASSERT_TRUE(in_file_stream.ReadDataMetaData(&offset, &len));
 
@@ -193,7 +210,7 @@
 
 TEST(TableProtoSerializer, DeserializeCorruptHeaderSafely) {
   ResourceFile f;
-  std::unique_ptr<pb::CompiledFile> pb_file = SerializeCompiledFileToPb(f);
+  std::unique_ptr<pb::internal::CompiledFile> pb_file = SerializeCompiledFileToPb(f);
 
   const std::string expected_data = "1234";
 
@@ -215,7 +232,7 @@
   EXPECT_TRUE(in_file_stream.ReadLittleEndian32(&num_files));
   EXPECT_EQ(1u, num_files);
 
-  pb::CompiledFile new_pb_file;
+  pb::internal::CompiledFile new_pb_file;
   EXPECT_FALSE(in_file_stream.ReadCompiledFile(&new_pb_file));
 
   uint64_t offset, len;
diff --git a/tools/aapt2/readme.md b/tools/aapt2/readme.md
index 0290e30..8368f9d 100644
--- a/tools/aapt2/readme.md
+++ b/tools/aapt2/readme.md
@@ -1,9 +1,45 @@
 # Android Asset Packaging Tool 2.0 (AAPT2) release notes
 
+## Version 2.19
+- Added navigation resource type.
+- Fixed issue with resource deduplication. (bug 64397629)
+- Added a daemon mode for issuing commands. This is invoked with `aapt2 daemon`.
+  Command line arguments are separated by newlines, with an empty line signalling the
+  end of a command. Sending `EOF (Ctrl+D)` to the daemon will exit.
+- Fixed an issue where multiple permissions defined in AndroidManifest.xml would generate
+  conflicting definitions for the same Java constant in Manifest.java. Changed the implementation
+  to match that of `aapt`, which will take the last definition as the sole definition.
+  A warning is logged if such a scenario occurs. (bug 64472942)
+- Made improvements to handling of paths on Windows. This should resolve a lot of issues with
+  Unicode paths. (bug 62336414, 63830502)
+
+## Version 2.18
+### `aapt2 ...`
+- Fixed issue where enum values were interpreted as integers and range checked. (bug 62358540)
+- Fixed issue where ints and floats with trailing whitespace would not be parsed. (bug 62902869)
+- Fixed issue where `--custom-package` was not honored when writing Manifest.java. (bug 62826426)
+- Add `<key-sets>` and its nested tags to the allowed set of XML tags in AndroidManifest.xml.
+  (bug 62839863)
+- Fixed issue where Java classes referenced from fragments and menus were not added to
+  the set of Proguard keep rules. (bug 62216174)
+- Fixed issue where escaped unicode characters would generate malformed UTF-8. (bug 62839202)
+- Fixed issue where apostrophes or quotes used in XML attribute values were ignored.
+  (bug 62840406, 62840718)
+
 ## Version 2.17
-### `aapt2 compile ...`
-- Fixed an issue where symlinks would not be followed when compiling PNGs. (bug 62144459)
+### `aapt2 ...`
+- Fixed issue where symlinks would not be followed when compiling PNGs. (bug 62144459)
 - Fixed issue where overlays that declared `<add-resource>` did not compile. (bug 38355988)
+- Fixed issue where `%n` in a string resource was interpreted as a format argument. (bug 37132275)
+- Allow empty resources to compile, giving them a value of `""` or `@null`, depending on the
+  accepted formats. (bug 38425050)
+- Resources declared via `<item>` with no format attribute were changed to accept all
+  resource types. (bug 62260121)
+- Allow `<layout>` element under `<activity>` in AndroidManifest.xml. (bug 62189611)
+- Fix issue where `--no-version-vector` did not apply to `pathInterpolator` and `objectAnimator`.
+  (bug 62211148)
+- Fix issue where overlaid `<style>` would not be merged, and would replace the original resource
+  instead. This fix brings behavior in-line with AAPT. (bug 38355988)
 
 ## Version 2.16
 ### `aapt2 link ...`
diff --git a/tools/aapt2/test/Builders.cpp b/tools/aapt2/test/Builders.cpp
new file mode 100644
index 0000000..8f9788e
--- /dev/null
+++ b/tools/aapt2/test/Builders.cpp
@@ -0,0 +1,216 @@
+/*
+ * 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.
+ */
+
+#include "test/Builders.h"
+
+#include "android-base/logging.h"
+#include "androidfw/StringPiece.h"
+
+#include "io/StringInputStream.h"
+#include "test/Common.h"
+#include "util/Util.h"
+
+using ::aapt::io::StringInputStream;
+using ::android::StringPiece;
+
+namespace aapt {
+namespace test {
+
+ResourceTableBuilder& ResourceTableBuilder::SetPackageId(const StringPiece& package_name,
+                                                         uint8_t id) {
+  ResourceTablePackage* package = table_->CreatePackage(package_name, id);
+  CHECK(package != nullptr);
+  return *this;
+}
+
+ResourceTableBuilder& ResourceTableBuilder::AddSimple(const StringPiece& name,
+                                                      const ResourceId& id) {
+  return AddValue(name, id, util::make_unique<Id>());
+}
+
+ResourceTableBuilder& ResourceTableBuilder::AddSimple(const StringPiece& name,
+                                                      const ConfigDescription& config,
+                                                      const ResourceId& id) {
+  return AddValue(name, config, id, util::make_unique<Id>());
+}
+
+ResourceTableBuilder& ResourceTableBuilder::AddReference(const StringPiece& name,
+                                                         const StringPiece& ref) {
+  return AddReference(name, {}, ref);
+}
+
+ResourceTableBuilder& ResourceTableBuilder::AddReference(const StringPiece& name,
+                                                         const ResourceId& id,
+                                                         const StringPiece& ref) {
+  return AddValue(name, id, util::make_unique<Reference>(ParseNameOrDie(ref)));
+}
+
+ResourceTableBuilder& ResourceTableBuilder::AddString(const StringPiece& name,
+                                                      const StringPiece& str) {
+  return AddString(name, {}, str);
+}
+
+ResourceTableBuilder& ResourceTableBuilder::AddString(const StringPiece& name, const ResourceId& id,
+                                                      const StringPiece& str) {
+  return AddValue(name, id, util::make_unique<String>(table_->string_pool.MakeRef(str)));
+}
+
+ResourceTableBuilder& ResourceTableBuilder::AddString(const StringPiece& name, const ResourceId& id,
+                                                      const ConfigDescription& config,
+                                                      const StringPiece& str) {
+  return AddValue(name, config, id, util::make_unique<String>(table_->string_pool.MakeRef(str)));
+}
+
+ResourceTableBuilder& ResourceTableBuilder::AddFileReference(const StringPiece& name,
+                                                             const StringPiece& path) {
+  return AddFileReference(name, {}, path);
+}
+
+ResourceTableBuilder& ResourceTableBuilder::AddFileReference(const StringPiece& name,
+                                                             const ResourceId& id,
+                                                             const StringPiece& path) {
+  return AddValue(name, id, util::make_unique<FileReference>(table_->string_pool.MakeRef(path)));
+}
+
+ResourceTableBuilder& ResourceTableBuilder::AddFileReference(const StringPiece& name,
+                                                             const StringPiece& path,
+                                                             const ConfigDescription& config) {
+  return AddValue(name, config, {},
+                  util::make_unique<FileReference>(table_->string_pool.MakeRef(path)));
+}
+
+ResourceTableBuilder& ResourceTableBuilder::AddValue(const StringPiece& name,
+                                                     std::unique_ptr<Value> value) {
+  return AddValue(name, {}, std::move(value));
+}
+
+ResourceTableBuilder& ResourceTableBuilder::AddValue(const StringPiece& name, const ResourceId& id,
+                                                     std::unique_ptr<Value> value) {
+  return AddValue(name, {}, id, std::move(value));
+}
+
+ResourceTableBuilder& ResourceTableBuilder::AddValue(const StringPiece& name,
+                                                     const ConfigDescription& config,
+                                                     const ResourceId& id,
+                                                     std::unique_ptr<Value> value) {
+  ResourceName res_name = ParseNameOrDie(name);
+  CHECK(table_->AddResourceAllowMangled(res_name, id, config, {}, std::move(value),
+                                        GetDiagnostics()));
+  return *this;
+}
+
+ResourceTableBuilder& ResourceTableBuilder::SetSymbolState(const StringPiece& name,
+                                                           const ResourceId& id, SymbolState state,
+                                                           bool allow_new) {
+  ResourceName res_name = ParseNameOrDie(name);
+  Symbol symbol;
+  symbol.state = state;
+  symbol.allow_new = allow_new;
+  CHECK(table_->SetSymbolStateAllowMangled(res_name, id, symbol, GetDiagnostics()));
+  return *this;
+}
+
+StringPool* ResourceTableBuilder::string_pool() {
+  return &table_->string_pool;
+}
+
+std::unique_ptr<ResourceTable> ResourceTableBuilder::Build() {
+  return std::move(table_);
+}
+
+std::unique_ptr<Reference> BuildReference(const StringPiece& ref, const Maybe<ResourceId>& id) {
+  std::unique_ptr<Reference> reference = util::make_unique<Reference>(ParseNameOrDie(ref));
+  reference->id = id;
+  return reference;
+}
+
+std::unique_ptr<BinaryPrimitive> BuildPrimitive(uint8_t type, uint32_t data) {
+  android::Res_value value = {};
+  value.size = sizeof(value);
+  value.dataType = type;
+  value.data = data;
+  return util::make_unique<BinaryPrimitive>(value);
+}
+
+AttributeBuilder::AttributeBuilder(bool weak) : attr_(util::make_unique<Attribute>(weak)) {
+  attr_->type_mask = android::ResTable_map::TYPE_ANY;
+}
+
+AttributeBuilder& AttributeBuilder::SetTypeMask(uint32_t typeMask) {
+  attr_->type_mask = typeMask;
+  return *this;
+}
+
+AttributeBuilder& AttributeBuilder::AddItem(const StringPiece& name, uint32_t value) {
+  attr_->symbols.push_back(
+      Attribute::Symbol{Reference(ResourceName({}, ResourceType::kId, name)), value});
+  return *this;
+}
+
+std::unique_ptr<Attribute> AttributeBuilder::Build() {
+  return std::move(attr_);
+}
+
+StyleBuilder& StyleBuilder::SetParent(const StringPiece& str) {
+  style_->parent = Reference(ParseNameOrDie(str));
+  return *this;
+}
+
+StyleBuilder& StyleBuilder::AddItem(const StringPiece& str, std::unique_ptr<Item> value) {
+  style_->entries.push_back(Style::Entry{Reference(ParseNameOrDie(str)), std::move(value)});
+  return *this;
+}
+
+StyleBuilder& StyleBuilder::AddItem(const StringPiece& str, const ResourceId& id,
+                                    std::unique_ptr<Item> value) {
+  AddItem(str, std::move(value));
+  style_->entries.back().key.id = id;
+  return *this;
+}
+
+std::unique_ptr<Style> StyleBuilder::Build() {
+  return std::move(style_);
+}
+
+StyleableBuilder& StyleableBuilder::AddItem(const StringPiece& str, const Maybe<ResourceId>& id) {
+  styleable_->entries.push_back(Reference(ParseNameOrDie(str)));
+  styleable_->entries.back().id = id;
+  return *this;
+}
+
+std::unique_ptr<Styleable> StyleableBuilder::Build() {
+  return std::move(styleable_);
+}
+
+std::unique_ptr<xml::XmlResource> BuildXmlDom(const StringPiece& str) {
+  std::string input = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
+  input.append(str.data(), str.size());
+  StringInputStream in(input);
+  StdErrDiagnostics diag;
+  std::unique_ptr<xml::XmlResource> doc = xml::Inflate(&in, &diag, Source("test.xml"));
+  CHECK(doc != nullptr && doc->root != nullptr) << "failed to parse inline XML string";
+  return doc;
+}
+
+std::unique_ptr<xml::XmlResource> BuildXmlDomForPackageName(IAaptContext* context,
+                                                            const StringPiece& str) {
+  std::unique_ptr<xml::XmlResource> doc = BuildXmlDom(str);
+  doc->file.name.package = context->GetCompilationPackage();
+  return doc;
+}
+
+}  // namespace test
+}  // namespace aapt
diff --git a/tools/aapt2/test/Builders.h b/tools/aapt2/test/Builders.h
index f3da780..d9f3912 100644
--- a/tools/aapt2/test/Builders.h
+++ b/tools/aapt2/test/Builders.h
@@ -19,13 +19,13 @@
 
 #include <memory>
 
-#include "android-base/logging.h"
 #include "android-base/macros.h"
 
+#include "Resource.h"
 #include "ResourceTable.h"
 #include "ResourceValues.h"
-#include "test/Common.h"
-#include "util/Util.h"
+#include "process/IResourceTableConsumer.h"
+#include "util/Maybe.h"
 #include "xml/XmlDom.h"
 
 namespace aapt {
@@ -35,97 +35,37 @@
  public:
   ResourceTableBuilder() = default;
 
-  StringPool* string_pool() { return &table_->string_pool; }
-
-  ResourceTableBuilder& SetPackageId(const android::StringPiece& package_name, uint8_t id) {
-    ResourceTablePackage* package = table_->CreatePackage(package_name, id);
-    CHECK(package != nullptr);
-    return *this;
-  }
-
-  ResourceTableBuilder& AddSimple(const android::StringPiece& name, const ResourceId& id = {}) {
-    return AddValue(name, id, util::make_unique<Id>());
-  }
-
+  ResourceTableBuilder& SetPackageId(const android::StringPiece& package_name, uint8_t id);
+  ResourceTableBuilder& AddSimple(const android::StringPiece& name, const ResourceId& id = {});
   ResourceTableBuilder& AddSimple(const android::StringPiece& name, const ConfigDescription& config,
-                                  const ResourceId& id = {}) {
-    return AddValue(name, config, id, util::make_unique<Id>());
-  }
-
+                                  const ResourceId& id = {});
   ResourceTableBuilder& AddReference(const android::StringPiece& name,
-                                     const android::StringPiece& ref) {
-    return AddReference(name, {}, ref);
-  }
-
+                                     const android::StringPiece& ref);
   ResourceTableBuilder& AddReference(const android::StringPiece& name, const ResourceId& id,
-                                     const android::StringPiece& ref) {
-    return AddValue(name, id, util::make_unique<Reference>(ParseNameOrDie(ref)));
-  }
-
+                                     const android::StringPiece& ref);
   ResourceTableBuilder& AddString(const android::StringPiece& name,
-                                  const android::StringPiece& str) {
-    return AddString(name, {}, str);
-  }
-
+                                  const android::StringPiece& str);
   ResourceTableBuilder& AddString(const android::StringPiece& name, const ResourceId& id,
-                                  const android::StringPiece& str) {
-    return AddValue(
-        name, id, util::make_unique<String>(table_->string_pool.MakeRef(str)));
-  }
-
+                                  const android::StringPiece& str);
   ResourceTableBuilder& AddString(const android::StringPiece& name, const ResourceId& id,
-                                  const ConfigDescription& config,
-                                  const android::StringPiece& str) {
-    return AddValue(name, config, id, util::make_unique<String>(
-                                          table_->string_pool.MakeRef(str)));
-  }
-
+                                  const ConfigDescription& config, const android::StringPiece& str);
   ResourceTableBuilder& AddFileReference(const android::StringPiece& name,
-                                         const android::StringPiece& path) {
-    return AddFileReference(name, {}, path);
-  }
-
+                                         const android::StringPiece& path);
   ResourceTableBuilder& AddFileReference(const android::StringPiece& name, const ResourceId& id,
-                                         const android::StringPiece& path) {
-    return AddValue(name, id, util::make_unique<FileReference>(
-                                  table_->string_pool.MakeRef(path)));
-  }
-
+                                         const android::StringPiece& path);
   ResourceTableBuilder& AddFileReference(const android::StringPiece& name,
                                          const android::StringPiece& path,
-                                         const ConfigDescription& config) {
-    return AddValue(name, config, {}, util::make_unique<FileReference>(
-                                          table_->string_pool.MakeRef(path)));
-  }
-
-  ResourceTableBuilder& AddValue(const android::StringPiece& name, std::unique_ptr<Value> value) {
-    return AddValue(name, {}, std::move(value));
-  }
-
+                                         const ConfigDescription& config);
+  ResourceTableBuilder& AddValue(const android::StringPiece& name, std::unique_ptr<Value> value);
   ResourceTableBuilder& AddValue(const android::StringPiece& name, const ResourceId& id,
-                                 std::unique_ptr<Value> value) {
-    return AddValue(name, {}, id, std::move(value));
-  }
-
+                                 std::unique_ptr<Value> value);
   ResourceTableBuilder& AddValue(const android::StringPiece& name, const ConfigDescription& config,
-                                 const ResourceId& id, std::unique_ptr<Value> value) {
-    ResourceName res_name = ParseNameOrDie(name);
-    CHECK(table_->AddResourceAllowMangled(res_name, id, config, {}, std::move(value),
-                                          GetDiagnostics()));
-    return *this;
-  }
-
+                                 const ResourceId& id, std::unique_ptr<Value> value);
   ResourceTableBuilder& SetSymbolState(const android::StringPiece& name, const ResourceId& id,
-                                       SymbolState state, bool allow_new = false) {
-    ResourceName res_name = ParseNameOrDie(name);
-    Symbol symbol;
-    symbol.state = state;
-    symbol.allow_new = allow_new;
-    CHECK(table_->SetSymbolStateAllowMangled(res_name, id, symbol, GetDiagnostics()));
-    return *this;
-  }
+                                       SymbolState state, bool allow_new = false);
 
-  std::unique_ptr<ResourceTable> Build() { return std::move(table_); }
+  StringPool* string_pool();
+  std::unique_ptr<ResourceTable> Build();
 
  private:
   DISALLOW_COPY_AND_ASSIGN(ResourceTableBuilder);
@@ -133,29 +73,16 @@
   std::unique_ptr<ResourceTable> table_ = util::make_unique<ResourceTable>();
 };
 
-inline std::unique_ptr<Reference> BuildReference(const android::StringPiece& ref,
-                                                 const Maybe<ResourceId>& id = {}) {
-  std::unique_ptr<Reference> reference =
-      util::make_unique<Reference>(ParseNameOrDie(ref));
-  reference->id = id;
-  return reference;
-}
-
-inline std::unique_ptr<BinaryPrimitive> BuildPrimitive(uint8_t type,
-                                                       uint32_t data) {
-  android::Res_value value = {};
-  value.size = sizeof(value);
-  value.dataType = type;
-  value.data = data;
-  return util::make_unique<BinaryPrimitive>(value);
-}
+std::unique_ptr<Reference> BuildReference(const android::StringPiece& ref,
+                                          const Maybe<ResourceId>& id = {});
+std::unique_ptr<BinaryPrimitive> BuildPrimitive(uint8_t type, uint32_t data);
 
 template <typename T>
 class ValueBuilder {
  public:
   template <typename... Args>
-  explicit ValueBuilder(Args&&... args)
-      : value_(new T{std::forward<Args>(args)...}) {}
+  explicit ValueBuilder(Args&&... args) : value_(new T{std::forward<Args>(args)...}) {
+  }
 
   template <typename... Args>
   ValueBuilder& SetSource(Args&&... args) {
@@ -168,7 +95,9 @@
     return *this;
   }
 
-  std::unique_ptr<Value> Build() { return std::move(value_); }
+  std::unique_ptr<Value> Build() {
+    return std::move(value_);
+  }
 
  private:
   DISALLOW_COPY_AND_ASSIGN(ValueBuilder);
@@ -178,23 +107,10 @@
 
 class AttributeBuilder {
  public:
-  explicit AttributeBuilder(bool weak = false)
-      : attr_(util::make_unique<Attribute>(weak)) {
-    attr_->type_mask = android::ResTable_map::TYPE_ANY;
-  }
-
-  AttributeBuilder& SetTypeMask(uint32_t typeMask) {
-    attr_->type_mask = typeMask;
-    return *this;
-  }
-
-  AttributeBuilder& AddItem(const android::StringPiece& name, uint32_t value) {
-    attr_->symbols.push_back(Attribute::Symbol{
-        Reference(ResourceName({}, ResourceType::kId, name)), value});
-    return *this;
-  }
-
-  std::unique_ptr<Attribute> Build() { return std::move(attr_); }
+  explicit AttributeBuilder(bool weak = false);
+  AttributeBuilder& SetTypeMask(uint32_t typeMask);
+  AttributeBuilder& AddItem(const android::StringPiece& name, uint32_t value);
+  std::unique_ptr<Attribute> Build();
 
  private:
   DISALLOW_COPY_AND_ASSIGN(AttributeBuilder);
@@ -205,26 +121,11 @@
 class StyleBuilder {
  public:
   StyleBuilder() = default;
-
-  StyleBuilder& SetParent(const android::StringPiece& str) {
-    style_->parent = Reference(ParseNameOrDie(str));
-    return *this;
-  }
-
-  StyleBuilder& AddItem(const android::StringPiece& str, std::unique_ptr<Item> value) {
-    style_->entries.push_back(
-        Style::Entry{Reference(ParseNameOrDie(str)), std::move(value)});
-    return *this;
-  }
-
+  StyleBuilder& SetParent(const android::StringPiece& str);
+  StyleBuilder& AddItem(const android::StringPiece& str, std::unique_ptr<Item> value);
   StyleBuilder& AddItem(const android::StringPiece& str, const ResourceId& id,
-                        std::unique_ptr<Item> value) {
-    AddItem(str, std::move(value));
-    style_->entries.back().key.id = id;
-    return *this;
-  }
-
-  std::unique_ptr<Style> Build() { return std::move(style_); }
+                        std::unique_ptr<Item> value);
+  std::unique_ptr<Style> Build();
 
  private:
   DISALLOW_COPY_AND_ASSIGN(StyleBuilder);
@@ -235,14 +136,8 @@
 class StyleableBuilder {
  public:
   StyleableBuilder() = default;
-
-  StyleableBuilder& AddItem(const android::StringPiece& str, const Maybe<ResourceId>& id = {}) {
-    styleable_->entries.push_back(Reference(ParseNameOrDie(str)));
-    styleable_->entries.back().id = id;
-    return *this;
-  }
-
-  std::unique_ptr<Styleable> Build() { return std::move(styleable_); }
+  StyleableBuilder& AddItem(const android::StringPiece& str, const Maybe<ResourceId>& id = {});
+  std::unique_ptr<Styleable> Build();
 
  private:
   DISALLOW_COPY_AND_ASSIGN(StyleableBuilder);
@@ -250,22 +145,9 @@
   std::unique_ptr<Styleable> styleable_ = util::make_unique<Styleable>();
 };
 
-inline std::unique_ptr<xml::XmlResource> BuildXmlDom(const android::StringPiece& str) {
-  std::stringstream in;
-  in << "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" << str;
-  StdErrDiagnostics diag;
-  std::unique_ptr<xml::XmlResource> doc =
-      xml::Inflate(&in, &diag, Source("test.xml"));
-  CHECK(doc != nullptr) << "failed to parse inline XML string";
-  return doc;
-}
-
-inline std::unique_ptr<xml::XmlResource> BuildXmlDomForPackageName(
-    IAaptContext* context, const android::StringPiece& str) {
-  std::unique_ptr<xml::XmlResource> doc = BuildXmlDom(str);
-  doc->file.name.package = context->GetCompilationPackage();
-  return doc;
-}
+std::unique_ptr<xml::XmlResource> BuildXmlDom(const android::StringPiece& str);
+std::unique_ptr<xml::XmlResource> BuildXmlDomForPackageName(IAaptContext* context,
+                                                            const android::StringPiece& str);
 
 }  // namespace test
 }  // namespace aapt
diff --git a/tools/aapt2/test/Common.h b/tools/aapt2/test/Common.h
index 8efd56a..e6b38c0 100644
--- a/tools/aapt2/test/Common.h
+++ b/tools/aapt2/test/Common.h
@@ -34,15 +34,6 @@
 #include "io/File.h"
 #include "process/IResourceTableConsumer.h"
 
-//
-// GTEST 1.7 doesn't explicitly cast to bool, which causes explicit operators to
-// fail to compile.
-//
-#define AAPT_ASSERT_TRUE(v) ASSERT_TRUE(bool(v))
-#define AAPT_ASSERT_FALSE(v) ASSERT_FALSE(bool(v))
-#define AAPT_EXPECT_TRUE(v) EXPECT_TRUE(bool(v))
-#define AAPT_EXPECT_FALSE(v) EXPECT_FALSE(bool(v))
-
 namespace aapt {
 namespace test {
 
@@ -151,10 +142,97 @@
   return android::StringPiece16(arg) == a;
 }
 
-MATCHER_P(ValueEq, a,
-          std::string(negation ? "isn't" : "is") + " equal to " + ::testing::PrintToString(a)) {
-  return arg.Equals(&a);
-}
+class ValueEq {
+ public:
+  template <typename arg_type>
+  class BaseImpl : public ::testing::MatcherInterface<arg_type> {
+    BaseImpl(const BaseImpl&) = default;
+
+    void DescribeTo(::std::ostream* os) const override {
+      *os << "is equal to " << *expected_;
+    }
+
+    void DescribeNegationTo(::std::ostream* os) const override {
+      *os << "is not equal to " << *expected_;
+    }
+
+   protected:
+    BaseImpl(const Value* expected) : expected_(expected) {
+    }
+
+    const Value* expected_;
+  };
+
+  template <typename T, bool>
+  class Impl {};
+
+  template <typename T>
+  class Impl<T, false> : public ::testing::MatcherInterface<T> {
+   public:
+    explicit Impl(const Value* expected) : expected_(expected) {
+    }
+
+    bool MatchAndExplain(T x, ::testing::MatchResultListener* listener) const override {
+      return expected_->Equals(&x);
+    }
+
+    void DescribeTo(::std::ostream* os) const override {
+      *os << "is equal to " << *expected_;
+    }
+
+    void DescribeNegationTo(::std::ostream* os) const override {
+      *os << "is not equal to " << *expected_;
+    }
+
+   private:
+    DISALLOW_COPY_AND_ASSIGN(Impl);
+
+    const Value* expected_;
+  };
+
+  template <typename T>
+  class Impl<T, true> : public ::testing::MatcherInterface<T> {
+   public:
+    explicit Impl(const Value* expected) : expected_(expected) {
+    }
+
+    bool MatchAndExplain(T x, ::testing::MatchResultListener* listener) const override {
+      return expected_->Equals(x);
+    }
+
+    void DescribeTo(::std::ostream* os) const override {
+      *os << "is equal to " << *expected_;
+    }
+
+    void DescribeNegationTo(::std::ostream* os) const override {
+      *os << "is not equal to " << *expected_;
+    }
+
+   private:
+    DISALLOW_COPY_AND_ASSIGN(Impl);
+
+    const Value* expected_;
+  };
+
+  ValueEq(const Value& expected) : expected_(&expected) {
+  }
+  ValueEq(const Value* expected) : expected_(expected) {
+  }
+  ValueEq(const ValueEq&) = default;
+
+  template <typename T>
+  operator ::testing::Matcher<T>() const {
+    return ::testing::Matcher<T>(new Impl<T, std::is_pointer<T>::value>(expected_));
+  }
+
+ private:
+  const Value* expected_;
+};
+
+// MATCHER_P(ValueEq, a,
+//          std::string(negation ? "isn't" : "is") + " equal to " + ::testing::PrintToString(a)) {
+//  return arg.Equals(&a);
+//}
 
 MATCHER_P(StrValueEq, a,
           std::string(negation ? "isn't" : "is") + " equal to " + ::testing::PrintToString(a)) {
diff --git a/tools/aapt2/text/Unicode.cpp b/tools/aapt2/text/Unicode.cpp
new file mode 100644
index 0000000..3735b3e
--- /dev/null
+++ b/tools/aapt2/text/Unicode.cpp
@@ -0,0 +1,126 @@
+/*
+ * 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.
+ */
+
+#include "text/Unicode.h"
+
+#include <algorithm>
+#include <array>
+
+#include "text/Utf8Iterator.h"
+
+using ::android::StringPiece;
+
+namespace aapt {
+namespace text {
+
+namespace {
+
+struct CharacterProperties {
+  enum : uint32_t {
+    kXidStart = 1 << 0,
+    kXidContinue = 1 << 1,
+  };
+
+  char32_t first_char;
+  char32_t last_char;
+  uint32_t properties;
+};
+
+// Incude the generated data table.
+#include "text/Unicode_data.cpp"
+
+bool CompareCharacterProperties(const CharacterProperties& a, char32_t codepoint) {
+  return a.last_char < codepoint;
+}
+
+uint32_t FindCharacterProperties(char32_t codepoint) {
+  const auto iter_end = sCharacterProperties.end();
+  const auto iter = std::lower_bound(sCharacterProperties.begin(), iter_end, codepoint,
+                                     CompareCharacterProperties);
+  if (iter != iter_end && codepoint >= iter->first_char) {
+    return iter->properties;
+  }
+  return 0u;
+}
+
+}  // namespace
+
+bool IsXidStart(char32_t codepoint) {
+  return FindCharacterProperties(codepoint) & CharacterProperties::kXidStart;
+}
+
+bool IsXidContinue(char32_t codepoint) {
+  return FindCharacterProperties(codepoint) & CharacterProperties::kXidContinue;
+}
+
+// Hardcode the White_Space characters since they are few and the external/icu project doesn't
+// list them as data files to parse.
+// Sourced from http://www.unicode.org/Public/UCD/latest/ucd/PropList.txt
+bool IsWhitespace(char32_t codepoint) {
+  return (codepoint >= 0x0009 && codepoint <= 0x000d) || (codepoint == 0x0020) ||
+         (codepoint == 0x0085) || (codepoint == 0x00a0) || (codepoint == 0x1680) ||
+         (codepoint >= 0x2000 && codepoint <= 0x200a) || (codepoint == 0x2028) ||
+         (codepoint == 0x2029) || (codepoint == 0x202f) || (codepoint == 0x205f) ||
+         (codepoint == 0x3000);
+}
+
+bool IsJavaIdentifier(const StringPiece& str) {
+  Utf8Iterator iter(str);
+
+  // Check the first character.
+  if (!iter.HasNext()) {
+    return false;
+  }
+
+  const char32_t first_codepoint = iter.Next();
+  if (!IsXidStart(first_codepoint) && first_codepoint != U'_' && first_codepoint != U'$') {
+    return false;
+  }
+
+  while (iter.HasNext()) {
+    const char32_t codepoint = iter.Next();
+    if (!IsXidContinue(codepoint) && codepoint != U'$') {
+      return false;
+    }
+  }
+  return true;
+}
+
+bool IsValidResourceEntryName(const StringPiece& str) {
+  Utf8Iterator iter(str);
+
+  // Check the first character.
+  if (!iter.HasNext()) {
+    return false;
+  }
+
+  // Resources are allowed to start with '_'
+  const char32_t first_codepoint = iter.Next();
+  if (!IsXidStart(first_codepoint) && first_codepoint != U'_') {
+    return false;
+  }
+
+  while (iter.HasNext()) {
+    const char32_t codepoint = iter.Next();
+    if (!IsXidContinue(codepoint) && codepoint != U'.' && codepoint != U'-') {
+      return false;
+    }
+  }
+  return true;
+}
+
+}  // namespace text
+}  // namespace aapt
diff --git a/tools/aapt2/text/Unicode.h b/tools/aapt2/text/Unicode.h
new file mode 100644
index 0000000..546714e
--- /dev/null
+++ b/tools/aapt2/text/Unicode.h
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ */
+
+#ifndef AAPT_TEXT_UNICODE_H
+#define AAPT_TEXT_UNICODE_H
+
+#include "androidfw/StringPiece.h"
+
+namespace aapt {
+namespace text {
+
+// Returns true if the Unicode codepoint has the XID_Start property, meaning it can be used as the
+// first character of a programming language identifier.
+// http://unicode.org/reports/tr31/#Default_Identifier_Syntax
+//
+// XID_Start is a Unicode Derived Core Property. It is a variation of the ID_Start
+// Derived Core Property, accounting for a few characters that, when normalized, yield valid
+// characters in the ID_Start set.
+bool IsXidStart(char32_t codepoint);
+
+// Returns true if the Unicode codepoint has the XID_Continue property, meaning it can be used in
+// any position of a programming language identifier, except the first.
+// http://unicode.org/reports/tr31/#Default_Identifier_Syntax
+//
+// XID_Continue is a Unicode Derived Core Property. It is a variation of the ID_Continue
+// Derived Core Property, accounting for a few characters that, when normalized, yield valid
+// characters in the ID_Continue set.
+bool IsXidContinue(char32_t codepoint);
+
+// Returns true if the Unicode codepoint has the White_Space property.
+// http://unicode.org/reports/tr44/#White_Space
+bool IsWhitespace(char32_t codepoint);
+
+// Returns true if the UTF8 string can be used as a Java identifier.
+// NOTE: This does not check against the set of reserved Java keywords.
+bool IsJavaIdentifier(const android::StringPiece& str);
+
+// Returns true if the UTF8 string can be used as the entry name of a resource name.
+// This is the `entry` part of package:type/entry.
+bool IsValidResourceEntryName(const android::StringPiece& str);
+
+}  // namespace text
+}  // namespace aapt
+
+#endif  // AAPT_TEXT_UNICODE_H
diff --git a/tools/aapt2/text/Unicode_data.cpp b/tools/aapt2/text/Unicode_data.cpp
new file mode 100644
index 0000000..96dc57b
--- /dev/null
+++ b/tools/aapt2/text/Unicode_data.cpp
@@ -0,0 +1,629 @@
+/*
+ * 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.
+ */
+
+const static std::array<CharacterProperties, 611> sCharacterProperties = {{
+    {0x0030, 0x0039, CharacterProperties::kXidContinue},
+    {0x0041, 0x005a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x005f, 0x005f, CharacterProperties::kXidContinue},
+    {0x0061, 0x007a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x00aa, 0x00aa, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x00b5, 0x00b5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x00b7, 0x00b7, CharacterProperties::kXidContinue},
+    {0x00ba, 0x00ba, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x00c0, 0x00d6, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x00d8, 0x00f6, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x00f8, 0x02c1, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x02c6, 0x02d1, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x02e0, 0x02e4, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x02ec, 0x02ec, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x02ee, 0x02ee, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0300, 0x036f, CharacterProperties::kXidContinue},
+    {0x0370, 0x0374, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0376, 0x0377, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x037b, 0x037d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x037f, 0x037f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0386, 0x0386, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0387, 0x0387, CharacterProperties::kXidContinue},
+    {0x0388, 0x038a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x038c, 0x038c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x038e, 0x03a1, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x03a3, 0x03f5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x03f7, 0x0481, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0483, 0x0487, CharacterProperties::kXidContinue},
+    {0x048a, 0x052f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0531, 0x0556, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0559, 0x0559, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0561, 0x0587, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0591, 0x05bd, CharacterProperties::kXidContinue},
+    {0x05bf, 0x05bf, CharacterProperties::kXidContinue},
+    {0x05c1, 0x05c2, CharacterProperties::kXidContinue},
+    {0x05c4, 0x05c5, CharacterProperties::kXidContinue},
+    {0x05c7, 0x05c7, CharacterProperties::kXidContinue},
+    {0x05d0, 0x05ea, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x05f0, 0x05f2, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0610, 0x061a, CharacterProperties::kXidContinue},
+    {0x0620, 0x064a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x064b, 0x0669, CharacterProperties::kXidContinue},
+    {0x066e, 0x066f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0670, 0x0670, CharacterProperties::kXidContinue},
+    {0x0671, 0x06d3, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x06d5, 0x06d5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x06d6, 0x06dc, CharacterProperties::kXidContinue},
+    {0x06df, 0x06e4, CharacterProperties::kXidContinue},
+    {0x06e5, 0x06e6, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x06e7, 0x06e8, CharacterProperties::kXidContinue},
+    {0x06ea, 0x06ed, CharacterProperties::kXidContinue},
+    {0x06ee, 0x06ef, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x06f0, 0x06f9, CharacterProperties::kXidContinue},
+    {0x06fa, 0x06fc, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x06ff, 0x06ff, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0710, 0x0710, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0711, 0x0711, CharacterProperties::kXidContinue},
+    {0x0712, 0x072f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0730, 0x074a, CharacterProperties::kXidContinue},
+    {0x074d, 0x07a5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x07a6, 0x07b0, CharacterProperties::kXidContinue},
+    {0x07b1, 0x07b1, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x07c0, 0x07c9, CharacterProperties::kXidContinue},
+    {0x07ca, 0x07ea, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x07eb, 0x07f3, CharacterProperties::kXidContinue},
+    {0x07f4, 0x07f5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x07fa, 0x07fa, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0800, 0x0815, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0816, 0x0819, CharacterProperties::kXidContinue},
+    {0x081a, 0x081a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x081b, 0x0823, CharacterProperties::kXidContinue},
+    {0x0824, 0x0824, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0825, 0x0827, CharacterProperties::kXidContinue},
+    {0x0828, 0x0828, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0829, 0x082d, CharacterProperties::kXidContinue},
+    {0x0840, 0x0858, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0859, 0x085b, CharacterProperties::kXidContinue},
+    {0x08a0, 0x08b4, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x08b6, 0x08bd, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x08d4, 0x08e1, CharacterProperties::kXidContinue},
+    {0x08e3, 0x0903, CharacterProperties::kXidContinue},
+    {0x0904, 0x0939, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x093a, 0x093c, CharacterProperties::kXidContinue},
+    {0x093d, 0x093d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x093e, 0x094f, CharacterProperties::kXidContinue},
+    {0x0950, 0x0950, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0951, 0x0957, CharacterProperties::kXidContinue},
+    {0x0958, 0x0961, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0962, 0x0963, CharacterProperties::kXidContinue},
+    {0x0966, 0x096f, CharacterProperties::kXidContinue},
+    {0x0971, 0x0980, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0981, 0x0983, CharacterProperties::kXidContinue},
+    {0x0985, 0x098c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x098f, 0x0990, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0993, 0x09a8, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x09aa, 0x09b0, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x09b2, 0x09b2, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x09b6, 0x09b9, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x09bc, 0x09bc, CharacterProperties::kXidContinue},
+    {0x09bd, 0x09bd, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x09be, 0x09c4, CharacterProperties::kXidContinue},
+    {0x09c7, 0x09c8, CharacterProperties::kXidContinue},
+    {0x09cb, 0x09cd, CharacterProperties::kXidContinue},
+    {0x09ce, 0x09ce, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x09d7, 0x09d7, CharacterProperties::kXidContinue},
+    {0x09dc, 0x09dd, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x09df, 0x09e1, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x09e2, 0x09e3, CharacterProperties::kXidContinue},
+    {0x09e6, 0x09ef, CharacterProperties::kXidContinue},
+    {0x09f0, 0x09f1, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0a01, 0x0a03, CharacterProperties::kXidContinue},
+    {0x0a05, 0x0a0a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0a0f, 0x0a10, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0a13, 0x0a28, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0a2a, 0x0a30, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0a32, 0x0a33, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0a35, 0x0a36, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0a38, 0x0a39, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0a3c, 0x0a3c, CharacterProperties::kXidContinue},
+    {0x0a3e, 0x0a42, CharacterProperties::kXidContinue},
+    {0x0a47, 0x0a48, CharacterProperties::kXidContinue},
+    {0x0a4b, 0x0a4d, CharacterProperties::kXidContinue},
+    {0x0a51, 0x0a51, CharacterProperties::kXidContinue},
+    {0x0a59, 0x0a5c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0a5e, 0x0a5e, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0a66, 0x0a71, CharacterProperties::kXidContinue},
+    {0x0a72, 0x0a74, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0a75, 0x0a75, CharacterProperties::kXidContinue},
+    {0x0a81, 0x0a83, CharacterProperties::kXidContinue},
+    {0x0a85, 0x0a8d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0a8f, 0x0a91, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0a93, 0x0aa8, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0aaa, 0x0ab0, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ab2, 0x0ab3, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ab5, 0x0ab9, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0abc, 0x0abc, CharacterProperties::kXidContinue},
+    {0x0abd, 0x0abd, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0abe, 0x0ac5, CharacterProperties::kXidContinue},
+    {0x0ac7, 0x0ac9, CharacterProperties::kXidContinue},
+    {0x0acb, 0x0acd, CharacterProperties::kXidContinue},
+    {0x0ad0, 0x0ad0, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ae0, 0x0ae1, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ae2, 0x0ae3, CharacterProperties::kXidContinue},
+    {0x0ae6, 0x0aef, CharacterProperties::kXidContinue},
+    {0x0af9, 0x0af9, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b01, 0x0b03, CharacterProperties::kXidContinue},
+    {0x0b05, 0x0b0c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b0f, 0x0b10, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b13, 0x0b28, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b2a, 0x0b30, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b32, 0x0b33, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b35, 0x0b39, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b3c, 0x0b3c, CharacterProperties::kXidContinue},
+    {0x0b3d, 0x0b3d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b3e, 0x0b44, CharacterProperties::kXidContinue},
+    {0x0b47, 0x0b48, CharacterProperties::kXidContinue},
+    {0x0b4b, 0x0b4d, CharacterProperties::kXidContinue},
+    {0x0b56, 0x0b57, CharacterProperties::kXidContinue},
+    {0x0b5c, 0x0b5d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b5f, 0x0b61, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b62, 0x0b63, CharacterProperties::kXidContinue},
+    {0x0b66, 0x0b6f, CharacterProperties::kXidContinue},
+    {0x0b71, 0x0b71, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b82, 0x0b82, CharacterProperties::kXidContinue},
+    {0x0b83, 0x0b83, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b85, 0x0b8a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b8e, 0x0b90, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b92, 0x0b95, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b99, 0x0b9a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b9c, 0x0b9c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0b9e, 0x0b9f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ba3, 0x0ba4, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ba8, 0x0baa, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0bae, 0x0bb9, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0bbe, 0x0bc2, CharacterProperties::kXidContinue},
+    {0x0bc6, 0x0bc8, CharacterProperties::kXidContinue},
+    {0x0bca, 0x0bcd, CharacterProperties::kXidContinue},
+    {0x0bd0, 0x0bd0, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0bd7, 0x0bd7, CharacterProperties::kXidContinue},
+    {0x0be6, 0x0bef, CharacterProperties::kXidContinue},
+    {0x0c00, 0x0c03, CharacterProperties::kXidContinue},
+    {0x0c05, 0x0c0c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0c0e, 0x0c10, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0c12, 0x0c28, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0c2a, 0x0c39, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0c3d, 0x0c3d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0c3e, 0x0c44, CharacterProperties::kXidContinue},
+    {0x0c46, 0x0c48, CharacterProperties::kXidContinue},
+    {0x0c4a, 0x0c4d, CharacterProperties::kXidContinue},
+    {0x0c55, 0x0c56, CharacterProperties::kXidContinue},
+    {0x0c58, 0x0c5a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0c60, 0x0c61, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0c62, 0x0c63, CharacterProperties::kXidContinue},
+    {0x0c66, 0x0c6f, CharacterProperties::kXidContinue},
+    {0x0c80, 0x0c80, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0c81, 0x0c83, CharacterProperties::kXidContinue},
+    {0x0c85, 0x0c8c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0c8e, 0x0c90, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0c92, 0x0ca8, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0caa, 0x0cb3, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0cb5, 0x0cb9, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0cbc, 0x0cbc, CharacterProperties::kXidContinue},
+    {0x0cbd, 0x0cbd, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0cbe, 0x0cc4, CharacterProperties::kXidContinue},
+    {0x0cc6, 0x0cc8, CharacterProperties::kXidContinue},
+    {0x0cca, 0x0ccd, CharacterProperties::kXidContinue},
+    {0x0cd5, 0x0cd6, CharacterProperties::kXidContinue},
+    {0x0cde, 0x0cde, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ce0, 0x0ce1, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ce2, 0x0ce3, CharacterProperties::kXidContinue},
+    {0x0ce6, 0x0cef, CharacterProperties::kXidContinue},
+    {0x0cf1, 0x0cf2, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0d01, 0x0d03, CharacterProperties::kXidContinue},
+    {0x0d05, 0x0d0c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0d0e, 0x0d10, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0d12, 0x0d3a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0d3d, 0x0d3d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0d3e, 0x0d44, CharacterProperties::kXidContinue},
+    {0x0d46, 0x0d48, CharacterProperties::kXidContinue},
+    {0x0d4a, 0x0d4d, CharacterProperties::kXidContinue},
+    {0x0d4e, 0x0d4e, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0d54, 0x0d56, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0d57, 0x0d57, CharacterProperties::kXidContinue},
+    {0x0d5f, 0x0d61, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0d62, 0x0d63, CharacterProperties::kXidContinue},
+    {0x0d66, 0x0d6f, CharacterProperties::kXidContinue},
+    {0x0d7a, 0x0d7f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0d82, 0x0d83, CharacterProperties::kXidContinue},
+    {0x0d85, 0x0d96, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0d9a, 0x0db1, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0db3, 0x0dbb, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0dbd, 0x0dbd, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0dc0, 0x0dc6, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0dca, 0x0dca, CharacterProperties::kXidContinue},
+    {0x0dcf, 0x0dd4, CharacterProperties::kXidContinue},
+    {0x0dd6, 0x0dd6, CharacterProperties::kXidContinue},
+    {0x0dd8, 0x0ddf, CharacterProperties::kXidContinue},
+    {0x0de6, 0x0def, CharacterProperties::kXidContinue},
+    {0x0df2, 0x0df3, CharacterProperties::kXidContinue},
+    {0x0e01, 0x0e30, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0e31, 0x0e31, CharacterProperties::kXidContinue},
+    {0x0e32, 0x0e32, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0e33, 0x0e3a, CharacterProperties::kXidContinue},
+    {0x0e40, 0x0e46, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0e47, 0x0e4e, CharacterProperties::kXidContinue},
+    {0x0e50, 0x0e59, CharacterProperties::kXidContinue},
+    {0x0e81, 0x0e82, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0e84, 0x0e84, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0e87, 0x0e88, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0e8a, 0x0e8a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0e8d, 0x0e8d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0e94, 0x0e97, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0e99, 0x0e9f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ea1, 0x0ea3, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ea5, 0x0ea5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ea7, 0x0ea7, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0eaa, 0x0eab, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ead, 0x0eb0, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0eb1, 0x0eb1, CharacterProperties::kXidContinue},
+    {0x0eb2, 0x0eb2, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0eb3, 0x0eb9, CharacterProperties::kXidContinue},
+    {0x0ebb, 0x0ebc, CharacterProperties::kXidContinue},
+    {0x0ebd, 0x0ebd, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ec0, 0x0ec4, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ec6, 0x0ec6, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0ec8, 0x0ecd, CharacterProperties::kXidContinue},
+    {0x0ed0, 0x0ed9, CharacterProperties::kXidContinue},
+    {0x0edc, 0x0edf, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0f00, 0x0f00, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0f18, 0x0f19, CharacterProperties::kXidContinue},
+    {0x0f20, 0x0f29, CharacterProperties::kXidContinue},
+    {0x0f35, 0x0f35, CharacterProperties::kXidContinue},
+    {0x0f37, 0x0f37, CharacterProperties::kXidContinue},
+    {0x0f39, 0x0f39, CharacterProperties::kXidContinue},
+    {0x0f3e, 0x0f3f, CharacterProperties::kXidContinue},
+    {0x0f40, 0x0f47, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0f49, 0x0f6c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0f71, 0x0f84, CharacterProperties::kXidContinue},
+    {0x0f86, 0x0f87, CharacterProperties::kXidContinue},
+    {0x0f88, 0x0f8c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x0f8d, 0x0f97, CharacterProperties::kXidContinue},
+    {0x0f99, 0x0fbc, CharacterProperties::kXidContinue},
+    {0x0fc6, 0x0fc6, CharacterProperties::kXidContinue},
+    {0x1000, 0x102a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x102b, 0x103e, CharacterProperties::kXidContinue},
+    {0x103f, 0x103f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1040, 0x1049, CharacterProperties::kXidContinue},
+    {0x1050, 0x1055, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1056, 0x1059, CharacterProperties::kXidContinue},
+    {0x105a, 0x105d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x105e, 0x1060, CharacterProperties::kXidContinue},
+    {0x1061, 0x1061, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1062, 0x1064, CharacterProperties::kXidContinue},
+    {0x1065, 0x1066, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1067, 0x106d, CharacterProperties::kXidContinue},
+    {0x106e, 0x1070, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1071, 0x1074, CharacterProperties::kXidContinue},
+    {0x1075, 0x1081, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1082, 0x108d, CharacterProperties::kXidContinue},
+    {0x108e, 0x108e, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x108f, 0x109d, CharacterProperties::kXidContinue},
+    {0x10a0, 0x10c5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x10c7, 0x10c7, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x10cd, 0x10cd, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x10d0, 0x10fa, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x10fc, 0x1248, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x124a, 0x124d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1250, 0x1256, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1258, 0x1258, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x125a, 0x125d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1260, 0x1288, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x128a, 0x128d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1290, 0x12b0, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x12b2, 0x12b5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x12b8, 0x12be, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x12c0, 0x12c0, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x12c2, 0x12c5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x12c8, 0x12d6, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x12d8, 0x1310, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1312, 0x1315, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1318, 0x135a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x135d, 0x135f, CharacterProperties::kXidContinue},
+    {0x1369, 0x1371, CharacterProperties::kXidContinue},
+    {0x1380, 0x138f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x13a0, 0x13f5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x13f8, 0x13fd, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1401, 0x166c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x166f, 0x167f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1681, 0x169a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x16a0, 0x16ea, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x16ee, 0x16f8, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1700, 0x170c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x170e, 0x1711, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1712, 0x1714, CharacterProperties::kXidContinue},
+    {0x1720, 0x1731, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1732, 0x1734, CharacterProperties::kXidContinue},
+    {0x1740, 0x1751, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1752, 0x1753, CharacterProperties::kXidContinue},
+    {0x1760, 0x176c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x176e, 0x1770, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1772, 0x1773, CharacterProperties::kXidContinue},
+    {0x1780, 0x17b3, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x17b4, 0x17d3, CharacterProperties::kXidContinue},
+    {0x17d7, 0x17d7, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x17dc, 0x17dc, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x17dd, 0x17dd, CharacterProperties::kXidContinue},
+    {0x17e0, 0x17e9, CharacterProperties::kXidContinue},
+    {0x180b, 0x180d, CharacterProperties::kXidContinue},
+    {0x1810, 0x1819, CharacterProperties::kXidContinue},
+    {0x1820, 0x1877, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1880, 0x18a8, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x18a9, 0x18a9, CharacterProperties::kXidContinue},
+    {0x18aa, 0x18aa, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x18b0, 0x18f5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1900, 0x191e, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1920, 0x192b, CharacterProperties::kXidContinue},
+    {0x1930, 0x193b, CharacterProperties::kXidContinue},
+    {0x1946, 0x194f, CharacterProperties::kXidContinue},
+    {0x1950, 0x196d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1970, 0x1974, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1980, 0x19ab, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x19b0, 0x19c9, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x19d0, 0x19da, CharacterProperties::kXidContinue},
+    {0x1a00, 0x1a16, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1a17, 0x1a1b, CharacterProperties::kXidContinue},
+    {0x1a20, 0x1a54, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1a55, 0x1a5e, CharacterProperties::kXidContinue},
+    {0x1a60, 0x1a7c, CharacterProperties::kXidContinue},
+    {0x1a7f, 0x1a89, CharacterProperties::kXidContinue},
+    {0x1a90, 0x1a99, CharacterProperties::kXidContinue},
+    {0x1aa7, 0x1aa7, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1ab0, 0x1abd, CharacterProperties::kXidContinue},
+    {0x1b00, 0x1b04, CharacterProperties::kXidContinue},
+    {0x1b05, 0x1b33, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1b34, 0x1b44, CharacterProperties::kXidContinue},
+    {0x1b45, 0x1b4b, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1b50, 0x1b59, CharacterProperties::kXidContinue},
+    {0x1b6b, 0x1b73, CharacterProperties::kXidContinue},
+    {0x1b80, 0x1b82, CharacterProperties::kXidContinue},
+    {0x1b83, 0x1ba0, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1ba1, 0x1bad, CharacterProperties::kXidContinue},
+    {0x1bae, 0x1baf, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1bb0, 0x1bb9, CharacterProperties::kXidContinue},
+    {0x1bba, 0x1be5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1be6, 0x1bf3, CharacterProperties::kXidContinue},
+    {0x1c00, 0x1c23, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1c24, 0x1c37, CharacterProperties::kXidContinue},
+    {0x1c40, 0x1c49, CharacterProperties::kXidContinue},
+    {0x1c4d, 0x1c4f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1c50, 0x1c59, CharacterProperties::kXidContinue},
+    {0x1c5a, 0x1c7d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1c80, 0x1c88, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1cd0, 0x1cd2, CharacterProperties::kXidContinue},
+    {0x1cd4, 0x1ce8, CharacterProperties::kXidContinue},
+    {0x1ce9, 0x1cec, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1ced, 0x1ced, CharacterProperties::kXidContinue},
+    {0x1cee, 0x1cf1, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1cf2, 0x1cf4, CharacterProperties::kXidContinue},
+    {0x1cf5, 0x1cf6, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1cf8, 0x1cf9, CharacterProperties::kXidContinue},
+    {0x1d00, 0x1dbf, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1dc0, 0x1df5, CharacterProperties::kXidContinue},
+    {0x1dfb, 0x1dff, CharacterProperties::kXidContinue},
+    {0x1e00, 0x1f15, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1f18, 0x1f1d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1f20, 0x1f45, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1f48, 0x1f4d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1f50, 0x1f57, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1f59, 0x1f59, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1f5b, 0x1f5b, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1f5d, 0x1f5d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1f5f, 0x1f7d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1f80, 0x1fb4, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1fb6, 0x1fbc, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1fbe, 0x1fbe, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1fc2, 0x1fc4, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1fc6, 0x1fcc, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1fd0, 0x1fd3, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1fd6, 0x1fdb, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1fe0, 0x1fec, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1ff2, 0x1ff4, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x1ff6, 0x1ffc, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x203f, 0x2040, CharacterProperties::kXidContinue},
+    {0x2054, 0x2054, CharacterProperties::kXidContinue},
+    {0x2071, 0x2071, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x207f, 0x207f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2090, 0x209c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x20d0, 0x20dc, CharacterProperties::kXidContinue},
+    {0x20e1, 0x20e1, CharacterProperties::kXidContinue},
+    {0x20e5, 0x20f0, CharacterProperties::kXidContinue},
+    {0x2102, 0x2102, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2107, 0x2107, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x210a, 0x2113, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2115, 0x2115, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2118, 0x211d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2124, 0x2124, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2126, 0x2126, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2128, 0x2128, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x212a, 0x2139, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x213c, 0x213f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2145, 0x2149, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x214e, 0x214e, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2160, 0x2188, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2c00, 0x2c2e, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2c30, 0x2c5e, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2c60, 0x2ce4, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2ceb, 0x2cee, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2cef, 0x2cf1, CharacterProperties::kXidContinue},
+    {0x2cf2, 0x2cf3, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2d00, 0x2d25, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2d27, 0x2d27, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2d2d, 0x2d2d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2d30, 0x2d67, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2d6f, 0x2d6f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2d7f, 0x2d7f, CharacterProperties::kXidContinue},
+    {0x2d80, 0x2d96, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2da0, 0x2da6, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2da8, 0x2dae, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2db0, 0x2db6, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2db8, 0x2dbe, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2dc0, 0x2dc6, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2dc8, 0x2dce, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2dd0, 0x2dd6, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2dd8, 0x2dde, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x2de0, 0x2dff, CharacterProperties::kXidContinue},
+    {0x3005, 0x3007, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x3021, 0x3029, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x302a, 0x302f, CharacterProperties::kXidContinue},
+    {0x3031, 0x3035, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x3038, 0x303c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x3041, 0x3096, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x3099, 0x309a, CharacterProperties::kXidContinue},
+    {0x309d, 0x309f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x30a1, 0x30fa, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x30fc, 0x30ff, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x3105, 0x312d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x3131, 0x318e, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x31a0, 0x31ba, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x31f0, 0x31ff, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x3400, 0x4db5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0x4e00, 0x9fd5, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa000, 0xa48c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa4d0, 0xa4fd, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa500, 0xa60c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa610, 0xa61f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa620, 0xa629, CharacterProperties::kXidContinue},
+    {0xa62a, 0xa62b, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa640, 0xa66e, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa66f, 0xa66f, CharacterProperties::kXidContinue},
+    {0xa674, 0xa67d, CharacterProperties::kXidContinue},
+    {0xa67f, 0xa69d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa69e, 0xa69f, CharacterProperties::kXidContinue},
+    {0xa6a0, 0xa6ef, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa6f0, 0xa6f1, CharacterProperties::kXidContinue},
+    {0xa717, 0xa71f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa722, 0xa788, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa78b, 0xa7ae, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa7b0, 0xa7b7, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa7f7, 0xa801, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa802, 0xa802, CharacterProperties::kXidContinue},
+    {0xa803, 0xa805, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa806, 0xa806, CharacterProperties::kXidContinue},
+    {0xa807, 0xa80a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa80b, 0xa80b, CharacterProperties::kXidContinue},
+    {0xa80c, 0xa822, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa823, 0xa827, CharacterProperties::kXidContinue},
+    {0xa840, 0xa873, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa880, 0xa881, CharacterProperties::kXidContinue},
+    {0xa882, 0xa8b3, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa8b4, 0xa8c5, CharacterProperties::kXidContinue},
+    {0xa8d0, 0xa8d9, CharacterProperties::kXidContinue},
+    {0xa8e0, 0xa8f1, CharacterProperties::kXidContinue},
+    {0xa8f2, 0xa8f7, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa8fb, 0xa8fb, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa8fd, 0xa8fd, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa900, 0xa909, CharacterProperties::kXidContinue},
+    {0xa90a, 0xa925, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa926, 0xa92d, CharacterProperties::kXidContinue},
+    {0xa930, 0xa946, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa947, 0xa953, CharacterProperties::kXidContinue},
+    {0xa960, 0xa97c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa980, 0xa983, CharacterProperties::kXidContinue},
+    {0xa984, 0xa9b2, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa9b3, 0xa9c0, CharacterProperties::kXidContinue},
+    {0xa9cf, 0xa9cf, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa9d0, 0xa9d9, CharacterProperties::kXidContinue},
+    {0xa9e0, 0xa9e4, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa9e5, 0xa9e5, CharacterProperties::kXidContinue},
+    {0xa9e6, 0xa9ef, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xa9f0, 0xa9f9, CharacterProperties::kXidContinue},
+    {0xa9fa, 0xa9fe, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaa00, 0xaa28, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaa29, 0xaa36, CharacterProperties::kXidContinue},
+    {0xaa40, 0xaa42, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaa43, 0xaa43, CharacterProperties::kXidContinue},
+    {0xaa44, 0xaa4b, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaa4c, 0xaa4d, CharacterProperties::kXidContinue},
+    {0xaa50, 0xaa59, CharacterProperties::kXidContinue},
+    {0xaa60, 0xaa76, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaa7a, 0xaa7a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaa7b, 0xaa7d, CharacterProperties::kXidContinue},
+    {0xaa7e, 0xaaaf, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaab0, 0xaab0, CharacterProperties::kXidContinue},
+    {0xaab1, 0xaab1, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaab2, 0xaab4, CharacterProperties::kXidContinue},
+    {0xaab5, 0xaab6, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaab7, 0xaab8, CharacterProperties::kXidContinue},
+    {0xaab9, 0xaabd, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaabe, 0xaabf, CharacterProperties::kXidContinue},
+    {0xaac0, 0xaac0, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaac1, 0xaac1, CharacterProperties::kXidContinue},
+    {0xaac2, 0xaac2, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaadb, 0xaadd, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaae0, 0xaaea, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaaeb, 0xaaef, CharacterProperties::kXidContinue},
+    {0xaaf2, 0xaaf4, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xaaf5, 0xaaf6, CharacterProperties::kXidContinue},
+    {0xab01, 0xab06, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xab09, 0xab0e, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xab11, 0xab16, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xab20, 0xab26, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xab28, 0xab2e, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xab30, 0xab5a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xab5c, 0xab65, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xab70, 0xabe2, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xabe3, 0xabea, CharacterProperties::kXidContinue},
+    {0xabec, 0xabed, CharacterProperties::kXidContinue},
+    {0xabf0, 0xabf9, CharacterProperties::kXidContinue},
+    {0xac00, 0xd7a3, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xd7b0, 0xd7c6, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xd7cb, 0xd7fb, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xf900, 0xfa6d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfa70, 0xfad9, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfb00, 0xfb06, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfb13, 0xfb17, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfb1d, 0xfb1d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfb1e, 0xfb1e, CharacterProperties::kXidContinue},
+    {0xfb1f, 0xfb28, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfb2a, 0xfb36, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfb38, 0xfb3c, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfb3e, 0xfb3e, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfb40, 0xfb41, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfb43, 0xfb44, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfb46, 0xfbb1, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfbd3, 0xfc5d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfc64, 0xfd3d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfd50, 0xfd8f, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfd92, 0xfdc7, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfdf0, 0xfdf9, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfe00, 0xfe0f, CharacterProperties::kXidContinue},
+    {0xfe20, 0xfe2f, CharacterProperties::kXidContinue},
+    {0xfe33, 0xfe34, CharacterProperties::kXidContinue},
+    {0xfe4d, 0xfe4f, CharacterProperties::kXidContinue},
+    {0xfe71, 0xfe71, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfe73, 0xfe73, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfe77, 0xfe77, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfe79, 0xfe79, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfe7b, 0xfe7b, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfe7d, 0xfe7d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xfe7f, 0xfefc, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xff10, 0xff19, CharacterProperties::kXidContinue},
+    {0xff21, 0xff3a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xff3f, 0xff3f, CharacterProperties::kXidContinue},
+    {0xff41, 0xff5a, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xff66, 0xff9d, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xff9e, 0xff9f, CharacterProperties::kXidContinue},
+    {0xffa0, 0xffbe, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xffc2, 0xffc7, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xffca, 0xffcf, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xffd2, 0xffd7, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+    {0xffda, 0xffdc, CharacterProperties::kXidStart | CharacterProperties::kXidContinue},
+}};
diff --git a/tools/aapt2/text/Unicode_test.cpp b/tools/aapt2/text/Unicode_test.cpp
new file mode 100644
index 0000000..a8e797c
--- /dev/null
+++ b/tools/aapt2/text/Unicode_test.cpp
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ */
+
+#include "text/Unicode.h"
+
+#include "test/Test.h"
+
+using ::testing::Each;
+using ::testing::Eq;
+using ::testing::ResultOf;
+
+namespace aapt {
+namespace text {
+
+TEST(UnicodeTest, IsXidStart) {
+  std::u32string valid_input = U"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZˮø";
+  EXPECT_THAT(valid_input, Each(ResultOf(IsXidStart, Eq(true))));
+
+  std::u32string invalid_input = U"$;\'/<>+=-.{}[]()\\|?@#%^&*!~`\",1234567890_";
+  EXPECT_THAT(invalid_input, Each(ResultOf(IsXidStart, Eq(false))));
+}
+
+TEST(UnicodeTest, IsXidContinue) {
+  std::u32string valid_input = U"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_ˮø";
+  EXPECT_THAT(valid_input, Each(ResultOf(IsXidContinue, Eq(true))));
+
+  std::u32string invalid_input = U"$;\'/<>+=-.{}[]()\\|?@#%^&*!~`\",";
+  EXPECT_THAT(invalid_input, Each(ResultOf(IsXidContinue, Eq(false))));
+}
+
+TEST(UnicodeTest, IsJavaIdentifier) {
+  EXPECT_TRUE(IsJavaIdentifier("FøøBar_12"));
+  EXPECT_TRUE(IsJavaIdentifier("Føø$Bar"));
+  EXPECT_TRUE(IsJavaIdentifier("_FøøBar"));
+  EXPECT_TRUE(IsJavaIdentifier("$Føø$Bar"));
+
+  EXPECT_FALSE(IsJavaIdentifier("12FøøBar"));
+  EXPECT_FALSE(IsJavaIdentifier(".Hello"));
+}
+
+TEST(UnicodeTest, IsValidResourceEntryName) {
+  EXPECT_TRUE(IsJavaIdentifier("FøøBar"));
+  EXPECT_TRUE(IsValidResourceEntryName("FøøBar_12"));
+  EXPECT_TRUE(IsValidResourceEntryName("Føø.Bar"));
+  EXPECT_TRUE(IsValidResourceEntryName("Føø-Bar"));
+  EXPECT_TRUE(IsValidResourceEntryName("_FøøBar"));
+
+  EXPECT_FALSE(IsValidResourceEntryName("12FøøBar"));
+  EXPECT_FALSE(IsValidResourceEntryName("Føø$Bar"));
+  EXPECT_FALSE(IsValidResourceEntryName("Føø/Bar"));
+  EXPECT_FALSE(IsValidResourceEntryName("Føø:Bar"));
+  EXPECT_FALSE(IsValidResourceEntryName("Føø;Bar"));
+}
+
+}  // namespace text
+}  // namespace aapt
diff --git a/tools/aapt2/text/Utf8Iterator.cpp b/tools/aapt2/text/Utf8Iterator.cpp
new file mode 100644
index 0000000..20b9073
--- /dev/null
+++ b/tools/aapt2/text/Utf8Iterator.cpp
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ */
+
+#include "text/Utf8Iterator.h"
+
+#include "android-base/logging.h"
+#include "utils/Unicode.h"
+
+using ::android::StringPiece;
+
+namespace aapt {
+namespace text {
+
+Utf8Iterator::Utf8Iterator(const StringPiece& str)
+    : str_(str), current_pos_(0), next_pos_(0), current_codepoint_(0) {
+  DoNext();
+}
+
+void Utf8Iterator::DoNext() {
+  current_pos_ = next_pos_;
+  int32_t result = utf32_from_utf8_at(str_.data(), str_.size(), current_pos_, &next_pos_);
+  if (result == -1) {
+    current_codepoint_ = 0u;
+  } else {
+    current_codepoint_ = static_cast<char32_t>(result);
+  }
+}
+
+bool Utf8Iterator::HasNext() const {
+  return current_codepoint_ != 0;
+}
+
+size_t Utf8Iterator::Position() const {
+  return current_pos_;
+}
+
+void Utf8Iterator::Skip(int amount) {
+  while (amount > 0 && HasNext()) {
+    Next();
+    --amount;
+  }
+}
+
+char32_t Utf8Iterator::Next() {
+  CHECK(HasNext()) << "Next() called after iterator exhausted";
+  char32_t result = current_codepoint_;
+  DoNext();
+  return result;
+}
+
+}  // namespace text
+}  // namespace aapt
diff --git a/tools/aapt2/text/Utf8Iterator.h b/tools/aapt2/text/Utf8Iterator.h
new file mode 100644
index 0000000..9318401
--- /dev/null
+++ b/tools/aapt2/text/Utf8Iterator.h
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+
+#ifndef AAPT_TEXT_UTF8ITERATOR_H
+#define AAPT_TEXT_UTF8ITERATOR_H
+
+#include "android-base/macros.h"
+#include "androidfw/StringPiece.h"
+
+namespace aapt {
+namespace text {
+
+class Utf8Iterator {
+ public:
+  explicit Utf8Iterator(const android::StringPiece& str);
+
+  bool HasNext() const;
+
+  // Returns the current position of the iterator in bytes of the source UTF8 string.
+  // This position is the start of the codepoint returned by the next call to Next().
+  size_t Position() const;
+
+  void Skip(int amount);
+
+  char32_t Next();
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(Utf8Iterator);
+
+  void DoNext();
+
+  android::StringPiece str_;
+  size_t current_pos_;
+  size_t next_pos_;
+  char32_t current_codepoint_;
+};
+
+}  // namespace text
+}  // namespace aapt
+
+#endif  // AAPT_TEXT_UTF8ITERATOR_H
diff --git a/tools/aapt2/text/Utf8Iterator_test.cpp b/tools/aapt2/text/Utf8Iterator_test.cpp
new file mode 100644
index 0000000..8c3e774
--- /dev/null
+++ b/tools/aapt2/text/Utf8Iterator_test.cpp
@@ -0,0 +1,95 @@
+/*
+ * 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.
+ */
+
+#include "text/Utf8Iterator.h"
+
+#include "test/Test.h"
+
+using ::android::StringPiece;
+using ::testing::Eq;
+
+namespace aapt {
+namespace text {
+
+TEST(Utf8IteratorTest, IteratesOverAscii) {
+  Utf8Iterator iter("hello");
+
+  ASSERT_TRUE(iter.HasNext());
+  EXPECT_THAT(iter.Next(), Eq(U'h'));
+
+  ASSERT_TRUE(iter.HasNext());
+  EXPECT_THAT(iter.Next(), Eq(U'e'));
+
+  ASSERT_TRUE(iter.HasNext());
+  EXPECT_THAT(iter.Next(), Eq(U'l'));
+
+  ASSERT_TRUE(iter.HasNext());
+  EXPECT_THAT(iter.Next(), Eq(U'l'));
+
+  ASSERT_TRUE(iter.HasNext());
+  EXPECT_THAT(iter.Next(), Eq(U'o'));
+
+  EXPECT_FALSE(iter.HasNext());
+}
+
+TEST(Utf8IteratorTest, IteratesOverUnicode) {
+  Utf8Iterator iter("Hi there 華勵蓮🍩");
+  iter.Skip(9);
+
+  ASSERT_TRUE(iter.HasNext());
+  EXPECT_THAT(iter.Next(), Eq(U'華'));
+
+  ASSERT_TRUE(iter.HasNext());
+  EXPECT_THAT(iter.Next(), Eq(U'勵'));
+
+  ASSERT_TRUE(iter.HasNext());
+  EXPECT_THAT(iter.Next(), Eq(U'蓮'));
+
+  ASSERT_TRUE(iter.HasNext());
+  EXPECT_THAT(iter.Next(), Eq(U'🍩'));
+
+  EXPECT_FALSE(iter.HasNext());
+}
+
+TEST(Utf8IteratorTest, PositionPointsToTheCorrectPlace) {
+  const StringPiece expected("Mm🍩");
+  Utf8Iterator iter(expected);
+
+  // Before any character, the position should be 0.
+  EXPECT_THAT(iter.Position(), Eq(0u));
+
+  // The 'M' character, one byte.
+  ASSERT_TRUE(iter.HasNext());
+  iter.Next();
+  EXPECT_THAT(iter.Position(), Eq(1u));
+
+  // The 'm' character, one byte.
+  ASSERT_TRUE(iter.HasNext());
+  iter.Next();
+  EXPECT_THAT(iter.Position(), Eq(2u));
+
+  // The doughnut character, 4 bytes.
+  ASSERT_TRUE(iter.HasNext());
+  iter.Next();
+  EXPECT_THAT(iter.Position(), Eq(6u));
+
+  // There should be nothing left.
+  EXPECT_FALSE(iter.HasNext());
+  EXPECT_THAT(iter.Position(), Eq(expected.size()));
+}
+
+}  // namespace text
+}  // namespace aapt
diff --git a/tools/aapt2/tools/extract_unicode_properties.py b/tools/aapt2/tools/extract_unicode_properties.py
new file mode 100644
index 0000000..7577ec8
--- /dev/null
+++ b/tools/aapt2/tools/extract_unicode_properties.py
@@ -0,0 +1,102 @@
+#!/bin/env python3
+
+"""Extracts the XID_Start and XID_Continue Derived core properties from the ICU data files
+and emits a std::array<> for binary searching.
+"""
+
+import re
+import sys
+
+CharacterPropertyEnumMap = {
+        1: "CharacterProperties::kXidStart",
+        2: "CharacterProperties::kXidContinue"
+}
+
+class CharacterProperty:
+    def __init__(self, first_char, last_char, prop_type):
+        self.first_char = first_char
+        self.last_char = last_char
+        self.prop_type = prop_type
+
+    def key(self):
+        return self.first_char
+
+    def merge(self, other):
+        if self.last_char + 1 == other.first_char and self.prop_type == other.prop_type:
+            self.last_char = other.last_char
+        else:
+            raise KeyError()
+
+    def __repr__(self):
+        types = []
+        for enum_int, enum_str in CharacterPropertyEnumMap.items():
+            if enum_int & self.prop_type:
+                types.append(enum_str)
+        return "{}0x{:04x}, 0x{:04x}, {}{}".format(
+                "{", self.first_char, self.last_char, ' | '.join(types), "}")
+
+def extract_unicode_properties(f, props, chars_out):
+    prog = re.compile(r"^(?P<first>\w{4})(..(?P<last>\w{4}))?\W+;\W+(?P<prop>\w+)")
+    for line in f:
+        result = prog.match(line)
+        if result:
+            prop_type_str = result.group('prop')
+            first_char_str = result.group('first')
+            last_char_str = result.group('last')
+            if prop_type_str in props:
+                start_char = int(first_char_str, 16)
+                last_char = (int(last_char_str, 16) if last_char_str else start_char) + 1
+                prop_type = props[prop_type_str]
+                for char in range(start_char, last_char):
+                    if char not in chars_out:
+                        chars_out[char] = CharacterProperty(char, char, 0)
+                    chars_out[char].prop_type |= prop_type
+    return chars_out
+
+def flatten_unicode_properties(chars):
+    result = []
+    for char_prop in sorted(chars.values(), key=CharacterProperty.key):
+        if len(result) == 0:
+            result.append(char_prop)
+        else:
+            try:
+                result[len(result) - 1].merge(char_prop)
+            except KeyError:
+                result.append(char_prop)
+    return result
+
+license = """/*
+ * 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.
+ */
+"""
+
+if __name__ == "__main__":
+    if len(sys.argv) < 2:
+        print("must specify path to icu DerivedCoreProperties file (e.g:" \
+                "external/icu/icu4c/source/data/unidata/DerivedCoreProperties.txt)")
+        sys.exit(1)
+
+    props = {"XID_Start": 1, "XID_Continue": 2}
+    char_props = {}
+    for file_path in sys.argv[1:]:
+        with open(file_path) as f:
+            extract_unicode_properties(f, props, char_props)
+    result = flatten_unicode_properties(char_props)
+    print("{}\nconst static std::array<CharacterProperties, {}> sCharacterProperties = {}"
+            .format(license, len(result), "{{"))
+    for prop in result:
+        print("    {},".format(prop))
+    print("}};")
+
diff --git a/tools/aapt2/unflatten/BinaryResourceParser.cpp b/tools/aapt2/unflatten/BinaryResourceParser.cpp
index f311670..892aee6 100644
--- a/tools/aapt2/unflatten/BinaryResourceParser.cpp
+++ b/tools/aapt2/unflatten/BinaryResourceParser.cpp
@@ -38,20 +38,17 @@
 
 using namespace android;
 
-using android::base::StringPrintf;
+using ::android::base::StringPrintf;
 
 namespace {
 
-/*
- * Visitor that converts a reference's resource ID to a resource name,
- * given a mapping from resource ID to resource name.
- */
+// Visitor that converts a reference's resource ID to a resource name, given a mapping from
+// resource ID to resource name.
 class ReferenceIdToNameVisitor : public ValueVisitor {
  public:
   using ValueVisitor::Visit;
 
-  explicit ReferenceIdToNameVisitor(
-      const std::map<ResourceId, ResourceName>* mapping)
+  explicit ReferenceIdToNameVisitor(const std::map<ResourceId, ResourceName>* mapping)
       : mapping_(mapping) {
     CHECK(mapping_ != nullptr);
   }
@@ -99,7 +96,7 @@
   if (parser.chunk()->type != android::RES_TABLE_TYPE) {
     context_->GetDiagnostics()->Error(DiagMessage(source_)
                                       << StringPrintf("unknown chunk of type 0x%02x",
-                                                      (int)parser.chunk()->type));
+                                                      static_cast<int>(parser.chunk()->type)));
     return false;
   }
 
@@ -115,7 +112,7 @@
       context_->GetDiagnostics()->Warn(
           DiagMessage(source_) << StringPrintf(
               "unexpected chunk of type 0x%02x trailing RES_TABLE_TYPE",
-              (int)parser.chunk()->type));
+              static_cast<int>(parser.chunk()->type)));
     }
   }
   return true;
@@ -165,9 +162,8 @@
 
       default:
         context_->GetDiagnostics()->Warn(
-            DiagMessage(source_)
-            << "unexpected chunk type "
-            << (int)util::DeviceToHost16(parser.chunk()->type));
+            DiagMessage(source_) << "unexpected chunk type "
+                                 << static_cast<int>(util::DeviceToHost16(parser.chunk()->type)));
         break;
     }
   }
@@ -245,8 +241,7 @@
             return false;
           }
         } else {
-          context_->GetDiagnostics()->Warn(DiagMessage(source_)
-                                           << "unexpected string pool");
+          context_->GetDiagnostics()->Warn(DiagMessage(source_) << "unexpected string pool");
         }
         break;
 
@@ -270,9 +265,8 @@
 
       default:
         context_->GetDiagnostics()->Warn(
-            DiagMessage(source_)
-            << "unexpected chunk type "
-            << (int)util::DeviceToHost16(parser.chunk()->type));
+            DiagMessage(source_) << "unexpected chunk type "
+                                 << static_cast<int>(util::DeviceToHost16(parser.chunk()->type)));
         break;
     }
   }
@@ -550,7 +544,7 @@
     const ResTable_map_entry* map) {
   std::unique_ptr<Array> array = util::make_unique<Array>();
   for (const ResTable_map& map_entry : map) {
-    array->items.push_back(ParseValue(name, config, map_entry.value));
+    array->elements.push_back(ParseValue(name, config, map_entry.value));
   }
   return array;
 }
diff --git a/tools/aapt2/util/BigBuffer_test.cpp b/tools/aapt2/util/BigBuffer_test.cpp
index 12c0b3e..a7776e3 100644
--- a/tools/aapt2/util/BigBuffer_test.cpp
+++ b/tools/aapt2/util/BigBuffer_test.cpp
@@ -18,12 +18,14 @@
 
 #include "test/Test.h"
 
+using ::testing::NotNull;
+
 namespace aapt {
 
 TEST(BigBufferTest, AllocateSingleBlock) {
   BigBuffer buffer(4);
 
-  EXPECT_NE(nullptr, buffer.NextBlock<char>(2));
+  EXPECT_THAT(buffer.NextBlock<char>(2), NotNull());
   EXPECT_EQ(2u, buffer.size());
 }
 
@@ -31,10 +33,10 @@
   BigBuffer buffer(16);
 
   char* b1 = buffer.NextBlock<char>(8);
-  EXPECT_NE(nullptr, b1);
+  EXPECT_THAT(b1, NotNull());
 
   char* b2 = buffer.NextBlock<char>(4);
-  EXPECT_NE(nullptr, b2);
+  EXPECT_THAT(b2, NotNull());
 
   EXPECT_EQ(b1 + 8, b2);
 }
@@ -42,7 +44,7 @@
 TEST(BigBufferTest, AllocateExactSizeBlockIfLargerThanBlockSize) {
   BigBuffer buffer(16);
 
-  EXPECT_NE(nullptr, buffer.NextBlock<char>(32));
+  EXPECT_THAT(buffer.NextBlock<char>(32), NotNull());
   EXPECT_EQ(32u, buffer.size());
 }
 
@@ -50,13 +52,13 @@
   BigBuffer buffer(16);
 
   uint32_t* b1 = buffer.NextBlock<uint32_t>();
-  ASSERT_NE(nullptr, b1);
+  ASSERT_THAT(b1, NotNull());
   *b1 = 33;
 
   {
     BigBuffer buffer2(16);
     b1 = buffer2.NextBlock<uint32_t>();
-    ASSERT_NE(nullptr, b1);
+    ASSERT_THAT(b1, NotNull());
     *b1 = 44;
 
     buffer.AppendBuffer(std::move(buffer2));
@@ -83,7 +85,7 @@
 TEST(BigBufferTest, PadAndAlignProperly) {
   BigBuffer buffer(16);
 
-  ASSERT_NE(buffer.NextBlock<char>(2), nullptr);
+  ASSERT_THAT(buffer.NextBlock<char>(2), NotNull());
   ASSERT_EQ(2u, buffer.size());
   buffer.Pad(2);
   ASSERT_EQ(4u, buffer.size());
diff --git a/tools/aapt2/util/Files.cpp b/tools/aapt2/util/Files.cpp
index 1bf2594..bf8dc4d 100644
--- a/tools/aapt2/util/Files.cpp
+++ b/tools/aapt2/util/Files.cpp
@@ -27,6 +27,8 @@
 #include "android-base/errors.h"
 #include "android-base/file.h"
 #include "android-base/logging.h"
+#include "android-base/unique_fd.h"
+#include "android-base/utf8.h"
 
 #include "util/Util.h"
 
@@ -35,14 +37,32 @@
 #include <direct.h>
 #endif
 
-using android::StringPiece;
+using ::android::FileMap;
+using ::android::StringPiece;
+using ::android::base::ReadFileToString;
+using ::android::base::SystemErrorCodeToString;
+using ::android::base::unique_fd;
 
 namespace aapt {
 namespace file {
 
-FileType GetFileType(const StringPiece& path) {
+FileType GetFileType(const std::string& path) {
+// TODO(adamlesinski): I'd like to move this to ::android::base::utf8 but Windows does some macro
+// trickery with 'stat' and things don't override very well.
+#ifdef _WIN32
+  std::wstring path_utf16;
+  if (!::android::base::UTF8PathToWindowsLongPath(path.c_str(), &path_utf16)) {
+    return FileType::kNonexistant;
+  }
+
+  struct _stat64 sb;
+  int result = _wstat64(path_utf16.c_str(), &sb);
+#else
   struct stat sb;
-  if (stat(path.data(), &sb) < 0) {
+  int result = stat(path.c_str(), &sb);
+#endif
+
+  if (result == -1) {
     if (errno == ENOENT || errno == ENOTDIR) {
       return FileType::kNonexistant;
     }
@@ -72,27 +92,20 @@
   }
 }
 
-inline static int MkdirImpl(const StringPiece& path) {
-#ifdef _WIN32
-  return _mkdir(path.to_string().c_str());
-#else
-  return mkdir(path.to_string().c_str(), S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP);
-#endif
-}
-
-bool mkdirs(const StringPiece& path) {
-  const char* start = path.begin();
-  const char* end = path.end();
-  for (const char* current = start; current != end; ++current) {
-    if (*current == sDirSep && current != start) {
-      StringPiece parent_path(start, current - start);
-      int result = MkdirImpl(parent_path);
-      if (result < 0 && errno != EEXIST) {
-        return false;
-      }
+bool mkdirs(const std::string& path) {
+  constexpr const mode_t mode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP;
+  // Start after the first character so that we don't consume the root '/'.
+  // This is safe to do with unicode because '/' will never match with a continuation character.
+  size_t current_pos = 1u;
+  while ((current_pos = path.find(sDirSep, current_pos)) != std::string::npos) {
+    std::string parent_path = path.substr(0, current_pos);
+    int result = ::android::base::utf8::mkdir(parent_path.c_str(), mode);
+    if (result < 0 && errno != EEXIST) {
+      return false;
     }
+    current_pos += 1;
   }
-  return MkdirImpl(path) == 0 || errno == EEXIST;
+  return ::android::base::utf8::mkdir(path.c_str(), mode) == 0 || errno == EEXIST;
 }
 
 StringPiece GetStem(const StringPiece& path) {
@@ -129,10 +142,8 @@
 
 void AppendPath(std::string* base, StringPiece part) {
   CHECK(base != nullptr);
-  const bool base_has_trailing_sep =
-      (!base->empty() && *(base->end() - 1) == sDirSep);
-  const bool part_has_leading_sep =
-      (!part.empty() && *(part.begin()) == sDirSep);
+  const bool base_has_trailing_sep = (!base->empty() && *(base->end() - 1) == sDirSep);
+  const bool part_has_leading_sep = (!part.empty() && *(part.begin()) == sDirSep);
   if (base_has_trailing_sep && part_has_leading_sep) {
     // Remove the part's leading sep
     part = part.substr(1, part.size() - 1);
@@ -151,31 +162,34 @@
   return out_path;
 }
 
-Maybe<android::FileMap> MmapPath(const StringPiece& path,
-                                 std::string* out_error) {
-  std::unique_ptr<FILE, decltype(fclose)*> f = {fopen(path.data(), "rb"),
-                                                fclose};
-  if (!f) {
-    if (out_error) *out_error = android::base::SystemErrorCodeToString(errno);
+Maybe<FileMap> MmapPath(const std::string& path, std::string* out_error) {
+  int flags = O_RDONLY | O_CLOEXEC | O_BINARY;
+  unique_fd fd(TEMP_FAILURE_RETRY(::android::base::utf8::open(path.c_str(), flags)));
+  if (fd == -1) {
+    if (out_error) {
+      *out_error = SystemErrorCodeToString(errno);
+    }
     return {};
   }
 
-  int fd = fileno(f.get());
-
   struct stat filestats = {};
   if (fstat(fd, &filestats) != 0) {
-    if (out_error) *out_error = android::base::SystemErrorCodeToString(errno);
+    if (out_error) {
+      *out_error = SystemErrorCodeToString(errno);
+    }
     return {};
   }
 
-  android::FileMap filemap;
+  FileMap filemap;
   if (filestats.st_size == 0) {
     // mmap doesn't like a length of 0. Instead we return an empty FileMap.
     return std::move(filemap);
   }
 
-  if (!filemap.create(path.data(), fd, 0, filestats.st_size, true)) {
-    if (out_error) *out_error = android::base::SystemErrorCodeToString(errno);
+  if (!filemap.create(path.c_str(), fd, 0, filestats.st_size, true)) {
+    if (out_error) {
+      *out_error = SystemErrorCodeToString(errno);
+    }
     return {};
   }
   return std::move(filemap);
@@ -184,7 +198,7 @@
 bool AppendArgsFromFile(const StringPiece& path, std::vector<std::string>* out_arglist,
                         std::string* out_error) {
   std::string contents;
-  if (!android::base::ReadFileToString(path.to_string(), &contents, true /*follow_symlinks*/)) {
+  if (!ReadFileToString(path.to_string(), &contents, true /*follow_symlinks*/)) {
     if (out_error) {
       *out_error = "failed to read argument-list file";
     }
@@ -270,7 +284,7 @@
   const std::string root_dir = path.to_string();
   std::unique_ptr<DIR, decltype(closedir)*> d(opendir(root_dir.data()), closedir);
   if (!d) {
-    diag->Error(DiagMessage() << android::base::SystemErrorCodeToString(errno));
+    diag->Error(DiagMessage() << SystemErrorCodeToString(errno));
     return {};
   }
 
diff --git a/tools/aapt2/util/Files.h b/tools/aapt2/util/Files.h
index b3b1e48..b26e4fa 100644
--- a/tools/aapt2/util/Files.h
+++ b/tools/aapt2/util/Files.h
@@ -34,8 +34,10 @@
 
 #ifdef _WIN32
 constexpr const char sDirSep = '\\';
+constexpr const char sPathSep = ';';
 #else
 constexpr const char sDirSep = '/';
+constexpr const char sPathSep = ':';
 #endif
 
 enum class FileType {
@@ -50,79 +52,56 @@
   kSocket,
 };
 
-FileType GetFileType(const android::StringPiece& path);
+FileType GetFileType(const std::string& path);
 
-/*
- * Appends a path to `base`, separated by the directory separator.
- */
+// Appends a path to `base`, separated by the directory separator.
 void AppendPath(std::string* base, android::StringPiece part);
 
-/*
- * Makes all the directories in `path`. The last element in the path
- * is interpreted as a directory.
- */
-bool mkdirs(const android::StringPiece& path);
+// Makes all the directories in `path`. The last element in the path is interpreted as a directory.
+bool mkdirs(const std::string& path);
 
-/**
- * Returns all but the last part of the path.
- */
+// Returns all but the last part of the path.
 android::StringPiece GetStem(const android::StringPiece& path);
 
-/**
- * Returns the last part of the path with extension.
- */
+// Returns the last part of the path with extension.
 android::StringPiece GetFilename(const android::StringPiece& path);
 
-/**
- * Returns the extension of the path. This is the entire string after
- * the first '.' of the last part of the path.
- */
+// Returns the extension of the path. This is the entire string after the first '.' of the last part
+// of the path.
 android::StringPiece GetExtension(const android::StringPiece& path);
 
-/**
- * Converts a package name (com.android.app) to a path: com/android/app
- */
+// Converts a package name (com.android.app) to a path: com/android/app
 std::string PackageToPath(const android::StringPiece& package);
 
-/**
- * Creates a FileMap for the file at path.
- */
-Maybe<android::FileMap> MmapPath(const android::StringPiece& path, std::string* out_error);
+// Creates a FileMap for the file at path.
+Maybe<android::FileMap> MmapPath(const std::string& path, std::string* out_error);
 
-/**
- * Reads the file at path and appends each line to the outArgList vector.
- */
+// Reads the file at path and appends each line to the outArgList vector.
 bool AppendArgsFromFile(const android::StringPiece& path, std::vector<std::string>* out_arglist,
                         std::string* out_error);
 
-/*
- * Filter that determines which resource files/directories are
- * processed by AAPT. Takes a pattern string supplied by the user.
- * Pattern format is specified in the FileFilter::SetPattern() method.
- */
+// Filter that determines which resource files/directories are
+// processed by AAPT. Takes a pattern string supplied by the user.
+// Pattern format is specified in the FileFilter::SetPattern() method.
 class FileFilter {
  public:
   explicit FileFilter(IDiagnostics* diag) : diag_(diag) {}
 
-  /*
-   * Patterns syntax:
-   * - Delimiter is :
-   * - Entry can start with the flag ! to avoid printing a warning
-   *   about the file being ignored.
-   * - Entry can have the flag "<dir>" to match only directories
-   *   or <file> to match only files. Default is to match both.
-   * - Entry can be a simplified glob "<prefix>*" or "*<suffix>"
-   *   where prefix/suffix must have at least 1 character (so that
-   *   we don't match a '*' catch-all pattern.)
-   * - The special filenames "." and ".." are always ignored.
-   * - Otherwise the full string is matched.
-   * - match is not case-sensitive.
-   */
+  // Patterns syntax:
+  // - Delimiter is :
+  // - Entry can start with the flag ! to avoid printing a warning
+  //   about the file being ignored.
+  // - Entry can have the flag "<dir>" to match only directories
+  //   or <file> to match only files. Default is to match both.
+  // - Entry can be a simplified glob "<prefix>*" or "*<suffix>"
+  //   where prefix/suffix must have at least 1 character (so that
+  //   we don't match a '*' catch-all pattern.)
+  // - The special filenames "." and ".." are always ignored.
+  // - Otherwise the full string is matched.
+  // - match is not case-sensitive.
   bool SetPattern(const android::StringPiece& pattern);
 
-  /**
-   * Applies the filter, returning true for pass, false for fail.
-   */
+  // Applies the filter, returning true for pass, false for fail.
   bool operator()(const std::string& filename, FileType type) const;
 
  private:
diff --git a/tools/aapt2/util/Maybe_test.cpp b/tools/aapt2/util/Maybe_test.cpp
index ca14793..2057ddc 100644
--- a/tools/aapt2/util/Maybe_test.cpp
+++ b/tools/aapt2/util/Maybe_test.cpp
@@ -80,22 +80,22 @@
 
 TEST(MaybeTest, MakeNothing) {
   Maybe<int> val = make_nothing<int>();
-  AAPT_EXPECT_FALSE(val);
+  EXPECT_FALSE(val);
 
   Maybe<std::string> val2 = make_nothing<std::string>();
-  AAPT_EXPECT_FALSE(val2);
+  EXPECT_FALSE(val2);
 
   val2 = make_nothing<std::string>();
-  AAPT_EXPECT_FALSE(val2);
+  EXPECT_FALSE(val2);
 }
 
 TEST(MaybeTest, MakeSomething) {
   Maybe<int> val = make_value(23);
-  AAPT_ASSERT_TRUE(val);
+  ASSERT_TRUE(val);
   EXPECT_EQ(23, val.value());
 
   Maybe<std::string> val2 = make_value(std::string("hey"));
-  AAPT_ASSERT_TRUE(val2);
+  ASSERT_TRUE(val2);
   EXPECT_EQ(std::string("hey"), val2.value());
 }
 
diff --git a/tools/aapt2/util/Util.cpp b/tools/aapt2/util/Util.cpp
index 8a8be85..7c1c1ad 100644
--- a/tools/aapt2/util/Util.cpp
+++ b/tools/aapt2/util/Util.cpp
@@ -16,19 +16,22 @@
 
 #include "util/Util.h"
 
-#include <utils/Unicode.h>
 #include <algorithm>
 #include <ostream>
 #include <string>
 #include <vector>
 
 #include "androidfw/StringPiece.h"
+#include "utils/Unicode.h"
 
+#include "text/Unicode.h"
+#include "text/Utf8Iterator.h"
 #include "util/BigBuffer.h"
 #include "util/Maybe.h"
 
-using android::StringPiece;
-using android::StringPiece16;
+using ::aapt::text::Utf8Iterator;
+using ::android::StringPiece;
+using ::android::StringPiece16;
 
 namespace aapt {
 namespace util {
@@ -92,72 +95,55 @@
   return StringPiece(start, end - start);
 }
 
-StringPiece::const_iterator FindNonAlphaNumericAndNotInSet(
-    const StringPiece& str, const StringPiece& allowed_chars) {
-  const auto end_iter = str.end();
-  for (auto iter = str.begin(); iter != end_iter; ++iter) {
-    char c = *iter;
-    if ((c >= u'a' && c <= u'z') || (c >= u'A' && c <= u'Z') ||
-        (c >= u'0' && c <= u'9')) {
-      continue;
-    }
-
-    bool match = false;
-    for (char i : allowed_chars) {
-      if (c == i) {
-        match = true;
-        break;
-      }
-    }
-
-    if (!match) {
-      return iter;
+static int IsJavaNameImpl(const StringPiece& str) {
+  int pieces = 0;
+  for (const StringPiece& piece : Tokenize(str, '.')) {
+    pieces++;
+    if (!text::IsJavaIdentifier(piece)) {
+      return -1;
     }
   }
-  return end_iter;
+  return pieces;
 }
 
 bool IsJavaClassName(const StringPiece& str) {
-  size_t pieces = 0;
-  for (const StringPiece& piece : Tokenize(str, '.')) {
-    pieces++;
-    if (piece.empty()) {
-      return false;
-    }
-
-    // Can't have starting or trailing $ character.
-    if (piece.data()[0] == '$' || piece.data()[piece.size() - 1] == '$') {
-      return false;
-    }
-
-    if (FindNonAlphaNumericAndNotInSet(piece, "$_") != piece.end()) {
-      return false;
-    }
-  }
-  return pieces >= 2;
+  return IsJavaNameImpl(str) >= 2;
 }
 
 bool IsJavaPackageName(const StringPiece& str) {
-  if (str.empty()) {
-    return false;
-  }
+  return IsJavaNameImpl(str) >= 1;
+}
 
-  size_t pieces = 0;
+static int IsAndroidNameImpl(const StringPiece& str) {
+  int pieces = 0;
   for (const StringPiece& piece : Tokenize(str, '.')) {
-    pieces++;
     if (piece.empty()) {
-      return false;
+      return -1;
     }
 
-    if (piece.data()[0] == '_' || piece.data()[piece.size() - 1] == '_') {
-      return false;
+    const char first_character = piece.data()[0];
+    if (!::isalpha(first_character)) {
+      return -1;
     }
 
-    if (FindNonAlphaNumericAndNotInSet(piece, "_") != piece.end()) {
-      return false;
+    bool valid = std::all_of(piece.begin() + 1, piece.end(), [](const char c) -> bool {
+      return ::isalnum(c) || c == '_';
+    });
+
+    if (!valid) {
+      return -1;
     }
+    pieces++;
   }
-  return pieces >= 1;
+  return pieces;
+}
+
+bool IsAndroidPackageName(const StringPiece& str) {
+  return IsAndroidNameImpl(str) > 1 || str == "android";
+}
+
+bool IsAndroidSplitName(const StringPiece& str) {
+  return IsAndroidNameImpl(str) > 0;
 }
 
 Maybe<std::string> GetFullyQualifiedClassName(const StringPiece& package,
@@ -174,7 +160,7 @@
     return {};
   }
 
-  std::string result(package.data(), package.size());
+  std::string result = package.to_string();
   if (classname.data()[0] != '.') {
     result += '.';
   }
@@ -283,33 +269,46 @@
   return true;
 }
 
-static Maybe<std::string> ParseUnicodeCodepoint(const char** start,
-                                                const char* end) {
+static bool AppendCodepointToUtf8String(char32_t codepoint, std::string* output) {
+  ssize_t len = utf32_to_utf8_length(&codepoint, 1);
+  if (len < 0) {
+    return false;
+  }
+
+  const size_t start_append_pos = output->size();
+
+  // Make room for the next character.
+  output->resize(output->size() + len);
+
+  char* dst = &*(output->begin() + start_append_pos);
+  utf32_to_utf8(&codepoint, 1, dst, len + 1);
+  return true;
+}
+
+static bool AppendUnicodeCodepoint(Utf8Iterator* iter, std::string* output) {
   char32_t code = 0;
-  for (size_t i = 0; i < 4 && *start != end; i++, (*start)++) {
-    char c = **start;
+  for (size_t i = 0; i < 4 && iter->HasNext(); i++) {
+    char32_t codepoint = iter->Next();
     char32_t a;
-    if (c >= '0' && c <= '9') {
-      a = c - '0';
-    } else if (c >= 'a' && c <= 'f') {
-      a = c - 'a' + 10;
-    } else if (c >= 'A' && c <= 'F') {
-      a = c - 'A' + 10;
+    if (codepoint >= U'0' && codepoint <= U'9') {
+      a = codepoint - U'0';
+    } else if (codepoint >= U'a' && codepoint <= U'f') {
+      a = codepoint - U'a' + 10;
+    } else if (codepoint >= U'A' && codepoint <= U'F') {
+      a = codepoint - U'A' + 10;
     } else {
       return {};
     }
     code = (code << 4) | a;
   }
+  return AppendCodepointToUtf8String(code, output);
+}
 
-  ssize_t len = utf32_to_utf8_length(&code, 1);
-  if (len < 0) {
-    return {};
+static bool IsCodepointSpace(char32_t codepoint) {
+  if (static_cast<uint32_t>(codepoint) & 0xffffff00u) {
+    return false;
   }
-
-  std::string result_utf8;
-  result_utf8.resize(len);
-  utf32_to_utf8(&code, 1, &*result_utf8.begin(), len + 1);
-  return result_utf8;
+  return isspace(static_cast<char>(codepoint));
 }
 
 StringBuilder::StringBuilder(bool preserve_spaces) : preserve_spaces_(preserve_spaces) {
@@ -321,57 +320,46 @@
   }
 
   // Where the new data will be appended to.
-  size_t new_data_index = str_.size();
+  const size_t new_data_index = str_.size();
 
-  const char* const end = str.end();
-  const char* start = str.begin();
-  const char* current = start;
-  while (current != end) {
+  Utf8Iterator iter(str);
+  while (iter.HasNext()) {
+    const char32_t codepoint = iter.Next();
+
     if (last_char_was_escape_) {
-      switch (*current) {
-        case 't':
+      switch (codepoint) {
+        case U't':
           str_ += '\t';
           break;
-        case 'n':
+
+        case U'n':
           str_ += '\n';
           break;
-        case '#':
-          str_ += '#';
+
+        case U'#':
+        case U'@':
+        case U'?':
+        case U'"':
+        case U'\'':
+        case U'\\':
+          str_ += static_cast<char>(codepoint);
           break;
-        case '@':
-          str_ += '@';
-          break;
-        case '?':
-          str_ += '?';
-          break;
-        case '"':
-          str_ += '"';
-          break;
-        case '\'':
-          str_ += '\'';
-          break;
-        case '\\':
-          str_ += '\\';
-          break;
-        case 'u': {
-          current++;
-          Maybe<std::string> c = ParseUnicodeCodepoint(&current, end);
-          if (!c) {
+
+        case U'u':
+          if (!AppendUnicodeCodepoint(&iter, &str_)) {
             error_ = "invalid unicode escape sequence";
             return *this;
           }
-          str_ += c.value();
-          current -= 1;
           break;
-        }
 
         default:
-          // Ignore.
+          // Ignore the escape character and just include the codepoint.
+          AppendCodepointToUtf8String(codepoint, &str_);
           break;
       }
       last_char_was_escape_ = false;
-      start = current + 1;
-    } else if (!preserve_spaces_ && *current == '"') {
+
+    } else if (!preserve_spaces_ && codepoint == U'"') {
       if (!quote_ && trailing_space_) {
         // We found an opening quote, and we have trailing space, so we should append that
         // space now.
@@ -384,13 +372,13 @@
         }
       }
       quote_ = !quote_;
-      str_.append(start, current - start);
-      start = current + 1;
-    } else if (!preserve_spaces_ && *current == '\'' && !quote_) {
+
+    } else if (!preserve_spaces_ && codepoint == U'\'' && !quote_) {
       // This should be escaped.
       error_ = "unescaped apostrophe";
       return *this;
-    } else if (*current == '\\') {
+
+    } else if (codepoint == U'\\') {
       // This is an escape sequence, convert to the real value.
       if (!quote_ && trailing_space_) {
         // We had trailing whitespace, so
@@ -400,40 +388,35 @@
         }
         trailing_space_ = false;
       }
-      str_.append(start, current - start);
-      start = current + 1;
       last_char_was_escape_ = true;
-    } else if (!preserve_spaces_ && !quote_) {
-      // This is not quoted text, so look for whitespace.
-      if (isspace(*current)) {
-        // We found whitespace, see if we have seen some
-        // before.
-        if (!trailing_space_) {
-          // We didn't see a previous adjacent space,
-          // so mark that we did.
+    } else {
+      if (preserve_spaces_ || quote_) {
+        // Quotes mean everything is taken, including whitespace.
+        AppendCodepointToUtf8String(codepoint, &str_);
+      } else {
+        // This is not quoted text, so we will accumulate whitespace and only emit a single
+        // character of whitespace if it is followed by a non-whitespace character.
+        if (IsCodepointSpace(codepoint)) {
+          // We found whitespace.
           trailing_space_ = true;
-          str_.append(start, current - start);
+        } else {
+          if (trailing_space_) {
+            // We saw trailing space before, so replace all
+            // that trailing space with one space.
+            if (!str_.empty()) {
+              str_ += ' ';
+            }
+            trailing_space_ = false;
+          }
+          AppendCodepointToUtf8String(codepoint, &str_);
         }
-
-        // Keep skipping whitespace.
-        start = current + 1;
-      } else if (trailing_space_) {
-        // We saw trailing space before, so replace all
-        // that trailing space with one space.
-        if (!str_.empty()) {
-          str_ += ' ';
-        }
-        trailing_space_ = false;
       }
     }
-    current++;
   }
-  str_.append(start, end - start);
 
   // Accumulate the added string's UTF-16 length.
-  ssize_t len = utf8_to_utf16_length(
-      reinterpret_cast<const uint8_t*>(str_.data()) + new_data_index,
-      str_.size() - new_data_index);
+  ssize_t len = utf8_to_utf16_length(reinterpret_cast<const uint8_t*>(str_.data()) + new_data_index,
+                                     str_.size() - new_data_index);
   if (len < 0) {
     error_ = "invalid unicode code point";
     return *this;
diff --git a/tools/aapt2/util/Util.h b/tools/aapt2/util/Util.h
index b9ada77..f12746f 100644
--- a/tools/aapt2/util/Util.h
+++ b/tools/aapt2/util/Util.h
@@ -53,74 +53,64 @@
 std::vector<std::string> Split(const android::StringPiece& str, char sep);
 std::vector<std::string> SplitAndLowercase(const android::StringPiece& str, char sep);
 
-/**
- * Returns true if the string starts with prefix.
- */
+// Returns true if the string starts with prefix.
 bool StartsWith(const android::StringPiece& str, const android::StringPiece& prefix);
 
-/**
- * Returns true if the string ends with suffix.
- */
+// Returns true if the string ends with suffix.
 bool EndsWith(const android::StringPiece& str, const android::StringPiece& suffix);
 
-/**
- * Creates a new StringPiece16 that points to a substring
- * of the original string without leading or trailing whitespace.
- */
+// Creates a new StringPiece16 that points to a substring of the original string without leading or
+// trailing whitespace.
 android::StringPiece TrimWhitespace(const android::StringPiece& str);
 
-/**
- * UTF-16 isspace(). It basically checks for lower range characters that are
- * whitespace.
- */
-inline bool isspace16(char16_t c) { return c < 0x0080 && isspace(c); }
-
-/**
- * Returns an iterator to the first character that is not alpha-numeric and that
- * is not in the allowedChars set.
- */
-android::StringPiece::const_iterator FindNonAlphaNumericAndNotInSet(
-    const android::StringPiece& str, const android::StringPiece& allowed_chars);
-
-/**
- * Tests that the string is a valid Java class name.
- */
+// Tests that the string is a valid Java class name.
 bool IsJavaClassName(const android::StringPiece& str);
 
-/**
- * Tests that the string is a valid Java package name.
- */
+// Tests that the string is a valid Java package name.
 bool IsJavaPackageName(const android::StringPiece& str);
 
-/**
- * Converts the class name to a fully qualified class name from the given
- * `package`. Ex:
- *
- * asdf         --> package.asdf
- * .asdf        --> package.asdf
- * .a.b         --> package.a.b
- * asdf.adsf    --> asdf.adsf
- */
+// Tests that the string is a valid Android package name. More strict than a Java package name.
+// - First character of each component (separated by '.') must be an ASCII letter.
+// - Subsequent characters of a component can be ASCII alphanumeric or an underscore.
+// - Package must contain at least two components, unless it is 'android'.
+bool IsAndroidPackageName(const android::StringPiece& str);
+
+// Tests that the string is a valid Android split name.
+// - First character of each component (separated by '.') must be an ASCII letter.
+// - Subsequent characters of a component can be ASCII alphanumeric or an underscore.
+bool IsAndroidSplitName(const android::StringPiece& str);
+
+// Converts the class name to a fully qualified class name from the given
+// `package`. Ex:
+//
+// asdf         --> package.asdf
+// .asdf        --> package.asdf
+// .a.b         --> package.a.b
+// asdf.adsf    --> asdf.adsf
 Maybe<std::string> GetFullyQualifiedClassName(const android::StringPiece& package,
                                               const android::StringPiece& class_name);
 
-/**
- * Makes a std::unique_ptr<> with the template parameter inferred by the compiler.
- * This will be present in C++14 and can be removed then.
- */
+template <typename T>
+typename std::enable_if<std::is_arithmetic<T>::value, int>::type compare(const T& a, const T& b) {
+  if (a < b) {
+    return -1;
+  } else if (a > b) {
+    return 1;
+  }
+  return 0;
+}
+
+// Makes a std::unique_ptr<> with the template parameter inferred by the compiler.
+// This will be present in C++14 and can be removed then.
 template <typename T, class... Args>
 std::unique_ptr<T> make_unique(Args&&... args) {
   return std::unique_ptr<T>(new T{std::forward<Args>(args)...});
 }
 
-/**
- * Writes a set of items to the std::ostream, joining the times with the
- * provided
- * separator.
- */
+// Writes a set of items to the std::ostream, joining the times with the provided separator.
 template <typename Container>
-::std::function<::std::ostream&(::std::ostream&)> Joiner(
-    const Container& container, const char* sep) {
+::std::function<::std::ostream&(::std::ostream&)> Joiner(const Container& container,
+                                                         const char* sep) {
   using std::begin;
   using std::end;
   const auto begin_iter = begin(container);
@@ -136,32 +126,19 @@
   };
 }
 
-/**
- * Helper method to extract a UTF-16 string from a StringPool. If the string is
- * stored as UTF-8,
- * the conversion to UTF-16 happens within ResStringPool.
- */
+// Helper method to extract a UTF-16 string from a StringPool. If the string is stored as UTF-8,
+// the conversion to UTF-16 happens within ResStringPool.
 android::StringPiece16 GetString16(const android::ResStringPool& pool, size_t idx);
 
-/**
- * Helper method to extract a UTF-8 string from a StringPool. If the string is
- * stored as UTF-16,
- * the conversion from UTF-16 to UTF-8 does not happen in ResStringPool and is
- * done by this method,
- * which maintains no state or cache. This means we must return an std::string
- * copy.
- */
+// Helper method to extract a UTF-8 string from a StringPool. If the string is stored as UTF-16,
+// the conversion from UTF-16 to UTF-8 does not happen in ResStringPool and is done by this method,
+// which maintains no state or cache. This means we must return an std::string copy.
 std::string GetString(const android::ResStringPool& pool, size_t idx);
 
-/**
- * Checks that the Java string format contains no non-positional arguments
- * (arguments without
- * explicitly specifying an index) when there are more than one argument. This
- * is an error
- * because translations may rearrange the order of the arguments in the string,
- * which will
- * break the string interpolation.
- */
+// Checks that the Java string format contains no non-positional arguments (arguments without
+// explicitly specifying an index) when there are more than one argument. This is an error
+// because translations may rearrange the order of the arguments in the string, which will
+// break the string interpolation.
 bool VerifyJavaStringFormat(const android::StringPiece& str);
 
 class StringBuilder {
@@ -190,40 +167,48 @@
   std::string error_;
 };
 
-inline const std::string& StringBuilder::ToString() const { return str_; }
+inline const std::string& StringBuilder::ToString() const {
+  return str_;
+}
 
-inline const std::string& StringBuilder::Error() const { return error_; }
+inline const std::string& StringBuilder::Error() const {
+  return error_;
+}
 
-inline bool StringBuilder::IsEmpty() const { return str_.empty(); }
+inline bool StringBuilder::IsEmpty() const {
+  return str_.empty();
+}
 
-inline size_t StringBuilder::Utf16Len() const { return utf16_len_; }
+inline size_t StringBuilder::Utf16Len() const {
+  return utf16_len_;
+}
 
-inline StringBuilder::operator bool() const { return error_.empty(); }
+inline StringBuilder::operator bool() const {
+  return error_.empty();
+}
 
-/**
- * Converts a UTF8 string to a UTF16 string.
- */
+// Converts a UTF8 string to a UTF16 string.
 std::u16string Utf8ToUtf16(const android::StringPiece& utf8);
 std::string Utf16ToUtf8(const android::StringPiece16& utf16);
 
-/**
- * Writes the entire BigBuffer to the output stream.
- */
+// Writes the entire BigBuffer to the output stream.
 bool WriteAll(std::ostream& out, const BigBuffer& buffer);
 
-/*
- * Copies the entire BigBuffer into a single buffer.
- */
+// Copies the entire BigBuffer into a single buffer.
 std::unique_ptr<uint8_t[]> Copy(const BigBuffer& buffer);
 
-/**
- * A Tokenizer implemented as an iterable collection. It does not allocate
- * any memory on the heap nor use standard containers.
- */
+// A Tokenizer implemented as an iterable collection. It does not allocate any memory on the heap
+// nor use standard containers.
 class Tokenizer {
  public:
   class iterator {
    public:
+    using reference = android::StringPiece&;
+    using value_type = android::StringPiece;
+    using difference_type = size_t;
+    using pointer = android::StringPiece*;
+    using iterator_category = std::forward_iterator_tag;
+
     iterator(const iterator&) = default;
     iterator& operator=(const iterator&) = default;
 
@@ -246,47 +231,55 @@
 
   Tokenizer(android::StringPiece str, char sep);
 
-  iterator begin() { return begin_; }
+  iterator begin() const {
+    return begin_;
+  }
 
-  iterator end() { return end_; }
+  iterator end() const {
+    return end_;
+  }
 
  private:
   const iterator begin_;
   const iterator end_;
 };
 
-inline Tokenizer Tokenize(const android::StringPiece& str, char sep) { return Tokenizer(str, sep); }
+inline Tokenizer Tokenize(const android::StringPiece& str, char sep) {
+  return Tokenizer(str, sep);
+}
 
-inline uint16_t HostToDevice16(uint16_t value) { return htods(value); }
+inline uint16_t HostToDevice16(uint16_t value) {
+  return htods(value);
+}
 
-inline uint32_t HostToDevice32(uint32_t value) { return htodl(value); }
+inline uint32_t HostToDevice32(uint32_t value) {
+  return htodl(value);
+}
 
-inline uint16_t DeviceToHost16(uint16_t value) { return dtohs(value); }
+inline uint16_t DeviceToHost16(uint16_t value) {
+  return dtohs(value);
+}
 
-inline uint32_t DeviceToHost32(uint32_t value) { return dtohl(value); }
+inline uint32_t DeviceToHost32(uint32_t value) {
+  return dtohl(value);
+}
 
-/**
- * Given a path like: res/xml-sw600dp/foo.xml
- *
- * Extracts "res/xml-sw600dp/" into outPrefix.
- * Extracts "foo" into outEntry.
- * Extracts ".xml" into outSuffix.
- *
- * Returns true if successful.
- */
+// Given a path like: res/xml-sw600dp/foo.xml
+//
+// Extracts "res/xml-sw600dp/" into outPrefix.
+// Extracts "foo" into outEntry.
+// Extracts ".xml" into outSuffix.
+//
+// Returns true if successful.
 bool ExtractResFilePathParts(const android::StringPiece& path, android::StringPiece* out_prefix,
                              android::StringPiece* out_entry, android::StringPiece* out_suffix);
 
 }  // namespace util
 
-/**
- * Stream operator for functions. Calls the function with the stream as an
- * argument.
- * In the aapt namespace for lookup.
- */
-inline ::std::ostream& operator<<(
-    ::std::ostream& out,
-    const ::std::function<::std::ostream&(::std::ostream&)>& f) {
+// Stream operator for functions. Calls the function with the stream as an argument.
+// In the aapt namespace for lookup.
+inline ::std::ostream& operator<<(::std::ostream& out,
+                                  const ::std::function<::std::ostream&(::std::ostream&)>& f) {
   return f(out);
 }
 
diff --git a/tools/aapt2/util/Util_test.cpp b/tools/aapt2/util/Util_test.cpp
index 5cced3e..2d1242a 100644
--- a/tools/aapt2/util/Util_test.cpp
+++ b/tools/aapt2/util/Util_test.cpp
@@ -117,77 +117,75 @@
   EXPECT_TRUE(util::IsJavaClassName("android.test.Class$Inner"));
   EXPECT_TRUE(util::IsJavaClassName("android_test.test.Class"));
   EXPECT_TRUE(util::IsJavaClassName("_android_.test._Class_"));
-  EXPECT_FALSE(util::IsJavaClassName("android.test.$Inner"));
-  EXPECT_FALSE(util::IsJavaClassName("android.test.Inner$"));
+  EXPECT_TRUE(util::IsJavaClassName("android.test.$Inner"));
+  EXPECT_TRUE(util::IsJavaClassName("android.test.Inner$"));
+  EXPECT_TRUE(util::IsJavaClassName("com.foo.FøøBar"));
+
   EXPECT_FALSE(util::IsJavaClassName(".test.Class"));
   EXPECT_FALSE(util::IsJavaClassName("android"));
+  EXPECT_FALSE(util::IsJavaClassName("FooBar"));
 }
 
 TEST(UtilTest, IsJavaPackageName) {
   EXPECT_TRUE(util::IsJavaPackageName("android"));
   EXPECT_TRUE(util::IsJavaPackageName("android.test"));
   EXPECT_TRUE(util::IsJavaPackageName("android.test_thing"));
-  EXPECT_FALSE(util::IsJavaPackageName("_android"));
-  EXPECT_FALSE(util::IsJavaPackageName("android_"));
+  EXPECT_TRUE(util::IsJavaPackageName("_android"));
+  EXPECT_TRUE(util::IsJavaPackageName("android_"));
+  EXPECT_TRUE(util::IsJavaPackageName("android._test"));
+  EXPECT_TRUE(util::IsJavaPackageName("cøm.foo"));
+
   EXPECT_FALSE(util::IsJavaPackageName("android."));
   EXPECT_FALSE(util::IsJavaPackageName(".android"));
-  EXPECT_FALSE(util::IsJavaPackageName("android._test"));
   EXPECT_FALSE(util::IsJavaPackageName(".."));
 }
 
+TEST(UtilTest, IsAndroidPackageName) {
+  EXPECT_TRUE(util::IsAndroidPackageName("android"));
+  EXPECT_TRUE(util::IsAndroidPackageName("android.test"));
+  EXPECT_TRUE(util::IsAndroidPackageName("com.foo"));
+  EXPECT_TRUE(util::IsAndroidPackageName("com.foo.test_thing"));
+  EXPECT_TRUE(util::IsAndroidPackageName("com.foo.testing_thing_"));
+  EXPECT_TRUE(util::IsAndroidPackageName("com.foo.test_99_"));
+
+  EXPECT_FALSE(util::IsAndroidPackageName("android._test"));
+  EXPECT_FALSE(util::IsAndroidPackageName("com"));
+  EXPECT_FALSE(util::IsAndroidPackageName("_android"));
+  EXPECT_FALSE(util::IsAndroidPackageName("android."));
+  EXPECT_FALSE(util::IsAndroidPackageName(".android"));
+  EXPECT_FALSE(util::IsAndroidPackageName(".."));
+  EXPECT_FALSE(util::IsAndroidPackageName("cøm.foo"));
+}
+
 TEST(UtilTest, FullyQualifiedClassName) {
-  Maybe<std::string> res = util::GetFullyQualifiedClassName("android", ".asdf");
-  AAPT_ASSERT_TRUE(res);
-  EXPECT_EQ(res.value(), "android.asdf");
-
-  res = util::GetFullyQualifiedClassName("android", ".a.b");
-  AAPT_ASSERT_TRUE(res);
-  EXPECT_EQ(res.value(), "android.a.b");
-
-  res = util::GetFullyQualifiedClassName("android", "a.b");
-  AAPT_ASSERT_TRUE(res);
-  EXPECT_EQ(res.value(), "a.b");
-
-  res = util::GetFullyQualifiedClassName("", "a.b");
-  AAPT_ASSERT_TRUE(res);
-  EXPECT_EQ(res.value(), "a.b");
-
-  res = util::GetFullyQualifiedClassName("android", "Class");
-  AAPT_ASSERT_TRUE(res);
-  EXPECT_EQ(res.value(), "android.Class");
-
-  res = util::GetFullyQualifiedClassName("", "");
-  AAPT_ASSERT_FALSE(res);
-
-  res = util::GetFullyQualifiedClassName("android", "./Apple");
-  AAPT_ASSERT_FALSE(res);
+  EXPECT_THAT(util::GetFullyQualifiedClassName("android", ".asdf"), Eq("android.asdf"));
+  EXPECT_THAT(util::GetFullyQualifiedClassName("android", ".a.b"), Eq("android.a.b"));
+  EXPECT_THAT(util::GetFullyQualifiedClassName("android", "a.b"), Eq("a.b"));
+  EXPECT_THAT(util::GetFullyQualifiedClassName("", "a.b"), Eq("a.b"));
+  EXPECT_THAT(util::GetFullyQualifiedClassName("android", "Class"), Eq("android.Class"));
+  EXPECT_FALSE(util::GetFullyQualifiedClassName("", ""));
+  EXPECT_FALSE(util::GetFullyQualifiedClassName("android", "./Apple"));
 }
 
 TEST(UtilTest, ExtractResourcePathComponents) {
   StringPiece prefix, entry, suffix;
-  ASSERT_TRUE(util::ExtractResFilePathParts("res/xml-sw600dp/entry.xml",
-                                            &prefix, &entry, &suffix));
-  EXPECT_EQ(prefix, "res/xml-sw600dp/");
-  EXPECT_EQ(entry, "entry");
-  EXPECT_EQ(suffix, ".xml");
+  ASSERT_TRUE(util::ExtractResFilePathParts("res/xml-sw600dp/entry.xml", &prefix, &entry, &suffix));
+  EXPECT_THAT(prefix, Eq("res/xml-sw600dp/"));
+  EXPECT_THAT(entry, Eq("entry"));
+  EXPECT_THAT(suffix, Eq(".xml"));
 
-  ASSERT_TRUE(util::ExtractResFilePathParts("res/xml-sw600dp/entry.9.png",
-                                            &prefix, &entry, &suffix));
+  ASSERT_TRUE(util::ExtractResFilePathParts("res/xml-sw600dp/entry.9.png", &prefix, &entry, &suffix));
+  EXPECT_THAT(prefix, Eq("res/xml-sw600dp/"));
+  EXPECT_THAT(entry, Eq("entry"));
+  EXPECT_THAT(suffix, Eq(".9.png"));
 
-  EXPECT_EQ(prefix, "res/xml-sw600dp/");
-  EXPECT_EQ(entry, "entry");
-  EXPECT_EQ(suffix, ".9.png");
+  ASSERT_TRUE(util::ExtractResFilePathParts("res//.", &prefix, &entry, &suffix));
+  EXPECT_THAT(prefix, Eq("res//"));
+  EXPECT_THAT(entry, Eq(""));
+  EXPECT_THAT(suffix, Eq("."));
 
-  EXPECT_FALSE(util::ExtractResFilePathParts("AndroidManifest.xml", &prefix,
-                                             &entry, &suffix));
-  EXPECT_FALSE(
-      util::ExtractResFilePathParts("res/.xml", &prefix, &entry, &suffix));
-
-  ASSERT_TRUE(
-      util::ExtractResFilePathParts("res//.", &prefix, &entry, &suffix));
-  EXPECT_EQ(prefix, "res//");
-  EXPECT_EQ(entry, "");
-  EXPECT_EQ(suffix, ".");
+  EXPECT_FALSE(util::ExtractResFilePathParts("AndroidManifest.xml", &prefix, &entry, &suffix));
+  EXPECT_FALSE(util::ExtractResFilePathParts("res/.xml", &prefix, &entry, &suffix));
 }
 
 TEST(UtilTest, VerifyJavaStringFormat) {
diff --git a/tools/aapt2/xml/XmlActionExecutor.cpp b/tools/aapt2/xml/XmlActionExecutor.cpp
index 352a933..cc664a5 100644
--- a/tools/aapt2/xml/XmlActionExecutor.cpp
+++ b/tools/aapt2/xml/XmlActionExecutor.cpp
@@ -78,7 +78,7 @@
                                 XmlResource* doc) const {
   SourcePathDiagnostics source_diag(doc->file.source, diag);
 
-  Element* el = FindRootElement(doc);
+  Element* el = doc->root.get();
   if (!el) {
     if (policy == XmlActionExecutorPolicy::kWhitelist) {
       source_diag.Error(DiagMessage() << "no root XML tag found");
diff --git a/tools/aapt2/xml/XmlActionExecutor_test.cpp b/tools/aapt2/xml/XmlActionExecutor_test.cpp
index 7110c90..0fe7ab0 100644
--- a/tools/aapt2/xml/XmlActionExecutor_test.cpp
+++ b/tools/aapt2/xml/XmlActionExecutor_test.cpp
@@ -18,6 +18,8 @@
 
 #include "test/Test.h"
 
+using ::testing::NotNull;
+
 namespace aapt {
 namespace xml {
 
@@ -42,12 +44,11 @@
       test::BuildXmlDom("<manifest><application /></manifest>");
 
   StdErrDiagnostics diag;
-  ASSERT_TRUE(
-      executor.Execute(XmlActionExecutorPolicy::kNone, &diag, doc.get()));
-  ASSERT_NE(nullptr, manifest_el);
+  ASSERT_TRUE(executor.Execute(XmlActionExecutorPolicy::kNone, &diag, doc.get()));
+  ASSERT_THAT(manifest_el, NotNull());
   EXPECT_EQ(std::string("manifest"), manifest_el->name);
 
-  ASSERT_NE(nullptr, application_el);
+  ASSERT_THAT(application_el, NotNull());
   EXPECT_EQ(std::string("application"), application_el->name);
 }
 
@@ -58,8 +59,7 @@
   std::unique_ptr<XmlResource> doc =
       test::BuildXmlDom("<manifest><application /><activity /></manifest>");
   StdErrDiagnostics diag;
-  ASSERT_FALSE(
-      executor.Execute(XmlActionExecutorPolicy::kWhitelist, &diag, doc.get()));
+  ASSERT_FALSE(executor.Execute(XmlActionExecutorPolicy::kWhitelist, &diag, doc.get()));
 }
 
 }  // namespace xml
diff --git a/tools/aapt2/xml/XmlDom.cpp b/tools/aapt2/xml/XmlDom.cpp
index 885ab3e..1d122db 100644
--- a/tools/aapt2/xml/XmlDom.cpp
+++ b/tools/aapt2/xml/XmlDom.cpp
@@ -29,8 +29,9 @@
 #include "XmlPullParser.h"
 #include "util/Util.h"
 
-using android::StringPiece;
-using android::StringPiece16;
+using ::aapt::io::InputStream;
+using ::android::StringPiece;
+using ::android::StringPiece16;
 
 namespace aapt {
 namespace xml {
@@ -38,17 +39,15 @@
 constexpr char kXmlNamespaceSep = 1;
 
 struct Stack {
-  std::unique_ptr<xml::Node> root;
-  std::stack<xml::Node*> node_stack;
+  std::unique_ptr<xml::Element> root;
+  std::stack<xml::Element*> node_stack;
+  std::unique_ptr<xml::Element> pending_element;
   std::string pending_comment;
   std::unique_ptr<xml::Text> last_text_node;
 };
 
-/**
- * Extracts the namespace and name of an expanded element or attribute name.
- */
-static void SplitName(const char* name, std::string* out_ns,
-                      std::string* out_name) {
+// Extracts the namespace and name of an expanded element or attribute name.
+static void SplitName(const char* name, std::string* out_ns, std::string* out_name) {
   const char* p = name;
   while (*p != 0 && *p != kXmlNamespaceSep) {
     p++;
@@ -66,6 +65,7 @@
 static void FinishPendingText(Stack* stack) {
   if (stack->last_text_node != nullptr) {
     if (!stack->last_text_node->text.empty()) {
+      CHECK(!stack->node_stack.empty());
       stack->node_stack.top()->AppendChild(std::move(stack->last_text_node));
     } else {
       // Drop an empty text node.
@@ -74,48 +74,27 @@
   }
 }
 
-static void AddToStack(Stack* stack, XML_Parser parser,
-                       std::unique_ptr<Node> node) {
-  node->line_number = XML_GetCurrentLineNumber(parser);
-  node->column_number = XML_GetCurrentColumnNumber(parser);
-
-  Node* this_node = node.get();
-  if (!stack->node_stack.empty()) {
-    stack->node_stack.top()->AppendChild(std::move(node));
-  } else {
-    stack->root = std::move(node);
-  }
-
-  if (!NodeCast<Text>(this_node)) {
-    stack->node_stack.push(this_node);
-  }
-}
-
-static void XMLCALL StartNamespaceHandler(void* user_data, const char* prefix,
-                                          const char* uri) {
+static void XMLCALL StartNamespaceHandler(void* user_data, const char* prefix, const char* uri) {
   XML_Parser parser = reinterpret_cast<XML_Parser>(user_data);
   Stack* stack = reinterpret_cast<Stack*>(XML_GetUserData(parser));
   FinishPendingText(stack);
 
-  std::unique_ptr<Namespace> ns = util::make_unique<Namespace>();
-  if (prefix) {
-    ns->namespace_prefix = prefix;
-  }
+  NamespaceDecl decl;
+  decl.line_number = XML_GetCurrentLineNumber(parser);
+  decl.column_number = XML_GetCurrentColumnNumber(parser);
+  decl.prefix = prefix ? prefix : "";
+  decl.uri = uri ? uri : "";
 
-  if (uri) {
-    ns->namespace_uri = uri;
+  if (stack->pending_element == nullptr) {
+    stack->pending_element = util::make_unique<Element>();
   }
-
-  AddToStack(stack, parser, std::move(ns));
+  stack->pending_element->namespace_decls.push_back(std::move(decl));
 }
 
-static void XMLCALL EndNamespaceHandler(void* user_data, const char* prefix) {
+static void XMLCALL EndNamespaceHandler(void* user_data, const char* /*prefix*/) {
   XML_Parser parser = reinterpret_cast<XML_Parser>(user_data);
   Stack* stack = reinterpret_cast<Stack*>(XML_GetUserData(parser));
   FinishPendingText(stack);
-
-  CHECK(!stack->node_stack.empty());
-  stack->node_stack.pop();
 }
 
 static bool less_attribute(const Attribute& lhs, const Attribute& rhs) {
@@ -123,28 +102,42 @@
          std::tie(rhs.namespace_uri, rhs.name, rhs.value);
 }
 
-static void XMLCALL StartElementHandler(void* user_data, const char* name,
-                                        const char** attrs) {
+static void XMLCALL StartElementHandler(void* user_data, const char* name, const char** attrs) {
   XML_Parser parser = reinterpret_cast<XML_Parser>(user_data);
   Stack* stack = reinterpret_cast<Stack*>(XML_GetUserData(parser));
   FinishPendingText(stack);
 
-  std::unique_ptr<Element> el = util::make_unique<Element>();
+  std::unique_ptr<Element> el;
+  if (stack->pending_element != nullptr) {
+    el = std::move(stack->pending_element);
+  } else {
+    el = util::make_unique<Element>();
+  }
+
+  el->line_number = XML_GetCurrentLineNumber(parser);
+  el->column_number = XML_GetCurrentColumnNumber(parser);
+  el->comment = std::move(stack->pending_comment);
+
   SplitName(name, &el->namespace_uri, &el->name);
 
   while (*attrs) {
     Attribute attribute;
     SplitName(*attrs++, &attribute.namespace_uri, &attribute.name);
     attribute.value = *attrs++;
-
-    // Insert in sorted order.
-    auto iter = std::lower_bound(el->attributes.begin(), el->attributes.end(), attribute,
-                                 less_attribute);
-    el->attributes.insert(iter, std::move(attribute));
+    el->attributes.push_back(std::move(attribute));
   }
 
-  el->comment = std::move(stack->pending_comment);
-  AddToStack(stack, parser, std::move(el));
+  // Sort the attributes.
+  std::sort(el->attributes.begin(), el->attributes.end(), less_attribute);
+
+  // Add to the stack.
+  Element* this_el = el.get();
+  if (!stack->node_stack.empty()) {
+    stack->node_stack.top()->AppendChild(std::move(el));
+  } else {
+    stack->root = std::move(el);
+  }
+  stack->node_stack.push(this_el);
 }
 
 static void XMLCALL EndElementHandler(void* user_data, const char* name) {
@@ -189,40 +182,41 @@
   stack->pending_comment += comment;
 }
 
-std::unique_ptr<XmlResource> Inflate(std::istream* in, IDiagnostics* diag, const Source& source) {
+std::unique_ptr<XmlResource> Inflate(InputStream* in, IDiagnostics* diag, const Source& source) {
   Stack stack;
 
-  XML_Parser parser = XML_ParserCreateNS(nullptr, kXmlNamespaceSep);
-  XML_SetUserData(parser, &stack);
-  XML_UseParserAsHandlerArg(parser);
-  XML_SetElementHandler(parser, StartElementHandler, EndElementHandler);
-  XML_SetNamespaceDeclHandler(parser, StartNamespaceHandler, EndNamespaceHandler);
-  XML_SetCharacterDataHandler(parser, CharacterDataHandler);
-  XML_SetCommentHandler(parser, CommentDataHandler);
+  std::unique_ptr<std::remove_pointer<XML_Parser>::type, decltype(XML_ParserFree)*> parser = {
+      XML_ParserCreateNS(nullptr, kXmlNamespaceSep), XML_ParserFree};
+  XML_SetUserData(parser.get(), &stack);
+  XML_UseParserAsHandlerArg(parser.get());
+  XML_SetElementHandler(parser.get(), StartElementHandler, EndElementHandler);
+  XML_SetNamespaceDeclHandler(parser.get(), StartNamespaceHandler, EndNamespaceHandler);
+  XML_SetCharacterDataHandler(parser.get(), CharacterDataHandler);
+  XML_SetCommentHandler(parser.get(), CommentDataHandler);
 
-  char buffer[1024];
-  while (!in->eof()) {
-    in->read(buffer, sizeof(buffer) / sizeof(buffer[0]));
-    if (in->bad() && !in->eof()) {
-      stack.root = {};
-      diag->Error(DiagMessage(source) << strerror(errno));
-      break;
-    }
-
-    if (XML_Parse(parser, buffer, in->gcount(), in->eof()) == XML_STATUS_ERROR) {
-      stack.root = {};
-      diag->Error(DiagMessage(source.WithLine(XML_GetCurrentLineNumber(parser)))
-                  << XML_ErrorString(XML_GetErrorCode(parser)));
-      break;
+  const char* buffer = nullptr;
+  size_t buffer_size = 0;
+  while (in->Next(reinterpret_cast<const void**>(&buffer), &buffer_size)) {
+    if (XML_Parse(parser.get(), buffer, buffer_size, false) == XML_STATUS_ERROR) {
+      diag->Error(DiagMessage(source.WithLine(XML_GetCurrentLineNumber(parser.get())))
+                  << XML_ErrorString(XML_GetErrorCode(parser.get())));
+      return {};
     }
   }
 
-  XML_ParserFree(parser);
-  if (stack.root) {
-    return util::make_unique<XmlResource>(ResourceFile{{}, {}, source}, StringPool{},
-                                          std::move(stack.root));
+  if (in->HadError()) {
+    diag->Error(DiagMessage(source) << in->GetError());
+    return {};
+  } else {
+    // Finish off the parsing.
+    if (XML_Parse(parser.get(), nullptr, 0u, true) == XML_STATUS_ERROR) {
+      diag->Error(DiagMessage(source.WithLine(XML_GetCurrentLineNumber(parser.get())))
+                  << XML_ErrorString(XML_GetErrorCode(parser.get())));
+      return {};
+    }
   }
-  return {};
+  return util::make_unique<XmlResource>(ResourceFile{{}, {}, source}, StringPool{},
+                                        std::move(stack.root));
 }
 
 static void CopyAttributes(Element* el, android::ResXMLParser* parser, StringPool* out_pool) {
@@ -261,13 +255,13 @@
 std::unique_ptr<XmlResource> Inflate(const void* data, size_t data_len, IDiagnostics* diag,
                                      const Source& source) {
   // We import the android namespace because on Windows NO_ERROR is a macro, not
-  // an enum, which
-  // causes errors when qualifying it with android::
+  // an enum, which causes errors when qualifying it with android::
   using namespace android;
 
   StringPool string_pool;
-  std::unique_ptr<Node> root;
-  std::stack<Node*> node_stack;
+  std::unique_ptr<Element> root;
+  std::stack<Element*> node_stack;
+  std::unique_ptr<Element> pending_element;
 
   ResXMLTree tree;
   if (tree.setTo(data, data_len) != NO_ERROR) {
@@ -275,57 +269,79 @@
   }
 
   ResXMLParser::event_code_t code;
-  while ((code = tree.next()) != ResXMLParser::BAD_DOCUMENT &&
-         code != ResXMLParser::END_DOCUMENT) {
+  while ((code = tree.next()) != ResXMLParser::BAD_DOCUMENT && code != ResXMLParser::END_DOCUMENT) {
     std::unique_ptr<Node> new_node;
     switch (code) {
       case ResXMLParser::START_NAMESPACE: {
-        std::unique_ptr<Namespace> node = util::make_unique<Namespace>();
+        NamespaceDecl decl;
+        decl.line_number = tree.getLineNumber();
+
         size_t len;
         const char16_t* str16 = tree.getNamespacePrefix(&len);
         if (str16) {
-          node->namespace_prefix = util::Utf16ToUtf8(StringPiece16(str16, len));
+          decl.prefix = util::Utf16ToUtf8(StringPiece16(str16, len));
         }
 
         str16 = tree.getNamespaceUri(&len);
         if (str16) {
-          node->namespace_uri = util::Utf16ToUtf8(StringPiece16(str16, len));
+          decl.uri = util::Utf16ToUtf8(StringPiece16(str16, len));
         }
-        new_node = std::move(node);
+
+        if (pending_element == nullptr) {
+          pending_element = util::make_unique<Element>();
+        }
+        pending_element->namespace_decls.push_back(std::move(decl));
         break;
       }
 
       case ResXMLParser::START_TAG: {
-        std::unique_ptr<Element> node = util::make_unique<Element>();
+        std::unique_ptr<Element> el;
+        if (pending_element != nullptr) {
+          el = std::move(pending_element);
+        } else {
+          el = util::make_unique<Element>();
+        }
+        el->line_number = tree.getLineNumber();
+
         size_t len;
         const char16_t* str16 = tree.getElementNamespace(&len);
         if (str16) {
-          node->namespace_uri = util::Utf16ToUtf8(StringPiece16(str16, len));
+          el->namespace_uri = util::Utf16ToUtf8(StringPiece16(str16, len));
         }
 
         str16 = tree.getElementName(&len);
         if (str16) {
-          node->name = util::Utf16ToUtf8(StringPiece16(str16, len));
+          el->name = util::Utf16ToUtf8(StringPiece16(str16, len));
         }
 
-        CopyAttributes(node.get(), &tree, &string_pool);
+        Element* this_el = el.get();
+        CopyAttributes(el.get(), &tree, &string_pool);
 
-        new_node = std::move(node);
+        if (!node_stack.empty()) {
+          node_stack.top()->AppendChild(std::move(el));
+        } else {
+          root = std::move(el);
+        }
+        node_stack.push(this_el);
         break;
       }
 
       case ResXMLParser::TEXT: {
-        std::unique_ptr<Text> node = util::make_unique<Text>();
+        std::unique_ptr<Text> text = util::make_unique<Text>();
+        text->line_number = tree.getLineNumber();
         size_t len;
         const char16_t* str16 = tree.getText(&len);
         if (str16) {
-          node->text = util::Utf16ToUtf8(StringPiece16(str16, len));
+          text->text = util::Utf16ToUtf8(StringPiece16(str16, len));
         }
-        new_node = std::move(node);
+        CHECK(!node_stack.empty());
+        node_stack.top()->AppendChild(std::move(text));
         break;
       }
 
       case ResXMLParser::END_NAMESPACE:
+        break;
+
       case ResXMLParser::END_TAG:
         CHECK(!node_stack.empty());
         node_stack.pop();
@@ -335,74 +351,32 @@
         LOG(FATAL) << "unhandled XML chunk type";
         break;
     }
-
-    if (new_node) {
-      new_node->line_number = tree.getLineNumber();
-
-      Node* this_node = new_node.get();
-      if (!root) {
-        CHECK(node_stack.empty()) << "node stack should be empty";
-        root = std::move(new_node);
-      } else {
-        CHECK(!node_stack.empty()) << "node stack should not be empty";
-        node_stack.top()->AppendChild(std::move(new_node));
-      }
-
-      if (!NodeCast<Text>(this_node)) {
-        node_stack.push(this_node);
-      }
-    }
   }
   return util::make_unique<XmlResource>(ResourceFile{}, std::move(string_pool), std::move(root));
 }
 
-std::unique_ptr<Node> Namespace::Clone(const ElementCloneFunc& el_cloner) {
-  auto ns = util::make_unique<Namespace>();
-  ns->comment = comment;
-  ns->line_number = line_number;
-  ns->column_number = column_number;
-  ns->namespace_prefix = namespace_prefix;
-  ns->namespace_uri = namespace_uri;
-  ns->children.reserve(children.size());
-  for (const std::unique_ptr<xml::Node>& child : children) {
-    ns->AppendChild(child->Clone(el_cloner));
-  }
-  return std::move(ns);
-}
-
-Element* FindRootElement(XmlResource* doc) {
-  return FindRootElement(doc->root.get());
-}
-
 Element* FindRootElement(Node* node) {
-  if (!node) {
+  if (node == nullptr) {
     return nullptr;
   }
 
-  Element* el = nullptr;
-  while ((el = NodeCast<Element>(node)) == nullptr) {
-    if (node->children.empty()) {
-      return nullptr;
-    }
-    // We are looking for the first element, and namespaces can only have one
-    // child.
-    node = node->children.front().get();
+  while (node->parent != nullptr) {
+    node = node->parent;
   }
-  return el;
+  return NodeCast<Element>(node);
 }
 
-void Node::AppendChild(std::unique_ptr<Node> child) {
+void Element::AppendChild(std::unique_ptr<Node> child) {
   child->parent = this;
   children.push_back(std::move(child));
 }
 
-void Node::InsertChild(size_t index, std::unique_ptr<Node> child) {
+void Element::InsertChild(size_t index, std::unique_ptr<Node> child) {
   child->parent = this;
   children.insert(children.begin() + index, std::move(child));
 }
 
-Attribute* Element::FindAttribute(const StringPiece& ns,
-                                  const StringPiece& name) {
+Attribute* Element::FindAttribute(const StringPiece& ns, const StringPiece& name) {
   for (auto& attr : attributes) {
     if (ns == attr.namespace_uri && name == attr.name) {
       return &attr;
@@ -424,21 +398,11 @@
   return FindChildWithAttribute(ns, name, {}, {}, {});
 }
 
-Element* Element::FindChildWithAttribute(const StringPiece& ns,
-                                         const StringPiece& name,
-                                         const StringPiece& attr_ns,
-                                         const StringPiece& attr_name,
+Element* Element::FindChildWithAttribute(const StringPiece& ns, const StringPiece& name,
+                                         const StringPiece& attr_ns, const StringPiece& attr_name,
                                          const StringPiece& attr_value) {
-  for (auto& child_node : children) {
-    Node* child = child_node.get();
-    while (NodeCast<Namespace>(child)) {
-      if (child->children.empty()) {
-        break;
-      }
-      child = child->children[0].get();
-    }
-
-    if (Element* el = NodeCast<Element>(child)) {
+  for (auto& child : children) {
+    if (Element* el = NodeCast<Element>(child.get())) {
       if (ns == el->namespace_uri && name == el->name) {
         if (attr_ns.empty() && attr_name.empty()) {
           return el;
@@ -457,23 +421,16 @@
 std::vector<Element*> Element::GetChildElements() {
   std::vector<Element*> elements;
   for (auto& child_node : children) {
-    Node* child = child_node.get();
-    while (NodeCast<Namespace>(child)) {
-      if (child->children.empty()) {
-        break;
-      }
-      child = child->children[0].get();
-    }
-
-    if (Element* el = NodeCast<Element>(child)) {
-      elements.push_back(el);
+    if (Element* child = NodeCast<Element>(child_node.get())) {
+      elements.push_back(child);
     }
   }
   return elements;
 }
 
-std::unique_ptr<Node> Element::Clone(const ElementCloneFunc& el_cloner) {
+std::unique_ptr<Node> Element::Clone(const ElementCloneFunc& el_cloner) const {
   auto el = util::make_unique<Element>();
+  el->namespace_decls = namespace_decls;
   el->comment = comment;
   el->line_number = line_number;
   el->column_number = column_number;
@@ -488,7 +445,17 @@
   return std::move(el);
 }
 
-std::unique_ptr<Node> Text::Clone(const ElementCloneFunc&) {
+std::unique_ptr<Element> Element::CloneElement(const ElementCloneFunc& el_cloner) const {
+  return std::unique_ptr<Element>(static_cast<Element*>(Clone(el_cloner).release()));
+}
+
+void Element::Accept(Visitor* visitor) {
+  visitor->BeforeVisitElement(this);
+  visitor->Visit(this);
+  visitor->AfterVisitElement(this);
+}
+
+std::unique_ptr<Node> Text::Clone(const ElementCloneFunc&) const {
   auto t = util::make_unique<Text>();
   t->comment = comment;
   t->line_number = line_number;
@@ -497,21 +464,22 @@
   return std::move(t);
 }
 
-void PackageAwareVisitor::Visit(Namespace* ns) {
-  bool added = false;
-  if (Maybe<ExtractedPackage> maybe_package =
-          ExtractPackageFromNamespace(ns->namespace_uri)) {
-    ExtractedPackage& package = maybe_package.value();
-    package_decls_.push_back(
-        PackageDecl{ns->namespace_prefix, std::move(package)});
-    added = true;
-  }
+void Text::Accept(Visitor* visitor) {
+  visitor->Visit(this);
+}
 
-  Visitor::Visit(ns);
-
-  if (added) {
-    package_decls_.pop_back();
+void PackageAwareVisitor::BeforeVisitElement(Element* el) {
+  std::vector<PackageDecl> decls;
+  for (const NamespaceDecl& decl : el->namespace_decls) {
+    if (Maybe<ExtractedPackage> maybe_package = ExtractPackageFromNamespace(decl.uri)) {
+      decls.push_back(PackageDecl{decl.prefix, std::move(maybe_package.value())});
+    }
   }
+  package_decls_.push_back(std::move(decls));
+}
+
+void PackageAwareVisitor::AfterVisitElement(Element* el) {
+  package_decls_.pop_back();
 }
 
 Maybe<ExtractedPackage> PackageAwareVisitor::TransformPackageAlias(
@@ -522,11 +490,16 @@
 
   const auto rend = package_decls_.rend();
   for (auto iter = package_decls_.rbegin(); iter != rend; ++iter) {
-    if (alias == iter->prefix) {
-      if (iter->package.package.empty()) {
-        return ExtractedPackage{local_package.to_string(), iter->package.private_namespace};
+    const std::vector<PackageDecl>& decls = *iter;
+    const auto rend2 = decls.rend();
+    for (auto iter2 = decls.rbegin(); iter2 != rend2; ++iter2) {
+      const PackageDecl& decl = *iter2;
+      if (alias == decl.prefix) {
+        if (decl.package.package.empty()) {
+          return ExtractedPackage{local_package.to_string(), decl.package.private_namespace};
+        }
+        return decl.package;
       }
-      return iter->package;
     }
   }
   return {};
diff --git a/tools/aapt2/xml/XmlDom.h b/tools/aapt2/xml/XmlDom.h
index 2dc99d6..1542243 100644
--- a/tools/aapt2/xml/XmlDom.h
+++ b/tools/aapt2/xml/XmlDom.h
@@ -17,7 +17,6 @@
 #ifndef AAPT_XML_DOM_H
 #define AAPT_XML_DOM_H
 
-#include <istream>
 #include <memory>
 #include <string>
 #include <vector>
@@ -27,58 +26,40 @@
 #include "Diagnostics.h"
 #include "Resource.h"
 #include "ResourceValues.h"
+#include "io/Io.h"
 #include "util/Util.h"
 #include "xml/XmlUtil.h"
 
 namespace aapt {
 namespace xml {
 
-class RawVisitor;
-
 class Element;
+class Visitor;
 
-/**
- * Base class for all XML nodes.
- */
+// Base class for all XML nodes.
 class Node {
  public:
-  Node* parent = nullptr;
-  size_t line_number = 0;
-  size_t column_number = 0;
-  std::string comment;
-  std::vector<std::unique_ptr<Node>> children;
-
   virtual ~Node() = default;
 
-  void AppendChild(std::unique_ptr<Node> child);
-  void InsertChild(size_t index, std::unique_ptr<Node> child);
-  virtual void Accept(RawVisitor* visitor) = 0;
+  Element* parent = nullptr;
+  size_t line_number = 0u;
+  size_t column_number = 0u;
+  std::string comment;
+
+  virtual void Accept(Visitor* visitor) = 0;
 
   using ElementCloneFunc = std::function<void(const Element&, Element*)>;
 
   // Clones the Node subtree, using the given function to decide how to clone an Element.
-  virtual std::unique_ptr<Node> Clone(const ElementCloneFunc& el_cloner) = 0;
+  virtual std::unique_ptr<Node> Clone(const ElementCloneFunc& el_cloner) const = 0;
 };
 
-/**
- * Base class that implements the visitor methods for a
- * subclass of Node.
- */
-template <typename Derived>
-class BaseNode : public Node {
- public:
-  virtual void Accept(RawVisitor* visitor) override;
-};
-
-/**
- * A Namespace XML node. Can only have one child.
- */
-class Namespace : public BaseNode<Namespace> {
- public:
-  std::string namespace_prefix;
-  std::string namespace_uri;
-
-  std::unique_ptr<Node> Clone(const ElementCloneFunc& el_cloner) override;
+// A namespace declaration (xmlns:prefix="uri").
+struct NamespaceDecl {
+  std::string prefix;
+  std::string uri;
+  size_t line_number = 0u;
+  size_t column_number = 0u;
 };
 
 struct AaptAttribute {
@@ -90,9 +71,7 @@
   Maybe<ResourceId> id;
 };
 
-/**
- * An XML attribute.
- */
+// An XML attribute.
 struct Attribute {
   std::string namespace_uri;
   std::string name;
@@ -102,41 +81,50 @@
   std::unique_ptr<Item> compiled_value;
 };
 
-/**
- * An Element XML node.
- */
-class Element : public BaseNode<Element> {
+// An Element XML node.
+class Element : public Node {
  public:
+  // Ordered namespace prefix declarations.
+  std::vector<NamespaceDecl> namespace_decls;
+
   std::string namespace_uri;
   std::string name;
   std::vector<Attribute> attributes;
+  std::vector<std::unique_ptr<Node>> children;
+
+  void AppendChild(std::unique_ptr<Node> child);
+  void InsertChild(size_t index, std::unique_ptr<Node> child);
 
   Attribute* FindAttribute(const android::StringPiece& ns, const android::StringPiece& name);
   const Attribute* FindAttribute(const android::StringPiece& ns,
                                  const android::StringPiece& name) const;
-  xml::Element* FindChild(const android::StringPiece& ns, const android::StringPiece& name);
-  xml::Element* FindChildWithAttribute(const android::StringPiece& ns,
-                                       const android::StringPiece& name,
-                                       const android::StringPiece& attr_ns,
-                                       const android::StringPiece& attr_name,
-                                       const android::StringPiece& attr_value);
-  std::vector<xml::Element*> GetChildElements();
-  std::unique_ptr<Node> Clone(const ElementCloneFunc& el_cloner) override;
+  Element* FindChild(const android::StringPiece& ns, const android::StringPiece& name);
+  Element* FindChildWithAttribute(const android::StringPiece& ns, const android::StringPiece& name,
+                                  const android::StringPiece& attr_ns,
+                                  const android::StringPiece& attr_name,
+                                  const android::StringPiece& attr_value);
+  std::vector<Element*> GetChildElements();
+
+  // Due to overriding of subtypes not working with unique_ptr, define a convenience Clone method
+  // that knows cloning an element returns an element.
+  std::unique_ptr<Element> CloneElement(const ElementCloneFunc& el_cloner) const;
+
+  std::unique_ptr<Node> Clone(const ElementCloneFunc& el_cloner) const override;
+
+  void Accept(Visitor* visitor) override;
 };
 
-/**
- * A Text (CDATA) XML node. Can not have any children.
- */
-class Text : public BaseNode<Text> {
+// A Text (CDATA) XML node. Can not have any children.
+class Text : public Node {
  public:
   std::string text;
 
-  std::unique_ptr<Node> Clone(const ElementCloneFunc& el_cloner) override;
+  std::unique_ptr<Node> Clone(const ElementCloneFunc& el_cloner) const override;
+
+  void Accept(Visitor* visitor) override;
 };
 
-/**
- * An XML resource with a source, name, and XML tree.
- */
+// An XML resource with a source, name, and XML tree.
 class XmlResource {
  public:
   ResourceFile file;
@@ -146,99 +134,121 @@
   // is destroyed.
   StringPool string_pool;
 
-  std::unique_ptr<xml::Node> root;
+  std::unique_ptr<xml::Element> root;
 };
 
-/**
- * Inflates an XML DOM from a text stream, logging errors to the logger.
- * Returns the root node on success, or nullptr on failure.
- */
-std::unique_ptr<XmlResource> Inflate(std::istream* in, IDiagnostics* diag, const Source& source);
+// Inflates an XML DOM from an InputStream, logging errors to the logger.
+// Returns the root node on success, or nullptr on failure.
+std::unique_ptr<XmlResource> Inflate(io::InputStream* in, IDiagnostics* diag, const Source& source);
 
-/**
- * Inflates an XML DOM from a binary ResXMLTree, logging errors to the logger.
- * Returns the root node on success, or nullptr on failure.
- */
+// Inflates an XML DOM from a binary ResXMLTree, logging errors to the logger.
+// Returns the root node on success, or nullptr on failure.
 std::unique_ptr<XmlResource> Inflate(const void* data, size_t data_len, IDiagnostics* diag,
                                      const Source& source);
 
-Element* FindRootElement(XmlResource* doc);
 Element* FindRootElement(Node* node);
 
-/**
- * A visitor interface for the different XML Node subtypes. This will not
- * traverse into
- * children. Use Visitor for that.
- */
-class RawVisitor {
+// Visitor whose default implementation visits the children nodes of any node.
+class Visitor {
  public:
-  virtual ~RawVisitor() = default;
+  virtual ~Visitor() = default;
 
-  virtual void Visit(Namespace* node) {}
-  virtual void Visit(Element* node) {}
-  virtual void Visit(Text* text) {}
-};
+  virtual void Visit(Element* el) {
+    VisitChildren(el);
+  }
 
-/**
- * Visitor whose default implementation visits the children nodes of any node.
- */
-class Visitor : public RawVisitor {
- public:
-  using RawVisitor::Visit;
+  virtual void Visit(Text* text) {
+  }
 
-  void Visit(Namespace* node) override { VisitChildren(node); }
+ protected:
+  Visitor() = default;
 
-  void Visit(Element* node) override { VisitChildren(node); }
-
-  void Visit(Text* text) override { VisitChildren(text); }
-
-  void VisitChildren(Node* node) {
-    for (auto& child : node->children) {
+  void VisitChildren(Element* el) {
+    for (auto& child : el->children) {
       child->Accept(this);
     }
   }
+
+  virtual void BeforeVisitElement(Element* el) {
+  }
+  virtual void AfterVisitElement(Element* el) {
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(Visitor);
+
+  friend class Element;
 };
 
-/**
- * An XML DOM visitor that will record the package name for a namespace prefix.
- */
+// An XML DOM visitor that will record the package name for a namespace prefix.
 class PackageAwareVisitor : public Visitor, public IPackageDeclStack {
  public:
   using Visitor::Visit;
 
-  void Visit(Namespace* ns) override;
   Maybe<ExtractedPackage> TransformPackageAlias(
       const android::StringPiece& alias, const android::StringPiece& local_package) const override;
 
+ protected:
+  PackageAwareVisitor() = default;
+
+  void BeforeVisitElement(Element* el) override;
+  void AfterVisitElement(Element* el) override;
+
  private:
+  DISALLOW_COPY_AND_ASSIGN(PackageAwareVisitor);
+
   struct PackageDecl {
     std::string prefix;
     ExtractedPackage package;
   };
 
-  std::vector<PackageDecl> package_decls_;
+  std::vector<std::vector<PackageDecl>> package_decls_;
 };
 
-// Implementations
+namespace internal {
 
-template <typename Derived>
-void BaseNode<Derived>::Accept(RawVisitor* visitor) {
-  visitor->Visit(static_cast<Derived*>(this));
-}
+// Base class that overrides the default behaviour and does not descend into child nodes.
+class NodeCastBase : public Visitor {
+ public:
+  void Visit(Element* el) override {
+  }
+  void Visit(Text* el) override {
+  }
+
+ protected:
+  NodeCastBase() = default;
+
+  void BeforeVisitElement(Element* el) override {
+  }
+  void AfterVisitElement(Element* el) override {
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(NodeCastBase);
+};
 
 template <typename T>
-class NodeCastImpl : public RawVisitor {
+class NodeCastImpl : public NodeCastBase {
  public:
-  using RawVisitor::Visit;
+  using NodeCastBase::Visit;
+
+  NodeCastImpl() = default;
 
   T* value = nullptr;
 
-  void Visit(T* v) override { value = v; }
+  void Visit(T* v) override {
+    value = v;
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(NodeCastImpl);
 };
 
+}  // namespace internal
+
 template <typename T>
 T* NodeCast(Node* node) {
-  NodeCastImpl<T> visitor;
+  internal::NodeCastImpl<T> visitor;
   node->Accept(&visitor);
   return visitor.value;
 }
diff --git a/tools/aapt2/xml/XmlDom_test.cpp b/tools/aapt2/xml/XmlDom_test.cpp
index 031801e..b501cfd 100644
--- a/tools/aapt2/xml/XmlDom_test.cpp
+++ b/tools/aapt2/xml/XmlDom_test.cpp
@@ -16,19 +16,23 @@
 
 #include "xml/XmlDom.h"
 
-#include <sstream>
 #include <string>
 
+#include "flatten/XmlFlattener.h"
+#include "io/StringInputStream.h"
 #include "test/Test.h"
 
-namespace aapt {
+using ::aapt::io::StringInputStream;
+using ::testing::Eq;
+using ::testing::NotNull;
+using ::testing::SizeIs;
+using ::testing::StrEq;
 
-constexpr const char* kXmlPreamble =
-    "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
+namespace aapt {
+namespace xml {
 
 TEST(XmlDomTest, Inflate) {
-  std::stringstream in(kXmlPreamble);
-  in << R"(
+  std::string input = R"(<?xml version="1.0" encoding="utf-8"?>
       <Layout xmlns:android="http://schemas.android.com/apk/res/android"
           android:layout_width="match_parent"
           android:layout_height="wrap_content">
@@ -37,47 +41,112 @@
             android:layout_height="wrap_content" />
       </Layout>)";
 
-  const Source source("test.xml");
   StdErrDiagnostics diag;
-  std::unique_ptr<xml::XmlResource> doc = xml::Inflate(&in, &diag, source);
-  ASSERT_NE(doc, nullptr);
+  StringInputStream in(input);
+  std::unique_ptr<XmlResource> doc = Inflate(&in, &diag, Source("test.xml"));
+  ASSERT_THAT(doc, NotNull());
 
-  xml::Namespace* ns = xml::NodeCast<xml::Namespace>(doc->root.get());
-  ASSERT_NE(ns, nullptr);
-  EXPECT_EQ(ns->namespace_uri, xml::kSchemaAndroid);
-  EXPECT_EQ(ns->namespace_prefix, "android");
+  Element* el = doc->root.get();
+  EXPECT_THAT(el->namespace_decls, SizeIs(1u));
+  EXPECT_THAT(el->namespace_decls[0].uri, StrEq(xml::kSchemaAndroid));
+  EXPECT_THAT(el->namespace_decls[0].prefix, StrEq("android"));
+}
+
+TEST(XmlDomTest, BinaryInflate) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  std::unique_ptr<XmlResource> doc = util::make_unique<XmlResource>();
+  doc->root = util::make_unique<Element>();
+  doc->root->name = "Layout";
+  doc->root->line_number = 2u;
+
+  NamespaceDecl decl;
+  decl.uri = kSchemaAndroid;
+  decl.prefix = "android";
+  decl.line_number = 2u;
+  doc->root->namespace_decls.push_back(decl);
+
+  BigBuffer buffer(4096);
+  XmlFlattener flattener(&buffer, {});
+  ASSERT_TRUE(flattener.Consume(context.get(), doc.get()));
+
+  auto block = util::Copy(buffer);
+  std::unique_ptr<XmlResource> new_doc =
+      Inflate(block.get(), buffer.size(), context->GetDiagnostics(), Source("test.xml"));
+  ASSERT_THAT(new_doc, NotNull());
+
+  EXPECT_THAT(new_doc->root->name, StrEq("Layout"));
+  EXPECT_THAT(new_doc->root->line_number, Eq(2u));
+  ASSERT_THAT(new_doc->root->namespace_decls, SizeIs(1u));
+  EXPECT_THAT(new_doc->root->namespace_decls[0].uri, StrEq(kSchemaAndroid));
+  EXPECT_THAT(new_doc->root->namespace_decls[0].prefix, StrEq("android"));
+  EXPECT_THAT(new_doc->root->namespace_decls[0].line_number, Eq(2u));
 }
 
 // Escaping is handled after parsing of the values for resource-specific values.
 TEST(XmlDomTest, ForwardEscapes) {
-  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDom(R"(
+  std::unique_ptr<XmlResource> doc = test::BuildXmlDom(R"(
       <element value="\?hello" pattern="\\d{5}">\\d{5}</element>)");
 
-  xml::Element* el = xml::FindRootElement(doc->root.get());
-  ASSERT_NE(nullptr, el);
+  Element* el = doc->root.get();
 
-  xml::Attribute* attr = el->FindAttribute({}, "pattern");
-  ASSERT_NE(nullptr, attr);
-  EXPECT_EQ("\\\\d{5}", attr->value);
+  Attribute* attr = el->FindAttribute({}, "pattern");
+  ASSERT_THAT(attr, NotNull());
+  EXPECT_THAT(attr->value, Eq("\\\\d{5}"));
 
   attr = el->FindAttribute({}, "value");
-  ASSERT_NE(nullptr, attr);
-  EXPECT_EQ("\\?hello", attr->value);
+  ASSERT_THAT(attr, NotNull());
+  EXPECT_THAT(attr->value, Eq("\\?hello"));
 
-  xml::Text* text = xml::NodeCast<xml::Text>(el->children[0].get());
-  ASSERT_NE(nullptr, text);
-  EXPECT_EQ("\\\\d{5}", text->text);
+  ASSERT_THAT(el->children, SizeIs(1u));
+
+  Text* text = xml::NodeCast<xml::Text>(el->children[0].get());
+  ASSERT_THAT(text, NotNull());
+  EXPECT_THAT(text->text, Eq("\\\\d{5}"));
 }
 
 TEST(XmlDomTest, XmlEscapeSequencesAreParsed) {
-  std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDom(R"(<element value="&quot;" />)");
-
-  xml::Element* el = xml::FindRootElement(doc.get());
-  ASSERT_NE(nullptr, el);
-
-  xml::Attribute* attr = el->FindAttribute({}, "value");
-  ASSERT_NE(nullptr, attr);
-  EXPECT_EQ("\"", attr->value);
+  std::unique_ptr<XmlResource> doc = test::BuildXmlDom(R"(<element value="&quot;" />)");
+  Attribute* attr = doc->root->FindAttribute({}, "value");
+  ASSERT_THAT(attr, NotNull());
+  EXPECT_THAT(attr->value, Eq("\""));
 }
 
+class TestVisitor : public PackageAwareVisitor {
+ public:
+  using PackageAwareVisitor::Visit;
+
+  void Visit(Element* el) override {
+    if (el->name == "View1") {
+      EXPECT_THAT(TransformPackageAlias("one", "local"),
+                  Eq(make_value(ExtractedPackage{"com.one", false})));
+    } else if (el->name == "View2") {
+      EXPECT_THAT(TransformPackageAlias("one", "local"),
+                  Eq(make_value(ExtractedPackage{"com.one", false})));
+      EXPECT_THAT(TransformPackageAlias("two", "local"),
+                  Eq(make_value(ExtractedPackage{"com.two", false})));
+    } else if (el->name == "View3") {
+      EXPECT_THAT(TransformPackageAlias("one", "local"),
+                  Eq(make_value(ExtractedPackage{"com.one", false})));
+      EXPECT_THAT(TransformPackageAlias("two", "local"),
+                  Eq(make_value(ExtractedPackage{"com.two", false})));
+      EXPECT_THAT(TransformPackageAlias("three", "local"),
+                  Eq(make_value(ExtractedPackage{"com.three", false})));
+    }
+  }
+};
+
+TEST(XmlDomTest, PackageAwareXmlVisitor) {
+  std::unique_ptr<XmlResource> doc = test::BuildXmlDom(R"(
+      <View1 xmlns:one="http://schemas.android.com/apk/res/com.one">
+        <View2 xmlns:two="http://schemas.android.com/apk/res/com.two">
+          <View3 xmlns:three="http://schemas.android.com/apk/res/com.three" />
+        </View2>
+      </View1>)");
+
+  Debug::DumpXml(doc.get());
+  TestVisitor visitor;
+  doc->root->Accept(&visitor);
+}
+
+}  // namespace xml
 }  // namespace aapt
diff --git a/tools/aapt2/xml/XmlPullParser.cpp b/tools/aapt2/xml/XmlPullParser.cpp
index c2a9c82..30bdc50 100644
--- a/tools/aapt2/xml/XmlPullParser.cpp
+++ b/tools/aapt2/xml/XmlPullParser.cpp
@@ -22,14 +22,15 @@
 #include "xml/XmlPullParser.h"
 #include "xml/XmlUtil.h"
 
-using android::StringPiece;
+using ::aapt::io::InputStream;
+using ::android::StringPiece;
 
 namespace aapt {
 namespace xml {
 
 constexpr char kXmlNamespaceSep = 1;
 
-XmlPullParser::XmlPullParser(std::istream& in) : in_(in), empty_(), depth_(0) {
+XmlPullParser::XmlPullParser(InputStream* in) : in_(in), empty_(), depth_(0) {
   parser_ = XML_ParserCreateNS(nullptr, kXmlNamespaceSep);
   XML_SetUserData(parser_, this);
   XML_SetElementHandler(parser_, StartElementHandler, EndElementHandler);
@@ -40,30 +41,35 @@
   event_queue_.push(EventData{Event::kStartDocument, 0, depth_++});
 }
 
-XmlPullParser::~XmlPullParser() { XML_ParserFree(parser_); }
+XmlPullParser::~XmlPullParser() {
+  XML_ParserFree(parser_);
+}
 
 XmlPullParser::Event XmlPullParser::Next() {
   const Event currentEvent = event();
-  if (currentEvent == Event::kBadDocument ||
-      currentEvent == Event::kEndDocument) {
+  if (currentEvent == Event::kBadDocument || currentEvent == Event::kEndDocument) {
     return currentEvent;
   }
 
   event_queue_.pop();
   while (event_queue_.empty()) {
-    in_.read(buffer_, sizeof(buffer_) / sizeof(*buffer_));
+    const char* buffer = nullptr;
+    size_t buffer_size = 0;
+    bool done = false;
+    if (!in_->Next(reinterpret_cast<const void**>(&buffer), &buffer_size)) {
+      if (in_->HadError()) {
+        error_ = in_->GetError();
+        event_queue_.push(EventData{Event::kBadDocument});
+        break;
+      }
 
-    const bool done = in_.eof();
-    if (in_.bad() && !done) {
-      error_ = strerror(errno);
-      event_queue_.push(EventData{Event::kBadDocument});
-      continue;
+      done = true;
     }
 
-    if (XML_Parse(parser_, buffer_, in_.gcount(), done) == XML_STATUS_ERROR) {
+    if (XML_Parse(parser_, buffer, buffer_size, done) == XML_STATUS_ERROR) {
       error_ = XML_ErrorString(XML_GetErrorCode(parser_));
       event_queue_.push(EventData{Event::kBadDocument});
-      continue;
+      break;
     }
 
     if (done) {
diff --git a/tools/aapt2/xml/XmlPullParser.h b/tools/aapt2/xml/XmlPullParser.h
index cdeeefd..a00caa1 100644
--- a/tools/aapt2/xml/XmlPullParser.h
+++ b/tools/aapt2/xml/XmlPullParser.h
@@ -31,6 +31,7 @@
 #include "androidfw/StringPiece.h"
 
 #include "Resource.h"
+#include "io/Io.h"
 #include "process/IResourceTableConsumer.h"
 #include "util/Maybe.h"
 #include "xml/XmlUtil.h"
@@ -64,7 +65,7 @@
   static bool SkipCurrentElement(XmlPullParser* parser);
   static bool IsGoodEvent(Event event);
 
-  explicit XmlPullParser(std::istream& in);
+  explicit XmlPullParser(io::InputStream* in);
   ~XmlPullParser();
 
   /**
@@ -169,9 +170,8 @@
     std::vector<Attribute> attributes;
   };
 
-  std::istream& in_;
+  io::InputStream* in_;
   XML_Parser parser_;
-  char buffer_[16384];
   std::queue<EventData> event_queue_;
   std::string error_;
   const std::string empty_;
@@ -228,18 +228,15 @@
   return out;
 }
 
-inline bool XmlPullParser::NextChildNode(XmlPullParser* parser,
-                                         size_t start_depth) {
+inline bool XmlPullParser::NextChildNode(XmlPullParser* parser, size_t start_depth) {
   Event event;
 
   // First get back to the start depth.
-  while (IsGoodEvent(event = parser->Next()) &&
-         parser->depth() > start_depth + 1) {
+  while (IsGoodEvent(event = parser->Next()) && parser->depth() > start_depth + 1) {
   }
 
   // Now look for the first good node.
-  while ((event != Event::kEndElement || parser->depth() > start_depth) &&
-         IsGoodEvent(event)) {
+  while ((event != Event::kEndElement || parser->depth() > start_depth) && IsGoodEvent(event)) {
     switch (event) {
       case Event::kText:
       case Event::kComment:
diff --git a/tools/aapt2/xml/XmlPullParser_test.cpp b/tools/aapt2/xml/XmlPullParser_test.cpp
index 1cce485..681d9d4 100644
--- a/tools/aapt2/xml/XmlPullParser_test.cpp
+++ b/tools/aapt2/xml/XmlPullParser_test.cpp
@@ -16,21 +16,22 @@
 
 #include "xml/XmlPullParser.h"
 
-#include <sstream>
-
 #include "androidfw/StringPiece.h"
 
+#include "io/StringInputStream.h"
 #include "test/Test.h"
 
-using android::StringPiece;
+using ::aapt::io::StringInputStream;
+using ::android::StringPiece;
 
 namespace aapt {
 
 TEST(XmlPullParserTest, NextChildNodeTraversesCorrectly) {
-  std::stringstream str;
-  str << "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
-         "<a><b><c xmlns:a=\"http://schema.org\"><d/></c><e/></b></a>";
-  xml::XmlPullParser parser(str);
+  std::string str =
+      R"(<?xml version="1.0" encoding="utf-8"?>
+         <a><b><c xmlns:a="http://schema.org"><d/></c><e/></b></a>)";
+  StringInputStream input(str);
+  xml::XmlPullParser parser(&input);
 
   const size_t depth_outer = parser.depth();
   ASSERT_TRUE(xml::XmlPullParser::NextChildNode(&parser, depth_outer));
diff --git a/tools/aapt2/xml/XmlUtil.h b/tools/aapt2/xml/XmlUtil.h
index 1650ac2..866b6dc 100644
--- a/tools/aapt2/xml/XmlUtil.h
+++ b/tools/aapt2/xml/XmlUtil.h
@@ -26,79 +26,56 @@
 namespace xml {
 
 constexpr const char* kSchemaAuto = "http://schemas.android.com/apk/res-auto";
-constexpr const char* kSchemaPublicPrefix =
-    "http://schemas.android.com/apk/res/";
-constexpr const char* kSchemaPrivatePrefix =
-    "http://schemas.android.com/apk/prv/res/";
-constexpr const char* kSchemaAndroid =
-    "http://schemas.android.com/apk/res/android";
+constexpr const char* kSchemaPublicPrefix = "http://schemas.android.com/apk/res/";
+constexpr const char* kSchemaPrivatePrefix = "http://schemas.android.com/apk/prv/res/";
+constexpr const char* kSchemaAndroid = "http://schemas.android.com/apk/res/android";
 constexpr const char* kSchemaTools = "http://schemas.android.com/tools";
 constexpr const char* kSchemaAapt = "http://schemas.android.com/aapt";
 
-/**
- * Result of extracting a package name from a namespace URI declaration.
- */
+// Result of extracting a package name from a namespace URI declaration.
 struct ExtractedPackage {
-  /**
-   * The name of the package. This can be the empty string, which means that the
-   * package
-   * should be assumed to be the package being compiled.
-   */
+  // The name of the package. This can be the empty string, which means that the package
+  // should be assumed to be the package being compiled.
   std::string package;
 
-  /**
-   * True if the package's private namespace was declared. This means that
-   * private resources
-   * are made visible.
-   */
+  // True if the package's private namespace was declared. This means that private resources
+  // are made visible.
   bool private_namespace;
+
+  friend inline bool operator==(const ExtractedPackage& a, const ExtractedPackage& b) {
+    return a.package == b.package && a.private_namespace == b.private_namespace;
+  }
 };
 
-/**
- * Returns an ExtractedPackage struct if the namespace URI is of the form:
- * http://schemas.android.com/apk/res/<package> or
- * http://schemas.android.com/apk/prv/res/<package>
- *
- * Special case: if namespaceUri is http://schemas.android.com/apk/res-auto,
- * returns an empty package name.
- */
-Maybe<ExtractedPackage> ExtractPackageFromNamespace(
-    const std::string& namespace_uri);
+// Returns an ExtractedPackage struct if the namespace URI is of the form:
+//   http://schemas.android.com/apk/res/<package> or
+//   http://schemas.android.com/apk/prv/res/<package>
+//
+// Special case: if namespaceUri is http://schemas.android.com/apk/res-auto,
+// returns an empty package name.
+Maybe<ExtractedPackage> ExtractPackageFromNamespace(const std::string& namespace_uri);
 
-/**
- * Returns an XML Android namespace for the given package of the form:
- *
- * http://schemas.android.com/apk/res/<package>
- *
- * If privateReference == true, the package will be of the form:
- *
- * http://schemas.android.com/apk/prv/res/<package>
- */
+// Returns an XML Android namespace for the given package of the form:
+//   http://schemas.android.com/apk/res/<package>
+//
+// If privateReference == true, the package will be of the form:
+//   http://schemas.android.com/apk/prv/res/<package>
 std::string BuildPackageNamespace(const android::StringPiece& package,
                                   bool private_reference = false);
 
-/**
- * Interface representing a stack of XML namespace declarations. When looking up
- * the package
- * for a namespace prefix, the stack is checked from top to bottom.
- */
+// Interface representing a stack of XML namespace declarations. When looking up the package
+// for a namespace prefix, the stack is checked from top to bottom.
 struct IPackageDeclStack {
   virtual ~IPackageDeclStack() = default;
 
-  /**
-   * Returns an ExtractedPackage struct if the alias given corresponds with a
-   * package declaration.
-   */
+  // Returns an ExtractedPackage struct if the alias given corresponds with a package declaration.
   virtual Maybe<ExtractedPackage> TransformPackageAlias(
       const android::StringPiece& alias, const android::StringPiece& local_package) const = 0;
 };
 
-/**
- * Helper function for transforming the original Reference inRef to a fully
- * qualified reference
- * via the IPackageDeclStack. This will also mark the Reference as private if
- * the namespace of the package declaration was private.
- */
+// Helper function for transforming the original Reference inRef to a fully qualified reference
+// via the IPackageDeclStack. This will also mark the Reference as private if the namespace of the
+// package declaration was private.
 void TransformReferenceFromNamespace(IPackageDeclStack* decl_stack,
                                      const android::StringPiece& local_package, Reference* in_ref);
 
diff --git a/tools/aapt2/xml/XmlUtil_test.cpp b/tools/aapt2/xml/XmlUtil_test.cpp
index 5eecc8f..cbded8f 100644
--- a/tools/aapt2/xml/XmlUtil_test.cpp
+++ b/tools/aapt2/xml/XmlUtil_test.cpp
@@ -21,37 +21,30 @@
 namespace aapt {
 
 TEST(XmlUtilTest, ExtractPackageFromNamespace) {
-  AAPT_ASSERT_FALSE(xml::ExtractPackageFromNamespace("com.android"));
-  AAPT_ASSERT_FALSE(
-      xml::ExtractPackageFromNamespace("http://schemas.android.com/apk"));
-  AAPT_ASSERT_FALSE(
-      xml::ExtractPackageFromNamespace("http://schemas.android.com/apk/res"));
-  AAPT_ASSERT_FALSE(
-      xml::ExtractPackageFromNamespace("http://schemas.android.com/apk/res/"));
-  AAPT_ASSERT_FALSE(xml::ExtractPackageFromNamespace(
-      "http://schemas.android.com/apk/prv/res/"));
+  ASSERT_FALSE(xml::ExtractPackageFromNamespace("com.android"));
+  ASSERT_FALSE(xml::ExtractPackageFromNamespace("http://schemas.android.com/apk"));
+  ASSERT_FALSE(xml::ExtractPackageFromNamespace("http://schemas.android.com/apk/res"));
+  ASSERT_FALSE(xml::ExtractPackageFromNamespace("http://schemas.android.com/apk/res/"));
+  ASSERT_FALSE(xml::ExtractPackageFromNamespace("http://schemas.android.com/apk/prv/res/"));
 
   Maybe<xml::ExtractedPackage> p =
       xml::ExtractPackageFromNamespace("http://schemas.android.com/apk/res/a");
-  AAPT_ASSERT_TRUE(p);
+  ASSERT_TRUE(p);
   EXPECT_EQ(std::string("a"), p.value().package);
   EXPECT_FALSE(p.value().private_namespace);
 
-  p = xml::ExtractPackageFromNamespace(
-      "http://schemas.android.com/apk/prv/res/android");
-  AAPT_ASSERT_TRUE(p);
+  p = xml::ExtractPackageFromNamespace("http://schemas.android.com/apk/prv/res/android");
+  ASSERT_TRUE(p);
   EXPECT_EQ(std::string("android"), p.value().package);
   EXPECT_TRUE(p.value().private_namespace);
 
-  p = xml::ExtractPackageFromNamespace(
-      "http://schemas.android.com/apk/prv/res/com.test");
-  AAPT_ASSERT_TRUE(p);
+  p = xml::ExtractPackageFromNamespace("http://schemas.android.com/apk/prv/res/com.test");
+  ASSERT_TRUE(p);
   EXPECT_EQ(std::string("com.test"), p.value().package);
   EXPECT_TRUE(p.value().private_namespace);
 
-  p = xml::ExtractPackageFromNamespace(
-      "http://schemas.android.com/apk/res-auto");
-  AAPT_ASSERT_TRUE(p);
+  p = xml::ExtractPackageFromNamespace("http://schemas.android.com/apk/res-auto");
+  ASSERT_TRUE(p);
   EXPECT_EQ(std::string(), p.value().package);
   EXPECT_TRUE(p.value().private_namespace);
 }
diff --git a/tools/bit/adb.cpp b/tools/bit/adb.cpp
index 0c8424d..c8faf5c 100644
--- a/tools/bit/adb.cpp
+++ b/tools/bit/adb.cpp
@@ -283,10 +283,19 @@
     cmd.AddArg("instrument");
     cmd.AddArg("-w");
     cmd.AddArg("-m");
-    if (className.length() > 0) {
-        cmd.AddArg("-e");
-        cmd.AddArg("class");
-        cmd.AddArg(className);
+    const int classLen = className.length();
+    if (classLen > 0) {
+        if (classLen > 1 && className[classLen - 1] == '.') {
+            cmd.AddArg("-e");
+            cmd.AddArg("package");
+
+            // "am" actually accepts without removing the last ".", but for cleanlines...
+            cmd.AddArg(className.substr(0, classLen - 1));
+        } else {
+            cmd.AddArg("-e");
+            cmd.AddArg("class");
+            cmd.AddArg(className);
+        }
     }
     cmd.AddArg(packageName + "/" + runner);
 
diff --git a/tools/bit/main.cpp b/tools/bit/main.cpp
index d056ba5..91ca514 100644
--- a/tools/bit/main.cpp
+++ b/tools/bit/main.cpp
@@ -50,6 +50,7 @@
 
     int testPassCount;
     int testFailCount;
+    int unknownFailureCount; // unknown failure == "Process crashed", etc.
     bool actionsWithNoTests;
 
     Target(bool b, bool i, bool t, const string& p);
@@ -63,6 +64,7 @@
      testActionCount(0),
      testPassCount(0),
      testFailCount(0),
+     unknownFailureCount(0),
      actionsWithNoTests(false)
 {
 }
@@ -188,8 +190,13 @@
      */
     void SetCurrentAction(TestAction* action);
 
+    bool IsSuccess();
+
+    string GetErrorMessage();
+
 private:
     TestAction* m_currentAction;
+    SessionStatus m_sessionStatus;
 };
 
 void
@@ -241,8 +248,10 @@
         }
         line << ": " << m_currentAction->target->name << ':' << className << "\\#" << testName;
         print_one_line("%s", line.str().c_str());
-    } else if (resultCode == -2) {
+    } else if ((resultCode == -1) || (resultCode == -2)) {
         // test failed
+        // Note -2 means an assertion failure, and -1 means other exceptions.  We just treat them
+        // all as "failures".
         m_currentAction->failCount++;
         m_currentAction->target->testFailCount++;
         printf("%s\n%sFailed: %s:%s\\#%s%s\n", g_escapeClearLine, g_escapeRedBold,
@@ -257,9 +266,13 @@
 }
 
 void
-TestResults::OnSessionStatus(SessionStatus& /*status*/)
+TestResults::OnSessionStatus(SessionStatus& status)
 {
     //status.PrintDebugString();
+    m_sessionStatus = status;
+    if (m_currentAction && !IsSuccess()) {
+        m_currentAction->target->unknownFailureCount++;
+    }
 }
 
 void
@@ -268,6 +281,24 @@
     m_currentAction = action;
 }
 
+bool
+TestResults::IsSuccess()
+{
+    return m_sessionStatus.result_code() == -1; // Activity.RESULT_OK.
+}
+
+string
+TestResults::GetErrorMessage()
+{
+    bool found;
+    string shortMsg = get_bundle_string(m_sessionStatus.results(), &found, "shortMsg", NULL);
+    if (!found) {
+        return IsSuccess() ? "" : "Unknown failure";
+    }
+    return shortMsg;
+}
+
+
 /**
  * Prints the usage statement / help text.
  */
@@ -342,6 +373,10 @@
     fprintf(out, "      Builds and installs CtsProtoTestCases.apk, and runs the testWrite\n");
     fprintf(out, "      and testRepeated test methods on that class.\n");
     fprintf(out, "\n");
+    fprintf(out, "    bit CtsProtoTestCases:android.util.proto.cts.\n");
+    fprintf(out, "      Builds and installs CtsProtoTestCases.apk, and runs the tests in the java package\n");
+    fprintf(out, "      \"android.util.proto.cts\".\n");
+    fprintf(out, "\n");
     fprintf(out, "  Launching an Activity\n");
     fprintf(out, "  ---------------------\n");
     fprintf(out, "  To launch an activity, specify the activity class name after\n");
@@ -564,7 +599,7 @@
 /**
  * Run the build, install, and test actions.
  */
-void
+bool
 run_phases(vector<Target*> targets, const Options& options)
 {
     int err = 0;
@@ -731,7 +766,7 @@
             InstallApk& apk = installApks[i];
             if (!apk.file.fileInfo.exists || apk.file.HasChanged()) {
                 // It didn't exist before or it changed, so int needs install
-                err = run_adb("install", "-r", apk.file.filename.c_str(), NULL);
+                err = run_adb("install", "-r", "-g", apk.file.filename.c_str(), NULL);
                 check_error(err);
                 apk.installed = true;
             } else {
@@ -833,6 +868,10 @@
                 printf("%s%d passed%s, %d failed\n", g_escapeGreenBold, action.passCount,
                         g_escapeEndColor, action.failCount);
             }
+            if (!testResults.IsSuccess()) {
+                printf("\n%sTest didn't finish successfully: %s%s\n", g_escapeRedBold,
+                        testResults.GetErrorMessage().c_str(), g_escapeEndColor);
+            }
         }
     }
 
@@ -903,6 +942,7 @@
     }
 
     // Tests
+    bool hasErrors = false;
     if (testActions.size() > 0) {
         printf("%sRan tests:%s\n", g_escapeBold, g_escapeEndColor);
         size_t maxNameLength = 0;
@@ -920,12 +960,18 @@
             Target* target = targets[i];
             if (target->testActionCount > 0) {
                 printf("   %s%s", target->name.c_str(), padding.c_str() + target->name.length());
-                if (target->actionsWithNoTests) {
+                if (target->unknownFailureCount > 0) {
+                    printf("     %sUnknown failure, see above message.%s\n",
+                            g_escapeRedBold, g_escapeEndColor);
+                    hasErrors = true;
+                } else if (target->actionsWithNoTests) {
                     printf("     %s%d passed, %d failed%s\n", g_escapeYellowBold,
                             target->testPassCount, target->testFailCount, g_escapeEndColor);
+                    hasErrors = true;
                 } else if (target->testFailCount > 0) {
                     printf("     %d passed, %s%d failed%s\n", target->testPassCount,
                             g_escapeRedBold, target->testFailCount, g_escapeEndColor);
+                    hasErrors = true;
                 } else {
                     printf("     %s%d passed%s, %d failed\n", g_escapeGreenBold,
                             target->testPassCount, g_escapeEndColor, target->testFailCount);
@@ -940,6 +986,7 @@
     }
 
     printf("%s--------------------------------------------%s\n", g_escapeBold, g_escapeEndColor);
+    return !hasErrors;
 }
 
 /**
@@ -987,7 +1034,7 @@
         exit(0);
     } else {
         // Normal run
-        run_phases(options.targets, options);
+        exit(run_phases(options.targets, options) ? 0 : 1);
     }
 
     return 0;
diff --git a/tools/incident_report/Android.mk b/tools/incident_report/Android.mk
index e57a959..9e56e3d 100644
--- a/tools/incident_report/Android.mk
+++ b/tools/incident_report/Android.mk
@@ -34,9 +34,6 @@
     libplatformprotos \
     libprotobuf-cpp-full
 
-# b/34740546, work around clang-tidy segmentation fault.
-LOCAL_TIDY_CHECKS := -modernize*
-
 LOCAL_C_FLAGS := \
     -Wno-unused-parameter
 include $(BUILD_HOST_EXECUTABLE)
diff --git a/tools/incident_section_gen/Android.mk b/tools/incident_section_gen/Android.mk
index 0549026..acf3f83 100644
--- a/tools/incident_section_gen/Android.mk
+++ b/tools/incident_section_gen/Android.mk
@@ -21,8 +21,6 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := incident-section-gen
-# b/34740546, work around clang-tidy segmentation fault.
-LOCAL_TIDY_CHECKS := -modernize*
 LOCAL_CFLAGS += -g -O0
 LOCAL_C_INCLUDES := \
     external/protobuf/src
diff --git a/tools/locked_region_code_injection/Android.mk b/tools/locked_region_code_injection/Android.mk
new file mode 100644
index 0000000..0aed0ce
--- /dev/null
+++ b/tools/locked_region_code_injection/Android.mk
@@ -0,0 +1,15 @@
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_JAR_MANIFEST := manifest.txt
+LOCAL_MODULE := lockedregioncodeinjection
+LOCAL_SRC_FILES := $(call all-java-files-under,src)
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    asm-5.2 \
+    asm-commons-5.2 \
+    asm-tree-5.2 \
+    asm-analysis-5.2
+
+
+include $(BUILD_HOST_JAVA_LIBRARY)
diff --git a/tools/locked_region_code_injection/manifest.txt b/tools/locked_region_code_injection/manifest.txt
new file mode 100644
index 0000000..4b9de00
--- /dev/null
+++ b/tools/locked_region_code_injection/manifest.txt
@@ -0,0 +1 @@
+Main-Class: lockedregioncodeinjection.Main
diff --git a/tools/locked_region_code_injection/src/lockedregioncodeinjection/LockFindingClassVisitor.java b/tools/locked_region_code_injection/src/lockedregioncodeinjection/LockFindingClassVisitor.java
new file mode 100644
index 0000000..9374f23
--- /dev/null
+++ b/tools/locked_region_code_injection/src/lockedregioncodeinjection/LockFindingClassVisitor.java
@@ -0,0 +1,241 @@
+/*
+ * 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 lockedregioncodeinjection;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.commons.TryCatchBlockSorter;
+import org.objectweb.asm.tree.AbstractInsnNode;
+import org.objectweb.asm.tree.InsnList;
+import org.objectweb.asm.tree.LabelNode;
+import org.objectweb.asm.tree.MethodInsnNode;
+import org.objectweb.asm.tree.MethodNode;
+import org.objectweb.asm.tree.TryCatchBlockNode;
+import org.objectweb.asm.tree.analysis.Analyzer;
+import org.objectweb.asm.tree.analysis.AnalyzerException;
+import org.objectweb.asm.tree.analysis.BasicValue;
+import org.objectweb.asm.tree.analysis.Frame;
+
+/**
+ * This visitor does two things:
+ *
+ * 1. Finds all the MONITOR_ENTER / MONITOR_EXIT in the byte code and insert the corresponding pre
+ * and post methods calls should it matches one of the given target type in the Configuration.
+ *
+ * 2. Find all methods that are synchronized and insert pre method calls in the beginning and post
+ * method calls just before all return instructions.
+ */
+class LockFindingClassVisitor extends ClassVisitor {
+    private String className = null;
+    private final List<LockTarget> targets;
+
+    public LockFindingClassVisitor(List<LockTarget> targets, ClassVisitor chain) {
+        super(Utils.ASM_VERSION, chain);
+        this.targets = targets;
+    }
+
+    @Override
+    public MethodVisitor visitMethod(int access, String name, String desc, String signature,
+            String[] exceptions) {
+        assert this.className != null;
+        MethodNode mn = new TryCatchBlockSorter(null, access, name, desc, signature, exceptions);
+        MethodVisitor chain = super.visitMethod(access, name, desc, signature, exceptions);
+        return new LockFindingMethodVisitor(this.className, mn, chain);
+    }
+
+    @Override
+    public void visit(int version, int access, String name, String signature, String superName,
+            String[] interfaces) {
+        this.className = name;
+        super.visit(version, access, name, signature, superName, interfaces);
+    }
+
+    class LockFindingMethodVisitor extends MethodVisitor {
+        private String owner;
+        private MethodVisitor chain;
+
+        public LockFindingMethodVisitor(String owner, MethodNode mn, MethodVisitor chain) {
+            super(Opcodes.ASM5, mn);
+            assert owner != null;
+            this.owner = owner;
+            this.chain = chain;
+        }
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public void visitEnd() {
+            MethodNode mn = (MethodNode) mv;
+
+            Analyzer a = new Analyzer(new LockTargetStateAnalysis(targets));
+
+            LockTarget ownerMonitor = null;
+            if ((mn.access & Opcodes.ACC_SYNCHRONIZED) != 0) {
+                for (LockTarget t : targets) {
+                    if (t.getTargetDesc().equals("L" + owner + ";")) {
+                        ownerMonitor = t;
+                    }
+                }
+            }
+
+            try {
+                a.analyze(owner, mn);
+            } catch (AnalyzerException e) {
+                e.printStackTrace();
+            }
+            InsnList instructions = mn.instructions;
+
+            Frame[] frames = a.getFrames();
+            List<Frame> frameMap = new LinkedList<>();
+            frameMap.addAll(Arrays.asList(frames));
+
+            List<List<TryCatchBlockNode>> handlersMap = new LinkedList<>();
+
+            for (int i = 0; i < instructions.size(); i++) {
+                handlersMap.add(a.getHandlers(i));
+            }
+
+            if (ownerMonitor != null) {
+                AbstractInsnNode s = instructions.getFirst();
+                MethodInsnNode call = new MethodInsnNode(Opcodes.INVOKESTATIC,
+                        ownerMonitor.getPreOwner(), ownerMonitor.getPreMethod(), "()V", false);
+                insertMethodCallBefore(mn, frameMap, handlersMap, s, 0, call);
+            }
+
+            for (int i = 0; i < instructions.size(); i++) {
+                AbstractInsnNode s = instructions.get(i);
+
+                if (s.getOpcode() == Opcodes.MONITORENTER) {
+                    Frame f = frameMap.get(i);
+                    BasicValue operand = (BasicValue) f.getStack(f.getStackSize() - 1);
+                    if (operand instanceof LockTargetState) {
+                        LockTargetState state = (LockTargetState) operand;
+                        for (int j = 0; j < state.getTargets().size(); j++) {
+                            LockTarget target = state.getTargets().get(j);
+                            MethodInsnNode call = new MethodInsnNode(Opcodes.INVOKESTATIC,
+                                    target.getPreOwner(), target.getPreMethod(), "()V", false);
+                            insertMethodCallAfter(mn, frameMap, handlersMap, s, i, call);
+                        }
+                    }
+                }
+
+                if (s.getOpcode() == Opcodes.MONITOREXIT) {
+                    Frame f = frameMap.get(i);
+                    BasicValue operand = (BasicValue) f.getStack(f.getStackSize() - 1);
+                    if (operand instanceof LockTargetState) {
+                        LockTargetState state = (LockTargetState) operand;
+                        for (int j = 0; j < state.getTargets().size(); j++) {
+                            LockTarget target = state.getTargets().get(j);
+                            MethodInsnNode call = new MethodInsnNode(Opcodes.INVOKESTATIC,
+                                    target.getPostOwner(), target.getPostMethod(), "()V", false);
+                            insertMethodCallAfter(mn, frameMap, handlersMap, s, i, call);
+                        }
+                    }
+                }
+
+                if (ownerMonitor != null && (s.getOpcode() == Opcodes.RETURN
+                        || s.getOpcode() == Opcodes.ARETURN || s.getOpcode() == Opcodes.DRETURN
+                        || s.getOpcode() == Opcodes.FRETURN || s.getOpcode() == Opcodes.IRETURN)) {
+                    MethodInsnNode call =
+                            new MethodInsnNode(Opcodes.INVOKESTATIC, ownerMonitor.getPostOwner(),
+                                    ownerMonitor.getPostMethod(), "()V", false);
+                    insertMethodCallBefore(mn, frameMap, handlersMap, s, i, call);
+                    i++; // Skip ahead. Otherwise, we will revisit this instruction again.
+                }
+            }
+            super.visitEnd();
+            mn.accept(chain);
+        }
+    }
+
+    public static void insertMethodCallBefore(MethodNode mn, List<Frame> frameMap,
+            List<List<TryCatchBlockNode>> handlersMap, AbstractInsnNode node, int index,
+            MethodInsnNode call) {
+        List<TryCatchBlockNode> handlers = handlersMap.get(index);
+        InsnList instructions = mn.instructions;
+        LabelNode end = new LabelNode();
+        instructions.insert(node, end);
+        frameMap.add(index, null);
+        handlersMap.add(index, null);
+        instructions.insertBefore(node, call);
+        frameMap.add(index, null);
+        handlersMap.add(index, null);
+
+        LabelNode start = new LabelNode();
+        instructions.insert(node, start);
+        frameMap.add(index, null);
+        handlersMap.add(index, null);
+        updateCatchHandler(mn, handlers, start, end, handlersMap);
+    }
+
+    public static void insertMethodCallAfter(MethodNode mn, List<Frame> frameMap,
+            List<List<TryCatchBlockNode>> handlersMap, AbstractInsnNode node, int index,
+            MethodInsnNode call) {
+        List<TryCatchBlockNode> handlers = handlersMap.get(index + 1);
+        InsnList instructions = mn.instructions;
+
+        LabelNode end = new LabelNode();
+        instructions.insert(node, end);
+        frameMap.add(index + 1, null);
+        handlersMap.add(index + 1, null);
+
+        instructions.insert(node, call);
+        frameMap.add(index + 1, null);
+        handlersMap.add(index + 1, null);
+
+        LabelNode start = new LabelNode();
+        instructions.insert(node, start);
+        frameMap.add(index + 1, null);
+        handlersMap.add(index + 1, null);
+
+        updateCatchHandler(mn, handlers, start, end, handlersMap);
+    }
+
+    @SuppressWarnings("unchecked")
+    public static void updateCatchHandler(MethodNode mn, List<TryCatchBlockNode> handlers,
+            LabelNode start, LabelNode end, List<List<TryCatchBlockNode>> handlersMap) {
+        if (handlers == null || handlers.size() == 0) {
+            return;
+        }
+
+        InsnList instructions = mn.instructions;
+        List<TryCatchBlockNode> newNodes = new ArrayList<>(handlers.size());
+        for (TryCatchBlockNode handler : handlers) {
+            if (!(instructions.indexOf(handler.start) <= instructions.indexOf(start)
+                    && instructions.indexOf(end) <= instructions.indexOf(handler.end))) {
+                TryCatchBlockNode newNode =
+                        new TryCatchBlockNode(start, end, handler.handler, handler.type);
+                newNodes.add(newNode);
+                for (int i = instructions.indexOf(start); i <= instructions.indexOf(end); i++) {
+                    if (handlersMap.get(i) == null) {
+                        handlersMap.set(i, new ArrayList<>());
+                    }
+                    handlersMap.get(i).add(newNode);
+                }
+            } else {
+                for (int i = instructions.indexOf(start); i <= instructions.indexOf(end); i++) {
+                    if (handlersMap.get(i) == null) {
+                        handlersMap.set(i, new ArrayList<>());
+                    }
+                    handlersMap.get(i).add(handler);
+                }
+            }
+        }
+        mn.tryCatchBlocks.addAll(0, newNodes);
+    }
+}
diff --git a/tools/locked_region_code_injection/src/lockedregioncodeinjection/LockTarget.java b/tools/locked_region_code_injection/src/lockedregioncodeinjection/LockTarget.java
new file mode 100644
index 0000000..c5e59e3
--- /dev/null
+++ b/tools/locked_region_code_injection/src/lockedregioncodeinjection/LockTarget.java
@@ -0,0 +1,61 @@
+/*
+ * 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 lockedregioncodeinjection;
+
+/**
+ * Represent a specific class that is used for synchronization. A pre and post method can be
+ * specified to by the user to be called right after monitor_enter and after monitor_exit
+ * respectively.
+ */
+public class LockTarget {
+    public static final LockTarget NO_TARGET = new LockTarget("", null, null);
+
+    private final String targetDesc;
+    private final String pre;
+    private final String post;
+
+    public LockTarget(String targetDesc, String pre, String post) {
+        this.targetDesc = targetDesc;
+        this.pre = pre;
+        this.post = post;
+    }
+
+    public String getTargetDesc() {
+        return targetDesc;
+    }
+
+    public String getPre() {
+        return pre;
+    }
+
+    public String getPreOwner() {
+        return pre.substring(0, pre.lastIndexOf('.'));
+    }
+
+    public String getPreMethod() {
+        return pre.substring(pre.lastIndexOf('.') + 1);
+    }
+
+    public String getPost() {
+        return post;
+    }
+
+    public String getPostOwner() {
+        return post.substring(0, post.lastIndexOf('.'));
+    }
+
+    public String getPostMethod() {
+        return post.substring(post.lastIndexOf('.') + 1);
+    }
+}
diff --git a/tools/locked_region_code_injection/src/lockedregioncodeinjection/LockTargetState.java b/tools/locked_region_code_injection/src/lockedregioncodeinjection/LockTargetState.java
new file mode 100644
index 0000000..99d8418
--- /dev/null
+++ b/tools/locked_region_code_injection/src/lockedregioncodeinjection/LockTargetState.java
@@ -0,0 +1,34 @@
+/*
+ * 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 lockedregioncodeinjection;
+
+import java.util.List;
+import org.objectweb.asm.Type;
+import org.objectweb.asm.tree.analysis.BasicValue;
+
+public class LockTargetState extends BasicValue {
+    private final List<LockTarget> lockTargets;
+
+    /**
+     * @param type
+     */
+    public LockTargetState(Type type, List<LockTarget> lockTargets) {
+        super(type);
+        this.lockTargets = lockTargets;
+    }
+
+    public List<LockTarget> getTargets() {
+        return lockTargets;
+    }
+}
diff --git a/tools/locked_region_code_injection/src/lockedregioncodeinjection/LockTargetStateAnalysis.java b/tools/locked_region_code_injection/src/lockedregioncodeinjection/LockTargetStateAnalysis.java
new file mode 100644
index 0000000..1002c88
--- /dev/null
+++ b/tools/locked_region_code_injection/src/lockedregioncodeinjection/LockTargetStateAnalysis.java
@@ -0,0 +1,109 @@
+/*
+ * 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 lockedregioncodeinjection;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.objectweb.asm.Type;
+import org.objectweb.asm.tree.AbstractInsnNode;
+import org.objectweb.asm.tree.MethodInsnNode;
+import org.objectweb.asm.tree.analysis.AnalyzerException;
+import org.objectweb.asm.tree.analysis.BasicInterpreter;
+import org.objectweb.asm.tree.analysis.BasicValue;
+
+/**
+ * A simple dataflow analysis to determine if the operands on the stack must be one of target lock
+ * class type.
+ */
+public class LockTargetStateAnalysis extends BasicInterpreter {
+
+    private final List<LockTarget> targetLocks;
+
+    public LockTargetStateAnalysis(List<LockTarget> targetLocks) {
+        this.targetLocks = targetLocks;
+    }
+
+    @Override
+    public BasicValue naryOperation(AbstractInsnNode inst, @SuppressWarnings("rawtypes") List args)
+            throws AnalyzerException {
+        // We target the return type of any invocation.
+
+        @SuppressWarnings("unchecked")
+        BasicValue base = super.naryOperation(inst, args);
+        if (!(inst instanceof MethodInsnNode)) {
+            return base;
+        }
+
+        MethodInsnNode invoke = (MethodInsnNode) inst;
+        Type returnType = Type.getReturnType(invoke.desc);
+        if (returnType.equals(Type.VOID_TYPE)) {
+            return base;
+        }
+
+        List<LockTarget> types = new ArrayList<>();
+
+        for (LockTarget target : targetLocks) {
+            if (returnType.getDescriptor().equals(target.getTargetDesc())) {
+                types.add(target);
+            }
+        }
+
+        return new LockTargetState(base.getType(), types);
+    }
+
+    @Override
+    public BasicValue newValue(Type type) {
+        BasicValue base = super.newValue(type);
+        List<LockTarget> types = new ArrayList<>();
+
+        if (type == null) {
+            return base;
+        }
+        for (LockTarget target : targetLocks) {
+            if (type.getDescriptor().equals(target.getTargetDesc())) {
+                types.add(target);
+            }
+        }
+
+        if (types.isEmpty()) {
+            return base;
+        }
+
+        return new LockTargetState(base.getType(), types);
+    }
+
+    @Override
+    public BasicValue merge(BasicValue v1, BasicValue v2) {
+        BasicValue base = super.merge(v1, v2);
+
+        if (!(v1 instanceof LockTargetState)) {
+            return base;
+        }
+        if (!(v2 instanceof LockTargetState)) {
+            return base;
+        }
+
+        LockTargetState state1 = (LockTargetState) v1;
+        LockTargetState state2 = (LockTargetState) v2;
+
+        List<LockTarget> newList = new ArrayList<>(state1.getTargets());
+        for (LockTarget otherTarget : state2.getTargets()) {
+            if (!newList.contains(otherTarget)) {
+                newList.add(otherTarget);
+            }
+        }
+
+        return new LockTargetState(base.getType(), newList);
+    }
+}
diff --git a/tools/locked_region_code_injection/src/lockedregioncodeinjection/Main.java b/tools/locked_region_code_injection/src/lockedregioncodeinjection/Main.java
new file mode 100644
index 0000000..edb9a49
--- /dev/null
+++ b/tools/locked_region_code_injection/src/lockedregioncodeinjection/Main.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package lockedregioncodeinjection;
+
+import java.io.BufferedInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipOutputStream;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassWriter;
+
+public class Main {
+    public static void main(String[] args) throws IOException {
+        String inJar = null;
+        String outJar = null;
+
+        String legacyTargets = null;
+        String legacyPreMethods = null;
+        String legacyPostMethods = null;
+        for (int i = 0; i < args.length; i++) {
+            if ("-i".equals(args[i].trim())) {
+                i++;
+                inJar = args[i].trim();
+            } else if ("-o".equals(args[i].trim())) {
+                i++;
+                outJar = args[i].trim();
+            } else if ("--targets".equals(args[i].trim())) {
+                i++;
+                legacyTargets = args[i].trim();
+            } else if ("--pre".equals(args[i].trim())) {
+                i++;
+                legacyPreMethods = args[i].trim();
+            } else if ("--post".equals(args[i].trim())) {
+                i++;
+                legacyPostMethods = args[i].trim();
+            }
+
+        }
+
+        // TODO(acleung): Better help message than asserts.
+        assert inJar != null;
+        assert outJar != null;
+        assert legacyTargets == null || (legacyPreMethods != null && legacyPostMethods != null);
+
+        ZipFile zipSrc = new ZipFile(inJar);
+        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(outJar));
+        List<LockTarget> targets = null;
+        if (legacyTargets != null) {
+            targets = Utils.getTargetsFromLegacyJackConfig(legacyTargets, legacyPreMethods,
+                    legacyPostMethods);
+        } else {
+            targets = Collections.emptyList();
+        }
+
+        Enumeration<? extends ZipEntry> srcEntries = zipSrc.entries();
+        while (srcEntries.hasMoreElements()) {
+            ZipEntry entry = srcEntries.nextElement();
+            ZipEntry newEntry = new ZipEntry(entry.getName());
+            zos.putNextEntry(newEntry);
+            BufferedInputStream bis = new BufferedInputStream(zipSrc.getInputStream(entry));
+
+            if (entry.getName().endsWith(".class")) {
+                convert(bis, zos, targets);
+            } else {
+                while (bis.available() > 0) {
+                    zos.write(bis.read());
+                }
+                zos.closeEntry();
+                bis.close();
+            }
+        }
+        zos.finish();
+        zos.close();
+        zipSrc.close();
+    }
+
+    private static void convert(InputStream in, OutputStream out, List<LockTarget> targets)
+            throws IOException {
+        ClassReader cr = new ClassReader(in);
+        ClassWriter cw = new ClassWriter(0);
+        LockFindingClassVisitor cv = new LockFindingClassVisitor(targets, cw);
+        cr.accept(cv, 0);
+        byte[] data = cw.toByteArray();
+        out.write(data);
+    }
+}
diff --git a/tools/locked_region_code_injection/src/lockedregioncodeinjection/Utils.java b/tools/locked_region_code_injection/src/lockedregioncodeinjection/Utils.java
new file mode 100644
index 0000000..d2a2e7b
--- /dev/null
+++ b/tools/locked_region_code_injection/src/lockedregioncodeinjection/Utils.java
@@ -0,0 +1,46 @@
+/*
+ * 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 lockedregioncodeinjection;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.objectweb.asm.Opcodes;
+
+public class Utils {
+
+    public static final int ASM_VERSION = Opcodes.ASM5;
+
+    /**
+     * Reads a comma separated configuration similar to the Jack definition.
+     */
+    public static List<LockTarget> getTargetsFromLegacyJackConfig(String classList,
+            String requestList, String resetList) {
+
+        String[] classes = classList.split(",");
+        String[] requests = requestList.split(",");
+        String[] resets = resetList.split(",");
+
+        int total = classes.length;
+        assert requests.length == total;
+        assert resets.length == total;
+
+        List<LockTarget> config = new ArrayList<LockTarget>();
+
+        for (int i = 0; i < total; i++) {
+            config.add(new LockTarget(classes[i], requests[i], resets[i]));
+        }
+
+        return config;
+    }
+}
diff --git a/tools/locked_region_code_injection/test/lockedregioncodeinjection/TestMain.java b/tools/locked_region_code_injection/test/lockedregioncodeinjection/TestMain.java
new file mode 100644
index 0000000..1d4f2d4
--- /dev/null
+++ b/tools/locked_region_code_injection/test/lockedregioncodeinjection/TestMain.java
@@ -0,0 +1,231 @@
+/*
+ * 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 lockedregioncodeinjection;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * To run the unit tests:
+ *
+ * <pre>
+ * <code>
+ * set -x
+ *
+ * # Clean
+ * rm -fr out/*
+ *
+ * # Make booster
+ * javac -cp lib/asm-all-5.2.jar src&#47;*&#47;*.java -d out/
+ * pushd out
+ * jar cfe lockedregioncodeinjection.jar lockedregioncodeinjection.Main *&#47;*.class
+ * popd
+ *
+ * # Make unit tests.
+ * javac -cp lib/junit-4.12.jar test&#47;*&#47;*.java -d out/
+ *
+ * pushd out
+ * jar cfe test_input.jar lockedregioncodeinjection.Test *&#47;*.class
+ * popd
+ *
+ * # Run tool on unit tests.
+ * java -ea -cp lib/asm-all-5.2.jar:out/lockedregioncodeinjection.jar \
+ *     lockedregioncodeinjection.Main \
+ *     -i out/test_input.jar -o out/test_output.jar \
+ *     --targets 'Llockedregioncodeinjection/TestTarget;' \
+ *     --pre     'lockedregioncodeinjection/TestTarget.boost' \
+ *     --post    'lockedregioncodeinjection/TestTarget.unboost'
+ *
+ * # Run unit tests.
+ * java -ea -cp lib/hamcrest-core-1.3.jar:lib/junit-4.12.jar:out/test_output.jar \
+ *     org.junit.runner.JUnitCore lockedregioncodeinjection.TestMain
+ * </code>
+ * </pre>
+ */
+public class TestMain {
+    @Test
+    public void testSimpleSynchronizedBlock() {
+        TestTarget.resetCount();
+        TestTarget t = new TestTarget();
+
+        Assert.assertEquals(TestTarget.boostCount, 0);
+        Assert.assertEquals(TestTarget.unboostCount, 0);
+        Assert.assertEquals(TestTarget.unboostCount, 0);
+
+        synchronized (t) {
+            Assert.assertEquals(TestTarget.boostCount, 1);
+            Assert.assertEquals(TestTarget.unboostCount, 0);
+            TestTarget.invoke();
+        }
+
+        Assert.assertEquals(TestTarget.boostCount, 1);
+        Assert.assertEquals(TestTarget.unboostCount, 1);
+        Assert.assertEquals(TestTarget.invokeCount, 1);
+    }
+
+    @Test
+    public void testSimpleSynchronizedMethod() {
+        TestTarget.resetCount();
+        TestTarget t = new TestTarget();
+
+        Assert.assertEquals(TestTarget.boostCount, 0);
+        Assert.assertEquals(TestTarget.unboostCount, 0);
+
+        t.synchronizedCall();
+
+        Assert.assertEquals(TestTarget.boostCount, 1);
+        Assert.assertEquals(TestTarget.unboostCount, 1);
+        Assert.assertEquals(TestTarget.invokeCount, 1);
+    }
+
+    @Test
+    public void testSimpleSynchronizedMethod2() {
+        TestTarget.resetCount();
+        TestTarget t = new TestTarget();
+
+        Assert.assertEquals(TestTarget.boostCount, 0);
+        Assert.assertEquals(TestTarget.unboostCount, 0);
+
+        t.synchronizedCallReturnInt();
+
+        Assert.assertEquals(TestTarget.boostCount, 1);
+        Assert.assertEquals(TestTarget.unboostCount, 1);
+        Assert.assertEquals(TestTarget.invokeCount, 1);
+    }
+
+    @Test
+    public void testSimpleSynchronizedMethod3() {
+        TestTarget.resetCount();
+        TestTarget t = new TestTarget();
+
+        Assert.assertEquals(TestTarget.boostCount, 0);
+        Assert.assertEquals(TestTarget.unboostCount, 0);
+
+        t.synchronizedCallReturnObject();
+
+        Assert.assertEquals(TestTarget.boostCount, 1);
+        Assert.assertEquals(TestTarget.unboostCount, 1);
+        Assert.assertEquals(TestTarget.invokeCount, 1);
+    }
+
+    @SuppressWarnings("unused")
+    @Test
+    public void testCaughtException() {
+        TestTarget.resetCount();
+        TestTarget t = new TestTarget();
+        boolean caughtException = false;
+
+        Assert.assertEquals(TestTarget.boostCount, 0);
+        Assert.assertEquals(TestTarget.unboostCount, 0);
+        Assert.assertEquals(TestTarget.unboostCount, 0);
+
+        try {
+            synchronized (t) {
+                Assert.assertEquals(TestTarget.boostCount, 1);
+                Assert.assertEquals(TestTarget.unboostCount, 0);
+                if (true) {
+                    throw new RuntimeException();
+                }
+                TestTarget.invoke();
+            }
+        } catch (Throwable e) {
+            caughtException = true;
+        }
+
+        Assert.assertEquals(TestTarget.boostCount, 1);
+        Assert.assertEquals(TestTarget.unboostCount, 1);
+        Assert.assertEquals(TestTarget.invokeCount, 0); // Not called
+        Assert.assertTrue(caughtException);
+    }
+
+    @SuppressWarnings("unused")
+    private void testUncaughtException() {
+        TestTarget t = new TestTarget();
+        synchronized (t) {
+            if (true) {
+                throw new RuntimeException();
+            }
+            TestTarget.invoke();
+        }
+    }
+
+    @SuppressWarnings("unused")
+    @Test
+    public void testHandledFinally() {
+        TestTarget.resetCount();
+        try {
+            testUncaughtException();
+        } catch (Throwable t) {
+
+        }
+        Assert.assertEquals(TestTarget.boostCount, 1);
+        Assert.assertEquals(TestTarget.unboostCount, 1);
+        Assert.assertEquals(TestTarget.invokeCount, 0); // Not called
+    }
+
+    @Test
+    public void testNestedSynchronizedBlock() {
+        TestTarget.resetCount();
+        TestTarget t = new TestTarget();
+
+        Assert.assertEquals(TestTarget.boostCount, 0);
+        Assert.assertEquals(TestTarget.unboostCount, 0);
+        Assert.assertEquals(TestTarget.unboostCount, 0);
+
+        synchronized (t) {
+            synchronized (t) {
+                synchronized (t) {
+                    synchronized (t) {
+                        synchronized (t) {
+                            synchronized (t) {
+                                Assert.assertEquals(TestTarget.boostCount, 6);
+                                Assert.assertEquals(TestTarget.unboostCount, 0);
+                                TestTarget.invoke();
+                            }
+                            Assert.assertEquals(TestTarget.unboostCount, 1);
+                        }
+                        Assert.assertEquals(TestTarget.unboostCount, 2);
+                    }
+                    Assert.assertEquals(TestTarget.unboostCount, 3);
+                }
+                Assert.assertEquals(TestTarget.unboostCount, 4);
+            }
+            Assert.assertEquals(TestTarget.unboostCount, 5);
+        }
+
+        Assert.assertEquals(TestTarget.boostCount, 6);
+        Assert.assertEquals(TestTarget.unboostCount, 6);
+        Assert.assertEquals(TestTarget.invokeCount, 1);
+    }
+
+    @Test
+    public void testMethodWithControlFlow() {
+        TestTarget.resetCount();
+        TestTarget t = new TestTarget();
+
+        Assert.assertEquals(TestTarget.boostCount, 0);
+        Assert.assertEquals(TestTarget.unboostCount, 0);
+
+        if ((t.hashCode() + " ").contains("1")) {
+            t.synchronizedCall();
+        } else {
+            t.synchronizedCall();
+        }
+
+        // Should only be boosted once.
+        Assert.assertEquals(TestTarget.boostCount, 1);
+        Assert.assertEquals(TestTarget.unboostCount, 1);
+        Assert.assertEquals(TestTarget.invokeCount, 1);
+    }
+}
diff --git a/tools/locked_region_code_injection/test/lockedregioncodeinjection/TestTarget.java b/tools/locked_region_code_injection/test/lockedregioncodeinjection/TestTarget.java
new file mode 100644
index 0000000..8e7d478
--- /dev/null
+++ b/tools/locked_region_code_injection/test/lockedregioncodeinjection/TestTarget.java
@@ -0,0 +1,52 @@
+/*
+ * 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 lockedregioncodeinjection;
+
+public class TestTarget {
+  public static int boostCount = 0;
+  public static int unboostCount = 0;
+  public static int invokeCount = 0;
+
+  public static void boost() {
+    boostCount++;
+  }
+
+  public static void unboost() {
+    unboostCount++;
+  }
+
+  public static void invoke() {
+    invokeCount++;
+  }
+
+  public static void resetCount() {
+    boostCount = 0;
+    unboostCount = 0;
+    invokeCount = 0;
+  }
+
+  public synchronized void synchronizedCall() {
+    invoke();
+  }
+
+  public synchronized int synchronizedCallReturnInt() {
+    invoke();
+    return 0;
+  }
+
+  public synchronized Object synchronizedCallReturnObject() {
+    invoke();
+    return this;
+  }
+}
diff --git a/wifi/java/android/net/wifi/BatchedScanResult.java b/wifi/java/android/net/wifi/BatchedScanResult.java
index 5bafdd8..6d9f00f 100644
--- a/wifi/java/android/net/wifi/BatchedScanResult.java
+++ b/wifi/java/android/net/wifi/BatchedScanResult.java
@@ -26,6 +26,7 @@
  * Describes the Results of a batched set of wifi scans where the firmware performs many
  * scans and stores the timestamped results without waking the main processor each time.
  * @hide
+ * @removed
  */
 @Deprecated
 public class BatchedScanResult implements Parcelable {
diff --git a/wifi/java/android/net/wifi/IRttManager.aidl b/wifi/java/android/net/wifi/IRttManager.aidl
index 90f66c4..3831809 100644
--- a/wifi/java/android/net/wifi/IRttManager.aidl
+++ b/wifi/java/android/net/wifi/IRttManager.aidl
@@ -23,6 +23,6 @@
  */
 interface IRttManager
 {
-    Messenger getMessenger();
+    Messenger getMessenger(in IBinder binder, out int[] key);
     RttManager.RttCapabilities getRttCapabilities();
 }
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl
index 7972d06..a3a1054 100644
--- a/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -94,7 +94,7 @@
 
     void reassociate();
 
-    WifiInfo getConnectionInfo();
+    WifiInfo getConnectionInfo(String callingPackage);
 
     boolean setWifiEnabled(String packageName, boolean enable);
 
diff --git a/wifi/java/android/net/wifi/RttManager.java b/wifi/java/android/net/wifi/RttManager.java
index de9e3cd..12a8ddf 100644
--- a/wifi/java/android/net/wifi/RttManager.java
+++ b/wifi/java/android/net/wifi/RttManager.java
@@ -1,11 +1,13 @@
 package android.net.wifi;
 
+import android.Manifest;
 import android.annotation.NonNull;
 import android.annotation.RequiresPermission;
 import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.annotation.SystemService;
 import android.content.Context;
+import android.os.Binder;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
@@ -312,6 +314,7 @@
              };
     }
 
+    @RequiresPermission(Manifest.permission.LOCATION_HARDWARE)
     public RttCapabilities getRttCapabilities() {
         synchronized (mCapabilitiesLock) {
             if (mRttCapabilities == null) {
@@ -924,6 +927,51 @@
         public void onAborted();
     }
 
+    /**
+     * A parcelable that contains rtt client information.
+     *
+     * @hide
+     */
+    public static class RttClient implements Parcelable {
+        // Package name of RttClient.
+        private final String mPackageName;
+
+        public RttClient(String packageName) {
+            mPackageName = packageName;
+        }
+
+        protected RttClient(Parcel in) {
+            mPackageName = in.readString();
+        }
+
+        public static final Creator<RttManager.RttClient> CREATOR =
+                new Creator<RttManager.RttClient>() {
+            @Override
+            public RttManager.RttClient createFromParcel(Parcel in) {
+                return new RttManager.RttClient(in);
+            }
+
+            @Override
+            public RttManager.RttClient[] newArray(int size) {
+                return new RttManager.RttClient[size];
+            }
+        };
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel parcel, int i) {
+            parcel.writeString(mPackageName);
+        }
+
+        public String getPackageName() {
+            return mPackageName;
+        }
+    }
+
     private boolean rttParamSanity(RttParams params, int index) {
         if (mRttCapabilities == null) {
             if(getRttCapabilities() == null) {
@@ -1187,6 +1235,8 @@
             CMD_OP_ENALBE_RESPONDER_SUCCEEDED           = BASE + 7;
     public static final int
             CMD_OP_ENALBE_RESPONDER_FAILED              = BASE + 8;
+    /** @hide */
+    public static final int CMD_OP_REG_BINDER           = BASE + 9;
 
     private static final int INVALID_KEY = 0;
 
@@ -1215,9 +1265,10 @@
         mContext = context;
         mService = service;
         Messenger messenger = null;
+        int[] key = new int[1];
         try {
             Log.d(TAG, "Get the messenger from " + mService);
-            messenger = mService.getMessenger();
+            messenger = mService.getMessenger(new Binder(), key);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -1232,7 +1283,9 @@
         mAsyncChannel.connectSync(mContext, handler, messenger);
         // We cannot use fullyConnectSync because it sends the FULL_CONNECTION message
         // synchronously, which causes RttService to receive the wrong replyTo value.
-        mAsyncChannel.sendMessage(AsyncChannel.CMD_CHANNEL_FULL_CONNECTION);
+        mAsyncChannel.sendMessage(AsyncChannel.CMD_CHANNEL_FULL_CONNECTION,
+                new RttClient(context.getPackageName()));
+        mAsyncChannel.sendMessage(CMD_OP_REG_BINDER, key[0]);
     }
 
     private void validateChannel() {
diff --git a/wifi/java/android/net/wifi/ScanResult.java b/wifi/java/android/net/wifi/ScanResult.java
index afee290..b6ad926 100644
--- a/wifi/java/android/net/wifi/ScanResult.java
+++ b/wifi/java/android/net/wifi/ScanResult.java
@@ -262,6 +262,7 @@
     /**
      * Status indicating the scan result does not correspond to a user's saved configuration
      * @hide
+     * @removed
      */
     @SystemApi
     public boolean untrusted;
@@ -431,6 +432,28 @@
      */
     public AnqpInformationElement[] anqpElements;
 
+    /**
+     * Flag indicating if this AP is a carrier AP. The determination is based
+     * on the AP's SSID and if AP is using EAP security.
+     *
+     * @hide
+     */
+    public boolean isCarrierAp;
+
+    /**
+     * The EAP type {@link WifiEnterpriseConfig.Eap} associated with this AP if it is a carrier AP.
+     *
+     * @hide
+     */
+    public int carrierApEapType;
+
+    /**
+     * The name of the carrier that's associated with this AP if it is a carrier AP.
+     *
+     * @hide
+     */
+    public String carrierName;
+
     /** {@hide} */
     public ScanResult(WifiSsid wifiSsid, String BSSID, long hessid, int anqpDomainId,
             byte[] osuProviders, String caps, int level, int frequency, long tsf) {
@@ -455,6 +478,9 @@
         this.centerFreq0 = UNSPECIFIED;
         this.centerFreq1 = UNSPECIFIED;
         this.flags = 0;
+        this.isCarrierAp = false;
+        this.carrierApEapType = UNSPECIFIED;
+        this.carrierName = null;
     }
 
     /** {@hide} */
@@ -473,6 +499,9 @@
         this.centerFreq0 = UNSPECIFIED;
         this.centerFreq1 = UNSPECIFIED;
         this.flags = 0;
+        this.isCarrierAp = false;
+        this.carrierApEapType = UNSPECIFIED;
+        this.carrierName = null;
     }
 
     /** {@hide} */
@@ -498,6 +527,9 @@
         } else {
             this.flags = 0;
         }
+        this.isCarrierAp = false;
+        this.carrierApEapType = UNSPECIFIED;
+        this.carrierName = null;
     }
 
     /** {@hide} */
@@ -537,6 +569,9 @@
             venueName = source.venueName;
             operatorFriendlyName = source.operatorFriendlyName;
             flags = source.flags;
+            isCarrierAp = source.isCarrierAp;
+            carrierApEapType = source.carrierApEapType;
+            carrierName = source.carrierName;
         }
     }
 
@@ -577,6 +612,9 @@
         sb.append(", centerFreq1: ").append(centerFreq1);
         sb.append(", 80211mcResponder: ");
         sb.append(((flags & FLAG_80211mc_RESPONDER) != 0) ? "is supported" : "is not supported");
+        sb.append(", Carrier AP: ").append(isCarrierAp ? "yes" : "no");
+        sb.append(", Carrier AP EAP Type: ").append(carrierApEapType);
+        sb.append(", Carrier name: ").append(carrierName);
         return sb.toString();
     }
 
@@ -646,6 +684,9 @@
         } else {
             dest.writeInt(0);
         }
+        dest.writeInt(isCarrierAp ? 1 : 0);
+        dest.writeInt(carrierApEapType);
+        dest.writeString(carrierName);
     }
 
     /** Implement the Parcelable interface {@hide} */
@@ -715,6 +756,9 @@
                                 new AnqpInformationElement(vendorId, elementId, payload);
                     }
                 }
+                sr.isCarrierAp = in.readInt() != 0;
+                sr.carrierApEapType = in.readInt();
+                sr.carrierName = in.readString();
                 return sr;
             }
 
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index e7fbe4f..6438631 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -245,6 +245,7 @@
      * (e.g., {@code 01a243f405}).
      */
     public String SSID;
+
     /**
      * When set, this network configuration entry should only be used when
      * associating with the AP having the specified BSSID. The value is
@@ -419,12 +420,6 @@
 
     /**
      * @hide
-     * last failure
-     */
-    public String lastFailure;
-
-    /**
-     * @hide
      * last time we connected, this configuration had validated internet access
      */
     public boolean validatedInternetAccess;
@@ -740,22 +735,80 @@
     }
 
     /**
+     * Indicates if the creator of this configuration has expressed that it
+     * should be considered metered.
+     *
+     * @see #isMetered(WifiConfiguration, WifiInfo)
      * @hide
-     * A hint about whether or not the network represented by this WifiConfiguration
-     * is metered. This is hinted at via the meteredHint bit on DHCP results set in
-     * {@link com.android.server.wifi.WifiStateMachine}, or via a network score in
-     * {@link com.android.server.wifi.ExternalScoreEvaluator}.
      */
     @SystemApi
     public boolean meteredHint;
 
+    /** {@hide} */
+    public static final int METERED_OVERRIDE_NONE = 0;
+    /** {@hide} */
+    public static final int METERED_OVERRIDE_METERED = 1;
+    /** {@hide} */
+    public static final int METERED_OVERRIDE_NOT_METERED = 2;
+
+    /**
+     * Indicates if the end user has expressed an explicit opinion about the
+     * meteredness of this network, such as through the Settings app.
+     * <p>
+     * This should always override any values from {@link #meteredHint} or
+     * {@link WifiInfo#getMeteredHint()}.
+     *
+     * @see #isMetered(WifiConfiguration, WifiInfo)
+     * @hide
+     */
+    public int meteredOverride = METERED_OVERRIDE_NONE;
+
+    /**
+     * Blend together all the various opinions to decide if the given network
+     * should be considered metered or not.
+     *
+     * @hide
+     */
+    public static boolean isMetered(WifiConfiguration config, WifiInfo info) {
+        boolean metered = false;
+        if (info != null && info.getMeteredHint()) {
+            metered = true;
+        }
+        if (config != null && config.meteredHint) {
+            metered = true;
+        }
+        if (config != null
+                && config.meteredOverride == WifiConfiguration.METERED_OVERRIDE_METERED) {
+            metered = true;
+        }
+        if (config != null
+                && config.meteredOverride == WifiConfiguration.METERED_OVERRIDE_NOT_METERED) {
+            metered = false;
+        }
+        return metered;
+    }
+
     /**
      * @hide
-     * Indicates if a user has specified the WifiConfiguration to be metered. Users
-     * can toggle if a network is metered within Settings -> Data Usage -> Network
-     * Restrictions.
+     * Returns true if this WiFi config is for an open network.
      */
-    public boolean meteredOverride;
+    public boolean isOpenNetwork() {
+        final int cardinality = allowedKeyManagement.cardinality();
+        final boolean hasNoKeyMgmt = cardinality == 0
+                || (cardinality == 1 && allowedKeyManagement.get(KeyMgmt.NONE));
+
+        boolean hasNoWepKeys = true;
+        if (wepKeys != null) {
+            for (int i = 0; i < wepKeys.length; i++) {
+                if (wepKeys[i] != null) {
+                    hasNoWepKeys = false;
+                    break;
+                }
+            }
+        }
+
+        return hasNoKeyMgmt && hasNoWepKeys;
+    }
 
     /**
      * @hide
@@ -1380,6 +1433,53 @@
 
     /**
      * @hide
+     * This class is intended to store extra failure reason information for the most recent
+     * connection attempt, so that it may be surfaced to the settings UI
+     */
+    public static class RecentFailure {
+
+        /**
+         * No recent failure, or no specific reason given for the recent connection failure
+         */
+        public static final int NONE = 0;
+        /**
+         * Connection to this network recently failed due to Association Rejection Status 17
+         * (AP is full)
+         */
+        public static final int STATUS_AP_UNABLE_TO_HANDLE_NEW_STA = 17;
+        /**
+         * Association Rejection Status code (NONE for success/non-association-rejection-fail)
+         */
+        private int mAssociationStatus = NONE;
+
+        /**
+         * @param status the association status code for the recent failure
+         */
+        public void setAssociationStatus(int status) {
+            mAssociationStatus = status;
+        }
+        /**
+         * Sets the RecentFailure to NONE
+         */
+        public void clear() {
+            mAssociationStatus = NONE;
+        }
+        /**
+         * Get the recent failure code
+         */
+        public int getAssociationStatus() {
+            return mAssociationStatus;
+        }
+    }
+
+    /**
+     * @hide
+     * RecentFailure member
+     */
+    final public RecentFailure recentFailure = new RecentFailure();
+
+    /**
+     * @hide
      * @return network selection status
      */
     public NetworkSelectionStatus getNetworkSelectionStatus() {
@@ -1426,7 +1526,7 @@
         didSelfAdd = false;
         ephemeral = false;
         meteredHint = false;
-        meteredOverride = false;
+        meteredOverride = METERED_OVERRIDE_NONE;
         useExternalScores = false;
         validatedInternetAccess = false;
         mIpConfiguration = new IpConfiguration();
@@ -1520,23 +1620,24 @@
             sbuf.append(this.numNoInternetAccessReports).append("\n");
         }
         if (this.updateTime != null) {
-            sbuf.append("update ").append(this.updateTime).append("\n");
+            sbuf.append(" update ").append(this.updateTime).append("\n");
         }
         if (this.creationTime != null) {
-            sbuf.append("creation").append(this.creationTime).append("\n");
+            sbuf.append(" creation ").append(this.creationTime).append("\n");
         }
         if (this.didSelfAdd) sbuf.append(" didSelfAdd");
         if (this.selfAdded) sbuf.append(" selfAdded");
         if (this.validatedInternetAccess) sbuf.append(" validatedInternetAccess");
         if (this.ephemeral) sbuf.append(" ephemeral");
         if (this.meteredHint) sbuf.append(" meteredHint");
-        if (this.meteredOverride) sbuf.append(" meteredOverride");
         if (this.useExternalScores) sbuf.append(" useExternalScores");
         if (this.didSelfAdd || this.selfAdded || this.validatedInternetAccess
-            || this.ephemeral || this.meteredHint || this.meteredOverride
-            || this.useExternalScores) {
+            || this.ephemeral || this.meteredHint || this.useExternalScores) {
             sbuf.append("\n");
         }
+        if (this.meteredOverride != METERED_OVERRIDE_NONE) {
+            sbuf.append(" meteredOverride ").append(meteredOverride).append("\n");
+        }
         sbuf.append(" KeyMgmt:");
         for (int k = 0; k < this.allowedKeyManagement.size(); k++) {
             if (this.allowedKeyManagement.get(k)) {
@@ -1667,7 +1768,8 @@
                 sbuf.append('\n');
             }
         }
-
+        sbuf.append("recentFailure: ").append("Association Rejection code: ")
+                .append(recentFailure.getAssociationStatus()).append("\n");
         return sbuf.toString();
     }
 
@@ -1991,7 +2093,6 @@
                 visibility = new Visibility(source.visibility);
             }
 
-            lastFailure = source.lastFailure;
             didSelfAdd = source.didSelfAdd;
             lastConnectUid = source.lastConnectUid;
             lastUpdateUid = source.lastUpdateUid;
@@ -2015,6 +2116,7 @@
             creationTime = source.creationTime;
             updateTime = source.updateTime;
             shared = source.shared;
+            recentFailure.setAssociationStatus(source.recentFailure.getAssociationStatus());
         }
     }
 
@@ -2062,7 +2164,7 @@
         dest.writeInt(isLegacyPasspointConfig ? 1 : 0);
         dest.writeInt(ephemeral ? 1 : 0);
         dest.writeInt(meteredHint ? 1 : 0);
-        dest.writeInt(meteredOverride ? 1 : 0);
+        dest.writeInt(meteredOverride);
         dest.writeInt(useExternalScores ? 1 : 0);
         dest.writeInt(creatorUid);
         dest.writeInt(lastConnectUid);
@@ -2081,6 +2183,7 @@
         dest.writeInt(noInternetAccessExpected ? 1 : 0);
         dest.writeInt(shared ? 1 : 0);
         dest.writeString(mPasspointManagementObjectTree);
+        dest.writeInt(recentFailure.getAssociationStatus());
     }
 
     /** Implement the Parcelable interface {@hide} */
@@ -2129,7 +2232,7 @@
                 config.isLegacyPasspointConfig = in.readInt() != 0;
                 config.ephemeral = in.readInt() != 0;
                 config.meteredHint = in.readInt() != 0;
-                config.meteredOverride = in.readInt() != 0;
+                config.meteredOverride = in.readInt();
                 config.useExternalScores = in.readInt() != 0;
                 config.creatorUid = in.readInt();
                 config.lastConnectUid = in.readInt();
@@ -2148,6 +2251,7 @@
                 config.noInternetAccessExpected = in.readInt() != 0;
                 config.shared = in.readInt() != 0;
                 config.mPasspointManagementObjectTree = in.readString();
+                config.recentFailure.setAssociationStatus(in.readInt());
                 return config;
             }
 
diff --git a/wifi/java/android/net/wifi/WifiConnectionStatistics.java b/wifi/java/android/net/wifi/WifiConnectionStatistics.java
index 0046aa5..1120c66 100644
--- a/wifi/java/android/net/wifi/WifiConnectionStatistics.java
+++ b/wifi/java/android/net/wifi/WifiConnectionStatistics.java
@@ -29,6 +29,7 @@
  * connection requests, auto-join
  * and WiFi usage.
  * @hide
+ * @removed
  */
 @SystemApi
 public class WifiConnectionStatistics implements Parcelable {
diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java
index 476ef97..a367b23 100644
--- a/wifi/java/android/net/wifi/WifiInfo.java
+++ b/wifi/java/android/net/wifi/WifiInfo.java
@@ -346,7 +346,8 @@
      * Returns the service set identifier (SSID) of the current 802.11 network.
      * 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;unknown ssid&gt; if there is no network currently connected.
+     * SSID may be &lt;unknown ssid&gt; if there is no network currently connected,
+     * or if the caller has insufficient permissions to access the SSID.
      * @return the SSID
      */
     public String getSSID() {
@@ -485,7 +486,13 @@
         return mMacAddress != null && !DEFAULT_MAC_ADDRESS.equals(mMacAddress);
     }
 
-    /** {@hide} */
+    /**
+     * Indicates if we've dynamically detected this active network connection as
+     * being metered.
+     *
+     * @see WifiConfiguration#isMetered(WifiConfiguration, WifiInfo)
+     * @hide
+     */
     public void setMeteredHint(boolean meteredHint) {
         mMeteredHint = meteredHint;
     }
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index ddfe9e7b..e9e20ca 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -1002,7 +1002,10 @@
         }
     }
 
-    /** @hide */
+    /**
+     * @hide
+     * @removed
+     */
     @SystemApi
     @RequiresPermission(android.Manifest.permission.READ_WIFI_CREDENTIAL)
     public WifiConnectionStatistics getConnectionStatistics() {
@@ -1596,6 +1599,7 @@
      * @deprecated This API is nolonger supported.
      * Use {@link android.net.wifi.WifiScanner} API
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -1611,6 +1615,7 @@
      * @deprecated This API is nolonger supported.
      * Use {@link android.net.wifi.WifiScanner} API
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -1625,6 +1630,7 @@
      * @deprecated This API is nolonger supported.
      * Use {@link android.net.wifi.WifiScanner} API
      * @hide
+     * @removed
      */
     @Deprecated
     @SystemApi
@@ -1650,11 +1656,17 @@
 
     /**
      * Return dynamic information about the current Wi-Fi connection, if any is active.
+     * <p>
+     * In the connected state, access to the SSID and BSSID requires
+     * the same permissions as {@link #getScanResults}. If such access is not allowed,
+     * {@link WifiInfo#getSSID} will return {@code "<unknown ssid>"} and
+     * {@link WifiInfo#getBSSID} will return {@code "02:00:00:00:00:00"}.
+     *
      * @return the Wi-Fi information, contained in {@link WifiInfo}.
      */
     public WifiInfo getConnectionInfo() {
         try {
-            return mService.getConnectionInfo();
+            return mService.getConnectionInfo(mContext.getOpPackageName());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -1863,7 +1875,7 @@
     }
 
     /**
-     * This call will be deprecated and removed in an upcoming release.  It is no longer used to
+     * This call is deprecated and removed.  It is no longer used to
      * start WiFi Tethering.  Please use {@link ConnectivityManager#startTethering(int, boolean,
      * ConnectivityManager#OnStartTetheringCallback)} if
      * the caller has proper permissions.  Callers can also use the LocalOnlyHotspot feature for a
@@ -1875,8 +1887,11 @@
      * @return {@code false}
      *
      * @hide
+     * @deprecated This API is nolonger supported.
+     * @removed
      */
     @SystemApi
+    @Deprecated
     @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED)
     public boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {
         String packageName = mContext.getOpPackageName();
@@ -2353,7 +2368,7 @@
         /** WPS start succeeded */
         public abstract void onStarted(String pin);
 
-        /** WPS operation completed succesfully */
+        /** WPS operation completed successfully */
         public abstract void onSucceeded();
 
         /**
@@ -3236,7 +3251,7 @@
      * Normally the Wifi stack filters out packets not explicitly
      * addressed to this device.  Acquring a MulticastLock will
      * cause the stack to receive packets addressed to multicast
-     * addresses.  Processing these extra packets can cause a noticable
+     * addresses.  Processing these extra packets can cause a noticeable
      * battery drain and should be disabled when not needed.
      */
     public class MulticastLock {
diff --git a/wifi/java/android/net/wifi/WifiNetworkScoreCache.java b/wifi/java/android/net/wifi/WifiNetworkScoreCache.java
index f61dfdc..b22ae070 100755
--- a/wifi/java/android/net/wifi/WifiNetworkScoreCache.java
+++ b/wifi/java/android/net/wifi/WifiNetworkScoreCache.java
@@ -26,15 +26,14 @@
 import android.os.Handler;
 import android.os.Process;
 import android.util.Log;
+import android.util.LruCache;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.Preconditions;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * {@link INetworkScoreCache} implementation for Wifi Networks.
@@ -50,18 +49,21 @@
     // scorer to provide an RSSI threshold below which a network should not be used.
     public static final int INVALID_NETWORK_SCORE = Byte.MIN_VALUE;
 
+    /** Default number entries to be stored in the {@link LruCache}. */
+    private static final int DEFAULT_MAX_CACHE_SIZE = 100;
+
     // See {@link #CacheListener}.
     @Nullable
-    @GuardedBy("mCacheLock")
+    @GuardedBy("mLock")
     private CacheListener mListener;
 
     private final Context mContext;
-    private final Object mCacheLock = new Object();
+    private final Object mLock = new Object();
 
     // The key is of the form "<ssid>"<bssid>
     // TODO: What about SSIDs that can't be encoded as UTF-8?
-    private final Map<String, ScoredNetwork> mNetworkCache;
-
+    @GuardedBy("mLock")
+    private final LruCache<String, ScoredNetwork> mCache;
 
     public WifiNetworkScoreCache(Context context) {
         this(context, null /* listener */);
@@ -74,9 +76,14 @@
      * @param listener CacheListener for cache updates
      */
     public WifiNetworkScoreCache(Context context, @Nullable CacheListener listener) {
+        this(context, listener, DEFAULT_MAX_CACHE_SIZE);
+    }
+
+    public WifiNetworkScoreCache(
+            Context context, @Nullable CacheListener listener, int maxCacheSize) {
         mContext = context.getApplicationContext();
         mListener = listener;
-        mNetworkCache = new HashMap<>();
+        mCache = new LruCache<>(maxCacheSize);
     }
 
     @Override public final void updateScores(List<ScoredNetwork> networks) {
@@ -89,7 +96,7 @@
 
         boolean changed = false;
 
-        synchronized(mNetworkCache) {
+        synchronized(mLock) {
             for (ScoredNetwork network : networks) {
                 String networkKey = buildNetworkKey(network);
                 if (networkKey == null) {
@@ -98,12 +105,10 @@
                     }
                     continue;
                 }
-                mNetworkCache.put(networkKey, network);
+                mCache.put(networkKey, network);
                 changed = true;
             }
-        }
 
-        synchronized (mCacheLock) {
             if (mListener != null && changed) {
                 mListener.post(networks);
             }
@@ -111,8 +116,8 @@
     }
 
     @Override public final void clearScores() {
-        synchronized (mNetworkCache) {
-            mNetworkCache.clear();
+        synchronized (mLock) {
+            mCache.evictAll();
         }
     }
 
@@ -138,7 +143,6 @@
     }
 
     public int getNetworkScore(ScanResult result) {
-
         int score = INVALID_NETWORK_SCORE;
 
         ScoredNetwork network = getScoredNetwork(result);
@@ -164,7 +168,6 @@
     }
 
     public int getNetworkScore(ScanResult result, boolean isActiveNetwork) {
-
         int score = INVALID_NETWORK_SCORE;
 
         ScoredNetwork network = getScoredNetwork(result);
@@ -185,8 +188,8 @@
         String key = buildNetworkKey(result);
         if (key == null) return null;
 
-        synchronized(mNetworkCache) {
-            ScoredNetwork network = mNetworkCache.get(key);
+        synchronized(mLock) {
+            ScoredNetwork network = mCache.get(key);
             return network;
         }
     }
@@ -201,8 +204,8 @@
             }
             return null;
         }
-        synchronized (mNetworkCache) {
-            return mNetworkCache.get(key);
+        synchronized (mLock) {
+            return mCache.get(key);
         }
     }
 
@@ -248,33 +251,35 @@
                 mContext.getPackageName(), Process.myUid());
         writer.println(header);
         writer.println("  All score curves:");
-        for (ScoredNetwork score : mNetworkCache.values()) {
-            writer.println("    " + score);
-        }
-        writer.println("  Current network scores:");
-        WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
-        for (ScanResult scanResult : wifiManager.getScanResults()) {
-            writer.println("    " + buildNetworkKey(scanResult) + ": " + getNetworkScore(scanResult));
+        synchronized (mLock) {
+            for (ScoredNetwork score : mCache.snapshot().values()) {
+                writer.println("    " + score);
+            }
+            writer.println("  Network scores for latest ScanResults:");
+            WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
+            for (ScanResult scanResult : wifiManager.getScanResults()) {
+                writer.println(
+                        "    " + buildNetworkKey(scanResult) + ": " + getNetworkScore(scanResult));
+            }
         }
     }
 
     /** Registers a CacheListener instance, replacing the previous listener if it existed. */
     public void registerListener(CacheListener listener) {
-        synchronized (mCacheLock) {
+        synchronized (mLock) {
             mListener = listener;
         }
     }
 
     /** Removes the registered CacheListener. */
     public void unregisterListener() {
-        synchronized (mCacheLock) {
+        synchronized (mLock) {
             mListener = null;
         }
     }
 
     /** Listener for updates to the cache inside WifiNetworkScoreCache. */
     public abstract static class CacheListener {
-
         private Handler mHandler;
 
         /**
diff --git a/wifi/java/android/net/wifi/aware/PeerHandle.java b/wifi/java/android/net/wifi/aware/PeerHandle.java
index cd45c52..b525212 100644
--- a/wifi/java/android/net/wifi/aware/PeerHandle.java
+++ b/wifi/java/android/net/wifi/aware/PeerHandle.java
@@ -32,4 +32,22 @@
 
     /** @hide */
     public int peerId;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+
+        if (!(o instanceof PeerHandle)) {
+            return false;
+        }
+
+        return peerId == ((PeerHandle) o).peerId;
+    }
+
+    @Override
+    public int hashCode() {
+        return peerId;
+    }
 }
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareAgentNetworkSpecifier.java b/wifi/java/android/net/wifi/aware/WifiAwareAgentNetworkSpecifier.java
new file mode 100644
index 0000000..7c99c49
--- /dev/null
+++ b/wifi/java/android/net/wifi/aware/WifiAwareAgentNetworkSpecifier.java
@@ -0,0 +1,226 @@
+/*
+ * 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.aware;
+
+import android.net.NetworkSpecifier;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+import libcore.util.HexEncoding;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.StringJoiner;
+
+/**
+ * A network specifier object used to represent the capabilities of an network agent. A collection
+ * of multiple WifiAwareNetworkSpecifier objects whose matching critiera (satisfiedBy) is an OR:
+ * a match on any of the network specifiers in the collection is a match.
+ *
+ * This class is not intended for use in network requests.
+ *
+ * @hide
+ */
+public class WifiAwareAgentNetworkSpecifier extends NetworkSpecifier implements Parcelable {
+    private static final String TAG = "WifiAwareAgentNs";
+
+    private static final boolean VDBG = false; // STOPSHIP if true
+
+    private Set<ByteArrayWrapper> mNetworkSpecifiers = new HashSet<>();
+    private MessageDigest mDigester;
+
+    public WifiAwareAgentNetworkSpecifier() {
+        // do nothing, already initialized to empty
+    }
+
+    public WifiAwareAgentNetworkSpecifier(WifiAwareNetworkSpecifier ns) {
+        initialize();
+        mNetworkSpecifiers.add(convert(ns));
+    }
+
+    public WifiAwareAgentNetworkSpecifier(WifiAwareNetworkSpecifier[] nss) {
+        initialize();
+        for (WifiAwareNetworkSpecifier ns : nss) {
+            mNetworkSpecifiers.add(convert(ns));
+        }
+    }
+
+    public boolean isEmpty() {
+        return mNetworkSpecifiers.isEmpty();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeArray(mNetworkSpecifiers.toArray());
+    }
+
+    public static final Creator<WifiAwareAgentNetworkSpecifier> CREATOR =
+            new Creator<WifiAwareAgentNetworkSpecifier>() {
+                @Override
+                public WifiAwareAgentNetworkSpecifier createFromParcel(Parcel in) {
+                    WifiAwareAgentNetworkSpecifier agentNs = new WifiAwareAgentNetworkSpecifier();
+                    Object[] objs = in.readArray(null);
+                    for (Object obj : objs) {
+                        agentNs.mNetworkSpecifiers.add((ByteArrayWrapper) obj);
+                    }
+                    return agentNs;
+                }
+
+                @Override
+                public WifiAwareAgentNetworkSpecifier[] newArray(int size) {
+                    return new WifiAwareAgentNetworkSpecifier[size];
+                }
+            };
+
+    @Override
+    public int hashCode() {
+        return mNetworkSpecifiers.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof WifiAwareAgentNetworkSpecifier)) {
+            return false;
+        }
+        return mNetworkSpecifiers.equals(((WifiAwareAgentNetworkSpecifier) obj).mNetworkSpecifiers);
+    }
+
+    @Override
+    public String toString() {
+        StringJoiner sj = new StringJoiner(",");
+        for (ByteArrayWrapper baw: mNetworkSpecifiers) {
+            sj.add(baw.toString());
+        }
+        return sj.toString();
+    }
+
+    @Override
+    public boolean satisfiedBy(NetworkSpecifier other) {
+        if (!(other instanceof WifiAwareAgentNetworkSpecifier)) {
+            return false;
+        }
+        WifiAwareAgentNetworkSpecifier otherNs = (WifiAwareAgentNetworkSpecifier) other;
+
+        // called as old.satifiedBy(new): satisfied if old contained in new
+        for (ByteArrayWrapper baw: mNetworkSpecifiers) {
+            if (!otherNs.mNetworkSpecifiers.contains(baw)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    public boolean satisfiesAwareNetworkSpecifier(WifiAwareNetworkSpecifier ns) {
+        if (VDBG) Log.v(TAG, "satisfiesAwareNetworkSpecifier: ns=" + ns);
+        ByteArrayWrapper nsBytes = convert(ns);
+        return mNetworkSpecifiers.contains(nsBytes);
+    }
+
+    @Override
+    public void assertValidFromUid(int requestorUid) {
+        throw new SecurityException(
+                "WifiAwareAgentNetworkSpecifier should not be used in network requests");
+    }
+
+    private void initialize() {
+        try {
+            mDigester = MessageDigest.getInstance("SHA-256");
+        } catch (NoSuchAlgorithmException e) {
+            Log.e(TAG, "Can not instantiate a SHA-256 digester!? Will match nothing.");
+            return;
+        }
+    }
+
+    private ByteArrayWrapper convert(WifiAwareNetworkSpecifier ns) {
+        if (mDigester == null) {
+            return null;
+        }
+
+        Parcel parcel = Parcel.obtain();
+        ns.writeToParcel(parcel, 0);
+        byte[] bytes = parcel.marshall();
+
+        mDigester.reset();
+        mDigester.update(bytes);
+        return new ByteArrayWrapper(mDigester.digest());
+    }
+
+    private static class ByteArrayWrapper implements Parcelable {
+        private byte[] mData;
+
+        ByteArrayWrapper(byte[] data) {
+            mData = data;
+        }
+
+        @Override
+        public int hashCode() {
+            return Arrays.hashCode(mData);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof ByteArrayWrapper)) {
+                return false;
+            }
+            return Arrays.equals(((ByteArrayWrapper) obj).mData, mData);
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeBlob(mData);
+        }
+
+        public static final Creator<ByteArrayWrapper> CREATOR =
+                new Creator<ByteArrayWrapper>() {
+                    @Override
+                    public ByteArrayWrapper createFromParcel(Parcel in) {
+                        return new ByteArrayWrapper(in.readBlob());
+                    }
+
+                    @Override
+                    public ByteArrayWrapper[] newArray(int size) {
+                        return new ByteArrayWrapper[size];
+                    }
+                };
+
+        @Override
+        public String toString() {
+            return new String(HexEncoding.encode(mData));
+        }
+    }
+}
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareNetworkSpecifier.java b/wifi/java/android/net/wifi/aware/WifiAwareNetworkSpecifier.java
index eeabbfa..6e37fcf 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareNetworkSpecifier.java
+++ b/wifi/java/android/net/wifi/aware/WifiAwareNetworkSpecifier.java
@@ -193,6 +193,9 @@
     @Override
     public boolean satisfiedBy(NetworkSpecifier other) {
         // MatchAllNetworkSpecifier is taken care in NetworkCapabilities#satisfiedBySpecifier.
+        if (other instanceof WifiAwareAgentNetworkSpecifier) {
+            return ((WifiAwareAgentNetworkSpecifier) other).satisfiesAwareNetworkSpecifier(this);
+        }
         return equals(other);
     }
 
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
index 0d4359e..8075e17 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
@@ -41,6 +41,8 @@
 import com.android.internal.util.AsyncChannel;
 import com.android.internal.util.Protocol;
 
+import dalvik.system.CloseGuard;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -668,15 +670,21 @@
      * Most p2p operations require a Channel as an argument. An instance of Channel is obtained
      * by doing a call on {@link #initialize}
      */
-    public static class Channel {
-        Channel(Context context, Looper looper, ChannelListener l, Binder binder) {
+    public static class Channel implements AutoCloseable {
+        /** @hide */
+        public Channel(Context context, Looper looper, ChannelListener l, Binder binder,
+                WifiP2pManager p2pManager) {
             mAsyncChannel = new AsyncChannel();
             mHandler = new P2pHandler(looper);
             mChannelListener = l;
             mContext = context;
             mBinder = binder;
+            mP2pManager = p2pManager;
+
+            mCloseGuard.open("close");
         }
         private final static int INVALID_LISTENER_KEY = 0;
+        private final WifiP2pManager mP2pManager;
         private ChannelListener mChannelListener;
         private ServiceResponseListener mServRspListener;
         private DnsSdServiceResponseListener mDnsSdServRspListener;
@@ -686,6 +694,41 @@
         private final Object mListenerMapLock = new Object();
         private int mListenerKey = 0;
 
+        private final CloseGuard mCloseGuard = CloseGuard.get();
+
+        /**
+         * Close the current P2P connection and indicate to the P2P service that connections
+         * created by the app can be removed.
+         */
+        public void close() {
+            if (mP2pManager == null) {
+                Log.w(TAG, "Channel.close(): Null mP2pManager!?");
+            } else {
+                try {
+                    mP2pManager.mService.close(mBinder);
+                } catch (RemoteException e) {
+                    throw e.rethrowFromSystemServer();
+                }
+            }
+
+            mAsyncChannel.disconnect();
+            mCloseGuard.close();
+        }
+
+        /** @hide */
+        @Override
+        protected void finalize() throws Throwable {
+            try {
+                if (mCloseGuard != null) {
+                    mCloseGuard.warnIfOpen();
+                }
+
+                close();
+            } finally {
+                super.finalize();
+            }
+        }
+
         /* package */ final Binder mBinder;
 
         private AsyncChannel mAsyncChannel;
@@ -913,11 +956,12 @@
                                      Messenger messenger, Binder binder) {
         if (messenger == null) return null;
 
-        Channel c = new Channel(srcContext, srcLooper, listener, binder);
+        Channel c = new Channel(srcContext, srcLooper, listener, binder, this);
         if (c.mAsyncChannel.connectSync(srcContext, c.mHandler, messenger)
                 == AsyncChannel.STATUS_SUCCESSFUL) {
             return c;
         } else {
+            c.close();
             return null;
         }
     }
@@ -1422,24 +1466,6 @@
     }
 
     /**
-     * Close the current P2P connection and clean-up any configuration requested by the
-     * current app. Takes same action as taken when the app dies.
-     *
-     * @param c is the channel created at {@link #initialize}
-     *
-     * @hide
-     */
-    public void close(Channel c) {
-        try {
-            if (c != null) {
-                mService.close(c.mBinder);
-            }
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-    }
-
-    /**
      * Get a handover request message for use in WFA NFC Handover transfer.
      * @hide
      */
diff --git a/wifi/tests/Android.mk b/wifi/tests/Android.mk
index 8dc244f..c98e40a 100644
--- a/wifi/tests/Android.mk
+++ b/wifi/tests/Android.mk
@@ -49,13 +49,15 @@
 LOCAL_JACK_COVERAGE_EXCLUDE_FILTER := $(jacoco_exclude)
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
-	android-support-test \
-	guava \
-	mockito-target-minus-junit4 \
-	frameworks-base-testutils \
+    android-support-test \
+    core-test-rules \
+    guava \
+    mockito-target-minus-junit4 \
+    frameworks-base-testutils \
+    truth-prebuilt \
 
 LOCAL_JAVA_LIBRARIES := \
-	android.test.runner \
+    android.test.runner \
 
 LOCAL_PACKAGE_NAME := FrameworksWifiApiTests
 LOCAL_COMPATIBILITY_SUITE := device-tests
diff --git a/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java b/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java
index 632cfaf..622dce6 100644
--- a/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java
@@ -18,6 +18,8 @@
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
 
 import android.os.Parcel;
 import android.net.wifi.WifiConfiguration.NetworkSelectionStatus;
@@ -98,4 +100,73 @@
 
         assertEquals(networkSelectionStatus.isNotRecommended(), copy.isNotRecommended());
     }
+
+    @Test
+    public void testIsOpenNetwork_IsOpen_NullWepKeys() {
+        WifiConfiguration config = new WifiConfiguration();
+        config.allowedKeyManagement.clear();
+        config.wepKeys = null;
+
+        assertTrue(config.isOpenNetwork());
+    }
+
+    @Test
+    public void testIsOpenNetwork_IsOpen_ZeroLengthWepKeysArray() {
+        WifiConfiguration config = new WifiConfiguration();
+        config.allowedKeyManagement.clear();
+        config.wepKeys = new String[0];
+
+        assertTrue(config.isOpenNetwork());
+    }
+
+    @Test
+    public void testIsOpenNetwork_IsOpen_NullWepKeysArray() {
+        WifiConfiguration config = new WifiConfiguration();
+        config.allowedKeyManagement.clear();
+        config.wepKeys = new String[1];
+
+        assertTrue(config.isOpenNetwork());
+    }
+
+    @Test
+    public void testIsOpenNetwork_NotOpen_HasWepKeys() {
+        WifiConfiguration config = new WifiConfiguration();
+        config.allowedKeyManagement.clear();
+        config.wepKeys = new String[] {"test"};
+
+        assertFalse(config.isOpenNetwork());
+    }
+
+    @Test
+    public void testIsOpenNetwork_NotOpen_HasNullWepKeyFollowedByNonNullKey() {
+        WifiConfiguration config = new WifiConfiguration();
+        config.allowedKeyManagement.clear();
+        config.wepKeys = new String[] {null, null, "test"};
+
+        assertFalse(config.isOpenNetwork());
+    }
+
+    @Test
+    public void testIsOpenNetwork_NotOpen_HasAuthType() {
+        for (int keyMgmt = 0; keyMgmt < WifiConfiguration.KeyMgmt.strings.length; keyMgmt++) {
+            if (keyMgmt == WifiConfiguration.KeyMgmt.NONE) continue;
+            WifiConfiguration config = new WifiConfiguration();
+            config.allowedKeyManagement.clear();
+            config.allowedKeyManagement.set(keyMgmt);
+            config.wepKeys = null;
+
+            assertFalse("Open network reported when key mgmt was set to "
+                            + WifiConfiguration.KeyMgmt.strings[keyMgmt], config.isOpenNetwork());
+        }
+    }
+
+    @Test
+    public void testIsOpenNetwork_NotOpen_HasAuthTypeNoneAndMore() {
+        WifiConfiguration config = new WifiConfiguration();
+        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
+        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
+        config.wepKeys = null;
+
+        assertFalse(config.isOpenNetwork());
+    }
 }
diff --git a/wifi/tests/src/android/net/wifi/WifiNetworkScoreCacheTest.java b/wifi/tests/src/android/net/wifi/WifiNetworkScoreCacheTest.java
index 18f6bc8..997282b 100644
--- a/wifi/tests/src/android/net/wifi/WifiNetworkScoreCacheTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiNetworkScoreCacheTest.java
@@ -16,9 +16,9 @@
 
 package android.net.wifi;
 
-import static org.junit.Assert.*;
-import static org.mockito.Mockito.timeout;
-import static org.mockito.Mockito.verify;
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.fail;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
@@ -34,12 +34,9 @@
 
 import com.google.common.collect.ImmutableList;
 
-import org.junit.Rule;
 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;
 
@@ -54,7 +51,11 @@
 public class WifiNetworkScoreCacheTest {
 
     public static final String SSID = "ssid";
+    public static final String SSID2 = "ssid2";
+    public static final String SSID3 = "ssid3";
     public static final String FORMATTED_SSID = "\"" + SSID + "\"";
+    public static final String FORMATTED_SSID2 = "\"" + SSID2 + "\"";
+    public static final String FORMATTED_SSID3 = "\"" + SSID3 + "\"";
     public static final String BSSID = "AA:AA:AA:AA:AA:AA";
 
     public static final WifiKey VALID_KEY = new WifiKey(FORMATTED_SSID, BSSID);
@@ -120,13 +121,13 @@
 
     @Test
     public void isScoredNetworkShouldReturnTrueAfterUpdateScoresIsCalled() {
-        assertTrue(mScoreCache.isScoredNetwork(VALID_SCAN_RESULT));
+        assertThat(mScoreCache.isScoredNetwork(VALID_SCAN_RESULT)).isTrue();
     }
 
     @Test
     public void isScoredNetworkShouldReturnFalseAfterClearScoresIsCalled() {
         mScoreCache.clearScores();
-        assertFalse(mScoreCache.isScoredNetwork(VALID_SCAN_RESULT));
+        assertThat(mScoreCache.isScoredNetwork(VALID_SCAN_RESULT)).isFalse();
     }
 
     @Test
@@ -137,19 +138,19 @@
 
         mScoreCache.updateScores(ImmutableList.of(network2));
 
-        assertTrue(mScoreCache.isScoredNetwork(VALID_SCAN_RESULT));
-        assertTrue(mScoreCache.isScoredNetwork(result2));
+        assertThat(mScoreCache.isScoredNetwork(VALID_SCAN_RESULT)).isTrue();
+        assertThat(mScoreCache.isScoredNetwork(result2)).isTrue();
     }
 
     @Test
     public void hasScoreCurveShouldReturnTrue() {
-        assertTrue(mScoreCache.hasScoreCurve(VALID_SCAN_RESULT));
+        assertThat(mScoreCache.hasScoreCurve(VALID_SCAN_RESULT)).isTrue();
     }
 
     @Test
     public void hasScoreCurveShouldReturnFalseWhenNoCachedNetwork() {
         ScanResult unscored = buildScanResult("fake", BSSID);
-        assertFalse(mScoreCache.hasScoreCurve(unscored));
+        assertThat(mScoreCache.hasScoreCurve(unscored)).isFalse();
     }
 
     @Test
@@ -157,7 +158,7 @@
         ScoredNetwork noCurve = buildScoredNetwork(VALID_KEY, null /* rssiCurve */);
         mScoreCache.updateScores(ImmutableList.of(noCurve));
 
-        assertFalse(mScoreCache.hasScoreCurve(VALID_SCAN_RESULT));
+        assertThat(mScoreCache.hasScoreCurve(VALID_SCAN_RESULT)).isFalse();
     }
 
     @Test
@@ -169,12 +170,12 @@
 
         when(mockRssiCurve.lookupScore(rssi)).thenReturn(score);
 
-        assertEquals(score, mScoreCache.getNetworkScore(result));
+        assertThat(mScoreCache.getNetworkScore(result)).isEqualTo(score);
     }
 
     @Test
     public void getMeteredHintShouldReturnFalse() {
-        assertFalse(mScoreCache.getMeteredHint(VALID_SCAN_RESULT));
+        assertThat(mScoreCache.getMeteredHint(VALID_SCAN_RESULT)).isFalse();
     }
 
     @Test
@@ -184,7 +185,7 @@
                     new NetworkKey(VALID_KEY), mockRssiCurve, true /* metered Hint */);
         mScoreCache.updateScores(ImmutableList.of(network));
 
-        assertTrue(mScoreCache.getMeteredHint(VALID_SCAN_RESULT));
+        assertThat(mScoreCache.getMeteredHint(VALID_SCAN_RESULT)).isTrue();
     }
 
     @Test
@@ -197,7 +198,28 @@
         } catch (InterruptedException e) {
             fail("Interrupted Exception while waiting for listener to be invoked.");
         }
-        assertEquals("One network should be updated", 1, mUpdatedNetworksCaptor.size());
-        assertEquals(mValidScoredNetwork, mUpdatedNetworksCaptor.get(0));
+        // One network should be updated.
+        assertThat(mUpdatedNetworksCaptor.size()).isEqualTo(1);
+        assertThat(mUpdatedNetworksCaptor.get(0)).isEqualTo(mValidScoredNetwork);
+    }
+
+    @Test
+    public void leastRecentlyUsedScore_shouldBeEvictedFromCache() {
+        mScoreCache = new WifiNetworkScoreCache(mockContext, mCacheListener, 2 /* maxCacheSize */);
+
+        ScoredNetwork network1 = mValidScoredNetwork;
+        ScoredNetwork network2 = buildScoredNetwork(
+                new WifiKey(FORMATTED_SSID2, BSSID), mockRssiCurve);
+        ScoredNetwork network3 = buildScoredNetwork(
+                new WifiKey(FORMATTED_SSID3, BSSID), mockRssiCurve);
+        mScoreCache.updateScores(ImmutableList.of(network1));
+        mScoreCache.updateScores(ImmutableList.of(network2));
+
+        // First score should be evicted because max cache size has been reached.
+        mScoreCache.updateScores(ImmutableList.of(network3));
+
+        assertThat(mScoreCache.hasScoreCurve(buildScanResult(SSID2, BSSID))).isTrue();
+        assertThat(mScoreCache.hasScoreCurve(buildScanResult(SSID3, BSSID))).isTrue();
+        assertThat(mScoreCache.hasScoreCurve(VALID_SCAN_RESULT)).isFalse();
     }
 }
diff --git a/wifi/tests/src/android/net/wifi/aware/WifiAwareAgentNetworkSpecifierTest.java b/wifi/tests/src/android/net/wifi/aware/WifiAwareAgentNetworkSpecifierTest.java
new file mode 100644
index 0000000..2dd0537
--- /dev/null
+++ b/wifi/tests/src/android/net/wifi/aware/WifiAwareAgentNetworkSpecifierTest.java
@@ -0,0 +1,177 @@
+/*
+ * 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.aware;
+
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertEquals;
+
+import android.os.Parcel;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ErrorCollector;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Unit test harness for WifiAwareAgentNetworkSpecifier class.
+ */
+@SmallTest
+public class WifiAwareAgentNetworkSpecifierTest {
+    @Rule
+    public ErrorCollector collector = new ErrorCollector();
+
+    @Test
+    public void testParcel() {
+        final int numNs = 10;
+
+        Set<WifiAwareNetworkSpecifier> nsSet = new HashSet<>();
+        for (int i = 0; i < numNs; ++i) {
+            nsSet.add(getDummyNetworkSpecifier(10 + i));
+        }
+        WifiAwareAgentNetworkSpecifier dut = new WifiAwareAgentNetworkSpecifier(
+                nsSet.toArray(new WifiAwareNetworkSpecifier[numNs]));
+
+        Parcel parcelW = Parcel.obtain();
+        dut.writeToParcel(parcelW, 0);
+        byte[] bytes = parcelW.marshall();
+        parcelW.recycle();
+
+        Parcel parcelR = Parcel.obtain();
+        parcelR.unmarshall(bytes, 0, bytes.length);
+        parcelR.setDataPosition(0);
+        WifiAwareAgentNetworkSpecifier rereadDut =
+                WifiAwareAgentNetworkSpecifier.CREATOR.createFromParcel(parcelR);
+
+        assertEquals(dut, rereadDut);
+    }
+
+    /**
+     * Validate that an empty agent network specifier doesn't match any base network specifier.
+     */
+    @Test
+    public void testEmptyDoesntMatchAnything() {
+        WifiAwareAgentNetworkSpecifier dut = new WifiAwareAgentNetworkSpecifier();
+        WifiAwareNetworkSpecifier ns = getDummyNetworkSpecifier(6);
+        collector.checkThat("No match expected", ns.satisfiedBy(dut), equalTo(false));
+    }
+
+    /**
+     * Validate that an agent network specifier constructed with a single entry matches that entry,
+     * and only that entry.
+     */
+    @Test
+    public void testSingleMatch() {
+        WifiAwareNetworkSpecifier nsThis = getDummyNetworkSpecifier(6);
+        WifiAwareAgentNetworkSpecifier dut = new WifiAwareAgentNetworkSpecifier(nsThis);
+        WifiAwareNetworkSpecifier nsOther = getDummyNetworkSpecifier(8);
+        collector.checkThat("Match expected", nsThis.satisfiedBy(dut), equalTo(true));
+        collector.checkThat("No match expected", nsOther.satisfiedBy(dut), equalTo(false));
+    }
+
+    /**
+     * Validate that an agent network specifier constructed with multiple entries matches all those
+     * entries - but none other.
+     */
+    @Test
+    public void testMultipleMatchesAllMembers() {
+        final int numNs = 10;
+
+        Set<WifiAwareNetworkSpecifier> nsSet = new HashSet<>();
+        for (int i = 0; i < numNs; ++i) {
+            nsSet.add(getDummyNetworkSpecifier(10 + i));
+        }
+
+        WifiAwareAgentNetworkSpecifier dut = new WifiAwareAgentNetworkSpecifier(
+                nsSet.toArray(new WifiAwareNetworkSpecifier[numNs]));
+        WifiAwareNetworkSpecifier nsOther = getDummyNetworkSpecifier(10000);
+
+        for (WifiAwareNetworkSpecifier nsThis: nsSet) {
+            collector.checkThat("Match expected", nsThis.satisfiedBy(dut), equalTo(true));
+        }
+        collector.checkThat("No match expected", nsOther.satisfiedBy(dut), equalTo(false));
+    }
+
+    /**
+     * Validate that agent network specifier matches against a super-set.
+     */
+    @Test
+    public void testMatchSuperset() {
+        final int numNs = 10;
+
+        Set<WifiAwareNetworkSpecifier> nsSet = new HashSet<>();
+        for (int i = 0; i < numNs; ++i) {
+            nsSet.add(getDummyNetworkSpecifier(10 + i));
+        }
+
+        WifiAwareAgentNetworkSpecifier oldNs = new WifiAwareAgentNetworkSpecifier(
+                nsSet.toArray(new WifiAwareNetworkSpecifier[nsSet.size()]));
+
+        nsSet.add(getDummyNetworkSpecifier(100 + numNs));
+        WifiAwareAgentNetworkSpecifier newNs = new WifiAwareAgentNetworkSpecifier(
+                nsSet.toArray(new WifiAwareNetworkSpecifier[nsSet.size()]));
+
+        collector.checkThat("Match expected", oldNs.satisfiedBy(newNs), equalTo(true));
+    }
+
+    /**
+     * Validate that agent network specifier does not match against a sub-set.
+     */
+    @Test
+    public void testNoMatchSubset() {
+        final int numNs = 10;
+
+        Set<WifiAwareNetworkSpecifier> nsSet = new HashSet<>();
+        for (int i = 0; i < numNs; ++i) {
+            nsSet.add(getDummyNetworkSpecifier(10 + i));
+        }
+
+        WifiAwareAgentNetworkSpecifier newNs = new WifiAwareAgentNetworkSpecifier(
+                nsSet.toArray(new WifiAwareNetworkSpecifier[nsSet.size()]));
+
+        nsSet.add(getDummyNetworkSpecifier(100 + numNs));
+        WifiAwareAgentNetworkSpecifier oldNs = new WifiAwareAgentNetworkSpecifier(
+                nsSet.toArray(new WifiAwareNetworkSpecifier[nsSet.size()]));
+
+        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
+
+    /**
+     * Returns a WifiAwareNetworkSpecifier with dummy (but valid) entries. Each can be
+     * differentiated (made unique) by specifying a different client ID.
+     */
+    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, 0);
+    }
+}
diff --git a/wifi/tests/src/android/net/wifi/p2p/WifiP2pManagerTest.java b/wifi/tests/src/android/net/wifi/p2p/WifiP2pManagerTest.java
new file mode 100644
index 0000000..1e8382f
--- /dev/null
+++ b/wifi/tests/src/android/net/wifi/p2p/WifiP2pManagerTest.java
@@ -0,0 +1,82 @@
+/*
+ * 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.p2p;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.os.test.TestLooper;
+
+import libcore.junit.util.ResourceLeakageDetector;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Unit test harness for WifiP2pManager.
+ */
+public class WifiP2pManagerTest {
+    private WifiP2pManager mDut;
+    private TestLooper mTestLooper;
+
+    @Mock
+    public Context mContextMock;
+    @Mock
+    IWifiP2pManager mP2pServiceMock;
+
+    @Rule
+    public ResourceLeakageDetector.LeakageDetectorRule leakageDetectorRule =
+            ResourceLeakageDetector.getRule();
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+
+        mDut = new WifiP2pManager(mP2pServiceMock);
+        mTestLooper = new TestLooper();
+    }
+
+    /**
+     * Validate that on finalize we close the channel and flag a resource leakage.
+     */
+    @Test
+    public void testChannelFinalize() throws Exception {
+        WifiP2pManager.Channel channel = new WifiP2pManager.Channel(mContextMock,
+                mTestLooper.getLooper(), null, null, mDut);
+
+        leakageDetectorRule.assertUnreleasedResourceCount(channel, 1);
+    }
+
+    /**
+     * Validate that when close is called on a channel it frees up resources (i.e. don't
+     * get flagged again on finalize).
+     */
+    @Test
+    public void testChannelClose() throws Exception {
+        WifiP2pManager.Channel channel = new WifiP2pManager.Channel(mContextMock,
+                mTestLooper.getLooper(), null, null, mDut);
+
+        channel.close();
+        verify(mP2pServiceMock).close(any());
+
+        leakageDetectorRule.assertUnreleasedResourceCount(channel, 0);
+    }
+}